游戏移动的实现
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 }
2、新建一个枚举类,命名为Direction
1 public enum Direction { //定义一个枚举类
2 UP,DOWN,LEFT,RIGHT
3 }
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 }
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 }
随笔说:
目前移动实现的效果还不完善,只能横着移动。素材可以自己在网上找一些比较酷炫的代替。
需要对继承、接口足够了解,才能事半功倍。不用重复的定义一个对象的属性方法。
以上是关于游戏移动的实现的主要内容,如果未能解决你的问题,请参考以下文章