创建对象
auto border = Sprite::create("border.png");
Size borderSize = border->getContentSize();
auto body = PhysicsBody::createBox(borderSize);
body->setDynamic(false);
body->setCategoryBitmask(1);
body->setCollisionBitmask(1);
body->setContactTestBitmask(1);
border->setPhysicsBody(body);
border->setPosition(pos);
//设置标签
border->setTag(ObjectTag_Border);
//加载地图
TMXTiledMap* map = TMXTiledMap::create("tg1.tmx");
this->addChild(map);
//加载怪物对象层的所有对象
TMXObjectGroup* objGroup = map->getObjectGroup("monster");
ValueVector objects = objGroup->getObjects();
for(const auto v : objects)
{
const ValueMap dict = v.asValueMap();
int id = dict.at("id").asInt();
float fShowTime = dict.at("ShowTime").asFloat();
int iPosX = dict.at("x").asInt();
int iPosY = dict.at("y").asInt();
/* 创建怪物对象,并保存起来 */
Monster* monster = Monster::create(id);
monster->setID(id);
monster->setfShowTime(fShowTime);
monster->setiPosX(iPosX);
monster->setiPosY(iPosY);
/* 保存怪物对象 */
m_monsterVec.pushBack(monster);
}
auto playerSp = Sprite::create("CloseNormal.png");
this->addChild(playerSp);
auto body = PhysicsBody::createCircle(playerSp->getContentSize().width * 0.4f);
//getShape(0)获取刚体的皮肤
//setFriction(0)设置摩擦力
//setRestitution(1.f)设置弹力
body->getShape(0)->setFriction(0);
body->getShape(0)->setRestitution(1.f);
//设置碰撞监听
body->setCategoryBitmask(1);
body->setCollisionBitmask(1);
body->setContactTestBitmask(1);
this->setPhysicsBody(body);
//给角色添加推力
this->getPhysicsBody()->applyImpulse(Vect(0,-40000));
//设置标签
this->setTag(ObjectTag_Player);
this->getPhysicsBody()->applyImpulse(Vect(50000,0));
//创建物理场景
auto scene = Scene::createWithPhysics();
//微重力世界
Vect gravity(0,-0.5f);
//设置重力方向
scene->getPhysicsWorld()->setGravity(gravity);
//开启测试模式
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);
//创建一个边界
Size visibleSize = Director::getInstance()->getVisibleSize();
/*
创建一个空心盒子刚体,作为游戏世界的边界(避免游戏内的物体跑出屏幕)
参数分别是刚体大小、材质、边线厚度
*/
auto body = PhysicsBody::createEdgeBox(Size(visibleSize.width,visibleSize.height),PHYSICSBODY_MATERIAL_DEFAULT,3);
//创建一个节点,用于承载刚体,这样刚体就能参与到游戏的物理世界
auto node = Node::create();
node->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
node->setPhysicsBody(body);
scene->addChild(node);
auto layer = TollgateScene::create();
scene->addChild(layer,10);
auto backgroundLayer = BackgroundLayer::create();
scene->addChild(backgroundLayer,0);
auto monsterLayer = MonsterLayer::create();
scene->addChild(monsterLayer,1);
layer->monsterLayer = monsterLayer;