2012-04-19 63 views
10

我正在爲iOS製作二維拼圖,目前我正試圖通過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

我並沒有完全得到你的縮放和移動代碼,但它聽起來像你並沒有考慮到你的場景在移動後的新位置,以及將舊位置縮放爲縮放中心的情況。你需要記住你的場景當前在哪個位置,並且連續縮放和翻譯。 – 2012-04-19 15:31:26

+0

我不處理場景位置 - 只能縮放「目標」,它可以在屏幕上的任何位置,並且不能依賴於: – riens 2012-04-20 12:07:55

+0

找到並重新校準函數「glOrthof」,然後縮放一些長寬比。 – 2012-05-17 13:38:38

回答

1

保存您在滑動時進行的翻譯量,然後在每次調用handlePinchGesture後,應用您在滑動時保存的翻譯。

我希望它有幫助。