Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Помогите с Movie Clip и текстовым полем. (http://www.flasher.ru/forum/showthread.php?t=211355)

pskameton 11.08.2015 21:47

Помогите с Movie Clip и текстовым полем.
 
Проблема такая, есть текстовое поле с динамическим выводом текста в нём "textinfo", данное текстовое поле находится в Movie Clip "ClipInfo"
Нужно вывести в текстовое поле информацию, делаю так:

var info:String = "Всё работает"; // Создаём переменную с текстом.
textinfo.text = info; // Выводим переменную в текстовое поле.

Если вставить этот код в Movie Clip, текст выводится, но мне нужно запускать его из основного кода Flash проекта, а переменные у Flash проекта и Movie Clip не общие.

Подскажите, пожалуйста, как мне решить проблему, как вывести текст из основного Flash в текстовое поле в Movie Clip?

Заранее огромное спасибо.

samana 11.08.2015 22:56

Просто дайте имя мувиклипу и обращайтесь через него
Код AS3:

myClip.textinfo.text = info;


tattori 11.08.2015 23:05

если ты из основного напишешь textinfo.text = info; то as3 будет искать textinfo в основном, а там его нет он внутри мувиклипа значит сначало говоришь какой мувиклип а потом то что внутри мувиклипа
Код AS3:

ClipInfo.textinfo.text = info;

Добавлено через 10 минут
если переменная объявлена из основного

pskameton 12.08.2015 06:32

Не получается.
 
Ребят пробовал так, не получается.

Выдаёт ошибку: Обращение возможно не определенного свойства "ClipInfo" через ссылку со статическим типом class.

ClipInfo - это класс моего MovieClip

Я пробую сейчас вот так:

var info:String = "20";

MovieClip(panel_left).MovieClip(animpanelleft).MovieClip(emotion).emotioninfo.text.addChild(info);

и так:

MovieClip(panel_left).MovieClip(animpanelleft).MovieClip(emotion).emotioninfo.text = info;

Вот так компилятор не выдаёт ошибку, т.к. я указываю ему что это MovieClip, но не выводит текст. У меня MovieClip еще в нескольких поэтому приходится делать так.

Подскажите, пожалуйста, еще варианты.

Isfet 12.08.2015 07:41

Цитата:

Сообщение от pskameton (Сообщение 1185696)
Ребят пробовал так, не получается.

Выдаёт ошибку: Обращение возможно не определенного свойства "ClipInfo" через ссылку со статическим типом class.

ClipInfo - это класс моего MovieClip

вам неправильно подсказали, ClipInfo - класс, а вам нужно обращаться через ссылку на экземпляр класса,

вы где-то создали экземпляр
Код AS3:

 
var clipInfo:ClipInfo = new ClipInfo();


так вот clipInfo - ссылка на экземпляр , и через нее надо обращаться к этому экземпляру, а ClipInfo - это класс ващего экземпляра , к нему можно обратиться , если создать в нем , допустим статичную функцию, но это уже другая история.

тоесть вы должны дойти из главного класса до вашего текст-поля ПО ССЫЛКАМ

Код AS3:

panel_left.animpanelleft.emotion.emotioninfo.text = info;

если так не получается , то выводите на экран

Код AS3:

 
trace(panel_left);
trace(panel_left.animpanelleft);
trace(panel_left.animpanelleft.emotion);
trace(panel_left.animpanelleft.emotion.emotioninfo);
trace(panel_left.animpanelleft.emotion.emotioninfo.text); // тут должен вывестить текущий текст в вашем поле

если в одном из этих трейсов будет null, значит у вас неправильная ссылка на экземпляр

Добавлено через 8 минут
Цитата:

Сообщение от pskameton (Сообщение 1185696)

MovieClip(panel_left).MovieClip(animpanelleft).MovieClip(emotion).emotioninfo.text = info;

вот здесь нужно убрать все MovieClip(...), компилятор постарается преобразовать panel_left к типу MovieClip, если ваша левая панель не наследована от MovieClip (а она я больше чем уверен должна быть наследована от Sprite), то компилятор выдаст NULL, и соответственно вы потеряете ссылку.

пишите так
Код AS3:

 
panel_left.animpanelleft.emotion.emotioninfo.text = info;

но все равно как-то коряво.

pskameton 12.08.2015 08:35

Цитата:

Сообщение от Isfet (Сообщение 1185697)
вам неправильно подсказали, ClipInfo - класс, а вам нужно обращаться через ссылку на экземпляр класса,

вы где-то создали экземпляр
Код AS3:

 
var clipInfo:ClipInfo = new ClipInfo();


так вот clipInfo - ссылка на экземпляр , и через нее надо обращаться к этому экземпляру, а ClipInfo - это класс ващего экземпляра , к нему можно обратиться , если создать в нем , допустим статичную функцию, но это уже другая история.

тоесть вы должны дойти из главного класса до вашего текст-поля ПО ССЫЛКАМ

Код AS3:

panel_left.animpanelleft.emotion.emotioninfo.text = info;

если так не получается , то выводите на экран

Код AS3:

 
trace(panel_left);
trace(panel_left.animpanelleft);
trace(panel_left.animpanelleft.emotion);
trace(panel_left.animpanelleft.emotion.emotioninfo);
trace(panel_left.animpanelleft.emotion.emotioninfo.text); // тут должен вывестить текущий текст в вашем поле

если в одном из этих трейсов будет null, значит у вас неправильная ссылка на экземпляр

Добавлено через 8 минут


вот здесь нужно убрать все MovieClip(...), компилятор постарается преобразовать panel_left к типу MovieClip, если ваша левая панель не наследована от MovieClip (а она я больше чем уверен должна быть наследована от Sprite), то компилятор выдаст NULL, и соответственно вы потеряете ссылку.

пишите так
Код AS3:

 
panel_left.animpanelleft.emotion.emotioninfo.text = info;

но все равно как-то коряво.

Я хотел уточнить у меня в коде:

var temppanelleft:MovieClip = new panel_left();

Тоесть создаётся переменная MovieClip, под названием temppanelleft я так понимаю используя класс panel_left из библиотеки.

Так как добарться до текстового поля?

temppanelleft это единственный элемент который выводится динамическим образом.

Пробовал так:

temppanelleft.emotioninfo.text = info;

и так:

temppanelleft.panel_left.anim_panelleft.emotion.emotioninfo.text = info;

и так:

temppanelleft.anim_panelleft.emotion.emotioninfo.text = info;

Не выводит ничего, trace тоже прописан, окно вывода пустое.

Добавлено через 33 минуты
И так, сейчас есть такой код:

Код AS3:

var info:String = "20";
 
temppanelleft.panel_left.animpanelleft.emotion.emotioninfo.text = info;
 
trace(info);
trace(temppanelleft);
trace(temppanelleft.panel_left);
trace(temppanelleft.panel_left.animpanelleft);
trace(temppanelleft.panel_left.animpanelleft.emotion);
trace(temppanelleft.panel_left.animpanelleft.emotion.emotioninfo.text);

Выходит ошибка: TypeError: Error #1010: Термин не определен и не имеет свойств.
at _fla::MainTimeline/frame30()

Как это всё устроено:

temppanelleft - это MovieClip созданный динамическим образом так:
Код AS3:

var temppanelleft:MovieClip = new panel_left();

и выведенный на сцену.

panel_left - это класс Ролика который лежит в библиотеке.
animpanelleft - так же класс ролика в библиотеке, но он вставлен в panel_left
emotion - так же класс ролика в библиотеке, но он вставлен в animpanelleft

emotioninfo - это имя динамического текстового поле которое находится в ролике emotion и в него нужно вывести данные переменной info, которая находится в главном коде.

Я уже 2 дня с этим вожусь и совершенно мозг отказывается понимать как это сделать что бы работало (

Добавлено через 2 часа 37 минут
Разобрался, во всём в правду говорится утро вечера мудренее. Спасибо Isfet

tattori 12.08.2015 12:18

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

Добавлено через 1 минуту
пипец как все закручено)))

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

Код AS3:

emotion.emotioninfo.text = info;

путь будет куда короче и менее запутанней


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

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