pygame uservent对象未在屏幕上显示
我正在尝试创建一个青蛙游戏,在该游戏中,青蛙在穿越道路时必须躲避汽车。 我做了一个CAR1的用户活动,该活动将在延迟三秒钟后生产汽车。但是由于某种原因,它没有在屏幕上显示。
我还想知道如何创建从左到右移动的多个汽车对象,我应该将它们存储在变量中还是还有其他方法?
import random
import time
# Initialising the program
pygame.init()
# Creating the screen
screen = pygame.display.set_mode((700,700))
playerImg = pygame.image.load('images/golden-frog.png')
playerX = 330
playerY = 700
playerX_change = 0
playerY_change = 0
cars = {
1: pygame.image.load('images/police.png'),
2: pygame.image.load('images/motorcycle.png'),
3: pygame.image.load('images/sports1.png')
}
road = pygame.image.load('images/road.png')
def car(a,x,y):
screen.blit(cars.get(a),(x,y))
def player(x,y):
screen.blit(playerImg,(x,y))
running = True
clock = pygame.time.Clock()
while running:
screen.fill((0,0,0))
screen.blit(road,(0,100))
a = random.randint(1,len(cars.keys()))
car1 = pygame.USEREVENT + 1
pygame.time.set_timer(car1, 3000)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == car1:
car(1,0,120)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
playerX_change = 30
if event.key == pygame.K_LEFT:
playerX_change = -30
if event.key == pygame.K_DOWN:
playerY_change = 50
if event.key == pygame.K_UP:
playerY_change = -50
if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
playerX_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
playerY_change = 0
playerX += playerX_change
playerY += playerY_change
if playerX < 0:
playerX = 0
if playerX > 674:
playerX = 674
if playerY < 0:
playerY = 0
if playerY > 674:
playerY = 674
player(playerX,playerY)
clock.tick(11)
pygame.display.update()```
I am trying to create a Frog game where a frog will have to dodge cars while moving through roads.
I made an user event of car1 which would produce a car after a delay of three seconds. But for some reason it is not being shown on the screen.
I also wanted to know whether how to create multiple car objects moving from left to right, should i store them in variables or is there some other method?
import random
import time
# Initialising the program
pygame.init()
# Creating the screen
screen = pygame.display.set_mode((700,700))
playerImg = pygame.image.load('images/golden-frog.png')
playerX = 330
playerY = 700
playerX_change = 0
playerY_change = 0
cars = {
1: pygame.image.load('images/police.png'),
2: pygame.image.load('images/motorcycle.png'),
3: pygame.image.load('images/sports1.png')
}
road = pygame.image.load('images/road.png')
def car(a,x,y):
screen.blit(cars.get(a),(x,y))
def player(x,y):
screen.blit(playerImg,(x,y))
running = True
clock = pygame.time.Clock()
while running:
screen.fill((0,0,0))
screen.blit(road,(0,100))
a = random.randint(1,len(cars.keys()))
car1 = pygame.USEREVENT + 1
pygame.time.set_timer(car1, 3000)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == car1:
car(1,0,120)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
playerX_change = 30
if event.key == pygame.K_LEFT:
playerX_change = -30
if event.key == pygame.K_DOWN:
playerY_change = 50
if event.key == pygame.K_UP:
playerY_change = -50
if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
playerX_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
playerY_change = 0
playerX += playerX_change
playerY += playerY_change
if playerX < 0:
playerX = 0
if playerX > 674:
playerX = 674
if playerY < 0:
playerY = 0
if playerY > 674:
playerY = 674
player(playerX,playerY)
clock.tick(11)
pygame.display.update()```
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在游戏循环的每次迭代中,您都在调用
pygame.time.set_timer()
。调用 set_timer()事件,因此您的car1
计时器永远不会触发。在语句中,将呼叫移至
set_timer
。还请注意,您的
car1
事件处理程序将在三秒钟后触发,并将您的汽车表面闪烁到屏幕上。在您的游戏循环再次运行之前,您可以看到图像的第11秒,而背景则在您的汽车上吸引。您可以执行类似于player
函数的操作,该功能称为每个循环。长期,您应该研究 sprites 。On each iteration of your game loop, you are calling
pygame.time.set_timer()
. Calling set_timer() discards the old timer for this event, so yourcar1
timer will never trigger.Move the call to
set_timer
before yourwhile
statement.Note also that your
car1
event handler will be triggered after three seconds and will blit your car surface to your screen. You'll be able to see the image for one eleventh of a second before your game loop runs again and the background draws over your car. You could do something similar to yourplayer
function which is called every loop. Longer term you should investigate sprites.