瀏覽代碼

优化框架

chenwb10023 2 周之前
父節點
當前提交
a47ee1a6aa
共有 33 個文件被更改,包括 941 次插入39 次删除
  1. 二進制
      assets/bundle/FGUI/Home/Home.bin
  2. 13 0
      assets/bundle/spine/ui.meta
  3. 13 0
      assets/bundle/spine/ui/dianji.meta
  4. 13 0
      assets/bundle/spine/ui/dianji/dianji.atlas
  5. 6 0
      assets/bundle/spine/ui/dianji/dianji.atlas.meta
  6. 二進制
      assets/bundle/spine/ui/dianji/dianji.png
  7. 38 0
      assets/bundle/spine/ui/dianji/dianji.png.meta
  8. 二進制
      assets/bundle/spine/ui/dianji/dianji.skel
  9. 10 0
      assets/bundle/spine/ui/dianji/dianji.skel.meta
  10. 3 9
      assets/scene/game.fire
  11. 6 0
      assets/script/data/GameDataCenter.ts
  12. 8 8
      assets/script/data/const/ViewLayer.ts
  13. 59 0
      assets/script/data/model/TaskModel.ts
  14. 10 0
      assets/script/data/model/TaskModel.ts.meta
  15. 1 7
      assets/script/data/model/TimeModel.ts
  16. 13 0
      assets/script/logic/fgui/Home.meta
  17. 13 0
      assets/script/logic/fgui/Home/Home.meta
  18. 34 0
      assets/script/logic/fgui/Home/Home/HomeCtrl.ts
  19. 10 0
      assets/script/logic/fgui/Home/Home/HomeCtrl.ts.meta
  20. 19 0
      assets/script/logic/fgui/Home/Home/HomeVM.ts
  21. 10 0
      assets/script/logic/fgui/Home/Home/HomeVM.ts.meta
  22. 41 0
      assets/script/logic/fgui/Home/Home/HomeView.ts
  23. 10 0
      assets/script/logic/fgui/Home/Home/HomeView.ts.meta
  24. 13 0
      assets/script/logic/ui/guide.meta
  25. 506 0
      assets/script/logic/ui/guide/UIGuideView.ts
  26. 10 0
      assets/script/logic/ui/guide/UIGuideView.ts.meta
  27. 56 0
      assets/script/logic/ui/guide/UIHandMaskView.ts
  28. 10 0
      assets/script/logic/ui/guide/UIHandMaskView.ts.meta
  29. 7 3
      assets/script/logic/ui/scene/UIGame.ts
  30. 2 6
      assets/script/plat/PlatformLocal.ts
  31. 1 1
      fgui-project/assets/Common/package.xml
  32. 1 0
      fgui-project/assets/Home/Home.xml
  33. 5 5
      local/local.json

二進制
assets/bundle/FGUI/Home/Home.bin


+ 13 - 0
assets/bundle/spine/ui.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "d8ec16d5-9317-434a-9667-bdf76f734872",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/bundle/spine/ui/dianji.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "87fa0f8a-f48a-47e5-aff9-11300ac99d49",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/bundle/spine/ui/dianji/dianji.atlas

@@ -0,0 +1,13 @@
+
+dianji.png
+size: 128,128
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+shou
+  rotate: false
+  xy: 2, 2
+  size: 103, 117
+  orig: 109, 117
+  offset: 6, 0
+  index: -1

+ 6 - 0
assets/bundle/spine/ui/dianji/dianji.atlas.meta

@@ -0,0 +1,6 @@
+{
+  "ver": "1.0.3",
+  "uuid": "f7de8e33-baa5-42b6-add9-4a55312b6984",
+  "importer": "asset",
+  "subMetas": {}
+}

二進制
assets/bundle/spine/ui/dianji/dianji.png


+ 38 - 0
assets/bundle/spine/ui/dianji/dianji.png.meta

