技术开发 频道

Android游戏的基础:物体运动效果

  四、编写UpdateThread

  下面,我们开始着手编写UpdateThread线程程序。这个程序主要是启动一个线程去不断更新当前小球的位置。先看声明及构造函数部分:

package licksquid.movement;

import android.graphics.Canvas;
import android.view.SurfaceHolder;

public class UpdateThread extends Thread {
    
private long time;
    
private final int fps = 20;
    
private boolean toRun = false;
    
private MovementView movementView;
    
private SurfaceHolder surfaceHolder;

}
public UpdateThread(MovementView rMovementView) {
        movementView
= rMovementView;
        surfaceHolder
= movementView.getHolder();
    }
 
public void setRunning(boolean run) {
        toRun
= run;
    }

  注意这里的setRunning方法中设置了线程是否应该停止的标记,下面来看重要的方法run:

  public void run() {

        Canvas c;
        
while (toRun) {

            
long cTime = System.currentTimeMillis();

            
if ((cTime - time) <= (1000 / fps)) {

                c
= null;
                try {
                    c
= surfaceHolder.lockCanvas(null);

                    movementView.updatePhysics();
                    movementView.onDraw(c);
                } finally {
                    
if (c != null) {
                        surfaceHolder.unlockCanvasAndPost(c);
                    }
                }
            }
            
time = cTime;
        }
    }

  在run方法中,主要实现了如下几个任务:首先检查是否有允许启动该线程(在开始运行后,由于在MovementView中,启动UpdateThread的时候,已经设置了其值为true,即updateThread.setRunning(true)),接下来检查是否在指定的时间内(这里设置的是每秒20帧),如果是的话,则调用surfaceHolder的lockCanvas方法,锁定当前的画布绘画区域,并且调用movementView的updatePhysics方法及onDraw方法去画小球并判断小球的运动,最后记得要在finally中调用unlockCanvasAndPost方法。

  五、运行程序

  最后运行程序,可以看到如下的效果,可以看到小球在做各个方向的弹跳运动。

0
相关文章