2012-03-19 3 views
0

mouseX 및 mouseY의 위치를 ​​직접 수정할 수 없기 때문에이 프로젝트는 내 프로젝트 개발에 중요한 까다로운 작업입니다. 읽기 전용 변수.Flash AS3 : 마우스를 일정한 경계 내에 유지

기본적으로 특정 인스턴스가 활성화되어있을 때 특정 삼각형 영역 내에서만 마우스를 움직일 수 있습니다. 후자의 비트는 잘 관리 할 수 ​​있지만 마우스 움직임을 제한하는 데 문제가 있거나 명백한 마우스 움직임이 있습니다.

여기까지 내가 한 일은 다음과 같습니다. 1. Mouse.MOUSE_MOVE로 이동해야 함을 인정하지만 라이브러리 moveclip을 Event.ENTER_FRAME 이벤트의 mouseX 및 mouseY 위치에 할당합니다. (아직 문제가되지 않습니다.) 2. Corey O'Neils 충돌 감지 키트를 사용하여 십자선/커서가있는 영역의 경계 인스턴스에 대해 히트 테스트를 수행하십시오. 3. 커서를 적절하게 오프셋 한 다음 표준 부울 값을 false로 설정하여 커서가 커서에 반복해서 튀어 나오지 않도록합니다.

제 문제는 마우스 이동을 다시 허용하는 것이 가장 좋은 방법인지 모르겠습니다. 아무도 내게이 작업을 수행하는 가장 좋은 방법에 대한 팁을 주거나, 필요하다면 마우스 움직임을 제한하는 것이 더 쉬운 다른 방향으로 나를 가리킬 수 있습니까?

사용자가 탑 다운 (쏜) 범인이 등장하는 비현실적인 방향을 목표로 삼지 않는 것입니다.

Corey O'Neil의 Collision Detection Kit에 익숙하지 않은 분들께서는 비트 맵 (또는 아마도 벡터) 충돌 테스트의 사전 구축 된 설정이라고 생각합니다. 잘못된 것일 수 있습니다. 어떻게 작동하는지에 대한 자세한 내용은 잘 모르겠습니다. 기본 구현뿐입니다. 나는이의 복잡성에 대해 잘 모르겠어요 - 코드 블록에 대한

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 위치의 읽기 전용 특성으로 인해 문제가 발생합니다.

또한 나는 clunky가 아닌 가능한 솔루션을 찾고 있습니다. 마우스가 원래 위치로 돌아 가면 마우스 움직임이 부드럽고 커서가 여전히 위치 할 것입니다. 마우스 위치와 일치해야합니다 (즉, 커서는 항상 마우스와 관련이 있으며 마우스가 경계를 벗어나면 위치가 변경되지 않습니다).

아무도 나에게 약간의 포인터를 주시겠습니까? 긴 질문에 사과드립니다. 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

나는 그 명령에 완전히 익숙하지 않다. 내가 그것을 사용할 때, 나는 bounds *에있을 수없는 것처럼 보일 수있다. : [triangleObject가 경계선 인 곳에서 의도 한대로 구현했다는 것을 확실히 알았습니까? – hazdog

+0

triangleObject는 선이 아닌 삼각형 모양의 스프라이트가됩니다. 즉, 새 스프라이트를 만들고, 삼각형을 그려서 무대에 추가하고 인스턴스 이름을 triangleObject로 지정하십시오. – crooksy88

+0

아직 경계선에 있음을 알 수 없지만 말입니다. 작은 모범을 보게 될 기회라도 있으십니까? 미안 메이트 – hazdog

0

여기서 해결 방법은 시스템 마우스 커서를 숨기고 맞춤형 커서 영화 클립을 스테이지에 추가하는 것입니다.

스테이지에 연결된 MOUSE_MOVE 이벤트 리스너를 사용하여 맞춤형 커서 movieclip을 stage.mouseX 및 stage와 일치하도록 설정합니다.mouseY 값을 확인하고 무비 클립이 경계 외부에 있는지 테스트합니다. 그렇다면 범위 내에서 다시 설정하십시오.

+0

죄송합니다. 나는 또한 마우스 커서를 숨기고 커스텀 그래픽을 맞춤 커서 movieclip (이 경우에는 c)로 사용하고 있습니다. 불행히도, 나는 movieclip이 경계 밖에 있는지 테스트 할 수있는 방법을 알지 못합니다 - 각 경계가 대각선이기 때문에 커서를 제외시킬 실제 x 및 y 좌표가 없습니다. 이것이 내가 충돌 탐지 키트를 사용하는 이유입니다. :) 타, 해리. – hazdog

관련 문제