PDA

Просмотр полной версии : Как обратиться к символу в символе??


Antonio
25.09.2010, 21:55
Всем привет! Вопрос по AS3....пол дня не могу разобраца с такой простой ситуацией!! помогите кто может!!
Есть символ к примеру "kvadrat", внутри него движущийся объект слева направо "kvadratik"- тоже символ, как мне через kvadrat дать команду stop(); kvadratik??
запись "kvadrat.kvadratik.stop(); " не работает... а как иначе?

samana
25.09.2010, 22:02
kvadrat.kvadratik.stop() скорее всего не работает, потому что вы не назначили эти имена экземплярам на сцене, а не только в библиотеке. Или возможно есть ещё код, который мы не увидели, а в нем какая то логическая ошибка.

КорДум
25.09.2010, 22:04
getChildByName

Antonio
25.09.2010, 22:13
оперативная работа))) очень приятно!! ща попробую последовать вашим советам!

Хомяк
25.09.2010, 22:14
С точки зрения языка kvadratik не вложен в kvadrat. Поэтому - kvadratik.stop(). Конечно, если он связан с Action соответствующим образом.

Antonio
25.09.2010, 22:30
не работает(( .. совсем запутался.. Вот смотрите: во влеше есть объект Kvadrat в нем бегает Kvadratik оба они символы и линкованы как классы..при такой записи
package
{
import flash.display.Sprite;
import flash.display.MovieClip;

public class Sample extends Sprite
{
private var kvadrat:Kvadrat = new Kvadrat();
//private var kvadratik:Kvadratik = new Kvadratik();

public function Sample()
{
addChild(kvadrat);
kvadrat.kvadratik.stop();//???
}
}
}
kvadratik не останавливаеца, его нельзя считать свойством kvadrata что ли?

Хомяк
25.09.2010, 22:37
Если ракомментируете строку присвоения переменной символа Kvadratik(), то должны смочь управлять прямо: kvadratik.stop().
А если оформите код в своем посте соответствующим образом, возможно, не получите едкого замечания от админа :)

Antonio
25.09.2010, 22:51
package
{
import flash.display.Sprite;
import flash.display.MovieClip;

public class Sample extends Sprite
{
private var kvadrat:Kvadrat = new Kvadrat();
private var kvadratik:Kvadratik = new Kvadratik();

public function Sample()
{
addChild(kvadrat);
kvadratik.stop();//???
}
}
}
но он все равно продолжает проигрываться...

Добавлено через 2 минуты
как getChildByName применить сюда..:wacko:

samana
25.09.2010, 23:08
А где тут вложенность клипов, я не вижу? Квадрат то вы создали на сцене, а квадратик только объявили. Где
kvadrat.addChild(kvadratik)?
Если сам символ квадрат в библиотеке уже содержит в себе ребёнка квадратик, то в вашем классе не надо квадратик создавать ещё раз, он уже и так там есть.
Может исходник дадите посмотреть, только не для cs5

Antonio
25.09.2010, 23:14
:( у меня к сожалению cs5
вот пожалуйста..
package
{
import flash.display.Sprite;
import flash.display.MovieClip;

public class Sample extends Sprite
{
private var kvadrat:Kvadrat = new Kvadrat();
private var kvadratik:Kvadratik = new Kvadratik();

public function Sample()
{
addChild(kvadrat);
kvadrat.addChild(kvadratik);
kvadratik.stop();//???
}
}
}
так тож не останавливается ..кошмар какой то..

Antonio
25.09.2010, 23:18
вот могу выслать swf

f.g.programmer
25.09.2010, 23:20
Скорее всего достаточно просто во fla символу который лежит в символе Kvadrat и является экземпляром Kvadratik-а присвоить идентификатор kvadratik.

Причём, если Kvadrat имеет несколько ключевых кадров, идентификатор kvadratik для внутреннего Kvadratik-а нужно присвоить в каждом ключевом кадре.

Добавлено через 1 минуту
Под исходниками подразумевается fla

Antonio
25.09.2010, 23:44
Скорее всего достаточно просто во fla символу который лежит в символе Kvadrat и является экземпляром Kvadratik-а присвоить идентификатор kvadratik.

Причём, если Kvadrat имеет несколько ключевых кадров, идентификатор kvadratik для внутреннего Kvadratik-а нужно присвоить в каждом ключевом кадре.


спасибо за идею- не прошла.. не хочет тормозить гад....

Добавлено через 3 минуты
:confused: как же все таки это сделать...

spooner
25.09.2010, 23:58
Вы исходник выкладывайте, а не swf

Хомяк
26.09.2010, 00:01
Вы добавили на сцену символ Квадрат, со вложенным, но не связанным с AS экземпляром символа Квадратик. Далее, объявили класс символа Квадратик. Из библиотеки. Символ Квадратик лежит у вас в библиотеке а вы им пытаетесь управлять, с одной стороны. С другой. На сцене Квадрат со вложенным, но необъявленным в AS символом-мувиком Квадратик. На него вы никак не воздействуете и воздействовать не можете.
Правда, все это так как мне кажется, но телепат из меня плохой. Выложите fla-файл. Тогда можно будет сказать точнее.

samana
26.09.2010, 00:02
Даже если у вас CS5, то просто сохраните для CS4

Antonio
26.09.2010, 00:08
вот для cs4 все как надо))

