我们在场景中画出了小球及球拍,接下来,我们分别实现对球拍及小球的控制。
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()
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
传送门: