国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實戰打飛機游戲之菜單頁面設計(1)

2019-12-12 05:53:07
字體:
來源:轉載
供稿:網友

本文目標實現控制小飛機的左右移動、躲避子彈、打boss。

本節實現 開始菜單界面

1、首先 資源文件拷過來

2、劃分游戲狀態

 public static final int GAME_MENU = 0;// 游戲菜單 public static final int GAMEING = 1;// 游戲中 public static final int GAME_WIN = 2;// 游戲勝利 public static final int GAME_LOST = 3;// 游戲失敗 public static final int GAME_PAUSE = -1;// 游戲菜單 // 當前游戲狀態(默認初始在游戲菜單界面) public static int gameState = GAME_MENU;

定義五種狀態

 定義完方法后 在繪圖方法中 ,實體鍵 按下方法 ,抬起方法,觸屏監聽,邏輯方法,switch

//在那幾個方法中加這個  switch (gameState) {  case GAME_MENU:   break;  case GAMEING:   break;  case GAME_WIN:   break;  case GAME_LOST:   break;  case GAME_PAUSE:   break;  default:   break;  }

下面再聲明一些東西

//聲明一個Resources實例便于加載圖片 private Resources res = this.getResources(); //聲明游戲需要用到的圖片資源(圖片聲明) private Bitmap bmpBackGround;//游戲背景 private Bitmap bmpBoom;//爆炸效果 private Bitmap bmpBoosBoom;//Boos爆炸效果 private Bitmap bmpButton;//游戲開始按鈕 private Bitmap bmpButtonPress;//游戲開始按鈕被點擊 private Bitmap bmpEnemyDuck;//怪物鴨子 private Bitmap bmpEnemyFly;//怪物蒼蠅 private Bitmap bmpEnemyBoos;//怪物豬頭Boos private Bitmap bmpGameWin;//游戲勝利背景 private Bitmap bmpGameLost;//游戲失敗背景 private Bitmap bmpPlayer;//游戲主角飛機 private Bitmap bmpPlayerHp;//主角飛機血量 private Bitmap bmpMenu;//菜單背景 public static Bitmap bmpBullet;//子彈 public static Bitmap bmpEnemyBullet;//敵機子彈 public static Bitmap bmpBossBullet;//Boss子彈

