@EpIvIaK

Raylib Texture, Rectangle. Rotation как поворачивать Rectangle?

Приветствую. Пользовался ли кто этой библиотекой?
У меня там есть 2д корпус танка, на ней башня танка.
Когда я поворачиваю корпус танка или башню, то меняя переменную угол.
И отображается всё как надо. Функция DrawTexturePro позволяет учесть и origin и угол.
Но проблема в том, что эта функция как бы визуально имитирует поворот в момент отрисовки.
Rectangle не поворачивается. Как бы визуальный обман. И это скажется при поиске коллизий и т.д.

DrawTexturePro(player.getTexture(), 
 (Rectangle){0.0f, 0.0f, 64, 104}, 
(Rectangle){player.getRect().x, player.getRect().y, 64, 104},
Vector2{player.getRect().width / 2, player.getRect().height - 10}, player.getAngle(), WHITE);

Ну и башня схоже.

В update корпуса что-то типа такого.
float pos_x = (this->coordX + 32) - (sin(this->angle * this->mRad));
        float pos_y = (this->coordY + 190) - (cos(this->angle * this->mRad));
        float DX = (pos_x - (this->coordX  + 32));
        float DY = (pos_y - (this->coordY  + 190));

        if (IsKeyDown(KEY_RIGHT)){           
            this->angle += 1; 
        }
        if (IsKeyDown(KEY_RIGHT)){           
            this->angle += 1; 
        }
        if (IsKeyDown(KEY_LEFT)){
            this->angle -= 1;     //GetFrameTime() * 100 ;   
        }  
        if (IsKeyDown(KEY_UP)){
            // ВОТ ТУТ
            this->speed += 0.0001;
            //this->coordY += this->speed;//GetFrameTime() * 100 ;
            this->coordX += (DX );      
            this->coordY += (DY );    

        }
        if (IsKeyDown(KEY_DOWN)){
            this->speed += 0.0001;
            //this->coordY -= this->speed;//GetFrameTime() * 100 ;       
            this->coordX -= (DX * this->speed);      
            this->coordY -= (DY * this->speed);    

        }
        this->rect.x = this->coordX + this->getRect().width;
        this->rect.y = this->coordY + this->getRect().height;

Ну и в таком русле я всё это экспериментирую, башня схоже. Только так координаты подвязаны на координаты корпуса.

Короче говоря, в итоге текстуры поворачиваются, а Rectangle остаётся на месте. В итоге нарушаются все расчёты, не говоря уж о будущих коллизиях. 66047ee5a65c0441215254.png
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 1
@EpIvIaK Автор вопроса
Решил задачу. Правда уже на Golang + Ebiten, там получилось реализовать и повороты и расчёты и коллизии.
Помогла ссылка на статью, а так же ИИ.

Статья 2D Rotated Rectangle Collision. ИИ подсказал как написать код, а потом адаптировал всё под себя. Так как часть работы (повороты + поиск координат углов ректа при этом) уже была сделана.

Теперь новые проблемы, новые испытания. =)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы