Flash AS3:将鼠标保持在特定范围内
Posted
技术标签:
【中文标题】Flash AS3:将鼠标保持在特定范围内【英文标题】:Flash AS3: Keeping the mouse within certain boundaries 【发布时间】:2012-04-03 18:01:38 【问题描述】:因此,由于我们不能直接修改 mouseX 和 mouseY 的位置 - 它们是只读变量,因此这个对我的项目开发至关重要(对我来说)是一个棘手的问题。
基本上,我想做的是让玩家在特定实例处于活动状态时只能在某个三角形区域内移动鼠标。后一点我可以处理得很好,但是我无法限制鼠标移动 - 或明显的鼠标移动。
这是我到目前为止所做的: 1. 在 Event.ENTER_FRAME 事件中将库 moveclip 分配给 mouseX 和 mouseY 位置 - 尽管我承认这应该移动到 Mouse.MOUSE_MOVE。 (这还没有关系) 2. 使用 Corey O'Neils 碰撞检测套件,用十字准线/光标对区域的边界实例进行命中测试。 3. 适当偏移光标,然后将标准布尔值设置为false,这样光标就不会一遍又一遍地弹回光标。
我的问题是,我不确定再次允许鼠标移动的最佳方法是什么。谁能给我一些关于如何做到这一点的最佳方法的提示,或者如果有必要,请向我指出另一个更容易限制鼠标移动的方向?
不管怎样,这是为了阻止用户在自上而下 (ish) 射击游戏中将角色瞄准不切实际的方向。
对于那些不熟悉 Corey O'Neil 的碰撞检测套件的人,我相信这只是位图(或者可能是矢量)碰撞测试的预构建设置 - 我可能是错的。我不确定它是如何工作的细节,只是它的基本实现。
这是我迄今为止关于鼠标移动的代码:
import flash.ui.Mouse;
import flash.events.event
import com.coreyoneil.collision.CollisionList;
Mouse.hide();
var c:crosshair = new crosshair();
addchild(c);
var myCollisionList:CollisionList;
myCollisionList = new CollisionList(c); //sets up detection for the object c
myCollisionList.addItem(mcB); // adds mcB to the list of objects to check c's hittest with
function aim(e:Event)
var collisions:Array = myCollisionList.checkCollisions();
if (collisions.length>0)
hashit = true; // tells the program that the mouse has collided with a boundary
c.x += 1;
c.y += 1;
else
if (hashit == false)
c.x = mouseX;
c.y = mouseY;
为代码块道歉,但我认为最好显示所有相关代码 - 由于鼠标 X 和 Y 位置的只读性质,我不确定此问题的复杂性。
另外,我正在寻找一种不会笨拙的可能解决方案 - 也就是说,只要鼠标回到该区域,鼠标移动就会像原来一样平滑,光标仍然会在哪里匹配鼠标位置(意思是,光标始终与鼠标相关,并且在鼠标离开边界时不会改变位置)。
谁能给我一些指点?对不起,很长的问题。我认为这里可能有一些让我头脑清醒的地方,对 AS3 来说相对较新 - 但我仍然觉得这是一个我可以克服的问题,如果你们中的一个人能告诉我正确的方向并帮助我解决这两个逻辑和稍微编程方面的事情。
这是我的舞台图,用于阐明边界区域等。
非常感谢您提前提供的任何帮助,我真的很感激!
干杯,哈利。
【问题讨论】:
【参考方案1】:这里的解决方法可能是隐藏系统鼠标光标并将定制的光标动画剪辑添加到舞台。
使用附加到舞台的 MOUSE_MOVE 事件侦听器,设置定制光标动画剪辑以匹配 stage.mouseX 和 stage.mouseY 值,并测试动画剪辑是否超出您的范围。如果是这样,请将其重新设置在您的范围内。
【讨论】:
道歉 - 我还隐藏了鼠标光标,并使用自定义图形作为定制光标动画剪辑(在本例中为 c)。不幸的是,我不知道如何测试影片剪辑是否在边界之外——由于每个边界都是对角线,因此没有真正的 x 和 y 坐标,我将光标排除在外。这就是我使用碰撞检测套件的原因。 :) 塔,哈利。【参考方案2】:试试 getObjectsUnderPoint 怎么样,它返回某个点下的对象数组。 如果您的三角形对象在数组中,则光标必须在其上方。
var pt:Point = new Point(c.x, c.y);
var objects:Array = stage.getObjectsUnderPoint(pt);
if (objects.indexOf(triangleObject) > -1)
trace("still within bounds");
【讨论】:
我对该命令并不完全熟悉。当我使用它时,我似乎永远无法在界限内:[很确定我也按照您的意图实现了它,三角形对象是边界线? triangleObject 将是一个三角形的精灵,而不是线条。即创建一个新精灵,绘制一个三角形,将其添加到舞台并为其命名为 triangleObject 我仍然无法让它告诉我我仍在界限内。你有机会举一个小例子吗?对不起队友 完美,谢谢伙计,我可以在我的项目中完成这项工作,太棒了!非常感谢!以上是关于Flash AS3:将鼠标保持在特定范围内的主要内容,如果未能解决你的问题,请参考以下文章
flash as3 图片展示将鼠标移到图片上就显示文字,然后再点击文字后移除并且显示下一张图片