joinToWorld函数创建碰撞刚体:
- void Monster::joinToWorld(Node* parent)
- {
- Sprite* sp = Sprite::createWithSpriteFrameName(m_sModelPath.asString().c_str());
-
- /* 创建刚体 */
- PhysicsBody* body = PhysicsBody::createBox(sp->getContentSize());
- body->setCategoryBitmask(1); // 0001
- body->setCollisionBitmask(1); // 0001
- body->setContactTestBitmask(1); // 0001
-
- /* 精灵居中 */
- sp->setPosition(Point(sp->getContentSize().width * 0.5f, sp->getContentSize().height * 0.5f));
-
- /* 精灵作为Monster的表现,添加到Monster身上 */
- this->addChild(sp);
-
- /* 设置怪物Tag类型 */
- this->setTag(ObjectTag_Monster);
-
- /* 精灵作为Monster的表现,Monster本身没有大小,所以要设置一下大小 */
- this->setContentSize(sp->getContentSize());
-
- /* 刚体添加到Monster本身,而不是精灵身上 */
- this->setPhysicsBody(body);
-
- /* 设置坐标 */
- this->setPosition(Point(getiPosX(), getiPosY()));
-
- /* Monster加入到物理世界 */
- parent->addChild(this);
-
- }
代码注释已经够详细的了,大概的意思就是:
1. 创建一个Sprite对象,用于表现Monster的样子
2. 创建一个刚体,用于做物理碰撞
3. 设置怪物Tag类型
4. 将刚体添加到Monster上
5. Monster根据自身属性进行设置(比如设置坐标,完整版还有出场音效、颜色之类的)
6. 将Monster添加到物理世界