충돌을 감지하는 방법?

도마

나는 우주선이 컨트롤러와 함께 움직이는 비디오 게임을 만들고 있는데, 이기기 위해서는 불 덩어리를 피해야합니다. 그러나 이제 충돌 시스템을 설정하고 싶습니다. 불덩이가 우주선에 닿으면 게임이 종료됩니다 (alert ( "game over")). 이것에 대한 도움이 있습니까? 감사!!!

let spaceship = document.querySelector("#icon")

//Fireball script
const fireballArray = []

function generateFireBallWithAttributes(el, attrs) {
    for (var key in attrs) {
        el.setAttribute(key, attrs[key])
    };
    return el
}

function createFireBalls(amount) {
    for (let i = 0; i <= amount; i++) {
        fireballArray.push(generateFireBallWithAttributes(document.createElement("img"), {
            src: "Photo/fireball.png",
            width: "40"
        }))
    }
}
createFireBalls(10)
fireballArray.forEach((fireballElement) => {
    const fallStartInterval = setInterval(function() {})
    document.querySelector("body").appendChild(fireballElement);
    const fireballMovement = {
        x: fireballRandom(fireballElement.offsetWidth),
        y: 0
    }
    const fireLoop = function() {
        fireballMovement.y += 2;
        fireballElement.style.top = fireballMovement.y + "px";
        if (fireballMovement.y > window.innerHeight) {
            fireballMovement.x = fireballRandom(fireballElement.offsetWidth);
            fireballElement.style.left = fireballMovement.x + "px";
            fireballMovement.y = 0
        }
    }
    fireballElement.style.left = fireballMovement.x + "px";
    let fireInterval = setInterval(fireLoop, 1000 / ((Math.random() * (50)) + 75))
})

function fireballRandom(offset) {
    return Math.floor(Math.random() * (window.innerWidth - offset))
}

//Spaceship moves into space + prevent going out borders
let hits = 0
let pos = {
    top: 1000,
    left: 570
}
const keys = {}
window.addEventListener("keydown", function(e) {
    keys[e.keyCode] = true
})
window.addEventListener("keyup", function(e) {
    keys[e.keyCode] = false
})
const loop = function() {
    if (keys[37] || keys[81]) {pos.left -= 5}
    if (keys[39] || keys[68]) {pos.left += 5}
    if (keys[38] || keys[90]) {pos.top -= 4}
    if (keys[40] || keys[83]) {pos.top += 4}
    if (pos.left < 0) { pos.left = -1}
    if (pos.top < 0) {pos.top = -1}
    if (pos.left + spaceship.offsetWidth >= body.offsetWidth) {
        pos.left = body.offsetWidth - spaceship.offsetWidth
    }
    if (pos.top + spaceship.offsetHeight >= body.offsetHeight) {
        pos.top = body.offsetHeight - spaceship.offsetHeight
    }
    spaceship.setAttribute("data", body.offsetWidth + ":" + body.offsetHeight)
    spaceship.style.left = pos.left + "px";
    spaceship.style.top = pos.top + "px"
}
let sensibilty = setInterval(loop, 8)

<body>
<img src="Photo/Spaceship1.png" id="icon">
</body>

이것 좀 봐 (히트 박스) 이것도

Croraf

코드에 완전한 정보가 없습니다. 즉, 게임이 불 덩어리와 우주선에 명시적이고 독립적 인 setIntervals로 진행되고 더 큰 변경을 원하지 checkCollision()않을 때 불 덩어리가 움직이거나 우주선이 움직일 때마다 함수 를 호출하는 것이 좋습니다 (즉 loop, fireloop"애니메이션 함수"에서).

충돌 자체는 다음과 같이 수행됩니다.

function detectOverlap(fireball) {
  const shipRect = spaceship.getBoundingClientRect();
  const fireballRect = fireball.getBoundingClientRect();
  //these two variables are of following type 
  //DOMRect {x: 570, y: 836, width: 104.484375, height: 112.828125, ...}

  // this will test if the ship collides with specific fireball
  if (
    (shipRect.x + shipRect.width > fireballRect.x && shipRect.x < fireballRect.x + fireball.width)
    && (shipRect.y + shipRect.height > fireballRect.y && shipRect.y < fireballRect.y + fireball.height)
  ) {
    return true;
  } else {
    return false;
  }
};

function checkCollision() {
  let collision = false;
  fireballArray.forEach(fireball => {
    if (detectOverlap(fireball)) { collision = true };
  });

  // this is satisfied if the ship collides with any fireball
  if (collision === true) {
    // do some logic on collision
    console.log('collision');
  }
};

이것은 직사각형 대 직사각형 충돌 감지를 수행합니다. 이것은 가장 적합하지 않을 수 있지만 좋은 첫 번째 근사치입니다.

참고 : devtools 콘솔 (F12)을 확인하여 올바른 충돌 감지를 평가할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

SKSpriteNode와 SKView SpriteKit 간의 충돌을 감지하는 방법

분류에서Dev

물리학없이 충돌을 감지하는 방법

분류에서Dev

앱 충돌을 방지하는 방법

분류에서Dev

충돌을 일으키지 않고 충돌을 감지하는 방법 cocos2d

분류에서Dev

arpwatch를 사용하여 IP 주소 충돌을 감지하는 방법

분류에서Dev

자바에서 고속 충돌을 감지하고 처리하는 방법

