📄 gamelistener.java
字号:
package eatbean.event;import eatbean.Debug;//import java.util.EventListener;import java.util.Vector;/** * Title: 吃豆子 * Description: 小游戏 * Copyright: Copyright (c) 2002 * Company: Raindrop * @author 一无所有 * @version 1.0 *//** 消息发送后立即返回,然后再由processMsg处理 */public abstract class GameListener extends Thread implements EventListener { private Vector msgQueue = new Vector(); private boolean keepRunning = true; public GameListener() { this.start(); } public final void run() { GameEvent msg; while(keepRunning) { msg = getMsg(); processMsg(msg); } while(!msgQueue.isEmpty()) { //处理剩余消息 msg = (GameEvent)removeFirst(msgQueue); processMsg(msg); } } private final void processMsg(GameEvent msg) { if(msg == null) return; switch(msg.getMsgId()) { case GameEvent.MSG_OBJECT_EAT : objectEat(msg); break; case GameEvent.MSG_ACTOR_EAT : actorEat(msg); break; case GameEvent.MSG_STATION_DONE : stationDone(msg); break; default : if(Debug.ON) Debug.println("GameListener.processMsg() : 无法识别的消息类型"); } } private synchronized GameEvent getMsg() { GameEvent result = null; if(msgQueue.isEmpty()) try { wait(); //释放对象锁,等待notify } catch(Exception ex) {} else { result = (GameEvent)removeFirst(msgQueue); } return result; } public synchronized void postMsg(GameEvent msg) { if(!keepRunning) return; msgQueue.addElement(msg); notifyAll(); //唤醒getMsg(); } public synchronized void free() { //有待改进 keepRunning = false; notifyAll(); } private Object removeFirst(Vector v) { Object result; result = v.elementAt(0); v.removeElementAt(0); return result; } /** 豆子或其他特殊对象被Fairy吃 */ abstract protected void objectEat(GameEvent e); /** Fairy或Sprite对象被吃 */ abstract protected void actorEat(GameEvent e); /** 所有的豆豆被吃完 */ abstract protected void stationDone(GameEvent e);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -