【发布时间】:2017-05-13 04:20:44
【问题描述】:
现在我试图做到这一点,而不是点击移动 PlayerImage 我想使用箭头键,我尝试先实现左右,但是当我测试它时,我得到了这个:
完整追溯:
Traceback (most recent call last):
File "/Users/acrobat/Desktop/dive/test.py", line 91, in <module>
runTouchApp(root)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/kivy/base.py", line 487, in runTouchApp
EventLoop.window.mainloop()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/kivy/core/window/window_pygame.py", line 403, in mainloop
self._mainloop()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/kivy/core/window/window_pygame.py", line 370, in _mainloop
self.modifiers):
File "kivy/_event.pyx", line 714, in kivy._event.EventDispatcher.dispatch (/private/var/folders/42/pdwcpzkj0j56rssch8hjpwnm0000gn/T/pip-build-oh1mgzrd/kivy/kivy/_event.c:8119)
File "kivy/_event.pyx", line 1224, in kivy._event.EventObservers.dispatch (/private/var/folders/42/pdwcpzkj0j56rssch8hjpwnm0000gn/T/pip-build-oh1mgzrd/kivy/kivy/_event.c:14008)
File "kivy/_event.pyx", line 1148, in kivy._event.EventObservers._dispatch (/private/var/folders/42/pdwcpzkj0j56rssch8hjpwnm0000gn/T/pip-build-oh1mgzrd/kivy/kivy/_event.c:13537)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/kivy/core/window/__init__.py", line 159, in _on_window_key_down
return self.dispatch('on_key_down', keycode, text, modifiers)
File "kivy/_event.pyx", line 714, in kivy._event.EventDispatcher.dispatch (/private/var/folders/42/pdwcpzkj0j56rssch8hjpwnm0000gn/T/pip-build-oh1mgzrd/kivy/kivy/_event.c:8119)
File "kivy/_event.pyx", line 1224, in kivy._event.EventObservers.dispatch (/private/var/folders/42/pdwcpzkj0j56rssch8hjpwnm0000gn/T/pip-build-oh1mgzrd/kivy/kivy/_event.c:14008)
File "kivy/_event.pyx", line 1148, in kivy._event.EventObservers._dispatch (/private/var/folders/42/pdwcpzkj0j56rssch8hjpwnm0000gn/T/pip-build-oh1mgzrd/kivy/kivy/_event.c:13537)
TypeError: on_keyboard_down() takes 2 positional arguments but 5 were given
PlayerImage类
class PlayerImage(Image):
angle = NumericProperty(0)
def __init__(self,**kwargs):
super(PlayerImage, self).__init__(**kwargs)
self.states = {"personred/rest.png/": 0,
"person.zip/": 1}
self.currentstate = self.states["personred/rest.png/"]
self.art = "./rpgArt/" + str(self.currentstate)
self._keyboard = Window.request_keyboard(self,None)
if not self._keyboard:
return
self._keyboard.bind(on_key_down=self.on_keyboard_down)
def on_keyboard_down(self, keycode): # KEYBOARD FUNC
if keycode[1] == "right":
self.x += 10
if keycode[1] == "left":
self.x -= 10
def on_touch_down(self, touch):
self.currentstate = self.states["person.zip/"]
Animation.cancel_all(self)
angle = degrees(atan2(touch.y - self.center_y,
touch.x - self.center_x))
Animation(center=touch.pos, angle=angle).start(self)
self.currentstate = self.states["personred/rest.png/"]
我的构建:
Builder.load_string('''
<PlayerImage>:
canvas.before:
PushMatrix
Rotate:
angle: self.angle
axis: (0, 0, 1)
origin: self.center
canvas.after:
PopMatrix
<PlayerImage2>:
canvas.before:
PushMatrix
Rotate:
angle: self.angle
axis: (0, 0, 1)
origin: self.center
canvas.after:
PopMatrix
''')
第二次构建:
root = Builder.load_string('''
Widget:
Widget:
PlayerImage:
source: './rpgArt/person.zip'
allow_stretch: True
keep_ratio: True
''')
【问题讨论】:
标签: python-3.x kivy