PDA

Просмотр полной версии : Sprite rotation: попытка скромного новогоднего подарка


wlad
01.01.2011, 16:36
Дамы и господа!

Попытка скромного новогоднего подарка.

Если Вы создаете какой-то спрайт, а в дальнейшем хотите иметь вращательный эффект, причем с регулируемым центром, то его центр вращения при

....drawRect(x0, y0, width, height);

будем выглядеть банально -

(width - x0, height - y0)

У нас есть грань куба var kub:Sprite = new Sprite();


var kub:Sprite = new Sprite();
kub.graphics.beginFill(0xFF666F);
kub.graphics.drawRect(-10, -10, 20, 20);
// центр вращения (width - x0, height - y0)
kub.x = 250;
kub.y = 250;
addChild(kub);

Итак, Вы вращение создаете Таймером

function onTick(event:TimerEvent):void
{ kub.x = event.target.currentCount*2; // это поступательное движение, разумеется,
kub.y = event.target.currentCount*2;
kub.rotation += 15; // а вот это уже вращение
} // function onTick(event:TimerEvent):void

(для полноты: Таймер до и после: )
var myT:Timer = new Timer(50, 1000); // создаете
myT.start();
myT.addEventListener(TimerEvent.TIMER, onTick); // прибавляете

Ответ на банальный вопрос: почему я такое считаю откровением? Дела в том, что в справочниках по языку ActionScript 3.0 при описании объектов Sprite, его свойства rotation абсолютно не сказано, как нужно задавать центр вращения.

Хотя, разумеется, вращение 3D куба куда более зрелищно...

С уважением

Влад

P.S. Разумеется, я совсем не против переноса темы в другой раздел. Например, "Новогодние поздралвения"

samana
01.01.2011, 17:58
Что-то не понял, в чем вопрос.... Центр спрайта всегда в начале его координат, а где вы нарисуете графику в нем это уже ваше дело, он в любом случае он будет вертеться относительно своих x:0 y:0

wlad
01.01.2011, 19:07
Тем не менее только такой код дает вращение вокруг центра куба...

samana
01.01.2011, 19:28
Тем не менее только такой код дает вращение вокруг центра куба...
p.s. Вообще-то, это совершенно логично.

drnet_ua
01.01.2011, 19:45
имхо ерунда какаято

центром вращения будет точка 0,0. без вариантов

wlad
01.01.2011, 19:46
Дорогой Samana!

Вы разожгли мой спортивный интерес: воспроизведите логику...

Я ведь даю вращение вокруг центра спрайта, а не левой верхней координаты...

drnet_ua
01.01.2011, 19:46
нарисуйте куб не по центру, а вращение все равно будет вокруг точки 0.0

Добавлено через 10 минут
еще раз - вращение происходит вокруг точки 0,0

если вы нарисуете свой куб как:
-25,-25,50,50 - вращение по центру
0,0, 50,50 - верхний левый угол
-50,-50, 50, 50 - нижний правый угол

т.е. как было сказанно выше:

Центр спрайта всегда в начале его координат, а где вы нарисуете графику в нем это уже ваше дело, он в любом случае он будет вертеться относительно своих x:0 y:0

wlad
01.01.2011, 20:03
Цитата из справочника:

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Sprite.html

rotation : Number
Indicates the rotation of the DisplayObject instance, in degrees, from its original orientation.

Там ни гу-гу о центре вращения... А также о возможности регулировки...

Если не секрет: как Вы решали эту задачу?

Влад

samana
01.01.2011, 20:10
Вы разожгли мой спортивный интерес: воспроизведите логику...

Метод drawRect начинает рисовать с указанных координат, и "растягивает" ширину и высоту в положительном направлении, то есть ширина увеличивается вправо, а высота вниз. Вот и получается что если рисовать квадрат, или прямоугольник из x:0 y:0, то точка вращения визуально выпадает на левый верхних угол нарисованного квадрата.

wlad
01.01.2011, 20:21
Жаль лишь, при описании свойств спрайтов такого там нет..

Мерси...

samana
01.01.2011, 20:43
Это не в спрайте, а в графикс нужно посмотреть ссылка (http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/display/Graphics.html#drawRect())

wlad
01.01.2011, 21:12
Что приходит к голову не всегда с первой попытки...