如何居中网格?
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 上使用此功能,使用 MovieClip
或 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 是预制网格。我现在看到它可能只是网格中的一个单元格(也许将 class 名称更改为 _mcGridCell... 减少混淆)。忘记尝试相对于舞台中心放置单元格。将它们添加到父 Sprite(或 MovieClip,如果您愿意),然后使用我的 centerThis 公式将 Sprite (movieClip) 居中。这就是显示对象容器的美妙之处。
更新
好的。当您将网格容器居中时,容器中的所有内容都会随之移动。因此,无需像您所做的那样尝试将网格中的单元格居中。
grid.x = (stage.stageWidth / 2) + _grid.width * gx;
应该只是
grid.x = _grid.width * gx;
大家好所以我使用下面的代码在舞台上创建了一个网格。一切正常,网格已创建。唯一的问题是当我将列和行的值更改为更高的值时,网格位置更改为舞台中心的偏移量。我希望它是当我更改值并添加更多列等时,网格保持死点。
此外,网格似乎从网格的左上角扩展到正 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 上使用此功能,使用 MovieClip
或 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 是预制网格。我现在看到它可能只是网格中的一个单元格(也许将 class 名称更改为 _mcGridCell... 减少混淆)。忘记尝试相对于舞台中心放置单元格。将它们添加到父 Sprite(或 MovieClip,如果您愿意),然后使用我的 centerThis 公式将 Sprite (movieClip) 居中。这就是显示对象容器的美妙之处。
更新
好的。当您将网格容器居中时,容器中的所有内容都会随之移动。因此,无需像您所做的那样尝试将网格中的单元格居中。
grid.x = (stage.stageWidth / 2) + _grid.width * gx;
应该只是
grid.x = _grid.width * gx;