Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.12.2007, 19:32
VovkaMorkovka вне форума Посмотреть профиль Отправить личное сообщение для VovkaMorkovka Найти все сообщения от VovkaMorkovka
  № 1  
Ответить с цитированием
VovkaMorkovka

Регистрация: Apr 2006
Сообщений: 421
По умолчанию Возможно - ли соревнование потоков в 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);
			
		}
Вот так сортирую высоты

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


Последний раз редактировалось VovkaMorkovka; 18.12.2007 в 19:40.
Старый 19.12.2007, 12:18
mip вне форума Посмотреть профиль Отправить личное сообщение для mip Найти все сообщения от mip
  № 2  
Ответить с цитированием
mip

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

Старый 19.12.2007, 13:14
VovkaMorkovka вне форума Посмотреть профиль Отправить личное сообщение для VovkaMorkovka Найти все сообщения от VovkaMorkovka
  № 3  
Ответить с цитированием
VovkaMorkovka

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

Старый 20.12.2007, 09:42
mip вне форума Посмотреть профиль Отправить личное сообщение для mip Найти все сообщения от mip
  № 4  
Ответить с цитированием
mip

Регистрация: Dec 2007
Сообщений: 10
на этот вопрос сможете ответить только вы, так как на мой взгляд исходных данных недостаточно, хотелось бы видеть фрагменты кода удаления и updaeView

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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