void Widget::placeborders(){ double P=500,Q=300; QRectF lol2(P,Q,50,100); QGraphicsItem* lol = scene->addRect(lol2); lol->setTransformOriginPoint(P+25,Q+50); lol->setRotation(45); QGraphicsRectItem* lolI = new QGraphicsRectItem(P*scale,Q*scale,50*scale,100*scale); lolI->setTransformOriginPoint((P+25)*scale,(Q+50)*scale); lolI->setRotation(45); lol->setVisible(true); next = next->addToList(new rectangle(lolI,(P+25)*scale,(Q+50)*scale, lol,true,50*scale,100*scale)); QRectF top(0,0,990,10); QRectF left(0,0,10,690); QRectF right(980,0,10,690); QRectF bottom(0,680,990,10); QGraphicsRectItem* Rtop = new QGraphicsRectItem(0*scale,0*scale,990*scale,10*scale); QGraphicsRectItem* Rleft = new QGraphicsRectItem(0*scale,0*scale,10*scale,690*scale); QGraphicsRectItem* Rright = new QGraphicsRectItem(980*scale,0*scale,10*scale,690*scale); QGraphicsRectItem* Rbottom = new QGraphicsRectItem(0*scale,680*scale,990*scale,10*scale); QGraphicsItem* itop = scene->addRect(top); itop->setVisible(true); QGraphicsItem* ileft = scene->addRect(left); ileft->setVisible(true); QGraphicsItem* iright = scene->addRect(right); iright->setVisible(true); QGraphicsItem* ibottom = scene->addRect(bottom); ibottom->setVisible(true); next = next->addToList(new rectangle(Rtop,990/2*scale,5*scale, itop,true,990*scale,10*scale)); next = next->addToList(new rectangle(Rleft,5*scale,690/2*scale, ileft,true,10*scale,690*scale)); next = next->addToList(new rectangle(Rright,985*scale,690/2*scale, iright,true,10*scale,690*scale)); next = next->addToList(new rectangle(Rbottom,990/2*scale,685*scale, ibottom,true,990*scale,10*scale)); }
void B2WorldView::createWorldItems() { qDebug() << "~ " << __PRETTY_FUNCTION__; if(_world && _scene) { // create world ground QGraphicsRectItem *groundItem = _scene->addRect(-100, -0.5, 200, 1); groundItem->setBrush(Qt::gray); groundItem->setPos(0, -0.5); // ground body define b2BodyDef groundBD; groundBD.type = b2_staticBody; groundBD.position.Set(0.0f, 0.5f); // ground shape define b2PolygonShape groundSD; groundSD.SetAsBox(100.0f, 0.5f, b2Vec2(0.0f, 0.0f), 0); // ground fixture define b2FixtureDef groundFD; groundFD.shape = &groundSD; groundFD.density = 0.1f; groundFD.friction = 5.0f; b2Body* groundBody = _world->CreateBody(&groundBD); groundBody->CreateFixture(&groundFD); groundItem = _scene->addRect(-1.0, -2.0, 2.0, 4.0); groundItem->setBrush(Qt::blue); groundItem->setPos(-100.0, -1.0); groundSD.SetAsBox(1.0f, 2.0f, b2Vec2(-100.0f, 0.5f), 0); groundBody->CreateFixture(&groundFD); groundItem = _scene->addRect(-1.0, -2.0, 2.0, 4.0); groundItem->setBrush(Qt::blue); groundItem->setPos(100.0, -0.5); groundSD.SetAsBox(1.0f, 2.0f, b2Vec2(100.0f, 1.0f), 0); groundBody->CreateFixture(&groundFD); groundItem = _scene->addRect(-3.0, -0.5, 6.0, 1.0); groundItem->setBrush(Qt::blue); groundItem->setPos(5, -2.0); groundItem->setRotation(-(PI / 4.0 * 360.0) / (2 * PI)); groundSD.SetAsBox(3.0f, 0.5f, b2Vec2(5.0f, 1.5f), PI/4.0); groundBody->CreateFixture(&groundFD); groundItem = _scene->addRect(-3.0, -0.5, 6.0, 1.0); groundItem->setBrush(Qt::blue); groundItem->setPos(3.5, -1.5); groundItem->setRotation(-(PI / 8.0 * 360.0) / (2 * PI)); groundSD.SetAsBox(3.0f, 0.5f, b2Vec2(3.5f, 1.0f), PI/8.0); groundBody->CreateFixture(&groundFD); groundItem = _scene->addRect(-3.0, -0.5, 6, 1.0); groundItem->setBrush(Qt::blue); groundItem->setPos(9, -2.0); groundItem->setRotation(-(-PI / 4.0 * 360.0) / (2 * PI)); groundSD.SetAsBox(3.0f, 0.5f, b2Vec2(9.0f, 1.5f), -PI/4.0); groundBody->CreateFixture(&groundFD); groundItem = _scene->addRect(-3, -0.5, 6, 1.0); groundItem->setBrush(Qt::blue); groundItem->setPos(10.5, -1.5); groundItem->setRotation(-(-PI / 8.0 * 360.0) / (2 * PI)); groundSD.SetAsBox(3.0f, 0.5f, b2Vec2(10.5f, 1.0f), -PI/8.0); groundBody->CreateFixture(&groundFD); // add random shit // b2CircleShape circleShape; b2FixtureDef circleFixture; circleFixture.shape = &circleShape; circleFixture.density = 0.01; circleFixture.friction = 0.1; circleFixture.restitution = 0.5; for (int i = 0; i < 30; i++) { qreal radius = qrand()%20*0.01+0.02; QGraphicsEllipseItem* circle = _scene->addEllipse(-radius, -radius, radius*2, radius*2); circle->setBrush(Qt::green); circle->setPos(qrand()%35+15.0, -1.5); _circles << circle; circleShape.m_radius = radius; b2BodyDef circleBD; circleBD.type = b2_dynamicBody; circleBD.position.Set(circle->pos().x(), -circle->pos().y()); circleBD.allowSleep = true; circleBD.linearDamping = 0.1; circleBD.angularDamping = 0.1; b2Body* circleBody = _world->CreateBody(&circleBD); circleBody->CreateFixture(&circleFixture); _circleBodies << circleBody; } // create kart _kart = new B2Kart(_world, _scene); } }