SDL在正确的位置渲染box2d

时间:2015-11-12 20:08:07

标签: c++ sdl box2d

我花了很多时间尝试在sdl中从this tutorial渲染汽车。但出于某种原因,我无法在正确的位置渲染它。我试图让汽车与一个静态物体碰撞(一棵树也会被渲染),但碰撞永远不会在正确的位置。

在我的车里,我做了一个返回轮胎的功能,所以我可以将它们作为参考点(我知道如果它在轮胎之间,我会将车身正确渲染)。

为了渲染汽车,我制作了以下代码。

void World::drawObject(float nwidth, float nheight, float nx, float ny, float nangle)
{
    float angle = nangle * RADTODEG;
    //To get the center
    float x = nx - (nwidth / 2);
    float y = ny + (nheight / 2);

    //- before y to mirror axis
    SDL_Rect drawingRect = { x * scale, - y * scale, nwidth * scale, nheight * scale };
    SDL_RenderCopyEx(renderTarget, textureCar, NULL, &drawingRect, transfrom(angle), NULL, SDL_FLIP_VERTICAL);
}

void World::drawCar(){

    SDL_RenderClear(renderTarget);

    drawObject(6, 10, myCar->getB2DPosition().x, myCar->getB2DPosition().y, myCar->getAngleB2D());
    drawObject(6, 10, myTree->getB2DPosition().x, myTree->getB2DPosition().y, myTree->getAngleB2D());

    //get all tires and render them
    std::vector<TDTire*> tires = myCar->getTires();
    for (int i = 0; i < tires.size(); i++)
    {
        drawObject(0.5, 1.25, tires[i]->getX(), tires[i]->getY(), 0);
    }
    SDL_RenderPresent(renderTarget);
}

//used to get the mirrored angle.
int World::transfrom(float dgrs)
{

    int add360 = dgrs + 360;
    int newAngle = 0;
    int gradenBox2d = add360 % 360;
    if (gradenBox2d < 90)
    {
        int temp = 90 - gradenBox2d;
        newAngle = 90 + temp;
    }
    if (gradenBox2d < 180)
    {
        int temp = gradenBox2d - 90;
        newAngle = 90 - temp;
    }
    if (gradenBox2d < 270)
    {
        int temp = 270 - gradenBox2d;
        newAngle = 270 + temp;
    }
    else{
        int temp = gradenBox2d - 270;
        newAngle = 270 - temp;
    }
    int newNewAngle = newAngle % 360;
    return newNewAngle;
}

根据我目前的代码,汽车总是在前轮胎后面。

当我调用getB2Position和getAngle时,我返回

return m_body->GetPosition();
return m_body->GetAngle();

enter image description here enter image description here enter image description here enter image description here

我用箭头作为图像来显示方向。 欢迎任何帮助。

0 个答案:

没有答案