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

Castro 25.10.2010 20:06

Как передать координаты, если мы обращаемся к классу, а не объекту
 
Есть такая задача.

Создал мувик - внутри 2 объекта: шейп и динамический текст-инпут (city_name).

нужно передавать мувику координаты x и y,а также название города, ну и скрипт должен положить этот мувик на stage.

Как я понимаю, нужно создать класс, слинковать мувик с классом, а потом на основной сцене уже вызвать инстанс класса и передать ему параметры?
Не могу понять как передать координаты, если мы обращаемся к классу, а не объекту


Код AS3:

city = new City();
city.x = 20;
city.y = 20;
city.city_label = 'Kiev';
addChild(city);

не матерится но и не работает.

И как сделать, чтобы я мог обратьсся изнутри класса к city_label и назначитть туда значение? Что-то типа

Код AS3:

city = new City();
city.setCityName('KIEV');
city.x = 20;
city.y = 20;
addChild(city);


cleptoman 25.10.2010 20:12

а где вы собсно к классу обращаетесь?
для определения полей и методов класса юзают static

КорДум 25.10.2010 20:13

Для начала, собирайте все программно.
Затем делаем класс, расширяем его от спрайта. Как я понял, это City будет. Внутри создаем шейп и что у вас там, затем создаем сеттеры/геттеры/просто методы (выбрать по вкусу). И в главном классе программы пишем то, что вы написали в своем посте, во второй его части.
Судя по всему, сейчас пойдут вопросы про классы и как писать не в кадрах...

Castro 26.10.2010 12:46

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

Где-то лажа, но не пойму где

Код AS3:

package{
        import flash.display.MovieClip;
        public class CityNew extends MovieClip{
                private var x_coord:Number;
                private var y_coord:Number;
 
                public function CityNew(){
                        this.x_coord = 100;
                        this.y_coord = 100;
                        init();
                }
                public function  set Xc(x_c:Number):void{
                        this.x_coord = x_c;
                }
                public function get Xc():Number{
                        return x_coord;
                }
                public function set Yc(y_c:Number):void{
                        this.y_coord = y_c;
                }
                public function get Yc():Number{
                        return y_coord;
                }
                public function init():void{
                        this.x = x_coord;
                        this.y = y_coord;
 
                }
        }
}

ну и

Код AS3:

var city:CityNew = new CityNew();
addChild(city);

Вот так работает, но нельзя передать x и y, матерится

1061: Call to a possibly undefined method X_c through a reference with static type CityNew.

Тогда сделал Xc и Yc статическими, но теперь оно не может добраться до x_coord и y_coord.
Или же подразумевается что в при линковании, все методы класса должны быть статическими?

Где я неправ?

КорДум 26.10.2010 13:06

Код AS3:

for (var i:uint = 0; i < 10; i++) {
arrCity[i] = new City();
arrCity[i].x = newX;
arrCity[i].y = newY;
arrCity.textField.text = String(i);
}

Ну а в классе City публичное свойство textField, являющееся ссылкой на текстовое поле, созданное в классе City. Писал на зверьке, использовал каленку, так что без типизации и прочего.

cleptoman 26.10.2010 13:11

если вы обращаетесь к полям класса, то статик, если к его экзепляру, то без статик

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

Код AS3:

var city:CityNew = new CityNew();
city.x= 900;

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


Код AS3:

package{
        import flash.display.MovieClip;
        public class CityNew extends MovieClip{
 
                public function CityNew(){
                        super();
                        super.x = 100;
                        super.y = 100;
                }
        }
}

upd: пардон, увидел, что создаете, но не понятно как вы обращаетесь к свойствам

Castro 26.10.2010 13:22

Спасибо

Добавлено через 34 минуты
А из самого класса как обратится к текстовому полю в мувику (textFld)? Например мне нужно это для инициализации начальны данных, типа дефолтная стрка

Добавлено через 1 час 0 минут
Общая структура - файлу 1.fla назначен главный класс Main, в котором вызывается

Код AS3:

var city:City = new City();
 city.x = 80;
city.y = 100
city.txtFld.text = 'Tarara';
addChild(city);

ну и сам

Код AS3:

package{
        import flash.display.MovieClip;
        import flash.text.TextField;
        public class City extends MovieClip{
                //public var txtFld:String;
                public function City(){
                        super();
                        super.x = 300;
                        super.y = 300;
                }
 
        }
}

В мувике есть текстовое поле txtFld, куда и надо передавать изнутри класса City дефолтные данные и с класса Main уже рабочие.
Валится на 1119: Access of possibly undefined property txtFld through a reference with static type City.

Оно рабочее вообще, если взять этот же класс и в отдельном fla файле вызвать тектовое поле, всё будет работать

Добавлено через 4 часа 19 минут
Вообще без вариантов?

КорДум 26.10.2010 18:23

Код AS3:

package{
        import flash.display.MovieClip;
        import flash.text.TextField;
 
        public class City extends MovieClip{
                public var txtFld:TextField;
                private var defaultString:String = "bla-bla";
 
                public function City(){
                        this.x = 300;
                        this.y = 300;
                        this.addChild(txtFld);
                        txtFld.text = defaultString;
                }
 
        }
}


Castro 26.10.2010 19:11

Был ответ
Цитата:

TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChild()
at City()

КорДум 26.10.2010 19:33

Потому что я не подписался на событие ADD_TO_STAGE, ибо я привел пример. Подпишитесь и будет вам счастье.


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

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