Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как "пририсовать" спрайт к спрайту без использования addChild() (http://www.flasher.ru/forum/showthread.php?t=146179)

gait 30.10.2010 23:22

Как "пририсовать" спрайт к спрайту без использования addChild()
 
Вложений: 2
Чую я, что сабж должен был обсуждаться, но поиском ничего не нашел.
Уж слишком сильно 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;
                }               
        }
}


alatar 30.10.2010 23:32

Перерисовывайте в Bitmap

gait 30.10.2010 23:35

А как? Может туторы есть какие? (с Bitmap раньше не работал)

udaaff 30.10.2010 23:37

Цитата:

Сообщение от gait (Сообщение 946742)
А как? Может туторы есть какие? (с 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()
почитаю, спасибо


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

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