英文:
Program with Perl's Term::Animation quits prematurely
问题
当尝试通过按下"d"
或"a"
键来移动对象时,Perl退出。我认为问题与未定义的quit()
函数有关。为了解决这个问题,我尝试使用Curses
库中的endwin()
函数来正确结束程序执行。
if ($in eq 'q') {
endwin(); # 正确终止程序执行
last;
}
更多内容继续出现
use strict;
use warnings;
use Curses;
use Term::Animation;
my $anim = Term::Animation->new();
# 设置对象的起始位置
my $x = 0;
$anim->new_entity(
shape => ['@'], # 对象的符号
position => [$x, 0, 0],
auto_trans => 1,
);
halfdelay(1);
while (1) {
my $in = lc(getch());
if ($in eq 'q') {
quit(); # 退出
}
elsif ($in eq 'r') {
last; # 重新绘制(将重新创建所有对象)
}
elsif ($in eq 'p') {
$anim->pause(!$anim->paused()); # 暂停或恢复动画
}
elsif ($in eq 'd' || $in eq KEY_RIGHT) {
# 向右移动(增加x位置)
$x++;
$anim->set_entity_position(0, $x, 0, 0);
}
elsif ($in eq 'a' || $in eq KEY_LEFT) {
# 向左移动(减少x位置)
$x--;
$anim->set_entity_position(0, $x, 0, 0);
}
$anim->animate(); # 更新动画
}
$anim->update_term_size();
$anim->remove_all_entities();
请注意,代码中的注释已被翻译。
英文:
When trying to move the object by pressing "d"
or "a"
perl quits.
I thought the problem was related to using the quit()
function which was not defined. To fix this, I tried using the endwin()
function from the Curses
library to end the program correctly.
if ($in eq 'q') {
endwin(); # Terminate program execution correctly
last;
}
More kept coming out
use strict;
use warnings;
use Curses;
use Term::Animation;
my $anim = Term::Animation->new();
# Set the starting position of the object
my $x = 0;
$anim->new_entity(
shape => ['@'], # Symbol of the object
position => [$x, 0, 0],
auto_trans => 1,
);
halfdelay(1);
while (1) {
my $in = lc(getch());
if ($in eq 'q') {
quit(); # exit
}
elsif ($in eq 'r') {
last; # Redraw (will recreate all objects)
}
elsif ($in eq 'p') {
$anim->pause(!$anim->paused()); # Pause or resume the animation
}
elsif ($in eq 'd' || $in eq KEY_RIGHT) {
# Move right (increment x position)
$x++;
$anim->set_entity_position(0, $x, 0, 0);
}
elsif ($in eq 'a' || $in eq KEY_LEFT) {
# Mover para a esquerda (decrementar a posição x)
$x--;
$anim->set_entity_position(0, $x, 0, 0);
}
$anim->animate(); # Update the animation
}
$anim->update_term_size();
$anim->remove_all_entities();
答案1
得分: 1
"It's being hidden but the program is dying with the error:
> Can't locate object method "set_entity_position" via package "Term::Animation"
And indeed, I see no such method in the docs.
Term::Animation::Entity have a position
method which can be used to change their position. Of course, you will need to obtain the entity you want to move first. ->new_entity
returns a reference to the entity it creates.
Regarding quit()
, you should be using
$anim->end();
to set the screen back to normal, followed by
last; # Exit loop (which exits the program)
or
exit; # Exit the program directly.
This suggests the r
key doesn't do what you expect it to do."
英文:
It's being hidden but the program is dying with the error
> Can't locate object method "set_entity_position" via package "Term::Animation"
And indeed, I see no such method in the docs.
Term::Animation::Entity have a position
method which can be used to change their position. Of course, you will need to obtain the entity you want to move first. ->new_entity
returns a reference to the entity is creates.
Regarding quit()
, you should be using
$anim->end();
to set the screen back to normal, followed by
last; # Exit loop (which exits the program)
or
exit; # Exit the program directly.
This suggests the r
key doesn't do what you expect it to do.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论