我正在使用纯Starling for mobile(Android / iOS)(没有Citrus Engine)进行自上而下的2d平台游戏。我正在用平铺创建地图。通常地图比2048X2048更大,我正在寻找这个问题的解决方案。有一个相机类根据播放器移动地图。 我尝试的技术可能是错误的,因为我第一次这样做。所以,如果我做错了什么,请纠正我,并帮我解决这个问题。
这是我到目前为止所做的:
地图:
问题:由于帧速率降至5-10fps,我在这里做了一些非常错误的事情。而且我也无法正确移动地图。
如果需要,我也可以发布一些代码......如果你可以指导我正确的方向或帮助我,那就太棒了。
在loadLayers()函数末尾有一个调用drawLayers()方法。我已经注释掉了这个方法并添加了我在循环中调用的下面的方法
'屏幕'是我要绘制地图的纹理(屏幕尺寸1280x720)(大于2000x2000)
为了正确理解,您可能希望查看http://wiki.starling-framework.org/extensions/tmx_maps
处的扩展类public function drawMapLayers(screen:RenderTexture, screenRect:Rectangle):void
{
screen.drawBundled(function():void
{
for (var i:int = 0; i < _numLayers; i++)
{
var col:int = Math.floor(screenRect.x / _tileWidth);
var row:int = Math.floor(screenRect.y / _tileHeight);
var endCol:int = Math.floor((screenRect.x + screenRect.width) / _tileWidth) - 1;
var endRow:int = Math.floor((screenRect.y + screenRect.height) / _tileHeight) - 1;
var initNum:uint = row * (endCol - col + 1) + col;
var lastNum:uint = endRow * (endCol - col + 1) + endCol;
//var initNum:uint = col * (endRow - row) + row;
//var lastNum:uint = endCol * (endRow - row) + endRow;
//trace("Points", col, row, endCol, endRow, initNum, lastNum);
for (var k:int = col; k <= endCol; k++)
{
for (var l:int = row; l <= endRow; l++)
{
var gridNum:uint = l * (_mapWidth) + k;
if (_layers[i].layerData[gridNum] != 0)
{
//trace(gridNum, _layers[i].layerData[gridNum]);
if (findTileWithGID(_layers[i].layerData[gridNum]) != null)
{
var img:Image = new Image(findTileWithGID(_layers[i].layerData[gridNum]).texture);
if (_layers[i].properties["alpha"] != undefined)
{
img.alpha = Number(_layers[i].properties["alpha"]);
}
if (img.width > _tileWidth || img.height > _tileHeight)
{
img.x = k * _tileWidth;
img.y = l * _tileHeight;
img.y -= (img.height - _tileHeight);
}
else
{
img.x = k * _tileWidth;
img.y = l * _tileHeight;
}
trace(gridNum, img.x, img.y);
screen.draw(img);
}
}
}
}
}
});
}