无法使对象变为红色

2024-06-16 08:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个游戏,在这个游戏中,我有一个物体从游戏屏幕的顶部掉下来。当对象的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()

Tags: selfeventiffooddefscreenglobalpygame
1条回答
网友
1楼 · 发布于 2024-06-16 08:24:35

您的draw函数似乎很好(尽管if player.y >= 200: player.draw()语句似乎没有必要)。你知道吗

可以通过在Food类的动画函数中添加一个条件来完成所需的操作。你知道吗

def animate(self):
    self.y += self.velY
    # reset food if y position over 200
    if self.y > 200:
        self.y = -100
        self.x = random.randrange(0, displayW)

您的方法不起作用,因为您在Food__init__函数中生成了一个随机的x值。此行只运行一次,因为您只实例化了一次Food对象(在setGlobalValues函数中)。你知道吗

相关问题 更多 >