图像未在开始菜单中掉落。 Pygame

时间:2018-09-03 18:51:41

标签: python while-loop pygame

我这里有这段代码,我希望在开始菜单中有一些从天上掉下来的图像,但它不起作用。我尝试了很多东西,但是没有用。

这是代码:

import pygame
import random

pygame.init()

display_width= 1000
display_height= 600

black = (0,0,0)
white = (255, 255, 255)
blue = (0, 0, 112)

x=0
y=0

gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption("Name")

clock = pygame.time.Clock()

def text_objects(text, font, color):
    textSurface = font.render(text, True, color)
    return textSurface, textSurface.get_rect()

Stmenpic = pygame.image.load("Start_menu_sky_back_ground.png")

def StartMenPic(x,y):
    gameDisplay.blit(Stmenpic, (x,y) )

def Title_Of_Game(text):
    Title_Text = pygame.font.Font("ARDESTINE.ttf", 115)
    TextSurf, TextRect = text_objects(text, Title_Text, blue)
    TextRect.center = ((500),(100))
    gameDisplay.blit(TextSurf, TextRect)

    pygame.display.update

Baby_1=pygame.image.load("Baby_1.png")

def things(x,y):
    gameDisplay.blit(Baby_1,(x, y ))

x_change = 0

def Title_of_Game():
    Title_Of_Game("Title")

def Start_Menu():

    StartMenu=True
    while StartMenu:
        x = 0
        y = 0
        x_change = 0

        thing_startx = random.randrange(0, display_width)
        thing_starty = -600
        thing_speed = 7
        thing_width= 30
        thing_height=30

        for event in pygame.event.get():
            #print(event)
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        Title_of_Game()
        x_change=0

        x+= x_change

        if thing_starty > display_height:
            thing_starty = 0 - thing_height
            thing_startx = random.randrange(0, display_width)

        pygame.display.update()
        clock.tick(60)

StartMenPic(0, 0)
Start_Menu()

pygame.quit()
quit()

这可能很明显,但是我只是刚起步,所以我需要很多帮助。感谢您在这个问题上的所有帮助。 现在我遇到了一个问题,它总是在随机的位置生成,但不会掉下来。

这是这段代码的主要部分:

    pygame.init()

    display_width= 1000
    display_height= 600

    Startmenpic = pygame.image.load("Start_menu_sky_back_ground.png")
    stmenpic = pygame.Surface((30, 50))
def Start_Menu():
    thing_rect = pygame.Rect(random.randrange(display_width), -60, 30, 30)
    thing_speed = 7

    StartMenu = True

    while StartMenu:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return

        Title_of_Game()

        thing_rect.y += thing_speed

        if thing_rect.y > display_height:
            thing_rect.y = 0 - thing_rect.height
            thing_rect.x = random.randrange(display_width)

            gameDisplay.fill((30, 30, 30))
            gameDisplay.blit(stmenpic, thing_rect)
            pygame.display.update()
            clock.tick(60)

    StartMenPic(0, 0)
    pygame.display.update()
    Start_Menu()

    pygame.quit()
    quit()

    stmenpic.fill((0, 200, 50))

1 个答案:

答案 0 :(得分:2)

请勿在{{1​​}}循环中定义位置和速度变量,否则将在每帧(循环重复)中将其重置。而是在循环外部定义它们,并通过增加速度来更改循环内部的位置。

我还建议使用pygame.Rect对象,而不要使用单独的whilething_startxthing_startything_width变量:

thing_height

然后通过增加每帧的速度来更新其y坐标:

# Pass the top left coordinates, the width and the height.
thing_rect = pygame.Rect(random.randrange(display_width), -60, 30, 30)

这是一个最小的完整示例:

thing_rect.y += thing_speed

如果您想要多个掉落的物体,只需将一些矩形放入列表中,并使用import pygame import random pygame.init() display_width = 1000 display_height = 600 gameDisplay = pygame.display.set_mode((display_width, display_height)) clock = pygame.time.Clock() stmenpic = pygame.Surface((30, 50)) stmenpic.fill((0, 200, 50)) def start_menu(): thing_rect = pygame.Rect(random.randrange(display_width), -60, 30, 30) thing_speed = 7 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: return # Move the rect downwards. thing_rect.y += thing_speed # Reset the position of the rect when it leaves the screen. if thing_rect.y > display_height: thing_rect.y = 0 - thing_rect.height thing_rect.x = random.randrange(display_width) gameDisplay.fill((30, 30, 30)) gameDisplay.blit(stmenpic, thing_rect) # Blit the image at the rect. pygame.display.update() clock.tick(60) start_menu() pygame.quit() 循环来更新和绘制它们。