on_touch_move时,on_touch_down不应该更新计数器 - kivy

时间:2014-05-02 07:36:51

标签: python 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()

1 个答案:

答案 0 :(得分:1)

在移动之前你仍然按下按钮 - 总是会发送一个降落事件,因为在那一刻,应用程序不知道你是否会移动。如果你想知道如果没有移动就发生了触摸,你也可以使用补漆:

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或其他)来做更精细的事情。