Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Объявление массивов AS3 (http://www.flasher.ru/forum/showthread.php?t=122667)

helgboy 16.03.2009 02:54

Объявление массивов AS3
 
Как в 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

для каждого эл-та
Код AS3:

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

Код AS3:

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

одна ошибка тут:
Код AS3:

var p:Number=new Number  ;

замените на
Код AS3:

var p:Number;

так же, я смотрю
Код AS3:

p=j;

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

helgboy 16.03.2009 03:51

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


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

2morrowMan 16.03.2009 03:59

Код AS3:

var myArray:Array = new Array();

или
Код AS3:

var myArray:Array = [];

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

serenkiy 16.03.2009 04:01

Вы для начала создайте "хранилище" для Loader'ов:
Код AS3:

var loader:Array = new Array();

уже после этого можно писать
Код AS3:

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. Но главное что это работает и это радует :)

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

Код AS3:

var loader:Object = new Object();

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

loader[1] = new Loader();


2morrowMan 16.03.2009 05:56

Цитата:

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

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

Код AS3:

var loader:Object = new Object();

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

loader[1] = new Loader();


Как бы не так:
Код AS3:

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

:taunt:

KODERart 16.03.2009 07:38

Код AS3:

loader:Array = new Array();
 
loader.push(loader[1]);
img1.addChild(loader[1]);


Arif flasher 16.03.2009 08:47

Код AS3:

var loaderArray = [loader1, loader2, loader3, ..., loaderN]

не надо определить тип массива

да и как serenski заметил уже:
Код AS3:

var p:Number=new Number;

должен быть:
Код AS3:

var p:Number=new Number();

потому что "new" это метод, надо поставить круглые скобки

cleptoman 16.03.2009 12:53

а когда new методом успел стать?.)

insected 16.03.2009 13:16

Цитата:

Сообщение от helgboy (Сообщение 805770)
Неужели здесь никто не знает как массивы объявлять??!!!

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

wvxvw 16.03.2009 14:40

Просто некоторые названия в АС иногда вводят в заблуждение людей программирующих на других языках, тот же массив, например. Правильнее было бы называть его Collection или что-то в этом роде, но его название - это скорее пережиток оставшийся от предыдущей версии языка. Примитивных массивов в АС как таковых нет, и это потому, что вы не можете програмно указать сколько памяти выделить под массив, ну и как результат - не можете указать тип данных которыми нужно массив заполнить. Т.е. конструкций типа:
Код:

public int myIntegers[1, 2];
нету. С другой стороны - для вшего конкретного случая проблема решается очень просто -
Код AS1/AS2:

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

Цитата:

Сообщение от cleptoman (Сообщение 805849)
а когда 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

Цитата:

Сообщение от BlooDHounD (Сообщение 805879)
wvxvw, AS тут не причём. как ни странно в JS такая же беда. и не только в нём. во всём семействе ES.

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

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

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

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

BlooDHounD 16.03.2009 17:30

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

wvxvw 16.03.2009 19:05

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


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

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