0

ムービークリップを表示するために、ActionScript 3 で tileList を使用しています。ただし、ムービークリップのすべての参照ポイントが正しい場所にあるとは限らないという問題があります。これにより、これらのムービークリップが tileList のセルの外側に部分的に表示されます。

tileList に追加する前に、movieClip の 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;
    }
}

エラーはありません。タイルリスト内のオブジェクトの位置には影響しません。

問題がどのように見えるかの例。

4

1 に答える 1

0

これらのことを知らずに問題がどこにあるのかを言うのは難しいです:
1. tileList.AddItem() が正確に行うこと。
2. stateMachineRef とは
3. MovieClip のロード方法。それらがネットワークから読み込まれる場合、それはまったく別の話になります。

ちなみに、mc は既に MovieClip であるため、MovieClip(mc) をキャストする必要はありません。また、いつ座標を修正するかについて違いはありません: 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 に答える