PDA

Просмотр полной версии : Объявление массивов AS3


helgboy
16.03.2009, 02:54
Как в AS3 объявить массив так чтоб элементы массива принадлежали типу данных Loader, другими словами
раньше я писал
loader1:Loader = NewLoader;
loader2:Loader = NewLoader;
loader3:Loader = NewLoader;
img1.addChild(loader1);


а сейчас мне нужно
loader:Array;
...???
img1.addChild(loader[1]);

VVall
16.03.2009, 02:57
loader[1]=new Loader, наверное?

helgboy
16.03.2009, 03:01
хм а если в массиве 200 элементов

serenkiy
16.03.2009, 03:09
для каждого эл-та
loader[i] = new Loader();

helgboy
16.03.2009, 03:19
Нет, выдает ошибку в этой строке expecting semicolon before leftbracket

serenkiy
16.03.2009, 03:25
Значит где то Вы пропустили какой-нибудь символ. Или неправильное применение кода. Если выложите весь код, попробуем вместе найти ошибку.

helgboy
16.03.2009, 03:30
var loader[1] = new Loader();
var loader2:Loader = new Loader();
var loader3:Loader = new Loader();
var loader4:Loader = new Loader();
var loader5:Loader = new Loader();
var loader6:Loader = new Loader();
var img1:Sprite = new Sprite();
var img2:Sprite = new Sprite();
var img3:Sprite = new Sprite();
var img4:Sprite = new Sprite();
var img5:Sprite = new Sprite();
var img6:Sprite = new Sprite();
var pP:PerspectiveProjection = new PerspectiveProjection();
var pP1:PerspectiveProjection = new PerspectiveProjection();
var url:URLRequest = new URLRequest();
var p:Number=new Number ;
stranica1();
global function stranica1():void {
p=j;
url=new URLRequest("file:///E:/res/page-"+p+".jpeg");
loader[1].load(url);
loader[1].x=0;
loader[1].y=0;
img1.addChild(loader[1]);
img1.x=+500;
img1.y=+0;
this.addChild(img1);
}

serenkiy
16.03.2009, 03:44
одна ошибка тут:

var p:Number=new Number ;

замените на
var p:Number;
так же, я смотрю

p=j;

но определения переменной j не вижу.

helgboy
16.03.2009, 03:51
млин... это кусок кода весь я скидывать не стал , переменная и p и j определена но в другой части программы и я же русским языком сказал что ошибку выдает именно в первой строке котору мне посоветовали написать
var loader[1] = new Loader();


Неужели здесь никто не знает как массивы объявлять??!!!

2morrowMan
16.03.2009, 03:59
var myArray:Array = new Array();
или
var myArray:Array = [];

вот так объявляются массивы.

serenkiy
16.03.2009, 04:01
Вы для начала создайте "хранилище" для Loader'ов:

var loader:Array = new Array();


уже после этого можно писать

loader[1] = new Loader(); // без var

helgboy
16.03.2009, 04:05
хорошо задам вопрос по другому:
В AS3 не нужно определять тип данных массива?
например как это делается в delphi a:array[1..10] of integer;
мне необходима чтоб элементы массива были Loader !!!!

wvxvw
16.03.2009, 04:11
В FP10 - можно, там есть Vector класс - типизированый массив, в FP9 - нет, но вы можете сами написать вариант типизированного массива, но оно того не стоит, т.как вы не сможете переопределить оператор доступа к массиву и не сможете переопределить поведение класса при динамическом добавлении значений / либо не сможете наследоваться от массива.
Если вы будете использовать MXML - то там возможно задать тип массиву с помощью метатегов, но похоже, что это вам не грозит :)

serenkiy
16.03.2009, 04:12
нет, в этом нет необходимости. Я работал в Delphi и сильно удивился о способах определения массива на ActionScript. Но главное что это работает и это радует :)

Можете определить массив так:


var loader:Object = new Object();


и дальше работать так же, как и с массивами.

loader[1] = new Loader();

2morrowMan
16.03.2009, 05:56
нет, в этом нет необходимости. Я работал в Delphi и сильно удивился о способах определения массива на ActionScript. Но главное что это работает и это радует :)

Можете определить массив так:


var loader:Object = new Object();


и дальше работать так же, как и с массивами.

loader[1] = new Loader();

