標籤:android style blog io ar color os 使用 sp
對於玩家來說,遊戲是動態;對於遊戲開發人員來說,遊戲是靜態,只是不停地播放不通的畫面,讓玩家看到了動態效果。
進入Android之前,首先要熟悉三個重要的類:View(視圖)、Canvas(畫布)、Paint(畫筆)。通過畫筆,可以在畫布上畫出各種精彩的圖形、圖片等等,然後通過視圖可以將畫布上的內容展現在手機螢幕上。
其次要熟悉“刷屏”的概念。繪製在畫布中的映像不管是圖片還是圖形,都是靜態,只有通過不斷的展現不同的畫布,才能實現動態效果。在手機上,畫布永遠只是一張,所以不可能通過不斷地播放不同的畫布來實現動態效果,這時就需要對畫布進行重新整理來實現動態效果。
重新整理畫布如同使用一塊橡皮擦,擦去之前畫布上的所有內容,然後重新繪製畫布,如此反覆,形成動態效果,而擦拭畫布的過程則稱為刷屏(重新整理螢幕)。
Android 遊戲開發中常用的三種視圖是 View 、 SurfaceView 和 GLSurfaceView 。下面簡單介紹下這三種視圖的含義:
View :顯示視圖,內建畫布,提供圖形繪製函數、觸屏事件、按鍵事件函數等;
SurfaceView :基於 View 視圖進行拓展的視圖類,更適用於 2D 遊戲開發;
GLSurfaceView : 基於 SurfaceView 視圖再次進行拓展的視圖類,專用於 3D 遊戲開發的視圖。
View遊戲架構
1.繪圖函數 onDraw
建立一個項目 GameView,建立完畢後首先自訂一個視圖類 “MyView” 繼承 View 類,代碼如下:
package com.example.ex4_4;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;public class MyView extends View { private int textX=20,textY=20; /** * 重寫父類建構函式 * @param context */ public MyView(Context context) { super(context); //設定焦點 setFocusable(true); } /*** * 重寫按鍵按下事件 * @param keyCode 目前使用者點擊的按鍵 * @param event 按鍵的動作事件隊列,此類還定義了很多靜態常量索引值 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //判定使用者按下的索引值是否方向鍵的"上下左右"鍵 if(keyCode==KeyEvent.KEYCODE_DPAD_UP) { //"上"按鍵被點擊,應該讓文本的Y座標變小 textY-=2; }else if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) { //"下"按鍵被點擊,應該讓文本的Y座標變大 textY+=2; }else if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT) { //"左"按鍵被點擊,應該讓文本的X座標變小 textX-=2; }else if(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT) { //"右"按鍵被點擊,應該讓文本的X座標變大 textX+=2; } return super.onKeyDown(keyCode, event); } /** * 重寫按鍵抬起事件 */ @Override public boolean onKeyUp(int keyCode, KeyEvent event) { //invalidate();不能在當前子線程中迴圈調用執行 //postInvalidate(); 可以在子線程中迴圈調用執行 invalidate();//重新繪製畫布 return super.onKeyUp(keyCode, event); } /** * 重寫觸屏事件函數 */ @Override public boolean onTouchEvent(MotionEvent event) { //擷取使用者手指觸屏的X座標賦值與文本的X座標 int x = (int)event.getX(); //擷取使用者手指觸屏的Y座標賦值與文本的Y座標 int y = (int)event.getY(); textX=x; textY=y; //重繪畫布 invalidate(); return true; } /** * 重寫父類繪圖函數 */ @Override protected void onDraw(Canvas canvas) { //建立一個畫筆執行個體 Paint paint = new Paint(); //設定畫筆顏色 paint.setColor(Color.WHITE); //設定畫筆文字大小 paint.setTextSize(18); //繪製文本 canvas.drawText("Hi,你好!", textX, textY, paint); super.onDraw(canvas); }}
修改MainActivity 類,顯示繪製的View
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this));}}
修改設定檔,設定應用程式為全屏,這裡設定主題為黑色背景並隱去了狀態列和應用標題
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
其實就是繼承View類,然後重寫父類的方法。
【讀書筆記《Android遊戲編程之從零開始》】10.遊戲開發基礎(View 遊戲架構)