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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.08.2013, 15:32
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 1  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
По умолчанию структура данных

Добрый день, у меня такой вопрос:

Если делаешь параметры классом, например
Код AS3:
 public class Skills
 {
  public var intellect:Number;
  public var bravery:Number;
  public var leadership:Number;
 }
а потом
Код AS3:
 var skills:Skills = new Skills();
то FlashDevelop подставляет параметры автоматом - skills.intellect

а если
Код AS3:
public var skills:Object = {intellect: Number, bravery: Number, leadership: Number};
- то нет. Как в Object автодополнение кода включить?


Или например хочу в классе все переменные заполнить рандомом

Код AS3:
for each (var param:uint in this)
   {
       param = Math.random() * 10;
   }
какая конструкция должна быть?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Object — динамический класс, и задаваемые Вами свойства динамические {intellect: Number, bravery: Number, leadership: Number}. То есть они непостоянны, могут во время исполнения вообще удаляться, могут добавляться другие. Компилятор не берет на себя ответственности за динамические свойства, он не может контролировать, что и как будет происходить в рантайме. Он не может проанализировать код на предмет, будет ли в данном месте кода у этого обжекта такое свойство или нет. Может быть, оно вообще добавляется обжекту или наоборот, удаляется из него, в обработчике нажатия на кнопку, например. То есть гарантировать его наличие компилятор не может в принципе, на то оно и динамическое. Поэтому никакого автокомплита. А вот с инициализацией по перечислению все прямо наоборот — перечисляются с for each только динамические свойства, а члены класса — нет. То есть Вы можете соединить два последних кода и заменить this на skills
__________________
Reality.getBounds(this);

Старый 26.08.2013, 16:26
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 3  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
да я так и понял, что объект - динамический, жаль нельзя его финализировать) А насчет класса - придется использовать старую монстроконструкцию с вектором (хотя учитывая обстоятельства, это еще по-божески )

Код AS3:
private const SKILLS:Vector.<String> = Vector.<String>(["intellect", "bravery", "leadership"]);
 
for each (var param:String in SKILLS)
{
    this[param] = Math.random() * 10;
}
Хотелось бы также узнать, какой метод предпочитают в современном игрострое - использовать Object, что сильно сокращает количество файлов .as либо классы зато с возможностью автокомплита и дальнейшей настройки?


Последний раз редактировалось Psijic; 26.08.2013 в 17:36.
Старый 04.09.2013, 00:38
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 4  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
Вспомнил, что в Delphi, да вроде и в C++ были перечисляемые типы данных. Вот они бы пригодились, а то сейчас все делается через лишние константы. Запаришься. Тут чел статейку про паттерн enum из джавы переложил на as3. Но че-то много кода лишнего получается http://habrahabr.ru/post/38978/. На джаве вроде определение enum справляется.


Последний раз редактировалось Psijic; 04.09.2013 в 01:48.
Старый 04.09.2013, 08:19
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Хотелось бы также узнать, какой метод предпочитают в современном игрострое - использовать Object, что сильно сокращает количество файлов .as либо классы зато с возможностью автокомплита и дальнейшей настройки?
Все зависит от обстоятельств. Бывают случаи, когда Object - единственный верный вариант. Например при получении списка параметров с сервера, и не известно что и в какой момент времени там будет.
Если типы и количество данных известны заранее, и известно что это за данные, то я предпочитаю сделать отдельный класс, с заранее указанными полями.
В общем, какой подход удобнее, такой и используется

Старый 14.09.2013, 12:45
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 6  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
Новая подтема: сейчас модно делать спрайт-листы и внедрять их в код [Embed]. Однако, на каждый спрайт-лист нужно несколько переменных. А если у меня 20-30-100 спрайт-листов? Конечно, это уже бред, но как оптимизировать ситуацию? Ведь надо их хранить в памяти, чтобы не создавать заново, а переиспользовать. И как к ним обращаться? Или если я делаю stand-alone swf, не лучше ли запихать все в swc как спрайты? Хотя, это еще бредовее... Зато обращаться проще. Да и видел, кто-то на форуме по старлингу выкладывал кусок кода Г. Скиннера, где он в синглтоне хранил заэмбеденную графику, вроде тоже в тему.

