cocos2d-x之Box2d初试
物理引擎:用来模拟一套物理事件的物理代码。
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
#include <Box2D/Box2D.h>
#define RATIO 80.0f
class HelloWorld : public cocos2d::Layer,public b2ContactListener
{
private:
b2World *world;
b2Body *groundBody;
public:
static cocos2d::Scene* createScene();
virtual bool init();
void menuCloseCallback(cocos2d::Ref* pSender);
virtual void update(float dt);
virtual void BeginContact(b2Contact* contact);
void addRect(float x,float y,b2BodyType type);
void addGround();
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
//创建世界
world=new b2World(b2Vec2(0,-10));
world->SetContactListener(this);
addGround();
addRect(5,5,b2_dynamicBody);
//addRect(1,5,b2_kinematicBody);//漂浮物体,不受重力影响
scheduleUpdate();
return true;
}
void HelloWorld::update(float dt){
world->Step(dt,8,3);
Sprite *s;
for (b2Body *b=world->GetBodyList();b;b=b->GetNext()) {
//if (b->GetType()==b2_dynamicBody) {
//log("%f",b->GetPosition().y);
if (b->GetUserData()) {
s=(Sprite*)b->GetUserData();
s->setPosition(b->GetPosition().x*RATIO,b->GetPosition().y*RATIO);
}
//}
}
}
void HelloWorld::BeginContact(b2Contact *contact){
if (contact->GetFixtureA()->GetBody()==groundBody||contact->GetFixtureB()->GetBody()==groundBody) {
log("有物体落在了地板上");
}
}
void HelloWorld::addRect(float positionX,float positionY,b2BodyType type){
//config box2d
b2BodyDef def;
def.position=b2Vec2(positionX,positionY);
//def.linearVelocity=b2Vec2(1,0);
//def.linearVelocity=b2Vec2(0,10);
def.type=type;
groundBody=world->CreateBody(&def);
b2PolygonShape shape;
shape.SetAsBox(0.5,0.5);
b2FixtureDef fixtureDef;
fixtureDef.density=1;
fixtureDef.friction=0.3;
fixtureDef.shape=&shape;
groundBody->CreateFixture(&fixtureDef);
//config cocos shape
auto s=Sprite::create();
s->setTextureRect(Rect(0,0,0.5*2*RATIO,0.5*2*RATIO));
addChild(s);
//s->setPosition(Point(def.position.x*RATIO,def.position.y*RATIO));
groundBody->SetUserData(s);
}
void HelloWorld::addGround(){
b2BodyDef def;
def.position=b2Vec2(400/RATIO,0);
def.type=b2_staticBody;
b2Body *body=world->CreateBody(&def);
b2PolygonShape groundShape;
groundShape.SetAsBox(400/RATIO,0.5);
b2FixtureDef fixureDef;
fixureDef.density=1;
fixureDef.friction=0.3;
fixureDef.shape=&groundShape;
body->CreateFixture(&fixureDef);
}
void HelloWorld::menuCloseCallback(Ref* pSender)
{
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
cocos2d-x之Box2d初试的更多相关文章
- Cocos2d Box2D之碰撞检测
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Box2D中碰撞事件由b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象 ...
- 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检测
在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact ...
- 实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D
我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用.这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触 ...
- 【转】Enable ARC in a Cocos2D Project: The Step-by-Step-How-To-Guide Woof-Woof!
On April 5, 2012, in idevblogaday, by Steffen Itterheim http://www.learn-cocos2d.com/2012/04/enablin ...
- cocos2d-x 3.10 显示Box2d 调试视图
1.将cocos2d-x-3.10\tests\cpp-tests\Classes\Box2DTestBed目录下的GLES-Render.h和GLES-Render.cpp拷贝到当前项目的Class ...
- 笔记:利用 Cocos2dx 3.2 与 Box2D制作一个跑酷游戏(上)
最近写lua写得没有力气了,所以想让脑袋放松一下,刚好看到有人在用swift做游戏: Swift游戏实战-跑酷熊猫 于是脑子一短路,就想到了利用这些素材来做一个游戏. 本来不想记笔记的,但是由于选择物 ...
- 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检測
在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact ...
- Cocos2d 之FlyBird开发---GamePlay类
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 这个是游戏的核心部分:(FlyBird游戏重中之重) 创建一个物理世界(世界设置重力加速度) 在物理世界中添加一个动态的刚体(小鸟) 在物 ...
- cocos2dx 实现flappybird
前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h ...
随机推荐
- MySQL+Sphinx实现全文搜索
最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧. 它能够提高你的查询的速度,这个不是一般的快. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,Pos ...
- Mysql创建用户的三种基本方法
1.采用create user e.g. create user 'username'@'host' identified by 'password'; 2.采用grant语句 e.g. gran ...
- Maven提高篇系列之(一)——多模块 vs 继承
这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...
- PHP+MySql例子
对于熟悉做网站的人来说,要想网站做成动态的,肯定要有数据库的支持,利用特定的脚本连接到数据库,从数据库中提取资料.向数据库中添加资料.删除资料等.这里我通过一个实例来说明如何用php连接到数据库的. ...
- 自己通过Cygwin编译的windows下的redis3.2.6
采用方法:https://my.oschina.net/maxid/blog/186506 方法中在3.2.6未找到src/redis.h文件 未修改 方法中 /deps/hiredis/net.c ...
- 重新想象 Windows 8.1 Store Apps (83) - 文件系统的新特性
[源码下载] 重新想象 Windows 8.1 Store Apps (83) - 文件系统的新特性 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之文件系统的新特 ...
- 与众不同 windows phone (39) - 8.0 联系人和日历
[源码下载] 与众不同 windows phone (39) - 8.0 联系人和日历 作者:webabcd 介绍与众不同 windows phone 8.0 之 联系人和日历 自定义联系人存储的增删 ...
- 关于spring配置文件properties的问题
我遇到的问题是我将properties放在src下面的包中不能被spring扫描到,会报配置文件找不到的错误.但是如果放在src目录下就能够被spring扫描到,现在还不知道为什么这样,记个笔记,留到 ...
- WEB前端开发和调试的工具
前端开发在线课程: http://yun.lu/student/course/list/8 1.HBuilder:WEB开发IDE工具 hbulider,内核是eclipse,Dcloud公司出品 ...
- 什么是CSR证书申请文件?
CSR是Cerificate Signing Request的英文缩写,即证书请求文件,在多方之间在互联网上安全分享数据的公钥基础架构PKI系统中,CSR文件必须在申请和购买SSL证书之前创建.也 ...