android小遊戲製作基礎,View實現遊戲佈局和方法
阿新 • • 發佈:2019-02-12
在使用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); }
————————————————————————
原始碼下載: