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 ...
随机推荐
- thread_fork/join并发框架2
转自 http://blog.csdn.net/mr_zhuqiang/article/details/48300229 三.使用异步方式 invokeAll(task1,task2); 是同步方式 ...
- Microsoft Visual Studio 2012 文档 下载地址 vs2012 中文帮助文档
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=34794 下载地址: http://download.microsoft. ...
- MVC显示详细记录Without Entity Framework
看过此篇<MVC用非Entity Framework将数据显示于视图(二)>http://www.cnblogs.com/insus/p/3364482.html 了解到把数据库中数据表的 ...
- 响应式布局(Responsive layout,RL)的简单Demo
★背景: 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,简而言之,就是一个网站能够兼容多个终端--而不是为每个终端做一个特定的版本.这个概念是为解决 ...
- 调试报“The source file is different from when the module was built.”问题的解决
It is related to the checksums which is used to ensure that you are stepping in matching source. You ...
- c#通用递归生成无限层级树
NewsType结构: Id ParentId Name children(List<NewsType>) public void LoopToAppendChildren(List< ...
- 当使用母版页时JavaScript客户端获取服务器控件的Id
当使用MasterPage.UserControl等容器时,为了避免控件的重复命名,asp.net会自动将容器中的控件生成一个ClientID(Control Tree中的可生成,否则不会生成). J ...
- C#中的接口实现多态
我们都知道虚方法实现多态,抽象方法实现多态等,我们今天来看看如何使用接口实现多态 1.首先我们先要来了解了解什么是接口,它存在的意识 01.接口就是为了约束方法的格式(参数和返回值类型)而存在的 02 ...
- [小北De编程手记] : Lesson 08 - Selenium For C# 之 PageFactory & 团队构建
本文想跟大家分享的是Selenium对PageObject模式的支持和自动化测试团队的构建.<Selenium For C#>系列的文章写到这里已经接近尾声了,如果之前的文章你是一篇篇的读 ...
- javascript的错误处理
1 onerror事件,实例代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind= ...