游戏移动的实现

Posted B_Lasting_尊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏移动的实现相关的知识,希望对你有一定的参考价值。

游戏移动的实现原理:

            画出坦克后,在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 }
设置类

 

 

随笔说:

        目前移动实现的效果还不完善,只能横着移动。素材可以自己在网上找一些比较酷炫的代替。

    需要对继承、接口足够了解,才能事半功倍。不用重复的定义一个对象的属性方法。

以上是关于游戏移动的实现的主要内容,如果未能解决你的问题,请参考以下文章

如何检查刚体是否在移动?

unity动画一个片段播放完怎么让它不会到初始状态

jquery实现移动端slotmachine抽奖游戏

实现简单迷宫小游戏(几行代码)-免费附源码

PHP必用代码片段

帆布迷宫游戏流畅的动画