pygame - 移动图形(演员)

pygame - moving graphic (Actor)

我只是在用 Pygame 做一个小游戏。对象应该在屏幕上移动。当我尝试这样做时,"track" 总是被拖走(见图)。不画运动的"course"怎么才能移动苹果呢?

from random import randint
import pygame

WIDTH   = 800
HEIGHT  = 800

apple = Actor("apple")
apple.pos = randint(0, 800), randint(800, 1600)

score = 0

def draw():
    apple.draw()
    screen.draw.text("Punkte: " + str(score), (700, 5), color = "white")

def update():
    if apple.y > 0:
        apple.y = apple.y - 4
    else: 
        apple.x = randint(0, 800)
        apple.y = randint(800, 1600)

这不是纯粹的pygame,是Pygame Zero. You've to call screen.clear()每帧清除显示:

def draw():
    screen.clear()
    apple.draw()
    screen.draw.text("Punkte: " + str(score), (700, 5), color = "white")

每次更新时,使用 pygame.display.flip(),这会重置屏幕。 我也会考虑使用 while 循环,它会处理用户输入,绘制精灵,然后擦除屏幕,并在游戏结束时结束循环。

发生的事情是,苹果实际上没有被向下移动,而是在新坐标处被重绘了很多次。看来您正在使用内置的 class,所以我知道它有什么方法,因为我通常会创建自己的 class。如果您在主循环之前创建了 apple 对象,那么可以解决这个问题。然后在主循环中调用一个方法将苹果移动你想要的像素数然后使用 screen.blit()

更新位置

例如,您可以为您的苹果创建一个 class,class 将采用 4 个参数:pygame window、x 坐标、y 坐标、以及苹果图片的路径。

class Apple():
    def __init__(self, place, x, y, path,):
        self.place = place
        self.x = x
        self.y = y
        self.path = path 


    def load(self):
        screen.blit(self.path, (self.x, self.y))


    def move(self):
         if self.y > 0:
            self.y = self.y - 4
        else: 
            self.x = randint(0, 800)
            self.y = randint(800, 1600)

然后您将创建 apple 对象:

path = "path_to_the_image_of_the_apple"
apple_x = random.randint(0, 800)
apple_y = random.randint(0, 800)

apple = Apple(screen, apple_x, apple_y, path)

然后在主循环中调用一个方法先移动苹果,apple.move()然后更新位置apple.load()

主循环:

#main game loop
while True:
    #clear display
    screen.fill(0)

    #move call the function to move the apple
    apple.move()


    #updating the player
    apple.load()

    #update display
    pygame.display.flip() 

请注意,在 screen.blit(self.path, (self.x, self.y)) screen 中只是我代码中的变量。用你的替换它。