嘿大家所以我使用下面的代码在舞台上创建了一个网格。一切正常,网格创建。唯一的问题是当我将列和行值更改为更高的值时,网格位置更改偏移到舞台的中心。我希望它是当我更改值和更多列等添加网格保持死点。
此外,网格似乎从网格的左上角扩展到正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.
}
答案 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
,但要使其更通用,以便您可以在任何影片剪辑上使用此功能,或者使用MovieClip
或Sprite
使用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;