Qt Graphics View & Box2D
来源:互联网 发布:学计算机编程的工作吗 编辑:程序博客网 时间:2024/06/06 23:52
项目文件:
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = actorTEMPLATE = appSOURCES += main.cpp\ widget.cppHEADERS += widget.hFORMS += widget.uiwin32{ Box2D = D:/Dev/Box2D}macx{ Box2D = /Users/spoon/Dev/Box2D}INCLUDEPATH += $$Box2D/includeLIBS += -L$$Box2D/lib \ -lBox2Dwidget.h:
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QGraphicsView>#include <QGraphicsScene>#include <Box2D/Box2D.h>#include <QVector>namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();protected: void timerEvent(QTimerEvent *event);private: void createWall(); void createBall();private: Ui::Widget *ui; QGraphicsScene* scene; QGraphicsView* view; b2World* world; QVector<b2Body*> balls;};#endif // WIDGET_Hwidget.cpp:
#include "widget.h"#include "ui_widget.h"#include <QTransform>#include <QHBoxLayout>#include <QGraphicsEllipseItem>#include <QTimer>Widget::Widget ( QWidget* parent ) : QWidget ( parent ), ui ( new Ui::Widget ){ ui->setupUi ( this ); balls.resize(5); QTransform transform; scene = new QGraphicsScene; scene->setSceneRect ( 0, 0, 800 , 600 ); scene->addRect(QRect(0,0,800,600),QPen(Qt::black)); view = new QGraphicsView ( scene ); view->setFixedSize ( 900, 700 ); transform.reset(); transform.scale ( 1 , -1 ); view->setTransform ( transform ); QHBoxLayout* layout = new QHBoxLayout; layout->addWidget ( view ); this->setLayout ( layout ); b2Vec2 gravity ( 0.0f, -10.0f ); world = new b2World ( gravity ); createWall(); createBall(); this->startTimer ( 1000 / 60 );}Widget::~Widget(){ delete world; delete ui;}void Widget::timerEvent ( QTimerEvent* event ){ world->Step ( 1.0f / 60.0f, 8, 3 ); for(int i = 0; i <= 4;i++){ QGraphicsEllipseItem* item =(QGraphicsEllipseItem* ) balls[i]->GetUserData(); item->setPos(balls[i]->GetPosition().x*30,balls[i]->GetPosition().y*30); } QWidget::timerEvent ( event );}void Widget::createWall(){ b2BodyDef groundBodyDef; groundBodyDef.position.Set ( scene->sceneRect().width()/2/30.0 , -5/30.0 ); b2Body* groundBody = world->CreateBody ( &groundBodyDef ); b2PolygonShape groundBox; groundBox.SetAsBox ( scene->sceneRect().width()/2/30.0 , 5/30.0 ); groundBody->CreateFixture ( &groundBox, 0.0f ); QGraphicsRectItem* groundItem = new QGraphicsRectItem ( 0, 0, scene->sceneRect().width(), 10 ); groundItem->setBrush ( QBrush ( Qt::red ) ); groundBody->SetUserData ( groundItem ); scene->addItem ( groundItem );}void Widget::createBall(){ QGraphicsEllipseItem * ballItem; b2BodyDef ball; for(int i = 0; i <= 4;i++){ ball.type = b2_dynamicBody; ball.linearDamping = 0.1*i; ball.position.Set ( (50+100*i)/30.0 , 600/30.0 ); balls [i] = world->CreateBody ( &ball ); ballItem = new QGraphicsEllipseItem(0,0,1*30,1*30); ballItem->setBrush(Qt::red); ballItem->setPos(50+100*i,600); scene->addItem(ballItem); balls[i]->SetUserData(ballItem); b2CircleShape ballShape; ballShape.m_p.Set(0,0); ballShape.m_radius = 1; b2FixtureDef ballFixtureDef; ballFixtureDef.restitution = 0.2*i; ballFixtureDef.shape = &ballShape; ballFixtureDef.density = 13.0f; balls[i]->CreateFixture ( &ballFixtureDef ); }}
效果图:
2 0
- Qt Graphics View & Box2D
- Qt Graphics View Framework
- Qt Graphics View Framework
- Qt Graphics View 框架
- QT Graphics View 框架
- Qt Graphics View 框架
- Qt Graphics View 框架
- Qt Graphics View 框架
- Qt Graphics View 框架
- Qt Graphics View 框架
- Qt Graphics View Framework
- QT Graphics View 框架介绍
- QT的Graphics View柜架
- Optimizing Qt 4 Graphics View
- QT的Graphics View柜架
- QT 中Graphics View柜架
- Qt 的Graphics View框架
- QT 的 Graphics View 系统
- android去除掉界面头标签与状态栏(包含继承AppCompatActivity)的V7包下
- ubunut1604下配置ocfs2访问iscsi
- Animation使用入门
- 学术达人
- 关于Spring security中自定义UserDetailService无法注入DAO的问题
- Qt Graphics View & Box2D
- 467. Unique Substrings in Wraparound String
- 为什么分页机制中逻辑地址空间是一维的,而分段机制中逻辑地址空间是二维的?
- 44
- 编译android源码时,jack server 出现out of memory error 错误的解决方法
- CRF和MRF概率模型的关系
- 在驱动中创建文件(/sys 中查询)
- c++适配器代码示例
- IE11浏览器缓存bug