如何堆叠MovieClips - AS3

时间:2015-01-22 19:10:36

标签: actionscript-3 flash methods movieclip

我的问题如下:

我正在制作游戏,并且有一个阶段,书籍会下降 X轴(由于用户设备的方向为图片)和“小手”比拉动它检测到书籍hitTestObject,X轴和Y轴成为“小手”。

enter image description here

因为书籍保持堆放正确,我在舞台上使用了一个名为HEIGHT的变量,这本书落入小手中,这个变量TIME用书的高度更新,然后我将书放在X轴上用这个变量。

    private function loop(event:Event){

        var maozinha = palco.mao;

        if(this.hitTestObject(maozinha)){
            this.y = maozinha.y;
            this.x -= palco.altura;
            palco.velocidade = 10;
            palco.gravidade = 2;
            palco.altura += 47;
            palco.pontos += 20;
            isOnHand = true;
            removeEventListener(Event.ENTER_FRAME, loop);

        } else {
            palco.velocidade += palco.gravidade;
            x += palco.velocidade;
        }

        if(x >= 940){
            removeEventListener(Event.ENTER_FRAME, loop);
            palco.life = false;
            palco.removeChild(this);
        }   
      }
   }

我想知道的是,如果有一些方法让他们自动检测,即使他们触摸小手或他的兄弟,他们检测到它并停在极点,我需要保持不计算高度

enter image description here

在用作书籍的类模型下面....

package  {

    import flash.display.MovieClip;
    import flash.events.*;
    import flash.events.MouseEvent;
    import flash.ui.Mouse;
    import flash.display.Sprite;
    import flash.display.*;

    public class Lverde extends Sprite {
        //VARS
        private var palco:Object;
        private var isOnHand:Boolean = false;

        public function Lverde() {
            addEventListener(Event.ADDED_TO_STAGE, inicia);
        }

        private function inicia(event:Event){
            addEventListener(Event.ENTER_FRAME, loop);
            addEventListener(Event.ENTER_FRAME, gameOverThis);
            addEventListener(Event.ENTER_FRAME, bookOnHand);
            addEventListener(Event.ENTER_FRAME, touchBook);
            addEventListener(Event.ENTER_FRAME, vitoria);
            palco = MovieClip(root);
        }

        private function gameOverThis(event:Event){
            if(palco.life == false){
                removeEventListener(Event.ENTER_FRAME, gameOverThis);
                removeEventListener(Event.ENTER_FRAME, bookOnHand);
                removeEventListener(Event.ENTER_FRAME, touchBook);
                removeEventListener(Event.ENTER_FRAME, vitoria);
                palco.removeChild(this);
            }
        }

        private function vitoria(event:Event){
            if(palco.pontos >= 200){
                palco.vitoria = true;
                palco.removeChild(this);
                removeEventListener(Event.ENTER_FRAME, gameOverThis);
                removeEventListener(Event.ENTER_FRAME, bookOnHand);
                removeEventListener(Event.ENTER_FRAME, touchBook);
                removeEventListener(Event.ENTER_FRAME, vitoria);
            }
        }

        private function bookOnHand(event:Event) {
            if(isOnHand == true){
                var maozinha = palco.mao;
                y = maozinha.y;
            }
        }

        private function touchBook(event:Event){
            if(isOnHand == false){
                for(var i:int = 0; i < palco.getChildByName("lverde").numChildren-1; i++){
                    var lverde = palco.getChildByName("lverde").getChildAt(i);

                    if(hitTestObject(lverde) && isOnHand == false){
                        palco.velocidade = 10;
                        palco.gravidade = 2;
                        palco.altura += 47;
                        palco.pontos += 20;
                        isOnHand = true;
                        trace("Tocou o livro verde");
                        removeEventListener(Event.ENTER_FRAME, loop);
                        removeEventListener(Event.ENTER_FRAME, touchBook);
                    }
                }

                for(var i:int = 0; i < palco.getChildByName("lvermelho").numChildren-1; i++){
                    var lvermelho = palco.getChildByName("lvermelho").getChildAt(i);

                    if(hitTestObject(lvermelho) && isOnHand == false){
                        palco.velocidade = 10;
                        palco.gravidade = 2;
                        palco.altura += 68;
                        palco.pontos += 20;
                        isOnHand = true;
                        removeEventListener(Event.ENTER_FRAME, loop);
                        removeEventListener(Event.ENTER_FRAME, touchBook);
                    }
                }

                for(var i:int = 0; i < palco.getChildByName("lmarrom").numChildren-1; i++){
                    var lmarrom = palco.getChildByName("lmarrom").getChildAt(i);

                    if(hitTestObject(lmarrom) && isOnHand == false){
                        palco.velocidade = 10;
                        palco.gravidade = 2;
                        palco.altura += 40;
                        palco.pontos += 20;
                        isOnHand = true;
                        removeEventListener(Event.ENTER_FRAME, loop);
                        removeEventListener(Event.ENTER_FRAME, touchBook);
                    }
                }
            }
        }

        private function loop(event:Event){

            var maozinha = palco.mao;

            if(this.hitTestObject(maozinha)){
                this.y = maozinha.y;
                this.x -= palco.altura;
                palco.velocidade = 10;
                palco.gravidade = 2;
                palco.altura += 47;
                palco.pontos += 20;
                isOnHand = true;
                removeEventListener(Event.ENTER_FRAME, loop);

            } else {
                palco.velocidade += palco.gravidade;
                x += palco.velocidade;
            }

            if(x >= 940){
                removeEventListener(Event.ENTER_FRAME, loop);
                palco.life = false;
                palco.removeChild(this);
            }   
        }
    }
}

谢谢你。

1 个答案:

答案 0 :(得分:0)

我粗略地想到你想说的是什么(说实话,这是用非常糟糕的英语写的)。 所以你有书从左到右落下,你想要的是小手&#39;赶上他们。如果第一本书击中了手,它会停在那里并且卡在手上。 现在,在新书的基础上堆叠其他书籍的一种方法是简单地将新书作为手的子对象,因此,新书只是成为手的一部分。这样,相同的代码继续递归工作。