Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.01.2008, 00:24
NUTTT вне форума Посмотреть профиль Отправить личное сообщение для NUTTT Найти все сообщения от NUTTT
  № 1  
Ответить с цитированием
NUTTT

Регистрация: Jan 2008
Сообщений: 2
Я дизайнер, а вот со скриптами не дружу...

Пожалуйста, подскажите, как сделать, чтобы объект стал медленно вращаться вокруг своей оси (не сдвигаясь с точки координат), как бы следил за движением курсора. Причем вращение как по часовой, так и против часовой. И также поверх этого объекта - невидимый слой - кнопка. Не хотелось бы чтобы она вращалась.
Идею можно посмотреть на www.refreshreality.com

Да, и ещё... - были тут исходники - по теме "Слежение за курсором".
Недостатки такие - 1. не понятно как управлять скоростью вращения.
2.нужно чтобы объект тормозил. Например при наведении курсора объект начинает вращаться, замедляет движение и останавливается на несколько секунд - иначе будет вечно вращаться.
3. На моем мувике несколько объектов(кубики) и к каждому применяется вращение. Если они будут все одновременно реагировать на курсор - это будет дурдом. Значит нужно обозначить радиус от центра объекта, в пределах которого объект будет реагировать.

Ну и загнула! Самой страшно стало... А вообще это возможно? И есть такие гении, которые такое могут?...


Последний раз редактировалось iNils; 22.01.2008 в 00:46.
Старый 22.01.2008, 03:16
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если честно, глядя на сайт не понял, что нужно сделать =)

Но вообще. Предположим, что центр объекта, который нужно вращать находится в координатах Х=0, У=0. Тогда вычислить его угол поворота можно будет так:
Код:
var l:Number = Math.atan(_ymouse/_xmouse)*180/Math.PI;
Для создания всяких эффектов с движением лучше всего подойдут библиотеки 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.
Старый 23.01.2008, 09:52
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 3  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от NUTTT
Я дизайнер, а вот со скриптами не дружу...
...
А функция поиска для дизайнера тоже недосигаемо сложна?

http://flasher.ru/forum/showpost.php?p=675016

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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