2012-04-19 8 views
10

私はiOSの2Dパズルを作っていますが、現在はUIPinchGestureRecognizerでズームとスクロールを実装しようとしています。OpenGL ESでズームしてスワイプする

ズームは次のようにして行います。ターゲットの2Dベクトルが「ズームポイント」です。コードは次のとおりです。

glTranslatef(target.x, target.y, 0); 
glScalef(scale, scale, 0); 
glTranslatef(-target.x, -target.y, 0); 

ターゲットは、ジェスチャ認識と、このように選択されている:

-(void)handlePinchGesture:(UIPinchGestureRecognizer*)recognizer 
{ 
    if (UIGestureRecognizerStateBegan == [recognizer state]) 
    { 
     view->setTarget([recognizer locationInView:self]); 
    } 
    // Rest of the code omitted 
} 

すべてがうまく動作します。

当初ゲームはiPAD用に設計されましたが、iPhoneとiPODでも動作するようにしたいと考えています。しかし、iPhoneとiPODのアスペクト比は異なります。最初の画像の割合を維持するために、最初のYスケールを少し大きくすることに決めました。また、これにより、初期ズーム係数でゲームフィールドを上下にスワイプすることが可能になりました。コードは次のとおりです。

glTranslatef(target.x, target.y, 0); 
glScalef(scale, scale * aspectRatio, 0); 
glTranslatef(-target.x, -target.y, 0); 

ゲームフィールドが画面で「中心」である場合、これは正常に動作します(例えばボットスワイプ方向(上下)で同等のスペースがある場合。)。しかし、フィールドを上下にスワイプしてピンチジェスチャーを開始すると、ゲームフィールドが再びセンターにジャンプします。

ジェスチャの位置をある程度ずらす必要があることを理解していますが、3日間どのくらい正確に描くことはできません。

+0

ズームや移動コードは正確には得られませんでしたが、移動後のシーンの新しい位置や、ズーム中心の古い位置でのズームを考慮しないように聞こえます。シーンが現在どのポジションにあるかを覚えておく必要があります。 –

+0

私はシーンの位置を処理しません - スクリーン上のどこにでも置くことができ、頼りにならないスケール "target"( – riens

+0

) "glOrthof"関数を見つけて再計算し、次にいくつかのアスペクト比でスケーリングします。 –

答えて

1

スワイプで行う翻訳の量を保存してから、handlePinchGestureを呼び出すたびにスワイプで保存した翻訳を適用します。

私はそれが役に立ちそうです。