Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   тормозит карта. ЦП проца под 40% (http://www.flasher.ru/forum/showthread.php?t=121936)

qazwsx 27.02.2009 12:01

Когда зум делаеш максимально отдаленный видно что

Код AS1/AS2:

if (!_root.mc_hittest.hitTest(this)) {
                                                removeMovieClip(this);
                                        }

не работает

Barzometr 27.02.2009 12:07

Цитата:

Сообщение от qazwsx (Сообщение 801518)
Когда зум делаеш максимально отдаленный видно что

Код AS1/AS2:

if (!_root.mc_hittest.hitTest(this)) {
                                                removeMovieClip(this);
                                        }

не работает

Была залита карта с полной загрузкой без обработчика. сейчас залил оба варианта. Смотрим разницу.


http://onlinevdonsk.ru/ - карта с обработчиком. (где как раз и есть этот remove, работает вроде.)

http://onlinevdonsk.ru/index_full_load.php - карта с полной загрузкой сразу всех объектов. Без обработчика.

qazwsx 27.02.2009 12:11

Там карта постепенно отрисовывается и старые обьекты каторые уже в незоны видимости остаются.

Barzometr 27.02.2009 12:29

Вложений: 2
Вот скрины.

Переместились влево. Потом перемещаемся снова вправо, и видим что старых построик уже нету.

Wolsh 27.02.2009 12:44

По поводу двух последних карт - как я и говорил,полная карта бегает как бешеная, в то время как прорисовка жутко тормозит (только не надо руками двигать - из-за использования "два раза в секунду" вместо onMouseMove зрелище то еще, используйте кнопочки и увидите разницу).

Добавлено через 20 минут
Я хочу сказать что цикл хитТест+удаление+аттач навряд ли занимает меньше времени, чем смещение нарисованных объектов.
В любом случае, если Вам так хочется играться с видимостью/невидимостью, от хитТеста надо избавиться. Сравнение чисел всетаки быстрее - зачем нужен клип, с которым проводится хитТест чисел? Разве размеры Стейджа неизвестны? Сделайте простую проверку из блоков ()&&()&&() причем в первый блок поставить наиболее вероятное несовпадение)) , ну скажем _х < -_width, и такая проверка будет летать по сравнению с хитТестом. Но и это всеравно не оптимально((((

Barzometr 27.02.2009 15:27

Цитата:

Сообщение от Wolsh (Сообщение 801531)
По поводу двух последних карт - как я и говорил,полная карта бегает как бешеная, в то время как прорисовка жутко тормозит (только не надо руками двигать - из-за использования "два раза в секунду" вместо onMouseMove зрелище то еще, используйте кнопочки и увидите разницу).

Добавлено через 20 минут
Я хочу сказать что цикл хитТест+удаление+аттач навряд ли занимает меньше времени, чем смещение нарисованных объектов.
В любом случае, если Вам так хочется играться с видимостью/невидимостью, от хитТеста надо избавиться. Сравнение чисел всетаки быстрее - зачем нужен клип, с которым проводится хитТест чисел? Разве размеры Стейджа неизвестны? Сделайте простую проверку из блоков ()&&()&&() причем в первый блок поставить наиболее вероятное несовпадение)) , ну скажем _х < -_width, и такая проверка будет летать по сравнению с хитТестом. Но и это всеравно не оптимально((((

Вы хотите сказать, у вас http://onlinevdonsk.ru/index_full_load.php эта бегает быстрее, чем http://onlinevdonsk.ru/ ?
При полной загрузки, у меня лично тормозит жутко. А вот при видимости/невидимости - бегает еще нормально.

Вот я просто зашол на http://onlinevdonsk.ru/index_full_load.php и проц под 30% сразу ушол, из-за чего? там же просто объекты и все. никаких hittest'ов, циклов и тд. нету.

Ну, попробую избавить от хиттеста.

Добавлено через 4 минуты
Код карты http://onlinevdonsk.ru/index_full_load.php
Код AS1/AS2:

 
//Stage.scaleMode = "noScale"
//Stage.align = "TL";
var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(delta:Number) {
        _root.zoom_obj.zoom._x += delta;
        if (_root.zoom_obj.zoom._x+delta>100) {
                _root.zoom_obj.zoom._x = 100;
        }
        if (_root.zoom_obj.zoom._x+delta<10) {
                _root.zoom_obj.zoom._x = 10;
        }
};
Mouse.addListener(mouseListener);
var loadListener:Object = new Object();
loadListener.onLoadComplete = function(target_mc:MovieClip):Void  {
        bd_load_xml_street.load("street.xml");
        bd_load_xml_map.load("map.xml");
};
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);
mcLoader.loadClip("street.swf", _root.map.map2.array_swf);
mcLoader.loadClip("map.swf", _root.map.map2.map_swf);
var bd_load_xml_street = new XML();
bd_load_xml_street.onLoad = function() {
        tmp_street = String(bd_load_xml_street.firstChild);
        _root.bd_xml_swf_street = new Array();
        _root.bd_xml_swf_street = tmp_street.split("\r\n");
        creatObj();
};
var bd_load_xml_map = new XML();
bd_load_xml_map.onLoad = function() {
        tmp_map = String(bd_load_xml_map.firstChild);
        _root.bd_xml_swf_map = new Array();
        _root.bd_xml_swf_map = tmp_map.split("\r\n");
        creatObj2();
};
creatObj = function () {
        for (i=0; i<_root.bd_xml_swf_street.length; i++) {
                tmp_street = _root.bd_xml_swf_street[i].split("|");
                _root.map.map2.array_swf.attachMovie(tmp_street[0], tmp_street[0], i);
                _root.map.map2.array_swf[tmp_street[0]]._x = tmp_street[1];
                _root.map.map2.array_swf[tmp_street[0]]._y = tmp_street[2];
        }
};
creatObj2 = function () {
        for (i=0; i<_root.bd_xml_swf_map.length; i++) {
                tmp_map = _root.bd_xml_swf_map[i].split("|");
                _root.map.map2.map_swf.attachMovie(tmp_map[0], tmp_map[0], i);
                _root.map.map2.map_swf[tmp_map[0]]._x = tmp_map[1];
                _root.map.map2.map_swf[tmp_map[0]]._y = tmp_map[2];
        }
};
_root.map.map2.attachMovie("title_new", "title_new", 10);
_root.map.map2["title_new"]._visible = false;
scroll;
function enter_object(n) {
        _root.map.map2["title_new"]._visible = true;
        _root.map.map2["title_new"]._x = n._x;
        _root.map.map2["title_new"]._y = n._y;
        _root.map.map2["title_new"].txt.text = n.st;
}
_root.onMouseDown = function() {
        startDrag(_root.map.map2);
};
_root.onMouseUp = function() {
        stopDrag();
};
goObj = function (street) {
        for (i=0; i<_root.bd_xml_swf_street.length; i++) {
                tmp_street = _root.bd_xml_swf_street[i].split("|");
                if (tmp_street[0] == street) {
                        _root.zoom_obj.zoom._x = Math.ceil(_root.zoom_obj.zoom._x);
                        import mx.transitions.Tween;
                        var xTween:Tween;
                        var yTween:Tween;
                        xTween = new Tween(_root.map.map2.array_swf._parent, '_x', mx.transitions.easing.None.easeNone, _root.map.map2.array_swf._parent._x, _root.map.map2.array_swf._x+Stage.width/2-_root.map.map2.array_swf._x-tmp_street[1]-350, 1, true);
                        yTween = new Tween(_root.map.map2.array_swf._parent, '_y', mx.transitions.easing.None.easeNone, _root.map.map2.array_swf._parent._y, _root.map.map2.array_swf._y+Stage.height/2-_root.map.map2.array_swf._y-tmp_street[2]-200, 1, true);
                        xTween.onMotionFinished = function() {
                                xTween.stop();
                                _root.num_zoom = 100;
                                _root.time_zoom = setInterval(zoomObj_finish, 10);
                        };
                        _root.map.map2["title_new"]._visible = true;
                        _root.map.map2["title_new"]._x = tmp_street[1];
                        _root.map.map2["title_new"]._y = tmp_street[2];
                        _root.map.map2["title_new"].txt.text = _root.name_firma;
                }
        }
};
zoomObj_start = function () {
        _root.zoom_obj.zoom._x = Math.ceil(_root.zoom_obj.zoom._x);
        if (_root.zoom_obj.zoom._x != _root.num_zoom) {
                if (_root.zoom_obj.zoom._x>_root.num_zoom) {
                        _root.zoom_obj.zoom._x--;
                } else {
                        _root.zoom_obj.zoom._x++;
                }
        } else {
                _root.goObj(_root.sel_street);
                clearInterval(_root.time_zoom);
        }
};
zoomObj_finish = function () {
        _root.zoom_obj.zoom._x = Math.ceil(_root.zoom_obj.zoom._x);
        if (_root.zoom_obj.zoom._x != _root.num_zoom) {
                if (_root.zoom_obj.zoom._x>_root.num_zoom) {
                        _root.zoom_obj.zoom._x--;
                } else {
                        _root.zoom_obj.zoom._x++;
                }
        } else {
                clearInterval(_root.time_zoom);
        }
};
setFlashParam = function (street, name_firma) {
        _root.zoom_obj.zoom._x = Math.ceil(_root.zoom_obj.zoom._x);
        clearInterval(_root.time_zoom);
        _root.name_firma = name_firma;
        _root.sel_street = street;
        _root.num_zoom = 33;
        _root.time_zoom = setInterval(zoomObj_start, 10);
};
var methodName = "setFlashParam";
var instance = null;
var method = setFlashParam;
var wasSuccessful = flash.external.ExternalInterface.addCallback(methodName, instance, method);
stop();



Код карты http://onlinevdonsk.ru/

Код AS1/AS2:

var loadListener:Object = new Object();
loadListener.onLoadComplete = function(target_mc:MovieClip):Void  {
        bd_load_xml_street.load("street.xml");
};
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);
mcLoader.loadClip("street.swf", _root.map.map2.array_swf);
var bd_load_xml_street = new XML();
bd_load_xml_street.onLoad = function() {
        tmp_street = String(bd_load_xml_street.firstChild);
        _root.bd_xml_swf_street = new Array();
        _root.bd_xml_swf_street = tmp_street.split("\r\n");
        _root.saveX = -10;
        _root.saveX = -10;
        creatObj();
        SI_reSize = setInterval(creatObj, 500);
};
 
creatObj = function () {
        if ((_root.map.map2._x != _root.saveX) or (_root.map.map2._y != _root.saveY) or (_root.map._xscale != _root.saveXs) or (_root.map._yscale != _root.saveYs)) {
                _root.mc_hittest._width = Stage.width+210;
                _root.mc_hittest._height = Stage.height+210;
                _root.line_interface2._y = Stage.height-15;
                _root.scroll_interface2._y = Stage.height-15;
                _root.line_interface._x = Stage.width-17;
                _root.scroll_interface._x = Stage.width-17;
                for (i=0; i<_root.bd_xml_swf_street.length; i++) {
                        tmp_street = _root.bd_xml_swf_street[i].split("|");
                        if (_root.mc_hittest.hitTest((Math.ceil(Number(tmp_street[1])+_root.map.map2._x+340)), Math.ceil((Number(tmp_street[2])+_root.map.map2._y+185)))) {
                                _root.map.map2.array_swf.attachMovie(tmp_street[0], tmp_street[0], i);
                                _root.map.map2.array_swf[tmp_street[0]]._x = tmp_street[1];
                                _root.map.map2.array_swf[tmp_street[0]]._y = tmp_street[2];
                                _root.map.map2.array_swf[tmp_street[0]].onEnterFrame = function() {
                                        if (!_root.mc_hittest.hitTest(this)) {
                                                removeMovieClip(this);
                                        }
                                };
                        }
                }
        }
        _root.saveX = _root.map.map2._x;
        _root.saveY = _root.map.map2._y;
        _root.saveXs = _root.map._xscale;
        _root.saveYs = _root.map._yscale;
};
 
 
_root.onMouseDown = function() {
        startDrag(_root.map.map2);
};
_root.onMouseUp = function() {
        stopDrag();
};
stop();

Добавлено через 5 минут
вот смотрите.
При полной прорисовки карты, она тормозит сильнее, чем если используем hittest и setInterval.
Почему?

qazwsx 27.02.2009 16:07

При передвижении по карте стрелками она вообще не тормазит:) в варианте с полной прорисовкой.

Wolsh 27.02.2009 16:13

Вот именно. Внимательно перечитайте.

Barzometr 27.02.2009 16:24

Цитата:

Сообщение от Wolsh (Сообщение 801581)
Вот именно. Внимательно перечитайте.

но стрелки - не модно :).


А если попробовать, при клике использовать не Drag, а например, при клике включать функцию, которая двигала бы карту в ритм мышке. А когда отпустили клик, выключась функция. Будет шустрее работать? иль как?

Добавлено через 43 секунды
а вот скажите, столько загрузка ЦП у вас при открытой полной карты ? (полная загрузка карты которая).

Wolsh 27.02.2009 23:03

То что Вы описали и есть onMouseMove.
Не обещаю шустрость, но подумайте сами - если не будет при этом все удаляться/вычисляться/аттачится, если карта целиком нарисована и все. Просто двигаем. ??
Сейчас она "тормозит" очень ровно, а именно - перерисовывается 2 раза в секунду))))) Я уж не знаю что Вы там поменяли/не поменяли в коде, но 2 fps интервальные так и остались - когда таскаешь руками. Выбросьте все ненужное и посмотрите что будет с таким комплектом - onMouseMove включается после нажатия и работает до отпускания, так и таскаем. А карта не перерисовывается вообще. Нарисована сразу вся. Попробуйте. Я не даю никаких гарантий. Но Вы уже три раза меня не послушали, а я всё пишу и пишу))) Уважьте старика, сделайте примерчик))

Добавлено через 5 минут
Забыл про загрузку ЦП отчитаться))
Когда захожу, прыгает с 4 на 28 и тут же скатывается до 9. Отличный результат. НО через полсекунды =) (я нимагу) - опять до 20 и вниз, и так два раза в секунду. Ну понятно, creatObj();


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

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