2011-09-12 6 views
0

私はcocos2dとbox2dで初めてのゲームを作っていて、かなり奇妙なものを発見しました。私は複数のbox2Dボディを持っています。デバッグドローをオンにすると、私の網膜ディスプレイデバイスでは、box2dボディが480x320デバイス上にあるかのように、つまり画面の左下象限に配置されます。正しい位置に置いてください。網膜ディスプレイデバイスのbox2Dボディからのスプライトのオフセット

たとえば、(720,320)にあると想定されるボディは、その位置にスプライトがあり、そのbox2Dボディが(360,160)に描画されます。

相互作用はちょうどオフセット、場所を取っているので、すべてがうまく動作...

私は480x320の表示すべてが正しくup.Obviously並んで実行しているデバイスでゲームをテストするとき、私は欠けている何かがあります非網膜ディスプレイデバイスから網膜ディスプレイデバイスへの翻訳では、私はそれを動作させるように見えることはできません。

体を製造する例示的な方法は次のとおりです。

-(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

それはちょうどそれが間違って描画デバッグです。あなたはこのようにそれを並べることができます。

glPushMatrix(); 
glScalef(CC_CONTENT_SCALE_FACTOR(), CC_CONTENT_SCALE_FACTOR(), 1); 
world->DrawDebugData(); 
glPopMatrix(); 
1

また、あなたがCC_CONTENT_SCALE_FACTORを()を含むようにPTM_RATIOマクロを使用どこでも変更する必要があることに注意してください。このような 何か:

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()) 
関連する問題