我在一个小部件上有两个移动的小部件(椭圆)和一个定义当它们碰撞时要做什么的功能,它可以正常工作但在碰撞时会在它们之间留下很多空间。
我并不认为所有代码都很重要,因为它非常重要。
小部件基本上是这样构建的:
class Snake(Widget):
velocity_x = NumericProperty(0)
velocity_y = NumericProperty(0)
velocity = ReferenceListProperty(velocity_x, velocity_y)
def move(self):
self.pos = Vector(*self.velocity) + self.pos
class EvilSnake(Widget):
velocity_x = NumericProperty(0)
velocity_y = NumericProperty(0)
velocity = ReferenceListProperty(velocity_x, velocity_y)
class SnakeGame(Widget):
evil_snaky = ObjectProperty(None)
snaky = ObjectProperty(None)
def __init__(self, *args, **kwargs):
super(SnakeGame, self).__init__(*args, **kwargs)
Clock.schedule_interval(self.update, 1/60.)
def begin(self, vel=(1, 0), *args):
#begin method
def game_over(self, *args):
# game over method
def update(self, dt, *args):
#methodes for movement
#snakes collide:
if self.snaky.collide_widget(self.evil_snaky):
self.game_over()
.kv part:
<Snake>:
size: 50, 50
canvas:
Color:
rgba: 1,1,1,1
Ellipse:
pos: self.pos
size: self.size
<EvilSnake>:
size: 50, 50
canvas:
Color:
rgba: 1,1,1,1
Ellipse:
pos: self.pos
size: self.size
<SnakeGame>:
snaky: snake
evil_snaky: evilsnake
# canvas instructions
Snake:
id: snake
center: self.parent.center
EvilSnake:
id: evilsnake
center: self.parent.center[0]-70, self.parent.center[1]
它们发生碰撞,碰撞方法确实做了应有的事情,但我想要的速度要快得多。当它们发生碰撞时,它看起来像这样: http://postimg.org/image/uir5jqpht/
有没有简单的方法可以让它们真正碰撞?
答案 0 :(得分:2)
只需编写自己的碰撞功能,执行您喜欢的任何接近度测试,然后调用它。内置方法只是对矩形小部件边界进行简单检查。
您可以使用此方法覆盖现有方法,但这并不重要,可能只是品味问题。
(编辑:根据你的图像,也许你想要圆形碰撞,计算两个小部件中心之间的距离,如果它小于它们的半径之和,则返回True,这可能等于任何一个的宽度如果它们是正方形并且圆圈填充小部件,那么它们。)