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

Stalin45 12.01.2012 18:11

Как обратиться к экземпляру класса из другого класса?
 
Здравствуйте! Есть 2 файла - класса .as. И 1 скрепляющий .fla.
Собственно, вопрос: как прописать в коде 1 из классов обращение к экземпляру второго класса (данный экземпляр находится на stage файла .fla)?

Код AS3:

var mDx = stage.hero.x - this.x;
var mDy = stage.hero.y - this.y;

Название "hero" он не понимает (оно и понятно ).
Раньше вместо hero вычислял положение мыши (ведь, по сути, тоже объект на сцене), у неё есть зарезервированное имя, а вот к другому объекту как...

Jewelz 12.01.2012 18:24

если у вас персонаж действительно на сцену добавлен, то так
Код AS3:

stage.getChildByName("hero")


Stalin45 12.01.2012 18:35

Сделал так, как вы предложили:
Код AS3:

var mDx = stage.getChildByName("hero").x - this.x;
var mDy = stage.getChildByName("hero").y - this.y;

Выдает ошибку (не видит этот объект...):
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at characters::turret/movement()
at characters/game()
Идентичность названия сверил.

Stitch512 12.01.2012 21:15

Значит его там и нет. Вообще он врятли лежит на stage. getChildByName вызывать нужно не у stage, а у того класса куда добавляются "2 файла - класса .as" (скорее всего это и есть класс 1).

goodguy 12.01.2012 21:44

Если класс 1 является документ классом, то да, объект добавляется в экземпляр этого класса, а не на сцену

Stalin45 12.01.2012 23:01

Stitch512, так в том-то и дело, что я добавляю два классовых файла не к третьему классу, а на сцену файла .fla.
Следовательно, не получается создать код типа:
Код AS3:

public static var hero:robot = new TRobot();
addChild(hero);

Ведь я пишу это не в классе :(

goodguy, не совсем понял, что такое документ-класс.

HardCoder 12.01.2012 23:11

Класс 1
Код AS3:

public class Class1 {
  public var class2Obj:Class2;
  public function Class1(obj:Class2){
      class2Obj = obj.
      //теперь через переменную class2Obj мы можем обращаться к экземпляру второго класса
  }
}

Класс 2
Код AS3:

public class Class2 {
  public function Class2(){
 
  }
}

fla файл:
Код AS3:

var class2Ins:Class2 = new Class2();
var class1Ins:Class1 = new Class1(class2Ins);


Stalin45 12.01.2012 23:42

HardCoder, классный способ! Мне все ясно, но у меня уже голова идет кругом...
В fla записал следующие строки:
Код AS3:

 var hero:robot = new robot();
 var turret1:turret = new turret(hero);

В результате выдает ошибку:
1136: Incorrect number of arguments. Expected 0. Почему 0 ожидалось, если в конструкторе прописал 1 аргумент???

Код AS3:

        public class turret extends Sprite
        {
                public var target_:robot;
                internal var armour, health, energy, rotationSpeed:uint;
                internal var energyRegen:Number;
                public function turret(obj:robot)
                {
                        target_ = obj;
                        armour = 500;
                        health = 250;
                        energy = 40;
                        energyRegen = 0,1;
                        rotationSpeed = 2;
                }

И странно то, что если в fla попытаться создать экземпляр без аргументов, он все же пишет:
1203: No default constructor found in base class characters:turret.

HardCoder 12.01.2012 23:50

А что такое characters?

Stalin45 12.01.2012 23:55

2 файла as находятся в папке characters и, соответственно, в таком пакете.
Fla лежит в 1 директории с папкой characters.


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

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