![]() |
Один большой спрайт или много маленьких?
Вот я два месяца ковыряю АС3, флеш и флекс. И все это на примере мелкой игры крестики-нолики, которая позволяет проработать все мелочи. И вот "оно" запрофилировалось первый раз, и что я узрел.
У меня "поле" из квадратнх спрайтов. К каждому я привязал "битмап" для фона (чтобы на нем динамически рисовать, ибо сплошная заливка скучна). К большинству клеток привязываются спрайты "крестика" или "нолика". Которые анимируются. По объему занимаемой памяти клетки у меня занимают столько же памяти, сколько и "битмапы" к ним привязаные. Основное назначение "клеток" - это чтобы повесить на нее обработчик кнопки (подсвечивать клетку). И вот теперь я задумываюсь: можно же сделать один большой битмап, и рисовать на нем всё (и крестики, и подложку... придется только рассчитывать куда мышка ткнулась. И над какой клеткой она сейчас находится, чтбобы подсвечивать. Вопрос к тем, кто имел подобный опыт - на сколько оно будет "отваливаться" при масштабируемости? И вообще, может зря я так критично к модели с кучей клеток-спрайтов? Кстати, я сейчас столкнулся с проблемой "межклеточного взаимодействия" =) Ведь все клетки на разной "z"-высоте. И эффект, скажем, glow от крестика, вылезающий за пределы клетки периодически скрывается "за" соседними спрайтами. Воть такая "думка". Поделитесь опытом. |
Вообще, рисовать на один битмап - идея хорошая. Производительность повысить должно, так как Flash Player обсчитывает кажлдый элемент в списке отображения поотдельности. И пусть у тебя будет хоть размером с пиксел,но 10000 объктов, тормозить будет жутко. Ваш способ хорош, но есть большое но. Это событие MouseMove - оно будет портить всю малину, поскольку придеться руками считать координаты. На мой взгляд, если размер поля не будет превышать 8x8, а каждый квадратик будет размером, скажем не более 50x50, то для производительности вполне сгодиться. Ну а если больше... Что ж, рисуйте битмап, а вместо mouseMove используйте по таймеру, скажем раз в 100 миллисекунд позитию курсора из stage.mouseX
По поводу высоты. Перед эффектов вызывайте children.parent.setChildIndex(children, children.parent.numChildren-1); Естественно, children.parent красивее сохранить в отдельную переменную и воткнуть пару проверок на null. |
В as3 нет методов "рисования" на BitmapData? я нашел только setPixel32 оО
Я так понимаю, что всю графику мне придется делать "Спрайтами" и копировать из подгруженных картинок? =( Чота не по феншую. |
Для "рисования" в BitmapData можно использовать методы draw() или copyPixels().
|
Код AS3:
|
Можно и в один graphics рисовать.
|
Если копировать данные напрямую из "t", this.addChild(t) и this.addChild(t) не требуются. Добавление элемента в контейнер влияет на "графические данные" контейнера, а не элемента.
|
Все просто суперски, и действительно прилично ускоряет работу всей флешки в целом. (Если не тупо перерисовывать все при каждом фрейме, а только обновлять изменения) :yahoo:
Итак, вот какая засада обозначилась. Если кто-то читал стартовый топик, то он помнит, что в исходной флешке у меня "поля", и к ним "прицеплены" Спрайты крестиков/ноликов и проч. Как я сейчас добавляю это дело на сцену: На Сцене создан Bitmap, по всему размеру поля. При обработке "Энтерфрейма" в цикле пробегаем все клетки. Если в клетке были изменения, то: Код AS3:
Если увеличить размеры tempBitmap, то это не решает проблемы "невлезания" спрайтов, части которых находятся в "области отрицательных координат" чтоль... не знаю как понятнее объяснить :) Ну и плюс к этому появляется проблема с позиционированием такого "кривого по размерам" битмапа на основной карте. Но это мелочи. Как отDrawить спрайт, который рисует в отрицательные координаты? Код AS3:
Добавлено через 1 минуту Пока что раскуриваю "Скрол" битмапа. |
Зачем вам ентерфрейм в пошаговой игре?
Цитата:
|
Цитата:
|
| Часовой пояс GMT +4, время: 08:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.