【cocos2d-x游戏开发】使用关节

前端之家收集整理的这篇文章主要介绍了【cocos2d-x游戏开发】使用关节前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在场景中我们可以使用关节来让两个刚体联系在一起。

首先创建一个物理世界

Scene* HelloWorld::createScene()
{
    // 'scene' is an autorelease object
	auto scene = Scene::createWithPhysics();                                    
	scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
    
    // 'layer' is an autorelease object
    auto layer = HelloWorld::create();
	layer->setPhyworld(scene->getPhysicsWorld());
    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

然后在init函数里面设置世界

//定义世界的边界  
	auto body = PhysicsBody::createEdgeBox(visibleSize,PHYSICSBODY_MATERIAL_DEFAULT,5.0f);                     
	auto edgeNode = Node::create();                                         
	edgeNode->setPosition(Vec2(visibleSize.width / 2,visibleSize.height / 2));               
	edgeNode->setPhysicsBody(body);       //把世界的边界加到这个节点上                               
	this->addChild(edgeNode);                    //把世界节点加到场景中                        


	setTouchEnabled(true);     
	//设置为单点触摸  
	setTouchMode(Touch::DispatchMode::ONE_BY_ONE);

然后响应鼠标点击函数

bool HelloWorld::onTouchBegan(Touch* touch,Event* event)//单点触摸
{
	Vec2 location = touch->getLocation();//获取触摸点坐标
	addNewSpriteAtPosition(location);
	return false;
}

然后在点击位置添加精灵


void HelloWorld::addNewSpriteAtPosition(Vec2 p)
{      
	Size visibleSize = Director::getInstance()->getVisibleSize();//获取屏幕尺寸
	Vec2 origin = Director::getInstance()->getVisibleOrigin();//获取窗口原点坐标

	auto BoxA = Sprite::create("1.png");//创建精灵
	BoxA->setPosition(origin + p);

	auto BoxABody = PhysicsBody::createBox(BoxA->getContentSize());//创建body
	BoxA->setPhysicsBody(BoxABody);//把body绑定到制定精灵上
	addChild(BoxA,10,100);//把带有身体的精灵添加到场景中
	/*addChild函数的参数有三个:
	第一个就是精灵的指针
	第二个就是绘制层的顺序,默认参数值为0,表示最高优先层导入,该值越大表示该层在最后加载(在最高一层)
	第三个参数为Tag标记,如果以后在该类的其他方法中要访问这个变量时可以通过调用函数getChildByTag来取回该对象,
	然后可以对该对象进行操作,这样做的好处是降低系统资源的占用*/

	auto BoxB = Sprite::create("2.png");
	BoxB->setPosition(origin + p + Vec2(0,-120));
	auto BoxBBody = PhysicsBody::createBox(BoxB->getContentSize());
	BoxB->setPhysicsBody(BoxBBody);
	addChild(BoxB,20,101);
	//BoxABody->setContactTestBitmask(0xFFFFFFFF);
	//BoxBBody->setContactTestBitmask(0xFFFFFFFF);

	auto world = this->getScene()->getPhysicsWorld();//从场景中获得物理世界的对象
	PhysicsJointDistance* joint = PhysicsJointDistance::construct(BoxABody,BoxBBody,Vec2(0,0),BoxB->getContentSize().width / 2));
	//创建一个距离节点
	world->addJoint(joint); //把节点加入到场景中

}

下面是效果



原文链接:https://www.f2er.com/cocos2dx/346444.html

猜你在找的Cocos2d-x相关文章