Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我在pygame上的圈子不断地消失和重新繁殖?_Python_Pygame_Display - Fatal编程技术网

Python 为什么我在pygame上的圈子不断地消失和重新繁殖?

Python 为什么我在pygame上的圈子不断地消失和重新繁殖?,python,pygame,display,Python,Pygame,Display,当我运行这个程序时,我希望游戏在随机位置产生一个较大的可移动点和数百个较小的不可移动点。然而,当我运行程序时,较小的点不断地消失和重生。我认为它与pygame.display.update()函数有关,但我不能完全确定。如何解决此问题 from pygame import * import random as rd p_1_x = 200 p_1_y = 200 p_1_change_x = 0 init() screen = display.set_mode((800, 600)) d

当我运行这个程序时,我希望游戏在随机位置产生一个较大的可移动点和数百个较小的不可移动点。然而,当我运行程序时,较小的点不断地消失和重生。我认为它与pygame.display.update()函数有关,但我不能完全确定。如何解决此问题

from pygame import *
import random as rd

p_1_x = 200
p_1_y = 200
p_1_change_x = 0

init()
screen = display.set_mode((800, 600))


def p_1(x, y):
    player_1 = draw.circle(screen, (0, 0, 0), (x, y), 15)


def drawwing():
    for i in range(0, 250):
        x = rd.randint(100, 700)
        y = rd.randint(100, 500)
        dot = draw.circle(screen, (55, 255, 155), (x, y), 5)


while True:
    for events in event.get():
        if events.type == QUIT:
            quit()
        if events.type == KEYDOWN:
            if events.key == K_RIGHT:
                p_1_change_x = 1
            if events.key == K_LEFT:
                p_1_change_x = -1

        if events.type == KEYUP:
            if events.key == K_RIGHT or K_LEFT:
                p_1_change_x = 0
                p_1_change_y = 0

    screen.fill((255, 255, 255))
    p_1_x += p_1_change_x

    p_1(p_1_x, p_1_y)
    display.update()
    drawwing()
    display.update()

如果您想要固定点,请使用类似以下内容:

dots = list((rd.randint(100,700),rd.randint(100,500)) for i in range(0,250))

def drawwing():
    for x,y in dots:
        draw.circle(screen, (55, 255, 155), (x, y), 5)

我给点上了一节课:

class Dot():
    SIZE = 5
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def draw(self):
        draw.circle(screen, self.color, (self.x, self.y), Dot.SIZE)
然后我制作了一个数组,生成了
数量的\u点
,如下所示:

dots = []

for i in range(NUMBER_OF_DOTS):
    x = rd.randint(100, 700)
    y = rd.randint(100, 500)
    dots.append(Dot(x,y))
while True:
    screen.fill((255, 255, 255))
    ...
    for dot in dots:
        dot.draw()
while
循环中,用白色填充整个场景后,重新绘制所有点,如下所示:

dots = []

for i in range(NUMBER_OF_DOTS):
    x = rd.randint(100, 700)
    y = rd.randint(100, 500)
    dots.append(Dot(x,y))
while True:
    screen.fill((255, 255, 255))
    ...
    for dot in dots:
        dot.draw()
快乐编码

这是您的程序,而不是pygame。每次通过循环时都显式调用drawwing()函数!如果你想在后面的房间里有一个静态星光场,你必须保存所有小点的位置,或者用可重复的算法生成它们,而不是用randint()。保存它们位置的最佳方法是什么?请参阅我的答案以获得一个可能的解决方案。注意:您不需要两个更新调用。另外,如果你想让大圆点出现在小点的前面,那就在小点之后而不是之前画。