@@ -0,0 +1,38 @@
+{
+  "ver": "2.3.7",
+  "uuid": "7b2b58e7-e3ef-4404-a31d-ce30a6ecf156",
+  "importer": "texture",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 128,
+  "height": 128,
+  "platformSettings": {},
+  "subMetas": {
+    "dianji": {
+      "ver": "1.0.6",
+      "uuid": "0aa77b7e-ea69-48ca-8ef2-c97d50f3b651",
+      "importer": "sprite-frame",
+      "rawTextureUuid": "7b2b58e7-e3ef-4404-a31d-ce30a6ecf156",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": -10,
+      "offsetY": 12,
+      "trimX": 10,
+      "trimY": 2,
+      "width": 88,
+      "height": 100,
+      "rawWidth": 128,
+      "rawHeight": 128,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

二進制
assets/bundle/spine/ui/dianji/dianji.skel


+ 10 - 0
assets/bundle/spine/ui/dianji/dianji.skel.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.2.5",
+  "uuid": "6dd2fff4-6278-4071-8504-89e6ada1043c",
+  "importer": "spine",
+  "textures": [
+    "7b2b58e7-e3ef-4404-a31d-ce30a6ecf156"
+  ],
+  "scale": 1,
+  "subMetas": {}
+}

+ 3 - 9
assets/scene/game.fire

@@ -442,9 +442,7 @@
       "__id__": 2
     },
     "_enabled": true,
-    "uiHand": {
-      "__uuid__": "d937dd63-07f4-4aac-9769-ec2ccc741262"
-    },
+    "uiHand": null,
     "uiMask": {
       "__uuid__": "5c0add12-d4e6-4cf6-8893-87e2d30973be"
     },
@@ -457,12 +455,8 @@
     "handMaskView": {
       "__uuid__": "4e5ed5ee-545e-4e48-834f-25caad2c1c77"
     },
-    "dialogView": {
-      "__uuid__": "6bd7f276-ea03-4101-8d25-b7cc01c4b14a"
-    },
-    "mapPrefab": {
-      "__uuid__": "ea4196f3-207a-46b6-a369-52eef2097573"
-    },
+    "dialogView": null,
+    "mapPrefab": null,
     "mapLayer": {
       "__id__": 5
     },

+ 6 - 0
assets/script/data/GameDataCenter.ts

@@ -1,5 +1,6 @@
 import { SevBack } from "../common/Xys";
 import AccountModel from "./model/Account/AccountModel";
+import GuideModel from "./model/GuideModel";
 import IDataModel from "./model/IDataModel";
 import LoadingModel from "./model/LoadingModel";
 import LoginModel from "./model/LoginModel";
@@ -8,6 +9,7 @@ import RedDotModel from "./model/RedDotModel";
 import { AudioModel } from "./model/System/AudioModel";
 import { SettingModel } from "./model/System/SettingModel";
 import SystemModel from "./model/System/SystemModel";
+import TaskModel from "./model/TaskModel";
 import TimeModel from "./model/TimeModel";
 import UserModel from "./model/UserModel";
 import WindowModel from "./model/WindowModel";
@@ -30,6 +32,8 @@ class GameDataCenter {
     plat: PlatformModel = null
     reddot: RedDotModel = null
     user: UserModel;
+    guide: GuideModel;
+    task: TaskModel;
     constructor() {
         if (CC_PREVIEW) window["gdc"] = this;
     }
@@ -64,6 +68,8 @@ class GameDataCenter {
 
     initModule() {
         this.system = this.newModel(SystemModel)
+        this.task = this.newModel(TaskModel)
+        this.guide = this.newModel(GuideModel)
         // 红点注册必须在其他model之后
         this.reddot = this.newModel(RedDotModel);
     }

+ 8 - 8
assets/script/data/const/ViewLayer.ts

@@ -3,35 +3,35 @@ export enum ViewLayer {
     /**
        * 普通界面
        */
-    UI = 1,
-
+    Home = 1,
+    UI = 100,
     /**
      * 弹窗层级
      */
-    Dialog = 2,
+    Dialog = 200,
 
     /**
      * 弹窗层级
      */
-    Pop = 3,
+    Pop = 300,
 
     /**
      * 顶部UI层级
      */
-    TopUI = 4,
+    TopUI = 400,
 
     /**
      * 在顶部UI上面的弹窗层级
      */
-    BigPop = 5,
+    BigPop = 500,
 
     /**
      * loading层
      */
-    Loading = 6,
+    Loading = 600,
 
     /**
      * 提示层 
      */
-    Tip = 7,
+    Tip = 700,
 }

+ 59 - 0
assets/script/data/model/TaskModel.ts

@@ -0,0 +1,59 @@
+import Gamecfg from "../../common/gameCfg";
+import { gameMethod } from "../../common/gameMethod";
+import { TaskRwd, TaskRwdPram, ZhangjieZidong, ZhangjieZidongPram } from "../../common/Xyc";
+import { SevBack, SevBackType } from "../../common/Xys";
+import FguiMgr from "../../frameWork/fgui/FguiMgr";
+import { FguiClass } from "../../frameWork/fgui/mvc/FguiView";
+import { ShowSideTipsView } from "../../logic/fgui/Common/ShowSideTips/ShowSideTipsView";
+import UIHelp from "../../logic/ui/UIHelp";
+import EventMng from "../../manager/EventMng";
+import { I18n } from "../../utils/I18nUtil";
+import { GuideEvent, HomeEvent, TaskMainEvent, UserEvent } from "../const/EventConst";
+import { eMapType, eXiuXing, GuideType, OpenType, TaskKind, WeekGuideId } from "../const/TypeConst";
+import GameDataCenter from "../GameDataCenter";
+import IDataModel from "./IDataModel";
+
+export default class TaskModel extends IDataModel {
+	readonly GuanQiaNum = 5;
+
+	constructor() {
+		super("task");
+		GameDataCenter.setRspModel("actTaskMain", this);
+	}
+
+	readonly TaskPopCloseCd: number = 5;
+	readonly TaskPopTime: number = 0.2;
+
+	lastPopTaskId: number = null;
+	//引导手指的id
+	curHandTaskId = 0;
+	//最后一次记录任务id
+	private _lastTaskId: number = 0;
+	get isDaguaiTask(): boolean {
+		// let conf = Gamecfg.taskMain.getItem(GameDataCenter.sevBack.actTaskMain?.id?.toString());
+		// switch (conf?.kind) {
+		// 	case TaskKind.DaGuai:
+		// 		if (GameDataCenter.sevBack.actTaskMain?.cons < conf.need) {
+		// 			return true;
+		// 		} else {
+		// 			return false;
+		// 		}
+		// 	default:
+		// 		return false;
+		// }
+		return false;
+	}
+
+	doEvent(result: SevBack): void {
+		if (result.actTaskMain) {
+			EventMng.emit(TaskMainEvent.UP_INFO);
+			GameDataCenter.time.guideRuoTime = 0;
+
+			if (result.actTaskMain.id && this._lastTaskId != result.actTaskMain.id) {
+				this._lastTaskId = result.actTaskMain.id;
+				EventMng.emit(HomeEvent.UP_HD_LIST);
+			}
+		}
+	}
+	
+}

+ 10 - 0
assets/script/data/model/TaskModel.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "42f9f1a5-e707-4deb-9736-43054004ffee",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 1 - 7
assets/script/data/model/TimeModel.ts

@@ -41,17 +41,11 @@ export default class TimeModel extends IDataModel {
                 this.sendAdok()
             }
             this.checkGuideRuo()
-            if (GameDataCenter.mine) {
-                GameDataCenter.mine.carUp()
-            }
             EventMng.emit(TimeEvent.TIME_CD, this.sevTime)
         }, 1000)
         Config.upFrame = setInterval(() => {
             EventMng.emit(TimeEvent.TIME_FRAME_CD, this.sevTime)
         }, 1000 / Config.GAME_FRAME)
-        Config.upZhenWen = setInterval(() => {
-            if (GameDataCenter?.daDiGuZi && GameDataCenter?.loading?.loginSucc) GameDataCenter.daDiGuZi.update()// 大帝古字检测后台自动
-        }, 2000)
     }
     doSevback(result: SevBack): void {
         this.heart = this.defaultHeart
@@ -72,7 +66,7 @@ export default class TimeModel extends IDataModel {
             this.guideRuoTime++
             if (this.guideRuoTime >= 2) {
                 this.guideRuoTime = -1
-                GameDataCenter.task.CheckSpecTaskHand(true)
+                // GameDataCenter.task.CheckSpecTaskHand(true)
             }
         }
     }

