android-通过重力和加速度使飞行平稳,如飞扬的小鸟或喷气背包喜悦的飞行

android-通过重力和加速度使飞行平稳,如飞扬的小鸟或喷气背包喜悦的飞行,第1张

概述我正在开发一个简单的游戏,当您点击/单击屏幕时,角色会飞起来.持续点击角色会飞(类似于飘扬的小鸟和喷气背包).但是,就喷气背包而言,运动根本不是很平稳.这是我的代码示例.可变初始化maxSpeedLimit=spriteHeight/10;speed=maxSpeedLimit/2;//halfofthemaxspeed触

我正在开发一个简单的游戏,当您点击/单击屏幕时,角色会飞起来.持续点击角色会飞(类似于飘扬的小鸟和喷气背包).但是,就喷气背包而言,运动根本不是很平稳.

这是我的代码示例.

可变初始化

maxSpeedlimit  = spriteHeight/10;speed = maxSpeedlimit/2; //half of the max speed

触摸事件

public voID onTapOrClick(int action) {    if (action == UP) {        sprite.up= true;    }    else {        sprite.up = false;    }}

从游戏循环调用精灵更新

public voID update() {    if (up) {        y -= speed; //fly up    }    else {        y += speed;// fly down    }    if (speed < maxSpeedlimit) {        speed++; // May be cheep way to add **veLocity/acceleration**    }   }

我认为速度不是提高速度的平滑方法,我不确定,但是可能会添加一些与时间有关的变量以增加速度,而且添加重力会使其更逼真,但我不知道该怎么做,我读过很少的博客,第一件事是我无法使用正确的关键字进行搜索,第二件事是它们很难理解,因为它们包含与平台相关的代码.请帮忙.

我正在用androID制作游戏,但是可以接受任何语言的代码(HTML5,JavaScript,AndroID,Flash或任何一种).

问:如何在用户轻击或单击并放开时飞行的物体(精灵)上增加加速度和重力?
类似于喷气背包的 *** 纵杆(只能上下移动)

更新

在@scottt建议下,我已经实现了dY =重力拍打,现在我可以感觉到重力了,但是有两个问题.

>我的屏幕高度是480,并且精灵立即触摸上(y = 0)和下(y = 480)边界,因为我认为它不断提高了精灵的速度.
>当它碰到地面时,似乎显得很忙,需要花费很多时间才能将精灵抬起.

dY应该有一些限制,而该限制会不断添加到y位置.

这是更新代码.

int downSpeed = 1;int upSpeed = -2;int dy = 0;private voID update() {    if (flapPing) {        upSpeed = -2; //if flying speed    }    else {        upSpeed = 0;    }    dy  +=  downSpeed + upSpeed;    if (dy < -10) {        dy = -10; //limit for rise speed    }    else if (dy > 8) {        dy = 8; //limit for gravity    }    y += dy; // add value in y location    if (y > GAME_HEIGHT - sprite.getHeight()) {        y = GAME_HEIGHT  - sprite.getHeight(); // reset y, if touch ground        dy = 0; //reset speed, otherwise it make it very heavy to rise    }    else if ( y < 0) {        y = 0; //reset y if touch upper limit        dy = 0; //reset speed, otherwise take much time to fall (as it would be in negative)    }}

解决方法:

重力只是向下的加速.加速度反过来只是速度(方向速度)的变化.在下面的讨论中,我做出以下假设以使事情更简单:

>您的水平速度恒定
>输入敲击称为“拍打”
>重力正常
>对于我们的目的而言,简单而不是科学的方法/语言是可以的

对于每次通过更新循环,必须将所有各种加速度求和,并将总和加到当前速度上.在您的情况下,可能有2种加速度,重力和拍打.重力是恒定的并且是负值(向下作用),而拍打仅在攻丝期间发生,而正(向上)发生.

让我们将重力设置为每个循环-10像素,点击设置为每个循环25像素,并将初始高度设置为500.一些初始定义是:

static final int gravity = -10;   // constant downward accelerationstatic final int flapPing = 25;   // upward acceleration whenever isFlapPing is trueBoolean isFlapPing = false;   // Is the bird flapPingint dY = 0; // current vertical speedy = 500;    // current vertical position

每次通过循环时,如无抖动,速度计算将为:

dY += gravity + flapPing;

因此,第一次,速度计算将为dY = 0(-10)0 = -10.第二次,dy = -10(-10)0 = -20.第5次,dy = -40(-10)= -50.每次经过,下降速度都比以前快10倍.

高度很简单.每次经过时,高度都会随着垂直加速度的变化而变化.所以:

y += dY;

因此,第一次,高度将为y = 500(-10)=490.第二次,y = 490(-20)=470.第五次,y = 400(-50)=350.因为每次下降的速度都会加快,这只鸟会急速下降,直到摔倒!

那就是拍击的地方.每次通过循环发生拍击时,dY计算将应用25.因此,让我们假设鸟在第6次迭代中开始拍打. dy的计算将是dy = -50(-10)25 = -35,而高度将是y = 350(-35)=315.下次通过计算得出dy = -35(-10)25 = -20并且高度将为y = 350(-20)=295.仍在下降,但速度较慢.之后的时间:dy = -20(-10)25 = -5并且y = 295(-5)=290.之后的时间终于显示出身高的增加:dy = -5(-10)25 = 10 y = 290 10 = 300.

综上所述,在获得令人满意的结果之前,您肯定需要使用数字.

TLDR:您不想直接使用重力和拍打来更改高度.相反,您想使用重力和拍打来计算每次迭代的速度,然后使用它来调整高度.

总结

以上是内存溢出为你收集整理的android-通过重力和加速度使飞行平稳,如飞扬的小鸟或喷气背包喜悦的飞行全部内容,希望文章能够帮你解决android-通过重力和加速度使飞行平稳,如飞扬的小鸟或喷气背包喜悦的飞行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1076965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存