Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Повернуть картинку загруженную через Loader (http://www.flasher.ru/forum/showthread.php?t=132734)

zakatnov 19.11.2009 13:11

Повернуть картинку загруженную через Loader
 
Есть код:
Код AS3:

var radius:Number = 130;
var centerX:Number = 250;
var centerY:Number = 175
var speed:Number = 0.05;
var xml:XML;
var xmlList:XMLList;
var imgLoader:Loader;
var urlLoader:URLLoader = new URLLoader();
urlLoader.load (new URLRequest("xml.xml"));
urlLoader.addEventListener (Event.COMPLETE, handleLoad);
 
function handleLoad (e:Event):void
{
        xml = XML(e.target.data);
        xmlList = xml.children();
 
        for (var i:int = 0; i<xmlList.length; i++)
        {
                imgLoader = new Loader();
                imgLoader.load(new URLRequest(xmlList[i].attribute("small")));
                imgLoader.rotation = i*(Math.PI/4);
                imgLoader.x = radius*Math.cos(imgLoader.rotation)+centerX;
                imgLoader.y = radius*Math.sin(imgLoader.rotation)+centerY;
                imgLoader.name = xmlList[i].attribute("big");
                addChild(imgLoader);
        }
}

Сейчас я пока ищу конкретные решения, поэтому код оформил в кадре а не в классе.

и есть XML
Код:

<?xml version="1.0" encoding="utf-8"?>
<imgs>
        <img big="1.jpg" small="1.jpg">1</img>
        <img big="2.jpg" small="2.jpg">1</img>
        <img big="3.jpg" small="3.jpg">1</img>
        <img big="4.jpg" small="4.jpg">1</img>
        <img big="5.jpg" small="5.jpg">1</img>
        <img big="6.jpg" small="6.jpg">1</img>
        <img big="7.jpg" small="7.jpg">1</img>
        <img big="8.jpg" small="8.jpg">1</img>
</imgs>

Собственно задача - загрузить картинки и разместить их по кругу.
сейчас получается так:
http://alexander.zakatnov.ru/1.png

то есть как то странно работает свойство rotation оно поворачивает объект не только от центра окружности, но и относительно самого себя, подскажите как сделать, чтобы было так:
http://alexander.zakatnov.ru/1.edit.png

Заранее спасибо

Kidd002 19.11.2009 13:20

imgLoader.rotation = i*(180/xmlList.length);

zakatnov 19.11.2009 13:25

Цитата:

Сообщение от Kidd002 (Сообщение 866696)
imgLoader.rotation = i*(180/xmlList.length);

там нужно не в градусах а в радианах указывать, поэтому если ваш пример перевести в радианы получается тоже что и у меня :)

imgLoader.rotation = i*(Math.PI*2/xmlList.length);

Kidd002 19.11.2009 13:27

Попробуйте не переводить. rotation измеряется в градусах. И там не 180 нужно поставить, а 360.

zakatnov 19.11.2009 13:44

получается так:
http://alexander.zakatnov.ru/2.PNG

Kidd002 19.11.2009 13:54

Код AS3:

imgLoader.rotation = i*360/xmlList.length+90;//поправка на 90 град.
imgLoader.x = radius*Math.cos(i*2*Math.PI/xmlList.length)+centerX;//cos и sin принимают в параметры радианы
imgLoader.y = radius*Math.sin(i*2*Math.PI/xmlList.length)+centerY;


bicubic_bublic 19.11.2009 14:11

для удобства я бы поместил каждую картинку в контейнер, сместил картинку от центра на какое-то расстояние вверх. каждый контейнер переместил в нужную точку-центр и повернул бы на нужный угол

Felicast 19.11.2009 17:25

а можно для трансформации использовать матрицу

zakatnov 19.11.2009 17:40

Цитата:

Сообщение от Felicast (Сообщение 866812)
а можно для трансформации использовать матрицу

Пример в студию :)

bicubic_bublic 19.11.2009 17:46

Код AS3:

var m:Matrix = new Matrix();
m.translate(- IMG_WIDTH / 2, - IMG_HEIGHT - radius);
m.rotate(angle); // angle в радианах.



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

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