如何限制炮塔的运动?
How do I constrain a turret's movements?
我有一个炮塔我想通过炮塔旋转并面向鼠标来限制旋转,这样它就不会超过最大旋转并在达到最大点时停止旋转。并且在达到最小度数时不会低于最小度数,但最大和最小角度会根据鼠标面向的一侧而变化。
当鼠标移到炮塔的右侧时,也就是 mouseX 大于炮塔的 x 位置。
炮塔将改变 scaleX 并且炮塔向右转动并且将瞄准旋转限制在 120 度和 -160 度之间。
当炮塔朝左时,也就是 mouseX 小于炮塔的 x 位置。炮塔将切换 scaleX 并向左转。然后,受限瞄准旋转切换到 70 度和 -20 度之间。
这是我的代码,我是计算旋转和度数的新手,所以我想我完全错了,因为炮塔根本不旋转,除非我删除代码。我需要帮助修复代码。谢谢!
function update(e:Event)
{
//make the turret face the mouse
if (parent != null)
{
var dx = parent.mouseX - x;
var dy = parent.mouseY - y;
var angle = Math.atan2(dy, dx)/Math.PI * 180;
//this is supposed to constrain the rotation if the mouse is bigger than turret's x
//position, else constrain it the other way, this part of the code doesnt work.
//this code makes it so the turret is unable rotate at all
//if i remove the code, the turret can rotate freely though.
if(mouseX > x)
{
angle=Math.min(angle,120);
angle=Math.max(angle,-160);
}
else
{
angle=Math.min(angle,-20);
angle=Math.max(angle,70);
}
rotation = angle;
}
}
您尚未指定 update
的调用方式。如果它被(比如说)鼠标移动事件调用,您可以直接从该事件中获取鼠标坐标。
这是使用该技术对我有用的另一个版本。脚本在 'turret' 影片剪辑的时间轴中。
function update(e:MouseEvent)
{
//make the turret face the mouse
if (parent != null)
{
var dx = e.stageX - x;
var dy = e.stageY - y;
var angle = Math.atan2(dy,dx) / Math.PI * 180;
//this is supposed to constrain the rotation if the mouse is bigger than turret's x
//position, else constrain it the other way, this part of the code doesnt work.
//this code makes it so the turret is unable rotate at all
//if i remove the code, the turret can rotate freely though.
if (mouseX > x)
{
angle = Math.min(angle,120);
angle = Math.max(angle,-160);
}
else
{
angle = Math.min(angle,-20);
angle = Math.max(angle,70);
}
rotation = angle;
}
}
stage.addEventListener(MouseEvent.MOUSE_MOVE, update);
我有一个炮塔我想通过炮塔旋转并面向鼠标来限制旋转,这样它就不会超过最大旋转并在达到最大点时停止旋转。并且在达到最小度数时不会低于最小度数,但最大和最小角度会根据鼠标面向的一侧而变化。
当鼠标移到炮塔的右侧时,也就是 mouseX 大于炮塔的 x 位置。 炮塔将改变 scaleX 并且炮塔向右转动并且将瞄准旋转限制在 120 度和 -160 度之间。
当炮塔朝左时,也就是 mouseX 小于炮塔的 x 位置。炮塔将切换 scaleX 并向左转。然后,受限瞄准旋转切换到 70 度和 -20 度之间。
这是我的代码,我是计算旋转和度数的新手,所以我想我完全错了,因为炮塔根本不旋转,除非我删除代码。我需要帮助修复代码。谢谢!
function update(e:Event)
{
//make the turret face the mouse
if (parent != null)
{
var dx = parent.mouseX - x;
var dy = parent.mouseY - y;
var angle = Math.atan2(dy, dx)/Math.PI * 180;
//this is supposed to constrain the rotation if the mouse is bigger than turret's x
//position, else constrain it the other way, this part of the code doesnt work.
//this code makes it so the turret is unable rotate at all
//if i remove the code, the turret can rotate freely though.
if(mouseX > x)
{
angle=Math.min(angle,120);
angle=Math.max(angle,-160);
}
else
{
angle=Math.min(angle,-20);
angle=Math.max(angle,70);
}
rotation = angle;
}
}
您尚未指定 update
的调用方式。如果它被(比如说)鼠标移动事件调用,您可以直接从该事件中获取鼠标坐标。
这是使用该技术对我有用的另一个版本。脚本在 'turret' 影片剪辑的时间轴中。
function update(e:MouseEvent)
{
//make the turret face the mouse
if (parent != null)
{
var dx = e.stageX - x;
var dy = e.stageY - y;
var angle = Math.atan2(dy,dx) / Math.PI * 180;
//this is supposed to constrain the rotation if the mouse is bigger than turret's x
//position, else constrain it the other way, this part of the code doesnt work.
//this code makes it so the turret is unable rotate at all
//if i remove the code, the turret can rotate freely though.
if (mouseX > x)
{
angle = Math.min(angle,120);
angle = Math.max(angle,-160);
}
else
{
angle = Math.min(angle,-20);
angle = Math.max(angle,70);
}
rotation = angle;
}
}
stage.addEventListener(MouseEvent.MOUSE_MOVE, update);