Pregunta

tengo éxito la instalación de Box2D en mi proyecto. Pero, ¿cómo puedo hacer que un cuerpo? Asumo que estoy usando algo que los soportes de dibujo de polígonos. Sólo quiero averiguar las posiciones actuales de los vértices del polígono cuerpo, para dibujar con el motor.

Si usted me puede ayudar, estaré muy agradecido.

¿Fue útil?

Solución

lo encontré !!!

void Box2DUtils::DrawBody(SDL_Surface *buffer, b2Body *body, int fr, int fg, int fb, int falpha, int lr, int lg, int lb, int lalpha, bool aa)
{
    const b2Transform& xf = body->GetTransform();
    for (b2Fixture* f = body->GetFixtureList(); f; f = f->GetNext())
    {
        switch (f->GetType())
        {
        case b2Shape::e_circle:
        {
            b2CircleShape* circle = (b2CircleShape*) f->GetShape();

            b2Vec2 center = b2Mul(xf, circle->m_p);
            float32 radius = circle->m_radius;
            b2Vec2 axis = xf.R.col1;

            //m_debugDraw->DrawSolidCircle(center, radius, axis, color);
            if (falpha > 0)
            {
                filledCircleRGBA(buffer, center.x, center.y, (int) radius, fr, fg, fb, falpha);
            }
            if (lalpha > 0)
            {
                if (aa)
                {
                    aacircleRGBA(buffer, center.x, center.y, (int) radius, lr, lg, lb, lalpha);
                } else
                {
                    aacircleRGBA(buffer, center.x, center.y, (int) radius, lr, lg, lb, lalpha);
                }
            } else if (aa)
            {
                aacircleRGBA(buffer, center.x, center.y, (int) radius, fr, fg, fb, falpha);
            }

        }
            break;

        case b2Shape::e_polygon:
        {
            b2PolygonShape* poly = (b2PolygonShape*) f->GetShape();
            int32 vertexCount = poly->m_vertexCount;
            b2Assert(vertexCount <= b2_maxPolygonVertices);
            b2Vec2 vertices[b2_maxPolygonVertices];
            Sint16 xv[b2_maxPolygonVertices];
            Sint16 yv[b2_maxPolygonVertices];
            for (int32 i = 0; i < vertexCount; ++i)
            {
                vertices[i] = b2Mul(xf, poly->m_vertices[i]);
                xv[i] = (int) vertices[i].x;
                yv[i] = (int) vertices[i].y;
            }
            if (falpha > 0)
            {
                filledPolygonRGBA(buffer, xv, yv, (Sint16) vertexCount, fr, fg, fb, falpha);
            }
            if (lalpha > 0)
            {
                if (aa)
                {
                    aapolygonRGBA(buffer, xv, yv, (Sint16) vertexCount, lr, lg, lb, lalpha);
                } else
                {
                    polygonRGBA(buffer, xv, yv, (Sint16) vertexCount, lr, lg, lb, lalpha);
                }
            } else if (aa)
            {
                aapolygonRGBA(buffer, xv, yv, (Sint16) vertexCount, fr, fg, fb, falpha);
            }
            //m_debugDraw->DrawSolidPolygon(vertices, vertexCount, color);
        }
            break;
        }
    }
}

Otros consejos

El manual Box2D se refiere a un proyecto HelloWorld que se incluye en la descarga. La misma documentación también pasa a través de él paso a paso. Citando el manual:

  

El programa   crea una caja de tierra grande y una pequeña   cuadro dinámico. Este código no lo hace   contener cualquier gráfico. Todo lo que se verá   es la salida de texto en la consola de la   La posición de la caja con el tiempo.

Si usted no ha conseguido un rectángulo para el trabajo, esto debería ayudar a empezar.

Debe utilizar Mundo-> SetDebugDraw (y myDebugDraw) y establecer las banderas de dibujo apropiadas para hacer que los diversos aspectos del mundo de la física (formas, juntas, centro de gravedad, etc.) banderas de dibujo se establecen a través de myDebugDraw.SetDebugFlags (banderas ).

myDebugDraw es una instancia de b2Draw (b2DebugDraw en versiones 2.1.2 y anteriores) que la mayoría de "plataformas" tienen una aplicación fácilmente disponibles. Durante su devolución de llamada representación, utilice World-> DrawDebugData () y el contenido apropiado será dibujado a través de la instancia de myDebugData.

Esperamos que esto no iba a confusión, pues la brevedad del mensaje. Todo esto está cubierto en la documentación Box2D.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top