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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.02.2013, 11:23
XMON вне форума Посмотреть профиль Отправить личное сообщение для XMON Найти все сообщения от XMON
  № 1  
Ответить с цитированием
XMON
[+1 13.12.12]
[++1 13.12.12]

Регистрация: Aug 2012
Сообщений: 145
Question как сделать так чтобы после удаления объекта из массива он больше не использовался?

Код:
Код AS3:
 
var I1F:Array = [a1,b1,c1]
var I2F:Array = [a2,b2,c2]
var I3F:Array = [a3,b3,c3]
var I4F:Array = [a4,b4,c4]
var I5F:Array = [a5,b5,c5]
var I6F:Array = [a6,b6,c6]
var IALLF:Array = [I1F, I2F, I3F, I4F, I5F, I6F]
 
import flash.utils.Timer;
import flash.events.TimerEvent;
import com.greensock.*;
 
var NZ:Array = new Array
var BOT:Array = [new BOOTS()]
 
for (var max_bot:int; max_bot<10; max_bot++)
{
	if (max_bot != 0)
	{
		AB(max_bot)
	}	
}
 
function AB(index_bot:Number)
{
	var tim:Timer = new Timer (1000,1)
    var tim_floor:Timer = new Timer (1200,1)
	tim.addEventListener(TimerEvent.TIMER_COMPLETE, ACTIVE_BOT)
	tim.start()
	BOT.push(new BOOTS)
	addChild (BOT[index_bot])
function ACTIVE_BOT (e:TimerEvent):void
{
	var MAX_STEP:int
	var thought_bot_floor:Array = new Array
    var thought_bot_room:MovieClip 
	var STEP:Array = [1,2,3,4,5,6,7]
	var MAX_STEP_MAX = STEP[Math.floor( Math.random() * STEP.length )]
	var index_thought_bot_floor:Number = Math.floor( Math.random() * IALLF.length )
	thought_bot_floor = IALLF[index_thought_bot_floor]
	var index_thought_bot_room:Number = Math.floor( Math.random() * thought_bot_floor.length )
	thought_bot_room = thought_bot_floor[index_thought_bot_room]
	IALLF[index_thought_bot_floor].splice(index_thought_bot_room, 1);
	if (BOT[index_bot].x >= 274)
	{
		TweenLite.to(BOT[index_bot], 1, {x:500});
		addEventListener (Event.ENTER_FRAME, FLORS)
	}
	if (BOT[index_bot].x <= 274)
	{
		TweenLite.to(BOT[index_bot], 1, {x:50});
		addEventListener (Event.ENTER_FRAME, FLORS)
	}
function FLORS (e: Event):void
{
	if (BOT[index_bot].x == 500)
	{
		tim_floor.addEventListener(TimerEvent.TIMER_COMPLETE, room_bot)
        tim_floor.start()
		TweenLite.to(BOT[index_bot], 0.4, {y:thought_bot_room.y});
	}
	if (BOT[index_bot].x == 50)
	{
		tim_floor.addEventListener(TimerEvent.TIMER_COMPLETE, room_bot)
        tim_floor.start()
		TweenLite.to(BOT[index_bot], 0.4, {y:thought_bot_room.y});
	}
}
 
function room_bot(e:TimerEvent):void
{
	MAX_STEP ++
	removeEventListener (Event.ENTER_FRAME, FLORS)
	TweenLite.to(BOT[index_bot], 0.5, {x:thought_bot_room.x,y:thought_bot_room.y});
	tim_floor.stop ()
	tim.stop ()
	bot_maind ()
}
 
function bot_maind ():void
{
	IALLF[index_thought_bot_floor].push(thought_bot_room)
	var index_thought_bot_room:Number = Math.floor( Math.random() * thought_bot_floor.length )
	thought_bot_room = thought_bot_floor[index_thought_bot_room]
	IALLF[index_thought_bot_floor].splice(index_thought_bot_room, 1);
	if (MAX_STEP >= MAX_STEP_MAX)
	{
		tim.addEventListener(TimerEvent.TIMER_COMPLETE, ACTIVE_BOT)
		tim.start()
	}
	else 
	{
		IALLF[index_thought_bot_floor].push(thought_bot_room)
		tim_floor.start()
	}
}
}
}
Смысл этого кода:
Создается 10 ботов, и они из массива IALLF выбирают массив, а из этого массива выбирают объекты к которым они должны идти, но как только боты выбирают этот объект, он сразу удаляется из этих массивов для того чтобы другие боты на ходили на этот объект. По прибытию бота на объект он снова добавляется в массив и он заново открыт для других ботов, а этот бот уходит на другой объект и все повторяется заново.

Проблема:
Помогите исправить проблему, что 2 бота встают на один и тот же объект?

Старый 20.02.2013, 11:37
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
В таком коде не разобраться. Ставьте трэйсы, упрощайте и ищите момент, когда у вас сохраняется ссылка на бота. Если я правильно понял, в чем у вас траббл.

И еще: называйте ваши функции и переменные по-человечески.
__________________
hauts.ru

Старый 20.02.2013, 11:47
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Говоря объективно, этот код читать намного сложнее, чем код полученый от декомпилятора. Такое ощущение, что тут еще и обфускатором прошлись )
Придется либо переписать это, для начала, на более "человеко-читаемый" язык, либо разбираться с проблемами самостоятельно.

Старый 20.02.2013, 13:24
XMON вне форума Посмотреть профиль Отправить личное сообщение для XMON Найти все сообщения от XMON
  № 4  
Ответить с цитированием
XMON
[+1 13.12.12]
[++1 13.12.12]

Регистрация: Aug 2012
Сообщений: 145
недавно проверил трейсами и оказалось что массив IALLF через некоторое время работы программы становится гораздо больше своего первоначального размара.

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

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

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


 


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


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