Цитата:
Сообщение от qazwsx
За ними нужно следить только не так).
|
неподскажите как?
Цитата:
Сообщение от Wolsh
ХитТест для [всех?] объектов 24 раза в секунду.... 40% говорите? Снимаю шляпу. Мне кажется, если б Вы нарисовали все эти объекты и перестали так упорно следить за их видимостью, всё бегало бы в разы живее.
|
Ну вот я сейчас уменьшил FPS до 10 и убрал контуры у объектов, загрузка ЦП в простои 10-12%, при перемещении 20-22%.
Я слежу за ними, чтобы видеть, какие объекты нужно отобразить в данный момент. И я слежу не за самими объектами, а смотрю координаты в массиве, пробегаюсь по массиву. И если координаты удовлетворяют нынешнему условию - то я вставляю объект. Если он вышел из зоны видимости - удаляется.
Цитата:
Сообщение от qazwsx
Я бы все в битмап рисовал и проверял по координатом клика нужно ли подсветит здание, или показать тул тип и тд. Ну а так я на сколько понял рисуется не только видимая часть карты а она просто постепенно отрисовывается)
|
в Битмап - это же растр получиться. Тогда при увеличении\уменьшении будут пиксели. Ну можно конечно, но это на крайний случай.
Цитата:
Сообщение от Wolsh
Ну первое что бросается в глаза - Вы по два раза загружаете xmlки. Фиг бы с ним, они возьмутся из кэша. НО - ведь при окончании загрузки выполняется обработчик. Т.е Вы ДВА раза запускаете bd_load_xml_map.onLoad, который ДВА же раза запускает creatObj();
Может я что-то упустил и это не так - проверьте трейсом в теле creatObj();
Добавлено через 7 минут
Постойте, а это что такое?
Это "ничего сложного. Приметив."?? А в чем смысл этого примитива - следить за ресайзом Стейджа чтоли? Так ведь для этого событие Resize есть у стейджа. Или всё сложнее?)))) Объясните.
|
Ну.. то что он два раза выполняет creatObj(), эт да

. Но все равно объкты создались по одному экземлпяру. И не все объекты, а только те которые попадают под условие - hitTest.
setInterval - слежу за объектами, пробегаюсь по массиву, и смотрю какие объекты нужно создать в данный момент.
Есть какой-нить другой способ?
Ну вот смотрите.
http://onlinevdonsk.ru/
Создаю сразу все объекты.

Код 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();
Смотрите как тормозит карта.
Поэтому я и решил создавать только те объекты, которые попадают под видимую часть.
Или как можно по другому? Как-нить облегчить можно вариант с "полной загрукой объектов" ?. Раньше глучило еще больше. Я уменьшил fps до 10, и убрал контур у объектов, стало бегать побыстрее. Но все равно тормозит

.