用Java写解谜RPG-2.Game与GameObject:内存与swing的交流
来源:互联网 发布:单片机温度采集系统 编辑:程序博客网 时间:2024/06/05 20:44
在MVC建设完毕后,我们将开始Game类中currentObject对象,即GameObject的建设。
GameObject是实现具体的绘画部分。由于失误,笔者将本应该是第二篇的本文漏掉了,读者在读本篇时可以参考上篇《MVC下的开始界面和所谓按钮》可以参考。
总的来说,GameObject随着操作进行变化,这一点类似于Android中的activity,当自己启动游戏时,Game中的currentObject为StartObject;当选择了开始游戏时,Game中的GameObject类型的currentObject又被替换成了RpgObject。在Game的大环境下,currentObject随着操作变化被替换,从而产生与Android中activity之间替换的类似效果。
附上GameObject的代码
package model;import java.applet.AudioClip;import java.awt.Graphics;import model.rpg.Player;import model.rpg.SaveData;import model.rpg.map.Map;import model.start.ItemObject;import model.start.LoadObject;import view.Control;import view.Lib;/** * Game在运作时重画此类和其子类的对象 * */public abstract class GameObject {private static AudioClip click,change,sound;private static AudioClip music = null;private double startTime = 0;private static long mill = 0;static {try {click = java.applet.Applet.newAudioClip(GameObject.class.getClassLoader().getResource("source/start/确认.wav"));change = java.applet.Applet.newAudioClip(GameObject.class.getClassLoader().getResource("source/start/切换.wav"));} catch (Exception ef) {}}/** * 构造方法,new的时候将被自动更新到Game中的currentObject中 * */public GameObject() {startTime = System.currentTimeMillis();if (!(this instanceof LoadObject || this instanceof ItemObject)) {Game.getInstance().setCurrent(this);}}/** * 循环播放背景音乐 * */public void musicStart(String music) {try {GameObject.music = java.applet.Applet.newAudioClip(this.getClass().getClassLoader().getResource(music));GameObject.music.loop();// 循环播放} catch (Exception ef) {javax.swing.JOptionPane.showMessageDialog(null, "音乐播放失败");}}protected abstract void keyResponse();public abstract void draw(Graphics g);public abstract void die();/**为了避免因keyPressed连续触发而造成的不便,在某些地方需要检查这次按下和上次按下之间是否有时间间隔,即是否松开过手*/public static boolean checkTimeGap(int gap) {boolean timeGap = false;if (Math.abs(mill - System.currentTimeMillis()) > gap) {timeGap = true;}mill = System.currentTimeMillis();return timeGap;}/**为了避免因keyPressed连续触发而造成的不便,需要检查这次按下和刚刚启动之间是否有时间间隔,即是否new之后没有及时松手*/protected boolean checkStartGap(int gap) {long mill = System.currentTimeMillis();if (mill - startTime > gap)return true;return false;}public GameObject getType() {return this;}/** * Rpg专用 * */public SaveData getNowStatus(){return new SaveData();}/** * 各种音效的播放 * */public void tempSoundPlay(String path){try {sound = java.applet.Applet.newAudioClip(this.getClass().getClassLoader().getResource(path));sound.play();} catch (Exception ef) {}}/**由于是静态对象,只要游戏不关闭窗口,得到的Item就不会丢失,所以必须清空*/protected void clearStatic(){Player.getInstance().getItems().clear();Map.startChase = false;Map.chaseReady = 0;Control.chaseX = 6;Control.chaseY = 6;Map.readyForDoor = false;Map.playerX = 6- Lib.clipX / 2 - 1;Map.playerY = 6- Lib.clipY / 2 - 1;Player.getInstance().clearDirection();}/** * 点击音效 * */public void click(){click.play();}/** * 上下切换音效 * */public void change(){change.play();}/** * 背景音乐停止 * */public static void musicStop() {music.stop();}}
0 0
- 用Java写解谜RPG-2.Game与GameObject:内存与swing的交流
- 用Java写解谜Rpg-1.我理解的MVC与课设
- 用Java写解谜Rpg-4.加载界面,RPG界面与Player
- 用Java写解谜RPG-3.MVC下的开始界面和所谓按钮
- 一个单机棋盘式半即时解谜RPG的开发与反思、1
- 一个单机棋盘式半即时解谜RPG的开发与反思、2
- 一个单机棋盘式半即时解谜RPG的开发与反思、3
- Unity3D中Gameobject与gameobject的区别
- java与Go的交流
- Transform与GameObject的区别于用法
- 用java Swing 写的计时器
- uinty3d--GameObject与Transform
- 幽灵、吸血鬼与僵尸:有创意的推理解谜游戏
- java AWT 与Swing
- JAVA的Swing图形界面与内部类
- java中awt与swing的区别
- transform与gameobject的联系,与Find()的关系
- 心与心的交流
- #ifndef/#define/#endif使用详解
- [期望 生成函数 卷积 导数] BZOJ 4001 [TJOI2015]概率论
- 键盘录入数据的3中实现方式
- Android通过ksoap2这个框架调用webservice大讲堂
- ZeroMQ 的模式
- 用Java写解谜RPG-2.Game与GameObject:内存与swing的交流
- Python GUI Programming (Tkinter)
- Gson报错,低级错误
- springMVC(8)------mvc:view-controller直接转发页面
- 元素分类
- AutoCAD ObjectArx2010安装
- HTML标签
- 悟
- 23种设计模式(2):简单工厂模式