Exemple #1
0
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));
}
Exemple #2
0
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);
    }
}