Форум 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=146406)

vector3d 07.11.2010 01:38

Объявление объекта с неизвестным именем (AS3)?
 
Привет.
Помогите разобраться в синтаксисе AS3.
Код AS3:

package {
 
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        public class DocumentClass extends MovieClip {
                public function DocumentClass() {
                        createMaze(5, 3,1,1);
 
 
                }
                private function createMaze(horizontal_:Number, vertical_:Number,startRow:Number,startColumn:Number):void {
                        var rows:Number=horizontal_;
                        var columns:Number=vertical_;
                        var totalCells:String=rows*columns;
 
                        var startRow:Number=startRow;
                        var startColumn:Number=startColumn;
 
 
                        var cellsVisited:Number=0;
                        var currentCell:String="cell"+startRow+"_"+startColumn;
 
this[this.currentCell] = {name:this.currentCell, x:this.startRow, y:this.startColumn, exists:true};
 
                }
 
 
        }
}

Необходимо строку переписать с AS2 на AS3

Код AS1/AS2:

this[this.currentCell] = {name:this.currentCell, x:this.startRow, y:this.startColumn, exists:true};

___________

Код AS3:

var myObject:Object = {name:currentCell};
 
trace(myObject.name);
//Это срабатывает, а дальше не могу додумать

Помогите разобраться

Bgg 07.11.2010 01:44

А что эта строка делает в as2?

vector3d 07.11.2010 01:52

Долго объяснять, просто хочу понять, вообще можно объявлять переменные с заранее не известными именами?
В двух словах, создается лабиринт.

Bgg 07.11.2010 01:59

Ну можно наверно, так что ли?
Код AS3:

var obj:Sprite = new Sprite();
obj.name = Math.round(Math.random()*10).toString();

Но так никто не делает. Лучше скажите что вам нужно конкретно, и вам подскажут как правильно.

vector3d 07.11.2010 02:14

Раньше в AS2 можно было создать вот такую переменную:
i=7;
this['name_'+i]=77;
Интерпретатор бы создал переменную "name_7" c содержимым 77
А в AS3 уже не нельзя получается?

i.o. 07.11.2010 02:16

Цитата:

Сообщение от vector3d (Сообщение 948069)
Необходимо строку переписать с AS2 на AS3
Код AS1/AS2:

this[this.currentCell] = {name:this.currentCell, x:this.startRow, y:this.startColumn, exists:true};


Ну типа так будет:
Код AS3:

var obj:Object = new Object();
    obj.name = this.currentCell;
    obj.x = this.startRow;
    obj.y = this.startColumn;
    obj.exists = this.true;
 
this[this.currentCell] = obj;


vector3d 07.11.2010 02:20

ReferenceError: Error #1069: Не удалось найти свойство currentCell в DocumentClass; отсутствует значение по умолчанию.
at DocumentClass/createMaze()
at DocumentClass()
:)
Чёт не хочет
ни
this[this.currentCell] = obj;
ни
this[currentCell] = obj;

i.o. 07.11.2010 02:23

ну так я откуда знаю, что у вас является this'ом. Объявите документ-класс как dynamic, отключите strict-mode и вот вам АС2 :)
ПС: но вообще - совет не лучший ))

vector3d 07.11.2010 02:32

Вложений: 1
Вот исходник

в точности как и в вопросе данной темы)

vector3d 07.11.2010 02:47

Изменения данной строки
public class DocumentClass extends MovieClip {
на
public dynamic class DocumentClass extends MovieClip{
удалось обьявить так:
Код AS3:

this[this.currentCell] = {name:currentCell};
trace(this[this.currentCell].name+"  ||||||  "+this[this.currentCell]);

cell1_1 |||||| [object Object]

random13 08.11.2010 11:57

Цитата:

Сообщение от vector3d (Сообщение 948081)
Изменения данной строки
public class DocumentClass extends MovieClip {
на
public dynamic class DocumentClass extends MovieClip{
удалось обьявить так:
Код AS3:

this[this.currentCell] = {name:currentCell};
trace(this[this.currentCell].name+"  ||||||  "+this[this.currentCell]);

cell1_1 |||||| [object Object]

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


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

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