분류에서Dev

두 스프라이트 간의 충돌을 감지하는 방법

분류에서Dev

두 캔버스 개체 Tkinter의 충돌을 감지하는 방법

분류에서Dev

상자 안에 머물기 위해 충돌을 감지하는 방법

분류에서Dev

OnCollisionEnter2D 이외의 2D 충돌을 감지하는 방법

분류에서Dev

Gradle 충돌을 제거하는 방법

분류에서Dev

이미지 충돌을 감지하기 위해 UIImage initWithImage의 위치를 지정하는 방법

분류에서Dev

크롬 충돌을 막는 방법?

분류에서Dev

PyBox2d를 사용하여 충돌을 감지하고 해당 정보를 사용하는 방법

분류에서Dev

S3 버킷 정책 충돌을 방지하는 방법

분류에서Dev

앱 충돌을 방지하는 글로벌 방법?

분류에서Dev

Unity 3D에서 드래그하는 동안 GameObject를 사용할 때 충돌을 감지하는 방법이 BoxCollider 2D와 충돌합니다.

분류에서Dev

Unity 3D에서 드래그하는 동안 GameObject를 사용할 때 충돌을 감지하는 방법이 BoxCollider 2D와 충돌합니다.

분류에서Dev

스프라이트 키트에서 충돌을 감지하는 방법은 무엇입니까?

분류에서Dev

AccessViolationException이 감지 될 때 응용 프로그램 충돌을 강제하는 방법

분류에서Dev

충돌 감지로 캔버스 채우기 스타일을 변경하는 방법은 무엇입니까?

분류에서Dev

충돌 감지와 함께 죽음 기능을 추가하는 방법은 무엇입니까?

분류에서Dev

이전 활동을 반환하는 동안 충돌을 방지하는 방법?

분류에서Dev

충돌하지 않고 상자에 서있을 수 있도록 충돌을 수정하는 방법

분류에서Dev

두 SKSpriteNode 사이의 충돌을 감지하는 방법이 있지만 겹치도록 허용하는 방법이 있습니까?

분류에서Dev

SpriteKit에서 충돌과 관련된 노드 수를 감지하는 방법

분류에서Dev

가속도계 센서를 사용하여 장난감 자동차 두 대의 충돌을 감지하고 일치시키는 방법

분류에서Dev

충돌하는 eslint 규칙을 찾는 방법

분류에서Dev

프로그램이 충돌하는 줄을 얻는 방법

Related 관련 기사

  1. 1

    SKSpriteNode와 SKView SpriteKit 간의 충돌을 감지하는 방법

  2. 2

    물리학없이 충돌을 감지하는 방법

  3. 3

    앱 충돌을 방지하는 방법

  4. 4

    충돌을 일으키지 않고 충돌을 감지하는 방법 cocos2d

  5. 5

    arpwatch를 사용하여 IP 주소 충돌을 감지하는 방법

  6. 6

    자바에서 고속 충돌을 감지하고 처리하는 방법

  7. 7

    두 스프라이트 간의 충돌을 감지하는 방법

  8. 8

    두 캔버스 개체 Tkinter의 충돌을 감지하는 방법

  9. 9

    상자 안에 머물기 위해 충돌을 감지하는 방법

  10. 10

    OnCollisionEnter2D 이외의 2D 충돌을 감지하는 방법

  11. 11

    Gradle 충돌을 제거하는 방법

  12. 12

    이미지 충돌을 감지하기 위해 UIImage initWithImage의 위치를 지정하는 방법

  13. 13

    크롬 충돌을 막는 방법?

  14. 14

    PyBox2d를 사용하여 충돌을 감지하고 해당 정보를 사용하는 방법

  15. 15

    S3 버킷 정책 충돌을 방지하는 방법

  16. 16

    앱 충돌을 방지하는 글로벌 방법?

  17. 17

    Unity 3D에서 드래그하는 동안 GameObject를 사용할 때 충돌을 감지하는 방법이 BoxCollider 2D와 충돌합니다.

  18. 18

    Unity 3D에서 드래그하는 동안 GameObject를 사용할 때 충돌을 감지하는 방법이 BoxCollider 2D와 충돌합니다.

  19. 19

    스프라이트 키트에서 충돌을 감지하는 방법은 무엇입니까?

  20. 20

    AccessViolationException이 감지 될 때 응용 프로그램 충돌을 강제하는 방법

  21. 21

    충돌 감지로 캔버스 채우기 스타일을 변경하는 방법은 무엇입니까?

  22. 22

    충돌 감지와 함께 죽음 기능을 추가하는 방법은 무엇입니까?

  23. 23

    이전 활동을 반환하는 동안 충돌을 방지하는 방법?

  24. 24

    충돌하지 않고 상자에 서있을 수 있도록 충돌을 수정하는 방법

  25. 25

    두 SKSpriteNode 사이의 충돌을 감지하는 방법이 있지만 겹치도록 허용하는 방법이 있습니까?

  26. 26

    SpriteKit에서 충돌과 관련된 노드 수를 감지하는 방법

  27. 27

    가속도계 센서를 사용하여 장난감 자동차 두 대의 충돌을 감지하고 일치시키는 방법

  28. 28

    충돌하는 eslint 규칙을 찾는 방법

  29. 29

    프로그램이 충돌하는 줄을 얻는 방법

뜨겁다태그

보관