Android 游戏开发----【搭建游戏开发框架】
2012-01-07 16:43
399 查看
首先来一个Activity
接下来是Activyt的View。
注----SurfaceView 是View的子类,也是android对View的加强。其中surfaceView底层用的是双缓冲机制。
下面的程序主要是通过实现runnable接口,让draw方法在线程中执行。当然这里的draw不会自己被调用。
sfh.addCallback(this);是通过getHolder() 来管理sufaceView 。程序中红色字体标示了出来.只有把这两句加上程序才会运行都run。。。
package com.himi; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; public class ImageTest extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new MySurfaceView(this)); } }
接下来是Activyt的View。
注----SurfaceView 是View的子类,也是android对View的加强。其中surfaceView底层用的是双缓冲机制。
下面的程序主要是通过实现runnable接口,让draw方法在线程中执行。当然这里的draw不会自己被调用。
package bsn.cc.dd; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.SlidingDrawer; //注:实现runnable 只有加入Thread thread=new Thread(this);才会去执行runnable中的方法。以为runnable中的run 方法必须放到线程里 public class MySurfaceView extends SurfaceView implements android.view.SurfaceHolder.Callback,Runnable{ private int SW,SH; private Bitmap bitmap; private Resources rs; private Paint paint; private int robotx=100; private int roboty=100; private SurfaceHolder sfh; private Canvas canvas; private Thread thread=new Thread(this); public MySurfaceView(Context context) { super(context); //保持屏幕一直亮 this.setKeepScreenOn(true); rs=this.getResources(); bitmap=BitmapFactory.decodeResource(rs, R.drawable.enemy1); sfh=this.getHolder(); sfh.addCallback(this); paint=new Paint(); paint.setColor(Color.BLUE); //设置无锯齿 paint.setAntiAlias(true); setFocusable(true);//用来响应按键 } @Override public void surfaceCreated(SurfaceHolder holder) { //如果在初始化的时候获得宽和高将返回0,因为这里的MySurfaceView是继承SurfaceView的,SurfaceView只有通过重写surfaceCreated的 //时候View才是有值的。 SW=this.getWidth(); SH=this.getHeight(); thread.start(); } @Override public void run() { System.out.println("------------"); draw(); try { Thread.sleep(100); } catch (Exception e) { // TODO: handle exception } } public void draw(){ canvas=sfh.lockCanvas();//自己理解是锁到画布开始画 canvas.drawRect(0, 0, SW, SH, paint); canvas.save(); canvas.clipRect(robotx, roboty, robotx+(bitmap.getWidth()/13), roboty+bitmap.getHeight()); canvas.restore(); //释放画布锁。并显示出画布。 sfh.unlockCanvasAndPost(canvas);.//ok 之后显示画布。这里的save和restore 是一对, lockCanvas和unlockCanvasAndPost是一对 } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { // TODO Auto-generated method stub return super.onKeyUp(keyCode, event); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }注-- sfh=this.getHolder();
sfh.addCallback(this);是通过getHolder() 来管理sufaceView 。程序中红色字体标示了出来.只有把这两句加上程序才会运行都run。。。
相关文章推荐
- [Android游戏开发]游戏框架的搭建
- Android游戏开发:游戏框架的搭建(1)
- Android游戏开发:游戏框架的搭建(4)
- Android游戏开发:游戏框架的搭建(3)
- Android游戏开发之游戏框架的搭建
- android游戏开发框架libgdx的使用(一)--环境搭建
- [Android游戏开发]游戏框架的搭建
- Android游戏开发:游戏框架的搭建(2)
- Android游戏开发:游戏框架的搭建(2)
- Android游戏开发:游戏框架的搭建(3)
- Android游戏开发:游戏框架的搭建(1)
- Android游戏开发:游戏框架的搭建(1)
- Android游戏开发:游戏框架的搭建(4)
- Android游戏开发:游戏框架的搭建
- Android游戏开发:游戏框架的搭建(3)
- Android游戏框架libgdx笔记(一):开发环境搭建
- Android游戏开发:游戏框架的搭建(3)
- Android游戏开发:游戏框架的搭建(2)
- Android游戏开发:游戏框架的搭建(1)
- android游戏开发框架libgdx的使用(一)--环境搭建