2012-03-19 24 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