Kziwws 1 săptămână în urmă
părinte
comite
3b7425a76a

BIN
.DS_Store


+ 1 - 5
assets/prefabs/ui/gunfightShootUI.prefab

@@ -8926,11 +8926,7 @@
     "__prefab": {
       "__id__": 398
     },
-    "hiddeNodes": [
-      {
-        "__id__": 320
-      }
-    ],
+    "hiddeNodes": [],
     "_id": ""
   },
   {

+ 1 - 1
assets/scripts/data/Constants.ts

@@ -2,7 +2,7 @@ import { Enemy } from "../game/Enemy";
 
 const Constants = {
     //是否是测试包
-    isDebug: true,
+    isDebug: false,
     //游戏名字
     gameName: "GunfightShoot",
 

+ 6 - 0
assets/scripts/items/player/Bullet1.ts

@@ -83,6 +83,12 @@ export class Bullet1 extends BulletBase {
         const hasHit = PhysicsSystem.instance.raycast(r, 0xffffffff, 100000, true);
         const raycastResults:PhysicsRayResult[] = PhysicsSystem.instance.raycastResults;
         if(hasHit && raycastResults.length > 0){
+            const gunPos = this.gunBase.node.worldPosition;
+            raycastResults.sort((a, b) => {
+                const aDist = Vec3.distance(a.hitPoint, gunPos);
+                const bDist = Vec3.distance(b.hitPoint, gunPos);
+                return aDist - bDist;
+            });
             //先查找 要检测的物体 对象上带args参数的就是优先检测的
             let targetResult: PhysicsRayResult | null = null;
             for (const result of raycastResults) {

+ 6 - 0
assets/scripts/items/player/Bullet2.ts

@@ -82,6 +82,12 @@ export class Bullet2 extends BulletBase {
         const hasHit = PhysicsSystem.instance.raycast(r, 0xffffffff, 100000, true);
         const raycastResults:PhysicsRayResult[] = PhysicsSystem.instance.raycastResults;
         if(hasHit && raycastResults.length > 0){
+            const gunPos = this.gunBase.node.worldPosition;
+            raycastResults.sort((a, b) => {
+                const aDist = Vec3.distance(a.hitPoint, gunPos);
+                const bDist = Vec3.distance(b.hitPoint, gunPos);
+                return aDist - bDist;
+            });
             //先查找 要检测的物体 对象上带args参数的就是优先检测的
             let targetResult: PhysicsRayResult | null = null;
             for (const result of raycastResults) {

+ 6 - 0
assets/scripts/items/player/Bullet3.ts

@@ -80,6 +80,12 @@ export class Bullet3 extends BulletBase {
         const hasHit = PhysicsSystem.instance.raycast(r, 0xffffffff, 100000, true);
         const raycastResults:PhysicsRayResult[] = PhysicsSystem.instance.raycastResults;
         if(hasHit && raycastResults.length > 0){
+            const gunPos = this.gunBase.node.worldPosition;
+            raycastResults.sort((a, b) => {
+                const aDist = Vec3.distance(a.hitPoint, gunPos);
+                const bDist = Vec3.distance(b.hitPoint, gunPos);
+                return aDist - bDist;
+            });
             //先查找 要检测的物体 对象上带args参数的就是优先检测的
             let targetResult: PhysicsRayResult | null = null;
             for (const result of raycastResults) {

BIN
build-templates/.DS_Store


+ 3 - 0
build-templates/templates-version.json

@@ -0,0 +1,3 @@
+{
+    "web-mobile": "1.0.0"
+}

+ 47 - 0
build-templates/web-mobile/index.ejs

@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+
+  <title>Cocos Creator | <%= projectName %></title>
+
+  <!--http://www.html5rocks.com/en/mobile/mobifying/-->
+  <meta name="viewport"
+        content="width=device-width,user-scalable=no,initial-scale=1,minimum-scale=1,maximum-scale=1,minimal-ui=true"/>
+
+  <!--https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html-->
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
+  <meta name="format-detection" content="telephone=no">
+
+  <!-- force webkit on 360 -->
+  <meta name="renderer" content="webkit"/>
+  <meta name="force-rendering" content="webkit"/>
+  <!-- force edge on IE -->
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
+  <meta name="msapplication-tap-highlight" content="no">
+
+  <!-- force full screen on some browser -->
+  <meta name="full-screen" content="yes"/>
+  <meta name="x5-fullscreen" content="true"/>
+  <meta name="360-fullscreen" content="true"/>
+
+  <!--fix fireball/issues/3568 -->
+  <!--<meta name="browsermode" content="application">-->
+  <meta name="x5-page-mode" content="app">
+
+  <!--<link rel="apple-touch-icon" href=".png" />-->
+  <!--<link rel="apple-touch-icon-precomposed" href=".png" />-->
+
+  <link rel="stylesheet" type="text/css" href="<%= cssUrl %>"/>
+
+</head>
+<body>
+  <div id="GameDiv" cc_exact_fit_screen="true">
+      <div id="Cocos3dGameContainer">
+        <canvas id="GameCanvas" oncontextmenu="event.preventDefault()" tabindex="99"></canvas>
+      </div>
+    </div>
+  <%- include(cocosTemplate, {}) %>
+</body>
+</html>

+ 189 - 0
build-templates/web-mobile/index.html

@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8">
+
+  <title>StormSunder</title>
+
+  <!--http://www.html5rocks.com/en/mobile/mobifying/-->
+  <meta name="viewport"
+    content="width=device-width,user-scalable=no,initial-scale=1,minimum-scale=1,maximum-scale=1,minimal-ui=true" />
+
+  <!--https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html-->
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
+  <meta name="format-detection" content="telephone=no">
+
+  <!-- force webkit on 360 -->
+  <meta name="renderer" content="webkit" />
+  <meta name="force-rendering" content="webkit" />
+  <!-- force edge on IE -->
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+  <meta name="msapplication-tap-highlight" content="no">
+
+  <!-- force full screen on some browser -->
+  <meta name="full-screen" content="yes" />
+  <meta name="x5-fullscreen" content="true" />
+  <meta name="360-fullscreen" content="true" />
+
+  <!--fix fireball/issues/3568 -->
+  <!--<meta name="browsermode" content="application">-->
+  <meta name="x5-page-mode" content="app">
+
+  <!--<link rel="apple-touch-icon" href=".png" />-->
+  <!--<link rel="apple-touch-icon-precomposed" href=".png" />-->
+
+  <link rel="stylesheet" type="text/css" href="style.css" />
+
+</head>
+
+<body>
+  <div id="GameDiv" cc_exact_fit_screen="true">
+    <div id="Cocos3dGameContainer">
+      <canvas id="GameCanvas" oncontextmenu="event.preventDefault()" tabindex="99"></canvas>
+    </div>
+  </div>
+
+
+  <!-- Polyfills bundle. -->
+
+  <script src="src/polyfills.bundle.js" charset="utf-8"> </script>
+
+
+  <!-- SystemJS support. -->
+  <script src="src/system.bundle.js" charset="utf-8"> </script>
+
+  <!-- Import map -->
+  <script src="src/import-map.json" type="systemjs-importmap" charset="utf-8"> </script>
+
+  <script>
+    // adInstance = null
+    // 动态加载外部脚本的方法
+    loadScript = function (url) {
+      return new Promise((resolve, reject) => {
+        const script = document.createElement('script');
+        script.src = url;
+        script.async = true;
+        script.onload = () => resolve();
+        script.onerror = () => reject(new Error(`Failed to load script: ${url}`));
+        document.head.appendChild(script);
+      });
+    }
+
+    // 加载 PRESDK3.0.1.js,然后启动项目
+    loadScript('https://www.cpsense.com/public/PRESDK3.0.1.js')
+      .then(() => {
+        console.log('PRESDK3.0.1.js loaded successfully');
+        // 初始化广告 SDK
+        var adSdkConfig = {
+          el: document.querySelector("GameDiv"),
+          client: 'cpsense-cd',
+          is_test: false
+        };
+        var adInstance = new adSdk(adSdkConfig);
+        window.adInstance = adInstance;
+        window.CPSenseShowAd = {
+          showAd: function (type) {
+            return new Promise((resolve, reject) => {
+              if (type === 'interstitial') {
+                adInstance.interstitialAd({
+                  beforeAd: function () {
+                    console.log("The ad starts playing")
+                  },
+                  afterAd: function () {
+                    console.log("The ad ends playing")
+                    resolve({
+                      result: 'success',
+                      message: 'Interstitial ad closed'
+                    });
+                  },
+                  error: function (n) {
+                    console.log("error", n);
+                    reject(new Error('Interstitial ad error'));
+                  }
+                });
+              } else if (type === 'rewarded') {
+                adInstance.rewardAd({
+                  beforeAd: function () {
+                    console.log("The ad starts playing, and the game should pause."),
+                      window.youxi.SoundManager.pauseAll(),
+                      window.youxi.GameManager.pauseAll();
+                  },
+                  adDismissed: function () {
+                    console.log("Player dismissed the ad before completion."),
+                      window.youxi.SoundManager.resumeAll(),
+                      window.youxi.GameManager.resumeAll();
+                    reject(new Error('Interstitial ad error'));
+                  },
+                  adViewed: function () {
+                    console.log("Ad was viewed and closed."),
+                      window.youxi.SoundManager.resumeAll(),
+                      window.youxi.GameManager.resumeAll();
+                    resolve({
+                      result: 'success',
+                      message: 'Interstitial ad closed'
+                    });
+                  },
+                  error: function (n) {
+                    console.log("error", n);
+                    window.youxi.SoundManager.resumeAll();
+                    window.youxi.GameManager.resumeAll();
+                    reject(new Error('Interstitial ad error'));
+                  }
+                })
+              } else {
+                reject(new Error('Invalid ad type'));
+              }
+            });
+          }
+        };
+
+        console.log('AD initialized successfully');
+
+
+      })
+      .then(() => {
+        // 加载项目主入口
+        return System.import('./index.js');
+      })
+      .catch(err => {
+        console.error('Error during initialization:', err);
+      });
+
+
+    // 外部广告调用
+    window.showAd = function (type) {
+      type = type.toLowerCase();
+      return new Promise((resolve, reject) => {
+
+        window.CPSenseShowAd.showAd(type)
+          .then((res) => {
+            // 为游戏返回广告结果
+            console.log(res);
+            resolve(res);
+          })
+          .catch((err) => {
+            console.log(err);
+            reject(err);
+          });
+      });
+
+    };
+
+    // 回调测试
+    function TopCallback() {
+
+      //sound
+      if (window.__woso.SoundManager.isSound) {
+        window.youxi.SoundManager.resumeAll();
+      } else {
+        window.youxi.SoundManager.pauseAll();
+      }
+
+    }
+  </script>
+
+</body>
+
+</html>

BIN
build/web-mobile/.DS_Store


+ 2 - 2
profiles/v2/packages/builder.json

@@ -41,7 +41,7 @@
         "progress": 1,
         "state": "success",
         "stage": "build",
-        "message": "2025-5-30 16:21:30 build success in 21 s!",
+        "message": "2025-5-30 16:59:34 build success in 22 s!",
         "detailMessage": "The Mesh used by component \"cc.ParticleSystem\" in prefab \"particle\" is missing. Detailed information:\rNode path: \"particle\"\rAsset url: \"db://assets/prefabs/particle/prb/particle\"\rAsset file: \"/Users/w...",
         "options": {
           "name": "GunfightShoot",
@@ -112,7 +112,7 @@
           "__version__": "1.3.9",
           "logDest": "project://temp/builder/log/web-mobile5-30-2025 15-30.log"
         },
-        "time": "5-30-2025 16:21:09",
+        "time": "5-30-2025 16:59:12",
         "dirty": false
       }
     }

+ 1 - 1
profiles/v2/packages/reference-image.json

@@ -3,6 +3,6 @@
   "config": {
     "images": [],
     "sceneUUID": {},
-    "scene": "b824d4a8-95d2-4112-8d63-f7df26c184ee"
+    "scene": "4844b5ae-cfad-4282-92e9-d58dae3b6445"
   }
 }