我试图通过自己的coockie-clicker制作,所以我创建了一个kivy小部件并宣布了一个coockie的图像作为它的一部分。 每次单击wiget时,计数器都会上升,并且数字会显示在标签上。 一切顺利,我在这里得到了堆叠溢出的帮助,但是现在我遇到了问题,那个广泛的是大的,所以即使我点击右上角,计数器上升,aldoug我没有点击在coockie上。 这是源代码:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.core.window import Window
from kivy.clock import Clock
from kivy.animation import Animation
from kivy.core.text.markup import *
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import NumericProperty
from kivy.properties import StringProperty
Builder.load_string('''
<Root>:
Kecks:
pos: 300, 300
size: 100, 100
<Kecks>:
Image:
pos: root.pos
id: my_image
source: root.weg
Label:
id: my_Label
font_size: 50
text: root.txt
center_x: 345
center_y: 200
''')
class Root(FloatLayout):
def __init__(self, *args, **kwargs):
super(Root, self).__init__(*args, **kwargs)
class Kecks(Widget):
count = NumericProperty(0)
amount = NumericProperty(1)
txt = StringProperty()
level = NumericProperty(1)
weg = StringProperty('piernik.png')
def __init__(self, *args, **kwargs):
super(Kecks, self).__init__(*args, **kwargs)
#self.txt = str(self.count)
Clock.schedule_interval(self.Update, 1/60.)
def Update(self, *args):
self.txt = str(self.count)
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
self.count += self.amount
class app(App):
def build(self):
Window.clearcolor = (10, 0, 0, 1)
return Root()
if __name__ == "__main__":
app().run()
答案 0 :(得分:2)
问题是你没有在你想要触发该事件的区域上定义 collide_points 。
考虑您是否希望 my_image 上的 collide_points 触发 on_touch_down 事件,您需要像这样调整:
def on_touch_down(self, touch):
# to check if touch.pos collides on my_image
if self.ids.my_image.collide_point(*touch.pos):
self.count += self.amount
也许可以考虑使用pos_hint和size_hint,因为这些可以帮助您与在不同设备(例如屏幕大小)中运行的应用程序保持一致,而不是使用绝对大小和/或位置
希望这有帮助。