+ 13 - 0
assets/script/logic/fgui/Home.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "11dbbdea-387d-43bf-b0b2-a2fa56bf9585",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 13 - 0
assets/script/logic/fgui/Home/Home.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "85f23302-3674-40cb-ad70-712dfa7900a8",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 34 - 0
assets/script/logic/fgui/Home/Home/HomeCtrl.ts

@@ -0,0 +1,34 @@
+/// #pkgName FGUI包名
+/// #prefabName ui预制名字
+/// #viewName uiview名字
+/// #UIName ui的名字,prefabName首字母转大写
+/// ui逻辑处理类
+/// created by chenwb 2024
+
+import FguiMgr from "../../../../frameWork/fgui/FguiMgr";
+import { FguiViewCtrl } from "../../../../frameWork/fgui/mvc/FguiViewCtrl";
+import { HomeVM } from "./HomeVM";
+import { HomeView } from "./HomeView";
+
+export class HomeCtrl extends FguiViewCtrl<HomeVM> {
+    OnInited(): void {
+    }
+    OnShow(intent?: any): void {
+        this.AddListeners();
+    }
+    OnHide(): void {
+        this.RemoveListeners();
+    }
+    //#region UI事件
+    private AddListeners() : void {
+
+    }
+    private RemoveListeners() : void {
+// <#UIEventsRemoveArea>
+    }
+
+    private Close(): void{
+        FguiMgr.Instance.closeUI(HomeView);
+    }
+    //#endregion
+}

+ 10 - 0
assets/script/logic/fgui/Home/Home/HomeCtrl.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "79b0f34e-022f-4181-b673-023f12cdce4c",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 19 - 0
assets/script/logic/fgui/Home/Home/HomeVM.ts

@@ -0,0 +1,19 @@
+/// #pkgName FGUI包名
+/// #prefabName ui预制名字
+/// #viewName uiview名字
+/// #UIName ui的名字,prefabName首字母转大写
+/// 该脚本由模板创建,不可修改
+/// created by chenwb 2024
+
+import { FguiViewModel } from "../../../../frameWork/fgui/mvc/FguiViewModel";
+
+export class HomeVM extends FguiViewModel {
+
+    readonly ImgBg: fgui.GImage;
+
+    constructor(panel: fgui.GComponent) {
+        super(panel);
+        this.ImgBg = panel.getChild("ImgBg") as fgui.GImage;
+
+    }
+}

+ 10 - 0
assets/script/logic/fgui/Home/Home/HomeVM.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "029bbf39-e9cd-4d64-8855-c45a03220995",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 41 - 0
assets/script/logic/fgui/Home/Home/HomeView.ts

@@ -0,0 +1,41 @@
+/// #pkgName FGUI包名
+/// #prefabName ui预制名字
+/// #viewName uiview名字
+/// #UIName ui的名字,prefabName首字母转大写
+/// 该脚本由模板创建,不可修改
+/// created by chenwb 2024
+
+import { FguiView } from "../../../../frameWork/fgui/mvc/FguiView";
+import { FguiViewModel } from "../../../../frameWork/fgui/mvc/FguiViewModel";
+import { IUIController } from "../../../../frameWork/fgui/mvc/IUIController";
+import { ViewZorder } from "../../../../data/const/ViewZOrder";
+import { HomeCtrl } from "./HomeCtrl";
+import { HomeVM } from "./HomeVM";
+
+export class HomeView extends FguiView {
+    /**
+     * fgui的包名
+     */
+    protected static pkgName = "Home";
+    /**
+     * fgui包内的UI名字
+     */
+    protected static prefabName = "Home";
+    /**
+     * 类名,用于给UI命名
+     */
+    protected static viewName = "HomeView";
+
+    /**
+     * view层级
+     */
+    public zOrder: number = ViewZorder.UI;
+
+    protected createVM(panel: fgui.GComponent): FguiViewModel {
+        return new HomeVM(panel);
+    }
+    protected CreateCtrl(): IUIController {
+        return new HomeCtrl();
+    }
+
+}

+ 10 - 0
assets/script/logic/fgui/Home/Home/HomeView.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "5d829bc3-2f60-4bb5-a381-ab8667963e43",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 13 - 0
assets/script/logic/ui/guide.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.3",
+  "uuid": "5570fccc-9c0e-4c25-bf14-5bf70d75d26a",
+  "importer": "folder",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 506 - 0
assets/script/logic/ui/guide/UIGuideView.ts

