Просмотр полной версии : Объявление массивов AS3
Как в AS3 объявить массив так чтоб элементы массива принадлежали типу данных Loader, другими словами
раньше я писал
loader1:Loader = NewLoader;
loader2:Loader = NewLoader;
loader3:Loader = NewLoader;
img1.addChild(loader1);
а сейчас мне нужно
loader:Array;
...???
img1.addChild(loader[1]);
loader[1]=new Loader, наверное?
хм а если в массиве 200 элементов
serenkiy
16.03.2009, 03:09
для каждого эл-та
loader[i] = new Loader();
Нет, выдает ошибку в этой строке expecting semicolon before leftbracket
serenkiy
16.03.2009, 03:25
Значит где то Вы пропустили какой-нибудь символ. Или неправильное применение кода. Если выложите весь код, попробуем вместе найти ошибку.
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 не вижу.
млин... это кусок кода весь я скидывать не стал , переменная и 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
хорошо задам вопрос по другому:
В AS3 не нужно определять тип данных массива?
например как это делается в delphi a:array[1..10] of integer;
мне необходима чтоб элементы массива были Loader !!!!
В 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
Неужели здесь никто не знает как массивы объявлять??!!!
Что вы нервничаете? Допустили синтаксическую ошибку и не можете ее найти, читайте свой код.
Просто некоторые названия в АС иногда вводят в заблуждение людей программирующих на других языках, тот же массив, например. Правильнее было бы называть его 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, 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, по поводу коллекций, ты не прав. массив - это упорядоченная последовательность элементов. а коллекция - это болие широкое понятие, в котором элементы могут располагаться как попало.
а первую половину высказывания я вообще не понял. ты обвиняешь АС, а я обвиняю его предков.
Я никого не обвиняю, я говорю, что то, что в других языках, будь они родстванны AS, или нет, такого рода классов может не быть, но это не связано с обсуждаемым вопросом - потому что ОП это вряд ли интересует.
А по поводу коллекций я не буду спорить, потому что, естесственно они не одинаковые с массивом в AS. Сравнение было сделано для того, чтобы объяснить, что массив в АS - это не просто набор элементов, а + еще куча методов, позволяющие эти элементы сортировать, упорядочивать, искать и т.п. Наверное, более похожая структура - ArrayList в Java, но я не берусь утверждать т.как во-первых, не на столько хорошо знаю, а во-вторых, точного соответствия все равно нет т.как языки не очень-то похожи.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.