我创建的角色在单次触发按下向上箭头键后不会返回到确切的平台

2024-06-11 05:20:50 发布

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

我是Pygame的初学者。我开始制作一个关于跳跃恐龙的游戏。我创建的角色在单次触发按下向上箭头键后不会返回到确切的平台。它的土地略高于平台,其土地完全后,2,3向上箭头按下

我是一个完全的初学者

import pygame
pygame.init()

win = pygame.display.set_mode((500, 500))


x = 20
y = 400
width = 30
height = 45
vel = 10
black = (0,0,0)

x1 = 20
y1 = 30

white = (255,255,255)


run = True

while run:
    pygame.time.delay(20)
    win.fill(black)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and x>=20:
        x -= vel

    if keys[pygame.K_RIGHT]and x<=450:
        x += vel

    if keys[pygame.K_UP] and y>=20:
        y -= vel

    if keys[pygame.K_DOWN] and y<=390:
        y += vel
    #gravity
    else:
        if not keys[pygame.K_UP] and y <= 400:
            y += 30

    pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
    pygame.draw.line(win,white,[0,472],[472,472],2)
    pygame.display.update()
    pygame.display.flip()
pygame.quit()

Tags: andruneventifdisplay平台keyswidth
1条回答
网友
1楼 · 发布于 2024-06-11 05:20:50

你的重力应用程序坏了。有很多方法可以解决这个问题,我在这里的选择是始终应用重力,但限制y,这样它就永远不会超过角色离地平面的高度

详细说明你的方法的实际错误:你的跳跃会产生向上运动,增加vel。这只是gravity的一小部分。因此,将角色向上推(例如,40像素),然后向下拉30像素,将使您离地10像素。只有当你设法精确地提高gravity的倍数时,你才会后退

我的解决方案总是会失败,但会将角色的位置限制在地面上

import pygame
pygame.init()

win = pygame.display.set_mode((500, 500))


x = 20
y = 400
width = 30
height = 45
black = (0,0,0)

x1 = 20
y1 = 30

white = (255,255,255)

bottom = 472
gravity = 30
vel = 10 + gravity

run = True

while run:
    pygame.time.delay(20)
    win.fill(black)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_LEFT] and x>=20:
        x -= vel

    if keys[pygame.K_RIGHT]and x<=450:
        x += vel

    if keys[pygame.K_UP] and y>=20:
        y -= vel

    if keys[pygame.K_DOWN] and y<=390:
        y += vel

    else:
        y = min(bottom - height, y + gravity)

    pygame.draw.rect(win, (255, 0, 0), (x, y, width, height))
    pygame.draw.line(win,white,[0,bottom],[bottom,bottom],2)
    pygame.display.update()
    pygame.display.flip()
pygame.quit()

相关问题 更多 >