【发布时间】:2012-05-11 21:41:57
【问题描述】:
我的问题可能很简单。我今天大部分时间都在考虑一种算法(这很可能是几个 if 语句),它将确定鼠标指向的方向并朝那个方向发射子弹。我已经对子弹进行了测试,以确保它们通过向定义的方向射击来射击。
我将如何计算鼠标是在播放器的左侧、右侧、顶部、底部还是在播放器的角落?
已解决:感谢您的所有帮助,但经过一天的思考,我想出了一个自己的方法。我所做的是使用 if 语句来确定当我按下鼠标时,它是否会与播放器的顶部、底部、右侧、左侧或角落发生碰撞。无论如何,这是我的代码。附言我使用变量x1 作为mousex,y1 作为mousey,x 作为playerx,y 作为player y。我唯一拥有的其他变量是 dx 和 dy,但您应该知道它们的作用。
//top
if (x1 > x && x1 < x + 40 && y1 > y - 250 && y1 < y){
dy = -1;
dx = 0;
}
//right
if (x1 > x + 40 && x1 < x + 250 && y1 > y && y1 < y + 40){
dx = 1;
dy = 0;
}
//bottom
if (x1 > x && x1 < x + 40 && y1 > y+40 && y1 < y+250){
dy = 1;
dx = 0;
}
//left
if (x1 < x && x1 > x - 250 && y1 > y && y1 < y + 40){
dx = -1;
dy = 0;
}
//top right corner
if (x1 > x + 40 && x1 < x + 250 && y1 > y - 250 && y1 < y){
dx = 1;
dy = -1;
}
//top left corner
if (x1 < x && x1 > x - 250 && y1 > y - 250 && y1 < y){
dx = -1;
dy = -1;
}
//bottom right corner
if (x1 > x + 40 && x1 < x + 250 && y1 > y + 40 && y1 < y + 250){
dx = 1;
dy = 1;
}
//bottom left corner
if (x1 < x && x1 > x - 250 && y1 > y + 40 && y1 < y + 250){
dx = -1;
dy = 1;
}
【问题讨论】:
-
您的实际问题是什么?如果您知道鼠标在哪里(x 和 y 坐标),并且您知道枪在哪里,那么一些简单的几何和数学应该可以确定子弹的角度或 x 和 y 速度。
-
我的实际问题是我将如何计算鼠标是在播放器的左侧、右侧、顶部、底部,还是在播放器的角落
-
简单代数会为你解答这个问题——如果你只看大方向,你甚至不需要三角函数。您尝试过什么,您的代码在哪里卡住了?
-
好吧...我一直在反复试验,所以我真的没有代码,因为我已经删除了很多次,但我知道我在哪里搞砸了。我可以让角落工作,但我知道如何做侧面,因为角落的一些属性 if 语句适合播放器侧面的属性。
-
“但我知道我在哪里搞砸了。” 为了尽快获得更好的帮助,请发布您的最佳尝试SSCCE。就目前而言,我正在考虑投票结束这个“不是一个真正的问题”。
标签: java algorithm direction projectile