PDA

Просмотр полной версии : Как "пририсовать" спрайт к спрайту без использования addChild()


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


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;
}
}
}

alatar
30.10.2010, 23:32
Перерисовывайте в Bitmap

gait
30.10.2010, 23:35
А как? Может туторы есть какие? (с Bitmap раньше не работал)

udaaff
30.10.2010, 23:37
А как? Может туторы есть какие? (с Bitmap раньше не работал)
Читайте про классы Bitmap и BitmapData.

aimatme
31.10.2010, 13:57
забавно))) а сколько фпс Вам требуется для Вашей мишени? 25-30 уже не хватает?
для рисования на bitmapData почитайте про метод draw()
но вообще помоему если правильно использовать addChild() то никаких проблем возникнуть не должно)))))))

alatar
31.10.2010, 14:06
...если правильно использовать addChild() то никаких проблем возникнуть не должно
А данном случае проблема не в addChild, а скорее в mouseEnabled, mouseChildren, при достаточно большом количестве детишек, с неотключенными мышиными событиями, при проходе курсора над флешкой фпс прилично проседает.
В любом случае, в данной ситуации Bitmap потребует меньше ресурсов и памяти.

gait
31.10.2010, 18:39
забавно))) а сколько фпс Вам требуется для Вашей мишени? 25-30 уже не хватает?
Это просто тестовый пример. Вообще был интересен принцип перерисовки в играх. Т.е. на земле остаются следы от выстрелов, гильзы, тела монстров. И ведь таких объектов может доходить до несколько тысяч. Ясно, что авторы подобных игр использовали не addChild() а что-то другое, более производительное. Вот мне и стало интересно, что же они использовали.

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