Tôi đã viết automaton di động (Conway's Game of Life) sử dụng Perl và TK, chỉ để cho vui và thực hành. Nó hoạt động tốt với đầu ra console. Khi tôi sử dụng TK, trong phiên bản đầu tiên tôi chỉ cần xóa và thêm các ô mới (hình chữ nhật), và sau khoảng 100 bước chương trình của tôi đã bị chậm lại (khoảng 10 lần). Sau đó, tôi viết lại phần đồ họa: ban đầu tạo ra tất cả 2500 ô (50x50) và sau đó thay đổi màu của chúng thay vì thêm/xóa chúng. Nhưng sau 600-700 bước automaton làm lại của tôi bắt đầu làm chậm quá.Tại sao vải Tk lại quá chậm?
Đây là một tính năng/lỗi của TK hoặc tôi làm điều gì đó sai?
Thay đổi màu sắc bằng cách tag:
$canvas->itemconfigure("cell"."$x $y", -fill=>'blue');
Tạo lưới:
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 và ngăn chặn vòng lặp:
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();
}
}
Tạo và làm việc với hình ảnh thay vì vẽ hình chữ nhật? Ok, tôi sẽ thử này – spyder
@spyder Canvas là một tiện ích siêu văn bản có cấu trúc. Điều đó thật tuyệt vời, ngoại trừ nó hút ở các pixel riêng lẻ (vì mỗi phần tử đồ họa có một mô hình đối tượng phức tạp). Đối với công việc pixel, hình ảnh ảnh hiệu quả hơn nhiều. –