Поворот изображения постепенно от одного градуса к другому - PullRequest
1 голос
/ 21 августа 2011

Это мой первый пост, поэтому, пожалуйста, потерпите меня. Я постараюсь быть настолько ясным, насколько смогу, о моей проблеме. Прежде всего, позвольте мне сказать, что я сосу на математику. Я потерпел неудачу в школе, и мне до бесконечности больно, что я не могу понять простые математические понятия, тем более что я люблю кодировать Кто-то, кто хочет программировать, и не может выполнять основные математические операции? Плохая комбинация Aaaanyway, к проблеме.

Некоторый контекст. Я пишу игру типа астероидов. Это идет довольно хорошо, и я преодолел все мои препятствия до сих пор благодаря этому сайту (спасибо!) И Google. Я искал решение своей проблемы, но всегда кажется, что я сталкиваюсь с решением, которое либо не работает, либо я просто не понимаю и не могу включить его в свой код.

Проблема связана с вращением корабля. У меня есть класс джойстика на экране, который возвращает угол, на который нажимается джойстик. Я использую этот угол, чтобы направить корабль в том же направлении.

То, что я хочу сделать, это постепенно повернуть судно в направлении, на которое пользователь хочет идти, используя кратчайший поворот влево или вправо. Я мысленно думаю: «Как, черт возьми, я пойду сказать… 350 градусов от 5 градусов, идти налево?». Я не знаю ...

Вот мой код розыгрыша:

public void draw(Canvas canvas){
    canvas.save();
    canvas.rotate((float) (fAngle + 90), (float) (dX + (mShip.getIntrinsicWidth() / 2)), (float) (dY + (mShip.getIntrinsicHeight() / 2)));
    mShip.setBounds((int)dX, (int)dY, (int)dX + mShip.getIntrinsicWidth(), (int)dY + mShip.getIntrinsicHeight());
    mShip.draw(canvas);
    canvas.restore();
}

Угол передается в переменную fAngle из метода getangle джойстика. Угол увеличивается на 90 градусов из-за того, что изображение обращено.

user.fAngle = oJoystick.getAngle();

Таким образом, на каждом игровом тике я хочу поворачивать корабль в любом направлении, куда игрок хочет идти, градус за градусом. Любая помощь с этим будет принята с благодарностью!

Спасибо за чтение!

1 Ответ

1 голос
/ 21 августа 2011

В вашей функции тиков вместо: user.fAngle = oJoystick.getAngle ();

Используйте это (отрегулируйте приращение по своему вкусу - это контролирует скорость вращения):

const float increment = 1.0;
float direction;
float joy = oJoystick.getAngle();
float ang = user.fAngle;
float fudge = 5.0;

if (abs (joy - ang) > fudge) {
    if (joy > ang) {
        if (joy - ang < 180)
            direction = 1;
        else
            direction = -1;
    } else if (joy < ang) {       
        if (ang - joy < 180)
            direction = -1;
        else
            direction = 1;
    }
} else // already pointing right direction
    direction = 0;

user.fAngle = ang + direction * increment;
if (0 > user.fAngle)
    user.fAngle += 360;
if (360 < user.fAngle)
    user.fAngle -= 360;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...