2017-10-03 8 views
0

목표가 나타나고 잠시 사라지는 총격 사건 게임을 만들고있었습니다. 어떻게 코드를 사용하는지 모르겠다. 나는 if statement을 사용할 때 물체를 감지하는 방법을 모른다.as3 - 타이머를 사용하여 객체가 다른 객체로 이동했는지 감지합니다.

여기 내 코드 :

import flash.utils.Timer; 

var dummySX: Number = dummyS.x; 
var dummySY: Number = dummyS.y; 


var targetTimeStart: Timer = new Timer(1000); 
targetTimeStart.start(); 
targetTimeStart.addEventListener(TimerEvent.TIMER, targetTimeStartNow); 

function targetTimeStartNow(e: TimerEvent): void { 
    target.x = dummySX; 
    target.y = dummySY; 
    targetTimeStart.stop(); 
} 

function detect(): void { 
    if ((target.x == dummySX) && (target.y == dummySY)) { 
     trace("DETECTED"); 
    } 
} 

또는

function detect(): void { 
    if (target.hitTestObject(dummyS)==true) { 
     trace("DETECTED"); 
    } 
} 

감사합니다!

+0

'hitTest' 옵션을 살펴보십시오. –

답변

0

개체간에 히트를 탐지하는 데는 여러 가지 방법이 있습니다. 의 당신이 표시 객체 (DO1DO2) 모든

먼저 DO1이 있다고 가정 해 봅시다. hitTestObject (do2). 이 방법은 매우 빠르며 직사각형 객체에서 잘 작동합니다. 직사각형 객체를 회전하거나 직사각형 객체 이외의 다른 객체와 함께 사용하면 시각적으로 "거짓"결과를 얻을 수 있습니다.

다음으로 do1이 있습니다. hitTestPoint (do2.x, do2.y, shapeFlag) 이 메서드는 느리지 만 더 정확합니다. 특히 shapeFlag를 true로 설정하면 더욱 정확합니다. 단일 점 (x & y 좌표)에 대해 히트를 테스트합니다.

이 당신이 BitmapData 객체를 사용하여 암시 세 번째 방법 (그러나 hitTest) 인 그 더욱 정확하고 공정에 BitmapData 클래스의 특정,하지만 훨씬 어렵습니다 (투명 픽셀을 무시 할 수있는).

네 번째 옵션은 적중 감지의 사용자 지정 구현을 수행하는 것이지만 여기서 자세히 설명하는 것처럼 보입니다.

코드를 살펴보면 1 초 타이머 개체를 만들고 시작한 다음 targetTimeStartNow 함수를 사용하여 수신기를 추가하는 것을 볼 수 있습니다. 이 함수에서 대상을 개체를 dummyS 개체의 동일한 위치로 이동 한 다음 targetTimeStart Timer 개체를 중지합니다. 즉, 해당 기능에 항목이 하나만 있음을 의미합니다. 두 통화 감지 추적해야하지만

기능 즉, 사용자 코드에서 호출되지 않습니다 보인다 감지합니다.

작성한 첫 번째 감지 기능은 hitTestPoint 버전을 모방합니다.

function detect(): void { 
    if ((target.x == dummySX) && (target.y == dummySY)) { 
     trace("DETECTED"); 
    } 
} 

이와 동일합니다

function detect():void { 
    if(target.hitTestPoint(dummySX, dummySY, false)) { 
     trace("DETECTED"); 
    } 
} 

합니다 (물체의 모양, 그리고 자신의 경계 상자 사용하기 위해)이 변형을 사용하는 것이 좋을 것 :

function detect():void { 
    if(target.hitTestPoint(dummySX, dummySY, true)) { 
     trace("DETECTED"); 
    } 
} 

두 번째 감지 기능은 hitTestObject를 사용하며 정상입니다.명시 적으로 사용할 수 있습니다 == true :

function detect(): void { 
    if(target.hitTestObject(dummyS)) { 
     trace("DETECTED"); 
    } 
} 

유일한 것은 코드에서 실행하여 실행되도록하는 것입니다. 대상 개체가 이동 된 후에 그래서 어딘가 단지 추가 :

detect(); 

를 필요에 따라, 당신은 targetTimeStartNow 방법에 추가 (또는는 enterFrame 리스너를 추가하거나 다른 타이머 객체를 생성) 수 :

function targetTimeStartNow(e: TimerEvent): void { 
    target.x = dummySX; 
    target.y = dummySY; 
    targetTimeStart.stop(); 
    detect(); 
}