Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
AS 3.0

Формируемое имя переменной (экземпляра)

05.04.2013, 21:57. Показов 2588. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здоров мужики. Подскажите, как указывать имя переменной которая формируется в процессе ?

к примеру мне нужно создать 100 экземпляров класса, но не вручную писать код.

К примеру:

ActionScript 3
1
2
3
4
5
6
7
8
for(var i=1;i<=100;i++)
{
 
a:Class=new Class; 
//что писать вместо bla ?
//варианты вроде: (a+i) не приносят успеха.
 
}

Читал что, используют массивы в данном случае, но не понял как(массивы в as какие не такие, пока в них не разобрался)

Можно или обойтись без них, а если нет, как это реализовать.
Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2013, 21:57
Ответы с готовыми решениями:

Создание экземпляра класса, имя класса находиться в строковой переменной
Подскажите люди добрые, как можно выйти из такой ситуации, вот допустим имеются классы class new1{ . . . } class new2{ . . ...

Создание переменной, имя которой включает имя другой переменной
Вот пример кода var y = 1; var x = 'p' + y; eval( 'var' + x + '= 123' );к созданной переменной можно обращаться как к p1. А как быть...

автоматическое имя экземпляра класса
Подскажите пожалуйста как создавать экземпляры(объекта) класса автоматически (автогенерирумое имя экземпляра(объекта) (например класса...

15
9 / 9 / 1
Регистрация: 22.03.2013
Сообщений: 65
05.04.2013, 22:12
ActionScript 3
1
2
3
4
5
6
7
8
9
private function whileFoo():void{
    var objectArray:Array = [];
    var object:Shape;
    var i:int = 0;
    while(i < 100){
    objectArray.push(object);
    i++;
    trace(objectArray.length);
}}
1
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
05.04.2013, 22:33  [ТС]
Цитата Сообщение от SseDmoGo Посмотреть сообщение
ActionScript 3
1
2
3
4
5
6
7
8
9
private function whileFoo():void{
    var objectArray:Array = [];
    var object:Shape;
    var i:int = 0;
    while(i < 100){
    objectArray.push(object);
    i++;
    trace(objectArray.length);
}}

Как мне теперь к свойству или методу обращаться ?
У меня есть класс light, у него метод draw

как мне теперь вызвать его для всех экземпляров ?

ActionScript 3
1
 objectArray[0].draw();
Так ?

Добавлено через 8 минут
Я возможно не так выразился. Нужно создать n-e количество экземпляров класса light с разными именами.


ActionScript 3
1
2
3
4
5
for(var i:int;i<n;i++)
{
name+i:light = new light;
 
}
Вроде этого. Но name+i, заменить на правильный код.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
05.04.2013, 22:34
kaliban, используйте типизированный массив (Vector). И пройтись по всем элементам цикла аналогично созданию/помещению объектов в массив.
1
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
05.04.2013, 22:38  [ТС]
Я не бум-бум что такое "типизированный массив (Vector)" =)

Нельзя в цикле создать, формируя имя name+i(индекс цикла) ? Я где то видел что делали так, только не помню как оформить name+i, вроде в кавычках, но это не срабатывает.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
05.04.2013, 22:42
kaliban, если нужно обращаться по имени - используйте объект (Object) или Dictionary
Вот пример. Только, думаю, целесообразно делать это в массиве.
ActionScript 3
1
2
3
4
5
var o:Object = {};
o["name" + 0] = new SomeObject();
o["name" + 1] = new SomeObject();
o["name" + 2] = new SomeObject();
trace(o["name" + 1]);//обращение к созданному экземпляру класса
2
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
05.04.2013, 23:00  [ТС]
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import flash.events.MouseEvent;
import com.oaxoa.fx.Lightning;
import com.oaxoa.fx.LightningFadeType;
import flash.events.Event;
 
var o:Object = {};
 
for(var i:int=1;i<10;i++)
{
o["name"+i] = new Lightning(Math.random()*0xffffff,1);
addChild (o);
 
}
 
 
stage.addEventListener(Event.ENTER_FRAME,ent);
 
function ent(e:Event):void
{
    //for(var i1:int=1;i1<10;i1++)
    ll.update ();
                
    
}

Если вам не трудно, подправьте код. Как мне вызвать метод update (); для всех экземпляров ?

Попробую объяснить что мне нужно сделать. Класс рисует молнию. метоп апдейт ее апдейтит =)
Мне нужно создать N молний на сцене.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
05.04.2013, 23:08
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import flash.events.MouseEvent;
import com.oaxoa.fx.Lightning;
import com.oaxoa.fx.LightningFadeType;
import flash.events.Event;
 
var o:Object = {};
 
for(var i:int=1;i<10;i++)
{
    o["name"+i] = new Lightning(Math.random()*0xffffff,1);
    addChild (o["name"+i] as DisplayObject);
 
}
 
 
stage.addEventListener(MouseEvent.CLICK,ent);//для запуска - кликнуть по объекту молнии
 
function ent(e:MouseEvent):void
{
    if(e.target is Lightning){
        (e.target as Lightning).update();
    }
}
1
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
05.04.2013, 23:51  [ТС]
Спасибо, что так помогаете мне, но это совсем не то, что нужно. Update нужно вызывать каждый кадр( зачем по клику ? )
И как теперь обратиться к свойству ?
У класса есть методы StartX и EndX как их теперь задавать для каждого экземпляра ?


Вот подправил, выглядит вроде как надо(код), но дает ошибку

( #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at _fla::MainTimeline/frame1() )


ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import flash.events.MouseEvent;
import com.oaxoa.fx.Lightning;
import com.oaxoa.fx.LightningFadeType;
import flash.events.Event;
 
var o:Object = {};
 
for(var i:int=1;i<10;i+=10)
{
    o["name"+i] = new Lightning(Math.random()*0xffffff,1);
    addChild (o["name"+i] as DisplayObject);
     (o[i] as Lightning).startX=i;
     (o[i] as Lightning).startY=i;
     (o[i] as Lightning).startX=i+50;
     (o[i] as Lightning).startY=i;
}
 
 
stage.addEventListener(Event.ENTER_FRAME,ent);//для запуска - кликнуть по объекту молнии
 
function ent(e:Event):void
{
    for(var i1:int=1;i1<10;i1+=10)
    {
   (o["name"+i1] as Lightning).update();
    }
}
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
06.04.2013, 00:11
Цитата Сообщение от kaliban Посмотреть сообщение
Update нужно вызывать каждый кадр
Каждый раз когда?

Цитата Сообщение от kaliban Посмотреть сообщение
У класса есть методы StartX и EndX как их теперь задавать для каждого экземпляра ?
Не понял вопрос. Зачем их "задавать" если они "есть"?

Цитата Сообщение от kaliban Посмотреть сообщение
но дает ошибку
На что ругается? Что "говорят" трэйсы?
0
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
06.04.2013, 02:29  [ТС]
По событию ENTER_FRAME что бы молния обновлялась.

Они есть как свойства, им же определить нужно.Для каждого экземпляра свои StartX и EndX, так же как и EndX и EndY. Точки, из которых будет исходить молния, и где она будет заканчиваться.


Вот кстати библиотека которую использую. Красивый эффект.
http://blog.oaxoa.com/2009/07/... rge-class/

trace вообще не выводится. Только ошибка.

( #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at _fla::MainTimeline/frame1() )
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
06.04.2013, 13:39
Цитата Сообщение от kaliban Посмотреть сообщение
Они есть как свойства, им же определить нужно.Для каждого экземпляра свои StartX и EndX, так же как и EndX и EndY. Точки, из которых будет исходить молния, и где она будет заканчиваться.
Ну так а где содержимое этого класса?

Цитата Сообщение от kaliban Посмотреть сообщение
trace вообще не выводится
У меня выводится. Следовательно, не там установлен.
0
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
06.04.2013, 15:23  [ТС]
Причем тут трейсы ? Что не там установлен ? Трейс ?

Как где содержимое ? Я же указал в импорте ( import com.oaxoa.fx.Lightning;
import com.oaxoa.fx.LightningFadeType

Создаю экземпляр :
ActionScript 3
1
2
3
4
5
6
light:Lightning = new Lightning(0xffffff,2);
//Потом ему свойства указываю.
light.StartX= 0;
light.StartY= 200;
light.endtX= 200;
light.endY= 500;
Я не так вопрос сформулировал похоже. Если можно, продемонстрируйте создание n-го количества экземпляров на примере вектора, мне так понятнее будет. И как потом обращаться к свойствам и методам каждого из созданных.
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
06.04.2013, 15:39
kaliban, разве вы не о том, как их (координаты) передать спрашивали? Наверное недопоняли друг друга.

ActionScript 3
1
2
3
var v:Vector<SomeClass> = new Vector<SomeClass>();
v.push(new SomeClass());//добавляем объекты в типизированный массив, делать это можно и в цикле, тогда объектов будет гораздо больше
v[0].someMethod();//запускаем метод нужного объекта
1
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
08.04.2013, 06:34  [ТС]
Спасибо, выглядит вроде как нужно. Но не работает опять же.

Я не силен в синтаксисе as3, но после слова Vector вроде точка нужна. Как бы там ни было, я попробовал и так и так, и с данным ниже кодом выдает ошибку:

Монтажный кадр 1, слой "Слой 1", кадр 1, строка 11 1119: Обращение возможного неопределенного свойства StartX через ссылку со статическим типом com.oaxoa.fx:Lightning .




ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import flash.events.MouseEvent;
import com.oaxoa.fx.Lightning;
import com.oaxoa.fx.LightningFadeType;
import flash.events.Event;
 
var v:Vector.<Lightning> = new Vector.<Lightning>();
 
for(var i:int=0;i<10;i++)
{
v.push(new Lightning(0xDD0000,2));
v[i].StartX=i*10;
v[i].StartY=100;
v[i].endX=i*10;
v[i].endY=300;
 
}
 
 
stage.addEventListener(Event.ENTER_FRAME,ent);//для запуска - кликнуть по объекту молнии
 
function ent(e:Event):void
{
    for(var i1:int=0;i1<10;i1++)
    {
       v[i1].update();
    }
}
Добавлено через 4 минуты
Погуглил, моя ошибка. Не правильно метод писал. С маленькой буквы нужно было =)

Теперь ошибок не выдает. Но все так же не работает ))

Добавлено через 7 минут
Тупанул ... =)

