2014-10-20 76 views
0

我目前正在制作一款flash游戏,并且对于AS 3或flash来说相当新颖。需要一些关于如何实现我的游戏核心元素的建议。碰撞检测 - 如何?

这个想法是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

我不会为您提供代码,只是一个想法。

在你的播放器类(如果你没有一个,你可以逃脱动画属性的动画片段,但它不是很干净),添加lastTouchedGriDot类型griDot

checkDotCollision中,检查每个图块。你目前无法做到这一点;看起来你必须在某个地方维护一个集合griDot。因此,请改变createGrid()以将创建的对象存储在一组排序中。然后我们可以检查每个瓷砖。所以这样做。如果您发现一击,做到以下几点:

  • 如果没有最后一个接触的网格点,设置的最后一个触摸网格点到你现在碰到一个。
  • 如果上次触摸的网格点与您现在触摸的网格点相同,则不执行任何操作。
  • 如果上次触摸的网格点与您现在触摸的网格点不同,请检查它是否相邻。如果是这样,建一堵墙。如果没有,请将最后触摸的网格点设置为您正在触摸的网格点。

这应该为您提供一个坚实的开始。你必须添加墙壁碰撞并检查是否已经有墙壁。