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

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

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

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Question Как "пририсовать" спрайт к спрайту без использования addChild()

Чую я, что сабж должен был обсуждаться, но поиском ничего не нашел.
Уж слишком сильно addChild() понижает fps. Может можно без добавления спрайта к спрайту каким-то образом перерисовать спрайт мишени?

Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.ui.Mouse;
	import General.FpsCounter;
 
	public class Question extends Sprite
	{
		private var aim:Sprite;
		private var target:Sprite;
		static public var m_fpsCounter:FpsCounter = new FpsCounter();
 
		public function Question() 
		{
			createAndAddAim();
			addATarget();
 
			m_fpsCounter.x = 7;
			m_fpsCounter.y = 5;
			addChildAt(m_fpsCounter, 0);
 
			addEventListener(Event.ENTER_FRAME, update);			
		}
 
		private function update(e:Event):void 
		{
			m_fpsCounter.update();
		}
 
		private function addATarget():void 
		{
			target = new Target();
			target.x = 150;
			target.y = 100;
			target.addEventListener(MouseEvent.MOUSE_DOWN, onTargetMouseDown);
			addChildAt(target, 0);
		}
 
		private function onTargetMouseDown(e:MouseEvent):void 
		{
			for (var i:int = 0; i < 8; i++) 
			{
				var bulletHole:Sprite = new BulletHole();
				bulletHole.x = (mouseX - target.x) + (Math.random() * 40 - 20);
				bulletHole.y = (mouseY - target.y) + (Math.random() * 40 - 20);
				target.addChild(bulletHole);
			}			
		}
 
		private function createAndAddAim():void 
		{
			aim = new Aim();
			aim.mouseEnabled = false;
			aim.x = mouseX;
			aim.y = mouseY;
			addChild(aim);
 
			stage.addEventListener(MouseEvent.MOUSE_MOVE, moveAim);
			Mouse.hide();	
		}
 
		private function moveAim(e:Event):void 
		{
			aim.x = mouseX;
			aim.y = mouseY;
		}		
	}
}
Изображения
 
Вложения
Тип файла: rar Question.rar (37.4 Кб, 30 просмотров)

Старый 30.10.2010, 23:32
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Перерисовывайте в Bitmap

Старый 30.10.2010, 23:35
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 3  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
А как? Может туторы есть какие? (с Bitmap раньше не работал)

Старый 30.10.2010, 23:37
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от gait Посмотреть сообщение
А как? Может туторы есть какие? (с Bitmap раньше не работал)
Читайте про классы Bitmap и BitmapData.

Старый 31.10.2010, 13:57
aimatme вне форума Посмотреть профиль Отправить личное сообщение для aimatme Найти все сообщения от aimatme
  № 5  
Ответить с цитированием
aimatme

Регистрация: Jan 2010
Сообщений: 37
забавно))) а сколько фпс Вам требуется для Вашей мишени? 25-30 уже не хватает?
для рисования на bitmapData почитайте про метод draw()
но вообще помоему если правильно использовать addChild() то никаких проблем возникнуть не должно)))))))

Старый 31.10.2010, 14:06
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
...если правильно использовать addChild() то никаких проблем возникнуть не должно
А данном случае проблема не в addChild, а скорее в mouseEnabled, mouseChildren, при достаточно большом количестве детишек, с неотключенными мышиными событиями, при проходе курсора над флешкой фпс прилично проседает.
В любом случае, в данной ситуации Bitmap потребует меньше ресурсов и памяти.

Старый 31.10.2010, 18:39
gait вне форума Посмотреть профиль Отправить личное сообщение для gait Найти все сообщения от gait
  № 7  
Ответить с цитированием
gait

Регистрация: Mar 2010
Адрес: Russian Federation
Сообщений: 59
Цитата:
забавно))) а сколько фпс Вам требуется для Вашей мишени? 25-30 уже не хватает?
Это просто тестовый пример. Вообще был интересен принцип перерисовки в играх. Т.е. на земле остаются следы от выстрелов, гильзы, тела монстров. И ведь таких объектов может доходить до несколько тысяч. Ясно, что авторы подобных игр использовали не addChild() а что-то другое, более производительное. Вот мне и стало интересно, что же они использовали.

Цитата:
Читайте про классы Bitmap и BitmapData.
Цитата:
почитайте про метод draw()
почитаю, спасибо

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

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

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


 


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


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