@@ -0,0 +1,506 @@
+import { default as gameCfg, default as Gamecfg } from "../../../common/gameCfg";
+import { gameMethod } from "../../../common/gameMethod";
+import { xlsGuideInfo } from "../../../common/xlsConfig";
+import auto_guideView from "../../../data/autoui/guide/auto_guideView";
+import { GameEvent, GuideEvent, HomeEvent, MapEvent } from "../../../data/const/EventConst";
+import { AudioConst, GuideType, HdBanBenFuLiCard, OpenType, TaskKind } from "../../../data/const/TypeConst";
+import { ViewZorder } from "../../../data/const/ViewZOrder";
+import GameDataCenter from "../../../data/GameDataCenter";
+import ResSpine from "../../../frameWork/compment/ResSpine";
+import FguiMgr from "../../../frameWork/fgui/FguiMgr";
+import EventMng from "../../../manager/EventMng";
+import { I18n } from "../../../utils/I18nUtil";
+import Load from "../../../utils/Load";
+import { uiCommon } from "../../../utils/UICommon";
+
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+export default class UIGuideView extends cc.Component {
+
+    @property(cc.SpriteFrame)
+    taskzhezhao: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    btnzhezhao: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    fudi: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    jianghu: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    shilian: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    tongyong: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    tupo: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    xiuxing: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    zhaomu: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    zhenfa: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    guanbi: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    imgMask: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    shouling: cc.SpriteFrame = null
+    @property(cc.Node)
+    SkipPanel: cc.Node = null
+    @property(cc.Node)
+    SkipBtn: cc.Node = null;
+    @property(cc.Node)
+    SkipGuideAllBtn: cc.Node = null;
+    ui: auto_guideView = null;
+
+    private needUiName: string = "" //需要此UI才能继续引导
+    private guideUiName: string = "" //当前引导的UI
+    private delayTime: number = -1 //guide延迟时间
+    private handTime: number = -1 //手势延迟时间
+    private fixTime: number = -1 //修正延迟时间
+    private fixCount: number = 0 //修正次数
+    private msgOffsetY: number = 0 //对话框偏移量
+    private targetNodeScale: number = 1 //目标节点真实sacle
+    private finishTyping = false //打字完成
+    private event: GuideType = null //当前引导事件
+    private type: number = 1 //引导类型
+    callBack: Function;
+    yType: number;
+    startMoveHand: boolean = false;
+    handWolrdPos: cc.Vec2;
+    plotResSpine: ResSpine;
+    isSkipPlot: boolean = false;//是否已经跳过剧情漫画
+    private canSkipPlot: boolean = false;//是否可以跳过漫画
+    skipCheckCount: number = 0;//检测点击次数跳过
+    protected onEnable() {
+        this.ui = this.node.addComponent(auto_guideView);
+
+        cc.game.addPersistRootNode(this.node)
+        this.node.zIndex = ViewZorder.GUIDE
+        uiCommon.onRegisterEvent(this.ui.dialog, this.onClickDialog, this)
+        uiCommon.onRegisterEvent(this.SkipBtn, this.onClickSkipPlot, this)
+        uiCommon.onRegisterEvent(this.ui.plot, this.onClickPlot, this)
+        uiCommon.onRegisterEvent(this.SkipGuideAllBtn, this.onClickSkipGuideAllBtn, this)
+        EventMng.on(GuideEvent.GUIDE_EVENT, this.onGuideEvent, this)
+        EventMng.on(GuideEvent.CLOSE_GUIDE, this.onClose, this)
+        EventMng.on(GameEvent.ON_CLICK, this.checkOpen, this)
+        EventMng.on(GuideEvent.UPDATE_TXTMSG, this.updateTxtMsg, this)
+        EventMng.on(GuideEvent.HIDE_HAND, this.hideHand, this)
+        this.ui.mask2.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this);
+        cc.tween(this.ui.imgQuan).repeatForever(cc.tween(this.ui.imgQuan).to(0.45, { scale: 1.2 }).to(0.45, { scale: 1 })).start()
+    }
+
+    protected onDisable() {
+        uiCommon.unRegisterEvent(this.ui.dialog)
+        uiCommon.unRegisterEvent(this.SkipBtn)
+        EventMng.off(GuideEvent.GUIDE_EVENT, this.onGuideEvent, this)
+        EventMng.off(GuideEvent.CLOSE_GUIDE, this.onClose, this)
+        EventMng.off(GameEvent.ON_CLICK, this.checkOpen, this)
+        EventMng.off(GuideEvent.UPDATE_TXTMSG, this.updateTxtMsg, this)
+        EventMng.off(GuideEvent.HIDE_HAND, this.hideHand, this)
+        this.ui.mask2.off(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this);
+    }
+
+    private onTouchEnd(event: cc.Event.EventTouch) {
+        if (!this.ui.imgHand.active || this.startMoveHand || gameMethod.isEmpty(this.handWolrdPos)) {
+            return
+        }
+        this.skipCheckCount++;
+        let lastPos: cc.Vec2 = cc.v2()
+        lastPos.x = this.ui.imgHand.x
+        lastPos.y = this.ui.imgHand.y
+        let touchPos = event.getLocation();
+        cc.tween(this.ui.imgHand).stop()
+        uiCommon.setWorldPos(this.ui.imgHand, touchPos)
+        this.startMoveHand = true
+        cc.tween(this.ui.imgHand).to(0.5, { x: lastPos.x, y: lastPos.y }).call(() => {
+            uiCommon.setWorldPos(this.ui.imgHand, this.handWolrdPos)
+            this.startMoveHand = false
+        }).start()
+        if (this.skipCheckCount >= 3 && GameDataCenter.guide.isFinishGuide() && this.event != GuideType.evt_guide_150) {
+            this.SkipGuideAllBtn.active = true;
+        }
+    }
+
+    checkOpen() {
+        if (GameDataCenter.guide.isShowing) {
+            let conf = Gamecfg.guideInfo.getItem(GameDataCenter.guide.guideId)
+            if (conf?.ytype == 2) {
+                GameDataCenter.guide.saveGuide(() => {
+                    EventMng.emit(GuideEvent.CLOSE_GUIDE)
+                    EventMng.emit(GuideEvent.GUIDE_EVENT, conf.event)
+                })
+            }
+        }
+    }
+
+    //监听剧情触发事件
+    onGuideEvent(event: GuideType, callBack?: Function) {
+        //暂时先关闭所有引导
+        if (!GameDataCenter.guide.isOpenGuide) {
+            return
+        }
+        this.event = event
+        this.callBack = callBack
+        let confDramaList = gameCfg.guideInfoList.getItemList(event)
+        let isfinish: boolean = false
+        for (const key in confDramaList) {
+            const element = confDramaList[key];
+            //新手引导如果保存了步骤要过滤
+            if (!GameDataCenter.guide.checkIsSave(element.id) && GameDataCenter.guide.checkCanDrama(element.id)) {
+                this.showGuide(element.id)
+                EventMng.emit(HomeEvent.UP_HD_FLYBIRD);
+                isfinish = true
+                this.fixCount = 0;//重置修正次数
+                this.skipCheckCount = 0;
+                this.SkipGuideAllBtn.active = false;
+                break
+            }
+        }
+    }
+
+    onClickPlot() {
+        if (!this.canSkipPlot) return;
+        if (this.SkipPanel.active) {
+            this.ShowPlotSkip(false);
+        } else {
+            this.ShowPlotSkip(true);
+        }
+    }
+
+    onClickSkipPlot() {
+        if (this.isSkipPlot) return;
+        this.isSkipPlot = true;
+        this.SkipPanel.active = false;
+        if (!GameDataCenter.guide.isFinishGuide()) {
+            GameDataCenter.guide.nextGuide(this.event)
+        }
+        cc.tween(this.ui.plot)
+            .to(1, { opacity: 0 })
+            .delay(0.5)
+            .call(() => {
+                this.ui.plot.active = false
+                this.plotResSpine.resetRes();
+                GameDataCenter.audio.playMusic(AudioConst.bgm_base)
+            }).start();
+    }
+
+    ShowPlotSkip(isShow: boolean) {
+        cc.Tween.stopAllByTarget(this.SkipPanel);
+        if (isShow) {
+            this.SkipPanel.active = true;
+            cc.tween(this.SkipPanel)
+                .to(0.25, { y: this.SkipPanel.height })
+                .start();
+        } else {
+            cc.tween(this.SkipPanel)
+                .to(0.25, { y: 0 })
+                .call(() => {
+                    this.SkipPanel.active = false;
+                })
+                .start();
+        }
+
+    }
+
+    showGuide(id: string) {
+        if (GameDataCenter.guide.isShowing) {
+            return
+        }
+        console.log("showGuide:" + id)
+        GameDataCenter.guide.isShowing = true
+        GameDataCenter.guide.guideId = id
+        GameDataCenter.guide.guideIndex = 0
+        this.ui.gGuide.active = true
+        let conf = gameCfg.guideInfo.getItem(GameDataCenter.guide.guideId)
+        if (GameDataCenter.guide.isFinishGuide() && conf.event == GuideType.new) {//如果已完成了新手引导,但是仍然触发了新手引导的步骤,直接跳过
+            GameDataCenter.guide.saveGuideArray(GuideType.new, [GameDataCenter.guide.guideId], () => { });
+            return;
+        }
+        this.type = conf.type
+        this.yType = conf.ytype
+        if (this.type == 1) {
+            if (!GameDataCenter.guide.isFinishGuide()) {
+                GameDataCenter.guide.nextGuide(this.event)
+            }
+        } else if (this.type == 3) {
+            //单纯对话框引导
+            this.ui.btnMask.active = false
+            this.ui.dialog.active = true
+            this.showDialog()
+        } else if (this.type == 5) {
+            //正常下一步引导
+            if (conf.way == "5") {
+                GameDataCenter.guide.isShowing = true
+                this.ui.gGuide.active = true
+                this.ui.btnMask.active = true
+                EventMng.emit(GuideEvent.GUIDE_SLOT, conf.pram[0]);
+            } else {
+                this.playGuide()
+            }
+        } else {
+            //正常下一步引导
+            this.guideUiName = conf.pram[0][0];
+            this.playGuide()
+        }
+    }
+
+    showDialog() {
+        let conf = gameCfg.guideInfo.getItem(GameDataCenter.guide.guideId)
+        let roleImgName = conf.pram[2]
+        Load.loadTexture(this.ui.imgRole1, `guide/res/${roleImgName}`);
+        uiCommon.setLabel(this.ui.txtName, I18n.getI18nLang(conf.pram[3]))
+        if (conf.pram[0][GameDataCenter.guide.guideIndex] == null) {
+            GameDataCenter.guide.saveGuide(() => {
+                this.onClose()
+                if (this.callBack) {
+                    //当前引导组结束回调
+                    GameDataCenter.guide.isShowing = true
+                    this.ui.gGuide.active = true
+                    this.ui.btnMask.active = true
+                    this.callBack()
+                    this.callBack = null
+                } else {
+                    this.onGuideEvent(this.event)
+                }
+            })
+            return
+        }
+        //播放配音
+        GameDataCenter.audio.stopAllEffects()
+        //GameDataCenter.audio.playEffect(conf.pram?.[0]?.[GameDataCenter.guide.guideIndex])
+        uiCommon.typingAni(this.ui.txtDialog.getComponent(cc.RichText), I18n.getI18nLang(conf.pram?.[0]?.[GameDataCenter.guide.guideIndex]), 1 / 45, () => {
+            this.finishTyping = true
+        })
+    }
+
+    onClickDialog() {
+        if (this.finishTyping) {
+            this.finishTyping = false
+            GameDataCenter.guide.guideIndex++
+            this.showDialog()
+        } else {
+            this.finishTyping = true
+            this.ui.txtDialog.getComponent(cc.RichText).unscheduleAllCallbacks()
+            let conf = gameCfg.guideInfo.getItem(GameDataCenter.guide.guideId)
+            uiCommon.setLabel(this.ui.txtDialog, I18n.getI18nLang(conf.pram?.[0]?.[GameDataCenter.guide.guideIndex]))
+            GameDataCenter.audio.stopAllEffects()
+        }
+    }
+
+    onClickSkipGuideAllBtn() {
+        let confDramaList = gameCfg.guideInfoList.getItemList(this.event)
+        let guideIds = [];
+        confDramaList.forEach(element => {
+            guideIds.push(element.id);
+        });
+        GameDataCenter.guide.saveGuideArray(this.event, guideIds, () => {
+            this.SkipGuideAllBtn.active = false;
+            this.skipCheckCount = 0;
+            this.onClose();
+        })
+    }
+
+    playGuide() {
+        if (this.delayTime >= 0) { return }
+        let conf = gameCfg.guideInfo.getItem(GameDataCenter.guide.guideId)
+        let guideInfo = conf.pram[GameDataCenter.guide.guideIndex]
+        // console.log("guideInfo===", guideInfo)
+        if (guideInfo != null) {
+            switch (guideInfo[0]) {
+                case "name":
+                    this.ui.btnMask.active = this.yType != 2  //弱引导,不开启遮罩
+                    this.handTime = guideInfo[1] < 0 ? 0 : guideInfo[1]
+                    this.msgOffsetY = guideInfo[6] != null ? guideInfo[6] : 140
+                    break
+                default:
+                    this.ui.btnMask.active = this.yType != 2  //弱引导,不开启遮罩
+                    this.needUiName = this.changeUiName(guideInfo[0], conf);
+                    this.delayTime = guideInfo[1]
+                    break
+            }
+        } else {
+            GameDataCenter.guide.nextGuide(this.event)
+        }
+    }
+
+    handCall(isFix: boolean = false) {
+        if (isFix) {
+            return
+        }
+        let conf = Gamecfg.guideInfo.getItem(GameDataCenter.guide.guideId)
+        let guideInfo = conf.pram[GameDataCenter.guide.guideIndex]
+        if (guideInfo == null || gameMethod.isEmpty(guideInfo[2])) {
+            return
+        }
+        this.fixTime = 0.5 //每0.5s修正一次位置
+        this.ui.btnMask.active = false
+        this.ui.mask.active = this.yType != 2  //弱引导,不开启遮罩
+        //这里需要查找节点的话,conf.pram[0][0]必须配置uiview
+        let uiViewName = this.changeUiName(conf.pram[0][0], conf);
+        let targetNode: cc.Node = FguiMgr.Instance.findNodeByName(uiViewName, guideInfo[2]);
+        if (targetNode == null) {
+            console.error(`找不到目标节点: ${guideInfo[2]}`)
+            this.onClose();
+            return
+        }
+        let targetWolrdPos = uiCommon.getWorldPosCenter(targetNode)
+        this.targetNodeScale = targetNode.scale
+        let maskScale = 1
+        if (!gameMethod.isEmpty(guideInfo[7])) {
+            maskScale = guideInfo[7]
+        }
+        this.getRealScale(targetNode)
+        this.ui.mask.width = targetNode.width * this.targetNodeScale * maskScale
+        this.ui.mask.height = targetNode.height * this.targetNodeScale * maskScale
+        this.ui.mask.angle = targetNode.angle
+        uiCommon.setWorldPos(this.ui.mask, targetWolrdPos)
+        cc.Tween.stopAllByTarget(this.ui.imgHand)
+        this.ui.imgHand.active = true//guideInfo[2] != "MaskBgBtn" //点击空白处关闭的,无需显示手指跟光圈
+        if (!gameMethod.isEmpty(guideInfo[3])) {
+            targetWolrdPos.y -= parseInt(guideInfo[3])
+        }
+        this.handWolrdPos = targetWolrdPos
+        if (conf.type == 15 && !gameMethod.isEmpty(conf.pram?.[2]?.[2])) {//拖动类型的引导
+            let targetNode2: cc.Node = FguiMgr.Instance.findNodeByName(uiViewName, conf.pram[2][2]);
+            if (targetNode2 == null) {
+                console.error(`找不到目标节点: ${conf.pram[2][2]}`)
+                this.onClose();
+                return
+            }
+            uiCommon.setWorldPos(this.ui.imgQuan, cc.v2(targetWolrdPos.x, targetWolrdPos.y))
+            uiCommon.setWorldPos(this.ui.imgHand, targetWolrdPos)
+            this.ui.msgBg.active = !gameMethod.isEmpty(guideInfo[5])
+            this.ui.imgQuan.active = false;
+            if (!gameMethod.isEmpty(conf.pram?.[GameDataCenter.guide.guideIndex]?.[5])) {
+                uiCommon.setLabel(this.ui.txtMsg, I18n.getI18nLang(conf.pram?.[GameDataCenter.guide.guideIndex]?.[5]))
+            }
+            this.ui.msgBg.y = this.ui.imgQuan.y + this.msgOffsetY
+            let msgBgX = this.ui.imgQuan.x
+            if (this.ui.imgQuan.x < -155) {
+                msgBgX = -155
+            } else if (this.ui.imgQuan.x > 155) {
+                msgBgX = 155
+            }
+            this.ui.msgBg.x = msgBgX
+            let targetPos = uiCommon.transPos(targetNode2, this.ui.gGuide);
+            cc.tween(this.ui.imgHand).repeatForever(cc.tween(this.ui.imgHand).to(0.5, { position: targetPos }).delay(0.3).call(() => {
+                uiCommon.setWorldPos(this.ui.imgHand, targetWolrdPos)
+            })).start()
+
+        }
+        else {
+            uiCommon.setWorldPos(this.ui.imgHand, targetWolrdPos)
+            this.guideHandEnd(guideInfo, conf, targetWolrdPos)
+        }
+    }
+
+    guideHandEnd(guideInfo: any[], conf: xlsGuideInfo, targetWolrdPos: cc.Vec2) {
+        this.ui.msgBg.active = !gameMethod.isEmpty(guideInfo[5])
+        this.ui.imgQuan.active = true//guideInfo[2] != "MaskBgBtn" //点击空白处关闭的,无需显示光圈
+        //播放配音
+        if (!gameMethod.isEmpty(conf.pram?.[GameDataCenter.guide.guideIndex]?.[5])) {
+            uiCommon.setLabel(this.ui.txtMsg, I18n.getI18nLang(conf.pram?.[GameDataCenter.guide.guideIndex]?.[5]))
+            GameDataCenter.audio.stopAllEffects()
+            //GameDataCenter.audio.playEffect(conf.pram?.[GameDataCenter.guide.guideIndex]?.[5])
+        }
+        uiCommon.setWorldPos(this.ui.imgQuan, cc.v2(targetWolrdPos.x, targetWolrdPos.y))
+        uiCommon.setWorldPos(this.ui.imgHand, cc.v2(targetWolrdPos.x, targetWolrdPos.y))
+        this.ui.msgBg.y = this.ui.imgQuan.y + this.msgOffsetY
+        let msgBgX = this.ui.imgQuan.x
+        if (this.ui.imgQuan.x < -155) {
+            msgBgX = -155
+        } else if (this.ui.imgQuan.x > 155) {
+            msgBgX = 155
+        }
+        this.ui.msgBg.x = msgBgX
+    }
+
+    updateTxtMsg(txt: string) {
+        uiCommon.setLabel(this.ui.txtMsg, txt)
+    }
+
+    //获取目标节点真实sacle
+    getRealScale(root: cc.Node) {
+        if (root.parent != null) {
+            this.targetNodeScale *= root.parent.scale
+            this.getRealScale(root.parent)
+        }
+    }
+
+    update(dt: number) {
+        if (this.delayTime >= 0) {
+            this.ui.btnMask.active = this.yType != 2  //弱引导,不开启遮罩
+            if (this.needUiName.length > 0) {
+                if (FguiMgr.Instance.isShowingByName(this.needUiName) && FguiMgr.Instance.getShowingViewByName(this.needUiName)?.isFinishOpenAni) {
+                    this.delayTime -= dt
+                    if (this.delayTime < 0) {
+                        this.ui.btnMask.active = false
+                        this.needUiName = ""
+                        if (this.type == 1) {
+                            this.ui.dialog.active = true
+                            this.showDialog()
+                        } else {
+                            GameDataCenter.guide.guideIndex++
+                            this.playGuide()
+                        }
+                    }
+                }
+            } else {
+                this.delayTime -= dt
+                if (this.delayTime < 0) {
+                    this.ui.btnMask.active = false
+                    if (this.type == 1) {
+                        this.ui.dialog.active = true
+                        this.showDialog()
+                    } else {
+                        this.playGuide()
+                    }
+                }
+            }
+        }
+        //手势引导延迟
+        if (this.handTime >= 0) {
+            if (FguiMgr.Instance.isShowingByName(this.guideUiName)) {
+                this.handTime -= dt
+                if (this.handTime < 0) {
+                    this.handCall()
+                }
+            }
+        }
+        //修正位置
+        if (this.fixTime >= 0) {
+            if (FguiMgr.Instance.isShowingByName(this.guideUiName)) {
+                this.fixTime -= dt
+                if (this.fixTime < 0) {
+                    this.handCall(true)
+                }
+            }
+        }
+    }
+
+    changeUiName(uiName: string, conf: xlsGuideInfo) {
+        return uiName;
+    }
+
+    hideHand() {
+        this.ui.imgQuan.active = false
+        this.ui.imgHand.active = false
+    }
+
+    onClose() {
+        GameDataCenter.guide.init()
+        this.ui.gGuide.active = false
+        this.ui.dialog.active = false
+        this.ui.mask.active = false
+        this.ui.msgBg.active = false
+        this.ui.imgQuan.active = false
+        this.ui.imgHand.active = false
+        this.needUiName = ""
+        this.guideUiName = ""
+        this.delayTime = -1
+        this.handTime = -1
+        this.fixTime = -1
+        this.targetNodeScale = 1
+    }
+
+}

