【讀書筆記《Android遊戲編程之從零開始》】10.遊戲開發基礎(View 遊戲架構)

來源:互聯網
上載者:User

標籤: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 遊戲架構)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.