2011-06-01 26 views
5

Yukarıda gördüğüm bir karakterle etrafta koştuğunuz bir oyun yapacağım. Ama sorun, karakteri her zaman fareye nasıl bakarım? Ve açıyı nasıl hesaplayacağım, böylece fareye doğru bakabiliyorum (şu anda bakıyorum). Sanırım trigonometri ile etrafta oynamanız gerekiyor ve bu gibi şeyleri almak, ama gerçekten nasıl olduğunu bilmiyorum.Java oyun geliştirme - Fare koordinatlarına bakın ve ateş edin

Matematikte oldukça iyiyim, bu yüzden bana biraz yardım ederseniz, bunu çözebilirim. Büyük bir ipucu kullandığım

Point pl = getCharacterLox(); 
Point mouse = getMouseLoc(); 
double cos = (mouse.getX()-pl.getX()); 
double sin = (mouse.getY()-pl.getY()); 
cos/=Math.hypot(cos,sin);//normalize 
double angle = Math.copySign(Math.acos(cos),sin); 

trig bulunabilir söylediği gibi benim sonuçta kötü İngiliz

Ve üzgünüm, İsveçli :)

Teşekkür, Alexandberg

+0

Sanırım kendi sorunuzu cevapladınız ... trig kullanın – gshauger

cevap

1
double angle = Math.atan2(yMouse-yChar, xMouse-xChar); 
+0

Çok iyi çalışmadı düşünüyorum. 3'ten 3'e kadar sayılarım var, ama onlarla ne yapacağımı bilmiyorum. Açıların 0-360 gibi olacağını düşündüm. – ASandberg

+1

Aslında pi -pi, çünkü radyanda. Derece dönüştürmek için, Math.toDegrees() –

+0

'u arayın. Şu anda açıları çalışıyoruz (açıların -180 ve 180 arasında olması hariç, ancak bunu düzeltebilirim). Sorun şu ki, oyuncudan fareden geçen bir çizgiyi nasıl çizebilirim (fare konumuna ulaştıktan sonra devam eder). Şu anda oyuncu ile fare noktası ve açı arasındaki mesafeyi aldım. – ASandberg

1

değilim Son satırda burada küçük bir hile: acos 0 ile PI arasındadır, ancak eğer günah negatif ise, bu durumun negatif olması gerekir, eğer günah 0 ise +0.0 olacak ve açı 0 veya PI olacaktır

+0

Çok teşekkürler, şimdi anladım. Düzenleme: Çalıştığını kontrol etmek için açıyı yazdırmaya çalıştığımda, sadece 0-3 arasındadır (aprox). Açıyı nasıl çıkarırım? Çünkü şu anda açıyı nasıl kullanacağımı bir şey yapmak için görmüyorum. – ASandberg