如何让两个小部件碰撞得更近kivy

How to make two widgets collide closer kivy

我在一个小部件上有两个移动的小部件(省略号)和一个函数,它定义了当它们发生碰撞时要做什么,它工作正常,但当它们发生碰撞时它们之间会留下很多 space。

我不认为所有的代码都很重要,因为它太多了。

小部件基本上是这样构造的:

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 部分:

<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/

有什么简单的方法可以让它们碰撞的很近吗?

只需编写您自己的碰撞函数来执行您喜欢的任何邻近测试,然后调用它。内置方法只是对矩形小部件边界进行简单检查。

您可以用它覆盖现有方法,但这并不重要,可能只是个人喜好问题。

(编辑:根据你的图像,也许你想要圆碰撞,计算两个小部件中心之间的距离,如果它小于它们的半径之和,则为真,这可能是相等的如果它们是正方形并且圆形填充小部件,则为它们中任何一个的宽度。)