0

我是 Android 游戏开发的新手,我开始了一个简单的游戏,其中 Droid 可以跳过传入的框。我想在表面视图中使用 onTouchEvent 调用我的 droid.jump() 方法(只需在屏幕上轻按一下)

我创建了一个名为 Droid 的类:

public class Droid {


// Log Tag for Debugging
public static final String LOG_TAG = "_1Projekt";

private Bitmap bitmap; // the actual bitmap
private int x; // the X coordinate
private int y; // the Y coordinate
private boolean touched; // if droid is touched/picked up
private Speed speed; // the speed with its directions

private long mLastTime;

public Droid(Bitmap bitmap, int x, int y) {
    this.bitmap = bitmap;
    this.x = x;
    this.y = y;
    this.speed = new Speed();
}

………………

而 jump() 方法是我的问题。我想有一个平稳的跳跃,但我不知道如何用当前的系统时间来计算。我的想法是,机器人应该每隔 -TimePeriod- 更新它的 Y 位置,并且应该以较快的速度开始,然后将其降低到 0 以获得平滑的跳跃。但我不知道如何在我的 while 循环中计算这个。我当前的跳转():

public void jump() {
    Log.d(LOG_TAG, "Jumping");
    long now = System.currentTimeMillis();
    int elapsedTime = 100;
    int jump = y-30;

    while(y > jump)
    {
        if(System.currentTimeMillis() > now + elapsedTime)
        {
        now = now + elapsedTime;
        elapsedTime -=3;
        y = y-1;
        }
    }
}

据了解,我只实现了 Jump 的“向上”部分。谢谢您的回答!问候 DroidDude

4

1 回答 1

0

您可能想看这里(第三篇文章):

在主循环之前,有

//Get the current time
timeStep = System.currentTimeMillis();

然后做你的事情。然后在循环返回开始之前,有

// Hold to lock at FPS
while(System.currentTimeMillis()-timeStep < 1000/60);

其中 60 是每秒运行的帧数。

此方法还允许您获取 while 循环之后的时间差,以便找出渲染一帧所需的时间。使用它,您可以拥有一个变量,您可以将所有增量乘以以获得与帧无关的速度。

例如,如果将处理帧所需的毫秒数除以 16.666,则当程序以大约 60 FPS 运行时,该数字将等于 1。当帧速率较低时,渲染帧需要更多毫秒,并且该因素变得更大。

但是,请务必在重新粉刷之前放置它。这也是视频游戏的计时方式。我在 JAVA 下的视频游戏基础小程序代码片段中显示了一个示例。

于 2012-06-26T16:40:49.620 回答