簡體   English   中英

PyGame沒有正確繪制圓圈

[英]PyGame is not drawing circles properly

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()

這是我程序的一部分。 我想畫一個遠離藍色圓圈的綠色圓圈。藍色圓圈是靜態的並且很好。 但是我得到的不是綠色圓圈 在此處輸入圖片說明 我應該更改些什么以使我的代碼正常工作?

中子級

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

我認為您看到該塗片的原因是因為您正在吸引一大堆中子。 您在運行collide()函數時正在創建一個新的。 看到這一行:

neutrList.append(Neutron(xxx,yyy))

您要在列表中添加一個新的中子,然后繪制它們時,就繪制了所有中子,每個位置略有不同。 您應該通過每幀打印len(neutrlist)來檢查它,看看它是否一直在增長。

另外,為什么要使用collide()函數繪制並創建中子? 是否應該僅根據碰撞來調整其位置/速度? 具有碰撞檢查功能繪制並創建碰撞對象的方法不是一個好的設計選擇。 中子繪制和創建應該在程序的其他地方進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM