6 #define MAEMO_WIDTH 800
7 #define MAEMO_HEIGHT 480
10 #define BOX2D_HEIGHT 6
13 BoxItem::BoxItem(QRectF rect, bool isStatic)
14 :QGraphicsPolygonItem()
16 setPolygon(QPolygonF(rect));
20 mNeedRemoveFromWorld = false;
25 BoxItem::BoxItem(QPolygonF poly, bool isStatic )
26 :QGraphicsPolygonItem()
33 void BoxItem::setup(b2World *world)
35 if ( polygon().size() > 8)
37 qDebug()<<"Error! Cannot build a physics polygon with more 8 vertex...";
41 double angleRad = rotation() * M_PI / 180;
44 //#define MAEMO_WIDTH 800
45 //#define MAEMO_HEIGHT 480
47 //#define BOX2D_WIDTH 10
48 //#define BOX2D_HEIGHT 6
52 m_bodyDef.userData = this;
53 m_bodyDef.position.Set(pos().x() * 10/800, pos().y() * 6/480);
54 m_bodyDef.angle = angleRad;
56 m_polygonDef.friction = 0.3f;
57 m_polygonDef.density = 1.0f;
58 m_polygonDef.restitution = 0.5f;
59 m_polygonDef.vertexCount = polygon().count() - 1;
60 //---CONSTRUCT A POYLGON SHAPE
62 QPolygonF poly = polygon();
63 poly.remove(poly.count()-1);
64 foreach (QPointF p, poly)
66 m_polygonDef.vertices[i].Set(p.x()* 10/800,p.y()* 6/480);
70 m_body = world->CreateBody(&m_bodyDef);
71 m_body->CreateShape(&m_polygonDef);
73 m_body->SetMassFromShapes();
77 void BoxItem::updatePhysics()
82 double factorX =BOX2D_WIDTH / MAEMO_WIDTH;
83 double factorY =BOX2D_HEIGHT / MAEMO_HEIGHT;
85 double angleDeg = m_body->GetAngle() * 180 / M_PI;
86 setPos(m_body->GetPosition().x*800/10, m_body->GetPosition().y*480/6);
87 setRotation(angleDeg);
91 void BoxItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
94 painter->setBrush(brush());
95 painter->setPen(pen());
96 painter->drawPolygon(polygon());
101 b2Body* BoxItem::body()