Невозможно создать второй уровень во flash - PullRequest
0 голосов
/ 05 апреля 2011

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

вот код, который я сделал до сих пор.

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

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++;
       }

}

если вы не можете помочь мне напрямую, можете ли вы указать мне верное направление или отправить мне ссылку на веб-страницу, которая поможет мне немного лучше понять ActionScript.

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Просто создайте переменную, чтобы отслеживать, сколько осталось врагов. Каждый раз, когда вы добавляете врага на сцену, увеличивайте переменную. Каждый раз, когда враг уничтожен, уменьшайте переменную. Затем в функции корабля enterFrame просто проверьте эту переменную.

Я согласен с переходом на AS3, гораздо лучше для структурирования кода. Когда я посмотрел на ваш код, мне потребовалась минута, чтобы понять, что это AS2. Я помню, что все разные функции доступны при нажатии на разные объекты на сцене, и это заставляет меня дрожать.

0 голосов
/ 05 апреля 2011

Вы можете создать массив, содержащий уничтоженных врагов

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
  • Делайте все возможное, чтобы все было динамично, например, динамическое количество врагов.
  • Не прислушивайтесь к нажатию клавиш в энтерфрейме, для этого есть специальное событие, используйте его;)
  • Не пишите функции внутри других функций, вы можете назвать их и отделить все.
  • Ваша математика кажется хорошей, и вы пишите вещи аккуратно, если вы хотите сделать шаг вперед, взгляните на объектно-ориентированное программирование.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...