Показать сообщение отдельно
Старый 05.12.2014, 07:47
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 1  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Помогите разобраться с пулом

Доброго времени суток. Помогите с пулом, уже третью неделю бьюсь, с английским плохо, а на русском не нашёл достаточно толкового для меня объяснения (мал мой IQ). Да, на форуме искал, но у всех разная реализация и начинаю ещё больше путать. Теорию что такое пул я понимаю, мне он необходим, т.к. при нагрузках у меня присутствуют просадки фпс в игре, к тому же переделываю игру из кода в первом кадре в классы. Основу брал отсюда - как мне кажется тут самая простая реализация без выкрутасов. Вопросы начинаются начинается с того, что я не понимаю кода, пока мы создаём пул, так же его реализация, да и как потом с выведенными объектами общаться, мне и движение, и физика, и хиттест подключать будет нужно (но это потом, мож сам разберусь, если пойму как обращаться к отдельному элементу пула)
собственно есть два класса, ошибок проверка не выдаёт
этот я выделил для пула
Код AS3:
package package_cl {
 
	import flash.display.Sprite;
	import package_cl.bullet_cl;
 
	public class pool_bullet_cl {
		private var pool:Vector.<bullet_mc>; // так можно мувик кинуть?
		private var counter: uint;
		private var className: Class; //вообще не понимаю что эта строка делает и для чего она
 
		public function pool_bullet_cl(className: Class, length: uint = 1) { //как понимаю, передаём тип объекта (я кинул Sprite) и длину пула
			this.className = className; //что мы этим хотим сказать:
			pool = new Vector.<bullet_mc>(length); //как понимаю, тут я создаю пул из мувиков в количестве length
 
			var i: uint = counter = length;  // готовимся к циклу, но что делает этот цикл? мы же вроде строчкой выше создали pool  из мувиков с заданной длинной
 
			while (--i > -1){
				pool[i] = new className();
			}
		}
		public function get_bullet (): bullet_mc{  // в примере возвращает обджект, мой мувик сойдёт?
			if (counter > 0){                           // если счётчик больше нуля то выполнить?? что даёт следующая строка? Вроде пропускаем код функции, что в данном случаи делает счётчик пула?
				return pool [--counter];
			}
			pool.unshift (new className());   //если я правильно понял, тут мы добавляем новый элемент в пул, только почему className?
			return pool [0];   //прерывание функции, опять пул с индексом "0" - что это даёт?
		}
		public function release_bullet (value: bullet_mc): void{  //это зачем? что эта функция делает?
			pool[++counter] = value
		}
	}
}
второй, должна происходит вроде реализация пула

Код AS3:
package package_cl {
	import flash.geom.Point;
	import package_cl.pool_bullet_cl;
	import flash.display.Sprite;
 
	public class bullet_cl {
		public var pool: pool_bullet_cl = new pool_bullet_cl(Sprite, 150);  //ну это я написал, тут получается мы отправляем в предыдущий класс тип объектов и их количество?
 
 
		public function bullet_cl() {
			for (var i: int = 0, p: Sprite; i < 40; ++i){  //нуждаюсь в расшифровке, что тут вообще происходит? Делаем счётчик, почему до 40? (наверно чисто пример реализации)
				p = pool.get_bullet() as Sprite;  //тут мы что делаем? Для переменной p вызываем функцию и тип объекта спрайт? Не очень понимаю что означает "as"
			}
		}
	}
}
возможно я напортачил, пока переделывал классы под себя, но ошибок не пишет, так что не могу узнать, т.к. сначала нужно понять как это всё работает. Так же могли бы пояснить: есть класс ship в котором есть слушатель события нажатия на клавишу, после обнаружения как раз и нужно вытащить один bullet из пула, так же мне необходимо, что бы он двигался, как мне определить добавленные bullet на сцену, что бы можно было изменять их координаты.

отрывок вызова из класса ship, вдруг нужен для пояснения
Код AS3:
		private function fn_fire_down(event: KeyboardEvent): void {
			if ((event.keyCode == 90) && (fire == true)) {
			}
		}
Добавлено через 2 минуты
заранее всем спасибо, кто выделил время и попытался осилить