Ъгли на снаряди на Java

И така, правя платформинг, където трябва да можете да плъзнете мишката си, за да изстреляте снаряд от вашия герой в посоката на освобождаване на мишката, със скорост, равна на разстоянието между двете точки.

    public void mouseDragged(MouseEvent e) {
    player.setAiming(true);
    Point2D.Float aimpoint = new Point2D.Float(e.getXOnScreen(), e.getYOnScreen());
    player.setAimpoint(aimpoint);
    player.setAimDistance(GetDistanceToPoint(player.getPos(), aimpoint));
}
public static float GetAngleOfLine(Point2D.Float p1, Point2D.Float p2) { 
    double xDiff = p2.x - p1.x; 
    double yDiff = p2.y - p1.y; 
    System.out.println("P1X: " + p1.x + " P1Y: " + p1.y + " P2X: " + p2.x + " P2Y: " + p2.y + " Angle: " + Math.toDegrees(Math.atan2(yDiff, xDiff)));
    return (float) Math.toDegrees(Math.atan2(yDiff, xDiff));
}
public static float GetDistanceToPoint(Point2D.Float p1, Point2D.Float p2){
    float distance = (float) Math.sqrt(Math.pow(p2.y - p1.y, 2) + Math.pow((p2.x - p1.x), 2));
    return distance;
}

И тогава, когато мишката бъде освободена,

player.setAimingangle(GetAngleOfLine(player.getPos(), player.getAimpoint()));

И тогава се създава снаряд, където ъгълът е player.aimingangle и силата е player.aimingdistance:

        float yvel = (float) (strength * Math.sin(angle));
    float xvel = (float) (strength * Math.cos(angle));

Получавам невероятно странни снаряди, които летят навсякъде.


person Kyranstar    schedule 22.09.2013    source източник


Отговори (1)


Math.sin и Math.cos приемат аргументи за радиани, но вие им подавате градуси.

person us2012    schedule 22.09.2013