初始化 游戲

 /** * SurfaceView視圖創建,響應此函數 */ @Override public void surfaceCreated(SurfaceHolder holder) { screenW = this.getWidth(); screenH = this.getHeight(); initGame(); flag = true; // 實例線程 th = new Thread(this); // 啟動線程 th.start(); }
 /** * 加載游戲資源 */ private void initGame() { //加載游戲資源 bmpBackGround = BitmapFactory.decodeResource(res, R.drawable.background); bmpBoom = BitmapFactory.decodeResource(res, R.drawable.boom); bmpBoosBoom = BitmapFactory.decodeResource(res, R.drawable.boos_boom); bmpButton = BitmapFactory.decodeResource(res, R.drawable.button); bmpButtonPress = BitmapFactory.decodeResource(res, R.drawable.button_press); bmpEnemyDuck = BitmapFactory.decodeResource(res, R.drawable.enemy_duck); bmpEnemyFly = BitmapFactory.decodeResource(res, R.drawable.enemy_fly); bmpEnemyBoos = BitmapFactory.decodeResource(res, R.drawable.enemy_pig); bmpGameWin = BitmapFactory.decodeResource(res, R.drawable.gamewin); bmpGameLost = BitmapFactory.decodeResource(res, R.drawable.gamelost); bmpPlayer = BitmapFactory.decodeResource(res, R.drawable.player); bmpPlayerHp = BitmapFactory.decodeResource(res, R.drawable.hp); bmpMenu = BitmapFactory.decodeResource(res, R.drawable.menu); bmpBullet = BitmapFactory.decodeResource(res, R.drawable.bullet); bmpEnemyBullet = BitmapFactory.decodeResource(res, R.drawable.bullet_enemy); bmpBossBullet = BitmapFactory.decodeResource(res, R.drawable.boosbullet); }

菜單類 GameMenu

菜單類
包括 初始化繪制按鈕和背景圖

package com.gsf;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.view.MotionEvent;/** *  * @author liuml * @time 2016-5-27 下午5:43:34 */public class GameMenu { // 菜單背景圖 private Bitmap bmpMenu; // 按鈕圖片資源(按下和未按下圖) private Bitmap bmpButton, bmpButtonPress; // 按鈕的坐標 private int btnX, btnY; // 按鈕是否按下標識位 private Boolean isPress; // 菜單初始化 public GameMenu(Bitmap bmpMenu, Bitmap bmpButton, Bitmap bmpButtonPress) { this.bmpMenu = bmpMenu; this.bmpButton = bmpButton; this.bmpButtonPress = bmpButtonPress; // X居中,Y緊接屏幕底部 btnX = MySurfaceView.screenW / 2 - bmpButton.getWidth() / 2; btnY = MySurfaceView.screenH - bmpButton.getHeight(); isPress = false; } public void draw(Canvas canvas, Paint paint) { // 繪制菜單背景圖 canvas.drawBitmap(bmpMenu, 0, 0, paint); if (isPress) {  canvas.drawBitmap(bmpButtonPress, btnX, btnY, paint); } else {  canvas.drawBitmap(bmpButton, btnX, btnY, paint); } } public void onTouchEvent(MotionEvent event) { // 獲取當前觸控位置 int pointX = (int) event.getX(); int pointyY = (int) event.getY(); // 當用戶是按下和移動時 if (event.getAction() == MotionEvent.ACTION_DOWN  || event.getAction() == MotionEvent.ACTION_MOVE) {  // 判定用戶是否點擊按鈕  if (pointX > btnX && pointX < btnX + bmpButton.getWidth()) {  if (pointyY > btnY && pointyY < btnY + bmpButton.getHeight()) {   isPress = true;  } else {   isPress = false;  }  } else {  isPress = false;  }  // 當用于是抬起動作時 } else if (event.getAction() == MotionEvent.ACTION_UP) {  // 判斷抬起時是否點擊按鈕,防止用戶移動到別處  if (pointX > btnX && pointX < btnX + bmpButton.getWidth()) {  if (pointyY > btnY && pointyY < btnY + bmpButton.getHeight()) {   isPress = false;//抬起后重置 還原Button狀態為未按下狀態   //改變當前游戲狀態為開始游戲   MySurfaceView.gameState = MySurfaceView.GAMEING;  }  } } }}

然后 在MySurfaceView中使用 GameMenu 使用菜單類

public class MySurfaceView extends SurfaceView implements Callback, Runnable { private SurfaceHolder sfh; private Paint paint; private Thread th; private boolean flag; private Canvas canvas; // 1 定義游戲狀態常量 public static final int GAME_MENU = 0;// 游戲菜單 public static final int GAMEING = 1;// 游戲中 public static final int GAME_WIN = 2;// 游戲勝利 public static final int GAME_LOST = 3;// 游戲失敗 public static final int GAME_PAUSE = -1;// 游戲菜單 // 當前游戲狀態(默認初始在游戲菜單界面) public static int gameState = GAME_MENU; // 聲明一個Resources實例便于加載圖片 private Resources res = this.getResources(); // 聲明游戲需要用到的圖片資源(圖片聲明) private Bitmap bmpBackGround;// 游戲背景 private Bitmap bmpBoom;// 爆炸效果 private Bitmap bmpBoosBoom;// Boos爆炸效果 private Bitmap bmpButton;// 游戲開始按鈕 private Bitmap bmpButtonPress;// 游戲開始按鈕被點擊 private Bitmap bmpEnemyDuck;// 怪物鴨子 private Bitmap bmpEnemyFly;// 怪物蒼蠅 private Bitmap bmpEnemyBoos;// 怪物豬頭Boos private Bitmap bmpGameWin;// 游戲勝利背景 private Bitmap bmpGameLost;// 游戲失敗背景 private Bitmap bmpPlayer;// 游戲主角飛機 private Bitmap bmpPlayerHp;// 主角飛機血量 private Bitmap bmpMenu;// 菜單背景 public static Bitmap bmpBullet;// 子彈 public static Bitmap bmpEnemyBullet;// 敵機子彈 public static Bitmap bmpBossBullet;// Boss子彈 public static int screenW; public static int screenH; // private GameMenu gameMenu; /** * SurfaceView初始化函數 */ public MySurfaceView(Context context) { super(context); sfh = this.getHolder(); sfh.addCallback(this); paint = new Paint(); paint.setColor(Color.WHITE); paint.setAntiAlias(true); setFocusable(true); } /** * SurfaceView視圖創建,響應此函數 */ @Override public void surfaceCreated(SurfaceHolder holder) { screenW = this.getWidth(); screenH = this.getHeight(); initGame(); flag = true; // 實例線程 th = new Thread(this); // 啟動線程 th.start(); } /** * 加載游戲資源 */ private void initGame() { // 加載游戲資源 bmpBackGround = BitmapFactory  .decodeResource(res, R.drawable.background); bmpBoom = BitmapFactory.decodeResource(res, R.drawable.boom); bmpBoosBoom = BitmapFactory.decodeResource(res, R.drawable.boos_boom); bmpButton = BitmapFactory.decodeResource(res, R.drawable.button); bmpButtonPress = BitmapFactory.decodeResource(res,  R.drawable.button_press); bmpEnemyDuck = BitmapFactory.decodeResource(res, R.drawable.enemy_duck); bmpEnemyFly = BitmapFactory.decodeResource(res, R.drawable.enemy_fly); bmpEnemyBoos = BitmapFactory.decodeResource(res, R.drawable.enemy_pig); bmpGameWin = BitmapFactory.decodeResource(res, R.drawable.gamewin); bmpGameLost = BitmapFactory.decodeResource(res, R.drawable.gamelost); bmpPlayer = BitmapFactory.decodeResource(res, R.drawable.player); bmpPlayerHp = BitmapFactory.decodeResource(res, R.drawable.hp); bmpMenu = BitmapFactory.decodeResource(res, R.drawable.menu); bmpBullet = BitmapFactory.decodeResource(res, R.drawable.bullet); bmpEnemyBullet = BitmapFactory.decodeResource(res,  R.drawable.bullet_enemy); bmpBossBullet = BitmapFactory  .decodeResource(res, R.drawable.boosbullet); //菜單類實例化 gameMenu = new GameMenu(bmpMenu, bmpButton, bmpButtonPress); } /** * 游戲繪圖 */ public void myDraw() { try {  canvas = sfh.lockCanvas();  if (canvas != null) {  canvas.drawColor(Color.WHITE);  // 繪圖函數根據游戲狀態不同進行不同繪制  switch (gameState) {  case GAME_MENU:   gameMenu.draw(canvas, paint);   break;  case GAMEING:   break;  case GAME_WIN:   break;  case GAME_LOST:   break;  case GAME_PAUSE:   break;  default:   break;  }  } } catch (Exception e) {  // TODO: handle exception } finally {  if (canvas != null)  sfh.unlockCanvasAndPost(canvas); } } /** * 觸屏事件監聽 */ @Override public boolean onTouchEvent(MotionEvent event) { switch (gameState) { case GAME_MENU:  gameMenu.onTouchEvent(event);  break; case GAMEING:  break; case GAME_WIN:  break; case GAME_LOST:  break; case GAME_PAUSE:  break; } return true; } /** * 按鍵事件監聽 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (gameState) { case GAME_MENU:  break; case GAMEING:  break; case GAME_WIN:  break; case GAME_LOST:  break; case GAME_PAUSE:  break; } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (gameState) { case GAME_MENU:  break; case GAMEING:  break; case GAME_WIN:  break; case GAME_LOST:  break; case GAME_PAUSE:  break; } return super.onKeyUp(keyCode, event); } /** * 游戲邏輯 */ private void logic() { switch (gameState) { case GAME_MENU:  break; case GAMEING:  break; case GAME_WIN:  break; case GAME_LOST:  break; case GAME_PAUSE:  break; } } @Override public void run() { while (flag) {  long start = System.currentTimeMillis();  myDraw();  logic();  long end = System.currentTimeMillis();  try {  if (end - start < 50) {   Thread.sleep(50 - (end - start));  }  } catch (InterruptedException e) {  e.printStackTrace();  } } } /** * SurfaceView視圖狀態發生改變,響應此函數 */ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width,  int height) { } /** * SurfaceView視圖消亡時,響應此函數 */ @Override public void surfaceDestroyed(SurfaceHolder holder) { flag = false; }}

效果圖:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 濉溪县| 固安县| 尉氏县| 澳门| 新干县| 襄汾县| 西华县| 三门峡市| 凤台县| 依兰县| 潍坊市| 东城区| 太原市| 灯塔市| 大同市| 轮台县| 阜康市| 丹阳市| 江华| 辰溪县| 九龙坡区| 高安市| 喀喇沁旗| 泰兴市| 团风县| 临洮县| 唐山市| 正镶白旗| 民权县| 西畴县| 甘谷县| 宜君县| 玛纳斯县| 霍城县| 安阳县| 阜宁县| 曲阜市| 巴林左旗| 五河县| 竹溪县| 湘潭县|