cocos2dx Physics 物理世界
发布时间:2020-12-14 16:58:22 所属栏目:百科 来源:网络整理
导读:创建物理场景: 重写createScene Scene * HelloWorld ::createScene () { auto scene = Scene ::createWithPhysics (); scene - getPhysicsWorld() - setDebugDrawMask(PhysicsWorld ::DEBUGDRAW_ALL ); //显示调试信息 scene - getPhysicsWorld() - setGrav
创建物理场景: Scene* HelloWorld::createScene()
{
auto scene = Scene::createWithPhysics();
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); //显示调试信息
scene->getPhysicsWorld()->setGravity(Vec2(0.0,-100.0)); //设置重力
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
添加 addEdges 函数: Node* HelloWorld::addEdges()
{
//创建 body ,visibleSize表示body的大小, PhysicsMaterial表示材质,3表示边框的厚度
auto body = PhysicsBody::createEdgeBox(visibleSize,PhysicsMaterial(1,1,0),3);
body->setCategoryBitmask(4); //设置分类掩码
body->setContactTestBitmask(1 | 2 | 4); //设置接触掩码
body->setCollisionBitmask(1 | 2 | 4); //设置碰撞掩码
auto edges = Node::create(); //创建Node
edges->setPhysicsBody(body); //设置节点的body
edges->setPosition(visibleSize / 2); //居中
this->addChild(edges);
return edges;
}
添加 addBox 函数: Sprite* HelloWorld::addBox(Vec2 position)
{
PhysicsBody* body;
auto box = Sprite::create();
switch (random(0,1))
{
case 0:
box->initWithFile("red.png"); //设置精灵图片
body = PhysicsBody::createCircle(box->getContentSize().width / 2); //创建圆形body
body->setCategoryBitmask(1); //设置分类掩码
body->setContactTestBitmask(1 | 2 | 4); //设置接触掩码
body->setCollisionBitmask(1 | 2 | 4); //设置碰撞掩码
box->setPhysicsBody(body); //设置精灵的body
box->setPosition(position); //设置位置
this->addChild(box);
break;
case 1:
box->initWithFile("yellow.png");//设置精灵图片
body = PhysicsBody::createCircle(box->getContentSize().width / 2);
body->setCategoryBitmask(2); //设置分类掩码
body->setContactTestBitmask(1 | 2 | 4); //设置接触掩码
body->setCollisionBitmask(1 | 2 | 4); //设置碰撞掩码
box->setPhysicsBody(body); //设置精灵的body
box->setPosition(position); //设置位置
this->addChild(box);
break;
default:
break;
}
return box;
}
创建事件侦听器: //刚开始碰撞触发一次
contactListener->onContactBegin = [](PhysicsContact& contact){
//.........
return true; //下面解释返回值
};
//接触就会一直触发
contactListener->onContactPreSolve = [](PhysicsContact& contact,PhysicsContactPreSolve& solve){
//.........
return true; //下面解释返回值
};
首先解释CategoryBitmask, ContactTestBitmask, CollisionBitmask 三个代表含义, CategoryBitmask: 分类掩码 它们的作用如下: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |