невозможно получить доступ к свойствам MovieClip во flashDevelop - PullRequest
0 голосов
/ 12 февраля 2010

Я знаю, что я что-то не так делаю. В моем контроле у ​​меня есть события нажатия клавиш, которые контролируют моего героя. На данный момент я пытаюсь повернуть своего героя, но он отказывается поворачиваться. Ниже мой класс героя, мой контрольный класс и класс игрового объекта. почти все классы ассоциируются с классом элементов управления.

package com.Objects 
{
    import com.Objects.GameObject;
    /**
     * ...
     * @author Anthony Gordon
     */

     [Embed(source='../../../bin/Assets.swf', symbol='OuterRim')]
    public class Hero extends GameObject
    {

        public function Hero() 
        {

        }

    }

}

Вот мой класс Controls. В этом классе я пытаюсь повернуть своего героя, но он этого не делает. Событие keydown работает, потому что я его отслеживаю.

package com.Objects 
{
    import com.Objects.Hero;
    import flash.events.*;
    import flash.display.MovieClip;
    /**
     * ...
     * @author Anthony Gordon
     */
    public class Controls extends GameObject
    {
        private var aKeyPress:Array;
        public var ship:Hero;

        public function Controls(ship:Hero) 
        {
            this.ship = ship;
            IsDisplay = false;
            aKeyPress = new Array();
            engine.sr.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener);
            engine.sr.addEventListener(KeyboardEvent.KEY_UP,keyUpListener);
        }

        private function keyDownListener(e:KeyboardEvent):void {
            //trace("down e.keyCode=" + e.keyCode);         
            aKeyPress[e.keyCode] = true;
            trace(e.keyCode);
        }

        private function keyUpListener(e:KeyboardEvent):void {
            //trace("up e.keyCode=" + e.keyCode);
            aKeyPress[e.keyCode]=false;
        }

        override public function UpdateObject():void
        {
            Update();
        }

        private function Update():void
        {
            if (aKeyPress[37])//Key press left
                ship.rotation += 3,trace(ship.rotation ); ///DOESNT ROtate      
        }//End Controls

    }

}

Вот класс GameObject

package com.Objects 
{
    import com.Objects.Engine;
    import com.Objects.IGameObject;
    import flash.display.MovieClip;
    /**
     * ...
     * @author Anthony Gordon
     */
    public class GameObject extends MovieClip implements IGameObject
    {
        private var isdisplay:Boolean = true;
        private var garbage:Boolean;
        public static var engine:Engine;
        public var layer:Number = 0;

        public function GameObject() 
        {

        }

        public function UpdateObject():void
        {

        }
        public function GarbageCollection():void
        {

        }
        public function set Garbage(garb:Boolean):void
        {
            garbage = garb;
        }
        public function get Garbage():Boolean
        {
            return garbage
        }
        public function get IsDisplay():Boolean
        {
            return isdisplay;
        }
        public function set IsDisplay(display:Boolean):void
        {
            isdisplay = display;
        }

        public function set Layer(l:Number):void
        {
            layer = l;
        }
        public function get Layer():Number
        {
            return layer
        }

    }

}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2010

Попробуйте прослушать ваш KeyboardEvent на stage вместо engine.sr (не уверен, что это такое)

Если вы поместите их на что-либо, кроме сцены, вам нужно будет сначала щелкнуть эту конкретную вещь, чтобы выделить ее для работы событий.

Также строка:

 ship.rotation += 3,trace(ship.rotation );

в вашем Control классе выглядит немного испорченным.

0 голосов
/ 12 февраля 2010

Похоже, ваши keyUpListener и keyDownListener методы не вызывают функцию UpdateObject.

...