Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Flash-ролик замедляет свою работу (http://www.flasher.ru/forum/showthread.php?t=133809)

Lex-71 13.12.2009 19:01

Flash-ролик замедляет свою работу
 
Набросал простенький растровый редактор.

http://ris.n53.ru

А он, как проработает 5 минут, начинает дико тормозить.

Вот текст программы:

Код AS3:

package 
{
        import flash.display.*;
        import flash.events.*;
        import flash.utils.Timer;
 
        public class draw1 extends MovieClip
        {
                var mouse_state=0;
                var Shape_1:Shape;
                var myTimer:Timer;
                //--------------------------------------------------------
                function draw1()
                {
                        Shape_1 = new Shape();
                        addChild(Shape_1);
 
                        var myTimer:Timer = new Timer(1000, 0);
 
                        stage.addEventListener(MouseEvent.MOUSE_DOWN,set_mouse_xy);
                        stage.addEventListener(MouseEvent.MOUSE_MOVE,mouse_is_moving);
                        stage.addEventListener(MouseEvent.MOUSE_UP,off_the_mouse);
 
                        myTimer.addEventListener("timer", timerHandler);
                        myTimer.start();
 
                }
                //-----------------------------------------------------
                public function set_mouse_xy(evt:MouseEvent)
                {
                        mouse_state=1;
                }
                //-------------------------------------------
                public function off_the_mouse(evt:MouseEvent)
                {
                        mouse_state=0;
                }
                //-------------------------------------------
                public function mouse_is_moving(evt:MouseEvent)
                {
                        var x1:int,y1:int,bb:int;
                        bb=5;
                        if (mouse_state>0)
                        {
                                x1=evt.stageX/bb;
                                y1=evt.stageY/bb;
 
                                Shape_1.graphics.beginFill(0x0,0.5);
                                Shape_1.graphics.lineStyle(0, 0,0);
                                Shape_1.graphics.drawRect(x1*bb, y1*bb, 10, 10);
                                Shape_1.graphics.endFill();
 
                        }
                }
                //-------------------------------------------
                public function timerHandler(event:TimerEvent):void
                {
                        Shape_1.graphics.beginFill(0xFFFFFF,0.1);
                        Shape_1.graphics.lineStyle(0, 0,0);
                        Shape_1.graphics.drawRect(0, 0, 500, 500);
 
 
                }
                //-------------------------------------------
 
 
        }
}

Такое ощущение, что флеш где-то и что-то накапливает в процессе.... :o

TanaTiX 13.12.2009 20:02

Может он вектор накапливает? Если так - то просто периодически переводить все в битмапу

Lex-71 13.12.2009 23:56

"переводить в битмапу" - это как?

Psycho Tiger 14.12.2009 13:33

BitmapData.draw()

Himerets 14.12.2009 13:39

Если так, попробуй ускорить таймер в 10 раз (и соответственно, альфу в drawrect поменять на 0,01) и если тормоза будут наступать в 10 раз быстрее - значит дело действительно в накоплении вектора.

Psycho Tiger 14.12.2009 13:50

Больше нечему. Вектор, инфа 100%.

Lex-71 23.12.2009 01:11

Спасибо, PsychoTiger.help();
Действительно - Shape "накапливал вектор" и от этого работа замедлялась.
Теперь я создал "сладкую парочку" BitmapData и Bitmap
делаю BitmapData.draw(Shape_1);
и затем сбрасываю Shape_1.clear();

chabapok 23.12.2009 04:25

делай по таймеру первой строчкой Shape_1.graphics.clear()

Добавлено через 2 минуты
эээуэ...Вы ж стираете по таймеру все? Я правильно понял? Тогда просто Shape_1.graphics.clear() делайте единственной строчкой.

nickorsk 23.12.2009 12:15

В общем такую шутку заметил:

Код AS3:

import com.gamenickorsk.game.qest.controler.Control; 
//import com.gamenickorsk.game.qest.adjustment.GlobalVar;
var control:Control = new Control();
this.stop();
 
control.movement(panel.b1,this.rooms,"left");
control.movement(panel.b2,this.rooms,"forward");
control.movement(panel.b3,this.rooms,"right");
control.movement(panel.b4,this.rooms,"back");
control.visU(closepanel,panel,true,m1,"t2","t1");
control=null;

Когда мы создаем экземпляр класса, постепенно накапливается мусор в памяти.
Если после того как экземпляр класса стал больше не нужен - его значение присваиваем null - скорость работы увеличивается.

Psycho Tiger 23.12.2009 16:45

На скорость работы влиять не должно. Значит, у вас не отписаны все события перед уходом в null.


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

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