5

cocos2d では、座標系は非常に単純です。左下は (0,0) です。何かの位置を設定するときはいつでも大丈夫です。

レイヤーが TouchEnabled であるとしましょう。

スプライトの位置を設定するときは問題ありません..

[crab setPosition:ccp(20, 50)];

しかし、タッチの x 座標と y 座標を取得した場合 (スプライトをクリックしたと仮定します..):

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Touches began!");
    NSArray *touchArray = [touches allObjects];
    UITouch *one = [touchArray objectAtIndex:0];
    pointOne = [one locationInView:[one view]];
    CCLOG(@"points are: %f and %f", pointOne.x, pointOne.y );
}

y 座標は、y が上から下に増加するため、cocos2d の座標系が示唆するものの反対です!

だから私はビューの座標系がMacの座標系とは違うと仮定しています..これは非常に直感的ではありません..それは正しいですか?

ありがとう !

4

5 に答える 5

4

OpenGLは左下の(0、0)を使用しますが、iOS、したがってタッチを処理するUIKitは左上を(0、0)として使用します。ポイントを変換するのは簡単です。覚えておく必要があります。

cocos2d2.0の正しい方法は

CGPoint uiKitPoint = [touch locationInView:touch.view];
CGPoint cocos2dPoint = [[CCDirector sharedDirector] convertToGL:uiKitPoint];
于 2012-10-04T11:51:54.790 に答える
1

この cocos2d チュートリアルが役立つかもしれません

http://www.gamefromscratch.com/post/2012/06/08/Cocos2D-HTML-Tutorial-3All-about-sprites-and-positioning.aspx

しかし、cocos2d で一般的に言えば、ポイント (0,0) は画面の左隅です。

于 2012-10-04T07:04:12.207 に答える
0

Cocos2D はすでにこれを処理できます。CCDirector には、このためのメソッドがいくつかあります。この古い投稿をご覧ください。

于 2012-10-04T07:19:48.390 に答える
0

通常、ほとんどのグラフィックス関連アプリケーションでは、(0, 0) を左下に配置する傾向があります (これは Mac の場合です)。iOS では、左上に配置されます。気づいた。

Cocos で入力を処理している場合は、 convertTouchToNodeSpaceメソッドを使用してすばやく変換できます (少なくとも 1.x では - 2.0 で十分に遊んだことはありませんが、簡単なドキュメント チェックからconvertToNodeSpaceだと思います)。これにより、必要な変換が行われ、正しい座標が得られます。

(注: 再確認するために、他のコードをいくつか掘り下げる必要があります。しかし、これがカメラのオフセットもカウントするかどうかを頭の中で思い出すことはできません。デモ コードが表示されたら編集します。 & 確認。)

于 2012-10-04T07:22:56.320 に答える
0

Touches は左上が (0,0) の UIKit から取得されるため、このデータを処理する前に cocos2d の座標系に変換する必要があります。

がある

[[CCDirector sharedDirector] convertToGL];

UIkit の場合 -> cocos2d

于 2012-10-04T07:23:42.623 に答える