2012-12-18 20 views
5

मैं सेलुलर automaton (जीवन के कोनवे के खेल) पर्ल और टी का उपयोग कर लिखा है, सिर्फ मनोरंजन और अभ्यास के लिए। यह कंसोल आउटपुट के साथ ठीक काम करता है। जब मैं टी का उपयोग करें, पहले संस्करण में मैं सिर्फ हटा सकते हैं और नई कोशिकाओं (आयतों) जोड़ने के लिए, और के बारे में 100 कदम के बाद मेरे कार्यक्रम (लगभग 10 बार) नीचे धीमी कर दी है। तब मैं ग्राफिक्स हिस्सा दुबारा लिखा: शुरू में उनके रंग बदलना बजाय जोड़ने/उन्हें हटाने 2500 कोशिकाओं (50x50) और फिर सभी को बनाया है। लेकिन 600-700 चरणों के बाद मेरे पुनर्वित्तित automaton भी धीमा शुरू होता है।रुपये कैनवास इतना धीमा क्यों है?

यह एक सुविधा/टी के बग है या मैं कुछ गलत करते हैं?

टैग द्वारा बदलने का रंग:

$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"]); 
    } 
} 

आरंभ और रोक पाश:

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(); 
    } 
} 

उत्तर

1

मैं टी कैनवास विजेट धीमी गति से होने के बारे में लेख नहीं मिले कई वस्तुओं के साथ। समस्या बहुत आपकी समस्या के समान लगता है:

http://code.activestate.com/lists/perl-tk/17282/

समाधान TK तस्वीर विजेट जो काफी एक बिटमैप की तरह बर्ताव उपयोग करने के लिए हो सकता है। यह आपके कोड को अनुकूलित करने के लिए थोड़ा दर्द होगा लेकिन ऐसा लगता है कि कैनवास विजेट कई ऑब्जेक्ट्स के साथ स्वाभाविक रूप से धीमा है।

+0

बनाएं और आयतों ड्राइंग के बजाय छवि के साथ काम कर रहा? ठीक है, मैं इस – spyder

+0

कोशिश करता हूँ @spyder कैनवास एक संरचित hypergraphics विजेट है। यह बढ़िया है, सिवाय इसके कि यह व्यक्तिगत पिक्सेल पर बेकार है (क्योंकि प्रत्येक ग्राफिक्स तत्व में एक जटिल ऑब्जेक्ट मॉडल है)। पिक्सेल काम के लिए, एक फोटो छवि कहीं अधिक कुशल है। –

संबंधित मुद्दे