2012-03-19 25 views
0

所以这对我项目的开发来说是一个棘手的问题(由于我们不能直接修改mouseX和mouseY的位置) - 它们是只读变量。Flash AS3:将鼠标放在一定的边界内

基本上,我想要做的是让玩家在特定实例处于活动状态时只能在特定三角形区域内移动鼠标。后者我可以管理得很好,但是我无法限制鼠标移动 - 或明显的鼠标移动。

以下是我迄今为止所做的: 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来说是相对较新的 - 但我仍然认为这是一个我可以通过的问题,如果你们中的一个能够向我展示正确的方向并帮助我处理这两种逻辑并略微编程一面。

这里是明确的边界地区等我级的图 A diagram of my stage to clarify further http://i40.tinypic.com/2csfivm.png

非常感谢您的帮助提前,我真的很感激!

干杯,哈利。

回答

0

如何尝试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"); 
} 
+0

我不完全熟悉那个命令。当我使用它时,我似乎永远不会*在边界*:[很确定我已经实现了它,因为你也想,triangleObject是边界线吗? – hazdog 2012-03-19 10:15:43

+0

triangleObject将是一个三角形的精灵,而不是线条。即创建一个新的精灵,绘制一个三角形,将其添加到舞台上,并给它一个实例名称triangleObject – crooksy88 2012-03-19 10:55:38

+0

我仍然无法让它告诉我,我仍然处于边界。你有没有机会掀起一个小例子?对不起伙伴 – hazdog 2012-03-19 11:17:07

0

此处的解决方法可能是隐藏系统鼠标光标并向舞台添加定制光标动画片段。

使用连接到舞台的MOUSE_MOVE事件侦听器,将定制光标movieclip设置为与stage.mouseX和stage匹配。mouseY值,并测试movieclip是否超出限制。如果是这样,请将其重新设置在您的范围内。

+0

道歉 - 我还隐藏鼠标光标与正在使用的自定义图形作为定制光标的movieclip(在这种情况下,它是c)所示。不幸的是,我没有看到我如何测试movieclip是否在界限之外 - 由于每个边界都是对角线,因此没有真正的x和y坐标,我将光标排除在外。这就是我使用碰撞检测套件的原因。 :) Ta,Harry。 – hazdog 2012-03-19 09:00:34