簡體   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