我这里有这段代码,我希望在开始菜单中有一些从天上掉下来的图像,但它不起作用。我尝试了很多东西,但是没有用。
这是代码:
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))
答案 0 :(得分:2)
请勿在{{1}}循环中定义位置和速度变量,否则将在每帧(循环重复)中将其重置。而是在循环外部定义它们,并通过增加速度来更改循环内部的位置。
我还建议使用pygame.Rect
对象,而不要使用单独的while
,thing_startx
,thing_starty
和thing_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()
循环来更新和绘制它们。