遊戲移動的實現
阿新 • • 發佈:2017-08-24
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 intElementheight; //圖片的高 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 }
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 }
設置類
隨筆說:
目前移動實現的效果還不完善,只能橫著移動。素材可以自己在網上找一些比較酷炫的代替。
需要對繼承、接口足夠了解,才能事半功倍。不用重復的定義一個對象的屬性方法。
遊戲移動的實現