久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码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)目的開(kāi)發(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)聽(tīng)、資源動(dòng)態(tài)加載、獨(dú)立子游戲熱更新、性能優(yōu)化與打包發(fā)布等關(guān)鍵環(huán)節(jié)目錄按大廳、子游戲及工具模塊劃分配合Readme閱讀可更清晰理解整包集成與獨(dú)立更新兩種模式的區(qū)別。適合希望從零搭建或重構(gòu)多游戲整合框架的Cocos Creator開(kāi)發(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)景越來(lái)越重首屏冷啟動(dòng)越來(lái)越慢任何一個(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)的開(kāi)發(fā)者看。2. 架構(gòu)選型為什么“大廳 子項(xiàng)目”不是把多個(gè)項(xiàng)目硬塞進(jìn)一個(gè)包2.1 Asset Bundle 是整合的基石先搞清它是誰(shuí)Asset Bundle 是 CocosCreator 做資源按需加載的單元。每個(gè) Bundle 在被構(gòu)建后會(huì)生成獨(dú)立的資源清單和配置運(yùn)行時(shí)通過(guò)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ì)引入加載順序依賴非常容易踩到“資源找不到”的問(wèn)題。對(duì)于“大廳 子游戲”這種常見(jiàn)玩法我習(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è)表來(lái)看對(duì)比維度整包集成大廳 子游戲 Bundle首包體積會(huì)隨子游戲數(shù)量線性增大首包只包含大廳公共部分首次加載冷屏要等全部資源只等大廳子游戲進(jìn)入時(shí)再加載發(fā)版效率改個(gè)子游戲也要全量發(fā)版子游戲 Bundle 可以獨(dú)立更新內(nèi)存壓力所有子場(chǎng)景資源常駐退出子游戲時(shí)手動(dòng)釋放工程復(fù)雜度低需要處理加載順序和生命周期結(jié)論很直接如果只是兩三個(gè)休閑玩法的教學(xué) demo整包來(lái)得省心但只要有“多個(gè)子項(xiàng)目后續(xù)還會(huì)繼續(xù)加”的情況建議首次就把 Bundle 架構(gòu)立起來(lái)。項(xiàng)目整合越晚做拆分成本越高。我見(jiàn)過(guò)很多團(tuán)隊(duì)一開(kāi)始用整包頂著后來(lái)游戲多了想改大廳子游戲架構(gòu)結(jié)果要?jiǎng)铀袌?chǎng)景引用關(guān)系幾乎沒(méi)有后悔藥。等架構(gòu)定了我們?cè)賮?lái)看 demo 怎么落地。實(shí)際跑代碼之前先把幾種加載模式區(qū)分開(kāi)大廳直接通過(guò)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)三塊東西不要混在我寫代碼前先把工程分層擺出來(lái)。假設(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)建配置里可以分開(kāi)勾選。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)出來(lái)后掛到大廳 Node 的父節(jié)點(diǎn)下這樣預(yù)制體內(nèi)部的start會(huì)被觸發(fā)。按鈕的click事件綁定時(shí)傳入兩個(gè)字符串參數(shù)比如(subgame1, prefab/SubGame1)。參數(shù)說(shuō)明loadBundle的bundleName必須和構(gòu)建 Bundle 時(shí)的名字一致默認(rèn)是文件夾名prefabPath是相對(duì) Bundle 的路徑不包含assets/前綴。bundle.get只適合 Bundle 已經(jīng)確認(rèn)加載完的情況如果加載過(guò)程還沒(méi)結(jié)束get拿不到資源所以更穩(wěn)妥的是用bundle.load。示例里沒(méi)有做加載失敗重試實(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)景樹(shù)上的節(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ì)方的組件引用來(lái)調(diào)用方法否則會(huì)形成強(qiáng)耦合。常見(jiàn)做法是掛一個(gè)全局事件總線。子游戲要向大廳匯報(bào)分?jǐn)?shù)發(fā)出事件大廳監(jiān)聽(tīng)事件并更新 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ù)也沒(méi)有平臺(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)部通過(guò)這個(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)這沒(méi)問(wèn)題。問(wèn)題在別處子游戲里的定時(shí)器、Tween、網(wǎng)絡(luò)輪詢、全局事件監(jiān)聽(tīng)稍微不干凈就會(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(() { // 子游戲自己的開(kāi)機(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)器統(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。有些開(kāi)發(fā)者覺(jué)得子游戲節(jié)點(diǎn)銷毀了定時(shí)器就會(huì)自動(dòng)消失但實(shí)際不是這樣——定時(shí)器是全局的和節(jié)點(diǎn)生命周期沒(méi)有綁定。跑一次進(jìn)入退出循環(huán)如果你在 Console 里看到節(jié)點(diǎn)無(wú)法釋放或內(nèi)存增長(zhǎng)先檢查定時(shí)器。4.3 退出子游戲時(shí)清掉 Bundle 里的資源緩存但要小心公共資源恭喜你到了項(xiàng)目整合里最容易出對(duì)錯(cuò)的一個(gè)點(diǎn)。assetManager.loadBundle把 Bundle 加載進(jìn)來(lái)之后它會(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); } }這行代碼寫起來(lái)很爽跑起來(lái)如果你沒(méi)有公共資源引用也沒(méi)問(wèn)題。萬(wàn)一你遇到了子游戲退出后公共 UI 丟貼圖就是它干的。真遇到那種情況把releaseAll改成只釋放部分資源或者在關(guān)閉子游戲時(shí)暫時(shí)不removeBundle把它留在內(nèi)存里供下一次快速進(jìn)入。這個(gè)權(quán)衡需要結(jié)合你子游戲的數(shù)量和內(nèi)存預(yù)算不是越傾向釋放越好。5. 項(xiàng)目整合避坑這5個(gè)問(wèn)題我踩過(guò)你最好提前知道5.1 加載了子游戲 Prefab但屏幕還是空的現(xiàn)象進(jìn)入大廳點(diǎn)擊按鈕控制臺(tái)沒(mé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)下面看起來(lái)就是“沒(méi)出來(lái)”。解決先在大廳代碼里給當(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ì)的多打開(kāi)構(gòu)建產(chǎn)物也沒(méi)見(jià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)格檢查跨包引用。建議在子游戲開(kāi)發(fā)階段就約定大廳腳本只通過(guò) Bundle 加載子游戲所有子游戲內(nèi)部資源都不要在編輯器中拖拽到大廳預(yù)制體的屬性上。如果發(fā)現(xiàn)某個(gè) SpriteFrame 被大廳的管理器引用到了把引用改成運(yùn)行時(shí)通過(guò) Bundle 加載或者把該資源轉(zhuǎn)移到公共 Bundle。這個(gè)坑沒(méi)有構(gòu)建報(bào)錯(cuò)只有靠資源管理器的“依賴圖表”來(lái)查。5.3 子游戲onLoad被調(diào)用兩次或者沒(méi)調(diào)用現(xiàn)象在子游戲腳本里打console.log(load)第一次進(jìn)入打了兩遍退出再進(jìn)又不打了或者反過(guò)來(lái)第二次進(jìn)入后子游戲的start一直不觸發(fā)。原因很多是加載姿勢(shì)不對(duì)。我們用bundle.load拿到同一個(gè) Prefab 再instantiate每次 instantiate 出來(lái)的新節(jié)點(diǎn)都會(huì)跑onLoad但如果節(jié)點(diǎn)沒(méi)有 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)象從子游戲回到大廳大廳原本的排行榜、頭像或彈窗不見(jiàn)了或者坐標(biāo)整體偏移。原因子游戲 Prefab 通常是全屏的會(huì)蓋在大廳 UI 上面這沒(méi)問(wèn)題。問(wèn)題出在進(jìn)入子游戲前你手動(dòng)修改過(guò)大廳主 UI 節(jié)點(diǎn)的active或?qū)蛹?jí)退出時(shí)沒(méi)有恢復(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)建出來(lái)的版本在真機(jī)上點(diǎn)擊入口回調(diào)函數(shù)能執(zhí)行但err非空錯(cuò)誤碼 2048或者提示Bundle not found編輯器里跑卻正常。原因CocosCreator 的 Bundle 尋址依賴構(gòu)建后的配置。代碼里assetManager.loadBundle(subgame1)的名字需要和構(gòu)建面板里的 Bundle 名稱一致大小寫也必須一致。如果沒(méi)在構(gòu)建配置里把該文件夾勾選為“Bundle”或者構(gòu)建時(shí)沒(méi)勾選對(duì)應(yīng)平臺(tái)都會(huì)導(dǎo)致運(yùn)行時(shí)找不到。解決打開(kāi)構(gòu)建面板展開(kāi)“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)階技巧給大廳到子游戲的加載過(guò)程加進(jìn)度和預(yù)取進(jìn)入子游戲如果全都是動(dòng)態(tài)加載真機(jī)從磁盤讀 Bundle 時(shí)用戶會(huì)看到大廳按鈕點(diǎn)擊后卡一兩秒體驗(yàn)很差。我最后的建議是把大加載過(guò)程拆成“進(jìn)度條 預(yù)取”兩步。先做一個(gè)簡(jiǎn)單加載面板彈出后開(kāi)始加載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)沒(méi)有進(jìn)度。要顯示進(jìn)度可以在loadBundle的 options 里帶onProgressassetManager.loadBundle(bundleName, { onProgress: (current: number, total: number) { this.progress.string 加載子游戲 ${Math.floor(current / total * 100)}%; } }, (err, bundle) { ... });不過(guò)要注意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ì)通過(guò)它觀察整包內(nèi)存分配。說(shuō)個(gè)我自己的習(xí)慣每次新增子游戲時(shí)都要反復(fù)確認(rèn)“大廳入口、加載路徑、退出清理”三件事能不能在 3 步內(nèi) trace 通。trace 不通就說(shuō)明邊界設(shè)計(jì)有問(wèn)題真正多子游戲上線出問(wèn)題的往往不是加載邏輯而是狀態(tài)殘留。項(xiàng)目整合做的是工程結(jié)構(gòu)長(zhǎng)期賬別圖一時(shí)方便而放棄結(jié)構(gòu)上的清晰邊界。希望這個(gè)筆記對(duì)你的 CocosCreator 大廳子游戲 demo 有些幫助踩過(guò)的坑你已經(jīng)提前知道了。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天看夜夜看日日干| 天天综合色| 青青草一区二区三区四| 九九精品美女高溯喷水 | 91美女国产在线| 国产伦精品一区二区三区在线观| 日本免费专区| 大香蕉视频一二三区| 日韩欧美性爱电影在线观看| 色图综合网| 天天视频黄| 在线国产福利网址导航| 亚洲国产麻豆一区二区三区| 亚洲激情久久| 一区二区不卡| 网友自拍第1页| 亚洲精品久久久久毛片A片拉屎 | 人妻丝袜二区| 欧美性性性| 高清国产无码av| 91爆操视频| 中文字幕在线观看第二页| 久啪视频| 熟女网站最新| 中国小夫妻勾搭露脸淫荡对白| 青青在线视频日韩欧美| 天天日少妇逼AV| 亚洲凸凹超碰成人| 热久久无毒不卡| 麻豆一区二区三区在线看| 久操网视频| 清纯唯美亚洲综合| 国产区在线| 色爱综合网欧美| 亚洲欧洲日韩中文字幕一区| 熟妇xxxxx性春色| 加勒比久久综合网高清| 婷婷色网| 国产精品乱码久久久久久久| 亲子敌伦对白在线播放| 播播亚洲小说亚洲| 青青草视频久久久久| 欧美熟妇精品黑人巨大91| 强奸乱伦资源| 日韩欧美~中文字| 在线人人人人人人精品超| 伊人丝袜美腿高跟在线观看高清| 久久系列| 伊人久久青青草| 不卡在线观看视频| 欧美黑人性猛交91| 国产乱伦搜索结果91P| 人人人人人人少妇| 中文字幕精品探花视频| 久久婷婷国产一区二区色| 先锋色眉乱伦资源| 免费看黄视频亚洲网站| 九久9热| 欧美激情综合| 无码 黑人一区二区三区| 国产精品久久久久久高清无码免费看| 一区二区三区男女操逼黄色小电影| 天天综合网网欲色| 国产精品自产拍在线观看社区| 激情小说五月天| 亚洲精品九九九九九九| 男人的天堂不卡一区二区| 欧美91变态| yazhousetuoumei| 操婢日韩| 天天综合色图| 色制服丝袜夫妻av一区| 99无码视频| 啪啪啪东京| www.人人摸在线视频| 青青青国产| 日韩午夜精品一区二区三区电影| 91久久婷婷| 亚洲第91页| 九九热精品在线| 秋霞成人做爱| 日韩性爱一级片| 免费A V在线| 亚洲 欧美都市激情| 亚洲色狠| 大香蕉综合| 日本影视久久免费| 亚欧色图在线激情| 欧美色图91| 97极品无码| 老熟妇一区二区三区…| 爱射综合| 蜜臀99久久精品久久久久久| 日本韩国国产精品一区| 97舔舔| 天天综合麻豆视频| 国产精品干干干| 99热伊人| 超碰到97情色| 日韩图区 偷拍| 日韩二级| 日本不卡五区| 久操大香蕉手机视频在线看| 中文字幕一区二区无码成人 | 日日摸日日碰| 淫穴高潮色图| 99久久精品国产高潮| 九九英色视频| 欧美午夜视频免费观看| 日韩天天本| 超碰97人妻免费在线| 色玖玖| 蜜臀在线看片| 操美女高潮抽搐白浆| 久久亚州高清| 国产日韩精品无码去免费专区国产| 色99在线| 午夜性刺激视频免费观看| 色爱国产| 超碰美国| 国产精品乱人伊人网| 97伊人超碰| 欧亚在线视频| 亚洲第一页色网| 成人黑料社久久| 欧美九一精品久久久熟妇| 国产免a费看黄片在线| 欧美超碰96| 最新日本中文字幕| 久偷拍欧美日韩三区| 天天激情综合站| 一本正道久久熟女| 亚洲高清无毛一区二区| 久久精品视| 人摸人人操人| 啊视频在线| 久久精品人妻一区二区三区| 99热在线播放| 中文字幕日韩电影人妻| 激情久久日韩精品中文字幕麻豆| 东京热免费视频| 天堂性色| 日日黄色三级网站| 99热精品在线| 粉嫩av久久一区二区三区| 国产精品久久久久久久久久久久久久久久 | 91精品又粗又猛又爽| α√在线| 欧美一级在线观看成人| 精品久久大胆人体| 六月丁丁香| 尤物网站91| 91人妻久久久久久久久久久久久| 99只有精品| 夜夜操美女| 超碰在97| 天天肏美女| 探花一区二区三| 91亚洲黄色网| 麻豆黄四叶草网站| 欧美特大黄一级片片免费| 欧洲精品一级二级精品综合视频综合 | 国产不卡中文字幕免费avi| 亚洲成人福利电影免费| av亚欧| 97超碰久久色| 精品一区二区三区四区女| 香蕉免费一区二区三区不读| 婷婷五月综合在线| 日韩综合成人免费视频| 操久久久久| 亚洲AO在线| 色色色色综合网| 国产精品一区二区久久精品| 欧美天天干| 久神马| 色欧美天天| 亚洲av影音先锋| 国产在线播放成人免费| 999精品女人| 久久99草| 国产精品69久久久久久久| 熟女丝袜视频| 天天射影院| 18禁免费视频| 国产91av在线播放| 97免费在线| 五月天AV资源| 九九九九9999| 欧美色网络| 91久久久久| 伊人国产视频| 一区中文字幕二区日韩| 久久精品人体| 九月丁香| 极品色社| 色妹子A V| 高清无码网址| 欧美色五月| 久久久久国产精品片区无码直播| 日本激情免费大片| 日本97久久久精品| 日本一片一区| 婷婷15月天青娱乐| 国产久久久久影院老熟女| 殴洲老熟女| 1204av韩国| 台湾肥佬网一区二区三区| 欧美日韩性感| 国产欧美一区二区| 久久水蜜臀亚洲AV无码精品| 97超碰热线| 超碰 另类 欧美 | 78综合网| 自拍盗摄一区| 双插在线| 东京热91| 天天综合欧美| 翔田千里Av在线| 国产对白刺激视频| 色噜噜精品一区二区三| 3p国产色噜噜一区| 深爱五月婷婷| 日韩在线人妻网站| 97丝袜亚洲在线播放| 十八禁一区二区无码观看| 久久妇| 久久中文字幕在线观看| 国产极品馒头逼| 亚洲精品国产精品成人| 国产高清MV操逼视频| 99热99色| 九九久久首页| 蜜乳av一区二区三区| 天天日天天干天天摸天天操| 92久久| 亚洲欧洲av影音| 久久精品高清AV| 国产精品久久久久久 百度| 欧美在线观看综合国产| 久久久久成人蜜桃精品| 大香蕉欧美伊| 少妇高潮一区二区三区在线| 天天上日日上日韩精品| 久久精品国产亚洲AV无码电影| 国产成人综合网| 大香蕉免| 蜜桃天美传媒AV一区二区三区| 亚洲日韩美女丝袜美腿人妻视频| 在线观看高清AV| 国产AV超爽| 天天操av懂色| 亚洲玖玖爱| 久久精品一区二区一8| 啪啪视频亚洲第一| 日本三级韩国三级99| 800zy一区二区| 无码操逼天堂| 男女日B国产| 亚洲成av人片色午夜乱码| 日本青青草在线| 亚洲综合大片| 囯戸精品高潮呻吟旡码| 大奶啊啊好爽 | 亚洲最大无码中文字幕网站| 色婷婷综合久久久久中文一区二区| 天天躁狠狠躁av| 秋霞 色色| 激情四射五月天| 四虎免费看黄| 尤物网站91| 欧美性爱一级操| 69人妻人人揉人人躁人人精品| 超碰精品人妻狠狠干| 思思久热在线精品66| 中文字幕av乱伦| 欧美大战久久久伊人| 懂色aV一区二区天美传媒| 天天做天天爱| 97超碰精品图片| 黄色性爱网网| 成人精品久久| 色播五月丁香| 91亚洲情色| 熟女突然公开看18禁影片| 2019天天操天天爽天天拍| 97干在线视频| 志村玲子视频一区二区| 91超碰在线| www.丁香五月| 97久操| 久久精品店| 婷婷操逼| 欧美日韩国内不卡| 97久久久久久久精| 一本精品日本在线视频精品| 久艹伊人精品综合在线| 亚洲无码精品AV久久久| 淫淫总合网| 色香天天| 丝袜内射| 吖在线不卡一区二区国产剧情| 91伊人大香蕉| 日韩精品 视频一区二区| 欧美亚州色的图| 盗摄女人妻在线| 破处bbq| 日本 欧美 国产一区| 性色高清..……| 天天肏夜夜肏| 亚洲天堂男人的天堂| 亚洲色图久久成人| 亚洲另类小说卡通动漫| 啊嗯嗯啊好大好爽| 91狠狠综合久久久久久| 欧美综合另类| 色欲人妻一区二区在线| 日日夜夜狠狠| 国产在线视频午夜精华在| 大香蕉免| 一级特级aaaa毛片免费观看| 91欧美亚洲| 嗯嗯啊啊好疼| 无遮挡猛进视频免费无限观看| 粉嫩AV一区二区夜夜| 亚洲综合888| 国产高清26uuu| 亚洲色婷婷综合久久久久中文| 欧美性爱97超碰| 在线岛| 丝袜视频网国产90| 亚洲限制级在线| 久久久国产亚洲精品系列| 欧美一区二区| 国模久久在线| 日日天天久久啊啊aaa| 综合五月婷婷亚洲一区| 少妇久久久久久| 亚洲天堂日本| 久久久9品一区二区三区| 无码国产Av| 97碰碰色| 插入粉嫩少妇视频| 熟女中出视频| 国产精品一二三免费网站| 成人97人人超碰人人| 国产精品农村妇女精品| 亚洲AV不卡在线观看尤物| 中文字幕在线观看丝袜| 秋霞曰韩R级| 成人无遮挡毛片免费看| 国产午夜在线观看| 97爱亚洲| 東南亚性呦成人伦理资源在线视频| 91麻豆天美国产| 成功精品影院| 五月婷婷色色| 午夜理论片在线观看免费| 亚洲无码国产探花在线观看| 91人妻人人澡人人爽人人精品| 伊人久久蜜月| 午夜精品久久久久| 欧美性后入| 小少妇| 日本99久久| 91三级理论片播放器| 人妻无一区二区三区| 亚洲日韩美女丝袜美腿人妻视频| 好一吊区二区| 超碰九九| 爱丝福利| 婷婷丁香人妻 | 日韩97P| 中文字幕一区二区无码成人| 天天操福利视频综合网站| 亚洲激情天堂网| 97色诱| 蜜臀AV成人精品蜜臀AV久久| 国产精品九9| 看看小穴| 老熟女91av| 中文啪啪视频| 亚洲免费精品一区| 啊啊啊好舒服好爽啊啊啊视频| 亚洲精品819| 色呦呦、国产精品| 青青草视频导航官网| 久久超碰亚洲人| 91在线限制级| 亚洲色图91欧美日韩| 狠狠操狠狠爱| 久操九九九九| 大香蕉AV丝袜| 安徽熟妇视频| 亚洲精品白丝| 97在线/亚洲| 亚洲高清91| 91麻豆天美传媒在线| 91综合中文字幕| 欧美国产精品久久九九| 福利操逼| 综合啪啪| 亚洲人在线| 亚洲凸凹超碰成人| 另类欧美综合| 成人一道本免费视频| 岛国片在线播放| 免费簧片在线观看| 成人欧美一区二区三区黑人一| 综合色图亚洲欧美| 内射黑丝袜| 天天操福利视频综合网站| 密臀在线视频| 久久av无码| 久久一区二区三区入口| 久热色情精品| 蜜桃狠狠色伊人亚洲综合 | 亚洲制服欧美另类内射| 成人日韩欧美| 又黄又粗又硬又长又大| 日韩欧美~中文字| 96久久久| 人人操人人摸人| 色色99| 熟女一区二区| 天天操福利视频综合网站| 992视频一区| 中文AV制服乱伦| 亚洲一欧洲中文字幕在线| 影音先锋国产精品| 日韩人妻无码精品系列| 99草精| 亚洲人体视频在线观看| 亚洲欧美国产日本一区二区三区| 精品人妻1237| 欧美激情 亚洲色图| 欧美黑人性猛交91| 欧美亚洲厕所精品偷拍91 | 亚洲无码色| 91l欧美在线| 国产又粗又长视频| 看黄片视频免费| 玖玖97综合 | 欧美熟妇色| 74成人在线| 中文字幕成人| 伊人少妇久久久| 日本操逼视频在线| 亚洲色婷婷| 欧美亚洲综合999| 午夜舔阴达高潮视频免费看| 色五月激情网| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 后入精品| 日操粉逼逼| 久久国99999| 国产区日韩区在线观看| 精品四五区| 手机在线大香蕉| 女人午夜视频777| 中国的操老妇女| 日本熟女免费視颖| 伊人 俄罗斯 a v| 人妻无一区二区三区| 天天综合日韩网| 久久久91| 久久欧美按摩999| 91综合熟女| 亚洲色吧网| 亚洲AV无码乱码| 91狠| 99久久精品国产系列| 中文啪啪视频| 色综合一本| 黄色高清久久无码依人| 国产精品白丝在线播放| 九九九影院| 美国人人操人人操| 天天搞欧美| 91狠狠综合久久| AV女优男人的天堂| 国产精品青青草| 国产操逼网站亚洲一级黄色| 少妇500双飞99| 国内精品久久人妻性色av| 久久久久ab| 日韩乱中文| 91精品国| 日韩素人无码一区二区三区三州| 视频一区二区免费在线| 91天射| 被体育老师抱着c到高潮| 97chaopenrihan| 三级三级三级日本99| 91青青草| 一区二区三区色综合| 日韩不卡av一二三| 欧洲精品一级二级精品综合视频综合 | 999久久久九| 又大又长又粗又爽又黄| 色亚洲欧美| 久久久噜噜噜久久久| 亚洲无码成人精品| 大色网久久| 久热久一区二区三区| 天天操夜夜操狠很操| 精久久久| 玖玖蜜臀资源网| 破苞ⅩXXX性无码动漫无码| 久草这里只有精品| 亚洲国内精品成人不卡| 日韩精品 资源| 日本一区视频在线观看| 久久αⅴ| 麻豆区久久久久亚| 99综合自拍| 婷婷久久五月| 国产A v无码专区| 亚洲91色| 欧美春色| 4虎在线视频| 婷婷三区| renqi久久久久久久久久久久| 欧美日韩不卡a片| 91久久青青草原精品| 色香综合天天影视综合 | 久久久人妻| 亚洲中文日韩欧美大香蕉视频| 粉嫩av一区二区三区天美传媒 | 日日操免费视频| 久久久久久久久久久久97| 亚洲天堂人人妻| 日韩美脚一区二区网站| 久久99久久99久久99人受| 国产精品点击进入在线影院| 网友自拍第一页| 婷婷性网| 久操免费视频| 大香蕉2017| 欧美传媒一区| 九九九九九九视频| 狠狠夜色午夜久久综合在线| 天天干一区二区| 99热这里只有精品8| 亚洲精品乱码久久久久久蜜桃麻豆 | 色婷婷色99国产综合精品| 日本免费中文字幕在线| 岛国福利在线精品播放| 国产精品免费1区2区视频| 超碰色综合| 欧美精品黑人猛交高潮| 嗯嗯不要 视频| 欧美肥臀在线| 国产精品一区二区麻豆| 麻豆色约约| 日日日日做夜夜夜夜做无码97| 国产久久一区二区| 97超碰超欧美。| 91爱看| 色香伊人| 久久人体一区二区| 密臀国产在线| 久久老熟女| 天天综合青苹果| 啊啊啊啊啊啊在线| 少妇被c 黄 免费观看| 激情五月天中文字幕色| 久久久久久亚洲Av无码精| 亚洲国产精品成人综合| 国产一区二区三区白丝| 无码天天操| 久久亚洲AV成人精品无码| 黄色区免费观看中文字幕| 国产亚洲禁久一区二区| av九九| 久久久久久中文字幕中文字幕最新| 九九精品美女高溯喷水| 亚洲第一色页夜| 欧美一品道| 久久久啊啊啊| 亚洲天堂欧美| 伊人久久在线视频观看| 熟女突然公开看18禁影片| 色五月综合网| 天色综合网| 97天天插| 试看60秒 爽| 蜜乳av一区二区| 91|九色|国产熟女| 亚洲欧美九九九| 国产AV人人夜夜澡人人爽麻豆| 青女偷拍网| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 五月婷婷丁香六月丁香| 深田咏美亚洲精品福利社| 91色碰| 亚洲天堂资源| 少妇被c 黄 免费观看| 自拍视频一区在线观看| 亚洲,欧美,春色,另类| 青青草大香蕉在线视频| 2017,超碰| 欧美一区二区日韩三区| a久久| 国产精品第二页| 狠狠爱夜夜| 色狠狠 - 百度| 91 手机在线播放 绯色| 人妻天天爽夜夜爽2| 久久久久国产精品久久久| 亚洲AV无码AV吞精久久久久| 99国产精品人妻人伦| 人妻熟女一区二区| 国产丝袜欧美在线视频| 丁香五月社区| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 后入式在线免费观看60秒| 日本在线伊人啪啪| 久久久久久久亚洲Av无码| 美国美女AV在线| 亚洲双插| 久干9操| 啊啊啊啊啊啊好湿好爽视频| 天天噜| 人人扣人人操| 另类成人首页一区| 老熟妇一区二区三区…| 日本A级视频| 色吧 综合| 色色热| 亚洲人妻色图| 丁香九月激情啪| 国产精品3| 久久av一级av少妇av高潮| 欧洲中文字幕| 百度百度日本操逼| 97资源超碰| 78久久| 中文字幕在线24| 亚洲无码一区成人免费午夜| 日本午夜福利影院| 影音资源男人日韩| 婷婷亚洲五月***久久| 日本熟妇色熟妇在线视频播放| 国产强奸乱伦xd| 1204av韩国| 国产日韩欧美操逼视频| 欧美久久婷婷| 欧亚成人| 爱丝福利| 五月天婷婷小说| 91色婷婷综合久久中文字幕二区| 天天做天天爽| 欧美 亚洲 在线| 三级三级三级日本99| 欧在线一二区| 欧美激情亚洲色图| 色综合V| 亚洲第91页 | 伊人四虎综合| 九九色精品| 欧州91高潮| 亚洲男人的天堂一区二区| 免费人成毛片乱码| 啊啊啊啊操死我了| 天天色综亚洲91污| 色路综合| 久久久不能久久久久| 大香蕉视频一二三区| 免费亚洲国产精品久久一区| 8050午夜少妇无码| 777超碰| 久操 高清| 丝袜熟女一区二区三区| 天天干18禁| 久久av网| 日韩另类| 黑人精品XXX一区一二区| 免费亚洲国产精品久久一区| 91超碰人人操| 日本一区二区三区免费观看| 影音资源男人日韩| 内射日韩大臀美女| 中文字幕一区电影在线观看| 九九九成人| 久久一区,青青青青草视频在线播放| 中日亚韩免费视频| 蜜臀Av一区二区三区| 97在线国产精品| 亚洲日韩美国人妻| 欧美爱爱97| 久湿久久| 日日夜夜骚| 久久久成人国产精品无码| 欧美一级A一级a爱片久久| 激情五月天校园春色网| 国产欧美日韩女同性恋ww喷水精品| A 在线网址| 色综合91好| 高清不卡 中文 人妻| 久久天天摸| 熟女突然公开看18禁影片| 中国熟女老妇仑乱一区二区三区| 台湾佬中文娱乐网久久久久久久久久com| 性爱动态120秒| 3D污黄视频在线观看| 91春色| 婷婷性网| 蜜桃臀一区二区三区久久| 夜夜高潮夜夜爽| 99热这里都是精品| 中文字幕免费看大片| 伊人五月天婷婷| 亚洲自拍97| 久久久三区二区一区| AV在线资源| 九久久九精品视频| 一区二区你上我| 亚洲欧美日韩夜夜| 萌白酱自拍视频| 欧美一级美片在线观看免费| 91综合熟女| 青青操日韩| 黑人粗大V S日韩女优视频| 97久久精品国产| 国产不卡精品91| 久久女人一区二区三区| 国产AV高清AV无码| 人看人人摸人人操| 亚洲av影音先锋| 欧美日产国产在线成人第一区| 国产无码久久高清| 国产成年女黄特黄| 日韩一级欧美一级国产一级台湾| 99中文字幕| 日韩一二三区| 又大又大又大又粗爽高潮观看| 亚洲交性| 97超碰人妻| 欧美亚洲天堂| 精品国模无码| 伊人一区二区在线播放| CCYY草草影院地址入口| 国产午夜福利专区综合| 天天上日日上日韩精品| 中文字幕美女91| 久久黄片国产一区二区| 欧美性爱91| 日韩无码黄色片| 日韩人成网站在线播放| 亚洲中文字母在线播放| 色婷五月| 欧美少妇大量自拍视频在线观看| 蜜色网色哟哟| 美骚妇av高清在线| 精品无码一区二区人妻久久蜜桃| 舔舔啊| 久久久久久久久一区二区三区| 青青草好吊色| 囯产精品久久久久久久久久梁医生| 操屄日韩| 成人免费福利在线观看| 韩国黄色片精品久久久| 夜夜爽爽爽| 97这里都是精品| 熟妇高潮精品一区二区三区下载| 91熟女视频网| 91精品国产91久久青草| 51久久夜色精品国产麻豆| 男人a天堂手机在线版| 人人扣人人操| 久久不卡一区二区| 国产精彩女在线观看视频| 超碰色大香蕉| 人人干人人操人人爱| 国产性爱乱伦AV| 欧美一级三级| 综合91网| 69一区二区| 国产一区二区精品久久99| 亚洲免费看片| 大香蕉啪啪啪啪在线| 亚春色色| 草草影院最新网址| 丁香五月天啪啪| 97公开久久| 亚洲三级。日韩三级| 操逼逼一区视频| 九九色热| AV色五月天| 日韩视频中文字幕| 天天色播亚洲综合网站| 国产精品网站www| 手机在线大香蕉| 欧美成人AⅤ大片在线观看| 久操大香蕉手机视频在线看| 久草精品一区| 天天视频黄| 大香蕉久久| 欧美成人性爱视频大全| 97久久超碰| 亚洲 欧美 天天| 嗯嗯啊啊啊好舒服| 亚洲伊人久久精品影院| 国产超碰97| 熟女探花啪啪| 天天综合网日韩7799| 草草影院在线视频| 丰满少妇精品一区二区| 亚洲精品白浆高清久久久久久 | 亚洲熟女乱熟乱熟妇综合网二区| 深夜视频| 九九黄色网| 黄色av播放免不| 久久亚洲欧美中文字幕国语| 久极品在线观看| 熟妇人妻精品一区二区| 无码乱人伦中文视频| 美女主播色欲91抠b在线播放| 玖草在线视频| 丰满人妻-区二区三区免费| 2020中文字幕在线| 国产www色在线观看| 成人熟女区| 午夜福利1区2区3区| 91精品电影18| 97爱爱爱| 超碰人人乐97| 99re免费| 蜜桃精品一区二区三区ww| 欧洲精品一级二级精品综合视频综合| 亚洲欧洲网站免费观看| 夜色97| 欧美自拍偷拍免费观看| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 亚洲天天综合| 无码人妻一区二区一牛影视| 少妇久久久久久久久| 嗯啊不要在线| 东京热男人的天堂| 久久熟妇五十路一区| 日韩精品资源专区二区| 9999伦理视频| 操人人| 亚av顶级裸体一区二区三区四区五区| 影视综合无码少妇| 另类视频在线| 亚洲一区二区精品福利| 9久9久9久9久视频网站| 色色五月天婷婷| 久草加勒比一区在线| 综精品久久久aaaa| 欧美人人曰人人操人人射射| 素人无码中文字幕| 亚洲综合中文字幕有码| 啊啊啊水好多| av婷婷色网| ..日韩av毛片精品久久久| 午夜AV污污污| 嗯啊不要在线| 国产精品盗摄 偷窥盗摄| 久久综合久色欧美综合狠狠 | 色鬼在线综合| 国产精品69人妻无码久久久| 偷拍亚洲情色| 欧美美女自慰一区二区三区| 精品人妻一区二区三区四区石在线| 99国产精品免费| 九九无码视频| 黄片视频观看| 狠狠干2020| 欧亚综合一卡二卡中文字幕| 蜜乳视频网站| 啊啊啊啊在线播放| 91蜜臀熟女| 俄罗斯一区二区视频在线观看| 欧美青青草视频| 91N欧美| 国产无马视频| 乱欲视频| 欧美后入式| 亚洲不卡av在线| 国产大学生高潮在线播放| 日韩国产精品人妻无码久久久| 五月开心久久AV官网| 日韩人妻精品久久久久| 国产成人午夜视频网址| 97超碰欧美精品| 亚洲天堂人人妻| 男人天堂久久精品| 操逼1区| 操国产高清| 亚洲中文字幕一区| 九九久久一区二区三区| 新版天堂中文资源8在线| 亚洲熟女乱色一区二区三区 | 大香蕉久| 国产女人和拘做爰视频 | 亚洲天堂,男人| 在线综合色| 一级做a爰片性色毛片久久| 大香蕉一人| 和协影院中文字幕三区| 特污免视频| 久久精品99| 午夜寂寞欧美| 人人操人人插人人摸人人干| 91老熟女视频| 男人的天堂com| 亚洲美女黄色| 97一区二压| 人妻出轨一区二区三区| 亚洲老熟妇xxx| www.色操逼| 在线可观看的黄色网址| 日韩在线一区高清在线| 欧美不卡五十路| 久久久久久久9| 91无码精品| 亚洲久久天堂| 九九九九一区| 久久久96精品| 欧美九一精品久久久熟妇| 美日韩一二三区| 蜜臀99999| 夜夜狼人妻| 91丝袜美女| 久久久久久大| 91亚洲不卡一区| 热久久精品| 男女打扑克高清网站| av优播| 久久久工口| 久视频在线观看| 国产天天骚| 天天爽夜夜欢视| 日夜久久久九九九久| 欧美丝袜激情| 欧美日韩一干二干| 夜精品久无码| 免费99精品国产自在在线| 久久6热精品99视频| 免费97视频| 久久风骚城市| 精品免费囯产一区二区三区| 不卡视频一区蜜桃视频| 蜜臀久久99精品久久久久| 亚洲毛片基地专区| 91精品国产91久久福利| 成年人网站在线免费观看| 牛牛操视频逼| 午夜电影在线观看无码专区| 欧美日韩国内不卡| 婷婷综合在线| 午夜激情床戏激情| 久久久久一本一区二区青青蜜月| 欧美色图私拍91| 综合91网| 久久有码视频| 欧美成人一级麻豆| 91深夜夜| 欧亚免费视频| 欧美美女自慰一区二区三区| 久久偷拍人| 日本天堂在线播放| 欧美97在线欧| 在线无码网站| 97福利视频| 密臀在线免费观看| 偷拍2020| 亚洲情色视频| 成人av影院在线观看| 亚洲操逼视频网站| 色av中文字| 久湿久久| 久久产精品一区二区三区电影| 在线岛| 五月婷婷六月丁香| 国产地址二三| 色97干| 国产aⅴ无码片毛片一级网站| 久热久| 综合天天网| 加勒比综合88| 久久久久久久亚洲Av无码| 亚洲少妇色| 欧美在线中M| 日本阿v天堂在线观看| 国产亲戚伦亲在线| 黄色乱论网站| 97在线亚洲| 国产黄色在线播放观看| 91九九| 免费97视频| 欧美色www亚洲国产阿娇要播| 超碰人人超在线观看| 欧美婷婷久久| 欧成人精品H无码| 亚洲成A∨人影院在线欢看| 亚洲天堂另类小说男人| 一本色道久久综合亚洲二区三区| 欧美福利视频啊啊啊啊| 久久99网站| 粉嫩av一区二区三区四季| 91精品国产91久久福利| 99热成人| 欧美偷| 欧美亚洲| 2017大香蕉国产精品久久| 九九九九精品| 婷婷五月成人| 久久久久幕乱码| 日韩在线性爱免费视频| 国产白领连续中出在线观看| 日韩欧美中文字幕搭讪巨乳美人妻视频| 香蕉热人人精品| 亚洲精品天天影视综合网| 亚洲国产97| 99热超碰| 久99在线免费观看视频| 黄色小视频日本txt| 国产丰满少妇久久久精品影院| 日本熟妇浓毛hdsex| 日韩精品一区二区三区四虎影视| 人妻丰满熟妇av无码区蜜桃| 婷婷激情五月天小说网| 91精产一区二区三区| 国产一区二区三区免费视频在性观看 | 亚洲AV不卡在线观看尤物| 国内偷拍精品一区二区| 久无码| 国产乱伦视频污| 久久久久久大| 国内亚洲高清无码| 亚洲瓯美色图| 欧美激情性久久久久久| 国产91精品久久久久久久网曝门| AV麻豆免费一区| 六月丁操逼| 欧美日韩日产免费网站看| 欧美夜夜骑视频| 一区二区影院| 欧美一品道| 免费啪啪啪网站18岁| 超碰4A| 精品区9| 五月亭亭六月丁香| 超碰97玖玖爱| 日本 色 导航| 91熟女.com| www超碰| 男人的天堂2018| 大香蕉伊人亚洲| 青草草免费网站av| 东方亚洲在线操逼天堂| 国产18精品亚洲精品| 日韩欧美女求操每天更新| 97九色人妻| 午夜.DJ高清在线观看免费7| 久湿久久 | 欧美另类天堂| 日本熟妇一区二区三区| 中文字幕天堂在线| AV中文字幕剧情1区2区3| 在线观看中文av字幕| 97亚洲自在精品在线观看| 亚洲激情网一二三四区| 中国农村熟妇毛片视频| 熟妇高潮精品一区二区三区下载| 久久久久亚洲Aⅴ无码| 天美av在线| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 18禁无码永久免费无限制| 日韩精品9区| 开心激情婷婷| 丰满美女一级毛片在线播放| 久久精品视频一区三区小泽玛利亚| 六月丁香久久| 天堂69亚洲精品中文字| 日韩八十路老熟女| 精品国产乱码久久久久久久久1 | ?亚洲伊人伊成久久人综合网| 超碰九区| 日日夜夜模| 亚洲老熟妇xxx| 十八岁啪啪视频免费看| 婷婷爽人人婷婷爽视频| 2026国产精品视频| 水澄无码AV| 欧美顶级黄色大片免费| 青娱乐休闲视频在线观看| 天天影视之亚洲综合网| 天天操天天射青青草| 日韩免费看黄片| 超碰日韩人妻| 91热| 久久久久密臀视频| 大鸡巴久久久| 狠狠爱综合| 91在线视频观看国产| 美女诱惑一区| 熟妇一区,二区,三区。| 91成人在线| 嗯嗯啊啊视频在线看| 两性色网| 性爱网站一区二区| 亚洲熟女综合网| 日韩专区久久久| 超碰97最新人妻| 亚洲情色婷婷五月天| www激情| 亚洲欧综合另类无码一区| 日本影视久久免费| 91女日逼| 91欧美少妇| 婷婷九月国产| 欧美后入视频| 亚洲码和欧洲精品激情系列| 亚洲 日本 一 二 三| 免费一级毛片在线视频观看| 91在线视频观看国产| 久操操AV电影| 精品人妻免费观看| 久久激情婷婷| 91色欧美| 青青草公开在线免费不卡视频| 久久亚洲天堂| 国产久久久久影院老熟女| 久草婷婷| 亚洲色9| 久超超碰| 10000部十八禁看电影| 德国一二三不卡| 一牛影视久久久一区二区三区| 久久久久免费少妇| 屌逼麻豆| 操人妻少妇中文 | 97国产精品一区| 欧美在线电影| 精品97久久| 999久久久国产精品| 色香综合| 性综合网| 日韩性爱小视频| 在线观看一级α片刺激高潮视频| 国产强奸乱伦欧美| 人人性爱视频免费| 強姦亂倫a| 白天啪啪晚上啪啪视频| 一区二区三区黄片免费观看| 3d成人精品一区二区| 午夜久久无码1000合集| 日本精品一区二区中文字幕| 国产精品熟女乱伦| 五月天婷婷影院| 欧美亚洲国内自拍| 99天天超碰| 91欧美性| 日日躁狠狠躁天天躁精品| 亚洲色图A|