如何居中网格?

How to Center Grid?

大家好所以我使用下面的代码在舞台上创建了一个网格。一切正常,网格已创建。唯一的问题是当我将列和行的值更改为更高的值时,网格位置更改为舞台中心的偏移量。我希望它是当我更改值并添加更多列等时,网格保持死点。

此外,网格似乎从网格的左上角扩展到正 x 轴。

我该怎么做才能解决这个问题?

public function geniusMatchEngine() 
    {
        //Instantiate Variables
        nSquares = 0;
        //Movie clips
        _gridContainer = new MovieClip();

        stage.addChild(_gridContainer);

        createGrid();

        //Add Listeners
        stage.addEventListener(Event.ENTER_FRAME, logicHandler);
    }

    private function logicHandler(e:Event):void 
    {

    }

    private function createGrid():void 
    {
        for (var gy:int = 0; gy < rows; gy++)
        {
            for (var gx:int = 0; gx < columns; gx ++)
            {
                var _grid:mcGrid = new mcGrid();
                _grid.x = (stage.stageWidth / 2) + _grid.width * gx;
                _grid.y = (stage.stageHeight / 2) + _grid.height * gy;
                _gridContainer.addChild(_grid);
                _grid.addEventListener(MouseEvent.CLICK, tapGrid);
            }
        }
    }

    private function tapGrid(e:MouseEvent):void 
    {
        trace("CLICKED");
        e.currentTarget.destroy(); //Destroy current target
    }

    private function centerGrid(gCenter:MovieClip):void
    {
        gCenter.x = (stage.width / 2) - (gCenter.width / 2); // center horizontally. 
        gCenter.y = (stage.height / 2) - (gCenter.height / 2); // center vertically. 
    }

要使舞台居中,请执行以下操作:

private function centerThis(s:<Type>):void{
    s.x = stage.width / 2 - s.width / 2; // center horizontally. 
    s.y = stage.height / 2 - s.height / 2; // center vertically. 
}

然后用你的网格你可以做:

centerThis(_grid);

注意:确保将 <Type> 替换为任何有意义的内容。在这种情况下,它可能是 mcGrid,但为了使其更通用,您可以在任何影片剪辑或 Sprite 上使用此功能,使用 MovieClipSprite.

更新

由于您似乎对范围有点困惑,我将以您的具体案例为例。

//Variables
    private var rows:int = 2;
    private var columns:int = 2;

for (var gy:int = 0; gy < rows; gy++)
        {
            for (var gx:int = 0; gx < columns; gx ++)
            {
                var _grid:mcGrid = new mcGrid();
                _grid.x = (stage.stageWidth / 2) - _grid.width / 2;
                _grid.y = (stage.stageHeight / 2) - _grid.height / 2;
                stage.addChild(_grid);
            }
        }

我以为 _mcGrid 是预制网格。我现在看到它可能只是网格中的一个单元格(也许将 class 名称更改为 _mcGridCell... 减少混淆)。忘记尝试相对于舞台中心放置单元格。将它们添加到父 Sprite(或 MovieClip,如果您愿意),然后使用我的 centerThis 公式将 Sprite (movieClip) 居中。这就是显示对象容器的美妙之处。

更新

好的。当您将网格容器居中时,容器中的所有内容都会随之移动。因此,无需像您所做的那样尝试将网格中的单元格居中。

grid.x = (stage.stageWidth / 2) + _grid.width * gx;

应该只是

grid.x = _grid.width * gx;