码迷,mamicode.com
首页 > 移动开发 > 详细

Android 游戏开发(一)了解View

时间:2014-08-26 16:46:16      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   color   os   使用   io   strong   ar   

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。

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

 

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

 

Android 游戏开发(一)了解View

标签:android   style   blog   color   os   使用   io   strong   ar   

原文地址:http://www.cnblogs.com/chenjianxiang/p/3937370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!