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
中只是我代码中的变量。用你的替换它。
我只是在用 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
中只是我代码中的变量。用你的替换它。