저는 재미와 연습을 위해서 Perl과 TK를 사용하여 셀룰라 오토 마톤 (Conway 's Game of Life)을 작성했습니다. 그것은 콘솔 출력과 함께 잘 작동합니다. 내가 TK를 사용할 때 첫 번째 버전에서 나는 새 셀 (직사각형)을 삭제하고 추가하고 약 100 단계 후에 내 프로그램이 느려졌습니다 (약 10 회). 그런 다음 그래픽 부분을 다시 작성했습니다. 처음에는 2500 개의 셀 (50x50)을 모두 만든 다음 추가/삭제하는 대신 색상을 변경했습니다. 그러나 600-700 단계 후에는 재 작업 된 오토 마톤도 역시 느려지 기 시작합니다.Tk 캔버스가 왜 그렇게 느린가요?
TK의 기능/버그입니까? 아니면 이상합니까? 태그에 의해
변경 색상 :
$canvas->itemconfigure("cell"."$x $y", -fill=>'blue');
만들기 그리드 :
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"]);
}
}
시작 및 정지 루프 : 나는 TK 캔버스 위젯이 느리다에 대한 기사를 발견
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();
}
}
그리기 직사각형 대신 이미지를 만들어서 사용할 수 있습니까? 좋아, 시도해 보겠습니다. – spyder
@spyder 캔버스는 구조화 된 하이퍼 그래프 위젯입니다. 각 픽셀 요소가 복잡한 개체 모델을 가지고 있기 때문에 개별 픽셀을 망칠뿐입니다. 픽셀 작업의 경우 사진 이미지가 훨씬 효율적입니다. –