![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
Привет всем, возникла такая проблема:
Реализую игру в которой использую модель - вид - контроллер. В модели есть стек со снарядами, при появлении снаряда в модели она генерит соответствующее событие, и при взрыве(удалении снаряда) так же. Снаряд создается по нажатию клавиши(выстрел). Вид слушает события создания и удаления и соответственно по созданию создает мувиклип - снаряд добавляет его на стейдж и запихивает элемент в HashMap. Потом в процессе полета с использованием итератора из этой хешмапы снаряда пересчитываются высоты, пересчет происходит в ф ции updateView(), которая реагирует на событие апдейта. Так вот, когда модель удаляет снаряд и генерирует событие, вид это событие подхватывает и удаляет вид снаряда из стейджа и из своего стека, но проблема в том, что ф - ция вида - updateView() считает, что мувиклип - снаряд все еще не удален Это сайт с которог скачивал структуры данных, HasMap использую //Ф - ция отображаеые обьекты объекты по возрастанию глубины
private function sortDepth():void{
var commonArray:Array=new Array();
commonArray=commonArray.concat(containerOfCubes);
commonArray.push(playerView);
commonArray=commonArray.concat(containerOfCreaturesView.toArray());
commonArray=commonArray.concat(this.containerOfCartriges);
commonArray=commonArray.concat(this.containerOfShellsView.toArray());
commonArray=commonArray.concat(this._containerOfMortarShells.toArray());
commonArray.sort(sortAccordingIsometry,Array.NUMERIC);
for (var i:Number=0;i<commonArray.length;i++){
setChildIndex(commonArray[i],SetParameters.START_DEPTH+i);
}
//Снаряды поверх всего, поэтому они добавляются последними
//setChildIndex(_mortarShellMC,SetParameters.START_DEPTH+commonArray.length);
}
Зараннее благодарен, Владимир Владимир Последний раз редактировалось VovkaMorkovka; 18.12.2007 в 19:40. |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 10
|
в awm1 было:
Flash executes action blocks one after another, so the execution flow inside of a block is never interrupted, neither by event nor by gotoAndPlay() or similar actions. Real parallel execution would be nicer? I'm sure it would dramatically affect player stability, which is great now, considering all things going on in a complex movie. но для awm2 я не могу найти точного описания о том как проходит выполнение. И так как в фичах не описано ничего подобного, то я предпологаю что все осталось по старому: код не может быть прерван извне. Исходя из этого - скорее всего updateView использует ссылку на еще живой обьект, тоесть удаление не произошло полностью |
|
|||||
|
[+3 13.02.08]
Регистрация: Apr 2006
Сообщений: 421
|
А как можно этого избежать? Можно, конечно использовать обработку исключений, но хотелось - бы решить проблему в принципе
|
|
|||||
|
Регистрация: Dec 2007
Сообщений: 10
|
на этот вопрос сможете ответить только вы, так как на мой взгляд исходных данных недостаточно, хотелось бы видеть фрагменты кода удаления и updaeView
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:03. |
|
|
« Предыдущая тема | Следующая тема » |
|
|