Cocos2d x cocos2dx中的低FPS问题
我已经完成了下面的函数,它在更新中包含26个if-else块。因此,它反映了FPS的微小下降 我已经使用动态铸造检查了26个对象。根据形状,我检查了逻辑 这是代码Cocos2d x cocos2dx中的低FPS问题,cocos2d-x,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*
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...
}
}
void WagonNode::更新(float dt)
{
int=0;
对于(int32 i=0;iotherFixture;
如果(其他修复)
{
发现++;
b2Body*otherBody=otherFix->GetBody();
BodyNode*otherNode=(BodyNode*)otherBody->GetUserData();
if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“A”);
}
else if(动态_转换(其他节点)!=NULL)
{
标语(CCString::create(“B”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“C”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“D”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“E”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“F”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“G”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“H”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“I”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“J”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“K”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“L”);
}
else if(动态_转换(其他节点)!=NULL)
{
标记词(CCString::create(“M”);
}
等
}
}
}
如果上面的编码有任何变化,它将对我帮助很大
有人能帮我处理或稳定FPS吗?动态播放速度慢,可能是这里的问题。在这种情况下,您可以尝试使用typeid解析动态类型: 例如:
if (typeid (*othernode) == typeid (ShapeA))
{
tagWord(CCString::create("A"));
} elseif
...
另一件事是,您在那里可能会创建很多字符串,您可能需要检查这是否会导致性能问题。使用探查器找出实际的瓶颈。不要在模拟器上使用FPS作为任何指示。在设备上测量。另外,对于obj-c中的这种情况(不确定您是否可以在您的上下文中使用),我会在每个Shape*中携带一个属性,比如“keyForTagWord”,一个字符串,然后使用它。以时间换取空间。对于类工厂也很有用。你分析过应用程序并指出fps下降的原因就在于这个方法吗?如果不是,那么试图优化它将是毫无意义的。但我确实看到了一个问题:动态_cast很慢。与动态强制转换不同的是,在形状本身中对该信息进行编码,这样您就可以访问节点中的“type”变量。例如,您可以使用CCNode的内置“tag”属性或userData。谢谢您的建议。但不需要在othernode之前插入指针(*)。