cutechicken commited on
Commit
f6cb1f0
·
verified ·
1 Parent(s): 7124972

Update game.js

Browse files
Files changed (1) hide show
  1. game.js +26 -11
game.js CHANGED
@@ -587,33 +587,38 @@ class Fighter {
587
 
588
  this.ammo--;
589
 
590
- const bulletGeometry = new THREE.SphereGeometry(0.2);
 
591
  const bulletMaterial = new THREE.MeshBasicMaterial({
592
  color: 0xffff00,
593
  emissive: 0xffff00,
594
- emissiveIntensity: 0.7
595
  });
596
  const bullet = new THREE.Mesh(bulletGeometry, bulletMaterial);
597
 
598
- // 기수 끝에서 발사
599
- const muzzleOffset = new THREE.Vector3(0, 0, 8);
600
  muzzleOffset.applyEuler(this.rotation);
601
  bullet.position.copy(this.position).add(muzzleOffset);
602
 
 
 
 
 
603
  // 탄환 초기 위치 저장
604
  bullet.startPosition = bullet.position.clone();
605
 
606
  const bulletSpeed = 1000;
607
  const direction = new THREE.Vector3(0, 0, 1);
608
  direction.applyEuler(this.rotation);
609
- bullet.velocity = direction.multiplyScalar(bulletSpeed).add(this.velocity);
610
 
611
  scene.add(bullet);
612
  this.bullets.push(bullet);
613
 
614
- // 30MM_M163.ogg 소리 재생
615
  try {
616
- const audio = new Audio('sounds/30MM_M163.ogg');
617
  if (audio) {
618
  audio.volume = 0.3;
619
  audio.play().catch(e => console.log('Gunfire sound failed to play'));
@@ -626,6 +631,11 @@ class Fighter {
626
  const bullet = this.bullets[i];
627
  bullet.position.add(bullet.velocity.clone().multiplyScalar(deltaTime));
628
 
 
 
 
 
 
629
  // 1000m 이상 날아가면 제거
630
  if (bullet.position.distanceTo(bullet.startPosition) > 1000 ||
631
  bullet.position.y < 0 ||
@@ -792,18 +802,23 @@ class EnemyFighter {
792
  shoot() {
793
  this.lastShootTime = Date.now();
794
 
795
- const bulletGeometry = new THREE.SphereGeometry(0.15);
 
796
  const bulletMaterial = new THREE.MeshBasicMaterial({
797
  color: 0xff0000,
798
  emissive: 0xff0000,
799
- emissiveIntensity: 0.5
800
  });
801
  const bullet = new THREE.Mesh(bulletGeometry, bulletMaterial);
802
 
803
- const muzzleOffset = new THREE.Vector3(0, 0, 6);
804
  muzzleOffset.applyEuler(this.rotation);
805
  bullet.position.copy(this.position).add(muzzleOffset);
806
 
 
 
 
 
807
  const direction = new THREE.Vector3(0, 0, 1);
808
  direction.applyEuler(this.rotation);
809
  bullet.velocity = direction.multiplyScalar(800);
@@ -1650,7 +1665,7 @@ class Game {
1650
  // 마우스 누름 상태일 때 연속 발사
1651
  if (this.fighter.isMouseDown && this.isStarted) {
1652
  const currentShootTime = Date.now();
1653
- if (!this.lastShootTime || currentShootTime - this.lastShootTime >= 500) { // 0.5초마다
1654
  this.fighter.shoot(this.scene);
1655
  this.lastShootTime = currentShootTime;
1656
  }
 
587
 
588
  this.ammo--;
589
 
590
+ // 직선 모양의 탄환 (더 두껍게)
591
+ const bulletGeometry = new THREE.CylinderGeometry(0.5, 0.5, 8, 8); // 반지름 0.5, 길이 8
592
  const bulletMaterial = new THREE.MeshBasicMaterial({
593
  color: 0xffff00,
594
  emissive: 0xffff00,
595
+ emissiveIntensity: 1.0
596
  });
597
  const bullet = new THREE.Mesh(bulletGeometry, bulletMaterial);
598
 
599
+ // 기수 끝에서 발사 (더 앞쪽에서)
600
+ const muzzleOffset = new THREE.Vector3(0, 0, 10);
601
  muzzleOffset.applyEuler(this.rotation);
602
  bullet.position.copy(this.position).add(muzzleOffset);
603
 
604
+ // 탄환을 발사 방향으로 회전
605
+ bullet.rotation.copy(this.rotation);
606
+ bullet.rotateX(Math.PI / 2); // 실린더가 Z축 방향을 향하도록
607
+
608
  // 탄환 초기 위치 저장
609
  bullet.startPosition = bullet.position.clone();
610
 
611
  const bulletSpeed = 1000;
612
  const direction = new THREE.Vector3(0, 0, 1);
613
  direction.applyEuler(this.rotation);
614
+ bullet.velocity = direction.multiplyScalar(bulletSpeed);
615
 
616
  scene.add(bullet);
617
  this.bullets.push(bullet);
618
 
619
+ // m134.ogg 소리 재생
620
  try {
621
+ const audio = new Audio('sounds/m134.ogg');
622
  if (audio) {
623
  audio.volume = 0.3;
624
  audio.play().catch(e => console.log('Gunfire sound failed to play'));
 
631
  const bullet = this.bullets[i];
632
  bullet.position.add(bullet.velocity.clone().multiplyScalar(deltaTime));
633
 
634
+ // 탄환도 같은 방향을 유지하도록 회전 업데이트
635
+ const direction = bullet.velocity.clone().normalize();
636
+ const angle = Math.atan2(direction.x, direction.z);
637
+ bullet.rotation.y = angle;
638
+
639
  // 1000m 이상 날아가면 제거
640
  if (bullet.position.distanceTo(bullet.startPosition) > 1000 ||
641
  bullet.position.y < 0 ||
 
802
  shoot() {
803
  this.lastShootTime = Date.now();
804
 
805
+ // 직선 모양의 탄환 (적기도 동일하게 적용)
806
+ const bulletGeometry = new THREE.CylinderGeometry(0.4, 0.4, 6, 8);
807
  const bulletMaterial = new THREE.MeshBasicMaterial({
808
  color: 0xff0000,
809
  emissive: 0xff0000,
810
+ emissiveIntensity: 1.0
811
  });
812
  const bullet = new THREE.Mesh(bulletGeometry, bulletMaterial);
813
 
814
+ const muzzleOffset = new THREE.Vector3(0, 0, 8);
815
  muzzleOffset.applyEuler(this.rotation);
816
  bullet.position.copy(this.position).add(muzzleOffset);
817
 
818
+ // 탄환을 발사 방향으로 회전
819
+ bullet.rotation.copy(this.rotation);
820
+ bullet.rotateX(Math.PI / 2);
821
+
822
  const direction = new THREE.Vector3(0, 0, 1);
823
  direction.applyEuler(this.rotation);
824
  bullet.velocity = direction.multiplyScalar(800);
 
1665
  // 마우스 누름 상태일 때 연속 발사
1666
  if (this.fighter.isMouseDown && this.isStarted) {
1667
  const currentShootTime = Date.now();
1668
+ if (!this.lastShootTime || currentShootTime - this.lastShootTime >= 200) { // 0.2초마다
1669
  this.fighter.shoot(this.scene);
1670
  this.lastShootTime = currentShootTime;
1671
  }