2015-09-09 1 views
1

Donc im im travailler sur un jeu de tuiles pour l'école et pas très familier avec la programmation alors excuses si la réponse est évidente.as3 Jeu de tuiles - Si le personnage franchit la tuile, faites quelque chose

L'utilisation d'un ive tableau créé une carte avec différents tiles- ce que je veux est ainsi que lorsque le personnage marche à travers un certain tableau, alors il arrive quelque chose - par exemple: redémarrer le jeu

Mon code est dans un .as fichier:

package { 
 

 
    import flash.display.MovieClip; 
 
    import flash.events.*; 
 

 
    public class main2 extends MovieClip { 
 
     public function main2() { 
 
      // Create map 
 

 
      var mapWidth = 10; 
 
      var mapHeight = 10; 
 
      var tileSide = 32; 
 
      var totalTiles = mapWidth * mapHeight; 
 
      var myMap: Array = [ 
 
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
 
       [1, 0, 0, 0, 2, 0, 0, 0, 0, 1], 
 
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], 
 
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 
       [1, 0, 0, 0, 0, 3, 0, 0, 0, 1], 
 
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], 
 
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], 
 
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], 
 
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], 
 
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
 
      ]; 
 

 
      for (var i: int = 0; i < mapHeight; i++) { 
 
       for (var u: int = 0; u < mapWidth; u++) { 
 
        var cell: MovieClip = new tile(); 
 
        cell.gotoAndStop(myMap[i][u] + 1); 
 
        cell.x = tileSide * u 
 
        cell.y = tileSide * i 
 
        addChild(cell); 
 
       } 
 
      } 
 
\t \t \t 
 
\t \t \t // Hero management 
 

 
      var heroSpawnX = 1 
 
      var heroSpawnY = 1 
 

 
      var character: hero = new hero(); 
 
      addChild(character) 
 
      character.x = heroSpawnX * tileSide 
 
      character.y = heroSpawnY * tileSide 
 

 
      var heroX = heroSpawnX 
 
      var heroY = heroSpawnY \t \t \t 
 
\t \t \t 
 

 
      // Basic movement 
 

 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, movement); 
 

 
      function movement(event: KeyboardEvent): void { 
 
       if (event.keyCode == 40 && myMap[heroY + 1][heroX] != 1) { 
 
        character.gfx.rotation = 0 
 
        character.y += tileSide 
 
        heroY++ //Down 
 
       } 
 
       if (event.keyCode == 38 && myMap[heroY - 1][heroX] != 1) { 
 
        character.gfx.rotation = 180 
 
        character.y -= tileSide 
 
        heroY-- //Up 
 
       } 
 
       if (event.keyCode == 39 && myMap[heroY][heroX + 1] != 1) { 
 
        character.gfx.rotation = 270 
 
        character.x += tileSide 
 
        heroX++ //Right 
 
       } 
 
       if (event.keyCode == 37 && myMap[heroY][heroX - 1] != 1) { 
 
        character.gfx.rotation = 90 
 
        character.x -= tileSide 
 
        heroX-- //Left 
 
       } 
 
      } //movement function 
 
\t \t \t 
 
     } // behind this line 
 
    } 
 

 
}

dans mon tableau il y a un '2' dans la deuxième rangée. Je veux que mon personnage traverse cette tuile et 'meurs', mais recommence à partir de sa position de spawn ([1] [1]). Je suppose qu'un écouteur d'événement serait nécessaire, mais après avoir lu certains codes, je n'arrive toujours pas à le faire fonctionner.

Merci à l'avance pour toute aide

+0

Si vous acceptez cette réponse et ma réponse précédente, veuillez les accepter en cliquant sur la coche en haut à gauche de mon message. – HITMAN

Répondre

0

ajouter ces pièces à votre code:

cette fonction retourne le nombre de la tuile spécifiée:

function getNumberAt(tileX:uint,tileY:uint){ 
    var value:uint=myMap[tileX][tyleY]; 
    return value 
} 

Notez que vos indices pour cette fonction devrait commencer à partir de zéro (si vous voulez tuile à l'horizontale et la seconde verticale, vous devriez getNumberAt(0,1)

maintenant remplacer votre fonction n:

function movement(event: KeyboardEvent): void { 
      if (event.keyCode == 40 && myMap[heroY + 1][heroX] != 1) { 
       character.gfx.rotation = 0 
       character.y += tileSide 
       heroY++ //Down 
      } 
      if (event.keyCode == 38 && myMap[heroY - 1][heroX] != 1) { 
       character.gfx.rotation = 180 
       character.y -= tileSide 
       heroY-- //Up 
      } 
      if (event.keyCode == 39 && myMap[heroY][heroX + 1] != 1) { 
       character.gfx.rotation = 270 
       character.x += tileSide 
       heroX++ //Right 
      } 
      if (event.keyCode == 37 && myMap[heroY][heroX - 1] != 1) { 
       character.gfx.rotation = 90 
       character.x -= tileSide 
       heroX-- //Left 
      } 
      trace(getNumberAt(heroX,heroY))//test getNumberAt function 


      if(getNumberAt(heroX,heroY)==2){ 
       //type your code for death here 
      } 

     } 

Je pense que cela aide!

+0

désolé pour la question précédente. Je n'arrive pas à faire fonctionner ceci, j'ai copié le mot de code pour le mot moins la faute de frappe (je pense que c'était une faute de frappe de toute façon, dans la deuxième ligne). J'ai écrit comme trace ("bonjour") dans l'instruction if juste pour voir la sortie, mais rien. Je suis assez certain que je n'ai tout simplement pas le mettre en droit. Avez-vous un aperçu? – elzzup

+0

Dans ce cas, vérifiez le code! utilisez trace pour le savoir, le problème vient de 'getNumber' ou de quelque part ailleurs. J'ai édité le code. – HITMAN

+0

merci pour cela je l'ai compris en utilisant une autre façon qui était très similaire à votre façon moins la fonction. J'apprécie l'aide ahaha je n'ai aucun doute que votre réponse aurait fonctionné si elle n'était pas pour mon manque de compétence :) – elzzup