Java PinBall 简单弹球小游戏【3】球拍左右移动和场景的监听器

我们在场景中画出了小球及球拍,接下来,我们分别实现对球拍及小球的控制。

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



你可能感兴趣的:(Java PinBall 简单弹球小游戏【3】球拍左右移动和场景的监听器)