Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 朝鼠标方向射击 问题是:_Java_Mouse_Slick2d - Fatal编程技术网

Java 朝鼠标方向射击 问题是:

Java 朝鼠标方向射击 问题是:,java,mouse,slick2d,Java,Mouse,Slick2d,我有一门射击课。在代码中,目标变量是mouseX和mouseY。 因此,当我单击鼠标按钮时,我的player类将创建一个新的快照对象。 但是射击是不准确的。 如何计算正确的dx和dy 如果我将dx和dy添加到项目符号的x和y,项目符号将移动到鼠标的方向。这就是我想要的。创建对象时,鼠标位置存储在targetX和targetY中。这正是总统想要达到的目标 链接: 来自Shot.java的代码: 我试过这个,但仍然不起作用: 我做到了!以下是我的解决方案: 问题是,目标是窗口的鼠标位置,而不是世界的

我有一门射击课。在代码中,目标变量是mouseX和mouseY。 因此,当我单击鼠标按钮时,我的player类将创建一个新的快照对象。 但是射击是不准确的。 如何计算正确的dx和dy

如果我将dx和dy添加到项目符号的x和y,项目符号将移动到鼠标的方向。这就是我想要的。创建对象时,鼠标位置存储在targetX和targetY中。这正是总统想要达到的目标

链接:

来自Shot.java的代码:

我试过这个,但仍然不起作用:

我做到了!以下是我的解决方案: 问题是,目标是窗口的鼠标位置,而不是世界的鼠标位置

这是我计算世界鼠标位置的方法:


这是我目前游戏中的代码,用于在按下鼠标右键时将单位移动到鼠标:

length = Math.sqrt((target_X - player_X)*(target_X - player_X) + (target_Y - player_Y)*(target_Y - player_Y)); //calculates the distance between the two points

speed_X = (target_X - player_X) /length * player_Speed;

speed_Y = (target_Y - player_Y) /length * player_Speed;
这将以设定的速度将对象移动到直线上的目标

编辑:这是我游戏中的实际代码

if(input.isMouseButtonDown(Input.MOUSE_RIGHT_BUTTON))
    {
        length = (float) Math.sqrt((player_waypoint_X - player_X)*(player_waypoint_X - player_X) + (player_waypoint_Y - player_Y)*(player_waypoint_Y - player_Y));
        velocityX = (float) (player_waypoint_X - player_X) /length * (float) PlayerStats.player.db_player_Speed;
        velocityY = (float) (player_waypoint_Y - player_Y) /length * (float) PlayerStats.player.db_player_Speed; 

        player_waypoint_X = input.getMouseX() - 2;
        player_waypoint_Y = input.getMouseY() - 2;

    }
出于测试目的,初始方法中定义了速度和长度。每次按下鼠标右键时,航路点的X和Y都会更改为鼠标位置

我从这个问题中学到了这一点
.

为了使子弹不会在每次射击时都改变方向,请创建一个数组列表,以便发射的每个子弹都有自己的x和y速度

请添加有关dx和dy如何工作的更多信息。编辑问题。谢谢我试着添加尽可能多的信息我试过了,我把速度x和速度y添加到了椭圆x和y上,但还是一样。我不知道你的例子中的子弹是怎么回事。我认为,在项目开始时,子弹很好地射向了目标。但是目标似乎会随机改变位置。你能把射击类放到粘贴栏吗?我也注意到了。我也不能向下射击。已将Shot.java添加到源列表中。虽然我对此还是新手,但问题可能是由于未正确设置target_X和target_Y造成的。也许可以尝试为鼠标单击添加if语句,并将它们设置为鼠标输入,看看这是否会改变什么。作为一个观察,因为我确实让那个家伙向下射击,但它只是随机地这样做。
float mouseWorldX = x + (mouseX - screen_width / 2); // x = player's x position
float mouseWorldY = y + (mouseY - screen_height / 2); // y = player's y position
length = Math.sqrt((target_X - player_X)*(target_X - player_X) + (target_Y - player_Y)*(target_Y - player_Y)); //calculates the distance between the two points

speed_X = (target_X - player_X) /length * player_Speed;

speed_Y = (target_Y - player_Y) /length * player_Speed;
if(input.isMouseButtonDown(Input.MOUSE_RIGHT_BUTTON))
    {
        length = (float) Math.sqrt((player_waypoint_X - player_X)*(player_waypoint_X - player_X) + (player_waypoint_Y - player_Y)*(player_waypoint_Y - player_Y));
        velocityX = (float) (player_waypoint_X - player_X) /length * (float) PlayerStats.player.db_player_Speed;
        velocityY = (float) (player_waypoint_Y - player_Y) /length * (float) PlayerStats.player.db_player_Speed; 

        player_waypoint_X = input.getMouseX() - 2;
        player_waypoint_Y = input.getMouseY() - 2;

    }