Не добавлял на сцену просто.

Вот рабочий код:


ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import flash.events.MouseEvent;
import com.oaxoa.fx.Lightning;
import com.oaxoa.fx.LightningFadeType;
import flash.events.Event;
 
var v:Vector.<Lightning> = new Vector.<Lightning>();
 
for(var i:int=0;i<10;i++)
{
v.push(new Lightning(0x000000,2));
v[i].startX=0;
v[i].startY=i*40;
v[i].endX=550;
v[i].endY=i*40;
addChild(v[i]);
 
 
//y  =====
//x !=
}
 
 
 
 
 
stage.addEventListener(Event.ENTER_FRAME,ent);//для запуска - кликнуть по объекту молнии
 
function ent(e:Event):void
{
    for(var i1:int=0;i1<10;i1++)
    {
       v[i1].update();
    }
}
1
3 / 3 / 0
Регистрация: 13.04.2012
Сообщений: 47
08.04.2013, 06:38  [ТС]
Вот результат.
Вложения
Тип файла: swf много молний1.swf (5.2 Кб, 32 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2013, 06:38
Помогаю со студенческими работами здесь

Как узнать имя экземпляра объекта?
Как изнутри экземпляра объекта узнать имя этого экземпляра, например: function someObject () { this.getName () { ...

Как узнать имя экземпляра класса?
у меня есть класс polynom, я создаю его экземпляры polynom a(5), b(5), c(5); как мне программно узнать имя экземпляра класса?

Имя экземпляра объекта внутри класса на С++
Добрый день. Подскажите, пожалуйста, как узнать имя экземпляра объекта внутри класса на С++ ? В частности, мне надо имя экземпляра...

Имя установленного экземпляра Sql Server
Здравствуйте. Меня интересует вопрос, который заключается в том, как узнать имя установленного экземпляра SQL Server 2005 на локальной...

Как обращаться к переменной экземпляра?
Короче надо иметь одну переменную на все методы, чтобы методы могди ею пользоваться и изменять ее. Написал такой код: public class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru