Spaces:
Running
Running
Update game.js
Browse files
game.js
CHANGED
@@ -280,22 +280,34 @@ class Fighter {
|
|
280 |
}
|
281 |
|
282 |
updateControls(keys, deltaTime) {
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
299 |
|
300 |
updatePhysics(deltaTime) {
|
301 |
if (!this.mesh) return;
|
@@ -1689,37 +1701,31 @@ class Game {
|
|
1689 |
}
|
1690 |
|
1691 |
setupEventListeners() {
|
1692 |
-
// 키보드 이벤트 - gameStarted 체크를 수정
|
1693 |
document.addEventListener('keydown', (event) => {
|
1694 |
if (this.isGameOver) return;
|
1695 |
|
1696 |
-
// gameStarted
|
1697 |
if (!this.isStarted) return;
|
1698 |
|
1699 |
switch(event.code) {
|
1700 |
case 'KeyW':
|
1701 |
this.keys.w = true;
|
1702 |
-
|
1703 |
-
console.log('W key pressed, throttle increasing');
|
1704 |
break;
|
1705 |
case 'KeyA':
|
1706 |
this.keys.a = true;
|
1707 |
-
|
1708 |
-
console.log('A key pressed, turning left');
|
1709 |
break;
|
1710 |
case 'KeyS':
|
1711 |
this.keys.s = true;
|
1712 |
-
|
1713 |
-
console.log('S key pressed, throttle decreasing');
|
1714 |
break;
|
1715 |
case 'KeyD':
|
1716 |
this.keys.d = true;
|
1717 |
-
|
1718 |
-
console.log('D key pressed, turning right');
|
1719 |
break;
|
1720 |
case 'KeyF':
|
1721 |
this.keys.f = true;
|
1722 |
-
event.preventDefault();
|
1723 |
break;
|
1724 |
}
|
1725 |
});
|
@@ -1727,28 +1733,20 @@ class Game {
|
|
1727 |
document.addEventListener('keyup', (event) => {
|
1728 |
if (this.isGameOver) return;
|
1729 |
|
1730 |
-
// gameStarted
|
1731 |
if (!this.isStarted) return;
|
1732 |
|
1733 |
switch(event.code) {
|
1734 |
-
case 'KeyW':
|
1735 |
-
|
1736 |
-
|
1737 |
-
case '
|
1738 |
-
|
1739 |
-
break;
|
1740 |
-
case 'KeyS':
|
1741 |
-
this.keys.s = false;
|
1742 |
-
break;
|
1743 |
-
case 'KeyD':
|
1744 |
-
this.keys.d = false;
|
1745 |
-
break;
|
1746 |
-
case 'KeyF':
|
1747 |
-
this.keys.f = false;
|
1748 |
-
break;
|
1749 |
}
|
1750 |
});
|
|
|
1751 |
document.addEventListener('mousemove', (event) => {
|
|
|
1752 |
if (!document.pointerLockElement || this.isGameOver || !this.isStarted) return;
|
1753 |
|
1754 |
const deltaX = event.movementX || 0;
|
@@ -1758,6 +1756,7 @@ class Game {
|
|
1758 |
});
|
1759 |
|
1760 |
document.addEventListener('mousedown', (event) => {
|
|
|
1761 |
if (!document.pointerLockElement || this.isGameOver || !this.isStarted) return;
|
1762 |
|
1763 |
if (event.button === 0) {
|
@@ -2823,21 +2822,26 @@ class Game {
|
|
2823 |
}
|
2824 |
|
2825 |
animate() {
|
2826 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2827 |
|
2828 |
-
|
|
|
|
|
|
|
2829 |
|
2830 |
-
|
2831 |
-
|
2832 |
-
this.lastTime = currentTime;
|
2833 |
|
2834 |
-
if (this.isLoaded && this.fighter.isLoaded) {
|
2835 |
-
// F키 상태를 Fighter에 전달
|
2836 |
-
this.fighter.escapeKeyPressed = this.keys.f;
|
2837 |
-
|
2838 |
-
this.fighter.updateControls(this.keys, deltaTime);
|
2839 |
-
this.fighter.updatePhysics(deltaTime);
|
2840 |
-
this.fighter.updateBullets(this.scene, deltaTime, this); // this 추가
|
2841 |
|
2842 |
// 마우스 누름 상태일 때 연속 발사
|
2843 |
if (this.fighter.isMouseDown && this.isStarted) {
|
|
|
280 |
}
|
281 |
|
282 |
updateControls(keys, deltaTime) {
|
283 |
+
// 디버깅을 위한 로그
|
284 |
+
if (keys.w || keys.s || keys.a || keys.d) {
|
285 |
+
console.log('Controls active:', {
|
286 |
+
w: keys.w,
|
287 |
+
a: keys.a,
|
288 |
+
s: keys.s,
|
289 |
+
d: keys.d,
|
290 |
+
throttle: this.throttle,
|
291 |
+
targetYaw: this.targetYaw
|
292 |
+
});
|
293 |
+
}
|
294 |
+
|
295 |
+
// W/S: 스로틀만 제어 (가속/감속)
|
296 |
+
if (keys.w) {
|
297 |
+
this.throttle = Math.min(1.0, this.throttle + deltaTime * 0.5);
|
298 |
}
|
299 |
+
if (keys.s) {
|
300 |
+
this.throttle = Math.max(0.1, this.throttle - deltaTime * 0.5);
|
301 |
+
}
|
302 |
+
|
303 |
+
// A/D: 보조 요 제어 (러더) - 반응성 개선
|
304 |
+
if (keys.a) {
|
305 |
+
this.targetYaw -= deltaTime * 1.2;
|
306 |
+
}
|
307 |
+
if (keys.d) {
|
308 |
+
this.targetYaw += deltaTime * 1.2;
|
309 |
+
}
|
310 |
+
}
|
311 |
|
312 |
updatePhysics(deltaTime) {
|
313 |
if (!this.mesh) return;
|
|
|
1701 |
}
|
1702 |
|
1703 |
setupEventListeners() {
|
|
|
1704 |
document.addEventListener('keydown', (event) => {
|
1705 |
if (this.isGameOver) return;
|
1706 |
|
1707 |
+
// gameStarted 대신 this.isStarted 사용
|
1708 |
if (!this.isStarted) return;
|
1709 |
|
1710 |
switch(event.code) {
|
1711 |
case 'KeyW':
|
1712 |
this.keys.w = true;
|
1713 |
+
console.log('W key pressed - Accelerating');
|
|
|
1714 |
break;
|
1715 |
case 'KeyA':
|
1716 |
this.keys.a = true;
|
1717 |
+
console.log('A key pressed - Turning left');
|
|
|
1718 |
break;
|
1719 |
case 'KeyS':
|
1720 |
this.keys.s = true;
|
1721 |
+
console.log('S key pressed - Decelerating');
|
|
|
1722 |
break;
|
1723 |
case 'KeyD':
|
1724 |
this.keys.d = true;
|
1725 |
+
console.log('D key pressed - Turning right');
|
|
|
1726 |
break;
|
1727 |
case 'KeyF':
|
1728 |
this.keys.f = true;
|
|
|
1729 |
break;
|
1730 |
}
|
1731 |
});
|
|
|
1733 |
document.addEventListener('keyup', (event) => {
|
1734 |
if (this.isGameOver) return;
|
1735 |
|
1736 |
+
// gameStarted 대신 this.isStarted 사용
|
1737 |
if (!this.isStarted) return;
|
1738 |
|
1739 |
switch(event.code) {
|
1740 |
+
case 'KeyW': this.keys.w = false; break;
|
1741 |
+
case 'KeyA': this.keys.a = false; break;
|
1742 |
+
case 'KeyS': this.keys.s = false; break;
|
1743 |
+
case 'KeyD': this.keys.d = false; break;
|
1744 |
+
case 'KeyF': this.keys.f = false; break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1745 |
}
|
1746 |
});
|
1747 |
+
|
1748 |
document.addEventListener('mousemove', (event) => {
|
1749 |
+
// 여기도 gameStarted를 this.isStarted로 변경
|
1750 |
if (!document.pointerLockElement || this.isGameOver || !this.isStarted) return;
|
1751 |
|
1752 |
const deltaX = event.movementX || 0;
|
|
|
1756 |
});
|
1757 |
|
1758 |
document.addEventListener('mousedown', (event) => {
|
1759 |
+
// 여기도 gameStarted를 this.isStarted로 변경
|
1760 |
if (!document.pointerLockElement || this.isGameOver || !this.isStarted) return;
|
1761 |
|
1762 |
if (event.button === 0) {
|
|
|
2822 |
}
|
2823 |
|
2824 |
animate() {
|
2825 |
+
if (this.isGameOver) return;
|
2826 |
+
|
2827 |
+
this.animationFrameId = requestAnimationFrame(() => this.animate());
|
2828 |
+
|
2829 |
+
const currentTime = performance.now();
|
2830 |
+
const deltaTime = Math.min((currentTime - this.lastTime) / 1000, 0.1);
|
2831 |
+
this.lastTime = currentTime;
|
2832 |
+
|
2833 |
+
if (this.isLoaded && this.fighter.isLoaded) {
|
2834 |
+
// F키 상태를 Fighter에 전달
|
2835 |
+
this.fighter.escapeKeyPressed = this.keys.f;
|
2836 |
|
2837 |
+
// isStarted 확인 후 컨트롤 업데이트
|
2838 |
+
if (this.isStarted) {
|
2839 |
+
this.fighter.updateControls(this.keys, deltaTime);
|
2840 |
+
}
|
2841 |
|
2842 |
+
this.fighter.updatePhysics(deltaTime);
|
2843 |
+
this.fighter.updateBullets(this.scene, deltaTime, this);
|
|
|
2844 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2845 |
|
2846 |
// 마우스 누름 상태일 때 연속 발사
|
2847 |
if (this.fighter.isMouseDown && this.isStarted) {
|