+ 10 - 0
assets/script/logic/ui/guide/UIGuideView.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "09e170a1-ff52-4289-9811-1789a17eee83",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 56 - 0
assets/script/logic/ui/guide/UIHandMaskView.ts

@@ -0,0 +1,56 @@
+import { GuideEvent } from "../../../data/const/EventConst";
+import { ViewZorder } from "../../../data/const/ViewZOrder";
+import UEBase from "../../../frameWork/compment/UEBase";
+import EventMng from "../../../manager/EventMng";
+import { uiCommon } from "../../../utils/UICommon";
+
+const { ccclass, menu, property } = cc._decorator;
+
+@ccclass
+@menu("UI/persistNode/UIHandMaskView")
+export default class UIHandMaskView extends UEBase {
+    static readonly BundleKey: string = "guide";
+    static readonly PrefabUrl: string = "UIHandMaskView";
+    static readonly CLS: string = "UIHandMaskView";
+    @property(cc.Node) mask: cc.Node = null
+    @property(cc.SpriteFrame)
+    taskzhezhao: cc.SpriteFrame = null
+    @property(cc.SpriteFrame)
+    imgMask: cc.SpriteFrame = null
+    private targetNodeScale: number = 1 //目标节点真实sacle
+    protected onEnable() {
+        // cc.game.addPersistRootNode(this.node);
+        this.node.zIndex = ViewZorder.UI_MASK;
+        EventMng.on(GuideEvent.HANDMASK_SHOW, this.ShowHandMask, this)
+    }
+
+    protected onDisable() {
+
+    }
+
+    ShowHandMask(targetNode: cc.Node, maskName: string) {
+        if (!targetNode) {
+            this.mask.active = false;
+            return;
+        }
+        this.mask.active = true;
+        let targetWolrdPos = uiCommon.getWorldPosCenter(targetNode)
+        this.targetNodeScale = targetNode.scale
+        let maskScale = 1
+        this.getRealScale(targetNode)
+        // this.mask.getComponent(cc.Mask).spriteFrame = this[maskName];
+        this.scheduleOnce(() => {
+            this.mask.width = targetNode.width * this.targetNodeScale * maskScale
+            this.mask.height = targetNode.height * this.targetNodeScale * maskScale
+        }, 0.02)
+        this.mask.angle = targetNode.angle
+        uiCommon.setWorldPos(this.mask, targetWolrdPos)
+    }
+    //获取目标节点真实sacle
+    getRealScale(root: cc.Node) {
+        if (root.parent != null) {
+            this.targetNodeScale *= root.parent.scale
+            this.getRealScale(root.parent)
+        }
+    }
+}

