2017-01-10 84 views
0

我想用一個大的重置按鈕製作一個計時器,但我不知道如何讓標籤節點顯示計時器(n)的當前值。蟒蛇3中的Labelnode計時器3

我試圖找到答案,但沒有任何幫助將不勝感激。

from scene import * 
    import sound 
    import random 
    import math 
    import time 
    A = Action 

    class MyScene (Scene): 
     def setup(self): 
     n = 20 
     Scene.background_color = 1.0, 1.0, 1.0 
     self.button = SpriteNode('IMG_4056.PNG') 
     self.button.position = (512, 400) 
     self.add_child(self.button) 
     self.time = LabelNode(str(n), font = ('courier', 50)) 
     self.time.position = (512, 100) 
     self.add_child(self.time) 
     self.life = LabelNode("Life", font = ('courier', 50)) 
     self.life.position = (512, 700) 
     self.add_child(self.life) 
     pass 


def did_change_size(self): 
    pass 

def update(self): 
    pass 

def touch_began(self, touch): 
    if touch.location in self.life.bbox: 
     n = 20 
     while (n >= 0): 
      self.time.remove_from_parent() 
      self.time = LabelNode(str(n - 1)) 
      self.add_child(self.time) 
      time.sleep(1) 
    pass 

def touch_moved(self, touch): 
    pass 

def touch_ended(self, touch): 
    pass 

    if __name__ == '__main__': 
     run(MyScene(), show_fps=True) 

回答

0

這是一個計時器的示例實現,我希望它有幫助。

import scene 

def custom_action(node, progress): 
    ntime = node.parent.duration 
    i = ntime - int(ntime*progress) 
    if i >= 0: 
     node.text = str(i) 

class MyScene(scene.Scene): 
    def setup(self): 
     self.test_label = scene.LabelNode('0', 
      position=self.size/2.0, parent=self) 
     self.duration = 10 
     self.activate_timer_label = scene.LabelNode('Activate Timer', 
      position=(self.size[0]/2-100, self.size[1]/2-100), 
      parent=self) 
     self.stop_timer_label = scene.LabelNode('Stop Timer', 
      position=(self.size[0]/2+100, self.size[1]/2-100), 
      parent=self) 

    def touch_began(self, touch): 
     if touch.location in self.stop_timer_label.frame: 
      animate_action = scene.Action.call(custom_action, self.duration) 
      self.test_label.remove_action('timer_action') 
      self.test_label.text = '0' 
      return 
     if touch.location in self.activate_timer_label.frame: 
      timer_action = scene.Action.call(custom_action, self.duration) 
      self.test_label.run_action(timer_action, 'timer_action') 

scene.run(MyScene())