这是一个可以在他的计算机上运行的整体代码
main.py
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
class SnakeGame(FloatLayout):
pass
class SnakeGameApp(App):
def build(self):
return SnakeGame()
if __name__ == '__main__':
SnakeGameApp().run()
snakegame.kv
#: include snake.kv
<SnakeGame>:
Snake:
pos: 300, 300
snake.py
# Control object for the Snake view object in snake.kv
class Snake(Widget):
def move(self):
print("Moving")
snake.kv
#: import Widget kivy.uix.widget.Widget
<Snake@Widget>:
size_hint: None, None
size: 15, 15
canvas:
Color:
rgba: 1, 0, 0, 1
Rectangle:
pos: self.pos
size: self.size
on_touch_down: self.move() # There is an error here: Snake object has
# no attribute move.
# How can i connect to the snake.py
# file here the same it was automatically
# connecting the SnakeGame class in the main.py
# file with the SnakeGame class in the snakegame.py file
# ???
snake.kv文件中存在错误:Snake对象没有属性移动。 我如何在这里连接到snake.py文件,就像在自动连接main.py文件中的SnakeGame类和snakegame.py文件中的SnakeGame类一样?
非常感谢。
我已经进行了广泛的谷歌搜索,但是找不到任何有用的东西。
答案 0 :(得分:0)
on_touch_down
事件甚至在蛇对象之外也被触发。
args[1]
添加到self.move()
,即self.move(args[1])
if self.collide_point(*touch.pos):
。默认情况下,触摸事件将分派给所有当前显示的事件 小部件。这意味着小部件会接收触摸事件,无论它是否发生 不在他们的物理区域内。
为了提供最大的灵活性,Kivy派遣了 所有小部件的事件,并让他们决定如何对它们做出反应。 如果您只想响应小部件内的触摸事件,则可以 只需检查:
def move(self, touch): if self.collide_point(*touch.pos): # The touch has occurred inside the widgets area. Do stuff! pass
class Snake(Widget):
def move(self, touch):
if self.collide_point(*touch.pos):
print("Moving")
return True # consumed touch and don't propagate touch event
return super(Snake, self).on_touch_down(touch)
<Snake@Widget>:
替换为class rule,<Snake>:
,因为Widget的继承已在中定义snake.py import
语句#:import Widget kivy.uix.widget.Widget
import
语句,在{em> snake.kv 中,添加from snake import Snake
OR ,添加{ {1}}条语句,import
#:import Snake snake.Snake
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from snake import Snake
class SnakeGame(FloatLayout):
pass
class SnakeGameApp(App):
def build(self):
return SnakeGame()
if __name__ == '__main__':
SnakeGameApp().run()
答案 1 :(得分:0)
你好,我认为刚刚找到了答案
您只需要像下面这样在snake.kv文件中进行导入:
#: import Snake snake.Snake