2014-10-20 7 views
0

В настоящее время я работаю над флеш-игрой и довольно новичок в AS 3 или flash. Вам нужно знать, как реализовать один из основных элементов моей игры.Обнаружение столкновений - Как?

Идея 2-мя игровыми играми в стиле змеиной игры, только игроки не пытаются убить друг друга, но попытайтесь достичь своего противника.

1 из ключевых частей игры будет сеткой, которая создается на сцене, где любой игрок может использовать «Создать стены», проходя через точки на сетке. Я не знаю, как это реализовать. В настоящее время у меня есть основы, где есть 2 игрока со стартовым местом, и если кто-то достигает зоны запуска другого, они набирают очки.

мне нужно несколько советов в том, как идти о реализации этой функции:

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

Должен ли я создавать каждую точку в отдельности или создать сетку с простой функцией:

//function to create grids on the map 
    public function createGrid() 
    { 
     var rows:int = 6; 
     var cols:int = 11; 
     for (var py:int = 0; py < rows; py++) { 
      for (var px:int = 0; px < cols; px++) { 
       this.grid = new griDot(player1,player2, this); 
       grid.x = 50 + grid.width + 100 * px +10; 
       grid.y = 50 + grid.height +100 * py + 10; 
       this.addChild(grid); 
       } 
     } 
    } 

и они обнаруживаются с помощью этой функции (не смейтесь я довольно нуб):

public function checkDotCollision(player) 
    { 

     if(player1.hitTestObject(grid) == true) 
     { 
      trace("player dot collision detected"); 
     } 
     if(player2.hitTestObject(grid) == true) 
     { 
      trace("player dot collision detected"); 
     } 
    } 

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

ответ

0

Я не собираюсь предоставлять вам код, просто с идеей.

В вашем классе Player (если у вас его нет, вы можете избежать динамических свойств мувиклипа, но это не очень чисто), добавьте lastTouchedGriDot типа griDot.

В checkDotCollision, проверьте для каждой плитки. Вы не можете сделать это в данный момент; похоже, что вам нужно будет хранить коллекцию для . Так что измените createGrid(), чтобы сохранить созданные объекты в виде коллекции. Затем мы можем проверить каждую плиту. Так и сделайте. Если вы нашли укол, сделайте следующее:

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

Это должно обеспечить надежный старт. Вам придется добавить столкновение с стенами и проверить, нет ли уже стены.

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