Android 游戏开发 NancyGLines 设计
2010-03-24 05:26:00 来源:WEB开发网嗯,我使用了自定义的View - GLinesView,在GLinesView的原型是这样的:
public class GLinesView extends SurfaceView implements SurfaceHolder.Callback {
}
在这里继承了SurfaceView ,因为SurfaceView 在游戏制作上有一些优势。接着,我参考了Sample里的LunarLander代码,在建立了一个SurfaceView内部线程类,用来处理游戏的逻辑和绘制游戏画面。
public class GLinesView extends SurfaceView implements SurfaceHolder.Callback {
class GLinesThread extends Thread {
public void initGame() {
}
public void setRunning(boolean running) {
mRun = running;
}
@Override
public void run() {
updateCanvas();
}
}
public GLinesView(Context context, AttributeSet attrs) {
super(context, attrs);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new GLinesThread(holder, context, new Handler() {
@Override
public void handleMessage(Message m) {
mStatusText.setVisibility(m.getData().getInt("viz"));
mStatusText.setText(m.getData().getString("text"));
}
});
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.initGame();
thread.setRunning(true);
thread.start();
}
}
当surfaceCreated事件发生时,触发游戏开始,initGame()做一些游戏的初始设置,setRunning设置游戏的当前状态,start将线程运行起来。
因为我不需要实时的刷新画面,所以,我没有在线程的run方法中使用一个while循环,而只是调用了一个刷新画面的方法updateCanvas();
当用户触摸屏幕时,触发GLinesView 的onTouchEvent方法,因此,添加代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
更多精彩
赞助商链接