Browse Source

日常开发

林旭祥 2 days ago
parent
commit
604b12a2e4
1 changed files with 41 additions and 0 deletions
  1. 41 0
      src/views/game/fruit.vue

+ 41 - 0
src/views/game/fruit.vue

@@ -1179,6 +1179,9 @@ class PlayScene extends Phaser.Scene {
   onBomb(bomb) {
     this.bombExplode = true;
 
+    // 屏幕震动效果
+    this.shakeScreen();
+
     // 停止所有水果的物理运动
     this.fruits.forEach(fruit => {
       if (fruit.getSprite() && fruit.getSprite().body) {
@@ -1205,6 +1208,44 @@ class PlayScene extends Phaser.Scene {
     );
   }
 
+  // 添加屏幕震动方法
+  shakeScreen() {
+    // 获取主相机
+    const camera = this.cameras.main;
+
+    // 保存相机初始位置
+    const startX = camera.x;
+    const startY = camera.y;
+
+    // 震动持续时间(ms)
+    const duration = 500;
+    // 震动强度
+    const intensity = 8;
+    // 震动频率控制
+    const frequency = 20;
+
+    // 计算震动次数
+    const shakes = duration / frequency;
+    let shakeCount = 0;
+
+    // 创建震动定时器
+    const shakeInterval = setInterval(() => {
+      if (shakeCount < shakes) {
+        // 随机生成震动偏移量
+        const offsetX = Phaser.Math.Between(-intensity, intensity);
+        const offsetY = Phaser.Math.Between(-intensity, intensity);
+
+        // 应用震动
+        camera.setPosition(startX + offsetX, startY + offsetY);
+        shakeCount++;
+      } else {
+        // 震动结束,恢复相机位置
+        clearInterval(shakeInterval);
+        camera.setPosition(startX, startY);
+      }
+    }, frequency);
+  }
+
   loseCount() {
     if (this.lostCount === 1) {
       this.lostAnim(this.x, 'xf');