스크래치의 하드코어 매직 게임 필수 기능: 모듈식 데미지

뇌관

        일부 게임에서 적에게 타격을 가하면 적의 차 내부 데미지에서 튀어나오는 현상이 발생합니다.

        이 손상 메커니즘은 플레이어가 발견하기 어려운 더 깊은 곳에 숨겨진 "블러드 바"를 만듭니다.또한 게임의 플레이 가능성과 진정성을 향상시키고 플레이어의 조작 정확도에 대한 요구 사항을 높이고 많은 마법을 추가합니다. 장면


스크래치에서 이 효과를 얻을 수 있습니까?

상해

        탱크를 예로 들어 보겠습니다. 내부 주요 구조에는 아마도 엔진, 탄약고, 구성원, 약실 블록 등이 있을 것입니다.

판단의 원칙부터 시작하라

        일반적으로 순수한 데이터 충돌을 생각할 때 원형 충돌 상자를 구성하기 위해 두 점 사이의 거리를 계산하는 것을 생각합니다.

이미지.png"

        물론 두 변을 동시에 제곱한 다음 거리의 제곱을 비교할 수도 있으므로 제곱근 연산이 필요하지 않습니다.

        맨해튼 거리를 사용하면 대각선 길이가 2d이고 x축에 대해 45도 회전하는 정사각형 충돌 상자가 형성됩니다.

이미지.png"

        이것은 곱셈을 저장합니다

        그런 다음 이러한 사고 방식을 따르면 차체를 기준으로 각 구성 요소의 xy 좌표를 저장하는 목록을 만들 수 있습니다.

        이때 포탄이 차체에 부딪히면 데미지 계산이 이루어지며 코드 흐름은 대략 다음과 같다.

반복 (포탄 이동 단계) 회 {

] 모듈 목록을 순회하고 각 요소는 a[n]{

]] 포탄이 a[n]에 명중하는지 여부를 결정합니다.

]} 이동(걸음)

}

''

        분명히 이 방법의 시간 복잡도는 O(n²) 이며 충분히 빠르지 않습니다.

        그래서 더 좋은 방법은 무엇입니까?

        추격전을 시작합시다!


그리드 방식

        스크래치의 컴퓨팅 능력은 제한적입니다. 탱크의 내부 구조를 그리드로 추상화할 수 있으며 각 그리드는 모듈로 채워집니다.

예를 들어:

몸:

갑옷 갑옷 갑옷
운전사
탄약고
엔진
 
엔진

터릿:

갑옷 브리치 블록 갑옷
자동차 길이 브리치 블록 포수
탄약고 브리치 블록 탄약고

이런 식으로 차체에 상대적인 쉘 좌표에 대한 간단한 계산을 수행하여 어떤 그리드에 있는지 계산할 수 있습니다.

(특정 코드는 직접 탐색할 수 있습니다.)

그러면 이때 데미지 계산 코드는 다음과 같다.

'''

반복 (포탄 이동 단계) 회 {
] 쉘이 위치한 그리드 계산
] 포탄 타격 판단 모듈
] 이동(단계 크기)
}

'''

        물론 이 방법은 적절한 스텝 크기(일반적으로 그리드 측면 길이와 거의 동일)가 필요합니다.

        분명히 이 방법의 시간 복잡도는 O(n)이며 총 그리드 수를 늘리는 것은 코드 실행 속도에 거의 영향을 미치지 않습니다.

        그러면 결정 방법의 문제는 해결되었고 다음 문제는 쉘의 절대 좌표를 차체에 대한 상대적인 좌표로 변환하는 방법입니다.

        회전축 공식으로 해결할 수 있습니다.

이미지.png"

        (여기서 θ는 x축의 양의 방향에서 시계 반대 방향으로 회전한 각도이고, sc의 방향은 y축의 양의 방향에서 시계 방향으로 회전한 각도입니다. 즉, 공식 angle=90 °-sc 방향)

        물론 삼각변환 공식을 단순화할 수 있다는 것을 안다면 여기서는 명시하지 않겠다.

        결국, 그것들을 결합하고 손상 결과를 반영하는 그래픽 인터페이스를 추가하기만 하면 됩니다. 그러면 만들 수 있습니다!

Guess you like

Origin blog.csdn.net/leyang0910/article/details/132046229