Как бы не так:

var loader:Object = new Object();
loader[1] = new Loader();

trace(loader.length);
:taunt:

KODERart
16.03.2009, 07:38
loader:Array = new Array();

loader.push(loader[1]);
img1.addChild(loader[1]);

Arif flasher
16.03.2009, 08:47
var loaderArray = [loader1, loader2, loader3, ..., loaderN]
не надо определить тип массива

да и как serenski заметил уже:
var p:Number=new Number;
должен быть:
var p:Number=new Number();
потому что "new" это метод, надо поставить круглые скобки

cleptoman
16.03.2009, 12:53
а когда new методом успел стать?.)

insected
16.03.2009, 13:16
Неужели здесь никто не знает как массивы объявлять??!!!

Что вы нервничаете? Допустили синтаксическую ошибку и не можете ее найти, читайте свой код.

wvxvw
16.03.2009, 14:40
Просто некоторые названия в АС иногда вводят в заблуждение людей программирующих на других языках, тот же массив, например. Правильнее было бы называть его Collection или что-то в этом роде, но его название - это скорее пережиток оставшийся от предыдущей версии языка. Примитивных массивов в АС как таковых нет, и это потому, что вы не можете програмно указать сколько памяти выделить под массив, ну и как результат - не можете указать тип данных которыми нужно массив заполнить. Т.е. конструкций типа:
public int myIntegers[1, 2]; нету. С другой стороны - для вшего конкретного случая проблема решается очень просто -
package {
public class ArrayOfLoaders {

private var _loaders:Array = [];
public function ArrayOfLoaders(){}

public function addItem(loader:Loader):void {
_loaders.push(loader);
}

public function getItemAt(index:int):Loader { return _loaders[index]; }

public function get length():int { return _loaders.length; }
}
}

Arif flasher
16.03.2009, 14:48
а когда new методом успел стать?.)

ой сори, я имел ввиду "new Number()" тут идет как метод, поэтому надо круглые скобки добавлять))

BlooDHounD
16.03.2009, 14:57
wvxvw, AS тут не причём. как ни странно в JS такая же беда. и не только в нём. во всём семействе ES.

Collection то вообще из другой оперы.

в тех же сях есть некий класс Vector. так вот он как ни странно такой же странный как в АС %)

cleptoman
16.03.2009, 15:31
Arif flasher, конструктор называеца.)

wvxvw
16.03.2009, 16:12
wvxvw, AS тут не причём. как ни странно в JS такая же беда. и не только в нём. во всём семействе ES.

Collection то вообще из другой оперы.

в тех же сях есть некий класс Vector. так вот он как ни странно такой же странный как в АС %)

Это называется "дедукция" - метод логических заключений от часного к общему:
т.е. если чего-то нет в АS, то это не значит, что этого чего-то нет и в других языках, или что это обьязательно в них присутствует - этот факт просто не рассматривается в выше приведенном тезисе. Вопрос был про АS, и ОП вроде не интересовало, располагают ли подобными средствами другие языки.

С моей точки зрения http://en.wikibooks.org/wiki/Java_Programming/Collection_Classes это то, что вполне симметрично Array в АS. Но, естесственно, я не утверждаю, что они идентичны.

BlooDHounD
16.03.2009, 17:30
wvxvw, по поводу коллекций, ты не прав. массив - это упорядоченная последовательность элементов. а коллекция - это болие широкое понятие, в котором элементы могут располагаться как попало.
а первую половину высказывания я вообще не понял. ты обвиняешь АС, а я обвиняю его предков.

wvxvw
16.03.2009, 19:05
Я никого не обвиняю, я говорю, что то, что в других языках, будь они родстванны AS, или нет, такого рода классов может не быть, но это не связано с обсуждаемым вопросом - потому что ОП это вряд ли интересует.
А по поводу коллекций я не буду спорить, потому что, естесственно они не одинаковые с массивом в AS. Сравнение было сделано для того, чтобы объяснить, что массив в АS - это не просто набор элементов, а + еще куча методов, позволяющие эти элементы сортировать, упорядочивать, искать и т.п. Наверное, более похожая структура - ArrayList в Java, но я не берусь утверждать т.как во-первых, не на столько хорошо знаю, а во-вторых, точного соответствия все равно нет т.как языки не очень-то похожи.