[{"data":1,"prerenderedAt":403},["ShallowReactive",2],{"navigation_docs":3,"-guides-vue-reactivity-vs-phaser-imperative-updates":159,"-guides-vue-reactivity-vs-phaser-imperative-updates-surround":398},[4,29,57,76,100,124,152],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,12,16,20,24],{"title":5,"path":7,"stem":11},"1.getting-started\u002Findex",{"title":13,"path":14,"stem":15},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation",{"title":17,"path":18,"stem":19},"First Game","\u002Fgetting-started\u002Ffirst-game","1.getting-started\u002F2.first-game",{"title":21,"path":22,"stem":23},"SSR and Mounting","\u002Fgetting-started\u002Fssr-and-mounting","1.getting-started\u002F3.ssr-and-mounting",{"title":25,"path":26,"stem":27,"icon":28},"Skills","\u002Fgetting-started\u002Fskills","1.getting-started\u002F4.skills","i-lucide-sparkles",{"title":30,"icon":31,"path":32,"stem":33,"children":34},"Vue Guide","i-lucide-book-open","\u002Fvue-guide","2.vue-guide",[35,37,41,45,49,53],{"title":30,"path":32,"stem":36},"2.vue-guide\u002Findex",{"title":38,"path":39,"stem":40},"PhaserGame","\u002Fvue-guide\u002Fphaser-game","2.vue-guide\u002F1.phaser-game",{"title":42,"path":43,"stem":44},"Scenes","\u002Fvue-guide\u002Fscenes","2.vue-guide\u002F2.scenes",{"title":46,"path":47,"stem":48},"Primitives","\u002Fvue-guide\u002Fprimitives","2.vue-guide\u002F3.primitives",{"title":50,"path":51,"stem":52},"Composables and Bridge","\u002Fvue-guide\u002Fcomposables-and-bridge","2.vue-guide\u002F4.composables-and-bridge",{"title":54,"path":55,"stem":56},"Escape Hatches","\u002Fvue-guide\u002Fescape-hatches","2.vue-guide\u002F5.escape-hatches",{"title":58,"icon":59,"path":60,"stem":61,"children":62},"Nuxt Module","i-lucide-layers-3","\u002Fnuxt-module","3.nuxt-module",[63,65,68,72],{"title":58,"path":60,"stem":64},"3.nuxt-module\u002Findex",{"title":13,"path":66,"stem":67},"\u002Fnuxt-module\u002Finstallation","3.nuxt-module\u002F1.installation",{"title":69,"path":70,"stem":71},"Runtime Defaults","\u002Fnuxt-module\u002Fruntime-defaults","3.nuxt-module\u002F2.runtime-defaults",{"title":73,"path":74,"stem":75},"Client-only Wrapper","\u002Fnuxt-module\u002Fclient-only-wrapper","3.nuxt-module\u002F3.client-only-wrapper",{"title":77,"icon":78,"path":79,"stem":80,"children":81},"Examples","i-lucide-play-square","\u002Fexamples","4.examples",[82,84,88,92,96],{"title":77,"path":79,"stem":83},"4.examples\u002Findex",{"title":85,"path":86,"stem":87},"Minimal","\u002Fexamples\u002Fminimal","4.examples\u002F1.minimal",{"title":89,"path":90,"stem":91},"Imperative Escape Hatch","\u002Fexamples\u002Fimperative-escape-hatch","4.examples\u002F2.imperative-escape-hatch",{"title":93,"path":94,"stem":95},"Multi-scene","\u002Fexamples\u002Fmulti-scene","4.examples\u002F3.multi-scene",{"title":97,"path":98,"stem":99},"Nuxt Playground","\u002Fexamples\u002Fnuxt-playground","4.examples\u002F4.nuxt-playground",{"title":101,"icon":102,"path":103,"stem":104,"children":105},"API Reference","i-lucide-book-open-text","\u002Fapi-reference","5.api-reference",[106,108,112,116,120],{"title":101,"path":103,"stem":107},"5.api-reference\u002Findex",{"title":109,"path":110,"stem":111},"Vue Components","\u002Fapi-reference\u002Fvue-components","5.api-reference\u002F1.vue-components",{"title":113,"path":114,"stem":115},"Composables","\u002Fapi-reference\u002Fcomposables","5.api-reference\u002F2.composables",{"title":117,"path":118,"stem":119},"Types","\u002Fapi-reference\u002Ftypes","5.api-reference\u002F3.types",{"title":121,"path":122,"stem":123},"Nuxt Module Options","\u002Fapi-reference\u002Fnuxt-module-options","5.api-reference\u002F4.nuxt-module-options",{"title":125,"icon":126,"path":127,"stem":128,"children":129},"Guides","i-lucide-compass","\u002Fguides","6.guides",[130,132,136,140,144,148],{"title":125,"path":127,"stem":131},"6.guides\u002Findex",{"title":133,"path":134,"stem":135},"Performance","\u002Fguides\u002Fperformance","6.guides\u002F1.performance",{"title":137,"path":138,"stem":139},"Scene-first Design","\u002Fguides\u002Fscene-first-design","6.guides\u002F2.scene-first-design",{"title":141,"path":142,"stem":143},"Vue Reactivity vs Phaser Imperative Updates","\u002Fguides\u002Fvue-reactivity-vs-phaser-imperative-updates","6.guides\u002F3.vue-reactivity-vs-phaser-imperative-updates",{"title":145,"path":146,"stem":147},"Testing scene primitives in Vue","\u002Fguides\u002Ftesting-scene-primitives-in-vue","6.guides\u002F4.testing-scene-primitives-in-vue",{"title":149,"path":150,"stem":151},"Testing a Phaser canvas in Nuxt","\u002Fguides\u002Ftesting-a-phaser-canvas-in-nuxt","6.guides\u002F5.testing-a-phaser-canvas-in-nuxt",{"title":153,"path":154,"stem":155,"children":156,"icon":158},"Roadmap","\u002Froadmap","7.roadmap\u002Findex",[157],{"title":153,"path":154,"stem":155},"i-lucide-flag",{"id":160,"title":141,"body":161,"description":391,"extension":392,"links":393,"meta":394,"navigation":395,"path":142,"seo":396,"stem":143,"__hash__":397},"docs\u002F6.guides\u002F3.vue-reactivity-vs-phaser-imperative-updates.md",{"type":162,"value":163,"toc":387},"minimark",[164,168,173,195,199,219,333,380,383],[165,166,167],"p",{},"Use Vue reactivity for data that changes because the app changes state. Use Phaser imperative updates for data that changes because the game is running every frame.",[169,170,172],"h2",{"id":171},"good-candidates-for-vue-reactivity","Good candidates for Vue reactivity",[174,175,176,180,183,186,189,192],"ul",{},[177,178,179],"li",{},"route-level state",[177,181,182],{},"UI panels and menus",[177,184,185],{},"settings toggles",[177,187,188],{},"low-frequency HUD values",[177,190,191],{},"scene selection and orchestration",[177,193,194],{},"bridge events that express intent",[169,196,198],{"id":197},"good-candidates-for-phaser-imperative-updates","Good candidates for Phaser imperative updates",[174,200,201,204,207,210,213,216],{},[177,202,203],{},"player movement",[177,205,206],{},"enemy AI",[177,208,209],{},"tweens and animation timing",[177,211,212],{},"physics state",[177,214,215],{},"camera follow behavior",[177,217,218],{},"pointer and keyboard handling inside frame-sensitive logic",[220,221,227],"pre",{"className":222,"code":223,"filename":224,"language":225,"meta":226,"style":226},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","scene.events.on('update', (_time, delta) => {\n  player.x += velocity * (delta \u002F 1000)\n})\n","src\u002Fgame\u002Frunner-scene.ts","ts","",[228,229,230,289,325],"code",{"__ignoreMap":226},[231,232,235,239,243,246,248,252,255,258,262,264,267,270,274,276,279,282,286],"span",{"class":233,"line":234},"line",1,[231,236,238],{"class":237},"sTEyZ","scene",[231,240,242],{"class":241},"sMK4o",".",[231,244,245],{"class":237},"events",[231,247,242],{"class":241},[231,249,251],{"class":250},"s2Zo4","on",[231,253,254],{"class":237},"(",[231,256,257],{"class":241},"'",[231,259,261],{"class":260},"sfazB","update",[231,263,257],{"class":241},[231,265,266],{"class":241},",",[231,268,269],{"class":241}," (",[231,271,273],{"class":272},"sHdIc","_time",[231,275,266],{"class":241},[231,277,278],{"class":272}," delta",[231,280,281],{"class":241},")",[231,283,285],{"class":284},"spNyl"," =>",[231,287,288],{"class":241}," {\n",[231,290,292,295,297,300,303,306,309,312,315,318,322],{"class":233,"line":291},2,[231,293,294],{"class":237},"  player",[231,296,242],{"class":241},[231,298,299],{"class":237},"x",[231,301,302],{"class":241}," +=",[231,304,305],{"class":237}," velocity",[231,307,308],{"class":241}," *",[231,310,269],{"class":311},"swJcz",[231,313,314],{"class":237},"delta",[231,316,317],{"class":241}," \u002F",[231,319,321],{"class":320},"sbssI"," 1000",[231,323,324],{"class":311},")\n",[231,326,328,331],{"class":233,"line":327},3,[231,329,330],{"class":241},"}",[231,332,324],{"class":237},[220,334,337],{"className":222,"code":335,"filename":336,"language":225,"meta":226,"style":226},"const registry = usePhaserRegistry\u003C{ score: number }>('hud')\n","src\u002Fcomposables\u002FuseHud.ts",[228,338,339],{"__ignoreMap":226},[231,340,341,344,347,350,353,356,359,362,366,369,371,373,376,378],{"class":233,"line":234},[231,342,343],{"class":284},"const",[231,345,346],{"class":237}," registry ",[231,348,349],{"class":241},"=",[231,351,352],{"class":250}," usePhaserRegistry",[231,354,355],{"class":241},"\u003C{",[231,357,358],{"class":311}," score",[231,360,361],{"class":241},":",[231,363,365],{"class":364},"sBMFI"," number",[231,367,368],{"class":241}," }>",[231,370,254],{"class":237},[231,372,257],{"class":241},[231,374,375],{"class":260},"hud",[231,377,257],{"class":241},[231,379,324],{"class":237},[165,381,382],{},"The two models can coexist. Keep the authority where the update frequency demands it.",[384,385,386],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":226,"searchDepth":291,"depth":291,"links":388},[389,390],{"id":171,"depth":291,"text":172},{"id":197,"depth":291,"text":198},"Decide what belongs in Vue state and what should stay inside the Phaser scene runtime.","md",null,{},true,{"title":141,"description":391},"Jte0659N4b_hKYH8bgxumEnfvDZ0SO-QcWcbQ80Hr60",[399,401],{"title":137,"path":138,"stem":139,"description":400,"children":-1},"Understand why the library elevates scenes instead of building a full custom object renderer.",{"title":145,"path":146,"stem":147,"description":402,"children":-1},"Use the fake Phaser runtime and the Vue mount helper to test scene wiring without a real renderer.",1777965862673]