cocos2dx中的低FPS问题

时间:2013-11-09 14:20:46

标签: cocos2d-x

我已完成以下功能,它在更新中包含26 if else块。因此它反映了FPS的小幅下降。

我使用动态强制转换检查了26对象。取决于形状,我检查了逻辑。

这是编码。

void WagonNode::update(float dt)
{
int found = 0;
for (int32 i = 0; i < kMaxContactPoints100 && found < contactPointCount100_; i++)
{
    ContactPoint100* point = contactPoints100_ + i;
    b2Fixture *otherFix = point->otherFixture;
    if( otherFix )
    {

        found++;
        b2Body *otherBody =  otherFix->GetBody();
        BodyNode *otherNode = (BodyNode*) otherBody->GetUserData();

        if (dynamic_cast<ShapeA*>(otherNode) != NULL)
        {
            tagWord(CCString::create("A"));

        }
        else if (dynamic_cast<ShapeB*>(otherNode) != NULL)
        {
             tagWord(CCString::create("B"));

        }
        else if (dynamic_cast<ShapeC*>(otherNode) != NULL)
        {
            tagWord(CCString::create("C"));
        }
        else if (dynamic_cast<ShapeD*>(otherNode) != NULL)
        {
            tagWord(CCString::create("D"));
        }
        else if (dynamic_cast<ShapeE*>(otherNode) != NULL)
        {
             tagWord(CCString::create("E"));

        }
        else if (dynamic_cast<ShapeF*>(otherNode) != NULL)
        {
            tagWord(CCString::create("F"));
        }
        else if (dynamic_cast<ShapeG*>(otherNode) != NULL)
        {
             tagWord(CCString::create("G"));
        }
        else if (dynamic_cast<ShapeH*>(otherNode) != NULL)
        {

            tagWord(CCString::create("H"));

        }
        else if (dynamic_cast<ShapeI*>(otherNode) != NULL)
        {
            tagWord(CCString::create("I"));

        }
        else if (dynamic_cast<ShapeJ*>(otherNode) != NULL)
        {
             tagWord(CCString::create("J"));

        }
        else if (dynamic_cast<ShapeK*>(otherNode) != NULL)
        {
             tagWord(CCString::create("K"));

        }
        else if (dynamic_cast<ShapeL*>(otherNode) != NULL)
        {
             tagWord(CCString::create("L"));

        }
        else if (dynamic_cast<ShapeM*>(otherNode) != NULL)
        {
            tagWord(CCString::create("M"));

        }

      etc...


    }
}

}

如果上述编码有任何变化,对我有很大帮助。

任何人都可以协助我处理或稳定FPS吗?

1 个答案:

答案 0 :(得分:0)

动态投射很慢,可能是这里的问题。在这种情况下,您可以尝试使用typeid来解析动态类型:

示例:

    if (typeid (*othernode) == typeid (ShapeA)) 
    {
      tagWord(CCString::create("A"));
    } elseif
    ...

另一件事是,你在那里创建了很多字符串,你可能想检查是否会导致性能问题。使用分析器找出实际的瓶颈。