Как сделать растровое изображение направленным вперед во время его движения и поворота? - PullRequest
0 голосов
/ 19 октября 2019

Существует ли какая-то формула для поворота стрелки в этой ссылке прямо здесь , чтобы она всегда указывала на красный? Каждый раз, когда я пытался, я всегда получал неактивное число, и вращение стрелки не синхронизировано с поворотом и движением стрелки.

Пара фрагментов кода, чтобы показать, что яработа с:

arrow.moveX(true);
arrow.moveY(true);

if(arrow.turning) {
     arrow.turn(player.direction / (0.75 * arrow.getSpeed()));
}

Скорость стрелы составляет 12,5 единиц / раз, если это важно. Что касается самого движения:

public void moveX(boolean turn) {

    if(turn) {
        x += speed * Math.cos(angle);
    } else {
        x += speed;
    }

}

public void moveY(boolean turn) {

    if(turn) {
        y += speed * Math.sin(angle);
    } else {
        y += speed;
    }

}

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

@Override
public void render(Canvas c, Paint p) {

    matrix.setTranslate((float)x, (float)y);

    if(alive) {
        matrix.postRotate(drawnAngle, (float) (x + width / 2), (float) (y + height / 2));
    } else {
        matrix.postRotate(angle, (float) (x + width / 2), (float) (y + height / 2));
        angle += speed * 2;
    }

    c.drawBitmap(getSprite(), matrix, p);

}

Переменная drawnAngle имеет значение 0 прямо сейчас, это заполнитель. Это была просто моя попытка найти нужное число, чтобы повернуть стрелку на.

1 Ответ

1 голос
/ 19 октября 2019

Так что я потратил часы, пытаясь понять это, и в тот момент, когда я решил написать о помощи, я понял это! Оказывается, в то время как я использовал радианы в первом фрагменте кода (фактическое движение), я должен был использовать градусы в фактическом повороте в этом последнем фрагменте!

Я изменил drawnAngle на (float)(angle * (180 / Math.PI)), и это сработало для меня!

Надеюсь, ни у кого больше нет этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...