1. 程式人生 > >遊戲移動的實現

遊戲移動的實現

rec span raw see play left 類繼承 編寫 right

遊戲移動的實現原理:

            畫出坦克後,在protected void onKeyEvent(int key) 方法中定義一個swich語句接收鍵盤按鍵

        根據按鍵的方向來調用Tank的移動方法,當然要先編寫Tank的移動方法。根據傳入的方向加減Tank

        圖片的坐標實現移動。

實現步驟:

1、新建一個父類,命名為Element

技術分享
 1 public class Element {    //所有對象的父類
 2     int x;    
 3     int y;    
 4     int width; //圖片的寬
 5     int
height; //圖片的高 6 String imagePath; //存儲圖片路徑 7 8 public void draw(){ //Draw方法 畫出對象 9 try { 10 DrawUtils.draw(imagePath, x, y); 11 } catch (IOException e) { 12 // TODO 自動生成的 catch 塊 13 e.printStackTrace(); 14 } 15 } 16 }
Element

2、新建一個枚舉類,命名為Direction

技術分享
1 public enum Direction {    //定義一個枚舉類
2     UP,DOWN,LEFT,RIGHT    
3 }
Direction

3、讓Tank類繼承Element類並添加移動方法

技術分享
 1 public class Tank extends Element {
 2     private int speed = 64;    //移動的速度
 3     public Tank(int x, int y) {    //定義一個Tank的構造方法
 4         this.x = x;    //
坐標的設置 5 this.y = y; 6 this.imagePath = "res/img/tank_u.gif"; //Tank的圖片路徑 7 } 8 9 public void move(Direction dir) { //Tank移動的方法 10 switch (dir) { //根據接收到的方向來移動 11 case UP: 12 y -= speed; 13 break; 14 15 case DOWN: 16 y += speed; 17 break; 18 case LEFT: 19 x -= speed; 20 break; 21 case RIGHT: 22 x += speed; 23 break; 24 } 25 } 26 }
Tank

4、在設置類中的onKeyEvent方法中設置移動方法的調用

技術分享
 1 public class TankWorld extends Window {
 2     Tank tank;    //定義一個Tank對象
 3     List<Element> list;    //定義一個集合存儲對象
 4 
 5     public TankWorld(String title, int width, int height, int fps) {
 6         super(title, width, height, fps);
 7         // TODO 自動生成的構造函數存根
 8     }
 9 
10     @Override
11     protected void onCreate() {    
12         try {
13             SoundUtils.play("res/snd/start.wav");    //遊戲開始音樂 
14         } catch (IOException e) {
15             // TODO 自動生成的 catch 塊
16             e.printStackTrace();
17         }
18         list = new CopyOnWriteArrayList<>();    //可遍歷增刪集合
19         tank = new Tank(0, 0);    //生成的Tank對象坐標
20         list.add(tank);    //將Tank對象存儲到集合
21     }
22 
23     @Override
24     protected void onMouseEvent(int key, int x, int y) {
25         // TODO 自動生成的方法存根
26 
27     }
28 
29     @Override
30     protected void onKeyEvent(int key) {  //鍵盤監聽方法
31         switch (key) {        //根據接收的按鍵執行
32         case Keyboard.KEY_UP:    //上方向鍵
33             tank.move(Direction.UP); //Tank移動的方法
34             break;
35 
36         case Keyboard.KEY_DOWN:    //下方向鍵
37             tank.move(Direction.DOWN);
38             break;
39 
40         case Keyboard.KEY_LEFT:    //左方向鍵
41             tank.move(Direction.LEFT);
42             break;
43 
44         case Keyboard.KEY_RIGHT:    //右方向鍵
45             tank.move(Direction.RIGHT);
46             break;
47 
48         }
49 
50     }
51 
52     @Override
53     protected void onDisplayUpdate() {
54         for (Element e : list) {    //循環遍歷集合中的對象
55             e.draw();    //在界面畫出對象
56         }
57     }
58 
59 }
設置類

隨筆說:

        目前移動實現的效果還不完善,只能橫著移動。素材可以自己在網上找一些比較酷炫的代替。

    需要對繼承、接口足夠了解,才能事半功倍。不用重復的定義一個對象的屬性方法。

遊戲移動的實現