我使用Perl和TK编写了元胞自动机(Conway的生命游戏),只是为了娱乐和练习.它适用于控制台输出.当我使用TK时,在第一个版本中我只删除并添加新单元格(矩形),大约100步后我的程序减慢了(大约10次).然后我重写了图形部分:最初制作所有2500个单元格(50x50),然后改变颜色而不是添加/删除它们.但经过600-700步后,我重新设计的自动机也开始减速.
这是传统知识的特征/错误还是我做错了什么?
按标签更改颜色:
$canvas->itemconfigure("cell"."$x $y", -fill=>'blue');
Run Code Online (Sandbox Code Playgroud)
创建网格:
for($y = 0; $y < 50; $y++)
{
for($x = 0; $x < 50; $x++)
{
$canvas->createRectangle($x * 10, $y * 10, ($x + 1) * 10, ($y + 1) * 10, -fill=>'white', -tags=>["cell"."$x $y"]);
}
}
Run Code Online (Sandbox Code Playgroud)
启动和停止循环:
sub start
{
$repeat = $MainWindow->repeat($speed, sub{&maketurn;});
# Function "maketurn" is not important, it is a simple counting of "alive" cells
# and changing color by tag
}
sub stop
{
if(defined($repeat))
{
$repeat->cancel();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
我发现一篇关于 tk canvas 小部件在处理许多项目时速度缓慢的文章。该问题听起来与您的问题非常相似:
http://code.activestate.com/lists/perl-tk/17282/
解决方案可能是使用 tk 照片小部件,其行为非常类似于位图。调整您的代码会有点痛苦,但似乎画布小部件对于许多对象来说本质上很慢。
归档时间: |
|
查看次数: |
593 次 |
最近记录: |