![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 15.01.11]
Регистрация: Jan 2011
Сообщений: 70
|
Вот я два месяца ковыряю АС3, флеш и флекс. И все это на примере мелкой игры крестики-нолики, которая позволяет проработать все мелочи. И вот "оно" запрофилировалось первый раз, и что я узрел.
У меня "поле" из квадратнх спрайтов. К каждому я привязал "битмап" для фона (чтобы на нем динамически рисовать, ибо сплошная заливка скучна). К большинству клеток привязываются спрайты "крестика" или "нолика". Которые анимируются. По объему занимаемой памяти клетки у меня занимают столько же памяти, сколько и "битмапы" к ним привязаные. Основное назначение "клеток" - это чтобы повесить на нее обработчик кнопки (подсвечивать клетку). И вот теперь я задумываюсь: можно же сделать один большой битмап, и рисовать на нем всё (и крестики, и подложку... придется только рассчитывать куда мышка ткнулась. И над какой клеткой она сейчас находится, чтбобы подсвечивать. Вопрос к тем, кто имел подобный опыт - на сколько оно будет "отваливаться" при масштабируемости? И вообще, может зря я так критично к модели с кучей клеток-спрайтов? Кстати, я сейчас столкнулся с проблемой "межклеточного взаимодействия" =) Ведь все клетки на разной "z"-высоте. И эффект, скажем, glow от крестика, вылезающий за пределы клетки периодически скрывается "за" соседними спрайтами. Воть такая "думка". Поделитесь опытом. |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 95
|
Вообще, рисовать на один битмап - идея хорошая. Производительность повысить должно, так как Flash Player обсчитывает кажлдый элемент в списке отображения поотдельности. И пусть у тебя будет хоть размером с пиксел,но 10000 объктов, тормозить будет жутко. Ваш способ хорош, но есть большое но. Это событие MouseMove - оно будет портить всю малину, поскольку придеться руками считать координаты. На мой взгляд, если размер поля не будет превышать 8x8, а каждый квадратик будет размером, скажем не более 50x50, то для производительности вполне сгодиться. Ну а если больше... Что ж, рисуйте битмап, а вместо mouseMove используйте по таймеру, скажем раз в 100 миллисекунд позитию курсора из stage.mouseX
По поводу высоты. Перед эффектов вызывайте children.parent.setChildIndex(children, children.parent.numChildren-1); Естественно, children.parent красивее сохранить в отдельную переменную и воткнуть пару проверок на null. |
|
|||||
|
[+1 15.01.11]
Регистрация: Jan 2011
Сообщений: 70
|
В as3 нет методов "рисования" на BitmapData? я нашел только setPixel32 оО
Я так понимаю, что всю графику мне придется делать "Спрайтами" и копировать из подгруженных картинок? =( Чота не по феншую. |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 67
|
Для "рисования" в BitmapData можно использовать методы draw() или copyPixels().
|
|
|||||
|
[+1 15.01.11]
Регистрация: Jan 2011
Сообщений: 70
|
Феншуйствую! =)
|
|
|||||
|
Регистрация: Jul 2011
Сообщений: 67
|
Если копировать данные напрямую из "t", this.addChild(t) и this.addChild(t) не требуются. Добавление элемента в контейнер влияет на "графические данные" контейнера, а не элемента.
|
|
|||||
|
[+1 15.01.11]
Регистрация: Jan 2011
Сообщений: 70
|
Все просто суперски, и действительно прилично ускоряет работу всей флешки в целом. (Если не тупо перерисовывать все при каждом фрейме, а только обновлять изменения)
![]() Итак, вот какая засада обозначилась. Если кто-то читал стартовый топик, то он помнит, что в исходной флешке у меня "поля", и к ним "прицеплены" Спрайты крестиков/ноликов и проч. Как я сейчас добавляю это дело на сцену: На Сцене создан Bitmap, по всему размеру поля. При обработке "Энтерфрейма" в цикле пробегаем все клетки. Если в клетке были изменения, то: tempBitmap.draw(cells[i][j]); plainBitmap.copyPixels(tempBitmap,tempBitmap.rect,new Point(cellSize*i, cellSize*j)); Если увеличить размеры tempBitmap, то это не решает проблемы "невлезания" спрайтов, части которых находятся в "области отрицательных координат" чтоль... не знаю как понятнее объяснить Ну и плюс к этому появляется проблема с позиционированием такого "кривого по размерам" битмапа на основной карте. Но это мелочи. Как отDrawить спрайт, который рисует в отрицательные координаты? Рисует 1/4 круга ![]() Добавлено через 1 минуту Пока что раскуриваю "Скрол" битмапа. |
|
|||||
|
Зачем вам ентерфрейм в пошаговой игре?
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. Последний раз редактировалось GBee; 01.10.2011 в 11:57. Причина: туплю |
|
|||||
|
[+1 15.01.11]
Регистрация: Jan 2011
Сообщений: 70
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 07:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|