Pārlūkot izejas kodu

blockly编程游戏
1、新增使用组件
2、处理使用组件逻辑和配置

liyanbo 5 mēneši atpakaļ
vecāks
revīzija
69365633bc
1 mainītis faili ar 26 papildinājumiem un 6 dzēšanām
  1. 26 6
      src/views/block/MapGame.vue

+ 26 - 6
src/views/block/MapGame.vue

@@ -143,7 +143,7 @@ const CONFIG = {
     ACTION_DELAY: 200,       // 每次动作后的延迟时间
     COLLISION_DELAY: 300,    // 碰撞后的延迟时间
     RESET_DELAY: 300,        // 重置后的延迟时间
-    MESSAGE_DISPLAY: 3000,   // 消息显示时间
+    MESSAGE_DISPLAY: 2000,   // 消息显示时间
     COLLISION_RESET: 1000,   // 碰撞状态重置时间
     LOOP_PREVENTION: 10,     // 循环防止UI阻塞的延迟
   },
@@ -811,7 +811,7 @@ window.pickupItem = async function()  {
 
   // 判断是否是要拾取的方块类型
   if (tileMap && tileMap.type === BLOCKLY_MAP_TYPE_DICT.YC) {
-    showGameMessage(tileMap.tip || '成功拾取物品!', 'warning', 1000)
+    showGameMessage(tileMap.tip || '成功拾取物品!', 'warning')
 
     // 处理携带物品逻辑
     if (tileMap && tileMap.img) {
@@ -836,8 +836,10 @@ window.pickupItem = async function()  {
       }
     }
   } else {
-    showGameMessage('当前位置没有可拾取的物品', 'info', 1000)
+    showGameMessage('当前位置没有可拾取的物品', 'info')
   }
+
+  await new Promise(resolve => setTimeout(resolve, CONFIG.DELAY.ACTION_DELAY));
 }
 
 // 使用物品函数
@@ -851,6 +853,7 @@ window.useItem = async function() {
   if (tileMap && tileMap.need) {
     // 检查玩家是否携带了需要的物品
     const requiredItems = tileMap.need;
+    debugger
     let hasRequiredItem = false;
     let itemIndex = -1;
 
@@ -865,19 +868,36 @@ window.useItem = async function() {
     }
 
     if (hasRequiredItem) {
+
+      // 从地图上移除图标(但保留点的可通行性)
+      const pointIndex = gameState.mapData.walkablePoints.findIndex(
+          p => p.x === x && p.y === y
+      );
+      if (pointIndex !== -1) {
+        // 保留点但移除img属性
+        const updatedPoint = { ...gameState.mapData.walkablePoints[pointIndex] };
+        updatedPoint.img = updatedPoint.deenImg;
+        gameState.mapData.walkablePoints.splice(pointIndex, 1, updatedPoint);
+
+        // 更新映射
+        walkablePointsMap.set(`${x},${y}`, updatedPoint);
+      }
+
       // 使用物品成功
-      showGameMessage(tileMap.tip || '物品使用成功!', 'success', 1500);
+      showGameMessage('物品使用成功!', 'success');
 
       // 从携带物品中移除已使用的物品
       gameState.player.carriedItems.splice(itemIndex, 1);
 
     } else {
       // 提示缺少所需物品
-      showGameMessage(tileMap.tip || `需要特殊物品才能使用`, 'warning', 1500);
+      showGameMessage(tileMap.tip || `需要特殊物品才能使用`, 'warning');
     }
   } else {
-    showGameMessage('当前位置不需要使用物品', 'info', 1000);
+    showGameMessage('当前位置不需要使用物品', 'info');
   }
+
+  await new Promise(resolve => setTimeout(resolve, CONFIG.DELAY.ACTION_DELAY));
 }
 
 // 向前移动