0

我在 ActionScript 3 中使用 tileList 来显示影片剪辑。但是我有一个问题,不是所有电影剪辑的参考点都在正确的位置。这导致这些影片剪辑部分显示在 tileList 中它们的单元格之外。

在将movieClip 添加到tileList 之前,我曾尝试调整它的x 和y 位置,但这并没有改变任何东西。现在我试图找出是否可以更改 tileList 中已经存在的对象的 x 和 y 位置,但没有找到任何答案。

我希望我已经把我的问题说清楚了。提前致谢!

编辑:

这是我试过的代码:

private function initTileList():void {
    for(var i:int = 0; i < _movieClips.length; i++) {
        changePos(_movieClips[i]);
        tileList.addItem({label: _movieClips[i].name, source: _movieClips[i]});
    }
}

private function changePos(mc:MovieClip):void {
    if(MovieClip(mc).getRect(mc).x != 0) {
        mc.x -= MovieClip(mc).getRect(stateMachineRef).x;
}
    if(MovieClip(mc).getRect(mc).y != 0) {
        mc.y -= MovieClip(mc).getRect(stateMachineRef).y;
    }
}

我没有任何错误,它只是不影响对象在 tileList 中的位置。

问题外观的示例。

4

1 回答 1

0

不知道这些事情很难说问题出在哪里:
1. tileList.AddItem() 究竟做了什么;
2.什么是stateMachineRef
3.如何加载MovieClips。如果它们是从网络加载的,那将是一个完全不同的故事。

顺便说一句,您不必投射 MovieClip(mc),因为 mc 已经是一个 MovieClip。此外,何时更正坐标也没有区别:在添加到 tileList 之前或之后。无论哪种方式都应该工作。

因此,鉴于有关您的问题的信息不完整,我建议您确保以下步骤:

- 我们假设所有图块都显示在图块容器内。它可以是 Stage 或 MovieClip 或任何合适的 DisplayObjectContainer,所以从现在开始我们将其称为 tileContainer。

- 我们假设所有瓷砖的宽度和高度相同。如果不确定,则应再次检查。

- 我们假设 tileContainer 中的每个图块都显示在一些规则的网格坐标上。即它符合以下代码:

for (var pos_y:int = 0; pos_y < GRID_SIZE_Y; pos_y++) {
    for (var pos_x:int = 0; pos_x < GRID_SIZE_X; pos_x++) {
        var tile:Tile = getNextTile(); // just get a tile from somewhere
        tile.source.x = pos_x * TILE_WIDTH; // using your tile structure
        tile.source.y = pos_y * TILE_HEIGHT;
        tileContainer.addChild(tile.source);
    }
}

现在我看到了您的问题,即某些图块的创建方式是它们的源动画剪辑坐标从 (0,0) 偏移。所以它们不会与网格对齐。

你在做什么似乎是对齐它们的正确方法,但我不知道你的代码到底发生了什么,所以我将重写它:

function changePos(mc:MovieClip) {
   var r:Rectangle = mc.getRect(mc);
   mc.x -= r.x; // note you don't need any if's
   mc.y -= r.y;
}

在上面的循环中,只需在设置网格坐标后添加 changePos() :

tile.source.x = pos_x * TILE_WIDTH;
tile.source.y = pos_y * TILE_HEIGHT;
changePos(tile.source);
tileContainer.addChild(tile.source);

如果您遵循所有这些步骤,那么这基本上就是您所需要的,并且它肯定会起作用。

于 2015-01-31T17:24:22.283 回答