玩家跳跃的问题
Issue with player jumping
我是一个有点新的程序员,做一些相对基本的事情。在过去的一段时间里(尽管我不经常做),在SDL的帮助下,我一直在制作2D游戏。现在,我正在编写代码,用于在按下w键时使玩家跳跃(控件是wsad)。我很快意识到我不能保持速度不变,因为这会导致跳跃更像y=-|x|的图,而不是y=-x^2,这看起来更像是一个实际的跳跃,而不是前者。以下是使其工作的代码部分。
//The part which happens when the jump key is pressed (w)
case SDLK_w:
if(InAir != true) {
StartOfJump = PlayerYCoord;
InAir = true;
velocity = 0.01;
break;
}
//And skip to a different part.
if(InAir == true) {
if(StartOfJump - PlayerYCoord < JumpHeight) {
PlayerYCoord = PlayerYCoord - velocity;
velocity = velocity * velocity;
速度是用来使玩家的Y坐标增加的速度呈指数级增加的。现在,在程序开始时,它被设置为0.01。
JumpHeight是玩家跳跃的像素数。这是为了能够轻松地修改它。实际上,JumpHeight设置为100像素。
StartOfJump是为了确保跳跃在正确的点被切断,因为虽然目前游戏的地图是平的,但我不希望保持这种状态。
PlayerYCoord是不言自明的,但基本上它是玩家在平面上的Y坐标。它是替身。
是的,我知道现在没有跌倒的代码。当我连上升部分都拿不到的时候,这其实并不重要。
不管怎么说,我真的不确定为什么,但由于某种原因,玩家的位置在按下w键时只增加了一个像素,它不会做任何其他事情。我试着修改代码说这个
if(InAir == true) {
if(StartOfJump - PlayerYCoord < JumpHeight) {
//PlayerYCoord = PlayerYCoord - 0.1;
PlayerYCoord = PlayerYCoord - velocity;
velocity = velocity * velocity;
cout << fixed << setprecision(4);
cout << "The velocity is" << velocity << " " << endl;
不幸的是,它从打印0.0001开始,然后永远打印0.000。但这是不对的,是吗?。。。速度的值是0.01…所以,我把最后一行改成这样:
cout << "The velocity is" << velocity * 100 << " " << endl;
果不其然,它输出0.0100,然后像上次一样无限输出0.0000。老实说,我不确定是什么导致了这个问题,但我认为这与玩家的Y坐标只增加了一个像素然后停止有关。
我可能犯了一个非常愚蠢的错误,很容易就能纠正。不管怎样,如果我需要包含任何其他代码(第一次在编程论坛上,我还没有完全确定这些内容),我很乐意包含它。提前感谢您的帮助!
附言:如果我的任何代码都依赖于系统,我使用的是Ubuntu 13.10,32位。
您错误地实现了重力。你需要以向上的速度开始。然后,你需要在每单位时间内从重力中减去向下的加速度。这将处理上升和下降。您的代码确实。。。奇怪的事情。
velocity = 50
each unit of time while player is in the air:
playerY -= velocity
velocity -= acceleration
我不太同意上面的解决方案。
你的球员应该总是受到重力的影响,对吧?即使我们在地面上,我们也会受到重力的影响?
总是通过重力影响玩家,但当我们按下跳跃按钮左右时,添加反作用力,将玩家向上抛(但只有一次),然后重力会超过这个力,将玩家向下推。
布尔值InAir
应该只确定玩家是否可以再次跳跃。因此,如果我们在空中,我们应该无法执行另一个跳跃命令。但如果我们被(InAir = false )
接地,那么我们应该能够再次跳跃。
这也使得添加双跳或类似的动作更加有效。
编码快乐!
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- TCS 模拟生活 2019 第 2 轮问题:跳跃游戏
- 跳跃游戏中嵌套的循环问题
- 玩家跳跃的问题
- 提升灵气问题与字符串和跳跃