0

所以,我发现一些代码基本上是在我的播放器对象周围设置一个矩形跟随鼠标设置的距离。在 2D 平面上,我有角色,当玩家点击鼠标按钮时,鼠标和角色之间会出现一个盾牌。这部分有效,这里是代码:

var angle;
var track_radius = 10;

// find the angle to the mouse
angle = point_direction(self.x, self.y, mouse_x, mouse_y);

// turn the shield to look at the mouse
image_angle = angle;

// convert to radians for the math functions
angle = degtorad(angle);

// place the shield on a circular track about the player
// . track_radius is set in the create event
x = global.playerX + 50 * cos(angle);
y = global.playerY - 50 * sin(angle); // minus

因此,当鼠标靠近防护罩时,问题就出现了。护盾一分为二,映照在鼠标指针上,来回闪烁。基本上只要鼠标靠近或在盾牌存在的半径内,问题就会继续存在。还可能值得注意的是,盾牌是在单击鼠标时在玩家的位置创建的,然后使用上面的代码移动。想法?

4

1 回答 1

0
angle = point_direction(self.x, self.y, mouse_x, mouse_y);

此代码正在计算从盾牌到鼠标指针的角度,因为self当前指的是盾牌。

x = global.playerX + 50 * cos(angle);
y = global.playerY - 50 * sin(angle); // minus

在这里,您设置盾牌相对于玩家的位置,以便玩家与盾牌的角度等于您上面计算的角度。

现在考虑鼠标靠近盾牌的情况,盾牌到鼠标的方向与玩家到鼠标的方向不同。在下面的错误 ASCII 图形中,想象 O 是玩家,) 是盾牌,^ 是鼠标光标。

O ------ )
         ^

盾牌直接位于玩家的右侧(0°),但鼠标位于盾牌正下方(270°)。因此,您的代码会将盾牌直接放在玩家下方(请记住,angle在您的代码中是从盾牌到鼠标的方向)

O        
|        ^
|
|
)

在下一步中,代码再次将方向从盾牌指向鼠标。这次它更像是在盾牌上方 45°,因此盾牌将放置在玩家右侧上方 45° 的位置。

这种来回跳跃会随着位置的变化而发生几次,直到盾牌“稳定”在鼠标光标周围的两个交替位置。

要找到解决方案,您想使用从玩家到鼠标光标的方向来确定您的盾牌位置,而不是从盾牌到鼠标光标的方向。但我不得不说,你不小心创建的系统的动态有些有趣:)

于 2014-09-14T21:41:06.177 回答