?? 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 *//** 消息發(fā)送后立即返回,然后再由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() { //有待改進(jìn) 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);}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -