我正在做一个游戏,在这个游戏中,我有一个物体从游戏屏幕的顶部掉下来。当对象的y>;=200时,我希望对象用随机的x位置重新绘制。我试着编写代码,但没用。我怀疑我在哪里重新画这个物体有问题。有人能指出我的错误吗?你知道吗
问题出在draw()
Python
# IMPORTS
import pygame, random
# GLOBALS
global screen, displayW, displayH
global clock, FPS
global end, food, player
# SETGLOBALVALUES
def setGlobalValues():
global screen, displayW, displayH
global clock, FPS
global end, food, player
displayW = 800
displayH = 600
screen = pygame.display.set_mode((displayW, displayH))
clock = pygame.time.Clock()
FPS = 60
end = False
food = Food()
player = Player()
# MAIN
def main():
pygame.init()
setGlobalValues()
setup()
gameLoop()
quitGame()
# GAMELOOP
def gameLoop():
global end, player
while(not end):
for event in pygame.event.get():
# ONCLICK QUIT
if(event.type == pygame.QUIT):
end = True;
# KEYDOWN
if(event.type == pygame.KEYDOWN):
if(event.key == pygame.K_LEFT):
player.velX -= 10
if(event.key == pygame.K_RIGHT):
player.velX += 10
# KEYUP
if(event.type == pygame.KEYUP):
if(event.key == pygame.K_LEFT):
player.velX = 0
if(event.key == pygame.K_RIGHT):
player.velX = 0
draw()
animate()
collision()
setFPS()
# DRAW
def draw():
global screen, food, player
# fill background
screen.fill((255, 255, 255))
player.draw()
if player.y >= 200:
player.draw()
food.draw()
# update
pygame.display.update()
# ANIMATE
def animate():
global food, player
food.animate()
player.animate()
# COLLISION
def collision():
player.collision()
# SETFPS
def setFPS():
global clock, FPS
clock.tick(FPS);
# CLASSES
class Food():
def __init__(self, img="", x=0, h=0, velY=0, color=()):
global displayW
self.img = pygame.image.load("assets/img/rsz_burger.png")
self.x = random.randrange(0, displayW)
self.y = -100
self.velY = 3
self.color = (255, 0, 0)
def draw(self):
global screen
screen.blit(self.img, (self.x, self.y))
def animate(self):
self.y += self.velY
def collision(self):
global displayW, displayH
pass
class Player():
def __init__(self, x=0, y=0, velX=0, velY=0, w=0, h=0, color=()):
global displayW, displayH
self.w = 20
self.h = 20
self.x = displayW / 2 - self.w / 2
self.y = displayH - 100
self.velX = 0
self.velY = 0
self.color = (0, 0, 0)
def draw(self):
global screen
pygame.draw.ellipse(screen, self.color, (self.x, self.y, self.w, self.h))
def animate(self):
self.x += self.velX
self.y += self.velY
def collision(self):
global displayW
# collision to walls
if(self.x <= 0):
self.velX = 0
elif(self.x + self.h) >= displayW:
self.velX = 0
# SETUP
def setup():
pygame.display.set_caption("Food Catcher")
# QUIT GAME
def quitGame():
pygame.quit()
quit()
# CALL MAIN
if(__name__ == "__main__"):
main()
您的draw函数似乎很好(尽管
if player.y >= 200: player.draw()
语句似乎没有必要)。你知道吗可以通过在
Food
类的动画函数中添加一个条件来完成所需的操作。你知道吗您的方法不起作用,因为您在
Food
的__init__
函数中生成了一个随机的x值。此行只运行一次,因为您只实例化了一次Food
对象(在setGlobalValues
函数中)。你知道吗相关问题 更多 >
编程相关推荐