android 游戏开发
三个重要的类:View视图、Canvas画布、Paint画笔
android
游戏开发常用三种视图
View
SurfaceView --主要用于2D
GLSurfaceView --主要用于3D
View框架实例
在View上 写"GameView" ,按方向键 上下左右会随之移动,触摸屏幕、拖动也会移到相应位置。
新建MyView类 继承View基类
1 package com.example.gameview; 2 3 import android.content.Context; 4 import android.graphics.Canvas; 5 import android.graphics.Color; 6 import android.graphics.Paint; 7 import android.view.KeyEvent; 8 import android.view.MotionEvent; 9 import android.view.View; 10 11 public class MyView extends View { 12 13 private int x=10,y=10; 14 15 public MyView(Context context) { 16 super(context); 17 setFocusable(true);//设置当前view为焦点操作 18 // TODO Auto-generated constructor stub 19 } 20 21 @Override 22 protected void onDraw(Canvas canvas) { 23 // TODO Auto-generated method stub 24 Paint paint = new Paint(); 25 paint.setColor(Color.BLACK); 26 canvas.drawText("GameView", x, y, paint); 27 28 super.onDraw(canvas); 29 } 30 31 @Override 32 public boolean onKeyDown(int keyCode, KeyEvent event) { 33 // TODO Auto-generated method stub 34 if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { 35 y-=2; 36 } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN){ 37 y+=2; 38 } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){ 39 x-=2; 40 } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){ 41 x+=2; 42 } 43 44 invalidate(); 45 //postInvalidate(); 46 return super.onKeyDown(keyCode, event); 47 } 48 49 @Override 50 public boolean onKeyUp(int keyCode, KeyEvent event) { 51 // TODO Auto-generated method stub 52 return super.onKeyUp(keyCode, event); 53 } 54 55 @Override 56 public boolean onTouchEvent(MotionEvent event) { 57 // TODO Auto-generated method stub 58 int tx = (int)event.getX(); 59 int ty = (int)event.getY(); 60 //玩家手指点击屏幕的动作 61 if (event.getAction() == MotionEvent.ACTION_DOWN) { 62 x = tx; 63 y = ty; 64 //玩家手指抬起离开屏幕的动作 65 } else if (event.getAction() == MotionEvent.ACTION_MOVE) { 66 x = tx; 67 y = ty; 68 //玩家手指在屏幕上移动的动作 69 } else if (event.getAction() == MotionEvent.ACTION_UP) { 70 x = tx; 71 y = ty; 72 } 73 // //获取用户手指触屏的X坐标赋值与文本的X坐标 74 // x = (int)event.getX(); 75 // //获取用户手指触屏的Y坐标赋值与文本的Y坐标 76 // y = (int)event.getY(); 77 // //重绘画布 78 79 //重绘画布 80 invalidate(); 81 //postInvalidate(); 82 return true; 83 } 84 85 }
需要特别注意的知识点如下:
1、Activity全屏显示
1 // 去掉Activity标题栏 2 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 3 // 去掉 电量、时间等状态栏,全屏显示 4 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
也可以在AndroidManifest里设置
1 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
2、设置模拟器方向键生效
C:\Users\XX\.android\avd\XX.avd
config.ini
hw.dPad=no,把no改成yes,如下:
hw.dPad=yes
重启模拟器即可
XX根据个人命名不同而不同
3、重写onDraw方法
1 Paint paint = new Paint();// 画笔类 2 paint.setColor(Color.BLACK);// 初始画布为白色,设置画笔为黑色 3 canvas.drawText("GameView", x, y, paint);// 坐标无论横屏竖屏都是从右上角为 0,0点开始的 4 5 super.onDraw(canvas);
4、onKeyDown、onKeyUp、onTouchEvent分别表示
按钮 按下、抬起、触摸屏幕的事件
keyCode ==
KeyEvent.KEYCODE_DPAD_UP 表示 向上的方向键按下
5、设置当前view为焦点操作才能进行操作
在MyView 构造方法里 setFocusable(true);
6、重画
invalidate();
//postInvalidate(); 可在自己创建的线程 循环调用