首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在游戏中跳跃

在游戏中跳跃
EN

Stack Overflow用户
提问于 2012-04-01 00:39:21
回答 1查看 5.6K关注 0票数 3

我正在做一个2d侧滚轮,为了我的生活,我不能跳到工作上。这就是我向左右移动的方式:

代码语言:javascript
运行
复制
for(var i = 0; i < time; i++)
     newVelocityX = (oldVelocityX + accelerationX) * frictionX;

然后更新我的球员位置

positionX = oldPositionX + newVelocityX;

这很好用,而且变量"time“的ms数量与我上次运行函数时一样多。摩擦作用很大,我很高兴它在X方向上都很好。这就是我在Y方向上所看到的:

代码语言:javascript
运行
复制
for(var i = 0; i < time; i++) {
    accelerationY += gravityAccelerationY;
    newVelocityY = oldVelocityY + accelerationY;
}

由于重力的原因,物体坠落得很好。如果我在用户点击向上箭头时设置一个负accelerationY,那么我甚至可以让玩家跳起来,但是在快速计算机上他们跳得非常高,而在旧计算机上跳得非常低。我不知道如何解决这个问题,我以为我已经把它放在foor循环中了,就像我做的那样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-01 01:20:38

您需要做几件事才能更改代码才能正常工作。在您发布的代码中有许多bug/性能命中。

这里有一些代码来做游戏的基础。

跳转的示例代码:

代码语言:javascript
运行
复制
if (jump) {
    velocityY = -jumpHeightSquared; // assuming positive Y is downward, and you are jumping upward
}
velocityY += gravityAccelerationY * time;
positionY += velocityY * time;
if (positionY > 0) {
    positionY = 0; // assuming the ground is at height 0
    velocityY = 0;
}

用于横向移动的示例代码:

代码语言:javascript
运行
复制
velocityX += accelerationX * time;
velocityX *= Math.pow(frictionX, time);
positionX += velocityX * time;

对守则的一些评论:

速度和位置变量需要将它们的值保持在帧之间(我假设您已经知道了)。

gravityAccelerationY和frictionX是常数,除非重力或摩擦发生变化。

我用* time替换了for循环,使用一个乘法比一个循环更快。唯一的区别是在较低的帧速率,或高的加速率,那里的加速似乎是‘加速’从它应该是什么。不过,你不应该有问题的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9960959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档