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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.03.2013, 17:53
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 11  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Сообщение от KingMaks Посмотреть сообщение
Помнится в С++ можно было создавать переменную в классе, чтоб она была одной для всех объектов данного класса, было бы неплохо внутри класса счетчик создать, в конструкторе +1, а вот как насчет деструктора? и вообще можно ли так в экшн скрипте?
Про статические переменные - да, на уровне класса.
Можно там и массив поместить. И каждый создаваемый экземпляр в конструкторе туда класть, а при удалении - изымать. Не уверен, что сообщество это одобрит, но так делать, конечно, можно.

Деструктора как такового в AS3 нет, но многие пишут и я лично для сложных объектов - тоже пишу. Чищу листенеры и битмапы, останавливаю таймеры. Единственная разница - в С++ деструктор вызывался автоматически, а в AS3 деструктор нужно вызвать явно, либо, если это экранный объект, можно повесить его на событие удаления со сцены. Я вызываю явно.

Старый 08.03.2013, 17:58
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 12  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Цитата:
Так что это вообще к данное теме не относится.
Разве ?
Код AS3:
public class MyObject
	{
		public static var objects:Vector.<MyObject> = new Vector.<MyObject>();
		public function MyObject() {
			objects.push(this);
		}
}
 
public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			for (var i:int = 0; i < 5; i++)
				var myobj:MyObject = new MyObject();
 
			for (i = 0; i < MyObject.objects.length; i++) {
				trace(MyObject.objects[i]);
			}
 
		}
 
	}
	}
И вот так можно сохранять и получать все объекты нужного типа. Не по феншую, но работает.

Старый 08.03.2013, 18:10
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 13  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Ох, точно не по феншую.

Добавлено через 6 минут
Мне все-таки ближе метафора контейнера.

Есть класс-контейнер, в нем приватный массив, этот класс имеет методы создания и удаления объектов, при создании объектов они заносятся в массив и добавляются детьми в контейнер, при удалении - удаляются из контейнера и из массива.

Такой подход, помимо простоты, позволяет сэкономить на слушателях, поскольку появляется возможность не развешивать слушателей на каждый создаваемый объект, а повесить все слушателей на контейнер. Исчезает головняк с отписыванием объектов от слушателей перед удалением.

Старый 08.03.2013, 18:22
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 14  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
И вот так можно сохранять и получать все объекты нужного типа. Не по феншую, но работает.
Это жесть конечно )
Не представляю ситуации, когда это может понадобиться
Я обычно делаю статиеский класс, в котором добавляется enterFrame, и уже этому классу передаю экземпляры того, что нужно обновлять по энтер фрейму

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

Регистрация: Jan 2009
Сообщений: 1,651
Почему не по феншую? Что вам не нравится? Очень удобно в некоторых случаях. У меня, например, так расширены все звуки. Когда игра ставится на паузу, вызывается статический метод MySound.pause(), который перебирает статический же массив со всеми звуками и всех их отстанавливает.
__________________
мой пустой блог

Старый 08.03.2013, 18:43
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 16  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
У меня, например, так расширены все звуки. Когда игра ставится на паузу, вызывается статический метод MySound.pause(), который перебирает статический же массив со всеми звуками и всех их отстанавливает.
А я, кстати, с каналами работаю.
Проще зафейдить и вообще.

Но тут скорее дело в другом, на мой взгляд. Сущность должна делать то, что должна, и не должна, что не должна. Звук должен звучать, а саундпроцессор должен регулировать громкость, запускать звуки-музыку и останавливать звуки-музыку.

Но - сугубо имхо. Не настаиваю.

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

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

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Все это создаст офигенную связанность в программе. Да еще и будет непонятно как туда эти объекты попадают. Уже представляю себе весь гемор, который ждет того, кому прийдется потом разбирать этот код. Лучше все-таки сделать класс, которому будет передаваться то, что нужно обновлять покадрово.
Цитата:
Когда игра ставится на паузу, вызывается статический метод MySound.pause(), который перебирает статический же массив со всеми звуками и всех их отстанавливает.
Не проще ли через SoundMixer звуками управлять?

Старый 09.03.2013, 22:33
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 19  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
2GBee: а в этом-то топике, что не так с моим стилем общения? "Почему не по феншую? Что вам не нравится?" - это что ли? Ну так я тут без всякого сарказма спросил, мне действительно интересно, что думают другие люди по поводу такой конструкции.

2caseyryan: а где связанность? Связанность, это когда у тебя все объекты программы тесно переплелись друг с другом перекрестными ссылками. Или нет? А тут как раз наоборот, совершенно все звуки держатся в одном статическом классе, контроллерам не нужно даже на него ссылку держать. Написал SoundController.pause() - все звуковые каналы остановились, записали позицию звуковой дорожки. Написал SoundContoller.resume() - начали проигрывание с той же позиции.

Точно так же, у меня, скажем пишется стратегическая игрушка. Там много объектов на сцене разной природы - частицы, анимированные задники, юниты. Все они у меня реализуют интерфейс IPauseble и при добавлении на сцену добавляют себя в статический PauseController. По destroy() - убирают себя. И это простенькая конструкция позволяет остановить все объекты совершенно разной природы на сцене одной командой и не хранить при этом в контроллере битвы кучу лишних ссылок.

А SoundMixer не дает отдельно стопить музыки и звуки. И не позволяет после паузы продолжить звуки с того же места. Меня лично бесит, когда нажимаешь паузу во время какого-нибудь взрыва, потом отжимаешь, и наблюдаешь безвучно нарастающий шар огня. Неестественно.
__________________
мой пустой блог

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

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

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


 


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


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