2015-10-05 55 views
1

我是新上cocos2dx,並且這可能是一個愚蠢的錯誤,cocos2dx當我設置setPhysicsBody雪碧,雪碧了

我做了動畫,我的精靈和它的工作。然後我添加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);我可以看到我的屏幕上的精靈。我無法弄清楚那有什麼問題。感謝您的關注。

+0

您可以爲物理實體和精靈啓用調試幀。但是大多數情況下,精靈的物理和位置出了問題。所以我建議設置一個斷點,並看看你需要的精靈的位置。 – teivaz

+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); 

讓我知道這是否有幫助。