Flash,AS3:动态MovieClip不会显示是否将它们链接到as3自定义类

时间:2015-06-23 01:27:03

标签: actionscript-3 flash

我正在写一个小小的Flash游戏,我遇到了将MovieClip添加到舞台上的问题。

我有函数createBricks(),它将MovieClip添加到stage。如果我这样做:

public function createBricks():void
    {
        for (var i:int = 0; i < amountOfBricks; i++)
        {
            var brick:MovieClip = new brick2();
            brick.x = i * brick.width + 10;
            brick.y = 6;
            addChild(brick);
        }
    } 

一切都很好,我可以在舞台上看到砖头。但问题是我需要在Brick类中有一些逻辑。

所以,如果我这样做:

public function createBricks():void
    {
        for (var i:int = 0; i < amountOfBricks; i++)
        {
            var brick:MovieClip = new Brick(this);
            brick.x = i * brick.width + 10;
            brick.y = 6;
            addChild(brick);
        }
    }

我无法在舞台上看到MovieClips。 任何帮助表示赞赏。

类砖代码:

package  
{
import flash.display.MovieClip;
import flash.events.Event;
import Arkanoid;

public class Brick extends MovieClip
{
    private var mParent:MovieClip;

    public function Brick(parent:Arkanoid) 
    {
        this.mParent = parent;
        super();
        addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    }

    private function enterFrameHandler(event:Event):void
    {
        if (this.hitTestObject(mParent.view.ball))
        {
            mParent.ballYSpeed *= -1;
            mParent.removeChild(this);
            removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
    }

}

}

游戏类:

    package  
    {
    import flash.display.MovieClip;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.MouseEvent
    import flash.events.Event;
    import Brick;

    public class Arkanoid extends MovieClip
    {
        private var mView:MovieClip;
        private var paddle:MovieClip;
        private var ball:MovieClip;
        private var amountOfBricks:int = 6;
        private var ballXSpeed:int = 10;
        private var ballYSpeed:int = 10;

        public function Arkanoid() 
        { 
            mView = new GameView();
            paddle = mView.paddle;
            ball = mView.ball;
            super();
        }

        public function start():void
        {
            addListeners();
            paddle.x = 100;
            createBricks();
            addChild(mView);
        }

        public function addListeners():void
        {
            mView.addEventListener(MouseEvent.MOUSE_MOVE, paddle_mouseMoveHandler);
            mView.addEventListener(Event.ENTER_FRAME, ball_enterFrameHandler);
        }

        private function paddle_mouseMoveHandler(event:MouseEvent):void
        {
            paddle.x = mouseX - paddle.width / 2;

            if (mouseX < paddle.width / 2)
            {
                paddle.x = 0;
            }

            if (mouseX > mView.width - paddle.width / 2)
            {
                paddle.x = mView.width - paddle.width;
            }
        }

        private function ball_enterFrameHandler(event:Event):void
        {
            ball.x += ballXSpeed;
            ball.y += ballYSpeed;

            if (ball.x >= mView.width - ball.width)
            {
                ballXSpeed *= -1;
            }

            if (ball.x <= 0)
            {
                ballXSpeed *= -1;
            }

            if (ball.y >= mView.height - ball.height)
            {
                ballYSpeed *= -1;
            }

            if (ball.y <= 0)
            {
                ballYSpeed *= -1;
            }

            if (ball.hitTestObject(paddle))
            {
                calculateBallAngle();
            }
        }

        private function calculateBallAngle():void
        {
            var ballPosition:Number = ball.x - paddle.x;
            var hitPercent:Number = (ballPosition / (paddle.width - ball.width)) - .5;
            ballXSpeed = hitPercent * 10;
            ballYSpeed = - 1;
        }

        public function createBricks():void
        {
            for (var i:int = 0; i < amountOfBricks; i++)
            {
                //var brick:MovieClip = new brick2();
                var brick:MovieClip = new Brick(this);
                brick.x = i * brick.width + 10;
                brick.y = 6;
                addChild(brick);
            }
        }

        public function get view():MovieClip
        {
            return mView;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

<强> 1 |创建名为Brick的类

class Brick extends MovieClip {
    var ground;
    public function Brick(_ground){
         ground = _ground;

         var brickSample:MovieClip = new brick2();
         addChild(brickSample);
    }
}

<强> 2 |现在,您可以按照自己的意愿创建动画片段

public function createBricks():void
{
    for (var i:int = 0; i < amountOfBricks; i++)
    {
       var brick:MovieClip = new Brick(this);
       brick.x = i * brick.width + 10;
       brick.y = 6
       addChild(brick);
    }
}

希望有所帮助