2017-10-21 3 views
-1

나는 다음과 같은 "게임"이 있습니다자바 스크립트 충돌 감지

jsfiddle

function update() { 
    coyote.applyForce(gravity); 
    coyote.edges(); 
    coyote.update(); 
    cactus.update(); 
    if (coyote.intersects(cactus)){ 
    alert("colision"); 
    } 
} 

문제가 코요테가 점프 할 때, 사업부가 크기를 증가의 원인이 일부 빈 공간이 있다는 것을입니다 충돌도.

충돌 감지 기능을 향상시킬 수있는 방법이 있습니까? 내부 히트 박스를 구현하려고 시도했지만 어떻게해야 할지를 파악하지 못했습니다.

+2

예. 교차점을 계산합니다. 이 크기의 캔버스를 사용하여 두 요소의 특정 영역을 렌더링하고 두 요소 중 하나에 대한 원시 픽셀 데이터를 가져옵니다. 이제 양쪽 배열에 값 (0 이외)이 포함 된 점에 대해 픽셀 단위 (4 바이트)로 데이터를 검색하십시오. – Thomas

답변

1

어디서 무엇을하는지 이해하는 데 시간이 걸렸습니다.

하지만 플레이어의 정적 너비와 높이를 사용하면. 그것은 당신의 문제를 해결해야합니다.

constructor(){ 
    this.coyote = new Entity(); 
    this.coyote.pos.set(0,222); 
    this.coyote.vel.set(0,0); 
    this.coyote.acc.set(0,0); 
    this.coyote.width = 78; 
    this.coyote.height = 128; 
    this.isGrounded = true; 
    this.state = States.RUNNING; 
} 

intersects(other) { 
    let div = document.getElementById("player"); 
    let left = this.coyote.pos.x; 
    let right = this.coyote.width; 
    let top = this.coyote.pos.y; 
    let bottom = this.coyote.height; 
    let oLeft = other.left; 
    let oRight = other.right; 
    let oTop = other.top; 
    let oBottom = other.bottom; 
    return !(left > oRight || right < oLeft || top > oBottom || bottom < oTop); 
} 

이렇게하면 문제가 해결됩니다.

팁 :
1. 초보자 용 캔버스로 사용하십시오.
2. 가장 중요한 것은 읽을 수있는 코드입니다.
3. 의견 및 요약

+0

이 작업에서는 캔버스를 사용하는 것이 허용되지 않습니다. 너무 쉽게 사용할 수 있습니다. 원본 코드는 여러 개의 js 파일로 분할되어 있지만 jsfiddle은 (내가 아는 한) 허용하지 않습니다. –

+0

오, 멋진 후프 나는 당신을 도왔습니다 ^. ^ – RensvWalstijn