java – LibGdx物理独立于帧速率

weixin_38137880 2019-09-12 12:57:12
我正在开发像超级马里奥这样的简单平台游戏.我正在使用带有LibGdx引擎的Java.我有一个物理问题,独立于帧率.在我的游戏中角色可以跳跃,跳跃高度显然取决于帧速率. 在我的桌面上游戏运行良好,它以每秒60帧的速度运行.我也尝试在平板电脑上以较低的fps运行游戏.发生的事情是,这个角色的跳跃速度远远高于我跳到桌面版本时的跳跃速度. 我已经阅读了一些关于修复时间步的文章,我理解它,但还不足以应用于这种情况.我似乎错过了一些东西. 这是代码的物理部分: protected void applyPhysics(Rectangle rect) { float deltaTime = Gdx.graphics.getDeltaTime(); if (deltaTime == 0) return; stateTime += deltaTime; velocity.add(0, world.getGravity()); if (Math.abs(velocity.x) < 1) { velocity.x = 0; if (grounded && controlsEnabled) { state = State.Standing; } } velocity.scl(deltaTime); //1 multiply by delta time so we know how far we go in this frame if(collisionX(rect)) collisionXAction(); rect.x = this.getX(); collisionY(rect); this.setPosition(this.getX() + velocity.x, this.getY() +velocity.y); //2 velocity.scl(1 / deltaTime); //3 unscale the velocity by the inverse delta time and set the latest position velocity.x *= damping; dieByFalling(); } 调用jump()函数并将一个变量jump_velocity = 40添加到velocity.y. 速度用于碰撞检测.
...全文
33 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38146511 2019-09-12
  • 打赏
  • 举报
回复
我认为你的问题在这里: velocity.add(0, world.getGravity()); 修改速度时还需要缩放重力.尝试: velocity.add(0, world.getGravity() * deltaTime); 单独注意,尝试使用box2D,它可以为你处理这些:)

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