Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Псевдоизометрия (http://www.flasher.ru/forum/showthread.php?t=135865)

imdogma 03.02.2010 18:50

Псевдоизометрия
 
Есть задача создать псевдоизометрический вид. Сам подходящим способом нашел для себя поворот на 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:

Wolsh 03.02.2010 20:19

Конверт в конверте.
Контейнер помести в спрайт, контейнер поверни на 45°.
Внешний спрайт сожми по вертикали в два раза))

imdogma 03.02.2010 20:27

Wolsh, спасибо! С меня тонны нефти :)))


Часовой пояс GMT +4, время: 05:05.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.