Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Перемещение объектов вместе с фоном (http://www.flasher.ru/forum/showthread.php?t=189438)

FiftyStars 12.12.2012 16:51

Перемещение объектов вместе с фоном
 
Вобщем задача такая:
есть фон и множество объектов на фоне. обычное перемещение(перемещение каждого объекта отдельно) не подходит, ибо этих объектов может быть несколько тысяч и время перемещения сами понимаете может быть огромным(10000объектов*100пикселей перемещения - это уже огого)...Можно ли как то указать относительные координаты(в данном случае относительно фона) или сделать аттачинг объектов к фону?

Вобщем нужен баровый график типа http://help.adobe.com/ru_RU/FlashPla...HLOCChart.html
но без флекса

expl 12.12.2012 17:10

"Аттачинг" конечно к фону

Скорее добавление и объектов и фона на один спрайт.
А там уже в зависимости от позиции этого глобального контейнера - убирание/добавление фона и объектов, если оно надо.

Бояться того, что при перемещении к концу у Вас будут координаты x > 9000 и даже больше 90 000 не стоит - проблемы с производительностью зависят от размеров области перерисовки, количества объектов, но не от величины координат.

FiftyStars 12.12.2012 17:34

Цитата:

Сообщение от expl (Сообщение 1109415)
"Аттачинг" конечно к фону
Бояться того, что при перемещении к концу у Вас будут координаты x > 9000 и даже больше 90 000 не стоит - проблемы с производительностью зависят от размеров области перерисовки, количества объектов, но не от величины координат.

я имею ввиду если перемещать 100 000 объектов на 100 пикселей то перемещение на каждый пиксель будет оч долгим(100 исполнений функции перемещения для каждого объекта).

expl 12.12.2012 17:41

Выполнение функции перемещения на фоне рендеринга объекта ест исчезающе мало.

Я порекоммендовал запихать в один контейнер, предположив, что у Вас платформер и так тупо проще уследить за оъектами.

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

FiftyStars 12.12.2012 18:35

Цитата:

Сообщение от expl (Сообщение 1109426)
Выполнение функции перемещения на фоне рендеринга объекта ест исчезающе мало.

Я порекоммендовал запихать в один контейнер, предположив, что у Вас платформер и так тупо проще уследить за оъектами.

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

проблемы с производительностью только теоретически пока что...10млн выполнений функции перемещения для перемещения 100 000 объектов на 100 пикселей неплохие лаги, думаю, дадут

Hauts 12.12.2012 19:04

Гоу сразу демку следующим постом + исходный код демки + описание задачи конкретное, а не на уровне абстракций.

FiftyStars 12.12.2012 20:05

Цитата:

Сообщение от Hauts (Сообщение 1109434)
Гоу сразу демку следующим постом + исходный код демки + описание задачи конкретное, а не на уровне абстракций.

код и демо не могу сейчас - на рабочем пк хранится все.
А описание было - свечно-баровый график без флекса. свечей в теории может быть до полумиллиона(ограничение количества и своевременная подгрузка это позже будет).
Соответственно все свечи сразу я увидеть не смогу, нужно перемещаться по графику, вот думаю как это сделать. То есть для перемещения нужно либо менять точку обзора(что не знаю возможно ли вобще или нет), либо при драге мышью перемещать каждую свечку, либо (тоже не в курсе осуществимо ли) привязать все свечи к фоновому прямоугольнику(относительные координаты?) и перемещать только его. Вобщем хотелось бы узнать: что из этого осуществимо, что проще и что быстрее? Прошу прощения, может топик тупой но просто я перехожу на АС с др. языков. Пока что еще не очень вкуриваю возможности языка

AlexLucas 12.12.2012 20:29

Если у вас уже скролится график, вы можете запомнить координаты каждой свечи, и при скролле, если мы дотянули график до такой-то координаты, можно отобразить свечу.
К примеру:
Длинна графика 5000 пихелей.
Ширина сцены - 640 , следовательно отображаем изначально все свечи с 0 <= x <= 640.
При перемещении по графику отображаем свечи в соответствии с текущими координатами, а те что не вписываются в них - убираем со сцены.

FiftyStars 12.12.2012 21:08

Цитата:

Сообщение от AlexLucas (Сообщение 1109441)
Если у вас уже скролится график, вы можете запомнить координаты каждой свечи, и при скролле, если мы дотянули график до такой-то координаты, можно отобразить свечу.
К примеру:
Длинна графика 5000 пихелей.
Ширина сцены - 640 , следовательно отображаем изначально все свечи с 0 <= x <= 640.
При перемещении по графику отображаем свечи в соответствии с текущими координатами, а те что не вписываются в них - убираем со сцены.

задача не та...
задача в том каким образом организовать перемещение по графику а отображение/скрытие это из другого леса

expl 12.12.2012 21:16

Цитата:

То есть для перемещения нужно либо менять точку обзора(что не знаю возможно ли вобще или нет)
Можно пододвигать контейнер таким образом, чтобы требуемая точка была в центре экрана (математикой, возможно с использованием localToGlobal/globalToLocal)

Общий совет:
- сделайте 500 000 точек (хоть с помощью Math.random, хоть любой другой функцией)
- посмотрите реальные тормоза
- а уже потом что-то делайте и смотрите стало лучше или нет.
Просто без реальных тестов пытаться оптимизировать (особенно отрисовку, а не алгоритмы) - дело безнадёжное - есть неслабые шансы сделать ещё медленне :)

Один совет:
- если всё Вы это сделали и fps падает при простом проведении мыши - значит надо убирать объекты за пределами видимости с экрана,
если при проведении мыши над свечками - ни просадки fps - ни нагрузки на процессор - то не факт что поможет - рендерится то ведь только то уместилось на экране, а считается для мыши всё что уместилось и что не уместилось.


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

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