Eğlence ve pratik için Perl ve TK kullanarak hücresel otomatı (Conway'in Hayat Oyunu) yazdım. Konsol çıkışı ile iyi çalışıyor. TK kullandığımda, ilk sürümde sadece yeni hücreleri (dikdörtgenler) silip ekliyorum ve yaklaşık 100 adımdan sonra programım yavaşladı (yaklaşık 10 kez). Ardından grafik bölümünü yeniden yazdım: başlangıçta 2500 hücrenin tamamını (50x50) yaptı ve ardından onları ekleyip silmek yerine renklerini değiştirdi. Fakat 600-700 adımları geçtikten sonra yeniden işlenmiş otomatım da yavaşlamaya başlar.Tk kanvas neden bu kadar yavaş?
Bu, TK'nin bir özelliği/hatası mı, yoksa yanlış bir şey mi yapıyorum? Etikete göre
değiştirme rengi:
$canvas->itemconfigure("cell"."$x $y", -fill=>'blue');
oluşturma ızgara:
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"]);
}
}
start ve stop döngü: Ben tk tuval Widget yavaş olmakla ilgili bir makale bulunamadı
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();
}
}
Dikdörtgenler çizmek yerine bir görüntü oluşturup bunlarla çalışmak ister misiniz? Tamam, bunu deneyeceğim – spyder
@spyder Tuval, yapısal bir hipergrafik pencere öğesidir. Bu harika, tek tek pikselleri emmek dışında (her grafik öğesi karmaşık bir nesne modeline sahip olduğu için). Piksel çalışması için bir fotoğraf resmi çok daha verimli. –