python - 如何为此特定代码在 Pygame 中模拟跳跃
问题描述
我一直在尝试模拟 Pygame 代码中的跳转,但未能成功实现。有一个尺寸为 10 x 10 的矩形,我希望该矩形在SPACE按下时跳跃。我暂时保持这段代码不受重力影响。
import pygame
pygame.init()
ScreenLenX = 1000
ScreenLenY = 500
win = pygame.display.set_mode((ScreenLenX, ScreenLenY))
pygame.display.set_caption("aman")
run = True
Xcord = 100
Ycord = 100
length = 10
height = 10
vel = 2
xmove = 1
ymove = 1
while run:
#pygame.time.delay(1)
for event in pygame.event.get():
print(event)
if event.type ==pygame.QUIT:
run = False
if keys[pygame.K_RIGHT] and Xcord <= ScreenLenX-length:
Xcord += vel
if keys[pygame.K_LEFT] and Xcord >= 0:
Xcord -= vel
if keys[pygame.K_UP] and Ycord >= 0:
Ycord -= vel
if keys[pygame.K_DOWN] and Ycord <= ScreenLenY - height:
Ycord += vel
win.fill((0, 0, 0))
pygame.draw.rect(win, (255, 0, 0), (Xcord, Ycord, length, height))
keys = pygame.key.get_pressed()
pygame.display.update()
pygame.quit()
解决方案
在主循环之前添加一个变量jump
并将其初始化为 0:
jump = 0
while run:
# [...]
只有在pygame.K_SPACE
允许玩家跳跃并停留在地面上时才对 做出反应。如果满足,则设置jump
为所需的“跳跃”高度:
if keys[pygame.K_SPACE] and Ycord == ScreenLenY - height:
jump = 300
只要jump
大于 0,jump
就在主循环中向上移动玩家并减少相同的数量。
如果玩家没有跳到黎明时分,直到他到达地面:
if jump > 0:
Ycord -= vel
jump -= vel
elif Ycord < ScreenLenY - height:
Ycord += 1
请参阅演示,我将建议应用于您的代码:
import pygame
pygame.init()
ScreenLenX, ScreenLenY = (1000, 500)
win = pygame.display.set_mode((ScreenLenX, ScreenLenY))
pygame.display.set_caption("aman")
Xcord, Ycord = (100, 100)
length, height = (10, 10)
xmove, ymove = (1, 1)
vel = 2
jump = 0
run = True
clock = pygame.time.Clock()
while run:
#clock.tick(60)
for event in pygame.event.get():
print(event)
if event.type ==pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT] and Xcord <= ScreenLenX-length:
Xcord += vel
if keys[pygame.K_LEFT] and Xcord >= 0:
Xcord -= vel
if keys[pygame.K_SPACE] and Ycord == ScreenLenY - height:
jump = 300
if jump > 0:
Ycord -= vel
jump -= vel
elif Ycord < ScreenLenY - height:
Ycord += 1
win.fill((0, 0, 0))
pygame.draw.rect(win, (255, 0, 0), (Xcord, Ycord, length, height))
pygame.display.update()
推荐阅读
- javascript - 不要改变html中列表项的焦点
- java - 使用 Spark 将 Teradata 导出到 HDFS 因假脱机空间而失败
- r - 如何在 r 中创建多个 pivot_longer() 列?
- javascript - JSON.parse 中位置 0 处的 JSON 中的意外标记 J (
) 在 __webpack_exports__.default (webpack-internal:///./pages/api/mail.js:4:21) - javascript - Socket IO:如何在客户端和第二个服务器之间建立连接?
- python - tkinter 在 3 列布局中可折叠使列跳跃
- python-3.x - 我有一些代码在 2 秒内运行 100 次迭代,在 8 秒内运行 1000 次,在 11 分钟内运行 10,000 次
- drag-and-drop - 使用 React dnd 进行嵌套拖放
- python - 如何在 Python 中将两个列表组合成一个字典?
- python - 当我点击'tab'时,python函数的参数不会出现