+ 10 - 0
assets/script/logic/ui/guide/UIHandMaskView.ts.meta

@@ -0,0 +1,10 @@
+{
+  "ver": "1.1.0",
+  "uuid": "47252827-9611-4f7e-8f8e-fbb8e04540f5",
+  "importer": "typescript",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 7 - 3
assets/script/logic/ui/scene/UIGame.ts

@@ -1,8 +1,11 @@
 
 import Config from "../../../Config";
 import { GuideType, InGame, OpenType } from "../../../data/const/TypeConst";
+import { ViewLayer } from "../../../data/const/ViewLayer";
+import { ViewZorder } from "../../../data/const/ViewZOrder";
 import FguiMgr from "../../../frameWork/fgui/FguiMgr";
 import AssetMgr from "../../../utils/AssetMgr";
+import { HomeView } from "../../fgui/Home/Home/HomeView";
 
 const { ccclass, menu, property } = cc._decorator;
 
@@ -44,10 +47,10 @@ export default class UIGame extends cc.Component {
 		FguiMgr.Instance.clearCacheMap()
 		// 网络遮罩层
 		AssetMgr.instantiate(cc.director.getScene(), this.safeAreaNode);
-		AssetMgr.instantiate(cc.director.getScene(), this.uiHand)
+		// AssetMgr.instantiate(cc.director.getScene(), this.uiHand)
 		AssetMgr.instantiate(cc.director.getScene(), this.guideView)
 		AssetMgr.instantiate(cc.director.getScene(), this.handMaskView)
-		AssetMgr.instantiate(cc.director.getScene(), this.dialogView)
+		// AssetMgr.instantiate(cc.director.getScene(), this.dialogView)
 		AssetMgr.instantiate(cc.director.getScene(), this.uiMask)
 		AssetMgr.instantiate(cc.director.getScene(), this.netMask)
 		this.EnterGame();
@@ -55,7 +58,8 @@ export default class UIGame extends cc.Component {
 
 
 	async EnterGame(closeFunc?: Function) {
-
+		// 进入游戏
+		FguiMgr.Instance.openUI(HomeView, ViewLayer.Home)
 	}
 
 	//fgui相关

+ 2 - 6
assets/script/plat/PlatformLocal.ts

@@ -1,20 +1,16 @@
 import Mint from "../utils/mintFilter/index";
-import { gameMethod } from "../common/gameMethod";
-import UILocalLogin from "../logic/ui/localLogin/UILocalLogin";
-import UIHelp from "../logic/ui/UIHelp";
 import PlatformBase from "./PlatformBase";
-import Gamecfg from "../common/gameCfg";
 import GameDataCenter from "../data/GameDataCenter";
 import { PlatFormDevType } from "../data/const/TypeConst";
 import FguiMgr from "../frameWork/fgui/FguiMgr";
 import { LoginView } from "../logic/fgui/Login/Login/LoginView";
-import { ViewZorder } from "../data/const/ViewZOrder";
+import { ViewLayer } from "../data/const/ViewLayer";
 export default class PlatformLocal extends PlatformBase {
     mint: Mint;
     
     showLoginView(): void {
         GameDataCenter.plat.instance.deviceOS = PlatFormDevType.local;
-        FguiMgr.Instance.openUI(LoginView, ViewZorder.POP);
+        FguiMgr.Instance.openUI(LoginView, ViewLayer.TopUI);
     }
     
 }

+ 1 - 1
fgui-project/assets/Common/package.xml

@@ -119,7 +119,7 @@
     <image id="qob5obap59" name="Butt_Green.png" path="/Images/" exported="true"/>
     <component id="qob5obap5a" name="GreenBuyBtn.xml" path="/Components/" exported="true"/>
     <image id="q7k6obap68" name="star_00.png" path="/Images/Reward/"/>
-    <image id="tw8robap81" name="imgMaskBg.png" path="/Images/"/>
+    <image id="tw8robap81" name="imgMaskBg.png" path="/Images/" exported="true"/>
   </resources>
   <publish name="" genCode="true">
     <atlas name="艺术字" compression="true" index="1"/>

+ 1 - 0
fgui-project/assets/Home/Home.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <component size="750,1334">
   <displayList>
+    <image id="n1_tw8r" name="ImgBg" src="tw8robap81" fileName="Images/imgMaskBg.png" pkg="rd135cfr" xy="375,667" pivot="0.5,0.5" anchor="true" size="750,1334"/>
     <text id="n0_z3qm" name="n0" xy="347,407" pivot="0.5,0.5" anchor="true" size="148,34" fontSize="24" color="#ffffff" text="收到舒服舒服"/>
   </displayList>
   <scriptData gencodez3qm0="1"/>

+ 5 - 5
local/local.json

@@ -1,9 +1,6 @@
 {
-  "last-edit": "26a9d6f3-4536-49c5-b158-81ae1da24824",
+  "last-edit": "edb1af04-7cbd-4475-a834-f29cdfbcc622",
   "recent-items": [
-    "56f28b7c-68c2-4a3e-b5c9-cb04a53e0a45",
-    "a6c7c0e6-5e6c-46e4-9fe2-3ed526ca0d29",
-    "7e5e586b-9fa5-4554-b89c-4b6f5c1db3d6",
     "fd2f349b-43fd-4920-84b8-595b0020c103",
     "a148b569-9d50-4368-8383-198604083248",
     "b2fac15c-76f6-4503-b86a-246010199526",
@@ -100,6 +97,9 @@
     "5c0add12-d4e6-4cf6-8893-87e2d30973be",
     "35cac3c7-c022-4c5a-b565-4ff949c0f101",
     "ba20306b-2d8e-4515-a2e9-b837c14ffe3e",
-    "26a9d6f3-4536-49c5-b158-81ae1da24824"
+    "26a9d6f3-4536-49c5-b158-81ae1da24824",
+    "edb1af04-7cbd-4475-a834-f29cdfbcc622",
+    "9d9f3926-908a-4aae-aa14-541d603541d9",
+    "4e5ed5ee-545e-4e48-834f-25caad2c1c77"
   ]
 }