2010-04-27 4 views
0

저는 Adobe Flash CS4를 사용하고 있습니다. 언어는 내가 두 항목이 액션 스크립트 3 내 라이브러리에서하나의 무비 클립의 여러 인스턴스를 사용하여 충돌 감지를 처리하는 방법은 무엇입니까?

입니다 :

  • 플레이어

플레이어 오브젝트가 이미 그의 주위를 움직이는 제대로 작동

  • 벽. 이제 스테이지 (벽 = 32x32 픽셀)에 여러 벽 객체를 배치하면 벽 안으로 걸어 들어갈 때 플레이어가 움직이지 않도록하고 싶습니다.

    모든 벽에 동일한 인스턴스 이름을 지정하고 해당 개체와의 충돌을 확인하려고했으나 충돌 할 때 벽 중 하나에서만 충돌이 발생합니다.

    나는 모든 벽면에 다른 충돌 스크립트를 제공 할 수 있지만 시간이 오래 걸리며 벽을 선수용으로 전역으로 정의하는 또 다른 방법이 있습니까? 사전에

    감사합니다!

  • +0

    게임 타일 기반입니까? – Mikushi

    답변

    1

    가장 좋은 방법은 하나의 부모 무비 클립에 모든 벽 인스턴스를 놓고 플레이어 인스턴스가 충돌하는지 확인하는 것입니다.

    또는 모든 벽면을 반복하여보고 개별적으로 점검 할 수 있습니다. 낭비하는 소리 일지 모르지만 충돌 감지 루틴에 최적화를 추가 할 수 있습니다. 예를 들어, 플레이어가 화면의 오른쪽 부분에 있다면 왼쪽 벽과의 충돌을 확인하십시오.

    또는 수학을 사용하여 충돌을 확인하고 Flash의 기본 루틴을 피할 수 있습니다. 더 많은 작업처럼 들릴지도 모르지만 프레임 속도 등으로 인해 결함이 있는지 보는 것만으로도 게임 역학이 허용하는 한 그렇게 할 것입니다.

    +0

    첫 번째 솔루션은 작동하지 않을 것입니다. Sprite에 대한 히트 테스트는 픽셀 단위가 아니라 경계 상자이므로 모든 하위 동영상 클립이 최대 경계를 이루는 상자에서 히트 테스트를 끝낼 수 있습니다. 그러므로 거의 항상 사실로 돌아갈 것입니다. 그러나 무비 클립을 비트 맵으로 래스터 화 한 다음 플레이어의 좌표를 기준으로 픽셀의 알파 값을 검사 할 수 있습니다. – Allan

    +1

    해결책은 다음과 같습니다. http://www.tink.ws/blog/as-30-hittest/ – ktdrv

    0

    모든 무비 클립은 MovieClip 클래스의 인스턴스입니다. 모든 인스턴스를 같은 이름을 부여함으로써 당신은 effectivly이 일을하고 있습니다 :

    var myClip:MovieClip = new MovieClip(); 
    myClip = new MovieClip(); 
    
    myClip <-- will always refer to the later movieclip since thats what it is now referenced to. 
    

    당신이 가장 가능성이 모음 (대부분 배열)를 포함하는 클래스를 만들 것입니다 문제를 해결하기 위해. 각 MovieClip에 대한 참조를이 Array에 추가합니다 (간단히 MovieClips를 밀어 넣음). 그런 다음 각 프레임 또는 캐릭터가 움직일 때마다이 배열을 통해 루프가 작동하는지 확인할 때마다 함수가 호출됩니다.이 함수는 벽이 플레이어에 닿아 있는지 여부를 확인하고 그렇지 않은 경우 true를 반환합니다.

    관련 문제