pygame uservent对象未在屏幕上显示

发布于 2025-01-28 00:36:56 字数 2044 浏览 1 评论 0原文

我正在尝试创建一个青蛙游戏,在该游戏中,青蛙在穿越道路时必须躲避汽车。 我做了一个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雪化雨蝶 2025-02-04 00:36:56

在游戏循环的每次迭代中,您都在调用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 your car1 timer will never trigger.

Move the call to set_timer before your while 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 your player function which is called every loop. Longer term you should investigate sprites.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文