Ссылка MovieClip После того, как он добавлен в сцену, как ребенок - PullRequest
1 голос
/ 23 ноября 2011

В настоящее время у меня возникают проблемы со ссылкой на потомка MovieClip, которого я добавляю к Stage из класса Document. Обычно, когда дочерний элемент MovieClip добавляется к Stage из класса Document, я хочу, чтобы определенный MovieClip уже на Stage ссылался на него, как только он на Stage.

Кроме того, , если это возможно , я не хочу, чтобы MovieClip, ссылающийся на добавляемого потомка к Stage, имел параметры, связывающие его с классом Document, потому что я планирую о вложении этого MovieClip в другое MovieClip позже в будущем.

Вот код класса MovieClip, который ссылается на дочерний элемент после его добавления в Stage:

package com.gameEngine.assetHolders
{
    import com.gameEngine.documentClass.*;
    import com.gameEngine.assetHolders.*;
    import com.gameEngine.assetHolders.Levels.*;
    import flash.display.*;
    import flash.events.*;

    public class FallingPlatform extends MovieClip
    {
        public var _document:Document;
        // Trying to reference "_player"
        public var _player:Player;
        public var fallState:Boolean;
        public var platformYSpeed:Number = 0;
        public var platformGravityPower:Number = 0.75;

        public function FallingPlatform()
        {
            this.addEventListener(Event.ADDED_TO_STAGE, initFallingPlatform);
            // constructor code
        }
        public function initFallingPlatform(event:Event)
        {
            this.addEventListener(Event.ENTER_FRAME, dynamicFall);
            this.addEventListener(Event.ENTER_FRAME, hitTest);
        }
        public function dynamicFall(event:Event)
        {
            if (this.fallState)
            {
                this.platformYSpeed += this.platformGravityPower;
                y += this.platformYSpeed;
            }
        }
        // Trying to reference "_player"
        public function hitTest(event:Event)
        {
            if (this.hitTestPoint(_player.x, _player.y + 1, true))
            {
                this.fallState = true;
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2011

Проигрыватель инициализируется в классе Document, верно?Поэтому для меня лучший вариант - либо передать ссылку на проигрыватель в конструктор вашего класса FallingPlatform, например,

 public function FallingPlatform (thePlayer:Player) {
      this._player = thePlayer
 }

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

 public function set player (thePlayer:Player):void {
       this._player = thePlayer
 }

Надеюсь, это поможет!

0 голосов
/ 23 ноября 2011

Если вы установите класс документа для FLA-файла, каждый мувиклип на сцене может быть доступен по имени его экземпляра - так же, как вы создадите переменную с ее именем.Более того, вы можете сделать что-то вроде этого:

Если вы поместите два мувиклипа на сцену, например, mc1 и mc2, вы можете добавить их как переменные в класс документа.

package{
    public class DocClass{

    public var mc1:MovieClip;
    public var mc2:MovieClip;

    [...]

    }
}

и затемВы можете получить доступ к этим мувиклипам из вашего класса с помощью подсказок кода из вашей IDE (flash или flashbuilder)

. Доступно и обратное: определите переменные в своем классе и затем получите доступ к ним во flash

!он работает лучше всего, когда ваш класс документа расширяет Sprite, я не проверял его на расширение из MovieClip, но он также должен работать

...