1. 程式人生 > >android小遊戲製作基礎,View實現遊戲佈局和方法

android小遊戲製作基礎,View實現遊戲佈局和方法

在使用android的朋友們,相信大家對android的遊戲不陌生吧,像憤怒的小鳥,植物大戰殭屍等等優秀的遊戲,給我們帶來了很好的使用者體驗

下面我來教大家一點android遊戲開發的一點基礎,大家可以參照這個方法框架來設計一些像貪吃蛇,俄羅斯方塊,雷電等小遊戲,從而激發大家學習的興趣。

下面來看看這個程式的執行效果圖:


這個紅色小矩形就是我們可以操控的物件,我們可以用手機方向鍵控制它移動,也可以用觸控的方式設定其位置,這是一些小遊戲的雛形,大家可以再次深度開發,後面程式碼部分我會有詳細的註釋和原始碼下載,這裡不再介紹

程式碼部分:

————————–GameActivity.java

-—————————

package jiabin.activity;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
 
public class GameActivity extends Activity{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//設定視窗沒有標題
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//設定全屏顯示
        setContentView(new GameView(this));//佈局不採用靜態佈局,而是採用view方法
                                           //不需要在資原始檔中layout寫XML檔案
    }
}

————————–GameView.java—————————-

package jiabin.activity;
 
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;
 
//這裡我們繼承View
public class GameView extends View{
 
    int left,top;
    int w,h;
    public GameView(Context context)
    {
        super(context);
        left = 20;
        top = 20;
        w = 20;
        h = 20;
        setFocusable(true);
        //這裡要注意,別忘了加入setFocusable
        //如果不加上這個,View被顯示時,沒有獲得焦點,就是說,按鍵動作沒有傳送給View,所以需要在建構函式中增加這個函式
    }
 
    //複寫onTouchEvent方法
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        int x = (int) event.getX();//獲取touch事件的橫座標
        int y = (int) event.getY();//獲取touch事件的縱座標
        left = x;
        top = y;
        postInvalidate();//和invalidate()相似,都是是用來重新整理View的。具體區別可以參考http://blog.csdn.net/ssstudio/article/details/6758917
        return super.onTouchEvent(event);
    }
 
    //複寫onDraw方法,這裡有詳細的參考部落格,我就不再贅述了。http://daimajishu.iteye.com/blog/1080624
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint paint =new Paint();
        paint.setColor(Color.RED);
        canvas.drawRect(left, top, left+w, top+h, paint);//畫個矩形,也可以從資原始檔中生成點陣圖,方法見部落格
    }
 
    //複寫onKeyDown方法,該方法用來捕捉手機鍵盤被按下的事件
    //使用方法可以參考部落格:http://book.51cto.com/art/201010/231845.htm
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        switch(keyCode)
        {
            case KeyEvent.KEYCODE_DPAD_UP://按鍵響應事件
                top-=10;//每次移動10畫素,如果移動1畫素的話會很慢,大家可以試試
                postInvalidate();//這個重新整理方法上面已經講過
                break;
            case KeyEvent.KEYCODE_DPAD_DOWN:
                top+=10;
                postInvalidate();
                break;
            case KeyEvent.KEYCODE_DPAD_LEFT:
                left-=10;
                postInvalidate();
                break;
            case KeyEvent.KEYCODE_DPAD_RIGHT:
                left+=10;
                postInvalidate();
                break;
            default:
                break;
        }
        return super.onKeyDown(keyCode, event);
    }


————————————————————————

原始碼下載: