0

私はこの質問を書いています。なぜなら、Cocos2DforiPhoneによって提供された例のコードの一部を理解していないからです。

-(CGAffineTransform) nodeToParentTransform
{   
b2Vec2 pos  = body_->GetPosition();

float x = pos.x * PTM_RATIO;
float y = pos.y * PTM_RATIO;

if ( ignoreAnchorPointForPosition_ ) {
    x += anchorPointInPoints_.x;
    y += anchorPointInPoints_.y;
}

// Make matrix
float radians = body_->GetAngle();
float c = cosf(radians);
float s = sinf(radians);

if( ! CGPointEqualToPoint(anchorPointInPoints_, CGPointZero) ){
    x += c*-anchorPointInPoints_.x + -s*-anchorPointInPoints_.y;
    y += s*-anchorPointInPoints_.x + c*-anchorPointInPoints_.y;
}

// Rot, Translate Matrix
transform_ = CGAffineTransformMake( c,  s,
                                   -s,  c,
                                   x,   y );    

return transform_;
}

これはPhysicsSprite.mmファイルにあります。

宇宙の幾何学が苦手なせいかもしれませんが、誰かが説明してくれたらとてもありがたいです。

どうもありがとう。

4

1 に答える 1

0
if( ! CGPointEqualToPoint(anchorPointInPoints_, CGPointZero) ){
    x += c*-anchorPointInPoints_.x + -s*-anchorPointInPoints_.y;
    y += s*-anchorPointInPoints_.x + c*-anchorPointInPoints_.y;
}

上記のコードは、xy 座標軸を反時計回りに $180-\theta$ 度だけ回転させ、上記の行の前のコードから取得した以前の x、y 座標に新しい座標を追加します。

http://en.wikipedia.org/wiki/Rotation_of_axesは、軸の回転式を提供します

于 2012-09-02T16:45:42.303 に答える