Qt Quick QML-500 줄 코드 합성 수박 게임
1.게임 소개
게임 에는 모두 11 개의 과일 이 있 는데 두 개의 똑 같은 과일 을 큰 과일 로 합성 하면 큰 수박 을 합성 하면 계속 합 칠 수 없다.
그러나 블 로 거들 이 직접 쓴 게임 은 자신 도 큰 수박 을 합치 지 못 했다.
흐릿 해 보이 거나 동 영상 이 보이 지 않 으 면 바로https://www.bilibili.com/video/BV1eh411Y7uV/삐 리 삐 리 직접 보 세 요.
코드 의 논 리 는 주로 다음 과 같다.
과일 을 움 직 이 고 경계 검 사 를 통 해 과일 간 충돌 검 사 를 실시 하 며,같은 과일 두 개 라면 과일 을 합 친다.그렇지 않 으 면 작은 공이 부 딪 힌 후의 이동 방향 을 계산한다.과일 이 결승선 을 넘 쳤 는 지 판단 하고 넘 치면 모든 과일 을 깨 뜨리 고 팝 업 종료 화면 을 통 해 다음 판 을 기다린다.
과일 충돌 계산 은 안에 비교적 복잡 하기 때문에 제 가 다음 에 여러분 께 작은 공 충돌 알고리즘 을 설명 하기 전에 우 리 는 먼저 이전에 배 웠 던 벡터 를 복습 하 겠 습 니 다.
2.벡터 소개
우 리 는 다음 과 같은 양 을 예 로 들 자.
그러면 이때 의 벡터 는 바로 그들의 내용 은(B.x-A.x,B.y-A.y)이다.우리 가 벡터 에 대해 절대 치 를 취 할 때 A 좌표 에서 B 좌표 까지 의 길 이 를 구 하 는 것 이다.즉,:
사선 길이=
3.단위 벡터
단위 벡터 는 길이 가 1 인 벡터 입 니까?아니면 이 벡터 를 예 로 들 면(길이 가 C 입 니까):
단위 벡터 를 가 져 오 려 면 다음 과 같은 내용 을 가 져 옵 니 다.(B.x-A.x)/C,(B.y-A.y)/C)
그래서 단위 벡터 는 1 이다.
4.벡터 와 단위 벡터 점 승
벡터 와 단위 벡터 점 승 은 벡터 가 단위 벡터 에 있 는 투영 을 얻 는 데 쓰 인 다.
먼저 벡터 와 벡터 점 곱 의 공식 은 다음 과 같다.
그 중에서은벡터 와벡터 간 의 협각 이다.
만약이 단위 벡터 라면 절대 치 는 1 과 같다.
그래서:
$\vec{a}* \vec{b} = \left | \vec{a} \right | cos\theta$
마지막 으로 다음 그림 과 같다.
빨간색 선 은 길 이 를 나타 낸다.우 리 는 내 려 다 보 는 그림 을 보면 빨간색 선 은 바로 벡터 방향 에 있 는 투영 이 아 닙 니까?
만약 에 두 벡터 가 마무리 로 연결 된다 면각 도 는 단위 벡터 가 생 긴 후의 각도 이다.다음 그림 과 같다.
결론 을 얻다.
5.1 v1n 과 v2n 가 져 오기
이전에 우 리 는 벡터와 단위 벡터점 승 은 벡터 가 단위 벡터 에 있 는 투영 을 얻 는 데 사용 된다 는 것 을 증명 한 적 이 있다.
그래서 코드 는 다음 과 같다.
let distance = Math.sqrt(Math.pow((ball1.pointX - ball2.pointX),2) + Math.pow((ball1.pointY - ball2.pointY),2));
let radius = ball1.r + ball2.r;
let dx = ball1.pointX - ball2.pointX
let dy = ball1.pointY - ball2.pointY
let ex = dx / radius;
let ey = dy / radius; // (ex,ey)
let v1n = ex * ball1.vx + ey * ball1.vy
let v2n = ex * ball2.vx + ey * ball2.vy
5.2 충돌 후의 속도 방향 계산우선 충돌 을 살 펴 본 후 다음 그림 과 같다.
v1n' = v2n
v2n' = v1n
그리고 동량 보존의 법칙 과 기계 에너지 보존의 법칙 에 따라
let distance = Math.sqrt(Math.pow((ball1.pointX - ball2.pointX),2) + Math.pow((ball1.pointY - ball2.pointY),2));
let radius = ball1.r + ball2.r;
let dx = ball1.pointX - ball2.pointX
let dy = ball1.pointY - ball2.pointY
let ex = dx / radius; let ey = dy / radius; // (ex,ey) ( 1 )
let v1n = ex * ball1.vx + ey * ball1.vy
let v2n = ex * ball2.vx + ey * ball2.vy
if(v1n >= v2n) return; // ,
let v1nn = ball1.cor * ((ball1.mass - ball2.mass) * v1n + 2 *ball2.mass *v2n ) / (ball1.mass +ball2.mass) //
let v2nn = ball2.cor * ((ball2.mass - ball1.mass) * v2n + 2 *ball1.mass *v1n ) / (ball1.mass +ball2.mass)
let ux = -dy / radius; let uy = dx / radius;
let v1t =ux * ball1.vx + uy*ball1.vy
let v2t = ux * ball2.vx + uy * ball2.vy
ball1.vx = v1nn*ex +v1t*ux;
ball1.vy = v1nn*ex +v1t*uy;
ball2.vx = v2nn*ex +v2t*ux;
ball2.vy = v2nn*ex +v2t*uy;
6.작은 공이 어깨 를 스 쳐 지나 가 는 모습먼저 다음 두 개의 작은 공이 평행 으로 이동 하 는 장면 도 를 살 펴 보 자.
만약 에 공 1 과 공 2 가 평행 으로 이동한다 면 그들 과 연결선 의 협각 은 마침 90°이 고 v1n 과 v2n 은 모두 0 이다.
만약 에 공 1 의 협각 이 공 2 의 협각 보다 크 면 충돌 이 생 길 것 이다.다음 그림 과 같다.
점선 화살표 속도 방향 은 공 1 의 협각 이 공 2 의 협각 보다 클 때 장면 을 나타 낸다.
한편,cos 의 수치 채취 방식 은 0~180°일 때 각도 가 클 수록 값 이 작 기 때문에 v1n>=v2n 일 때 부 딪 히 지 않 습 니 다.
7.작은 공이 모든 작은 공의 바로 위 에 내 려 오 는 모습
효과 도 는 다음 과 같다.
이때 작은 공 은 접선 의 속도 방향 이 없 기 때문에 중력 가속도 에서 작은 공 들 을 천천히 쌓 아 게임 이 끝난다.
그래서 우 리 는 충돌 후 말미 에 다음 과 같은 판단 을 추가 해 야 한다.
if (v1n == 0 && v1t ==0 && v2t == 0) { // v1n 0, 1 , v1t v2t 0, 1 2 , 2 1 , 2 vx ,
ball2.vx += 0.1
}
수정 후 효과 그림 아래:전체 충돌 알고리즘 이 실현 되면 완 성 됩 니 다.다른 논 리 는 매우 조롱박 을 그 려 서 실현 하면 됩 니 다.코드 는 아직 업로드 중 입 니 다.여러분 이 또 어떤 작은 게임 을 실현 하고 싶 으 시 면 저 에 게 메 시 지 를 남 겨 주 십시오.관심 이 있 으 시 면 제 가 하 나 를 훑 어 보 겠 습 니 다.
다음은 Qt Quick QML-500 줄 코드 구현 에 대한 상세 한 내용 입 니 다.Qt Quick QML-500 줄 코드 구현'수박 합성 게임'에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
json에서 ObjectMapper를 쓰는 클래스 테스트를 읽습니다.는 스위프트의 제이슨 파어 중 하나다. Mappable을 상속하여 Enity Object를 만들 수 있습니다. 이 반의 테스트를 쓸 때 JSON 파일에서 User의 데이터를 읽어서 테스트를 진행합니다. User.js...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.