2010-12-28 26 views

cevap

11

  1. Her karede
  2. Kişisel onTouch geçen süre almak gerekir işlev parmağınızın hızlanmasını bulacak. Hızlanmanın bir mesafeden nasıl elde edileceğine dair formülü unuttum. Bir zaman değişkeni ile pozisyonun ikinci türevi olmalıdır. Ama her zaman deltaX'inizi hızlandırmanız gerekir. Bunu kolaylaştırmak için gerçekten doğru bir şey koymanıza gerek yok. Düzenleme: Neden görmedim bilmiyorum ama buradaki işlev her şeydeydi ...

    acceleration.x = 2 (newposition.x - position.x - speed.x * elapsedTime)/(geçen Süre * geçen zaman);

  3. Eğer hızlanma sahip olduktan sonra bu kodu ile yeni konumunu ayarlayabilirsiniz. Bu 2d'deki basit fizik dinamiğidir. Hızlanma ile hızınızı bulabilir ve hızınızla bir sonraki pozisyonunuzu bulabilirsiniz.

    speed.x = (float) (mass * acceleration.x * elapsed + speed.x); 
    speed.y = (float) (mass * acceleration.y * elapsed + speed.y); 
    
    
    position.x += mass * acceleration.x/2 * elapsed * elapsed + speed.x * elapsed; 
    position.y += mass * acceleration.y/2 * elapsed * elapsed + speed.y * elapsed; 
    
    
    speed.x *= friction; 
    speed.y *= friction; 
    

Kütle ve sürtünme sen nasıl gidiyor hızlı tanımlamak ve kendi başına ne kadar hızlı yavaşlatacaktır izin verir. Muhtemelen yavaş yavaş geri kaydırmak zorunda kalmanız gerekiyorsa, bu dinamik tam olarak güzel olmadığı için kodu değiştirmeniz gerekecektir.

Her bir karenin sonunda, ivmesini sıfırlamanız gerekir (0,0). Her yeni çerçevede, bir dokunuştan sonra bile, ivme bir şeye ayarlanmalıdır.

+1

Cevabınıza bakıyordum ve hız formülünüzün hızlanması gerektiğinde hızlanmada nasıl hızlandığınızı merak ediyorum ... Birisi diğerine mi ihtiyaç duyuyor? – Dan

+0

Hızın doğrudan hesaplanması yerine, hızlandırmanın kullanılması daha iyi sonuç verebilir. İlk hız ve ivme 0'dır. Bu yüzden, bir sonraki kareye eklemek için bir yere hız kaydetmelisiniz. Hızlanma, her bir çerçeve arasındaki değişiklikten başka bir şey değildir. Hızlanma deltaX, delta olabilir. Gerçek hız, deltaX * elapsedTime + lastSpeed ​​olacaktır. Bu şekilde, bir kare çok zaman alsa veya az miktarda zaman alsa bile hız doğru olarak hesaplanır. Diğer parametreler, inerty ve sürtünme eklemek için biraz fiziksel olarak sahte. Sonsuza dek sürmesini istemiyorsun. –

1
  1. ölçün görünüşüdür kaydırmasını olduğu hızı.
  2. Kullanıcının ne zaman kaydırmayı durdurduğunu algıla.
  3. Kaydırma görüntüsünün gittiği hızı yavaş yavaş azaltın. Böyle

şey: Sorunun 2d ise

, oldukça basittir
public void redraw() { 
    myScrollView.ySpeed = myScrollView.lastY-myScrollView.y; 
    myScrollView.xSpeed = myScrollView.lastX-myScrollView.x; 
    if (!userIsScrolling && ySpeed > 0) { 
     ySpeed--; 
    } 
    if (!userIsScrolling && xSpeed > 0) { 
     xSpeed--; 
    } 
    myScrollView.lastY = myScrollView.y; 
    myScrollView.y += ySpeed; 
    myScrollView.lastX = myScrollView.x; 
    myScrollView.x += xSpeed; 
} 

public void userStoppedScrolling() { 
    userIsScrolling = false; 
} 
+0

Çok iyi çalışmalı, kullanıcı kaydırma hızını tam olarak nasıl kontrol edebildiğimi biliyor musunuz? Şu anda sadece kullanıcı parmaklarının başlangıç ​​pozisyonu ve bitiş pozisyonu arasındaki deltayı hesaplar ve sonra matrise koyar. – jfisk

+0

Üzgünüz, ben dokunmatik konum ve benzeri gibi özellikleri ile yardımcı olacak kadar iyi Android bilmiyorum. – Jumhyn

İlgili konular