PyGame没有正确绘制圆圈

时间:2015-04-28 18:19:30

标签: python pygame

def collide(p1, p2):
    dx = p1.x - p2.x
    dy = p1.y - p2.y
    dist = math.hypot(dx, dy)

    if dist < p1.size + p2.size:
        for i in range (0,1):
            neutrList.append(Neutron(xxx,yyy))
        for k,neutroon in enumerate(neutrList):
            neutroon.verletUpdate(dt)
            neutroon.bounce()
            neutroon.display()       

screen = pygame.display.set_mode((width, height))
screen.fill(background_colour)
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    screen.fill(background_colour)

    for k, at in enumerate(partList):
        neutron.verletUpdate(dt)
        neutron.bounce()
        collide(at, neutron)
        if not len(neutrList):
            neutron.display()
        at.display()

    pygame.display.flip()
pygame.quit()

这是我的计划的一部分。我想绘制绿色圆圈远离蓝色圆圈。蓝色圆圈是静态的,很好。但是,不是绿色圆圈我得到这样的东西 enter image description here 我应该更改什么才能使我的代码正常工作?

中子类

class Neutron():
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.vx = 2.5
        self.vy = 0
        self.A = 235
        self.Z = 92
        self.size = 20
        self.colour = (0, 255, 0)
        self.thickness = 0

    def verletUpdate(self,dt):
        self.x = self.x + dt * self.vx
        self.y = self.y + dt * self.vy

    def display(self):
       pygame.draw.circle(screen, self.colour, (int(self.x), int(self.y)), self.size, self.thickness)

    def bounce(self):
        if self.x > width - self.size:
            self.x = 2*(width - self.size) - self.x
            self.vx = -self.vx

        elif self.x < self.size:
            self.x = 2*self.size - self.x
            self.vx = -self.vx

        if self.y > height - self.size:
            self.y = 2*(height - self.size) - self.y
            self.vy= -self.vy

        elif self.y < self.size:
            self.y = 2*self.size - self.y
            self.vy = -self.vy

1 个答案:

答案 0 :(得分:1)

我认为您看到涂片的原因是因为您正在绘制一大堆中子。您正在运行collide()函数时创建一个新的。见这一行:

neutrList.append(Neutron(xxx,yyy))

你正在为你的清单添加一个新的中子,当你去绘制它们时,你正在绘制它们,每个都有一个稍微不同的位置。您应该通过每帧打印len(neutrlist)来检查这一点,看看它是否在不断增长。

另外,为什么你的collide()功能绘制和创建中子?它应该根据碰撞调整位置/速度吗?使用碰撞检查功能绘制并创建碰撞的对象不是一个好的设计选择。中子绘图和创建应该在程序的其他地方进行。