我正在开发一个简单的游戏,当您点击/单击屏幕时,角色会飞起来。继续点击角色会飞(有些类似于飞扬的鸟和喷气背包)。然而,与喷气背包一样,运动一点也不顺畅。
这是我的代码示例。
变量初始化
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;
}
}
从游戏循环调用的 Sprite 更新
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**
}
}
我认为speed++
提高速度不是一种平稳的方法,我不确定,但可能会添加一些与时间相关的变量来增加可能会改善它,此外,添加重力会使它更真实,但我不知道该怎么做,我读了几篇博客,第一件事我无法用正确的关键字搜索,第二件事是它们很难理解,因为它们包含与平台相关的代码。请帮忙。
我正在用 android 制作这个游戏,但可以接受任何语言的代码(HTML5、javascript、Android、Flash 或任何语言)。
问:如何为当用户点击或单击并在释放时坠落时飞行的对象(精灵)添加加速度和重力? 类似于喷气背包兜风的东西(只有上下运动)
更新
在@scottt 建议后,我已经实现了dY += gravity + flapp
我现在可以感觉到重力,但是有两个问题。
- 我的屏幕高度是 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)
}
}