cocos2dx当我将setPhysicsBody设置为sprite时,sprite消失了

时间:2015-10-05 12:49:03

标签: c++ animation cocos2d-x sprite collision

我是cocos2dx的新人,这可能是一个愚蠢的错误,

我为我的精灵制作了动画,但它确实奏效了。然后我将PhysicsBody添加到我的精灵中以进行碰撞。之后当我开始游戏时,Sprite不在屏幕上,我没有收到任何错误。我检查了两次重力。我的代码在这里

CCSpriteFrameCache* frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
frameCache->addSpriteFramesWithFile("RedFurryFall.plist");
CCSpriteBatchNode* spriteSheet = CCSpriteBatchNode::create("RedFurryFall.png");
this->addChild(spriteSheet);
Vector<SpriteFrame*> RedFurryFallFrames(4);
for (int i = 1; i < 5; i++) {
    CCString * fileName = CCString::createWithFormat("RedFurryFall%d.png", i);
    CCSpriteFrame* frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(fileName->getCString());
    RedFurryFallFrames.pushBack(frame);
}

CCAnimation* runAnim = CCAnimation::createWithSpriteFrames(RedFurryFallFrames, 0.15);
CCSprite* redFurry = CCSprite::createWithSpriteFrameName("RedFurryFall1.png");

CCSize winSize = CCDirector::sharedDirector()->getWinSize();
redFurry->setPosition(ccp(winSize.width*0.5, winSize.height*0.85));
redFurry->setScale(0.50);

auto physicsBody = PhysicsBody::createCircle(redFurry->getContentSize().width/2, PhysicsMaterial(0.1, 1, 0));
physicsBody->setDynamic(false);
physicsBody->setGravityEnable(false);
redFurry->setPhysicsBody(physicsBody);

CCAction*action = CCRepeatForever::create(CCAnimate::create(runAnim));
redFurry->runAction(action);
spriteSheet->addChild(redFurry);

当我删除此redFurry->setPhysicsBody(physicsBody);时,我可以在屏幕上看到我的精灵。我无法弄清楚那是什么问题。谢谢你看。

1 个答案:

答案 0 :(得分:0)

之前我遇到过类似的问题(尽管我使用的是box2D)。物理引擎使用米作为其度量而不是像素,因此将physicsBody位置设置为screenWidth / 2将使它远离屏幕。我建议你做类似下面的事情。

float PTM_RATIO = 32.0; // Pixel to meter ratio
auto physicsBodyPosition = vec2((winSize.width*0.5) / PTM_RATIO,
                                (winSize.height*0.5) / PTM_RATIO);

如果有帮助,请告诉我。