|
|
|||||
Регистрация: Jul 2011
Сообщений: 2
|
Вращение за курсором
Практически недавно начал изучать ас3.
И встал перед такой проблемой, к которой не смог найти решения в гугле О_О В общем надо, чтобы шестерёнка плавно вращалась следя за курсором (тоесть вращая курсором вокруг оси шестерёнки, вращается и шестерня). При этом остальные шестерёнки вращаются относительно центральной. Для плавного вращения я использовал greensock'овские твины. получилось так: //ЕнтерФрейм private function eFrame(e:Event) { var angle:Number; angle=Math.atan2(mouseY+291,mouseX)*180/Math.PI; TweenLite.to(logo.gear, 0.5, {rotation:angle, overwrite:1}); TweenLite.to(bigGear, 0.5, {rotation:-angle/2, overwrite:1}); TweenLite.to(gearNG.gear, 0.5, {rotation:-angle*2, overwrite:1}); TweenLite.to(gearLvl.gear, 0.5, {rotation:-angle*2, overwrite:1}); TweenLite.to(gearHS.gear, 0.5, {rotation:-angle*2, overwrite:1}); } получается как-то так http://forhaxed.ru/problem.php Я знаю, что все из-за твинов, но хз как сделать чтобы плавно всё крутилось и при этом правильно работало Подскажите плиз как это пофиксить, либо другой путь решения... |
|
|||||
Регистрация: Dec 2006
Адрес: 66°32′00″ с. ш. 66°38′00″ в. д.
Сообщений: 85
|
|
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
В этом случае, при достижении нуля все будет так же. Это не выход. Там нужен код посложнее.
Я вот так расчитывал вращение башни танка за курсором: // расчет плавного вращения башни в сторону курсора >>>> var mouseXpos:Number = this.parent.mouseX; var mouseYpos:Number = this.parent.mouseY; var angleToMouse:Number = Math.atan2(mouseYpos - this.y, mouseXpos - this.x) * Globals.RAD_TO_DEG + 90; if (angleToMouse >= 180 && angleToMouse <= 270) { angleToMouse -= 360; } if (angleToMouse < 0 && angleToMouse > -180) { angleToMouse += 360; } var vehRotation:Number = this.rotation; if (vehRotation < 0 && vehRotation > -180) { vehRotation += 360; } var turretRot:Number = this.mTurret.rotation; if (turretRot < 0 && turretRot > -180) { turretRot += 360; } var turretGlobal:Number = turretRot + vehRotation; if (turretGlobal >= 360) { turretGlobal -= 360; } else if (turretGlobal < 0) { turretGlobal += 360; } if (turretGlobal >= 270 && turretGlobal <= 360) { if (angleToMouse >= 0 && angleToMouse <= 90) { turretGlobal -= 360; } } if (turretGlobal >= 0 && turretGlobal <= 90) { if (angleToMouse <= 360 && angleToMouse >= 270) { turretGlobal += 360; } } // admission - это минимальный угол, при котором башня перестает двигаться, нужен для того, чтобы она не начинала дергаться при достижении нужной позиции var admission:Number = (turretGlobal - angleToMouse) > 0 ? (turretGlobal - angleToMouse) : (turretGlobal - angleToMouse) * -1; if (turretGlobal <= angleToMouse) { if (admission > 3) this.mTurret.rotation += _turretAccel; } else if (turretGlobal > angleToMouse) { if (admission > 3) this.mTurret.rotation -= _turretAccel; } Там может и не быть 270, просто в моем случае башня была повернута (картинка) как бы на 90 градусов, но в коде это воспринималось как 0. п.с. Пояснения спрашивать бесполезно, я сам уже не помню что там и зачем Последний раз редактировалось goodguy; 05.07.2011 в 20:31. |
|
|||||
Регистрация: Jun 2009
Сообщений: 35
|
У автора проблема в твине.
|
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Если это правда ENTER_FRAME, то по идее
//ЕнтерФрейм private function eFrame(e:Event) { var angle:Number; angle=Math.atan2(mouseY+291,mouseX)*180/Math.PI; if(angle - logo.gear.rotation > 180) angle -= 360;//ищем кратчайший поворот if(logo.gear.rotation - angle > 180) angle += 360;//ищем кратчайший поворот TweenLite.to(logo.gear, 0.5, {rotation:angle, overwrite:1}); bigGear.rotation = -logo.gear.rotation*0.5; gearNG.rotation = -logo.gear.rotation*2; gearLvl.rotation = -logo.gear.rotation*2; gearHS.rotation = -logo.gear.rotation*2; }
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Регистрация: Jul 2011
Сообщений: 2
|
Попробовал shortRotation, помогло, но большая шестерня всё равно глючила...
Попробовал то, что написал -De- помоголо на ура!) Так что огромное спасибо) остался небольшой глюк с большой шестерней из-за её несимметричности, но с ним я разберусь... |
Часовой пояс GMT +4, время: 15:22. |
|
« Предыдущая тема | Следующая тема » |
Теги |
rotation , вращение , курсор , шестерёнки |
|
|