无法在Flash中创建第二级

时间:2011-04-05 15:08:48

标签: flash actionscript animation

我在flash中制作了一个游戏,游戏的第一级也有效,但是在你完成关卡后,我不确定要测试的编码,看看所有的敌人,因为他们是电影剪辑,从闪光灯中卸载,所以它将移动到第二级。我知道有办法做到这一点,我只是不确切地知道如何做,也不知道在哪里寻求帮助。

这是我到目前为止所做的编码。

这是我编写的一个敌人角色的编码,他是一个电影剪辑,他们都有不同的价值观让事情变得有趣。

onClipEvent (enterFrame){
    if(_root.spaceship._y>_y) {_y +=5;}

    if(_root.spaceship._y<_y) {_y -=5;}

    if(_root.spaceship._x>_x) {_x +=5;}

    if(_root.spaceship._x<_x) {_x -=5;}
}

这是我在玩家身上的编码,恰好是宇宙飞船。

//Initialize Variable
onClipEvent(load) {
       var shipSpeed:Number = 20;
       var rotationSpeed:Number = 20;
       var missileNum:Number = 0;
       var missile:Array = new Array();
       var missleSpeed:Number = 30;
}



onClipEvent (enterFrame) {
       if(Key.isDown(Key.LEFT)) {
               _rotation -= rotationSpeed;
       }

       if(Key.isDown(Key.RIGHT)) {
               _rotation += rotationSpeed;
       }

       var radian:Number = (-1 * _rotation + 90) * Math.PI/180;

       if(Key.isDown(Key.UP)) {
               _x += shipSpeed * Math.cos(radian);
               _y -= shipSpeed * Math.sin(radian);
       }

       if(Key.isDown(Key.DOWN)) {
               _x -= shipSpeed * Math.cos(radian);
               _y += shipSpeed * Math.sin(radian);
       }

    //hit test
    if(this.hitTest(_root.enemy1))
        {
            //trace("spaceship")
            _root.spaceship.play(2);
        }


//Shoot missile in direction the ship is facing
       if(Key.isDown(Key.SPACE)) {
               missile[missileNum] =
               _root.attachMovie("missile","missile"+missileNum,_root.getNextHighestDepth(),{_x:_x,_y:_y,_rotation:_rotation});
               missile[missileNum].ySpeed = Math.sin(radian)*missleSpeed;
               missile[missileNum].xSpeed = Math.cos(radian)*missleSpeed;
               missile[missileNum].onEnterFrame = function() {
                       if(this.hitTest(_root.enemy)) {
                               _root.enemy.play (13);


               if(this.hitTest(_root.enemy1)) {
                       this.play()
                       _root.enemy1.play(13);

               }

               if(this.hitTest(_root.enemy2)) {
                       this.play()
                       _root.enemy2.play(13);

               }

               if(this.hitTest(_root.enemy3)) {
                       this.play()
                       _root.enemy3.play(13);

               }

               if(this.hitTest(_root.enemy4)) {
                       this.play()
                       _root.enemy4.play(13);

               }

               if(this.hitTest(_root.enemy5)) {
                       this.play()
                       _root.enemy5.play(13);

               }


// this.attachMovie("enemy", "enemy", 3 );
                       }
                       this._y -= this.ySpeed;
                       this._x += this.xSpeed;
                       trace("missile: " + missileNum);
                       if(0 > this._x || this._x > 1000000000 || 0 > this._y || this._y > 1000000000)
                               this.removeMovieClip();
               }
               missileNum++;
       }

}

如果你不能直接帮助我,你可以指出我正确的方向,或者给我一个链接到一个网页,这将有助于我更好地理解动作。

2 个答案:

答案 0 :(得分:1)

只需创建一个变量来跟踪剩下的敌人数量。每次向场景添加敌人时,请增加变量。每次敌人被摧毁时,减少变量。然后在船的enterFrame函数中检查该变量。

我同意转向AS3,更好地构建代码。我花了一分钟看着你的代码才意识到它是AS2。我记得通过单击舞台上的不同对象可以访问所有不同的功能,这让我感到不寒而栗。

答案 1 :(得分:0)

你可以创建一个包含被摧毁的敌人的数组

var deadEnemies:Array = [];

if(this.hitTest(_root.enemy5)) {
    this.play()
    _root.enemy5.play(13);
    if (deadEnemies.indexOf(_root.enemy5) == -1)
    {
        deadEnemies.push(_root.enemy5);
    }
 }

然后测试它

if (deadEnemies.length == 5)
{
    trace("level2");
}

此外,我认为这没有用,但我必须说出来:

  • 忘掉AS2
  • 尽你所能保持动态,例如动态数量的敌人。
  • 不要在enterframe中听按键,有专门的事件,请使用它;)
  • 不要在其他功能中编写功能,您可以命名并分离所有功能。
  • 你的数学似乎很好,你写的东西很整齐,如果你想超越一步,看看面向对象的编程。

干杯