Просмотр полной версии : управление мувиком
Добрый день!
У меня не получается сделать такое управление мувиком:
Есть кнопки вперёд и поворот. Нажимаем на кнопку вперёд, мувик двигается вперёд, нажимаем на кнопку поворот-мувик поворачивается на определённый градус. Нажимаем опять вперёд и мувик двигается но уже в ту сторону в которую повернулся.
Вот мой код в котором при повороте он продолжает двигаться не взирая на поворот
speed=5;
vperod.onPress = function () {
bk._y-=speed;
}
povorot.onPress = function () {
bk._rotation -=speed;
}
Указанный код работает верно - при движении "вперед" у вас по-прежнему продолжает наращиваться координата Y. Поворот же никак не учитывается.
А как сделать чтоб поворот учитывался?
тут уже нужно по формуле высчитывать. потому что мувику придется после поворота двигаться уже по диагонали. почитайте про синус(косинус) в прямоугольном треугольнике между гипотенузой и катетом :) этот угол-это начальная координата по Х и по Y. длинна прилегающего катета это длина по Х, а длина противоположного катета-это днина по Y. Тоесть если вам известен угол и длинна катета(тоесть длинна по Х) то можно вычеслить длинну другого катета и таким образом значение по Y. :)
Есть треугольник ABC угол ACB-прямой(90градусов), нам известен угол между BAC и длинна AC нужно найти длинну катета BC(это и будет координата по Y)
вот небольшая демонстрация, если мы поворачиваем объект на 45 градусов, то катеты соответственно равны и их значения =5
var oy:Number=5;
var ox:Number=0;
vperod.onPress = function () {
bk._y-=oy;
bk._x-=ox;
}
povorot.onPress = function () {
bk._rotation =45;
ox=5;
}
А если повторно нажать на поворот. Как тогда быть?
предлагаю реализовать все без тригонометрии ))
два мувика один вложеный в другой;
первый поворачиваем, другой двигаем
при повороте ставим едущий мувик в исходное положение (запоминаем смещение), а поворачивающийся смещаем в обратную сторону, и начинаем двигать снова
а если нужно чтоб поворачивался от 5 до 360 до 72 мувика надо?
предлагаю реализовать все без тригонометрии ))
два мувика один вложеный в другой;
первый поворачиваем, другой двигаем
при повороте ставим едущий мувик в исходное положение (запоминаем смещение), а поворачивающийся смещаем в обратную сторону, и начинаем двигать снова
А как компенсировать смещение одного вложенного мувика относительно точки регистрации другого? Попробуйте реализовать то, о чем вы говорите, и поймете, о чем я.
veles2008
22.11.2009, 12:21
speed=0;
onEnterFrame=function() {
vperod.onPress = function () {
speed =5;
}
povorot.onPress = function () {
bk._rotation -=5;
}
bk._x+=speed*(Math.sin(0.0175*bk._rotation));
bk._y+=speed*(Math.cos(0.0175*bk._rotation));
speed*=0;
}
На самом деле, тут все не так уж и просто потому, что во флеше _rotation имеет диапозон от 0 до 180 и от -180 до 0, а не 360 градусов как мы привыкли :) таким образом угол 190 градусов во флеше будет равен -170 градусов.
во флеше измерение идет не в градусах, а в радианах.
Проще всего высчитывать длину по Х через тангенс.
var a:Number=0;
var b:Number=5;
vperod.onPress = function () {
if(bk._rotation>0 and bk._rotation<90){
bk._y+=b;
bk._x-=a;
}
if(bk._rotation>90 and bk._rotation<180){
bk._y-=b;
bk._x+=a;
}
if(bk._rotation>-180 and bk._rotation<-90){
bk._y-=b;
bk._x+=a;
}
if(bk._rotation>-90 and bk._rotation<0){
bk._y+=b;
bk._x-=a;
}
povorot.onPress = function () {
bk._rotation +=10; // можно изменять угол поворота и играться с ним, а так-же можно сделать еще одну кнопку которая будет поворачивать объект в другую сторону :)
a=b*Math.tan(bk._rotation*(Math.PI/180)); // универсальная формула не привязанная к определенному углу, как в предыдущем примере.
}
для углов равных (0,-0,90,-90,180,-180) было лень писать проверки :) допишите сами :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.