1

我知道这里有非常相似的问题,但我还没有找到正确的细节。有帮助的肯定是对问题的解释,也许是一个基本示例,以后搜索的任何人都可以应用。(不是要求你为我写的,我只是觉得这些例子很有帮助)我不想让任何人不高兴并且有点担心在论坛上发帖......

我想知道基于从数组创建的图块创建屏幕的替代方法。我自己在尝试访问已放置在屏幕上的影片剪辑时遇到了问题,并且尝试跟踪以找到引用它们的方法没有奏效。

无论如何,拿一些基本的东西,比如一个数组,并将它连接到影片剪辑,然后如何在完成后访问影片剪辑本身。所以我一直在研究这个,并使用了许多不同的在线资源,所以我确信其中的很多内容看起来很熟悉,只是以一种更混乱的方式。

这需要数组来使movieclips出现(我确定这里至少有一部分是不必要的,而且我认为我在这里做错了,这使得它以后无法解决)所以这很有效,但感觉很笨重。

两者都来自同一个主类文件。

function makeWorld (anyMap, tileW, tileH) {                 
var worldWidth = anyMap[0].length;
var worldHeight = anyMap.length;
var MAP = this.addChild(new mapHolder());

    function tiler(MAP, i, j, tileW, tileH, tile) 
    {
    MAP.addChild(tile);
    tile.x = (j * tileW);
    tile.y = (i * tileH);                                               
    }                                               

for (var i = 0; i < worldWidth; ++i) {
  for (var j = 0; j < worldHeight; ++j) {
      var curTile:int = anyMap[i][j];
      if (curTile == 101) {
          var tile1 = new tileGround();
          tiler (MAP, i, j, tileW, tileH, tile1);

...

      else {
          var tile3 = new empty();
          tiler (MAP, i, j, tileW, tileH, tile3);
      }
}}}

然后尝试引用它,我遇到了问题。我不知道用什么来称呼 this.MAP.tileGround,我已经尝试了很多东西。我读过在不是很先进的时候按名称引用并不是一个好主意,所以我也想避免这种事情。

addEventListener (Event.ENTER_FRAME, hits);
function hits (event:Event) {
    var tileCatchG:MovieClip = this.MAP.tileGround;

    if(tileCatchG.hitTestPoint(this.MAP.Char.x + leftBumpPoint.x, this.MAP.Char.y + leftBumpPoint.y, true)){
        leftBumping = true;
    } else {
        leftBumping = false;
    }

...

}

谢谢!

4

1 回答 1

1

在第二次查看您正在做的事情时,您似乎应该参考代表地图的 2 索引数组。

您可以在文件顶部创建一个常规(单索引)数组,例如

public var tileArray:Array = [];

然后在您创建它们的位置将它们推入数组

var tile1 = new tileGround();
tileArray.push(tile1);

然后引用它们,你可以运行一个简单的循环

for each(var tile:MovieClip in tileArray)
{
    //Do stuff
    if(tile instanceof tileGround)
    {
       //Do stuff specific to tileGround
    }
}
于 2013-06-19T21:36:04.477 回答