文档章节

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

J_sky
 J_sky
发布于 2015/11/15 13:37
字数 857
阅读 62
收藏 0

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

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



© 著作权归作者所有

J_sky
粉丝 11
博文 25
码字总数 12709
作品 3
朝阳
程序员
私信 提问
15.1-全栈Java笔记:Java事件模型是什么?事件控制的过程有哪几步??

应用前边两节上一章节的内容,大家可以完成一个简单的界面,但是没有任何的功能,界面完全是静态的,如果要实现具体功能的话,必须要学习事件模型。 事件模型简介及常见事件模型 对于采用了图...

全栈Java
2018/06/26
0
0
移动终端开发求暑期实习岗位...有木有....

本人现在大三,大四全年没课,学校规定期末的时候如果找不到实习单位就必须留在学校参加学校的校内实训,不想被坑....求带走.... 描述下自己....热爱编程,喜欢移动互联网和移动终端方向的开...

玄雨
2013/03/01
322
7
python学习笔记--趣学Python编程第十三章的例子

弹球 由反弹球和球拍构成的游戏。球会在屏幕上飞过来,玩家要用球拍把它弹回去 画布和画弹球 引入模块 创建窗体 创建Ball类 创建Ball类,它有两个参数,一个是画布,另一个是球的颜色 把画布...

cysky
2018/06/28
0
0
OSChina 开源周刊第31期 —— Nginx 作为反向 Proxy 优化要点

每周技术抢先看,总有你想要的! 移动开发 【博客】IOS 中图片(UIImage)拉伸技巧 IOS 中图片拉伸处理的几种方法总结。详情 前端开发 【软件】AngularJS 自动完成 Angucomplete Angucomplete ...

OSC编辑部
2015/04/25
4.6K
8
OSChina 开源周刊第31期 —— Nginx 作为反向 Proxy 的优化要点

每周技术抢先看,总有你想要的! 移动开发 【博客】IOS 中图片(UIImage)拉伸技巧 IOS 中图片拉伸处理的几种方法总结。详情 前端开发 【软件】AngularJS 自动完成 Angucomplete Angucomplete ...

OSC编辑部
2015/04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

默认指定logback日志位置

平常我们在使用logback作为日志框架的时候,如果我们不指定日志的绝对路径,就会在我们的当前目录(user.dir)下面生成日志文件,平常我们在开发阶段只要制定一个log目录就好了,但是如果在生...

seno
22分钟前
0
0
浅谈 Spark 的多语言支持

作者:郑锴,花名铁杰,阿里巴巴高级技术专家,Apache Hadoop PMC,Apache Kerby 创立者。深耕分布式系统开发和开源大数据多年,先后专注在安全,存储和计算领域。之前在 Intel,目前转战阿里...

阿里云官方博客
29分钟前
0
0
Windows 10 文件覆盖的坑

Windows 10 下,文件覆盖的时候,如果文件名大小写不同,但字母相同时,会有问题。 如下图,新文件是大写 S 开头,旧文件是小写开头,覆盖后,仍然是小写开头。 不过文件内容是覆盖过来了的,...

yeyi771
30分钟前
2
0
浅谈 Spark 的多语言支持

作者:郑锴,花名铁杰,阿里巴巴高级技术专家,Apache Hadoop PMC,Apache Kerby 创立者。深耕分布式系统开发和开源大数据多年,先后专注在安全,存储和计算领域。之前在 Intel,目前转战阿里...

阿里云云栖社区
34分钟前
3
0
Linux运维常见的硬件及系统问题

一、服务器常见故障和现象 1、有关服务器无法启动的主要原因 : ①市电或电源线故障(断电或接触不良) ②电源或电源模组故障 ③内存故障(一般伴有报警声) ④CPU故障(一般也会有报警声) ⑤主板故...

寰宇01
41分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部