![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2004
Сообщений: 121
|
//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() { setProperty("", _quality, "low"); startDrag(_root.map.map2); }; _root.onMouseUp = function() { setProperty("", _quality, "medium"); 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(); добавил кодик setProperty("", _quality, "low"); стало еще полегче при перемещении. Но вот смотрите. В этой карте нету setInterval, onEnterFrame. При простои карты загрузки ЦП нету. Все правильно. Но вот стоит поводить мышкой по рабочей области ( просто поводить, никаких циклов на onMouseMOve нету), а почему тогда ЗП подлитает аж до 40-50% ? что ему не нравиться? Добавлено через 2 минуты замену starDrag() пока не трогаем. |
|
|||||
|
Banned
[+5 15.02.09]
[++5 15.02.09] Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
|
Потому что флеш рендерер перерисовываит 500 раз в секунду все обьекты на карте при startDrag()
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Поражаюсь своему терпению... Но ведь это мои проблемы, что я плохо объясняю, да?
Попробуем Вашим способом, с картинками)) 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");
};
// Итак при загрузке какого-либо клипа mcLoaderом мы сразу загружаем две хмлки
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);
// Ну и (конечно же, чтоб не создавать лишний Объект)) мы грузим СРАЗУ ДВА клипа
// загрузчиком mcLoader. Таким образом, мы получаем ДВА события Complete
// и соответственно ДВА вызова loadListener.onComplete
// и соответственно ДВА раза загрузим по две хмлки
// и каждая из них при каждой своей загрузке вызовет creatObj или creatObj2
// которые наттачат все объекты на карту. Ну и что что два раза?
// Зато график загрузки ЦП будет красивый, с холмиками))
mcLoader.loadClip("street.swf", _root.map.map2.array_swf);
mcLoader.loadClip("map.swf", _root.map.map2.map_swf);
qazwsx, это откуда такая информация? По-моему он перерисовывает точно в соответствии с заданным фпс флэшки. Именно поэтому и используют onMouseMove, что при движении мыши частота события гораздо выше чем фпс - но и тогда ПЕРЕРИСОВЫВАТЬ чаще чем фпс будет если только сказать об этом командой updateAfterEvent(). Добавлено через 26 минут Еще я бы настоятельно рекомендовал Вам оптимизировать код и не губить мой процессор и мои глаза. Если найдете время на обучение, почитайте вот эту темку - она в целом близка к Вашей, но я о другом - именно об оптимизации кода, начиная гдето со второй страницы http://flasher.ru/forum/showthread.php?t=117966&page=2
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2004
Сообщений: 121
|
больше не буду губить ваш проц
.буду капаться, спс за ссылку и инфу ![]() |
|
|||||
|
Banned
[+5 15.02.09]
[++5 15.02.09] Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
|
Не то чтобы флеш чтото делал в точности
. Но очевидно что при заданом фпс и startDrag все тормазит, так зачем придератся? |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 100
|
к сожалению ссылки на карту не работают, так что посмотреть не могу. а так хотелось бы сравнить с моим творением
__________________
http://komimap.ru |
|
|||||
|
Регистрация: Apr 2008
Сообщений: 71
|
я бы вам посоветовал бы сделать карту на тайлах(tail), было бы намного удобнее и не тормозило бы совсем.
Идея такая создаете массив карты, типа var mymap = [ [1, 2, 3, 4, 5, 6, 7, 8, 0], [1, 2, 3, 4, 5, 6, 7, 8, 0], [1, 2, 3, 4, 5, 6, 7, 8, 0], [1, 2, 3, 4, 5, 6, 7, 8, 0], [1, 2, 3, 4, 5, 6, 7, 8, 0] ] далее при перетаскивании клипа map, проверяя координаты map, расчитывая какие клипы удалять, а какие добавлять. вот так я это вижу... |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|