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(); 可在自己創建的線程 循環調用