2012-04-19 29 views
10

iOS için bir 2D puzzle yapıyorum ve şu anda UIPinchGestureRecognizer ile yakınlaştırma ve kaydırma yapmaya çalışıyorum.OpenGL ES ile yakınlaştırma ve yavaşlama

Yakınlaştırma şu şekilde yapılır: "Yakınlaştırma noktası" olan bir hedef 2D vektörüne sahibim. kodudur:

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

Hedef jest tanıyıcı ile bu şekilde seçilmiş olan:

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

Her şey gayet güzel çalışıyor.

Başlangıçta oyun iPAD için tasarlandı, ancak iPhone ve iPOD üzerinde de çalışmasını istiyorum. Ancak iPhone ve iPOD'un farklı en boy oranı vardır. İlk resim oranlarını korumak için ilk Y ölçeğini biraz daha büyütmeye karar verdim. Ayrıca bu oyun alanını ilk yakınlaştırma faktörü ile yukarı ve aşağı kaydırmak mümkün hale geldi. kodudur: oyun alanı ekranında "merkezli" IF

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

Bu sadece iyi çalışır (örneğin eşit boşluk yukarı ve aşağı (bot tokatlamak yönde olduğunda).). Ancak alanı yukarı veya aşağı doğru kaydırır ve harekete geçersek, oyun alanı tekrar merkeze atlar.

Bazı pozlamalarla jest konumunu çevirmem gerektiğini anlıyorum, ancak tam olarak nasıl 3 gün olduğunu anlayamıyorum.

+0

Tam olarak yakınlaştırma ve hareket kodunuzu tam olarak almadım, ancak hareket ettikten sonra sahnenin yeni konumunu ve yakınlaştırma konumunu eski konumuna getirerek yakınlaştırma merkezi olarak görmüyor gibi geliyor. Sahnenin şu anda hangi konumda olduğunu hatırlamanız ve ölçekleme ve çeviri işlemlerini gerçekleştirmeniz gerekiyor. –

+0

Sahnenin konumuyla uğraşmam - sadece ekranda "herhangi bir yerde olabilir" ölçeği "hedef", ve güvenilemez :( – riens

+0

"glOrthof" işlevini bulmak ve yeniden kalibre edip daha sonra bazı en boy oranıyla ölçeklendirme yap. –

cevap

1

Kaydırmakta olduğunuz çeviri miktarını kaydedin, ardından her aramadan sonra handlePinchGesture, kaydırmadan kaydettiğiniz çeviriyi uygulayın.

Umarım yardımcı olur.