|
|
|||||
Регистрация: 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, время: 13:37. |
|
« Предыдущая тема | Следующая тема » |
|
|