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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.06.2011, 12:25
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 11  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
У меня тоже такое было я делал движения тоннеля через твин стандартный флешевский. через пару минут он останавливался. потом стал использовать TweenMax проблема решилась
Нужно сохранять ссылку на твин. В любом случае.
__________________
тут я

Старый 06.06.2011, 15:10
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 12  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
Цитата:
Сообщение от ndez Посмотреть сообщение
Это первая моя игрушка, много чего не знаю. Это пример, реально ботов много видов и появляются они спонтанно. И количество их больше 10. Десять - я ограничил, что бы одновременно были на сцене, но при этом таймер не останавливается, а просто не появляются на сцене новые боты. Как только становится меньше - снова появляются. Но стоит оставить без движения и поражения ботов игрушку(а иногда и в процессе игры) - останавливаются боты.

Опять же если убрать классы пуль и оставить в данном примере только летающие боты - то в течении 10 минут они точно не останавливаются(дальше ждать не стал). Или в данном случае garbage collector просто не срабатывает???
Да, он срабатывает при определенных условиях. Несколько ботов занимают немного памяти, а постоянное создание пуль приводит к росту занятой памяти.

Цитата:
Сообщение от ndez Посмотреть сообщение
Попробую массив, ботов конечное число, а вот как быть с пулями??? В данном примере нормально летают, а в реальном пули ботов и пули героя порой также зависают. И эти объекты доступны - об зависшие пули взрываются боты или уменьшается жизнь героя. И они удаляются со сцены когда значение контенер.numChild-1 соответствует данному объекту, но на это требуется время и соответственно появление новых пуль.

И еще хотел спросить - в процессе игры загрузка ЦП составляет примерно 20-30%(увеличивается постепенно) - мне кажется это много???
Как уже написали используйте "кэш менеджер для создания объектов" (object pool), при этом объекты достаются из кэша, отрабатывают и отправляются обратно в кэш, при этом нет постоянного роста памяти.

Загрузка зависит от характеристик ЦП.
Для начала, как я уже писал, вынесите все обработки Event.ENTER_FRAME из ботов и пуль, например, в общий менеджер объектов.

Старый 07.06.2011, 12:36
Cornford вне форума Посмотреть профиль Отправить личное сообщение для Cornford Найти все сообщения от Cornford
  № 13  
Ответить с цитированием
Cornford

Регистрация: Oct 2009
Сообщений: 174
Вот пример реализации кеш менеджера:
http://www.ant-karlov.ru/TowerDefenc...e-obektov.html

Старый 08.06.2011, 17:57
ndez вне форума Посмотреть профиль Отправить личное сообщение для ndez Найти все сообщения от ndez
  № 14  
Ответить с цитированием
ndez

Регистрация: Apr 2011
Сообщений: 13
Спасибо, буду пробовать.

Старый 14.06.2011, 16:38
ndez вне форума Посмотреть профиль Отправить личное сообщение для ndez Найти все сообщения от ndez
  № 15  
Ответить с цитированием
ndez

Регистрация: Apr 2011
Сообщений: 13
Доброго времени суток. Попробовал сделать менеджер объектов по образу и подобию http://www.ant-karlov.ru/TowerDefenc...e-obektov.html и как то у меня не получается. Вроде бы все летает и стреляет и процессор в порядке, но:
Сначала заполняется массив и с этим порядок, а потом когда начинается обращение к функции get() для извлечения объектов - на сцене они не появляются, только когда _currentIndex=-1, начинают создаваться новые объекты и появляться на сцене. Но ведь это не правельно!
Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.display.Stage;
 
	public class SimpleCache {
 
	public var main:Main;
	protected var _targetClass:Class; 
	protected var _currentIndex:int;
	public static var _currentIndexBot:int;
	public static var _currentIndexPuly:int;
	protected var _instances:Array;
 
 
		public function SimpleCache( targetClass:Class, initialCapacity:uint, nain) { 
			main = nain;
			_targetClass = targetClass; // Базовый класс всех объектов 
			_currentIndex = initialCapacity - 1; // Индекс текущего свободного объекта 
			_instances = []; // Список всех объектов
			// Заполняем обойму 
			for (var i:int = 0; i < initialCapacity; i++) { 
				_instances[i] = getNewInstance();  
			}
		}            
		protected function getNewInstance():Object	{ 
			return new _targetClass(main);
		}
		public function get():Object { 
 
			if (_currentIndex >= 0) { 	
				// Здесь должен извлекаться объект из массива, но на сцене он не появляется
				_currentIndex--; 
				return _instances[_currentIndex + 1]; 
			} 
			else{ 
				// Когда _currentIndex = -1, создаются новые объекты и они появляются на сцене
				return getNewInstance();
			} 
		} 
		public function set(instance:Object):void{ 
			_currentIndex++;  
			if (_currentIndex == _instances.length) { 
				_instances[_instances.length] = instance; 
			} 
			else{ 
				_instances[_currentIndex] = instance; 
			}
		}
	}
}
И еще очень прошу - объясните мне как обратится к функции set() из другого класса, а то я конечно сочинил вариант, но потом убрал дабы не позорится
Код AS3:
	public class BotPuly extends Sprite {
           .
           .
           .
			private function self_destructionBotPuly() {
				if (botpulyphoto != null) {
					if (main.contenerBotPuly.contains(botpulyphoto)) {
						main.contenerBotPuly.removeChildAt(main.contenerBotPuly.numChildren - 1);
 
 
						//Здесь должен быть вызов set(instance:Object) только я не знаю как это правельно сделать
 
					}
					removeEventListener(Event.ENTER_FRAME, onEnterBotPuly);	
					botpulyphoto = null;
				}
 
			}
Вложения
Тип файла: rar 456 - копия.rar (26.4 Кб, 20 просмотров)


Последний раз редактировалось ndez; 14.06.2011 в 17:30.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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