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

标签 c++ animation cocos2d-x sprite collision

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

我为 Sprite 制作了动画,效果很好。然后我将 PhysicsBody 添加到我的 sprite 中以进行碰撞。之后,当我开始游戏时,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); 时,我可以在屏幕上看到我的 Sprite 。我不知道那有什么问题。感谢您观看。

最佳答案

我之前遇到过类似的问题(虽然我使用的是 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);

如果这有帮助,请告诉我。

关于c++ - cocos2dx 当我将 setPhysicsBody 设置为 sprite 时,sprite 消失了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32949063/

相关文章:

c++ - Cocos2d-x 中的文本环绕

c++ - 点击不起作用

c++ - cocos2dx Action 错误: liquid, wave3d和lens3d

c++ - 尝试 push_back() 结构会导致 2D vector 中的信息不正确

C++:std::variant 可以容纳 vector 、 map 和其他容器吗?

iOS:表格重新加载改变布局

jquery - IE9 中的动画问题。需要一个 jquery 回退

javascript - 计算 Angular 的 $digest 周期

C++ 强制初始化表达式中左值的常量性

c++ - 在 STL 中使用 void* 作为固定宽度的记录