
Framework: StateManager class
Выкладываю реализацию класса StateManager.
Используя методы add и remove можно показывать сразу несколько Игровых экранов и даже реализовать что-то вроде виндовых окон, если это надо. Но в целом простейшая надстройка для любым списком.
package elmortem.states {
import flash.display.Sprite;
public class StateManager {
private var clip:Sprite = null;
private var list:/*State*/Array = null;
public function StateManager(attrIn:Object) {
clip = attrIn.clip;
list = [];
}
public function free():void {
if (list == null) return;
for (var i:int = 0; i < list.length; i++) {
list[i].free();
clip.removeChild(list[i]);
// порядок вызова важен, т.к. внутри free нам может понадобится parent
}
list = null;
clip = null;
}
public function add(state:State):State {
if (clip == null || state == null) return null;
list.push(state);
clip.addChild(state);
return state;
}
public function remove(state:State):Boolean {
if (clip == null || state == null) return false;
var id:int = list.indexOf(state);
if (id < 0) return false;
list.splice(id, 1);
state.free();
clip.removeChild(state);
return true;
}
public function clear():void {
if (clip == null) return;
for (var i:int = 0; i < list.length; i++) {
list[i].free();
clip.removeChild(list[i]);
}
list = [];
}
public function show(state:State):State {
clear();
return add(state);
}
public function swap(state0:State, state1:State):Boolean {
if (clip == null || list.indexOf(state0) < 0 || list.indexOf(state1) < 0) return false;
clip.swapChildren(state0, state1);
return true;
}
public function sendToBack(state:State):Boolean {
if (clip == null || list.indexOf(state) < 0) return false;
clip.setChildIndex(state, 0);
return true;
}
public function sendToForward(state:State):Boolean {
if (clip == null || list.indexOf(state) < 0) return false;
clip.setChildIndex(state, clip.numChildren - 1);
return true;
}
}
}
Используя методы add и remove можно показывать сразу несколько Игровых экранов и даже реализовать что-то вроде виндовых окон, если это надо. Но в целом простейшая надстройка для любым списком.
- +7
- elmortem
Комментарии (1)