• Advertisement
Sign in to follow this  

2D Aiming accuracy

This topic is 2179 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello,

I am making a 2D top down shooter and am struggling with aimed shots by enemies. At the moment it works OK but it's not very accurate. Here is my code: (startX,startY,playerX,playerY are class variables). Can anybody help me make this more accurate? Math's isn't my best subject!

[code]private void aimShot() {
this.setLaserX(startX);
this.setLaserY(startY);

float distanceX = startX - playerX;
float distanceY = startY - playerY;

boolean xIsNegative = false;
boolean yIsNegative = false;

if (distanceX < 0) {
xIsNegative = true;
distanceX = -distanceX;
}

if (distanceY < 0) {
yIsNegative = true;
distanceY = -distanceY;
}

if (distanceX == 0) {
distanceX = 1;
}

if (distanceY == 0) {
distanceY = 1;
}

float ratio;
float speedX, speedY;

if (distanceX > distanceY) {
ratio = distanceY/distanceX;
speedX = 10*(1-ratio);
speedY = 10*ratio;
} else {
ratio = distanceX/distanceY;
speedY = 10*ratio;
speedX = 10*(1-ratio);
}

if (xIsNegative) {
speedX = -speedX;
}

if (yIsNegative) {
speedY = -speedY;
}

intSpeedX = Math.round(speedX);
intSpeedY = Math.round(speedY);

}[/code]

Share this post


Link to post
Share on other sites
Advertisement
I managed to fix it myself. One thing I did was store X and Y coordinates as floats and only rounded off when actually drawing. My code needed some improvement too, here's what it looks like now:
[code]private void aimShot() {

float distanceX = this.fX - this.paX;
float distanceY = this.fY - this.paY;

boolean xIsNegative = false;
boolean yIsNegative = false;

if (distanceX < 0) {
xIsNegative = true;
distanceX = -distanceX;
}

if (distanceY < 0) {
yIsNegative = true;
distanceY = -distanceY;
}

if (distanceX == 0) {
distanceX = 1;
}

if (distanceY == 0) {
distanceY = 1;
}

float ratio = distanceX / distanceY;

this.speedY = 10 / (ratio + 1);
this.speedX = ratio * this.speedY;

if (xIsNegative) {
this.speedX = -this.speedX;
}

if (yIsNegative) {
this.speedY = -this.speedY;
}
}[/code]

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement