Bullet Enemy Game Helper Game View Main Activity
重要模組 Bullet(子彈) Enemy(敵人) Game. Helper(圖片掃描) Game. View(遊戲畫面) Main. Activity(主程式) Player(玩家實作)
畫面配置 // 設定視窗特性 request. Window. Feature(Window. FEATURE_NO_TITLE); get. Window(). set. Flags(Window. Manager. Layout. Params. FLAG_FU LLSCREEN, Window. Manager. Layout. Params. FLAG_FULLSCREEN); // 取得螢幕寬和高 Window. Manager window. Manager = get. Window. Manager(); Display display = window. Manager. get. Default. Display(); int screen. Width = display. get. Width(); int screen. Height = display. get. Height(); game. View = new Game. View(this, screen. Width, screen. Height); set. Content. View(game. View); game. View. start();
玩家建構子 public Player(Bitmap, int frame. Width, int frame. Height) { super(Bitmap); this. frame. Width = frame. Width; this. frame. Height = frame. Height; define. Reference. Pixel(frame. Width/2, frame. Height/2); }
鍵盤設定 public boolean on. Key. Down(int key. Code, Key. Event event) { switch (key. Code) { case Key. Event. KEYCODE_DPAD_UP: player. move(Player. UP); break; case Key. Event. KEYCODE_DPAD_DOWN: player. move(Player. DOWN); break; case Key. Event. KEYCODE_DPAD_LEFT: player. move(Player. LEFT); break; case Key. Event. KEYCODE_DPAD_RIGHT: player. move(Player. RIGHT); break; case Key. Event. KEYCODE_DPAD_CENTER: for (int i = 0; i < bullets. length; i++) { if(bullets[i]. get. Alive()==false){ bullets[i]. set. Alive(true, player. get. Ref. Pixel. X()-bullets[i]. get. Width()/2, player. get. Ref. Pixel. Y()-player. get. Height()); break; } } break; } return super. on. Key. Down(key. Code, event); }
移動玩家 public void move(int direction){ // 向上移動 if(direction==UP){ move(0, -SPEED); if(get. Y()<0){ set. Position(get. X(), 0); } }
顯示 player. Bitmap = Game. Helper. get. Bitmap(context, R. drawabl e. player); player = new Player(player. Bitmap, player. Bitmap. get. Widt h(), player. Bitmap. get. Height());
初始化 // 初始化 public void init(){ // 初始化玩家 player. init(); for (int i = 0; i < bullets. length; i++) { bullets[i]. set. Alive(false); } }
出生位置 public void set. Alive(){ is. Alive = true; int x = (r. next. Int() & 0 x 7 fffffff)%(screen. Widthframe. Width); set. Position(x, 0); }
移動 public void move(){ if(is. Alive){ move(0, 3); if(get. Y()>screen. Height){ is. Alive=false; } } }
移動子彈 public void move(){ if(is. Alive){ move(0, -3); } if(get. Y()<0){ is. Alive = false; } }
子彈狀態 public boolean get. Alive(){ return this. Alive; }
執行緒 public void run() { load(); init(); while(true){ if(!enemy. is. Alive()){ enemy. set. Alive(); } tick(); post. Invalidate(); try { Thread. sleep(100); } catch (Interrupted. Exception e) { } } }
參考資料 Bitmap解說 1: http: //fecbob. pixnet. net/blog/post/36792103%E 6%B 7%B 1%E 5%85%A 5%E 5%AD%B 8%E 7%BF%92 bitmapandroid%E 7%9 A%84%E 5%9 C%96%E 7%89%87%E 6%8 E%83%E 6% 8 F%8 F(%E 8%BD%89) Bitmap解說 2: http: //tomkuo 139. blogspot. tw/2010/03/androidbitmap. html 畫布特性: http: //jjnnykimo. pixnet. net/blog/post/30220216 -android%E 6%87%89%E 7%94%A 8%E 7%A 8%8 B%E 5%BC%8 F%E 5%85%A 8 %E 8%9 E%A 2%E 5%B 9%95%E 4%BD%9 C%E 6%B 3%95 0 x 7 fffffff : http: //zhidao. baidu. com/question/116411121 Android深入淺出 專題實作 16 -2 ~ 16 -19
- Slides: 21