99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

CocosCreator大廳子游戲整合:Asset Bundle動(dòng)態(tài)加載與避坑指南

CocosCreator大廳子游戲整合:Asset Bundle動(dòng)態(tài)加載與避坑指南 簡(jiǎn)介這是一份圍繞Cocos Creator打造“大廳多個(gè)子游戲”整合模式的實(shí)戰(zhàn)筆記demo適合需要搭建多玩法入口、獨(dú)立熱更子游戲或模塊化游戲項(xiàng)目的開發(fā)者參考。壓縮包共64個(gè)文件以js腳本為主輔以json配置、meta資源描述、fire場(chǎng)景文件、png/jpg圖片素材、ttf字體及bat工具腳本整體僅7.09MB便于快速下載與對(duì)照學(xué)習(xí)。已有943人學(xué)習(xí)下載。資源演示了大廳作為子游戲入口的設(shè)計(jì)思路覆蓋場(chǎng)景切換、事件監(jiān)聽、資源動(dòng)態(tài)加載、獨(dú)立子游戲熱更新、性能優(yōu)化與打包發(fā)布等關(guān)鍵環(huán)節(jié)目錄按大廳、子游戲及工具模塊劃分配合Readme閱讀可更清晰理解整包集成與獨(dú)立更新兩種模式的區(qū)別。適合希望從零搭建或重構(gòu)多游戲整合框架的Cocos Creator開發(fā)者作為梳理流程、調(diào)試排錯(cuò)和發(fā)布部署的參照。1. CocosCreator大廳子游戲整合先解決怎么把多個(gè)項(xiàng)目裝進(jìn)一個(gè)App做休閑游戲或互動(dòng)內(nèi)容集的人大概率會(huì)在某一天收到這樣的需求手里已經(jīng)有三五個(gè)獨(dú)立跑好的小玩法突然要合成一個(gè)“大廳 子游戲”的 App或者你想做一個(gè)類似內(nèi)置小游戲集的產(chǎn)品主界面是兩排卡片點(diǎn)進(jìn)去玩一局退出還能回到大廳。CocosCreator 里最省事的做法是把所有場(chǎng)景和資源塞進(jìn)同一個(gè)主包但子游戲一多主場(chǎng)景越來越重首屏冷啟動(dòng)越來越慢任何一個(gè)子游戲的小改動(dòng)都要全量發(fā)版成本很快失控。這篇筆記不是一個(gè)泛泛的教程而是順著一個(gè) CocosCreator 大廳子游戲 demo 的項(xiàng)目整合路徑走一遍怎么按 Bundle 拆分大廳和多個(gè)子項(xiàng)目、運(yùn)行時(shí)動(dòng)態(tài)加載、退出卸載、事件通信以及不跑一遍根本想不到的坑。適合準(zhǔn)備把現(xiàn)有單場(chǎng)景工程改造成多子游戲架構(gòu)的開發(fā)者看。2. 架構(gòu)選型為什么“大廳 子項(xiàng)目”不是把多個(gè)項(xiàng)目硬塞進(jìn)一個(gè)包2.1 Asset Bundle 是整合的基石先搞清它是誰Asset Bundle 是 CocosCreator 做資源按需加載的單元。每個(gè) Bundle 在被構(gòu)建后會(huì)生成獨(dú)立的資源清單和配置運(yùn)行時(shí)通過assetManager.loadBundle加載。做大廳 子游戲的項(xiàng)目整合本質(zhì)就是把子游戲相關(guān)的場(chǎng)景、預(yù)制體、貼圖、聲音、腳本代碼全部收進(jìn)各自獨(dú)立的 Bundle 中大廳只保留最精簡(jiǎn)的主包資源。這樣首包體積不會(huì)跟著子游戲數(shù)量漲進(jìn)入子游戲時(shí)才拉取對(duì)應(yīng)包體退出后還能釋放內(nèi)存。在工程里配置 Bundle 其實(shí)很簡(jiǎn)單對(duì)一個(gè)文件夾右鍵選擇“配置為 Bundle”然后在屬性檢查器里給它起名。名字很關(guān)鍵代碼里loadBundle(subgame1)用的就是這個(gè)名字。CocosCreator 在構(gòu)建時(shí)會(huì)把這個(gè)文件夾里的資源按依賴關(guān)系抽離到獨(dú)立的 Bundle 目錄同時(shí)生成一份 Json 記錄資源 uuid、路徑和依賴表。這里有個(gè)容易忽略的點(diǎn)Bundle 不光是美術(shù)資源腳本代碼也會(huì)跟著走。正因?yàn)?Bundle 連代碼都能帶你才能做到“子游戲的邏輯只在你進(jìn)入子游戲時(shí)才加載”。CocosCreator 的 Bundle 和純 C 或其他傳統(tǒng)前端里的模塊加載不太一樣它有自己的一套依賴追蹤和釋放策略。你在編輯器里看到的了一個(gè)文件夾構(gòu)建后可能被拆成多個(gè)依賴層級(jí)這也是為什么要強(qiáng)調(diào)“邊界”這件事。提示Bundle 不是熱更新專屬機(jī)制。不配遠(yuǎn)程服務(wù)器它也能作為本地按需加載的模塊使用。demo 階段可以完全跑在本地后面接熱更只需把 Bundle 的版本和遠(yuǎn)程地址配好即可。2.2 子游戲的邊界哪些該進(jìn)自己的 Bundle哪些必須共享一個(gè)干凈的子游戲 Bundle 邊界應(yīng)該是自包含的子游戲?qū)俚膱?chǎng)景、腳本、UI、交互循環(huán)都放在自己的 Bundle 里公共資源比如大廳風(fēng)格、通用按鈕、工具函數(shù)庫(kù)放在一個(gè)公共 Bundle 或主包。如果子游戲 A 的資源被子游戲 B 引用要么把這兩段資源收進(jìn)公共包要么接受重復(fù)打包別在運(yùn)行時(shí)嘗試去另一個(gè) Bundle 里找資源那樣會(huì)引入加載順序依賴非常容易踩到“資源找不到”的問題。對(duì)于“大廳 子游戲”這種常見玩法我習(xí)慣這樣劃邊界大廳本身一個(gè)常駐場(chǎng)景直屬大廳的 UI、通用組件放到一個(gè) Common Bundle或者直接保留在主包里。每個(gè)子游戲一個(gè)獨(dú)立 Bundle入口是一個(gè)全屏 Prefab 或者一個(gè)獨(dú)立子場(chǎng)景。前者更方便因?yàn)榇髲d節(jié)點(diǎn)不用被切換掉后者適合子游戲內(nèi)部自帶多個(gè)場(chǎng)景的玩法。子游戲依賴的公共數(shù)據(jù)、SDK 對(duì)接層、網(wǎng)絡(luò)請(qǐng)求等抽到commonBundle 并讓多個(gè)子游戲依賴。不要在每個(gè)子游戲里分別復(fù)制一份否則包體和代碼量會(huì)翻倍。還有一條經(jīng)驗(yàn)是越早約定“Bundle 不能跨引用”越好。編輯器里拖拽資源非常順手大廳預(yù)制體上隨手引了一個(gè)子游戲的貼圖構(gòu)建時(shí)這張貼圖就會(huì)被算進(jìn)主包依賴主包就被撐大了。這種錯(cuò)誤構(gòu)建時(shí)不報(bào)錯(cuò)只在后面看包體占比時(shí)才嚇你一跳。后面避坑章會(huì)專門再講。2.3 對(duì)比整包方案為項(xiàng)目整合付出架構(gòu)成本值不值整包和 Bundle 方式最直觀的區(qū)別可以用下面這個(gè)表來看對(duì)比維度整包集成大廳 子游戲 Bundle首包體積會(huì)隨子游戲數(shù)量線性增大首包只包含大廳公共部分首次加載冷屏要等全部資源只等大廳子游戲進(jìn)入時(shí)再加載發(fā)版效率改個(gè)子游戲也要全量發(fā)版子游戲 Bundle 可以獨(dú)立更新內(nèi)存壓力所有子場(chǎng)景資源常駐退出子游戲時(shí)手動(dòng)釋放工程復(fù)雜度低需要處理加載順序和生命周期結(jié)論很直接如果只是兩三個(gè)休閑玩法的教學(xué) demo整包來得省心但只要有“多個(gè)子項(xiàng)目后續(xù)還會(huì)繼續(xù)加”的情況建議首次就把 Bundle 架構(gòu)立起來。項(xiàng)目整合越晚做拆分成本越高。我見過很多團(tuán)隊(duì)一開始用整包頂著后來游戲多了想改大廳子游戲架構(gòu)結(jié)果要?jiǎng)铀袌?chǎng)景引用關(guān)系幾乎沒有后悔藥。等架構(gòu)定了我們?cè)賮砜?demo 怎么落地。實(shí)際跑代碼之前先把幾種加載模式區(qū)分開大廳直接通過loadBundle按需拉包是最常規(guī)的做法如果子游戲之間有切換比如從子游戲 A 直接進(jìn)入子游戲 B大廳要先把 A 的資源釋放再加載 B。這個(gè)順序控制好了整個(gè)項(xiàng)目整合就算成了八成。3. 搭一個(gè)最小 demo在大廳里動(dòng)態(tài)加載子游戲3.1 demo 工程結(jié)構(gòu)三塊東西不要混在我寫代碼前先把工程分層擺出來。假設(shè)一個(gè)最簡(jiǎn)單的演示有大廳和兩個(gè)子游戲assets/ hall/ // 大廳主場(chǎng)景和 UI scenes/ Hall.scene scripts/ HallManager.ts subgames/ sub1/ // 子游戲1這個(gè) Bundle prefab/ SubGame1.prefab scripts/ SubGame1Root.ts res/ ... sub2/ // 子游戲2這個(gè) Bundle prefab/ SubGame2.prefab scripts/ SubGame2Root.ts common/ scripts/ EventBus.ts GameDef.ts操作上在assets/subgames/sub1文件夾右鍵選擇“配置為 Bundle”Bundle 名稱填subgame1。sub2同理。兩個(gè)文件夾里的資源在構(gòu)建時(shí)會(huì)各自獨(dú)立打包。hall文件夾不設(shè)成 Bundle所有資源直接進(jìn)主包方便冷啟動(dòng)。這里有一個(gè)參數(shù)值得強(qiáng)調(diào)Bundle 配置面板里的“目標(biāo)平臺(tái)”可以單獨(dú)控制比如你只想讓subgame1打進(jìn)微信小游戲包而subgame2只用于原生平臺(tái)構(gòu)建配置里可以分開勾選。demo 階段不用管這個(gè)但要知道有這個(gè)能力因?yàn)榇髲d 多子項(xiàng)目的項(xiàng)目整合經(jīng)常需要應(yīng)對(duì)多端發(fā)布。每個(gè)子游戲最好都只有一個(gè)入口 Prefab這樣大廳加載時(shí)只需面對(duì)一個(gè)統(tǒng)一路徑。如果子游戲內(nèi)部還有多個(gè)場(chǎng)景切換由子游戲自己管理大廳不感知。大廳負(fù)責(zé)的是“把子游戲的入口節(jié)點(diǎn)掛到自己的場(chǎng)景下”“退出時(shí)把它從場(chǎng)景移除”。把耦合限制在這兩個(gè)動(dòng)作上后期新增子游戲就只需要加一個(gè) Bundle 配置和一個(gè)入口按鈕映射。3.2 用 Bundle 動(dòng)態(tài)加載子游戲最小代碼先實(shí)現(xiàn)最直接的流程點(diǎn)擊大廳列表里的按鈕加載subgame1這個(gè) Bundle然后從 Bundle 里取出SubGame1.prefab掛到大廳場(chǎng)景下。import { _decorator, Component, Node, Prefab, assetManager, instantiate } from cc; export default class HallManager extends Component { currentNode: Node | null null; enterSubGame(bundleName: string, prefabPath: string) { assetManager.loadBundle(bundleName, (err, bundle) { if (err) { console.error([Hall] loadBundle ${bundleName} failed:, err); return; } const prefab bundle.get(prefabPath, Prefab); if (!prefab) { console.error([Hall] prefab ${prefabPath} not found in bundle); return; } this.currentNode instantiate(prefab); this.currentNode.setParent(this.node.parent ?? this.node); }); } exitSubGame() { this.currentNode?.destroy(); this.currentNode null; } }邏輯很簡(jiǎn)單assetManager.loadBundle是入口回調(diào)成功表示 Bundle 已經(jīng)加載bundle.get直接從已加載的 Bundle 里拿資源。注意instantiate(prefab)出來后掛到大廳 Node 的父節(jié)點(diǎn)下這樣預(yù)制體內(nèi)部的start會(huì)被觸發(fā)。按鈕的click事件綁定時(shí)傳入兩個(gè)字符串參數(shù)比如(subgame1, prefab/SubGame1)。參數(shù)說明loadBundle的bundleName必須和構(gòu)建 Bundle 時(shí)的名字一致默認(rèn)是文件夾名prefabPath是相對(duì) Bundle 的路徑不包含assets/前綴。bundle.get只適合 Bundle 已經(jīng)確認(rèn)加載完的情況如果加載過程還沒結(jié)束get拿不到資源所以更穩(wěn)妥的是用bundle.load。示例里沒有做加載失敗重試實(shí)際項(xiàng)目會(huì)封一層管理器下面繼續(xù)。3.3 用統(tǒng)一的 SubGameManager 管理“進(jìn)入/退出”狀態(tài)只寫上面的方法雖然能跑但大廳里同時(shí)多點(diǎn)幾個(gè)入口或者重復(fù)進(jìn)入同一個(gè)子游戲會(huì)出現(xiàn)多個(gè)節(jié)點(diǎn)疊在一起、事件互相干擾的情況。我習(xí)慣把入口邏輯收攏成一個(gè)管理類維護(hù)“當(dāng)前是否有子游戲在運(yùn)行”的狀態(tài)import { _decorator, Component, Prefab, Node, assetManager, instantiate } from cc; type LoadDone (node: Node) void; export default class SubGameManager extends Component { public currNode: Node | null null; public currentBundleName: string ; enterGame(bundleName: string, prefabPath: string, onDone?: LoadDone) { if (this.currNode) { console.warn([SubGameManager] 已經(jīng)有子游戲在運(yùn)行先退出再進(jìn)入); return; } assetManager.loadBundle(bundleName, (bundleErr, bundle) { if (bundleErr) { console.error(加載 ${bundleName} 失敗, bundleErr); return; } bundle.load(prefabPath, Prefab, (loadErr, prefab) { if (loadErr) { console.error(加載 ${prefabPath} 失敗, loadErr); return; } const node instantiate(prefab); node.setParent(this.node); this.currNode node; this.currentBundleName bundleName; onDone onDone(node); }); }); } exitGame() { if (!this.currNode) return; this.currNode.destroy(); this.currNode null; this.currentBundleName ; } }相比最小示例這里用currNode記錄當(dāng)前子游戲防止重復(fù)進(jìn)入用bundle.load而不是bundle.get規(guī)避了“資源未加載完”的窗期。這個(gè)管理器掛在 Canvas 下的一個(gè)常駐空節(jié)點(diǎn)上子游戲 Prefab 都作為這個(gè)空節(jié)點(diǎn)的子節(jié)點(diǎn)這樣即使大廳 UI 切換層級(jí)子游戲?qū)雍痛髲d層也能保持邏輯隔離。在enterGame里還有個(gè)細(xì)節(jié)成功回調(diào)里做node.setParent(this.node)this.node就是管理器節(jié)點(diǎn)的引用。因?yàn)閠his是管理器的組件實(shí)例this.node才是場(chǎng)景樹上的節(jié)點(diǎn)。如果你把管理器掛在大廳根節(jié)點(diǎn)上那子游戲就是大廳根節(jié)點(diǎn)的直接子節(jié)點(diǎn)退出時(shí)要不要恢復(fù)層級(jí)要看你的設(shè)計(jì)。這里我選擇獨(dú)立掛載規(guī)避一層耦合。4. 項(xiàng)目整合中的通信與生命周期不處理好進(jìn)入退出兩三次就會(huì)出鬼4.1 用事件總線打通大廳與子游戲大廳和子游戲各自獨(dú)立不能直接拿著對(duì)方的組件引用來調(diào)用方法否則會(huì)形成強(qiáng)耦合。常見做法是掛一個(gè)全局事件總線。子游戲要向大廳匯報(bào)分?jǐn)?shù)發(fā)出事件大廳監(jiān)聽事件并更新 UI。一個(gè)極簡(jiǎn)事件總線可以這樣寫import { EventTarget } from cc; const bus new EventTarget(); export function onEvent(name: string, callback: (payload?: any) void) { bus.on(name, callback); return () { bus.off(name, callback); }; } export function emitEvent(name: string, payload?: any) { bus.emit(name, payload); }EventTarget是 CocosCreator 自帶的簡(jiǎn)單事件目標(biāo)不需要引第三方庫(kù)也沒有平臺(tái)差異。用onEvent返回的 off 函數(shù)可以在子游戲銷毀時(shí)解綁防止回調(diào)泄漏。如果你是第一次寫這種跨模塊通信建議把事件名定義成枚舉放進(jìn)common/scripts/GameDef.ts比如export enum GameEvent { SUBMIT_SCORE SUBMIT_SCORE, GAME_EXIT GAME_EXIT, }這樣做的好處是子游戲內(nèi)發(fā)事件時(shí)如果拼錯(cuò)字符串TypeScript 編譯階段就會(huì)報(bào)錯(cuò)而不是運(yùn)行時(shí)靜默丟掉。另一個(gè)隱藏收益是編輯器全局搜索方便重構(gòu)事件名時(shí)可以快速定位所有引用處。事件總線的邊界要克制。如果大廳和子游戲之間交互特別密集比如子游戲內(nèi)有個(gè)進(jìn)度條要實(shí)時(shí)同步到大廳那就不要把每個(gè)進(jìn)度都發(fā)到全局總線否則總線會(huì)變成黑匣子。更好的做法是子游戲進(jìn)入時(shí)大廳把可以用于同步的UIProxy傳給子游戲根節(jié)點(diǎn)子游戲內(nèi)部通過這個(gè)代理更新 UI而不是發(fā)事件。職責(zé)劃分上總線適合一次性的“結(jié)果通知”代理適合持續(xù)性的“狀態(tài)同步”。4.2 子游戲退出時(shí)只銷毀節(jié)點(diǎn)是不夠的子游戲節(jié)點(diǎn)被destroy()后它下面所有組件的onDestroy會(huì)執(zhí)行但不會(huì)自動(dòng)替你恢復(fù)大廳 UI 的狀態(tài)。比如子游戲全屏 UI 把主廳 UI 蓋住了退出時(shí)大廳停留在進(jìn)入前的狀態(tài)這沒問題。問題在別處子游戲里的定時(shí)器、Tween、網(wǎng)絡(luò)輪詢、全局事件監(jiān)聽稍微不干凈就會(huì)殘留在大廳進(jìn)程里。一個(gè)健壯的子游戲入口組件通常會(huì)顯式做清理import { _decorator, Component, Node, Tween } from cc; import { offEvent } from ../common/EventBus; import { GameEvent } from ../common/GameDef; export default class SubGame1Root extends Component { private offFuncs: Array() void []; onLoad() { this.offFuncs.push(offEvent(GameEvent.SUBMIT_SCORE, this.onSubmitScore)); this.scheduleOnce(() { // 子游戲自己的開機(jī)初始化 }, 0.1); } onDestroy() { this.offFuncs.forEach(f f()); this.offFuncs.length 0; Tween.stopAllByTarget(this.node); } private onSubmitScore(score: number) { // 往大廳上報(bào)分?jǐn)?shù) } }關(guān)鍵點(diǎn)在于將所有需要解綁的監(jiān)聽器統(tǒng)一收進(jìn)數(shù)組在onDestroy里一起解除。如果用EventTarget的on就必須持有off引用別在onDestroy里去寫bus.off(SUBMIT_SCORE, 一個(gè)匿名函數(shù))那會(huì)失效因?yàn)槊看温暶髂涿瘮?shù)都是新的引用。Tween.stopAllByTarget(this.node)能停掉針對(duì)該子游戲根節(jié)點(diǎn)的所有緩動(dòng)防止動(dòng)畫殘留在舞臺(tái)上。setInterval這類全局定時(shí)器也必須記得清掉。你可以把setInterval返回的句柄存在組件的私有屬性里在onDestroy里調(diào)用clearInterval。有些開發(fā)者覺得子游戲節(jié)點(diǎn)銷毀了定時(shí)器就會(huì)自動(dòng)消失但實(shí)際不是這樣——定時(shí)器是全局的和節(jié)點(diǎn)生命周期沒有綁定。跑一次進(jìn)入退出循環(huán)如果你在 Console 里看到節(jié)點(diǎn)無法釋放或內(nèi)存增長(zhǎng)先檢查定時(shí)器。4.3 退出子游戲時(shí)清掉 Bundle 里的資源緩存但要小心公共資源恭喜你到了項(xiàng)目整合里最容易出對(duì)錯(cuò)的一個(gè)點(diǎn)。assetManager.loadBundle把 Bundle 加載進(jìn)來之后它會(huì)對(duì) Bundle 內(nèi)的資源建立緩存bundle.releaseAll()能釋放所有屬于該 Bundle 的資源。理論上“退出子游戲并釋放 Bundle”是最理想的內(nèi)存回收方式。但是這里有個(gè)細(xì)節(jié)如果子游戲 Bundle 里引用了commonBundle 里的某個(gè)公共 SpriteFrame 或字體releaseAll()會(huì)把它引用到的公共資源也一起釋放導(dǎo)致其他 Bundle 也使用該公共資源時(shí)出現(xiàn)“資源為空”或黑圖。正確做法是先確認(rèn)依賴關(guān)系。在 CocosCreator 里可以用bundle.getDependencies()查看依賴的資源 uuid再?zèng)Q定哪些該 release 哪些不該動(dòng)。我一般用“引用計(jì)數(shù)”思維做不直接對(duì) Bundle 調(diào)用releaseAll()而是把未共享的資源顯式釋放把公共資源留在公共 Bundle 里讓它在整個(gè)生命周期內(nèi)不因子游戲退出被錯(cuò)誤銷毀。demo 階段最簡(jiǎn)單的是退出時(shí)只看節(jié)點(diǎn)銷毀不做內(nèi)存管理。等真正上生產(chǎn)再按下面的exitGame增強(qiáng)版處理exitGame() { if (!this.currNode) return; const bundle assetManager.getBundle(this.currentBundleName); this.currNode.destroy(); this.currNode null; if (bundle) { bundle.releaseAll(); assetManager.removeBundle(bundle); } }這行代碼寫起來很爽跑起來如果你沒有公共資源引用也沒問題。萬一你遇到了子游戲退出后公共 UI 丟貼圖就是它干的。真遇到那種情況把releaseAll改成只釋放部分資源或者在關(guān)閉子游戲時(shí)暫時(shí)不removeBundle把它留在內(nèi)存里供下一次快速進(jìn)入。這個(gè)權(quán)衡需要結(jié)合你子游戲的數(shù)量和內(nèi)存預(yù)算不是越傾向釋放越好。5. 項(xiàng)目整合避坑這5個(gè)問題我踩過你最好提前知道5.1 加載了子游戲 Prefab但屏幕還是空的現(xiàn)象進(jìn)入大廳點(diǎn)擊按鈕控制臺(tái)沒有任何報(bào)錯(cuò)或者只打了一個(gè)“加載成功”但是屏幕上看不到子游戲任何元素。原因這個(gè)坑十有八九是子游戲 Prefab 的父節(jié)點(diǎn)不對(duì)。如果你的大廳是一個(gè)全屏節(jié)點(diǎn)而子游戲 Prefab 掛到大廳這個(gè)節(jié)點(diǎn)底下并且子游戲內(nèi)部坐標(biāo)計(jì)算受父節(jié)點(diǎn)UIOpacity、Scale影響可能被縮放成 0 或透明也或者掛到了一個(gè)隱藏節(jié)點(diǎn)下面看起來就是“沒出來”。解決先在大廳代碼里給當(dāng)前節(jié)點(diǎn)設(shè)置一個(gè)可視標(biāo)記比如把currentNode.parent設(shè)成 Canvas 節(jié)點(diǎn)下的一個(gè)專門“子游戲?qū)印眲e掛在大廳 UI 的某個(gè)按鈕下面。另外檢查 Prefab 根節(jié)點(diǎn)的active是否為 true。CocosCreator 的預(yù)制體實(shí)例默認(rèn) active 和編輯器里保持一致如果你在 Prefab 編輯器里掛了隱藏根節(jié)點(diǎn)怎么加載都不會(huì)顯示。還想加一道保險(xiǎn)就在SubGameManager.enterGame成功回調(diào)里強(qiáng)制node.active true。5.2 子游戲資源被打進(jìn)主包Bundle 白設(shè)了現(xiàn)象本地跑的時(shí)候一切正常構(gòu)建以后首包體比你預(yù)計(jì)的多打開構(gòu)建產(chǎn)物也沒見子游戲的貼圖資源占比統(tǒng)計(jì)里把子游戲資源算到了主包。原因CocosCreator 的 Bundle 打包遵循“資源究竟從哪里被引用”。當(dāng)大廳場(chǎng)景或大廳里的公共組件直接引用了子游戲 Prefab 的一部分資源比如一個(gè)公共圖集、一個(gè)腳本常量構(gòu)建器會(huì)認(rèn)為這個(gè)資源是主包依賴于是把它默認(rèn)復(fù)制到主包。這樣子游戲內(nèi)部確實(shí)能運(yùn)行但主包已經(jīng)被越界引用撐大了。解決嚴(yán)格檢查跨包引用。建議在子游戲開發(fā)階段就約定大廳腳本只通過 Bundle 加載子游戲所有子游戲內(nèi)部資源都不要在編輯器中拖拽到大廳預(yù)制體的屬性上。如果發(fā)現(xiàn)某個(gè) SpriteFrame 被大廳的管理器引用到了把引用改成運(yùn)行時(shí)通過 Bundle 加載或者把該資源轉(zhuǎn)移到公共 Bundle。這個(gè)坑沒有構(gòu)建報(bào)錯(cuò)只有靠資源管理器的“依賴圖表”來查。5.3 子游戲onLoad被調(diào)用兩次或者沒調(diào)用現(xiàn)象在子游戲腳本里打console.log(load)第一次進(jìn)入打了兩遍退出再進(jìn)又不打了或者反過來第二次進(jìn)入后子游戲的start一直不觸發(fā)。原因很多是加載姿勢(shì)不對(duì)。我們用bundle.load拿到同一個(gè) Prefab 再instantiate每次 instantiate 出來的新節(jié)點(diǎn)都會(huì)跑onLoad但如果節(jié)點(diǎn)沒有 active 地掛到 Canvas 下而是掛到了一個(gè) inactive 節(jié)點(diǎn)下start不會(huì)執(zhí)行onLoad可能延遲或完全不觸發(fā)。另外如果同一個(gè) Prefab 的引用被大廳的多個(gè)按鈕同時(shí)持有點(diǎn)擊時(shí)實(shí)例化兩次就會(huì)看到兩個(gè)onLoad。解決一套嚴(yán)格流程是確保 Prefab 節(jié)點(diǎn)最終的父節(jié)點(diǎn)是 active 的并且setParent之后不要立刻對(duì)父節(jié)點(diǎn)做destroy。想要防御在子游戲入口腳本的onLoad里加守衛(wèi)判斷一個(gè)全局單例是否存在避免重復(fù)初始化。比如if (SubGame1State.isLoaded) return; SubGame1State.isLoaded true;這個(gè)守衛(wèi)還有一個(gè)作用當(dāng)子游戲被異常重復(fù)加載時(shí)不至于同時(shí)跑兩套游戲循環(huán)。5.4 大廳界面被子游戲遮擋退出后界面錯(cuò)位現(xiàn)象從子游戲回到大廳大廳原本的排行榜、頭像或彈窗不見了或者坐標(biāo)整體偏移。原因子游戲 Prefab 通常是全屏的會(huì)蓋在大廳 UI 上面這沒問題。問題出在進(jìn)入子游戲前你手動(dòng)修改過大廳主 UI 節(jié)點(diǎn)的active或?qū)蛹?jí)退出時(shí)沒有恢復(fù)。比如enterGame里順手把大廳主 UIactive false但exitGame忘了把a(bǔ)ctive true。解決狀態(tài)保存與恢復(fù)要在進(jìn)入和退出時(shí)成對(duì)寫。我習(xí)慣維護(hù)一個(gè)SceneUIState對(duì)象記錄進(jìn)入前的節(jié)點(diǎn)active和setSiblingIndex退出時(shí)按記錄恢復(fù)而不是寫死“大廳 UI 一定存在”的假設(shè)。代碼結(jié)構(gòu)類似private savedState: { node: Node; active: boolean }[] []; enterGame() { this.savedState []; for (const uiNode of this.hallUIList) { this.savedState.push({ node: uiNode, active: uiNode.active }); uiNode.active false; } } exitGame() { for (const state of this.savedState) { state.node.active state.active; } this.savedState []; }這樣做能避免“進(jìn)入子游戲時(shí)隱藏大廳退出時(shí)又忘記顯示”的低級(jí)錯(cuò)誤。5.5 構(gòu)建后 Bundle 找不到控制臺(tái)報(bào) 2048現(xiàn)象構(gòu)建出來的版本在真機(jī)上點(diǎn)擊入口回調(diào)函數(shù)能執(zhí)行但err非空錯(cuò)誤碼 2048或者提示Bundle not found編輯器里跑卻正常。原因CocosCreator 的 Bundle 尋址依賴構(gòu)建后的配置。代碼里assetManager.loadBundle(subgame1)的名字需要和構(gòu)建面板里的 Bundle 名稱一致大小寫也必須一致。如果沒在構(gòu)建配置里把該文件夾勾選為“Bundle”或者構(gòu)建時(shí)沒勾選對(duì)應(yīng)平臺(tái)都會(huì)導(dǎo)致運(yùn)行時(shí)找不到。解決打開構(gòu)建面板展開“Bundle 配置”確認(rèn)subgame1和subgame2都被勾選。真機(jī)調(diào)試時(shí)如果用了遠(yuǎn)程資源服務(wù)器要確保服務(wù)器對(duì)應(yīng)目錄有config.json。別前端拿不到資源就猜代碼先用瀏覽器 DevTools 或原生抓包看網(wǎng)絡(luò)請(qǐng)求路徑多半是路徑少了斜杠或者域名不對(duì)。6. 進(jìn)階技巧給大廳到子游戲的加載過程加進(jìn)度和預(yù)取進(jìn)入子游戲如果全都是動(dòng)態(tài)加載真機(jī)從磁盤讀 Bundle 時(shí)用戶會(huì)看到大廳按鈕點(diǎn)擊后卡一兩秒體驗(yàn)很差。我最后的建議是把大加載過程拆成“進(jìn)度條 預(yù)取”兩步。先做一個(gè)簡(jiǎn)單加載面板彈出后開始加載export class LoadingView extends Component { progress: Label; show(bundleName: string, prefabPath: string, done: () void) { this.node.active true; assetManager.loadBundle(bundleName, (bundle) { bundle.load(prefabPath, Prefab, (err, prefab) { if (!err) { done(); this.node.active false; } }); }); } }上面代碼只有回調(diào)沒有進(jìn)度。要顯示進(jìn)度可以在loadBundle的 options 里帶onProgressassetManager.loadBundle(bundleName, { onProgress: (current: number, total: number) { this.progress.string 加載子游戲 ${Math.floor(current / total * 100)}%; } }, (err, bundle) { ... });不過要注意loadBundle的進(jìn)度回調(diào)是整個(gè) Bundle 資源的加載進(jìn)度Bundle 內(nèi)部還有一次loadprefab 的進(jìn)度想要完整表現(xiàn)需要把兩段進(jìn)度做串連。實(shí)踐中我更推薦另一套在大廳空閑時(shí)預(yù)取子游戲 Bundle但只加載配置不實(shí)例化。比如在首屏 UI 加載完成之后調(diào)一次assetManager.loadBundle(subgame1)趁用戶在首頁(yè)瀏覽時(shí)先把 bundle 拉進(jìn)內(nèi)存。等點(diǎn)擊進(jìn)入時(shí)直接從getBundle里取資源速度會(huì)快一個(gè)量級(jí)。預(yù)取代碼// 大廳 onLoad 里預(yù)取 assetManager.loadBundle(subgame1, (err, bundle) { if (!err) { // 只是為了緩存 bundle節(jié)點(diǎn)先不實(shí)例化 console.log([Hall] subgame1 ready); } }); // 點(diǎn)擊時(shí) const bundle assetManager.getBundle(subgame1); if (bundle) { const prefab bundle.get(prefab/SubGame1, Prefab); this.instantiateSub(prefab); }預(yù)取要注意兩點(diǎn)一是別在首屏onLoad里預(yù)取所有子游戲那樣首屏還是會(huì)變慢建議只預(yù)取第一個(gè)入口或用戶最常進(jìn)的那一個(gè)。二是內(nèi)存預(yù)算。預(yù)取占用的內(nèi)存高峰期疊加如果你在低端機(jī)上跑需要根據(jù)占用狀況主動(dòng)釋放不再需要的 Bundle。CocosCreator 提供assetManager.getDependencyStat可以打資源統(tǒng)計(jì)我上線前會(huì)通過它觀察整包內(nèi)存分配。說個(gè)我自己的習(xí)慣每次新增子游戲時(shí)都要反復(fù)確認(rèn)“大廳入口、加載路徑、退出清理”三件事能不能在 3 步內(nèi) trace 通。trace 不通就說明邊界設(shè)計(jì)有問題真正多子游戲上線出問題的往往不是加載邏輯而是狀態(tài)殘留。項(xiàng)目整合做的是工程結(jié)構(gòu)長(zhǎng)期賬別圖一時(shí)方便而放棄結(jié)構(gòu)上的清晰邊界。希望這個(gè)筆記對(duì)你的 CocosCreator 大廳子游戲 demo 有些幫助踩過的坑你已經(jīng)提前知道了。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月天婷婷涩涩| 九月大香蕉| 婷婷五月天免费| 久久久久久久久久91| 丁香五月天视频| 婷婷爱婷婷| 婷婷月综合| 96精品成人无码A片观看金桔| 思思精品热在线| 天天色图| 五月天婷婷乱论小说| 九九99九九99九九99视频网| www九月婷婷| 午夜少妇在线观看视频| 日韩九九| 日本五月婷| 色五月在线视频观看| 激情五月天婷婷图| 97干在线视频| a网站免费观看| 九色激情| 99婷婷色| 久久思思99| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 色色五月婷| 久久网日本| 婷婷五月天激情五月天深爱五月天| 亚洲精品乱码久久久久久按摩观| 99在线观看| 婷婷五月天精品| 日韩久久系列| 久久五月热| 日日做A爰片久久毛片A片英语| 亚洲区视频| 欧洲色| 日韩黄色中文字幕| 国产3p露脸普通话对白| 国产无遮挡又黄又爽免费网站| 激情综合婷婷| 九九av| 久久98| 色五月婷婷中文字幕| 日本五月天激情| 日日夜夜小色哥| 亚洲AAA| 狠狠狠婷婷五月综合| 99久久婷| 精品人妻伦| 丁香五月网络网络| 中文字幕色色色| 好好干av| 天天日夜夜爽| 久久久久9999| 无码 av电影| 做爰丰满少妇1313| 色欲色香综合网站| 婷婷五月激情欧美| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 欧美色色日韩| 成人中文字幕在线| 色婷婷狠狠干| 亚洲色在线观看| 九一99| 九九热视频精品| 丁香五月激情在线| 开心激情网在线| 久久婷婷成人综合色怡春院| 99干日日干| 又大又粗九一在线| 五月天激情四射网站| 插逼综合网| 丁香综合婷婷开心激情网| 久碰视频| 亚洲综合热| 久久亚洲无码| 伊人婷婷福利网| 1024久婷| 琪琪秋霞| 九九热在线视频| 91超级碰碰碰| Av在线资源| 4399在线观看免费毛片| 日韩一区二区三区无码| 激情综合九月| 天天搞天天色综合| 能看的AV| 99热亚洲| 日本操逼九九九九58日本操逼| 色婷五月天| 激情六月下句是什么| 丁香六月天色婷婷| 五月丁香免费看| 五月激香蕉网| 亚洲精品乱码久久久久久综合| 夜夜噜夜夜奇| 九九婷婷网五月天| 色偷偷色婷婷| 五月丁香黄色视频| 国产乱人偷精品人妻A片| 草榴视频黄色网| 五月婷婷色综图片| 99热手机在线精品| 91蝌蚪窝视频在线| 99视频精品视频| 激情小说五月欧美亚洲丁香| 国产AV一区二区三区日韩| 成人AV综合在线| 九九热只有这里精品| 99亚洲无码| 99久久婷婷国产综合精品草原| 99青青草99| 色婷婷五月影视| 国产婷婷五月色情综合| 五月婷婷伊| 99色婷婷视频| 91Chinese在线| 国产麻豆视频| 国产一区男女| 麻豆AV一区二区三区| 色色色色色色色色色色色色色97| 5月婷婷五月天| 97干在线视频| 99这里有精品久久97| 吾爱AV导航| 草操网| 26uuu丁香婷婷五月| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 婷婷九月丁香久久| 久久AAAA片一区二区| 一区二区乱码视频| 中文字幕,综合,91| 性色九九| 婷婷丁香激情综合色情| 涩玖玖免费视频| 婷婷伊人激情婷婷| 免费做A爰片77777| 青草热视频这里只有精品| 这里只有精品1| 五月丁香婷草| 成人AV在线电影| 人人操操| 淫视馆aV二区一区| 婷婷五月激情四月综合| 亚洲中文字幕在线观看| 色五月色综合| 精品国婬伦V无码久久久| 色婷婷五月网| 丁香婷婷综合喷| 狠狠色五月| 亚洲乱码日产精品BD在线观看| 激情综合网五月在线播放| 亚洲 视频 导航 一区| 奇米影视在线视频| 91要啪| 色色色97| 天天插天天爽| 婷婷五月天激情小说网站| 丁香五月影院| 丁香五月综合在线观看| 久久99大全| 99ri视频在线播放| 激情五月开心五月在线视频| 成人无码免费一区二区中文| 色综合色色| 五月天天综合| 97色婷| 婷婷六月爽| 精品夜夜澡人妻无码AV| 激情五月天伊人av| 99ri国产| 99热10在线高清播放| 丁香五月激情综合啪啪| 久99视频在线观看| 9色91视频| 99精色| 五月婷婷草| 亚洲天堂爱爱| 亚洲色色精品| 色婷婷六月天| 亚洲宗合激情| 亚洲区视频| 99热久久这里只有精品| 香蕉五月婷婷| 操碰91| 开心五月丁香啪| 婷五月天| 影音先锋女人AA鲁色资源| 五月婷婷无码专区| 91超碰人人操| 日本天堂网站99| 91丨九色丨丰满人妖| 夜夜夜天天操| 久色激情| 色情网综合| 久久丁香五月| 久机视频这只有精品| 色婷婷五月天偷拍| 99热九九九九| 噼里啪啦在线观看免费完整版视频| 亚洲人人操BD| 梁铮版《蜘蛛女侠》在线| 91九九九九| 激情av在线| 最新精品视频99| 中文久久婷婷| 九九无毛| 麻豆观看夏晴子| 91婷婷丁香五月| www.狠狠狠狠| 天天草人人摸| 99精品自拍| 激情玖玖综合网| 超碰碰碰碰| 九九久热| 狠狠插日日干撸| 婷婷五月色播网| 4438全国最大视频成人网站在线观看| 婷婷99| 98色花堂98t.R| 激情综合婷婷| 男人天堂亚洲综合| 99爱视频精品在线观看| 亚洲无码成人| 婷婷操久久| 亚洲成人日韩无码精品| 亚洲视频一区| 性做久久久久久久免费看| 色播五月综合网| 五月天久久综合婷婷丁香| 色五月开心婷婷| 久久婷婷人人| 欧美日韩成人一区二区| 色色色区| 亚洲综合草草| 丁香九月婷婷综合| 99精品久久久| 91超级碰| 亚洲视频a| 婷婷五月丁香久久| 六月丁香婷| 激情久久丁香| 色色五月天网站| 探花搜索结果 - 黄上黄| 色婷婷呢狠禁久禁| 1024人妻无码中文字幕| 日韩成人综合| 丁香五月综合久久综合| 天天综合网~91综合网| www.久久久久久久| 99视频色在线观看| 色插综合网| 五月香蕉综合| 26uuu91| 日韩av干| 79色色| av中文网站| 婷婷丁香五月天狠狠| 我要色综合五月婷婷| 99re久热只有精品6在线直播| 色播五月丁香| 深爱五月天 开心网| 激情综合网激情五月网 | 色五月首页| 激情网五月婷婷| 秋霞影音91人妻久久| 很很干五月天| 五月丁香婷婷AV| 99爱视频| 亚洲色五月| 精品亚洲国产成AV人片传媒| 超级97碰碰| www.久久久久久久久久久| 超碰在线中文字幕| 五月丁香在线视频观看| 国色天香伊人狠狠色| 亚洲超级碰| 思思热在线视频精品| 殴美激情综合网| 中文字幕AV在线| 色色色免费视频| 狠狠穞A片一區二區三區| 久超超碰| 开心亚洲久久开心| 天天色综网| 99综合自拍| 五月丁香色婷婷| 狠狠操狠狠插| 五月亭亭欧美女人| 婷婷激情综合无月| 婷婷五月综合网| 日韩综合天堂| 久久综合26p| 久操人| 五月丁香免费视频| 五月婷婷啪啪网| 九九热精品| 天天爽夜爽| 婷婷五月在线影院| 婷婷五月天久久| WwW天天干| 99re热视频这里只精品5| 狠狠色五月天| 国产肥白大熟妇BBBB视频| 99热一本| 婷婷色五月色妇| 激情小说五月天| 成人日韩欧美| 久久人操| 99久久这里只有精品| 久久这里只有精品热在99| 色亭亭九月| 日本欧美在线| www.日本91| 大学生高潮无套内谢视频| 人妻中文av| 亚洲另类婷婷五月丁香在线播放| www.99精品在线| 成人综合网站| 天天爱天天日| 91精品综合久久久久久五月丁香| 亚州精品成人片| 色吧五月婷婷六月丁香| 26uuu亚洲| 久久天堂女人| 久久九九99亚洲国产久精综合| www.色综合| 国产免费av网站| 六月丁香五月激情亚洲AV| 色五月AV| 久婷视频| 色婷婷小说| 一本道在线电影| 欧美大香蕉视频| 色五月色五天免费视频| 91国产精品视频播放| VA日本视频| 六月婷婷av| 五月天婷婷激情四射综合| 狠狠草婷婷| 婷婷狠狠干| 香焦网五月天| 亚洲AV中文在线| 五月天丁香欧美激情| 久久人妻系列| 婷婷碰碰| 婷婷射丁香| 9视频在线成人网站| 欧洲亚洲最新精品| 99这里都是精品| 91seav| 久久六月天| 97婷婷在线| 欧美成人网99网| 伊人激情综合| 色色色色网站| 九九狠狠干| 综合性爱网| 《久久综合九色综合97婷婷| 色婷婷www| 色射影院| 欧美激情综合| 五月丁香六月婷婷婷婷| 亚洲视频在线观看区| 天天干狠狠艹| 成人在线综合| www.激情五月| 婷婷色系婷色| 不卡成人免费| 99热精品观看| 久热只有这里有精品| 五月丁香免费看| 思思久久99热| 熟惀91九色在线| 五月综合影院| 性色av大香综合| 91视频一起草| 六月婷五月丁香| 天天操天天日天天爽| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 日本色久| 婷婷大美在线| se.久久视频在线观看| 五月婷婷六月丁香在线视频免费在线观看| 亚洲天堂热| 大香蕉久操| 色欲日日躁| 9色操| 丁香六月婷婷综合缴| 九月综合| 综合六月久久| 综合久久97| 激情六月丁香综合| 九色地址91视频| 久久激情综合| 婷婷五月偷拍| 操碰91| 色亚洲视频| 婷婷丁香色女人| 久久伦乱| 亚洲五月情| 青996青| AV电影在线播放| 色色五月婷婷丁香| 操操操av| 99九无网码| 极品少妇XXXX精品少妇偷拍 | 五月婷婷色播| 婷婷久久六月天| 碰超在线九色| 亚洲精品久久久无码| 夜夜谢天天干| 中文字幕簧片| 五月开心婷婷极品激情| 亚洲色图日韩网址| 精品爱欲五| 九色七七| 欧洲激情精品婷婷| 色婷婷色五月综合| a色色色色色| 停停五月色宗合| 亚洲第一综合| 久操婷婷| 天天综合久久| 激情婷婷五月天日本系列| 婷婷五月亚洲综合| 国产性爱一级| 婷婷中文网站| 色综合婷婷99| 99久久九九视频| 亚洲中文字幕网| 噜噜视频| 无码任你操| 夜夜夜夜做天天天做无码视频| 五月丁香av中文| 久久99免费视频网站| 久久综合激情| 人人摸人人摸| 一起草AV| 久久99网站| 九九热最新| av人人操| 79色色免费| 国产色色网站网址| 五月天开心成人网| 99热20| 久久五月丁香婷婷| 99久久精| 五月天婷婷小说| 狠狠色五月| 五月婷婷在线综合| 色情五月停停丁香| 色激情五月| 五月花亭亭| 伊人久久婷婷五月天激情四射| 亚洲五月天色| 天堂爱爱| 成人婷婷五月| 色五月丁香在线| 99色热综合| 伦99热| 欧美黑人巨大猛烈cuckold| 色五月婷婷 成人| 九九精品网站| 怡红院99| 天天干天天 亚洲| 激情婷婷五月天网址| 国产亚洲色婷婷99精品| 思思热99er在线视频| 丁香五月天婷婷在线视频| 成人在线精品| 梁铮版蜘蛛女在线观看| caopeng97日韩| 狠狠色狠狠色综合日日91| 五月天久久成人| 五月婷婷六月奇米网丁香| 综合六月激情婷婷| 丁香婷婷基地| 另类图片色五月| 可以直接看的av| 97人妻碰碰中文无码久热丝袜| 99精品无码| 狠狠插.com| 九九视频在线观看视频在线播放69| 九热视频在线伦| 激情宗合 激情宗合| 另类激情五月| 婷婷五月丁香高清无码| 五月婷婷综合久久| 婷婷的99视频网站| 超碰9799| 玖玖婷婷综合| 五月伊人视频在线看| 日日操,夜夜爽| 亚洲色五月婷婷| 大香蕉久久久久| 五月激情啪啪| 免费操超碰| 97人人超| 人人摸人人干人人做| 亚洲色五月| 五月天婷婷在线AN| 蜜臀综合久草| 超碰亚洲天堂| 精品国产va久久久| 天天爱天天操| 密臀av无码人妻精品| wWwCom夜操wwW| 亚洲性色XXXXX| 色噜噜五月天| 久久九九激情五月天| 六月丁香色色色| 色欲Av五月天| 丁香五月激情网| 国产做爰视频免费播放| 91干视频| 凹凸操Av| 在线另类| www九九| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 人人看人人草人人摸| 婷婷五月丁香综合激情| 碰99在线| 好好日激情五月天| 五月婷婷黄色| 日本大逼91| 亚洲激情图文小说| 婷婷五月电影院| 久草婷妨| 激情五月天之五月婷婷| 婷婷五月天AV| 任你操精品免费| 淫荡工a| 婷婷五月激情小说| 激情婷婷色色| 丁香五月欧美色综合| 五月激情丁香啪啪| 亚洲天天免费| 五月丁香综合| 亭亭色色五月天| 五月成人天| 97干干干丁香| 视频这里只有精品16| 亚洲1区| 久久视频婷婷| 激情小说婷婷| 五月婷婷色色网址| 天天日夜夜帕| 婷婷色综合网日韩国产| 亚洲综合色五月| 久草热8精品视频在线观看| 黄网网站在线播放| 丁香五月最新地址| 欧美啪啪9| 日本婷色| 婷婷六月视频| 色色五月天网站| 久久婷婷五月综合色丁香| 99日这里只有精品| 九月婷婷人人操人人舔人人爱| 婷婷五月天综合蜜桃| 婷婷色综合| 九九热这里只有精品23| 五月婷婷色五月| 亚洲欧美成人在线| 五月丁香在线| 五月六月激情婷婷| 无码激情AAAAA片-区区| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇| 99国产精品久久久久久久久久久| 涩涩涩婷婷| 搡BBBB搡BBB搡18| 678五月丁香亚洲综合| 亚洲综合五月天| 日韩无码一区二区三区四区| 亚洲乱码日产精品BD| ...婷婷国产成人亚洲日韩| 五月丁香六月激情| 丁香五月天五码婷婷| 日本www免费九九| 亚洲五月情| 色爱爱综合网| 久久伦乱| 激情综合五月激情XXXX| 五月婷婷色欲| 婷婷五月色播放| 91久久久久久久久久| 久久超级碰碰| 国产夫妻操逼内射视频| 内射丰满人妻| 97碰操| 超碰91人人操| 亚洲激情高潮| 51精品国内探花| 97色女人在线| 日操| 大香蕉啪啪啪啪啪啪| 久久大香蕉同僚| 人人草成人视频| 丁香狠狠干| 色五月婷婷一二| 四色永久成人网站| 日韩成人不卡| 婷婷操久久| 久久丁香五月婷婷激情综合网| 天海翼中文字幕高| 五月丁香大相交| 这里只有精品视频在线观看免费| 中文超碰视在线| 另类激情五月| 色噜综| 97色色婷婷五月天| 九九在线热九九在线热99热| 超碰日日操| 狠狠va| 六月色婷婷综合影视| 超碰在线99| 五月天电影网| 婷婷五月天AV网| 亚洲中文AV网站| 天天干天天日天天操| 99日这里只有精品| wWw色五月| 97久久超视频| 亚洲精品国产A久久久久久| 欧美性色视频| 99热777| 97色婷婷| 四月婷婷五月丁香| 精品日本视频444| 九九这里有精品| 色五月天综合网| 精品婷婷五月视| 色色狼人综合| 婷婷丁香五月天操逼| 激情五月综合| AAA久久| 婷婷五月天欧美| 99精品这里只有免费视频| 日本WWW九九九| 五月婷婷婷婷婷| 91精品久久久久久77777| 色婷婷激情视频| 色人久久| 日本三级韩三级99久久| 免费亚洲婷婷| 亚洲操b| 激情亚洲婷婷六月| 狠狠色婷婷7| 狠狠综合久久| 久久精品63| 五月天激情综合网| 热婷婷av| 4438全国最大视频成人网站在线观看| 日本色色色色色色色色一色二色| 丁香五月社区| 在线只有精品| 天天狠狠夜夜狠狠2023| 久久99婷婷| 97超碰在线免费观看| www天天色天天射| 色综合色色色色色| 综合网五月天123| 五月婷婷丁香伦理网| 99精品无码视频| 亚洲免费看片| www.色婷婷| 中文字幕在线不卡| 天天色天天搡| 美女天天久久| 久热这里只有精品在线观看| 婷婷丁香五月天色播网站| 国在线激情网| 九九精品片一| 狠狠色五月| 五月天婷婷青青草| 丁香婷婷婷五月| 婷婷瑟瑟五月天| 《蜘蛛女》梁铮1995| 天天爽夜夜爽夜夜爽精品视频| 色J香五月天| 九九热99热| 亚洲第一综合| 97中文在线| 天天色亚洲| 无码99| 狠狠精品干练久久久无码中文字幕 | 国产女生爱爱AA| avv在线| 人人97碰| 操笔无码| 这里只有精品9| 天天骑天天操| 亚洲AV免费在线| 五月丁香啪啪| ztEJj| 亚洲一级AV在线免费播放| 日韩在线视频网站| 综合在线网| 丁香五月,激情五月,深爱五月| www,天天干| 在线中文字幕视频| 人妻丰满精品一区二区A片| 婷婷的五月天另类视频| 丁香视频| 国产伊人五月天| 五月丁香婷婷激激激综合网色播| 日日操日日撸| 操91| 色爱爱综合网| 五月色婷| 丁香五月婷婷欧美成人色图| 大香蕉婷婷五月| 五月婷婷丁香| www.激情com| 777色婷婷爱五月| 特级片神马电影| 激情婷婷五月| 亚洲精品一二三| 国产操B视频| 丁香五月天婷婷久久| 色综合伊人网| 蜜臀AV在线观看| 狠狠爱婷婷丁香| 婷婷五日b| 激情九九六月激情免费视频| 超碰v| 91人操| 国际国外精品欧洲南美洲专区无码不卡| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 中文不卡一二三区| 婷婷五月综合网| 97色 五月天丁香| 任你草| 成人AV免费观看| 久久久香| 五月丁香啪啪综合| 国产成人精品亚洲线观看| 色婷婷久久视屏| 深爱五月中文字幕| 91爱啪啪| 五月天婷婷激情在线色图| 亚洲狠狠狠色婷婷综合激情久久久| 停停五月色宗合| 亚洲六月综合激情久久下卡| 丁香五月婷婷五月天在线| 天天干天天插| 五月丁香色色色| 情情五月天色| 另类小说色婷婷| 欧美在线97| 激情小说婷婷五月| www.wuyuetian啪啪| 亚洲国产色婷婷| 91丁香五月| 69精品无码一区二区三区| 久久九九99字幕| 另类天堂| 色色是色N一| 大香蕉精品视频| 激情图片婷婷丁香五月| 色色色图| 六月丁香啪| 五月丁香做爱视频| 3p九色在线| 色久五月| av大片在线| 五月婷婷co.m| 精品一二三区久久AAA片| 久月丁香爱婷婷综合| 色人久久| 狠狠色婷婷7777久| 香蕉久久国产AV一区二区| 碰碰女| 永久免费视频| 最新久久网址| 亚洲啪啪啪啪| 五月激情啪啪啪| 久久婷婷五月天懂色| 最新色色五月天| 婷婷丁香五月麻豆| 日韩成人综合网| 91久久婷婷| 日日爱678| 婷婷丁香六月| 天天综合色综合| 五月久久综合| 婷婷丁香人妻天天| 婷婷综合日本| 玖玖综合色| 婷婷五月天最新综合你懂的| AAA久久| 五月丁香六月婷婷免费| 日本操天堂| 天天摸天天日天天舔| 性爱五月婷| 激情噜噜噜| www色五月| 色五月综合| 涩五月丁香| 激情五月天婷婷色色色色色色色色色色色| 日本丁香五月| 国产亚洲在线观看| 国外亚洲成AV人片在线观看| 亚洲激情免费视频| 天天综合久久| 久久久久人妻| 色5月婷婷| 六月婷婷视频| 99精品网| 欧美成人精品老美女噜噜噜| 九艹在线| www.色婷婷.com| 狠狠色噜噜狠狠| 97色97干| 噼里啪啦在线观看免费完整版视频 | 天天爽天天摸| 性视频久久| 嫩BBB搡BBBB榛BBBB| 蜜桃五月天| 久久久大香蕉| 国产精品成人AV在线观看春天| 久热网在线视频| 另类激情五月| 成人网在线观看视频| 中文在线成人| 久一这里有精品国产| 丁香五月婷婷www..com| 9久精品视频| 亚洲中文乱字字幕线在永久| 999精品乱码77777| 成熟妇人A片免费看网站| 综合网五月| 五月六月丁香婷婷在线观看| 免费看成人747474九号视频在线观看| 婷婷综合网站| 无码99| 深爱五月天 开心网| 九九热99熟女| 狠狠婷婷色| 啊v视频在线观看| 激情综合六月| 99re这里只有精品9| 国产色香蕉精品五夜婷| www.99色| 另类激情五月| 五月网在线| 久热2025无码| 毛片新网地| 色婷婷亚洲综合网站| www.99热| 国产免费一区二区三区三州老师F1F1.CC | 狠狠综合久久综合| 性无码专区无码| 亚洲精品国产setv| 夜夜干天天干| 色综合久久天天综合网| 九九精品视频免费在线| 91在线观看www| 国产欧美日韩综合精品一区二区| 秋霞性爱AV| 26uuu日韩| 5月丁香六月婷婷| 99热热九九| 丁香六月婷婷开心| 六月婷婷香蕉| 五月婷久草| 美女久久婷婷| 亚洲国产无线乱码在线观看| 26UUU欧美| 91婷色| 六月婷婷五月丁香| 激情六月综合| 色色色国产| 亚洲狠狠操| 日在线V视频在线播放| 天天人人综合| www.99热| 丁香五月婷婷激情小说| 婷婷五月情| 8区视频在线| 色噜噜狠狠色综合网| 久久 无毛。| 夜夜AVV| 色婷婷四虎| 亚洲区在线| 色综合99无码| 久综合九综合99| 五月激情四射网站| 99五月香婷婷丁香在线视频| 人人色人人弄人人操| 亚洲国产精品VA在线看黑人| 欧美性色A片免费免费观看的| 日本三级大片| 五月天婷婷激情| 日本不卡高字幕在线2019| 无码日本精品XXXXXXXXX | 99欧美| 成人美女网| 免费无码毛片一区二区A片| 欧美内射AAAAAAXXXXX| 九九视频在线观看视频6| 俺去也五月| 婷婷五月激情欧美大胆视频| 久久综合五月情| 日韩操啪| 国产老熟妇亲子乱对白| 丁香六月啪| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 影音先锋女人av鲁色资源网小说免费 | 超碰狠狠色| 婷婷久久亚洲| 99热在线看片| 五月天综合在线| 成人做爰A片免费看网站找不到了| 最近中文字幕在线中文视频| 成人丁香婷婷| 成人啪啪色婷婷久| 日本啪啪天堂| 色色色在线免费视频| 丁香久久五月天视频在线观看 | 色五月色五天免费视频| 丁香九九九九| 婷婷激情五月综合| 亚洲第一成人AV| 97碰碰在线观看视频| 天天综合情| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 丁香五月天堂网AV| 草草视频91| 狠狠操狠狠狠| 色五月综合资源推荐| 热久精品| 婷婷丁香熟女| 婷婷色操| 五月丁香少妇A| 五月天婷婷在线播放| 大香蕉手机视频| 91精品国产综合久久久不卡电影| 99热99在线精品| 国产伦理精品高清在线观看网站一区二区 | 丁香五月婷婷狠狠色| 丁香色情五月综合网站| 成人网站免费在线播放| 2018国产大陆天天弄| www.五月婷| eeuus五月婷| 激情五月,激情综合网| 狠狠操综合| 日韩操啪| 亚州激情在线视频| 九九青草热| 免费看成人AA片无码视频吃奶| 婷婷五月色惰| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 久久丁香五月| 亭亭丁香97| 激情五月天婷婷久久久久久久久久久 | 开心六月婷| 骚。com| 久久人人看| 色婷婷影| 丁香五月婷婷成人网| 五月婷婷激情网| 久草婷妨| 亚洲色五月天是什么| 天天综合 99久久婷婷| 国产成人综合亚洲| 97色色色色| 99操免费视频| 天天干天天av天天射| 天天日天天插天天操| 久婷五月| 一区二区无码视频| 99热香港| 99热.com| 天堂爱啪啪| 99免费视频网| 激情五月婷婷| 天天想夜夜爽天天爽| 免费看欧美成人A片无码| 久9综合| 激情五月综合免费| 丁香六月激情综合| 久久婷婷成人| 五月天亚洲综合网| 超碰妻人人| 天天摸,天天爽| www.激情| 狠狠色婷婷7777久综合| 日本操逼九九九九58日本操逼| 色色99| 亚洲成人综合在线| 丁香九九九九| 色色综合激情| 亚洲五月色| 中文字幕丰满乱孑伦无码专区 | 色噜噜狠狠色综合成人99| 午夜在线成人网站免费观看| 深爱五月天天| 亚洲妇女熟BBW| 五月天婷婷色在线视频免费观看 | 色五月97| 久播影院免费观看电视剧大全最新网| 免费无码毛片一区二区A片| 国产激情综合五月| 色99在线视频| 草草视频91| 天天日夜夜拍| 97精品综合久久| 丁香婷婷五月综合色情| 色色九九五月天| 9久国产| 欧美在线97| 色婷另类| 99激情网| 婷婷综合五月天| 嫩草AV久久伊人妇女超级A| www.国产色| 婷婷欧美色| 九九这里只有精品| 99视频精品视频| 欧美性猛交XXXX乱大交极品| 五月激情综合激情五月| 五月网站| 五月天婷婷人妻| 激情婷婷五月社区| 播五月丁香三月婷婷| 丁香婷婷五月综合影院| 婷婷狠狠18禁久久| www.99在线| 五月综合激情婷婷六月色窝| 久久er九九| 久久综合66| 99热这里是精品| 久草a片| 色婷婷视频在线| 插插网爽妇五月丁香| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 婷婷中文综合网| 色五月五月婷婷| 天天久久狠狠色综合| 久久99久久99精品免视看婷婷| 婷婷激情五月天天天开心| 欧美性猛交99久久久久99按摩| 婷婷五月天色网久| 五月天丁香花婷婷| 大香蕉婷婷丁香视频在线| 久久婷婷五月天| 爱爱网址9| 天天日夜夜爽| 亚洲啪视频| 丰满人妻妇伦又伦精品国产| 综合久久五月天| 婷婷射图五月天| 九九热精品| 欧美丁香五月| 伊人婷婷大香蕉| 欧美搡BBBBB摔BBBBB| 婷婷五月丁香伊人| 西西4r午夜剧场| 五月婷婷啪啪网| 99热在线中文字幕| 亚洲AV第二区国产精品| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 天天搞夜夜叫| www色哟哟| 五月停亭六月,六月停亭的英语 | 五月天色影院| 亚洲一级色电影| 黄急一级视频| 97人人操在线| 五月花婷婷最新| 日韩色五月| 五月婷婷黄色网址| 97干视频在线| 激情五月丁香激情综合网| 久久伦乱| 色五月激情五月开心五月| 色噜噜狠狠插综合| 激情五月婷婷免费视频| 久久精品噜噜噜成人A∨色欲| 狠狠色婷婷| 五月婷婷激情视频| 婷婷激情综合无月| 丁香五月最新网址| 国产婷婷色综合AV蜜臀AV | 久久性操| 日本熟女内射| 97色色色视屏| 亚洲、欧美、国产另类笫二区| 国产真实乱了老女人视频| 丁香综合网| 亚洲久久激情| 久久激情视频99| 亚洲成人精品三区| 97在线观视频免费观看| 99性视频| nvrentiantang av| 婷婷之六月丁香| 深情六月婷婷综合久久| 男人的天堂97| 热久91| 97啪在线观看视频| 色婷婷丁香五月| 97资源碰碰| 九九精品热播| 九九99久久| 五月天久久www| 久久综合网免费视频| 久99视频| 亚洲成人av在线播放| 激情婷婷。| www.亚洲激情.com| 性一交一乱一交A片久| 天天干天天干天天干天天干天天干| 在线观看av网站| 少妇性按摩无码中文A片| 五月天激情.com| 免费试看小视频 99| 丁香五月婷婷动漫| 婷婷色色丁香五月天| 99精品综合在线| 91性交在线播放| 狠狠综合| 亚洲亚洲人成综合网络| 亚洲AV免费在线| AAA久久| 天天精品视频免费观看| 久久98| 五月婷婷之综合激情| 99热这里| 五月婷婷啪啪网| 日韩啪啪视频| 激情亚洲网| 丁香婷婷大香蕉| 久久婷五月天| 涩涩五月天| 久久怕怕视频| 1000部毛片A片免费观看| 日本精品久久久久中文字幕| 色婷婷成人做爰A片免费看网站| 另类小说色婷婷| 99操| 五月丁香花成人社区| 99精品视频在线观看| 天天成人综合| 丁香花五月天激情| 五月婷婷乱| 久色国产| 99视频在线精品| 情色五月天网站| 香蕉国产2013| 色色色色网站| 人妻体体内射精一区二区| 国产黄色在线观看| 夜色五月天| 久久五月情| 五月丁香六月婷婷久久肏| 国产综合81p| 久久99精品视频| 激情婷婷丁香五月天小说| 婷婷五月天六月综合| 丁香五月亚洲综合| 夜夜谢天天干| 久久人妻伊人| 五月精品免费XXX| 婷婷天天婷婷天天澡| 三级三久久线久久99久目本WW| 婷婷丁香色五月| 婷婷综合激情| 婷婷天天五月天| AV网站免费在线| 欧美日韩91| 激情综合网,五月| 久久婷婷五月天蜜桃| 99热全是精品| 婷婷五月丁香激情图片 | 黄色毛片精品| 九月丁香| 婷婷色香六月综合激情| 五月婷婷婷婷网| 99黄色性生活| 最新无毒无码AV| 熟女国产在线一区二区三区四区| 成人短视频在线| 天天插天天干天天舔| 五月天丁香成人| 天天操天天插| 国产三级在线播放| 亚洲区,视频区,视频区免费| 色五月之第四色| 久99热| 99久在线精品99re8| 真实的国产乱XXXX在线91| 密乳Va| 欧美婷婷五月激情| 丁香久久五月婷综合| 亚洲精品白浆高清久久久久久| 婷婷五月天首页激情| 97成人丁香婷婷| 五月婷婷五月丁香| 香蕉AV777XXX色综合一区| 99热99思午夜精品| 亚洲综合在线播放| 2w在线视频| 深爱激情五月网| 热久久婷婷| 午夜性爱影视一区77| 五月天播播中文字幕| 激情AV网| 99久.| 噜噜网免费视频| 婷婷五月天福利| 五月婷婷人人人操| 包操45分钟网站| 99人妻碰碰碰久久久久视| 免费看成人AA片无码视频吃奶| 先锋五月婷婷丁香草草| 丁香五月婷婷成人网| 91色久| 丁香婷婷五月人体| 99热99这里有免费的精品| 久久怕怕视频| aaa9区免费在线观看| 日日天天操| www.激情| 久久98| 五月丁香激情综合网| 96丁香婷婷九月蜜桃综合久久| 色啪网| 婷婷欧美综合| 人妻视频一区而且二区| 激情的五月| 久久伊人大香蕉| www.久久爱.com| 婷婷免费无视频| 亚洲中文字幕在线观看| 九九色综合| 久9热视频| 97五月天婷婷综合激情网| 影音先锋人妻出差| 九九亚洲天堂| 欧美激情五月天婷婷| 日韩成人精品中文字幕| 99丁香五月婷婷在线| 怡红院视频| 国产欧美大香蕉一区| 五月天婷爱综合| 久热这里只有精品6| 99操| 99热首页| 亚洲永久免费| 99ri国产| 毛片新网地| 99久在线精品| 亚洲第一黄网| 丁香婷婷六月天| 91狼友视频网页更新| 五月久久丁香| 亚洲天堂制| 婷婷五月久久| 久久婷婷九月国产精品| 色婷婷激情小说网| 在线观看免费观看在线9久| 六月丁香五月激情婷婷| 日日夜夜天天|