Форум Flasher.ru

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

mexoboy 30.12.2009 13:58

Обращение к символу из класса
 
Господа, возникла очередная трудность с восприятием ООП AS3. Не совсем понятно, как можно обратится из класса к символу и применить к нему какие-либо действия. В хелпе прочитал, что для того, чтобы изменять данные - класс должен быть динамическим и что должен наследовать один из классов Sprite или MovieClip. Итак, пытаюсь...

Код AS3:

package lib
{
        import flash.display.Sprite;
 
        dynamic public class myTest extends Sprite
        {
                function myTest (Name:String, type:String):bool
                {
trace("construct run");                       
trace(this[Name].text);
                }
        }
}

При вызове из первого фрейма:
Код AS3:

import lib.myTest;
var a:myTest = myTest("inp", "phone");

Вывод ошибку "1120: Access of undefined property inp." Что я делаю не так =(? Где вообще можно поглядеть информацию о структуре документа flash и о области видимости классов/функций/символов?

P.s. И еще, почему нельзя создавать экземпляр класс mainclass (который грузится самым первым). Спасибо.

alatar 30.12.2009 15:39

У вас нет объекта, свойства или метода inp. Учитывая что вы пытаетесь вызвать метод или свойство text у объекта по ссылке inp, вы получаете ошибку. Если вы пытались трейсить строку "inp", надо было написать:
Код AS3:

trace(Name);

У класса String нет свойства или метода text.

wvxvw 30.12.2009 15:50

Код AS3:

package lib
{
        import flash.display.Sprite;
 
        public dynamic class MyTest extends Sprite
        {
                function MyTest(name:String, type:String)
                {
                        super();
                        trace("construct run");                       
                        trace(this[name].text);
                }
        }
}

Вот так для начала должен был выглядеть ваш класс.
Непонятно несколько вещей:
- зачем делать его динамическим.
- что вы ожидаете увидеть во втором трейсе - переменной по имени inp в этом классес просто нет.

mexoboy 30.12.2009 16:05

Пардон, что не описал ситуацию подробнее... В root на первом кадре имеется input с instance name = inp. По действию, определенному из mainclass передается имя инпута и его тип в класс MyTest. Все что мне нужно, получить возможность прочесть и перезаписать значения инпут поля с именем inp.

Динамический, т.к. в моем классе помимо этого будут иметься настройки - а в данном случае я так понимаю необходимо как раз приписку dynamic делать - поправьте, если это не так.

Psycho Tiger 30.12.2009 19:44

dynamic даёт вам право объявлять переменные, без объявления их явно.

Шурик_2 21.10.2012 04:35

Вот код, который объявляет слушателей клавиатуры и двигает movieclip mcClip
Bally.as
Код AS3:

package com.person
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.ui.Keyboard;
        import flash.display.Stage;
 
        public class Bally extends MovieClip
        {
 
                public function Bally()
                {
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, up);
                        stage.addEventListener(KeyboardEvent.KEY_UP, cooling);
                        addEventListener(Event.ENTER_FRAME, onEF);
                        var upObject:Boolean;
 
 
                        function up(e:KeyboardEvent)
                        {
                                if (e.keyCode == Keyboard.UP)
                                {
                                        upObject = true;
                                }
                        }
 
                        function cooling(e:KeyboardEvent)
                        {
                                if (e.keyCode == Keyboard.UP)
                                {
                                        upObject = false;
                                }
                        }
                        function onEF(e:Event)
                        {
                                if (upObject)
                                {
                                        this.y -=  20;
                                        trace("up!");
                                }
                                else
                                {
                                        this.y -=  20;
                                        trace("down");
                                }
                        }
 
                }
 
        }
}

MovieClip экспортирован в AS:
http://cs307706.userapi.com/v3077066...uRKr_MghMg.jpg
В библиотеке выглядит так:
http://cs307706.userapi.com/v3077066...8CsZ5K1VqM.jpg
Добавлен на рабочий стол:
http://cs307706.userapi.com/v3077066...-2zPyRUYSU.jpg
Трейсы в аутпате отражаются, а мувик с места не двигается. Что я не учёл? Почему this не передаёт параметр y мувику?

Isfet 21.10.2012 07:04

в поле класс надо писать com.person.Bally
базовый класс оставляем пустой
нэйм Bally

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

Добавлен на рабочий стол:
этого делать не надо,
если вы переносите мувиклип на сцену из библиотеки, вы таким образом создаете экземпляр класса Bally, но обращаться к нему не можете, так как
не задали Instance name.
Экземпляр нужно создавать так:
Код AS3:

var bally:Bally = new Bally();


Шурик_2 21.10.2012 13:56

По вашему что-то не получается.
В этом видео у него всё получилось. Просмотреть
Он нарисовал прямоугольник, сделал его символом, импортировал его в actionscript. В качестве базового класса указал свой класс. Мувик вёл себя как прописано было в классе (this.scaleX при наведении курсора).


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

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