Antonio
26.09.2010, 00:16
:quiet:вот так вот.. это вам не сложные логарифмические массивы описывать))) Вот простой пример, сижу уже целый день над ним

andrew911
26.09.2010, 00:50
Ну как вам и писали откройте символ Kvadrat и присвойте вложенному в него мувику имя kvadratik

или

в коде поправьте
MovieClip(kvadrat.getChildAt(0)).stop();

Но для вас, думаю, первый способ лучше

Antonio
26.09.2010, 01:50
Ураааа! Оседлали все таки, можно спасть спокойно!! Первый способ не помог
( присвоить имя kvadratik), а вот второй "MovieClip(kvadrat.getChildAt(0)).stop();"
сработал!!! правда запись немного странная... но все равно ВСЕМ большое Спа-а-а-асибо!!

Хомяк
26.09.2010, 02:48
Автор предидущего поста имел ввиду видимо следующее:

package
{
import flash.display.Sprite;
import flash.display.MovieClip;


public class Sample extends Sprite
{
private var kvadrat:Kvadrat = new Kvadrat();
private var kvadratik:MovieClip = kvadrat.getChildAt(0) as MovieClip ;

public function Sample()
{
addChild(kvadrat);

kvadratik.stop();


}
}
}




Что в принципе "тот же шарик - вид сбоку".

nldr
26.09.2010, 03:27
public var kvadratik! Собственно почему private?

Котяра
26.09.2010, 04:19
public var kvadratik! Собственно почему private?
а кому он нужен? Или вы хотите ещё и наверх доступ дать?

nldr
26.09.2010, 04:33
а кому он нужен? Или вы хотите ещё и наверх доступ дать?

Если бы мне надо было сверху управлять вложенным в объект объектом, Я бы сделал метод, но раз надо именно kvadrat.kvadratik.stop(); Я бы в классе квадрата написал бы public var kvadratic:SomeClass = new SomeClass(); а не добавлял его вручную во флеше.

Что не так в этом подходе?

andrew911
26.09.2010, 13:56
Странно, что первый способ не помог. Советую все-таки разобраться с ним, дальше не раз с таким столкнетесь.

Есть символ kvadrat, в него вложен мувиклип, чтобы к нему достучаться надо ему дать имя (kvadratik) и можно обращаться:

var kvadrat:Kvadrat = new Kvadrat();
kvadrat.kvadratik.stop();

Antonio
26.09.2010, 15:29
ну вы сами пробовали? я выложил исходник,попробуйте и убедитесь))
просто я честно говоря тож так думал с самого начала, это была моя первая версия такого обращения, но когда ничего не получилось, то задал вопрос сюда..:)

Хомяк
26.09.2010, 16:53
Странно, что первый способ не помог...

По-моему, ничего странного. Вы связываете символ (квадратик) с классом в AS, но на сцене, точнее в символе квадрат его экземпляр, а не он сам. Поэтому необходимо связать его (экземпляр) с AS отдельно, уже в классе квадрат.

Добавлено через 18 минут
...Что не так в этом подходе?

А при "разборе полетов" вам придется бегать по всем классам связанных символов и смотреть где что объявлено? Это даже не моя точка зрения - рекомендуется объявлять все классы символов в основном классе приложения, а не внутри других классов-символов. Очевидно, что так легче контролировать всю структуру. Бывают конечно исключения, но это уже конкретные ситуации, конкретные обстоятельства. Затем и создаются возможности программистам решать любую задачу как минимум тремя разными подходами :)

andrew911
27.09.2010, 13:12
ну вы сами пробовали? я выложил исходник,попробуйте и убедитесь))
просто я честно говоря тож так думал с самого начала, это была моя первая версия такого обращения, но когда ничего не получилось, то задал вопрос сюда..:)


Разумеется пробовал
Выкладываю файлы, если такие трудности обозвать символ.


По-моему, ничего странного. Вы связываете символ (квадратик) с классом в AS, но на сцене, точнее в символе квадрат его экземпляр, а не он сам. Поэтому необходимо связать его (экземпляр) с AS отдельно, уже в классе квадрат.

Что-то вы путаете.
Вы создаете экземпляр класса Квадрат - квадрат.
Каждый квадрат содержит символ, вы присваиваете этому символу (мувику) имя.

То что символ квадратик связан с классом Квадратик ничего не меняет, это можно было и не делать. С таким же успехом можно сказать что "на сцене, точнее в символе квадрат экземпляр MovieClip, а не он сам. "