Цитата:
Или если хотите, сделайте маленький пример - два квадрата, которые друг на друга заходят ровно на половину.
По клику мышки, они меняют глубину местами, то один выше, то второй. И при каждом клики пользователь получает +10
очков. И по завершению 20 секунд, в trace нужно вывести сумму всех очков.
|
Так как на as3 не программирую написал простой псевдокод.
Пусть это будет упрощенная игра. Тогда у нас есть GameModel, GameView и GameController. Также есть класс-вьюшка RectangleView.

Код AS3:
//Главный класс, инициализирует MVC
Main {
model = new GameModel();
view = new GameView(model);
controller = new GameController(model, view);
}
Model

Код AS3:
//Модель
GameModel {
gameOver = false; //состояние игры
score = 0; //очки
//устанавливает и диспатчит состояние игры
setGameOverState(flag) {
gameOver = flag;
dispatchEvent(Event.CHANGE_STATE);
}
//возвр. состояние игры
getGameOverState() {
return gameOver;
}
//суммирует и диспатчит очки
addScore() {
score += 10;
dispatchEvent(Event.CHANGE_SCORE);
}
//возвр. очки
getScore() {
return score;
}
}
View

Код AS3:
//Представление
GameView {
model; //модель игры
box1; //вьюшка прямоугольника 1
box2; //вьюшка прямоугольника 2
canvas; //холст
//конструктор
constructor(_model) {
model = _model; //получаем модель игры
canvas = new Canvas(); //создаём холст
//создаём вьюшки прямоугольников
box1 = new RectangleView(canvas, 150, 150, 1);
box2 = new RectangleView(canvas, 75, 150, 2);
//подписываемся на событие нажатия мыщи на прямоугольники, вызываем метод диспатча добавления очков
box1.addEventListener(MouseEvent.MOUSE_DOWN, dispatchAddScore);
box2.addEventListener(MouseEvent.MOUSE_DOWN, dispatchAddScore);
//подписываемся на событие изменения очков игры, вызываем метод, который переставляет глубину для кажлого из прямоугольников
model.addEventListener(Event.CHANGE_SCORE, swapBoxes);
//подписываемся на событие изменения состояния игры, вызываем метод вывода кол-ва очков
model.addEventListener(Event.CHANGE_STATE, showScore);
//запускаем таймер игры, по окончанию таймера вызываем метод, который диспатчит окончание таймера
setTimeout(dispatchTimerOver, 20000);
}
//показывает кол-во очков пользователя
showScore() {
//если состояние конца игры - true
if (model.getGameOverState() == true) {
trace(model.getScore()); //воводим кол-во очков
}
}
//меняет местами глубины прямоугольников
swapBoxes() {
box1Depth = box1.getDepth();
box1.setDepth(box2.getDepth());
box2.setDepth(box1Depth);
}
//диспатчит добавление очков
dispatchAddScore() {
dispatchEvent(Event.ADD_SCORE);
}
//диспатчит окончание таймера
dispatchTimerOver() {
dispatchEvent(Event.TIMER_OVER);
}
}
Controller

Код AS3:
//Контроллер
GameController {
model; //модель игры
view; //вьюшка игры
//конструктор
constructor(_model, _view) {
model = _model; //получаем модель
view = _view; //получаем вьюшку
//подписываемся на событие добавления очков, изменяем в модели очки
view.addEventListener(Event.ADD_SCORE, addScore);
//подписываемся на событие окончания таймера, изменяем состояние игры
view.addEventListener(Event.TIMER_OVER, setGameOverState);
}
//добавляет очки в модели
addScore() {
model.addScore();
}
//меняет состояние игры
setGameOverState() {
model.setGameOverState(true);
}
}

Код AS3:
RectangleView {
//тут ничего интересного, всё обычно
}