我们在场景中画出了小球及球拍,接下来,我们分别实现对球拍及小球的控制。
3.控制球拍的左右移动。
说到控制,这里我们一定要有自己的控制器了,控制球拍左右移动需要用到键盘上的左右方向键,每按下一次球拍移动一定距离,这里我们就需要利用到AWT的按键监听器类。
KeyAdapter 接收键盘事件的抽象适配器类。
关于此类的方法只有三个,具体可以查看API文档,这里我只需要用到按下按键事件。
我们需要一个框架,这样方便我们以后调用此类需求应用,我们可以定义一个接口,接口中包括四个方法,上下左右移动的方法。这样后续我们可以通过来实现这个方法来实现这四个功能。框架中请参考:GameSpriteMoveKeyAdapterInterface,这个接口中我定义了四个方法,当然,键盘上的按键很多多,以后我们可以继续创建接口,实现需要的功能方法。
接下来,我们继承KeyAdapter 创建一个类GameSpriteMovekeyKeyAdapter,implements GameSpriteMoveKeyAdapterInterface ,把他的方法实现,但只要实现空方法即可。我们的目的是很明确的,把他们关联起来就是为了使之,按上下左右分别实现上下左右四个接口中的方法,后继我们如果游戏中有上下左右的需要求,只要继承GameSpriteMovekeyKeyAdapter建立一个新类,然后实现其中的四个方法,就可以实现上下左右移动的功能了。这样大大简化了代码的重复。
好吧,我们建游戏的键盘中移动的监听PinBallGameMoveKeyAdapter
import mygameframe.GameSpriteMovekeyKeyAdapter; /** * 本类继承了框架里的游戏键盘控制器类 方向控制类,用来控制球拍的左右移动 * * @author J_sky */ public class PinBallGameMoveKeyAdapter extends GameSpriteMovekeyKeyAdapter { public PinBallGameMoveKeyAdapter() { } public PinBallGameMoveKeyAdapter(Racket racket) { this.racket = racket; } /** * 球拍 */ private Racket racket; @Override public void left() { if (racket.getX() > 0) { racket.setX(racket.getX()-10); // System.out.println("左移动10"); } } @Override public void right() { if (racket.getX() < 300 - racket.getWidth()) { racket.setX(racket.getX()+10); // System.out.println("右移动10"); } } }
PinBallGameMoveKeyAdapter 类中需要球拍的对象,我们把他通过构造器传递进来,这样就可以通过监听器中的方法来控制球拍的左右移动了。
同样的道理,我们建底层的游戏逻辑框架类GameLogic,这其中包括了一些游戏中最常用的逻辑:游戏开始,游戏结束,游戏暂停,游戏重新开始等,这里后续我们可以丰富自己的需要添加需求进去这里方便调用传参。
然后实现游戏的开始和暂停。参考GameLogicKeyAdapterInterface 接口 和GameLogicKeyAdapter实现类,然后继承GameLogicKeyAdapter创建我们弹球游戏中的键盘逻辑需求类。PinBallGameLogicKeyAdapter
** * * @author J_sky */ public class PinBallGameLogicKeyAdapter extends GameLogicKeyAdapter{ public PinBallGameLogicKeyAdapter() { } public PinBallGameLogicKeyAdapter(PinBallGameLogic pbgl) { this.pbgl = pbgl; } private PinBallGameLogic pbgl; @Override public void start() { pbgl.setGameStart(true); if (pbgl.isGameStart()&&pbgl.isGameLose()) { pbgl.setGameRestart(true); } } @Override public void stop() { pbgl.setGameStop(!pbgl.isGameStop()); } }
这样我们通过回车键就可以开始和重新开始游戏,通过空格键可以暂停游戏。
具体可以查看游戏框架源码,我已上传git.osc
传送门:
http://git.oschina.net/J_Sky/HEHEJava2DGame