Показать сообщение отдельно
Старый 03.02.2010, 18:50
imdogma вне форума Посмотреть профиль Отправить личное сообщение для imdogma Найти все сообщения от imdogma
  № 1  
Ответить с цитированием
imdogma
 
Аватар для imdogma

Регистрация: Apr 2009
Сообщений: 78
По умолчанию Псевдоизометрия

Есть задача создать псевдоизометрический вид. Сам подходящим способом нашел для себя поворот на 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) - получается ну совсем чтото не то. Пытался придумать, как расчитывать координаты напрямую в цикле создания тайла, там же его крутить и ужимать - никак не додумаюсь. Целый день с этим бьюсь Подскажите, ребят