2015-09-24 2 views
1

Я хочу создать игру 2d, в которой автомобиль перемещается по краю холма неправильной формы. Я хочу использовать базовый as3 (без физического движка, такого как Box2d или Nape). С большим количеством исследований я нашел this вещь, которая именно то, что я хочу, но есть только логика и исходный код. Может ли кто-нибудь помочь мне с частью кода, который может сделать это в as3? Также предложите, если есть лучшая альтернатива для получения желаемого результата.as3 обнаружение склона для неравномерных ландшафтов

ответ

0

Я сам не очень хорошо разбираюсь в таком коде, и я не могу сделать комментарий, потому что у меня короткая 7 репутация: '(но в статье, которую вы связали, есть другая ссылка на программу Worms-esque с кодом, который может вам помочь. Here's ссылка на этот сайт, и я также предоставлю соответствующий код, который вы можете увидеть, если он вам полезен.

Итак, у этой программы есть слушатель, если любая клавиша опущена и устанавливает логическое значение true, если это ключ, используемый вашей программой (перемещение, пространство для прыжка или что-то еще), что слушатель выглядит так:

public function key_down(e:KeyboardEvent) { 
     if (e.keyCode==37) { 
      left_key=true; 
     } 
     if (e.keyCode==39) { 
      right_key=true; 
     } 
     if (e.keyCode==32) { 
      space_key=true; 
     } 
    } 

И тогда она имеет последующий прослушиватель при отпускании клавиши

public function key_up(e:KeyboardEvent) { 
     if (e.keyCode==37) { 
      left_key=false; 
     } 
     if (e.keyCode==39) { 
      right_key=false; 
     } 
     if (e.keyCode==32) { 
      space_key=false; 
     } 
    } 

И, наконец, этап имеет ENTER_FRAME слушателя для перемещения персонажа, который запускает эту функцию

public function move_character(e:Event) { 
     //If left key is pressed, we'll move the character to the left 
     if (left_key) { 
      for (i=0; i<3; i++) {//Do you remember when we made the character fall? We had to move the character pixel by pixel 
       if (! terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-6,character.y-10,1,17))) { 
        character.x--; /*If the character doesn't hit the ground, we can move left. However, 
            the character may be sunk under the ground. We have to lift it*/ 
        while (terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-5,character.y+9,10,1))) { 
         character.y--; 
        } 
       } 
      } 
     } 
     if (right_key) {//Well, that's the same for the right key 
      for (i=0; i<3; i++) { 
       if (! terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x+5,character.y-10,1,17))) { 
        character.x++; 
        while (terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-5,character.y+9,10,1))) { 
         character.y--; 
        } 
       } 
      } 
     } 
     if (space_key&&! jumping) {//That's easy: if he isn't jumping and you press space, his speed will be negative and he'll jump 
      character_speed=-10; 
      jumping=true;//Now the character can't jump again 
     } 

     character_speed++;//Every frame we will increase character's speed 
     if (character_speed>0) { 
      //If the speed is positive, we will check a collision between the terrain and the rectangle below the character 
      for (i=0; i<character_speed; i++) {//We check the collision pixel by pixel... 
       if (! terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-5,character.y+9,10,1))) { 
        character.y++;//If there isn't a collision, the character will fall 
       } else { 
        jumping=false;//If there's a collision with the ground, the character isn't jumping 
        character_speed=0;//The speed is 0, because the character hit the ground 
       } 
      } 
     } else { 
      for (i=0; i<Math.abs(character_speed); i++) {//If the speed is negative, the for loop won't work. We have to use Math.abs(). 
      //Now we will check the collision between the terrain and the rectangle above the character 
       if (! terrain_bmpd.hitTest(new Point(terrain_bmp.x,terrain_bmp.y),0x01,new Rectangle(character.x-5,character.y-10,10,1))) { 
        character.y--; 
       } else { 
        character_speed=0;//Well, that's the same: the character hit the ground 
       } 
      } 
     } 
    } 

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

Смежные вопросы