我在ANDROID了解析不出TILEMAP里定义的POLYLINE,在WIN32里可以正常解析.我解析POLYLINE的代码如下.
能否帮我看下,是不是哪些函数ANDROID不支持? 非常感谢.(我之前代码里用了ATOF我怕ANDROID不支持,现在改成了SSCANF,但还是不行)
void GBBox2d::Box2DTileMapContact(CCTMXTiledMap* map,CCSprite* spriteblock)
{
CCTMXObjectGroup* objectGroup = map->objectGroupNamed(“OBJECT”);
CCArray* objects = (CCArray*)objectGroup->getObjects() ;
CCDictionary* objectsdict = NULL;
CCObject* pObj = NULL;
CCARRAY_FOREACH(objects, pObj)
{
//定义形状
//b2PolygonShape* Shape = new b2PolygonShape();
b2EdgeShape* Shape=new b2EdgeShape();
objectsdict= (CCDictionary*)pObj;
if(!objectsdict)
break;
//获取原点X坐标
CCString* pointx = (CCString*)objectsdict->valueForKey("x") ;
char* cpointx = (char*)pointx->getCString() ;
//float fpointx = atof(cpointx) ;
//fpointx = 50 ;
float fpointx = 0 ;
sscanf(cpointx,"%f",&fpointx) ;
//sprintf(animationnumber, "%d", spritetoxx);
//获取原点Y坐标
CCString* pointy = (CCString*)objectsdict->valueForKey("y") ;
char* cpointy = (char*)pointy->getCString() ;
float fpointy = 0 ;
//atof(cpointy) ;
sscanf(cpointy,"%f",&fpointy) ;
//fpointy = 50 ;
//获取遮挡增量坐标
CCString* points = (CCString*)objectsdict->valueForKey("points") ;
char* cpoints = (char*)points->getCString() ;
strcat(cpoints,"ED") ;
int i = 0 ;
int num = 0 ;
int flag = 0 ;
int changeflg = 0 ;
string xy= "" ;
string x="" ;
string y="" ;
b2Vec2 verts ;
while(*(cpoints+i)!='D')
{
//当遇空格或逗号时表示改变,遇E时表示最后
if(*(cpoints+i) == ' '||*(cpoints+i) == ','||*(cpoints+i) == 'E')
{
if(flag ==0 )
flag = 1;
else
flag = 0 ;
changeflg = 1 ;
i++ ;
}
//发生改变
if(xy != "" && changeflg == 1)
{
//记录Y值
if(flag == 0 )
{
y = xy ;
//记录XY值并转换为刚体
if( x!="" && y!="" )
{
num++ ;
float datax = 0 ;
float datay = 0 ;
sscanf(x.data(),"%f",&datax) ;
sscanf(y.data(),"%f",&datay) ;
float fx = fpointx + datax;
float fy = fpointy - datay;
verts = b2Vec2(fx/PTM_RATIO*mapscale, fy/PTM_RATIO*mapscale);
//verts.x = fx/PTM_RATIO ;
//verts.y = fy/PTM_RATIO ;
}
}
//记录X值
else
{
x = xy ;
}
changeflg = 0 ;
xy = "" ;
continue ;
}
xy = xy + *(cpoints+i) ;
i++ ;
}
b2BodyDef ShapeBodyDef;
ShapeBodyDef.type = b2_staticBody ;
//ShapeBodyDef.
//ShapeBodyDef.position.Set(fpointx/PTM_RATIO,fpointy/PTM_RATIO) ;
b2Vec2 Position = b2Vec2(fpointx/PTM_RATIO*mapscale,fpointy/PTM_RATIO*mapscale);
float32 Angle = -1 * CC_DEGREES_TO_RADIANS(spriteblock->getRotation());
ShapeBodyDef.userData = spriteblock ;
b2Body* ShapeBody = world->CreateBody(&ShapeBodyDef);
ShapeBody->SetTransform(Position,Angle);
//循环生成所有POLYLINE规则v1->v2,v2->v3...
for(i = 0 ; i < num-1 ;i++)
{
Shape->Set(verts*,verts*) ;
b2FixtureDef ShapeDef;
ShapeDef.shape = Shape;
ShapeDef.density = 10.0;
//ShapeDef.
ShapeDef.isSensor = false;
ShapeBody->CreateFixture(&ShapeDef);
}
}
}
**