Pythonista 3中的Labelnode计时器

时间:2017-01-10 01:18:29

标签: python-3.x timer pythonista

我想制作一个带有大重置按钮的计时器,但我不知道如何让标签节点显示计时器的当前值(n)。

我试图找到答案,但没有任何帮助,我们将不胜感激。

    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)

1 个答案:

答案 0 :(得分: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())