如何缓慢地将对象转换为某个位置(以便可以看到它)

时间:2015-06-08 14:09:31

标签: java math trigonometry translate direction

在我的游戏中,我有一个玩家对象和一个敌人对象。初始化时,敌方对象应该在该特定时间找到玩家的当前位置并前往该位置,最终通过或击中玩家,此时它将离开屏幕。

为了做到这一点,我认为我将不得不使用三角函数但是我似乎无法弄清楚要做什么,因为我的方向和速度方程永远不会与球员的位置。

这是我拥有的......

    direction = Math.atan((this.X_POS-plr.X_POS)/(this.Y_POS-plr.Y_POS));

    speedX = (int) (speed * Math.cos(direction));
    speedY = (int) (speed * Math.sin(direction));
  • "这"是敌人和" plr"是球员。
  • "方向"是玩家的角度
  • " speedX"和" speedY"是翻译每个游戏滴答的金额。 (deltaX,deltaY)

如果有帮助的话,请点击这里:

enter image description here

如果有人知道如何正确地做到这一点我很感激帮助,谢谢!

    //Inside the food/enemy class:
    //inside the constructor
    direction = Math.random() * 2.0 * Math.PI; //x/y position of player, xy position of food
    direction = Math.atan((this.X_POS-plr.X_POS)/(this.Y_POS-plr.Y_POS));

    speedX = (int) (speed * Math.cos(direction));
    speedY = (int) (speed * Math.sin(direction));

    //inside update position method
    X_POS += speedX;
    Y_POS += speedY;

    //inside draw player method
    g.setColor(rim);
    g.fillOval(X_POS-radius-3, Y_POS-radius-3, (radius*2)+6, (radius*2)+6);

    g.setColor(center);
    g.fillOval(X_POS-radius, Y_POS-radius, radius*2, radius*2);  

   //Inside the player class X_POS and Y_POS are set to 200 each.

然后,在主类的run方法中每隔15毫秒调用一次更新位置方法和draw方法。

1 个答案:

答案 0 :(得分:1)

好吧,因为似乎没有其他人知道我是如何知道自己的。

    direction = Math.atan2(plr.Y_POS - Y_POS, plr.X_POS - X_POS);

    speedX = (speed * Math.cos(direction));
    speedY = (speed * Math.sin(direction));

感谢您的帮助!