繁体   English   中英

on_touch_move时on_touch_down不应更新计数器-Kivy

[英]on_touch_down shouldnt update counter when on_touch_move - kivy

我正在运行on_touch_down和on_touch_move,并且需要在移动完成或着陆完成时更新计数器。 但是我不想在我们刚触摸移动时更新触地。但是默认情况下即使它只是一个touch_move它仍然会加1触地,我认为这是因为在移动事件中检测到第一次触地,但是有什么办法解决这个问题:

下面是一个示例代码。

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout

class JB(BoxLayout):
    def __init__(self, **kwargs):
        super(JB, self).__init__(**kwargs)
        self.touch_move_count = 0
        self.touch_down_count = 0
        self.touch_move_Label = Label()
        self.touch_down_Label = Label()
        self.update_count()
        self.add_widget(self.touch_down_Label)
        self.add_widget(self.touch_move_Label)

    def update_count(self):
        self.touch_down_Label.text = "Touch Down Count : %s"%str(self.touch_down_count)
        self.touch_move_Label.text = "Touch Move Count : %s"%str(self.touch_move_count)

    def on_touch_down(self, touch):
        self.touch_down_count += 1
        print "down", self.touch_down_count
        self.update_count()

    def on_touch_move(self, touch):
        self.touch_move_count += 1
        print "moved", self.touch_move_count
        self.update_count()


class MyJBApp(App):
    def build(self):
        self.parent = JB()
        return self.parent

if __name__ == '__main__':
    MyJBApp().run()

在移动之前,您仍然需要按下按钮-会始终发送一次按下事件,因为此时应用程序不知道您是否要移动。 如果您想知道触摸是否发生而没有移动,那么也可以使用修饰:

def on_touch_down(self, touch):
    self.is_touch_down = True

def on_touch_up(self, touch):
    if self.is_touch_down:
        self.touch_down_count += 1
        print "down", self.touch_down_count
        self.update_count()
    self.is_touch_down = False

def on_touch_move(self, touch):
    self.is_touch_down = False
    self.touch_move_count += 1
    print "moved", self.touch_move_count
    self.update_count()

您还可以通过将接收到的触摸保存在on_touch_down ,然后在on_touch_up中检查位置是否在某个公差范围内(例如4px之类),来做一些更复杂的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM