我在Kivy中创建了自己的操纵杆,每当我移动它时,角色也会移动。我想要它,这样每当我移动时,矩形(角色)的源图像就会改变,使它看起来像是在行走,但在这段代码中,只有当我将操纵杆放在某个方向时,它才会改变。有可能吗
还有一个问题,我想让角色在操纵杆处于边缘时仍在移动,在这段代码中,每当我停止移动操纵杆时,它也会停止
这里是main.py
class Controller(Widget):
control = ObjectProperty(None)
def __init__(self, **kwargs):
super(Controller, self).__init__(**kwargs)
with self.canvas:
self.rect = Rectangle(pos=(300, 300), size=(50, 50))
def on_touch_move(self, touch):
addx = int(touch.x)-50
addy = int(touch.y)-50
print(str(addx) + " " + str(addy))
self.control.size = 95, 95
if addx >= 90:
addx = 90
if addy >= 90:
addy = 90
if addx <= 10:
addx = 10
if addy <= 10:
addy = 10
if addx > 50:
self.rect.pos = self.rect.pos[0] + 2, self.rect.pos[1]
self.rect.source = "assets/faceleft_rightfootinfront.png"
if addy > 50:
self.rect.pos = self.rect.pos[0], self.rect.pos[1] + 2
self.rect.source = "assets/faceleft_leftfootinfront.png"
if addx < 50:
self.rect.pos = self.rect.pos[0] - 2, self.rect.pos[1]
self.rect.source = "assets/faceright_leftfootinfront.png"
if addy < 50:
self.rect.pos = self.rect.pos[0], self.rect.pos[1] - 2
self.rect.source = "assets/faceright_rightfootinfront.png"
self.control.pos = addx, addy
def on_touch_down(self, touch):
pass # Overriding so it doesnt turn blue
def on_touch_up(self, touch):
self.control.pos = (50, 50) # Return to original position
self.control.size = 100, 100
此处main.kv
<Controller>
control: control
Button:
id: control
background_normal: "assets/controller.png"
pos: 50, 50
<Character>
character: character
Rectangle:
id: character
size: 25, 25
pos: 400, 400
您的
self.rect.source
在每次鼠标移动时都会更改两次,因此只有最后一次更改才会生效。在if addx
和if addy
条件系列中,其中两个条件每次都是True
。也许确定self.rect.source
更改的不同代码块会更好为了让运动继续,您只需要使用
Clock.schedule_interval()
来安排连续运动。下面是Controller
类的一个修改版本,它可以:相关问题 更多 >
编程相关推荐