Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.09.2011, 20:42
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 1  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
Flame Один большой спрайт или много маленьких?

Вот я два месяца ковыряю АС3, флеш и флекс. И все это на примере мелкой игры крестики-нолики, которая позволяет проработать все мелочи. И вот "оно" запрофилировалось первый раз, и что я узрел.

У меня "поле" из квадратнх спрайтов. К каждому я привязал "битмап" для фона (чтобы на нем динамически рисовать, ибо сплошная заливка скучна). К большинству клеток привязываются спрайты "крестика" или "нолика". Которые анимируются.

По объему занимаемой памяти клетки у меня занимают столько же памяти, сколько и "битмапы" к ним привязаные. Основное назначение "клеток" - это чтобы повесить на нее обработчик кнопки (подсвечивать клетку). И вот теперь я задумываюсь: можно же сделать один большой битмап, и рисовать на нем всё (и крестики, и подложку... придется только рассчитывать куда мышка ткнулась. И над какой клеткой она сейчас находится, чтбобы подсвечивать.

Вопрос к тем, кто имел подобный опыт - на сколько оно будет "отваливаться" при масштабируемости? И вообще, может зря я так критично к модели с кучей клеток-спрайтов? Кстати, я сейчас столкнулся с проблемой "межклеточного взаимодействия" =) Ведь все клетки на разной "z"-высоте. И эффект, скажем, glow от крестика, вылезающий за пределы клетки периодически скрывается "за" соседними спрайтами. Воть такая "думка". Поделитесь опытом.

Старый 30.09.2011, 01:30
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 2  
Ответить с цитированием
tofflife

Регистрация: Jul 2009
Сообщений: 95
Вообще, рисовать на один битмап - идея хорошая. Производительность повысить должно, так как Flash Player обсчитывает кажлдый элемент в списке отображения поотдельности. И пусть у тебя будет хоть размером с пиксел,но 10000 объктов, тормозить будет жутко. Ваш способ хорош, но есть большое но. Это событие MouseMove - оно будет портить всю малину, поскольку придеться руками считать координаты. На мой взгляд, если размер поля не будет превышать 8x8, а каждый квадратик будет размером, скажем не более 50x50, то для производительности вполне сгодиться. Ну а если больше... Что ж, рисуйте битмап, а вместо mouseMove используйте по таймеру, скажем раз в 100 миллисекунд позитию курсора из stage.mouseX

По поводу высоты. Перед эффектов вызывайте

children.parent.setChildIndex(children, children.parent.numChildren-1);

Естественно, children.parent красивее сохранить в отдельную переменную и воткнуть пару проверок на null.

Старый 30.09.2011, 03:37
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 3  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
В as3 нет методов "рисования" на BitmapData? я нашел только setPixel32 оО
Я так понимаю, что всю графику мне придется делать "Спрайтами" и копировать из подгруженных картинок?
=( Чота не по феншую.

Старый 30.09.2011, 03:46
ProxyGreen вне форума Посмотреть профиль Отправить личное сообщение для ProxyGreen Найти все сообщения от ProxyGreen
  № 4  
Ответить с цитированием
ProxyGreen
 
Аватар для ProxyGreen

Регистрация: Jul 2011
Сообщений: 67
Для "рисования" в BitmapData можно использовать методы draw() или copyPixels().

Старый 30.09.2011, 04:11
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 5  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
Код AS3:
			var t:Sprite = new Sprite();
			this.addChild(t);
 
			var n:Graphics = t.graphics;
 
			n.beginFill(0xffffff,1);
			n.lineStyle(1, 0x000000);
			n.drawRect(0, 0, 31, 31);
			var tempBitmap:BitmapData = new BitmapData(32,32,false,0x000000);
 
			tempBitmap.draw(t);
 
			this.removeChild(t);
Феншуйствую! =)

Старый 30.09.2011, 08:15
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Можно и в один graphics рисовать.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 30.09.2011, 15:55
ProxyGreen вне форума Посмотреть профиль Отправить личное сообщение для ProxyGreen Найти все сообщения от ProxyGreen
  № 7  
Ответить с цитированием
ProxyGreen
 
Аватар для ProxyGreen

Регистрация: Jul 2011
Сообщений: 67
Если копировать данные напрямую из "t", this.addChild(t) и this.addChild(t) не требуются. Добавление элемента в контейнер влияет на "графические данные" контейнера, а не элемента.

Старый 01.10.2011, 03:03
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 8  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
Все просто суперски, и действительно прилично ускоряет работу всей флешки в целом. (Если не тупо перерисовывать все при каждом фрейме, а только обновлять изменения)

Итак, вот какая засада обозначилась. Если кто-то читал стартовый топик, то он помнит, что в исходной флешке у меня "поля", и к ним "прицеплены" Спрайты крестиков/ноликов и проч. Как я сейчас добавляю это дело на сцену:

На Сцене создан Bitmap, по всему размеру поля.
При обработке "Энтерфрейма" в цикле пробегаем все клетки. Если в клетке были изменения, то:
Код AS3:
tempBitmap.draw(cells[i][j]);
plainBitmap.copyPixels(tempBitmap,tempBitmap.rect,new Point(cellSize*i, cellSize*j));
Ну, локи и таймеры я заскипал. Все работает отлично, tempBitmap по размеру равна клетке и вообще просто эйфория от всего этого. Пока в одной из Клеток не появляется Спрайт вылезающий за пределы своего квадрата. Он, разумеется, не влезает в tempBitmap и, соответственно, выглядит крайне печально.

Если увеличить размеры tempBitmap, то это не решает проблемы "невлезания" спрайтов, части которых находятся в "области отрицательных координат" чтоль... не знаю как понятнее объяснить Ну и плюс к этому появляется проблема с позиционированием такого "кривого по размерам" битмапа на основной карте. Но это мелочи.

Как отDrawить спрайт, который рисует в отрицательные координаты?

Код AS3:
drawCircle(0, 0, 10); //Например.
Рисует 1/4 круга

Добавлено через 1 минуту
Пока что раскуриваю "Скрол" битмапа.

Старый 01.10.2011, 11:55
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 9  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Зачем вам ентерфрейм в пошаговой игре?

Цитата:
Рисует 1/4 круга
Спрайт подвиньте в координаты ненулевые.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.


Последний раз редактировалось GBee; 01.10.2011 в 11:57. Причина: туплю
Старый 01.10.2011, 19:44
flax4Noob вне форума Посмотреть профиль Отправить личное сообщение для flax4Noob Найти все сообщения от flax4Noob
  № 10  
Ответить с цитированием
flax4Noob
[+1 15.01.11]

Регистрация: Jan 2011
Сообщений: 70
Цитата:
Зачем вам ентерфрейм в пошаговой игре?
М... анимация фона? Анимация клеток при наведении мышки? Крестики, например, "темные" и затемняют вокруг себя клетки. А нолики светлые. С эффектом Glow, беленьким. Эффект меняется с течением времени как бы пульсируя. Очень няшно.

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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