我正在使用cocos2d和box2d进行我的第一场比赛并且发现了一些非常奇怪的东西。我有多个box2D机身飞来飞去,当我打开调试绘图时,我看到在我的视网膜显示设备上,box2d机身定位好像在480x320设备上,即在屏幕的左下象限,但是精灵是在正确的位置。
例如,一个假定为(720,320)的物体的精灵位于此位置,其box2D体位于(360,160)。
互动正在发生,只是抵消了,所以一切正常......
当我在运行480x320显示器的设备上测试游戏时,所有内容都正确排列。显然,从非视网膜显示设备到视网膜显示设备的翻译中我有一些缺失,但我似乎无法工作它出来了。
生成正文的示例方法是:
-(void)addArrow{
CGSize winSize = [CCDirector sharedDirector].winSize;
arrow = [CCSprite spriteWithFile:[gameSettings objectAtIndex:0]];
arrow.position = ccp(bowBar.position.x,bowBar.position.y);
arrow.tag = 1;
// Create ball body
b2BodyDef arrowBodyDef;
arrowBodyDef.type = b2_dynamicBody;
arrowBodyDef.position.Set(arrowPoint.x/PTM_RATIO, arrowPoint.y/PTM_RATIO);
arrowBodyDef.userData = arrow;
b2Body * arrowBody = world->CreateBody(&arrowBodyDef);
arrowBody->SetTransform(arrowBody->GetPosition(),- CC_DEGREES_TO_RADIANS(bowBar.rotation));
b2PolygonShape rectangle;
rectangle.SetAsBox(arrow.contentSize.width/PTM_RATIO/2, arrow.contentSize.height/PTM_RATIO/2);
b2FixtureDef rectangleShapeDef;
rectangleShapeDef.shape = &rectangle;
rectangleShapeDef.density = 150.0f;
rectangleShapeDef.friction = 1.0f;
rectangleShapeDef.restitution = 0.0f;
arrowFixture = arrowBody->CreateFixture(&rectangleShapeDef);
[self addChild:arrow z:15]
}
答案 0 :(得分:1)
另请注意,您可能需要更改使用PTM_RATIO宏的任何位置以包含CC_CONTENT_SCALE_FACTOR()。 像这样:
b2Vec2(point.x / PTM_RATIO, point.y / PTM_RATIO)
可能需要转向:
b2Vec2(pixel.x / PTM_RATIO * CC_CONTENT_SCALE_FACTOR(), pixel.y / PTM_RATIO * CC_CONTENT_SCALE_FACTOR())
答案 1 :(得分:0)
这只是调试得出错了。你可以这样排列:
glPushMatrix();
glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1);
world->DrawDebugData();
glPopMatrix();