![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2008
Сообщений: 2
|
Я дизайнер, а вот со скриптами не дружу...
Пожалуйста, подскажите, как сделать, чтобы объект стал медленно вращаться вокруг своей оси (не сдвигаясь с точки координат), как бы следил за движением курсора. Причем вращение как по часовой, так и против часовой. И также поверх этого объекта - невидимый слой - кнопка. Не хотелось бы чтобы она вращалась. Идею можно посмотреть на www.refreshreality.com Да, и ещё... - были тут исходники - по теме "Слежение за курсором". Недостатки такие - 1. не понятно как управлять скоростью вращения. 2.нужно чтобы объект тормозил. Например при наведении курсора объект начинает вращаться, замедляет движение и останавливается на несколько секунд - иначе будет вечно вращаться. 3. На моем мувике несколько объектов(кубики) и к каждому применяется вращение. Если они будут все одновременно реагировать на курсор - это будет дурдом. Значит нужно обозначить радиус от центра объекта, в пределах которого объект будет реагировать. Ну и загнула! Самой страшно стало... А вообще это возможно? И есть такие гении, которые такое могут?... Последний раз редактировалось iNils; 22.01.2008 в 00:46. |
|
|||||
|
Modus ponens
|
Если честно, глядя на сайт не понял, что нужно сделать =)
Но вообще. Предположим, что центр объекта, который нужно вращать находится в координатах Х=0, У=0. Тогда вычислить его угол поворота можно будет так: Для создания всяких эффектов с движением лучше всего подойдут библиотеки mx.transitions или Tweener (первая есть в комплекте с Флешем, вторая распространяется бесплатно - ее легко найти по названию в гугле). var r_mc:MovieClip = rct(this, Stage.width, Stage.height, Math.random()*0xffffff, 100);
r_mc._x = Stage.width/2;
r_mc._y = Stage.height/2;
var r_mc:MovieClip = rct(r_mc, 200, 200, Math.random()*0xffffff, 100);
function rct(_mc:MovieClip, w:Number, h:Number, c:Number, a:Number):MovieClip {
var mc:MovieClip = _mc.createEmptyMovieClip("rct"+_mc.getNextHighestDepth(), _mc.getNextHighestDepth());
mc.beginFill(c,a);
mc.moveTo(-w/2,-h/2);
mc.lineTo(w/2,-h/2);
mc.lineTo(w/2,h/2);
mc.lineTo(-w/2,h/2);
mc.lineTo(-w/2,-h/2);
mc.endFill();
return mc;
}
r_mc.onMouseMove = function():Void {
this._rotation = Math.atan(this._parent._ymouse/this._parent._xmouse)*180/Math.PI;
}
import mx.transitions.Tween;
import mx.transitions.easing.*;
import mx.utils.Delegate;
//
var r_mc:MovieClip = rct(this, Stage.width, Stage.height, Math.random()*0xffffff, 100);
r_mc._x = Stage.width/2;
r_mc._y = Stage.height/2;
var r_mc:MovieClip = rct(r_mc, 200, 200, Math.random()*0xffffff, 100);
var _tw:Tween = new Tween(r_mc, '_rotation', Bounce.easeOut, 0, 0, 1, true);
_tw.stop();
function rct(_mc:MovieClip, w:Number, h:Number, c:Number, a:Number):MovieClip {
var mc:MovieClip = _mc.createEmptyMovieClip("rct"+_mc.getNextHighestDepth(), _mc.getNextHighestDepth());
mc.beginFill(c,a);
mc.moveTo(-w/2,-h/2);
mc.lineTo(w/2,-h/2);
mc.lineTo(w/2,h/2);
mc.lineTo(-w/2,h/2);
mc.lineTo(-w/2,-h/2);
mc.endFill();
return mc;
}
r_mc.onMouseMove = Delegate.create(this, onMyMove);
function onMyMove():Void {
var _b:Number = _tw.begin;
_tw.begin = Math.atan(r_mc._parent._ymouse/r_mc._parent._xmouse)*180/Math.PI;
if(_tw.begin-_b>0){
_tw.finish=_tw.begin+10;
} else {
_tw.finish=_tw.begin-10;
}
_tw.start();
}
ЗЫ. Сейчас перечитал еще раз... так нужно, чтобы вращался за курсором, или чтобы скорость зависела от удаленности курсора от объекта? import mx.transitions.Tween;
import mx.transitions.easing.*;
import mx.utils.Delegate;
//
var r_mc:MovieClip = rct(this, Stage.width, Stage.height, Math.random()*0xffffff, 100);
r_mc._x = Stage.width/2;
r_mc._y = Stage.height/2;
r_mc = rct(r_mc, 200, 200, Math.random()*0xffffff, 100);
var _tw:Tween = new Tween(r_mc, '_rotation', None.easeNone, 0, 360, 5, true);
var k:Number = (Stage.width+Stage.height)/(20*Math.max(Stage.width, Stage.height));
_tw.addListener(this);
function rct(_mc:MovieClip, w:Number, h:Number, c:Number, a:Number):MovieClip {
var mc:MovieClip = _mc.createEmptyMovieClip('rct'+_mc.getNextHighestDepth(), _mc.getNextHighestDepth());
mc.beginFill(c,a);
mc.moveTo(-w/2,-h/2);
mc.lineTo(w/2,-h/2);
mc.lineTo(w/2,h/2);
mc.lineTo(-w/2,h/2);
mc.lineTo(-w/2,-h/2);
mc.endFill();
return mc;
}
onMotionFinished = function():Void {
_tw.start();
}
r_mc.onMouseMove = Delegate.create(this, onMyMove);
function onMyMove():Void {
if(_tw.begin < _tw.position%360-5 || _tw.begin > _tw.position%360+5){
_tw.begin = _tw.position%360;
_tw.rewind();
if(r_mc._parent._xmouse>0){
_tw.finish = _tw.begin + 360;
} else {
_tw.finish = _tw.begin - 360;
}
_tw.duration = Math.round(k*Math.sqrt(r_mc._parent._ymouse*r_mc._parent._ymouse + r_mc._parent._xmouse*r_mc._parent._xmouse));
_tw.resume();
}
}
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 22.01.2008 в 04:23. |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
![]() http://flasher.ru/forum/showpost.php?p=675016 |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:18. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|