Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Возможно - ли соревнование потоков в ActionScrip 3.0 (http://www.flasher.ru/forum/showthread.php?t=105584)

VovkaMorkovka 18.12.2007 19:32

Возможно - ли соревнование потоков в ActionScrip 3.0
 
Привет всем, возникла такая проблема:
Реализую игру в которой использую модель - вид - контроллер. В модели есть стек со снарядами, при появлении снаряда в модели она генерит соответствующее событие, и при взрыве(удалении снаряда) так же.
Снаряд создается по нажатию клавиши(выстрел). Вид слушает события создания и удаления и соответственно по созданию создает мувиклип - снаряд добавляет его на стейдж и запихивает элемент в 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);
                       
                }

Вот так сортирую высоты

Зараннее благодарен,
Владимир
Владимир

mip 19.12.2007 12:18

в 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 использует ссылку на еще живой обьект, тоесть удаление не произошло полностью

VovkaMorkovka 19.12.2007 13:14

А как можно этого избежать? Можно, конечно использовать обработку исключений, но хотелось - бы решить проблему в принципе

mip 20.12.2007 09:42

на этот вопрос сможете ответить только вы, так как на мой взгляд исходных данных недостаточно, хотелось бы видеть фрагменты кода удаления и updaeView


Часовой пояс GMT +4, время: 18:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.