2

画面のタッチによって制御される、iPhone および iPad 用の OpenGL ゲームを作成しています。これはユニバーサル アプリなので、touchesBegan にコードを入れて、任意のタッチ位置を 0.0 ~ 1.0 の範囲に変換します (画面の一方の側からもう一方の側へ。これは、アプリの残りの部分がタッチ情報を取得するために必要な方法です)。これを行うコードは次のとおりです。

CGPoint touchLocationPx;
GLFloat xx;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    touchLocationPx = [touch locationInView:self];    // touchLocationPx.x & .y are in points, not pixels...
    xx = (GLfloat)touchLocationPx.x / (GLfloat)(self.frame.size.width);    // self.frame.size.width is also in points,
                                                                           // so xx is in the range 0.0 to 1.0...

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    // Set xx to a dummy value that will not be processed by the rest of the app...
    xx = -999.999;
}

[touch locationInView:self] と self.frame.size.width が常に同じ単位 (私が理解しているピクセルではなくポイント) であることに依存しています。 ].scale=2.0、または x1 または x2 モードの iPad。(私自身のテスト デバイスは iPhone 4S であり、画面サイズとタッチ位置を監視すると、期待どおりにすべてポイント (480,320) で報告されます。ただし、iPad3 ではコントロールが応答しないと聞いています。画面サイズとタッチ位置はありますかこのデバイスでは異なる処理が行われますか?または、コードがタッチ位置を正しく変換しない原因が他にある可能性がありますか? (シミュレーターでは、Retina iPad を含むすべてのデバイス タイプが正常に動作します。シミュレーターが実際のデバイスと完全に一致することは決してないことがわかっています。しかし、タッチ位置が報告される方法と同じくらい基本的なものは、適切にそこにあるはずです. 実際のデバイスが失敗する理由は何か分かりますか?)

ありがとう、

サム。

4

0 に答える 0