gpt4 book ai didi

python - 我在 `pygame` 中的圆圈正在超出边界然后又回来(通过边界剪裁)

转载 作者:行者123 更新时间:2023-12-04 09:21:22 24 4
gpt4 key购买 nike

我正在使用 pygame 构建一个简单的 2D 物理引擎并制作了一个具有速度和加速度的圆,如果您按下箭头键,球体的加速度会发生变化。我将实现弹性和非弹性碰撞、摩擦、空气阻力等。但我遇到的问题是我为窗口设置了边界,因此圆不能离开窗口,但它会离开边界几分之一秒后又回来了,它不像一堵墙,更像是一种排斥力。这是我的代码。

import pygame as pyg
pyg.init()
win = pyg.display.set_mode((800, 800))
pyg.display.set_caption('physics engine')
crash = False
jump = False
x = 400
y = 400
vel_x = 1
vel_y = 1
acc_x = 5
acc_y = 5
g = 0

while not crash:
pyg.time.delay(50)
for event in pyg.event.get():
if event.type == pyg.QUIT:
crash = True
keys = pyg.key.get_pressed()

if keys[pyg.K_LEFT]:
vel_x -= acc_x

if keys[pyg.K_RIGHT]:
vel_x += acc_x

if keys[pyg.K_UP]:
vel_y -= acc_y

if keys[pyg.K_DOWN]:
vel_y += acc_y

if keys[pyg.K_SPACE]:
jump = True
vel_y -= 20

vel_y += g
win.fill((0, 0, 0))
print((x, y))
if vel_x <= 0:
if x <= 50:
vel_x = 0
x = 50
x += vel_x
elif vel_x >= 0:
if x >= 750:
vel_x = 0
x = 750
x += vel_x

if vel_y <= 0:
if y <= 50:
vel_y = 0
y = 50
y += vel_y
elif vel_y >= 0:
if y >= 750:
vel_y = 0
y = 750
y += vel_y

game_char = pyg.draw.circle(win, (50, 50, 255), (x, y), 50)
pyg.display.update()

pyg.quit()
它是一个 800*800 的方形窗口,圆的半径是 50,所以这就是为什么有 50 和 750 作为边界的原因,但圆就像弹跳然后停止,就像一个裁剪效果,圆穿过边界然后停止。我试图弄清楚如何解决这个问题,但我真的无法通过边界剪裁圆圈。需要帮助,请提前致谢!

最佳答案

在将球的位置限制到边界之前,您必须移动圆圈:

while not crash:
# [...]

if vel_x <= 0:
x += vel_x
if x <= 50:
vel_x = 0
x = 50
elif vel_x >= 0:
x += vel_x
if x >= 750:
vel_x = 0
x = 750
if vel_y <= 0:
y += vel_y
if y <= 50:
vel_y = 0
y = 50
elif vel_y >= 0:
y += vel_y
if y >= 750:
vel_y = 0
y = 750
无论如何,我建议简化代码:
while not crash:
# [...]

x += vel_x
y += vel_y
if x < 50 or x > 750:
x = max(50, min(750, x))
vel_x = 0
if y < 50 or y > 750:
y = max(50, min(750, y))
vel_y = 0

关于python - 我在 `pygame` 中的圆圈正在超出边界然后又回来(通过边界剪裁),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63100350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com