如何中心网格?

时间:2017-03-02 21:47:08

标签: android actionscript-3 flash-cs6

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

此外,网格似乎从网格的左上角扩展到正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. 
    }

1 个答案:

答案 0 :(得分:2)

以舞台上的东西为中心:

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,但要使其更通用,以便您可以在任何影片剪辑上使用此功能,或者使用MovieClipSprite使用Sprite。

更新

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

//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是一个预制网格。我现在看到它可能只是网格中的一个单元格(可能会将类名更改为_mcGridCell ...更少混淆)。忘记尝试将细胞相对于舞台中心放置。将它们添加到父Sprite(或者如果您愿意,可以添加MovieClip),然后将Sprite(movieClip)与我的centerThis公式对齐。这个显示对象容器的美。

更新

确定。当您将网格容器居中时,容器中的所有内容都随之而来。因此,您无需像过滤那样尝试将细胞集中在网格中。

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

应该只是

grid.x = _grid.width * gx;