首页 > 代码库 > Android 游戏开发(一)了解View

Android 游戏开发(一)了解View

Android游戏当中主要的除了控制类外就是显示类View。SurfaceView是从View基类中派生出来的显示类。android游戏开发中常用的三种视图是:view、SurfaceView和GLSurfaceView。

View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。

SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。

GLSurfaceView:基于SurfaceView视图再次进行拓展的视图类,专用于3D游戏开发的视图;是SurfaceView的子类,openGL专用。

 

 在2D游戏开发中,大致可以分为两种游戏框架,View和SurfaceView。 View和SurfaceView区别:

 View:必须在UI的主线程中更新画面,用于被动更新画面。

 SurfaceView:UI线程和子线程中都可以。在一个新启动的线程中重新绘制画面,主动更新画面。

 

什么是Paint?要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Android 中的画笔是 Paint类。

什么是Canvas?
当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了。在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西。除了在画布上绘制之外,还需要设置一些关于画布的属性,比如,画布的颜色、尺寸等。

 

游戏中Avitivy基本会设置成无标题。

public class BeginActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //隐去标题栏        this.requestWindowFeature(Window.FEATURE_NO_TITLE);        //隐去状态栏部分,包括电池等图标        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(new MyView(this));    }}

 

有了基础知识下面来写一些文字,下面是要实现文字跟随手移动。

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.MotionEvent;import android.view.View;public class MyView extends View {        private int posX = 50;    private int posY = 50;    public MyView(Context context) {            super(context);        this.setBackgroundColor(Color.BLACK);        this.setFocusableInTouchMode(true);    }    @Override    protected void onDraw(Canvas canvas) {        Paint mPaint = new Paint();        mPaint.setColor(0xffffffff);        mPaint.setTextSize(50);        canvas.drawText("Game", posX, posY, mPaint);        super.onDraw(canvas);    }    //触摸事件    @Override    public boolean onTouchEvent(MotionEvent event) {        int x = (int) event.getX();        int y = (int) event.getY();        switch (event.getAction()) {        //按下        case MotionEvent.ACTION_DOWN:            posX = x;            posY = y;            break;        //移动        case MotionEvent.ACTION_MOVE:            posX = x;            posY = y;                        break;        //弹出        case MotionEvent.ACTION_UP:            posX = x;            posY = y;                    break;        default:            break;        }        invalidate();        return super.onTouchEvent(event);    }    }

 

上面的代码是无法实现文字跟随文字移动,因为在MOVE这个Action中super.onTouchEvent事件中途会返回false。导致后面的event动作可能就会收不到了。

应该让监听函数的返回值永远为true。

//代码修改@Overridepublic boolean onTouchEvent(MotionEvent event) {    int x = (int) event.getX();    int y = (int) event.getY();    posX = x;    posY = y;            invalidate();    return true;}

 

这样就可以实现想要的效果了,^_^是不是很简单!感谢百度提供的一些资料!

 

Android 游戏开发(一)了解View