Cocos2dx3.2 CrazyTetris 物理引擎使用初步
2014-11-26 15:34
176 查看
之前说过引擎中重要的内容如Sprite,游戏中的主人公及其他内容都可以用它来表现,但如果想要和现实世界更加相近,就需要应用物理学知识模拟物理世界。物理引擎就是将复杂的物理特性封装起来供开发者使用的一种工具。
完整的物理引擎非常复杂,但是本游戏中不需要那么多复杂的特性,因此我也就简单的了解了刚体加速碰撞的部分罢了。
本章就对cocos2dx3.2中的物理引擎的使用进行简单的介绍。
Cocos2dx引擎中采用了Box2D以及Chipmunk两个引擎,游戏中我使用的是Box2D物理引擎。
首先抛开物理引擎的各种复杂功能不管,就说本游戏中,就是要让下落的方块拥有重力、速度、碰撞等基本的物理属性。那实际上只需要两个概念,物理世界和刚体。
整体思想就是设置好物理世界,然后在这个世界中加入刚体方块,就可以实现简单的物理效果。
这里需要开始实现新的场景,也是主要的游戏场景——主游戏界面(GameView)。
如何创建场景也不在赘述,此时需要在创建该场景时,添加物理世界:
过程很简单,直接加在createScene方法中。
其中getPhysicsWorld方法就可以获得结点的物理世界。setGravity是重力设置(Vect和Vec2是一个,意思都是一个二维向量,形式上就和一个点Point一样)。
开启测试可以看到物理效果。因为物理世界和刚体添加进去都是完全看不见的,只能在实际游戏时感受到物理效果,而开启测试后,会根据对应的设置用红框显示相应的物理边界。这里的DEBUGDRAW_ALL就是显示所有的物理边界。该游戏中主要就是物理世界的边界和刚体的边界。
设置物理边界很好理解,就相当于地面一样,是一个刚体。本游戏中设置了一个封闭的矩形,边界宽度为3,默认材质。可以根据游戏的实际情况制作各种不一样的物理边界。
最后将物理边界添加进去即可。这里PhysicsBody并非继承自Node结点,他继承自Ref。根据之前博文中的渲染树思想,需要把它加入到结点中,然后将该结点添加到场景结点中。当然,直接用场景结点设置应该也是可以的。
另外,在游戏中添加刚体,上面的代码中也有演示。就是先创建:
然后再设置:
this->setPhysicsBody(body);
这里,如果是一个Sprite,this就是这个Sprite的指针,再把这个Sprite添加到场景中即可实现效果。
如此,就算是初步使用了物理引擎。
完整的物理引擎非常复杂,但是本游戏中不需要那么多复杂的特性,因此我也就简单的了解了刚体加速碰撞的部分罢了。
本章就对cocos2dx3.2中的物理引擎的使用进行简单的介绍。
Cocos2dx引擎中采用了Box2D以及Chipmunk两个引擎,游戏中我使用的是Box2D物理引擎。
首先抛开物理引擎的各种复杂功能不管,就说本游戏中,就是要让下落的方块拥有重力、速度、碰撞等基本的物理属性。那实际上只需要两个概念,物理世界和刚体。
整体思想就是设置好物理世界,然后在这个世界中加入刚体方块,就可以实现简单的物理效果。
这里需要开始实现新的场景,也是主要的游戏场景——主游戏界面(GameView)。
如何创建场景也不在赘述,此时需要在创建该场景时,添加物理世界:
//添加物理效果 //添加物理世界 Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); //微重力世界 Vect gravity(0, -50.0f); scene->getPhysicsWorld()->setGravity(gravity); //开启测试模式 // scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); //设置边界 auto body = PhysicsBody::createEdgeBox(Size(256, 506), PHYSICSBODY_MATERIAL_DEFAULT, 3); auto node = Node::create(); node->setPosition(Point(visibleSize.width/2, visibleSize.height/2)); node->setPhysicsBody(body); scene->addChild(node);
过程很简单,直接加在createScene方法中。
其中getPhysicsWorld方法就可以获得结点的物理世界。setGravity是重力设置(Vect和Vec2是一个,意思都是一个二维向量,形式上就和一个点Point一样)。
开启测试可以看到物理效果。因为物理世界和刚体添加进去都是完全看不见的,只能在实际游戏时感受到物理效果,而开启测试后,会根据对应的设置用红框显示相应的物理边界。这里的DEBUGDRAW_ALL就是显示所有的物理边界。该游戏中主要就是物理世界的边界和刚体的边界。
设置物理边界很好理解,就相当于地面一样,是一个刚体。本游戏中设置了一个封闭的矩形,边界宽度为3,默认材质。可以根据游戏的实际情况制作各种不一样的物理边界。
最后将物理边界添加进去即可。这里PhysicsBody并非继承自Node结点,他继承自Ref。根据之前博文中的渲染树思想,需要把它加入到结点中,然后将该结点添加到场景结点中。当然,直接用场景结点设置应该也是可以的。
另外,在游戏中添加刚体,上面的代码中也有演示。就是先创建:
auto body = PhysicsBody::create();
然后再设置:
this->setPhysicsBody(body);
这里,如果是一个Sprite,this就是这个Sprite的指针,再把这个Sprite添加到场景中即可实现效果。
如此,就算是初步使用了物理引擎。
相关文章推荐
- cocos2dx-3.0 中的物理引擎Box2D使用(四)
- cocos2dx3.2 物理引擎之碰撞
- cocos2dx3.2 物理引擎之碰撞
- [cocos2dx]cocos2dx3.x+lua中使用物理引擎
- cocos2dx-3.0 中的物理引擎Box2D使用(二)
- cocos2dx 3.0物理引擎新增特征以及使用
- cocos2dx 3.2中的物理引擎初探
- cocos2dx-3.0 中的物理引擎Box2D使用(一)
- cocos2dx-3.0 中的物理引擎Box2D使用(三)
- 在Ogre中使用Newton物理引擎SDK
- 怎样在cocos2d里面如何使用物理引擎box2d制作弹球游戏
- (译)在cocos2d里面如何使用物理引擎box2d:弹球
- (译)在cocos2d里面如何使用物理引擎box2d:弹球
- 【COCOS2DX-LUA 脚本开发之九】使用cocos2dx-LuaProxy便捷Lua项目快速使用cocos2dx引擎extensions扩展包
- ODE物理引擎使用
- cocos2d-x学习之路(12)--物理引擎box2d使用
- 在Ogre中使用Havok物理引擎(源码)
- 物理引擎Havok的一个简单实例(使用Ogre渲染)
- 在JavaFX中使用物理引擎JBox2D
- 物理引擎ODE在Microsoft Visual Studio2008下的编译和使用