我有一个围绕屏幕运行的角色,以及一张树的图像。我有collide_widget工作,所以当角色进入树时,它返回True。问题是我试图阻止角色跑过树,树应该阻止角色的移动。我试图做的是当从左边跑进树时停止向左移动角色。当我这样做它工作,然后我可以使用向上,向下或向右键逃离树。但是,如果我将此代码用于所有方向,则一旦collide_widget(树)为True,它就会阻止我在任何方向上离开树。我理解这个问题,但我不确定解决方案。有一个更好的方法吗?这是代码的一部分。在碰撞发生之前,是否可能只是停止运动?
def on_keyboard_down(self, keyboard, keycode, text, modifiers):
if keycode[1] == 'left':
print self.pos
print self.app.tree.pos
self.source = 'selectionscreen/left.zip'
self.anim_delay=.20
if self.x < (Window.width * .25):
bglayout.x += 4
else: #collide widget code
if self.collide_widget(self.app.tree)
self.x -= 0
else:
self.x -= 6
elif keycode[1] == 'right':
self.source ='selectionscreen/right.zip'
self.anim_delay=.20
if self.x > (Window.width * .70):
bglayout.x -= 4
else:
self.x += 6
elif keycode[1] == 'down':
self.source ='selectionscreen/right.zip'
self.anim_delay=.20
if self.y < (Window.height * .25):
bglayout.y += 4
else:
self.y -= 6
elif keycode[1] == 'up':
self.source = 'selectionscreen/back.zip'
self.anim_delay=.1
if self.y > (Window.height * .70):
bglayout.y -= 4
else:
self.y += 6
else:
return False
return True
def on_keyboard_up(self, keyboard, keycode):
if keycode[1] == 'left':
self.source = 'selectionscreen/left1.png'
elif keycode[1] == 'right':
self.source ='selectionscreen/right1.png'
elif keycode[1] == 'down':
self.source ='selectionscreen/right1.png'
elif keycode[1] == 'up':
self.source ='selectionscreen/back2.png'
else:
return False
return True
答案 0 :(得分:-1)
你可以先复制x和y(也可以复制到前一个x和前一个y),移动播放器,检查collideWidget是否为真,如果是,则在你移动之前分配旧的值,就好像什么都没发生一样。