Вот пока че-то шаманю согласно концепции Starling

Код AS3:
public static function getImageFromList(name:String, spriteList:String):Image
{
			var texture:Texture = Texture.fromBitmap(new List());
			var xml:XML = XML(new this[List + "XML"]());
			var textureAtlas:TextureAtlas = new TextureAtlas(texture, xml);
			texture = textureAtlas.getTexture(name);
			return new Image(texture);
}
Правда, в статике this не проходит, да и листы пока не видит. Думаем дальше


Последний раз редактировалось Psijic; 14.09.2013 в 12:58.
Старый 13.08.2014, 01:46
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 7  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
Приветствую снова. Задался таким простым вопросом: надо разместить объекты на поле. Как описать структуру данных лучшим образом? Простой массив
Код AS3:
[[x, y, id], [x, y, id]]
не дает понимания о его содержимом. Собственный класс под структуру данных
Код AS3:
var grid: Vector.<CustomVO> = Vector.<CustomVO>([new CustomVO(1, 1, 5), new CustomVO(1, 3, 5)]);
заставляет постоянно использовать громоздкие конструкции с new. Массив объектов типа
Код AS3:
[{x:1, y: 1, id: 4}, {x:1, y: 2, id: 6}]
выглядит как что-то между первыми двумя вариантами. Вектор векторов типа
Код AS3:
Vector.<Vector.<uint>>([[0,1], [3,5], [4,9], [6,12]]);
тут надо подобрать правильный каст, текущий не прошел.

Старый 13.08.2014, 02:19
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 8  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Из Вашего поста ничего не понятно, но последний код вряд ли рабочий. Попробуйте так -
Код AS3:
var vvu:Vector.<Vector.<uint>> = new < Vector.<uint> > [ new <uint>[1, 2], new <uint>[2, 3] ];
trace(vvu);//

Старый 13.08.2014, 02:21
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 9  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Psijic, первый неюзабелен. второй юзать в долгосрочной перспективе, третий в краткосрочной. четвёртый юзать для скорости(хотя не факт), используй new <uint>[4, 6]

Старый 13.08.2014, 16:05
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 10  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
Цитата:
Сообщение от Gerbert Посмотреть сообщение
Из Вашего поста ничего не понятно, но последний код вряд ли рабочий. Попробуйте так -
Код AS3:
var vvu:Vector.<Vector.<uint>> = new < Vector.<uint> > [ new <uint>[1, 2], new <uint>[2, 3] ];
trace(vvu);//
Да, вектор нерабочий, я как-то так и написал, может, непонятно выразился. Спасибо за рабочий вариант, теперь я вижу что этот вариант особо не лучше кастомного VO-класса

@nubideus
Код AS3:
new <uint>[4, 6]
Это вектором? Похоже на мой 4й вариант. Или я чего-то не понял, приведи полный пример.

Есть еще 1 вариант - весьма оптимизированный для кода, но трудный для восприятия: 3 вектора uint
Код AS3:
var gridX: Vector.<uint>
var gridY: Vector.<uint>
var gridId: Vector.<uint>
Правда, в отличие от, например, того же MVC (сравнение взято потому что там тоже 3 различных класса для 1 объекта), я не представляю как это удобно можно хранить. Хотя, если сделать обертку-"фасад" в виде класса
Код AS3:
class grid
{
var x: Vector.<uint>
var y: Vector.<uint>
var id: Vector.<uint>
}
По-моему, уже что-то, можно попробовать. Еще бы добавить зависимость индексов между векторами


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

Теги
class , object
Опции темы
Опции просмотра

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

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


 


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


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