Псевдоизометрия
Есть задача создать псевдоизометрический вид. Сам подходящим способом нашел для себя поворот на 45 градусов и сжатие по высоте вдвое (как это описано тут: http://xitri.com/2008/10/17/two-step-isometric.html). Только вот чтото не получается у меня никак.
Вот такой код у меня:
Код AS3:
package src.game
{
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class TileMap extends Sprite
{
private var map:Array;
private var tileW:Number;
private var tileH:Number;
public static const WALKABLE:Number = 0;
private var mapW:Number;
private var mapH:Number;
private var graphicsContainer:Sprite;
public function TileMap(_parent:DisplayObjectContainer)
{
super();
map = [
[1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 1, 0, 0, 0, 1],
[1, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 1, 1, 0, 1, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1],
];
tileW = 60;
tileH = 60;
mapW = map[0].length;
mapH = map.length;
buildMap();
this.addChild(graphicsContainer);
}
private function buildMap():void
{
graphicsContainer = new Sprite();
for (var i:int = 0; i < mapH; ++i)
{
for (var j:int = 0; j < mapW; ++j)
{
var tile:Sprite = new Sprite();
tile.name = "t_" + i + "_" + j;
tile.x = j * tileW;
tile.y = i * tileH;
tile.graphics.lineStyle(0, 0x004080);
var fillColor:int = (map[i][j] == WALKABLE) ? 0x000000 : 0xFFFFFF;
tile.graphics.beginFill(fillColor);
tile.graphics.drawRect(0, 0, tileW, tileH );
tile.graphics.endFill();
tile.addEventListener(MouseEvent.CLICK, function(e:MouseEvent) { e.currentTarget.alpha = 0; } );
graphicsContainer.addChild(tile);
}
}
}
}
}
Если пытаюсь производить манипуляции с graphicsContainer (rotation=45, height=height/2) - получается ну совсем чтото не то. Пытался придумать, как расчитывать координаты напрямую в цикле создания тайла, там же его крутить и ужимать - никак не додумаюсь. Целый день с этим бьюсь :( Подскажите, ребят :drinks:
|