0

我正在从文件中读取数据。基本上,这些是我希望我的球在每次迭代后出现的坐标。代码工作正常,除了输出窗口“试用 1”在我按下退出按钮后立即崩溃。这个问题在我添加之前不存在for t in range (np.size(T)):;但是我要求这样做。请建议对代码进行一些可能的更改以解决问题。

import numpy as np
import pygame

pygame.init()

T = np.loadtxt('xy_shm1.txt', usecols=range(0,1))
Xcor = np.loadtxt('xy_shm1.txt', usecols=range(1,2))
Ycor = np.loadtxt('xy_shm1.txt', usecols=range(2,3))

clock = pygame.time.Clock()

background_colour = (255,255,255)
(width, height) = (800, 800)

class Particle():
    def __init__(self, xy, size):
        self.x, self.y = xy
        self.size = size
        self.colour = (0, 0, 255)
        self.thickness = 1


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


    def move(self):

        self.x = Xcor[t] + 400
        self.y = Ycor[t] + 400

screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Trial 1')

number_of_particles = 1
my_particles = []

for n in range(number_of_particles):
    size = 5
    x = Xcor[0] + 400
    y = Ycor[0] + 400
    particle = Particle((x, y), size)

    my_particles.append(particle)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False



    for t in range(np.size(T)):

        screen.fill(background_colour)

        for particle in my_particles:

            particle.move()
            particle.display()

        pygame.display.flip()
        clock.tick(60)



pygame.quit()
4

1 回答 1

0

主要问题是您试图在一个框架内绘制多个框架。帧循环应如下所示:

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Draw one frame here

    clock.tick(60) # If the game runs faster than 60fps, wait here

请注意,在 while 循环的每次迭代中,仅绘制一帧。但是,在您当前的代码中,您启动循环,检查一次事件,然后为列表中的每个项目绘制一个框架,而无需再次检查事件。

这很可能会导致 QUIT 事件被错过,并且操作系统会因为游戏似乎没有响应而进行干预。

通常,您的代码非常混乱。我建议你阅读一些关于 pygame 的教程,否则你会遇到各种类似的问题。参见例如:http ://programarcadegames.com/python_examples/f.php?file=bouncing_rectangle.py

于 2016-11-24T12:12:13.387 回答