2013-05-15, 00:08
  #1
Medlem
Davvdas avatar
Hejsan, flashbackare!

Jag har de senaste dagarna pbrjat mitt frsta lilla spel i Java med Slick2D och det gr bra men jag har sttt p ett problem. Spelet jag kodar har ett gameplay som kan liknas vid de gamla GTA-spelen i 2D men ocks det nyare spelet Hotline Miami.

Problemet jag sttt p r hur siktet ska fungera. Jag tar reda p bildens (karaktrens) X- och Y-koordinat samt muspekarens X- och Y-kooridnat genom metoden Mouse.getX, getY. Det jag vill gra nu r att rotera bilden s att personen alltid tittar mot platsen dr spelaren placerat muspekaren. Jag behver allts anvnda trigonometri fr att f vinkeln men koordinatsystemen fr musen respektive bilden verkar vara olika och ha origo p olika hrn.

Finns det ett bttre input fr muspekaren? Hur ska jag gra?
Citera
2013-05-15, 01:06
  #2
Medlem
iKnugens avatar
En brjan skulle jag sga r att ta ut deltaX och deltaY och sen arcus tangens p det, sen fr du rkna p vilken kvadrant musen ligger p om spelaren str i origo och snt.
Har inte pysslat med snt sjlv men det r nog det jag skulle gra.
Citera
2013-05-15, 09:26
  #3
Medlem
Tooners avatar
Citat:
Ursprungligen postat av Davvda
koordinatsystemen fr musen respektive bilden verkar vara olika och ha origo p olika hrn.

Jag har inte hllit p med just slick2d, men om jag fr gissa s stter du en godtycklig viewport som grafiken ritas upp i medan muspekarens koordinater r mappade mot sjlva fnstret/skrmen.

En viewport p 100x100 "pixlar" kan till exempel ritas upp p en skrm som har 800x640 pixlar. D kan du f x=640 frn musen, medan spelet (viewporten) rknar med x=100.

Du kommer behva gra en konvertering mellan dom tv. Jag antar att det redan finns frdiga metoder fr det i slick2d, leta efter ngot i stil med "unproject" dr du borde kunna slnga in musens koordinater och f ut vad det betyder fr din viewport.
Citera
2013-05-15, 18:25
  #4
Medlem
Davvdas avatar
Tack fr rden, jag tnker fortstta nu och rapporterar om eventuella fel.
Citera
2013-05-16, 22:57
  #5
Medlem
Davvdas avatar
Skriver ner hur jag lste det ifall ngon rkar googla p detta ngon gng (Valdemar r spelaren/bilden):

float valdemarCenterX = valdemarX + 60;
float valdemarCenterY = valdemarY + 60;

float deltaX = valdemarCenterX - mposX;

float deltaY = valdemarCenterY - mposY;

if(deltaX>0 && deltaY>0){
angle = deltaY/deltaX;
angletanRad = Math.atan(angle);
angletanDeg = angletanRad*180;
angletanDegF = (float) angletanDeg;
angletanDegF = angletanDegF/3;
}
if(deltaX>0 && deltaY<0){
angle = deltaY/deltaX;
angletanRad = Math.atan(angle);
angletanDeg = angletanRad*180;
angletanDegF = (float) angletanDeg;
angletanDegF = angletanDegF/3;
}
if(deltaX<0 && deltaY>0){
angle = deltaY/deltaX;
angletanRad = Math.atan(angle);
angletanDeg = angletanRad*180;
angletanDegF = (float) angletanDeg;
angletanDegF = (angletanDegF/3)+180;
}
if(deltaX<0 && deltaY<0){
angle = deltaY/deltaX;
angletanRad = Math.atan(angle);
angletanDeg = angletanRad*180;
angletanDegF = (float) angletanDeg;
angletanDegF = (angletanDegF/3)-180;
}
valdemar.setRotation(angletanDegF);
Citera
2013-05-16, 23:30
  #6
Medlem
BarbecueBobs avatar
Citat:
Ursprungligen postat av Davvda
angletanDeg = angletanRad*180;
angletanDegF = (float) angletanDeg;
angletanDegF = angletanDegF/3;

frn radianer till grader:

Grader = radianer * (360/2pi) = radianer * (180/pi)

du glmde dela med pi, drfr funkar det fr dig att dela med 3 eftert Allts funkar det bttre genom att dela med pi ist fr 3.
Citera
2013-05-16, 23:31
  #7
Medlem
Davvdas avatar
Jaaaa! Briljant, det tnkte jag inte p!
Citera
2013-05-16, 23:56
  #8
Medlem
Colossuss avatar
Kod:
angleBetweenVectors(sf::Vector2f asf::Vector2i b){
    return (
180/3.14f) * atan2(b.a.yb.a.x);


Nu r det hr inte java, men den hr funktionen anvnde jag nr jag ville ha ut vinkeln mellan spelaren (a) och muspekaren (b), s satte jag rotationen p spelaren till det returnerade vrdet.
En vektor i det hr fallet r bara en x- och en y-koordinat
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in