![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 23
|
Здравствуйте. Делаю игрушку. Вид сверху. нажимаю и держу клавишу влево или вправо и герой медленно поворачивается влево или в право, когда отпускаю клавишу герой остается повернутым. Вопрос, как теперь сделать так чтоб при нажатии клавиши вперед герой шел именно в ту сторону в которую он повернут? Может надо использовать синус и косинус? Как заставить его туда идти в actionscript2?
|
|
|||||
|
Регистрация: May 2011
Сообщений: 72
|
а в чем сложность заключаетца? у вас есть угол поворота. Просто строите треугольник с этим углом и находите X и Y. Дальше меняете координаты героя на эти X и Y.
Хороший чертеж на бумаге вам поможет всё понять. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 23
|
Цитата:
onClipEvent(load) { var povorot=0; var go=0; var obj1x=_root.obj1._x; var obj1y=_root.obj1._y; } onClipEvent(enterFrame) { _root.povVLevo.onRelease = function() { povorot-=0.3; } _root.povVPravo.onRelease = function() { povorot+=0.3; } _root.vpered.onRelease = function() { go+=1; } _root.nazad.onRelease = function() { go-=1; } var angle:Number=povorot;//задать значение var distance:Number=go;//задать значение var dirx:Number=Math.cos(angle); var diry:Number=Math.sin(angle); obj1x+=distance*dirx; obj1y+=distance*diry; _root.obj1._x=obj1x; _root.obj1._y=obj1y; //_root.obj1._rotation=povorot; } Последний раз редактировалось iNils; 20.06.2011 в 12:05. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 5
|
_root.obj1._rotation= povorot ...
А там радианы в градусы переведены? Я не очень силён в математики, школьную программу не помню, но в моём случае это было 180 / Math.PI * Math.acos(радианы) . только там были отдельные проблемы, возможно из за неверной формулы с местами, где поворот от 90 до 180 и 270 - 360 ... Всё решил ... |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 23
|
Цитата:
Я поставил в самом конце строку _root.obj1._rotation=povorot; но объект почемуто вертится на меньшее значение чем поворачивается. Последний раз редактировалось addertu; 22.06.2011 в 09:54. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 5
|
Извини, не могу проверить. Попробуй след.
_root.obj1._rotation = ( 180 / Math.PI ) * Math.acos(povorot); У меня возникли небольшие проблемы в 2 и 3-ем квадранте (просто на некоторых участках поворот был немного другой) ... Но у меня скорее всего было не из за формулы, да и проблема уже решается механически. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 23
|
Цитата:
|
|
|||||
|
Регистрация: Jun 2011
Сообщений: 5
|
эта формула
( 180 / Math.PI ) * Math.acos(povorot); перевод из радиан в градусы. Параметрами тригонометрических функций (cos sin тангенс котангенс и арк косинус, ....) в AS являются радианы ... поэтому povorot - это у тебя не градусы, а радианы... У меня была проблема я искал угол между двумя векторами ... Я её решил условиями Если в таком то квадранте, то 180 - поворот; ( то есть ( 180 / Math.PI ) * Math.acos(povorot) ![]() если в таких то квадрантах, то -1 * поворот (( 180 / Math.PI ) * Math.acos(povorot) ![]() До конца я сам не понял почему не работают некоторые квадранты, то есть что то понятно сразу стало, а что то до сих пор не могу понять .... Просто подгонял ... И подгонял только 2мя операциями либо 180 - поворото, либо -1 * поворот. Добавлено через 5 минут public static acos(x:Number) : Number Computes and returns the arc cosine of the number specified in the parameter x, in radians. Availability: ActionScript 1.0; Flash Player 5 - In Flash Player 4, the methods and properties of the Math class are emulated using approximations and might not be as accurate as the non-emulated math functions that Flash Player 5 supports. Parameters x:Number - A number from -1.0 to 1.0. ты как нибудь учитываешь, промежуток от -1 до 1 ... как я понял в твоем коде просто прибавляется (+0,3) |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|