- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我能够成功地在我的 Pygame 游戏中实现加速,但是有一些问题。问题是:角色减速后,角色将开始向一个方向加速,减速并开始向另一个方向加速,减速并开始向相反方向加速,无休止地重复这两件事。我怎样才能让它停止?
这是我为加速编写的代码:
if move_R == True:
accel = PLAYER_ACCEL
if move_L == True:
accel = -PLAYER_ACCEL
accel += veloc * PLAYER_FRICT
veloc += accel
player_xy[0] += veloc + 0.5 * accel
最佳答案
加速度仅取决于输入,如果没有输入,加速度为零:
accel = 0
if move_R:
accel += PLAYER_ACCEL
if move_L:
accel -= PLAYER_ACCEL
速度因加速度而变化,但因摩擦力而减小。
veloc = (veloc + accel) * (1 - PLAYER_FRICT)
注意,在某一点,加速度无法补偿摩擦力。全部加速能量都被摩擦力消耗掉了。
如果veloc/(veloc + accel)
等于1 - PLAYER_FRICT
,则运动是均匀的。
玩家的位置随当前速度变化:
player_xy[0] += veloc
<小时/>
最小示例:
import pygame
pygame.init()
size = 500, 500
window = pygame.display.set_mode(size)
clock = pygame.time.Clock()
border = pygame.Rect(0, 0, size[0]-40, 100)
border.center = [size[0] // 2, size[1] // 2]
player_xy = [size[0] // 2, size[1] // 2]
radius = 10
PLAYER_ACCEL, PLAYER_FRICT = 0.5, 0.02
veloc = 0
run = True
while run:
clock.tick(120)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# set acceleration in this frame
accel = 0
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]:
accel += PLAYER_ACCEL
if keys[pygame.K_LEFT]:
accel -= PLAYER_ACCEL
# change velocity by acceleration and reduce dependent on friction
veloc = (veloc + accel) * (1 - PLAYER_FRICT)
# change position of player by velocity
player_xy[0] += veloc
if player_xy[0] < border.left + radius:
player_xy[0] = border.left + radius
veloc = 0
if player_xy[0] > border.right - radius:
player_xy[0] = border.right - radius
veloc = 0
window.fill(0)
pygame.draw.rect(window, (255, 0, 0), border, 1)
pygame.draw.circle(window, (0, 255, 0), (round(player_xy[0]), round(player_xy[1])), radius)
pygame.display.flip()
关于python - 如何修复Pygame减速后角色不断向两个方向加速的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832445/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!