diff --git a/Extensions/AdvancedWindow/JsExtension.js b/Extensions/AdvancedWindow/JsExtension.js index 25b944a067b8..5ca0631c2681 100644 --- a/Extensions/AdvancedWindow/JsExtension.js +++ b/Extensions/AdvancedWindow/JsExtension.js @@ -28,9 +28,11 @@ module.exports = { 'MIT' ) .setShortDescription( - 'Window focus, position, size, always-on-top, minimize/maximize, content protection. Desktop only.' + _( + 'Window focus, position, size, always-on-top, minimize/maximize, desktop pet controls, content protection. Desktop only.' + ) ) - .setCategory('User interface'); + .setCategory(_('User interface')); extension .addInstructionOrExpressionGroupMetadata(_('Advanced window management')) .setIcon('res/actions/window24.png'); @@ -432,14 +434,23 @@ module.exports = { .setFunctionName('gdjs.evtTools.advancedWindow.isClosable'); const levelChoices = JSON.stringify([ - 'normal', - 'floating', - 'torn-off-menu', - 'modal-panel', - 'main-menu', - 'status', - 'pop-up-menu', - 'screen-saver', + { value: 'normal', label: _('Normal') }, + { value: 'floating', label: _('Floating') }, + { value: 'torn-off-menu', label: _('Torn-off menu') }, + { value: 'modal-panel', label: _('Modal panel') }, + { value: 'main-menu', label: _('Main menu') }, + { value: 'status', label: _('Status') }, + { value: 'pop-up-menu', label: _('Pop-up menu') }, + { value: 'screen-saver', label: _('Screen saver') }, + ]); + + const dockPositionChoices = JSON.stringify([ + { value: 'BottomRight', label: _('Bottom right') }, + { value: 'TopRight', label: _('Top right') }, + { value: 'BottomLeft', label: _('Bottom left') }, + { value: 'TopLeft', label: _('Top left') }, + { value: 'Center', label: _('Center') }, + { value: 'Custom', label: _('Custom') }, ]); extension @@ -457,14 +468,16 @@ module.exports = { .addParameter('stringWithSelector', _('Level'), levelChoices, false) .setDefaultValue('floating') .setParameterLongDescription( - 'The level is like a layer in GDevelop but for the OS. ' + - 'The further down the list, the higher it will be. ' + - 'When disabling always on top, the level will be set to normal. ' + - 'From "floating" to "status" included, ' + - 'the window is placed below the Dock on macOS and below the taskbar on Windows. ' + - 'Starting from "pop-up-menu", it is shown above the Dock on macOS and ' + - 'above the taskbar on Windows. ' + - 'This parameter is ignored on linux.' + _( + 'The level is like a layer in GDevelop but for the OS. ' + + 'The further down the list, the higher it will be. ' + + 'When disabling always on top, the level will be set to normal. ' + + 'From "floating" to "status" included, ' + + 'the window is placed below the Dock on macOS and below the taskbar on Windows. ' + + 'Starting from "pop-up-menu", it is shown above the Dock on macOS and ' + + 'above the taskbar on Windows. ' + + 'This parameter is ignored on linux.' + ) ) .addCodeOnlyParameter('currentScene', '') .getCodeExtraInformation() @@ -604,6 +617,114 @@ module.exports = { ) .setFunctionName('gdjs.evtTools.advancedWindow.setFocusable'); + extension + .addAction( + 'SetWindowTaskbarVisibility', + _('Show in taskbar'), + _('Shows or hides the window in the operating system taskbar.'), + _('Show window in taskbar: _PARAM0_'), + _('Windows, Linux, macOS'), + 'res/actions/window24.png', + 'res/actions/window.png' + ) + .addParameter('yesorno', _('Show in taskbar?'), '', false) + .setDefaultValue('true') + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.setTaskbarVisible'); + + extension + .addAction( + 'SetIgnoreMouseEvents', + _('Ignore mouse events'), + _( + 'Makes the window ignore mouse events so clicks can go through to windows behind it.' + ), + _('Ignore mouse events: _PARAM0_, forward mouse movement: _PARAM1_'), + _('Windows, Linux, macOS'), + 'res/actions/window24.png', + 'res/actions/window.png' + ) + .addParameter('yesorno', _('Ignore mouse events?'), '', false) + .setDefaultValue('false') + .addParameter( + 'yesorno', + _('Forward mouse movement events to the game?'), + '', + false + ) + .setDefaultValue('true') + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.setIgnoreMouseEvents'); + + extension + .addAction( + 'SetWindowBackgroundColor', + _('Window background color'), + _( + 'Changes the native window background color. Use #00000000 for a transparent window background.' + ), + _('Set the native window background color to _PARAM0_'), + _('Windows, Linux, macOS'), + 'res/actions/window24.png', + 'res/actions/window.png' + ) + .addParameter('string', _('Background color'), '', false) + .setDefaultValue('#00000000') + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.setWindowBackgroundColor'); + + extension + .addAction( + 'SetWindowFrameless', + _('Frameless game window'), + _( + 'Requests the preview and exported desktop game windows to be created without the native window frame.' + ), + _('Enable frameless game window: _PARAM0_'), + _('Windows, Linux, macOS'), + 'res/actions/window24.png', + 'res/actions/window.png' + ) + .addParameter('yesorno', _('Enable frameless game window?'), '', false) + .setDefaultValue('false') + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.setWindowFrameless'); + + extension + .addAction( + 'SetMenuBarVisible', + _('Show menu bar'), + _('Shows or hides the native menu bar of the window.'), + _('Show window menu bar: _PARAM0_'), + _('Windows, Linux, macOS'), + 'res/actions/window24.png', + 'res/actions/window.png' + ) + .addParameter('yesorno', _('Show menu bar?'), '', false) + .setDefaultValue('true') + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.setMenuBarVisible'); + extension .addAction( 'Flash', @@ -635,7 +756,7 @@ module.exports = { ) .addParameter('expression', _('New opacity'), '', false) .setParameterLongDescription( - 'A number between 0 (fully transparent) and 1 (fully opaque).' + _('A number between 0 (fully transparent) and 1 (fully opaque).') ) .addCodeOnlyParameter('currentScene', '') .getCodeExtraInformation() @@ -663,6 +784,88 @@ module.exports = { ) .setFunctionName('gdjs.evtTools.advancedWindow.setPosition'); + extension + .addAction( + 'DockWindow', + _('Dock window to screen work area'), + _( + 'Moves the window to a corner, the center, or custom coordinates on the current screen work area.' + ), + _( + 'Dock the window to _PARAM0_ with offset _PARAM1_;_PARAM2_ and custom position _PARAM3_;_PARAM4_' + ), + _('Windows, Linux, macOS'), + 'res/actions/window24.png', + 'res/actions/window.png' + ) + .addParameter( + 'stringWithSelector', + _('Dock position'), + dockPositionChoices, + false + ) + .setDefaultValue('BottomRight') + .addParameter('expression', _('Corner X offset'), '', false) + .setDefaultValue('0') + .addParameter('expression', _('Corner Y offset'), '', false) + .setDefaultValue('0') + .addParameter('expression', _('Custom X position'), '', false) + .setDefaultValue('0') + .addParameter('expression', _('Custom Y position'), '', false) + .setDefaultValue('0') + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.dockWindow'); + + extension + .addAction( + 'ApplyDesktopPetWindowMode', + _('Apply desktop pet window mode'), + _( + 'Applies common desktop pet window settings: transparent native background, no shadow, optional always-on-top, taskbar hiding, mouse click-through, menu bar hiding, and docking.' + ), + _( + 'Apply desktop pet window mode at _PARAM0_ with offset _PARAM1_;_PARAM2_, custom position _PARAM3_;_PARAM4_, always on top: _PARAM5_, show in taskbar: _PARAM6_, click-through: _PARAM7_, show menu bar: _PARAM8_' + ), + _('Windows, Linux, macOS'), + 'res/actions/window24.png', + 'res/actions/window.png' + ) + .addParameter( + 'stringWithSelector', + _('Dock position'), + dockPositionChoices, + false + ) + .setDefaultValue('BottomRight') + .addParameter('expression', _('Corner X offset'), '', false) + .setDefaultValue('0') + .addParameter('expression', _('Corner Y offset'), '', false) + .setDefaultValue('0') + .addParameter('expression', _('Custom X position'), '', false) + .setDefaultValue('0') + .addParameter('expression', _('Custom Y position'), '', false) + .setDefaultValue('0') + .addParameter('yesorno', _('Always on top?'), '', false) + .setDefaultValue('true') + .addParameter('yesorno', _('Show in taskbar?'), '', false) + .setDefaultValue('false') + .addParameter('yesorno', _('Click-through?'), '', false) + .setDefaultValue('false') + .addParameter('yesorno', _('Show menu bar?'), '', false) + .setDefaultValue('false') + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName( + 'gdjs.evtTools.advancedWindow.applyDesktopPetWindowMode' + ); + extension .addExpression( 'WindowX', @@ -693,6 +896,66 @@ module.exports = { ) .setFunctionName('gdjs.evtTools.advancedWindow.getPositionY'); + extension + .addExpression( + 'WorkAreaX', + _('Screen work area X position'), + _('Returns the X position of the current screen work area.'), + _('Windows, Linux, macOS'), + 'res/actions/window.png' + ) + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.getWorkAreaX'); + + extension + .addExpression( + 'WorkAreaY', + _('Screen work area Y position'), + _('Returns the Y position of the current screen work area.'), + _('Windows, Linux, macOS'), + 'res/actions/window.png' + ) + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.getWorkAreaY'); + + extension + .addExpression( + 'WorkAreaWidth', + _('Screen work area width'), + _('Returns the width of the current screen work area.'), + _('Windows, Linux, macOS'), + 'res/actions/window.png' + ) + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.getWorkAreaWidth'); + + extension + .addExpression( + 'WorkAreaHeight', + _('Screen work area height'), + _('Returns the height of the current screen work area.'), + _('Windows, Linux, macOS'), + 'res/actions/window.png' + ) + .addCodeOnlyParameter('currentScene', '') + .getCodeExtraInformation() + .setIncludeFile( + 'Extensions/AdvancedWindow/electron-advancedwindowtools.js' + ) + .setFunctionName('gdjs.evtTools.advancedWindow.getWorkAreaHeight'); + extension .addExpression( 'WindowOpacity', diff --git a/Extensions/AdvancedWindow/electron-advancedwindowtools.ts b/Extensions/AdvancedWindow/electron-advancedwindowtools.ts index eb3ce4b8e8b2..e2513cdf8c6e 100644 --- a/Extensions/AdvancedWindow/electron-advancedwindowtools.ts +++ b/Extensions/AdvancedWindow/electron-advancedwindowtools.ts @@ -21,6 +21,128 @@ namespace gdjs { } }; + const getElectron = (runtimeScene: gdjs.RuntimeScene) => { + try { + return runtimeScene.getGame().getRenderer().getElectron(); + } catch (error) { + return null; + } + }; + + const isGDevelopPreview = (runtimeScene: gdjs.RuntimeScene): boolean => { + try { + return !!runtimeScene.getGame().isPreview(); + } catch (error) { + return false; + } + }; + + const getElectronBrowserWindowBounds = ( + runtimeScene: gdjs.RuntimeScene + ): { x: number; y: number; width: number; height: number } | null => { + const electronBrowserWindow = getElectronBrowserWindow(runtimeScene); + if (!electronBrowserWindow) return null; + + try { + if (typeof electronBrowserWindow.getBounds === 'function') { + return electronBrowserWindow.getBounds(); + } + + const position = electronBrowserWindow.getPosition(); + const size = electronBrowserWindow.getSize(); + return { + x: position[0], + y: position[1], + width: size[0], + height: size[1], + }; + } catch (error) { + return null; + } + }; + + const getCurrentDisplayWorkArea = ( + runtimeScene: gdjs.RuntimeScene + ): { x: number; y: number; width: number; height: number } | null => { + const electron = getElectron(runtimeScene); + const screen = electron ? electron.screen : null; + if (!screen) return null; + + try { + const bounds = getElectronBrowserWindowBounds(runtimeScene); + const fallbackDisplay = screen.getPrimaryDisplay(); + if (!bounds) { + return fallbackDisplay && fallbackDisplay.workArea + ? fallbackDisplay.workArea + : null; + } + + const centerPoint = { + x: bounds.x + Math.round(bounds.width / 2), + y: bounds.y + Math.round(bounds.height / 2), + }; + const display = + screen.getDisplayNearestPoint(centerPoint) || fallbackDisplay; + return display && display.workArea ? display.workArea : null; + } catch (error) { + return null; + } + }; + + const computeDockedWindowPosition = ( + dockPosition: string, + workArea: { x: number; y: number; width: number; height: number }, + bounds: { x: number; y: number; width: number; height: number }, + cornerOffsetX: float, + cornerOffsetY: float, + customX: float, + customY: float + ): { x: number; y: number } => { + switch (dockPosition) { + case 'TopLeft': + case 'top-left': + return { + x: workArea.x + cornerOffsetX, + y: workArea.y + cornerOffsetY, + }; + case 'TopRight': + case 'top-right': + return { + x: workArea.x + workArea.width - bounds.width - cornerOffsetX, + y: workArea.y + cornerOffsetY, + }; + case 'BottomLeft': + case 'bottom-left': + return { + x: workArea.x + cornerOffsetX, + y: workArea.y + workArea.height - bounds.height - cornerOffsetY, + }; + case 'BottomRight': + case 'bottom-right': + return { + x: workArea.x + workArea.width - bounds.width - cornerOffsetX, + y: workArea.y + workArea.height - bounds.height - cornerOffsetY, + }; + case 'Center': + case 'center': + return { + x: workArea.x + Math.round((workArea.width - bounds.width) / 2), + y: workArea.y + Math.round((workArea.height - bounds.height) / 2), + }; + case 'Custom': + case 'custom': + return { + x: customX, + y: customY, + }; + default: + return { + x: bounds.x, + y: bounds.y, + }; + } + }; + export const focus = function ( activate: boolean, runtimeScene: gdjs.RuntimeScene @@ -407,6 +529,175 @@ namespace gdjs { electronBrowserWindow.setFocusable(activate); } }; + + export const setSkipTaskbar = function ( + activate: boolean, + runtimeScene: gdjs.RuntimeScene + ) { + const electronBrowserWindow = getElectronBrowserWindow(runtimeScene); + if (electronBrowserWindow) { + if (activate && isGDevelopPreview(runtimeScene)) { + electronBrowserWindow.setSkipTaskbar(false); + return; + } + electronBrowserWindow.setSkipTaskbar(activate); + } + }; + + export const setTaskbarVisible = function ( + visible: boolean, + runtimeScene: gdjs.RuntimeScene + ) { + setSkipTaskbar(!visible, runtimeScene); + }; + + export const setIgnoreMouseEvents = function ( + activate: boolean, + forward: boolean, + runtimeScene: gdjs.RuntimeScene + ) { + const electronBrowserWindow = getElectronBrowserWindow(runtimeScene); + if (electronBrowserWindow) { + if (activate) { + electronBrowserWindow.setIgnoreMouseEvents(true, { forward }); + } else { + electronBrowserWindow.setIgnoreMouseEvents(false); + } + } + }; + + export const setWindowBackgroundColor = function ( + backgroundColor: string, + runtimeScene: gdjs.RuntimeScene + ) { + const electronBrowserWindow = getElectronBrowserWindow(runtimeScene); + if (electronBrowserWindow) { + electronBrowserWindow.setBackgroundColor(backgroundColor); + } + }; + + export const setWindowFrameless = function ( + activate: boolean, + runtimeScene: gdjs.RuntimeScene + ) { + const electronBrowserWindow = getElectronBrowserWindow(runtimeScene); + if (!electronBrowserWindow || !activate) return; + + try { + electronBrowserWindow.setHasShadow(false); + } catch (error) {} + }; + + export const setMenuBarVisible = function ( + visible: boolean, + runtimeScene: gdjs.RuntimeScene + ) { + const electronBrowserWindow = getElectronBrowserWindow(runtimeScene); + if (electronBrowserWindow) { + if (typeof electronBrowserWindow.setAutoHideMenuBar === 'function') { + electronBrowserWindow.setAutoHideMenuBar(!visible); + } + if ( + typeof electronBrowserWindow.setMenuBarVisibility === 'function' + ) { + electronBrowserWindow.setMenuBarVisibility(visible); + } + } + }; + + export const dockWindow = function ( + dockPosition: string, + cornerOffsetX: float, + cornerOffsetY: float, + customX: float, + customY: float, + runtimeScene: gdjs.RuntimeScene + ) { + const electronBrowserWindow = getElectronBrowserWindow(runtimeScene); + const workArea = getCurrentDisplayWorkArea(runtimeScene); + const bounds = getElectronBrowserWindowBounds(runtimeScene); + if (!electronBrowserWindow || !bounds) return; + + if (!workArea) { + if (dockPosition !== 'Custom' && dockPosition !== 'custom') return; + electronBrowserWindow.setPosition( + Math.round(customX), + Math.round(customY) + ); + return; + } + + const targetPosition = computeDockedWindowPosition( + dockPosition, + workArea, + bounds, + cornerOffsetX, + cornerOffsetY, + customX, + customY + ); + + electronBrowserWindow.setPosition( + Math.round(targetPosition.x), + Math.round(targetPosition.y) + ); + }; + + export const getWorkAreaX = function ( + runtimeScene: gdjs.RuntimeScene + ): number { + const workArea = getCurrentDisplayWorkArea(runtimeScene); + return workArea ? workArea.x : 0; + }; + + export const getWorkAreaY = function ( + runtimeScene: gdjs.RuntimeScene + ): number { + const workArea = getCurrentDisplayWorkArea(runtimeScene); + return workArea ? workArea.y : 0; + }; + + export const getWorkAreaWidth = function ( + runtimeScene: gdjs.RuntimeScene + ): number { + const workArea = getCurrentDisplayWorkArea(runtimeScene); + return workArea ? workArea.width : 0; + }; + + export const getWorkAreaHeight = function ( + runtimeScene: gdjs.RuntimeScene + ): number { + const workArea = getCurrentDisplayWorkArea(runtimeScene); + return workArea ? workArea.height : 0; + }; + + export const applyDesktopPetWindowMode = function ( + dockPosition: string, + cornerOffsetX: float, + cornerOffsetY: float, + customX: float, + customY: float, + alwaysOnTop: boolean, + showInTaskbar: boolean, + clickThrough: boolean, + showMenuBar: boolean, + runtimeScene: gdjs.RuntimeScene + ) { + setWindowBackgroundColor('#00000000', runtimeScene); + setAlwaysOnTop(alwaysOnTop, 'floating', runtimeScene); + setHasShadow(false, runtimeScene); + setTaskbarVisible(showInTaskbar, runtimeScene); + setIgnoreMouseEvents(clickThrough, true, runtimeScene); + setMenuBarVisible(showMenuBar, runtimeScene); + dockWindow( + dockPosition, + cornerOffsetX, + cornerOffsetY, + customX, + customY, + runtimeScene + ); + }; } } } diff --git a/Extensions/Spine/JsExtension.js b/Extensions/Spine/JsExtension.js index 631b60d78dc1..81bb86218ec2 100644 --- a/Extensions/Spine/JsExtension.js +++ b/Extensions/Spine/JsExtension.js @@ -61,6 +61,7 @@ module.exports = { .addIncludeFile('Extensions/Spine/managers/pixi-spine-atlas-manager.js') .addIncludeFile('Extensions/Spine/managers/pixi-spine-manager.js') .setCategory('Advanced') + .setHidden() .setOpenFullEditorLabel(_('Edit animations')); object diff --git a/Extensions/Spine43Object/JsExtension.js b/Extensions/Spine43Object/JsExtension.js new file mode 100644 index 000000000000..fc2cb5bfdbb4 --- /dev/null +++ b/Extensions/Spine43Object/JsExtension.js @@ -0,0 +1,1881 @@ +//@ts-check +/// + +const ICON = 'JsPlatform/Extensions/spine.svg'; +const OBJECT_TYPE = 'Spine43Object'; +const FULL_OBJECT_TYPE = 'Spine43Object::Spine43Object'; +const DEFAULT_RUNTIME_SCRIPT_PATH = 'Extensions/Spine43Object/spine-pixi-v7.js'; + +const SPINE43_ZH_CN = { + Spine: 'Spine', + 'Spine (experimental)': 'Spine\uff08\u5b9e\u9a8c\u6027\uff09', + 'Spine 4.3': 'Spine 4.3', + 'Display and animate Spine skeletons, including Spine 4.3 physics constraints.': + '\u663e\u793a\u5e76\u64ad\u653e Spine \u9aa8\u9abc\u52a8\u753b\uff0c\u5305\u62ec Spine 4.3 \u7269\u7406\u7ea6\u675f\u3002', + 'Native Spine object with Spine 4.3 support, editor preview, physics constraint updates, bones, slots and blocking hooks.': + '\u539f\u751f Spine \u5bf9\u8c61\uff0c\u652f\u6301 Spine 4.3\u3001\u7f16\u8f91\u5668\u9884\u89c8\u3001\u7269\u7406\u7ea6\u675f\u3001\u9aa8\u9abc\u3001\u63d2\u69fd\u548c\u963b\u6321\u94a9\u5b50\u3002', + 'Display Spine skeletons as a native object, including Spine 4.3 files.': + '\u5c06 Spine \u9aa8\u9abc\u4f5c\u4e3a\u539f\u751f\u5bf9\u8c61\u663e\u793a\uff0c\u5305\u62ec Spine 4.3 \u6587\u4ef6\u3002', + 'Spine object': 'Spine \u5bf9\u8c61', + 'Spine resources': 'Spine \u8d44\u6e90', + 'Display and animate Spine 4.3 skeletons, including physics constraints.': + '\u663e\u793a\u5e76\u64ad\u653e Spine 4.3 \u9aa8\u9abc\u52a8\u753b\uff0c\u5305\u62ec\u7269\u7406\u7ea6\u675f\u3002', + 'Native Spine 4.3 object with editor preview, physics constraint updates, bones, slots and blocking hooks.': + '\u539f\u751f Spine 4.3 \u5bf9\u8c61\uff0c\u652f\u6301\u7f16\u8f91\u5668\u9884\u89c8\u3001\u7269\u7406\u7ea6\u675f\u3001\u9aa8\u9abc\u3001\u63d2\u69fd\u548c\u963b\u6321\u94a9\u5b50\u3002', + 'Display Spine 4.3 skeletons as a native object.': + '\u5c06 Spine 4.3 \u9aa8\u9abc\u4f5c\u4e3a\u539f\u751f\u5bf9\u8c61\u663e\u793a\u3002', + 'Spine 4.3 object': 'Spine 4.3 \u5bf9\u8c61', + 'Spine 4.3 resources': 'Spine 4.3 \u8d44\u6e90', + 'Skeleton resource (.json or .skel)': + '\u9aa8\u67b6\u8d44\u6e90\uff08.json \u6216 .skel\uff09', + 'Atlas resource': '\u56fe\u96c6\u8d44\u6e90', + 'Spine 4.3 runtime script path': + 'Spine 4.3 \u8fd0\u884c\u5e93\u811a\u672c\u8def\u5f84', + 'Skeleton is binary .skel': '\u9aa8\u67b6\u662f\u4e8c\u8fdb\u5236 .skel', + 'Import scale': '\u5bfc\u5165\u7f29\u653e', + 'Initial skin name': '\u521d\u59cb\u76ae\u80a4\u540d\u79f0', + 'Initial animation name': '\u521d\u59cb\u52a8\u753b\u540d\u79f0', + 'Initial animation override': '\u521d\u59cb\u52a8\u753b\u8986\u76d6', + Playback: '\u64ad\u653e', + 'Loop initial animation': '\u5faa\u73af\u64ad\u653e\u521d\u59cb\u52a8\u753b', + 'Default mix duration': '\u9ed8\u8ba4\u6df7\u5408\u65f6\u957f', + 'Time scale': '\u65f6\u95f4\u6bd4\u4f8b', + Visible: '\u53ef\u89c1', + Opacity: '\u4e0d\u900f\u660e\u5ea6', + Display: '\u663e\u793a', + 'Preview physics constraints in the editor': + '\u5728\u7f16\u8f91\u5668\u4e2d\u9884\u89c8\u7269\u7406\u7ea6\u675f', + 'Maximum editor update delta': + '\u7f16\u8f91\u5668\u6700\u5927\u66f4\u65b0\u65f6\u95f4\u95f4\u9694', + 'Editor preview': '\u7f16\u8f91\u5668\u9884\u89c8', + 'Reload Spine resources': '\u91cd\u65b0\u52a0\u8f7d Spine \u8d44\u6e90', + 'Reload _PARAM0_': '\u91cd\u65b0\u52a0\u8f7d _PARAM0_', + 'Play animation': '\u64ad\u653e\u52a8\u753b', + 'Play animation _PARAM1_ on _PARAM0_': + '\u5728 _PARAM0_ \u4e0a\u64ad\u653e\u52a8\u753b _PARAM1_', + 'Play animation on track': '\u5728\u8f68\u9053\u4e0a\u64ad\u653e\u52a8\u753b', + 'Play _PARAM2_ on track _PARAM1_ of _PARAM0_': + '\u5728 _PARAM0_ \u7684\u8f68\u9053 _PARAM1_ \u4e0a\u64ad\u653e _PARAM2_', + 'Queue animation': '\u6392\u961f\u64ad\u653e\u52a8\u753b', + 'Queue _PARAM2_ on track _PARAM1_ of _PARAM0_': + '\u5c06 _PARAM2_ \u6392\u961f\u5230 _PARAM0_ \u7684\u8f68\u9053 _PARAM1_', + 'Clear track': '\u6e05\u9664\u8f68\u9053', + 'Clear track _PARAM1_ of _PARAM0_': + '\u6e05\u9664 _PARAM0_ \u7684\u8f68\u9053 _PARAM1_', + 'Clear all tracks': '\u6e05\u9664\u6240\u6709\u8f68\u9053', + 'Clear all tracks of _PARAM0_': + '\u6e05\u9664 _PARAM0_ \u7684\u6240\u6709\u8f68\u9053', + 'Set skin': '\u8bbe\u7f6e\u76ae\u80a4', + 'Set skin of _PARAM0_ to _PARAM1_': + '\u5c06 _PARAM0_ \u7684\u76ae\u80a4\u8bbe\u4e3a _PARAM1_', + 'Set time scale': '\u8bbe\u7f6e\u65f6\u95f4\u6bd4\u4f8b', + 'Set time scale of _PARAM0_ to _PARAM1_': + '\u5c06 _PARAM0_ \u7684\u65f6\u95f4\u6bd4\u4f8b\u8bbe\u4e3a _PARAM1_', + 'Set mix duration': '\u8bbe\u7f6e\u6df7\u5408\u65f6\u957f', + 'Set mix duration of _PARAM0_ to _PARAM1_': + '\u5c06 _PARAM0_ \u7684\u6df7\u5408\u65f6\u957f\u8bbe\u4e3a _PARAM1_', + 'Set Spine visibility': '\u8bbe\u7f6e Spine \u53ef\u89c1\u6027', + 'Set visibility of _PARAM0_ to _PARAM1_': + '\u5c06 _PARAM0_ \u7684\u53ef\u89c1\u6027\u8bbe\u4e3a _PARAM1_', + 'Set bone local position': '\u8bbe\u7f6e\u9aa8\u9abc\u5c40\u90e8\u4f4d\u7f6e', + 'Set bone _PARAM1_ position of _PARAM0_': + '\u8bbe\u7f6e _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u4f4d\u7f6e', + 'Offset bone local position': + '\u504f\u79fb\u9aa8\u9abc\u5c40\u90e8\u4f4d\u7f6e', + 'Offset bone _PARAM1_ of _PARAM0_': + '\u504f\u79fb _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_', + 'Set bone rotation': '\u8bbe\u7f6e\u9aa8\u9abc\u65cb\u8f6c', + 'Set bone _PARAM1_ rotation of _PARAM0_': + '\u8bbe\u7f6e _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u65cb\u8f6c', + 'Offset bone rotation': '\u504f\u79fb\u9aa8\u9abc\u65cb\u8f6c', + 'Offset bone _PARAM1_ rotation of _PARAM0_': + '\u504f\u79fb _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u65cb\u8f6c', + 'Set bone scale': '\u8bbe\u7f6e\u9aa8\u9abc\u7f29\u653e', + 'Set bone _PARAM1_ scale of _PARAM0_': + '\u8bbe\u7f6e _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u7f29\u653e', + 'Offset bone scale': '\u504f\u79fb\u9aa8\u9abc\u7f29\u653e', + 'Offset bone _PARAM1_ scale of _PARAM0_': + '\u504f\u79fb _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u7f29\u653e', + 'Reset bone': '\u91cd\u7f6e\u9aa8\u9abc', + 'Reset bone _PARAM1_ of _PARAM0_': + '\u91cd\u7f6e _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_', + 'Reset all bones': '\u91cd\u7f6e\u6240\u6709\u9aa8\u9abc', + 'Reset all bones of _PARAM0_': + '\u91cd\u7f6e _PARAM0_ \u7684\u6240\u6709\u9aa8\u9abc', + 'Set bone scene position': '\u8bbe\u7f6e\u9aa8\u9abc\u573a\u666f\u4f4d\u7f6e', + 'Set bone _PARAM1_ of _PARAM0_ to scene position': + '\u5c06 _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u79fb\u5230\u573a\u666f\u4f4d\u7f6e', + 'Rotate bone toward scene position': + '\u8ba9\u9aa8\u9abc\u671d\u5411\u573a\u666f\u4f4d\u7f6e', + 'Rotate bone _PARAM1_ of _PARAM0_ toward scene position': + '\u8ba9 _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u671d\u5411\u573a\u666f\u4f4d\u7f6e', + 'Set slot attachment': '\u8bbe\u7f6e\u63d2\u69fd\u9644\u4ef6', + 'Set slot _PARAM1_ attachment of _PARAM0_ to _PARAM2_': + '\u5c06 _PARAM0_ \u7684\u63d2\u69fd _PARAM1_ \u9644\u4ef6\u8bbe\u4e3a _PARAM2_', + 'Clear slot attachments': '\u6e05\u9664\u63d2\u69fd\u9644\u4ef6', + 'Clear attachments of _PARAM0_': + '\u6e05\u9664 _PARAM0_ \u7684\u63d2\u69fd\u9644\u4ef6', + 'Set slot color': '\u8bbe\u7f6e\u63d2\u69fd\u989c\u8272', + 'Set slot _PARAM1_ color of _PARAM0_': + '\u8bbe\u7f6e _PARAM0_ \u7684\u63d2\u69fd _PARAM1_ \u989c\u8272', + 'Set animation progress': '\u8bbe\u7f6e\u52a8\u753b\u8fdb\u5ea6', + 'Set animation progress of _PARAM0_': + '\u8bbe\u7f6e _PARAM0_ \u7684\u52a8\u753b\u8fdb\u5ea6', + 'Set IK constraint mix': '\u8bbe\u7f6e IK \u7ea6\u675f\u6df7\u5408', + 'Set IK constraint _PARAM1_ mix of _PARAM0_': + '\u8bbe\u7f6e _PARAM0_ \u7684 IK \u7ea6\u675f _PARAM1_ \u6df7\u5408', + 'Set transform constraint mix': + '\u8bbe\u7f6e\u53d8\u6362\u7ea6\u675f\u6df7\u5408', + 'Set transform constraint _PARAM1_ mix of _PARAM0_': + '\u8bbe\u7f6e _PARAM0_ \u7684\u53d8\u6362\u7ea6\u675f _PARAM1_ \u6df7\u5408', + 'Configure bone auto reset': + '\u914d\u7f6e\u9aa8\u9abc\u81ea\u52a8\u590d\u4f4d', + 'Configure auto reset for bone _PARAM1_ of _PARAM0_': + '\u914d\u7f6e _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u81ea\u52a8\u590d\u4f4d', + 'Show debug bones': '\u663e\u793a\u8c03\u8bd5\u9aa8\u9abc', + 'Show debug bones for _PARAM0_: _PARAM1_': + '\u663e\u793a _PARAM0_ \u8c03\u8bd5\u9aa8\u9abc\uff1a_PARAM1_', + 'Show debug extras': '\u663e\u793a\u8c03\u8bd5\u9644\u52a0\u5185\u5bb9', + 'Show debug extras for _PARAM0_: _PARAM1_': + '\u663e\u793a _PARAM0_ \u8c03\u8bd5\u9644\u52a0\u5185\u5bb9\uff1a_PARAM1_', + 'Draw bone ellipse area': '\u7ed8\u5236\u9aa8\u9abc\u692d\u5706\u533a\u57df', + 'Draw ellipse on bone _PARAM1_ of _PARAM0_': + '\u5728 _PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u4e0a\u7ed8\u5236\u692d\u5706', + 'Resolve scene blocking': '\u89e3\u6790\u573a\u666f\u963b\u6321', + 'Resolve scene mesh blocking for _PARAM0_': + '\u89e3\u6790 _PARAM0_ \u7684\u573a\u666f\u7f51\u683c\u963b\u6321', + 'Is ready': '\u5df2\u51c6\u5907\u597d', + '_PARAM0_ is ready': '_PARAM0_ \u5df2\u51c6\u5907\u597d', + 'Is loading': '\u6b63\u5728\u52a0\u8f7d', + '_PARAM0_ is loading': '_PARAM0_ \u6b63\u5728\u52a0\u8f7d', + 'Has loading error': '\u6709\u52a0\u8f7d\u9519\u8bef', + '_PARAM0_ has a loading error': '_PARAM0_ \u6709\u52a0\u8f7d\u9519\u8bef', + 'Bone exists': '\u9aa8\u9abc\u5b58\u5728', + 'Bone _PARAM1_ exists in _PARAM0_': + '_PARAM0_ \u4e2d\u5b58\u5728\u9aa8\u9abc _PARAM1_', + 'Slot exists': '\u63d2\u69fd\u5b58\u5728', + 'Slot _PARAM1_ exists in _PARAM0_': + '_PARAM0_ \u4e2d\u5b58\u5728\u63d2\u69fd _PARAM1_', + 'Current animation is': '\u5f53\u524d\u52a8\u753b\u4e3a', + 'Current animation of _PARAM0_ is _PARAM1_': + '_PARAM0_ \u7684\u5f53\u524d\u52a8\u753b\u4e3a _PARAM1_', + 'Event fired': '\u4e8b\u4ef6\u5df2\u89e6\u53d1', + 'Event _PARAM1_ fired on _PARAM0_': + '_PARAM0_ \u89e6\u53d1\u4e86\u4e8b\u4ef6 _PARAM1_', + 'Animation completed': '\u52a8\u753b\u5df2\u5b8c\u6210', + 'Animation _PARAM1_ completed on _PARAM0_': + '_PARAM0_ \u4e0a\u7684\u52a8\u753b _PARAM1_ \u5df2\u5b8c\u6210', + 'Has animation': '\u5b58\u5728\u52a8\u753b', + 'Animation _PARAM1_ exists in _PARAM0_': + '_PARAM0_ \u4e2d\u5b58\u5728\u52a8\u753b _PARAM1_', + 'Has skin': '\u5b58\u5728\u76ae\u80a4', + 'Skin _PARAM1_ exists in _PARAM0_': + '_PARAM0_ \u4e2d\u5b58\u5728\u76ae\u80a4 _PARAM1_', + 'Track is playing': '\u8f68\u9053\u6b63\u5728\u64ad\u653e', + 'Track _PARAM1_ is playing on _PARAM0_': + '_PARAM0_ \u7684\u8f68\u9053 _PARAM1_ \u6b63\u5728\u64ad\u653e', + 'Track animation complete': '\u8f68\u9053\u52a8\u753b\u5df2\u5b8c\u6210', + 'Track _PARAM1_ animation is complete on _PARAM0_': + '_PARAM0_ \u7684\u8f68\u9053 _PARAM1_ \u52a8\u753b\u5df2\u5b8c\u6210', + 'Bone is near scene position': + '\u9aa8\u9abc\u63a5\u8fd1\u573a\u666f\u4f4d\u7f6e', + 'Bone _PARAM1_ of _PARAM0_ is near scene position': + '_PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u63a5\u8fd1\u573a\u666f\u4f4d\u7f6e', + 'Bone auto reset active': '\u9aa8\u9abc\u81ea\u52a8\u590d\u4f4d\u4e2d', + 'Bone _PARAM1_ of _PARAM0_ is auto resetting': + '_PARAM0_ \u7684\u9aa8\u9abc _PARAM1_ \u6b63\u5728\u81ea\u52a8\u590d\u4f4d', + 'Scene blocked': '\u53d7\u5230\u573a\u666f\u963b\u6321', + '_PARAM0_ is scene blocked': '_PARAM0_ \u53d7\u5230\u573a\u666f\u963b\u6321', + 'Wall slide active': '\u5899\u9762\u6ed1\u884c\u4e2d', + '_PARAM0_ is wall sliding': '_PARAM0_ \u6b63\u5728\u5899\u9762\u6ed1\u884c', + 'Can wall jump': '\u53ef\u5899\u8df3', + '_PARAM0_ can wall jump': '_PARAM0_ \u53ef\u4ee5\u5899\u8df3', + 'Can ledge grab': '\u53ef\u6293\u8fb9', + '_PARAM0_ can ledge grab': '_PARAM0_ \u53ef\u4ee5\u6293\u8fb9', + 'On stable slope': '\u5728\u7a33\u5b9a\u659c\u5761\u4e0a', + '_PARAM0_ is on a stable slope': + '_PARAM0_ \u5728\u7a33\u5b9a\u659c\u5761\u4e0a', + 'Bone local X': '\u9aa8\u9abc\u5c40\u90e8 X', + 'Bone local Y': '\u9aa8\u9abc\u5c40\u90e8 Y', + 'Bone rotation': '\u9aa8\u9abc\u65cb\u8f6c', + 'Bone scale X': '\u9aa8\u9abc\u7f29\u653e X', + 'Bone scale Y': '\u9aa8\u9abc\u7f29\u653e Y', + 'Bone scene X': '\u9aa8\u9abc\u573a\u666f X', + 'Bone scene Y': '\u9aa8\u9abc\u573a\u666f Y', + 'Bone scene rotation': '\u9aa8\u9abc\u573a\u666f\u65cb\u8f6c', + 'Bone length': '\u9aa8\u9abc\u957f\u5ea6', + 'Bone child count': '\u9aa8\u9abc\u5b50\u7ea7\u6570\u91cf', + 'Animation duration': '\u52a8\u753b\u65f6\u957f', + 'Animation frame': '\u52a8\u753b\u5e27', + 'Event integer value': '\u4e8b\u4ef6\u6574\u6570\u503c', + 'Event float value': '\u4e8b\u4ef6\u5c0f\u6570\u503c', + 'Bone auto reset progress': + '\u9aa8\u9abc\u81ea\u52a8\u590d\u4f4d\u8fdb\u5ea6', + 'Scene block normal X': '\u573a\u666f\u963b\u6321\u6cd5\u7ebf X', + 'Scene block normal Y': '\u573a\u666f\u963b\u6321\u6cd5\u7ebf Y', + 'Current slope angle': '\u5f53\u524d\u659c\u5761\u89d2\u5ea6', + 'Current slope speed scale': + '\u5f53\u524d\u659c\u5761\u901f\u5ea6\u500d\u7387', + 'Last wall contact normal X': + '\u6700\u8fd1\u5899\u9762\u63a5\u89e6\u6cd5\u7ebf X', + 'Last collision strength': '\u6700\u8fd1\u78b0\u649e\u5f3a\u5ea6', + 'Bone parent name': '\u9aa8\u9abc\u7236\u7ea7\u540d\u79f0', + 'Current attachment name': '\u5f53\u524d\u9644\u4ef6\u540d\u79f0', + 'Event string value': '\u4e8b\u4ef6\u6587\u672c\u503c', + 'Debug info': '\u8c03\u8bd5\u4fe1\u606f', + 'Last collision object name': + '\u6700\u8fd1\u78b0\u649e\u5bf9\u8c61\u540d\u79f0', + 'Scene blocked wall name': '\u573a\u666f\u963b\u6321\u5899\u540d\u79f0', + 'Animation name': '\u52a8\u753b\u540d\u79f0', + Loop: '\u5faa\u73af', + 'Track index': '\u8f68\u9053\u7d22\u5f15', + 'Delay in seconds': '\u5ef6\u8fdf\uff08\u79d2\uff09', + 'Skin name': '\u76ae\u80a4\u540d\u79f0', + 'Duration in seconds': '\u6301\u7eed\u65f6\u95f4\uff08\u79d2\uff09', + 'Bone name': '\u9aa8\u9abc\u540d\u79f0', + 'Bone names': '\u9aa8\u9abc\u540d\u79f0\u5217\u8868', + 'Delta X': '\u504f\u79fb X', + 'Delta Y': '\u504f\u79fb Y', + Rotation: '\u65cb\u8f6c', + 'Delta rotation': '\u65cb\u8f6c\u504f\u79fb', + 'Scale X': '\u7f29\u653e X', + 'Scale Y': '\u7f29\u653e Y', + 'Delta scale X': '\u7f29\u653e\u504f\u79fb X', + 'Delta scale Y': '\u7f29\u653e\u504f\u79fb Y', + 'Scene X': '\u573a\u666f X', + 'Scene Y': '\u573a\u666f Y', + 'Offset angle': '\u504f\u79fb\u89d2\u5ea6', + 'Slot name': '\u63d2\u69fd\u540d\u79f0', + 'Attachment name': '\u9644\u4ef6\u540d\u79f0', + 'Red 0-255': '\u7ea2\u8272 0-255', + 'Green 0-255': '\u7eff\u8272 0-255', + 'Blue 0-255': '\u84dd\u8272 0-255', + 'Alpha 0-1': '\u900f\u660e\u5ea6 0-1', + 'Progress 0-1': '\u8fdb\u5ea6 0-1', + 'Constraint name': '\u7ea6\u675f\u540d\u79f0', + Mix: '\u6df7\u5408', + Channel: '\u901a\u9053', + Enabled: '\u542f\u7528', + Delay: '\u5ef6\u8fdf', + Duration: '\u6301\u7eed\u65f6\u95f4', + 'Radius X': '\u534a\u5f84 X', + 'Radius Y': '\u534a\u5f84 Y', + Radius: '\u534a\u5f84', + Color: '\u989c\u8272', + 'Current X': '\u5f53\u524d X', + 'Current Y': '\u5f53\u524d Y', + 'Previous X': '\u4e0a\u4e00\u5e27 X', + 'Previous Y': '\u4e0a\u4e00\u5e27 Y', + 'Event name': '\u4e8b\u4ef6\u540d\u79f0', + X: 'X', + Y: 'Y', +}; + +const getSpine43Translation = (translate, source) => { + const translated = translate(source); + if (translated && translated !== source) return translated; + + const documentLanguage = + typeof document !== 'undefined' && + document.documentElement && + document.documentElement.lang + ? document.documentElement.lang + : ''; + const language = + documentLanguage || + (typeof navigator !== 'undefined' && navigator.language + ? navigator.language + : ''); + if (/^zh(?:-|$)/i.test(language)) { + return SPINE43_ZH_CN[source] || source; + } + return source; +}; + +const getContent = (objectConfiguration) => { + const object = gd.castObject(objectConfiguration, gd.ObjectJsImplementation); + return object.content || {}; +}; + +/** @type {ExtensionModule} */ +module.exports = { + createExtension: function (_, gd) { + const tr = (source) => getSpine43Translation(_, source); + const extension = new gd.PlatformExtension(); + extension + .setExtensionInformation( + 'Spine43Object', + tr('Spine (experimental)'), + tr( + 'Display and animate Spine skeletons, including Spine 4.3 physics constraints.' + ), + 'OpenAI Codex / Spine43SpriteShell migration', + 'Open source (MIT License)' + ) + .setShortDescription( + tr( + 'Native Spine object with Spine 4.3 support, editor preview, physics constraint updates, bones, slots and blocking hooks.' + ) + ) + .setDimension('2D') + .setExtensionHelpPath('/objects/spine43') + .setCategory('Advanced'); + + extension + .addInstructionOrExpressionGroupMetadata(tr('Spine')) + .setIcon(ICON); + + const spine43Object = new gd.ObjectJsImplementation(); + spine43Object.content = { + opacity: 255, + runtimeScriptPath: DEFAULT_RUNTIME_SCRIPT_PATH, + skeletonResource: '', + atlasResource: '', + binaryData: false, + importScale: 1, + skinName: '', + animationName: '', + loop: true, + mixDuration: 0.2, + timeScale: 1, + visible: true, + editorPhysicsPreview: true, + editorMaxDelta: 0.05, + editorAnimationPreview: { + playing: true, + progress: 0, + lockProgress: false, + }, + inspectorOverrides: { + bones: {}, + constraints: {}, + slots: {}, + }, + meshPreview: { + showAllSlots: true, + slotName: '', + }, + }; + + spine43Object.updateProperty = function (propertyName, newValue) { + const content = this.content; + if (propertyName === 'RuntimeScriptPath') { + content.runtimeScriptPath = newValue; + return true; + } + if (propertyName === 'SkeletonResource') { + content.skeletonResource = newValue; + return true; + } + if (propertyName === 'AtlasResource') { + content.atlasResource = newValue; + return true; + } + if (propertyName === 'BinaryData') { + content.binaryData = newValue === '1'; + return true; + } + if (propertyName === 'ImportScale') { + content.importScale = parseFloat(newValue) || 1; + return true; + } + if (propertyName === 'SkinName') { + content.skinName = newValue; + return true; + } + if (propertyName === 'AnimationName') { + content.animationName = newValue; + return true; + } + if (propertyName === 'Loop') { + content.loop = newValue === '1'; + return true; + } + if (propertyName === 'MixDuration') { + content.mixDuration = parseFloat(newValue) || 0; + return true; + } + if (propertyName === 'TimeScale') { + content.timeScale = parseFloat(newValue) || 1; + return true; + } + if (propertyName === 'Opacity') { + content.opacity = parseFloat(newValue) || 255; + return true; + } + if (propertyName === 'Visible') { + content.visible = newValue === '1'; + return true; + } + if (propertyName === 'EditorPhysicsPreview') { + content.editorPhysicsPreview = newValue === '1'; + return true; + } + if (propertyName === 'EditorMaxDelta') { + content.editorMaxDelta = parseFloat(newValue) || 0.05; + return true; + } + return false; + }; + + spine43Object.getProperties = function () { + const properties = new gd.MapStringPropertyDescriptor(); + const content = this.content; + + properties + .getOrCreate('SkeletonResource') + .setValue(content.skeletonResource) + .setType('resource') + .addExtraInfo('spine') + .setLabel(tr('Skeleton resource (.json or .skel)')) + .setGroup(tr('Spine resources')); + properties + .getOrCreate('AtlasResource') + .setValue(content.atlasResource) + .setType('resource') + .addExtraInfo('atlas') + .setLabel(tr('Atlas resource')) + .setGroup(tr('Spine resources')); + properties + .getOrCreate('BinaryData') + .setValue(content.binaryData ? 'true' : 'false') + .setType('boolean') + .setLabel(tr('Skeleton is binary .skel')) + .setGroup(tr('Spine resources')); + properties + .getOrCreate('ImportScale') + .setValue(String(content.importScale || 1)) + .setType('number') + .setLabel(tr('Import scale')) + .setGroup(tr('Spine resources')); + + properties + .getOrCreate('Loop') + .setValue(content.loop ? 'true' : 'false') + .setType('boolean') + .setLabel(tr('Loop initial animation')) + .setGroup(tr('Playback')); + properties + .getOrCreate('MixDuration') + .setValue(String(content.mixDuration || 0)) + .setType('number') + .setLabel(tr('Default mix duration')) + .setGroup(tr('Playback')); + properties + .getOrCreate('TimeScale') + .setValue(String(content.timeScale || 1)) + .setType('number') + .setLabel(tr('Time scale')) + .setGroup(tr('Playback')); + + properties + .getOrCreate('Visible') + .setValue(content.visible ? 'true' : 'false') + .setType('boolean') + .setLabel(tr('Visible')) + .setGroup(tr('Display')); + properties + .getOrCreate('Opacity') + .setValue(String(content.opacity || 255)) + .setType('number') + .setLabel(tr('Opacity')) + .setGroup(tr('Display')); + + properties + .getOrCreate('EditorPhysicsPreview') + .setValue(content.editorPhysicsPreview ? 'true' : 'false') + .setType('boolean') + .setLabel(tr('Preview physics constraints in the editor')) + .setGroup(tr('Editor preview')); + properties + .getOrCreate('EditorMaxDelta') + .setValue(String(content.editorMaxDelta || 0.05)) + .setType('number') + .setLabel(tr('Maximum editor update delta')) + .setGroup(tr('Editor preview')); + + return properties; + }; + + spine43Object.updateInitialInstanceProperty = function ( + instance, + propertyName, + newValue + ) { + if (propertyName === 'AnimationName') { + instance.setRawStringProperty('animationName', newValue); + return true; + } + return false; + }; + + spine43Object.getInitialInstanceProperties = function (instance) { + const properties = new gd.MapStringPropertyDescriptor(); + return properties; + }; + + const object = extension + .addObject( + OBJECT_TYPE, + tr('Spine (experimental)'), + tr( + 'Display Spine skeletons as a native object, including Spine 4.3 files.' + ), + ICON, + // @ts-ignore - ObjectJsImplementation is accepted by JS extensions. + spine43Object + ) + .setIncludeFile('Extensions/Spine43Object/spine43runtimeobject.js') + .addIncludeFile('Extensions/Spine43Object/spine43-gdevelop-runtime.js') + .addIncludeFile('Extensions/Spine43Object/spine-pixi-v7.js') + .setCategory('Advanced') + .addDefaultBehavior('EffectCapability::EffectBehavior') + .addDefaultBehavior('ResizableCapability::ResizableBehavior') + .addDefaultBehavior('ScalableCapability::ScalableBehavior') + .addDefaultBehavior('FlippableCapability::FlippableBehavior') + .addDefaultBehavior('OpacityCapability::OpacityBehavior'); + + const addObjectParameter = (metadata) => + metadata.addParameter('object', tr('Spine object'), OBJECT_TYPE, false); + + const addAction = (name, fullName, sentence, parameters, functionName) => { + let metadata = object.addAction( + name, + fullName, + fullName, + sentence, + tr('Spine'), + ICON, + ICON + ); + metadata = addObjectParameter(metadata); + for (const parameter of parameters) { + metadata = metadata.addParameter( + parameter.type, + parameter.label, + parameter.supplementaryInformation || '', + !!parameter.optional + ); + } + metadata.getCodeExtraInformation().setFunctionName(functionName); + return metadata; + }; + + const addCondition = ( + name, + fullName, + sentence, + parameters, + functionName + ) => { + let metadata = object.addCondition( + name, + fullName, + fullName, + sentence, + tr('Spine'), + ICON, + ICON + ); + metadata = addObjectParameter(metadata); + for (const parameter of parameters) { + metadata = metadata.addParameter( + parameter.type, + parameter.label, + parameter.supplementaryInformation || '', + !!parameter.optional + ); + } + metadata.getCodeExtraInformation().setFunctionName(functionName); + return metadata; + }; + + const addNumberExpression = (name, fullName, parameters, functionName) => { + let metadata = object.addExpression( + name, + fullName, + fullName, + tr('Spine'), + ICON + ); + metadata = addObjectParameter(metadata); + for (const parameter of parameters) { + metadata = metadata.addParameter( + parameter.type, + parameter.label, + parameter.supplementaryInformation || '', + !!parameter.optional + ); + } + metadata.getCodeExtraInformation().setFunctionName(functionName); + return metadata; + }; + + const addStringExpression = (name, fullName, parameters, functionName) => { + let metadata = object.addStrExpression( + name, + fullName, + fullName, + tr('Spine'), + ICON + ); + metadata = addObjectParameter(metadata); + for (const parameter of parameters) { + metadata = metadata.addParameter( + parameter.type, + parameter.label, + parameter.supplementaryInformation || '', + !!parameter.optional + ); + } + metadata.getCodeExtraInformation().setFunctionName(functionName); + return metadata; + }; + + const stringParam = (label) => ({ type: 'string', label }); + const spine43StringParam = (label, nameKind) => ({ + type: 'string', + label, + supplementaryInformation: nameKind, + }); + const animationParam = (label) => + spine43StringParam(label, 'spine43AnimationName'); + const skinParam = (label) => spine43StringParam(label, 'spine43SkinName'); + const slotParam = (label) => spine43StringParam(label, 'spine43SlotName'); + const attachmentParam = (label) => + spine43StringParam(label, 'spine43AttachmentName'); + const numberParam = (label) => ({ type: 'expression', label }); + const yesNoParam = (label) => ({ type: 'yesorno', label }); + + addAction( + 'Reload', + tr('Reload Spine resources'), + tr('Reload _PARAM0_'), + [], + 'reload' + ); + addAction( + 'PlayAnimation', + tr('Play animation'), + tr('Play animation _PARAM1_ on _PARAM0_'), + [animationParam(tr('Animation name')), yesNoParam(tr('Loop'))], + 'playAnimation' + ); + addAction( + 'SetAnimationOnTrack', + tr('Play animation on track'), + tr('Play _PARAM2_ on track _PARAM1_ of _PARAM0_'), + [ + numberParam(tr('Track index')), + animationParam(tr('Animation name')), + yesNoParam(tr('Loop')), + ], + 'setAnimationOnTrack' + ); + addAction( + 'AddAnimation', + tr('Queue animation'), + tr('Queue _PARAM2_ on track _PARAM1_ of _PARAM0_'), + [ + numberParam(tr('Track index')), + animationParam(tr('Animation name')), + yesNoParam(tr('Loop')), + numberParam(tr('Delay in seconds')), + ], + 'addAnimation' + ); + addAction( + 'ClearTrack', + tr('Clear track'), + tr('Clear track _PARAM1_ of _PARAM0_'), + [numberParam(tr('Track index'))], + 'clearTrack' + ); + addAction( + 'ClearTracks', + tr('Clear all tracks'), + tr('Clear all tracks of _PARAM0_'), + [], + 'clearTracks' + ); + addAction( + 'SetSkin', + tr('Set skin'), + tr('Set skin of _PARAM0_ to _PARAM1_'), + [skinParam(tr('Skin name'))], + 'setSkin' + ); + addAction( + 'SetTimeScale', + tr('Set time scale'), + tr('Set time scale of _PARAM0_ to _PARAM1_'), + [numberParam(tr('Time scale'))], + 'setTimeScale' + ); + addAction( + 'SetMixDuration', + tr('Set mix duration'), + tr('Set mix duration of _PARAM0_ to _PARAM1_'), + [numberParam(tr('Duration in seconds'))], + 'setMixDuration' + ); + addAction( + 'SetVisible', + tr('Set Spine visibility'), + tr('Set visibility of _PARAM0_ to _PARAM1_'), + [yesNoParam(tr('Visible'))], + 'setVisible' + ); + + addAction( + 'SetBonePosition', + tr('Set bone local position'), + tr('Set bone _PARAM1_ position of _PARAM0_'), + [ + stringParam(tr('Bone name')), + numberParam(tr('X')), + numberParam(tr('Y')), + ], + 'setBonePosition' + ); + addAction( + 'OffsetBonePosition', + tr('Offset bone local position'), + tr('Offset bone _PARAM1_ of _PARAM0_'), + [ + stringParam(tr('Bone name')), + numberParam(tr('Delta X')), + numberParam(tr('Delta Y')), + ], + 'offsetBonePosition' + ); + addAction( + 'SetBoneRotation', + tr('Set bone rotation'), + tr('Set bone _PARAM1_ rotation of _PARAM0_'), + [stringParam(tr('Bone name')), numberParam(tr('Rotation'))], + 'setBoneRotation' + ); + addAction( + 'OffsetBoneRotation', + tr('Offset bone rotation'), + tr('Offset bone _PARAM1_ rotation of _PARAM0_'), + [stringParam(tr('Bone name')), numberParam(tr('Delta rotation'))], + 'offsetBoneRotation' + ); + addAction( + 'SetBoneScale', + tr('Set bone scale'), + tr('Set bone _PARAM1_ scale of _PARAM0_'), + [ + stringParam(tr('Bone name')), + numberParam(tr('Scale X')), + numberParam(tr('Scale Y')), + ], + 'setBoneScale' + ); + addAction( + 'OffsetBoneScale', + tr('Offset bone scale'), + tr('Offset bone _PARAM1_ scale of _PARAM0_'), + [ + stringParam(tr('Bone name')), + numberParam(tr('Delta scale X')), + numberParam(tr('Delta scale Y')), + ], + 'offsetBoneScale' + ); + addAction( + 'ResetBone', + tr('Reset bone'), + tr('Reset bone _PARAM1_ of _PARAM0_'), + [stringParam(tr('Bone name'))], + 'resetBone' + ); + addAction( + 'ResetAllBones', + tr('Reset all bones'), + tr('Reset all bones of _PARAM0_'), + [], + 'resetAllBones' + ); + addAction( + 'SetBoneScenePosition', + tr('Set bone scene position'), + tr('Set bone _PARAM1_ of _PARAM0_ to scene position'), + [ + stringParam(tr('Bone name')), + numberParam(tr('Scene X')), + numberParam(tr('Scene Y')), + ], + 'setBoneScenePosition' + ); + addAction( + 'SetBoneSceneRotationToward', + tr('Rotate bone toward scene position'), + tr('Rotate bone _PARAM1_ of _PARAM0_ toward scene position'), + [ + stringParam(tr('Bone name')), + numberParam(tr('Scene X')), + numberParam(tr('Scene Y')), + numberParam(tr('Offset angle')), + ], + 'setBoneSceneRotationToward' + ); + + addAction( + 'SetAttachment', + tr('Set slot attachment'), + tr('Set slot _PARAM1_ attachment of _PARAM0_ to _PARAM2_'), + [slotParam(tr('Slot name')), attachmentParam(tr('Attachment name'))], + 'setAttachment' + ); + addAction( + 'ClearAttachments', + tr('Clear slot attachments'), + tr('Clear attachments of _PARAM0_'), + [], + 'clearAttachments' + ); + addAction( + 'SetSlotColor', + tr('Set slot color'), + tr('Set slot _PARAM1_ color of _PARAM0_'), + [ + slotParam(tr('Slot name')), + numberParam(tr('Red 0-255')), + numberParam(tr('Green 0-255')), + numberParam(tr('Blue 0-255')), + numberParam(tr('Alpha 0-1')), + ], + 'setSlotColor' + ); + addAction( + 'SetAnimationProgress', + tr('Set animation progress'), + tr('Set animation progress of _PARAM0_'), + [numberParam(tr('Track index')), numberParam(tr('Progress 0-1'))], + 'setAnimationProgress' + ); + addAction( + 'SetIkConstraintMix', + tr('Set IK constraint mix'), + tr('Set IK constraint _PARAM1_ mix of _PARAM0_'), + [stringParam(tr('Constraint name')), numberParam(tr('Mix'))], + 'setIkConstraintMix' + ); + addAction( + 'SetTransformConstraintMix', + tr('Set transform constraint mix'), + tr('Set transform constraint _PARAM1_ mix of _PARAM0_'), + [stringParam(tr('Constraint name')), numberParam(tr('Mix'))], + 'setTransformConstraintMix' + ); + addAction( + 'ConfigureBoneAutoReset', + tr('Configure bone auto reset'), + tr('Configure auto reset for bone _PARAM1_ of _PARAM0_'), + [ + stringParam(tr('Bone names')), + stringParam(tr('Channel')), + yesNoParam(tr('Enabled')), + numberParam(tr('Delay')), + numberParam(tr('Duration')), + ], + 'configureBoneAutoReset' + ); + addAction( + 'SetDebugVisible', + tr('Show debug bones'), + tr('Show debug bones for _PARAM0_: _PARAM1_'), + [yesNoParam(tr('Visible'))], + 'setDebugVisible' + ); + addAction( + 'SetDebugExtrasVisible', + tr('Show debug extras'), + tr('Show debug extras for _PARAM0_: _PARAM1_'), + [yesNoParam(tr('Visible'))], + 'setDebugExtrasVisible' + ); + addAction( + 'DrawBoneEllipse', + tr('Draw bone ellipse area'), + tr('Draw ellipse on bone _PARAM1_ of _PARAM0_'), + [ + stringParam(tr('Bone name')), + numberParam(tr('Radius X')), + numberParam(tr('Radius Y')), + stringParam(tr('Color')), + ], + 'drawBoneEllipse' + ); + addAction( + 'ResolveSceneBlocking', + tr('Resolve scene blocking'), + tr('Resolve scene mesh blocking for _PARAM0_'), + [ + numberParam(tr('Current X')), + numberParam(tr('Current Y')), + numberParam(tr('Previous X')), + numberParam(tr('Previous Y')), + ], + 'resolveSceneBlocking' + ); + + addCondition( + 'IsReady', + tr('Is ready'), + tr('_PARAM0_ is ready'), + [], + 'isReady' + ); + addCondition( + 'IsLoading', + tr('Is loading'), + tr('_PARAM0_ is loading'), + [], + 'isLoading' + ); + addCondition( + 'HasError', + tr('Has loading error'), + tr('_PARAM0_ has a loading error'), + [], + 'hasError' + ); + addCondition( + 'BoneExists', + tr('Bone exists'), + tr('Bone _PARAM1_ exists in _PARAM0_'), + [stringParam(tr('Bone name'))], + 'boneExists' + ); + addCondition( + 'SlotExists', + tr('Slot exists'), + tr('Slot _PARAM1_ exists in _PARAM0_'), + [slotParam(tr('Slot name'))], + 'slotExists' + ); + addCondition( + 'CurrentAnimationIs', + tr('Current animation is'), + tr('Current animation of _PARAM0_ is _PARAM1_'), + [animationParam(tr('Animation name'))], + 'currentAnimationIs' + ); + addCondition( + 'EventFired', + tr('Event fired'), + tr('Event _PARAM1_ fired on _PARAM0_'), + [stringParam(tr('Event name'))], + 'eventFired' + ); + addCondition( + 'AnimationCompleted', + tr('Animation completed'), + tr('Animation _PARAM1_ completed on _PARAM0_'), + [animationParam(tr('Animation name'))], + 'animationCompleted' + ); + addCondition( + 'HasAnimation', + tr('Has animation'), + tr('Animation _PARAM1_ exists in _PARAM0_'), + [animationParam(tr('Animation name'))], + 'hasAnimation' + ); + addCondition( + 'HasSkin', + tr('Has skin'), + tr('Skin _PARAM1_ exists in _PARAM0_'), + [skinParam(tr('Skin name'))], + 'hasSkin' + ); + addCondition( + 'IsPlayingOnTrack', + tr('Track is playing'), + tr('Track _PARAM1_ is playing on _PARAM0_'), + [numberParam(tr('Track index'))], + 'isPlayingOnTrack' + ); + addCondition( + 'IsTrackAnimationComplete', + tr('Track animation complete'), + tr('Track _PARAM1_ animation is complete on _PARAM0_'), + [numberParam(tr('Track index'))], + 'isTrackAnimationComplete' + ); + addCondition( + 'IsBoneNearPosition', + tr('Bone is near scene position'), + tr('Bone _PARAM1_ of _PARAM0_ is near scene position'), + [ + stringParam(tr('Bone name')), + numberParam(tr('Scene X')), + numberParam(tr('Scene Y')), + numberParam(tr('Radius')), + ], + 'isBoneNearPosition' + ); + addCondition( + 'BoneAutoResetActive', + tr('Bone auto reset active'), + tr('Bone _PARAM1_ of _PARAM0_ is auto resetting'), + [stringParam(tr('Bone name')), stringParam(tr('Channel'))], + 'isBoneAutoResetActive' + ); + addCondition( + 'SceneBlocked', + tr('Scene blocked'), + tr('_PARAM0_ is scene blocked'), + [], + 'isSceneBlocked' + ); + addCondition( + 'WallSlideActive', + tr('Wall slide active'), + tr('_PARAM0_ is wall sliding'), + [], + 'isWallSlideActive' + ); + addCondition( + 'CanWallJump', + tr('Can wall jump'), + tr('_PARAM0_ can wall jump'), + [], + 'canWallJump' + ); + addCondition( + 'CanLedgeGrab', + tr('Can ledge grab'), + tr('_PARAM0_ can ledge grab'), + [], + 'canLedgeGrab' + ); + addCondition( + 'OnStableSlope', + tr('On stable slope'), + tr('_PARAM0_ is on a stable slope'), + [], + 'isOnStableSlope' + ); + + addNumberExpression('TimeScaleValue', tr('Time scale'), [], 'getTimeScale'); + addNumberExpression( + 'BoneX', + tr('Bone local X'), + [stringParam(tr('Bone name'))], + 'getBoneX' + ); + addNumberExpression( + 'BoneY', + tr('Bone local Y'), + [stringParam(tr('Bone name'))], + 'getBoneY' + ); + addNumberExpression( + 'BoneRotation', + tr('Bone rotation'), + [stringParam(tr('Bone name'))], + 'getBoneRotation' + ); + addNumberExpression( + 'BoneScaleX', + tr('Bone scale X'), + [stringParam(tr('Bone name'))], + 'getBoneScaleX' + ); + addNumberExpression( + 'BoneScaleY', + tr('Bone scale Y'), + [stringParam(tr('Bone name'))], + 'getBoneScaleY' + ); + addNumberExpression( + 'BoneSceneX', + tr('Bone scene X'), + [stringParam(tr('Bone name'))], + 'getBoneSceneX' + ); + addNumberExpression( + 'BoneSceneY', + tr('Bone scene Y'), + [stringParam(tr('Bone name'))], + 'getBoneSceneY' + ); + addNumberExpression( + 'BoneSceneRotation', + tr('Bone scene rotation'), + [stringParam(tr('Bone name'))], + 'getBoneSceneRotation' + ); + addNumberExpression( + 'BoneLength', + tr('Bone length'), + [stringParam(tr('Bone name'))], + 'getBoneLength' + ); + addNumberExpression( + 'BoneChildCount', + tr('Bone child count'), + [stringParam(tr('Bone name'))], + 'getBoneChildCount' + ); + addNumberExpression( + 'AnimationDuration', + tr('Animation duration'), + [animationParam(tr('Animation name'))], + 'getAnimationDuration' + ); + addNumberExpression( + 'AnimationFrame', + tr('Animation frame'), + [numberParam(tr('Track index'))], + 'getAnimationFrame' + ); + addNumberExpression( + 'EventInt', + tr('Event integer value'), + [], + 'getEventInt' + ); + addNumberExpression( + 'EventFloat', + tr('Event float value'), + [], + 'getEventFloat' + ); + addNumberExpression( + 'BoneAutoResetProgress', + tr('Bone auto reset progress'), + [stringParam(tr('Bone name')), stringParam(tr('Channel'))], + 'getBoneAutoResetProgress' + ); + addNumberExpression( + 'SceneBlockNormalX', + tr('Scene block normal X'), + [], + 'getSceneBlockNormalX' + ); + addNumberExpression( + 'SceneBlockNormalY', + tr('Scene block normal Y'), + [], + 'getSceneBlockNormalY' + ); + addNumberExpression( + 'CurrentSlopeAngle', + tr('Current slope angle'), + [], + 'getCurrentSlopeAngle' + ); + addNumberExpression( + 'CurrentSlopeSpeedScale', + tr('Current slope speed scale'), + [], + 'getCurrentSlopeSpeedScale' + ); + addNumberExpression( + 'LastWallContactNormalX', + tr('Last wall contact normal X'), + [], + 'getLastWallContactNormalX' + ); + addNumberExpression( + 'LastCollisionStrength', + tr('Last collision strength'), + [], + 'getLastCollisionStrength' + ); + + addStringExpression( + 'BoneParentName', + tr('Bone parent name'), + [stringParam(tr('Bone name'))], + 'getBoneParentName' + ); + addStringExpression( + 'CurrentAttachmentName', + tr('Current attachment name'), + [slotParam(tr('Slot name'))], + 'getCurrentAttachmentName' + ); + addStringExpression( + 'EventString', + tr('Event string value'), + [], + 'getEventString' + ); + addStringExpression('DebugInfo', tr('Debug info'), [], 'getDebugInfo'); + addStringExpression( + 'LastCollisionObjectName', + tr('Last collision object name'), + [], + 'getLastCollisionObjectName' + ); + addStringExpression( + 'SceneBlockedWallName', + tr('Scene blocked wall name'), + [], + 'getSceneBlockedWallName' + ); + + return extension; + }, + + runExtensionSanityTests: function (gd, extension) { + return []; + }, + + registerEditorConfigurations: function (objectsEditorService) { + const objectsEditorServiceAny = /** @type {any} */ (objectsEditorService); + if ( + objectsEditorServiceAny.editorConfigurations && + objectsEditorServiceAny.editorConfigurations[FULL_OBJECT_TYPE] + ) { + return; + } + + objectsEditorService.registerEditorConfiguration( + FULL_OBJECT_TYPE, + objectsEditorService.getDefaultObjectJsImplementationPropertiesEditor({ + helpPagePath: '/objects/spine43', + }) + ); + }, + + registerInstanceRenderers: function (objectsRenderingService) { + const RenderedInstance = objectsRenderingService.RenderedInstance; + const PIXI = objectsRenderingService.PIXI; + const EDITOR_RUNTIME_BASE_URL = + 'http://127.0.0.1:5002/Runtime/Extensions/Spine43Object/'; + const normalizePath = (value) => String(value || '').replace(/\\/g, '/'); + const isAbsoluteUrl = (value) => + /^(?:https?:|file:|data:|blob:)/i.test(String(value || '')); + const getNodeRequire = () => { + if ( + typeof global !== 'undefined' && + typeof global.require === 'function' + ) { + return global.require; + } + if ( + typeof window !== 'undefined' && + typeof window.require === 'function' + ) { + return window.require; + } + return null; + }; + const toFileUrl = (absolutePath) => { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + try { + const nodeUrl = nodeRequire('url'); + if (nodeUrl && nodeUrl.pathToFileURL) { + return nodeUrl.pathToFileURL(absolutePath).toString(); + } + } catch (error) { + // Fall back to a manually-built file URL below. + } + } + return 'file:///' + normalizePath(absolutePath).replace(/^\/+/, ''); + }; + const resolveEditorResourceUrl = (project, resourceNameOrFile) => { + const value = String(resourceNameOrFile || '').trim(); + if (!value) return ''; + + let file = value; + try { + const resourcesManager = + project && + project.getResourcesManager && + project.getResourcesManager(); + if (resourcesManager && resourcesManager.hasResource(value)) { + const resource = resourcesManager.getResource(value); + if (resource && resource.getFile) { + file = resource.getFile(); + } + } + } catch (error) { + file = value; + } + + if (!file || isAbsoluteUrl(file)) return file; + + const nodeRequire = getNodeRequire(); + try { + if (nodeRequire && project && project.getProjectFile) { + const nodePath = nodeRequire('path'); + const projectFile = project.getProjectFile(); + if (projectFile) { + const projectDirectory = nodePath.dirname(projectFile); + return toFileUrl(nodePath.resolve(projectDirectory, file)); + } + } + } catch (error) { + // Keep the original value when the editor cannot resolve local paths. + } + + if (/^[a-zA-Z]:[\\/]/.test(file)) { + return toFileUrl(file); + } + + return file; + }; + const toErrorMessage = (error, fallback) => { + if (!error) return fallback; + if (error.message) return error.message; + if (error.type && error.target && error.target.src) { + return `${error.type}: ${error.target.src}`; + } + return String(error); + }; + const rejectScriptLoad = (reject, url, event) => { + if (event && event.preventDefault) event.preventDefault(); + if (event && event.stopPropagation) event.stopPropagation(); + reject(new Error(`Failed to load Spine 4.3 editor script: ${url}`)); + return true; + }; + const getEditorWindow = () => /** @type {any} */ (window); + const loadEditorScriptFromLocalFile = (filename) => { + const nodeRequire = getNodeRequire(); + if (!nodeRequire || typeof __dirname === 'undefined') return null; + + try { + const nodeFs = nodeRequire('fs'); + const nodePath = nodeRequire('path'); + const filePath = nodePath.join(__dirname, filename); + const source = nodeFs.readFileSync(filePath, 'utf8'); + const sourceUrl = toFileUrl(filePath); + const existing = document.querySelector( + 'script[data-gd-spine43-editor="' + sourceUrl + '"]' + ); + if (existing && existing.getAttribute('data-loaded') === '1') { + return Promise.resolve(); + } + + return new Promise((resolve, reject) => { + try { + const script = document.createElement('script'); + script.setAttribute('data-gd-spine43-editor', sourceUrl); + script.text = `${source}\n//# sourceURL=${sourceUrl}`; + document.head.appendChild(script); + script.setAttribute('data-loaded', '1'); + resolve(undefined); + } catch (error) { + reject( + new Error( + `Failed to evaluate Spine 4.3 editor script ${sourceUrl}: ${toErrorMessage( + error, + 'unknown error' + )}` + ) + ); + } + }); + } catch (error) { + return Promise.reject( + new Error( + `Failed to read Spine 4.3 editor script ${filename}: ${toErrorMessage( + error, + 'unknown error' + )}` + ) + ); + } + }; + + const loadEditorScript = (filename) => { + if (typeof window === 'undefined' || typeof document === 'undefined') { + return Promise.reject(new Error('Editor window is not available.')); + } + getEditorWindow().PIXI = PIXI; + if ( + filename === 'spine43-gdevelop-runtime.js' && + getEditorWindow().GDSpine43Adapter + ) { + return Promise.resolve(); + } + if (filename === 'spine-pixi-v7.js' && getEditorWindow().spine) { + return Promise.resolve(); + } + + const localScriptPromise = loadEditorScriptFromLocalFile(filename); + if (localScriptPromise) return localScriptPromise; + + const url = EDITOR_RUNTIME_BASE_URL + filename; + const existing = document.querySelector( + 'script[data-gd-spine43-editor="' + url + '"]' + ); + if (existing) { + if (existing.getAttribute('data-loaded') === '1') { + return Promise.resolve(); + } + return new Promise((resolve, reject) => { + existing.addEventListener('load', () => resolve(undefined), { + once: true, + }); + existing.addEventListener( + 'error', + (event) => rejectScriptLoad(reject, url, event), + { once: true, capture: true } + ); + }); + } + + return new Promise((resolve, reject) => { + const script = document.createElement('script'); + script.async = true; + script.src = url; + script.setAttribute('data-gd-spine43-editor', url); + script.addEventListener( + 'load', + () => { + script.setAttribute('data-loaded', '1'); + resolve(undefined); + }, + { once: true } + ); + script.addEventListener( + 'error', + (event) => rejectScriptLoad(reject, url, event), + { once: true, capture: true } + ); + document.head.appendChild(script); + }); + }; + + const ensureEditorRuntime = () => + loadEditorScript('spine-pixi-v7.js').then(() => + loadEditorScript('spine43-gdevelop-runtime.js') + ); + + class RenderedSpine43Instance extends RenderedInstance { + constructor( + project, + instance, + associatedObjectConfiguration, + pixiContainer, + pixiResourcesLoader + ) { + super( + project, + instance, + associatedObjectConfiguration, + pixiContainer, + pixiResourcesLoader + ); + + this._placeholder = new PIXI.Sprite( + this._pixiResourcesLoader.getInvalidPIXITexture() + ); + this._placeholder.alpha = 0; + this._pixiObject = new PIXI.Container(); + this._pixiObject.addChild(this._placeholder); + this._pixiContainer.addChild(this._pixiObject); + this._handle = null; + this._loadingKey = ''; + this._loadingPromise = null; + this._lastError = null; + this._lastUpdateTime = undefined; + this._lastAnimationName = undefined; + this._lastSkinName = undefined; + this._defaultWidth = 256; + this._defaultHeight = 256; + this._spineOriginOffsetX = 0; + this._spineOriginOffsetY = 0; + this._displayScaleX = 1; + this._displayScaleY = 1; + this._lastPhysicsSceneX = undefined; + this._lastPhysicsSceneY = undefined; + this._lastPhysicsSceneAngle = undefined; + + this._loadSpine(); + } + + _getSpineBounds() { + if (this._handle && getEditorWindow().GDSpine43Adapter) { + try { + if (getEditorWindow().GDSpine43Adapter.getSceneAttachmentBounds) { + const attachmentBounds = + getEditorWindow().GDSpine43Adapter.getSceneAttachmentBounds( + this._handle + ); + if ( + attachmentBounds && + Number.isFinite(attachmentBounds.left) && + Number.isFinite(attachmentBounds.top) && + Number.isFinite(attachmentBounds.right) && + Number.isFinite(attachmentBounds.bottom) && + attachmentBounds.right > attachmentBounds.left && + attachmentBounds.bottom > attachmentBounds.top + ) { + return { + x: attachmentBounds.left, + y: attachmentBounds.top, + width: attachmentBounds.right - attachmentBounds.left, + height: attachmentBounds.bottom - attachmentBounds.top, + }; + } + } + } catch (error) {} + } + + if ( + this._handle && + this._handle.container && + this._handle.container.getLocalBounds + ) { + try { + const bounds = this._handle.container.getLocalBounds(); + if ( + bounds && + Number.isFinite(bounds.x) && + Number.isFinite(bounds.y) && + Number.isFinite(bounds.width) && + Number.isFinite(bounds.height) && + bounds.width > 0 && + bounds.height > 0 + ) { + return bounds; + } + } catch (error) {} + } + + return null; + } + + static getThumbnail(project, resourcesLoader, objectConfiguration) { + return ICON; + } + + onRemovedFromScene() { + super.onRemovedFromScene(); + this._destroyHandle(); + this._pixiObject.destroy({ children: true, texture: false }); + } + + _destroyHandle() { + if (this._handle && getEditorWindow().GDSpine43Adapter) { + getEditorWindow().GDSpine43Adapter.destroyInstance(this._handle); + } + this._handle = null; + } + + _makeLoadingKey(content) { + return [ + content.runtimeScriptPath || DEFAULT_RUNTIME_SCRIPT_PATH, + this._resolveProjectResourceFile(content.skeletonResource || ''), + this._resolveProjectResourceFile(content.atlasResource || ''), + content.binaryData ? '1' : '0', + content.importScale || 1, + ].join('|'); + } + + _resolveProjectResourceFile(resourceNameOrFile) { + return resolveEditorResourceUrl(this._project, resourceNameOrFile); + } + + _loadSpine() { + const content = getContent(this._associatedObjectConfiguration); + const skeletonFile = this._resolveProjectResourceFile( + content.skeletonResource || '' + ); + const atlasFile = this._resolveProjectResourceFile( + content.atlasResource || '' + ); + const loadingKey = this._makeLoadingKey(content); + if ( + this._loadingKey === loadingKey && + (this._handle || this._loadingPromise) + ) { + return; + } + + this._loadingKey = loadingKey; + this._lastError = null; + this._destroyHandle(); + + if (!skeletonFile || !atlasFile) { + this._placeholder.alpha = 0.35; + return; + } + + this._loadingPromise = ensureEditorRuntime() + .then(() => + getEditorWindow().GDSpine43Adapter.createInstance({ + runtimeScriptPath: + content.runtimeScriptPath || DEFAULT_RUNTIME_SCRIPT_PATH, + skeletonFile, + atlasFile, + binaryData: !!content.binaryData, + importScale: Number(content.importScale) || 1, + skinName: content.skinName || '', + animationName: content.animationName || '', + loop: !!content.loop, + mixDuration: Number(content.mixDuration) || 0, + inspectorOverrides: content.inspectorOverrides || {}, + }) + ) + .then((handle) => { + if (this._wasDestroyed) { + getEditorWindow().GDSpine43Adapter.destroyInstance(handle); + return; + } + this._handle = handle; + this._pixiObject.addChild(handle.container); + this._disableAutomaticPhysicsInheritance(); + this._resetEditorPhysicsBaseline(); + if (handle.container.resetPhysicsTransform) { + this._pixiObject.updateTransform(); + handle.container.resetPhysicsTransform(); + } + this._placeholder.alpha = 0; + this._lastAnimationName = content.animationName || ''; + this._lastSkinName = content.skinName || ''; + this._loadingPromise = null; + }) + .catch((error) => { + this._lastError = error; + this._placeholder.alpha = 0.35; + this._loadingPromise = null; + console.error( + 'Unable to load Spine 4.3 in editor:', + toErrorMessage(error, 'unknown error') + ); + }); + } + + _disableAutomaticPhysicsInheritance() { + if ( + this._handle && + getEditorWindow().GDSpine43Adapter && + getEditorWindow().GDSpine43Adapter.setPhysicsTransformInheritance + ) { + getEditorWindow().GDSpine43Adapter.setPhysicsTransformInheritance( + this._handle, + 0, + 0, + 0 + ); + } + } + + _resetEditorPhysicsBaseline() { + this._lastPhysicsSceneX = this._instance.getX(); + this._lastPhysicsSceneY = this._instance.getY(); + this._lastPhysicsSceneAngle = this._instance.getAngle(); + } + + _getAngleDelta(currentAngle, previousAngle) { + let delta = currentAngle - previousAngle; + delta = ((delta + 180) % 360) - 180; + return delta < -180 ? delta + 360 : delta; + } + + _queueEditorPhysicsMovement() { + if ( + !this._handle || + !getEditorWindow().GDSpine43Adapter || + !getEditorWindow().GDSpine43Adapter.queuePhysicsMovement + ) { + return; + } + + const currentX = this._instance.getX(); + const currentY = this._instance.getY(); + const currentAngle = this._instance.getAngle(); + if ( + this._lastPhysicsSceneX === undefined || + this._lastPhysicsSceneY === undefined || + this._lastPhysicsSceneAngle === undefined + ) { + this._resetEditorPhysicsBaseline(); + return; + } + + const deltaX = currentX - this._lastPhysicsSceneX; + const deltaY = currentY - this._lastPhysicsSceneY; + const deltaAngle = this._getAngleDelta( + currentAngle, + this._lastPhysicsSceneAngle + ); + this._resetEditorPhysicsBaseline(); + + if ( + Math.abs(deltaX) <= 1e-8 && + Math.abs(deltaY) <= 1e-8 && + Math.abs(deltaAngle) <= 1e-8 + ) { + return; + } + + const inverseAngle = -RenderedInstance.toRad(currentAngle); + const cos = Math.cos(inverseAngle); + const sin = Math.sin(inverseAngle); + const localDeltaX = deltaX * cos - deltaY * sin; + const localDeltaY = deltaX * sin + deltaY * cos; + getEditorWindow().GDSpine43Adapter.queuePhysicsMovement( + this._handle, + localDeltaX, + localDeltaY, + deltaAngle + ); + } + + _updateDisplayScale() { + const customWidth = this._instance.hasCustomSize() + ? Number(this._instance.getCustomWidth()) + : 0; + const customHeight = this._instance.hasCustomSize() + ? Number(this._instance.getCustomHeight()) + : 0; + this._displayScaleX = + this._instance.hasCustomSize() && + Number.isFinite(customWidth) && + customWidth > 0 && + this._defaultWidth > 0 + ? customWidth / this._defaultWidth + : 1; + this._displayScaleY = + this._instance.hasCustomSize() && + Number.isFinite(customHeight) && + customHeight > 0 && + this._defaultHeight > 0 + ? customHeight / this._defaultHeight + : 1; + this._pixiObject.scale.set(this._displayScaleX, this._displayScaleY); + } + + update() { + const content = getContent(this._associatedObjectConfiguration); + this._loadSpine(); + + this._pixiObject.position.set( + this._instance.getX(), + this._instance.getY() + ); + this._pixiObject.rotation = RenderedInstance.toRad( + this._instance.getAngle() + ); + this._pixiObject.visible = content.visible !== false; + this._pixiObject.alpha = Math.max( + this._instance.getOpacity() / 255, + 0.5 + ); + this._updateDisplayScale(); + + if (this._handle && getEditorWindow().GDSpine43Adapter) { + const animationName = content.animationName || ''; + if (animationName && animationName !== this._lastAnimationName) { + getEditorWindow().GDSpine43Adapter.setAnimation( + this._handle, + animationName, + !!content.loop + ); + this._lastAnimationName = animationName; + } + + const skinName = content.skinName || ''; + if (skinName !== this._lastSkinName) { + getEditorWindow().GDSpine43Adapter.setSkin(this._handle, skinName); + this._lastSkinName = skinName; + } + + if (getEditorWindow().GDSpine43Adapter.setInspectorOverrides) { + getEditorWindow().GDSpine43Adapter.setInspectorOverrides( + this._handle, + content.inspectorOverrides || {} + ); + } + + if (content.editorPhysicsPreview === false) { + this._resetEditorPhysicsBaseline(); + } else { + this._queueEditorPhysicsMovement(); + } + + const now = + typeof performance !== 'undefined' ? performance.now() : Date.now(); + const maxDelta = Math.max(0, Number(content.editorMaxDelta) || 0.05); + const delta = + this._lastUpdateTime === undefined + ? 0 + : Math.min( + maxDelta, + Math.max(0, (now - this._lastUpdateTime) / 1000) + ); + this._lastUpdateTime = now; + + this._pixiObject.updateTransform(); + const animationPreview = content.editorAnimationPreview || {}; + const animationDelta = animationPreview.playing === false ? 0 : delta; + getEditorWindow().GDSpine43Adapter.updateInstance( + this._handle, + content.editorPhysicsPreview === false ? 0 : animationDelta + ); + if ( + animationPreview.lockProgress && + getEditorWindow().GDSpine43Adapter.setAnimationProgress + ) { + getEditorWindow().GDSpine43Adapter.setAnimationProgress( + this._handle, + 0, + Number(animationPreview.progress) || 0 + ); + } + + const bounds = this._getSpineBounds(); + if (bounds && Number.isFinite(bounds.width) && bounds.width > 0) { + this._defaultWidth = bounds.width; + this._defaultHeight = bounds.height; + this._spineOriginOffsetX = bounds.x; + this._spineOriginOffsetY = bounds.y; + this._placeholder.position.set(bounds.x, bounds.y); + const frame = this._placeholder.texture.frame; + this._placeholder.scale.x = bounds.width / frame.width; + this._placeholder.scale.y = bounds.height / frame.height; + } + } + } + + getOriginX() { + return -this._spineOriginOffsetX * Math.abs(this._displayScaleX); + } + + getOriginY() { + return -this._spineOriginOffsetY * Math.abs(this._displayScaleY); + } + + getCenterX() { + return this.getOriginX(); + } + + getCenterY() { + return this.getOriginY(); + } + + getDefaultWidth() { + return this._defaultWidth; + } + + getDefaultHeight() { + return this._defaultHeight; + } + } + + // The object is registered with OBJECT_TYPE, while some older/editor paths + // can still reference the fully qualified type. + objectsRenderingService.registerInstanceRenderer( + OBJECT_TYPE, + RenderedSpine43Instance + ); + objectsRenderingService.registerInstanceRenderer( + FULL_OBJECT_TYPE, + RenderedSpine43Instance + ); + }, +}; diff --git a/Extensions/Spine43Object/spine-pixi-v7.js b/Extensions/Spine43Object/spine-pixi-v7.js new file mode 100644 index 000000000000..2007921a58bf --- /dev/null +++ b/Extensions/Spine43Object/spine-pixi-v7.js @@ -0,0 +1,14933 @@ +"use strict"; +var spine = (() => { + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __require = function(x) { return typeof PIXI !== "undefined" ? PIXI : window.PIXI; }; + var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + + // spine-pixi-v7/src/index.ts + var index_exports = {}; + __export(index_exports, { + AABBRectangleBoundsProvider: () => AABBRectangleBoundsProvider, + AlphaTimeline: () => AlphaTimeline, + Animation: () => Animation, + AnimationState: () => AnimationState, + AnimationStateAdapter: () => AnimationStateAdapter, + AnimationStateData: () => AnimationStateData, + AssetCache: () => AssetCache, + AssetManagerBase: () => AssetManagerBase, + AtlasAttachmentLoader: () => AtlasAttachmentLoader, + Attachment: () => Attachment, + AttachmentTimeline: () => AttachmentTimeline, + BinaryInput: () => BinaryInput, + BlendMode: () => BlendMode, + Bone: () => Bone, + BoneData: () => BoneData, + BonePose: () => BonePose, + BoneTimeline1: () => BoneTimeline1, + BoneTimeline2: () => BoneTimeline2, + BoundingBoxAttachment: () => BoundingBoxAttachment, + ClippingAttachment: () => ClippingAttachment, + Color: () => Color, + Constraint: () => Constraint, + ConstraintData: () => ConstraintData, + ConstraintTimeline1: () => ConstraintTimeline1, + CurveTimeline: () => CurveTimeline, + CurveTimeline1: () => CurveTimeline1, + DarkSlotMesh: () => DarkSlotMesh, + DarkTintBatchGeometry: () => DarkTintBatchGeometry, + DarkTintGeometry: () => DarkTintGeometry, + DarkTintMaterial: () => DarkTintMaterial, + DarkTintMesh: () => DarkTintMesh, + DarkTintRenderer: () => DarkTintRenderer, + DebugUtils: () => DebugUtils, + DeformTimeline: () => DeformTimeline, + Downloader: () => Downloader, + DrawOrder: () => DrawOrder, + DrawOrderFolderTimeline: () => DrawOrderFolderTimeline, + DrawOrderTimeline: () => DrawOrderTimeline, + Event: () => Event, + EventData: () => EventData, + EventQueue: () => EventQueue, + EventTimeline: () => EventTimeline, + EventType: () => EventType, + FIRST: () => FIRST, + FakeTexture: () => FakeTexture, + FromProperty: () => FromProperty, + FromRotate: () => FromRotate, + FromScaleX: () => FromScaleX, + FromScaleY: () => FromScaleY, + FromShearY: () => FromShearY, + FromX: () => FromX, + FromY: () => FromY, + HOLD: () => HOLD, + HOLD_FIRST: () => HOLD_FIRST, + IkConstraint: () => IkConstraint, + IkConstraintData: () => IkConstraintData, + IkConstraintPose: () => IkConstraintPose, + IkConstraintTimeline: () => IkConstraintTimeline, + Inherit: () => Inherit, + InheritTimeline: () => InheritTimeline, + IntSet: () => IntSet, + Interpolation: () => Interpolation, + MathUtils: () => MathUtils, + MeshAttachment: () => MeshAttachment, + PathAttachment: () => PathAttachment, + PathConstraint: () => PathConstraint, + PathConstraintData: () => PathConstraintData, + PathConstraintMixTimeline: () => PathConstraintMixTimeline, + PathConstraintPose: () => PathConstraintPose, + PathConstraintPositionTimeline: () => PathConstraintPositionTimeline, + PathConstraintSpacingTimeline: () => PathConstraintSpacingTimeline, + Physics: () => Physics, + PhysicsConstraint: () => PhysicsConstraint, + PhysicsConstraintDampingTimeline: () => PhysicsConstraintDampingTimeline, + PhysicsConstraintData: () => PhysicsConstraintData, + PhysicsConstraintGravityTimeline: () => PhysicsConstraintGravityTimeline, + PhysicsConstraintInertiaTimeline: () => PhysicsConstraintInertiaTimeline, + PhysicsConstraintMassTimeline: () => PhysicsConstraintMassTimeline, + PhysicsConstraintMixTimeline: () => PhysicsConstraintMixTimeline, + PhysicsConstraintPose: () => PhysicsConstraintPose, + PhysicsConstraintResetTimeline: () => PhysicsConstraintResetTimeline, + PhysicsConstraintStrengthTimeline: () => PhysicsConstraintStrengthTimeline, + PhysicsConstraintTimeline: () => PhysicsConstraintTimeline, + PhysicsConstraintWindTimeline: () => PhysicsConstraintWindTimeline, + PointAttachment: () => PointAttachment, + Pool: () => Pool, + Posed: () => Posed, + PosedActive: () => PosedActive, + PosedData: () => PosedData, + PositionMode: () => PositionMode, + Pow: () => Pow, + PowOut: () => PowOut, + Property: () => Property, + RETAIN: () => RETAIN, + RGB2Timeline: () => RGB2Timeline, + RGBA2Timeline: () => RGBA2Timeline, + RGBATimeline: () => RGBATimeline, + RGBTimeline: () => RGBTimeline, + RegionAttachment: () => RegionAttachment, + RotateMode: () => RotateMode, + RotateTimeline: () => RotateTimeline, + SETUP: () => SETUP, + SUBSEQUENT: () => SUBSEQUENT, + ScaleTimeline: () => ScaleTimeline, + ScaleXTimeline: () => ScaleXTimeline, + ScaleYMode: () => ScaleYMode, + ScaleYTimeline: () => ScaleYTimeline, + Sequence: () => Sequence, + SequenceMode: () => SequenceMode, + SequenceModeValues: () => SequenceModeValues, + SequenceTimeline: () => SequenceTimeline, + SetupPoseBoundsProvider: () => SetupPoseBoundsProvider, + ShearTimeline: () => ShearTimeline, + ShearXTimeline: () => ShearXTimeline, + ShearYTimeline: () => ShearYTimeline, + Skeleton: () => Skeleton, + SkeletonBinary: () => SkeletonBinary, + SkeletonBounds: () => SkeletonBounds, + SkeletonClipping: () => SkeletonClipping, + SkeletonData: () => SkeletonData, + SkeletonJson: () => SkeletonJson, + SkeletonRendererCore: () => SkeletonRendererCore, + Skin: () => Skin, + SkinEntry: () => SkinEntry, + SkinsAndAnimationBoundsProvider: () => SkinsAndAnimationBoundsProvider, + Slider: () => Slider, + SliderData: () => SliderData, + SliderMixTimeline: () => SliderMixTimeline, + SliderPose: () => SliderPose, + SliderTimeline: () => SliderTimeline, + Slot: () => Slot, + SlotCurveTimeline: () => SlotCurveTimeline, + SlotData: () => SlotData, + SlotMesh: () => SlotMesh, + SlotPose: () => SlotPose, + SpacingMode: () => SpacingMode, + Spine: () => Spine, + SpineDebugRenderer: () => SpineDebugRenderer, + SpineTexture: () => SpineTexture, + StringSet: () => StringSet, + Texture: () => Texture, + TextureAtlas: () => TextureAtlas, + TextureAtlasPage: () => TextureAtlasPage, + TextureAtlasRegion: () => TextureAtlasRegion, + TextureFilter: () => TextureFilter, + TextureRegion: () => TextureRegion, + TextureWrap: () => TextureWrap, + TimeKeeper: () => TimeKeeper, + Timeline: () => Timeline, + ToProperty: () => ToProperty, + ToRotate: () => ToRotate, + ToScaleX: () => ToScaleX, + ToScaleY: () => ToScaleY, + ToShearY: () => ToShearY, + ToX: () => ToX, + ToY: () => ToY, + TrackEntry: () => TrackEntry, + TransformConstraint: () => TransformConstraint, + TransformConstraintData: () => TransformConstraintData, + TransformConstraintPose: () => TransformConstraintPose, + TransformConstraintTimeline: () => TransformConstraintTimeline, + TranslateTimeline: () => TranslateTimeline, + TranslateXTimeline: () => TranslateXTimeline, + TranslateYTimeline: () => TranslateYTimeline, + Triangulator: () => Triangulator, + Utils: () => Utils, + Vector2: () => Vector2, + VertexAttachment: () => VertexAttachment, + WindowedMean: () => WindowedMean, + isBoneTimeline: () => isBoneTimeline, + isConstraintTimeline: () => isConstraintTimeline, + isSlotTimeline: () => isSlotTimeline + }); + + // spine-pixi-v7/src/require-shim.ts + if (typeof window !== "undefined" && window.PIXI) { + if (!window.__spineRequireShimApplied) { + window.__spineRequireShimApplied = true; + const prevRequire = window.require; + window.require = (x) => { + if (x && typeof x === "string" && x.startsWith("@pixi/")) return window.PIXI; + if (prevRequire) return prevRequire(x); + return undefined; + }; + } + } + + // spine-core/src/Utils.ts + var IntSet = class { + array = []; + add(value) { + const contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + } + contains(value) { + return this.array[value | 0] !== void 0; + } + remove(value) { + this.array[value | 0] = void 0; + } + clear() { + this.array.length = 0; + } + }; + var StringSet = class { + entries = {}; + size = 0; + add(value) { + const contains = this.entries[value]; + this.entries[value] = true; + if (!contains) { + this.size++; + return true; + } + return false; + } + addAll(values) { + const oldSize = this.size; + for (let i = 0, n = values.length; i < n; i++) + this.add(values[i]); + return oldSize !== this.size; + } + contains(value) { + return this.entries[value]; + } + clear() { + this.entries = {}; + this.size = 0; + } + }; + var Color = class _Color { + constructor(r = 0, g = 0, b = 0, a = 0) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + static WHITE = new _Color(1, 1, 1, 1); + static RED = new _Color(1, 0, 0, 1); + static GREEN = new _Color(0, 1, 0, 1); + static BLUE = new _Color(0, 0, 1, 1); + static MAGENTA = new _Color(1, 0, 1, 1); + set(r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + return this.clamp(); + } + setFromColor(c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + } + setFromString(hex) { + hex = hex.charAt(0) === "#" ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255; + this.g = parseInt(hex.substr(2, 2), 16) / 255; + this.b = parseInt(hex.substr(4, 2), 16) / 255; + this.a = hex.length !== 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255; + return this; + } + add(r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + return this.clamp(); + } + clamp() { + if (this.r < 0) this.r = 0; + else if (this.r > 1) this.r = 1; + if (this.g < 0) this.g = 0; + else if (this.g > 1) this.g = 1; + if (this.b < 0) this.b = 0; + else if (this.b > 1) this.b = 1; + if (this.a < 0) this.a = 0; + else if (this.a > 1) this.a = 1; + return this; + } + static rgba8888ToColor(color, value) { + color.r = ((value & 4278190080) >>> 24) / 255; + color.g = ((value & 16711680) >>> 16) / 255; + color.b = ((value & 65280) >>> 8) / 255; + color.a = (value & 255) / 255; + } + static rgb888ToColor(color, value) { + color.r = ((value & 16711680) >>> 16) / 255; + color.g = ((value & 65280) >>> 8) / 255; + color.b = (value & 255) / 255; + } + toRgb888() { + const hex = (x) => `0${(x * 255).toString(16)}`.slice(-2); + return Number(`0x${hex(this.r)}${hex(this.g)}${hex(this.b)}`); + } + static fromString(hex, color = new _Color()) { + return color.setFromString(hex); + } + }; + var MathUtils = class _MathUtils { + static epsilon = 1e-5; + static epsilon2 = _MathUtils.epsilon * _MathUtils.epsilon; + // biome-ignore lint/suspicious/noApproximativeNumericConstant: reference runtime + static PI = 3.1415927; + static PI2 = _MathUtils.PI * 2; + static invPI2 = 1 / _MathUtils.PI2; + static radiansToDegrees = 180 / _MathUtils.PI; + static radDeg = _MathUtils.radiansToDegrees; + static degreesToRadians = _MathUtils.PI / 180; + static degRad = _MathUtils.degreesToRadians; + static clamp(value, min, max) { + if (value < min) return min; + if (value > max) return max; + return value; + } + static cosDeg(degrees) { + return Math.cos(degrees * _MathUtils.degRad); + } + static sinDeg(degrees) { + return Math.sin(degrees * _MathUtils.degRad); + } + static atan2Deg(y, x) { + return Math.atan2(y, x) * _MathUtils.radDeg; + } + static signum(value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + } + static toInt(x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + } + static cbrt(x) { + const y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + } + static randomTriangular(min, max) { + return _MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + } + static randomTriangularWith(min, max, mode) { + const u = Math.random(); + const d = max - min; + if (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + } + static isPowerOfTwo(value) { + return value && (value & value - 1) === 0; + } + }; + var Interpolation = class _Interpolation { + static linear = new class extends _Interpolation { + applyInternal(a) { + return a; + } + }(); + /** Aka "smoothstep". */ + static smooth = new class extends _Interpolation { + applyInternal(a) { + return a * a * (3 - 2 * a); + } + }(); + /** Slow, then fast. */ + static slowFast = new class extends _Interpolation { + applyInternal(a) { + return a * a; + } + }(); + /** Fast, then slow. */ + static fastSlow = new class extends _Interpolation { + applyInternal(a) { + return (a - 1) * (a - 1) * -1 + 1; + } + }(); + static circle = new class extends _Interpolation { + applyInternal(a) { + if (a <= 0.5) { + a *= 2; + return (1 - Math.sqrt(1 - a * a)) / 2; + } + a--; + a *= 2; + return (Math.sqrt(1 - a * a) + 1) / 2; + } + }(); + apply(start, end, a) { + if (end === void 0 || a === void 0) return this.applyInternal(start); + return start + (end - start) * this.applyInternal(a); + } + }; + var Pow = class extends Interpolation { + power = 2; + constructor(power) { + super(); + this.power = power; + } + applyInternal(a) { + if (a <= 0.5) return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 === 0 ? -2 : 2) + 1; + } + }; + var PowOut = class extends Pow { + constructor(power) { + super(power); + } + applyInternal(a) { + return Math.pow(a - 1, this.power) * (this.power % 2 === 0 ? -1 : 1) + 1; + } + }; + var Utils = class _Utils { + static SUPPORTS_TYPED_ARRAYS = typeof Float32Array !== "undefined"; + static arrayCopy(source, sourceStart, dest, destStart, numElements) { + for (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + } + static arrayFill(array, fromIndex, toIndex, value) { + for (let i = fromIndex; i < toIndex; i++) + array[i] = value; + } + // biome-ignore lint/suspicious/noExplicitAny: ok any in this case + static setArraySize(array, size, value = 0) { + const oldSize = array.length; + if (oldSize === size) return array; + array.length = size; + if (oldSize < size) { + for (let i = oldSize; i < size; i++) array[i] = value; + } + return array; + } + // biome-ignore lint/suspicious/noExplicitAny: ok any in this case + static ensureArrayCapacity(array, size, value = 0) { + if (array.length >= size) return array; + return _Utils.setArraySize(array, size, value); + } + static newArray(size, defaultValue) { + const array = []; + for (let i = 0; i < size; i++) array[i] = defaultValue; + return array; + } + static newFloatArray(size) { + if (_Utils.SUPPORTS_TYPED_ARRAYS) + return new Float32Array(size); + else { + const array = []; + for (let i = 0; i < array.length; i++) array[i] = 0; + return array; + } + } + static newShortArray(size) { + if (_Utils.SUPPORTS_TYPED_ARRAYS) + return new Int16Array(size); + else { + const array = []; + for (let i = 0; i < array.length; i++) array[i] = 0; + return array; + } + } + static toFloatArray(array) { + return _Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + } + static toSinglePrecision(value) { + return _Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + } + // This function is used to fix WebKit 602 specific issue described at https://esotericsoftware.com/forum/d/10109-ios-10-disappearing-graphics + static webkit602BugfixHelper(alpha) { + } + static contains(array, element, identity = true) { + for (let i = 0; i < array.length; i++) + if (array[i] === element) return true; + return false; + } + // biome-ignore lint/suspicious/noExplicitAny: ok any in this case + static enumValue(type, name) { + return type[name[0].toUpperCase() + name.slice(1)]; + } + }; + var DebugUtils = class { + static logBones(skeleton) { + for (let i = 0; i < skeleton.bones.length; i++) { + const bone = skeleton.bones[i].appliedPose; + console.log(`${bone.bone.data.name}, ${bone.a}, ${bone.b}, ${bone.c}, ${bone.d}, ${bone.worldX}, ${bone.worldY}`); + } + } + }; + var Pool = class { + items = []; + instantiator; + constructor(instantiator) { + this.instantiator = instantiator; + } + obtain() { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + } + free(item) { + item.reset?.(); + this.items.push(item); + } + freeAll(items) { + for (let i = 0; i < items.length; i++) + this.free(items[i]); + } + clear() { + this.items.length = 0; + } + }; + var Vector2 = class { + constructor(x = 0, y = 0) { + this.x = x; + this.y = y; + } + set(x, y) { + this.x = x; + this.y = y; + return this; + } + length() { + const x = this.x; + const y = this.y; + return Math.sqrt(x * x + y * y); + } + normalize() { + const len = this.length(); + if (len !== 0) { + this.x /= len; + this.y /= len; + } + return this; + } + }; + var TimeKeeper = class { + maxDelta = 0.064; + framesPerSecond = 0; + delta = 0; + totalTime = 0; + lastTime = Date.now() / 1e3; + frameCount = 0; + frameTime = 0; + update() { + const now = Date.now() / 1e3; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + } + }; + var WindowedMean = class { + values; + addedValues = 0; + lastValue = 0; + mean = 0; + dirty = true; + constructor(windowSize = 32) { + this.values = new Array(windowSize); + } + hasEnoughData() { + return this.addedValues >= this.values.length; + } + addValue(value) { + if (this.addedValues < this.values.length) this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) this.lastValue = 0; + this.dirty = true; + } + getMean() { + if (this.hasEnoughData()) { + if (this.dirty) { + let mean = 0; + for (let i = 0; i < this.values.length; i++) + mean += this.values[i]; + this.mean = mean / this.values.length; + this.dirty = false; + } + return this.mean; + } + return 0; + } + }; + + // spine-core/src/Texture.ts + var Texture = class { + _image; + constructor(image) { + this._image = image; + } + getImage() { + return this._image; + } + }; + var TextureFilter = /* @__PURE__ */ ((TextureFilter2) => { + TextureFilter2[TextureFilter2["Nearest"] = 9728] = "Nearest"; + TextureFilter2[TextureFilter2["Linear"] = 9729] = "Linear"; + TextureFilter2[TextureFilter2["MipMap"] = 9987] = "MipMap"; + TextureFilter2[TextureFilter2["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter2[TextureFilter2["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter2[TextureFilter2["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter2[TextureFilter2["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + return TextureFilter2; + })(TextureFilter || {}); + var TextureWrap = /* @__PURE__ */ ((TextureWrap2) => { + TextureWrap2[TextureWrap2["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap2[TextureWrap2["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap2[TextureWrap2["Repeat"] = 10497] = "Repeat"; + return TextureWrap2; + })(TextureWrap || {}); + var TextureRegion = class { + texture; + u = 0; + v = 0; + u2 = 0; + v2 = 0; + width = 0; + height = 0; + degrees = 0; + offsetX = 0; + offsetY = 0; + originalWidth = 0; + originalHeight = 0; + }; + var FakeTexture = class extends Texture { + setFilters(minFilter, magFilter) { + } + setWraps(uWrap, vWrap) { + } + dispose() { + } + }; + + // spine-core/src/TextureAtlas.ts + var TextureAtlas = class { + pages = []; + regions = []; + constructor(atlasText) { + const reader = new TextureAtlasReader(atlasText); + const entry = new Array(4); + const pageFields = {}; + pageFields.size = (page2) => { + page2.width = parseInt(entry[1]); + page2.height = parseInt(entry[2]); + }; + pageFields.format = () => { + }; + pageFields.filter = (page2) => { + page2.minFilter = Utils.enumValue(TextureFilter, entry[1]); + page2.magFilter = Utils.enumValue(TextureFilter, entry[2]); + }; + pageFields.repeat = (page2) => { + if (entry[1].indexOf("x") !== -1) page2.uWrap = 10497 /* Repeat */; + if (entry[1].indexOf("y") !== -1) page2.vWrap = 10497 /* Repeat */; + }; + pageFields.pma = (page2) => { + page2.pma = entry[1] === "true"; + }; + var regionFields = {}; + regionFields.xy = (region) => { + region.x = parseInt(entry[1]); + region.y = parseInt(entry[2]); + }; + regionFields.size = (region) => { + region.width = parseInt(entry[1]); + region.height = parseInt(entry[2]); + }; + regionFields.bounds = (region) => { + region.x = parseInt(entry[1]); + region.y = parseInt(entry[2]); + region.width = parseInt(entry[3]); + region.height = parseInt(entry[4]); + }; + regionFields.offset = (region) => { + region.offsetX = parseInt(entry[1]); + region.offsetY = parseInt(entry[2]); + }; + regionFields.orig = (region) => { + region.originalWidth = parseInt(entry[1]); + region.originalHeight = parseInt(entry[2]); + }; + regionFields.offsets = (region) => { + region.offsetX = parseInt(entry[1]); + region.offsetY = parseInt(entry[2]); + region.originalWidth = parseInt(entry[3]); + region.originalHeight = parseInt(entry[4]); + }; + regionFields.rotate = (region) => { + const value = entry[1]; + if (value === "true") + region.degrees = 90; + else if (value !== "false") + region.degrees = parseInt(value); + }; + regionFields.index = (region) => { + region.index = parseInt(entry[1]); + }; + let line = reader.readLine(); + while (line && line.trim().length === 0) + line = reader.readLine(); + while (true) { + if (!line || line.trim().length === 0) break; + if (reader.readEntry(entry, line) === 0) break; + line = reader.readLine(); + } + let page = null; + let names = null; + let values = null; + while (true) { + if (line === null) break; + if (line.trim().length === 0) { + page = null; + line = reader.readLine(); + } else if (!page) { + page = new TextureAtlasPage(line.trim()); + while (true) { + if (reader.readEntry(entry, line = reader.readLine()) === 0) break; + const field = pageFields[entry[0]]; + if (field) field(page); + } + this.pages.push(page); + } else { + const region = new TextureAtlasRegion(page, line); + while (true) { + const count = reader.readEntry(entry, line = reader.readLine()); + if (count === 0) break; + const field = regionFields[entry[0]]; + if (field) + field(region); + else { + if (!names) names = []; + if (!values) values = []; + names.push(entry[0]); + const entryValues = []; + for (let i = 0; i < count; i++) + entryValues.push(parseInt(entry[i + 1])); + values.push(entryValues); + } + } + if (region.originalWidth === 0 && region.originalHeight === 0) { + region.originalWidth = region.width; + region.originalHeight = region.height; + } + if (names && names.length > 0 && values && values.length > 0) { + region.names = names; + region.values = values; + names = null; + values = null; + } + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.degrees === 90) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + this.regions.push(region); + } + } + } + findRegion(name) { + for (let i = 0; i < this.regions.length; i++) { + if (this.regions[i].name === name) { + return this.regions[i]; + } + } + return null; + } + setTextures(assetManager, pathPrefix = "") { + for (const page of this.pages) + page.setTexture(assetManager.get(pathPrefix + page.name)); + } + dispose() { + for (let i = 0; i < this.pages.length; i++) { + this.pages[i].texture?.dispose(); + } + } + }; + var TextureAtlasReader = class { + lines; + index = 0; + constructor(text) { + this.lines = text.split(/\r\n|\r|\n/); + } + readLine() { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + } + readEntry(entry, line) { + if (!line) return 0; + line = line.trim(); + if (line.length === 0) return 0; + const colon = line.indexOf(":"); + if (colon === -1) return 0; + entry[0] = line.substr(0, colon).trim(); + for (let i = 1, lastMatch = colon + 1; ; i++) { + const comma = line.indexOf(",", lastMatch); + if (comma === -1) { + entry[i] = line.substr(lastMatch).trim(); + return i; + } + entry[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + if (i === 4) return 4; + } + } + }; + var TextureAtlasPage = class { + name; + minFilter = 9728 /* Nearest */; + magFilter = 9728 /* Nearest */; + uWrap = 33071 /* ClampToEdge */; + vWrap = 33071 /* ClampToEdge */; + texture = null; + width = 0; + height = 0; + pma = false; + regions = []; + constructor(name) { + this.name = name; + } + setTexture(texture) { + this.texture = texture; + texture.setFilters(this.minFilter, this.magFilter); + texture.setWraps(this.uWrap, this.vWrap); + for (const region of this.regions) + region.texture = texture; + } + }; + var TextureAtlasRegion = class extends TextureRegion { + page; + name; + x = 0; + y = 0; + offsetX = 0; + offsetY = 0; + originalWidth = 0; + originalHeight = 0; + index = 0; + degrees = 0; + names = null; + values = null; + constructor(page, name) { + super(); + this.page = page; + this.name = name; + page.regions.push(this); + } + }; + + // spine-core/src/attachments/Attachment.ts + var Attachment = class _Attachment { + static empty = []; + name; + /** Timelines for the timeline attachment are also applied to this attachment. + * @return May be null if no attachment-specific timelines should be applied. */ + timelineAttachment; + /** Slots that can have attachments whose {@link timelineAttachment} is this attachment. */ + timelineSlots = _Attachment.empty; + constructor(name) { + if (!name) throw new Error("name cannot be null."); + this.name = name; + this.timelineAttachment = this; + } + /** Returns true if the {@code slotIndex} or any {@link timelineSlots} have an attachment whose {@link timelineAttachment} is + * this attachment. + * @param slots The {@link Skeleton.slots}. + * @param slotIndex The timeline's primary slot index. */ + isTimelineActive(slots, slotIndex, appliedPose) { + let slot = slots[slotIndex]; + if (slot.bone.isActive()) { + const other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment(); + if (other != null && other.timelineAttachment === this) return true; + } + for (let i = 0, n = this.timelineSlots.length; i < n; i++) { + slot = slots[this.timelineSlots[i]]; + if (!slot.bone.isActive()) continue; + const other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment(); + if (other != null && other.timelineAttachment === this) return true; + } + return false; + } + }; + var VertexAttachment = class _VertexAttachment extends Attachment { + static nextID = 0; + /** The unique ID for this attachment. */ + id = _VertexAttachment.nextID++; + /** The bones that affect the {@link vertices}. The entries are, for each vertex, the number of bones affecting the vertex + * followed by that many bone indices, which is {@link Skeleton.getBones} index. Null if this attachment has no weights. */ + bones = null; + /** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y` + * entries for each vertex. For a weighted attachment, the values are `x,y,weight` triplets for each bone affecting + * each vertex. */ + vertices = []; + /** The maximum number of world vertex values that can be output by + * {@link computeWorldVertices} using the `count` parameter. */ + worldVerticesLength = 0; + constructor(name) { + super(name); + } + /** Transforms the attachment's local {@link vertices} to world coordinates. If {@link SlotPose.getDeform} is not empty, it + * is used to deform the vertices. + * + * See World transforms in the Spine + * Runtimes Guide. + * @param start The index of the first {@link vertices} value to transform. Each vertex has 2 values, x and y. + * @param count The number of world vertex values to output. Must be <= {@link worldVerticesLength} - `start`. + * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` * + * `stride` / 2. + * @param offset The `worldVertices` index to begin writing values. + * @param stride The number of `worldVertices` entries between the value pairs written. */ + computeWorldVertices(skeleton, slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + const deformArray = slot.appliedPose.deform; + let vertices = this.vertices; + const bones = this.bones; + if (!bones) { + if (deformArray.length > 0) vertices = deformArray; + const bone = slot.bone.appliedPose; + const x = bone.worldX; + const y = bone.worldY; + const a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (let v2 = start, w = offset; w < count; v2 += 2, w += stride) { + const vx = vertices[v2], vy = vertices[v2 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; + } + return; + } + let v = 0, skip = 0; + for (let i = 0; i < start; i += 2) { + const n = bones[v]; + v += n + 1; + skip += n; + } + const skeletonBones = skeleton.bones; + if (deformArray.length === 0) { + for (let w = offset, b = skip * 3; w < count; w += stride) { + let wx = 0, wy = 0; + let n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + const bone = skeletonBones[bones[v]].appliedPose; + const vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } else { + const deform = deformArray; + for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + let wx = 0, wy = 0; + let n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + const bone = skeletonBones[bones[v]].appliedPose; + const vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; + } + } + } + /** Does not copy id (generated) or name (set on construction). **/ + copyTo(attachment) { + if (this.bones) { + attachment.bones = []; + Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); + } else + attachment.bones = null; + if (this.vertices) { + attachment.vertices = Utils.newFloatArray(this.vertices.length); + Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); + } + attachment.worldVerticesLength = this.worldVerticesLength; + attachment.timelineAttachment = this.timelineAttachment; + attachment.timelineSlots = this.timelineSlots; + } + }; + + // spine-core/src/attachments/MeshAttachment.ts + var MeshAttachment = class _MeshAttachment extends VertexAttachment { + sequence; + /** The UV pair for each vertex, normalized within the texture region. */ + regionUVs = []; + /** Triplets of vertex indices which describe the mesh's triangulation. */ + triangles = []; + /** The number of entries at the beginning of {@link vertices} that make up the mesh hull. */ + hullLength = 0; + /** The name of the texture region for this attachment. */ + path; + /** The color to tint the mesh. */ + color = new Color(1, 1, 1, 1); + sourceMesh = null; + /** Vertex index pairs describing edges for controlling triangulation, or null if nonessential data was not exported. Mesh + * triangles do not never cross edges. Triangulation is not performed at runtime. */ + edges = []; + /** The width of the mesh's image. Available only when nonessential data was exported. */ + width = 0; + /** The height of the mesh's image. Available only when nonessential data was exported. */ + height = 0; + tempColor = new Color(0, 0, 0, 0); + constructor(name, sequence) { + super(name); + this.sequence = sequence; + } + copy() { + if (this.sourceMesh) return this.newLinkedMesh(); + const copy = new _MeshAttachment(this.name, this.sequence.copy()); + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = []; + Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.triangles = []; + Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (this.edges) { + copy.edges = []; + Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + } + updateSequence() { + this.sequence.update(this); + } + /** The source mesh if this is a linked mesh, else null. A linked mesh shares the {@link bones}, {@link vertices}, + * {@link regionUVs}, {@link triangles}, {@link hullLength}, {@link edges}, {@link width}, and {@link height} with the + * source mesh, but may have a different {@link name} or {@link path}, and therefore a different texture region. */ + getSourceMesh() { + return this.sourceMesh; + } + setSourceMesh(sourceMesh) { + this.sourceMesh = sourceMesh; + if (sourceMesh) { + this.bones = sourceMesh.bones; + this.vertices = sourceMesh.vertices; + this.worldVerticesLength = sourceMesh.worldVerticesLength; + this.regionUVs = sourceMesh.regionUVs; + this.triangles = sourceMesh.triangles; + this.hullLength = sourceMesh.hullLength; + this.worldVerticesLength = sourceMesh.worldVerticesLength; + this.edges = sourceMesh.edges; + this.width = sourceMesh.width; + this.height = sourceMesh.height; + } + } + /** Returns a new mesh with the {@link sourceMesh} set to this mesh's source mesh, if any, else to this mesh. **/ + newLinkedMesh() { + const copy = new _MeshAttachment(this.name, this.sequence.copy()); + copy.timelineAttachment = this.timelineAttachment; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.setSourceMesh(this.sourceMesh ? this.sourceMesh : this); + copy.updateSequence(); + return copy; + } + /** Computes {@link Sequence.getUVs | UVs} for a mesh attachment. + * @param uvs Output array for the computed UVs, same length as regionUVs. */ + static computeUVs(region, regionUVs, uvs) { + if (!region) throw new Error("Region not set."); + const n = uvs.length; + let u = region.u, v = region.v, width = 0, height = 0; + if (region instanceof TextureAtlasRegion) { + const page = region.page; + const textureWidth = page.width, textureHeight = page.height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; + default: + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } + } else if (!region) { + u = v = 0; + width = height = 1; + } else { + width = region.u2 - u; + height = region.v2 - v; + } + for (let i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + } + }; + + // spine-core/src/attachments/RegionAttachment.ts + var RegionAttachment = class _RegionAttachment extends Attachment { + sequence; + /** The local x translation. */ + x = 0; + /** The local y translation. */ + y = 0; + /** The local scaleX. */ + scaleX = 1; + /** The local scaleY. */ + scaleY = 1; + /** The local rotation in degrees, counter clockwise. */ + rotation = 0; + /** The width of the region attachment in Spine. */ + width = 0; + /** The height of the region attachment in Spine. */ + height = 0; + /** The name of the texture region for this attachment. */ + path; + /** The color to tint the region attachment. */ + color = new Color(1, 1, 1, 1); + tempColor = new Color(1, 1, 1, 1); + constructor(name, sequence) { + super(name); + this.sequence = sequence; + } + copy() { + const copy = new _RegionAttachment(this.name, this.sequence.copy()); + copy.path = this.path; + copy.x = this.x; + copy.y = this.y; + copy.scaleX = this.scaleX; + copy.scaleY = this.scaleY; + copy.rotation = this.rotation; + copy.width = this.width; + copy.height = this.height; + copy.color.setFromColor(this.color); + return copy; + } + /** Transforms the attachment's four vertices to world coordinates. + * + * See World transforms in the Spine + * Runtimes Guide. + * @param worldVertices The output world vertices. Must have a length >= `offset` + 8. + * @param offset The `worldVertices` index to begin writing values. + * @param stride The number of `worldVertices` entries between the value pairs written. */ + computeWorldVertices(slot, vertexOffsets, worldVertices, offset, stride) { + const bone = slot.bone.appliedPose; + const x = bone.worldX, y = bone.worldY; + const a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let offsetX = vertexOffsets[0]; + let offsetY = vertexOffsets[1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffsets[2]; + offsetY = vertexOffsets[3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffsets[4]; + offsetY = vertexOffsets[5]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffsets[6]; + offsetY = vertexOffsets[7]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + } + getOffsets(pose) { + return this.sequence.offsets[this.sequence.resolveIndex(pose)]; + } + updateSequence() { + this.sequence.update(this); + } + /** Computes {@link Sequence.getUVs | UVs} and {@link Sequence.getOffsets | offsets} for a region attachment. + * @param uvs Output array for the computed UVs, length of 8. + * @param offset Output array for the computed vertex offsets, length of 8. */ + static computeUVs(region, x, y, scaleX, scaleY, rotation, width, height, offset, uvs) { + if (!region) throw new Error("Region not set."); + const regionScaleX = width / region.originalWidth * scaleX; + const regionScaleY = height / region.originalHeight * scaleY; + const localX = -width / 2 * scaleX + region.offsetX * regionScaleX; + const localY = -height / 2 * scaleY + region.offsetY * regionScaleY; + const localX2 = localX + region.width * regionScaleX; + const localY2 = localY + region.height * regionScaleY; + const radians = rotation * MathUtils.degRad; + const cos = Math.cos(radians); + const sin = Math.sin(radians); + const localXCos = localX * cos + x; + const localXSin = localX * sin; + const localYCos = localY * cos + y; + const localYSin = localY * sin; + const localX2Cos = localX2 * cos + x; + const localX2Sin = localX2 * sin; + const localY2Cos = localY2 * cos + y; + const localY2Sin = localY2 * sin; + offset[0] = localXCos - localYSin; + offset[1] = localYCos + localXSin; + offset[2] = localXCos - localY2Sin; + offset[3] = localY2Cos + localXSin; + offset[4] = localX2Cos - localY2Sin; + offset[5] = localY2Cos + localX2Sin; + offset[6] = localX2Cos - localYSin; + offset[7] = localYCos + localX2Sin; + if (region == null) { + uvs[0] = 0; + uvs[1] = 0; + uvs[2] = 0; + uvs[3] = 1; + uvs[4] = 1; + uvs[5] = 1; + uvs[6] = 1; + uvs[7] = 0; + } else { + uvs[1] = region.v2; + uvs[2] = region.u; + uvs[5] = region.v; + uvs[6] = region.u2; + if (region.degrees === 90) { + uvs[0] = region.u2; + uvs[3] = region.v2; + uvs[4] = region.u; + uvs[7] = region.v; + } else { + uvs[0] = region.u; + uvs[3] = region.v; + uvs[4] = region.u2; + uvs[7] = region.v2; + } + } + } + static X1 = 0; + static Y1 = 1; + static C1R = 2; + static C1G = 3; + static C1B = 4; + static C1A = 5; + static U1 = 6; + static V1 = 7; + static X2 = 8; + static Y2 = 9; + static C2R = 10; + static C2G = 11; + static C2B = 12; + static C2A = 13; + static U2 = 14; + static V2 = 15; + static X3 = 16; + static Y3 = 17; + static C3R = 18; + static C3G = 19; + static C3B = 20; + static C3A = 21; + static U3 = 22; + static V3 = 23; + static X4 = 24; + static Y4 = 25; + static C4R = 26; + static C4G = 27; + static C4B = 28; + static C4A = 29; + static U4 = 30; + static V4 = 31; + }; + + // spine-core/src/attachments/Sequence.ts + var Sequence = class _Sequence { + static _nextID = 0; + id = _Sequence.nextID(); + /** The list of texture regions this sequence will display. */ + regions; + pathSuffix; + uvs; + /** Returns vertex offsets from the center of a {@link RegionAttachment}. Invalid to call for a {@link MeshAttachment}. */ + offsets; + /** The starting number for the numeric {@link getPath | path} suffix. */ + start = 0; + /** The minimum number of digits in the numeric {@link getPath | path} suffix, for zero padding. 0 for no zero + * padding. */ + digits = 0; + /** The index of the region to show for the setup pose. */ + setupIndex = 0; + /** @param count The number of texture regions this sequence will display. + * @param pathSuffix If true, the {@link getPath | path} has a numeric suffix. If false, all regions will use the + * same path, so `count` should be 1. */ + constructor(count, pathSuffix) { + this.regions = new Array(count); + this.pathSuffix = pathSuffix; + } + copy() { + const regionCount = this.regions.length; + const copy = new _Sequence(regionCount, this.pathSuffix); + Utils.arrayCopy(this.regions, 0, copy.regions, 0, regionCount); + copy.start = this.start; + copy.digits = this.digits; + copy.setupIndex = this.setupIndex; + if (this.uvs != null) { + const length = this.uvs[0].length; + copy.uvs = []; + for (let i = 0; i < regionCount; i++) { + copy.uvs[i] = Utils.newFloatArray(length); + Utils.arrayCopy(this.uvs[i], 0, copy.uvs[i], 0, length); + } + } + if (this.offsets != null) { + copy.offsets = []; + for (let i = 0; i < regionCount; i++) { + copy.offsets[i] = []; + Utils.arrayCopy(this.offsets[i], 0, copy.offsets[i], 0, 8); + } + } + return copy; + } + /** Computes UVs and offsets for the specified attachment. Must be called if the regions or attachment properties are + * changed. */ + update(attachment) { + const regionCount = this.regions.length; + if (attachment instanceof RegionAttachment) { + this.uvs = []; + this.offsets = []; + for (let i = 0; i < regionCount; i++) { + this.uvs[i] = Utils.newFloatArray(8); + this.offsets[i] = []; + RegionAttachment.computeUVs( + this.regions[i], + attachment.x, + attachment.y, + attachment.scaleX, + attachment.scaleY, + attachment.rotation, + attachment.width, + attachment.height, + this.offsets[i], + this.uvs[i] + ); + } + } else if (attachment instanceof MeshAttachment) { + const regionUVs = attachment.regionUVs; + this.uvs = []; + this.offsets = void 0; + for (let i = 0; i < regionCount; i++) { + this.uvs[i] = Utils.newFloatArray(regionUVs.length); + MeshAttachment.computeUVs(this.regions[i], regionUVs, this.uvs[i]); + } + } + } + /** Returns the {@link regions} index for the {@link SlotPose.getSequenceIndex}. */ + resolveIndex(pose) { + let index = pose.sequenceIndex; + if (index === -1) index = this.setupIndex; + if (index >= this.regions.length) index = this.regions.length - 1; + return index; + } + /** Returns the UVs for the specified index. {@link regions Regions} must be populated and {@link update} called + * before calling this method. */ + getUVs(index) { + return this.uvs[index]; + } + /** Returns true if the {@link getPath | path} has a numeric suffix. */ + hasPathSuffix() { + return this.pathSuffix; + } + /** Returns the specified base path with an optional numeric suffix for the specified index. */ + getPath(basePath, index) { + if (!this.pathSuffix) return basePath; + let result = basePath; + const frame = (this.start + index).toString(); + for (let i = this.digits - frame.length; i > 0; i--) + result += "0"; + result += frame; + return result; + } + static nextID() { + return _Sequence._nextID++; + } + }; + var SequenceMode = /* @__PURE__ */ ((SequenceMode2) => { + SequenceMode2[SequenceMode2["hold"] = 0] = "hold"; + SequenceMode2[SequenceMode2["once"] = 1] = "once"; + SequenceMode2[SequenceMode2["loop"] = 2] = "loop"; + SequenceMode2[SequenceMode2["pingpong"] = 3] = "pingpong"; + SequenceMode2[SequenceMode2["onceReverse"] = 4] = "onceReverse"; + SequenceMode2[SequenceMode2["loopReverse"] = 5] = "loopReverse"; + SequenceMode2[SequenceMode2["pingpongReverse"] = 6] = "pingpongReverse"; + return SequenceMode2; + })(SequenceMode || {}); + var SequenceModeValues = [ + 0 /* hold */, + 1 /* once */, + 2 /* loop */, + 3 /* pingpong */, + 4 /* onceReverse */, + 5 /* loopReverse */, + 6 /* pingpongReverse */ + ]; + + // spine-core/src/Animation.ts + var Animation = class { + /** The animation's name, unique across all animations in the skeleton. + * + * See {@link SkeletonData.findAnimation}. */ + name; + /** The duration of the animation in seconds, which is usually the highest time of all frames in the timelines. The duration is + * used to know when the animation has completed and, for animations that repeat, when it should loop back to the start. */ + timelines = []; + timelineIds; + /** {@link Skeleton.getBones} indices that this animation's timelines modify. + * + * See {@link BoneTimeline.bones}. */ + bones; + // Nonessential. + /** The color of the animation as it was in Spine, or a default color if nonessential data was not exported. */ + color = new Color(1, 1, 1, 1); + /** The duration of the animation in seconds, which is usually the highest time of all frames in the timeline. The duration is + * used to know when it has completed and when it should loop back to the start. */ + duration; + constructor(name, timelines, duration) { + if (!name) throw new Error("name cannot be null."); + this.name = name; + this.duration = duration; + this.timelineIds = new StringSet(); + this.bones = []; + this.setTimelines(timelines); + } + setTimelines(timelines) { + if (!timelines) throw new Error("timelines cannot be null."); + this.timelines = timelines; + const n = timelines.length; + this.timelineIds.clear(); + this.bones.length = 0; + const boneSet = /* @__PURE__ */ new Set(); + const items = timelines; + for (let i = 0; i < n; i++) { + const timeline = items[i]; + this.timelineIds.addAll(timeline.propertyIds); + if (isBoneTimeline(timeline) && boneSet.add(timeline.boneIndex)) + this.bones.push(timeline.boneIndex); + } + } + /** Returns true if this animation contains a timeline with any of the specified property IDs. + * + * See {@link Timeline.propertyIds}. */ + hasTimeline(ids) { + for (let i = 0; i < ids.length; i++) + if (this.timelineIds.contains(ids[i])) return true; + return false; + } + /** Applies the animation's timelines to the specified skeleton. + * + * See {@link Timeline.apply} and + * Applying Animations in the Spine Runtimes + * Guide. + * @param skeleton The skeleton the animation is applied to. This provides access to the bones, slots, and other skeleton + * components the timelines may change. + * @param lastTime The last time in seconds this animation was applied. Some timelines trigger only at discrete times, in which + * case all keys are triggered between `lastTime` (exclusive) and `time` (inclusive). Pass -1 + * the first time an animation is applied to ensure frame 0 is triggered. + * @param time The time in seconds the skeleton is being posed for. Timelines find the frame before and after this time and + * interpolate between the frame values. + * @param loop True if `time` beyond the {@link duration} repeats the animation, else the last frame is used. + * @param events If any events are fired, they are added to this list. Pass null to ignore fired events or if no timelines fire + * events. + * @param alpha 0 applies setup or current values (depending on `fromSetup`), 1 uses timeline values, and + * intermediate values interpolate between them. Adjusting `alpha` over time can mix an animation in or + * out. + * @param fromSetup If true, `alpha` transitions between setup and timeline values, setup values are used before the + * first frame (current values are not used). If false, `alpha` transitions between current and timeline + * values, no change is made before the first frame. + * @param add If true, for timelines that support it, their values are added to the setup or current values (depending on + * `fromSetup`). + * @param out True when the animation is mixing out, else it is mixing in. Used by timelines that perform instant transitions. + * @param appliedPose True to modify {@link Posed.appliedPose}, else {@link Posed.pose} is modified. */ + apply(skeleton, lastTime, time, loop, events, alpha, fromSetup, add, out, appliedPose) { + if (!skeleton) throw new Error("skeleton cannot be null."); + if (loop && this.duration !== 0) { + time %= this.duration; + if (lastTime > 0) lastTime %= this.duration; + } + const timelines = this.timelines; + for (let i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose); + } + }; + var Property = /* @__PURE__ */ ((Property2) => { + Property2[Property2["rotate"] = 0] = "rotate"; + Property2[Property2["x"] = 1] = "x"; + Property2[Property2["y"] = 2] = "y"; + Property2[Property2["scaleX"] = 3] = "scaleX"; + Property2[Property2["scaleY"] = 4] = "scaleY"; + Property2[Property2["shearX"] = 5] = "shearX"; + Property2[Property2["shearY"] = 6] = "shearY"; + Property2[Property2["inherit"] = 7] = "inherit"; + Property2[Property2["rgb"] = 8] = "rgb"; + Property2[Property2["alpha"] = 9] = "alpha"; + Property2[Property2["rgb2"] = 10] = "rgb2"; + Property2[Property2["attachment"] = 11] = "attachment"; + Property2[Property2["deform"] = 12] = "deform"; + Property2[Property2["event"] = 13] = "event"; + Property2[Property2["drawOrder"] = 14] = "drawOrder"; + Property2[Property2["ikConstraint"] = 15] = "ikConstraint"; + Property2[Property2["transformConstraint"] = 16] = "transformConstraint"; + Property2[Property2["pathConstraintPosition"] = 17] = "pathConstraintPosition"; + Property2[Property2["pathConstraintSpacing"] = 18] = "pathConstraintSpacing"; + Property2[Property2["pathConstraintMix"] = 19] = "pathConstraintMix"; + Property2[Property2["physicsConstraintInertia"] = 20] = "physicsConstraintInertia"; + Property2[Property2["physicsConstraintStrength"] = 21] = "physicsConstraintStrength"; + Property2[Property2["physicsConstraintDamping"] = 22] = "physicsConstraintDamping"; + Property2[Property2["physicsConstraintMass"] = 23] = "physicsConstraintMass"; + Property2[Property2["physicsConstraintWind"] = 24] = "physicsConstraintWind"; + Property2[Property2["physicsConstraintGravity"] = 25] = "physicsConstraintGravity"; + Property2[Property2["physicsConstraintMix"] = 26] = "physicsConstraintMix"; + Property2[Property2["physicsConstraintReset"] = 27] = "physicsConstraintReset"; + Property2[Property2["sequence"] = 28] = "sequence"; + Property2[Property2["sliderTime"] = 29] = "sliderTime"; + Property2[Property2["sliderMix"] = 30] = "sliderMix"; + return Property2; + })(Property || {}); + var Timeline = class { + propertyIds; + frames; + /** True if this timeline supports additive blending. */ + additive = false; + /** True if this timeline sets values instantaneously and does not support interpolation between frames. */ + instant = false; + constructor(frameCount, ...propertyIds) { + this.propertyIds = propertyIds; + this.frames = Utils.newFloatArray(frameCount * this.getFrameEntries()); + } + getPropertyIds() { + return this.propertyIds; + } + /** The number of values stored per frame. */ + getFrameEntries() { + return 1; + } + /** The number of frames in this timeline. */ + getFrameCount() { + return this.frames.length / this.getFrameEntries(); + } + /** The duration of the timeline in seconds, which is usually the highest time of all frames in the timeline. */ + getDuration() { + return this.frames[this.frames.length - this.getFrameEntries()]; + } + /** Linear search using the specified stride (default 1). + * @param time Must be >= the first value in `frames`. + * @return The index of the first value <= `time`. */ + static search(frames, time, step = 1) { + const n = frames.length; + for (let i = step; i < n; i += step) + if (frames[i] > time) return i - step; + return n - step; + } + }; + function isSlotTimeline(obj) { + return typeof obj === "object" && obj !== null && typeof obj.slotIndex === "number"; + } + var CurveTimeline = class extends Timeline { + curves; + // type, x, y, ... + constructor(frameCount, bezierCount, ...propertyIds) { + super(frameCount, ...propertyIds); + this.curves = Utils.newFloatArray( + frameCount + bezierCount * 18 + /*BEZIER_SIZE*/ + ); + this.curves[frameCount - 1] = 1; + } + /** Sets the specified key frame to linear interpolation. */ + setLinear(frame) { + this.curves[frame] = 0; + } + /** Sets the specified key frame to stepped interpolation. */ + setStepped(frame) { + this.curves[frame] = 1; + } + /** Shrinks the storage for Bezier curves, for use when `bezierCount` (specified in the constructor) was larger + * than the actual number of Bezier curves. */ + shrink(bezierCount) { + const size = this.getFrameCount() + bezierCount * 18; + if (this.curves.length > size) { + const newCurves = Utils.newFloatArray(size); + Utils.arrayCopy(this.curves, 0, newCurves, 0, size); + this.curves = newCurves; + } + } + /** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than + * one curve per frame. + * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and `bezierCount - 1` (specified + * in the constructor), inclusive. + * @param frame Between 0 and `frameCount - 1`, inclusive. + * @param value The index of the value for this frame that this curve is used for. + * @param time1 The time for the first key. + * @param value1 The value for the first key. + * @param cx1 The time for the first Bezier handle. + * @param cy1 The value for the first Bezier handle. + * @param cx2 The time of the second Bezier handle. + * @param cy2 The value for the second Bezier handle. + * @param time2 The time for the second key. + * @param value2 The value for the second key. */ + setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) { + const curves = this.curves; + let i = this.getFrameCount() + bezier * 18; + if (value === 0) curves[frame] = 2 + i; + const tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03; + const dddx = ((cx1 - cx2) * 3 - time1 + time2) * 6e-3, dddy = ((cy1 - cy2) * 3 - value1 + value2) * 6e-3; + let ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy; + let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667; + let x = time1 + dx, y = value1 + dy; + for (let n = i + 18; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dx += ddx; + dy += ddy; + ddx += dddx; + ddy += dddy; + x += dx; + y += dy; + } + } + /** Returns the Bezier interpolated value for the specified time. + * @param frameIndex The index into {@link frames} for the values of the frame before `time`. + * @param valueOffset The offset from `frameIndex` to the value this curve is used for. + * @param i The index of the Bezier segments. See {@link getCurveType}. */ + getBezierValue(time, frameIndex, valueOffset, i) { + const curves = this.curves; + if (curves[i] > time) { + const x2 = this.frames[frameIndex], y2 = this.frames[frameIndex + valueOffset]; + return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2); + } + const n = i + 18; + for (i += 2; i < n; i += 2) { + if (curves[i] >= time) { + const x2 = curves[i - 2], y2 = curves[i - 1]; + return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2); + } + } + frameIndex += this.getFrameEntries(); + const x = curves[n - 2], y = curves[n - 1]; + return y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y); + } + }; + var CurveTimeline1 = class extends CurveTimeline { + constructor(frameCount, bezierCount, propertyId) { + super(frameCount, bezierCount, propertyId); + } + getFrameEntries() { + return 2; + } + /** Sets the time and value for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time The frame time in seconds. */ + setFrame(frame, time, value) { + frame <<= 1; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*VALUE*/ + ] = value; + } + /** Returns the interpolated value for the specified time. */ + getCurveValue(time) { + const frames = this.frames; + let i = frames.length - 2; + for (let ii = 2; ii <= i; ii += 2) { + if (frames[ii] > time) { + i = ii - 2; + break; + } + } + const curveType = this.curves[i >> 1]; + switch (curveType) { + case 0: { + const before = frames[i], value = frames[ + i + 1 + /*VALUE*/ + ]; + return value + (time - before) / (frames[ + i + 2 + /*ENTRIES*/ + ] - before) * (frames[ + i + 2 + 1 + /*VALUE*/ + ] - value); + } + case 1: + return frames[ + i + 1 + /*VALUE*/ + ]; + } + return this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + } + /** Returns the interpolated value for properties relative to the setup value. The timeline value is added to the setup + * value, rather than replacing it. + * + * See {@link Timeline.apply}. + * @param current The current value for the property. + * @param setup The setup value for the property. */ + getRelativeValue(time, alpha, fromSetup, add, current, setup) { + if (time < this.frames[0]) return fromSetup ? setup : current; + const value = this.getCurveValue(time); + return fromSetup ? setup + value * alpha : current + (add ? value : value + setup - current) * alpha; + } + getAbsoluteValue(time, alpha, fromSetup, add, current, setup, value) { + if (value === void 0) + return this.getAbsoluteValue1(time, alpha, fromSetup, add, current, setup); + else + return this.getAbsoluteValue2(time, alpha, fromSetup, add, current, setup, value); + } + getAbsoluteValue1(time, alpha, fromSetup, add, current, setup) { + if (time < this.frames[0]) return fromSetup ? setup : current; + const value = this.getCurveValue(time); + return fromSetup ? setup + (add ? value : value - setup) * alpha : current + (add ? value : value - current) * alpha; + } + getAbsoluteValue2(time, alpha, fromSetup, add, current, setup, value) { + if (time < this.frames[0]) return fromSetup ? setup : current; + return fromSetup ? setup + (add ? value : value - setup) * alpha : current + (add ? value : value - current) * alpha; + } + /** Returns the interpolated value for scale properties. The timeline and setup values are multiplied and sign adjusted. + * + * See {@link Timeline.apply}. + * @param current The current value for the property. + * @param setup The setup value for the property. */ + getScaleValue(time, alpha, fromSetup, add, out, current, setup) { + if (time < this.frames[0]) return fromSetup ? setup : current; + const value = this.getCurveValue(time) * setup; + if (alpha === 1 && !add) return value; + let base = fromSetup ? setup : current; + if (add) return base + (value - setup) * alpha; + if (out) return base + (Math.abs(value) * Math.sign(base) - base) * alpha; + base = Math.abs(base) * Math.sign(value); + return base + (value - base) * alpha; + } + }; + function isBoneTimeline(obj) { + return typeof obj === "object" && obj !== null && typeof obj.boneIndex === "number"; + } + var BoneTimeline1 = class extends CurveTimeline1 { + boneIndex; + constructor(frameCount, bezierCount, boneIndex, property) { + super(frameCount, bezierCount, `${property}|${boneIndex}`); + this.boneIndex = boneIndex; + this.additive = true; + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const bone = skeleton.bones[this.boneIndex]; + if (bone.active) + this.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, fromSetup, add, out); + } + }; + var BoneTimeline2 = class extends CurveTimeline { + boneIndex; + /** @param bezierCount The maximum number of Bezier curves. See {@link shrink}. + * @param propertyIds Unique identifiers for the properties the timeline modifies. */ + constructor(frameCount, bezierCount, boneIndex, property1, property2) { + super(frameCount, bezierCount, `${property1}|${boneIndex}`, `${property2}|${boneIndex}`); + this.boneIndex = boneIndex; + this.additive = true; + } + getFrameEntries() { + return 3; + } + /** Sets the time and values for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time The frame time in seconds. */ + setFrame(frame, time, value1, value2) { + frame *= 3; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*VALUE1*/ + ] = value1; + this.frames[ + frame + 2 + /*VALUE2*/ + ] = value2; + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const bone = skeleton.bones[this.boneIndex]; + if (bone.active) + this.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, fromSetup, add, out); + } + }; + var RotateTimeline = class extends BoneTimeline1 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 0 /* rotate */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + pose.rotation = this.getRelativeValue(time, alpha, fromSetup, add, pose.rotation, setup.rotation); + } + }; + var TranslateTimeline = class extends BoneTimeline2 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 1 /* x */, 2 /* y */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + pose.x = setup.x; + pose.y = setup.y; + } + return; + } + let x = 0, y = 0; + const i = Timeline.search( + frames, + time, + 3 + /*ENTRIES*/ + ); + const curveType = this.curves[ + i / 3 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: { + const before = frames[i]; + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + const t = (time - before) / (frames[ + i + 3 + /*ENTRIES*/ + ] - before); + x += (frames[ + i + 3 + 1 + /*VALUE1*/ + ] - x) * t; + y += (frames[ + i + 3 + 2 + /*VALUE2*/ + ] - y) * t; + break; + } + case 1: + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + break; + default: + x = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + } + if (fromSetup) { + pose.x = setup.x + x * alpha; + pose.y = setup.y + y * alpha; + } else if (add) { + pose.x += x * alpha; + pose.y += y * alpha; + } else { + pose.x += (setup.x + x - pose.x) * alpha; + pose.y += (setup.y + y - pose.y) * alpha; + } + } + }; + var TranslateXTimeline = class extends BoneTimeline1 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 1 /* x */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + pose.x = this.getRelativeValue(time, alpha, fromSetup, add, pose.x, setup.x); + } + }; + var TranslateYTimeline = class extends BoneTimeline1 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 2 /* y */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + pose.y = this.getRelativeValue(time, alpha, fromSetup, add, pose.y, setup.y); + } + }; + var ScaleTimeline = class extends BoneTimeline2 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 3 /* scaleX */, 4 /* scaleY */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + pose.scaleX = setup.scaleX; + pose.scaleY = setup.scaleY; + } + return; + } + let x, y; + const i = Timeline.search( + frames, + time, + 3 + /*ENTRIES*/ + ); + const curveType = this.curves[ + i / 3 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: { + const before = frames[i]; + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + const t = (time - before) / (frames[ + i + 3 + /*ENTRIES*/ + ] - before); + x += (frames[ + i + 3 + 1 + /*VALUE1*/ + ] - x) * t; + y += (frames[ + i + 3 + 2 + /*VALUE2*/ + ] - y) * t; + break; + } + case 1: + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + break; + default: + x = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + } + x *= setup.scaleX; + y *= setup.scaleY; + if (alpha === 1 && !add) { + pose.scaleX = x; + pose.scaleY = y; + } else { + let bx = 0, by = 0; + if (fromSetup) { + bx = setup.scaleX; + by = setup.scaleY; + } else { + bx = pose.scaleX; + by = pose.scaleY; + } + if (add) { + pose.scaleX = bx + (x - setup.scaleX) * alpha; + pose.scaleY = by + (y - setup.scaleY) * alpha; + } else if (out) { + pose.scaleX = bx + (Math.abs(x) * Math.sign(bx) - bx) * alpha; + pose.scaleY = by + (Math.abs(y) * Math.sign(by) - by) * alpha; + } else { + bx = Math.abs(bx) * Math.sign(x); + by = Math.abs(by) * Math.sign(y); + pose.scaleX = bx + (x - bx) * alpha; + pose.scaleY = by + (y - by) * alpha; + } + } + } + }; + var ScaleXTimeline = class extends BoneTimeline1 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 3 /* scaleX */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + pose.scaleX = this.getScaleValue(time, alpha, fromSetup, add, out, pose.scaleX, setup.scaleX); + } + }; + var ScaleYTimeline = class extends BoneTimeline1 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 4 /* scaleY */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + pose.scaleY = this.getScaleValue(time, alpha, fromSetup, add, out, pose.scaleY, setup.scaleY); + } + }; + var ShearTimeline = class extends BoneTimeline2 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 5 /* shearX */, 6 /* shearY */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + pose.shearX = setup.shearX; + pose.shearY = setup.shearY; + } + return; + } + let x = 0, y = 0; + const i = Timeline.search( + frames, + time, + 3 + /*ENTRIES*/ + ); + const curveType = this.curves[ + i / 3 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: { + const before = frames[i]; + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + const t = (time - before) / (frames[ + i + 3 + /*ENTRIES*/ + ] - before); + x += (frames[ + i + 3 + 1 + /*VALUE1*/ + ] - x) * t; + y += (frames[ + i + 3 + 2 + /*VALUE2*/ + ] - y) * t; + break; + } + case 1: + x = frames[ + i + 1 + /*VALUE1*/ + ]; + y = frames[ + i + 2 + /*VALUE2*/ + ]; + break; + default: + x = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + } + if (fromSetup) { + pose.shearX = setup.shearX + x * alpha; + pose.shearY = setup.shearY + y * alpha; + } else if (add) { + pose.shearX += x * alpha; + pose.shearY += y * alpha; + } else { + pose.shearX += (setup.shearX + x - pose.shearX) * alpha; + pose.shearY += (setup.shearY + y - pose.shearY) * alpha; + } + } + }; + var ShearXTimeline = class extends BoneTimeline1 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 5 /* shearX */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + pose.shearX = this.getRelativeValue(time, alpha, fromSetup, add, pose.shearX, setup.shearX); + } + }; + var ShearYTimeline = class extends BoneTimeline1 { + constructor(frameCount, bezierCount, boneIndex) { + super(frameCount, bezierCount, boneIndex, 6 /* shearY */); + } + apply1(pose, setup, time, alpha, fromSetup, add, out) { + pose.shearY = this.getRelativeValue(time, alpha, fromSetup, add, pose.shearY, setup.shearY); + } + }; + var InheritTimeline = class extends Timeline { + boneIndex; + constructor(frameCount, boneIndex) { + super(frameCount, `${7 /* inherit */}|${boneIndex}`); + this.boneIndex = boneIndex; + this.instant = true; + } + getFrameEntries() { + return 2; + } + /** Sets the inherit transform mode for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time The frame time in seconds. */ + setFrame(frame, time, inherit) { + frame *= 2; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*INHERIT*/ + ] = inherit; + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const bone = skeleton.bones[this.boneIndex]; + if (!bone.active) return; + const pose = appliedPose ? bone.appliedPose : bone.pose; + if (out) { + if (fromSetup) pose.inherit = bone.data.setupPose.inherit; + } else { + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) pose.inherit = bone.data.setupPose.inherit; + } else + pose.inherit = this.frames[ + Timeline.search( + frames, + time, + 2 + /*ENTRIES*/ + ) + 1 + /*INHERIT*/ + ]; + } + } + }; + var SlotCurveTimeline = class extends CurveTimeline { + slotIndex; + constructor(frameCount, bezierCount, slotIndex, ...propertyIds) { + super(frameCount, bezierCount, ...propertyIds); + this.slotIndex = slotIndex; + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const slot = skeleton.slots[this.slotIndex]; + if (slot.bone.active) this.apply1(slot, appliedPose ? slot.appliedPose : slot.pose, time, alpha, fromSetup, add); + } + }; + var RGBATimeline = class extends SlotCurveTimeline { + constructor(frameCount, bezierCount, slotIndex) { + super( + frameCount, + bezierCount, + slotIndex, + // + `${8 /* rgb */}|${slotIndex}`, + // + `${9 /* alpha */}|${slotIndex}` + ); + } + getFrameEntries() { + return 5; + } + /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */ + setFrame(frame, time, r, g, b, a) { + frame *= 5; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*R*/ + ] = r; + this.frames[ + frame + 2 + /*G*/ + ] = g; + this.frames[ + frame + 3 + /*B*/ + ] = b; + this.frames[ + frame + 4 + /*A*/ + ] = a; + } + apply1(slot, pose, time, alpha, fromSetup, add) { + const color = pose.color; + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) color.setFromColor(slot.data.setupPose.color); + return; + } + let r = 0, g = 0, b = 0, a = 0; + const i = Timeline.search( + frames, + time, + 5 + /*ENTRIES*/ + ); + const curveType = this.curves[ + i / 5 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: { + const before = frames[i]; + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + a = frames[ + i + 4 + /*A*/ + ]; + const t = (time - before) / (frames[ + i + 5 + /*ENTRIES*/ + ] - before); + r += (frames[ + i + 5 + 1 + /*R*/ + ] - r) * t; + g += (frames[ + i + 5 + 2 + /*G*/ + ] - g) * t; + b += (frames[ + i + 5 + 3 + /*B*/ + ] - b) * t; + a += (frames[ + i + 5 + 4 + /*A*/ + ] - a) * t; + break; + } + case 1: + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + a = frames[ + i + 4 + /*A*/ + ]; + break; + default: + r = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + g = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + b = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + a = this.getBezierValue( + time, + i, + 4, + curveType + 18 * 3 - 2 + /*BEZIER*/ + ); + } + if (alpha === 1) + color.set(r, g, b, a); + else { + if (fromSetup) { + const setup = slot.data.setupPose.color; + color.set( + setup.r + (r - setup.r) * alpha, + setup.g + (g - setup.g) * alpha, + setup.b + (b - setup.b) * alpha, + setup.a + (a - setup.a) * alpha + ); + } else + color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha); + } + } + }; + var RGBTimeline = class extends SlotCurveTimeline { + constructor(frameCount, bezierCount, slotIndex) { + super(frameCount, bezierCount, slotIndex, `${8 /* rgb */}|${slotIndex}`); + } + getFrameEntries() { + return 4; + } + /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */ + setFrame(frame, time, r, g, b) { + frame <<= 2; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*R*/ + ] = r; + this.frames[ + frame + 2 + /*G*/ + ] = g; + this.frames[ + frame + 3 + /*B*/ + ] = b; + } + apply1(slot, pose, time, alpha, fromSetup, add) { + const color = pose.color; + let r = 0, g = 0, b = 0; + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + const setup = slot.data.setupPose.color; + color.r = setup.r; + color.g = setup.g; + color.b = setup.b; + } + return; + } + const i = Timeline.search( + frames, + time, + 4 + /*ENTRIES*/ + ); + const curveType = this.curves[i >> 2]; + switch (curveType) { + case 0: { + const before = frames[i]; + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + const t = (time - before) / (frames[ + i + 4 + /*ENTRIES*/ + ] - before); + r += (frames[ + i + 4 + 1 + /*R*/ + ] - r) * t; + g += (frames[ + i + 4 + 2 + /*G*/ + ] - g) * t; + b += (frames[ + i + 4 + 3 + /*B*/ + ] - b) * t; + break; + } + case 1: + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + break; + default: + r = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + g = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + b = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + } + if (alpha !== 1) { + if (fromSetup) { + const setup = slot.data.setupPose.color; + r = setup.r + (r - setup.r) * alpha; + g = setup.g + (g - setup.g) * alpha; + b = setup.b + (b - setup.b) * alpha; + } else { + r = color.r + (r - color.r) * alpha; + g = color.g + (g - color.g) * alpha; + b = color.b + (b - color.b) * alpha; + } + } + color.r = r < 0 ? 0 : r > 1 ? 1 : r; + color.g = g < 0 ? 0 : g > 1 ? 1 : g; + color.b = b < 0 ? 0 : b > 1 ? 1 : b; + } + }; + var AlphaTimeline = class extends CurveTimeline1 { + slotIndex = 0; + constructor(frameCount, bezierCount, slotIndex) { + super(frameCount, bezierCount, `${9 /* alpha */}|${slotIndex}`); + this.slotIndex = slotIndex; + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + const color = (appliedPose ? slot.appliedPose : slot.pose).color; + let a = 0; + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) color.a = slot.data.setupPose.color.a; + return; + } + a = this.getCurveValue(time); + if (alpha !== 1) { + if (fromSetup) { + const setup = slot.data.setupPose.color; + a = setup.a + (a - setup.a) * alpha; + } else + a = color.a + (a - color.a) * alpha; + } + color.a = a < 0 ? 0 : a > 1 ? 1 : a; + } + }; + var RGBA2Timeline = class extends SlotCurveTimeline { + constructor(frameCount, bezierCount, slotIndex) { + super( + frameCount, + bezierCount, + slotIndex, + // + `${8 /* rgb */}|${slotIndex}`, + // + `${9 /* alpha */}|${slotIndex}`, + // + `${10 /* rgb2 */}|${slotIndex}` + ); + } + getFrameEntries() { + return 8; + } + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + setFrame(frame, time, r, g, b, a, r2, g2, b2) { + frame <<= 3; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*R*/ + ] = r; + this.frames[ + frame + 2 + /*G*/ + ] = g; + this.frames[ + frame + 3 + /*B*/ + ] = b; + this.frames[ + frame + 4 + /*A*/ + ] = a; + this.frames[ + frame + 5 + /*R2*/ + ] = r2; + this.frames[ + frame + 6 + /*G2*/ + ] = g2; + this.frames[ + frame + 7 + /*B2*/ + ] = b2; + } + apply1(slot, pose, time, alpha, fromSetup, add) { + const light = pose.color, dark = pose.darkColor; + let r2 = 0, g2 = 0, b2 = 0; + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + const setup = slot.data.setupPose; + light.setFromColor(setup.color); + const setupDark = setup.darkColor; + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + } + return; + } + let r = 0, g = 0, b = 0, a = 0; + const i = Timeline.search( + frames, + time, + 8 + /*ENTRIES*/ + ); + const curveType = this.curves[i >> 3]; + switch (curveType) { + case 0: { + const before = frames[i]; + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + a = frames[ + i + 4 + /*A*/ + ]; + r2 = frames[ + i + 5 + /*R2*/ + ]; + g2 = frames[ + i + 6 + /*G2*/ + ]; + b2 = frames[ + i + 7 + /*B2*/ + ]; + const t = (time - before) / (frames[ + i + 8 + /*ENTRIES*/ + ] - before); + r += (frames[ + i + 8 + 1 + /*R*/ + ] - r) * t; + g += (frames[ + i + 8 + 2 + /*G*/ + ] - g) * t; + b += (frames[ + i + 8 + 3 + /*B*/ + ] - b) * t; + a += (frames[ + i + 8 + 4 + /*A*/ + ] - a) * t; + r2 += (frames[ + i + 8 + 5 + /*R2*/ + ] - r2) * t; + g2 += (frames[ + i + 8 + 6 + /*G2*/ + ] - g2) * t; + b2 += (frames[ + i + 8 + 7 + /*B2*/ + ] - b2) * t; + break; + } + case 1: + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + a = frames[ + i + 4 + /*A*/ + ]; + r2 = frames[ + i + 5 + /*R2*/ + ]; + g2 = frames[ + i + 6 + /*G2*/ + ]; + b2 = frames[ + i + 7 + /*B2*/ + ]; + break; + default: + r = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + g = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + b = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + a = this.getBezierValue( + time, + i, + 4, + curveType + 18 * 3 - 2 + /*BEZIER*/ + ); + r2 = this.getBezierValue( + time, + i, + 5, + curveType + 18 * 4 - 2 + /*BEZIER*/ + ); + g2 = this.getBezierValue( + time, + i, + 6, + curveType + 18 * 5 - 2 + /*BEZIER*/ + ); + b2 = this.getBezierValue( + time, + i, + 7, + curveType + 18 * 6 - 2 + /*BEZIER*/ + ); + } + if (alpha === 1) + light.set(r, g, b, a); + else if (fromSetup) { + const setupPose = slot.data.setupPose; + let setup = setupPose.color; + light.set( + setup.r + (r - setup.r) * alpha, + setup.g + (g - setup.g) * alpha, + setup.b + (b - setup.b) * alpha, + setup.a + (a - setup.a) * alpha + ); + setup = setupPose.darkColor; + r2 = setup.r + (r2 - setup.r) * alpha; + g2 = setup.g + (g2 - setup.g) * alpha; + b2 = setup.b + (b2 - setup.b) * alpha; + } else { + light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha); + r2 = dark.r + (r2 - dark.r) * alpha; + g2 = dark.g + (g2 - dark.g) * alpha; + b2 = dark.b + (b2 - dark.b) * alpha; + } + dark.r = r2 < 0 ? 0 : r2 > 1 ? 1 : r2; + dark.g = g2 < 0 ? 0 : g2 > 1 ? 1 : g2; + dark.b = b2 < 0 ? 0 : b2 > 1 ? 1 : b2; + } + }; + var RGB2Timeline = class extends SlotCurveTimeline { + constructor(frameCount, bezierCount, slotIndex) { + super( + frameCount, + bezierCount, + slotIndex, + // + `${8 /* rgb */}|${slotIndex}`, + // + `${10 /* rgb2 */}|${slotIndex}` + ); + } + getFrameEntries() { + return 7; + } + /** Sets the time in seconds, light, and dark colors for the specified key frame. */ + setFrame(frame, time, r, g, b, r2, g2, b2) { + frame *= 7; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*R*/ + ] = r; + this.frames[ + frame + 2 + /*G*/ + ] = g; + this.frames[ + frame + 3 + /*B*/ + ] = b; + this.frames[ + frame + 4 + /*R2*/ + ] = r2; + this.frames[ + frame + 5 + /*G2*/ + ] = g2; + this.frames[ + frame + 6 + /*B2*/ + ] = b2; + } + apply1(slot, pose, time, alpha, fromSetup, add) { + const light = pose.color, dark = pose.darkColor; + let r = 0, g = 0, b = 0, r2 = 0, g2 = 0, b2 = 0; + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + const setup = slot.data.setupPose; + const setupLight = setup.color, setupDark = setup.darkColor; + light.r = setupLight.r; + light.g = setupLight.g; + light.b = setupLight.b; + dark.r = setupDark.r; + dark.g = setupDark.g; + dark.b = setupDark.b; + } + return; + } + const i = Timeline.search( + frames, + time, + 7 + /*ENTRIES*/ + ); + const curveType = this.curves[ + i / 7 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: { + const before = frames[i]; + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + r2 = frames[ + i + 4 + /*R2*/ + ]; + g2 = frames[ + i + 5 + /*G2*/ + ]; + b2 = frames[ + i + 6 + /*B2*/ + ]; + const t = (time - before) / (frames[ + i + 7 + /*ENTRIES*/ + ] - before); + r += (frames[ + i + 7 + 1 + /*R*/ + ] - r) * t; + g += (frames[ + i + 7 + 2 + /*G*/ + ] - g) * t; + b += (frames[ + i + 7 + 3 + /*B*/ + ] - b) * t; + r2 += (frames[ + i + 7 + 4 + /*R2*/ + ] - r2) * t; + g2 += (frames[ + i + 7 + 5 + /*G2*/ + ] - g2) * t; + b2 += (frames[ + i + 7 + 6 + /*B2*/ + ] - b2) * t; + break; + } + case 1: + r = frames[ + i + 1 + /*R*/ + ]; + g = frames[ + i + 2 + /*G*/ + ]; + b = frames[ + i + 3 + /*B*/ + ]; + r2 = frames[ + i + 4 + /*R2*/ + ]; + g2 = frames[ + i + 5 + /*G2*/ + ]; + b2 = frames[ + i + 6 + /*B2*/ + ]; + break; + default: + r = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + g = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + b = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + r2 = this.getBezierValue( + time, + i, + 4, + curveType + 18 * 3 - 2 + /*BEZIER*/ + ); + g2 = this.getBezierValue( + time, + i, + 5, + curveType + 18 * 4 - 2 + /*BEZIER*/ + ); + b2 = this.getBezierValue( + time, + i, + 6, + curveType + 18 * 5 - 2 + /*BEZIER*/ + ); + } + if (alpha !== 1) { + if (fromSetup) { + const setupPose = slot.data.setupPose; + let setup = setupPose.color; + r = setup.r + (r - setup.r) * alpha; + g = setup.g + (g - setup.g) * alpha; + b = setup.b + (b - setup.b) * alpha; + setup = setupPose.darkColor; + r2 = setup.r + (r2 - setup.r) * alpha; + g2 = setup.g + (g2 - setup.g) * alpha; + b2 = setup.b + (b2 - setup.b) * alpha; + } else { + r = light.r + (r - light.r) * alpha; + g = light.g + (g - light.g) * alpha; + b = light.b + (b - light.b) * alpha; + r2 = dark.r + (r2 - dark.r) * alpha; + g2 = dark.g + (g2 - dark.g) * alpha; + b2 = dark.b + (b2 - dark.b) * alpha; + } + } + light.r = r < 0 ? 0 : r > 1 ? 1 : r; + light.g = g < 0 ? 0 : g > 1 ? 1 : g; + light.b = b < 0 ? 0 : b > 1 ? 1 : b; + dark.r = r2 < 0 ? 0 : r2 > 1 ? 1 : r2; + dark.g = g2 < 0 ? 0 : g2 > 1 ? 1 : g2; + dark.b = b2 < 0 ? 0 : b2 > 1 ? 1 : b2; + } + }; + var AttachmentTimeline = class extends Timeline { + slotIndex = 0; + /** The attachment name for each key frame. May contain null values to clear the attachment. */ + attachmentNames; + constructor(frameCount, slotIndex) { + super(frameCount, `${11 /* attachment */}|${slotIndex}`); + this.slotIndex = slotIndex; + this.attachmentNames = new Array(frameCount); + this.instant = true; + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time in seconds and the attachment name for the specified key frame. */ + setFrame(frame, time, attachmentName) { + this.frames[frame] = time; + this.attachmentNames[frame] = attachmentName; + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const slot = skeleton.slots[this.slotIndex]; + if (!slot.bone.active) return; + const pose = appliedPose ? slot.appliedPose : slot.pose; + if (out || time < this.frames[0]) { + if (fromSetup) this.setAttachment(skeleton, pose, slot.data.attachmentName); + } else + this.setAttachment(skeleton, pose, this.attachmentNames[Timeline.search(this.frames, time)]); + } + setAttachment(skeleton, pose, attachmentName) { + pose.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + } + }; + var DeformTimeline = class extends CurveTimeline { + slotIndex; + /** The attachment that will be deformed. + * + * See {@link VertexAttachment.getTimelineAttachment}. */ + attachment; + /** The vertices for each key frame. */ + vertices; + constructor(frameCount, bezierCount, slotIndex, attachment) { + super(frameCount, bezierCount, `${12 /* deform */}|${slotIndex}|${attachment.id}`); + this.slotIndex = slotIndex; + this.attachment = attachment; + this.vertices = new Array(frameCount); + this.additive = true; + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time and vertices for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time The frame time in seconds. + * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */ + setFrame(frame, time, vertices) { + this.frames[frame] = time; + this.vertices[frame] = vertices; + } + /** @param value1 Ignored (0 is used for a deform timeline). + * @param value2 Ignored (1 is used for a deform timeline). */ + setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) { + const curves = this.curves; + let i = this.getFrameCount() + bezier * 18; + if (value === 0) curves[frame] = 2 + i; + const tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06; + const dddx = ((cx1 - cx2) * 3 - time1 + time2) * 6e-3, dddy = (cy1 - cy2 + 0.33333333) * 0.018; + let ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy; + let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667; + let x = time1 + dx, y = dy; + for (let n = i + 18; i < n; i += 2) { + curves[i] = x; + curves[i + 1] = y; + dx += ddx; + dy += ddy; + ddx += dddx; + ddy += dddy; + x += dx; + y += dy; + } + } + getCurvePercent(time, frame) { + const curves = this.curves; + let i = curves[frame]; + switch (i) { + case 0: { + const x2 = this.frames[frame]; + return (time - x2) / (this.frames[frame + this.getFrameEntries()] - x2); + } + case 1: + return 0; + } + i -= 2; + if (curves[i] > time) { + const x2 = this.frames[frame]; + return curves[i + 1] * (time - x2) / (curves[i] - x2); + } + const n = i + 18; + for (i += 2; i < n; i += 2) { + if (curves[i] >= time) { + const x2 = curves[i - 2], y2 = curves[i - 1]; + return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2); + } + } + const x = curves[n - 2], y = curves[n - 1]; + return y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x); + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const slots = skeleton.slots; + if (!this.attachment.isTimelineActive(slots, this.slotIndex, appliedPose)) return; + const timelineSlots = this.attachment.timelineSlots; + const frames = this.frames; + if (time < frames[0]) { + this.applyBeforeFirst(slots[this.slotIndex], appliedPose, fromSetup); + for (const slotIndex of timelineSlots) + this.applyBeforeFirst(slots[slotIndex], appliedPose, fromSetup); + return; + } + let v1, v2; + let percent; + if (time >= frames[frames.length - 1]) { + percent = 0; + v1 = this.vertices[frames.length - 1]; + v2 = null; + } else { + const frame = Timeline.search(frames, time); + percent = this.getCurvePercent(time, frame); + v1 = this.vertices[frame]; + v2 = this.vertices[frame + 1]; + } + const vertexCount = this.vertices[0].length; + this.applyToSlot(slots[this.slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add); + for (const slotIndex of timelineSlots) + this.applyToSlot(slots[slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add); + } + applyToSlot(slot, appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add) { + if (!slot.bone.active) return; + const pose = appliedPose ? slot.appliedPose : slot.pose; + if (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return; + const vertexAttachment = pose.attachment; + const deform = pose.deform; + if (deform.length === 0) fromSetup = true; + deform.length = vertexCount; + if (v2 === null) { + if (alpha === 1) { + if (add && !fromSetup) { + if (!vertexAttachment.bones) { + const setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) + deform[i] += v1[i] - setupVertices[i]; + } else { + for (let i = 0; i < vertexCount; i++) + deform[i] += v1[i]; + } + } else + Utils.arrayCopy(v1, 0, deform, 0, vertexCount); + } else if (fromSetup) { + if (!vertexAttachment.bones) { + const setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + const setup = setupVertices[i]; + deform[i] = setup + (v1[i] - setup) * alpha; + } + } else { + for (let i = 0; i < vertexCount; i++) + deform[i] = v1[i] * alpha; + } + } else if (add) { + if (!vertexAttachment.bones) { + const setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) + deform[i] += (v1[i] - setupVertices[i]) * alpha; + } else { + for (let i = 0; i < vertexCount; i++) + deform[i] += v1[i] * alpha; + } + } else { + for (let i = 0; i < vertexCount; i++) + deform[i] += (v1[i] - deform[i]) * alpha; + } + } else { + if (alpha === 1) { + if (add && !fromSetup) { + if (!vertexAttachment.bones) { + const setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + const prev = v1[i]; + deform[i] += prev + (v2[i] - prev) * percent - setupVertices[i]; + } + } else { + for (let i = 0; i < vertexCount; i++) { + const prev = v1[i]; + deform[i] += prev + (v2[i] - prev) * percent; + } + } + } else if (percent === 0) + Utils.arrayCopy(v1, 0, deform, 0, vertexCount); + else { + for (let i = 0; i < vertexCount; i++) { + const prev = v1[i]; + deform[i] = prev + (v2[i] - prev) * percent; + } + } + } else if (fromSetup) { + if (!vertexAttachment.bones) { + const setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + const prev = v1[i], setup = setupVertices[i]; + deform[i] = setup + (prev + (v2[i] - prev) * percent - setup) * alpha; + } + } else { + for (let i = 0; i < vertexCount; i++) { + const prev = v1[i]; + deform[i] = (prev + (v2[i] - prev) * percent) * alpha; + } + } + } else if (add) { + if (!vertexAttachment.bones) { + const setupVertices = vertexAttachment.vertices; + for (let i = 0; i < vertexCount; i++) { + const prev = v1[i]; + deform[i] += (prev + (v2[i] - prev) * percent - setupVertices[i]) * alpha; + } + } else { + for (let i = 0; i < vertexCount; i++) { + const prev = v1[i]; + deform[i] += (prev + (v2[i] - prev) * percent) * alpha; + } + } + } else { + for (let i = 0; i < vertexCount; i++) { + const prev = v1[i]; + deform[i] += (prev + (v2[i] - prev) * percent - deform[i]) * alpha; + } + } + } + } + applyBeforeFirst(slot, appliedPose, fromSetup) { + if (!slot.bone.active) return; + const pose = appliedPose ? slot.appliedPose : slot.pose; + if (pose.attachment == null || pose.attachment.timelineAttachment !== this.attachment) return; + if (pose.deform.length === 0) fromSetup = true; + if (fromSetup) pose.deform.length = 0; + } + }; + var SequenceTimeline = class _SequenceTimeline extends Timeline { + static ENTRIES = 3; + static MODE = 1; + static DELAY = 2; + slotIndex; + attachment; + constructor(frameCount, slotIndex, attachment) { + super(frameCount, `${28 /* sequence */}|${slotIndex}|${attachment.sequence.id}`); + this.slotIndex = slotIndex; + this.attachment = attachment; + this.instant = true; + } + getFrameEntries() { + return _SequenceTimeline.ENTRIES; + } + getSlotIndex() { + return this.slotIndex; + } + /** The attachment for which the {@link SlotPose.sequenceIndex} will be set. + * + * See {@link VertexAttachment.timelineAttachment}. */ + getAttachment() { + return this.attachment; + } + /** Sets the time, mode, index, and frame time for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time Seconds between frames. */ + setFrame(frame, time, mode, index, delay) { + const frames = this.frames; + frame *= _SequenceTimeline.ENTRIES; + frames[frame] = time; + frames[frame + _SequenceTimeline.MODE] = mode | index << 4; + frames[frame + _SequenceTimeline.DELAY] = delay; + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const slots = skeleton.slots; + if (!this.attachment.isTimelineActive(slots, this.slotIndex, appliedPose)) return; + const timelineSlots = this.attachment.timelineSlots; + const frames = this.frames; + if (out || time < frames[0]) { + if (fromSetup) { + this.setupPose(slots[this.slotIndex], appliedPose); + for (const slotIndex of timelineSlots) + this.setupPose(slots[slotIndex], appliedPose); + } + return; + } + const i = Timeline.search(frames, time, _SequenceTimeline.ENTRIES); + const before = frames[i]; + const modeAndIndex = frames[i + _SequenceTimeline.MODE]; + const delay = frames[i + _SequenceTimeline.DELAY]; + this.applyToSlot(slots[this.slotIndex], appliedPose, time, before, modeAndIndex, delay); + for (const slotIndex of timelineSlots) + this.applyToSlot(slots[slotIndex], appliedPose, time, before, modeAndIndex, delay); + } + setupPose(slot, appliedPose) { + if (!slot.bone.active) return; + const pose = appliedPose ? slot.appliedPose : slot.pose; + if (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return; + pose.sequenceIndex = -1; + } + applyToSlot(slot, appliedPose, time, before, modeAndIndex, delay) { + if (!slot.bone.active) return; + const pose = appliedPose ? slot.appliedPose : slot.pose; + if (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return; + let index = modeAndIndex >> 4, count = pose.attachment.sequence.regions.length; + const mode = SequenceModeValues[modeAndIndex & 15]; + if (mode !== 0 /* hold */) { + index += (time - before) / delay + 1e-5 | 0; + switch (mode) { + case 1 /* once */: + index = Math.min(count - 1, index); + break; + case 2 /* loop */: + index %= count; + break; + case 3 /* pingpong */: { + const n = (count << 1) - 2; + index = n === 0 ? 0 : index % n; + if (index >= count) index = n - index; + break; + } + case 4 /* onceReverse */: + index = Math.max(count - 1 - index, 0); + break; + case 5 /* loopReverse */: + index = count - 1 - index % count; + break; + case 6 /* pingpongReverse */: { + const n = (count << 1) - 2; + index = n === 0 ? 0 : (index + count - 1) % n; + if (index >= count) index = n - index; + } + } + } + pose.sequenceIndex = index; + } + }; + var EventTimeline = class _EventTimeline extends Timeline { + static propertyIds = [`${13 /* event */}`]; + /** The event for each key frame. */ + events; + constructor(frameCount) { + super(frameCount, ..._EventTimeline.propertyIds); + this.events = new Array(frameCount); + this.instant = true; + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time in seconds and the event for the specified key frame. */ + setFrame(frame, event) { + this.frames[frame] = event.time; + this.events[frame] = event; + } + /** Fires events for frames > `lastTime` and <= `time`. */ + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + if (!firedEvents) return; + const frames = this.frames; + const frameCount = this.frames.length; + if (lastTime > time) { + this.apply(null, lastTime, Number.MAX_VALUE, firedEvents, 0, false, false, false, false); + lastTime = -1; + } else if (lastTime >= frames[frameCount - 1]) + return; + if (time < frames[0]) return; + let i = 0; + if (lastTime < frames[0]) + i = 0; + else { + i = Timeline.search(frames, lastTime) + 1; + const frameTime = frames[i]; + while (i > 0) { + if (frames[i - 1] !== frameTime) break; + i--; + } + } + for (; i < frameCount && time >= frames[i]; i++) + firedEvents.push(this.events[i]); + } + }; + var DrawOrderTimeline = class _DrawOrderTimeline extends Timeline { + static propertyID = `${14 /* drawOrder */}`; + static propertyIds = [_DrawOrderTimeline.propertyID]; + /** The draw order for each key frame. See {@link setFrame}. */ + drawOrders; + constructor(frameCount) { + super(frameCount, ..._DrawOrderTimeline.propertyIds); + this.drawOrders = new Array(frameCount); + this.instant = true; + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time in seconds and the draw order for the specified key frame. + * @param drawOrder Ordered {@link Skeleton.slots} indices, or null to use setup pose + * draw order. */ + setFrame(frame, time, drawOrder) { + this.frames[frame] = time; + this.drawOrders[frame] = drawOrder; + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + const pose = appliedPose ? skeleton.drawOrder.appliedPose : skeleton.drawOrder.pose; + const setup = skeleton.slots; + if (out || time < this.frames[0]) { + if (fromSetup) Utils.arrayCopy(setup, 0, pose, 0, skeleton.slots.length); + return; + } + const order = this.drawOrders[Timeline.search(this.frames, time)]; + if (!order) + Utils.arrayCopy(setup, 0, pose, 0, skeleton.slots.length); + else { + for (let i = 0, n = order.length; i < n; i++) + pose[i] = setup[order[i]]; + } + } + }; + var DrawOrderFolderTimeline = class _DrawOrderFolderTimeline extends Timeline { + slots; + inFolder; + drawOrders; + /** @param slots {@link Skeleton.slots} indices controlled by this timeline, in setup order. + * @param slotCount The maximum number of slots in the skeleton. */ + constructor(frameCount, slots, slotCount) { + super(frameCount, ..._DrawOrderFolderTimeline.propertyIds(slots)); + this.slots = slots; + this.drawOrders = new Array(frameCount); + this.inFolder = new Array(slotCount); + for (const i of slots) + this.inFolder[i] = true; + this.instant = true; + } + static propertyIds(slots) { + const n = slots.length; + const ids = new Array(n); + for (let i = 0; i < n; i++) + ids[i] = `d${slots[i]}`; + return ids; + } + getFrameCount() { + return this.frames.length; + } + /** The {@link Skeleton.getSlots} indices that this timeline affects, in setup order. */ + getSlots() { + return this.slots; + } + /** The draw order for each frame. See {@link setFrame}. */ + getDrawOrders() { + return this.drawOrders; + } + /** Sets the time and draw order for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time The frame time in seconds. + * @param drawOrder Ordered {@link getSlots} indices, or null to use setup pose order. */ + setFrame(frame, time, drawOrder) { + this.frames[frame] = time; + this.drawOrders[frame] = drawOrder; + } + apply(skeleton, lastTime, time, events, alpha, fromSetup, add, out, appliedPose) { + const pose = appliedPose ? skeleton.drawOrder.appliedPose : skeleton.drawOrder.pose; + const setup = skeleton.slots; + if (out || time < this.frames[0]) { + if (fromSetup) this.setup(pose, setup); + } else { + const order = this.drawOrders[Timeline.search(this.frames, time)]; + if (!order) + this.setup(pose, setup); + else { + const inFolder = this.inFolder; + const slots = this.slots; + for (let i = 0, found = 0, done = slots.length; ; i++) { + if (inFolder[pose[i].data.index]) { + pose[i] = setup[slots[order[found]]]; + if (++found === done) break; + } + } + } + } + } + setup(pose, setup) { + const { inFolder, slots } = this; + for (let i = 0, found = 0, done = slots.length; ; i++) { + if (inFolder[pose[i].data.index]) { + pose[i] = setup[slots[found]]; + if (++found === done) break; + } + } + } + }; + function isConstraintTimeline(obj) { + return typeof obj === "object" && obj !== null && typeof obj.constraintIndex === "number"; + } + var IkConstraintTimeline = class extends CurveTimeline { + constraintIndex = 0; + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, `${15 /* ikConstraint */}|${constraintIndex}`); + this.constraintIndex = constraintIndex; + } + getFrameEntries() { + return 6; + } + /** Sets the time, mix, softness, bend direction, compress, and stretch for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time The frame time in seconds. + * @param bendDirection 1 or -1. */ + setFrame(frame, time, mix, softness, bendDirection, compress, stretch) { + frame *= 6; + this.frames[frame] = time; + this.frames[ + frame + 1 + /*MIX*/ + ] = mix; + this.frames[ + frame + 2 + /*SOFTNESS*/ + ] = softness; + this.frames[ + frame + 3 + /*BEND_DIRECTION*/ + ] = bendDirection; + this.frames[ + frame + 4 + /*COMPRESS*/ + ] = compress ? 1 : 0; + this.frames[ + frame + 5 + /*STRETCH*/ + ] = stretch ? 1 : 0; + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + const constraint = skeleton.constraints[this.constraintIndex]; + if (!constraint.active) return; + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + const setup = constraint.data.setupPose; + pose.mix = setup.mix; + pose.softness = setup.softness; + pose.bendDirection = setup.bendDirection; + pose.compress = setup.compress; + pose.stretch = setup.stretch; + } + return; + } + let mix = 0, softness = 0; + const i = Timeline.search( + frames, + time, + 6 + /*ENTRIES*/ + ); + const curveType = this.curves[ + i / 6 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: { + const before = frames[i]; + mix = frames[ + i + 1 + /*MIX*/ + ]; + softness = frames[ + i + 2 + /*SOFTNESS*/ + ]; + const t = (time - before) / (frames[ + i + 6 + /*ENTRIES*/ + ] - before); + mix += (frames[ + i + 6 + 1 + /*MIX*/ + ] - mix) * t; + softness += (frames[ + i + 6 + 2 + /*SOFTNESS*/ + ] - softness) * t; + break; + } + case 1: + mix = frames[ + i + 1 + /*MIX*/ + ]; + softness = frames[ + i + 2 + /*SOFTNESS*/ + ]; + break; + default: + mix = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + softness = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + } + const base = fromSetup ? constraint.data.setupPose : pose; + pose.mix = base.mix + (mix - base.mix) * alpha; + pose.softness = base.softness + (softness - base.softness) * alpha; + if (out) { + if (fromSetup) { + pose.bendDirection = base.bendDirection; + pose.compress = base.compress; + pose.stretch = base.stretch; + } + } else { + pose.bendDirection = frames[ + i + 3 + /*BEND_DIRECTION*/ + ]; + pose.compress = frames[ + i + 4 + /*COMPRESS*/ + ] !== 0; + pose.stretch = frames[ + i + 5 + /*STRETCH*/ + ] !== 0; + } + } + }; + var TransformConstraintTimeline = class extends CurveTimeline { + /** The index of the transform constraint slot in {@link Skeleton.transformConstraints} that will be changed. */ + constraintIndex = 0; + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, `${16 /* transformConstraint */}|${constraintIndex}`); + this.constraintIndex = constraintIndex; + this.additive = true; + } + getFrameEntries() { + return 7; + } + /** Sets the time, rotate mix, translate mix, scale mix, and shear mix for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time The frame time in seconds. */ + setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY) { + const frames = this.frames; + frame *= 7; + frames[frame] = time; + frames[ + frame + 1 + /*ROTATE*/ + ] = mixRotate; + frames[ + frame + 2 + /*X*/ + ] = mixX; + frames[ + frame + 3 + /*Y*/ + ] = mixY; + frames[ + frame + 4 + /*SCALEX*/ + ] = mixScaleX; + frames[ + frame + 5 + /*SCALEY*/ + ] = mixScaleY; + frames[ + frame + 6 + /*SHEARY*/ + ] = mixShearY; + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + const constraint = skeleton.constraints[this.constraintIndex]; + if (!constraint.active) return; + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + const setup = constraint.data.setupPose; + pose.mixRotate = setup.mixRotate; + pose.mixX = setup.mixX; + pose.mixY = setup.mixY; + pose.mixScaleX = setup.mixScaleX; + pose.mixScaleY = setup.mixScaleY; + pose.mixShearY = setup.mixShearY; + } + return; + } + let rotate, x, y, scaleX, scaleY, shearY; + const i = Timeline.search( + frames, + time, + 7 + /*ENTRIES*/ + ); + const curveType = this.curves[ + i / 7 + /*ENTRIES*/ + ]; + switch (curveType) { + case 0: { + const before = frames[i]; + rotate = frames[ + i + 1 + /*ROTATE*/ + ]; + x = frames[ + i + 2 + /*X*/ + ]; + y = frames[ + i + 3 + /*Y*/ + ]; + scaleX = frames[ + i + 4 + /*SCALEX*/ + ]; + scaleY = frames[ + i + 5 + /*SCALEY*/ + ]; + shearY = frames[ + i + 6 + /*SHEARY*/ + ]; + const t = (time - before) / (frames[ + i + 7 + /*ENTRIES*/ + ] - before); + rotate += (frames[ + i + 7 + 1 + /*ROTATE*/ + ] - rotate) * t; + x += (frames[ + i + 7 + 2 + /*X*/ + ] - x) * t; + y += (frames[ + i + 7 + 3 + /*Y*/ + ] - y) * t; + scaleX += (frames[ + i + 7 + 4 + /*SCALEX*/ + ] - scaleX) * t; + scaleY += (frames[ + i + 7 + 5 + /*SCALEY*/ + ] - scaleY) * t; + shearY += (frames[ + i + 7 + 6 + /*SHEARY*/ + ] - shearY) * t; + break; + } + case 1: + rotate = frames[ + i + 1 + /*ROTATE*/ + ]; + x = frames[ + i + 2 + /*X*/ + ]; + y = frames[ + i + 3 + /*Y*/ + ]; + scaleX = frames[ + i + 4 + /*SCALEX*/ + ]; + scaleY = frames[ + i + 5 + /*SCALEY*/ + ]; + shearY = frames[ + i + 6 + /*SHEARY*/ + ]; + break; + default: + rotate = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + x = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + scaleX = this.getBezierValue( + time, + i, + 4, + curveType + 18 * 3 - 2 + /*BEZIER*/ + ); + scaleY = this.getBezierValue( + time, + i, + 5, + curveType + 18 * 4 - 2 + /*BEZIER*/ + ); + shearY = this.getBezierValue( + time, + i, + 6, + curveType + 18 * 5 - 2 + /*BEZIER*/ + ); + } + const base = fromSetup ? constraint.data.setupPose : pose; + if (add) { + pose.mixRotate = base.mixRotate + rotate * alpha; + pose.mixX = base.mixX + x * alpha; + pose.mixY = base.mixY + y * alpha; + pose.mixScaleX = base.mixScaleX + scaleX * alpha; + pose.mixScaleY = base.mixScaleY + scaleY * alpha; + pose.mixShearY = base.mixShearY + shearY * alpha; + } else { + pose.mixRotate = base.mixRotate + (rotate - base.mixRotate) * alpha; + pose.mixX = base.mixX + (x - base.mixX) * alpha; + pose.mixY = base.mixY + (y - base.mixY) * alpha; + pose.mixScaleX = base.mixScaleX + (scaleX - base.mixScaleX) * alpha; + pose.mixScaleY = base.mixScaleY + (scaleY - base.mixScaleY) * alpha; + pose.mixShearY = base.mixShearY + (shearY - base.mixShearY) * alpha; + } + } + }; + var ConstraintTimeline1 = class extends CurveTimeline1 { + constraintIndex; + constructor(frameCount, bezierCount, constraintIndex, property) { + super(frameCount, bezierCount, `${property}|${constraintIndex}`); + this.constraintIndex = constraintIndex; + } + }; + var PathConstraintPositionTimeline = class extends ConstraintTimeline1 { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 17 /* pathConstraintPosition */); + this.additive = true; + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + const constraint = skeleton.constraints[this.constraintIndex]; + if (constraint.active) { + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + pose.position = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.position, constraint.data.setupPose.position); + } + } + }; + var PathConstraintSpacingTimeline = class extends ConstraintTimeline1 { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 18 /* pathConstraintSpacing */); + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + const constraint = skeleton.constraints[this.constraintIndex]; + if (constraint.active) { + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + pose.spacing = this.getAbsoluteValue( + time, + alpha, + fromSetup, + false, + pose.spacing, + constraint.data.setupPose.spacing + ); + } + } + }; + var PathConstraintMixTimeline = class extends CurveTimeline { + constraintIndex; + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, `${19 /* pathConstraintMix */}|${constraintIndex}`); + this.constraintIndex = constraintIndex; + } + getFrameEntries() { + return 4; + } + /** Sets the time and color for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. + * @param time The frame time in seconds. */ + setFrame(frame, time, mixRotate, mixX, mixY) { + const frames = this.frames; + frame <<= 2; + frames[frame] = time; + frames[ + frame + 1 + /*ROTATE*/ + ] = mixRotate; + frames[ + frame + 2 + /*X*/ + ] = mixX; + frames[ + frame + 3 + /*Y*/ + ] = mixY; + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + const constraint = skeleton.constraints[this.constraintIndex]; + if (!constraint.active) return; + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + const frames = this.frames; + if (time < frames[0]) { + if (fromSetup) { + const setup = constraint.data.setupPose; + pose.mixRotate = setup.mixRotate; + pose.mixX = setup.mixX; + pose.mixY = setup.mixY; + } + return; + } + let rotate, x, y; + const i = Timeline.search( + frames, + time, + 4 + /*ENTRIES*/ + ); + const curveType = this.curves[i >> 2]; + switch (curveType) { + case 0: { + const before = frames[i]; + rotate = frames[ + i + 1 + /*ROTATE*/ + ]; + x = frames[ + i + 2 + /*X*/ + ]; + y = frames[ + i + 3 + /*Y*/ + ]; + const t = (time - before) / (frames[ + i + 4 + /*ENTRIES*/ + ] - before); + rotate += (frames[ + i + 4 + 1 + /*ROTATE*/ + ] - rotate) * t; + x += (frames[ + i + 4 + 2 + /*X*/ + ] - x) * t; + y += (frames[ + i + 4 + 3 + /*Y*/ + ] - y) * t; + break; + } + case 1: + rotate = frames[ + i + 1 + /*ROTATE*/ + ]; + x = frames[ + i + 2 + /*X*/ + ]; + y = frames[ + i + 3 + /*Y*/ + ]; + break; + default: + rotate = this.getBezierValue( + time, + i, + 1, + curveType - 2 + /*BEZIER*/ + ); + x = this.getBezierValue( + time, + i, + 2, + curveType + 18 - 2 + /*BEZIER*/ + ); + y = this.getBezierValue( + time, + i, + 3, + curveType + 18 * 2 - 2 + /*BEZIER*/ + ); + } + const base = fromSetup ? constraint.data.setupPose : pose; + if (add) { + pose.mixRotate = base.mixRotate + rotate * alpha; + pose.mixX = base.mixX + x * alpha; + pose.mixY = base.mixY + y * alpha; + } else { + pose.mixRotate = base.mixRotate + (rotate - base.mixRotate) * alpha; + pose.mixX = base.mixX + (x - base.mixX) * alpha; + pose.mixY = base.mixY + (y - base.mixY) * alpha; + } + } + }; + var PhysicsConstraintTimeline = class extends ConstraintTimeline1 { + /** @param constraintIndex -1 for all physics constraints in the skeleton. */ + constructor(frameCount, bezierCount, constraintIndex, property) { + super(frameCount, bezierCount, constraintIndex, property); + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + if (add && !this.additive) add = false; + if (this.constraintIndex === -1) { + const value = time >= this.frames[0] ? this.getCurveValue(time) : 0; + const constraints = skeleton.physics; + for (const constraint of constraints) { + if (constraint.active && this.global(constraint.data)) { + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + this.set(pose, this.getAbsoluteValue(time, alpha, fromSetup, add, this.get(pose), this.get(constraint.data.setupPose), value)); + } + } + } else { + const constraint = skeleton.constraints[this.constraintIndex]; + if (constraint.active) { + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + this.set(pose, this.getAbsoluteValue(time, alpha, fromSetup, add, this.get(pose), this.get(constraint.data.setupPose))); + } + } + } + }; + var PhysicsConstraintInertiaTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 20 /* physicsConstraintInertia */); + } + get(pose) { + return pose.inertia; + } + set(pose, value) { + pose.inertia = value; + } + global(constraint) { + return constraint.inertiaGlobal; + } + }; + var PhysicsConstraintStrengthTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 21 /* physicsConstraintStrength */); + } + get(pose) { + return pose.strength; + } + set(pose, value) { + pose.strength = value; + } + global(constraint) { + return constraint.strengthGlobal; + } + }; + var PhysicsConstraintDampingTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 22 /* physicsConstraintDamping */); + } + get(pose) { + return pose.damping; + } + set(pose, value) { + pose.damping = value; + } + global(constraint) { + return constraint.dampingGlobal; + } + }; + var PhysicsConstraintMassTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 23 /* physicsConstraintMass */); + } + get(pose) { + return 1 / pose.massInverse; + } + set(pose, value) { + pose.massInverse = 1 / value; + } + global(constraint) { + return constraint.massGlobal; + } + }; + var PhysicsConstraintWindTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 24 /* physicsConstraintWind */); + this.additive = true; + } + get(pose) { + return pose.wind; + } + set(pose, value) { + pose.wind = value; + } + global(constraint) { + return constraint.windGlobal; + } + }; + var PhysicsConstraintGravityTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 25 /* physicsConstraintGravity */); + this.additive = true; + } + get(pose) { + return pose.gravity; + } + set(pose, value) { + pose.gravity = value; + } + global(constraint) { + return constraint.gravityGlobal; + } + }; + var PhysicsConstraintMixTimeline = class extends PhysicsConstraintTimeline { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 26 /* physicsConstraintMix */); + } + get(pose) { + return pose.mix; + } + set(pose, value) { + pose.mix = value; + } + global(constraint) { + return constraint.mixGlobal; + } + }; + var PhysicsConstraintResetTimeline = class _PhysicsConstraintResetTimeline extends Timeline { + static propertyIds = [27 /* physicsConstraintReset */.toString()]; + /** The index of the physics constraint in {@link Skeleton.contraints} that will be reset when this timeline is + * applied, or -1 if all physics constraints in the skeleton will be reset. */ + constraintIndex; + /** @param constraintIndex -1 for all physics constraints in the skeleton. */ + constructor(frameCount, constraintIndex) { + super(frameCount, ..._PhysicsConstraintResetTimeline.propertyIds); + this.constraintIndex = constraintIndex; + this.instant = true; + } + getFrameCount() { + return this.frames.length; + } + /** Sets the time for the specified frame. + * @param frame Between 0 and `frameCount`, inclusive. */ + setFrame(frame, time) { + this.frames[frame] = time; + } + /** Resets the physics constraint when frames > `lastTime` and <= `time`. */ + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + let constraint; + if (this.constraintIndex !== -1) { + constraint = skeleton.constraints[this.constraintIndex]; + if (!constraint.active) return; + } + const frames = this.frames; + if (lastTime > time) { + this.apply(skeleton, lastTime, Number.MAX_VALUE, [], alpha, false, false, false, false); + lastTime = -1; + } else if (lastTime >= frames[frames.length - 1]) + return; + if (time < frames[0]) return; + if (lastTime < frames[0] || time >= frames[Timeline.search(frames, lastTime) + 1]) { + if (constraint != null) + constraint.reset(skeleton); + else { + for (const constraint2 of skeleton.physics) { + if (constraint2.active) constraint2.reset(skeleton); + } + } + } + } + }; + var SliderTimeline = class extends ConstraintTimeline1 { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 29 /* sliderTime */); + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + const constraint = skeleton.constraints[this.constraintIndex]; + if (constraint.active) { + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + pose.time = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.time, constraint.data.setupPose.time); + } + } + }; + var SliderMixTimeline = class extends ConstraintTimeline1 { + constructor(frameCount, bezierCount, constraintIndex) { + super(frameCount, bezierCount, constraintIndex, 30 /* sliderMix */); + this.additive = true; + } + apply(skeleton, lastTime, time, firedEvents, alpha, fromSetup, add, out, appliedPose) { + const constraint = skeleton.constraints[this.constraintIndex]; + if (constraint.active) { + const pose = appliedPose ? constraint.appliedPose : constraint.pose; + pose.mix = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.mix, constraint.data.setupPose.mix); + } + } + }; + + // spine-core/src/AnimationState.ts + var AnimationState = class _AnimationState { + static emptyAnimation = new Animation("", [], 0); + /** The AnimationStateData to look up mix durations. */ + data; + /** The list of tracks that have had animations. May contain null entries for tracks that currently have no animation. */ + tracks = []; + /** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower + * or faster. Defaults to 1. + * + * See {@link TrackEntry.timeScale} to affect a single animation. */ + timeScale = 1; + unkeyedState = 0; + events = []; + listeners = []; + queue = new EventQueue(this); + propertyIds = new StringSet(); + animationsChanged = false; + trackEntryPool = new Pool(() => new TrackEntry()); + constructor(data) { + this.data = data; + } + /** Increments each track entry {@link TrackEntry.trackTime}, setting queued animations as current if needed. */ + update(delta) { + delta *= this.timeScale; + const tracks = this.tracks; + for (let i = 0, n = tracks.length; i < n; i++) { + const current = tracks[i]; + if (!current) continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + let currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) continue; + currentDelta = -current.delay; + current.delay = 0; + } + let next = current.next; + if (next) { + const nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale === 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setTrack(i, next, true); + while (next.mixingFrom) { + next.mixTime += delta; + next = next.mixingFrom; + } + continue; + } + } else if (current.trackLast >= current.trackEnd && !current.mixingFrom) { + tracks[i] = null; + this.queue.end(current); + this.clearNext(current); + continue; + } + if (current.mixingFrom && this.updateMixingFrom(current, delta)) { + let from = current.mixingFrom; + current.mixingFrom = null; + if (from) from.mixingTo = null; + while (from) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + } + /** Returns true when all mixing from entries are complete. */ + updateMixingFrom(to, delta) { + const from = to.mixingFrom; + if (!from) return true; + const finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.nextTrackLast !== -1 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha === 0 || to.mixDuration === 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) from.mixingFrom.mixingTo = to; + if (from.totalAlpha === 0) { + for (let next = to; next.mixingTo != null; next = next.mixingTo) + next.keepHold = true; + } + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + } + /** Poses the skeleton using the track entry animations. The animation state is not changed, so can be applied to multiple + * skeletons to pose them identically. + * @returns True if any animations were applied. */ + apply(skeleton) { + if (!skeleton) throw new Error("skeleton cannot be null."); + if (this.animationsChanged) this._animationsChanged(); + const events = this.events; + const tracks = this.tracks; + let applied = false; + for (let i = 0, n = tracks.length; i < n; i++) { + const current = tracks[i]; + if (!current || current.delay > 0) continue; + applied = true; + let alpha = current.alpha; + if (current.mixingFrom) + alpha *= this.applyMixingFrom(current, skeleton); + else if (current.trackTime >= current.trackEnd && !current.next) + alpha = 0; + let animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime; + let applyEvents = events; + if (current.reverse) { + applyTime = current.animation.duration - applyTime; + applyEvents = null; + } + const timelines = current.animation.timelines; + const timelineCount = timelines.length; + if (i === 0 && alpha === 1) { + for (let ii = 0; ii < timelineCount; ii++) { + Utils.webkit602BugfixHelper(alpha); + const timeline = timelines[ii]; + if (timeline instanceof AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, applyTime, true, true); + else + timeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, true, false, false, false); + } + } else { + const timelineMode = current.timelineMode; + const retainAttachments = alpha >= current.alphaAttachmentThreshold; + const add = current.additive, shortestRotation = add || current.shortestRotation; + const firstFrame = !shortestRotation && current.timelinesRotation.length !== timelineCount << 1; + if (firstFrame) current.timelinesRotation.length = timelineCount << 1; + for (let ii = 0; ii < timelineCount; ii++) { + const timeline = timelines[ii]; + const fromSetup = (timelineMode[ii] & FIRST) !== 0; + if (!shortestRotation && timeline instanceof RotateTimeline) { + this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, fromSetup, current.timelinesRotation, ii << 1, firstFrame); + } else if (timeline instanceof AttachmentTimeline) { + this.applyAttachmentTimeline(timeline, skeleton, applyTime, fromSetup, retainAttachments); + } else { + Utils.webkit602BugfixHelper(alpha); + timeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, fromSetup, add, false, false); + } + } + } + if (current.reverse) this.eventsReverse(current, animationLast, animationTime); + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + const setupState = this.unkeyedState + SETUP; + const slots = skeleton.slots; + for (let i = 0, n = skeleton.slots.length; i < n; i++) { + const slot = slots[i]; + if (slot.attachmentState === setupState) { + const attachmentName = slot.data.attachmentName; + slot.pose.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + } + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + } + applyMixingFrom(to, skeleton) { + const from = to.mixingFrom; + const fromMix = from.mixingFrom !== null ? this.applyMixingFrom(from, skeleton) : 1; + const mix = to.mix(); + const a = from.alpha * fromMix, keep = 1 - mix * to.alpha; + const alphaMix = a * (1 - mix), alphaHold = keep > 0 ? alphaMix / keep : a; + const timelines = from.animation.timelines; + const timelineCount = timelines.length; + const timelineMode = from.timelineMode; + const timelineHoldMix = from.timelineHoldMix; + const retainAttachments = mix < from.mixAttachmentThreshold, drawOrder = mix < from.mixDrawOrderThreshold; + const add = from.additive, shortestRotation = add || from.shortestRotation; + const firstFrame = !shortestRotation && from.timelinesRotation.length !== timelineCount << 1; + if (firstFrame) from.timelinesRotation.length = timelineCount << 1; + const timelinesRotation = from.timelinesRotation; + let animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime; + let events = null; + if (from.reverse) + applyTime = from.animation.duration - applyTime; + else if (mix < from.eventThreshold) + events = this.events; + from.totalAlpha = 0; + for (let i = 0; i < timelineCount; i++) { + const timeline = timelines[i]; + const mode = timelineMode[i]; + let alpha = 0; + if ((mode & HOLD) !== 0) { + const holdMix = timelineHoldMix[i]; + alpha = holdMix == null ? alphaHold : alphaHold * (1 - holdMix.mix()); + } else { + if (!drawOrder && timeline instanceof DrawOrderTimeline) continue; + alpha = alphaMix; + } + from.totalAlpha += alpha; + const fromSetup = (mode & FIRST) !== 0; + if (!shortestRotation && timeline instanceof RotateTimeline) { + this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, fromSetup, timelinesRotation, i << 1, firstFrame); + } else if (timeline instanceof AttachmentTimeline) + this.applyAttachmentTimeline( + timeline, + skeleton, + applyTime, + fromSetup, + retainAttachments && alpha >= from.alphaAttachmentThreshold + ); + else { + const out = !drawOrder || !(timeline instanceof DrawOrderTimeline) || !fromSetup; + timeline.apply(skeleton, animationLast, applyTime, events, alpha, fromSetup, add, out, false); + } + } + if (from.reverse && mix < from.eventThreshold) this.eventsReverse(from, animationLast, animationTime); + if (to.mixDuration > 0) this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + } + /** Applies the attachment timeline and sets {@link Slot.attachmentState}. + * @param retain True if the attachment remains after apply, false if temporary for deform timelines. */ + applyAttachmentTimeline(timeline, skeleton, time, fromSetup, retain) { + const slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) return; + if (!retain && slot.attachmentState === this.unkeyedState + RETAIN) return; + let setup = time < timeline.frames[0]; + let name = null; + if (!setup) { + name = timeline.attachmentNames[Timeline.search(timeline.frames, time)]; + setup = !retain && name == null; + } + if (setup) { + if (!fromSetup) return; + name = slot.data.attachmentName; + } + slot.pose.setAttachment(name == null ? null : skeleton.getAttachment(slot.data.index, name)); + if (retain) + slot.attachmentState = this.unkeyedState + RETAIN; + else if (!setup) + slot.attachmentState = this.unkeyedState + SETUP; + } + /** Applies the rotate timeline, mixing with the current pose while keeping the same rotation direction chosen as the shortest + * the first time the mixing was applied. */ + applyRotateTimeline(timeline, skeleton, time, alpha, fromSetup, timelinesRotation, i, firstFrame) { + if (firstFrame) timelinesRotation[i] = 0; + if (alpha === 1) { + timeline.apply(skeleton, 0, time, null, 1, fromSetup, false, false, false); + return; + } + const bone = skeleton.bones[timeline.boneIndex]; + if (!bone.active) return; + const pose = bone.pose, setup = bone.data.setupPose; + const frames = timeline.frames; + if (time < frames[0]) { + if (fromSetup) pose.rotation = setup.rotation; + return; + } + const r1 = fromSetup ? setup.rotation : pose.rotation; + const r2 = setup.rotation + timeline.getCurveValue(time); + let total = 0, diff = r2 - r1; + diff -= Math.ceil(diff / 360 - 0.5) * 360; + if (diff === 0) { + total = timelinesRotation[i]; + } else { + let lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + const loops = lastTotal - lastTotal % 360; + total = diff + loops; + let current = diff >= 0, dir = lastTotal >= 0; + if (Math.abs(lastDiff) <= 90 && MathUtils.signum(lastDiff) !== MathUtils.signum(diff)) { + if (Math.abs(lastTotal - loops) > 180) { + total += 360 * MathUtils.signum(lastTotal); + dir = current; + } else if (loops !== 0) + total -= 360 * MathUtils.signum(lastTotal); + else + dir = current; + } + if (dir !== current) total += 360 * MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + pose.rotation = r1 + total * alpha; + } + queueEvents(entry, animationTime) { + const animationStart = entry.animationStart, animationEnd = entry.animationEnd, duration = animationEnd - animationStart; + const reverse = entry.reverse; + let split = entry.trackLast % duration; + if (reverse) split = duration - split; + const events = this.events; + let i = 0, n = events.length; + for (; i < n; i++) { + const event = events[i]; + if (event.time < split !== reverse) break; + if (event.time >= animationStart && event.time <= animationEnd) this.queue.event(entry, event); + } + let complete = false; + if (entry.loop) { + if (duration === 0) + complete = true; + else { + const cycles = Math.floor(entry.trackTime / duration); + complete = cycles > 0 && cycles > Math.floor(entry.trackLast / duration); + } + } else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) this.queue.complete(entry); + for (; i < n; i++) { + const event = events[i]; + if (event.time >= animationStart && event.time <= animationEnd) this.queue.event(entry, event); + } + } + eventsReverse(entry, animationLast, animationTime) { + const duration = entry.animation.duration, from = duration - animationLast, to = duration - animationTime; + const timelines = entry.animation.timelines; + for (let i = 0, n = entry.animation.timelines.length; i < n; i++) { + const eventTimeline = timelines[i]; + if (!(eventTimeline instanceof EventTimeline)) continue; + const timelineEvents = eventTimeline.events; + const frames = eventTimeline.frames; + const frameCount = frames.length; + if (from >= to) { + for (let ii = 0; ii < frameCount; ii++) { + if (frames[ii] < to) continue; + if (frames[ii] >= from) break; + this.events.push(timelineEvents[ii]); + } + } else { + for (let ii2 = 0; ii2 < frameCount; ii2++) { + if (frames[ii2] >= from) break; + this.events.push(timelineEvents[ii2]); + } + let ii = 0; + for (; ii < frameCount; ii++) + if (frames[ii] >= to) break; + for (; ii < frameCount; ii++) + this.events.push(timelineEvents[ii]); + } + } + } + /** Removes all animations from all tracks, leaving skeletons in their current pose. + * + * Usually you want to use {@link setEmptyAnimations} to mix the skeletons back to the setup pose, rather than leaving + * them in their current pose. */ + clearTracks() { + const oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (let i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + } + /** Removes all animations from the track, leaving skeletons in their current pose. + * + * Usually you want to use {@link setEmptyAnimation} to mix the skeletons back to the setup pose, rather than + * leaving them in their current pose. */ + clearTrack(trackIndex) { + if (trackIndex < 0) throw new Error("trackIndex must be >= 0."); + if (trackIndex >= this.tracks.length) return; + const current = this.tracks[trackIndex]; + if (!current) return; + this.queue.end(current); + this.clearNext(current); + let entry = current; + while (true) { + const from = entry.mixingFrom; + if (!from) break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + } + setTrack(index, current, interrupt) { + const from = this.expandToIndex(index); + this.tracks[index] = current; + current.previous = null; + if (from) { + from.next = null; + if (interrupt) this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + from.timelinesRotation.length = 0; + } + this.queue.start(current); + } + setAnimation(trackIndex, animationNameOrAnimation, loop = false) { + if (typeof animationNameOrAnimation === "string") + return this.setAnimation1(trackIndex, animationNameOrAnimation, loop); + return this.setAnimation2(trackIndex, animationNameOrAnimation, loop); + } + setAnimation1(trackIndex, animationName, loop = false) { + const animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw new Error(`Animation not found: ${animationName}`); + return this.setAnimation2(trackIndex, animation, loop); + } + /** Sets the current animation for a track, discarding any queued animations. + * + * If the formerly current track entry is for the same animation and was never applied to a skeleton, it is replaced (not mixed + * from). + * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its + * duration. In either case {@link TrackEntry.getTrackEnd} determines when the track is cleared. + * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept + * after the {@link AnimationStateListener.dispose} event occurs. */ + setAnimation2(trackIndex, animation, loop = false) { + if (trackIndex < 0) throw new Error("trackIndex must be >= 0."); + if (!animation) throw new Error("animation cannot be null."); + let interrupt = true; + let current = this.expandToIndex(trackIndex); + if (current) { + if (current.nextTrackLast === -1 && current.animation === animation) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.clearNext(current); + current = current.mixingFrom; + interrupt = false; + } else + this.clearNext(current); + } + const entry = this.trackEntry(trackIndex, animation, loop, current); + this.setTrack(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + } + addAnimation(trackIndex, animationNameOrAnimation, loop = false, delay = 0) { + if (typeof animationNameOrAnimation === "string") + return this.addAnimation1(trackIndex, animationNameOrAnimation, loop, delay); + return this.addAnimation2(trackIndex, animationNameOrAnimation, loop, delay); + } + addAnimation1(trackIndex, animationName, loop = false, delay = 0) { + const animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw new Error(`Animation not found: ${animationName}`); + return this.addAnimation2(trackIndex, animation, loop, delay); + } + addAnimation2(trackIndex, animation, loop = false, delay = 0) { + if (trackIndex < 0) throw new Error("trackIndex must be >= 0."); + if (!animation) throw new Error("animation cannot be null."); + let last = this.expandToIndex(trackIndex); + if (last) { + while (last.next) + last = last.next; + } + const entry = this.trackEntry(trackIndex, animation, loop, last); + if (!last) { + this.setTrack(trackIndex, entry, true); + this.queue.drain(); + if (delay < 0) delay = 0; + } else { + last.next = entry; + entry.previous = last; + if (delay <= 0) delay = Math.max(delay + last.getTrackComplete() - entry.mixDuration, 0); + } + entry.delay = delay; + return entry; + } + /** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's + * {@link TrackEntry.mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out. + * + * Mixing out is done by setting an empty animation with a mix duration using either {@link setEmptyAnimation}, + * {@link setEmptyAnimations}, or {@link addEmptyAnimation}. Mixing to an empty animation causes + * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation + * transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of + * 0 still needs to be applied one more time to mix out, so the properties it was animating are reverted. + * + * Mixing in is done by first setting an empty animation, then adding an animation using + * {@link addAnimation} with the desired delay (an empty animation has a duration of 0) and on + * the returned track entry, set the {@link TrackEntry.setMixDuration}. Mixing from an empty animation causes the new + * animation to be applied more and more over the mix duration. Properties keyed in the new animation transition from the value + * from lower tracks or from the setup pose value if no lower tracks key the property to the value keyed in the new animation. + * + * See Empty animations in the Spine + * Runtimes Guide. */ + setEmptyAnimation(trackIndex, mixDuration = 0) { + const entry = this.setAnimation(trackIndex, _AnimationState.emptyAnimation, false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + /** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's + * {@link TrackEntry.mixDuration}. If the track has no entries, it is equivalent to calling + * {@link setEmptyAnimation}. + * + * See {@link setEmptyAnimation} and + * Empty animations in the Spine Runtimes + * Guide. + * @param delay If > 0, sets {@link TrackEntry.delay}. If <= 0, the delay set is the duration of the previous track entry minus + * any mix duration plus the specified `delay` (ie the mix ends at (when `delay` = 0) or before + * (when `delay` < 0) the previous track entry duration). If the previous entry is looping, its next loop + * completion is used instead of its duration. + * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept + * after the {@link AnimationStateListener.dispose} event occurs. */ + addEmptyAnimation(trackIndex, mixDuration = 0, delay = 0) { + const entry = this.addAnimation(trackIndex, _AnimationState.emptyAnimation, false, delay); + if (delay <= 0) entry.delay = Math.max(entry.delay + entry.mixDuration - mixDuration, 0); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + /** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix duration. + * + * See Empty animations in the Spine + * Runtimes Guide. */ + setEmptyAnimations(mixDuration = 0) { + const oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (let i = 0, n = this.tracks.length; i < n; i++) { + const current = this.tracks[i]; + if (current) this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + } + expandToIndex(index) { + if (index < this.tracks.length) return this.tracks[index]; + Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + } + /** @param last May be null. */ + trackEntry(trackIndex, animation, loop, last) { + const entry = this.trackEntryPool.obtain(); + entry.reset(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.additive = false; + entry.reverse = false; + entry.shortestRotation = false; + entry.eventThreshold = 0; + entry.alphaAttachmentThreshold = 0; + entry.mixAttachmentThreshold = 0; + entry.mixDrawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.mixTime = 0; + entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation); + entry.totalAlpha = 0; + entry.keepHold = false; + return entry; + } + /** Removes {@link TrackEntry.next} and all entries after it for the specified entry. */ + clearNext(entry) { + let next = entry.next; + while (next) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + } + _animationsChanged() { + this.animationsChanged = false; + const tracks = this.tracks; + for (let i = 0, n = tracks.length; i < n; i++) { + let entry = tracks[i]; + if (!entry) continue; + while (entry.mixingFrom) + entry = entry.mixingFrom; + do { + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry); + } + this.propertyIds.clear(); + } + computeHold(entry) { + const timelines = entry.animation.timelines; + const timelinesCount = entry.animation.timelines.length; + const timelineMode = entry.timelineMode; + timelineMode.length = timelinesCount; + const timelineHoldMix = entry.timelineHoldMix; + timelineHoldMix.length = 0; + const propertyIds = this.propertyIds; + const add = entry.additive, keepHold = entry.keepHold; + const to = entry.mixingTo; + outer: + for (let i = 0; i < timelinesCount; i++) { + const timeline = timelines[i]; + const ids = timeline.propertyIds; + const first = propertyIds.addAll(ids) && !(timeline instanceof DrawOrderFolderTimeline && propertyIds.contains(DrawOrderTimeline.propertyID)); + if (add && timeline.additive) { + timelineMode[i] = first ? FIRST : SUBSEQUENT; + continue; + } + for (let from = entry.mixingFrom; from != null; from = from.mixingFrom) { + if (from.animation.hasTimeline(ids)) { + timelineMode[i] = SUBSEQUENT; + continue outer; + } + } + let mode; + if (to === null || timeline.instant || to.additive && timeline.additive || !to.animation?.hasTimeline(ids)) + mode = first ? FIRST : SUBSEQUENT; + else { + mode = first ? HOLD_FIRST : HOLD; + for (let next = to.mixingTo; next != null; next = next.mixingTo) { + if (next.additive && timeline.additive || !next.animation?.hasTimeline(ids)) { + if (next.mixDuration > 0) timelineHoldMix[i] = next; + break; + } + } + } + if (keepHold) mode = mode & ~HOLD | timelineMode[i] & HOLD; + timelineMode[i] = mode; + } + } + /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */ + getTrack(trackIndex) { + if (trackIndex < 0) throw new Error("trackIndex must be >= 0."); + if (trackIndex >= this.tracks.length) return null; + return this.tracks[trackIndex]; + } + /** Adds a listener to receive events for all track entries. */ + addListener(listener) { + if (!listener) throw new Error("listener cannot be null."); + this.listeners.push(listener); + } + /** Removes the listener added with {@link addListener}. */ + removeListener(listener) { + const index = this.listeners.indexOf(listener); + if (index >= 0) this.listeners.splice(index, 1); + } + /** Removes all listeners added with {@link addListener}. */ + clearListeners() { + this.listeners.length = 0; + } + /** Discards all listener notifications that have not yet been delivered. This can be useful to call from an + * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery + * are not wanted because new animations are being set. */ + clearListenerNotifications() { + this.queue.clear(); + } + }; + var TrackEntry = class { + /** The animation to apply for this track entry. */ + animation = null; + previous = null; + /** The animation queued to start after this animation, or null. `next` makes up a linked list. */ + next = null; + /** The track entry for the previous animation when mixing to this animation, or null if no mixing is currently occurring. + * When mixing from multiple animations, `mixingFrom` makes up a doubly linked list. */ + mixingFrom = null; + /** The track entry for the next animation when mixing from this animation, or null if no mixing is currently occurring. + * When mixing to multiple animations, `mixingTo` makes up a doubly linked list. */ + mixingTo = null; + /** The listener for events generated by this track entry, or null. + * + * A track entry returned from {@link AnimationState.setAnimation} is already the current animation + * for the track, so the callback for listener {@link AnimationStateListener.start} will not be called. */ + listener = null; + /** The index of the track where this track entry is either current or queued. + * + * See {@link AnimationState.getTrack}. */ + trackIndex = 0; + /** If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its + * duration. */ + loop = false; + /** When true, timelines in this animation that support additive have their values added to the setup or current pose values + * instead of replacing them. Additive can be set for a new track entry only before {@link AnimationState.apply} + * is next called. */ + additive = false; + /** If true, the animation will be applied in reverse. */ + reverse = false; + /** If true, mixing rotation between tracks always uses the shortest rotation direction. If the rotation is animated, the + * shortest rotation direction may change during the mix. + * + * If false, the shortest rotation direction is remembered when the mix starts and the same direction is used for the rest + * of the mix. Defaults to false. + * + * See {@link resetRotationDirections}. */ + shortestRotation = false; + keepHold = false; + /** When the interpolated mix percentage is less than the `eventThreshold` , event timelines are applied while + * this animation is being mixed out. Defaults to 0, so event timelines are not applied while this animation is being mixed + * out. */ + eventThreshold = 0; + /** When the interpolated mix percentage is less than the `mixAttachmentThreshold`, attachment timelines are + * applied while this animation is being mixed out. Defaults to 0, so attachment timelines are not applied while this + * animation is being mixed out. */ + mixAttachmentThreshold = 0; + /** When the computed alpha is greater than `alphaAttachmentThreshold`, attachment timelines are applied. The + * computed alpha includes {@link alpha} and the interpolated mix percentage. Defaults to 0, so attachment timelines are + * always applied. */ + alphaAttachmentThreshold = 0; + /** When the interpolated mix percentage is less than the `mixAttachmentThreshold`, attachment timelines are + * applied while this animation is being mixed out. Defaults to 0, so attachment timelines are not applied while this + * animation is being mixed out. */ + mixDrawOrderThreshold = 0; + /** The time in seconds for the first frame of this animation, both initially and after looping. Defaults to 0. + * + * When setting `animationStart` time, {@link animationLast} can be set to the same value to avoid firing events + * from the start of the animation. */ + animationStart = 0; + /** The time in seconds for the last frame of this animation. Past this time, non-looping animations hold the pose at this + * time while looping animations will loop back to {@link animationStart}. Defaults to the {@link Animation.duration}. */ + animationEnd = 0; + /** The time in seconds this animation was last applied. Some timelines use this for one-time triggers. For example, when + * this animation is applied, event timelines will fire all events between the `animationLast` time (exclusive) + * and `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this + * animation is applied. */ + animationLast = 0; + nextAnimationLast = 0; + /** Seconds to postpone playing the animation. Must be >= 0. When this track entry is the current track entry, + * `delay` postpones incrementing the {@link trackTime}. When this track entry is queued, `delay` is + * the time from the start of the previous animation to when this track entry will become the current track entry (ie when + * the previous track entry {@link trackTime} >= this track entry's `delay`). + * + * {@link timeScale} affects the delay. + * + * When passing `delay` <= 0 to {@link AnimationState.addAnimation} this + * `delay` is set using a mix duration from {@link AnimationStateData}. To change the {@link mixDuration} + * afterward, use {@link setMixDuration} so this `delay` is adjusted. */ + delay = 0; + /** The time in seconds this track entry has been the current track entry, starting at 0 and increasing forever. Compare to + * {@link getAnimationTime}, which is always between {@link animationStart} and {@link animationEnd}. + * + * The track time can be set to start the animation at a time other than 0, without affecting looping. When doing so, + * {@link animationLast} can be set to the same value to avoid firing events from the start of the animation. + * + * To set the time an animation starts and loops, use {@link animationStart} and {@link animationEnd}. */ + trackTime = 0; + trackLast = 0; + nextTrackLast = 0; + /** The track time in seconds when this animation will be removed from the track. Defaults to the highest possible float + * value, meaning the animation will be applied until a new animation is set or the track is cleared. If the track end time + * is reached, no other animations are queued for playback, and mixing from any previous animations is complete, then the + * properties keyed by the animation are set to the setup pose and the track is cleared. + * + * Usually you want to use {@link AnimationState.addEmptyAnimation} rather than have the animation + * abruptly cease being applied. */ + trackEnd = 0; + /** Multiplier for the delta time when this track entry is updated, causing time for this animation to pass slower or + * faster. Defaults to 1. + * + * Values < 0 are not supported. To play an animation in reverse, use {@link reverse}. + * + * {@link mixTime} is not affected by track entry time scale, so {@link mixDuration} may need to be adjusted to match the + * animation speed. + * + * When using {@link AnimationState.addAnimation} with a `delay` <= 0, the + * {@link delay} is set using the mix duration from {@link AnimationState.data}, assuming time scale to be 1. If the time + * scale is not 1, the delay may need to be adjusted. + * + * See {@link AnimationState.timeScale} to affect all animations. */ + timeScale = 0; + /** Values < 1 mix this animation with the skeleton's current pose (either the setup pose or the pose from lower tracks). + * Defaults to 1, which overwrites the skeleton's current pose with this animation. + * + * Alpha should be 1 on track 0. + * + * See {@link getAlphaAttachmentThreshold}. */ + alpha = 0; + /** Seconds elapsed from 0 to the {@link mixDuration} when mixing from the previous animation to this animation. May + * be slightly more than `mixDuration` when the mix is complete. */ + mixTime = 0; + /** Seconds for mixing from the previous animation to this animation. Defaults to the value provided by + * {@link AnimationStateData.getMix} based on the animation before this animation (if any). + * + * A mix duration of 0 still needs to be applied one more time to mix out, so the the properties it was animating are + * reverted. A mix duration of 0 can be set at any time to end the mix on the next + * {@link AnimationState.update | update}. + * + * The `mixDuration` can be set manually rather than use the value from + * {@link AnimationStateData.getMix}. In that case, the `mixDuration` can be set for a new + * track entry only before {@link AnimationState.update} is next called. + * + * When using {@link AnimationState.addAnimation} with a `delay` <= 0, the + * {@link getDelay} is set using the mix duration from {@link AnimationState.data}. If `mixDuration` is set + * afterward, the delay needs to be adjusted: + * + *
+     * entry.mixDuration = 0.25;
+ * entry.delay = entry.previous.getTrackComplete() - entry.mixDuration + 0; + *
+ * + * Alternatively, use {@link setMixDuration} to set both the mix duration and recompute the delay:
+ * + *
+      entry.setMixDuration(0.25f, 0); // mixDuration, delay
+     * 
+ */ + mixDuration = 0; + totalAlpha = 0; + mixInterpolation = Interpolation.linear; + /** Sets both {@link getMixDuration} and {@link getDelay}. + * @param delay If > 0, sets {@link getDelay}. If <= 0, the delay set is the duration of the previous track entry minus + * the specified mix duration plus the specified `delay` (ie the mix ends at (when `delay` = + * 0) or before (when `delay` < 0) the previous track entry duration). If the previous entry is + * looping, its next loop completion is used instead of its duration. */ + setMixDuration(mixDuration, delay) { + this.mixDuration = mixDuration; + if (delay !== void 0) { + if (delay <= 0) delay = this.previous == null ? 0 : Math.max(delay + this.previous.getTrackComplete() - mixDuration, 0); + this.delay = delay; + } + } + /** The interpolation to apply to the mix percentage ({@link mixTime} / {@link mixDuration}) when mixing from the previous + * animation to this animation. Defaults to linear. */ + setMixInterpolation(mixInterpolation) { + if (!mixInterpolation) throw new Error("mixInterpolation cannot be null."); + this.mixInterpolation = mixInterpolation; + } + mix() { + if (this.mixDuration === 0) return 1; + let mix = this.mixTime / this.mixDuration; + if (mix >= 1) return 1; + if (this.mixInterpolation === Interpolation.linear) return mix; + mix = this.mixInterpolation.apply(mix); + if (mix < 0) return 0; + if (mix > 1) return 1; + return mix; + } + /** For each timeline: + * - Bit 0, FIRST: 0 = mix from current pose, 1 = mix from setup pose. Timeline is first to set the property. + * - Bit 1, HOLD: 0 = mix out using alphaMix, 1 = apply full alpha to prevent dipping. Timeline is first on its track to + * set the property and the next entry (mixingTo) also sets it. When held, timelineHoldMix's mix controls how the hold fades + * out (for 3+ entry chains where the chain eventually stops setting the property). */ + timelineMode = []; + timelineHoldMix = []; + timelinesRotation = []; + reset() { + this.next = null; + this.previous = null; + this.mixingFrom = null; + this.mixingTo = null; + this.mixInterpolation = Interpolation.linear; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + } + /** Uses {@link trackTime} to compute the `animationTime`, which is always between {@link animationStart} and + * {@link animationEnd}. When `trackTime` is 0, `animationTime` is equal to the + * `animationStart` time. */ + getAnimationTime() { + if (!this.loop) return Math.min(this.trackTime + this.animationStart, this.animationEnd); + const duration = this.animationEnd - this.animationStart; + if (duration === 0) return this.animationStart; + return this.trackTime % duration + this.animationStart; + } + setAnimationLast(animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + } + /** Returns true if at least one loop has been completed. + * + * See {@link AnimationStateListener.complete}. */ + isComplete() { + return this.trackTime >= this.animationEnd - this.animationStart; + } + /** When {@link shortestRotation} is false, this clears the directions for mixing this entry's rotation. This can be useful + * to avoid bones rotating the long way around when using {@link getAlpha} and starting animations on other tracks. + * + * Mixing involves finding a rotation between two others. There are two possible solutions: the short or the long way + * around. When the two rotations change over time, which direction is the short or long way can also change. If the short + * way was always chosen, bones flip to the other side when that direction became the long way. TrackEntry chooses the short + * way the first time it is applied and remembers that direction. Resetting that direction makes it choose a new short way + * on the next apply. */ + resetRotationDirections() { + this.timelinesRotation.length = 0; + } + /** If this track entry is non-looping, this is the track time in seconds when {@link animationEnd} is reached, or the + * current {@link trackTime} if it has already been reached. + * + * If this track entry is looping, this is the track time when this animation will reach its next {@link animationEnd} (the + * next loop completion). */ + getTrackComplete() { + const duration = this.animationEnd - this.animationStart; + if (duration !== 0) { + if (this.loop) return duration * (1 + (this.trackTime / duration | 0)); + if (this.trackTime < duration) return duration; + } + return this.trackTime; + } + /** Returns true if this track entry has been applied at least once. + * + * See {@link AnimationState.apply}. */ + wasApplied() { + return this.nextTrackLast !== -1; + } + /** Returns true if there is a {@link next} track entry and it will become the current track entry during the next + * {@link AnimationState.update}. */ + isNextReady() { + return this.next != null && this.nextTrackLast - this.next.delay >= 0; + } + }; + var EventQueue = class { + objects = []; + drainDisabled = false; + animState; + constructor(animState) { + this.animState = animState; + } + start(entry) { + this.objects.push(0 /* start */); + this.objects.push(entry); + this.animState.animationsChanged = true; + } + interrupt(entry) { + this.objects.push(1 /* interrupt */); + this.objects.push(entry); + } + end(entry) { + this.objects.push(2 /* end */); + this.objects.push(entry); + this.animState.animationsChanged = true; + } + dispose(entry) { + this.objects.push(3 /* dispose */); + this.objects.push(entry); + } + complete(entry) { + this.objects.push(4 /* complete */); + this.objects.push(entry); + } + event(entry, event) { + this.objects.push(5 /* event */); + this.objects.push(entry); + this.objects.push(event); + } + drain() { + if (this.drainDisabled) return; + this.drainDisabled = true; + for (let i = 0; i < this.objects.length; i += 2) { + const objects = this.objects; + const type = objects[i]; + const entry = objects[i + 1]; + const listeners = this.animState.listeners.slice(); + switch (type) { + case 0 /* start */: + if (entry.listener?.start) entry.listener.start(entry); + for (let ii = 0; ii < listeners.length; ii++) { + const listener = listeners[ii]; + if (listener.start) listener.start(entry); + } + break; + case 1 /* interrupt */: + if (entry.listener?.interrupt) entry.listener.interrupt(entry); + for (let ii = 0; ii < listeners.length; ii++) { + const listener = listeners[ii]; + if (listener.interrupt) listener.interrupt(entry); + } + break; + // biome-ignore lint/suspicious/noFallthroughSwitchClause: reference runtime does fall through + case 2 /* end */: + if (entry.listener?.end) entry.listener.end(entry); + for (let ii = 0; ii < listeners.length; ii++) { + const listener = listeners[ii]; + if (listener.end) listener.end(entry); + } + // Fall through. + case 3 /* dispose */: + if (entry.listener?.dispose) entry.listener.dispose(entry); + for (let ii = 0; ii < listeners.length; ii++) { + const listener = listeners[ii]; + if (listener.dispose) listener.dispose(entry); + } + this.animState.trackEntryPool.free(entry); + break; + case 4 /* complete */: + if (entry.listener?.complete) entry.listener.complete(entry); + for (let ii = 0; ii < listeners.length; ii++) { + const listener = listeners[ii]; + if (listener.complete) listener.complete(entry); + } + break; + case 5 /* event */: { + const event = objects[i++ + 2]; + if (entry.listener?.event) entry.listener.event(entry, event); + for (let ii = 0; ii < listeners.length; ii++) { + const listener = listeners[ii]; + if (listener.event) listener.event(entry, event); + } + break; + } + } + } + this.clear(); + this.drainDisabled = false; + } + clear() { + this.objects.length = 0; + } + }; + var EventType = /* @__PURE__ */ ((EventType2) => { + EventType2[EventType2["start"] = 0] = "start"; + EventType2[EventType2["interrupt"] = 1] = "interrupt"; + EventType2[EventType2["end"] = 2] = "end"; + EventType2[EventType2["dispose"] = 3] = "dispose"; + EventType2[EventType2["complete"] = 4] = "complete"; + EventType2[EventType2["event"] = 5] = "event"; + return EventType2; + })(EventType || {}); + var AnimationStateAdapter = class { + start(entry) { + } + interrupt(entry) { + } + end(entry) { + } + dispose(entry) { + } + complete(entry) { + } + event(entry, event) { + } + }; + var SUBSEQUENT = 0; + var FIRST = 1; + var HOLD = 2; + var HOLD_FIRST = 3; + var SETUP = 1; + var RETAIN = 2; + + // spine-core/src/AnimationStateData.ts + var AnimationStateData = class { + /** The SkeletonData to look up animations when they are specified by name. */ + skeletonData; + animationToMixTime = {}; + /** The mix duration to use when no mix duration has been defined between two animations. */ + defaultMix = 0; + constructor(skeletonData) { + if (!skeletonData) throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + setMix(from, to, duration) { + if (typeof from === "string") + return this.setMix1(from, to, duration); + return this.setMix2(from, to, duration); + } + setMix1(fromName, toName, duration) { + const from = this.skeletonData.findAnimation(fromName); + if (!from) throw new Error(`Animation not found: ${fromName}`); + const to = this.skeletonData.findAnimation(toName); + if (!to) throw new Error(`Animation not found: ${toName}`); + this.setMix2(from, to, duration); + } + setMix2(from, to, duration) { + if (!from) throw new Error("from cannot be null."); + if (!to) throw new Error("to cannot be null."); + const key = `${from.name}.${to.name}`; + this.animationToMixTime[key] = duration; + } + /** Returns the mix duration to use when changing from the specified animation to the other on the same track, or the + * {@link defaultMix} if no mix duration has been set. */ + getMix(from, to) { + const key = `${from.name}.${to.name}`; + const value = this.animationToMixTime[key]; + return value === void 0 ? this.defaultMix : value; + } + }; + + // spine-core/src/AssetManagerBase.ts + var AssetManagerBase = class { + constructor(textureLoader, pathPrefix = "", downloader = new Downloader(), cache = new AssetCache()) { + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + this.downloader = downloader; + this.cache = cache; + } + errors = {}; + toLoad = 0; + loaded = 0; + texturePmaInfo = {}; + start(path) { + this.toLoad++; + return this.pathPrefix + path; + } + success(callback, path, asset) { + this.toLoad--; + this.loaded++; + this.cache.assets[path] = asset; + this.cache.assetsRefCount[path] = (this.cache.assetsRefCount[path] || 0) + 1; + if (callback) callback(path, asset); + } + error(callback, path, message) { + this.toLoad--; + this.loaded++; + this.errors[path] = message; + if (callback) callback(path, message); + } + loadAll() { + const promise = new Promise((resolve, reject) => { + const check = () => { + if (this.isLoadingComplete()) { + if (this.hasErrors()) reject(this.errors); + else resolve(this); + return; + } + requestAnimationFrame(check); + }; + requestAnimationFrame(check); + }); + return promise; + } + setRawDataURI(path, data) { + this.downloader.rawDataUris[this.pathPrefix + path] = data; + } + loadBinary(path, success = () => { + }, error = () => { + }) { + path = this.start(path); + if (this.reuseAssets(path, success, error)) return; + this.cache.assetsLoaded[path] = new Promise((resolve, reject) => { + this.downloader.downloadBinary(path, (data) => { + this.success(success, path, data); + resolve(data); + }, (status, responseText) => { + const errorMsg = `Couldn't load binary ${path}: status ${status}, ${responseText}`; + this.error(error, path, errorMsg); + reject(errorMsg); + }); + }); + } + loadText(path, success = () => { + }, error = () => { + }) { + path = this.start(path); + this.downloader.downloadText(path, (data) => { + this.success(success, path, data); + }, (status, responseText) => { + this.error(error, path, `Couldn't load text ${path}: status ${status}, ${responseText}`); + }); + } + loadJson(path, success = () => { + }, error = () => { + }) { + path = this.start(path); + if (this.reuseAssets(path, success, error)) return; + this.cache.assetsLoaded[path] = new Promise((resolve, reject) => { + this.downloader.downloadJson(path, (data) => { + this.success(success, path, data); + resolve(data); + }, (status, responseText) => { + const errorMsg = `Couldn't load JSON ${path}: status ${status}, ${responseText}`; + this.error(error, path, errorMsg); + reject(errorMsg); + }); + }); + } + reuseAssets(path, success = () => { + }, error = () => { + }) { + const loadedStatus = this.cache.getAsset(path); + const alreadyExistsOrLoading = loadedStatus !== void 0; + if (alreadyExistsOrLoading) { + this.cache.assetsLoaded[path] = loadedStatus.then((data) => { + data = data instanceof Image || data instanceof ImageBitmap ? this.textureLoader(data) : data; + this.success(success, path, data); + return data; + }).catch((errorMsg) => { + this.error(error, path, errorMsg); + return void 0; + }); + } + return alreadyExistsOrLoading; + } + loadTexture(path, success = () => { + }, error = () => { + }) { + path = this.start(path); + if (this.reuseAssets(path, success, error)) return; + const pma = this.texturePmaInfo[path]; + this.cache.assetsLoaded[path] = new Promise((resolve, reject) => { + const isBrowser = !!(typeof window !== "undefined" && typeof navigator !== "undefined" && window.document); + const isWebWorker = !isBrowser; + if (isWebWorker) { + fetch(path, { mode: "cors" }).then((response) => { + if (response.ok) return response.blob(); + const errorMsg = `Couldn't load image: ${path}`; + this.error(error, path, `Couldn't load image: ${path}`); + reject(errorMsg); + }).then((blob) => { + return blob ? createImageBitmap(blob, { premultiplyAlpha: "none", colorSpaceConversion: "none" }) : null; + }).then((bitmap) => { + if (bitmap) { + const texture = this.createTexture(path, pma, bitmap); + this.success(success, path, texture); + resolve(texture); + } + ; + }); + } else { + const image = new Image(); + image.crossOrigin = "anonymous"; + image.onload = () => { + const texture = this.createTexture(path, pma, image); + this.success(success, path, texture); + resolve(texture); + }; + image.onerror = () => { + const errorMsg = `Couldn't load image: ${path}`; + this.error(error, path, errorMsg); + reject(errorMsg); + }; + if (this.downloader.rawDataUris[path]) path = this.downloader.rawDataUris[path]; + image.src = path; + } + }); + } + loadTextureAtlas(path, success = () => { + }, error = () => { + }, fileAlias) { + const index = path.lastIndexOf("/"); + const parent = index >= 0 ? path.substring(0, index + 1) : ""; + path = this.start(path); + if (this.reuseAssets(path, success, error)) return; + this.cache.assetsLoaded[path] = new Promise((resolve, reject) => { + this.downloader.downloadText(path, (atlasText) => { + try { + const atlas = this.createTextureAtlas(atlasText, parent, path, fileAlias); + let toLoad = atlas.pages.length, abort = false; + if (toLoad === 0) { + this.success(success, path, atlas); + resolve(atlas); + return; + } + for (const page of atlas.pages) { + this.loadTexture( + this.texturePath(parent, page.name, fileAlias), + (imagePath, texture) => { + if (!abort) { + page.setTexture(texture); + if (--toLoad === 0) { + this.success(success, path, atlas); + resolve(atlas); + } + } + }, + (imagePath, message) => { + if (!abort) { + const errorMsg = `Couldn't load texture ${path} page image: ${imagePath}`; + this.error(error, path, errorMsg); + reject(errorMsg); + } + abort = true; + } + ); + } + } catch (e) { + const errorMsg = `Couldn't parse texture atlas ${path}: ${e.message}`; + this.error(error, path, errorMsg); + reject(errorMsg); + } + }, (status, responseText) => { + const errorMsg = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`; + this.error(error, path, errorMsg); + reject(errorMsg); + }); + }); + } + loadTextureAtlasButNoTextures(path, success = () => { + }, error = () => { + }) { + const index = path.lastIndexOf("/"); + const parent = index >= 0 ? path.substring(0, index + 1) : ""; + path = this.start(path); + if (this.reuseAssets(path, success, error)) return; + this.cache.assetsLoaded[path] = new Promise((resolve, reject) => { + this.downloader.downloadText(path, (atlasText) => { + try { + const atlas = this.createTextureAtlas(atlasText, parent, path); + this.success(success, path, atlas); + resolve(atlas); + } catch (e) { + const errorMsg = `Couldn't parse texture atlas ${path}: ${e.message}`; + this.error(error, path, errorMsg); + reject(errorMsg); + } + }, (status, responseText) => { + const errorMsg = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`; + this.error(error, path, errorMsg); + reject(errorMsg); + }); + }); + } + async loadBinaryAsync(path) { + return new Promise((resolve, reject) => { + this.loadBinary( + path, + (_, binary) => resolve(binary), + (_, message) => reject(message) + ); + }); + } + async loadJsonAsync(path) { + return new Promise((resolve, reject) => { + this.loadJson( + path, + (_, object) => resolve(object), + (_, message) => reject(message) + ); + }); + } + async loadTextureAsync(path) { + return new Promise((resolve, reject) => { + this.loadTexture( + path, + (_, texture) => resolve(texture), + (_, message) => reject(message) + ); + }); + } + async loadTextureAtlasAsync(path) { + return new Promise((resolve, reject) => { + this.loadTextureAtlas( + path, + (_, atlas) => resolve(atlas), + (_, message) => reject(message) + ); + }); + } + async loadTextureAtlasButNoTexturesAsync(path) { + return new Promise((resolve, reject) => { + this.loadTextureAtlasButNoTextures( + path, + (_, atlas) => resolve(atlas), + (_, message) => reject(message) + ); + }); + } + setCache(cache) { + this.cache = cache; + } + get(path) { + return this.cache.assets[this.pathPrefix + path]; + } + require(path) { + path = this.pathPrefix + path; + const asset = this.cache.assets[path]; + if (asset) return asset; + const error = this.errors[path]; + throw Error(`Asset not found: ${path}${error ? ` +${error}` : ""}`); + } + remove(path) { + path = this.pathPrefix + path; + const asset = this.cache.assets[path]; + if (asset.dispose) asset.dispose(); + delete this.cache.assets[path]; + delete this.cache.assetsRefCount[path]; + delete this.cache.assetsLoaded[path]; + return asset; + } + removeAll() { + for (const path in this.cache.assets) { + const asset = this.cache.assets[path]; + if (asset.dispose) asset.dispose(); + } + this.cache.assets = {}; + this.cache.assetsLoaded = {}; + this.cache.assetsRefCount = {}; + } + isLoadingComplete() { + return this.toLoad === 0; + } + getToLoad() { + return this.toLoad; + } + getLoaded() { + return this.loaded; + } + dispose() { + this.removeAll(); + } + // dispose asset only if it's not used by others + disposeAsset(path) { + const asset = this.cache.assets[path]; + if (asset instanceof TextureAtlas) { + asset.dispose(); + return; + } + this.disposeAssetInternal(path); + } + hasErrors() { + return Object.keys(this.errors).length > 0; + } + getErrors() { + return this.errors; + } + disposeAssetInternal(path) { + if (this.cache.assetsRefCount[path] > 0 && --this.cache.assetsRefCount[path] === 0) { + return this.remove(path); + } + } + createTextureAtlas(atlasText, parentPath, path, fileAlias) { + const atlas = new TextureAtlas(atlasText); + atlas.dispose = () => { + if (this.cache.assetsRefCount[path] <= 0) return; + this.disposeAssetInternal(path); + for (const page of atlas.pages) { + page.texture?.dispose(); + } + }; + for (const page of atlas.pages) { + const texturePath = this.texturePath(parentPath, page.name, fileAlias); + this.texturePmaInfo[this.pathPrefix + texturePath] = page.pma; + } + return atlas; + } + createTexture(path, pma, image) { + const texture = this.textureLoader(image, pma); + const textureDispose = texture.dispose.bind(texture); + texture.dispose = () => { + if (this.disposeAssetInternal(path)) textureDispose(); + }; + return texture; + } + texturePath(parentPath, pageName, fileAlias) { + if (!fileAlias) return parentPath + pageName; + return fileAlias[pageName]; + } + }; + var AssetCache = class _AssetCache { + assets = {}; + assetsRefCount = {}; + assetsLoaded = {}; + static AVAILABLE_CACHES = /* @__PURE__ */ new Map(); + static getCache(id) { + const cache = _AssetCache.AVAILABLE_CACHES.get(id); + if (cache) return cache; + const newCache = new _AssetCache(); + _AssetCache.AVAILABLE_CACHES.set(id, newCache); + return newCache; + } + async addAsset(path, asset) { + this.assetsLoaded[path] = Promise.resolve(asset); + this.assets[path] = asset; + return asset; + } + getAsset(path) { + return this.assetsLoaded[path]; + } + }; + var Downloader = class { + callbacks = {}; + rawDataUris = {}; + dataUriToString(dataUri) { + if (!dataUri.startsWith("data:")) { + throw new Error("Not a data URI."); + } + let base64Idx = dataUri.indexOf("base64,"); + if (base64Idx !== -1) { + base64Idx += "base64,".length; + return atob(dataUri.substr(base64Idx)); + } else { + return dataUri.substr(dataUri.indexOf(",") + 1); + } + } + base64ToUint8Array(base64) { + var binary_string = window.atob(base64); + var len = binary_string.length; + var bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { + bytes[i] = binary_string.charCodeAt(i); + } + return bytes; + } + dataUriToUint8Array(dataUri) { + if (!dataUri.startsWith("data:")) { + throw new Error("Not a data URI."); + } + let base64Idx = dataUri.indexOf("base64,"); + if (base64Idx === -1) throw new Error("Not a binary data URI."); + base64Idx += "base64,".length; + return this.base64ToUint8Array(dataUri.substr(base64Idx)); + } + downloadText(url, success, error) { + if (this.start(url, success, error)) return; + const rawDataUri = this.rawDataUris[url]; + if (rawDataUri && !rawDataUri.includes(".")) { + try { + this.finish(url, 200, this.dataUriToString(rawDataUri)); + } catch (e) { + this.finish(url, 400, JSON.stringify(e)); + } + return; + } + const request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.open("GET", rawDataUri ? rawDataUri : url, true); + const done = () => { + this.finish(url, request.status, request.responseText); + }; + request.onload = done; + request.onerror = done; + request.send(); + } + downloadJson(url, success, error) { + this.downloadText(url, (data) => { + success(JSON.parse(data)); + }, error); + } + downloadBinary(url, success, error) { + if (this.start(url, success, error)) return; + const rawDataUri = this.rawDataUris[url]; + if (rawDataUri && !rawDataUri.includes(".")) { + try { + this.finish(url, 200, this.dataUriToUint8Array(rawDataUri)); + } catch (e) { + this.finish(url, 400, JSON.stringify(e)); + } + return; + } + const request = new XMLHttpRequest(); + request.open("GET", rawDataUri ? rawDataUri : url, true); + request.responseType = "arraybuffer"; + const onerror = () => { + this.finish(url, request.status, request.response); + }; + request.onload = () => { + if (request.status === 200 || request.status === 0) + this.finish(url, 200, new Uint8Array(request.response)); + else + onerror(); + }; + request.onerror = onerror; + request.send(); + } + start(url, success, error) { + let callbacks = this.callbacks[url]; + try { + if (callbacks) return true; + this.callbacks[url] = callbacks = []; + } finally { + callbacks.push(success, error); + } + } + finish(url, status, data) { + const callbacks = this.callbacks[url]; + delete this.callbacks[url]; + if (status === 200 || status === 0) { + for (let i = 0, n = callbacks.length; i < n; i += 2) + callbacks[i](data); + } else { + for (let i = 1, n = callbacks.length; i < n; i += 2) + callbacks[i](status, data); + } + } + }; + + // spine-core/src/attachments/BoundingBoxAttachment.ts + var BoundingBoxAttachment = class _BoundingBoxAttachment extends VertexAttachment { + color = new Color(1, 1, 1, 1); + constructor(name) { + super(name); + } + copy() { + const copy = new _BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + } + }; + + // spine-core/src/attachments/ClippingAttachment.ts + var ClippingAttachment = class _ClippingAttachment extends VertexAttachment { + /** Clipping is performed between the clipping attachment's slot and the end slot. If null, clipping is done until the end of + * the skeleton's rendering. */ + endSlot = null; + /** When true the clipping polygon is treated as convex for more efficient clipping. If the polygon deforms to concave then the + * convex hull is used. When false the clipping polygon can be concave and if so has an additional CPU cost. Inverse clipping + * always uses convex. */ + convex = false; + /** When false, everything inside the clipping polygon is visible. When true, everything outside the clipping polygon is + * visible and clipping is convex. */ + inverse = false; + // Nonessential. + /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons + * are not usually rendered at runtime. */ + color = new Color(0.2275, 0.2275, 0.8078, 1); + // ce3a3aff + constructor(name) { + super(name); + } + copy() { + const copy = new _ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.convex = this.convex; + copy.inverse = this.inverse; + copy.color.setFromColor(this.color); + return copy; + } + }; + + // spine-core/src/attachments/PathAttachment.ts + var PathAttachment = class _PathAttachment extends VertexAttachment { + /** The lengths along the path in the setup pose from the start of the path to the end of each Bezier curve. */ + lengths = []; + /** If true, the start and end knots are connected. */ + closed = false; + /** If true, additional calculations are performed to make computing positions along the path more accurate so movement along + * the path has a constant speed. */ + constantSpeed = false; + /** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually + * rendered at runtime. */ + color = new Color(1, 1, 1, 1); + constructor(name) { + super(name); + } + copy() { + const copy = new _PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = []; + Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = this.closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + } + }; + + // spine-core/src/attachments/PointAttachment.ts + var PointAttachment = class _PointAttachment extends VertexAttachment { + /** The local x position. */ + x = 0; + /** The local y position. */ + y = 0; + /** The local rotation in degrees, counter clockwise. */ + rotation = 0; + /** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments + * are not usually rendered at runtime. */ + color = new Color(0.38, 0.94, 0, 1); + constructor(name) { + super(name); + } + /** Computes the world position from the local position. */ + computeWorldPosition(bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + } + /** Computes the world rotation from the local rotation. */ + computeWorldRotation(bone) { + const r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r); + const x = cos * bone.a + sin * bone.b; + const y = cos * bone.c + sin * bone.d; + return MathUtils.atan2Deg(y, x); + } + copy() { + const copy = new _PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + } + }; + + // spine-core/src/AtlasAttachmentLoader.ts + var AtlasAttachmentLoader = class { + atlas; + allowMissingRegions; + constructor(atlas, allowMissingRegions = false) { + this.atlas = atlas; + this.allowMissingRegions = allowMissingRegions; + } + /** Sets each {@link Sequence.regions} by calling {@link findRegion} for each texture region using + * {@link Sequence.getPath}. */ + findRegions(name, basePath, sequence) { + const regions = sequence.regions; + for (let i = 0, n = regions.length; i < n; i++) + regions[i] = this.findRegion(name, sequence.getPath(basePath, i)); + } + /** Looks for the region with the specified path. If not found and {@link allowMissingRegions} is false, an error is + * raised. */ + findRegion(name, path) { + const region = this.atlas.findRegion(path); + if (!region && !this.allowMissingRegions) + throw new Error(`Region not found in atlas: ${path} (attachment: ${name})`); + return region; + } + newRegionAttachment(skin, placeholder, name, path, sequence) { + this.findRegions(name, path, sequence); + return new RegionAttachment(name, sequence); + } + newMeshAttachment(skin, placeholder, name, path, sequence) { + this.findRegions(name, path, sequence); + return new MeshAttachment(name, sequence); + } + newBoundingBoxAttachment(skin, placeholder, name) { + return new BoundingBoxAttachment(name); + } + newPathAttachment(skin, placeholder, name) { + return new PathAttachment(name); + } + newPointAttachment(skin, placeholder, name) { + return new PointAttachment(name); + } + newClippingAttachment(skin, placeholder, name) { + return new ClippingAttachment(name); + } + }; + + // spine-core/src/PosedData.ts + var PosedData = class { + name; + setupPose; + /** When true, {@link Skeleton.updateWorldTransform} only updates this constraint if the {@link Skeleton.skin} + * contains this constraint. + * + * See {@link Skin.constraints}. */ + skinRequired = false; + constructor(name, setupPose) { + if (name == null) throw new Error("name cannot be null."); + this.name = name; + this.setupPose = setupPose; + } + }; + + // spine-core/src/BoneData.ts + var BoneData = class _BoneData extends PosedData { + /** The index of the bone in {@link Skeleton.bones}. */ + index = 0; + /** The parent bone, or null if this bone is the root. */ + parent = null; + /** The bone's length. */ + length = 0; + // Nonessential. + /** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually + * rendered at runtime. */ + color = new Color(); + /** The bone icon name as it was in Spine, or null if nonessential data was not exported. */ + icon; + /** The bone icon's display size scale, or 1 if nonessential data was not exported. */ + iconSize = 1; + /** The bone icon's display rotation in degrees, or 0 if nonessential data was not exported. */ + iconRotation = 0; + /** False if the bone was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */ + visible = false; + constructor(index, name, parent) { + super(name, new BonePose()); + if (index < 0) throw new Error("index must be >= 0."); + if (!name) throw new Error("name cannot be null."); + this.index = index; + this.parent = parent; + } + copy(parent) { + const copy = new _BoneData(this.index, this.name, parent); + copy.length = this.length; + copy.setupPose.set(this.setupPose); + return copy; + } + }; + var Inherit = /* @__PURE__ */ ((Inherit2) => { + Inherit2[Inherit2["Normal"] = 0] = "Normal"; + Inherit2[Inherit2["OnlyTranslation"] = 1] = "OnlyTranslation"; + Inherit2[Inherit2["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + Inherit2[Inherit2["NoScale"] = 3] = "NoScale"; + Inherit2[Inherit2["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + return Inherit2; + })(Inherit || {}); + + // spine-core/src/BonePose.ts + var BonePose = class { + bone; + /** The local x translation. */ + x = 0; + /** The local y translation. */ + y = 0; + /** The local rotation in degrees, counter clockwise. */ + rotation = 0; + /** The local scaleX. */ + scaleX = 0; + /** The local scaleY. */ + scaleY = 0; + /** The local shearX. */ + shearX = 0; + /** The local shearY. */ + shearY = 0; + inherit = 0 /* Normal */; + /** The world transform `[a b][c d]` x-axis x component. */ + a = 0; + /** The world transform `[a b][c d]` y-axis x component. */ + b = 0; + /** The world transform `[a b][c d]` x-axis y component. */ + c = 0; + /** The world transform `[a b][c d]` y-axis y component. */ + d = 0; + /** The world X position. If changed, {@link updateLocalTransform} should be called. */ + worldY = 0; + /** The world Y position. If changed, {@link updateLocalTransform} should be called. */ + worldX = 0; + world = 0; + local = 0; + set(pose) { + if (pose == null) throw new Error("pose cannot be null."); + this.x = pose.x; + this.y = pose.y; + this.rotation = pose.rotation; + this.scaleX = pose.scaleX; + this.scaleY = pose.scaleY; + this.shearX = pose.shearX; + this.shearY = pose.shearY; + this.inherit = pose.inherit; + } + setPosition(x, y) { + this.x = x; + this.y = y; + } + setScale(scaleOrX, scaleY) { + this.scaleX = scaleOrX; + this.scaleY = scaleY === void 0 ? scaleOrX : scaleY; + } + /** Determines how parent world transforms affect this bone. */ + getInherit() { + return this.inherit; + } + setInherit(inherit) { + if (inherit == null) throw new Error("inherit cannot be null."); + this.inherit = inherit; + } + /** Called by {@link Skeleton.updateCache} to compute the world transform, if needed. */ + update(skeleton, physics) { + if (this.world !== skeleton._update) this.updateWorldTransform(skeleton); + } + /** Computes the world transform using the parent bone's world transform and this applied local pose. Child bones are not + * updated. + * + * See World transforms in the Spine + * Runtimes Guide. */ + updateWorldTransform(skeleton) { + if (this.local === skeleton._update) + this.updateLocalTransform(skeleton); + else + this.world = skeleton._update; + const rotation = this.rotation; + const scaleX = this.scaleX; + const scaleY = this.scaleY; + const shearX = this.shearX; + const shearY = this.shearY; + if (!this.bone.parent) { + const sx = skeleton.scaleX, sy = skeleton.scaleY; + const rx = (rotation + shearX) * MathUtils.degRad; + const ry = (rotation + 90 + shearY) * MathUtils.degRad; + this.a = Math.cos(rx) * scaleX * sx; + this.b = Math.cos(ry) * scaleY * sx; + this.c = Math.sin(rx) * scaleX * sy; + this.d = Math.sin(ry) * scaleY * sy; + this.worldX = this.x * sx + skeleton.x; + this.worldY = this.y * sy + skeleton.y; + return; + } + const parent = this.bone.parent.appliedPose; + let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + this.worldX = pa * this.x + pb * this.y + parent.worldX; + this.worldY = pc * this.x + pd * this.y + parent.worldY; + switch (this.inherit) { + case 0 /* Normal */: { + const rx = (rotation + shearX) * MathUtils.degRad; + const ry = (rotation + 90 + shearY) * MathUtils.degRad; + const la = Math.cos(rx) * scaleX; + const lb = Math.cos(ry) * scaleY; + const lc = Math.sin(rx) * scaleX; + const ld = Math.sin(ry) * scaleY; + this.a = pa * la + pb * lc; + this.b = pa * lb + pb * ld; + this.c = pc * la + pd * lc; + this.d = pc * lb + pd * ld; + return; + } + case 1 /* OnlyTranslation */: { + const sx = skeleton.scaleX, sy = skeleton.scaleY; + const rx = (rotation + shearX) * MathUtils.degRad; + const ry = (rotation + 90 + shearY) * MathUtils.degRad; + this.a = Math.cos(rx) * scaleX * sx; + this.b = Math.cos(ry) * scaleY * sx; + this.c = Math.sin(rx) * scaleX * sy; + this.d = Math.sin(ry) * scaleY * sy; + break; + } + case 2 /* NoRotationOrReflection */: { + const sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy; + pa *= sxi; + pc *= syi; + let s = pa * pa + pc * pc; + let r = 0; + if (s > MathUtils.epsilon2) { + s = Math.abs(pa * pd * syi - pb * sxi * pc) / s; + pb = pc * s; + pd = pa * s; + r = rotation - MathUtils.atan2Deg(pc, pa); + } else { + pa = 0; + pc = 0; + r = rotation - 90 + MathUtils.atan2Deg(pd, pb); + } + const rx = (r + shearX) * MathUtils.degRad; + const ry = (r + shearY + 90) * MathUtils.degRad; + const la = Math.cos(rx) * scaleX; + const lb = Math.cos(ry) * scaleY; + const lc = Math.sin(rx) * scaleX; + const ld = Math.sin(ry) * scaleY; + this.a = (pa * la - pb * lc) * sx; + this.b = (pa * lb - pb * ld) * sx; + this.c = (pc * la + pd * lc) * sy; + this.d = (pc * lb + pd * ld) * sy; + break; + } + case 3 /* NoScale */: + case 4 /* NoScaleOrReflection */: { + const sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy; + const r = rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r); + let za = (pa * cos + pb * sin) * sxi; + let zc = (pc * cos + pd * sin) * syi; + const s = 1 / Math.sqrt(za * za + zc * zc); + za *= s; + zc *= s; + let zb = -zc, zd = za; + if (this.inherit === 3 /* NoScale */ && pa * pd - pb * pc < 0 !== (sx < 0 !== sy < 0)) { + zb = -zb; + zd = -zd; + } + const rx = shearX * MathUtils.degRad; + const ry = (90 + shearY) * MathUtils.degRad; + const la = Math.cos(rx) * scaleX; + const lb = Math.cos(ry) * scaleY; + const lc = Math.sin(rx) * scaleX; + const ld = Math.sin(ry) * scaleY; + this.a = (za * la + zb * lc) * sx; + this.b = (za * lb + zb * ld) * sx; + this.c = (zc * la + zd * lc) * sy; + this.d = (zc * lb + zd * ld) * sy; + break; + } + } + } + /** Computes the local transform values from the world transform. + * + * If the world transform is modified (by a constraint, {@link rotateWorld}, etc) then this method should be called so + * the local transform matches the world transform. The local transform may be needed by other code (eg to apply another + * constraint). + * + * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The local transform after + * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */ + updateLocalTransform(skeleton) { + this.local = 0; + this.world = skeleton._update; + const sx = skeleton.scaleX, sy = skeleton.scaleY; + if (!this.bone.parent) { + const sxi = 1 / sx, syi = 1 / sy; + this.x = (this.worldX - skeleton.x) * sxi; + this.y = (this.worldY - skeleton.y) * syi; + this.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0); + return; + } + const parent = this.bone.parent.appliedPose; + let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + const pad = pa * pd - pb * pc, pid = 1 / (pa * pd - pb * pc); + const ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid; + const dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY; + this.x = dx * ia - dy * ib; + this.y = dy * id - dx * ic; + switch (this.inherit) { + case 0 /* Normal */: + this.set5(ia * this.a - ib * this.c, ia * this.b - ib * this.d, id * this.c - ic * this.a, id * this.d - ic * this.b, 0); + break; + case 1 /* OnlyTranslation */: { + const sxi = 1 / sx, syi = 1 / sy; + this.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0); + break; + } + case 2 /* NoRotationOrReflection */: { + const sxi = 1 / sx, syi = 1 / sy; + pa *= sxi; + pc *= syi; + const wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi; + const s = 1 / (pa * pa + pc * pc), det = 1 / Math.abs(pad * sxi * syi); + this.set5( + (pa * wa + pc * wc) * s, + (pa * wb + pc * wd) * s, + (pa * wc - pc * wa) * det, + (pa * wd - pc * wb) * det, + MathUtils.atan2Deg(pc, pa) + ); + break; + } + case 3 /* NoScale */: + case 4 /* NoScaleOrReflection */: { + const sxi = 1 / sx, syi = 1 / sy; + const wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi; + let tx = pd * this.a - pb * this.c, ty = pa * this.c - pc * this.a; + if (pad < 0) { + tx = -tx; + ty = -ty; + } + let r = MathUtils.atan2Deg(ty, tx); + this.rotation = r; + r *= MathUtils.degRad; + const cos = Math.cos(r), sin = Math.sin(r); + let za = (pa * cos + pb * sin) * sxi; + let zc = (pc * cos + pd * sin) * syi; + const s = 1 / Math.sqrt(za * za + zc * zc); + za *= s; + zc *= s; + const si = this.inherit === 3 /* NoScale */ && pad < 0 !== (sx < 0 !== sy < 0) ? -1 : 1; + this.set4(za * wa + zc * wc, za * wb + zc * wd, (za * wc - zc * wa) * si, (za * wd - zc * wb) * si); + } + } + } + set4(ra, rb, rc, rd) { + const x = ra * ra + rc * rc, y = rb * rb + rd * rd; + if (x > MathUtils.epsilon2) { + this.shearX = MathUtils.atan2Deg(rc, ra); + this.scaleX = Math.sqrt(x); + } else { + this.shearX = 0; + this.scaleX = 0; + } + this.scaleY = Math.sqrt(y); + if (y > MathUtils.epsilon2) { + this.shearY = MathUtils.atan2Deg(rd, rb); + if (ra * rd - rb * rc < 0) { + this.scaleY = -this.scaleY; + this.shearY += 90; + } else + this.shearY -= 90; + if (this.shearY > 180) + this.shearY -= 360; + else if (this.shearY <= -180) + this.shearY += 360; + } else + this.shearY = 0; + } + set5(ra, rb, rc, rd, ro) { + this.shearX = 0; + const x = ra * ra + rc * rc, y = rb * rb + rd * rd; + if (x > MathUtils.epsilon2) { + const r = MathUtils.atan2Deg(rc, ra); + this.rotation = r + ro; + this.scaleX = Math.sqrt(x); + this.scaleY = Math.sqrt(y); + if (y > MathUtils.epsilon2) { + this.shearY = MathUtils.atan2Deg(rd, rb); + if (ra * rd - rb * rc < 0) { + this.scaleY = -this.scaleY; + this.shearY += 90 - r; + } else + this.shearY -= 90 + r; + if (this.shearY > 180) + this.shearY -= 360; + else if (this.shearY <= -180) + this.shearY += 360; + } else + this.shearY = 0; + } else { + this.scaleX = 0; + this.scaleY = Math.sqrt(y); + this.shearY = 0; + this.rotation = y > MathUtils.epsilon2 ? MathUtils.atan2Deg(rd, rb) - 90 + ro : ro; + } + } + /** If the world transform has been modified by constraints and the local transform no longer matches, + * {@link updateLocalTransform} is called. Call this after {@link Skeleton.updateWorldTransform} before + * using the applied local transform. */ + validateLocalTransform(skeleton) { + if (this.local === skeleton._update) this.updateLocalTransform(skeleton); + } + modifyLocal(skeleton) { + if (this.local === skeleton._update) this.updateLocalTransform(skeleton); + this.world = 0; + this.resetWorld(skeleton._update); + } + modifyWorld(update) { + this.local = update; + this.world = update; + this.resetWorld(update); + } + resetWorld(update) { + const children = this.bone.children; + for (let i = 0, n = children.length; i < n; i++) { + const child = children[i].appliedPose; + if (child.world === update) { + child.world = 0; + child.local = 0; + child.resetWorld(update); + } + } + } + /** The world rotation for the X axis, calculated using {@link a} and {@link c}. This is the direction the bone is + * pointing. */ + getWorldRotationX() { + return MathUtils.atan2Deg(this.c, this.a); + } + /** The world rotation for the Y axis, calculated using {@link b} and {@link d}. */ + getWorldRotationY() { + return MathUtils.atan2Deg(this.d, this.b); + } + /** The magnitude (always positive) of the world scale X, calculated using {@link a} and {@link c}. */ + getWorldScaleX() { + return Math.sqrt(this.a * this.a + this.c * this.c); + } + /** The magnitude (always positive) of the world scale Y, calculated using {@link b} and {@link d}. */ + getWorldScaleY() { + return Math.sqrt(this.b * this.b + this.d * this.d); + } + // public Matrix3 getWorldTransform (Matrix3 worldTransform) { + // if (worldTransform == null) throw new IllegalArgumentException("worldTransform cannot be null."); + // float[] val = worldTransform.val; + // val[M00] = a; + // val[M01] = b; + // val[M10] = c; + // val[M11] = d; + // val[M02] = worldX; + // val[M12] = worldY; + // val[M20] = 0; + // val[M21] = 0; + // val[M22] = 1; + // return worldTransform; + // } + /** Transforms a point from world coordinates to the bone's local coordinates. */ + worldToLocal(world) { + if (world == null) throw new Error("world cannot be null."); + const det = this.a * this.d - this.b * this.c; + const x = world.x - this.worldX, y = world.y - this.worldY; + world.x = (x * this.d - y * this.b) / det; + world.y = (y * this.a - x * this.c) / det; + return world; + } + /** Transforms a point from the bone's local coordinates to world coordinates. */ + localToWorld(local) { + if (local == null) throw new Error("local cannot be null."); + const x = local.x, y = local.y; + local.x = x * this.a + y * this.b + this.worldX; + local.y = x * this.c + y * this.d + this.worldY; + return local; + } + /** Transforms a point from world coordinates to the parent bone's local coordinates. */ + worldToParent(world) { + if (world == null) throw new Error("world cannot be null."); + return this.bone.parent == null ? world : this.bone.parent.appliedPose.worldToLocal(world); + } + /** Transforms a point from the parent bone's coordinates to world coordinates. */ + parentToWorld(world) { + if (world == null) throw new Error("world cannot be null."); + return this.bone.parent == null ? world : this.bone.parent.appliedPose.localToWorld(world); + } + /** Transforms a world rotation to a local rotation. */ + worldToLocalRotation(worldRotation) { + worldRotation *= MathUtils.degRad; + const sin = Math.sin(worldRotation), cos = Math.cos(worldRotation); + return MathUtils.atan2Deg(this.a * sin - this.c * cos, this.d * cos - this.b * sin) + this.rotation - this.shearX; + } + /** Transforms a local rotation to a world rotation. */ + localToWorldRotation(localRotation) { + localRotation = (localRotation - this.rotation - this.shearX) * MathUtils.degRad; + const sin = Math.sin(localRotation), cos = Math.cos(localRotation); + return MathUtils.atan2Deg(cos * this.c + sin * this.d, cos * this.a + sin * this.b); + } + /** Rotates the world transform the specified amount. */ + rotateWorld(degrees) { + degrees *= MathUtils.degRad; + const sin = Math.sin(degrees), cos = Math.cos(degrees); + const ra = this.a, rb = this.b; + this.a = cos * ra - sin * this.c; + this.b = cos * rb - sin * this.d; + this.c = sin * ra + cos * this.c; + this.d = sin * rb + cos * this.d; + } + }; + + // spine-core/src/Posed.ts + var Posed = class { + /** The constraint's setup pose data. */ + data; + pose; + constrainedPose; + appliedPose; + constructor(data, pose, constrainedPose) { + if (data == null) throw new Error("data cannot be null."); + this.data = data; + this.pose = pose; + this.constrainedPose = constrainedPose; + this.appliedPose = pose; + } + /** Sets the unconstrained pose to the setup pose. */ + setupPose() { + this.pose.set(this.data.setupPose); + } + /** The setup pose data. May be shared with multiple instances. */ + getData() { + return this.data; + } + /** The unconstrained pose for this object, set by animations and application code. */ + getPose() { + return this.pose; + } + /** The pose to use for rendering. If no constraints modify this pose, this is the same as {@link pose}. Otherwise it is a + * copy of {@link pose} modified by constraints. */ + getAppliedPose() { + return this.appliedPose; + } + /** Sets the applied pose to the unconstrained pose, for when no constraints will modify the pose. */ + unconstrained() { + this.appliedPose = this.pose; + } + /** Sets the applied pose to the constrained pose, in anticipation of the applied pose being modified by constraints. */ + constrained() { + this.appliedPose = this.constrainedPose; + } + /** Sets the constrained pose to the unconstrained pose, as a starting point for constraints to be applied. */ + resetConstrained() { + this.constrainedPose.set(this.pose); + } + }; + + // spine-core/src/PosedActive.ts + var PosedActive = class extends Posed { + active = false; + constructor(data, pose, constrained) { + super(data, pose, constrained); + this.setupPose(); + } + /** Returns false when this constraint won't be updated by + * {@link Skeleton.updateWorldTransform} because a skin is required and the + * {@link Skeleton.skin active skin} does not contain this item. See {@link Skin.bones}, {@link Skin.constraints}, + * {@link PosedData.skinRequired}, and {@link Skeleton.updateCache}. */ + isActive() { + return this.active; + } + }; + + // spine-core/src/Bone.ts + var Bone = class _Bone extends PosedActive { + /** The parent bone, or null if this is the root bone. */ + parent = null; + /** The immediate children of this bone. */ + children = []; + sorted = false; + constructor(data, parent) { + super(data, new BonePose(), new BonePose()); + this.parent = parent; + this.appliedPose.bone = this; + this.constrainedPose.bone = this; + } + /** Copy constructor. Does not copy the {@link children} bones. */ + copy(parent) { + const copy = new _Bone(this.data, parent); + copy.pose.set(this.pose); + return copy; + } + }; + + // spine-core/src/Constraint.ts + var Constraint = class extends PosedActive { + constructor(data, pose, constrained) { + super(data, pose, constrained); + } + isSourceActive() { + return true; + } + }; + + // spine-core/src/DrawOrder.ts + var DrawOrder = class { + _setupPose; + /** The unconstrained draw order, set by animations and application code. */ + pose; + constrainedPose; + /** The constrained draw order for rendering. If no constraints modify the draw order, this is the same as {@link pose}. + * Otherwise it is a copy of {@link pose} modified by constraints. */ + appliedPose; + constructor(setupPose) { + this._setupPose = setupPose; + this.pose = [...setupPose]; + this.constrainedPose = []; + this.appliedPose = this.pose; + } + /** Sets the unconstrained draw order to the setup pose order. */ + setupPose() { + this.pose.length = this._setupPose.length; + Utils.arrayCopy(this._setupPose, 0, this.pose, 0, this._setupPose.length); + } + /** Sets the applied pose to the unconstrained pose, for when no constraints will modify the draw order. */ + unconstrained() { + this.appliedPose = this.pose; + } + /** Sets the applied pose to the constrained pose, in anticipation of the applied pose being modified by constraints. */ + constrained() { + this.appliedPose = this.constrainedPose; + } + /** Copies the unconstrained pose to the constrained pose, as a starting point for constraints to be applied. */ + resetConstrained() { + this.constrainedPose.length = this.pose.length; + Utils.arrayCopy(this.pose, 0, this.constrainedPose, 0, this.pose.length); + } + }; + + // spine-core/src/ConstraintData.ts + var ConstraintData = class extends PosedData { + constructor(name, setup) { + super(name, setup); + } + }; + var ScaleYMode = /* @__PURE__ */ ((ScaleYMode2) => { + ScaleYMode2[ScaleYMode2["None"] = 0] = "None"; + ScaleYMode2[ScaleYMode2["Uniform"] = 1] = "Uniform"; + ScaleYMode2[ScaleYMode2["Volume"] = 2] = "Volume"; + return ScaleYMode2; + })(ScaleYMode || {}); + + // spine-core/src/Event.ts + var Event = class { + /** The animation time this event was keyed, or -1 for the setup pose. */ + time = 0; + data; + /** The integer payload for this event. */ + intValue = 0; + /** The float payload for this event. */ + floatValue = 0; + stringValue = null; + /** If an audio path is set, the volume for the audio. */ + volume = 0; + /** If an audio path is set, the left/right balance for the audio. */ + balance = 0; + constructor(time, data) { + if (!data) throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + }; + + // spine-core/src/EventData.ts + var EventData = class { + /** The name of the event, unique across all events in the skeleton. + * + * See {@link SkeletonData.findEvent}. */ + name; + _audioPath = null; + /** Path to an audio file relative to the audio folder as defined in Spine. */ + get audioPath() { + return this._audioPath; + } + set audioPath(audioPath) { + if (audioPath == null) throw new Error("audioPath cannot be null."); + this._audioPath = audioPath; + } + /** The setup values that are shared by all events with this data. */ + setupPose = new Event(-1, this); + constructor(name) { + this.name = name; + } + }; + + // spine-core/src/IkConstraintPose.ts + var IkConstraintPose = class { + /** For two bone IK, controls the bend direction of the IK bones, either 1 or -1. */ + bendDirection = 0; + /** For one bone IK, when true and the target is too close, the bone is scaled to reach it. */ + compress = false; + /** When true and the target is out of range, the parent bone is scaled to reach it. + * + * For two bone IK: 1) the child bone's local Y translation is set to 0, 2) stretch is not applied if {@link softness} is > 0, + * and 3) if the parent bone has local nonuniform scale, stretch is not applied. */ + stretch = false; + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotation. + * + * For two bone IK: if the parent bone has local nonuniform scale, the child bone's local Y translation is set to 0. */ + mix = 0; + /** For two bone IK, the target bone's distance from the maximum reach of the bones where rotation begins to slow. The bones + * will not straighten completely until the target is this far out of range. */ + softness = 0; + set(pose) { + this.mix = pose.mix; + this.softness = pose.softness; + this.bendDirection = pose.bendDirection; + this.compress = pose.compress; + this.stretch = pose.stretch; + } + }; + + // spine-core/src/IkConstraint.ts + var IkConstraint = class _IkConstraint extends Constraint { + /** The 1 or 2 bones that will be modified by this IK constraint. */ + bones; + /** The bone that is the IK target. */ + target; + constructor(data, skeleton) { + super(data, new IkConstraintPose(), new IkConstraintPose()); + if (!skeleton) throw new Error("skeleton cannot be null."); + this.bones = []; + for (const boneData of data.bones) + this.bones.push(skeleton.bones[boneData.index].constrainedPose); + this.target = skeleton.bones[data.target.index]; + } + copy(skeleton) { + var copy = new _IkConstraint(this.data, skeleton); + copy.pose.set(this.pose); + return copy; + } + update(skeleton, physics) { + const p = this.appliedPose; + if (p.mix === 0) return; + const target = this.target.appliedPose; + const bones = this.bones; + switch (bones.length) { + case 1: + _IkConstraint.apply(skeleton, bones[0], target.worldX, target.worldY, p.compress, p.stretch, this.data.scaleYMode, p.mix); + break; + case 2: + _IkConstraint.apply( + skeleton, + bones[0], + bones[1], + target.worldX, + target.worldY, + p.bendDirection, + p.stretch, + this.data.scaleYMode, + p.softness, + p.mix + ); + break; + } + } + sort(skeleton) { + skeleton.sortBone(this.target); + const parent = this.bones[0].bone; + skeleton.sortBone(parent); + skeleton._updateCache.push(this); + parent.sorted = false; + skeleton.sortReset(parent.children); + skeleton.constrained(parent); + if (this.bones.length > 1) skeleton.constrained(this.bones[1].bone); + } + isSourceActive() { + return this.target.active; + } + static apply(skeleton, boneOrParent, targetXorChild, targetYOrTargetX, compressOrTargetY, stretchOrBendDir, scaleYModeOrStretch, mixOrScaleYMode, softness, mix) { + if (typeof targetXorChild === "number") + _IkConstraint.apply1(skeleton, boneOrParent, targetXorChild, targetYOrTargetX, compressOrTargetY, stretchOrBendDir, scaleYModeOrStretch, mixOrScaleYMode); + else + _IkConstraint.apply2( + skeleton, + boneOrParent, + targetXorChild, + targetYOrTargetX, + compressOrTargetY, + stretchOrBendDir, + scaleYModeOrStretch, + mixOrScaleYMode, + softness, + mix + ); + } + static apply1(skeleton, bone, targetX, targetY, compress, stretch, scaleYMode, mix) { + bone.modifyLocal(skeleton); + const p = bone.bone.parent.appliedPose; + let pa = p.a, pb = p.b, pc = p.c, pd = p.d; + let rotationIK = -bone.shearX - bone.rotation, tx = 0, ty = 0; + switch (bone.inherit) { + case 1 /* OnlyTranslation */: + tx = (targetX - bone.worldX) * MathUtils.signum(skeleton.scaleX); + ty = (targetY - bone.worldY) * MathUtils.signum(skeleton.scaleY); + break; + // biome-ignore lint/suspicious/noFallthroughSwitchClause: reference runtime + case 2 /* NoRotationOrReflection */: { + const s = Math.abs(pa * pd - pb * pc) / Math.max(MathUtils.epsilon, pa * pa + pc * pc); + const sa = pa / skeleton.scaleX; + const sc = pc / skeleton.scaleY; + pb = -sc * s * skeleton.scaleX; + pd = sa * s * skeleton.scaleY; + rotationIK += MathUtils.atan2Deg(sc, sa); + } + // Fall through + default: { + const x = targetX - p.worldX, y = targetY - p.worldY; + const d = pa * pd - pb * pc; + if (Math.abs(d) <= MathUtils.epsilon) { + tx = 0; + ty = 0; + } else { + tx = (x * pd - y * pb) / d - bone.x; + ty = (y * pa - x * pc) / d - bone.y; + } + } + } + rotationIK += MathUtils.atan2Deg(ty, tx); + if (bone.scaleX < 0) rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK <= -180) + rotationIK += 360; + bone.rotation += rotationIK * mix; + if (compress || stretch) { + switch (bone.inherit) { + case 3 /* NoScale */: + case 4 /* NoScaleOrReflection */: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + } + const b = bone.bone.data.length * bone.scaleX; + if (b > MathUtils.epsilon) { + const dd = tx * tx + ty * ty; + if (compress && dd < b * b || stretch && dd > b * b) { + const s = (Math.sqrt(dd) / b - 1) * mix + 1; + bone.scaleX *= s; + switch (scaleYMode) { + case 1 /* Uniform */: + bone.scaleY *= s; + break; + case 2 /* Volume */: + bone.scaleY /= s < 0.7 ? 0.25 + 0.642857 * s : s; + } + } + } + } + } + /** Applies 2 bone IK. The target is specified in the world coordinate system. + * @param child A direct descendant of the parent bone. */ + static apply2(skeleton, parent, child, targetX, targetY, bendDir, stretch, scaleYMode, softness, mix) { + if (parent.inherit !== 0 /* Normal */ || child.inherit !== 0 /* Normal */) return; + parent.modifyLocal(skeleton); + child.modifyLocal(skeleton); + let px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY, csx = child.scaleX; + let os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } else + os2 = 0; + let cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + const u = Math.abs(psx - psy) <= MathUtils.epsilon; + if (!u || stretch) { + child.y = 0; + cwx = a * child.x + parent.worldX; + cwy = c * child.x + parent.worldY; + } else { + cwx = a * child.x + b * child.y + parent.worldX; + cwy = c * child.x + d * child.y + parent.worldY; + } + const pp = parent.bone.parent.appliedPose; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + let id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY; + id = Math.abs(id) <= MathUtils.epsilon ? 0 : 1 / id; + const dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + let l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.bone.data.length * csx, a1, a2; + if (l1 < MathUtils.epsilon) { + _IkConstraint.apply(skeleton, parent, targetX, targetY, false, stretch, 0 /* None */, mix); + child.rotation = 0; + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + let tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + let dd = tx * tx + ty * ty; + if (softness !== 0) { + softness *= psx * (csx + 1) * 0.5; + const td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + let p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: + if (u) { + l2 *= psx; + let cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) { + cos = -1; + a2 = Math.PI * bendDir; + } else if (cos > 1) { + cos = 1; + a2 = 0; + if (stretch) { + a = (Math.sqrt(dd) / (l1 + l2) - 1) * mix + 1; + parent.scaleX *= a; + switch (scaleYMode) { + case 1 /* Uniform */: + parent.scaleY *= a; + break; + case 2 /* Volume */: + parent.scaleY /= a < 0.7 ? 0.25 + 0.642857 * a : a; + } + } + } else + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } else { + a = psx * l2; + b = psy * l2; + const aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + const c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + let q = Math.sqrt(d); + if (c1 < 0) q = -q; + q = -(c1 + q) * 0.5; + let r0 = q / c2, r1 = c / q; + const r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + r0 = dd - r * r; + if (r0 >= 0) { + y = Math.sqrt(r0) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; + } + } + let minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + let maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; + } + } + if (dd <= (minDist + maxDist) * 0.5) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + const os = Math.atan2(child.y, child.x) * s2; + a1 = (a1 - os) * MathUtils.radDeg + os1 - parent.rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 <= -180) + a1 += 360; + parent.rotation += a1 * mix; + a2 = ((a2 + os) * MathUtils.radDeg - child.shearX) * s2 + os2 - child.rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 <= -180) + a2 += 360; + child.rotation += a2 * mix; + } + }; + + // spine-core/src/IkConstraintData.ts + var IkConstraintData = class extends ConstraintData { + /** The bones that are constrained by this IK constraint. */ + bones = []; + _target = null; + /** The bone that is the IK target. */ + set target(boneData) { + this._target = boneData; + } + get target() { + if (!this._target) throw new Error("target cannot be null."); + return this._target; + } + /** Determines how the {@link BonePose.scaleY} changes when {@link IkConstraintPose.compress} or + * {@link IkConstraintPose.stretch} set {@link BonePose.scaleX}. */ + _scaleYMode = 0 /* None */; + set scaleYMode(scaleYMode) { + this._scaleYMode = scaleYMode; + } + get scaleYMode() { + if (this._scaleYMode == null) throw new Error("scaleYMode cannot be null."); + return this._scaleYMode; + } + constructor(name) { + super(name, new IkConstraintPose()); + } + create(skeleton) { + return new IkConstraint(this, skeleton); + } + }; + + // spine-core/src/PathConstraintPose.ts + var PathConstraintPose = class { + /** The position along the path. */ + position = 0; + /** The spacing between bones. */ + spacing = 0; + /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotation. */ + mixRotate = 0; + /** A percentage (0-1) that controls the mix between the constrained and unconstrained translation X. */ + mixX = 0; + /** A percentage (0-1) that controls the mix between the constrained and unconstrained translation Y. */ + mixY = 0; + set(pose) { + this.position = pose.position; + this.spacing = pose.spacing; + this.mixRotate = pose.mixRotate; + this.mixX = pose.mixX; + this.mixY = pose.mixY; + } + }; + + // spine-core/src/PathConstraintData.ts + var PathConstraintData = class extends ConstraintData { + /** The bones that will be modified by this path constraint. */ + bones = []; + /** The slot whose path attachment will be used to constrained the bones. */ + set slot(slotData) { + this._slot = slotData; + } + get slot() { + if (!this._slot) throw new Error("SlotData not set."); + else return this._slot; + } + _slot = null; + /** The mode for positioning the first bone on the path. */ + positionMode = 0 /* Fixed */; + /** The mode for positioning the bones after the first bone on the path. */ + spacingMode = 1 /* Fixed */; + /** The mode for adjusting the rotation of the bones. */ + rotateMode = 1 /* Chain */; + /** An offset added to the constrained bone rotation. */ + offsetRotation = 0; + constructor(name) { + super(name, new PathConstraintPose()); + } + create(skeleton) { + return new PathConstraint(this, skeleton); + } + }; + var PositionMode = /* @__PURE__ */ ((PositionMode2) => { + PositionMode2[PositionMode2["Fixed"] = 0] = "Fixed"; + PositionMode2[PositionMode2["Percent"] = 1] = "Percent"; + return PositionMode2; + })(PositionMode || {}); + var SpacingMode = /* @__PURE__ */ ((SpacingMode2) => { + SpacingMode2[SpacingMode2["Length"] = 0] = "Length"; + SpacingMode2[SpacingMode2["Fixed"] = 1] = "Fixed"; + SpacingMode2[SpacingMode2["Percent"] = 2] = "Percent"; + SpacingMode2[SpacingMode2["Proportional"] = 3] = "Proportional"; + return SpacingMode2; + })(SpacingMode || {}); + var RotateMode = /* @__PURE__ */ ((RotateMode2) => { + RotateMode2[RotateMode2["Tangent"] = 0] = "Tangent"; + RotateMode2[RotateMode2["Chain"] = 1] = "Chain"; + RotateMode2[RotateMode2["ChainScale"] = 2] = "ChainScale"; + return RotateMode2; + })(RotateMode || {}); + + // spine-core/src/PathConstraint.ts + var PathConstraint = class _PathConstraint extends Constraint { + static NONE = -1; + static BEFORE = -2; + static AFTER = -3; + /** The path constraint's setup pose data. */ + data; + /** The bones that will be modified by this path constraint. */ + bones; + /** The slot whose path attachment will be used to constrained the bones. */ + slot; + spaces = []; + positions = []; + world = []; + curves = []; + lengths = []; + segments = []; + constructor(data, skeleton) { + super(data, new PathConstraintPose(), new PathConstraintPose()); + if (!skeleton) throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = []; + for (const boneData of this.data.bones) + this.bones.push(skeleton.bones[boneData.index].constrainedPose); + this.slot = skeleton.slots[data.slot.index]; + } + copy(skeleton) { + var copy = new _PathConstraint(this.data, skeleton); + copy.pose.set(this.pose); + return copy; + } + update(skeleton, physics) { + const attachment = this.slot.appliedPose.attachment; + if (!(attachment instanceof PathAttachment)) return; + const p = this.appliedPose; + const mixRotate = p.mixRotate, mixX = p.mixX, mixY = p.mixY; + if (mixRotate === 0 && mixX === 0 && mixY === 0) return; + const data = this.data; + const tangents = data.rotateMode === 0 /* Tangent */, scale = data.rotateMode === 2 /* ChainScale */; + const bones = this.bones; + const boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + const spaces = Utils.setArraySize(this.spaces, spacesCount), lengths = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : []; + const spacing = p.spacing; + switch (data.spacingMode) { + case 2 /* Percent */: + if (scale) { + for (let i = 0, n = spacesCount - 1; i < n; i++) { + const bone = bones[i]; + const setupLength = bone.bone.data.length; + const x = setupLength * bone.a, y = setupLength * bone.c; + lengths[i] = Math.sqrt(x * x + y * y); + } + } + Utils.arrayFill(spaces, 1, spacesCount, spacing); + break; + case 3 /* Proportional */: { + let sum = 0; + for (let i = 0, n = spacesCount - 1; i < n; ) { + const bone = bones[i]; + const setupLength = bone.bone.data.length; + if (setupLength < MathUtils.epsilon) { + if (scale) lengths[i] = 0; + spaces[++i] = spacing; + } else { + const x = setupLength * bone.a, y = setupLength * bone.c; + const length = Math.sqrt(x * x + y * y); + if (scale) lengths[i] = length; + spaces[++i] = length; + sum += length; + } + } + if (sum > 0) { + sum = spacesCount / sum * spacing; + for (let i = 1; i < spacesCount; i++) + spaces[i] *= sum; + } + break; + } + default: { + const lengthSpacing = data.spacingMode === 0 /* Length */; + for (let i = 0, n = spacesCount - 1; i < n; ) { + const bone = bones[i]; + const setupLength = bone.bone.data.length; + if (setupLength < MathUtils.epsilon) { + if (scale) lengths[i] = 0; + spaces[++i] = spacing; + } else { + const x = setupLength * bone.a, y = setupLength * bone.c; + const length = Math.sqrt(x * x + y * y); + if (scale) lengths[i] = length; + spaces[++i] = (lengthSpacing ? Math.max(0, setupLength + spacing) : spacing) * length / setupLength; + } + } + } + } + const positions = this.computeWorldPositions(skeleton, attachment, spacesCount, tangents); + let boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + let tip = false; + if (offsetRotation === 0) + tip = data.rotateMode === 1 /* Chain */; + else { + tip = false; + const bone = this.slot.bone.appliedPose; + offsetRotation *= bone.a * bone.d - bone.b * bone.c > 0 ? MathUtils.degRad : -MathUtils.degRad; + } + for (let i = 0, ip = 3, u = skeleton._update; i < boneCount; i++, ip += 3) { + const bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * mixX; + bone.worldY += (boneY - bone.worldY) * mixY; + const x = positions[ip], y = positions[ip + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + const length = lengths[i]; + if (length !== 0) { + const s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * mixRotate + 1; + bone.a *= s; + bone.c *= s; + } + } + boneX = x; + boneY = y; + if (mixRotate > 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[ip - 1]; + else if (spaces[i + 1] === 0) + r = positions[ip + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + const length = bone.bone.data.length; + boneX += (length * (cos * a - sin * c) - dx) * mixRotate; + boneY += (length * (sin * a + cos * c) - dy) * mixRotate; + } else { + r += offsetRotation; + } + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= mixRotate; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.modifyWorld(u); + } + } + computeWorldPositions(skeleton, path, spacesCount, tangents) { + const slot = this.slot; + let position = this.appliedPose.position; + let spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = this.world; + const closed = path.closed; + let verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = _PathConstraint.NONE; + if (!path.constantSpeed) { + const lengths = path.lengths; + curveCount -= closed ? 1 : 2; + const pathLength2 = lengths[curveCount]; + if (this.data.positionMode === 1 /* Percent */) position *= pathLength2; + let multiplier2; + switch (this.data.spacingMode) { + case 2 /* Percent */: + multiplier2 = pathLength2; + break; + case 3 /* Proportional */: + multiplier2 = pathLength2 / spacesCount; + break; + default: + multiplier2 = 1; + } + world = Utils.setArraySize(this.world, 8); + for (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + const space = spaces[i] * multiplier2; + position += space; + let p = position; + if (closed) { + p %= pathLength2; + if (p < 0) p += pathLength2; + curve = 0; + } else if (p < 0) { + if (prevCurve !== _PathConstraint.BEFORE) { + prevCurve = _PathConstraint.BEFORE; + path.computeWorldVertices(skeleton, slot, 2, 4, world, 0, 2); + } + this.addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength2) { + if (prevCurve !== _PathConstraint.AFTER) { + prevCurve = _PathConstraint.AFTER; + path.computeWorldVertices(skeleton, slot, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength2, world, 0, out, o); + continue; + } + for (; ; curve++) { + const length = lengths[curve]; + if (p > length) continue; + if (curve === 0) + p /= length; + else { + const prev = lengths[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve !== prevCurve) { + prevCurve = curve; + if (closed && curve === curveCount) { + path.computeWorldVertices(skeleton, slot, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(skeleton, slot, 0, 4, world, 4, 2); + } else + path.computeWorldVertices(skeleton, slot, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition( + p, + world[0], + world[1], + world[2], + world[3], + world[4], + world[5], + world[6], + world[7], + out, + o, + tangents || i > 0 && space === 0 + ); + } + return out; + } + if (closed) { + verticesLength += 2; + world = Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(skeleton, slot, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(skeleton, slot, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + world = Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(skeleton, slot, 2, verticesLength, world, 0, 2); + } + const curves = Utils.setArraySize(this.curves, curveCount); + let pathLength = 0; + let x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + let tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (let i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (this.data.positionMode === 1 /* Percent */) position *= pathLength; + let multiplier; + switch (this.data.spacingMode) { + case 2 /* Percent */: + multiplier = pathLength; + break; + case 3 /* Proportional */: + multiplier = pathLength / spacesCount; + break; + default: + multiplier = 1; + } + const segments = this.segments; + let curveLength = 0; + for (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + const space = spaces[i] * multiplier; + position += space; + let p = position; + if (closed) { + p %= pathLength; + if (p < 0) p += pathLength; + curve = 0; + segment = 0; + } else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (; ; curve++) { + const length = curves[curve]; + if (p > length) continue; + if (curve === 0) + p /= length; + else { + const prev = curves[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve !== prevCurve) { + prevCurve = curve; + let ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 6e-3; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 6e-3; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (; ; segment++) { + const length = segments[segment]; + if (p > length) continue; + if (segment === 0) + p /= length; + else { + const prev = segments[segment - 1]; + p = segment + (p - prev) / (length - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || i > 0 && space === 0); + } + return out; + } + addBeforePosition(p, temp, i, out, o) { + const x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + addAfterPosition(p, temp, i, out, o) { + const x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + addCurvePosition(p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p === 0 || Number.isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + const tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + const ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + const x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 1e-3) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + } + sort(skeleton) { + const slotIndex = this.slot.data.index; + const slotBone = this.slot.bone; + if (skeleton.skin != null) this.sortPathSlot(skeleton, skeleton.skin, slotIndex, slotBone); + if (skeleton.data.defaultSkin != null && skeleton.data.defaultSkin !== skeleton.skin) + this.sortPathSlot(skeleton, skeleton.data.defaultSkin, slotIndex, slotBone); + this.sortPath(skeleton, this.slot.pose.attachment, slotBone); + const bones = this.bones; + const boneCount = this.bones.length; + for (let i = 0; i < boneCount; i++) { + const bone = bones[i].bone; + skeleton.sortBone(bone); + skeleton.constrained(bone); + } + skeleton._updateCache.push(this); + for (let i = 0; i < boneCount; i++) + skeleton.sortReset(bones[i].bone.children); + for (let i = 0; i < boneCount; i++) + bones[i].bone.sorted = true; + } + sortPathSlot(skeleton, skin, slotIndex, slotBone) { + const entries = skin.getAttachments(); + for (let i = 0, n = entries.length; i < n; i++) { + const entry = entries[i]; + if (entry.slotIndex === slotIndex) this.sortPath(skeleton, entry.attachment, slotBone); + } + } + sortPath(skeleton, attachment, slotBone) { + if (!(attachment instanceof PathAttachment)) return; + const pathBones = attachment.bones; + if (pathBones == null) + skeleton.sortBone(slotBone); + else { + const bones = skeleton.bones; + for (let i = 0, n = pathBones.length; i < n; ) { + let nn = pathBones[i++]; + nn += i; + while (i < nn) + skeleton.sortBone(bones[pathBones[i++]]); + } + } + } + isSourceActive() { + return this.slot.bone.active; + } + }; + + // spine-core/src/Physics.ts + var Physics = /* @__PURE__ */ ((Physics2) => { + Physics2[Physics2["none"] = 0] = "none"; + Physics2[Physics2["reset"] = 1] = "reset"; + Physics2[Physics2["update"] = 2] = "update"; + Physics2[Physics2["pose"] = 3] = "pose"; + return Physics2; + })(Physics || {}); + + // spine-core/src/PhysicsConstraintPose.ts + var PhysicsConstraintPose = class { + /** Controls how much bone movement is converted into physics movement. */ + inertia = 0; + /** The amount of force used to return properties to the unconstrained value. */ + strength = 0; + /** Reduces the speed of physics movements, with more of a reduction at higher speeds. */ + damping = 0; + /** Determines susceptibility to acceleration. */ + massInverse = 0; + /** Applies a constant force along the {@link Skeleton.windX}, {@link Skeleton.windY} vector. */ + wind = 0; + /** Applies a constant force along the {@link Skeleton.gravityX}, {@link Skeleton.gravityY} vector. */ + gravity = 0; + /** A percentage (0+) that controls the mix between the constrained and unconstrained poses. */ + mix = 0; + set(pose) { + this.inertia = pose.inertia; + this.strength = pose.strength; + this.damping = pose.damping; + this.massInverse = pose.massInverse; + this.wind = pose.wind; + this.gravity = pose.gravity; + this.mix = pose.mix; + } + }; + + // spine-core/src/SlotPose.ts + var SlotPose = class { + /** The color used to tint the slot's attachment. If {@link darkColor} is set, this is used as the light color for two color + * tinting. */ + color = new Color(1, 1, 1, 1); + /** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark + * color's alpha is not used. */ + darkColor = null; + /** The current attachment for the slot, or null if the slot has no attachment. */ + attachment = null; + // Not used in setup pose. + /** The index of the texture region to display when the slot's attachment has a {@link Sequence}. -1 represents the + * {@link Sequence.getSetupIndex}. */ + sequenceIndex = 0; + /** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a + * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions. + * + * See {@link VertexAttachment.computeWorldVertices} and + * {@link DeformTimeline}. */ + deform = []; + SlotPose() { + } + set(pose) { + if (pose == null) throw new Error("pose cannot be null."); + this.color.setFromColor(pose.color); + if (this.darkColor != null && pose.darkColor != null) this.darkColor.setFromColor(pose.darkColor); + this.attachment = pose.attachment; + this.sequenceIndex = pose.sequenceIndex; + this.deform.length = 0; + this.deform.push(...pose.deform); + } + /** The current attachment for the slot, or null if the slot has no attachment. */ + getAttachment() { + return this.attachment; + } + /** Sets the slot's attachment and, if the attachment changed, resets {@link sequenceIndex} and clears the {@link deform}. + * The deform is not cleared if the old attachment has the same {@link VertexAttachment.getTimelineAttachment} as the + * specified attachment. */ + setAttachment(attachment) { + if (this.attachment === attachment) return; + if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment) || attachment.timelineAttachment !== this.attachment.timelineAttachment) { + this.deform.length = 0; + } + this.attachment = attachment; + this.sequenceIndex = -1; + } + }; + + // spine-core/src/Slot.ts + var Slot = class _Slot extends Posed { + skeleton; + /** The bone this slot belongs to. */ + bone; + attachmentState = 0; + constructor(data, skeleton) { + super(data, new SlotPose(), new SlotPose()); + if (!skeleton) throw new Error("skeleton cannot be null."); + this.skeleton = skeleton; + this.bone = skeleton.bones[data.boneData.index]; + if (data.setupPose.darkColor != null) { + this.pose.darkColor = new Color(); + this.constrainedPose.darkColor = new Color(); + } + this.setupPose(); + } + /** Copy constructor. */ + copy(slot, bone, skeleton) { + const copy = new _Slot(slot.data, this.skeleton); + if (this.data.setupPose.darkColor != null) { + copy.pose.darkColor = new Color(); + copy.constrainedPose.darkColor = new Color(); + } + copy.pose.set(slot.pose); + return copy; + } + setupPose() { + this.pose.color.setFromColor(this.data.setupPose.color); + if (this.pose.darkColor) this.pose.darkColor.setFromColor(this.data.setupPose.darkColor); + this.pose.sequenceIndex = this.data.setupPose.sequenceIndex; + if (!this.data.attachmentName) + this.pose.setAttachment(null); + else { + this.pose.attachment = null; + this.pose.setAttachment(this.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + } + }; + + // spine-core/src/Skeleton.ts + var Skeleton = class _Skeleton { + static quadTriangles = [0, 1, 2, 2, 3, 0]; + static yDown = false; + static get yDir() { + return _Skeleton.yDown ? -1 : 1; + } + /** The skeleton's setup pose data. */ + data; + /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */ + bones; + /** The skeleton's slots. To add a slot, also add it to {@link DrawOrder.pose}. */ + slots; + /** The skeleton's draw order. Use {@link DrawOrder.appliedPose} for rendering and {@link DrawOrder.pose} for changing the draw + * order. */ + drawOrder; + /** The skeleton's constraints. */ + // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types + constraints; + /** The skeleton's physics constraints. */ + physics; + /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link updateCache}. */ + // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types + _updateCache = []; + // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types + resetCache = []; + /** The skeleton's current skin. May be null. */ + skin = null; + /** The color to tint all the skeleton's attachments. */ + color; + /** Scales the entire skeleton on the X axis. + * + * Bones that do not inherit scale are still affected by this property. */ + scaleX = 1; + _scaleY = 1; + /** Scales the entire skeleton on the Y axis. + * + * Bones that do not inherit scale are still affected by this property. */ + get scaleY() { + return this._scaleY * _Skeleton.yDir; + } + set scaleY(scaleY) { + this._scaleY = scaleY; + } + /** Sets the skeleton X position, which is added to the root bone worldX position. + * + * Bones that do not inherit translation are still affected by this property. */ + x = 0; + /** Sets the skeleton Y position, which is added to the root bone worldY position. + * + * Bones that do not inherit translation are still affected by this property. */ + y = 0; + /** Returns the skeleton's time, is used for time-based manipulations, such as {@link PhysicsConstraint}. + * + * See {@link _update}. */ + time = 0; + /** The x component of a vector that defines the direction {@link PhysicsConstraintPose.wind} is applied. */ + windX = 1; + /** The y component of a vector that defines the direction {@link PhysicsConstraintPose.wind} is applied. */ + windY = 0; + /** The x component of a vector that defines the direction {@link PhysicsConstraintPose.gravity} is applied. */ + gravityX = 0; + /** The y component of a vector that defines the direction {@link PhysicsConstraintPose.gravity} is applied. */ + gravityY = 1; + _update = 0; + constructor(data) { + if (!data) throw new Error("data cannot be null."); + this.data = data; + this.bones = []; + for (let i = 0; i < data.bones.length; i++) { + const boneData = data.bones[i]; + let bone; + if (!boneData.parent) + bone = new Bone(boneData, null); + else { + const parent = this.bones[boneData.parent.index]; + bone = new Bone(boneData, parent); + parent.children.push(bone); + } + this.bones.push(bone); + } + this.slots = []; + for (const slotData of this.data.slots) + this.slots.push(new Slot(slotData, this)); + this.drawOrder = new DrawOrder(this.slots); + this.physics = []; + this.constraints = []; + for (const constraintData of this.data.constraints) { + const constraint = constraintData.create(this); + if (constraint instanceof PhysicsConstraint) this.physics.push(constraint); + this.constraints.push(constraint); + } + this.color = new Color(1, 1, 1, 1); + this.updateCache(); + } + /** Caches information about bones and constraints. Must be called if the {@link skin} is modified or if bones, constraints, + * or weighted path attachments are added or removed. */ + updateCache() { + this._updateCache.length = 0; + this.resetCache.length = 0; + this.drawOrder.unconstrained(); + const slots = this.slots; + for (let i = 0, n2 = slots.length; i < n2; i++) + slots[i].unconstrained(); + const bones = this.bones; + const boneCount = bones.length; + for (let i = 0, n2 = boneCount; i < n2; i++) { + const bone = bones[i]; + bone.sorted = bone.data.skinRequired; + bone.active = !bone.sorted; + bone.unconstrained(); + } + if (this.skin) { + const skinBones = this.skin.bones; + for (let i = 0, n2 = this.skin.bones.length; i < n2; i++) { + let bone = this.bones[skinBones[i].index]; + do { + bone.sorted = false; + bone.active = true; + bone = bone.parent; + } while (bone); + } + } + const constraints = this.constraints; + let n = this.constraints.length; + for (let i = 0; i < n; i++) + constraints[i].unconstrained(); + for (let i = 0; i < n; i++) { + const constraint = constraints[i]; + constraint.active = constraint.isSourceActive() && (!constraint.data.skinRequired || this.skin != null && this.skin.constraints.includes(constraint.data)); + if (constraint.active) constraint.sort(this); + } + for (let i = 0; i < boneCount; i++) + this.sortBone(bones[i]); + n = this._updateCache.length; + for (let i = 0; i < n; i++) { + const updateable = this._updateCache[i]; + if (updateable instanceof Bone) this._updateCache[i] = updateable.appliedPose; + } + } + // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types + constrained(object) { + if (object.pose === object.appliedPose) { + object.constrained(); + this.resetCache.push(object); + } + } + sortBone(bone) { + if (bone.sorted || !bone.active) return; + const parent = bone.parent; + if (parent) this.sortBone(parent); + bone.sorted = true; + this._updateCache.push(bone); + } + sortReset(bones) { + for (let i = 0, n = bones.length; i < n; i++) { + const bone = bones[i]; + if (bone.active) { + if (bone.sorted) this.sortReset(bone.children); + bone.sorted = false; + } + } + } + /** Updates the world transform for each bone and applies all constraints. + * + * See World transforms in the Spine + * Runtimes Guide. */ + updateWorldTransform(physics) { + this._update++; + if (this.drawOrder.appliedPose === this.drawOrder.constrainedPose) this.drawOrder.resetConstrained(); + const resetCache = this.resetCache; + for (let i = 0, n = this.resetCache.length; i < n; i++) + resetCache[i].resetConstrained(); + const updateCache = this._updateCache; + for (let i = 0, n = this._updateCache.length; i < n; i++) + updateCache[i].update(this, physics); + } + /** Sets the bones, constraints, and slots to their setup pose values. */ + setupPose() { + this.setupPoseBones(); + this.setupPoseSlots(); + } + /** Sets the bones and constraints to their setup pose values. */ + setupPoseBones() { + const bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) + bones[i].setupPose(); + const constraints = this.constraints; + for (let i = 0, n = constraints.length; i < n; i++) + constraints[i].setupPose(); + } + /** Sets the slots and draw order to their setup pose values. */ + setupPoseSlots() { + this.drawOrder.setupPose(); + const slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) + slots[i].setupPose(); + } + /** Returns the root bone, or null if the skeleton has no bones. */ + getRootBone() { + if (this.bones.length === 0) return null; + return this.bones[0]; + } + /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it + * repeatedly. */ + findBone(boneName) { + if (!boneName) throw new Error("boneName cannot be null."); + const bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name === boneName) return bones[i]; + return null; + } + /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it + * repeatedly. */ + findSlot(slotName) { + if (!slotName) throw new Error("slotName cannot be null."); + const slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name === slotName) return slots[i]; + return null; + } + setSkin(newSkin) { + if (typeof newSkin === "string") + this.setSkinByName(newSkin); + else + this.setSkinBySkin(newSkin); + } + setSkinByName(skinName) { + const skin = this.data.findSkin(skinName); + if (!skin) throw new Error(`Skin not found: ${skinName}`); + this.setSkin(skin); + } + setSkinBySkin(newSkin) { + if (newSkin === this.skin) return; + if (newSkin) { + if (this.skin) + newSkin.attachAll(this, this.skin); + else { + const slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) { + const slot = slots[i]; + const name = slot.data.attachmentName; + if (name) { + const attachment = newSkin.getAttachment(i, name); + if (attachment) slot.pose.setAttachment(attachment); + } + } + } + } + this.skin = newSkin; + this.updateCache(); + } + getAttachment(slotNameOrIndex, placeholder) { + if (typeof slotNameOrIndex === "string") + return this.getAttachmentByName(slotNameOrIndex, placeholder); + return this.getAttachmentByIndex(slotNameOrIndex, placeholder); + } + /** Finds an attachment by looking in the {@link skin} and {@link SkeletonData.defaultSkin} using the slot name and attachment + * name. + * + * See {@link getAttachment}. + * @returns May be null. */ + getAttachmentByName(slotName, placeholder) { + const slot = this.data.findSlot(slotName); + if (!slot) throw new Error(`Can't find slot with name ${slotName}`); + return this.getAttachment(slot.index, placeholder); + } + /** Finds an attachment by looking in the {@link skin} and {@link SkeletonData.defaultSkin} using the slot index and + * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked. + * + * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. + * @returns May be null. */ + getAttachmentByIndex(slotIndex, placeholder) { + if (!placeholder) throw new Error("placeholder cannot be null."); + if (this.skin) { + const attachment = this.skin.getAttachment(slotIndex, placeholder); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, placeholder); + return null; + } + /** A convenience method to set an attachment by finding the slot with {@link findSlot}, finding the attachment with + * {@link getAttachment}, then setting the slot's {@link Slot.attachment}. + * @param placeholder May be null to clear the slot's attachment. */ + setAttachment(slotName, placeholder) { + if (!slotName) throw new Error("slotName cannot be null."); + const slot = this.findSlot(slotName); + if (!slot) throw new Error(`Slot not found: ${slotName}`); + let attachment = null; + if (placeholder) { + attachment = this.getAttachment(slot.data.index, placeholder); + if (!attachment) + throw new Error(`Attachment not found: ${placeholder}, for slot: ${slotName}`); + } + slot.pose.setAttachment(attachment); + } + /** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of + * this method than to call it multiple times. */ + // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types + findConstraint(constraintName, type) { + if (constraintName == null) throw new Error("constraintName cannot be null."); + if (type == null) throw new Error("type cannot be null."); + const constraints = this.constraints; + for (let i = 0, n = constraints.length; i < n; i++) { + const constraint = constraints[i]; + if (constraint instanceof type && constraint.data.name === constraintName) return constraint; + } + return null; + } + /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the applied pose. + * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB. + * @param size An output value, the width and height of the AABB. + * @param temp Working memory to temporarily store attachments' computed world vertices. */ + getBoundsRect(clipper) { + const offset = new Vector2(); + const size = new Vector2(); + this.getBounds(offset, size, void 0, clipper); + return { x: offset.x, y: offset.y, width: size.x, height: size.y }; + } + /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the applied pose. Optionally applies + * clipping. + * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB. + * @param size An output value, the width and height of the AABB. + * @param temp Working memory to temporarily store attachments' computed world vertices. + * @param clipper {@link SkeletonClipping} to use. If `null`, no clipping is applied. */ + getBounds(offset, size, temp = new Array(2), clipper = null) { + if (!offset) throw new Error("offset cannot be null."); + if (!size) throw new Error("size cannot be null."); + const drawOrder = this.drawOrder.appliedPose; + const slots = drawOrder; + let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + for (let i = 0, n = drawOrder.length; i < n; i++) { + const slot = slots[i]; + if (!slot.bone.active) continue; + let verticesLength = 0; + let vertices = null; + let triangles = null; + const attachment = slot.appliedPose.attachment; + if (attachment) { + if (attachment instanceof RegionAttachment) { + verticesLength = 8; + vertices = Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(slot, attachment.getOffsets(slot.appliedPose), vertices, 0, 2); + triangles = _Skeleton.quadTriangles; + } else if (attachment instanceof MeshAttachment) { + verticesLength = attachment.worldVerticesLength; + vertices = Utils.setArraySize(temp, verticesLength, 0); + attachment.computeWorldVertices(this, slot, 0, verticesLength, vertices, 0, 2); + triangles = attachment.triangles; + } else if (attachment instanceof ClippingAttachment && clipper) { + clipper.clipEnd(slot); + clipper.clipStart(this, slot, attachment); + continue; + } + if (vertices && triangles) { + if (clipper?.isClipping() && clipper.clipTriangles(vertices, triangles, triangles.length)) { + vertices = clipper.clippedVertices; + verticesLength = clipper.clippedVertices.length; + } + for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) { + const x = vertices[ii], y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + } + if (clipper) clipper.clipEnd(slot); + } + if (clipper) clipper.clipEnd(); + offset.set(minX, minY); + size.set(maxX - minX, maxY - minY); + } + /** Scales the entire skeleton on the X and Y axes. + * + * Bones that do not inherit scale are still affected by this property. */ + setScale(scaleX, scaleY) { + this.scaleX = scaleX; + this.scaleY = scaleY; + } + /** Sets the skeleton X and Y position, which is added to the root bone worldX and worldY position. + * + * Bones that do not inherit translation are still affected by this property. */ + setPosition(x, y) { + this.x = x; + this.y = y; + } + /** Increments the skeleton's {@link time}. */ + update(delta) { + this.time += delta; + } + /** Calls {@link PhysicsConstraint.translate} for each physics constraint. */ + physicsTranslate(x, y) { + const constraints = this.physics; + for (let i = 0, n = constraints.length; i < n; i++) + constraints[i].translate(x, y); + } + /** Calls {@link PhysicsConstraint.rotate} for each physics constraint. */ + physicsRotate(x, y, degrees) { + const constraints = this.physics; + for (let i = 0, n = constraints.length; i < n; i++) + constraints[i].rotate(x, y, degrees); + } + }; + + // spine-core/src/PhysicsConstraint.ts + var PhysicsConstraint = class _PhysicsConstraint extends Constraint { + bone; + _reset = true; + ux = 0; + uy = 0; + cx = 0; + cy = 0; + tx = 0; + ty = 0; + xOffset = 0; + xLag = 0; + xVelocity = 0; + yOffset = 0; + yLag = 0; + yVelocity = 0; + rotateOffset = 0; + rotateLag = 0; + rotateVelocity = 0; + scaleOffset = 0; + scaleLag = 0; + scaleVelocity = 0; + remaining = 0; + lastTime = 0; + constructor(data, skeleton) { + super(data, new PhysicsConstraintPose(), new PhysicsConstraintPose()); + if (skeleton == null) throw new Error("skeleton cannot be null."); + this.bone = skeleton.bones[data.bone.index].constrainedPose; + } + copy(skeleton) { + var copy = new _PhysicsConstraint(this.data, skeleton); + copy.pose.set(this.pose); + return copy; + } + /** Resets all physics state that was the result of previous movement. Use this after moving a bone to prevent physics from + * reacting to the movement. */ + reset(skeleton) { + this.remaining = 0; + this.lastTime = skeleton.time; + this._reset = true; + this.xOffset = 0; + this.xLag = 0; + this.xVelocity = 0; + this.yOffset = 0; + this.yLag = 0; + this.yVelocity = 0; + this.rotateOffset = 0; + this.rotateLag = 0; + this.rotateVelocity = 0; + this.scaleOffset = 0; + this.scaleLag = 0; + this.scaleVelocity = 0; + } + /** Translates the physics constraint so the next {@link update} forces are applied as if the bone moved an + * additional amount in world space. */ + translate(x, y) { + this.ux -= x; + this.uy -= y; + this.cx -= x; + this.cy -= y; + } + /** Rotates the physics constraint so the next {@link update} forces are applied as if the bone rotated + * around the specified point in world space. */ + rotate(x, y, degrees) { + const r = degrees * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r); + const dx = this.cx - x, dy = this.cy - y; + this.translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy); + } + /** Applies the constraint to the constrained bones. */ + update(skeleton, physics) { + const p = this.appliedPose; + const mix = p.mix; + if (mix === 0) return; + const x = this.data.x > 0, y = this.data.y > 0, rotateOrShearX = this.data.rotate > 0 || this.data.shearX > 0, scaleX = this.data.scaleX > 0; + const bone = this.bone; + let l = bone.bone.data.length, t = this.data.step, z = 0; + switch (physics) { + case 0 /* none */: + return; + // biome-ignore lint/suspicious/noFallthroughSwitchClause: fall through expected + case 1 /* reset */: + this.reset(skeleton); + // Fall through. + case 2 /* update */: { + const delta = Math.max(skeleton.time - this.lastTime, 0), aa = this.remaining; + this.remaining += delta; + this.lastTime = skeleton.time; + const bx = bone.worldX, by = bone.worldY; + if (this._reset) { + this._reset = false; + this.ux = bx; + this.uy = by; + } else { + let a = this.remaining, i = p.inertia, f = skeleton.data.referenceScale, d = -1, m = 0, e = 0, qx = this.data.limit * delta, qy = qx * Math.abs(skeleton.scaleY); + qx *= Math.abs(skeleton.scaleX); + if (x || y) { + if (x) { + const u = (this.ux - bx) * i; + this.xOffset += u > qx ? qx : u < -qx ? -qx : u; + this.ux = bx; + } + if (y) { + const u = (this.uy - by) * i; + this.yOffset += u > qy ? qy : u < -qy ? -qy : u; + this.uy = by; + } + if (a >= t) { + const xs = this.xOffset, ys = this.yOffset; + d = p.damping ** (60 * t); + m = t * p.massInverse; + e = p.strength; + const w = f * p.wind, g = f * p.gravity; + const ax = (w * skeleton.windX + g * skeleton.gravityX) * skeleton.scaleX; + const ay = (w * skeleton.windY + g * skeleton.gravityY) * skeleton.scaleY; + do { + if (x) { + this.xVelocity += (ax - this.xOffset * e) * m; + this.xOffset += this.xVelocity * t; + this.xVelocity *= d; + } + if (y) { + this.yVelocity -= (ay + this.yOffset * e) * m; + this.yOffset += this.yVelocity * t; + this.yVelocity *= d; + } + a -= t; + } while (a >= t); + this.xLag = this.xOffset - xs; + this.yLag = this.yOffset - ys; + } + z = Math.max(0, 1 - a / t); + if (x) bone.worldX += (this.xOffset - this.xLag * z) * mix * this.data.x; + if (y) bone.worldY += (this.yOffset - this.yLag * z) * mix * this.data.y; + } + if (rotateOrShearX || scaleX) { + let ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0, dx = this.cx - bone.worldX, dy = this.cy - bone.worldY; + if (dx > qx) + dx = qx; + else if (dx < -qx) + dx = -qx; + if (dy > qy) + dy = qy; + else if (dy < -qy) + dy = -qy; + a = this.remaining; + if (rotateOrShearX) { + mr = (this.data.rotate + this.data.shearX) * mix; + z = this.rotateLag * Math.max(0, 1 - aa / t); + let r = Math.atan2(dy + this.ty, dx + this.tx) - ca - (this.rotateOffset - z) * mr; + this.rotateOffset += (r - Math.ceil(r * MathUtils.invPI2 - 0.5) * MathUtils.PI2) * i; + r = (this.rotateOffset - z) * mr + ca; + c = Math.cos(r); + s = Math.sin(r); + if (scaleX) { + r = l * bone.getWorldScaleX(); + if (r > 0) this.scaleOffset += (dx * c + dy * s) * i / r; + } + } else { + c = Math.cos(ca); + s = Math.sin(ca); + const r = l * bone.getWorldScaleX() - this.scaleLag * Math.max(0, 1 - aa / t); + if (r > 0) this.scaleOffset += (dx * c + dy * s) * i / r; + } + if (a >= t) { + if (d === -1) { + d = p.damping ** (60 * t); + m = t * p.massInverse; + e = p.strength; + } + const ax = p.wind * skeleton.windX + p.gravity * skeleton.gravityX; + const ay = (p.wind * skeleton.windY + p.gravity * skeleton.gravityY) * Skeleton.yDir; + const rs = this.rotateOffset, ss = this.scaleOffset, h = l / f; + while (true) { + a -= t; + if (scaleX) { + this.scaleVelocity += (ax * c - ay * s - this.scaleOffset * e) * m; + this.scaleOffset += this.scaleVelocity * t; + this.scaleVelocity *= d; + } + if (rotateOrShearX) { + this.rotateVelocity -= ((ax * s + ay * c) * h + this.rotateOffset * e) * m; + this.rotateOffset += this.rotateVelocity * t; + this.rotateVelocity *= d; + if (a < t) break; + const r = this.rotateOffset * mr + ca; + c = Math.cos(r); + s = Math.sin(r); + } else if (a < t) + break; + } + this.rotateLag = this.rotateOffset - rs; + this.scaleLag = this.scaleOffset - ss; + } + z = Math.max(0, 1 - a / t); + } + this.remaining = a; + } + this.cx = bone.worldX; + this.cy = bone.worldY; + break; + } + case 3 /* pose */: + z = Math.max(0, 1 - this.remaining / t); + if (x) bone.worldX += (this.xOffset - this.xLag * z) * mix * this.data.x; + if (y) bone.worldY += (this.yOffset - this.yLag * z) * mix * this.data.y; + } + if (rotateOrShearX) { + let o = (this.rotateOffset - this.rotateLag * z) * mix, s = 0, c = 0, a = 0; + if (this.data.shearX > 0) { + let r = 0; + if (this.data.rotate > 0) { + r = o * this.data.rotate; + s = Math.sin(r); + c = Math.cos(r); + a = bone.b; + bone.b = c * a - s * bone.d; + bone.d = s * a + c * bone.d; + } + r += o * this.data.shearX; + s = Math.sin(r); + c = Math.cos(r); + a = bone.a; + bone.a = c * a - s * bone.c; + bone.c = s * a + c * bone.c; + } else { + o *= this.data.rotate; + s = Math.sin(o); + c = Math.cos(o); + a = bone.a; + bone.a = c * a - s * bone.c; + bone.c = s * a + c * bone.c; + a = bone.b; + bone.b = c * a - s * bone.d; + bone.d = s * a + c * bone.d; + } + } + if (scaleX) { + let s = 1 + (this.scaleOffset - this.scaleLag * z) * mix * this.data.scaleX; + bone.a *= s; + bone.c *= s; + switch (this.data.scaleYMode) { + case 1 /* Uniform */: + bone.b *= s; + bone.d *= s; + break; + case 2 /* Volume */: + s = Math.abs(s); + s = s >= 0.7 ? 1 / s : 4 - 3.67347 * s; + bone.b *= s; + bone.d *= s; + } + } + if (physics !== 3 /* pose */) { + this.tx = l * bone.a; + this.ty = l * bone.c; + } + bone.modifyWorld(skeleton._update); + } + sort(skeleton) { + const bone = this.bone.bone; + skeleton.sortBone(bone); + skeleton._updateCache.push(this); + skeleton.sortReset(bone.children); + skeleton.constrained(bone); + } + isSourceActive() { + return this.bone.bone.active; + } + }; + + // spine-core/src/PhysicsConstraintData.ts + var PhysicsConstraintData = class extends ConstraintData { + /** The bone constrained by this physics constraint. */ + set bone(boneData) { + this._bone = boneData; + } + get bone() { + if (!this._bone) throw new Error("BoneData not set."); + else return this._bone; + } + _bone = null; + /** Physics influence on x translation, 0-1. */ + x = 0; + /** Physics influence on y translation, 0-1. */ + y = 0; + /** Physics influence on rotation, 0-1. */ + rotate = 0; + /** Physics influence on scaleX, 0-1. */ + scaleX = 0; + /** Physics influence on shearX, 0-1. */ + shearX = 0; + /** Movement greater than the limit will not have a greater affect on physics. */ + limit = 0; + /** The time in milliseconds required to advanced the physics simulation one step. */ + step = 0; + /** True when this constraint's inertia is controlled by global slider timelines. */ + inertiaGlobal = false; + /** True when this constraint's strength is controlled by global slider timelines. */ + strengthGlobal = false; + /** True when this constraint's damping is controlled by global slider timelines. */ + dampingGlobal = false; + /** True when this constraint's mass is controlled by global slider timelines. */ + massGlobal = false; + /** True when this constraint's wind is controlled by global slider timelines. */ + windGlobal = false; + /** True when this constraint's gravity is controlled by global slider timelines. */ + gravityGlobal = false; + /** True when this constraint's mix is controlled by global slider timelines. */ + mixGlobal = false; + /** Determines how the {@link BonePose.scaleY} changes when {@link PhysicsConstraintData.scaleX} sets + * {@link BonePose.scaleX}. */ + _scaleYMode = 0 /* None */; + get scaleYMode() { + return this._scaleYMode; + } + set scaleYMode(scaleYMode) { + if (scaleYMode == null) throw new Error("scaleYMode cannot be null."); + this._scaleYMode = scaleYMode; + } + constructor(name) { + super(name, new PhysicsConstraintPose()); + } + create(skeleton) { + return new PhysicsConstraint(this, skeleton); + } + }; + + // spine-core/src/polyfills.ts + (() => { + if (typeof Math.fround === "undefined") { + Math.fround = /* @__PURE__ */ ((array) => (x) => { + array[0] = x; + return array[0]; + })(new Float32Array(1)); + } + })(); + + // spine-core/src/SliderPose.ts + var SliderPose = class { + /** The time in the {@link SliderData.animation} to apply the animation. */ + time = 0; + /** A percentage (unbounded) that controls the mix between the constrained and unconstrained poses. */ + mix = 0; + set(pose) { + this.time = pose.time; + this.mix = pose.mix; + } + }; + + // spine-core/src/Slider.ts + var Slider = class _Slider extends Constraint { + static offsets = [0, 0, 0, 0, 0, 0]; + /** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */ + bone = null; + constructor(data, skeleton) { + super(data, new SliderPose(), new SliderPose()); + if (!skeleton) throw new Error("skeleton cannot be null."); + if (data.bone != null) this.bone = skeleton.bones[data.bone.index]; + } + copy(skeleton) { + var copy = new _Slider(this.data, skeleton); + copy.pose.set(this.pose); + return copy; + } + update(skeleton, physics) { + const p = this.appliedPose; + if (p.mix === 0) return; + const data = this.data, animation = data.animation, bone = this.bone; + if (bone !== null) { + if (!bone.active) return; + if (data.local) bone.appliedPose.validateLocalTransform(skeleton); + p.time = data.offset + (data.property.value(skeleton, bone.appliedPose, data.local, _Slider.offsets) - data.property.offset) * data.scale; + if (data.loop) + p.time = animation.duration + p.time % animation.duration; + else + p.time = Math.max(0, p.time); + } + const bones = skeleton.bones; + const indices = animation.bones; + for (let i = 0, n = animation.bones.length; i < n; i++) + bones[indices[i]].appliedPose.modifyLocal(skeleton); + animation.apply(skeleton, p.time, p.time, data.loop, null, p.mix, false, data.additive, false, true); + } + sort(skeleton) { + const bone = this.bone; + const data = this.data; + if (bone && !data.local) skeleton.sortBone(bone); + skeleton._updateCache.push(this); + const bones = skeleton.bones; + const indices = data.animation.bones; + for (let i = 0, n = data.animation.bones.length; i < n; i++) { + const bone2 = bones[indices[i]]; + bone2.sorted = false; + skeleton.sortReset(bone2.children); + skeleton.constrained(bone2); + } + const timelines = data.animation.timelines; + const slots = skeleton.slots; + const constraints = skeleton.constraints; + const physics = skeleton.physics; + const physicsCount = skeleton.physics.length; + for (let i = 0, n = data.animation.timelines.length; i < n; i++) { + const t = timelines[i]; + if (isSlotTimeline(t)) + skeleton.constrained(slots[t.slotIndex]); + else if (t instanceof DrawOrderTimeline || t instanceof DrawOrderFolderTimeline) + skeleton.drawOrder.constrained(); + else if (t instanceof PhysicsConstraintTimeline) { + if (t.constraintIndex === -1) { + for (let ii = 0; ii < physicsCount; ii++) + skeleton.constrained(physics[ii]); + } else + skeleton.constrained(constraints[t.constraintIndex]); + } else if (isConstraintTimeline(t)) { + const constraintIndex = t.constraintIndex; + if (constraintIndex !== -1) skeleton.constrained(constraints[constraintIndex]); + } + } + } + }; + + // spine-core/src/SliderData.ts + var SliderData = class extends ConstraintData { + /** The animation the slider will apply. */ + animation; + /** When true, the animation is applied by adding it to the current pose rather than overwriting it. */ + additive = false; + /** When true, the animation repeats after its duration, otherwise the last frame is used. */ + loop = false; + /** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */ + bone = null; + /** When a bone is set, the specified transform property is used to set the slider's {@link SliderPose.time}. */ + property; + /** When a bone is set, this is the scale of the {@link property} value in relation to the slider time. */ + scale = 0; + /** When a bone is set, the offset is added to the property. */ + offset = 0; + /** When true and a bone is set, the bone's local transform property is read instead of its world transform. */ + local = false; + constructor(name) { + super(name, new SliderPose()); + } + create(skeleton) { + return new Slider(this, skeleton); + } + }; + + // spine-core/src/SkeletonData.ts + var SkeletonData = class { + /** The skeleton's name, which by default is the name of the skeleton data file, if possible. May be null. */ + name = null; + /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */ + bones = []; + // Ordered parents first. + /** The skeleton's slots in the setup pose draw order. */ + slots = []; + // Setup pose draw order. + skins = []; + /** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine. + * + * See {@link Skeleton.getAttachmentByName}. + * May be null. */ + defaultSkin = null; + /** The skeleton's events. */ + events = []; + /** The skeleton's animations. */ + animations = []; + /** The skeleton's IK constraints. */ + // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types + constraints = []; + /** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */ + x = 0; + /** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */ + y = 0; + /** The width of the skeleton's axis aligned bounding box in the setup pose. */ + width = 0; + /** The height of the skeleton's axis aligned bounding box in the setup pose. */ + height = 0; + /** Baseline scale factor for applying distance-dependent effects on non-scalable properties, such as angle or scale. Default + * is 100. */ + referenceScale = 100; + /** The Spine version used to export the skeleton data, or null. */ + version = null; + /** The skeleton data hash. This value will change if any of the skeleton data has changed. May be null. */ + hash = null; + // Nonessential + /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */ + fps = 30; + /** The path to the images folder as defined in Spine. Available only when nonessential data was exported. May be null. */ + imagesPath = null; + /** The path to the audio folder as defined in Spine. Available only when nonessential data was exported. May be null. */ + audioPath = null; + /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findBone(boneName) { + if (!boneName) throw new Error("boneName cannot be null."); + const bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) + if (bones[i].name === boneName) return bones[i]; + return null; + } + /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findSlot(slotName) { + if (!slotName) throw new Error("slotName cannot be null."); + const slots = this.slots; + for (let i = 0, n = slots.length; i < n; i++) + if (slots[i].name === slotName) return slots[i]; + return null; + } + /** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findSkin(skinName) { + if (!skinName) throw new Error("skinName cannot be null."); + const skins = this.skins; + for (let i = 0, n = skins.length; i < n; i++) + if (skins[i].name === skinName) return skins[i]; + return null; + } + /** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it + * multiple times. + * @returns May be null. */ + findEvent(eventDataName) { + if (!eventDataName) throw new Error("eventDataName cannot be null."); + const events = this.events; + for (let i = 0, n = events.length; i < n; i++) + if (events[i].name === eventDataName) return events[i]; + return null; + } + /** Collects animations used by {@link SliderData slider constraints}. + * + * Slider animations are designed to be applied by slider constraints rather than on their own. Applications that have a user + * choose an animation may want to exclude them. */ + findSliderAnimations(animations) { + const constraints = this.constraints; + for (let i = 0, n = this.constraints.length; i < n; i++) { + const data = constraints[i]; + if (data instanceof SliderData && data.animation != null) animations.push(data.animation); + } + return animations; + } + /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to + * call it multiple times. + * @returns May be null. */ + findAnimation(animationName) { + if (!animationName) throw new Error("animationName cannot be null."); + const animations = this.animations; + for (let i = 0, n = animations.length; i < n; i++) + if (animations[i].name === animationName) return animations[i]; + return null; + } + // --- Constraints. + /** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of + * this method than to call it multiple times. */ + // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types + findConstraint(constraintName, type) { + if (!constraintName) throw new Error("constraintName cannot be null."); + if (type == null) throw new Error("type cannot be null."); + const constraints = this.constraints; + for (let i = 0, n = this.constraints.length; i < n; i++) { + const constraint = constraints[i]; + if (constraint instanceof type && constraint.name === constraintName) return constraint; + } + return null; + } + }; + + // spine-core/src/Skin.ts + var SkinEntry = class { + /** The {@link Skeleton.slots} index. */ + slotIndex = 0; + placeholder; + /** The attachment for this skin entry. */ + attachment; + constructor(slotIndex = 0, placeholder, attachment) { + this.slotIndex = slotIndex; + this.placeholder = placeholder; + this.attachment = attachment; + } + }; + var Skin = class { + /** The skin's name, unique across all skins in the skeleton. + * + * See {@link SkeletonData.findSkin}. */ + name; + attachments = []; + bones = []; + // biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types + constraints = []; + /** The color of the skin as it was in Spine, or a default color if nonessential data was not exported. */ + color = new Color(0.99607843, 0.61960787, 0.30980393, 1); + // fe9e4fff + constructor(name) { + if (!name) throw new Error("name cannot be null."); + this.name = name; + } + /** Adds an attachment to the skin for the specified slot index and name. */ + setAttachment(slotIndex, placeholder, attachment) { + if (!attachment) throw new Error("attachment cannot be null."); + const attachments = this.attachments; + if (slotIndex >= attachments.length) attachments.length = slotIndex + 1; + if (!attachments[slotIndex]) attachments[slotIndex] = {}; + attachments[slotIndex][placeholder] = attachment; + } + /** Adds all attachments, bones, and constraints from the specified skin to this skin. */ + addSkin(skin) { + for (let i = 0; i < skin.bones.length; i++) { + const bone = skin.bones[i]; + let contained = false; + for (let ii = 0; ii < this.bones.length; ii++) { + if (this.bones[ii] === bone) { + contained = true; + break; + } + } + if (!contained) this.bones.push(bone); + } + for (let i = 0; i < skin.constraints.length; i++) { + const constraint = skin.constraints[i]; + let contained = false; + for (let ii = 0; ii < this.constraints.length; ii++) { + if (this.constraints[ii] === constraint) { + contained = true; + break; + } + } + if (!contained) this.constraints.push(constraint); + } + const attachments = skin.getAttachments(); + for (let i = 0; i < attachments.length; i++) { + const attachment = attachments[i]; + this.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment); + } + } + /** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not + * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */ + copySkin(skin) { + for (let i = 0; i < skin.bones.length; i++) { + const bone = skin.bones[i]; + let contained = false; + for (let ii = 0; ii < this.bones.length; ii++) { + if (this.bones[ii] === bone) { + contained = true; + break; + } + } + if (!contained) this.bones.push(bone); + } + for (let i = 0; i < skin.constraints.length; i++) { + const constraint = skin.constraints[i]; + let contained = false; + for (let ii = 0; ii < this.constraints.length; ii++) { + if (this.constraints[ii] === constraint) { + contained = true; + break; + } + } + if (!contained) this.constraints.push(constraint); + } + const attachments = skin.getAttachments(); + for (let i = 0; i < attachments.length; i++) { + const attachment = attachments[i]; + if (!attachment.attachment) continue; + if (attachment.attachment instanceof MeshAttachment) { + attachment.attachment = attachment.attachment.newLinkedMesh(); + this.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment); + } else { + attachment.attachment = attachment.attachment.copy(); + this.setAttachment(attachment.slotIndex, attachment.placeholder, attachment.attachment); + } + } + } + /** Returns the attachment for the specified slot index and placeholder, or null. */ + getAttachment(slotIndex, placeholder) { + const dictionary = this.attachments[slotIndex]; + return dictionary ? dictionary[placeholder] : null; + } + /** Removes the attachment in the skin for the specified slot index and placeholder, if any. */ + removeAttachment(slotIndex, placeholder) { + const dictionary = this.attachments[slotIndex]; + if (dictionary) delete dictionary[placeholder]; + } + /** Returns all attachments in this skin. */ + getAttachments() { + const entries = []; + for (let i = 0; i < this.attachments.length; i++) { + const slotAttachments = this.attachments[i]; + if (slotAttachments) { + for (const name in slotAttachments) { + const attachment = slotAttachments[name]; + if (attachment) entries.push(new SkinEntry(i, name, attachment)); + } + } + } + return entries; + } + /** Returns all attachments in this skin for the specified slot index. */ + getAttachmentsForSlot(slotIndex, attachments) { + const slotAttachments = this.attachments[slotIndex]; + if (slotAttachments) { + for (const name in slotAttachments) { + const attachment = slotAttachments[name]; + if (attachment) attachments.push(new SkinEntry(slotIndex, name, attachment)); + } + } + } + /** Clears all attachments, bones, and constraints. */ + clear() { + this.attachments.length = 0; + this.bones.length = 0; + this.constraints.length = 0; + } + /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */ + attachAll(skeleton, oldSkin) { + let slotIndex = 0; + for (let i = 0; i < skeleton.slots.length; i++) { + const slot = skeleton.slots[i]; + const slotAttachment = slot.pose.getAttachment(); + if (slotAttachment && slotIndex < oldSkin.attachments.length) { + const dictionary = oldSkin.attachments[slotIndex]; + for (const placeholder in dictionary) { + const skinAttachment = dictionary[placeholder]; + if (slotAttachment === skinAttachment) { + const attachment = this.getAttachment(slotIndex, placeholder); + if (attachment) slot.pose.setAttachment(attachment); + break; + } + } + } + slotIndex++; + } + } + }; + + // spine-core/src/SlotData.ts + var SlotData = class extends PosedData { + /** The index of the slot in {@link Skeleton.slots}. */ + index = 0; + /** The bone this slot belongs to. */ + boneData; + /** The name of the attachment that is visible for this slot in the setup pose, or null if no attachment is visible. */ + attachmentName = null; + /** The blend mode for drawing the slot's attachment. */ + blendMode = 0 /* Normal */; + // Nonessential. + /** False if the slot was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */ + visible = true; + constructor(index, name, boneData) { + super(name, new SlotPose()); + if (index < 0) throw new Error("index must be >= 0."); + if (!boneData) throw new Error("boneData cannot be null."); + this.index = index; + this.boneData = boneData; + } + }; + var BlendMode = /* @__PURE__ */ ((BlendMode2) => { + BlendMode2[BlendMode2["Normal"] = 0] = "Normal"; + BlendMode2[BlendMode2["Additive"] = 1] = "Additive"; + BlendMode2[BlendMode2["Multiply"] = 2] = "Multiply"; + BlendMode2[BlendMode2["Screen"] = 3] = "Screen"; + return BlendMode2; + })(BlendMode || {}); + + // spine-core/src/TransformConstraintPose.ts + var TransformConstraintPose = class { + /** A percentage (unbounded) that controls the mix between the constrained and unconstrained rotation. */ + mixRotate = 0; + /** A percentage (unbounded) that controls the mix between the constrained and unconstrained translation X. */ + mixX = 0; + /** A percentage (unbounded) that controls the mix between the constrained and unconstrained translation Y. */ + mixY = 0; + /** A percentage (unbounded) that controls the mix between the constrained and unconstrained scale X. */ + mixScaleX = 0; + /** A percentage (unbounded) that controls the mix between the constrained and unconstrained scale Y. */ + mixScaleY = 0; + /** A percentage (unbounded) that controls the mix between the constrained and unconstrained shear Y. */ + mixShearY = 0; + set(pose) { + this.mixRotate = pose.mixRotate; + this.mixX = pose.mixX; + this.mixY = pose.mixY; + this.mixScaleX = pose.mixScaleX; + this.mixScaleY = pose.mixScaleY; + this.mixShearY = pose.mixShearY; + } + }; + + // spine-core/src/TransformConstraint.ts + var TransformConstraint = class _TransformConstraint extends Constraint { + /** The bones that will be modified by this transform constraint. */ + bones; + /** The bone whose world transform will be copied to the constrained bones. */ + source; + constructor(data, skeleton) { + super(data, new TransformConstraintPose(), new TransformConstraintPose()); + if (!skeleton) throw new Error("skeleton cannot be null."); + this.bones = []; + for (const boneData of data.bones) + this.bones.push(skeleton.bones[boneData.index].constrainedPose); + const source = skeleton.bones[data.source.index]; + if (source == null) throw new Error("source cannot be null."); + this.source = source; + } + copy(skeleton) { + var copy = new _TransformConstraint(this.data, skeleton); + copy.pose.set(this.pose); + return copy; + } + update(skeleton, physics) { + const p = this.appliedPose; + if (p.mixRotate === 0 && p.mixX === 0 && p.mixY === 0 && p.mixScaleX === 0 && p.mixScaleY === 0 && p.mixShearY === 0) return; + const data = this.data; + const localSource = data.localSource, localTarget = data.localTarget, additive = data.additive, clamp = data.clamp; + const offsets = data.offsets; + const source = this.source.appliedPose; + if (localSource) source.validateLocalTransform(skeleton); + const fromItems = data.properties; + const fn = data.properties.length, update = skeleton._update; + const bones = this.bones; + for (let i = 0, n = this.bones.length; i < n; i++) { + const bone = bones[i]; + if (localTarget) + bone.modifyLocal(skeleton); + else + bone.modifyWorld(update); + for (let f = 0; f < fn; f++) { + const from = fromItems[f]; + const value = from.value(skeleton, source, localSource, offsets) - from.offset; + const toItems = from.to; + for (let t = 0, tn = from.to.length; t < tn; t++) { + const to = toItems[t]; + if (to.mix(p) !== 0) { + let clamped = to.offset + value * to.scale; + if (clamp) { + if (to.offset < to.max) + clamped = MathUtils.clamp(clamped, to.offset, to.max); + else + clamped = MathUtils.clamp(clamped, to.max, to.offset); + } + to.apply(skeleton, p, bone, clamped, localTarget, additive); + } + } + } + } + } + sort(skeleton) { + if (!this.data.localSource) skeleton.sortBone(this.source); + const bones = this.bones; + const boneCount = this.bones.length; + const worldTarget = !this.data.localTarget; + if (worldTarget) { + for (let i = 0; i < boneCount; i++) + skeleton.sortBone(bones[i].bone); + } + skeleton._updateCache.push(this); + for (let i = 0; i < boneCount; i++) { + const bone = bones[i].bone; + skeleton.sortReset(bone.children); + skeleton.constrained(bone); + } + for (let i = 0; i < boneCount; i++) + bones[i].bone.sorted = worldTarget; + } + isSourceActive() { + return this.source.active; + } + }; + + // spine-core/src/TransformConstraintData.ts + var TransformConstraintData = class _TransformConstraintData extends ConstraintData { + static ROTATION = 0; + static X = 1; + static Y = 2; + static SCALEX = 3; + static SCALEY = 4; + static SHEARY = 5; + /** The bones that will be modified by this transform constraint. */ + bones = []; + /** The bone whose world transform will be copied to the constrained bones. */ + set source(source) { + this._source = source; + } + get source() { + if (!this._source) throw new Error("BoneData not set."); + else return this._source; + } + _source = null; + offsets = [0, 0, 0, 0, 0, 0]; + /** An offset added to the constrained bone X translation. */ + offsetX = 0; + /** An offset added to the constrained bone Y translation. */ + offsetY = 0; + /** Reads the source bone's local transform instead of its world transform. */ + localSource = false; + /** Sets the constrained bones' local transforms instead of their world transforms. */ + localTarget = false; + /** Adds the source bone transform to the constrained bones instead of setting it absolutely. */ + additive = false; + /** Prevents constrained bones from exceeding the ranged defined by {@link ToProperty.offset} and {@link ToProperty.max}. */ + clamp = false; + /** The mapping of transform properties to other transform properties. */ + properties = []; + constructor(name) { + super(name, new TransformConstraintPose()); + } + create(skeleton) { + return new TransformConstraint(this, skeleton); + } + /** An offset added to the constrained bone rotation. */ + getOffsetRotation() { + return this.offsets[_TransformConstraintData.ROTATION]; + } + setOffsetRotation(offsetRotation) { + this.offsets[_TransformConstraintData.ROTATION] = offsetRotation; + } + /** An offset added to the constrained bone X translation. */ + getOffsetX() { + return this.offsets[_TransformConstraintData.X]; + } + setOffsetX(offsetX) { + this.offsets[_TransformConstraintData.X] = offsetX; + } + /** An offset added to the constrained bone Y translation. */ + getOffsetY() { + return this.offsets[_TransformConstraintData.Y]; + } + setOffsetY(offsetY) { + this.offsets[_TransformConstraintData.Y] = offsetY; + } + /** An offset added to the constrained bone scaleX. */ + getOffsetScaleX() { + return this.offsets[_TransformConstraintData.SCALEX]; + } + setOffsetScaleX(offsetScaleX) { + this.offsets[_TransformConstraintData.SCALEX] = offsetScaleX; + } + /** An offset added to the constrained bone scaleY. */ + getOffsetScaleY() { + return this.offsets[_TransformConstraintData.SCALEY]; + } + setOffsetScaleY(offsetScaleY) { + this.offsets[_TransformConstraintData.SCALEY] = offsetScaleY; + } + /** An offset added to the constrained bone shearY. */ + getOffsetShearY() { + return this.offsets[_TransformConstraintData.SHEARY]; + } + setOffsetShearY(offsetShearY) { + this.offsets[_TransformConstraintData.SHEARY] = offsetShearY; + } + }; + var FromProperty = class { + /** The value of this property that corresponds to {@link ToProperty.offset}. */ + offset = 0; + /** Constrained properties. */ + to = []; + }; + var ToProperty = class { + /** The value of this property that corresponds to {@link FromProperty.offset}. */ + offset = 0; + /** The maximum value of this property when {@link TransformConstraintData.clamp clamped}. */ + max = 0; + /** The scale of the {@link FromProperty} value in relation to this property. */ + scale = 0; + }; + var FromRotate = class extends FromProperty { + value(skeleton, source, local, offsets) { + if (local) return source.rotation + offsets[TransformConstraintData.ROTATION]; + const sx = skeleton.scaleX, sy = skeleton.scaleY; + let value = Math.atan2(source.c / sy, source.a / sx) * MathUtils.radDeg + ((source.a * source.d - source.b * source.c) * sx * sy > 0 ? offsets[TransformConstraintData.ROTATION] : -offsets[TransformConstraintData.ROTATION]); + if (value < 0) value += 360; + return value; + } + }; + var ToRotate = class extends ToProperty { + mix(pose) { + return pose.mixRotate; + } + apply(skeleton, pose, bone, value, local, additive) { + if (local) + bone.rotation += (additive ? value : value - bone.rotation) * pose.mixRotate; + else { + const sx = skeleton.scaleX, sy = skeleton.scaleY, ix = 1 / sx, iy = 1 / sy; + const a = bone.a * ix, b = bone.b * ix, c = bone.c * iy, d = bone.d * iy; + value *= MathUtils.degRad; + if (!additive) value -= Math.atan2(c, a); + if (value > MathUtils.PI) + value -= MathUtils.PI2; + else if (value < -MathUtils.PI) + value += MathUtils.PI2; + value *= pose.mixRotate; + const cos = Math.cos(value), sin = Math.sin(value); + bone.a = (cos * a - sin * c) * sx; + bone.b = (cos * b - sin * d) * sx; + bone.c = (sin * a + cos * c) * sy; + bone.d = (sin * b + cos * d) * sy; + } + } + }; + var FromX = class extends FromProperty { + value(skeleton, source, local, offsets) { + return local ? source.x + offsets[TransformConstraintData.X] : (offsets[TransformConstraintData.X] * source.a + offsets[TransformConstraintData.Y] * source.b + source.worldX) / skeleton.scaleX; + } + }; + var ToX = class extends ToProperty { + mix(pose) { + return pose.mixX; + } + apply(skeleton, pose, bone, value, local, additive) { + if (local) + bone.x += (additive ? value : value - bone.x) * pose.mixX; + else { + if (!additive) value -= bone.worldX / skeleton.scaleX; + bone.worldX += value * pose.mixX * skeleton.scaleX; + } + } + }; + var FromY = class extends FromProperty { + value(skeleton, source, local, offsets) { + return local ? source.y + offsets[TransformConstraintData.Y] : (offsets[TransformConstraintData.X] * source.c + offsets[TransformConstraintData.Y] * source.d + source.worldY) / skeleton.scaleY; + } + }; + var ToY = class extends ToProperty { + mix(pose) { + return pose.mixY; + } + apply(skeleton, pose, bone, value, local, additive) { + if (local) + bone.y += (additive ? value : value - bone.y) * pose.mixY; + else { + if (!additive) value -= bone.worldY / skeleton.scaleY; + bone.worldY += value * pose.mixY * skeleton.scaleY; + } + } + }; + var FromScaleX = class extends FromProperty { + value(skeleton, source, local, offsets) { + if (local) return source.scaleX + offsets[TransformConstraintData.SCALEX]; + const a = source.a / skeleton.scaleX, c = source.c / skeleton.scaleY; + return Math.sqrt(a * a + c * c) + offsets[TransformConstraintData.SCALEX]; + } + }; + var ToScaleX = class extends ToProperty { + mix(pose) { + return pose.mixScaleX; + } + apply(skeleton, pose, bone, value, local, additive) { + if (local) { + if (additive) + bone.scaleX *= 1 + (value - 1) * pose.mixScaleX; + else if (bone.scaleX !== 0) + bone.scaleX += (value - bone.scaleX) * pose.mixScaleX; + } else if (additive) { + const s = 1 + (value - 1) * pose.mixScaleX; + bone.a *= s; + bone.c *= s; + } else { + let a = bone.a / skeleton.scaleX, c = bone.c / skeleton.scaleY, s = Math.sqrt(a * a + c * c); + if (s !== 0) { + s = 1 + (value - s) * pose.mixScaleX / s; + bone.a *= s; + bone.c *= s; + } + } + } + }; + var FromScaleY = class extends FromProperty { + value(skeleton, source, local, offsets) { + if (local) return source.scaleY + offsets[TransformConstraintData.SCALEY]; + const b = source.b / skeleton.scaleX, d = source.d / skeleton.scaleY; + return Math.sqrt(b * b + d * d) + offsets[TransformConstraintData.SCALEY]; + } + }; + var ToScaleY = class extends ToProperty { + mix(pose) { + return pose.mixScaleY; + } + apply(skeleton, pose, bone, value, local, additive) { + if (local) { + if (additive) + bone.scaleY *= 1 + (value - 1) * pose.mixScaleY; + else if (bone.scaleY !== 0) + bone.scaleY += (value - bone.scaleY) * pose.mixScaleY; + } else if (additive) { + const s = 1 + (value - 1) * pose.mixScaleY; + bone.b *= s; + bone.d *= s; + } else { + let b = bone.b / skeleton.scaleX, d = bone.d / skeleton.scaleY, s = Math.sqrt(b * b + d * d); + if (s !== 0) { + s = 1 + (value - s) * pose.mixScaleY / s; + bone.b *= s; + bone.d *= s; + } + } + } + }; + var FromShearY = class extends FromProperty { + value(skeleton, source, local, offsets) { + if (local) return source.shearY + offsets[TransformConstraintData.SHEARY]; + const ix = 1 / skeleton.scaleX, iy = 1 / skeleton.scaleY; + return (Math.atan2(source.d * iy, source.b * ix) - Math.atan2(source.c * iy, source.a * ix)) * MathUtils.radDeg - 90 + offsets[TransformConstraintData.SHEARY]; + } + }; + var ToShearY = class extends ToProperty { + mix(pose) { + return pose.mixShearY; + } + apply(skeleton, pose, bone, value, local, additive) { + if (local) { + if (!additive) value -= bone.shearY; + bone.shearY += value * pose.mixShearY; + } else { + const sx = skeleton.scaleX, sy = skeleton.scaleY, b = bone.b / sx, d = bone.d / sy, by = Math.atan2(d, b); + value = (value + 90) * MathUtils.degRad; + if (additive) + value -= MathUtils.PI / 2; + else { + value -= by - Math.atan2(bone.c / sx, bone.a / sy); + if (value > MathUtils.PI) + value -= MathUtils.PI2; + else if (value < -MathUtils.PI) + value += MathUtils.PI2; + } + value = by + value * pose.mixShearY; + const s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(value) * s * sy; + bone.d = Math.sin(value) * s * sx; + } + } + }; + + // spine-core/src/SkeletonBinary.ts + var SkeletonBinary = class { + /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at + * runtime than were used in Spine. + * + * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */ + scale = 1; + attachmentLoader; + linkedMeshes = []; + constructor(attachmentLoader) { + this.attachmentLoader = attachmentLoader; + } + readSkeletonData(binary) { + const scale = this.scale; + const skeletonData = new SkeletonData(); + skeletonData.name = ""; + const input = new BinaryInput(binary); + const lowHash = input.readInt32(); + const highHash = input.readInt32(); + skeletonData.hash = highHash === 0 && lowHash === 0 ? null : highHash.toString(16) + lowHash.toString(16); + skeletonData.version = input.readString(); + skeletonData.x = input.readFloat(); + skeletonData.y = input.readFloat(); + skeletonData.width = input.readFloat(); + skeletonData.height = input.readFloat(); + skeletonData.referenceScale = input.readFloat() * scale; + const nonessential = input.readBoolean(); + if (nonessential) { + skeletonData.fps = input.readFloat(); + skeletonData.imagesPath = input.readString(); + skeletonData.audioPath = input.readString(); + } + let n = 0; + n = input.readInt(true); + for (let i = 0; i < n; i++) { + const str = input.readString(); + if (!str) throw new Error("String in string table must not be null."); + input.strings.push(str); + } + const bones = skeletonData.bones; + n = input.readInt(true); + for (let i = 0; i < n; i++) { + const name = input.readString(); + if (!name) throw new Error("Bone name must not be null."); + const parent = i === 0 ? null : bones[input.readInt(true)]; + const data = new BoneData(i, name, parent); + const setup = data.setupPose; + setup.rotation = input.readFloat(); + setup.x = input.readFloat() * scale; + setup.y = input.readFloat() * scale; + setup.scaleX = input.readFloat(); + setup.scaleY = input.readFloat(); + setup.shearX = input.readFloat(); + setup.shearY = input.readFloat(); + setup.inherit = input.readByte(); + data.length = input.readFloat() * scale; + data.skinRequired = input.readBoolean(); + if (nonessential) { + Color.rgba8888ToColor(data.color, input.readInt32()); + data.icon = input.readString() ?? void 0; + data.iconSize = input.readFloat(); + data.iconRotation = input.readFloat(); + data.visible = input.readBoolean(); + } + bones.push(data); + } + n = input.readInt(true); + for (let i = 0; i < n; i++) { + const slotName = input.readString(); + if (!slotName) throw new Error("Slot name must not be null."); + const boneData = bones[input.readInt(true)]; + const data = new SlotData(i, slotName, boneData); + Color.rgba8888ToColor(data.setupPose.color, input.readInt32()); + const darkColor = input.readInt32(); + if (darkColor !== -1) Color.rgb888ToColor(data.setupPose.darkColor = new Color(), darkColor); + data.attachmentName = input.readStringRef(); + data.blendMode = input.readInt(true); + if (nonessential) data.visible = input.readBoolean(); + skeletonData.slots.push(data); + } + const constraints = skeletonData.constraints; + const constraintCount = input.readInt(true); + for (let i = 0; i < constraintCount; i++) { + const name = input.readString(); + if (!name) throw new Error("Constraint data name must not be null."); + let nn; + switch (input.readByte()) { + case CONSTRAINT_IK: { + const data = new IkConstraintData(name); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(bones[input.readInt(true)]); + data.target = bones[input.readInt(true)]; + const flags = input.readByte(); + data.skinRequired = (flags & 1) !== 0; + if ((flags & 2) !== 0) data.scaleYMode = input.readUnsignedByte(); + const setup = data.setupPose; + setup.bendDirection = (flags & 4) !== 0 ? -1 : 1; + setup.compress = (flags & 8) !== 0; + setup.stretch = (flags & 16) !== 0; + if ((flags & 32) !== 0) setup.mix = (flags & 64) !== 0 ? input.readFloat() : 1; + if ((flags & 128) !== 0) setup.softness = input.readFloat() * scale; + constraints.push(data); + break; + } + case CONSTRAINT_TRANSFORM: { + const data = new TransformConstraintData(name); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(bones[input.readInt(true)]); + data.source = bones[input.readInt(true)]; + let flags = input.readUnsignedByte(); + data.skinRequired = (flags & 1) !== 0; + data.localSource = (flags & 2) !== 0; + data.localTarget = (flags & 4) !== 0; + data.additive = (flags & 8) !== 0; + data.clamp = (flags & 16) !== 0; + nn = flags >> 5; + for (let ii = 0, tn; ii < nn; ii++) { + let fromScale = 1; + let from; + switch (input.readByte()) { + case 0: + from = new FromRotate(); + break; + case 1: { + fromScale = scale; + from = new FromX(); + break; + } + case 2: { + fromScale = scale; + from = new FromY(); + break; + } + case 3: + from = new FromScaleX(); + break; + case 4: + from = new FromScaleY(); + break; + case 5: + from = new FromShearY(); + break; + default: + from = null; + } + if (!from) continue; + from.offset = input.readFloat() * fromScale; + tn = input.readByte(); + for (let t = 0; t < tn; t++) { + let toScale = 1; + let to; + switch (input.readByte()) { + case 0: + to = new ToRotate(); + break; + case 1: { + toScale = scale; + to = new ToX(); + break; + } + case 2: { + toScale = scale; + to = new ToY(); + break; + } + case 3: + to = new ToScaleX(); + break; + case 4: + to = new ToScaleY(); + break; + case 5: + to = new ToShearY(); + break; + default: + to = null; + } + if (!to) continue; + to.offset = input.readFloat() * toScale; + to.max = input.readFloat() * toScale; + to.scale = input.readFloat() * toScale / fromScale; + from.to[t] = to; + } + data.properties[ii] = from; + } + flags = input.readByte(); + if ((flags & 1) !== 0) data.offsets[TransformConstraintData.ROTATION] = input.readFloat(); + if ((flags & 2) !== 0) data.offsets[TransformConstraintData.X] = input.readFloat() * scale; + if ((flags & 4) !== 0) data.offsets[TransformConstraintData.Y] = input.readFloat() * scale; + if ((flags & 8) !== 0) data.offsets[TransformConstraintData.SCALEX] = input.readFloat(); + if ((flags & 16) !== 0) data.offsets[TransformConstraintData.SCALEY] = input.readFloat(); + if ((flags & 32) !== 0) data.offsets[TransformConstraintData.SHEARY] = input.readFloat(); + flags = input.readByte(); + const setup = data.setupPose; + if ((flags & 1) !== 0) setup.mixRotate = input.readFloat(); + if ((flags & 2) !== 0) setup.mixX = input.readFloat(); + if ((flags & 4) !== 0) setup.mixY = input.readFloat(); + if ((flags & 8) !== 0) setup.mixScaleX = input.readFloat(); + if ((flags & 16) !== 0) setup.mixScaleY = input.readFloat(); + if ((flags & 32) !== 0) setup.mixShearY = input.readFloat(); + constraints.push(data); + break; + } + case CONSTRAINT_PATH: { + const data = new PathConstraintData(name); + nn = input.readInt(true); + for (let ii = 0; ii < nn; ii++) + data.bones.push(bones[input.readInt(true)]); + data.slot = skeletonData.slots[input.readInt(true)]; + const flags = input.readByte(); + data.skinRequired = (flags & 1) !== 0; + data.positionMode = flags >> 1 & 1; + data.spacingMode = flags >> 2 & 3; + data.rotateMode = flags >> 4 & 3; + if ((flags & 128) !== 0) data.offsetRotation = input.readFloat(); + const setup = data.setupPose; + setup.position = input.readFloat(); + if (data.positionMode === 0 /* Fixed */) setup.position *= scale; + setup.spacing = input.readFloat(); + if (data.spacingMode === 0 /* Length */ || data.spacingMode === 1 /* Fixed */) setup.spacing *= scale; + setup.mixRotate = input.readFloat(); + setup.mixX = input.readFloat(); + setup.mixY = input.readFloat(); + constraints.push(data); + break; + } + case CONSTRAINT_PHYSICS: { + const data = new PhysicsConstraintData(name); + data.bone = bones[input.readInt(true)]; + let flags = input.readByte(); + data.skinRequired = (flags & 1) !== 0; + if ((flags & 2) !== 0) data.x = input.readFloat(); + if ((flags & 4) !== 0) data.y = input.readFloat(); + if ((flags & 8) !== 0) data.rotate = input.readFloat(); + if ((flags & 16) !== 0) { + let scaleX = input.readFloat(); + if (scaleX < -2) { + data.scaleYMode = 2 /* Volume */; + scaleX = -2 - scaleX; + } else if (scaleX < 0) { + data.scaleYMode = 1 /* Uniform */; + scaleX = -1 - scaleX; + } + data.scaleX = scaleX; + } + if ((flags & 32) !== 0) data.shearX = input.readFloat(); + data.limit = ((flags & 64) !== 0 ? input.readFloat() : 5e3) * scale; + data.step = 1 / input.readUnsignedByte(); + const setup = data.setupPose; + setup.inertia = input.readFloat(); + setup.strength = input.readFloat(); + setup.damping = input.readFloat(); + setup.massInverse = (flags & 128) !== 0 ? input.readFloat() : 1; + setup.wind = input.readFloat(); + setup.gravity = input.readFloat(); + flags = input.readByte(); + if ((flags & 1) !== 0) data.inertiaGlobal = true; + if ((flags & 2) !== 0) data.strengthGlobal = true; + if ((flags & 4) !== 0) data.dampingGlobal = true; + if ((flags & 8) !== 0) data.massGlobal = true; + if ((flags & 16) !== 0) data.windGlobal = true; + if ((flags & 32) !== 0) data.gravityGlobal = true; + if ((flags & 64) !== 0) data.mixGlobal = true; + setup.mix = (flags & 128) !== 0 ? input.readFloat() : 1; + constraints.push(data); + break; + } + case CONSTRAINT_SLIDER: { + const data = new SliderData(name); + const flags = input.readByte(); + data.skinRequired = (flags & 1) !== 0; + data.loop = (flags & 2) !== 0; + data.additive = (flags & 4) !== 0; + if ((flags & 8) !== 0) data.setupPose.time = input.readFloat(); + if ((flags & 16) !== 0) data.setupPose.mix = (flags & 32) !== 0 ? input.readFloat() : 1; + if ((flags & 64) !== 0) { + data.local = (flags & 128) !== 0; + data.bone = bones[input.readInt(true)]; + const offset = input.readFloat(); + let propertyScale = 1; + switch (input.readByte()) { + case 0: + data.property = new FromRotate(); + break; + case 1: { + propertyScale = scale; + data.property = new FromX(); + break; + } + case 2: { + propertyScale = scale; + data.property = new FromY(); + break; + } + case 3: + data.property = new FromScaleX(); + break; + case 4: + data.property = new FromScaleY(); + break; + case 5: + data.property = new FromShearY(); + break; + default: + continue; + } + ; + data.property.offset = offset * propertyScale; + data.offset = input.readFloat(); + data.scale = input.readFloat() / propertyScale; + } + constraints.push(data); + break; + } + } + } + const defaultSkin = this.readSkin(input, skeletonData, true, nonessential); + if (defaultSkin) { + skeletonData.defaultSkin = defaultSkin; + skeletonData.skins.push(defaultSkin); + } + { + let i = skeletonData.skins.length; + Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true)); + for (; i < n; i++) { + const skin = this.readSkin(input, skeletonData, false, nonessential); + if (!skin) throw new Error("readSkin() should not have returned null."); + skeletonData.skins[i] = skin; + } + } + n = this.linkedMeshes.length; + for (let i = 0; i < n; i++) { + const linkedMesh = this.linkedMeshes[i]; + const skin = skeletonData.skins[linkedMesh.skinIndex]; + if (!linkedMesh.source) throw new Error("Linked mesh parent must not be null"); + const source = skin.getAttachment(linkedMesh.sourceIndex, linkedMesh.source); + if (!source) throw new Error(`Source mesh not found: ${linkedMesh.source}`); + linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimelines ? source : linkedMesh.mesh; + linkedMesh.mesh.setSourceMesh(source); + linkedMesh.mesh.updateSequence(); + } + this.linkedMeshes.length = 0; + n = input.readInt(true); + for (let i = 0; i < n; i++) { + const eventName = input.readString(); + if (!eventName) throw new Error("Event data name must not be null"); + const data = new EventData(eventName); + const setup = data.setupPose; + setup.intValue = input.readInt(false); + setup.floatValue = input.readFloat(); + setup.stringValue = input.readString(); + data._audioPath = input.readString(); + if (data.audioPath) { + setup.volume = input.readFloat(); + setup.balance = input.readFloat(); + } + skeletonData.events.push(data); + } + const animations = skeletonData.animations; + n = input.readInt(true); + for (let i = 0; i < n; i++) { + const animationName = input.readString(); + if (!animationName) throw new Error("Animation name must not be null."); + animations.push(this.readAnimation(input, animationName, skeletonData, nonessential)); + } + for (let i = 0; i < constraintCount; i++) { + const constraint = constraints[i]; + if (constraint instanceof SliderData) constraint.animation = animations[input.readInt(true)]; + } + return skeletonData; + } + readSkin(input, skeletonData, defaultSkin, nonessential) { + let skin = null; + let slotCount = 0; + if (defaultSkin) { + slotCount = input.readInt(true); + if (slotCount === 0) return null; + skin = new Skin("default"); + } else { + const skinName = input.readString(); + if (!skinName) throw new Error("Skin name must not be null."); + skin = new Skin(skinName); + if (nonessential) Color.rgba8888ToColor(skin.color, input.readInt32()); + let n = input.readInt(true); + let from = skeletonData.bones, to = skin.bones; + for (let i = 0; i < n; i++) + to[i] = from[input.readInt(true)]; + n = input.readInt(true); + from = skeletonData.constraints; + to = skin.constraints; + for (let i = 0; i < n; i++) + to[i] = from[input.readInt(true)]; + slotCount = input.readInt(true); + } + for (let i = 0; i < slotCount; i++) { + const slotIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const placeholder = input.readStringRef(); + if (!placeholder) + throw new Error("Attachment name must not be null"); + const attachment = this.readAttachment(input, skeletonData, skin, slotIndex, placeholder, nonessential); + if (attachment) skin.setAttachment(slotIndex, placeholder, attachment); + } + } + return skin; + } + readAttachment(input, skeletonData, skin, slotIndex, placeholder, nonessential) { + const scale = this.scale; + const flags = input.readByte(); + const name = (flags & 8) !== 0 ? input.readStringRef() : placeholder; + if (!name) throw new Error("Attachment name must not be null"); + switch (flags & 7) { + // BUG? + case 0 /* Region */: { + let path = (flags & 16) !== 0 ? input.readStringRef() : null; + const color = (flags & 32) !== 0 ? input.readInt32() : 4294967295; + const sequence = this.readSequence(input, (flags & 64) !== 0); + const rotation = (flags & 128) !== 0 ? input.readFloat() : 0; + const x = input.readFloat(); + const y = input.readFloat(); + const scaleX = input.readFloat(); + const scaleY = input.readFloat(); + const width = input.readFloat(); + const height = input.readFloat(); + if (!path) path = name; + const region = this.attachmentLoader.newRegionAttachment(skin, placeholder, name, path, sequence); + if (!region) return null; + region.path = path; + region.x = x * scale; + region.y = y * scale; + region.scaleX = scaleX; + region.scaleY = scaleY; + region.rotation = rotation; + region.width = width * scale; + region.height = height * scale; + Color.rgba8888ToColor(region.color, color); + region.updateSequence(); + return region; + } + case 1 /* BoundingBox */: { + const vertices = this.readVertices(input, (flags & 16) !== 0); + const color = nonessential ? input.readInt32() : 0; + const box = this.attachmentLoader.newBoundingBoxAttachment(skin, placeholder, name); + if (!box) return null; + box.worldVerticesLength = vertices.length; + box.vertices = vertices.vertices; + box.bones = vertices.bones; + if (nonessential) Color.rgba8888ToColor(box.color, color); + return box; + } + case 2 /* Mesh */: { + let path = (flags & 16) !== 0 ? input.readStringRef() : name; + const color = (flags & 32) !== 0 ? input.readInt32() : 4294967295; + const sequence = this.readSequence(input, (flags & 64) !== 0); + const hullLength = input.readInt(true); + const vertices = this.readVertices(input, (flags & 128) !== 0); + const uvs = this.readFloatArray(input, vertices.length, 1); + const triangles = this.readShortArray(input, (vertices.length - hullLength - 2) * 3); + const slotCount = input.readInt(true); + let timelineSlots = null; + if (slotCount > 0) { + timelineSlots = []; + for (let i = 0; i < slotCount; i++) + timelineSlots[i] = input.readInt(true); + } + let edges = []; + let width = 0, height = 0; + if (nonessential) { + edges = this.readShortArray(input, input.readInt(true)); + width = input.readFloat(); + height = input.readFloat(); + } + if (!path) path = name; + const mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence); + if (!mesh) return null; + mesh.path = path; + Color.rgba8888ToColor(mesh.color, color); + mesh.hullLength = hullLength << 1; + mesh.bones = vertices.bones; + mesh.vertices = vertices.vertices; + mesh.worldVerticesLength = vertices.length; + mesh.regionUVs = uvs; + mesh.triangles = triangles; + if (timelineSlots) mesh.timelineSlots = timelineSlots; + if (nonessential) { + mesh.edges = edges; + mesh.width = width * scale; + mesh.height = height * scale; + } + mesh.updateSequence(); + return mesh; + } + case 3 /* LinkedMesh */: { + const path = (flags & 16) !== 0 ? input.readStringRef() : name; + if (path == null) throw new Error("Path of linked mesh must not be null"); + const color = (flags & 32) !== 0 ? input.readInt32() : 4294967295; + const sequence = this.readSequence(input, (flags & 64) !== 0); + const inheritTimelines = (flags & 128) !== 0; + const sourceIndex = input.readInt(true); + const skinIndex = input.readInt(true); + const source = input.readStringRef(); + let width = 0, height = 0; + if (nonessential) { + width = input.readFloat(); + height = input.readFloat(); + } + const mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence); + if (!mesh) return null; + mesh.path = path; + Color.rgba8888ToColor(mesh.color, color); + if (nonessential) { + mesh.width = width * scale; + mesh.height = height * scale; + } + this.linkedMeshes.push(new LinkedMesh(mesh, skinIndex, slotIndex, sourceIndex, source, inheritTimelines)); + return mesh; + } + case 4 /* Path */: { + const closed = (flags & 16) !== 0; + const constantSpeed = (flags & 32) !== 0; + const vertices = this.readVertices(input, (flags & 64) !== 0); + const lengths = this.readFloatArray(input, vertices.length / 6, scale); + const color = nonessential ? input.readInt32() : 0; + const path = this.attachmentLoader.newPathAttachment(skin, placeholder, name); + if (!path) return null; + path.closed = closed; + path.constantSpeed = constantSpeed; + path.worldVerticesLength = vertices.length; + path.vertices = vertices.vertices; + path.bones = vertices.bones; + path.lengths = lengths; + if (nonessential) Color.rgba8888ToColor(path.color, color); + return path; + } + case 5 /* Point */: { + const rotation = input.readFloat(); + const x = input.readFloat(); + const y = input.readFloat(); + const color = nonessential ? input.readInt32() : 0; + const point = this.attachmentLoader.newPointAttachment(skin, placeholder, name); + if (!point) return null; + point.x = x * scale; + point.y = y * scale; + point.rotation = rotation; + if (nonessential) Color.rgba8888ToColor(point.color, color); + return point; + } + case 6 /* Clipping */: { + const endSlotIndex = input.readInt(true); + const vertices = this.readVertices(input, (flags & 16) !== 0); + const color = nonessential ? input.readInt32() : 0; + const clip = this.attachmentLoader.newClippingAttachment(skin, placeholder, name); + if (!clip) return null; + clip.endSlot = skeletonData.slots[endSlotIndex]; + clip.convex = (flags & 32) !== 0; + clip.inverse = (flags & 64) !== 0; + clip.worldVerticesLength = vertices.length; + clip.vertices = vertices.vertices; + clip.bones = vertices.bones; + if (nonessential) Color.rgba8888ToColor(clip.color, color); + return clip; + } + } + } + readSequence(input, hasPathSuffix) { + if (!hasPathSuffix) return new Sequence(1, false); + const sequence = new Sequence(input.readInt(true), true); + sequence.start = input.readInt(true); + sequence.digits = input.readInt(true); + sequence.setupIndex = input.readInt(true); + return sequence; + } + readVertices(input, weighted) { + const scale = this.scale; + const vertexCount = input.readInt(true); + const length = vertexCount << 1; + if (!weighted) + return new Vertices(null, this.readFloatArray(input, length, scale), length); + const n = input.readInt(true); + const bones = []; + const weights = []; + for (let b = 0, w = 0; b < n; ) { + const boneCount = input.readInt(true); + bones[b++] = boneCount; + for (let ii = 0; ii < boneCount; ii++, w += 3) { + bones[b++] = input.readInt(true); + weights[w] = input.readFloat() * scale; + weights[w + 1] = input.readFloat() * scale; + weights[w + 2] = input.readFloat(); + } + } + return new Vertices(bones, Utils.toFloatArray(weights), length); + } + readFloatArray(input, n, scale) { + const array = []; + if (scale === 1) { + for (let i = 0; i < n; i++) + array[i] = input.readFloat(); + } else { + for (let i = 0; i < n; i++) + array[i] = input.readFloat() * scale; + } + return array; + } + readShortArray(input, n) { + const array = []; + for (let i = 0; i < n; i++) + array[i] = input.readInt(true); + return array; + } + readAnimation(input, name, skeletonData, nonessential) { + input.readInt(true); + const timelines = []; + const scale = this.scale; + for (let i = 0, n = input.readInt(true); i < n; i++) { + const slotIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const timelineType = input.readByte(); + const frameCount = input.readInt(true); + const frameLast = frameCount - 1; + switch (timelineType) { + case SLOT_ATTACHMENT: { + const timeline = new AttachmentTimeline(frameCount, slotIndex); + for (let frame = 0; frame < frameCount; frame++) + timeline.setFrame(frame, input.readFloat(), input.readStringRef()); + timelines.push(timeline); + break; + } + case SLOT_RGBA: { + const bezierCount = input.readInt(true); + const timeline = new RGBATimeline(frameCount, bezierCount, slotIndex); + let time = input.readFloat(); + let r = input.readUnsignedByte() / 255; + let g = input.readUnsignedByte() / 255; + let b = input.readUnsignedByte() / 255; + let a = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, r, g, b, a); + if (frame === frameLast) break; + const time2 = input.readFloat(); + const r2 = input.readUnsignedByte() / 255; + const g2 = input.readUnsignedByte() / 255; + const b2 = input.readUnsignedByte() / 255; + const a2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1); + setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1); + } + time = time2; + r = r2; + g = g2; + b = b2; + a = a2; + } + timelines.push(timeline); + break; + } + case SLOT_RGB: { + const bezierCount = input.readInt(true); + const timeline = new RGBTimeline(frameCount, bezierCount, slotIndex); + let time = input.readFloat(); + let r = input.readUnsignedByte() / 255; + let g = input.readUnsignedByte() / 255; + let b = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, r, g, b); + if (frame === frameLast) break; + const time2 = input.readFloat(); + const r2 = input.readUnsignedByte() / 255; + const g2 = input.readUnsignedByte() / 255; + const b2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1); + } + time = time2; + r = r2; + g = g2; + b = b2; + } + timelines.push(timeline); + break; + } + case SLOT_RGBA2: { + const bezierCount = input.readInt(true); + const timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex); + let time = input.readFloat(); + let r = input.readUnsignedByte() / 255; + let g = input.readUnsignedByte() / 255; + let b = input.readUnsignedByte() / 255; + let a = input.readUnsignedByte() / 255; + let r2 = input.readUnsignedByte() / 255; + let g2 = input.readUnsignedByte() / 255; + let b2 = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2); + if (frame === frameLast) break; + const time2 = input.readFloat(); + const nr = input.readUnsignedByte() / 255; + const ng = input.readUnsignedByte() / 255; + const nb = input.readUnsignedByte() / 255; + const na = input.readUnsignedByte() / 255; + const nr2 = input.readUnsignedByte() / 255; + const ng2 = input.readUnsignedByte() / 255; + const nb2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1); + setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1); + setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1); + setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1); + setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1); + } + time = time2; + r = nr; + g = ng; + b = nb; + a = na; + r2 = nr2; + g2 = ng2; + b2 = nb2; + } + timelines.push(timeline); + break; + } + case SLOT_RGB2: { + const bezierCount = input.readInt(true); + const timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex); + let time = input.readFloat(); + let r = input.readUnsignedByte() / 255; + let g = input.readUnsignedByte() / 255; + let b = input.readUnsignedByte() / 255; + let r2 = input.readUnsignedByte() / 255; + let g2 = input.readUnsignedByte() / 255; + let b2 = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, r, g, b, r2, g2, b2); + if (frame === frameLast) break; + const time2 = input.readFloat(); + const nr = input.readUnsignedByte() / 255; + const ng = input.readUnsignedByte() / 255; + const nb = input.readUnsignedByte() / 255; + const nr2 = input.readUnsignedByte() / 255; + const ng2 = input.readUnsignedByte() / 255; + const nb2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1); + setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1); + setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1); + setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1); + } + time = time2; + r = nr; + g = ng; + b = nb; + r2 = nr2; + g2 = ng2; + b2 = nb2; + } + timelines.push(timeline); + break; + } + case SLOT_ALPHA: { + const timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex); + let time = input.readFloat(), a = input.readUnsignedByte() / 255; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, a); + if (frame === frameLast) break; + const time2 = input.readFloat(); + const a2 = input.readUnsignedByte() / 255; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1); + } + time = time2; + a = a2; + } + timelines.push(timeline); + } + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + const boneIndex = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const type = input.readByte(), frameCount = input.readInt(true); + if (type === BONE_INHERIT) { + const timeline = new InheritTimeline(frameCount, boneIndex); + for (let frame = 0; frame < frameCount; frame++) { + timeline.setFrame(frame, input.readFloat(), input.readByte()); + } + timelines.push(timeline); + continue; + } + const bezierCount = input.readInt(true); + switch (type) { + case BONE_ROTATE: + readTimeline(input, timelines, new RotateTimeline(frameCount, bezierCount, boneIndex), 1); + break; + case BONE_TRANSLATE: + readTimeline(input, timelines, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale); + break; + case BONE_TRANSLATEX: + readTimeline(input, timelines, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale); + break; + case BONE_TRANSLATEY: + readTimeline(input, timelines, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale); + break; + case BONE_SCALE: + readTimeline(input, timelines, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1); + break; + case BONE_SCALEX: + readTimeline(input, timelines, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1); + break; + case BONE_SCALEY: + readTimeline(input, timelines, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1); + break; + case BONE_SHEAR: + readTimeline(input, timelines, new ShearTimeline(frameCount, bezierCount, boneIndex), 1); + break; + case BONE_SHEARX: + readTimeline(input, timelines, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1); + break; + case BONE_SHEARY: + readTimeline(input, timelines, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1); + break; + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + const index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1; + const timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index); + let flags = input.readByte(); + let time = input.readFloat(), mix = (flags & 1) !== 0 ? (flags & 2) !== 0 ? input.readFloat() : 1 : 0; + let softness = (flags & 4) !== 0 ? input.readFloat() * scale : 0; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mix, softness, (flags & 8) !== 0 ? 1 : -1, (flags & 16) !== 0, (flags & 32) !== 0); + if (frame === frameLast) break; + flags = input.readByte(); + const time2 = input.readFloat(), mix2 = (flags & 1) !== 0 ? (flags & 2) !== 0 ? input.readFloat() : 1 : 0; + const softness2 = (flags & 4) !== 0 ? input.readFloat() * scale : 0; + if ((flags & 64) !== 0) { + timeline.setStepped(frame); + } else if ((flags & 128) !== 0) { + setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale); + } + time = time2; + mix = mix2; + softness = softness2; + } + timelines.push(timeline); + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + const index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1; + const timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index); + let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat(); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); + if (frame === frameLast) break; + const time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1); + setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); + setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); + setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + mixScaleX = mixScaleX2; + mixScaleY = mixScaleY2; + mixShearY = mixShearY2; + } + timelines.push(timeline); + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + const index = input.readInt(true); + const data = skeletonData.constraints[index]; + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true); + switch (type) { + case PATH_POSITION: + readTimeline( + input, + timelines, + new PathConstraintPositionTimeline(frameCount, bezierCount, index), + data.positionMode === 0 /* Fixed */ ? scale : 1 + ); + break; + case PATH_SPACING: + readTimeline( + input, + timelines, + new PathConstraintSpacingTimeline(frameCount, bezierCount, index), + data.spacingMode === 0 /* Length */ || data.spacingMode === 1 /* Fixed */ ? scale : 1 + ); + break; + case PATH_MIX: { + const timeline = new PathConstraintMixTimeline(frameCount, bezierCount, index); + let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(); + for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) { + timeline.setFrame(frame, time, mixRotate, mixX, mixY); + if (frame === frameLast) break; + const time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1); + setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1); + setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + } + timelines.push(timeline); + } + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + const index = input.readInt(true) - 1; + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const type = input.readByte(), frameCount = input.readInt(true); + if (type === PHYSICS_RESET) { + const timeline = new PhysicsConstraintResetTimeline(frameCount, index); + for (let frame = 0; frame < frameCount; frame++) + timeline.setFrame(frame, input.readFloat()); + timelines.push(timeline); + continue; + } + const bezierCount = input.readInt(true); + switch (type) { + case PHYSICS_INERTIA: + readTimeline(input, timelines, new PhysicsConstraintInertiaTimeline(frameCount, bezierCount, index), 1); + break; + case PHYSICS_STRENGTH: + readTimeline(input, timelines, new PhysicsConstraintStrengthTimeline(frameCount, bezierCount, index), 1); + break; + case PHYSICS_DAMPING: + readTimeline(input, timelines, new PhysicsConstraintDampingTimeline(frameCount, bezierCount, index), 1); + break; + case PHYSICS_MASS: + readTimeline(input, timelines, new PhysicsConstraintMassTimeline(frameCount, bezierCount, index), 1); + break; + case PHYSICS_WIND: + readTimeline(input, timelines, new PhysicsConstraintWindTimeline(frameCount, bezierCount, index), 1); + break; + case PHYSICS_GRAVITY: + readTimeline(input, timelines, new PhysicsConstraintGravityTimeline(frameCount, bezierCount, index), 1); + break; + case PHYSICS_MIX: + readTimeline(input, timelines, new PhysicsConstraintMixTimeline(frameCount, bezierCount, index), 1); + break; + default: + throw new Error("Unknown physics timeline type."); + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + const index = input.readInt(true); + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true); + switch (type) { + case SLIDER_TIME: + readTimeline(input, timelines, new SliderTimeline(frameCount, bezierCount, index), 1); + break; + case SLIDER_MIX: + readTimeline(input, timelines, new SliderMixTimeline(frameCount, bezierCount, index), 1); + break; + default: + throw new Error(`Uknown slider type: ${type}`); + } + } + } + for (let i = 0, n = input.readInt(true); i < n; i++) { + const skin = skeletonData.skins[input.readInt(true)]; + for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { + const slotIndex = input.readInt(true); + for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { + const attachmentName = input.readStringRef(); + if (!attachmentName) throw new Error("attachmentName must not be null."); + const attachment = skin.getAttachment(slotIndex, attachmentName); + const timelineType = input.readByte(); + const frameCount = input.readInt(true); + const frameLast = frameCount - 1; + switch (timelineType) { + case ATTACHMENT_DEFORM: { + const vertexAttachment = attachment; + const weighted = vertexAttachment.bones; + const vertices = vertexAttachment.vertices; + const deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + const bezierCount = input.readInt(true); + const timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment); + let time = input.readFloat(); + for (let frame = 0, bezier = 0; ; frame++) { + let deform; + let end = input.readInt(true); + if (end === 0) + deform = weighted ? Utils.newFloatArray(deformLength) : vertices; + else { + deform = Utils.newFloatArray(deformLength); + const start = input.readInt(true); + end += start; + if (scale === 1) { + for (let v = start; v < end; v++) + deform[v] = input.readFloat(); + } else { + for (let v = start; v < end; v++) + deform[v] = input.readFloat() * scale; + } + if (!weighted) { + for (let v = 0, vn = deform.length; v < vn; v++) + deform[v] += vertices[v]; + } + } + timeline.setFrame(frame, time, deform); + if (frame === frameLast) break; + const time2 = input.readFloat(); + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1); + } + time = time2; + } + timelines.push(timeline); + break; + } + case ATTACHMENT_SEQUENCE: { + const timeline = new SequenceTimeline(frameCount, slotIndex, attachment); + for (let frame = 0; frame < frameCount; frame++) { + const time = input.readFloat(); + const modeAndIndex = input.readInt32(); + timeline.setFrame( + frame, + time, + SequenceModeValues[modeAndIndex & 15], + modeAndIndex >> 4, + input.readFloat() + ); + } + timelines.push(timeline); + break; + } + } + } + } + } + const slotCount = skeletonData.slots.length; + const drawOrderCount = input.readInt(true); + if (drawOrderCount > 0) { + const timeline = new DrawOrderTimeline(drawOrderCount); + for (let i = 0; i < drawOrderCount; i++) + timeline.setFrame(i, input.readFloat(), readDrawOrder(input, slotCount)); + timelines.push(timeline); + } + const folderCount = input.readInt(true); + for (let i = 0; i < folderCount; i++) { + const folderSlotCount = input.readInt(true); + const folderSlots = new Array(folderSlotCount); + for (let ii = 0; ii < folderSlotCount; ii++) + folderSlots[ii] = input.readInt(true); + const keyCount = input.readInt(true); + const timeline = new DrawOrderFolderTimeline(keyCount, folderSlots, slotCount); + for (let ii = 0; ii < keyCount; ii++) + timeline.setFrame(ii, input.readFloat(), readDrawOrder(input, folderSlotCount)); + timelines.push(timeline); + } + const eventCount = input.readInt(true); + if (eventCount > 0) { + const timeline = new EventTimeline(eventCount); + for (let i = 0; i < eventCount; i++) { + const time = input.readFloat(); + const eventData = skeletonData.events[input.readInt(true)]; + const event = new Event(time, eventData); + event.intValue = input.readInt(false); + event.floatValue = input.readFloat(); + event.stringValue = input.readString(); + if (event.stringValue == null) event.stringValue = eventData.setupPose.stringValue; + if (event.data.audioPath) { + event.volume = input.readFloat(); + event.balance = input.readFloat(); + } + timeline.setFrame(i, event); + } + timelines.push(timeline); + } + let duration = 0; + for (let i = 0, n = timelines.length; i < n; i++) + duration = Math.max(duration, timelines[i].getDuration()); + const animation = new Animation(name, timelines, duration); + if (nonessential) Color.rgba8888ToColor(animation.color, input.readInt32()); + return animation; + } + }; + var BinaryInput = class { + constructor(data, strings = [], index = 0, buffer = new DataView(data instanceof ArrayBuffer ? data : data.buffer)) { + this.strings = strings; + this.index = index; + this.buffer = buffer; + } + readByte() { + return this.buffer.getInt8(this.index++); + } + readUnsignedByte() { + return this.buffer.getUint8(this.index++); + } + readShort() { + const value = this.buffer.getInt16(this.index); + this.index += 2; + return value; + } + readInt32() { + const value = this.buffer.getInt32(this.index); + this.index += 4; + return value; + } + readInt(optimizePositive) { + let b = this.readByte(); + let result = b & 127; + if ((b & 128) !== 0) { + b = this.readByte(); + result |= (b & 127) << 7; + if ((b & 128) !== 0) { + b = this.readByte(); + result |= (b & 127) << 14; + if ((b & 128) !== 0) { + b = this.readByte(); + result |= (b & 127) << 21; + if ((b & 128) !== 0) { + b = this.readByte(); + result |= (b & 127) << 28; + } + } + } + } + return optimizePositive ? result : result >>> 1 ^ -(result & 1); + } + readStringRef() { + const index = this.readInt(true); + return index === 0 ? null : this.strings[index - 1]; + } + readString() { + let byteCount = this.readInt(true); + switch (byteCount) { + case 0: + return null; + case 1: + return ""; + } + byteCount--; + let chars = ""; + for (let i = 0; i < byteCount; ) { + const b = this.readUnsignedByte(); + switch (b >> 4) { + case 12: + case 13: + chars += String.fromCharCode((b & 31) << 6 | this.readByte() & 63); + i += 2; + break; + case 14: + chars += String.fromCharCode((b & 15) << 12 | (this.readByte() & 63) << 6 | this.readByte() & 63); + i += 3; + break; + default: + chars += String.fromCharCode(b); + i++; + } + } + return chars; + } + readFloat() { + const value = this.buffer.getFloat32(this.index); + this.index += 4; + return value; + } + readBoolean() { + return this.readByte() !== 0; + } + }; + var LinkedMesh = class { + source; + skinIndex; + slotIndex; + sourceIndex; + mesh; + inheritTimelines; + constructor(mesh, skinIndex, slotIndex, sourceIndex, source, inheritTimelines) { + this.mesh = mesh; + this.skinIndex = skinIndex; + this.slotIndex = slotIndex; + this.sourceIndex = sourceIndex; + this.source = source; + this.inheritTimelines = inheritTimelines; + } + }; + var Vertices = class { + constructor(bones = null, vertices, length = 0) { + this.bones = bones; + this.vertices = vertices; + this.length = length; + } + }; + function readTimeline(input, timelines, timeline, scale) { + if (timeline instanceof CurveTimeline1) + readTimeline1(input, timelines, timeline, scale); + else + readTimeline2(input, timelines, timeline, scale); + } + function readTimeline1(input, timelines, timeline, scale) { + let time = input.readFloat(), value = input.readFloat() * scale; + for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) { + timeline.setFrame(frame, time, value); + if (frame === frameLast) break; + const time2 = input.readFloat(), value2 = input.readFloat() * scale; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale); + } + time = time2; + value = value2; + } + timelines.push(timeline); + } + function readTimeline2(input, timelines, timeline, scale) { + let time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale; + for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) { + timeline.setFrame(frame, time, value1, value2); + if (frame === frameLast) break; + const time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale; + switch (input.readByte()) { + case CURVE_STEPPED: + timeline.setStepped(frame); + break; + case CURVE_BEZIER: + setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale); + setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale); + } + time = time2; + value1 = nvalue1; + value2 = nvalue2; + } + timelines.push(timeline); + } + function readDrawOrder(input, slotCount) { + const changeCount = input.readInt(true); + if (changeCount === 0) return null; + const drawOrder = new Array(slotCount).fill(-1); + const unchanged = new Array(slotCount - changeCount); + let originalIndex = 0, unchangedIndex = 0; + for (let i = 0; i < changeCount; i++) { + const slotIndex = input.readInt(true); + while (originalIndex !== slotIndex) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + input.readInt(true)] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (let i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] === -1) drawOrder[i] = unchanged[--unchangedIndex]; + return drawOrder; + } + function setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) { + timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2); + } + var BONE_ROTATE = 0; + var BONE_TRANSLATE = 1; + var BONE_TRANSLATEX = 2; + var BONE_TRANSLATEY = 3; + var BONE_SCALE = 4; + var BONE_SCALEX = 5; + var BONE_SCALEY = 6; + var BONE_SHEAR = 7; + var BONE_SHEARX = 8; + var BONE_SHEARY = 9; + var BONE_INHERIT = 10; + var SLOT_ATTACHMENT = 0; + var SLOT_RGBA = 1; + var SLOT_RGB = 2; + var SLOT_RGBA2 = 3; + var SLOT_RGB2 = 4; + var SLOT_ALPHA = 5; + var CONSTRAINT_IK = 0; + var CONSTRAINT_PATH = 1; + var CONSTRAINT_TRANSFORM = 2; + var CONSTRAINT_PHYSICS = 3; + var CONSTRAINT_SLIDER = 4; + var ATTACHMENT_DEFORM = 0; + var ATTACHMENT_SEQUENCE = 1; + var PATH_POSITION = 0; + var PATH_SPACING = 1; + var PATH_MIX = 2; + var PHYSICS_INERTIA = 0; + var PHYSICS_STRENGTH = 1; + var PHYSICS_DAMPING = 2; + var PHYSICS_MASS = 4; + var PHYSICS_WIND = 5; + var PHYSICS_GRAVITY = 6; + var PHYSICS_MIX = 7; + var PHYSICS_RESET = 8; + var SLIDER_TIME = 0; + var SLIDER_MIX = 1; + var CURVE_STEPPED = 1; + var CURVE_BEZIER = 2; + + // spine-core/src/SkeletonBounds.ts + var SkeletonBounds = class { + /** The left edge of the axis aligned bounding box. */ + minX = 0; + /** The bottom edge of the axis aligned bounding box. */ + minY = 0; + /** The right edge of the axis aligned bounding box. */ + maxX = 0; + /** The top edge of the axis aligned bounding box. */ + maxY = 0; + /** The visible bounding boxes. */ + boundingBoxes = []; + /** The world vertices for the bounding box polygons. */ + polygons = []; + polygonPool = new Pool(() => { + return Utils.newFloatArray(16); + }); + /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding + * box's polygon. + * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the + * SkeletonBounds AABB methods will always return true. */ + update(skeleton, updateAabb) { + if (!skeleton) throw new Error("skeleton cannot be null."); + const boundingBoxes = this.boundingBoxes; + const polygons = this.polygons; + const polygonPool = this.polygonPool; + const slots = skeleton.slots; + const slotCount = slots.length; + boundingBoxes.length = 0; + polygonPool.freeAll(polygons); + polygons.length = 0; + for (let i = 0; i < slotCount; i++) { + const slot = slots[i]; + if (!slot.bone.active) continue; + const attachment = slot.appliedPose.attachment; + if (attachment instanceof BoundingBoxAttachment) { + boundingBoxes.push(attachment); + let polygon = polygonPool.obtain(); + if (polygon.length !== attachment.worldVerticesLength) { + polygon = Utils.newFloatArray(attachment.worldVerticesLength); + } + polygons.push(polygon); + attachment.computeWorldVertices(skeleton, slot, 0, attachment.worldVerticesLength, polygon, 0, 2); + } + } + if (updateAabb) { + this.aabbCompute(); + } else { + this.minX = Number.POSITIVE_INFINITY; + this.minY = Number.POSITIVE_INFINITY; + this.maxX = Number.NEGATIVE_INFINITY; + this.maxY = Number.NEGATIVE_INFINITY; + } + } + aabbCompute() { + let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + const polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) { + const polygon = polygons[i]; + const vertices = polygon; + for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) { + const x = vertices[ii]; + const y = vertices[ii + 1]; + minX = Math.min(minX, x); + minY = Math.min(minY, y); + maxX = Math.max(maxX, x); + maxY = Math.max(maxY, y); + } + } + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; + } + /** Returns true if the axis aligned bounding box contains the point. */ + aabbContainsPoint(x, y) { + return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY; + } + /** Returns true if the axis aligned bounding box intersects the line segment. */ + aabbIntersectsSegment(x1, y1, x2, y2) { + const minX = this.minX; + const minY = this.minY; + const maxX = this.maxX; + const maxY = this.maxY; + if (x1 <= minX && x2 <= minX || y1 <= minY && y2 <= minY || x1 >= maxX && x2 >= maxX || y1 >= maxY && y2 >= maxY) + return false; + const m = (y2 - y1) / (x2 - x1); + let y = m * (minX - x1) + y1; + if (y > minY && y < maxY) return true; + y = m * (maxX - x1) + y1; + if (y > minY && y < maxY) return true; + let x = (minY - y1) / m + x1; + if (x > minX && x < maxX) return true; + x = (maxY - y1) / m + x1; + if (x > minX && x < maxX) return true; + return false; + } + /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */ + aabbIntersectsSkeleton(bounds) { + return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY; + } + /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more + * efficient to only call this method if {@link aabbContainsPoint} returns true. */ + containsPoint(x, y) { + const polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) + if (this.containsPointPolygon(polygons[i], x, y)) return this.boundingBoxes[i]; + return null; + } + /** Returns true if the polygon contains the point. */ + containsPointPolygon(polygon, x, y) { + const vertices = polygon; + const nn = polygon.length; + let prevIndex = nn - 2; + let inside = false; + for (let ii = 0; ii < nn; ii += 2) { + const vertexY = vertices[ii + 1]; + const prevY = vertices[prevIndex + 1]; + if (vertexY < y && prevY >= y || prevY < y && vertexY >= y) { + const vertexX = vertices[ii]; + if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) inside = !inside; + } + prevIndex = ii; + } + return inside; + } + /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it + * is usually more efficient to only call this method if {@link aabbIntersectsSegment} returns + * true. */ + intersectsSegment(x1, y1, x2, y2) { + const polygons = this.polygons; + for (let i = 0, n = polygons.length; i < n; i++) + if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) return this.boundingBoxes[i]; + return null; + } + /** Returns true if the polygon contains any part of the line segment. */ + intersectsSegmentPolygon(polygon, x1, y1, x2, y2) { + const vertices = polygon; + const nn = polygon.length; + const width12 = x1 - x2, height12 = y1 - y2; + const det1 = x1 * y2 - y1 * x2; + let x3 = vertices[nn - 2], y3 = vertices[nn - 1]; + for (let ii = 0; ii < nn; ii += 2) { + const x4 = vertices[ii], y4 = vertices[ii + 1]; + const det2 = x3 * y4 - y3 * x4; + const width34 = x3 - x4, height34 = y3 - y4; + const det3 = width12 * height34 - height12 * width34; + const x = (det1 * width34 - width12 * det2) / det3; + if ((x >= x3 && x <= x4 || x >= x4 && x <= x3) && (x >= x1 && x <= x2 || x >= x2 && x <= x1)) { + const y = (det1 * height34 - height12 * det2) / det3; + if ((y >= y3 && y <= y4 || y >= y4 && y <= y3) && (y >= y1 && y <= y2 || y >= y2 && y <= y1)) return true; + } + x3 = x4; + y3 = y4; + } + return false; + } + /** Returns the polygon for the specified bounding box, or null. */ + getPolygon(boundingBox) { + if (!boundingBox) throw new Error("boundingBox cannot be null."); + const index = this.boundingBoxes.indexOf(boundingBox); + return index === -1 ? null : this.polygons[index]; + } + /** The width of the axis aligned bounding box. */ + getWidth() { + return this.maxX - this.minX; + } + /** The height of the axis aligned bounding box. */ + getHeight() { + return this.maxY - this.minY; + } + }; + + // spine-core/src/Triangulator.ts + var Triangulator = class _Triangulator { + convexPolygons = []; + convexPolygonsIndices = []; + indicesArray = []; + isConcaveArray = []; + triangles = []; + polygonPool = new Pool(() => { + return []; + }); + polygonIndicesPool = new Pool(() => { + return []; + }); + triangulate(verticesArray) { + const vertices = verticesArray; + let vertexCount = verticesArray.length >> 1; + const indices = this.indicesArray; + indices.length = 0; + for (let i = 0; i < vertexCount; i++) + indices[i] = i; + const isConcave = this.isConcaveArray; + isConcave.length = 0; + for (let i = 0; i < vertexCount; i++) + isConcave[i] = _Triangulator.isConcave(i, vertexCount, vertices, indices); + const triangles = this.triangles; + triangles.length = 0; + while (vertexCount > 3) { + let previous = vertexCount - 1, i = 0, next = 1; + while (true) { + outer: + if (!isConcave[i]) { + const p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; + const p1x = vertices[p1], p1y = vertices[p1 + 1]; + const p2x = vertices[p2], p2y = vertices[p2 + 1]; + const p3x = vertices[p3], p3y = vertices[p3 + 1]; + for (let ii = next + 1 < vertexCount ? next + 1 : 0; ii !== previous; ) { + if (isConcave[ii]) { + const v = indices[ii] << 1; + const vx = vertices[v], vy = vertices[v + 1]; + if (_Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy) && _Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy) && _Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) break outer; + } + if (++ii === vertexCount) ii = 0; + } + break; + } + if (next === 0) { + do { + if (!isConcave[i]) break; + i--; + } while (i > 0); + previous = i > 0 ? i - 1 : vertexCount - 1; + next = i + 1 < vertexCount ? i + 1 : 0; + break; + } + previous = i; + i = next; + if (++next === vertexCount) next = 0; + } + triangles.push(indices[previous], indices[i], indices[next]); + indices.splice(i, 1); + isConcave.splice(i, 1); + vertexCount--; + const previousIndex = i > 0 ? i - 1 : vertexCount - 1; + const nextIndex = i < vertexCount ? i : 0; + isConcave[previousIndex] = _Triangulator.isConcave(previousIndex, vertexCount, vertices, indices); + isConcave[nextIndex] = _Triangulator.isConcave(nextIndex, vertexCount, vertices, indices); + } + if (vertexCount === 3) triangles.push(indices[2], indices[0], indices[1]); + return triangles; + } + decompose(verticesArray, triangles) { + const vertices = verticesArray; + const convexPolygons = this.convexPolygons; + this.polygonPool.freeAll(convexPolygons); + convexPolygons.length = 0; + const convexPolygonsIndices = this.convexPolygonsIndices; + this.polygonIndicesPool.freeAll(convexPolygonsIndices); + convexPolygonsIndices.length = 0; + let polygonIndices = this.polygonIndicesPool.obtain(); + polygonIndices.length = 0; + let polygon = this.polygonPool.obtain(); + polygon.length = 0; + let fanBaseIndex = -1, lastWinding = 0; + for (let i = 0, n = triangles.length; i < n; i += 3) { + const t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1; + const x1 = vertices[t1], y1 = vertices[t1 + 1]; + const x2 = vertices[t2], y2 = vertices[t2 + 1]; + const x3 = vertices[t3], y3 = vertices[t3 + 1]; + if (fanBaseIndex === t1) { + const o = polygon.length - 4; + if (_Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3) === lastWinding && _Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]) === lastWinding) { + polygon.push(x3, y3); + polygonIndices.push(t3); + continue; + } + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + polygon = this.polygonPool.obtain(); + polygonIndices = this.polygonIndicesPool.obtain(); + } + polygon.length = 0; + polygon.push(x1, y1, x2, y2); + polygon.push(x3, y3); + polygonIndices.length = 0; + polygonIndices.push(t1, t2, t3); + lastWinding = _Triangulator.winding(x1, y1, x2, y2, x3, y3); + fanBaseIndex = t1; + } + if (polygon.length > 0) { + convexPolygons.push(polygon); + convexPolygonsIndices.push(polygonIndices); + } + for (let i = 0, n = convexPolygons.length; i < n; i++) { + polygonIndices = convexPolygonsIndices[i]; + if (polygonIndices.length === 0) continue; + const firstIndex = polygonIndices[0]; + let lastIndex = polygonIndices[polygonIndices.length - 1]; + polygon = convexPolygons[i]; + const o = polygon.length - 4; + let prevPrevX = polygon[o], prevPrevY = polygon[o + 1]; + let prevX = polygon[o + 2], prevY = polygon[o + 3]; + const firstX = polygon[0], firstY = polygon[1]; + const secondX = polygon[2], secondY = polygon[3]; + const winding = _Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); + for (let ii = 0; ii < n; ii++) { + if (ii === i) continue; + const otherIndices = convexPolygonsIndices[ii]; + if (otherIndices.length !== 3) continue; + const otherFirstIndex = otherIndices[0]; + const otherSecondIndex = otherIndices[1]; + const otherLastIndex = otherIndices[2]; + const otherPoly = convexPolygons[ii]; + const x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1]; + if (otherFirstIndex !== firstIndex || otherSecondIndex !== lastIndex) continue; + if (_Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3) === winding && _Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY) === winding) { + otherPoly.length = 0; + otherIndices.length = 0; + polygon.push(x3, y3); + polygonIndices.push(otherLastIndex); + lastIndex = otherLastIndex; + prevPrevX = prevX; + prevPrevY = prevY; + prevX = x3; + prevY = y3; + ii = -1; + } + } + } + for (let i = convexPolygons.length - 1; i >= 0; i--) { + polygon = convexPolygons[i]; + if (polygon.length === 0) { + convexPolygons.splice(i, 1); + this.polygonPool.free(polygon); + polygonIndices = convexPolygonsIndices[i]; + convexPolygonsIndices.splice(i, 1); + this.polygonIndicesPool.free(polygonIndices); + } else + polygon.push(polygon[0], polygon[1]); + } + return convexPolygons; + } + static isConcave(index, vertexCount, vertices, indices) { + const previous = indices[index > 0 ? index - 1 : vertexCount - 1] << 1; + const current = indices[index] << 1; + const next = indices[index + 1 < vertexCount ? index + 1 : 0] << 1; + return !_Triangulator.positiveArea( + vertices[previous], + vertices[previous + 1], + vertices[current], + vertices[current + 1], + vertices[next], + vertices[next + 1] + ); + } + static positiveArea(p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; + } + static winding(p1x, p1y, p2x, p2y, p3x, p3y) { + return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0 ? 1 : -1; + } + }; + + // spine-core/src/SkeletonClipping.ts + var SkeletonClipping = class { + triangulator = null; + clippingPolygon = []; + clippingPolygons = []; + clipOutput = []; + clippedVertices = []; + /** An empty array unless {@link clipTrianglesUnpacked} was used. **/ + clippedUVs = []; + clippedTriangles = []; + inverseVertices = []; + _clippedVerticesTyped = new Float32Array(1024); + _clippedUVsTyped = new Float32Array(1024); + _clippedTrianglesTyped = new Uint16Array(1024); + clippedVerticesTyped = new Float32Array(0); + clippedUVsTyped = new Float32Array(0); + clippedTrianglesTyped = new Uint16Array(0); + clippedVerticesLength = 0; + clippedUVsLength = 0; + clippedTrianglesLength = 0; + scratch = []; + inverse = false; + clipAttachment = null; + clipStart(skeleton, slot, clip) { + if (this.clipAttachment) return; + const n = clip.worldVerticesLength; + this.clipAttachment = clip; + this.inverse = clip.inverse; + const vertices = Utils.setArraySize(this.clippingPolygon, n); + clip.computeWorldVertices(skeleton, slot, 0, n, vertices, 0, 2); + const clippingPolygon = this.clippingPolygon; + const convex = this.makeClockwise(clippingPolygon); + if (convex || this.inverse || clip.convex) { + if (!convex) this.makeConvex(clippingPolygon); + this.clippingPolygon.push(clippingPolygon[0], clippingPolygon[1]); + this.clippingPolygons.push(clippingPolygon); + } else { + if (this.triangulator === null) this.triangulator = new Triangulator(); + this.clippingPolygons.push(...this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon))); + } + } + clipEnd(slot) { + if (!this.clipAttachment) return; + if (slot && this.clipAttachment.endSlot !== slot.data) return; + this.clipAttachment = null; + this.clippingPolygons.length = 0; + } + isClipping() { + return this.clipAttachment != null; + } + clipTriangles(vertices, triangles, trianglesLength, uvs, light, dark, twoColor, stride) { + return uvs && light && dark && typeof twoColor === "boolean" && typeof stride === "number" ? this.clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor, stride) : this.clipTrianglesNoRender(vertices, triangles, trianglesLength); + } + clipTrianglesNoRender(vertices, triangles, trianglesLength) { + const clippedVertices = this.clippedVertices; + clippedVertices.length = 0; + const clippedTriangles = this.clippedTriangles; + clippedTriangles.length = 0; + let index = 0; + if (this.inverse) { + const polygon = this.clippingPolygons[0]; + for (let i = 0; i < trianglesLength; i += 3) { + let t = triangles[i] << 1; + const x1 = vertices[t], y1 = vertices[t + 1]; + t = triangles[i + 1] << 1; + const x2 = vertices[t], y2 = vertices[t + 1]; + t = triangles[i + 2] << 1; + const x3 = vertices[t], y3 = vertices[t + 1]; + this.clipInverse(x1, y1, x2, y2, x3, y3, polygon); + const iv = this.inverseVertices; + for (let offset = 0, nn = this.inverseVertices.length; offset < nn; ) { + const polygonSize = iv[offset++]; + let vertexCount = polygonSize >> 1, s = clippedVertices.length; + const cv = Utils.setArraySize(clippedVertices, s + polygonSize); + Utils.arrayCopy(iv, offset, cv, s, polygonSize); + s = clippedTriangles.length; + const ct = Utils.setArraySize(clippedTriangles, s + 3 * (vertexCount - 2)); + for (let ii = 1; ii < vertexCount - 1; ii++, s += 3) { + ct[s] = index; + ct[s + 1] = index + ii; + ct[s + 2] = index + ii + 1; + } + index += vertexCount; + offset += polygonSize; + } + } + return true; + } + const clipOutput = this.clipOutput; + const polygons = this.clippingPolygons; + const polygonsCount = polygons.length; + let clipOutputItems = null; + for (let i = 0; i < trianglesLength; i += 3) { + let t = triangles[i] << 1; + const x1 = vertices[t], y1 = vertices[t + 1]; + t = triangles[i + 1] << 1; + const x2 = vertices[t], y2 = vertices[t + 1]; + t = triangles[i + 2] << 1; + const x3 = vertices[t], y3 = vertices[t + 1]; + for (let p = 0; p < polygonsCount; p++) { + let s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p])) { + clipOutputItems = this.clipOutput; + const clipOutputLength = clipOutput.length; + if (clipOutputLength === 0) continue; + let clipOutputCount = clipOutputLength >> 1; + const cv = Utils.setArraySize(clippedVertices, s + clipOutputLength); + Utils.arrayCopy(clipOutputItems, 0, cv, s, clipOutputLength); + s = clippedTriangles.length; + const ct = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (let ii = 1; ii < clipOutputCount; ii++, s += 3) { + ct[s] = index; + ct[s + 1] = index + ii; + ct[s + 2] = index + ii + 1; + } + index += clipOutputCount; + } else { + const cv = Utils.setArraySize(clippedVertices, s + 3 * 2); + cv[s] = x1; + cv[s + 1] = y1; + cv[s + 2] = x2; + cv[s + 3] = y2; + cv[s + 4] = x3; + cv[s + 5] = y3; + s = clippedTriangles.length; + const ct = Utils.setArraySize(clippedTriangles, s + 3); + ct[s] = index; + ct[s + 1] = index + 1; + ct[s + 2] = index + 2; + index += 3; + break; + } + } + } + return clipOutputItems != null; + } + clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor, stride) { + const clippedVertices = this.clippedVertices; + clippedVertices.length = 0; + const clippedTriangles = this.clippedTriangles; + clippedTriangles.length = 0; + let index = 0; + if (this.inverse) { + const polygon = this.clippingPolygons[0]; + for (let i = 0; i < trianglesLength; i += 3) { + let t0 = triangles[i], t1 = triangles[i + 1], t2 = triangles[i + 2]; + const x1 = vertices[t0 * stride], y1 = vertices[t0 * stride + 1]; + const x2 = vertices[t1 * stride], y2 = vertices[t1 * stride + 1]; + const x3 = vertices[t2 * stride], y3 = vertices[t2 * stride + 1]; + this.clipInverse(x1, y1, x2, y2, x3, y3, polygon); + const nn = this.inverseVertices.length; + if (nn === 0) continue; + const u1 = uvs[t0 <<= 1], v1 = uvs[t0 + 1]; + const u2 = uvs[t1 <<= 1], v2 = uvs[t1 + 1]; + const u3 = uvs[t2 <<= 1], v3 = uvs[t2 + 1]; + const d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3)); + const iv = this.inverseVertices; + for (let offset = 0; offset < nn; ) { + const polygonSize = iv[offset++]; + const vertexCount = polygonSize >> 1; + let s = clippedVertices.length; + const cv = Utils.setArraySize(clippedVertices, s + vertexCount * stride); + for (let ii = 0; ii < polygonSize; ii += 2, s += stride) { + const x = iv[offset + ii], y = iv[offset + ii + 1]; + cv[s] = x; + cv[s + 1] = y; + cv[s + 2] = light.r; + cv[s + 3] = light.g; + cv[s + 4] = light.b; + cv[s + 5] = light.a; + const c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b; + cv[s + 6] = u1 * a + u2 * b + u3 * c; + cv[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + cv[s + 8] = dark.r; + cv[s + 9] = dark.g; + cv[s + 10] = dark.b; + cv[s + 11] = dark.a; + } + } + s = clippedTriangles.length; + const ct = Utils.setArraySize(clippedTriangles, s + 3 * (vertexCount - 2)); + for (let ii = 1; ii < vertexCount - 1; ii++, s += 3) { + ct[s] = index; + ct[s + 1] = index + ii; + ct[s + 2] = index + ii + 1; + } + index += vertexCount; + offset += polygonSize; + } + } + return true; + } + const clipOutput = this.clipOutput; + const polygons = this.clippingPolygons; + const polygonsCount = this.clippingPolygons.length; + let clipOutputItems = null; + for (let i = 0; i < trianglesLength; i += 3) { + let t = triangles[i]; + const x1 = vertices[t * stride], y1 = vertices[t * stride + 1]; + const u1 = uvs[t << 1], v1 = uvs[(t << 1) + 1]; + t = triangles[i + 1]; + const x2 = vertices[t * stride], y2 = vertices[t * stride + 1]; + const u2 = uvs[t << 1], v2 = uvs[(t << 1) + 1]; + t = triangles[i + 2]; + const x3 = vertices[t * stride], y3 = vertices[t * stride + 1]; + const u3 = uvs[t << 1], v3 = uvs[(t << 1) + 1]; + const d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3)); + for (let p = 0; p < polygonsCount; p++) { + let s = clippedVertices.length; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p])) { + clipOutputItems = this.clipOutput; + const clipOutputLength = clipOutput.length; + if (clipOutputLength === 0) continue; + let clipOutputCount = clipOutputLength >> 1; + const cv = Utils.setArraySize(clippedVertices, s + clipOutputCount * stride); + for (let ii = 0; ii < clipOutputLength; ii += 2, s += stride) { + const x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + cv[s] = x; + cv[s + 1] = y; + cv[s + 2] = light.r; + cv[s + 3] = light.g; + cv[s + 4] = light.b; + cv[s + 5] = light.a; + const c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b; + cv[s + 6] = u1 * a + u2 * b + u3 * c; + cv[s + 7] = v1 * a + v2 * b + v3 * c; + if (twoColor) { + cv[s + 8] = dark.r; + cv[s + 9] = dark.g; + cv[s + 10] = dark.b; + cv[s + 11] = dark.a; + } + } + s = clippedTriangles.length; + const ct = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2)); + clipOutputCount--; + for (let ii = 1; ii < clipOutputCount; ii++, s += 3) { + ct[s] = index; + ct[s + 1] = index + ii; + ct[s + 2] = index + ii + 1; + } + index += clipOutputCount + 1; + } else { + const cv = Utils.setArraySize(clippedVertices, s + 3 * stride); + cv[s] = x1; + cv[s + 1] = y1; + cv[s + 2] = light.r; + cv[s + 3] = light.g; + cv[s + 4] = light.b; + cv[s + 5] = light.a; + if (!twoColor) { + cv[s + 6] = u1; + cv[s + 7] = v1; + cv[s + 8] = x2; + cv[s + 9] = y2; + cv[s + 10] = light.r; + cv[s + 11] = light.g; + cv[s + 12] = light.b; + cv[s + 13] = light.a; + cv[s + 14] = u2; + cv[s + 15] = v2; + cv[s + 16] = x3; + cv[s + 17] = y3; + cv[s + 18] = light.r; + cv[s + 19] = light.g; + cv[s + 20] = light.b; + cv[s + 21] = light.a; + cv[s + 22] = u3; + cv[s + 23] = v3; + } else { + cv[s + 6] = u1; + cv[s + 7] = v1; + cv[s + 8] = dark.r; + cv[s + 9] = dark.g; + cv[s + 10] = dark.b; + cv[s + 11] = dark.a; + cv[s + 12] = x2; + cv[s + 13] = y2; + cv[s + 14] = light.r; + cv[s + 15] = light.g; + cv[s + 16] = light.b; + cv[s + 17] = light.a; + cv[s + 18] = u2; + cv[s + 19] = v2; + cv[s + 20] = dark.r; + cv[s + 21] = dark.g; + cv[s + 22] = dark.b; + cv[s + 23] = dark.a; + cv[s + 24] = x3; + cv[s + 25] = y3; + cv[s + 26] = light.r; + cv[s + 27] = light.g; + cv[s + 28] = light.b; + cv[s + 29] = light.a; + cv[s + 30] = u3; + cv[s + 31] = v3; + cv[s + 32] = dark.r; + cv[s + 33] = dark.g; + cv[s + 34] = dark.b; + cv[s + 35] = dark.a; + } + s = clippedTriangles.length; + const ct = Utils.setArraySize(clippedTriangles, s + 3); + ct[s] = index; + ct[s + 1] = index + 1; + ct[s + 2] = index + 2; + index += 3; + break; + } + } + } + return clipOutputItems != null; + } + clipTrianglesUnpacked(vertices, vertexStart, triangles, trianglesLength, uvs, stride = 2) { + let clippedVertices = this._clippedVerticesTyped; + let clippedUVs = this._clippedUVsTyped; + let clippedTriangles = this._clippedTrianglesTyped; + let index = 0; + this.clippedVerticesLength = 0; + this.clippedUVsLength = 0; + this.clippedTrianglesLength = 0; + if (this.inverse) { + const polygon = this.clippingPolygons[0]; + for (let i = 0; i < trianglesLength; i += 3) { + let v = triangles[i] * stride; + const x1 = vertices[vertexStart + v], y1 = vertices[vertexStart + v + 1]; + let uv = triangles[i] << 1; + const u1 = uvs[uv], v1 = uvs[uv + 1]; + v = triangles[i + 1] * stride; + const x2 = vertices[vertexStart + v], y2 = vertices[vertexStart + v + 1]; + uv = triangles[i + 1] << 1; + const u2 = uvs[uv], v2 = uvs[uv + 1]; + v = triangles[i + 2] * stride; + const x3 = vertices[vertexStart + v], y3 = vertices[vertexStart + v + 1]; + uv = triangles[i + 2] << 1; + const u3 = uvs[uv], v3 = uvs[uv + 1]; + this.clipInverse(x1, y1, x2, y2, x3, y3, polygon); + const nn = this.inverseVertices.length; + if (nn === 0) continue; + const d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3)); + const iv = this.inverseVertices; + for (let offset = 0; offset < nn; ) { + const polygonSize = iv[offset++]; + const vertexCount = polygonSize >> 1; + let s = this.clippedVerticesLength; + const newLength = s + vertexCount * stride; + const newUVLength = this.clippedUVsLength + vertexCount * 2; + if (clippedVertices.length < newLength) { + this._clippedVerticesTyped = new Float32Array(newLength * 2); + this._clippedVerticesTyped.set(clippedVertices.subarray(0, s)); + clippedVertices = this._clippedVerticesTyped; + } + if (clippedUVs.length < newUVLength) { + this._clippedUVsTyped = new Float32Array(newUVLength * 2); + this._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength)); + clippedUVs = this._clippedUVsTyped; + } + this.clippedVerticesLength = newLength; + this.clippedUVsLength = newUVLength; + const cv = this._clippedVerticesTyped; + const cu = this._clippedUVsTyped; + let uvIndex = newUVLength - vertexCount * 2; + for (let ii = 0; ii < polygonSize; ii += 2, s += stride, uvIndex += 2) { + const x = iv[offset + ii], y = iv[offset + ii + 1]; + cv[s] = x; + cv[s + 1] = y; + const c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b; + cu[uvIndex] = u1 * a + u2 * b + u3 * c; + cu[uvIndex + 1] = v1 * a + v2 * b + v3 * c; + } + s = this.clippedTrianglesLength; + const newLengthTriangles = s + 3 * (vertexCount - 2); + if (clippedTriangles.length < newLengthTriangles) { + this._clippedTrianglesTyped = new Uint16Array(newLengthTriangles * 2); + this._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s)); + clippedTriangles = this._clippedTrianglesTyped; + } + this.clippedTrianglesLength = newLengthTriangles; + const ct = clippedTriangles; + for (let ii = 1; ii < vertexCount - 1; ii++, s += 3) { + ct[s] = index; + ct[s + 1] = index + ii; + ct[s + 2] = index + ii + 1; + } + index += vertexCount; + offset += polygonSize; + } + } + return true; + } + const clipOutput = this.clipOutput; + const polygons = this.clippingPolygons; + const polygonsCount = this.clippingPolygons.length; + let clipOutputItems = null; + for (let i = 0; i < trianglesLength; i += 3) { + let t = triangles[i]; + let v = t * stride; + const x1 = vertices[vertexStart + v], y1 = vertices[vertexStart + v + 1]; + let uv = t << 1; + const u1 = uvs[uv], v1 = uvs[uv + 1]; + t = triangles[i + 1]; + v = t * stride; + const x2 = vertices[vertexStart + v], y2 = vertices[vertexStart + v + 1]; + uv = t << 1; + const u2 = uvs[uv], v2 = uvs[uv + 1]; + t = triangles[i + 2]; + v = t * stride; + const x3 = vertices[vertexStart + v], y3 = vertices[vertexStart + v + 1]; + uv = t << 1; + const u3 = uvs[uv], v3 = uvs[uv + 1]; + const d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3)); + for (let p = 0; p < polygonsCount; p++) { + let s = this.clippedVerticesLength; + if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p])) { + clipOutputItems = clipOutput; + const clipOutputLength = clipOutput.length; + if (clipOutputLength === 0) continue; + let clipOutputCount = clipOutputLength >> 1; + const newLength = s + clipOutputCount * stride; + if (clippedVertices.length < newLength) { + this._clippedVerticesTyped = new Float32Array(newLength * 2); + this._clippedVerticesTyped.set(clippedVertices.subarray(0, s)); + this._clippedUVsTyped = new Float32Array((this.clippedUVsLength + clipOutputCount * 2) * 2); + this._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength)); + clippedVertices = this._clippedVerticesTyped; + clippedUVs = this._clippedUVsTyped; + } + const cv = clippedVertices; + const cu = clippedUVs; + this.clippedVerticesLength = newLength; + let uvIndex = this.clippedUVsLength; + this.clippedUVsLength = uvIndex + clipOutputCount * 2; + for (let ii = 0; ii < clipOutputLength; ii += 2, s += stride, uvIndex += 2) { + const x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; + cv[s] = x; + cv[s + 1] = y; + const c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b; + cu[uvIndex] = u1 * a + u2 * b + u3 * c; + cu[uvIndex + 1] = v1 * a + v2 * b + v3 * c; + } + s = this.clippedTrianglesLength; + const newLengthTriangles = s + 3 * (clipOutputCount - 2); + if (clippedTriangles.length < newLengthTriangles) { + this._clippedTrianglesTyped = new Uint16Array(newLengthTriangles * 2); + this._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s)); + clippedTriangles = this._clippedTrianglesTyped; + } + this.clippedTrianglesLength = newLengthTriangles; + const ct = clippedTriangles; + clipOutputCount--; + for (let ii = 1; ii < clipOutputCount; ii++, s += 3) { + ct[s] = index; + ct[s + 1] = index + ii; + ct[s + 2] = index + ii + 1; + } + index += clipOutputCount + 1; + } else { + let newLength = s + 3 * stride; + if (clippedVertices.length < newLength) { + this._clippedVerticesTyped = new Float32Array(newLength * 2); + this._clippedVerticesTyped.set(clippedVertices.subarray(0, s)); + clippedVertices = this._clippedVerticesTyped; + } + clippedVertices[s] = x1; + clippedVertices[s + 1] = y1; + clippedVertices[s + stride] = x2; + clippedVertices[s + stride + 1] = y2; + clippedVertices[s + stride * 2] = x3; + clippedVertices[s + stride * 2 + 1] = y3; + const uvLength = this.clippedUVsLength + 3 * 2; + if (clippedUVs.length < uvLength) { + this._clippedUVsTyped = new Float32Array(uvLength * 2); + this._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength)); + clippedUVs = this._clippedUVsTyped; + } + const uvIndex = this.clippedUVsLength; + clippedUVs[uvIndex] = u1; + clippedUVs[uvIndex + 1] = v1; + clippedUVs[uvIndex + 2] = u2; + clippedUVs[uvIndex + 3] = v2; + clippedUVs[uvIndex + 4] = u3; + clippedUVs[uvIndex + 5] = v3; + this.clippedVerticesLength = newLength; + this.clippedUVsLength = uvLength; + s = this.clippedTrianglesLength; + newLength = s + 3; + if (clippedTriangles.length < newLength) { + this._clippedTrianglesTyped = new Uint16Array(newLength * 2); + this._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s)); + clippedTriangles = this._clippedTrianglesTyped; + } + const ct = clippedTriangles; + ct[s] = index; + ct[s + 1] = index + 1; + ct[s + 2] = index + 2; + index += 3; + this.clippedTrianglesLength = newLength; + break; + } + } + } + this.clippedVerticesTyped = this._clippedVerticesTyped.subarray(0, this.clippedVerticesLength); + this.clippedUVsTyped = this._clippedUVsTyped.subarray(0, this.clippedUVsLength); + this.clippedTrianglesTyped = this._clippedTrianglesTyped.subarray(0, this.clippedTrianglesLength); + return clipOutputItems !== null; + } + clip(x1, y1, x2, y2, x3, y3, polygon) { + const originalOutput = this.clipOutput; + let clipped = false; + let input, output; + if (polygon.length % 4 >= 2) { + input = this.clipOutput; + output = this.scratch; + } else { + input = this.scratch; + output = this.clipOutput; + } + const v = polygon; + input.length = 8; + const iv = input; + iv[0] = x1; + iv[1] = y1; + iv[2] = x2; + iv[3] = y2; + iv[4] = x3; + iv[5] = y3; + iv[6] = x1; + iv[7] = y1; + output.length = 0; + const last = polygon.length - 4; + for (let i = 0; ; i += 2) { + const edgeX = v[i], edgeY = v[i + 1], ex = edgeX - v[i + 2], ey = edgeY - v[i + 3]; + const outputStart = output.length; + const iv2 = input; + for (let ii = 0, nn = input.length - 2; ii < nn; ) { + x1 = iv2[ii]; + y1 = iv2[ii + 1]; + ii += 2; + x2 = iv2[ii]; + y2 = iv2[ii + 1]; + const s2 = ey * (edgeX - x2) > ex * (edgeY - y2); + const s1 = ey * (edgeX - x1) - ex * (edgeY - y1); + if (s1 > 0) { + if (s2) + output.push(x2, y2); + else { + const ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex); + if (t >= 0 && t <= 1) { + output.push(x1 + ix * t, y1 + iy * t); + clipped = true; + } else + output.push(x2, y2); + } + } else if (s2) { + const ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex); + if (t >= 0 && t <= 1) { + output.push(x1 + ix * t, y1 + iy * t, x2, y2); + clipped = true; + } else + output.push(x2, y2); + } else + clipped = true; + } + if (outputStart === output.length) { + originalOutput.length = 0; + return true; + } + output.push(output[0], output[1]); + if (i === last) break; + const temp = output; + output = input; + output.length = 0; + input = temp; + } + if (originalOutput !== output) { + originalOutput.length = 0; + for (let i = 0, n = output.length - 2; i < n; i++) + originalOutput[i] = output[i]; + } else + originalOutput.length = originalOutput.length - 2; + return clipped; + } + clipInverse(x1, y1, x2, y2, x3, y3, polygon) { + this.inverseVertices.length = 0; + const vLast = polygon.length - 4; + let input, output; + if (polygon.length % 4 >= 2) { + input = this.clipOutput; + output = this.scratch; + } else { + input = this.scratch; + output = this.clipOutput; + } + input.length = 8; + let v = polygon, iv = input; + iv[0] = x1; + iv[1] = y1; + iv[2] = x2; + iv[3] = y2; + iv[4] = x3; + iv[5] = y3; + iv[6] = x1; + iv[7] = y1; + output.length = 0; + for (let i = 0; ; i += 2) { + const edgeX = v[i], edgeY = v[i + 1], ex = edgeX - v[i + 2], ey = edgeY - v[i + 3]; + const outputStart = output.length, fragmentStart = this.inverseVertices.length; + this.inverseVertices.push(0); + iv = input; + for (let ii = 0, nn = input.length - 2; ii < nn; ) { + x1 = iv[ii]; + y1 = iv[ii + 1]; + ii += 2; + x2 = iv[ii]; + y2 = iv[ii + 1]; + const s2 = ey * (edgeX - x2) > ex * (edgeY - y2); + const s1 = ey * (edgeX - x1) - ex * (edgeY - y1); + if (s1 > 0) { + if (s2) + output.push(x2, y2); + else { + const ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex); + if (t >= 0 && t <= 1) { + const cx = x1 + ix * t, cy = y1 + iy * t; + output.push(cx, cy); + this.inverseVertices.push(cx, cy, x2, y2); + } else + output.push(x2, y2); + } + } else if (s2) { + const dx = x2 - x1, dy = y2 - y1, t = s1 / (dx * ey - dy * ex); + if (t >= 0 && t <= 1) { + const cx = x1 + dx * t, cy = y1 + dy * t; + this.inverseVertices.push(cx, cy); + output.push(cx, cy, x2, y2); + } else + output.push(x2, y2); + } else + this.inverseVertices.push(x2, y2); + } + const fragmentSize = this.inverseVertices.length - fragmentStart - 1; + if (fragmentSize >= 6) + this.inverseVertices[fragmentStart] = fragmentSize; + else + this.inverseVertices.length = fragmentStart; + if (outputStart === output.length) break; + output.push(output[0], output[1]); + if (i === vLast) break; + const temp = output; + output = input; + output.length = 0; + input = temp; + } + } + makeClockwise(polygon) { + const v = polygon; + const n = polygon.length; + let noCW = true, noCCW = true; + let area = 0, prevX = v[n - 2], prevY = v[n - 1], currX = v[0], currY = v[1]; + for (let i = 2; i < n; i += 2) { + const nextX = v[i], nextY = v[i + 1]; + area += currX * nextY - nextX * currY; + const cross2 = (currX - prevX) * (nextY - currY) - (currY - prevY) * (nextX - currX); + noCCW = noCCW && cross2 <= 0; + noCW = noCW && cross2 >= 0; + prevX = currX; + prevY = currY; + currX = nextX; + currY = nextY; + } + area += currX * v[1] - v[0] * currY; + const cross = (currX - prevX) * (v[1] - currY) - (currY - prevY) * (v[0] - currX); + noCCW = noCCW && cross <= 0; + noCW = noCW && cross >= 0; + if (area >= 0) { + for (let i = 0, lastX = n - 2, half = n >> 1; i < half; i += 2) { + const x = v[i], y = v[i + 1]; + const other = lastX - i; + v[i] = v[other]; + v[i + 1] = v[other + 1]; + v[other] = x; + v[other + 1] = y; + } + return noCW; + } + return noCCW; + } + makeConvex(polygon) { + const n = polygon.length; + const v = polygon; + this.clipOutput.length = n; + const sorted = this.clipOutput; + sorted[0] = v[0]; + sorted[1] = v[1]; + for (let i = 2; i < n; i += 2) { + const x = v[i], y = v[i + 1]; + let p = i - 2; + for (; p >= 0 && (sorted[p] > x || sorted[p] === x && sorted[p + 1] > y); p -= 2) { + sorted[p + 2] = sorted[p]; + sorted[p + 3] = sorted[p + 1]; + } + sorted[p + 2] = x; + sorted[p + 3] = y; + } + v[0] = sorted[0]; + v[1] = sorted[1]; + v[2] = sorted[2]; + v[3] = sorted[3]; + let s = 4; + for (let i = 4; i < n; i += 2, s += 2) { + const x = sorted[i], y = sorted[i + 1]; + while ((v[s - 2] - v[s - 4]) * (y - v[s - 3]) - (v[s - 1] - v[s - 3]) * (x - v[s - 4]) >= 0) { + s -= 2; + if (s === 2) break; + } + v[s] = x; + v[s + 1] = y; + } + v[s] = sorted[n - 4]; + v[s + 1] = sorted[n - 3]; + const t = s; + s += 2; + for (let i = n - 6; i >= 0; i -= 2, s += 2) { + const x = sorted[i], y = sorted[i + 1]; + while ((v[s - 2] - v[s - 4]) * (y - v[s - 3]) - (v[s - 1] - v[s - 3]) * (x - v[s - 4]) >= 0) { + s -= 2; + if (s === t) break; + } + v[s] = x; + v[s + 1] = y; + } + polygon.length = s - 2; + } + }; + + // spine-core/src/SkeletonJson.ts + var SkeletonJson = class { + attachmentLoader; + /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at + * runtime than were used in Spine. + * + * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */ + scale = 1; + linkedMeshes = []; + constructor(attachmentLoader) { + this.attachmentLoader = attachmentLoader; + } + // biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema + readSkeletonData(json) { + const scale = this.scale; + const skeletonData = new SkeletonData(); + const root = typeof json === "string" ? JSON.parse(json) : json; + const skeletonMap = root.skeleton; + if (skeletonMap) { + skeletonData.hash = skeletonMap.hash; + skeletonData.version = skeletonMap.spine; + skeletonData.x = skeletonMap.x; + skeletonData.y = skeletonMap.y; + skeletonData.width = skeletonMap.width; + skeletonData.height = skeletonMap.height; + skeletonData.referenceScale = getValue(skeletonMap, "referenceScale", 100) * scale; + skeletonData.fps = skeletonMap.fps; + skeletonData.imagesPath = skeletonMap.images ?? null; + skeletonData.audioPath = skeletonMap.audio ?? null; + } + if (root.bones) { + for (let i = 0; i < root.bones.length; i++) { + const boneMap = root.bones[i]; + let parent = null; + const parentName = getValue(boneMap, "parent", null); + if (parentName) parent = skeletonData.findBone(parentName); + const data = new BoneData(skeletonData.bones.length, boneMap.name, parent); + data.length = getValue(boneMap, "length", 0) * scale; + const setup = data.setupPose; + setup.x = getValue(boneMap, "x", 0) * scale; + setup.y = getValue(boneMap, "y", 0) * scale; + setup.rotation = getValue(boneMap, "rotation", 0); + setup.scaleX = getValue(boneMap, "scaleX", 1); + setup.scaleY = getValue(boneMap, "scaleY", 1); + setup.shearX = getValue(boneMap, "shearX", 0); + setup.shearY = getValue(boneMap, "shearY", 0); + setup.inherit = Utils.enumValue(Inherit, getValue(boneMap, "inherit", "Normal")); + data.skinRequired = getValue(boneMap, "skin", false); + const color = getValue(boneMap, "color", null); + if (color) data.color.setFromString(color); + data.icon = getValue(boneMap, "icon", void 0); + data.iconSize = getValue(boneMap, "iconSize", 1); + data.iconRotation = getValue(boneMap, "iconRotation", 0); + skeletonData.bones.push(data); + } + } + if (root.slots) { + for (let i = 0; i < root.slots.length; i++) { + const slotMap = root.slots[i]; + const slotName = slotMap.name; + const boneData = skeletonData.findBone(slotMap.bone); + if (!boneData) throw new Error(`Couldn't find bone ${slotMap.bone} for slot ${slotName}`); + const data = new SlotData(skeletonData.slots.length, slotName, boneData); + const color = getValue(slotMap, "color", null); + if (color) data.setupPose.color.setFromString(color); + const dark = getValue(slotMap, "dark", null); + if (dark) data.setupPose.darkColor = Color.fromString(dark); + data.attachmentName = getValue(slotMap, "attachment", null); + data.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, "blend", "normal")); + data.visible = getValue(slotMap, "visible", true); + skeletonData.slots.push(data); + } + } + if (root.constraints) { + for (const constraintMap of root.constraints) { + const name = constraintMap.name; + const skinRequired = getValue(constraintMap, "skin", false); + switch (getValue(constraintMap, "type", false)) { + case "ik": { + const data = new IkConstraintData(name); + data.skinRequired = skinRequired; + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + const bone = skeletonData.findBone(constraintMap.bones[ii]); + if (!bone) throw new Error(`Couldn't find bone ${constraintMap.bones[ii]} for IK constraint ${name}.`); + data.bones.push(bone); + } + const targetName = constraintMap.target; + const target = skeletonData.findBone(targetName); + if (!target) throw new Error(`Couldn't find target bone ${targetName} for IK constraint ${name}.`); + data.target = target; + const scaleY = getValue(constraintMap, "scaleY", null); + if (scaleY != null) data.scaleYMode = Utils.enumValue(ScaleYMode, scaleY); + const setup = data.setupPose; + setup.mix = getValue(constraintMap, "mix", 1); + setup.softness = getValue(constraintMap, "softness", 0) * scale; + setup.bendDirection = getValue(constraintMap, "bendPositive", true) ? 1 : -1; + setup.compress = getValue(constraintMap, "compress", false); + setup.stretch = getValue(constraintMap, "stretch", false); + skeletonData.constraints.push(data); + break; + } + case "transform": { + const data = new TransformConstraintData(name); + data.skinRequired = skinRequired; + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + const boneName = constraintMap.bones[ii]; + const bone = skeletonData.findBone(boneName); + if (!bone) throw new Error(`Couldn't find bone ${boneName} for transform constraint ${constraintMap.name}.`); + data.bones.push(bone); + } + const sourceName = constraintMap.source; + const source = skeletonData.findBone(sourceName); + if (!source) throw new Error(`Couldn't find source bone ${sourceName} for transform constraint ${constraintMap.name}.`); + data.source = source; + data.localSource = getValue(constraintMap, "localSource", false); + data.localTarget = getValue(constraintMap, "localTarget", false); + data.additive = getValue(constraintMap, "additive", false); + data.clamp = getValue(constraintMap, "clamp", false); + let rotate = false, x = false, y = false, scaleX = false, scaleY = false, shearY = false; + const fromEntries = Object.entries(getValue(constraintMap, "properties", {})); + for (const [name2, fromEntry] of fromEntries) { + const from = this.fromProperty(name2); + const fromScale = this.propertyScale(name2, scale); + from.offset = getValue(fromEntry, "offset", 0) * fromScale; + const toEntries = Object.entries(getValue(fromEntry, "to", {})); + for (const [name3, toEntry] of toEntries) { + let toScale = 1; + let to; + switch (name3) { + case "rotate": { + rotate = true; + to = new ToRotate(); + break; + } + case "x": { + x = true; + to = new ToX(); + toScale = scale; + break; + } + case "y": { + y = true; + to = new ToY(); + toScale = scale; + break; + } + case "scaleX": { + scaleX = true; + to = new ToScaleX(); + break; + } + case "scaleY": { + scaleY = true; + to = new ToScaleY(); + break; + } + case "shearY": { + shearY = true; + to = new ToShearY(); + break; + } + default: + throw new Error(`Invalid transform constraint to property: ${name3}`); + } + to.offset = getValue(toEntry, "offset", 0) * toScale; + to.max = getValue(toEntry, "max", 1) * toScale; + to.scale = getValue(toEntry, "scale", 1) * toScale / fromScale; + from.to.push(to); + } + if (from.to.length > 0) data.properties.push(from); + } + data.offsets[TransformConstraintData.ROTATION] = getValue(constraintMap, "rotation", 0); + data.offsets[TransformConstraintData.X] = getValue(constraintMap, "x", 0) * scale; + data.offsets[TransformConstraintData.Y] = getValue(constraintMap, "y", 0) * scale; + data.offsets[TransformConstraintData.SCALEX] = getValue(constraintMap, "scaleX", 0); + data.offsets[TransformConstraintData.SCALEY] = getValue(constraintMap, "scaleY", 0); + data.offsets[TransformConstraintData.SHEARY] = getValue(constraintMap, "shearY", 0); + const setup = data.setupPose; + if (rotate) setup.mixRotate = getValue(constraintMap, "mixRotate", 1); + if (x) setup.mixX = getValue(constraintMap, "mixX", 1); + if (y) setup.mixY = getValue(constraintMap, "mixY", setup.mixX); + if (scaleX) setup.mixScaleX = getValue(constraintMap, "mixScaleX", 1); + if (scaleY) setup.mixScaleY = getValue(constraintMap, "mixScaleY", setup.mixScaleX); + if (shearY) setup.mixShearY = getValue(constraintMap, "mixShearY", 1); + skeletonData.constraints.push(data); + break; + } + case "path": { + const data = new PathConstraintData(name); + data.skinRequired = skinRequired; + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + const boneName = constraintMap.bones[ii]; + const bone = skeletonData.findBone(boneName); + if (!bone) throw new Error(`Couldn't find bone ${boneName} for path constraint ${constraintMap.name}.`); + data.bones.push(bone); + } + const slotName = constraintMap.slot; + const slot = skeletonData.findSlot(slotName); + if (!slot) throw new Error(`Couldn't find slot ${slotName} for path constraint ${constraintMap.name}.`); + data.slot = slot; + data.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, "positionMode", "Percent")); + data.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, "spacingMode", "Length")); + data.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, "rotateMode", "Tangent")); + data.offsetRotation = getValue(constraintMap, "rotation", 0); + const setup = data.setupPose; + setup.position = getValue(constraintMap, "position", 0); + if (data.positionMode === 0 /* Fixed */) setup.position *= scale; + setup.spacing = getValue(constraintMap, "spacing", 0); + if (data.spacingMode === 0 /* Length */ || data.spacingMode === 1 /* Fixed */) setup.spacing *= scale; + setup.mixRotate = getValue(constraintMap, "mixRotate", 1); + setup.mixX = getValue(constraintMap, "mixX", 1); + setup.mixY = getValue(constraintMap, "mixY", setup.mixX); + skeletonData.constraints.push(data); + break; + } + case "physics": { + const data = new PhysicsConstraintData(name); + data.skinRequired = skinRequired; + const boneName = constraintMap.bone; + const bone = skeletonData.findBone(boneName); + if (bone == null) throw new Error(`Physics bone not found: ${boneName}`); + data.bone = bone; + data.x = getValue(constraintMap, "x", 0); + data.y = getValue(constraintMap, "y", 0); + data.rotate = getValue(constraintMap, "rotate", 0); + data.scaleX = getValue(constraintMap, "scaleX", 0); + const scaleY = getValue(constraintMap, "scaleY", null); + if (scaleY != null) data.scaleYMode = Utils.enumValue(ScaleYMode, scaleY); + data.shearX = getValue(constraintMap, "shearX", 0); + data.limit = getValue(constraintMap, "limit", 5e3) * scale; + data.step = 1 / getValue(constraintMap, "fps", 60); + const setup = data.setupPose; + setup.inertia = getValue(constraintMap, "inertia", 0.5); + setup.strength = getValue(constraintMap, "strength", 100); + setup.damping = getValue(constraintMap, "damping", 0.85); + setup.massInverse = 1 / getValue(constraintMap, "mass", 1); + setup.wind = getValue(constraintMap, "wind", 0); + setup.gravity = getValue(constraintMap, "gravity", 0); + setup.mix = getValue(constraintMap, "mix", 1); + data.inertiaGlobal = getValue(constraintMap, "inertiaGlobal", false); + data.strengthGlobal = getValue(constraintMap, "strengthGlobal", false); + data.dampingGlobal = getValue(constraintMap, "dampingGlobal", false); + data.massGlobal = getValue(constraintMap, "massGlobal", false); + data.windGlobal = getValue(constraintMap, "windGlobal", false); + data.gravityGlobal = getValue(constraintMap, "gravityGlobal", false); + data.mixGlobal = getValue(constraintMap, "mixGlobal", false); + skeletonData.constraints.push(data); + break; + } + case "slider": { + const data = new SliderData(name); + data.skinRequired = skinRequired; + data.additive = getValue(constraintMap, "additive", false); + data.loop = getValue(constraintMap, "loop", false); + data.setupPose.time = getValue(constraintMap, "time", 0); + data.setupPose.mix = getValue(constraintMap, "mix", 1); + const boneName = constraintMap.bone; + if (boneName) { + data.bone = skeletonData.findBone(boneName); + if (!data.bone) throw new Error(`Slider bone not found: ${boneName}`); + const property = constraintMap.property; + data.property = this.fromProperty(property); + const propertyScale = this.propertyScale(property, scale); + data.property.offset = getValue(constraintMap, "from", 0) * propertyScale; + data.offset = getValue(constraintMap, "to", 0); + data.scale = getValue(constraintMap, "scale", 1) / propertyScale; + data.local = getValue(constraintMap, "local", false); + } + skeletonData.constraints.push(data); + break; + } + } + } + } + if (root.skins) { + for (let i = 0; i < root.skins.length; i++) { + const skinMap = root.skins[i]; + const skin = new Skin(skinMap.name); + if (skinMap.bones) { + for (let ii = 0; ii < skinMap.bones.length; ii++) { + const boneName = skinMap.bones[ii]; + const bone = skeletonData.findBone(boneName); + if (!bone) throw new Error(`Couldn't find bone ${boneName} for skin ${skinMap.name}.`); + skin.bones.push(bone); + } + } + if (skinMap.ik) { + for (let ii = 0; ii < skinMap.ik.length; ii++) { + const constraintName = skinMap.ik[ii]; + const constraint = skeletonData.findConstraint(constraintName, IkConstraintData); + if (!constraint) throw new Error(`Couldn't find IK constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + if (skinMap.transform) { + for (let ii = 0; ii < skinMap.transform.length; ii++) { + const constraintName = skinMap.transform[ii]; + const constraint = skeletonData.findConstraint(constraintName, TransformConstraintData); + if (!constraint) throw new Error(`Couldn't find transform constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + if (skinMap.path) { + for (let ii = 0; ii < skinMap.path.length; ii++) { + const constraintName = skinMap.path[ii]; + const constraint = skeletonData.findConstraint(constraintName, PathConstraintData); + if (!constraint) throw new Error(`Couldn't find path constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + if (skinMap.physics) { + for (let ii = 0; ii < skinMap.physics.length; ii++) { + const constraintName = skinMap.physics[ii]; + const constraint = skeletonData.findConstraint(constraintName, PhysicsConstraintData); + if (!constraint) throw new Error(`Couldn't find physics constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + if (skinMap.slider) { + for (let ii = 0; ii < skinMap.slider.length; ii++) { + const constraintName = skinMap.slider[ii]; + const constraint = skeletonData.findConstraint(constraintName, SliderData); + if (!constraint) throw new Error(`Couldn't find slider constraint ${constraintName} for skin ${skinMap.name}.`); + skin.constraints.push(constraint); + } + } + for (const slotName in skinMap.attachments) { + const slot = skeletonData.findSlot(slotName); + if (!slot) throw new Error(`Couldn't find skin slot ${slotName} for skin ${skinMap.name}.`); + const slotMap = skinMap.attachments[slotName]; + for (const entryName in slotMap) { + const attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); + if (attachment) skin.setAttachment(slot.index, entryName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name === "default") skeletonData.defaultSkin = skin; + } + } + for (let i = 0, n = this.linkedMeshes.length; i < n; i++) { + const linkedMesh = this.linkedMeshes[i]; + const skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (!skin) throw new Error(`Skin not found: ${linkedMesh.skin}`); + const source = skin.getAttachment(linkedMesh.sourceIndex, linkedMesh.source); + if (!source) throw new Error(`Source mesh not found: ${linkedMesh.source}`); + linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimelines ? source : linkedMesh.mesh; + linkedMesh.mesh.setSourceMesh(source); + linkedMesh.mesh.updateSequence(); + outer: + if (linkedMesh.inheritTimelines && linkedMesh.slotIndex !== linkedMesh.sourceIndex) { + const slots = source.timelineSlots; + for (const existing of slots) + if (existing === linkedMesh.slotIndex) break outer; + const newSlots = [...slots]; + newSlots[slots.length] = linkedMesh.slotIndex; + source.timelineSlots = newSlots; + } + } + this.linkedMeshes.length = 0; + if (root.events) { + for (const eventName in root.events) { + const eventMap = root.events[eventName]; + const data = new EventData(eventName); + const setup = data.setupPose; + setup.intValue = getValue(eventMap, "int", 0); + setup.floatValue = getValue(eventMap, "float", 0); + setup.stringValue = getValue(eventMap, "string", ""); + data._audioPath = getValue(eventMap, "audio", null); + if (data.audioPath) { + setup.volume = getValue(eventMap, "volume", setup.volume); + setup.balance = getValue(eventMap, "balance", setup.balance); + } + skeletonData.events.push(data); + } + } + if (root.animations) { + for (const animationName in root.animations) { + const animationMap = root.animations[animationName]; + this.readAnimation(animationMap, animationName, skeletonData); + } + } + if (root.constraints) { + for (const animationName in root.constraints) { + const animationMap = root.constraints[animationName]; + if (animationMap.type === "slider") { + const data = skeletonData.findConstraint(animationMap.name, SliderData); + const animationName2 = animationMap.animation; + const animation = skeletonData.findAnimation(animationName2); + if (!animation) throw new Error(`Slider animation not found: ${animationName2}`); + data.animation = animation; + } + } + } + return skeletonData; + } + fromProperty(type) { + let from; + switch (type) { + case "rotate": + from = new FromRotate(); + break; + case "x": + from = new FromX(); + break; + case "y": + from = new FromY(); + break; + case "scaleX": + from = new FromScaleX(); + break; + case "scaleY": + from = new FromScaleY(); + break; + case "shearY": + from = new FromShearY(); + break; + default: + throw new Error(`Invalid transform constraint from property: ${type}`); + } + return from; + } + propertyScale(type, scale) { + switch (type) { + case "x": + case "y": + return scale; + default: + return 1; + } + } + // biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema + readAttachment(map, skin, slotIndex, placeholder, skeletonData) { + const scale = this.scale; + const name = getValue(map, "name", placeholder); + switch (getValue(map, "type", "region")) { + case "region": { + const path = getValue(map, "path", name); + const sequence = this.readSequence(getValue(map, "sequence", null)); + const region = this.attachmentLoader.newRegionAttachment(skin, placeholder, name, path, sequence); + if (!region) return null; + region.path = path; + region.x = getValue(map, "x", 0) * scale; + region.y = getValue(map, "y", 0) * scale; + region.scaleX = getValue(map, "scaleX", 1); + region.scaleY = getValue(map, "scaleY", 1); + region.rotation = getValue(map, "rotation", 0); + region.width = map.width * scale; + region.height = map.height * scale; + const color = getValue(map, "color", null); + if (color) region.color.setFromString(color); + region.updateSequence(); + return region; + } + case "boundingbox": { + const box = this.attachmentLoader.newBoundingBoxAttachment(skin, placeholder, name); + if (!box) return null; + this.readVertices(map, box, map.vertexCount << 1); + const color = getValue(map, "color", null); + if (color) box.color.setFromString(color); + return box; + } + case "mesh": + case "linkedmesh": { + const path = getValue(map, "path", name); + const sequence = this.readSequence(getValue(map, "sequence", null)); + const mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence); + if (!mesh) return null; + mesh.path = path; + const color = getValue(map, "color", null); + if (color) mesh.color.setFromString(color); + mesh.width = getValue(map, "width", 0) * scale; + mesh.height = getValue(map, "height", 0) * scale; + const source = getValue(map, "source", null); + if (source) { + let sourceIndex = slotIndex; + const slot = getValue(map, "slot", null); + if (slot) { + const sourceSlot = skeletonData.findSlot(slot); + if (!sourceSlot) throw new Error(`Source mesh slot not found: ${slot}`); + sourceIndex = sourceSlot.index; + } + this.linkedMeshes.push(new LinkedMesh2( + mesh, + getValue(map, "skin", null), + slotIndex, + sourceIndex, + source, + getValue(map, "timelines", true) + )); + return mesh; + } + const uvs = map.uvs; + this.readVertices(map, mesh, uvs.length); + mesh.triangles = map.triangles; + mesh.regionUVs = uvs; + mesh.edges = getValue(map, "edges", null); + mesh.hullLength = getValue(map, "hull", 0) * 2; + mesh.updateSequence(); + return mesh; + } + case "path": { + const path = this.attachmentLoader.newPathAttachment(skin, placeholder, name); + if (!path) return null; + path.closed = getValue(map, "closed", false); + path.constantSpeed = getValue(map, "constantSpeed", true); + const vertexCount = map.vertexCount; + this.readVertices(map, path, vertexCount << 1); + const lengths = Utils.newArray(vertexCount / 3, 0); + for (let i = 0; i < map.lengths.length; i++) + lengths[i] = map.lengths[i] * scale; + path.lengths = lengths; + const color = getValue(map, "color", null); + if (color) path.color.setFromString(color); + return path; + } + case "point": { + const point = this.attachmentLoader.newPointAttachment(skin, placeholder, name); + if (!point) return null; + point.x = getValue(map, "x", 0) * scale; + point.y = getValue(map, "y", 0) * scale; + point.rotation = getValue(map, "rotation", 0); + const color = getValue(map, "color", null); + if (color) point.color.setFromString(color); + return point; + } + case "clipping": { + const clip = this.attachmentLoader.newClippingAttachment(skin, placeholder, name); + if (!clip) return null; + const end = getValue(map, "end", null); + if (end) clip.endSlot = skeletonData.findSlot(end); + clip.convex = getValue(map, "convex", false); + clip.inverse = getValue(map, "inverse", false); + const vertexCount = map.vertexCount; + this.readVertices(map, clip, vertexCount << 1); + const color = getValue(map, "color", null); + if (color) clip.color.setFromString(color); + return clip; + } + } + return null; + } + readSequence(map) { + if (map == null) return new Sequence(1, false); + const sequence = new Sequence(getValue(map, "count", 0), true); + sequence.start = getValue(map, "start", 1); + sequence.digits = getValue(map, "digits", 0); + sequence.setupIndex = getValue(map, "setup", 0); + return sequence; + } + // biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema + readVertices(map, attachment, verticesLength) { + const scale = this.scale; + attachment.worldVerticesLength = verticesLength; + const vertices = map.vertices; + if (verticesLength === vertices.length) { + const scaledVertices = Utils.toFloatArray(vertices); + if (scale !== 1) { + for (let i = 0, n = vertices.length; i < n; i++) + scaledVertices[i] *= scale; + } + attachment.vertices = scaledVertices; + return; + } + const weights = []; + const bones = []; + for (let i = 0, n = vertices.length; i < n; ) { + const boneCount = vertices[i++]; + bones.push(boneCount); + for (let nn = i + boneCount * 4; i < nn; i += 4) { + bones.push(vertices[i]); + weights.push(vertices[i + 1] * scale); + weights.push(vertices[i + 2] * scale); + weights.push(vertices[i + 3]); + } + } + attachment.bones = bones; + attachment.vertices = Utils.toFloatArray(weights); + } + // biome-ignore lint/suspicious/noExplicitAny: it is any untile we define a schema + readAnimation(map, name, skeletonData) { + const scale = this.scale; + const timelines = []; + if (map.slots) { + for (const slotName in map.slots) { + const slotMap = map.slots[slotName]; + const slot = skeletonData.findSlot(slotName); + if (!slot) throw new Error(`Slot not found: ${slotName}`); + const slotIndex = slot.index; + for (const timelineName in slotMap) { + const timelineMap = slotMap[timelineName]; + if (!timelineMap) continue; + const frames = timelineMap.length; + switch (timelineName) { + case "attachment": { + const timeline = new AttachmentTimeline(frames, slotIndex); + for (let frame = 0; frame < frames; frame++) { + const keyMap = timelineMap[frame]; + timeline.setFrame(frame, getValue(keyMap, "time", 0), getValue(keyMap, "name", null)); + } + timelines.push(timeline); + break; + } + case "rgba": { + const timeline = new RGBATimeline(frames, frames << 2, slotIndex); + let keyMap = timelineMap[0]; + let time = getValue(keyMap, "time", 0); + let color2 = Color.fromString(keyMap.color); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, color2.r, color2.g, color2.b, color2.a); + const nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + const time2 = getValue(nextMap, "time", 0); + const newColor = Color.fromString(nextMap.color); + const curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color2.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color2.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color2.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.a, newColor.a, 1); + } + time = time2; + color2 = newColor; + keyMap = nextMap; + } + timelines.push(timeline); + break; + } + case "rgb": { + const timeline = new RGBTimeline(frames, frames * 3, slotIndex); + let keyMap = timelineMap[0]; + let time = getValue(keyMap, "time", 0); + let color2 = Color.fromString(keyMap.color); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, color2.r, color2.g, color2.b); + const nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + const time2 = getValue(nextMap, "time", 0); + const newColor = Color.fromString(nextMap.color); + const curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color2.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color2.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color2.b, newColor.b, 1); + } + time = time2; + color2 = newColor; + keyMap = nextMap; + } + timelines.push(timeline); + break; + } + case "alpha": { + readTimeline12(timelines, timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1); + break; + } + case "rgba2": { + const timeline = new RGBA2Timeline(frames, frames * 7, slotIndex); + let keyMap = timelineMap[0]; + let time = getValue(keyMap, "time", 0); + let color2 = Color.fromString(keyMap.light); + let color22 = Color.fromString(keyMap.dark); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, color2.r, color2.g, color2.b, color2.a, color22.r, color22.g, color22.b); + const nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + const time2 = getValue(nextMap, "time", 0); + const newColor = Color.fromString(nextMap.light); + const newColor2 = Color.fromString(nextMap.dark); + const curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color2.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color2.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color2.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.a, newColor.a, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color22.r, newColor2.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color22.g, newColor2.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color22.b, newColor2.b, 1); + } + time = time2; + color2 = newColor; + color22 = newColor2; + keyMap = nextMap; + } + timelines.push(timeline); + break; + } + case "rgb2": { + const timeline = new RGB2Timeline(frames, frames * 6, slotIndex); + let keyMap = timelineMap[0]; + let time = getValue(keyMap, "time", 0); + let color2 = Color.fromString(keyMap.light); + let color22 = Color.fromString(keyMap.dark); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, color2.r, color2.g, color2.b, color22.r, color22.g, color22.b); + const nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + const time2 = getValue(nextMap, "time", 0); + const newColor = Color.fromString(nextMap.light); + const newColor2 = Color.fromString(nextMap.dark); + const curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color2.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color2.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color2.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color22.r, newColor2.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color22.g, newColor2.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color22.b, newColor2.b, 1); + } + time = time2; + color2 = newColor; + color22 = newColor2; + keyMap = nextMap; + } + timelines.push(timeline); + break; + } + default: + throw new Error(`Invalid timeline type for a slot: ${timelineMap.name} (${slotMap.name})`); + } + } + } + } + if (map.bones) { + for (const boneName in map.bones) { + const boneMap = map.bones[boneName]; + const bone = skeletonData.findBone(boneName); + if (!bone) throw new Error(`Bone not found: ${boneName}`); + const boneIndex = bone.index; + for (const timelineName in boneMap) { + const timelineMap = boneMap[timelineName]; + const frames = timelineMap.length; + if (frames === 0) continue; + switch (timelineName) { + case "rotate": + readTimeline12(timelines, timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1); + break; + case "translate": + readTimeline22(timelines, timelineMap, new TranslateTimeline(frames, frames << 1, boneIndex), "x", "y", 0, scale); + break; + case "translatex": + readTimeline12(timelines, timelineMap, new TranslateXTimeline(frames, frames, boneIndex), 0, scale); + break; + case "translatey": + readTimeline12(timelines, timelineMap, new TranslateYTimeline(frames, frames, boneIndex), 0, scale); + break; + case "scale": + readTimeline22(timelines, timelineMap, new ScaleTimeline(frames, frames << 1, boneIndex), "x", "y", 1, 1); + break; + case "scalex": + readTimeline12(timelines, timelineMap, new ScaleXTimeline(frames, frames, boneIndex), 1, 1); + break; + case "scaley": + readTimeline12(timelines, timelineMap, new ScaleYTimeline(frames, frames, boneIndex), 1, 1); + break; + case "shear": + readTimeline22(timelines, timelineMap, new ShearTimeline(frames, frames << 1, boneIndex), "x", "y", 0, 1); + break; + case "shearx": + readTimeline12(timelines, timelineMap, new ShearXTimeline(frames, frames, boneIndex), 0, 1); + break; + case "sheary": + readTimeline12(timelines, timelineMap, new ShearYTimeline(frames, frames, boneIndex), 0, 1); + break; + case "inherit": { + const timeline = new InheritTimeline(frames, bone.index); + for (let frame = 0; frame < timelineMap.length; frame++) { + const aFrame = timelineMap[frame]; + timeline.setFrame(frame, getValue(aFrame, "time", 0), Utils.enumValue(Inherit, getValue(aFrame, "inherit", "Normal"))); + } + timelines.push(timeline); + break; + } + default: + throw new Error(`Invalid timeline type for a bone: ${timelineMap.name} (${boneMap.name})`); + } + } + } + } + if (map.ik) { + for (const constraintName in map.ik) { + const constraintMap = map.ik[constraintName]; + let keyMap = constraintMap[0]; + if (!keyMap) continue; + const constraint = skeletonData.findConstraint(constraintName, IkConstraintData); + if (!constraint) throw new Error(`IK Constraint not found: ${constraintName}`); + const timeline = new IkConstraintTimeline( + constraintMap.length, + constraintMap.length << 1, + skeletonData.constraints.indexOf(constraint) + ); + let time = getValue(keyMap, "time", 0); + let mix = getValue(keyMap, "mix", 1); + let softness = getValue(keyMap, "softness", 0) * scale; + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mix, softness, getValue(keyMap, "bendPositive", true) ? 1 : -1, getValue(keyMap, "compress", false), getValue(keyMap, "stretch", false)); + const nextMap = constraintMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + const time2 = getValue(nextMap, "time", 0); + const mix2 = getValue(nextMap, "mix", 1); + const softness2 = getValue(nextMap, "softness", 0) * scale; + const curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale); + } + time = time2; + mix = mix2; + softness = softness2; + keyMap = nextMap; + } + timelines.push(timeline); + } + } + if (map.transform) { + for (const constraintName in map.transform) { + const timelineMap = map.transform[constraintName]; + let keyMap = timelineMap[0]; + if (!keyMap) continue; + const constraint = skeletonData.findConstraint(constraintName, TransformConstraintData); + if (!constraint) throw new Error(`Transform constraint not found: ${constraintName}`); + const timeline = new TransformConstraintTimeline( + timelineMap.length, + timelineMap.length * 6, + skeletonData.constraints.indexOf(constraint) + ); + let time = getValue(keyMap, "time", 0); + let mixRotate = getValue(keyMap, "mixRotate", 1); + let mixX = getValue(keyMap, "mixX", 1), mixY = getValue(keyMap, "mixY", mixX); + let mixScaleX = getValue(keyMap, "mixScaleX", 1), mixScaleY = getValue(keyMap, "mixScaleY", 1); + const mixShearY = getValue(keyMap, "mixShearY", 1); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); + const nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + const time2 = getValue(nextMap, "time", 0); + const mixRotate2 = getValue(nextMap, "mixRotate", 1); + const mixX2 = getValue(nextMap, "mixX", 1), mixY2 = getValue(nextMap, "mixY", mixX2); + const mixScaleX2 = getValue(nextMap, "mixScaleX", 1), mixScaleY2 = getValue(nextMap, "mixScaleY", 1); + const mixShearY2 = getValue(nextMap, "mixShearY", 1); + const curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + mixScaleX = mixScaleX2; + mixScaleY = mixScaleY2; + mixScaleX = mixScaleX2; + keyMap = nextMap; + } + timelines.push(timeline); + } + } + if (map.path) { + for (const constraintName in map.path) { + const constraintMap = map.path[constraintName]; + const constraint = skeletonData.findConstraint(constraintName, PathConstraintData); + if (!constraint) throw new Error(`Path constraint not found: ${constraintName}`); + const index = skeletonData.constraints.indexOf(constraint); + for (const timelineName in constraintMap) { + const timelineMap = constraintMap[timelineName]; + let keyMap = timelineMap[0]; + if (!keyMap) continue; + const frames = timelineMap.length; + switch (timelineName) { + case "position": { + const timeline = new PathConstraintPositionTimeline(frames, frames, index); + readTimeline12(timelines, timelineMap, timeline, 0, constraint.positionMode === 0 /* Fixed */ ? scale : 1); + break; + } + case "spacing": { + const timeline = new PathConstraintSpacingTimeline(frames, frames, index); + readTimeline12(timelines, timelineMap, timeline, 0, constraint.spacingMode === 0 /* Length */ || constraint.spacingMode === 1 /* Fixed */ ? scale : 1); + break; + } + case "mix": { + const timeline = new PathConstraintMixTimeline(frames, frames * 3, index); + let time = getValue(keyMap, "time", 0); + let mixRotate = getValue(keyMap, "mixRotate", 1); + let mixX = getValue(keyMap, "mixX", 1); + let mixY = getValue(keyMap, "mixY", mixX); + for (let frame = 0, bezier = 0; ; frame++) { + timeline.setFrame(frame, time, mixRotate, mixX, mixY); + const nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + const time2 = getValue(nextMap, "time", 0); + const mixRotate2 = getValue(nextMap, "mixRotate", 1); + const mixX2 = getValue(nextMap, "mixX", 1); + const mixY2 = getValue(nextMap, "mixY", mixX2); + const curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + keyMap = nextMap; + } + timelines.push(timeline); + break; + } + } + } + } + } + if (map.physics) { + for (const constraintName in map.physics) { + const constraintMap = map.physics[constraintName]; + let index = -1; + if (constraintName.length > 0) { + const constraint = skeletonData.findConstraint(constraintName, PhysicsConstraintData); + if (!constraint) throw new Error(`Physics constraint not found: ${constraintName}`); + index = skeletonData.constraints.indexOf(constraint); + } + for (const timelineName in constraintMap) { + const timelineMap = constraintMap[timelineName]; + let keyMap = timelineMap[0]; + if (!keyMap) continue; + const frames = timelineMap.length; + let timeline; + let defaultValue = 0; + if (timelineName === "reset") { + const resetTimeline = new PhysicsConstraintResetTimeline(frames, index); + for (let frame = 0; keyMap != null; keyMap = timelineMap[frame + 1], frame++) + resetTimeline.setFrame(frame, getValue(keyMap, "time", 0)); + timelines.push(resetTimeline); + continue; + } + switch (timelineName) { + case "inertia": + timeline = new PhysicsConstraintInertiaTimeline(frames, frames, index); + break; + case "strength": + timeline = new PhysicsConstraintStrengthTimeline(frames, frames, index); + break; + case "damping": + timeline = new PhysicsConstraintDampingTimeline(frames, frames, index); + break; + case "mass": + timeline = new PhysicsConstraintMassTimeline(frames, frames, index); + break; + case "wind": + timeline = new PhysicsConstraintWindTimeline(frames, frames, index); + break; + case "gravity": + timeline = new PhysicsConstraintGravityTimeline(frames, frames, index); + break; + case "mix": { + defaultValue = 1; + timeline = new PhysicsConstraintMixTimeline(frames, frames, index); + break; + } + default: + continue; + } + readTimeline12(timelines, timelineMap, timeline, defaultValue, 1); + } + } + } + if (map.slider) { + for (const constraintName in map.slider) { + const constraintMap = map.slider[constraintName]; + const constraint = skeletonData.findConstraint(constraintName, SliderData); + if (!constraint) throw new Error(`Slider not found: ${constraintName}`); + const index = skeletonData.constraints.indexOf(constraint); + for (const timelineName in constraintMap) { + const timelineMap = constraintMap[timelineName]; + const keyMap = timelineMap[0]; + if (!keyMap) continue; + const frames = timelineMap.length; + switch (timelineName) { + case "time": + readTimeline12(timelines, timelineMap, new SliderTimeline(frames, frames, index), 1, 1); + break; + case "mix": + readTimeline12(timelines, timelineMap, new SliderMixTimeline(frames, frames, index), 1, 1); + break; + } + } + } + } + if (map.attachments) { + for (const attachmentsName in map.attachments) { + const attachmentsMap = map.attachments[attachmentsName]; + const skin = skeletonData.findSkin(attachmentsName); + if (!skin) throw new Error(`Skin not found: ${attachmentsName}`); + for (const slotMapName in attachmentsMap) { + const slotMap = attachmentsMap[slotMapName]; + const slot = skeletonData.findSlot(slotMapName); + if (!slot) throw new Error(`Attachment slot not found: ${slotMapName}`); + const slotIndex = slot.index; + for (const attachmentMapName in slotMap) { + const attachmentMap = slotMap[attachmentMapName]; + const attachment = skin.getAttachment(slotIndex, attachmentMapName); + if (!attachment) throw new Error(`Timeline attachment not found: ${attachmentMapName}`); + for (const timelineMapName in attachmentMap) { + const timelineMap = attachmentMap[timelineMapName]; + let keyMap = timelineMap[0]; + if (!keyMap) continue; + if (timelineMapName === "deform") { + const weighted = attachment.bones; + const vertices = attachment.vertices; + const deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; + const timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment); + let time = getValue(keyMap, "time", 0); + for (let frame = 0, bezier = 0; ; frame++) { + let deform; + const verticesValue = getValue(keyMap, "vertices", null); + if (!verticesValue) + deform = weighted ? Utils.newFloatArray(deformLength) : vertices; + else { + deform = Utils.newFloatArray(deformLength); + const start = getValue(keyMap, "offset", 0); + Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length); + if (scale !== 1) { + for (let i = start, n = i + verticesValue.length; i < n; i++) + deform[i] *= scale; + } + if (!weighted) { + for (let i = 0; i < deformLength; i++) + deform[i] += vertices[i]; + } + } + timeline.setFrame(frame, time, deform); + const nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } + const time2 = getValue(nextMap, "time", 0); + const curve = keyMap.curve; + if (curve) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1); + time = time2; + keyMap = nextMap; + } + timelines.push(timeline); + } else if (timelineMapName === "sequence") { + const timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment); + let lastDelay = 0; + for (let frame = 0; frame < timelineMap.length; frame++) { + const delay = getValue(keyMap, "delay", lastDelay); + const time = getValue(keyMap, "time", 0); + const mode = SequenceMode[getValue(keyMap, "mode", "hold")]; + const index = getValue(keyMap, "index", 0); + timeline.setFrame(frame, time, mode, index, delay); + lastDelay = delay; + keyMap = timelineMap[frame + 1]; + } + timelines.push(timeline); + } + } + } + } + } + } + if (map.drawOrder) { + const timeline = new DrawOrderTimeline(map.drawOrder.length); + const slotCount = skeletonData.slots.length; + let frame = 0; + for (const drawOrderMap of map.drawOrder) { + timeline.setFrame(frame++, getValue(drawOrderMap, "time", 0), readDrawOrder2(skeletonData, drawOrderMap, slotCount, null)); + } + timelines.push(timeline); + } + if (map.drawOrderFolder) { + for (const timelineMap of map.drawOrderFolder) { + const slotEntries = getValue(timelineMap, "slots", []); + const folderSlots = new Array(slotEntries.length); + let ii = 0; + for (const slotEntry of slotEntries) { + const slot = skeletonData.findSlot(slotEntry); + if (!slot) throw new Error(`Draw order folder slot not found: ${slotEntry}`); + folderSlots[ii++] = slot.index; + } + const drawOrderFolderEntries = getValue(timelineMap, "keys", []); + const timeline = new DrawOrderFolderTimeline(drawOrderFolderEntries.length, folderSlots, skeletonData.slots.length); + let frame = 0; + for (const drawOrderFolderMap of drawOrderFolderEntries) { + timeline.setFrame(frame++, getValue(drawOrderFolderMap, "time", 0), readDrawOrder2(skeletonData, drawOrderFolderMap, folderSlots.length, folderSlots)); + } + timelines.push(timeline); + } + } + if (map.events) { + const timeline = new EventTimeline(map.events.length); + let frame = 0; + for (let i = 0; i < map.events.length; i++, frame++) { + const eventMap = map.events[i]; + const data = skeletonData.findEvent(eventMap.name); + if (!data) throw new Error(`Event not found: ${eventMap.name}`); + const setup = data.setupPose; + const event = new Event(Utils.toSinglePrecision(getValue(eventMap, "time", 0)), data); + event.intValue = getValue(eventMap, "int", setup.intValue); + event.floatValue = getValue(eventMap, "float", setup.floatValue); + event.stringValue = getValue(eventMap, "string", setup.stringValue); + if (event.data.audioPath) { + event.volume = getValue(eventMap, "volume", setup.volume); + event.balance = getValue(eventMap, "balance", setup.volume); + } + timeline.setFrame(frame, event); + } + timelines.push(timeline); + } + let duration = 0; + for (let i = 0, n = timelines.length; i < n; i++) + duration = Math.max(duration, timelines[i].getDuration()); + const animation = new Animation(name, timelines, duration); + const color = getValue(map, "color", null); + if (color !== null) animation.color.setFromString(color); + skeletonData.animations.push(animation); + } + }; + var LinkedMesh2 = class { + source; + skin; + slotIndex; + sourceIndex; + mesh; + inheritTimelines; + constructor(mesh, skin, slotIndex, sourceIndex, source, inheritTimelines) { + this.mesh = mesh; + this.skin = skin; + this.slotIndex = slotIndex; + this.sourceIndex = sourceIndex; + this.source = source; + this.inheritTimelines = inheritTimelines; + } + }; + function readTimeline12(timelines, keys, timeline, defaultValue, scale) { + let keyMap = keys[0]; + let time = keyMap.time ?? 0; + let value = (keyMap.value ?? defaultValue) * scale; + let bezier = 0; + for (let frame = 0; ; frame++) { + timeline.setFrame(frame, time, value); + const nextMap = keys[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + timelines.push(timeline); + return; + } + const time2 = nextMap.time ?? 0; + const value2 = (nextMap.value ?? defaultValue) * scale; + if (keyMap.curve) bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale); + time = time2; + value = value2; + keyMap = nextMap; + } + } + function readTimeline22(timelines, keys, timeline, name1, name2, defaultValue, scale) { + let keyMap = keys[0]; + let time = keyMap.time ?? 0; + let value1 = (keyMap[name1] ?? defaultValue) * scale; + let value2 = (keyMap[name2] ?? defaultValue) * scale; + let bezier = 0; + for (let frame = 0; ; frame++) { + timeline.setFrame(frame, time, value1, value2); + const nextMap = keys[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + timelines.push(timeline); + return; + } + const time2 = nextMap.time ?? 0; + const nvalue1 = (nextMap[name1] ?? defaultValue) * scale; + const nvalue2 = (nextMap[name2] ?? defaultValue) * scale; + const curve = keyMap.curve; + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); + } + time = time2; + value1 = nvalue1; + value2 = nvalue2; + keyMap = nextMap; + } + } + function readDrawOrder2(skeletonData, keys, slotCount, folderSlots) { + const changes = keys.offsets; + if (!changes) return null; + const drawOrder = new Array(slotCount).fill(-1); + const unchanged = new Array(slotCount - changes.length); + let originalIndex = 0, unchangedIndex = 0; + for (const offsetMap of changes) { + const slot = skeletonData.findSlot(offsetMap.slot); + if (slot == null) throw new Error(`Draw order slot not found: ${offsetMap.slot}`); + let index = 0; + if (!folderSlots) + index = slot.index; + else { + index = -1; + for (let i = 0; i < slotCount; i++) { + if (folderSlots[i] === slot.index) { + index = i; + break; + } + } + if (index === -1) throw new Error(`Slot not in folder: ${offsetMap.slot}`); + } + while (originalIndex !== index) + unchanged[unchangedIndex++] = originalIndex++; + drawOrder[originalIndex + offsetMap.offset] = originalIndex++; + } + while (originalIndex < slotCount) + unchanged[unchangedIndex++] = originalIndex++; + for (let i = slotCount - 1; i >= 0; i--) + if (drawOrder[i] === -1) drawOrder[i] = unchanged[--unchangedIndex]; + return drawOrder; + } + function readCurve(curve, timeline, bezier, frame, value, time1, time2, value1, value2, scale) { + if (curve === "stepped") { + timeline.setStepped(frame); + return bezier; + } + const i = value << 2; + const cx1 = curve[i]; + const cy1 = curve[i + 1] * scale; + const cx2 = curve[i + 2]; + const cy2 = curve[i + 3] * scale; + timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; + } + function getValue(map, property, defaultValue) { + return map[property] !== void 0 ? map[property] : defaultValue; + } + + // spine-core/src/SkeletonRendererCore.ts + var SkeletonRendererCore = class { + commandPool = new CommandPool(); + worldVertices = new Float32Array(12 * 1024); + quadIndices = new Uint16Array([0, 1, 2, 2, 3, 0]); + clipping = new SkeletonClipping(); + renderCommands = []; + render(skeleton, pma = false, inColor, stride = 2) { + this.commandPool.reset(); + this.renderCommands.length = 0; + const clipper = this.clipping; + const drawOrder = skeleton.drawOrder.appliedPose; + for (let i = 0; i < skeleton.slots.length; i++) { + const slot = drawOrder[i]; + const attachment = slot.appliedPose.attachment; + if (!attachment) { + clipper.clipEnd(slot); + continue; + } + const pose = slot.appliedPose; + const slotColor = pose.color; + const alpha = slotColor.a; + if ((alpha === 0 || !slot.bone.active) && !(attachment instanceof ClippingAttachment)) { + clipper.clipEnd(slot); + continue; + } + let vertices; + let verticesCount; + let uvs; + let indices; + let indicesCount; + let attachmentColor; + let texture; + if (attachment instanceof RegionAttachment) { + attachmentColor = attachment.color; + if (attachmentColor.a === 0) { + clipper.clipEnd(slot); + continue; + } + const sequence = attachment.sequence; + const sequenceIndex = sequence.resolveIndex(pose); + attachment.computeWorldVertices(slot, attachment.getOffsets(pose), this.worldVertices, 0, stride); + vertices = this.worldVertices; + verticesCount = 4; + uvs = sequence.getUVs(sequenceIndex); + indices = this.quadIndices; + indicesCount = 6; + texture = sequence.regions[sequenceIndex]?.texture; + } else if (attachment instanceof MeshAttachment) { + attachmentColor = attachment.color; + if (attachmentColor.a === 0) { + clipper.clipEnd(slot); + continue; + } + if (this.worldVertices.length < attachment.worldVerticesLength) + this.worldVertices = new Float32Array(attachment.worldVerticesLength); + attachment.computeWorldVertices(skeleton, slot, 0, attachment.worldVerticesLength, this.worldVertices, 0, stride); + vertices = this.worldVertices; + verticesCount = attachment.worldVerticesLength >> 1; + const sequence = attachment.sequence; + const sequenceIndex = sequence.resolveIndex(pose); + uvs = sequence.getUVs(sequenceIndex); + indices = attachment.triangles; + indicesCount = indices.length; + texture = sequence.regions[sequenceIndex]?.texture; + } else if (attachment instanceof ClippingAttachment) { + clipper.clipStart(skeleton, slot, attachment); + continue; + } else { + continue; + } + const skelColor = skeleton.color; + let color, darkColor; + if (pma) { + let a; + if (inColor) { + a = Math.floor(inColor[3] * skelColor.a * slotColor.a * attachmentColor.a * 255); + const r = Math.floor(a * inColor[0] * skelColor.r * slotColor.r * attachmentColor.r); + const g = Math.floor(a * inColor[1] * skelColor.g * slotColor.g * attachmentColor.g); + const b = Math.floor(a * inColor[2] * skelColor.b * slotColor.b * attachmentColor.b); + color = a << 24 | r << 16 | g << 8 | b; + } else { + a = Math.floor(skelColor.a * slotColor.a * attachmentColor.a * 255); + const r = Math.floor(a * skelColor.r * slotColor.r * attachmentColor.r); + const g = Math.floor(a * skelColor.g * slotColor.g * attachmentColor.g); + const b = Math.floor(a * skelColor.b * slotColor.b * attachmentColor.b); + color = a << 24 | r << 16 | g << 8 | b; + } + darkColor = 4278190080; + if (pose.darkColor) { + const { r, g, b } = pose.darkColor; + darkColor = 4278190080 | Math.floor(r * a) << 16 | Math.floor(g * a) << 8 | Math.floor(b * a); + } + } else { + if (inColor) { + const a = Math.floor(inColor[3] * skelColor.a * slotColor.a * attachmentColor.a * 255); + const r = Math.floor(inColor[0] * skelColor.r * slotColor.r * attachmentColor.r * 255); + const g = Math.floor(inColor[1] * skelColor.g * slotColor.g * attachmentColor.g * 255); + const b = Math.floor(inColor[2] * skelColor.b * slotColor.b * attachmentColor.b * 255); + color = a << 24 | r << 16 | g << 8 | b; + } else { + const a = Math.floor(skelColor.a * slotColor.a * attachmentColor.a * 255); + const r = Math.floor(skelColor.r * slotColor.r * attachmentColor.r * 255); + const g = Math.floor(skelColor.g * slotColor.g * attachmentColor.g * 255); + const b = Math.floor(skelColor.b * slotColor.b * attachmentColor.b * 255); + color = a << 24 | r << 16 | g << 8 | b; + } + darkColor = 0; + if (pose.darkColor) { + const { r, g, b } = pose.darkColor; + darkColor = Math.floor(r * 255) << 16 | Math.floor(g * 255) << 8 | Math.floor(b * 255); + } + } + if (clipper.isClipping()) { + clipper.clipTrianglesUnpacked(vertices, 0, indices, indicesCount, uvs, stride); + vertices = clipper.clippedVerticesTyped; + verticesCount = clipper.clippedVerticesLength / stride; + uvs = clipper.clippedUVsTyped; + indices = clipper.clippedTrianglesTyped; + indicesCount = clipper.clippedTrianglesLength; + } + const cmd = this.commandPool.getCommand(verticesCount, indicesCount, stride); + cmd.blendMode = slot.data.blendMode; + cmd.texture = texture; + cmd.positions.set(vertices.subarray(0, verticesCount * stride)); + cmd.uvs.set(uvs.subarray(0, verticesCount << 1)); + for (let j = 0; j < verticesCount; j++) { + cmd.colors[j] = color; + cmd.darkColors[j] = darkColor; + } + if (indices instanceof Uint16Array) { + cmd.indices.set(indices.subarray(0, indicesCount)); + } else { + cmd.indices.set(indices.slice(0, indicesCount)); + } + this.renderCommands.push(cmd); + clipper.clipEnd(slot); + } + clipper.clipEnd(); + return this.batchCommands(stride); + } + batchSubCommands(commands, first, last, numVertices, numIndices, stride) { + const firstCmd = commands[first]; + const batched = this.commandPool.getCommand(numVertices, numIndices, stride); + batched.blendMode = firstCmd.blendMode; + batched.texture = firstCmd.texture; + let positionsOffset = 0; + let uvsOffset = 0; + let colorsOffset = 0; + let indicesOffset = 0; + let vertexOffset = 0; + for (let i = first; i <= last; i++) { + const cmd = commands[i]; + batched.positions.set(cmd.positions, positionsOffset); + positionsOffset += cmd.numVertices * stride; + batched.uvs.set(cmd.uvs, uvsOffset); + uvsOffset += cmd.numVertices << 1; + batched.colors.set(cmd.colors, colorsOffset); + batched.darkColors.set(cmd.darkColors, colorsOffset); + colorsOffset += cmd.numVertices; + for (let j = 0; j < cmd.numIndices; j++) + batched.indices[indicesOffset + j] = cmd.indices[j] + vertexOffset; + indicesOffset += cmd.numIndices; + vertexOffset += cmd.numVertices; + } + return batched; + } + batchCommands(stride) { + if (this.renderCommands.length === 0) return void 0; + let root; + let last; + let first = this.renderCommands[0]; + let startIndex = 0; + let i = 1; + let numVertices = first.numVertices; + let numIndices = first.numIndices; + while (i <= this.renderCommands.length) { + const cmd = i < this.renderCommands.length ? this.renderCommands[i] : null; + if (cmd && cmd.numVertices === 0 && cmd.numIndices === 0) { + i++; + continue; + } + const canBatch = cmd !== null && cmd.texture === first.texture && cmd.blendMode === first.blendMode && cmd.colors[0] === first.colors[0] && cmd.darkColors[0] === first.darkColors[0] && numIndices + cmd.numIndices < 65535; + if (canBatch) { + numVertices += cmd.numVertices; + numIndices += cmd.numIndices; + } else { + const batched = this.batchSubCommands( + this.renderCommands, + startIndex, + i - 1, + numVertices, + numIndices, + stride + ); + if (!last) { + root = last = batched; + } else { + last.next = batched; + last = batched; + } + if (i === this.renderCommands.length) break; + first = this.renderCommands[i]; + startIndex = i; + numVertices = first.numVertices; + numIndices = first.numIndices; + } + i++; + } + return root; + } + }; + var CommandPool = class { + pool = []; + inUse = []; + getCommand(numVertices, numIndices, stride) { + let cmd; + for (const c of this.pool) { + if (c._positions.length >= numVertices * stride && c._indices.length >= numIndices) { + cmd = c; + break; + } + } + if (!cmd) { + const _positions = new Float32Array(numVertices * stride); + const _uvs = new Float32Array(numVertices << 1); + const _colors = new Uint32Array(numVertices); + const _darkColors = new Uint32Array(numVertices); + const _indices = new Uint16Array(numIndices); + cmd = { + positions: _positions, + uvs: _uvs, + colors: _colors, + darkColors: _darkColors, + indices: _indices, + _positions, + _uvs, + _colors, + _darkColors, + _indices, + numVertices, + numIndices, + blendMode: 0 /* Normal */, + texture: null + }; + } else { + this.pool.splice(this.pool.indexOf(cmd), 1); + cmd.next = void 0; + cmd.numVertices = numVertices; + cmd.numIndices = numIndices; + cmd.positions = cmd._positions.subarray(0, numVertices * stride); + cmd.uvs = cmd._uvs.subarray(0, numVertices << 1); + cmd.colors = cmd._colors.subarray(0, numVertices); + cmd.darkColors = cmd._darkColors.subarray(0, numVertices); + cmd.indices = cmd._indices.subarray(0, numIndices); + } + this.inUse.push(cmd); + return cmd; + } + reset() { + this.pool.push(...this.inUse); + this.inUse.length = 0; + } + }; + + // spine-pixi-v7/src/assets/AtlasLoader.ts + var import_assets = __require("@pixi/assets"); + var import_core2 = __require("@pixi/core"); + + // spine-pixi-v7/src/SpineTexture.ts + var import_core = __require("@pixi/core"); + var SpineTexture = class _SpineTexture extends Texture { + static textureMap = /* @__PURE__ */ new Map(); + static from(texture) { + if (_SpineTexture.textureMap.has(texture)) { + return _SpineTexture.textureMap.get(texture); + } + return new _SpineTexture(texture); + } + texture; + constructor(image) { + super(image.resource.source); + this.texture = import_core.Texture.from(image); + } + setFilters(minFilter, _magFilter) { + this.texture.baseTexture.scaleMode = _SpineTexture.toPixiTextureFilter(minFilter); + this.texture.baseTexture.mipmap = _SpineTexture.toPixiMipMap(minFilter); + } + setWraps(uWrap, _vWrap) { + this.texture.baseTexture.wrapMode = _SpineTexture.toPixiTextureWrap(uWrap); + } + dispose() { + this.texture.destroy(); + } + static toPixiTextureFilter(filter) { + switch (filter) { + case 9728 /* Nearest */: + case 9986 /* MipMapNearestLinear */: + case 9984 /* MipMapNearestNearest */: + return import_core.SCALE_MODES.NEAREST; + case 9729 /* Linear */: + case 9987 /* MipMapLinearLinear */: + // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap + case 9985 /* MipMapLinearNearest */: + return import_core.SCALE_MODES.LINEAR; + default: + throw new Error(`Unknown texture filter: ${String(filter)}`); + } + } + static toPixiMipMap(filter) { + switch (filter) { + case 9728 /* Nearest */: + case 9729 /* Linear */: + return import_core.MIPMAP_MODES.OFF; + case 9986 /* MipMapNearestLinear */: + case 9984 /* MipMapNearestNearest */: + case 9987 /* MipMapLinearLinear */: + // TextureFilter.MipMapLinearLinear == TextureFilter.MipMap + case 9985 /* MipMapLinearNearest */: + return import_core.MIPMAP_MODES.ON; + default: + throw new Error(`Unknown texture filter: ${String(filter)}`); + } + } + static toPixiTextureWrap(wrap) { + switch (wrap) { + case 33071 /* ClampToEdge */: + return import_core.WRAP_MODES.CLAMP; + case 33648 /* MirroredRepeat */: + return import_core.WRAP_MODES.MIRRORED_REPEAT; + case 10497 /* Repeat */: + return import_core.WRAP_MODES.REPEAT; + default: + throw new Error(`Unknown texture wrap: ${String(wrap)}`); + } + } + static toPixiBlending(blend) { + switch (blend) { + case 0 /* Normal */: + return import_core.BLEND_MODES.NORMAL; + case 1 /* Additive */: + return import_core.BLEND_MODES.ADD; + case 2 /* Multiply */: + return import_core.BLEND_MODES.MULTIPLY; + case 3 /* Screen */: + return import_core.BLEND_MODES.SCREEN; + default: + throw new Error(`Unknown blendMode: ${String(blend)}`); + } + } + }; + + // spine-pixi-v7/src/assets/AtlasLoader.ts + var loaderName = "spineTextureAtlasLoader"; + var spineTextureAtlasLoader = { + extension: import_core2.ExtensionType.Asset, + resolver: { + test: (value) => (0, import_assets.checkExtension)(value, ".atlas"), + parse: (value) => { + const split = value.split("."); + return { + resolution: parseFloat(import_core2.settings.RETINA_PREFIX?.exec(value)?.[1] ?? "1"), + format: split[split.length - 2], + src: value + }; + } + }, + loader: { + name: loaderName, + extension: { + type: import_core2.ExtensionType.LoadParser, + priority: import_assets.LoaderParserPriority.Normal, + name: loaderName + }, + test(url) { + return (0, import_assets.checkExtension)(url, ".atlas"); + }, + async load(url) { + const response = await import_core2.settings.ADAPTER.fetch(url); + if (!response.ok) + throw new Error(`[${loaderName}] Failed to fetch ${url}: ${response.status} ${response.statusText}`); + return await response.text(); + }, + testParse(asset, options) { + const isExtensionRight = (0, import_assets.checkExtension)(options.src, ".atlas"); + const isString = typeof asset === "string"; + const isExplicitLoadParserSet = options.loadParser === loaderName; + return Promise.resolve((isExtensionRight || isExplicitLoadParserSet) && isString); + }, + unload(atlas) { + atlas.dispose(); + }, + async parse(asset, options, loader) { + const metadata = options.data || {}; + let basePath = import_core2.utils.path.dirname(options.src); + if (basePath && basePath.lastIndexOf("/") !== basePath.length - 1) { + basePath += "/"; + } + const retval = new TextureAtlas(asset); + if (metadata.images instanceof import_core2.BaseTexture || typeof metadata.images === "string") { + const pixiTexture = metadata.images; + metadata.images = {}; + metadata.images[retval.pages[0].name] = pixiTexture; + } + const textureLoadingPromises = []; + let oldPreferCreateImageBitmap = true; + for (const parser of loader.parsers) { + if (parser.name === "loadTextures") { + oldPreferCreateImageBitmap = parser.config?.preferCreateImageBitmap; + break; + } + } + import_assets.Assets.setPreferences({ preferCreateImageBitmap: false }); + for (const page of retval.pages) { + const pageName = page.name; + const providedPage = metadata?.images ? metadata.images[pageName] : void 0; + if (providedPage instanceof import_core2.BaseTexture) { + page.setTexture(SpineTexture.from(providedPage)); + } else { + const url = providedPage ?? import_core2.utils.path.normalize([...basePath.split(import_core2.utils.path.sep), pageName].join(import_core2.utils.path.sep)); + const assetsToLoadIn = { src: (0, import_assets.copySearchParams)(url, options.src), data: { ...metadata.imageMetadata, ...{ alphaMode: page.pma ? import_core2.ALPHA_MODES.PMA : import_core2.ALPHA_MODES.UNPACK } } }; + const pixiPromise = loader.load(assetsToLoadIn).then((texture) => { + page.setTexture(SpineTexture.from(texture.baseTexture)); + }); + textureLoadingPromises.push(pixiPromise); + } + } + await Promise.all(textureLoadingPromises); + import_assets.Assets.setPreferences({ preferCreateImageBitmap: oldPreferCreateImageBitmap }); + return retval; + } + } + }; + import_core2.extensions.add(spineTextureAtlasLoader); + + // spine-pixi-v7/src/assets/SkeletonLoader.ts + var import_assets2 = __require("@pixi/assets"); + var import_core3 = __require("@pixi/core"); + var loaderName2 = "spineSkeletonLoader"; + function isJson(resource) { + return resource.hasOwnProperty("bones"); + } + function isBuffer(resource) { + return resource instanceof Uint8Array; + } + var spineLoaderExtension = { + extension: import_core3.ExtensionType.Asset, + loader: { + name: loaderName2, + extension: { + type: import_core3.ExtensionType.LoadParser, + priority: import_assets2.LoaderParserPriority.Normal, + name: loaderName2 + }, + test(url) { + return (0, import_assets2.checkExtension)(url, ".skel"); + }, + async load(url) { + const response = await import_core3.settings.ADAPTER.fetch(url); + if (!response.ok) + throw new Error(`[${loaderName2}] Failed to fetch ${url}: ${response.status} ${response.statusText}`); + return new Uint8Array(await response.arrayBuffer()); + }, + testParse(asset, options) { + const isJsonSpineModel = (0, import_assets2.checkExtension)(options.src, ".json") && isJson(asset); + const isBinarySpineModel = (0, import_assets2.checkExtension)(options.src, ".skel") && isBuffer(asset); + const isExplicitLoadParserSet = options.loadParser === loaderName2; + return Promise.resolve(isJsonSpineModel || isBinarySpineModel || isExplicitLoadParserSet); + } + } + }; + import_core3.extensions.add(spineLoaderExtension); + + // spine-pixi-v7/src/darkTintMesh/DarkTintMesh.ts + var import_mesh = __require("@pixi/mesh"); + + // spine-pixi-v7/src/darkTintMesh/DarkTintGeom.ts + var import_core4 = __require("@pixi/core"); + var DarkTintGeometry = class extends import_core4.Geometry { + /** + * @param {boolean} [_static=false] - Optimization flag, where `false` + * is updated every frame, `true` doesn't change frame-to-frame. + */ + constructor(_static = false) { + super(); + const verticesBuffer = new import_core4.Buffer(void 0); + const uvsBuffer = new import_core4.Buffer(void 0, true); + const indexBuffer = new import_core4.Buffer(void 0, true, true); + this.addAttribute("aVertexPosition", verticesBuffer, 2, false, import_core4.TYPES.FLOAT); + this.addAttribute("aTextureCoord", uvsBuffer, 2, false, import_core4.TYPES.FLOAT); + this.addIndex(indexBuffer); + } + }; + + // spine-pixi-v7/src/darkTintMesh/DarkTintMaterial.ts + var import_core5 = __require("@pixi/core"); + var vertex = ` +attribute vec2 aVertexPosition; +attribute vec2 aTextureCoord; + +uniform mat3 projectionMatrix; +uniform mat3 translationMatrix; +uniform mat3 uTextureMatrix; + +varying vec2 vTextureCoord; + +void main(void) +{ + gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); + + vTextureCoord = (uTextureMatrix * vec3(aTextureCoord, 1.0)).xy; +} +`; + var fragment = ` +varying vec2 vTextureCoord; +uniform vec4 uColor; +uniform vec4 uDarkColor; + +uniform sampler2D uSampler; + +void main(void) +{ + vec4 texColor = texture2D(uSampler, vTextureCoord); + gl_FragColor.a = texColor.a * uColor.a; + gl_FragColor.rgb = ((texColor.a - 1.0) * uDarkColor.a + 1.0 - texColor.rgb) * uDarkColor.rgb + texColor.rgb * uColor.rgb; +} +`; + var DarkTintMaterial = class extends import_core5.Shader { + uvMatrix; + batchable; + pluginName; + // eslint-disable-next-line @typescript-eslint/naming-convention + _tintRGB; + // eslint-disable-next-line @typescript-eslint/naming-convention + _darkTintRGB; + /** + * Only do update if tint or alpha changes. + * @private + * @default false + */ + _colorDirty; + _alpha; + _tintColor; + _darkTintColor; + constructor(texture) { + const uniforms = { + uSampler: texture ?? import_core5.Texture.EMPTY, + alpha: 1, + uTextureMatrix: import_core5.Matrix.IDENTITY, + uColor: new Float32Array([1, 1, 1, 1]), + uDarkColor: new Float32Array([0, 0, 0, 0]) + }; + const options = { + tint: 16777215, + darkTint: 0, + alpha: 1, + pluginName: "darkTintBatch" + }; + super(import_core5.Program.from(vertex, fragment), uniforms); + this._colorDirty = false; + this.uvMatrix = new import_core5.TextureMatrix(uniforms.uSampler); + this.batchable = true; + this.pluginName = options.pluginName; + this._tintColor = new import_core5.Color(options.tint); + this._darkTintColor = new import_core5.Color(options.darkTint); + this._tintRGB = this._tintColor.toLittleEndianNumber(); + this._darkTintRGB = this._darkTintColor.toLittleEndianNumber(); + this._alpha = options.alpha; + this._colorDirty = true; + } + get texture() { + return this.uniforms.uSampler; + } + set texture(value) { + if (this.uniforms.uSampler !== value) { + if (!this.uniforms.uSampler.baseTexture.alphaMode !== !value.baseTexture.alphaMode) { + this._colorDirty = true; + } + this.uniforms.uSampler = value; + this.uvMatrix.texture = value; + } + } + set alpha(value) { + if (value === this._alpha) { + return; + } + this._alpha = value; + this._colorDirty = true; + } + get alpha() { + return this._alpha; + } + set tint(value) { + if (value === this.tint) { + return; + } + this._tintColor.setValue(value); + this._tintRGB = this._tintColor.toLittleEndianNumber(); + this._colorDirty = true; + } + get tint() { + return this._tintColor.value; + } + set darkTint(value) { + if (value === this.darkTint) { + return; + } + this._darkTintColor.setValue(value); + this._darkTintRGB = this._darkTintColor.toLittleEndianNumber(); + this._colorDirty = true; + } + get darkTint() { + return this._darkTintColor.value; + } + get tintValue() { + return this._tintColor.toNumber(); + } + get darkTintValue() { + return this._darkTintColor.toNumber(); + } + /** Gets called automatically by the Mesh. Intended to be overridden for custom {@link PIXI.MeshMaterial} objects. */ + update() { + if (this._colorDirty) { + this._colorDirty = false; + import_core5.Color.shared.setValue(this._tintColor).premultiply(this._alpha, true).toArray(this.uniforms.uColor); + import_core5.Color.shared.setValue(this._darkTintColor).premultiply(this._alpha, true).premultiply(1, false).toArray(this.uniforms.uDarkColor); + } + if (this.uvMatrix.update()) { + this.uniforms.uTextureMatrix = this.uvMatrix.mapCoord; + } + } + }; + + // spine-pixi-v7/src/darkTintMesh/DarkTintMesh.ts + var DarkTintMesh = class extends import_mesh.Mesh { + // eslint-disable-next-line @typescript-eslint/naming-convention + _darkTintRGB = 0; + constructor(texture) { + super(new DarkTintGeometry(), new DarkTintMaterial(texture), void 0, void 0); + } + get darkTint() { + return "darkTint" in this.shader ? this.shader.darkTint : null; + } + set darkTint(value) { + this.shader.darkTint = value; + } + get darkTintValue() { + return this.shader.darkTintValue; + } + // eslint-disable-next-line @typescript-eslint/naming-convention + _renderToBatch(renderer) { + const geometry = this.geometry; + const shader = this.shader; + if (shader.uvMatrix) { + shader.uvMatrix.update(); + this.calculateUvs(); + } + this.calculateVertices(); + this.indices = geometry.indexBuffer.data; + this._tintRGB = shader._tintRGB; + this._darkTintRGB = shader._darkTintRGB; + this._texture = shader.texture; + const pluginName = this.material.pluginName; + renderer.batch.setObjectRenderer(renderer.plugins[pluginName]); + renderer.plugins[pluginName].render(this); + } + }; + + // spine-pixi-v7/src/DarkSlotMesh.ts + var DarkSlotMesh = class _DarkSlotMesh extends DarkTintMesh { + name = ""; + static auxColor = [0, 0, 0, 0]; + constructor() { + super(); + } + updateFromSpineData(slotTexture, slotBlendMode, slotName, finalVertices, finalVerticesLength, finalIndices, finalIndicesLength, darkTint) { + this.texture = slotTexture.texture; + const vertLenght = finalVerticesLength / (darkTint ? 12 : 8) * 2; + const textureCoord = this.geometry.getBuffer("aTextureCoord"); + if (textureCoord.data?.length !== vertLenght) { + textureCoord.data = new Float32Array(vertLenght); + } + const vertexCoord = this.geometry.getBuffer("aVertexPosition"); + if (vertexCoord.data?.length !== vertLenght) { + vertexCoord.data = new Float32Array(vertLenght); + } + let vertIndex = 0; + const textureCoordData = textureCoord.data; + const vertexCoordData = vertexCoord.data; + for (let i = 0; i < finalVerticesLength; i += darkTint ? 12 : 8) { + let auxi = i; + vertexCoordData[vertIndex] = finalVertices[auxi++]; + vertexCoordData[vertIndex + 1] = finalVertices[auxi++]; + auxi += 4; + textureCoordData[vertIndex] = finalVertices[auxi++]; + textureCoordData[vertIndex + 1] = finalVertices[auxi++]; + vertIndex += 2; + } + if (darkTint) { + _DarkSlotMesh.auxColor[0] = finalVertices[8]; + _DarkSlotMesh.auxColor[1] = finalVertices[9]; + _DarkSlotMesh.auxColor[2] = finalVertices[10]; + _DarkSlotMesh.auxColor[3] = finalVertices[11]; + this.darkTint = _DarkSlotMesh.auxColor; + _DarkSlotMesh.auxColor[0] = finalVertices[2]; + _DarkSlotMesh.auxColor[1] = finalVertices[3]; + _DarkSlotMesh.auxColor[2] = finalVertices[4]; + _DarkSlotMesh.auxColor[3] = finalVertices[5]; + this.tint = _DarkSlotMesh.auxColor; + } else { + _DarkSlotMesh.auxColor[0] = finalVertices[2]; + _DarkSlotMesh.auxColor[1] = finalVertices[3]; + _DarkSlotMesh.auxColor[2] = finalVertices[4]; + _DarkSlotMesh.auxColor[3] = finalVertices[5]; + this.tint = _DarkSlotMesh.auxColor; + } + this.blendMode = SpineTexture.toPixiBlending(slotBlendMode); + this.alpha = _DarkSlotMesh.auxColor[3]; + const indexBuffer = this.geometry.indexBuffer; + if (indexBuffer.data.length !== finalIndices.length) { + indexBuffer.data = new Uint32Array(finalIndices); + } else { + const indexBufferData = indexBuffer.data; + for (let i = 0; i < finalIndicesLength; i++) { + indexBufferData[i] = finalIndices[i]; + } + } + this.name = slotName; + textureCoord.update(); + vertexCoord.update(); + indexBuffer.update(); + } + }; + + // spine-pixi-v7/src/darkTintMesh/DarkTintBatchGeom.ts + var import_core6 = __require("@pixi/core"); + var DarkTintBatchGeometry = class extends import_core6.Geometry { + // eslint-disable-next-line @typescript-eslint/naming-convention + _buffer; + // eslint-disable-next-line @typescript-eslint/naming-convention + _indexBuffer; + /** + * @param {boolean} [_static=false] - Optimization flag, where `false` + * is updated every frame, `true` doesn't change frame-to-frame. + */ + constructor(_static = false) { + super(); + this._buffer = new import_core6.Buffer(void 0, _static, false); + this._indexBuffer = new import_core6.Buffer(void 0, _static, true); + this.addAttribute("aVertexPosition", this._buffer, 2, false, import_core6.TYPES.FLOAT).addAttribute("aTextureCoord", this._buffer, 2, false, import_core6.TYPES.FLOAT).addAttribute("aColor", this._buffer, 4, true, import_core6.TYPES.UNSIGNED_BYTE).addAttribute("aDarkColor", this._buffer, 4, true, import_core6.TYPES.UNSIGNED_BYTE).addAttribute("aTextureId", this._buffer, 1, true, import_core6.TYPES.FLOAT).addIndex(this._indexBuffer); + } + }; + + // spine-pixi-v7/src/darkTintMesh/DarkTintRenderer.ts + var import_core7 = __require("@pixi/core"); + var vertex2 = ` +precision highp float; +attribute vec2 aVertexPosition; +attribute vec2 aTextureCoord; +attribute vec4 aColor; +attribute vec4 aDarkColor; +attribute float aTextureId; + +uniform mat3 projectionMatrix; +uniform mat3 translationMatrix; +uniform vec4 tint; + +varying vec2 vTextureCoord; +varying vec4 vColor; +varying vec4 vDarkColor; +varying float vTextureId; + +void main(void){ + gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0); + + vTextureCoord = aTextureCoord; + vTextureId = aTextureId; + vColor = aColor * tint; + vDarkColor = aDarkColor * tint; + +} +`; + var fragment2 = ` +varying vec2 vTextureCoord; +varying vec4 vColor; +varying vec4 vDarkColor; +varying float vTextureId; +uniform sampler2D uSamplers[%count%]; + +void main(void){ + vec4 color; + %forloop% + + + gl_FragColor.a = color.a * vColor.a; + gl_FragColor.rgb = ((color.a - 1.0) * vDarkColor.a + 1.0 - color.rgb) * vDarkColor.rgb + color.rgb * vColor.rgb; +} +`; + var DarkTintRenderer = class extends import_core7.BatchRenderer { + static extension = { + name: "darkTintBatch", + type: import_core7.ExtensionType.RendererPlugin + }; + constructor(renderer) { + super(renderer); + this.shaderGenerator = new import_core7.BatchShaderGenerator(vertex2, fragment2); + this.geometryClass = DarkTintBatchGeometry; + this.vertexSize = 7; + } + packInterleavedGeometry(element, attributeBuffer, indexBuffer, aIndex, iIndex) { + const { uint32View, float32View } = attributeBuffer; + const packedVertices = aIndex / this.vertexSize; + const uvs = element.uvs; + const indicies = element.indices; + const vertexData = element.vertexData; + const textureId = element._texture.baseTexture._batchLocation; + const worldAlpha = Math.min(element.worldAlpha, 1); + const argb = import_core7.Color.shared.setValue(element._tintRGB).toPremultiplied(worldAlpha, true); + const darkargb = import_core7.Color.shared.setValue(element._darkTintRGB).premultiply(worldAlpha, true).toPremultiplied(1, false); + for (let i = 0; i < vertexData.length; i += 2) { + float32View[aIndex++] = vertexData[i]; + float32View[aIndex++] = vertexData[i + 1]; + float32View[aIndex++] = uvs[i]; + float32View[aIndex++] = uvs[i + 1]; + uint32View[aIndex++] = argb; + uint32View[aIndex++] = darkargb; + float32View[aIndex++] = textureId; + } + for (let i = 0; i < indicies.length; i++) { + indexBuffer[iIndex++] = packedVertices + indicies[i]; + } + } + }; + import_core7.extensions.add(DarkTintRenderer); + + // spine-pixi-v7/src/SlotMesh.ts + var import_core8 = __require("@pixi/core"); + var import_mesh2 = __require("@pixi/mesh"); + var SlotMesh = class _SlotMesh extends import_mesh2.Mesh { + name = ""; + static auxColor = [0, 0, 0, 0]; + warnedTwoTint = false; + constructor() { + const geometry = new import_mesh2.MeshGeometry(); + geometry.getBuffer("aVertexPosition").static = false; + geometry.getBuffer("aTextureCoord").static = false; + const meshMaterial = new import_mesh2.MeshMaterial(import_core8.Texture.EMPTY); + super(geometry, meshMaterial); + } + updateFromSpineData(slotTexture, slotBlendMode, slotName, finalVertices, finalVerticesLength, finalIndices, finalIndicesLength, darkTint) { + this.texture = slotTexture.texture; + const vertLenght = finalVerticesLength / (darkTint ? 12 : 8) * 2; + const textureCoord = this.geometry.getBuffer("aTextureCoord"); + if (textureCoord.data?.length !== vertLenght) { + textureCoord.data = new Float32Array(vertLenght); + } + const vertexCoord = this.geometry.getBuffer("aVertexPosition"); + if (vertexCoord.data?.length !== vertLenght) { + vertexCoord.data = new Float32Array(vertLenght); + } + let vertIndex = 0; + const textureCoordData = textureCoord.data; + const vertexCoordData = vertexCoord.data; + for (let i = 0; i < finalVerticesLength; i += darkTint ? 12 : 8) { + let auxi = i; + vertexCoordData[vertIndex] = finalVertices[auxi++]; + vertexCoordData[vertIndex + 1] = finalVertices[auxi++]; + auxi += 4; + textureCoordData[vertIndex] = finalVertices[auxi++]; + textureCoordData[vertIndex + 1] = finalVertices[auxi++]; + vertIndex += 2; + } + if (darkTint && !this.warnedTwoTint) { + console.warn("DarkTint is not enabled by default. To enable use a DarkSlotMesh factory while creating the Spine object."); + this.warnedTwoTint = true; + } + _SlotMesh.auxColor[0] = finalVertices[2]; + _SlotMesh.auxColor[1] = finalVertices[3]; + _SlotMesh.auxColor[2] = finalVertices[4]; + _SlotMesh.auxColor[3] = finalVertices[5]; + this.tint = _SlotMesh.auxColor; + this.alpha = _SlotMesh.auxColor[3]; + this.blendMode = SpineTexture.toPixiBlending(slotBlendMode); + const indexBuffer = this.geometry.indexBuffer; + if (indexBuffer.data.length !== finalIndices.length) { + indexBuffer.data = new Uint32Array(finalIndices); + } else { + const indexBufferData = indexBuffer.data; + for (let i = 0; i < finalIndicesLength; i++) { + indexBufferData[i] = finalIndices[i]; + } + } + this.name = slotName; + textureCoord.update(); + vertexCoord.update(); + indexBuffer.update(); + } + }; + + // spine-pixi-v7/src/Spine.ts + var import_assets3 = __require("@pixi/assets"); + var import_core9 = __require("@pixi/core"); + var import_display = __require("@pixi/display"); + var import_graphics = __require("@pixi/graphics"); + var import_events = __require("@pixi/events"); + var AABBRectangleBoundsProvider = class { + constructor(x, y, width, height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + calculateBounds() { + return { x: this.x, y: this.y, width: this.width, height: this.height }; + } + }; + var SetupPoseBoundsProvider = class { + /** + * @param clipping If true, clipping attachments are used to compute the bounds. False, by default. + */ + constructor(clipping = false) { + this.clipping = clipping; + } + calculateBounds(gameObject) { + if (!gameObject.skeleton) return { x: 0, y: 0, width: 0, height: 0 }; + const skeleton = new Skeleton(gameObject.skeleton.data); + skeleton.setupPose(); + skeleton.updateWorldTransform(2 /* update */); + const bounds = skeleton.getBoundsRect(this.clipping ? new SkeletonClipping() : void 0); + return bounds.width === Number.NEGATIVE_INFINITY ? { x: 0, y: 0, width: 0, height: 0 } : bounds; + } + }; + var SkinsAndAnimationBoundsProvider = class { + /** + * @param animation The animation to use for calculating the bounds. If null, the setup pose is used. + * @param skins The skins to use for calculating the bounds. If empty, the default skin is used. + * @param timeStep The time step to use for calculating the bounds. A smaller time step means more precision, but slower calculation. + * @param clipping If true, clipping attachments are used to compute the bounds. False, by default. + */ + constructor(animation, skins = [], timeStep = 0.05, clipping = false) { + this.animation = animation; + this.skins = skins; + this.timeStep = timeStep; + this.clipping = clipping; + } + calculateBounds(gameObject) { + if (!gameObject.skeleton || !gameObject.state) + return { x: 0, y: 0, width: 0, height: 0 }; + const animationState = new AnimationState(gameObject.state.data); + const skeleton = new Skeleton(gameObject.skeleton.data); + const clipper = this.clipping ? new SkeletonClipping() : void 0; + const data = skeleton.data; + if (this.skins.length > 0) { + const customSkin = new Skin("custom-skin"); + for (const skinName of this.skins) { + const skin = data.findSkin(skinName); + if (skin == null) continue; + customSkin.addSkin(skin); + } + skeleton.setSkin(customSkin); + } + skeleton.setupPose(); + const animation = this.animation != null ? data.findAnimation(this.animation) : null; + if (animation == null) { + skeleton.updateWorldTransform(2 /* update */); + const bounds = skeleton.getBoundsRect(clipper); + return bounds.width === Number.NEGATIVE_INFINITY ? { x: 0, y: 0, width: 0, height: 0 } : bounds; + } else { + let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; + animationState.clearTracks(); + animationState.setAnimation(0, animation, false); + const steps = Math.max(animation.duration / this.timeStep, 1); + for (let i = 0; i < steps; i++) { + const delta = i > 0 ? this.timeStep : 0; + animationState.update(delta); + animationState.apply(skeleton); + skeleton.update(delta); + skeleton.updateWorldTransform(2 /* update */); + const bounds2 = skeleton.getBoundsRect(clipper); + minX = Math.min(minX, bounds2.x); + minY = Math.min(minY, bounds2.y); + maxX = Math.max(maxX, bounds2.x + bounds2.width); + maxY = Math.max(maxY, bounds2.y + bounds2.height); + } + const bounds = { + x: minX, + y: minY, + width: maxX - minX, + height: maxY - minY + }; + return bounds.width === Number.NEGATIVE_INFINITY ? { x: 0, y: 0, width: 0, height: 0 } : bounds; + } + } + }; + var Spine = class _Spine extends import_display.Container { + /** The skeleton for this Spine game object. */ + skeleton; + /** The animation state for this Spine game object. */ + state; + darkTint = false; + hasNeverUpdated = true; + _physicsPositionInheritanceFactorX = 1; + _physicsPositionInheritanceFactorY = 1; + _physicsRotationInheritanceFactor = 1; + hasLastPhysicsTransform = false; + lastPhysicsX = 0; + lastPhysicsY = 0; + lastPhysicsRotation = 0; + currentPhysicsPosition = { x: 0, y: 0 }; + lastPhysicsPosition = { x: 0, y: 0 }; + /** Scales how much horizontal translation of this Pixi container is inherited by skeleton physics constraints. */ + get physicsPositionInheritanceFactorX() { + return this._physicsPositionInheritanceFactorX; + } + /** Scales how much vertical translation of this Pixi container is inherited by skeleton physics constraints. */ + get physicsPositionInheritanceFactorY() { + return this._physicsPositionInheritanceFactorY; + } + /** + * Sets how much translation of this Pixi container is inherited by skeleton physics constraints. + * The default is (1, 1), which applies container translation normally. Use (0, 0) + * to prevent container translation from affecting physics constraints. + */ + setPhysicsPositionInheritanceFactor(x, y) { + const wasDisabled = this._physicsPositionInheritanceFactorX === 0 && this._physicsPositionInheritanceFactorY === 0; + const isEnabled = x !== 0 || y !== 0; + this._physicsPositionInheritanceFactorX = x; + this._physicsPositionInheritanceFactorY = y; + if (wasDisabled && isEnabled) this.resetPhysicsPosition(); + } + /** + * Scales how much rotation of this Pixi container is inherited by skeleton physics constraints. + * The default is `1`, which applies container rotation normally. Use `0` to prevent container + * rotation from affecting physics constraints. + */ + get physicsRotationInheritanceFactor() { + return this._physicsRotationInheritanceFactor; + } + set physicsRotationInheritanceFactor(value) { + const wasDisabled = this._physicsRotationInheritanceFactor === 0; + this._physicsRotationInheritanceFactor = value; + if (wasDisabled && value !== 0) this.resetPhysicsRotation(); + } + _debug = void 0; + get debug() { + return this._debug; + } + /** Pass a {@link SpineDebugRenderer} or create your own {@link ISpineDebugRenderer} to render bones, meshes, ... + * @example spineGO.debug = new SpineDebugRenderer(); + */ + set debug(value) { + if (this._debug) { + this._debug.unregisterSpine(this); + } + if (value) { + value.registerSpine(this); + } + this._debug = value; + } + slotMeshFactory = () => new SlotMesh(); + beforeUpdateWorldTransforms = () => { + }; + afterUpdateWorldTransforms = () => { + }; + _autoUpdate = false; + _ticker = import_core9.Ticker.shared; + get autoUpdate() { + return this._autoUpdate; + } + /** When `true`, the Spine AnimationState and the Skeleton will be automatically updated using the {@link ticker}. */ + set autoUpdate(value) { + if (value && !this._autoUpdate) { + this._ticker.add(this.internalUpdate, this); + } else if (!value && this._autoUpdate) { + this._ticker.remove(this.internalUpdate, this); + } + this._autoUpdate = value; + } + /** The ticker to use when {@link autoUpdate} is `true`. Defaults to {@link Ticker.shared}. */ + get ticker() { + return this._ticker; + } + /** Sets the ticker to use when {@link autoUpdate} is `true`. If `autoUpdate` is already `true`, the update callback will be moved from the old ticker to the new one. */ + set ticker(value) { + value = value ?? import_core9.Ticker.shared; + if (this._ticker === value) return; + if (this._autoUpdate) { + this._ticker.remove(this.internalUpdate, this); + value.add(this.internalUpdate, this); + } + this._ticker = value; + } + meshesCache = /* @__PURE__ */ new Map(); + static vectorAux = new Vector2(); + static clipper = new SkeletonClipping(); + static QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0]; + static VERTEX_SIZE = 2 + 2 + 4; + static DARK_VERTEX_SIZE = 2 + 2 + 4 + 4; + lightColor = new Color(); + darkColor = new Color(); + clippingVertAux = new Float32Array(6); + _boundsProvider; + /** The bounds provider to use. If undefined the bounds will be dynamic, calculated when requested and based on the current frame. */ + get boundsProvider() { + return this._boundsProvider; + } + set boundsProvider(value) { + this._boundsProvider = value; + if (value) { + this._boundsSpineID = -1; + this._boundsSpineDirty = true; + this.interactiveChildren = false; + } else { + this.interactiveChildren = true; + this.hitArea = null; + } + if (!this.hasNeverUpdated) { + this.calculateBounds(); + } + } + _boundsPoint = new import_core9.Point(); + _boundsSpineID = -1; + _boundsSpineDirty = true; + constructor(options) { + super(); + if (options instanceof SkeletonData) + options = { skeletonData: options }; + else if ("skeleton" in options) + options = new.target.createOptions(options); + const { autoUpdate = true, boundsProvider, darkTint, skeletonData, ticker } = options; + this.skeleton = new Skeleton(skeletonData); + this.state = new AnimationState(new AnimationStateData(skeletonData)); + if (ticker) this._ticker = ticker; + this.autoUpdate = autoUpdate; + this.boundsProvider = boundsProvider; + this.darkTint = darkTint === void 0 ? this.skeleton.slots.some((slot) => !!slot.data.setupPose.darkColor) : darkTint; + if (this.darkTint) this.slotMeshFactory = () => new DarkSlotMesh(); + } + /** If {@link Spine.autoUpdate} is `false`, this method allows to update the AnimationState and the Skeleton with the given delta. */ + update(deltaSeconds) { + this.internalUpdate(0, deltaSeconds); + } + internalUpdate(_deltaFrame, deltaSeconds) { + this.hasNeverUpdated = false; + const delta = deltaSeconds ?? this._ticker.deltaMS / 1e3; + this.state.update(delta); + this.state.apply(this.skeleton); + this.applyTransformMovementToPhysics(); + this.beforeUpdateWorldTransforms(this); + this.skeleton.update(delta); + this.skeleton.updateWorldTransform(2 /* update */); + this.afterUpdateWorldTransforms(this); + } + /** Resets the position used for calculating inherited physics translation. */ + resetPhysicsPosition() { + const transform = this.worldTransform; + this.lastPhysicsX = transform.tx; + this.lastPhysicsY = transform.ty; + if (!this.hasLastPhysicsTransform) this.lastPhysicsRotation = this.getPhysicsRotation(); + this.hasLastPhysicsTransform = true; + } + /** Resets the rotation used for calculating inherited physics rotation. */ + resetPhysicsRotation() { + const transform = this.worldTransform; + this.lastPhysicsRotation = this.getPhysicsRotation(); + if (!this.hasLastPhysicsTransform) { + this.lastPhysicsX = transform.tx; + this.lastPhysicsY = transform.ty; + } + this.hasLastPhysicsTransform = true; + } + /** Resets the transform used for calculating inherited physics translation and rotation. */ + resetPhysicsTransform() { + this.resetPhysicsPosition(); + this.resetPhysicsRotation(); + } + applyTransformMovementToPhysics() { + const { tx, ty } = this.worldTransform; + const currentRotation = this.getPhysicsRotation(); + if (this.hasLastPhysicsTransform) { + this.applyPositionMovementToPhysics(tx, ty); + this.applyRotationMovementToPhysics(currentRotation); + } + this.setLastPhysicsTransform(tx, ty, currentRotation); + } + applyPositionMovementToPhysics(currentX, currentY) { + if (this._physicsPositionInheritanceFactorX === 0 && this._physicsPositionInheritanceFactorY === 0) return; + const currentPosition = this.currentPhysicsPosition; + currentPosition.x = currentX; + currentPosition.y = currentY; + this.pixiWorldCoordinatesToSkeleton(currentPosition); + const lastPosition = this.lastPhysicsPosition; + lastPosition.x = this.lastPhysicsX; + lastPosition.y = this.lastPhysicsY; + this.pixiWorldCoordinatesToSkeleton(lastPosition); + this.skeleton.physicsTranslate( + (currentPosition.x - lastPosition.x) * this._physicsPositionInheritanceFactorX, + (currentPosition.y - lastPosition.y) * this._physicsPositionInheritanceFactorY + ); + } + applyRotationMovementToPhysics(currentRotation) { + const rotationFactor = this._physicsRotationInheritanceFactor; + if (rotationFactor === 0) return; + this.skeleton.physicsRotate(0, 0, this.getRotationDelta(currentRotation, this.lastPhysicsRotation) * rotationFactor); + } + setLastPhysicsTransform(x, y, rotation) { + this.lastPhysicsX = x; + this.lastPhysicsY = y; + this.lastPhysicsRotation = rotation; + this.hasLastPhysicsTransform = true; + } + getPhysicsRotation() { + const transform = this.worldTransform; + return Math.atan2(transform.b, transform.a) * 180 / Math.PI; + } + getRotationDelta(current, previous) { + let delta = current - previous; + delta = (delta + 180) % 360 - 180; + return delta < -180 ? delta + 360 : delta; + } + /** Render the meshes based on the current skeleton state, render debug information, then call {@link Container.updateTransform}. */ + updateTransform() { + this.renderMeshes(); + this.sortChildren(); + this.debug?.renderDebug(this); + super.updateTransform(); + } + /** Destroy Spine game object elements, then call the {@link Container.destroy} with the given options */ + destroy(options) { + if (this.autoUpdate) this.autoUpdate = false; + this._ticker = null; + for (const [, mesh] of this.meshesCache) { + mesh?.destroy(); + } + this.state.clearListeners(); + this.debug = void 0; + this.meshesCache.clear(); + this.slotsObject.clear(); + for (const maskKey in this.clippingSlotToPixiMasks) { + const mask = this.clippingSlotToPixiMasks[maskKey]; + mask.destroy(); + delete this.clippingSlotToPixiMasks[maskKey]; + } + super.destroy(options); + } + resetMeshes() { + for (const [, mesh] of this.meshesCache) { + mesh.zIndex = -1; + mesh.visible = false; + } + } + _calculateBounds() { + if (this.hasNeverUpdated) { + this.internalUpdate(0, 0); + this.renderMeshes(); + } + } + /** + * Check the existence of a mesh for the given slot. + * If you want to manually handle which meshes go on which slot and how you cache, overwrite this method. + */ + hasMeshForSlot(slot) { + return this.meshesCache.has(slot); + } + /** + * Search the mesh corresponding to the given slot or create it, if it does not exists. + * If you want to manually handle which meshes go on which slot and how you cache, overwrite this method. + */ + getMeshForSlot(slot) { + let mesh = this.hasMeshForSlot(slot) ? this.meshesCache.get(slot) : null; + if (!mesh) { + mesh = this.slotMeshFactory(); + this.addChild(mesh); + this.meshesCache.set(slot, mesh); + } else { + mesh.visible = true; + } + return mesh; + } + slotsObject = /* @__PURE__ */ new Map(); + getSlotFromRef(slotRef) { + let slot; + if (typeof slotRef === "number") slot = this.skeleton.slots[slotRef]; + else if (typeof slotRef === "string") slot = this.skeleton.findSlot(slotRef); + else slot = slotRef; + if (!slot) throw new Error(`No slot found with the given slot reference: ${slotRef}`); + return slot; + } + /** + * Add a pixi Container as a child of the Spine object. + * The Container will be rendered coherently with the draw order of the slot. + * If an attachment is active on the slot, the pixi Container will be rendered on top of it. + * If the Container is already attached to the given slot, nothing will happen. + * If the Container is already attached to another slot, it will be removed from that slot + * before adding it to the given one. + * If another Container is already attached to this slot, the old one will be removed from this + * slot before adding it to the current one. + * @param slotRef - The slot index, or the slot name, or the Slot where the pixi object will be added to. + * @param pixiObject - The pixi Container to add. + * @param options - Optional settings for the attachment. + * @param options.followAttachmentTimeline - If true, the attachment will follow the slot's attachment timeline. + */ + addSlotObject(slotRef, pixiObject, options) { + const slot = this.getSlotFromRef(slotRef); + const oldPixiObject = this.slotsObject.get(slot)?.container; + if (oldPixiObject && oldPixiObject === pixiObject) return; + for (const [otherSlot, { container: oldPixiObjectAnotherSlot }] of this.slotsObject) { + if (otherSlot !== slot && oldPixiObjectAnotherSlot === pixiObject) { + this.removeSlotObject(otherSlot, pixiObject); + break; + } + } + if (oldPixiObject) this.removeChild(oldPixiObject); + this.slotsObject.set(slot, { + container: pixiObject, + followAttachmentTimeline: options?.followAttachmentTimeline || false + }); + this.addChild(pixiObject); + } + /** + * Return the Container connected to the given slot, if any. + * Otherwise return undefined + * @param pixiObject - The slot index, or the slot name, or the Slot to get the Container from. + * @returns a Container if any, undefined otherwise. + */ + getSlotObject(slotRef) { + const element = this.slotsObject.get(this.getSlotFromRef(slotRef)); + return element ? element.container : void 0; + } + /** + * Remove a slot object from the given slot. + * If `pixiObject` is passed and attached to the given slot, remove it from the slot. + * If `pixiObject` is not passed and the given slot has an attached Container, remove it from the slot. + * @param slotRef - The slot index, or the slot name, or the Slot where the pixi object will be remove from. + * @param pixiObject - Optional, The pixi Container to remove. + */ + removeSlotObject(slotRef, pixiObject) { + const slot = this.getSlotFromRef(slotRef); + const slotObject = this.slotsObject.get(slot)?.container; + if (!slotObject) return; + if (pixiObject && pixiObject !== slotObject) return; + this.removeChild(slotObject); + this.slotsObject.delete(slot); + } + /** + * Removes all PixiJS containers attached to any slot. + */ + removeSlotObjects() { + for (const [, slotObject] of this.slotsObject) { + slotObject.container.removeFromParent(); + } + this.slotsObject.clear(); + } + verticesCache = Utils.newFloatArray(1024); + clippingSlotToPixiMasks = {}; + pixiMaskCleanup(slot) { + const mask = this.clippingSlotToPixiMasks[slot.data.name]; + if (mask) { + delete this.clippingSlotToPixiMasks[slot.data.name]; + mask.destroy(); + } + } + updateSlotObject(element, slot, zIndex) { + const { container: slotObject, followAttachmentTimeline } = element; + const pose = slot.appliedPose; + const followAttachmentValue = followAttachmentTimeline ? Boolean(pose.attachment) : true; + const drawOrder = this.skeleton.drawOrder.appliedPose; + slotObject.visible = drawOrder.includes(slot) && followAttachmentValue; + if (slotObject.visible) { + const applied = slot.bone.appliedPose; + const matrix = slotObject.localTransform; + matrix.a = applied.a; + matrix.b = applied.c; + matrix.c = -applied.b; + matrix.d = -applied.d; + matrix.tx = applied.worldX; + matrix.ty = applied.worldY; + slotObject.transform.setFromMatrix(matrix); + slotObject.zIndex = zIndex + 1; + slotObject.alpha = this.skeleton.color.a * pose.color.a; + } + } + updateAndSetPixiMask(pixiMaskSource, pixiObject) { + if (_Spine.clipper.isClipping() && pixiMaskSource) { + let mask = this.clippingSlotToPixiMasks[pixiMaskSource.slot.data.name]; + if (!mask) { + mask = new import_graphics.Graphics(); + this.clippingSlotToPixiMasks[pixiMaskSource.slot.data.name] = mask; + this.addChild(mask); + } + if (!pixiMaskSource.computed) { + pixiMaskSource.computed = true; + const clippingAttachment = pixiMaskSource.slot.appliedPose.attachment; + const worldVerticesLength = clippingAttachment.worldVerticesLength; + if (this.clippingVertAux.length < worldVerticesLength) this.clippingVertAux = new Float32Array(worldVerticesLength); + clippingAttachment.computeWorldVertices(this.skeleton, pixiMaskSource.slot, 0, worldVerticesLength, this.clippingVertAux, 0, 2); + mask.clear().lineStyle(0).beginFill(0); + mask.moveTo(this.clippingVertAux[0], this.clippingVertAux[1]); + for (let i = 2; i < worldVerticesLength; i += 2) { + mask.lineTo(this.clippingVertAux[i], this.clippingVertAux[i + 1]); + } + mask.finishPoly(); + } + pixiObject.mask = mask; + } else if (pixiObject.mask) { + pixiObject.mask = null; + } + } + /* + * Colors in pixi are premultiplied. + * Pixi blending modes are modified to work with premultiplied colors. We cannot create custom blending modes. + * Textures are loaded as premultiplied (see assers/atlasLoader.ts: alphaMode: `page.pma ? ALPHA_MODES.PMA : ALPHA_MODES.UNPACK`): + * - textures non premultiplied are premultiplied on GPU on upload + * - textures premultiplied are uploaded on GPU as is since they are already premultiplied + * + * We need to take this into consideration and calculates final colors for both light and dark color as if textures were always premultiplied. + * This implies for example that alpha for dark tint is always 1. This is way in DarkTintRenderer we have only the alpha of the light color. + * If we ever want to load texture as non premultiplied on GPU, we must add a new dark alpha parameter to the TintMaterial and set the alpha. + */ + renderMeshes() { + this.resetMeshes(); + let triangles = null; + let uvs = null; + let pixiMaskSource = null; + const drawOrder = this.skeleton.drawOrder.appliedPose; + const slots = drawOrder; + for (let i = 0, n = drawOrder.length, slotObjectsCounter = 0; i < n; i++) { + const slot = slots[i]; + const pixiObject = this.slotsObject.get(slot); + const zIndex = i + slotObjectsCounter; + if (pixiObject) { + this.updateSlotObject(pixiObject, slot, zIndex + 1); + slotObjectsCounter++; + this.updateAndSetPixiMask(pixiMaskSource, pixiObject.container); + } + const pose = slot.appliedPose; + const useDarkColor = !!pose.darkColor; + const vertexSize = useDarkColor ? _Spine.DARK_VERTEX_SIZE : _Spine.VERTEX_SIZE; + if (!slot.bone.active) { + _Spine.clipper.clipEnd(slot); + this.pixiMaskCleanup(slot); + continue; + } + const attachment = pose.attachment; + let attachmentColor; + let texture; + let numFloats = 0; + const skeleton = this.skeleton; + if (attachment instanceof RegionAttachment) { + const region = attachment; + attachmentColor = region.color; + numFloats = vertexSize * 4; + const sequence = attachment.sequence; + const sequenceIndex = sequence.resolveIndex(pose); + attachment.computeWorldVertices(slot, attachment.getOffsets(pose), this.verticesCache, 0, vertexSize); + triangles = _Spine.QUAD_TRIANGLES; + uvs = sequence.getUVs(sequenceIndex); + texture = sequence.regions[sequenceIndex]?.texture; + } else if (attachment instanceof MeshAttachment) { + const mesh = attachment; + attachmentColor = mesh.color; + numFloats = (mesh.worldVerticesLength >> 1) * vertexSize; + if (numFloats > this.verticesCache.length) { + this.verticesCache = Utils.newFloatArray(numFloats); + } + mesh.computeWorldVertices(skeleton, slot, 0, mesh.worldVerticesLength, this.verticesCache, 0, vertexSize); + triangles = mesh.triangles; + const sequence = attachment.sequence; + const sequenceIndex = sequence.resolveIndex(pose); + uvs = sequence.getUVs(sequenceIndex); + texture = sequence.regions[sequenceIndex]?.texture; + } else if (attachment instanceof ClippingAttachment) { + _Spine.clipper.clipStart(skeleton, slot, attachment); + pixiMaskSource = { slot, computed: false }; + continue; + } else { + if (this.hasMeshForSlot(slot)) { + this.getMeshForSlot(slot).visible = false; + } + _Spine.clipper.clipEnd(slot); + this.pixiMaskCleanup(slot); + continue; + } + if (texture != null) { + const skeletonColor = skeleton.color; + const slotColor = pose.color; + const alpha = skeletonColor.a * slotColor.a * attachmentColor.a; + this.lightColor.set( + skeletonColor.r * slotColor.r * attachmentColor.r, + skeletonColor.g * slotColor.g * attachmentColor.g, + skeletonColor.b * slotColor.b * attachmentColor.b, + alpha + ); + if (pose.darkColor != null) { + this.darkColor.set( + pose.darkColor.r, + pose.darkColor.g, + pose.darkColor.b, + 1 + ); + } else { + this.darkColor.set(0, 0, 0, 1); + } + let finalVertices; + let finalVerticesLength; + let finalIndices; + let finalIndicesLength; + if (_Spine.clipper.isClipping() && _Spine.clipper.clipTriangles(this.verticesCache, triangles, triangles.length, uvs, this.lightColor, this.darkColor, useDarkColor, vertexSize)) { + finalVertices = _Spine.clipper.clippedVertices; + finalVerticesLength = finalVertices.length; + finalIndices = _Spine.clipper.clippedTriangles; + finalIndicesLength = finalIndices.length; + } else { + const verts = this.verticesCache; + for (let v = 2, u = 0, n2 = numFloats; v < n2; v += vertexSize, u += 2) { + let tempV = v; + verts[tempV++] = this.lightColor.r; + verts[tempV++] = this.lightColor.g; + verts[tempV++] = this.lightColor.b; + verts[tempV++] = this.lightColor.a; + verts[tempV++] = uvs[u]; + verts[tempV++] = uvs[u + 1]; + if (useDarkColor) { + verts[tempV++] = this.darkColor.r; + verts[tempV++] = this.darkColor.g; + verts[tempV++] = this.darkColor.b; + verts[tempV++] = this.darkColor.a; + } + } + finalVertices = this.verticesCache; + finalVerticesLength = numFloats; + finalIndices = triangles; + finalIndicesLength = triangles.length; + } + if (finalVerticesLength === 0 || finalIndicesLength === 0) { + _Spine.clipper.clipEnd(slot); + continue; + } + const mesh = this.getMeshForSlot(slot); + mesh.renderable = true; + mesh.zIndex = zIndex; + mesh.updateFromSpineData(texture, slot.data.blendMode, slot.data.name, finalVertices, finalVerticesLength, finalIndices, finalIndicesLength, useDarkColor); + } + _Spine.clipper.clipEnd(slot); + this.pixiMaskCleanup(slot); + } + _Spine.clipper.clipEnd(); + } + calculateBounds() { + if (!this._boundsProvider) { + super.calculateBounds(); + return; + } + const transform = this.transform; + if (this._boundsSpineID === transform._worldID) return; + this.updateBounds(); + const bounds = this._localBounds; + const p = this._boundsPoint; + p.set(bounds.minX, bounds.minY); + transform.worldTransform.apply(p, p); + this._bounds.minX = p.x; + this._bounds.minY = p.y; + p.set(bounds.maxX, bounds.maxY); + transform.worldTransform.apply(p, p); + this._bounds.maxX = p.x; + this._bounds.maxY = p.y; + } + updateBounds() { + if (!this._boundsProvider || !this._boundsSpineDirty) return; + this._boundsSpineDirty = false; + if (!this._localBounds) { + this._localBounds = new import_display.Bounds(); + } + const boundsSpine = this._boundsProvider.calculateBounds(this); + const bounds = this._localBounds; + bounds.clear(); + bounds.minX = boundsSpine.x; + bounds.minY = boundsSpine.y; + bounds.maxX = boundsSpine.x + boundsSpine.width; + bounds.maxY = boundsSpine.y + boundsSpine.height; + this.hitArea = this._localBounds.getRectangle(); + } + /** + * Set the position of the bone given in input through a {@link IPointData}. + * @param bone: the bone name or the bone instance to set the position + * @param outPos: the new position of the bone. + * @throws {Error}: if the given bone is not found in the skeleton, an error is thrown + */ + setBonePosition(bone, position) { + const actualBone = typeof bone === "string" ? this.skeleton.findBone(bone) : bone; + if (!actualBone) throw Error(`Cannot set bone position, bone ${String(bone)} not found`); + _Spine.vectorAux.set(position.x, position.y); + const applied = actualBone.appliedPose; + if (actualBone.parent) { + const aux = actualBone.parent.appliedPose.worldToLocal(_Spine.vectorAux); + applied.x = aux.x; + applied.y = aux.y; + } else { + applied.x = _Spine.vectorAux.x; + applied.y = _Spine.vectorAux.y; + } + } + /** + * Return the position of the bone given in input into an {@link IPointData}. + * @param bone: the bone name or the bone instance to get the position from + * @param outPos: an optional {@link IPointData} to use to return the bone position, rathern than instantiating a new object. + * @returns {IPointData | undefined}: the position of the bone, or undefined if no matching bone is found in the skeleton + */ + getBonePosition(bone, outPos) { + const actualBone = typeof bone === "string" ? this.skeleton.findBone(bone) : bone; + if (!actualBone) { + console.error(`Cannot get bone position! Bone ${String(bone)} not found`); + return outPos; + } + if (!outPos) { + outPos = { x: 0, y: 0 }; + } + outPos.x = actualBone.appliedPose.worldX; + outPos.y = actualBone.appliedPose.worldY; + return outPos; + } + /** Converts a point from the skeleton coordinate system to the Pixi world coordinate system. */ + skeletonToPixiWorldCoordinates(point) { + this.worldTransform.apply(point, point); + } + /** Converts a point from the Pixi world coordinate system to the skeleton coordinate system. */ + pixiWorldCoordinatesToSkeleton(point) { + this.worldTransform.applyInverse(point, point); + } + /** Converts a point from the Pixi world coordinate system to the bone's local coordinate system. */ + pixiWorldCoordinatesToBone(point, bone) { + this.pixiWorldCoordinatesToSkeleton(point); + if (bone.parent) { + bone.parent.appliedPose.worldToLocal(point); + } else { + bone.appliedPose.worldToLocal(point); + } + } + /** A cache containing skeleton data and atlases already loaded by {@link Spine.from}. */ + static skeletonCache = /* @__PURE__ */ Object.create(null); + /** + * Get a convenient initialization configuration for your Spine game object. + * Before instantiating a Spine game object, the skeleton (`.skel` or `.json`) and the atlas text files must be loaded into the Assets. For example: + * ``` + * PIXI.Assets.add("sackData", "/assets/sack-pro.skel"); + * PIXI.Assets.add("sackAtlas", "/assets/sack-pma.atlas"); + * await PIXI.Assets.load(["sackData", "sackAtlas"]); + * ``` + * Once a Spine game object is created, its skeleton data is cached into {@link Spine.skeletonCache} using the key: + * `${skeletonAssetName}-${atlasAssetName}-${options?.scale ?? 1}` + * + * @param options - Options to configure the Spine game object. See {@link SpineFromOptions} + * @returns {SpineOptions} The configuration ready to be passed to the Spine constructor + */ + static createOptions({ skeleton, atlas, scale = 1, darkTint, autoUpdate = true, boundsProvider, allowMissingRegions, ticker }) { + const cacheKey = `${skeleton}-${atlas}-${scale}`; + let skeletonData = _Spine.skeletonCache[cacheKey]; + if (!skeletonData) { + const skeletonAsset = import_assets3.Assets.get(skeleton); + const atlasAsset = import_assets3.Assets.get(atlas); + const attachmentLoader = new AtlasAttachmentLoader(atlasAsset, allowMissingRegions); + const parser = skeletonAsset instanceof Uint8Array ? new SkeletonBinary(attachmentLoader) : new SkeletonJson(attachmentLoader); + parser.scale = scale; + skeletonData = parser.readSkeletonData(skeletonAsset); + _Spine.skeletonCache[cacheKey] = skeletonData; + } + return { skeletonData, darkTint, autoUpdate, boundsProvider, ticker }; + } + /** + * @deprecated Use directly the Spine constructor or {@link createOptions} to make options and customize it to pass to the constructor + * Before instantiating a Spine game object, the skeleton (`.skel` or `.json`) and the atlas text files must be loaded into the Assets. For example: + * ``` + * PIXI.Assets.add("sackData", "/assets/sack-pro.skel"); + * PIXI.Assets.add("sackAtlas", "/assets/sack-pma.atlas"); + * await PIXI.Assets.load(["sackData", "sackAtlas"]); + * ``` + * Once a Spine game object is created, its skeleton data is cached into {@link Spine.skeletonCache} using the key: + * `${skeletonAssetName}-${atlasAssetName}-${options?.scale ?? 1}` + * + * @param options - Options to configure the Spine game object. See {@link SpineFromOptions} + * @returns {Spine} The Spine game object instantiated + */ + static from(options) { + return new _Spine(_Spine.createOptions(options)); + } + get tint() { + return this.skeleton.color.toRgb888(); + } + set tint(value) { + Color.rgb888ToColor(this.skeleton.color, value); + } + }; + Skeleton.yDown = true; + + // spine-pixi-v7/src/SpineDebugRenderer.ts + var import_display2 = __require("@pixi/display"); + var import_graphics2 = __require("@pixi/graphics"); + var import_text = __require("@pixi/text"); + var SpineDebugRenderer = class { + registeredSpines = /* @__PURE__ */ new Map(); + drawMeshHull = true; + drawMeshTriangles = true; + drawBones = true; + drawPaths = true; + drawBoundingBoxes = true; + drawClipping = true; + drawRegionAttachments = true; + drawEvents = true; + lineWidth = 1; + regionAttachmentsColor = 30975; + meshHullColor = 30975; + meshTrianglesColor = 16763904; + clippingPolygonColor = 16711935; + boundingBoxesRectColor = 65280; + boundingBoxesPolygonColor = 65280; + boundingBoxesCircleColor = 65280; + pathsCurveColor = 16711680; + pathsLineColor = 16711935; + skeletonXYColor = 16711680; + bonesColor = 61132; + eventFontSize = 24; + eventFontColor = 0; + /** + * The debug is attached by force to each spine object. So we need to create it inside the spine when we get the first update + */ + registerSpine(spine) { + if (this.registeredSpines.has(spine)) { + console.warn("SpineDebugRenderer.registerSpine() - this spine is already registered!", spine); + return; + } + const debugDisplayObjects = { + parentDebugContainer: new import_display2.Container(), + bones: new import_display2.Container(), + skeletonXY: new import_graphics2.Graphics(), + regionAttachmentsShape: new import_graphics2.Graphics(), + meshTrianglesLine: new import_graphics2.Graphics(), + meshHullLine: new import_graphics2.Graphics(), + clippingPolygon: new import_graphics2.Graphics(), + boundingBoxesRect: new import_graphics2.Graphics(), + boundingBoxesCircle: new import_graphics2.Graphics(), + boundingBoxesPolygon: new import_graphics2.Graphics(), + pathsCurve: new import_graphics2.Graphics(), + pathsLine: new import_graphics2.Graphics(), + eventText: new import_display2.Container(), + eventCallback: { + event: (_, event) => { + if (this.drawEvents) { + const scale = Math.abs(spine.scale.x || spine.scale.y || 1); + const text = new import_text.Text(event.data.name, { fontSize: this.eventFontSize / scale, fill: this.eventFontColor, fontFamily: "monospace" }); + text.scale.x = Math.sign(spine.scale.x); + text.anchor.set(0.5); + debugDisplayObjects.eventText.addChild(text); + setTimeout(() => { + if (!text.destroyed) { + text.destroy(); + } + }, 250); + } + } + } + }; + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.bones); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.skeletonXY); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.regionAttachmentsShape); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshTrianglesLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshHullLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.clippingPolygon); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesRect); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesCircle); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesPolygon); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsCurve); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsLine); + debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.eventText); + debugDisplayObjects.parentDebugContainer.zIndex = 9999999; + debugDisplayObjects.parentDebugContainer.accessibleChildren = false; + debugDisplayObjects.parentDebugContainer.eventMode = "none"; + debugDisplayObjects.parentDebugContainer.interactiveChildren = false; + spine.addChild(debugDisplayObjects.parentDebugContainer); + spine.state.addListener(debugDisplayObjects.eventCallback); + this.registeredSpines.set(spine, debugDisplayObjects); + } + renderDebug(spine) { + if (!this.registeredSpines.has(spine)) { + this.registerSpine(spine); + } + const debugDisplayObjects = this.registeredSpines.get(spine); + if (!debugDisplayObjects) { + return; + } + spine.addChild(debugDisplayObjects.parentDebugContainer); + debugDisplayObjects.skeletonXY.clear(); + debugDisplayObjects.regionAttachmentsShape.clear(); + debugDisplayObjects.meshTrianglesLine.clear(); + debugDisplayObjects.meshHullLine.clear(); + debugDisplayObjects.clippingPolygon.clear(); + debugDisplayObjects.boundingBoxesRect.clear(); + debugDisplayObjects.boundingBoxesCircle.clear(); + debugDisplayObjects.boundingBoxesPolygon.clear(); + debugDisplayObjects.pathsCurve.clear(); + debugDisplayObjects.pathsLine.clear(); + for (let len = debugDisplayObjects.bones.children.length; len > 0; len--) { + debugDisplayObjects.bones.children[len - 1].destroy({ children: true, texture: true, baseTexture: true }); + } + const scale = Math.abs(spine.scale.x || spine.scale.y || 1); + const lineWidth = this.lineWidth / scale; + if (this.drawBones) { + this.drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale); + } + if (this.drawPaths) { + this.drawPathsFunc(spine, debugDisplayObjects, lineWidth); + } + if (this.drawBoundingBoxes) { + this.drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth); + } + if (this.drawClipping) { + this.drawClippingFunc(spine, debugDisplayObjects, lineWidth); + } + if (this.drawMeshHull || this.drawMeshTriangles) { + this.drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth); + } + if (this.drawRegionAttachments) { + this.drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth); + } + if (this.drawEvents) { + for (const child of debugDisplayObjects.eventText.children) { + child.alpha -= 0.05; + child.y -= 2; + } + } + } + drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale) { + const skeleton = spine.skeleton; + const skeletonX = skeleton.x; + const skeletonY = skeleton.y; + const bones = skeleton.bones; + debugDisplayObjects.skeletonXY.lineStyle(lineWidth, this.skeletonXYColor, 1); + for (let i = 0, len = bones.length; i < len; i++) { + const bone = bones[i]; + const boneLen = bone.data.length; + const applied = bone.appliedPose; + const starX = skeletonX + applied.worldX; + const starY = skeletonY + applied.worldY; + const endX = skeletonX + boneLen * applied.a + applied.worldX; + const endY = skeletonY + boneLen * applied.b + applied.worldY; + if (bone.data.name === "root" || bone.data.parent === null) { + continue; + } + const w = Math.abs(starX - endX); + const h = Math.abs(starY - endY); + const a2 = Math.pow(w, 2); + const b = h; + const b2 = Math.pow(h, 2); + const c = Math.sqrt(a2 + b2); + const c2 = Math.pow(c, 2); + const rad = Math.PI / 180; + const B = Math.acos((c2 + b2 - a2) / (2 * b * c)) || 0; + if (c === 0) { + continue; + } + const gp = new import_graphics2.Graphics(); + debugDisplayObjects.bones.addChild(gp); + const refRation = c / 50 / scale; + gp.beginFill(this.bonesColor, 1); + gp.drawPolygon(0, 0, 0 - refRation, c - refRation * 3, 0, c - refRation, 0 + refRation, c - refRation * 3); + gp.endFill(); + gp.x = starX; + gp.y = starY; + gp.pivot.y = c; + let rotation = 0; + if (starX < endX && starY < endY) { + rotation = -B + 180 * rad; + } else if (starX > endX && starY < endY) { + rotation = 180 * rad + B; + } else if (starX > endX && starY > endY) { + rotation = -B; + } else if (starX < endX && starY > endY) { + rotation = B; + } else if (starY === endY && starX < endX) { + rotation = 90 * rad; + } else if (starY === endY && starX > endX) { + rotation = -90 * rad; + } else if (starX === endX && starY < endY) { + rotation = 180 * rad; + } else if (starX === endX && starY > endY) { + rotation = 0; + } + gp.rotation = rotation; + gp.lineStyle(lineWidth + refRation / 2.4, this.bonesColor, 1); + gp.beginFill(0, 0.6); + gp.drawCircle(0, c, refRation * 1.2); + gp.endFill(); + } + const startDotSize = lineWidth * 3; + debugDisplayObjects.skeletonXY.moveTo(skeletonX - startDotSize, skeletonY - startDotSize); + debugDisplayObjects.skeletonXY.lineTo(skeletonX + startDotSize, skeletonY + startDotSize); + debugDisplayObjects.skeletonXY.moveTo(skeletonX + startDotSize, skeletonY - startDotSize); + debugDisplayObjects.skeletonXY.lineTo(skeletonX - startDotSize, skeletonY + startDotSize); + } + drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth) { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + debugDisplayObjects.regionAttachmentsShape.lineStyle(lineWidth, this.regionAttachmentsColor, 1); + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + const attachment = slot.appliedPose.attachment; + if (attachment == null || !(attachment instanceof RegionAttachment)) { + continue; + } + const vertices = new Float32Array(8); + attachment.computeWorldVertices(slot, attachment.getOffsets(slot.appliedPose), vertices, 0, 2); + debugDisplayObjects.regionAttachmentsShape.drawPolygon(Array.from(vertices.slice(0, 8))); + } + } + drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth) { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + debugDisplayObjects.meshHullLine.lineStyle(lineWidth, this.meshHullColor, 1); + debugDisplayObjects.meshTrianglesLine.lineStyle(lineWidth, this.meshTrianglesColor, 1); + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + if (!slot.bone.active) { + continue; + } + const attachment = slot.appliedPose.attachment; + if (attachment == null || !(attachment instanceof MeshAttachment)) { + continue; + } + const meshAttachment = attachment; + const vertices = new Float32Array(meshAttachment.worldVerticesLength); + const triangles = meshAttachment.triangles; + let hullLength = meshAttachment.hullLength; + meshAttachment.computeWorldVertices(skeleton, slot, 0, meshAttachment.worldVerticesLength, vertices, 0, 2); + if (this.drawMeshTriangles) { + for (let i2 = 0, len2 = triangles.length; i2 < len2; i2 += 3) { + const v1 = triangles[i2] * 2; + const v2 = triangles[i2 + 1] * 2; + const v3 = triangles[i2 + 2] * 2; + debugDisplayObjects.meshTrianglesLine.moveTo(vertices[v1], vertices[v1 + 1]); + debugDisplayObjects.meshTrianglesLine.lineTo(vertices[v2], vertices[v2 + 1]); + debugDisplayObjects.meshTrianglesLine.lineTo(vertices[v3], vertices[v3 + 1]); + } + } + if (this.drawMeshHull && hullLength > 0) { + hullLength = (hullLength >> 1) * 2; + let lastX = vertices[hullLength - 2]; + let lastY = vertices[hullLength - 1]; + for (let i2 = 0, len2 = hullLength; i2 < len2; i2 += 2) { + const x = vertices[i2]; + const y = vertices[i2 + 1]; + debugDisplayObjects.meshHullLine.moveTo(x, y); + debugDisplayObjects.meshHullLine.lineTo(lastX, lastY); + lastX = x; + lastY = y; + } + } + } + } + drawClippingFunc(spine, debugDisplayObjects, lineWidth) { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + debugDisplayObjects.clippingPolygon.lineStyle(lineWidth, this.clippingPolygonColor, 1); + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + if (!slot.bone.active) { + continue; + } + const attachment = slot.appliedPose.attachment; + if (attachment == null || !(attachment instanceof ClippingAttachment)) { + continue; + } + const clippingAttachment = attachment; + const nn = clippingAttachment.worldVerticesLength; + const world = new Float32Array(nn); + clippingAttachment.computeWorldVertices(skeleton, slot, 0, nn, world, 0, 2); + debugDisplayObjects.clippingPolygon.drawPolygon(Array.from(world)); + } + } + drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth) { + debugDisplayObjects.boundingBoxesRect.lineStyle(lineWidth, this.boundingBoxesRectColor, 5); + const bounds = new SkeletonBounds(); + bounds.update(spine.skeleton, true); + if (bounds.minX !== Infinity) { + debugDisplayObjects.boundingBoxesRect.drawRect(bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight()); + } + const polygons = bounds.polygons; + const drawPolygon = (polygonVertices, _offset, count) => { + debugDisplayObjects.boundingBoxesPolygon.lineStyle(lineWidth, this.boundingBoxesPolygonColor, 1); + debugDisplayObjects.boundingBoxesPolygon.beginFill(this.boundingBoxesPolygonColor, 0.1); + if (count < 3) { + throw new Error("Polygon must contain at least 3 vertices"); + } + const paths = []; + const dotSize = lineWidth * 2; + for (let i = 0, len = polygonVertices.length; i < len; i += 2) { + const x1 = polygonVertices[i]; + const y1 = polygonVertices[i + 1]; + debugDisplayObjects.boundingBoxesCircle.lineStyle(0); + debugDisplayObjects.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor); + debugDisplayObjects.boundingBoxesCircle.drawCircle(x1, y1, dotSize); + debugDisplayObjects.boundingBoxesCircle.endFill(); + paths.push(x1, y1); + } + debugDisplayObjects.boundingBoxesPolygon.drawPolygon(paths); + debugDisplayObjects.boundingBoxesPolygon.endFill(); + }; + for (let i = 0, len = polygons.length; i < len; i++) { + const polygon = polygons[i]; + drawPolygon(polygon, 0, polygon.length); + } + } + drawPathsFunc(spine, debugDisplayObjects, lineWidth) { + const skeleton = spine.skeleton; + const slots = skeleton.slots; + debugDisplayObjects.pathsCurve.lineStyle(lineWidth, this.pathsCurveColor, 1); + debugDisplayObjects.pathsLine.lineStyle(lineWidth, this.pathsLineColor, 1); + for (let i = 0, len = slots.length; i < len; i++) { + const slot = slots[i]; + if (!slot.bone.active) { + continue; + } + const attachment = slot.appliedPose.attachment; + if (attachment == null || !(attachment instanceof PathAttachment)) { + continue; + } + const pathAttachment = attachment; + let nn = pathAttachment.worldVerticesLength; + const world = new Float32Array(nn); + pathAttachment.computeWorldVertices(skeleton, slot, 0, nn, world, 0, 2); + let x1 = world[2]; + let y1 = world[3]; + let x2 = 0; + let y2 = 0; + if (pathAttachment.closed) { + const cx1 = world[0]; + const cy1 = world[1]; + const cx2 = world[nn - 2]; + const cy2 = world[nn - 1]; + x2 = world[nn - 4]; + y2 = world[nn - 3]; + debugDisplayObjects.pathsCurve.moveTo(x1, y1); + debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2); + debugDisplayObjects.pathsLine.moveTo(x1, y1); + debugDisplayObjects.pathsLine.lineTo(cx1, cy1); + debugDisplayObjects.pathsLine.moveTo(x2, y2); + debugDisplayObjects.pathsLine.lineTo(cx2, cy2); + } + nn -= 4; + for (let ii = 4; ii < nn; ii += 6) { + const cx1 = world[ii]; + const cy1 = world[ii + 1]; + const cx2 = world[ii + 2]; + const cy2 = world[ii + 3]; + x2 = world[ii + 4]; + y2 = world[ii + 5]; + debugDisplayObjects.pathsCurve.moveTo(x1, y1); + debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2); + debugDisplayObjects.pathsLine.moveTo(x1, y1); + debugDisplayObjects.pathsLine.lineTo(cx1, cy1); + debugDisplayObjects.pathsLine.moveTo(x2, y2); + debugDisplayObjects.pathsLine.lineTo(cx2, cy2); + x1 = x2; + y1 = y2; + } + } + } + unregisterSpine(spine) { + if (!this.registeredSpines.has(spine)) { + console.warn("SpineDebugRenderer.unregisterSpine() - spine is not registered, can't unregister!", spine); + } + const debugDisplayObjects = this.registeredSpines.get(spine); + if (!debugDisplayObjects) { + return; + } + spine.state.removeListener(debugDisplayObjects.eventCallback); + debugDisplayObjects.parentDebugContainer.destroy({ baseTexture: true, children: true, texture: true }); + this.registeredSpines.delete(spine); + } + }; + return __toCommonJS(index_exports); +})(); +if (typeof window !== "undefined") { + window.spine = spine; +} +//# sourceMappingURL=spine-pixi-v7.js.map diff --git a/Extensions/Spine43Object/spine43-gdevelop-runtime.js b/Extensions/Spine43Object/spine43-gdevelop-runtime.js new file mode 100644 index 000000000000..23ecc5d51ca4 --- /dev/null +++ b/Extensions/Spine43Object/spine43-gdevelop-runtime.js @@ -0,0 +1,3866 @@ +(function() { + if (window.GDSpine43Adapter) return; + + const scriptPromises = new Map(); + const dataCache = new Map(); + + const normalizePath = value => + String(value || '') + .trim() + .replace(/\\/g, '/'); + + const isAbsoluteUrl = value => /^(?:https?:|file:|data:|blob:)/i.test(value); + + const getNodeRequire = () => { + if (typeof window !== 'undefined' && typeof window.require === 'function') + return window.require; + if ( + typeof globalThis !== 'undefined' && + typeof globalThis.require === 'function' + ) + return globalThis.require; + if (typeof require === 'function') return require; + return null; + }; + + const fileUrlToPath = url => { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + try { + const nodeUrl = nodeRequire('url'); + if (nodeUrl && nodeUrl.fileURLToPath) return nodeUrl.fileURLToPath(url); + } catch (error) {} + } + return decodeURIComponent( + String(url) + .replace(/^file:\/\/\//i, '') + .replace(/^file:\/\//i, '') + ); + }; + + const resolvePath = (path, basePath) => { + const normalizedPath = normalizePath(path); + const normalizedBase = normalizePath( + basePath || document.baseURI || window.location.href + ); + if (!normalizedPath) return ''; + if (isAbsoluteUrl(normalizedPath)) return normalizedPath; + const resources = + window.gdjs && + window.gdjs.projectData && + window.gdjs.projectData.resources && + Array.isArray(window.gdjs.projectData.resources.resources) + ? window.gdjs.projectData.resources.resources + : []; + const getBasename = value => { + const normalizedValue = normalizePath(value); + const parts = normalizedValue.split('/'); + return parts.length ? parts[parts.length - 1] : normalizedValue; + }; + const normalizedLower = normalizedPath.toLowerCase(); + const basenameLower = getBasename(normalizedPath).toLowerCase(); + const resource = resources.find(entry => { + const file = normalizePath(entry && entry.file); + const name = normalizePath(entry && entry.name); + return ( + file.toLowerCase() === normalizedLower || + name.toLowerCase() === normalizedLower || + getBasename(file).toLowerCase() === basenameLower || + getBasename(name).toLowerCase() === basenameLower + ); + }); + const candidate = + resource && resource.file ? normalizePath(resource.file) : normalizedPath; + try { + return new URL( + candidate, + normalizedBase || document.baseURI || window.location.href + ).toString(); + } catch (error) { + return candidate; + } + }; + + const ensureScriptLoaded = scriptPath => { + const resolved = resolvePath(scriptPath); + if (!resolved) + return Promise.reject(new Error('Spine runtime script path is empty.')); + if (scriptPromises.has(resolved)) return scriptPromises.get(resolved); + + const promise = new Promise((resolve, reject) => { + const existing = document.querySelector( + 'script[data-gd-spine43="' + resolved + '"]' + ); + if (existing) { + if (existing.getAttribute('data-loaded') === '1') { + resolve(); + return; + } + existing.addEventListener('load', () => resolve(), { once: true }); + existing.addEventListener( + 'error', + () => reject(new Error('Failed to load script: ' + resolved)), + { once: true } + ); + return; + } + + const shouldSandboxRuntime = + typeof window.require !== 'undefined' || + typeof require !== 'undefined' || + (typeof process !== 'undefined' && + process.versions && + process.versions.electron); + + if (shouldSandboxRuntime) { + (async () => { + try { + let source = ''; + if ( + /^file:/i.test(resolved) && + typeof window.require === 'function' + ) { + const nodeUrl = window.require('url'); + const nodeFs = window.require('fs'); + const filePath = nodeUrl.fileURLToPath + ? nodeUrl.fileURLToPath(resolved) + : decodeURI( + resolved.replace('file:///', '').replace('file://', '') + ); + source = nodeFs.readFileSync(filePath, 'utf8'); + } else { + const response = await fetch(resolved); + if (!response.ok) + throw new Error( + 'Failed to fetch script: ' + + resolved + + ' (' + + response.status + + ')' + ); + source = await response.text(); + } + + source = source.replace( + /var __require\s*=\s*\/\*\s*@__PURE__\s*\*\/\s*\(\(x\)[\s\S]*?throw new Error\('Dynamic require of "' \+ x \+ '" is not supported'\);\s*\}\);/g, + 'var __require = function(x) { return typeof PIXI !== "undefined" ? PIXI : window.PIXI; };' + ); + + const wrappedSource = + '(function(){\n' + + 'var require=undefined;var module=undefined;var exports=undefined;var define=undefined;var process=undefined;\n' + + source + + "\n;if (typeof window !== 'undefined' && typeof spine !== 'undefined') window.spine = spine;\n" + + '})();\n//# sourceURL=' + + resolved; + + const script = document.createElement('script'); + script.setAttribute('data-gd-spine43', resolved); + script.text = wrappedSource; + document.head.appendChild(script); + script.setAttribute('data-loaded', '1'); + resolve(); + } catch (error) { + reject(error); + } + })(); + return; + } + + const script = document.createElement('script'); + script.async = true; + script.src = resolved; + script.setAttribute('data-gd-spine43', resolved); + script.addEventListener( + 'load', + () => { + script.setAttribute('data-loaded', '1'); + resolve(); + }, + { once: true } + ); + script.addEventListener( + 'error', + () => { + reject(new Error('Failed to load script: ' + resolved)); + }, + { once: true } + ); + document.head.appendChild(script); + }); + + scriptPromises.set(resolved, promise); + return promise; + }; + + const getSpineNamespace = runtimeGlobal => { + const candidates = [ + runtimeGlobal ? window[runtimeGlobal] : null, + window.spine || null, + window.PIXI && window.PIXI.spine ? window.PIXI.spine : null, + typeof globalThis !== 'undefined' && globalThis.spine + ? globalThis.spine + : null, + typeof global !== 'undefined' && global.spine ? global.spine : null, + ]; + for (const candidate of candidates) { + if ( + candidate && + candidate.TextureAtlas && + candidate.AtlasAttachmentLoader + ) + return candidate; + } + return null; + }; + + const ensureRuntime = async options => { + if (!window.PIXI) { + throw new Error( + 'PIXI is not available. GDevelop Pixi renderer is required.' + ); + } + + let namespace = getSpineNamespace(options && options.runtimeGlobal); + if (namespace) return namespace; + + const runtimeScriptPath = + options && options.runtimeScriptPath ? options.runtimeScriptPath : ''; + if (!runtimeScriptPath) { + throw new Error( + 'Spine runtime is missing. Set RuntimeScriptPath to a local spine-pixi-v7 browser build.' + ); + } + + await ensureScriptLoaded(runtimeScriptPath); + namespace = getSpineNamespace(options && options.runtimeGlobal); + if (!namespace) { + throw new Error( + 'Spine runtime loaded but global namespace was not found.' + ); + } + return namespace; + }; + + const fetchCached = async (cacheKey, url, responseType) => { + if (dataCache.has(cacheKey)) return dataCache.get(cacheKey); + const promise = (async () => { + if (/^file:/i.test(url)) { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + const nodeFs = nodeRequire('fs'); + const filePath = fileUrlToPath(url); + if (responseType === 'arrayBuffer') { + const buffer = nodeFs.readFileSync(filePath); + return buffer.buffer.slice( + buffer.byteOffset, + buffer.byteOffset + buffer.byteLength + ); + } + const text = nodeFs.readFileSync(filePath, 'utf8'); + return responseType === 'json' ? JSON.parse(text) : text; + } + } + + const response = await fetch(url); + if (!response.ok) + throw new Error('Failed to load ' + url + ' (' + response.status + ')'); + if (responseType === 'json') return response.json(); + if (responseType === 'arrayBuffer') return response.arrayBuffer(); + return response.text(); + })(); + dataCache.set(cacheKey, promise); + return promise; + }; + + const loadText = url => fetchCached('text:' + url, url, 'text'); + const loadJson = url => fetchCached('json:' + url, url, 'json'); + const loadArrayBuffer = url => fetchCached('bin:' + url, url, 'arrayBuffer'); + + const loadBaseTexture = url => { + const resolved = resolvePath(url); + if (window.PIXI.BaseTexture && window.PIXI.BaseTexture.from) { + return window.PIXI.BaseTexture.from(resolved); + } + const texture = window.PIXI.Texture.from(resolved); + return texture.baseTexture || texture; + }; + + const SPINE_TEXTURE_FILTER = { + nearest: 9728, + linear: 9729, + mipmap: 9987, + mipmapnearestnearest: 9984, + mipmaplinearnearest: 9985, + mipmapnearestlinear: 9986, + mipmaplinearlinear: 9987, + }; + + const SPINE_TEXTURE_WRAP = { + clamptoedge: 33071, + mirroredrepeat: 33648, + repeat: 10497, + }; + + const normalizeAtlasEnum = (value, values, fallback) => { + if (Number.isFinite(value)) return value; + const normalized = String(value || '') + .replace(/[^a-z0-9]/gi, '') + .toLowerCase(); + return values[normalized] || fallback; + }; + + const ensureAtlasPageTextureSettings = page => { + if (!page) return; + page.minFilter = normalizeAtlasEnum( + page.minFilter, + SPINE_TEXTURE_FILTER, + SPINE_TEXTURE_FILTER.linear + ); + page.magFilter = normalizeAtlasEnum( + page.magFilter, + SPINE_TEXTURE_FILTER, + SPINE_TEXTURE_FILTER.linear + ); + page.uWrap = normalizeAtlasEnum( + page.uWrap, + SPINE_TEXTURE_WRAP, + SPINE_TEXTURE_WRAP.clamptoedge + ); + page.vWrap = normalizeAtlasEnum( + page.vWrap, + SPINE_TEXTURE_WRAP, + SPINE_TEXTURE_WRAP.clamptoedge + ); + }; + + const buildAtlas = (spineNamespace, atlasText, atlasUrl) => { + let isV4_1 = false; + const atlas = new spineNamespace.TextureAtlas(atlasText, function( + line, + callback + ) { + isV4_1 = true; + const imageUrl = resolvePath(line, atlasUrl); + callback(loadBaseTexture(imageUrl)); + }); + + if (!isV4_1 && atlas.pages) { + for (const page of atlas.pages) { + ensureAtlasPageTextureSettings(page); + const imageUrl = resolvePath(page.name, atlasUrl); + const pixiTexture = loadBaseTexture(imageUrl); + let spineTex = pixiTexture; + if (spineNamespace.SpineTexture && spineNamespace.SpineTexture.from) { + spineTex = spineNamespace.SpineTexture.from( + pixiTexture.baseTexture || pixiTexture + ); + } + page.setTexture(spineTex); + } + } + + return atlas; + }; + + const createInstance = async options => { + const spineNamespace = await ensureRuntime(options || {}); + const atlasUrl = resolvePath(options.atlasFile); + const skeletonUrl = resolvePath(options.skeletonFile); + + if (!atlasUrl) throw new Error('AtlasFile is empty.'); + if (!skeletonUrl) throw new Error('SkeletonFile is empty.'); + + const atlasText = await loadText(atlasUrl); + const atlas = buildAtlas(spineNamespace, atlasText, atlasUrl); + const atlasAttachmentLoader = new spineNamespace.AtlasAttachmentLoader( + atlas + ); + const parser = options.binaryData + ? new spineNamespace.SkeletonBinary(atlasAttachmentLoader) + : new spineNamespace.SkeletonJson(atlasAttachmentLoader); + + if (parser && typeof parser.scale !== 'undefined') { + parser.scale = Math.max(0.0001, Number(options.importScale) || 1); + } + + const rawSkeletonData = options.binaryData + ? new Uint8Array(await loadArrayBuffer(skeletonUrl)) + : await loadJson(skeletonUrl); + const skeletonData = parser.readSkeletonData(rawSkeletonData); + const spineObject = new spineNamespace.Spine(skeletonData); + + if ('autoUpdate' in spineObject) spineObject.autoUpdate = false; + + const resultHandle = { + runtime: spineNamespace, + spine: spineObject, + container: spineObject, + skeletonData: skeletonData, + lastEventName: '', + lastEventString: '', + lastEventInt: 0, + lastEventFloat: 0, + lastCompletedAnimation: '', + eventFiredThisFrame: false, + completedFiredThisFrame: false, + }; + + if (spineObject.state) { + spineObject.state.addListener({ + event: (trackIndex, event) => { + if (event && event.data) { + resultHandle.lastEventName = String(event.data.name || ''); + resultHandle.lastEventString = String(event.stringValue || ''); + resultHandle.lastEventInt = Number(event.intValue) || 0; + resultHandle.lastEventFloat = Number(event.floatValue) || 0; + resultHandle.eventFiredThisFrame = true; + } + }, + complete: trackIndex => { + if (trackIndex && trackIndex.animation) { + resultHandle.lastCompletedAnimation = String( + trackIndex.animation.name || '' + ); + resultHandle.completedFiredThisFrame = true; + } + }, + }); + } + + if (spineObject.stateData && typeof options.mixDuration !== 'undefined') { + spineObject.stateData.defaultMix = Math.max( + 0, + Number(options.mixDuration) || 0 + ); + } + + if ( + options.skinName && + spineObject.skeleton && + spineObject.skeleton.setSkinByName + ) { + spineObject.skeleton.setSkinByName(String(options.skinName)); + if (spineObject.skeleton.setSlotsToSetupPose) + spineObject.skeleton.setSlotsToSetupPose(); + } + + const initialAnimationName = + options.animationName || + (skeletonData.animations && + skeletonData.animations[0] && + skeletonData.animations[0].name) || + ''; + if ( + initialAnimationName && + spineObject.state && + spineObject.state.setAnimation + ) { + spineObject.state.setAnimation( + 0, + String(initialAnimationName), + !!options.loop + ); + } + + setInspectorOverrides(resultHandle, options.inspectorOverrides || {}); + + return resultHandle; + }; + + const getDisplayObject = handle => { + if (!handle) return null; + return handle.container || handle.spine || handle; + }; + + const getSkeleton = handle => { + const object = getDisplayObject(handle); + return object && object.skeleton ? object.skeleton : null; + }; + + const getBone = (handle, boneName) => { + const skeleton = getSkeleton(handle); + const name = String(boneName || '').trim(); + if (!skeleton || !name) return null; + if (typeof skeleton.findBone === 'function') return skeleton.findBone(name); + if (!Array.isArray(skeleton.bones)) return null; + return ( + skeleton.bones.find( + bone => bone && bone.data && bone.data.name === name + ) || null + ); + }; + + const getAppliedBonePose = bone => { + if (!bone) return null; + return bone.appliedPose || bone.pose || bone; + }; + + const ensureWorldTransforms = handle => { + if (handle && handle.transformsDirty) { + const skeleton = getSkeleton(handle); + if (skeleton && typeof skeleton.updateWorldTransform === 'function') { + skeleton.updateWorldTransform(2 /* update */); + } + handle.transformsDirty = false; + } + }; + + const refreshBoneTransforms = handle => { + if (handle) handle.transformsDirty = true; + return true; + }; + + const toFiniteNumber = (value, fallback) => { + const numeric = Number(value); + return Number.isFinite(numeric) ? numeric : fallback; + }; + + const inverseAffinePoint = (matrix, x, y) => { + if (!matrix) return { x, y }; + const det = matrix.a * matrix.d - matrix.b * matrix.c; + if (Math.abs(det) <= 1e-8) return { x, y }; + const px = x - matrix.tx; + const py = y - matrix.ty; + return { + x: (px * matrix.d - py * matrix.c) / det, + y: (py * matrix.a - px * matrix.b) / det, + }; + }; + + const applyAffinePoint = (matrix, x, y) => { + if (!matrix) return { x, y }; + return { + x: matrix.a * x + matrix.c * y + matrix.tx, + y: matrix.b * x + matrix.d * y + matrix.ty, + }; + }; + + const scenePointToContainerLocal = (object, sceneX, sceneY) => { + const point = { + x: toFiniteNumber(sceneX, 0), + y: toFiniteNumber(sceneY, 0), + }; + if (!object || !object.transform) return point; + if (object.transform.updateLocalTransform) + object.transform.updateLocalTransform(); + return inverseAffinePoint( + object.transform.localTransform, + point.x, + point.y + ); + }; + + const containerLocalToScenePoint = (object, localX, localY) => { + const point = { + x: toFiniteNumber(localX, 0), + y: toFiniteNumber(localY, 0), + }; + if (!object || !object.transform) return point; + if (object.transform.updateLocalTransform) + object.transform.updateLocalTransform(); + return applyAffinePoint(object.transform.localTransform, point.x, point.y); + }; + + const worldVectorToParentLocal = (bone, worldX, worldY) => { + if (!bone || !bone.parent) { + return { + x: toFiniteNumber(worldX, 0), + y: toFiniteNumber(worldY, 0), + }; + } + const parentPose = + bone.parent.appliedPose || bone.parent.pose || bone.parent; + const det = parentPose.a * parentPose.d - parentPose.b * parentPose.c; + if (Math.abs(det) <= 1e-8) { + return { + x: toFiniteNumber(worldX, 0), + y: toFiniteNumber(worldY, 0), + }; + } + return { + x: (worldX * parentPose.d - worldY * parentPose.b) / det, + y: (worldY * parentPose.a - worldX * parentPose.c) / det, + }; + }; + + const setupBoneOverridesHook = object => { + if (!object || object.__boneHookInstalled) return; + object.__boneHookInstalled = true; + const originalHook = object.beforeUpdateWorldTransforms; + object.beforeUpdateWorldTransforms = spine => { + if (originalHook) originalHook.call(object, spine); + if (object.__boneOverrides) { + let hasOverride = false; + for (const boneName in object.__boneOverrides) { + const overrides = object.__boneOverrides[boneName]; + const bone = spine.skeleton.findBone(boneName); + if (bone && bone.pose) { + if (overrides.x !== undefined) bone.pose.x = overrides.x; + if (overrides.y !== undefined) bone.pose.y = overrides.y; + if (overrides.rotation !== undefined) + bone.pose.rotation = overrides.rotation; + if (overrides.scaleX !== undefined) + bone.pose.scaleX = overrides.scaleX; + if (overrides.scaleY !== undefined) + bone.pose.scaleY = overrides.scaleY; + hasOverride = true; + } + } + if (hasOverride) { + // console.log("Applied bone overrides", JSON.stringify(object.__boneOverrides)); + } + } + }; + }; + + const setupQueuedPhysicsMovementHook = object => { + if (!object || object.__queuedPhysicsMovementHookInstalled) return; + object.__queuedPhysicsMovementHookInstalled = true; + const originalHook = object.beforeUpdateWorldTransforms; + object.beforeUpdateWorldTransforms = spine => { + if (originalHook) originalHook.call(object, spine); + + const movement = object.__queuedPhysicsMovement; + if (!movement) return; + object.__queuedPhysicsMovement = null; + + const skeleton = spine && spine.skeleton; + if (!skeleton) return; + + const x = toFiniteNumber(movement.x, 0); + const y = toFiniteNumber(movement.y, 0); + const rotation = toFiniteNumber(movement.rotation, 0); + if ((x || y) && typeof skeleton.physicsTranslate === 'function') { + skeleton.physicsTranslate(x, y); + } + if (rotation && typeof skeleton.physicsRotate === 'function') { + skeleton.physicsRotate(0, 0, rotation); + } + }; + }; + + const setPhysicsTransformInheritance = ( + handle, + positionX, + positionY, + rotation + ) => { + const object = getDisplayObject(handle); + if (!object) return false; + + const positionFactorX = toFiniteNumber(positionX, 0); + const positionFactorY = toFiniteNumber(positionY, 0); + if (typeof object.setPhysicsPositionInheritanceFactor === 'function') { + object.setPhysicsPositionInheritanceFactor( + positionFactorX, + positionFactorY + ); + } else { + object._physicsPositionInheritanceFactorX = positionFactorX; + object._physicsPositionInheritanceFactorY = positionFactorY; + } + + const rotationFactor = toFiniteNumber(rotation, 0); + if ('physicsRotationInheritanceFactor' in object) { + object.physicsRotationInheritanceFactor = rotationFactor; + } else { + object._physicsRotationInheritanceFactor = rotationFactor; + } + + if (typeof object.resetPhysicsTransform === 'function') { + object.resetPhysicsTransform(); + } + return true; + }; + + const queuePhysicsMovement = (handle, x, y, rotation) => { + const object = getDisplayObject(handle); + if (!object) return false; + + setupQueuedPhysicsMovementHook(object); + const movement = object.__queuedPhysicsMovement || { + x: 0, + y: 0, + rotation: 0, + }; + movement.x += toFiniteNumber(x, 0); + movement.y += toFiniteNumber(y, 0); + movement.rotation += toFiniteNumber(rotation, 0); + object.__queuedPhysicsMovement = movement; + return true; + }; + + const findConstraintByName = (skeleton, constraintName) => { + const name = String(constraintName || ''); + if (!skeleton || !name || !Array.isArray(skeleton.constraints)) return null; + return ( + skeleton.constraints.find(constraint => { + const dataName = + constraint && constraint.data && constraint.data.name + ? constraint.data.name + : constraint && constraint.name + ? constraint.name + : ''; + return dataName === name; + }) || null + ); + }; + + const applyInspectorOverrides = handle => { + const object = getDisplayObject(handle); + const skeleton = getSkeleton(handle); + const overrides = + object && object.__spine43InspectorOverrides + ? object.__spine43InspectorOverrides + : null; + if (!object || !skeleton || !overrides) return false; + + const boneOverrides = overrides.bones || {}; + for (const boneName in boneOverrides) { + const bone = getBone(handle, boneName); + const boneOverride = boneOverrides[boneName] || {}; + if (!bone || !bone.pose) continue; + if (boneOverride.x !== undefined) + bone.pose.x = toFiniteNumber(boneOverride.x, bone.pose.x || 0); + if (boneOverride.y !== undefined) + bone.pose.y = toFiniteNumber(boneOverride.y, bone.pose.y || 0); + if (boneOverride.rotation !== undefined) { + bone.pose.rotation = toFiniteNumber( + boneOverride.rotation, + bone.pose.rotation || 0 + ); + } + if (boneOverride.scaleX !== undefined) { + bone.pose.scaleX = toFiniteNumber( + boneOverride.scaleX, + bone.pose.scaleX || 1 + ); + } + if (boneOverride.scaleY !== undefined) { + bone.pose.scaleY = toFiniteNumber( + boneOverride.scaleY, + bone.pose.scaleY || 1 + ); + } + if (boneOverride.length !== undefined && bone.data) { + bone.data.length = Math.max( + 0, + toFiniteNumber(boneOverride.length, bone.data.length || 0) + ); + } + } + + const constraintOverrides = overrides.constraints || {}; + for (const constraintName in constraintOverrides) { + const constraint = findConstraintByName(skeleton, constraintName); + const constraintOverride = constraintOverrides[constraintName] || {}; + const pose = constraint && (constraint.pose || constraint.appliedPose); + if (!pose) continue; + [ + 'mix', + 'inertia', + 'strength', + 'damping', + 'mass', + 'wind', + 'gravity', + ].forEach(field => { + if (constraintOverride[field] === undefined) return; + if (field === 'mass') { + const mass = Math.max( + 0.0001, + toFiniteNumber(constraintOverride.mass, 1) + ); + pose.massInverse = 1 / mass; + } else { + pose[field] = toFiniteNumber( + constraintOverride[field], + pose[field] || 0 + ); + } + }); + if (constraintOverride.mixTranslate !== undefined) { + constraint.mixTranslate = Math.max( + 0, + Math.min(1, toFiniteNumber(constraintOverride.mixTranslate, 0)) + ); + } + if (constraintOverride.mixRotate !== undefined) { + constraint.mixRotate = Math.max( + 0, + Math.min(1, toFiniteNumber(constraintOverride.mixRotate, 0)) + ); + } + if (constraintOverride.mixScale !== undefined) { + constraint.mixScale = Math.max( + 0, + Math.min(1, toFiniteNumber(constraintOverride.mixScale, 0)) + ); + } + if (constraintOverride.mixShear !== undefined) { + constraint.mixShear = Math.max( + 0, + Math.min(1, toFiniteNumber(constraintOverride.mixShear, 0)) + ); + } + } + + const slotOverrides = overrides.slots || {}; + for (const slotName in slotOverrides) { + const slot = skeleton.findSlot + ? skeleton.findSlot(String(slotName || '')) + : null; + const color = getSlotDisplayColor(slot); + const slotOverride = slotOverrides[slotName] || {}; + if (!slot || !color) continue; + if (slotOverride.r !== undefined) + color.r = Math.max( + 0, + Math.min(1, toFiniteNumber(slotOverride.r, 255) / 255) + ); + if (slotOverride.g !== undefined) + color.g = Math.max( + 0, + Math.min(1, toFiniteNumber(slotOverride.g, 255) / 255) + ); + if (slotOverride.b !== undefined) + color.b = Math.max( + 0, + Math.min(1, toFiniteNumber(slotOverride.b, 255) / 255) + ); + if (slotOverride.a !== undefined) + color.a = Math.max(0, Math.min(1, toFiniteNumber(slotOverride.a, 1))); + } + + refreshBoneTransforms(handle); + return true; + }; + + const setupInspectorOverridesHook = (object, handle) => { + if (!object || object.__spine43InspectorOverridesHookInstalled) return; + object.__spine43InspectorOverridesHookInstalled = true; + const originalHook = object.beforeUpdateWorldTransforms; + object.beforeUpdateWorldTransforms = spine => { + if (originalHook) originalHook.call(object, spine); + applyInspectorOverrides(handle); + }; + }; + + const setInspectorOverrides = (handle, overrides) => { + const object = getDisplayObject(handle); + if (!object) return false; + object.__spine43InspectorOverrides = overrides || {}; + setupInspectorOverridesHook(object, handle); + return applyInspectorOverrides(handle); + }; + + const getBoneOverride = (handle, boneName) => { + const object = getDisplayObject(handle); + if (!object) return null; + if (!object.__boneOverrides) object.__boneOverrides = {}; + if (!object.__boneOverrides[boneName]) + object.__boneOverrides[boneName] = {}; + setupBoneOverridesHook(object); + return object.__boneOverrides[boneName]; + }; + + const cleanupBoneOverride = (handle, boneName) => { + const object = getDisplayObject(handle); + if (!object || !object.__boneOverrides || !object.__boneOverrides[boneName]) + return; + const overrides = object.__boneOverrides[boneName]; + if ( + overrides.x === undefined && + overrides.y === undefined && + overrides.rotation === undefined && + overrides.scaleX === undefined && + overrides.scaleY === undefined + ) { + delete object.__boneOverrides[boneName]; + } + }; + + const AUTO_RESET_TYPES = Object.freeze({ + position: ['x', 'y'], + rotation: ['rotation'], + scale: ['scaleX', 'scaleY'], + }); + + const normalizeAutoResetType = value => { + const text = String(value || '') + .trim() + .toLowerCase(); + if ( + text === 'position' || + text === 'move' || + text === 'pos' || + text === '移动' || + text === '位移' + ) + return 'position'; + if ( + text === 'rotation' || + text === 'rotate' || + text === 'rot' || + text === '旋转' + ) + return 'rotation'; + if (text === 'scale' || text === 'scaling' || text === '缩放') + return 'scale'; + return ''; + }; + + const splitBoneNameList = value => { + if (Array.isArray(value)) { + return value.map(entry => String(entry || '').trim()).filter(Boolean); + } + return String(value || '') + .split(/[,\n;|]+/) + .map(entry => entry.trim()) + .filter(Boolean); + }; + + const expandBoneNameList = (handle, value) => { + const raw = String(value || '') + .trim() + .toLowerCase(); + if (!raw) return []; + if (raw === '*' || raw === 'all' || raw === '全部' || raw === '所有') { + const skeleton = getSkeleton(handle); + if (!skeleton || !Array.isArray(skeleton.bones)) return []; + return skeleton.bones + .map(bone => + bone && bone.data && bone.data.name ? String(bone.data.name) : '' + ) + .filter(Boolean); + } + return splitBoneNameList(value); + }; + + const createDefaultAutoResetConfig = () => ({ + position: { enabled: false, delay: 0, duration: 0.15 }, + rotation: { enabled: false, delay: 0, duration: 0.15 }, + scale: { enabled: false, delay: 0, duration: 0.15 }, + }); + + const getAutoResetStore = handle => { + if (!handle) return null; + if (!handle.__boneAutoResetStore) { + handle.__boneAutoResetStore = { + configs: {}, + states: {}, + }; + } + return handle.__boneAutoResetStore; + }; + + const ensureBoneAutoResetConfig = (handle, boneName) => { + const store = getAutoResetStore(handle); + if (!store) return null; + if (!store.configs[boneName]) { + store.configs[boneName] = createDefaultAutoResetConfig(); + } + return store.configs[boneName]; + }; + + const getBoneAutoResetChannelConfig = (handle, boneName, type) => { + const normalizedType = normalizeAutoResetType(type); + if (!normalizedType) return null; + const config = ensureBoneAutoResetConfig(handle, boneName); + return config ? config[normalizedType] : null; + }; + + const ensureBoneAutoResetState = (handle, boneName) => { + const store = getAutoResetStore(handle); + if (!store) return null; + if (!store.states[boneName]) { + store.states[boneName] = { + position: { + active: false, + elapsed: 0, + delay: 0, + duration: 0, + progress: 0, + start: null, + target: null, + }, + rotation: { + active: false, + elapsed: 0, + delay: 0, + duration: 0, + progress: 0, + start: null, + target: null, + }, + scale: { + active: false, + elapsed: 0, + delay: 0, + duration: 0, + progress: 0, + start: null, + target: null, + }, + }; + } + return store.states[boneName]; + }; + + const cleanupBoneAutoResetState = (handle, boneName) => { + const store = getAutoResetStore(handle); + if (!store || !store.states[boneName]) return; + const state = store.states[boneName]; + if ( + !state.position.active && + !state.rotation.active && + !state.scale.active + ) { + delete store.states[boneName]; + } + }; + + const readBoneChannelValues = (bone, type) => { + if (!bone || !bone.pose) return null; + const normalizedType = normalizeAutoResetType(type); + if (normalizedType === 'position') { + return { x: bone.pose.x, y: bone.pose.y }; + } + if (normalizedType === 'rotation') { + return { rotation: bone.pose.rotation }; + } + if (normalizedType === 'scale') { + return { scaleX: bone.pose.scaleX, scaleY: bone.pose.scaleY }; + } + return null; + }; + + const readOverrideChannelValues = (override, type) => { + if (!override) return null; + const normalizedType = normalizeAutoResetType(type); + if (normalizedType === 'position') { + return { x: override.x, y: override.y }; + } + if (normalizedType === 'rotation') { + return { rotation: override.rotation }; + } + if (normalizedType === 'scale') { + return { scaleX: override.scaleX, scaleY: override.scaleY }; + } + return null; + }; + + const applyChannelValues = (bone, override, type, values) => { + if (!bone || !bone.pose || !override || !values) return; + const normalizedType = normalizeAutoResetType(type); + if (normalizedType === 'position') { + bone.pose.x = values.x; + bone.pose.y = values.y; + override.x = values.x; + override.y = values.y; + } else if (normalizedType === 'rotation') { + bone.pose.rotation = values.rotation; + override.rotation = values.rotation; + } else if (normalizedType === 'scale') { + bone.pose.scaleX = values.scaleX; + bone.pose.scaleY = values.scaleY; + override.scaleX = values.scaleX; + override.scaleY = values.scaleY; + } + }; + + const clearChannelOverrideValues = (override, type) => { + if (!override) return; + const normalizedType = normalizeAutoResetType(type); + if (normalizedType === 'position') { + delete override.x; + delete override.y; + } else if (normalizedType === 'rotation') { + delete override.rotation; + } else if (normalizedType === 'scale') { + delete override.scaleX; + delete override.scaleY; + } + }; + + const clearBoneAutoResetState = (handle, boneName, type) => { + const normalizedType = normalizeAutoResetType(type); + const store = getAutoResetStore(handle); + if (!store) return; + const names = boneName ? [boneName] : Object.keys(store.states); + for (const name of names) { + const state = store.states[name]; + if (!state) continue; + const clearTypes = normalizedType + ? [normalizedType] + : Object.keys(AUTO_RESET_TYPES); + for (const entryType of clearTypes) { + state[entryType] = { + active: false, + elapsed: 0, + delay: 0, + duration: 0, + progress: 0, + start: null, + target: null, + }; + } + cleanupBoneAutoResetState(handle, name); + } + }; + + const configureBoneAutoReset = ( + handle, + boneNamesValue, + type, + enabled, + delay, + duration + ) => { + const normalizedType = normalizeAutoResetType(type); + if (!handle || !normalizedType) return false; + const boneNames = expandBoneNameList(handle, boneNamesValue); + if (!boneNames.length) return false; + const enabledValue = !!enabled; + const delayValue = Math.max(0, Number(delay) || 0); + const durationValue = Math.max(0, Number(duration) || 0); + for (const boneName of boneNames) { + const config = getBoneAutoResetChannelConfig( + handle, + boneName, + normalizedType + ); + if (!config) continue; + config.enabled = enabledValue; + config.delay = delayValue; + config.duration = durationValue; + if (!enabledValue) { + clearBoneAutoResetState(handle, boneName, normalizedType); + } + } + return true; + }; + + const scheduleBoneAutoReset = (handle, boneName, type, targetValues) => { + const normalizedType = normalizeAutoResetType(type); + if (!handle || !boneName || !normalizedType || !targetValues) return; + const config = getBoneAutoResetChannelConfig( + handle, + boneName, + normalizedType + ); + if (!config || !config.enabled) return; + const bone = getBone(handle, boneName); + if (!bone || !bone.pose) return; + const override = getBoneOverride(handle, boneName); + const state = ensureBoneAutoResetState(handle, boneName); + const channel = state ? state[normalizedType] : null; + if (!override || !channel) return; + const currentValues = + readOverrideChannelValues(override, normalizedType) || + readBoneChannelValues(bone, normalizedType); + if (!channel.target) { + channel.target = { ...targetValues }; + } + channel.start = currentValues ? { ...currentValues } : { ...targetValues }; + channel.elapsed = 0; + channel.delay = Math.max(0, Number(config.delay) || 0); + channel.duration = Math.max(0, Number(config.duration) || 0); + channel.progress = 0; + channel.active = true; + }; + + const lerp = (fromValue, toValue, t) => fromValue + (toValue - fromValue) * t; + + const advanceBoneAutoReset = (handle, deltaTime) => { + const store = getAutoResetStore(handle); + if (!store) return false; + const delta = Math.max(0, Number(deltaTime) || 0); + if (delta <= 0) return false; + let changed = false; + for (const boneName of Object.keys(store.states)) { + const state = store.states[boneName]; + const bone = getBone(handle, boneName); + if (!state || !bone || !bone.pose) { + delete store.states[boneName]; + continue; + } + const override = getBoneOverride(handle, boneName); + for (const type of Object.keys(AUTO_RESET_TYPES)) { + const channel = state[type]; + if (!channel || !channel.active || !channel.target || !channel.start) + continue; + const config = getBoneAutoResetChannelConfig(handle, boneName, type); + if (!config || !config.enabled) { + channel.active = false; + continue; + } + channel.elapsed += delta; + if (channel.elapsed < channel.delay) { + channel.progress = 0; + continue; + } + const duration = Math.max(0, Number(channel.duration) || 0); + const t = + duration <= 0 + ? 1 + : Math.max( + 0, + Math.min(1, (channel.elapsed - channel.delay) / duration) + ); + if (type === 'position') { + applyChannelValues(bone, override, type, { + x: lerp(channel.start.x, channel.target.x, t), + y: lerp(channel.start.y, channel.target.y, t), + }); + } else if (type === 'rotation') { + applyChannelValues(bone, override, type, { + rotation: lerp(channel.start.rotation, channel.target.rotation, t), + }); + } else if (type === 'scale') { + applyChannelValues(bone, override, type, { + scaleX: lerp(channel.start.scaleX, channel.target.scaleX, t), + scaleY: lerp(channel.start.scaleY, channel.target.scaleY, t), + }); + } + channel.progress = t; + changed = true; + if (t >= 1) { + clearChannelOverrideValues(override, type); + channel.active = false; + channel.start = null; + channel.target = null; + channel.progress = 1; + cleanupBoneOverride(handle, boneName); + } + } + cleanupBoneAutoResetState(handle, boneName); + } + if (changed) refreshBoneTransforms(handle); + return changed; + }; + + const isBoneAutoResetActive = (handle, boneName, type) => { + const normalizedType = normalizeAutoResetType(type); + if (!normalizedType) return false; + const store = getAutoResetStore(handle); + const state = + store && store.states ? store.states[String(boneName || '')] : null; + return !!(state && state[normalizedType] && state[normalizedType].active); + }; + + const getBoneAutoResetProgress = (handle, boneName, type) => { + const normalizedType = normalizeAutoResetType(type); + if (!normalizedType) return 0; + const store = getAutoResetStore(handle); + const state = + store && store.states ? store.states[String(boneName || '')] : null; + if (!state || !state[normalizedType]) return 0; + return Number(state[normalizedType].progress) || 0; + }; + + const updateInstance = (handle, deltaTime) => { + const object = getDisplayObject(handle); + if (!object || typeof object.update !== 'function') return; + if (handle) { + handle.eventFiredThisFrame = false; + handle.completedFiredThisFrame = false; + advanceBoneAutoReset(handle, deltaTime); + } + object.update(Math.max(0, Number(deltaTime) || 0)); + }; + + const destroyInstance = handle => { + const object = getDisplayObject(handle); + if (!object) return; + + try { + if (object.__customDebugGraphics) { + if (object.__customDebugGraphics.parent) { + object.__customDebugGraphics.parent.removeChild( + object.__customDebugGraphics + ); + } + if (typeof object.__customDebugGraphics.destroy === 'function') { + object.__customDebugGraphics.destroy(); + } + object.__customDebugGraphics = null; + } + } catch (error) {} + + try { + if (object.parent) object.parent.removeChild(object); + } catch (error) {} + + try { + if (typeof object.destroy === 'function') { + object.destroy({ children: true, texture: false, baseTexture: false }); + } + } catch (error) { + try { + object.destroy(); + } catch (innerError) {} + } + }; + + const setAnimation = (handle, animationName, loop) => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.setAnimation) return false; + object.state.setAnimation(0, String(animationName || ''), !!loop); + return true; + }; + + const setAnimationOnTrack = (handle, trackIndex, animationName, loop) => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.setAnimation) return false; + object.state.setAnimation( + Math.max(0, Number(trackIndex) || 0), + String(animationName || ''), + !!loop + ); + return true; + }; + + const addAnimation = (handle, trackIndex, animationName, loop, delay) => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.addAnimation) return false; + object.state.addAnimation( + Math.max(0, Number(trackIndex) || 0), + String(animationName || ''), + !!loop, + Number(delay) || 0 + ); + return true; + }; + + const clearTrack = (handle, trackIndex) => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.clearTrack) return false; + object.state.clearTrack(Math.max(0, Number(trackIndex) || 0)); + return true; + }; + + const clearTracks = handle => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.clearTracks) return false; + object.state.clearTracks(); + return true; + }; + + const setSkin = (handle, skinName) => { + const object = getDisplayObject(handle); + if (!object || !object.skeleton || !object.skeleton.setSkinByName) + return false; + object.skeleton.setSkinByName(String(skinName || '')); + if (object.skeleton.setSlotsToSetupPose) + object.skeleton.setSlotsToSetupPose(); + return true; + }; + + const setMix = (handle, mixDuration) => { + const object = getDisplayObject(handle); + if (!object || !object.stateData) return false; + object.stateData.defaultMix = Math.max(0, Number(mixDuration) || 0); + return true; + }; + + const setVisible = (handle, visible) => { + const object = getDisplayObject(handle); + if (!object) return false; + object.visible = !!visible; + return true; + }; + + const getCurrentAnimation = handle => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.getCurrent) return ''; + const trackEntry = object.state.getCurrent(0); + const animation = + trackEntry && trackEntry.animation ? trackEntry.animation : null; + return animation && animation.name ? String(animation.name) : ''; + }; + + const boneExists = (handle, boneName) => !!getBone(handle, boneName); + + const getBoneChildCount = (handle, boneName) => { + const bone = getBone(handle, boneName); + if (!bone) return 0; + if (bone.children && bone.children.length) return bone.children.length || 0; + const skeleton = getSkeleton(handle); + if (!skeleton || !Array.isArray(skeleton.bones)) return 0; + return skeleton.bones.filter(entry => entry && entry.parent === bone) + .length; + }; + + const getBoneLength = (handle, boneName) => { + const bone = getBone(handle, boneName); + if (!bone || !bone.data) return 0; + return Number(bone.data.length) || 0; + }; + + const getBoneParentName = (handle, boneName) => { + const bone = getBone(handle, boneName); + if (!bone) return ''; + if (!bone.parent) return 'ROOT'; + if (!bone.parent.data) return ''; + return String(bone.parent.data.name || ''); + }; + + const setBonePosition = (handle, boneName, x, y) => { + const bone = getBone(handle, boneName); + if (!bone || !bone.pose) return false; + const targetValues = readBoneChannelValues(bone, 'position'); + bone.pose.x = toFiniteNumber(x, bone.pose.x); + bone.pose.y = toFiniteNumber(y, bone.pose.y); + const overrides = getBoneOverride(handle, boneName); + if (overrides) { + overrides.x = bone.pose.x; + overrides.y = bone.pose.y; + } + scheduleBoneAutoReset(handle, boneName, 'position', targetValues); + refreshBoneTransforms(handle); + return true; + }; + + const offsetBonePosition = (handle, boneName, deltaX, deltaY) => { + const bone = getBone(handle, boneName); + if (!bone || !bone.pose) return false; + const targetValues = readBoneChannelValues(bone, 'position'); + bone.pose.x += toFiniteNumber(deltaX, 0); + bone.pose.y += toFiniteNumber(deltaY, 0); + const overrides = getBoneOverride(handle, boneName); + if (overrides) { + overrides.x = bone.pose.x; + overrides.y = bone.pose.y; + } + scheduleBoneAutoReset(handle, boneName, 'position', targetValues); + refreshBoneTransforms(handle); + return true; + }; + + const setBoneRotation = (handle, boneName, rotation) => { + const bone = getBone(handle, boneName); + if (!bone || !bone.pose) return false; + const targetValues = readBoneChannelValues(bone, 'rotation'); + bone.pose.rotation = toFiniteNumber(rotation, bone.pose.rotation); + const overrides = getBoneOverride(handle, boneName); + if (overrides) { + overrides.rotation = bone.pose.rotation; + } + scheduleBoneAutoReset(handle, boneName, 'rotation', targetValues); + refreshBoneTransforms(handle); + return true; + }; + + const offsetBoneRotation = (handle, boneName, deltaRotation) => { + const bone = getBone(handle, boneName); + if (!bone || !bone.pose) return false; + const targetValues = readBoneChannelValues(bone, 'rotation'); + bone.pose.rotation += toFiniteNumber(deltaRotation, 0); + const overrides = getBoneOverride(handle, boneName); + if (overrides) { + overrides.rotation = bone.pose.rotation; + } + scheduleBoneAutoReset(handle, boneName, 'rotation', targetValues); + refreshBoneTransforms(handle); + return true; + }; + + const setBoneScale = (handle, boneName, scaleX, scaleY) => { + const bone = getBone(handle, boneName); + if (!bone || !bone.pose) return false; + const targetValues = readBoneChannelValues(bone, 'scale'); + bone.pose.scaleX = toFiniteNumber(scaleX, bone.pose.scaleX); + bone.pose.scaleY = toFiniteNumber(scaleY, bone.pose.scaleY); + const overrides = getBoneOverride(handle, boneName); + if (overrides) { + overrides.scaleX = bone.pose.scaleX; + overrides.scaleY = bone.pose.scaleY; + } + scheduleBoneAutoReset(handle, boneName, 'scale', targetValues); + refreshBoneTransforms(handle); + return true; + }; + + const offsetBoneScale = (handle, boneName, deltaScaleX, deltaScaleY) => { + const bone = getBone(handle, boneName); + if (!bone || !bone.pose) return false; + const targetValues = readBoneChannelValues(bone, 'scale'); + bone.pose.scaleX += toFiniteNumber(deltaScaleX, 0); + bone.pose.scaleY += toFiniteNumber(deltaScaleY, 0); + const overrides = getBoneOverride(handle, boneName); + if (overrides) { + overrides.scaleX = bone.pose.scaleX; + overrides.scaleY = bone.pose.scaleY; + } + scheduleBoneAutoReset(handle, boneName, 'scale', targetValues); + refreshBoneTransforms(handle); + return true; + }; + + const getBoneValue = (handle, boneName, fieldName) => { + const bone = getBone(handle, boneName); + if (!bone || !bone.pose) return 0; + const value = bone.pose[fieldName]; + return Number.isFinite(Number(value)) ? Number(value) : 0; + }; + + const getBoneSceneX = (handle, boneName) => { + ensureWorldTransforms(handle); + const object = getDisplayObject(handle); + const bone = getBone(handle, boneName); + const applied = getAppliedBonePose(bone); + if (!object || !bone || !applied) return 0; + const bx = applied.worldX; + const by = applied.worldY; + if (object.transform) { + if (object.transform.updateLocalTransform) + object.transform.updateLocalTransform(); + const local = object.transform.localTransform; + if (local) return local.a * bx + local.c * by + local.tx; + } + return bx; + }; + + const getBoneSceneY = (handle, boneName) => { + ensureWorldTransforms(handle); + const object = getDisplayObject(handle); + const bone = getBone(handle, boneName); + const applied = getAppliedBonePose(bone); + if (!object || !bone || !applied) return 0; + const bx = applied.worldX; + const by = applied.worldY; + if (object.transform) { + if (object.transform.updateLocalTransform) + object.transform.updateLocalTransform(); + const local = object.transform.localTransform; + if (local) return local.b * bx + local.d * by + local.ty; + } + return by; + }; + + const getBoneSceneAxis = (handle, boneName) => { + ensureWorldTransforms(handle); + const object = getDisplayObject(handle); + const bone = getBone(handle, boneName); + const applied = getAppliedBonePose(bone); + if (!bone || !applied) return null; + + let axisX = applied.a; + let axisY = applied.c; + if (object && object.transform) { + if (object.transform.updateLocalTransform) + object.transform.updateLocalTransform(); + const local = object.transform.localTransform; + if (local) { + axisX = local.a * applied.a + local.c * applied.c; + axisY = local.b * applied.a + local.d * applied.c; + } + } + + const axisLength = Math.hypot(axisX, axisY); + if (axisLength <= 1e-8) return null; + return { x: axisX, y: axisY }; + }; + + const getBoneSceneRotation = (handle, boneName) => { + const axis = getBoneSceneAxis(handle, boneName); + if (!axis) return 0; + return Math.atan2(axis.y, axis.x) * (180 / Math.PI); + }; + + const getBoneSceneSegment = (handle, boneName) => { + ensureWorldTransforms(handle); + const object = getDisplayObject(handle); + const bone = getBone(handle, boneName); + const applied = getAppliedBonePose(bone); + if (!object || !bone || !applied || !bone.data) return null; + + const bx = getBoneSceneX(handle, boneName); + const by = getBoneSceneY(handle, boneName); + + const tipWorldX = applied.worldX + bone.data.length * applied.a; + const tipWorldY = applied.worldY + bone.data.length * applied.c; + + let tipX = tipWorldX; + let tipY = tipWorldY; + if (object.transform) { + if (object.transform.updateLocalTransform) + object.transform.updateLocalTransform(); + const local = object.transform.localTransform; + if (local) { + tipX = local.a * tipWorldX + local.c * tipWorldY + local.tx; + tipY = local.b * tipWorldX + local.d * tipWorldY + local.ty; + } + } + + return { bx, by, tipX, tipY }; + }; + + const getBoneSceneSegmentData = (handle, boneName) => { + const segment = getBoneSceneSegment(handle, boneName); + if (!segment) return null; + return { + rootX: segment.bx, + rootY: segment.by, + midX: (segment.bx + segment.tipX) / 2, + midY: (segment.by + segment.tipY) / 2, + tipX: segment.tipX, + tipY: segment.tipY, + length: Math.hypot(segment.tipX - segment.bx, segment.tipY - segment.by), + }; + }; + + const getSlotAttachment = slot => { + if (!slot) return null; + if (slot.appliedPose && slot.appliedPose.attachment) { + return slot.appliedPose.attachment; + } + if (typeof slot.getAppliedPose === 'function') { + try { + const appliedPose = slot.getAppliedPose(); + if (appliedPose) { + if (typeof appliedPose.getAttachment === 'function') { + const attachment = appliedPose.getAttachment(); + if (attachment) return attachment; + } + if (appliedPose.attachment) return appliedPose.attachment; + } + } catch (error) {} + } + if (typeof slot.getPose === 'function') { + try { + const pose = slot.getPose(); + if (pose) { + if (typeof pose.getAttachment === 'function') { + const attachment = pose.getAttachment(); + if (attachment) return attachment; + } + if (pose.attachment) return pose.attachment; + } + } catch (error) {} + } + if (typeof slot.getAttachment === 'function') { + const attachment = slot.getAttachment(); + if (attachment) return attachment; + } + return slot.attachment || null; + }; + + const getAttachmentWorldVertices = (attachment, slot, skeleton) => { + if ( + !attachment || + !slot || + typeof attachment.computeWorldVertices !== 'function' + ) + return []; + const slotPose = + slot.appliedPose || + (typeof slot.getAppliedPose === 'function' + ? slot.getAppliedPose() + : null) || + slot.pose || + null; + let regionOffsets = null; + if (typeof attachment.getOffsets === 'function') { + try { + const offsets = attachment.getOffsets(slotPose); + if (offsets && typeof offsets.length === 'number') + regionOffsets = offsets; + } catch (error) {} + } + const fallbackVertexCount = + Math.max( + 0, + regionOffsets && typeof regionOffsets.length === 'number' + ? regionOffsets.length + : 0, + Number(attachment.worldVerticesLength) || 0, + Array.isArray(attachment.offset) ? attachment.offset.length : 0, + Array.isArray(attachment.vertices) ? attachment.vertices.length : 0, + attachment.regionUVs && typeof attachment.regionUVs.length === 'number' + ? attachment.regionUVs.length + : 0, + attachment.uvs && typeof attachment.uvs.length === 'number' + ? attachment.uvs.length + : 0 + ) || 8; + const output = new Float32Array(fallbackVertexCount); + const invocations = []; + if (regionOffsets && typeof regionOffsets.length === 'number') { + invocations.push(() => + attachment.computeWorldVertices(slot, regionOffsets, output, 0, 2) + ); + } + if (skeleton) { + invocations.push(() => + attachment.computeWorldVertices( + skeleton, + slot, + 0, + fallbackVertexCount, + output, + 0, + 2 + ) + ); + } + invocations.push( + () => + attachment.computeWorldVertices( + slot, + 0, + fallbackVertexCount, + output, + 0, + 2 + ), + () => attachment.computeWorldVertices(slot, output, 0, 2), + () => attachment.computeWorldVertices(slot.bone || slot, output, 0, 2), + () => attachment.computeWorldVertices(slot, output), + () => attachment.computeWorldVertices(slot.bone || slot, output) + ); + for (const invoke of invocations) { + try { + invoke(); + return Array.from(output); + } catch (error) {} + } + return []; + }; + + const getAttachmentTriangleIndices = (attachment, worldVertices) => { + if (!attachment) return []; + if ( + attachment.triangles && + typeof attachment.triangles.length === 'number' + ) { + return Array.from(attachment.triangles); + } + const vertexCount = Math.floor( + (worldVertices && worldVertices.length ? worldVertices.length : 0) / 2 + ); + if (vertexCount < 3) return []; + if (vertexCount === 4) return [0, 1, 2, 2, 3, 0]; + const indices = []; + for (let index = 1; index < vertexCount - 1; index++) { + indices.push(0, index, index + 1); + } + return indices; + }; + + const getSceneAttachmentTriangles = handle => { + ensureWorldTransforms(handle); + const object = getDisplayObject(handle); + const skeleton = getSkeleton(handle); + if (!object || !skeleton) return { triangles: [], bounds: null }; + const slots = + Array.isArray(skeleton.drawOrder) && skeleton.drawOrder.length + ? skeleton.drawOrder + : skeleton.slots; + if (!Array.isArray(slots) || !slots.length) + return { triangles: [], bounds: null }; + const triangles = []; + let minX = Number.POSITIVE_INFINITY; + let minY = Number.POSITIVE_INFINITY; + let maxX = Number.NEGATIVE_INFINITY; + let maxY = Number.NEGATIVE_INFINITY; + + for (const slot of slots) { + if (!slot) continue; + const attachment = getSlotAttachment(slot); + if (!attachment) continue; + const worldVertices = getAttachmentWorldVertices( + attachment, + slot, + skeleton + ); + if (!worldVertices.length || worldVertices.length < 6) continue; + const indices = getAttachmentTriangleIndices(attachment, worldVertices); + if (!indices.length) continue; + for (let index = 0; index + 2 < indices.length; index += 3) { + const ia = Number(indices[index]) * 2; + const ib = Number(indices[index + 1]) * 2; + const ic = Number(indices[index + 2]) * 2; + if ( + ia < 0 || + ib < 0 || + ic < 0 || + ia + 1 >= worldVertices.length || + ib + 1 >= worldVertices.length || + ic + 1 >= worldVertices.length + ) { + continue; + } + const a = containerLocalToScenePoint( + object, + worldVertices[ia], + worldVertices[ia + 1] + ); + const b = containerLocalToScenePoint( + object, + worldVertices[ib], + worldVertices[ib + 1] + ); + const c = containerLocalToScenePoint( + object, + worldVertices[ic], + worldVertices[ic + 1] + ); + const triMinX = Math.min(a.x, b.x, c.x); + const triMinY = Math.min(a.y, b.y, c.y); + const triMaxX = Math.max(a.x, b.x, c.x); + const triMaxY = Math.max(a.y, b.y, c.y); + minX = Math.min(minX, triMinX); + minY = Math.min(minY, triMinY); + maxX = Math.max(maxX, triMaxX); + maxY = Math.max(maxY, triMaxY); + triangles.push({ + ax: a.x, + ay: a.y, + bx: b.x, + by: b.y, + cx: c.x, + cy: c.y, + minX: triMinX, + minY: triMinY, + maxX: triMaxX, + maxY: triMaxY, + slotName: + slot && slot.data && slot.data.name ? String(slot.data.name) : '', + attachmentName: + attachment && attachment.name ? String(attachment.name) : '', + }); + } + } + + return { + triangles, + bounds: triangles.length + ? { left: minX, top: minY, right: maxX, bottom: maxY } + : null, + }; + }; + + const isValidSceneBounds = bounds => + !!( + bounds && + Number.isFinite(bounds.left) && + Number.isFinite(bounds.top) && + Number.isFinite(bounds.right) && + Number.isFinite(bounds.bottom) && + bounds.right > bounds.left && + bounds.bottom > bounds.top + ); + + const getSceneBoundsArea = bounds => + isValidSceneBounds(bounds) + ? Math.abs(bounds.right - bounds.left) * + Math.abs(bounds.bottom - bounds.top) + : 0; + + const chooseSceneBounds = (attachmentBounds, containerBounds) => { + if (!isValidSceneBounds(attachmentBounds)) { + return isValidSceneBounds(containerBounds) ? containerBounds : null; + } + if (!isValidSceneBounds(containerBounds)) return attachmentBounds; + + const attachmentArea = getSceneBoundsArea(attachmentBounds); + const containerArea = getSceneBoundsArea(containerBounds); + return containerArea > attachmentArea * 1.25 + ? containerBounds + : attachmentBounds; + }; + + const getSceneAttachmentBounds = handle => { + const meshData = getSceneAttachmentTriangles(handle); + const attachmentBounds = + meshData && isValidSceneBounds(meshData.bounds) ? meshData.bounds : null; + + ensureWorldTransforms(handle); + const object = getDisplayObject(handle); + if (!object || !object.getLocalBounds) return attachmentBounds; + + try { + const localBounds = object.getLocalBounds(); + if ( + localBounds && + Number.isFinite(localBounds.x) && + Number.isFinite(localBounds.y) && + Number.isFinite(localBounds.width) && + Number.isFinite(localBounds.height) && + localBounds.width > 0 && + localBounds.height > 0 + ) { + const topLeft = containerLocalToScenePoint( + object, + localBounds.x, + localBounds.y + ); + const topRight = containerLocalToScenePoint( + object, + localBounds.x + localBounds.width, + localBounds.y + ); + const bottomLeft = containerLocalToScenePoint( + object, + localBounds.x, + localBounds.y + localBounds.height + ); + const bottomRight = containerLocalToScenePoint( + object, + localBounds.x + localBounds.width, + localBounds.y + localBounds.height + ); + const containerBounds = { + left: Math.min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x), + top: Math.min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y), + right: Math.max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x), + bottom: Math.max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y), + }; + return chooseSceneBounds(attachmentBounds, containerBounds); + } + } catch (error) {} + + return attachmentBounds; + }; + + const pointInRect = (x, y, left, top, right, bottom) => + x >= left && x <= right && y >= top && y <= bottom; + + const pointInTriangle = (px, py, ax, ay, bx, by, cx, cy) => { + const v0x = cx - ax; + const v0y = cy - ay; + const v1x = bx - ax; + const v1y = by - ay; + const v2x = px - ax; + const v2y = py - ay; + const dot00 = v0x * v0x + v0y * v0y; + const dot01 = v0x * v1x + v0y * v1y; + const dot02 = v0x * v2x + v0y * v2y; + const dot11 = v1x * v1x + v1y * v1y; + const dot12 = v1x * v2x + v1y * v2y; + const denom = dot00 * dot11 - dot01 * dot01; + if (Math.abs(denom) <= 1e-8) return false; + const invDenom = 1 / denom; + const u = (dot11 * dot02 - dot01 * dot12) * invDenom; + const v = (dot00 * dot12 - dot01 * dot02) * invDenom; + return u >= 0 && v >= 0 && u + v <= 1; + }; + + const segmentsIntersect = (ax, ay, bx, by, cx, cy, dx, dy) => { + const abx = bx - ax; + const aby = by - ay; + const cdx = dx - cx; + const cdy = dy - cy; + const denom = abx * cdy - aby * cdx; + const acx = cx - ax; + const acy = cy - ay; + if (Math.abs(denom) <= 1e-8) return false; + const t = (acx * cdy - acy * cdx) / denom; + const u = (acx * aby - acy * abx) / denom; + return t >= 0 && t <= 1 && u >= 0 && u <= 1; + }; + + const triangleIntersectsRect = (triangle, left, top, right, bottom) => { + if (!triangle) return false; + if ( + triangle.maxX < left || + triangle.minX > right || + triangle.maxY < top || + triangle.minY > bottom + ) + return false; + if ( + pointInRect(triangle.ax, triangle.ay, left, top, right, bottom) || + pointInRect(triangle.bx, triangle.by, left, top, right, bottom) || + pointInRect(triangle.cx, triangle.cy, left, top, right, bottom) + ) { + return true; + } + if ( + pointInTriangle( + left, + top, + triangle.ax, + triangle.ay, + triangle.bx, + triangle.by, + triangle.cx, + triangle.cy + ) || + pointInTriangle( + right, + top, + triangle.ax, + triangle.ay, + triangle.bx, + triangle.by, + triangle.cx, + triangle.cy + ) || + pointInTriangle( + left, + bottom, + triangle.ax, + triangle.ay, + triangle.bx, + triangle.by, + triangle.cx, + triangle.cy + ) || + pointInTriangle( + right, + bottom, + triangle.ax, + triangle.ay, + triangle.bx, + triangle.by, + triangle.cx, + triangle.cy + ) + ) { + return true; + } + const rectEdges = [ + [left, top, right, top], + [right, top, right, bottom], + [right, bottom, left, bottom], + [left, bottom, left, top], + ]; + const triEdges = [ + [triangle.ax, triangle.ay, triangle.bx, triangle.by], + [triangle.bx, triangle.by, triangle.cx, triangle.cy], + [triangle.cx, triangle.cy, triangle.ax, triangle.ay], + ]; + for (const triEdge of triEdges) { + for (const rectEdge of rectEdges) { + if ( + segmentsIntersect( + triEdge[0], + triEdge[1], + triEdge[2], + triEdge[3], + rectEdge[0], + rectEdge[1], + rectEdge[2], + rectEdge[3] + ) + ) { + return true; + } + } + } + return false; + }; + + const translateTriangle = (triangle, deltaX, deltaY) => ({ + ax: triangle.ax + deltaX, + ay: triangle.ay + deltaY, + bx: triangle.bx + deltaX, + by: triangle.by + deltaY, + cx: triangle.cx + deltaX, + cy: triangle.cy + deltaY, + minX: triangle.minX + deltaX, + minY: triangle.minY + deltaY, + maxX: triangle.maxX + deltaX, + maxY: triangle.maxY + deltaY, + slotName: triangle.slotName, + attachmentName: triangle.attachmentName, + }); + + const getTrianglesBounds = triangles => { + if (!Array.isArray(triangles) || !triangles.length) return null; + let minX = Number.POSITIVE_INFINITY; + let minY = Number.POSITIVE_INFINITY; + let maxX = Number.NEGATIVE_INFINITY; + let maxY = Number.NEGATIVE_INFINITY; + for (const triangle of triangles) { + minX = Math.min(minX, triangle.minX); + minY = Math.min(minY, triangle.minY); + maxX = Math.max(maxX, triangle.maxX); + maxY = Math.max(maxY, triangle.maxY); + } + return { minX, minY, maxX, maxY }; + }; + + const getTrianglesIntersectingRect = ( + triangles, + left, + top, + right, + bottom + ) => { + if (!Array.isArray(triangles) || !triangles.length) return []; + return triangles.filter(triangle => + triangleIntersectsRect(triangle, left, top, right, bottom) + ); + }; + + const normalizeBlockerCollisionMode = value => { + const text = String(value || '') + .trim() + .toLowerCase(); + if ( + text === 'imagepixels' || + text === 'pixel' || + text === 'pixels' || + text === 'image' || + text === '图像像素模式' || + text === '像素' || + text === '像素模式' + ) { + return 'ImagePixels'; + } + return 'CollisionMask'; + }; + + const getBlockerBounds = blocker => { + const pixelBounds = + blocker && blocker.pixelCollision && blocker.pixelCollision.bounds; + if (pixelBounds) { + return { + left: Math.min( + toFiniteNumber(pixelBounds.left, 0), + toFiniteNumber(pixelBounds.right, 0) + ), + top: Math.min( + toFiniteNumber(pixelBounds.top, 0), + toFiniteNumber(pixelBounds.bottom, 0) + ), + right: Math.max( + toFiniteNumber(pixelBounds.left, 0), + toFiniteNumber(pixelBounds.right, 0) + ), + bottom: Math.max( + toFiniteNumber(pixelBounds.top, 0), + toFiniteNumber(pixelBounds.bottom, 0) + ), + }; + } + return { + left: Math.min( + toFiniteNumber(blocker && blocker.left, 0), + toFiniteNumber(blocker && blocker.right, 0) + ), + top: Math.min( + toFiniteNumber(blocker && blocker.top, 0), + toFiniteNumber(blocker && blocker.bottom, 0) + ), + right: Math.max( + toFiniteNumber(blocker && blocker.left, 0), + toFiniteNumber(blocker && blocker.right, 0) + ), + bottom: Math.max( + toFiniteNumber(blocker && blocker.top, 0), + toFiniteNumber(blocker && blocker.bottom, 0) + ), + }; + }; + + const getPixelCollisionRowBounds = (pixelCollision, rowIndex) => { + if (!pixelCollision || !pixelCollision.bounds) return null; + const bounds = pixelCollision.bounds; + const height = Math.max( + 1, + Math.floor(toFiniteNumber(pixelCollision.height, 0)) + ); + const sceneHeight = bounds.bottom - bounds.top; + if (sceneHeight <= 1e-8) return null; + const flipY = !!pixelCollision.flipY; + const startRatio = flipY + ? (height - (rowIndex + 1)) / height + : rowIndex / height; + const endRatio = flipY + ? (height - rowIndex) / height + : (rowIndex + 1) / height; + return { + top: bounds.top + sceneHeight * startRatio, + bottom: bounds.top + sceneHeight * endRatio, + }; + }; + + const getPixelCollisionSpanBounds = ( + pixelCollision, + rowIndex, + startColumn, + endColumn + ) => { + if (!pixelCollision || !pixelCollision.bounds) return null; + const bounds = pixelCollision.bounds; + const width = Math.max( + 1, + Math.floor(toFiniteNumber(pixelCollision.width, 0)) + ); + const sceneWidth = bounds.right - bounds.left; + if (sceneWidth <= 1e-8) return null; + const flipX = !!pixelCollision.flipX; + const startRatio = flipX + ? (width - endColumn) / width + : startColumn / width; + const endRatio = flipX ? (width - startColumn) / width : endColumn / width; + const rowBounds = getPixelCollisionRowBounds(pixelCollision, rowIndex); + if (!rowBounds) return null; + return { + left: bounds.left + sceneWidth * startRatio, + top: rowBounds.top, + right: bounds.left + sceneWidth * endRatio, + bottom: rowBounds.bottom, + }; + }; + + const triangleIntersectsPixelCollision = ( + triangle, + pixelCollision, + left, + top, + right, + bottom + ) => { + if ( + !triangle || + !pixelCollision || + !pixelCollision.bounds || + !Array.isArray(pixelCollision.rows) + ) + return false; + const bounds = pixelCollision.bounds; + const width = Math.max( + 1, + Math.floor(toFiniteNumber(pixelCollision.width, 0)) + ); + const height = Math.max( + 1, + Math.floor(toFiniteNumber(pixelCollision.height, 0)) + ); + const sceneWidth = bounds.right - bounds.left; + const sceneHeight = bounds.bottom - bounds.top; + if (sceneWidth <= 1e-8 || sceneHeight <= 1e-8) return false; + if ( + triangle.maxX < left || + triangle.minX > right || + triangle.maxY < top || + triangle.minY > bottom + ) + return false; + const rowStart = Math.max( + 0, + Math.floor( + ((Math.max(triangle.minY, top) - bounds.top) / sceneHeight) * height + ) + ); + const rowEnd = Math.min( + height - 1, + Math.floor( + ((Math.min(triangle.maxY, bottom) - bounds.top) / sceneHeight) * height + ) + ); + for (let rowIndex = rowStart; rowIndex <= rowEnd; rowIndex++) { + const spans = pixelCollision.rows[rowIndex]; + if (!Array.isArray(spans) || !spans.length) continue; + const rowBounds = getPixelCollisionRowBounds(pixelCollision, rowIndex); + if ( + !rowBounds || + rowBounds.bottom < triangle.minY || + rowBounds.top > triangle.maxY + ) + continue; + for (const span of spans) { + if (!Array.isArray(span) || span.length < 2) continue; + const spanBounds = getPixelCollisionSpanBounds( + pixelCollision, + rowIndex, + span[0], + span[1] + ); + if (!spanBounds) continue; + if (spanBounds.right < triangle.minX || spanBounds.left > triangle.maxX) + continue; + if ( + triangleIntersectsRect( + triangle, + spanBounds.left, + spanBounds.top, + spanBounds.right, + spanBounds.bottom + ) + ) { + return true; + } + } + } + return false; + }; + + const getTrianglesIntersectingBlocker = ( + triangles, + blocker, + left, + top, + right, + bottom + ) => { + if (!Array.isArray(triangles) || !triangles.length) return []; + const collisionMode = normalizeBlockerCollisionMode( + blocker && blocker.collisionMode + ); + if ( + collisionMode !== 'ImagePixels' || + !blocker || + !blocker.pixelCollision + ) { + return getTrianglesIntersectingRect(triangles, left, top, right, bottom); + } + return triangles.filter(triangle => + triangleIntersectsPixelCollision( + triangle, + blocker.pixelCollision, + left, + top, + right, + bottom + ) + ); + }; + + const resolvePixelBlockerAxis = ( + axis, + previousAxisValue, + targetAxisValue, + otherAxisValue, + blocker, + rectLeft, + rectTop, + rectRight, + rectBottom, + getShiftedTriangles + ) => { + const delta = targetAxisValue - previousAxisValue; + if (Math.abs(delta) <= 1e-8) return null; + const intersectsAt = axisValue => { + const triangles = + axis === 'x' + ? getShiftedTriangles(axisValue, otherAxisValue) + : getShiftedTriangles(otherAxisValue, axisValue); + return ( + getTrianglesIntersectingBlocker( + triangles, + blocker, + rectLeft, + rectTop, + rectRight, + rectBottom + ).length > 0 + ); + }; + if (!intersectsAt(targetAxisValue)) return null; + let safeT = intersectsAt(previousAxisValue) ? null : 0; + if (safeT === null) { + for (let sampleIndex = 7; sampleIndex >= 0; sampleIndex--) { + const sampleT = sampleIndex / 8; + const sampleValue = previousAxisValue + delta * sampleT; + if (!intersectsAt(sampleValue)) { + safeT = sampleT; + break; + } + } + } + if (safeT === null) { + return { + axisValue: previousAxisValue, + normalX: axis === 'x' ? (delta > 0 ? -1 : 1) : 0, + normalY: axis === 'y' ? (delta > 0 ? -1 : 1) : 0, + }; + } + let hitT = 1; + for (let iteration = 0; iteration < 12; iteration++) { + const middleT = (safeT + hitT) / 2; + const sampleValue = previousAxisValue + delta * middleT; + if (intersectsAt(sampleValue)) hitT = middleT; + else safeT = middleT; + } + const safeValue = previousAxisValue + delta * safeT; + return { + axisValue: safeValue, + normalX: axis === 'x' ? (delta > 0 ? -1 : 1) : 0, + normalY: axis === 'y' ? (delta > 0 ? -1 : 1) : 0, + }; + }; + + const normalizeBlockerSurfaceType = value => { + const text = String(value || '') + .trim() + .toLowerCase(); + if ( + text === 'slopeupright' || + text === 'up-right' || + text === 'upright' || + text === '右上坡' + ) + return 'SlopeUpRight'; + if ( + text === 'slopeupleft' || + text === 'up-left' || + text === 'upleft' || + text === '左上坡' + ) + return 'SlopeUpLeft'; + return 'Solid'; + }; + + const getSlopeBlockerProfile = blocker => { + const surfaceType = normalizeBlockerSurfaceType( + blocker && blocker.surfaceType + ); + if (surfaceType === 'Solid') return null; + const left = Math.min( + toFiniteNumber(blocker && blocker.left, 0), + toFiniteNumber(blocker && blocker.right, 0) + ); + const top = Math.min( + toFiniteNumber(blocker && blocker.top, 0), + toFiniteNumber(blocker && blocker.bottom, 0) + ); + const right = Math.max( + toFiniteNumber(blocker && blocker.left, 0), + toFiniteNumber(blocker && blocker.right, 0) + ); + const bottom = Math.max( + toFiniteNumber(blocker && blocker.top, 0), + toFiniteNumber(blocker && blocker.bottom, 0) + ); + if (right - left <= 1e-8 || bottom - top <= 1e-8) return null; + const y1 = surfaceType === 'SlopeUpRight' ? bottom : top; + const y2 = surfaceType === 'SlopeUpRight' ? top : bottom; + const autoAngle = + Math.atan2(Math.abs(y2 - y1), Math.abs(right - left)) * (180 / Math.PI); + const configuredAngle = Math.abs( + toFiniteNumber(blocker && blocker.surfaceAngle, 0) + ); + return { + type: surfaceType, + left, + top, + right, + bottom, + y1, + y2, + angle: configuredAngle > 0 ? configuredAngle : autoAngle, + snapDistance: Math.max( + 0, + toFiniteNumber(blocker && blocker.surfaceSnapDistance, 0) + ), + speedScale: Math.max( + 0.05, + toFiniteNumber(blocker && blocker.surfaceSpeedScale, 1) + ), + gripStrength: Math.max( + 0, + Math.min(1, toFiniteNumber(blocker && blocker.surfaceGripStrength, 1)) + ), + objectName: blocker && blocker.name ? String(blocker.name) : '', + }; + }; + + const getSlopeSurfaceY = (profile, x) => { + if (!profile) return 0; + const width = profile.right - profile.left; + if (width <= 1e-8) return profile.bottom; + const t = Math.max(0, Math.min(1, (x - profile.left) / width)); + return profile.y1 + (profile.y2 - profile.y1) * t; + }; + + const getSlopeSurfaceNormal = profile => { + if (!profile) return { x: 0, y: -1 }; + const dx = profile.right - profile.left; + const dy = profile.y2 - profile.y1; + const length = Math.hypot(dx, dy); + if (length <= 1e-8) return { x: 0, y: -1 }; + return { x: -dy / length, y: dx / length }; + }; + + const resolveSlopeContact = ( + profile, + currentBounds, + previousBounds, + deltaX, + deltaY, + options + ) => { + if (!profile || !currentBounds) return null; + const overlapLeft = Math.max(currentBounds.minX, profile.left); + const overlapRight = Math.min(currentBounds.maxX, profile.right); + if (overlapRight < overlapLeft) return null; + const footX = + deltaX > 1e-8 + ? overlapRight + : deltaX < -1e-8 + ? overlapLeft + : (overlapLeft + overlapRight) / 2; + const surfaceY = getSlopeSurfaceY(profile, footX); + const currentBottom = currentBounds.maxY; + const previousBottom = previousBounds ? previousBounds.maxY : currentBottom; + const maxWalkableAngle = Math.max( + 0, + toFiniteNumber(options && options.maxWalkableAngle, 60) + ); + const snapDistance = + Math.max(0, toFiniteNumber(options && options.snapDistance, 0)) + + profile.snapDistance; + const allowedPenetration = Math.max(snapDistance, 4); + if (currentBottom < surfaceY - snapDistance) return null; + if (previousBottom > surfaceY + allowedPenetration && deltaY < -1e-8) + return null; + const walkable = profile.angle <= maxWalkableAngle + 1e-8; + if (!walkable) { + return { + walkable: false, + contactType: 'steep-slope', + slopeAngle: profile.angle, + speedScale: profile.speedScale, + gripStrength: profile.gripStrength, + objectName: profile.objectName, + }; + } + return { + walkable: true, + contactType: 'slope', + correctionY: surfaceY - currentBottom, + surfaceY, + footX, + normal: getSlopeSurfaceNormal(profile), + slopeAngle: profile.angle, + speedScale: profile.speedScale, + gripStrength: profile.gripStrength, + objectName: profile.objectName, + skipSolidCollision: true, + stableGrounded: currentBottom >= surfaceY - snapDistance, + }; + }; + + const segmentIntersectsRect = (x1, y1, x2, y2, left, top, right, bottom) => { + if ( + pointInRect(x1, y1, left, top, right, bottom) || + pointInRect(x2, y2, left, top, right, bottom) + ) { + return true; + } + const dx = x2 - x1; + const dy = y2 - y1; + let t0 = 0; + let t1 = 1; + const clip = (p, q) => { + if (p === 0) return q >= 0; + const r = q / p; + if (p < 0) { + if (r > t1) return false; + if (r > t0) t0 = r; + } else { + if (r < t0) return false; + if (r < t1) t1 = r; + } + return true; + }; + return ( + clip(-dx, x1 - left) && + clip(dx, right - x1) && + clip(-dy, y1 - top) && + clip(dy, bottom - y1) && + t1 >= t0 + ); + }; + + const squaredDistancePointToRect = (x, y, left, top, right, bottom) => { + const cx = Math.max(left, Math.min(right, x)); + const cy = Math.max(top, Math.min(bottom, y)); + const dx = x - cx; + const dy = y - cy; + return dx * dx + dy * dy; + }; + + const squaredDistancePointToSegment = (px, py, x1, y1, x2, y2) => { + const dx = x2 - x1; + const dy = y2 - y1; + const l2 = dx * dx + dy * dy; + if (l2 === 0) { + const sx = px - x1; + const sy = py - y1; + return sx * sx + sy * sy; + } + let t = ((px - x1) * dx + (py - y1) * dy) / l2; + t = Math.max(0, Math.min(1, t)); + const projX = x1 + t * dx; + const projY = y1 + t * dy; + const diffX = px - projX; + const diffY = py - projY; + return diffX * diffX + diffY * diffY; + }; + + const squaredDistanceSegmentToRect = ( + x1, + y1, + x2, + y2, + left, + top, + right, + bottom + ) => { + if (segmentIntersectsRect(x1, y1, x2, y2, left, top, right, bottom)) + return 0; + let minSq = Math.min( + squaredDistancePointToRect(x1, y1, left, top, right, bottom), + squaredDistancePointToRect(x2, y2, left, top, right, bottom) + ); + minSq = Math.min( + minSq, + squaredDistancePointToSegment(left, top, x1, y1, x2, y2) + ); + minSq = Math.min( + minSq, + squaredDistancePointToSegment(right, top, x1, y1, x2, y2) + ); + minSq = Math.min( + minSq, + squaredDistancePointToSegment(left, bottom, x1, y1, x2, y2) + ); + minSq = Math.min( + minSq, + squaredDistancePointToSegment(right, bottom, x1, y1, x2, y2) + ); + return minSq; + }; + + const getBoneObjectCollisionInfo = ( + handle, + boneName, + left, + top, + right, + bottom, + threshold, + hitPoint + ) => { + const segment = getBoneSceneSegmentData(handle, boneName); + if (!segment) return null; + const padding = Math.max(0, Number(threshold) || 0); + const rectLeft = Math.min(Number(left) || 0, Number(right) || 0) - padding; + const rectTop = Math.min(Number(top) || 0, Number(bottom) || 0) - padding; + const rectRight = Math.max(Number(left) || 0, Number(right) || 0) + padding; + const rectBottom = + Math.max(Number(top) || 0, Number(bottom) || 0) + padding; + const mode = normalizeBoneHitPoint(hitPoint); + let distanceSq = Number.POSITIVE_INFINITY; + if (mode === 'root') { + distanceSq = squaredDistancePointToRect( + segment.rootX, + segment.rootY, + rectLeft, + rectTop, + rectRight, + rectBottom + ); + } else if (mode === 'middle') { + distanceSq = squaredDistancePointToRect( + segment.midX, + segment.midY, + rectLeft, + rectTop, + rectRight, + rectBottom + ); + } else { + distanceSq = squaredDistanceSegmentToRect( + segment.rootX, + segment.rootY, + segment.tipX, + segment.tipY, + rectLeft, + rectTop, + rectRight, + rectBottom + ); + } + const distance = Math.sqrt(distanceSq); + const colliding = distanceSq <= 1e-8; + const strength = colliding + ? padding > 0 + ? Math.max(0, padding - distance) + : 1 + : 0; + return { + colliding, + distance, + strength, + threshold: padding, + hitPoint: mode, + rootX: segment.rootX, + rootY: segment.rootY, + midX: segment.midX, + midY: segment.midY, + tipX: segment.tipX, + tipY: segment.tipY, + }; + }; + + const resolveSceneMeshBlocking = (handle, options) => { + const currentX = toFiniteNumber(options && options.currentX, 0); + const currentY = toFiniteNumber(options && options.currentY, 0); + const previousX = toFiniteNumber(options && options.previousX, currentX); + const previousY = toFiniteNumber(options && options.previousY, currentY); + const detectionRange = Math.max( + 0, + Number(options && options.detectionRange) || 0 + ); + const triggerThreshold = Math.max( + 0, + Number(options && options.triggerThreshold) || 0 + ); + const maxResolveDistance = Math.max( + 0, + Number(options && options.maxResolveDistance) || 0 + ); + const motionMode = String((options && options.motionMode) || '') + .trim() + .toLowerCase(); + const platformLike = motionMode === 'platformer' || motionMode === 'auto'; + const platformSlopeSnapDistance = Math.max( + 0, + Number(options && options.platformSlopeSnapDistance) || 0 + ); + const platformMaxWalkableSlopeAngle = Math.max( + 0, + Number(options && options.platformMaxWalkableSlopeAngle) || 60 + ); + const blockers = Array.isArray(options && options.blockers) + ? options.blockers + : []; + const meshData = getSceneAttachmentTriangles(handle); + const baseTriangles = + meshData && Array.isArray(meshData.triangles) ? meshData.triangles : []; + + if (!baseTriangles.length || !blockers.length) { + return { + changed: false, + x: currentX, + y: currentY, + wallName: '', + normalX: 0, + normalY: 0, + }; + } + + const getShiftedTriangles = (x, y) => { + const dx = x - currentX; + const dy = y - currentY; + if (Math.abs(dx) <= 1e-8 && Math.abs(dy) <= 1e-8) return baseTriangles; + return baseTriangles.map(triangle => translateTriangle(triangle, dx, dy)); + }; + + let targetX = currentX; + let targetY = currentY; + let wallName = ''; + let normalX = 0; + let normalY = 0; + let surfaceNormalX = 0; + let surfaceNormalY = 0; + let contactKind = ''; + let stableGrounded = false; + let slopeAngle = 0; + let slopeSpeedScale = 1; + let wallSlideCandidate = false; + let ledgeGrabCandidate = false; + const axisOrder = + Math.abs(currentX - previousX) >= Math.abs(currentY - previousY) + ? ['x', 'y'] + : ['y', 'x']; + const movementDeltaX = currentX - previousX; + const movementDeltaY = currentY - previousY; + + for (const axis of axisOrder) { + for (const blocker of blockers) { + if (!blocker) continue; + const blockerBounds = getBlockerBounds(blocker); + const blockerLeft = blockerBounds.left; + const blockerTop = blockerBounds.top; + const blockerRight = blockerBounds.right; + const blockerBottom = blockerBounds.bottom; + const padding = + detectionRange + + Math.max(0, Number(blocker.range) || 0) + + Math.max( + triggerThreshold, + Math.max(0, Number(blocker.threshold) || 0) + ); + const rectLeft = blockerLeft - padding; + const rectTop = blockerTop - padding; + const rectRight = blockerRight + padding; + const rectBottom = blockerBottom + padding; + const responseStrength = Math.max( + 0, + Math.min(1, Number(blocker.responseStrength)) + ); + const currentTriangles = getShiftedTriangles(targetX, targetY); + const currentBoundsAll = getTrianglesBounds(currentTriangles); + const previousTrianglesAll = getShiftedTriangles(previousX, previousY); + const previousBoundsAll = getTrianglesBounds(previousTrianglesAll); + const slopeProfile = platformLike + ? getSlopeBlockerProfile({ + left: blockerLeft, + top: blockerTop, + right: blockerRight, + bottom: blockerBottom, + surfaceType: blocker.surfaceType, + surfaceAngle: blocker.surfaceAngle, + surfaceSnapDistance: blocker.surfaceSnapDistance, + surfaceSpeedScale: blocker.surfaceSpeedScale, + surfaceGripStrength: blocker.surfaceGripStrength, + name: blocker.name, + }) + : null; + const slopeContact = + slopeProfile && currentBoundsAll + ? resolveSlopeContact( + slopeProfile, + currentBoundsAll, + previousBoundsAll, + movementDeltaX, + movementDeltaY, + { + maxWalkableAngle: platformMaxWalkableSlopeAngle, + snapDistance: platformSlopeSnapDistance + padding, + } + ) + : null; + if ( + slopeContact && + slopeContact.walkable && + axis === 'x' && + slopeContact.skipSolidCollision + ) { + continue; + } + if (axis === 'y' && slopeContact && slopeContact.walkable) { + wallName = slopeContact.objectName || blocker.name || wallName; + normalX = 0; + normalY = -1; + surfaceNormalX = slopeContact.normal ? slopeContact.normal.x : 0; + surfaceNormalY = slopeContact.normal ? slopeContact.normal.y : -1; + contactKind = 'slope'; + stableGrounded = !!slopeContact.stableGrounded; + slopeAngle = slopeContact.slopeAngle || 0; + slopeSpeedScale = slopeContact.speedScale || 1; + const correctionDelta = Math.max( + -maxResolveDistance, + Math.min(maxResolveDistance, slopeContact.correctionY) + ); + if (Math.abs(correctionDelta) > 1e-8) { + // Walkable slopes should fully snap to the surface to avoid + // AABB-based re-collisions causing jitter or bounce. + targetY += correctionDelta; + } + if (slopeContact.skipSolidCollision) continue; + } + const currentIntersectingTriangles = getTrianglesIntersectingBlocker( + currentTriangles, + blocker, + rectLeft, + rectTop, + rectRight, + rectBottom + ); + if (!currentIntersectingTriangles.length) continue; + const previousTriangles = getShiftedTriangles( + axis === 'x' ? previousX : targetX, + axis === 'y' ? previousY : targetY + ); + const previousBounds = getTrianglesBounds(previousTriangles); + const currentBounds = getTrianglesBounds(currentIntersectingTriangles); + if (!currentBounds) continue; + + const delta = axis === 'x' ? targetX - previousX : targetY - previousY; + if (Math.abs(delta) <= 1e-8) continue; + let correctedAxisValue = axis === 'x' ? targetX : targetY; + let hitNormalX = 0; + let hitNormalY = 0; + const collisionMode = normalizeBlockerCollisionMode( + blocker.collisionMode + ); + + if ( + collisionMode === 'ImagePixels' && + blocker.pixelCollision && + normalizeBlockerSurfaceType(blocker.surfaceType) === 'Solid' + ) { + const pixelResolved = resolvePixelBlockerAxis( + axis, + axis === 'x' ? previousX : previousY, + axis === 'x' ? targetX : targetY, + axis === 'x' ? targetY : targetX, + blocker, + rectLeft, + rectTop, + rectRight, + rectBottom, + getShiftedTriangles + ); + if (pixelResolved) { + correctedAxisValue = pixelResolved.axisValue; + hitNormalX = pixelResolved.normalX; + hitNormalY = pixelResolved.normalY; + } + } + + if ( + axis === 'x' && + correctedAxisValue === targetX && + Math.abs(delta) > 1e-8 && + previousBounds + ) { + if (delta > 0 && previousBounds.maxX <= rectLeft + 1e-8) { + correctedAxisValue = targetX + (rectLeft - currentBounds.maxX); + hitNormalX = -1; + } else if (delta < 0 && previousBounds.minX >= rectRight - 1e-8) { + correctedAxisValue = targetX + (rectRight - currentBounds.minX); + hitNormalX = 1; + } + } else if ( + axis === 'y' && + correctedAxisValue === targetY && + Math.abs(delta) > 1e-8 && + previousBounds + ) { + if (delta > 0 && previousBounds.maxY <= rectTop + 1e-8) { + correctedAxisValue = targetY + (rectTop - currentBounds.maxY); + hitNormalY = -1; + } else if (delta < 0 && previousBounds.minY >= rectBottom - 1e-8) { + correctedAxisValue = targetY + (rectBottom - currentBounds.minY); + hitNormalY = 1; + } + } + + if (axis === 'x' && correctedAxisValue === targetX) { + const overlapLeft = currentBounds.maxX - rectLeft; + const overlapRight = rectRight - currentBounds.minX; + if (overlapLeft <= overlapRight) { + correctedAxisValue = targetX - overlapLeft; + hitNormalX = -1; + } else { + correctedAxisValue = targetX + overlapRight; + hitNormalX = 1; + } + } else if (axis === 'y' && correctedAxisValue === targetY) { + const overlapTop = currentBounds.maxY - rectTop; + const overlapBottom = rectBottom - currentBounds.minY; + if (overlapTop <= overlapBottom) { + correctedAxisValue = targetY - overlapTop; + hitNormalY = -1; + } else { + correctedAxisValue = targetY + overlapBottom; + hitNormalY = 1; + } + } + + const correctionDelta = Math.max( + -maxResolveDistance, + Math.min( + maxResolveDistance, + correctedAxisValue - (axis === 'x' ? targetX : targetY) + ) + ); + if (Math.abs(correctionDelta) <= 1e-8) continue; + const appliedDelta = + correctionDelta * + (Number.isFinite(responseStrength) ? responseStrength : 1); + if (axis === 'x') targetX += appliedDelta; + else targetY += appliedDelta; + wallName = blocker.name || wallName; + normalX = hitNormalX || normalX; + normalY = hitNormalY || normalY; + if (axis === 'x') { + contactKind = 'wall'; + const fallingAlongWall = movementDeltaY > 1e-8; + const ledgeBand = Math.max(12, padding * 2); + const nearTopEdge = + currentBounds.minY <= blockerTop + ledgeBand && + currentBounds.maxY >= blockerTop - Math.max(2, padding); + wallSlideCandidate = + platformLike && fallingAlongWall && !stableGrounded; + ledgeGrabCandidate = wallSlideCandidate && nearTopEdge; + } else if (hitNormalY < 0) { + contactKind = 'ground'; + stableGrounded = true; + } else if (hitNormalY > 0) { + contactKind = 'ceiling'; + } + } + } + + return { + changed: + Math.abs(targetX - currentX) > 1e-8 || + Math.abs(targetY - currentY) > 1e-8, + x: targetX, + y: targetY, + wallName, + normalX, + normalY, + surfaceNormalX, + surfaceNormalY, + contactKind, + stableGrounded, + slopeAngle, + slopeSpeedScale, + wallSlideCandidate, + ledgeGrabCandidate, + meshBounds: meshData.bounds, + triangleCount: baseTriangles.length, + }; + }; + + const normalizeBoneAnchorPoint = value => { + const text = String(value || '') + .trim() + .toLowerCase(); + if ( + text === 'root' || + text === 'start' || + text === '根部' || + text === '起点' + ) + return 'root'; + if (text === 'segment' || text === 'whole' || text === '整段') + return 'segment'; + return 'middle'; + }; + + const normalizeBoneHitPoint = value => { + const text = String(value || '') + .trim() + .toLowerCase(); + if ( + text === 'root' || + text === 'start' || + text === '根部' || + text === '起点' + ) + return 'root'; + if ( + text === 'middle' || + text === 'mid' || + text === 'center' || + text === '中部' || + text === '中点' + ) + return 'middle'; + return 'segment'; + }; + + const isBoneNearPosition = (handle, boneName, x, y, radius, hitPoint) => { + const segment = getBoneSceneSegment(handle, boneName); + if (!segment) return false; + const { bx, by, tipX, tipY } = segment; + + const px = toFiniteNumber(x, 0); + const py = toFiniteNumber(y, 0); + const r = toFiniteNumber(radius, 0); + const mode = normalizeBoneHitPoint(hitPoint); + + if (mode === 'root') { + const dx = px - bx; + const dy = py - by; + return dx * dx + dy * dy <= r * r; + } + + if (mode === 'middle') { + const midX = (bx + tipX) / 2; + const midY = (by + tipY) / 2; + const dx = px - midX; + const dy = py - midY; + return dx * dx + dy * dy <= r * r; + } + + const l2 = (tipX - bx) * (tipX - bx) + (tipY - by) * (tipY - by); + if (l2 === 0) { + const dx = px - bx; + const dy = py - by; + return dx * dx + dy * dy <= r * r; + } + + let t = ((px - bx) * (tipX - bx) + (py - by) * (tipY - by)) / l2; + t = Math.max(0, Math.min(1, t)); + + const projX = bx + t * (tipX - bx); + const projY = by + t * (tipY - by); + + const dx = px - projX; + const dy = py - projY; + + return dx * dx + dy * dy <= r * r; + }; + + const setBoneScenePosition = (handle, boneName, sceneX, sceneY) => { + ensureWorldTransforms(handle); + const object = getDisplayObject(handle); + const bone = getBone(handle, boneName); + if (!object || !bone || !bone.pose) return false; + const targetValues = readBoneChannelValues(bone, 'position'); + + const targetPoint = scenePointToContainerLocal(object, sceneX, sceneY); + const skelX = targetPoint.x; + const skelY = targetPoint.y; + + let localX = skelX; + let localY = skelY; + + if (bone.parent) { + // 在 Spine 里面,骨骼是被它的父骨骼旋转和缩放的,所以我们要把 Spine 世界坐标转换成父骨骼的本地坐标系 + const parentPose = + bone.parent.appliedPose || bone.parent.pose || bone.parent; + const localPoint = worldVectorToParentLocal( + bone, + skelX - (parentPose.worldX || 0), + skelY - (parentPose.worldY || 0) + ); + localX = localPoint.x; + localY = localPoint.y; + } + + bone.pose.x = localX; + bone.pose.y = localY; + + const overrides = getBoneOverride(handle, boneName); + if (overrides) { + overrides.x = localX; + overrides.y = localY; + } + scheduleBoneAutoReset(handle, boneName, 'position', targetValues); + refreshBoneTransforms(handle); + return true; + }; + + const setBoneSceneRotationToward = ( + handle, + boneName, + sceneX, + sceneY, + offsetAngle + ) => { + ensureWorldTransforms(handle); + const object = getDisplayObject(handle); + const bone = getBone(handle, boneName); + if (!object || !bone || !bone.pose) return false; + const targetValues = readBoneChannelValues(bone, 'rotation'); + + const targetPoint = scenePointToContainerLocal(object, sceneX, sceneY); + const applied = getAppliedBonePose(bone); + if (!applied) return false; + const dirWorldX = targetPoint.x - (applied.worldX || 0); + const dirWorldY = targetPoint.y - (applied.worldY || 0); + if (Math.hypot(dirWorldX, dirWorldY) <= 1e-8) return true; + + const localDir = worldVectorToParentLocal(bone, dirWorldX, dirWorldY); + if (Math.hypot(localDir.x, localDir.y) <= 1e-8) return true; + + let targetLocalAngle = Math.atan2(localDir.y, localDir.x) * (180 / Math.PI); + targetLocalAngle += toFiniteNumber(offsetAngle, 0); + const currentLocalAngle = bone.pose.rotation; + + let diff = targetLocalAngle - currentLocalAngle; + diff = ((((diff + 180) % 360) + 360) % 360) - 180; + + bone.pose.rotation = currentLocalAngle + diff; + + const overrides = getBoneOverride(handle, boneName); + if (overrides) { + overrides.rotation = bone.pose.rotation; + } + scheduleBoneAutoReset(handle, boneName, 'rotation', targetValues); + refreshBoneTransforms(handle); + return true; + }; + + const resetBone = (handle, boneName) => { + const object = getDisplayObject(handle); + const bone = getBone(handle, boneName); + if (!object || !bone) return false; + + if (typeof bone.setToSetupPose === 'function') { + bone.setToSetupPose(); + } else if (typeof bone.setupPose === 'function') { + bone.setupPose(); + } else { + return false; + } + + if (object.__boneOverrides && object.__boneOverrides[boneName]) { + delete object.__boneOverrides[boneName]; + } + clearBoneAutoResetState(handle, boneName, ''); + refreshBoneTransforms(handle); + return true; + }; + + const resetAllBones = handle => { + const object = getDisplayObject(handle); + const skeleton = getSkeleton(handle); + if (!object || !skeleton) return false; + + if (typeof skeleton.setBonesToSetupPose === 'function') { + skeleton.setBonesToSetupPose(); + } else if (typeof skeleton.setupPoseBones === 'function') { + skeleton.setupPoseBones(); + } else if (typeof skeleton.setupPose === 'function') { + skeleton.setupPose(); + } else { + return false; + } + + if (object.__boneOverrides) { + object.__boneOverrides = {}; + } + clearBoneAutoResetState(handle, '', ''); + refreshBoneTransforms(handle); + return true; + }; + + const hasEventFired = (handle, eventName) => { + if (!handle || !handle.eventFiredThisFrame) return false; + return handle.lastEventName === String(eventName || ''); + }; + + const hasAnimationCompleted = (handle, animationName) => { + if (!handle || !handle.completedFiredThisFrame) return false; + return handle.lastCompletedAnimation === String(animationName || ''); + }; + + const getEventString = handle => { + return handle && handle.lastEventString ? handle.lastEventString : ''; + }; + + const getEventInt = handle => { + return handle && handle.lastEventInt ? handle.lastEventInt : 0; + }; + + const getEventFloat = handle => { + return handle && handle.lastEventFloat ? handle.lastEventFloat : 0; + }; + + const slotExists = (handle, slotName) => { + const skeleton = getSkeleton(handle); + if (!skeleton) return false; + return !!skeleton.findSlot(String(slotName || '')); + }; + + const getCurrentAttachmentName = (handle, slotName) => { + const skeleton = getSkeleton(handle); + if (!skeleton) return ''; + const slot = skeleton.findSlot(String(slotName || '')); + if (!slot || !slot.attachment) return ''; + return String(slot.attachment.name || ''); + }; + + const getSlotDisplayColor = slot => { + if (!slot) return null; + if (slot.pose && slot.pose.color) return slot.pose.color; + if (slot.color) return slot.color; + return null; + }; + + const setAttachment = (handle, slotName, attachmentName) => { + const object = getDisplayObject(handle); + const skeleton = getSkeleton(handle); + if (!object || !skeleton || !skeleton.setAttachment) return false; + let nameToSet = attachmentName ? String(attachmentName).trim() : null; + if (nameToSet) { + const lower = nameToSet.toLowerCase(); + if ( + lower === 'none' || + lower === 'null' || + lower === 'empty' || + lower === 'clear' || + lower === '清空' + ) { + nameToSet = null; + } + } + skeleton.setAttachment(String(slotName || ''), nameToSet); + return true; + }; + + const clearAttachments = (handle, slotNames) => { + const skeleton = getSkeleton(handle); + if (!skeleton || typeof skeleton.setAttachment !== 'function') return false; + const targets = String(slotNames || '') + .split(/[,\n;|]+/) + .map(entry => entry.trim()) + .filter(Boolean); + if (!targets.length) return false; + for (const slotName of targets) { + skeleton.setAttachment(slotName, null); + } + return true; + }; + + const setSlotColor = (handle, slotName, r, g, b, a) => { + const object = getDisplayObject(handle); + const skeleton = getSkeleton(handle); + if (!object || !skeleton) return false; + const slot = skeleton.findSlot(String(slotName || '')); + const color = getSlotDisplayColor(slot); + if (!slot || !color) return false; + color.r = Math.max(0, Math.min(1, Number(r) / 255 || 0)); + color.g = Math.max(0, Math.min(1, Number(g) / 255 || 0)); + color.b = Math.max(0, Math.min(1, Number(b) / 255 || 0)); + color.a = Math.max( + 0, + Math.min(1, typeof a !== 'undefined' ? Number(a) : 1) + ); + return true; + }; + + const getAnimationDuration = (handle, animationName) => { + const object = getDisplayObject(handle); + const skeletonData = + object && object.spineData + ? object.spineData + : handle && handle.skeletonData + ? handle.skeletonData + : null; + if (!skeletonData || !skeletonData.findAnimation) return 0; + const anim = skeletonData.findAnimation(String(animationName || '')); + return anim ? anim.duration : 0; + }; + + const setAnimationProgress = (handle, trackIndex, progress) => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.tracks) return false; + const track = object.state.tracks[Math.max(0, Number(trackIndex) || 0)]; + if (!track || !track.animation) return false; + const duration = track.animation.duration; + // 强制把 trackTime 设定在对应进度 + track.trackTime = + Math.max(0, Math.min(1, Number(progress) || 0)) * duration; + return true; + }; + + const setIkConstraintMix = (handle, ikName, mix) => { + const object = getDisplayObject(handle); + const skeleton = getSkeleton(handle); + if (!object || !skeleton) return false; + const ik = skeleton.findIkConstraint(String(ikName || '')); + if (!ik) return false; + ik.mix = Math.max(0, Math.min(1, Number(mix) || 0)); + return true; + }; + + const setTransformConstraintMix = ( + handle, + constraintName, + mixTranslate, + mixRotate, + mixScale, + mixShear + ) => { + const object = getDisplayObject(handle); + const skeleton = getSkeleton(handle); + if (!object || !skeleton) return false; + const constraint = skeleton.findTransformConstraint( + String(constraintName || '') + ); + if (!constraint) return false; + constraint.mixTranslate = Math.max( + 0, + Math.min(1, Number(mixTranslate) || 0) + ); + constraint.mixRotate = Math.max(0, Math.min(1, Number(mixRotate) || 0)); + constraint.mixScale = Math.max(0, Math.min(1, Number(mixScale) || 0)); + constraint.mixShear = Math.max(0, Math.min(1, Number(mixShear) || 0)); + return true; + }; + + const getAnimationFrame = (handle, trackIndex) => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.tracks) return 0; + const track = object.state.tracks[Math.max(0, Number(trackIndex) || 0)]; + if (!track) return 0; + return Math.floor(track.trackTime * 30); // 默认以 30FPS 为基准换算帧数 + }; + + const hasAnimation = (handle, animationName) => { + const object = getDisplayObject(handle); + const skeletonData = + object && object.spineData + ? object.spineData + : handle && handle.skeletonData + ? handle.skeletonData + : null; + if (!skeletonData || !skeletonData.findAnimation) return false; + return !!skeletonData.findAnimation(String(animationName || '')); + }; + + const hasSkin = (handle, skinName) => { + const object = getDisplayObject(handle); + const skeletonData = + object && object.spineData + ? object.spineData + : handle && handle.skeletonData + ? handle.skeletonData + : null; + if (!skeletonData || !skeletonData.findSkin) return false; + return !!skeletonData.findSkin(String(skinName || '')); + }; + + const isPlayingOnTrack = (handle, trackIndex) => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.tracks) return false; + const track = object.state.tracks[Math.max(0, Number(trackIndex) || 0)]; + return !!track; + }; + + const isAnimationComplete = (handle, trackIndex) => { + const object = getDisplayObject(handle); + if (!object || !object.state || !object.state.tracks) return true; + const track = object.state.tracks[Math.max(0, Number(trackIndex) || 0)]; + if (!track) return true; + return track.trackTime >= track.animationEnd && !track.loop; + }; + + const getDebugInfo = handle => { + const object = getDisplayObject(handle); + const skeletonData = + object && object.spineData + ? object.spineData + : handle && handle.skeletonData + ? handle.skeletonData + : null; + if (!skeletonData) return 'Spine 尚未就绪或数据丢失 (Spine not ready)'; + + let info = '=== Spine 4.3 调试信息 (Debug Info) ===\n'; + + // 1. 动画列表 + info += '\n[动画 Animations]\n'; + if (skeletonData.animations && skeletonData.animations.length > 0) { + info += skeletonData.animations + .map(a => ` - ${a.name} (${a.duration.toFixed(2)}s)`) + .join('\n'); + } else { + info += ' - (无 / None)'; + } + + // 2. 皮肤列表 + info += '\n\n[皮肤 Skins]\n'; + if (skeletonData.skins && skeletonData.skins.length > 0) { + info += skeletonData.skins.map(s => ` - ${s.name}`).join('\n'); + } else { + info += ' - (无 / None)'; + } + + // 3. 骨骼列表 + info += '\n\n[骨骼 Bones]\n'; + if (skeletonData.bones && skeletonData.bones.length > 0) { + info += skeletonData.bones + .map(b => { + let parent = b.parent ? ` (Parent: ${b.parent.name})` : ' (Root)'; + return ` - ${b.name}${parent}`; + }) + .join('\n'); + } else { + info += ' - (无 / None)'; + } + + // 4. 插槽列表 + info += '\n\n[插槽 Slots]\n'; + if (skeletonData.slots && skeletonData.slots.length > 0) { + info += skeletonData.slots + .map(s => { + let attachment = s.attachmentName ? ` -> [${s.attachmentName}]` : ''; + return ` - ${s.name} (Bone: ${s.boneData.name})${attachment}`; + }) + .join('\n'); + } else { + info += ' - (无 / None)'; + } + + // 5. 约束列表 + let constraints = []; + + // Spine 4.2+ 统一使用了 constraints 数组 + if (skeletonData.constraints && skeletonData.constraints.length > 0) { + skeletonData.constraints.forEach(c => { + let typeName = 'Constraint'; + if (c.constructor && c.constructor.name) { + typeName = c.constructor.name.replace('Data', ''); // 比如 IkConstraintData -> IkConstraint + } + let target = ''; + if (c.target && c.target.name) target = ` (Target: ${c.target.name})`; + else if (c.bones && c.bones.length > 0) + target = ` (Bones: ${c.bones.map(b => b.name).join(', ')})`; + + constraints.push(` - [${typeName}] ${c.name}${target}`); + }); + } else { + // 兼容老版本 Spine 运行时的分开数组 + if (skeletonData.ikConstraints) { + skeletonData.ikConstraints.forEach(ik => + constraints.push(` - [IK] ${ik.name} (Target: ${ik.target.name})`) + ); + } + if (skeletonData.transformConstraints) { + skeletonData.transformConstraints.forEach(tc => + constraints.push( + ` - [Transform] ${tc.name} (Target: ${tc.target.name})` + ) + ); + } + if (skeletonData.pathConstraints) { + skeletonData.pathConstraints.forEach(pc => + constraints.push(` - [Path] ${pc.name} (Target: ${pc.target.name})`) + ); + } + } + + info += '\n\n[约束 Constraints]\n'; + if (constraints.length > 0) { + info += constraints.join('\n'); + } else { + info += ' - (无 / None)'; + } + + // 6. 自定义事件 + info += '\n\n[事件 Events]\n'; + if (skeletonData.events && skeletonData.events.length > 0) { + info += skeletonData.events.map(e => ` - ${e.name}`).join('\n'); + } else { + info += ' - (无 / None)'; + } + + return info; + }; + + const drawBoneEllipse = ( + handle, + boneName, + radiusX, + radiusY, + colorStr, + anchorPoint + ) => { + const object = getDisplayObject(handle); + const bone = getBone(handle, boneName); + if (!object || !bone || !getAppliedBonePose(bone)) return false; + + // 我们需要确保 SpineDebugRenderer 存在,借用它的 parentDebugContainer 或者自己建一个层 + let graphicsContainer = object.__customDebugGraphics; + if (!graphicsContainer) { + graphicsContainer = new window.PIXI.Graphics(); + graphicsContainer.zIndex = 9999998; + graphicsContainer.eventMode = 'none'; + graphicsContainer.interactiveChildren = false; + + // 我们把绘图层放在 Spine 对象的父容器(也就是场景/图层)里 + // 这样它的坐标系就和场景鼠标坐标系直接对应了 + if (object.parent) { + object.parent.addChild(graphicsContainer); + } else { + object.addChild(graphicsContainer); + } + object.__customDebugGraphics = graphicsContainer; + + // 每次 update 之前清空,以便重绘 + const originalUpdate = object.update; + object.update = function(dt) { + if (object.__customDebugGraphics) { + object.__customDebugGraphics.clear(); + // 同步层级和可见性 + object.__customDebugGraphics.zIndex = object.zIndex + 1; + object.__customDebugGraphics.visible = object.visible; + if ( + object.__customDebugGraphics.parent !== object.parent && + object.parent + ) { + object.parent.addChild(object.__customDebugGraphics); + } + } + if (originalUpdate) originalUpdate.call(object, dt); + }; + } + + // 解析颜色 + let color = 0xffff00; + let alpha = 0.5; + if (colorStr) { + const rgb = String(colorStr) + .split(';') + .map(Number); + if (rgb.length >= 3) { + color = (rgb[0] << 16) + (rgb[1] << 8) + rgb[2]; + } + } + + const segment = getBoneSceneSegment(handle, boneName); + if (!segment) return false; + const { bx, by, tipX, tipY } = segment; + + // 此时 bx, by, tipX, tipY 全部都是绝对的场景坐标了! + const midX = (bx + tipX) / 2; + const midY = (by + tipY) / 2; + const anchor = normalizeBoneAnchorPoint(anchorPoint); + const centerX = anchor === 'root' ? bx : midX; + const centerY = anchor === 'root' ? by : midY; + const drawRadiusX = Math.max(0, toFiniteNumber(radiusX, 50)); + const drawRadiusY = Math.max(0, toFiniteNumber(radiusY, 50)); + + // 骨骼在场景中的绝对旋转角度 + const angleRad = Math.atan2(tipY - by, tipX - bx); + const boneLength = Math.sqrt( + (tipX - bx) * (tipX - bx) + (tipY - by) * (tipY - by) + ); + + graphicsContainer.beginFill(color, alpha); + + const currentMatrix = graphicsContainer.matrix + ? graphicsContainer.matrix.clone() + : new window.PIXI.Matrix(); + + if (anchor === 'segment') { + // “整段”使用和条件同类型的胶囊形可视化:线段本体 + 两端圆头 + graphicsContainer.setMatrix( + new window.PIXI.Matrix() + .translate(-bx, -by) + .rotate(angleRad) + .translate(bx, by) + ); + graphicsContainer.drawEllipse(bx, by, drawRadiusX, drawRadiusY); + graphicsContainer.drawRect( + bx, + by - drawRadiusY, + boneLength, + drawRadiusY * 2 + ); + graphicsContainer.drawEllipse( + bx + boneLength, + by, + drawRadiusX, + drawRadiusY + ); + } else { + // 根部 / 中部仍然绘制单个椭圆 + graphicsContainer.setMatrix( + new window.PIXI.Matrix() + .translate(-centerX, -centerY) + .rotate(angleRad) + .translate(centerX, centerY) + ); + graphicsContainer.drawEllipse(centerX, centerY, drawRadiusX, drawRadiusY); + } + graphicsContainer.endFill(); + + graphicsContainer.setMatrix(currentMatrix); + + return true; + }; + + const getDebugFeatureAvailability = object => { + const skeleton = object && object.skeleton ? object.skeleton : null; + const slots = + skeleton && Array.isArray(skeleton.slots) ? skeleton.slots : []; + let hasRegion = false; + let hasPath = false; + let hasClipping = false; + for (const slot of slots) { + const attachment = slot && slot.attachment ? slot.attachment : null; + const typeName = String( + (attachment && attachment.type) || + (attachment && + attachment.constructor && + attachment.constructor.name) || + '' + ).toLowerCase(); + if (!hasRegion && typeName.includes('region')) hasRegion = true; + if (!hasPath && typeName.includes('path')) hasPath = true; + if (!hasClipping && typeName.includes('clipping')) hasClipping = true; + if (hasRegion && hasPath && hasClipping) break; + } + const pathConstraints = + skeleton && Array.isArray(skeleton.pathConstraints) + ? skeleton.pathConstraints + : []; + if (!hasPath && pathConstraints.length > 0) hasPath = true; + return { hasRegion, hasPath, hasClipping }; + }; + + const applyDebugRendererOptions = (debugRenderer, handle) => { + const object = getDisplayObject(handle); + if (!debugRenderer || !handle || !object) return; + const extras = !!handle.debugExtrasVisible; + const features = getDebugFeatureAvailability(object); + const regionRequested = + typeof handle.debugRegionVisible !== 'undefined' + ? !!handle.debugRegionVisible + : extras; + const trianglesRequested = + typeof handle.debugTrianglesVisible !== 'undefined' + ? !!handle.debugTrianglesVisible + : extras; + const pathsRequested = + typeof handle.debugPathsVisible !== 'undefined' + ? !!handle.debugPathsVisible + : extras; + const clippingRequested = + typeof handle.debugClippingVisible !== 'undefined' + ? !!handle.debugClippingVisible + : extras; + const regionFallback = regionRequested && !features.hasRegion; + const pathFallback = pathsRequested && !features.hasPath; + const clippingFallback = clippingRequested && !features.hasClipping; + debugRenderer.drawBoundingBoxes = true; + debugRenderer.drawRegionAttachments = features.hasRegion + ? regionRequested + : false; + debugRenderer.drawMeshHull = extras || regionFallback || clippingFallback; + debugRenderer.drawMeshTriangles = + trianglesRequested || pathFallback || clippingFallback; + debugRenderer.drawPaths = features.hasPath ? pathsRequested : false; + debugRenderer.drawClipping = features.hasClipping + ? clippingRequested + : false; + }; + + const setDebugVisible = (handle, visible) => { + const object = getDisplayObject(handle); + const spineNamespace = handle && handle.runtime ? handle.runtime : null; + if (!object || !spineNamespace || !spineNamespace.SpineDebugRenderer) + return false; + + if (visible) { + if (!object.debug) { + object.debug = new spineNamespace.SpineDebugRenderer(); + } + applyDebugRendererOptions(object.debug, handle); + } else { + if (object.debug) { + object.debug = undefined; + } + } + return true; + }; + + const setDebugExtrasVisible = (handle, visible) => { + const object = getDisplayObject(handle); + if (!handle) return false; + handle.debugExtrasVisible = !!visible; + if (object && object.debug) { + applyDebugRendererOptions(object.debug, handle); + } + return true; + }; + + const setDebugTrianglesVisible = (handle, visible) => { + const object = getDisplayObject(handle); + if (!handle) return false; + handle.debugTrianglesVisible = !!visible; + if (object && object.debug) applyDebugRendererOptions(object.debug, handle); + return true; + }; + + const setDebugPathsVisible = (handle, visible) => { + const object = getDisplayObject(handle); + if (!handle) return false; + handle.debugPathsVisible = !!visible; + if (object && object.debug) applyDebugRendererOptions(object.debug, handle); + return true; + }; + + const setDebugClippingVisible = (handle, visible) => { + const object = getDisplayObject(handle); + if (!handle) return false; + handle.debugClippingVisible = !!visible; + if (object && object.debug) applyDebugRendererOptions(object.debug, handle); + return true; + }; + + const setDebugRegionVisible = (handle, visible) => { + const object = getDisplayObject(handle); + if (!handle) return false; + handle.debugRegionVisible = !!visible; + if (object && object.debug) applyDebugRendererOptions(object.debug, handle); + return true; + }; + + window.GDSpine43Adapter = { + resolvePath, + ensureRuntime, + createInstance, + updateInstance, + destroyInstance, + ensureWorldTransforms, + setPhysicsTransformInheritance, + queuePhysicsMovement, + setInspectorOverrides, + setAnimation, + setAnimationOnTrack, + addAnimation, + clearTrack, + clearTracks, + setSkin, + setMix, + setVisible, + getCurrentAnimation, + boneExists, + getBoneChildCount, + getBoneLength, + getBoneParentName, + setBonePosition, + offsetBonePosition, + setBoneRotation, + offsetBoneRotation, + setBoneScale, + offsetBoneScale, + getBoneValue, + getBoneSceneX, + getBoneSceneY, + getBoneSceneRotation, + getBoneSceneSegmentData, + getBoneObjectCollisionInfo, + getSceneAttachmentTriangles, + getSceneAttachmentBounds, + resolveSceneMeshBlocking, + isBoneNearPosition, + setBoneScenePosition, + setBoneSceneRotationToward, + resetBone, + resetAllBones, + configureBoneAutoReset, + isBoneAutoResetActive, + getBoneAutoResetProgress, + hasEventFired, + hasAnimationCompleted, + getEventString, + getEventInt, + getEventFloat, + slotExists, + getCurrentAttachmentName, + setAttachment, + clearAttachments, + setSlotColor, + getAnimationDuration, + setAnimationProgress, + setIkConstraintMix, + setTransformConstraintMix, + getAnimationFrame, + hasAnimation, + hasSkin, + isPlayingOnTrack, + isAnimationComplete, + getDebugInfo, + setDebugVisible, + setDebugExtrasVisible, + setDebugTrianglesVisible, + setDebugPathsVisible, + setDebugClippingVisible, + setDebugRegionVisible, + drawBoneEllipse, + }; +})(); diff --git a/Extensions/Spine43Object/spine43runtimeobject.js b/Extensions/Spine43Object/spine43runtimeobject.js new file mode 100644 index 000000000000..f2af82bb6a98 --- /dev/null +++ b/Extensions/Spine43Object/spine43runtimeobject.js @@ -0,0 +1,1005 @@ +(function() { + if (typeof gdjs === 'undefined') return; + + const DEFAULT_RUNTIME_SCRIPT_PATH = + 'Extensions/Spine43Object/spine-pixi-v7.js'; + + const toNumber = (value, fallback) => { + const number = Number(value); + return Number.isFinite(number) ? number : fallback; + }; + + const toBoolean = value => value === true || value === 'true' || value === 1; + + const getAdapter = () => + typeof window !== 'undefined' ? window.GDSpine43Adapter : null; + + const normalizeTrack = trackIndex => + Math.max(0, Math.floor(toNumber(trackIndex, 0))); + + gdjs.Spine43RuntimeObject = class Spine43RuntimeObject extends gdjs.RuntimeObject { + constructor(instanceContainer, objectData, instanceData) { + super(instanceContainer, objectData, instanceData); + + const content = objectData.content || {}; + this._content = content; + this._runtimeScriptPath = + content.runtimeScriptPath || DEFAULT_RUNTIME_SCRIPT_PATH; + this._skeletonResource = content.skeletonResource || ''; + this._atlasResource = content.atlasResource || ''; + this._binaryData = !!content.binaryData; + this._importScale = Math.max(0.0001, toNumber(content.importScale, 1)); + this._skinName = content.skinName || ''; + this._animationName = content.animationName || ''; + this._loop = content.loop !== false; + this._mixDuration = Math.max(0, toNumber(content.mixDuration, 0)); + this._timeScale = toNumber(content.timeScale, 1); + this._inspectorOverrides = content.inspectorOverrides || {}; + this._opacity = Math.max( + 0, + Math.min(255, toNumber(content.opacity, 255)) + ); + this._visible = content.visible !== false; + + this._pixiObject = + typeof PIXI !== 'undefined' ? new PIXI.Container() : { visible: true }; + this._rendererObjectAddedToLayer = false; + this._handle = null; + this._loading = false; + this._ready = false; + this._lastError = ''; + this._lastSceneBlocking = null; + this._lastCollisionObjectName = ''; + this._lastCollisionStrength = 0; + + this._syncTransform(); + this._syncVisibility(); + this._attachRendererObjectToLayer(); + this.reload(); + + this.onCreated(); + } + + getRendererObject() { + return this._pixiObject; + } + + _attachRendererObjectToLayer() { + if ( + this._rendererObjectAddedToLayer || + !this._pixiObject || + !this._pixiObject.position || + !this._runtimeScene || + !this._runtimeScene.getLayer + ) { + return; + } + + try { + this._runtimeScene + .getLayer(this.layer || '') + .getRenderer() + .addRendererObject(this._pixiObject, this.getZOrder()); + this._rendererObjectAddedToLayer = true; + } catch (error) { + this._lastError = + error && error.message ? error.message : String(error || ''); + console.error('Unable to attach Spine 4.3 object renderer:', error); + } + } + + updateFromObjectData(oldObjectData, newObjectData) { + const oldContent = oldObjectData.content || {}; + const newContent = newObjectData.content || {}; + const needsReload = + oldContent.runtimeScriptPath !== newContent.runtimeScriptPath || + oldContent.skeletonResource !== newContent.skeletonResource || + oldContent.atlasResource !== newContent.atlasResource || + oldContent.binaryData !== newContent.binaryData || + oldContent.importScale !== newContent.importScale; + + this._content = newContent; + this._runtimeScriptPath = + newContent.runtimeScriptPath || DEFAULT_RUNTIME_SCRIPT_PATH; + this._skeletonResource = newContent.skeletonResource || ''; + this._atlasResource = newContent.atlasResource || ''; + this._binaryData = !!newContent.binaryData; + this._importScale = Math.max(0.0001, toNumber(newContent.importScale, 1)); + this._loop = newContent.loop !== false; + this.setOpacity(toNumber(newContent.opacity, this._opacity)); + this.setVisible(newContent.visible !== false); + this.setTimeScale(toNumber(newContent.timeScale, this._timeScale)); + this.setMixDuration(toNumber(newContent.mixDuration, this._mixDuration)); + this._inspectorOverrides = newContent.inspectorOverrides || {}; + + if (needsReload) { + this.reload(); + return true; + } + + if (oldContent.skinName !== newContent.skinName) { + this.setSkin(newContent.skinName || ''); + } + if (oldContent.animationName !== newContent.animationName) { + this.playAnimation(newContent.animationName || '', this._loop); + } + this.applyInspectorOverrides(); + return true; + } + + extraInitializationFromInitialInstance(initialInstanceData) { + const animationOverride = + initialInstanceData && + initialInstanceData.stringProperties && + initialInstanceData.stringProperties.find( + property => property.name === 'animationName' + ); + if (animationOverride && animationOverride.value) { + this._animationName = animationOverride.value; + } + this._syncTransform(); + this._syncVisibility(); + } + + onDestroyed() { + super.onDestroyed(); + this._destroyHandle(); + if (this._pixiObject && this._pixiObject.destroy) { + this._pixiObject.destroy({ children: true, texture: false }); + } + } + + onDeletedFromScene() { + super.onDeletedFromScene(); + this._rendererObjectAddedToLayer = false; + } + + update(instanceContainer) { + if (!this._ready || !this._handle) return; + const adapter = getAdapter(); + if (!adapter) return; + const delta = Math.max( + 0, + (this.getElapsedTime() / 1000) * this._timeScale + ); + if (this._pixiObject && this._pixiObject.updateTransform) { + this._pixiObject.updateTransform(); + } + adapter.updateInstance(this._handle, delta); + } + + _destroyHandle() { + const adapter = getAdapter(); + if (this._handle && adapter) { + adapter.destroyInstance(this._handle); + } + this._handle = null; + this._ready = false; + } + + _syncTransform() { + if (!this._pixiObject || !this._pixiObject.position) return; + this._pixiObject.position.set(this.getX(), this.getY()); + this._pixiObject.rotation = (this.getAngle() * Math.PI) / 180; + } + + _syncVisibility() { + if (!this._pixiObject) return; + this._pixiObject.visible = !!this._visible; + this._pixiObject.alpha = this._opacity / 255; + } + + _attachHandle(handle) { + this._handle = handle; + this._ready = true; + this._loading = false; + this._lastError = ''; + if (this._pixiObject.addChild && handle.container) { + this._pixiObject.addChild(handle.container); + } + if (handle.container && handle.container.resetPhysicsTransform) { + if (this._pixiObject.updateTransform) + this._pixiObject.updateTransform(); + handle.container.resetPhysicsTransform(); + } + this.applyInspectorOverrides(); + this._syncTransform(); + this._syncVisibility(); + this.invalidateHitboxes(); + } + + reload() { + this._destroyHandle(); + this._loading = true; + this._lastError = ''; + + const adapter = getAdapter(); + if (!adapter) { + this._loading = false; + this._lastError = 'GDSpine43Adapter is not loaded.'; + return; + } + if (!this._skeletonResource || !this._atlasResource) { + this._loading = false; + this._lastError = 'Skeleton or atlas resource is empty.'; + return; + } + + adapter + .createInstance({ + runtimeScriptPath: + this._runtimeScriptPath || DEFAULT_RUNTIME_SCRIPT_PATH, + skeletonFile: this._skeletonResource, + atlasFile: this._atlasResource, + binaryData: this._binaryData, + importScale: this._importScale, + skinName: this._skinName, + animationName: this._animationName, + loop: this._loop, + mixDuration: this._mixDuration, + inspectorOverrides: this._inspectorOverrides, + }) + .then(handle => this._attachHandle(handle)) + .catch(error => { + this._loading = false; + this._ready = false; + this._lastError = + error && error.message ? error.message : String(error); + console.error('Unable to load Spine 4.3 object:', error); + }); + } + + setX(x) { + super.setX(x); + this._syncTransform(); + } + + setY(y) { + super.setY(y); + this._syncTransform(); + } + + setAngle(angle) { + super.setAngle(angle); + this._syncTransform(); + } + + setOpacity(opacity) { + this._opacity = Math.max(0, Math.min(255, toNumber(opacity, 255))); + this._syncVisibility(); + } + + getOpacity() { + return this._opacity; + } + + getWidth() { + const adapter = getAdapter(); + if (adapter && this._handle && adapter.getSceneAttachmentBounds) { + const bounds = adapter.getSceneAttachmentBounds(this._handle); + if ( + bounds && + Number.isFinite(bounds.right) && + Number.isFinite(bounds.left) + ) { + return Math.abs(bounds.right - bounds.left); + } + } + if ( + !this._handle || + !this._handle.container || + !this._handle.container.getLocalBounds + ) + return 0; + const bounds = this._handle.container.getLocalBounds(); + return bounds && Number.isFinite(bounds.width) + ? Math.abs(bounds.width) + : 0; + } + + getHeight() { + const adapter = getAdapter(); + if (adapter && this._handle && adapter.getSceneAttachmentBounds) { + const bounds = adapter.getSceneAttachmentBounds(this._handle); + if ( + bounds && + Number.isFinite(bounds.bottom) && + Number.isFinite(bounds.top) + ) { + return Math.abs(bounds.bottom - bounds.top); + } + } + if ( + !this._handle || + !this._handle.container || + !this._handle.container.getLocalBounds + ) + return 0; + const bounds = this._handle.container.getLocalBounds(); + return bounds && Number.isFinite(bounds.height) + ? Math.abs(bounds.height) + : 0; + } + + getDrawableX() { + const adapter = getAdapter(); + if (adapter && this._handle && adapter.getSceneAttachmentBounds) { + const bounds = adapter.getSceneAttachmentBounds(this._handle); + if (bounds && Number.isFinite(bounds.left)) + return this.getX() + bounds.left; + } + if ( + !this._handle || + !this._handle.container || + !this._handle.container.getLocalBounds + ) { + return this.getX(); + } + const bounds = this._handle.container.getLocalBounds(); + return this.getX() + (bounds && Number.isFinite(bounds.x) ? bounds.x : 0); + } + + getDrawableY() { + const adapter = getAdapter(); + if (adapter && this._handle && adapter.getSceneAttachmentBounds) { + const bounds = adapter.getSceneAttachmentBounds(this._handle); + if (bounds && Number.isFinite(bounds.top)) + return this.getY() + bounds.top; + } + if ( + !this._handle || + !this._handle.container || + !this._handle.container.getLocalBounds + ) { + return this.getY(); + } + const bounds = this._handle.container.getLocalBounds(); + return this.getY() + (bounds && Number.isFinite(bounds.y) ? bounds.y : 0); + } + + setVisible(visible) { + this._visible = !!visible; + const adapter = getAdapter(); + if (this._handle && adapter) + adapter.setVisible(this._handle, this._visible); + this._syncVisibility(); + } + + isVisible() { + return this._visible; + } + + isReady() { + return this._ready; + } + + isLoading() { + return this._loading; + } + + hasError() { + return !!this._lastError; + } + + getLastError() { + return this._lastError || ''; + } + + setTimeScale(value) { + this._timeScale = toNumber(value, 1); + } + + getTimeScale() { + return this._timeScale; + } + + setMixDuration(value) { + this._mixDuration = Math.max(0, toNumber(value, 0)); + const adapter = getAdapter(); + if (adapter && this._handle) + adapter.setMix(this._handle, this._mixDuration); + } + + applyInspectorOverrides() { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setInspectorOverrides && + adapter.setInspectorOverrides( + this._handle, + this._inspectorOverrides || {} + ) + ); + } + + playAnimation(animationName, loop) { + this._animationName = String(animationName || ''); + this._loop = !!loop; + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setAnimation(this._handle, this._animationName, this._loop) + ); + } + + setAnimationOnTrack(trackIndex, animationName, loop) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setAnimationOnTrack( + this._handle, + normalizeTrack(trackIndex), + String(animationName || ''), + !!loop + ) + ); + } + + addAnimation(trackIndex, animationName, loop, delay) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.addAnimation( + this._handle, + normalizeTrack(trackIndex), + String(animationName || ''), + !!loop, + toNumber(delay, 0) + ) + ); + } + + clearTrack(trackIndex) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.clearTrack(this._handle, normalizeTrack(trackIndex)) + ); + } + + clearTracks() { + const adapter = getAdapter(); + return !!(adapter && this._handle && adapter.clearTracks(this._handle)); + } + + setSkin(skinName) { + this._skinName = String(skinName || ''); + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setSkin(this._handle, this._skinName) + ); + } + + currentAnimationIs(animationName) { + const adapter = getAdapter(); + if (!adapter || !this._handle) return false; + return ( + adapter.getCurrentAnimation(this._handle) === + String(animationName || '') + ); + } + + getCurrentAnimation() { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getCurrentAnimation(this._handle) || '' + : ''; + } + + boneExists(boneName) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.boneExists(this._handle, boneName) + ); + } + + slotExists(slotName) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.slotExists(this._handle, slotName) + ); + } + + setBonePosition(boneName, x, y) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setBonePosition(this._handle, boneName, x, y) + ); + } + + offsetBonePosition(boneName, x, y) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.offsetBonePosition(this._handle, boneName, x, y) + ); + } + + setBoneRotation(boneName, rotation) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setBoneRotation(this._handle, boneName, rotation) + ); + } + + offsetBoneRotation(boneName, rotation) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.offsetBoneRotation(this._handle, boneName, rotation) + ); + } + + setBoneScale(boneName, scaleX, scaleY) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setBoneScale(this._handle, boneName, scaleX, scaleY) + ); + } + + offsetBoneScale(boneName, scaleX, scaleY) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.offsetBoneScale(this._handle, boneName, scaleX, scaleY) + ); + } + + resetBone(boneName) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.resetBone(this._handle, boneName) + ); + } + + resetAllBones() { + const adapter = getAdapter(); + return !!(adapter && this._handle && adapter.resetAllBones(this._handle)); + } + + getBoneX(boneName) { + return this._getBoneValue(boneName, 'x'); + } + + getBoneY(boneName) { + return this._getBoneValue(boneName, 'y'); + } + + getBoneRotation(boneName) { + return this._getBoneValue(boneName, 'rotation'); + } + + getBoneScaleX(boneName) { + return this._getBoneValue(boneName, 'scaleX'); + } + + getBoneScaleY(boneName) { + return this._getBoneValue(boneName, 'scaleY'); + } + + _getBoneValue(boneName, field) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getBoneValue(this._handle, boneName, field) || 0 + : 0; + } + + getBoneSceneX(boneName) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getBoneSceneX(this._handle, boneName) || 0 + : 0; + } + + getBoneSceneY(boneName) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getBoneSceneY(this._handle, boneName) || 0 + : 0; + } + + getBoneSceneRotation(boneName) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getBoneSceneRotation(this._handle, boneName) || 0 + : 0; + } + + getBoneLength(boneName) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getBoneLength(this._handle, boneName) || 0 + : 0; + } + + getBoneChildCount(boneName) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getBoneChildCount(this._handle, boneName) || 0 + : 0; + } + + getBoneParentName(boneName) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getBoneParentName(this._handle, boneName) || '' + : ''; + } + + setBoneScenePosition(boneName, sceneX, sceneY) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setBoneScenePosition(this._handle, boneName, sceneX, sceneY) + ); + } + + setBoneSceneRotationToward(boneName, sceneX, sceneY, offsetAngle) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setBoneSceneRotationToward( + this._handle, + boneName, + sceneX, + sceneY, + offsetAngle + ) + ); + } + + isBoneNearPosition(boneName, sceneX, sceneY, radius) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.isBoneNearPosition( + this._handle, + boneName, + sceneX, + sceneY, + radius + ) + ); + } + + setAttachment(slotName, attachmentName) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setAttachment(this._handle, slotName, attachmentName) + ); + } + + clearAttachments() { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.clearAttachments(this._handle) + ); + } + + getCurrentAttachmentName(slotName) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getCurrentAttachmentName(this._handle, slotName) || '' + : ''; + } + + setSlotColor(slotName, red, green, blue, alpha) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setSlotColor(this._handle, slotName, red, green, blue, alpha) + ); + } + + setAnimationProgress(trackIndex, progress) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setAnimationProgress( + this._handle, + normalizeTrack(trackIndex), + progress + ) + ); + } + + getAnimationDuration(animationName) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getAnimationDuration(this._handle, animationName) || 0 + : 0; + } + + getAnimationFrame(trackIndex) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getAnimationFrame(this._handle, normalizeTrack(trackIndex)) || + 0 + : 0; + } + + hasAnimation(animationName) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.hasAnimation(this._handle, animationName) + ); + } + + hasSkin(skinName) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.hasSkin(this._handle, skinName) + ); + } + + isPlayingOnTrack(trackIndex) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.isPlayingOnTrack(this._handle, normalizeTrack(trackIndex)) + ); + } + + isTrackAnimationComplete(trackIndex) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.isAnimationComplete(this._handle, normalizeTrack(trackIndex)) + ); + } + + eventFired(eventName) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.hasEventFired(this._handle, eventName) + ); + } + + animationCompleted(animationName) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.hasAnimationCompleted(this._handle, animationName) + ); + } + + getEventString() { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getEventString(this._handle) || '' + : ''; + } + + getEventInt() { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getEventInt(this._handle) || 0 + : 0; + } + + getEventFloat() { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getEventFloat(this._handle) || 0 + : 0; + } + + setIkConstraintMix(name, mix) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setIkConstraintMix(this._handle, name, mix) + ); + } + + setTransformConstraintMix(name, mix) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setTransformConstraintMix(this._handle, name, mix) + ); + } + + configureBoneAutoReset(boneNames, channel, enabled, delay, duration) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.configureBoneAutoReset( + this._handle, + boneNames, + channel, + !!enabled, + delay, + duration + ) + ); + } + + isBoneAutoResetActive(boneName, channel) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.isBoneAutoResetActive(this._handle, boneName, channel) + ); + } + + getBoneAutoResetProgress(boneName, channel) { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getBoneAutoResetProgress(this._handle, boneName, channel) || 0 + : 0; + } + + setDebugVisible(visible) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setDebugVisible(this._handle, !!visible) + ); + } + + setDebugExtrasVisible(visible) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.setDebugExtrasVisible(this._handle, !!visible) + ); + } + + drawBoneEllipse(boneName, radiusX, radiusY, color) { + const adapter = getAdapter(); + return !!( + adapter && + this._handle && + adapter.drawBoneEllipse(this._handle, boneName, radiusX, radiusY, color) + ); + } + + resolveSceneBlocking(currentX, currentY, previousX, previousY) { + const adapter = getAdapter(); + if (!adapter || !this._handle || !adapter.resolveSceneMeshBlocking) { + this._lastSceneBlocking = null; + return false; + } + const result = adapter.resolveSceneMeshBlocking(this._handle, { + currentX, + currentY, + previousX, + previousY, + }); + this._lastSceneBlocking = result || null; + return !!(result && result.changed); + } + + isSceneBlocked() { + return !!(this._lastSceneBlocking && this._lastSceneBlocking.changed); + } + + isWallSlideActive() { + return !!( + this._lastSceneBlocking && this._lastSceneBlocking.wallSlideCandidate + ); + } + + canWallJump() { + return !!( + this._lastSceneBlocking && this._lastSceneBlocking.wallSlideCandidate + ); + } + + canLedgeGrab() { + return !!( + this._lastSceneBlocking && this._lastSceneBlocking.ledgeGrabCandidate + ); + } + + isOnStableSlope() { + return !!( + this._lastSceneBlocking && this._lastSceneBlocking.stableGrounded + ); + } + + getSceneBlockedWallName() { + return this._lastSceneBlocking && this._lastSceneBlocking.wallName + ? String(this._lastSceneBlocking.wallName) + : ''; + } + + getSceneBlockNormalX() { + return this._lastSceneBlocking && this._lastSceneBlocking.normalX + ? Number(this._lastSceneBlocking.normalX) || 0 + : 0; + } + + getSceneBlockNormalY() { + return this._lastSceneBlocking && this._lastSceneBlocking.normalY + ? Number(this._lastSceneBlocking.normalY) || 0 + : 0; + } + + getCurrentSlopeAngle() { + return this._lastSceneBlocking && this._lastSceneBlocking.slopeAngle + ? Number(this._lastSceneBlocking.slopeAngle) || 0 + : 0; + } + + getCurrentSlopeSpeedScale() { + return this._lastSceneBlocking && this._lastSceneBlocking.slopeSpeedScale + ? Number(this._lastSceneBlocking.slopeSpeedScale) || 0 + : 1; + } + + getLastWallContactNormalX() { + return this._lastSceneBlocking && + this._lastSceneBlocking.lastWallContactNormalX + ? Number(this._lastSceneBlocking.lastWallContactNormalX) || 0 + : 0; + } + + getLastCollisionObjectName() { + return this._lastCollisionObjectName || ''; + } + + getLastCollisionStrength() { + return this._lastCollisionStrength || 0; + } + + getDebugInfo() { + const adapter = getAdapter(); + return adapter && this._handle + ? adapter.getDebugInfo(this._handle) || '' + : this._lastError || ''; + } + }; + + gdjs.registerObject( + 'Spine43Object::Spine43Object', + gdjs.Spine43RuntimeObject + ); +})(); diff --git a/Extensions/TimelineSequencer/JsExtension.js b/Extensions/TimelineSequencer/JsExtension.js new file mode 100644 index 000000000000..3749c3b84a72 --- /dev/null +++ b/Extensions/TimelineSequencer/JsExtension.js @@ -0,0 +1,435 @@ +//@ts-check +/// + +const timelineIncludeFile = 'Extensions/TimelineSequencer/timelineease.js'; +const timelineRuntimeFiles = [ + 'Extensions/TimelineSequencer/timelineinterpolation.js', + 'Extensions/TimelineSequencer/timelinepath.js', + 'Extensions/TimelineSequencer/timelineplayer.js', + 'Extensions/TimelineSequencer/timelinemanager.js', + 'Extensions/TimelineSequencer/timelinesequencertools.js', +]; +const icon24 = 'JsPlatform/Extensions/tween_behavior24.png'; +const icon32 = 'JsPlatform/Extensions/tween_behavior32.png'; + +const timelineNameDefault = 'Intro'; +const timelineNameIdentifier = 'TimelineSequencer::TimelineName'; +const timelineBindingNameDefault = 'Target'; +const timelineBindingNameIdentifier = 'TimelineSequencer::BindingName'; +const timelineJsonDefault = + '{"timelines":[{"name":"Intro","duration":1,"tracks":[]}]}'; + +const withTimelineRuntime = (codeExtraInformation) => { + codeExtraInformation.setIncludeFile(timelineIncludeFile); + for (const includeFile of timelineRuntimeFiles) { + codeExtraInformation.addIncludeFile(includeFile); + } + return codeExtraInformation; +}; + +/** @type {ExtensionModule} */ +module.exports = { + createExtension: function (_, gd) { + const extension = new gd.PlatformExtension(); + extension + .setExtensionInformation( + 'TimelineSequencer', + _('Timeline Sequencer'), + _( + 'Play Construct-style timeline animations for scene objects with keyframes, easing, markers, looping and event controls.' + ), + 'GDevelop contributors', + 'Open source (MIT License)' + ) + .setShortDescription( + _( + 'Create and play keyframed timelines without replacing Sprite animations.' + ) + ) + .setCategory('Visual effect') + .setTags('timeline, animation, keyframes, sequencer'); + extension + .addInstructionOrExpressionGroupMetadata(_('Timeline Sequencer')) + .setIcon(icon32); + + extension + .registerProperty('timelines') + .setLabel(_('Timelines')) + .setDescription(_('Serialized project timelines used by the editor.')) + .setType('string') + .setHidden(true); + + withTimelineRuntime( + extension + .addAction( + 'RegisterTimelineJson', + _('Register timelines from JSON'), + _('Register one or more timelines from a JSON string.'), + _('Register timelines from _PARAM1_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('string', _('Timeline JSON'), timelineJsonDefault, false) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.registerTimelineJson'); + + withTimelineRuntime( + extension + .addAction( + 'PlayTimeline', + _('Play a timeline'), + _('Play a timeline from its current beginning.'), + _('Play timeline _PARAM1_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.playTimeline'); + + withTimelineRuntime( + extension + .addAction( + 'PlayTimelineFromTime', + _('Play a timeline from time'), + _('Play a timeline from a given time in seconds.'), + _('Play timeline _PARAM1_ from _PARAM2_ seconds'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .addParameter('expression', _('Time in seconds'), '', false) + .setDefaultValue('0') + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.playTimelineFromTime'); + + withTimelineRuntime( + extension + .addAction( + 'PauseTimeline', + _('Pause a timeline'), + _('Pause a timeline that is currently playing.'), + _('Pause timeline _PARAM1_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.pauseTimeline'); + + withTimelineRuntime( + extension + .addAction( + 'ResumeTimeline', + _('Resume a timeline'), + _('Resume a paused timeline.'), + _('Resume timeline _PARAM1_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.resumeTimeline'); + + withTimelineRuntime( + extension + .addAction( + 'StopTimeline', + _('Stop a timeline'), + _('Stop a timeline and keep objects at their current values.'), + _('Stop timeline _PARAM1_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.stopTimeline'); + + withTimelineRuntime( + extension + .addAction( + 'SeekTimeline', + _('Set timeline time'), + _('Move a timeline to a given time in seconds and apply its values.'), + _('Set timeline _PARAM1_ time to _PARAM2_ seconds'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .addParameter('expression', _('Time in seconds'), '', false) + .setDefaultValue('0') + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.seekTimeline'); + + withTimelineRuntime( + extension + .addAction( + 'SetTimelineSpeed', + _('Set timeline speed'), + _('Change the playback speed of a timeline.'), + _('Set timeline _PARAM1_ speed to _PARAM2_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .addParameter('expression', _('Speed'), '', false) + .setDefaultValue('1') + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.setTimelineSpeed'); + + withTimelineRuntime( + extension + .addAction( + 'SetTimelineLoop', + _('Set timeline looping'), + _('Enable or disable looping for a timeline.'), + _('Set timeline _PARAM1_ looping: _PARAM2_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .addParameter('yesorno', _('Loop'), '', false) + .setDefaultValue('yes') + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.setTimelineLoop'); + + withTimelineRuntime( + extension + .addAction( + 'BindTimelineObjectTarget', + _('Bind objects to a timeline target'), + _('Bind picked objects to a runtime target name used by timelines.'), + _('Bind _PARAM2_ to timeline target _PARAM1_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter( + 'identifier', + _('Binding name'), + timelineBindingNameIdentifier + ) + .setDefaultValue(JSON.stringify(timelineBindingNameDefault)) + .setParameterExtraInfo(timelineBindingNameIdentifier) + .addParameter('object', _('Objects'), '', false) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.bindTimelineObjectTarget'); + + withTimelineRuntime( + extension + .addCondition( + 'TimelineIsPlaying', + _('Timeline is playing'), + _('Check if a timeline is currently playing.'), + _('Timeline _PARAM1_ is playing'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.isTimelinePlaying'); + + withTimelineRuntime( + extension + .addCondition( + 'TimelineIsPaused', + _('Timeline is paused'), + _('Check if a timeline is paused.'), + _('Timeline _PARAM1_ is paused'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.isTimelinePaused'); + + withTimelineRuntime( + extension + .addCondition( + 'TimelineHasFinished', + _('Timeline has finished'), + _('Check if a timeline has finished playing.'), + _('Timeline _PARAM1_ has finished'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.hasTimelineFinished'); + + withTimelineRuntime( + extension + .addCondition( + 'TimelineReachedMarker', + _('Timeline reached marker'), + _('Check if a timeline reached a marker during this frame.'), + _('Timeline _PARAM1_ reached marker _PARAM2_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .addParameter('string', _('Marker name'), 'Hit', false) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.hasTimelineReachedMarker'); + + withTimelineRuntime( + extension + .addCondition( + 'TimelineTimeGreaterThan', + _('Timeline time is greater than'), + _('Compare the current timeline time, in seconds.'), + _('Timeline _PARAM1_ time is greater than _PARAM2_ seconds'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .addParameter('expression', _('Time in seconds'), '', false) + .setDefaultValue('0') + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.timelineTimeGreaterThan'); + + withTimelineRuntime( + extension + .addCondition( + 'TimelineProgressGreaterThan', + _('Timeline progress is greater than'), + _('Compare the timeline progress from 0 to 1.'), + _('Timeline _PARAM1_ progress is greater than _PARAM2_'), + '', + icon24, + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .addParameter('expression', _('Progress'), '', false) + .setDefaultValue('0.5') + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.timelineProgressGreaterThan'); + + withTimelineRuntime( + extension + .addExpression( + 'Time', + _('Timeline time'), + _('Return the current timeline time in seconds.'), + '', + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.getTimelineTime'); + + withTimelineRuntime( + extension + .addExpression( + 'Duration', + _('Timeline duration'), + _('Return the timeline duration in seconds.'), + '', + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.getTimelineDuration'); + + withTimelineRuntime( + extension + .addExpression( + 'Progress', + _('Timeline progress'), + _('Return the timeline progress from 0 to 1.'), + '', + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.getTimelineProgress'); + + withTimelineRuntime( + extension + .addExpression( + 'Speed', + _('Timeline speed'), + _('Return the timeline playback speed.'), + '', + icon32 + ) + .addCodeOnlyParameter('currentScene', '') + .addParameter('identifier', _('Timeline name'), timelineNameIdentifier) + .setDefaultValue(JSON.stringify(timelineNameDefault)) + .setParameterExtraInfo(timelineNameIdentifier) + .getCodeExtraInformation() + ).setFunctionName('gdjs.evtTools.timeline.getTimelineSpeed'); + + return extension; + }, + runExtensionSanityTests: function (gd, extension) { + return []; + }, +}; diff --git a/Extensions/TimelineSequencer/tests/TimelineSequencer.spec.js b/Extensions/TimelineSequencer/tests/TimelineSequencer.spec.js new file mode 100644 index 000000000000..62efe84c414c --- /dev/null +++ b/Extensions/TimelineSequencer/tests/TimelineSequencer.spec.js @@ -0,0 +1,770 @@ +// @ts-check +describe('gdjs.evtTools.timeline', () => { + const createScene = (timeDelta = 1000 / 60) => { + const runtimeGame = gdjs.getPixiRuntimeGame(); + const runtimeScene = new gdjs.TestRuntimeScene(runtimeGame); + runtimeScene._timeManager.getElapsedTime = () => timeDelta; + return runtimeScene; + }; + + const createObject = (runtimeScene) => { + const object = new gdjs.TestRuntimeObject(runtimeScene, { + name: 'Hero', + type: '', + behaviors: [], + variables: [], + effects: [], + }); + const scalableObject = /** @type {any} */ (object); + scalableObject._scaleX = 1; + scalableObject._scaleY = 1; + scalableObject.setScaleX = (scale) => { + scalableObject._scaleX = scale; + }; + scalableObject.setScaleY = (scale) => { + scalableObject._scaleY = scale; + }; + scalableObject.getScaleX = () => scalableObject._scaleX; + scalableObject.getScaleY = () => scalableObject._scaleY; + runtimeScene.addObject(object); + return scalableObject; + }; + + const create3DObject = (runtimeScene) => { + const object = createObject(runtimeScene); + object._z = 0; + object._depth = 10; + object._rotationX = 0; + object._rotationY = 0; + object._scaleZ = 1; + object.setZ = (z) => { + object._z = z; + }; + object.getZ = () => object._z; + object.setDepth = (depth) => { + object._depth = depth; + }; + object.getDepth = () => object._depth; + object.setRotationX = (angle) => { + object._rotationX = angle; + }; + object.getRotationX = () => object._rotationX; + object.setRotationY = (angle) => { + object._rotationY = angle; + }; + object.getRotationY = () => object._rotationY; + object.setScaleZ = (scale) => { + object._scaleZ = scale; + }; + object.getScaleZ = () => object._scaleZ; + return object; + }; + + const timelineJson = JSON.stringify({ + timelines: [ + { + name: 'Intro', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'position', + keyframes: [ + { id: 'a', time: 0, value: { x: 0, y: 0 } }, + { + id: 'b', + time: 1, + value: { x: 100, y: 50 }, + ease: 'linear', + }, + ], + }, + { + property: 'angle', + keyframes: [ + { id: 'c', time: 0, value: 0 }, + { id: 'd', time: 1, value: 90, ease: 'linear' }, + ], + }, + { + property: 'scale', + keyframes: [ + { id: 'e', time: 0, value: { x: 1, y: 1 } }, + { + id: 'f', + time: 1, + value: { x: 2, y: 0.5 }, + ease: 'linear', + }, + ], + }, + ], + }, + ], + markers: [{ time: 0.5, name: 'Half' }], + }, + ], + }); + + it('can play an object timeline', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson(runtimeScene, timelineJson); + gdjs.evtTools.timeline.playTimeline(runtimeScene, 'Intro'); + + expect(object.getX()).to.be(0); + expect(object.getY()).to.be(0); + expect(object.getAngle()).to.be(0); + expect(object.getScaleX()).to.be(1); + expect(object.getScaleY()).to.be(1); + expect( + gdjs.evtTools.timeline.isTimelinePlaying(runtimeScene, 'Intro') + ).to.be(true); + + runtimeScene.renderAndStep(500); + + expect(object.getX()).to.be(50); + expect(object.getY()).to.be(25); + expect(object.getAngle()).to.be(45); + expect(object.getScaleX()).to.be(1.5); + expect(object.getScaleY()).to.be(0.75); + expect(gdjs.evtTools.timeline.getTimelineTime(runtimeScene, 'Intro')).to.be( + 0.5 + ); + expect( + gdjs.evtTools.timeline.hasTimelineReachedMarker( + runtimeScene, + 'Intro', + 'Half' + ) + ).to.be(true); + + runtimeScene.renderAndStep(500); + + expect(object.getX()).to.be(100); + expect(object.getY()).to.be(50); + expect(object.getAngle()).to.be(90); + expect(object.getScaleX()).to.be(2); + expect(object.getScaleY()).to.be(0.5); + expect( + gdjs.evtTools.timeline.isTimelinePlaying(runtimeScene, 'Intro') + ).to.be(false); + expect( + gdjs.evtTools.timeline.hasTimelineFinished(runtimeScene, 'Intro') + ).to.be(true); + }); + + it('can seek a timeline', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson(runtimeScene, timelineJson); + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'Intro', 0.25); + + expect(object.getX()).to.be(25); + expect(object.getY()).to.be(12.5); + expect(object.getScaleX()).to.be(1.25); + expect(object.getScaleY()).to.be(0.875); + expect( + gdjs.evtTools.timeline.getTimelineProgress(runtimeScene, 'Intro') + ).to.be(0.25); + }); + + it('uses implicit initial values before the first visible keyframe', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: 'ImplicitStart', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'x', + initialValue: 10, + keyframes: [{ id: 'x1', time: 1, value: 110 }], + }, + { + property: 'y', + initialValue: 20, + keyframes: [], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'ImplicitStart', 0); + expect(object.getX()).to.be(10); + expect(object.getY()).to.be(20); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'ImplicitStart', 0.5); + expect(object.getX()).to.be(60); + expect(object.getY()).to.be(20); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'ImplicitStart', 1); + expect(object.getX()).to.be(110); + expect(object.getY()).to.be(20); + }); + + it('normalizes duplicate, near-duplicate and unordered keyframes before sampling', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: 'MessyKeys', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'position', + keyframes: [ + { time: 1, value: { x: 100, y: 0 } }, + { time: 0, value: { x: 0, y: 0 } }, + { time: 0.5, value: { x: 10, y: 0 } }, + { time: 0.506, value: { x: 50, y: 0 } }, + ], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'MessyKeys', 0.5); + expect(object.getX()).to.be(50); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'MessyKeys', 0.503); + expect(object.getX()).to.be.within(50.2, 50.4); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'MessyKeys', 0.75); + expect(object.getX()).to.be(75); + }); + + it('uses the current keyframe curve for the segment to the next keyframe', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: 'BezierCurve', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'position', + keyframes: [ + { + time: 0, + value: { x: 0, y: 0 }, + curve: [0, 1, 1, 1], + }, + { + time: 1, + value: { x: 100, y: 0 }, + curve: [0, 0, 1, 0], + }, + ], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'BezierCurve', 0.5); + + expect(object.getX()).to.be.within(87.4, 87.6); + }); + + it('keeps values stepped when the current keyframe curve is stepped', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: 'SteppedCurve', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'position', + keyframes: [ + { + time: 0, + value: { x: 0, y: 0 }, + curve: 'stepped', + }, + { time: 1, value: { x: 100, y: 0 } }, + ], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'SteppedCurve', 0.5); + expect(object.getX()).to.be(0); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'SteppedCurve', 1); + expect(object.getX()).to.be(100); + }); + + it('falls back to object name when a scene instance uuid is not available at runtime', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: 'SceneInstanceFallback', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'sceneInstance', + objectName: 'Hero', + instancePersistentUuid: 'stale-or-missing-uuid', + selection: 'first', + }, + propertyTracks: [ + { + property: 'position', + keyframes: [ + { time: 0, value: { x: 0, y: 0 } }, + { time: 1, value: { x: 300, y: 120 } }, + ], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline( + runtimeScene, + 'SceneInstanceFallback', + 1 + ); + + expect(object.getX()).to.be(300); + expect(object.getY()).to.be(120); + }); + + it('can apply sprite, text and video style object properties', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + object._animationIndex = 0; + object._animationFrame = 0; + object._animationSpeedScale = 1; + object._characterSize = 20; + object._lineHeight = 1; + object._volume = 100; + object._playbackSpeed = 1; + object._currentTime = 0; + object.setAnimationIndex = (value) => { + object._animationIndex = value; + }; + object.getAnimationIndex = () => object._animationIndex; + object.setAnimationFrame = (value) => { + object._animationFrame = value; + }; + object.getAnimationFrame = () => object._animationFrame; + object.setAnimationSpeedScale = (value) => { + object._animationSpeedScale = value; + }; + object.getAnimationSpeedScale = () => object._animationSpeedScale; + object.setCharacterSize = (value) => { + object._characterSize = value; + }; + object.getCharacterSize = () => object._characterSize; + object.setLineHeight = (value) => { + object._lineHeight = value; + }; + object.getLineHeight = () => object._lineHeight; + object.setVolume = (value) => { + object._volume = value; + }; + object.getVolume = () => object._volume; + object.setPlaybackSpeed = (value) => { + object._playbackSpeed = value; + }; + object.getPlaybackSpeed = () => object._playbackSpeed; + object.setCurrentTime = (value) => { + object._currentTime = value; + }; + object.getCurrentTime = () => object._currentTime; + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: 'ObjectProperties', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'animationIndex', + keyframes: [ + { time: 0, value: 0 }, + { time: 1, value: 2 }, + ], + }, + { + property: 'animationFrame', + keyframes: [ + { time: 0, value: 0 }, + { time: 1, value: 3 }, + ], + }, + { + property: 'animationSpeedScale', + keyframes: [ + { time: 0, value: 1 }, + { time: 1, value: 1.5 }, + ], + }, + { + property: 'characterSize', + keyframes: [ + { time: 0, value: 20 }, + { time: 1, value: 42 }, + ], + }, + { + property: 'lineHeight', + keyframes: [ + { time: 0, value: 1 }, + { time: 1, value: 1.2 }, + ], + }, + { + property: 'volume', + keyframes: [ + { time: 0, value: 100 }, + { time: 1, value: 40 }, + ], + }, + { + property: 'playbackSpeed', + keyframes: [ + { time: 0, value: 1 }, + { time: 1, value: 1.75 }, + ], + }, + { + property: 'currentTime', + keyframes: [ + { time: 0, value: 0 }, + { time: 1, value: 5 }, + ], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'ObjectProperties', 1); + + expect(object._animationIndex).to.be(2); + expect(object._animationFrame).to.be(3); + expect(object._animationSpeedScale).to.be(1.5); + expect(object._characterSize).to.be(42); + expect(object._lineHeight).to.be(1.2); + expect(object._volume).to.be(40); + expect(object._playbackSpeed).to.be(1.75); + expect(object._currentTime).to.be(5); + }); + + it('can apply 3D object transform properties', () => { + const runtimeScene = createScene(500); + const object = create3DObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: '3DObject', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'position', + keyframes: [ + { time: 0, value: { x: 0, y: 0, z: 0 } }, + { time: 1, value: { x: 80, y: 20, z: 40 } }, + ], + }, + { + property: 'rotationX', + keyframes: [ + { time: 0, value: 0 }, + { time: 1, value: 30 }, + ], + }, + { + property: 'rotationY', + keyframes: [ + { time: 0, value: 0 }, + { time: 1, value: 60 }, + ], + }, + { + property: 'depth', + keyframes: [ + { time: 0, value: 10 }, + { time: 1, value: 30 }, + ], + }, + { + property: 'scaleZ', + keyframes: [ + { time: 0, value: 1 }, + { time: 1, value: 4 }, + ], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, '3DObject', 0.5); + + expect(object.getX()).to.be(40); + expect(object.getY()).to.be(10); + expect(object.getZ()).to.be(20); + expect(object.getRotationX()).to.be(15); + expect(object.getRotationY()).to.be(30); + expect(object.getDepth()).to.be(20); + expect(object.getScaleZ()).to.be(2.5); + }); + + it('smoothly interpolates sprite animation frames between sparse keyframes', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + object._animationFrame = 0; + object.setAnimationFrame = (value) => { + object._animationFrame = value; + }; + object.getAnimationFrame = () => object._animationFrame; + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: 'AnimationFrameStep', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'animationFrame', + keyframes: [ + { time: 0, value: 0 }, + { time: 1, value: 10 }, + ], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline( + runtimeScene, + 'AnimationFrameStep', + 0.5 + ); + expect(object._animationFrame).to.be(5); + + gdjs.evtTools.timeline.seekTimeline(runtimeScene, 'AnimationFrameStep', 1); + expect(object._animationFrame).to.be(10); + }); + + it('can apply animation tracks to objects exposing the legacy sprite animation API', () => { + const runtimeScene = createScene(500); + const object = createObject(runtimeScene); + delete object.setAnimationIndex; + delete object.getAnimationIndex; + object._animation = 0; + object.setAnimation = (value) => { + object._animation = value; + }; + object.getAnimation = () => object._animation; + + gdjs.evtTools.timeline.registerTimelineJson( + runtimeScene, + JSON.stringify({ + timelines: [ + { + name: 'LegacySpriteAnimation', + duration: 1, + tracks: [ + { + type: 'object', + target: { + mode: 'objectName', + objectName: 'Hero', + selection: 'first', + }, + propertyTracks: [ + { + property: 'animationIndex', + keyframes: [ + { time: 0, value: 0 }, + { time: 1, value: 4 }, + ], + }, + ], + }, + ], + }, + ], + }) + ); + + gdjs.evtTools.timeline.seekTimeline( + runtimeScene, + 'LegacySpriteAnimation', + 1 + ); + + expect(object._animation).to.be(4); + }); + + it('can pause and resume a timeline', () => { + const runtimeScene = createScene(250); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson(runtimeScene, timelineJson); + gdjs.evtTools.timeline.playTimeline(runtimeScene, 'Intro'); + runtimeScene.renderAndStep(250); + + expect(object.getX()).to.be(25); + + gdjs.evtTools.timeline.pauseTimeline(runtimeScene, 'Intro'); + expect( + gdjs.evtTools.timeline.isTimelinePaused(runtimeScene, 'Intro') + ).to.be(true); + runtimeScene.renderAndStep(250); + expect(object.getX()).to.be(25); + + gdjs.evtTools.timeline.resumeTimeline(runtimeScene, 'Intro'); + runtimeScene.renderAndStep(250); + expect(object.getX()).to.be(50); + }); + + it('can loop a timeline', () => { + const runtimeScene = createScene(1250); + const object = createObject(runtimeScene); + + gdjs.evtTools.timeline.registerTimelineJson(runtimeScene, timelineJson); + gdjs.evtTools.timeline.setTimelineLoop(runtimeScene, 'Intro', true); + gdjs.evtTools.timeline.playTimeline(runtimeScene, 'Intro'); + runtimeScene.renderAndStep(1250); + + expect( + gdjs.evtTools.timeline.isTimelinePlaying(runtimeScene, 'Intro') + ).to.be(true); + expect(gdjs.evtTools.timeline.getTimelineTime(runtimeScene, 'Intro')).to.be( + 0.25 + ); + expect(object.getX()).to.be(25); + }); +}); diff --git a/Extensions/TimelineSequencer/timelineease.ts b/Extensions/TimelineSequencer/timelineease.ts new file mode 100644 index 000000000000..36120271f947 --- /dev/null +++ b/Extensions/TimelineSequencer/timelineease.ts @@ -0,0 +1,154 @@ +namespace gdjs { + export namespace evtTools { + export namespace timeline { + export type EaseDefinition = + | string + | [number, number, number, number] + | { + type: 'preset'; + name: string; + } + | { + type: 'cubicBezier'; + x1: number; + y1: number; + x2: number; + y2: number; + } + | { + type: 'steps'; + steps: number; + position: 'start' | 'end'; + }; + + const clamp01 = (value: number): number => + Math.max(0, Math.min(1, value)); + + const finiteOr = (value: number, fallback: number): number => + typeof value === 'number' && isFinite(value) ? value : fallback; + + const fallbackPresetEasingFunctions: Record< + string, + (t: number) => number + > = { + linear: (t) => t, + easeInQuad: (t) => t * t, + easeOutQuad: (t) => 1 - (1 - t) * (1 - t), + easeInOutQuad: (t) => + t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2, + easeInCubic: (t) => t * t * t, + easeOutCubic: (t) => 1 - Math.pow(1 - t, 3), + easeInOutCubic: (t) => + t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2, + }; + + const cubicBezierCoordinate = ( + p1: number, + p2: number, + t: number + ): number => { + const u = 1 - t; + return 3 * u * u * t * p1 + 3 * u * t * t * p2 + t * t * t; + }; + + const cubicBezierDerivative = ( + p1: number, + p2: number, + t: number + ): number => { + const u = 1 - t; + return 3 * u * u * p1 + 6 * u * t * (p2 - p1) + 3 * t * t * (1 - p2); + }; + + const solveCubicBezierT = (x1: number, x2: number, x: number): number => { + let t = x; + for (let i = 0; i < 8; i++) { + const currentX = cubicBezierCoordinate(x1, x2, t) - x; + const derivative = cubicBezierDerivative(x1, x2, t); + if (Math.abs(currentX) < 1e-6) { + return t; + } + if (Math.abs(derivative) < 1e-6) { + break; + } + t -= currentX / derivative; + } + + let min = 0; + let max = 1; + t = x; + for (let i = 0; i < 10; i++) { + const currentX = cubicBezierCoordinate(x1, x2, t); + if (Math.abs(currentX - x) < 1e-6) { + return t; + } + if (currentX < x) { + min = t; + } else { + max = t; + } + t = (min + max) / 2; + } + return t; + }; + + export const evaluateEase = ( + ease: EaseDefinition | null | undefined, + progress: number + ): number => { + const clampedProgress = clamp01(progress); + if (!ease) { + return clampedProgress; + } + + if (typeof ease === 'string') { + if (ease === 'hold' || ease === 'step' || ease === 'stepped') { + return 0; + } + + const tween = (gdjs.evtTools as any).tween; + const preset = + tween && tween.easingFunctions && tween.easingFunctions[ease] + ? tween.easingFunctions[ease] + : fallbackPresetEasingFunctions[ease]; + return preset ? preset(clampedProgress) : clampedProgress; + } + + if (Array.isArray(ease)) { + const t = solveCubicBezierT( + clamp01(finiteOr(ease[0], 0)), + clamp01(finiteOr(ease[2], 1)), + clampedProgress + ); + return clamp01( + cubicBezierCoordinate(finiteOr(ease[1], 0), finiteOr(ease[3], 1), t) + ); + } + + if (ease.type === 'preset') { + return evaluateEase(ease.name, clampedProgress); + } + + if (ease.type === 'steps') { + const steps = Math.max(1, Math.floor(ease.steps || 1)); + return ease.position === 'start' + ? Math.min(1, Math.ceil(clampedProgress * steps) / steps) + : Math.floor(clampedProgress * steps) / steps; + } + + if (ease.type === 'cubicBezier') { + const t = solveCubicBezierT( + clamp01(finiteOr(ease.x1, 0)), + clamp01(finiteOr(ease.x2, 1)), + clampedProgress + ); + return clamp01( + cubicBezierCoordinate(finiteOr(ease.y1, 0), finiteOr(ease.y2, 1), t) + ); + } + + return clampedProgress; + }; + } + } +} diff --git a/Extensions/TimelineSequencer/timelineinterpolation.ts b/Extensions/TimelineSequencer/timelineinterpolation.ts new file mode 100644 index 000000000000..09ef5b1edc94 --- /dev/null +++ b/Extensions/TimelineSequencer/timelineinterpolation.ts @@ -0,0 +1,97 @@ +namespace gdjs { + export namespace evtTools { + export namespace timeline { + export type TimelineValue = + | number + | string + | boolean + | { x?: number; y?: number; [key: string]: any } + | Array; + + export const lerp = (from: number, to: number, t: number): number => + from + (to - from) * t; + + export const lerpAngleDeg = ( + from: number, + to: number, + t: number + ): number => { + const delta = ((to - from + 540) % 360) - 180; + return from + delta * t; + }; + + const interpolateArray = ( + from: Array, + to: Array, + t: number + ): Array => { + const length = Math.min(from.length, to.length); + const value = new Array(length); + for (let i = 0; i < length; i++) { + value[i] = lerp(from[i], to[i], t); + } + return value; + }; + + const interpolateObject = ( + from: { [key: string]: any }, + to: { [key: string]: any }, + t: number, + propertyName: string + ): { [key: string]: any } => { + const value = { ...from }; + for (const key in to) { + if (typeof from[key] === 'number' && typeof to[key] === 'number') { + value[key] = + propertyName.toLowerCase().indexOf('angle') !== -1 + ? lerpAngleDeg(from[key], to[key], t) + : lerp(from[key], to[key], t); + } else { + value[key] = t < 1 ? from[key] : to[key]; + } + } + return value; + }; + + export const interpolateValue = ( + from: TimelineValue, + to: TimelineValue, + t: number, + propertyName: string + ): TimelineValue => { + if (typeof from === 'number' && typeof to === 'number') { + return propertyName.toLowerCase().indexOf('angle') !== -1 + ? lerpAngleDeg(from, to, t) + : lerp(from, to, t); + } + + if (Array.isArray(from) && Array.isArray(to)) { + return interpolateArray(from, to, t); + } + + if ( + from && + to && + typeof from === 'object' && + typeof to === 'object' && + !Array.isArray(from) && + !Array.isArray(to) + ) { + return interpolateObject(from, to, t, propertyName); + } + + return t < 1 ? from : to; + }; + + export const valueAsNumber = ( + value: TimelineValue, + fallback: number = 0 + ): number => + typeof value === 'number' + ? value + : typeof value === 'string' + ? parseFloat(value) || fallback + : fallback; + } + } +} diff --git a/Extensions/TimelineSequencer/timelinemanager.ts b/Extensions/TimelineSequencer/timelinemanager.ts new file mode 100644 index 000000000000..4293394b284c --- /dev/null +++ b/Extensions/TimelineSequencer/timelinemanager.ts @@ -0,0 +1,214 @@ +namespace gdjs { + export interface RuntimeScene { + _timelineSequencer?: gdjs.evtTools.timeline.TimelineManager; + } + + export namespace evtTools { + export namespace timeline { + export class TimelineManager { + private _runtimeScene: gdjs.RuntimeScene; + private _timelines = new Map(); + private _players = new Map< + string, + gdjs.evtTools.timeline.TimelinePlayer + >(); + private _bindings = new Map>(); + + constructor(runtimeScene: gdjs.RuntimeScene) { + this._runtimeScene = runtimeScene; + this.loadTimelinesFromProjectProperties(); + } + + loadTimelinesFromProjectProperties(): void { + const serializedTimelines = this._runtimeScene + .getGame() + .getExtensionProperty('TimelineSequencer', 'timelines'); + if (!serializedTimelines) { + return; + } + this.registerTimelinesFromJson(serializedTimelines); + } + + registerTimelinesFromJson(json: string): boolean { + try { + const parsed = JSON.parse(json); + const timelines = Array.isArray(parsed) + ? parsed + : Array.isArray(parsed.timelines) + ? parsed.timelines + : []; + for (const timeline of timelines) { + this.registerTimeline(timeline); + } + return true; + } catch (error) { + console.error( + 'Unable to parse TimelineSequencer timelines:', + error + ); + return false; + } + } + + registerTimeline(timeline: TimelineData): void { + if (!timeline || !timeline.name) { + return; + } + this._timelines.set(timeline.name, timeline); + if (this._players.has(timeline.name)) { + this._players.delete(timeline.name); + } + } + + hasTimeline(name: string): boolean { + return this._timelines.has(name); + } + + getTimeline(name: string): TimelineData | null { + return this._timelines.get(name) || null; + } + + getPlayer(name: string): gdjs.evtTools.timeline.TimelinePlayer | null { + const existingPlayer = this._players.get(name); + if (existingPlayer) { + return existingPlayer; + } + + const timeline = this.getTimeline(name); + if (!timeline) { + return null; + } + + const player = new gdjs.evtTools.timeline.TimelinePlayer( + this._runtimeScene, + timeline, + this._bindings + ); + this._players.set(name, player); + return player; + } + + play(name: string, fromTime: number = 0): void { + const player = this.getPlayer(name); + if (player) { + player.play(fromTime); + } + } + + pause(name: string): void { + const player = this.getPlayer(name); + if (player) { + player.pause(); + } + } + + resume(name: string): void { + const player = this.getPlayer(name); + if (player) { + player.resume(); + } + } + + stop(name: string): void { + const player = this.getPlayer(name); + if (player) { + player.stop(); + } + } + + seek(name: string, time: number): void { + const player = this.getPlayer(name); + if (player) { + player.seek(time); + } + } + + setSpeed(name: string, speed: number): void { + const player = this.getPlayer(name); + if (player) { + player.setSpeed(speed); + } + } + + setLoop(name: string, loop: boolean): void { + const player = this.getPlayer(name); + if (player) { + player.setLoop(loop); + } + } + + bindObjects( + bindingName: string, + objects: Array + ): void { + this._bindings.set(bindingName, objects.slice()); + } + + update(deltaTime: number): void { + this._players.forEach((player) => player.update(deltaTime)); + } + + isPlaying(name: string): boolean { + const player = this.getPlayer(name); + return !!player && player.isPlaying(); + } + + isPaused(name: string): boolean { + const player = this.getPlayer(name); + return !!player && player.isPaused(); + } + + hasFinished(name: string): boolean { + const player = this.getPlayer(name); + return !!player && player.hasFinished(); + } + + reachedMarker(name: string, markerName: string): boolean { + const player = this.getPlayer(name); + return !!player && player.reachedMarker(markerName); + } + + getCurrentTime(name: string): number { + const player = this.getPlayer(name); + return player ? player.getCurrentTime() : 0; + } + + getDuration(name: string): number { + const timeline = this.getTimeline(name); + return timeline ? timeline.duration || 0 : 0; + } + + getProgress(name: string): number { + const player = this.getPlayer(name); + return player ? player.getProgress() : 0; + } + + getSpeed(name: string): number { + const player = this.getPlayer(name); + return player ? player.getSpeed() : 1; + } + } + + export const getTimelineManager = ( + runtimeScene: gdjs.RuntimeScene + ): TimelineManager => { + if (!runtimeScene._timelineSequencer) { + runtimeScene._timelineSequencer = new TimelineManager(runtimeScene); + } + return runtimeScene._timelineSequencer; + }; + + gdjs.registerRuntimeScenePostEventsCallback((runtimeScene) => { + const manager = runtimeScene._timelineSequencer; + if (!manager) { + return; + } + manager.update(runtimeScene.getElapsedTime() / 1000); + }); + + gdjs.registerRuntimeSceneUnloadedCallback((runtimeScene) => { + runtimeScene._timelineSequencer = undefined; + }); + } + } +} diff --git a/Extensions/TimelineSequencer/timelinepath.ts b/Extensions/TimelineSequencer/timelinepath.ts new file mode 100644 index 000000000000..b8a07c6da83b --- /dev/null +++ b/Extensions/TimelineSequencer/timelinepath.ts @@ -0,0 +1,79 @@ +namespace gdjs { + export namespace evtTools { + export namespace timeline { + export type TimelinePoint = { x: number; y: number; z?: number }; + + export type PathSegment = { + fromKeyframeId: string; + toKeyframeId: string; + mode: 'line' | 'cubicBezier'; + cp1?: TimelinePoint; + cp2?: TimelinePoint; + }; + + export const cubicBezier = ( + p0: number, + p1: number, + p2: number, + p3: number, + t: number + ): number => { + const u = 1 - t; + return ( + u * u * u * p0 + + 3 * u * u * t * p1 + + 3 * u * t * t * p2 + + t * t * t * p3 + ); + }; + + export const evaluatePathSegment = ( + from: TimelinePoint, + to: TimelinePoint, + pathSegment: PathSegment | null | undefined, + t: number + ): TimelinePoint => { + const withZIfPresent = (point: TimelinePoint, z: number) => { + if (typeof from.z !== 'number' && typeof to.z !== 'number') { + return point; + } + + return { + ...point, + z, + }; + }; + const getPointZ = ( + point: TimelinePoint | null | undefined, + fallback: number + ) => (point && typeof point.z === 'number' ? point.z : fallback); + + if (!pathSegment || pathSegment.mode !== 'cubicBezier') { + return withZIfPresent( + { + x: gdjs.evtTools.timeline.lerp(from.x, to.x, t), + y: gdjs.evtTools.timeline.lerp(from.y, to.y, t), + }, + gdjs.evtTools.timeline.lerp(getPointZ(from, 0), getPointZ(to, 0), t) + ); + } + + const cp1 = pathSegment.cp1 || from; + const cp2 = pathSegment.cp2 || to; + return withZIfPresent( + { + x: cubicBezier(from.x, cp1.x, cp2.x, to.x, t), + y: cubicBezier(from.y, cp1.y, cp2.y, to.y, t), + }, + cubicBezier( + getPointZ(from, 0), + getPointZ(cp1, getPointZ(from, 0)), + getPointZ(cp2, getPointZ(to, 0)), + getPointZ(to, 0), + t + ) + ); + }; + } + } +} diff --git a/Extensions/TimelineSequencer/timelineplayer.ts b/Extensions/TimelineSequencer/timelineplayer.ts new file mode 100644 index 000000000000..3c96a211c30b --- /dev/null +++ b/Extensions/TimelineSequencer/timelineplayer.ts @@ -0,0 +1,850 @@ +namespace gdjs { + export namespace evtTools { + export namespace timeline { + type TargetMode = 'sceneInstance' | 'objectName' | 'runtimeBinding'; + type SelectionMode = 'first' | 'all'; + + export type TimelineTarget = { + mode?: TargetMode; + objectName?: string; + instancePersistentUuid?: string; + selection?: SelectionMode; + bindingName?: string; + }; + + export type TimelineKeyframe = { + id?: string; + time: number; + value: TimelineValue; + ease?: EaseDefinition; + curve?: EaseDefinition; + }; + + export type TimelinePropertyTrack = { + property: string; + interpolationMode?: 'continuous' | 'step' | 'hold' | 'keyframe'; + initialValue?: TimelineValue; + initialEase?: EaseDefinition; + initialCurve?: EaseDefinition; + keyframes: Array; + pathSegments?: Array; + }; + + export type TimelineTrack = { + id?: string; + type?: 'object' | 'camera' | 'layer' | 'variable' | 'marker'; + target?: TimelineTarget; + propertyTracks?: Array; + }; + + export type TimelineMarker = { + time: number; + name: string; + }; + + export type TimelineData = { + name: string; + duration: number; + loop?: boolean; + speed?: number; + tracks?: Array; + markers?: Array; + }; + + const isScalable = ( + object: gdjs.RuntimeObject + ): object is gdjs.RuntimeObject & gdjs.Scalable => + // @ts-ignore - Runtime objects expose capabilities dynamically. + !!object.setScaleX && !!object.setScaleY; + + const isOpaque = ( + object: gdjs.RuntimeObject + ): object is gdjs.RuntimeObject & gdjs.OpacityHandler => + // @ts-ignore - Runtime objects expose capabilities dynamically. + !!object.setOpacity && !!object.getOpacity; + + const clampNumber = (value: number, min: number, max: number): number => + Math.max(min, Math.min(max, value)); + + const discreteTimelineProperties = new Set([ + 'animation', + 'animationindex', + 'animationname', + ]); + const timelineFrameRate = 60; + + const isDiscreteTimelineProperty = (propertyName: string): boolean => + discreteTimelineProperties.has(propertyName.toLowerCase()); + + const getKeyframeCurve = ( + keyframe: TimelineKeyframe + ): EaseDefinition | null | undefined => + keyframe.curve !== undefined && keyframe.curve !== null + ? keyframe.curve + : keyframe.ease; + + const createImplicitInitialKeyframe = ( + propertyTrack: TimelinePropertyTrack + ): TimelineKeyframe | null => { + if ( + propertyTrack.initialValue === undefined || + propertyTrack.initialValue === null + ) { + return null; + } + + return { + id: `${propertyTrack.property}-initial`, + time: 0, + value: propertyTrack.initialValue, + ease: + propertyTrack.initialEase !== undefined + ? propertyTrack.initialEase + : isDiscreteTimelineProperty(propertyTrack.property) + ? 'hold' + : 'linear', + curve: + propertyTrack.initialCurve !== undefined + ? propertyTrack.initialCurve + : isDiscreteTimelineProperty(propertyTrack.property) + ? 'stepped' + : 'linear', + }; + }; + + const hasRuntimeMethod = ( + object: gdjs.RuntimeObject, + methodName: string + ): boolean => typeof (object as any)[methodName] === 'function'; + + const getRuntimeObjectNumber = ( + object: gdjs.RuntimeObject, + getterName: string, + fallback: number + ): number => { + const getter = (object as any)[getterName]; + if (typeof getter !== 'function') { + return fallback; + } + + const value = getter.call(object); + return typeof value === 'number' && isFinite(value) ? value : fallback; + }; + + const setRuntimeObjectNumber = ( + object: gdjs.RuntimeObject, + setterName: string, + value: number + ): void => { + if (!isFinite(value)) { + return; + } + const setter = (object as any)[setterName]; + if (typeof setter === 'function') { + setter.call(object, value); + } + }; + + const normalizeKeyframes = (propertyTrack: TimelinePropertyTrack) => { + const keyframes = propertyTrack.keyframes || []; + const keyframeByFrame = new Map(); + for (const keyframe of keyframes) { + const frame = Math.round((keyframe.time || 0) * timelineFrameRate); + keyframeByFrame.set(String(frame), { + ...keyframe, + time: frame / timelineFrameRate, + }); + } + propertyTrack.keyframes = Array.from(keyframeByFrame.values()).sort( + (a, b) => a.time - b.time + ); + }; + + export class TimelinePlayer { + private _runtimeScene: gdjs.RuntimeScene; + private _timeline: TimelineData; + private _currentTime: number = 0; + private _speed: number = 1; + private _loop: boolean = false; + private _isPlaying: boolean = false; + private _isPaused: boolean = false; + private _hasFinished: boolean = false; + private _reachedMarkers: Set = new Set(); + private _bindings: Map>; + + constructor( + runtimeScene: gdjs.RuntimeScene, + timeline: TimelineData, + bindings: Map> + ) { + this._runtimeScene = runtimeScene; + this._timeline = timeline; + this._bindings = bindings; + this._loop = !!timeline.loop; + this._speed = timeline.speed || 1; + + for (const track of timeline.tracks || []) { + for (const propertyTrack of track.propertyTracks || []) { + normalizeKeyframes(propertyTrack); + } + } + } + + play(fromTime: number = 0): void { + this._currentTime = this._clampTime(fromTime); + this._isPlaying = true; + this._isPaused = false; + this._hasFinished = false; + this._reachedMarkers.clear(); + this._apply(); + } + + pause(): void { + if (!this._isPlaying || this._hasFinished) { + return; + } + this._isPaused = true; + } + + resume(): void { + if (!this._isPlaying || this._hasFinished) { + return; + } + this._isPaused = false; + } + + stop(): void { + this._isPlaying = false; + this._isPaused = false; + this._hasFinished = true; + this._reachedMarkers.clear(); + } + + seek(time: number): void { + this._currentTime = this._clampTime(time); + this._hasFinished = false; + this._reachedMarkers.clear(); + this._apply(); + } + + update(deltaTime: number): void { + this._reachedMarkers.clear(); + if (!this._isPlaying || this._isPaused || this._hasFinished) { + return; + } + + const previousTime = this._currentTime; + this._currentTime += deltaTime * this._speed; + + const duration = Math.max(0, this._timeline.duration || 0); + if (duration <= 0) { + this._currentTime = 0; + this._hasFinished = true; + this._isPlaying = false; + } else if (this._loop) { + if (this._currentTime >= duration || this._currentTime < 0) { + this._collectMarkers(previousTime, duration); + this._currentTime = + ((this._currentTime % duration) + duration) % duration; + this._collectMarkers(0, this._currentTime); + } else { + this._collectMarkers(previousTime, this._currentTime); + } + } else { + if (this._currentTime >= duration) { + this._currentTime = duration; + this._collectMarkers(previousTime, this._currentTime); + this._hasFinished = true; + this._isPlaying = false; + } else if (this._currentTime <= 0) { + this._currentTime = 0; + this._collectMarkers(previousTime, this._currentTime); + this._hasFinished = true; + this._isPlaying = false; + } else { + this._collectMarkers(previousTime, this._currentTime); + } + } + + this._apply(); + } + + isPlaying(): boolean { + return this._isPlaying && !this._isPaused && !this._hasFinished; + } + + isPaused(): boolean { + return this._isPlaying && this._isPaused && !this._hasFinished; + } + + hasFinished(): boolean { + return this._hasFinished; + } + + reachedMarker(markerName: string): boolean { + return this._reachedMarkers.has(markerName); + } + + getCurrentTime(): number { + return this._currentTime; + } + + getDuration(): number { + return this._timeline.duration || 0; + } + + getProgress(): number { + const duration = this.getDuration(); + return duration > 0 ? this._currentTime / duration : 0; + } + + setSpeed(speed: number): void { + this._speed = speed; + } + + getSpeed(): number { + return this._speed; + } + + setLoop(loop: boolean): void { + this._loop = loop; + } + + private _clampTime(time: number): number { + return Math.max(0, Math.min(this._timeline.duration || 0, time || 0)); + } + + private _collectMarkers( + previousTime: number, + currentTime: number + ): void { + const markers = this._timeline.markers || []; + const min = Math.min(previousTime, currentTime); + const max = Math.max(previousTime, currentTime); + for (const marker of markers) { + if (marker.time > min && marker.time <= max) { + this._reachedMarkers.add(marker.name); + } + } + } + + private _findKeyframePair( + propertyTrack: TimelinePropertyTrack, + time: number + ): { + from: TimelineKeyframe; + to: TimelineKeyframe; + localT: number; + } | null { + const keyframes = propertyTrack.keyframes || []; + const implicitInitialKeyframe = + createImplicitInitialKeyframe(propertyTrack); + if (!keyframes.length) { + return implicitInitialKeyframe + ? { + from: implicitInitialKeyframe, + to: implicitInitialKeyframe, + localT: 0, + } + : null; + } + if (implicitInitialKeyframe && keyframes[0].time > 0) { + if (time <= 0) { + return { + from: implicitInitialKeyframe, + to: implicitInitialKeyframe, + localT: 0, + }; + } + + if (time < keyframes[0].time) { + return { + from: implicitInitialKeyframe, + to: keyframes[0], + localT: keyframes[0].time > 0 ? time / keyframes[0].time : 1, + }; + } + } + if (keyframes.length === 1 || time <= keyframes[0].time) { + return { + from: keyframes[0], + to: keyframes[0], + localT: 0, + }; + } + const lastKeyframe = keyframes[keyframes.length - 1]; + if (time >= lastKeyframe.time) { + return { + from: lastKeyframe, + to: lastKeyframe, + localT: 1, + }; + } + + let low = 0; + let high = keyframes.length - 2; + while (low <= high) { + const index = Math.floor((low + high) / 2); + const from = keyframes[index]; + const to = keyframes[index + 1]; + + if (time < from.time) { + high = index - 1; + continue; + } + + if (time > to.time) { + low = index + 1; + continue; + } + + const duration = to.time - from.time; + return { + from, + to, + localT: duration > 0 ? (time - from.time) / duration : 1, + }; + } + return null; + } + + private _evaluateTrack( + propertyTrack: TimelinePropertyTrack, + time: number + ): TimelineValue | null { + const pair = this._findKeyframePair(propertyTrack, time); + if (!pair) { + return null; + } + + const mode = propertyTrack.interpolationMode || 'continuous'; + if ( + pair.from === pair.to || + isDiscreteTimelineProperty(propertyTrack.property) || + mode === 'step' || + mode === 'hold' || + mode === 'keyframe' + ) { + return pair.localT >= 1 ? pair.to.value : pair.from.value; + } + + const easedT = gdjs.evtTools.timeline.evaluateEase( + getKeyframeCurve(pair.from), + pair.localT + ); + if (propertyTrack.property === 'position') { + const from = pair.from.value as TimelinePoint; + const to = pair.to.value as TimelinePoint; + const pathSegment = (propertyTrack.pathSegments || []).find( + (segment) => + segment.fromKeyframeId === pair.from.id && + segment.toKeyframeId === pair.to.id + ); + return gdjs.evtTools.timeline.evaluatePathSegment( + from, + to, + pathSegment, + easedT + ); + } + + return gdjs.evtTools.timeline.interpolateValue( + pair.from.value, + pair.to.value, + easedT, + propertyTrack.property + ); + } + + private _resolveObjects( + target: TimelineTarget | null | undefined + ): Array { + if (!target) { + return []; + } + + if (target.mode === 'runtimeBinding' && target.bindingName) { + return this._bindings.get(target.bindingName) || []; + } + + const objectName = target.objectName; + if (!objectName) { + return []; + } + const objects = this._runtimeScene.getObjects(objectName); + + if ( + target.mode === 'sceneInstance' && + target.instancePersistentUuid + ) { + const matchedObjects = objects.filter( + (object) => + object.persistentUuid === target.instancePersistentUuid + ); + if (matchedObjects.length) { + return matchedObjects; + } + } + + return target.selection === 'all' ? objects : objects.slice(0, 1); + } + + private _applyValueToObject( + object: gdjs.RuntimeObject, + propertyName: string, + value: TimelineValue + ): void { + switch (propertyName) { + case 'position': + if (value && typeof value === 'object' && !Array.isArray(value)) { + object.setPosition( + typeof value.x === 'number' ? value.x : object.getX(), + typeof value.y === 'number' ? value.y : object.getY() + ); + if (typeof value.z === 'number') { + setRuntimeObjectNumber(object, 'setZ', value.z); + } + } + break; + case 'x': + case 'X': + object.setX( + gdjs.evtTools.timeline.valueAsNumber(value, object.getX()) + ); + break; + case 'y': + case 'Y': + object.setY( + gdjs.evtTools.timeline.valueAsNumber(value, object.getY()) + ); + break; + case 'z': + case 'Z': + setRuntimeObjectNumber( + object, + 'setZ', + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getZ', 0) + ) + ); + break; + case 'angle': + case 'Angle': + case 'rotationZ': + case 'RotationZ': + object.setAngle( + gdjs.evtTools.timeline.valueAsNumber(value, object.getAngle()) + ); + break; + case 'rotationX': + case 'RotationX': + setRuntimeObjectNumber( + object, + 'setRotationX', + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getRotationX', 0) + ) + ); + break; + case 'rotationY': + case 'RotationY': + setRuntimeObjectNumber( + object, + 'setRotationY', + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getRotationY', 0) + ) + ); + break; + case 'scaleX': + case 'ScaleX': + if (isScalable(object)) { + object.setScaleX( + gdjs.evtTools.timeline.valueAsNumber( + value, + object.getScaleX() + ) + ); + } + break; + case 'scaleY': + case 'ScaleY': + if (isScalable(object)) { + object.setScaleY( + gdjs.evtTools.timeline.valueAsNumber( + value, + object.getScaleY() + ) + ); + } + break; + case 'scaleZ': + case 'ScaleZ': + setRuntimeObjectNumber( + object, + 'setScaleZ', + Math.max( + 0, + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getScaleZ', 1) + ) + ) + ); + break; + case 'scale': + case 'Scale': + if (isScalable(object)) { + if ( + value && + typeof value === 'object' && + !Array.isArray(value) + ) { + object.setScaleX( + typeof value.x === 'number' ? value.x : object.getScaleX() + ); + object.setScaleY( + typeof value.y === 'number' ? value.y : object.getScaleY() + ); + if (typeof value.z === 'number') { + setRuntimeObjectNumber(object, 'setScaleZ', value.z); + } + } else { + const scale = gdjs.evtTools.timeline.valueAsNumber( + value, + object.getScaleX() + ); + object.setScaleX(scale); + object.setScaleY(scale); + setRuntimeObjectNumber(object, 'setScaleZ', scale); + } + } + break; + case 'opacity': + case 'Opacity': + if (isOpaque(object)) { + object.setOpacity( + clampNumber( + gdjs.evtTools.timeline.valueAsNumber( + value, + object.getOpacity() + ), + 0, + 255 + ) + ); + } + break; + case 'width': + case 'Width': + setRuntimeObjectNumber( + object, + 'setWidth', + Math.max( + 0, + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getWidth', 0) + ) + ) + ); + break; + case 'height': + case 'Height': + setRuntimeObjectNumber( + object, + 'setHeight', + Math.max( + 0, + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getHeight', 0) + ) + ) + ); + break; + case 'depth': + case 'Depth': + setRuntimeObjectNumber( + object, + 'setDepth', + Math.max( + 0, + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getDepth', 0) + ) + ) + ); + break; + case 'animation': + case 'Animation': + case 'animationIndex': + case 'AnimationIndex': { + const currentAnimationIndex = hasRuntimeMethod( + object, + 'getAnimationIndex' + ) + ? getRuntimeObjectNumber(object, 'getAnimationIndex', 0) + : getRuntimeObjectNumber(object, 'getAnimation', 0); + const animationIndex = Math.max( + 0, + Math.round( + gdjs.evtTools.timeline.valueAsNumber( + value, + currentAnimationIndex + ) + ) + ); + if (hasRuntimeMethod(object, 'setAnimationIndex')) { + setRuntimeObjectNumber( + object, + 'setAnimationIndex', + animationIndex + ); + } else { + setRuntimeObjectNumber(object, 'setAnimation', animationIndex); + } + break; + } + case 'animationFrame': + case 'AnimationFrame': { + const animationFrame = Math.max( + 0, + Math.round( + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getAnimationFrame', 0) + ) + ) + ); + setRuntimeObjectNumber( + object, + 'setAnimationFrame', + animationFrame + ); + break; + } + case 'animationSpeed': + case 'AnimationSpeed': + case 'animationSpeedScale': + case 'AnimationSpeedScale': + setRuntimeObjectNumber( + object, + 'setAnimationSpeedScale', + Math.max( + 0, + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getAnimationSpeedScale', 1) + ) + ) + ); + break; + case 'fontSize': + case 'FontSize': + case 'characterSize': + case 'CharacterSize': + setRuntimeObjectNumber( + object, + 'setCharacterSize', + Math.max( + 1, + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getCharacterSize', 20) + ) + ) + ); + break; + case 'lineHeight': + case 'LineHeight': + setRuntimeObjectNumber( + object, + 'setLineHeight', + Math.max( + 0, + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getLineHeight', 1) + ) + ) + ); + break; + case 'volume': + case 'Volume': + setRuntimeObjectNumber( + object, + 'setVolume', + clampNumber( + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getVolume', 100) + ), + 0, + 100 + ) + ); + break; + case 'playbackSpeed': + case 'PlaybackSpeed': + setRuntimeObjectNumber( + object, + 'setPlaybackSpeed', + clampNumber( + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getPlaybackSpeed', 1) + ), + 0.5, + 2 + ) + ); + break; + case 'currentTime': + case 'CurrentTime': + setRuntimeObjectNumber( + object, + 'setCurrentTime', + Math.max( + 0, + gdjs.evtTools.timeline.valueAsNumber( + value, + getRuntimeObjectNumber(object, 'getCurrentTime', 0) + ) + ) + ); + break; + } + } + + private _apply(): void { + for (const track of this._timeline.tracks || []) { + if (track.type && track.type !== 'object') { + continue; + } + const objects = this._resolveObjects(track.target); + if (!objects.length) { + continue; + } + for (const propertyTrack of track.propertyTracks || []) { + const value = this._evaluateTrack( + propertyTrack, + this._currentTime + ); + if (value === null) { + continue; + } + for (const object of objects) { + this._applyValueToObject(object, propertyTrack.property, value); + } + } + } + } + } + } + } +} diff --git a/Extensions/TimelineSequencer/timelinesequencertools.ts b/Extensions/TimelineSequencer/timelinesequencertools.ts new file mode 100644 index 000000000000..233a0de9152e --- /dev/null +++ b/Extensions/TimelineSequencer/timelinesequencertools.ts @@ -0,0 +1,182 @@ +namespace gdjs { + export namespace evtTools { + export namespace timeline { + export const registerTimelineJson = ( + runtimeScene: gdjs.RuntimeScene, + timelineJson: string + ): boolean => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .registerTimelinesFromJson(timelineJson); + + export const playTimeline = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .play(timelineName); + }; + + export const playTimelineFromTime = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string, + time: number + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .play(timelineName, time); + }; + + export const pauseTimeline = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .pause(timelineName); + }; + + export const resumeTimeline = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .resume(timelineName); + }; + + export const stopTimeline = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .stop(timelineName); + }; + + export const seekTimeline = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string, + time: number + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .seek(timelineName, time); + }; + + export const setTimelineSpeed = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string, + speed: number + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .setSpeed(timelineName, speed); + }; + + export const setTimelineLoop = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string, + loop: boolean + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .setLoop(timelineName, loop); + }; + + export const bindTimelineObjectTarget = ( + runtimeScene: gdjs.RuntimeScene, + bindingName: string, + objects: Array + ): void => { + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .bindObjects(bindingName, objects); + }; + + export const isTimelinePlaying = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): boolean => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .isPlaying(timelineName); + + export const isTimelinePaused = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): boolean => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .isPaused(timelineName); + + export const hasTimelineFinished = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): boolean => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .hasFinished(timelineName); + + export const hasTimelineReachedMarker = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string, + markerName: string + ): boolean => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .reachedMarker(timelineName, markerName); + + export const timelineTimeGreaterThan = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string, + time: number + ): boolean => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .getCurrentTime(timelineName) > time; + + export const timelineProgressGreaterThan = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string, + progress: number + ): boolean => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .getProgress(timelineName) > progress; + + export const getTimelineTime = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): number => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .getCurrentTime(timelineName); + + export const getTimelineDuration = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): number => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .getDuration(timelineName); + + export const getTimelineProgress = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): number => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .getProgress(timelineName); + + export const getTimelineSpeed = ( + runtimeScene: gdjs.RuntimeScene, + timelineName: string + ): number => + gdjs.evtTools.timeline + .getTimelineManager(runtimeScene) + .getSpeed(timelineName); + } + } +} diff --git a/GDJS/GDJS/IDE/Exporter.cpp b/GDJS/GDJS/IDE/Exporter.cpp index a834c9fd5f87..313d8f7210ac 100644 --- a/GDJS/GDJS/IDE/Exporter.cpp +++ b/GDJS/GDJS/IDE/Exporter.cpp @@ -136,10 +136,16 @@ bool Exporter::ExportWholePixiProject(const ExportOptions &options) { } //...and export it - gd::SerializerElement noRuntimeGameOptions; + gd::SerializerElement runtimeGameOptions; + const bool useTransparentRuntimeBackground = + options.target == "electron" && + options.electronTransparentRuntimeBackground; + if (useTransparentRuntimeBackground) { + runtimeGameOptions.SetAttribute("transparentBackground", true); + } std::vector noInGameEditorResources; helper.ExportProjectData(fs, exportedProject, codeOutputDir + "/data.js", - noRuntimeGameOptions, false, noInGameEditorResources); + runtimeGameOptions, false, noInGameEditorResources); includesFiles.push_back(codeOutputDir + "/data.js"); helper.ExportIncludesAndLibs(includesFiles, exportDir, false); @@ -152,12 +158,15 @@ bool Exporter::ExportWholePixiProject(const ExportOptions &options) { source = gdjsRoot + "/Runtime/FacebookInstantGames/index.html"; if (!helper.ExportIndexFile(exportedProject, - source, - exportDir, - includesFiles, - usedExtensionsResult.GetUsedSourceFiles(), - /*nonRuntimeScriptsCacheBurst=*/0, - "")) { + source, + exportDir, + includesFiles, + usedExtensionsResult.GetUsedSourceFiles(), + /*nonRuntimeScriptsCacheBurst=*/0, + useTransparentRuntimeBackground + ? "gdjs.runtimeGameOptions" + : "", + useTransparentRuntimeBackground)) { gd::LogError(_("Error during export:\n") + lastError); return false; } @@ -180,7 +189,7 @@ bool Exporter::ExportWholePixiProject(const ExportOptions &options) { if (!exportProject(options.exportPath + "/app")) return false; if (!helper.ExportElectronFiles( - exportedProject, options.exportPath, usedExtensions)) + exportedProject, options.exportPath, usedExtensions, options)) return false; if (!helper.ExportBuildResourcesElectronFiles(exportedProject, diff --git a/GDJS/GDJS/IDE/ExporterHelper.cpp b/GDJS/GDJS/IDE/ExporterHelper.cpp index 0bce9fd8838e..4543f0fc587c 100644 --- a/GDJS/GDJS/IDE/ExporterHelper.cpp +++ b/GDJS/GDJS/IDE/ExporterHelper.cpp @@ -334,7 +334,8 @@ bool ExporterHelper::ExportProjectForPixiPreview( if (!ExportIndexFile(exportedProject, gdjsRoot + "/Runtime/index.html", options.exportPath, includesFiles, usedSourceFiles, options.nonRuntimeScriptsCacheBurst, - "gdjs.runtimeGameOptions")) { + "gdjs.runtimeGameOptions", + options.transparentRuntimeBackground)) { return false; } } @@ -430,6 +431,9 @@ void ExporterHelper::SerializeRuntimeGameOptions( runtimeGameOptions.AddChild("nativeMobileApp") .SetBoolValue(options.nativeMobileApp); + if (options.transparentRuntimeBackground) { + runtimeGameOptions.AddChild("transparentBackground").SetBoolValue(true); + } runtimeGameOptions.AddChild("websocketDebuggerServerAddress") .SetStringValue(options.websocketDebuggerServerAddress); runtimeGameOptions.AddChild("websocketDebuggerServerPort") @@ -740,7 +744,8 @@ bool ExporterHelper::ExportIndexFile( const std::vector &includesFiles, const std::vector &sourceFiles, unsigned int nonRuntimeScriptsCacheBurst, - gd::String additionalSpec) { + gd::String additionalSpec, + bool transparentBackground) { gd::String str = fs.ReadFile(source); // Add a reference to all files to include, as weel as the source files @@ -768,7 +773,8 @@ bool ExporterHelper::ExportIndexFile( exportDir, finalIncludesFiles, nonRuntimeScriptsCacheBurst, - additionalSpec)) + additionalSpec, + transparentBackground)) return false; // Write the index.html file @@ -1002,7 +1008,8 @@ bool ExporterHelper::ExportHtml5Files(const gd::Project &project, bool ExporterHelper::ExportElectronFiles(const gd::Project &project, gd::String exportDir, - std::set usedExtensions) { + std::set usedExtensions, + const ExportOptions &options) { gd::String jsonName = gd::Serializer::ToJSON(gd::SerializerElement(project.GetName())); gd::String jsonPackageName = @@ -1062,15 +1069,54 @@ bool ExporterHelper::ExportElectronFiles(const gd::Project &project, } { + gd::String electronAppOptions = ""; + if (options.electronDisableHardwareAcceleration) { + electronAppOptions = "app.disableHardwareAcceleration();\n"; + } + + gd::String electronBrowserWindowOptions = ""; + const auto appendElectronBrowserWindowOption = + [&electronBrowserWindowOptions](const gd::String &option) { + if (!electronBrowserWindowOptions.empty()) { + electronBrowserWindowOptions += "\n "; + } + electronBrowserWindowOptions += option; + }; + if (options.electronFramelessWindow) { + appendElectronBrowserWindowOption("frame: false,"); + } + if (options.electronTransparentWindow) { + appendElectronBrowserWindowOption("transparent: true,"); + } + if (options.electronDisableWindowShadow) { + appendElectronBrowserWindowOption("hasShadow: false,"); + } + + const gd::String electronWindowBackgroundColor = + options.electronTransparentWindow ? "'#00000000'" : "'#000000'"; + const gd::String electronAfterWindowCreation = + options.electronTransparentWindow + ? "mainWindow.setBackgroundColor('#00000000');" + : ""; + gd::String str = fs.ReadFile(gdjsRoot + "/Runtime/Electron/main.js") + .FindAndReplace("/* GDJS_ELECTRON_APP_OPTIONS */", + electronAppOptions) .FindAndReplace( "800 /*GDJS_WINDOW_WIDTH*/", gd::String::From(project.GetGameResolutionWidth())) .FindAndReplace( "600 /*GDJS_WINDOW_HEIGHT*/", gd::String::From(project.GetGameResolutionHeight())) - .FindAndReplace("'GDJS_GAME_NAME'", jsonName); + .FindAndReplace("'GDJS_GAME_NAME'", jsonName) + .FindAndReplace("'#000000' /* GDJS_ELECTRON_BACKGROUND_COLOR */", + electronWindowBackgroundColor) + .FindAndReplace( + "/* GDJS_ELECTRON_BROWSER_WINDOW_OPTIONS */", + electronBrowserWindowOptions) + .FindAndReplace("/* GDJS_ELECTRON_AFTER_WINDOW_CREATION */", + electronAfterWindowCreation); if (!fs.WriteToFile(exportDir + "/main.js", str)) { lastError = "Unable to write Electron main.js file."; @@ -1115,7 +1161,8 @@ bool ExporterHelper::CompleteIndexFile( gd::String exportDir, const std::vector &includesFiles, unsigned int nonRuntimeScriptsCacheBurst, - gd::String additionalSpec) { + gd::String additionalSpec, + bool transparentBackground) { if (additionalSpec.empty()) additionalSpec = "{}"; gd::String codeFilesIncludes; @@ -1137,7 +1184,21 @@ bool ExporterHelper::CompleteIndexFile( "\" crossorigin=\"anonymous\">\n"; } + const gd::String transparentBackgroundStyle = + transparentBackground + ? "html, body {\n" + "\t\t\tbackground: transparent;\n" + "\t\t\tbackground-color: transparent;\n" + "\t\t}\n" + "\t\tcanvas {\n" + "\t\t\tbackground: transparent;\n" + "\t\t\tbackground-color: transparent;\n" + "\t\t}\n" + : ""; + str = str.FindAndReplace("/* GDJS_CUSTOM_STYLE */", "") + .FindAndReplace("/* GDJS_TRANSPARENT_BACKGROUND_STYLE */", + transparentBackgroundStyle) .FindAndReplace("", "") .FindAndReplace("", codeFilesIncludes) .FindAndReplace("{}/*GDJS_ADDITIONAL_SPEC*/", additionalSpec); diff --git a/GDJS/GDJS/IDE/ExporterHelper.h b/GDJS/GDJS/IDE/ExporterHelper.h index 17bbb97e0ab9..6d6cb826f370 100644 --- a/GDJS/GDJS/IDE/ExporterHelper.h +++ b/GDJS/GDJS/IDE/ExporterHelper.h @@ -46,6 +46,7 @@ struct PreviewExportOptions { fullLoadingScreen(false), isDevelopmentEnvironment(false), isInGameEdition(false), + transparentRuntimeBackground(false), nonRuntimeScriptsCacheBurst(0), inAppTutorialMessageInPreview(""), inAppTutorialMessagePositionInPreview(""), @@ -234,6 +235,16 @@ struct PreviewExportOptions { return *this; } + /** + * \brief Set if the preview should render the game with a transparent + * background. This is useful when the Electron preview window is itself + * created with native transparency. + */ + PreviewExportOptions &SetTransparentRuntimeBackground(bool enable) { + transparentRuntimeBackground = enable; + return *this; + } + /** * \brief Set the JSON string representation of the in-game editor settings. */ @@ -398,6 +409,7 @@ struct PreviewExportOptions { bool fullLoadingScreen; bool isDevelopmentEnvironment; bool isInGameEdition; + bool transparentRuntimeBackground; gd::String editorId; gd::String editorCamera3DCameraMode; gd::String inGameEditorSettingsJson; @@ -432,7 +444,12 @@ struct ExportOptions { exportPath(exportPath_), target(""), fallbackAuthorId(""), - fallbackAuthorUsername("") {}; + fallbackAuthorUsername(""), + electronTransparentWindow(false), + electronFramelessWindow(false), + electronDisableWindowShadow(false), + electronTransparentRuntimeBackground(false), + electronDisableHardwareAcceleration(false) {}; /** * \brief Set the fallback author info (if info not present in project @@ -456,11 +473,61 @@ struct ExportOptions { return *this; } + /** + * \brief Set whether Electron exports should create a transparent native + * window. + */ + ExportOptions &SetElectronTransparentWindow(bool enable) { + electronTransparentWindow = enable; + return *this; + } + + /** + * \brief Set whether Electron exports should create a frameless native + * window. + */ + ExportOptions &SetElectronFramelessWindow(bool enable) { + electronFramelessWindow = enable; + return *this; + } + + /** + * \brief Set whether Electron exports should disable the native window + * shadow. + */ + ExportOptions &SetElectronDisableWindowShadow(bool enable) { + electronDisableWindowShadow = enable; + return *this; + } + + /** + * \brief Set whether Electron exports should render the GDJS background with + * transparency. + */ + ExportOptions &SetElectronTransparentRuntimeBackground(bool enable) { + electronTransparentRuntimeBackground = enable; + return *this; + } + + /** + * \brief Set whether Electron exports should disable hardware acceleration at + * application startup. + */ + ExportOptions &SetElectronDisableHardwareAcceleration(bool enable) { + electronDisableHardwareAcceleration = enable; + return *this; + } + gd::Project &project; gd::String exportPath; gd::String target; gd::String fallbackAuthorUsername; gd::String fallbackAuthorId; + bool electronTransparentWindow; + bool electronFramelessWindow; + bool electronDisableWindowShadow; + bool electronTransparentRuntimeBackground; + bool electronDisableHardwareAcceleration; }; /** @@ -622,7 +689,8 @@ class ExporterHelper { const std::vector &includesFiles, const std::vector &sourceFiles, unsigned int nonRuntimeScriptsCacheBurst, - gd::String additionalSpec = ""); + gd::String additionalSpec = "", + bool transparentBackground = false); /** * \brief Replace the annotations in a index.html file by the specified @@ -644,7 +712,8 @@ class ExporterHelper { gd::String exportDir, const std::vector &includesFiles, unsigned int nonRuntimeScriptsCacheBurst, - gd::String additionalSpec); + gd::String additionalSpec, + bool transparentBackground = false); /** * \brief Generates a WebManifest, a metadata file that allow to make the @@ -675,7 +744,8 @@ class ExporterHelper { */ bool ExportElectronFiles(const gd::Project &project, gd::String exportDir, - std::set usedExtensions); + std::set usedExtensions, + const ExportOptions &options); /** * \brief Generate the Build Resources files for Electron (mainly for the diff --git a/GDJS/Runtime/Electron/main.js b/GDJS/Runtime/Electron/main.js index ea1741789cf0..15c28365819e 100644 --- a/GDJS/Runtime/Electron/main.js +++ b/GDJS/Runtime/Electron/main.js @@ -8,6 +8,8 @@ const { app, BrowserWindow, shell, Menu } = require('electron'); // Initialize `@electron/remote` module require('@electron/remote/main').initialize(); +/* GDJS_ELECTRON_APP_OPTIONS */ + // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. let mainWindow = null; @@ -21,7 +23,8 @@ function createWindow() { height: 600 /*GDJS_WINDOW_HEIGHT*/, useContentSize: true, title: 'GDJS_GAME_NAME', - backgroundColor: '#000000', + backgroundColor: '#000000' /* GDJS_ELECTRON_BACKGROUND_COLOR */, + /* GDJS_ELECTRON_BROWSER_WINDOW_OPTIONS */ webPreferences: { // Allow Node.js API access in renderer process, as long // as we've not removed dependency on it and on "@electron/remote". @@ -31,6 +34,8 @@ function createWindow() { }, }); + /* GDJS_ELECTRON_AFTER_WINDOW_CREATION */ + // Enable `@electron/remote` module for renderer process require('@electron/remote/main').enable(mainWindow.webContents); diff --git a/GDJS/Runtime/index.html b/GDJS/Runtime/index.html index 01a50212924d..a02d0ead1a1b 100644 --- a/GDJS/Runtime/index.html +++ b/GDJS/Runtime/index.html @@ -23,6 +23,8 @@ overflow: hidden; } + /* GDJS_TRANSPARENT_BACKGROUND_STYLE */ + /* GDJS_CUSTOM_STYLE */ diff --git a/GDJS/Runtime/pixi-renderers/runtimegame-pixi-renderer.ts b/GDJS/Runtime/pixi-renderers/runtimegame-pixi-renderer.ts index 7eefac2bb4de..3aba4123c0bf 100644 --- a/GDJS/Runtime/pixi-renderers/runtimegame-pixi-renderer.ts +++ b/GDJS/Runtime/pixi-renderers/runtimegame-pixi-renderer.ts @@ -79,6 +79,18 @@ namespace gdjs { this._setupOrientation(); } + isTransparentBackgroundEnabled(): boolean { + return !!this._game.getAdditionalOptions().transparentBackground; + } + + private _setTransparentBackgroundStyle( + element: HTMLElement | null | undefined + ): void { + if (!element || !element.style) return; + element.style.background = 'transparent'; + element.style.backgroundColor = 'transparent'; + } + /** * Create the canvas on which the game will be rendered, inside the specified DOM element, and * setup the rendering of the game. @@ -90,6 +102,12 @@ namespace gdjs { this._throwIfDisposed(); const gameCanvas = document.createElement('canvas'); + if (this.isTransparentBackgroundEnabled()) { + this._setTransparentBackgroundStyle(document.documentElement); + this._setTransparentBackgroundStyle(document.body); + this._setTransparentBackgroundStyle(parentElement); + this._setTransparentBackgroundStyle(gameCanvas); + } parentElement.appendChild(gameCanvas); this.initializeRenderers(gameCanvas); @@ -103,10 +121,12 @@ namespace gdjs { */ initializeRenderers(gameCanvas: HTMLCanvasElement): void { this._throwIfDisposed(); + const transparentBackground = this.isTransparentBackgroundEnabled(); if (typeof THREE !== 'undefined') { this._threeRenderer = new THREE.WebGLRenderer({ canvas: gameCanvas, + alpha: transparentBackground, antialias: this._game.getAntialiasingMode() !== 'none' && (this._game.isAntialisingEnabledOnMobile() || @@ -148,9 +168,16 @@ namespace gdjs { view: gameCanvas, preserveDrawingBuffer: true, antialias: false, + backgroundAlpha: transparentBackground ? 0 : 1, + backgroundColor: 0, }) as PIXI.Renderer; } + if (transparentBackground) { + this._pixiRenderer.background.alpha = 0; + this._pixiRenderer.background.color = 0; + } + // Deactivating accessibility support in PixiJS renderer, as we want to be in control of this. // See https://github.com/pixijs/pixijs/issues/5111#issuecomment-420047824 this._pixiRenderer.plugins.accessibility.destroy(); @@ -166,6 +193,9 @@ namespace gdjs { this._gameCanvas = gameCanvas; gameCanvas.style.position = 'absolute'; + if (this.isTransparentBackgroundEnabled()) { + this._setTransparentBackgroundStyle(gameCanvas); + } // Ensure that the canvas has the focus. gameCanvas.tabIndex = 1; @@ -180,6 +210,9 @@ namespace gdjs { domElementsContainer.style.overflow = 'hidden'; // Never show anything outside the container. domElementsContainer.style.outline = 'none'; // No selection/focus ring on this container. domElementsContainer.style.pointerEvents = 'none'; // Clicks go through the container. + if (this.isTransparentBackgroundEnabled()) { + this._setTransparentBackgroundStyle(domElementsContainer); + } // The container should *never* scroll. // Elements are put inside with the same coordinates (with a scaling factor) diff --git a/GDJS/Runtime/pixi-renderers/runtimescene-pixi-renderer.ts b/GDJS/Runtime/pixi-renderers/runtimescene-pixi-renderer.ts index c2ac783f6a44..b8599a574a1f 100644 --- a/GDJS/Runtime/pixi-renderers/runtimescene-pixi-renderer.ts +++ b/GDJS/Runtime/pixi-renderers/runtimescene-pixi-renderer.ts @@ -70,6 +70,8 @@ namespace gdjs { if (!pixiRenderer) return; const threeRenderer = this._threeRenderer; + const transparentBackground = + runtimeGameRenderer.isTransparentBackgroundEnabled(); // If we are in VR, we cannot render like this: we must use the special VR // rendering method to not display a black screen. @@ -134,9 +136,14 @@ namespace gdjs { if (isFirstRender) { // Render the background color. - pixiRenderer.background.color = - this._runtimeScene.getBackgroundColor(); - pixiRenderer.background.alpha = 1; + if (transparentBackground) { + pixiRenderer.background.color = 0; + pixiRenderer.background.alpha = 0; + } else { + pixiRenderer.background.color = + this._runtimeScene.getBackgroundColor(); + pixiRenderer.background.alpha = 1; + } if (this._runtimeScene.getClearCanvas()) pixiRenderer.clear(); isFirstRender = false; @@ -210,18 +217,25 @@ namespace gdjs { if (isFirstRender) { // Render the background color. threeRenderer.setClearColor( - this._runtimeScene.getBackgroundColor() + this._runtimeScene.getBackgroundColor(), + transparentBackground ? 0 : 1 ); threeRenderer.resetState(); if (this._runtimeScene.getClearCanvas()) threeRenderer.clear(); - if (!this._backgroundColor) { - this._backgroundColor = new THREE.Color(); - } - this._backgroundColor.set( - this._runtimeScene.getBackgroundColor() - ); - if (!threeScene.background) { - threeScene.background = this._backgroundColor; + if (transparentBackground) { + if (threeScene.background === this._backgroundColor) { + threeScene.background = null; + } + } else { + if (!this._backgroundColor) { + this._backgroundColor = new THREE.Color(); + } + this._backgroundColor.set( + this._runtimeScene.getBackgroundColor() + ); + if (!threeScene.background) { + threeScene.background = this._backgroundColor; + } } isFirstRender = false; @@ -284,7 +298,14 @@ namespace gdjs { // Render all the layers then. // TODO: replace by a loop like in 3D? - pixiRenderer.background.color = this._runtimeScene.getBackgroundColor(); + if (transparentBackground) { + pixiRenderer.background.color = 0; + pixiRenderer.background.alpha = 0; + } else { + pixiRenderer.background.color = + this._runtimeScene.getBackgroundColor(); + pixiRenderer.background.alpha = 1; + } pixiRenderer.render(this._pixiContainer, { clear: this._runtimeScene.getClearCanvas(), }); @@ -332,6 +353,8 @@ namespace gdjs { // VR rendering relies on ThreeJS if (!threeRenderer) throw new Error('Cannot render a scene with no 3D elements in VR!'); + const transparentBackground = + runtimeGameRenderer.isTransparentBackgroundEnabled(); // Render each layer one by one. let isFirstRender = true; @@ -354,11 +377,14 @@ namespace gdjs { if (isFirstRender) { // Render the background color. - threeRenderer.setClearColor(this._runtimeScene.getBackgroundColor()); - if (this._runtimeScene.getClearCanvas()) threeRenderer.clear(); - threeScene.background = new THREE.Color( - this._runtimeScene.getBackgroundColor() + threeRenderer.setClearColor( + this._runtimeScene.getBackgroundColor(), + transparentBackground ? 0 : 1 ); + if (this._runtimeScene.getClearCanvas()) threeRenderer.clear(); + threeScene.background = transparentBackground + ? null + : new THREE.Color(this._runtimeScene.getBackgroundColor()); isFirstRender = false; } else { diff --git a/GDJS/Runtime/runtimegame.ts b/GDJS/Runtime/runtimegame.ts index af894408557d..fdba5fc584a8 100644 --- a/GDJS/Runtime/runtimegame.ts +++ b/GDJS/Runtime/runtimegame.ts @@ -100,6 +100,9 @@ namespace gdjs { /** if true, force fullscreen. */ forceFullscreen?: boolean; + /** if true, render the game background with transparency. */ + transparentBackground?: boolean; + /** if true, game is run as a preview launched from an editor. */ isPreview?: boolean; diff --git a/GDJS/scripts/lib/runtime-files-list.js b/GDJS/scripts/lib/runtime-files-list.js index fde4cbaf0b6a..2fd3ff023db5 100644 --- a/GDJS/scripts/lib/runtime-files-list.js +++ b/GDJS/scripts/lib/runtime-files-list.js @@ -63,6 +63,8 @@ const untransformedPaths = [ 'Extensions/TileMap/helper/TileMapHelper.js', 'Extensions/Spine/spine-pixi-v7/spine-pixi-v7-pre.js', 'Extensions/Spine/spine-pixi-v7/spine-pixi-v7.js', + 'Extensions/Spine43Object/spine-pixi-v7.js', + 'Extensions/Spine43Object/spine43-gdevelop-runtime.js', ].map((untransformedPath) => path.resolve(gdevelopRootPath, untransformedPath)); /** diff --git a/GDJS/tests/karma.conf.js b/GDJS/tests/karma.conf.js index 2387442c6221..08b464db1117 100644 --- a/GDJS/tests/karma.conf.js +++ b/GDJS/tests/karma.conf.js @@ -158,6 +158,12 @@ module.exports = function (config) { './newIDE/app/resources/GDJS/Runtime/Extensions/TweenBehavior/TweenManager.js', './newIDE/app/resources/GDJS/Runtime/Extensions/TweenBehavior/tweentools.js', './newIDE/app/resources/GDJS/Runtime/Extensions/TweenBehavior/tweenruntimebehavior.js', + './newIDE/app/resources/GDJS/Runtime/Extensions/TimelineSequencer/timelineease.js', + './newIDE/app/resources/GDJS/Runtime/Extensions/TimelineSequencer/timelineinterpolation.js', + './newIDE/app/resources/GDJS/Runtime/Extensions/TimelineSequencer/timelinepath.js', + './newIDE/app/resources/GDJS/Runtime/Extensions/TimelineSequencer/timelineplayer.js', + './newIDE/app/resources/GDJS/Runtime/Extensions/TimelineSequencer/timelinemanager.js', + './newIDE/app/resources/GDJS/Runtime/Extensions/TimelineSequencer/timelinesequencertools.js', './newIDE/app/resources/GDJS/Runtime/Extensions/Firebase/A_firebasejs/*.js', './newIDE/app/resources/GDJS/Runtime/Extensions/Firebase/B_firebasetools/*.js', './newIDE/app/resources/GDJS/Runtime/Extensions/Effects/outline-pixi-filter.js', diff --git a/GDevelop.js/Bindings/Bindings.idl b/GDevelop.js/Bindings/Bindings.idl index 1fead03e43de..736ae5fe02e1 100644 --- a/GDevelop.js/Bindings/Bindings.idl +++ b/GDevelop.js/Bindings/Bindings.idl @@ -4385,6 +4385,7 @@ interface PreviewExportOptions { [Ref] PreviewExportOptions SetFullLoadingScreen(boolean enable); [Ref] PreviewExportOptions SetIsDevelopmentEnvironment(boolean enable); [Ref] PreviewExportOptions SetIsInGameEdition(boolean enable); + [Ref] PreviewExportOptions SetTransparentRuntimeBackground(boolean enable); [Ref] PreviewExportOptions SetInGameEditorSettingsJson([Const] DOMString inGameEditorSettingsJson); [Ref] PreviewExportOptions SetEditorId([Const] DOMString editorId); [Ref] PreviewExportOptions SetEditorCameraState3D( @@ -4412,6 +4413,11 @@ interface ExportOptions { void ExportOptions([Ref] Project project, [Const] DOMString outputPath); [Ref] ExportOptions SetFallbackAuthor([Const] DOMString id, [Const] DOMString username); [Ref] ExportOptions SetTarget([Const] DOMString target); + [Ref] ExportOptions SetElectronTransparentWindow(boolean enable); + [Ref] ExportOptions SetElectronFramelessWindow(boolean enable); + [Ref] ExportOptions SetElectronDisableWindowShadow(boolean enable); + [Ref] ExportOptions SetElectronTransparentRuntimeBackground(boolean enable); + [Ref] ExportOptions SetElectronDisableHardwareAcceleration(boolean enable); }; [Prefix="gdjs::"] diff --git a/GDevelop.js/types.d.ts b/GDevelop.js/types.d.ts index 001dbf6db90c..cefa1a1a66e4 100644 --- a/GDevelop.js/types.d.ts +++ b/GDevelop.js/types.d.ts @@ -3264,6 +3264,7 @@ export class PreviewExportOptions extends EmscriptenObject { setFullLoadingScreen(enable: boolean): PreviewExportOptions; setIsDevelopmentEnvironment(enable: boolean): PreviewExportOptions; setIsInGameEdition(enable: boolean): PreviewExportOptions; + setTransparentRuntimeBackground(enable: boolean): PreviewExportOptions; setInGameEditorSettingsJson(inGameEditorSettingsJson: string): PreviewExportOptions; setEditorId(editorId: string): PreviewExportOptions; setEditorCameraState3D(cameraMode: string, positionX: number, positionY: number, positionZ: number, rotationAngle: number, elevationAngle: number, distance: number): PreviewExportOptions; @@ -3283,6 +3284,11 @@ export class ExportOptions extends EmscriptenObject { constructor(project: Project, outputPath: string); setFallbackAuthor(id: string, username: string): ExportOptions; setTarget(target: string): ExportOptions; + setElectronTransparentWindow(enable: boolean): ExportOptions; + setElectronFramelessWindow(enable: boolean): ExportOptions; + setElectronDisableWindowShadow(enable: boolean): ExportOptions; + setElectronTransparentRuntimeBackground(enable: boolean): ExportOptions; + setElectronDisableHardwareAcceleration(enable: boolean): ExportOptions; } export class Exporter extends EmscriptenObject { diff --git a/GDevelop.js/types/gdexportoptions.js b/GDevelop.js/types/gdexportoptions.js index 473ebb826341..5c8b2751d38f 100644 --- a/GDevelop.js/types/gdexportoptions.js +++ b/GDevelop.js/types/gdexportoptions.js @@ -3,6 +3,11 @@ declare class gdExportOptions { constructor(project: gdProject, outputPath: string): void; setFallbackAuthor(id: string, username: string): gdExportOptions; setTarget(target: string): gdExportOptions; + setElectronTransparentWindow(enable: boolean): gdExportOptions; + setElectronFramelessWindow(enable: boolean): gdExportOptions; + setElectronDisableWindowShadow(enable: boolean): gdExportOptions; + setElectronTransparentRuntimeBackground(enable: boolean): gdExportOptions; + setElectronDisableHardwareAcceleration(enable: boolean): gdExportOptions; delete(): void; ptr: number; -}; \ No newline at end of file +}; diff --git a/GDevelop.js/types/gdpreviewexportoptions.js b/GDevelop.js/types/gdpreviewexportoptions.js index 5cd6d5a86e26..8197155be5cc 100644 --- a/GDevelop.js/types/gdpreviewexportoptions.js +++ b/GDevelop.js/types/gdpreviewexportoptions.js @@ -20,6 +20,7 @@ declare class gdPreviewExportOptions { setFullLoadingScreen(enable: boolean): gdPreviewExportOptions; setIsDevelopmentEnvironment(enable: boolean): gdPreviewExportOptions; setIsInGameEdition(enable: boolean): gdPreviewExportOptions; + setTransparentRuntimeBackground(enable: boolean): gdPreviewExportOptions; setInGameEditorSettingsJson(inGameEditorSettingsJson: string): gdPreviewExportOptions; setEditorId(editorId: string): gdPreviewExportOptions; setEditorCameraState3D(cameraMode: string, positionX: number, positionY: number, positionZ: number, rotationAngle: number, elevationAngle: number, distance: number): gdPreviewExportOptions; @@ -35,4 +36,4 @@ declare class gdPreviewExportOptions { addScreenshotCapture(delayTimeInSeconds: number, signedUrl: string, publicUrl: string): gdPreviewExportOptions; delete(): void; ptr: number; -}; \ No newline at end of file +}; diff --git a/newIDE/app/package.json b/newIDE/app/package.json index 261f19827d35..e0a22789e3b1 100644 --- a/newIDE/app/package.json +++ b/newIDE/app/package.json @@ -125,6 +125,7 @@ "make-service-worker": "cd scripts && node make-service-worker.js", "start": "npm run import-resources && concurrently \"react-app-rewired start\" \"node scripts/watch-serve-GDJS-runtime.js\" -n \"editor,game engine\" --kill-others", "electron-app": "cd ../electron-app && npm run start", + "electron-app-devtools": "cd ../electron-app && npm run start -- --dev-tools", "build": "npm run import-resources && react-app-rewired build", "format": "prettier --write \"src/!(locales)/**/*.js\"", "check-format": "prettier --list-different \"src/!(locales)/**/*.js\"", diff --git a/newIDE/app/scripts/extract-extensions-document.js b/newIDE/app/scripts/extract-extensions-document.js index 8d02e85c58b0..4f8952fe608a 100644 --- a/newIDE/app/scripts/extract-extensions-document.js +++ b/newIDE/app/scripts/extract-extensions-document.js @@ -3,6 +3,7 @@ * Launch this script to generate a list (in markdown format) of all custom extensions. */ +// @ts-ignore - libGD.js is an Emscripten-generated file downloaded at install time. const initializeGDevelopJs = require('../public/libGD.js'); const fs = require('fs').promises; const { default: axios } = require('axios'); diff --git a/newIDE/app/scripts/extract-reference-document.js b/newIDE/app/scripts/extract-reference-document.js index 84aa60ccce5c..8e7c1149c1ca 100644 --- a/newIDE/app/scripts/extract-reference-document.js +++ b/newIDE/app/scripts/extract-reference-document.js @@ -2,6 +2,7 @@ /** * Launch this script to generate a reference of all expressions supported by GDevelop. */ +// @ts-ignore - libGD.js is an Emscripten-generated file downloaded at install time. const initializeGDevelopJs = require('../public/libGD.js'); const { mapVector } = require('./lib/MapFor'); const makeExtensionsLoader = require('./lib/LocalJsExtensionsLoader'); @@ -82,9 +83,8 @@ const generateAllExtensionReferences = gd => { const platformExtensions = gd.JsPlatform.get().getAllPlatformExtensions(); /** @type {Array} */ - const extensionReferences = mapVector( - platformExtensions, - (platformExtension) => generateExtensionReference({ + const extensionReferences = mapVector(platformExtensions, platformExtension => + generateExtensionReference({ platform: gd.JsPlatform.get(), extension: platformExtension, eventsFunctionsExtension: null, diff --git a/newIDE/app/scripts/import-GDJS-Runtime.js b/newIDE/app/scripts/import-GDJS-Runtime.js index 5154afe45253..9d7c6579352e 100644 --- a/newIDE/app/scripts/import-GDJS-Runtime.js +++ b/newIDE/app/scripts/import-GDJS-Runtime.js @@ -27,7 +27,7 @@ if (!args['skip-clean']) { // Build GDJS runtime (and extensions). destinationPaths.forEach(destinationPath => { const outPath = path.join(destinationPath, 'Runtime'); - const output = shell.exec(`node scripts/build.js --out ${outPath}`, { + const output = shell.exec(`node scripts/build.js --out "${outPath}"`, { cwd: path.join(gdevelopRootPath, 'GDJS'), }); if (output.code !== 0) { diff --git a/newIDE/app/scripts/import-libGD.js b/newIDE/app/scripts/import-libGD.js index 2accaaeac2f9..7c348791bc81 100644 --- a/newIDE/app/scripts/import-libGD.js +++ b/newIDE/app/scripts/import-libGD.js @@ -1,6 +1,7 @@ const shell = require('shelljs'); const { downloadLocalFile } = require('./lib/DownloadLocalFile'); const path = require('path'); +const fs = require('fs'); const sourceDirectory = '../../../Binaries/embuild/GDevelop.js'; const destinationTestDirectory = '../node_modules/libGD.js-for-tests-only'; @@ -14,6 +15,53 @@ if (shell.mkdir('-p', destinationTestDirectory).stderr) { shell.echo('❌ Error while creating node_modules folder for libGD.js'); } +const hasUsableExistingLibGdJs = () => { + if ( + !shell.test('-f', '../public/libGD.js') || + !shell.test('-f', '../public/libGD.wasm') + ) { + return false; + } + + try { + if ( + fs.statSync('../public/libGD.js').size < 1000000 || + fs.statSync('../public/libGD.wasm').size < 1000000 + ) { + return false; + } + } catch (error) { + return false; + } + + const syntaxCheck = shell.exec('node --check ../public/libGD.js', { + silent: true, + }); + return !syntaxCheck.stderr && !syntaxCheck.code; +}; + +const copyExistingLibGdJsToTests = () => { + if ( + !shell.cp('../public/libGD.js', destinationTestDirectory + '/index.js') + .stderr && + !shell.cp( + '../public/libGD.wasm', + destinationTestDirectory + '/libGD.wasm' + ).stderr + ) { + shell.echo('✅ Reused existing libGD.js and copied it to node_modules'); + return true; + } + + shell.echo('❌ Error while copying existing libGD.js to node_modules folder'); + return false; +}; + +if (!process.env.REQUIRES_EXACT_LIBGD_JS_VERSION && hasUsableExistingLibGdJs()) { + shell.echo('ℹ️ Existing public/libGD.js is valid - skipping download.'); + shell.exit(copyExistingLibGdJsToTests() ? 0 : 1); +} + if (shell.test('-f', path.join(sourceDirectory, 'libGD.js'))) { shell.echo( 'ℹ️ Copying libGD.js and associated files built locally to newIDE...' @@ -47,12 +95,16 @@ if (shell.test('-f', path.join(sourceDirectory, 'libGD.js'))) { } let branch = (branchShellString.stdout || '').trim(); - if (branch === 'HEAD') { + if (branch === 'HEAD' || !branch) { // We're in detached HEAD. Try to read the branch from the CI environment variables. if (process.env.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH) { branch = process.env.APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH; } else if (process.env.APPVEYOR_REPO_BRANCH) { branch = process.env.APPVEYOR_REPO_BRANCH; + } else { + branch = + getRemoteBranchContainingGitRef(gitRef) || + (/^HEAD~\d+$/.test(gitRef) ? 'master' : null); } } @@ -66,6 +118,41 @@ if (shell.test('-f', path.join(sourceDirectory, 'libGD.js'))) { return branch; }; + const getRemoteBranchContainingGitRef = gitRef => { + const hashShellString = shell.exec(`git rev-parse "${gitRef}"`, { + silent: true, + }); + const hash = (hashShellString.stdout || '').trim(); + if (hashShellString.stderr || hashShellString.code || !hash) { + return null; + } + + const remoteBranchesShellString = shell.exec( + `git branch -r --contains "${hash}"`, + { + silent: true, + } + ); + if (remoteBranchesShellString.stderr || remoteBranchesShellString.code) { + return null; + } + + const remoteBranches = (remoteBranchesShellString.stdout || '') + .split('\n') + .map(branch => branch.trim()) + .filter(Boolean) + .filter(branch => !branch.includes(' -> ')); + const remoteBranch = + remoteBranches.find(branch => branch.endsWith('/master')) || + remoteBranches.find(branch => branch.endsWith('/main')) || + remoteBranches[0]; + if (!remoteBranch) { + return null; + } + + return remoteBranch.replace(/^[^/]+\//, ''); + }; + // Try to download libGD.js from a specific commit on the current branch const downloadCommitLibGdJs = (branch, gitRef) => new Promise((resolve, reject) => { @@ -107,7 +194,21 @@ if (shell.test('-f', path.join(sourceDirectory, 'libGD.js'))) { downloadLocalFile(baseUrl + '/libGD.js', '../public/libGD.js'), downloadLocalFile(baseUrl + '/libGD.wasm', '../public/libGD.wasm'), ]).then( - responses => {}, + responses => { + const syntaxCheck = shell.exec('node --check ../public/libGD.js', { + silent: true, + }); + if (syntaxCheck.stderr || syntaxCheck.code) { + shell.echo( + `⚠️ Downloaded libGD.js from ${baseUrl} failed the JavaScript syntax check.` + ); + throw new Error( + syntaxCheck.stderr || + syntaxCheck.stdout || + 'Downloaded libGD.js failed the JavaScript syntax check.' + ); + } + }, error => { if (error.statusCode === 403) { shell.echo( diff --git a/newIDE/app/scripts/lib/DownloadLocalFile.js b/newIDE/app/scripts/lib/DownloadLocalFile.js index f8a86bd0cf3c..0de15d64dd96 100644 --- a/newIDE/app/scripts/lib/DownloadLocalFile.js +++ b/newIDE/app/scripts/lib/DownloadLocalFile.js @@ -8,7 +8,12 @@ const {default: axios} = require('axios'); * @returns {Promise} */ const downloadLocalFile = async (url, outputPath) => { - const writer = fs.createWriteStream(outputPath); + const temporaryOutputPath = outputPath + '.download'; + if (fs.existsSync(temporaryOutputPath)) { + fs.unlinkSync(temporaryOutputPath); + } + + const writer = fs.createWriteStream(temporaryOutputPath); const response = await axios.get(url, { responseType: 'stream', }); @@ -23,6 +28,7 @@ const downloadLocalFile = async (url, outputPath) => { }); writer.on('close', () => { if (!error) { + fs.renameSync(temporaryOutputPath, outputPath); resolve(); } diff --git a/newIDE/app/src/AIEditorBridge/index.js b/newIDE/app/src/AIEditorBridge/index.js new file mode 100644 index 000000000000..e8f8f93f9c44 --- /dev/null +++ b/newIDE/app/src/AIEditorBridge/index.js @@ -0,0 +1,1869 @@ +// @flow +import * as React from 'react'; +import { + getAllEditorTabs, + getCurrentTabForPane, + type EditorTab, + type EditorTabsState, +} from '../MainFrame/EditorTabs/EditorTabsHandler'; +import { SceneEditorContainer } from '../MainFrame/EditorContainers/SceneEditorContainer'; +import { + serializeToJSObject, + unserializeFromJSObject, +} from '../Utils/Serializer'; +import { type FileMetadata } from '../ProjectsStorage'; +import { type UnsavedChanges } from '../MainFrame/UnsavedChangesContext'; +import { + type LaunchPreviewOptions, + type HotReloaderLog, +} from '../ExportAndShare/PreviewLauncher.flow'; +import { + createNewResource, + type ResourceKind, +} from '../ResourcesList/ResourceSource'; +import { applyResourceDefaults } from '../ResourcesList/ResourceUtils'; + +const gd: libGDevelop = global.gd; +const BRIDGE_PROTOCOL_VERSION = 1; +const DEFAULT_BRIDGE_URL = 'ws://127.0.0.1:41677'; + +type PreviewBridgeState = {| + hasNonEditionPreviewsRunning: boolean, + nonEditionPreviewsCount: number, + gameHotReloadLogs: Array, + editorHotReloadLogs: Array, + editorUncaughtError: Error | null, +|}; + +type Props = {| + project: ?gdProject, + currentFileMetadata: ?FileMetadata, + editorTabs: EditorTabsState, + hasUnsavedChanges: boolean, + unsavedChanges: UnsavedChanges, + previewState: PreviewBridgeState, + onSceneEventsModifiedOutsideEditor: ({ + scene: gdLayout, + newOrChangedAiGeneratedEventIds: Set, + }) => void, + onInstancesModifiedOutsideEditor: ({ scene: gdLayout }) => void, + onObjectsModifiedOutsideEditor: ({ + scene: gdLayout, + isNewObjectTypeUsed: boolean, + }) => void, + onNewResourcesAdded: () => void, + onSave: (options?: {| + skipNewVersionWarning: boolean, + |}) => Promise, + onLaunchPreview: (options: LaunchPreviewOptions) => Promise, +|}; + +type BridgeCall = {| + type: 'call', + id: string, + method: string, + params?: { [string]: any }, +|}; + +type BridgeSocket = WebSocket & { + _gdevelopMcpBridgeIsOpen?: boolean, + ... +}; + +const getBridgeUrl = (): string | null => { + if (typeof window === 'undefined' || !window.WebSocket) return null; + + const searchParams = new URLSearchParams(window.location.search); + const bridgeMode = searchParams.get('gdevelopMcpBridge'); + if (bridgeMode === '0' || bridgeMode === 'false') return null; + + const shouldUseDefaultBridge = bridgeMode === '1' || bridgeMode === 'true'; + const explicitUrl = searchParams.get('gdevelopMcpBridgeUrl'); + if (!explicitUrl && !shouldUseDefaultBridge) return null; + + const token = searchParams.get('gdevelopMcpBridgeToken'); + const url = explicitUrl || DEFAULT_BRIDGE_URL; + if (!token) return url; + + const separator = url.indexOf('?') === -1 ? '?' : '&'; + return `${url}${separator}token=${encodeURIComponent(token)}`; +}; + +const safeCall = (callback: () => T, fallback: T): T => { + try { + return callback(); + } catch (error) { + return fallback; + } +}; + +const summarizeObjectsContainer = (objectsContainer: gdObjectsContainer) => ({ + objectCount: objectsContainer.getObjectsCount(), +}); + +const summarizeLayout = (layout: gdLayout) => ({ + name: layout.getName(), + objectCount: layout.getObjects().getObjectsCount(), + instanceCount: layout.getInitialInstances().getInstancesCount(), + eventCount: layout.getEvents().getEventsCount(), +}); + +const summarizeProject = (project: ?gdProject) => { + if (!project) { + return { + hasProject: false, + }; + } + + const layouts = []; + for (let index = 0; index < project.getLayoutsCount(); index++) { + layouts.push(summarizeLayout(project.getLayoutAt(index))); + } + + const resourceNames = project + .getResourcesManager() + .getAllResourceNames() + .toJSArray(); + + return { + hasProject: true, + name: project.getName(), + projectUuid: project.getProjectUuid(), + firstLayout: project.getFirstLayout(), + gameResolutionWidth: project.getGameResolutionWidth(), + gameResolutionHeight: project.getGameResolutionHeight(), + layoutCount: project.getLayoutsCount(), + globalObjects: summarizeObjectsContainer(project.getObjects()), + resourceCount: resourceNames.length, + resources: resourceNames.slice(0, 50), + layouts, + }; +}; + +const summarizeEditorTab = (tab: EditorTab, paneIdentifier: string) => ({ + key: tab.key, + kind: tab.kind, + label: tab.label || '', + projectItemName: tab.projectItemName, + paneIdentifier, + closable: tab.closable, + hasEditorRef: !!tab.editorRef, +}); + +const summarizeEditorTabs = (editorTabs: EditorTabsState) => { + const panes: { [string]: any } = {}; + for (const paneIdentifier in editorTabs.panes) { + const pane = editorTabs.panes[paneIdentifier]; + const currentTab = getCurrentTabForPane(editorTabs, paneIdentifier); + panes[paneIdentifier] = { + currentTabIndex: pane.currentTab, + currentTab: currentTab + ? summarizeEditorTab(currentTab, paneIdentifier) + : null, + editors: pane.editors.map(tab => summarizeEditorTab(tab, paneIdentifier)), + }; + } + + return { + panes, + allTabs: getAllEditorTabs(editorTabs).map(tab => + summarizeEditorTab(tab, 'unknown') + ), + }; +}; + +const findActiveEditorTab = (editorTabs: EditorTabsState): ?EditorTab => { + for (const paneIdentifier of ['center', 'right', 'left', 'external']) { + const currentTab = getCurrentTabForPane(editorTabs, paneIdentifier); + if (currentTab && currentTab.editorRef) return currentTab; + } + + return null; +}; + +const findActiveSceneEditorContainer = ( + editorTabs: EditorTabsState +): ?SceneEditorContainer => { + const activeTab = findActiveEditorTab(editorTabs); + if (!activeTab || !activeTab.editorRef) return null; + + const editorRef = activeTab.editorRef; + if (!(editorRef instanceof SceneEditorContainer) || !editorRef.editor) { + return null; + } + + return editorRef; +}; + +const getActiveLayoutName = (editorTabs: EditorTabsState): string | null => { + const activeTab = findActiveEditorTab(editorTabs); + if ( + activeTab && + (activeTab.kind === 'layout' || activeTab.kind === 'layout events') && + activeTab.projectItemName + ) { + return activeTab.projectItemName; + } + + return null; +}; + +const getTargetLayout = ( + project: gdProject, + editorTabs: EditorTabsState, + layoutName?: ?string +): gdLayout => { + if (layoutName) { + if (!project.hasLayoutNamed(layoutName)) { + throw new Error(`No layout named "${layoutName}" exists in the project.`); + } + return project.getLayout(layoutName); + } + + const activeLayoutName = getActiveLayoutName(editorTabs); + if (activeLayoutName && project.hasLayoutNamed(activeLayoutName)) { + return project.getLayout(activeLayoutName); + } + + const firstLayoutName = project.getFirstLayout(); + if (firstLayoutName && project.hasLayoutNamed(firstLayoutName)) { + return project.getLayout(firstLayoutName); + } + + if (project.getLayoutsCount() > 0) { + return project.getLayoutAt(0); + } + + throw new Error('The project has no layout to edit.'); +}; + +const parseParentEventPath = (value: any): Array => { + if (value == null) return []; + if (!Array.isArray(value)) { + throw new Error('parentEventPath must be an array of event indices.'); + } + + return value.map((segment, index) => { + if (!Number.isInteger(segment) || segment < 0) { + throw new Error( + `parentEventPath[${index}] must be a non-negative integer.` + ); + } + return segment; + }); +}; + +const parseEventPath = (value: any): Array => { + const path = parseParentEventPath(value); + if (!path.length) { + throw new Error('eventPath must point to an existing event.'); + } + return path; +}; + +const resolveEventsListAtPath = ( + rootEvents: gdEventsList, + parentEventPath: Array +): gdEventsList => { + let currentEvents = rootEvents; + parentEventPath.forEach((segment, depth) => { + if (segment >= currentEvents.getEventsCount()) { + throw new Error( + `Invalid parentEventPath: index ${segment} is out of bounds at depth ${depth}.` + ); + } + + const event = currentEvents.getEventAt(segment); + if (!event.canHaveSubEvents()) { + throw new Error( + `Invalid parentEventPath: event at depth ${depth} cannot contain sub-events.` + ); + } + + currentEvents = event.getSubEvents(); + }); + + return currentEvents; +}; + +const resolveEventLocationAtPath = ( + rootEvents: gdEventsList, + eventPath: Array +): {| parentEvents: gdEventsList, index: number |} => { + const parentEventPath = eventPath.slice(0, -1); + const index = eventPath[eventPath.length - 1]; + const parentEvents = resolveEventsListAtPath(rootEvents, parentEventPath); + if (index >= parentEvents.getEventsCount()) { + throw new Error( + `Invalid eventPath: index ${index} is out of bounds. Maximum event index is ${parentEvents.getEventsCount() - + 1}.` + ); + } + + return { parentEvents, index }; +}; + +const getInsertionIndex = (eventsList: gdEventsList, value: any): number => { + if (value == null) return eventsList.getEventsCount(); + if (!Number.isInteger(value) || value < 0) { + throw new Error('index must be a non-negative integer.'); + } + if (value > eventsList.getEventsCount()) { + throw new Error( + `index ${value} is out of bounds. Maximum insertion index is ${eventsList.getEventsCount()}.` + ); + } + return value; +}; + +const normalizeInstruction = (instruction: any): Object => { + if (!instruction || typeof instruction !== 'object') { + throw new Error('Instruction must be an object.'); + } + + const rawType = instruction.type; + let type; + if (typeof rawType === 'string') { + type = { + value: rawType, + }; + } else if (rawType && typeof rawType === 'object') { + type = rawType; + } else { + throw new Error('Instruction type must be a string or object.'); + } + + return { + type, + parameters: Array.isArray(instruction.parameters) + ? instruction.parameters.map(parameter => String(parameter)) + : [], + subInstructions: Array.isArray(instruction.subInstructions) + ? instruction.subInstructions.map(normalizeInstruction) + : [], + }; +}; + +const normalizeInstructions = (value: any): Array => { + if (value == null) return []; + if (!Array.isArray(value)) throw new Error('Instructions must be an array.'); + return value.map(normalizeInstruction); +}; + +const createAiGeneratedEventId = (params: { [string]: any }): string => { + if ( + typeof params.aiGeneratedEventId === 'string' && + params.aiGeneratedEventId.trim() + ) { + return params.aiGeneratedEventId.trim(); + } + + return `gdevelop-mcp-${Date.now()}`; +}; + +const createEventJsonsFromParams = (params: { + [string]: any, +}): Array => { + if (Array.isArray(params.events)) { + return params.events.map(event => { + if (!event || typeof event !== 'object') { + throw new Error('events must contain only event objects.'); + } + return event; + }); + } + + if (params.event && typeof params.event === 'object') { + return [params.event]; + } + + const eventType = + typeof params.type === 'string' + ? params.type + : 'BuiltinCommonInstructions::Standard'; + if (eventType === 'BuiltinCommonInstructions::Comment') { + return [ + { + type: eventType, + comment: + typeof params.comment === 'string' + ? params.comment + : String(params.comment || ''), + comment2: '', + }, + ]; + } + + return [ + { + type: eventType, + conditions: normalizeInstructions(params.conditions), + actions: normalizeInstructions(params.actions), + events: Array.isArray(params.subEvents) ? params.subEvents : [], + }, + ]; +}; + +const createTemporaryEventsList = ( + project: gdProject, + eventJsons: Array, + aiGeneratedEventId?: ?string +): gdEventsList => { + const temporaryEventsList = new gd.EventsList(); + try { + unserializeFromJSObject( + temporaryEventsList, + eventJsons, + 'unserializeFrom', + project + ); + if (temporaryEventsList.isEmpty()) { + throw new Error('No event could be created from the supplied JSON.'); + } + + if (aiGeneratedEventId) { + for (let i = 0; i < temporaryEventsList.getEventsCount(); i++) { + temporaryEventsList + .getEventAt(i) + .setAiGeneratedEventId(aiGeneratedEventId); + } + } + + return temporaryEventsList; + } catch (error) { + temporaryEventsList.delete(); + throw error; + } +}; + +const notifyEventsChanged = ( + props: Props, + layout: gdLayout, + aiGeneratedEventId: string +) => { + props.unsavedChanges.triggerUnsavedChanges(); + props.onSceneEventsModifiedOutsideEditor({ + scene: layout, + newOrChangedAiGeneratedEventIds: new Set([aiGeneratedEventId]), + }); +}; + +const notifyObjectsChanged = ( + props: Props, + layout: gdLayout, + isNewObjectTypeUsed: boolean +) => { + props.unsavedChanges.triggerUnsavedChanges(); + props.onObjectsModifiedOutsideEditor({ + scene: layout, + isNewObjectTypeUsed, + }); +}; + +const notifyInstancesChanged = (props: Props, layout: gdLayout) => { + props.unsavedChanges.triggerUnsavedChanges(); + props.onInstancesModifiedOutsideEditor({ + scene: layout, + }); +}; + +const refreshOpenEditors = (props: Props) => { + getAllEditorTabs(props.editorTabs).forEach(tab => { + const editorRef: any = tab.editorRef; + if (!editorRef) return; + if (typeof editorRef.forceUpdateEditor === 'function') { + editorRef.forceUpdateEditor(); + } + if ( + editorRef.editor && + typeof editorRef.editor.refreshResourcesList === 'function' + ) { + editorRef.editor.refreshResourcesList(); + } + }); +}; + +const notifyResourcesChanged = (props: Props) => { + props.unsavedChanges.triggerUnsavedChanges(); + props.onNewResourcesAdded(); + refreshOpenEditors(props); +}; + +const requireObjectName = (value: any): string => { + if (typeof value !== 'string' || !value.trim()) { + throw new Error('objectName must be a non-empty string.'); + } + return value.trim(); +}; + +const getNumberOrDefault = (value: any, fallback: number): number => { + return typeof value === 'number' && Number.isFinite(value) ? value : fallback; +}; + +const getLayerName = (value: any): string => { + return typeof value === 'string' ? value : ''; +}; + +const setInitialInstanceDepth = ( + instance: gdInitialInstance, + depth: number +) => { + instance.setHasCustomDepth(true); + instance.setCustomDepth(Math.max(0, depth)); +}; + +const applyInitialInstance3DProperties = ( + instance: gdInitialInstance, + params: { [string]: any }, + allowDeltas: boolean = false +) => { + if (typeof params.z === 'number') instance.setZ(params.z); + if (allowDeltas && typeof params.deltaZ === 'number') { + instance.setZ(instance.getZ() + params.deltaZ); + } + + if (typeof params.rotationX === 'number') { + instance.setRotationX(params.rotationX); + } + if (allowDeltas && typeof params.deltaRotationX === 'number') { + instance.setRotationX(instance.getRotationX() + params.deltaRotationX); + } + + if (typeof params.rotationY === 'number') { + instance.setRotationY(params.rotationY); + } + if (allowDeltas && typeof params.deltaRotationY === 'number') { + instance.setRotationY(instance.getRotationY() + params.deltaRotationY); + } + + if (typeof params.depth === 'number') { + setInitialInstanceDepth(instance, params.depth); + } + if (allowDeltas && typeof params.deltaDepth === 'number') { + setInitialInstanceDepth( + instance, + instance.getCustomDepth() + params.deltaDepth + ); + } +}; + +const resourceKinds: Array = [ + 'audio', + 'image', + 'font', + 'video', + 'json', + 'tilemap', + 'tileset', + 'bitmapFont', + 'model3D', + 'atlas', + 'spine', + 'javascript', +]; + +const isResourceKind = (value: string): boolean => + resourceKinds.includes((value: any)); + +const getFileNameFromPath = (file: string): string => { + const parts = file.split(/[\\/]/); + return parts[parts.length - 1] || file; +}; + +const guessResourceKind = (file: string): ResourceKind => { + const extensionParts = file + .split('?')[0] + .split('#')[0] + .split('.'); + const extension = ( + extensionParts[extensionParts.length - 1] || '' + ).toLowerCase(); + if (['png', 'jpg', 'jpeg', 'webp', 'gif'].includes(extension)) return 'image'; + if (['aac', 'wav', 'mp3', 'ogg', 'flac'].includes(extension)) return 'audio'; + if (['ttf', 'otf', 'woff', 'woff2'].includes(extension)) return 'font'; + if (['mp4', 'webm'].includes(extension)) return 'video'; + if (['ldtk', 'tmj'].includes(extension)) return 'tilemap'; + if (['tsj'].includes(extension)) return 'tileset'; + if (['fnt', 'xml'].includes(extension)) return 'bitmapFont'; + if (['glb', 'gltf'].includes(extension)) return 'model3D'; + if (['atlas'].includes(extension)) return 'atlas'; + if (['js'].includes(extension)) return 'javascript'; + return 'json'; +}; + +const getResourceKind = ( + params: { [string]: any }, + file: string +): ResourceKind => { + if (typeof params.kind === 'string') { + if (!isResourceKind(params.kind)) { + throw new Error(`Unsupported resource kind: ${params.kind}`); + } + return (params.kind: any); + } + + return guessResourceKind(file); +}; + +const summarizeResource = (resource: gdResource) => { + const summary = { + name: resource.getName(), + file: resource.getFile(), + kind: resource.getKind(), + userAdded: resource.isUserAdded(), + smoothed: null, + }; + if (resource instanceof gd.ImageResource) { + return { + ...summary, + smoothed: gd.asImageResource(resource).isSmooth(), + }; + } + return summary; +}; + +const serializeParameterMetadata = (parameter: gdParameterMetadata) => ({ + name: parameter.getName(), + type: parameter.getType(), + description: parameter.getDescription(), + longDescription: parameter.getLongDescription(), + extraInfo: parameter.getExtraInfo(), + hint: parameter.getHint(), + defaultValue: parameter.getDefaultValue(), + optional: parameter.isOptional(), + codeOnly: parameter.isCodeOnly(), +}); + +const serializeInstructionMetadata = ( + kind: 'actions' | 'conditions', + extension: gdPlatformExtension, + id: string, + metadata: gdInstructionMetadata +) => { + const parameters = []; + for (let index = 0; index < metadata.getParametersCount(); index++) { + parameters.push(serializeParameterMetadata(metadata.getParameter(index))); + } + + return { + kind, + id, + extensionName: extension.getName(), + extensionFullName: extension.getFullName(), + fullName: metadata.getFullName(), + description: metadata.getDescription(), + sentence: metadata.getSentence(), + group: metadata.getGroup(), + helpPath: metadata.getHelpPath(), + hidden: metadata.isHidden(), + private: metadata.isPrivate(), + async: metadata.isAsync(), + optionallyAsync: metadata.isOptionallyAsync(), + canHaveSubInstructions: metadata.canHaveSubInstructions(), + deprecationMessage: metadata.getDeprecationMessage(), + usageComplexity: metadata.getUsageComplexity(), + functionName: metadata.getFunctionName(), + asyncFunctionName: metadata.getAsyncFunctionName(), + includeFiles: metadata.getIncludeFiles().toJSArray(), + parameters, + }; +}; + +const serializeExpressionMetadata = ( + kind: 'expressions' | 'stringExpressions', + extension: gdPlatformExtension, + id: string, + metadata: gdExpressionMetadata +) => { + const parameters = []; + for (let index = 0; index < metadata.getParametersCount(); index++) { + parameters.push(serializeParameterMetadata(metadata.getParameter(index))); + } + + return { + kind, + id, + extensionName: extension.getName(), + extensionFullName: extension.getFullName(), + fullName: metadata.getFullName(), + description: metadata.getDescription(), + group: metadata.getGroup(), + returnType: metadata.getReturnType(), + helpPath: metadata.getHelpPath(), + shown: metadata.isShown(), + private: metadata.isPrivate(), + deprecated: metadata.isDeprecated(), + deprecationMessage: metadata.getDeprecationMessage(), + functionName: metadata.getFunctionName(), + includeFiles: metadata.getIncludeFiles().toJSArray(), + parameters, + }; +}; + +const serializeInstructionMap = ( + kind: 'actions' | 'conditions', + extension: gdPlatformExtension, + metadataMap: gdMapStringInstructionMetadata +): Array => { + const keys = metadataMap.keys(); + try { + return keys + .toJSArray() + .map(id => + serializeInstructionMetadata(kind, extension, id, metadataMap.get(id)) + ); + } finally { + keys.delete(); + } +}; + +const serializeExpressionMap = ( + kind: 'expressions' | 'stringExpressions', + extension: gdPlatformExtension, + metadataMap: gdMapStringExpressionMetadata +): Array => { + const keys = metadataMap.keys(); + try { + return keys + .toJSArray() + .map(id => + serializeExpressionMetadata(kind, extension, id, metadataMap.get(id)) + ); + } finally { + keys.delete(); + } +}; + +const serializeEventMap = ( + extension: gdPlatformExtension, + metadataMap: gdMapStringEventMetadata +): Array => { + const keys = metadataMap.keys(); + try { + return keys.toJSArray().map(id => { + const metadata = metadataMap.get(id); + return { + kind: 'eventTypes', + id, + extensionName: extension.getName(), + extensionFullName: extension.getFullName(), + fullName: metadata.getFullName(), + description: metadata.getDescription(), + group: metadata.getGroup(), + }; + }); + } finally { + keys.delete(); + } +}; + +const serializeObjectTypes = ( + extension: gdPlatformExtension +): Array => { + const objectTypes = extension.getExtensionObjectsTypes(); + try { + return objectTypes.toJSArray().map(objectType => { + const metadata = extension.getObjectMetadata(objectType); + return { + kind: 'objectTypes', + id: objectType, + extensionName: extension.getName(), + extensionFullName: extension.getFullName(), + name: metadata.getName(), + fullName: metadata.getFullName(), + description: metadata.getDescription(), + category: metadata.getCategory(), + assetStoreTag: metadata.getAssetStoreTag(), + helpPath: metadata.getHelpPath(), + hidden: metadata.isHidden(), + private: metadata.isPrivate(), + renderedIn3D: metadata.isRenderedIn3D(), + }; + }); + } finally { + objectTypes.delete(); + } +}; + +const serializeBehaviorTypes = ( + extension: gdPlatformExtension +): Array => { + const behaviorTypes = extension.getBehaviorsTypes(); + try { + return behaviorTypes.toJSArray().map(behaviorType => { + const metadata = extension.getBehaviorMetadata(behaviorType); + return { + kind: 'behaviorTypes', + id: behaviorType, + extensionName: extension.getName(), + extensionFullName: extension.getFullName(), + name: metadata.getName(), + fullName: metadata.getFullName(), + defaultName: metadata.getDefaultName(), + description: metadata.getDescription(), + group: metadata.getGroup(), + objectType: metadata.getObjectType(), + helpPath: metadata.getHelpPath(), + hidden: metadata.isHidden(), + private: metadata.isPrivate(), + }; + }); + } finally { + behaviorTypes.delete(); + } +}; + +const shouldIncludeReflectionKind = (requestedKind: string, kind: string) => + requestedKind === 'all' || requestedKind === kind; + +const buildLiveReflectionCatalog = ( + props: Props, + params: { [string]: any } +) => { + const requestedKind = typeof params.kind === 'string' ? params.kind : 'all'; + const query = + typeof params.query === 'string' && params.query.trim() + ? params.query.trim().toLowerCase() + : null; + const limit = + typeof params.limit === 'number' && + Number.isInteger(params.limit) && + params.limit > 0 + ? Math.min(params.limit, 2000) + : 500; + const platform = props.project + ? props.project.getCurrentPlatform() + : gd.JsPlatform.get(); + const extensions = platform.getAllPlatformExtensions(); + const entries: Array = []; + + try { + for (let index = 0; index < extensions.size(); index++) { + const extension = extensions.at(index); + if (shouldIncludeReflectionKind(requestedKind, 'eventTypes')) { + entries.push(...serializeEventMap(extension, extension.getAllEvents())); + } + if (shouldIncludeReflectionKind(requestedKind, 'actions')) { + entries.push( + ...serializeInstructionMap( + 'actions', + extension, + extension.getAllActions() + ) + ); + } + if (shouldIncludeReflectionKind(requestedKind, 'conditions')) { + entries.push( + ...serializeInstructionMap( + 'conditions', + extension, + extension.getAllConditions() + ) + ); + } + if (shouldIncludeReflectionKind(requestedKind, 'expressions')) { + entries.push( + ...serializeExpressionMap( + 'expressions', + extension, + extension.getAllExpressions() + ) + ); + } + if (shouldIncludeReflectionKind(requestedKind, 'stringExpressions')) { + entries.push( + ...serializeExpressionMap( + 'stringExpressions', + extension, + extension.getAllStrExpressions() + ) + ); + } + if (shouldIncludeReflectionKind(requestedKind, 'objectTypes')) { + entries.push(...serializeObjectTypes(extension)); + } + if (shouldIncludeReflectionKind(requestedKind, 'behaviorTypes')) { + entries.push(...serializeBehaviorTypes(extension)); + } + } + } finally { + extensions.delete(); + } + + const filteredEntries = query + ? entries.filter(entry => + JSON.stringify(entry) + .toLowerCase() + .includes(query) + ) + : entries; + + return { + ok: true, + platform: { + name: platform.getName(), + fullName: platform.getFullName(), + }, + kind: requestedKind, + total: filteredEntries.length, + returned: Math.min(filteredEntries.length, limit), + entries: filteredEntries.slice(0, limit), + }; +}; + +const objectExistsInLayoutScope = ( + project: gdProject, + layout: gdLayout, + objectName: string +): boolean => { + return ( + project.getObjects().hasObjectNamed(objectName) || + layout.getObjects().hasObjectNamed(objectName) + ); +}; + +const createTextObject = (props: Props, params: { [string]: any }) => { + const project = props.project; + if (!project) throw new Error('No project is open in GDevelop.'); + + const layout = getTargetLayout(project, props.editorTabs, params.layoutName); + const objectName = requireObjectName(params.objectName); + const targetObjects = + params.global === true ? project.getObjects() : layout.getObjects(); + + if (objectExistsInLayoutScope(project, layout, objectName)) { + throw new Error( + `Object "${objectName}" already exists in this layout scope.` + ); + } + + const objectType = 'TextObject::Text'; + const isNewObjectTypeUsed = !gd.UsedObjectTypeFinder.scanProject( + project, + objectType + ); + const object = targetObjects.insertNewObject( + project, + objectType, + objectName, + targetObjects.getObjectsCount() + ); + object.resetPersistentUuid(); + + const textConfiguration = gd.asTextObjectConfiguration( + object.getConfiguration() + ); + textConfiguration.setText( + typeof params.text === 'string' ? params.text : 'Text' + ); + textConfiguration.setCharacterSize( + getNumberOrDefault(params.characterSize, 20) + ); + if (params.color && typeof params.color === 'object') { + textConfiguration.setColor( + `${getNumberOrDefault(params.color.r, 0)};${getNumberOrDefault( + params.color.g, + 0 + )};${getNumberOrDefault(params.color.b, 0)}` + ); + } + + notifyObjectsChanged(props, layout, isNewObjectTypeUsed); + + return { + ok: true, + layoutName: layout.getName(), + scope: params.global === true ? 'global' : 'layout', + object: serializeToJSObject(object), + }; +}; + +const createInstance = (props: Props, params: { [string]: any }) => { + const project = props.project; + if (!project) throw new Error('No project is open in GDevelop.'); + + const layout = getTargetLayout(project, props.editorTabs, params.layoutName); + const objectName = requireObjectName(params.objectName); + if (!objectExistsInLayoutScope(project, layout, objectName)) { + throw new Error( + `Object "${objectName}" does not exist in this layout scope.` + ); + } + + const instance = layout.getInitialInstances().insertNewInitialInstance(); + instance.setObjectName(objectName); + instance.setX(getNumberOrDefault(params.x, 0)); + instance.setY(getNumberOrDefault(params.y, 0)); + instance.setAngle(getNumberOrDefault(params.angle, 0)); + instance.setLayer(getLayerName(params.layer)); + applyInitialInstance3DProperties(instance, params); + if (typeof params.zOrder === 'number' && Number.isInteger(params.zOrder)) { + instance.setZOrder(params.zOrder); + } + if (typeof params.width === 'number' || typeof params.height === 'number') { + instance.setHasCustomSize(true); + if (typeof params.width === 'number') instance.setCustomWidth(params.width); + if (typeof params.height === 'number') + instance.setCustomHeight(params.height); + } + instance.resetPersistentUuid(); + + notifyInstancesChanged(props, layout); + + return { + ok: true, + layoutName: layout.getName(), + instance: serializeToJSObject(instance), + }; +}; + +const importResource = (props: Props, params: { [string]: any }) => { + const project = props.project; + if (!project) throw new Error('No project is open in GDevelop.'); + + const file = + typeof params.file === 'string' && params.file.trim() + ? params.file.trim() + : typeof params.sourcePath === 'string' && params.sourcePath.trim() + ? params.sourcePath.trim() + : ''; + if (!file) throw new Error('file must be a non-empty string.'); + + const resourceName = + typeof params.resourceName === 'string' && params.resourceName.trim() + ? params.resourceName.trim() + : getFileNameFromPath(file); + if (!resourceName) throw new Error('resourceName cannot be empty.'); + + const resourceKind = getResourceKind(params, file); + const resourcesManager = project.getResourcesManager(); + if (resourcesManager.hasResource(resourceName)) { + if (params.overwrite !== true) { + throw new Error( + `Resource "${resourceName}" already exists. Pass overwrite: true to replace it.` + ); + } + resourcesManager.removeResource(resourceName); + } + + const resource = createNewResource(resourceKind); + if (!resource) throw new Error(`Unsupported resource kind: ${resourceKind}`); + + resource.setName(resourceName); + resource.setFile(file); + resource.setUserAdded(params.userAdded !== false); + if (resource instanceof gd.ImageResource) { + gd.asImageResource(resource).setSmooth( + typeof params.smoothed === 'boolean' + ? params.smoothed + : project.getScaleMode() !== 'nearest' + ); + } else { + applyResourceDefaults(project, resource); + } + + const added = resourcesManager.addResource(resource); + resource.delete(); + if (!added) { + throw new Error(`Resource "${resourceName}" could not be added.`); + } + + const importedResource = resourcesManager.getResource(resourceName); + notifyResourcesChanged(props); + + return { + ok: true, + resource: summarizeResource(importedResource), + }; +}; + +const updateSelectedInstances = (props: Props, params: { [string]: any }) => { + const sceneEditorContainer = findActiveSceneEditorContainer(props.editorTabs); + if (!sceneEditorContainer || !sceneEditorContainer.editor) { + throw new Error('The active editor is not a scene editor.'); + } + + const layout = sceneEditorContainer.getLayout(); + if (!layout) throw new Error('No active layout is available.'); + + const sceneEditor = sceneEditorContainer.editor; + if (!sceneEditor) throw new Error('The active editor is not a scene editor.'); + + const selectedInstances = sceneEditor.instancesSelection.getSelectedInstances(); + if (!selectedInstances.length) { + throw new Error('No scene instances are currently selected.'); + } + + selectedInstances.forEach(instance => { + if (typeof params.x === 'number') instance.setX(params.x); + if (typeof params.y === 'number') instance.setY(params.y); + if (typeof params.deltaX === 'number') { + instance.setX(instance.getX() + params.deltaX); + } + if (typeof params.deltaY === 'number') { + instance.setY(instance.getY() + params.deltaY); + } + if (typeof params.angle === 'number') instance.setAngle(params.angle); + if (typeof params.deltaAngle === 'number') { + instance.setAngle(instance.getAngle() + params.deltaAngle); + } + applyInitialInstance3DProperties(instance, params, true); + if (typeof params.layer === 'string') instance.setLayer(params.layer); + if (typeof params.zOrder === 'number' && Number.isInteger(params.zOrder)) { + instance.setZOrder(params.zOrder); + } + if (typeof params.width === 'number' || typeof params.height === 'number') { + instance.setHasCustomSize(true); + if (typeof params.width === 'number') + instance.setCustomWidth(params.width); + if (typeof params.height === 'number') + instance.setCustomHeight(params.height); + } + }); + + const serializedInstances = selectedInstances.map(instance => + serializeToJSObject(instance) + ); + + notifyInstancesChanged(props, layout); + + return { + ok: true, + layoutName: layout.getName(), + updatedCount: serializedInstances.length, + instances: serializedInstances, + }; +}; + +const insertCommentEvent = (props: Props, params: { [string]: any }) => { + const project = props.project; + if (!project) throw new Error('No project is open in GDevelop.'); + + const comment = + typeof params.comment === 'string' + ? params.comment + : String(params.comment || ''); + const layout = getTargetLayout(project, props.editorTabs, params.layoutName); + const targetEvents = resolveEventsListAtPath( + layout.getEvents(), + parseParentEventPath(params.parentEventPath) + ); + const index = getInsertionIndex(targetEvents, params.index); + const aiGeneratedEventId = createAiGeneratedEventId(params); + const event = targetEvents.insertNewEvent( + project, + 'BuiltinCommonInstructions::Comment', + index + ); + gd.asCommentEvent(event).setComment(comment); + event.setAiGeneratedEventId(aiGeneratedEventId); + + notifyEventsChanged(props, layout, aiGeneratedEventId); + + return { + ok: true, + layoutName: layout.getName(), + eventPath: [...parseParentEventPath(params.parentEventPath), index], + aiGeneratedEventId, + event: serializeToJSObject(event), + }; +}; + +const insertStandardEvent = (props: Props, params: { [string]: any }) => { + const project = props.project; + if (!project) throw new Error('No project is open in GDevelop.'); + + const layout = getTargetLayout(project, props.editorTabs, params.layoutName); + const targetEvents = resolveEventsListAtPath( + layout.getEvents(), + parseParentEventPath(params.parentEventPath) + ); + const index = getInsertionIndex(targetEvents, params.index); + const aiGeneratedEventId = createAiGeneratedEventId(params); + const eventJson = { + type: 'BuiltinCommonInstructions::Standard', + conditions: normalizeInstructions(params.conditions), + actions: normalizeInstructions(params.actions), + events: Array.isArray(params.subEvents) ? params.subEvents : [], + }; + + const temporaryEventsList = new gd.EventsList(); + try { + unserializeFromJSObject( + temporaryEventsList, + [eventJson], + 'unserializeFrom', + project + ); + if (temporaryEventsList.isEmpty()) { + throw new Error('The standard event could not be created.'); + } + + const insertedCount = temporaryEventsList.getEventsCount(); + for (let i = 0; i < insertedCount; i++) { + temporaryEventsList + .getEventAt(i) + .setAiGeneratedEventId(aiGeneratedEventId); + } + + targetEvents.insertEvents(temporaryEventsList, 0, insertedCount, index); + } finally { + temporaryEventsList.delete(); + } + + notifyEventsChanged(props, layout, aiGeneratedEventId); + + return { + ok: true, + layoutName: layout.getName(), + eventPath: [...parseParentEventPath(params.parentEventPath), index], + aiGeneratedEventId, + event: serializeToJSObject(targetEvents.getEventAt(index)), + }; +}; + +const replaceEvent = (props: Props, params: { [string]: any }) => { + const project = props.project; + if (!project) throw new Error('No project is open in GDevelop.'); + + const eventPath = parseEventPath(params.eventPath); + const layout = getTargetLayout(project, props.editorTabs, params.layoutName); + const { parentEvents, index } = resolveEventLocationAtPath( + layout.getEvents(), + eventPath + ); + const aiGeneratedEventId = createAiGeneratedEventId(params); + const replacementEventsList = createTemporaryEventsList( + project, + createEventJsonsFromParams(params), + aiGeneratedEventId + ); + + let insertedCount = 0; + let removedEvent = null; + try { + removedEvent = serializeToJSObject(parentEvents.getEventAt(index)); + parentEvents.removeEventAt(index); + insertedCount = replacementEventsList.getEventsCount(); + parentEvents.insertEvents(replacementEventsList, 0, insertedCount, index); + } finally { + replacementEventsList.delete(); + } + + notifyEventsChanged(props, layout, aiGeneratedEventId); + + const insertedEvents = []; + for (let i = 0; i < insertedCount; i++) { + insertedEvents.push( + serializeToJSObject(parentEvents.getEventAt(index + i)) + ); + } + + return { + ok: true, + layoutName: layout.getName(), + eventPath, + insertedCount, + aiGeneratedEventId, + removedEvent, + insertedEvents, + }; +}; + +const deleteEvent = (props: Props, params: { [string]: any }) => { + const project = props.project; + if (!project) throw new Error('No project is open in GDevelop.'); + + const eventPath = parseEventPath(params.eventPath); + const layout = getTargetLayout(project, props.editorTabs, params.layoutName); + const { parentEvents, index } = resolveEventLocationAtPath( + layout.getEvents(), + eventPath + ); + const event = parentEvents.getEventAt(index); + const aiGeneratedEventId = + typeof params.aiGeneratedEventId === 'string' && params.aiGeneratedEventId + ? params.aiGeneratedEventId + : event.getAiGeneratedEventId() || `gdevelop-mcp-delete-${Date.now()}`; + const removedEvent = serializeToJSObject(event); + parentEvents.removeEventAt(index); + + notifyEventsChanged(props, layout, aiGeneratedEventId); + + return { + ok: true, + layoutName: layout.getName(), + eventPath, + aiGeneratedEventId, + removedEvent, + }; +}; + +const startsWithPath = ( + possibleChildPath: Array, + possibleParentPath: Array +): boolean => { + if (possibleChildPath.length < possibleParentPath.length) return false; + return possibleParentPath.every( + (segment, index) => possibleChildPath[index] === segment + ); +}; + +const eventPathsEqual = ( + firstPath: Array, + secondPath: Array +): boolean => + firstPath.length === secondPath.length && + firstPath.every((segment, index) => segment === secondPath[index]); + +const findEventPathByReference = ( + eventsList: gdEventsList, + targetEvent: gdBaseEvent, + currentPath: Array = [] +): Array | null => { + const targetPtr = (targetEvent: any).ptr; + for (let i = 0; i < eventsList.getEventsCount(); i++) { + const event = eventsList.getEventAt(i); + if ((event: any).ptr === targetPtr) { + return [...currentPath, i]; + } + if (event.canHaveSubEvents()) { + const childPath = findEventPathByReference( + event.getSubEvents(), + targetEvent, + [...currentPath, i] + ); + if (childPath) return childPath; + } + } + + return null; +}; + +const moveEvent = (props: Props, params: { [string]: any }) => { + const project = props.project; + if (!project) throw new Error('No project is open in GDevelop.'); + + const eventPath = parseEventPath(params.eventPath); + const sourceParentEventPath = eventPath.slice(0, -1); + const targetParentEventPath = parseParentEventPath( + params.targetParentEventPath + ); + if (startsWithPath(targetParentEventPath, eventPath)) { + throw new Error( + 'Cannot move an event inside itself or one of its children.' + ); + } + + const layout = getTargetLayout(project, props.editorTabs, params.layoutName); + const rootEvents = layout.getEvents(); + const { parentEvents, index } = resolveEventLocationAtPath( + rootEvents, + eventPath + ); + const targetEvents = resolveEventsListAtPath( + rootEvents, + targetParentEventPath + ); + const requestedTargetIndex = getInsertionIndex(targetEvents, params.index); + const event = parentEvents.getEventAt(index); + const aiGeneratedEventId = + typeof params.aiGeneratedEventId === 'string' && params.aiGeneratedEventId + ? params.aiGeneratedEventId + : event.getAiGeneratedEventId() || `gdevelop-mcp-move-${Date.now()}`; + const targetIndex = + eventPathsEqual(sourceParentEventPath, targetParentEventPath) && + requestedTargetIndex > index + ? requestedTargetIndex - 1 + : requestedTargetIndex; + + const moved = parentEvents.moveEventToAnotherEventsList( + event, + targetEvents, + targetIndex + ); + if (!moved) throw new Error('The event could not be moved.'); + + notifyEventsChanged(props, layout, aiGeneratedEventId); + + return { + ok: true, + layoutName: layout.getName(), + fromEventPath: eventPath, + toParentEventPath: targetParentEventPath, + requestedIndex: requestedTargetIndex, + appliedIndex: targetIndex, + finalEventPath: findEventPathByReference(rootEvents, event), + aiGeneratedEventId, + event: serializeToJSObject(event), + }; +}; + +const saveProject = async (props: Props, params: { [string]: any }) => { + const fileMetadata = await props.onSave({ + skipNewVersionWarning: params.skipNewVersionWarning !== false, + }); + + return { + ok: !!fileMetadata, + file: fileMetadata + ? { + fileIdentifier: fileMetadata.fileIdentifier, + name: fileMetadata.name, + } + : null, + hasUnsavedChanges: props.unsavedChanges.hasUnsavedChanges, + }; +}; + +const launchPreview = async (props: Props, params: { [string]: any }) => { + if (!props.project) throw new Error('No project is open in GDevelop.'); + + await props.onLaunchPreview({ + networkPreview: params.networkPreview === true, + hotReload: params.hotReload === true, + shouldHardReload: params.shouldHardReload === true, + fullLoadingScreen: params.fullLoadingScreen === true, + numberOfWindows: + typeof params.numberOfWindows === 'number' && + Number.isInteger(params.numberOfWindows) && + params.numberOfWindows > 0 + ? params.numberOfWindows + : 1, + }); + + return { + ok: true, + }; +}; + +const summarizePreviewState = (previewState: PreviewBridgeState) => ({ + hasNonEditionPreviewsRunning: previewState.hasNonEditionPreviewsRunning, + nonEditionPreviewsCount: previewState.nonEditionPreviewsCount, + gameLogCount: previewState.gameHotReloadLogs.length, + editorLogCount: previewState.editorHotReloadLogs.length, + editorUncaughtError: previewState.editorUncaughtError + ? { + name: previewState.editorUncaughtError.name, + message: previewState.editorUncaughtError.message, + stack: previewState.editorUncaughtError.stack, + } + : null, +}); + +const getPreviewLogs = (props: Props, params: { [string]: any }) => { + const scope = typeof params.scope === 'string' ? params.scope : 'all'; + const includeGame = scope === 'all' || scope === 'game'; + const includeEditor = scope === 'all' || scope === 'editor'; + + return { + ok: true, + status: summarizePreviewState(props.previewState), + gameHotReloadLogs: includeGame ? props.previewState.gameHotReloadLogs : [], + editorHotReloadLogs: includeEditor + ? props.previewState.editorHotReloadLogs + : [], + editorUncaughtError: + includeEditor && props.previewState.editorUncaughtError + ? { + name: props.previewState.editorUncaughtError.name, + message: props.previewState.editorUncaughtError.message, + stack: props.previewState.editorUncaughtError.stack, + } + : null, + }; +}; + +const isCanvasLikeElement = (element: any): boolean => + !!element && + typeof element.toDataURL === 'function' && + typeof element.width === 'number' && + typeof element.height === 'number' && + element.tagName === 'CANVAS'; + +const findCanvasInDocument = ( + rootDocument: Document, + selector: string +): any => { + const directCanvas = rootDocument.querySelector(selector); + if (isCanvasLikeElement(directCanvas)) return directCanvas; + + const iframes = rootDocument.querySelectorAll('iframe'); + for (let index = 0; index < iframes.length; index++) { + const iframe = iframes[index]; + try { + if (iframe.contentDocument) { + const canvas = findCanvasInDocument(iframe.contentDocument, selector); + if (canvas) return canvas; + } + } catch (error) { + // Cross-origin frames cannot be inspected. + } + } + + return null; +}; + +const captureScreenshot = (params: { [string]: any }) => { + if (typeof document === 'undefined') { + throw new Error('Screenshots can only be captured in the editor window.'); + } + + const selector = + typeof params.selector === 'string' && params.selector + ? params.selector + : 'canvas'; + const canvas = findCanvasInDocument(document, selector); + if (!canvas) { + throw new Error(`No canvas found for selector "${selector}".`); + } + + const includeDataUrl = params.includeDataUrl !== false; + return { + ok: true, + selector, + width: canvas.width, + height: canvas.height, + dataUrl: includeDataUrl ? canvas.toDataURL('image/png') : null, + }; +}; + +const summarizeSelection = (editorTabs: EditorTabsState) => { + const activeTab = findActiveEditorTab(editorTabs); + if (!activeTab) { + return { + kind: 'none', + reason: 'No active editor tab with an editor reference.', + instances: [], + }; + } + + const editorRef = activeTab.editorRef; + if (!(editorRef instanceof SceneEditorContainer) || !editorRef.editor) { + return { + kind: activeTab.kind, + reason: + 'The active editor is not a scene editor with instance selection.', + instances: [], + }; + } + + const sceneEditor = editorRef.editor; + const instancesSelection = sceneEditor.instancesSelection; + const instances = instancesSelection.getSelectedInstances().map(instance => ({ + objectName: instance.getObjectName(), + persistentUuid: instance.getPersistentUuid(), + x: instance.getX(), + y: instance.getY(), + z: instance.getZ(), + angle: instance.getAngle(), + rotationX: instance.getRotationX(), + rotationY: instance.getRotationY(), + hasCustomDepth: instance.hasCustomDepth(), + depth: instance.hasCustomDepth() ? instance.getCustomDepth() : null, + layer: instance.getLayer(), + zOrder: instance.getZOrder(), + })); + + return { + kind: 'scene-instances', + layoutName: activeTab.projectItemName, + selectedInstanceCount: instances.length, + instances, + }; +}; + +const buildEditorState = (props: Props) => { + const activeTab = findActiveEditorTab(props.editorTabs); + + return { + bridgeProtocolVersion: BRIDGE_PROTOCOL_VERSION, + timestamp: new Date().toISOString(), + hasUnsavedChanges: props.hasUnsavedChanges, + file: props.currentFileMetadata + ? { + fileIdentifier: props.currentFileMetadata.fileIdentifier, + name: props.currentFileMetadata.name, + } + : null, + project: summarizeProject(props.project), + activeTab: activeTab ? summarizeEditorTab(activeTab, 'active') : null, + tabs: summarizeEditorTabs(props.editorTabs), + selection: summarizeSelection(props.editorTabs), + preview: summarizePreviewState(props.previewState), + }; +}; + +const respond = (socket: BridgeSocket, id: string, result: Object | null) => { + socket.send( + JSON.stringify({ + type: 'result', + id, + result, + }) + ); +}; + +const respondError = (socket: BridgeSocket, id: string, message: string) => { + socket.send( + JSON.stringify({ + type: 'error', + id, + message, + }) + ); +}; + +export default function AIEditorBridge(props: Props): React.Node { + const socketRef = React.useRef(null); + const propsRef = React.useRef(props); + propsRef.current = props; + + const sendStateChanged = React.useCallback(() => { + const socket = socketRef.current; + if (!socket || !socket._gdevelopMcpBridgeIsOpen) return; + + socket.send( + JSON.stringify({ + type: 'event', + event: 'stateChanged', + payload: buildEditorState(propsRef.current), + }) + ); + }, []); + + React.useEffect( + () => { + let retryTimeoutId = null; + let closed = false; + const bridgeUrl = getBridgeUrl(); + if (!bridgeUrl) return undefined; + + const connect = () => { + if (closed) return; + const socket: BridgeSocket = ((new WebSocket( + bridgeUrl + ): any): BridgeSocket); + socketRef.current = socket; + + socket.onopen = () => { + socket._gdevelopMcpBridgeIsOpen = true; + socket.send( + JSON.stringify({ + type: 'hello', + role: 'gdevelop-editor', + editorId: `gdevelop-editor-${Date.now()}`, + protocolVersion: BRIDGE_PROTOCOL_VERSION, + capabilities: [ + 'editor.getState', + 'editor.getProjectSummary', + 'editor.getTabs', + 'editor.getSelection', + 'editor.getReflectionCatalog', + 'editor.getPreviewStatus', + 'editor.getPreviewLogs', + 'editor.captureScreenshot', + 'editor.importResource', + 'editor.insertCommentEvent', + 'editor.insertStandardEvent', + 'editor.replaceEvent', + 'editor.deleteEvent', + 'editor.moveEvent', + 'editor.createTextObject', + 'editor.createInstance', + 'editor.updateSelectedInstances', + 'editor.saveProject', + 'editor.launchPreview', + ], + }) + ); + sendStateChanged(); + }; + + socket.onmessage = event => { + const call = safeCall( + () => JSON.parse(String(event.data)), + null + ); + if (!call || call.type !== 'call') return; + + try { + if (call.method === 'editor.getState') { + respond(socket, call.id, buildEditorState(propsRef.current)); + } else if (call.method === 'editor.getProjectSummary') { + respond( + socket, + call.id, + summarizeProject(propsRef.current.project) + ); + } else if (call.method === 'editor.getTabs') { + respond( + socket, + call.id, + summarizeEditorTabs(propsRef.current.editorTabs) + ); + } else if (call.method === 'editor.getSelection') { + respond( + socket, + call.id, + summarizeSelection(propsRef.current.editorTabs) + ); + } else if (call.method === 'editor.getReflectionCatalog') { + respond( + socket, + call.id, + buildLiveReflectionCatalog(propsRef.current, call.params || {}) + ); + } else if (call.method === 'editor.getPreviewStatus') { + respond( + socket, + call.id, + summarizePreviewState(propsRef.current.previewState) + ); + } else if (call.method === 'editor.getPreviewLogs') { + respond( + socket, + call.id, + getPreviewLogs(propsRef.current, call.params || {}) + ); + } else if (call.method === 'editor.captureScreenshot') { + respond(socket, call.id, captureScreenshot(call.params || {})); + } else if (call.method === 'editor.importResource') { + const result = importResource( + propsRef.current, + call.params || {} + ); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.insertCommentEvent') { + const result = insertCommentEvent( + propsRef.current, + call.params || {} + ); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.insertStandardEvent') { + const result = insertStandardEvent( + propsRef.current, + call.params || {} + ); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.replaceEvent') { + const result = replaceEvent(propsRef.current, call.params || {}); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.deleteEvent') { + const result = deleteEvent(propsRef.current, call.params || {}); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.moveEvent') { + const result = moveEvent(propsRef.current, call.params || {}); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.createTextObject') { + const result = createTextObject( + propsRef.current, + call.params || {} + ); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.createInstance') { + const result = createInstance( + propsRef.current, + call.params || {} + ); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.updateSelectedInstances') { + const result = updateSelectedInstances( + propsRef.current, + call.params || {} + ); + respond(socket, call.id, result); + sendStateChanged(); + } else if (call.method === 'editor.saveProject') { + saveProject(propsRef.current, call.params || {}).then( + result => { + respond(socket, call.id, result); + sendStateChanged(); + }, + error => { + respondError( + socket, + call.id, + error instanceof Error ? error.message : String(error) + ); + } + ); + } else if (call.method === 'editor.launchPreview') { + launchPreview(propsRef.current, call.params || {}).then( + result => { + respond(socket, call.id, result); + sendStateChanged(); + }, + error => { + respondError( + socket, + call.id, + error instanceof Error ? error.message : String(error) + ); + } + ); + } else { + respondError( + socket, + call.id, + `Unknown bridge method: ${call.method}` + ); + } + } catch (error) { + respondError( + socket, + call.id, + error instanceof Error ? error.message : String(error) + ); + } + }; + + socket.onclose = () => { + socket._gdevelopMcpBridgeIsOpen = false; + if (socketRef.current === socket) socketRef.current = null; + if (!closed) { + retryTimeoutId = setTimeout(connect, 2000); + } + }; + + socket.onerror = () => { + // Keep the editor quiet if the MCP server is not running. + }; + }; + + connect(); + + return () => { + closed = true; + if (retryTimeoutId) clearTimeout(retryTimeoutId); + const socket = socketRef.current; + if (socket) socket.close(); + }; + }, + [sendStateChanged] + ); + + React.useEffect( + () => { + sendStateChanged(); + }, + [ + props.project, + props.currentFileMetadata, + props.editorTabs, + props.hasUnsavedChanges, + props.previewState, + sendStateChanged, + ] + ); + + return null; +} diff --git a/newIDE/app/src/AssetStore/ObjectListItem.js b/newIDE/app/src/AssetStore/ObjectListItem.js index eaf8127d4fc3..98c09d4a28c1 100644 --- a/newIDE/app/src/AssetStore/ObjectListItem.js +++ b/newIDE/app/src/AssetStore/ObjectListItem.js @@ -96,6 +96,7 @@ export const ObjectListItem = ({ return ( ( - function IdentifierField(props, ref) { - const { - project, - scope, +const IdentifierExpressionField = React.forwardRef< + ParameterFieldProps, + ParameterFieldInterface +>(function IdentifierExpressionField(props, ref) { + const { + project, + scope, + instructionMetadata, + instruction, + expressionMetadata, + expression, + parameterIndex, + } = props; + const { layout } = scope; + + const objectName = + getLastObjectParameterValue({ instructionMetadata, instruction, expressionMetadata, expression, parameterIndex, - } = props; - const { layout } = scope; + }) || ''; + + const autocompletionIdentifierNames: Array = React.useMemo( + () => { + if (parameterIndex === undefined) { + return []; + } + const parameterMetadata = instructionMetadata + ? instructionMetadata.getParameter(parameterIndex) + : expressionMetadata + ? expressionMetadata.getParameter(parameterIndex) + : null; + const identifierName = parameterMetadata + ? parameterMetadata.getExtraInfo() + : ''; + + const allIdentifierExpressions = + project && layout + ? gd.EventsIdentifiersFinder.findAllIdentifierExpressions( + project.getCurrentPlatform(), + project, + layout, + identifierName, + objectName + ) + .toNewVectorString() + .toJSArray() + : []; - const objectName = - getLastObjectParameterValue({ - instructionMetadata, - instruction, - expressionMetadata, - expression, - parameterIndex, - }) || ''; + return allIdentifierExpressions.map(expression => ({ + kind: 'FullExpression', + completion: expression, + })); + }, + [ + project, + layout, + expressionMetadata, + instructionMetadata, + parameterIndex, + // Users can change the objectName with other fields. + objectName, + ] + ); - const autocompletionIdentifierNames: Array = React.useMemo( - () => { - if (!parameterIndex) { - return []; - } - const parameterMetadata = instructionMetadata - ? instructionMetadata.getParameter(parameterIndex) - : expressionMetadata - ? expressionMetadata.getParameter(parameterIndex) - : null; - const identifierName = parameterMetadata - ? parameterMetadata.getExtraInfo() - : ''; + const field = React.useRef(null); - const allIdentifierExpressions = - project && layout - ? gd.EventsIdentifiersFinder.findAllIdentifierExpressions( - project.getCurrentPlatform(), - project, - layout, - identifierName, - objectName - ) - .toNewVectorString() - .toJSArray() - : []; + const focus: FieldFocusFunction = options => { + if (field.current) field.current.focus(options); + }; + React.useImperativeHandle(ref, () => ({ + focus, + })); - return allIdentifierExpressions.map(expression => ({ - kind: 'FullExpression', - completion: expression, - })); - }, - [ - project, - layout, - expressionMetadata, - instructionMetadata, - parameterIndex, - // Users can change the objectName with other fields. - objectName, - ] - ); + React.useEffect(() => { + focus(); + }, []); - const field = React.useRef(null); + return ( + + autocompletionIdentifierNames.filter( + ({ completion }) => completion.indexOf(expression) === 0 + ) + } + id={ + props.parameterIndex !== undefined + ? `parameter-${props.parameterIndex}-identifier` + : undefined + } + ref={field} + {...props} + /> + ); +}); - const focus: FieldFocusFunction = options => { - if (field.current) field.current.focus(options); - }; - React.useImperativeHandle(ref, () => ({ - focus, - })); +export default (React.forwardRef( + function IdentifierField(props, ref) { + const parameterMetadata = + props.parameterMetadata || + (props.parameterIndex !== undefined + ? props.instructionMetadata + ? props.instructionMetadata.getParameter(props.parameterIndex) + : props.expressionMetadata + ? props.expressionMetadata.getParameter(props.parameterIndex) + : null + : null); - React.useEffect(() => { - focus(); - }, []); + if ( + parameterMetadata && + parameterMetadata.getExtraInfo() === timelineNameIdentifierExtraInfo + ) { + return ; + } + if ( + parameterMetadata && + parameterMetadata.getExtraInfo() === + timelineBindingNameIdentifierExtraInfo + ) { + return ; + } - return ( - - autocompletionIdentifierNames.filter( - ({ completion }) => completion.indexOf(expression) === 0 - ) - } - id={ - props.parameterIndex !== undefined - ? `parameter-${props.parameterIndex}-identifier` - : undefined - } - ref={field} - {...props} - /> - ); + return ; } ): React.ComponentType<{ ...ParameterFieldProps, diff --git a/newIDE/app/src/EventsSheet/ParameterFields/ParameterMetadataTools.js b/newIDE/app/src/EventsSheet/ParameterFields/ParameterMetadataTools.js index f98fc504464d..055cd7daa922 100644 --- a/newIDE/app/src/EventsSheet/ParameterFields/ParameterMetadataTools.js +++ b/newIDE/app/src/EventsSheet/ParameterFields/ParameterMetadataTools.js @@ -153,15 +153,46 @@ export const getParameterChoiceAutocompletions = ( completion: `"${choice}"`, })); -export const getParameterChoiceValues = ( +type ParameterChoice = {| + value: string, + label: ?string, +|}; + +export const getParameterChoices = ( parameterMetadata: ?gdParameterMetadata -): Array => { +): Array => { if (!parameterMetadata) { return []; } try { - return JSON.parse(parameterMetadata.getExtraInfo()); + const parsedChoices = JSON.parse(parameterMetadata.getExtraInfo()); + if (!Array.isArray(parsedChoices)) { + return []; + } + + const choices: Array = []; + parsedChoices.forEach(choice => { + if (typeof choice === 'string') { + choices.push({ value: choice, label: null }); + return; + } + + if (choice && typeof choice === 'object') { + const choiceObject = (choice: any); + if (typeof choiceObject.value === 'string') { + choices.push({ + value: choiceObject.value, + label: + typeof choiceObject.label === 'string' + ? choiceObject.label + : null, + }); + } + } + }); + + return choices; } catch (exception) { console.error( 'The parameter seems misconfigured, as an array of choices could not be extracted - verify that your properly wrote a list of choices in JSON format. Full exception is:', @@ -171,3 +202,8 @@ export const getParameterChoiceValues = ( return []; }; + +export const getParameterChoiceValues = ( + parameterMetadata: ?gdParameterMetadata +): Array => + getParameterChoices(parameterMetadata).map(choice => choice.value); diff --git a/newIDE/app/src/EventsSheet/ParameterFields/Spine43NameField.js b/newIDE/app/src/EventsSheet/ParameterFields/Spine43NameField.js new file mode 100644 index 000000000000..46b2c76f274d --- /dev/null +++ b/newIDE/app/src/EventsSheet/ParameterFields/Spine43NameField.js @@ -0,0 +1,499 @@ +// @flow +import * as React from 'react'; +import { Trans, t } from '@lingui/macro'; +import GenericExpressionField from './GenericExpressionField'; +import { + type ParameterFieldProps, + type ParameterFieldInterface, + type FieldFocusFunction, +} from './ParameterFieldCommons'; +import { + getLastObjectParameterValue, + getPreviousParameterValue, + tryExtractStringLiteralContent, +} from './ParameterMetadataTools'; +import SelectField, { type SelectFieldInterface } from '../../UI/SelectField'; +import SelectOption from '../../UI/SelectOption'; +import { TextFieldWithButtonLayout } from '../../UI/Layout'; +import FlatButton from '../../UI/FlatButton'; +import RaisedButton from '../../UI/RaisedButton'; +import Functions from '@material-ui/icons/Functions'; +import TypeCursorSelect from '../../UI/CustomSvgIcons/TypeCursorSelect'; +import getObjectByName from '../../Utils/GetObjectByName'; +import ResourcesLoader from '../../ResourcesLoader'; + +const gd: libGDevelop = global.gd; + +type Spine43ObjectContent = { + binaryData?: boolean, + skeletonResource?: ?string, + ... +}; + +export const SPINE43_NAME_KINDS = { + animation: 'spine43AnimationName', + skin: 'spine43SkinName', + slot: 'spine43SlotName', + attachment: 'spine43AttachmentName', +}; + +export const isSpine43NameKind = (extraInfo: ?string): boolean => + extraInfo === SPINE43_NAME_KINDS.animation || + extraInfo === SPINE43_NAME_KINDS.skin || + extraInfo === SPINE43_NAME_KINDS.slot || + extraInfo === SPINE43_NAME_KINDS.attachment; + +const skeletonPromises: { [string]: Promise, ... } = {}; + +const getNodeRequire = (): any => { + if (typeof global !== 'undefined' && typeof global.require === 'function') { + return global.require; + } + if (typeof window !== 'undefined' && typeof window.require === 'function') { + return window.require; + } + return null; +}; + +const toFileUrl = (absolutePath: string): string => { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + try { + const nodeUrl = nodeRequire('url'); + if (nodeUrl && nodeUrl.pathToFileURL) { + return nodeUrl.pathToFileURL(absolutePath).toString(); + } + } catch (error) { + // Fall back to a manually-built file URL below. + } + } + return 'file:///' + String(absolutePath || '').replace(/\\/g, '/'); +}; + +const fileUrlToPath = (fileUrl: string): string => { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + try { + const nodeUrl = nodeRequire('url'); + if (nodeUrl && nodeUrl.fileURLToPath) { + return nodeUrl.fileURLToPath(fileUrl); + } + } catch (error) { + // Fall back to a manually-decoded path below. + } + } + return decodeURIComponent(String(fileUrl).replace(/^file:\/\/\/?/i, '')); +}; + +const getObjectContent = (object: any): ?Spine43ObjectContent => { + if (!object || object.getType() !== 'Spine43Object::Spine43Object') { + return null; + } + + try { + const jsImplementation = (gd.asObjectJsImplementation( + object.getConfiguration() + ): any); + return jsImplementation.content || {}; + } catch (error) { + return null; + } +}; + +const resolveSkeletonUrl = ( + project: ?gdProject, + skeletonResource: ?string +): string => { + const value = String(skeletonResource || '').trim(); + if (!project || !value) return ''; + + let file = value; + let isProjectResource = false; + const projectAsAny = (project: any); + const resourcesManager = project.getResourcesManager(); + if (resourcesManager && resourcesManager.hasResource(value)) { + isProjectResource = true; + const resource = resourcesManager.getResource(value); + const resourceAsAny = (resource: any); + if (resourceAsAny && typeof resourceAsAny.getFile === 'function') { + file = resourceAsAny.getFile() || value; + } + } + + if (/^(?:https?:|file:|data:|blob:)/i.test(file)) return file; + + const nodeRequire = getNodeRequire(); + const getProjectFile = projectAsAny.getProjectFile; + const projectFile = + typeof getProjectFile === 'function' ? getProjectFile.call(project) : ''; + if (nodeRequire && projectFile) { + try { + const nodePath = nodeRequire('path'); + return toFileUrl(nodePath.resolve(nodePath.dirname(projectFile), file)); + } catch (error) { + return file; + } + } + + if (/^[a-zA-Z]:[\\/]/.test(file)) { + return toFileUrl(file); + } + + if (isProjectResource) { + return ResourcesLoader.getResourceFullUrl(project, value, { + isResourceForPixi: false, + }); + } + + return file; +}; + +const readText = async (url: string): Promise => { + if (/^file:/i.test(url)) { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + const nodeFs = nodeRequire('fs'); + return nodeFs.readFileSync(fileUrlToPath(url), 'utf8'); + } + } + + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Unable to read Spine 4.3 skeleton: ${url}`); + } + return response.text(); +}; + +const loadSkeletonJson = async ( + project: ?gdProject, + skeletonResource: ?string +): Promise => { + if (!project) return null; + const url = resolveSkeletonUrl(project, skeletonResource); + if (!url) return null; + const projectAsAny = (project: any); + const getProjectFile = projectAsAny.getProjectFile; + const projectFile = + typeof getProjectFile === 'function' ? getProjectFile.call(project) : ''; + + const cacheKey = `${projectFile}|${url}`; + if (!skeletonPromises[cacheKey]) { + skeletonPromises[cacheKey] = readText(url).then(text => JSON.parse(text)); + } + return skeletonPromises[cacheKey]; +}; + +const getAnimationNames = (skeletonJson: any): Array => { + const animations = skeletonJson && skeletonJson.animations; + if (Array.isArray(animations)) { + return animations + .map(animation => String((animation && animation.name) || '')) + .filter(Boolean); + } + if (animations && typeof animations === 'object') { + return Object.keys(animations).map(name => String(name)); + } + return []; +}; + +const getSkinNames = (skeletonJson: any): Array => { + const skins = skeletonJson && skeletonJson.skins; + if (Array.isArray(skins)) { + return skins.map(skin => String((skin && skin.name) || '')).filter(Boolean); + } + if (skins && typeof skins === 'object') { + return Object.keys(skins).map(name => String(name)); + } + return []; +}; + +const getSlotNames = (skeletonJson: any): Array => { + const slots = skeletonJson && skeletonJson.slots; + if (!Array.isArray(slots)) return []; + return slots.map(slot => String((slot && slot.name) || '')).filter(Boolean); +}; + +const getSkinAttachments = (skin: any): any => { + if (!skin) return null; + if (skin.attachments) return skin.attachments; + return skin; +}; + +const getAttachmentNames = ( + skeletonJson: any, + slotName: ?string +): Array => { + const targetSlotName = String(slotName || '').trim(); + if (!targetSlotName) return []; + + const skins = skeletonJson && skeletonJson.skins; + const names: Set = new Set(); + const collectFromSkin = (skin: any) => { + const attachments = getSkinAttachments(skin); + if (!attachments || !attachments[targetSlotName]) return; + Object.keys(attachments[targetSlotName]).forEach(name => names.add(name)); + }; + + if (Array.isArray(skins)) { + skins.forEach(collectFromSkin); + } else if (skins && typeof skins === 'object') { + Object.keys(skins).forEach(skinName => collectFromSkin(skins[skinName])); + } + + return Array.from(names); +}; + +const getNamesForKind = ( + skeletonJson: any, + kind: ?string, + slotName: ?string +): Array => { + if (kind === SPINE43_NAME_KINDS.animation) + return getAnimationNames(skeletonJson); + if (kind === SPINE43_NAME_KINDS.skin) return getSkinNames(skeletonJson); + if (kind === SPINE43_NAME_KINDS.slot) return getSlotNames(skeletonJson); + if (kind === SPINE43_NAME_KINDS.attachment) { + return getAttachmentNames(skeletonJson, slotName); + } + return []; +}; + +const getHintText = (kind: ?string): string => { + if (kind === SPINE43_NAME_KINDS.animation) return t`Choose an animation`; + if (kind === SPINE43_NAME_KINDS.skin) return t`Choose a skin`; + if (kind === SPINE43_NAME_KINDS.slot) return t`Choose a slot`; + if (kind === SPINE43_NAME_KINDS.attachment) return t`Choose an attachment`; + return t`Choose a value`; +}; + +export default (React.forwardRef( + function Spine43NameField(props: ParameterFieldProps, ref) { + const field = React.useRef(null); + const focus: FieldFocusFunction = options => { + if (field.current) field.current.focus(options); + }; + React.useImperativeHandle(ref, () => ({ + focus, + })); + + const { + project, + globalObjectsContainer, + objectsContainer, + instructionMetadata, + instruction, + expressionMetadata, + expression, + parameterIndex, + parameterMetadata, + value, + onChange, + isInline, + } = props; + + const kind = parameterMetadata ? parameterMetadata.getExtraInfo() : ''; + const previousParameterValue = getPreviousParameterValue({ + instruction, + expression, + parameterIndex, + }); + const [names, setNames] = React.useState>([]); + + React.useEffect( + () => { + let cancelled = false; + (async () => { + const objectName = getLastObjectParameterValue({ + instructionMetadata, + instruction, + expressionMetadata, + expression, + parameterIndex, + }); + if (!project || !objectName || !isSpine43NameKind(kind)) { + if (!cancelled) setNames([]); + return; + } + + const object = getObjectByName( + globalObjectsContainer, + objectsContainer, + objectName + ); + const content = getObjectContent(object); + if (!content || content.binaryData) { + if (!cancelled) setNames([]); + return; + } + + try { + const skeletonJson = await loadSkeletonJson( + project, + content.skeletonResource + ); + if (cancelled) return; + + const slotName = tryExtractStringLiteralContent( + previousParameterValue + ); + setNames(getNamesForKind(skeletonJson, kind, slotName)); + } catch (error) { + if (!cancelled) setNames([]); + } + })(); + + return () => { + cancelled = true; + }; + }, + [ + project, + globalObjectsContainer, + objectsContainer, + instructionMetadata, + instruction, + expressionMetadata, + expression, + parameterIndex, + kind, + previousParameterValue, + ] + ); + + const isCurrentValueInNames = names.some(name => `"${name}"` === value); + const [isExpressionField, setIsExpressionField] = React.useState( + (!!value && !isCurrentValueInNames) || names.length === 0 + ); + const [wasManuallySwitched, setWasManuallySwitched] = React.useState(false); + + React.useEffect( + () => { + if (!value && names.length > 0 && !isExpressionField) { + onChange(`"${names[0]}"`); + } + }, + [isExpressionField, names, onChange, value] + ); + + React.useEffect( + () => { + if ( + !wasManuallySwitched && + names.length > 0 && + isExpressionField && + (!value || isCurrentValueInNames) + ) { + setIsExpressionField(false); + } + }, + [ + isExpressionField, + isCurrentValueInNames, + names.length, + value, + wasManuallySwitched, + ] + ); + + React.useEffect( + () => { + if (!wasManuallySwitched && names.length === 0 && !isExpressionField) { + setIsExpressionField(true); + } + }, + [isExpressionField, names.length, wasManuallySwitched] + ); + + const switchFieldType = () => { + setWasManuallySwitched(true); + setIsExpressionField(!isExpressionField); + }; + + // $FlowFixMe[missing-local-annot] + const onChangeSelectValue = (event, value) => { + onChange(event.target.value); + }; + + const fieldLabel = parameterMetadata + ? parameterMetadata.getDescription() + : undefined; + + const selectOptions = names.map(name => ( + + )); + + return ( + + !isExpressionField ? ( + + {selectOptions} + + ) : ( + + ) + } + renderButton={style => + names.length > 0 ? ( + isExpressionField ? ( + } + style={style} + primary + label={Select} + onClick={switchFieldType} + /> + ) : ( + } + style={style} + primary + label={Use an expression} + onClick={switchFieldType} + /> + ) + ) : null + } + /> + ); + } +): React.ComponentType<{ + ...ParameterFieldProps, + +ref?: React.RefSetter, +}>); diff --git a/newIDE/app/src/EventsSheet/ParameterFields/StringField.js b/newIDE/app/src/EventsSheet/ParameterFields/StringField.js index 50f5c9c21575..d6f0a7cf6a0e 100644 --- a/newIDE/app/src/EventsSheet/ParameterFields/StringField.js +++ b/newIDE/app/src/EventsSheet/ParameterFields/StringField.js @@ -6,29 +6,56 @@ import { type ParameterFieldInterface, type FieldFocusFunction, } from './ParameterFieldCommons'; +import Spine43NameField, { isSpine43NameKind } from './Spine43NameField'; +import TimelineNameField, { + timelineNameIdentifierExtraInfo, +} from './TimelineNameField'; +import TimelineBindingNameField, { + timelineBindingNameIdentifierExtraInfo, +} from './TimelineBindingNameField'; + +const DefaultStringField = React.forwardRef< + ParameterFieldProps, + ParameterFieldInterface +>(function DefaultStringField(props: ParameterFieldProps, ref) { + const field = React.useRef(null); + const focus: FieldFocusFunction = options => { + if (field.current) field.current.focus(options); + }; + React.useImperativeHandle(ref, () => ({ + focus, + })); + + return ( + + ); +}); export default (React.forwardRef( function StringField(props: ParameterFieldProps, ref) { - const field = React.useRef(null); - const focus: FieldFocusFunction = options => { - if (field.current) field.current.focus(options); - }; - React.useImperativeHandle(ref, () => ({ - focus, - })); + const extraInfo = props.parameterMetadata + ? props.parameterMetadata.getExtraInfo() + : ''; + if (isSpine43NameKind(extraInfo)) { + return ; + } + if (extraInfo === timelineNameIdentifierExtraInfo) { + return ; + } + if (extraInfo === timelineBindingNameIdentifierExtraInfo) { + return ; + } - return ( - - ); + return ; } ): React.ComponentType<{ ...ParameterFieldProps, diff --git a/newIDE/app/src/EventsSheet/ParameterFields/StringWithSelectorField.js b/newIDE/app/src/EventsSheet/ParameterFields/StringWithSelectorField.js index b21816f26b4f..3437d56faaad 100644 --- a/newIDE/app/src/EventsSheet/ParameterFields/StringWithSelectorField.js +++ b/newIDE/app/src/EventsSheet/ParameterFields/StringWithSelectorField.js @@ -15,7 +15,7 @@ import RaisedButton from '../../UI/RaisedButton'; import Functions from '@material-ui/icons/Functions'; import FlatButton from '../../UI/FlatButton'; import TypeCursorSelect from '../../UI/CustomSvgIcons/TypeCursorSelect'; -import { getParameterChoiceValues } from './ParameterMetadataTools'; +import { getParameterChoices } from './ParameterMetadataTools'; export default (React.forwardRef( function StringWithSelectorField(props: ParameterFieldProps, ref) { @@ -41,10 +41,10 @@ export default (React.forwardRef( // The list is not kept with a memo because choices could be changed by // another component without this one to know. - const choices = getParameterChoiceValues(parameterMetadata); + const choices = getParameterChoices(parameterMetadata); const isCurrentValueInList = choices.some( - choice => `"${choice}"` === value + choice => `"${choice.value}"` === value ); // If the current value is not in the list, display an expression field. @@ -55,7 +55,7 @@ export default (React.forwardRef( React.useEffect( () => { if (!isExpressionField && !value && choices.length > 0) { - onChange(`"${choices[0]}"`); + onChange(`"${choices[0].value}"`); } }, [choices, isExpressionField, onChange, value] @@ -77,10 +77,10 @@ export default (React.forwardRef( const selectOptions = choices.map(choice => { return ( ); }); diff --git a/newIDE/app/src/EventsSheet/ParameterFields/TimelineBindingNameField.js b/newIDE/app/src/EventsSheet/ParameterFields/TimelineBindingNameField.js new file mode 100644 index 000000000000..e430e57181fd --- /dev/null +++ b/newIDE/app/src/EventsSheet/ParameterFields/TimelineBindingNameField.js @@ -0,0 +1,233 @@ +// @flow +import * as React from 'react'; +import { Trans, t } from '@lingui/macro'; +import GenericExpressionField from './GenericExpressionField'; +import { + type ParameterFieldProps, + type ParameterFieldInterface, + type FieldFocusFunction, +} from './ParameterFieldCommons'; +import SelectField, { type SelectFieldInterface } from '../../UI/SelectField'; +import SelectOption from '../../UI/SelectOption'; +import { TextFieldWithButtonLayout } from '../../UI/Layout'; +import FlatButton from '../../UI/FlatButton'; +import RaisedButton from '../../UI/RaisedButton'; +import Functions from '@material-ui/icons/Functions'; +import TypeCursorSelect from '../../UI/CustomSvgIcons/TypeCursorSelect'; +import { readTimelineProjectData } from '../../TimelineEditor/TimelineProjectStorage'; + +export const timelineBindingNameIdentifierExtraInfo = + 'TimelineSequencer::BindingName'; + +const toStringExpression = (value: string): string => JSON.stringify(value); + +const parseStringExpression = (value: string): ?string => { + try { + const parsedValue = JSON.parse(value); + return typeof parsedValue === 'string' ? parsedValue : null; + } catch (error) { + return null; + } +}; + +export default (React.forwardRef( + function TimelineBindingNameField(props: ParameterFieldProps, ref) { + const { + isInline, + onChange, + parameterIndex, + parameterMetadata, + project, + value, + } = props; + const field = React.useRef(null); + const focus: FieldFocusFunction = options => { + if (field.current) field.current.focus(options); + }; + React.useImperativeHandle(ref, () => ({ + focus, + })); + + const projectBindingNames = React.useMemo( + () => { + if (!project) { + return ([]: Array); + } + + const usedNames = new Set(); + const bindingNames: Array = []; + readTimelineProjectData(project).timelines.forEach(timeline => { + timeline.tracks.forEach(track => { + const target = track.target; + const bindingName = + target && target.mode === 'runtimeBinding' + ? target.bindingName + : ''; + if (!bindingName || usedNames.has(bindingName)) { + return; + } + usedNames.add(bindingName); + bindingNames.push(bindingName); + }); + }); + return bindingNames; + }, + [project] + ); + + const currentBindingName = parseStringExpression(value); + const bindingNames = React.useMemo( + () => { + const usedNames = new Set(); + const names: Array = []; + const appendBindingName = (bindingName: ?string) => { + if (!bindingName || usedNames.has(bindingName)) { + return; + } + + usedNames.add(bindingName); + names.push(bindingName); + }; + + projectBindingNames.forEach(appendBindingName); + appendBindingName(currentBindingName); + + if (names.length === 0) { + names.push('Target'); + } + + return names; + }, + [currentBindingName, projectBindingNames] + ); + + const isCurrentValueInList = bindingNames.some( + bindingName => toStringExpression(bindingName) === value + ); + const isEmptyBindingExpression = !value || currentBindingName === ''; + const hasCustomExpressionValue = !!value && currentBindingName === null; + + const [isExpressionField, setIsExpressionField] = React.useState( + hasCustomExpressionValue && !isCurrentValueInList + ); + + React.useEffect( + () => { + if ( + isExpressionField && + (isEmptyBindingExpression || isCurrentValueInList) + ) { + setIsExpressionField(false); + } + }, + [isCurrentValueInList, isEmptyBindingExpression, isExpressionField] + ); + + React.useEffect( + () => { + if ( + !isExpressionField && + isEmptyBindingExpression && + bindingNames.length > 0 + ) { + onChange(toStringExpression(bindingNames[0])); + } + }, + [bindingNames, isEmptyBindingExpression, isExpressionField, onChange] + ); + + const switchFieldType = () => { + setIsExpressionField(!isExpressionField); + }; + + // $FlowFixMe[missing-local-annot] + const onChangeSelectValue = (event, value) => { + onChange(event.target.value); + }; + + const onChangeTextValue = (value: string) => { + onChange(value); + }; + + const fieldLabel = parameterMetadata + ? parameterMetadata.getDescription() + : undefined; + + const selectOptions = bindingNames.map(bindingName => ( + + )); + + return ( + + !isExpressionField ? ( + + {selectOptions} + + ) : ( + + ) + } + renderButton={style => + isExpressionField ? ( + } + style={style} + primary + label={Select} + onClick={switchFieldType} + /> + ) : ( + } + style={style} + primary + label={Use an expression} + onClick={switchFieldType} + /> + ) + } + /> + ); + } +): React.ComponentType<{ + ...ParameterFieldProps, + +ref?: React.RefSetter, +}>); diff --git a/newIDE/app/src/EventsSheet/ParameterFields/TimelineNameField.js b/newIDE/app/src/EventsSheet/ParameterFields/TimelineNameField.js new file mode 100644 index 000000000000..cf9a0a06f0a7 --- /dev/null +++ b/newIDE/app/src/EventsSheet/ParameterFields/TimelineNameField.js @@ -0,0 +1,226 @@ +// @flow +import * as React from 'react'; +import { Trans, t } from '@lingui/macro'; +import GenericExpressionField from './GenericExpressionField'; +import { + type ParameterFieldProps, + type ParameterFieldInterface, + type FieldFocusFunction, +} from './ParameterFieldCommons'; +import SelectField, { type SelectFieldInterface } from '../../UI/SelectField'; +import SelectOption from '../../UI/SelectOption'; +import { TextFieldWithButtonLayout } from '../../UI/Layout'; +import FlatButton from '../../UI/FlatButton'; +import RaisedButton from '../../UI/RaisedButton'; +import Functions from '@material-ui/icons/Functions'; +import TypeCursorSelect from '../../UI/CustomSvgIcons/TypeCursorSelect'; +import { readTimelineProjectData } from '../../TimelineEditor/TimelineProjectStorage'; + +export const timelineNameIdentifierExtraInfo = + 'TimelineSequencer::TimelineName'; + +const toStringExpression = (value: string): string => JSON.stringify(value); + +const parseStringExpression = (value: string): ?string => { + try { + const parsedValue = JSON.parse(value); + return typeof parsedValue === 'string' ? parsedValue : null; + } catch (error) { + return null; + } +}; + +export default (React.forwardRef( + function TimelineNameField(props: ParameterFieldProps, ref) { + const { + isInline, + onChange, + parameterIndex, + parameterMetadata, + project, + value, + } = props; + const field = React.useRef(null); + const focus: FieldFocusFunction = options => { + if (field.current) field.current.focus(options); + }; + React.useImperativeHandle(ref, () => ({ + focus, + })); + + const projectTimelineNames = React.useMemo( + () => { + if (!project) { + return ([]: Array); + } + + const usedNames = new Set(); + return readTimelineProjectData(project) + .timelines.map(timeline => timeline.name) + .filter(name => { + if (!name || usedNames.has(name)) { + return false; + } + usedNames.add(name); + return true; + }); + }, + [project] + ); + + const currentTimelineName = parseStringExpression(value); + const timelineNames = React.useMemo( + () => { + const usedNames = new Set(); + const names: Array = []; + const appendTimelineName = (timelineName: ?string) => { + if (!timelineName || usedNames.has(timelineName)) { + return; + } + + usedNames.add(timelineName); + names.push(timelineName); + }; + + projectTimelineNames.forEach(appendTimelineName); + appendTimelineName(currentTimelineName); + + if (names.length === 0) { + names.push('Timeline'); + } + + return names; + }, + [currentTimelineName, projectTimelineNames] + ); + + const isCurrentValueInList = timelineNames.some( + timelineName => toStringExpression(timelineName) === value + ); + const isEmptyTimelineExpression = !value || currentTimelineName === ''; + const hasCustomExpressionValue = !!value && currentTimelineName === null; + + const [isExpressionField, setIsExpressionField] = React.useState( + hasCustomExpressionValue && !isCurrentValueInList + ); + + React.useEffect( + () => { + if ( + isExpressionField && + (isEmptyTimelineExpression || isCurrentValueInList) + ) { + setIsExpressionField(false); + } + }, + [isCurrentValueInList, isEmptyTimelineExpression, isExpressionField] + ); + + React.useEffect( + () => { + if ( + !isExpressionField && + isEmptyTimelineExpression && + timelineNames.length > 0 + ) { + onChange(toStringExpression(timelineNames[0])); + } + }, + [isEmptyTimelineExpression, isExpressionField, onChange, timelineNames] + ); + + const switchFieldType = () => { + setIsExpressionField(!isExpressionField); + }; + + // $FlowFixMe[missing-local-annot] + const onChangeSelectValue = (event, value) => { + onChange(event.target.value); + }; + + const onChangeTextValue = (value: string) => { + onChange(value); + }; + + const fieldLabel = parameterMetadata + ? parameterMetadata.getDescription() + : undefined; + + const selectOptions = timelineNames.map(timelineName => ( + + )); + + return ( + + !isExpressionField ? ( + + {selectOptions} + + ) : ( + + ) + } + renderButton={style => + isExpressionField ? ( + } + style={style} + primary + label={Select} + onClick={switchFieldType} + /> + ) : ( + } + style={style} + primary + label={Use an expression} + onClick={switchFieldType} + /> + ) + } + /> + ); + } +): React.ComponentType<{ + ...ParameterFieldProps, + +ref?: React.RefSetter, +}>); diff --git a/newIDE/app/src/ExportAndShare/BrowserExporters/BrowserElectronExport.js b/newIDE/app/src/ExportAndShare/BrowserExporters/BrowserElectronExport.js index a830f414961e..16a4e3ff2fee 100644 --- a/newIDE/app/src/ExportAndShare/BrowserExporters/BrowserElectronExport.js +++ b/newIDE/app/src/ExportAndShare/BrowserExporters/BrowserElectronExport.js @@ -17,19 +17,28 @@ import { type ExportPipelineContext, } from '../ExportPipeline.flow'; import RaisedButton from '../../UI/RaisedButton'; +import { Column, Line } from '../../UI/Grid'; import { BlobDownloadUrlHolder, openBlobDownloadUrl, } from '../../Utils/BlobDownloadUrlHolder'; import { + type ElectronWindowOptions, ExplanationHeader, DoneFooter, ExportFlow, + getDefaultElectronWindowOptions, + ElectronWindowOptionsEditor, + applyElectronWindowOptionsToExportOptions, + getElectronWindowOptionsFromProjectEvents, + mergeElectronWindowOptions, } from '../GenericExporters/ElectronExport'; const gd: libGDevelop = global.gd; -type ExportState = null; +type ExportState = {| + electronWindowOptions: ElectronWindowOptions, +|}; type PreparedExporter = {| exporter: gdjsExporter, @@ -61,13 +70,35 @@ export const browserElectronExportPipeline: ExportPipeline< name: exportPipelineName, packageNameWarningType: 'desktop', - getInitialExportState: () => null, + getInitialExportState: () => ({ + electronWindowOptions: getDefaultElectronWindowOptions(), + }), canLaunchBuild: () => true, isNavigationDisabled: () => false, - renderHeader: () => , + renderHeader: ({ exportState, updateExportState, isExporting }) => ( + + + + + + + + { + updateExportState(prevExportState => ({ + ...prevExportState, + electronWindowOptions, + })); + }} + disabled={isExporting} + /> + + + ), renderExportFlow: (props: ExportFlowProps) => ( @@ -106,6 +137,14 @@ export const browserElectronExportPipeline: ExportPipeline< const { project } = context; const exportOptions = new gd.ExportOptions(project, outputDir); exportOptions.setTarget('electron'); + const electronWindowOptions = mergeElectronWindowOptions( + context.exportState.electronWindowOptions, + getElectronWindowOptionsFromProjectEvents(project) + ); + applyElectronWindowOptionsToExportOptions( + exportOptions, + electronWindowOptions + ); if (fallbackAuthor) { exportOptions.setFallbackAuthor( fallbackAuthor.id, diff --git a/newIDE/app/src/ExportAndShare/BrowserExporters/BrowserOnlineElectronExport.js b/newIDE/app/src/ExportAndShare/BrowserExporters/BrowserOnlineElectronExport.js index e6ca65f0d728..183128a14509 100644 --- a/newIDE/app/src/ExportAndShare/BrowserExporters/BrowserOnlineElectronExport.js +++ b/newIDE/app/src/ExportAndShare/BrowserExporters/BrowserOnlineElectronExport.js @@ -27,6 +27,10 @@ import { SetupExportHeader, ExportFlow, } from '../GenericExporters/OnlineElectronExport'; +import { + applyElectronWindowOptionsToExportOptions, + getElectronWindowOptionsFromProjectEvents, +} from '../GenericExporters/ElectronExport'; const gd: libGDevelop = global.gd; @@ -115,6 +119,10 @@ export const browserOnlineElectronExportPipeline: ExportPipeline< const { project } = context; const exportOptions = new gd.ExportOptions(project, outputDir); exportOptions.setTarget('electron'); + applyElectronWindowOptionsToExportOptions( + exportOptions, + getElectronWindowOptionsFromProjectEvents(project) + ); if (fallbackAuthor) { exportOptions.setFallbackAuthor( fallbackAuthor.id, diff --git a/newIDE/app/src/ExportAndShare/GenericExporters/ElectronExport.js b/newIDE/app/src/ExportAndShare/GenericExporters/ElectronExport.js index d166a319da76..b1073294f7d9 100644 --- a/newIDE/app/src/ExportAndShare/GenericExporters/ElectronExport.js +++ b/newIDE/app/src/ExportAndShare/GenericExporters/ElectronExport.js @@ -2,6 +2,7 @@ import { Trans } from '@lingui/macro'; import * as React from 'react'; import Text from '../../UI/Text'; +import Checkbox from '../../UI/Checkbox'; import { Column, Line } from '../../UI/Grid'; import { ColumnStackLayout, LineStackLayout } from '../../UI/Layout'; import Check from '../../UI/CustomSvgIcons/Check'; @@ -11,6 +12,301 @@ import { getHelpLink } from '../../Utils/HelpLink'; import Window from '../../Utils/Window'; import RaisedButton from '../../UI/RaisedButton'; import { type ExportFlowProps } from '../ExportPipeline.flow'; +import { serializeToJSObject } from '../../Utils/Serializer'; + +const transparentWindowInstructionTypes = new Set([ + 'AdvancedWindow::ApplyDesktopPetWindowMode', + 'AdvancedWindow::SetWindowBackgroundColor', +]); + +const framelessWindowInstructionTypes = new Set([ + 'AdvancedWindow::ApplyDesktopPetWindowMode', + 'AdvancedWindow::SetWindowFrameless', +]); + +export type ElectronWindowOptions = {| + transparentWindow: boolean, + framelessWindow: boolean, + transparentRuntimeBackground: boolean, + disableWindowShadow: boolean, + disableHardwareAcceleration: boolean, +|}; + +export const getDefaultElectronWindowOptions = (): ElectronWindowOptions => ({ + transparentWindow: false, + framelessWindow: false, + transparentRuntimeBackground: false, + disableWindowShadow: false, + disableHardwareAcceleration: false, +}); + +const normalizeInstructionParameter = (parameter: mixed): string => { + if (typeof parameter !== 'string') return ''; + + return parameter + .replace(/^"(.*)"$/, '$1') + .trim() + .toLowerCase(); +}; + +const isYesNoInstructionParameterEnabled = ( + parameters: mixed, + index: number, + defaultValue: boolean +): boolean => { + if (!Array.isArray(parameters)) return defaultValue; + + const value = normalizeInstructionParameter(parameters[index]); + if (!value) return defaultValue; + + return value === 'yes' || value === 'true' || value === '1'; +}; + +const isTransparentBackgroundColorParameter = (parameters: mixed): boolean => { + if (!Array.isArray(parameters)) return false; + + const value = normalizeInstructionParameter(parameters[0]); + if (!value) { + // SetWindowBackgroundColor defaults to #00000000. + return true; + } + + return ( + value === 'transparent' || + value === '#00000000' || + value === '00000000' || + ((value.length === 9 || value.length === 8) && value.endsWith('00')) + ); +}; + +const getSerializedEventsForElectronWindowOptions = ( + project: gdProject, + sceneName?: ?string +): Array => { + if (sceneName) { + if (!project.hasLayoutNamed(sceneName)) return []; + + return [serializeToJSObject(project.getLayout(sceneName).getEvents())]; + } + + const serializedEvents: Array = []; + for (let index = 0; index < project.getLayoutsCount(); index++) { + serializedEvents.push( + serializeToJSObject(project.getLayoutAt(index).getEvents()) + ); + } + for (let index = 0; index < project.getExternalEventsCount(); index++) { + serializedEvents.push( + serializeToJSObject(project.getExternalEventsAt(index).getEvents()) + ); + } + + return serializedEvents; +}; + +export const getElectronWindowOptionsFromProjectEvents = ( + project: gdProject, + sceneName?: ?string +): ElectronWindowOptions => { + let serializedEventsContainers: Array = []; + try { + serializedEventsContainers = getSerializedEventsForElectronWindowOptions( + project, + sceneName + ); + } catch (error) { + console.warn( + 'Unable to inspect events for Electron window settings:', + error + ); + return getDefaultElectronWindowOptions(); + } + + const electronWindowOptions = getDefaultElectronWindowOptions(); + const valuesToInspect: Array = serializedEventsContainers.slice(); + while (valuesToInspect.length) { + const value = valuesToInspect.pop(); + if (!value || typeof value !== 'object') continue; + + if (Array.isArray(value)) { + for (let index = 0; index < value.length; index++) { + valuesToInspect.push(value[index]); + } + continue; + } + + const inspectedValue = (value: any); + if (inspectedValue.disabled === true) continue; + + const instructionType = inspectedValue.type; + if (instructionType && typeof instructionType === 'object') { + if (transparentWindowInstructionTypes.has(instructionType.value)) { + const shouldEnableTransparentWindow = + instructionType.value === + 'AdvancedWindow::ApplyDesktopPetWindowMode' || + isTransparentBackgroundColorParameter(inspectedValue.parameters); + if (shouldEnableTransparentWindow) { + electronWindowOptions.transparentWindow = true; + electronWindowOptions.transparentRuntimeBackground = true; + } + } + + if (framelessWindowInstructionTypes.has(instructionType.value)) { + const shouldEnableFramelessWindow = + instructionType.value === + 'AdvancedWindow::ApplyDesktopPetWindowMode' || + isYesNoInstructionParameterEnabled( + inspectedValue.parameters, + 0, + false + ); + if (shouldEnableFramelessWindow) { + electronWindowOptions.framelessWindow = true; + electronWindowOptions.disableWindowShadow = true; + } + } + } + + Object.keys(inspectedValue).forEach(key => { + valuesToInspect.push(inspectedValue[key]); + }); + } + + return electronWindowOptions; +}; + +export const mergeElectronWindowOptions = ( + firstOptions: ElectronWindowOptions, + secondOptions: ElectronWindowOptions +): ElectronWindowOptions => ({ + transparentWindow: + firstOptions.transparentWindow || secondOptions.transparentWindow, + framelessWindow: + firstOptions.framelessWindow || secondOptions.framelessWindow, + transparentRuntimeBackground: + firstOptions.transparentRuntimeBackground || + secondOptions.transparentRuntimeBackground, + disableWindowShadow: + firstOptions.disableWindowShadow || secondOptions.disableWindowShadow, + disableHardwareAcceleration: + firstOptions.disableHardwareAcceleration || + secondOptions.disableHardwareAcceleration, +}); + +export const applyElectronWindowOptionsToExportOptions = ( + exportOptions: gdExportOptions, + electronWindowOptions: ElectronWindowOptions +) => { + exportOptions + .setElectronTransparentWindow(electronWindowOptions.transparentWindow) + .setElectronFramelessWindow(electronWindowOptions.framelessWindow) + .setElectronTransparentRuntimeBackground( + electronWindowOptions.transparentRuntimeBackground + ) + .setElectronDisableWindowShadow(electronWindowOptions.disableWindowShadow) + .setElectronDisableHardwareAcceleration( + electronWindowOptions.disableHardwareAcceleration + ); +}; + +export const ElectronWindowOptionsEditor = ({ + electronWindowOptions, + onChange, + disabled, +}: {| + electronWindowOptions: ElectronWindowOptions, + onChange: (electronWindowOptions: ElectronWindowOptions) => void, + disabled: boolean, +|}): React.Node => { + const setOption = ( + optionName: $Keys, + checked: boolean + ) => { + const nextElectronWindowOptions: ElectronWindowOptions = { + ...electronWindowOptions, + transparentWindow: + optionName === 'transparentWindow' + ? checked + : electronWindowOptions.transparentWindow, + framelessWindow: + optionName === 'framelessWindow' + ? checked + : electronWindowOptions.framelessWindow, + transparentRuntimeBackground: + optionName === 'transparentRuntimeBackground' + ? checked + : electronWindowOptions.transparentRuntimeBackground, + disableWindowShadow: + optionName === 'disableWindowShadow' + ? checked + : electronWindowOptions.disableWindowShadow, + disableHardwareAcceleration: + optionName === 'disableHardwareAcceleration' + ? checked + : electronWindowOptions.disableHardwareAcceleration, + }; + + if (optionName === 'transparentWindow' && checked) { + nextElectronWindowOptions.transparentRuntimeBackground = true; + } + + onChange(nextElectronWindowOptions); + }; + + return ( + + + + Desktop window options + + + Transparent native window} + checked={electronWindowOptions.transparentWindow} + onCheck={(e, checked) => setOption('transparentWindow', checked)} + disabled={disabled} + tooltipOrHelperText={ + + Creates the Electron window with native transparency enabled. + + } + /> + Frameless window} + checked={electronWindowOptions.framelessWindow} + onCheck={(e, checked) => setOption('framelessWindow', checked)} + disabled={disabled} + /> + Transparent game background} + checked={electronWindowOptions.transparentRuntimeBackground} + onCheck={(e, checked) => + setOption('transparentRuntimeBackground', checked) + } + disabled={disabled} + /> + Disable window shadow} + checked={electronWindowOptions.disableWindowShadow} + onCheck={(e, checked) => setOption('disableWindowShadow', checked)} + disabled={disabled} + /> + Disable hardware acceleration} + checked={electronWindowOptions.disableHardwareAcceleration} + onCheck={(e, checked) => + setOption('disableHardwareAcceleration', checked) + } + disabled={disabled} + tooltipOrHelperText={ + + Use only as a compatibility option for transparent windows. + + } + /> + + ); +}; export const ExplanationHeader = (): React.Node => ( diff --git a/newIDE/app/src/ExportAndShare/LocalExporters/LocalElectronExport.js b/newIDE/app/src/ExportAndShare/LocalExporters/LocalElectronExport.js index 051664af8749..203b4c7c9082 100644 --- a/newIDE/app/src/ExportAndShare/LocalExporters/LocalElectronExport.js +++ b/newIDE/app/src/ExportAndShare/LocalExporters/LocalElectronExport.js @@ -15,9 +15,15 @@ import { type ExportPipelineContext, } from '../ExportPipeline.flow'; import { + type ElectronWindowOptions, ExplanationHeader, DoneFooter, ExportFlow, + getDefaultElectronWindowOptions, + ElectronWindowOptionsEditor, + applyElectronWindowOptionsToExportOptions, + getElectronWindowOptionsFromProjectEvents, + mergeElectronWindowOptions, } from '../GenericExporters/ElectronExport'; import { downloadUrlsToLocalFiles } from '../../Utils/LocalFileDownloader'; // It's important to use remote and not electron for folder actions, @@ -28,9 +34,10 @@ const shell = remote ? remote.shell : null; const gd: libGDevelop = global.gd; -type ExportState = { +type ExportState = {| outputDir: string, -}; + electronWindowOptions: ElectronWindowOptions, +|}; type PreparedExporter = {| exporter: gdjsExporter, @@ -59,13 +66,20 @@ export const localElectronExportPipeline: ExportPipeline< getInitialExportState: (project: gdProject) => ({ outputDir: project.getLastCompilationDirectory(), + electronWindowOptions: getDefaultElectronWindowOptions(), }), canLaunchBuild: exportState => !!exportState.outputDir, isNavigationDisabled: () => false, - renderHeader: ({ project, exportState, updateExportState, exportStep }) => + renderHeader: ({ + project, + exportState, + updateExportState, + exportStep, + isExporting, + }) => exportStep !== 'done' ? ( @@ -79,12 +93,27 @@ export const localElectronExportPipeline: ExportPipeline< value={exportState.outputDir} defaultPath={project.getLastCompilationDirectory()} onChange={outputDir => { - updateExportState(() => ({ outputDir })); + updateExportState(prevExportState => ({ + ...prevExportState, + outputDir, + })); project.setLastCompilationDirectory(outputDir); }} fullWidth /> + + { + updateExportState(prevExportState => ({ + ...prevExportState, + electronWindowOptions, + })); + }} + disabled={isExporting} + /> + ) : null, @@ -125,6 +154,14 @@ export const localElectronExportPipeline: ExportPipeline< context.exportState.outputDir ); exportOptions.setTarget('electron'); + const electronWindowOptions = mergeElectronWindowOptions( + context.exportState.electronWindowOptions, + getElectronWindowOptionsFromProjectEvents(context.project) + ); + applyElectronWindowOptionsToExportOptions( + exportOptions, + electronWindowOptions + ); if (fallbackAuthor) { exportOptions.setFallbackAuthor( fallbackAuthor.id, diff --git a/newIDE/app/src/ExportAndShare/LocalExporters/LocalOnlineElectronExport.js b/newIDE/app/src/ExportAndShare/LocalExporters/LocalOnlineElectronExport.js index 1bb682e5984f..f45d4198464a 100644 --- a/newIDE/app/src/ExportAndShare/LocalExporters/LocalOnlineElectronExport.js +++ b/newIDE/app/src/ExportAndShare/LocalExporters/LocalOnlineElectronExport.js @@ -23,6 +23,10 @@ import { SetupExportHeader, ExportFlow, } from '../GenericExporters/OnlineElectronExport'; +import { + applyElectronWindowOptionsToExportOptions, + getElectronWindowOptionsFromProjectEvents, +} from '../GenericExporters/ElectronExport'; import { downloadUrlsToLocalFiles } from '../../Utils/LocalFileDownloader'; const path = optionalRequire('path'); @@ -120,6 +124,10 @@ export const localOnlineElectronExportPipeline: ExportPipeline< temporaryOutputDir ); exportOptions.setTarget('electron'); + applyElectronWindowOptionsToExportOptions( + exportOptions, + getElectronWindowOptionsFromProjectEvents(context.project) + ); if (fallbackAuthor) { exportOptions.setFallbackAuthor( fallbackAuthor.id, diff --git a/newIDE/app/src/ExportAndShare/LocalExporters/LocalPreviewLauncher/index.js b/newIDE/app/src/ExportAndShare/LocalExporters/LocalPreviewLauncher/index.js index 924d156790b1..6fe69936f2ea 100644 --- a/newIDE/app/src/ExportAndShare/LocalExporters/LocalPreviewLauncher/index.js +++ b/newIDE/app/src/ExportAndShare/LocalExporters/LocalPreviewLauncher/index.js @@ -22,13 +22,73 @@ import { import Window from '../../../Utils/Window'; import { getIDEVersionWithHash } from '../../../Version'; import { setEmbeddedGameFramePreviewLocation } from '../../../EmbeddedGame/EmbeddedGameFrame'; +import { + type ElectronWindowOptions, + getDefaultElectronWindowOptions, + getElectronWindowOptionsFromProjectEvents, +} from '../../GenericExporters/ElectronExport'; const electron = optionalRequire('electron'); const path = optionalRequire('path'); +const fs = optionalRequire('fs'); const ipcRenderer = electron ? electron.ipcRenderer : null; const gd: libGDevelop = global.gd; let nextPreviewId = 1; +const transparentPreviewRuntimeStyle = `html, body { + background: transparent; + background-color: transparent; + } + canvas { + background: transparent; + background-color: transparent; + }`; + +const patchTransparentPreviewOutput = (outputDir: string): void => { + if (!fs) return; + + try { + const indexHtmlPath = path.join(outputDir, 'index.html'); + if (fs.existsSync(indexHtmlPath)) { + let indexHtml = fs.readFileSync(indexHtmlPath, 'utf8'); + if (indexHtml.includes('/* GDJS_TRANSPARENT_BACKGROUND_STYLE */')) { + indexHtml = indexHtml.replace( + '/* GDJS_TRANSPARENT_BACKGROUND_STYLE */', + transparentPreviewRuntimeStyle + ); + } else if (!indexHtml.includes('background: transparent;')) { + const fallbackTransparentStyle = ``; + indexHtml = indexHtml.includes('') + ? indexHtml.replace('', `${fallbackTransparentStyle}`) + : `${fallbackTransparentStyle}${indexHtml}`; + } + fs.writeFileSync(indexHtmlPath, indexHtml, 'utf8'); + } + + const dataJsPath = path.join(outputDir, 'data.js'); + if (fs.existsSync(dataJsPath)) { + let dataJs = fs.readFileSync(dataJsPath, 'utf8'); + if (/"transparentBackground"\s*:\s*false/.test(dataJs)) { + dataJs = dataJs.replace( + /"transparentBackground"\s*:\s*false/g, + '"transparentBackground":true' + ); + } else if (!/"transparentBackground"\s*:/.test(dataJs)) { + dataJs = dataJs.replace( + /gdjs\.runtimeGameOptions\s*=\s*\{/, + 'gdjs.runtimeGameOptions = {"transparentBackground":true,' + ); + } + fs.writeFileSync(dataJsPath, dataJs, 'utf8'); + } + } catch (error) { + console.warn( + 'Unable to patch transparent preview runtime output. Continuing without the runtime background patch:', + error + ); + } +}; + type State = {| networkPreviewDialogOpen: boolean, networkPreviewHost: ?string, @@ -42,6 +102,15 @@ type State = {| useContentSize: boolean, title: string, backgroundColor: string, + transparent?: boolean, + frame?: boolean, + hasShadow?: boolean, + webPreferences: { + webSecurity: boolean, + nodeIntegration: boolean, + contextIsolation: boolean, + backgroundThrottling: boolean, + }, }, hideMenuBar: boolean, alwaysOnTop: boolean, @@ -150,29 +219,63 @@ export default class LocalPreviewLauncher extends React.Component< } }; + _resetPreviewWindowsForPreviewMode = async ( + options: PreviewOptions, + electronWindowOptions: ElectronWindowOptions + ): Promise => { + if (!ipcRenderer) return false; + + try { + const result = await ipcRenderer.invoke( + 'preview-reset-preview-window-mode', + { + alwaysOnTop: options.getIsAlwaysOnTopInPreview(), + hideMenuBar: !options.getIsMenuBarHiddenInPreview(), + useTransparentPreviewWindow: electronWindowOptions.transparentWindow, + useFramelessPreviewWindow: electronWindowOptions.framelessWindow, + } + ); + return !!(result && result.closedPreviewWindows); + } catch (error) { + console.info( + 'Unable to reset preview windows to the requested window mode - ignoring.', + error + ); + return false; + } + }; + _openPreviewWindow = ( project: gdProject, gamePath: string, - options: PreviewOptions + options: PreviewOptions, + electronWindowOptions: ElectronWindowOptions ): void => { + const useTransparentPreviewWindow = electronWindowOptions.transparentWindow; + const useFramelessPreviewWindow = electronWindowOptions.framelessWindow; + const previewBrowserWindowOptions = { + width: project.getGameResolutionWidth(), + height: project.getGameResolutionHeight(), + useContentSize: true, + title: `Preview of ${project.getName()}`, + backgroundColor: useTransparentPreviewWindow ? '#00000000' : '#000000', + transparent: useTransparentPreviewWindow ? true : undefined, + frame: useFramelessPreviewWindow ? false : true, + hasShadow: useFramelessPreviewWindow ? false : true, + webPreferences: { + webSecurity: false, // Allow to access to local files, + // Allow Node.js API access in renderer process, as long + // as we've not removed dependency on it and on "@electron/remote". + nodeIntegration: true, + contextIsolation: false, + backgroundThrottling: false, + }, + }; + this.setState( // $FlowFixMe[incompatible-type] { - previewBrowserWindowOptions: { - width: project.getGameResolutionWidth(), - height: project.getGameResolutionHeight(), - useContentSize: true, - title: `Preview of ${project.getName()}`, - backgroundColor: '#000000', - webPreferences: { - webSecurity: false, // Allow to access to local files, - // Allow Node.js API access in renderer process, as long - // as we've not removed dependency on it and on "@electron/remote". - nodeIntegration: true, - contextIsolation: false, - backgroundThrottling: false, - }, - }, + previewBrowserWindowOptions, previewGamePath: gamePath, hideMenuBar: !options.getIsMenuBarHiddenInPreview(), alwaysOnTop: options.getIsAlwaysOnTopInPreview(), @@ -255,6 +358,34 @@ export default class LocalPreviewLauncher extends React.Component< project, outputDir ); + const electronWindowOptions = previewOptions.isForInGameEdition + ? getDefaultElectronWindowOptions() + : getElectronWindowOptionsFromProjectEvents(project, sceneName); + const useTransparentPreviewWindow = electronWindowOptions.transparentWindow; + const previewExportOptionsWithTransparentRuntimeBackground = (previewExportOptions: any); + const hasTransparentRuntimeBackgroundExportOption = + typeof previewExportOptionsWithTransparentRuntimeBackground.setTransparentRuntimeBackground === + 'function'; + if (useTransparentPreviewWindow) { + console.info( + 'Transparent preview window enabled from AdvancedWindow events.' + ); + if (hasTransparentRuntimeBackgroundExportOption) { + previewExportOptionsWithTransparentRuntimeBackground.setTransparentRuntimeBackground( + true + ); + } else { + console.info( + 'Transparent preview runtime export option is unavailable in the current libGD build. A post-export patch will be used instead.' + ); + } + } + const closedPreviewWindows = !previewOptions.isForInGameEdition + ? await this._resetPreviewWindowsForPreviewMode( + previewOptions, + electronWindowOptions + ) + : false; previewExportOptions.setIsDevelopmentEnvironment(Window.isDev()); previewExportOptions.setLayoutName(sceneName); previewExportOptions.setIsInGameEdition(previewOptions.isForInGameEdition); @@ -306,7 +437,8 @@ export default class LocalPreviewLauncher extends React.Component< const debuggerIds = previewOptions.isForInGameEdition ? this.getPreviewDebuggerServer().getExistingEmbeddedGameFrameDebuggerIds() : this.getPreviewDebuggerServer().getExistingPreviewDebuggerIds(); - const shouldHotReload = previewOptions.hotReload && !!debuggerIds.length; + const shouldHotReload = + previewOptions.hotReload && !!debuggerIds.length && !closedPreviewWindows; if (shouldHotReload) { previewExportOptions.setShouldClearExportFolder( previewOptions.shouldHardReload @@ -381,6 +513,12 @@ export default class LocalPreviewLauncher extends React.Component< } exporter.exportProjectForPixiPreview(previewExportOptions); + if ( + useTransparentPreviewWindow && + !hasTransparentRuntimeBackgroundExportOption + ) { + patchTransparentPreviewOutput(outputDir); + } if (shouldHotReload) { const projectDataElement = new gd.SerializerElement(); @@ -401,6 +539,12 @@ export default class LocalPreviewLauncher extends React.Component< gd.Serializer.toJSON(runtimeGameOptionsElement) ); runtimeGameOptionsElement.delete(); + if ( + useTransparentPreviewWindow && + !hasTransparentRuntimeBackgroundExportOption + ) { + runtimeGameOptions.transparentBackground = true; + } if (previewOptions.shouldHardReload) { console.log( @@ -445,7 +589,12 @@ export default class LocalPreviewLauncher extends React.Component< } if (previewOptions.numberOfWindows >= 1) { - this._openPreviewWindow(project, outputDir, previewOptions); + this._openPreviewWindow( + project, + outputDir, + previewOptions, + electronWindowOptions + ); } } diff --git a/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js b/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js index 59b2b1ee4882..650950bb15e9 100644 --- a/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js +++ b/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js @@ -24,6 +24,10 @@ import { } from './BasicProfilingCounters'; const gd: libGDevelop = global.gd; +const isSpine43ObjectType = (objectType: string): boolean => + objectType === 'Spine43Object' || + objectType === 'Spine43Object::Spine43Object'; + export default class LayerRenderer { project: gdProject; instances: gdInitialInstancesContainer; @@ -309,20 +313,43 @@ export default class LayerRenderer { ); }; + _isSpine43Instance(instance: gdInitialInstance): boolean { + const associatedObject = getObjectByName( + this.globalObjectsContainer, + this.objectsContainer, + instance.getObjectName() + ); + return ( + !!associatedObject && isSpine43ObjectType(associatedObject.getType()) + ); + } + getUnrotatedInstanceSize = (instance: gdInitialInstance): any => { const renderedInstance = this.getOrCreateRendererOfInstance(instance); const hasCustomSize = instance.hasCustomSize(); const hasCustomDepth = instance.hasCustomDepth(); - const width = hasCustomSize - ? instance.getCustomWidth() - : renderedInstance + const renderedDefaultWidth = renderedInstance ? renderedInstance.getDefaultWidth() : 0; - const height = hasCustomSize - ? instance.getCustomHeight() - : renderedInstance + const renderedDefaultHeight = renderedInstance ? renderedInstance.getDefaultHeight() : 0; + const customWidth = hasCustomSize ? instance.getCustomWidth() : 0; + const customHeight = hasCustomSize ? instance.getCustomHeight() : 0; + const shouldUseDefaultSizeForZeroCustomSize = + hasCustomSize && + (customWidth <= 0 || customHeight <= 0) && + this._isSpine43Instance(instance); + const width = + hasCustomSize && + !(shouldUseDefaultSizeForZeroCustomSize && customWidth <= 0) + ? customWidth + : renderedDefaultWidth; + const height = + hasCustomSize && + !(shouldUseDefaultSizeForZeroCustomSize && customHeight <= 0) + ? customHeight + : renderedDefaultHeight; const depth = hasCustomDepth ? instance.getCustomDepth() : renderedInstance diff --git a/newIDE/app/src/InstancesEditor/index.js b/newIDE/app/src/InstancesEditor/index.js index 33d9ee5cdc36..562c6a0986f3 100644 --- a/newIDE/app/src/InstancesEditor/index.js +++ b/newIDE/app/src/InstancesEditor/index.js @@ -1875,6 +1875,10 @@ export default class InstancesEditor extends Component { startPIXITicker(); }; + notifyTimelinePreviewFrame = () => { + this.fpsLimiter.notifyInteractionHappened(); + }; + getInstanceSize = ( initialInstance: gdInitialInstance ): [number, number, number] => { diff --git a/newIDE/app/src/JsExtensionsLoader/BrowserJsExtensionsLoader.js b/newIDE/app/src/JsExtensionsLoader/BrowserJsExtensionsLoader.js index 34ad70d5ed04..e7162999516c 100644 --- a/newIDE/app/src/JsExtensionsLoader/BrowserJsExtensionsLoader.js +++ b/newIDE/app/src/JsExtensionsLoader/BrowserJsExtensionsLoader.js @@ -141,6 +141,12 @@ const jsExtensions = [ 'pako/dist/pako.min': require('GDJS-for-web-app-only/Runtime/Extensions/TileMap/pako/dist/pako.min'), }, }, + { + name: 'TimelineSequencer', + // $FlowFixMe[cannot-resolve-module] + extensionModule: require('GDJS-for-web-app-only/Runtime/Extensions/TimelineSequencer/JsExtension.js'), + objectsRenderingServiceModules: {}, + }, { name: 'Effects', // $FlowFixMe[cannot-resolve-module] @@ -195,6 +201,12 @@ const jsExtensions = [ extensionModule: require('GDJS-for-web-app-only/Runtime/Extensions/Spine/JsExtension.js'), objectsRenderingServiceModules: {}, }, + { + name: 'Spine43Object', + // $FlowFixMe[cannot-resolve-module] + extensionModule: require('GDJS-for-web-app-only/Runtime/Extensions/Spine43Object/JsExtension.js'), + objectsRenderingServiceModules: {}, + }, { name: 'Steamworks', // $FlowFixMe[cannot-resolve-module] diff --git a/newIDE/app/src/JsExtensionsLoader/LocalJsExtensionsLoader.js b/newIDE/app/src/JsExtensionsLoader/LocalJsExtensionsLoader.js index c8a9683efbd2..7ad4b9f5c786 100644 --- a/newIDE/app/src/JsExtensionsLoader/LocalJsExtensionsLoader.js +++ b/newIDE/app/src/JsExtensionsLoader/LocalJsExtensionsLoader.js @@ -31,7 +31,7 @@ type GetExpectedNumberOfJSExtensionModulesArguments = {| function getExpectedNumberOfJSExtensionModules( { filterExamples } /*: GetExpectedNumberOfJSExtensionModulesArguments*/ ) /*:number*/ { - return 29 + (filterExamples ? 0 : 1); + return 31 + (filterExamples ? 0 : 1); } /** diff --git a/newIDE/app/src/MainFrame/EditorContainers/TimelineEditorContainer.js b/newIDE/app/src/MainFrame/EditorContainers/TimelineEditorContainer.js new file mode 100644 index 000000000000..6da6eb8599fd --- /dev/null +++ b/newIDE/app/src/MainFrame/EditorContainers/TimelineEditorContainer.js @@ -0,0 +1,96 @@ +// @flow +import * as React from 'react'; +import type { + RenderEditorContainerProps, + RenderEditorContainerPropsWithRef, + SceneEventsOutsideEditorChanges, + InstancesOutsideEditorChanges, + ObjectsOutsideEditorChanges, + ObjectGroupsOutsideEditorChanges, +} from './BaseEditor'; +import { type ObjectWithContext } from '../../ObjectsList/EnumerateObjects'; +import { type HotReloadSteps } from '../../EmbeddedGame/EmbeddedGameFrame'; +import TimelineEditor from '../../TimelineEditor'; + +export class TimelineEditorContainer extends React.Component { + componentDidMount() { + this.props.setToolbar(null); + } + + componentDidUpdate(prevProps: RenderEditorContainerProps) { + if (!prevProps.isActive && this.props.isActive) { + this.props.setToolbar(null); + } + } + + shouldComponentUpdate(nextProps: RenderEditorContainerProps): any { + return this.props.isActive || nextProps.isActive; + } + + getProject(): ?gdProject { + return this.props.project; + } + + getLayout(): ?gdLayout { + return null; + } + + updateToolbar() { + this.props.setToolbar(null); + } + + forceUpdateEditor() { + this.forceUpdate(); + } + + onEventsBasedObjectChildrenEdited( + eventsBasedObject: gdEventsBasedObject, + options?: {| editedObject?: ?gdObject, hasResourceChanged?: boolean |} + ) {} + + onSceneObjectEdited( + scene: gdLayout, + objectWithContext: ObjectWithContext, + hasResourceChanged?: boolean + ) {} + + onSceneObjectsDeleted(scene: gdLayout) {} + + onSceneEventsModifiedOutsideEditor( + changes: SceneEventsOutsideEditorChanges + ) {} + + notifyChangesToInGameEditor(hotReloadSteps: HotReloadSteps) {} + + switchInGameEditorIfNoHotReloadIsNeeded() {} + + onInstancesModifiedOutsideEditor(changes: InstancesOutsideEditorChanges) {} + + onObjectsModifiedOutsideEditor(changes: ObjectsOutsideEditorChanges) {} + + onObjectGroupsModifiedOutsideEditor( + changes: ObjectGroupsOutsideEditorChanges + ) {} + + selectAllInsideEditor() {} + + render(): React.Node { + const { project } = this.props; + if (!project) { + return null; + } + + return ( + + ); + } +} + +export const renderTimelineEditorContainer = ( + props: RenderEditorContainerPropsWithRef +): React.Node => ; diff --git a/newIDE/app/src/MainFrame/EditorTabs/EditorTabsHandler.js b/newIDE/app/src/MainFrame/EditorTabs/EditorTabsHandler.js index 4bd8461ab408..374ec7de41e5 100644 --- a/newIDE/app/src/MainFrame/EditorTabs/EditorTabsHandler.js +++ b/newIDE/app/src/MainFrame/EditorTabs/EditorTabsHandler.js @@ -16,6 +16,7 @@ import { import { type AskAiEditorInterface } from '../../AiGeneration/AskAiEditorContainer'; import { type HTMLDataset } from '../../Utils/HTMLDataset'; import { CustomObjectEditorContainer } from '../EditorContainers/CustomObjectEditorContainer'; +import { TimelineEditorContainer } from '../EditorContainers/TimelineEditorContainer'; // Supported editors type EditorRef = @@ -26,6 +27,7 @@ type EditorRef = | ExternalLayoutEditorContainer | ResourcesEditorContainer | SceneEditorContainer + | TimelineEditorContainer | HomePageEditorInterface | AskAiEditorInterface; @@ -38,6 +40,7 @@ export type EditorKind = | 'external events' | 'events functions extension' | 'custom object' + | 'timeline' | 'debugger' | 'resources' | 'global-search' diff --git a/newIDE/app/src/MainFrame/EditorTabs/UseEditorTabsStateSaving.js b/newIDE/app/src/MainFrame/EditorTabs/UseEditorTabsStateSaving.js index b7e689151c98..307f3a06efea 100644 --- a/newIDE/app/src/MainFrame/EditorTabs/UseEditorTabsStateSaving.js +++ b/newIDE/app/src/MainFrame/EditorTabs/UseEditorTabsStateSaving.js @@ -12,6 +12,7 @@ import { } from './EditorTabsHandler'; import PreferencesContext from '../Preferences/PreferencesContext'; import { useDebounce } from '../../Utils/UseDebounce'; +import { getTimelineByIdOrName } from '../../TimelineEditor/TimelineProjectStorage'; type Props = {| editorTabs: EditorTabsState, @@ -61,6 +62,8 @@ const projectHasItem = ({ .getVariants() .getVariant(variantName)) ); + case 'timeline': + return !!getTimelineByIdOrName(project, name); default: return false; } diff --git a/newIDE/app/src/MainFrame/TabsTitlebarTooltip.js b/newIDE/app/src/MainFrame/TabsTitlebarTooltip.js index e68c248a3f13..61957ddb3a72 100644 --- a/newIDE/app/src/MainFrame/TabsTitlebarTooltip.js +++ b/newIDE/app/src/MainFrame/TabsTitlebarTooltip.js @@ -1,152 +1,154 @@ -// @flow -import * as React from 'react'; -import { Trans } from '@lingui/macro'; -import Fade from '@material-ui/core/Fade'; -import Paper from '@material-ui/core/Paper'; -import Popper from '@material-ui/core/Popper'; - -import GDevelopThemeContext from '../UI/Theme/GDevelopThemeContext'; -import { - type EditorTab, - type EditorKind, -} from './EditorTabs/EditorTabsHandler'; -import { ColumnStackLayout } from '../UI/Layout'; -import Text from '../UI/Text'; - -const editorKindToLabel: { [kind: EditorKind]: React.Node } = { - layout: Scene, - 'layout events': Scene events, - 'external layout': External layout, - 'external events': External events, - 'events functions extension': Extension, - 'custom object': Object, - debugger: Debugger, - resources: Resources, - 'global-search': Global search, - 'start page': Homepage, - 'ask-ai': Ask AI, -}; - -const styles = { - paper: { - padding: '8px 10px', - minWidth: 180, - }, - tabIcon: { - marginLeft: 4, - marginRight: 4, - display: 'flex', - }, - emptyTabIcon: { - marginLeft: 4, - marginRight: 4, - height: 20, - width: 24, - display: 'flex', - }, - tooltip: { - zIndex: 3, - maxWidth: 'min(90%, 300px)', - }, -}; - -type Props = {| - anchorElement: HTMLElement, - editorTab: EditorTab, -|}; - -const TabsTitlebarTooltip = ({ - anchorElement, - editorTab, -}: Props): React.Node => { - const gdevelopTheme = React.useContext(GDevelopThemeContext); - const [tooltipStyle, setTooltipStyle] = React.useState( - styles.tooltip - ); - - React.useEffect( - () => { - const timeoutId = setTimeout(() => { - setTooltipStyle(currentStyle => ({ - ...currentStyle, - transition: 'transform 150ms ease-in-out', - })); - }, 100); - return () => clearTimeout(timeoutId); - }, - // Apply transition after first display of tooltip to avoid having the - // transition weirdly applied from the 0;0 coordinates. - [] - ); - - let title = null; - let subtitle = null; - if ( - [ - 'layout', - 'layout events', - 'external layout', - 'external events', - 'events functions extension', - ].includes(editorTab.kind) - ) { - title = editorTab.projectItemName; - subtitle = editorKindToLabel[editorTab.kind]; - } else if (editorTab.kind === 'custom object' && editorTab.projectItemName) { - const nameParts = editorTab.projectItemName.split('::'); - const customObjectName = nameParts[1]; - if (customObjectName) { - title = customObjectName; - subtitle = editorKindToLabel[editorTab.kind]; - } - } else { - title = editorKindToLabel[editorTab.kind]; - } - - return ( - - {({ TransitionProps }) => ( - - - - {title} - {subtitle && ( - - {subtitle} - - )} - - - - )} - - ); -}; - -export default TabsTitlebarTooltip; +// @flow +import * as React from 'react'; +import { Trans } from '@lingui/macro'; +import Fade from '@material-ui/core/Fade'; +import Paper from '@material-ui/core/Paper'; +import Popper from '@material-ui/core/Popper'; + +import GDevelopThemeContext from '../UI/Theme/GDevelopThemeContext'; +import { + type EditorTab, + type EditorKind, +} from './EditorTabs/EditorTabsHandler'; +import { ColumnStackLayout } from '../UI/Layout'; +import Text from '../UI/Text'; + +const editorKindToLabel: { [kind: EditorKind]: React.Node } = { + layout: Scene, + 'layout events': Scene events, + 'external layout': External layout, + 'external events': External events, + 'events functions extension': Extension, + 'custom object': Object, + timeline: Timeline, + debugger: Debugger, + resources: Resources, + 'global-search': Global search, + 'start page': Homepage, + 'ask-ai': Ask AI, +}; + +const styles = { + paper: { + padding: '8px 10px', + minWidth: 180, + }, + tabIcon: { + marginLeft: 4, + marginRight: 4, + display: 'flex', + }, + emptyTabIcon: { + marginLeft: 4, + marginRight: 4, + height: 20, + width: 24, + display: 'flex', + }, + tooltip: { + zIndex: 3, + maxWidth: 'min(90%, 300px)', + }, +}; + +type Props = {| + anchorElement: HTMLElement, + editorTab: EditorTab, +|}; + +const TabsTitlebarTooltip = ({ + anchorElement, + editorTab, +}: Props): React.Node => { + const gdevelopTheme = React.useContext(GDevelopThemeContext); + const [tooltipStyle, setTooltipStyle] = React.useState( + styles.tooltip + ); + + React.useEffect( + () => { + const timeoutId = setTimeout(() => { + setTooltipStyle(currentStyle => ({ + ...currentStyle, + transition: 'transform 150ms ease-in-out', + })); + }, 100); + return () => clearTimeout(timeoutId); + }, + // Apply transition after first display of tooltip to avoid having the + // transition weirdly applied from the 0;0 coordinates. + [] + ); + + let title = null; + let subtitle = null; + if ( + [ + 'layout', + 'layout events', + 'external layout', + 'external events', + 'events functions extension', + 'timeline', + ].includes(editorTab.kind) + ) { + title = editorTab.projectItemName; + subtitle = editorKindToLabel[editorTab.kind]; + } else if (editorTab.kind === 'custom object' && editorTab.projectItemName) { + const nameParts = editorTab.projectItemName.split('::'); + const customObjectName = nameParts[1]; + if (customObjectName) { + title = customObjectName; + subtitle = editorKindToLabel[editorTab.kind]; + } + } else { + title = editorKindToLabel[editorTab.kind]; + } + + return ( + + {({ TransitionProps }) => ( + + + + {title} + {subtitle && ( + + {subtitle} + + )} + + + + )} + + ); +}; + +export default TabsTitlebarTooltip; diff --git a/newIDE/app/src/MainFrame/index.js b/newIDE/app/src/MainFrame/index.js index d134be137ee7..2520b8d2fbd3 100644 --- a/newIDE/app/src/MainFrame/index.js +++ b/newIDE/app/src/MainFrame/index.js @@ -61,6 +61,7 @@ import { renderSceneEditorContainer } from './EditorContainers/SceneEditorContai import { renderExternalLayoutEditorContainer } from './EditorContainers/ExternalLayoutEditorContainer'; import { renderEventsFunctionsExtensionEditorContainer } from './EditorContainers/EventsFunctionsExtensionEditorContainer'; import { renderCustomObjectEditorContainer } from './EditorContainers/CustomObjectEditorContainer'; +import { renderTimelineEditorContainer } from './EditorContainers/TimelineEditorContainer'; import { renderHomePageContainer } from './EditorContainers/HomePage'; import { type OpenAskAiOptions } from '../AiGeneration/Utils'; import { exceptionallyGuardAgainstDeadObject } from '../Utils/IsNullPtr'; @@ -213,8 +214,10 @@ import { type ObjectWithContext } from '../ObjectsList/EnumerateObjects'; import useGamesList from '../GameDashboard/UseGamesList'; import useCapturesManager from './UseCapturesManager'; import { readProjectSettings } from '../Utils/ProjectSettingsReader'; +import { getTimelineByIdOrName } from '../TimelineEditor/TimelineProjectStorage'; import useNpmScriptRunner from './NpmScriptRunner/useNpmScriptRunner'; import { applyProjectPreferences } from '../Utils/ApplyProjectPreferences'; +import AIEditorBridge from '../AIEditorBridge'; import { EmbeddedGameFrame, setEditorHotReloadNeeded, @@ -224,6 +227,7 @@ import useHomePageSwitch from './useHomePageSwitch'; import { useNavigationToEvent } from './UseNavigationToEvent'; import useNavigateFromGlobalSearch from './UseNavigateFromGlobalSearch'; import RobotIcon from '../ProjectCreation/RobotIcon'; +import TimelineIcon from '@material-ui/icons/Timeline'; import PublicProfileContext from '../Profile/PublicProfileContext'; import { useGamesPlatformFrame } from './EditorContainers/HomePage/PlaySection/UseGamesPlatformFrame'; import { useExtensionLoadErrorDialog } from '../Utils/UseExtensionLoadErrorDialog'; @@ -259,6 +263,7 @@ const editorKindToRenderer: { 'external layout': renderExternalLayoutEditorContainer, 'events functions extension': renderEventsFunctionsExtensionEditorContainer, 'custom object': renderCustomObjectEditorContainer, + timeline: renderTimelineEditorContainer, 'start page': renderHomePageContainer, resources: renderResourcesEditorContainer, 'global-search': renderGlobalEventsSearchEditorContainer, @@ -723,6 +728,10 @@ const MainFrame = (props: Props): React.MixedElement => { paneIdentifier?: 'left' | 'center' | 'right', continueProcessingFunctionCallsOnMount?: boolean, }) => { + const timeline = + kind === 'timeline' && project + ? getTimelineByIdOrName(project, name) + : null; const label = kind === 'resources' ? i18n._(t`Resources`) @@ -734,6 +743,10 @@ const MainFrame = (props: Props): React.MixedElement => { ? undefined : kind === 'debugger' ? i18n._(t`Debugger`) + : kind === 'timeline' + ? timeline + ? timeline.name + : name : kind === 'layout events' ? name + ` ${i18n._(t`(Events)`)}` : kind === 'custom object' @@ -753,6 +766,7 @@ const MainFrame = (props: Props): React.MixedElement => { 'external layout', 'events functions extension', 'custom object', + 'timeline', ].includes(kind) ? `${kind} ${name}` : kind; @@ -790,6 +804,8 @@ const MainFrame = (props: Props): React.MixedElement => { ) : kind === 'events functions extension' || kind === 'custom object' ? ( + ) : kind === 'timeline' ? ( + ) : kind === 'ask-ai' ? ( ) : null; @@ -2873,6 +2889,24 @@ const MainFrame = (props: Props): React.MixedElement => { [getEditorOpeningOptions, setState] ); + const openTimeline = React.useCallback( + (name: string) => { + setState(state => ({ + ...state, + editorTabs: openEditorTab( + state.editorTabs, + // $FlowFixMe[incompatible-type] + getEditorOpeningOptions({ + kind: 'timeline', + name, + project: state.currentProject, + }) + ), + })); + }, + [getEditorOpeningOptions, setState] + ); + const openGlobalSearch = React.useCallback( () => { setState(state => ({ @@ -5364,6 +5398,7 @@ const MainFrame = (props: Props): React.MixedElement => { onRenameExternalLayout={renameExternalLayout} onRenameEventsFunctionsExtension={renameEventsFunctionsExtension} onRenameExternalEvents={renameExternalEvents} + onOpenTimeline={openTimeline} onOpenResources={openResources} onReloadEventsFunctionsExtensions={onReloadEventsFunctionsExtensions} onWillInstallExtension={onWillInstallExtension} @@ -5799,6 +5834,26 @@ const MainFrame = (props: Props): React.MixedElement => { onClose={() => setMemoryTrackedRegistryDialogOpen(false)} /> )} + ); diff --git a/newIDE/app/src/ObjectEditor/Editors/Spine43Editor.js b/newIDE/app/src/ObjectEditor/Editors/Spine43Editor.js new file mode 100644 index 000000000000..6025f1da0b20 --- /dev/null +++ b/newIDE/app/src/ObjectEditor/Editors/Spine43Editor.js @@ -0,0 +1,2927 @@ +// @flow +import * as React from 'react'; +import { Trans } from '@lingui/macro'; +import ObjectPropertiesEditor from './ObjectPropertiesEditor'; +import { type EditorProps } from './EditorProps.flow'; +import Dialog, { DialogPrimaryButton } from '../../UI/Dialog'; +import FlatButton from '../../UI/FlatButton'; +import RaisedButton from '../../UI/RaisedButton'; +import SelectField from '../../UI/SelectField'; +import SelectOption from '../../UI/SelectOption'; +import Checkbox from '../../UI/Checkbox'; +import SemiControlledTextField from '../../UI/SemiControlledTextField'; +import Text from '../../UI/Text'; +import AlertMessage from '../../UI/AlertMessage'; +import { Tabs } from '../../UI/Tabs'; +import ColorPicker, { type ColorResult } from '../../UI/ColorField/ColorPicker'; +import { Line, Column } from '../../UI/Grid'; +import { ColumnStackLayout, ResponsiveLineStackLayout } from '../../UI/Layout'; +import useForceUpdate from '../../Utils/UseForceUpdate'; +import { type RGBColor } from '../../Utils/ColorTransformer'; +import ResourcesLoader from '../../ResourcesLoader'; + +const gd: libGDevelop = global.gd; + +const EDITOR_RUNTIME_BASE_URL = + 'http://127.0.0.1:5002/Runtime/Extensions/Spine43Object/'; +const DEFAULT_RUNTIME_SCRIPT_PATH = 'Extensions/Spine43Object/spine-pixi-v7.js'; + +const styles = { + buttonsLine: { + display: 'flex', + gap: 8, + flexWrap: 'wrap', + paddingTop: 12, + paddingBottom: 8, + }, + dialogBody: { + display: 'grid', + gridTemplateColumns: 'minmax(560px, 1fr) 390px', + gap: 12, + width: '100%', + flex: 1, + minHeight: 0, + }, + dialogContent: { + display: 'flex', + flexDirection: 'column', + height: 'min(860px, calc(100vh - 170px))', + minHeight: 620, + }, + tabsContainer: { + paddingBottom: 10, + }, + previewColumn: { + display: 'flex', + flexDirection: 'column', + minHeight: 0, + }, + previewToolbar: { + display: 'flex', + gap: 12, + flexWrap: 'wrap', + alignItems: 'center', + padding: '0 0 8px 0', + }, + previewToolbarColor: { + display: 'flex', + gap: 6, + alignItems: 'center', + }, + previewToolbarColorSwatch: { + width: 32, + height: 22, + }, + preview: { + flex: 1, + minHeight: 0, + position: 'relative', + backgroundColor: '#20242b', + backgroundImage: + 'linear-gradient(45deg, rgba(255,255,255,.05) 25%, transparent 25%), linear-gradient(-45deg, rgba(255,255,255,.05) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(255,255,255,.05) 75%), linear-gradient(-45deg, transparent 75%, rgba(255,255,255,.05) 75%)', + backgroundSize: '20px 20px', + backgroundPosition: '0 0, 0 10px, 10px -10px, -10px 0px', + border: '1px solid rgba(255,255,255,.18)', + overflow: 'hidden', + }, + previewStatus: { + position: 'absolute', + left: 12, + right: 12, + bottom: 12, + pointerEvents: 'none', + }, + side: { + overflowY: 'auto', + paddingRight: 4, + minHeight: 0, + }, + panel: { + border: '1px solid rgba(255,255,255,.13)', + borderRadius: 6, + padding: 10, + marginBottom: 10, + }, + row: { + display: 'grid', + gridTemplateColumns: '1fr 78px 78px', + gap: 6, + alignItems: 'end', + }, + smallRow: { + display: 'grid', + gridTemplateColumns: '1fr 1fr', + gap: 6, + }, + list: { + display: 'flex', + flexDirection: 'column', + gap: 6, + }, + listItem: { + border: '1px solid rgba(255,255,255,.12)', + borderRadius: 4, + padding: 8, + cursor: 'pointer', + }, + selectedListItem: { + border: '1px solid #9b7cff', + backgroundColor: 'rgba(155,124,255,.16)', + }, + swatch: { + width: 28, + height: 28, + border: '1px solid rgba(255,255,255,.35)', + borderRadius: 4, + marginTop: 18, + }, + colorPickerLine: { + display: 'flex', + alignItems: 'center', + gap: 12, + paddingTop: 10, + paddingBottom: 6, + }, + colorPickerSwatch: { + width: 54, + height: 34, + }, + panelActions: { + display: 'flex', + gap: 8, + flexWrap: 'wrap', + paddingTop: 8, + }, +}; + +type InspectorMode = 'bones' | 'mesh' | 'slots' | 'animation'; +type AnyObject = { [string]: any, ... }; +type Spine43Content = AnyObject; +type PreviewColor = {| + r: number, + g: number, + b: number, + a: number, +|}; +type InspectorOverrides = {| + bones: AnyObject, + constraints: AnyObject, + slots: AnyObject, +|}; +type RuntimeResetRequest = {| + id: number, + type: 'all' | 'bone', + boneName: string, +|}; +type BoneOverrideOptions = {| + recordUndo?: boolean, + immediate?: boolean, +|}; +type TimelineEntry = {| + name: string, + path: string, + value: any, +|}; + +const emptyInspectorOverrides = (): InspectorOverrides => ({ + bones: {}, + constraints: {}, + slots: {}, +}); + +const clone = (value: any): any => JSON.parse(JSON.stringify(value || {})); + +const DEFAULT_MESH_PREVIEW_COLOR = { + r: 77, + g: 220, + b: 255, + a: 1, +}; + +const toNumber = (value: any, fallback: number): number => { + const number = Number(value); + return Number.isFinite(number) ? number : fallback; +}; + +const clampColorComponent = (value: any, fallback: number): number => + Math.max(0, Math.min(255, Math.round(toNumber(value, fallback)))); + +const normalizePreviewColor = (color: any): PreviewColor => ({ + r: clampColorComponent(color && color.r, DEFAULT_MESH_PREVIEW_COLOR.r), + g: clampColorComponent(color && color.g, DEFAULT_MESH_PREVIEW_COLOR.g), + b: clampColorComponent(color && color.b, DEFAULT_MESH_PREVIEW_COLOR.b), + a: Math.max( + 0, + Math.min(1, toNumber(color && color.a, DEFAULT_MESH_PREVIEW_COLOR.a)) + ), +}); + +const colorToPixiNumber = (color: any): number => { + const normalized = normalizePreviewColor(color); + return (normalized.r << 16) + (normalized.g << 8) + normalized.b; +}; + +const getMeshPreviewColor = (content: any): PreviewColor => + normalizePreviewColor( + content && content.meshPreview ? content.meshPreview.color : null + ); + +const getNodeRequire = (): any => { + if (typeof global !== 'undefined' && typeof global.require === 'function') { + return global.require; + } + if (typeof window !== 'undefined' && typeof window.require === 'function') { + return window.require; + } + return null; +}; + +const toFileUrl = (absolutePath: string): string => { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + try { + const nodeUrl = nodeRequire('url'); + if (nodeUrl && nodeUrl.pathToFileURL) { + return nodeUrl.pathToFileURL(absolutePath).toString(); + } + } catch (error) { + // Fallback below. + } + } + return 'file:///' + String(absolutePath || '').replace(/\\/g, '/'); +}; + +const fileUrlToPath = (fileUrl: string): string => { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + try { + const nodeUrl = nodeRequire('url'); + if (nodeUrl && nodeUrl.fileURLToPath) + return nodeUrl.fileURLToPath(fileUrl); + } catch (error) { + // Fallback below. + } + } + return decodeURIComponent(String(fileUrl).replace(/^file:\/\/\/?/i, '')); +}; + +const getContent = ( + objectConfiguration: gdObjectConfiguration +): Spine43Content => { + try { + const jsImplementation = (gd.asObjectJsImplementation( + objectConfiguration + ): any); + return jsImplementation.content || {}; + } catch (error) { + return {}; + } +}; + +const resolveResourceUrl = ( + project: ?gdProject, + resourceNameOrFile: ?string +): string => { + const value = String(resourceNameOrFile || '').trim(); + if (!project || !value) return ''; + + let file = value; + let isProjectResource = false; + const projectAsAny = (project: any); + const resourcesManager = project.getResourcesManager(); + if (resourcesManager && resourcesManager.hasResource(value)) { + isProjectResource = true; + const resource = resourcesManager.getResource(value); + const resourceAsAny = (resource: any); + if (resourceAsAny && typeof resourceAsAny.getFile === 'function') { + file = resourceAsAny.getFile() || value; + } + } + + if (/^(?:https?:|file:|data:|blob:)/i.test(file)) return file; + + const nodeRequire = getNodeRequire(); + const getProjectFile = projectAsAny.getProjectFile; + const projectFile = + typeof getProjectFile === 'function' ? getProjectFile.call(project) : ''; + if (nodeRequire && projectFile) { + try { + const nodePath = nodeRequire('path'); + return toFileUrl(nodePath.resolve(nodePath.dirname(projectFile), file)); + } catch (error) { + return file; + } + } + + if (/^[a-zA-Z]:[\\/]/.test(file)) return toFileUrl(file); + + if (isProjectResource) { + return ResourcesLoader.getResourceFullUrl(project, value, { + isResourceForPixi: false, + }); + } + + return file; +}; + +const readText = async (url: string): Promise => { + if (/^file:/i.test(url)) { + const nodeRequire = getNodeRequire(); + if (nodeRequire) { + const nodeFs = nodeRequire('fs'); + return nodeFs.readFileSync(fileUrlToPath(url), 'utf8'); + } + } + + const response = await fetch(url); + if (!response.ok) throw new Error(`Unable to read ${url}`); + return response.text(); +}; + +const getBones = (skeletonJson: any): Array => + Array.isArray(skeletonJson && skeletonJson.bones) ? skeletonJson.bones : []; + +const getSlots = (skeletonJson: any): Array => + Array.isArray(skeletonJson && skeletonJson.slots) ? skeletonJson.slots : []; + +const getConstraints = (skeletonJson: any): Array => + Array.isArray(skeletonJson && skeletonJson.constraints) + ? skeletonJson.constraints + : ([]: Array) + .concat( + Array.isArray(skeletonJson && skeletonJson.ik) ? skeletonJson.ik : [] + ) + .concat( + Array.isArray(skeletonJson && skeletonJson.transform) + ? skeletonJson.transform + : [] + ) + .concat( + Array.isArray(skeletonJson && skeletonJson.path) + ? skeletonJson.path + : [] + ); + +const getAnimationNames = (skeletonJson: any): Array => { + const animations = skeletonJson && skeletonJson.animations; + if (Array.isArray(animations)) + return animations.map(animation => + String((animation && animation.name) || '') + ); + return animations && typeof animations === 'object' + ? Object.keys(animations).map(name => String(name)) + : []; +}; + +const getSkins = (skeletonJson: any): Array => { + const skins = skeletonJson && skeletonJson.skins; + if (Array.isArray(skins)) return skins; + if (skins && typeof skins === 'object') { + return Object.keys(skins).map(name => ({ + name, + attachments: skins[name], + })); + } + return []; +}; + +const getSlotAttachments = ( + skeletonJson: any, + slotName: string +): Array => { + const attachments: Array = []; + getSkins(skeletonJson).forEach(skin => { + const skinAttachments = skin && (skin.attachments || skin); + const slotAttachments = skinAttachments && skinAttachments[slotName]; + if (!slotAttachments) return; + Object.keys(slotAttachments).forEach(attachmentName => { + attachments.push({ + skinName: skin.name || 'default', + slotName, + name: attachmentName, + attachment: slotAttachments[attachmentName], + }); + }); + }); + return attachments; +}; + +const getAllAttachments = (skeletonJson: any): Array => + getSlots(skeletonJson).reduce( + (all: Array, slot: any) => + all.concat(getSlotAttachments(skeletonJson, slot.name)), + ([]: Array) + ); + +const parseColorString = (color: any): PreviewColor => { + const value = String(color || 'ffffffff'); + const normalized = value.length === 6 ? `${value}ff` : value; + const parse = (index: number): number => + parseInt(normalized.substr(index, 2), 16); + return { + r: Number.isFinite(parse(0)) ? parse(0) : 255, + g: Number.isFinite(parse(2)) ? parse(2) : 255, + b: Number.isFinite(parse(4)) ? parse(4) : 255, + a: Number.isFinite(parse(6)) ? parse(6) / 255 : 1, + }; +}; + +const colorToCss = (color: PreviewColor): string => + `rgba(${Math.round(toNumber(color.r, 255))}, ${Math.round( + toNumber(color.g, 255) + )}, ${Math.round(toNumber(color.b, 255))}, ${Math.max( + 0, + Math.min(1, toNumber(color.a, 1)) + )})`; + +const dialogRuntimeScriptPromises: { [string]: Promise, ... } = {}; + +const getSpine43Adapter = (): any => + typeof window !== 'undefined' ? (window: any).GDSpine43Adapter || null : null; + +const getPixi = (): any => + typeof window !== 'undefined' ? (window: any).PIXI || null : null; + +const ensurePixi = (): any => { + const existingPixi = getPixi(); + if (existingPixi) return existingPixi; + + const nodeRequire = getNodeRequire(); + if (!nodeRequire || typeof window === 'undefined') return null; + + try { + const pixi = nodeRequire('pixi.js-legacy'); + if (pixi && pixi.Application) { + (window: any).PIXI = pixi; + return pixi; + } + } catch (error) { + // Try the non-legacy package below. + } + + try { + const pixi = nodeRequire('pixi.js'); + if (pixi && pixi.Application) { + (window: any).PIXI = pixi; + return pixi; + } + } catch (error) { + // The preview will show a clear loading error. + } + + return null; +}; + +const loadDialogRuntimeScript = (filename: string): Promise => { + const url = EDITOR_RUNTIME_BASE_URL + filename; + if (dialogRuntimeScriptPromises[url]) return dialogRuntimeScriptPromises[url]; + + dialogRuntimeScriptPromises[url] = new Promise((resolve, reject) => { + if (typeof document === 'undefined') { + reject(new Error('Editor document is not available.')); + return; + } + + const existing = document.querySelector( + 'script[data-gd-spine43-dialog="' + url + '"]' + ); + if (existing) { + if (existing.getAttribute('data-loaded') === '1') { + resolve(); + return; + } + existing.addEventListener('load', () => resolve(), { once: true }); + existing.addEventListener( + 'error', + () => reject(new Error('Failed to load ' + url)), + { once: true } + ); + return; + } + + const script = document.createElement('script'); + script.async = true; + script.src = url; + script.setAttribute('data-gd-spine43-dialog', url); + script.addEventListener( + 'load', + () => { + script.setAttribute('data-loaded', '1'); + resolve(); + }, + { once: true } + ); + script.addEventListener( + 'error', + () => reject(new Error('Failed to load ' + url)), + { once: true } + ); + const documentHead = document.head; + if (!documentHead) { + reject(new Error('Unable to load ' + url + ': missing document head.')); + return; + } + documentHead.appendChild(script); + }); + + return dialogRuntimeScriptPromises[url]; +}; + +const ensureDialogRuntime = async (): Promise => { + ensurePixi(); + if (!getSpine43Adapter()) { + await loadDialogRuntimeScript('spine43-gdevelop-runtime.js'); + } + if (!getSpine43Adapter()) { + throw new Error('Spine 4.3 editor runtime is not available.'); + } + if (!ensurePixi()) { + throw new Error('PIXI is not available in the editor window.'); + } +}; + +const getRuntimeSlotAttachment = (slot: any): any => { + if (!slot) return null; + if (slot.currentMesh && slot.currentMesh.attachment) { + return slot.currentMesh.attachment; + } + if (typeof slot.getPose === 'function') { + try { + const pose = slot.getPose(); + if (pose && typeof pose.getAttachment === 'function') { + const attachment = pose.getAttachment(); + if (attachment) return attachment; + } + if (pose && pose.attachment) return pose.attachment; + } catch (error) { + // Keep trying the other runtime shapes. + } + } + if (typeof slot.getAttachment === 'function') { + try { + const attachment = slot.getAttachment(); + if (attachment) return attachment; + } catch (error) { + // Keep trying the other runtime shapes. + } + } + return slot.attachment || null; +}; + +const computeRuntimeWorldVertices = ( + attachment: any, + slot: any, + skeleton: any +): Array => { + if ( + !attachment || + !slot || + typeof attachment.computeWorldVertices !== 'function' + ) { + return []; + } + + const slotPose = + slot.appliedPose || + (typeof slot.getAppliedPose === 'function' + ? slot.getAppliedPose() + : null) || + slot.pose || + null; + let regionOffsets = null; + if (typeof attachment.getOffsets === 'function') { + try { + const offsets = attachment.getOffsets(slotPose); + if (offsets && typeof offsets.length === 'number') { + regionOffsets = offsets; + } + } catch (error) { + // Region offsets are optional. + } + } + + const vertexLength = + Math.max( + 0, + regionOffsets && typeof regionOffsets.length === 'number' + ? regionOffsets.length + : 0, + Number(attachment.worldVerticesLength) || 0, + attachment.offset && typeof attachment.offset.length === 'number' + ? attachment.offset.length + : 0, + attachment.vertices && typeof attachment.vertices.length === 'number' + ? attachment.vertices.length + : 0, + attachment.regionUVs && typeof attachment.regionUVs.length === 'number' + ? attachment.regionUVs.length + : 0, + attachment.uvs && typeof attachment.uvs.length === 'number' + ? attachment.uvs.length + : 0 + ) || 8; + const output = new Float32Array(vertexLength); + const invocations: Array<() => any> = []; + + if (regionOffsets) { + invocations.push(() => + attachment.computeWorldVertices(slot, regionOffsets, output, 0, 2) + ); + } + if (skeleton) { + invocations.push(() => + attachment.computeWorldVertices( + skeleton, + slot, + 0, + vertexLength, + output, + 0, + 2 + ) + ); + } + invocations.push( + () => attachment.computeWorldVertices(slot, 0, vertexLength, output, 0, 2), + () => attachment.computeWorldVertices(slot, output, 0, 2), + () => attachment.computeWorldVertices(slot.bone || slot, output, 0, 2), + () => attachment.computeWorldVertices(slot, output), + () => attachment.computeWorldVertices(slot.bone || slot, output) + ); + + for (const invoke of invocations) { + try { + invoke(); + return Array.from(output); + } catch (error) { + // Spine 4.x runtimes changed this signature a few times. + } + } + return []; +}; + +const getRuntimeTriangleIndices = ( + attachment: any, + vertices: Array +): Array => { + if (!attachment) return []; + if (attachment.triangles && typeof attachment.triangles.length === 'number') { + return Array.from(attachment.triangles); + } + const vertexCount = Math.floor( + (vertices && vertices.length ? vertices.length : 0) / 2 + ); + if (vertexCount < 3) return []; + if (vertexCount === 4) return [0, 1, 2, 2, 3, 0]; + const indices: Array = []; + for (let index = 1; index < vertexCount - 1; index++) { + indices.push(0, index, index + 1); + } + return indices; +}; + +const getBoneName = (bone: any): string => + String( + bone && bone.data && bone.data.name ? bone.data.name : bone && bone.name + ); + +const getBonePose = (bone: any): any => { + if (!bone) return null; + return bone.appliedPose || bone.pose || bone; +}; + +const getBoneWorldPoint = ( + bone: any +): ?{| x: number, y: number, a: number, b: number, c: number, d: number |} => { + const pose = getBonePose(bone); + if (!pose) return null; + return { + x: toNumber(pose.worldX, toNumber(pose.x, 0)), + y: toNumber(pose.worldY, toNumber(pose.y, 0)), + a: toNumber(pose.a, Math.cos((toNumber(pose.rotation, 0) * Math.PI) / 180)), + b: toNumber(pose.b, 0), + c: toNumber(pose.c, Math.sin((toNumber(pose.rotation, 0) * Math.PI) / 180)), + d: toNumber(pose.d, 1), + }; +}; + +const findRuntimeBone = (skeleton: any, name: ?string): any => { + const boneName = String(name || ''); + if (!skeleton || !boneName) return null; + if (typeof skeleton.findBone === 'function') { + const bone = skeleton.findBone(boneName); + if (bone) return bone; + } + return Array.isArray(skeleton.bones) + ? skeleton.bones.find(bone => getBoneName(bone) === boneName) || null + : null; +}; + +const getRuntimeBoneParent = (skeleton: any, bone: any): any => { + if (!bone) return null; + if (bone.parent) return bone.parent; + const parentName = + bone.data && bone.data.parent && bone.data.parent.name + ? bone.data.parent.name + : bone.parentName || ''; + return parentName ? findRuntimeBone(skeleton, parentName) : null; +}; + +const worldDeltaToBoneLocal = ( + parentBone: any, + dx: number, + dy: number +): {| x: number, y: number |} => { + const parentPoint = getBoneWorldPoint(parentBone); + if (!parentPoint) return { x: dx, y: dy }; + const a = parentPoint.a; + const b = parentPoint.b; + const c = parentPoint.c; + const d = parentPoint.d; + const determinant = a * d - b * c; + if (!Number.isFinite(determinant) || Math.abs(determinant) < 0.00001) { + return { x: dx, y: dy }; + } + return { + x: (dx * d - dy * b) / determinant, + y: (dy * a - dx * c) / determinant, + }; +}; + +const getRuntimeBoneSegment = ( + bone: any +): ?{| + name: string, + x: number, + y: number, + tipX: number, + tipY: number, + length: number, +|} => { + const point = getBoneWorldPoint(bone); + if (!point) return null; + const length = + bone && bone.data && Number.isFinite(Number(bone.data.length)) + ? Number(bone.data.length) + : 24; + return { + name: getBoneName(bone), + x: point.x, + y: point.y, + tipX: point.x + point.a * length, + tipY: point.y + point.c * length, + length, + }; +}; + +const getPointToSegmentDistance = ( + px: number, + py: number, + ax: number, + ay: number, + bx: number, + by: number +): number => { + const abX = bx - ax; + const abY = by - ay; + const lengthSquared = abX * abX + abY * abY; + if (lengthSquared <= 0.00001) { + const dx = px - ax; + const dy = py - ay; + return Math.sqrt(dx * dx + dy * dy); + } + const t = Math.max( + 0, + Math.min(1, ((px - ax) * abX + (py - ay) * abY) / lengthSquared) + ); + const projectedX = ax + abX * t; + const projectedY = ay + abY * t; + const dx = px - projectedX; + const dy = py - projectedY; + return Math.sqrt(dx * dx + dy * dy); +}; + +const findRuntimeBoneAtPoint = ( + skeleton: any, + x: number, + y: number, + threshold: number +): any => { + const bones = skeleton && Array.isArray(skeleton.bones) ? skeleton.bones : []; + let best: any = null; + let bestDistance = threshold; + bones.forEach(bone => { + const segment = getRuntimeBoneSegment(bone); + if (!segment || !segment.name) return; + const distance = getPointToSegmentDistance( + x, + y, + segment.x, + segment.y, + segment.tipX, + segment.tipY + ); + if (distance <= bestDistance) { + bestDistance = distance; + best = bone; + } + }); + return best; +}; + +const drawRuntimeMeshes = ( + graphics: any, + skeleton: any, + selectedSlotName: string, + showAllSlots: boolean, + color: any +): void => { + const meshColor = normalizePreviewColor(color); + const meshColorNumber = colorToPixiNumber(meshColor); + const meshAlpha = Math.max(0, Math.min(1, toNumber(meshColor.a, 1))); + const slots = + skeleton && Array.isArray(skeleton.drawOrder) && skeleton.drawOrder.length + ? skeleton.drawOrder + : skeleton && Array.isArray(skeleton.slots) + ? skeleton.slots + : []; + slots.forEach(slot => { + const slotName = + slot && slot.data && slot.data.name ? slot.data.name : slot && slot.name; + if (!showAllSlots && selectedSlotName && slotName !== selectedSlotName) + return; + + const attachment = getRuntimeSlotAttachment(slot); + const vertices = computeRuntimeWorldVertices(attachment, slot, skeleton); + const indices = getRuntimeTriangleIndices(attachment, vertices); + if (!vertices.length || !indices.length) return; + + graphics.lineStyle(1.5, meshColorNumber, meshAlpha * 0.95); + graphics.beginFill(meshColorNumber, meshAlpha * 0.2); + for (let index = 0; index + 2 < indices.length; index += 3) { + const ia = Number(indices[index]) * 2; + const ib = Number(indices[index + 1]) * 2; + const ic = Number(indices[index + 2]) * 2; + if ( + ia + 1 >= vertices.length || + ib + 1 >= vertices.length || + ic + 1 >= vertices.length + ) { + continue; + } + graphics.moveTo(vertices[ia], vertices[ia + 1]); + graphics.lineTo(vertices[ib], vertices[ib + 1]); + graphics.lineTo(vertices[ic], vertices[ic + 1]); + graphics.lineTo(vertices[ia], vertices[ia + 1]); + } + graphics.endFill(); + }); +}; + +const drawRuntimeBones = ( + graphics: any, + skeleton: any, + selectedBoneName: string, + hoveredBoneName: string +): void => { + const bones = skeleton && Array.isArray(skeleton.bones) ? skeleton.bones : []; + bones.forEach(bone => { + const segment = getRuntimeBoneSegment(bone); + if (!segment) return; + const isHovered = segment.name === hoveredBoneName; + const isSelected = segment.name === selectedBoneName; + if (isHovered || isSelected) { + graphics.lineStyle(isHovered ? 8 : 6, 0x9b7cff, isHovered ? 0.8 : 0.55); + graphics.moveTo(segment.x, segment.y); + graphics.lineTo(segment.tipX, segment.tipY); + graphics.drawCircle(segment.x, segment.y, isHovered ? 13 : 11); + } + graphics.lineStyle(2.5, 0xd7df28, 0.95); + graphics.moveTo(segment.x, segment.y); + graphics.lineTo(segment.tipX, segment.tipY); + graphics.beginFill(0x20242b, 0.95); + graphics.lineStyle(1.5, 0xd7df28, 1); + graphics.drawCircle(segment.x, segment.y, 5); + graphics.endFill(); + }); +}; + +const drawRuntimeConstraints = (graphics: any, skeleton: any): void => { + const constraints = + skeleton && Array.isArray(skeleton.constraints) ? skeleton.constraints : []; + constraints.forEach(constraint => { + const data = constraint && constraint.data ? constraint.data : {}; + const targetName = + data.target && data.target.name + ? data.target.name + : data.bone && data.bone.name + ? data.bone.name + : ''; + const bone = findRuntimeBone(skeleton, targetName); + const point = getBoneWorldPoint(bone); + if (!point) return; + graphics.lineStyle(2, 0x9b7cff, 0.9); + graphics.drawCircle(point.x, point.y, 10); + graphics.moveTo(point.x - 14, point.y); + graphics.lineTo(point.x + 14, point.y); + graphics.moveTo(point.x, point.y - 14); + graphics.lineTo(point.x, point.y + 14); + }); +}; + +const fitRuntimePreview = ( + app: any, + contentLayer: any, + spineContainer: any +): boolean => { + if ( + !app || + !contentLayer || + !spineContainer || + !spineContainer.getLocalBounds + ) { + return false; + } + const width = + app.screen && Number.isFinite(app.screen.width) ? app.screen.width : 1; + const height = + app.screen && Number.isFinite(app.screen.height) ? app.screen.height : 1; + const bounds = spineContainer.getLocalBounds(); + if ( + !bounds || + !Number.isFinite(bounds.width) || + !Number.isFinite(bounds.height) || + bounds.width <= 0 || + bounds.height <= 0 + ) { + contentLayer.position.set(width / 2, height / 2); + contentLayer.scale.set(1); + return false; + } + const padding = 72; + const scale = Math.min( + (width - padding) / bounds.width, + (height - padding) / bounds.height, + 4 + ); + const safeScale = Math.max(0.05, Number.isFinite(scale) ? scale : 1); + contentLayer.scale.set(safeScale); + contentLayer.position.set( + width / 2 - (bounds.x + bounds.width / 2) * safeScale, + height / 2 - (bounds.y + bounds.height / 2) * safeScale + ); + return true; +}; + +type PreviewOptions = {| + showImage: boolean, + showBones: boolean, + showConstraints: boolean, + showMesh: boolean, +|}; + +const PreviewToolbar = ({ + options, + onChange, + meshColor, + onMeshColorChange, +}: {| + options: PreviewOptions, + onChange: PreviewOptions => void, + meshColor: any, + onMeshColorChange: ColorResult => void, +|}) => ( +
+ onChange({ ...options, showImage: checked })} + /> + onChange({ ...options, showBones: checked })} + /> + + onChange({ ...options, showConstraints: checked }) + } + /> + onChange({ ...options, showMesh: checked })} + /> +
+ + 网格颜色 + + +
+
+); + +const Preview = ({ + project, + content, + selectedSlotName, + previewOptions, + selectedBoneName, + onSelectedBoneNameChange, + onBoneOverrideChange, + onBoneDragStart, + onBoneDragEnd, + runtimeResetRequest, +}: {| + project: ?gdProject, + content: Spine43Content, + selectedSlotName: string, + previewOptions: PreviewOptions, + selectedBoneName: string, + onSelectedBoneNameChange: string => void, + onBoneOverrideChange: (string, AnyObject, BoneOverrideOptions) => void, + onBoneDragStart: () => void, + onBoneDragEnd: () => void, + runtimeResetRequest: ?RuntimeResetRequest, +|}) => { + const viewportRef = React.useRef(null); + const latestRef = React.useRef({ + content, + selectedSlotName, + previewOptions, + selectedBoneName, + onSelectedBoneNameChange, + onBoneOverrideChange, + onBoneDragStart, + onBoneDragEnd, + runtimeResetRequest, + }); + const [status, setStatus] = React.useState('正在加载 Spine 预览...'); + + latestRef.current = { + content, + selectedSlotName, + previewOptions, + selectedBoneName, + onSelectedBoneNameChange, + onBoneOverrideChange, + onBoneDragStart, + onBoneDragEnd, + runtimeResetRequest, + }; + + const skeletonFile = resolveResourceUrl(project, content.skeletonResource); + const atlasFile = resolveResourceUrl(project, content.atlasResource); + + React.useEffect( + () => { + let cancelled = false; + let app: any = null; + let handle: any = null; + let resizeObserver: any = null; + let contentLayer: any = null; + let overlayGraphics: any = null; + let lastAnimationKey = ''; + let lastSkinName = ''; + let lastMixDuration: ?number = null; + let lastRuntimeResetRequestId = 0; + let hoveredBoneName = ''; + let draggingBone: any = null; + let panningView: any = null; + let hasManualViewTransform = false; + let previewReady = false; + let previewCanvas: any = null; + + const cleanup = () => { + if (resizeObserver) resizeObserver.disconnect(); + if (previewCanvas) { + previewCanvas.removeEventListener('pointermove', onPointerMove); + previewCanvas.removeEventListener('pointerdown', onPointerDown); + previewCanvas.removeEventListener('pointerleave', onPointerLeave); + previewCanvas.removeEventListener('wheel', onWheel); + previewCanvas.removeEventListener('auxclick', onAuxClick); + } + if (typeof window !== 'undefined') { + window.removeEventListener('pointerup', onPointerUp); + } + const adapter = getSpine43Adapter(); + if (adapter && handle && adapter.destroyInstance) { + adapter.destroyInstance(handle); + } + if (app) { + try { + app.destroy(true, { + children: true, + texture: false, + baseTexture: false, + }); + } catch (error) { + app.destroy(true); + } + } + }; + + const resetPreviewPhysicsInheritance = () => { + if (!handle) return; + const adapter = getSpine43Adapter(); + if (adapter && adapter.setPhysicsTransformInheritance) { + adapter.setPhysicsTransformInheritance(handle, 0, 0, 0); + } else if ( + handle.container && + typeof handle.container.resetPhysicsTransform === 'function' + ) { + handle.container.resetPhysicsTransform(); + } + }; + + const resize = () => { + if (!app || !viewportRef.current) return false; + const rect = viewportRef.current.getBoundingClientRect(); + const width = Math.max(1, Math.floor(rect.width)); + const height = Math.max(1, Math.floor(rect.height)); + if (app.renderer && app.renderer.resize) { + app.renderer.resize(width, height); + } + if ( + !hasManualViewTransform && + contentLayer && + handle && + handle.container + ) { + const fitted = fitRuntimePreview(app, contentLayer, handle.container); + resetPreviewPhysicsInheritance(); + return fitted; + } + return false; + }; + + const preparePreviewFrame = () => { + if (!handle) return false; + const adapter = getSpine43Adapter(); + if (adapter && adapter.updateInstance) { + adapter.updateInstance(handle, 0); + } + const fitted = resize(); + drawOverlay(); + if (fitted && !previewReady) { + previewReady = true; + setStatus(null); + } + return fitted; + }; + + const scheduleInitialFit = () => { + let frame = 0; + const run = () => { + if (cancelled || !app || !viewportRef.current) return; + const fitted = preparePreviewFrame(); + frame++; + if ( + (!fitted || frame < 12) && + frame < 24 && + typeof window !== 'undefined' + ) { + window.requestAnimationFrame(run); + } + }; + if (typeof window !== 'undefined') { + window.requestAnimationFrame(run); + } else { + preparePreviewFrame(); + } + }; + + const waitForUsablePreviewRect = (): Promise => + new Promise(resolve => { + let attempts = 0; + const read = (): void => { + const rect = viewportRef.current + ? viewportRef.current.getBoundingClientRect() + : null; + if ( + cancelled || + !rect || + (rect.width >= 80 && rect.height >= 80) || + attempts > 30 + ) { + resolve(rect || { width: 1, height: 1 }); + return; + } + attempts++; + if (typeof window !== 'undefined') { + window.requestAnimationFrame(read); + } else { + setTimeout(read, 16); + } + }; + read(); + }); + + const drawOverlay = () => { + if (!overlayGraphics || !handle || !handle.container) return; + overlayGraphics.clear(); + const latest = latestRef.current; + const adapter = getSpine43Adapter(); + if (adapter && adapter.ensureWorldTransforms) { + adapter.ensureWorldTransforms(handle); + } + const skeleton = + handle.container && handle.container.skeleton + ? handle.container.skeleton + : null; + if (!skeleton) return; + + if (latest.previewOptions.showMesh) { + const meshPreview = latest.content.meshPreview || {}; + drawRuntimeMeshes( + overlayGraphics, + skeleton, + latest.selectedSlotName, + meshPreview.showAllSlots !== false, + getMeshPreviewColor(latest.content) + ); + } + if (latest.previewOptions.showConstraints) { + drawRuntimeConstraints(overlayGraphics, skeleton); + } + if (latest.previewOptions.showBones) { + drawRuntimeBones( + overlayGraphics, + skeleton, + latest.selectedBoneName, + hoveredBoneName + ); + } + }; + + const getPointerStagePoint = (event: any): any => { + if (!app || !previewCanvas) return null; + const PIXI = getPixi(); + if (!PIXI || !PIXI.Point) return null; + const rect = previewCanvas.getBoundingClientRect(); + const screenWidth = + app.screen && Number.isFinite(app.screen.width) + ? app.screen.width + : rect.width; + const screenHeight = + app.screen && Number.isFinite(app.screen.height) + ? app.screen.height + : rect.height; + const stageX = ((event.clientX - rect.left) / rect.width) * screenWidth; + const stageY = + ((event.clientY - rect.top) / rect.height) * screenHeight; + return new PIXI.Point(stageX, stageY); + }; + + const getPointerLocalPoint = (event: any): any => { + if (!contentLayer) return null; + const stagePoint = getPointerStagePoint(event); + if (!stagePoint) return null; + return contentLayer.toLocal(stagePoint); + }; + + const getSkeleton = () => + handle && handle.container && handle.container.skeleton + ? handle.container.skeleton + : null; + + const getBonePickThreshold = () => { + const scale = + contentLayer && contentLayer.scale && contentLayer.scale.x + ? Math.abs(contentLayer.scale.x) + : 1; + return 14 / Math.max(0.05, scale); + }; + + const updateHoveredBone = (boneName: string): void => { + if (hoveredBoneName === boneName) return; + hoveredBoneName = boneName; + if (previewCanvas) { + previewCanvas.style.cursor = draggingBone + ? 'grabbing' + : panningView + ? 'move' + : hoveredBoneName + ? 'grab' + : 'default'; + } + drawOverlay(); + }; + + const onPointerMove = (event: any): void => { + const skeleton = getSkeleton(); + const point = getPointerLocalPoint(event); + if (!skeleton || !point) return; + + if (panningView && contentLayer) { + event.preventDefault(); + const stagePoint = getPointerStagePoint(event); + if (!stagePoint) return; + contentLayer.position.set( + panningView.startPosition.x + + stagePoint.x - + panningView.startPointer.x, + panningView.startPosition.y + + stagePoint.y - + panningView.startPointer.y + ); + resetPreviewPhysicsInheritance(); + return; + } + + if (draggingBone) { + event.preventDefault(); + const deltaX = point.x - draggingBone.startPointer.x; + const deltaY = point.y - draggingBone.startPointer.y; + const localDelta = worldDeltaToBoneLocal( + draggingBone.parentBone, + deltaX, + deltaY + ); + latestRef.current.onBoneOverrideChange( + draggingBone.name, + { + x: draggingBone.startX + localDelta.x, + y: draggingBone.startY + localDelta.y, + }, + { recordUndo: false } + ); + return; + } + + const bone = findRuntimeBoneAtPoint( + skeleton, + point.x, + point.y, + getBonePickThreshold() + ); + updateHoveredBone(bone ? getBoneName(bone) : ''); + }; + + const onPointerDown = (event: any): void => { + if (event.button === 1) { + const stagePoint = getPointerStagePoint(event); + if (!stagePoint || !contentLayer) return; + event.preventDefault(); + hasManualViewTransform = true; + panningView = { + startPointer: { x: stagePoint.x, y: stagePoint.y }, + startPosition: { + x: contentLayer.position.x, + y: contentLayer.position.y, + }, + }; + if (previewCanvas) previewCanvas.style.cursor = 'move'; + return; + } + if (event.button !== 0) return; + const skeleton = getSkeleton(); + const point = getPointerLocalPoint(event); + if (!skeleton || !point || !hoveredBoneName) return; + const bone = findRuntimeBone(skeleton, hoveredBoneName); + const pose = getBonePose(bone); + if (!bone || !pose) return; + event.preventDefault(); + latestRef.current.onSelectedBoneNameChange(hoveredBoneName); + latestRef.current.onBoneDragStart(); + const boneOverride = + latestRef.current.content.inspectorOverrides && + latestRef.current.content.inspectorOverrides.bones && + latestRef.current.content.inspectorOverrides.bones[hoveredBoneName] + ? latestRef.current.content.inspectorOverrides.bones[ + hoveredBoneName + ] + : {}; + draggingBone = { + name: hoveredBoneName, + startPointer: { x: point.x, y: point.y }, + startX: toNumber(boneOverride.x, toNumber(pose.x, 0)), + startY: toNumber(boneOverride.y, toNumber(pose.y, 0)), + parentBone: getRuntimeBoneParent(skeleton, bone), + }; + if (previewCanvas) previewCanvas.style.cursor = 'grabbing'; + }; + + const onPointerUp = () => { + if (draggingBone) { + latestRef.current.onBoneDragEnd(); + } + draggingBone = null; + panningView = null; + if (previewCanvas) { + previewCanvas.style.cursor = hoveredBoneName ? 'grab' : 'default'; + } + }; + + const onPointerLeave = () => { + if (draggingBone || panningView) return; + updateHoveredBone(''); + }; + + const onWheel = (event: any): void => { + if (!contentLayer) return; + const stagePoint = getPointerStagePoint(event); + if (!stagePoint) return; + event.preventDefault(); + hasManualViewTransform = true; + const localPoint = contentLayer.toLocal(stagePoint); + const currentScale = + contentLayer.scale && Number.isFinite(contentLayer.scale.x) + ? contentLayer.scale.x + : 1; + const zoomFactor = Math.exp(-event.deltaY * 0.0012); + const nextScale = Math.max( + 0.05, + Math.min(12, currentScale * zoomFactor) + ); + contentLayer.scale.set(nextScale); + contentLayer.position.set( + stagePoint.x - localPoint.x * nextScale, + stagePoint.y - localPoint.y * nextScale + ); + resetPreviewPhysicsInheritance(); + }; + + const onAuxClick = (event: any): void => { + if (event.button === 1) event.preventDefault(); + }; + + const start = async () => { + if (!viewportRef.current) return; + setStatus('正在加载 Spine 预览...'); + if (!skeletonFile || !atlasFile) { + setStatus('请选择 Spine skeleton 和 atlas 资源。'); + return; + } + + await ensureDialogRuntime(); + const viewport = viewportRef.current; + if (cancelled || !viewport) return; + + const PIXI = getPixi(); + const adapter = getSpine43Adapter(); + if (!PIXI || !adapter) + throw new Error('Spine preview runtime is missing.'); + + const rect = await waitForUsablePreviewRect(); + if (cancelled || !viewportRef.current) return; + const width = Math.max(1, Math.floor(rect.width)); + const height = Math.max(1, Math.floor(rect.height)); + app = new PIXI.Application({ + width, + height, + backgroundAlpha: 0, + antialias: true, + resolution: + typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1, + autoDensity: true, + }); + const canvas = app.view || app.canvas; + canvas.style.width = '100%'; + canvas.style.height = '100%'; + canvas.style.touchAction = 'none'; + previewCanvas = canvas; + viewport.appendChild(canvas); + + contentLayer = new PIXI.Container(); + overlayGraphics = new PIXI.Graphics(); + app.stage.addChild(contentLayer); + + const latestContent = latestRef.current.content; + handle = await adapter.createInstance({ + runtimeScriptPath: + latestContent.runtimeScriptPath || DEFAULT_RUNTIME_SCRIPT_PATH, + skeletonFile, + atlasFile, + binaryData: !!latestContent.binaryData, + importScale: Number(latestContent.importScale) || 1, + skinName: latestContent.skinName || '', + animationName: latestContent.animationName || '', + loop: latestContent.loop !== false, + mixDuration: Number(latestContent.mixDuration) || 0, + inspectorOverrides: latestContent.inspectorOverrides || {}, + }); + if (cancelled) { + adapter.destroyInstance(handle); + handle = null; + return; + } + + contentLayer.addChild(handle.container); + contentLayer.addChild(overlayGraphics); + const fitted = fitRuntimePreview(app, contentLayer, handle.container); + resetPreviewPhysicsInheritance(); + if (fitted) { + previewReady = true; + setStatus(null); + } + scheduleInitialFit(); + drawOverlay(); + + const ResizeObserverClass = + typeof window !== 'undefined' + ? (window: any).ResizeObserver || null + : null; + if (ResizeObserverClass) { + resizeObserver = new ResizeObserverClass(resize); + resizeObserver.observe(viewportRef.current); + } + previewCanvas.addEventListener('pointermove', onPointerMove); + previewCanvas.addEventListener('pointerdown', onPointerDown); + previewCanvas.addEventListener('pointerleave', onPointerLeave); + previewCanvas.addEventListener('wheel', onWheel, { passive: false }); + previewCanvas.addEventListener('auxclick', onAuxClick); + if (typeof window !== 'undefined') { + window.addEventListener('pointerup', onPointerUp); + } + + app.ticker.add((deltaFrames: number) => { + if (!handle) return; + const latest = latestRef.current; + const adapter = getSpine43Adapter(); + if (!adapter) return; + const animationPreview = latest.content.editorAnimationPreview || {}; + const animationName = latest.content.animationName || ''; + const loop = latest.content.loop !== false; + const animationKey = animationName + ':' + loop; + if (animationName && animationKey !== lastAnimationKey) { + adapter.setAnimation(handle, animationName, loop); + lastAnimationKey = animationKey; + } + + const skinName = latest.content.skinName || ''; + if (skinName !== lastSkinName && adapter.setSkin) { + adapter.setSkin(handle, skinName); + lastSkinName = skinName; + } + + const mixDuration = Number(latest.content.mixDuration) || 0; + if (mixDuration !== lastMixDuration && adapter.setMix) { + adapter.setMix(handle, mixDuration); + lastMixDuration = mixDuration; + } + + if (adapter.setInspectorOverrides) { + adapter.setInspectorOverrides( + handle, + latest.content.inspectorOverrides || {} + ); + } + const resetRequest = latest.runtimeResetRequest; + if (resetRequest && resetRequest.id !== lastRuntimeResetRequestId) { + lastRuntimeResetRequestId = resetRequest.id; + if (resetRequest.type === 'all' && adapter.resetAllBones) { + adapter.resetAllBones(handle); + } else if ( + resetRequest.type === 'bone' && + resetRequest.boneName && + adapter.resetBone + ) { + adapter.resetBone(handle, resetRequest.boneName); + } + if (adapter.setInspectorOverrides) { + adapter.setInspectorOverrides( + handle, + latest.content.inspectorOverrides || {} + ); + } + if ( + handle.container && + typeof handle.container.resetPhysicsTransform === 'function' + ) { + handle.container.resetPhysicsTransform(); + } + } + if (adapter.setVisible) { + adapter.setVisible(handle, latest.previewOptions.showImage); + } else if (handle.container) { + handle.container.visible = latest.previewOptions.showImage; + } + + const deltaSeconds = + animationPreview.playing === false + ? 0 + : (deltaFrames / 60) * (Number(latest.content.timeScale) || 1); + adapter.updateInstance(handle, deltaSeconds); + if (!previewReady && !hasManualViewTransform) { + const fitted = resize(); + if (fitted) { + previewReady = true; + setStatus(null); + } + } + if (animationPreview.lockProgress && adapter.setAnimationProgress) { + adapter.setAnimationProgress( + handle, + 0, + Number(animationPreview.progress) || 0 + ); + } + drawOverlay(); + }); + }; + + start().catch(error => { + if (!cancelled) { + setStatus( + `无法加载 Spine 预览:${ + error && error.message ? error.message : String(error || '') + }` + ); + console.error('Unable to load Spine 4.3 inspector preview:', error); + } + }); + + return () => { + cancelled = true; + cleanup(); + }; + }, + [atlasFile, content.binaryData, content.importScale, skeletonFile] + ); + + return ( +
+ {status ? ( +
+ {status} +
+ ) : null} +
+ ); +}; + +const NumberField = ({ + label, + value, + onChange, +}: {| + label: string, + value: number, + onChange: number => void, +|}) => ( + onChange(toNumber(newValue, 0))} + /> +); + +const getBoneValue = ( + bone: any, + override: any, + field: string, + fallback: number +): number => + override && override[field] !== undefined + ? override[field] + : bone[field] !== undefined + ? bone[field] + : fallback; + +const BonesPanel = ({ + skeletonJson, + draft, + onDraftChange, + selectedBoneName, + setSelectedBoneName, + onBoneChange, + onResetSelectedBone, + onResetAllBones, +}: {| + skeletonJson: any, + draft: Spine43Content, + onDraftChange: Spine43Content => void, + selectedBoneName: string, + setSelectedBoneName: string => void, + onBoneChange: (string, AnyObject) => void, + onResetSelectedBone: string => void, + onResetAllBones: () => void, +|}) => { + const bones = getBones(skeletonJson); + const constraints = getConstraints(skeletonJson); + const overrides = draft.inspectorOverrides || emptyInspectorOverrides(); + const [selectedConstraintName, setSelectedConstraintName] = React.useState( + constraints[0] ? constraints[0].name : '' + ); + const selectedBone = bones.find(bone => bone.name === selectedBoneName); + const selectedConstraint = constraints.find( + constraint => constraint.name === selectedConstraintName + ); + + const updateBone = (field: string, value: number): void => { + if (!selectedBone) return; + onBoneChange(selectedBone.name, { [field]: value }); + }; + + const resetSelectedBone = () => { + if (!selectedBone) return; + onResetSelectedBone(selectedBone.name); + }; + + const resetAllBones = () => { + onResetAllBones(); + }; + + const updateConstraint = (field: string, value: number): void => { + if (!selectedConstraint) return; + const next = clone(draft); + next.inspectorOverrides = + next.inspectorOverrides || emptyInspectorOverrides(); + next.inspectorOverrides.constraints = + next.inspectorOverrides.constraints || {}; + next.inspectorOverrides.constraints[selectedConstraint.name] = { + ...(next.inspectorOverrides.constraints[selectedConstraint.name] || {}), + [field]: value, + }; + onDraftChange(next); + }; + + const boneOverride = + selectedBone && overrides.bones && overrides.bones[selectedBone.name] + ? overrides.bones[selectedBone.name] + : {}; + const constraintOverride = + selectedConstraint && + overrides.constraints && + overrides.constraints[selectedConstraint.name] + ? overrides.constraints[selectedConstraint.name] + : {}; + + return ( +
+
+ 骨骼 + setSelectedBoneName(event.target.value)} + floatingLabelText="骨骼" + > + {bones.map(bone => ( + + ))} + + {selectedBone ? ( + + + updateBone('x', value)} + /> + updateBone('y', value)} + /> + + + updateBone('rotation', value)} + /> + updateBone('length', value)} + /> + + + updateBone('scaleX', value)} + /> + updateBone('scaleY', value)} + /> + +
+ + +
+
+ ) : null} +
+ +
+ 约束 + setSelectedConstraintName(event.target.value)} + floatingLabelText="约束" + > + {constraints.map(constraint => ( + + ))} + + {selectedConstraint ? ( + + + 类型:{selectedConstraint.type || 'constraint'},目标骨骼: + {selectedConstraint.bone || selectedConstraint.target || '-'} + + + updateConstraint('mix', value)} + /> + updateConstraint('inertia', value)} + /> + + + updateConstraint('strength', value)} + /> + updateConstraint('damping', value)} + /> + + + updateConstraint('mass', value)} + /> + updateConstraint('gravity', value)} + /> + + + ) : ( + 这个 skeleton 没有约束。 + )} +
+
+ ); +}; + +const MeshPanel = ({ + skeletonJson, + draft, + onDraftChange, + selectedSlotName, + setSelectedSlotName, +}: {| + skeletonJson: any, + draft: Spine43Content, + onDraftChange: Spine43Content => void, + selectedSlotName: string, + setSelectedSlotName: string => void, +|}) => { + const slots = getSlots(skeletonJson); + const showAllSlots = + !draft.meshPreview || draft.meshPreview.showAllSlots !== false; + const attachments = showAllSlots + ? getAllAttachments(skeletonJson) + : getSlotAttachments(skeletonJson, selectedSlotName); + + const updateMeshPreview = (changes: AnyObject): void => { + const next = clone(draft); + next.meshPreview = { + ...(next.meshPreview || {}), + ...changes, + }; + onDraftChange(next); + }; + + return ( +
+
+ 网格查看 + + updateMeshPreview({ showAllSlots: checked }) + } + /> + {!showAllSlots ? ( + { + setSelectedSlotName(event.target.value); + updateMeshPreview({ slotName: event.target.value }); + }} + floatingLabelText="插槽" + > + {slots.map(slot => ( + + ))} + + ) : null} +
+
+ 附件/网格 +
+ {attachments.map(info => { + const attachment = info.attachment || {}; + const vertexCount = Array.isArray(attachment.vertices) + ? Math.floor(attachment.vertices.length / 2) + : 4; + const triangleCount = Array.isArray(attachment.triangles) + ? Math.floor(attachment.triangles.length / 3) + : 2; + return ( +
+ + {info.slotName} / {info.name} + + + 类型:{attachment.type || 'region'},顶点:{vertexCount} + ,三角形: + {triangleCount} + +
+ ); + })} +
+
+
+ ); +}; + +const SlotsPanel = ({ + skeletonJson, + draft, + onDraftChange, +}: {| + skeletonJson: any, + draft: Spine43Content, + onDraftChange: Spine43Content => void, +|}) => { + const slots = getSlots(skeletonJson); + const overrides = draft.inspectorOverrides || emptyInspectorOverrides(); + const [selectedSlotName, setSelectedSlotName] = React.useState( + slots[0] ? slots[0].name : '' + ); + const selectedSlot = slots.find(slot => slot.name === selectedSlotName); + const defaultColor = parseColorString(selectedSlot && selectedSlot.color); + const colorOverride = + selectedSlot && overrides.slots && overrides.slots[selectedSlot.name] + ? overrides.slots[selectedSlot.name] + : {}; + const color: PreviewColor = { + r: getBoneValue(defaultColor, colorOverride, 'r', 255), + g: getBoneValue(defaultColor, colorOverride, 'g', 255), + b: getBoneValue(defaultColor, colorOverride, 'b', 255), + a: getBoneValue(defaultColor, colorOverride, 'a', 1), + }; + + const updateColor = (field: string, value: number): void => { + if (!selectedSlot) return; + const next = clone(draft); + next.inspectorOverrides = + next.inspectorOverrides || emptyInspectorOverrides(); + next.inspectorOverrides.slots = next.inspectorOverrides.slots || {}; + next.inspectorOverrides.slots[selectedSlot.name] = { + ...(next.inspectorOverrides.slots[selectedSlot.name] || {}), + [field]: value, + }; + onDraftChange(next); + }; + + const updateColorFromPicker = (colorResult: ColorResult) => { + if (!selectedSlot) return; + const nextColor = colorResult.rgb || {}; + const next = clone(draft); + next.inspectorOverrides = + next.inspectorOverrides || emptyInspectorOverrides(); + next.inspectorOverrides.slots = next.inspectorOverrides.slots || {}; + next.inspectorOverrides.slots[selectedSlot.name] = { + ...(next.inspectorOverrides.slots[selectedSlot.name] || {}), + r: toNumber(nextColor.r, color.r), + g: toNumber(nextColor.g, color.g), + b: toNumber(nextColor.b, color.b), + a: + nextColor.a !== undefined + ? Math.max(0, Math.min(1, toNumber(nextColor.a, color.a))) + : color.a, + }; + onDraftChange(next); + }; + + return ( +
+
+ 插槽颜色 + setSelectedSlotName(event.target.value)} + floatingLabelText="插槽" + > + {slots.map(slot => ( + + ))} + +
+ + {colorToCss(color)} +
+
+ updateColor('r', value)} + /> + updateColor('g', value)} + /> + updateColor('b', value)} + /> + updateColor('a', value)} + /> +
+
+
+ 插槽附件 + {selectedSlot + ? getSlotAttachments(skeletonJson, selectedSlot.name).map(info => ( + + {info.skinName} / {info.name} + + )) + : null} +
+
+ ); +}; + +const describeTimeline = (timeline: any): string => { + if (!timeline || typeof timeline !== 'object') return '空轨道'; + if (Array.isArray(timeline)) { + const frameKeys: { [string]: boolean, ... } = {}; + let firstTime = Infinity; + let lastTime = -Infinity; + let hasTime = false; + timeline.forEach(frame => { + if (!frame || typeof frame !== 'object') return; + Object.keys(frame).forEach(key => { + if (key !== 'time' && key !== 'curve') frameKeys[key] = true; + }); + const time = Number(frame.time); + if (Number.isFinite(time)) { + hasTime = true; + if (time < firstTime) firstTime = time; + if (time > lastTime) lastTime = time; + } + }); + const fields = Object.keys(frameKeys); + const details: Array = []; + if (fields.length) details.push(`属性:${fields.join(', ')}`); + if (hasTime) { + details.push(`时间:${String(firstTime)} - ${String(lastTime)}s`); + } + return `${timeline.length} 个关键帧${ + details.length ? `;${details.join(';')}` : '' + }`; + } + const keys = Object.keys(timeline); + return keys.length ? keys.join(', ') : '空轨道'; +}; + +const timelineTypeLabels: { [string]: string, ... } = { + bones: '骨骼', + slots: '插槽', + ik: 'IK 约束', + transform: '变换约束', + path: '路径约束', + physics: '物理约束', + sliders: '滑杆', + deform: '网格变形', + drawOrder: '绘制顺序', + drawOrderFolder: '绘制顺序文件夹', + events: '事件', + attachment: '附件', + sequence: '序列', + rgba: 'RGBA 颜色', + rgb: 'RGB 颜色', + rgba2: 'RGBA 双颜色', + rgb2: 'RGB 双颜色', + alpha: '透明度', + rotate: '旋转', + translate: '位移', + translatex: '位移 X', + translatey: '位移 Y', + scale: '缩放', + scalex: '缩放 X', + scaley: '缩放 Y', + shear: '倾斜', + shearx: '倾斜 X', + sheary: '倾斜 Y', + inherit: '继承', + color: '颜色', + position: '位置', + spacing: '间距', + mix: '混合', + reset: '重置', + inertia: '惯性', + strength: '强度', + damping: '阻尼', + mass: '质量', + wind: '风力', + gravity: '重力', +}; + +const formatTimelineSegment = (segment: any): string => { + const key = String(segment || ''); + return ( + timelineTypeLabels[key] || timelineTypeLabels[key.toLowerCase()] || key + ); +}; + +const formatTimelinePath = (path: Array): string => + path.length ? path.map(formatTimelineSegment).join(' / ') : 'Timeline'; + +const collectTimelineEntries = ( + value: any, + path: Array = [] +): Array => { + if (!value || typeof value !== 'object') return []; + if (Array.isArray(value)) { + return [ + { + name: formatTimelinePath(path), + path: path.join('/'), + value, + }, + ]; + } + + const keys = Object.keys(value); + if (!keys.length) return []; + + const entries: Array = []; + keys.forEach(key => { + entries.push(...collectTimelineEntries(value[key], path.concat(key))); + }); + + if (!entries.length && path.length) { + entries.push({ + name: formatTimelinePath(path), + path: path.join('/'), + value, + }); + } + return entries; +}; + +const getAnimationData = (skeletonJson: any, animationName: string): any => { + const animations = skeletonJson.animations || {}; + if (Array.isArray(animations)) { + return ( + animations.find( + animation => animation && animation.name === animationName + ) || {} + ); + } + return animations[animationName] || {}; +}; + +const AnimationPanel = ({ + skeletonJson, + draft, + onDraftChange, +}: {| + skeletonJson: any, + draft: Spine43Content, + onDraftChange: Spine43Content => void, +|}) => { + const animationNames = getAnimationNames(skeletonJson); + const selectedAnimationName = draft.animationName || animationNames[0] || ''; + const selectedAnimation = getAnimationData( + skeletonJson, + selectedAnimationName + ); + const preview = draft.editorAnimationPreview || { + playing: true, + progress: 0, + lockProgress: false, + }; + + const updateDraft = (changes: AnyObject): void => { + onDraftChange({ + ...draft, + ...changes, + }); + }; + + const updatePreview = (changes: AnyObject): void => { + updateDraft({ + editorAnimationPreview: { + ...preview, + ...changes, + }, + }); + }; + + const timelineGroups = collectTimelineEntries(selectedAnimation); + + return ( +
+
+ 动画播放 + updateDraft({ animationName: event.target.value })} + floatingLabelText="动画" + > + {animationNames.map(name => ( + + ))} + + updatePreview({ playing: checked })} + /> + updateDraft({ loop: checked })} + /> + + updateDraft({ timeScale: value })} + /> + updateDraft({ mixDuration: value })} + /> + + updatePreview({ lockProgress: checked })} + /> + + updatePreview({ progress: Math.max(0, Math.min(1, value)) }) + } + /> +
+ +
+ 曲线和关键帧 + {timelineGroups.length ? ( + timelineGroups.map((group, index) => ( +
+ {group.name} + {describeTimeline(group.value)} +
+ )) + ) : ( + 这个动画没有显式关键帧。 + )} +
+
+ ); +}; + +const modeTitle = { + bones: '编辑骨骼和约束', + mesh: '编辑网格', + slots: '编辑插槽', + animation: '查看动画', +}; + +const modeOptions = [ + { label: modeTitle.bones, value: 'bones' }, + { label: modeTitle.mesh, value: 'mesh' }, + { label: modeTitle.slots, value: 'slots' }, + { label: modeTitle.animation, value: 'animation' }, +]; + +const createDefaultPreviewOptions = (mode: InspectorMode): PreviewOptions => ({ + showImage: true, + showBones: mode === 'bones', + showConstraints: mode === 'bones', + showMesh: mode === 'mesh', +}); + +const getBoneOverridesSnapshot = (content: Spine43Content): AnyObject => + clone( + content && content.inspectorOverrides && content.inspectorOverrides.bones + ? content.inspectorOverrides.bones + : {} + ); + +const applyBoneOverrides = ( + content: Spine43Content, + boneOverrides: AnyObject +): Spine43Content => { + const next = clone(content); + next.inspectorOverrides = { + ...emptyInspectorOverrides(), + ...(next.inspectorOverrides || {}), + bones: clone(boneOverrides || {}), + }; + return next; +}; + +const Spine43InspectorDialog = ({ + mode, + project, + objectConfiguration, + skeletonJson, + onApply, + onCancel, + onModeChange, +}: {| + mode: InspectorMode, + project: gdProject, + objectConfiguration: gdObjectConfiguration, + skeletonJson: Object, + onApply: Object => void, + onCancel: () => void, + onModeChange: InspectorMode => void, +|}) => { + const originalContent = getContent(objectConfiguration); + const [draft, setDraft] = React.useState(() => ({ + ...clone(originalContent), + inspectorOverrides: { + ...emptyInspectorOverrides(), + ...(clone(originalContent.inspectorOverrides) || {}), + }, + editorAnimationPreview: { + playing: true, + progress: 0, + lockProgress: false, + ...(clone(originalContent.editorAnimationPreview) || {}), + }, + meshPreview: { + showAllSlots: true, + slotName: '', + ...(clone(originalContent.meshPreview) || {}), + }, + })); + const [selectedSlotName, setSelectedSlotName] = React.useState( + (draft.meshPreview && draft.meshPreview.slotName) || + (getSlots(skeletonJson)[0] ? getSlots(skeletonJson)[0].name : '') + ); + const [selectedBoneName, setSelectedBoneName] = React.useState( + getBones(skeletonJson)[0] ? getBones(skeletonJson)[0].name : '' + ); + const [previewOptions, setPreviewOptions] = React.useState(() => + createDefaultPreviewOptions(mode) + ); + const [ + runtimeResetRequest, + setRuntimeResetRequest, + ] = React.useState(null); + const draftRef = React.useRef(draft); + const boneUndoStackRef = React.useRef>([]); + const pendingBoneChangesRef = React.useRef({}); + const pendingAnimationFrameRef = React.useRef(null); + const isDraggingBoneRef = React.useRef(false); + draftRef.current = draft; + + const cancelPendingBoneFlush = React.useCallback(() => { + if (pendingAnimationFrameRef.current !== null) { + if (typeof window !== 'undefined' && window.cancelAnimationFrame) { + window.cancelAnimationFrame(pendingAnimationFrameRef.current); + } + pendingAnimationFrameRef.current = null; + } + }, []); + + const getBoneOverridesWithPending = React.useCallback(() => { + const currentBones = getBoneOverridesSnapshot(draftRef.current); + const pending = pendingBoneChangesRef.current || {}; + Object.keys(pending).forEach(boneName => { + currentBones[boneName] = { + ...(currentBones[boneName] || {}), + ...pending[boneName], + }; + }); + return currentBones; + }, []); + + const consumeBoneOverridesWithPending = React.useCallback( + () => { + const currentBones = getBoneOverridesWithPending(); + pendingBoneChangesRef.current = {}; + cancelPendingBoneFlush(); + return currentBones; + }, + [cancelPendingBoneFlush, getBoneOverridesWithPending] + ); + + const requestRuntimeReset = React.useCallback( + (type: 'all' | 'bone', boneName?: string) => { + setRuntimeResetRequest(currentRequest => ({ + id: currentRequest ? currentRequest.id + 1 : 1, + type, + boneName: boneName || '', + })); + }, + [] + ); + + const pushBoneUndoSnapshot = React.useCallback( + (snapshotOverride?: AnyObject) => { + const snapshot = clone( + snapshotOverride || getBoneOverridesSnapshot(draftRef.current) + ); + const stack = boneUndoStackRef.current; + const previous = stack[stack.length - 1]; + if (previous && JSON.stringify(previous) === JSON.stringify(snapshot)) { + return; + } + stack.push(snapshot); + if (stack.length > 80) stack.shift(); + }, + [] + ); + + const setBoneOverrides = React.useCallback((boneOverrides: AnyObject) => { + setDraft(currentDraft => { + const next = applyBoneOverrides(currentDraft, boneOverrides); + draftRef.current = next; + return next; + }); + }, []); + + const flushPendingBoneChanges = React.useCallback( + () => { + cancelPendingBoneFlush(); + const pending = pendingBoneChangesRef.current; + pendingBoneChangesRef.current = {}; + const boneNames = Object.keys(pending); + if (!boneNames.length) return; + + setDraft(currentDraft => { + const next = clone(currentDraft); + next.inspectorOverrides = { + ...emptyInspectorOverrides(), + ...(next.inspectorOverrides || {}), + }; + next.inspectorOverrides.bones = { + ...(next.inspectorOverrides.bones || {}), + }; + boneNames.forEach(boneName => { + next.inspectorOverrides.bones[boneName] = { + ...(next.inspectorOverrides.bones[boneName] || {}), + ...pending[boneName], + }; + }); + draftRef.current = next; + return next; + }); + }, + [cancelPendingBoneFlush] + ); + + const schedulePendingBoneFlush = React.useCallback( + () => { + if (pendingAnimationFrameRef.current !== null) return; + if (typeof window !== 'undefined' && window.requestAnimationFrame) { + pendingAnimationFrameRef.current = window.requestAnimationFrame(() => { + pendingAnimationFrameRef.current = null; + flushPendingBoneChanges(); + }); + } else { + flushPendingBoneChanges(); + } + }, + [flushPendingBoneChanges] + ); + + React.useEffect( + () => () => { + if ( + pendingAnimationFrameRef.current !== null && + typeof window !== 'undefined' && + window.cancelAnimationFrame + ) { + window.cancelAnimationFrame(pendingAnimationFrameRef.current); + } + }, + [] + ); + + const apply = () => { + const boneOverrides = consumeBoneOverridesWithPending(); + const latestDraft = applyBoneOverrides(draftRef.current, boneOverrides); + draftRef.current = latestDraft; + onApply(latestDraft); + }; + const changeMode = (nextMode: InspectorMode): void => { + onModeChange(nextMode); + setPreviewOptions(current => ({ + ...current, + showBones: nextMode === 'bones', + showConstraints: nextMode === 'bones', + showMesh: nextMode === 'mesh', + })); + }; + const updateMeshPreviewColor = React.useCallback( + (colorResult: ColorResult) => { + const nextRgb = colorResult && colorResult.rgb ? colorResult.rgb : {}; + setDraft(currentDraft => { + const currentColor = getMeshPreviewColor(currentDraft); + const next = clone(currentDraft); + next.meshPreview = { + ...(next.meshPreview || {}), + color: normalizePreviewColor({ + ...currentColor, + r: nextRgb.r, + g: nextRgb.g, + b: nextRgb.b, + }), + }; + draftRef.current = next; + return next; + }); + }, + [] + ); + const updateBoneOverride = ( + boneName: string, + changes: AnyObject, + options?: BoneOverrideOptions + ): void => { + if (!boneName) return; + const shouldRecordUndo = !options || options.recordUndo !== false; + if (shouldRecordUndo) pushBoneUndoSnapshot(); + + pendingBoneChangesRef.current = { + ...pendingBoneChangesRef.current, + [boneName]: { + ...(pendingBoneChangesRef.current[boneName] || {}), + ...changes, + }, + }; + if (options && options.immediate) flushPendingBoneChanges(); + else schedulePendingBoneFlush(); + }; + + const beginBoneDrag = () => { + if (isDraggingBoneRef.current) return; + isDraggingBoneRef.current = true; + pushBoneUndoSnapshot(); + }; + + const endBoneDrag = () => { + if (!isDraggingBoneRef.current) return; + isDraggingBoneRef.current = false; + flushPendingBoneChanges(); + }; + + const resetSelectedBone = (boneName: string): void => { + if (!boneName) return; + const currentBones = consumeBoneOverridesWithPending(); + const hadOverride = !!currentBones[boneName]; + if (hadOverride) { + pushBoneUndoSnapshot(currentBones); + delete currentBones[boneName]; + setBoneOverrides(currentBones); + } + requestRuntimeReset('bone', boneName); + }; + + const resetAllBones = () => { + const currentBones = consumeBoneOverridesWithPending(); + if (Object.keys(currentBones).length) { + pushBoneUndoSnapshot(currentBones); + setBoneOverrides({}); + } + requestRuntimeReset('all'); + }; + + const undoBoneOperation = React.useCallback( + () => { + flushPendingBoneChanges(); + const previous = boneUndoStackRef.current.pop(); + if (!previous) return false; + setBoneOverrides(previous); + return true; + }, + [flushPendingBoneChanges, setBoneOverrides] + ); + + React.useEffect( + () => { + const onKeyDown = (event: any): void => { + if ( + !(event.ctrlKey || event.metaKey) || + String(event.key || '').toLowerCase() !== 'z' + ) { + return; + } + const target = event.target; + const tagName = + target && target.tagName ? String(target.tagName).toLowerCase() : ''; + if ( + tagName === 'input' || + tagName === 'textarea' || + (target && target.isContentEditable) + ) { + return; + } + if (undoBoneOperation()) { + event.preventDefault(); + event.stopPropagation(); + } + }; + if (typeof window !== 'undefined') { + window.addEventListener('keydown', onKeyDown); + } + return () => { + if (typeof window !== 'undefined') { + window.removeEventListener('keydown', onKeyDown); + } + }; + }, + [undoBoneOperation] + ); + + let sidePanel = null; + if (mode === 'bones') { + sidePanel = ( + + updateBoneOverride(boneName, changes, { immediate: true }) + } + onResetSelectedBone={resetSelectedBone} + onResetAllBones={resetAllBones} + /> + ); + } else if (mode === 'mesh') { + sidePanel = ( + + ); + } else if (mode === 'slots') { + sidePanel = ( + + ); + } else { + sidePanel = ( + + ); + } + + return ( + Cancel} + onClick={onCancel} + />, + Apply} + primary + onClick={apply} + />, + ]} + onRequestClose={onCancel} + onApply={apply} + open + maxWidth="lg" + fullHeight + transitionDuration={0} + flexBody + exceptionallyStillAllowRenderingInstancesEditors + > +
+
+ +
+
+
+ + +
+ {sidePanel} +
+
+
+ ); +}; + +const Spine43Editor = (props: EditorProps): React.Node => { + const { objectConfiguration, project, onObjectUpdated } = props; + const forceUpdate = useForceUpdate(); + const [mode, setMode] = React.useState(null); + const [skeletonJson, setSkeletonJson] = React.useState(null); + const [loadingError, setLoadingError] = React.useState(null); + const content = getContent(objectConfiguration); + + React.useEffect( + () => { + let cancelled = false; + setSkeletonJson(null); + setLoadingError(null); + + if (content.binaryData) { + setLoadingError('二进制 .skel 暂时不能在编辑器中解析结构。'); + return; + } + + const url = resolveResourceUrl(project, content.skeletonResource); + if (!url) { + setLoadingError('请选择 Spine skeleton JSON 资源。'); + return; + } + + (async () => { + try { + const json = JSON.parse(await readText(url)); + if (!cancelled) setSkeletonJson(json); + } catch (error) { + if (!cancelled) { + setLoadingError( + error && error.message ? error.message : String(error || '') + ); + } + } + })(); + + return () => { + cancelled = true; + }; + }, + [project, content.binaryData, content.skeletonResource] + ); + + const applyDraft = (draft: Spine43Content): void => { + const targetContent = getContent(objectConfiguration); + Object.keys(draft).forEach(key => { + targetContent[key] = clone(draft[key]); + }); + if (onObjectUpdated) onObjectUpdated(); + forceUpdate(); + setMode(null); + }; + + const openEditor = () => { + setMode('bones'); + }; + + return ( + + + + + {loadingError ? ( + {loadingError} + ) : null} +
+ +
+
+
+ {mode && skeletonJson ? ( + setMode(null)} + onModeChange={setMode} + /> + ) : null} +
+ ); +}; + +export default Spine43Editor; diff --git a/newIDE/app/src/ObjectEditor/ObjectsEditorService.js b/newIDE/app/src/ObjectEditor/ObjectsEditorService.js index 4e79acbf21c5..e600bd120c33 100644 --- a/newIDE/app/src/ObjectEditor/ObjectsEditorService.js +++ b/newIDE/app/src/ObjectEditor/ObjectsEditorService.js @@ -11,6 +11,7 @@ import CustomObjectPropertiesEditor from './Editors/CustomObjectPropertiesEditor import Cube3DEditor from './Editors/Cube3DEditor'; import Model3DEditor from './Editors/Model3DEditor'; import SpineEditor from './Editors/SpineEditor'; +import Spine43Editor from './Editors/Spine43Editor'; import SimpleTileMapEditor from './Editors/SimpleTileMapEditor'; const gd: libGDevelop = global.gd; @@ -168,6 +169,21 @@ const ObjectsEditorService = { gd.asObjectJsImplementation(objectConfiguration), helpPagePath: '/objects/spine', }, + 'Spine43Object::Spine43Object': { + component: Spine43Editor, + createNewObject: ( + objectConfiguration: gdObjectConfiguration + ): gdObjectConfiguration => + gd + .asObjectJsImplementation(objectConfiguration) + .clone() + .release(), + castToObjectType: ( + objectConfiguration: gdObjectConfiguration + ): gdObjectJsImplementation => + gd.asObjectJsImplementation(objectConfiguration), + helpPagePath: '/objects/spine43', + }, 'TileMap::SimpleTileMap': { component: SimpleTileMapEditor, createNewObject: ( diff --git a/newIDE/app/src/ObjectsList/index.js b/newIDE/app/src/ObjectsList/index.js index 6f22aa5b438e..078873b91827 100644 --- a/newIDE/app/src/ObjectsList/index.js +++ b/newIDE/app/src/ObjectsList/index.js @@ -433,6 +433,7 @@ const objectTypeToDefaultName = { 'Scene3D::Model3DObject': 'New3DModel', 'Scene3D::Cube3DObject': 'New3DBox', 'SpineObject::SpineObject': 'NewSpine', + 'Spine43Object::Spine43Object': 'NewSpine', 'Video::VideoObject': 'NewVideo', }; diff --git a/newIDE/app/src/ProjectManager/TimelineTreeViewItemContent.js b/newIDE/app/src/ProjectManager/TimelineTreeViewItemContent.js new file mode 100644 index 000000000000..23ff1ddb928a --- /dev/null +++ b/newIDE/app/src/ProjectManager/TimelineTreeViewItemContent.js @@ -0,0 +1,242 @@ +// @flow +import { type I18n as I18nType } from '@lingui/core'; +import { t } from '@lingui/macro'; + +import * as React from 'react'; +import Clipboard from '../Utils/Clipboard'; +import { + type TreeViewItemContent, + type TreeItemProps, + timelinesRootFolderId, +} from '.'; +import { type HTMLDataset } from '../Utils/HTMLDataset'; +import { + deleteTimeline, + getTimelines, + makeTimelineName, + moveTimeline, + renameTimeline, + saveTimelines, + type TimelineData, +} from '../TimelineEditor/TimelineProjectStorage'; + +const TIMELINE_CLIPBOARD_KIND = 'Timeline'; + +const createTimelineId = (): string => + `timeline-${Date.now().toString(36)}-${Math.random() + .toString(36) + .slice(2, 8)}`; + +export type TimelineTreeViewItemCallbacks = {| + onOpenTimeline: string => void, +|}; + +export type TimelineTreeViewItemCommonProps = {| + ...TreeItemProps, + ...TimelineTreeViewItemCallbacks, +|}; + +export type TimelineTreeViewItemProps = {| + ...TimelineTreeViewItemCommonProps, + project: gdProject, +|}; + +export const getTimelineTreeViewItemId = (timeline: TimelineData): string => + `timeline-${timeline.id}`; + +export class TimelineTreeViewItemContent implements TreeViewItemContent { + timeline: TimelineData; + props: TimelineTreeViewItemProps; + + constructor(timeline: TimelineData, props: TimelineTreeViewItemProps) { + this.timeline = timeline; + this.props = props; + } + + isDescendantOf(itemContent: TreeViewItemContent): boolean { + return itemContent.getId() === timelinesRootFolderId; + } + + getRootId(): string { + return timelinesRootFolderId; + } + + getName(): string | React.Node { + return this.timeline.name; + } + + getId(): string { + return getTimelineTreeViewItemId(this.timeline); + } + + getHtmlId(index: number): ?string { + return `timeline-item-${index}`; + } + + getDataSet(): ?HTMLDataset { + return { + timeline: this.timeline.name, + }; + } + + getThumbnail(): ?string { + return 'JsPlatform/Extensions/tween_behavior32.png'; + } + + onClick(): void { + this.props.onOpenTimeline(this.timeline.id); + } + + rename(newName: string): void { + if (newName === this.timeline.name) { + return; + } + renameTimeline(this.props.project, this.timeline.id, newName); + this._onProjectItemModified(true); + } + + edit(): void { + this.props.editName(this.getId()); + } + + buildMenuTemplate(i18n: I18nType, index: number): any { + return [ + { + label: i18n._(t`Open`), + click: () => this.onClick(), + }, + { + type: 'separator', + }, + { + label: i18n._(t`Rename`), + click: () => this.edit(), + accelerator: 'F2', + }, + { + label: i18n._(t`Delete`), + click: () => this.delete(), + accelerator: 'Backspace', + }, + { + type: 'separator', + }, + { + label: i18n._(t`Copy`), + click: () => this.copy(), + accelerator: 'CmdOrCtrl+C', + }, + { + label: i18n._(t`Cut`), + click: () => this.cut(), + accelerator: 'CmdOrCtrl+X', + }, + { + label: i18n._(t`Paste`), + enabled: Clipboard.has(TIMELINE_CLIPBOARD_KIND), + click: () => this.paste(), + accelerator: 'CmdOrCtrl+V', + }, + { + label: i18n._(t`Duplicate`), + click: () => this._duplicate(), + }, + ]; + } + + renderRightComponent(i18n: I18nType): ?React.Node { + return null; + } + + delete(): void { + this.props + .showDeleteConfirmation({ + title: t`Delete timeline`, + message: t`Are you sure you want to delete this timeline? This cannot be undone.`, + }) + .then(shouldDelete => { + if (!shouldDelete) { + return; + } + deleteTimeline(this.props.project, this.timeline.id); + this._onProjectItemModified(true); + }); + } + + getIndex(): number { + return getTimelines(this.props.project).findIndex( + timeline => timeline.id === this.timeline.id + ); + } + + moveAt(destinationIndex: number): void { + const originIndex = this.getIndex(); + if (destinationIndex !== originIndex) { + moveTimeline( + this.props.project, + this.timeline.id, + destinationIndex + (destinationIndex <= originIndex ? 0 : -1) + ); + this._onProjectItemModified(true); + } + } + + copy(): void { + Clipboard.set(TIMELINE_CLIPBOARD_KIND, { + timeline: this.timeline, + name: this.timeline.name, + }); + } + + cut(): void { + this.copy(); + this.delete(); + } + + paste(): void { + if (!Clipboard.has(TIMELINE_CLIPBOARD_KIND)) { + return; + } + + const clipboardContent = Clipboard.get(TIMELINE_CLIPBOARD_KIND); + const copiedTimeline = + clipboardContent && typeof clipboardContent === 'object' + ? clipboardContent.timeline + : null; + if (!copiedTimeline) { + return; + } + + const timelines = getTimelines(this.props.project); + const newTimeline = { + ...copiedTimeline, + id: createTimelineId(), + name: makeTimelineName(this.props.project, copiedTimeline.name), + }; + const insertionIndex = this.getIndex() + 1; + const nextTimelines = timelines.slice(); + nextTimelines.splice(insertionIndex, 0, newTimeline); + saveTimelines(this.props.project, nextTimelines); + this._onProjectItemModified(true); + this.props.editName(getTimelineTreeViewItemId(newTimeline)); + } + + _duplicate(): void { + this.copy(); + this.paste(); + } + + _onProjectItemModified(shouldForceUpdateList: boolean) { + if (this.props.unsavedChanges) + this.props.unsavedChanges.triggerUnsavedChanges(); + if (shouldForceUpdateList) { + this.props.forceUpdateList(); + } else { + this.props.forceUpdate(); + } + } + + getRightButton(i18n: I18nType): any { + return null; + } +} diff --git a/newIDE/app/src/ProjectManager/index.js b/newIDE/app/src/ProjectManager/index.js index 9ea4ba416d06..41928703238c 100644 --- a/newIDE/app/src/ProjectManager/index.js +++ b/newIDE/app/src/ProjectManager/index.js @@ -67,6 +67,18 @@ import { type ExternalLayoutTreeViewItemProps, type ExternalLayoutTreeViewItemCallbacks, } from './ExternalLayoutTreeViewItemContent'; +import { + TimelineTreeViewItemContent, + getTimelineTreeViewItemId, + type TimelineTreeViewItemProps, + type TimelineTreeViewItemCallbacks, +} from './TimelineTreeViewItemContent'; +import { + createDefaultTimeline, + getTimelines, + makeTimelineName, + saveTimelines, +} from '../TimelineEditor/TimelineProjectStorage'; import { type MenuItemTemplate } from '../UI/Menu/Menu.flow'; import useAlertDialog from '../UI/Alert/useAlertDialog'; import { type ShowConfirmDeleteDialogOptions } from '../UI/Alert/AlertContext'; @@ -98,6 +110,9 @@ const gameDashboardItemId = 'manage'; const globalVariablesItemId = getProjectManagerItemId('global-variables'); const gameResourcesItemId = getProjectManagerItemId('game-resources'); export const scenesRootFolderId: string = getProjectManagerItemId('scenes'); +export const timelinesRootFolderId: string = getProjectManagerItemId( + 'timelines' +); export const extensionsRootFolderId: string = getProjectManagerItemId( 'extensions' ); @@ -109,6 +124,7 @@ export const externalLayoutsRootFolderId: string = getProjectManagerItemId( ); const scenesEmptyPlaceholderId = 'scenes-placeholder'; +const timelinesEmptyPlaceholderId = 'timelines-placeholder'; const extensionsEmptyPlaceholderId = 'extensions-placeholder'; const externalEventsEmptyPlaceholderId = 'external-events-placeholder'; const externalLayoutEmptyPlaceholderId = 'external-layout-placeholder'; @@ -423,6 +439,7 @@ type Props = {| ...ExtensionTreeViewItemCallbacks, ...ExternalEventsTreeViewItemCallbacks, ...ExternalLayoutTreeViewItemCallbacks, + ...TimelineTreeViewItemCallbacks, onOpenResources: () => void, onReloadEventsFunctionsExtensions: () => void, isOpen: boolean, @@ -466,6 +483,7 @@ const ProjectManager = React.forwardRef( onOpenExternalEvents, onOpenExternalLayout, onOpenEventsFunctionsExtension, + onOpenTimeline, onOpenResources, onReloadEventsFunctionsExtensions, isOpen, @@ -686,6 +704,37 @@ const ProjectManager = React.forwardRef( [project, onProjectItemModified, editName, scrollToItem, onSceneAdded] ); + const addTimeline = React.useCallback( + (index: number, i18n: I18nType) => { + if (!project) return; + + const timeline = createDefaultTimeline( + makeTimelineName(project, i18n._(t`Untitled timeline`)) + ); + const timelines = getTimelines(project); + const nextTimelines = timelines.slice(); + nextTimelines.splice(index + 1, 0, timeline); + saveTimelines(project, nextTimelines); + + onProjectItemModified(); + + const timelineItemId = getTimelineTreeViewItemId(timeline); + if (treeViewRef.current) { + treeViewRef.current.openItems([ + timelineItemId, + timelinesRootFolderId, + ]); + } + setTimeout(() => { + scrollToItem(timelineItemId); + }, 100); + + editName(timelineItemId); + onOpenTimeline(timeline.id); + }, + [project, onProjectItemModified, editName, scrollToItem, onOpenTimeline] + ); + const onCreateNewExtension = React.useCallback( (project: gdProject, i18n: I18nType) => { const newName = newNameGenerator(i18n._(t`UntitledExtension`), name => @@ -928,6 +977,36 @@ const ProjectManager = React.forwardRef( ] ); + const timelineTreeViewItemProps = React.useMemo( + () => + project + ? { + project, + unsavedChanges, + preferences, + gdevelopTheme, + forceUpdate, + forceUpdateList, + showDeleteConfirmation, + editName, + scrollToItem, + onOpenTimeline, + } + : null, + [ + project, + unsavedChanges, + preferences, + gdevelopTheme, + forceUpdate, + forceUpdateList, + showDeleteConfirmation, + editName, + scrollToItem, + onOpenTimeline, + ] + ); + const extensionTreeViewItemProps = React.useMemo( () => project @@ -1040,6 +1119,7 @@ const ProjectManager = React.forwardRef( (i18n: I18nType): Array => { return !project || !sceneTreeViewItemProps || + !timelineTreeViewItemProps || !extensionTreeViewItemProps || !externalEventsTreeViewItemProps || !externalLayoutTreeViewItemProps @@ -1126,6 +1206,42 @@ const ProjectManager = React.forwardRef( ); }, }, + { + isRoot: true, + content: new LabelTreeViewItemContent( + timelinesRootFolderId, + i18n._(t`Timelines`), + { + icon: , + label: i18n._(t`Add a timeline`), + click: () => { + const timelines = getTimelines(project); + addTimeline(timelines.length - 1, i18n); + }, + id: 'add-new-timeline-button', + } + ), + getChildren(i18n: I18nType): ?Array { + const timelines = getTimelines(project); + if (timelines.length === 0) { + return [ + new PlaceHolderTreeViewItem( + timelinesEmptyPlaceholderId, + i18n._(t`Start by adding a new timeline.`) + ), + ]; + } + return timelines.map( + timeline => + new LeafTreeViewItem( + new TimelineTreeViewItemContent( + timeline, + timelineTreeViewItemProps + ) + ) + ); + }, + }, { isRoot: true, content: new LabelTreeViewItemContent( @@ -1239,6 +1355,7 @@ const ProjectManager = React.forwardRef( ]; }, [ + addTimeline, addExternalEvents, addExternalLayout, addNewScene, @@ -1252,6 +1369,7 @@ const ProjectManager = React.forwardRef( openSearchExtensionDialog, project, sceneTreeViewItemProps, + timelineTreeViewItemProps, ] ); @@ -1308,6 +1426,7 @@ const ProjectManager = React.forwardRef( const initiallyOpenedNodeIds = [ gameSettingsRootFolderId, scenesRootFolderId, + timelinesRootFolderId, extensionsRootFolderId, externalEventsRootFolderId, externalLayoutsRootFolderId, diff --git a/newIDE/app/src/SceneEditor/MosaicEditorsDisplay/Toolbar.js b/newIDE/app/src/SceneEditor/MosaicEditorsDisplay/Toolbar.js index 9bf8c92de1be..4f66426e086c 100644 --- a/newIDE/app/src/SceneEditor/MosaicEditorsDisplay/Toolbar.js +++ b/newIDE/app/src/SceneEditor/MosaicEditorsDisplay/Toolbar.js @@ -2,6 +2,7 @@ import { t, Trans } from '@lingui/macro'; import { type I18n as I18nType } from '@lingui/core'; import * as React from 'react'; +import TimelineIcon from '@material-ui/icons/Timeline'; import { ToolbarGroup } from '../../UI/Toolbar'; import ToolbarSeparator from '../../UI/ToolbarSeparator'; import IconButton from '../../UI/IconButton'; @@ -25,6 +26,7 @@ import { OPEN_OBJECT_GROUPS_PANEL_BUTTON_ID, OPEN_OBJECTS_PANEL_BUTTON_ID, OPEN_PROPERTIES_PANEL_BUTTON_ID, + OPEN_TIMELINE_PANEL_BUTTON_ID, } from '../utils'; import CompactToggleButtons from '../../UI/CompactToggleButtons'; import Grid2d from '../../UI/CustomSvgIcons/Grid2d'; @@ -49,6 +51,8 @@ type Props = {| isInstancesListShown: boolean, toggleLayersList: () => void, isLayersListShown: boolean, + toggleTimelinePanel: () => void, + isTimelinePanelShown: boolean, isWindowMaskShown: boolean, toggleWindowMask: () => void, isGridShown: boolean, @@ -181,6 +185,20 @@ const Toolbar: React.ComponentType = React.memo(function Toolbar( > + + + { if (layersListRef.current) layersListRef.current.forceUpdateList(); }, []); + const lastTimelinePreviewPanelUpdateTimeRef = React.useRef(0); const getInstanceSize = React.useCallback((instance: gdInitialInstance) => { return editorRef.current ? editorRef.current.getInstanceSize(instance) @@ -159,6 +165,23 @@ const MosaicEditorsDisplay: React.ComponentType<{ }, [onInstancesModified, forceUpdateInstancesList] ); + const onTimelinePreviewInstancesModified = React.useCallback( + () => { + if (editorRef.current) { + editorRef.current.notifyTimelinePreviewFrame(); + } + + const now = performance.now(); + if (now - lastTimelinePreviewPanelUpdateTimeRef.current < 100) { + return; + } + + lastTimelinePreviewPanelUpdateTimeRef.current = now; + forceUpdateInstancesList(); + forceUpdatePropertiesEditor(); + }, + [forceUpdateInstancesList, forceUpdatePropertiesEditor] + ); const toggleEditorView = React.useCallback((editorId: EditorId) => { if (!editorMosaicRef.current) return; const config = defaultPanelConfigByEditor[editorId]; @@ -285,6 +308,7 @@ const MosaicEditorsDisplay: React.ComponentType<{ const isCustomVariant = eventsBasedObject ? eventsBasedObject.getDefaultVariant() !== eventsBasedObjectVariant : false; + const firstTimeline = getTimelines(project)[0]; const editors = { properties: { @@ -399,6 +423,25 @@ const MosaicEditorsDisplay: React.ComponentType<{ /> ), }, + timeline: { + type: 'secondary', + title: t`Timeline`, + renderEditor: () => ( + + ), + }, 'instances-editor': gameEditorMode === 'embedded-game' ? { diff --git a/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/BottomToolbar.js b/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/BottomToolbar.js index 9616cc778eca..57aba00a409b 100644 --- a/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/BottomToolbar.js +++ b/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/BottomToolbar.js @@ -1,6 +1,7 @@ // @flow import * as React from 'react'; +import TimelineIcon from '@material-ui/icons/Timeline'; import { Toolbar, ToolbarGroup } from '../../UI/Toolbar'; import ObjectIcon from '../../UI/CustomSvgIcons/Object'; import ObjectGroupIcon from '../../UI/CustomSvgIcons/ObjectGroup'; @@ -14,6 +15,7 @@ import { OPEN_OBJECT_GROUPS_PANEL_BUTTON_ID, OPEN_OBJECTS_PANEL_BUTTON_ID, OPEN_PROPERTIES_PANEL_BUTTON_ID, + OPEN_TIMELINE_PANEL_BUTTON_ID, type EditorId, } from '../utils'; import Paper from '../../UI/Paper'; @@ -67,6 +69,10 @@ const editors = { buttonId: OPEN_LAYERS_PANEL_BUTTON_ID, icon: , }, + timeline: { + buttonId: OPEN_TIMELINE_PANEL_BUTTON_ID, + icon: , + }, }; const BottomToolbar: React.ComponentType = React.memo( diff --git a/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js b/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js index 9b429bf1e74c..5174ac1cce9b 100644 --- a/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js +++ b/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js @@ -14,6 +14,8 @@ import InstancesList, { type InstancesListInterface, } from '../../InstancesEditor/InstancesList'; import ObjectsRenderingService from '../../ObjectsRendering/ObjectsRenderingService'; +import TimelineEditor from '../../TimelineEditor'; +import { getTimelines } from '../../TimelineEditor/TimelineProjectStorage'; import Rectangle from '../../Utils/Rectangle'; import SwipeableDrawer from './SwipeableDrawer'; @@ -44,6 +46,7 @@ const editorTitleById = { 'object-groups-list': Objects groups, 'instances-list': Instances, 'layers-list': Layers, + timeline: Timeline, }; const noop = () => {}; @@ -58,6 +61,7 @@ const styles = { pointerEvents: 'all', }, instancesListContainer: { display: 'flex', flex: 1 }, + timelineContainer: { display: 'flex', flex: 1, minHeight: 240 }, }; // Forward ref to allow Scene editor to force update some editors @@ -159,6 +163,7 @@ const SwipeableDrawerEditorsDisplay: React.ComponentType<{ const forceUpdateLayersList = React.useCallback(() => { if (layersListRef.current) layersListRef.current.forceUpdateList(); }, []); + const lastTimelinePreviewPanelUpdateTimeRef = React.useRef(0); const getInstanceSize = React.useCallback((instance: gdInitialInstance) => { return editorRef.current ? editorRef.current.getInstanceSize(instance) @@ -211,6 +216,23 @@ const SwipeableDrawerEditorsDisplay: React.ComponentType<{ }, [] ); + const onTimelinePreviewInstancesModified = React.useCallback( + () => { + if (editorRef.current) { + editorRef.current.notifyTimelinePreviewFrame(); + } + + const now = performance.now(); + if (now - lastTimelinePreviewPanelUpdateTimeRef.current < 100) { + return; + } + + lastTimelinePreviewPanelUpdateTimeRef.current = now; + forceUpdateInstancesList(); + forceUpdatePropertiesEditor(); + }, + [forceUpdateInstancesList, forceUpdatePropertiesEditor] + ); React.useLayoutEffect( () => { @@ -310,6 +332,7 @@ const SwipeableDrawerEditorsDisplay: React.ComponentType<{ const isCustomVariant = eventsBasedObject ? eventsBasedObject.getDefaultVariant() !== eventsBasedObjectVariant : false; + const firstTimeline = getTimelines(project)[0]; return ( @@ -599,6 +622,29 @@ const SwipeableDrawerEditorsDisplay: React.ComponentType<{ gameEditorMode={props.gameEditorMode} /> )} + {selectedEditorId === 'timeline' && ( + + + + )} { isInstancesListShown={editorDisplay.isEditorVisible('instances-list')} toggleLayersList={this.toggleLayersList} isLayersListShown={editorDisplay.isEditorVisible('layers-list')} + toggleTimelinePanel={this.toggleTimelinePanel} + isTimelinePanelShown={editorDisplay.isEditorVisible('timeline')} toggleWindowMask={this.toggleWindowMask} isWindowMaskShown={!!this.state.instancesEditorSettings.windowMask} toggleGrid={this.toggleGrid} @@ -903,6 +906,11 @@ export default class SceneEditor extends React.Component { this.editorDisplay.toggleEditorView('layers-list'); }; + toggleTimelinePanel = () => { + if (!this.editorDisplay) return; + this.editorDisplay.toggleEditorView('timeline'); + }; + toggleWindowMask = () => { this.setInstancesEditorSettings({ ...this.state.instancesEditorSettings, diff --git a/newIDE/app/src/SceneEditor/utils.js b/newIDE/app/src/SceneEditor/utils.js index 60ebca6d0ce5..ec60f6387df6 100644 --- a/newIDE/app/src/SceneEditor/utils.js +++ b/newIDE/app/src/SceneEditor/utils.js @@ -7,12 +7,15 @@ export const OPEN_PROPERTIES_PANEL_BUTTON_ID = export const OPEN_INSTANCES_PANEL_BUTTON_ID = 'toolbar-open-instances-list-panel-button'; export const OPEN_LAYERS_PANEL_BUTTON_ID = 'toolbar-open-layers-panel-button'; +export const OPEN_TIMELINE_PANEL_BUTTON_ID = + 'toolbar-open-timeline-panel-button'; export const TOOLBAR_COMMON_FORMATTED_BUTTON_IDS = [ `#${OPEN_OBJECTS_PANEL_BUTTON_ID}`, `#${OPEN_OBJECT_GROUPS_PANEL_BUTTON_ID}`, `#${OPEN_PROPERTIES_PANEL_BUTTON_ID}`, `#${OPEN_INSTANCES_PANEL_BUTTON_ID}`, `#${OPEN_LAYERS_PANEL_BUTTON_ID}`, + `#${OPEN_TIMELINE_PANEL_BUTTON_ID}`, ]; export type EditorId = @@ -20,4 +23,5 @@ export type EditorId = | 'properties' | 'object-groups-list' | 'instances-list' - | 'layers-list'; + | 'layers-list' + | 'timeline'; diff --git a/newIDE/app/src/TimelineEditor/TimelineProjectStorage.js b/newIDE/app/src/TimelineEditor/TimelineProjectStorage.js new file mode 100644 index 000000000000..edd655ff0d2e --- /dev/null +++ b/newIDE/app/src/TimelineEditor/TimelineProjectStorage.js @@ -0,0 +1,297 @@ +// @flow + +export const timelineExtensionName = 'TimelineSequencer'; +export const timelinesPropertyName = 'timelines'; + +export type TimelinePoint = {| + x: number, + y: number, + z?: number, +|}; + +export type TimelineCurveDefinition = any; + +export type TimelineKeyframe = {| + id: string, + time: number, + value: number | TimelinePoint, + ease?: any, + curve?: TimelineCurveDefinition, +|}; + +export type TimelinePropertyTrack = {| + id: string, + property: string, + interpolationMode?: 'continuous' | 'step' | 'hold' | 'keyframe', + initialValue?: number | TimelinePoint, + initialEase?: any, + initialCurve?: TimelineCurveDefinition, + keyframes: Array, +|}; + +export type TimelineTrack = {| + id: string, + type: 'object', + target: {| + mode: 'objectName' | 'sceneInstance' | 'runtimeBinding', + objectName?: string, + instancePersistentUuid?: string, + selection?: 'first' | 'all', + bindingName?: string, + |}, + propertyTracks: Array, +|}; + +export type TimelineMarker = {| + id: string, + name: string, + time: number, +|}; + +export type TimelineData = {| + id: string, + name: string, + duration: number, + loop: boolean, + speed: number, + tracks: Array, + markers: Array, +|}; + +export type TimelineProjectData = {| + version: 1, + timelines: Array, +|}; + +const createId = (prefix: string): string => + `${prefix}-${Date.now().toString(36)}-${Math.random() + .toString(36) + .slice(2, 8)}`; + +const defaultTimelineProjectData = (): TimelineProjectData => ({ + version: 1, + timelines: [], +}); + +const normalizeTimeline = (timeline: any): TimelineData => ({ + id: + typeof timeline.id === 'string' && timeline.id + ? timeline.id + : createId('timeline'), + name: + typeof timeline.name === 'string' && timeline.name + ? timeline.name + : 'Timeline', + duration: + typeof timeline.duration === 'number' && timeline.duration > 0 + ? timeline.duration + : 1, + loop: !!timeline.loop, + speed: + typeof timeline.speed === 'number' && timeline.speed !== 0 + ? timeline.speed + : 1, + tracks: Array.isArray(timeline.tracks) ? timeline.tracks : [], + markers: Array.isArray(timeline.markers) ? timeline.markers : [], +}); + +const normalizeProjectData = (data: any): TimelineProjectData => { + const timelines = Array.isArray(data) + ? data + : data && Array.isArray(data.timelines) + ? data.timelines + : []; + + return { + version: 1, + timelines: timelines.map(normalizeTimeline), + }; +}; + +export const readTimelineProjectData = ( + project: gdProject +): TimelineProjectData => { + const rawValue = project + .getExtensionProperties() + .getValue(timelineExtensionName, timelinesPropertyName); + + if (!rawValue) { + return defaultTimelineProjectData(); + } + + try { + return normalizeProjectData(JSON.parse(rawValue)); + } catch (error) { + console.error('Unable to read TimelineSequencer project data:', error); + return defaultTimelineProjectData(); + } +}; + +export const saveTimelineProjectData = ( + project: gdProject, + data: TimelineProjectData +) => { + project + .getExtensionProperties() + .setValue( + timelineExtensionName, + timelinesPropertyName, + JSON.stringify(normalizeProjectData(data)) + ); +}; + +export const getTimelines = (project: gdProject): Array => + readTimelineProjectData(project).timelines; + +export const saveTimelines = ( + project: gdProject, + timelines: Array +) => { + saveTimelineProjectData(project, { + version: 1, + timelines, + }); +}; + +export const makeTimelineName = ( + project: gdProject, + baseName: string = 'Timeline' +): string => { + const usedNames = new Set( + getTimelines(project).map(timeline => timeline.name) + ); + if (!usedNames.has(baseName)) { + return baseName; + } + + let index = 2; + while (usedNames.has(`${baseName} ${index}`)) { + index++; + } + return `${baseName} ${index}`; +}; + +export const createDefaultTimeline = (name: string): TimelineData => { + return { + id: createId('timeline'), + name, + duration: 1, + loop: false, + speed: 1, + tracks: [], + markers: [], + }; +}; + +export const getTimelineByIdOrName = ( + project: gdProject, + idOrName: string +): ?TimelineData => + getTimelines(project).find( + timeline => timeline.id === idOrName || timeline.name === idOrName + ); + +export const upsertTimeline = (project: gdProject, timeline: TimelineData) => { + const timelines = getTimelines(project); + const timelineIndexById = timelines.findIndex( + existingTimeline => existingTimeline.id === timeline.id + ); + const existingIndex = + timelineIndexById !== -1 + ? timelineIndexById + : timelines.findIndex( + existingTimeline => existingTimeline.name === timeline.name + ); + + if (existingIndex === -1) { + saveTimelines(project, [...timelines, timeline]); + return; + } + + const nextTimelines = timelines.slice(); + nextTimelines[existingIndex] = timeline; + saveTimelines(project, nextTimelines); +}; + +export const renameTimeline = ( + project: gdProject, + timelineId: string, + newName: string +): ?TimelineData => { + const cleanName = newName.trim(); + if (!cleanName) { + return getTimelineByIdOrName(project, timelineId); + } + + const timelines = getTimelines(project); + const timelineIndex = timelines.findIndex( + timeline => timeline.id === timelineId + ); + if (timelineIndex === -1) { + return null; + } + + const isNameTaken = timelines.some( + (timeline, index) => index !== timelineIndex && timeline.name === cleanName + ); + if (isNameTaken) { + return timelines[timelineIndex]; + } + + const nextTimeline = { + ...timelines[timelineIndex], + name: cleanName, + }; + const nextTimelines = timelines.slice(); + nextTimelines[timelineIndex] = nextTimeline; + saveTimelines(project, nextTimelines); + return nextTimeline; +}; + +export const deleteTimeline = (project: gdProject, timelineId: string) => { + saveTimelines( + project, + getTimelines(project).filter(timeline => timeline.id !== timelineId) + ); +}; + +export const duplicateTimeline = ( + project: gdProject, + timelineId: string +): ?TimelineData => { + const timeline = getTimelineByIdOrName(project, timelineId); + if (!timeline) { + return null; + } + + const duplicate = { + ...timeline, + id: createId('timeline'), + name: makeTimelineName(project, `${timeline.name} copy`), + }; + saveTimelines(project, [...getTimelines(project), duplicate]); + return duplicate; +}; + +export const moveTimeline = ( + project: gdProject, + timelineId: string, + destinationIndex: number +) => { + const timelines = getTimelines(project); + const originIndex = timelines.findIndex( + timeline => timeline.id === timelineId + ); + if (originIndex === -1 || originIndex === destinationIndex) { + return; + } + + const nextTimelines = timelines.slice(); + const [timeline] = nextTimelines.splice(originIndex, 1); + nextTimelines.splice( + Math.max(0, Math.min(destinationIndex, nextTimelines.length)), + 0, + timeline + ); + saveTimelines(project, nextTimelines); +}; diff --git a/newIDE/app/src/TimelineEditor/index.js b/newIDE/app/src/TimelineEditor/index.js new file mode 100644 index 000000000000..efafa0ea8ec2 --- /dev/null +++ b/newIDE/app/src/TimelineEditor/index.js @@ -0,0 +1,6574 @@ +// @flow +import * as React from 'react'; +import { t, Trans } from '@lingui/macro'; +import Tooltip from '@material-ui/core/Tooltip'; +import IconButton from '@material-ui/core/IconButton'; +import Button from '@material-ui/core/Button'; +import Checkbox from '@material-ui/core/Checkbox'; +import SkipPrevious from '@material-ui/icons/SkipPrevious'; +import FastRewind from '@material-ui/icons/FastRewind'; +import PlayArrow from '@material-ui/icons/PlayArrow'; +import Pause from '@material-ui/icons/Pause'; +import FastForward from '@material-ui/icons/FastForward'; +import SkipNext from '@material-ui/icons/SkipNext'; +import Add from '@material-ui/icons/Add'; +import Delete from '@material-ui/icons/Delete'; +import TimelineIcon from '@material-ui/icons/Timeline'; +import ShowChart from '@material-ui/icons/ShowChart'; +import Grain from '@material-ui/icons/Grain'; +import PlaylistAdd from '@material-ui/icons/PlaylistAdd'; +import PlaylistAddCheck from '@material-ui/icons/PlaylistAddCheck'; +import TextField from '../UI/TextField'; +import SelectField from '../UI/SelectField'; +import SelectOption from '../UI/SelectOption'; +import GDevelopThemeContext from '../UI/Theme/GDevelopThemeContext'; +import { type UnsavedChanges } from '../MainFrame/UnsavedChangesContext'; +import { + createDefaultTimeline, + getTimelines, + getTimelineByIdOrName, + makeTimelineName, + upsertTimeline, + type TimelineData, + type TimelineTrack, + type TimelinePropertyTrack, + type TimelineKeyframe, + type TimelinePoint, + type TimelineCurveDefinition, +} from './TimelineProjectStorage'; + +const gd: libGDevelop = global.gd; + +type Props = {| + project: gdProject, + timelineIdOrName: ?string, + setToolbar: (?React.Node) => void, + unsavedChanges: ?UnsavedChanges, + objectsContainer?: ?gdObjectsContainer, + globalObjectsContainer?: ?gdObjectsContainer, + initialInstances?: ?gdInitialInstancesContainer, + selectedInstances?: Array, + onGetInstanceSize?: gdInitialInstance => [number, number, number], + onInstancesModified?: (Array) => void, + onPreviewInstancesModified?: (Array) => void, +|}; + +type InitialInstancesIndex = {| + byObjectName: Map>, + byPersistentUuid: Map, +|}; + +type TimelineScaleBaseDimensions = {| + width: number, + height: number, + depth: number, +|}; + +type AnyObject = { [string]: any, ... }; +type TimelinePointValue = TimelinePoint; +type TimelineValue = number | TimelinePointValue; +type TimelineValueChannel = 'x' | 'y' | 'z' | 'value'; +type TimelineValueRange = {| min: number, max: number, range: number |}; + +type KeyframeDragSnapshot = {| + keyframeId: string, + propertyTrackId: string, + property: string, + time: number, + value: TimelineValue, + ease?: any, + curve?: TimelineCurveDefinition, + channel: TimelineValueChannel, + valueRange: TimelineValueRange, +|}; + +type TimelineKeyframeClipboard = {| + items: Array<{| + propertyTrackId: string, + property: string, + timeOffset: number, + value: TimelineValue, + ease?: any, + curve?: TimelineCurveDefinition, + |}>, +|}; + +const leftPanelWidth = 220; +const rightPanelWidth = 220; +const rulerHeight = 64; +const rowHeight = 58; +const frameRate = 60; +const timelinePlaybackStateSyncIntervalMs = 100; +const minTimelineZoom = 1; +const maxTimelineZoom = 24; +const timelineEdgeHitPadding = 24; +const fallbackTimelineScaleBaseSize = 256; +const minimumTimelineScale = 0.0001; +const minimumTimelineDimension = 0.0001; + +const createTimelinePointValue = ( + x: number, + y: number, + z?: ?number +): TimelinePointValue => (typeof z === 'number' ? { x, y, z } : { x, y }); + +const cloneTimelinePointValue = ( + value: TimelinePointValue +): TimelinePointValue => + createTimelinePointValue( + value.x, + value.y, + typeof value.z === 'number' ? value.z : undefined + ); + +const commonTimelineProperties: Array = [ + 'x', + 'y', + 'angle', + 'scaleX', + 'scaleY', +]; +const threeDTransformTimelineProperties: Array = [ + 'x', + 'y', + 'z', + 'angle', + 'rotationX', + 'rotationY', + 'scaleX', + 'scaleY', + 'scaleZ', + 'width', + 'height', + 'depth', +]; +const model3DTimelineProperties: Array = [ + ...threeDTransformTimelineProperties, + 'animationIndex', + 'animationSpeedScale', +]; +const spriteTimelineProperties: Array = [ + ...commonTimelineProperties, + 'opacity', + 'width', + 'height', + 'animationIndex', + 'animationFrame', + 'animationSpeedScale', +]; +const textTimelineProperties: Array = [ + ...commonTimelineProperties, + 'opacity', + 'width', + 'height', + 'characterSize', + 'lineHeight', +]; +const videoTimelineProperties: Array = [ + ...commonTimelineProperties, + 'opacity', + 'width', + 'height', + 'volume', + 'playbackSpeed', + 'currentTime', +]; + +const discreteTimelineProperties = new Set([ + 'animation', + 'animationindex', + 'animationname', +]); + +const getFiniteNumber = (value: any, fallback: number): number => + typeof value === 'number' && Number.isFinite(value) ? value : fallback; + +const clamp = (value: number, min: number, max: number): number => + Math.max(min, Math.min(max, getFiniteNumber(value, min))); + +const clamp01 = (value: number): number => clamp(value, 0, 1); + +const isDiscreteTimelineProperty = (property: string): boolean => + discreteTimelineProperties.has(property.toLowerCase()); + +const isTextInputElement = (target: any): boolean => { + if (!target) return false; + const tagName = target.tagName ? target.tagName.toLowerCase() : ''; + return ( + tagName === 'input' || + tagName === 'textarea' || + tagName === 'select' || + !!target.isContentEditable + ); +}; + +const cubicBezierCoordinate = (p1: number, p2: number, t: number): number => { + const u = 1 - t; + return 3 * u * u * t * p1 + 3 * u * t * t * p2 + t * t * t; +}; + +const cubicBezierDerivative = (p1: number, p2: number, t: number): number => { + const u = 1 - t; + return 3 * u * u * p1 + 6 * u * t * (p2 - p1) + 3 * t * t * (1 - p2); +}; + +const solveCubicBezierT = (x1: number, x2: number, x: number): number => { + let t = x; + for (let index = 0; index < 8; index++) { + const currentX = cubicBezierCoordinate(x1, x2, t) - x; + const derivative = cubicBezierDerivative(x1, x2, t); + if (Math.abs(currentX) < 1e-6) return t; + if (Math.abs(derivative) < 1e-6) break; + t -= currentX / derivative; + } + + let min = 0; + let max = 1; + t = x; + for (let index = 0; index < 10; index++) { + const currentX = cubicBezierCoordinate(x1, x2, t); + if (Math.abs(currentX - x) < 1e-6) return t; + if (currentX < x) { + min = t; + } else { + max = t; + } + t = (min + max) / 2; + } + return t; +}; + +const evaluateCubicBezier = ( + x1: number, + y1: number, + x2: number, + y2: number, + progress: number +): number => { + const bezierT = solveCubicBezierT(clamp01(x1), clamp01(x2), progress); + return clamp01(cubicBezierCoordinate(y1, y2, bezierT)); +}; + +const getKeyframeCurve = ( + keyframe: TimelineKeyframe +): TimelineCurveDefinition | null => + keyframe.curve !== undefined && keyframe.curve !== null + ? keyframe.curve + : keyframe.ease !== undefined && keyframe.ease !== null + ? keyframe.ease + : null; + +const asTimelineCurveObject = ( + curve: TimelineCurveDefinition | null +): ?AnyObject => + curve && typeof curve === 'object' && !Array.isArray(curve) + ? ((curve: any): AnyObject) + : null; + +const evaluateTimelineCurve = ( + curve: TimelineCurveDefinition | null, + progress: number +): number => { + const t = clamp01(progress); + if (!curve) return t; + + if (typeof curve === 'string') { + switch (curve) { + case 'hold': + case 'step': + case 'stepped': + return 0; + case 'easeIn': + case 'easeInQuad': + return t * t; + case 'easeOut': + case 'easeOutQuad': + return 1 - Math.pow(1 - t, 2); + case 'easeInOut': + case 'easeInOutQuad': + return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2; + case 'easeInCubic': + return t * t * t; + case 'easeOutCubic': + return 1 - Math.pow(1 - t, 3); + case 'easeInOutCubic': + return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2; + default: + return t; + } + } + + if (Array.isArray(curve)) { + if (curve.length < 4) return t; + return evaluateCubicBezier( + getFiniteNumber(curve[0], 0), + getFiniteNumber(curve[1], 0), + getFiniteNumber(curve[2], 1), + getFiniteNumber(curve[3], 1), + t + ); + } + + const curveObject = asTimelineCurveObject(curve); + if (curveObject) { + if (curveObject.type === 'preset') { + return evaluateTimelineCurve(curveObject.name, t); + } + if (curveObject.type === 'steps') { + const steps = Math.max( + 1, + Math.floor(getFiniteNumber(curveObject.steps, 1)) + ); + return curveObject.position === 'start' + ? Math.min(1, Math.ceil(t * steps) / steps) + : Math.floor(t * steps) / steps; + } + if (curveObject.type === 'cubicBezier') { + return evaluateCubicBezier( + getFiniteNumber(curveObject.x1, 0), + getFiniteNumber(curveObject.y1, 0), + getFiniteNumber(curveObject.x2, 1), + getFiniteNumber(curveObject.y2, 1), + t + ); + } + } + + return t; +}; + +const getCurvePresetId = (curve: TimelineCurveDefinition | null): ?string => { + if (!curve) return 'linear'; + + if (typeof curve === 'string') { + switch (curve) { + case 'hold': + case 'step': + case 'stepped': + return 'hold'; + case 'easeIn': + case 'easeInQuad': + return 'easeIn'; + case 'easeOut': + case 'easeOutQuad': + return 'easeOut'; + case 'easeInOut': + case 'easeInOutQuad': + return 'easeInOut'; + case 'linear': + return 'linear'; + default: + return null; + } + } + + if (Array.isArray(curve)) { + if (curve.length < 4) return 'linear'; + const [x1, y1, x2, y2] = curve.map(value => getFiniteNumber(value, 0)); + if (x1 === 0.42 && y1 === 0 && x2 === 1 && y2 === 1) return 'easeIn'; + if (x1 === 0 && y1 === 0 && x2 === 0.58 && y2 === 1) return 'easeOut'; + if (x1 === 0.42 && y1 === 0 && x2 === 0.58 && y2 === 1) return 'easeInOut'; + if (x1 === 0 && y1 === 0 && x2 === 1 && y2 === 1) return 'linear'; + return null; + } + + const curveObject = asTimelineCurveObject(curve); + if (curveObject) { + if (curveObject.type === 'preset') + return getCurvePresetId(curveObject.name); + if (curveObject.type === 'steps') return 'hold'; + if (curveObject.type === 'cubicBezier') { + return getCurvePresetId([ + curveObject.x1, + curveObject.y1, + curveObject.x2, + curveObject.y2, + ]); + } + } + + return null; +}; + +const getCurveModeId = (curve: TimelineCurveDefinition | null): ?string => { + const presetId = getCurvePresetId(curve); + if (presetId === 'hold') return 'stepped'; + if (presetId === 'linear') return 'linear'; + if (presetId) return 'bezier'; + if (Array.isArray(curve)) return 'bezier'; + const curveObject = asTimelineCurveObject(curve); + if (curveObject) { + if (curveObject.type === 'steps') return 'stepped'; + if (curveObject.type === 'cubicBezier') return 'bezier'; + } + return null; +}; + +const getCurveGraphPath = (curve: TimelineCurveDefinition | null): string => { + if (getCurveModeId(curve) === 'stepped') { + return 'M8 82 H92 V18'; + } + + const points = []; + for (let index = 0; index <= 32; index++) { + const progress = index / 32; + const easedProgress = evaluateTimelineCurve(curve, progress); + points.push({ + x: 8 + progress * 84, + y: 82 - easedProgress * 64, + }); + } + + return points + .map( + (point, index) => + `${index === 0 ? 'M' : 'L'}${point.x.toFixed(2)} ${point.y.toFixed(2)}` + ) + .join(' '); +}; + +const getKeyframeValueAtTime = ( + propertyTrack: TimelinePropertyTrack, + time: number +): TimelineValue => { + const firstKeyframe = propertyTrack.keyframes[0]; + if (!firstKeyframe || timeToFrame(time) === 0) { + return getPropertyTrackInitialValue(propertyTrack); + } + + const nearestKeyframe = propertyTrack.keyframes.reduce( + (nearest, keyframe) => + Math.abs(keyframe.time - time) < Math.abs(nearest.time - time) + ? keyframe + : nearest, + firstKeyframe + ); + return nearestKeyframe.value; +}; + +const createKeyframeId = (): string => + `keyframe-${Date.now().toString(36)}-${Math.random() + .toString(36) + .slice(2, 8)}`; + +const createTimelineId = (): string => + `timeline-${Date.now().toString(36)}-${Math.random() + .toString(36) + .slice(2, 8)}`; + +const createTrackId = (): string => + `track-${Date.now().toString(36)}-${Math.random() + .toString(36) + .slice(2, 8)}`; + +const createPropertyTrackId = (): string => + `property-track-${Date.now().toString(36)}-${Math.random() + .toString(36) + .slice(2, 8)}`; + +const cloneTimelineValue = (value: TimelineValue): TimelineValue => + typeof value === 'object' ? cloneTimelinePointValue(value) : value; + +const getDefaultTimelinePropertyValue = (property: string): TimelineValue => { + switch (property) { + case 'position': + return createTimelinePointValue(0, 0); + case 'scale': + return createTimelinePointValue(1, 1); + case 'scaleX': + case 'scaleY': + case 'scaleZ': + return 1; + case 'opacity': + return 255; + case 'width': + case 'height': + case 'depth': + return fallbackTimelineScaleBaseSize; + case 'animationSpeedScale': + case 'playbackSpeed': + case 'lineHeight': + return 1; + case 'characterSize': + return 20; + case 'volume': + return 100; + default: + return 0; + } +}; + +const normalizeTimelineValueForProperty = ( + property: string, + value: any, + fallbackValue?: TimelineValue +): TimelineValue => { + const fallback = + fallbackValue !== undefined + ? fallbackValue + : getDefaultTimelinePropertyValue(property); + + switch (property) { + case 'position': { + const fallbackPosition: TimelinePointValue = + typeof fallback === 'object' + ? fallback + : createTimelinePointValue(0, 0); + return value && typeof value === 'object' + ? createTimelinePointValue( + getFiniteNumber(value.x, fallbackPosition.x), + getFiniteNumber(value.y, fallbackPosition.y), + typeof value.z === 'number' || + typeof fallbackPosition.z === 'number' + ? getFiniteNumber( + value.z, + typeof fallbackPosition.z === 'number' + ? fallbackPosition.z + : 0 + ) + : undefined + ) + : fallbackPosition; + } + case 'scale': { + const fallbackScale: TimelinePointValue = + typeof fallback === 'object' + ? fallback + : createTimelinePointValue(1, 1); + if (!value || typeof value !== 'object') { + return createTimelinePointValue( + Math.max(minimumTimelineScale, fallbackScale.x), + Math.max(minimumTimelineScale, fallbackScale.y), + typeof fallbackScale.z === 'number' + ? Math.max(minimumTimelineScale, fallbackScale.z) + : undefined + ); + } + + const rawScaleX = getFiniteNumber(value.x, fallbackScale.x); + const rawScaleY = getFiniteNumber(value.y, fallbackScale.y); + const normalizedScale = createTimelinePointValue( + Math.max( + minimumTimelineScale, + rawScaleX > 0 ? rawScaleX : fallbackScale.x + ), + Math.max( + minimumTimelineScale, + rawScaleY > 0 ? rawScaleY : fallbackScale.y + ) + ); + if (typeof value.z === 'number') { + const fallbackScaleZ = + typeof fallbackScale.z === 'number' ? fallbackScale.z : 1; + const rawScaleZ = getFiniteNumber(value.z, fallbackScaleZ); + return createTimelinePointValue( + normalizedScale.x, + normalizedScale.y, + Math.max( + minimumTimelineScale, + rawScaleZ > 0 ? rawScaleZ : fallbackScaleZ + ) + ); + } + + return normalizedScale; + } + case 'scaleX': + case 'scaleY': + case 'scaleZ': + return Math.max( + minimumTimelineScale, + getFiniteNumber(value, typeof fallback === 'number' ? fallback : 1) + ); + case 'opacity': + return clamp( + typeof value === 'number' + ? value + : typeof fallback === 'number' + ? fallback + : 255, + 0, + 255 + ); + case 'width': + case 'height': + case 'depth': { + const fallbackDimension = + typeof fallback === 'number' ? fallback : fallbackTimelineScaleBaseSize; + const dimension = getFiniteNumber(value, fallbackDimension); + return Math.max( + minimumTimelineDimension, + dimension > 0 ? dimension : fallbackDimension + ); + } + case 'animationIndex': + case 'animationFrame': + return Math.max( + 0, + Math.round( + getFiniteNumber(value, typeof fallback === 'number' ? fallback : 0) + ) + ); + case 'animationSpeedScale': + case 'lineHeight': + return Math.max( + minimumTimelineScale, + getFiniteNumber(value, typeof fallback === 'number' ? fallback : 1) + ); + case 'characterSize': + return Math.max( + 1, + getFiniteNumber(value, typeof fallback === 'number' ? fallback : 20) + ); + case 'volume': + return clamp( + getFiniteNumber(value, typeof fallback === 'number' ? fallback : 100), + 0, + 100 + ); + case 'playbackSpeed': + return clamp( + getFiniteNumber(value, typeof fallback === 'number' ? fallback : 1), + 0.5, + 2 + ); + case 'currentTime': + return Math.max( + 0, + getFiniteNumber(value, typeof fallback === 'number' ? fallback : 0) + ); + case 'angle': + default: + return getFiniteNumber( + value, + typeof fallback === 'number' ? fallback : 0 + ); + } +}; + +const normalizeTimelineNumberValueForProperty = ( + property: string, + value: any, + fallbackValue?: number +): number => { + const normalizedValue = normalizeTimelineValueForProperty( + property, + value, + fallbackValue + ); + return typeof normalizedValue === 'number' + ? normalizedValue + : fallbackValue !== undefined + ? fallbackValue + : 0; +}; + +const normalizeTimelineScaleAxisValue = ( + property: 'scaleX' | 'scaleY' | 'scaleZ', + value: number, + fallbackValue: number = 1 +): number => { + const normalizedValue = normalizeTimelineValueForProperty( + property, + value, + fallbackValue + ); + return typeof normalizedValue === 'number' + ? normalizedValue + : Math.max(minimumTimelineScale, fallbackValue); +}; + +const createPropertyTrack = ( + property: string, + value: TimelineValue +): TimelinePropertyTrack => { + const isDiscrete = isDiscreteTimelineProperty(property); + const normalizedValue = normalizeTimelineValueForProperty(property, value); + return { + id: createPropertyTrackId(), + property, + interpolationMode: isDiscrete ? 'step' : 'continuous', + initialValue: cloneTimelineValue(normalizedValue), + initialEase: isDiscrete ? 'hold' : 'linear', + initialCurve: isDiscrete ? 'stepped' : 'linear', + keyframes: [], + }; +}; + +const getTimelineFrameCount = (timeline: TimelineData): number => + Math.max(1, Math.ceil(timeline.duration * frameRate)); + +const timeToFrame = (time: number): number => Math.round(time * frameRate); + +const frameToTime = (frame: number, timeline: TimelineData): number => + clamp(frame / frameRate, 0, timeline.duration); + +const getFrameLeftCss = ( + frame: number, + viewStartFrame: number, + visibleFrames: number +): string => { + const ratio = (frame - viewStartFrame) / Math.max(1, visibleFrames); + return `calc(${ratio * 100}% + ${timelineEdgeHitPadding - + ratio * timelineEdgeHitPadding * 2}px)`; +}; + +const getFrameStyle = ( + frame: number, + viewStartFrame: number, + visibleFrames: number +) => ({ + left: getFrameLeftCss(frame, viewStartFrame, visibleFrames), +}); + +const getTimelineValueChannelValue = ( + value: TimelineValue, + channel: TimelineValueChannel +): number => { + if (typeof value === 'object') { + if (channel === 'z') return getFiniteNumber(value.z, 0); + return channel === 'y' ? value.y : value.x; + } + return value; +}; + +const getTimelineValueChannels = ( + value: TimelineValue +): Array<{| channel: TimelineValueChannel, color: string |}> => + typeof value === 'object' + ? [ + { channel: 'x', color: '#18A8FF' }, + { channel: 'y', color: '#04D4F4' }, + ...(typeof value.z === 'number' + ? [{ channel: 'z', color: '#B478FF' }] + : []), + ] + : [{ channel: 'value', color: '#18A8FF' }]; + +const getKeyframeFrameKey = (time: number): string => + String(Math.round(time * frameRate)); + +const getKeyframeMergeKey = (keyframe: TimelineKeyframe): string => + getKeyframeFrameKey(keyframe.time); + +const snapTimeToTimelineFrame = (time: number): number => + Math.round(time * frameRate) / frameRate; + +const getRenderableTimelineKeyframes = ( + propertyTrack: TimelinePropertyTrack +): Array => { + const keyframes = propertyTrack.keyframes || []; + if (!keyframes.length) return []; + + const keyframeByFrame = new Map(); + for (const keyframe of keyframes) { + const snappedTime = snapTimeToTimelineFrame(keyframe.time); + const normalizedValue = normalizeTimelineValueForProperty( + propertyTrack.property, + keyframe.value + ); + const normalizedKeyframe: TimelineKeyframe = { + ...keyframe, + time: snappedTime, + value: normalizedValue, + }; + keyframeByFrame.set(getKeyframeFrameKey(snappedTime), normalizedKeyframe); + } + + return Array.from(keyframeByFrame.values()).sort((a, b) => a.time - b.time); +}; + +const getInitialKeyframeId = (propertyTrack: TimelinePropertyTrack): string => + `${propertyTrack.id}-initial`; + +const getPropertyTrackInitialValue = ( + propertyTrack: TimelinePropertyTrack +): TimelineValue => { + if (propertyTrack.initialValue !== undefined) { + return normalizeTimelineValueForProperty( + propertyTrack.property, + propertyTrack.initialValue + ); + } + + const keyframeAtStart = (propertyTrack.keyframes || []).find( + keyframe => + getKeyframeFrameKey(snapTimeToTimelineFrame(keyframe.time)) === '0' + ); + if (keyframeAtStart) { + return normalizeTimelineValueForProperty( + propertyTrack.property, + keyframeAtStart.value + ); + } + + return getDefaultTimelinePropertyValue(propertyTrack.property); +}; + +const createImplicitInitialKeyframe = ( + propertyTrack: TimelinePropertyTrack +): TimelineKeyframe => ({ + id: getInitialKeyframeId(propertyTrack), + time: 0, + value: getPropertyTrackInitialValue(propertyTrack), + ease: + propertyTrack.initialEase !== undefined + ? propertyTrack.initialEase + : isDiscreteTimelineProperty(propertyTrack.property) + ? 'hold' + : 'linear', + curve: + propertyTrack.initialCurve !== undefined + ? propertyTrack.initialCurve + : isDiscreteTimelineProperty(propertyTrack.property) + ? 'stepped' + : 'linear', +}); + +const getSamplingTimelineKeyframes = ( + propertyTrack: TimelinePropertyTrack +): Array => { + const keyframes = getRenderableTimelineKeyframes(propertyTrack); + if (keyframes.length && getKeyframeFrameKey(keyframes[0].time) === '0') { + return keyframes; + } + + return [createImplicitInitialKeyframe(propertyTrack), ...keyframes]; +}; + +const updatePropertyTrackInitialKeyframe = ( + propertyTrack: TimelinePropertyTrack, + keyframe: TimelineKeyframe +): TimelinePropertyTrack => ({ + ...propertyTrack, + initialValue: cloneTimelineValue( + normalizeTimelineValueForProperty(propertyTrack.property, keyframe.value) + ), + initialEase: + keyframe.ease !== undefined ? keyframe.ease : propertyTrack.initialEase, + initialCurve: + keyframe.curve !== undefined ? keyframe.curve : propertyTrack.initialCurve, + keyframes: (propertyTrack.keyframes || []).filter( + existingKeyframe => timeToFrame(existingKeyframe.time) !== 0 + ), +}); + +const upsertPropertyTrackKeyframe = ( + propertyTrack: TimelinePropertyTrack, + keyframe: TimelineKeyframe +): {| propertyTrack: TimelinePropertyTrack, keyframeId: string |} => { + const snappedTime = snapTimeToTimelineFrame(keyframe.time); + const normalizedKeyframe: TimelineKeyframe = { + ...keyframe, + time: snappedTime, + value: normalizeTimelineValueForProperty( + propertyTrack.property, + keyframe.value + ), + }; + + if (timeToFrame(snappedTime) === 0) { + return { + propertyTrack: updatePropertyTrackInitialKeyframe( + propertyTrack, + normalizedKeyframe + ), + keyframeId: getInitialKeyframeId(propertyTrack), + }; + } + + const existingKeyframe = (propertyTrack.keyframes || []).find( + existingKeyframe => + timeToFrame(existingKeyframe.time) === timeToFrame(snappedTime) + ); + const keyframeId = existingKeyframe ? existingKeyframe.id : keyframe.id; + const nextKeyframe: TimelineKeyframe = existingKeyframe + ? { + ...existingKeyframe, + time: normalizedKeyframe.time, + value: normalizedKeyframe.value, + ease: + normalizedKeyframe.ease !== undefined + ? normalizedKeyframe.ease + : existingKeyframe.ease, + curve: + normalizedKeyframe.curve !== undefined + ? normalizedKeyframe.curve + : existingKeyframe.curve, + } + : normalizedKeyframe; + + return { + propertyTrack: { + ...propertyTrack, + keyframes: (existingKeyframe + ? propertyTrack.keyframes.map(existing => + existing.id === existingKeyframe.id ? nextKeyframe : existing + ) + : [...propertyTrack.keyframes, nextKeyframe] + ).sort((a, b) => a.time - b.time), + }, + keyframeId, + }; +}; + +const getTimelineValueChannelYFromRange = ( + range: {| min: number, max: number, range: number |}, + value: TimelineValue, + channel: TimelineValueChannel +): number => { + const channelValue = getTimelineValueChannelValue(value, channel); + return 86 - ((channelValue - range.min) / range.range) * 72; +}; + +const getPropertyTrackChannelRange = ( + propertyTrack: TimelinePropertyTrack, + channel: TimelineValueChannel +): {| min: number, max: number, range: number |} => { + const keyframes = getSamplingTimelineKeyframes(propertyTrack); + if (!keyframes.length) return { min: 0, max: 1, range: 1 }; + + const values = keyframes.map(keyframe => + getTimelineValueChannelValue(keyframe.value, channel) + ); + const minValue = Math.min(...values); + const maxValue = Math.max(...values); + const valuePadding = Math.max(1, (maxValue - minValue) * 0.18); + const min = minValue - valuePadding; + const max = maxValue + valuePadding; + return { min, max, range: Math.max(1, max - min) }; +}; + +const getTimelineGraphFrameX = ( + frame: number, + viewStartFrame: number, + visibleFrames: number +): number => ((frame - viewStartFrame) / Math.max(1, visibleFrames)) * 100; + +const getTimelineGraphPoint = ( + propertyTrack: TimelinePropertyTrack, + keyframe: TimelineKeyframe, + channel: TimelineValueChannel, + graphRange: {| min: number, max: number, range: number |}, + viewStartFrame: number, + visibleFrames: number +): {| x: number, y: number |} => ({ + x: getTimelineGraphFrameX( + keyframe.time * frameRate, + viewStartFrame, + visibleFrames + ), + y: getTimelineValueChannelYFromRange(graphRange, keyframe.value, channel), +}); + +const buildPropertyTrackGraphPaths = ( + propertyTrack: TimelinePropertyTrack, + viewStartFrame: number, + visibleFrames: number +): Array<{| channel: string, color: string, path: string |}> => { + const keyframes = getSamplingTimelineKeyframes(propertyTrack); + if (keyframes.length < 2) { + return ([]: Array<{| channel: string, color: string, path: string |}>); + } + + const channels = getTimelineValueChannels(keyframes[0].value); + const paths: Array<{| channel: string, color: string, path: string |}> = []; + channels.forEach(({ channel, color }) => { + const graphRange = getPropertyTrackChannelRange(propertyTrack, channel); + const commands: Array = []; + + for (let index = 0; index < keyframes.length; index++) { + const keyframe = keyframes[index]; + const frame = keyframe.time * frameRate; + const previousFrame = + index > 0 ? keyframes[index - 1].time * frameRate : frame; + const nextFrame = + index < keyframes.length - 1 + ? keyframes[index + 1].time * frameRate + : frame; + if ( + frame < viewStartFrame && + nextFrame < viewStartFrame && + previousFrame < viewStartFrame + ) { + continue; + } + if ( + frame > viewStartFrame + visibleFrames && + nextFrame > viewStartFrame + visibleFrames && + previousFrame > viewStartFrame + visibleFrames + ) { + continue; + } + + const point = getTimelineGraphPoint( + propertyTrack, + keyframe, + channel, + graphRange, + viewStartFrame, + visibleFrames + ); + commands.push( + `${commands.length ? 'L' : 'M'}${point.x.toFixed(2)} ${point.y.toFixed( + 2 + )}` + ); + } + + if (commands.length) { + paths.push({ channel, color, path: commands.join(' ') }); + } + }); + return paths; +}; + +const getTimelineValueChannelY = ( + propertyTrack: TimelinePropertyTrack, + value: TimelineValue, + channel: TimelineValueChannel +): number => { + const range = getPropertyTrackChannelRange(propertyTrack, channel); + return getTimelineValueChannelYFromRange(range, value, channel); +}; + +const getNearestTimelineValueChannel = ( + propertyTrack: TimelinePropertyTrack, + keyframe: TimelineKeyframe, + clientY: number, + element: HTMLDivElement +): TimelineValueChannel => { + if (typeof keyframe.value !== 'object') return 'value'; + + const rect = element.getBoundingClientRect(); + const pointerY = ((clientY - rect.top) / Math.max(1, rect.height)) * 100; + const channels = getTimelineValueChannels(keyframe.value); + const nearest = channels.reduce((bestChannel, channel) => { + const bestDistance = Math.abs( + getTimelineValueChannelY( + propertyTrack, + keyframe.value, + bestChannel.channel + ) - pointerY + ); + const distance = Math.abs( + getTimelineValueChannelY(propertyTrack, keyframe.value, channel.channel) - + pointerY + ); + return distance < bestDistance ? channel : bestChannel; + }, channels[0]); + return nearest.channel; +}; + +const normalizeDraggedTimelineValue = ( + property: string, + value: TimelineValue +): TimelineValue => { + if (typeof value === 'object') { + if (property === 'scale') { + return createTimelinePointValue( + Math.max(minimumTimelineScale, getFiniteNumber(value.x, 1)), + Math.max(minimumTimelineScale, getFiniteNumber(value.y, 1)), + typeof value.z === 'number' + ? Math.max(minimumTimelineScale, getFiniteNumber(value.z, 1)) + : undefined + ); + } + return value; + } + + if (property === 'opacity') return clamp(value, 0, 255); + if (property === 'volume') return clamp(value, 0, 100); + if (property === 'width' || property === 'height' || property === 'depth') { + return Math.max(minimumTimelineDimension, getFiniteNumber(value, 1)); + } + if (property === 'playbackSpeed' || property === 'animationSpeedScale') { + return Math.max(minimumTimelineScale, getFiniteNumber(value, 1)); + } + if (property === 'scaleX' || property === 'scaleY' || property === 'scaleZ') { + return Math.max(minimumTimelineScale, getFiniteNumber(value, 1)); + } + return getFiniteNumber(value, 0); +}; + +const offsetTimelineValueChannel = ( + property: string, + value: TimelineValue, + channel: TimelineValueChannel, + deltaValue: number +): TimelineValue => { + if (typeof value === 'object') { + const nextValue = + channel === 'x' + ? createTimelinePointValue( + value.x + deltaValue, + value.y, + typeof value.z === 'number' ? value.z : undefined + ) + : channel === 'z' + ? createTimelinePointValue( + value.x, + value.y, + getFiniteNumber(value.z, 0) + deltaValue + ) + : createTimelinePointValue( + value.x, + value.y + deltaValue, + typeof value.z === 'number' ? value.z : undefined + ); + return normalizeDraggedTimelineValue(property, nextValue); + } + + return normalizeDraggedTimelineValue(property, value + deltaValue); +}; + +const getCubicBezierControlPoints = ( + curve: TimelineCurveDefinition | null +): {| x1: number, y1: number, x2: number, y2: number |} => { + if (Array.isArray(curve) && curve.length >= 4) { + return { + x1: clamp01(getFiniteNumber(curve[0], 0.42)), + y1: clamp01(getFiniteNumber(curve[1], 0)), + x2: clamp01(getFiniteNumber(curve[2], 0.58)), + y2: clamp01(getFiniteNumber(curve[3], 1)), + }; + } + + const curveObject = asTimelineCurveObject(curve); + if (curveObject && curveObject.type === 'cubicBezier') { + return { + x1: clamp01(getFiniteNumber(curveObject.x1, 0.42)), + y1: clamp01(getFiniteNumber(curveObject.y1, 0)), + x2: clamp01(getFiniteNumber(curveObject.x2, 0.58)), + y2: clamp01(getFiniteNumber(curveObject.y2, 1)), + }; + } + + return { x1: 0.42, y1: 0, x2: 0.58, y2: 1 }; +}; + +const getFrameLabelStep = (visibleFrames: number): number => { + const targetLabelsCount = 16; + const rawStep = Math.max(1, visibleFrames / targetLabelsCount); + const steps = [1, 2, 3, 6, 12, 15, 30, 60, 120, 240, 480, 960]; + return steps.find(step => step >= rawStep) || Math.ceil(rawStep / 960) * 960; +}; + +const getTrackTitle = (track: TimelineTrack): string => { + if (track.target.mode === 'runtimeBinding') { + return track.target.bindingName || ''; + } + return track.target.objectName || ''; +}; + +const getTrackLabel = (track: TimelineTrack): React.Node => { + if (track.target.mode === 'runtimeBinding') { + return track.target.bindingName || Runtime target; + } + return track.target.objectName || Object; +}; + +const isSpine43ObjectType = (objectType: ?string): boolean => + objectType === 'Spine43Object' || + objectType === 'Spine43Object::Spine43Object'; + +const isCube3DObjectType = (objectType: ?string): boolean => + objectType === 'Scene3D::Cube3DObject' || + objectType === 'FakeScene3D::Cube3DObject'; + +const isModel3DObjectType = (objectType: ?string): boolean => + objectType === 'Scene3D::Model3DObject'; + +const getRenderedInstanceDimension = ( + instance: gdInitialInstance, + onGetInstanceSize: ?(gdInitialInstance) => [number, number, number], + dimensionIndex: 0 | 1 | 2 +): number => { + if (!onGetInstanceSize) return 0; + + const size = onGetInstanceSize(instance); + return size ? size[dimensionIndex] : 0; +}; + +const getInstanceRawWidth = (instance: gdInitialInstance): number => + instance.hasCustomSize() + ? instance.getCustomWidth() + : instance.getDefaultWidth(); + +const getInstanceRawHeight = (instance: gdInitialInstance): number => + instance.hasCustomSize() + ? instance.getCustomHeight() + : instance.getDefaultHeight(); + +const getInstanceRawDepth = (instance: gdInitialInstance): number => + instance.hasCustomDepth() + ? instance.getCustomDepth() + : instance.getDefaultDepth(); + +const getPositiveDimension = (value: number, fallback: number): number => + Number.isFinite(value) && value > 0 ? value : fallback; + +const areTimelineScaleValuesIdentity = (value: TimelinePointValue): boolean => + Math.abs(value.x - 1) < 0.0001 && + Math.abs(value.y - 1) < 0.0001 && + (typeof value.z !== 'number' || Math.abs(value.z - 1) < 0.0001); + +const getInstanceScaleBaseWidth = ( + instance: gdInitialInstance, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): number => + getPositiveDimension( + instance.getDefaultWidth(), + getPositiveDimension( + instance.hasCustomSize() ? instance.getCustomWidth() : 0, + getPositiveDimension( + isSpine43ObjectType(objectType) + ? 0 + : getRenderedInstanceDimension(instance, onGetInstanceSize, 0), + fallbackTimelineScaleBaseSize + ) + ) + ); + +const getInstanceScaleBaseHeight = ( + instance: gdInitialInstance, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): number => + getPositiveDimension( + instance.getDefaultHeight(), + getPositiveDimension( + instance.hasCustomSize() ? instance.getCustomHeight() : 0, + getPositiveDimension( + isSpine43ObjectType(objectType) + ? 0 + : getRenderedInstanceDimension(instance, onGetInstanceSize, 1), + fallbackTimelineScaleBaseSize + ) + ) + ); + +const getInstanceScaleBaseDepth = ( + instance: gdInitialInstance, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): number => + getPositiveDimension( + instance.getDefaultDepth(), + getPositiveDimension( + instance.hasCustomDepth() ? instance.getCustomDepth() : 0, + getPositiveDimension( + isSpine43ObjectType(objectType) + ? 0 + : getRenderedInstanceDimension(instance, onGetInstanceSize, 2), + fallbackTimelineScaleBaseSize + ) + ) + ); + +const getInstanceWidth = ( + instance: gdInitialInstance, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): number => + getPositiveDimension( + getInstanceRawWidth(instance), + getInstanceScaleBaseWidth(instance, onGetInstanceSize, objectType) + ); + +const getInstanceHeight = ( + instance: gdInitialInstance, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): number => + getPositiveDimension( + getInstanceRawHeight(instance), + getInstanceScaleBaseHeight(instance, onGetInstanceSize, objectType) + ); + +const getInstanceDepth = ( + instance: gdInitialInstance, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): number => + getPositiveDimension( + getInstanceRawDepth(instance), + getInstanceScaleBaseDepth(instance, onGetInstanceSize, objectType) + ); + +const getInstanceScale = ( + instance: gdInitialInstance, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): TimelinePointValue => { + const defaultWidth = getInstanceScaleBaseWidth( + instance, + onGetInstanceSize, + objectType + ); + const defaultHeight = getInstanceScaleBaseHeight( + instance, + onGetInstanceSize, + objectType + ); + const defaultDepth = getInstanceScaleBaseDepth( + instance, + onGetInstanceSize, + objectType + ); + const width = getInstanceWidth(instance, onGetInstanceSize, objectType); + const height = getInstanceHeight(instance, onGetInstanceSize, objectType); + const depth = getInstanceDepth(instance, onGetInstanceSize, objectType); + return { + x: getPositiveDimension(width / defaultWidth, 1), + y: getPositiveDimension(height / defaultHeight, 1), + z: getPositiveDimension(depth / defaultDepth, 1), + }; +}; + +const getInstanceIdentity = (instance: gdInitialInstance): string => + instance.getPersistentUuid() || String(instance.ptr); + +const getScaleBaseDimensionsKey = ( + instance: gdInitialInstance, + objectType: ?string +): string => `${getInstanceIdentity(instance)}:${objectType || ''}`; + +const getInstanceTimelineScaleBaseDimensions = ( + instance: gdInitialInstance, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): TimelineScaleBaseDimensions => { + const renderedWidth = getRenderedInstanceDimension( + instance, + onGetInstanceSize, + 0 + ); + const renderedHeight = getRenderedInstanceDimension( + instance, + onGetInstanceSize, + 1 + ); + const renderedDepth = getRenderedInstanceDimension( + instance, + onGetInstanceSize, + 2 + ); + + if (isSpine43ObjectType(objectType)) { + return { + width: getPositiveDimension( + renderedWidth, + getInstanceScaleBaseWidth(instance, onGetInstanceSize, objectType) + ), + height: getPositiveDimension( + renderedHeight, + getInstanceScaleBaseHeight(instance, onGetInstanceSize, objectType) + ), + depth: getPositiveDimension( + renderedDepth, + getInstanceScaleBaseDepth(instance, onGetInstanceSize, objectType) + ), + }; + } + + return { + width: getInstanceScaleBaseWidth(instance, onGetInstanceSize, objectType), + height: getInstanceScaleBaseHeight(instance, onGetInstanceSize, objectType), + depth: getInstanceScaleBaseDepth(instance, onGetInstanceSize, objectType), + }; +}; + +const getInitialInstancesSignature = ( + initialInstances: ?gdInitialInstancesContainer +): string => { + if (!initialInstances) return ''; + + const instanceIdentities = []; + const functor = new gd.InitialInstanceJSFunctor(); + // $FlowFixMe[cannot-write] - invoke is provided by the Emscripten functor. + functor.invoke = instancePtr => { + const instance: gdInitialInstance = gd.wrapPointer( + // $FlowFixMe[incompatible-type] - wrapPointer accepts native pointers. + instancePtr, + gd.InitialInstance + ); + instanceIdentities.push( + `${instance.getObjectName()}:${getInstanceIdentity(instance)}` + ); + }; + // $FlowFixMe[incompatible-type] - JSFunctor is compatible at runtime. + initialInstances.iterateOverInstances(functor); + functor.delete(); + + return instanceIdentities.sort().join('|'); +}; + +const getSelectedInstancesSignature = ( + instances: Array +): string => { + const instanceIdentities = new Set(); + for (const instance of instances) { + instanceIdentities.add(getInstanceIdentity(instance)); + } + + return Array.from(instanceIdentities) + .sort() + .join('|'); +}; + +const getTimelineValueIdentity = (value: any): string => + value && typeof value === 'object' + ? [ + getFiniteNumber(value.x, 0), + getFiniteNumber(value.y, 0), + ...(typeof value.z === 'number' ? [value.z] : []), + ] + .map(channelValue => getFiniteNumber(channelValue, 0).toFixed(3)) + .join(',') + : getFiniteNumber(value, 0).toFixed(3); + +const normalizeTimelinePropertyTrack = ( + propertyTrack: TimelinePropertyTrack +): {| propertyTrack: TimelinePropertyTrack, changed: boolean |} => { + const keyframes = propertyTrack.keyframes || []; + const keyframeByFrame = new Map(); + let normalizedInitialValue = + propertyTrack.initialValue !== undefined + ? normalizeTimelineValueForProperty( + propertyTrack.property, + propertyTrack.initialValue + ) + : getDefaultTimelinePropertyValue(propertyTrack.property); + const defaultInitialEase = isDiscreteTimelineProperty(propertyTrack.property) + ? 'hold' + : 'linear'; + const defaultInitialCurve = isDiscreteTimelineProperty(propertyTrack.property) + ? 'stepped' + : 'linear'; + let normalizedInitialEase = + propertyTrack.initialEase !== undefined + ? propertyTrack.initialEase + : defaultInitialEase; + let normalizedInitialCurve = + propertyTrack.initialCurve !== undefined + ? propertyTrack.initialCurve + : defaultInitialCurve; + let changed = false; + if ( + propertyTrack.initialValue === undefined || + getTimelineValueIdentity(normalizedInitialValue) !== + getTimelineValueIdentity(propertyTrack.initialValue) + ) { + changed = true; + } + if ( + propertyTrack.initialEase === undefined || + propertyTrack.initialCurve === undefined + ) { + changed = true; + } + + for (const keyframe of keyframes) { + const snappedTime = snapTimeToTimelineFrame(keyframe.time); + const frameKey = getKeyframeFrameKey(snappedTime); + const normalizedKeyframe: TimelineKeyframe = + Math.abs(snappedTime - keyframe.time) > 0.000001 + ? { ...keyframe, time: snappedTime } + : keyframe; + const normalizedValue = normalizeTimelineValueForProperty( + propertyTrack.property, + normalizedKeyframe.value + ); + const normalizedValueKeyframe: TimelineKeyframe = + getTimelineValueIdentity(normalizedValue) !== + getTimelineValueIdentity(normalizedKeyframe.value) + ? { + ...normalizedKeyframe, + value: normalizedValue, + } + : normalizedKeyframe; + if (normalizedValueKeyframe !== keyframe) { + changed = true; + } + if (frameKey === '0') { + normalizedInitialValue = normalizedValue; + normalizedInitialEase = + normalizedValueKeyframe.ease !== undefined + ? normalizedValueKeyframe.ease + : defaultInitialEase; + normalizedInitialCurve = + normalizedValueKeyframe.curve !== undefined + ? normalizedValueKeyframe.curve + : defaultInitialCurve; + changed = true; + continue; + } + if (keyframeByFrame.has(frameKey)) { + changed = true; + } + keyframeByFrame.set(frameKey, normalizedValueKeyframe); + } + + const normalizedKeyframes = Array.from(keyframeByFrame.values()).sort( + (a, b) => a.time - b.time + ); + + if (!changed) { + for (let index = 0; index < normalizedKeyframes.length; index++) { + if (normalizedKeyframes[index] !== keyframes[index]) { + changed = true; + break; + } + } + } + + return { + propertyTrack: changed + ? { + ...propertyTrack, + initialValue: cloneTimelineValue(normalizedInitialValue), + initialEase: normalizedInitialEase, + initialCurve: normalizedInitialCurve, + keyframes: normalizedKeyframes, + } + : propertyTrack, + changed, + }; +}; + +const splitLegacyVectorPropertyTrack = ( + propertyTrack: TimelinePropertyTrack +): {| propertyTracks: Array, changed: boolean |} => { + if ( + propertyTrack.property !== 'position' && + propertyTrack.property !== 'scale' + ) { + return { propertyTracks: [propertyTrack], changed: false }; + } + + const hasZChannel = + (propertyTrack.initialValue && + typeof propertyTrack.initialValue === 'object' && + typeof propertyTrack.initialValue.z === 'number') || + propertyTrack.keyframes.some( + keyframe => + keyframe.value && + typeof keyframe.value === 'object' && + typeof keyframe.value.z === 'number' + ); + const channelProperties: Array<{| + property: string, + channel: 'x' | 'y' | 'z', + |}> = + propertyTrack.property === 'position' + ? [ + { property: 'x', channel: 'x' }, + { property: 'y', channel: 'y' }, + ...(hasZChannel ? [{ property: 'z', channel: 'z' }] : []), + ] + : [ + { property: 'scaleX', channel: 'x' }, + { property: 'scaleY', channel: 'y' }, + ...(hasZChannel ? [{ property: 'scaleZ', channel: 'z' }] : []), + ]; + + const createScalarTrack = ( + property: string, + channel: 'x' | 'y' | 'z', + keepExistingIds: boolean + ): TimelinePropertyTrack => { + const fallbackValue = getDefaultTimelinePropertyValue( + propertyTrack.property + ); + const sourceInitialValue = + propertyTrack.initialValue !== undefined + ? propertyTrack.initialValue + : fallbackValue; + const legacyInitialValue: TimelinePointValue = + sourceInitialValue && typeof sourceInitialValue === 'object' + ? sourceInitialValue + : fallbackValue && typeof fallbackValue === 'object' + ? fallbackValue + : createTimelinePointValue(0, 0); + const getLegacyChannelValue = (legacyValue: TimelinePointValue): number => { + const fallbackChannelValue = + channel === 'z' + ? propertyTrack.property === 'scale' + ? 1 + : 0 + : getFiniteNumber(legacyInitialValue[channel], 0); + return typeof legacyValue === 'object' + ? getFiniteNumber(legacyValue[channel], fallbackChannelValue) + : fallbackChannelValue; + }; + + return { + ...propertyTrack, + id: keepExistingIds ? propertyTrack.id : createPropertyTrackId(), + property, + initialValue: normalizeTimelineValueForProperty( + property, + getLegacyChannelValue(legacyInitialValue) + ), + keyframes: propertyTrack.keyframes.map(keyframe => { + const fallbackValue = getDefaultTimelinePropertyValue( + propertyTrack.property + ); + const legacyValue: TimelinePointValue = + keyframe.value && typeof keyframe.value === 'object' + ? keyframe.value + : fallbackValue && typeof fallbackValue === 'object' + ? fallbackValue + : createTimelinePointValue(0, 0); + const nextKeyframe: TimelineKeyframe = { + ...keyframe, + id: keepExistingIds ? keyframe.id : createKeyframeId(), + value: normalizeTimelineValueForProperty( + property, + getLegacyChannelValue(legacyValue) + ), + }; + return nextKeyframe; + }), + }; + }; + + return { + propertyTracks: channelProperties.map((channelProperty, index) => + createScalarTrack( + channelProperty.property, + channelProperty.channel, + index === 0 + ) + ), + changed: true, + }; +}; + +const mergeTimelinePropertyTracks = ( + keptPropertyTracks: Array, + incomingPropertyTracks: Array, + propertyTrackIdReplacements: Map +): Array => { + const mergedPropertyTracks = keptPropertyTracks.slice(); + const propertyTrackIndexByProperty = new Map(); + mergedPropertyTracks.forEach((propertyTrack, index) => { + propertyTrackIndexByProperty.set(propertyTrack.property, index); + }); + + for (const incomingPropertyTrack of incomingPropertyTracks) { + const keptPropertyTrackIndex = propertyTrackIndexByProperty.get( + incomingPropertyTrack.property + ); + if (keptPropertyTrackIndex === undefined) { + propertyTrackIndexByProperty.set( + incomingPropertyTrack.property, + mergedPropertyTracks.length + ); + mergedPropertyTracks.push(incomingPropertyTrack); + continue; + } + + const keptPropertyTrack = mergedPropertyTracks[keptPropertyTrackIndex]; + propertyTrackIdReplacements.set( + incomingPropertyTrack.id, + keptPropertyTrack.id + ); + + let nextKeptPropertyTrack: TimelinePropertyTrack = keptPropertyTrack; + if ( + keptPropertyTrack.initialValue === undefined && + incomingPropertyTrack.initialValue !== undefined + ) { + nextKeptPropertyTrack = { + ...nextKeptPropertyTrack, + initialValue: cloneTimelineValue( + normalizeTimelineValueForProperty( + incomingPropertyTrack.property, + incomingPropertyTrack.initialValue + ) + ), + }; + mergedPropertyTracks[keptPropertyTrackIndex] = nextKeptPropertyTrack; + } + + const usedKeyframeFrames = new Set( + nextKeptPropertyTrack.keyframes.map(getKeyframeMergeKey) + ); + const keyframesToAdd = incomingPropertyTrack.keyframes.filter(keyframe => { + const key = getKeyframeMergeKey(keyframe); + if (usedKeyframeFrames.has(key)) return false; + usedKeyframeFrames.add(key); + return true; + }); + + if (keyframesToAdd.length) { + mergedPropertyTracks[keptPropertyTrackIndex] = { + ...nextKeptPropertyTrack, + keyframes: [...nextKeptPropertyTrack.keyframes, ...keyframesToAdd].sort( + (a, b) => a.time - b.time + ), + }; + } + } + + return mergedPropertyTracks; +}; + +const getTimelineTrackKey = (track: TimelineTrack): ?string => { + const target = track.target; + if (!target) return null; + + if (target.mode === 'runtimeBinding') { + return target.bindingName ? `runtime:${target.bindingName}` : null; + } + + if (target.mode === 'sceneInstance' && target.instancePersistentUuid) { + return `instance:${target.instancePersistentUuid}`; + } + + if (target.mode === 'sceneInstance') { + return `unresolved-instance:${track.id}`; + } + + return target.objectName + ? `object:${target.objectName}:${target.selection || 'first'}` + : null; +}; + +const normalizeTimelineTracks = ( + tracks: Array +): {| + tracks: Array, + changed: boolean, + propertyTrackIdReplacements: Map, +|} => { + const normalizedTracks: Array = []; + const trackIndexByKey = new Map(); + const propertyTrackIdReplacements = new Map(); + let changed = false; + + for (const track of tracks) { + const target = track.target; + if ( + !target || + (target.mode !== 'runtimeBinding' && + !target.objectName && + !target.instancePersistentUuid) + ) { + changed = true; + continue; + } + + let normalizedTrack: TimelineTrack = track; + let didNormalizePropertyTracks = false; + const normalizedPropertyTracks: Array = []; + for (const propertyTrack of track.propertyTracks) { + const propertyTrackUpdate = normalizeTimelinePropertyTrack(propertyTrack); + if (propertyTrackUpdate.changed) { + didNormalizePropertyTracks = true; + } + const splitPropertyTrackUpdate = splitLegacyVectorPropertyTrack( + propertyTrackUpdate.propertyTrack + ); + if (splitPropertyTrackUpdate.changed) { + didNormalizePropertyTracks = true; + } + normalizedPropertyTracks.push(...splitPropertyTrackUpdate.propertyTracks); + } + if (didNormalizePropertyTracks) { + normalizedTrack = { + ...track, + propertyTracks: normalizedPropertyTracks, + }; + changed = true; + } + + const trackKey = getTimelineTrackKey(track); + if (!trackKey) { + changed = true; + continue; + } + + const keptTrackIndex = trackIndexByKey.get(trackKey); + if (keptTrackIndex === undefined) { + trackIndexByKey.set(trackKey, normalizedTracks.length); + normalizedTracks.push(normalizedTrack); + continue; + } + + const keptTrack = normalizedTracks[keptTrackIndex]; + normalizedTracks[keptTrackIndex] = { + ...keptTrack, + propertyTracks: mergeTimelinePropertyTracks( + keptTrack.propertyTracks, + normalizedTrack.propertyTracks, + propertyTrackIdReplacements + ), + }; + changed = true; + } + + return { tracks: normalizedTracks, changed, propertyTrackIdReplacements }; +}; + +const getTrackPropertyValueFromInstance = ( + instance: ?gdInitialInstance, + property: string, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): TimelineValue => { + if (!instance) { + return getDefaultTimelinePropertyValue(property); + } + const instanceAsAny = (instance: any); + + switch (property) { + case 'position': + return normalizeTimelineValueForProperty(property, { + x: instance.getX(), + y: instance.getY(), + }); + case 'x': + return normalizeTimelineValueForProperty(property, instance.getX()); + case 'y': + return normalizeTimelineValueForProperty(property, instance.getY()); + case 'z': + return normalizeTimelineValueForProperty(property, instance.getZ()); + case 'angle': + return normalizeTimelineValueForProperty(property, instance.getAngle()); + case 'rotationX': + return normalizeTimelineValueForProperty( + property, + instance.getRotationX() + ); + case 'rotationY': + return normalizeTimelineValueForProperty( + property, + instance.getRotationY() + ); + case 'scale': + return getInstanceScale(instance, onGetInstanceSize, objectType); + case 'scaleX': + return normalizeTimelineScaleAxisValue( + 'scaleX', + getInstanceScale(instance, onGetInstanceSize, objectType).x + ); + case 'scaleY': + return normalizeTimelineScaleAxisValue( + 'scaleY', + getInstanceScale(instance, onGetInstanceSize, objectType).y + ); + case 'scaleZ': + return normalizeTimelineScaleAxisValue( + 'scaleZ', + getInstanceScale(instance, onGetInstanceSize, objectType).z || 1 + ); + case 'opacity': + return normalizeTimelineValueForProperty( + property, + typeof instanceAsAny.getOpacity === 'function' + ? instanceAsAny.getOpacity() + : 255 + ); + case 'width': + return getInstanceWidth(instance, onGetInstanceSize, objectType); + case 'height': + return getInstanceHeight(instance, onGetInstanceSize, objectType); + case 'depth': + return getInstanceDepth(instance, onGetInstanceSize, objectType); + default: + return getDefaultTimelinePropertyValue(property); + } +}; + +const getTimelinePropertiesForObjectType = ( + objectType: ?string +): Array => { + if (isModel3DObjectType(objectType)) { + return model3DTimelineProperties; + } + if (isCube3DObjectType(objectType)) { + return threeDTransformTimelineProperties; + } + + switch (objectType) { + case 'Sprite': + case 'TiledSpriteObject::TiledSprite': + case 'PanelSpriteObject::PanelSprite': + return spriteTimelineProperties; + case 'TextObject::Text': + case 'BBText::BBText': + case 'BitmapText::BitmapText': + return textTimelineProperties; + case 'Video::VideoObject': + return videoTimelineProperties; + default: + return commonTimelineProperties; + } +}; + +const ensureSupportedPropertyTracks = ( + track: TimelineTrack, + instance: ?gdInitialInstance, + objectType: ?string, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number] +): {| track: TimelineTrack, changed: boolean |} => { + if (!instance) { + return { track, changed: false }; + } + + const existingProperties = new Set( + track.propertyTracks.map(propertyTrack => propertyTrack.property) + ); + const missingProperties = getTimelinePropertiesForObjectType( + objectType + ).filter(property => !existingProperties.has(property)); + if (!missingProperties.length) { + return { track, changed: false }; + } + + return { + track: { + ...track, + propertyTracks: [ + ...track.propertyTracks, + ...missingProperties.map(property => + createPropertyTrack( + property, + getTrackPropertyValueFromInstance( + instance, + property, + onGetInstanceSize, + objectType + ) + ) + ), + ], + }, + changed: true, + }; +}; + +const createPropertyTracksForObject = ( + objectType: ?string, + instance: ?gdInitialInstance, + existingPropertyTracks?: Array, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number] +): Array => { + const existingPropertyTrackByProperty = new Map< + string, + TimelinePropertyTrack + >(); + if (existingPropertyTracks) { + for (const propertyTrack of existingPropertyTracks) { + const propertyTrackUpdate = normalizeTimelinePropertyTrack(propertyTrack); + const splitPropertyTrackUpdate = splitLegacyVectorPropertyTrack( + propertyTrackUpdate.propertyTrack + ); + for (const splitPropertyTrack of splitPropertyTrackUpdate.propertyTracks) { + existingPropertyTrackByProperty.set( + splitPropertyTrack.property, + splitPropertyTrack + ); + } + } + } + + if (!instance) { + return Array.from(existingPropertyTrackByProperty.values()); + } + + return getTimelinePropertiesForObjectType(objectType).map(property => { + const existingPropertyTrack = existingPropertyTrackByProperty.get(property); + if (existingPropertyTrack) { + return existingPropertyTrack; + } + + return createPropertyTrack( + property, + getTrackPropertyValueFromInstance( + instance, + property, + onGetInstanceSize, + objectType + ) + ); + }); +}; + +const getPropertyLabel = (property: string): React.Node => { + switch (property) { + case 'position': + return Position; + case 'angle': + return Angle; + case 'rotationX': + return X rotation; + case 'rotationY': + return Y rotation; + case 'rotationZ': + return Z rotation; + case 'opacity': + return Opacity; + case 'scale': + return Scale; + case 'scaleX': + return X scale; + case 'scaleY': + return Y scale; + case 'scaleZ': + return Z scale; + case 'width': + return Width; + case 'height': + return Height; + case 'depth': + return Depth; + case 'animationIndex': + return Animation; + case 'animationFrame': + return Animation frame; + case 'animationSpeedScale': + return Animation speed; + case 'characterSize': + return Font size; + case 'lineHeight': + return Line height; + case 'volume': + return Volume; + case 'playbackSpeed': + return Playback speed; + case 'currentTime': + return Video time; + case 'x': + return X position; + case 'y': + return Y position; + case 'z': + return Z position; + default: + return property; + } +}; + +const getObjectNames = ( + project: gdProject, + objectsContainer?: ?gdObjectsContainer, + globalObjectsContainer?: ?gdObjectsContainer +): Array => { + const names = new Set(); + const addContainerObjects = (container: ?gdObjectsContainer) => { + if (!container) return; + for (let index = 0; index < container.getObjectsCount(); index++) { + names.add(container.getObjectAt(index).getName()); + } + }; + + addContainerObjects(objectsContainer); + addContainerObjects(globalObjectsContainer || project.getObjects()); + return Array.from(names).sort(); +}; + +const findObjectByName = ( + project: gdProject, + objectsContainer: ?gdObjectsContainer, + globalObjectsContainer: ?gdObjectsContainer, + objectName: ?string +): ?gdObject => { + if (!objectName) return null; + if (objectsContainer && objectsContainer.hasObjectNamed(objectName)) { + return objectsContainer.getObject(objectName); + } + + const globalObjects = globalObjectsContainer || project.getObjects(); + if (globalObjects && globalObjects.hasObjectNamed(objectName)) { + return globalObjects.getObject(objectName); + } + + return null; +}; + +const getObjectTypeByName = ( + project: gdProject, + objectsContainer: ?gdObjectsContainer, + globalObjectsContainer: ?gdObjectsContainer, + objectName: ?string +): ?string => { + const object = findObjectByName( + project, + objectsContainer, + globalObjectsContainer, + objectName + ); + return object ? object.getType() : null; +}; + +const getTrackObjectType = ( + project: gdProject, + objectsContainer: ?gdObjectsContainer, + globalObjectsContainer: ?gdObjectsContainer, + track: TimelineTrack +): ?string => + getObjectTypeByName( + project, + objectsContainer, + globalObjectsContainer, + track.target.objectName + ); + +const createTrackForInstance = ( + instance: gdInitialInstance, + objectType: ?string, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number] +): TimelineTrack => { + const instancePersistentUuid = instance.getPersistentUuid(); + const objectName = instance.getObjectName(); + return { + id: createTrackId(), + type: 'object', + target: instancePersistentUuid + ? { + mode: 'sceneInstance', + objectName, + instancePersistentUuid, + selection: 'first', + } + : { + mode: 'objectName', + objectName, + selection: 'first', + }, + propertyTracks: createPropertyTracksForObject( + objectType, + instance, + undefined, + onGetInstanceSize + ), + }; +}; + +const getInitialInstancesIndex = ( + initialInstances: ?gdInitialInstancesContainer +): InitialInstancesIndex => { + const byObjectName: Map> = new Map(); + const byPersistentUuid: Map = new Map(); + if (!initialInstances) { + return { byObjectName, byPersistentUuid }; + } + + const functor = new gd.InitialInstanceJSFunctor(); + // $FlowFixMe[cannot-write] - invoke is provided by the Emscripten functor. + functor.invoke = instancePtr => { + const instance: gdInitialInstance = gd.wrapPointer( + // $FlowFixMe[incompatible-type] - wrapPointer accepts native pointers. + instancePtr, + gd.InitialInstance + ); + const objectName = instance.getObjectName(); + const persistentUuid = instance.getPersistentUuid(); + if (objectName) { + const instances = byObjectName.get(objectName) || []; + instances.push(instance); + byObjectName.set(objectName, instances); + } + if (persistentUuid) { + byPersistentUuid.set(persistentUuid, instance); + } + }; + // $FlowFixMe[incompatible-type] - JSFunctor is compatible at runtime. + initialInstances.iterateOverInstances(functor); + functor.delete(); + return { byObjectName, byPersistentUuid }; +}; + +const findInitialInstancesForTrack = ( + track: TimelineTrack, + initialInstancesIndex: InitialInstancesIndex +): Array => { + const target = track.target; + if (!target) return []; + + if (target.mode === 'sceneInstance' && target.instancePersistentUuid) { + const instance = initialInstancesIndex.byPersistentUuid.get( + target.instancePersistentUuid + ); + if (instance) { + return [instance]; + } + return []; + } + + const instances = target.objectName + ? initialInstancesIndex.byObjectName.get(target.objectName) || [] + : []; + return target.selection === 'all' ? instances : instances.slice(0, 1); +}; + +const isInitialInstanceAvailable = ( + instance: gdInitialInstance, + initialInstancesIndex: InitialInstancesIndex, + hasInitialInstancesContainer: boolean +): boolean => { + if (!hasInitialInstancesContainer) return true; + + const persistentUuid = instance.getPersistentUuid(); + if (persistentUuid) { + return initialInstancesIndex.byPersistentUuid.has(persistentUuid); + } + + const objectName = instance.getObjectName(); + if (!objectName) return false; + + const instanceIdentity = getInstanceIdentity(instance); + return (initialInstancesIndex.byObjectName.get(objectName) || []).some( + liveInstance => getInstanceIdentity(liveInstance) === instanceIdentity + ); +}; + +const isTrackTargetMissingSceneInstance = ( + track: TimelineTrack, + initialInstancesIndex: InitialInstancesIndex, + hasInitialInstancesContainer: boolean +): boolean => { + if (!hasInitialInstancesContainer) return false; + + const target = track.target; + return !!( + target.mode === 'sceneInstance' && + target.instancePersistentUuid && + !initialInstancesIndex.byPersistentUuid.has(target.instancePersistentUuid) + ); +}; + +const doesTrackTargetInstance = ( + track: TimelineTrack, + instance: gdInitialInstance +): boolean => { + const target = track.target; + const objectName = instance.getObjectName(); + const persistentUuid = instance.getPersistentUuid(); + + if (target.mode === 'sceneInstance') { + return !!( + persistentUuid && + target.instancePersistentUuid && + target.instancePersistentUuid === persistentUuid + ); + } + + if (!objectName || target.objectName !== objectName) { + return false; + } + + return target.mode === 'objectName' && !persistentUuid; +}; + +const findTrackForInstance = ( + tracks: Array, + instance: gdInitialInstance +): ?TimelineTrack => + tracks.find(track => doesTrackTargetInstance(track, instance)); + +const findTimelineKeyframePair = ( + keyframes: Array, + time: number +): ?{| + from: TimelineKeyframe, + to: TimelineKeyframe, + localT: number, +|} => { + if (!keyframes.length) return null; + if (keyframes.length === 1 || time <= keyframes[0].time) { + return { from: keyframes[0], to: keyframes[0], localT: 0 }; + } + + const lastKeyframe = keyframes[keyframes.length - 1]; + if (time >= lastKeyframe.time) { + return { from: lastKeyframe, to: lastKeyframe, localT: 1 }; + } + + let low = 0; + let high = keyframes.length - 2; + while (low <= high) { + const index = Math.floor((low + high) / 2); + const from = keyframes[index]; + const to = keyframes[index + 1]; + + if (time < from.time) { + high = index - 1; + continue; + } + + if (time > to.time) { + low = index + 1; + continue; + } + + const duration = to.time - from.time; + return { + from, + to, + localT: duration > 0 ? clamp01((time - from.time) / duration) : 1, + }; + } + + return null; +}; + +const interpolateTimelineValue = ( + propertyTrack: TimelinePropertyTrack, + time: number +): TimelineValue | null => { + const keyframes = getSamplingTimelineKeyframes(propertyTrack); + if (!keyframes.length) return null; + + const pair = findTimelineKeyframePair(keyframes, time); + if (!pair) return null; + + const { from, to, localT } = pair; + if ( + from === to || + isDiscreteTimelineProperty(propertyTrack.property) || + propertyTrack.interpolationMode === 'step' || + propertyTrack.interpolationMode === 'hold' || + propertyTrack.interpolationMode === 'keyframe' + ) { + return localT >= 1 ? to.value : from.value; + } + + const easedT = evaluateTimelineCurve(getKeyframeCurve(from), localT); + const fromValue = from.value; + const toValue = to.value; + if (typeof fromValue === 'object' && typeof toValue === 'object') { + const x = fromValue.x + (toValue.x - fromValue.x) * easedT; + const y = fromValue.y + (toValue.y - fromValue.y) * easedT; + if (typeof fromValue.z === 'number' || typeof toValue.z === 'number') { + const fromZ = getFiniteNumber(fromValue.z, 0); + const toZ = getFiniteNumber(toValue.z, fromZ); + return createTimelinePointValue(x, y, fromZ + (toZ - fromZ) * easedT); + } + return createTimelinePointValue(x, y); + } + if (typeof fromValue === 'number' && typeof toValue === 'number') { + return fromValue + (toValue - fromValue) * easedT; + } + return fromValue; +}; + +const getPropertyValueFromInitialInstance = ( + instance: gdInitialInstance, + propertyName: string, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): TimelineValue | null => { + const instanceAsAny = (instance: any); + if (propertyName === 'position') { + return normalizeTimelineValueForProperty(propertyName, { + x: instance.getX(), + y: instance.getY(), + }); + } + if (propertyName === 'x' || propertyName === 'X') { + return getFiniteNumber(instance.getX(), 0); + } + if (propertyName === 'y' || propertyName === 'Y') { + return getFiniteNumber(instance.getY(), 0); + } + if (propertyName === 'z' || propertyName === 'Z') { + return normalizeTimelineValueForProperty('z', instance.getZ()); + } + if (propertyName === 'angle' || propertyName === 'Angle') { + return normalizeTimelineValueForProperty('angle', instance.getAngle()); + } + if (propertyName === 'rotationX' || propertyName === 'RotationX') { + return normalizeTimelineValueForProperty( + 'rotationX', + instance.getRotationX() + ); + } + if (propertyName === 'rotationY' || propertyName === 'RotationY') { + return normalizeTimelineValueForProperty( + 'rotationY', + instance.getRotationY() + ); + } + if (propertyName === 'rotationZ' || propertyName === 'RotationZ') { + return normalizeTimelineValueForProperty('angle', instance.getAngle()); + } + if (propertyName === 'scale' || propertyName === 'Scale') { + return getInstanceScale(instance, onGetInstanceSize, objectType); + } + if (propertyName === 'scaleX' || propertyName === 'ScaleX') { + return normalizeTimelineScaleAxisValue( + 'scaleX', + getInstanceScale(instance, onGetInstanceSize, objectType).x + ); + } + if (propertyName === 'scaleY' || propertyName === 'ScaleY') { + return normalizeTimelineScaleAxisValue( + 'scaleY', + getInstanceScale(instance, onGetInstanceSize, objectType).y + ); + } + if (propertyName === 'scaleZ' || propertyName === 'ScaleZ') { + return normalizeTimelineScaleAxisValue( + 'scaleZ', + getInstanceScale(instance, onGetInstanceSize, objectType).z || 1 + ); + } + if (propertyName === 'width' || propertyName === 'Width') { + return getInstanceWidth(instance, onGetInstanceSize, objectType); + } + if (propertyName === 'height' || propertyName === 'Height') { + return getInstanceHeight(instance, onGetInstanceSize, objectType); + } + if (propertyName === 'depth' || propertyName === 'Depth') { + return getInstanceDepth(instance, onGetInstanceSize, objectType); + } + if ( + (propertyName === 'opacity' || propertyName === 'Opacity') && + typeof instanceAsAny.getOpacity === 'function' + ) { + return normalizeTimelineValueForProperty( + 'opacity', + instanceAsAny.getOpacity() + ); + } + if ( + propertyName === 'animationIndex' && + typeof instanceAsAny.getRawDoubleProperty === 'function' + ) { + return normalizeTimelineValueForProperty( + 'animationIndex', + instanceAsAny.getRawDoubleProperty('animation') + ); + } + if ( + propertyName === 'animationFrame' && + typeof instanceAsAny.getRawDoubleProperty === 'function' + ) { + return normalizeTimelineValueForProperty( + 'animationFrame', + instanceAsAny.getRawDoubleProperty('animationFrame') + ); + } + + return null; +}; + +const getCurrentTimelineValueIdentity = ( + instance: gdInitialInstance, + propertyName: string, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): ?string => { + const value = getPropertyValueFromInitialInstance( + instance, + propertyName, + onGetInstanceSize, + objectType + ); + return value === null ? null : getTimelineValueIdentity(value); +}; + +const isTimelineScaleProperty = (propertyName: string): boolean => + propertyName === 'scale' || + propertyName === 'Scale' || + propertyName === 'scaleX' || + propertyName === 'ScaleX' || + propertyName === 'scaleY' || + propertyName === 'ScaleY' || + propertyName === 'scaleZ' || + propertyName === 'ScaleZ'; + +const applyValueToInitialInstance = ( + instance: gdInitialInstance, + propertyName: string, + value: TimelineValue, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string, + scaleBaseDimensions?: ?TimelineScaleBaseDimensions +) => { + const instanceAsAny = (instance: any); + if (propertyName === 'position' && typeof value === 'object') { + const normalizedValue = normalizeTimelineValueForProperty( + propertyName, + value + ); + if (typeof normalizedValue === 'object') { + instance.setX(normalizedValue.x); + instance.setY(normalizedValue.y); + if (typeof normalizedValue.z === 'number') { + instance.setZ(normalizedValue.z); + } + } + } else if ( + (propertyName === 'x' || propertyName === 'X') && + typeof value === 'number' + ) { + instance.setX(getFiniteNumber(value, instance.getX())); + } else if ( + (propertyName === 'y' || propertyName === 'Y') && + typeof value === 'number' + ) { + instance.setY(getFiniteNumber(value, instance.getY())); + } else if ( + (propertyName === 'z' || propertyName === 'Z') && + typeof value === 'number' + ) { + instance.setZ(normalizeTimelineNumberValueForProperty('z', value)); + } else if ( + (propertyName === 'angle' || propertyName === 'Angle') && + typeof value === 'number' + ) { + instance.setAngle(normalizeTimelineNumberValueForProperty('angle', value)); + } else if ( + (propertyName === 'rotationX' || propertyName === 'RotationX') && + typeof value === 'number' + ) { + instance.setRotationX( + normalizeTimelineNumberValueForProperty('rotationX', value) + ); + } else if ( + (propertyName === 'rotationY' || propertyName === 'RotationY') && + typeof value === 'number' + ) { + instance.setRotationY( + normalizeTimelineNumberValueForProperty('rotationY', value) + ); + } else if ( + (propertyName === 'rotationZ' || propertyName === 'RotationZ') && + typeof value === 'number' + ) { + instance.setAngle(normalizeTimelineNumberValueForProperty('angle', value)); + } else if ( + (propertyName === 'scale' || propertyName === 'Scale') && + typeof value === 'object' + ) { + const normalizedValue = normalizeTimelineValueForProperty( + 'scale', + value, + getInstanceScale(instance, onGetInstanceSize, objectType) + ); + if (typeof normalizedValue !== 'object') return; + + if ( + isSpine43ObjectType(objectType) && + areTimelineScaleValuesIdentity(normalizedValue) + ) { + instance.setHasCustomSize(false); + return; + } + + const baseWidth = + scaleBaseDimensions && scaleBaseDimensions.width > 0 + ? scaleBaseDimensions.width + : getInstanceScaleBaseWidth(instance, onGetInstanceSize, objectType); + const baseHeight = + scaleBaseDimensions && scaleBaseDimensions.height > 0 + ? scaleBaseDimensions.height + : getInstanceScaleBaseHeight(instance, onGetInstanceSize, objectType); + instance.setHasCustomSize(true); + instance.setCustomWidth( + Math.max(minimumTimelineDimension, baseWidth * normalizedValue.x) + ); + instance.setCustomHeight( + Math.max(minimumTimelineDimension, baseHeight * normalizedValue.y) + ); + const normalizedScaleZ = normalizedValue.z; + if (typeof normalizedScaleZ === 'number') { + const baseDepth = + scaleBaseDimensions && scaleBaseDimensions.depth > 0 + ? scaleBaseDimensions.depth + : getInstanceScaleBaseDepth(instance, onGetInstanceSize, objectType); + instance.setHasCustomDepth(true); + instance.setCustomDepth( + Math.max(minimumTimelineDimension, baseDepth * normalizedScaleZ) + ); + } + } else if ( + (propertyName === 'scaleZ' || propertyName === 'ScaleZ') && + typeof value === 'number' + ) { + const currentScale = getInstanceScale( + instance, + onGetInstanceSize, + objectType + ); + const nextScaleZ = normalizeTimelineScaleAxisValue( + 'scaleZ', + value, + currentScale.z || 1 + ); + const baseDepth = + scaleBaseDimensions && scaleBaseDimensions.depth > 0 + ? scaleBaseDimensions.depth + : getInstanceScaleBaseDepth(instance, onGetInstanceSize, objectType); + instance.setHasCustomDepth(true); + instance.setCustomDepth( + Math.max(minimumTimelineDimension, baseDepth * nextScaleZ) + ); + } else if ( + (propertyName === 'scaleX' || + propertyName === 'ScaleX' || + propertyName === 'scaleY' || + propertyName === 'ScaleY') && + typeof value === 'number' + ) { + const currentScale = getInstanceScale( + instance, + onGetInstanceSize, + objectType + ); + const nextScale = createTimelinePointValue( + propertyName === 'scaleX' || propertyName === 'ScaleX' + ? normalizeTimelineScaleAxisValue('scaleX', value, currentScale.x) + : currentScale.x, + propertyName === 'scaleY' || propertyName === 'ScaleY' + ? normalizeTimelineScaleAxisValue('scaleY', value, currentScale.y) + : currentScale.y, + typeof currentScale.z === 'number' ? currentScale.z : undefined + ); + + if ( + isSpine43ObjectType(objectType) && + areTimelineScaleValuesIdentity(nextScale) + ) { + instance.setHasCustomSize(false); + return; + } + + const baseWidth = + scaleBaseDimensions && scaleBaseDimensions.width > 0 + ? scaleBaseDimensions.width + : getInstanceScaleBaseWidth(instance, onGetInstanceSize, objectType); + const baseHeight = + scaleBaseDimensions && scaleBaseDimensions.height > 0 + ? scaleBaseDimensions.height + : getInstanceScaleBaseHeight(instance, onGetInstanceSize, objectType); + instance.setHasCustomSize(true); + instance.setCustomWidth( + Math.max(minimumTimelineDimension, baseWidth * nextScale.x) + ); + instance.setCustomHeight( + Math.max(minimumTimelineDimension, baseHeight * nextScale.y) + ); + } else if ( + (propertyName === 'width' || propertyName === 'Width') && + typeof value === 'number' + ) { + instance.setHasCustomSize(true); + instance.setCustomWidth( + normalizeTimelineNumberValueForProperty( + 'width', + value, + getInstanceWidth(instance, onGetInstanceSize, objectType) + ) + ); + } else if ( + (propertyName === 'height' || propertyName === 'Height') && + typeof value === 'number' + ) { + instance.setHasCustomSize(true); + instance.setCustomHeight( + normalizeTimelineNumberValueForProperty( + 'height', + value, + getInstanceHeight(instance, onGetInstanceSize, objectType) + ) + ); + } else if ( + (propertyName === 'depth' || propertyName === 'Depth') && + typeof value === 'number' + ) { + instance.setHasCustomDepth(true); + instance.setCustomDepth( + normalizeTimelineNumberValueForProperty( + 'depth', + value, + getInstanceDepth(instance, onGetInstanceSize, objectType) + ) + ); + } else if ( + (propertyName === 'opacity' || propertyName === 'Opacity') && + typeof value === 'number' && + typeof instanceAsAny.setOpacity === 'function' + ) { + instanceAsAny.setOpacity( + normalizeTimelineNumberValueForProperty('opacity', value) + ); + } else if ( + propertyName === 'animationIndex' && + typeof value === 'number' && + typeof instanceAsAny.setRawDoubleProperty === 'function' + ) { + instanceAsAny.setRawDoubleProperty( + 'animation', + normalizeTimelineNumberValueForProperty('animationIndex', value) + ); + } else if ( + propertyName === 'animationFrame' && + typeof value === 'number' && + typeof instanceAsAny.setRawDoubleProperty === 'function' + ) { + instanceAsAny.setRawDoubleProperty( + 'animationFrame', + normalizeTimelineNumberValueForProperty('animationFrame', value) + ); + } +}; + +const normalizeValueForInitialInstance = ( + instance: gdInitialInstance, + propertyName: string, + value: TimelineValue, + onGetInstanceSize?: ?(gdInitialInstance) => [number, number, number], + objectType?: ?string +): TimelineValue => { + if ( + (propertyName === 'scale' || propertyName === 'Scale') && + typeof value === 'object' + ) { + return normalizeTimelineValueForProperty( + 'scale', + value, + getInstanceScale(instance, onGetInstanceSize, objectType) + ); + } + + if ( + (propertyName === 'scaleX' || + propertyName === 'ScaleX' || + propertyName === 'scaleY' || + propertyName === 'ScaleY' || + propertyName === 'scaleZ' || + propertyName === 'ScaleZ') && + typeof value === 'number' + ) { + const currentScale = getInstanceScale( + instance, + onGetInstanceSize, + objectType + ); + return propertyName === 'scaleZ' || propertyName === 'ScaleZ' + ? normalizeTimelineScaleAxisValue('scaleZ', value, currentScale.z || 1) + : propertyName === 'scaleY' || propertyName === 'ScaleY' + ? normalizeTimelineScaleAxisValue('scaleY', value, currentScale.y) + : normalizeTimelineScaleAxisValue('scaleX', value, currentScale.x); + } + + if ( + (propertyName === 'opacity' || propertyName === 'Opacity') && + typeof value === 'number' + ) { + return normalizeTimelineValueForProperty('opacity', value); + } + + if ( + (propertyName === 'width' || + propertyName === 'Width' || + propertyName === 'height' || + propertyName === 'Height' || + propertyName === 'depth' || + propertyName === 'Depth' || + propertyName === 'currentTime') && + typeof value === 'number' + ) { + const canonicalProperty = + propertyName === 'Width' + ? 'width' + : propertyName === 'Height' + ? 'height' + : propertyName === 'Depth' + ? 'depth' + : propertyName; + const fallback = + canonicalProperty === 'width' + ? getInstanceWidth(instance, onGetInstanceSize, objectType) + : canonicalProperty === 'height' + ? getInstanceHeight(instance, onGetInstanceSize, objectType) + : canonicalProperty === 'depth' + ? getInstanceDepth(instance, onGetInstanceSize, objectType) + : undefined; + return normalizeTimelineValueForProperty( + canonicalProperty, + value, + fallback + ); + } + + if ( + (propertyName === 'animationIndex' || propertyName === 'animationFrame') && + typeof value === 'number' + ) { + return normalizeTimelineValueForProperty(propertyName, value); + } + + if ( + (propertyName === 'animationSpeedScale' || + propertyName === 'characterSize' || + propertyName === 'lineHeight') && + typeof value === 'number' + ) { + return normalizeTimelineValueForProperty(propertyName, value); + } + + if (propertyName === 'volume' && typeof value === 'number') { + return normalizeTimelineValueForProperty(propertyName, value); + } + + if (propertyName === 'playbackSpeed' && typeof value === 'number') { + return normalizeTimelineValueForProperty(propertyName, value); + } + + return normalizeTimelineValueForProperty(propertyName, value); +}; + +const styles = { + root: { + width: '100%', + flex: 1, + height: '100%', + minHeight: 0, + minWidth: 0, + display: 'flex', + flexDirection: 'column', + background: '#252525', + color: '#D9D9D9', + overflow: 'hidden', + }, + topBar: { + minHeight: 78, + flexShrink: 0, + display: 'flex', + alignItems: 'stretch', + background: '#3B3B3B', + borderBottom: '1px solid #171717', + }, + modeTabs: { + width: leftPanelWidth, + borderRight: '1px solid #1B1B1B', + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', + }, + tabRow: { + display: 'flex', + alignItems: 'center', + height: 32, + paddingLeft: 8, + gap: 4, + }, + tab: { + display: 'inline-flex', + alignItems: 'center', + gap: 6, + height: 28, + padding: '0 10px', + borderRadius: 3, + color: '#EAEAEA', + background: '#2D2D2D', + border: '1px solid #161616', + fontSize: 12, + }, + tabInactive: { + background: '#464646', + color: '#BEBEBE', + }, + toolCluster: { + display: 'flex', + alignItems: 'center', + gap: 4, + padding: '6px 8px', + }, + mainTools: { + flex: 1, + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + gap: 8, + minWidth: 0, + padding: '0 8px', + flexWrap: 'wrap', + }, + transport: { + display: 'flex', + alignItems: 'center', + gap: 2, + paddingRight: 10, + borderRight: '1px solid #222', + }, + formStrip: { + display: 'flex', + alignItems: 'center', + gap: 8, + rowGap: 4, + minWidth: 0, + paddingLeft: 10, + flexWrap: 'wrap', + }, + fieldLabel: { + color: '#BDBDBD', + fontSize: 11, + lineHeight: '14px', + }, + center: { + flex: 1, + minHeight: 0, + display: 'flex', + }, + leftTracks: { + width: leftPanelWidth, + flexShrink: 0, + background: '#303030', + borderRight: '1px solid #151515', + display: 'flex', + flexDirection: 'column', + minHeight: 0, + }, + rightCurves: { + width: rightPanelWidth, + flexShrink: 0, + background: '#303030', + borderLeft: '1px solid #151515', + display: 'flex', + flexDirection: 'column', + }, + timelineArea: { + flex: 1, + minWidth: 0, + display: 'flex', + flexDirection: 'column', + background: '#1F1F1F', + overflow: 'hidden', + }, + ruler: { + height: rulerHeight, + flexShrink: 0, + position: 'relative', + borderBottom: '1px solid #111', + cursor: 'pointer', + overflow: 'hidden', + background: + 'repeating-linear-gradient(to right, #3A3A3A 0, #3A3A3A 1px, transparent 1px, transparent 32px)', + }, + frameGuide: { + position: 'absolute', + top: 0, + bottom: 0, + width: 1, + background: '#2E2E2E', + pointerEvents: 'none', + }, + frameLabel: { + position: 'absolute', + top: 10, + transform: 'translateX(-50%)', + color: '#8E8E8E', + fontSize: 12, + pointerEvents: 'none', + }, + playhead: { + position: 'absolute', + top: 0, + bottom: 0, + width: 1, + background: '#19DDEB', + pointerEvents: 'none', + zIndex: 4, + }, + playheadHead: { + position: 'absolute', + top: 0, + left: -5, + width: 0, + height: 0, + borderLeft: '5px solid transparent', + borderRight: '5px solid transparent', + borderTop: '8px solid #19DDEB', + }, + rows: { + flex: 1, + minHeight: 0, + overflowX: 'hidden', + overflowY: 'auto', + position: 'relative', + }, + trackHeaderSpacer: { + height: rulerHeight, + borderBottom: '1px solid #111', + background: '#2C2C2C', + }, + trackLabelsRows: { + flex: 1, + minHeight: 0, + overflowX: 'hidden', + overflowY: 'auto', + scrollbarWidth: 'thin', + }, + trackLabel: { + height: rowHeight, + borderBottom: '1px solid #171717', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + gap: 8, + padding: '0 8px', + color: '#D5D5D5', + fontSize: 12, + }, + trackLabelSelected: { + background: 'rgba(25, 221, 235, 0.11)', + boxShadow: 'inset 3px 0 0 #19DDEB', + }, + trackMainLabel: { + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + lineHeight: '16px', + }, + propertyName: { + color: '#9A9A9A', + fontSize: 11, + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + lineHeight: '14px', + }, + propertyRowName: { + color: '#D5D5D5', + fontSize: 12, + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + lineHeight: '16px', + }, + mutedTrackTools: { + width: 128, + flexShrink: 0, + }, + trackLane: { + height: rowHeight, + position: 'relative', + borderBottom: '1px solid #171717', + cursor: 'pointer', + overflow: 'hidden', + background: + 'repeating-linear-gradient(to right, #2C2C2C 0, #2C2C2C 1px, transparent 1px, transparent 64px)', + }, + centerLine: { + position: 'absolute', + left: 0, + right: 0, + top: '50%', + height: 1, + background: '#0F0F0F', + }, + trackGraphSvg: { + position: 'absolute', + left: timelineEdgeHitPadding, + right: timelineEdgeHitPadding, + top: 0, + bottom: 0, + width: `calc(100% - ${timelineEdgeHitPadding * 2}px)`, + height: '100%', + overflow: 'visible', + pointerEvents: 'none', + zIndex: 1, + }, + trackGraphPath: { + fill: 'none', + strokeWidth: 1.7, + strokeLinecap: 'round', + strokeLinejoin: 'round', + opacity: 0.88, + filter: 'drop-shadow(0 0 2px rgba(24,168,255,0.35))', + }, + keyframe: { + position: 'absolute', + top: '50%', + width: 10, + height: 10, + marginLeft: -5, + marginTop: -5, + transform: 'rotate(45deg)', + borderRadius: 2, + background: '#E9E9E9', + border: '1px solid #111', + boxSizing: 'border-box', + zIndex: 3, + }, + selectionBox: { + position: 'absolute', + border: '1px solid #19DDEB', + background: 'rgba(25, 221, 235, 0.16)', + pointerEvents: 'none', + zIndex: 5, + }, + marker: { + position: 'absolute', + top: 33, + width: 8, + height: 8, + marginLeft: -4, + transform: 'rotate(45deg)', + background: '#FF8A3D', + border: '1px solid #141414', + }, + bottomBar: { + height: 28, + flexShrink: 0, + display: 'flex', + alignItems: 'center', + background: '#303030', + borderTop: '1px solid #151515', + }, + scrollRail: { + height: 10, + borderRadius: 8, + margin: '0 16px', + flex: 1, + background: '#171717', + border: '1px solid #666', + position: 'relative', + cursor: 'pointer', + }, + scrollThumb: { + position: 'absolute', + top: 2, + bottom: 2, + borderRadius: 5, + background: '#D8D8D8', + cursor: 'grab', + }, + curveHeader: { + height: 40, + flexShrink: 0, + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + padding: '0 8px', + borderBottom: '1px solid #171717', + background: '#383838', + color: '#E3E3E3', + fontSize: 12, + }, + curveViewport: { + margin: 8, + flex: 1, + minHeight: 0, + borderRadius: 3, + border: '1px solid #181818', + background: + 'linear-gradient(to right, rgba(255,255,255,0.08) 1px, transparent 1px), linear-gradient(to bottom, rgba(255,255,255,0.08) 1px, transparent 1px), #555', + backgroundSize: '28px 28px', + position: 'relative', + }, + curveLine: { + position: 'absolute', + left: 24, + right: 24, + top: '45%', + height: 2, + background: '#3AC7F2', + transform: 'skewY(-12deg)', + boxShadow: '0 0 5px rgba(58,199,242,0.45)', + }, + curveSvg: { + position: 'absolute', + inset: 0, + width: '100%', + height: '100%', + overflow: 'visible', + }, + curveHandleLine: { + stroke: '#8DEBFF', + strokeWidth: 1, + opacity: 0.75, + }, + curveHandle: { + fill: '#FFCF4A', + stroke: '#111', + strokeWidth: 1, + cursor: 'grab', + }, + curveHint: { + position: 'absolute', + left: 8, + right: 8, + bottom: 6, + color: '#C7C7C7', + fontSize: 11, + textAlign: 'center', + pointerEvents: 'none', + }, + curveFooter: { + display: 'flex', + gap: 4, + padding: 8, + borderTop: '1px solid #171717', + }, + compactButton: { + minWidth: 34, + height: 28, + padding: '0 8px', + color: '#E9E9E9', + background: '#4B4B4B', + border: '1px solid #202020', + }, + toolbarIconButtonTooltipWrapper: { + display: 'inline-flex', + }, +}; + +const ToolbarIconButton = ({ + title, + onClick, + children, + color, + disabled, +}: {| + title: React.Node, + onClick: () => void, + children: React.Node, + color?: string, + disabled?: boolean, +|}) => { + const button = ( + + {children} + + ); + + return ( + + {button} + + ); +}; + +export default function TimelineEditor({ + project, + timelineIdOrName, + setToolbar, + unsavedChanges, + objectsContainer, + globalObjectsContainer, + initialInstances, + selectedInstances = [], + onGetInstanceSize, + onInstancesModified, + onPreviewInstancesModified, +}: Props): React.Node { + const gdevelopTheme = React.useContext(GDevelopThemeContext); + const [playheadTime, setPlayheadTime] = React.useState(0); + const [isPlayingPreview, setIsPlayingPreview] = React.useState(false); + const [selectedPropertyTrackId, setSelectedPropertyTrackId] = React.useState( + '' + ); + const [selectedKeyframeIds, setSelectedKeyframeIds] = React.useState< + Array + >([]); + const [, setTimelineListRevision] = React.useState(0); + const [ + observedSelectionSignature, + setObservedSelectionSignature, + ] = React.useState(() => getSelectedInstancesSignature(selectedInstances)); + const [ + observedInitialInstancesSignature, + setObservedInitialInstancesSignature, + ] = React.useState(() => getInitialInstancesSignature(initialInstances)); + const [newTimelineName, setNewTimelineName] = React.useState(() => + makeTimelineName(project, 'Timeline') + ); + const [timeline, setTimeline] = React.useState(() => { + const existingTimeline = + timelineIdOrName && getTimelineByIdOrName(project, timelineIdOrName); + return ( + existingTimeline || + createDefaultTimeline(makeTimelineName(project, 'Timeline')) + ); + }); + const [timelineZoom, setTimelineZoom] = React.useState(minTimelineZoom); + const [viewStartFrame, setViewStartFrame] = React.useState(0); + const [isPanningTimeline, setIsPanningTimeline] = React.useState(false); + const [isScrubbingTimeline, setIsScrubbingTimeline] = React.useState(false); + const [isDraggingScrollThumb, setIsDraggingScrollThumb] = React.useState( + false + ); + const [isSelectingKeyframes, setIsSelectingKeyframes] = React.useState(false); + const [isDraggingKeyframes, setIsDraggingKeyframes] = React.useState(false); + const [draggingCurveHandle, setDraggingCurveHandle] = React.useState(null); + const [selectionBox, setSelectionBox] = React.useState, + |}>(null); + const timelineRootRef = React.useRef(null); + const timelineAreaRef = React.useRef(null); + const curveViewportRef = React.useRef(null); + const leftTrackRowsRef = React.useRef(null); + const timelineRowsRef = React.useRef(null); + const scrollRailRef = React.useRef(null); + const scrubStateRef = React.useRef(null); + const panStateRef = React.useRef(null); + const scrollThumbDragStateRef = React.useRef(null); + const marqueeSelectionStateRef = React.useRef, + hasMoved: boolean, + multiTrack: boolean, + |}>(null); + const keyframeDragStateRef = React.useRef(null); + const suppressedAutoImportUuidsRef = React.useRef>(new Set()); + const lastAppliedPreviewValuesRef = React.useRef>( + new Map() + ); + const firstFrameAutoRecordSnapshotRef = React.useRef>( + new Map() + ); + const scaleBaseDimensionsRef = React.useRef< + Map + >(new Map()); + const keyframeClipboardRef = React.useRef(null); + const initialInstancesIndex = React.useMemo( + () => getInitialInstancesIndex(initialInstances), + // Rebuild the index when the mutable GDevelop container content changes. + // eslint-disable-next-line react-hooks/exhaustive-deps + [initialInstances, observedInitialInstancesSignature] + ); + const notifyPreviewInstancesModified = + onPreviewInstancesModified || onInstancesModified; + const playheadTimeRef = React.useRef(playheadTime); + const timelineRef = React.useRef(timeline); + const timelineViewportMetricsRef = React.useRef<{| + safeViewStartFrame: number, + visibleFrames: number, + maxViewStartFrame: number, + |}>({ + safeViewStartFrame: 0, + visibleFrames: 1, + maxViewStartFrame: 0, + }); + const initialInstancesIndexRef = React.useRef( + initialInstancesIndex + ); + const notifyPreviewInstancesModifiedRef = React.useRef( + notifyPreviewInstancesModified + ); + const onGetInstanceSizeRef = React.useRef(onGetInstanceSize || null); + const selectedKeyframeIdsSet = React.useMemo( + () => new Set(selectedKeyframeIds), + [selectedKeyframeIds] + ); + const selectedInstanceIds = React.useMemo( + () => { + const instanceIds = new Set(); + for (const instance of selectedInstances) { + instanceIds.add(getInstanceIdentity(instance)); + } + return instanceIds; + }, + // The editor selection can mutate in place, so the observed signature is + // used to force this memo to refresh when the visible selection changes. + // eslint-disable-next-line react-hooks/exhaustive-deps + [selectedInstances, observedSelectionSignature] + ); + const visibleTimelineTracks = React.useMemo( + () => { + if (!selectedInstanceIds.size) { + return timeline.tracks; + } + + return timeline.tracks.filter(track => { + const trackInstances = findInitialInstancesForTrack( + track, + initialInstancesIndex + ); + if (trackInstances.length) { + return trackInstances.some(instance => + selectedInstanceIds.has(getInstanceIdentity(instance)) + ); + } + + return selectedInstances.some(instance => + doesTrackTargetInstance(track, instance) + ); + }); + }, + [ + initialInstancesIndex, + selectedInstanceIds, + selectedInstances, + timeline.tracks, + ] + ); + const propertyTrackRows: Array<{| + track: TimelineTrack, + propertyTrack: TimelinePropertyTrack, + propertyTrackIndex: number, + |}> = React.useMemo( + () => { + const rows = []; + visibleTimelineTracks.forEach(track => { + track.propertyTracks.forEach((propertyTrack, propertyTrackIndex) => { + rows.push({ track, propertyTrack, propertyTrackIndex }); + }); + }); + return rows; + }, + [visibleTimelineTracks] + ); + const updateTimelinePlayheadDom = React.useCallback((time: number) => { + const root = timelineRootRef.current; + if (!root) return; + + const { + safeViewStartFrame, + visibleFrames, + } = timelineViewportMetricsRef.current; + root.style.setProperty( + '--timeline-playhead-left', + getFrameLeftCss(timeToFrame(time), safeViewStartFrame, visibleFrames) + ); + }, []); + + React.useEffect( + () => { + setToolbar(null); + return () => setToolbar(null); + }, + [setToolbar] + ); + + React.useEffect( + () => { + const visiblePropertyTrackIds = new Set( + propertyTrackRows.map(row => row.propertyTrack.id) + ); + if ( + selectedPropertyTrackId && + visiblePropertyTrackIds.has(selectedPropertyTrackId) + ) { + return; + } + + const nextPropertyTrackId = propertyTrackRows.length + ? propertyTrackRows[0].propertyTrack.id + : ''; + if (selectedPropertyTrackId !== nextPropertyTrackId) { + setSelectedPropertyTrackId(nextPropertyTrackId); + } + if (selectedKeyframeIds.length) { + setSelectedKeyframeIds([]); + } + if (selectionBox) { + setSelectionBox(null); + } + }, + [ + propertyTrackRows, + selectedKeyframeIds.length, + selectedPropertyTrackId, + selectionBox, + ] + ); + + React.useEffect( + () => { + const updateObservedSelectionSignature = () => { + const nextSelectionSignature = getSelectedInstancesSignature( + selectedInstances + ); + setObservedSelectionSignature(previousSelectionSignature => + previousSelectionSignature === nextSelectionSignature + ? previousSelectionSignature + : nextSelectionSignature + ); + }; + + updateObservedSelectionSignature(); + const intervalId = setInterval(updateObservedSelectionSignature, 150); + return () => clearInterval(intervalId); + }, + [selectedInstances] + ); + + React.useEffect( + () => { + const updateObservedInitialInstancesSignature = () => { + const nextInitialInstancesSignature = getInitialInstancesSignature( + initialInstances + ); + setObservedInitialInstancesSignature(previousSignature => + previousSignature === nextInitialInstancesSignature + ? previousSignature + : nextInitialInstancesSignature + ); + }; + + updateObservedInitialInstancesSignature(); + const intervalId = setInterval( + updateObservedInitialInstancesSignature, + 200 + ); + return () => clearInterval(intervalId); + }, + [initialInstances] + ); + + React.useEffect( + () => { + const existingTimeline = + timelineIdOrName && getTimelineByIdOrName(project, timelineIdOrName); + if (existingTimeline) { + timelineRef.current = existingTimeline; + setTimeline(existingTimeline); + setPlayheadTime(time => { + const nextTime = clamp(time, 0, existingTimeline.duration); + playheadTimeRef.current = nextTime; + return nextTime; + }); + } + }, + [project, timelineIdOrName] + ); + + React.useEffect( + () => { + suppressedAutoImportUuidsRef.current.clear(); + lastAppliedPreviewValuesRef.current.clear(); + }, + [timeline.id] + ); + + React.useEffect( + () => { + if (!isPlayingPreview) { + playheadTimeRef.current = playheadTime; + } + }, + [isPlayingPreview, playheadTime] + ); + + React.useEffect( + () => { + timelineRef.current = timeline; + }, + [timeline] + ); + + React.useEffect( + () => { + initialInstancesIndexRef.current = initialInstancesIndex; + scaleBaseDimensionsRef.current.clear(); + lastAppliedPreviewValuesRef.current.clear(); + }, + [initialInstancesIndex] + ); + + React.useEffect( + () => { + notifyPreviewInstancesModifiedRef.current = notifyPreviewInstancesModified; + }, + [notifyPreviewInstancesModified] + ); + + React.useEffect( + () => { + onGetInstanceSizeRef.current = onGetInstanceSize || null; + }, + [onGetInstanceSize] + ); + + const applyTimelinePreviewAtTime = React.useCallback( + (time: number, checkCurrentValue?: boolean = false) => { + const notifyPreviewInstancesModified = + notifyPreviewInstancesModifiedRef.current; + const onGetInstanceSize = onGetInstanceSizeRef.current; + const timeline = timelineRef.current; + const initialInstancesIndex = initialInstancesIndexRef.current; + if (!(timeline.tracks || []).length) return; + + const modifiedInstances = new Set(); + for (const track of timeline.tracks || []) { + const instances = findInitialInstancesForTrack( + track, + initialInstancesIndex + ); + if (!instances.length) continue; + const trackObjectType = + getTrackObjectType( + project, + objectsContainer, + globalObjectsContainer, + track + ) || + getObjectTypeByName( + project, + objectsContainer, + globalObjectsContainer, + instances[0].getObjectName() + ); + + for (const propertyTrack of track.propertyTracks || []) { + const value = interpolateTimelineValue(propertyTrack, time); + if (value === null) continue; + + for (const instance of instances) { + let scaleBaseDimensions = null; + if (isTimelineScaleProperty(propertyTrack.property)) { + const scaleBaseDimensionsKey = getScaleBaseDimensionsKey( + instance, + trackObjectType + ); + scaleBaseDimensions = scaleBaseDimensionsRef.current.get( + scaleBaseDimensionsKey + ); + if (!scaleBaseDimensions) { + scaleBaseDimensions = getInstanceTimelineScaleBaseDimensions( + instance, + onGetInstanceSize, + trackObjectType + ); + scaleBaseDimensionsRef.current.set( + scaleBaseDimensionsKey, + scaleBaseDimensions + ); + } + } + + const normalizedValue = normalizeValueForInitialInstance( + instance, + propertyTrack.property, + value, + onGetInstanceSize, + trackObjectType + ); + const previewValueKey = `${getInstanceIdentity(instance)}:${ + propertyTrack.property + }`; + const previewValueIdentity = getTimelineValueIdentity( + normalizedValue + ); + if ( + lastAppliedPreviewValuesRef.current.get(previewValueKey) === + previewValueIdentity + ) { + if (!checkCurrentValue) { + continue; + } + const currentValueIdentity = getCurrentTimelineValueIdentity( + instance, + propertyTrack.property, + onGetInstanceSize, + trackObjectType + ); + if (currentValueIdentity === previewValueIdentity) { + continue; + } + } + + applyValueToInitialInstance( + instance, + propertyTrack.property, + normalizedValue, + onGetInstanceSize, + trackObjectType, + scaleBaseDimensions + ); + lastAppliedPreviewValuesRef.current.set( + previewValueKey, + previewValueIdentity + ); + modifiedInstances.add(instance); + } + } + } + + if (modifiedInstances.size) { + if (notifyPreviewInstancesModified) { + notifyPreviewInstancesModified(Array.from(modifiedInstances)); + } + } + }, + [globalObjectsContainer, objectsContainer, project] + ); + + React.useEffect( + () => { + if (!timelineIdOrName) { + upsertTimeline(project, timeline); + setTimelineListRevision(revision => revision + 1); + } + }, + // Run once when opening a fallback editor without a project-tree item. + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + + React.useEffect( + () => { + if (!isPlayingPreview) { + return; + } + + let frameId: AnimationFrameID; + let lastFrameTime: number | null = null; + let lastStateSyncTime = 0; + const tick = (frameTime: number) => { + const currentTimeline = timelineRef.current; + const duration = Math.max(0, currentTimeline.duration || 0); + const speed = currentTimeline.speed || 1; + const previousFrameTime = lastFrameTime; + const deltaTime = + typeof previousFrameTime === 'number' + ? Math.min((frameTime - previousFrameTime) / 1000, 0.1) * speed + : 1 / frameRate; + lastFrameTime = frameTime; + + let nextTime = playheadTimeRef.current + deltaTime; + let shouldStop = false; + if (duration <= 0) { + nextTime = 0; + shouldStop = true; + } else if (nextTime >= duration) { + if (currentTimeline.loop) { + nextTime = nextTime % duration; + } else { + nextTime = duration; + shouldStop = true; + } + } else if (nextTime < 0) { + nextTime = 0; + shouldStop = true; + } + + playheadTimeRef.current = nextTime; + applyTimelinePreviewAtTime(nextTime); + updateTimelinePlayheadDom(nextTime); + + const nextFrame = timeToFrame(nextTime); + const viewportMetrics = timelineViewportMetricsRef.current; + if ( + nextFrame < viewportMetrics.safeViewStartFrame || + nextFrame > + viewportMetrics.safeViewStartFrame + viewportMetrics.visibleFrames + ) { + const nextViewStartFrame = clamp( + nextFrame - viewportMetrics.visibleFrames * 0.5, + 0, + viewportMetrics.maxViewStartFrame + ); + timelineViewportMetricsRef.current = { + ...viewportMetrics, + safeViewStartFrame: nextViewStartFrame, + }; + setViewStartFrame(nextViewStartFrame); + updateTimelinePlayheadDom(nextTime); + } + + if ( + shouldStop || + frameTime - lastStateSyncTime >= timelinePlaybackStateSyncIntervalMs + ) { + lastStateSyncTime = frameTime; + setPlayheadTime(nextTime); + } + + if (shouldStop) { + setIsPlayingPreview(false); + return; + } + + frameId = requestAnimationFrame(tick); + }; + + frameId = requestAnimationFrame(tick); + return () => cancelAnimationFrame(frameId); + }, + [applyTimelinePreviewAtTime, isPlayingPreview, updateTimelinePlayheadDom] + ); + + React.useEffect( + () => { + if (isPlayingPreview) return; + const currentTime = playheadTimeRef.current; + if (currentTime !== playheadTime) { + setPlayheadTime(currentTime); + return; + } + applyTimelinePreviewAtTime(currentTime, true); + }, + [applyTimelinePreviewAtTime, isPlayingPreview, playheadTime] + ); + + const saveTimeline = React.useCallback( + (nextTimeline: TimelineData) => { + timelineRef.current = nextTimeline; + setTimeline(nextTimeline); + upsertTimeline(project, nextTimeline); + setTimelineListRevision(revision => revision + 1); + if (unsavedChanges) { + unsavedChanges.triggerUnsavedChanges(); + } + }, + [project, unsavedChanges] + ); + + const setTimelinePlayheadTime = React.useCallback( + (nextTimeOrUpdater: number | (number => number)) => { + setPlayheadTime(currentTime => { + const rawNextTime = + typeof nextTimeOrUpdater === 'function' + ? nextTimeOrUpdater(currentTime) + : nextTimeOrUpdater; + const duration = Math.max(0, timelineRef.current.duration || 0); + const nextTime = clamp(rawNextTime, 0, duration); + playheadTimeRef.current = nextTime; + return nextTime; + }); + }, + [] + ); + + const startTimelinePreview = React.useCallback( + () => { + const currentTimeline = timelineRef.current; + const duration = Math.max(0, currentTimeline.duration || 0); + if (duration <= 0) { + setTimelinePlayheadTime(0); + setIsPlayingPreview(false); + return; + } + + setTimelinePlayheadTime(time => + time >= duration || time < 0 ? 0 : clamp(time, 0, duration) + ); + setIsPlayingPreview(true); + }, + [setTimelinePlayheadTime] + ); + + const updateTimeline = React.useCallback( + (changes: Partial) => { + const nextTimeline = { + ...timeline, + ...changes, + }; + saveTimeline(nextTimeline); + }, + [saveTimeline, timeline] + ); + + const timelineChoices = getTimelines(project); + + const objectNames = React.useMemo( + () => getObjectNames(project, objectsContainer, globalObjectsContainer), + [project, objectsContainer, globalObjectsContainer] + ); + + const createTimeline = React.useCallback( + () => { + const timelineName = makeTimelineName( + project, + newTimelineName.trim() || 'Timeline' + ); + const nextTimeline = { + ...createDefaultTimeline(timelineName), + id: createTimelineId(), + }; + timelineRef.current = nextTimeline; + playheadTimeRef.current = 0; + setTimeline(nextTimeline); + setTimelinePlayheadTime(0); + setSelectedPropertyTrackId(''); + setSelectedKeyframeIds([]); + upsertTimeline(project, nextTimeline); + setTimelineListRevision(revision => revision + 1); + setNewTimelineName(makeTimelineName(project, 'Timeline')); + if (unsavedChanges) { + unsavedChanges.triggerUnsavedChanges(); + } + }, + [newTimelineName, project, setTimelinePlayheadTime, unsavedChanges] + ); + + const selectTimeline = React.useCallback( + (timelineId: string) => { + const selectedTimeline = getTimelineByIdOrName(project, timelineId); + if (!selectedTimeline) return; + + timelineRef.current = selectedTimeline; + setTimeline(selectedTimeline); + setTimelinePlayheadTime(time => + clamp(time, 0, selectedTimeline.duration) + ); + setSelectedPropertyTrackId(''); + setSelectedKeyframeIds([]); + }, + [project, setTimelinePlayheadTime] + ); + + const writeKeyframesAtPlayhead = React.useCallback( + (writeMode: 'selected' | 'all' | 'changed'): boolean => { + const currentTimeline = timelineRef.current; + let workingTracks = currentTimeline.tracks; + const uniqueSelectedInstancesById = new Map(); + for (const instance of selectedInstances) { + uniqueSelectedInstancesById.set( + getInstanceIdentity(instance), + instance + ); + } + + const selectedInstance = + Array.from(uniqueSelectedInstancesById.values())[0] || null; + const selectedPropertyOwnerTrack = workingTracks.find(track => + track.propertyTracks.some( + propertyTrack => propertyTrack.id === selectedPropertyTrackId + ) + ); + const selectedPropertyNameForWrite = selectedPropertyOwnerTrack + ? ( + selectedPropertyOwnerTrack.propertyTracks.find( + propertyTrack => propertyTrack.id === selectedPropertyTrackId + ) || selectedPropertyOwnerTrack.propertyTracks[0] + ).property + : null; + let selectedTrack: ?TimelineTrack = + selectedPropertyOwnerTrack || workingTracks[0] || null; + let targetInitialInstance: ?gdInitialInstance = null; + let createdTrackForSelectedInstance = false; + + if (selectedInstance) { + targetInitialInstance = selectedInstance; + let trackForSelectedInstance = findTrackForInstance( + workingTracks, + selectedInstance + ); + if (!trackForSelectedInstance) { + trackForSelectedInstance = createTrackForInstance( + selectedInstance, + getObjectTypeByName( + project, + objectsContainer, + globalObjectsContainer, + selectedInstance.getObjectName() + ), + onGetInstanceSize + ); + workingTracks = [...workingTracks, trackForSelectedInstance]; + createdTrackForSelectedInstance = true; + } + selectedTrack = + selectedPropertyOwnerTrack && + doesTrackTargetInstance(selectedPropertyOwnerTrack, selectedInstance) + ? selectedPropertyOwnerTrack + : trackForSelectedInstance; + } + + if (!selectedTrack || !selectedTrack.propertyTracks.length) return false; + + if (!targetInitialInstance) { + targetInitialInstance = + findInitialInstancesForTrack( + selectedTrack, + initialInstancesIndex + )[0] || null; + } + + const targetObjectType = targetInitialInstance + ? getObjectTypeByName( + project, + objectsContainer, + globalObjectsContainer, + targetInitialInstance.getObjectName() + ) || + getTrackObjectType( + project, + objectsContainer, + globalObjectsContainer, + selectedTrack + ) + : getTrackObjectType( + project, + objectsContainer, + globalObjectsContainer, + selectedTrack + ); + + if (targetInitialInstance) { + const ensuredTrackUpdate = ensureSupportedPropertyTracks( + selectedTrack, + targetInitialInstance, + targetObjectType, + onGetInstanceSize + ); + if (ensuredTrackUpdate.changed) { + const ensuredTrackId = ensuredTrackUpdate.track.id; + selectedTrack = ensuredTrackUpdate.track; + workingTracks = workingTracks.map(track => + track.id === ensuredTrackId ? ensuredTrackUpdate.track : track + ); + } + } + + const selectedTrackForWrite = selectedTrack; + if (!selectedTrackForWrite.propertyTracks.length) return false; + + const selectedPropertyTrack = selectedTrackForWrite.propertyTracks.find( + propertyTrack => propertyTrack.id === selectedPropertyTrackId + ); + const selectedPropertyByName = selectedPropertyNameForWrite + ? selectedTrackForWrite.propertyTracks.find( + propertyTrack => + propertyTrack.property === selectedPropertyNameForWrite + ) + : null; + const targetPropertyTrack = + selectedPropertyTrack || + selectedPropertyByName || + selectedTrackForWrite.propertyTracks[0]; + if (!targetPropertyTrack) return false; + + const keyframeTime = clamp( + snapTimeToTimelineFrame(playheadTimeRef.current), + 0, + currentTimeline.duration + ); + + const getReferenceValue = ( + propertyTrack: TimelinePropertyTrack + ): TimelineValue => { + const interpolatedTimelineValue = interpolateTimelineValue( + propertyTrack, + keyframeTime + ); + return interpolatedTimelineValue !== null + ? interpolatedTimelineValue + : getKeyframeValueAtTime(propertyTrack, keyframeTime); + }; + + const getCurrentValue = ( + propertyTrack: TimelinePropertyTrack + ): TimelineValue => { + const fallbackValue = getReferenceValue(propertyTrack); + const currentInstanceValue = targetInitialInstance + ? getPropertyValueFromInitialInstance( + targetInitialInstance, + propertyTrack.property, + onGetInstanceSize, + targetObjectType + ) + : null; + const rawValue = + currentInstanceValue !== null ? currentInstanceValue : fallbackValue; + return targetInitialInstance + ? normalizeValueForInitialInstance( + targetInitialInstance, + propertyTrack.property, + rawValue, + onGetInstanceSize, + targetObjectType + ) + : rawValue; + }; + + const propertyTracksToWrite = + writeMode === 'selected' + ? [targetPropertyTrack] + : writeMode === 'changed' + ? createdTrackForSelectedInstance + ? selectedTrackForWrite.propertyTracks + : targetInitialInstance + ? selectedTrackForWrite.propertyTracks.filter(propertyTrack => { + const currentValue = getCurrentValue(propertyTrack); + const referenceValue = getReferenceValue(propertyTrack); + return ( + getTimelineValueIdentity(currentValue) !== + getTimelineValueIdentity(referenceValue) + ); + }) + : [] + : selectedTrackForWrite.propertyTracks; + + if (!propertyTracksToWrite.length) return false; + + const propertyTracksToWriteIds = new Set( + propertyTracksToWrite.map(propertyTrack => propertyTrack.id) + ); + const nextSelectedKeyframeIds = []; + let firstWrittenPropertyTrackId = propertyTracksToWrite[0].id; + + const nextTimeline = { + ...currentTimeline, + tracks: workingTracks.map(track => + track.id === selectedTrackForWrite.id + ? { + ...track, + propertyTracks: track.propertyTracks.map(propertyTrack => + propertyTracksToWriteIds.has(propertyTrack.id) + ? (() => { + const isDiscreteKeyframe = isDiscreteTimelineProperty( + propertyTrack.property + ); + const newKeyframe: TimelineKeyframe = { + id: createKeyframeId(), + time: keyframeTime, + value: getCurrentValue(propertyTrack), + ease: isDiscreteKeyframe ? 'hold' : 'linear', + curve: isDiscreteKeyframe ? 'stepped' : 'linear', + }; + const upsertResult = upsertPropertyTrackKeyframe( + propertyTrack, + newKeyframe + ); + nextSelectedKeyframeIds.push(upsertResult.keyframeId); + if (!firstWrittenPropertyTrackId) { + firstWrittenPropertyTrackId = propertyTrack.id; + } + return upsertResult.propertyTrack; + })() + : propertyTrack + ), + } + : track + ), + }; + + saveTimeline(nextTimeline); + setSelectedPropertyTrackId(firstWrittenPropertyTrackId); + setSelectionBox(null); + setSelectedKeyframeIds(Array.from(new Set(nextSelectedKeyframeIds))); + applyTimelinePreviewAtTime(keyframeTime, true); + return true; + }, + [ + applyTimelinePreviewAtTime, + globalObjectsContainer, + initialInstancesIndex, + objectsContainer, + project, + saveTimeline, + onGetInstanceSize, + selectedPropertyTrackId, + selectedInstances, + ] + ); + + const addKeyframeAtPlayhead = React.useCallback( + () => { + writeKeyframesAtPlayhead('selected'); + }, + [writeKeyframesAtPlayhead] + ); + + const addAllTrackKeyframesAtPlayhead = React.useCallback( + () => { + writeKeyframesAtPlayhead('all'); + }, + [writeKeyframesAtPlayhead] + ); + + const addChangedTrackKeyframesAtPlayhead = React.useCallback( + () => { + writeKeyframesAtPlayhead('changed'); + }, + [writeKeyframesAtPlayhead] + ); + + const deleteSelectedKeyframe = React.useCallback( + () => { + if (!selectedKeyframeIds.length) return; + + const selectedKeyframes = new Set(selectedKeyframeIds); + const nextTimeline = { + ...timeline, + tracks: timeline.tracks.map(track => ({ + ...track, + propertyTracks: track.propertyTracks.map(propertyTrack => ({ + ...propertyTrack, + keyframes: propertyTrack.keyframes.filter( + keyframe => !selectedKeyframes.has(keyframe.id) + ), + })), + })), + }; + setSelectedKeyframeIds([]); + setSelectionBox(null); + saveTimeline(nextTimeline); + }, + [saveTimeline, selectedKeyframeIds, timeline] + ); + + const copySelectedKeyframes = React.useCallback( + (): boolean => { + if (!selectedKeyframeIds.length) return false; + + const selectedKeyframes = new Set(selectedKeyframeIds); + const copiedItems = []; + let firstCopiedTime = Infinity; + timeline.tracks.forEach(track => { + track.propertyTracks.forEach(propertyTrack => { + getSamplingTimelineKeyframes(propertyTrack).forEach(keyframe => { + if (!selectedKeyframes.has(keyframe.id)) return; + + firstCopiedTime = Math.min(firstCopiedTime, keyframe.time); + copiedItems.push({ + propertyTrackId: propertyTrack.id, + property: propertyTrack.property, + time: keyframe.time, + value: cloneTimelineValue(keyframe.value), + ease: keyframe.ease, + curve: keyframe.curve, + }); + }); + }); + }); + + if (!copiedItems.length || firstCopiedTime === Infinity) return false; + + keyframeClipboardRef.current = { + items: copiedItems.map(item => ({ + propertyTrackId: item.propertyTrackId, + property: item.property, + timeOffset: snapTimeToTimelineFrame(item.time - firstCopiedTime), + value: cloneTimelineValue(item.value), + ease: item.ease, + curve: item.curve, + })), + }; + return true; + }, + [selectedKeyframeIds, timeline.tracks] + ); + + const pasteKeyframesAtPlayhead = React.useCallback( + (): boolean => { + const clipboard = keyframeClipboardRef.current; + if (!clipboard || !clipboard.items.length) return false; + + const currentTimeline = timelineRef.current; + const pasteStartTime = clamp( + snapTimeToTimelineFrame(playheadTimeRef.current), + 0, + currentTimeline.duration + ); + const pastedKeyframeIds = []; + let didPaste = false; + const nextTimeline = { + ...currentTimeline, + tracks: currentTimeline.tracks.map(track => ({ + ...track, + propertyTracks: track.propertyTracks.map(propertyTrack => { + let nextPropertyTrack = propertyTrack; + for (const item of clipboard.items) { + if (item.propertyTrackId !== propertyTrack.id) continue; + + const upsertResult = upsertPropertyTrackKeyframe( + nextPropertyTrack, + { + id: createKeyframeId(), + time: clamp( + pasteStartTime + item.timeOffset, + 0, + currentTimeline.duration + ), + value: cloneTimelineValue(item.value), + ease: item.ease, + curve: item.curve, + } + ); + nextPropertyTrack = upsertResult.propertyTrack; + pastedKeyframeIds.push(upsertResult.keyframeId); + didPaste = true; + } + return nextPropertyTrack; + }), + })), + }; + + if (!didPaste) return false; + + saveTimeline(nextTimeline); + setSelectedKeyframeIds(Array.from(new Set(pastedKeyframeIds))); + setSelectionBox(null); + applyTimelinePreviewAtTime(playheadTimeRef.current, true); + return true; + }, + [applyTimelinePreviewAtTime, saveTimeline] + ); + + const cutSelectedKeyframes = React.useCallback( + (): boolean => { + if (!copySelectedKeyframes()) return false; + + deleteSelectedKeyframe(); + return true; + }, + [copySelectedKeyframes, deleteSelectedKeyframe] + ); + + React.useEffect( + () => { + const onKeyDown = (event: any) => { + if (isTextInputElement(event.target)) return; + + const key = String(event.key || '').toLowerCase(); + const hasPrimaryModifier = event.ctrlKey || event.metaKey; + if (hasPrimaryModifier && key === 'c') { + if (copySelectedKeyframes()) { + event.preventDefault(); + } + return; + } + + if (hasPrimaryModifier && key === 'v') { + if (pasteKeyframesAtPlayhead()) { + event.preventDefault(); + } + return; + } + + if (hasPrimaryModifier && key === 'x') { + if (cutSelectedKeyframes()) { + event.preventDefault(); + } + return; + } + + if ( + !hasPrimaryModifier && + !event.altKey && + (key === 'delete' || key === 'backspace') + ) { + if (selectedKeyframeIds.length) { + event.preventDefault(); + deleteSelectedKeyframe(); + } + return; + } + + if ( + !hasPrimaryModifier && + !event.altKey && + (key === 'k' || key === 's') + ) { + event.preventDefault(); + addKeyframeAtPlayhead(); + return; + } + + if (!hasPrimaryModifier && !event.altKey && key === 'n') { + event.preventDefault(); + addAllTrackKeyframesAtPlayhead(); + return; + } + + if (!hasPrimaryModifier && !event.altKey && key === 'm') { + event.preventDefault(); + addChangedTrackKeyframesAtPlayhead(); + } + }; + + window.addEventListener('keydown', onKeyDown); + return () => window.removeEventListener('keydown', onKeyDown); + }, + [ + addAllTrackKeyframesAtPlayhead, + addChangedTrackKeyframesAtPlayhead, + addKeyframeAtPlayhead, + copySelectedKeyframes, + cutSelectedKeyframes, + deleteSelectedKeyframe, + pasteKeyframesAtPlayhead, + selectedKeyframeIds.length, + ] + ); + + const updateTrackTarget = React.useCallback( + (trackId: string, objectName: string) => { + const objectType = getObjectTypeByName( + project, + objectsContainer, + globalObjectsContainer, + objectName + ); + const firstInstance = (initialInstancesIndex.byObjectName.get( + objectName + ) || [])[0]; + + saveTimeline({ + ...timeline, + tracks: timeline.tracks.map(track => + track.id === trackId + ? { + ...track, + target: { + mode: 'objectName', + objectName, + selection: 'first', + }, + propertyTracks: createPropertyTracksForObject( + objectType, + firstInstance, + track.propertyTracks, + onGetInstanceSize + ), + } + : track + ), + }); + setSelectedPropertyTrackId(''); + setSelectedKeyframeIds([]); + }, + [ + globalObjectsContainer, + initialInstancesIndex, + objectsContainer, + onGetInstanceSize, + project, + saveTimeline, + timeline, + ] + ); + + const deleteTrack = React.useCallback( + (trackId: string) => { + const trackToDelete = timeline.tracks.find(track => track.id === trackId); + if (!trackToDelete) return; + + const deletedPropertyTrackIds = new Set( + trackToDelete.propertyTracks.map(propertyTrack => propertyTrack.id) + ); + const deletedKeyframeIds = new Set(); + trackToDelete.propertyTracks.forEach(propertyTrack => { + propertyTrack.keyframes.forEach(keyframe => { + deletedKeyframeIds.add(keyframe.id); + }); + }); + if (trackToDelete.target.instancePersistentUuid) { + suppressedAutoImportUuidsRef.current.add( + trackToDelete.target.instancePersistentUuid + ); + } + if (deletedPropertyTrackIds.has(selectedPropertyTrackId)) { + setSelectedPropertyTrackId(''); + } + setSelectedKeyframeIds(keyframeIds => + keyframeIds.filter(keyframeId => !deletedKeyframeIds.has(keyframeId)) + ); + + saveTimeline({ + ...timeline, + tracks: timeline.tracks.filter(track => track.id !== trackId), + }); + }, + [saveTimeline, selectedPropertyTrackId, timeline] + ); + + React.useEffect( + () => { + const uniqueSelectedInstancesByUuid = new Map< + string, + gdInitialInstance + >(); + for (const instance of selectedInstances) { + if ( + !isInitialInstanceAvailable( + instance, + initialInstancesIndex, + !!initialInstances + ) + ) { + continue; + } + uniqueSelectedInstancesByUuid.set( + getInstanceIdentity(instance), + instance + ); + } + const uniqueSelectedInstances = Array.from( + uniqueSelectedInstancesByUuid.values() + ); + const selectedInstanceUuids = new Set( + uniqueSelectedInstances.map(getInstanceIdentity) + ); + suppressedAutoImportUuidsRef.current.forEach(uuid => { + if (!selectedInstanceUuids.has(uuid)) { + suppressedAutoImportUuidsRef.current.delete(uuid); + } + }); + + const normalizedTracksUpdate = normalizeTimelineTracks(timeline.tracks); + const propertyTrackIdReplacement = normalizedTracksUpdate.propertyTrackIdReplacements.get( + selectedPropertyTrackId + ); + if (propertyTrackIdReplacement) { + setSelectedPropertyTrackId(propertyTrackIdReplacement); + } + let didNormalizeTracks = normalizedTracksUpdate.changed; + const normalizedTracksWithoutMissingInstances = normalizedTracksUpdate.tracks.filter( + track => { + const shouldKeepTrack = !isTrackTargetMissingSceneInstance( + track, + initialInstancesIndex, + !!initialInstances + ); + if (!shouldKeepTrack) { + didNormalizeTracks = true; + if (track.target.instancePersistentUuid) { + suppressedAutoImportUuidsRef.current.add( + track.target.instancePersistentUuid + ); + } + } + return shouldKeepTrack; + } + ); + const normalizedTracks = normalizedTracksWithoutMissingInstances.map( + track => { + const trackInstance = findInitialInstancesForTrack( + track, + initialInstancesIndex + )[0]; + const supportedTrackUpdate = ensureSupportedPropertyTracks( + track, + trackInstance, + getObjectTypeByName( + project, + objectsContainer, + globalObjectsContainer, + trackInstance + ? trackInstance.getObjectName() + : track.target.objectName + ) || + getTrackObjectType( + project, + objectsContainer, + globalObjectsContainer, + track + ), + onGetInstanceSize + ); + if (supportedTrackUpdate.changed) { + didNormalizeTracks = true; + } + return supportedTrackUpdate.track; + } + ); + const keptPropertyTrackIds = new Set(); + const keptKeyframeIds = new Set(); + normalizedTracks.forEach(track => { + track.propertyTracks.forEach(propertyTrack => { + keptPropertyTrackIds.add(propertyTrack.id); + keptKeyframeIds.add(getInitialKeyframeId(propertyTrack)); + propertyTrack.keyframes.forEach(keyframe => { + keptKeyframeIds.add(keyframe.id); + }); + }); + }); + if ( + selectedPropertyTrackId && + !keptPropertyTrackIds.has(selectedPropertyTrackId) + ) { + setSelectedPropertyTrackId(''); + } + setSelectedKeyframeIds(keyframeIds => + keyframeIds.filter(keyframeId => keptKeyframeIds.has(keyframeId)) + ); + + if (!uniqueSelectedInstances.length) { + setSelectedPropertyTrackId(''); + setSelectedKeyframeIds([]); + if (didNormalizeTracks) { + saveTimeline({ + ...timeline, + tracks: normalizedTracks, + }); + } + return; + } + + const focusTrack = (track: ?TimelineTrack) => { + if (!track || !track.propertyTracks.length) return; + + setSelectedPropertyTrackId(currentPropertyTrackId => + track.propertyTracks.some( + propertyTrack => propertyTrack.id === currentPropertyTrackId + ) + ? currentPropertyTrackId + : track.propertyTracks[0].id + ); + }; + + let selectedTrack: ?TimelineTrack = null; + for (const instance of uniqueSelectedInstances) { + const track = findTrackForInstance(normalizedTracks, instance); + if (track) { + selectedTrack = track; + break; + } + } + + const selectedInstancesToAdd = uniqueSelectedInstances.filter( + instance => { + const instanceIdentity = getInstanceIdentity(instance); + return ( + !findTrackForInstance(normalizedTracks, instance) && + !suppressedAutoImportUuidsRef.current.has(instanceIdentity) + ); + } + ); + if (!selectedInstancesToAdd.length) { + focusTrack(selectedTrack); + if (didNormalizeTracks) { + saveTimeline({ + ...timeline, + tracks: normalizedTracks, + }); + } + return; + } + + const tracksToAdd = selectedInstancesToAdd.map(instance => + createTrackForInstance( + instance, + getObjectTypeByName( + project, + objectsContainer, + globalObjectsContainer, + instance.getObjectName() + ), + onGetInstanceSize + ) + ); + const tracks = + normalizedTracks.length === 1 && + !normalizedTracks[0].target.objectName && + !normalizedTracks[0].target.instancePersistentUuid + ? tracksToAdd + : [...normalizedTracks, ...tracksToAdd]; + + focusTrack(selectedTrack || tracksToAdd[0]); + + saveTimeline({ + ...timeline, + tracks, + }); + }, + [ + globalObjectsContainer, + initialInstances, + initialInstancesIndex, + objectsContainer, + observedSelectionSignature, + onGetInstanceSize, + project, + saveTimeline, + selectedInstances, + selectedPropertyTrackId, + timeline, + ] + ); + + const frameCount = getTimelineFrameCount(timeline); + const visibleFrames = Math.min( + frameCount, + Math.max(1, frameCount / timelineZoom) + ); + const maxViewStartFrame = Math.max(0, frameCount - visibleFrames); + const safeViewStartFrame = clamp(viewStartFrame, 0, maxViewStartFrame); + const playheadFrame = timeToFrame(playheadTime); + const playheadLeftCss = `var(--timeline-playhead-left, ${getFrameLeftCss( + playheadFrame, + safeViewStartFrame, + visibleFrames + )})`; + React.useEffect( + () => { + timelineViewportMetricsRef.current = { + safeViewStartFrame, + visibleFrames, + maxViewStartFrame, + }; + updateTimelinePlayheadDom(playheadTimeRef.current); + }, + [ + maxViewStartFrame, + safeViewStartFrame, + updateTimelinePlayheadDom, + visibleFrames, + ] + ); + React.useEffect( + () => { + updateTimelinePlayheadDom(playheadTime); + }, + [playheadTime, updateTimelinePlayheadDom] + ); + const frameLabels = React.useMemo( + () => { + const labels = []; + const labelStep = getFrameLabelStep(visibleFrames); + const firstVisibleFrame = Math.max( + 0, + Math.ceil(safeViewStartFrame / labelStep) * labelStep + ); + const lastVisibleFrame = Math.min( + frameCount, + safeViewStartFrame + visibleFrames + ); + + for ( + let frame = firstVisibleFrame; + frame <= lastVisibleFrame; + frame += labelStep + ) { + labels.push(frame); + } + + if (safeViewStartFrame === 0 && labels[0] !== 0) { + labels.unshift(0); + } + + return labels; + }, + [frameCount, safeViewStartFrame, visibleFrames] + ); + const selectedPropertyTrack = + propertyTrackRows + .map(row => row.propertyTrack) + .find(propertyTrack => propertyTrack.id === selectedPropertyTrackId) || + (propertyTrackRows[0] && propertyTrackRows[0].propertyTrack); + + React.useEffect( + () => { + firstFrameAutoRecordSnapshotRef.current.clear(); + }, + [observedSelectionSignature, playheadFrame, timeline.id] + ); + + React.useEffect( + () => { + if (isPlayingPreview || !selectedInstances.length) { + return; + } + + const sampleCurrentFrameValues = (allowSave: boolean) => { + const keyframeTime = clamp( + snapTimeToTimelineFrame(playheadTimeRef.current), + 0, + timelineRef.current.duration + ); + const keyframeFrame = timeToFrame(keyframeTime); + + const snapshot = firstFrameAutoRecordSnapshotRef.current; + const uniqueSelectedInstancesById = new Map< + string, + gdInitialInstance + >(); + for (const instance of selectedInstances) { + uniqueSelectedInstancesById.set( + getInstanceIdentity(instance), + instance + ); + } + + const currentTimeline = timelineRef.current; + let workingTracks = currentTimeline.tracks; + let didChange = false; + + for (const instance of uniqueSelectedInstancesById.values()) { + const instanceIdentity = getInstanceIdentity(instance); + const objectName = instance.getObjectName(); + const objectType = getObjectTypeByName( + project, + objectsContainer, + globalObjectsContainer, + objectName + ); + const properties = getTimelinePropertiesForObjectType(objectType); + let targetTrack = findTrackForInstance(workingTracks, instance); + + for (const property of properties) { + const currentValue = getPropertyValueFromInitialInstance( + instance, + property, + onGetInstanceSize, + objectType + ); + if (currentValue === null) continue; + + const normalizedValue = normalizeValueForInitialInstance( + instance, + property, + currentValue, + onGetInstanceSize, + objectType + ); + const currentIdentity = getTimelineValueIdentity(normalizedValue); + const snapshotKey = `${instanceIdentity}:${property}:${keyframeFrame}`; + const previewValueKey = `${instanceIdentity}:${property}`; + + if ( + lastAppliedPreviewValuesRef.current.get(previewValueKey) === + currentIdentity + ) { + snapshot.set(snapshotKey, currentIdentity); + continue; + } + + const existingPropertyTrack = targetTrack + ? targetTrack.propertyTracks.find( + propertyTrack => propertyTrack.property === property + ) + : null; + const storedIdentity = existingPropertyTrack + ? keyframeFrame === 0 + ? getTimelineValueIdentity( + getPropertyTrackInitialValue(existingPropertyTrack) + ) + : getTimelineValueIdentity( + interpolateTimelineValue( + existingPropertyTrack, + keyframeTime + ) + ) + : currentIdentity; + const previousIdentity = snapshot.get(snapshotKey); + const shouldRecord = + allowSave && + ((previousIdentity !== undefined && + previousIdentity !== currentIdentity) || + (previousIdentity === undefined && + storedIdentity !== currentIdentity)); + + snapshot.set(snapshotKey, currentIdentity); + if (!shouldRecord) { + continue; + } + + if (!targetTrack) { + targetTrack = createTrackForInstance( + instance, + objectType, + onGetInstanceSize + ); + workingTracks = [...workingTracks, targetTrack]; + } + + const trackId = targetTrack.id; + const targetTrackIndex = workingTracks.findIndex( + track => track.id === trackId + ); + if (targetTrackIndex === -1) continue; + + const trackToUpdate = workingTracks[targetTrackIndex]; + const hasPropertyTrack = trackToUpdate.propertyTracks.some( + propertyTrack => propertyTrack.property === property + ); + const propertyTracks = hasPropertyTrack + ? trackToUpdate.propertyTracks + : [ + ...trackToUpdate.propertyTracks, + createPropertyTrack(property, normalizedValue), + ]; + + const nextTrack = { + ...trackToUpdate, + propertyTracks: propertyTracks.map(propertyTrack => + propertyTrack.property === property + ? keyframeFrame === 0 + ? { + ...propertyTrack, + initialValue: cloneTimelineValue(normalizedValue), + keyframes: propertyTrack.keyframes.filter( + keyframe => timeToFrame(keyframe.time) !== 0 + ), + } + : upsertPropertyTrackKeyframe(propertyTrack, { + id: createKeyframeId(), + time: keyframeTime, + value: cloneTimelineValue(normalizedValue), + }).propertyTrack + : propertyTrack + ), + }; + workingTracks = [ + ...workingTracks.slice(0, targetTrackIndex), + nextTrack, + ...workingTracks.slice(targetTrackIndex + 1), + ]; + targetTrack = nextTrack; + didChange = true; + } + } + + if (didChange) { + saveTimeline({ + ...currentTimeline, + tracks: workingTracks, + }); + } + }; + + sampleCurrentFrameValues(false); + const intervalId = setInterval(() => sampleCurrentFrameValues(true), 120); + return () => clearInterval(intervalId); + }, + [ + globalObjectsContainer, + isPlayingPreview, + objectsContainer, + observedSelectionSignature, + onGetInstanceSize, + playheadFrame, + project, + saveTimeline, + selectedInstances, + ] + ); + + const curveEditableKeyframes = React.useMemo( + () => { + const selectedIds = new Set(selectedKeyframeIds); + if (!selectedIds.size) return ([]: Array); + + const outgoingKeyframes: Array = []; + const incomingFallbackKeyframes: Array = []; + timeline.tracks.forEach(track => { + track.propertyTracks.forEach(propertyTrack => { + const keyframes = getSamplingTimelineKeyframes(propertyTrack); + keyframes.forEach((keyframe, index) => { + if (!selectedIds.has(keyframe.id)) return; + + if ( + index < keyframes.length - 1 && + keyframes[index + 1].time > keyframe.time + ) { + outgoingKeyframes.push(keyframe); + } else if (index > 0) { + incomingFallbackKeyframes.push(keyframes[index - 1]); + } + }); + }); + }); + + const editableKeyframes = outgoingKeyframes.length + ? outgoingKeyframes + : incomingFallbackKeyframes; + const seenIds = new Set(); + return editableKeyframes.filter(keyframe => { + if (seenIds.has(keyframe.id)) return false; + seenIds.add(keyframe.id); + return true; + }); + }, + [selectedKeyframeIds, timeline.tracks] + ); + const curveEditableKeyframeIds = React.useMemo( + () => curveEditableKeyframes.map(keyframe => keyframe.id), + [curveEditableKeyframes] + ); + const selectedCurveDefinition = + curveEditableKeyframes.length && + curveEditableKeyframes.every( + keyframe => + getCurveModeId(getKeyframeCurve(keyframe)) === + getCurveModeId(getKeyframeCurve(curveEditableKeyframes[0])) + ) + ? getKeyframeCurve(curveEditableKeyframes[0]) + : curveEditableKeyframes.length + ? null + : selectedPropertyTrack && + getSamplingTimelineKeyframes(selectedPropertyTrack)[0] + ? getKeyframeCurve(getSamplingTimelineKeyframes(selectedPropertyTrack)[0]) + : 'linear'; + const selectedCurveModeId = + getCurveModeId(selectedCurveDefinition) || 'linear'; + const selectedCurveGraphPath = getCurveGraphPath(selectedCurveDefinition); + const selectedCurveControlPoints = getCubicBezierControlPoints( + selectedCurveDefinition + ); + const curvePresetOptions = React.useMemo( + () => [ + { id: 'stepped', label: Stepped, curve: 'stepped' }, + { id: 'linear', label: Linear, curve: 'linear' }, + { + id: 'bezier', + label: Bezier, + curve: { type: 'cubicBezier', x1: 0.42, y1: 0, x2: 0.58, y2: 1 }, + }, + ], + [] + ); + + const applyCurveToSelectedKeyframes = React.useCallback( + (curve: TimelineCurveDefinition, ease: any) => { + if (!curveEditableKeyframeIds.length) return; + + const selectedKeyframes = new Set(curveEditableKeyframeIds); + const nextTimeline = { + ...timeline, + tracks: timeline.tracks.map(track => ({ + ...track, + propertyTracks: track.propertyTracks.map(propertyTrack => { + const shouldUpdateInitial = selectedKeyframes.has( + getInitialKeyframeId(propertyTrack) + ); + return { + ...propertyTrack, + initialEase: shouldUpdateInitial + ? ease + : propertyTrack.initialEase, + initialCurve: shouldUpdateInitial + ? curve + : propertyTrack.initialCurve, + keyframes: propertyTrack.keyframes.map(keyframe => + selectedKeyframes.has(keyframe.id) + ? { + ...keyframe, + ease, + curve, + } + : keyframe + ), + }; + }), + })), + }; + lastAppliedPreviewValuesRef.current.clear(); + saveTimeline(nextTimeline); + applyTimelinePreviewAtTime(playheadTimeRef.current, true); + }, + [ + applyTimelinePreviewAtTime, + curveEditableKeyframeIds, + saveTimeline, + timeline, + ] + ); + + const applyCurvePreset = React.useCallback( + (curvePresetId: string) => { + if (!curveEditableKeyframeIds.length) return; + + const curvePreset = curvePresetOptions.find( + preset => preset.id === curvePresetId + ); + if (!curvePreset) return; + + applyCurveToSelectedKeyframes( + curvePreset.curve, + curvePresetId === 'stepped' ? 'hold' : curvePresetId + ); + }, + [ + applyCurveToSelectedKeyframes, + curveEditableKeyframeIds, + curvePresetOptions, + ] + ); + + React.useEffect( + () => { + if (!draggingCurveHandle) return; + + const onMouseMove = (event: any) => { + if (!curveViewportRef.current) return; + + const rect = curveViewportRef.current.getBoundingClientRect(); + const viewX = + ((event.clientX - rect.left) / Math.max(1, rect.width)) * 100; + const viewY = + ((event.clientY - rect.top) / Math.max(1, rect.height)) * 100; + const controlX = clamp01((viewX - 8) / 84); + const controlY = clamp01((82 - viewY) / 64); + const currentControlPoints = getCubicBezierControlPoints( + selectedCurveDefinition + ); + const nextCurve = + draggingCurveHandle === 'out' + ? { + type: 'cubicBezier', + ...currentControlPoints, + x1: controlX, + y1: controlY, + } + : { + type: 'cubicBezier', + ...currentControlPoints, + x2: controlX, + y2: controlY, + }; + + applyCurveToSelectedKeyframes(nextCurve, 'bezier'); + }; + const onMouseUp = () => { + setDraggingCurveHandle(null); + }; + + window.addEventListener('mousemove', onMouseMove); + window.addEventListener('mouseup', onMouseUp); + return () => { + window.removeEventListener('mousemove', onMouseMove); + window.removeEventListener('mouseup', onMouseUp); + }; + }, + [ + applyCurveToSelectedKeyframes, + draggingCurveHandle, + selectedCurveDefinition, + ] + ); + + React.useEffect( + () => { + if (!selectionBox) return; + if (isSelectingKeyframes) return; + if (selectedKeyframeIds.length <= 1) { + setSelectionBox(null); + return; + } + + const selectedKeyframesSet = new Set(selectedKeyframeIds); + if ( + !selectionBox.keyframeIds || + selectionBox.keyframeIds.some( + keyframeId => !selectedKeyframesSet.has(keyframeId) + ) + ) { + setSelectionBox(null); + } + }, + [isSelectingKeyframes, selectedKeyframeIds, selectionBox] + ); + + React.useEffect( + () => { + setViewStartFrame(startFrame => clamp(startFrame, 0, maxViewStartFrame)); + }, + [maxViewStartFrame] + ); + + React.useEffect( + () => { + if (!isPlayingPreview) return; + + if ( + playheadFrame < safeViewStartFrame || + playheadFrame > safeViewStartFrame + visibleFrames + ) { + setViewStartFrame( + clamp(playheadFrame - visibleFrames * 0.5, 0, maxViewStartFrame) + ); + } + }, + [ + isPlayingPreview, + maxViewStartFrame, + playheadFrame, + safeViewStartFrame, + visibleFrames, + ] + ); + + const setClampedViewStartFrame = React.useCallback( + (nextStartFrame: number) => { + setViewStartFrame(clamp(nextStartFrame, 0, maxViewStartFrame)); + }, + [maxViewStartFrame] + ); + + const setPlayheadFrame = React.useCallback( + (frame: number) => { + const nextFrame = Math.round(clamp(frame, 0, frameCount)); + setTimelinePlayheadTime(frameToTime(nextFrame, timeline)); + }, + [frameCount, setTimelinePlayheadTime, timeline] + ); + + const syncLeftTrackRowsScroll = React.useCallback((event: any) => { + if (!leftTrackRowsRef.current) return; + leftTrackRowsRef.current.scrollTop = event.currentTarget.scrollTop; + }, []); + + const syncTimelineRowsScrollFromLeft = React.useCallback((event: any) => { + if (!timelineRowsRef.current) return; + timelineRowsRef.current.scrollTop = event.currentTarget.scrollTop; + }, []); + + const onLeftTrackRowsWheel = React.useCallback((event: any) => { + const timelineRows = timelineRowsRef.current; + const leftTrackRows = leftTrackRowsRef.current; + if (!timelineRows || !leftTrackRows) return; + + event.preventDefault(); + timelineRows.scrollTop += event.deltaY; + if (event.deltaX) { + timelineRows.scrollLeft += event.deltaX; + } + leftTrackRows.scrollTop = timelineRows.scrollTop; + }, []); + + const getFrameFromClientX = React.useCallback( + (clientX: number, element: HTMLDivElement): number => { + const rect = element.getBoundingClientRect(); + const usableWidth = Math.max(1, rect.width - timelineEdgeHitPadding * 2); + const pointerRatio = clamp( + (clientX - rect.left - timelineEdgeHitPadding) / usableWidth, + 0, + 1 + ); + return safeViewStartFrame + pointerRatio * visibleFrames; + }, + [safeViewStartFrame, visibleFrames] + ); + + const beginTimelinePan = React.useCallback( + (clientX: number) => { + const timelineArea = timelineAreaRef.current; + if (!timelineArea) return; + + panStateRef.current = { + startClientX: clientX, + startFrame: safeViewStartFrame, + visibleFrames, + width: timelineArea.getBoundingClientRect().width, + }; + setIsPanningTimeline(true); + }, + [safeViewStartFrame, visibleFrames] + ); + + const onTimelineMouseDown = React.useCallback( + (event: SyntheticMouseEvent, propertyTrackId?: string) => { + if (event.button === 1) { + event.preventDefault(); + beginTimelinePan(event.clientX); + return; + } + + if (event.button !== 0) return; + + event.preventDefault(); + if (propertyTrackId) { + const multiTrack = event.shiftKey && !!timelineRowsRef.current; + const selectionElement = multiTrack + ? timelineRowsRef.current + : event.currentTarget; + if (!selectionElement) return; + + marqueeSelectionStateRef.current = { + startClientX: event.clientX, + startClientY: event.clientY, + element: selectionElement, + propertyTrackId, + additive: event.shiftKey || event.ctrlKey || event.metaKey, + baseSelectedKeyframeIds: selectedKeyframeIds, + hasMoved: false, + multiTrack, + }; + setSelectedPropertyTrackId(propertyTrackId); + setSelectionBox(null); + setIsSelectingKeyframes(true); + return; + } + + setPlayheadFrame(getFrameFromClientX(event.clientX, event.currentTarget)); + scrubStateRef.current = { + element: event.currentTarget, + propertyTrackId, + }; + setIsScrubbingTimeline(true); + }, + [ + beginTimelinePan, + getFrameFromClientX, + selectedKeyframeIds, + setPlayheadFrame, + ] + ); + + const onTimelineWheel = React.useCallback( + (event: SyntheticWheelEvent) => { + event.preventDefault(); + + const timelineArea = timelineAreaRef.current; + if (!timelineArea) return; + + const rect = timelineArea.getBoundingClientRect(); + const width = Math.max(1, rect.width); + + if (!event.ctrlKey) { + const delta = event.deltaX || event.deltaY; + setClampedViewStartFrame( + safeViewStartFrame + (delta / width) * visibleFrames + ); + return; + } + + const pointerRatio = clamp((event.clientX - rect.left) / width, 0, 1); + const frameUnderPointer = + safeViewStartFrame + pointerRatio * visibleFrames; + const zoomDelta = event.deltaY < 0 ? 1.15 : 1 / 1.15; + const nextZoom = clamp( + timelineZoom * zoomDelta, + minTimelineZoom, + maxTimelineZoom + ); + const nextVisibleFrames = Math.min( + frameCount, + Math.max(1, frameCount / nextZoom) + ); + const nextMaxViewStartFrame = Math.max(0, frameCount - nextVisibleFrames); + + setTimelineZoom(nextZoom); + setViewStartFrame( + clamp( + frameUnderPointer - pointerRatio * nextVisibleFrames, + 0, + nextMaxViewStartFrame + ) + ); + }, + [ + frameCount, + safeViewStartFrame, + setClampedViewStartFrame, + timelineZoom, + visibleFrames, + ] + ); + + const onScrollRailMouseDown = React.useCallback( + (event: SyntheticMouseEvent) => { + const scrollRail = scrollRailRef.current; + if (event.button !== 0 || !scrollRail) return; + + event.preventDefault(); + const rect = scrollRail.getBoundingClientRect(); + const pointerRatio = clamp( + (event.clientX - rect.left) / Math.max(1, rect.width), + 0, + 1 + ); + setClampedViewStartFrame(pointerRatio * frameCount - visibleFrames * 0.5); + }, + [frameCount, setClampedViewStartFrame, visibleFrames] + ); + + const onScrollThumbMouseDown = React.useCallback( + (event: SyntheticMouseEvent) => { + const scrollRail = scrollRailRef.current; + if (event.button !== 0 || !scrollRail) return; + + event.preventDefault(); + event.stopPropagation(); + scrollThumbDragStateRef.current = { + startClientX: event.clientX, + startFrame: safeViewStartFrame, + railWidth: scrollRail.getBoundingClientRect().width, + }; + setIsDraggingScrollThumb(true); + }, + [safeViewStartFrame] + ); + + const beginKeyframeDrag = React.useCallback( + ( + event: SyntheticMouseEvent, + propertyTrack: TimelinePropertyTrack, + keyframe: TimelineKeyframe, + nextSelectedKeyframeIds: Array, + draggedChannel?: TimelineValueChannel + ) => { + const laneElement = event.currentTarget.parentElement; + if (!laneElement) return; + + const selectedKeyframesSet = new Set(nextSelectedKeyframeIds); + const clickedChannel = + draggedChannel || + getNearestTimelineValueChannel( + propertyTrack, + keyframe, + event.clientY, + ((laneElement: any): HTMLDivElement) + ); + const snapshots: Array = []; + timeline.tracks.forEach(track => { + track.propertyTracks.forEach(trackPropertyTrack => { + getSamplingTimelineKeyframes(trackPropertyTrack).forEach( + trackKeyframe => { + if (!selectedKeyframesSet.has(trackKeyframe.id)) return; + + snapshots.push({ + keyframeId: trackKeyframe.id, + propertyTrackId: trackPropertyTrack.id, + property: trackPropertyTrack.property, + time: trackKeyframe.time, + value: trackKeyframe.value, + ease: trackKeyframe.ease, + curve: trackKeyframe.curve, + channel: + typeof trackKeyframe.value === 'object' + ? clickedChannel === 'value' + ? 'x' + : clickedChannel + : 'value', + valueRange: getPropertyTrackChannelRange( + trackPropertyTrack, + typeof trackKeyframe.value === 'object' + ? clickedChannel === 'value' + ? 'x' + : clickedChannel + : 'value' + ), + }); + } + ); + }); + }); + + keyframeDragStateRef.current = { + startClientX: event.clientX, + startClientY: event.clientY, + element: ((laneElement: any): HTMLDivElement), + timeline, + snapshots, + hasMoved: false, + }; + setIsDraggingKeyframes(true); + }, + [timeline] + ); + + React.useEffect( + () => { + if (!isPanningTimeline) return; + + const onMouseMove = (event: any) => { + const panState = panStateRef.current; + if (!panState) return; + + const deltaFrames = + ((panState.startClientX - event.clientX) / + Math.max(1, panState.width)) * + panState.visibleFrames; + setClampedViewStartFrame(panState.startFrame + deltaFrames); + }; + const onMouseUp = () => { + panStateRef.current = null; + setIsPanningTimeline(false); + }; + + window.addEventListener('mousemove', onMouseMove); + window.addEventListener('mouseup', onMouseUp); + return () => { + window.removeEventListener('mousemove', onMouseMove); + window.removeEventListener('mouseup', onMouseUp); + }; + }, + [isPanningTimeline, setClampedViewStartFrame] + ); + + React.useEffect( + () => { + if (!isDraggingKeyframes) return; + + const onMouseMove = (event: any) => { + const dragState = keyframeDragStateRef.current; + if (!dragState) return; + + const dragDistance = Math.hypot( + event.clientX - dragState.startClientX, + event.clientY - dragState.startClientY + ); + if (!dragState.hasMoved && dragDistance < 3) { + return; + } + dragState.hasMoved = true; + + const startFrame = getFrameFromClientX( + dragState.startClientX, + dragState.element + ); + const currentFrame = getFrameFromClientX( + event.clientX, + dragState.element + ); + const deltaTime = Math.round(currentFrame - startFrame) / frameRate; + const deltaPixelsY = event.clientY - dragState.startClientY; + const selectedKeyframes = new Set( + dragState.snapshots.map(snapshot => snapshot.keyframeId) + ); + const snapshotByKeyframeId = new Map( + dragState.snapshots.map(snapshot => [snapshot.keyframeId, snapshot]) + ); + + const nextTimeline = { + ...dragState.timeline, + tracks: dragState.timeline.tracks.map(track => ({ + ...track, + propertyTracks: track.propertyTracks.map(propertyTrack => { + const getDraggedValueDelta = ( + snapshot: KeyframeDragSnapshot + ): number => + (-(deltaPixelsY / Math.max(1, dragState.element.clientHeight)) * + 100 * + snapshot.valueRange.range) / + 72; + let nextPropertyTrack = propertyTrack; + const initialSnapshot = snapshotByKeyframeId.get( + getInitialKeyframeId(propertyTrack) + ); + + if (initialSnapshot) { + nextPropertyTrack = updatePropertyTrackInitialKeyframe( + nextPropertyTrack, + { + id: getInitialKeyframeId(propertyTrack), + time: 0, + value: offsetTimelineValueChannel( + initialSnapshot.property, + initialSnapshot.value, + initialSnapshot.channel, + getDraggedValueDelta(initialSnapshot) + ), + ease: initialSnapshot.ease, + curve: initialSnapshot.curve, + } + ); + } + + let draggedKeyframeAtStart: ?TimelineKeyframe = null; + const nextKeyframes = nextPropertyTrack.keyframes + .map(keyframe => { + if (!selectedKeyframes.has(keyframe.id)) return keyframe; + + const snapshot = snapshotByKeyframeId.get(keyframe.id); + if (!snapshot) return keyframe; + + const draggedKeyframe = { + ...keyframe, + time: snapTimeToTimelineFrame( + clamp( + snapshot.time + deltaTime, + 0, + dragState.timeline.duration + ) + ), + value: offsetTimelineValueChannel( + snapshot.property, + snapshot.value, + snapshot.channel, + getDraggedValueDelta(snapshot) + ), + }; + + if (timeToFrame(draggedKeyframe.time) === 0) { + draggedKeyframeAtStart = draggedKeyframe; + return null; + } + + return draggedKeyframe; + }) + .filter(Boolean) + .sort((a, b) => a.time - b.time); + + if (draggedKeyframeAtStart) { + return updatePropertyTrackInitialKeyframe( + { + ...nextPropertyTrack, + keyframes: ((nextKeyframes: any): Array), + }, + draggedKeyframeAtStart + ); + } + + return { + ...nextPropertyTrack, + keyframes: ((nextKeyframes: any): Array), + }; + }), + })), + }; + + saveTimeline(nextTimeline); + applyTimelinePreviewAtTime(playheadTimeRef.current, true); + }; + const onMouseUp = () => { + keyframeDragStateRef.current = null; + setIsDraggingKeyframes(false); + }; + + window.addEventListener('mousemove', onMouseMove); + window.addEventListener('mouseup', onMouseUp); + return () => { + window.removeEventListener('mousemove', onMouseMove); + window.removeEventListener('mouseup', onMouseUp); + }; + }, + [ + applyTimelinePreviewAtTime, + getFrameFromClientX, + isDraggingKeyframes, + saveTimeline, + ] + ); + + React.useEffect( + () => { + if (!isScrubbingTimeline) return; + + const onMouseMove = (event: any) => { + const scrubState = scrubStateRef.current; + if (!scrubState) return; + + setPlayheadFrame( + getFrameFromClientX(event.clientX, scrubState.element) + ); + if (scrubState.propertyTrackId) { + setSelectedPropertyTrackId(scrubState.propertyTrackId); + } + }; + const onMouseUp = () => { + scrubStateRef.current = null; + setIsScrubbingTimeline(false); + }; + + window.addEventListener('mousemove', onMouseMove); + window.addEventListener('mouseup', onMouseUp); + return () => { + window.removeEventListener('mousemove', onMouseMove); + window.removeEventListener('mouseup', onMouseUp); + }; + }, + [ + getFrameFromClientX, + isScrubbingTimeline, + setPlayheadFrame, + setSelectedPropertyTrackId, + ] + ); + + React.useEffect( + () => { + if (!isSelectingKeyframes) return; + + const onMouseMove = (event: any) => { + const marqueeState = marqueeSelectionStateRef.current; + if (!marqueeState) return; + + const dragDistance = Math.hypot( + event.clientX - marqueeState.startClientX, + event.clientY - marqueeState.startClientY + ); + if (!marqueeState.hasMoved && dragDistance < 4) { + return; + } + marqueeState.hasMoved = true; + + const rect = marqueeState.element.getBoundingClientRect(); + const startX = clamp( + marqueeState.startClientX - rect.left, + 0, + rect.width + ); + const startY = clamp( + marqueeState.startClientY - rect.top, + 0, + rect.height + ); + const currentX = clamp(event.clientX - rect.left, 0, rect.width); + const currentY = clamp(event.clientY - rect.top, 0, rect.height); + const boxTop = + Math.min(startY, currentY) + + (marqueeState.multiTrack ? marqueeState.element.scrollTop : 0); + setSelectionBox({ + propertyTrackId: marqueeState.multiTrack + ? undefined + : marqueeState.propertyTrackId, + isMultiTrack: marqueeState.multiTrack, + left: Math.min(startX, currentX), + top: boxTop, + width: Math.abs(currentX - startX), + height: Math.abs(currentY - startY), + keyframeIds: [], + }); + }; + const onMouseUp = (event: any) => { + const marqueeState = marqueeSelectionStateRef.current; + if (marqueeState) { + if (!marqueeState.hasMoved) { + setPlayheadFrame( + getFrameFromClientX(event.clientX, marqueeState.element) + ); + setSelectedPropertyTrackId(marqueeState.propertyTrackId); + if (!marqueeState.additive) { + setSelectedKeyframeIds([]); + setSelectionBox(null); + } + marqueeSelectionStateRef.current = null; + setIsSelectingKeyframes(false); + return; + } + + const startFrame = getFrameFromClientX( + marqueeState.startClientX, + marqueeState.element + ); + const endFrame = getFrameFromClientX( + event.clientX, + marqueeState.element + ); + const minFrame = Math.floor(Math.min(startFrame, endFrame)); + const maxFrame = Math.ceil(Math.max(startFrame, endFrame)); + const rect = marqueeState.element.getBoundingClientRect(); + const startX = clamp( + marqueeState.startClientX - rect.left, + 0, + rect.width + ); + const startY = clamp( + marqueeState.startClientY - rect.top, + 0, + rect.height + ); + const currentX = clamp(event.clientX - rect.left, 0, rect.width); + const currentY = clamp(event.clientY - rect.top, 0, rect.height); + const boxTop = + Math.min(startY, currentY) + + (marqueeState.multiTrack ? marqueeState.element.scrollTop : 0); + + const getSelectedIdsForPropertyTrack = ( + propertyTrack: TimelinePropertyTrack + ): Array => + getSamplingTimelineKeyframes(propertyTrack) + .filter(keyframe => { + const frame = timeToFrame(keyframe.time); + return frame >= minFrame && frame <= maxFrame; + }) + .map(keyframe => keyframe.id); + let selectedIds: Array = []; + let selectionPropertyTrackId: string = marqueeState.propertyTrackId; + + if (marqueeState.multiTrack) { + const minContentY = + Math.min(startY, currentY) + marqueeState.element.scrollTop; + const maxContentY = + Math.max(startY, currentY) + marqueeState.element.scrollTop; + let firstSelectedRowPropertyTrackId: ?string = null; + + propertyTrackRows.forEach((row, rowIndex) => { + const rowTop = rowIndex * rowHeight; + const rowBottom = rowTop + rowHeight; + if (rowBottom < minContentY || rowTop > maxContentY) { + return; + } + + if (!firstSelectedRowPropertyTrackId) { + firstSelectedRowPropertyTrackId = row.propertyTrack.id; + } + selectedIds = [ + ...selectedIds, + ...getSelectedIdsForPropertyTrack(row.propertyTrack), + ]; + }); + + if (firstSelectedRowPropertyTrackId) { + selectionPropertyTrackId = firstSelectedRowPropertyTrackId; + } + } else { + const propertyTrackRow = propertyTrackRows.find( + row => row.propertyTrack.id === marqueeState.propertyTrackId + ); + selectedIds = propertyTrackRow + ? getSelectedIdsForPropertyTrack(propertyTrackRow.propertyTrack) + : []; + } + + const uniqueSelectedIds = Array.from(new Set(selectedIds)); + const nextSelectedIds = marqueeState.additive + ? Array.from( + new Set([ + ...marqueeState.baseSelectedKeyframeIds, + ...uniqueSelectedIds, + ]) + ) + : uniqueSelectedIds; + + setSelectedKeyframeIds(nextSelectedIds); + setSelectedPropertyTrackId(selectionPropertyTrackId); + setSelectionBox( + nextSelectedIds.length > 1 + ? { + propertyTrackId: marqueeState.multiTrack + ? undefined + : marqueeState.propertyTrackId, + isMultiTrack: marqueeState.multiTrack, + left: Math.min(startX, currentX), + top: boxTop, + width: Math.abs(currentX - startX), + height: Math.abs(currentY - startY), + keyframeIds: nextSelectedIds, + } + : null + ); + } + + marqueeSelectionStateRef.current = null; + setIsSelectingKeyframes(false); + }; + + window.addEventListener('mousemove', onMouseMove); + window.addEventListener('mouseup', onMouseUp); + return () => { + window.removeEventListener('mousemove', onMouseMove); + window.removeEventListener('mouseup', onMouseUp); + }; + }, + [ + getFrameFromClientX, + isSelectingKeyframes, + propertyTrackRows, + setPlayheadFrame, + ] + ); + + React.useEffect( + () => { + if (!isDraggingScrollThumb) return; + + const onMouseMove = (event: any) => { + const dragState = scrollThumbDragStateRef.current; + if (!dragState) return; + + const deltaFrames = + ((event.clientX - dragState.startClientX) / + Math.max(1, dragState.railWidth)) * + frameCount; + setClampedViewStartFrame(dragState.startFrame + deltaFrames); + }; + const onMouseUp = () => { + scrollThumbDragStateRef.current = null; + setIsDraggingScrollThumb(false); + }; + + window.addEventListener('mousemove', onMouseMove); + window.addEventListener('mouseup', onMouseUp); + return () => { + window.removeEventListener('mousemove', onMouseMove); + window.removeEventListener('mouseup', onMouseUp); + }; + }, + [frameCount, isDraggingScrollThumb, setClampedViewStartFrame] + ); + + const scrollThumbWidthPercent = + frameCount === 0 ? 100 : clamp((visibleFrames / frameCount) * 100, 4, 100); + const scrollThumbLeftPercent = + frameCount === 0 + ? 0 + : clamp( + (safeViewStartFrame / frameCount) * 100, + 0, + 100 - scrollThumbWidthPercent + ); + + return ( +
+
+
+
+
+ + Graph +
+
+ + Dope Sheet +
+
+
+ Add keyframe (K/S)} + onClick={addKeyframeAtPlayhead} + > + + + Add keyframes for all tracks (N)} + onClick={addAllTrackKeyframesAtPlayhead} + > + + + Add keyframes for changed tracks (M)} + onClick={addChangedTrackKeyframesAtPlayhead} + > + + + Delete selected keyframe} + onClick={deleteSelectedKeyframe} + disabled={!selectedKeyframeIds.length} + > + + +
+
+
+
+ Go to start} + onClick={() => setTimelinePlayheadTime(0)} + > + + + Previous frame} + onClick={() => + setTimelinePlayheadTime(time => + clamp(time - 1 / frameRate, 0, timeline.duration) + ) + } + > + + + Pause : Play + } + onClick={() => + isPlayingPreview + ? setIsPlayingPreview(false) + : startTimelinePreview() + } + color="#1EE7F2" + > + {isPlayingPreview ? ( + + ) : ( + + )} + + Next frame} + onClick={() => + setTimelinePlayheadTime(time => + clamp(time + 1 / frameRate, 0, timeline.duration) + ) + } + > + + + Go to end} + onClick={() => setTimelinePlayheadTime(timeline.duration)} + > + + +
+
+ + + Create a new animation} + onClick={createTimeline} + > + + + + + + + + Frame {playheadFrame} + +
+
+
+
+ + {' '} + Curves + +
+
+
+
+
+
+
+ {propertyTrackRows.map( + ({ track, propertyTrack, propertyTrackIndex }) => { + const isFirstPropertyTrack = propertyTrackIndex === 0; + return ( +
{ + setSelectedPropertyTrackId(propertyTrack.id); + setSelectionBox(null); + }} + > +
+
+ {isFirstPropertyTrack ? ( + getTrackLabel(track) + ) : ( + + {getTrackLabel(track)} + + )} +
+
+ {getPropertyLabel(propertyTrack.property)} +
+
+ {isFirstPropertyTrack ? ( + +
+ + updateTrackTarget(track.id, value) + } + > + {(track.target.objectName && + !objectNames.includes(track.target.objectName) + ? [track.target.objectName, ...objectNames] + : objectNames + ) + .filter(Boolean) + .map(objectName => ( + + ))} + +
+ Delete object animation} + onClick={() => deleteTrack(track.id)} + color="#FFB6B6" + > + + +
+ ) : ( +
+ )} +
+ ); + } + )} +
+
+
+
onTimelineMouseDown(event)} + > + {frameLabels.map(frame => ( + + ))} + {frameLabels.map(frame => ( + + {frame} + + ))} + {timeline.markers.map(marker => ( + + + + ))} +
+
+
+
+
+ {selectionBox && selectionBox.isMultiTrack ? ( +
+ ) : null} + {propertyTrackRows.map(({ track, propertyTrack }) => ( +
+ onTimelineMouseDown(event, propertyTrack.id) + } + > + {frameLabels.map(frame => ( + + ))} +
+ + {buildPropertyTrackGraphPaths( + propertyTrack, + safeViewStartFrame, + visibleFrames + ).map(pathInfo => ( + + ))} + + {getSamplingTimelineKeyframes(propertyTrack).flatMap(keyframe => + getTimelineValueChannels(keyframe.value).map( + ({ channel, color }) => ( + + {getPropertyLabel(propertyTrack.property)} + {channel === 'value' + ? '' + : ` ${channel.toUpperCase()}`}{' '} + - Frame {timeToFrame(keyframe.time)} + + } + > + { + event.preventDefault(); + event.stopPropagation(); + setSelectionBox(null); + const shouldToggleSelection = + event.ctrlKey || event.metaKey; + const shouldAddToSelection = event.shiftKey; + setTimelinePlayheadTime(keyframe.time); + setSelectedPropertyTrackId(propertyTrack.id); + const nextSelectedKeyframeIds = shouldToggleSelection + ? selectedKeyframeIds.includes(keyframe.id) + ? selectedKeyframeIds.filter( + keyframeId => keyframeId !== keyframe.id + ) + : [...selectedKeyframeIds, keyframe.id] + : shouldAddToSelection + ? selectedKeyframeIds.includes(keyframe.id) + ? selectedKeyframeIds + : [...selectedKeyframeIds, keyframe.id] + : selectedKeyframeIds.includes(keyframe.id) + ? selectedKeyframeIds + : [keyframe.id]; + setSelectedKeyframeIds(nextSelectedKeyframeIds); + if (nextSelectedKeyframeIds.includes(keyframe.id)) { + beginKeyframeDrag( + event, + propertyTrack, + keyframe, + nextSelectedKeyframeIds, + channel + ); + } + }} + /> + + ) + ) + )} + {selectionBox && + !selectionBox.isMultiTrack && + selectionBox.propertyTrackId === propertyTrack.id ? ( +
+ ) : null} +
+
+ ))} +
+
+
+
+
+
+
+
+
+ + + + + {curveEditableKeyframeIds.length > 0 && + selectedCurveModeId === 'bezier' ? ( + + + + { + event.preventDefault(); + event.stopPropagation(); + setDraggingCurveHandle('out'); + }} + /> + { + event.preventDefault(); + event.stopPropagation(); + setDraggingCurveHandle('in'); + }} + /> + + ) : null} + +
+ {selectedKeyframeIds.length ? ( + curveEditableKeyframeIds.length ? ( + + Curve edits the selected key's outgoing segment, or the + previous segment for the last key + + ) : ( + Select a keyframe with a neighboring key + ) + ) : ( + Select keyframes to edit their curve + )} +
+
+
+ {curvePresetOptions.map(curvePreset => ( + + ))} +
+
+
+
+ ); +} diff --git a/newIDE/app/src/UI/Dialog.js b/newIDE/app/src/UI/Dialog.js index fa887832c289..d5d8f92667e6 100644 --- a/newIDE/app/src/UI/Dialog.js +++ b/newIDE/app/src/UI/Dialog.js @@ -249,6 +249,9 @@ type DialogProps = {| actionsFullWidthOnMobile?: boolean, // Useful when the content of the dialog can change and we want to avoid layout shifts. forceScrollVisible?: boolean, + transitionDuration?: + | number + | {| appear?: number, enter?: number, exit?: number |}, id?: ?string, |}; @@ -278,6 +281,7 @@ const DialogWithoutWindowSizeProvider = ({ noPadding, actionsFullWidthOnMobile, forceScrollVisible, + transitionDuration, topBackgroundSrc, }: DialogProps) => { const preferences = React.useContext(PreferencesContext); @@ -451,6 +455,7 @@ const DialogWithoutWindowSizeProvider = ({ disableBackdropClick={false} onKeyDown={handleKeyDown} container={portalContainer} + transitionDuration={transitionDuration} > {topBackgroundSrc && (
, - genericError: ?Error, + genericError: ?GenericExtensionLoadError, onClose: () => void, |}; @@ -129,7 +134,13 @@ export const ExtensionLoadErrorDialog = ({ - {genericError.toString()} + + Some extensions could not be loaded. Expected{' '} + {genericError.expectedNumberOfJSExtensionModulesLoaded} JS + extension modules, got{' '} + {genericError.numberOfJSExtensionModulesLoaded}. Please + check the console for more details. + - @@ -155,7 +166,10 @@ export const useExtensionLoadErrorDialog = (): UseExtensionLoadErrorDialogOutput erroredExtensionLoadingResults, setErroredExtensionLoadingResults, ] = React.useState>(null); - const [genericError, setGenericError] = React.useState(null); + const [ + genericError, + setGenericError, + ] = React.useState(null); const [isForcedHidden, setIsForcedHidden] = React.useState(false); const setExtensionLoadingResults = React.useCallback( @@ -171,11 +185,12 @@ export const useExtensionLoadErrorDialog = (): UseExtensionLoadErrorDialogOutput extensionLoadingResults.expectedNumberOfJSExtensionModulesLoaded !== extensionLoadingResults.results.length; if (hasMissingExtensionModules) { - setGenericError( - new Error( - 'Some extensions could not be loaded. Please check the console for more details.' - ) - ); + setGenericError({ + expectedNumberOfJSExtensionModulesLoaded: + extensionLoadingResults.expectedNumberOfJSExtensionModulesLoaded, + numberOfJSExtensionModulesLoaded: + extensionLoadingResults.results.length, + }); } else { setGenericError(null); } @@ -197,7 +212,13 @@ export const useExtensionLoadErrorDialog = (): UseExtensionLoadErrorDialogOutput () => { if (hasExtensionLoadErrors) { let message = 'Extensions loaded with errors: \n'; - if (genericError) message += genericError.toString(); + if (genericError) { + message += `Some extensions could not be loaded. Expected ${ + genericError.expectedNumberOfJSExtensionModulesLoaded + } JS extension modules, got ${ + genericError.numberOfJSExtensionModulesLoaded + }. Please check the console for more details.`; + } if (erroredExtensionLoadingResults) message += erroredExtensionLoadingResults .map(({ extensionModulePath, result }) => { diff --git a/newIDE/app/src/locales/en/extension-messages.js b/newIDE/app/src/locales/en/extension-messages.js index d2ee89571021..79812d1d4332 100644 --- a/newIDE/app/src/locales/en/extension-messages.js +++ b/newIDE/app/src/locales/en/extension-messages.js @@ -1 +1 @@ -/* eslint-disable */module.exports={languageData:{"plurals":function(n,ord){var s=String(n).split("."),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?"one":n10==2&&n100!=12?"two":n10==3&&n100!=13?"few":"other";return n==1&&v0?"one":"other"}},messages:{"Advanced HTTP":"Advanced HTTP","HTTP requests with custom headers, methods, caching, CORS bypass, and JSON/FormData body.":"HTTP requests with custom headers, methods, caching, CORS bypass, and JSON/FormData body.","Network":"Network","Creates a template for your request. All requests must be made from a request template.":"Creates a template for your request. All requests must be made from a request template.","Create a new request template":"Create a new request template","Create request template _PARAM1_ with URL _PARAM2_":"Create request template _PARAM1_ with URL _PARAM2_","New request template name":"New request template name","URL the request will be sent to":"URL the request will be sent to","Creates a new request template with all the attributes from an existing one.":"Creates a new request template with all the attributes from an existing one.","Copy a request template":"Copy a request template","Create request _PARAM1_ from template _PARAM2_":"Create request _PARAM1_ from template _PARAM2_","Request to copy":"Request to copy","The HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"The HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.","HTTP Method (Verb)":"HTTP Method (Verb)","Set HTTP method of request _PARAM1_ to _PARAM2_":"Set HTTP method of request _PARAM1_ to _PARAM2_","Request template name":"Request template name","HTTP Method":"HTTP Method","the HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"the HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.","HTTP method of request _PARAM1_":"HTTP method of request _PARAM1_","Defines to what extent the results of the request is can/must be cached. When cached, instead of sending a request to the server, the browser will avoid making a real request to the server and will use a previous response given by the server for the same request.\nThe server also has a say in this via the Cache-Control header.":"Defines to what extent the results of the request is can/must be cached. When cached, instead of sending a request to the server, the browser will avoid making a real request to the server and will use a previous response given by the server for the same request.\nThe server also has a say in this via the Cache-Control header.","HTTP Caching strategy":"HTTP Caching strategy","Set HTTP caching strategy of request _PARAM1_ to _PARAM2_":"Set HTTP caching strategy of request _PARAM1_ to _PARAM2_","Learn more about what each caching strategy does [on the MDN page for cache](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache).":"Learn more about what each caching strategy does [on the MDN page for cache](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache).","HTTP Caching":"HTTP Caching","HTTP caching strategy of request _PARAM1_":"HTTP caching strategy of request _PARAM1_","Sets the body of an HTTP request to a JSON representation of a structure variable.":"Sets the body of an HTTP request to a JSON representation of a structure variable.","Body as JSON":"Body as JSON","Set body of request _PARAM1_ to contents of _PARAM2_ as JSON":"Set body of request _PARAM1_ to contents of _PARAM2_ as JSON","Variable with body contents":"Variable with body contents","Sets the body of an HTTP request to a form data representation of a structure variable.":"Sets the body of an HTTP request to a form data representation of a structure variable.","Body as form data":"Body as form data","Set body of request _PARAM1_ to contents of _PARAM2_ as form data":"Set body of request _PARAM1_ to contents of _PARAM2_ as form data","the body of the HTTP request. Contains data to send to the server, ususally in plain text, JSON or FormData format. This cannot be set for GET requests.":"the body of the HTTP request. Contains data to send to the server, ususally in plain text, JSON or FormData format. This cannot be set for GET requests.","Body":"Body","body of request _PARAM1_":"body of request _PARAM1_","an HTTP header to be sent with the request.":"an HTTP header to be sent with the request.","Header":"Header","HTTP header _PARAM2_ of request _PARAM1_":"HTTP header _PARAM2_ of request _PARAM1_","HTTP header name":"HTTP header name","the request template's target URL.":"the request template's target URL.","URL":"URL","the URL of request template _PARAM1_":"the URL of request template _PARAM1_","CORS prevents most external websites from being queried with the browser's HTTP client, since the browser may be authenticated on that website and as such another website would be able to impersonate the player on that other website.\nWhen the CORS Bypass is enabled, the request will be made from a server that is not authenticated anywhere and as such is not blocked by CORS, and it will share the response with your game. Note that as such, authentication cookies are ignored! If you own the REST API you are requesting, add CORS headers to your server instead of using this CORS Bypass.":"CORS prevents most external websites from being queried with the browser's HTTP client, since the browser may be authenticated on that website and as such another website would be able to impersonate the player on that other website.\nWhen the CORS Bypass is enabled, the request will be made from a server that is not authenticated anywhere and as such is not blocked by CORS, and it will share the response with your game. Note that as such, authentication cookies are ignored! If you own the REST API you are requesting, add CORS headers to your server instead of using this CORS Bypass.","Enable CORS Bypass":"Enable CORS Bypass","Enable CORS Bypass for request _PARAM1_: _PARAM2_":"Enable CORS Bypass for request _PARAM1_: _PARAM2_","Enable the CORS Bypass?":"Enable the CORS Bypass?","The CORS Bypass server is offered for free by [arthuro555](https://twitter.com/arthuro555). Consider making a [donation](https://ko-fi.com/arthuro555) to help keep the CORS Bypass server running.":"The CORS Bypass server is offered for free by [arthuro555](https://twitter.com/arthuro555). Consider making a [donation](https://ko-fi.com/arthuro555) to help keep the CORS Bypass server running.","Checks whether or not CORS Bypass has been enabled for the request template.":"Checks whether or not CORS Bypass has been enabled for the request template.","CORS Bypass enabled":"CORS Bypass enabled","CORS Bypass is enabled for request _PARAM1_":"CORS Bypass is enabled for request _PARAM1_","Executes the request defined by a request template.":"Executes the request defined by a request template.","Execute the request":"Execute the request","Execute request _PARAM1_ and store results in _PARAM2_":"Execute request _PARAM1_ and store results in _PARAM2_","Request to execute":"Request to execute","Variable where to store the response to the request":"Variable where to store the response to the request","Checks whether the server marked the response as a success (status code 1XX/2XX), not as a failure (status code 4XX/5XX).":"Checks whether the server marked the response as a success (status code 1XX/2XX), not as a failure (status code 4XX/5XX).","Success":"Success","Response _PARAM1_ indicates a success":"Response _PARAM1_ indicates a success","Variable containing the response":"Variable containing the response","the status code of the HTTP request (e.g. 200 if succeeded, 404 if not found, etc).":"the status code of the HTTP request (e.g. 200 if succeeded, 404 if not found, etc).","Status code":"Status code","Status code of response _PARAM1_":"Status code of response _PARAM1_","Gets the status text for a response. For example, for a response with the status code 404, the status text will be \"Not Found\".":"Gets the status text for a response. For example, for a response with the status code 404, the status text will be \"Not Found\".","Status text":"Status text","one of the HTTP headers included in the server's response.":"one of the HTTP headers included in the server's response.","Header _PARAM2_ of response _PARAM1_":"Header _PARAM2_ of response _PARAM1_","Reads the body sent by the server, and store it as a string in a variable.":"Reads the body sent by the server, and store it as a string in a variable.","Get response body (text)":"Get response body (text)","Read body of response _PARAM1_ into _PARAM2_ as text":"Read body of response _PARAM1_ into _PARAM2_ as text","Variable where to write the body contents into":"Variable where to write the body contents into","Reads the body sent by the server, parses it as JSON and stores the resulting structure in a variable.":"Reads the body sent by the server, parses it as JSON and stores the resulting structure in a variable.","Get response body (JSON)":"Get response body (JSON)","Read body of response _PARAM1_ into _PARAM2_ as JSON":"Read body of response _PARAM1_ into _PARAM2_ as JSON","Advanced platformer movements":"Advanced platformer movements","Platformer air jump, wall jump/slide, coyote time, horizontal dash, and dive dash.":"Platformer air jump, wall jump/slide, coyote time, horizontal dash, and dive dash.","Movement":"Movement","Let platformer characters jump shortly after leaving a platform and also jump in mid-air.":"Let platformer characters jump shortly after leaving a platform and also jump in mid-air.","Coyote time and air jump":"Coyote time and air jump","Platformer character behavior":"Platformer character behavior","Coyote time duration":"Coyote time duration","Coyote time":"Coyote time","Can coyote jump":"Can coyote jump","Was in the air":"Was in the air","Number of air jumps":"Number of air jumps","Air jump":"Air jump","Floor jumps count as air jumps":"Floor jumps count as air jumps","Object":"Object","Behavior":"Behavior","Change the coyote time duration of an object (in seconds).":"Change the coyote time duration of an object (in seconds).","Coyote timeframe":"Coyote timeframe","Change coyote time of _PARAM0_: _PARAM2_ seconds":"Change coyote time of _PARAM0_: _PARAM2_ seconds","Duration":"Duration","Coyote time duration in seconds.":"Coyote time duration in seconds.","Check if a coyote jump can currently happen.":"Check if a coyote jump can currently happen.","_PARAM0_ can coyote jump":"_PARAM0_ can coyote jump","Update WasInTheAir":"Update WasInTheAir","Update WasInTheAir property of _PARAM0_":"Update WasInTheAir property of _PARAM0_","Number of jumps in mid-air that are allowed.":"Number of jumps in mid-air that are allowed.","Maximal jump number":"Maximal jump number","Number of jumps in mid-air that are still allowed.":"Number of jumps in mid-air that are still allowed.","Remaining jump":"Remaining jump","Change the number of times the character can jump in mid-air.":"Change the number of times the character can jump in mid-air.","Air jumps":"Air jumps","Change the number of times _PARAM0_ can jump in mid-air: _PARAM2_":"Change the number of times _PARAM0_ can jump in mid-air: _PARAM2_","Remove one of the remaining air jumps of a character.":"Remove one of the remaining air jumps of a character.","Remove a remaining air jump":"Remove a remaining air jump","Remove one of the remaining air jumps of _PARAM0_":"Remove one of the remaining air jumps of _PARAM0_","Allow back all air jumps of a character.":"Allow back all air jumps of a character.","Reset air jumps":"Reset air jumps","Allow back all air jumps of _PARAM0_":"Allow back all air jumps of _PARAM0_","Check if floor jumps are counted as air jumps for an object.":"Check if floor jumps are counted as air jumps for an object.","Floor jumps count as air jumps for _PARAM0_":"Floor jumps count as air jumps for _PARAM0_","Let platformer characters jump and slide against walls.":"Let platformer characters jump and slide against walls.","Wall jump":"Wall jump","Platformer character configuration stack":"Platformer character configuration stack","Jump detection time frame":"Jump detection time frame","Side speed":"Side speed","Side acceleration":"Side acceleration","Side speed sustain time":"Side speed sustain time","Gravity":"Gravity","Wall sliding":"Wall sliding","Maximum falling speed":"Maximum falling speed","Impact speed absorption":"Impact speed absorption","Minimal falling speed":"Minimal falling speed","Keep sliding without holding a key":"Keep sliding without holding a key","Check if the object has just wall jumped.":"Check if the object has just wall jumped.","Has just wall jumped":"Has just wall jumped","_PARAM0_ has just jumped from a wall":"_PARAM0_ has just jumped from a wall","Check if the object is wall jumping.":"Check if the object is wall jumping.","Is wall jumping":"Is wall jumping","_PARAM0_ jumped from a wall":"_PARAM0_ jumped from a wall","Check if the object is against a wall.":"Check if the object is against a wall.","Against a wall":"Against a wall","_PARAM0_ is against a wall":"_PARAM0_ is against a wall","Remember that the character was against a wall.":"Remember that the character was against a wall.","Remember is against wall":"Remember is against wall","_PARAM0_ remembers having been against a wall":"_PARAM0_ remembers having been against a wall","Forget that the character was against a wall.":"Forget that the character was against a wall.","Forget is against wall":"Forget is against wall","_PARAM0_ forgets to had been against a wall":"_PARAM0_ forgets to had been against a wall","Remember that the character was against a wall within the time frame.":"Remember that the character was against a wall within the time frame.","Was against wall":"Was against wall","_PARAM0_ remembers to had been against a wall within _PARAM2_ seconds":"_PARAM0_ remembers to had been against a wall within _PARAM2_ seconds","Time frame":"Time frame","The time frame in seconds.":"The time frame in seconds.","Remember that the jump key was pressed.":"Remember that the jump key was pressed.","Remember key pressed":"Remember key pressed","_PARAM0_ remembers the _PARAM2_ key was pressed":"_PARAM0_ remembers the _PARAM2_ key was pressed","Key":"Key","Forget that the jump key was pressed.":"Forget that the jump key was pressed.","Forget key pressed":"Forget key pressed","_PARAM0_ forgets the _PARAM2_ key was pressed":"_PARAM0_ forgets the _PARAM2_ key was pressed","Check if the key was pressed within the time frame.":"Check if the key was pressed within the time frame.","_PARAM0_ remembers _PARAM3_ key was pressed within _PARAM2_ seconds":"_PARAM0_ remembers _PARAM3_ key was pressed within _PARAM2_ seconds","Enable side speed.":"Enable side speed.","Toggle side speed":"Toggle side speed","Enable side speed for _PARAM0_: _PARAM2_":"Enable side speed for _PARAM0_: _PARAM2_","Enable side speed":"Enable side speed","Enable wall sliding.":"Enable wall sliding.","Slide on wall":"Slide on wall","Enable wall sliding for _PARAM0_: _PARAM2_":"Enable wall sliding for _PARAM0_: _PARAM2_","Enable wall sliding":"Enable wall sliding","Absorb falling speed of an object.":"Absorb falling speed of an object.","Absorb falling speed":"Absorb falling speed","Absorb falling speed of _PARAM0_: _PARAM2_":"Absorb falling speed of _PARAM0_: _PARAM2_","Speed absorption (in pixels per second)":"Speed absorption (in pixels per second)","The wall jump detection time frame of an object (in seconds).":"The wall jump detection time frame of an object (in seconds).","Jump time frame":"Jump time frame","Change the wall jump detection time frame of _PARAM0_: _PARAM2_":"Change the wall jump detection time frame of _PARAM0_: _PARAM2_","Change the wall jump detection time frame of an object (in seconds).":"Change the wall jump detection time frame of an object (in seconds).","Jump detection time frame (in seconds)":"Jump detection time frame (in seconds)","The side speed of wall jumps of an object (in pixels per second).":"The side speed of wall jumps of an object (in pixels per second).","Change the side speed of wall jumps of _PARAM0_: _PARAM2_":"Change the side speed of wall jumps of _PARAM0_: _PARAM2_","Change the side speed of wall jumps of an object (in pixels per second).":"Change the side speed of wall jumps of an object (in pixels per second).","The side acceleration of wall jumps of an object (in pixels per second per second).":"The side acceleration of wall jumps of an object (in pixels per second per second).","Change the side acceleration of wall jumps of _PARAM0_: _PARAM2_":"Change the side acceleration of wall jumps of _PARAM0_: _PARAM2_","Change the side acceleration of wall jumps of an object (in pixels per second per second).":"Change the side acceleration of wall jumps of an object (in pixels per second per second).","The wall sliding gravity of an object (in pixels per second per second).":"The wall sliding gravity of an object (in pixels per second per second).","Change the wall sliding gravity of _PARAM0_: _PARAM2_":"Change the wall sliding gravity of _PARAM0_: _PARAM2_","Change the wall sliding gravity of an object (in pixels per second per second).":"Change the wall sliding gravity of an object (in pixels per second per second).","The wall sliding maximum falling speed of an object (in pixels per second).":"The wall sliding maximum falling speed of an object (in pixels per second).","Change the wall sliding maximum falling speed of _PARAM0_: _PARAM2_":"Change the wall sliding maximum falling speed of _PARAM0_: _PARAM2_","Change the wall sliding maximum falling speed of an object (in pixels per second).":"Change the wall sliding maximum falling speed of an object (in pixels per second).","Change the impact speed absorption of an object.":"Change the impact speed absorption of an object.","Change the impact speed absorption of _PARAM0_: _PARAM2_":"Change the impact speed absorption of _PARAM0_: _PARAM2_","Make platformer characters dash toward the floor.":"Make platformer characters dash toward the floor.","Dive dash":"Dive dash","Initial falling speed":"Initial falling speed","Simulate a press of dive key to make the object dives to the floor if it can dive.":"Simulate a press of dive key to make the object dives to the floor if it can dive.","Simulate dive key":"Simulate dive key","Simulate pressing dive key for _PARAM0_":"Simulate pressing dive key for _PARAM0_","Check if the object can dive.":"Check if the object can dive.","Can dive":"Can dive","_PARAM0_ can dive":"_PARAM0_ can dive","Check if the object is diving.":"Check if the object is diving.","Is diving":"Is diving","_PARAM0_ is diving":"_PARAM0_ is diving","Make platformer characters dash horizontally.":"Make platformer characters dash horizontally.","Horizontal dash":"Horizontal dash","Platformer charcacter configuration stack":"Platformer charcacter configuration stack","Initial speed":"Initial speed","Sustain minimum duration":"Sustain minimum duration","Sustain":"Sustain","Sustain maxiumum duration":"Sustain maxiumum duration","Sustain acceleration":"Sustain acceleration","Sustain maxiumum speed":"Sustain maxiumum speed","Sustain gravity":"Sustain gravity","Decceleration":"Decceleration","Cool down duration":"Cool down duration","Update the last direction used by the character.":"Update the last direction used by the character.","Update last direction":"Update last direction","Update last direction used by _PARAM0_":"Update last direction used by _PARAM0_","Simulate a press of dash key.":"Simulate a press of dash key.","Simulate dash key":"Simulate dash key","Simulate pressing dash key for _PARAM0_":"Simulate pressing dash key for _PARAM0_","Check if the object is dashing.":"Check if the object is dashing.","Is dashing":"Is dashing","_PARAM0_ is dashing":"_PARAM0_ is dashing","Abort the current dash and set the object to its usual horizontal speed.":"Abort the current dash and set the object to its usual horizontal speed.","Abort dash":"Abort dash","Abort the current dash of _PARAM0_":"Abort the current dash of _PARAM0_","Resolve conflict between platformer character configuration changes.":"Resolve conflict between platformer character configuration changes.","Revert configuration changes for one identifier and update the character configuration to use the most recent ones.":"Revert configuration changes for one identifier and update the character configuration to use the most recent ones.","Revert configuration":"Revert configuration","Revert configuration changes: _PARAM2_ on _PARAM0_":"Revert configuration changes: _PARAM2_ on _PARAM0_","Configuration identifier":"Configuration identifier","Return the character property value when no change applies on it.":"Return the character property value when no change applies on it.","Setting":"Setting","Configure the _PARAM2_ of _PARAM0_: _PARAM3_ with the identifier: _PARAM4_":"Configure the _PARAM2_ of _PARAM0_: _PARAM3_ with the identifier: _PARAM4_","Return the usual maximum horizontal speed when no configuration change applies on it.":"Return the usual maximum horizontal speed when no configuration change applies on it.","Usual maximum horizontal speed":"Usual maximum horizontal speed","Configure the maximum horizontal speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the maximum horizontal speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Configure a character property for a given configuration layer and move this layer on top.":"Configure a character property for a given configuration layer and move this layer on top.","Configure setting":"Configure setting","Setting value":"Setting value","Configure character gravity for a given configuration layer and move this layer on top.":"Configure character gravity for a given configuration layer and move this layer on top.","Configure gravity":"Configure gravity","Configure the gravity of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the gravity of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Configure character deceleration for a given configuration layer and move this layer on top.":"Configure character deceleration for a given configuration layer and move this layer on top.","Configure horizontal deceleration":"Configure horizontal deceleration","Configure the horizontal deceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the horizontal deceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Acceleration":"Acceleration","Configure character maximum speed for a given configuration layer and move this layer on top.":"Configure character maximum speed for a given configuration layer and move this layer on top.","Configure maximum horizontal speed":"Configure maximum horizontal speed","Maximum horizontal speed":"Maximum horizontal speed","Configure character acceleration for a given configuration layer and move this layer on top.":"Configure character acceleration for a given configuration layer and move this layer on top.","Configure horizontal acceleration":"Configure horizontal acceleration","Configure the horizontal acceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the horizontal acceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Configure character maximum falling speed for a given configuration layer and move this layer on top.":"Configure character maximum falling speed for a given configuration layer and move this layer on top.","Configure maximum falling speed":"Configure maximum falling speed","Configure the maximum falling speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the maximum falling speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Advanced movements for 3D physics characters":"Advanced movements for 3D physics characters","3D character air jump and coyote time (ledge tolerance) behavior.":"3D character air jump and coyote time (ledge tolerance) behavior.","Let 3D physics characters jump shortly after leaving a platform and also jump in mid-air.":"Let 3D physics characters jump shortly after leaving a platform and also jump in mid-air.","Coyote time and air jump for 3D":"Coyote time and air jump for 3D","3D physics character":"3D physics character","A Jump control was applied from a default control or simulated by an action.":"A Jump control was applied from a default control or simulated by an action.","Jump pressed or simulated":"Jump pressed or simulated","_PARAM0_ has the Jump key pressed or simulated":"_PARAM0_ has the Jump key pressed or simulated","Advanced p2p event handling":"Advanced p2p event handling","Handle all received P2P events at once per frame for better performance.":"Handle all received P2P events at once per frame for better performance.","Marks the event as handled, to go on to the next.":"Marks the event as handled, to go on to the next.","Dismiss event":"Dismiss event","Dismiss event _PARAM1_ as handled":"Dismiss event _PARAM1_ as handled","The event to dismiss":"The event to dismiss","Advanced projectile":"Advanced projectile","Projectile behavior with speed, acceleration, max distance, and lifetime controls.":"Projectile behavior with speed, acceleration, max distance, and lifetime controls.","Control how a projectile object moves including lifetime, distance, speed, and acceleration.":"Control how a projectile object moves including lifetime, distance, speed, and acceleration.","Lifetime":"Lifetime","Use \"0\" to ignore this property.":"Use \"0\" to ignore this property.","Max distance from starting position":"Max distance from starting position","Max speed":"Max speed","Speed from object forces will not exceed this value. Use \"0\" to ignore this property.":"Speed from object forces will not exceed this value. Use \"0\" to ignore this property.","Speed from object forces will not go below this value. Use \"0\" to ignore this property.":"Speed from object forces will not go below this value. Use \"0\" to ignore this property.","Negative acceleration can be used to stop a projectile.":"Negative acceleration can be used to stop a projectile.","Starting speed":"Starting speed","Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.","Delete when lifetime is exceeded":"Delete when lifetime is exceeded","Delete when distance from starting position is exceeded":"Delete when distance from starting position is exceeded","Check if max distance from starting position has been exceeded (object will be deleted next frame).":"Check if max distance from starting position has been exceeded (object will be deleted next frame).","Max distance from starting position has been exceeded":"Max distance from starting position has been exceeded","Max distance from starting position of _PARAM0_ has been exceeded":"Max distance from starting position of _PARAM0_ has been exceeded","Check if lifetime has been exceeded (object will be deleted next frame).":"Check if lifetime has been exceeded (object will be deleted next frame).","Lifetime has been exceeded":"Lifetime has been exceeded","Lifetime of _PARAM0_ has been exceeded":"Lifetime of _PARAM0_ has been exceeded","the lifetime of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"the lifetime of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.","the lifetime":"the lifetime","Restart lifetime timer of object.":"Restart lifetime timer of object.","Restart lifetime timer":"Restart lifetime timer","Restart lifetime timer of _PARAM0_":"Restart lifetime timer of _PARAM0_","the max distance from starting position of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"the max distance from starting position of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.","the max distance from starting position":"the max distance from starting position","Change the starting position of object to it's current position.":"Change the starting position of object to it's current position.","Change starting position to the current position":"Change starting position to the current position","Change the starting position of _PARAM0_ to it's current position":"Change the starting position of _PARAM0_ to it's current position","the max speed of the object. Object forces cannot exceed this value. Use \"0\" to ignore this property.":"the max speed of the object. Object forces cannot exceed this value. Use \"0\" to ignore this property.","the max speed":"the max speed","the minSpeed of the object. Object forces cannot go below this value. Use \"0\" to ignore this property.":"the minSpeed of the object. Object forces cannot go below this value. Use \"0\" to ignore this property.","MinSpeed":"MinSpeed","the minSpeed":"the minSpeed","the acceleration of the object. Use a negative number to slow down.":"the acceleration of the object. Use a negative number to slow down.","the acceleration":"the acceleration","the starting speed of the object. Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"the starting speed of the object. Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.","the starting speed":"the starting speed","Check if automatic deletion is enabled when lifetime is exceeded.":"Check if automatic deletion is enabled when lifetime is exceeded.","Automatic deletion is enabled when lifetime is exceeded":"Automatic deletion is enabled when lifetime is exceeded","Automatic deletion is enabled when lifetime is exceeded on _PARAM0_":"Automatic deletion is enabled when lifetime is exceeded on _PARAM0_","Change automatic deletion of object when lifetime is exceeded.":"Change automatic deletion of object when lifetime is exceeded.","Change automatic deletion when lifetime is exceeded":"Change automatic deletion when lifetime is exceeded","Enable automatic deletion of _PARAM0_ when lifetime is exceeded: _PARAM2_":"Enable automatic deletion of _PARAM0_ when lifetime is exceeded: _PARAM2_","DeleteWhenLifetimeExceeded":"DeleteWhenLifetimeExceeded","Check if automatic deletion is enabled when distance from starting position is exceeded.":"Check if automatic deletion is enabled when distance from starting position is exceeded.","Automatic deletion is enabled when distance from starting position is exceeded":"Automatic deletion is enabled when distance from starting position is exceeded","Automatic deletion is enabled when distance from starting position is exceeded on _PARAM0_":"Automatic deletion is enabled when distance from starting position is exceeded on _PARAM0_","Change automatic deletion when distance from starting position is exceeded.":"Change automatic deletion when distance from starting position is exceeded.","Change automatic deletion when distance from starting position is exceeded":"Change automatic deletion when distance from starting position is exceeded","Enable automatic deletion of _PARAM0_ when distance from starting position is exceeded: _PARAM2_":"Enable automatic deletion of _PARAM0_ when distance from starting position is exceeded: _PARAM2_","DeleteWhenDistanceExceeded":"DeleteWhenDistanceExceeded","Animated Back and Forth Movement":"Animated Back and Forth Movement","Horizontal back-and-forth movement with automatic flip. Requires GoLeft/TurnLeft animations.":"Horizontal back-and-forth movement with automatic flip. Requires GoLeft/TurnLeft animations.","Make the object go on the left, then when some distance is reached, flip and go back to the right. Make sure that your object has two animations called \"GoLeft\" and \"TurnLeft\".":"Make the object go on the left, then when some distance is reached, flip and go back to the right. Make sure that your object has two animations called \"GoLeft\" and \"TurnLeft\".","Animated Back and Forth (mirrored) Movement":"Animated Back and Forth (mirrored) Movement","Animatable capability":"Animatable capability","Flippable capability":"Flippable capability","Speed on X axis, in pixels per second":"Speed on X axis, in pixels per second","Distance traveled on X axis, in pixels":"Distance traveled on X axis, in pixels","Array tools":"Array tools","Array utilities: search, sort, shuffle, slice, concat, reverse, pop, random element access.":"Array utilities: search, sort, shuffle, slice, concat, reverse, pop, random element access.","General":"General","The index of the first variable that equals to a specific number in an array.":"The index of the first variable that equals to a specific number in an array.","Index of number":"Index of number","The first index where _PARAM2_ can be found in _PARAM1_":"The first index where _PARAM2_ can be found in _PARAM1_","Array to search the value in":"Array to search the value in","Number to search in the array":"Number to search in the array","The index of the first variable that equals to a specific text in an array.":"The index of the first variable that equals to a specific text in an array.","Index of text":"Index of text","String to search in the array":"String to search in the array","The index of the last variable that equals to a specific number in an array.":"The index of the last variable that equals to a specific number in an array.","Last index of number":"Last index of number","The last index where _PARAM2_ can be found in _PARAM1_":"The last index where _PARAM2_ can be found in _PARAM1_","The index of the last variable that equals to a specific text in an array.":"The index of the last variable that equals to a specific text in an array.","Last index of text":"Last index of text","Returns a random number of an array of numbers.":"Returns a random number of an array of numbers.","Random number in array":"Random number in array","A randomly picked number of _PARAM1_":"A randomly picked number of _PARAM1_","Array to get a number from":"Array to get a number from","a random string of an array of strings.":"a random string of an array of strings.","Random string in array":"Random string in array","A randomly picked string of _PARAM1_":"A randomly picked string of _PARAM1_","Array to get a string from":"Array to get a string from","Removes the last array child of an array, and return it as a number.":"Removes the last array child of an array, and return it as a number.","Get and remove last variable from array (as number)":"Get and remove last variable from array (as number)","Remove last child of _PARAM1_ and store it in _PARAM2_":"Remove last child of _PARAM1_ and store it in _PARAM2_","Array to pop a child from":"Array to pop a child from","Removes the last array child of an array, and return it as a string.":"Removes the last array child of an array, and return it as a string.","Pop string from array":"Pop string from array","Removes the first array child of an array, and return it as a number.":"Removes the first array child of an array, and return it as a number.","Shift number from array":"Shift number from array","Array to shift a child from":"Array to shift a child from","Removes the first array child of an array, and return it as a string.":"Removes the first array child of an array, and return it as a string.","Shift string from array":"Shift string from array","Checks if an array contains a specific number.":"Checks if an array contains a specific number.","Array has number":"Array has number","Array _PARAM1_ has number _PARAM2_":"Array _PARAM1_ has number _PARAM2_","The number to search":"The number to search","Checks if an array contains a specific string.":"Checks if an array contains a specific string.","Array has string":"Array has string","Array _PARAM1_ has string _PARAM2_":"Array _PARAM1_ has string _PARAM2_","The text to search":"The text to search","Copies a portion of a scene array variable into a new scene array variable.":"Copies a portion of a scene array variable into a new scene array variable.","Slice an array":"Slice an array","Slice array _PARAM1_ from indices _PARAM3_ to _PARAM4_ into _PARAM2_":"Slice array _PARAM1_ from indices _PARAM3_ to _PARAM4_ into _PARAM2_","The array to take a slice from":"The array to take a slice from","The array to store the slice into":"The array to store the slice into","The index to start the slice from":"The index to start the slice from","The index to end the slice at":"The index to end the slice at","Set to 0 to copy all of the array. If you use a negative value, the index will be selected beginning from the end. \nFor example, slicing an array with 5 elements from 0 to -1 would take only elements from indices 0 to 3.":"Set to 0 to copy all of the array. If you use a negative value, the index will be selected beginning from the end. \nFor example, slicing an array with 5 elements from 0 to -1 would take only elements from indices 0 to 3.","Cuts a portion of an array off.":"Cuts a portion of an array off.","Splice an array":"Splice an array","Remove _PARAM3_ items from array _PARAM1_ starting from index _PARAM2_":"Remove _PARAM3_ items from array _PARAM1_ starting from index _PARAM2_","The array to remove items from":"The array to remove items from","The index to start removing from":"The index to start removing from","If you use a negative value, the index will be selected beginning from the end.":"If you use a negative value, the index will be selected beginning from the end.","The amount of elements to remove":"The amount of elements to remove","Set to 0 to remove until the end of the array.":"Set to 0 to remove until the end of the array.","Combines all elements of 2 scene arrays into one new scene array.":"Combines all elements of 2 scene arrays into one new scene array.","Combine 2 arrays":"Combine 2 arrays","Combine array _PARAM1_ and _PARAM2_ into _PARAM3_":"Combine array _PARAM1_ and _PARAM2_ into _PARAM3_","The first array":"The first array","The second array":"The second array","The variable to store the new array in":"The variable to store the new array in","Appends a copy of all variables of one array to another array.":"Appends a copy of all variables of one array to another array.","Append all variable to another array":"Append all variable to another array","Append all elements from array _PARAM1_ into _PARAM2_":"Append all elements from array _PARAM1_ into _PARAM2_","The array to get the variables from":"The array to get the variables from","The variable to append the variables in":"The variable to append the variables in","Reverses children of an array. The first array child becomes the last, and the last array child becomes the first.":"Reverses children of an array. The first array child becomes the last, and the last array child becomes the first.","Reverse an array":"Reverse an array","Reverse array _PARAM1_":"Reverse array _PARAM1_","The array to reverse":"The array to reverse","Fill an element with a number.":"Fill an element with a number.","Fill array with number":"Fill array with number","Fill array _PARAM1_ with _PARAM2_ from index _PARAM3_ to index _PARAM4_":"Fill array _PARAM1_ with _PARAM2_ from index _PARAM3_ to index _PARAM4_","The array to fill":"The array to fill","The number to fill":"The number to fill","The index to start filling from":"The index to start filling from","The index to stop filling at":"The index to stop filling at","Set to 0 to fill until the end of the array.":"Set to 0 to fill until the end of the array.","Shuffles all children of an array.":"Shuffles all children of an array.","Shuffle array":"Shuffle array","Shuffle array _PARAM1_":"Shuffle array _PARAM1_","The array to shuffle":"The array to shuffle","Replaces all arrays inside of an array with their children. For example, [[1,2], [3,4]] becomes [1,2,3,4].":"Replaces all arrays inside of an array with their children. For example, [[1,2], [3,4]] becomes [1,2,3,4].","Flatten array":"Flatten array","Flatten array _PARAM1_ (Deeply flatten: _PARAM2_)":"Flatten array _PARAM1_ (Deeply flatten: _PARAM2_)","The array to flatten":"The array to flatten","Deeply flatten":"Deeply flatten","If yes, will continue flattening until there is no arrays in the array anymore.":"If yes, will continue flattening until there is no arrays in the array anymore.","Removes the last array child of an array, and stores it in another variable.":"Removes the last array child of an array, and stores it in another variable.","Pop array child":"Pop array child","The array to pop a child from":"The array to pop a child from","The variable to store the popped value into":"The variable to store the popped value into","Removes the first array child of an array, and stores it in another variable.":"Removes the first array child of an array, and stores it in another variable.","Shift array child":"Shift array child","Remove first child of _PARAM1_ and store it in _PARAM2_":"Remove first child of _PARAM1_ and store it in _PARAM2_","The array to shift a child from":"The array to shift a child from","The variable to store the shifted value into":"The variable to store the shifted value into","Insert a variable at a specific index of an array.":"Insert a variable at a specific index of an array.","Insert variable at":"Insert variable at","Insert variable _PARAM3_ in _PARAM1_ at index _PARAM2_":"Insert variable _PARAM3_ in _PARAM1_ at index _PARAM2_","The array to insert a variable in":"The array to insert a variable in","The index to insert the variable at":"The index to insert the variable at","The name of the variable to insert":"The name of the variable to insert","Split a string into an array of strings via a separator.":"Split a string into an array of strings via a separator.","Split string into array":"Split string into array","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM3_":"Split string _PARAM1_ via separator _PARAM2_ into array _PARAM3_","The string to split":"The string to split","The separator to use to split the string":"The separator to use to split the string","For example, if you have a string \"Hello World\", and the separator is a space (\" \"), the resulting array would be [\"Hello\", \"World\"]. If the separator is an empty string (\"\"), it will make an element per character ([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]).":"For example, if you have a string \"Hello World\", and the separator is a space (\" \"), the resulting array would be [\"Hello\", \"World\"]. If the separator is an empty string (\"\"), it will make an element per character ([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]).","Array where to store the results":"Array where to store the results","Returns a string made from all strings in an array.":"Returns a string made from all strings in an array.","Join all elements of an array together into a string":"Join all elements of an array together into a string","The name of the array to join into a string":"The name of the array to join into a string","Optional separator text between each element":"Optional separator text between each element","Get the sum of all numbers in an array.":"Get the sum of all numbers in an array.","Sum of array children":"Sum of array children","The array":"The array","Gets the smallest number in an array.":"Gets the smallest number in an array.","Smallest value":"Smallest value","Gets the biggest number in an array.":"Gets the biggest number in an array.","Biggest value":"Biggest value","Gets the average number in an array.":"Gets the average number in an array.","Average value":"Average value","Gets the median number in an array.":"Gets the median number in an array.","Median value":"Median value","Sort an array of number from smallest to biggest.":"Sort an array of number from smallest to biggest.","Sort an array":"Sort an array","Sort array _PARAM1_":"Sort array _PARAM1_","The array to sort":"The array to sort","The first index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"The first index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_","The object the variable is from":"The object the variable is from","The last index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"The last index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_","A randomly picked number of _PARAM2_ of _PARAM1_":"A randomly picked number of _PARAM2_ of _PARAM1_","A randomly picked string of _PARAM2_ of _PARAM1_":"A randomly picked string of _PARAM2_ of _PARAM1_","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM3_":"Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM3_","Array _PARAM2_ of _PARAM1_ has number _PARAM3_":"Array _PARAM2_ of _PARAM1_ has number _PARAM3_","Array _PARAM2_ of _PARAM1_ has string _PARAM3_":"Array _PARAM2_ of _PARAM1_ has string _PARAM3_","Slice array _PARAM2_ of _PARAM1_ from indices _PARAM5_ to _PARAM6_ into _PARAM4_ of _PARAM3_":"Slice array _PARAM2_ of _PARAM1_ from indices _PARAM5_ to _PARAM6_ into _PARAM4_ of _PARAM3_","Remove _PARAM4_ items from array _PARAM2_ of _PARAM1_ starting from index _PARAM3_":"Remove _PARAM4_ items from array _PARAM2_ of _PARAM1_ starting from index _PARAM3_","Combine array _PARAM2_ of _PARAM1_ and _PARAM4_ of _PARAM3_ into _PARAM6_ of _PARAM5_":"Combine array _PARAM2_ of _PARAM1_ and _PARAM4_ of _PARAM3_ into _PARAM6_ of _PARAM5_","Append all elements from array _PARAM2_ of _PARAM1_ into _PARAM4_ of _PARAM3_":"Append all elements from array _PARAM2_ of _PARAM1_ into _PARAM4_ of _PARAM3_","Reverse array _PARAM2_ of _PARAM1_":"Reverse array _PARAM2_ of _PARAM1_","Fill array _PARAM2_ of _PARAM1_ with _PARAM3_ from index _PARAM4_ to index _PARAM5_":"Fill array _PARAM2_ of _PARAM1_ with _PARAM3_ from index _PARAM4_ to index _PARAM5_","Shuffle array _PARAM2_ of _PARAM1_":"Shuffle array _PARAM2_ of _PARAM1_","Flatten array _PARAM2_ of _PARAM1_ (Deeply flatten: _PARAM3_)":"Flatten array _PARAM2_ of _PARAM1_ (Deeply flatten: _PARAM3_)","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_","Remove first child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"Remove first child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_","Insert variable _PARAM5_ of _PARAM4_ in _PARAM2_ of _PARAM1_ at index _PARAM3_":"Insert variable _PARAM5_ of _PARAM4_ in _PARAM2_ of _PARAM1_ at index _PARAM3_","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM4_ of _PARAM3_":"Split string _PARAM1_ via separator _PARAM2_ into array _PARAM4_ of _PARAM3_","Sort array _PARAM2_ of _PARAM1_":"Sort array _PARAM2_ of _PARAM1_","Platforms Validation":"Platforms Validation","Verify web game runs on authorized domains to prevent unauthorized hosting/piracy.":"Verify web game runs on authorized domains to prevent unauthorized hosting/piracy.","Checks if the game is executed on an authorized platform (preferably, run this only once at beginning of the game).":"Checks if the game is executed on an authorized platform (preferably, run this only once at beginning of the game).","Is the game running on an authorized platform":"Is the game running on an authorized platform","The game is running on a authorized platform":"The game is running on a authorized platform","Get the referrer's location (the domain of the website that hosts your game).":"Get the referrer's location (the domain of the website that hosts your game).","Get referrer location":"Get referrer location","Adds a new valid platform (domain name where the game is expected to be played, for example, gd.games).":"Adds a new valid platform (domain name where the game is expected to be played, for example, gd.games).","Add a valid platform":"Add a valid platform","Add _PARAM1_ as valid platform":"Add _PARAM1_ as valid platform","Domain name (e.g : gd.games)":"Domain name (e.g : gd.games)","Check if a domain is contained in the authorized list array.":"Check if a domain is contained in the authorized list array.","Check if a domain is contained in the authorized list":"Check if a domain is contained in the authorized list","Check if _PARAM1_ is in the list of authorized platforms":"Check if _PARAM1_ is in the list of authorized platforms","Domain to check":"Domain to check","Auto typing animation for text (\"typewriter\" effect)":"Auto typing animation for text (\"typewriter\" effect)","Typewriter text reveal effect, one letter at a time. For Text/BitmapText objects.":"Typewriter text reveal effect, one letter at a time. For Text/BitmapText objects.","User interface":"User interface","Reveal a text one letter after the other.":"Reveal a text one letter after the other.","Auto typing text":"Auto typing text","Text capability":"Text capability","Time between characters":"Time between characters","Detect if a new text character was just displayed":"Detect if a new text character was just displayed","Is next word wrapped":"Is next word wrapped","_PARAM0_ next word is wrapped":"_PARAM0_ next word is wrapped","Clear forced line breaks":"Clear forced line breaks","Clear forced line breaks in _PARAM0_":"Clear forced line breaks in _PARAM0_","Check if the full text has been typed.":"Check if the full text has been typed.","Finished typing":"Finished typing","_PARAM0_ finished typing":"_PARAM0_ finished typing","Check if a character has just been typed. Useful for triggering sound effects.":"Check if a character has just been typed. Useful for triggering sound effects.","Has just typed":"Has just typed","_PARAM0_ has just typed a character":"_PARAM0_ has just typed a character","Restart typing from the beginning of text. The autotyping also start automatically when a new text is set for the object.":"Restart typing from the beginning of text. The autotyping also start automatically when a new text is set for the object.","Restart typing from the beginning":"Restart typing from the beginning","Restart typing from the beginning on _PARAM0_":"Restart typing from the beginning on _PARAM0_","Jump to a specific position in the text. Positions start at \"0\" and increase by one for every character.":"Jump to a specific position in the text. Positions start at \"0\" and increase by one for every character.","Show Nth first characters":"Show Nth first characters","Show _PARAM2_ first characters on _PARAM0_":"Show _PARAM2_ first characters on _PARAM0_","Character position":"Character position","Show the full text.":"Show the full text.","Show the full text":"Show the full text","Show the full text on _PARAM0_":"Show the full text on _PARAM0_","the time between characters beign typed.":"the time between characters beign typed.","the time between characters":"the time between characters","Android back button":"Android back button","Customize Android back button: prevent default quit, detect presses. Android only.":"Customize Android back button: prevent default quit, detect presses. Android only.","Input":"Input","Triggers whenever the player presses the back button.":"Triggers whenever the player presses the back button.","Back button is pressed":"Back button is pressed","This simulates the normal action of the back button. \nThis action will quit the app when in a mobile app, and go back to the previous page when in a web browser.":"This simulates the normal action of the back button. \nThis action will quit the app when in a mobile app, and go back to the previous page when in a web browser.","Trigger back button":"Trigger back button","Simulate back button press":"Simulate back button press","Base conversion":"Base conversion","Convert numbers between bases (decimal, hexadecimal, binary, etc.).":"Convert numbers between bases (decimal, hexadecimal, binary, etc.).","Advanced":"Advanced","Converts a string representing a number in a different base to a decimal number.":"Converts a string representing a number in a different base to a decimal number.","Convert to decimal":"Convert to decimal","String representing a number":"String representing a number","The base the number in the string is in":"The base the number in the string is in","Converts a number to a trsing representing it in another base.":"Converts a number to a trsing representing it in another base.","Convert to different base":"Convert to different base","Number to convert":"Number to convert","The base to convert the number to":"The base to convert the number to","Platformer and top-down remapper":"Platformer and top-down remapper","Remap keyboard controls for platformer and top-down movements.":"Remap keyboard controls for platformer and top-down movements.","Remap keyboard controls of the top-down movement.":"Remap keyboard controls of the top-down movement.","Top-down keyboard remapper":"Top-down keyboard remapper","Up key":"Up key","Left key":"Left key","Right key":"Right key","Down key":"Down key","Remaps Top-Down behavior controls to a custom control scheme.":"Remaps Top-Down behavior controls to a custom control scheme.","Remap Top-Down controls to a custom scheme":"Remap Top-Down controls to a custom scheme","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_":"Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_","Remaps Top-Down behavior controls to a preset control scheme.":"Remaps Top-Down behavior controls to a preset control scheme.","Remap Top-Down controls to a preset":"Remap Top-Down controls to a preset","Remap controls of _PARAM0_ to preset _PARAM2_":"Remap controls of _PARAM0_ to preset _PARAM2_","Preset name":"Preset name","Remap keyboard controls of the platformer character movement.":"Remap keyboard controls of the platformer character movement.","Platformer keyboard mapper":"Platformer keyboard mapper","Jump key":"Jump key","Remaps Platformer behavior controls to a custom control scheme.":"Remaps Platformer behavior controls to a custom control scheme.","Remap Platformer controls to a custom scheme":"Remap Platformer controls to a custom scheme","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_, Jump: _PARAM6_":"Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_, Jump: _PARAM6_","Remaps Platformer behavior controls to a preset control scheme.":"Remaps Platformer behavior controls to a preset control scheme.","Remap Platformer controls to a preset":"Remap Platformer controls to a preset","3D Billboard":"3D Billboard","Make 3D objects always face camera, appearing as 2D sprites in 3D scenes.":"Make 3D objects always face camera, appearing as 2D sprites in 3D scenes.","Visual effect":"Visual effect","Rotate to always face the camera (only the front face of the cube should be enabled).":"Rotate to always face the camera (only the front face of the cube should be enabled).","Billboard":"Billboard","3D capability":"3D capability","Should rotate on X axis":"Should rotate on X axis","Should rotate on Y axis":"Should rotate on Y axis","Should rotate on Z axis":"Should rotate on Z axis","Offset position":"Offset position","Rotate the object to the camera. This is also done automatically at the end of the scene events.":"Rotate the object to the camera. This is also done automatically at the end of the scene events.","Rotate to face the camera":"Rotate to face the camera","Rotate _PARAM0_ to the camera":"Rotate _PARAM0_ to the camera","Check if the object should rotate on X axis.":"Check if the object should rotate on X axis.","_PARAM0_ should rotate on X axis":"_PARAM0_ should rotate on X axis","Change if the object should rotate on X axis.":"Change if the object should rotate on X axis.","_PARAM0_ should rotate on X axis: _PARAM2_":"_PARAM0_ should rotate on X axis: _PARAM2_","ShouldRotateX":"ShouldRotateX","Check if the object should rotate on Y axis.":"Check if the object should rotate on Y axis.","_PARAM0_ should rotate on Y axis":"_PARAM0_ should rotate on Y axis","Change if the object should rotate on Y axis.":"Change if the object should rotate on Y axis.","_PARAM0_ should rotate on Y axis: _PARAM2_":"_PARAM0_ should rotate on Y axis: _PARAM2_","ShouldRotateY":"ShouldRotateY","Check if the object should rotate on Z axis.":"Check if the object should rotate on Z axis.","_PARAM0_ should rotate on Z axis":"_PARAM0_ should rotate on Z axis","Change if the object should rotate on Z axis.":"Change if the object should rotate on Z axis.","_PARAM0_ should rotate on Z axis: _PARAM2_":"_PARAM0_ should rotate on Z axis: _PARAM2_","ShouldRotateZ":"ShouldRotateZ","Enable texture transparency of the front face.":"Enable texture transparency of the front face.","Enable texture transparency":"Enable texture transparency","Enable texture transparency of _PARAM0_":"Enable texture transparency of _PARAM0_","Boids movement":"Boids movement","Simulates flocks movement.":"Simulates flocks movement.","Define helper classes JavaScript code.":"Define helper classes JavaScript code.","Define helper classes":"Define helper classes","Define helper classes JavaScript code":"Define helper classes JavaScript code","Move as part of a flock.":"Move as part of a flock.","Boids Movement":"Boids Movement","Maximum speed":"Maximum speed","Maximum acceleration":"Maximum acceleration","Rotate object":"Rotate object","Cohesion sight radius":"Cohesion sight radius","Sight":"Sight","Alignement sight radius":"Alignement sight radius","Separation sight radius":"Separation sight radius","Cohesion decision weight":"Cohesion decision weight","Decision":"Decision","Alignment decision weight":"Alignment decision weight","Separation decision weight":"Separation decision weight","Collision layer":"Collision layer","Intend to move in a given direction.":"Intend to move in a given direction.","Move in a direction":"Move in a direction","_PARAM0_ intent to move in the direction _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ intent to move in the direction _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)","Direction X":"Direction X","Direction Y":"Direction Y","Decision weight":"Decision weight","Intend to move toward a position.":"Intend to move toward a position.","Move toward a position":"Move toward a position","_PARAM0_ intend to move toward _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ intend to move toward _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)","Target X":"Target X","Target Y":"Target Y","Intend to move toward an object.":"Intend to move toward an object.","Move toward an object":"Move toward an object","_PARAM0_ intend to move toward _PARAM2_ (decision weight: _PARAM3_)":"_PARAM0_ intend to move toward _PARAM2_ (decision weight: _PARAM3_)","Targeted object":"Targeted object","Intend to avoid an area with a given center and radius.":"Intend to avoid an area with a given center and radius.","Avoid a position":"Avoid a position","_PARAM0_ intend to avoid a radius of _PARAM4_ around _PARAM2_; _PARAM3_ (decision weight: _PARAM5_)":"_PARAM0_ intend to avoid a radius of _PARAM4_ around _PARAM2_; _PARAM3_ (decision weight: _PARAM5_)","Center X":"Center X","Center Y":"Center Y","Radius":"Radius","Intend to avoid an area from an object center and a given radius.":"Intend to avoid an area from an object center and a given radius.","Avoid an object":"Avoid an object","_PARAM0_ intend to avoid a radius of _PARAM3_ around _PARAM2_ (decision weight: _PARAM4_)":"_PARAM0_ intend to avoid a radius of _PARAM3_ around _PARAM2_ (decision weight: _PARAM4_)","Avoided object":"Avoided object","Return the current speed.":"Return the current speed.","Speed":"Speed","Return the current horizontal speed.":"Return the current horizontal speed.","Velocity X":"Velocity X","Return the current vertical speed.":"Return the current vertical speed.","Velocity Y":"Velocity Y","Check if the object is rotated while moving on its path.":"Check if the object is rotated while moving on its path.","Object Rotated":"Object Rotated","_PARAM0_ is rotated when moving":"_PARAM0_ is rotated when moving","Return the maximum speed.":"Return the maximum speed.","Change the maximum speed of the object.":"Change the maximum speed of the object.","Change the maximum speed of _PARAM0_ to _PARAM2_":"Change the maximum speed of _PARAM0_ to _PARAM2_","Max Speed":"Max Speed","Return the maximum acceleration.":"Return the maximum acceleration.","Change the maximum acceleration of the object.":"Change the maximum acceleration of the object.","Change the maximum acceleration of _PARAM0_ to _PARAM2_":"Change the maximum acceleration of _PARAM0_ to _PARAM2_","Steering Force":"Steering Force","Return the cohesion sight radius.":"Return the cohesion sight radius.","Change the cohesion sight radius.":"Change the cohesion sight radius.","Change the cohesion sight radius of _PARAM0_ to _PARAM2_":"Change the cohesion sight radius of _PARAM0_ to _PARAM2_","Value":"Value","Return the alignment sight radius.":"Return the alignment sight radius.","Alignment sight radius":"Alignment sight radius","Change the alignment sight radius of _PARAM0_ to _PARAM2_":"Change the alignment sight radius of _PARAM0_ to _PARAM2_","Return the separation sight radius.":"Return the separation sight radius.","Change the separation sight radius of _PARAM0_ to _PARAM2_":"Change the separation sight radius of _PARAM0_ to _PARAM2_","Return which weight the cohesion takes in the chosen direction.":"Return which weight the cohesion takes in the chosen direction.","Cohesion weight":"Cohesion weight","Change the weight the cohesion takes in the chosen direction.":"Change the weight the cohesion takes in the chosen direction.","Change the cohesion weight of _PARAM0_ to _PARAM2_":"Change the cohesion weight of _PARAM0_ to _PARAM2_","Return which weight the alignment takes in the chosen direction.":"Return which weight the alignment takes in the chosen direction.","Alignment weight":"Alignment weight","Change the weight the alignment takes in the chosen direction.":"Change the weight the alignment takes in the chosen direction.","Change the alignment weight of _PARAM0_ to _PARAM2_":"Change the alignment weight of _PARAM0_ to _PARAM2_","Return which weight the separation takes in the chosen direction.":"Return which weight the separation takes in the chosen direction.","Separation weight":"Separation weight","Change the weight the separation takes in the chosen direction.":"Change the weight the separation takes in the chosen direction.","Change the separation weight of _PARAM0_ to _PARAM2_":"Change the separation weight of _PARAM0_ to _PARAM2_","Boomerang":"Boomerang","Throw objects that return to thrower after set time or on command.":"Throw objects that return to thrower after set time or on command.","Throw an object that returns to the thrower like a boomerang.":"Throw an object that returns to the thrower like a boomerang.","Throw speed (pixels per second)":"Throw speed (pixels per second)","Time before changing directions (seconds)":"Time before changing directions (seconds)","Rotation (degrees per second)":"Rotation (degrees per second)","Thrower X position":"Thrower X position","Thrower Y position":"Thrower Y position","Boomerang is returning":"Boomerang is returning","Throw boomerang toward an angle.":"Throw boomerang toward an angle.","Throw boomerang toward an angle":"Throw boomerang toward an angle","Throw boomerang _PARAM0_ toward angle _PARAM2_ degrees, speed of _PARAM3_ pixels per second, rotating _PARAM5_ degrees per second, and send boomerang back after of _PARAM4_ seconds":"Throw boomerang _PARAM0_ toward angle _PARAM2_ degrees, speed of _PARAM3_ pixels per second, rotating _PARAM5_ degrees per second, and send boomerang back after of _PARAM4_ seconds","Angle (degrees)":"Angle (degrees)","Throw boomerang toward a position.":"Throw boomerang toward a position.","Throw boomerang toward a position":"Throw boomerang toward a position","Throw boomerang _PARAM0_ toward _PARAM2_;_PARAM3_ at a speed of _PARAM4_ pixels per second, rotating _PARAM6_ degrees per second, and send boomerang back after of _PARAM5_ seconds":"Throw boomerang _PARAM0_ toward _PARAM2_;_PARAM3_ at a speed of _PARAM4_ pixels per second, rotating _PARAM6_ degrees per second, and send boomerang back after of _PARAM5_ seconds","Target X position":"Target X position","Target Y position":"Target Y position","Send boomerang back to thrower.":"Send boomerang back to thrower.","Send boomerang back to thrower":"Send boomerang back to thrower","Send boomerang _PARAM0_ back to thrower":"Send boomerang _PARAM0_ back to thrower","Set amount of time before boomerang changes directions (seconds).":"Set amount of time before boomerang changes directions (seconds).","Set amount of time before boomerang changes directions":"Set amount of time before boomerang changes directions","Set amount of time before _PARAM0_ changes directions to _PARAM2_ (seconds)":"Set amount of time before _PARAM0_ changes directions to _PARAM2_ (seconds)","Time before boomerange changes direction (seconds)":"Time before boomerange changes direction (seconds)","Track position of boomerang thrower.":"Track position of boomerang thrower.","Track position of boomerang thrower":"Track position of boomerang thrower","Track position of thrower _PARAM2_ who threw boomerang _PARAM0_":"Track position of thrower _PARAM2_ who threw boomerang _PARAM0_","Thrower":"Thrower","Boomerang is returning to thrower.":"Boomerang is returning to thrower.","Boomerang is returning to thrower":"Boomerang is returning to thrower","Boomerang _PARAM0_ is returning to thrower":"Boomerang _PARAM0_ is returning to thrower","Bounce (using forces)":"Bounce (using forces)","Bounce objects off collisions using forces. Not for Physics engine or Platformer.":"Bounce objects off collisions using forces. Not for Physics engine or Platformer.","Provides an action to make the object bounce from another object it just touched. Add a permanent force to the object and, when in collision with another one, use the action to make it bounce realistically.":"Provides an action to make the object bounce from another object it just touched. Add a permanent force to the object and, when in collision with another one, use the action to make it bounce realistically.","Bounce":"Bounce","Bounce count":"Bounce count","Number of times this object has bounced off another object":"Number of times this object has bounced off another object","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.","Bounce off another object":"Bounce off another object","Bounce _PARAM0_ off _PARAM2_":"Bounce _PARAM0_ off _PARAM2_","The objects to bounce on":"The objects to bounce on","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be calculated *to go toward the specified angle (the \"normal angle\")*. For example, if the object is arriving at this exact angle, it will bounce in the opposite direction.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be calculated *to go toward the specified angle (the \"normal angle\")*. For example, if the object is arriving at this exact angle, it will bounce in the opposite direction.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.","Bounce off another object toward a specified angle":"Bounce off another object toward a specified angle","Bounce _PARAM0_ off _PARAM2_ assuming a normal angle of _PARAM3_":"Bounce _PARAM0_ off _PARAM2_ assuming a normal angle of _PARAM3_","The \"normal\" angle, in degrees, to bounce against":"The \"normal\" angle, in degrees, to bounce against","This can be understood at the direction that the bounce must go toward.":"This can be understood at the direction that the bounce must go toward.","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be vertical, like if the object is *colliding a perfectly horizontal obstacle* (like the top/bottom of the screen in a pong game). For example, if the object is arriving with an angle of exactly 90 degrees, it will bounce in the opposite direction: -90 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be vertical, like if the object is *colliding a perfectly horizontal obstacle* (like the top/bottom of the screen in a pong game). For example, if the object is arriving with an angle of exactly 90 degrees, it will bounce in the opposite direction: -90 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.","Bounce vertically":"Bounce vertically","Bounce _PARAM0_ off _PARAM2_ - always vertically":"Bounce _PARAM0_ off _PARAM2_ - always vertically","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be horizontal, like if the object is *colliding a perfectly vertical obstacle* (like paddles in a pong game). For example, if the object is arriving with an angle of exactly 0 degrees, it will bounce in the opposite direction: 180 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be horizontal, like if the object is *colliding a perfectly vertical obstacle* (like paddles in a pong game). For example, if the object is arriving with an angle of exactly 0 degrees, it will bounce in the opposite direction: 180 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.","Bounce horizontally":"Bounce horizontally","Bounce _PARAM0_ off _PARAM2_ - always horizontally":"Bounce _PARAM0_ off _PARAM2_ - always horizontally","the number of times this object has bounced off another object.":"the number of times this object has bounced off another object.","the bounce count":"the bounce count","Button states and effects":"Button states and effects","Use any object as a button and change appearance according to user interactions.":"Use any object as a button and change appearance according to user interactions.","Use objects as buttons.":"Use objects as buttons.","Button states":"Button states","Should check hovering":"Should check hovering","State":"State","Touch id":"Touch id","Touch is inside":"Touch is inside","Mouse is inside":"Mouse is inside","Reset the state of the button.":"Reset the state of the button.","Reset state":"Reset state","Reset the button state of _PARAM0_":"Reset the button state of _PARAM0_","Check if the button is not used.":"Check if the button is not used.","Is idle":"Is idle","_PARAM0_ is idle":"_PARAM0_ is idle","Check if the button was just clicked.":"Check if the button was just clicked.","Is clicked":"Is clicked","_PARAM0_ is clicked":"_PARAM0_ is clicked","Check if the cursor is hovered over the button.":"Check if the cursor is hovered over the button.","Is hovered":"Is hovered","_PARAM0_ is hovered":"_PARAM0_ is hovered","Check if the button is either hovered or pressed but not hovered.":"Check if the button is either hovered or pressed but not hovered.","Is focused":"Is focused","_PARAM0_ is focused":"_PARAM0_ is focused","Check if the button is currently being pressed with mouse or touch.":"Check if the button is currently being pressed with mouse or touch.","Is pressed":"Is pressed","_PARAM0_ is pressed":"_PARAM0_ is pressed","Check if the button is currently being pressed outside with mouse or touch.":"Check if the button is currently being pressed outside with mouse or touch.","Is held outside":"Is held outside","_PARAM0_ is held outside":"_PARAM0_ is held outside","the touch id that is using the button or 0 if none.":"the touch id that is using the button or 0 if none.","the touch id":"the touch id","Enable effects on buttons based on their state.":"Enable effects on buttons based on their state.","Button object effects":"Button object effects","Effect capability":"Effect capability","Idle state effect":"Idle state effect","Effects":"Effects","Focused state effect":"Focused state effect","The state is Focused when the button is hovered or held outside.":"The state is Focused when the button is hovered or held outside.","Pressed state effect":"Pressed state effect","the idle state effect of the object.":"the idle state effect of the object.","the idle state effect":"the idle state effect","the focused state effect of the object. The state is Focused when the button is hovered or held outside.":"the focused state effect of the object. The state is Focused when the button is hovered or held outside.","the focused state effect":"the focused state effect","the pressed state effect of the object.":"the pressed state effect of the object.","the pressed state effect":"the pressed state effect","Change the animation of buttons according to their state.":"Change the animation of buttons according to their state.","Button animation":"Button animation","Idle state animation name":"Idle state animation name","Animation":"Animation","Focused state animation name":"Focused state animation name","Pressed state animation name":"Pressed state animation name","the idle state animation name of the object.":"the idle state animation name of the object.","the idle state animation name":"the idle state animation name","the focused state animation name of the object. The state is Focused when the button is hovered or held outside.":"the focused state animation name of the object. The state is Focused when the button is hovered or held outside.","the focused state animation name":"the focused state animation name","the pressed state animation name of the object.":"the pressed state animation name of the object.","the pressed state animation name":"the pressed state animation name","Smoothly change an effect on buttons according to their state.":"Smoothly change an effect on buttons according to their state.","Button object effect tween":"Button object effect tween","Effect name":"Effect name","Effect":"Effect","Effect parameter":"Effect parameter","The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.","Idle effect parameter value":"Idle effect parameter value","Focused effect parameter value":"Focused effect parameter value","Pressed effect parameter value":"Pressed effect parameter value","Fade-in easing":"Fade-in easing","Fade-out easing":"Fade-out easing","Fade-in duration":"Fade-in duration","Fade-out duration":"Fade-out duration","Disable the effect in idle state":"Disable the effect in idle state","Time delta":"Time delta","Fade in":"Fade in","_PARAM0_ fade in to _PARAM2_":"_PARAM0_ fade in to _PARAM2_","Fade out":"Fade out","_PARAM0_ fade out to _PARAM2_":"_PARAM0_ fade out to _PARAM2_","Play tween":"Play tween","Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing":"Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing","Duration (in seconds)":"Duration (in seconds)","Easing":"Easing","the effect name of the object.":"the effect name of the object.","the effect name":"the effect name","the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.","the effect parameter":"the effect parameter","Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.","Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_":"Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_","Parameter name":"Parameter name","the idle effect parameter value of the object.":"the idle effect parameter value of the object.","the idle effect parameter value":"the idle effect parameter value","the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.":"the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.","the focused effect parameter value":"the focused effect parameter value","the pressed effect parameter value of the object.":"the pressed effect parameter value of the object.","the pressed effect parameter value":"the pressed effect parameter value","the fade-in easing of the object.":"the fade-in easing of the object.","the fade-in easing":"the fade-in easing","the fade-out easing of the object.":"the fade-out easing of the object.","the fade-out easing":"the fade-out easing","the fade-in duration of the object.":"the fade-in duration of the object.","the fade-in duration":"the fade-in duration","the fade-out duration of the object.":"the fade-out duration of the object.","the fade-out duration":"the fade-out duration","Smoothly resize buttons according to their state.":"Smoothly resize buttons according to their state.","Button scale tween":"Button scale tween","Scalable capability":"Scalable capability","Button states behavior (required)":"Button states behavior (required)","Tween behavior (required)":"Tween behavior (required)","Idle state size scale":"Idle state size scale","Size":"Size","Focused state size scale":"Focused state size scale","Pressed state size scale":"Pressed state size scale","the idle state size scale of the object.":"the idle state size scale of the object.","the idle state size scale":"the idle state size scale","the focused state size scale of the object. The state is Focused when the button is hovered or held outside.":"the focused state size scale of the object. The state is Focused when the button is hovered or held outside.","the focused state size scale":"the focused state size scale","the pressed state size scale of the object.":"the pressed state size scale of the object.","the pressed state size scale":"the pressed state size scale","Smoothly change the color tint of buttons according to their state.":"Smoothly change the color tint of buttons according to their state.","Button color tint tween":"Button color tint tween","Tween":"Tween","Idle state color tint":"Idle state color tint","Color":"Color","Focused state color tint":"Focused state color tint","Pressed state color tint":"Pressed state color tint","the idle state color tint of the object.":"the idle state color tint of the object.","the idle state color tint":"the idle state color tint","the focused state color tint of the object. The state is Focused when the button is hovered or held outside.":"the focused state color tint of the object. The state is Focused when the button is hovered or held outside.","the focused state color tint":"the focused state color tint","the pressed state color tint of the object.":"the pressed state color tint of the object.","the pressed state color tint":"the pressed state color tint","Camera impulse":"Camera impulse","Camera impulse movement for earthquake or impact effects.":"Camera impulse movement for earthquake or impact effects.","Camera":"Camera","Add an impulse to the camera position.":"Add an impulse to the camera position.","Add a camera impulse":"Add a camera impulse","Add an impulse _PARAM1_ to the camera from layer _PARAM2_ with an amplitude of _PARAM3_ and an angle of _PARAM4_, going away in _PARAM5_ seconds with _PARAM6_ easing, staying _PARAM7_ seconds, going back in _PARAM8_ seconds with _PARAM9_ easing":"Add an impulse _PARAM1_ to the camera from layer _PARAM2_ with an amplitude of _PARAM3_ and an angle of _PARAM4_, going away in _PARAM5_ seconds with _PARAM6_ easing, staying _PARAM7_ seconds, going back in _PARAM8_ seconds with _PARAM9_ easing","Identifier":"Identifier","Layer":"Layer","Displacement X":"Displacement X","Displacement Y":"Displacement Y","Get away duration (in seconds)":"Get away duration (in seconds)","Get away easing":"Get away easing","Stay duration (in seconds)":"Stay duration (in seconds)","Get back duration (in seconds)":"Get back duration (in seconds)","Get back easing":"Get back easing","Add a camera impulse (angle)":"Add a camera impulse (angle)","Amplitude":"Amplitude","Angle (in degree)":"Angle (in degree)","Check if a camera impulse is playing.":"Check if a camera impulse is playing.","Camera impulse is playing":"Camera impulse is playing","Camera impulse _PARAM1_ is playing":"Camera impulse _PARAM1_ is playing","Camera shake":"Camera shake","Shake layer cameras.":"Shake layer cameras.","Shake the camera on layers chosen with configuration actions.":"Shake the camera on layers chosen with configuration actions.","Shake camera":"Shake camera","Shake camera for _PARAM1_ seconds with _PARAM2_ seconds of easing to start and _PARAM3_ seconds to stop":"Shake camera for _PARAM1_ seconds with _PARAM2_ seconds of easing to start and _PARAM3_ seconds to stop","Ease duration to start (in seconds)":"Ease duration to start (in seconds)","Ease duration to stop (in seconds)":"Ease duration to stop (in seconds)","Shake the camera on the specified layer, using one or more ways to shake (position, angle, zoom). This action is deprecated. Please use the other one with the same name.":"Shake the camera on the specified layer, using one or more ways to shake (position, angle, zoom). This action is deprecated. Please use the other one with the same name.","Shake camera (deprecated)":"Shake camera (deprecated)","Shake camera on _PARAM3_ layer for _PARAM5_ seconds. Use an amplitude of _PARAM1_px on X axis and _PARAM2_px on Y axis, angle rotation amplitude _PARAM6_ degrees, and zoom amplitude _PARAM7_ percent. Wait _PARAM8_ seconds between shakes. Keep shaking until stopped: _PARAM9_":"Shake camera on _PARAM3_ layer for _PARAM5_ seconds. Use an amplitude of _PARAM1_px on X axis and _PARAM2_px on Y axis, angle rotation amplitude _PARAM6_ degrees, and zoom amplitude _PARAM7_ percent. Wait _PARAM8_ seconds between shakes. Keep shaking until stopped: _PARAM9_","Amplitude of shaking on the X axis (in pixels)":"Amplitude of shaking on the X axis (in pixels)","Amplitude of shaking on the Y axis (in pixels)":"Amplitude of shaking on the Y axis (in pixels)","Layer (base layer if empty)":"Layer (base layer if empty)","Camera index (Default: 0)":"Camera index (Default: 0)","Duration (in seconds) (Default: 0.5)":"Duration (in seconds) (Default: 0.5)","Angle rotation amplitude (in degrees) (For example: 2)":"Angle rotation amplitude (in degrees) (For example: 2)","Zoom factor amplitude":"Zoom factor amplitude","Period between shakes (in seconds) (Default: 0.08)":"Period between shakes (in seconds) (Default: 0.08)","Keep shaking until stopped":"Keep shaking until stopped","Duration value will be ignored":"Duration value will be ignored","Start shaking the camera indefinitely.":"Start shaking the camera indefinitely.","Start camera shaking":"Start camera shaking","Start shaking the camera with _PARAM1_ seconds of easing":"Start shaking the camera with _PARAM1_ seconds of easing","Ease duration (in seconds)":"Ease duration (in seconds)","Stop shaking the camera.":"Stop shaking the camera.","Stop camera shaking":"Stop camera shaking","Stop shaking the camera with _PARAM1_ seconds of easing":"Stop shaking the camera with _PARAM1_ seconds of easing","Mark a layer as shakable.":"Mark a layer as shakable.","Shakable layer":"Shakable layer","Mark the layer: _PARAM2_ as shakable: _PARAM1_":"Mark the layer: _PARAM2_ as shakable: _PARAM1_","Shakable":"Shakable","Check if the camera is shaking.":"Check if the camera is shaking.","Camera is shaking":"Camera is shaking","Change the translation amplitude of the shaking (in pixels).":"Change the translation amplitude of the shaking (in pixels).","Layer translation amplitude":"Layer translation amplitude","Change the translation amplitude of the shaking to _PARAM1_; _PARAM2_ (layer: _PARAM3_)":"Change the translation amplitude of the shaking to _PARAM1_; _PARAM2_ (layer: _PARAM3_)","Change the rotation amplitude of the shaking (in degrees).":"Change the rotation amplitude of the shaking (in degrees).","Layer rotation amplitude":"Layer rotation amplitude","Change the rotation amplitude of the shaking to _PARAM1_ degrees (layer: _PARAM2_)":"Change the rotation amplitude of the shaking to _PARAM1_ degrees (layer: _PARAM2_)","NewLayerName":"NewLayerName","Change the zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"Change the zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).","Layer zoom amplitude":"Layer zoom amplitude","Change the zoom factor amplitude of the shaking to _PARAM1_ (layer: _PARAM2_)":"Change the zoom factor amplitude of the shaking to _PARAM1_ (layer: _PARAM2_)","Zoom factor":"Zoom factor","Change the number of back and forth per seconds.":"Change the number of back and forth per seconds.","Layer shaking frequency":"Layer shaking frequency","Change the shaking frequency to _PARAM1_ (layer: _PARAM2_)":"Change the shaking frequency to _PARAM1_ (layer: _PARAM2_)","Frequency":"Frequency","Change the default translation amplitude of the shaking (in pixels).":"Change the default translation amplitude of the shaking (in pixels).","Default translation amplitude":"Default translation amplitude","Change the default translation amplitude of the shaking to _PARAM1_; _PARAM2_":"Change the default translation amplitude of the shaking to _PARAM1_; _PARAM2_","Change the default rotation amplitude of the shaking (in degrees).":"Change the default rotation amplitude of the shaking (in degrees).","Default rotation amplitude":"Default rotation amplitude","Change the default rotation amplitude of the shaking to _PARAM1_ degrees":"Change the default rotation amplitude of the shaking to _PARAM1_ degrees","Change the default zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"Change the default zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).","Default zoom amplitude":"Default zoom amplitude","Change the default zoom factor amplitude of the shaking to _PARAM1_":"Change the default zoom factor amplitude of the shaking to _PARAM1_","Change the default number of back and forth per seconds.":"Change the default number of back and forth per seconds.","Default shaking frequency":"Default shaking frequency","Change the default shaking frequency to _PARAM1_":"Change the default shaking frequency to _PARAM1_","Generate a number from 2 dimensional simplex noise.":"Generate a number from 2 dimensional simplex noise.","2D noise":"2D noise","Generator name":"Generator name","X coordinate":"X coordinate","Y coordinate":"Y coordinate","Generate a number from 3 dimensional simplex noise.":"Generate a number from 3 dimensional simplex noise.","3D noise":"3D noise","Z coordinate":"Z coordinate","Generate a number from 4 dimensional simplex noise.":"Generate a number from 4 dimensional simplex noise.","4D noise":"4D noise","W coordinate":"W coordinate","Create a noise generator with default settings (frequency = 1, octaves = 1, persistence = 0.5, lacunarity = 2).":"Create a noise generator with default settings (frequency = 1, octaves = 1, persistence = 0.5, lacunarity = 2).","Create a noise generator":"Create a noise generator","Create a noise generator named _PARAM1_":"Create a noise generator named _PARAM1_","Delete a noise generator and loose its settings.":"Delete a noise generator and loose its settings.","Delete a noise generator":"Delete a noise generator","Delete _PARAM1_ noise generator":"Delete _PARAM1_ noise generator","Delete all noise generators and loose their settings.":"Delete all noise generators and loose their settings.","Delete all noise generators":"Delete all noise generators","The seed is a number used to generate the random noise. Setting the same seed will result in the same random noise generation. It's for example useful to generate the same world, by saving this seed value and reusing it later to generate again a world.":"The seed is a number used to generate the random noise. Setting the same seed will result in the same random noise generation. It's for example useful to generate the same world, by saving this seed value and reusing it later to generate again a world.","Noise seed":"Noise seed","Change the noise seed to _PARAM1_":"Change the noise seed to _PARAM1_","Seed":"Seed","15 digits numbers maximum":"15 digits numbers maximum","Change the looping period on X used for noise generation. The noise will wrap-around on X.":"Change the looping period on X used for noise generation. The noise will wrap-around on X.","Noise looping period on X":"Noise looping period on X","Change the looping period on X of _PARAM2_: _PARAM1_":"Change the looping period on X of _PARAM2_: _PARAM1_","Looping period on X":"Looping period on X","Change the looping period on Y used for noise generation. The noise will wrap-around on Y.":"Change the looping period on Y used for noise generation. The noise will wrap-around on Y.","Noise looping period on Y":"Noise looping period on Y","Change the looping period on Y of _PARAM2_: _PARAM1_":"Change the looping period on Y of _PARAM2_: _PARAM1_","Looping period on Y":"Looping period on Y","Change the base frequency used for noise generation. A lower frequency will zoom in the noise.":"Change the base frequency used for noise generation. A lower frequency will zoom in the noise.","Noise base frequency":"Noise base frequency","Change the noise frequency of _PARAM2_: _PARAM1_":"Change the noise frequency of _PARAM2_: _PARAM1_","Change the number of octaves used for noise generation. It can be seen as layers of noise with different zoom.":"Change the number of octaves used for noise generation. It can be seen as layers of noise with different zoom.","Noise octaves":"Noise octaves","Change the number of noise octaves of _PARAM2_: _PARAM1_":"Change the number of noise octaves of _PARAM2_: _PARAM1_","Octaves":"Octaves","Change the persistence used for noise generation. At its default value \"0.5\", it halves the noise amplitude at each octave.":"Change the persistence used for noise generation. At its default value \"0.5\", it halves the noise amplitude at each octave.","Noise persistence":"Noise persistence","Change the noise persistence of _PARAM2_: _PARAM1_":"Change the noise persistence of _PARAM2_: _PARAM1_","Persistence":"Persistence","Change the lacunarity used for noise generation. At its default value \"2\", it doubles the frequency at each octave.":"Change the lacunarity used for noise generation. At its default value \"2\", it doubles the frequency at each octave.","Noise lacunarity":"Noise lacunarity","Change the noise lacunarity of _PARAM2_: _PARAM1_":"Change the noise lacunarity of _PARAM2_: _PARAM1_","Lacunarity":"Lacunarity","The seed used for noise generation.":"The seed used for noise generation.","The base frequency used for noise generation.":"The base frequency used for noise generation.","The number of octaves used for noise generation.":"The number of octaves used for noise generation.","Noise octaves number":"Noise octaves number","The persistence used for noise generation.":"The persistence used for noise generation.","The lacunarity used for noise generation.":"The lacunarity used for noise generation.","Camera Zoom":"Camera Zoom","Zoom camera smoothly with optional anchor point.":"Zoom camera smoothly with optional anchor point.","Change the camera zoom at a given speed (in factor per second).":"Change the camera zoom at a given speed (in factor per second).","Zoom camera with speed":"Zoom camera with speed","Zoom camera with speed: _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"Zoom camera with speed: _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)","Zoom speed":"Zoom speed","Zoom by a factor per second. 1: no effect, 2: zoom in x2 every second, 0.5: zoom out x2 every second.":"Zoom by a factor per second. 1: no effect, 2: zoom in x2 every second, 0.5: zoom out x2 every second.","Camera number (default: 0)":"Camera number (default: 0)","Change the camera zoom and keep an anchor point fixed on screen (instead of the center).":"Change the camera zoom and keep an anchor point fixed on screen (instead of the center).","Zoom with anchor":"Zoom with anchor","Change camera zoom to: _PARAM1_ with an anchor at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"Change camera zoom to: _PARAM1_ with an anchor at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)","Zoom":"Zoom","1: Initial zoom, 2: zoom in x2, 0.5: zoom out x2...":"1: Initial zoom, 2: zoom in x2, 0.5: zoom out x2...","Anchor X":"Anchor X","Anchor Y":"Anchor Y","Change the camera zoom at a given speed (in factor per second) and keep an anchor point fixed on screen (instead of the center).":"Change the camera zoom at a given speed (in factor per second) and keep an anchor point fixed on screen (instead of the center).","Zoom camera with speed and anchor":"Zoom camera with speed and anchor","Zoom camera with speed: _PARAM1_ and an anchror at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"Zoom camera with speed: _PARAM1_ and an anchror at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)","Cancellable draggable object":"Cancellable draggable object","Cancel drag and smoothly tween object back to original position.":"Cancel drag and smoothly tween object back to original position.","Allow to cancel the drag of an object and make it smoothly return to its original position (with a tween).":"Allow to cancel the drag of an object and make it smoothly return to its original position (with a tween).","Cancellable Draggable object":"Cancellable Draggable object","Draggable behavior":"Draggable behavior","Tween behavior":"Tween behavior","Original X":"Original X","Original Y":"Original Y","Cancel last drag.":"Cancel last drag.","Cancel drag (deprecated)":"Cancel drag (deprecated)","Cancel last dragging of _PARAM0_ in _PARAM2_ ms with easing _PARAM3_":"Cancel last dragging of _PARAM0_ in _PARAM2_ ms with easing _PARAM3_","Duration in milliseconds":"Duration in milliseconds","Cancel drag":"Cancel drag","Cancel last dragging of _PARAM0_ with easing _PARAM3_ in _PARAM2_ seconds":"Cancel last dragging of _PARAM0_ with easing _PARAM3_ in _PARAM2_ seconds","Duration in seconds":"Duration in seconds","Dragging is cancelled, the object is returning to its original position.":"Dragging is cancelled, the object is returning to its original position.","Dragging is cancelled":"Dragging is cancelled","_PARAM0_ dragging is cancelled":"_PARAM0_ dragging is cancelled","Checkbox (for Shape Painter)":"Checkbox (for Shape Painter)","Checkbox on Shape Painter. Toggle by click/touch, customizable appearance and halo.":"Checkbox on Shape Painter. Toggle by click/touch, customizable appearance and halo.","Checkbox that can be toggled by a left-click or touch.":"Checkbox that can be toggled by a left-click or touch.","Checkbox":"Checkbox","Checked":"Checked","Checkbox state":"Checkbox state","Halo size (hover). If blank, this is set to \"SideLength\".":"Halo size (hover). If blank, this is set to \"SideLength\".","Checkbox appearance":"Checkbox appearance","Halo opacity (hover)":"Halo opacity (hover)","Halo opacity (pressed)":"Halo opacity (pressed)","Enable interactions":"Enable interactions","State of the checkbox has changed. (Used in \"ToggleChecked\" function)":"State of the checkbox has changed. (Used in \"ToggleChecked\" function)","Primary color of checkbox. (Example: 24;119;211) Fill color when box is checked.":"Primary color of checkbox. (Example: 24;119;211) Fill color when box is checked.","Secondary color of checkbox. (Example: 255;255;255) Color of checkmark when box is checked.":"Secondary color of checkbox. (Example: 255;255;255) Color of checkmark when box is checked.","Length of each side (px) Minimum: 10":"Length of each side (px) Minimum: 10","Line width of checkmark (px) (Min: 1, Max: 1/4 * SideLength)":"Line width of checkmark (px) (Min: 1, Max: 1/4 * SideLength)","Border thickness (px) This border is only visible when the checkbox is unchecked.":"Border thickness (px) This border is only visible when the checkbox is unchecked.","Halo size (pressed). If blank, this is set to \"HaloRadiusHover * 1.1\"":"Halo size (pressed). If blank, this is set to \"HaloRadiusHover * 1.1\"","Check (or uncheck) the checkbox.":"Check (or uncheck) the checkbox.","Check (or uncheck) the checkbox":"Check (or uncheck) the checkbox","Add checkmark to _PARAM0_: _PARAM2_":"Add checkmark to _PARAM0_: _PARAM2_","Check the checkbox?":"Check the checkbox?","Enable or disable interactions with the checkbox. Users cannot interact while it is disabled.":"Enable or disable interactions with the checkbox. Users cannot interact while it is disabled.","Enable interactions with checkbox":"Enable interactions with checkbox","Enable interactions of _PARAM0_: _PARAM2_":"Enable interactions of _PARAM0_: _PARAM2_","Enable":"Enable","If checked, change to unchecked. If unchecked, change to checked.":"If checked, change to unchecked. If unchecked, change to checked.","Toggle checkmark":"Toggle checkmark","Toggle checkmark on _PARAM0_":"Toggle checkmark on _PARAM0_","Change the primary color of checkbox.":"Change the primary color of checkbox.","Primary color of checkbox":"Primary color of checkbox","Change the primary color of _PARAM0_: _PARAM2_":"Change the primary color of _PARAM0_: _PARAM2_","Primary color":"Primary color","Change the secondary color of checkbox.":"Change the secondary color of checkbox.","Secondary color of checkbox":"Secondary color of checkbox","Change the secondary color of _PARAM0_: _PARAM2_":"Change the secondary color of _PARAM0_: _PARAM2_","Secondary color":"Secondary color","Change the halo opacity when pressed.":"Change the halo opacity when pressed.","Halo opacity when pressed":"Halo opacity when pressed","Change the halo opacity of _PARAM0_ when pressed: _PARAM2_":"Change the halo opacity of _PARAM0_ when pressed: _PARAM2_","Halo opacity":"Halo opacity","Change the halo opacity when hovered.":"Change the halo opacity when hovered.","Halo opacity when hovered":"Halo opacity when hovered","Change the halo opacity of _PARAM0_ when hovered: _PARAM2_":"Change the halo opacity of _PARAM0_ when hovered: _PARAM2_","Change the halo radius when pressed.":"Change the halo radius when pressed.","Halo radius when pressed":"Halo radius when pressed","Change the halo radius of _PARAM0_ when pressed: _PARAM2_ px":"Change the halo radius of _PARAM0_ when pressed: _PARAM2_ px","Halo radius":"Halo radius","Change the halo radius when hovered. This size is also used to detect interaction with the checkbox.":"Change the halo radius when hovered. This size is also used to detect interaction with the checkbox.","Halo radius when hovered":"Halo radius when hovered","Change the halo radius of _PARAM0_ when hovered: _PARAM2_ px":"Change the halo radius of _PARAM0_ when hovered: _PARAM2_ px","Change the border thickness of checkbox.":"Change the border thickness of checkbox.","Border thickness of checkbox":"Border thickness of checkbox","Change the border thickness of _PARAM0_: _PARAM2_ px":"Change the border thickness of _PARAM0_: _PARAM2_ px","Track thickness":"Track thickness","Change the side length of checkbox.":"Change the side length of checkbox.","Side length of checkbox":"Side length of checkbox","Change the side length of _PARAM0_: _PARAM2_ px":"Change the side length of _PARAM0_: _PARAM2_ px","Track width (px)":"Track width (px)","Change the line width of checkmark.":"Change the line width of checkmark.","Line width of checkmark":"Line width of checkmark","Change the line width of _PARAM0_: _PARAM2_ px":"Change the line width of _PARAM0_: _PARAM2_ px","Line width (px)":"Line width (px)","Check if the checkbox is checked.":"Check if the checkbox is checked.","Is checked":"Is checked","_PARAM0_ is checked":"_PARAM0_ is checked","Check if the checkbox interations are enabled.":"Check if the checkbox interations are enabled.","Interactions enabled":"Interactions enabled","Interactions of _PARAM0_ are enabled":"Interactions of _PARAM0_ are enabled","Return the color used to draw the outline of the checkbox (when unchecked) and the fill color (when checked).":"Return the color used to draw the outline of the checkbox (when unchecked) and the fill color (when checked).","Change the maximum value of _PARAM0_: _PARAM2_":"Change the maximum value of _PARAM0_: _PARAM2_","Return the color used to fill the checkbox (when unchecked) and to draw the checkmark (when checked).":"Return the color used to fill the checkbox (when unchecked) and to draw the checkmark (when checked).","Return the radius of the halo while the checkbox is touched or clicked.":"Return the radius of the halo while the checkbox is touched or clicked.","Halo radius while touched or clicked":"Halo radius while touched or clicked","Return the opacity of the halo while the checkbox is touched or clicked.":"Return the opacity of the halo while the checkbox is touched or clicked.","Halo opacity (while touched or clicked)":"Halo opacity (while touched or clicked)","Return the radius of the halo when the mouse is hovering near the checkbox.":"Return the radius of the halo when the mouse is hovering near the checkbox.","Halo radius (during hover)":"Halo radius (during hover)","Return the opacity of the halo when the mouse is hovering near the checkbox.":"Return the opacity of the halo when the mouse is hovering near the checkbox.","Halo opacity (during hover)":"Halo opacity (during hover)","Return the line width of checkmark (pixels).":"Return the line width of checkmark (pixels).","Line width":"Line width","Return the side length of checkbox (pixels).":"Return the side length of checkbox (pixels).","Side length":"Side length","Return the border thickness of checkbox (pixels).":"Return the border thickness of checkbox (pixels).","Border thickness":"Border thickness","Check if the checkbox is being pressed by mouse or touch.":"Check if the checkbox is being pressed by mouse or touch.","Checkbox is being pressed":"Checkbox is being pressed","_PARAM0_ is being pressed by mouse or touch":"_PARAM0_ is being pressed by mouse or touch","Update the hitbox.":"Update the hitbox.","Update hitbox":"Update hitbox","Update the hitbox of _PARAM0_":"Update the hitbox of _PARAM0_","Checkpoints":"Checkpoints","Respawn objects at checkpoints.":"Respawn objects at checkpoints.","Game mechanic":"Game mechanic","Update a checkpoint of an object.":"Update a checkpoint of an object.","Save checkpoint":"Save checkpoint","Save checkpoint _PARAM4_ of _PARAM1_ to _PARAM2_ (x-axis), _PARAM3_ (y-axis)":"Save checkpoint _PARAM4_ of _PARAM1_ to _PARAM2_ (x-axis), _PARAM3_ (y-axis)","Save checkpoint of object":"Save checkpoint of object","X position":"X position","Y position":"Y position","Checkpoint name":"Checkpoint name","Change the position of the object to the saved checkpoint.":"Change the position of the object to the saved checkpoint.","Load checkpoint":"Load checkpoint","Move _PARAM2_ to checkpoint _PARAM3_ of _PARAM1_":"Move _PARAM2_ to checkpoint _PARAM3_ of _PARAM1_","Load checkpoint from object":"Load checkpoint from object","Change position of object":"Change position of object","Ignore (possibly) empty checkpoints":"Ignore (possibly) empty checkpoints","Loading not yet saved checkpoints will (by default) set the position to the coordinate 0;0. Select \"yes\" to completely ignore non-existant checkpoints. To define an alternative checkpoint for it, create a new event and use the \"Checkpoint exists\" condition, save the wanted checkpoint as the action.":"Loading not yet saved checkpoints will (by default) set the position to the coordinate 0;0. Select \"yes\" to completely ignore non-existant checkpoints. To define an alternative checkpoint for it, create a new event and use the \"Checkpoint exists\" condition, save the wanted checkpoint as the action.","Check if a checkpoint has a position saved / does exist.":"Check if a checkpoint has a position saved / does exist.","Checkpoint exists":"Checkpoint exists","Checkpoint _PARAM2_ of _PARAM1_ exists":"Checkpoint _PARAM2_ of _PARAM1_ exists","Check checkpoint from object":"Check checkpoint from object","Clipboard":"Clipboard","Read and write text to/from the system clipboard.":"Read and write text to/from the system clipboard.","Read the text from the clipboard asynchronously. \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"Read the text from the clipboard asynchronously. \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.","Get text from the clipboard":"Get text from the clipboard","Read clipboard and store text in _PARAM1_":"Read clipboard and store text in _PARAM1_","Callback variable where to store the clipboard contents":"Callback variable where to store the clipboard contents","Write the text in the clipboard.":"Write the text in the clipboard.","Write text to the clipboard":"Write text to the clipboard","Write _PARAM1_ to clipboard":"Write _PARAM1_ to clipboard","Text to write to clipboard":"Text to write to clipboard","Read the text from the clipboard asynchronously. As this is \"asynchronous\", the variable won't be immediately filled with the text from the clipboard. You will have to wait a few frames before it will be. If you want your subsequent actions and subevents to automatically wait for the read to finish, use the waiting version of this action instead (recomended). \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"Read the text from the clipboard asynchronously. As this is \"asynchronous\", the variable won't be immediately filled with the text from the clipboard. You will have to wait a few frames before it will be. If you want your subsequent actions and subevents to automatically wait for the read to finish, use the waiting version of this action instead (recomended). \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.","(No waiting) Get text from the clipboard":"(No waiting) Get text from the clipboard","Callback variable where to store the result":"Callback variable where to store the result","[DEPRECATED] Read the text from the clipboard (Windows, macOS, Linux only)":"[DEPRECATED] Read the text from the clipboard (Windows, macOS, Linux only)","[DEPRECATED] Get text from the clipboard (Windows, macOS, Linux)":"[DEPRECATED] Get text from the clipboard (Windows, macOS, Linux)","Volume settings":"Volume settings","Collapsible volume menu object with slider and mute button.":"Collapsible volume menu object with slider and mute button.","Check if the events are running for the editor.":"Check if the events are running for the editor.","Editor is running":"Editor is running","Events are running for the editor":"Events are running for the editor","Collapsible volume setting menu.":"Collapsible volume setting menu.","Show the volum controls.":"Show the volum controls.","Open volum controls":"Open volum controls","Open _PARAM0_ volum controls":"Open _PARAM0_ volum controls","Hide the volum controls.":"Hide the volum controls.","Close volum controls":"Close volum controls","Close _PARAM0_ volum controls":"Close _PARAM0_ volum controls","Color Conversion":"Color Conversion","Convert colors between RGB, HSV, HSL, hex, named. Blend and WCAG luminance.":"Convert colors between RGB, HSV, HSL, hex, named. Blend and WCAG luminance.","Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".":"Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".","Hexadecimal to RGB":"Hexadecimal to RGB","Hex value":"Hex value","Calculate luminance of a RGB color. Example input: \"0;128;255\".":"Calculate luminance of a RGB color. Example input: \"0;128;255\".","Luminance from RGB":"Luminance from RGB","RGB color":"RGB color","Calculate luminance of a hexadecimal color. Example input: \"0459AF\".":"Calculate luminance of a hexadecimal color. Example input: \"0459AF\".","Luminance from hexadecimal":"Luminance from hexadecimal","Blend two RGB colors by applying a weighted mean.":"Blend two RGB colors by applying a weighted mean.","Blend RGB colors":"Blend RGB colors","First RGB color":"First RGB color","Second RGB color":"Second RGB color","Ratio":"Ratio","Range: 0 to 1, where 0 gives the first color and 1 gives the second color":"Range: 0 to 1, where 0 gives the first color and 1 gives the second color","Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".":"Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".","RGB to hexadecimal":"RGB to hexadecimal","RGB value":"RGB value","Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".":"Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".","RGB to HSL":"RGB to HSL","Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).":"Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).","HSV to RGB":"HSV to RGB","Hue 0-360":"Hue 0-360","Saturation 0-100":"Saturation 0-100","Value 0-100":"Value 0-100","Converts a RGB string into a HSV string. Example input: \"0;128;255\".":"Converts a RGB string into a HSV string. Example input: \"0;128;255\".","RGB to HSV":"RGB to HSV","Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.":"Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.","Color name to RGB":"Color name to RGB","Name of a color":"Name of a color","Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).":"Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).","HSL to RGB":"HSL to RGB","Lightness 0-100":"Lightness 0-100","Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.":"Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.","Hue to RGB":"Hue to RGB","Compressor":"Compressor","Compress and decompress strings using zip algorithm for smaller data storage.":"Compress and decompress strings using zip algorithm for smaller data storage.","Decompress a string.":"Decompress a string.","Decompress String":"Decompress String","String to decompress":"String to decompress","Compress a string.":"Compress a string.","Compress String":"Compress String","String to compress":"String to compress","Copy camera settings":"Copy camera settings","Copy camera position, zoom, and rotation from one layer to another.":"Copy camera position, zoom, and rotation from one layer to another.","Copy camera settings of a layer and apply them to another layer.":"Copy camera settings of a layer and apply them to another layer.","Copy camera settings of _PARAM1_ layer and apply them to _PARAM3_ layer (X position: _PARAM5_, Y position: _PARAM6_, Zoom: _PARAM7_, Angle: _PARAM8_)":"Copy camera settings of _PARAM1_ layer and apply them to _PARAM3_ layer (X position: _PARAM5_, Y position: _PARAM6_, Zoom: _PARAM7_, Angle: _PARAM8_)","Source layer":"Source layer","Source camera":"Source camera","Destination layer":"Destination layer","Destination camera":"Destination camera","Clone X position":"Clone X position","Clone Y position":"Clone Y position","Clone zoom":"Clone zoom","Clone angle":"Clone angle","CrazyGames SDK v3":"CrazyGames SDK v3","CrazyGames SDK: display ads, user accounts, game events for CrazyGames hosting.":"CrazyGames SDK: display ads, user accounts, game events for CrazyGames hosting.","Third-party":"Third-party","Get link account response.":"Get link account response.","Link account response":"Link account response","the last error from the CrazyGames API.":"the last error from the CrazyGames API.","Get last error":"Get last error","CrazyGames API last error is":"CrazyGames API last error is","Check if an user is signed into CrazyGames. If signed in, retrieves username and profile picture.":"Check if an user is signed into CrazyGames. If signed in, retrieves username and profile picture.","Check and load if an user is signed in CrazyGames":"Check and load if an user is signed in CrazyGames","Check if user is signed in CrazyGames":"Check if user is signed in CrazyGames","Check if the user is signed in.":"Check if the user is signed in.","User is signed in":"User is signed in","Return an invite link.":"Return an invite link.","Invite link":"Invite link","Room id":"Room id","Display an invite button.":"Display an invite button.","Display invite button":"Display invite button","Display an invite button for the room id: _PARAM1_":"Display an invite button for the room id: _PARAM1_","Load CrazyGames SDK.":"Load CrazyGames SDK.","Load SDK":"Load SDK","Load CrazyGames SDK":"Load CrazyGames SDK","Check if the CrazyGames SDK is ready to be used.":"Check if the CrazyGames SDK is ready to be used.","CrazyGames SDK is ready":"CrazyGames SDK is ready","Let CrazyGames know gameplay started.":"Let CrazyGames know gameplay started.","Gameplay started":"Gameplay started","Let CrazyGames know gameplay started":"Let CrazyGames know gameplay started","Let CrazyGames know gameplay stopped.":"Let CrazyGames know gameplay stopped.","Gameplay stopped":"Gameplay stopped","Let CrazyGames know gameplay stopped":"Let CrazyGames know gameplay stopped","Let CrazyGames know loading started.":"Let CrazyGames know loading started.","Loading started":"Loading started","Let CrazyGames know loading started":"Let CrazyGames know loading started","Let CrazyGames know loading stopped.":"Let CrazyGames know loading stopped.","Loading stopped":"Loading stopped","Let CrazyGames know loading stopped":"Let CrazyGames know loading stopped","Display a video ad. The game is automatically muted while the video is playing.":"Display a video ad. The game is automatically muted while the video is playing.","Display video ad":"Display video ad","Display _PARAM1_ video ad":"Display _PARAM1_ video ad","Ad Type":"Ad Type","Checks if a video ad just finished playing successfully.":"Checks if a video ad just finished playing successfully.","Video ad just finished playing":"Video ad just finished playing","Checks if a video ad is playing.":"Checks if a video ad is playing.","Video ad is playing":"Video ad is playing","Check if the user changed.":"Check if the user changed.","User changed":"User changed","Check if a video ad had an error.":"Check if a video ad had an error.","Video ad had an error":"Video ad had an error","Generate an invite link to invite friends to join your game sessions. This URL can be added to the clipboard or displayed in the game to let the user select it.":"Generate an invite link to invite friends to join your game sessions. This URL can be added to the clipboard or displayed in the game to let the user select it.","Generate an invite link":"Generate an invite link","Generate an invite link for _PARAM1_":"Generate an invite link for _PARAM1_","Display an happy time by emitting sparkling confetti. The celebration should remain a special moment.":"Display an happy time by emitting sparkling confetti. The celebration should remain a special moment.","Display happy time":"Display happy time","Scan for ad blockers.":"Scan for ad blockers.","Scan for ad blockers":"Scan for ad blockers","Check if user is using an ad blocker. This condition is always false before the \"Scan for ad blockers\" is called.":"Check if user is using an ad blocker. This condition is always false before the \"Scan for ad blockers\" is called.","Ad blocker is detected":"Ad blocker is detected","Display a banner that can be called once per 60 seconds.":"Display a banner that can be called once per 60 seconds.","Display a banner":"Display a banner","Display a banner: _PARAM1_ at position _PARAM3_ ; _PARAM4_ with size _PARAM2_":"Display a banner: _PARAM1_ at position _PARAM3_ ; _PARAM4_ with size _PARAM2_","Banner name":"Banner name","Ad size":"Ad size","Position X":"Position X","Position Y":"Position Y","Hide a banner.":"Hide a banner.","Hide a banner":"Hide a banner","Hide the banner: _PARAM1_":"Hide the banner: _PARAM1_","Hide all banners.":"Hide all banners.","Hide all banners":"Hide all banners","Hide all the banners":"Hide all the banners","Hide the invite button.":"Hide the invite button.","Hide invite button":"Hide invite button","Get the environment.":"Get the environment.","Get the environment":"Get the environment","display environment into _PARAM1_":"display environment into _PARAM1_","Retrieve user data.":"Retrieve user data.","Retrieve user data":"Retrieve user data","Show CrazyGames login window.":"Show CrazyGames login window.","Show CrazyGames login window":"Show CrazyGames login window","Show account link prompt.":"Show account link prompt.","Show account link prompt":"Show account link prompt","the username.":"the username.","Username":"Username","Username is":"Username is","the CrazyGames User ID.":"the CrazyGames User ID.","CrazyGames User ID":"CrazyGames User ID","CrazyGames user ID is":"CrazyGames user ID is","Gets the signed-in user's profile picture URL.":"Gets the signed-in user's profile picture URL.","Gets the signed-in user's profile picture URL":"Gets the signed-in user's profile picture URL","Return true when the user prefers to instantly join a lobby.":"Return true when the user prefers to instantly join a lobby.","Is instantly joining a lobby":"Is instantly joining a lobby","Return true if the user prefers the chat disabled.":"Return true if the user prefers the chat disabled.","Is the user chat disabled":"Is the user chat disabled","Retrieves user system info, browser, version and device.":"Retrieves user system info, browser, version and device.","Retrieves user system info":"Retrieves user system info","Get invite parameters if user is invited to this game.":"Get invite parameters if user is invited to this game.","Get invite parameters":"Get invite parameters","Param":"Param","Save the session data.":"Save the session data.","Save session data":"Save session data","Save session data, with the id: _PARAM1_ to: _PARAM2_":"Save session data, with the id: _PARAM1_ to: _PARAM2_","Id":"Id","Get user session data, if there is no saved data, \"null\" will be returned.":"Get user session data, if there is no saved data, \"null\" will be returned.","Get user session data":"Get user session data","the availability of the user's account.":"the availability of the user's account.","Is user account available":"Is user account available","The CrazyGames user account is available":"The CrazyGames user account is available","Retrieve the user's session token for authentication.":"Retrieve the user's session token for authentication.","Get User Token":"Get User Token","Retrieve the authentication token from Xsolla.":"Retrieve the authentication token from Xsolla.","Get Xsolla Token":"Get Xsolla Token","Generate Xsolla token.":"Generate Xsolla token.","Generate Xsolla token":"Generate Xsolla token","Cursor movement conditions":"Cursor movement conditions","Conditions to detect if the cursor is currently moving or still.":"Conditions to detect if the cursor is currently moving or still.","Check if the cursor has stayed still for the specified time on the default layer.":"Check if the cursor has stayed still for the specified time on the default layer.","Cursor stays still":"Cursor stays still","Cursor has stayed still for _PARAM1_ seconds":"Cursor has stayed still for _PARAM1_ seconds","Check if the cursor is moving on the default layer.":"Check if the cursor is moving on the default layer.","Cursor is moving":"Cursor is moving","Cursor type":"Cursor type","Change mouse cursor type (pointer, crosshair, etc). Auto-change on object hover.":"Change mouse cursor type (pointer, crosshair, etc). Auto-change on object hover.","Change the type of the cursor.":"Change the type of the cursor.","Change the cursor to _PARAM1_":"Change the cursor to _PARAM1_","The new cursor type":"The new cursor type","List of available cursors on https://developer.mozilla.org/en-US/docs/Web/CSS/cursor":"List of available cursors on https://developer.mozilla.org/en-US/docs/Web/CSS/cursor","Do change the type of the cursor.":"Do change the type of the cursor.","Do change cursor type":"Do change cursor type","Do change the cursor to _PARAM1_":"Do change the cursor to _PARAM1_","Change the cursor appearence when the object is hovered (on Windows, macOS or Linux).":"Change the cursor appearence when the object is hovered (on Windows, macOS or Linux).","Custom cursor when hovered":"Custom cursor when hovered","The cursor type":"The cursor type","See https://developer.mozilla.org/en-US/docs/Web/CSS/cursor for a list of possible cursors.":"See https://developer.mozilla.org/en-US/docs/Web/CSS/cursor for a list of possible cursors.","Curved movement":"Curved movement","Move objects on curved paths.":"Move objects on curved paths.","Append a cubic Bezier curve at the end of the path.":"Append a cubic Bezier curve at the end of the path.","Append a curve":"Append a curve","Append a curve to the path _PARAM1_ relatively to the end: _PARAM8_, first control point: _PARAM2_ ; _PARAM3_, second control point: _PARAM4_ ; _PARAM5_, destination: _PARAM6_ ; _PARAM7_":"Append a curve to the path _PARAM1_ relatively to the end: _PARAM8_, first control point: _PARAM2_ ; _PARAM3_, second control point: _PARAM4_ ; _PARAM5_, destination: _PARAM6_ ; _PARAM7_","Path name":"Path name","First control point X":"First control point X","First control point Y":"First control point Y","Second Control point X":"Second Control point X","Second Control point Y":"Second Control point Y","Destination point X":"Destination point X","Destination point Y":"Destination point Y","Relative":"Relative","Append a cubic Bezier curve to the end of an object's path. The first control point is symmetrical to the last control point of the path.":"Append a cubic Bezier curve to the end of an object's path. The first control point is symmetrical to the last control point of the path.","Append a smooth curve":"Append a smooth curve","Append a smooth curve to the path _PARAM1_ relatively to the end: _PARAM6_, second control point: _PARAM2_ ; _PARAM3_, destination: _PARAM4_ ; _PARAM5_":"Append a smooth curve to the path _PARAM1_ relatively to the end: _PARAM6_, second control point: _PARAM2_ ; _PARAM3_, destination: _PARAM4_ ; _PARAM5_","Append a line at the end of the path.":"Append a line at the end of the path.","Append a line":"Append a line","Append a line to the path _PARAM1_ relatively to the end: _PARAM4_, destination: _PARAM2_ ; _PARAM3_":"Append a line to the path _PARAM1_ relatively to the end: _PARAM4_, destination: _PARAM2_ ; _PARAM3_","Append a line to close the path.":"Append a line to close the path.","Close a path":"Close a path","Close the path _PARAM1_":"Close the path _PARAM1_","Create a path from SVG commands, for instance \"M 0,0 C 55,0 100,45 100,100\". Commands are: M = Move, C = Curve, S = Smooth, L = Line. Lower case is for relative positions. The preferred way to build the commands is to use an external SVG editor like Inkscape.":"Create a path from SVG commands, for instance \"M 0,0 C 55,0 100,45 100,100\". Commands are: M = Move, C = Curve, S = Smooth, L = Line. Lower case is for relative positions. The preferred way to build the commands is to use an external SVG editor like Inkscape.","Create a path from SVG":"Create a path from SVG","Create the path _PARAM1_ from the SVG path commands _PARAM2_":"Create the path _PARAM1_ from the SVG path commands _PARAM2_","SVG commands":"SVG commands","Return the SVG commands of a path.":"Return the SVG commands of a path.","SVG path commands":"SVG path commands","Delete a path from the memory.":"Delete a path from the memory.","Delete a path":"Delete a path","Delete the path: _PARAM1_":"Delete the path: _PARAM1_","Append a path to another path.":"Append a path to another path.","Append a path":"Append a path","Append the path _PARAM2_ to the path _PARAM1_":"Append the path _PARAM2_ to the path _PARAM1_","Name of the path to modify":"Name of the path to modify","Name of the path to add to the first one":"Name of the path to add to the first one","Duplicate a path.":"Duplicate a path.","Duplicate a path":"Duplicate a path","Create path _PARAM1_ as a duplicate of path _PARAM2_":"Create path _PARAM1_ as a duplicate of path _PARAM2_","Name of the path to create":"Name of the path to create","Name of the source path":"Name of the source path","Append a path to another path. The appended path is rotated to have a smooth junction.":"Append a path to another path. The appended path is rotated to have a smooth junction.","Append a rotated path":"Append a rotated path","Append the path _PARAM2_ rotated to connect to the path _PARAM1_ flip: _PARAM3_":"Append the path _PARAM2_ rotated to connect to the path _PARAM1_ flip: _PARAM3_","Flip the appended path":"Flip the appended path","Return the speed scale on Y axis. This is used to change the view point of a path (top-dwon or isometry).":"Return the speed scale on Y axis. This is used to change the view point of a path (top-dwon or isometry).","Speed scale Y":"Speed scale Y","Change the speed scale on Y axis. This allows to change the view point of a path (top-dwon or isometry).":"Change the speed scale on Y axis. This allows to change the view point of a path (top-dwon or isometry).","Change the speed scale Y of the path _PARAM1_ to _PARAM2_":"Change the speed scale Y of the path _PARAM1_ to _PARAM2_","Speed scale on Y axis (0.5 for pixel isometry)":"Speed scale on Y axis (0.5 for pixel isometry)","Invert a path, the end becomes the beginning.":"Invert a path, the end becomes the beginning.","Invert a path":"Invert a path","Invert the path _PARAM1_":"Invert the path _PARAM1_","Flip a path.":"Flip a path.","Flip a path":"Flip a path","Flip the path _PARAM1_":"Flip the path _PARAM1_","Flip a path horizontally.":"Flip a path horizontally.","Flip a path horizontally":"Flip a path horizontally","Flip the path _PARAM1_ horizontally":"Flip the path _PARAM1_ horizontally","Flip a path vertically.":"Flip a path vertically.","Flip a path vertically":"Flip a path vertically","Flip the path _PARAM1_ vertically":"Flip the path _PARAM1_ vertically","Scale a path.":"Scale a path.","Scale a path":"Scale a path","Scale the path _PARAM1_ by _PARAM2_ ; _PARAM3_":"Scale the path _PARAM1_ by _PARAM2_ ; _PARAM3_","Scale on X axis":"Scale on X axis","Scale on Y axis":"Scale on Y axis","Rotate a path.":"Rotate a path.","Rotate a path":"Rotate a path","Rotate _PARAM2_\xB0 the path _PARAM1_":"Rotate _PARAM2_\xB0 the path _PARAM1_","Rotation angle":"Rotation angle","Check if a path is closed.":"Check if a path is closed.","Is closed":"Is closed","The path _PARAM1_ is closed":"The path _PARAM1_ is closed","Return the position on X axis of the path for a given length.":"Return the position on X axis of the path for a given length.","Path X":"Path X","Length on the path":"Length on the path","Return the position on Y axis of the path for a given length.":"Return the position on Y axis of the path for a given length.","Path Y":"Path Y","Return the direction angle of the path for a given length (in degree).":"Return the direction angle of the path for a given length (in degree).","Path angle":"Path angle","Return the length of the path.":"Return the length of the path.","Path length":"Path length","Return the displacement on X axis of the path end.":"Return the displacement on X axis of the path end.","Path end X":"Path end X","Return the displacement on Y axis of the path end.":"Return the displacement on Y axis of the path end.","Path end Y":"Path end Y","Return the number of lines or curves that make the path.":"Return the number of lines or curves that make the path.","Path element count":"Path element count","Return the origin position on X axis of a curve.":"Return the origin position on X axis of a curve.","Origin X":"Origin X","Curve index":"Curve index","Return the origin position on Y axis of a curve.":"Return the origin position on Y axis of a curve.","Origin Y":"Origin Y","Return the first control point position on X axis of a curve.":"Return the first control point position on X axis of a curve.","First control X":"First control X","Return the first control point position on Y axis of a curve.":"Return the first control point position on Y axis of a curve.","First control Y":"First control Y","Return the second control point position on X axis of a curve.":"Return the second control point position on X axis of a curve.","Second control X":"Second control X","Return the second control point position on Y axis of a curve.":"Return the second control point position on Y axis of a curve.","Second control Y":"Second control Y","Return the target position on X axis of a curve.":"Return the target position on X axis of a curve.","Return the target position on Y axis of a curve.":"Return the target position on Y axis of a curve.","Path exists.":"Path exists.","Path exists":"Path exists","Path _PARAM1_ exists":"Path _PARAM1_ exists","Move objects on curved paths in a given duration and tween easing function.":"Move objects on curved paths in a given duration and tween easing function.","Movement on a curve (duration-based)":"Movement on a curve (duration-based)","Rotation offset":"Rotation offset","Flip on X to go back":"Flip on X to go back","Flip on Y to go back":"Flip on Y to go back","Speed scale":"Speed scale","Pause duration before going back":"Pause duration before going back","Viewpoint":"Viewpoint","Set the the object on the path according to the current length.":"Set the the object on the path according to the current length.","Update position":"Update position","Update the position of _PARAM0_ on the path":"Update the position of _PARAM0_ on the path","Move the object to a position by following a path.":"Move the object to a position by following a path.","Move on path to a position":"Move on path to a position","Move _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"Move _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing","The path can be define with the \"Append curve\" action.":"The path can be define with the \"Append curve\" action.","Number of repetitions":"Number of repetitions","Destination X":"Destination X","Destination Y":"Destination Y","Move the object to a position by following a path and go back.":"Move the object to a position by following a path and go back.","Move back and forth to a position":"Move back and forth to a position","Move back and forth _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM8_ seconds before going back and loop: _PARAM9_":"Move back and forth _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM8_ seconds before going back and loop: _PARAM9_","Duration to wait before going back":"Duration to wait before going back","Loop":"Loop","Move the object by following a path.":"Move the object by following a path.","Move on path":"Move on path","Move _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"Move _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing","Move the object by following a path and go back.":"Move the object by following a path and go back.","Move back and forth":"Move back and forth","Move back and forth _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM6_ seconds before going back and loop: _PARAM7_":"Move back and forth _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM6_ seconds before going back and loop: _PARAM7_","Check if the object has reached one of the 2 ends of the path.":"Check if the object has reached one of the 2 ends of the path.","Reached an end":"Reached an end","_PARAM0_ reached an end of the path":"_PARAM0_ reached an end of the path","Check if the object has finished to move on the path.":"Check if the object has finished to move on the path.","Finished to move":"Finished to move","_PARAM0_ has finished to move":"_PARAM0_ has finished to move","Return the angle of movement on its path.":"Return the angle of movement on its path.","Movement angle":"Movement angle","Draw the object trajectory.":"Draw the object trajectory.","Draw the trajectory":"Draw the trajectory","Draw trajectory of _PARAM0_ on _PARAM2_":"Draw trajectory of _PARAM0_ on _PARAM2_","Shape painter":"Shape painter","Change the transformation to apply to the path.":"Change the transformation to apply to the path.","Path transformation":"Path transformation","Change the path trasformation of _PARAM0_ to origin _PARAM2_; _PARAM3_ scale by _PARAM4_ and a rotation of _PARAM5_\xB0":"Change the path trasformation of _PARAM0_ to origin _PARAM2_; _PARAM3_ scale by _PARAM4_ and a rotation of _PARAM5_\xB0","Scale":"Scale","Angle":"Angle","Initialize the movement state.":"Initialize the movement state.","Initialize the movement":"Initialize the movement","Initialize the movement of _PARAM0_":"Initialize the movement of _PARAM0_","Return the number of repetitions between the current position and the origin.":"Return the number of repetitions between the current position and the origin.","Repetition done":"Repetition done","Return the position on one repeated path.":"Return the position on one repeated path.","Path position":"Path position","Return the progress on the full path from 0 to 1, where 0 means the origin and 1 the end.":"Return the progress on the full path from 0 to 1, where 0 means the origin and 1 the end.","Progress":"Progress","Return the length of the path (one repetition only).":"Return the length of the path (one repetition only).","Return the speed scale on Y axis of the path.":"Return the speed scale on Y axis of the path.","Path speed scale Y":"Path speed scale Y","Return the angle to use when the object is going back or not.":"Return the angle to use when the object is going back or not.","Back or forth angle":"Back or forth angle","Move objects on curved paths at a given speed.":"Move objects on curved paths at a given speed.","Movement on a curve (speed-based)":"Movement on a curve (speed-based)","Rotation":"Rotation","Change the path followed by an object.":"Change the path followed by an object.","Follow a path":"Follow a path","_PARAM0_ follow the path: _PARAM2_ repeated _PARAM3_ times and loop: _PARAM4_":"_PARAM0_ follow the path: _PARAM2_ repeated _PARAM3_ times and loop: _PARAM4_","Change the path followed by an object to reach a position.":"Change the path followed by an object to reach a position.","Follow a path to a position":"Follow a path to a position","_PARAM0_ follow the path _PARAM2_ repeated _PARAM3_ times to reach _PARAM5_ ; _PARAM6_ and loop: _PARAM4_":"_PARAM0_ follow the path _PARAM2_ repeated _PARAM3_ times to reach _PARAM5_ ; _PARAM6_ and loop: _PARAM4_","the length between the trajectory origin and the current position without counting the loops.":"the length between the trajectory origin and the current position without counting the loops.","Position on the loop":"Position on the loop","the length from the trajectory origin in the current loop":"the length from the trajectory origin in the current loop","the number time the object loop the trajectory.":"the number time the object loop the trajectory.","Current loop":"Current loop","the current loop":"the current loop","the length between the trajectory origin and the current position counting the loops.":"the length between the trajectory origin and the current position counting the loops.","Position on the path":"Position on the path","the length from the trajectory origin counting the loops":"the length from the trajectory origin counting the loops","Change the position of the object on the path.":"Change the position of the object on the path.","Change the position of _PARAM0_ on the path at the length _PARAM2_":"Change the position of _PARAM0_ on the path at the length _PARAM2_","Length":"Length","Check if the length from the trajectory origin is lesser than a value.":"Check if the length from the trajectory origin is lesser than a value.","Current length":"Current length","_PARAM0_ is less than _PARAM2_ pixels away from the trajectory origin":"_PARAM0_ is less than _PARAM2_ pixels away from the trajectory origin","Length from the trajectory origin (in pixels)":"Length from the trajectory origin (in pixels)","Check if the object has reached the origin position of the path.":"Check if the object has reached the origin position of the path.","Reached path origin":"Reached path origin","_PARAM0_ reached the path beginning":"_PARAM0_ reached the path beginning","Check if the object has reached the target position of the path.":"Check if the object has reached the target position of the path.","Reached path target":"Reached path target","_PARAM0_ reached the path target":"_PARAM0_ reached the path target","Reach an end":"Reach an end","Check if the object can still move in the current direction.":"Check if the object can still move in the current direction.","Can move further":"Can move further","_PARAM0_ can move further on its path":"_PARAM0_ can move further on its path","the speed of the object.":"the speed of the object.","the speed":"the speed","Change the current speed of the object.":"Change the current speed of the object.","Change the speed of _PARAM0_ to _PARAM2_":"Change the speed of _PARAM0_ to _PARAM2_","Speed (in pixels per second)":"Speed (in pixels per second)","Make an object accelerate until it reaches a given speed.":"Make an object accelerate until it reaches a given speed.","Accelerate":"Accelerate","_PARAM0_ accelerate at _PARAM3_ to reach the speed of _PARAM2_":"_PARAM0_ accelerate at _PARAM3_ to reach the speed of _PARAM2_","Targeted speed (in pixels per second)":"Targeted speed (in pixels per second)","Acceleration (in pixels per second per second)":"Acceleration (in pixels per second per second)","Make an object accelerate to reaches a speed in a given amount of time.":"Make an object accelerate to reaches a speed in a given amount of time.","Accelerate during":"Accelerate during","_PARAM0_ accelerate during _PARAM3_ seconds to reach the speed of _PARAM2_":"_PARAM0_ accelerate during _PARAM3_ seconds to reach the speed of _PARAM2_","Repeated path position":"Repeated path position","Return the length of the complete trajectory (without looping).":"Return the length of the complete trajectory (without looping).","Total length":"Total length","Return the path origin on X axis of the object.":"Return the path origin on X axis of the object.","Path origin X":"Path origin X","the path origin on X axis":"the path origin on X axis","Return the path origin on Y axis of the object.":"Return the path origin on Y axis of the object.","Path origin Y":"Path origin Y","the path origin on Y axis":"the path origin on Y axis","Depth effect":"Depth effect","Scale objects based on Y position to simulate depth.":"Scale objects based on Y position to simulate depth.","The scale of the object decreases the closer it is to the horizon, giving the illusion that the object is travelling away from the viewer.":"The scale of the object decreases the closer it is to the horizon, giving the illusion that the object is travelling away from the viewer.","Max scale when the object is at the bottom of the screen (Default: 1)":"Max scale when the object is at the bottom of the screen (Default: 1)","Y position that represents a horizon where objects appear infinitely small (Default: 0)":"Y position that represents a horizon where objects appear infinitely small (Default: 0)","Exponential rate of change (Default: 2)":"Exponential rate of change (Default: 2)","Percent away from the horizon":"Percent away from the horizon","Percent away from the horizon. This is \"0\" at the horizon, and \"1\" at the bottom of the screen.":"Percent away from the horizon. This is \"0\" at the horizon, and \"1\" at the bottom of the screen.","Percent away from horizon":"Percent away from horizon","Exponential rate of change, based on Y position.":"Exponential rate of change, based on Y position.","Exponential rate of change":"Exponential rate of change","Max scale when the object is at the bottom of the screen.":"Max scale when the object is at the bottom of the screen.","Max scale":"Max scale","Y value of horizon.":"Y value of horizon.","Y value of horizon":"Y value of horizon","Set max scale when the object is at the bottom of the screen (Default: 2).":"Set max scale when the object is at the bottom of the screen (Default: 2).","Set max scale":"Set max scale","Set max scale of _PARAM0_ to _PARAM2_":"Set max scale of _PARAM0_ to _PARAM2_","Y Exponent":"Y Exponent","Set Y exponential rate of change (Default: 2).":"Set Y exponential rate of change (Default: 2).","Set exponential rate of change":"Set exponential rate of change","Set Y exponential rate of change of _PARAM0_ to _PARAM2_":"Set Y exponential rate of change of _PARAM0_ to _PARAM2_","Set Y position of the horizon, where objects are infinitely small (Default: 0).":"Set Y position of the horizon, where objects are infinitely small (Default: 0).","Set Y position of horizon":"Set Y position of horizon","Set horizon of _PARAM0_ to Y position _PARAM2_":"Set horizon of _PARAM0_ to Y position _PARAM2_","Horizon Y":"Horizon Y","Discord rich presence (Windows, Mac, Linux)":"Discord rich presence (Windows, Mac, Linux)","Display game activity status in Discord via Rich Presence integration.":"Display game activity status in Discord via Rich Presence integration.","Attempts to connect to discord if it is installed, and initialize rich presence.":"Attempts to connect to discord if it is installed, and initialize rich presence.","Initialize rich presence":"Initialize rich presence","Initialize rich presence with ID _PARAM1_":"Initialize rich presence with ID _PARAM1_","The discord client ID":"The discord client ID","Update the data in the rich presence. See the discord documentation for more info on each field. Each field except state is optional.":"Update the data in the rich presence. See the discord documentation for more info on each field. Each field except state is optional.","Update rich presence":"Update rich presence","Update rich presence to state _PARAM1_, details _PARAM2_, begin timestamp _PARAM3_, end timestamp _PARAM4_, large image _PARAM5_ with text _PARAM6_ and small image _PARAM7_ with text _PARAM8_":"Update rich presence to state _PARAM1_, details _PARAM2_, begin timestamp _PARAM3_, end timestamp _PARAM4_, large image _PARAM5_ with text _PARAM6_ and small image _PARAM7_ with text _PARAM8_","The current state":"The current state","The details of the current state":"The details of the current state","The timstamp of the start of the match":"The timstamp of the start of the match","If this is filled, discord will show the time elapsed since the start.":"If this is filled, discord will show the time elapsed since the start.","The timestamp of the end of the match":"The timestamp of the end of the match","If this is filled, discord will display the remaining time.":"If this is filled, discord will display the remaining time.","The name of the big image":"The name of the big image","The text of the large image":"The text of the large image","The name of the small image":"The name of the small image","The text of the small image":"The text of the small image","Double-click and tap":"Double-click and tap","Detect double-click (mouse) or double-tap (touch) on objects or anywhere.":"Detect double-click (mouse) or double-tap (touch) on objects or anywhere.","Check if the specified mouse button is clicked twice in a short amount of time.":"Check if the specified mouse button is clicked twice in a short amount of time.","Double-clicked (or double-tapped)":"Double-clicked (or double-tapped)","_PARAM1_ mouse button is double-clicked":"_PARAM1_ mouse button is double-clicked","Mouse button to track":"Mouse button to track","As touch devices do not have middle/right tap equivalents, you will need to account for this within your events if you're not using the left mouse button and building for touch devices.":"As touch devices do not have middle/right tap equivalents, you will need to account for this within your events if you're not using the left mouse button and building for touch devices.","Check if the specified mouse button is clicked.":"Check if the specified mouse button is clicked.","Clicked (or tapped)":"Clicked (or tapped)","_PARAM1_ mouse button is clicked":"_PARAM1_ mouse button is clicked","_PARAM1_ mouse button is clicked _PARAM2_ times":"_PARAM1_ mouse button is clicked _PARAM2_ times","Click count":"Click count","Drag camera with the mouse (or touchscreen)":"Drag camera with the mouse (or touchscreen)","Pan/drag camera with mouse or touch. Configurable inertia and bounds.":"Pan/drag camera with mouse or touch. Configurable inertia and bounds.","Move a camera by dragging the mouse (or touchscreen).":"Move a camera by dragging the mouse (or touchscreen).","Drag camera with the mouse":"Drag camera with the mouse","Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button":"Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button","Camera layer (default: \"\")":"Camera layer (default: \"\")","Directions that the camera can move (horizontal, vertical, both)":"Directions that the camera can move (horizontal, vertical, both)","Mouse button (use \"Left\" for touchscreen)":"Mouse button (use \"Left\" for touchscreen)","Draggable (for physics objects)":"Draggable (for physics objects)","Drag Physics 2D objects with mouse or touch input.":"Drag Physics 2D objects with mouse or touch input.","Drag a physics object with the mouse (or touch).":"Drag a physics object with the mouse (or touch).","Physics behavior":"Physics behavior","Mouse button":"Mouse button","Maximum force":"Maximum force","Frequency (Hz)":"Frequency (Hz)","Damping ratio (Range: 0 to 1)":"Damping ratio (Range: 0 to 1)","Enable automatic dragging":"Enable automatic dragging","If automatic dragging is disabled, use the \"Start drag\" and \"Release drag\" actions.":"If automatic dragging is disabled, use the \"Start drag\" and \"Release drag\" actions.","Start dragging object.":"Start dragging object.","Start dragging object":"Start dragging object","Start dragging (physics) _PARAM0_":"Start dragging (physics) _PARAM0_","Release dragged object.":"Release dragged object.","Release dragged object":"Release dragged object","Release _PARAM0_ from being dragged (physics)":"Release _PARAM0_ from being dragged (physics)","Check if object is being dragged.":"Check if object is being dragged.","Is being dragged":"Is being dragged","_PARAM0_ is being dragged (physics)":"_PARAM0_ is being dragged (physics)","the mouse button used to move the object.":"the mouse button used to move the object.","the dragging mouse button":"the dragging mouse button","the maximum joint force (in Newtons) of the object.":"the maximum joint force (in Newtons) of the object.","the maximum force":"the maximum force","the joint frequency (per second) of the object.":"the joint frequency (per second) of the object.","the frequency":"the frequency","the joint damping ratio (range: 0 to 1) of the object.":"the joint damping ratio (range: 0 to 1) of the object.","Damping ratio":"Damping ratio","the damping ratio (range: 0 to 1)":"the damping ratio (range: 0 to 1)","Check if automatic dragging is enabled.":"Check if automatic dragging is enabled.","Automatic dragging":"Automatic dragging","Automatic dragging is enabled on _PARAM0_":"Automatic dragging is enabled on _PARAM0_","Enable (or disable) automatic dragging with the mouse or touch.":"Enable (or disable) automatic dragging with the mouse or touch.","Enable (or disable) automatic dragging":"Enable (or disable) automatic dragging","Enable automatic dragging on _PARAM0_: _PARAM2_":"Enable automatic dragging on _PARAM0_: _PARAM2_","EnableAutomaticDragging":"EnableAutomaticDragging","Draggable slider (for Shape Painter)":"Draggable slider (for Shape Painter)","Shape Painter slider for selecting numerical values.":"Shape Painter slider for selecting numerical values.","Let users select a numerical value by dragging a slider.":"Let users select a numerical value by dragging a slider.","Draggable slider":"Draggable slider","Minimum value":"Minimum value","Maximum value":"Maximum value","Tick spacing":"Tick spacing","Thumb shape":"Thumb shape","Thumb":"Thumb","Thumb width":"Thumb width","Thumb height":"Thumb height","Thumb Color":"Thumb Color","Thumb opacity":"Thumb opacity","Track length":"Track length","Track":"Track","Inactive track color (thumb color by default)":"Inactive track color (thumb color by default)","Inactive track opacity":"Inactive track opacity","Active track color (thumb color by default)":"Active track color (thumb color by default)","Active track opacity":"Active track opacity","Halo size (hover)":"Halo size (hover)","Rounded track ends":"Rounded track ends","Check if the slider is being dragged.":"Check if the slider is being dragged.","Being dragged":"Being dragged","_PARAM0_ is being dragged":"_PARAM0_ is being dragged","Check if the slider interations are enabled.":"Check if the slider interations are enabled.","Enable or disable the slider. Users cannot interact while it is disabled.":"Enable or disable the slider. Users cannot interact while it is disabled.","The value of the slider (based on position of the thumb).":"The value of the slider (based on position of the thumb).","Slider value":"Slider value","Change the value of a slider (this will move the thumb to the correct position).":"Change the value of a slider (this will move the thumb to the correct position).","Change the value of _PARAM0_: _PARAM2_":"Change the value of _PARAM0_: _PARAM2_","The minimum value of a slider.":"The minimum value of a slider.","Slider minimum value":"Slider minimum value","Change the minimum value of a slider.":"Change the minimum value of a slider.","Change the minimum value of _PARAM0_: _PARAM2_":"Change the minimum value of _PARAM0_: _PARAM2_","The maximum value of a slider.":"The maximum value of a slider.","Slider maximum value":"Slider maximum value","Thickness of track.":"Thickness of track.","Slider track thickness":"Slider track thickness","Length of track.":"Length of track.","Slider track length":"Slider track length","Height of thumb.":"Height of thumb.","Slider thumb height":"Slider thumb height","Change the maximum value of a slider.":"Change the maximum value of a slider.","The tick spacing of a slider.":"The tick spacing of a slider.","Change the tick spacing of _PARAM0_: _PARAM2_":"Change the tick spacing of _PARAM0_: _PARAM2_","Change the tick spacing of a slider.":"Change the tick spacing of a slider.","Change length of track.":"Change length of track.","Change track length of _PARAM0_ to _PARAM2_ px":"Change track length of _PARAM0_ to _PARAM2_ px","Track width":"Track width","Change thickness of track.":"Change thickness of track.","Change track thickness of _PARAM0_ to _PARAM2_ px":"Change track thickness of _PARAM0_ to _PARAM2_ px","Change width of thumb.":"Change width of thumb.","Change thumb width of _PARAM0_ to _PARAM2_ px":"Change thumb width of _PARAM0_ to _PARAM2_ px","Change height of thumb.":"Change height of thumb.","Change thumb height of _PARAM0_ to _PARAM2_ px":"Change thumb height of _PARAM0_ to _PARAM2_ px","Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.":"Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.","Change halo radius of _PARAM0_ to _PARAM2_ px":"Change halo radius of _PARAM0_ to _PARAM2_ px","Change the halo opacity when the thumb is hovered.":"Change the halo opacity when the thumb is hovered.","Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px":"Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px","Change opacity of halo when pressed.":"Change opacity of halo when pressed.","Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px":"Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px","Change shape of thumb (circle or rectangle).":"Change shape of thumb (circle or rectangle).","Change shape of _PARAM0_ to _PARAM2_":"Change shape of _PARAM0_ to _PARAM2_","New thumb shape":"New thumb shape","Make track use rounded ends.":"Make track use rounded ends.","Draw _PARAM0_ with a rounded track: _PARAM2_":"Draw _PARAM0_ with a rounded track: _PARAM2_","Rounded track":"Rounded track","Change opacity of thumb.":"Change opacity of thumb.","Change thumb opacity of _PARAM0_ to _PARAM2_":"Change thumb opacity of _PARAM0_ to _PARAM2_","Change opacity of inactive track.":"Change opacity of inactive track.","Change inactive track opacity of _PARAM0_ to _PARAM2_":"Change inactive track opacity of _PARAM0_ to _PARAM2_","Change opacity of active track.":"Change opacity of active track.","Change active track opacity of _PARAM0_ to _PARAM2_":"Change active track opacity of _PARAM0_ to _PARAM2_","Change the color of the track that is LEFT of the thumb.":"Change the color of the track that is LEFT of the thumb.","Active track color":"Active track color","Change active track color of _PARAM0_ to _PARAM2_":"Change active track color of _PARAM0_ to _PARAM2_","Change the color of the track that is RIGHT of the thumb.":"Change the color of the track that is RIGHT of the thumb.","Inactive track color":"Inactive track color","Change inactive track color of _PARAM0_ to _PARAM2_":"Change inactive track color of _PARAM0_ to _PARAM2_","Change the thumb color to a specific value.":"Change the thumb color to a specific value.","Thumb color":"Thumb color","Change thumb color of _PARAM0_ to _PARAM2_":"Change thumb color of _PARAM0_ to _PARAM2_","Pathfinding painter":"Pathfinding painter","Visualize pathfinding paths using Shape Painter for debugging or display.":"Visualize pathfinding paths using Shape Painter for debugging or display.","Draw the path followed by the object using a shape painter.":"Draw the path followed by the object using a shape painter.","LoopIndex":"LoopIndex","Draw the path followed by the object using a shape painter. It automatically creates an instance of the shape painter object if there is none.":"Draw the path followed by the object using a shape painter. It automatically creates an instance of the shape painter object if there is none.","Draw pathfinding":"Draw pathfinding","Draw the path followed by _PARAM0_ using _PARAM3_":"Draw the path followed by _PARAM0_ using _PARAM3_","Pathfinding behavior":"Pathfinding behavior","Shape painter used to draw the path":"Shape painter used to draw the path","Edge scroll camera":"Edge scroll camera","Scroll camera when cursor is near screen edges.":"Scroll camera when cursor is near screen edges.","Enable (or disable) camera edge scrolling . Use \"Configure camera edge scrolling\" to adjust settings.":"Enable (or disable) camera edge scrolling . Use \"Configure camera edge scrolling\" to adjust settings.","Enable (or disable) camera edge scrolling":"Enable (or disable) camera edge scrolling","Enable camera edge scrolling: _PARAM1_":"Enable camera edge scrolling: _PARAM1_","Enable camera edge scrolling":"Enable camera edge scrolling","Configure camera edge scrolling that moves when mouse is near an edge of the screen.":"Configure camera edge scrolling that moves when mouse is near an edge of the screen.","Configure camera edge scrolling":"Configure camera edge scrolling","Configure camera edge scrolling (layer: _PARAM3_, screen margin: _PARAM1_, scroll speed: _PARAM2_, style: _PARAM5_)":"Configure camera edge scrolling (layer: _PARAM3_, screen margin: _PARAM1_, scroll speed: _PARAM2_, style: _PARAM5_)","Screen margin (pixels)":"Screen margin (pixels)","Scroll speed (in pixels per second)":"Scroll speed (in pixels per second)","Scroll style":"Scroll style","Check if the camera is scrolling.":"Check if the camera is scrolling.","Camera is scrolling":"Camera is scrolling","Check if the camera is scrolling up.":"Check if the camera is scrolling up.","Camera is scrolling up":"Camera is scrolling up","Check if the camera is scrolling down.":"Check if the camera is scrolling down.","Camera is scrolling down":"Camera is scrolling down","Check if the camera is scrolling left.":"Check if the camera is scrolling left.","Camera is scrolling left":"Camera is scrolling left","Check if the camera is scrolling right.":"Check if the camera is scrolling right.","Camera is scrolling right":"Camera is scrolling right","Draw a rectangle that shows where edge scrolling will be triggered.":"Draw a rectangle that shows where edge scrolling will be triggered.","Draw edge scrolling screen margin":"Draw edge scrolling screen margin","Draw edge scrolling screen margin with _PARAM1_":"Draw edge scrolling screen margin with _PARAM1_","Return the speed the camera is currently scrolling in horizontal direction (in pixels per second).":"Return the speed the camera is currently scrolling in horizontal direction (in pixels per second).","Horizontal edge scroll speed":"Horizontal edge scroll speed","Return the speed the camera is currently scrolling in vertical direction (in pixels per second).":"Return the speed the camera is currently scrolling in vertical direction (in pixels per second).","Vertical edge scroll speed":"Vertical edge scroll speed","Return the absolute scroll speed according to the mouse distance from the border.":"Return the absolute scroll speed according to the mouse distance from the border.","Absolute scroll speed":"Absolute scroll speed","Border distance":"Border distance","Ellipse movement":"Ellipse movement","Move objects in elliptical paths or smooth back-and-forth in one direction.":"Move objects in elliptical paths or smooth back-and-forth in one direction.","Move objects on ellipses or smoothly back and forth in one direction.":"Move objects on ellipses or smoothly back and forth in one direction.","Radius of the movement on X axis":"Radius of the movement on X axis","Ellipse":"Ellipse","Radius of the movement on Y axis":"Radius of the movement on Y axis","Loop duration":"Loop duration","Turn left":"Turn left","Initial direction":"Initial direction","Rotate":"Rotate","Change the turning direction (left or right).":"Change the turning direction (left or right).","Turn the other way":"Turn the other way","_PARAM0_ turn the other way":"_PARAM0_ turn the other way","Change the in which side the object is turning (left or right).":"Change the in which side the object is turning (left or right).","Turn left or right":"Turn left or right","_PARAM0_ turn left: _PARAM2_":"_PARAM0_ turn left: _PARAM2_","Check if the object is turning left.":"Check if the object is turning left.","Is turning left":"Is turning left","_PARAM0_ is turning left":"_PARAM0_ is turning left","Return the movement angle of the object.":"Return the movement angle of the object.","Set initial Y of _PARAM0_ to _PARAM2_":"Set initial Y of _PARAM0_ to _PARAM2_","Return the loop duration (in seconds).":"Return the loop duration (in seconds).","Return the ellipse radius on X axis.":"Return the ellipse radius on X axis.","Radius X":"Radius X","Radius Y":"Radius Y","Return the movement center position on X axis.":"Return the movement center position on X axis.","Movement center X":"Movement center X","Return the movement center position on Y axis.":"Return the movement center position on Y axis.","Movement center Y":"Movement center Y","Change the radius on X axis of the movement.":"Change the radius on X axis of the movement.","Change the radius on X axis of the movement of _PARAM0_ to _PARAM2_":"Change the radius on X axis of the movement of _PARAM0_ to _PARAM2_","Change the radius on Y axis of the movement.":"Change the radius on Y axis of the movement.","Change the radius on Y axis of the movement of _PARAM0_ to _PARAM2_":"Change the radius on Y axis of the movement of _PARAM0_ to _PARAM2_","Change the loop duration.":"Change the loop duration.","Change the loop duration of _PARAM0_ to _PARAM2_":"Change the loop duration of _PARAM0_ to _PARAM2_","Speed (in degrees per second)":"Speed (in degrees per second)","Change the movement angle. The object is teleported according to the angle.":"Change the movement angle. The object is teleported according to the angle.","Teleport at an angle":"Teleport at an angle","Teleport _PARAM0_ on the ellipse at _PARAM2_\xB0":"Teleport _PARAM0_ on the ellipse at _PARAM2_\xB0","Delta X":"Delta X","Delta Y":"Delta Y","Direction angle":"Direction angle","Emojis":"Emojis","Display emoji characters in text objects using shortcodes or emoji expressions.":"Display emoji characters in text objects using shortcodes or emoji expressions.","Returns the specified emoji, from the provided name.":"Returns the specified emoji, from the provided name.","Returns the specified emoji (name)":"Returns the specified emoji (name)","Name of emoji":"Name of emoji","Full list of emojis: [https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)":"Full list of emojis: [https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)","Returns the specified emoji, from a hexadecimal value.":"Returns the specified emoji, from a hexadecimal value.","Returns the specified emoji (hex)":"Returns the specified emoji (hex)","Hexadecimal code":"Hexadecimal code","Full list of hexadecimal code: [https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)":"Full list of hexadecimal code: [https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)","Explosion force":"Explosion force","Apply radial explosion physics force to nearby Physics 2D objects within radius.":"Apply radial explosion physics force to nearby Physics 2D objects within radius.","Simulate an explosion with physics forces on target objects.":"Simulate an explosion with physics forces on target objects.","Simulate explosion with physics forces":"Simulate explosion with physics forces","Simulate an explosion that affects _PARAM1_ within explosion radius: _PARAM6_ (pixels), Explosion center: _PARAM3_, _PARAM4_. Max force: _PARAM5_":"Simulate an explosion that affects _PARAM1_ within explosion radius: _PARAM6_ (pixels), Explosion center: _PARAM3_, _PARAM4_. Max force: _PARAM5_","Target Object":"Target Object","Physics Behavior (required)":"Physics Behavior (required)","Explosion center (X)":"Explosion center (X)","Explosion center (Y)":"Explosion center (Y)","Max force (of explosion)":"Max force (of explosion)","Force decreases the farther an object is from the explosion center.":"Force decreases the farther an object is from the explosion center.","Max distance (from center of explosion) (pixels)":"Max distance (from center of explosion) (pixels)","Objects less than this distance will be affected by the explosion.":"Objects less than this distance will be affected by the explosion.","Extended math support":"Extended math support","Extra math: clamp, map, lerp, factorial, fibonacci, distance, angle, conversions, constants.":"Extra math: clamp, map, lerp, factorial, fibonacci, distance, angle, conversions, constants.","Returns a term from the Fibonacci sequence.":"Returns a term from the Fibonacci sequence.","Fibonacci numbers":"Fibonacci numbers","The desired term in the sequence":"The desired term in the sequence","Calculates the steepness of a line between two points.":"Calculates the steepness of a line between two points.","Slope":"Slope","X value of the first point":"X value of the first point","Y value of the first point":"Y value of the first point","X value of the second point":"X value of the second point","Y value of the second point":"Y value of the second point","Converts a number of one range e.g. 0-1 to another 0-255.":"Converts a number of one range e.g. 0-1 to another 0-255.","Map":"Map","The value to convert":"The value to convert","The lowest value of the first range":"The lowest value of the first range","The highest value of the first range":"The highest value of the first range","The lowest value of the second range":"The lowest value of the second range","The highest value of the second range":"The highest value of the second range","Returns the value of the length of the hypotenuse.":"Returns the value of the length of the hypotenuse.","Hypotenuse length":"Hypotenuse length","First side of the triangle":"First side of the triangle","Second side of the triangle":"Second side of the triangle","Returns the greatest common factor of two numbers.":"Returns the greatest common factor of two numbers.","Greatest common factor (gcf)":"Greatest common factor (gcf)","Any integer":"Any integer","Returns the lowest common multiple of two numbers.":"Returns the lowest common multiple of two numbers.","Lowest common multiple (lcm)":"Lowest common multiple (lcm)","Returns the input multiplied by all the previous whole numbers.":"Returns the input multiplied by all the previous whole numbers.","Factorial":"Factorial","Any positive integer":"Any positive integer","Converts a polar coordinate into the Cartesian x value.":"Converts a polar coordinate into the Cartesian x value.","Polar coordinate to Cartesian X value":"Polar coordinate to Cartesian X value","Angle or theta in radians":"Angle or theta in radians","Converts a polar coordinate into the Cartesian y value.":"Converts a polar coordinate into the Cartesian y value.","Polar coordinate to Cartesian Y value":"Polar coordinate to Cartesian Y value","Converts a isometric coordinate into the Cartesian x value.":"Converts a isometric coordinate into the Cartesian x value.","Isometric coordinate to Cartesian X value":"Isometric coordinate to Cartesian X value","Position on the x axis":"Position on the x axis","Position on the y axis":"Position on the y axis","Converts a isometric coordinate into the Cartesian y value.":"Converts a isometric coordinate into the Cartesian y value.","Isometric coordinate to Cartesian Y value":"Isometric coordinate to Cartesian Y value","Returns the golden ratio.":"Returns the golden ratio.","Golden ratio":"Golden ratio","Returns Pi (\u03C0).":"Returns Pi (\u03C0).","Pi (\u03C0)":"Pi (\u03C0)","Returns half Pi.":"Returns half Pi.","Half Pi":"Half Pi","Returns the natural logarithm of e. (Euler's number).":"Returns the natural logarithm of e. (Euler's number).","Natural logarithm of e":"Natural logarithm of e","Returns the natural logarithm of 2.":"Returns the natural logarithm of 2.","Natural logarithm of 2":"Natural logarithm of 2","Returns the natural logarithm of 10.":"Returns the natural logarithm of 10.","Natural logarithm of 10":"Natural logarithm of 10","Returns the base 2 logarithm of e. (Euler's number).":"Returns the base 2 logarithm of e. (Euler's number).","Base 2 logarithm of e":"Base 2 logarithm of e","Returns the base 10 logarithm of e. (Euler's number).":"Returns the base 10 logarithm of e. (Euler's number).","Base 10 logarithm of e":"Base 10 logarithm of e","Returns square root of 2.":"Returns square root of 2.","Square root of 2":"Square root of 2","Returns square root of 1/2.":"Returns square root of 1/2.","Square root of 1/2":"Square root of 1/2","Returns quarter Pi.":"Returns quarter Pi.","Quarter Pi":"Quarter Pi","Formats a number to use the specified number of decimal places (Deprecated).":"Formats a number to use the specified number of decimal places (Deprecated).","ToFixed":"ToFixed","The value to be rounded":"The value to be rounded","Number of decimal places":"Number of decimal places","Formats a number to a string with the specified number of decimal places.":"Formats a number to a string with the specified number of decimal places.","Check if the number is even (divisible by 2). To check for odd numbers, invert this condition.":"Check if the number is even (divisible by 2). To check for odd numbers, invert this condition.","Is even?":"Is even?","_PARAM1_ is even":"_PARAM1_ is even","Variables copier":"Variables copier","Copy structure and array variables.":"Copy structure and array variables.","Check if a global variable exists.":"Check if a global variable exists.","Global variable exists":"Global variable exists","If the global variable _PARAM1_ exist":"If the global variable _PARAM1_ exist","Name of the global variable":"Name of the global variable","Check if the global variable exists.":"Check if the global variable exists.","Check if a scene variable exists.":"Check if a scene variable exists.","Scene variable exists":"Scene variable exists","If the scene variable _PARAM1_ exist":"If the scene variable _PARAM1_ exist","Name of the scene variable":"Name of the scene variable","Check if the scene variable exists.":"Check if the scene variable exists.","Check if an object variable exists.":"Check if an object variable exists.","Object variable exists":"Object variable exists","Object _PARAM1_ has object variable _PARAM2_":"Object _PARAM1_ has object variable _PARAM2_","Name of object variable":"Name of object variable","Delete a global variable, removing it from memory.":"Delete a global variable, removing it from memory.","Delete global variable":"Delete global variable","Delete global variable _PARAM1_":"Delete global variable _PARAM1_","Name of the global variable to delete":"Name of the global variable to delete","Delete the global variable, removing it from memory.":"Delete the global variable, removing it from memory.","Delete the global variable _PARAM1_ from memory":"Delete the global variable _PARAM1_ from memory","Modify the text of a scene variable.":"Modify the text of a scene variable.","String of a scene variable":"String of a scene variable","Change the text of scene variable _PARAM1_ to _PARAM2_":"Change the text of scene variable _PARAM1_ to _PARAM2_","Modify the text of a global variable.":"Modify the text of a global variable.","String of a global variable":"String of a global variable","Change the text of global variable _PARAM1_ to _PARAM2_":"Change the text of global variable _PARAM1_ to _PARAM2_","Modify the value of a global variable.":"Modify the value of a global variable.","Value of a global variable":"Value of a global variable","Change the global variable _PARAM1_ with value: _PARAM2_":"Change the global variable _PARAM1_ with value: _PARAM2_","Modify the value of a scene variable.":"Modify the value of a scene variable.","Value of a scene variable":"Value of a scene variable","Change the scene variable _PARAM1_ with value: _PARAM2_":"Change the scene variable _PARAM1_ with value: _PARAM2_","Delete scene variable, the variable will be deleted from the memory.":"Delete scene variable, the variable will be deleted from the memory.","Delete scene variable":"Delete scene variable","Delete the scene variable _PARAM1_":"Delete the scene variable _PARAM1_","Name of the scene variable to delete":"Name of the scene variable to delete","Delete the scene variable, the variable will be deleted from the memory.":"Delete the scene variable, the variable will be deleted from the memory.","Delete the scene variable _PARAM1_ from memory":"Delete the scene variable _PARAM1_ from memory","Copy an object variable from one object to another.":"Copy an object variable from one object to another.","Copy an object variable":"Copy an object variable","Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_":"Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_","Source object":"Source object","Variable to copy":"Variable to copy","Destination object":"Destination object","To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.":"To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.","Destination variable":"Destination variable","Copy the object variable from one object to another.":"Copy the object variable from one object to another.","Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)":"Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)","Clear the destination variable before copying":"Clear the destination variable before copying","Copy all object variables from one object to another.":"Copy all object variables from one object to another.","Copy all object variables":"Copy all object variables","Copy all variables from _PARAM1_ to _PARAM2_":"Copy all variables from _PARAM1_ to _PARAM2_","Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)":"Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)","Delete an object variable, removing it from memory.":"Delete an object variable, removing it from memory.","Delete object variable":"Delete object variable","Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory":"Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory","Return the text of a global variable.":"Return the text of a global variable.","Text of a global variable":"Text of a global variable","Return the text of a scene variable.":"Return the text of a scene variable.","Text of a scene variable":"Text of a scene variable","Return the value of a global variable.":"Return the value of a global variable.","Return the value of a scene variable.":"Return the value of a scene variable.","Copy the global variable to scene. This copy everything from the types to the values.":"Copy the global variable to scene. This copy everything from the types to the values.","Copy a global variable to scene":"Copy a global variable to scene","Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)":"Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)","Global variable to copy":"Global variable to copy","Scene variable destination":"Scene variable destination","Copy the scene variable to global. This copy everything from the types to the values.":"Copy the scene variable to global. This copy everything from the types to the values.","Copy a scene variable to global":"Copy a scene variable to global","Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)":"Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)","Scene variable to copy":"Scene variable to copy","Global variable destination":"Global variable destination","Copy all the chidren of a variable into another variable.":"Copy all the chidren of a variable into another variable.","Copy a variable":"Copy a variable","Copy _PARAM1_ to _PARAM2_ (clear destination first: _PARAM3_)":"Copy _PARAM1_ to _PARAM2_ (clear destination first: _PARAM3_)","Frames per second (FPS)":"Frames per second (FPS)","Calculate and display frames per second (FPS).":"Calculate and display frames per second (FPS).","Frames per second (FPS) during the last second.":"Frames per second (FPS) during the last second.","Frames Per Second (FPS)":"Frames Per Second (FPS)","Frames per second (FPS) during the last second. [Deprecated]":"Frames per second (FPS) during the last second. [Deprecated]","Frames Per Second (FPS) [Deprecated]":"Frames Per Second (FPS) [Deprecated]","The accuracy of the FPS":"The accuracy of the FPS","This tells how many numbers after the period should be shown.":"This tells how many numbers after the period should be shown.","Makes a text object display the current FPS.":"Makes a text object display the current FPS.","FPS Displayer":"FPS Displayer","FPS counter prefix":"FPS counter prefix","Number of decimal digits":"Number of decimal digits","Face Forward":"Face Forward","Auto-rotate object to face its movement direction.":"Auto-rotate object to face its movement direction.","Face object towards the direction of movement.":"Face object towards the direction of movement.","Face forward":"Face forward","Rotation speed (degrees per second)":"Rotation speed (degrees per second)","Use \"0\" for immediate turning.":"Use \"0\" for immediate turning.","Offset angle":"Offset angle","Can be used when the image of the object is not facing to the right.":"Can be used when the image of the object is not facing to the right.","Previous X position":"Previous X position","Previous Y position":"Previous Y position","Direction the object is moving (in degrees)":"Direction the object is moving (in degrees)","Set rotation speed (degrees per second). Use \"0\" for immediate turning.":"Set rotation speed (degrees per second). Use \"0\" for immediate turning.","Set rotation speed":"Set rotation speed","Set rotation speed of _PARAM0_ to _PARAM2_":"Set rotation speed of _PARAM0_ to _PARAM2_","Rotation Speed":"Rotation Speed","Set offset angle.":"Set offset angle.","Set offset angle":"Set offset angle","Set offset angle of _PARAM0_ to _PARAM2_":"Set offset angle of _PARAM0_ to _PARAM2_","Rotation speed (in degrees per second).":"Rotation speed (in degrees per second).","Rotation speed":"Rotation speed","Rotation speed of _PARAM0_":"Rotation speed of _PARAM0_","Offset angle.":"Offset angle.","Direction the object is moving (in degrees).":"Direction the object is moving (in degrees).","Movement direction":"Movement direction","Fire bullets":"Fire bullets","Fire bullets with ammo count, reload timer, and overheat management.":"Fire bullets with ammo count, reload timer, and overheat management.","Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).":"Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).","Firing cooldown":"Firing cooldown","Objects cannot shoot while firing cooldown is active.":"Objects cannot shoot while firing cooldown is active.","Rotate bullets to match their trajectory":"Rotate bullets to match their trajectory","Firing arc":"Firing arc","Multi-Fire bullets will be evenly spaced inside the firing arc":"Multi-Fire bullets will be evenly spaced inside the firing arc","Multi-Fire":"Multi-Fire","Number of bullets created at once":"Number of bullets created at once","Angle variance":"Angle variance","Make imperfect aim (between 0 and 180 degrees).":"Make imperfect aim (between 0 and 180 degrees).","Firing variance":"Firing variance","Bullet speed variance":"Bullet speed variance","Bullet speed will be adjusted by a random value within this range.":"Bullet speed will be adjusted by a random value within this range.","Ammo quantity (current)":"Ammo quantity (current)","Shots per reload":"Shots per reload","Use 0 to disable reloading.":"Use 0 to disable reloading.","Reload":"Reload","Reloading duration":"Reloading duration","Objects cannot shoot while reloading is in progress.":"Objects cannot shoot while reloading is in progress.","Max ammo":"Max ammo","Ammo":"Ammo","Shots before next reload":"Shots before next reload","Total shots fired":"Total shots fired","Regardless of how many bullets are created, only 1 shot will be counted per frame":"Regardless of how many bullets are created, only 1 shot will be counted per frame","Total bullets created":"Total bullets created","Starting ammo":"Starting ammo","Total reloads completed":"Total reloads completed","Unlimited ammo":"Unlimited ammo","Heat increase per shot (between 0 and 1)":"Heat increase per shot (between 0 and 1)","Object is overheated when Heat reaches 1.":"Object is overheated when Heat reaches 1.","Overheat":"Overheat","Heat level (Range: 0 to 1)":"Heat level (Range: 0 to 1)","Reload automatically":"Reload automatically","Overheat duration":"Overheat duration","Object cannot shoot while overheat duration is active.":"Object cannot shoot while overheat duration is active.","Linear cooling rate (per second)":"Linear cooling rate (per second)","Exponential cooling rate (per second)":"Exponential cooling rate (per second)","Happens faster when heat is high and slower when heat is low.":"Happens faster when heat is high and slower when heat is low.","Layer the bullets are created on":"Layer the bullets are created on","Base layer by default.":"Base layer by default.","Shooting configuration":"Shooting configuration","Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.","Fire bullets toward an object":"Fire bullets toward an object","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s":"Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s","X position, where to create the bullet":"X position, where to create the bullet","Y position, where to create the bullet":"Y position, where to create the bullet","The bullet object":"The bullet object","Target object":"Target object","Speed of the bullet, in pixels per second":"Speed of the bullet, in pixels per second","Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.","Fire bullets toward a position":"Fire bullets toward a position","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s":"Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s","Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.","Fire bullets toward an angle":"Fire bullets toward an angle","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s":"Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s","Angle of the bullet, in degrees":"Angle of the bullet, in degrees","Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.":"Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.","Fire a single bullet":"Fire a single bullet","Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s":"Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s","Reload ammo.":"Reload ammo.","Reload ammo":"Reload ammo","Reload ammo on _PARAM0_":"Reload ammo on _PARAM0_","Check if the object has just fired something.":"Check if the object has just fired something.","Has just fired":"Has just fired","_PARAM0_ has just fired":"_PARAM0_ has just fired","Check if bullet rotates to match trajectory.":"Check if bullet rotates to match trajectory.","Is bullet rotation enabled":"Is bullet rotation enabled","Bullet rotation enabled on _PARAM0_":"Bullet rotation enabled on _PARAM0_","the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.":"the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.","the firing arc":"the firing arc","Firing arc (degrees) Range: 0 to 360":"Firing arc (degrees) Range: 0 to 360","Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.":"Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.","Set firing arc (deprecated)":"Set firing arc (deprecated)","Set firing arc of _PARAM0_ to _PARAM2_ degrees":"Set firing arc of _PARAM0_ to _PARAM2_ degrees","the angle variance (in degrees) applied to each bullet.":"the angle variance (in degrees) applied to each bullet.","the angle variance":"the angle variance","Angle variance (degrees) Range: 0 to 180":"Angle variance (degrees) Range: 0 to 180","Change the angle variance (in degrees) applied to each bullet.":"Change the angle variance (in degrees) applied to each bullet.","Set angle variance (deprecated)":"Set angle variance (deprecated)","Set angle variance of _PARAM0_ to _PARAM2_ degrees":"Set angle variance of _PARAM0_ to _PARAM2_ degrees","the bullet speed variance (pixels per second) applied to each bullet.":"the bullet speed variance (pixels per second) applied to each bullet.","the bullet speed variance":"the bullet speed variance","Change the speed variance (pixels per second) applied to each bullet.":"Change the speed variance (pixels per second) applied to each bullet.","Set bullet speed variance (deprecated)":"Set bullet speed variance (deprecated)","Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second":"Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second","the number of bullets shot every time the \"fire bullet\" action is used.":"the number of bullets shot every time the \"fire bullet\" action is used.","Bullets per shot":"Bullets per shot","the number of bullets per shot":"the number of bullets per shot","Bullets":"Bullets","Change the number of bullets shot every time the \"fire bullet\" action is used.":"Change the number of bullets shot every time the \"fire bullet\" action is used.","Set number of bullets per shot (deprecated)":"Set number of bullets per shot (deprecated)","Set number of bullets per shot of _PARAM0_ to _PARAM2_":"Set number of bullets per shot of _PARAM0_ to _PARAM2_","Change the layer that bullets are created on.":"Change the layer that bullets are created on.","Set bullet layer":"Set bullet layer","Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_":"Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_","Enable bullet rotation.":"Enable bullet rotation.","Enable (or disable) bullet rotation":"Enable (or disable) bullet rotation","Enable bullet rotation on _PARAM0_: _PARAM2_":"Enable bullet rotation on _PARAM0_: _PARAM2_","Rotate bullet to match trajetory":"Rotate bullet to match trajetory","Enable unlimited ammo.":"Enable unlimited ammo.","Enable (or disable) unlimited ammo":"Enable (or disable) unlimited ammo","Enable unlimited ammo on _PARAM0_: _PARAM2_":"Enable unlimited ammo on _PARAM0_: _PARAM2_","the firing cooldown (in seconds) also known as rate of fire.":"the firing cooldown (in seconds) also known as rate of fire.","the firing cooldown":"the firing cooldown","Cooldown in seconds":"Cooldown in seconds","Change the firing cooldown, which changes the rate of fire.":"Change the firing cooldown, which changes the rate of fire.","Set firing cooldown (deprecated)":"Set firing cooldown (deprecated)","Set the fire rate of _PARAM0_ to _PARAM2_ seconds":"Set the fire rate of _PARAM0_ to _PARAM2_ seconds","the reload duration (in seconds).":"the reload duration (in seconds).","Reload duration":"Reload duration","the reload duration":"the reload duration","Reload duration (seconds)":"Reload duration (seconds)","Change the duration to reload ammo.":"Change the duration to reload ammo.","Set reload duration (deprecated)":"Set reload duration (deprecated)","Set the reload duration of _PARAM0_ to _PARAM2_ seconds":"Set the reload duration of _PARAM0_ to _PARAM2_ seconds","the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.":"the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.","the overheat duration":"the overheat duration","Overheat duration (seconds)":"Overheat duration (seconds)","Change the duration after becoming overheated.":"Change the duration after becoming overheated.","Set overheat duration (deprecated)":"Set overheat duration (deprecated)","Set the overheat duration of _PARAM0_ to _PARAM2_ seconds":"Set the overheat duration of _PARAM0_ to _PARAM2_ seconds","the ammo quantity.":"the ammo quantity.","Ammo quantity":"Ammo quantity","the ammo quantity":"the ammo quantity","Change the quantity of ammo.":"Change the quantity of ammo.","Set ammo quantity (deprecated)":"Set ammo quantity (deprecated)","Set the ammo quantity of _PARAM0_ to _PARAM2_":"Set the ammo quantity of _PARAM0_ to _PARAM2_","the heat increase per shot.":"the heat increase per shot.","Heat increase per shot":"Heat increase per shot","the heat increase per shot":"the heat increase per shot","Heat increase per shot (Range: 0 to 1)":"Heat increase per shot (Range: 0 to 1)","Change the heat increase per shot.":"Change the heat increase per shot.","Set heat increase per shot (deprecated)":"Set heat increase per shot (deprecated)","Set the heat increase of _PARAM0_ to _PARAM2_ per shot":"Set the heat increase of _PARAM0_ to _PARAM2_ per shot","the max ammo.":"the max ammo.","the max ammo":"the max ammo","Change the max ammo.":"Change the max ammo.","Set max ammo (deprecated)":"Set max ammo (deprecated)","Set the max ammo of _PARAM0_ to _PARAM2_":"Set the max ammo of _PARAM0_ to _PARAM2_","Reset total shots fired.":"Reset total shots fired.","Reset total shots fired":"Reset total shots fired","Reset total shots fired by _PARAM0_":"Reset total shots fired by _PARAM0_","Reset total bullets created.":"Reset total bullets created.","Reset total bullets created":"Reset total bullets created","Reset total bullets created by _PARAM0_":"Reset total bullets created by _PARAM0_","Reset total reloads completed.":"Reset total reloads completed.","Reset total reloads completed":"Reset total reloads completed","Reset total reloads completed by _PARAM0_":"Reset total reloads completed by _PARAM0_","the number of shots per reload.":"the number of shots per reload.","the shots per reload":"the shots per reload","Change the number of shots per reload.":"Change the number of shots per reload.","Set shots per reload (deprecated)":"Set shots per reload (deprecated)","Set the shots per reload of _PARAM0_ to _PARAM2_":"Set the shots per reload of _PARAM0_ to _PARAM2_","Enable (or disable) automatic reloading.":"Enable (or disable) automatic reloading.","Enable (or disable) automatic reloading":"Enable (or disable) automatic reloading","Enable automatic reloading on _PARAM0_: _PARAM2_":"Enable automatic reloading on _PARAM0_: _PARAM2_","Enable automatic reloading":"Enable automatic reloading","the linear cooling rate (per second).":"the linear cooling rate (per second).","Linear cooling rate":"Linear cooling rate","the linear cooling rate":"the linear cooling rate","Heat cooling rate (per second)":"Heat cooling rate (per second)","Change the linear rate of cooling.":"Change the linear rate of cooling.","Set linear cooling rate (deprecated)":"Set linear cooling rate (deprecated)","Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second":"Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second","the exponential cooling rate, per second.":"the exponential cooling rate, per second.","Exponential cooling rate":"Exponential cooling rate","the exponential cooling rate":"the exponential cooling rate","Change the exponential rate of cooling.":"Change the exponential rate of cooling.","Set exponential cooling rate (deprecated)":"Set exponential cooling rate (deprecated)","Set the exponential cooling rate of _PARAM0_ to _PARAM2_":"Set the exponential cooling rate of _PARAM0_ to _PARAM2_","Increase ammo quantity.":"Increase ammo quantity.","Increase ammo":"Increase ammo","Increase ammo of _PARAM0_ by _PARAM2_ shots":"Increase ammo of _PARAM0_ by _PARAM2_ shots","Ammo gained":"Ammo gained","Layer that bullets are created on.":"Layer that bullets are created on.","Bullet layer":"Bullet layer","the heat level (range: 0 to 1).":"the heat level (range: 0 to 1).","Heat level":"Heat level","the heat level":"the heat level","Total shots fired (multi-bullet shots are considered one shot).":"Total shots fired (multi-bullet shots are considered one shot).","Shots fired":"Shots fired","Total bullets created.":"Total bullets created.","Bullets created":"Bullets created","Reloads completed.":"Reloads completed.","Reloads completed":"Reloads completed","the remaining shots before the next reload is required.":"the remaining shots before the next reload is required.","the remaining shots (before the next reload)":"the remaining shots (before the next reload)","the remaining duration before the cooldown will permit a bullet to be fired, in seconds.":"the remaining duration before the cooldown will permit a bullet to be fired, in seconds.","Duration before cooldown end":"Duration before cooldown end","the remaining duration before the cooldown end":"the remaining duration before the cooldown end","the remaining duration before the overheat penalty ends, in seconds.":"the remaining duration before the overheat penalty ends, in seconds.","Duration before overheat end":"Duration before overheat end","the remaining duration before the overheat end":"the remaining duration before the overheat end","the remaining duration before the reload finishes, in seconds.":"the remaining duration before the reload finishes, in seconds.","Duration before the reload finishes":"Duration before the reload finishes","the remaining duration before the reload finishes":"the remaining duration before the reload finishes","Check if object is currently performing an ammo reload.":"Check if object is currently performing an ammo reload.","Is ammo reloading in progress":"Is ammo reloading in progress","_PARAM0_ is reloading ammo":"_PARAM0_ is reloading ammo","Check if object is ready to shoot.":"Check if object is ready to shoot.","Is ready to shoot":"Is ready to shoot","_PARAM0_ is ready to shoot":"_PARAM0_ is ready to shoot","Check if automatic reloading is enabled.":"Check if automatic reloading is enabled.","Is automatic reloading enabled":"Is automatic reloading enabled","Automatic reloading is enabled on_PARAM0_":"Automatic reloading is enabled on_PARAM0_","Check if ammo is unlimited.":"Check if ammo is unlimited.","Is ammo unlimited":"Is ammo unlimited","_PARAM0_ has unlimited ammo":"_PARAM0_ has unlimited ammo","Check if object has no ammo available.":"Check if object has no ammo available.","Is out of ammo":"Is out of ammo","_PARAM0_ is out of ammo":"_PARAM0_ is out of ammo","Check if object needs to reload ammo.":"Check if object needs to reload ammo.","Is a reload needed":"Is a reload needed","_PARAM0_ needs to reload ammo":"_PARAM0_ needs to reload ammo","Check if object is overheated.":"Check if object is overheated.","Is overheated":"Is overheated","_PARAM0_ is overheated":"_PARAM0_ is overheated","Check if firing cooldown is active.":"Check if firing cooldown is active.","Is firing cooldown active":"Is firing cooldown active","Firing cooldown is active on _PARAM0_":"Firing cooldown is active on _PARAM0_","First person 3D camera":"First person 3D camera","Move the camera to look though objects eyes.":"Move the camera to look though objects eyes.","Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","Look through object eyes":"Look through object eyes","Move the camera of _PARAM2_ to look though _PARAM1_ eyes":"Move the camera of _PARAM2_ to look though _PARAM1_ eyes","Move the camera of _PARAM3_ to look though _PARAM1_ eyes":"Move the camera of _PARAM3_ to look though _PARAM1_ eyes","3D Object":"3D Object","Flash object":"Flash object","Flash/blink objects: toggle visibility, color tint, effect, or opacity over time.":"Flash/blink objects: toggle visibility, color tint, effect, or opacity over time.","Color tint applied to an object.":"Color tint applied to an object.","Color tint applied to an object":"Color tint applied to an object","Color tint applied to _PARAM1_":"Color tint applied to _PARAM1_","Check if a color tint is applied to an object.":"Check if a color tint is applied to an object.","Is a color tint applied to an object":"Is a color tint applied to an object","_PARAM1_ is color tinted":"_PARAM1_ is color tinted","Toggle color tint between the starting tint and a given value.":"Toggle color tint between the starting tint and a given value.","Toggle a color tint":"Toggle a color tint","Toggle color tint _PARAM2_ on _PARAM1_":"Toggle color tint _PARAM2_ on _PARAM1_","Color tint":"Color tint","Toggle object visibility.":"Toggle object visibility.","Toggle object visibility":"Toggle object visibility","Toggle visibility of _PARAM1_":"Toggle visibility of _PARAM1_","Make the object flash (blink) for a period of time so it alternates between visible and invisible.":"Make the object flash (blink) for a period of time so it alternates between visible and invisible.","Flash visibility (blink)":"Flash visibility (blink)","Half period":"Half period","Time that the object is invisible":"Time that the object is invisible","Flash duration":"Flash duration","Use \"0\" to keep flashing until stopped":"Use \"0\" to keep flashing until stopped","Make an object flash (blink) visibility for a period of time.":"Make an object flash (blink) visibility for a period of time.","Make _PARAM0_ flash (blink) for _PARAM2_ seconds":"Make _PARAM0_ flash (blink) for _PARAM2_ seconds","Duration of the flashing, in seconds":"Duration of the flashing, in seconds","Use \"0\" to keep flashing until stopped.":"Use \"0\" to keep flashing until stopped.","Check if an object is flashing visibility.":"Check if an object is flashing visibility.","Is object flashing visibility":"Is object flashing visibility","_PARAM0_ is flashing":"_PARAM0_ is flashing","Stop flashing visibility (blink) of an object.":"Stop flashing visibility (blink) of an object.","Stop flashing visibility (blink)":"Stop flashing visibility (blink)","Stop flashing visibility of _PARAM0_":"Stop flashing visibility of _PARAM0_","the half period of the object (time the object is invisible).":"the half period of the object (time the object is invisible).","the half period (time the object is invisible)":"the half period (time the object is invisible)","Make an object flash a color tint for a period of time.":"Make an object flash a color tint for a period of time.","Flash color tint":"Flash color tint","Time between flashes":"Time between flashes","Tint color":"Tint color","Flash a color tint":"Flash a color tint","Make _PARAM0_ flash the color tint _PARAM3_ for _PARAM2_ seconds":"Make _PARAM0_ flash the color tint _PARAM3_ for _PARAM2_ seconds","Check if an object is flashing a color tint.":"Check if an object is flashing a color tint.","Is object flashing a color tint":"Is object flashing a color tint","_PARAM0_ is flashing a color tint":"_PARAM0_ is flashing a color tint","Stop flashing a color tint on an object.":"Stop flashing a color tint on an object.","Stop flashing color tint":"Stop flashing color tint","Stop flashing color tint _PARAM0_":"Stop flashing color tint _PARAM0_","the half period (time between flashes) of the object.":"the half period (time between flashes) of the object.","the half period (time between flashes)":"the half period (time between flashes)","Flash opacity smoothly (fade) in a repeating loop.":"Flash opacity smoothly (fade) in a repeating loop.","Flash opacity smothly (fade)":"Flash opacity smothly (fade)","Opacity capability":"Opacity capability","Tween Behavior (required)":"Tween Behavior (required)","Target opacity (Range: 0 - 255)":"Target opacity (Range: 0 - 255)","Opacity will fade between the starting value and a target value":"Opacity will fade between the starting value and a target value","Starting opacity":"Starting opacity","Make an object flash opacity smoothly (fade) in a repeating loop.":"Make an object flash opacity smoothly (fade) in a repeating loop.","Flash the opacity (fade)":"Flash the opacity (fade)","Make _PARAM0_ flash opacity smoothly to _PARAM4_ in a loop for _PARAM3_ seconds":"Make _PARAM0_ flash opacity smoothly to _PARAM4_ in a loop for _PARAM3_ seconds","Target opacity":"Target opacity","Check if an object is flashing opacity.":"Check if an object is flashing opacity.","Is object flashing opacity":"Is object flashing opacity","_PARAM0_ is flashing opacity":"_PARAM0_ is flashing opacity","Stop flashing opacity of an object.":"Stop flashing opacity of an object.","Stop flashing opacity":"Stop flashing opacity","Stop flashing opacity of _PARAM0_":"Stop flashing opacity of _PARAM0_","Make the object flash an effect for a period of time.":"Make the object flash an effect for a period of time.","Flash effect":"Flash effect","Name of effect":"Name of effect","Make an object flash an effect for a period of time.":"Make an object flash an effect for a period of time.","Flash an effect":"Flash an effect","Make _PARAM0_ flash the effect _PARAM3_ for _PARAM2_ seconds":"Make _PARAM0_ flash the effect _PARAM3_ for _PARAM2_ seconds","Check if an object is flashing an effect.":"Check if an object is flashing an effect.","Is object flashing an effect":"Is object flashing an effect","_PARAM0_ is flashing an effect":"_PARAM0_ is flashing an effect","Stop flashing an effect of an object.":"Stop flashing an effect of an object.","Stop flashing an effect":"Stop flashing an effect","Stop flashing an effect on _PARAM0_":"Stop flashing an effect on _PARAM0_","Toggle an object effect.":"Toggle an object effect.","Toggle an object effect":"Toggle an object effect","Toggle effect _PARAM2_ on _PARAM0_":"Toggle effect _PARAM2_ on _PARAM0_","Effect name to toggle":"Effect name to toggle","Flash layer":"Flash layer","Show a layer for a set duration then automatically hide it.":"Show a layer for a set duration then automatically hide it.","Make a layer visible for a specified duration, and then hide the layer.":"Make a layer visible for a specified duration, and then hide the layer.","Make layer _PARAM1_ visible for _PARAM2_ seconds":"Make layer _PARAM1_ visible for _PARAM2_ seconds","Flash and transition painter":"Flash and transition painter","Screen transitions painted with plain color fill using Shape Painter.":"Screen transitions painted with plain color fill using Shape Painter.","Paint all over the screen a color for a period of time.":"Paint all over the screen a color for a period of time.","Type of effect":"Type of effect","Direction of transition":"Direction of transition","The maximum of the opacity only for flash":"The maximum of the opacity only for flash","Paint Effect.":"Paint Effect.","Paint Effect":"Paint Effect","Paint effect type _PARAM4_ of _PARAM0_ with direction _PARAM5_ and color _PARAM2_ for _PARAM3_ seconds":"Paint effect type _PARAM4_ of _PARAM0_ with direction _PARAM5_ and color _PARAM2_ for _PARAM3_ seconds","Direction transition":"Direction transition","End opacity":"End opacity","Paint effect ended.":"Paint effect ended.","Paint effect ended":"Paint effect ended","When paint effect of _PARAM0_ ends":"When paint effect of _PARAM0_ ends","Follow multiple 2D objects with the camera":"Follow multiple 2D objects with the camera","Auto-zoom and position camera to keep all instances of an object visible.":"Auto-zoom and position camera to keep all instances of an object visible.","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen.":"Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen.","Follow multiple objects with camera":"Follow multiple objects with camera","Move camera to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Max zoom: _PARAM4_. Move the camera at a speed of _PARAM5_":"Move camera to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Max zoom: _PARAM4_. Move the camera at a speed of _PARAM5_","Object (or Object group)":"Object (or Object group)","Extra space on sides of screen":"Extra space on sides of screen","Each side will include this buffer":"Each side will include this buffer","Extra space on top and bottom of screen":"Extra space on top and bottom of screen","Maximum zoom level (Default: 1)":"Maximum zoom level (Default: 1)","Limit how far the camera will zoom in":"Limit how far the camera will zoom in","Camera move speed (Range: 0 to 1) (Default: 0.05)":"Camera move speed (Range: 0 to 1) (Default: 0.05)","Percent of distance to destination that will be travelled each frame (used by lerp function)":"Percent of distance to destination that will be travelled each frame (used by lerp function)","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen. (Deprecated)":"Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen. (Deprecated)","Follow multiple objects with camera (Deprecated)":"Follow multiple objects with camera (Deprecated)","Move camera on layer _PARAM6_ to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Use a zoom between _PARAM4_ and _PARAM5_. Move the camera at a speed of _PARAM8_":"Move camera on layer _PARAM6_ to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Use a zoom between _PARAM4_ and _PARAM5_. Move the camera at a speed of _PARAM8_","Minimum zoom level":"Minimum zoom level","Limit how far the camera will zoom OUT":"Limit how far the camera will zoom OUT","Limit how far the camera will zoom IN":"Limit how far the camera will zoom IN","Use \"\" for base layer":"Use \"\" for base layer","Gamepads (controllers)":"Gamepads (controllers)","Gamepad/controller support: buttons, sticks, triggers, vibration. Mapper behaviors for 2D/3D.":"Gamepad/controller support: buttons, sticks, triggers, vibration. Mapper behaviors for 2D/3D.","Accelerated speed":"Accelerated speed","Current speed":"Current speed","Targeted speed":"Targeted speed","Deceleration":"Deceleration","Get the value of the pressure on a gamepad trigger.":"Get the value of the pressure on a gamepad trigger.","Pressure on a gamepad trigger":"Pressure on a gamepad trigger","Player _PARAM1_ push axis _PARAM2_ to _PARAM3_":"Player _PARAM1_ push axis _PARAM2_ to _PARAM3_","The gamepad identifier: 1, 2, 3 or 4":"The gamepad identifier: 1, 2, 3 or 4","Trigger button":"Trigger button","the force of gamepad stick (from 0 to 1).":"the force of gamepad stick (from 0 to 1).","Stick force":"Stick force","the gamepad _PARAM1_ _PARAM2_ stick force":"the gamepad _PARAM1_ _PARAM2_ stick force","Stick: \"Left\" or \"Right\"":"Stick: \"Left\" or \"Right\"","Get the rotation value of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"Get the rotation value of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.","Value of a stick rotation (deprecated)":"Value of a stick rotation (deprecated)","Return the angle of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"Return the angle of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.","Stick angle":"Stick angle","Get the value of axis of a gamepad stick.":"Get the value of axis of a gamepad stick.","Value of a gamepad axis (deprecated)":"Value of a gamepad axis (deprecated)","Direction":"Direction","Return the gamepad stick force on X axis (from -1 at the left to 1 at the right).":"Return the gamepad stick force on X axis (from -1 at the left to 1 at the right).","Stick X force":"Stick X force","Return the gamepad stick force on Y axis (from -1 at the top to 1 at the bottom).":"Return the gamepad stick force on Y axis (from -1 at the top to 1 at the bottom).","Stick Y force":"Stick Y force","Test if a button is released on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"Test if a button is released on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button released":"Gamepad button released","Button _PARAM2_ of gamepad _PARAM1_ is released":"Button _PARAM2_ of gamepad _PARAM1_ is released","Name of the button":"Name of the button","Check if a button was just pressed on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"Check if a button was just pressed on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button just pressed":"Gamepad button just pressed","Button _PARAM2_ of gamepad _PARAM1_ was just pressed":"Button _PARAM2_ of gamepad _PARAM1_ was just pressed","Return the index of the last pressed button of a gamepad.":"Return the index of the last pressed button of a gamepad.","Last pressed button (id)":"Last pressed button (id)","Check if any button is pressed on a gamepad.":"Check if any button is pressed on a gamepad.","Any gamepad button pressed":"Any gamepad button pressed","Any button of gamepad _PARAM1_ is pressed":"Any button of gamepad _PARAM1_ is pressed","Return the last button pressed. \nButtons for Xbox and PS4 can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Both: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"Return the last button pressed. \nButtons for Xbox and PS4 can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Both: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Last pressed button (string)":"Last pressed button (string)","Button _PARAM2_ of gamepad _PARAM1_ is pressed":"Button _PARAM2_ of gamepad _PARAM1_ is pressed","Controller type":"Controller type","Return the number of gamepads.":"Return the number of gamepads.","Gamepad count":"Gamepad count","Check if a button is pressed on a gamepad. \nButtons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"Check if a button is pressed on a gamepad. \nButtons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button pressed":"Gamepad button pressed","Return the value of the deadzone applied to a gamepad sticks, between 0 and 1.":"Return the value of the deadzone applied to a gamepad sticks, between 0 and 1.","Gamepad deadzone for sticks":"Gamepad deadzone for sticks","Set the deadzone for sticks of the gamepad. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved). Deadzone is between 0 and 1, and is by default 0.2.":"Set the deadzone for sticks of the gamepad. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved). Deadzone is between 0 and 1, and is by default 0.2.","Set gamepad deadzone for sticks":"Set gamepad deadzone for sticks","Set deadzone for sticks on gamepad: _PARAM1_ to _PARAM2_":"Set deadzone for sticks on gamepad: _PARAM1_ to _PARAM2_","Deadzone for sticks, 0.2 by default (0 to 1)":"Deadzone for sticks, 0.2 by default (0 to 1)","Check if a stick of a gamepad is pushed in a given direction.":"Check if a stick of a gamepad is pushed in a given direction.","Gamepad stick pushed (axis)":"Gamepad stick pushed (axis)","_PARAM2_ stick of gamepad _PARAM1_ is pushed in direction _PARAM3_":"_PARAM2_ stick of gamepad _PARAM1_ is pushed in direction _PARAM3_","Return the number of connected gamepads.":"Return the number of connected gamepads.","Connected gamepads count":"Connected gamepads count","Return a string containing informations about the specified gamepad.":"Return a string containing informations about the specified gamepad.","Gamepad type":"Gamepad type","Player _PARAM1_ use _PARAM2_ controller":"Player _PARAM1_ use _PARAM2_ controller","Check if the specified gamepad has the specified information in its description. Useful to know if the gamepad is a Xbox or PS4 controller.":"Check if the specified gamepad has the specified information in its description. Useful to know if the gamepad is a Xbox or PS4 controller.","Gamepad _PARAM1_ is a _PARAM2_ controller":"Gamepad _PARAM1_ is a _PARAM2_ controller","Type: \"Xbox\", \"PS4\", \"Steam\" or \"PS3\" (among other)":"Type: \"Xbox\", \"PS4\", \"Steam\" or \"PS3\" (among other)","Check if a gamepad is connected.":"Check if a gamepad is connected.","Gamepad connected":"Gamepad connected","Gamepad _PARAM1_ is plugged and connected":"Gamepad _PARAM1_ is plugged and connected","Generate a vibration on the specified controller. Might only work if the game is running in a recent web browser.":"Generate a vibration on the specified controller. Might only work if the game is running in a recent web browser.","Gamepad vibration":"Gamepad vibration","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds":"Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds","Time of the vibration, in seconds (optional, default value is 1)":"Time of the vibration, in seconds (optional, default value is 1)","Generate an advanced vibration on the specified controller. Incompatible with Firefox.":"Generate an advanced vibration on the specified controller. Incompatible with Firefox.","Advanced gamepad vibration":"Advanced gamepad vibration","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds with the vibration magnitude of _PARAM3_ and _PARAM4_":"Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds with the vibration magnitude of _PARAM3_ and _PARAM4_","Strong rumble magnitude (from 0 to 1)":"Strong rumble magnitude (from 0 to 1)","Weak rumble magnitude (from 0 to 1)":"Weak rumble magnitude (from 0 to 1)","Change a vibration on the specified controller. Incompatible with Firefox.":"Change a vibration on the specified controller. Incompatible with Firefox.","Change gamepad active vibration":"Change gamepad active vibration","Change the vibration magnitude of _PARAM2_ & _PARAM3_ on gamepad _PARAM1_":"Change the vibration magnitude of _PARAM2_ & _PARAM3_ on gamepad _PARAM1_","Check if any button is released on a gamepad.":"Check if any button is released on a gamepad.","Any gamepad button released":"Any gamepad button released","Any button of gamepad _PARAM1_ is released":"Any button of gamepad _PARAM1_ is released","Return the strength of the weak vibration motor on the gamepad of a player.":"Return the strength of the weak vibration motor on the gamepad of a player.","Weak rumble magnitude":"Weak rumble magnitude","Return the strength of the strong vibration motor on the gamepad of a player.":"Return the strength of the strong vibration motor on the gamepad of a player.","Strong rumble magnitude":"Strong rumble magnitude","Control a platformer character with a gamepad.":"Control a platformer character with a gamepad.","Platformer gamepad mapper":"Platformer gamepad mapper","Gamepad identifier (1, 2, 3 or 4)":"Gamepad identifier (1, 2, 3 or 4)","Use directional pad":"Use directional pad","Controls":"Controls","Use left stick":"Use left stick","Use right stick":"Use right stick","Jump button":"Jump button","Control a 3D physics character with a gamepad.":"Control a 3D physics character with a gamepad.","3D platformer gamepad mapper":"3D platformer gamepad mapper","Walk joystick":"Walk joystick","3D shooter gamepad mapper":"3D shooter gamepad mapper","Camera joystick":"Camera joystick","Control camera rotations with a gamepad.":"Control camera rotations with a gamepad.","First person camera gamepad mapper":"First person camera gamepad mapper","Maximum rotation speed":"Maximum rotation speed","Horizontal rotation":"Horizontal rotation","Rotation acceleration":"Rotation acceleration","Rotation deceleration":"Rotation deceleration","Vertical rotation":"Vertical rotation","Minimum angle":"Minimum angle","Maximum angle":"Maximum angle","Z position offset":"Z position offset","Position":"Position","Current rotation speed Z":"Current rotation speed Z","Current rotation speed Y":"Current rotation speed Y","Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","Move the camera to look though _PARAM0_ eyes":"Move the camera to look though _PARAM0_ eyes","the maximum horizontal rotation speed of the object.":"the maximum horizontal rotation speed of the object.","Maximum horizontal rotation speed":"Maximum horizontal rotation speed","the maximum horizontal rotation speed":"the maximum horizontal rotation speed","the horizontal rotation acceleration of the object.":"the horizontal rotation acceleration of the object.","Horizontal rotation acceleration":"Horizontal rotation acceleration","the horizontal rotation acceleration":"the horizontal rotation acceleration","the horizontal rotation deceleration of the object.":"the horizontal rotation deceleration of the object.","Horizontal rotation deceleration":"Horizontal rotation deceleration","the horizontal rotation deceleration":"the horizontal rotation deceleration","the maximum vertical rotation speed of the object.":"the maximum vertical rotation speed of the object.","Maximum vertical rotation speed":"Maximum vertical rotation speed","the maximum vertical rotation speed":"the maximum vertical rotation speed","the vertical rotation acceleration of the object.":"the vertical rotation acceleration of the object.","Vertical rotation acceleration":"Vertical rotation acceleration","the vertical rotation acceleration":"the vertical rotation acceleration","the vertical rotation deceleration of the object.":"the vertical rotation deceleration of the object.","Vertical rotation deceleration":"Vertical rotation deceleration","the vertical rotation deceleration":"the vertical rotation deceleration","the minimum vertical camera angle of the object.":"the minimum vertical camera angle of the object.","Minimum vertical camera angle":"Minimum vertical camera angle","the minimum vertical camera angle":"the minimum vertical camera angle","the maximum vertical camera angle of the object.":"the maximum vertical camera angle of the object.","Maximum vertical camera angle":"Maximum vertical camera angle","the maximum vertical camera angle":"the maximum vertical camera angle","the z position offset of the object.":"the z position offset of the object.","the z position offset":"the z position offset","Control a 3D physics car with a gamepad.":"Control a 3D physics car with a gamepad.","3D car gamepad mapper":"3D car gamepad mapper","3D physics car":"3D physics car","Hand brake button":"Hand brake button","Control a top-down character with a gamepad.":"Control a top-down character with a gamepad.","Top-down gamepad mapper":"Top-down gamepad mapper","Top-down movement behavior":"Top-down movement behavior","Stick mode":"Stick mode","Hash":"Hash","Hash strings using MD5 or SHA256 algorithms.":"Hash strings using MD5 or SHA256 algorithms.","Returns a Hash a MD5 based on a string.":"Returns a Hash a MD5 based on a string.","Hash a String with MD5":"Hash a String with MD5","String to be hashed":"String to be hashed","Returns a Hash a SHA256 based on a string.":"Returns a Hash a SHA256 based on a string.","Hash a String with SHA256":"Hash a String with SHA256","Health points and damage":"Health points and damage","Health/life system: damage, shield, armor, regeneration, cooldown, and over-healing.":"Health/life system: damage, shield, armor, regeneration, cooldown, and over-healing.","Manage health (life) points, shield and armor.":"Manage health (life) points, shield and armor.","Health":"Health","Starting health":"Starting health","Current health (life) points":"Current health (life) points","Maximum health":"Maximum health","Use 0 for no maximum.":"Use 0 for no maximum.","Damage cooldown":"Damage cooldown","Allow heals to increase health above max health (regen will never exceed max health)":"Allow heals to increase health above max health (regen will never exceed max health)","Damage to health from the previous incoming damage":"Damage to health from the previous incoming damage","Chance to dodge incoming damage (between 0 and 1)":"Chance to dodge incoming damage (between 0 and 1)","When a damage is dodged, no damage is applied.":"When a damage is dodged, no damage is applied.","Health points gained from the previous heal":"Health points gained from the previous heal","Rate of health regeneration (points per second)":"Rate of health regeneration (points per second)","Health regeneration":"Health regeneration","Health regeneration delay":"Health regeneration delay","Delay before health regeneration starts after a hit.":"Delay before health regeneration starts after a hit.","Current shield points":"Current shield points","Shield":"Shield","Maximum shield":"Maximum shield","Leave 0 for unlimited.":"Leave 0 for unlimited.","Duration of shield":"Duration of shield","Use 0 to make the shield permanent.":"Use 0 to make the shield permanent.","Rate of shield regeneration (points per second)":"Rate of shield regeneration (points per second)","Shield regeneration":"Shield regeneration","Block excess damage when shield is broken":"Block excess damage when shield is broken","Shield regeneration delay":"Shield regeneration delay","Delay before shield regeneration starts after a hit.":"Delay before shield regeneration starts after a hit.","Damage to shield from the previous incoming damage":"Damage to shield from the previous incoming damage","Flat damage reduction from armor":"Flat damage reduction from armor","Incoming damages are reduced by this value.":"Incoming damages are reduced by this value.","Armor":"Armor","Percentage damage reduction from armor (between 0 and 1)":"Percentage damage reduction from armor (between 0 and 1)","Apply damage to the object. Shield and armor can reduce this damage if enabled.":"Apply damage to the object. Shield and armor can reduce this damage if enabled.","Apply damage to an object":"Apply damage to an object","Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)":"Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)","Points of damage":"Points of damage","Shield can reduce damage taken":"Shield can reduce damage taken","Armor can reduce damage taken":"Armor can reduce damage taken","current health points of the object.":"current health points of the object.","Health points":"Health points","health points":"health points","Change the health points of the object. Will not trigger damage cooldown.":"Change the health points of the object. Will not trigger damage cooldown.","Change health points":"Change health points","Change the health of _PARAM0_ to _PARAM2_ points":"Change the health of _PARAM0_ to _PARAM2_ points","New health value":"New health value","Change health points (deprecated)":"Change health points (deprecated)","Heal the object by increasing its health points.":"Heal the object by increasing its health points.","Heal object":"Heal object","Heal _PARAM0_ with _PARAM2_ health points":"Heal _PARAM0_ with _PARAM2_ health points","Points to heal (will be added to object health)":"Points to heal (will be added to object health)","the maximum health points of the object.":"the maximum health points of the object.","Maximum health points":"Maximum health points","the maximum health points":"the maximum health points","Change the object maximum health points.":"Change the object maximum health points.","Maximum health points (deprecated)":"Maximum health points (deprecated)","Change the maximum health of _PARAM0_ to _PARAM2_ points":"Change the maximum health of _PARAM0_ to _PARAM2_ points","the rate of health regeneration (points per second).":"the rate of health regeneration (points per second).","Rate of health regeneration":"Rate of health regeneration","the rate of health regeneration":"the rate of health regeneration","Rate of regen":"Rate of regen","Change the rate of health regeneration.":"Change the rate of health regeneration.","Rate of health regeneration (deprecated)":"Rate of health regeneration (deprecated)","Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second":"Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second","the duration of damage cooldown (seconds).":"the duration of damage cooldown (seconds).","the duration of damage cooldown":"the duration of damage cooldown","Duration of damage cooldown (seconds)":"Duration of damage cooldown (seconds)","Change the duration of damage cooldown (seconds).":"Change the duration of damage cooldown (seconds).","Damage cooldown (deprecated)":"Damage cooldown (deprecated)","Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds":"Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds","the delay before health regeneration starts after last being hit (seconds).":"the delay before health regeneration starts after last being hit (seconds).","the health regeneration delay":"the health regeneration delay","Delay (seconds)":"Delay (seconds)","Change the delay before health regeneration starts after being hit.":"Change the delay before health regeneration starts after being hit.","Health regeneration delay (deprecated)":"Health regeneration delay (deprecated)","Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds":"Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds","the chance to dodge incoming damage (range: 0 to 1).":"the chance to dodge incoming damage (range: 0 to 1).","Dodge chance":"Dodge chance","the chance to dodge incoming damage":"the chance to dodge incoming damage","Chance to dodge (Range: 0 to 1)":"Chance to dodge (Range: 0 to 1)","Change the chance to dodge incoming damage.":"Change the chance to dodge incoming damage.","Chance to dodge incoming damage (deprecated)":"Chance to dodge incoming damage (deprecated)","Change the chance to dodge on _PARAM0_ to _PARAM2_":"Change the chance to dodge on _PARAM0_ to _PARAM2_","the flat damage reduction from the armor. Incoming damage is reduced by this value.":"the flat damage reduction from the armor. Incoming damage is reduced by this value.","Armor flat damage reduction":"Armor flat damage reduction","the armor flat damage reduction":"the armor flat damage reduction","Flat reduction from armor":"Flat reduction from armor","Change the flat damage reduction from armor. Incoming damage is reduced by this value.":"Change the flat damage reduction from armor. Incoming damage is reduced by this value.","Flat damage reduction from armor (deprecated)":"Flat damage reduction from armor (deprecated)","Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points":"Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points","the percent damage reduction from armor (range: 0 to 1).":"the percent damage reduction from armor (range: 0 to 1).","Armor percent damage reduction":"Armor percent damage reduction","the armor percent damage reduction":"the armor percent damage reduction","Percent damage reduction from armor":"Percent damage reduction from armor","Change the percent damage reduction from armor. Range: 0 to 1.":"Change the percent damage reduction from armor. Range: 0 to 1.","Percent damage reduction from armor (deprecated)":"Percent damage reduction from armor (deprecated)","Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_":"Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_","Allow heals to increase health above max health. Regeneration will not exceed max health.":"Allow heals to increase health above max health. Regeneration will not exceed max health.","Allow over-healing":"Allow over-healing","Allow over-healing on _PARAM0_: _PARAM2_":"Allow over-healing on _PARAM0_: _PARAM2_","Mark object as hit at least once.":"Mark object as hit at least once.","Mark object as hit at least once":"Mark object as hit at least once","Mark _PARAM0_ as hit at least once: _PARAM2_":"Mark _PARAM0_ as hit at least once: _PARAM2_","Hit at least once":"Hit at least once","Mark object as just damaged.":"Mark object as just damaged.","Mark object as just damaged":"Mark object as just damaged","Mark _PARAM0_ as just damaged: _PARAM2_":"Mark _PARAM0_ as just damaged: _PARAM2_","Just damaged":"Just damaged","Trigger damage cooldown.":"Trigger damage cooldown.","Trigger damage cooldown":"Trigger damage cooldown","Trigger the damage cooldown on _PARAM0_":"Trigger the damage cooldown on _PARAM0_","Check if the object has been hit at least once.":"Check if the object has been hit at least once.","Object has been hit at least once":"Object has been hit at least once","_PARAM0_ has been hit at least once":"_PARAM0_ has been hit at least once","Check if health was just damaged previously in the events.":"Check if health was just damaged previously in the events.","Is health just damaged":"Is health just damaged","Health has just been damaged on _PARAM0_":"Health has just been damaged on _PARAM0_","Check if the object was just healed previously in the events.":"Check if the object was just healed previously in the events.","Is just healed":"Is just healed","_PARAM0_ has just been healed":"_PARAM0_ has just been healed","Check if damage cooldown is active. Object and shield cannot be damaged while this is active.":"Check if damage cooldown is active. Object and shield cannot be damaged while this is active.","Is damage cooldown active":"Is damage cooldown active","Damage cooldown on _PARAM0_ is active":"Damage cooldown on _PARAM0_ is active","the time before damage cooldown ends (seconds).":"the time before damage cooldown ends (seconds).","Time remaining in damage cooldown":"Time remaining in damage cooldown","the time before damage cooldown end":"the time before damage cooldown end","Check if the object is considered dead (no health points).":"Check if the object is considered dead (no health points).","Is dead":"Is dead","_PARAM0_ is dead":"_PARAM0_ is dead","the time since last taken hit (seconds).":"the time since last taken hit (seconds).","Time since last hit":"Time since last hit","the time since last taken hit on health":"the time since last taken hit on health","the health damage taken from most recent hit.":"the health damage taken from most recent hit.","Health damage taken from most recent hit":"Health damage taken from most recent hit","the health damage taken from most recent hit":"the health damage taken from most recent hit","the maximum shield points of the object.":"the maximum shield points of the object.","Maximum shield points":"Maximum shield points","the maximum shield points":"the maximum shield points","Change the maximum shield points of the object.":"Change the maximum shield points of the object.","Maximum shield points (deprecated)":"Maximum shield points (deprecated)","Change the maximum shield of _PARAM0_ to _PARAM2_ points":"Change the maximum shield of _PARAM0_ to _PARAM2_ points","Change maximum shield points.":"Change maximum shield points.","Max shield points (deprecated)":"Max shield points (deprecated)","Change the maximum shield points on _PARAM0_ to _PARAM2_ points":"Change the maximum shield points on _PARAM0_ to _PARAM2_ points","Shield points":"Shield points","the current shield points of the object.":"the current shield points of the object.","the shield points":"the shield points","Change current shield points. Will not trigger damage cooldown.":"Change current shield points. Will not trigger damage cooldown.","Shield points (deprecated)":"Shield points (deprecated)","Change current shield points on _PARAM0_ to _PARAM2_ points":"Change current shield points on _PARAM0_ to _PARAM2_ points","the rate of shield regeneration (points per second).":"the rate of shield regeneration (points per second).","Rate of shield regeneration":"Rate of shield regeneration","the rate of shield regeneration":"the rate of shield regeneration","Regeneration rate (points per second)":"Regeneration rate (points per second)","Change rate of shield regeneration.":"Change rate of shield regeneration.","Shield regeneration rate (deprecated)":"Shield regeneration rate (deprecated)","Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second":"Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second","the delay before shield regeneration starts after being hit (seconds).":"the delay before shield regeneration starts after being hit (seconds).","the shield regeneration delay":"the shield regeneration delay","Regeneration delay (seconds)":"Regeneration delay (seconds)","Change delay before shield regeneration starts after being hit.":"Change delay before shield regeneration starts after being hit.","Shield regeneration delay (deprecated)":"Shield regeneration delay (deprecated)","Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds":"Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds","the duration of the shield (seconds). A value of \"0\" means the shield is permanent.":"the duration of the shield (seconds). A value of \"0\" means the shield is permanent.","the duration of the shield":"the duration of the shield","Shield duration (seconds)":"Shield duration (seconds)","Change duration of shield. Use \"0\" to make shield permanent.":"Change duration of shield. Use \"0\" to make shield permanent.","Duration of shield (deprecated)":"Duration of shield (deprecated)","Change the duration of shield on _PARAM0_ to _PARAM2_ seconds":"Change the duration of shield on _PARAM0_ to _PARAM2_ seconds","Renew shield duration to it's full value.":"Renew shield duration to it's full value.","Renew shield duration":"Renew shield duration","Renew the shield duration on _PARAM0_":"Renew the shield duration on _PARAM0_","Activate the shield by setting the shield points and renewing the shield duration (optional).":"Activate the shield by setting the shield points and renewing the shield duration (optional).","Activate shield":"Activate shield","Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)":"Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)","Enable (or disable) blocking excess damage when shield breaks.":"Enable (or disable) blocking excess damage when shield breaks.","Block excess damage when shield breaks":"Block excess damage when shield breaks","Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_":"Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_","Block excess damage":"Block excess damage","Check if the shield was just damaged previously in the events.":"Check if the shield was just damaged previously in the events.","Is shield just damaged":"Is shield just damaged","Shield on _PARAM0_ has just been damaged":"Shield on _PARAM0_ has just been damaged","Check if incoming damage was just dodged.":"Check if incoming damage was just dodged.","Damage was just dodged":"Damage was just dodged","_PARAM0_ just dodged incoming damage":"_PARAM0_ just dodged incoming damage","Check if the shield is active (based on shield points and duration).":"Check if the shield is active (based on shield points and duration).","Is shield active":"Is shield active","Shield on _PARAM0_ is active":"Shield on _PARAM0_ is active","the time before the shield duration ends (seconds).":"the time before the shield duration ends (seconds).","Time before shield duration ends":"Time before shield duration ends","the time before the shield duration end":"the time before the shield duration end","the shield damage taken from most recent hit.":"the shield damage taken from most recent hit.","Shield damage taken from most recent hit":"Shield damage taken from most recent hit","the shield damage taken from most recent hit":"the shield damage taken from most recent hit","the health points gained from previous heal.":"the health points gained from previous heal.","Health points gained from previous heal":"Health points gained from previous heal","the health points gained from previous heal":"the health points gained from previous heal","Hexagonal 2D grid":"Hexagonal 2D grid","Snap objects to an hexagonal grid.":"Snap objects to an hexagonal grid.","Snap object to a virtual pointy topped hexagonal grid (this is not the grid used in the editor).":"Snap object to a virtual pointy topped hexagonal grid (this is not the grid used in the editor).","Snap objects to a virtual pointy topped hexagonal grid":"Snap objects to a virtual pointy topped hexagonal grid","Snap _PARAM1_ to a virtual pointy topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual pointy topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","Objects to snap to the virtual grid":"Objects to snap to the virtual grid","Width of a cell of the virtual grid (in pixels)":"Width of a cell of the virtual grid (in pixels)","Height of a cell of the virtual grid (in pixels)":"Height of a cell of the virtual grid (in pixels)","The actual row height will be 3/4 of this.":"The actual row height will be 3/4 of this.","Offset on the X axis of the virtual grid (in pixels)":"Offset on the X axis of the virtual grid (in pixels)","Offset on the Y axis of the virtual grid (in pixels)":"Offset on the Y axis of the virtual grid (in pixels)","Odd rows are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"Odd rows are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.","Snap object to a virtual flat topped hexagonal grid (this is not the grid used in the editor).":"Snap object to a virtual flat topped hexagonal grid (this is not the grid used in the editor).","Snap objects to a virtual flat topped hexagonal grid":"Snap objects to a virtual flat topped hexagonal grid","Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","The actual column width will be 3/4 of this.":"The actual column width will be 3/4 of this.","Odd columns are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"Odd columns are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.","Snap object to a virtual bubble grid (this is not the grid used in the editor).":"Snap object to a virtual bubble grid (this is not the grid used in the editor).","Snap objects to a virtual bubble grid":"Snap objects to a virtual bubble grid","Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","The actual row height will be 7/8 of this.":"The actual row height will be 7/8 of this.","Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way":"Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way","Homing projectile":"Homing projectile","Make a projectile object move towards a target object.":"Make a projectile object move towards a target object.","Lock projectile object to target object. (This is required for \"Move projectile towards target\").":"Lock projectile object to target object. (This is required for \"Move projectile towards target\").","Lock projectile to target":"Lock projectile to target","Lock projectile _PARAM1_ to target _PARAM2_":"Lock projectile _PARAM1_ to target _PARAM2_","Projectile object":"Projectile object","Move physics projectile towards the object that it has been locked to. This action must be run every frame.":"Move physics projectile towards the object that it has been locked to. This action must be run every frame.","Move physics projectile towards target":"Move physics projectile towards target","Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_","Physics Behavior":"Physics Behavior","Initial speed (pixels per second)":"Initial speed (pixels per second)","Acceleration (speed increase per second)":"Acceleration (speed increase per second)","Max lifetime (seconds)":"Max lifetime (seconds)","Projectile will be deleted after this value is reached.":"Projectile will be deleted after this value is reached.","Delete Projectile if it collides with Target:":"Delete Projectile if it collides with Target:","Move projectile towards the object that it has been locked to. This action must be run every frame.":"Move projectile towards the object that it has been locked to. This action must be run every frame.","Move projectile towards target":"Move projectile towards target","Move projectile _PARAM1_ towards target _PARAM2_. Rotate speed: _PARAM3_ Initial speed: _PARAM4_ Acceleration: _PARAM5_ Max speed: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"Move projectile _PARAM1_ towards target _PARAM2_. Rotate speed: _PARAM3_ Initial speed: _PARAM4_ Acceleration: _PARAM5_ Max speed: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_","Idle object tracker":"Idle object tracker","Detect if object hasn't moved for a configurable duration.":"Detect if object hasn't moved for a configurable duration.","Check if an object has not moved (with some tolerance, 20 pixels by default) for a certain duration (1 second by default).":"Check if an object has not moved (with some tolerance, 20 pixels by default) for a certain duration (1 second by default).","Idle tracker":"Idle tracker","Time, in seconds, before considering the object as idle":"Time, in seconds, before considering the object as idle","Distance, in pixels, allowed for the object to travel and still be considered idle":"Distance, in pixels, allowed for the object to travel and still be considered idle","Check if the object has just moved from its last position (using the tolerance configured in the behavior).":"Check if the object has just moved from its last position (using the tolerance configured in the behavior).","Has just moved from last position":"Has just moved from last position","_PARAM0_ has moved from its last position":"_PARAM0_ has moved from its last position","Check if the object is idle: it has not moved from its last position (or within the tolerance) for the time configured in the behavior.":"Check if the object is idle: it has not moved from its last position (or within the tolerance) for the time configured in the behavior.","Is idle (since enough time)":"Is idle (since enough time)","Iframe":"Iframe","Embed external websites in-game using HTML iframes. Create/delete dynamically.":"Embed external websites in-game using HTML iframes. Create/delete dynamically.","Create a new Iframe to embed a website inside the game.":"Create a new Iframe to embed a website inside the game.","Create an Iframe":"Create an Iframe","Create Iframe _PARAM1_ at position _PARAM5_:_PARAM6_, width: _PARAM3_, height: _PARAM4_, url: _PARAM2_":"Create Iframe _PARAM1_ at position _PARAM5_:_PARAM6_, width: _PARAM3_, height: _PARAM4_, url: _PARAM2_","Name (DOM id)":"Name (DOM id)","Width":"Width","Height":"Height","Show scrollbar":"Show scrollbar","Show border":"Show border","Extra CSS styles (optional)":"Extra CSS styles (optional)","e.g: `\"border: 10px #f00 solid;\"`":"e.g: `\"border: 10px #f00 solid;\"`","Delete the specified Iframe.":"Delete the specified Iframe.","Delete an Iframe":"Delete an Iframe","Delete Iframe _PARAM1_":"Delete Iframe _PARAM1_","Mobile In-App Purchase (experimental)":"Mobile In-App Purchase (experimental)","In-app purchases for Android/iOS: list products, buy, and restore purchases.":"In-app purchases for Android/iOS: list products, buy, and restore purchases.","Ads":"Ads","Register a Product of your store. This is required to do for all products you want to display or order from the app. \nMake sure you register them all and finalize registration before ordering a product.":"Register a Product of your store. This is required to do for all products you want to display or order from the app. \nMake sure you register them all and finalize registration before ordering a product.","Register a Product":"Register a Product","Register product _PARAM1_ as a _PARAM2_ (platform: _PARAM3_)":"Register product _PARAM1_ as a _PARAM2_ (platform: _PARAM3_)","The internal ID of the product":"The internal ID of the product","Use the ID of the product you entered on the IAP provider (Google play, Apple store...)":"Use the ID of the product you entered on the IAP provider (Google play, Apple store...)","The type of product":"The type of product","Which platform you're registering the product to":"Which platform you're registering the product to","Finalize store registration. Do this after registering every product and before ordering or getting information about a product.":"Finalize store registration. Do this after registering every product and before ordering or getting information about a product.","Finalize registration":"Finalize registration","Finalize store registration":"Finalize store registration","Opens the purchase menu to let the user buy a product.\nEnsure you use the condition to check if the store is ready and that the product ID has been registered and finalized before calling this action.":"Opens the purchase menu to let the user buy a product.\nEnsure you use the condition to check if the store is ready and that the product ID has been registered and finalized before calling this action.","Order a product":"Order a product","Order product _PARAM1_":"Order product _PARAM1_","The id of the product to buy":"The id of the product to buy","Get all the data about a product from the IAP provider and store it into a structure variable.\nCheck [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) for the exhaustive list of what can be retrieved from the product.":"Get all the data about a product from the IAP provider and store it into a structure variable.\nCheck [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) for the exhaustive list of what can be retrieved from the product.","Load product data in a variable":"Load product data in a variable","Store data of _PARAM1_ in scene variable named _PARAM2_":"Store data of _PARAM1_ in scene variable named _PARAM2_","The id or alias of the product to get info about":"The id or alias of the product to get info about","The name of the scene variable to store the product data in":"The name of the scene variable to store the product data in","The variable will be a structure, see [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) to know what child variables are accessible.":"The variable will be a structure, see [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) to know what child variables are accessible.","When an event is triggered for a product (approved or finished), this sets a scene variable to true. \nYou can then compare the value of the variable in a condition, and have actions launched to react to the changes.\nUse with Trigger Once to avoid registering multiple watchers unnecessarily.\nApproved is triggered after the purchase is complete.\nFinished is triggered after you have marked the purchased as delivered (less useful).":"When an event is triggered for a product (approved or finished), this sets a scene variable to true. \nYou can then compare the value of the variable in a condition, and have actions launched to react to the changes.\nUse with Trigger Once to avoid registering multiple watchers unnecessarily.\nApproved is triggered after the purchase is complete.\nFinished is triggered after you have marked the purchased as delivered (less useful).","Update a variable when a product event is triggered":"Update a variable when a product event is triggered","Watch the event _PARAM3_ for product _PARAM1_ and set scene variable named _PARAM2_ to true when it happens":"Watch the event _PARAM3_ for product _PARAM1_ and set scene variable named _PARAM2_ to true when it happens","The id of the product to watch":"The id of the product to watch","The name of the scene variable to set to \"true\" when the event happens":"The name of the scene variable to set to \"true\" when the event happens","The event to listen to":"The event to listen to","Mark a purchase as delivered, after you delivered the rewards the user has paid for and saved it somewhere. If you don't do so, the user will get the money refunded as the purchase will be considered as incomplete, with the rewards not given.":"Mark a purchase as delivered, after you delivered the rewards the user has paid for and saved it somewhere. If you don't do so, the user will get the money refunded as the purchase will be considered as incomplete, with the rewards not given.","Finalize a purchase":"Finalize a purchase","Mark purchase of _PARAM1_ as delivered":"Mark purchase of _PARAM1_ as delivered","The id or alias of the product to finalize":"The id or alias of the product to finalize","Triggers after finalizing the registration. Products can then be retrieved and purchased (you can get data of a product like the price, you can use the action to order a product...).":"Triggers after finalizing the registration. Products can then be retrieved and purchased (you can get data of a product like the price, you can use the action to order a product...).","Store is ready":"Store is ready","Input Validation":"Input Validation","Validate and sanitize strings: check format, length, trim, and normalize.":"Validate and sanitize strings: check format, length, trim, and normalize.","Check if the string is a valid phone number.":"Check if the string is a valid phone number.","Check if a string is a valid phone number":"Check if a string is a valid phone number","_PARAM1_ is a valid phone number":"_PARAM1_ is a valid phone number","Phone number":"Phone number","Check if the string is a valid URL.":"Check if the string is a valid URL.","Check if a string is a valid URL":"Check if a string is a valid URL","_PARAM1_ is a valid URL":"_PARAM1_ is a valid URL","Check if the string is a valid email.":"Check if the string is a valid email.","Check if a string is a valid email":"Check if a string is a valid email","_PARAM1_ is a valid email":"_PARAM1_ is a valid email","Email":"Email","Check if the string represents a number (potentially with a minus sign and potentially with a decimal point).":"Check if the string represents a number (potentially with a minus sign and potentially with a decimal point).","Check if a string represents a number":"Check if a string represents a number","_PARAM1_ represents a number":"_PARAM1_ represents a number","Number":"Number","Check if the string has only latin alphabet letters.":"Check if the string has only latin alphabet letters.","Check if a string has only latin alphabet letters":"Check if a string has only latin alphabet letters","_PARAM1_ has only latin alphabet letters":"_PARAM1_ has only latin alphabet letters","Letters":"Letters","Returns the string without the first line.":"Returns the string without the first line.","Remove the first line":"Remove the first line","String to remove the first line from":"String to remove the first line from","Count the number of lines in a string.":"Count the number of lines in a string.","Count lines":"Count lines","The text to count lines from":"The text to count lines from","Replaces every new line character with a space.":"Replaces every new line character with a space.","Replace new lines by a space":"Replace new lines by a space","The text to remove new lines from":"The text to remove new lines from","Remove any non-numerical and non A-Z characters.":"Remove any non-numerical and non A-Z characters.","Remove any non-numerical and non A-Z characters":"Remove any non-numerical and non A-Z characters","The text to sanitize":"The text to sanitize","Internet Connectivity":"Internet Connectivity","Check if the device is currently connected to the internet.":"Check if the device is currently connected to the internet.","Checks if the device is connected to the internet.":"Checks if the device is connected to the internet.","Is the device online?":"Is the device online?","The device is online":"The device is online","Simple inventories":"Simple inventories","Inventory system: add/remove items, stackable quantities, limited/unlimited capacity.":"Inventory system: add/remove items, stackable quantities, limited/unlimited capacity.","Add an item in an inventory.":"Add an item in an inventory.","Add an item":"Add an item","Add a _PARAM2_ to inventory _PARAM1_":"Add a _PARAM2_ to inventory _PARAM1_","Inventory name":"Inventory name","Item name":"Item name","Remove an item from an inventory.":"Remove an item from an inventory.","Remove an item":"Remove an item","Remove a _PARAM2_ from inventory _PARAM1_":"Remove a _PARAM2_ from inventory _PARAM1_","the number of an item in an inventory.":"the number of an item in an inventory.","Item count":"Item count","the count of _PARAM2_ in _PARAM1_":"the count of _PARAM2_ in _PARAM1_","Check if at least one of the specified items is in the inventory.":"Check if at least one of the specified items is in the inventory.","Has an item":"Has an item","Inventory _PARAM1_ contains a _PARAM2_":"Inventory _PARAM1_ contains a _PARAM2_","the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.","Item capacity":"Item capacity","_PARAM2_ capacity in inventory _PARAM1_":"_PARAM2_ capacity in inventory _PARAM1_","Check if a limited amount of an object is allowed by the inventory. Item capacity is unlimited by default.":"Check if a limited amount of an object is allowed by the inventory. Item capacity is unlimited by default.","Limited item capacity":"Limited item capacity","Allow a limited count of _PARAM2_ in inventory _PARAM1_":"Allow a limited count of _PARAM2_ in inventory _PARAM1_","Allow a limited amount of an object to be in an inventory. Item capacity is unlimited by default.":"Allow a limited amount of an object to be in an inventory. Item capacity is unlimited by default.","Limit item capacity":"Limit item capacity","Allow a limited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"Allow a limited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_","Limit the item capacity":"Limit the item capacity","Check if an item has reached its maximum number allowed in the inventory.":"Check if an item has reached its maximum number allowed in the inventory.","Item full":"Item full","Inventory _PARAM1_ is full of _PARAM2_":"Inventory _PARAM1_ is full of _PARAM2_","Check if an item is equipped.":"Check if an item is equipped.","Item equipped":"Item equipped","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM2_ is equipped in inventory _PARAM1_","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.","Equip an item":"Equip an item","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_","Equip":"Equip","Save all the items of the inventory in a scene variable, so that it can be restored later.":"Save all the items of the inventory in a scene variable, so that it can be restored later.","Save an inventory in a scene variable":"Save an inventory in a scene variable","Save inventory _PARAM1_ in variable _PARAM2_":"Save inventory _PARAM1_ in variable _PARAM2_","Scene variable":"Scene variable","Load the content of the inventory from a scene variable.":"Load the content of the inventory from a scene variable.","Load an inventory from a scene variable":"Load an inventory from a scene variable","Load inventory _PARAM1_ from variable _PARAM2_":"Load inventory _PARAM1_ from variable _PARAM2_","Object \"Is On Screen\" Detection":"Object \"Is On Screen\" Detection","Condition to check if an object is visible in its layer's camera viewport.":"Condition to check if an object is visible in its layer's camera viewport.","This behavior provides a condition to check if the object is located within the visible portion of its layer's camera. The condition also allows for specifying padding to the virtual screen border.\nNote that object visibility, such as being hidden or 0 opacity, is not considered (but you can use those existing conditions in addition to this behavior).":"This behavior provides a condition to check if the object is located within the visible portion of its layer's camera. The condition also allows for specifying padding to the virtual screen border.\nNote that object visibility, such as being hidden or 0 opacity, is not considered (but you can use those existing conditions in addition to this behavior).","Is on screen":"Is on screen","Checks if an object position is within the viewport of its layer.":"Checks if an object position is within the viewport of its layer.","_PARAM0_ is on screen (padded by _PARAM2_ pixels)":"_PARAM0_ is on screen (padded by _PARAM2_ pixels)","Padding (in pixels)":"Padding (in pixels)","Number of pixels to pad the screen border. Zero by default. A negative value goes inside the screen, a positive value go outside.":"Number of pixels to pad the screen border. Zero by default. A negative value goes inside the screen, a positive value go outside.","Konami Code":"Konami Code","Detect classic Konami Code input sequence for cheats and easter eggs.":"Detect classic Konami Code input sequence for cheats and easter eggs.","Allows to input the classic Konami Code (\"Up, Up, Down, Down, Left, Right, Left, Right, B, A\") into a scene for cheats and easter eggs.":"Allows to input the classic Konami Code (\"Up, Up, Down, Down, Left, Right, Left, Right, B, A\") into a scene for cheats and easter eggs.","Checks if the Konami Code is correctly inputted.":"Checks if the Konami Code is correctly inputted.","Is Inputted":"Is Inputted","Konami Code is inputted with _PARAM0_":"Konami Code is inputted with _PARAM0_","Language":"Language","Get the user's preferred language from browser or device settings.":"Get the user's preferred language from browser or device settings.","Returns a string representing the preferred language of the user.\nThe format represents the language first, and usually the country where it's used. For example: \"en\" (English), \"en-US\" (English as used in the United States), \"en-GB\" (United Kingdom English), \"es\" (Spanish), \"zh-CN\" (Chinese as used in China), etc.":"Returns a string representing the preferred language of the user.\nThe format represents the language first, and usually the country where it's used. For example: \"en\" (English), \"en-US\" (English as used in the United States), \"en-GB\" (United Kingdom English), \"es\" (Spanish), \"zh-CN\" (Chinese as used in China), etc.","Game over dialog":"Game over dialog","Score display dialog with submit-to-leaderboard, retry, and main menu buttons.":"Score display dialog with submit-to-leaderboard, retry, and main menu buttons.","Return a formated time for a given timestamp":"Return a formated time for a given timestamp","Format time":"Format time","Time":"Time","Format":"Format","To fixed":"To fixed","Pad start":"Pad start","Text":"Text","Target length":"Target length","Pad string":"Pad string","Display the score and let players choose what to do next.":"Display the score and let players choose what to do next.","Default player name":"Default player name","Leaderboard":"Leaderboard","Best score":"Best score","Score format":"Score format","Prefix":"Prefix","Suffix":"Suffix","Round to decimal point":"Round to decimal point","Score label":"Score label","Best score label":"Best score label","the score.":"the score.","Score":"Score","the score":"the score","the best score of the object.":"the best score of the object.","the best score":"the best score","Return the formated score.":"Return the formated score.","Format score":"Format score","the default player name.":"the default player name.","the default player name":"the default player name","the player name.":"the player name.","Player name":"Player name","the player name":"the player name","Check if the restart button of the dialog is clicked.":"Check if the restart button of the dialog is clicked.","Restart button clicked":"Restart button clicked","Restart button of _PARAM0_ is clicked":"Restart button of _PARAM0_ is clicked","Check if the next button of the dialog is clicked.":"Check if the next button of the dialog is clicked.","Next button clicked":"Next button clicked","Next button of _PARAM0_ is clicked":"Next button of _PARAM0_ is clicked","Check if the back button of the dialog is clicked.":"Check if the back button of the dialog is clicked.","Back button clicked":"Back button clicked","Back button of _PARAM0_ is clicked":"Back button of _PARAM0_ is clicked","Check if the score has been sucessfully submitted by the dialog.":"Check if the score has been sucessfully submitted by the dialog.","Score is submitted":"Score is submitted","_PARAM0_ submitted a score":"_PARAM0_ submitted a score","the leaderboard of the object.":"the leaderboard of the object.","the leaderboard":"the leaderboard","the title of the object.":"the title of the object.","Title":"Title","the title":"the title","Fade in the decoration objects of the dialog.":"Fade in the decoration objects of the dialog.","Fade in decorations":"Fade in decorations","Fade in the decorations of _PARAM0_":"Fade in the decorations of _PARAM0_","Fade out the decoration objects of the dialog.":"Fade out the decoration objects of the dialog.","Fade out decorations":"Fade out decorations","Fade out the decorations of _PARAM0_":"Fade out the decorations of _PARAM0_","Check if the fade in animation of the decorations is finished.":"Check if the fade in animation of the decorations is finished.","Decorations are faded in":"Decorations are faded in","Fade in animation of _PARAM0_ is finished":"Fade in animation of _PARAM0_ is finished","Check if the fade out animation of the decorations is finished.":"Check if the fade out animation of the decorations is finished.","Decorations are faded out":"Decorations are faded out","Fade out animation of _PARAM0_ is finished":"Fade out animation of _PARAM0_ is finished","3D lights":"3D lights","A collection of light object for 3D.":"A collection of light object for 3D.","Define spot light helper classes JavaScript code.":"Define spot light helper classes JavaScript code.","Define spot light helper classes":"Define spot light helper classes","Define spot light helper classes JavaScript code":"Define spot light helper classes JavaScript code","Define point light helper classes JavaScript code.":"Define point light helper classes JavaScript code.","Define point light helper classes":"Define point light helper classes","Define point light helper classes JavaScript code":"Define point light helper classes JavaScript code","the maximum number of nearest lights displayed simultaneously.":"the maximum number of nearest lights displayed simultaneously.","Max lights count":"Max lights count","max lights count":"max lights count","the maximum number of nearest lights displayed with shadow simultaneously.":"the maximum number of nearest lights displayed with shadow simultaneously.","Max lights with shadow count":"Max lights with shadow count","max lights with shadow count":"max lights with shadow count","Light up a cone like a flashlight.":"Light up a cone like a flashlight.","3D spot light":"3D spot light","Cone angle":"Cone angle","Cone":"Cone","Intensity":"Intensity","Smoothing":"Smoothing","Percent of the spotlight cone that is attenuated due to penumbra (between 0 and 1).":"Percent of the spotlight cone that is attenuated due to penumbra (between 0 and 1).","Decay":"Decay","The amount the light dims along the distance of the light.":"The amount the light dims along the distance of the light.","Image":"Image","Shadow casting must be enabled for the image to have any effect.":"Shadow casting must be enabled for the image to have any effect.","Shadow":"Shadow","Shadow casting":"Shadow casting","Shadow quality":"Shadow quality","Shadow camera near plane":"Shadow camera near plane","Shadow camera far plane":"Shadow camera far plane","Cone length":"Cone length","0 means no limit.":"0 means no limit.","Shadow bias":"Shadow bias","Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 2 for medium quality and 4 for low quality.":"Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 2 for medium quality and 4 for low quality.","Update from properties.":"Update from properties.","Update from properties":"Update from properties","Update from properties of _PARAM0_":"Update from properties of _PARAM0_","Update helper":"Update helper","Update graphical helper of _PARAM0_":"Update graphical helper of _PARAM0_","Update image":"Update image","Update the image of _PARAM0_":"Update the image of _PARAM0_","the cone angle of the light.":"the cone angle of the light.","the cone angle":"the cone angle","the color of the light.":"the color of the light.","the color":"the color","the smoothing of the light. Percent of the spotlight cone that is attenuated due to penumbra (between 0 and 1).":"the smoothing of the light. Percent of the spotlight cone that is attenuated due to penumbra (between 0 and 1).","the smoothing":"the smoothing","the intensity of the light.":"the intensity of the light.","the intensity":"the intensity","the decay of the light. The amount the light dims along the distance of the light.":"the decay of the light. The amount the light dims along the distance of the light.","the decay":"the decay","Check if the light is casting shadows.":"Check if the light is casting shadows.","_PARAM0_ casting shadows":"_PARAM0_ casting shadows","Change if the light is casting shadows.":"Change if the light is casting shadows.","_PARAM0_ casting shadows: _PARAM1_":"_PARAM0_ casting shadows: _PARAM1_","Rotate the light to light up a position.":"Rotate the light to light up a position.","Look at position":"Look at position","_PARAM0_ look at _PARAM1_ ; _PARAM2_ ; _PARAM3_":"_PARAM0_ look at _PARAM1_ ; _PARAM2_ ; _PARAM3_","Target Z":"Target Z","Rotate the light to light up an object.":"Rotate the light to light up an object.","Look at object":"Look at object","_PARAM0_ look at _PARAM1_":"_PARAM0_ look at _PARAM1_","the shadow quality of the light.":"the shadow quality of the light.","the shadow quality":"the shadow quality","the shadow camera near plane of the light.":"the shadow camera near plane of the light.","the shadow camera near plane":"the shadow camera near plane","the shadow camera far plane of the light.":"the shadow camera far plane of the light.","the shadow camera far plane":"the shadow camera far plane","the cone length of the light. 0 means no limit.":"the cone length of the light. 0 means no limit.","the cone length":"the cone length","Apply shadow camera far plane":"Apply shadow camera far plane","Apply shadow camera far plane of _PARAM0_ to _PARAM1_":"Apply shadow camera far plane of _PARAM0_ to _PARAM1_","the shadow bias of the light. Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 2 for medium quality and 4 for low quality.":"the shadow bias of the light. Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 2 for medium quality and 4 for low quality.","the shadow bias":"the shadow bias","Apply shadow bias":"Apply shadow bias","Apply shadow bias of _PARAM0_ to _PARAM1_ for a _PARAM2_ quality and cone angle _PARAM3_":"Apply shadow bias of _PARAM0_ to _PARAM1_ for a _PARAM2_ quality and cone angle _PARAM3_","Quality":"Quality","Light up in all directions like a fire.":"Light up in all directions like a fire.","3D point light":"3D point light","Range":"Range","Shadow Bias":"Shadow Bias","the range of the light. 0 means no limit.":"the range of the light. 0 means no limit.","the range":"the range","Apply shadow bias of _PARAM0_ to _PARAM1_ for a _PARAM2_ quality":"Apply shadow bias of _PARAM0_ to _PARAM1_ for a _PARAM2_ quality","Linear Movement":"Linear Movement","Move objects on a straight line.":"Move objects on a straight line.","Linear movement":"Linear movement","Speed on X axis":"Speed on X axis","Speed on Y axis":"Speed on Y axis","the speed on X axis of the object.":"the speed on X axis of the object.","the speed on X axis":"the speed on X axis","the speed on Y axis of the object.":"the speed on Y axis of the object.","the speed on Y axis":"the speed on Y axis","Move objects ahead according to their angle.":"Move objects ahead according to their angle.","Linear movement by angle":"Linear movement by angle","Linked Objects Tools":"Linked Objects Tools","Use linked objects as graph nodes. Pathfinding and neighbor traversal on links.":"Use linked objects as graph nodes. Pathfinding and neighbor traversal on links.","Link to neighbors on a rectangular grid.":"Link to neighbors on a rectangular grid.","Link to neighbors on a rectangular grid":"Link to neighbors on a rectangular grid","Link _PARAM1_ and its neighbors _PARAM2_ on a rectangular grid with cell dimensions: _PARAM3_; _PARAM4_":"Link _PARAM1_ and its neighbors _PARAM2_ on a rectangular grid with cell dimensions: _PARAM3_; _PARAM4_","Neighbor":"Neighbor","The 2 objects can't be the same.":"The 2 objects can't be the same.","Cell width":"Cell width","Cell height":"Cell height","Allows diagonals":"Allows diagonals","Link to neighbors on a hexagonal grid.":"Link to neighbors on a hexagonal grid.","Link to neighbors on a hexagonal grid":"Link to neighbors on a hexagonal grid","Link _PARAM1_ and its neighbors _PARAM2_ on a hexagonal grid with cell dimensions: _PARAM3_; _PARAM4_":"Link _PARAM1_ and its neighbors _PARAM2_ on a hexagonal grid with cell dimensions: _PARAM3_; _PARAM4_","Link to neighbors on an isometric grid.":"Link to neighbors on an isometric grid.","Link to neighbors on an isometric grid":"Link to neighbors on an isometric grid","Link _PARAM1_ and its neighbors _PARAM2_ on an isometric grid with cell dimensions: _PARAM3_; _PARAM4_":"Link _PARAM1_ and its neighbors _PARAM2_ on an isometric grid with cell dimensions: _PARAM3_; _PARAM4_","Can reach through a given cost sum.":"Can reach through a given cost sum.","Can reach with links limited by cost":"Can reach with links limited by cost","Take into account all \"_PARAM1_\" that can reach _PARAM2_ with initial value from the variable _PARAM3_ through at most a cost of: _PARAM4_ according to cost class: _PARAM5_ and at most _PARAM6_ links depth":"Take into account all \"_PARAM1_\" that can reach _PARAM2_ with initial value from the variable _PARAM3_ through at most a cost of: _PARAM4_ according to cost class: _PARAM5_ and at most _PARAM6_ links depth","Pick these objects...":"Pick these objects...","if they can reach this object":"if they can reach this object","Initial length variable":"Initial length variable","Start to 0 if left empty":"Start to 0 if left empty","Maximum cost":"Maximum cost","Cost class":"Cost class","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost must be positive.":"Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost must be positive.","Maximum depth":"Maximum depth","Ignore first node cost":"Ignore first node cost","Can reach through a given number of links.":"Can reach through a given number of links.","Can reach with links limited by length":"Can reach with links limited by length","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through at most _PARAM3_ links according to cost class: _PARAM4_":"Take into account all \"_PARAM1_\" that can reach _PARAM2_ through at most _PARAM3_ links according to cost class: _PARAM4_","Maximum link length":"Maximum link length","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost can be 0 or 1.":"Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost can be 0 or 1.","Can reach through links.":"Can reach through links.","Can reach":"Can reach","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through links":"Take into account all \"_PARAM1_\" that can reach _PARAM2_ through links","Cost sum.":"Cost sum.","Cost sum":"Cost sum","The object will move from one object instance to another according to how they are linked to one another to reach a targeted object.":"The object will move from one object instance to another according to how they are linked to one another to reach a targeted object.","Link path finding":"Link path finding","Angle offset":"Angle offset","Is following a path":"Is following a path","Next node index":"Next node index","Next node X":"Next node X","Next node Y":"Next node Y","Is at a node":"Is at a node","Next node angle":"Next node angle","Move the object to a position.":"Move the object to a position.","Move to a position":"Move to a position","Move _PARAM0_ to _PARAM3_ passing by _PARAM2_ using cost class _PARAM4_":"Move _PARAM0_ to _PARAM3_ passing by _PARAM2_ using cost class _PARAM4_","Crossable objects":"Crossable objects","Destination objects":"Destination objects","Check if the object position is the on a path node.":"Check if the object position is the on a path node.","_PARAM0_ is at a node":"_PARAM0_ is at a node","Forget the path.":"Forget the path.","Forget the path":"Forget the path","_PARAM0_ forgets the path":"_PARAM0_ forgets the path","Set next node index":"Set next node index","Set next node index of _PARAM0_ to _PARAM2_":"Set next node index of _PARAM0_ to _PARAM2_","Node index":"Node index","Check if the object is moving.":"Check if the object is moving.","Is moving":"Is moving","_PARAM0_ is moving":"_PARAM0_ is moving","Check if a path has been found.":"Check if a path has been found.","Path found":"Path found","A path has been found for _PARAM0_":"A path has been found for _PARAM0_","Check if the destination was reached.":"Check if the destination was reached.","Destination reached":"Destination reached","_PARAM0_ reached its destination":"_PARAM0_ reached its destination","Speed of the object on the path.":"Speed of the object on the path.","Get the number of waypoints on the path.":"Get the number of waypoints on the path.","Node count":"Node count","Waypoint X position.":"Waypoint X position.","Node X":"Node X","Waypoint index":"Waypoint index","Node Y":"Node Y","Next waypoint index.":"Next waypoint index.","Next waypoint X position.":"Next waypoint X position.","Next waypoint Y position.":"Next waypoint Y position.","Destination X position.":"Destination X position.","Destination Y position.":"Destination Y position.","the acceleration of the object.":"the acceleration of the object.","the maximum speed of the object.":"the maximum speed of the object.","the maximum speed":"the maximum speed","the rotation speed of the object.":"the rotation speed of the object.","the rotation speed":"the rotation speed","the rotation offset applied when moving the object.":"the rotation offset applied when moving the object.","the rotation angle offset on the path":"the rotation angle offset on the path","Check if the object is rotated when traveling on its path.":"Check if the object is rotated when traveling on its path.","Object rotated":"Object rotated","_PARAM0_ is rotated when traveling on its path":"_PARAM0_ is rotated when traveling on its path","Enable or disable rotation of the object on the path.":"Enable or disable rotation of the object on the path.","Rotate the object":"Rotate the object","Enable rotation of _PARAM0_ on the path: _PARAM2_":"Enable rotation of _PARAM0_ on the path: _PARAM2_","MQTT Client (advanced)":"MQTT Client (advanced)","MQTT client: connect to broker, publish/subscribe topics, send/receive messages.":"MQTT client: connect to broker, publish/subscribe topics, send/receive messages.","Triggers if the client is connected to an MQTT broker server.":"Triggers if the client is connected to an MQTT broker server.","Is connected to a broker?":"Is connected to a broker?","Client connected to a broker":"Client connected to a broker","Connects to an MQTT broker.":"Connects to an MQTT broker.","Connect to a broker":"Connect to a broker","Connect to MQTT broker _PARAM1_ with parameters _PARAM2_ (secure connection: _PARAM3_)":"Connect to MQTT broker _PARAM1_ with parameters _PARAM2_ (secure connection: _PARAM3_)","Host port":"Host port","Settings as JSON":"Settings as JSON","You can find the list of settings at [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client). \nAn example of valid configuration would be `\" \"clientId \": \"myUserName \" \"`.":"You can find the list of settings at [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client). \nAn example of valid configuration would be `\" \"clientId \": \"myUserName \" \"`.","Use secure WebSockets?":"Use secure WebSockets?","Disconnects from the current MQTT broker.":"Disconnects from the current MQTT broker.","Disconnect from broker":"Disconnect from broker","Disconnect from MQTT broker (force: _PARAM1_)":"Disconnect from MQTT broker (force: _PARAM1_)","Force end the connection?":"Force end the connection?","By default, MQTT waits for pending messages or messages in the process of being sent to finish being sent before ending the connection. Use this to cancel any request and immediately shutdown the connection.":"By default, MQTT waits for pending messages or messages in the process of being sent to finish being sent before ending the connection. Use this to cancel any request and immediately shutdown the connection.","Publishes a message on a topic.":"Publishes a message on a topic.","Publish message":"Publish message","Publish variable _PARAM1_ on topic _PARAM2_ (QoS: _PARAM3_)":"Publish variable _PARAM1_ on topic _PARAM2_ (QoS: _PARAM3_)","Text to publish":"Text to publish","Topic to publish to":"Topic to publish to","The QoS":"The QoS","See [this](https://github.com/mqttjs/MQTT.js#qos) for more details.":"See [this](https://github.com/mqttjs/MQTT.js#qos) for more details.","Should the message be retained?":"Should the message be retained?","When a message is retained, it will be sent to every client that subscribe to the topic. Only one message can be retained per topic, if another retained message is sent it will overwrite the previous one. \nRead more [here](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages).":"When a message is retained, it will be sent to every client that subscribe to the topic. Only one message can be retained per topic, if another retained message is sent it will overwrite the previous one. \nRead more [here](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages).","Subcribe to a topic. All messages published on that topic will be received.":"Subcribe to a topic. All messages published on that topic will be received.","Subscribe to a topic":"Subscribe to a topic","Subscribe to topic _PARAM1_ with QoS at _PARAM2_ and dataloss _PARAM3_":"Subscribe to topic _PARAM1_ with QoS at _PARAM2_ and dataloss _PARAM3_","The topic to subscribe to":"The topic to subscribe to","See https://github.com/mqttjs/MQTT.js#qos for more details":"See https://github.com/mqttjs/MQTT.js#qos for more details","Is dataloss allowed?":"Is dataloss allowed?","See https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode for more details":"See https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode for more details","Unsubcribe from a topic. No more messages from this topic will be received.":"Unsubcribe from a topic. No more messages from this topic will be received.","Unsubscribe from a topic":"Unsubscribe from a topic","Unsubscribe from topic _PARAM1_":"Unsubscribe from topic _PARAM1_","Triggers whenever a message was received. Note that you first need to subcribe to a topic in order to get messages from it.":"Triggers whenever a message was received. Note that you first need to subcribe to a topic in order to get messages from it.","On message":"On message","Message received from topic _PARAM1_":"Message received from topic _PARAM1_","The topic to listen to":"The topic to listen to","Get the last received message of a topic.":"Get the last received message of a topic.","Get last message":"Get last message","The topic to get the message from":"The topic to get the message from","Gets the last error. Returns an empty string if there was no errors.":"Gets the last error. Returns an empty string if there was no errors.","Get the last error":"Get the last error","Marching Squares (experimental)":"Marching Squares (experimental)","Draw dynamically changing shapes like a fog of war.":"Draw dynamically changing shapes like a fog of war.","Define the scalar field painter library JavaScript code.":"Define the scalar field painter library JavaScript code.","Define scalar field painter library":"Define scalar field painter library","Define the scalar field painter library JavaScript code":"Define the scalar field painter library JavaScript code","Add to a Shape painter object and use the actions to draw a field. Useful for fog of wars, liquid effects (water, lava, blobs...).":"Add to a Shape painter object and use the actions to draw a field. Useful for fog of wars, liquid effects (water, lava, blobs...).","Marching squares painter":"Marching squares painter","Area left bound":"Area left bound","Area top bound":"Area top bound","Area right bound":"Area right bound","Area bottom bound":"Area bottom bound","Fill outside":"Fill outside","Contour threshold":"Contour threshold","Must only draw what is on the screen":"Must only draw what is on the screen","Extend behavior class":"Extend behavior class","Extend object instance prototype.":"Extend object instance prototype.","Extend object instance prototype":"Extend object instance prototype","Extend _PARAM0_ prototype":"Extend _PARAM0_ prototype","Clear the field by setting every values to 0.":"Clear the field by setting every values to 0.","Clear the field":"Clear the field","Clear the field of _PARAM0_":"Clear the field of _PARAM0_","Unfill an area of the field from a given location until a given height is reached.":"Unfill an area of the field from a given location until a given height is reached.","Unfill area":"Unfill area","Unfill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a minimum of _PARAM4_ with thickness: _PARAM5_":"Unfill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a minimum of _PARAM4_ with thickness: _PARAM5_","Minimum height":"Minimum height","Contour thickness":"Contour thickness","Capping radius ratio":"Capping radius ratio","Small values allow quicker process, but can result to tearing. Try values around 8.":"Small values allow quicker process, but can result to tearing. Try values around 8.","Fill an area of the field from a given location until a given height is reached.":"Fill an area of the field from a given location until a given height is reached.","Fill area":"Fill area","Fill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a maximum of _PARAM4_ with thickness: _PARAM5_":"Fill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a maximum of _PARAM4_ with thickness: _PARAM5_","Maximum height":"Maximum height","Cap every value of the field to a range.":"Cap every value of the field to a range.","Clamp the field":"Clamp the field","Clamp the field of _PARAM0_ from: _PARAM2_ to: _PARAM3_":"Clamp the field of _PARAM0_ from: _PARAM2_ to: _PARAM3_","Minimum":"Minimum","Maximum":"Maximum","Apply an affine on the field values.":"Apply an affine on the field values.","Transform the field":"Transform the field","Transform the field of _PARAM0_ with a coefficient: _PARAM2_ and an offset: _PARAM3_":"Transform the field of _PARAM0_ with a coefficient: _PARAM2_ and an offset: _PARAM3_","Coefficient":"Coefficient","Offset":"Offset","Add a hill to the field.":"Add a hill to the field.","Add a hill":"Add a hill","Add a hill to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, _PARAM4_, radius: _PARAM5_, opacity: _PARAM6_ using: _PARAM8_":"Add a hill to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, _PARAM4_, radius: _PARAM5_, opacity: _PARAM6_ using: _PARAM8_","The hill height at the center, a value of 1 or less means a flat hill.":"The hill height at the center, a value of 1 or less means a flat hill.","The hill height is 1 at this radius.":"The hill height is 1 at this radius.","Opacity":"Opacity","Set to 1 to apply the hill instantly or repeat this action with a lower value to make is progressive.":"Set to 1 to apply the hill instantly or repeat this action with a lower value to make is progressive.","Operation":"Operation","Add a disk to the field.":"Add a disk to the field.","Add a disk":"Add a disk","Add a disk to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_ using: _PARAM6_":"Add a disk to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_ using: _PARAM6_","The spike height is 1 at this radius.":"The spike height is 1 at this radius.","Mask a disk to the field.":"Mask a disk to the field.","Mask a disk":"Mask a disk","Mask a disk on the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_":"Mask a disk on the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_","Add a line to the field.":"Add a line to the field.","Add a line":"Add a line","Add a line to the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_ using: _PARAM8_":"Add a line to the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_ using: _PARAM8_","X position of the start":"X position of the start","Y position of the start":"Y position of the start","X position of the end":"X position of the end","Y position of the end":"Y position of the end","Thickness":"Thickness","Mask a line to the field.":"Mask a line to the field.","Mask a line":"Mask a line","Mask a line on the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_":"Mask a line on the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_","Apply a given operation on every value of the field using the value from the other field at the same position.":"Apply a given operation on every value of the field using the value from the other field at the same position.","Merge a field":"Merge a field","Merge _PARAM0_ with the field of _PARAM2_ using: _PARAM4_":"Merge _PARAM0_ with the field of _PARAM2_ using: _PARAM4_","Field object":"Field object","Field behavior":"Field behavior","Update the field hitboxes.":"Update the field hitboxes.","Update hitboxes":"Update hitboxes","Update the field hitboxes of _PARAM0_":"Update the field hitboxes of _PARAM0_","Draw the field contours.":"Draw the field contours.","Draw the contours":"Draw the contours","Draw the field contours of _PARAM0_":"Draw the field contours of _PARAM0_","Change the width of the field cells.":"Change the width of the field cells.","Width of the cells":"Width of the cells","Change the width of the field cells of _PARAM0_: _PARAM2_":"Change the width of the field cells of _PARAM0_: _PARAM2_","Change the height of the field cells.":"Change the height of the field cells.","Height of the cells":"Height of the cells","Change the height of the field cells of _PARAM0_: _PARAM2_":"Change the height of the field cells of _PARAM0_: _PARAM2_","Rebuild the field with the new dimensions.":"Rebuild the field with the new dimensions.","Rebuild the field":"Rebuild the field","Rebuild the field _PARAM0_":"Rebuild the field _PARAM0_","Fill outside or inside of the contours.":"Fill outside or inside of the contours.","Fill outside of the contours of _PARAM0_: _PARAM2_":"Fill outside of the contours of _PARAM0_: _PARAM2_","Fill outside?":"Fill outside?","Change the contour threshold.":"Change the contour threshold.","Change the contour threshold of _PARAM0_: _PARAM2_":"Change the contour threshold of _PARAM0_: _PARAM2_","Change the field area bounds.":"Change the field area bounds.","Area bounds":"Area bounds","Change the field area bounds of _PARAM0_ left: _PARAM2_ top: _PARAM3_ right: _PARAM4_ bottom: _PARAM5_":"Change the field area bounds of _PARAM0_ left: _PARAM2_ top: _PARAM3_ right: _PARAM4_ bottom: _PARAM5_","Left bound":"Left bound","Top bound":"Top bound","Right bound":"Right bound","Bottom bound":"Bottom bound","Area left bound of the field.":"Area left bound of the field.","Area left":"Area left","Area top bound of the field.":"Area top bound of the field.","Area top":"Area top","Area right bound of the field.":"Area right bound of the field.","Area right":"Area right","Area bottom bound of the field.":"Area bottom bound of the field.","Area bottom":"Area bottom","Width of the field cells.":"Width of the field cells.","Width of a cell":"Width of a cell","Height of the field cells.":"Height of the field cells.","Height of a cell":"Height of a cell","The number of cells on the x axis.":"The number of cells on the x axis.","Dimension X":"Dimension X","At _PARAM2_; _PARAM3_ the field value of _PARAM0_ is greater than _PARAM4_":"At _PARAM2_; _PARAM3_ the field value of _PARAM0_ is greater than _PARAM4_","The number of cells on the y axis.":"The number of cells on the y axis.","Dimension Y":"Dimension Y","The contour threshold.":"The contour threshold.","The normal X coordinate at a given location.":"The normal X coordinate at a given location.","Normal X":"Normal X","X position of the point":"X position of the point","Y position of the point":"Y position of the point","The normal Y coordinate at a given location.":"The normal Y coordinate at a given location.","Normal Y":"Normal Y","The normal Z coordinate at a given location.":"The normal Z coordinate at a given location.","Normal Z":"Normal Z","Change the field value at a grid point.":"Change the field value at a grid point.","Grid value":"Grid value","Change the field value of _PARAM0_ at the grid point _PARAM2_; _PARAM3_ to _PARAM4_":"Change the field value of _PARAM0_ at the grid point _PARAM2_; _PARAM3_ to _PARAM4_","X grid index":"X grid index","Y grid index":"Y grid index","Field value":"Field value","The field value at a grid point.":"The field value at a grid point.","The field value at a given location.":"The field value at a given location.","Check if the contours are filled outside.":"Check if the contours are filled outside.","The contours of _PARAM0_ are filled outside":"The contours of _PARAM0_ are filled outside","Check if a field is greater than a given value.":"Check if a field is greater than a given value.","Check if a point is inside the contour.":"Check if a point is inside the contour.","Point is inside":"Point is inside","_PARAM2_; _PARAM3_ is inside _PARAM0_":"_PARAM2_; _PARAM3_ is inside _PARAM0_","Cursor object":"Cursor object","Make any object follow the mouse cursor position. Hides default cursor.":"Make any object follow the mouse cursor position. Hides default cursor.","Turn any object into a mouse cursor.":"Turn any object into a mouse cursor.","Cursor":"Cursor","Mouse Pointer Lock":"Mouse Pointer Lock","Lock and hide mouse pointer for unlimited movement (e.g., FPS mouse look).":"Lock and hide mouse pointer for unlimited movement (e.g., FPS mouse look).","Lock the mouse pointer to hide it.":"Lock the mouse pointer to hide it.","Request Pointer Lock":"Request Pointer Lock","Unlocks the mouse pointer and show it.":"Unlocks the mouse pointer and show it.","Exit pointer lock":"Exit pointer lock","Check if the mouse pointer is locked.":"Check if the mouse pointer is locked.","Pointer is locked":"Pointer is locked","The mouse pointer is locked":"The mouse pointer is locked","Check if the mouse pointer is actually locked.":"Check if the mouse pointer is actually locked.","Pointer is actually locked":"Pointer is actually locked","The mouse pointer actually is locked":"The mouse pointer actually is locked","Check if the mouse pointer lock is emulated.":"Check if the mouse pointer lock is emulated.","Pointer lock is emulated":"Pointer lock is emulated","The mouse pointer lock is emulated":"The mouse pointer lock is emulated","Check if the locked pointer is moving.":"Check if the locked pointer is moving.","Locked pointer is moving":"Locked pointer is moving","the movement of the locked pointer on the X axis.":"the movement of the locked pointer on the X axis.","Pointer X movement":"Pointer X movement","the movement of the locked pointer on the X axis":"the movement of the locked pointer on the X axis","the movement of the pointer on the Y axis.":"the movement of the pointer on the Y axis.","Pointer Y movement":"Pointer Y movement","the movement of the pointer on the Y axis":"the movement of the pointer on the Y axis","Return the X position of a specific touch":"Return the X position of a specific touch","Touch X position":"Touch X position","Touch identifier":"Touch identifier","Return the Y position of a specific touch":"Return the Y position of a specific touch","Touch Y position":"Touch Y position","the speed factor for touch movement.":"the speed factor for touch movement.","Speed factor for touch movement":"Speed factor for touch movement","the speed factor for touch movement":"the speed factor for touch movement","Control camera rotations with a mouse.":"Control camera rotations with a mouse.","First person camera mouse mapper":"First person camera mouse mapper","Horizontal rotation speed factor":"Horizontal rotation speed factor","Vertical rotation speed factor":"Vertical rotation speed factor","Lock the pointer on click":"Lock the pointer on click","the horizontal rotation speed factor of the object.":"the horizontal rotation speed factor of the object.","the horizontal rotation speed factor":"the horizontal rotation speed factor","the vertical rotation speed factor of the object.":"the vertical rotation speed factor of the object.","the vertical rotation speed factor":"the vertical rotation speed factor","Multiplayer custom lobbies":"Multiplayer custom lobbies","Custom lobbies for built-in multiplayer.":"Custom lobbies for built-in multiplayer.","Return project identifier.":"Return project identifier.","Project identifier":"Project identifier","Return game version.":"Return game version.","Game version":"Game version","Return true if game run in preview.":"Return true if game run in preview.","Preview":"Preview","Define a shape painter as a mask of an object.":"Define a shape painter as a mask of an object.","Mask an object with a shape painter":"Mask an object with a shape painter","Mask _PARAM1_ with mask _PARAM2_":"Mask _PARAM1_ with mask _PARAM2_","Object to mask":"Object to mask","Shape painter to use as a mask":"Shape painter to use as a mask","Loading.":"Loading.","Loading":"Loading","Customize the interface of multiplayer lobbies.\nJoining will only work if the \"join after game starts\" setting is enabled, as the game automatically starts after joining a lobby.":"Customize the interface of multiplayer lobbies.\nJoining will only work if the \"join after game starts\" setting is enabled, as the game automatically starts after joining a lobby.","Update lobbies.":"Update lobbies.","Update lobbies":"Update lobbies","Update lobbies _PARAM0_":"Update lobbies _PARAM0_","Return last error.":"Return last error.","Last error":"Last error","Custom lobby.":"Custom lobby.","Custom lobby":"Custom lobby","Set lobby name.":"Set lobby name.","Set lobby name":"Set lobby name","Set lobby name _PARAM0_: _PARAM1_":"Set lobby name _PARAM0_: _PARAM1_","Lobby name":"Lobby name","Set players in lobby count.":"Set players in lobby count.","Set players in lobby count":"Set players in lobby count","Set players in lobby count _PARAM0_, players in lobby: _PARAM1_, max players _PARAM2_":"Set players in lobby count _PARAM0_, players in lobby: _PARAM1_, max players _PARAM2_","Players count in lobby":"Players count in lobby","Maxum count players in lobby":"Maxum count players in lobby","Set lobby ID.":"Set lobby ID.","Set lobby ID":"Set lobby ID","Set lobby ID _PARAM0_: _PARAM1_":"Set lobby ID _PARAM0_: _PARAM1_","Lobby ID":"Lobby ID","Return true if lobby is full.":"Return true if lobby is full.","Is full":"Is full","Lobby _PARAM0_ is full":"Lobby _PARAM0_ is full","Activate interactions.":"Activate interactions.","Activate interactions":"Activate interactions","Activate interactions of _PARAM0_: _PARAM1_":"Activate interactions of _PARAM0_: _PARAM1_","Yes or no":"Yes or no","Noise generator":"Noise generator","Generate noise values for procedural generation.":"Generate noise values for procedural generation.","Generate a number between -1 and 1 from 1 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"Generate a number between -1 and 1 from 1 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.","1D noise":"1D noise","Generate a number between -1 and 1 from 2 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"Generate a number between -1 and 1 from 2 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.","Generate a number between -1 and 1 from 3 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"Generate a number between -1 and 1 from 3 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.","Generate a number between -1 and 1 from 4 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"Generate a number between -1 and 1 from 4 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.","Delete a noise generators and loose its settings.":"Delete a noise generators and loose its settings.","2 dimensional Perlin noise (depecated, use Noise2d instead).":"2 dimensional Perlin noise (depecated, use Noise2d instead).","Perlin 2D noise":"Perlin 2D noise","x value":"x value","y value":"y value","3 dimensional Perlin noise (depecated, use Noise3d instead).":"3 dimensional Perlin noise (depecated, use Noise3d instead).","Perlin 3D noise":"Perlin 3D noise","z value":"z value","2 dimensional simplex noise (depecated, use Noise2d instead).":"2 dimensional simplex noise (depecated, use Noise2d instead).","Simplex 2D noise":"Simplex 2D noise","3 dimensional simplex noise (depecated, use Noise3d instead).":"3 dimensional simplex noise (depecated, use Noise3d instead).","Simplex 3D noise":"Simplex 3D noise","Slice a 2D object into pieces":"Slice a 2D object into pieces","Slice sprites into smaller color-matched pieces for destruction/break effects.":"Slice sprites into smaller color-matched pieces for destruction/break effects.","Slice an object into smaller pieces that match color of the original object. The new object should be a solid white color.":"Slice an object into smaller pieces that match color of the original object. The new object should be a solid white color.","Slice object into smaller pieces":"Slice object into smaller pieces","Cut _PARAM1_ into _PARAM3_ vertical strips and _PARAM4_ horizontal strips using _PARAM2_ for the new objects. Delete original object: _PARAM5_":"Cut _PARAM1_ into _PARAM3_ vertical strips and _PARAM4_ horizontal strips using _PARAM2_ for the new objects. Delete original object: _PARAM5_","Object to be sliced":"Object to be sliced","Object used for sliced pieces":"Object used for sliced pieces","Recommended: Use a sprite that is a single white pixel":"Recommended: Use a sprite that is a single white pixel","Vertical slices":"Vertical slices","Horizontal slices":"Horizontal slices","Delete original object":"Delete original object","Return the blue component of the pixel at the specified position.":"Return the blue component of the pixel at the specified position.","Read pixel blue":"Read pixel blue","Return the green component of the pixel at the specified position.":"Return the green component of the pixel at the specified position.","Read pixel green":"Read pixel green","Return the red component of the pixel at the specified position.":"Return the red component of the pixel at the specified position.","Read pixel red":"Read pixel red","Object spawner 2D area":"Object spawner 2D area","Spawn objects periodically with configurable interval, capacity, and spawn area.":"Spawn objects periodically with configurable interval, capacity, and spawn area.","Spawn (create) objects periodically.":"Spawn (create) objects periodically.","Object spawner":"Object spawner","Spawn period":"Spawn period","Offset X (relative to position of spawner)":"Offset X (relative to position of spawner)","Offset Y (relative to position of spawner)":"Offset Y (relative to position of spawner)","Max objects in the scene (per spawner)":"Max objects in the scene (per spawner)","Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.","Spawner capacity":"Spawner capacity","Number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"Number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.","Unlimited capacity":"Unlimited capacity","Use random positions":"Use random positions","Objects will be created at a random position inside the spawner. Useful for making large spawner areas.":"Objects will be created at a random position inside the spawner. Useful for making large spawner areas.","Spawn (create) objects periodically. This action must be run every frame to work. When the max quantity is reached and an instance is deleted, the spawner waits the duration of the spawn period before creating another instance. Spawned objects are automatically linked to the spawner.":"Spawn (create) objects periodically. This action must be run every frame to work. When the max quantity is reached and an instance is deleted, the spawner waits the duration of the spawn period before creating another instance. Spawned objects are automatically linked to the spawner.","Spawn objects periodically":"Spawn objects periodically","Periodically spawn (create) a _PARAM2_ located at spawner _PARAM0_":"Periodically spawn (create) a _PARAM2_ located at spawner _PARAM0_","Object that will be created":"Object that will be created","Change the offset X relative to the center of spawner (in pixels).":"Change the offset X relative to the center of spawner (in pixels).","Offset on X axis (deprecated)":"Offset on X axis (deprecated)","Change the offset X of _PARAM0_ to _PARAM2_ pixels":"Change the offset X of _PARAM0_ to _PARAM2_ pixels","Change the offset Y relative to the center of spawner (in pixels).":"Change the offset Y relative to the center of spawner (in pixels).","Offset on Y axis (deprecated)":"Offset on Y axis (deprecated)","Change the offset Y of _PARAM0_ to _PARAM2_ pixels":"Change the offset Y of _PARAM0_ to _PARAM2_ pixels","Change the spawn period (in seconds).":"Change the spawn period (in seconds).","Change the spawn period of _PARAM0_ to _PARAM2_ seconds":"Change the spawn period of _PARAM0_ to _PARAM2_ seconds","Return the offset X relative to the center of spawner (in pixels).":"Return the offset X relative to the center of spawner (in pixels).","Offset X (deprecated)":"Offset X (deprecated)","Return the offset Y relative to the center of spawner (in pixels).":"Return the offset Y relative to the center of spawner (in pixels).","Offset Y (deprecated)":"Offset Y (deprecated)","Return the spawn period (in seconds).":"Return the spawn period (in seconds).","Restart the cooldown of a spawner.":"Restart the cooldown of a spawner.","Restart spawning cooldown":"Restart spawning cooldown","Restart the cooldown of _PARAM0_":"Restart the cooldown of _PARAM0_","Return the remaining time before the next spawn (in seconds). Useful for triggering visual and sound effects.":"Return the remaining time before the next spawn (in seconds). Useful for triggering visual and sound effects.","Time before the next spawn":"Time before the next spawn","_PARAM0_ just spawned an object":"_PARAM0_ just spawned an object","Check if an object has just been created by this spawner. Useful for triggering visual and sound effects.":"Check if an object has just been created by this spawner. Useful for triggering visual and sound effects.","Object was just spawned":"Object was just spawned","the max objects in the scene (per spawner) of the object. Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"the max objects in the scene (per spawner) of the object. Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.","the max objects in the scene (per spawner)":"the max objects in the scene (per spawner)","Check if spawner has unlimited capacity.":"Check if spawner has unlimited capacity.","_PARAM0_ has unlimited capacity":"_PARAM0_ has unlimited capacity","Change unlimited capacity of spawner.":"Change unlimited capacity of spawner.","Unlimited object capacity":"Unlimited object capacity","_PARAM0_ unlimited capacity: _PARAM2_":"_PARAM0_ unlimited capacity: _PARAM2_","UnlimitedObjectCapacity":"UnlimitedObjectCapacity","the number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"the number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.","the spawner capacity":"the spawner capacity","Check if using random positions. Useful for making large spawner areas.":"Check if using random positions. Useful for making large spawner areas.","Use random positions inside _PARAM0_":"Use random positions inside _PARAM0_","Enable (or disable) random positions. Useful for making large spawner areas.":"Enable (or disable) random positions. Useful for making large spawner areas.","Use random positions inside _PARAM0_: _PARAM2_":"Use random positions inside _PARAM0_: _PARAM2_","RandomPosition":"RandomPosition","Object Stack":"Object Stack","An ordered list of objects and a shuffle action.":"An ordered list of objects and a shuffle action.","Check if the stack contains the object between a range. The lower and upper bounds are included.":"Check if the stack contains the object between a range. The lower and upper bounds are included.","Contain between a range":"Contain between a range","_PARAM3_ is into the stack of _PARAM1_ between _PARAM4_ and _PARAM5_":"_PARAM3_ is into the stack of _PARAM1_ between _PARAM4_ and _PARAM5_","Stack":"Stack","Stack behavior":"Stack behavior","Element":"Element","Lower bound":"Lower bound","Upper bound":"Upper bound","Check if the stack contains the object at a height.":"Check if the stack contains the object at a height.","Contain at":"Contain at","_PARAM3_ is into the stack of _PARAM1_ at _PARAM4_":"_PARAM3_ is into the stack of _PARAM1_ at _PARAM4_","Check if an object is on the stack top.":"Check if an object is on the stack top.","Stack top":"Stack top","_PARAM3_ is on top of the stack of _PARAM1_":"_PARAM3_ is on top of the stack of _PARAM1_","Check if the stack contains the object.":"Check if the stack contains the object.","Contain":"Contain","_PARAM3_ is into the stack of _PARAM1_":"_PARAM3_ is into the stack of _PARAM1_","Hold an ordered list of objects.":"Hold an ordered list of objects.","Add the object on the top of the stack.":"Add the object on the top of the stack.","Add on top":"Add on top","Add _PARAM2_ on top of the stack of _PARAM0_":"Add _PARAM2_ on top of the stack of _PARAM0_","Insert the object into the stack.":"Insert the object into the stack.","Insert into the stack":"Insert into the stack","Insert _PARAM2_ into the stack of _PARAM0_ at height: _PARAM3_":"Insert _PARAM2_ into the stack of _PARAM0_ at height: _PARAM3_","Remove the object from the stack.":"Remove the object from the stack.","Remove from the stack":"Remove from the stack","Remove _PARAM2_ from the stack of _PARAM0_":"Remove _PARAM2_ from the stack of _PARAM0_","Remove any object from the stack.":"Remove any object from the stack.","Clear":"Clear","Remove every object of the stack of _PARAM0_":"Remove every object of the stack of _PARAM0_","Move the objects from a stack into another.":"Move the objects from a stack into another.","Move into the stack":"Move into the stack","Move the objects of the stack of _PARAM3_ from:_PARAM5_ to:_PARAM6_ into the stack of _PARAM0_ at height: _PARAM2_":"Move the objects of the stack of _PARAM3_ from:_PARAM5_ to:_PARAM6_ into the stack of _PARAM0_ at height: _PARAM2_","Move all the object from a stack into another.":"Move all the object from a stack into another.","Move all into the stack":"Move all into the stack","Move all the objects of the stack of _PARAM3_ into the stack of _PARAM0_ at height: _PARAM2_":"Move all the objects of the stack of _PARAM3_ into the stack of _PARAM0_ at height: _PARAM2_","Move all the object from a stack into another one at the top.":"Move all the object from a stack into another one at the top.","Move all on top of the stack":"Move all on top of the stack","Move all the objects of the stack of _PARAM2_ on the top of the stack of _PARAM0_":"Move all the objects of the stack of _PARAM2_ on the top of the stack of _PARAM0_","Shuffle the stack.":"Shuffle the stack.","Shuffle":"Shuffle","Shuffle the stack of _PARAM0_":"Shuffle the stack of _PARAM0_","The height of an element in the stack.":"The height of an element in the stack.","Height of a stack element":"Height of a stack element","the number of objects in the stack.":"the number of objects in the stack.","Stack height":"Stack height","the number of objects in the stack":"the number of objects in the stack","Compare the number of objects in the stack.":"Compare the number of objects in the stack.","Stack height (deprecated)":"Stack height (deprecated)","_PARAM0_ has _PARAM2_ objects in its stack":"_PARAM0_ has _PARAM2_ objects in its stack","Check if the stack is empty.":"Check if the stack is empty.","Is empty":"Is empty","The stack of _PARAM0_ is empty":"The stack of _PARAM0_ is empty","Make objects orbit around a center object":"Make objects orbit around a center object","Make objects orbit around a center object in a circular or elliptical path.":"Make objects orbit around a center object in a circular or elliptical path.","Move objects in orbit around a center object.":"Move objects in orbit around a center object.","Move objects in orbit around a center object":"Move objects in orbit around a center object","Animate _PARAM3_ copies of _PARAM2_ that orbit around _PARAM1_ at a distance of _PARAM5_ with orbit speed of _PARAM4_ degrees per second. Rotate orbiting objects at _PARAM6_ degrees per second. Start objects with an angle offset of _PARAM9_ degrees. Create objects on layer _PARAM7_ with Z value _PARAM8_. Reset locations of orbiting objects after quantity is reduced: _PARAM10_":"Animate _PARAM3_ copies of _PARAM2_ that orbit around _PARAM1_ at a distance of _PARAM5_ with orbit speed of _PARAM4_ degrees per second. Rotate orbiting objects at _PARAM6_ degrees per second. Start objects with an angle offset of _PARAM9_ degrees. Create objects on layer _PARAM7_ with Z value _PARAM8_. Reset locations of orbiting objects after quantity is reduced: _PARAM10_","Center object":"Center object","Orbiting object":"Orbiting object","Cannot be the same object used for the Center object":"Cannot be the same object used for the Center object","Quantity of orbiting objects":"Quantity of orbiting objects","Orbit speed (in degrees per second)":"Orbit speed (in degrees per second)","Use negative numbers to orbit counter-clockwise":"Use negative numbers to orbit counter-clockwise","Distance from the center object (in pixels)":"Distance from the center object (in pixels)","Angular speed (in degrees per second)":"Angular speed (in degrees per second)","Use negative numbers to rotate counter-clockwise":"Use negative numbers to rotate counter-clockwise","Layer that orbiting objects will be created on (base layer if empty)":"Layer that orbiting objects will be created on (base layer if empty)","Z order of orbiting objects":"Z order of orbiting objects","Starting angle offset (in degrees)":"Starting angle offset (in degrees)","Reset locations of orbiting objects after quantity is reduced":"Reset locations of orbiting objects after quantity is reduced","Move objects in elliptical orbit around a center object. Z-order is changed to make 3D effect.":"Move objects in elliptical orbit around a center object. Z-order is changed to make 3D effect.","Move objects in elliptical orbit around a center object":"Move objects in elliptical orbit around a center object","Animate _PARAM3_ copies of _PARAM2_ in elliptical orbit around _PARAM1_ with vertical radius of _PARAM5_, horizontal radius of _PARAM9_ and an orbit speed of _PARAM4_ degrees per second. Foreground side is _PARAM10_. Rotate orbiting objects at _PARAM6_ degrees per second":"Animate _PARAM3_ copies of _PARAM2_ in elliptical orbit around _PARAM1_ with vertical radius of _PARAM5_, horizontal radius of _PARAM9_ and an orbit speed of _PARAM4_ degrees per second. Foreground side is _PARAM10_. Rotate orbiting objects at _PARAM6_ degrees per second","Vertical distance from the center object (pixels)":"Vertical distance from the center object (pixels)","Horizontal distance from the center object (pixels)":"Horizontal distance from the center object (pixels)","Foreground Side":"Foreground Side","Delete orbiting objects that are linked to a center object.":"Delete orbiting objects that are linked to a center object.","Delete orbiting objects that are linked to a center object":"Delete orbiting objects that are linked to a center object","Delete all _PARAM2_ that are linked to _PARAM1_":"Delete all _PARAM2_ that are linked to _PARAM1_","Cannot be the same object that was used for the Center object":"Cannot be the same object that was used for the Center object","Labeled button":"Labeled button","Resizeable button with a label.":"Resizeable button with a label.","The finite state machine used internally by the button object.":"The finite state machine used internally by the button object.","Button finite state machine":"Button finite state machine","Change the text style when the button is hovered.":"Change the text style when the button is hovered.","Hover text style":"Hover text style","Outline on hover":"Outline on hover","Hover color":"Hover color","Enable shadow on hover":"Enable shadow on hover","Hover font size":"Hover font size","Idle font size":"Idle font size","Idle color":"Idle color","Check if isHovered.":"Check if isHovered.","IsHovered":"IsHovered","_PARAM0_ isHovered":"_PARAM0_ isHovered","Change if isHovered.":"Change if isHovered.","_PARAM0_ isHovered: _PARAM2_":"_PARAM0_ isHovered: _PARAM2_","Return the text color":"Return the text color","Text color":"Text color","Hover bitmap text style":"Hover bitmap text style","Hover prefix":"Hover prefix","Hover suffix":"Hover suffix","Idle text":"Idle text","Button with a label.":"Button with a label.","Label":"Label","Hovered fade out duration":"Hovered fade out duration","States":"States","Label offset on Y axis when pressed":"Label offset on Y axis when pressed","Change the text of the button label.":"Change the text of the button label.","Label text":"Label text","Change the text of _PARAM0_ to _PARAM1_":"Change the text of _PARAM0_ to _PARAM1_","the label text.":"the label text.","the label text":"the label text","De/activate interactions with the button.":"De/activate interactions with the button.","De/activate interactions":"De/activate interactions","Activate interactions with _PARAM0_: _PARAM1_":"Activate interactions with _PARAM0_: _PARAM1_","Activate":"Activate","Check if interactions are activated on the button.":"Check if interactions are activated on the button.","Interactions activated":"Interactions activated","Interactions on _PARAM0_ are activated":"Interactions on _PARAM0_ are activated","the labelOffset of the object.":"the labelOffset of the object.","LabelOffset":"LabelOffset","the labelOffset":"the labelOffset","Resource bar (continuous)":"Resource bar (continuous)","A bar that represents a resource in the game (health, mana, ammo, etc).":"A bar that represents a resource in the game (health, mana, ammo, etc).","Resource bar":"Resource bar","Previous high value":"Previous high value","Previous high value conservation duration (in seconds)":"Previous high value conservation duration (in seconds)","the value of the object.":"the value of the object.","the value":"the value","the maximum value of the object.":"the maximum value of the object.","the maximum value":"the maximum value","Check if the bar is empty.":"Check if the bar is empty.","Empty":"Empty","_PARAM0_ bar is empty":"_PARAM0_ bar is empty","Check if the bar is full.":"Check if the bar is full.","Full":"Full","_PARAM0_ bar is full":"_PARAM0_ bar is full","the previous high value of the resource bar before the current change.":"the previous high value of the resource bar before the current change.","the previous high value":"the previous high value","Force the previous resource value to update to the current one.":"Force the previous resource value to update to the current one.","Update previous value":"Update previous value","Update the previous resource value of _PARAM0_":"Update the previous resource value of _PARAM0_","the previous high value conservation duration (in seconds) of the object.":"the previous high value conservation duration (in seconds) of the object.","Previous high value conservation duration":"Previous high value conservation duration","the previous high value conservation duration":"the previous high value conservation duration","Check if the resource value is changing.":"Check if the resource value is changing.","Value is changing":"Value is changing","_PARAM0_ value is changing":"_PARAM0_ value is changing","Initial value":"Initial value","It's used to detect a change at hot reload.":"It's used to detect a change at hot reload.","Easing duration":"Easing duration","Show the label":"Show the label","Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.":"Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.","Update layout":"Update layout","Update layout of _PARAM0_":"Update layout of _PARAM0_","_PARAM0_ is empty":"_PARAM0_ is empty","_PARAM0_ is full":"_PARAM0_ is full","the previous value conservation duration (in seconds) of the object.":"the previous value conservation duration (in seconds) of the object.","Previous value conservation duration":"Previous value conservation duration","the previous value conservation duration":"the previous value conservation duration","Value width":"Value width","Check if the label is shown.":"Check if the label is shown.","Label is shown":"Label is shown","_PARAM0_ label is shown":"_PARAM0_ label is shown","Show (or hide) the label on the bar.":"Show (or hide) the label on the bar.","Show label":"Show label","Show the label of _PARAM0_: _PARAM1_":"Show the label of _PARAM0_: _PARAM1_","Update the text that display the current value and maximum value.":"Update the text that display the current value and maximum value.","Update label":"Update label","Update label of _PARAM0_":"Update label of _PARAM0_","Slider":"Slider","A draggable slider that users can move to select a numerical value.":"A draggable slider that users can move to select a numerical value.","Represent a value on a slider.":"Represent a value on a slider.","Step size":"Step size","the minimum value of the object.":"the minimum value of the object.","the minimum value":"the minimum value","the bar value bounds size.":"the bar value bounds size.","the bar value bounds size":"the bar value bounds size","the step size of the object.":"the step size of the object.","the step size":"the step size","Bar left margin":"Bar left margin","Bar":"Bar","Bar top margin":"Bar top margin","Bar right margin":"Bar right margin","Bar bottom margin":"Bar bottom margin","Show the label when the value is changed":"Show the label when the value is changed","Label margin":"Label margin","Only used by the scene editor.":"Only used by the scene editor.","the value of the slider.":"the value of the slider.","the minimum value of the slider.":"the minimum value of the slider.","the maximum value of the slider.":"the maximum value of the slider.","the step size of the slider.":"the step size of the slider.","Update the thumb position according to the slider value.":"Update the thumb position according to the slider value.","Update thumb position":"Update thumb position","Update the thumb position of _PARAM0_":"Update the thumb position of _PARAM0_","Update the slider configuration.":"Update the slider configuration.","Update slider configuration":"Update slider configuration","Update the slider configuration of _PARAM0_":"Update the slider configuration of _PARAM0_","Check if the slider allows interactions.":"Check if the slider allows interactions.","Parallax for Tiled Sprite":"Parallax for Tiled Sprite","Parallax scrolling for Tiled Sprite backgrounds.":"Parallax scrolling for Tiled Sprite backgrounds.","Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").","Horizontal Parallax for a Tiled Sprite":"Horizontal Parallax for a Tiled Sprite","Parallax factor (speed for the parallax, usually between 0 and 1)":"Parallax factor (speed for the parallax, usually between 0 and 1)","Layer to be followed (leave empty for the base layer)":"Layer to be followed (leave empty for the base layer)","Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").","Vertical Parallax for a Tiled Sprite":"Vertical Parallax for a Tiled Sprite","Offset on Y axis":"Offset on Y axis","3D particle emitter":"3D particle emitter","Display a large number of particles in 3D to create visual effects in a 3D game.":"Display a large number of particles in 3D to create visual effects in a 3D game.","Display a large number of particles to create visual effects.":"Display a large number of particles to create visual effects.","Start color":"Start color","End color":"End color","Start opacity":"Start opacity","Flow of particles (particles per second)":"Flow of particles (particles per second)","Start min size":"Start min size","Start max size":"Start max size","End scale":"End scale","Start min speed":"Start min speed","Start max speed":"Start max speed","Min lifespan":"Min lifespan","Max lifespan":"Max lifespan","Emission duration":"Emission duration","Particles move with the emitter":"Particles move with the emitter","Spay cone angle":"Spay cone angle","Blending":"Blending","Gravity top":"Gravity top","Delete when emission ends":"Delete when emission ends","Z (elevation)":"Z (elevation)","Deprecated":"Deprecated","Rotation on X axis":"Rotation on X axis","Rotation on Y axis":"Rotation on Y axis","Start min length":"Start min length","Trail":"Trail","Start max length":"Start max length","Render mode":"Render mode","Follow the object":"Follow the object","Tail end width ratio":"Tail end width ratio","Update particle image":"Update particle image","Update particle image of _PARAM0_":"Update particle image of _PARAM0_","Register in layer":"Register in layer","Register _PARAM0_ in layer":"Register _PARAM0_ in layer","Delete itself":"Delete itself","Delete _PARAM0_":"Delete _PARAM0_","Check that emission has ended and no particle is alive anymore.":"Check that emission has ended and no particle is alive anymore.","Emission has ended":"Emission has ended","Emission from _PARAM0_ has ended":"Emission from _PARAM0_ has ended","Restart particule emission from the beginning.":"Restart particule emission from the beginning.","Restart":"Restart","Restart particule emission from _PARAM0_":"Restart particule emission from _PARAM0_","the Z position of the emitter.":"the Z position of the emitter.","Z elevaltion (deprecated)":"Z elevaltion (deprecated)","the Z position":"the Z position","the rotation on X axis of the emitter.":"the rotation on X axis of the emitter.","Rotation on X axis (deprecated)":"Rotation on X axis (deprecated)","the rotation on X axis":"the rotation on X axis","the rotation on Y axis of the emitter.":"the rotation on Y axis of the emitter.","Rotation on Y axis (deprecated)":"Rotation on Y axis (deprecated)","the rotation on Y axis":"the rotation on Y axis","the start color of the object.":"the start color of the object.","the start color":"the start color","the end color of the object.":"the end color of the object.","the end color":"the end color","the start opacity of the object.":"the start opacity of the object.","the start opacity":"the start opacity","the end opacity of the object.":"the end opacity of the object.","the end opacity":"the end opacity","the flow of particles of the object (particles per second).":"the flow of particles of the object (particles per second).","Flow of particles":"Flow of particles","the flow of particles":"the flow of particles","the start min size of the object.":"the start min size of the object.","the start min size":"the start min size","the start max size of the object.":"the start max size of the object.","the start max size":"the start max size","the end scale of the object.":"the end scale of the object.","the end scale":"the end scale","the min start speed of the object.":"the min start speed of the object.","Min start speed":"Min start speed","the min start speed":"the min start speed","the max start speed of the object.":"the max start speed of the object.","Max start speed":"Max start speed","the max start speed":"the max start speed","the min lifespan of the object.":"the min lifespan of the object.","the min lifespan":"the min lifespan","the max lifespan of the object.":"the max lifespan of the object.","the max lifespan":"the max lifespan","the emission duration of the object.":"the emission duration of the object.","the emission duration":"the emission duration","Check if particles move with the emitter.":"Check if particles move with the emitter.","_PARAM0_ particles move with the emitter":"_PARAM0_ particles move with the emitter","Change if particles move with the emitter.":"Change if particles move with the emitter.","_PARAM0_ particles move with the emitter: _PARAM1_":"_PARAM0_ particles move with the emitter: _PARAM1_","AreParticlesRelative":"AreParticlesRelative","the spay cone angle of the object.":"the spay cone angle of the object.","the spay cone angle":"the spay cone angle","the blending of the object.":"the blending of the object.","the blending":"the blending","the gravity top of the object.":"the gravity top of the object.","the gravity top":"the gravity top","the gravity of the object.":"the gravity of the object.","the gravity":"the gravity","Check if delete when emission ends.":"Check if delete when emission ends.","_PARAM0_ delete when emission ends":"_PARAM0_ delete when emission ends","Change if delete when emission ends.":"Change if delete when emission ends.","_PARAM0_ delete when emission ends: _PARAM1_":"_PARAM0_ delete when emission ends: _PARAM1_","ShouldAutodestruct":"ShouldAutodestruct","the start min trail length of the object.":"the start min trail length of the object.","Start min trail length":"Start min trail length","the start min trail length":"the start min trail length","the start max trail length of the object.":"the start max trail length of the object.","Start max trail length":"Start max trail length","the start max trail length":"the start max trail length","Check if the trail should follow the object.":"Check if the trail should follow the object.","Trail following the object":"Trail following the object","The trail is following _PARAM0_":"The trail is following _PARAM0_","Change if the trail should follow the object or not.":"Change if the trail should follow the object or not.","Make the trail follow":"Make the trail follow","Make the trail follow _PARAM0_: _PARAM1_":"Make the trail follow _PARAM0_: _PARAM1_","IsTrailFollowingLocalOrigin":"IsTrailFollowingLocalOrigin","the tail end width ratio of the object.":"the tail end width ratio of the object.","the tail end width ratio":"the tail end width ratio","the render mode of the object.":"the render mode of the object.","the render mode":"the render mode","2D Top-Down Physics Car":"2D Top-Down Physics Car","Simulate top-down car motion with drifting.":"Simulate top-down car motion with drifting.","Simulate 2D car motion, from a top-down view.":"Simulate 2D car motion, from a top-down view.","Physics car":"Physics car","Physics Engine 2.0":"Physics Engine 2.0","Wheel grip ratio (from 0 to 1)":"Wheel grip ratio (from 0 to 1)","A ratio of 0 is like driving on ice.":"A ratio of 0 is like driving on ice.","Steering":"Steering","Steering speed":"Steering speed","Sterring speed when turning back":"Sterring speed when turning back","Maximum steering angle":"Maximum steering angle","Steering angle":"Steering angle","Front wheels position":"Front wheels position","0 means at the center, 1 means at the front":"0 means at the center, 1 means at the front","Wheels":"Wheels","Rear wheels position":"Rear wheels position","0 means at the center, 1 means at the back":"0 means at the center, 1 means at the back","Simulate a press of the right key.":"Simulate a press of the right key.","Simulate right key press":"Simulate right key press","Simulate pressing right for _PARAM0_":"Simulate pressing right for _PARAM0_","Simulate a press of the left key.":"Simulate a press of the left key.","Simulate left key press":"Simulate left key press","Simulate pressing left for _PARAM0_":"Simulate pressing left for _PARAM0_","Simulate a press of the up key.":"Simulate a press of the up key.","Simulate up key press":"Simulate up key press","Simulate pressing up for _PARAM0_":"Simulate pressing up for _PARAM0_","Simulate a press of the down key.":"Simulate a press of the down key.","Simulate down key press":"Simulate down key press","Simulate pressing down for _PARAM0_":"Simulate pressing down for _PARAM0_","Simulate a steering stick for a given axis force.":"Simulate a steering stick for a given axis force.","Simulate steering stick":"Simulate steering stick","Simulate a steering stick for _PARAM0_ with a force of _PARAM2_":"Simulate a steering stick for _PARAM0_ with a force of _PARAM2_","Simulate an acceleration stick for a given axis force.":"Simulate an acceleration stick for a given axis force.","Simulate acceleration stick":"Simulate acceleration stick","Simulate an acceleration stick for _PARAM0_ with a force of _PARAM2_":"Simulate an acceleration stick for _PARAM0_ with a force of _PARAM2_","Apply wheel forces":"Apply wheel forces","Apply forces on the wheel at _PARAM2_ ; _PARAM3_ and _PARAM4_\xB0 of _PARAM0_":"Apply forces on the wheel at _PARAM2_ ; _PARAM3_ and _PARAM4_\xB0 of _PARAM0_","Wheel X":"Wheel X","Wheel Y":"Wheel Y","Wheel angle":"Wheel angle","Return the momentum of inertia (in kg \u22C5 pixel\xB2)":"Return the momentum of inertia (in kg \u22C5 pixel\xB2)","Momentum of inertia":"Momentum of inertia","Apply a polar force":"Apply a polar force","Length (in kg \u22C5 pixels \u22C5 s^\u22122)":"Length (in kg \u22C5 pixels \u22C5 s^\u22122)","Draw forces applying on the car for debug purpose.":"Draw forces applying on the car for debug purpose.","Draw forces for debug":"Draw forces for debug","Draw forces of car _PARAM0_ on _PARAM2_":"Draw forces of car _PARAM0_ on _PARAM2_","the steering angle of the object.":"the steering angle of the object.","the steering angle":"the steering angle","the wheel grip ratio of the object (from 0 to 1). A ratio of 0 is like driving on ice.":"the wheel grip ratio of the object (from 0 to 1). A ratio of 0 is like driving on ice.","Wheel grip ratio":"Wheel grip ratio","the wheel grip ratio":"the wheel grip ratio","the maximum steering angle of the object.":"the maximum steering angle of the object.","the maximum steering angle":"the maximum steering angle","the steering speed of the object.":"the steering speed of the object.","the steering speed":"the steering speed","the sterring speed when turning back of the object.":"the sterring speed when turning back of the object.","Sterring back speed":"Sterring back speed","the sterring speed when turning back":"the sterring speed when turning back","3D car keyboard mapper":"3D car keyboard mapper","3D car keyboard controls.":"3D car keyboard controls.","Control a 3D physics car with a keyboard.":"Control a 3D physics car with a keyboard.","Hand brake key":"Hand brake key","3D physics character animator":"3D physics character animator","Change animations of 3D physics characters automatically.":"Change animations of 3D physics characters automatically.","Change animations of a 3D physics character automatically.":"Change animations of a 3D physics character automatically.","Animatable capacity":"Animatable capacity","\"Idle\" animation name":"\"Idle\" animation name","Animation names":"Animation names","\"Run\" animation name":"\"Run\" animation name","\"Jump\" animation name":"\"Jump\" animation name","\"Fall\" animation name":"\"Fall\" animation name","3D character keyboard mapper":"3D character keyboard mapper","3D platformer and 3D shooter keyboard controls.":"3D platformer and 3D shooter keyboard controls.","Control a 3D physics character with a keyboard for a platformer or a top-down game.":"Control a 3D physics character with a keyboard for a platformer or a top-down game.","3D platformer keyboard mapper":"3D platformer keyboard mapper","Camera is locked for the frame":"Camera is locked for the frame","Check if camera is locked for the frame.":"Check if camera is locked for the frame.","Camera is locked":"Camera is locked","_PARAM0_ camera is locked for the frame":"_PARAM0_ camera is locked for the frame","Change if camera is locked for the frame.":"Change if camera is locked for the frame.","Lock the camera":"Lock the camera","_PARAM0_ camera is locked for the frame: _PARAM2_":"_PARAM0_ camera is locked for the frame: _PARAM2_","Control a 3D physics character with a keyboard for a first or third person shooter.":"Control a 3D physics character with a keyboard for a first or third person shooter.","3D shooter keyboard mapper":"3D shooter keyboard mapper","3D ellipse movement":"3D ellipse movement","Move 3D objects in elliptical paths or smooth back-and-forth in one direction.":"Move 3D objects in elliptical paths or smooth back-and-forth in one direction.","3D physics engine":"3D physics engine","Ellipse width":"Ellipse width","Ellipse height":"Ellipse height","the ellipse width of the object.":"the ellipse width of the object.","the ellipse width":"the ellipse width","the ellipse height of the object.":"the ellipse height of the object.","the ellipse height":"the ellipse height","the loop duration (in seconds).":"the loop duration (in seconds).","the loop duration":"the loop duration","Pinching gesture":"Pinching gesture","Move the camera or objects with pinching gestures.":"Move the camera or objects with pinching gestures.","Enable or disable camera pinch.":"Enable or disable camera pinch.","Enable or disable camera pinch":"Enable or disable camera pinch","Enable camera pinch: _PARAM1_":"Enable camera pinch: _PARAM1_","Enable camera pinch":"Enable camera pinch","Check if camera pinch is enabled.":"Check if camera pinch is enabled.","Camera pinch is enabled":"Camera pinch is enabled","Choose the layer to move with pinch gestures.":"Choose the layer to move with pinch gestures.","Camera pinch layer":"Camera pinch layer","Choose the layer _PARAM1_ to move with pinch gestures":"Choose the layer _PARAM1_ to move with pinch gestures","Change the camera pinch constraint.":"Change the camera pinch constraint.","Camera pinch constraints":"Camera pinch constraints","Change the camera pinch constraint to _PARAM1_":"Change the camera pinch constraint to _PARAM1_","Constraint":"Constraint","Pinch the camera of a layer.":"Pinch the camera of a layer.","Pinch camera":"Pinch camera","Pinch the camera of layer: _PARAM1_ with constraint: _PARAM2_":"Pinch the camera of layer: _PARAM1_ with constraint: _PARAM2_","Check if a touch is pinching, if 2 touches are pressed.":"Check if a touch is pinching, if 2 touches are pressed.","Touch is pinching":"Touch is pinching","Return the scaling of the pinch gesture from its beginning.":"Return the scaling of the pinch gesture from its beginning.","Pinch scaling":"Pinch scaling","Return the rotation of the pinch gesture from its beginning (in degrees).":"Return the rotation of the pinch gesture from its beginning (in degrees).","Pinch rotation":"Pinch rotation","Return the X position of the pinch center at the beginning of the gesture.":"Return the X position of the pinch center at the beginning of the gesture.","Pinch beginning center X":"Pinch beginning center X","Return the Y position of the pinch center at the beginning of the gesture.":"Return the Y position of the pinch center at the beginning of the gesture.","Pinch beginning center Y":"Pinch beginning center Y","Return the X position of the pinch center.":"Return the X position of the pinch center.","Pinch center X":"Pinch center X","Return the Y position of the pinch center.":"Return the Y position of the pinch center.","Pinch center Y":"Pinch center Y","Return the horizontal translation of the pinch gesture from its beginning.":"Return the horizontal translation of the pinch gesture from its beginning.","Pinch translation X":"Pinch translation X","Return the vertical translation of the pinch gesture from its beginning.":"Return the vertical translation of the pinch gesture from its beginning.","Pinch translation Y":"Pinch translation Y","Return the new X position of a point after the pinch gesture.":"Return the new X position of a point after the pinch gesture.","Transform X position":"Transform X position","Position X before the pinch":"Position X before the pinch","Position Y before the pinch":"Position Y before the pinch","Return the new Y position of a point after the pinch gesture.":"Return the new Y position of a point after the pinch gesture.","Transform Y position":"Transform Y position","Return the original X position of a point before the pinch gesture.":"Return the original X position of a point before the pinch gesture.","Inversed transform X position":"Inversed transform X position","Position X after the pinch":"Position X after the pinch","Position Y after the pinch":"Position Y after the pinch","Return the new position on the Y axis of a point after the pinch gesture.":"Return the new position on the Y axis of a point after the pinch gesture.","Inversed transform Y position":"Inversed transform Y position","Return the X coordinate of a position transformed from the scene to the canvas according to a layer.":"Return the X coordinate of a position transformed from the scene to the canvas according to a layer.","Transform X to canvas":"Transform X to canvas","Return the Y coordinate of a position transformed from the scene to the canvas according to a layer.":"Return the Y coordinate of a position transformed from the scene to the canvas according to a layer.","Transform Y to canvas":"Transform Y to canvas","Return the X coordinate of a position transformed from the canvas to the scene according to a layer.":"Return the X coordinate of a position transformed from the canvas to the scene according to a layer.","Transform X to scene":"Transform X to scene","Return the Y coordinate of a position transformed from the canvas to the scene according to a layer.":"Return the Y coordinate of a position transformed from the canvas to the scene according to a layer.","Transform Y to scene":"Transform Y to scene","Return the touch X on the canvas.":"Return the touch X on the canvas.","Touch X on canvas":"Touch X on canvas","Return the touch Y on the canvas.":"Return the touch Y on the canvas.","Touch Y on canvas":"Touch Y on canvas","Return the X coordinate of a vector after a rotation":"Return the X coordinate of a vector after a rotation","Rotated vector X":"Rotated vector X","Vector X":"Vector X","Vector Y":"Vector Y","Angle (in degrees)":"Angle (in degrees)","Return the Y coordinate of a vector after a rotation":"Return the Y coordinate of a vector after a rotation","Rotated vector Y":"Rotated vector Y","Move objects by holding 2 touches on them.":"Move objects by holding 2 touches on them.","Pinchable object":"Pinchable object","Resizable capability":"Resizable capability","Lock object size":"Lock object size","Check if the object is being pinched.":"Check if the object is being pinched.","Is being pinched":"Is being pinched","_PARAM0_ is being pinched":"_PARAM0_ is being pinched","Abort the pinching of this object.":"Abort the pinching of this object.","Abort pinching":"Abort pinching","Abort the pinching of _PARAM0_":"Abort the pinching of _PARAM0_","Pixel perfect movement":"Pixel perfect movement","Grid-based pixel-perfect movement for platformer and top-down characters.":"Grid-based pixel-perfect movement for platformer and top-down characters.","Return the speed necessary to cover a distance according to the deceleration.":"Return the speed necessary to cover a distance according to the deceleration.","Speed to reach":"Speed to reach","Braking distance from an initial speed: _PARAM2_ and a deceleration: _PARAM3_ is less than _PARAM1_":"Braking distance from an initial speed: _PARAM2_ and a deceleration: _PARAM3_ is less than _PARAM1_","Distance":"Distance","Return the braking distance according to an initial speed and a deceleration.":"Return the braking distance according to an initial speed and a deceleration.","Braking distance":"Braking distance","Define JavaScript classes for top-down.":"Define JavaScript classes for top-down.","Define JavaScript classes for top-down":"Define JavaScript classes for top-down","Define JavaScript classes for top-down":"Define JavaScript classes for top-down","Seamlessly align big pixels using a top-down movement.":"Seamlessly align big pixels using a top-down movement.","Pixel perfect top-down movement":"Pixel perfect top-down movement","Pixel size":"Pixel size","Pixel grid offset X":"Pixel grid offset X","Pixel grid offset Y":"Pixel grid offset Y","Seamlessly align big pixels using a 2D platformer character movement.":"Seamlessly align big pixels using a 2D platformer character movement.","Pixel perfect platformer character":"Pixel perfect platformer character","Platformer character animator":"Platformer character animator","Change animations and horizontal flipping of a platformer character automatically.":"Change animations and horizontal flipping of a platformer character automatically.","Enable animation changes":"Enable animation changes","Enable horizontal flipping":"Enable horizontal flipping","\"Climb\" animation name":"\"Climb\" animation name","Platformer character":"Platformer character","Flippable capacity":"Flippable capacity","Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.":"Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.","Enable (or disable) automated animation changes":"Enable (or disable) automated animation changes","Enable automated animation changes on _PARAM0_: _PARAM2_":"Enable automated animation changes on _PARAM0_: _PARAM2_","Change animations automatically":"Change animations automatically","Enable (or disable) automated horizontal flipping of a platform character.":"Enable (or disable) automated horizontal flipping of a platform character.","Enable (or disable) automated horizontal flipping":"Enable (or disable) automated horizontal flipping","Enable automated horizontal flipping on _PARAM0_: _PARAM2_":"Enable automated horizontal flipping on _PARAM0_: _PARAM2_","Set the \"Idle\" animation name. Do not use quotation marks.":"Set the \"Idle\" animation name. Do not use quotation marks.","Set \"Idle\" animation of _PARAM0_ to _PARAM2_":"Set \"Idle\" animation of _PARAM0_ to _PARAM2_","Animation name":"Animation name","Set the \"Move\" animation name. Do not use quotation marks.":"Set the \"Move\" animation name. Do not use quotation marks.","\"Move\" animation name":"\"Move\" animation name","Set \"Move\" animation of _PARAM0_ to _PARAM2_":"Set \"Move\" animation of _PARAM0_ to _PARAM2_","Set the \"Jump\" animation name. Do not use quotation marks.":"Set the \"Jump\" animation name. Do not use quotation marks.","Set \"Jump\" animation of _PARAM0_ to _PARAM2_":"Set \"Jump\" animation of _PARAM0_ to _PARAM2_","Set the \"Fall\" animation name. Do not use quotation marks.":"Set the \"Fall\" animation name. Do not use quotation marks.","Set \"Fall\" animation of _PARAM0_ to _PARAM2_":"Set \"Fall\" animation of _PARAM0_ to _PARAM2_","Set the \"Climb\" animation name. Do not use quotation marks.":"Set the \"Climb\" animation name. Do not use quotation marks.","Set \"Climb\" animation of _PARAM0_ to _PARAM2_":"Set \"Climb\" animation of _PARAM0_ to _PARAM2_","Platformer trajectory":"Platformer trajectory","Configure jumps by height/duration. AI tools for gap and ledge detection.":"Configure jumps by height/duration. AI tools for gap and ledge detection.","Configure the height of a jump and evaluate the jump trajectory.":"Configure the height of a jump and evaluate the jump trajectory.","Platformer trajectory evaluator":"Platformer trajectory evaluator","Jump height":"Jump height","Change the jump speed to reach a given height.":"Change the jump speed to reach a given height.","Change the jump height of _PARAM0_ to _PARAM2_":"Change the jump height of _PARAM0_ to _PARAM2_","Draw the jump trajectories from no sustain to full sustain.":"Draw the jump trajectories from no sustain to full sustain.","Draw jump":"Draw jump","Draw the jump trajectory of _PARAM0_ on _PARAM2_":"Draw the jump trajectory of _PARAM0_ on _PARAM2_","The jump Y displacement at a given time from the start of the jump.":"The jump Y displacement at a given time from the start of the jump.","Jump Y":"Jump Y","Jump sustaining duration":"Jump sustaining duration","The maximum Y displacement.":"The maximum Y displacement.","Peak Y":"Peak Y","The time from the start of the jump when it reaches the maximum Y displacement.":"The time from the start of the jump when it reaches the maximum Y displacement.","Peak time":"Peak time","The time from the start of the jump when it reaches a given Y displacement moving upward.":"The time from the start of the jump when it reaches a given Y displacement moving upward.","Jump up time":"Jump up time","The time from the start of the jump when it reaches a given Y displacement moving downward.":"The time from the start of the jump when it reaches a given Y displacement moving downward.","Jump down time":"Jump down time","The X displacement before the character stops (always positive).":"The X displacement before the character stops (always positive).","Stop distance":"Stop distance","The X displacement at a given time from now if decelerating (always positive).":"The X displacement at a given time from now if decelerating (always positive).","Stopping X":"Stopping X","The X displacement at a given time from now if accelerating (always positive).":"The X displacement at a given time from now if accelerating (always positive).","Moving X":"Moving X","Player avatar":"Player avatar","Display player avatars from GDevelop accounts in multiplayer games.":"Display player avatars from GDevelop accounts in multiplayer games.","Return the UserID from a lobby player number.":"Return the UserID from a lobby player number.","UserID":"UserID","Lobby player number":"Lobby player number","Display a player avatar according to their GDevelop account.":"Display a player avatar according to their GDevelop account.","Multiplayer Avatar":"Multiplayer Avatar","Border enabled":"Border enabled","Enable the border on the avatar.":"Enable the border on the avatar.","Player unique ID":"Player unique ID","the player unique ID of the avatar.":"the player unique ID of the avatar.","the player unique ID":"the player unique ID","Playgama Bridge":"Playgama Bridge","One SDK for cross-platform publishing HTML5 games.":"One SDK for cross-platform publishing HTML5 games.","Add Action Parameter.":"Add Action Parameter.","Add Action Parameter":"Add Action Parameter","Add Action Parameter _PARAM1_ : _PARAM2_":"Add Action Parameter _PARAM1_ : _PARAM2_","Path":"Path","Add Bool Action Parameter.":"Add Bool Action Parameter.","Add Bool Action Parameter":"Add Bool Action Parameter","Is Initialized.":"Is Initialized.","Is Initialized":"Is Initialized","Platform Id.":"Platform Id.","Platform Id":"Platform Id","Platform Language.":"Platform Language.","Platform Language":"Platform Language","Platform Payload.":"Platform Payload.","Platform Payload":"Platform Payload","Platform Tld.":"Platform Tld.","Platform Tld":"Platform Tld","Platform Is Audio Enabled.":"Platform Is Audio Enabled.","Platform Is Audio Enabled":"Platform Is Audio Enabled","Platform Is Paused.":"Platform Is Paused.","Platform Is Paused":"Platform Is Paused","Is Get All Games Supported.":"Is Get All Games Supported.","Is Get All Games Supported":"Is Get All Games Supported","Is Get Game By Id Supported.":"Is Get Game By Id Supported.","Is Get Game By Id Supported":"Is Get Game By Id Supported","On Get All Games Completed.":"On Get All Games Completed.","On Get All Games Completed":"On Get All Games Completed","On Get Game By Id Completed.":"On Get Game By Id Completed.","On Get Game By Id Completed":"On Get Game By Id Completed","Platform Get All Games.":"Platform Get All Games.","Platform Get All Games":"Platform Get All Games","Platform Get Game By Id.":"Platform Get Game By Id.","Platform Get Game By Id":"Platform Get Game By Id","Platform All Games Count.":"Platform All Games Count.","Platform All Games Count":"Platform All Games Count","Platform All Game Properties Count.":"Platform All Game Properties Count.","Platform All Game Properties Count":"Platform All Game Properties Count","Platform All Games Property Name.":"Platform All Games Property Name.","Platform All Games Property Name":"Platform All Games Property Name","Property Index":"Property Index","Platform All Games Property Value.":"Platform All Games Property Value.","Platform All Games Property Value":"Platform All Games Property Value","Game Index":"Game Index","Property":"Property","Platform Game By Id Property Value.":"Platform Game By Id Property Value.","Platform Game By Id Property Value":"Platform Game By Id Property Value","Platform On Audio State Changed.":"Platform On Audio State Changed.","Platform On Audio State Changed":"Platform On Audio State Changed","Platform On Pause State Changed.":"Platform On Pause State Changed.","Platform On Pause State Changed":"Platform On Pause State Changed","Device Type.":"Device Type.","Device Type":"Device Type","Is Mobile.":"Is Mobile.","Is Mobile":"Is Mobile","Is Tablet.":"Is Tablet.","Is Tablet":"Is Tablet","Is Desktop.":"Is Desktop.","Is Desktop":"Is Desktop","Is Tv.":"Is Tv.","Is Tv":"Is Tv","Player Id.":"Player Id.","Player Id":"Player Id","Player Name.":"Player Name.","Player Name":"Player Name","Player Extra Properties Count.":"Player Extra Properties Count.","Player Extra Properties Count":"Player Extra Properties Count","Player Extra Property Name.":"Player Extra Property Name.","Player Extra Property Name":"Player Extra Property Name","Player Extra Property Value.":"Player Extra Property Value.","Player Extra Property Value":"Player Extra Property Value","Player Photos Count.":"Player Photos Count.","Player Photos Count":"Player Photos Count","Player Photo # _PARAM1_.":"Player Photo # _PARAM1_.","Player Photo":"Player Photo","Index":"Index","Visibility State.":"Visibility State.","Visibility State":"Visibility State","On Visibility State Changed.":"On Visibility State Changed.","On Visibility State Changed":"On Visibility State Changed","Default Storage Type.":"Default Storage Type.","Default Storage Type":"Default Storage Type","Storage Data.":"Storage Data.","Storage Data":"Storage Data","Storage Data As JSON.":"Storage Data As JSON.","Storage Data As JSON":"Storage Data As JSON","Append Parameter to Storage Data Get Request.":"Append Parameter to Storage Data Get Request.","Append Parameter to Storage Data Get Request":"Append Parameter to Storage Data Get Request","Append Parameter _PARAM1_ to Storage Data Get Request":"Append Parameter _PARAM1_ to Storage Data Get Request","Append Parameter to Storage Data Set Request.":"Append Parameter to Storage Data Set Request.","Append Parameter to Storage Data Set Request":"Append Parameter to Storage Data Set Request","Append Parameter _PARAM1_ : _PARAM2_ to Storage Data Set Request":"Append Parameter _PARAM1_ : _PARAM2_ to Storage Data Set Request","Append Parameter to Storage Data Delete Request.":"Append Parameter to Storage Data Delete Request.","Append Parameter to Storage Data Delete Request":"Append Parameter to Storage Data Delete Request","Append Parameter _PARAM1_ to Storage Data Delete Request":"Append Parameter _PARAM1_ to Storage Data Delete Request","Is Last Action Completed Successfully.":"Is Last Action Completed Successfully.","Is Last Action Completed Successfully":"Is Last Action Completed Successfully","Send Storage Data Get Request.":"Send Storage Data Get Request.","Send Storage Data Get Request":"Send Storage Data Get Request","Send Storage Data Get Request _PARAM1_":"Send Storage Data Get Request _PARAM1_","Storage Type":"Storage Type","Send Storage Data Set Request.":"Send Storage Data Set Request.","Send Storage Data Set Request":"Send Storage Data Set Request","Send Storage Data Set Request _PARAM1_":"Send Storage Data Set Request _PARAM1_","Send Storage Data Delete Request.":"Send Storage Data Delete Request.","Send Storage Data Delete Request":"Send Storage Data Delete Request","Send Storage Data Delete Request _PARAM1_":"Send Storage Data Delete Request _PARAM1_","On Storage Data Get Request Completed.":"On Storage Data Get Request Completed.","On Storage Data Get Request Completed":"On Storage Data Get Request Completed","On Storage Data Set Request Completed.":"On Storage Data Set Request Completed.","On Storage Data Set Request Completed":"On Storage Data Set Request Completed","On Storage Data Delete Request Completed.":"On Storage Data Delete Request Completed.","On Storage Data Delete Request Completed":"On Storage Data Delete Request Completed","Has Storage Data.":"Has Storage Data.","Has Storage Data":"Has Storage Data","Has _PARAM1_ in Storage Data":"Has _PARAM1_ in Storage Data","Is Storage Supported.":"Is Storage Supported.","Is Storage Supported":"Is Storage Supported","Is Storage Supported _PARAM1_":"Is Storage Supported _PARAM1_","Is Storage Available.":"Is Storage Available.","Is Storage Available":"Is Storage Available","Is Storage Available _PARAM1_":"Is Storage Available _PARAM1_","Set Minimum Delay Between Interstitial.":"Set Minimum Delay Between Interstitial.","Set Minimum Delay Between Interstitial":"Set Minimum Delay Between Interstitial","Set Minimum Delay Between Interstitial _PARAM1_":"Set Minimum Delay Between Interstitial _PARAM1_","Seconds":"Seconds","Show Banner.":"Show Banner.","Show Banner":"Show Banner","Show Banner on _PARAM1_ with placement _PARAM2_":"Show Banner on _PARAM1_ with placement _PARAM2_","Placement (optional)":"Placement (optional)","Hide Banner.":"Hide Banner.","Hide Banner":"Hide Banner","Show Advanced Banners.":"Show Advanced Banners.","Show Advanced Banners":"Show Advanced Banners","Show Advanced Banners with placement _PARAM1_":"Show Advanced Banners with placement _PARAM1_","Hide Advanced Banners.":"Hide Advanced Banners.","Hide Advanced Banners":"Hide Advanced Banners","Show Interstitial.":"Show Interstitial.","Show Interstitial":"Show Interstitial","Show Interstitial with placement _PARAM1_":"Show Interstitial with placement _PARAM1_","Show Rewarded.":"Show Rewarded.","Show Rewarded":"Show Rewarded","Show Rewarded with placement _PARAM1_":"Show Rewarded with placement _PARAM1_","Check AdBlock.":"Check AdBlock.","Check AdBlock":"Check AdBlock","Minimum Delay Between Interstitial.":"Minimum Delay Between Interstitial.","Minimum Delay Between Interstitial":"Minimum Delay Between Interstitial","Banner State.":"Banner State.","Banner State":"Banner State","Interstitial State.":"Interstitial State.","Interstitial State":"Interstitial State","Rewarded State.":"Rewarded State.","Rewarded State":"Rewarded State","Rewarded Placement.":"Rewarded Placement.","Rewarded Placement":"Rewarded Placement","Advanced Banners State.":"Advanced Banners State.","Advanced Banners State":"Advanced Banners State","Is Banner Supported.":"Is Banner Supported.","Is Banner Supported":"Is Banner Supported","Is Interstitial Supported.":"Is Interstitial Supported.","Is Interstitial Supported":"Is Interstitial Supported","Is Rewarded Supported.":"Is Rewarded Supported.","Is Rewarded Supported":"Is Rewarded Supported","Is Advanced Banners Supported.":"Is Advanced Banners Supported.","Is Advanced Banners Supported":"Is Advanced Banners Supported","On Banner State Changed.":"On Banner State Changed.","On Banner State Changed":"On Banner State Changed","On Banner Loading.":"On Banner Loading.","On Banner Loading":"On Banner Loading","On Banner Shown.":"On Banner Shown.","On Banner Shown":"On Banner Shown","On Banner Hidden.":"On Banner Hidden.","On Banner Hidden":"On Banner Hidden","On Banner Failed.":"On Banner Failed.","On Banner Failed":"On Banner Failed","On Advanced Banners State Changed.":"On Advanced Banners State Changed.","On Advanced Banners State Changed":"On Advanced Banners State Changed","On Advanced Banners Loading.":"On Advanced Banners Loading.","On Advanced Banners Loading":"On Advanced Banners Loading","On Advanced Banners Shown.":"On Advanced Banners Shown.","On Advanced Banners Shown":"On Advanced Banners Shown","On Advanced Banners Hidden.":"On Advanced Banners Hidden.","On Advanced Banners Hidden":"On Advanced Banners Hidden","On Advanced Banners Failed.":"On Advanced Banners Failed.","On Advanced Banners Failed":"On Advanced Banners Failed","On Interstitial State Changed.":"On Interstitial State Changed.","On Interstitial State Changed":"On Interstitial State Changed","On Interstitial Loading.":"On Interstitial Loading.","On Interstitial Loading":"On Interstitial Loading","On Interstitial Opened.":"On Interstitial Opened.","On Interstitial Opened":"On Interstitial Opened","On Interstitial Closed.":"On Interstitial Closed.","On Interstitial Closed":"On Interstitial Closed","On Interstitial Failed.":"On Interstitial Failed.","On Interstitial Failed":"On Interstitial Failed","On Rewarded State Changed.":"On Rewarded State Changed.","On Rewarded State Changed":"On Rewarded State Changed","On Rewarded Loading.":"On Rewarded Loading.","On Rewarded Loading":"On Rewarded Loading","On Rewarded Opened.":"On Rewarded Opened.","On Rewarded Opened":"On Rewarded Opened","On Rewarded Closed.":"On Rewarded Closed.","On Rewarded Closed":"On Rewarded Closed","On Rewarded Rewarded.":"On Rewarded Rewarded.","On Rewarded Rewarded":"On Rewarded Rewarded","On Rewarded Failed.":"On Rewarded Failed.","On Rewarded Failed":"On Rewarded Failed","On Check AdBlock Completed.":"On Check AdBlock Completed.","On Check AdBlock Completed":"On Check AdBlock Completed","Send Message.":"Send Message.","Send Message":"Send Message","Send Message _PARAM1_":"Send Message _PARAM1_","Message":"Message","Send Custom Message.":"Send Custom Message.","Send Custom Message":"Send Custom Message","Send Custom Message _PARAM1_":"Send Custom Message _PARAM1_","Get Server Time.":"Get Server Time.","Get Server Time":"Get Server Time","Server Time.":"Server Time.","Server Time":"Server Time","On Get Server Time Completed.":"On Get Server Time Completed.","On Get Server Time Completed":"On Get Server Time Completed","Has Server Time.":"Has Server Time.","Has Server Time":"Has Server Time","Authorize Player.":"Authorize Player.","Authorize Player":"Authorize Player","Is Player Authorization Supported.":"Is Player Authorization Supported.","Is Player Authorization Supported":"Is Player Authorization Supported","Is Player Authorized.":"Is Player Authorized.","Is Player Authorized":"Is Player Authorized","On Authorize Player Completed.":"On Authorize Player Completed.","On Authorize Player Completed":"On Authorize Player Completed","Does Player Have Name.":"Does Player Have Name.","Does Player Have Name":"Does Player Have Name","Does Player Have Photo.":"Does Player Have Photo.","Does Player Have Photo":"Does Player Have Photo","Does Player Have Photo # _PARAM1_":"Does Player Have Photo # _PARAM1_","Share.":"Share.","Share":"Share","Invite Friends.":"Invite Friends.","Invite Friends":"Invite Friends","Join Community.":"Join Community.","Join Community":"Join Community","Create Post.":"Create Post.","Create Post":"Create Post","Add To Home Screen.":"Add To Home Screen.","Add To Home Screen":"Add To Home Screen","Add To Favorites.":"Add To Favorites.","Add To Favorites":"Add To Favorites","Rate.":"Rate.","Rate":"Rate","Is Share Supported.":"Is Share Supported.","Is Share Supported":"Is Share Supported","On Share Completed.":"On Share Completed.","On Share Completed":"On Share Completed","Is Invite Friends Supported.":"Is Invite Friends Supported.","Is Invite Friends Supported":"Is Invite Friends Supported","On Invite Friends Completed.":"On Invite Friends Completed.","On Invite Friends Completed":"On Invite Friends Completed","Is Join Community Supported.":"Is Join Community Supported.","Is Join Community Supported":"Is Join Community Supported","On Join Community Completed.":"On Join Community Completed.","On Join Community Completed":"On Join Community Completed","Is Create Post Supported.":"Is Create Post Supported.","Is Create Post Supported":"Is Create Post Supported","On Create Post Completed.":"On Create Post Completed.","On Create Post Completed":"On Create Post Completed","Is Add To Home Screen Supported.":"Is Add To Home Screen Supported.","Is Add To Home Screen Supported":"Is Add To Home Screen Supported","On Add To Home Screen Completed.":"On Add To Home Screen Completed.","On Add To Home Screen Completed":"On Add To Home Screen Completed","Is Add To Favorites Supported.":"Is Add To Favorites Supported.","Is Add To Favorites Supported":"Is Add To Favorites Supported","On Add To Favorites Completed.":"On Add To Favorites Completed.","On Add To Favorites Completed":"On Add To Favorites Completed","Is Rate Supported.":"Is Rate Supported.","Is Rate Supported":"Is Rate Supported","On Rate Completed.":"On Rate Completed.","On Rate Completed":"On Rate Completed","Is External Links Allowed.":"Is External Links Allowed.","Is External Links Allowed":"Is External Links Allowed","Leaderboards Set Score.":"Leaderboards Set Score.","Leaderboards Set Score":"Leaderboards Set Score","Leaderboards Set Score - Id: _PARAM1_, Score: _PARAM2_":"Leaderboards Set Score - Id: _PARAM1_, Score: _PARAM2_","Leaderboards Get Entries.":"Leaderboards Get Entries.","Leaderboards Get Entries":"Leaderboards Get Entries","Leaderboards Get Entries - Id: _PARAM1_":"Leaderboards Get Entries - Id: _PARAM1_","Leaderboards Show Native Popup.":"Leaderboards Show Native Popup.","Leaderboards Show Native Popup":"Leaderboards Show Native Popup","Leaderboards Show Native Popup - Id: _PARAM1_":"Leaderboards Show Native Popup - Id: _PARAM1_","Leaderboards Type.":"Leaderboards Type.","Leaderboards Type":"Leaderboards Type","Is Leaderboard Supported":"Is Leaderboard Supported","The leaderboard is of type Not Available.":"The leaderboard is of type Not Available.","The leaderboard is of type Not Available":"The leaderboard is of type Not Available","The leaderboard is of type In Game.":"The leaderboard is of type In Game.","The leaderboard is of type In Game":"The leaderboard is of type In Game","The leaderboard is of type Native.":"The leaderboard is of type Native.","The leaderboard is of type Native":"The leaderboard is of type Native","The leaderboard is of type Native Popup.":"The leaderboard is of type Native Popup.","The leaderboard is of type Native Popup":"The leaderboard is of type Native Popup","On Leaderboards Set Score Completed.":"On Leaderboards Set Score Completed.","On Leaderboards Set Score Completed":"On Leaderboards Set Score Completed","On Leaderboards Get Entries Completed.":"On Leaderboards Get Entries Completed.","On Leaderboards Get Entries Completed":"On Leaderboards Get Entries Completed","On Leaderboards Show Native Popup Completed.":"On Leaderboards Show Native Popup Completed.","On Leaderboards Show Native Popup Completed":"On Leaderboards Show Native Popup Completed","Leaderboard Entries Count.":"Leaderboard Entries Count.","Leaderboard Entries Count":"Leaderboard Entries Count","Leaderboard Entry Id.":"Leaderboard Entry Id.","Leaderboard Entry Id":"Leaderboard Entry Id","Entry Index":"Entry Index","Leaderboard Entry Name.":"Leaderboard Entry Name.","Leaderboard Entry Name":"Leaderboard Entry Name","Leaderboard Entry Photo.":"Leaderboard Entry Photo.","Leaderboard Entry Photo":"Leaderboard Entry Photo","Leaderboard Entry Rank.":"Leaderboard Entry Rank.","Leaderboard Entry Rank":"Leaderboard Entry Rank","Leaderboard Entry Score.":"Leaderboard Entry Score.","Leaderboard Entry Score":"Leaderboard Entry Score","Payments Purchase.":"Payments Purchase.","Payments Purchase":"Payments Purchase","Payments Purchase - Id: _PARAM1_":"Payments Purchase - Id: _PARAM1_","Payments Get Purchases.":"Payments Get Purchases.","Payments Get Purchases":"Payments Get Purchases","Payments Get Catalog.":"Payments Get Catalog.","Payments Get Catalog":"Payments Get Catalog","Payments Consume Purchase.":"Payments Consume Purchase.","Payments Consume Purchase":"Payments Consume Purchase","Payments Consume Purchase - Id: _PARAM1_":"Payments Consume Purchase - Id: _PARAM1_","Is Payments Supported.":"Is Payments Supported.","Is Payments Supported":"Is Payments Supported","On Payments Purchase Completed.":"On Payments Purchase Completed.","On Payments Purchase Completed":"On Payments Purchase Completed","On Payments Get Purchases Completed.":"On Payments Get Purchases Completed.","On Payments Get Purchases Completed":"On Payments Get Purchases Completed","On Payments Get Catalog Completed.":"On Payments Get Catalog Completed.","On Payments Get Catalog Completed":"On Payments Get Catalog Completed","On Payments Consume Purchase Completed.":"On Payments Consume Purchase Completed.","On Payments Consume Purchase Completed":"On Payments Consume Purchase Completed","Payments Last Purchase Properties Count.":"Payments Last Purchase Properties Count.","Payments Last Purchase Properties Count":"Payments Last Purchase Properties Count","Payments Last Purchase Property Name.":"Payments Last Purchase Property Name.","Payments Last Purchase Property Name":"Payments Last Purchase Property Name","Payments Last Purchase Property Value.":"Payments Last Purchase Property Value.","Payments Last Purchase Property Value":"Payments Last Purchase Property Value","Payments Purchases Count.":"Payments Purchases Count.","Payments Purchases Count":"Payments Purchases Count","Payments Purchase Properties Count.":"Payments Purchase Properties Count.","Payments Purchase Properties Count":"Payments Purchase Properties Count","Payments Purchase Property Name.":"Payments Purchase Property Name.","Payments Purchase Property Name":"Payments Purchase Property Name","Purchase Index":"Purchase Index","Payments Catalog Items Count.":"Payments Catalog Items Count.","Payments Catalog Items Count":"Payments Catalog Items Count","Payments Catalog Item Properties Count.":"Payments Catalog Item Properties Count.","Payments Catalog Item Properties Count":"Payments Catalog Item Properties Count","Payments Catalog Item Property Name.":"Payments Catalog Item Property Name.","Payments Catalog Item Property Name":"Payments Catalog Item Property Name","Payments Catalog Item Property Value.":"Payments Catalog Item Property Value.","Payments Catalog Item Property Value":"Payments Catalog Item Property Value","Product Index":"Product Index","Payments First Catalog Item Property Value.":"Payments First Catalog Item Property Value.","Payments First Catalog Item Property Value":"Payments First Catalog Item Property Value","Filter Property":"Filter Property","Filter Property Value":"Filter Property Value","Is Achievements Supported.":"Is Achievements Supported.","Is Achievements Supported":"Is Achievements Supported","Is Achievements Get List Supported.":"Is Achievements Get List Supported.","Is Achievements Get List Supported":"Is Achievements Get List Supported","Is Achievements Native Popup Supported.":"Is Achievements Native Popup Supported.","Is Achievements Native Popup Supported":"Is Achievements Native Popup Supported","On Achievements Unlock Completed.":"On Achievements Unlock Completed.","On Achievements Unlock Completed":"On Achievements Unlock Completed","On Achievements Get List Completed.":"On Achievements Get List Completed.","On Achievements Get List Completed":"On Achievements Get List Completed","On Achievements Show Native Popup Completed.":"On Achievements Show Native Popup Completed.","On Achievements Show Native Popup Completed":"On Achievements Show Native Popup Completed","Achievements Count.":"Achievements Count.","Achievements Count":"Achievements Count","Achievement Properties Count.":"Achievement Properties Count.","Achievement Properties Count":"Achievement Properties Count","Achievement Property Name.":"Achievement Property Name.","Achievement Property Name":"Achievement Property Name","Achievement Property Value.":"Achievement Property Value.","Achievement Property Value":"Achievement Property Value","Achievement Index":"Achievement Index","Achievements Unlock.":"Achievements Unlock.","Achievements Unlock":"Achievements Unlock","Achievements Get List.":"Achievements Get List.","Achievements Get List":"Achievements Get List","Achievements Show Native Popup.":"Achievements Show Native Popup.","Achievements Show Native Popup":"Achievements Show Native Popup","Is Remote Config Supported.":"Is Remote Config Supported.","Is Remote Config Supported":"Is Remote Config Supported","On Remote Config Got Completed.":"On Remote Config Got Completed.","On Remote Config Got Completed":"On Remote Config Got Completed","Has Remote Config Value.":"Has Remote Config Value.","Has Remote Config Value":"Has Remote Config Value","Has _PARAM1_ in Remote Config":"Has _PARAM1_ in Remote Config","Remote Config Value.":"Remote Config Value.","Remote Config Value":"Remote Config Value","Send Remote Config Get Request.":"Send Remote Config Get Request.","Send Remote Config Get Request":"Send Remote Config Get Request","Is Ad Block Detected.":"Is Ad Block Detected.","Is Ad Block Detected":"Is Ad Block Detected","Poki Games SDK":"Poki Games SDK","Poki Games SDK: display ads and manage game lifecycle for Poki hosting.":"Poki Games SDK: display ads and manage game lifecycle for Poki hosting.","Load Poki SDK.":"Load Poki SDK.","Load Poki SDK":"Load Poki SDK","Check if the Poki SDK is ready to be used.":"Check if the Poki SDK is ready to be used.","Poki SDK is ready":"Poki SDK is ready","Inform Poki game finished loading.":"Inform Poki game finished loading.","Game loading finished":"Game loading finished","Inform Poki game finished loading":"Inform Poki game finished loading","Inform Poki gameplay started.":"Inform Poki gameplay started.","Inform Poki gameplay started":"Inform Poki gameplay started","Inform Poki gameplay stopped.":"Inform Poki gameplay stopped.","Inform Poki gameplay stopped":"Inform Poki gameplay stopped","Request commercial break.":"Request commercial break.","Commercial break":"Commercial break","Request commercial break":"Request commercial break","Request rewarded break.":"Request rewarded break.","Rewarded break":"Rewarded break","Request rewarded break":"Request rewarded break","Create a shareable URL from parameters stored in a variable structure.":"Create a shareable URL from parameters stored in a variable structure.","Create shareable URL":"Create shareable URL","Create shareable URL from parameters _PARAM0_":"Create shareable URL from parameters _PARAM0_","Variable structure with URL parameters (example children: id, type)":"Variable structure with URL parameters (example children: id, type)","Get the last shareable URL generated by Create shareable URL.":"Get the last shareable URL generated by Create shareable URL.","Last shareable URL":"Last shareable URL","Read a URL parameter from Poki URL or the current URL.":"Read a URL parameter from Poki URL or the current URL.","Get URL parameter":"Get URL parameter","Parameter name (without the gd prefix)":"Parameter name (without the gd prefix)","Open an external URL via Poki SDK.":"Open an external URL via Poki SDK.","Open external link":"Open external link","Open external link _PARAM0_":"Open external link _PARAM0_","URL to open":"URL to open","Move the Poki Pill on mobile.":"Move the Poki Pill on mobile.","Move Poki Pill":"Move Poki Pill","Move Poki Pill to _PARAM0_ percent from top with _PARAM1_ px offset":"Move Poki Pill to _PARAM0_ percent from top with _PARAM1_ px offset","Top percent (0-50)":"Top percent (0-50)","Additional pixel offset":"Additional pixel offset","Measure an event for analytics.":"Measure an event for analytics.","Measure event":"Measure event","Measure category _PARAM0_ what _PARAM1_ action _PARAM2_":"Measure category _PARAM0_ what _PARAM1_ action _PARAM2_","Category (for example: level, tutorial, drawing)":"Category (for example: level, tutorial, drawing)","What is measured (for example: 1, de_dust, skip-level)":"What is measured (for example: 1, de_dust, skip-level)","Action (for example: start, complete, fail)":"Action (for example: start, complete, fail)","Checks if a commercial break is playing.":"Checks if a commercial break is playing.","Commercial break is playing":"Commercial break is playing","Checks if a rewarded break is playing.":"Checks if a rewarded break is playing.","Rewarded break is playing":"Rewarded break is playing","Checks if a commercial break just finished playing.":"Checks if a commercial break just finished playing.","Commercial break just finished playing":"Commercial break just finished playing","Checks if a rewarded break just finished playing.":"Checks if a rewarded break just finished playing.","Rewarded break just finished playing":"Rewarded break just finished playing","Checks if player should be rewarded after a rewarded break finished playing.":"Checks if player should be rewarded after a rewarded break finished playing.","Should reward player":"Should reward player","Pop-up":"Pop-up","Display pop-ups to alert, ask confirmation, and let user type a response in text box.":"Display pop-ups to alert, ask confirmation, and let user type a response in text box.","The response to a pop-up message is filled.":"The response to a pop-up message is filled.","Existing prompt response":"Existing prompt response","Response from the pop-up prompt is filled":"Response from the pop-up prompt is filled","Return the text response by user to prompt.":"Return the text response by user to prompt.","Response to prompt":"Response to prompt","Open prompt with message : _PARAM1_ with ID: _PARAM2_":"Open prompt with message : _PARAM1_ with ID: _PARAM2_","Displays a prompt in a pop-up that prompts the user for input. This action return the text input or the false boolean if canceled.":"Displays a prompt in a pop-up that prompts the user for input. This action return the text input or the false boolean if canceled.","Prompt":"Prompt","Open a prompt pop-up box with message: _PARAM1_ (placeholder: _PARAM2_)":"Open a prompt pop-up box with message: _PARAM1_ (placeholder: _PARAM2_)","Prompt message":"Prompt message","Input placeholder":"Input placeholder","Ask confirmation of user with a message in a dialog box with an OK button, and a Cancel button.":"Ask confirmation of user with a message in a dialog box with an OK button, and a Cancel button.","Confirm":"Confirm","Open a confirmation pop-up box with message: _PARAM1_":"Open a confirmation pop-up box with message: _PARAM1_","Confirmation message":"Confirmation message","The text to display in the confirm box.":"The text to display in the confirm box.","Check if a confirmation was accepted.":"Check if a confirmation was accepted.","Pop-up message confirmed":"Pop-up message confirmed","Pop-up message is confirmed":"Pop-up message is confirmed","Displays an alert box with a message and an OK button in a pop-up window.":"Displays an alert box with a message and an OK button in a pop-up window.","Alert":"Alert","Open an alert pop-up box with message: _PARAM1_":"Open an alert pop-up box with message: _PARAM1_","Alert message":"Alert message","RTS-like unit selection":"RTS-like unit selection","Select units by clicking on them or dragging a selection box.":"Select units by clicking on them or dragging a selection box.","Allow player to select units by clicking on them or dragging a selection box.":"Allow player to select units by clicking on them or dragging a selection box.","Allow player to select units by clicking on them or dragging a selection box":"Allow player to select units by clicking on them or dragging a selection box","Allow player to select _PARAM1_ with _PARAM7_ mouse button (or touch). Draw a selection box using _PARAM2_ on Layer: _PARAM3_ with Z order: _PARAM4_. Hold _PARAM5_ to add units and _PARAM6_ to remove units":"Allow player to select _PARAM1_ with _PARAM7_ mouse button (or touch). Draw a selection box using _PARAM2_ on Layer: _PARAM3_ with Z order: _PARAM4_. Hold _PARAM5_ to add units and _PARAM6_ to remove units","Units":"Units","Object (or object group) that can be Selected":"Object (or object group) that can be Selected","Selection box":"Selection box","Edit shape painter properties to change the appearance of this selection box":"Edit shape painter properties to change the appearance of this selection box","Layer (of selection box)":"Layer (of selection box)","Must be the same layer as the units being selected":"Must be the same layer as the units being selected","Z order (of selection box)":"Z order (of selection box)","Z order of the selection box":"Z order of the selection box","Additive select key":"Additive select key","Hold this key to add units to selection":"Hold this key to add units to selection","Subtractive select key":"Subtractive select key","Hold this key to remove units from selection":"Hold this key to remove units from selection","Mouse button used to select units":"Mouse button used to select units","Check if the unit is \"Preselected\".":"Check if the unit is \"Preselected\".","Is unit \"Preselected\"":"Is unit \"Preselected\"","_PARAM1_ is \"Preselected\"":"_PARAM1_ is \"Preselected\"","Check if the unit is \"Selected\".":"Check if the unit is \"Selected\".","Is unit \"Selected\"":"Is unit \"Selected\"","_PARAM1_ is \"Selected\"":"_PARAM1_ is \"Selected\"","Set unit as \"Preselected\".":"Set unit as \"Preselected\".","Set unit as \"Preselected\"":"Set unit as \"Preselected\"","Set _PARAM1_ as \"Preselected\": _PARAM2_":"Set _PARAM1_ as \"Preselected\": _PARAM2_","Set unit as \"Selected\".":"Set unit as \"Selected\".","Set unit as \"Selected\"":"Set unit as \"Selected\"","Set _PARAM1_ as \"Selected\": _PARAM2_":"Set _PARAM1_ as \"Selected\": _PARAM2_","Assign a unique ID to each \"Selected\" unit. This should be ran every time there is a change in the number of \"Selected\" units.":"Assign a unique ID to each \"Selected\" unit. This should be ran every time there is a change in the number of \"Selected\" units.","Assign a unique ID to each \"Selected\" unit":"Assign a unique ID to each \"Selected\" unit","Assign a unique ID to _PARAM1_ that are \"Selected\"":"Assign a unique ID to _PARAM1_ that are \"Selected\"","Provides the total number of _PARAM1_ that are currently \"Selected\".":"Provides the total number of _PARAM1_ that are currently \"Selected\".","Total number of \"Selected\" units":"Total number of \"Selected\" units","Unit":"Unit","Enable control groups using default controls.":"Enable control groups using default controls.","Enable control groups using default controls":"Enable control groups using default controls","Assign _PARAM1_ to control groups using default controls (Ctrl + number)":"Assign _PARAM1_ to control groups using default controls (Ctrl + number)","Object (or object group) that will be assigned to a control group":"Object (or object group) that will be assigned to a control group","Control group this unit is assigned to.":"Control group this unit is assigned to.","Control group this unit is assigned to":"Control group this unit is assigned to","Check if a unit is assigned to a control group.":"Check if a unit is assigned to a control group.","Check if a unit is assigned to a control group":"Check if a unit is assigned to a control group","_PARAM1_ is assigned to control group _PARAM2_":"_PARAM1_ is assigned to control group _PARAM2_","Control group ID":"Control group ID","Assign unit to a control group.":"Assign unit to a control group.","Assign unit to a control group":"Assign unit to a control group","Assign _PARAM1_ to control group _PARAM2_":"Assign _PARAM1_ to control group _PARAM2_","Unit ID of a selected unit.":"Unit ID of a selected unit.","Unit ID of a selected unit":"Unit ID of a selected unit","3D raycast":"3D raycast","Find 3D objects that cross a line.":"Find 3D objects that cross a line.","Sends a ray from the given source position and angle, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the given source position and angle, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast":"Raycast","Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ toward a rotation of _PARAM5_\xB0, an elevation of _PARAM6_\xB0 and max distance of _PARAM7_ against _PARAM1_":"Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ toward a rotation of _PARAM5_\xB0, an elevation of _PARAM6_\xB0 and max distance of _PARAM7_ against _PARAM1_","Objects to test against the ray":"Objects to test against the ray","Ray source X position":"Ray source X position","Ray source Y position":"Ray source Y position","Ray source Z position":"Ray source Z position","Rotation angle (in degrees)":"Rotation angle (in degrees)","Elevation angle (in degrees)":"Elevation angle (in degrees)","Ray maximum distance (in pixels)":"Ray maximum distance (in pixels)","Sends a ray from the given source position to the final point, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the given source position to the final point, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast to a position":"Raycast to a position","Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ to _PARAM5_; _PARAM6_; _PARAM7_ against _PARAM1_":"Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ to _PARAM5_; _PARAM6_; _PARAM7_ against _PARAM1_","Ray target X position":"Ray target X position","Ray target Y position":"Ray target Y position","Ray target Z position":"Ray target Z position","Sends a ray from the center of the camera, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the center of the camera, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast from camera center":"Raycast from camera center","Cast a ray from the camera center to a maximum distance of _PARAM2_ against _PARAM1_":"Cast a ray from the camera center to a maximum distance of _PARAM2_ against _PARAM1_","Sends a ray from the given source point on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the given source point on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast from a camera point":"Raycast from a camera point","Cast a ray from the camera point _PARAM2_; _PARAM3_ to a maximum distance of _PARAM4_ against _PARAM1_":"Cast a ray from the camera point _PARAM2_; _PARAM3_ to a maximum distance of _PARAM4_ against _PARAM1_","X position on the screen (from 0 to 1)":"X position on the screen (from 0 to 1)","Y position on the screen (from 0 to 1)":"Y position on the screen (from 0 to 1)","Sends a ray from the cursor on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the cursor on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast from cursor":"Raycast from cursor","Cast a ray from the cursor on 2D layer: _PARAM2_ to a maximum distance of _PARAM3_ against _PARAM1_":"Cast a ray from the cursor on 2D layer: _PARAM2_ to a maximum distance of _PARAM3_ against _PARAM1_","2D layer":"2D layer","the last recast intersection distance.":"the last recast intersection distance.","Last recast distance":"Last recast distance","the last recast intersection distance":"the last recast intersection distance","Return the last recast intersection position on X axis.":"Return the last recast intersection position on X axis.","Last recast X intersection":"Last recast X intersection","Return the last recast intersection position on Y axis.":"Return the last recast intersection position on Y axis.","Last recast Y intersection":"Last recast Y intersection","Return the last recast intersection position on Z axis.":"Return the last recast intersection position on Z axis.","Last recast Z intersection":"Last recast Z intersection","Return the last recast intersection normal on X axis.":"Return the last recast intersection normal on X axis.","Last recast X normal":"Last recast X normal","Return the last recast intersection normal on Z axis.":"Return the last recast intersection normal on Z axis.","Last recast Z normal":"Last recast Z normal","Read pixels":"Read pixels","Read the values of pixels on the screen.":"Read the values of pixels on the screen.","Return the alpha component of the pixel at the specified position.":"Return the alpha component of the pixel at the specified position.","Read pixel alpha":"Read pixel alpha","Record":"Record","Record gameplay as video clips for download.":"Record gameplay as video clips for download.","Start the recording.":"Start the recording.","Start recording":"Start recording","End the recording.":"End the recording.","Stop recording":"Stop recording","Stop the recording":"Stop the recording","Pause recording.":"Pause recording.","Pause recording":"Pause recording","Resume recording.":"Resume recording.","Resume recording":"Resume recording","Save recording to the file system on destop, or to the downloads folder for web. Always ask for permission to save a file.":"Save recording to the file system on destop, or to the downloads folder for web. Always ask for permission to save a file.","Save recording":"Save recording","Save recording to _PARAM1_ as _PARAM2_":"Save recording to _PARAM1_ as _PARAM2_","File location, set using a FileSystem path e.g. FileSystem::DesktopPath() (only used for desktop saves)":"File location, set using a FileSystem path e.g. FileSystem::DesktopPath() (only used for desktop saves)","Name to save file as":"Name to save file as","Returns the current status of the reccorder: inactive (not recording), recording, or paused.":"Returns the current status of the reccorder: inactive (not recording), recording, or paused.","Get current state":"Get current state","Get the current framerate.":"Get the current framerate.","Get frame rate":"Get frame rate","Set frame rate to _PARAM1_":"Set frame rate to _PARAM1_","Set the frame rate, must be set before starting a recording. Defaults to the min FPS set in the game properties.":"Set the frame rate, must be set before starting a recording. Defaults to the min FPS set in the game properties.","Set frame rate":"Set frame rate","Recommended fps for video: 25, 30, 60, for GIFs use 5, 10, 20":"Recommended fps for video: 25, 30, 60, for GIFs use 5, 10, 20","Returns the current video bit rate per second.":"Returns the current video bit rate per second.","Get video bit rate per second":"Get video bit rate per second","Set the video bit rate, must be set before starting a recording. Defaults to 2500000.":"Set the video bit rate, must be set before starting a recording. Defaults to 2500000.","Set video bit rate":"Set video bit rate","Set the video bit rate to _PARAM1_":"Set the video bit rate to _PARAM1_","video bits per second":"video bits per second","Returns the audio bit rate per second. Defaults to 128000 if not set.":"Returns the audio bit rate per second. Defaults to 128000 if not set.","Set audio bit rate":"Set audio bit rate","Set the audio bit rate to _PARAM1_":"Set the audio bit rate to _PARAM1_","audio bits per second":"audio bits per second","Returns the audio bit rate per second.":"Returns the audio bit rate per second.","Get audio bit rate per second":"Get audio bit rate per second","Set the file format, if a selected file format is unsupported on the users platform a supported one will be picked by deafult.":"Set the file format, if a selected file format is unsupported on the users platform a supported one will be picked by deafult.","Set file format":"Set file format","Set file format to _PARAM1_":"Set file format to _PARAM1_","Recording format":"Recording format","Returns the current video format.":"Returns the current video format.","Get codec":"Get codec","Set the video codec, if a selected codec is unsupported on the users platform a supported one will be picked by deafult.":"Set the video codec, if a selected codec is unsupported on the users platform a supported one will be picked by deafult.","Set codec":"Set codec","Set video codec _PARAM1_":"Set video codec _PARAM1_","codec":"codec","Returns the current video codec.":"Returns the current video codec.","Get video codec":"Get video codec","When an error occurs this method will return what type of error it is.":"When an error occurs this method will return what type of error it is.","Error type":"Error type","Check if an error has occurred.":"Check if an error has occurred.","When an errror has occurred":"When an errror has occurred","When an error has occurred":"When an error has occurred","Check if a recording has just been paused.":"Check if a recording has just been paused.","When recording has paused":"When recording has paused","Check if a recording has just been resumed.":"Check if a recording has just been resumed.","When recording has resumed":"When recording has resumed","Check if recording has just started.":"Check if recording has just started.","When recording has started":"When recording has started","Check if recording has just stopped.":"Check if recording has just stopped.","When recording has stopped":"When recording has stopped","Check if recording has just been saved.":"Check if recording has just been saved.","When recording has saved":"When recording has saved","When recording has been saved":"When recording has been saved","Check if the specified format is available on the users device. To avoid unsupported formats pick commons ones like MP4 or WebM.":"Check if the specified format is available on the users device. To avoid unsupported formats pick commons ones like MP4 or WebM.","Is format supported on user device":"Is format supported on user device","Check if _PARAM1_ is available on the users device":"Check if _PARAM1_ is available on the users device","Select a common format for the best results":"Select a common format for the best results","Get the current GIF quality.":"Get the current GIF quality.","Set the GIF quality, must be set before starting a recording. Defaults to 10.":"Set the GIF quality, must be set before starting a recording. Defaults to 10.","Set GIF quality":"Set GIF quality","Set the GIF quality to _PARAM1_":"Set the GIF quality to _PARAM1_","Returns whether or not dithering is enabled for GIFs.":"Returns whether or not dithering is enabled for GIFs.","Enable dithering in GIF, must be set before starting a recording. Defaults to false.":"Enable dithering in GIF, must be set before starting a recording. Defaults to false.","Set GIF Dithering":"Set GIF Dithering","Enable dithering _PARAM1_":"Enable dithering _PARAM1_","Dithering":"Dithering","Rectangular movement":"Rectangular movement","Move objects in a rectangular pattern.":"Move objects in a rectangular pattern.","Distance from an object to the closest edge of a second object.":"Distance from an object to the closest edge of a second object.","Distance from an object to the closest edge of a second object":"Distance from an object to the closest edge of a second object","Distance from _PARAM1_ to the closest edge of _PARAM2_":"Distance from _PARAM1_ to the closest edge of _PARAM2_","Moving object":"Moving object","Update rectangular movement to follow the border of an object. Run once, or every time the center object moves.":"Update rectangular movement to follow the border of an object. Run once, or every time the center object moves.","Update rectangular movement to follow the border of an object":"Update rectangular movement to follow the border of an object","Update rectangular movement of _PARAM1_ to follow the border of _PARAM3_. Position on border: _PARAM4_":"Update rectangular movement of _PARAM1_ to follow the border of _PARAM3_. Position on border: _PARAM4_","Rectangle Movement (required)":"Rectangle Movement (required)","Position on border":"Position on border","Move to the nearest corner of the center object.":"Move to the nearest corner of the center object.","Move to the nearest corner of the center object":"Move to the nearest corner of the center object","Move _PARAM1_ to the nearest corner of _PARAM3_":"Move _PARAM1_ to the nearest corner of _PARAM3_","Dimension":"Dimension","Clockwise":"Clockwise","Horizontal edge duration":"Horizontal edge duration","Vertical edge duration":"Vertical edge duration","Initial position":"Initial position","Teleport the object to a corner of the movement rectangle.":"Teleport the object to a corner of the movement rectangle.","Teleport at a corner":"Teleport at a corner","Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop":"Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop","Corner":"Corner","Return the perimeter of the movement rectangle.":"Return the perimeter of the movement rectangle.","Perimeter":"Perimeter","Return the time the object takes to go through the whole rectangle (in seconds).":"Return the time the object takes to go through the whole rectangle (in seconds).","Return the time the object takes to go through a horizontal edge (in seconds).":"Return the time the object takes to go through a horizontal edge (in seconds).","Return the time the object takes to go through a vertical edge (in seconds).":"Return the time the object takes to go through a vertical edge (in seconds).","Return the rectangle width.":"Return the rectangle width.","Return the rectangle height.":"Return the rectangle height.","Return the left bound of the movement.":"Return the left bound of the movement.","Return the top bound of the movement.":"Return the top bound of the movement.","Return the right bound of the movement.":"Return the right bound of the movement.","Return the bottom bound of the movement.":"Return the bottom bound of the movement.","Change the left bound of the rectangular movement.":"Change the left bound of the rectangular movement.","Change the movement left bound of _PARAM0_ to _PARAM2_":"Change the movement left bound of _PARAM0_ to _PARAM2_","Change the top bound of the rectangular movement.":"Change the top bound of the rectangular movement.","Change the movement top bound of _PARAM0_ to _PARAM2_":"Change the movement top bound of _PARAM0_ to _PARAM2_","Change the right bound of the rectangular movement.":"Change the right bound of the rectangular movement.","Change the movement right bound of _PARAM0_ to _PARAM2_":"Change the movement right bound of _PARAM0_ to _PARAM2_","Change the bottom bound of the rectangular movement.":"Change the bottom bound of the rectangular movement.","Change the movement bottom bound of _PARAM0_ to _PARAM2_":"Change the movement bottom bound of _PARAM0_ to _PARAM2_","Change the time the object takes to go through a horizontal edge (in seconds).":"Change the time the object takes to go through a horizontal edge (in seconds).","Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_":"Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_","Change the time the object takes to go through a vertical edge (in seconds).":"Change the time the object takes to go through a vertical edge (in seconds).","Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_":"Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_","Change the direction to clockwise or counter-clockwise.":"Change the direction to clockwise or counter-clockwise.","Use clockwise direction for _PARAM0_: _PARAM2_":"Use clockwise direction for _PARAM0_: _PARAM2_","Change the easing function of the movement.":"Change the easing function of the movement.","Change the easing of _PARAM0_ to _PARAM2_":"Change the easing of _PARAM0_ to _PARAM2_","Toggle the direction to clockwise or counter-clockwise.":"Toggle the direction to clockwise or counter-clockwise.","Toggle direction":"Toggle direction","Toogle the direction of _PARAM0_":"Toogle the direction of _PARAM0_","Check if the object is moving clockwise.":"Check if the object is moving clockwise.","Is moving clockwise":"Is moving clockwise","_PARAM0_ is moving clockwise":"_PARAM0_ is moving clockwise","Check if the object is moving to the left.":"Check if the object is moving to the left.","Is moving left":"Is moving left","_PARAM0_ is moving to the left":"_PARAM0_ is moving to the left","Check if the object is moving up.":"Check if the object is moving up.","Is moving up":"Is moving up","_PARAM0_ is moving up":"_PARAM0_ is moving up","Object is moving to the right.":"Object is moving to the right.","Is moving right":"Is moving right","_PARAM0_ is moving to the right":"_PARAM0_ is moving to the right","Check if the object is moving down.":"Check if the object is moving down.","Is moving down":"Is moving down","_PARAM0_ is moving down":"_PARAM0_ is moving down","Object is on the left side of the rectangle.":"Object is on the left side of the rectangle.","Is on left":"Is on left","_PARAM0_ is on the left side":"_PARAM0_ is on the left side","Object is on the top side of the rectangle.":"Object is on the top side of the rectangle.","Is on top":"Is on top","_PARAM0_ is on the top side":"_PARAM0_ is on the top side","Object is on the right side of the rectangle.":"Object is on the right side of the rectangle.","Is on right":"Is on right","_PARAM0_ is on the right side":"_PARAM0_ is on the right side","Object is on the bottom side of the rectangle.":"Object is on the bottom side of the rectangle.","Is on bottom":"Is on bottom","_PARAM0_ is on the bottom side":"_PARAM0_ is on the bottom side","Return the duration between the top-left vertex and the top-right one.":"Return the duration between the top-left vertex and the top-right one.","Duration to top right":"Duration to top right","Return the duration between the top-left vertex and the bottom-right one.":"Return the duration between the top-left vertex and the bottom-right one.","Duration to bottom right":"Duration to bottom right","Return the duration between the top-left vertex and the bottom-left one.":"Return the duration between the top-left vertex and the bottom-left one.","Duration to bottom left":"Duration to bottom left","Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).":"Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).","Progress on edge":"Progress on edge","Return the X position of the current edge origin.":"Return the X position of the current edge origin.","Edge origin X":"Edge origin X","Return the Y position of the current edge origin.":"Return the Y position of the current edge origin.","Edge origin Y":"Edge origin Y","Return the X position of the current edge target.":"Return the X position of the current edge target.","Edge target X":"Edge target X","Return the Y position of the current edge target.":"Return the Y position of the current edge target.","Edge target Y":"Edge target Y","Return the time from the top-left vertex.":"Return the time from the top-left vertex.","Current time":"Current time","Return the covered length from the top-left vertex or the bottom-right one.":"Return the covered length from the top-left vertex or the bottom-right one.","Half Current length":"Half Current length","Return the displacement on the X axis from the top-left vertex.":"Return the displacement on the X axis from the top-left vertex.","Return the displacement on the Y axis from the top-left vertex.":"Return the displacement on the Y axis from the top-left vertex.","Rectangular flood fill":"Rectangular flood fill","Create objects as a grid to cover a rectangular area or an other object.":"Create objects as a grid to cover a rectangular area or an other object.","Create fill objects that cover the rectangular area of target objects.":"Create fill objects that cover the rectangular area of target objects.","Create objects to flood fill other objects":"Create objects to flood fill other objects","Create _PARAM2_ to cover _PARAM1_ with _PARAM3_ pixels between columns and _PARAM4_ pixels between rows on layer: _PARAM5_ at Z-order: _PARAM6_":"Create _PARAM2_ to cover _PARAM1_ with _PARAM3_ pixels between columns and _PARAM4_ pixels between rows on layer: _PARAM5_ at Z-order: _PARAM6_","Rectangular area that will be covered by fill objects":"Rectangular area that will be covered by fill objects","Fill object":"Fill object","Object that is created to cover the rectangular area of target objects":"Object that is created to cover the rectangular area of target objects","Space between columns (pixels)":"Space between columns (pixels)","Space between rows (pixels)":"Space between rows (pixels)","Z order":"Z order","Create multiple copies of an object.":"Create multiple copies of an object.","Create objects to flood fill a rectanglular area":"Create objects to flood fill a rectanglular area","Create _PARAM2_ columns and _PARAM3_ rows of _PARAM1_ with top-left corner at _PARAM4_ ; _PARAM5_ and _PARAM6_ pixels between columns and _PARAM7_ pixels between rows on layer: _PARAM8_ at Z-order: _PARAM9_":"Create _PARAM2_ columns and _PARAM3_ rows of _PARAM1_ with top-left corner at _PARAM4_ ; _PARAM5_ and _PARAM6_ pixels between columns and _PARAM7_ pixels between rows on layer: _PARAM8_ at Z-order: _PARAM9_","Number of columns (default: 1)":"Number of columns (default: 1)","Number of rows (default: 1)":"Number of rows (default: 1)","Top-left starting position (X) (default: 0)":"Top-left starting position (X) (default: 0)","Top-left starting position (Y) (default: 0)":"Top-left starting position (Y) (default: 0)","Amount of space between columns (default: 0)":"Amount of space between columns (default: 0)","Amount of space between rows (default: 0)":"Amount of space between rows (default: 0)","Regular Expressions":"Regular Expressions","Manipulates string with regular expressions.":"Manipulates string with regular expressions.","Checks if a string matches a regex pattern.":"Checks if a string matches a regex pattern.","String matches regex pattern":"String matches regex pattern","_PARAM3_ matches pattern _PARAM1_ (flags: _PARAM2_)":"_PARAM3_ matches pattern _PARAM1_ (flags: _PARAM2_)","The pattern to check for":"The pattern to check for","RegEx flags":"RegEx flags","The string to check for a pattern":"The string to check for a pattern","Split a string by each part of it that matches a regex pattern and stores each part into an array.":"Split a string by each part of it that matches a regex pattern and stores each part into an array.","Split a string into an array":"Split a string into an array","Split string _PARAM3_ into array _PARAM4_ by pattern _PARAM1_ (flags: _PARAM2_)":"Split string _PARAM3_ into array _PARAM4_ by pattern _PARAM1_ (flags: _PARAM2_)","The pattern to split by":"The pattern to split by","The string to split by the pattern":"The string to split by the pattern","The name of the variable to store the result in":"The name of the variable to store the result in","Builds an array containing all matches for a regex pattern.":"Builds an array containing all matches for a regex pattern.","Find all matches for a regex pattern":"Find all matches for a regex pattern","Store all matches of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"Store all matches of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)","Pattern":"Pattern","String":"String","Builds an array containing the first match for a regex pattern followed by the regex groups.":"Builds an array containing the first match for a regex pattern followed by the regex groups.","Find first match with groups for a regex pattern":"Find first match with groups for a regex pattern","Store first match and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"Store first match and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)","Flags":"Flags","Variable name":"Variable name","Builds an array containing for each regex pattern match an array with the match followed by its regex groups.":"Builds an array containing for each regex pattern match an array with the match followed by its regex groups.","Find all matches with their groups for a regex pattern":"Find all matches with their groups for a regex pattern","Store all matches and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"Store all matches and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)","Replaces a part of a string that matches a regex pattern with another string.":"Replaces a part of a string that matches a regex pattern with another string.","Replace pattern matches with a string":"Replace pattern matches with a string","Execute _PARAM1_ with the following _PARAM2_ for a match in _PARAM3_, and store the result in _PARAM4_":"Execute _PARAM1_ with the following _PARAM2_ for a match in _PARAM3_, and store the result in _PARAM4_","The string to search for pattern matches in":"The string to search for pattern matches in","The string to replace the matching patterns with":"The string to replace the matching patterns with","Finds a regex pattern in a string, and returns the index of the position of the match, or -1 if it doesn't match the pattern.":"Finds a regex pattern in a string, and returns the index of the position of the match, or -1 if it doesn't match the pattern.","Find a pattern":"Find a pattern","Sprite Snapshot":"Sprite Snapshot","Capture objects, layers, or scene areas as images into sprite textures.":"Capture objects, layers, or scene areas as images into sprite textures.","Renders an object and puts the rendered image into a sprite object.":"Renders an object and puts the rendered image into a sprite object.","Render an object into a sprite":"Render an object into a sprite","Render _PARAM1_ into sprite _PARAM2_":"Render _PARAM1_ into sprite _PARAM2_","The object to render":"The object to render","The sprite to render to":"The sprite to render to","Renders a layer and puts the rendered image into a sprite object.":"Renders a layer and puts the rendered image into a sprite object.","Render a layer into a sprite":"Render a layer into a sprite","Render layer _PARAM1_ into sprite _PARAM2_":"Render layer _PARAM1_ into sprite _PARAM2_","The layer to render":"The layer to render","Renders a scene and puts the rendered image into a sprite object.":"Renders a scene and puts the rendered image into a sprite object.","Render a scene into a sprite":"Render a scene into a sprite","Render the current scene into sprite _PARAM1_":"Render the current scene into sprite _PARAM1_","Renders a defined area of a scene and puts the rendered image into a sprite object.":"Renders a defined area of a scene and puts the rendered image into a sprite object.","Render an area of a scene into a sprite":"Render an area of a scene into a sprite","Render the area of a current scene into Sprite: _PARAM1_, from OriginX: _PARAM2_, OriginY: _PARAM3_, with Width: _PARAM4_, Height: _PARAM5_":"Render the area of a current scene into Sprite: _PARAM1_, from OriginX: _PARAM2_, OriginY: _PARAM3_, with Width: _PARAM4_, Height: _PARAM5_","Origin X position of the render area":"Origin X position of the render area","Origin Y Position of the render area":"Origin Y Position of the render area","Width of the are to render":"Width of the are to render","Height of the area to render":"Height of the area to render","Repeat every X seconds":"Repeat every X seconds","Trigger an action repeatedly at a configurable time interval in seconds.":"Trigger an action repeatedly at a configurable time interval in seconds.","Triggers every X seconds.":"Triggers every X seconds.","Repeat with a scene timer":"Repeat with a scene timer","Repeat every _PARAM2_ seconds using timer _PARAM1_":"Repeat every _PARAM2_ seconds using timer _PARAM1_","Timer name used to loop":"Timer name used to loop","Duration in seconds between each repetition":"Duration in seconds between each repetition","the number of times the timer has repeated.":"the number of times the timer has repeated.","Repetition number of a scene timer":"Repetition number of a scene timer","Repetition number of timer _PARAM1_":"Repetition number of timer _PARAM1_","Triggers every X seconds X amount of times.":"Triggers every X seconds X amount of times.","Repeat with a scene timer X times":"Repeat with a scene timer X times","Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_":"Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_","The limit of loops":"The limit of loops","Maximum nuber of repetition (-1 to repeat forever).":"Maximum nuber of repetition (-1 to repeat forever).","Reset repetition count of a scene timer.":"Reset repetition count of a scene timer.","Reset repetition count of a scene timer":"Reset repetition count of a scene timer","Reset repetition count for timer _PARAM1_":"Reset repetition count for timer _PARAM1_","Allows to repeat an object timer every X seconds.":"Allows to repeat an object timer every X seconds.","The name of the timer to repeat":"The name of the timer to repeat","The time between each trigger (in seconds)":"The time between each trigger (in seconds)","How many times should the timer trigger? -1 for forever.":"How many times should the timer trigger? -1 for forever.","An internal counter":"An internal counter","Repeat with an object timer":"Repeat with an object timer","Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_":"Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_","Repetition number of an object timer":"Repetition number of an object timer","Repetition number of timer _PARAM2_":"Repetition number of timer _PARAM2_","Repeat with an object timer X times":"Repeat with an object timer X times","Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_":"Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_","Reset repetition count of an object timer.":"Reset repetition count of an object timer.","Reset repetition count of an object timer":"Reset repetition count of an object timer","Reset repetition count for timer _PARAM2_ of _PARAM0_":"Reset repetition count for timer _PARAM2_ of _PARAM0_","Triggers every X seconds, where X is defined in the behavior properties.":"Triggers every X seconds, where X is defined in the behavior properties.","Repeat every X seconds (deprecated)":"Repeat every X seconds (deprecated)","Recurring timer _PARAM1_ of _PARAM0_ has triggered":"Recurring timer _PARAM1_ of _PARAM0_ has triggered","Pauses a recurring timer.":"Pauses a recurring timer.","Pause a recurring timer (deprecated)":"Pause a recurring timer (deprecated)","Pause recurring timer _PARAM1_ of _PARAM0_":"Pause recurring timer _PARAM1_ of _PARAM0_","Resumes a paused recurring timer.":"Resumes a paused recurring timer.","Resume a recurring timer (deprecated)":"Resume a recurring timer (deprecated)","Resume recurring timer _PARAM1_ of _PARAM0_":"Resume recurring timer _PARAM1_ of _PARAM0_","Allows to trigger the recurring timer X times again.":"Allows to trigger the recurring timer X times again.","Reset the limit (deprecated)":"Reset the limit (deprecated)","Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again":"Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again","Rolling counter":"Rolling counter","Smoothly change a counter value in a text object.":"Smoothly change a counter value in a text object.","Smoothly changes a counter value in a text object.":"Smoothly changes a counter value in a text object.","Animation duration":"Animation duration","Increment":"Increment","the value of the counter.":"the value of the counter.","Counter value":"Counter value","the counter value":"the counter value","Directly display the counter value without playing the animation.":"Directly display the counter value without playing the animation.","Jump to the counter animation end":"Jump to the counter animation end","Jump to the counter animation end of _PARAM0_":"Jump to the counter animation end of _PARAM0_","Room-based camera movement":"Room-based camera movement","Move/zoom camera to frame the room object containing the player.":"Move/zoom camera to frame the room object containing the player.","Move and zoom camera to the room object that contains the trigger object (usually the player).":"Move and zoom camera to the room object that contains the trigger object (usually the player).","Move and zoom camera to the room object that contains the trigger object (player)":"Move and zoom camera to the room object that contains the trigger object (player)","Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)":"Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)","Room object":"Room object","Room objects are used to mark areas that should be seen by the camera.":"Room objects are used to mark areas that should be seen by the camera.","Trigger object (player)":"Trigger object (player)","When the Trigger Object touches a new Room Object, the camera will move to the new room":"When the Trigger Object touches a new Room Object, the camera will move to the new room","Lerp speed":"Lerp speed","Range: 0 to 1":"Range: 0 to 1","Maximum zoom":"Maximum zoom","Minimum zoom":"Minimum zoom","Outside buffer (pixels)":"Outside buffer (pixels)","Minimum extra space displayed around each side the room":"Minimum extra space displayed around each side the room","Check if trigger object (usually the player) has entered a new room on this frame.":"Check if trigger object (usually the player) has entered a new room on this frame.","Check if trigger object (player) has entered a new room":"Check if trigger object (player) has entered a new room","_PARAM1_ has just entered a new room":"_PARAM1_ has just entered a new room","Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).":"Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).","Check if camera is zooming":"Check if camera is zooming","Camera is zooming":"Camera is zooming","Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).":"Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).","Check if camera is moving":"Check if camera is moving","Camera is moving":"Camera is moving","Animated score counter":"Animated score counter","Animated score counter with an icon.":"Animated score counter with an icon.","Shake objects with translation, rotation and scale.":"Shake objects with translation, rotation and scale.","Shake object (position, angle, scale)":"Shake object (position, angle, scale)","Shake an object, using one or more ways to shake (position, angle, scale). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"Shake an object, using one or more ways to shake (position, angle, scale). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_":"Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_","Duration of shake (in seconds) (Default: 0.5)":"Duration of shake (in seconds) (Default: 0.5)","Amplitude of postion shake in X direction (in pixels) (For example: 5)":"Amplitude of postion shake in X direction (in pixels) (For example: 5)","Amplitude of position shake in Y direction (in pixels) (For example: 5)":"Amplitude of position shake in Y direction (in pixels) (For example: 5)","Use a negative number to make the single-shake move in the opposite direction.":"Use a negative number to make the single-shake move in the opposite direction.","Amplitude of angle rotation shake (in degrees) (For example: 5)":"Amplitude of angle rotation shake (in degrees) (For example: 5)","Amplitude of scale shake (in percent change) (For example: 5)":"Amplitude of scale shake (in percent change) (For example: 5)","Amount of time between shakes (in seconds) (Default: 0.08)":"Amount of time between shakes (in seconds) (Default: 0.08)","For a single-shake effect, set it to the same value as \"Duration\".":"For a single-shake effect, set it to the same value as \"Duration\".","Stop shaking an object.":"Stop shaking an object.","Stop shaking an object":"Stop shaking an object","Stop shaking _PARAM0_":"Stop shaking _PARAM0_","Check if an object is shaking.":"Check if an object is shaking.","Check if an object is shaking":"Check if an object is shaking","_PARAM0_ is shaking":"_PARAM0_ is shaking","Default score":"Default score","Increasing score sound":"Increasing score sound","Sound":"Sound","Min baseline pitch":"Min baseline pitch","Max baseline pitch":"Max baseline pitch","Pitch factor":"Pitch factor","Pitch reset timeout":"Pitch reset timeout","Current pitch":"Current pitch","the score of the object.":"the score of the object.","Reset the pitch to the baseline value.":"Reset the pitch to the baseline value.","Reset pitch":"Reset pitch","Reset the pitch of _PARAM0_":"Reset the pitch of _PARAM0_","Screen wrap":"Screen wrap","Teleport objects to opposite screen edge when exiting viewport.":"Teleport objects to opposite screen edge when exiting viewport.","Teleport the object when leaving one side of the screen so that it immediately reappears on the opposite side, maintaining speed and trajectory.":"Teleport the object when leaving one side of the screen so that it immediately reappears on the opposite side, maintaining speed and trajectory.","Screen Wrap":"Screen Wrap","Horizontal wrapping":"Horizontal wrapping","Vertical wrapping":"Vertical wrapping","Top border of wrapped area (Y)":"Top border of wrapped area (Y)","Left border of wrapped area (X)":"Left border of wrapped area (X)","Right border of wrapped area (X)":"Right border of wrapped area (X)","If blank, the value will be the scene width.":"If blank, the value will be the scene width.","Bottom border of wrapped area (Y)":"Bottom border of wrapped area (Y)","If blank, the value will be scene height.":"If blank, the value will be scene height.","Number of pixels past the center where the object teleports and appears":"Number of pixels past the center where the object teleports and appears","Check if the object is wrapping on the left and right borders.":"Check if the object is wrapping on the left and right borders.","Is horizontal wrapping":"Is horizontal wrapping","_PARAM0_ is horizontal wrapping":"_PARAM0_ is horizontal wrapping","Check if the object is wrapping on the top and bottom borders.":"Check if the object is wrapping on the top and bottom borders.","Is vertical wrapping":"Is vertical wrapping","_PARAM0_ is vertical wrapping":"_PARAM0_ is vertical wrapping","Enable wrapping on the left and right borders.":"Enable wrapping on the left and right borders.","Enable horizontal wrapping":"Enable horizontal wrapping","Enable _PARAM0_ horizontal wrapping: _PARAM2_":"Enable _PARAM0_ horizontal wrapping: _PARAM2_","Enable wrapping on the top and bottom borders.":"Enable wrapping on the top and bottom borders.","Enable vertical wrapping":"Enable vertical wrapping","Enable _PARAM0_ vertical wrapping: _PARAM2_":"Enable _PARAM0_ vertical wrapping: _PARAM2_","Top border (Y position).":"Top border (Y position).","Top border":"Top border","Left border (X position).":"Left border (X position).","Left border":"Left border","Right border (X position).":"Right border (X position).","Right border":"Right border","Bottom border (Y position).":"Bottom border (Y position).","Bottom border":"Bottom border","Number of pixels past the center where the object teleports and appears.":"Number of pixels past the center where the object teleports and appears.","Trigger offset":"Trigger offset","Set top border (Y position).":"Set top border (Y position).","Set top border":"Set top border","Set _PARAM0_ top border to _PARAM2_":"Set _PARAM0_ top border to _PARAM2_","Top border value":"Top border value","Set left border (X position).":"Set left border (X position).","Set left border":"Set left border","Set _PARAM0_ left border to _PARAM2_":"Set _PARAM0_ left border to _PARAM2_","Left border value":"Left border value","Set bottom border (Y position).":"Set bottom border (Y position).","Set bottom border":"Set bottom border","Set _PARAM0_ bottom border to _PARAM2_":"Set _PARAM0_ bottom border to _PARAM2_","Bottom border value":"Bottom border value","Set right border (X position).":"Set right border (X position).","Set right border":"Set right border","Set _PARAM0_ right border to _PARAM2_":"Set _PARAM0_ right border to _PARAM2_","Right border value":"Right border value","Set trigger offset (pixels).":"Set trigger offset (pixels).","Set trigger offset":"Set trigger offset","Set _PARAM0_ trigger offset to _PARAM2_ pixels":"Set _PARAM0_ trigger offset to _PARAM2_ pixels","SetScreen Offset Leaving Value":"SetScreen Offset Leaving Value","Screen Wrap (physics objects)":"Screen Wrap (physics objects)","Angular Velocity":"Angular Velocity","Linear Velocity X":"Linear Velocity X","Linear Velocity Y":"Linear Velocity Y","Save current velocity values.":"Save current velocity values.","Save current velocity values":"Save current velocity values","Save current velocity values of _PARAM0_":"Save current velocity values of _PARAM0_","Apply saved velocity values.":"Apply saved velocity values.","Apply saved velocity values":"Apply saved velocity values","Apply saved velocity values of _PARAM0_":"Apply saved velocity values of _PARAM0_","Animate Shadow Clones":"Animate Shadow Clones","Create fading shadow clone trail.":"Create fading shadow clone trail.","Select the primary object, the shadow clone object, the number of shadow clones, the number of frames between shadow clones, the rate that shadow clones will fade away (if desired), the Z-value of the shadow clones, and the layer the shadow clones will be created on.":"Select the primary object, the shadow clone object, the number of shadow clones, the number of frames between shadow clones, the rate that shadow clones will fade away (if desired), the Z-value of the shadow clones, and the layer the shadow clones will be created on.","Animate shadow clones that follow the path of a primary object":"Animate shadow clones that follow the path of a primary object","Create and animate _PARAM3_ copies of _PARAM2_ that follow the position of _PARAM1_, with _PARAM4_ empty frames between shadow clones, and fading the opacity of shadow clones by _PARAM5_ per clone. Shrink scale of shadow clones by _PARAM6_ per clone. Shadow clones will be created on _PARAM7_ layer with a Z-value of _PARAM8_. Match X scale: _PARAM9_ Match Y scale: _PARAM10_ Match angle: _PARAM11_ Match animation: _PARAM12_ Match animation frame: _PARAM13_ Match vertical flip: _PARAM14_ Match horizontal flip: _PARAM15_":"Create and animate _PARAM3_ copies of _PARAM2_ that follow the position of _PARAM1_, with _PARAM4_ empty frames between shadow clones, and fading the opacity of shadow clones by _PARAM5_ per clone. Shrink scale of shadow clones by _PARAM6_ per clone. Shadow clones will be created on _PARAM7_ layer with a Z-value of _PARAM8_. Match X scale: _PARAM9_ Match Y scale: _PARAM10_ Match angle: _PARAM11_ Match animation: _PARAM12_ Match animation frame: _PARAM13_ Match vertical flip: _PARAM14_ Match horizontal flip: _PARAM15_","Object that shadow clones will follow":"Object that shadow clones will follow","Shadows clones will be made of this object (Cannot be the same object used for primary object)":"Shadows clones will be made of this object (Cannot be the same object used for primary object)","Number of shadow clones (Default: 1)":"Number of shadow clones (Default: 1)","Number of empty frames between shadow clones (Default: 1)":"Number of empty frames between shadow clones (Default: 1)","Fade speed (Range: 0 to 255) (Default: 0)":"Fade speed (Range: 0 to 255) (Default: 0)","Decrease in opacity for each consecutive shadow clone":"Decrease in opacity for each consecutive shadow clone","Shrink speed (Range: 0 to 100) (Default: 0)":"Shrink speed (Range: 0 to 100) (Default: 0)","Decrease in scale for each consecutive shadow clone":"Decrease in scale for each consecutive shadow clone","Shadow clones will be created on this layer. (Default: \"\") (Base Layer)":"Shadow clones will be created on this layer. (Default: \"\") (Base Layer)","Z value for created shadow clones":"Z value for created shadow clones","Match X scale of primary object:":"Match X scale of primary object:","Match Y scale of primary object:":"Match Y scale of primary object:","Match angle of primary object:":"Match angle of primary object:","Match animation of primary object:":"Match animation of primary object:","Match animation frame of primary object:":"Match animation frame of primary object:","Match the vertical flip of primary object:":"Match the vertical flip of primary object:","Match the horizontal flip of primary object:":"Match the horizontal flip of primary object:","Delete shadow clone objects that are linked to a primary object.":"Delete shadow clone objects that are linked to a primary object.","Delete shadow clone objects that are linked to a primary object":"Delete shadow clone objects that are linked to a primary object","Primary object":"Primary object","Shadow clones":"Shadow clones","Shake object":"Shake object","Shake objects with configurable translation, rotation, and scale intensity.":"Shake objects with configurable translation, rotation, and scale intensity.","Shake objects with translation and rotation.":"Shake objects with translation and rotation.","Shake object (position, angle)":"Shake object (position, angle)","Shake an object, using one or more ways to shake (position, angle). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"Shake an object, using one or more ways to shake (position, angle). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_":"Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_","Stop any shaking of object that was initiated by the Shake Object extension.":"Stop any shaking of object that was initiated by the Shake Object extension.","Stop shaking the object":"Stop shaking the object","3D object shake":"3D object shake","Shake 3D objects.":"Shake 3D objects.","Shake 3D objects with translation and rotation.":"Shake 3D objects with translation and rotation.","3D shake":"3D shake","Translation amplitude on X axis":"Translation amplitude on X axis","Translation amplitude on Y axis":"Translation amplitude on Y axis","Translation amplitude on Z axis":"Translation amplitude on Z axis","Rotation amplitude around X axis":"Rotation amplitude around X axis","Rotation amplitude around Y axis":"Rotation amplitude around Y axis","Rotation amplitude around Z axis":"Rotation amplitude around Z axis","Start to shake at the object creation":"Start to shake at the object creation","Shake the object with a linear easing at the start and the end.":"Shake the object with a linear easing at the start and the end.","Shake":"Shake","Shake _PARAM0_ for _PARAM2_ seconds with _PARAM3_ seconds of easing to start and _PARAM4_ seconds to stop":"Shake _PARAM0_ for _PARAM2_ seconds with _PARAM3_ seconds of easing to start and _PARAM4_ seconds to stop","Shake the object with a linear easing at the start and keep shaking until the stop action is used.":"Shake the object with a linear easing at the start and keep shaking until the stop action is used.","Start shaking":"Start shaking","Start shaking _PARAM0_ with _PARAM2_ seconds of easing":"Start shaking _PARAM0_ with _PARAM2_ seconds of easing","Stop shaking the object with a linear easing.":"Stop shaking the object with a linear easing.","Stop shaking":"Stop shaking","Stop shaking _PARAM0_ with _PARAM2_ seconds of easing":"Stop shaking _PARAM0_ with _PARAM2_ seconds of easing","Check if the object is shaking.":"Check if the object is shaking.","Is shaking":"Is shaking","Check if the object is stopping to shake.":"Check if the object is stopping to shake.","Is stopping to shake":"Is stopping to shake","_PARAM0_ is stopping to shake":"_PARAM0_ is stopping to shake","the shaking frequency of the object.":"the shaking frequency of the object.","Shaking frequency":"Shaking frequency","the shaking frequency":"the shaking frequency","Return the easing factor according to start properties.":"Return the easing factor according to start properties.","Start easing factor":"Start easing factor","Return the easing factor according to stop properties.":"Return the easing factor according to stop properties.","Stop easing factor":"Stop easing factor","stop easing factor":"stop easing factor","Share dialog and sharing options":"Share dialog and sharing options","Share text/URL via system share dialog. Mobile browsers and apps only.":"Share text/URL via system share dialog. Mobile browsers and apps only.","Share a link or text via another app using the system share dialog.":"Share a link or text via another app using the system share dialog.","Share text: _PARAM1_ and url: _PARAM2_ with title _PARAM3_":"Share text: _PARAM1_ and url: _PARAM2_ with title _PARAM3_","Text to share":"Text to share","Url to share":"Url to share","Title to show in the Share dialog":"Title to show in the Share dialog","Check if the browser/operating system of the device supports sharing. Sharing is typically not supported on desktop browsers or desktop apps.":"Check if the browser/operating system of the device supports sharing. Sharing is typically not supported on desktop browsers or desktop apps.","Sharing is supported":"Sharing is supported","The browser or system supports sharing":"The browser or system supports sharing","the result of the last share dialog.":"the result of the last share dialog.","Result of the last share dialog":"Result of the last share dialog","the result of the last share dialog":"the result of the last share dialog","Shock wave effect":"Shock wave effect","Draw expanding shock wave effect.":"Draw expanding shock wave effect.","Draw ellipse shock waves.":"Draw ellipse shock waves.","Ellipse shock wave":"Ellipse shock wave","Start width":"Start width","Start height":"Start height","Start outline thickness":"Start outline thickness","Outline":"Outline","Start angle":"Start angle","End width":"End width","End height":"End height","End outline thickness":"End outline thickness","End angle":"End angle","Timing":"Timing","Fill the shape":"Fill the shape","the start width of the object.":"the start width of the object.","the start width":"the start width","the start height of the object.":"the start height of the object.","the start height":"the start height","the start outline of the object.":"the start outline of the object.","the start outline":"the start outline","the start angle of the object.":"the start angle of the object.","the start angle":"the start angle","the end width of the object.":"the end width of the object.","the end width":"the end width","the end height of the object.":"the end height of the object.","the end height":"the end height","the end outline thickness of the object.":"the end outline thickness of the object.","the end outline thickness":"the end outline thickness","the end Color of the object.":"the end Color of the object.","End Color":"End Color","the end Color":"the end Color","the end Opacity of the object.":"the end Opacity of the object.","End Opacity":"End Opacity","the end Opacity":"the end Opacity","the end angle of the object.":"the end angle of the object.","the end angle":"the end angle","the duration of the animation.":"the duration of the animation.","the duration":"the duration","the easing of the animation.":"the easing of the animation.","the easing":"the easing","Check if the shape is filled.":"Check if the shape is filled.","Shape filled":"Shape filled","The shape of _PARAM0_ is filled":"The shape of _PARAM0_ is filled","Enable or disable the filling of the shape.":"Enable or disable the filling of the shape.","Enable filling":"Enable filling","Enable filling of _PARAM0_ : _PARAM2_":"Enable filling of _PARAM0_ : _PARAM2_","IsFilled":"IsFilled","Draw star shock waves.":"Draw star shock waves.","Star shock waves":"Star shock waves","Start radius":"Start radius","Start Inner radius":"Start Inner radius","Shape":"Shape","End radius":"End radius","End inner radius":"End inner radius","Number of points":"Number of points","the start radius of the object.":"the start radius of the object.","the start radius":"the start radius","the start inner radius of the object.":"the start inner radius of the object.","Start inner radius":"Start inner radius","the start inner radius":"the start inner radius","the start outline thickness of the object.":"the start outline thickness of the object.","the start outline thickness":"the start outline thickness","the end radius of the object.":"the end radius of the object.","the end radius":"the end radius","the end inner radius of the object.":"the end inner radius of the object.","the end inner radius":"the end inner radius","IsFilling":"IsFilling","the number of points of the star.":"the number of points of the star.","the number of points":"the number of points","Smooth Camera":"Smooth Camera","Smoothly scroll to follow an object.":"Smoothly scroll to follow an object.","Leftward catch-up speed (in ratio per second)":"Leftward catch-up speed (in ratio per second)","Catch-up speed":"Catch-up speed","Rightward catch-up speed (in ratio per second)":"Rightward catch-up speed (in ratio per second)","Upward catch-up speed (in ratio per second)":"Upward catch-up speed (in ratio per second)","Downward catch-up speed (in ratio per second)":"Downward catch-up speed (in ratio per second)","Follow on X axis":"Follow on X axis","Follow on Y axis":"Follow on Y axis","Follow free area left border":"Follow free area left border","Follow free area right border":"Follow free area right border","Follow free area top border":"Follow free area top border","Follow free area bottom border":"Follow free area bottom border","Camera offset X":"Camera offset X","Camera offset Y":"Camera offset Y","Camera delay":"Camera delay","Forecast time":"Forecast time","Forecast history duration":"Forecast history duration","Index (local variable)":"Index (local variable)","Leftward maximum speed":"Leftward maximum speed","Rightward maximum speed":"Rightward maximum speed","Upward maximum speed":"Upward maximum speed","Downward maximum speed":"Downward maximum speed","OldX (local variable)":"OldX (local variable)","OldY (local variable)":"OldY (local variable)","Move the camera closer to the object. This action must be called after the object has moved for the frame.":"Move the camera closer to the object. This action must be called after the object has moved for the frame.","Move the camera closer":"Move the camera closer","Move the camera closer to _PARAM0_":"Move the camera closer to _PARAM0_","Move the camera closer to the object.":"Move the camera closer to the object.","Do move the camera closer":"Do move the camera closer","Do move the camera closer _PARAM0_":"Do move the camera closer _PARAM0_","Delay the camera according to a maximum speed and catch up the delay.":"Delay the camera according to a maximum speed and catch up the delay.","Wait and catch up":"Wait and catch up","Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds":"Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds","Waiting duration (in seconds)":"Waiting duration (in seconds)","Waiting maximum camera target speed X":"Waiting maximum camera target speed X","Waiting maximum camera target speed Y":"Waiting maximum camera target speed Y","Catch up duration (in seconds)":"Catch up duration (in seconds)","Draw the targeted and actual camera position.":"Draw the targeted and actual camera position.","Draw debug":"Draw debug","Draw targeted and actual camera position for _PARAM0_ on _PARAM2_":"Draw targeted and actual camera position for _PARAM0_ on _PARAM2_","Enable or disable the following on X axis.":"Enable or disable the following on X axis.","Follow on X":"Follow on X","The camera follows _PARAM0_ on X axis: _PARAM2_":"The camera follows _PARAM0_ on X axis: _PARAM2_","Enable or disable the following on Y axis.":"Enable or disable the following on Y axis.","Follow on Y":"Follow on Y","The camera follows _PARAM0_ on Y axis: _PARAM2_":"The camera follows _PARAM0_ on Y axis: _PARAM2_","Change the camera follow free area right border.":"Change the camera follow free area right border.","Change the camera follow free area right border of _PARAM0_: _PARAM2_":"Change the camera follow free area right border of _PARAM0_: _PARAM2_","Change the camera follow free area left border.":"Change the camera follow free area left border.","Change the camera follow free area left border of _PARAM0_: _PARAM2_":"Change the camera follow free area left border of _PARAM0_: _PARAM2_","Change the camera follow free area top border.":"Change the camera follow free area top border.","Change the camera follow free area top border of _PARAM0_: _PARAM2_":"Change the camera follow free area top border of _PARAM0_: _PARAM2_","Change the camera follow free area bottom border.":"Change the camera follow free area bottom border.","Change the camera follow free area bottom border of _PARAM0_: _PARAM2_":"Change the camera follow free area bottom border of _PARAM0_: _PARAM2_","Change the camera leftward maximum speed (in pixels per second).":"Change the camera leftward maximum speed (in pixels per second).","Change the camera leftward maximum speed of _PARAM0_: _PARAM2_":"Change the camera leftward maximum speed of _PARAM0_: _PARAM2_","Leftward maximum speed (in pixels per second)":"Leftward maximum speed (in pixels per second)","Change the camera rightward maximum speed (in pixels per second).":"Change the camera rightward maximum speed (in pixels per second).","Change the camera rightward maximum speed of _PARAM0_: _PARAM2_":"Change the camera rightward maximum speed of _PARAM0_: _PARAM2_","Rightward maximum speed (in pixels per second)":"Rightward maximum speed (in pixels per second)","Change the camera upward maximum speed (in pixels per second).":"Change the camera upward maximum speed (in pixels per second).","Change the camera upward maximum speed of _PARAM0_: _PARAM2_":"Change the camera upward maximum speed of _PARAM0_: _PARAM2_","Upward maximum speed (in pixels per second)":"Upward maximum speed (in pixels per second)","Change the camera downward maximum speed (in pixels per second).":"Change the camera downward maximum speed (in pixels per second).","Change the camera downward maximum speed of _PARAM0_: _PARAM2_":"Change the camera downward maximum speed of _PARAM0_: _PARAM2_","Downward maximum speed (in pixels per second)":"Downward maximum speed (in pixels per second)","Change the camera leftward catch-up speed (in ratio per second).":"Change the camera leftward catch-up speed (in ratio per second).","Leftward catch-up speed":"Leftward catch-up speed","Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_":"Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_","Change the camera rightward catch-up speed (in ratio per second).":"Change the camera rightward catch-up speed (in ratio per second).","Rightward catch-up speed":"Rightward catch-up speed","Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_":"Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_","Change the camera downward catch-up speed (in ratio per second).":"Change the camera downward catch-up speed (in ratio per second).","Downward catch-up speed":"Downward catch-up speed","Change the camera downward catch-up speed of _PARAM0_: _PARAM2_":"Change the camera downward catch-up speed of _PARAM0_: _PARAM2_","Change the camera upward catch-up speed (in ratio per second).":"Change the camera upward catch-up speed (in ratio per second).","Upward catch-up speed":"Upward catch-up speed","Change the camera upward catch-up speed of _PARAM0_: _PARAM2_":"Change the camera upward catch-up speed of _PARAM0_: _PARAM2_","the camera offset on X axis of the object. This is not the current difference between the object and the camera position.":"the camera offset on X axis of the object. This is not the current difference between the object and the camera position.","the camera offset on X axis":"the camera offset on X axis","Change the camera offset on X axis of an object.":"Change the camera offset on X axis of an object.","Camera Offset X":"Camera Offset X","Change the camera offset on X axis of _PARAM0_: _PARAM2_":"Change the camera offset on X axis of _PARAM0_: _PARAM2_","the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.":"the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.","the camera offset on Y axis":"the camera offset on Y axis","Change the camera offset on Y axis of an object.":"Change the camera offset on Y axis of an object.","Camera Offset Y":"Camera Offset Y","Change the camera offset on Y axis of _PARAM0_: _PARAM2_":"Change the camera offset on Y axis of _PARAM0_: _PARAM2_","Change the camera forecast time (in seconds).":"Change the camera forecast time (in seconds).","Change the camera forecast time of _PARAM0_: _PARAM2_":"Change the camera forecast time of _PARAM0_: _PARAM2_","Change the camera delay (in seconds).":"Change the camera delay (in seconds).","Change the camera delay of _PARAM0_: _PARAM2_":"Change the camera delay of _PARAM0_: _PARAM2_","Return follow free area left border X.":"Return follow free area left border X.","Free area left":"Free area left","Return follow free area right border X.":"Return follow free area right border X.","Free area right":"Free area right","Return follow free area bottom border Y.":"Return follow free area bottom border Y.","Free area bottom":"Free area bottom","Return follow free area top border Y.":"Return follow free area top border Y.","Free area top":"Free area top","Update delayed position and delayed history. This is called in doStepPreEvents.":"Update delayed position and delayed history. This is called in doStepPreEvents.","Update delayed position":"Update delayed position","Update delayed position and delayed history of _PARAM0_":"Update delayed position and delayed history of _PARAM0_","Check if the camera following target is delayed from the object.":"Check if the camera following target is delayed from the object.","Camera is delayed":"Camera is delayed","The camera of _PARAM0_ is delayed":"The camera of _PARAM0_ is delayed","Return the current camera delay.":"Return the current camera delay.","Current delay":"Current delay","Check if the camera following is waiting at a reduced speed.":"Check if the camera following is waiting at a reduced speed.","Camera is waiting":"Camera is waiting","The camera of _PARAM0_ is waiting":"The camera of _PARAM0_ is waiting","Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.":"Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.","Add forecast history position":"Add forecast history position","Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_":"Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_","Object X":"Object X","Object Y":"Object Y","Update forecasted position. This is called in doStepPreEvents.":"Update forecasted position. This is called in doStepPreEvents.","Update forecasted position":"Update forecasted position","Update forecasted position of _PARAM0_":"Update forecasted position of _PARAM0_","Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.":"Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.","Project history ends":"Project history ends","Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_":"Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_","OldestX":"OldestX","OldestY":"OldestY","Newest X":"Newest X","Newest Y":"Newest Y","Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.":"Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.","Forecast time ratio":"Forecast time ratio","Smoothly scroll to follow a character and stabilize the camera when jumping.":"Smoothly scroll to follow a character and stabilize the camera when jumping.","Smooth platformer camera":"Smooth platformer camera","Smooth camera behavior":"Smooth camera behavior","Follow free area top in the air":"Follow free area top in the air","Follow free area bottom in the air":"Follow free area bottom in the air","Follow free area top on the floor":"Follow free area top on the floor","Follow free area bottom on the floor":"Follow free area bottom on the floor","Upward speed in the air (in ratio per second)":"Upward speed in the air (in ratio per second)","Downward speed in the air (in ratio per second)":"Downward speed in the air (in ratio per second)","Upward speed on the floor (in ratio per second)":"Upward speed on the floor (in ratio per second)","Downward speed on the floor (in ratio per second)":"Downward speed on the floor (in ratio per second)","Upward maximum speed in the air":"Upward maximum speed in the air","Downward maximum speed in the air":"Downward maximum speed in the air","Upward maximum speed on the floor":"Upward maximum speed on the floor","Downward maximum speed on the floor":"Downward maximum speed on the floor","Rectangular 2D grid":"Rectangular 2D grid","Snap objects on a virtual grid.":"Snap objects on a virtual grid.","Snap object to a virtual grid (i.e: this is not the grid used in the editor).":"Snap object to a virtual grid (i.e: this is not the grid used in the editor).","Snap objects to a virtual grid":"Snap objects to a virtual grid","Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","Speed restrictions":"Speed restrictions","Limit max movement and rotation speed for forces-based or Physics 2D.":"Limit max movement and rotation speed for forces-based or Physics 2D.","Limit the maximum speed an object will move from (non-physics) forces.":"Limit the maximum speed an object will move from (non-physics) forces.","Enforce max movement speed":"Enforce max movement speed","Limit the maximum speed an object will move from physics forces.":"Limit the maximum speed an object will move from physics forces.","Enforce max movement speed (physics)":"Enforce max movement speed (physics)","Limit the maximum rotation speed of an object from physics forces.":"Limit the maximum rotation speed of an object from physics forces.","Enforce max rotation speed (physics)":"Enforce max rotation speed (physics)","Object Masking":"Object Masking","Mask objects using a sprite or a Shape Painter.":"Mask objects using a sprite or a Shape Painter.","Define a sprite as a mask of an object.":"Define a sprite as a mask of an object.","Mask an object with a sprite":"Mask an object with a sprite","Sprite object to use as a mask":"Sprite object to use as a mask","Remove the mask of the specified object.":"Remove the mask of the specified object.","Remove the mask":"Remove the mask","Remove the mask of _PARAM1_":"Remove the mask of _PARAM1_","Object with a mask to remove":"Object with a mask to remove","Multitouch joystick and buttons (sprite)":"Multitouch joystick and buttons (sprite)","On-screen multitouch joystick and buttons.":"On-screen multitouch joystick and buttons.","Check if a button was just pressed on a multitouch controller.":"Check if a button was just pressed on a multitouch controller.","Multitouch controller button just pressed":"Multitouch controller button just pressed","Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed":"Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed","Multitouch controller identifier (1, 2, 3, 4...)":"Multitouch controller identifier (1, 2, 3, 4...)","Button name":"Button name","Check if a button is pressed on a multitouch controller.":"Check if a button is pressed on a multitouch controller.","Multitouch controller button pressed":"Multitouch controller button pressed","Button _PARAM2_ of multitouch controller _PARAM1_ is pressed":"Button _PARAM2_ of multitouch controller _PARAM1_ is pressed","Check if a button is released on a multitouch controller.":"Check if a button is released on a multitouch controller.","Multitouch controller button released":"Multitouch controller button released","Button _PARAM2_ of multitouch controller _PARAM1_ is released":"Button _PARAM2_ of multitouch controller _PARAM1_ is released","Change a button state for a multitouch controller.":"Change a button state for a multitouch controller.","Button state":"Button state","Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_":"Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_","Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).","Dead zone radius":"Dead zone radius","Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_","Joystick name":"Joystick name","Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).","Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_":"Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_","the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).":"the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).","Angle to 4-way index":"Angle to 4-way index","The angle _PARAM1_ 4-way index":"The angle _PARAM1_ 4-way index","the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).":"the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).","Angle to 8-way index":"Angle to 8-way index","The angle _PARAM1_ 8-way index":"The angle _PARAM1_ 8-way index","Check if angle is in a given direction.":"Check if angle is in a given direction.","Angle 4-way direction":"Angle 4-way direction","The angle _PARAM1_ is the 4-way direction _PARAM2_":"The angle _PARAM1_ is the 4-way direction _PARAM2_","Angle 8-way direction":"Angle 8-way direction","The angle _PARAM1_ is the 8-way direction _PARAM2_":"The angle _PARAM1_ is the 8-way direction _PARAM2_","Check if joystick is pushed in a given direction.":"Check if joystick is pushed in a given direction.","Joystick pushed in a direction (4-way)":"Joystick pushed in a direction (4-way)","Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_":"Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_","Joystick pushed in a direction (8-way)":"Joystick pushed in a direction (8-way)","the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).","Joystick force (deprecated)":"Joystick force (deprecated)","Joystick _PARAM2_ of multitouch controller _PARAM1_ force":"Joystick _PARAM2_ of multitouch controller _PARAM1_ force","the force of multitouch contoller stick (from 0 to 1).":"the force of multitouch contoller stick (from 0 to 1).","multitouch controller _PARAM1_ _PARAM2_ stick force":"multitouch controller _PARAM1_ _PARAM2_ stick force","Stick name":"Stick name","Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).","Joystick force":"Joystick force","Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_","Return the angle the joystick is pointing towards (Range: -180 to 180).":"Return the angle the joystick is pointing towards (Range: -180 to 180).","Joystick angle (deprecated)":"Joystick angle (deprecated)","Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).":"Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).","Change the angle the joystick is pointing towards (Range: -180 to 180).":"Change the angle the joystick is pointing towards (Range: -180 to 180).","Joystick angle":"Joystick angle","Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_","Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).":"Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).","Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).":"Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).","Check if a new touch has started on the right or left side of the screen.":"Check if a new touch has started on the right or left side of the screen.","New touch on a screen side":"New touch on a screen side","A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer":"A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer","Multitouch joystick":"Multitouch joystick","Screen side":"Screen side","Joystick that can be controlled by interacting with a touchscreen.":"Joystick that can be controlled by interacting with a touchscreen.","Multitouch Joystick":"Multitouch Joystick","Dead zone radius (range: 0 to 1)":"Dead zone radius (range: 0 to 1)","The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)":"The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)","Joystick angle (range: -180 to 180)":"Joystick angle (range: -180 to 180)","Joystick force (range: 0 to 1)":"Joystick force (range: 0 to 1)","the joystick force (from 0 to 1).":"the joystick force (from 0 to 1).","the joystick force":"the joystick force","Change the joystick angle of _PARAM0_ to _PARAM2_":"Change the joystick angle of _PARAM0_ to _PARAM2_","Return the stick force on X axis (from -1 at the left to 1 at the right).":"Return the stick force on X axis (from -1 at the left to 1 at the right).","Return the stick force on Y axis (from -1 at the top to 1 at the bottom).":"Return the stick force on Y axis (from -1 at the top to 1 at the bottom).","Joystick pushed in a direction (4-way movement)":"Joystick pushed in a direction (4-way movement)","_PARAM0_ is pushed in direction _PARAM2_":"_PARAM0_ is pushed in direction _PARAM2_","Joystick pushed in a direction (8-way movement)":"Joystick pushed in a direction (8-way movement)","Check if a joystick is pressed.":"Check if a joystick is pressed.","Joystick pressed":"Joystick pressed","Joystick _PARAM0_ is pressed":"Joystick _PARAM0_ is pressed","Reset the joystick values (except for angle, which stays the same)":"Reset the joystick values (except for angle, which stays the same)","Reset":"Reset","Reset the joystick of _PARAM0_":"Reset the joystick of _PARAM0_","the multitouch controller identifier.":"the multitouch controller identifier.","Multitouch controller identifier":"Multitouch controller identifier","the multitouch controller identifier":"the multitouch controller identifier","the joystick name.":"the joystick name.","the joystick name":"the joystick name","the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).","the dead zone radius":"the dead zone radius","Force the joystick into the pressing state.":"Force the joystick into the pressing state.","Force start pressing":"Force start pressing","Force start pressing _PARAM0_ with touch identifier: _PARAM2_":"Force start pressing _PARAM0_ with touch identifier: _PARAM2_","Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.":"Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.","Multitouch button":"Multitouch button","Button identifier":"Button identifier","TouchID":"TouchID","Button released":"Button released","Button just pressed":"Button just pressed","Triggering circle radius":"Triggering circle radius","This circle adds up to the object collision mask.":"This circle adds up to the object collision mask.","Check if the button was just pressed.":"Check if the button was just pressed.","Button _PARAM0_ was just pressed":"Button _PARAM0_ was just pressed","Check if the button is pressed.":"Check if the button is pressed.","Button pressed":"Button pressed","Button _PARAM0_ is pressed":"Button _PARAM0_ is pressed","Check if the button is released.":"Check if the button is released.","Button _PARAM0_ is released":"Button _PARAM0_ is released","Mark the button _PARAM0_ as _PARAM2_":"Mark the button _PARAM0_ as _PARAM2_","Control a platformer character with a multitouch controller.":"Control a platformer character with a multitouch controller.","Platformer multitouch controller mapper":"Platformer multitouch controller mapper","Platform character behavior":"Platform character behavior","Controller identifier (1, 2, 3, 4...)":"Controller identifier (1, 2, 3, 4...)","Jump button name":"Jump button name","Control a 3D physics character with a multitouch controller.":"Control a 3D physics character with a multitouch controller.","3D platformer multitouch controller mapper":"3D platformer multitouch controller mapper","3D shooter multitouch controller mapper":"3D shooter multitouch controller mapper","Control camera rotations with a multitouch controller.":"Control camera rotations with a multitouch controller.","First person camera multitouch controller mapper":"First person camera multitouch controller mapper","Control a 3D physics car with a multitouch controller.":"Control a 3D physics car with a multitouch controller.","3D car multitouch controller mapper":"3D car multitouch controller mapper","Steer joystick":"Steer joystick","Speed joystick":"Speed joystick","Hand brake button name":"Hand brake button name","Control a top-down character with a multitouch controller.":"Control a top-down character with a multitouch controller.","Top-down multitouch controller mapper":"Top-down multitouch controller mapper","Joystick for touchscreens.":"Joystick for touchscreens.","Pass the object property values to the behavior.":"Pass the object property values to the behavior.","Update configuration":"Update configuration","Update the configuration of _PARAM0_":"Update the configuration of _PARAM0_","Show the joystick until it is released.":"Show the joystick until it is released.","Show and start pressing":"Show and start pressing","Show _PARAM0_ at the cursor position and start pressing":"Show _PARAM0_ at the cursor position and start pressing","Return the X position of a specified touch":"Return the X position of a specified touch","Touch X position (on parent)":"Touch X position (on parent)","De/activate control of the joystick.":"De/activate control of the joystick.","De/activate control":"De/activate control","Activate control of _PARAM0_: _PARAM1_":"Activate control of _PARAM0_: _PARAM1_","Check if a stick is pressed.":"Check if a stick is pressed.","Stick pressed":"Stick pressed","Stick _PARAM0_ is pressed":"Stick _PARAM0_ is pressed","the strick force (from 0 to 1).":"the strick force (from 0 to 1).","the stick force":"the stick force","the stick force on X axis (from -1 at the left to 1 at the right).":"the stick force on X axis (from -1 at the left to 1 at the right).","the stick X force":"the stick X force","the stick force on Y axis (from -1 at the top to 1 at the bottom).":"the stick force on Y axis (from -1 at the top to 1 at the bottom).","the stick Y force":"the stick Y force","Return the angle the joystick is pointing towards (from -180 to 180).":"Return the angle the joystick is pointing towards (from -180 to 180).","Return the angle the stick is pointing towards (from -180 to 180).":"Return the angle the stick is pointing towards (from -180 to 180).","_PARAM0_ is pushed in direction _PARAM1_":"_PARAM0_ is pushed in direction _PARAM1_","the multitouch controller identifier (1, 2, 3, 4...).":"the multitouch controller identifier (1, 2, 3, 4...).","the joystick name of the object.":"the joystick name of the object.","the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).","Sprite Sheet Animations":"Sprite Sheet Animations","Animate a tiled sprite from a sprite sheet.":"Animate a tiled sprite from a sprite sheet.","Animates a sprite sheet using JSON (see extension description).":"Animates a sprite sheet using JSON (see extension description).","JSON sprite sheet animator":"JSON sprite sheet animator","JSON formatted text describing the sprite sheet":"JSON formatted text describing the sprite sheet","Current animation":"Current animation","Current frame of the animation":"Current frame of the animation","Currently displayed frame name":"Currently displayed frame name","Speed of the animation (in seconds)":"Speed of the animation (in seconds)","Loads the JSON data into the behavior":"Loads the JSON data into the behavior","Load the JSON":"Load the JSON","Load the JSON of _PARAM0_":"Load the JSON of _PARAM0_","Update the object attached to the behavior using the latest properties values.":"Update the object attached to the behavior using the latest properties values.","Update the object":"Update the object","Update object _PARAM0_ with properties of _PARAM1_":"Update object _PARAM0_ with properties of _PARAM1_","Updates the animation frame.":"Updates the animation frame.","Update the animation frame":"Update the animation frame","Update the current animation frame of _PARAM0_ to _PARAM2_":"Update the current animation frame of _PARAM0_ to _PARAM2_","The frame to set to":"The frame to set to","Loads a new JSON spritesheet data into the behavior.":"Loads a new JSON spritesheet data into the behavior.","Load data from a JSON resource":"Load data from a JSON resource","Load JSON spritesheet data for _PARAM0_ from _PARAM2_":"Load JSON spritesheet data for _PARAM0_ from _PARAM2_","The JSON to load":"The JSON to load","Display one frame without animating the object.":"Display one frame without animating the object.","Display a frame":"Display a frame","Display frame _PARAM2_ of _PARAM0_":"Display frame _PARAM2_ of _PARAM0_","The frame to display":"The frame to display","Play an animation from the sprite sheet.":"Play an animation from the sprite sheet.","Play Animation":"Play Animation","Play animation _PARAM2_ of _PARAM0_":"Play animation _PARAM2_ of _PARAM0_","The name of the animation":"The name of the animation","The name of the current animation. __null if no animation is playing.":"The name of the current animation. __null if no animation is playing.","If Current Frame of _PARAM0_ = _PARAM2_":"If Current Frame of _PARAM0_ = _PARAM2_","The name of the currently displayed frame.":"The name of the currently displayed frame.","Current frame":"Current frame","Pause the animation of a sprite sheet.":"Pause the animation of a sprite sheet.","Pause animation":"Pause animation","Pause the current animation of _PARAM0_":"Pause the current animation of _PARAM0_","Resume a paused animation of a sprite sheet.":"Resume a paused animation of a sprite sheet.","Resume animation":"Resume animation","Resume the current animation of _PARAM0_":"Resume the current animation of _PARAM0_","Animates a vertical (top to bottom) sprite sheet.":"Animates a vertical (top to bottom) sprite sheet.","Vertical sprite sheet animator":"Vertical sprite sheet animator","Horizontal width of sprite (in pixels)":"Horizontal width of sprite (in pixels)","Vertical height of sprite (in pixels)":"Vertical height of sprite (in pixels)","Empty space between each sprite (in pixels)":"Empty space between each sprite (in pixels)","Column of the animation":"Column of the animation","First Frame of the animation":"First Frame of the animation","Last Frame of the animation":"Last Frame of the animation","Current Frame of the animation":"Current Frame of the animation","Set the animation frame.":"Set the animation frame.","Set the animation frame":"Set the animation frame","Set the current frame of _PARAM0_ to _PARAM2_":"Set the current frame of _PARAM0_ to _PARAM2_","The frame":"The frame","Play animation":"Play animation","Play animation of _PARAM0_ on column _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"Play animation of _PARAM0_ on column _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_","First frame of the animation":"First frame of the animation","Last frame of the animation":"Last frame of the animation","Duration for each frame (seconds)":"Duration for each frame (seconds)","The column containing the animation":"The column containing the animation","The current frame of the current animation.":"The current frame of the current animation.","Pause the animation of _PARAM0_":"Pause the animation of _PARAM0_","Animates a horizontal (left to right) sprite sheet.":"Animates a horizontal (left to right) sprite sheet.","Horizontal sprite sheet animator":"Horizontal sprite sheet animator","Row of the animation":"Row of the animation","Play animation of _PARAM0_ on row _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"Play animation of _PARAM0_ on row _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_","Last Frame of animation":"Last Frame of animation","What row is the animation in":"What row is the animation in","Toggle switch":"Toggle switch","Toggle switch that users can click or touch.":"Toggle switch that users can click or touch.","The finite state machine used internally by the switch object.":"The finite state machine used internally by the switch object.","Switch finite state machine":"Switch finite state machine","Check if the toggle switch is checked.":"Check if the toggle switch is checked.","Check if the toggle switch was checked in the current frame.":"Check if the toggle switch was checked in the current frame.","Has just been checked":"Has just been checked","_PARAM0_ has just been checked":"_PARAM0_ has just been checked","Check if the toggle switch was unchecked in the current frame.":"Check if the toggle switch was unchecked in the current frame.","Has just been unchecked":"Has just been unchecked","_PARAM0_ has just been unchecked":"_PARAM0_ has just been unchecked","Check if the toggle switch was toggled in the current frame.":"Check if the toggle switch was toggled in the current frame.","Has just been toggled":"Has just been toggled","_PARAM0_ has just been toggled":"_PARAM0_ has just been toggled","Check (or uncheck) the toggle switch.":"Check (or uncheck) the toggle switch.","Check (or uncheck)":"Check (or uncheck)","Check _PARAM0_: _PARAM2_":"Check _PARAM0_: _PARAM2_","IsChecked":"IsChecked","Toggle the switch.":"Toggle the switch.","Toggle":"Toggle","Toggle _PARAM0_":"Toggle _PARAM0_","A toggle switch that users can click or touch.":"A toggle switch that users can click or touch.","Check if the toggle switch was checked or unchecked in the current frame.":"Check if the toggle switch was checked or unchecked in the current frame.","Check _PARAM0_: _PARAM1_":"Check _PARAM0_: _PARAM1_","Update the state animation.":"Update the state animation.","Update state animation":"Update state animation","Update the state animation of _PARAM0_":"Update the state animation of _PARAM0_","Star Rating Bar":"Star Rating Bar","Animated star rating bar, with customizable number of stars.":"Animated star rating bar, with customizable number of stars.","An animated score counter with an icon and a customisable font.":"An animated score counter with an icon and a customisable font.","Default rate":"Default rate","Shake the stars on value changes":"Shake the stars on value changes","Disable the rating":"Disable the rating","the rate of the object.":"the rate of the object.","the rate":"the rate","Check if the object is disabled.":"Check if the object is disabled.","_PARAM0_ is disabled":"_PARAM0_ is disabled","Enable or disable the object.":"Enable or disable the object.","_PARAM0_ is disabled: _PARAM1_":"_PARAM0_ is disabled: _PARAM1_","Disable":"Disable","Stay On Screen (2D)":"Stay On Screen (2D)","Constrain object position to remain within the camera viewport boundaries.":"Constrain object position to remain within the camera viewport boundaries.","Force the object to stay visible on the screen by setting back its 2D position inside the viewport of the camera.":"Force the object to stay visible on the screen by setting back its 2D position inside the viewport of the camera.","Stay on Screen":"Stay on Screen","Top margin":"Top margin","Bottom margin":"Bottom margin","Left margin":"Left margin","Right margin":"Right margin","the top margin (in pixels) to leave between the object and the screen border.":"the top margin (in pixels) to leave between the object and the screen border.","Screen top margin":"Screen top margin","the top margin":"the top margin","the bottom margin (in pixels) to leave between the object and the screen border.":"the bottom margin (in pixels) to leave between the object and the screen border.","Screen bottom margin":"Screen bottom margin","the bottom margin":"the bottom margin","the left margin (in pixels) to leave between the object and the screen border.":"the left margin (in pixels) to leave between the object and the screen border.","Screen left margin":"Screen left margin","the left margin":"the left margin","the right margin (in pixels) to leave between the object and the screen border.":"the right margin (in pixels) to leave between the object and the screen border.","Screen right margin":"Screen right margin","the right margin":"the right margin","Stick objects to others":"Stick objects to others","Stick objects to others, following position and rotation. For accessories/skeletons.":"Stick objects to others, following position and rotation. For accessories/skeletons.","Check if the object is stuck to another object.":"Check if the object is stuck to another object.","Is stuck to another object":"Is stuck to another object","_PARAM1_ is stuck to _PARAM3_":"_PARAM1_ is stuck to _PARAM3_","Sticker":"Sticker","Sticker behavior":"Sticker behavior","Basis":"Basis","Stick the object to another. Use the action to stick the object, or unstick it later.":"Stick the object to another. Use the action to stick the object, or unstick it later.","Only follow the position":"Only follow the position","Destroy when the object it's stuck on is destroyed":"Destroy when the object it's stuck on is destroyed","Stick on another object.":"Stick on another object.","Stick":"Stick","Stick _PARAM0_ to _PARAM2_":"Stick _PARAM0_ to _PARAM2_","Object to stick to":"Object to stick to","Unstick from the object it was stuck to.":"Unstick from the object it was stuck to.","Unstick":"Unstick","Unstick _PARAM0_":"Unstick _PARAM0_","Sway":"Sway","Sway objects like grass in wind with configurable amplitude, frequency, and phase.":"Sway objects like grass in wind with configurable amplitude, frequency, and phase.","Sway multiple instances of an object at different times - useful for random grass swaying.":"Sway multiple instances of an object at different times - useful for random grass swaying.","Sway uses the tween behavior":"Sway uses the tween behavior","Maximum angle to the left (in degrees) - Use a negative number":"Maximum angle to the left (in degrees) - Use a negative number","Maximum angle to the right (in degrees) - Use a positive number":"Maximum angle to the right (in degrees) - Use a positive number","Mininum value for random tween time range for angle (seconds)":"Mininum value for random tween time range for angle (seconds)","Maximum value for random tween time range for angle (seconds)":"Maximum value for random tween time range for angle (seconds)","Minimum Y scale amount":"Minimum Y scale amount","Y scale":"Y scale","Maximum Y scale amount":"Maximum Y scale amount","Mininum value for random tween time range for Y scale (seconds)":"Mininum value for random tween time range for Y scale (seconds)","Maximum value for random tween time range for Y scale (seconds)":"Maximum value for random tween time range for Y scale (seconds)","Set sway angle left and right.":"Set sway angle left and right.","Set sway angle left and right":"Set sway angle left and right","Sway the angle of _PARAM0_ to _PARAM2_\xB0 to the left and to _PARAM3_\xB0 to the right":"Sway the angle of _PARAM0_ to _PARAM2_\xB0 to the left and to _PARAM3_\xB0 to the right","Angle to the left (degrees) - Use negative number":"Angle to the left (degrees) - Use negative number","Angle to the right (degrees) - Use positive number":"Angle to the right (degrees) - Use positive number","Set sway angle time range.":"Set sway angle time range.","Set sway angle time range":"Set sway angle time range","Tween angle time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"Tween angle time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds","Angle tween time minimum (seconds)":"Angle tween time minimum (seconds)","Angle tween time maximum (seconds)":"Angle tween time maximum (seconds)","Set sway Y scale mininum and maximum.":"Set sway Y scale mininum and maximum.","Set sway Y scale mininum and maximum":"Set sway Y scale mininum and maximum","Sway the Y scale of _PARAM0_ from _PARAM2_ to _PARAM3_":"Sway the Y scale of _PARAM0_ from _PARAM2_ to _PARAM3_","Minimum Y scale":"Minimum Y scale","Maximum Y scale":"Maximum Y scale","Set Y scale time range.":"Set Y scale time range.","Set sway Y scale time range":"Set sway Y scale time range","Tween Y scale time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"Tween Y scale time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds","Y scale tween time minimum (seconds)":"Y scale tween time minimum (seconds)","Y scale tween time maximum (seconds)":"Y scale tween time maximum (seconds)","Swipe Gesture":"Swipe Gesture","Detect swipe gestures with angle, distance, and duration. Single-touch only.":"Detect swipe gestures with angle, distance, and duration. Single-touch only.","Enable (or disable) swipe gesture detection.":"Enable (or disable) swipe gesture detection.","Enable (or disable) swipe gesture detection":"Enable (or disable) swipe gesture detection","Enable swipe detection: _PARAM1_":"Enable swipe detection: _PARAM1_","Enable swipe detection":"Enable swipe detection","Draw a line that indicates the current swipe gesture. Edit \"Outline Size\" of the shape painter to adjust the thickness of the line.":"Draw a line that indicates the current swipe gesture. Edit \"Outline Size\" of the shape painter to adjust the thickness of the line.","Draw swipe gesture":"Draw swipe gesture","Draw a line with _PARAM1_ that shows the current swipe":"Draw a line with _PARAM1_ that shows the current swipe","Shape painter used to draw swipe":"Shape painter used to draw swipe","Change the layer used to detect swipe gestures.":"Change the layer used to detect swipe gestures.","Layer used to detect swipe gestures":"Layer used to detect swipe gestures","Use layer _PARAM1_ to detect swipe gestures":"Use layer _PARAM1_ to detect swipe gestures","the Layer used to detect swipe gestures.":"the Layer used to detect swipe gestures.","the Layer used to detect swipe gestures":"the Layer used to detect swipe gestures","Swipe angle (degrees).":"Swipe angle (degrees).","Swipe angle (degrees)":"Swipe angle (degrees)","the swipe angle (degrees)":"the swipe angle (degrees)","Swipe distance (pixels).":"Swipe distance (pixels).","Swipe distance (pixels)":"Swipe distance (pixels)","the swipe distance (pixels)":"the swipe distance (pixels)","Swipe distance in horizontal direction (pixels).":"Swipe distance in horizontal direction (pixels).","Swipe distance in horizontal direction (pixels)":"Swipe distance in horizontal direction (pixels)","the swipe distance in horizontal direction (pixels)":"the swipe distance in horizontal direction (pixels)","Swipe distance in vertical direction (pixels).":"Swipe distance in vertical direction (pixels).","Swipe distance in vertical direction (pixels)":"Swipe distance in vertical direction (pixels)","the swipe distance in vertical direction (pixels)":"the swipe distance in vertical direction (pixels)","Start point of the swipe X position.":"Start point of the swipe X position.","Start point of the swipe X position":"Start point of the swipe X position","the start point of the swipe X position":"the start point of the swipe X position","Start point of the swipe Y position.":"Start point of the swipe Y position.","Start point of the swipe Y position":"Start point of the swipe Y position","the start point of the swipe Y position":"the start point of the swipe Y position","End point of the swipe X position.":"End point of the swipe X position.","End point of the swipe X position":"End point of the swipe X position","the end point of the swipe X position":"the end point of the swipe X position","End point of the swipe Y position.":"End point of the swipe Y position.","End point of the swipe Y position":"End point of the swipe Y position","the end point of the swipe Y position":"the end point of the swipe Y position","Swipe duration (seconds).":"Swipe duration (seconds).","Swipe duration (seconds)":"Swipe duration (seconds)","swipe duration (seconds)":"swipe duration (seconds)","Check if a swipe is currently in progress.":"Check if a swipe is currently in progress.","Swipe is in progress":"Swipe is in progress","Check if swipe detection is enabled.":"Check if swipe detection is enabled.","Is swipe detection enabled":"Is swipe detection enabled","Swipe detection is enabled":"Swipe detection is enabled","Check if the swipe has just ended.":"Check if the swipe has just ended.","Swipe just ended":"Swipe just ended","Swipe has just ended":"Swipe has just ended","Check if swipe moved in a given direction.":"Check if swipe moved in a given direction.","Swipe moved in a direction (4-way movement)":"Swipe moved in a direction (4-way movement)","Swipe moved in direction _PARAM1_":"Swipe moved in direction _PARAM1_","Swipe moved in a direction (8-way movement)":"Swipe moved in a direction (8-way movement)","Text-to-Speech":"Text-to-Speech","Read text aloud using system Text-to-Speech. Configurable voice and speed.":"Read text aloud using system Text-to-Speech. Configurable voice and speed.","Audio":"Audio","Speaks a text message aloud through the system text-to-speech.":"Speaks a text message aloud through the system text-to-speech.","Speak out a message":"Speak out a message","Say _PARAM1_ with voice _PARAM2_, volume _PARAM3_%, rate _PARAM4_% and pitch _PARAM5_%":"Say _PARAM1_ with voice _PARAM2_, volume _PARAM3_%, rate _PARAM4_% and pitch _PARAM5_%","The message to be spoken":"The message to be spoken","The voice to be used":"The voice to be used","Voices vary depending on the operating system. \nHere is a list of windows voice names: https://bit.ly/windows-voices \nAnd here is a list of voice names for MacOS: https://bit.ly/mac-voices":"Voices vary depending on the operating system. \nHere is a list of windows voice names: https://bit.ly/windows-voices \nAnd here is a list of voice names for MacOS: https://bit.ly/mac-voices","Volume between 0% and 100%":"Volume between 0% and 100%","Speed between 10% and 1000%":"Speed between 10% and 1000%","Pitch between 0% and 200%":"Pitch between 0% and 200%","Forces all Text-to-Speech to be stopped.":"Forces all Text-to-Speech to be stopped.","Force stop speaking":"Force stop speaking","Third person camera":"Third person camera","Third-person camera orbiting an object at configurable distance, elevation, and rotation.":"Third-person camera orbiting an object at configurable distance, elevation, and rotation.","Move the camera to look at a position from a distance.":"Move the camera to look at a position from a distance.","Look at a position from a distance (deprecated)":"Look at a position from a distance (deprecated)","Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_\xB0 and an elevation of _PARAM5_\xB0":"Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_\xB0 and an elevation of _PARAM5_\xB0","Position on X axis":"Position on X axis","Position on Y axis":"Position on Y axis","Rotation angle (around Z axis)":"Rotation angle (around Z axis)","Elevation angle (around Y axis)":"Elevation angle (around Y axis)","Move the camera to look at an object from a distance.":"Move the camera to look at an object from a distance.","Look at an object from a distance (deprecated)":"Look at an object from a distance (deprecated)","Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_\xB0 and an elevation of _PARAM4_\xB0":"Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_\xB0 and an elevation of _PARAM4_\xB0","Look at a position from a distance":"Look at a position from a distance","Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_\xB0 and an elevation of _PARAM6_\xB0":"Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_\xB0 and an elevation of _PARAM6_\xB0","Position on Z axis":"Position on Z axis","Look at an object from a distance":"Look at an object from a distance","Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_\xB0 and an elevation of _PARAM5_\xB0":"Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_\xB0 and an elevation of _PARAM5_\xB0","Smoothly follow an object at a distance.":"Smoothly follow an object at a distance.","Halfway time for rotation":"Halfway time for rotation","Halfway time for elevation rotation":"Halfway time for elevation rotation","Only used by Z and ZY rotation modes":"Only used by Z and ZY rotation modes","Halfway time on Z axis":"Halfway time on Z axis","Camera distance":"Camera distance","Lateral distance offset":"Lateral distance offset","Ahead distance offset":"Ahead distance offset","Z offset":"Z offset","Rotation angle offset":"Rotation angle offset","Elevation angle offset":"Elevation angle offset","Follow free area top border on Z axis":"Follow free area top border on Z axis","Follow free area bottom border on Z axis":"Follow free area bottom border on Z axis","Automatically rotate the camera with the object":"Automatically rotate the camera with the object","Automatically rotate the camera with the object (elevation)":"Automatically rotate the camera with the object (elevation)","Best left unchecked, use the rotation mode instead":"Best left unchecked, use the rotation mode instead","Rotation mode":"Rotation mode","Targeted camera rotation angle":"Targeted camera rotation angle","Forward X":"Forward X","Forward Y":"Forward Y","Forward Z":"Forward Z","Lerp camera":"Lerp camera","Lerp the camera rotation to _PARAM0_ with a ratio of _PARAM2_ with rotation offset _PARAM3_\xB0 and elevation offset _PARAM4_\xB0":"Lerp the camera rotation to _PARAM0_ with a ratio of _PARAM2_ with rotation offset _PARAM3_\xB0 and elevation offset _PARAM4_\xB0","Move to object":"Move to object","Change the camera position to _PARAM0_ with offset _PARAM2_, _PARAM3_, _PARAM4_":"Change the camera position to _PARAM0_ with offset _PARAM2_, _PARAM3_, _PARAM4_","X offset":"X offset","Y offset":"Y offset","Update local basis":"Update local basis","Update local basis of _PARAM0_ and the camera":"Update local basis of _PARAM0_ and the camera","Rotate the camera all the way to the targeted angle.":"Rotate the camera all the way to the targeted angle.","Rotate the camera all the way":"Rotate the camera all the way","Rotate the camera all the way to the targeted angle of _PARAM0_":"Rotate the camera all the way to the targeted angle of _PARAM0_","the camera rotation.":"the camera rotation.","Camera rotation":"Camera rotation","the camera rotation":"the camera rotation","the halfway time for rotation of the object.":"the halfway time for rotation of the object.","the halfway time for rotation":"the halfway time for rotation","the halfway time for elevation rotation of the object.":"the halfway time for elevation rotation of the object.","Halfway time for elevation rotation":"Halfway time for elevation rotation","the halfway time for elevation rotation":"the halfway time for elevation rotation","the halfway time on Z axis of the object.":"the halfway time on Z axis of the object.","the halfway time on Z axis":"the halfway time on Z axis","Return follow free area bottom border Z.":"Return follow free area bottom border Z.","Free area Z min":"Free area Z min","Return follow free area top border Z.":"Return follow free area top border Z.","Free area Z max":"Free area Z max","the follow free area top border on Z axis of the object.":"the follow free area top border on Z axis of the object.","the follow free area top border on Z axis":"the follow free area top border on Z axis","the follow free area bottom border on Z axis of the object.":"the follow free area bottom border on Z axis of the object.","the follow free area bottom border on Z axis":"the follow free area bottom border on Z axis","the camera distance of the object.":"the camera distance of the object.","the camera distance":"the camera distance","the lateral distance offset of the object.":"the lateral distance offset of the object.","the lateral distance offset":"the lateral distance offset","the ahead distance offset of the object.":"the ahead distance offset of the object.","the ahead distance offset":"the ahead distance offset","the z offset of the object.":"the z offset of the object.","the z offset":"the z offset","the rotation angle offset of the object.":"the rotation angle offset of the object.","the rotation angle offset":"the rotation angle offset","the elevation angle offset of the object.":"the elevation angle offset of the object.","the elevation angle offset":"the elevation angle offset","the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.":"the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.","Targeted rotation angle":"Targeted rotation angle","the targeted camera rotation angle":"the targeted camera rotation angle","3D-like Flip for 2D Sprites":"3D-like Flip for 2D Sprites","Flip sprites with a 3D rotation visual effect (card flip style).":"Flip sprites with a 3D rotation visual effect (card flip style).","Flip a Sprite with a 3D effect.":"Flip a Sprite with a 3D effect.","3D Flip":"3D Flip","Flipping method":"Flipping method","Front animation name":"Front animation name","Animation method":"Animation method","Back animation name":"Back animation name","Start a flipping animation on the object.":"Start a flipping animation on the object.","Flip the object (deprecated)":"Flip the object (deprecated)","Flip _PARAM0_ over _PARAM2_ms":"Flip _PARAM0_ over _PARAM2_ms","Duration (in milliseconds)":"Duration (in milliseconds)","Start a flipping animation on the object. The X origin point must be set at the object center.":"Start a flipping animation on the object. The X origin point must be set at the object center.","Flip the object":"Flip the object","Flip _PARAM0_ over _PARAM2_ seconds":"Flip _PARAM0_ over _PARAM2_ seconds","Jump to the end of the flipping animation.":"Jump to the end of the flipping animation.","Jump to flipping end":"Jump to flipping end","Jump to the end of _PARAM0_ flipping":"Jump to the end of _PARAM0_ flipping","Checks if a flipping animation is currently playing.":"Checks if a flipping animation is currently playing.","Flipping is playing":"Flipping is playing","_PARAM0_ is flipping":"_PARAM0_ is flipping","Checks if the object is flipped or will be flipped.":"Checks if the object is flipped or will be flipped.","Is flipped":"Is flipped","_PARAM0_ is flipped":"_PARAM0_ is flipped","Flips the object to one specific side.":"Flips the object to one specific side.","Flip to a side (deprecated)":"Flip to a side (deprecated)","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ms":"Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ms","Reverse side":"Reverse side","Flips the object to one specific side. The X origin point must be set at the object center.":"Flips the object to one specific side. The X origin point must be set at the object center.","Flip to a side":"Flip to a side","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ seconds":"Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ seconds","Visually flipped":"Visually flipped","_PARAM0_ is visually flipped":"_PARAM0_ is visually flipped","Flip visually":"Flip visually","Flip visually _PARAM0_: _PARAM2_":"Flip visually _PARAM0_: _PARAM2_","Flipped":"Flipped","Resource bar (separated units)":"Resource bar (separated units)","left anchor":"left anchor","Left anchor":"Left anchor","Left anchor of _PARAM1_":"Left anchor of _PARAM1_","Anchor":"Anchor","Right anchor":"Right anchor","Right anchor of _PARAM1_":"Right anchor of _PARAM1_","Unit width":"Unit width","How much pixels to show for a value of 1.":"How much pixels to show for a value of 1.","the unit width of the object. How much pixels to show for a value of 1.":"the unit width of the object. How much pixels to show for a value of 1.","the unit width":"the unit width","Update the bar width.":"Update the bar width.","Bar width":"Bar width","Update the bar width of _PARAM0_":"Update the bar width of _PARAM0_","Time formatting":"Time formatting","Format seconds into HH:MM:SS or HH:MM:SS.000 time display strings.":"Format seconds into HH:MM:SS or HH:MM:SS.000 time display strings.","Format time in seconds to HH:MM:SS.":"Format time in seconds to HH:MM:SS.","Format time in seconds to HH:MM:SS":"Format time in seconds to HH:MM:SS","Format time _PARAM1_ to HH:MM:SS in _PARAM2_":"Format time _PARAM1_ to HH:MM:SS in _PARAM2_","Time, in seconds":"Time, in seconds","Format time in seconds to HH:MM:SS.000, including milliseconds.":"Format time in seconds to HH:MM:SS.000, including milliseconds.","Format time in seconds to HH:MM:SS.000":"Format time in seconds to HH:MM:SS.000","Timed Back and Forth Movement":"Timed Back and Forth Movement","Move objects back-and-forth horizontally or vertically for set time or distance.":"Move objects back-and-forth horizontally or vertically for set time or distance.","Move an object (e.g. enemy) for a chosen time or distance, then flip it and start over.":"Move an object (e.g. enemy) for a chosen time or distance, then flip it and start over.","Move the object vertically (instead of horizontally)":"Move the object vertically (instead of horizontally)","Moving speed (in pixel/s)":"Moving speed (in pixel/s)","Moving distance (in pixels)":"Moving distance (in pixels)","Moving maximum time (in seconds)":"Moving maximum time (in seconds)","Distance start point":"Distance start point","position of the sprite at the previous frame":"position of the sprite at the previous frame","check that time has elapsed":"check that time has elapsed","Toggle switch (for Shape Painter)":"Toggle switch (for Shape Painter)","Shape Painter toggle switch. Click/touch to toggle on/off with hover halo.":"Shape Painter toggle switch. Click/touch to toggle on/off with hover halo.","Use a shape-painter object to draw a toggle switch that users can click or touch.":"Use a shape-painter object to draw a toggle switch that users can click or touch.","Radius of the thumb (px) Example: 10":"Radius of the thumb (px) Example: 10","Active thumb color string. Example: 24;119;211":"Active thumb color string. Example: 24;119;211","Opacity of the thumb. Example: 255":"Opacity of the thumb. Example: 255","Width of the track (pixels) Example: 20":"Width of the track (pixels) Example: 20","Height of the track (pixels) Example: 14":"Height of the track (pixels) Example: 14","Color string for the track that is RIGHT of the thumb. Example: 150;150;150 (Leave blank to use thumb color)":"Color string for the track that is RIGHT of the thumb. Example: 150;150;150 (Leave blank to use thumb color)","Opacity of the track that is RIGHT of the thumb. Example: 255":"Opacity of the track that is RIGHT of the thumb. Example: 255","Color string for the track that is LEFT of the thumb. Example: 24;119;211 (Leave blank to use thumb color)":"Color string for the track that is LEFT of the thumb. Example: 24;119;211 (Leave blank to use thumb color)","Opacity of the track that is LEFT of the thumb. Example: 128":"Opacity of the track that is LEFT of the thumb. Example: 128","Size of halo when the mouse hovers and clicks on the thumb. Example: 24":"Size of halo when the mouse hovers and clicks on the thumb. Example: 24","Opacity of halo when the mouse hovers on the thumb. Example: 32":"Opacity of halo when the mouse hovers on the thumb. Example: 32","Opacity of the halo that appears when the toggle switch is pressed. Example: 64":"Opacity of the halo that appears when the toggle switch is pressed. Example: 64","Number of pixels the thumb is from the left side of the track.":"Number of pixels the thumb is from the left side of the track.","Disabled":"Disabled","State has been changed (used in ToggleChecked function)":"State has been changed (used in ToggleChecked function)","Inactive thumb color string. Example: 255;255;255":"Inactive thumb color string. Example: 255;255;255","Click or press has started on toggle switch":"Click or press has started on toggle switch","Offset (Y) of shadow on thumb. Positive numbers move shadow down, negative numbers move shadow up. Example: 4":"Offset (Y) of shadow on thumb. Positive numbers move shadow down, negative numbers move shadow up. Example: 4","Offset (X) of shadow on thumb. Positive numbers move shadow right, negative numbers move shadow left. Example: 0":"Offset (X) of shadow on thumb. Positive numbers move shadow right, negative numbers move shadow left. Example: 0","Opacity of shadow on thumb. Example: 32":"Opacity of shadow on thumb. Example: 32","Need redraw":"Need redraw","Was hovered":"Was hovered","Change the track width.":"Change the track width.","Change the track width of _PARAM0_ to _PARAM2_ pixels":"Change the track width of _PARAM0_ to _PARAM2_ pixels","Change the track height.":"Change the track height.","Track height":"Track height","Change the track height of _PARAM0_ to _PARAM2_ pixels":"Change the track height of _PARAM0_ to _PARAM2_ pixels","Change the thumb opacity.":"Change the thumb opacity.","Change the thumb opacity of _PARAM0_ to _PARAM2_":"Change the thumb opacity of _PARAM0_ to _PARAM2_","Change the inactive track opacity.":"Change the inactive track opacity.","Change the inactive track opacity of _PARAM0_ to _PARAM2_":"Change the inactive track opacity of _PARAM0_ to _PARAM2_","Change the active track opacity.":"Change the active track opacity.","Change the active track opacity of _PARAM0_ to _PARAM2_":"Change the active track opacity of _PARAM0_ to _PARAM2_","Change the halo opacity when the thumb is pressed.":"Change the halo opacity when the thumb is pressed.","Change the halo opacity of _PARAM0_ to _PARAM2_":"Change the halo opacity of _PARAM0_ to _PARAM2_","Change opacity of the halo when the thumb is hovered.":"Change opacity of the halo when the thumb is hovered.","Change the offset on Y axis of the thumb shadow.":"Change the offset on Y axis of the thumb shadow.","Thumb shadow offset on Y axis":"Thumb shadow offset on Y axis","Change the offset on Y axis of the thumb shadow of _PARAM0_ to _PARAM2_":"Change the offset on Y axis of the thumb shadow of _PARAM0_ to _PARAM2_","Y offset (pixels)":"Y offset (pixels)","Change the offset on X axis of the thumb shadow.":"Change the offset on X axis of the thumb shadow.","Thumb shadow offset on X axis":"Thumb shadow offset on X axis","Change the offset on X axis of the thumb shadow of _PARAM0_ to _PARAM2_":"Change the offset on X axis of the thumb shadow of _PARAM0_ to _PARAM2_","X offset (pixels)":"X offset (pixels)","Change the thumb shadow opacity.":"Change the thumb shadow opacity.","Thumb shadow opacity":"Thumb shadow opacity","Change the thumb shadow opacity of _PARAM0_ to _PARAM2_":"Change the thumb shadow opacity of _PARAM0_ to _PARAM2_","Opacity of shadow on thumb":"Opacity of shadow on thumb","Change the thumb radius.":"Change the thumb radius.","Thumb radius":"Thumb radius","Change the thumb radius of _PARAM0_ to _PARAM2_ pixels":"Change the thumb radius of _PARAM0_ to _PARAM2_ pixels","Change the halo radius.":"Change the halo radius.","Change the halo radius of _PARAM0_ to _PARAM2_ pixels":"Change the halo radius of _PARAM0_ to _PARAM2_ pixels","Change the active track color (the part on the thumb left).":"Change the active track color (the part on the thumb left).","Change the active track color of _PARAM0_ to _PARAM2_":"Change the active track color of _PARAM0_ to _PARAM2_","Color of active track":"Color of active track","Change the inactive track color (the part on the thumb right).":"Change the inactive track color (the part on the thumb right).","Change the inactive track color of _PARAM0_ to _PARAM2_":"Change the inactive track color of _PARAM0_ to _PARAM2_","Color of inactive track":"Color of inactive track","Change the thumb color (when unchecked).":"Change the thumb color (when unchecked).","Thumb color (when unchecked)":"Thumb color (when unchecked)","Change the thumb color of _PARAM0_ (when unchecked) to _PARAM2_":"Change the thumb color of _PARAM0_ (when unchecked) to _PARAM2_","Change the thumb color (when checked).":"Change the thumb color (when checked).","Thumb color (when checked)":"Thumb color (when checked)","Change the thumb color of _PARAM0_ (when checked) to _PARAM2_":"Change the thumb color of _PARAM0_ (when checked) to _PARAM2_","If checked, change to unchecked. If unchecked, change to checked.":"If checked, change to unchecked. If unchecked, change to checked.","Toggle the switch":"Toggle the switch","Change _PARAM0_ to opposite state (checked/unchecked)":"Change _PARAM0_ to opposite state (checked/unchecked)","Disable (or enable) the toggle switch.":"Disable (or enable) the toggle switch.","Disable (or enable) the toggle switch":"Disable (or enable) the toggle switch","Disable _PARAM0_: _PARAM2_":"Disable _PARAM0_: _PARAM2_","Check (or uncheck) the toggle switch":"Check (or uncheck) the toggle switch","Set _PARAM0_ to checked: _PARAM2_":"Set _PARAM0_ to checked: _PARAM2_","Check if mouse is hovering over toggle switch.":"Check if mouse is hovering over toggle switch.","Is mouse hovered over toggle switch?":"Is mouse hovered over toggle switch?","Mouse is hovering over _PARAM0_":"Mouse is hovering over _PARAM0_","Track width.":"Track width.","Track height.":"Track height.","Offset (Y) of shadow on thumb.":"Offset (Y) of shadow on thumb.","Offset (Y) of shadow on thumb":"Offset (Y) of shadow on thumb","Offset (X) of shadow on thumb.":"Offset (X) of shadow on thumb.","Offset (X) of shadow on thumb":"Offset (X) of shadow on thumb","Opacity of shadow on thumb.":"Opacity of shadow on thumb.","Thumb opacity.":"Thumb opacity.","Active track opacity.":"Active track opacity.","Inactive track opacity.":"Inactive track opacity.","Halo opacity (pressed).":"Halo opacity (pressed).","Halo opacity (hover).":"Halo opacity (hover).","Halo radius (pixels).":"Halo radius (pixels).","Active track color.":"Active track color.","Inactive track color.":"Inactive track color.","Active thumb color.":"Active thumb color.","Active thumb color":"Active thumb color","Check if the toggle switch is disabled.":"Check if the toggle switch is disabled.","Is disabled":"Is disabled","Inactive thumb color.":"Inactive thumb color.","Inactive thumb color":"Inactive thumb color","Top-down movement animator":"Top-down movement animator","Auto-set animations based on top-down movement direction (4 or 8 directions).":"Auto-set animations based on top-down movement direction (4 or 8 directions).","Change the animation according to the movement direction.":"Change the animation according to the movement direction.","Top-down movement":"Top-down movement","Scale animations according to speed":"Scale animations according to speed","Pause animations when objects stop":"Pause animations when objects stop","Animations must be called \"Walk0\", \"Walk1\"... for left, down...":"Animations must be called \"Walk0\", \"Walk1\"... for left, down...","Number of directions":"Number of directions","Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.":"Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.","Set to 90\xB0, \"Walk0\" becomes the animation for down.":"Set to 90\xB0, \"Walk0\" becomes the animation for down.","Update the animation according to the object direction.":"Update the animation according to the object direction.","Update animation":"Update animation","Update the animation of _PARAM0_":"Update the animation of _PARAM0_","the animation name of the object.":"the animation name of the object.","the animation name":"the animation name","Check if animations are paused when objects stop.":"Check if animations are paused when objects stop.","_PARAM0_ animations are paused when objects stop":"_PARAM0_ animations are paused when objects stop","Change whether animations are paused when objects stop.":"Change whether animations are paused when objects stop.","Pause animations of _PARAM0_ when stopped: _PARAM2_":"Pause animations of _PARAM0_ when stopped: _PARAM2_","IsPausingAnimation":"IsPausingAnimation","Check if animations are scaled according to speed.":"Check if animations are scaled according to speed.","_PARAM0_ animations are scaled according to speed":"_PARAM0_ animations are scaled according to speed","Change whether animations are scaled according to speed or not.":"Change whether animations are scaled according to speed or not.","Scale animations of _PARAM0_ according to speed: _PARAM2_":"Scale animations of _PARAM0_ according to speed: _PARAM2_","IsScalingAnimation":"IsScalingAnimation","Change the animation speed scale according to the object speed.":"Change the animation speed scale according to the object speed.","Animation speed scale":"Animation speed scale","Change the animation speed scale according to _PARAM0_ speed":"Change the animation speed scale according to _PARAM0_ speed","Pause the animation according to the object speed.":"Pause the animation according to the object speed.","Animation pause":"Animation pause","Pause the animation according to _PARAM0_ speed":"Pause the animation according to _PARAM0_ speed","Return the object movement direction.":"Return the object movement direction.","Return the difference between 2 directions.":"Return the difference between 2 directions.","Direction dirrerence":"Direction dirrerence","Other direction":"Other direction","Update the animation direction of the object.":"Update the animation direction of the object.","Update animation direction":"Update animation direction","Update the animation direction of _PARAM0_":"Update the animation direction of _PARAM0_","Update the animation name.":"Update the animation name.","Update animation name":"Update animation name","Update the animation name of _PARAM0_":"Update the animation name of _PARAM0_","Make object travel to random positions":"Make object travel to random positions","Move objects to random nearby positions using Pathfinding. Optional direction bias.":"Move objects to random nearby positions using Pathfinding. Optional direction bias.","Make object travel to a random position around the object current position. The movement is initiated only when the object is not moving already (its Pathfinding behavior speed is 0). Move towards a specified angle, if desired.":"Make object travel to a random position around the object current position. The movement is initiated only when the object is not moving already (its Pathfinding behavior speed is 0). Move towards a specified angle, if desired.","Make object travel to a random position, with optional direction":"Make object travel to a random position, with optional direction","Move _PARAM1_ to random positions, where each stop is at least _PARAM3_px and at most _PARAM4_px from the current position. Move towards angle _PARAM5_ with a bias of _PARAM6_":"Move _PARAM1_ to random positions, where each stop is at least _PARAM3_px and at most _PARAM4_px from the current position. Move towards angle _PARAM5_ with a bias of _PARAM6_","Object that will be travelling (must have Pathfinding behavior)":"Object that will be travelling (must have Pathfinding behavior)","Pathfinding Behavior (required)":"Pathfinding Behavior (required)","Minimum distance between each position (Default: 100px)":"Minimum distance between each position (Default: 100px)","Maximum distance between each position (Default: 200px)":"Maximum distance between each position (Default: 200px)","Direction (in degrees) the object will move towards (Range: 0-360)":"Direction (in degrees) the object will move towards (Range: 0-360)","Direction bias (Range: 0-1)":"Direction bias (Range: 0-1)","For example: \"0\" picks a completely random direction, \"0.5\" will select a direction within the half-circle that faces the specified direction, and \"1\" simply uses the specified direction.":"For example: \"0\" picks a completely random direction, \"0.5\" will select a direction within the half-circle that faces the specified direction, and \"1\" simply uses the specified direction.","Turret 2D movement":"Turret 2D movement","Rotate object like turret toward target position. Configurable speed and acceleration.":"Rotate object like turret toward target position. Configurable speed and acceleration.","A turret movement with customizable speed, acceleration and stop angles.":"A turret movement with customizable speed, acceleration and stop angles.","Turret movement":"Turret movement","Maximum rotation speed (in degrees per second)":"Maximum rotation speed (in degrees per second)","Maximum angle (use the same value for min and max to set no constraint)":"Maximum angle (use the same value for min and max to set no constraint)","Minimum angle (use the same value for min and max to set no constraint)":"Minimum angle (use the same value for min and max to set no constraint)","Aiming angle property":"Aiming angle property","Must move clockwise":"Must move clockwise","Must move counter-clockwise":"Must move counter-clockwise","Has moved":"Has moved","Target angle (MoveToward)":"Target angle (MoveToward)","Origin angle: the farest angle from AngleMin and AngleMax":"Origin angle: the farest angle from AngleMin and AngleMax","Check if the turret is moving.":"Check if the turret is moving.","Move clockwise.":"Move clockwise.","Move clockwise":"Move clockwise","Move _PARAM0_ clockwise":"Move _PARAM0_ clockwise","Move counter-clockwise.":"Move counter-clockwise.","Move counter-clockwise":"Move counter-clockwise","Move _PARAM0_ counter-clockwise":"Move _PARAM0_ counter-clockwise","Set angle toward a position.":"Set angle toward a position.","Set aiming angle toward a position":"Set aiming angle toward a position","Set the aiming angle of _PARAM0_ toward _PARAM2_;_PARAM3_":"Set the aiming angle of _PARAM0_ toward _PARAM2_;_PARAM3_","Move toward a position.":"Move toward a position.","Move _PARAM0_ toward _PARAM2_; _PARAM3_ within a _PARAM4_\xB0 margin":"Move _PARAM0_ toward _PARAM2_; _PARAM3_ within a _PARAM4_\xB0 margin","Angle margin":"Angle margin","Change the aiming angle.":"Change the aiming angle.","Aiming angle":"Aiming angle","Change the aiming angle of _PARAM0_ to _PARAM2_\xB0":"Change the aiming angle of _PARAM0_ to _PARAM2_\xB0","Aiming angle (between 0\xB0 and 360\xB0 if no stop angle are set).":"Aiming angle (between 0\xB0 and 360\xB0 if no stop angle are set).","Tween into view":"Tween into view","Tween objects from off-screen into position for smooth UI/cutscene entrances.":"Tween objects from off-screen into position for smooth UI/cutscene entrances.","Tween objects into position from off screen.":"Tween objects into position from off screen.","Motion":"Motion","Leave this value at 0 to move the object in from outside of the screen.":"Leave this value at 0 to move the object in from outside of the screen.","Tween in the object at creation":"Tween in the object at creation","Moving in easing":"Moving in easing","Moving out easing":"Moving out easing","Delete the object when the \"tween out of view\" action has finished":"Delete the object when the \"tween out of view\" action has finished","Fade in/out the object":"Fade in/out the object","The X position at the end of fade in":"The X position at the end of fade in","The Y position at the end of fade in":"The Y position at the end of fade in","Objects with opacity":"Objects with opacity","Move the object":"Move the object","Delay":"Delay","Fade in easing":"Fade in easing","Fade out easing":"Fade out easing","The X position at the beginning of fade in":"The X position at the beginning of fade in","The Y position at the beginning of fade in":"The Y position at the beginning of fade in","Return the X position at the beginning of the fade-in.":"Return the X position at the beginning of the fade-in.","Return the Y position at the beginning of the fade-in.":"Return the Y position at the beginning of the fade-in.","Tween the object to its set starting position.":"Tween the object to its set starting position.","Tween _PARAM0_ into view":"Tween _PARAM0_ into view","Tween the object to its off screen position.":"Tween the object to its off screen position.","Tween out of view":"Tween out of view","Tween _PARAM0_ out of view":"Tween _PARAM0_ out of view","Check if the object finished tweening into view.":"Check if the object finished tweening into view.","Tweened into view":"Tweened into view","_PARAM0_ finished tweening into view":"_PARAM0_ finished tweening into view","Check if the object finished tweened out of view.":"Check if the object finished tweened out of view.","Tweened out of view":"Tweened out of view","_PARAM0_ finished tweening out of view":"_PARAM0_ finished tweening out of view","Set whether to delete the object when the \"tween out of view\" action has finished.":"Set whether to delete the object when the \"tween out of view\" action has finished.","Delete after tween out":"Delete after tween out","Should delete _PARAM0_ when the \"tween out of view\" action has finished: _PARAM2_":"Should delete _PARAM0_ when the \"tween out of view\" action has finished: _PARAM2_","Should delete the object when the \"tween out of view\" action has finished":"Should delete the object when the \"tween out of view\" action has finished","Two choices dialog boxes":"Two choices dialog boxes","Two-choice dialog box with keyboard, gamepad, and touch support. Customizable text.":"Two-choice dialog box with keyboard, gamepad, and touch support. Customizable text.","A dialog box showing two options.":"A dialog box showing two options.","Two choices dialog box":"Two choices dialog box","Cancel with Escape key":"Cancel with Escape key","Enable or disable the escape key to close the dialog.":"Enable or disable the escape key to close the dialog.","Label for the \"Yes\" button":"Label for the \"Yes\" button","This is the button with identifier 0.":"This is the button with identifier 0.","Label for the \"No\" button":"Label for the \"No\" button","This is the button with identifier 1.":"This is the button with identifier 1.","Sound at hovering":"Sound at hovering","Check if the \"Yes\" button of the dialog was selected.":"Check if the \"Yes\" button of the dialog was selected.","\"Yes\" button is clicked":"\"Yes\" button is clicked","\"Yes\" button of _PARAM0_ is clicked":"\"Yes\" button of _PARAM0_ is clicked","Check if the \"No\" button of the dialog was selected.":"Check if the \"No\" button of the dialog was selected.","\"No\" button is clicked":"\"No\" button is clicked","\"No\" button of _PARAM0_ is clicked":"\"No\" button of _PARAM0_ is clicked","the highlighted button.":"the highlighted button.","Highlighted button":"Highlighted button","the highlighted button":"the highlighted button","the text shown by the dialog.":"the text shown by the dialog.","Text message":"Text message","the text":"the text","Webpage URL tools (Web browser)":"Webpage URL tools (Web browser)","Read/manipulate web game URLs: get/set attributes, query params, redirect, reload.":"Read/manipulate web game URLs: get/set attributes, query params, redirect, reload.","Gets the URL of the current game page.":"Gets the URL of the current game page.","Get the URL of the web page":"Get the URL of the web page","Reloads the current web page.":"Reloads the current web page.","Reload the web page":"Reload the web page","Reload the current page":"Reload the current page","Loads another page in place of the current one.":"Loads another page in place of the current one.","Redirect to another page":"Redirect to another page","Redirect to _PARAM1_":"Redirect to _PARAM1_","URL to redirect to":"URL to redirect to","Get an attribute from a URL.":"Get an attribute from a URL.","Get URL attribute":"Get URL attribute","The URL to get the attribute from":"The URL to get the attribute from","The attribute to get":"The attribute to get","Gets a parameter of a URL query string.":"Gets a parameter of a URL query string.","Get a parameter of a URL query string":"Get a parameter of a URL query string","The URL to get a query string parameter from":"The URL to get a query string parameter from","The query string parameter to get":"The query string parameter to get","Updates a specific part of a URL.":"Updates a specific part of a URL.","Update a URL attribute":"Update a URL attribute","The URL to change":"The URL to change","The attribute to update":"The attribute to update","The new value of this attribute":"The new value of this attribute","Sets or replaces a query string parameter of a URL.":"Sets or replaces a query string parameter of a URL.","Change a get parameter of a URL":"Change a get parameter of a URL","The query string parameter to update":"The query string parameter to update","The new value of the query string parameter":"The new value of the query string parameter","Removes a query string parameter from an URL.":"Removes a query string parameter from an URL.","Remove a get parameter of an URL":"Remove a get parameter of an URL","The query string parameter to remove":"The query string parameter to remove","Unique Identifiers":"Unique Identifiers","Generate unique identifiers: UUIDv4 random strings and incremented integer UIDs.":"Generate unique identifiers: UUIDv4 random strings and incremented integer UIDs.","Generates a unique identifier with the UUIDv4 pattern.":"Generates a unique identifier with the UUIDv4 pattern.","Generate a UUIDv4":"Generate a UUIDv4","Generates a unique identifier with the incremented integer pattern.":"Generates a unique identifier with the incremented integer pattern.","Generate an incremented integer UID":"Generate an incremented integer UID","Unicode":"Unicode","Convert between text and Unicode/binary representations. Basic string obfuscation support.":"Convert between text and Unicode/binary representations. Basic string obfuscation support.","Reverses the unicode of a string with a base.":"Reverses the unicode of a string with a base.","Reverse the unicode of a string":"Reverse the unicode of a string","String to reverse":"String to reverse","Base of the reverse (Default: 2)":"Base of the reverse (Default: 2)","Range of unicode characters (Put 16 here to support the most characters if you put 2 in the base)":"Range of unicode characters (Put 16 here to support the most characters if you put 2 in the base)","Converts a unicode representation into String with a base.":"Converts a unicode representation into String with a base.","Unicode to string":"Unicode to string","The unicode to convert to String":"The unicode to convert to String","Base":"Base","Seperator text (Optional)":"Seperator text (Optional)","Converts a string into unicode representation with a base.":"Converts a string into unicode representation with a base.","String to unicode conversion":"String to unicode conversion","The string to convert to unicode":"The string to convert to unicode","Values of multiple objects":"Values of multiple objects","Aggregate min/max/average position, size, Z-order across picked object instances.":"Aggregate min/max/average position, size, Z-order across picked object instances.","Minimum X position of picked object instances (using AABB of objects).":"Minimum X position of picked object instances (using AABB of objects).","Minimum X position of picked object instances":"Minimum X position of picked object instances","objects":"objects","Maximum X position of picked object instances (using AABB of objects).":"Maximum X position of picked object instances (using AABB of objects).","Maximum X position of picked object instances":"Maximum X position of picked object instances","Minimum Y position of picked object instances (using AABB of objects).":"Minimum Y position of picked object instances (using AABB of objects).","Minimum Y position of picked object instances":"Minimum Y position of picked object instances","Maximum Y position of picked object instances (using AABB of objects).":"Maximum Y position of picked object instances (using AABB of objects).","Maximum Y position of picked object instances":"Maximum Y position of picked object instances","Minimum Z order of picked object instances.":"Minimum Z order of picked object instances.","Minimum Z order of picked object instances":"Minimum Z order of picked object instances","Maximum Z order of picked object instances.":"Maximum Z order of picked object instances.","Maximum Z order of picked object instances":"Maximum Z order of picked object instances","Average Z order of picked object instances.":"Average Z order of picked object instances.","Average Z order of picked object instances":"Average Z order of picked object instances","X center point (absolute) of picked object instances.":"X center point (absolute) of picked object instances.","X center point (absolute) of picked object instances":"X center point (absolute) of picked object instances","Objects":"Objects","Objects that will be used to calculate their center point":"Objects that will be used to calculate their center point","Y center point (absolute) of picked object instances.":"Y center point (absolute) of picked object instances.","Y center point (absolute) of picked object instances":"Y center point (absolute) of picked object instances","X center point (average) of picked object instances.":"X center point (average) of picked object instances.","X center point (average) of picked object instances":"X center point (average) of picked object instances","Y center point (average) of picked object instances.":"Y center point (average) of picked object instances.","Y center point (average) of picked object instances":"Y center point (average) of picked object instances","Min object height of picked object instances.":"Min object height of picked object instances.","Min object height of picked object instances":"Min object height of picked object instances","Max object height of picked object instances.":"Max object height of picked object instances.","Max object height of picked object instances":"Max object height of picked object instances","Average height of picked object instances.":"Average height of picked object instances.","Average height of picked object instances":"Average height of picked object instances","Min object width of picked object instances.":"Min object width of picked object instances.","Min object width of picked object instances":"Min object width of picked object instances","Max object width of picked object instances.":"Max object width of picked object instances.","Max object width of picked object instances":"Max object width of picked object instances","Average width of picked object instances.":"Average width of picked object instances.","Average width of picked object instances":"Average width of picked object instances","Average horizontal force (X) of picked object instances.":"Average horizontal force (X) of picked object instances.","Average horizontal force (X) of picked object instances":"Average horizontal force (X) of picked object instances","Average vertical force (Y) of picked object instances.":"Average vertical force (Y) of picked object instances.","Average vertical force (Y) of picked object instances":"Average vertical force (Y) of picked object instances","Average angle of rotation of picked object instances.":"Average angle of rotation of picked object instances.","Average angle of rotation of picked object instances":"Average angle of rotation of picked object instances","WebSocket client":"WebSocket client","WebSocket client: connect to server, send/receive string messages in real-time.":"WebSocket client: connect to server, send/receive string messages in real-time.","Triggers if the client is currently connecting to the WebSocket server.":"Triggers if the client is currently connecting to the WebSocket server.","Connecting to a server":"Connecting to a server","Connecting to the server":"Connecting to the server","Triggers if the client is connected to a WebSocket server.":"Triggers if the client is connected to a WebSocket server.","Connected to a server":"Connected to a server","Connected to the server":"Connected to the server","Triggers if the connection to a WebSocket server was closed.":"Triggers if the connection to a WebSocket server was closed.","Connection to a server was closed":"Connection to a server was closed","Connection to the server closed":"Connection to the server closed","Connects to a WebSocket server.":"Connects to a WebSocket server.","Connect to server":"Connect to server","Connect to WebSocket server at _PARAM1_":"Connect to WebSocket server at _PARAM1_","The server address":"The server address","Disconnects from the current WebSocket server.":"Disconnects from the current WebSocket server.","Disconnect from server":"Disconnect from server","Disconnect from server (reason: _PARAM1_)":"Disconnect from server (reason: _PARAM1_)","The reason for disconnection":"The reason for disconnection","Triggers when the server has sent the client some data.":"Triggers when the server has sent the client some data.","An event was received":"An event was received","Data received from server":"Data received from server","Returns the piece of data from the server that is currently being processed.":"Returns the piece of data from the server that is currently being processed.","Data from server":"Data from server","Dismisses an event after processing it to allow processing the next one without waiting for the next frame.":"Dismisses an event after processing it to allow processing the next one without waiting for the next frame.","Mark as processed":"Mark as processed","Mark current event as completed":"Mark current event as completed","Sends a string to the server.":"Sends a string to the server.","Send data to the server":"Send data to the server","Send _PARAM1_ to the server":"Send _PARAM1_ to the server","The data to send to the server":"The data to send to the server","Triggers when a WebSocket error has occurred.":"Triggers when a WebSocket error has occurred.","An error occurred":"An error occurred","WebSocket error has occurred":"WebSocket error has occurred","Gets the last error that occurred.":"Gets the last error that occurred.","YSort":"YSort","Set Z-order from Y position for depth illusion in top-down/isometric views.":"Set Z-order from Y position for depth illusion in top-down/isometric views.","Set the depth (Z-order) of the instance to the value of its Y position in the scene, creating an illusion of depth. The origin point of the object is used to determine the Z-order.":"Set the depth (Z-order) of the instance to the value of its Y position in the scene, creating an illusion of depth. The origin point of the object is used to determine the Z-order."}}; \ No newline at end of file +/* eslint-disable */module.exports={"languageData":{"plurals":function(n,ord){var s=String(n).split("."),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?"one":n10==2&&n100!=12?"two":n10==3&&n100!=13?"few":"other";return n==1&&v0?"one":"other"}},"messages":{"Advanced HTTP":"Advanced HTTP","HTTP requests with custom headers, methods, caching, CORS bypass, and JSON/FormData body.":"HTTP requests with custom headers, methods, caching, CORS bypass, and JSON/FormData body.","Network":"Network","Creates a template for your request. All requests must be made from a request template.":"Creates a template for your request. All requests must be made from a request template.","Create a new request template":"Create a new request template","Create request template _PARAM1_ with URL _PARAM2_":"Create request template _PARAM1_ with URL _PARAM2_","New request template name":"New request template name","URL the request will be sent to":"URL the request will be sent to","Creates a new request template with all the attributes from an existing one.":"Creates a new request template with all the attributes from an existing one.","Copy a request template":"Copy a request template","Create request _PARAM1_ from template _PARAM2_":"Create request _PARAM1_ from template _PARAM2_","Request to copy":"Request to copy","The HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"The HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.","HTTP Method (Verb)":"HTTP Method (Verb)","Set HTTP method of request _PARAM1_ to _PARAM2_":"Set HTTP method of request _PARAM1_ to _PARAM2_","Request template name":"Request template name","HTTP Method":"HTTP Method","the HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"the HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.","HTTP method of request _PARAM1_":"HTTP method of request _PARAM1_","Defines to what extent the results of the request is can/must be cached. When cached, instead of sending a request to the server, the browser will avoid making a real request to the server and will use a previous response given by the server for the same request.\nThe server also has a say in this via the Cache-Control header.":"Defines to what extent the results of the request is can/must be cached. When cached, instead of sending a request to the server, the browser will avoid making a real request to the server and will use a previous response given by the server for the same request.\nThe server also has a say in this via the Cache-Control header.","HTTP Caching strategy":"HTTP Caching strategy","Set HTTP caching strategy of request _PARAM1_ to _PARAM2_":"Set HTTP caching strategy of request _PARAM1_ to _PARAM2_","Learn more about what each caching strategy does [on the MDN page for cache](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache).":"Learn more about what each caching strategy does [on the MDN page for cache](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache).","HTTP Caching":"HTTP Caching","HTTP caching strategy of request _PARAM1_":"HTTP caching strategy of request _PARAM1_","Sets the body of an HTTP request to a JSON representation of a structure variable.":"Sets the body of an HTTP request to a JSON representation of a structure variable.","Body as JSON":"Body as JSON","Set body of request _PARAM1_ to contents of _PARAM2_ as JSON":"Set body of request _PARAM1_ to contents of _PARAM2_ as JSON","Variable with body contents":"Variable with body contents","Sets the body of an HTTP request to a form data representation of a structure variable.":"Sets the body of an HTTP request to a form data representation of a structure variable.","Body as form data":"Body as form data","Set body of request _PARAM1_ to contents of _PARAM2_ as form data":"Set body of request _PARAM1_ to contents of _PARAM2_ as form data","the body of the HTTP request. Contains data to send to the server, ususally in plain text, JSON or FormData format. This cannot be set for GET requests.":"the body of the HTTP request. Contains data to send to the server, ususally in plain text, JSON or FormData format. This cannot be set for GET requests.","Body":"Body","body of request _PARAM1_":"body of request _PARAM1_","an HTTP header to be sent with the request.":"an HTTP header to be sent with the request.","Header":"Header","HTTP header _PARAM2_ of request _PARAM1_":"HTTP header _PARAM2_ of request _PARAM1_","HTTP header name":"HTTP header name","the request template's target URL.":"the request template's target URL.","URL":"URL","the URL of request template _PARAM1_":"the URL of request template _PARAM1_","CORS prevents most external websites from being queried with the browser's HTTP client, since the browser may be authenticated on that website and as such another website would be able to impersonate the player on that other website.\nWhen the CORS Bypass is enabled, the request will be made from a server that is not authenticated anywhere and as such is not blocked by CORS, and it will share the response with your game. Note that as such, authentication cookies are ignored! If you own the REST API you are requesting, add CORS headers to your server instead of using this CORS Bypass.":"CORS prevents most external websites from being queried with the browser's HTTP client, since the browser may be authenticated on that website and as such another website would be able to impersonate the player on that other website.\nWhen the CORS Bypass is enabled, the request will be made from a server that is not authenticated anywhere and as such is not blocked by CORS, and it will share the response with your game. Note that as such, authentication cookies are ignored! If you own the REST API you are requesting, add CORS headers to your server instead of using this CORS Bypass.","Enable CORS Bypass":"Enable CORS Bypass","Enable CORS Bypass for request _PARAM1_: _PARAM2_":"Enable CORS Bypass for request _PARAM1_: _PARAM2_","Enable the CORS Bypass?":"Enable the CORS Bypass?","The CORS Bypass server is offered for free by [arthuro555](https://twitter.com/arthuro555). Consider making a [donation](https://ko-fi.com/arthuro555) to help keep the CORS Bypass server running.":"The CORS Bypass server is offered for free by [arthuro555](https://twitter.com/arthuro555). Consider making a [donation](https://ko-fi.com/arthuro555) to help keep the CORS Bypass server running.","Checks whether or not CORS Bypass has been enabled for the request template.":"Checks whether or not CORS Bypass has been enabled for the request template.","CORS Bypass enabled":"CORS Bypass enabled","CORS Bypass is enabled for request _PARAM1_":"CORS Bypass is enabled for request _PARAM1_","Executes the request defined by a request template.":"Executes the request defined by a request template.","Execute the request":"Execute the request","Execute request _PARAM1_ and store results in _PARAM2_":"Execute request _PARAM1_ and store results in _PARAM2_","Request to execute":"Request to execute","Variable where to store the response to the request":"Variable where to store the response to the request","Checks whether the server marked the response as a success (status code 1XX/2XX), not as a failure (status code 4XX/5XX).":"Checks whether the server marked the response as a success (status code 1XX/2XX), not as a failure (status code 4XX/5XX).","Success":"Success","Response _PARAM1_ indicates a success":"Response _PARAM1_ indicates a success","Variable containing the response":"Variable containing the response","the status code of the HTTP request (e.g. 200 if succeeded, 404 if not found, etc).":"the status code of the HTTP request (e.g. 200 if succeeded, 404 if not found, etc).","Status code":"Status code","Status code of response _PARAM1_":"Status code of response _PARAM1_","Gets the status text for a response. For example, for a response with the status code 404, the status text will be \"Not Found\".":"Gets the status text for a response. For example, for a response with the status code 404, the status text will be \"Not Found\".","Status text":"Status text","one of the HTTP headers included in the server's response.":"one of the HTTP headers included in the server's response.","Header _PARAM2_ of response _PARAM1_":"Header _PARAM2_ of response _PARAM1_","Reads the body sent by the server, and store it as a string in a variable.":"Reads the body sent by the server, and store it as a string in a variable.","Get response body (text)":"Get response body (text)","Read body of response _PARAM1_ into _PARAM2_ as text":"Read body of response _PARAM1_ into _PARAM2_ as text","Variable where to write the body contents into":"Variable where to write the body contents into","Reads the body sent by the server, parses it as JSON and stores the resulting structure in a variable.":"Reads the body sent by the server, parses it as JSON and stores the resulting structure in a variable.","Get response body (JSON)":"Get response body (JSON)","Read body of response _PARAM1_ into _PARAM2_ as JSON":"Read body of response _PARAM1_ into _PARAM2_ as JSON","Advanced platformer movements":"Advanced platformer movements","Platformer air jump, wall jump/slide, coyote time, horizontal dash, and dive dash.":"Platformer air jump, wall jump/slide, coyote time, horizontal dash, and dive dash.","Movement":"Movement","Let platformer characters jump shortly after leaving a platform and also jump in mid-air.":"Let platformer characters jump shortly after leaving a platform and also jump in mid-air.","Coyote time and air jump":"Coyote time and air jump","Platformer character behavior":"Platformer character behavior","Coyote time duration":"Coyote time duration","Coyote time":"Coyote time","Can coyote jump":"Can coyote jump","Was in the air":"Was in the air","Number of air jumps":"Number of air jumps","Air jump":"Air jump","Floor jumps count as air jumps":"Floor jumps count as air jumps","Object":"Object","Behavior":"Behavior","Change the coyote time duration of an object (in seconds).":"Change the coyote time duration of an object (in seconds).","Coyote timeframe":"Coyote timeframe","Change coyote time of _PARAM0_: _PARAM2_ seconds":"Change coyote time of _PARAM0_: _PARAM2_ seconds","Duration":"Duration","Coyote time duration in seconds.":"Coyote time duration in seconds.","Check if a coyote jump can currently happen.":"Check if a coyote jump can currently happen.","_PARAM0_ can coyote jump":"_PARAM0_ can coyote jump","Update WasInTheAir":"Update WasInTheAir","Update WasInTheAir property of _PARAM0_":"Update WasInTheAir property of _PARAM0_","Number of jumps in mid-air that are allowed.":"Number of jumps in mid-air that are allowed.","Maximal jump number":"Maximal jump number","Number of jumps in mid-air that are still allowed.":"Number of jumps in mid-air that are still allowed.","Remaining jump":"Remaining jump","Change the number of times the character can jump in mid-air.":"Change the number of times the character can jump in mid-air.","Air jumps":"Air jumps","Change the number of times _PARAM0_ can jump in mid-air: _PARAM2_":"Change the number of times _PARAM0_ can jump in mid-air: _PARAM2_","Remove one of the remaining air jumps of a character.":"Remove one of the remaining air jumps of a character.","Remove a remaining air jump":"Remove a remaining air jump","Remove one of the remaining air jumps of _PARAM0_":"Remove one of the remaining air jumps of _PARAM0_","Allow back all air jumps of a character.":"Allow back all air jumps of a character.","Reset air jumps":"Reset air jumps","Allow back all air jumps of _PARAM0_":"Allow back all air jumps of _PARAM0_","Check if floor jumps are counted as air jumps for an object.":"Check if floor jumps are counted as air jumps for an object.","Floor jumps count as air jumps for _PARAM0_":"Floor jumps count as air jumps for _PARAM0_","Let platformer characters jump and slide against walls.":"Let platformer characters jump and slide against walls.","Wall jump":"Wall jump","Platformer character configuration stack":"Platformer character configuration stack","Jump detection time frame":"Jump detection time frame","Side speed":"Side speed","Side acceleration":"Side acceleration","Side speed sustain time":"Side speed sustain time","Gravity":"Gravity","Wall sliding":"Wall sliding","Maximum falling speed":"Maximum falling speed","Impact speed absorption":"Impact speed absorption","Minimal falling speed":"Minimal falling speed","Keep sliding without holding a key":"Keep sliding without holding a key","Check if the object has just wall jumped.":"Check if the object has just wall jumped.","Has just wall jumped":"Has just wall jumped","_PARAM0_ has just jumped from a wall":"_PARAM0_ has just jumped from a wall","Check if the object is wall jumping.":"Check if the object is wall jumping.","Is wall jumping":"Is wall jumping","_PARAM0_ jumped from a wall":"_PARAM0_ jumped from a wall","Check if the object is against a wall.":"Check if the object is against a wall.","Against a wall":"Against a wall","_PARAM0_ is against a wall":"_PARAM0_ is against a wall","Remember that the character was against a wall.":"Remember that the character was against a wall.","Remember is against wall":"Remember is against wall","_PARAM0_ remembers having been against a wall":"_PARAM0_ remembers having been against a wall","Forget that the character was against a wall.":"Forget that the character was against a wall.","Forget is against wall":"Forget is against wall","_PARAM0_ forgets to had been against a wall":"_PARAM0_ forgets to had been against a wall","Remember that the character was against a wall within the time frame.":"Remember that the character was against a wall within the time frame.","Was against wall":"Was against wall","_PARAM0_ remembers to had been against a wall within _PARAM2_ seconds":"_PARAM0_ remembers to had been against a wall within _PARAM2_ seconds","Time frame":"Time frame","The time frame in seconds.":"The time frame in seconds.","Remember that the jump key was pressed.":"Remember that the jump key was pressed.","Remember key pressed":"Remember key pressed","_PARAM0_ remembers the _PARAM2_ key was pressed":"_PARAM0_ remembers the _PARAM2_ key was pressed","Key":"Key","Forget that the jump key was pressed.":"Forget that the jump key was pressed.","Forget key pressed":"Forget key pressed","_PARAM0_ forgets the _PARAM2_ key was pressed":"_PARAM0_ forgets the _PARAM2_ key was pressed","Check if the key was pressed within the time frame.":"Check if the key was pressed within the time frame.","_PARAM0_ remembers _PARAM3_ key was pressed within _PARAM2_ seconds":"_PARAM0_ remembers _PARAM3_ key was pressed within _PARAM2_ seconds","Enable side speed.":"Enable side speed.","Toggle side speed":"Toggle side speed","Enable side speed for _PARAM0_: _PARAM2_":"Enable side speed for _PARAM0_: _PARAM2_","Enable side speed":"Enable side speed","Enable wall sliding.":"Enable wall sliding.","Slide on wall":"Slide on wall","Enable wall sliding for _PARAM0_: _PARAM2_":"Enable wall sliding for _PARAM0_: _PARAM2_","Enable wall sliding":"Enable wall sliding","Absorb falling speed of an object.":"Absorb falling speed of an object.","Absorb falling speed":"Absorb falling speed","Absorb falling speed of _PARAM0_: _PARAM2_":"Absorb falling speed of _PARAM0_: _PARAM2_","Speed absorption (in pixels per second)":"Speed absorption (in pixels per second)","The wall jump detection time frame of an object (in seconds).":"The wall jump detection time frame of an object (in seconds).","Jump time frame":"Jump time frame","Change the wall jump detection time frame of _PARAM0_: _PARAM2_":"Change the wall jump detection time frame of _PARAM0_: _PARAM2_","Change the wall jump detection time frame of an object (in seconds).":"Change the wall jump detection time frame of an object (in seconds).","Jump detection time frame (in seconds)":"Jump detection time frame (in seconds)","The side speed of wall jumps of an object (in pixels per second).":"The side speed of wall jumps of an object (in pixels per second).","Change the side speed of wall jumps of _PARAM0_: _PARAM2_":"Change the side speed of wall jumps of _PARAM0_: _PARAM2_","Change the side speed of wall jumps of an object (in pixels per second).":"Change the side speed of wall jumps of an object (in pixels per second).","The side acceleration of wall jumps of an object (in pixels per second per second).":"The side acceleration of wall jumps of an object (in pixels per second per second).","Change the side acceleration of wall jumps of _PARAM0_: _PARAM2_":"Change the side acceleration of wall jumps of _PARAM0_: _PARAM2_","Change the side acceleration of wall jumps of an object (in pixels per second per second).":"Change the side acceleration of wall jumps of an object (in pixels per second per second).","The wall sliding gravity of an object (in pixels per second per second).":"The wall sliding gravity of an object (in pixels per second per second).","Change the wall sliding gravity of _PARAM0_: _PARAM2_":"Change the wall sliding gravity of _PARAM0_: _PARAM2_","Change the wall sliding gravity of an object (in pixels per second per second).":"Change the wall sliding gravity of an object (in pixels per second per second).","The wall sliding maximum falling speed of an object (in pixels per second).":"The wall sliding maximum falling speed of an object (in pixels per second).","Change the wall sliding maximum falling speed of _PARAM0_: _PARAM2_":"Change the wall sliding maximum falling speed of _PARAM0_: _PARAM2_","Change the wall sliding maximum falling speed of an object (in pixels per second).":"Change the wall sliding maximum falling speed of an object (in pixels per second).","Change the impact speed absorption of an object.":"Change the impact speed absorption of an object.","Change the impact speed absorption of _PARAM0_: _PARAM2_":"Change the impact speed absorption of _PARAM0_: _PARAM2_","Make platformer characters dash toward the floor.":"Make platformer characters dash toward the floor.","Dive dash":"Dive dash","Initial falling speed":"Initial falling speed","Simulate a press of dive key to make the object dives to the floor if it can dive.":"Simulate a press of dive key to make the object dives to the floor if it can dive.","Simulate dive key":"Simulate dive key","Simulate pressing dive key for _PARAM0_":"Simulate pressing dive key for _PARAM0_","Check if the object can dive.":"Check if the object can dive.","Can dive":"Can dive","_PARAM0_ can dive":"_PARAM0_ can dive","Check if the object is diving.":"Check if the object is diving.","Is diving":"Is diving","_PARAM0_ is diving":"_PARAM0_ is diving","Make platformer characters dash horizontally.":"Make platformer characters dash horizontally.","Horizontal dash":"Horizontal dash","Platformer charcacter configuration stack":"Platformer charcacter configuration stack","Initial speed":"Initial speed","Sustain minimum duration":"Sustain minimum duration","Sustain":"Sustain","Sustain maxiumum duration":"Sustain maxiumum duration","Sustain acceleration":"Sustain acceleration","Sustain maxiumum speed":"Sustain maxiumum speed","Sustain gravity":"Sustain gravity","Decceleration":"Decceleration","Cool down duration":"Cool down duration","Update the last direction used by the character.":"Update the last direction used by the character.","Update last direction":"Update last direction","Update last direction used by _PARAM0_":"Update last direction used by _PARAM0_","Simulate a press of dash key.":"Simulate a press of dash key.","Simulate dash key":"Simulate dash key","Simulate pressing dash key for _PARAM0_":"Simulate pressing dash key for _PARAM0_","Check if the object is dashing.":"Check if the object is dashing.","Is dashing":"Is dashing","_PARAM0_ is dashing":"_PARAM0_ is dashing","Abort the current dash and set the object to its usual horizontal speed.":"Abort the current dash and set the object to its usual horizontal speed.","Abort dash":"Abort dash","Abort the current dash of _PARAM0_":"Abort the current dash of _PARAM0_","Resolve conflict between platformer character configuration changes.":"Resolve conflict between platformer character configuration changes.","Revert configuration changes for one identifier and update the character configuration to use the most recent ones.":"Revert configuration changes for one identifier and update the character configuration to use the most recent ones.","Revert configuration":"Revert configuration","Revert configuration changes: _PARAM2_ on _PARAM0_":"Revert configuration changes: _PARAM2_ on _PARAM0_","Configuration identifier":"Configuration identifier","Return the character property value when no change applies on it.":"Return the character property value when no change applies on it.","Setting":"Setting","Configure the _PARAM2_ of _PARAM0_: _PARAM3_ with the identifier: _PARAM4_":"Configure the _PARAM2_ of _PARAM0_: _PARAM3_ with the identifier: _PARAM4_","Return the usual maximum horizontal speed when no configuration change applies on it.":"Return the usual maximum horizontal speed when no configuration change applies on it.","Usual maximum horizontal speed":"Usual maximum horizontal speed","Configure the maximum horizontal speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the maximum horizontal speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Configure a character property for a given configuration layer and move this layer on top.":"Configure a character property for a given configuration layer and move this layer on top.","Configure setting":"Configure setting","Setting value":"Setting value","Configure character gravity for a given configuration layer and move this layer on top.":"Configure character gravity for a given configuration layer and move this layer on top.","Configure gravity":"Configure gravity","Configure the gravity of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the gravity of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Configure character deceleration for a given configuration layer and move this layer on top.":"Configure character deceleration for a given configuration layer and move this layer on top.","Configure horizontal deceleration":"Configure horizontal deceleration","Configure the horizontal deceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the horizontal deceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Acceleration":"Acceleration","Configure character maximum speed for a given configuration layer and move this layer on top.":"Configure character maximum speed for a given configuration layer and move this layer on top.","Configure maximum horizontal speed":"Configure maximum horizontal speed","Maximum horizontal speed":"Maximum horizontal speed","Configure character acceleration for a given configuration layer and move this layer on top.":"Configure character acceleration for a given configuration layer and move this layer on top.","Configure horizontal acceleration":"Configure horizontal acceleration","Configure the horizontal acceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the horizontal acceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Configure character maximum falling speed for a given configuration layer and move this layer on top.":"Configure character maximum falling speed for a given configuration layer and move this layer on top.","Configure maximum falling speed":"Configure maximum falling speed","Configure the maximum falling speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"Configure the maximum falling speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_","Advanced movements for 3D physics characters":"Advanced movements for 3D physics characters","3D character air jump and coyote time (ledge tolerance) behavior.":"3D character air jump and coyote time (ledge tolerance) behavior.","Let 3D physics characters jump shortly after leaving a platform and also jump in mid-air.":"Let 3D physics characters jump shortly after leaving a platform and also jump in mid-air.","Coyote time and air jump for 3D":"Coyote time and air jump for 3D","3D physics character":"3D physics character","A Jump control was applied from a default control or simulated by an action.":"A Jump control was applied from a default control or simulated by an action.","Jump pressed or simulated":"Jump pressed or simulated","_PARAM0_ has the Jump key pressed or simulated":"_PARAM0_ has the Jump key pressed or simulated","Advanced p2p event handling":"Advanced p2p event handling","Handle all received P2P events at once per frame for better performance.":"Handle all received P2P events at once per frame for better performance.","Marks the event as handled, to go on to the next.":"Marks the event as handled, to go on to the next.","Dismiss event":"Dismiss event","Dismiss event _PARAM1_ as handled":"Dismiss event _PARAM1_ as handled","The event to dismiss":"The event to dismiss","Advanced projectile":"Advanced projectile","Projectile behavior with speed, acceleration, max distance, and lifetime controls.":"Projectile behavior with speed, acceleration, max distance, and lifetime controls.","Control how a projectile object moves including lifetime, distance, speed, and acceleration.":"Control how a projectile object moves including lifetime, distance, speed, and acceleration.","Lifetime":"Lifetime","Use \"0\" to ignore this property.":"Use \"0\" to ignore this property.","Max distance from starting position":"Max distance from starting position","Max speed":"Max speed","Speed from object forces will not exceed this value. Use \"0\" to ignore this property.":"Speed from object forces will not exceed this value. Use \"0\" to ignore this property.","Speed from object forces will not go below this value. Use \"0\" to ignore this property.":"Speed from object forces will not go below this value. Use \"0\" to ignore this property.","Negative acceleration can be used to stop a projectile.":"Negative acceleration can be used to stop a projectile.","Starting speed":"Starting speed","Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.","Delete when lifetime is exceeded":"Delete when lifetime is exceeded","Delete when distance from starting position is exceeded":"Delete when distance from starting position is exceeded","Check if max distance from starting position has been exceeded (object will be deleted next frame).":"Check if max distance from starting position has been exceeded (object will be deleted next frame).","Max distance from starting position has been exceeded":"Max distance from starting position has been exceeded","Max distance from starting position of _PARAM0_ has been exceeded":"Max distance from starting position of _PARAM0_ has been exceeded","Check if lifetime has been exceeded (object will be deleted next frame).":"Check if lifetime has been exceeded (object will be deleted next frame).","Lifetime has been exceeded":"Lifetime has been exceeded","Lifetime of _PARAM0_ has been exceeded":"Lifetime of _PARAM0_ has been exceeded","the lifetime of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"the lifetime of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.","the lifetime":"the lifetime","Restart lifetime timer of object.":"Restart lifetime timer of object.","Restart lifetime timer":"Restart lifetime timer","Restart lifetime timer of _PARAM0_":"Restart lifetime timer of _PARAM0_","the max distance from starting position of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"the max distance from starting position of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.","the max distance from starting position":"the max distance from starting position","Change the starting position of object to it's current position.":"Change the starting position of object to it's current position.","Change starting position to the current position":"Change starting position to the current position","Change the starting position of _PARAM0_ to it's current position":"Change the starting position of _PARAM0_ to it's current position","the max speed of the object. Object forces cannot exceed this value. Use \"0\" to ignore this property.":"the max speed of the object. Object forces cannot exceed this value. Use \"0\" to ignore this property.","the max speed":"the max speed","the minSpeed of the object. Object forces cannot go below this value. Use \"0\" to ignore this property.":"the minSpeed of the object. Object forces cannot go below this value. Use \"0\" to ignore this property.","MinSpeed":"MinSpeed","the minSpeed":"the minSpeed","the acceleration of the object. Use a negative number to slow down.":"the acceleration of the object. Use a negative number to slow down.","the acceleration":"the acceleration","the starting speed of the object. Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"the starting speed of the object. Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.","the starting speed":"the starting speed","Check if automatic deletion is enabled when lifetime is exceeded.":"Check if automatic deletion is enabled when lifetime is exceeded.","Automatic deletion is enabled when lifetime is exceeded":"Automatic deletion is enabled when lifetime is exceeded","Automatic deletion is enabled when lifetime is exceeded on _PARAM0_":"Automatic deletion is enabled when lifetime is exceeded on _PARAM0_","Change automatic deletion of object when lifetime is exceeded.":"Change automatic deletion of object when lifetime is exceeded.","Change automatic deletion when lifetime is exceeded":"Change automatic deletion when lifetime is exceeded","Enable automatic deletion of _PARAM0_ when lifetime is exceeded: _PARAM2_":"Enable automatic deletion of _PARAM0_ when lifetime is exceeded: _PARAM2_","DeleteWhenLifetimeExceeded":"DeleteWhenLifetimeExceeded","Check if automatic deletion is enabled when distance from starting position is exceeded.":"Check if automatic deletion is enabled when distance from starting position is exceeded.","Automatic deletion is enabled when distance from starting position is exceeded":"Automatic deletion is enabled when distance from starting position is exceeded","Automatic deletion is enabled when distance from starting position is exceeded on _PARAM0_":"Automatic deletion is enabled when distance from starting position is exceeded on _PARAM0_","Change automatic deletion when distance from starting position is exceeded.":"Change automatic deletion when distance from starting position is exceeded.","Change automatic deletion when distance from starting position is exceeded":"Change automatic deletion when distance from starting position is exceeded","Enable automatic deletion of _PARAM0_ when distance from starting position is exceeded: _PARAM2_":"Enable automatic deletion of _PARAM0_ when distance from starting position is exceeded: _PARAM2_","DeleteWhenDistanceExceeded":"DeleteWhenDistanceExceeded","Animated Back and Forth Movement":"Animated Back and Forth Movement","Horizontal back-and-forth movement with automatic flip. Requires GoLeft/TurnLeft animations.":"Horizontal back-and-forth movement with automatic flip. Requires GoLeft/TurnLeft animations.","Make the object go on the left, then when some distance is reached, flip and go back to the right. Make sure that your object has two animations called \"GoLeft\" and \"TurnLeft\".":"Make the object go on the left, then when some distance is reached, flip and go back to the right. Make sure that your object has two animations called \"GoLeft\" and \"TurnLeft\".","Animated Back and Forth (mirrored) Movement":"Animated Back and Forth (mirrored) Movement","Animatable capability":"Animatable capability","Flippable capability":"Flippable capability","Speed on X axis, in pixels per second":"Speed on X axis, in pixels per second","Distance traveled on X axis, in pixels":"Distance traveled on X axis, in pixels","Array tools":"Array tools","Array utilities: search, sort, shuffle, slice, concat, reverse, pop, random element access.":"Array utilities: search, sort, shuffle, slice, concat, reverse, pop, random element access.","General":"General","The index of the first variable that equals to a specific number in an array.":"The index of the first variable that equals to a specific number in an array.","Index of number":"Index of number","The first index where _PARAM2_ can be found in _PARAM1_":"The first index where _PARAM2_ can be found in _PARAM1_","Array to search the value in":"Array to search the value in","Number to search in the array":"Number to search in the array","The index of the first variable that equals to a specific text in an array.":"The index of the first variable that equals to a specific text in an array.","Index of text":"Index of text","String to search in the array":"String to search in the array","The index of the last variable that equals to a specific number in an array.":"The index of the last variable that equals to a specific number in an array.","Last index of number":"Last index of number","The last index where _PARAM2_ can be found in _PARAM1_":"The last index where _PARAM2_ can be found in _PARAM1_","The index of the last variable that equals to a specific text in an array.":"The index of the last variable that equals to a specific text in an array.","Last index of text":"Last index of text","Returns a random number of an array of numbers.":"Returns a random number of an array of numbers.","Random number in array":"Random number in array","A randomly picked number of _PARAM1_":"A randomly picked number of _PARAM1_","Array to get a number from":"Array to get a number from","a random string of an array of strings.":"a random string of an array of strings.","Random string in array":"Random string in array","A randomly picked string of _PARAM1_":"A randomly picked string of _PARAM1_","Array to get a string from":"Array to get a string from","Removes the last array child of an array, and return it as a number.":"Removes the last array child of an array, and return it as a number.","Get and remove last variable from array (as number)":"Get and remove last variable from array (as number)","Remove last child of _PARAM1_ and store it in _PARAM2_":"Remove last child of _PARAM1_ and store it in _PARAM2_","Array to pop a child from":"Array to pop a child from","Removes the last array child of an array, and return it as a string.":"Removes the last array child of an array, and return it as a string.","Pop string from array":"Pop string from array","Removes the first array child of an array, and return it as a number.":"Removes the first array child of an array, and return it as a number.","Shift number from array":"Shift number from array","Array to shift a child from":"Array to shift a child from","Removes the first array child of an array, and return it as a string.":"Removes the first array child of an array, and return it as a string.","Shift string from array":"Shift string from array","Checks if an array contains a specific number.":"Checks if an array contains a specific number.","Array has number":"Array has number","Array _PARAM1_ has number _PARAM2_":"Array _PARAM1_ has number _PARAM2_","The number to search":"The number to search","Checks if an array contains a specific string.":"Checks if an array contains a specific string.","Array has string":"Array has string","Array _PARAM1_ has string _PARAM2_":"Array _PARAM1_ has string _PARAM2_","The text to search":"The text to search","Copies a portion of a scene array variable into a new scene array variable.":"Copies a portion of a scene array variable into a new scene array variable.","Slice an array":"Slice an array","Slice array _PARAM1_ from indices _PARAM3_ to _PARAM4_ into _PARAM2_":"Slice array _PARAM1_ from indices _PARAM3_ to _PARAM4_ into _PARAM2_","The array to take a slice from":"The array to take a slice from","The array to store the slice into":"The array to store the slice into","The index to start the slice from":"The index to start the slice from","The index to end the slice at":"The index to end the slice at","Set to 0 to copy all of the array. If you use a negative value, the index will be selected beginning from the end. \nFor example, slicing an array with 5 elements from 0 to -1 would take only elements from indices 0 to 3.":"Set to 0 to copy all of the array. If you use a negative value, the index will be selected beginning from the end. \nFor example, slicing an array with 5 elements from 0 to -1 would take only elements from indices 0 to 3.","Cuts a portion of an array off.":"Cuts a portion of an array off.","Splice an array":"Splice an array","Remove _PARAM3_ items from array _PARAM1_ starting from index _PARAM2_":"Remove _PARAM3_ items from array _PARAM1_ starting from index _PARAM2_","The array to remove items from":"The array to remove items from","The index to start removing from":"The index to start removing from","If you use a negative value, the index will be selected beginning from the end.":"If you use a negative value, the index will be selected beginning from the end.","The amount of elements to remove":"The amount of elements to remove","Set to 0 to remove until the end of the array.":"Set to 0 to remove until the end of the array.","Combines all elements of 2 scene arrays into one new scene array.":"Combines all elements of 2 scene arrays into one new scene array.","Combine 2 arrays":"Combine 2 arrays","Combine array _PARAM1_ and _PARAM2_ into _PARAM3_":"Combine array _PARAM1_ and _PARAM2_ into _PARAM3_","The first array":"The first array","The second array":"The second array","The variable to store the new array in":"The variable to store the new array in","Appends a copy of all variables of one array to another array.":"Appends a copy of all variables of one array to another array.","Append all variable to another array":"Append all variable to another array","Append all elements from array _PARAM1_ into _PARAM2_":"Append all elements from array _PARAM1_ into _PARAM2_","The array to get the variables from":"The array to get the variables from","The variable to append the variables in":"The variable to append the variables in","Reverses children of an array. The first array child becomes the last, and the last array child becomes the first.":"Reverses children of an array. The first array child becomes the last, and the last array child becomes the first.","Reverse an array":"Reverse an array","Reverse array _PARAM1_":"Reverse array _PARAM1_","The array to reverse":"The array to reverse","Fill an element with a number.":"Fill an element with a number.","Fill array with number":"Fill array with number","Fill array _PARAM1_ with _PARAM2_ from index _PARAM3_ to index _PARAM4_":"Fill array _PARAM1_ with _PARAM2_ from index _PARAM3_ to index _PARAM4_","The array to fill":"The array to fill","The number to fill":"The number to fill","The index to start filling from":"The index to start filling from","The index to stop filling at":"The index to stop filling at","Set to 0 to fill until the end of the array.":"Set to 0 to fill until the end of the array.","Shuffles all children of an array.":"Shuffles all children of an array.","Shuffle array":"Shuffle array","Shuffle array _PARAM1_":"Shuffle array _PARAM1_","The array to shuffle":"The array to shuffle","Replaces all arrays inside of an array with their children. For example, [[1,2], [3,4]] becomes [1,2,3,4].":"Replaces all arrays inside of an array with their children. For example, [[1,2], [3,4]] becomes [1,2,3,4].","Flatten array":"Flatten array","Flatten array _PARAM1_ (Deeply flatten: _PARAM2_)":"Flatten array _PARAM1_ (Deeply flatten: _PARAM2_)","The array to flatten":"The array to flatten","Deeply flatten":"Deeply flatten","If yes, will continue flattening until there is no arrays in the array anymore.":"If yes, will continue flattening until there is no arrays in the array anymore.","Removes the last array child of an array, and stores it in another variable.":"Removes the last array child of an array, and stores it in another variable.","Pop array child":"Pop array child","The array to pop a child from":"The array to pop a child from","The variable to store the popped value into":"The variable to store the popped value into","Removes the first array child of an array, and stores it in another variable.":"Removes the first array child of an array, and stores it in another variable.","Shift array child":"Shift array child","Remove first child of _PARAM1_ and store it in _PARAM2_":"Remove first child of _PARAM1_ and store it in _PARAM2_","The array to shift a child from":"The array to shift a child from","The variable to store the shifted value into":"The variable to store the shifted value into","Insert a variable at a specific index of an array.":"Insert a variable at a specific index of an array.","Insert variable at":"Insert variable at","Insert variable _PARAM3_ in _PARAM1_ at index _PARAM2_":"Insert variable _PARAM3_ in _PARAM1_ at index _PARAM2_","The array to insert a variable in":"The array to insert a variable in","The index to insert the variable at":"The index to insert the variable at","The name of the variable to insert":"The name of the variable to insert","Split a string into an array of strings via a separator.":"Split a string into an array of strings via a separator.","Split string into array":"Split string into array","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM3_":"Split string _PARAM1_ via separator _PARAM2_ into array _PARAM3_","The string to split":"The string to split","The separator to use to split the string":"The separator to use to split the string","For example, if you have a string \"Hello World\", and the separator is a space (\" \"), the resulting array would be [\"Hello\", \"World\"]. If the separator is an empty string (\"\"), it will make an element per character ([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]).":"For example, if you have a string \"Hello World\", and the separator is a space (\" \"), the resulting array would be [\"Hello\", \"World\"]. If the separator is an empty string (\"\"), it will make an element per character ([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]).","Array where to store the results":"Array where to store the results","Returns a string made from all strings in an array.":"Returns a string made from all strings in an array.","Join all elements of an array together into a string":"Join all elements of an array together into a string","The name of the array to join into a string":"The name of the array to join into a string","Optional separator text between each element":"Optional separator text between each element","Get the sum of all numbers in an array.":"Get the sum of all numbers in an array.","Sum of array children":"Sum of array children","The array":"The array","Gets the smallest number in an array.":"Gets the smallest number in an array.","Smallest value":"Smallest value","Gets the biggest number in an array.":"Gets the biggest number in an array.","Biggest value":"Biggest value","Gets the average number in an array.":"Gets the average number in an array.","Average value":"Average value","Gets the median number in an array.":"Gets the median number in an array.","Median value":"Median value","Sort an array of number from smallest to biggest.":"Sort an array of number from smallest to biggest.","Sort an array":"Sort an array","Sort array _PARAM1_":"Sort array _PARAM1_","The array to sort":"The array to sort","The first index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"The first index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_","The object the variable is from":"The object the variable is from","The last index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"The last index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_","A randomly picked number of _PARAM2_ of _PARAM1_":"A randomly picked number of _PARAM2_ of _PARAM1_","A randomly picked string of _PARAM2_ of _PARAM1_":"A randomly picked string of _PARAM2_ of _PARAM1_","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM3_":"Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM3_","Array _PARAM2_ of _PARAM1_ has number _PARAM3_":"Array _PARAM2_ of _PARAM1_ has number _PARAM3_","Array _PARAM2_ of _PARAM1_ has string _PARAM3_":"Array _PARAM2_ of _PARAM1_ has string _PARAM3_","Slice array _PARAM2_ of _PARAM1_ from indices _PARAM5_ to _PARAM6_ into _PARAM4_ of _PARAM3_":"Slice array _PARAM2_ of _PARAM1_ from indices _PARAM5_ to _PARAM6_ into _PARAM4_ of _PARAM3_","Remove _PARAM4_ items from array _PARAM2_ of _PARAM1_ starting from index _PARAM3_":"Remove _PARAM4_ items from array _PARAM2_ of _PARAM1_ starting from index _PARAM3_","Combine array _PARAM2_ of _PARAM1_ and _PARAM4_ of _PARAM3_ into _PARAM6_ of _PARAM5_":"Combine array _PARAM2_ of _PARAM1_ and _PARAM4_ of _PARAM3_ into _PARAM6_ of _PARAM5_","Append all elements from array _PARAM2_ of _PARAM1_ into _PARAM4_ of _PARAM3_":"Append all elements from array _PARAM2_ of _PARAM1_ into _PARAM4_ of _PARAM3_","Reverse array _PARAM2_ of _PARAM1_":"Reverse array _PARAM2_ of _PARAM1_","Fill array _PARAM2_ of _PARAM1_ with _PARAM3_ from index _PARAM4_ to index _PARAM5_":"Fill array _PARAM2_ of _PARAM1_ with _PARAM3_ from index _PARAM4_ to index _PARAM5_","Shuffle array _PARAM2_ of _PARAM1_":"Shuffle array _PARAM2_ of _PARAM1_","Flatten array _PARAM2_ of _PARAM1_ (Deeply flatten: _PARAM3_)":"Flatten array _PARAM2_ of _PARAM1_ (Deeply flatten: _PARAM3_)","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_","Remove first child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"Remove first child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_","Insert variable _PARAM5_ of _PARAM4_ in _PARAM2_ of _PARAM1_ at index _PARAM3_":"Insert variable _PARAM5_ of _PARAM4_ in _PARAM2_ of _PARAM1_ at index _PARAM3_","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM4_ of _PARAM3_":"Split string _PARAM1_ via separator _PARAM2_ into array _PARAM4_ of _PARAM3_","Sort array _PARAM2_ of _PARAM1_":"Sort array _PARAM2_ of _PARAM1_","Platforms Validation":"Platforms Validation","Verify web game runs on authorized domains to prevent unauthorized hosting/piracy.":"Verify web game runs on authorized domains to prevent unauthorized hosting/piracy.","Checks if the game is executed on an authorized platform (preferably, run this only once at beginning of the game).":"Checks if the game is executed on an authorized platform (preferably, run this only once at beginning of the game).","Is the game running on an authorized platform":"Is the game running on an authorized platform","The game is running on a authorized platform":"The game is running on a authorized platform","Get the referrer's location (the domain of the website that hosts your game).":"Get the referrer's location (the domain of the website that hosts your game).","Get referrer location":"Get referrer location","Adds a new valid platform (domain name where the game is expected to be played, for example, gd.games).":"Adds a new valid platform (domain name where the game is expected to be played, for example, gd.games).","Add a valid platform":"Add a valid platform","Add _PARAM1_ as valid platform":"Add _PARAM1_ as valid platform","Domain name (e.g : gd.games)":"Domain name (e.g : gd.games)","Check if a domain is contained in the authorized list array.":"Check if a domain is contained in the authorized list array.","Check if a domain is contained in the authorized list":"Check if a domain is contained in the authorized list","Check if _PARAM1_ is in the list of authorized platforms":"Check if _PARAM1_ is in the list of authorized platforms","Domain to check":"Domain to check","Auto typing animation for text (\"typewriter\" effect)":"Auto typing animation for text (\"typewriter\" effect)","Typewriter text reveal effect, one letter at a time. For Text/BitmapText objects.":"Typewriter text reveal effect, one letter at a time. For Text/BitmapText objects.","User interface":"User interface","Reveal a text one letter after the other.":"Reveal a text one letter after the other.","Auto typing text":"Auto typing text","Text capability":"Text capability","Time between characters":"Time between characters","Detect if a new text character was just displayed":"Detect if a new text character was just displayed","Is next word wrapped":"Is next word wrapped","_PARAM0_ next word is wrapped":"_PARAM0_ next word is wrapped","Clear forced line breaks":"Clear forced line breaks","Clear forced line breaks in _PARAM0_":"Clear forced line breaks in _PARAM0_","Check if the full text has been typed.":"Check if the full text has been typed.","Finished typing":"Finished typing","_PARAM0_ finished typing":"_PARAM0_ finished typing","Check if a character has just been typed. Useful for triggering sound effects.":"Check if a character has just been typed. Useful for triggering sound effects.","Has just typed":"Has just typed","_PARAM0_ has just typed a character":"_PARAM0_ has just typed a character","Restart typing from the beginning of text. The autotyping also start automatically when a new text is set for the object.":"Restart typing from the beginning of text. The autotyping also start automatically when a new text is set for the object.","Restart typing from the beginning":"Restart typing from the beginning","Restart typing from the beginning on _PARAM0_":"Restart typing from the beginning on _PARAM0_","Jump to a specific position in the text. Positions start at \"0\" and increase by one for every character.":"Jump to a specific position in the text. Positions start at \"0\" and increase by one for every character.","Show Nth first characters":"Show Nth first characters","Show _PARAM2_ first characters on _PARAM0_":"Show _PARAM2_ first characters on _PARAM0_","Character position":"Character position","Show the full text.":"Show the full text.","Show the full text":"Show the full text","Show the full text on _PARAM0_":"Show the full text on _PARAM0_","the time between characters beign typed.":"the time between characters beign typed.","the time between characters":"the time between characters","Android back button":"Android back button","Customize Android back button: prevent default quit, detect presses. Android only.":"Customize Android back button: prevent default quit, detect presses. Android only.","Input":"Input","Triggers whenever the player presses the back button.":"Triggers whenever the player presses the back button.","Back button is pressed":"Back button is pressed","This simulates the normal action of the back button. \nThis action will quit the app when in a mobile app, and go back to the previous page when in a web browser.":"This simulates the normal action of the back button. \nThis action will quit the app when in a mobile app, and go back to the previous page when in a web browser.","Trigger back button":"Trigger back button","Simulate back button press":"Simulate back button press","Base conversion":"Base conversion","Convert numbers between bases (decimal, hexadecimal, binary, etc.).":"Convert numbers between bases (decimal, hexadecimal, binary, etc.).","Advanced":"Advanced","Converts a string representing a number in a different base to a decimal number.":"Converts a string representing a number in a different base to a decimal number.","Convert to decimal":"Convert to decimal","String representing a number":"String representing a number","The base the number in the string is in":"The base the number in the string is in","Converts a number to a trsing representing it in another base.":"Converts a number to a trsing representing it in another base.","Convert to different base":"Convert to different base","Number to convert":"Number to convert","The base to convert the number to":"The base to convert the number to","Platformer and top-down remapper":"Platformer and top-down remapper","Remap keyboard controls for platformer and top-down movements.":"Remap keyboard controls for platformer and top-down movements.","Remap keyboard controls of the top-down movement.":"Remap keyboard controls of the top-down movement.","Top-down keyboard remapper":"Top-down keyboard remapper","Up key":"Up key","Left key":"Left key","Right key":"Right key","Down key":"Down key","Remaps Top-Down behavior controls to a custom control scheme.":"Remaps Top-Down behavior controls to a custom control scheme.","Remap Top-Down controls to a custom scheme":"Remap Top-Down controls to a custom scheme","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_":"Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_","Remaps Top-Down behavior controls to a preset control scheme.":"Remaps Top-Down behavior controls to a preset control scheme.","Remap Top-Down controls to a preset":"Remap Top-Down controls to a preset","Remap controls of _PARAM0_ to preset _PARAM2_":"Remap controls of _PARAM0_ to preset _PARAM2_","Preset name":"Preset name","Remap keyboard controls of the platformer character movement.":"Remap keyboard controls of the platformer character movement.","Platformer keyboard mapper":"Platformer keyboard mapper","Jump key":"Jump key","Remaps Platformer behavior controls to a custom control scheme.":"Remaps Platformer behavior controls to a custom control scheme.","Remap Platformer controls to a custom scheme":"Remap Platformer controls to a custom scheme","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_, Jump: _PARAM6_":"Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_, Jump: _PARAM6_","Remaps Platformer behavior controls to a preset control scheme.":"Remaps Platformer behavior controls to a preset control scheme.","Remap Platformer controls to a preset":"Remap Platformer controls to a preset","3D Billboard":"3D Billboard","Make 3D objects always face camera, appearing as 2D sprites in 3D scenes.":"Make 3D objects always face camera, appearing as 2D sprites in 3D scenes.","Visual effect":"Visual effect","Rotate to always face the camera (only the front face of the cube should be enabled).":"Rotate to always face the camera (only the front face of the cube should be enabled).","Billboard":"Billboard","3D capability":"3D capability","Should rotate on X axis":"Should rotate on X axis","Should rotate on Y axis":"Should rotate on Y axis","Should rotate on Z axis":"Should rotate on Z axis","Offset position":"Offset position","Rotate the object to the camera. This is also done automatically at the end of the scene events.":"Rotate the object to the camera. This is also done automatically at the end of the scene events.","Rotate to face the camera":"Rotate to face the camera","Rotate _PARAM0_ to the camera":"Rotate _PARAM0_ to the camera","Check if the object should rotate on X axis.":"Check if the object should rotate on X axis.","_PARAM0_ should rotate on X axis":"_PARAM0_ should rotate on X axis","Change if the object should rotate on X axis.":"Change if the object should rotate on X axis.","_PARAM0_ should rotate on X axis: _PARAM2_":"_PARAM0_ should rotate on X axis: _PARAM2_","ShouldRotateX":"ShouldRotateX","Check if the object should rotate on Y axis.":"Check if the object should rotate on Y axis.","_PARAM0_ should rotate on Y axis":"_PARAM0_ should rotate on Y axis","Change if the object should rotate on Y axis.":"Change if the object should rotate on Y axis.","_PARAM0_ should rotate on Y axis: _PARAM2_":"_PARAM0_ should rotate on Y axis: _PARAM2_","ShouldRotateY":"ShouldRotateY","Check if the object should rotate on Z axis.":"Check if the object should rotate on Z axis.","_PARAM0_ should rotate on Z axis":"_PARAM0_ should rotate on Z axis","Change if the object should rotate on Z axis.":"Change if the object should rotate on Z axis.","_PARAM0_ should rotate on Z axis: _PARAM2_":"_PARAM0_ should rotate on Z axis: _PARAM2_","ShouldRotateZ":"ShouldRotateZ","Enable texture transparency of the front face.":"Enable texture transparency of the front face.","Enable texture transparency":"Enable texture transparency","Enable texture transparency of _PARAM0_":"Enable texture transparency of _PARAM0_","Boids movement":"Boids movement","Simulates flocks movement.":"Simulates flocks movement.","Define helper classes JavaScript code.":"Define helper classes JavaScript code.","Define helper classes":"Define helper classes","Define helper classes JavaScript code":"Define helper classes JavaScript code","Move as part of a flock.":"Move as part of a flock.","Boids Movement":"Boids Movement","Maximum speed":"Maximum speed","Maximum acceleration":"Maximum acceleration","Rotate object":"Rotate object","Cohesion sight radius":"Cohesion sight radius","Sight":"Sight","Alignement sight radius":"Alignement sight radius","Separation sight radius":"Separation sight radius","Cohesion decision weight":"Cohesion decision weight","Decision":"Decision","Alignment decision weight":"Alignment decision weight","Separation decision weight":"Separation decision weight","Collision layer":"Collision layer","Intend to move in a given direction.":"Intend to move in a given direction.","Move in a direction":"Move in a direction","_PARAM0_ intent to move in the direction _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ intent to move in the direction _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)","Direction X":"Direction X","Direction Y":"Direction Y","Decision weight":"Decision weight","Intend to move toward a position.":"Intend to move toward a position.","Move toward a position":"Move toward a position","_PARAM0_ intend to move toward _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ intend to move toward _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)","Target X":"Target X","Target Y":"Target Y","Intend to move toward an object.":"Intend to move toward an object.","Move toward an object":"Move toward an object","_PARAM0_ intend to move toward _PARAM2_ (decision weight: _PARAM3_)":"_PARAM0_ intend to move toward _PARAM2_ (decision weight: _PARAM3_)","Targeted object":"Targeted object","Intend to avoid an area with a given center and radius.":"Intend to avoid an area with a given center and radius.","Avoid a position":"Avoid a position","_PARAM0_ intend to avoid a radius of _PARAM4_ around _PARAM2_; _PARAM3_ (decision weight: _PARAM5_)":"_PARAM0_ intend to avoid a radius of _PARAM4_ around _PARAM2_; _PARAM3_ (decision weight: _PARAM5_)","Center X":"Center X","Center Y":"Center Y","Radius":"Radius","Intend to avoid an area from an object center and a given radius.":"Intend to avoid an area from an object center and a given radius.","Avoid an object":"Avoid an object","_PARAM0_ intend to avoid a radius of _PARAM3_ around _PARAM2_ (decision weight: _PARAM4_)":"_PARAM0_ intend to avoid a radius of _PARAM3_ around _PARAM2_ (decision weight: _PARAM4_)","Avoided object":"Avoided object","Return the current speed.":"Return the current speed.","Speed":"Speed","Return the current horizontal speed.":"Return the current horizontal speed.","Velocity X":"Velocity X","Return the current vertical speed.":"Return the current vertical speed.","Velocity Y":"Velocity Y","Check if the object is rotated while moving on its path.":"Check if the object is rotated while moving on its path.","Object Rotated":"Object Rotated","_PARAM0_ is rotated when moving":"_PARAM0_ is rotated when moving","Return the maximum speed.":"Return the maximum speed.","Change the maximum speed of the object.":"Change the maximum speed of the object.","Change the maximum speed of _PARAM0_ to _PARAM2_":"Change the maximum speed of _PARAM0_ to _PARAM2_","Max Speed":"Max Speed","Return the maximum acceleration.":"Return the maximum acceleration.","Change the maximum acceleration of the object.":"Change the maximum acceleration of the object.","Change the maximum acceleration of _PARAM0_ to _PARAM2_":"Change the maximum acceleration of _PARAM0_ to _PARAM2_","Steering Force":"Steering Force","Return the cohesion sight radius.":"Return the cohesion sight radius.","Change the cohesion sight radius.":"Change the cohesion sight radius.","Change the cohesion sight radius of _PARAM0_ to _PARAM2_":"Change the cohesion sight radius of _PARAM0_ to _PARAM2_","Value":"Value","Return the alignment sight radius.":"Return the alignment sight radius.","Alignment sight radius":"Alignment sight radius","Change the alignment sight radius of _PARAM0_ to _PARAM2_":"Change the alignment sight radius of _PARAM0_ to _PARAM2_","Return the separation sight radius.":"Return the separation sight radius.","Change the separation sight radius of _PARAM0_ to _PARAM2_":"Change the separation sight radius of _PARAM0_ to _PARAM2_","Return which weight the cohesion takes in the chosen direction.":"Return which weight the cohesion takes in the chosen direction.","Cohesion weight":"Cohesion weight","Change the weight the cohesion takes in the chosen direction.":"Change the weight the cohesion takes in the chosen direction.","Change the cohesion weight of _PARAM0_ to _PARAM2_":"Change the cohesion weight of _PARAM0_ to _PARAM2_","Return which weight the alignment takes in the chosen direction.":"Return which weight the alignment takes in the chosen direction.","Alignment weight":"Alignment weight","Change the weight the alignment takes in the chosen direction.":"Change the weight the alignment takes in the chosen direction.","Change the alignment weight of _PARAM0_ to _PARAM2_":"Change the alignment weight of _PARAM0_ to _PARAM2_","Return which weight the separation takes in the chosen direction.":"Return which weight the separation takes in the chosen direction.","Separation weight":"Separation weight","Change the weight the separation takes in the chosen direction.":"Change the weight the separation takes in the chosen direction.","Change the separation weight of _PARAM0_ to _PARAM2_":"Change the separation weight of _PARAM0_ to _PARAM2_","Boomerang":"Boomerang","Throw objects that return to thrower after set time or on command.":"Throw objects that return to thrower after set time or on command.","Throw an object that returns to the thrower like a boomerang.":"Throw an object that returns to the thrower like a boomerang.","Throw speed (pixels per second)":"Throw speed (pixels per second)","Time before changing directions (seconds)":"Time before changing directions (seconds)","Rotation (degrees per second)":"Rotation (degrees per second)","Thrower X position":"Thrower X position","Thrower Y position":"Thrower Y position","Boomerang is returning":"Boomerang is returning","Throw boomerang toward an angle.":"Throw boomerang toward an angle.","Throw boomerang toward an angle":"Throw boomerang toward an angle","Throw boomerang _PARAM0_ toward angle _PARAM2_ degrees, speed of _PARAM3_ pixels per second, rotating _PARAM5_ degrees per second, and send boomerang back after of _PARAM4_ seconds":"Throw boomerang _PARAM0_ toward angle _PARAM2_ degrees, speed of _PARAM3_ pixels per second, rotating _PARAM5_ degrees per second, and send boomerang back after of _PARAM4_ seconds","Angle (degrees)":"Angle (degrees)","Throw boomerang toward a position.":"Throw boomerang toward a position.","Throw boomerang toward a position":"Throw boomerang toward a position","Throw boomerang _PARAM0_ toward _PARAM2_;_PARAM3_ at a speed of _PARAM4_ pixels per second, rotating _PARAM6_ degrees per second, and send boomerang back after of _PARAM5_ seconds":"Throw boomerang _PARAM0_ toward _PARAM2_;_PARAM3_ at a speed of _PARAM4_ pixels per second, rotating _PARAM6_ degrees per second, and send boomerang back after of _PARAM5_ seconds","Target X position":"Target X position","Target Y position":"Target Y position","Send boomerang back to thrower.":"Send boomerang back to thrower.","Send boomerang back to thrower":"Send boomerang back to thrower","Send boomerang _PARAM0_ back to thrower":"Send boomerang _PARAM0_ back to thrower","Set amount of time before boomerang changes directions (seconds).":"Set amount of time before boomerang changes directions (seconds).","Set amount of time before boomerang changes directions":"Set amount of time before boomerang changes directions","Set amount of time before _PARAM0_ changes directions to _PARAM2_ (seconds)":"Set amount of time before _PARAM0_ changes directions to _PARAM2_ (seconds)","Time before boomerange changes direction (seconds)":"Time before boomerange changes direction (seconds)","Track position of boomerang thrower.":"Track position of boomerang thrower.","Track position of boomerang thrower":"Track position of boomerang thrower","Track position of thrower _PARAM2_ who threw boomerang _PARAM0_":"Track position of thrower _PARAM2_ who threw boomerang _PARAM0_","Thrower":"Thrower","Boomerang is returning to thrower.":"Boomerang is returning to thrower.","Boomerang is returning to thrower":"Boomerang is returning to thrower","Boomerang _PARAM0_ is returning to thrower":"Boomerang _PARAM0_ is returning to thrower","Bounce (using forces)":"Bounce (using forces)","Bounce objects off collisions using forces. Not for Physics engine or Platformer.":"Bounce objects off collisions using forces. Not for Physics engine or Platformer.","Provides an action to make the object bounce from another object it just touched. Add a permanent force to the object and, when in collision with another one, use the action to make it bounce realistically.":"Provides an action to make the object bounce from another object it just touched. Add a permanent force to the object and, when in collision with another one, use the action to make it bounce realistically.","Bounce":"Bounce","Bounce count":"Bounce count","Number of times this object has bounced off another object":"Number of times this object has bounced off another object","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.","Bounce off another object":"Bounce off another object","Bounce _PARAM0_ off _PARAM2_":"Bounce _PARAM0_ off _PARAM2_","The objects to bounce on":"The objects to bounce on","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be calculated *to go toward the specified angle (the \"normal angle\")*. For example, if the object is arriving at this exact angle, it will bounce in the opposite direction.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be calculated *to go toward the specified angle (the \"normal angle\")*. For example, if the object is arriving at this exact angle, it will bounce in the opposite direction.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.","Bounce off another object toward a specified angle":"Bounce off another object toward a specified angle","Bounce _PARAM0_ off _PARAM2_ assuming a normal angle of _PARAM3_":"Bounce _PARAM0_ off _PARAM2_ assuming a normal angle of _PARAM3_","The \"normal\" angle, in degrees, to bounce against":"The \"normal\" angle, in degrees, to bounce against","This can be understood at the direction that the bounce must go toward.":"This can be understood at the direction that the bounce must go toward.","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be vertical, like if the object is *colliding a perfectly horizontal obstacle* (like the top/bottom of the screen in a pong game). For example, if the object is arriving with an angle of exactly 90 degrees, it will bounce in the opposite direction: -90 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be vertical, like if the object is *colliding a perfectly horizontal obstacle* (like the top/bottom of the screen in a pong game). For example, if the object is arriving with an angle of exactly 90 degrees, it will bounce in the opposite direction: -90 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.","Bounce vertically":"Bounce vertically","Bounce _PARAM0_ off _PARAM2_ - always vertically":"Bounce _PARAM0_ off _PARAM2_ - always vertically","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be horizontal, like if the object is *colliding a perfectly vertical obstacle* (like paddles in a pong game). For example, if the object is arriving with an angle of exactly 0 degrees, it will bounce in the opposite direction: 180 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be horizontal, like if the object is *colliding a perfectly vertical obstacle* (like paddles in a pong game). For example, if the object is arriving with an angle of exactly 0 degrees, it will bounce in the opposite direction: 180 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.","Bounce horizontally":"Bounce horizontally","Bounce _PARAM0_ off _PARAM2_ - always horizontally":"Bounce _PARAM0_ off _PARAM2_ - always horizontally","the number of times this object has bounced off another object.":"the number of times this object has bounced off another object.","the bounce count":"the bounce count","Button states and effects":"Button states and effects","Use any object as a button and change appearance according to user interactions.":"Use any object as a button and change appearance according to user interactions.","Use objects as buttons.":"Use objects as buttons.","Button states":"Button states","Should check hovering":"Should check hovering","State":"State","Touch id":"Touch id","Touch is inside":"Touch is inside","Mouse is inside":"Mouse is inside","Reset the state of the button.":"Reset the state of the button.","Reset state":"Reset state","Reset the button state of _PARAM0_":"Reset the button state of _PARAM0_","Check if the button is not used.":"Check if the button is not used.","Is idle":"Is idle","_PARAM0_ is idle":"_PARAM0_ is idle","Check if the button was just clicked.":"Check if the button was just clicked.","Is clicked":"Is clicked","_PARAM0_ is clicked":"_PARAM0_ is clicked","Check if the cursor is hovered over the button.":"Check if the cursor is hovered over the button.","Is hovered":"Is hovered","_PARAM0_ is hovered":"_PARAM0_ is hovered","Check if the button is either hovered or pressed but not hovered.":"Check if the button is either hovered or pressed but not hovered.","Is focused":"Is focused","_PARAM0_ is focused":"_PARAM0_ is focused","Check if the button is currently being pressed with mouse or touch.":"Check if the button is currently being pressed with mouse or touch.","Is pressed":"Is pressed","_PARAM0_ is pressed":"_PARAM0_ is pressed","Check if the button is currently being pressed outside with mouse or touch.":"Check if the button is currently being pressed outside with mouse or touch.","Is held outside":"Is held outside","_PARAM0_ is held outside":"_PARAM0_ is held outside","the touch id that is using the button or 0 if none.":"the touch id that is using the button or 0 if none.","the touch id":"the touch id","Enable effects on buttons based on their state.":"Enable effects on buttons based on their state.","Button object effects":"Button object effects","Effect capability":"Effect capability","Idle state effect":"Idle state effect","Effects":"Effects","Focused state effect":"Focused state effect","The state is Focused when the button is hovered or held outside.":"The state is Focused when the button is hovered or held outside.","Pressed state effect":"Pressed state effect","the idle state effect of the object.":"the idle state effect of the object.","the idle state effect":"the idle state effect","the focused state effect of the object. The state is Focused when the button is hovered or held outside.":"the focused state effect of the object. The state is Focused when the button is hovered or held outside.","the focused state effect":"the focused state effect","the pressed state effect of the object.":"the pressed state effect of the object.","the pressed state effect":"the pressed state effect","Change the animation of buttons according to their state.":"Change the animation of buttons according to their state.","Button animation":"Button animation","Idle state animation name":"Idle state animation name","Animation":"Animation","Focused state animation name":"Focused state animation name","Pressed state animation name":"Pressed state animation name","the idle state animation name of the object.":"the idle state animation name of the object.","the idle state animation name":"the idle state animation name","the focused state animation name of the object. The state is Focused when the button is hovered or held outside.":"the focused state animation name of the object. The state is Focused when the button is hovered or held outside.","the focused state animation name":"the focused state animation name","the pressed state animation name of the object.":"the pressed state animation name of the object.","the pressed state animation name":"the pressed state animation name","Smoothly change an effect on buttons according to their state.":"Smoothly change an effect on buttons according to their state.","Button object effect tween":"Button object effect tween","Effect name":"Effect name","Effect":"Effect","Effect parameter":"Effect parameter","The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.","Idle effect parameter value":"Idle effect parameter value","Focused effect parameter value":"Focused effect parameter value","Pressed effect parameter value":"Pressed effect parameter value","Fade-in easing":"Fade-in easing","Fade-out easing":"Fade-out easing","Fade-in duration":"Fade-in duration","Fade-out duration":"Fade-out duration","Disable the effect in idle state":"Disable the effect in idle state","Time delta":"Time delta","Fade in":"Fade in","_PARAM0_ fade in to _PARAM2_":"_PARAM0_ fade in to _PARAM2_","Fade out":"Fade out","_PARAM0_ fade out to _PARAM2_":"_PARAM0_ fade out to _PARAM2_","Play tween":"Play tween","Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing":"Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing","Duration (in seconds)":"Duration (in seconds)","Easing":"Easing","the effect name of the object.":"the effect name of the object.","the effect name":"the effect name","the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.","the effect parameter":"the effect parameter","Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.","Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_":"Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_","Parameter name":"Parameter name","the idle effect parameter value of the object.":"the idle effect parameter value of the object.","the idle effect parameter value":"the idle effect parameter value","the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.":"the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.","the focused effect parameter value":"the focused effect parameter value","the pressed effect parameter value of the object.":"the pressed effect parameter value of the object.","the pressed effect parameter value":"the pressed effect parameter value","the fade-in easing of the object.":"the fade-in easing of the object.","the fade-in easing":"the fade-in easing","the fade-out easing of the object.":"the fade-out easing of the object.","the fade-out easing":"the fade-out easing","the fade-in duration of the object.":"the fade-in duration of the object.","the fade-in duration":"the fade-in duration","the fade-out duration of the object.":"the fade-out duration of the object.","the fade-out duration":"the fade-out duration","Smoothly resize buttons according to their state.":"Smoothly resize buttons according to their state.","Button scale tween":"Button scale tween","Scalable capability":"Scalable capability","Button states behavior (required)":"Button states behavior (required)","Tween behavior (required)":"Tween behavior (required)","Idle state size scale":"Idle state size scale","Size":"Size","Focused state size scale":"Focused state size scale","Pressed state size scale":"Pressed state size scale","the idle state size scale of the object.":"the idle state size scale of the object.","the idle state size scale":"the idle state size scale","the focused state size scale of the object. The state is Focused when the button is hovered or held outside.":"the focused state size scale of the object. The state is Focused when the button is hovered or held outside.","the focused state size scale":"the focused state size scale","the pressed state size scale of the object.":"the pressed state size scale of the object.","the pressed state size scale":"the pressed state size scale","Smoothly change the color tint of buttons according to their state.":"Smoothly change the color tint of buttons according to their state.","Button color tint tween":"Button color tint tween","Tween":"Tween","Idle state color tint":"Idle state color tint","Color":"Color","Focused state color tint":"Focused state color tint","Pressed state color tint":"Pressed state color tint","the idle state color tint of the object.":"the idle state color tint of the object.","the idle state color tint":"the idle state color tint","the focused state color tint of the object. The state is Focused when the button is hovered or held outside.":"the focused state color tint of the object. The state is Focused when the button is hovered or held outside.","the focused state color tint":"the focused state color tint","the pressed state color tint of the object.":"the pressed state color tint of the object.","the pressed state color tint":"the pressed state color tint","Camera impulse":"Camera impulse","Camera impulse movement for earthquake or impact effects.":"Camera impulse movement for earthquake or impact effects.","Camera":"Camera","Add an impulse to the camera position.":"Add an impulse to the camera position.","Add a camera impulse":"Add a camera impulse","Add an impulse _PARAM1_ to the camera from layer _PARAM2_ with an amplitude of _PARAM3_ and an angle of _PARAM4_, going away in _PARAM5_ seconds with _PARAM6_ easing, staying _PARAM7_ seconds, going back in _PARAM8_ seconds with _PARAM9_ easing":"Add an impulse _PARAM1_ to the camera from layer _PARAM2_ with an amplitude of _PARAM3_ and an angle of _PARAM4_, going away in _PARAM5_ seconds with _PARAM6_ easing, staying _PARAM7_ seconds, going back in _PARAM8_ seconds with _PARAM9_ easing","Identifier":"Identifier","Layer":"Layer","Displacement X":"Displacement X","Displacement Y":"Displacement Y","Get away duration (in seconds)":"Get away duration (in seconds)","Get away easing":"Get away easing","Stay duration (in seconds)":"Stay duration (in seconds)","Get back duration (in seconds)":"Get back duration (in seconds)","Get back easing":"Get back easing","Add a camera impulse (angle)":"Add a camera impulse (angle)","Amplitude":"Amplitude","Angle (in degree)":"Angle (in degree)","Check if a camera impulse is playing.":"Check if a camera impulse is playing.","Camera impulse is playing":"Camera impulse is playing","Camera impulse _PARAM1_ is playing":"Camera impulse _PARAM1_ is playing","Camera shake":"Camera shake","Shake layer cameras.":"Shake layer cameras.","Shake the camera on layers chosen with configuration actions.":"Shake the camera on layers chosen with configuration actions.","Shake camera":"Shake camera","Shake camera for _PARAM1_ seconds with _PARAM2_ seconds of easing to start and _PARAM3_ seconds to stop":"Shake camera for _PARAM1_ seconds with _PARAM2_ seconds of easing to start and _PARAM3_ seconds to stop","Ease duration to start (in seconds)":"Ease duration to start (in seconds)","Ease duration to stop (in seconds)":"Ease duration to stop (in seconds)","Shake the camera on the specified layer, using one or more ways to shake (position, angle, zoom). This action is deprecated. Please use the other one with the same name.":"Shake the camera on the specified layer, using one or more ways to shake (position, angle, zoom). This action is deprecated. Please use the other one with the same name.","Shake camera (deprecated)":"Shake camera (deprecated)","Shake camera on _PARAM3_ layer for _PARAM5_ seconds. Use an amplitude of _PARAM1_px on X axis and _PARAM2_px on Y axis, angle rotation amplitude _PARAM6_ degrees, and zoom amplitude _PARAM7_ percent. Wait _PARAM8_ seconds between shakes. Keep shaking until stopped: _PARAM9_":"Shake camera on _PARAM3_ layer for _PARAM5_ seconds. Use an amplitude of _PARAM1_px on X axis and _PARAM2_px on Y axis, angle rotation amplitude _PARAM6_ degrees, and zoom amplitude _PARAM7_ percent. Wait _PARAM8_ seconds between shakes. Keep shaking until stopped: _PARAM9_","Amplitude of shaking on the X axis (in pixels)":"Amplitude of shaking on the X axis (in pixels)","Amplitude of shaking on the Y axis (in pixels)":"Amplitude of shaking on the Y axis (in pixels)","Layer (base layer if empty)":"Layer (base layer if empty)","Camera index (Default: 0)":"Camera index (Default: 0)","Duration (in seconds) (Default: 0.5)":"Duration (in seconds) (Default: 0.5)","Angle rotation amplitude (in degrees) (For example: 2)":"Angle rotation amplitude (in degrees) (For example: 2)","Zoom factor amplitude":"Zoom factor amplitude","Period between shakes (in seconds) (Default: 0.08)":"Period between shakes (in seconds) (Default: 0.08)","Keep shaking until stopped":"Keep shaking until stopped","Duration value will be ignored":"Duration value will be ignored","Start shaking the camera indefinitely.":"Start shaking the camera indefinitely.","Start camera shaking":"Start camera shaking","Start shaking the camera with _PARAM1_ seconds of easing":"Start shaking the camera with _PARAM1_ seconds of easing","Ease duration (in seconds)":"Ease duration (in seconds)","Stop shaking the camera.":"Stop shaking the camera.","Stop camera shaking":"Stop camera shaking","Stop shaking the camera with _PARAM1_ seconds of easing":"Stop shaking the camera with _PARAM1_ seconds of easing","Mark a layer as shakable.":"Mark a layer as shakable.","Shakable layer":"Shakable layer","Mark the layer: _PARAM2_ as shakable: _PARAM1_":"Mark the layer: _PARAM2_ as shakable: _PARAM1_","Shakable":"Shakable","Check if the camera is shaking.":"Check if the camera is shaking.","Camera is shaking":"Camera is shaking","Change the translation amplitude of the shaking (in pixels).":"Change the translation amplitude of the shaking (in pixels).","Layer translation amplitude":"Layer translation amplitude","Change the translation amplitude of the shaking to _PARAM1_; _PARAM2_ (layer: _PARAM3_)":"Change the translation amplitude of the shaking to _PARAM1_; _PARAM2_ (layer: _PARAM3_)","Change the rotation amplitude of the shaking (in degrees).":"Change the rotation amplitude of the shaking (in degrees).","Layer rotation amplitude":"Layer rotation amplitude","Change the rotation amplitude of the shaking to _PARAM1_ degrees (layer: _PARAM2_)":"Change the rotation amplitude of the shaking to _PARAM1_ degrees (layer: _PARAM2_)","NewLayerName":"NewLayerName","Change the zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"Change the zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).","Layer zoom amplitude":"Layer zoom amplitude","Change the zoom factor amplitude of the shaking to _PARAM1_ (layer: _PARAM2_)":"Change the zoom factor amplitude of the shaking to _PARAM1_ (layer: _PARAM2_)","Zoom factor":"Zoom factor","Change the number of back and forth per seconds.":"Change the number of back and forth per seconds.","Layer shaking frequency":"Layer shaking frequency","Change the shaking frequency to _PARAM1_ (layer: _PARAM2_)":"Change the shaking frequency to _PARAM1_ (layer: _PARAM2_)","Frequency":"Frequency","Change the default translation amplitude of the shaking (in pixels).":"Change the default translation amplitude of the shaking (in pixels).","Default translation amplitude":"Default translation amplitude","Change the default translation amplitude of the shaking to _PARAM1_; _PARAM2_":"Change the default translation amplitude of the shaking to _PARAM1_; _PARAM2_","Change the default rotation amplitude of the shaking (in degrees).":"Change the default rotation amplitude of the shaking (in degrees).","Default rotation amplitude":"Default rotation amplitude","Change the default rotation amplitude of the shaking to _PARAM1_ degrees":"Change the default rotation amplitude of the shaking to _PARAM1_ degrees","Change the default zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"Change the default zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).","Default zoom amplitude":"Default zoom amplitude","Change the default zoom factor amplitude of the shaking to _PARAM1_":"Change the default zoom factor amplitude of the shaking to _PARAM1_","Change the default number of back and forth per seconds.":"Change the default number of back and forth per seconds.","Default shaking frequency":"Default shaking frequency","Change the default shaking frequency to _PARAM1_":"Change the default shaking frequency to _PARAM1_","Generate a number from 2 dimensional simplex noise.":"Generate a number from 2 dimensional simplex noise.","2D noise":"2D noise","Generator name":"Generator name","X coordinate":"X coordinate","Y coordinate":"Y coordinate","Generate a number from 3 dimensional simplex noise.":"Generate a number from 3 dimensional simplex noise.","3D noise":"3D noise","Z coordinate":"Z coordinate","Generate a number from 4 dimensional simplex noise.":"Generate a number from 4 dimensional simplex noise.","4D noise":"4D noise","W coordinate":"W coordinate","Create a noise generator with default settings (frequency = 1, octaves = 1, persistence = 0.5, lacunarity = 2).":"Create a noise generator with default settings (frequency = 1, octaves = 1, persistence = 0.5, lacunarity = 2).","Create a noise generator":"Create a noise generator","Create a noise generator named _PARAM1_":"Create a noise generator named _PARAM1_","Delete a noise generator and loose its settings.":"Delete a noise generator and loose its settings.","Delete a noise generator":"Delete a noise generator","Delete _PARAM1_ noise generator":"Delete _PARAM1_ noise generator","Delete all noise generators and loose their settings.":"Delete all noise generators and loose their settings.","Delete all noise generators":"Delete all noise generators","The seed is a number used to generate the random noise. Setting the same seed will result in the same random noise generation. It's for example useful to generate the same world, by saving this seed value and reusing it later to generate again a world.":"The seed is a number used to generate the random noise. Setting the same seed will result in the same random noise generation. It's for example useful to generate the same world, by saving this seed value and reusing it later to generate again a world.","Noise seed":"Noise seed","Change the noise seed to _PARAM1_":"Change the noise seed to _PARAM1_","Seed":"Seed","15 digits numbers maximum":"15 digits numbers maximum","Change the looping period on X used for noise generation. The noise will wrap-around on X.":"Change the looping period on X used for noise generation. The noise will wrap-around on X.","Noise looping period on X":"Noise looping period on X","Change the looping period on X of _PARAM2_: _PARAM1_":"Change the looping period on X of _PARAM2_: _PARAM1_","Looping period on X":"Looping period on X","Change the looping period on Y used for noise generation. The noise will wrap-around on Y.":"Change the looping period on Y used for noise generation. The noise will wrap-around on Y.","Noise looping period on Y":"Noise looping period on Y","Change the looping period on Y of _PARAM2_: _PARAM1_":"Change the looping period on Y of _PARAM2_: _PARAM1_","Looping period on Y":"Looping period on Y","Change the base frequency used for noise generation. A lower frequency will zoom in the noise.":"Change the base frequency used for noise generation. A lower frequency will zoom in the noise.","Noise base frequency":"Noise base frequency","Change the noise frequency of _PARAM2_: _PARAM1_":"Change the noise frequency of _PARAM2_: _PARAM1_","Change the number of octaves used for noise generation. It can be seen as layers of noise with different zoom.":"Change the number of octaves used for noise generation. It can be seen as layers of noise with different zoom.","Noise octaves":"Noise octaves","Change the number of noise octaves of _PARAM2_: _PARAM1_":"Change the number of noise octaves of _PARAM2_: _PARAM1_","Octaves":"Octaves","Change the persistence used for noise generation. At its default value \"0.5\", it halves the noise amplitude at each octave.":"Change the persistence used for noise generation. At its default value \"0.5\", it halves the noise amplitude at each octave.","Noise persistence":"Noise persistence","Change the noise persistence of _PARAM2_: _PARAM1_":"Change the noise persistence of _PARAM2_: _PARAM1_","Persistence":"Persistence","Change the lacunarity used for noise generation. At its default value \"2\", it doubles the frequency at each octave.":"Change the lacunarity used for noise generation. At its default value \"2\", it doubles the frequency at each octave.","Noise lacunarity":"Noise lacunarity","Change the noise lacunarity of _PARAM2_: _PARAM1_":"Change the noise lacunarity of _PARAM2_: _PARAM1_","Lacunarity":"Lacunarity","The seed used for noise generation.":"The seed used for noise generation.","The base frequency used for noise generation.":"The base frequency used for noise generation.","The number of octaves used for noise generation.":"The number of octaves used for noise generation.","Noise octaves number":"Noise octaves number","The persistence used for noise generation.":"The persistence used for noise generation.","The lacunarity used for noise generation.":"The lacunarity used for noise generation.","Camera Zoom":"Camera Zoom","Zoom camera smoothly with optional anchor point.":"Zoom camera smoothly with optional anchor point.","Change the camera zoom at a given speed (in factor per second).":"Change the camera zoom at a given speed (in factor per second).","Zoom camera with speed":"Zoom camera with speed","Zoom camera with speed: _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"Zoom camera with speed: _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)","Zoom speed":"Zoom speed","Zoom by a factor per second. 1: no effect, 2: zoom in x2 every second, 0.5: zoom out x2 every second.":"Zoom by a factor per second. 1: no effect, 2: zoom in x2 every second, 0.5: zoom out x2 every second.","Camera number (default: 0)":"Camera number (default: 0)","Change the camera zoom and keep an anchor point fixed on screen (instead of the center).":"Change the camera zoom and keep an anchor point fixed on screen (instead of the center).","Zoom with anchor":"Zoom with anchor","Change camera zoom to: _PARAM1_ with an anchor at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"Change camera zoom to: _PARAM1_ with an anchor at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)","Zoom":"Zoom","1: Initial zoom, 2: zoom in x2, 0.5: zoom out x2...":"1: Initial zoom, 2: zoom in x2, 0.5: zoom out x2...","Anchor X":"Anchor X","Anchor Y":"Anchor Y","Change the camera zoom at a given speed (in factor per second) and keep an anchor point fixed on screen (instead of the center).":"Change the camera zoom at a given speed (in factor per second) and keep an anchor point fixed on screen (instead of the center).","Zoom camera with speed and anchor":"Zoom camera with speed and anchor","Zoom camera with speed: _PARAM1_ and an anchror at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"Zoom camera with speed: _PARAM1_ and an anchror at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)","Cancellable draggable object":"Cancellable draggable object","Cancel drag and smoothly tween object back to original position.":"Cancel drag and smoothly tween object back to original position.","Allow to cancel the drag of an object and make it smoothly return to its original position (with a tween).":"Allow to cancel the drag of an object and make it smoothly return to its original position (with a tween).","Cancellable Draggable object":"Cancellable Draggable object","Draggable behavior":"Draggable behavior","Tween behavior":"Tween behavior","Original X":"Original X","Original Y":"Original Y","Cancel last drag.":"Cancel last drag.","Cancel drag (deprecated)":"Cancel drag (deprecated)","Cancel last dragging of _PARAM0_ in _PARAM2_ ms with easing _PARAM3_":"Cancel last dragging of _PARAM0_ in _PARAM2_ ms with easing _PARAM3_","Duration in milliseconds":"Duration in milliseconds","Cancel drag":"Cancel drag","Cancel last dragging of _PARAM0_ with easing _PARAM3_ in _PARAM2_ seconds":"Cancel last dragging of _PARAM0_ with easing _PARAM3_ in _PARAM2_ seconds","Duration in seconds":"Duration in seconds","Dragging is cancelled, the object is returning to its original position.":"Dragging is cancelled, the object is returning to its original position.","Dragging is cancelled":"Dragging is cancelled","_PARAM0_ dragging is cancelled":"_PARAM0_ dragging is cancelled","Checkbox (for Shape Painter)":"Checkbox (for Shape Painter)","Checkbox on Shape Painter. Toggle by click/touch, customizable appearance and halo.":"Checkbox on Shape Painter. Toggle by click/touch, customizable appearance and halo.","Checkbox that can be toggled by a left-click or touch.":"Checkbox that can be toggled by a left-click or touch.","Checkbox":"Checkbox","Checked":"Checked","Checkbox state":"Checkbox state","Halo size (hover). If blank, this is set to \"SideLength\".":"Halo size (hover). If blank, this is set to \"SideLength\".","Checkbox appearance":"Checkbox appearance","Halo opacity (hover)":"Halo opacity (hover)","Halo opacity (pressed)":"Halo opacity (pressed)","Enable interactions":"Enable interactions","State of the checkbox has changed. (Used in \"ToggleChecked\" function)":"State of the checkbox has changed. (Used in \"ToggleChecked\" function)","Primary color of checkbox. (Example: 24;119;211) Fill color when box is checked.":"Primary color of checkbox. (Example: 24;119;211) Fill color when box is checked.","Secondary color of checkbox. (Example: 255;255;255) Color of checkmark when box is checked.":"Secondary color of checkbox. (Example: 255;255;255) Color of checkmark when box is checked.","Length of each side (px) Minimum: 10":"Length of each side (px) Minimum: 10","Line width of checkmark (px) (Min: 1, Max: 1/4 * SideLength)":"Line width of checkmark (px) (Min: 1, Max: 1/4 * SideLength)","Border thickness (px) This border is only visible when the checkbox is unchecked.":"Border thickness (px) This border is only visible when the checkbox is unchecked.","Halo size (pressed). If blank, this is set to \"HaloRadiusHover * 1.1\"":"Halo size (pressed). If blank, this is set to \"HaloRadiusHover * 1.1\"","Check (or uncheck) the checkbox.":"Check (or uncheck) the checkbox.","Check (or uncheck) the checkbox":"Check (or uncheck) the checkbox","Add checkmark to _PARAM0_: _PARAM2_":"Add checkmark to _PARAM0_: _PARAM2_","Check the checkbox?":"Check the checkbox?","Enable or disable interactions with the checkbox. Users cannot interact while it is disabled.":"Enable or disable interactions with the checkbox. Users cannot interact while it is disabled.","Enable interactions with checkbox":"Enable interactions with checkbox","Enable interactions of _PARAM0_: _PARAM2_":"Enable interactions of _PARAM0_: _PARAM2_","Enable":"Enable","If checked, change to unchecked. If unchecked, change to checked.":"If checked, change to unchecked. If unchecked, change to checked.","Toggle checkmark":"Toggle checkmark","Toggle checkmark on _PARAM0_":"Toggle checkmark on _PARAM0_","Change the primary color of checkbox.":"Change the primary color of checkbox.","Primary color of checkbox":"Primary color of checkbox","Change the primary color of _PARAM0_: _PARAM2_":"Change the primary color of _PARAM0_: _PARAM2_","Primary color":"Primary color","Change the secondary color of checkbox.":"Change the secondary color of checkbox.","Secondary color of checkbox":"Secondary color of checkbox","Change the secondary color of _PARAM0_: _PARAM2_":"Change the secondary color of _PARAM0_: _PARAM2_","Secondary color":"Secondary color","Change the halo opacity when pressed.":"Change the halo opacity when pressed.","Halo opacity when pressed":"Halo opacity when pressed","Change the halo opacity of _PARAM0_ when pressed: _PARAM2_":"Change the halo opacity of _PARAM0_ when pressed: _PARAM2_","Halo opacity":"Halo opacity","Change the halo opacity when hovered.":"Change the halo opacity when hovered.","Halo opacity when hovered":"Halo opacity when hovered","Change the halo opacity of _PARAM0_ when hovered: _PARAM2_":"Change the halo opacity of _PARAM0_ when hovered: _PARAM2_","Change the halo radius when pressed.":"Change the halo radius when pressed.","Halo radius when pressed":"Halo radius when pressed","Change the halo radius of _PARAM0_ when pressed: _PARAM2_ px":"Change the halo radius of _PARAM0_ when pressed: _PARAM2_ px","Halo radius":"Halo radius","Change the halo radius when hovered. This size is also used to detect interaction with the checkbox.":"Change the halo radius when hovered. This size is also used to detect interaction with the checkbox.","Halo radius when hovered":"Halo radius when hovered","Change the halo radius of _PARAM0_ when hovered: _PARAM2_ px":"Change the halo radius of _PARAM0_ when hovered: _PARAM2_ px","Change the border thickness of checkbox.":"Change the border thickness of checkbox.","Border thickness of checkbox":"Border thickness of checkbox","Change the border thickness of _PARAM0_: _PARAM2_ px":"Change the border thickness of _PARAM0_: _PARAM2_ px","Track thickness":"Track thickness","Change the side length of checkbox.":"Change the side length of checkbox.","Side length of checkbox":"Side length of checkbox","Change the side length of _PARAM0_: _PARAM2_ px":"Change the side length of _PARAM0_: _PARAM2_ px","Track width (px)":"Track width (px)","Change the line width of checkmark.":"Change the line width of checkmark.","Line width of checkmark":"Line width of checkmark","Change the line width of _PARAM0_: _PARAM2_ px":"Change the line width of _PARAM0_: _PARAM2_ px","Line width (px)":"Line width (px)","Check if the checkbox is checked.":"Check if the checkbox is checked.","Is checked":"Is checked","_PARAM0_ is checked":"_PARAM0_ is checked","Check if the checkbox interations are enabled.":"Check if the checkbox interations are enabled.","Interactions enabled":"Interactions enabled","Interactions of _PARAM0_ are enabled":"Interactions of _PARAM0_ are enabled","Return the color used to draw the outline of the checkbox (when unchecked) and the fill color (when checked).":"Return the color used to draw the outline of the checkbox (when unchecked) and the fill color (when checked).","Change the maximum value of _PARAM0_: _PARAM2_":"Change the maximum value of _PARAM0_: _PARAM2_","Return the color used to fill the checkbox (when unchecked) and to draw the checkmark (when checked).":"Return the color used to fill the checkbox (when unchecked) and to draw the checkmark (when checked).","Return the radius of the halo while the checkbox is touched or clicked.":"Return the radius of the halo while the checkbox is touched or clicked.","Halo radius while touched or clicked":"Halo radius while touched or clicked","Return the opacity of the halo while the checkbox is touched or clicked.":"Return the opacity of the halo while the checkbox is touched or clicked.","Halo opacity (while touched or clicked)":"Halo opacity (while touched or clicked)","Return the radius of the halo when the mouse is hovering near the checkbox.":"Return the radius of the halo when the mouse is hovering near the checkbox.","Halo radius (during hover)":"Halo radius (during hover)","Return the opacity of the halo when the mouse is hovering near the checkbox.":"Return the opacity of the halo when the mouse is hovering near the checkbox.","Halo opacity (during hover)":"Halo opacity (during hover)","Return the line width of checkmark (pixels).":"Return the line width of checkmark (pixels).","Line width":"Line width","Return the side length of checkbox (pixels).":"Return the side length of checkbox (pixels).","Side length":"Side length","Return the border thickness of checkbox (pixels).":"Return the border thickness of checkbox (pixels).","Border thickness":"Border thickness","Check if the checkbox is being pressed by mouse or touch.":"Check if the checkbox is being pressed by mouse or touch.","Checkbox is being pressed":"Checkbox is being pressed","_PARAM0_ is being pressed by mouse or touch":"_PARAM0_ is being pressed by mouse or touch","Update the hitbox.":"Update the hitbox.","Update hitbox":"Update hitbox","Update the hitbox of _PARAM0_":"Update the hitbox of _PARAM0_","Checkpoints":"Checkpoints","Respawn objects at checkpoints.":"Respawn objects at checkpoints.","Game mechanic":"Game mechanic","Update a checkpoint of an object.":"Update a checkpoint of an object.","Save checkpoint":"Save checkpoint","Save checkpoint _PARAM4_ of _PARAM1_ to _PARAM2_ (x-axis), _PARAM3_ (y-axis)":"Save checkpoint _PARAM4_ of _PARAM1_ to _PARAM2_ (x-axis), _PARAM3_ (y-axis)","Save checkpoint of object":"Save checkpoint of object","X position":"X position","Y position":"Y position","Checkpoint name":"Checkpoint name","Change the position of the object to the saved checkpoint.":"Change the position of the object to the saved checkpoint.","Load checkpoint":"Load checkpoint","Move _PARAM2_ to checkpoint _PARAM3_ of _PARAM1_":"Move _PARAM2_ to checkpoint _PARAM3_ of _PARAM1_","Load checkpoint from object":"Load checkpoint from object","Change position of object":"Change position of object","Ignore (possibly) empty checkpoints":"Ignore (possibly) empty checkpoints","Loading not yet saved checkpoints will (by default) set the position to the coordinate 0;0. Select \"yes\" to completely ignore non-existant checkpoints. To define an alternative checkpoint for it, create a new event and use the \"Checkpoint exists\" condition, save the wanted checkpoint as the action.":"Loading not yet saved checkpoints will (by default) set the position to the coordinate 0;0. Select \"yes\" to completely ignore non-existant checkpoints. To define an alternative checkpoint for it, create a new event and use the \"Checkpoint exists\" condition, save the wanted checkpoint as the action.","Check if a checkpoint has a position saved / does exist.":"Check if a checkpoint has a position saved / does exist.","Checkpoint exists":"Checkpoint exists","Checkpoint _PARAM2_ of _PARAM1_ exists":"Checkpoint _PARAM2_ of _PARAM1_ exists","Check checkpoint from object":"Check checkpoint from object","Clipboard":"Clipboard","Read and write text to/from the system clipboard.":"Read and write text to/from the system clipboard.","Read the text from the clipboard asynchronously. \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"Read the text from the clipboard asynchronously. \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.","Get text from the clipboard":"Get text from the clipboard","Read clipboard and store text in _PARAM1_":"Read clipboard and store text in _PARAM1_","Callback variable where to store the clipboard contents":"Callback variable where to store the clipboard contents","Write the text in the clipboard.":"Write the text in the clipboard.","Write text to the clipboard":"Write text to the clipboard","Write _PARAM1_ to clipboard":"Write _PARAM1_ to clipboard","Text to write to clipboard":"Text to write to clipboard","Read the text from the clipboard asynchronously. As this is \"asynchronous\", the variable won't be immediately filled with the text from the clipboard. You will have to wait a few frames before it will be. If you want your subsequent actions and subevents to automatically wait for the read to finish, use the waiting version of this action instead (recomended). \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"Read the text from the clipboard asynchronously. As this is \"asynchronous\", the variable won't be immediately filled with the text from the clipboard. You will have to wait a few frames before it will be. If you want your subsequent actions and subevents to automatically wait for the read to finish, use the waiting version of this action instead (recomended). \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.","(No waiting) Get text from the clipboard":"(No waiting) Get text from the clipboard","Callback variable where to store the result":"Callback variable where to store the result","[DEPRECATED] Read the text from the clipboard (Windows, macOS, Linux only)":"[DEPRECATED] Read the text from the clipboard (Windows, macOS, Linux only)","[DEPRECATED] Get text from the clipboard (Windows, macOS, Linux)":"[DEPRECATED] Get text from the clipboard (Windows, macOS, Linux)","Volume settings":"Volume settings","Collapsible volume menu object with slider and mute button.":"Collapsible volume menu object with slider and mute button.","Check if the events are running for the editor.":"Check if the events are running for the editor.","Editor is running":"Editor is running","Events are running for the editor":"Events are running for the editor","Collapsible volume setting menu.":"Collapsible volume setting menu.","Show the volum controls.":"Show the volum controls.","Open volum controls":"Open volum controls","Open _PARAM0_ volum controls":"Open _PARAM0_ volum controls","Hide the volum controls.":"Hide the volum controls.","Close volum controls":"Close volum controls","Close _PARAM0_ volum controls":"Close _PARAM0_ volum controls","Color Conversion":"Color Conversion","Convert colors between RGB, HSV, HSL, hex, named. Blend and WCAG luminance.":"Convert colors between RGB, HSV, HSL, hex, named. Blend and WCAG luminance.","Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".":"Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".","Hexadecimal to RGB":"Hexadecimal to RGB","Hex value":"Hex value","Calculate luminance of a RGB color. Example input: \"0;128;255\".":"Calculate luminance of a RGB color. Example input: \"0;128;255\".","Luminance from RGB":"Luminance from RGB","RGB color":"RGB color","Calculate luminance of a hexadecimal color. Example input: \"0459AF\".":"Calculate luminance of a hexadecimal color. Example input: \"0459AF\".","Luminance from hexadecimal":"Luminance from hexadecimal","Blend two RGB colors by applying a weighted mean.":"Blend two RGB colors by applying a weighted mean.","Blend RGB colors":"Blend RGB colors","First RGB color":"First RGB color","Second RGB color":"Second RGB color","Ratio":"Ratio","Range: 0 to 1, where 0 gives the first color and 1 gives the second color":"Range: 0 to 1, where 0 gives the first color and 1 gives the second color","Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".":"Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".","RGB to hexadecimal":"RGB to hexadecimal","RGB value":"RGB value","Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".":"Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".","RGB to HSL":"RGB to HSL","Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).":"Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).","HSV to RGB":"HSV to RGB","Hue 0-360":"Hue 0-360","Saturation 0-100":"Saturation 0-100","Value 0-100":"Value 0-100","Converts a RGB string into a HSV string. Example input: \"0;128;255\".":"Converts a RGB string into a HSV string. Example input: \"0;128;255\".","RGB to HSV":"RGB to HSV","Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.":"Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.","Color name to RGB":"Color name to RGB","Name of a color":"Name of a color","Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).":"Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).","HSL to RGB":"HSL to RGB","Lightness 0-100":"Lightness 0-100","Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.":"Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.","Hue to RGB":"Hue to RGB","Compressor":"Compressor","Compress and decompress strings using zip algorithm for smaller data storage.":"Compress and decompress strings using zip algorithm for smaller data storage.","Decompress a string.":"Decompress a string.","Decompress String":"Decompress String","String to decompress":"String to decompress","Compress a string.":"Compress a string.","Compress String":"Compress String","String to compress":"String to compress","Copy camera settings":"Copy camera settings","Copy camera position, zoom, and rotation from one layer to another.":"Copy camera position, zoom, and rotation from one layer to another.","Copy camera settings of a layer and apply them to another layer.":"Copy camera settings of a layer and apply them to another layer.","Copy camera settings of _PARAM1_ layer and apply them to _PARAM3_ layer (X position: _PARAM5_, Y position: _PARAM6_, Zoom: _PARAM7_, Angle: _PARAM8_)":"Copy camera settings of _PARAM1_ layer and apply them to _PARAM3_ layer (X position: _PARAM5_, Y position: _PARAM6_, Zoom: _PARAM7_, Angle: _PARAM8_)","Source layer":"Source layer","Source camera":"Source camera","Destination layer":"Destination layer","Destination camera":"Destination camera","Clone X position":"Clone X position","Clone Y position":"Clone Y position","Clone zoom":"Clone zoom","Clone angle":"Clone angle","CrazyGames SDK v3":"CrazyGames SDK v3","CrazyGames SDK: display ads, user accounts, game events for CrazyGames hosting.":"CrazyGames SDK: display ads, user accounts, game events for CrazyGames hosting.","Third-party":"Third-party","Get link account response.":"Get link account response.","Link account response":"Link account response","the last error from the CrazyGames API.":"the last error from the CrazyGames API.","Get last error":"Get last error","CrazyGames API last error is":"CrazyGames API last error is","Check if an user is signed into CrazyGames. If signed in, retrieves username and profile picture.":"Check if an user is signed into CrazyGames. If signed in, retrieves username and profile picture.","Check and load if an user is signed in CrazyGames":"Check and load if an user is signed in CrazyGames","Check if user is signed in CrazyGames":"Check if user is signed in CrazyGames","Check if the user is signed in.":"Check if the user is signed in.","User is signed in":"User is signed in","Return an invite link.":"Return an invite link.","Invite link":"Invite link","Room id":"Room id","Display an invite button.":"Display an invite button.","Display invite button":"Display invite button","Display an invite button for the room id: _PARAM1_":"Display an invite button for the room id: _PARAM1_","Load CrazyGames SDK.":"Load CrazyGames SDK.","Load SDK":"Load SDK","Load CrazyGames SDK":"Load CrazyGames SDK","Check if the CrazyGames SDK is ready to be used.":"Check if the CrazyGames SDK is ready to be used.","CrazyGames SDK is ready":"CrazyGames SDK is ready","Let CrazyGames know gameplay started.":"Let CrazyGames know gameplay started.","Gameplay started":"Gameplay started","Let CrazyGames know gameplay started":"Let CrazyGames know gameplay started","Let CrazyGames know gameplay stopped.":"Let CrazyGames know gameplay stopped.","Gameplay stopped":"Gameplay stopped","Let CrazyGames know gameplay stopped":"Let CrazyGames know gameplay stopped","Let CrazyGames know loading started.":"Let CrazyGames know loading started.","Loading started":"Loading started","Let CrazyGames know loading started":"Let CrazyGames know loading started","Let CrazyGames know loading stopped.":"Let CrazyGames know loading stopped.","Loading stopped":"Loading stopped","Let CrazyGames know loading stopped":"Let CrazyGames know loading stopped","Display a video ad. The game is automatically muted while the video is playing.":"Display a video ad. The game is automatically muted while the video is playing.","Display video ad":"Display video ad","Display _PARAM1_ video ad":"Display _PARAM1_ video ad","Ad Type":"Ad Type","Checks if a video ad just finished playing successfully.":"Checks if a video ad just finished playing successfully.","Video ad just finished playing":"Video ad just finished playing","Checks if a video ad is playing.":"Checks if a video ad is playing.","Video ad is playing":"Video ad is playing","Check if the user changed.":"Check if the user changed.","User changed":"User changed","Check if a video ad had an error.":"Check if a video ad had an error.","Video ad had an error":"Video ad had an error","Generate an invite link to invite friends to join your game sessions. This URL can be added to the clipboard or displayed in the game to let the user select it.":"Generate an invite link to invite friends to join your game sessions. This URL can be added to the clipboard or displayed in the game to let the user select it.","Generate an invite link":"Generate an invite link","Generate an invite link for _PARAM1_":"Generate an invite link for _PARAM1_","Display an happy time by emitting sparkling confetti. The celebration should remain a special moment.":"Display an happy time by emitting sparkling confetti. The celebration should remain a special moment.","Display happy time":"Display happy time","Scan for ad blockers.":"Scan for ad blockers.","Scan for ad blockers":"Scan for ad blockers","Check if user is using an ad blocker. This condition is always false before the \"Scan for ad blockers\" is called.":"Check if user is using an ad blocker. This condition is always false before the \"Scan for ad blockers\" is called.","Ad blocker is detected":"Ad blocker is detected","Display a banner that can be called once per 60 seconds.":"Display a banner that can be called once per 60 seconds.","Display a banner":"Display a banner","Display a banner: _PARAM1_ at position _PARAM3_ ; _PARAM4_ with size _PARAM2_":"Display a banner: _PARAM1_ at position _PARAM3_ ; _PARAM4_ with size _PARAM2_","Banner name":"Banner name","Ad size":"Ad size","Position X":"Position X","Position Y":"Position Y","Hide a banner.":"Hide a banner.","Hide a banner":"Hide a banner","Hide the banner: _PARAM1_":"Hide the banner: _PARAM1_","Hide all banners.":"Hide all banners.","Hide all banners":"Hide all banners","Hide all the banners":"Hide all the banners","Hide the invite button.":"Hide the invite button.","Hide invite button":"Hide invite button","Get the environment.":"Get the environment.","Get the environment":"Get the environment","display environment into _PARAM1_":"display environment into _PARAM1_","Retrieve user data.":"Retrieve user data.","Retrieve user data":"Retrieve user data","Show CrazyGames login window.":"Show CrazyGames login window.","Show CrazyGames login window":"Show CrazyGames login window","Show account link prompt.":"Show account link prompt.","Show account link prompt":"Show account link prompt","the username.":"the username.","Username":"Username","Username is":"Username is","the CrazyGames User ID.":"the CrazyGames User ID.","CrazyGames User ID":"CrazyGames User ID","CrazyGames user ID is":"CrazyGames user ID is","Gets the signed-in user's profile picture URL.":"Gets the signed-in user's profile picture URL.","Gets the signed-in user's profile picture URL":"Gets the signed-in user's profile picture URL","Return true when the user prefers to instantly join a lobby.":"Return true when the user prefers to instantly join a lobby.","Is instantly joining a lobby":"Is instantly joining a lobby","Return true if the user prefers the chat disabled.":"Return true if the user prefers the chat disabled.","Is the user chat disabled":"Is the user chat disabled","Retrieves user system info, browser, version and device.":"Retrieves user system info, browser, version and device.","Retrieves user system info":"Retrieves user system info","Get invite parameters if user is invited to this game.":"Get invite parameters if user is invited to this game.","Get invite parameters":"Get invite parameters","Param":"Param","Save the session data.":"Save the session data.","Save session data":"Save session data","Save session data, with the id: _PARAM1_ to: _PARAM2_":"Save session data, with the id: _PARAM1_ to: _PARAM2_","Id":"Id","Get user session data, if there is no saved data, \"null\" will be returned.":"Get user session data, if there is no saved data, \"null\" will be returned.","Get user session data":"Get user session data","the availability of the user's account.":"the availability of the user's account.","Is user account available":"Is user account available","The CrazyGames user account is available":"The CrazyGames user account is available","Retrieve the user's session token for authentication.":"Retrieve the user's session token for authentication.","Get User Token":"Get User Token","Retrieve the authentication token from Xsolla.":"Retrieve the authentication token from Xsolla.","Get Xsolla Token":"Get Xsolla Token","Generate Xsolla token.":"Generate Xsolla token.","Generate Xsolla token":"Generate Xsolla token","Cursor movement conditions":"Cursor movement conditions","Conditions to detect if the cursor is currently moving or still.":"Conditions to detect if the cursor is currently moving or still.","Check if the cursor has stayed still for the specified time on the default layer.":"Check if the cursor has stayed still for the specified time on the default layer.","Cursor stays still":"Cursor stays still","Cursor has stayed still for _PARAM1_ seconds":"Cursor has stayed still for _PARAM1_ seconds","Check if the cursor is moving on the default layer.":"Check if the cursor is moving on the default layer.","Cursor is moving":"Cursor is moving","Cursor type":"Cursor type","Change mouse cursor type (pointer, crosshair, etc). Auto-change on object hover.":"Change mouse cursor type (pointer, crosshair, etc). Auto-change on object hover.","Change the type of the cursor.":"Change the type of the cursor.","Change the cursor to _PARAM1_":"Change the cursor to _PARAM1_","The new cursor type":"The new cursor type","List of available cursors on https://developer.mozilla.org/en-US/docs/Web/CSS/cursor":"List of available cursors on https://developer.mozilla.org/en-US/docs/Web/CSS/cursor","Do change the type of the cursor.":"Do change the type of the cursor.","Do change cursor type":"Do change cursor type","Do change the cursor to _PARAM1_":"Do change the cursor to _PARAM1_","Change the cursor appearence when the object is hovered (on Windows, macOS or Linux).":"Change the cursor appearence when the object is hovered (on Windows, macOS or Linux).","Custom cursor when hovered":"Custom cursor when hovered","The cursor type":"The cursor type","See https://developer.mozilla.org/en-US/docs/Web/CSS/cursor for a list of possible cursors.":"See https://developer.mozilla.org/en-US/docs/Web/CSS/cursor for a list of possible cursors.","Curved movement":"Curved movement","Move objects on curved paths.":"Move objects on curved paths.","Append a cubic Bezier curve at the end of the path.":"Append a cubic Bezier curve at the end of the path.","Append a curve":"Append a curve","Append a curve to the path _PARAM1_ relatively to the end: _PARAM8_, first control point: _PARAM2_ ; _PARAM3_, second control point: _PARAM4_ ; _PARAM5_, destination: _PARAM6_ ; _PARAM7_":"Append a curve to the path _PARAM1_ relatively to the end: _PARAM8_, first control point: _PARAM2_ ; _PARAM3_, second control point: _PARAM4_ ; _PARAM5_, destination: _PARAM6_ ; _PARAM7_","Path name":"Path name","First control point X":"First control point X","First control point Y":"First control point Y","Second Control point X":"Second Control point X","Second Control point Y":"Second Control point Y","Destination point X":"Destination point X","Destination point Y":"Destination point Y","Relative":"Relative","Append a cubic Bezier curve to the end of an object's path. The first control point is symmetrical to the last control point of the path.":"Append a cubic Bezier curve to the end of an object's path. The first control point is symmetrical to the last control point of the path.","Append a smooth curve":"Append a smooth curve","Append a smooth curve to the path _PARAM1_ relatively to the end: _PARAM6_, second control point: _PARAM2_ ; _PARAM3_, destination: _PARAM4_ ; _PARAM5_":"Append a smooth curve to the path _PARAM1_ relatively to the end: _PARAM6_, second control point: _PARAM2_ ; _PARAM3_, destination: _PARAM4_ ; _PARAM5_","Append a line at the end of the path.":"Append a line at the end of the path.","Append a line":"Append a line","Append a line to the path _PARAM1_ relatively to the end: _PARAM4_, destination: _PARAM2_ ; _PARAM3_":"Append a line to the path _PARAM1_ relatively to the end: _PARAM4_, destination: _PARAM2_ ; _PARAM3_","Append a line to close the path.":"Append a line to close the path.","Close a path":"Close a path","Close the path _PARAM1_":"Close the path _PARAM1_","Create a path from SVG commands, for instance \"M 0,0 C 55,0 100,45 100,100\". Commands are: M = Move, C = Curve, S = Smooth, L = Line. Lower case is for relative positions. The preferred way to build the commands is to use an external SVG editor like Inkscape.":"Create a path from SVG commands, for instance \"M 0,0 C 55,0 100,45 100,100\". Commands are: M = Move, C = Curve, S = Smooth, L = Line. Lower case is for relative positions. The preferred way to build the commands is to use an external SVG editor like Inkscape.","Create a path from SVG":"Create a path from SVG","Create the path _PARAM1_ from the SVG path commands _PARAM2_":"Create the path _PARAM1_ from the SVG path commands _PARAM2_","SVG commands":"SVG commands","Return the SVG commands of a path.":"Return the SVG commands of a path.","SVG path commands":"SVG path commands","Delete a path from the memory.":"Delete a path from the memory.","Delete a path":"Delete a path","Delete the path: _PARAM1_":"Delete the path: _PARAM1_","Append a path to another path.":"Append a path to another path.","Append a path":"Append a path","Append the path _PARAM2_ to the path _PARAM1_":"Append the path _PARAM2_ to the path _PARAM1_","Name of the path to modify":"Name of the path to modify","Name of the path to add to the first one":"Name of the path to add to the first one","Duplicate a path.":"Duplicate a path.","Duplicate a path":"Duplicate a path","Create path _PARAM1_ as a duplicate of path _PARAM2_":"Create path _PARAM1_ as a duplicate of path _PARAM2_","Name of the path to create":"Name of the path to create","Name of the source path":"Name of the source path","Append a path to another path. The appended path is rotated to have a smooth junction.":"Append a path to another path. The appended path is rotated to have a smooth junction.","Append a rotated path":"Append a rotated path","Append the path _PARAM2_ rotated to connect to the path _PARAM1_ flip: _PARAM3_":"Append the path _PARAM2_ rotated to connect to the path _PARAM1_ flip: _PARAM3_","Flip the appended path":"Flip the appended path","Return the speed scale on Y axis. This is used to change the view point of a path (top-dwon or isometry).":"Return the speed scale on Y axis. This is used to change the view point of a path (top-dwon or isometry).","Speed scale Y":"Speed scale Y","Change the speed scale on Y axis. This allows to change the view point of a path (top-dwon or isometry).":"Change the speed scale on Y axis. This allows to change the view point of a path (top-dwon or isometry).","Change the speed scale Y of the path _PARAM1_ to _PARAM2_":"Change the speed scale Y of the path _PARAM1_ to _PARAM2_","Speed scale on Y axis (0.5 for pixel isometry)":"Speed scale on Y axis (0.5 for pixel isometry)","Invert a path, the end becomes the beginning.":"Invert a path, the end becomes the beginning.","Invert a path":"Invert a path","Invert the path _PARAM1_":"Invert the path _PARAM1_","Flip a path.":"Flip a path.","Flip a path":"Flip a path","Flip the path _PARAM1_":"Flip the path _PARAM1_","Flip a path horizontally.":"Flip a path horizontally.","Flip a path horizontally":"Flip a path horizontally","Flip the path _PARAM1_ horizontally":"Flip the path _PARAM1_ horizontally","Flip a path vertically.":"Flip a path vertically.","Flip a path vertically":"Flip a path vertically","Flip the path _PARAM1_ vertically":"Flip the path _PARAM1_ vertically","Scale a path.":"Scale a path.","Scale a path":"Scale a path","Scale the path _PARAM1_ by _PARAM2_ ; _PARAM3_":"Scale the path _PARAM1_ by _PARAM2_ ; _PARAM3_","Scale on X axis":"Scale on X axis","Scale on Y axis":"Scale on Y axis","Rotate a path.":"Rotate a path.","Rotate a path":"Rotate a path","Rotate _PARAM2_° the path _PARAM1_":"Rotate _PARAM2_° the path _PARAM1_","Rotation angle":"Rotation angle","Check if a path is closed.":"Check if a path is closed.","Is closed":"Is closed","The path _PARAM1_ is closed":"The path _PARAM1_ is closed","Return the position on X axis of the path for a given length.":"Return the position on X axis of the path for a given length.","Path X":"Path X","Length on the path":"Length on the path","Return the position on Y axis of the path for a given length.":"Return the position on Y axis of the path for a given length.","Path Y":"Path Y","Return the direction angle of the path for a given length (in degree).":"Return the direction angle of the path for a given length (in degree).","Path angle":"Path angle","Return the length of the path.":"Return the length of the path.","Path length":"Path length","Return the displacement on X axis of the path end.":"Return the displacement on X axis of the path end.","Path end X":"Path end X","Return the displacement on Y axis of the path end.":"Return the displacement on Y axis of the path end.","Path end Y":"Path end Y","Return the number of lines or curves that make the path.":"Return the number of lines or curves that make the path.","Path element count":"Path element count","Return the origin position on X axis of a curve.":"Return the origin position on X axis of a curve.","Origin X":"Origin X","Curve index":"Curve index","Return the origin position on Y axis of a curve.":"Return the origin position on Y axis of a curve.","Origin Y":"Origin Y","Return the first control point position on X axis of a curve.":"Return the first control point position on X axis of a curve.","First control X":"First control X","Return the first control point position on Y axis of a curve.":"Return the first control point position on Y axis of a curve.","First control Y":"First control Y","Return the second control point position on X axis of a curve.":"Return the second control point position on X axis of a curve.","Second control X":"Second control X","Return the second control point position on Y axis of a curve.":"Return the second control point position on Y axis of a curve.","Second control Y":"Second control Y","Return the target position on X axis of a curve.":"Return the target position on X axis of a curve.","Return the target position on Y axis of a curve.":"Return the target position on Y axis of a curve.","Path exists.":"Path exists.","Path exists":"Path exists","Path _PARAM1_ exists":"Path _PARAM1_ exists","Move objects on curved paths in a given duration and tween easing function.":"Move objects on curved paths in a given duration and tween easing function.","Movement on a curve (duration-based)":"Movement on a curve (duration-based)","Rotation offset":"Rotation offset","Flip on X to go back":"Flip on X to go back","Flip on Y to go back":"Flip on Y to go back","Speed scale":"Speed scale","Pause duration before going back":"Pause duration before going back","Viewpoint":"Viewpoint","Set the the object on the path according to the current length.":"Set the the object on the path according to the current length.","Update position":"Update position","Update the position of _PARAM0_ on the path":"Update the position of _PARAM0_ on the path","Move the object to a position by following a path.":"Move the object to a position by following a path.","Move on path to a position":"Move on path to a position","Move _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"Move _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing","The path can be define with the \"Append curve\" action.":"The path can be define with the \"Append curve\" action.","Number of repetitions":"Number of repetitions","Destination X":"Destination X","Destination Y":"Destination Y","Move the object to a position by following a path and go back.":"Move the object to a position by following a path and go back.","Move back and forth to a position":"Move back and forth to a position","Move back and forth _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM8_ seconds before going back and loop: _PARAM9_":"Move back and forth _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM8_ seconds before going back and loop: _PARAM9_","Duration to wait before going back":"Duration to wait before going back","Loop":"Loop","Move the object by following a path.":"Move the object by following a path.","Move on path":"Move on path","Move _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"Move _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing","Move the object by following a path and go back.":"Move the object by following a path and go back.","Move back and forth":"Move back and forth","Move back and forth _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM6_ seconds before going back and loop: _PARAM7_":"Move back and forth _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM6_ seconds before going back and loop: _PARAM7_","Check if the object has reached one of the 2 ends of the path.":"Check if the object has reached one of the 2 ends of the path.","Reached an end":"Reached an end","_PARAM0_ reached an end of the path":"_PARAM0_ reached an end of the path","Check if the object has finished to move on the path.":"Check if the object has finished to move on the path.","Finished to move":"Finished to move","_PARAM0_ has finished to move":"_PARAM0_ has finished to move","Return the angle of movement on its path.":"Return the angle of movement on its path.","Movement angle":"Movement angle","Draw the object trajectory.":"Draw the object trajectory.","Draw the trajectory":"Draw the trajectory","Draw trajectory of _PARAM0_ on _PARAM2_":"Draw trajectory of _PARAM0_ on _PARAM2_","Shape painter":"Shape painter","Change the transformation to apply to the path.":"Change the transformation to apply to the path.","Path transformation":"Path transformation","Change the path trasformation of _PARAM0_ to origin _PARAM2_; _PARAM3_ scale by _PARAM4_ and a rotation of _PARAM5_°":"Change the path trasformation of _PARAM0_ to origin _PARAM2_; _PARAM3_ scale by _PARAM4_ and a rotation of _PARAM5_°","Scale":"Scale","Angle":"Angle","Initialize the movement state.":"Initialize the movement state.","Initialize the movement":"Initialize the movement","Initialize the movement of _PARAM0_":"Initialize the movement of _PARAM0_","Return the number of repetitions between the current position and the origin.":"Return the number of repetitions between the current position and the origin.","Repetition done":"Repetition done","Return the position on one repeated path.":"Return the position on one repeated path.","Path position":"Path position","Return the progress on the full path from 0 to 1, where 0 means the origin and 1 the end.":"Return the progress on the full path from 0 to 1, where 0 means the origin and 1 the end.","Progress":"Progress","Return the length of the path (one repetition only).":"Return the length of the path (one repetition only).","Return the speed scale on Y axis of the path.":"Return the speed scale on Y axis of the path.","Path speed scale Y":"Path speed scale Y","Return the angle to use when the object is going back or not.":"Return the angle to use when the object is going back or not.","Back or forth angle":"Back or forth angle","Move objects on curved paths at a given speed.":"Move objects on curved paths at a given speed.","Movement on a curve (speed-based)":"Movement on a curve (speed-based)","Rotation":"Rotation","Change the path followed by an object.":"Change the path followed by an object.","Follow a path":"Follow a path","_PARAM0_ follow the path: _PARAM2_ repeated _PARAM3_ times and loop: _PARAM4_":"_PARAM0_ follow the path: _PARAM2_ repeated _PARAM3_ times and loop: _PARAM4_","Change the path followed by an object to reach a position.":"Change the path followed by an object to reach a position.","Follow a path to a position":"Follow a path to a position","_PARAM0_ follow the path _PARAM2_ repeated _PARAM3_ times to reach _PARAM5_ ; _PARAM6_ and loop: _PARAM4_":"_PARAM0_ follow the path _PARAM2_ repeated _PARAM3_ times to reach _PARAM5_ ; _PARAM6_ and loop: _PARAM4_","the length between the trajectory origin and the current position without counting the loops.":"the length between the trajectory origin and the current position without counting the loops.","Position on the loop":"Position on the loop","the length from the trajectory origin in the current loop":"the length from the trajectory origin in the current loop","the number time the object loop the trajectory.":"the number time the object loop the trajectory.","Current loop":"Current loop","the current loop":"the current loop","the length between the trajectory origin and the current position counting the loops.":"the length between the trajectory origin and the current position counting the loops.","Position on the path":"Position on the path","the length from the trajectory origin counting the loops":"the length from the trajectory origin counting the loops","Change the position of the object on the path.":"Change the position of the object on the path.","Change the position of _PARAM0_ on the path at the length _PARAM2_":"Change the position of _PARAM0_ on the path at the length _PARAM2_","Length":"Length","Check if the length from the trajectory origin is lesser than a value.":"Check if the length from the trajectory origin is lesser than a value.","Current length":"Current length","_PARAM0_ is less than _PARAM2_ pixels away from the trajectory origin":"_PARAM0_ is less than _PARAM2_ pixels away from the trajectory origin","Length from the trajectory origin (in pixels)":"Length from the trajectory origin (in pixels)","Check if the object has reached the origin position of the path.":"Check if the object has reached the origin position of the path.","Reached path origin":"Reached path origin","_PARAM0_ reached the path beginning":"_PARAM0_ reached the path beginning","Check if the object has reached the target position of the path.":"Check if the object has reached the target position of the path.","Reached path target":"Reached path target","_PARAM0_ reached the path target":"_PARAM0_ reached the path target","Reach an end":"Reach an end","Check if the object can still move in the current direction.":"Check if the object can still move in the current direction.","Can move further":"Can move further","_PARAM0_ can move further on its path":"_PARAM0_ can move further on its path","the speed of the object.":"the speed of the object.","the speed":"the speed","Change the current speed of the object.":"Change the current speed of the object.","Change the speed of _PARAM0_ to _PARAM2_":"Change the speed of _PARAM0_ to _PARAM2_","Speed (in pixels per second)":"Speed (in pixels per second)","Make an object accelerate until it reaches a given speed.":"Make an object accelerate until it reaches a given speed.","Accelerate":"Accelerate","_PARAM0_ accelerate at _PARAM3_ to reach the speed of _PARAM2_":"_PARAM0_ accelerate at _PARAM3_ to reach the speed of _PARAM2_","Targeted speed (in pixels per second)":"Targeted speed (in pixels per second)","Acceleration (in pixels per second per second)":"Acceleration (in pixels per second per second)","Make an object accelerate to reaches a speed in a given amount of time.":"Make an object accelerate to reaches a speed in a given amount of time.","Accelerate during":"Accelerate during","_PARAM0_ accelerate during _PARAM3_ seconds to reach the speed of _PARAM2_":"_PARAM0_ accelerate during _PARAM3_ seconds to reach the speed of _PARAM2_","Repeated path position":"Repeated path position","Return the length of the complete trajectory (without looping).":"Return the length of the complete trajectory (without looping).","Total length":"Total length","Return the path origin on X axis of the object.":"Return the path origin on X axis of the object.","Path origin X":"Path origin X","the path origin on X axis":"the path origin on X axis","Return the path origin on Y axis of the object.":"Return the path origin on Y axis of the object.","Path origin Y":"Path origin Y","the path origin on Y axis":"the path origin on Y axis","Depth effect":"Depth effect","Scale objects based on Y position to simulate depth.":"Scale objects based on Y position to simulate depth.","The scale of the object decreases the closer it is to the horizon, giving the illusion that the object is travelling away from the viewer.":"The scale of the object decreases the closer it is to the horizon, giving the illusion that the object is travelling away from the viewer.","Max scale when the object is at the bottom of the screen (Default: 1)":"Max scale when the object is at the bottom of the screen (Default: 1)","Y position that represents a horizon where objects appear infinitely small (Default: 0)":"Y position that represents a horizon where objects appear infinitely small (Default: 0)","Exponential rate of change (Default: 2)":"Exponential rate of change (Default: 2)","Percent away from the horizon":"Percent away from the horizon","Percent away from the horizon. This is \"0\" at the horizon, and \"1\" at the bottom of the screen.":"Percent away from the horizon. This is \"0\" at the horizon, and \"1\" at the bottom of the screen.","Percent away from horizon":"Percent away from horizon","Exponential rate of change, based on Y position.":"Exponential rate of change, based on Y position.","Exponential rate of change":"Exponential rate of change","Max scale when the object is at the bottom of the screen.":"Max scale when the object is at the bottom of the screen.","Max scale":"Max scale","Y value of horizon.":"Y value of horizon.","Y value of horizon":"Y value of horizon","Set max scale when the object is at the bottom of the screen (Default: 2).":"Set max scale when the object is at the bottom of the screen (Default: 2).","Set max scale":"Set max scale","Set max scale of _PARAM0_ to _PARAM2_":"Set max scale of _PARAM0_ to _PARAM2_","Y Exponent":"Y Exponent","Set Y exponential rate of change (Default: 2).":"Set Y exponential rate of change (Default: 2).","Set exponential rate of change":"Set exponential rate of change","Set Y exponential rate of change of _PARAM0_ to _PARAM2_":"Set Y exponential rate of change of _PARAM0_ to _PARAM2_","Set Y position of the horizon, where objects are infinitely small (Default: 0).":"Set Y position of the horizon, where objects are infinitely small (Default: 0).","Set Y position of horizon":"Set Y position of horizon","Set horizon of _PARAM0_ to Y position _PARAM2_":"Set horizon of _PARAM0_ to Y position _PARAM2_","Horizon Y":"Horizon Y","Discord rich presence (Windows, Mac, Linux)":"Discord rich presence (Windows, Mac, Linux)","Display game activity status in Discord via Rich Presence integration.":"Display game activity status in Discord via Rich Presence integration.","Attempts to connect to discord if it is installed, and initialize rich presence.":"Attempts to connect to discord if it is installed, and initialize rich presence.","Initialize rich presence":"Initialize rich presence","Initialize rich presence with ID _PARAM1_":"Initialize rich presence with ID _PARAM1_","The discord client ID":"The discord client ID","Update the data in the rich presence. See the discord documentation for more info on each field. Each field except state is optional.":"Update the data in the rich presence. See the discord documentation for more info on each field. Each field except state is optional.","Update rich presence":"Update rich presence","Update rich presence to state _PARAM1_, details _PARAM2_, begin timestamp _PARAM3_, end timestamp _PARAM4_, large image _PARAM5_ with text _PARAM6_ and small image _PARAM7_ with text _PARAM8_":"Update rich presence to state _PARAM1_, details _PARAM2_, begin timestamp _PARAM3_, end timestamp _PARAM4_, large image _PARAM5_ with text _PARAM6_ and small image _PARAM7_ with text _PARAM8_","The current state":"The current state","The details of the current state":"The details of the current state","The timstamp of the start of the match":"The timstamp of the start of the match","If this is filled, discord will show the time elapsed since the start.":"If this is filled, discord will show the time elapsed since the start.","The timestamp of the end of the match":"The timestamp of the end of the match","If this is filled, discord will display the remaining time.":"If this is filled, discord will display the remaining time.","The name of the big image":"The name of the big image","The text of the large image":"The text of the large image","The name of the small image":"The name of the small image","The text of the small image":"The text of the small image","Double-click and tap":"Double-click and tap","Detect double-click (mouse) or double-tap (touch) on objects or anywhere.":"Detect double-click (mouse) or double-tap (touch) on objects or anywhere.","Check if the specified mouse button is clicked twice in a short amount of time.":"Check if the specified mouse button is clicked twice in a short amount of time.","Double-clicked (or double-tapped)":"Double-clicked (or double-tapped)","_PARAM1_ mouse button is double-clicked":"_PARAM1_ mouse button is double-clicked","Mouse button to track":"Mouse button to track","As touch devices do not have middle/right tap equivalents, you will need to account for this within your events if you're not using the left mouse button and building for touch devices.":"As touch devices do not have middle/right tap equivalents, you will need to account for this within your events if you're not using the left mouse button and building for touch devices.","Check if the specified mouse button is clicked.":"Check if the specified mouse button is clicked.","Clicked (or tapped)":"Clicked (or tapped)","_PARAM1_ mouse button is clicked":"_PARAM1_ mouse button is clicked","_PARAM1_ mouse button is clicked _PARAM2_ times":"_PARAM1_ mouse button is clicked _PARAM2_ times","Click count":"Click count","Drag camera with the mouse (or touchscreen)":"Drag camera with the mouse (or touchscreen)","Pan/drag camera with mouse or touch. Configurable inertia and bounds.":"Pan/drag camera with mouse or touch. Configurable inertia and bounds.","Move a camera by dragging the mouse (or touchscreen).":"Move a camera by dragging the mouse (or touchscreen).","Drag camera with the mouse":"Drag camera with the mouse","Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button":"Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button","Camera layer (default: \"\")":"Camera layer (default: \"\")","Directions that the camera can move (horizontal, vertical, both)":"Directions that the camera can move (horizontal, vertical, both)","Mouse button (use \"Left\" for touchscreen)":"Mouse button (use \"Left\" for touchscreen)","Draggable (for physics objects)":"Draggable (for physics objects)","Drag Physics 2D objects with mouse or touch input.":"Drag Physics 2D objects with mouse or touch input.","Drag a physics object with the mouse (or touch).":"Drag a physics object with the mouse (or touch).","Physics behavior":"Physics behavior","Mouse button":"Mouse button","Maximum force":"Maximum force","Frequency (Hz)":"Frequency (Hz)","Damping ratio (Range: 0 to 1)":"Damping ratio (Range: 0 to 1)","Enable automatic dragging":"Enable automatic dragging","If automatic dragging is disabled, use the \"Start drag\" and \"Release drag\" actions.":"If automatic dragging is disabled, use the \"Start drag\" and \"Release drag\" actions.","Start dragging object.":"Start dragging object.","Start dragging object":"Start dragging object","Start dragging (physics) _PARAM0_":"Start dragging (physics) _PARAM0_","Release dragged object.":"Release dragged object.","Release dragged object":"Release dragged object","Release _PARAM0_ from being dragged (physics)":"Release _PARAM0_ from being dragged (physics)","Check if object is being dragged.":"Check if object is being dragged.","Is being dragged":"Is being dragged","_PARAM0_ is being dragged (physics)":"_PARAM0_ is being dragged (physics)","the mouse button used to move the object.":"the mouse button used to move the object.","the dragging mouse button":"the dragging mouse button","the maximum joint force (in Newtons) of the object.":"the maximum joint force (in Newtons) of the object.","the maximum force":"the maximum force","the joint frequency (per second) of the object.":"the joint frequency (per second) of the object.","the frequency":"the frequency","the joint damping ratio (range: 0 to 1) of the object.":"the joint damping ratio (range: 0 to 1) of the object.","Damping ratio":"Damping ratio","the damping ratio (range: 0 to 1)":"the damping ratio (range: 0 to 1)","Check if automatic dragging is enabled.":"Check if automatic dragging is enabled.","Automatic dragging":"Automatic dragging","Automatic dragging is enabled on _PARAM0_":"Automatic dragging is enabled on _PARAM0_","Enable (or disable) automatic dragging with the mouse or touch.":"Enable (or disable) automatic dragging with the mouse or touch.","Enable (or disable) automatic dragging":"Enable (or disable) automatic dragging","Enable automatic dragging on _PARAM0_: _PARAM2_":"Enable automatic dragging on _PARAM0_: _PARAM2_","EnableAutomaticDragging":"EnableAutomaticDragging","Draggable slider (for Shape Painter)":"Draggable slider (for Shape Painter)","Shape Painter slider for selecting numerical values.":"Shape Painter slider for selecting numerical values.","Let users select a numerical value by dragging a slider.":"Let users select a numerical value by dragging a slider.","Draggable slider":"Draggable slider","Minimum value":"Minimum value","Maximum value":"Maximum value","Tick spacing":"Tick spacing","Thumb shape":"Thumb shape","Thumb":"Thumb","Thumb width":"Thumb width","Thumb height":"Thumb height","Thumb Color":"Thumb Color","Thumb opacity":"Thumb opacity","Track length":"Track length","Track":"Track","Inactive track color (thumb color by default)":"Inactive track color (thumb color by default)","Inactive track opacity":"Inactive track opacity","Active track color (thumb color by default)":"Active track color (thumb color by default)","Active track opacity":"Active track opacity","Halo size (hover)":"Halo size (hover)","Rounded track ends":"Rounded track ends","Check if the slider is being dragged.":"Check if the slider is being dragged.","Being dragged":"Being dragged","_PARAM0_ is being dragged":"_PARAM0_ is being dragged","Check if the slider interations are enabled.":"Check if the slider interations are enabled.","Enable or disable the slider. Users cannot interact while it is disabled.":"Enable or disable the slider. Users cannot interact while it is disabled.","The value of the slider (based on position of the thumb).":"The value of the slider (based on position of the thumb).","Slider value":"Slider value","Change the value of a slider (this will move the thumb to the correct position).":"Change the value of a slider (this will move the thumb to the correct position).","Change the value of _PARAM0_: _PARAM2_":"Change the value of _PARAM0_: _PARAM2_","The minimum value of a slider.":"The minimum value of a slider.","Slider minimum value":"Slider minimum value","Change the minimum value of a slider.":"Change the minimum value of a slider.","Change the minimum value of _PARAM0_: _PARAM2_":"Change the minimum value of _PARAM0_: _PARAM2_","The maximum value of a slider.":"The maximum value of a slider.","Slider maximum value":"Slider maximum value","Thickness of track.":"Thickness of track.","Slider track thickness":"Slider track thickness","Length of track.":"Length of track.","Slider track length":"Slider track length","Height of thumb.":"Height of thumb.","Slider thumb height":"Slider thumb height","Change the maximum value of a slider.":"Change the maximum value of a slider.","The tick spacing of a slider.":"The tick spacing of a slider.","Change the tick spacing of _PARAM0_: _PARAM2_":"Change the tick spacing of _PARAM0_: _PARAM2_","Change the tick spacing of a slider.":"Change the tick spacing of a slider.","Change length of track.":"Change length of track.","Change track length of _PARAM0_ to _PARAM2_ px":"Change track length of _PARAM0_ to _PARAM2_ px","Track width":"Track width","Change thickness of track.":"Change thickness of track.","Change track thickness of _PARAM0_ to _PARAM2_ px":"Change track thickness of _PARAM0_ to _PARAM2_ px","Change width of thumb.":"Change width of thumb.","Change thumb width of _PARAM0_ to _PARAM2_ px":"Change thumb width of _PARAM0_ to _PARAM2_ px","Change height of thumb.":"Change height of thumb.","Change thumb height of _PARAM0_ to _PARAM2_ px":"Change thumb height of _PARAM0_ to _PARAM2_ px","Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.":"Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.","Change halo radius of _PARAM0_ to _PARAM2_ px":"Change halo radius of _PARAM0_ to _PARAM2_ px","Change the halo opacity when the thumb is hovered.":"Change the halo opacity when the thumb is hovered.","Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px":"Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px","Change opacity of halo when pressed.":"Change opacity of halo when pressed.","Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px":"Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px","Change shape of thumb (circle or rectangle).":"Change shape of thumb (circle or rectangle).","Change shape of _PARAM0_ to _PARAM2_":"Change shape of _PARAM0_ to _PARAM2_","New thumb shape":"New thumb shape","Make track use rounded ends.":"Make track use rounded ends.","Draw _PARAM0_ with a rounded track: _PARAM2_":"Draw _PARAM0_ with a rounded track: _PARAM2_","Rounded track":"Rounded track","Change opacity of thumb.":"Change opacity of thumb.","Change thumb opacity of _PARAM0_ to _PARAM2_":"Change thumb opacity of _PARAM0_ to _PARAM2_","Change opacity of inactive track.":"Change opacity of inactive track.","Change inactive track opacity of _PARAM0_ to _PARAM2_":"Change inactive track opacity of _PARAM0_ to _PARAM2_","Change opacity of active track.":"Change opacity of active track.","Change active track opacity of _PARAM0_ to _PARAM2_":"Change active track opacity of _PARAM0_ to _PARAM2_","Change the color of the track that is LEFT of the thumb.":"Change the color of the track that is LEFT of the thumb.","Active track color":"Active track color","Change active track color of _PARAM0_ to _PARAM2_":"Change active track color of _PARAM0_ to _PARAM2_","Change the color of the track that is RIGHT of the thumb.":"Change the color of the track that is RIGHT of the thumb.","Inactive track color":"Inactive track color","Change inactive track color of _PARAM0_ to _PARAM2_":"Change inactive track color of _PARAM0_ to _PARAM2_","Change the thumb color to a specific value.":"Change the thumb color to a specific value.","Thumb color":"Thumb color","Change thumb color of _PARAM0_ to _PARAM2_":"Change thumb color of _PARAM0_ to _PARAM2_","Pathfinding painter":"Pathfinding painter","Visualize pathfinding paths using Shape Painter for debugging or display.":"Visualize pathfinding paths using Shape Painter for debugging or display.","Draw the path followed by the object using a shape painter.":"Draw the path followed by the object using a shape painter.","LoopIndex":"LoopIndex","Draw the path followed by the object using a shape painter. It automatically creates an instance of the shape painter object if there is none.":"Draw the path followed by the object using a shape painter. It automatically creates an instance of the shape painter object if there is none.","Draw pathfinding":"Draw pathfinding","Draw the path followed by _PARAM0_ using _PARAM3_":"Draw the path followed by _PARAM0_ using _PARAM3_","Pathfinding behavior":"Pathfinding behavior","Shape painter used to draw the path":"Shape painter used to draw the path","Edge scroll camera":"Edge scroll camera","Scroll camera when cursor is near screen edges.":"Scroll camera when cursor is near screen edges.","Enable (or disable) camera edge scrolling . Use \"Configure camera edge scrolling\" to adjust settings.":"Enable (or disable) camera edge scrolling . Use \"Configure camera edge scrolling\" to adjust settings.","Enable (or disable) camera edge scrolling":"Enable (or disable) camera edge scrolling","Enable camera edge scrolling: _PARAM1_":"Enable camera edge scrolling: _PARAM1_","Enable camera edge scrolling":"Enable camera edge scrolling","Configure camera edge scrolling that moves when mouse is near an edge of the screen.":"Configure camera edge scrolling that moves when mouse is near an edge of the screen.","Configure camera edge scrolling":"Configure camera edge scrolling","Configure camera edge scrolling (layer: _PARAM3_, screen margin: _PARAM1_, scroll speed: _PARAM2_, style: _PARAM5_)":"Configure camera edge scrolling (layer: _PARAM3_, screen margin: _PARAM1_, scroll speed: _PARAM2_, style: _PARAM5_)","Screen margin (pixels)":"Screen margin (pixels)","Scroll speed (in pixels per second)":"Scroll speed (in pixels per second)","Scroll style":"Scroll style","Check if the camera is scrolling.":"Check if the camera is scrolling.","Camera is scrolling":"Camera is scrolling","Check if the camera is scrolling up.":"Check if the camera is scrolling up.","Camera is scrolling up":"Camera is scrolling up","Check if the camera is scrolling down.":"Check if the camera is scrolling down.","Camera is scrolling down":"Camera is scrolling down","Check if the camera is scrolling left.":"Check if the camera is scrolling left.","Camera is scrolling left":"Camera is scrolling left","Check if the camera is scrolling right.":"Check if the camera is scrolling right.","Camera is scrolling right":"Camera is scrolling right","Draw a rectangle that shows where edge scrolling will be triggered.":"Draw a rectangle that shows where edge scrolling will be triggered.","Draw edge scrolling screen margin":"Draw edge scrolling screen margin","Draw edge scrolling screen margin with _PARAM1_":"Draw edge scrolling screen margin with _PARAM1_","Return the speed the camera is currently scrolling in horizontal direction (in pixels per second).":"Return the speed the camera is currently scrolling in horizontal direction (in pixels per second).","Horizontal edge scroll speed":"Horizontal edge scroll speed","Return the speed the camera is currently scrolling in vertical direction (in pixels per second).":"Return the speed the camera is currently scrolling in vertical direction (in pixels per second).","Vertical edge scroll speed":"Vertical edge scroll speed","Return the absolute scroll speed according to the mouse distance from the border.":"Return the absolute scroll speed according to the mouse distance from the border.","Absolute scroll speed":"Absolute scroll speed","Border distance":"Border distance","Ellipse movement":"Ellipse movement","Move objects in elliptical paths or smooth back-and-forth in one direction.":"Move objects in elliptical paths or smooth back-and-forth in one direction.","Move objects on ellipses or smoothly back and forth in one direction.":"Move objects on ellipses or smoothly back and forth in one direction.","Radius of the movement on X axis":"Radius of the movement on X axis","Ellipse":"Ellipse","Radius of the movement on Y axis":"Radius of the movement on Y axis","Loop duration":"Loop duration","Turn left":"Turn left","Initial direction":"Initial direction","Rotate":"Rotate","Change the turning direction (left or right).":"Change the turning direction (left or right).","Turn the other way":"Turn the other way","_PARAM0_ turn the other way":"_PARAM0_ turn the other way","Change the in which side the object is turning (left or right).":"Change the in which side the object is turning (left or right).","Turn left or right":"Turn left or right","_PARAM0_ turn left: _PARAM2_":"_PARAM0_ turn left: _PARAM2_","Check if the object is turning left.":"Check if the object is turning left.","Is turning left":"Is turning left","_PARAM0_ is turning left":"_PARAM0_ is turning left","Return the movement angle of the object.":"Return the movement angle of the object.","Set initial Y of _PARAM0_ to _PARAM2_":"Set initial Y of _PARAM0_ to _PARAM2_","Return the loop duration (in seconds).":"Return the loop duration (in seconds).","Return the ellipse radius on X axis.":"Return the ellipse radius on X axis.","Radius X":"Radius X","Radius Y":"Radius Y","Return the movement center position on X axis.":"Return the movement center position on X axis.","Movement center X":"Movement center X","Return the movement center position on Y axis.":"Return the movement center position on Y axis.","Movement center Y":"Movement center Y","Change the radius on X axis of the movement.":"Change the radius on X axis of the movement.","Change the radius on X axis of the movement of _PARAM0_ to _PARAM2_":"Change the radius on X axis of the movement of _PARAM0_ to _PARAM2_","Change the radius on Y axis of the movement.":"Change the radius on Y axis of the movement.","Change the radius on Y axis of the movement of _PARAM0_ to _PARAM2_":"Change the radius on Y axis of the movement of _PARAM0_ to _PARAM2_","Change the loop duration.":"Change the loop duration.","Change the loop duration of _PARAM0_ to _PARAM2_":"Change the loop duration of _PARAM0_ to _PARAM2_","Speed (in degrees per second)":"Speed (in degrees per second)","Change the movement angle. The object is teleported according to the angle.":"Change the movement angle. The object is teleported according to the angle.","Teleport at an angle":"Teleport at an angle","Teleport _PARAM0_ on the ellipse at _PARAM2_°":"Teleport _PARAM0_ on the ellipse at _PARAM2_°","Delta X":"Delta X","Delta Y":"Delta Y","Direction angle":"Direction angle","Emojis":"Emojis","Display emoji characters in text objects using shortcodes or emoji expressions.":"Display emoji characters in text objects using shortcodes or emoji expressions.","Returns the specified emoji, from the provided name.":"Returns the specified emoji, from the provided name.","Returns the specified emoji (name)":"Returns the specified emoji (name)","Name of emoji":"Name of emoji","Full list of emojis: [https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)":"Full list of emojis: [https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)","Returns the specified emoji, from a hexadecimal value.":"Returns the specified emoji, from a hexadecimal value.","Returns the specified emoji (hex)":"Returns the specified emoji (hex)","Hexadecimal code":"Hexadecimal code","Full list of hexadecimal code: [https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)":"Full list of hexadecimal code: [https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)","Explosion force":"Explosion force","Apply radial explosion physics force to nearby Physics 2D objects within radius.":"Apply radial explosion physics force to nearby Physics 2D objects within radius.","Simulate an explosion with physics forces on target objects.":"Simulate an explosion with physics forces on target objects.","Simulate explosion with physics forces":"Simulate explosion with physics forces","Simulate an explosion that affects _PARAM1_ within explosion radius: _PARAM6_ (pixels), Explosion center: _PARAM3_, _PARAM4_. Max force: _PARAM5_":"Simulate an explosion that affects _PARAM1_ within explosion radius: _PARAM6_ (pixels), Explosion center: _PARAM3_, _PARAM4_. Max force: _PARAM5_","Target Object":"Target Object","Physics Behavior (required)":"Physics Behavior (required)","Explosion center (X)":"Explosion center (X)","Explosion center (Y)":"Explosion center (Y)","Max force (of explosion)":"Max force (of explosion)","Force decreases the farther an object is from the explosion center.":"Force decreases the farther an object is from the explosion center.","Max distance (from center of explosion) (pixels)":"Max distance (from center of explosion) (pixels)","Objects less than this distance will be affected by the explosion.":"Objects less than this distance will be affected by the explosion.","Extended math support":"Extended math support","Extra math: clamp, map, lerp, factorial, fibonacci, distance, angle, conversions, constants.":"Extra math: clamp, map, lerp, factorial, fibonacci, distance, angle, conversions, constants.","Returns a term from the Fibonacci sequence.":"Returns a term from the Fibonacci sequence.","Fibonacci numbers":"Fibonacci numbers","The desired term in the sequence":"The desired term in the sequence","Calculates the steepness of a line between two points.":"Calculates the steepness of a line between two points.","Slope":"Slope","X value of the first point":"X value of the first point","Y value of the first point":"Y value of the first point","X value of the second point":"X value of the second point","Y value of the second point":"Y value of the second point","Converts a number of one range e.g. 0-1 to another 0-255.":"Converts a number of one range e.g. 0-1 to another 0-255.","Map":"Map","The value to convert":"The value to convert","The lowest value of the first range":"The lowest value of the first range","The highest value of the first range":"The highest value of the first range","The lowest value of the second range":"The lowest value of the second range","The highest value of the second range":"The highest value of the second range","Returns the value of the length of the hypotenuse.":"Returns the value of the length of the hypotenuse.","Hypotenuse length":"Hypotenuse length","First side of the triangle":"First side of the triangle","Second side of the triangle":"Second side of the triangle","Returns the greatest common factor of two numbers.":"Returns the greatest common factor of two numbers.","Greatest common factor (gcf)":"Greatest common factor (gcf)","Any integer":"Any integer","Returns the lowest common multiple of two numbers.":"Returns the lowest common multiple of two numbers.","Lowest common multiple (lcm)":"Lowest common multiple (lcm)","Returns the input multiplied by all the previous whole numbers.":"Returns the input multiplied by all the previous whole numbers.","Factorial":"Factorial","Any positive integer":"Any positive integer","Converts a polar coordinate into the Cartesian x value.":"Converts a polar coordinate into the Cartesian x value.","Polar coordinate to Cartesian X value":"Polar coordinate to Cartesian X value","Angle or theta in radians":"Angle or theta in radians","Converts a polar coordinate into the Cartesian y value.":"Converts a polar coordinate into the Cartesian y value.","Polar coordinate to Cartesian Y value":"Polar coordinate to Cartesian Y value","Converts a isometric coordinate into the Cartesian x value.":"Converts a isometric coordinate into the Cartesian x value.","Isometric coordinate to Cartesian X value":"Isometric coordinate to Cartesian X value","Position on the x axis":"Position on the x axis","Position on the y axis":"Position on the y axis","Converts a isometric coordinate into the Cartesian y value.":"Converts a isometric coordinate into the Cartesian y value.","Isometric coordinate to Cartesian Y value":"Isometric coordinate to Cartesian Y value","Returns the golden ratio.":"Returns the golden ratio.","Golden ratio":"Golden ratio","Returns Pi (π).":"Returns Pi (π).","Pi (π)":"Pi (π)","Returns half Pi.":"Returns half Pi.","Half Pi":"Half Pi","Returns the natural logarithm of e. (Euler's number).":"Returns the natural logarithm of e. (Euler's number).","Natural logarithm of e":"Natural logarithm of e","Returns the natural logarithm of 2.":"Returns the natural logarithm of 2.","Natural logarithm of 2":"Natural logarithm of 2","Returns the natural logarithm of 10.":"Returns the natural logarithm of 10.","Natural logarithm of 10":"Natural logarithm of 10","Returns the base 2 logarithm of e. (Euler's number).":"Returns the base 2 logarithm of e. (Euler's number).","Base 2 logarithm of e":"Base 2 logarithm of e","Returns the base 10 logarithm of e. (Euler's number).":"Returns the base 10 logarithm of e. (Euler's number).","Base 10 logarithm of e":"Base 10 logarithm of e","Returns square root of 2.":"Returns square root of 2.","Square root of 2":"Square root of 2","Returns square root of 1/2.":"Returns square root of 1/2.","Square root of 1/2":"Square root of 1/2","Returns quarter Pi.":"Returns quarter Pi.","Quarter Pi":"Quarter Pi","Formats a number to use the specified number of decimal places (Deprecated).":"Formats a number to use the specified number of decimal places (Deprecated).","ToFixed":"ToFixed","The value to be rounded":"The value to be rounded","Number of decimal places":"Number of decimal places","Formats a number to a string with the specified number of decimal places.":"Formats a number to a string with the specified number of decimal places.","Check if the number is even (divisible by 2). To check for odd numbers, invert this condition.":"Check if the number is even (divisible by 2). To check for odd numbers, invert this condition.","Is even?":"Is even?","_PARAM1_ is even":"_PARAM1_ is even","Variables copier":"Variables copier","Copy structure and array variables.":"Copy structure and array variables.","Check if a global variable exists.":"Check if a global variable exists.","Global variable exists":"Global variable exists","If the global variable _PARAM1_ exist":"If the global variable _PARAM1_ exist","Name of the global variable":"Name of the global variable","Check if the global variable exists.":"Check if the global variable exists.","Check if a scene variable exists.":"Check if a scene variable exists.","Scene variable exists":"Scene variable exists","If the scene variable _PARAM1_ exist":"If the scene variable _PARAM1_ exist","Name of the scene variable":"Name of the scene variable","Check if the scene variable exists.":"Check if the scene variable exists.","Check if an object variable exists.":"Check if an object variable exists.","Object variable exists":"Object variable exists","Object _PARAM1_ has object variable _PARAM2_":"Object _PARAM1_ has object variable _PARAM2_","Name of object variable":"Name of object variable","Delete a global variable, removing it from memory.":"Delete a global variable, removing it from memory.","Delete global variable":"Delete global variable","Delete global variable _PARAM1_":"Delete global variable _PARAM1_","Name of the global variable to delete":"Name of the global variable to delete","Delete the global variable, removing it from memory.":"Delete the global variable, removing it from memory.","Delete the global variable _PARAM1_ from memory":"Delete the global variable _PARAM1_ from memory","Modify the text of a scene variable.":"Modify the text of a scene variable.","String of a scene variable":"String of a scene variable","Change the text of scene variable _PARAM1_ to _PARAM2_":"Change the text of scene variable _PARAM1_ to _PARAM2_","Modify the text of a global variable.":"Modify the text of a global variable.","String of a global variable":"String of a global variable","Change the text of global variable _PARAM1_ to _PARAM2_":"Change the text of global variable _PARAM1_ to _PARAM2_","Modify the value of a global variable.":"Modify the value of a global variable.","Value of a global variable":"Value of a global variable","Change the global variable _PARAM1_ with value: _PARAM2_":"Change the global variable _PARAM1_ with value: _PARAM2_","Modify the value of a scene variable.":"Modify the value of a scene variable.","Value of a scene variable":"Value of a scene variable","Change the scene variable _PARAM1_ with value: _PARAM2_":"Change the scene variable _PARAM1_ with value: _PARAM2_","Delete scene variable, the variable will be deleted from the memory.":"Delete scene variable, the variable will be deleted from the memory.","Delete scene variable":"Delete scene variable","Delete the scene variable _PARAM1_":"Delete the scene variable _PARAM1_","Name of the scene variable to delete":"Name of the scene variable to delete","Delete the scene variable, the variable will be deleted from the memory.":"Delete the scene variable, the variable will be deleted from the memory.","Delete the scene variable _PARAM1_ from memory":"Delete the scene variable _PARAM1_ from memory","Copy an object variable from one object to another.":"Copy an object variable from one object to another.","Copy an object variable":"Copy an object variable","Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_":"Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_","Source object":"Source object","Variable to copy":"Variable to copy","Destination object":"Destination object","To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.":"To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.","Destination variable":"Destination variable","Copy the object variable from one object to another.":"Copy the object variable from one object to another.","Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)":"Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)","Clear the destination variable before copying":"Clear the destination variable before copying","Copy all object variables from one object to another.":"Copy all object variables from one object to another.","Copy all object variables":"Copy all object variables","Copy all variables from _PARAM1_ to _PARAM2_":"Copy all variables from _PARAM1_ to _PARAM2_","Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)":"Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)","Delete an object variable, removing it from memory.":"Delete an object variable, removing it from memory.","Delete object variable":"Delete object variable","Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory":"Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory","Return the text of a global variable.":"Return the text of a global variable.","Text of a global variable":"Text of a global variable","Return the text of a scene variable.":"Return the text of a scene variable.","Text of a scene variable":"Text of a scene variable","Return the value of a global variable.":"Return the value of a global variable.","Return the value of a scene variable.":"Return the value of a scene variable.","Copy the global variable to scene. This copy everything from the types to the values.":"Copy the global variable to scene. This copy everything from the types to the values.","Copy a global variable to scene":"Copy a global variable to scene","Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)":"Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)","Global variable to copy":"Global variable to copy","Scene variable destination":"Scene variable destination","Copy the scene variable to global. This copy everything from the types to the values.":"Copy the scene variable to global. This copy everything from the types to the values.","Copy a scene variable to global":"Copy a scene variable to global","Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)":"Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)","Scene variable to copy":"Scene variable to copy","Global variable destination":"Global variable destination","Copy all the chidren of a variable into another variable.":"Copy all the chidren of a variable into another variable.","Copy a variable":"Copy a variable","Copy _PARAM1_ to _PARAM2_ (clear destination first: _PARAM3_)":"Copy _PARAM1_ to _PARAM2_ (clear destination first: _PARAM3_)","Frames per second (FPS)":"Frames per second (FPS)","Calculate and display frames per second (FPS).":"Calculate and display frames per second (FPS).","Frames per second (FPS) during the last second.":"Frames per second (FPS) during the last second.","Frames Per Second (FPS)":"Frames Per Second (FPS)","Frames per second (FPS) during the last second. [Deprecated]":"Frames per second (FPS) during the last second. [Deprecated]","Frames Per Second (FPS) [Deprecated]":"Frames Per Second (FPS) [Deprecated]","The accuracy of the FPS":"The accuracy of the FPS","This tells how many numbers after the period should be shown.":"This tells how many numbers after the period should be shown.","Makes a text object display the current FPS.":"Makes a text object display the current FPS.","FPS Displayer":"FPS Displayer","FPS counter prefix":"FPS counter prefix","Number of decimal digits":"Number of decimal digits","Face Forward":"Face Forward","Auto-rotate object to face its movement direction.":"Auto-rotate object to face its movement direction.","Face object towards the direction of movement.":"Face object towards the direction of movement.","Face forward":"Face forward","Rotation speed (degrees per second)":"Rotation speed (degrees per second)","Use \"0\" for immediate turning.":"Use \"0\" for immediate turning.","Offset angle":"Offset angle","Can be used when the image of the object is not facing to the right.":"Can be used when the image of the object is not facing to the right.","Previous X position":"Previous X position","Previous Y position":"Previous Y position","Direction the object is moving (in degrees)":"Direction the object is moving (in degrees)","Set rotation speed (degrees per second). Use \"0\" for immediate turning.":"Set rotation speed (degrees per second). Use \"0\" for immediate turning.","Set rotation speed":"Set rotation speed","Set rotation speed of _PARAM0_ to _PARAM2_":"Set rotation speed of _PARAM0_ to _PARAM2_","Rotation Speed":"Rotation Speed","Set offset angle.":"Set offset angle.","Set offset angle":"Set offset angle","Set offset angle of _PARAM0_ to _PARAM2_":"Set offset angle of _PARAM0_ to _PARAM2_","Rotation speed (in degrees per second).":"Rotation speed (in degrees per second).","Rotation speed":"Rotation speed","Rotation speed of _PARAM0_":"Rotation speed of _PARAM0_","Offset angle.":"Offset angle.","Direction the object is moving (in degrees).":"Direction the object is moving (in degrees).","Movement direction":"Movement direction","Fire bullets":"Fire bullets","Fire bullets with ammo count, reload timer, and overheat management.":"Fire bullets with ammo count, reload timer, and overheat management.","Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).":"Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).","Firing cooldown":"Firing cooldown","Objects cannot shoot while firing cooldown is active.":"Objects cannot shoot while firing cooldown is active.","Rotate bullets to match their trajectory":"Rotate bullets to match their trajectory","Firing arc":"Firing arc","Multi-Fire bullets will be evenly spaced inside the firing arc":"Multi-Fire bullets will be evenly spaced inside the firing arc","Multi-Fire":"Multi-Fire","Number of bullets created at once":"Number of bullets created at once","Angle variance":"Angle variance","Make imperfect aim (between 0 and 180 degrees).":"Make imperfect aim (between 0 and 180 degrees).","Firing variance":"Firing variance","Bullet speed variance":"Bullet speed variance","Bullet speed will be adjusted by a random value within this range.":"Bullet speed will be adjusted by a random value within this range.","Ammo quantity (current)":"Ammo quantity (current)","Shots per reload":"Shots per reload","Use 0 to disable reloading.":"Use 0 to disable reloading.","Reload":"Reload","Reloading duration":"Reloading duration","Objects cannot shoot while reloading is in progress.":"Objects cannot shoot while reloading is in progress.","Max ammo":"Max ammo","Ammo":"Ammo","Shots before next reload":"Shots before next reload","Total shots fired":"Total shots fired","Regardless of how many bullets are created, only 1 shot will be counted per frame":"Regardless of how many bullets are created, only 1 shot will be counted per frame","Total bullets created":"Total bullets created","Starting ammo":"Starting ammo","Total reloads completed":"Total reloads completed","Unlimited ammo":"Unlimited ammo","Heat increase per shot (between 0 and 1)":"Heat increase per shot (between 0 and 1)","Object is overheated when Heat reaches 1.":"Object is overheated when Heat reaches 1.","Overheat":"Overheat","Heat level (Range: 0 to 1)":"Heat level (Range: 0 to 1)","Reload automatically":"Reload automatically","Overheat duration":"Overheat duration","Object cannot shoot while overheat duration is active.":"Object cannot shoot while overheat duration is active.","Linear cooling rate (per second)":"Linear cooling rate (per second)","Exponential cooling rate (per second)":"Exponential cooling rate (per second)","Happens faster when heat is high and slower when heat is low.":"Happens faster when heat is high and slower when heat is low.","Layer the bullets are created on":"Layer the bullets are created on","Base layer by default.":"Base layer by default.","Shooting configuration":"Shooting configuration","Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.","Fire bullets toward an object":"Fire bullets toward an object","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s":"Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s","X position, where to create the bullet":"X position, where to create the bullet","Y position, where to create the bullet":"Y position, where to create the bullet","The bullet object":"The bullet object","Target object":"Target object","Speed of the bullet, in pixels per second":"Speed of the bullet, in pixels per second","Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.","Fire bullets toward a position":"Fire bullets toward a position","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s":"Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s","Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.","Fire bullets toward an angle":"Fire bullets toward an angle","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s":"Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s","Angle of the bullet, in degrees":"Angle of the bullet, in degrees","Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.":"Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.","Fire a single bullet":"Fire a single bullet","Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s":"Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s","Reload ammo.":"Reload ammo.","Reload ammo":"Reload ammo","Reload ammo on _PARAM0_":"Reload ammo on _PARAM0_","Check if the object has just fired something.":"Check if the object has just fired something.","Has just fired":"Has just fired","_PARAM0_ has just fired":"_PARAM0_ has just fired","Check if bullet rotates to match trajectory.":"Check if bullet rotates to match trajectory.","Is bullet rotation enabled":"Is bullet rotation enabled","Bullet rotation enabled on _PARAM0_":"Bullet rotation enabled on _PARAM0_","the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.":"the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.","the firing arc":"the firing arc","Firing arc (degrees) Range: 0 to 360":"Firing arc (degrees) Range: 0 to 360","Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.":"Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.","Set firing arc (deprecated)":"Set firing arc (deprecated)","Set firing arc of _PARAM0_ to _PARAM2_ degrees":"Set firing arc of _PARAM0_ to _PARAM2_ degrees","the angle variance (in degrees) applied to each bullet.":"the angle variance (in degrees) applied to each bullet.","the angle variance":"the angle variance","Angle variance (degrees) Range: 0 to 180":"Angle variance (degrees) Range: 0 to 180","Change the angle variance (in degrees) applied to each bullet.":"Change the angle variance (in degrees) applied to each bullet.","Set angle variance (deprecated)":"Set angle variance (deprecated)","Set angle variance of _PARAM0_ to _PARAM2_ degrees":"Set angle variance of _PARAM0_ to _PARAM2_ degrees","the bullet speed variance (pixels per second) applied to each bullet.":"the bullet speed variance (pixels per second) applied to each bullet.","the bullet speed variance":"the bullet speed variance","Change the speed variance (pixels per second) applied to each bullet.":"Change the speed variance (pixels per second) applied to each bullet.","Set bullet speed variance (deprecated)":"Set bullet speed variance (deprecated)","Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second":"Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second","the number of bullets shot every time the \"fire bullet\" action is used.":"the number of bullets shot every time the \"fire bullet\" action is used.","Bullets per shot":"Bullets per shot","the number of bullets per shot":"the number of bullets per shot","Bullets":"Bullets","Change the number of bullets shot every time the \"fire bullet\" action is used.":"Change the number of bullets shot every time the \"fire bullet\" action is used.","Set number of bullets per shot (deprecated)":"Set number of bullets per shot (deprecated)","Set number of bullets per shot of _PARAM0_ to _PARAM2_":"Set number of bullets per shot of _PARAM0_ to _PARAM2_","Change the layer that bullets are created on.":"Change the layer that bullets are created on.","Set bullet layer":"Set bullet layer","Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_":"Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_","Enable bullet rotation.":"Enable bullet rotation.","Enable (or disable) bullet rotation":"Enable (or disable) bullet rotation","Enable bullet rotation on _PARAM0_: _PARAM2_":"Enable bullet rotation on _PARAM0_: _PARAM2_","Rotate bullet to match trajetory":"Rotate bullet to match trajetory","Enable unlimited ammo.":"Enable unlimited ammo.","Enable (or disable) unlimited ammo":"Enable (or disable) unlimited ammo","Enable unlimited ammo on _PARAM0_: _PARAM2_":"Enable unlimited ammo on _PARAM0_: _PARAM2_","the firing cooldown (in seconds) also known as rate of fire.":"the firing cooldown (in seconds) also known as rate of fire.","the firing cooldown":"the firing cooldown","Cooldown in seconds":"Cooldown in seconds","Change the firing cooldown, which changes the rate of fire.":"Change the firing cooldown, which changes the rate of fire.","Set firing cooldown (deprecated)":"Set firing cooldown (deprecated)","Set the fire rate of _PARAM0_ to _PARAM2_ seconds":"Set the fire rate of _PARAM0_ to _PARAM2_ seconds","the reload duration (in seconds).":"the reload duration (in seconds).","Reload duration":"Reload duration","the reload duration":"the reload duration","Reload duration (seconds)":"Reload duration (seconds)","Change the duration to reload ammo.":"Change the duration to reload ammo.","Set reload duration (deprecated)":"Set reload duration (deprecated)","Set the reload duration of _PARAM0_ to _PARAM2_ seconds":"Set the reload duration of _PARAM0_ to _PARAM2_ seconds","the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.":"the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.","the overheat duration":"the overheat duration","Overheat duration (seconds)":"Overheat duration (seconds)","Change the duration after becoming overheated.":"Change the duration after becoming overheated.","Set overheat duration (deprecated)":"Set overheat duration (deprecated)","Set the overheat duration of _PARAM0_ to _PARAM2_ seconds":"Set the overheat duration of _PARAM0_ to _PARAM2_ seconds","the ammo quantity.":"the ammo quantity.","Ammo quantity":"Ammo quantity","the ammo quantity":"the ammo quantity","Change the quantity of ammo.":"Change the quantity of ammo.","Set ammo quantity (deprecated)":"Set ammo quantity (deprecated)","Set the ammo quantity of _PARAM0_ to _PARAM2_":"Set the ammo quantity of _PARAM0_ to _PARAM2_","the heat increase per shot.":"the heat increase per shot.","Heat increase per shot":"Heat increase per shot","the heat increase per shot":"the heat increase per shot","Heat increase per shot (Range: 0 to 1)":"Heat increase per shot (Range: 0 to 1)","Change the heat increase per shot.":"Change the heat increase per shot.","Set heat increase per shot (deprecated)":"Set heat increase per shot (deprecated)","Set the heat increase of _PARAM0_ to _PARAM2_ per shot":"Set the heat increase of _PARAM0_ to _PARAM2_ per shot","the max ammo.":"the max ammo.","the max ammo":"the max ammo","Change the max ammo.":"Change the max ammo.","Set max ammo (deprecated)":"Set max ammo (deprecated)","Set the max ammo of _PARAM0_ to _PARAM2_":"Set the max ammo of _PARAM0_ to _PARAM2_","Reset total shots fired.":"Reset total shots fired.","Reset total shots fired":"Reset total shots fired","Reset total shots fired by _PARAM0_":"Reset total shots fired by _PARAM0_","Reset total bullets created.":"Reset total bullets created.","Reset total bullets created":"Reset total bullets created","Reset total bullets created by _PARAM0_":"Reset total bullets created by _PARAM0_","Reset total reloads completed.":"Reset total reloads completed.","Reset total reloads completed":"Reset total reloads completed","Reset total reloads completed by _PARAM0_":"Reset total reloads completed by _PARAM0_","the number of shots per reload.":"the number of shots per reload.","the shots per reload":"the shots per reload","Change the number of shots per reload.":"Change the number of shots per reload.","Set shots per reload (deprecated)":"Set shots per reload (deprecated)","Set the shots per reload of _PARAM0_ to _PARAM2_":"Set the shots per reload of _PARAM0_ to _PARAM2_","Enable (or disable) automatic reloading.":"Enable (or disable) automatic reloading.","Enable (or disable) automatic reloading":"Enable (or disable) automatic reloading","Enable automatic reloading on _PARAM0_: _PARAM2_":"Enable automatic reloading on _PARAM0_: _PARAM2_","Enable automatic reloading":"Enable automatic reloading","the linear cooling rate (per second).":"the linear cooling rate (per second).","Linear cooling rate":"Linear cooling rate","the linear cooling rate":"the linear cooling rate","Heat cooling rate (per second)":"Heat cooling rate (per second)","Change the linear rate of cooling.":"Change the linear rate of cooling.","Set linear cooling rate (deprecated)":"Set linear cooling rate (deprecated)","Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second":"Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second","the exponential cooling rate, per second.":"the exponential cooling rate, per second.","Exponential cooling rate":"Exponential cooling rate","the exponential cooling rate":"the exponential cooling rate","Change the exponential rate of cooling.":"Change the exponential rate of cooling.","Set exponential cooling rate (deprecated)":"Set exponential cooling rate (deprecated)","Set the exponential cooling rate of _PARAM0_ to _PARAM2_":"Set the exponential cooling rate of _PARAM0_ to _PARAM2_","Increase ammo quantity.":"Increase ammo quantity.","Increase ammo":"Increase ammo","Increase ammo of _PARAM0_ by _PARAM2_ shots":"Increase ammo of _PARAM0_ by _PARAM2_ shots","Ammo gained":"Ammo gained","Layer that bullets are created on.":"Layer that bullets are created on.","Bullet layer":"Bullet layer","the heat level (range: 0 to 1).":"the heat level (range: 0 to 1).","Heat level":"Heat level","the heat level":"the heat level","Total shots fired (multi-bullet shots are considered one shot).":"Total shots fired (multi-bullet shots are considered one shot).","Shots fired":"Shots fired","Total bullets created.":"Total bullets created.","Bullets created":"Bullets created","Reloads completed.":"Reloads completed.","Reloads completed":"Reloads completed","the remaining shots before the next reload is required.":"the remaining shots before the next reload is required.","the remaining shots (before the next reload)":"the remaining shots (before the next reload)","the remaining duration before the cooldown will permit a bullet to be fired, in seconds.":"the remaining duration before the cooldown will permit a bullet to be fired, in seconds.","Duration before cooldown end":"Duration before cooldown end","the remaining duration before the cooldown end":"the remaining duration before the cooldown end","the remaining duration before the overheat penalty ends, in seconds.":"the remaining duration before the overheat penalty ends, in seconds.","Duration before overheat end":"Duration before overheat end","the remaining duration before the overheat end":"the remaining duration before the overheat end","the remaining duration before the reload finishes, in seconds.":"the remaining duration before the reload finishes, in seconds.","Duration before the reload finishes":"Duration before the reload finishes","the remaining duration before the reload finishes":"the remaining duration before the reload finishes","Check if object is currently performing an ammo reload.":"Check if object is currently performing an ammo reload.","Is ammo reloading in progress":"Is ammo reloading in progress","_PARAM0_ is reloading ammo":"_PARAM0_ is reloading ammo","Check if object is ready to shoot.":"Check if object is ready to shoot.","Is ready to shoot":"Is ready to shoot","_PARAM0_ is ready to shoot":"_PARAM0_ is ready to shoot","Check if automatic reloading is enabled.":"Check if automatic reloading is enabled.","Is automatic reloading enabled":"Is automatic reloading enabled","Automatic reloading is enabled on_PARAM0_":"Automatic reloading is enabled on_PARAM0_","Check if ammo is unlimited.":"Check if ammo is unlimited.","Is ammo unlimited":"Is ammo unlimited","_PARAM0_ has unlimited ammo":"_PARAM0_ has unlimited ammo","Check if object has no ammo available.":"Check if object has no ammo available.","Is out of ammo":"Is out of ammo","_PARAM0_ is out of ammo":"_PARAM0_ is out of ammo","Check if object needs to reload ammo.":"Check if object needs to reload ammo.","Is a reload needed":"Is a reload needed","_PARAM0_ needs to reload ammo":"_PARAM0_ needs to reload ammo","Check if object is overheated.":"Check if object is overheated.","Is overheated":"Is overheated","_PARAM0_ is overheated":"_PARAM0_ is overheated","Check if firing cooldown is active.":"Check if firing cooldown is active.","Is firing cooldown active":"Is firing cooldown active","Firing cooldown is active on _PARAM0_":"Firing cooldown is active on _PARAM0_","First person 3D camera":"First person 3D camera","Move the camera to look though objects eyes.":"Move the camera to look though objects eyes.","Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","Look through object eyes":"Look through object eyes","Move the camera of _PARAM2_ to look though _PARAM1_ eyes":"Move the camera of _PARAM2_ to look though _PARAM1_ eyes","Move the camera of _PARAM3_ to look though _PARAM1_ eyes":"Move the camera of _PARAM3_ to look though _PARAM1_ eyes","3D Object":"3D Object","Flash object":"Flash object","Flash/blink objects: toggle visibility, color tint, effect, or opacity over time.":"Flash/blink objects: toggle visibility, color tint, effect, or opacity over time.","Color tint applied to an object.":"Color tint applied to an object.","Color tint applied to an object":"Color tint applied to an object","Color tint applied to _PARAM1_":"Color tint applied to _PARAM1_","Check if a color tint is applied to an object.":"Check if a color tint is applied to an object.","Is a color tint applied to an object":"Is a color tint applied to an object","_PARAM1_ is color tinted":"_PARAM1_ is color tinted","Toggle color tint between the starting tint and a given value.":"Toggle color tint between the starting tint and a given value.","Toggle a color tint":"Toggle a color tint","Toggle color tint _PARAM2_ on _PARAM1_":"Toggle color tint _PARAM2_ on _PARAM1_","Color tint":"Color tint","Toggle object visibility.":"Toggle object visibility.","Toggle object visibility":"Toggle object visibility","Toggle visibility of _PARAM1_":"Toggle visibility of _PARAM1_","Make the object flash (blink) for a period of time so it alternates between visible and invisible.":"Make the object flash (blink) for a period of time so it alternates between visible and invisible.","Flash visibility (blink)":"Flash visibility (blink)","Half period":"Half period","Time that the object is invisible":"Time that the object is invisible","Flash duration":"Flash duration","Use \"0\" to keep flashing until stopped":"Use \"0\" to keep flashing until stopped","Make an object flash (blink) visibility for a period of time.":"Make an object flash (blink) visibility for a period of time.","Make _PARAM0_ flash (blink) for _PARAM2_ seconds":"Make _PARAM0_ flash (blink) for _PARAM2_ seconds","Duration of the flashing, in seconds":"Duration of the flashing, in seconds","Use \"0\" to keep flashing until stopped.":"Use \"0\" to keep flashing until stopped.","Check if an object is flashing visibility.":"Check if an object is flashing visibility.","Is object flashing visibility":"Is object flashing visibility","_PARAM0_ is flashing":"_PARAM0_ is flashing","Stop flashing visibility (blink) of an object.":"Stop flashing visibility (blink) of an object.","Stop flashing visibility (blink)":"Stop flashing visibility (blink)","Stop flashing visibility of _PARAM0_":"Stop flashing visibility of _PARAM0_","the half period of the object (time the object is invisible).":"the half period of the object (time the object is invisible).","the half period (time the object is invisible)":"the half period (time the object is invisible)","Make an object flash a color tint for a period of time.":"Make an object flash a color tint for a period of time.","Flash color tint":"Flash color tint","Time between flashes":"Time between flashes","Tint color":"Tint color","Flash a color tint":"Flash a color tint","Make _PARAM0_ flash the color tint _PARAM3_ for _PARAM2_ seconds":"Make _PARAM0_ flash the color tint _PARAM3_ for _PARAM2_ seconds","Check if an object is flashing a color tint.":"Check if an object is flashing a color tint.","Is object flashing a color tint":"Is object flashing a color tint","_PARAM0_ is flashing a color tint":"_PARAM0_ is flashing a color tint","Stop flashing a color tint on an object.":"Stop flashing a color tint on an object.","Stop flashing color tint":"Stop flashing color tint","Stop flashing color tint _PARAM0_":"Stop flashing color tint _PARAM0_","the half period (time between flashes) of the object.":"the half period (time between flashes) of the object.","the half period (time between flashes)":"the half period (time between flashes)","Flash opacity smoothly (fade) in a repeating loop.":"Flash opacity smoothly (fade) in a repeating loop.","Flash opacity smothly (fade)":"Flash opacity smothly (fade)","Opacity capability":"Opacity capability","Tween Behavior (required)":"Tween Behavior (required)","Target opacity (Range: 0 - 255)":"Target opacity (Range: 0 - 255)","Opacity will fade between the starting value and a target value":"Opacity will fade between the starting value and a target value","Starting opacity":"Starting opacity","Make an object flash opacity smoothly (fade) in a repeating loop.":"Make an object flash opacity smoothly (fade) in a repeating loop.","Flash the opacity (fade)":"Flash the opacity (fade)","Make _PARAM0_ flash opacity smoothly to _PARAM4_ in a loop for _PARAM3_ seconds":"Make _PARAM0_ flash opacity smoothly to _PARAM4_ in a loop for _PARAM3_ seconds","Target opacity":"Target opacity","Check if an object is flashing opacity.":"Check if an object is flashing opacity.","Is object flashing opacity":"Is object flashing opacity","_PARAM0_ is flashing opacity":"_PARAM0_ is flashing opacity","Stop flashing opacity of an object.":"Stop flashing opacity of an object.","Stop flashing opacity":"Stop flashing opacity","Stop flashing opacity of _PARAM0_":"Stop flashing opacity of _PARAM0_","Make the object flash an effect for a period of time.":"Make the object flash an effect for a period of time.","Flash effect":"Flash effect","Name of effect":"Name of effect","Make an object flash an effect for a period of time.":"Make an object flash an effect for a period of time.","Flash an effect":"Flash an effect","Make _PARAM0_ flash the effect _PARAM3_ for _PARAM2_ seconds":"Make _PARAM0_ flash the effect _PARAM3_ for _PARAM2_ seconds","Check if an object is flashing an effect.":"Check if an object is flashing an effect.","Is object flashing an effect":"Is object flashing an effect","_PARAM0_ is flashing an effect":"_PARAM0_ is flashing an effect","Stop flashing an effect of an object.":"Stop flashing an effect of an object.","Stop flashing an effect":"Stop flashing an effect","Stop flashing an effect on _PARAM0_":"Stop flashing an effect on _PARAM0_","Toggle an object effect.":"Toggle an object effect.","Toggle an object effect":"Toggle an object effect","Toggle effect _PARAM2_ on _PARAM0_":"Toggle effect _PARAM2_ on _PARAM0_","Effect name to toggle":"Effect name to toggle","Flash layer":"Flash layer","Show a layer for a set duration then automatically hide it.":"Show a layer for a set duration then automatically hide it.","Make a layer visible for a specified duration, and then hide the layer.":"Make a layer visible for a specified duration, and then hide the layer.","Make layer _PARAM1_ visible for _PARAM2_ seconds":"Make layer _PARAM1_ visible for _PARAM2_ seconds","Flash and transition painter":"Flash and transition painter","Screen transitions painted with plain color fill using Shape Painter.":"Screen transitions painted with plain color fill using Shape Painter.","Paint all over the screen a color for a period of time.":"Paint all over the screen a color for a period of time.","Type of effect":"Type of effect","Direction of transition":"Direction of transition","The maximum of the opacity only for flash":"The maximum of the opacity only for flash","Paint Effect.":"Paint Effect.","Paint Effect":"Paint Effect","Paint effect type _PARAM4_ of _PARAM0_ with direction _PARAM5_ and color _PARAM2_ for _PARAM3_ seconds":"Paint effect type _PARAM4_ of _PARAM0_ with direction _PARAM5_ and color _PARAM2_ for _PARAM3_ seconds","Direction transition":"Direction transition","End opacity":"End opacity","Paint effect ended.":"Paint effect ended.","Paint effect ended":"Paint effect ended","When paint effect of _PARAM0_ ends":"When paint effect of _PARAM0_ ends","Follow multiple 2D objects with the camera":"Follow multiple 2D objects with the camera","Auto-zoom and position camera to keep all instances of an object visible.":"Auto-zoom and position camera to keep all instances of an object visible.","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen.":"Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen.","Follow multiple objects with camera":"Follow multiple objects with camera","Move camera to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Max zoom: _PARAM4_. Move the camera at a speed of _PARAM5_":"Move camera to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Max zoom: _PARAM4_. Move the camera at a speed of _PARAM5_","Object (or Object group)":"Object (or Object group)","Extra space on sides of screen":"Extra space on sides of screen","Each side will include this buffer":"Each side will include this buffer","Extra space on top and bottom of screen":"Extra space on top and bottom of screen","Maximum zoom level (Default: 1)":"Maximum zoom level (Default: 1)","Limit how far the camera will zoom in":"Limit how far the camera will zoom in","Camera move speed (Range: 0 to 1) (Default: 0.05)":"Camera move speed (Range: 0 to 1) (Default: 0.05)","Percent of distance to destination that will be travelled each frame (used by lerp function)":"Percent of distance to destination that will be travelled each frame (used by lerp function)","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen. (Deprecated)":"Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen. (Deprecated)","Follow multiple objects with camera (Deprecated)":"Follow multiple objects with camera (Deprecated)","Move camera on layer _PARAM6_ to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Use a zoom between _PARAM4_ and _PARAM5_. Move the camera at a speed of _PARAM8_":"Move camera on layer _PARAM6_ to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Use a zoom between _PARAM4_ and _PARAM5_. Move the camera at a speed of _PARAM8_","Minimum zoom level":"Minimum zoom level","Limit how far the camera will zoom OUT":"Limit how far the camera will zoom OUT","Limit how far the camera will zoom IN":"Limit how far the camera will zoom IN","Use \"\" for base layer":"Use \"\" for base layer","Gamepads (controllers)":"Gamepads (controllers)","Gamepad/controller support: buttons, sticks, triggers, vibration. Mapper behaviors for 2D/3D.":"Gamepad/controller support: buttons, sticks, triggers, vibration. Mapper behaviors for 2D/3D.","Accelerated speed":"Accelerated speed","Current speed":"Current speed","Targeted speed":"Targeted speed","Deceleration":"Deceleration","Get the value of the pressure on a gamepad trigger.":"Get the value of the pressure on a gamepad trigger.","Pressure on a gamepad trigger":"Pressure on a gamepad trigger","Player _PARAM1_ push axis _PARAM2_ to _PARAM3_":"Player _PARAM1_ push axis _PARAM2_ to _PARAM3_","The gamepad identifier: 1, 2, 3 or 4":"The gamepad identifier: 1, 2, 3 or 4","Trigger button":"Trigger button","the force of gamepad stick (from 0 to 1).":"the force of gamepad stick (from 0 to 1).","Stick force":"Stick force","the gamepad _PARAM1_ _PARAM2_ stick force":"the gamepad _PARAM1_ _PARAM2_ stick force","Stick: \"Left\" or \"Right\"":"Stick: \"Left\" or \"Right\"","Get the rotation value of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"Get the rotation value of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.","Value of a stick rotation (deprecated)":"Value of a stick rotation (deprecated)","Return the angle of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"Return the angle of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.","Stick angle":"Stick angle","Get the value of axis of a gamepad stick.":"Get the value of axis of a gamepad stick.","Value of a gamepad axis (deprecated)":"Value of a gamepad axis (deprecated)","Direction":"Direction","Return the gamepad stick force on X axis (from -1 at the left to 1 at the right).":"Return the gamepad stick force on X axis (from -1 at the left to 1 at the right).","Stick X force":"Stick X force","Return the gamepad stick force on Y axis (from -1 at the top to 1 at the bottom).":"Return the gamepad stick force on Y axis (from -1 at the top to 1 at the bottom).","Stick Y force":"Stick Y force","Test if a button is released on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"Test if a button is released on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button released":"Gamepad button released","Button _PARAM2_ of gamepad _PARAM1_ is released":"Button _PARAM2_ of gamepad _PARAM1_ is released","Name of the button":"Name of the button","Check if a button was just pressed on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"Check if a button was just pressed on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button just pressed":"Gamepad button just pressed","Button _PARAM2_ of gamepad _PARAM1_ was just pressed":"Button _PARAM2_ of gamepad _PARAM1_ was just pressed","Return the index of the last pressed button of a gamepad.":"Return the index of the last pressed button of a gamepad.","Last pressed button (id)":"Last pressed button (id)","Check if any button is pressed on a gamepad.":"Check if any button is pressed on a gamepad.","Any gamepad button pressed":"Any gamepad button pressed","Any button of gamepad _PARAM1_ is pressed":"Any button of gamepad _PARAM1_ is pressed","Return the last button pressed. \nButtons for Xbox and PS4 can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Both: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"Return the last button pressed. \nButtons for Xbox and PS4 can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Both: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Last pressed button (string)":"Last pressed button (string)","Button _PARAM2_ of gamepad _PARAM1_ is pressed":"Button _PARAM2_ of gamepad _PARAM1_ is pressed","Controller type":"Controller type","Return the number of gamepads.":"Return the number of gamepads.","Gamepad count":"Gamepad count","Check if a button is pressed on a gamepad. \nButtons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"Check if a button is pressed on a gamepad. \nButtons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button pressed":"Gamepad button pressed","Return the value of the deadzone applied to a gamepad sticks, between 0 and 1.":"Return the value of the deadzone applied to a gamepad sticks, between 0 and 1.","Gamepad deadzone for sticks":"Gamepad deadzone for sticks","Set the deadzone for sticks of the gamepad. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved). Deadzone is between 0 and 1, and is by default 0.2.":"Set the deadzone for sticks of the gamepad. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved). Deadzone is between 0 and 1, and is by default 0.2.","Set gamepad deadzone for sticks":"Set gamepad deadzone for sticks","Set deadzone for sticks on gamepad: _PARAM1_ to _PARAM2_":"Set deadzone for sticks on gamepad: _PARAM1_ to _PARAM2_","Deadzone for sticks, 0.2 by default (0 to 1)":"Deadzone for sticks, 0.2 by default (0 to 1)","Check if a stick of a gamepad is pushed in a given direction.":"Check if a stick of a gamepad is pushed in a given direction.","Gamepad stick pushed (axis)":"Gamepad stick pushed (axis)","_PARAM2_ stick of gamepad _PARAM1_ is pushed in direction _PARAM3_":"_PARAM2_ stick of gamepad _PARAM1_ is pushed in direction _PARAM3_","Return the number of connected gamepads.":"Return the number of connected gamepads.","Connected gamepads count":"Connected gamepads count","Return a string containing informations about the specified gamepad.":"Return a string containing informations about the specified gamepad.","Gamepad type":"Gamepad type","Player _PARAM1_ use _PARAM2_ controller":"Player _PARAM1_ use _PARAM2_ controller","Check if the specified gamepad has the specified information in its description. Useful to know if the gamepad is a Xbox or PS4 controller.":"Check if the specified gamepad has the specified information in its description. Useful to know if the gamepad is a Xbox or PS4 controller.","Gamepad _PARAM1_ is a _PARAM2_ controller":"Gamepad _PARAM1_ is a _PARAM2_ controller","Type: \"Xbox\", \"PS4\", \"Steam\" or \"PS3\" (among other)":"Type: \"Xbox\", \"PS4\", \"Steam\" or \"PS3\" (among other)","Check if a gamepad is connected.":"Check if a gamepad is connected.","Gamepad connected":"Gamepad connected","Gamepad _PARAM1_ is plugged and connected":"Gamepad _PARAM1_ is plugged and connected","Generate a vibration on the specified controller. Might only work if the game is running in a recent web browser.":"Generate a vibration on the specified controller. Might only work if the game is running in a recent web browser.","Gamepad vibration":"Gamepad vibration","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds":"Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds","Time of the vibration, in seconds (optional, default value is 1)":"Time of the vibration, in seconds (optional, default value is 1)","Generate an advanced vibration on the specified controller. Incompatible with Firefox.":"Generate an advanced vibration on the specified controller. Incompatible with Firefox.","Advanced gamepad vibration":"Advanced gamepad vibration","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds with the vibration magnitude of _PARAM3_ and _PARAM4_":"Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds with the vibration magnitude of _PARAM3_ and _PARAM4_","Strong rumble magnitude (from 0 to 1)":"Strong rumble magnitude (from 0 to 1)","Weak rumble magnitude (from 0 to 1)":"Weak rumble magnitude (from 0 to 1)","Change a vibration on the specified controller. Incompatible with Firefox.":"Change a vibration on the specified controller. Incompatible with Firefox.","Change gamepad active vibration":"Change gamepad active vibration","Change the vibration magnitude of _PARAM2_ & _PARAM3_ on gamepad _PARAM1_":"Change the vibration magnitude of _PARAM2_ & _PARAM3_ on gamepad _PARAM1_","Check if any button is released on a gamepad.":"Check if any button is released on a gamepad.","Any gamepad button released":"Any gamepad button released","Any button of gamepad _PARAM1_ is released":"Any button of gamepad _PARAM1_ is released","Return the strength of the weak vibration motor on the gamepad of a player.":"Return the strength of the weak vibration motor on the gamepad of a player.","Weak rumble magnitude":"Weak rumble magnitude","Return the strength of the strong vibration motor on the gamepad of a player.":"Return the strength of the strong vibration motor on the gamepad of a player.","Strong rumble magnitude":"Strong rumble magnitude","Control a platformer character with a gamepad.":"Control a platformer character with a gamepad.","Platformer gamepad mapper":"Platformer gamepad mapper","Gamepad identifier (1, 2, 3 or 4)":"Gamepad identifier (1, 2, 3 or 4)","Use directional pad":"Use directional pad","Controls":"Controls","Use left stick":"Use left stick","Use right stick":"Use right stick","Jump button":"Jump button","Control a 3D physics character with a gamepad.":"Control a 3D physics character with a gamepad.","3D platformer gamepad mapper":"3D platformer gamepad mapper","Walk joystick":"Walk joystick","3D shooter gamepad mapper":"3D shooter gamepad mapper","Camera joystick":"Camera joystick","Control camera rotations with a gamepad.":"Control camera rotations with a gamepad.","First person camera gamepad mapper":"First person camera gamepad mapper","Maximum rotation speed":"Maximum rotation speed","Horizontal rotation":"Horizontal rotation","Rotation acceleration":"Rotation acceleration","Rotation deceleration":"Rotation deceleration","Vertical rotation":"Vertical rotation","Minimum angle":"Minimum angle","Maximum angle":"Maximum angle","Z position offset":"Z position offset","Position":"Position","Current rotation speed Z":"Current rotation speed Z","Current rotation speed Y":"Current rotation speed Y","Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","Move the camera to look though _PARAM0_ eyes":"Move the camera to look though _PARAM0_ eyes","the maximum horizontal rotation speed of the object.":"the maximum horizontal rotation speed of the object.","Maximum horizontal rotation speed":"Maximum horizontal rotation speed","the maximum horizontal rotation speed":"the maximum horizontal rotation speed","the horizontal rotation acceleration of the object.":"the horizontal rotation acceleration of the object.","Horizontal rotation acceleration":"Horizontal rotation acceleration","the horizontal rotation acceleration":"the horizontal rotation acceleration","the horizontal rotation deceleration of the object.":"the horizontal rotation deceleration of the object.","Horizontal rotation deceleration":"Horizontal rotation deceleration","the horizontal rotation deceleration":"the horizontal rotation deceleration","the maximum vertical rotation speed of the object.":"the maximum vertical rotation speed of the object.","Maximum vertical rotation speed":"Maximum vertical rotation speed","the maximum vertical rotation speed":"the maximum vertical rotation speed","the vertical rotation acceleration of the object.":"the vertical rotation acceleration of the object.","Vertical rotation acceleration":"Vertical rotation acceleration","the vertical rotation acceleration":"the vertical rotation acceleration","the vertical rotation deceleration of the object.":"the vertical rotation deceleration of the object.","Vertical rotation deceleration":"Vertical rotation deceleration","the vertical rotation deceleration":"the vertical rotation deceleration","the minimum vertical camera angle of the object.":"the minimum vertical camera angle of the object.","Minimum vertical camera angle":"Minimum vertical camera angle","the minimum vertical camera angle":"the minimum vertical camera angle","the maximum vertical camera angle of the object.":"the maximum vertical camera angle of the object.","Maximum vertical camera angle":"Maximum vertical camera angle","the maximum vertical camera angle":"the maximum vertical camera angle","the z position offset of the object.":"the z position offset of the object.","the z position offset":"the z position offset","Control a 3D physics car with a gamepad.":"Control a 3D physics car with a gamepad.","3D car gamepad mapper":"3D car gamepad mapper","3D physics car":"3D physics car","Hand brake button":"Hand brake button","Control a top-down character with a gamepad.":"Control a top-down character with a gamepad.","Top-down gamepad mapper":"Top-down gamepad mapper","Top-down movement behavior":"Top-down movement behavior","Stick mode":"Stick mode","Hash":"Hash","Hash strings using MD5 or SHA256 algorithms.":"Hash strings using MD5 or SHA256 algorithms.","Returns a Hash a MD5 based on a string.":"Returns a Hash a MD5 based on a string.","Hash a String with MD5":"Hash a String with MD5","String to be hashed":"String to be hashed","Returns a Hash a SHA256 based on a string.":"Returns a Hash a SHA256 based on a string.","Hash a String with SHA256":"Hash a String with SHA256","Health points and damage":"Health points and damage","Health/life system: damage, shield, armor, regeneration, cooldown, and over-healing.":"Health/life system: damage, shield, armor, regeneration, cooldown, and over-healing.","Manage health (life) points, shield and armor.":"Manage health (life) points, shield and armor.","Health":"Health","Starting health":"Starting health","Current health (life) points":"Current health (life) points","Maximum health":"Maximum health","Use 0 for no maximum.":"Use 0 for no maximum.","Damage cooldown":"Damage cooldown","Allow heals to increase health above max health (regen will never exceed max health)":"Allow heals to increase health above max health (regen will never exceed max health)","Damage to health from the previous incoming damage":"Damage to health from the previous incoming damage","Chance to dodge incoming damage (between 0 and 1)":"Chance to dodge incoming damage (between 0 and 1)","When a damage is dodged, no damage is applied.":"When a damage is dodged, no damage is applied.","Health points gained from the previous heal":"Health points gained from the previous heal","Rate of health regeneration (points per second)":"Rate of health regeneration (points per second)","Health regeneration":"Health regeneration","Health regeneration delay":"Health regeneration delay","Delay before health regeneration starts after a hit.":"Delay before health regeneration starts after a hit.","Current shield points":"Current shield points","Shield":"Shield","Maximum shield":"Maximum shield","Leave 0 for unlimited.":"Leave 0 for unlimited.","Duration of shield":"Duration of shield","Use 0 to make the shield permanent.":"Use 0 to make the shield permanent.","Rate of shield regeneration (points per second)":"Rate of shield regeneration (points per second)","Shield regeneration":"Shield regeneration","Block excess damage when shield is broken":"Block excess damage when shield is broken","Shield regeneration delay":"Shield regeneration delay","Delay before shield regeneration starts after a hit.":"Delay before shield regeneration starts after a hit.","Damage to shield from the previous incoming damage":"Damage to shield from the previous incoming damage","Flat damage reduction from armor":"Flat damage reduction from armor","Incoming damages are reduced by this value.":"Incoming damages are reduced by this value.","Armor":"Armor","Percentage damage reduction from armor (between 0 and 1)":"Percentage damage reduction from armor (between 0 and 1)","Apply damage to the object. Shield and armor can reduce this damage if enabled.":"Apply damage to the object. Shield and armor can reduce this damage if enabled.","Apply damage to an object":"Apply damage to an object","Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)":"Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)","Points of damage":"Points of damage","Shield can reduce damage taken":"Shield can reduce damage taken","Armor can reduce damage taken":"Armor can reduce damage taken","current health points of the object.":"current health points of the object.","Health points":"Health points","health points":"health points","Change the health points of the object. Will not trigger damage cooldown.":"Change the health points of the object. Will not trigger damage cooldown.","Change health points":"Change health points","Change the health of _PARAM0_ to _PARAM2_ points":"Change the health of _PARAM0_ to _PARAM2_ points","New health value":"New health value","Change health points (deprecated)":"Change health points (deprecated)","Heal the object by increasing its health points.":"Heal the object by increasing its health points.","Heal object":"Heal object","Heal _PARAM0_ with _PARAM2_ health points":"Heal _PARAM0_ with _PARAM2_ health points","Points to heal (will be added to object health)":"Points to heal (will be added to object health)","the maximum health points of the object.":"the maximum health points of the object.","Maximum health points":"Maximum health points","the maximum health points":"the maximum health points","Change the object maximum health points.":"Change the object maximum health points.","Maximum health points (deprecated)":"Maximum health points (deprecated)","Change the maximum health of _PARAM0_ to _PARAM2_ points":"Change the maximum health of _PARAM0_ to _PARAM2_ points","the rate of health regeneration (points per second).":"the rate of health regeneration (points per second).","Rate of health regeneration":"Rate of health regeneration","the rate of health regeneration":"the rate of health regeneration","Rate of regen":"Rate of regen","Change the rate of health regeneration.":"Change the rate of health regeneration.","Rate of health regeneration (deprecated)":"Rate of health regeneration (deprecated)","Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second":"Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second","the duration of damage cooldown (seconds).":"the duration of damage cooldown (seconds).","the duration of damage cooldown":"the duration of damage cooldown","Duration of damage cooldown (seconds)":"Duration of damage cooldown (seconds)","Change the duration of damage cooldown (seconds).":"Change the duration of damage cooldown (seconds).","Damage cooldown (deprecated)":"Damage cooldown (deprecated)","Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds":"Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds","the delay before health regeneration starts after last being hit (seconds).":"the delay before health regeneration starts after last being hit (seconds).","the health regeneration delay":"the health regeneration delay","Delay (seconds)":"Delay (seconds)","Change the delay before health regeneration starts after being hit.":"Change the delay before health regeneration starts after being hit.","Health regeneration delay (deprecated)":"Health regeneration delay (deprecated)","Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds":"Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds","the chance to dodge incoming damage (range: 0 to 1).":"the chance to dodge incoming damage (range: 0 to 1).","Dodge chance":"Dodge chance","the chance to dodge incoming damage":"the chance to dodge incoming damage","Chance to dodge (Range: 0 to 1)":"Chance to dodge (Range: 0 to 1)","Change the chance to dodge incoming damage.":"Change the chance to dodge incoming damage.","Chance to dodge incoming damage (deprecated)":"Chance to dodge incoming damage (deprecated)","Change the chance to dodge on _PARAM0_ to _PARAM2_":"Change the chance to dodge on _PARAM0_ to _PARAM2_","the flat damage reduction from the armor. Incoming damage is reduced by this value.":"the flat damage reduction from the armor. Incoming damage is reduced by this value.","Armor flat damage reduction":"Armor flat damage reduction","the armor flat damage reduction":"the armor flat damage reduction","Flat reduction from armor":"Flat reduction from armor","Change the flat damage reduction from armor. Incoming damage is reduced by this value.":"Change the flat damage reduction from armor. Incoming damage is reduced by this value.","Flat damage reduction from armor (deprecated)":"Flat damage reduction from armor (deprecated)","Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points":"Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points","the percent damage reduction from armor (range: 0 to 1).":"the percent damage reduction from armor (range: 0 to 1).","Armor percent damage reduction":"Armor percent damage reduction","the armor percent damage reduction":"the armor percent damage reduction","Percent damage reduction from armor":"Percent damage reduction from armor","Change the percent damage reduction from armor. Range: 0 to 1.":"Change the percent damage reduction from armor. Range: 0 to 1.","Percent damage reduction from armor (deprecated)":"Percent damage reduction from armor (deprecated)","Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_":"Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_","Allow heals to increase health above max health. Regeneration will not exceed max health.":"Allow heals to increase health above max health. Regeneration will not exceed max health.","Allow over-healing":"Allow over-healing","Allow over-healing on _PARAM0_: _PARAM2_":"Allow over-healing on _PARAM0_: _PARAM2_","Mark object as hit at least once.":"Mark object as hit at least once.","Mark object as hit at least once":"Mark object as hit at least once","Mark _PARAM0_ as hit at least once: _PARAM2_":"Mark _PARAM0_ as hit at least once: _PARAM2_","Hit at least once":"Hit at least once","Mark object as just damaged.":"Mark object as just damaged.","Mark object as just damaged":"Mark object as just damaged","Mark _PARAM0_ as just damaged: _PARAM2_":"Mark _PARAM0_ as just damaged: _PARAM2_","Just damaged":"Just damaged","Trigger damage cooldown.":"Trigger damage cooldown.","Trigger damage cooldown":"Trigger damage cooldown","Trigger the damage cooldown on _PARAM0_":"Trigger the damage cooldown on _PARAM0_","Check if the object has been hit at least once.":"Check if the object has been hit at least once.","Object has been hit at least once":"Object has been hit at least once","_PARAM0_ has been hit at least once":"_PARAM0_ has been hit at least once","Check if health was just damaged previously in the events.":"Check if health was just damaged previously in the events.","Is health just damaged":"Is health just damaged","Health has just been damaged on _PARAM0_":"Health has just been damaged on _PARAM0_","Check if the object was just healed previously in the events.":"Check if the object was just healed previously in the events.","Is just healed":"Is just healed","_PARAM0_ has just been healed":"_PARAM0_ has just been healed","Check if damage cooldown is active. Object and shield cannot be damaged while this is active.":"Check if damage cooldown is active. Object and shield cannot be damaged while this is active.","Is damage cooldown active":"Is damage cooldown active","Damage cooldown on _PARAM0_ is active":"Damage cooldown on _PARAM0_ is active","the time before damage cooldown ends (seconds).":"the time before damage cooldown ends (seconds).","Time remaining in damage cooldown":"Time remaining in damage cooldown","the time before damage cooldown end":"the time before damage cooldown end","Check if the object is considered dead (no health points).":"Check if the object is considered dead (no health points).","Is dead":"Is dead","_PARAM0_ is dead":"_PARAM0_ is dead","the time since last taken hit (seconds).":"the time since last taken hit (seconds).","Time since last hit":"Time since last hit","the time since last taken hit on health":"the time since last taken hit on health","the health damage taken from most recent hit.":"the health damage taken from most recent hit.","Health damage taken from most recent hit":"Health damage taken from most recent hit","the health damage taken from most recent hit":"the health damage taken from most recent hit","the maximum shield points of the object.":"the maximum shield points of the object.","Maximum shield points":"Maximum shield points","the maximum shield points":"the maximum shield points","Change the maximum shield points of the object.":"Change the maximum shield points of the object.","Maximum shield points (deprecated)":"Maximum shield points (deprecated)","Change the maximum shield of _PARAM0_ to _PARAM2_ points":"Change the maximum shield of _PARAM0_ to _PARAM2_ points","Change maximum shield points.":"Change maximum shield points.","Max shield points (deprecated)":"Max shield points (deprecated)","Change the maximum shield points on _PARAM0_ to _PARAM2_ points":"Change the maximum shield points on _PARAM0_ to _PARAM2_ points","Shield points":"Shield points","the current shield points of the object.":"the current shield points of the object.","the shield points":"the shield points","Change current shield points. Will not trigger damage cooldown.":"Change current shield points. Will not trigger damage cooldown.","Shield points (deprecated)":"Shield points (deprecated)","Change current shield points on _PARAM0_ to _PARAM2_ points":"Change current shield points on _PARAM0_ to _PARAM2_ points","the rate of shield regeneration (points per second).":"the rate of shield regeneration (points per second).","Rate of shield regeneration":"Rate of shield regeneration","the rate of shield regeneration":"the rate of shield regeneration","Regeneration rate (points per second)":"Regeneration rate (points per second)","Change rate of shield regeneration.":"Change rate of shield regeneration.","Shield regeneration rate (deprecated)":"Shield regeneration rate (deprecated)","Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second":"Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second","the delay before shield regeneration starts after being hit (seconds).":"the delay before shield regeneration starts after being hit (seconds).","the shield regeneration delay":"the shield regeneration delay","Regeneration delay (seconds)":"Regeneration delay (seconds)","Change delay before shield regeneration starts after being hit.":"Change delay before shield regeneration starts after being hit.","Shield regeneration delay (deprecated)":"Shield regeneration delay (deprecated)","Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds":"Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds","the duration of the shield (seconds). A value of \"0\" means the shield is permanent.":"the duration of the shield (seconds). A value of \"0\" means the shield is permanent.","the duration of the shield":"the duration of the shield","Shield duration (seconds)":"Shield duration (seconds)","Change duration of shield. Use \"0\" to make shield permanent.":"Change duration of shield. Use \"0\" to make shield permanent.","Duration of shield (deprecated)":"Duration of shield (deprecated)","Change the duration of shield on _PARAM0_ to _PARAM2_ seconds":"Change the duration of shield on _PARAM0_ to _PARAM2_ seconds","Renew shield duration to it's full value.":"Renew shield duration to it's full value.","Renew shield duration":"Renew shield duration","Renew the shield duration on _PARAM0_":"Renew the shield duration on _PARAM0_","Activate the shield by setting the shield points and renewing the shield duration (optional).":"Activate the shield by setting the shield points and renewing the shield duration (optional).","Activate shield":"Activate shield","Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)":"Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)","Enable (or disable) blocking excess damage when shield breaks.":"Enable (or disable) blocking excess damage when shield breaks.","Block excess damage when shield breaks":"Block excess damage when shield breaks","Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_":"Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_","Block excess damage":"Block excess damage","Check if the shield was just damaged previously in the events.":"Check if the shield was just damaged previously in the events.","Is shield just damaged":"Is shield just damaged","Shield on _PARAM0_ has just been damaged":"Shield on _PARAM0_ has just been damaged","Check if incoming damage was just dodged.":"Check if incoming damage was just dodged.","Damage was just dodged":"Damage was just dodged","_PARAM0_ just dodged incoming damage":"_PARAM0_ just dodged incoming damage","Check if the shield is active (based on shield points and duration).":"Check if the shield is active (based on shield points and duration).","Is shield active":"Is shield active","Shield on _PARAM0_ is active":"Shield on _PARAM0_ is active","the time before the shield duration ends (seconds).":"the time before the shield duration ends (seconds).","Time before shield duration ends":"Time before shield duration ends","the time before the shield duration end":"the time before the shield duration end","the shield damage taken from most recent hit.":"the shield damage taken from most recent hit.","Shield damage taken from most recent hit":"Shield damage taken from most recent hit","the shield damage taken from most recent hit":"the shield damage taken from most recent hit","the health points gained from previous heal.":"the health points gained from previous heal.","Health points gained from previous heal":"Health points gained from previous heal","the health points gained from previous heal":"the health points gained from previous heal","Hexagonal 2D grid":"Hexagonal 2D grid","Snap objects to an hexagonal grid.":"Snap objects to an hexagonal grid.","Snap object to a virtual pointy topped hexagonal grid (this is not the grid used in the editor).":"Snap object to a virtual pointy topped hexagonal grid (this is not the grid used in the editor).","Snap objects to a virtual pointy topped hexagonal grid":"Snap objects to a virtual pointy topped hexagonal grid","Snap _PARAM1_ to a virtual pointy topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual pointy topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","Objects to snap to the virtual grid":"Objects to snap to the virtual grid","Width of a cell of the virtual grid (in pixels)":"Width of a cell of the virtual grid (in pixels)","Height of a cell of the virtual grid (in pixels)":"Height of a cell of the virtual grid (in pixels)","The actual row height will be 3/4 of this.":"The actual row height will be 3/4 of this.","Offset on the X axis of the virtual grid (in pixels)":"Offset on the X axis of the virtual grid (in pixels)","Offset on the Y axis of the virtual grid (in pixels)":"Offset on the Y axis of the virtual grid (in pixels)","Odd rows are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"Odd rows are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.","Snap object to a virtual flat topped hexagonal grid (this is not the grid used in the editor).":"Snap object to a virtual flat topped hexagonal grid (this is not the grid used in the editor).","Snap objects to a virtual flat topped hexagonal grid":"Snap objects to a virtual flat topped hexagonal grid","Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","The actual column width will be 3/4 of this.":"The actual column width will be 3/4 of this.","Odd columns are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"Odd columns are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.","Snap object to a virtual bubble grid (this is not the grid used in the editor).":"Snap object to a virtual bubble grid (this is not the grid used in the editor).","Snap objects to a virtual bubble grid":"Snap objects to a virtual bubble grid","Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","The actual row height will be 7/8 of this.":"The actual row height will be 7/8 of this.","Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way":"Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way","Homing projectile":"Homing projectile","Make a projectile object move towards a target object.":"Make a projectile object move towards a target object.","Lock projectile object to target object. (This is required for \"Move projectile towards target\").":"Lock projectile object to target object. (This is required for \"Move projectile towards target\").","Lock projectile to target":"Lock projectile to target","Lock projectile _PARAM1_ to target _PARAM2_":"Lock projectile _PARAM1_ to target _PARAM2_","Projectile object":"Projectile object","Move physics projectile towards the object that it has been locked to. This action must be run every frame.":"Move physics projectile towards the object that it has been locked to. This action must be run every frame.","Move physics projectile towards target":"Move physics projectile towards target","Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_","Physics Behavior":"Physics Behavior","Initial speed (pixels per second)":"Initial speed (pixels per second)","Acceleration (speed increase per second)":"Acceleration (speed increase per second)","Max lifetime (seconds)":"Max lifetime (seconds)","Projectile will be deleted after this value is reached.":"Projectile will be deleted after this value is reached.","Delete Projectile if it collides with Target:":"Delete Projectile if it collides with Target:","Move projectile towards the object that it has been locked to. This action must be run every frame.":"Move projectile towards the object that it has been locked to. This action must be run every frame.","Move projectile towards target":"Move projectile towards target","Move projectile _PARAM1_ towards target _PARAM2_. Rotate speed: _PARAM3_ Initial speed: _PARAM4_ Acceleration: _PARAM5_ Max speed: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"Move projectile _PARAM1_ towards target _PARAM2_. Rotate speed: _PARAM3_ Initial speed: _PARAM4_ Acceleration: _PARAM5_ Max speed: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_","Idle object tracker":"Idle object tracker","Detect if object hasn't moved for a configurable duration.":"Detect if object hasn't moved for a configurable duration.","Check if an object has not moved (with some tolerance, 20 pixels by default) for a certain duration (1 second by default).":"Check if an object has not moved (with some tolerance, 20 pixels by default) for a certain duration (1 second by default).","Idle tracker":"Idle tracker","Time, in seconds, before considering the object as idle":"Time, in seconds, before considering the object as idle","Distance, in pixels, allowed for the object to travel and still be considered idle":"Distance, in pixels, allowed for the object to travel and still be considered idle","Check if the object has just moved from its last position (using the tolerance configured in the behavior).":"Check if the object has just moved from its last position (using the tolerance configured in the behavior).","Has just moved from last position":"Has just moved from last position","_PARAM0_ has moved from its last position":"_PARAM0_ has moved from its last position","Check if the object is idle: it has not moved from its last position (or within the tolerance) for the time configured in the behavior.":"Check if the object is idle: it has not moved from its last position (or within the tolerance) for the time configured in the behavior.","Is idle (since enough time)":"Is idle (since enough time)","Iframe":"Iframe","Embed external websites in-game using HTML iframes. Create/delete dynamically.":"Embed external websites in-game using HTML iframes. Create/delete dynamically.","Create a new Iframe to embed a website inside the game.":"Create a new Iframe to embed a website inside the game.","Create an Iframe":"Create an Iframe","Create Iframe _PARAM1_ at position _PARAM5_:_PARAM6_, width: _PARAM3_, height: _PARAM4_, url: _PARAM2_":"Create Iframe _PARAM1_ at position _PARAM5_:_PARAM6_, width: _PARAM3_, height: _PARAM4_, url: _PARAM2_","Name (DOM id)":"Name (DOM id)","Width":"Width","Height":"Height","Show scrollbar":"Show scrollbar","Show border":"Show border","Extra CSS styles (optional)":"Extra CSS styles (optional)","e.g: `\"border: 10px #f00 solid;\"`":"e.g: `\"border: 10px #f00 solid;\"`","Delete the specified Iframe.":"Delete the specified Iframe.","Delete an Iframe":"Delete an Iframe","Delete Iframe _PARAM1_":"Delete Iframe _PARAM1_","Mobile In-App Purchase (experimental)":"Mobile In-App Purchase (experimental)","In-app purchases for Android/iOS: list products, buy, and restore purchases.":"In-app purchases for Android/iOS: list products, buy, and restore purchases.","Ads":"Ads","Register a Product of your store. This is required to do for all products you want to display or order from the app. \nMake sure you register them all and finalize registration before ordering a product.":"Register a Product of your store. This is required to do for all products you want to display or order from the app. \nMake sure you register them all and finalize registration before ordering a product.","Register a Product":"Register a Product","Register product _PARAM1_ as a _PARAM2_ (platform: _PARAM3_)":"Register product _PARAM1_ as a _PARAM2_ (platform: _PARAM3_)","The internal ID of the product":"The internal ID of the product","Use the ID of the product you entered on the IAP provider (Google play, Apple store...)":"Use the ID of the product you entered on the IAP provider (Google play, Apple store...)","The type of product":"The type of product","Which platform you're registering the product to":"Which platform you're registering the product to","Finalize store registration. Do this after registering every product and before ordering or getting information about a product.":"Finalize store registration. Do this after registering every product and before ordering or getting information about a product.","Finalize registration":"Finalize registration","Finalize store registration":"Finalize store registration","Opens the purchase menu to let the user buy a product.\nEnsure you use the condition to check if the store is ready and that the product ID has been registered and finalized before calling this action.":"Opens the purchase menu to let the user buy a product.\nEnsure you use the condition to check if the store is ready and that the product ID has been registered and finalized before calling this action.","Order a product":"Order a product","Order product _PARAM1_":"Order product _PARAM1_","The id of the product to buy":"The id of the product to buy","Get all the data about a product from the IAP provider and store it into a structure variable.\nCheck [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) for the exhaustive list of what can be retrieved from the product.":"Get all the data about a product from the IAP provider and store it into a structure variable.\nCheck [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) for the exhaustive list of what can be retrieved from the product.","Load product data in a variable":"Load product data in a variable","Store data of _PARAM1_ in scene variable named _PARAM2_":"Store data of _PARAM1_ in scene variable named _PARAM2_","The id or alias of the product to get info about":"The id or alias of the product to get info about","The name of the scene variable to store the product data in":"The name of the scene variable to store the product data in","The variable will be a structure, see [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) to know what child variables are accessible.":"The variable will be a structure, see [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) to know what child variables are accessible.","When an event is triggered for a product (approved or finished), this sets a scene variable to true. \nYou can then compare the value of the variable in a condition, and have actions launched to react to the changes.\nUse with Trigger Once to avoid registering multiple watchers unnecessarily.\nApproved is triggered after the purchase is complete.\nFinished is triggered after you have marked the purchased as delivered (less useful).":"When an event is triggered for a product (approved or finished), this sets a scene variable to true. \nYou can then compare the value of the variable in a condition, and have actions launched to react to the changes.\nUse with Trigger Once to avoid registering multiple watchers unnecessarily.\nApproved is triggered after the purchase is complete.\nFinished is triggered after you have marked the purchased as delivered (less useful).","Update a variable when a product event is triggered":"Update a variable when a product event is triggered","Watch the event _PARAM3_ for product _PARAM1_ and set scene variable named _PARAM2_ to true when it happens":"Watch the event _PARAM3_ for product _PARAM1_ and set scene variable named _PARAM2_ to true when it happens","The id of the product to watch":"The id of the product to watch","The name of the scene variable to set to \"true\" when the event happens":"The name of the scene variable to set to \"true\" when the event happens","The event to listen to":"The event to listen to","Mark a purchase as delivered, after you delivered the rewards the user has paid for and saved it somewhere. If you don't do so, the user will get the money refunded as the purchase will be considered as incomplete, with the rewards not given.":"Mark a purchase as delivered, after you delivered the rewards the user has paid for and saved it somewhere. If you don't do so, the user will get the money refunded as the purchase will be considered as incomplete, with the rewards not given.","Finalize a purchase":"Finalize a purchase","Mark purchase of _PARAM1_ as delivered":"Mark purchase of _PARAM1_ as delivered","The id or alias of the product to finalize":"The id or alias of the product to finalize","Triggers after finalizing the registration. Products can then be retrieved and purchased (you can get data of a product like the price, you can use the action to order a product...).":"Triggers after finalizing the registration. Products can then be retrieved and purchased (you can get data of a product like the price, you can use the action to order a product...).","Store is ready":"Store is ready","Input Validation":"Input Validation","Validate and sanitize strings: check format, length, trim, and normalize.":"Validate and sanitize strings: check format, length, trim, and normalize.","Check if the string is a valid phone number.":"Check if the string is a valid phone number.","Check if a string is a valid phone number":"Check if a string is a valid phone number","_PARAM1_ is a valid phone number":"_PARAM1_ is a valid phone number","Phone number":"Phone number","Check if the string is a valid URL.":"Check if the string is a valid URL.","Check if a string is a valid URL":"Check if a string is a valid URL","_PARAM1_ is a valid URL":"_PARAM1_ is a valid URL","Check if the string is a valid email.":"Check if the string is a valid email.","Check if a string is a valid email":"Check if a string is a valid email","_PARAM1_ is a valid email":"_PARAM1_ is a valid email","Email":"Email","Check if the string represents a number (potentially with a minus sign and potentially with a decimal point).":"Check if the string represents a number (potentially with a minus sign and potentially with a decimal point).","Check if a string represents a number":"Check if a string represents a number","_PARAM1_ represents a number":"_PARAM1_ represents a number","Number":"Number","Check if the string has only latin alphabet letters.":"Check if the string has only latin alphabet letters.","Check if a string has only latin alphabet letters":"Check if a string has only latin alphabet letters","_PARAM1_ has only latin alphabet letters":"_PARAM1_ has only latin alphabet letters","Letters":"Letters","Returns the string without the first line.":"Returns the string without the first line.","Remove the first line":"Remove the first line","String to remove the first line from":"String to remove the first line from","Count the number of lines in a string.":"Count the number of lines in a string.","Count lines":"Count lines","The text to count lines from":"The text to count lines from","Replaces every new line character with a space.":"Replaces every new line character with a space.","Replace new lines by a space":"Replace new lines by a space","The text to remove new lines from":"The text to remove new lines from","Remove any non-numerical and non A-Z characters.":"Remove any non-numerical and non A-Z characters.","Remove any non-numerical and non A-Z characters":"Remove any non-numerical and non A-Z characters","The text to sanitize":"The text to sanitize","Internet Connectivity":"Internet Connectivity","Check if the device is currently connected to the internet.":"Check if the device is currently connected to the internet.","Checks if the device is connected to the internet.":"Checks if the device is connected to the internet.","Is the device online?":"Is the device online?","The device is online":"The device is online","Simple inventories":"Simple inventories","Inventory system: add/remove items, stackable quantities, limited/unlimited capacity.":"Inventory system: add/remove items, stackable quantities, limited/unlimited capacity.","Add an item in an inventory.":"Add an item in an inventory.","Add an item":"Add an item","Add a _PARAM2_ to inventory _PARAM1_":"Add a _PARAM2_ to inventory _PARAM1_","Inventory name":"Inventory name","Item name":"Item name","Remove an item from an inventory.":"Remove an item from an inventory.","Remove an item":"Remove an item","Remove a _PARAM2_ from inventory _PARAM1_":"Remove a _PARAM2_ from inventory _PARAM1_","the number of an item in an inventory.":"the number of an item in an inventory.","Item count":"Item count","the count of _PARAM2_ in _PARAM1_":"the count of _PARAM2_ in _PARAM1_","Check if at least one of the specified items is in the inventory.":"Check if at least one of the specified items is in the inventory.","Has an item":"Has an item","Inventory _PARAM1_ contains a _PARAM2_":"Inventory _PARAM1_ contains a _PARAM2_","the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.","Item capacity":"Item capacity","_PARAM2_ capacity in inventory _PARAM1_":"_PARAM2_ capacity in inventory _PARAM1_","Check if a limited amount of an object is allowed by the inventory. Item capacity is unlimited by default.":"Check if a limited amount of an object is allowed by the inventory. Item capacity is unlimited by default.","Limited item capacity":"Limited item capacity","Allow a limited count of _PARAM2_ in inventory _PARAM1_":"Allow a limited count of _PARAM2_ in inventory _PARAM1_","Allow a limited amount of an object to be in an inventory. Item capacity is unlimited by default.":"Allow a limited amount of an object to be in an inventory. Item capacity is unlimited by default.","Limit item capacity":"Limit item capacity","Allow a limited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"Allow a limited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_","Limit the item capacity":"Limit the item capacity","Check if an item has reached its maximum number allowed in the inventory.":"Check if an item has reached its maximum number allowed in the inventory.","Item full":"Item full","Inventory _PARAM1_ is full of _PARAM2_":"Inventory _PARAM1_ is full of _PARAM2_","Check if an item is equipped.":"Check if an item is equipped.","Item equipped":"Item equipped","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM2_ is equipped in inventory _PARAM1_","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.","Equip an item":"Equip an item","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_","Equip":"Equip","Save all the items of the inventory in a scene variable, so that it can be restored later.":"Save all the items of the inventory in a scene variable, so that it can be restored later.","Save an inventory in a scene variable":"Save an inventory in a scene variable","Save inventory _PARAM1_ in variable _PARAM2_":"Save inventory _PARAM1_ in variable _PARAM2_","Scene variable":"Scene variable","Load the content of the inventory from a scene variable.":"Load the content of the inventory from a scene variable.","Load an inventory from a scene variable":"Load an inventory from a scene variable","Load inventory _PARAM1_ from variable _PARAM2_":"Load inventory _PARAM1_ from variable _PARAM2_","Object \"Is On Screen\" Detection":"Object \"Is On Screen\" Detection","Condition to check if an object is visible in its layer's camera viewport.":"Condition to check if an object is visible in its layer's camera viewport.","This behavior provides a condition to check if the object is located within the visible portion of its layer's camera. The condition also allows for specifying padding to the virtual screen border.\nNote that object visibility, such as being hidden or 0 opacity, is not considered (but you can use those existing conditions in addition to this behavior).":"This behavior provides a condition to check if the object is located within the visible portion of its layer's camera. The condition also allows for specifying padding to the virtual screen border.\nNote that object visibility, such as being hidden or 0 opacity, is not considered (but you can use those existing conditions in addition to this behavior).","Is on screen":"Is on screen","Checks if an object position is within the viewport of its layer.":"Checks if an object position is within the viewport of its layer.","_PARAM0_ is on screen (padded by _PARAM2_ pixels)":"_PARAM0_ is on screen (padded by _PARAM2_ pixels)","Padding (in pixels)":"Padding (in pixels)","Number of pixels to pad the screen border. Zero by default. A negative value goes inside the screen, a positive value go outside.":"Number of pixels to pad the screen border. Zero by default. A negative value goes inside the screen, a positive value go outside.","Konami Code":"Konami Code","Detect classic Konami Code input sequence for cheats and easter eggs.":"Detect classic Konami Code input sequence for cheats and easter eggs.","Allows to input the classic Konami Code (\"Up, Up, Down, Down, Left, Right, Left, Right, B, A\") into a scene for cheats and easter eggs.":"Allows to input the classic Konami Code (\"Up, Up, Down, Down, Left, Right, Left, Right, B, A\") into a scene for cheats and easter eggs.","Checks if the Konami Code is correctly inputted.":"Checks if the Konami Code is correctly inputted.","Is Inputted":"Is Inputted","Konami Code is inputted with _PARAM0_":"Konami Code is inputted with _PARAM0_","Language":"Language","Get the user's preferred language from browser or device settings.":"Get the user's preferred language from browser or device settings.","Returns a string representing the preferred language of the user.\nThe format represents the language first, and usually the country where it's used. For example: \"en\" (English), \"en-US\" (English as used in the United States), \"en-GB\" (United Kingdom English), \"es\" (Spanish), \"zh-CN\" (Chinese as used in China), etc.":"Returns a string representing the preferred language of the user.\nThe format represents the language first, and usually the country where it's used. For example: \"en\" (English), \"en-US\" (English as used in the United States), \"en-GB\" (United Kingdom English), \"es\" (Spanish), \"zh-CN\" (Chinese as used in China), etc.","Game over dialog":"Game over dialog","Score display dialog with submit-to-leaderboard, retry, and main menu buttons.":"Score display dialog with submit-to-leaderboard, retry, and main menu buttons.","Return a formated time for a given timestamp":"Return a formated time for a given timestamp","Format time":"Format time","Time":"Time","Format":"Format","To fixed":"To fixed","Pad start":"Pad start","Text":"Text","Target length":"Target length","Pad string":"Pad string","Display the score and let players choose what to do next.":"Display the score and let players choose what to do next.","Default player name":"Default player name","Leaderboard":"Leaderboard","Best score":"Best score","Score format":"Score format","Prefix":"Prefix","Suffix":"Suffix","Round to decimal point":"Round to decimal point","Score label":"Score label","Best score label":"Best score label","the score.":"the score.","Score":"Score","the score":"the score","the best score of the object.":"the best score of the object.","the best score":"the best score","Return the formated score.":"Return the formated score.","Format score":"Format score","the default player name.":"the default player name.","the default player name":"the default player name","the player name.":"the player name.","Player name":"Player name","the player name":"the player name","Check if the restart button of the dialog is clicked.":"Check if the restart button of the dialog is clicked.","Restart button clicked":"Restart button clicked","Restart button of _PARAM0_ is clicked":"Restart button of _PARAM0_ is clicked","Check if the next button of the dialog is clicked.":"Check if the next button of the dialog is clicked.","Next button clicked":"Next button clicked","Next button of _PARAM0_ is clicked":"Next button of _PARAM0_ is clicked","Check if the back button of the dialog is clicked.":"Check if the back button of the dialog is clicked.","Back button clicked":"Back button clicked","Back button of _PARAM0_ is clicked":"Back button of _PARAM0_ is clicked","Check if the score has been sucessfully submitted by the dialog.":"Check if the score has been sucessfully submitted by the dialog.","Score is submitted":"Score is submitted","_PARAM0_ submitted a score":"_PARAM0_ submitted a score","the leaderboard of the object.":"the leaderboard of the object.","the leaderboard":"the leaderboard","the title of the object.":"the title of the object.","Title":"Title","the title":"the title","Fade in the decoration objects of the dialog.":"Fade in the decoration objects of the dialog.","Fade in decorations":"Fade in decorations","Fade in the decorations of _PARAM0_":"Fade in the decorations of _PARAM0_","Fade out the decoration objects of the dialog.":"Fade out the decoration objects of the dialog.","Fade out decorations":"Fade out decorations","Fade out the decorations of _PARAM0_":"Fade out the decorations of _PARAM0_","Check if the fade in animation of the decorations is finished.":"Check if the fade in animation of the decorations is finished.","Decorations are faded in":"Decorations are faded in","Fade in animation of _PARAM0_ is finished":"Fade in animation of _PARAM0_ is finished","Check if the fade out animation of the decorations is finished.":"Check if the fade out animation of the decorations is finished.","Decorations are faded out":"Decorations are faded out","Fade out animation of _PARAM0_ is finished":"Fade out animation of _PARAM0_ is finished","3D lights":"3D lights","A collection of light object for 3D.":"A collection of light object for 3D.","Define spot light helper classes JavaScript code.":"Define spot light helper classes JavaScript code.","Define spot light helper classes":"Define spot light helper classes","Define spot light helper classes JavaScript code":"Define spot light helper classes JavaScript code","Define point light helper classes JavaScript code.":"Define point light helper classes JavaScript code.","Define point light helper classes":"Define point light helper classes","Define point light helper classes JavaScript code":"Define point light helper classes JavaScript code","the maximum number of nearest lights displayed simultaneously.":"the maximum number of nearest lights displayed simultaneously.","Max lights count":"Max lights count","max lights count":"max lights count","the maximum number of nearest lights displayed with shadow simultaneously.":"the maximum number of nearest lights displayed with shadow simultaneously.","Max lights with shadow count":"Max lights with shadow count","max lights with shadow count":"max lights with shadow count","Light up a cone like a flashlight.":"Light up a cone like a flashlight.","3D spot light":"3D spot light","Cone angle":"Cone angle","Cone":"Cone","Intensity":"Intensity","Smoothing":"Smoothing","Percent of the spotlight cone that is attenuated due to penumbra (between 0 and 1).":"Percent of the spotlight cone that is attenuated due to penumbra (between 0 and 1).","Decay":"Decay","The amount the light dims along the distance of the light.":"The amount the light dims along the distance of the light.","Image":"Image","Shadow casting must be enabled for the image to have any effect.":"Shadow casting must be enabled for the image to have any effect.","Shadow":"Shadow","Shadow casting":"Shadow casting","Shadow quality":"Shadow quality","Shadow camera near plane":"Shadow camera near plane","Shadow camera far plane":"Shadow camera far plane","Cone length":"Cone length","0 means no limit.":"0 means no limit.","Shadow bias":"Shadow bias","Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 2 for medium quality and 4 for low quality.":"Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 2 for medium quality and 4 for low quality.","Update from properties.":"Update from properties.","Update from properties":"Update from properties","Update from properties of _PARAM0_":"Update from properties of _PARAM0_","Update helper":"Update helper","Update graphical helper of _PARAM0_":"Update graphical helper of _PARAM0_","Update image":"Update image","Update the image of _PARAM0_":"Update the image of _PARAM0_","the cone angle of the light.":"the cone angle of the light.","the cone angle":"the cone angle","the color of the light.":"the color of the light.","the color":"the color","the smoothing of the light. Percent of the spotlight cone that is attenuated due to penumbra (between 0 and 1).":"the smoothing of the light. Percent of the spotlight cone that is attenuated due to penumbra (between 0 and 1).","the smoothing":"the smoothing","the intensity of the light.":"the intensity of the light.","the intensity":"the intensity","the decay of the light. The amount the light dims along the distance of the light.":"the decay of the light. The amount the light dims along the distance of the light.","the decay":"the decay","Check if the light is casting shadows.":"Check if the light is casting shadows.","_PARAM0_ casting shadows":"_PARAM0_ casting shadows","Change if the light is casting shadows.":"Change if the light is casting shadows.","_PARAM0_ casting shadows: _PARAM1_":"_PARAM0_ casting shadows: _PARAM1_","Rotate the light to light up a position.":"Rotate the light to light up a position.","Look at position":"Look at position","_PARAM0_ look at _PARAM1_ ; _PARAM2_ ; _PARAM3_":"_PARAM0_ look at _PARAM1_ ; _PARAM2_ ; _PARAM3_","Target Z":"Target Z","Rotate the light to light up an object.":"Rotate the light to light up an object.","Look at object":"Look at object","_PARAM0_ look at _PARAM1_":"_PARAM0_ look at _PARAM1_","the shadow quality of the light.":"the shadow quality of the light.","the shadow quality":"the shadow quality","the shadow camera near plane of the light.":"the shadow camera near plane of the light.","the shadow camera near plane":"the shadow camera near plane","the shadow camera far plane of the light.":"the shadow camera far plane of the light.","the shadow camera far plane":"the shadow camera far plane","the cone length of the light. 0 means no limit.":"the cone length of the light. 0 means no limit.","the cone length":"the cone length","Apply shadow camera far plane":"Apply shadow camera far plane","Apply shadow camera far plane of _PARAM0_ to _PARAM1_":"Apply shadow camera far plane of _PARAM0_ to _PARAM1_","the shadow bias of the light. Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 2 for medium quality and 4 for low quality.":"the shadow bias of the light. Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 2 for medium quality and 4 for low quality.","the shadow bias":"the shadow bias","Apply shadow bias":"Apply shadow bias","Apply shadow bias of _PARAM0_ to _PARAM1_ for a _PARAM2_ quality and cone angle _PARAM3_":"Apply shadow bias of _PARAM0_ to _PARAM1_ for a _PARAM2_ quality and cone angle _PARAM3_","Quality":"Quality","Light up in all directions like a fire.":"Light up in all directions like a fire.","3D point light":"3D point light","Range":"Range","Shadow Bias":"Shadow Bias","the range of the light. 0 means no limit.":"the range of the light. 0 means no limit.","the range":"the range","Apply shadow bias of _PARAM0_ to _PARAM1_ for a _PARAM2_ quality":"Apply shadow bias of _PARAM0_ to _PARAM1_ for a _PARAM2_ quality","Linear Movement":"Linear Movement","Move objects on a straight line.":"Move objects on a straight line.","Linear movement":"Linear movement","Speed on X axis":"Speed on X axis","Speed on Y axis":"Speed on Y axis","the speed on X axis of the object.":"the speed on X axis of the object.","the speed on X axis":"the speed on X axis","the speed on Y axis of the object.":"the speed on Y axis of the object.","the speed on Y axis":"the speed on Y axis","Move objects ahead according to their angle.":"Move objects ahead according to their angle.","Linear movement by angle":"Linear movement by angle","Linked Objects Tools":"Linked Objects Tools","Use linked objects as graph nodes. Pathfinding and neighbor traversal on links.":"Use linked objects as graph nodes. Pathfinding and neighbor traversal on links.","Link to neighbors on a rectangular grid.":"Link to neighbors on a rectangular grid.","Link to neighbors on a rectangular grid":"Link to neighbors on a rectangular grid","Link _PARAM1_ and its neighbors _PARAM2_ on a rectangular grid with cell dimensions: _PARAM3_; _PARAM4_":"Link _PARAM1_ and its neighbors _PARAM2_ on a rectangular grid with cell dimensions: _PARAM3_; _PARAM4_","Neighbor":"Neighbor","The 2 objects can't be the same.":"The 2 objects can't be the same.","Cell width":"Cell width","Cell height":"Cell height","Allows diagonals":"Allows diagonals","Link to neighbors on a hexagonal grid.":"Link to neighbors on a hexagonal grid.","Link to neighbors on a hexagonal grid":"Link to neighbors on a hexagonal grid","Link _PARAM1_ and its neighbors _PARAM2_ on a hexagonal grid with cell dimensions: _PARAM3_; _PARAM4_":"Link _PARAM1_ and its neighbors _PARAM2_ on a hexagonal grid with cell dimensions: _PARAM3_; _PARAM4_","Link to neighbors on an isometric grid.":"Link to neighbors on an isometric grid.","Link to neighbors on an isometric grid":"Link to neighbors on an isometric grid","Link _PARAM1_ and its neighbors _PARAM2_ on an isometric grid with cell dimensions: _PARAM3_; _PARAM4_":"Link _PARAM1_ and its neighbors _PARAM2_ on an isometric grid with cell dimensions: _PARAM3_; _PARAM4_","Can reach through a given cost sum.":"Can reach through a given cost sum.","Can reach with links limited by cost":"Can reach with links limited by cost","Take into account all \"_PARAM1_\" that can reach _PARAM2_ with initial value from the variable _PARAM3_ through at most a cost of: _PARAM4_ according to cost class: _PARAM5_ and at most _PARAM6_ links depth":"Take into account all \"_PARAM1_\" that can reach _PARAM2_ with initial value from the variable _PARAM3_ through at most a cost of: _PARAM4_ according to cost class: _PARAM5_ and at most _PARAM6_ links depth","Pick these objects...":"Pick these objects...","if they can reach this object":"if they can reach this object","Initial length variable":"Initial length variable","Start to 0 if left empty":"Start to 0 if left empty","Maximum cost":"Maximum cost","Cost class":"Cost class","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost must be positive.":"Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost must be positive.","Maximum depth":"Maximum depth","Ignore first node cost":"Ignore first node cost","Can reach through a given number of links.":"Can reach through a given number of links.","Can reach with links limited by length":"Can reach with links limited by length","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through at most _PARAM3_ links according to cost class: _PARAM4_":"Take into account all \"_PARAM1_\" that can reach _PARAM2_ through at most _PARAM3_ links according to cost class: _PARAM4_","Maximum link length":"Maximum link length","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost can be 0 or 1.":"Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost can be 0 or 1.","Can reach through links.":"Can reach through links.","Can reach":"Can reach","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through links":"Take into account all \"_PARAM1_\" that can reach _PARAM2_ through links","Cost sum.":"Cost sum.","Cost sum":"Cost sum","The object will move from one object instance to another according to how they are linked to one another to reach a targeted object.":"The object will move from one object instance to another according to how they are linked to one another to reach a targeted object.","Link path finding":"Link path finding","Angle offset":"Angle offset","Is following a path":"Is following a path","Next node index":"Next node index","Next node X":"Next node X","Next node Y":"Next node Y","Is at a node":"Is at a node","Next node angle":"Next node angle","Move the object to a position.":"Move the object to a position.","Move to a position":"Move to a position","Move _PARAM0_ to _PARAM3_ passing by _PARAM2_ using cost class _PARAM4_":"Move _PARAM0_ to _PARAM3_ passing by _PARAM2_ using cost class _PARAM4_","Crossable objects":"Crossable objects","Destination objects":"Destination objects","Check if the object position is the on a path node.":"Check if the object position is the on a path node.","_PARAM0_ is at a node":"_PARAM0_ is at a node","Forget the path.":"Forget the path.","Forget the path":"Forget the path","_PARAM0_ forgets the path":"_PARAM0_ forgets the path","Set next node index":"Set next node index","Set next node index of _PARAM0_ to _PARAM2_":"Set next node index of _PARAM0_ to _PARAM2_","Node index":"Node index","Check if the object is moving.":"Check if the object is moving.","Is moving":"Is moving","_PARAM0_ is moving":"_PARAM0_ is moving","Check if a path has been found.":"Check if a path has been found.","Path found":"Path found","A path has been found for _PARAM0_":"A path has been found for _PARAM0_","Check if the destination was reached.":"Check if the destination was reached.","Destination reached":"Destination reached","_PARAM0_ reached its destination":"_PARAM0_ reached its destination","Speed of the object on the path.":"Speed of the object on the path.","Get the number of waypoints on the path.":"Get the number of waypoints on the path.","Node count":"Node count","Waypoint X position.":"Waypoint X position.","Node X":"Node X","Waypoint index":"Waypoint index","Node Y":"Node Y","Next waypoint index.":"Next waypoint index.","Next waypoint X position.":"Next waypoint X position.","Next waypoint Y position.":"Next waypoint Y position.","Destination X position.":"Destination X position.","Destination Y position.":"Destination Y position.","the acceleration of the object.":"the acceleration of the object.","the maximum speed of the object.":"the maximum speed of the object.","the maximum speed":"the maximum speed","the rotation speed of the object.":"the rotation speed of the object.","the rotation speed":"the rotation speed","the rotation offset applied when moving the object.":"the rotation offset applied when moving the object.","the rotation angle offset on the path":"the rotation angle offset on the path","Check if the object is rotated when traveling on its path.":"Check if the object is rotated when traveling on its path.","Object rotated":"Object rotated","_PARAM0_ is rotated when traveling on its path":"_PARAM0_ is rotated when traveling on its path","Enable or disable rotation of the object on the path.":"Enable or disable rotation of the object on the path.","Rotate the object":"Rotate the object","Enable rotation of _PARAM0_ on the path: _PARAM2_":"Enable rotation of _PARAM0_ on the path: _PARAM2_","MQTT Client (advanced)":"MQTT Client (advanced)","MQTT client: connect to broker, publish/subscribe topics, send/receive messages.":"MQTT client: connect to broker, publish/subscribe topics, send/receive messages.","Triggers if the client is connected to an MQTT broker server.":"Triggers if the client is connected to an MQTT broker server.","Is connected to a broker?":"Is connected to a broker?","Client connected to a broker":"Client connected to a broker","Connects to an MQTT broker.":"Connects to an MQTT broker.","Connect to a broker":"Connect to a broker","Connect to MQTT broker _PARAM1_ with parameters _PARAM2_ (secure connection: _PARAM3_)":"Connect to MQTT broker _PARAM1_ with parameters _PARAM2_ (secure connection: _PARAM3_)","Host port":"Host port","Settings as JSON":"Settings as JSON","You can find the list of settings at [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client). \nAn example of valid configuration would be `\" \"clientId \": \"myUserName \" \"`.":"You can find the list of settings at [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client). \nAn example of valid configuration would be `\" \"clientId \": \"myUserName \" \"`.","Use secure WebSockets?":"Use secure WebSockets?","Disconnects from the current MQTT broker.":"Disconnects from the current MQTT broker.","Disconnect from broker":"Disconnect from broker","Disconnect from MQTT broker (force: _PARAM1_)":"Disconnect from MQTT broker (force: _PARAM1_)","Force end the connection?":"Force end the connection?","By default, MQTT waits for pending messages or messages in the process of being sent to finish being sent before ending the connection. Use this to cancel any request and immediately shutdown the connection.":"By default, MQTT waits for pending messages or messages in the process of being sent to finish being sent before ending the connection. Use this to cancel any request and immediately shutdown the connection.","Publishes a message on a topic.":"Publishes a message on a topic.","Publish message":"Publish message","Publish variable _PARAM1_ on topic _PARAM2_ (QoS: _PARAM3_)":"Publish variable _PARAM1_ on topic _PARAM2_ (QoS: _PARAM3_)","Text to publish":"Text to publish","Topic to publish to":"Topic to publish to","The QoS":"The QoS","See [this](https://github.com/mqttjs/MQTT.js#qos) for more details.":"See [this](https://github.com/mqttjs/MQTT.js#qos) for more details.","Should the message be retained?":"Should the message be retained?","When a message is retained, it will be sent to every client that subscribe to the topic. Only one message can be retained per topic, if another retained message is sent it will overwrite the previous one. \nRead more [here](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages).":"When a message is retained, it will be sent to every client that subscribe to the topic. Only one message can be retained per topic, if another retained message is sent it will overwrite the previous one. \nRead more [here](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages).","Subcribe to a topic. All messages published on that topic will be received.":"Subcribe to a topic. All messages published on that topic will be received.","Subscribe to a topic":"Subscribe to a topic","Subscribe to topic _PARAM1_ with QoS at _PARAM2_ and dataloss _PARAM3_":"Subscribe to topic _PARAM1_ with QoS at _PARAM2_ and dataloss _PARAM3_","The topic to subscribe to":"The topic to subscribe to","See https://github.com/mqttjs/MQTT.js#qos for more details":"See https://github.com/mqttjs/MQTT.js#qos for more details","Is dataloss allowed?":"Is dataloss allowed?","See https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode for more details":"See https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode for more details","Unsubcribe from a topic. No more messages from this topic will be received.":"Unsubcribe from a topic. No more messages from this topic will be received.","Unsubscribe from a topic":"Unsubscribe from a topic","Unsubscribe from topic _PARAM1_":"Unsubscribe from topic _PARAM1_","Triggers whenever a message was received. Note that you first need to subcribe to a topic in order to get messages from it.":"Triggers whenever a message was received. Note that you first need to subcribe to a topic in order to get messages from it.","On message":"On message","Message received from topic _PARAM1_":"Message received from topic _PARAM1_","The topic to listen to":"The topic to listen to","Get the last received message of a topic.":"Get the last received message of a topic.","Get last message":"Get last message","The topic to get the message from":"The topic to get the message from","Gets the last error. Returns an empty string if there was no errors.":"Gets the last error. Returns an empty string if there was no errors.","Get the last error":"Get the last error","Marching Squares (experimental)":"Marching Squares (experimental)","Draw dynamically changing shapes like a fog of war.":"Draw dynamically changing shapes like a fog of war.","Define the scalar field painter library JavaScript code.":"Define the scalar field painter library JavaScript code.","Define scalar field painter library":"Define scalar field painter library","Define the scalar field painter library JavaScript code":"Define the scalar field painter library JavaScript code","Add to a Shape painter object and use the actions to draw a field. Useful for fog of wars, liquid effects (water, lava, blobs...).":"Add to a Shape painter object and use the actions to draw a field. Useful for fog of wars, liquid effects (water, lava, blobs...).","Marching squares painter":"Marching squares painter","Area left bound":"Area left bound","Area top bound":"Area top bound","Area right bound":"Area right bound","Area bottom bound":"Area bottom bound","Fill outside":"Fill outside","Contour threshold":"Contour threshold","Must only draw what is on the screen":"Must only draw what is on the screen","Extend behavior class":"Extend behavior class","Extend object instance prototype.":"Extend object instance prototype.","Extend object instance prototype":"Extend object instance prototype","Extend _PARAM0_ prototype":"Extend _PARAM0_ prototype","Clear the field by setting every values to 0.":"Clear the field by setting every values to 0.","Clear the field":"Clear the field","Clear the field of _PARAM0_":"Clear the field of _PARAM0_","Unfill an area of the field from a given location until a given height is reached.":"Unfill an area of the field from a given location until a given height is reached.","Unfill area":"Unfill area","Unfill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a minimum of _PARAM4_ with thickness: _PARAM5_":"Unfill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a minimum of _PARAM4_ with thickness: _PARAM5_","Minimum height":"Minimum height","Contour thickness":"Contour thickness","Capping radius ratio":"Capping radius ratio","Small values allow quicker process, but can result to tearing. Try values around 8.":"Small values allow quicker process, but can result to tearing. Try values around 8.","Fill an area of the field from a given location until a given height is reached.":"Fill an area of the field from a given location until a given height is reached.","Fill area":"Fill area","Fill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a maximum of _PARAM4_ with thickness: _PARAM5_":"Fill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a maximum of _PARAM4_ with thickness: _PARAM5_","Maximum height":"Maximum height","Cap every value of the field to a range.":"Cap every value of the field to a range.","Clamp the field":"Clamp the field","Clamp the field of _PARAM0_ from: _PARAM2_ to: _PARAM3_":"Clamp the field of _PARAM0_ from: _PARAM2_ to: _PARAM3_","Minimum":"Minimum","Maximum":"Maximum","Apply an affine on the field values.":"Apply an affine on the field values.","Transform the field":"Transform the field","Transform the field of _PARAM0_ with a coefficient: _PARAM2_ and an offset: _PARAM3_":"Transform the field of _PARAM0_ with a coefficient: _PARAM2_ and an offset: _PARAM3_","Coefficient":"Coefficient","Offset":"Offset","Add a hill to the field.":"Add a hill to the field.","Add a hill":"Add a hill","Add a hill to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, _PARAM4_, radius: _PARAM5_, opacity: _PARAM6_ using: _PARAM8_":"Add a hill to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, _PARAM4_, radius: _PARAM5_, opacity: _PARAM6_ using: _PARAM8_","The hill height at the center, a value of 1 or less means a flat hill.":"The hill height at the center, a value of 1 or less means a flat hill.","The hill height is 1 at this radius.":"The hill height is 1 at this radius.","Opacity":"Opacity","Set to 1 to apply the hill instantly or repeat this action with a lower value to make is progressive.":"Set to 1 to apply the hill instantly or repeat this action with a lower value to make is progressive.","Operation":"Operation","Add a disk to the field.":"Add a disk to the field.","Add a disk":"Add a disk","Add a disk to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_ using: _PARAM6_":"Add a disk to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_ using: _PARAM6_","The spike height is 1 at this radius.":"The spike height is 1 at this radius.","Mask a disk to the field.":"Mask a disk to the field.","Mask a disk":"Mask a disk","Mask a disk on the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_":"Mask a disk on the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_","Add a line to the field.":"Add a line to the field.","Add a line":"Add a line","Add a line to the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_ using: _PARAM8_":"Add a line to the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_ using: _PARAM8_","X position of the start":"X position of the start","Y position of the start":"Y position of the start","X position of the end":"X position of the end","Y position of the end":"Y position of the end","Thickness":"Thickness","Mask a line to the field.":"Mask a line to the field.","Mask a line":"Mask a line","Mask a line on the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_":"Mask a line on the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_","Apply a given operation on every value of the field using the value from the other field at the same position.":"Apply a given operation on every value of the field using the value from the other field at the same position.","Merge a field":"Merge a field","Merge _PARAM0_ with the field of _PARAM2_ using: _PARAM4_":"Merge _PARAM0_ with the field of _PARAM2_ using: _PARAM4_","Field object":"Field object","Field behavior":"Field behavior","Update the field hitboxes.":"Update the field hitboxes.","Update hitboxes":"Update hitboxes","Update the field hitboxes of _PARAM0_":"Update the field hitboxes of _PARAM0_","Draw the field contours.":"Draw the field contours.","Draw the contours":"Draw the contours","Draw the field contours of _PARAM0_":"Draw the field contours of _PARAM0_","Change the width of the field cells.":"Change the width of the field cells.","Width of the cells":"Width of the cells","Change the width of the field cells of _PARAM0_: _PARAM2_":"Change the width of the field cells of _PARAM0_: _PARAM2_","Change the height of the field cells.":"Change the height of the field cells.","Height of the cells":"Height of the cells","Change the height of the field cells of _PARAM0_: _PARAM2_":"Change the height of the field cells of _PARAM0_: _PARAM2_","Rebuild the field with the new dimensions.":"Rebuild the field with the new dimensions.","Rebuild the field":"Rebuild the field","Rebuild the field _PARAM0_":"Rebuild the field _PARAM0_","Fill outside or inside of the contours.":"Fill outside or inside of the contours.","Fill outside of the contours of _PARAM0_: _PARAM2_":"Fill outside of the contours of _PARAM0_: _PARAM2_","Fill outside?":"Fill outside?","Change the contour threshold.":"Change the contour threshold.","Change the contour threshold of _PARAM0_: _PARAM2_":"Change the contour threshold of _PARAM0_: _PARAM2_","Change the field area bounds.":"Change the field area bounds.","Area bounds":"Area bounds","Change the field area bounds of _PARAM0_ left: _PARAM2_ top: _PARAM3_ right: _PARAM4_ bottom: _PARAM5_":"Change the field area bounds of _PARAM0_ left: _PARAM2_ top: _PARAM3_ right: _PARAM4_ bottom: _PARAM5_","Left bound":"Left bound","Top bound":"Top bound","Right bound":"Right bound","Bottom bound":"Bottom bound","Area left bound of the field.":"Area left bound of the field.","Area left":"Area left","Area top bound of the field.":"Area top bound of the field.","Area top":"Area top","Area right bound of the field.":"Area right bound of the field.","Area right":"Area right","Area bottom bound of the field.":"Area bottom bound of the field.","Area bottom":"Area bottom","Width of the field cells.":"Width of the field cells.","Width of a cell":"Width of a cell","Height of the field cells.":"Height of the field cells.","Height of a cell":"Height of a cell","The number of cells on the x axis.":"The number of cells on the x axis.","Dimension X":"Dimension X","At _PARAM2_; _PARAM3_ the field value of _PARAM0_ is greater than _PARAM4_":"At _PARAM2_; _PARAM3_ the field value of _PARAM0_ is greater than _PARAM4_","The number of cells on the y axis.":"The number of cells on the y axis.","Dimension Y":"Dimension Y","The contour threshold.":"The contour threshold.","The normal X coordinate at a given location.":"The normal X coordinate at a given location.","Normal X":"Normal X","X position of the point":"X position of the point","Y position of the point":"Y position of the point","The normal Y coordinate at a given location.":"The normal Y coordinate at a given location.","Normal Y":"Normal Y","The normal Z coordinate at a given location.":"The normal Z coordinate at a given location.","Normal Z":"Normal Z","Change the field value at a grid point.":"Change the field value at a grid point.","Grid value":"Grid value","Change the field value of _PARAM0_ at the grid point _PARAM2_; _PARAM3_ to _PARAM4_":"Change the field value of _PARAM0_ at the grid point _PARAM2_; _PARAM3_ to _PARAM4_","X grid index":"X grid index","Y grid index":"Y grid index","Field value":"Field value","The field value at a grid point.":"The field value at a grid point.","The field value at a given location.":"The field value at a given location.","Check if the contours are filled outside.":"Check if the contours are filled outside.","The contours of _PARAM0_ are filled outside":"The contours of _PARAM0_ are filled outside","Check if a field is greater than a given value.":"Check if a field is greater than a given value.","Check if a point is inside the contour.":"Check if a point is inside the contour.","Point is inside":"Point is inside","_PARAM2_; _PARAM3_ is inside _PARAM0_":"_PARAM2_; _PARAM3_ is inside _PARAM0_","Cursor object":"Cursor object","Make any object follow the mouse cursor position. Hides default cursor.":"Make any object follow the mouse cursor position. Hides default cursor.","Turn any object into a mouse cursor.":"Turn any object into a mouse cursor.","Cursor":"Cursor","Mouse Pointer Lock":"Mouse Pointer Lock","Lock and hide mouse pointer for unlimited movement (e.g., FPS mouse look).":"Lock and hide mouse pointer for unlimited movement (e.g., FPS mouse look).","Lock the mouse pointer to hide it.":"Lock the mouse pointer to hide it.","Request Pointer Lock":"Request Pointer Lock","Unlocks the mouse pointer and show it.":"Unlocks the mouse pointer and show it.","Exit pointer lock":"Exit pointer lock","Check if the mouse pointer is locked.":"Check if the mouse pointer is locked.","Pointer is locked":"Pointer is locked","The mouse pointer is locked":"The mouse pointer is locked","Check if the mouse pointer is actually locked.":"Check if the mouse pointer is actually locked.","Pointer is actually locked":"Pointer is actually locked","The mouse pointer actually is locked":"The mouse pointer actually is locked","Check if the mouse pointer lock is emulated.":"Check if the mouse pointer lock is emulated.","Pointer lock is emulated":"Pointer lock is emulated","The mouse pointer lock is emulated":"The mouse pointer lock is emulated","Check if the locked pointer is moving.":"Check if the locked pointer is moving.","Locked pointer is moving":"Locked pointer is moving","the movement of the locked pointer on the X axis.":"the movement of the locked pointer on the X axis.","Pointer X movement":"Pointer X movement","the movement of the locked pointer on the X axis":"the movement of the locked pointer on the X axis","the movement of the pointer on the Y axis.":"the movement of the pointer on the Y axis.","Pointer Y movement":"Pointer Y movement","the movement of the pointer on the Y axis":"the movement of the pointer on the Y axis","Return the X position of a specific touch":"Return the X position of a specific touch","Touch X position":"Touch X position","Touch identifier":"Touch identifier","Return the Y position of a specific touch":"Return the Y position of a specific touch","Touch Y position":"Touch Y position","the speed factor for touch movement.":"the speed factor for touch movement.","Speed factor for touch movement":"Speed factor for touch movement","the speed factor for touch movement":"the speed factor for touch movement","Control camera rotations with a mouse.":"Control camera rotations with a mouse.","First person camera mouse mapper":"First person camera mouse mapper","Horizontal rotation speed factor":"Horizontal rotation speed factor","Vertical rotation speed factor":"Vertical rotation speed factor","Lock the pointer on click":"Lock the pointer on click","the horizontal rotation speed factor of the object.":"the horizontal rotation speed factor of the object.","the horizontal rotation speed factor":"the horizontal rotation speed factor","the vertical rotation speed factor of the object.":"the vertical rotation speed factor of the object.","the vertical rotation speed factor":"the vertical rotation speed factor","Multiplayer custom lobbies":"Multiplayer custom lobbies","Custom lobbies for built-in multiplayer.":"Custom lobbies for built-in multiplayer.","Return project identifier.":"Return project identifier.","Project identifier":"Project identifier","Return game version.":"Return game version.","Game version":"Game version","Return true if game run in preview.":"Return true if game run in preview.","Preview":"Preview","Define a shape painter as a mask of an object.":"Define a shape painter as a mask of an object.","Mask an object with a shape painter":"Mask an object with a shape painter","Mask _PARAM1_ with mask _PARAM2_":"Mask _PARAM1_ with mask _PARAM2_","Object to mask":"Object to mask","Shape painter to use as a mask":"Shape painter to use as a mask","Loading.":"Loading.","Loading":"Loading","Customize the interface of multiplayer lobbies.\nJoining will only work if the \"join after game starts\" setting is enabled, as the game automatically starts after joining a lobby.":"Customize the interface of multiplayer lobbies.\nJoining will only work if the \"join after game starts\" setting is enabled, as the game automatically starts after joining a lobby.","Update lobbies.":"Update lobbies.","Update lobbies":"Update lobbies","Update lobbies _PARAM0_":"Update lobbies _PARAM0_","Return last error.":"Return last error.","Last error":"Last error","Custom lobby.":"Custom lobby.","Custom lobby":"Custom lobby","Set lobby name.":"Set lobby name.","Set lobby name":"Set lobby name","Set lobby name _PARAM0_: _PARAM1_":"Set lobby name _PARAM0_: _PARAM1_","Lobby name":"Lobby name","Set players in lobby count.":"Set players in lobby count.","Set players in lobby count":"Set players in lobby count","Set players in lobby count _PARAM0_, players in lobby: _PARAM1_, max players _PARAM2_":"Set players in lobby count _PARAM0_, players in lobby: _PARAM1_, max players _PARAM2_","Players count in lobby":"Players count in lobby","Maxum count players in lobby":"Maxum count players in lobby","Set lobby ID.":"Set lobby ID.","Set lobby ID":"Set lobby ID","Set lobby ID _PARAM0_: _PARAM1_":"Set lobby ID _PARAM0_: _PARAM1_","Lobby ID":"Lobby ID","Return true if lobby is full.":"Return true if lobby is full.","Is full":"Is full","Lobby _PARAM0_ is full":"Lobby _PARAM0_ is full","Activate interactions.":"Activate interactions.","Activate interactions":"Activate interactions","Activate interactions of _PARAM0_: _PARAM1_":"Activate interactions of _PARAM0_: _PARAM1_","Yes or no":"Yes or no","Noise generator":"Noise generator","Generate noise values for procedural generation.":"Generate noise values for procedural generation.","Generate a number between -1 and 1 from 1 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"Generate a number between -1 and 1 from 1 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.","1D noise":"1D noise","Generate a number between -1 and 1 from 2 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"Generate a number between -1 and 1 from 2 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.","Generate a number between -1 and 1 from 3 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"Generate a number between -1 and 1 from 3 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.","Generate a number between -1 and 1 from 4 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"Generate a number between -1 and 1 from 4 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.","Delete a noise generators and loose its settings.":"Delete a noise generators and loose its settings.","2 dimensional Perlin noise (depecated, use Noise2d instead).":"2 dimensional Perlin noise (depecated, use Noise2d instead).","Perlin 2D noise":"Perlin 2D noise","x value":"x value","y value":"y value","3 dimensional Perlin noise (depecated, use Noise3d instead).":"3 dimensional Perlin noise (depecated, use Noise3d instead).","Perlin 3D noise":"Perlin 3D noise","z value":"z value","2 dimensional simplex noise (depecated, use Noise2d instead).":"2 dimensional simplex noise (depecated, use Noise2d instead).","Simplex 2D noise":"Simplex 2D noise","3 dimensional simplex noise (depecated, use Noise3d instead).":"3 dimensional simplex noise (depecated, use Noise3d instead).","Simplex 3D noise":"Simplex 3D noise","Slice a 2D object into pieces":"Slice a 2D object into pieces","Slice sprites into smaller color-matched pieces for destruction/break effects.":"Slice sprites into smaller color-matched pieces for destruction/break effects.","Slice an object into smaller pieces that match color of the original object. The new object should be a solid white color.":"Slice an object into smaller pieces that match color of the original object. The new object should be a solid white color.","Slice object into smaller pieces":"Slice object into smaller pieces","Cut _PARAM1_ into _PARAM3_ vertical strips and _PARAM4_ horizontal strips using _PARAM2_ for the new objects. Delete original object: _PARAM5_":"Cut _PARAM1_ into _PARAM3_ vertical strips and _PARAM4_ horizontal strips using _PARAM2_ for the new objects. Delete original object: _PARAM5_","Object to be sliced":"Object to be sliced","Object used for sliced pieces":"Object used for sliced pieces","Recommended: Use a sprite that is a single white pixel":"Recommended: Use a sprite that is a single white pixel","Vertical slices":"Vertical slices","Horizontal slices":"Horizontal slices","Delete original object":"Delete original object","Return the blue component of the pixel at the specified position.":"Return the blue component of the pixel at the specified position.","Read pixel blue":"Read pixel blue","Return the green component of the pixel at the specified position.":"Return the green component of the pixel at the specified position.","Read pixel green":"Read pixel green","Return the red component of the pixel at the specified position.":"Return the red component of the pixel at the specified position.","Read pixel red":"Read pixel red","Object spawner 2D area":"Object spawner 2D area","Spawn objects periodically with configurable interval, capacity, and spawn area.":"Spawn objects periodically with configurable interval, capacity, and spawn area.","Spawn (create) objects periodically.":"Spawn (create) objects periodically.","Object spawner":"Object spawner","Spawn period":"Spawn period","Offset X (relative to position of spawner)":"Offset X (relative to position of spawner)","Offset Y (relative to position of spawner)":"Offset Y (relative to position of spawner)","Max objects in the scene (per spawner)":"Max objects in the scene (per spawner)","Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.","Spawner capacity":"Spawner capacity","Number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"Number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.","Unlimited capacity":"Unlimited capacity","Use random positions":"Use random positions","Objects will be created at a random position inside the spawner. Useful for making large spawner areas.":"Objects will be created at a random position inside the spawner. Useful for making large spawner areas.","Spawn (create) objects periodically. This action must be run every frame to work. When the max quantity is reached and an instance is deleted, the spawner waits the duration of the spawn period before creating another instance. Spawned objects are automatically linked to the spawner.":"Spawn (create) objects periodically. This action must be run every frame to work. When the max quantity is reached and an instance is deleted, the spawner waits the duration of the spawn period before creating another instance. Spawned objects are automatically linked to the spawner.","Spawn objects periodically":"Spawn objects periodically","Periodically spawn (create) a _PARAM2_ located at spawner _PARAM0_":"Periodically spawn (create) a _PARAM2_ located at spawner _PARAM0_","Object that will be created":"Object that will be created","Change the offset X relative to the center of spawner (in pixels).":"Change the offset X relative to the center of spawner (in pixels).","Offset on X axis (deprecated)":"Offset on X axis (deprecated)","Change the offset X of _PARAM0_ to _PARAM2_ pixels":"Change the offset X of _PARAM0_ to _PARAM2_ pixels","Change the offset Y relative to the center of spawner (in pixels).":"Change the offset Y relative to the center of spawner (in pixels).","Offset on Y axis (deprecated)":"Offset on Y axis (deprecated)","Change the offset Y of _PARAM0_ to _PARAM2_ pixels":"Change the offset Y of _PARAM0_ to _PARAM2_ pixels","Change the spawn period (in seconds).":"Change the spawn period (in seconds).","Change the spawn period of _PARAM0_ to _PARAM2_ seconds":"Change the spawn period of _PARAM0_ to _PARAM2_ seconds","Return the offset X relative to the center of spawner (in pixels).":"Return the offset X relative to the center of spawner (in pixels).","Offset X (deprecated)":"Offset X (deprecated)","Return the offset Y relative to the center of spawner (in pixels).":"Return the offset Y relative to the center of spawner (in pixels).","Offset Y (deprecated)":"Offset Y (deprecated)","Return the spawn period (in seconds).":"Return the spawn period (in seconds).","Restart the cooldown of a spawner.":"Restart the cooldown of a spawner.","Restart spawning cooldown":"Restart spawning cooldown","Restart the cooldown of _PARAM0_":"Restart the cooldown of _PARAM0_","Return the remaining time before the next spawn (in seconds). Useful for triggering visual and sound effects.":"Return the remaining time before the next spawn (in seconds). Useful for triggering visual and sound effects.","Time before the next spawn":"Time before the next spawn","_PARAM0_ just spawned an object":"_PARAM0_ just spawned an object","Check if an object has just been created by this spawner. Useful for triggering visual and sound effects.":"Check if an object has just been created by this spawner. Useful for triggering visual and sound effects.","Object was just spawned":"Object was just spawned","the max objects in the scene (per spawner) of the object. Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"the max objects in the scene (per spawner) of the object. Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.","the max objects in the scene (per spawner)":"the max objects in the scene (per spawner)","Check if spawner has unlimited capacity.":"Check if spawner has unlimited capacity.","_PARAM0_ has unlimited capacity":"_PARAM0_ has unlimited capacity","Change unlimited capacity of spawner.":"Change unlimited capacity of spawner.","Unlimited object capacity":"Unlimited object capacity","_PARAM0_ unlimited capacity: _PARAM2_":"_PARAM0_ unlimited capacity: _PARAM2_","UnlimitedObjectCapacity":"UnlimitedObjectCapacity","the number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"the number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.","the spawner capacity":"the spawner capacity","Check if using random positions. Useful for making large spawner areas.":"Check if using random positions. Useful for making large spawner areas.","Use random positions inside _PARAM0_":"Use random positions inside _PARAM0_","Enable (or disable) random positions. Useful for making large spawner areas.":"Enable (or disable) random positions. Useful for making large spawner areas.","Use random positions inside _PARAM0_: _PARAM2_":"Use random positions inside _PARAM0_: _PARAM2_","RandomPosition":"RandomPosition","Object Stack":"Object Stack","An ordered list of objects and a shuffle action.":"An ordered list of objects and a shuffle action.","Check if the stack contains the object between a range. The lower and upper bounds are included.":"Check if the stack contains the object between a range. The lower and upper bounds are included.","Contain between a range":"Contain between a range","_PARAM3_ is into the stack of _PARAM1_ between _PARAM4_ and _PARAM5_":"_PARAM3_ is into the stack of _PARAM1_ between _PARAM4_ and _PARAM5_","Stack":"Stack","Stack behavior":"Stack behavior","Element":"Element","Lower bound":"Lower bound","Upper bound":"Upper bound","Check if the stack contains the object at a height.":"Check if the stack contains the object at a height.","Contain at":"Contain at","_PARAM3_ is into the stack of _PARAM1_ at _PARAM4_":"_PARAM3_ is into the stack of _PARAM1_ at _PARAM4_","Check if an object is on the stack top.":"Check if an object is on the stack top.","Stack top":"Stack top","_PARAM3_ is on top of the stack of _PARAM1_":"_PARAM3_ is on top of the stack of _PARAM1_","Check if the stack contains the object.":"Check if the stack contains the object.","Contain":"Contain","_PARAM3_ is into the stack of _PARAM1_":"_PARAM3_ is into the stack of _PARAM1_","Hold an ordered list of objects.":"Hold an ordered list of objects.","Add the object on the top of the stack.":"Add the object on the top of the stack.","Add on top":"Add on top","Add _PARAM2_ on top of the stack of _PARAM0_":"Add _PARAM2_ on top of the stack of _PARAM0_","Insert the object into the stack.":"Insert the object into the stack.","Insert into the stack":"Insert into the stack","Insert _PARAM2_ into the stack of _PARAM0_ at height: _PARAM3_":"Insert _PARAM2_ into the stack of _PARAM0_ at height: _PARAM3_","Remove the object from the stack.":"Remove the object from the stack.","Remove from the stack":"Remove from the stack","Remove _PARAM2_ from the stack of _PARAM0_":"Remove _PARAM2_ from the stack of _PARAM0_","Remove any object from the stack.":"Remove any object from the stack.","Clear":"Clear","Remove every object of the stack of _PARAM0_":"Remove every object of the stack of _PARAM0_","Move the objects from a stack into another.":"Move the objects from a stack into another.","Move into the stack":"Move into the stack","Move the objects of the stack of _PARAM3_ from:_PARAM5_ to:_PARAM6_ into the stack of _PARAM0_ at height: _PARAM2_":"Move the objects of the stack of _PARAM3_ from:_PARAM5_ to:_PARAM6_ into the stack of _PARAM0_ at height: _PARAM2_","Move all the object from a stack into another.":"Move all the object from a stack into another.","Move all into the stack":"Move all into the stack","Move all the objects of the stack of _PARAM3_ into the stack of _PARAM0_ at height: _PARAM2_":"Move all the objects of the stack of _PARAM3_ into the stack of _PARAM0_ at height: _PARAM2_","Move all the object from a stack into another one at the top.":"Move all the object from a stack into another one at the top.","Move all on top of the stack":"Move all on top of the stack","Move all the objects of the stack of _PARAM2_ on the top of the stack of _PARAM0_":"Move all the objects of the stack of _PARAM2_ on the top of the stack of _PARAM0_","Shuffle the stack.":"Shuffle the stack.","Shuffle":"Shuffle","Shuffle the stack of _PARAM0_":"Shuffle the stack of _PARAM0_","The height of an element in the stack.":"The height of an element in the stack.","Height of a stack element":"Height of a stack element","the number of objects in the stack.":"the number of objects in the stack.","Stack height":"Stack height","the number of objects in the stack":"the number of objects in the stack","Compare the number of objects in the stack.":"Compare the number of objects in the stack.","Stack height (deprecated)":"Stack height (deprecated)","_PARAM0_ has _PARAM2_ objects in its stack":"_PARAM0_ has _PARAM2_ objects in its stack","Check if the stack is empty.":"Check if the stack is empty.","Is empty":"Is empty","The stack of _PARAM0_ is empty":"The stack of _PARAM0_ is empty","Make objects orbit around a center object":"Make objects orbit around a center object","Make objects orbit around a center object in a circular or elliptical path.":"Make objects orbit around a center object in a circular or elliptical path.","Move objects in orbit around a center object.":"Move objects in orbit around a center object.","Move objects in orbit around a center object":"Move objects in orbit around a center object","Animate _PARAM3_ copies of _PARAM2_ that orbit around _PARAM1_ at a distance of _PARAM5_ with orbit speed of _PARAM4_ degrees per second. Rotate orbiting objects at _PARAM6_ degrees per second. Start objects with an angle offset of _PARAM9_ degrees. Create objects on layer _PARAM7_ with Z value _PARAM8_. Reset locations of orbiting objects after quantity is reduced: _PARAM10_":"Animate _PARAM3_ copies of _PARAM2_ that orbit around _PARAM1_ at a distance of _PARAM5_ with orbit speed of _PARAM4_ degrees per second. Rotate orbiting objects at _PARAM6_ degrees per second. Start objects with an angle offset of _PARAM9_ degrees. Create objects on layer _PARAM7_ with Z value _PARAM8_. Reset locations of orbiting objects after quantity is reduced: _PARAM10_","Center object":"Center object","Orbiting object":"Orbiting object","Cannot be the same object used for the Center object":"Cannot be the same object used for the Center object","Quantity of orbiting objects":"Quantity of orbiting objects","Orbit speed (in degrees per second)":"Orbit speed (in degrees per second)","Use negative numbers to orbit counter-clockwise":"Use negative numbers to orbit counter-clockwise","Distance from the center object (in pixels)":"Distance from the center object (in pixels)","Angular speed (in degrees per second)":"Angular speed (in degrees per second)","Use negative numbers to rotate counter-clockwise":"Use negative numbers to rotate counter-clockwise","Layer that orbiting objects will be created on (base layer if empty)":"Layer that orbiting objects will be created on (base layer if empty)","Z order of orbiting objects":"Z order of orbiting objects","Starting angle offset (in degrees)":"Starting angle offset (in degrees)","Reset locations of orbiting objects after quantity is reduced":"Reset locations of orbiting objects after quantity is reduced","Move objects in elliptical orbit around a center object. Z-order is changed to make 3D effect.":"Move objects in elliptical orbit around a center object. Z-order is changed to make 3D effect.","Move objects in elliptical orbit around a center object":"Move objects in elliptical orbit around a center object","Animate _PARAM3_ copies of _PARAM2_ in elliptical orbit around _PARAM1_ with vertical radius of _PARAM5_, horizontal radius of _PARAM9_ and an orbit speed of _PARAM4_ degrees per second. Foreground side is _PARAM10_. Rotate orbiting objects at _PARAM6_ degrees per second":"Animate _PARAM3_ copies of _PARAM2_ in elliptical orbit around _PARAM1_ with vertical radius of _PARAM5_, horizontal radius of _PARAM9_ and an orbit speed of _PARAM4_ degrees per second. Foreground side is _PARAM10_. Rotate orbiting objects at _PARAM6_ degrees per second","Vertical distance from the center object (pixels)":"Vertical distance from the center object (pixels)","Horizontal distance from the center object (pixels)":"Horizontal distance from the center object (pixels)","Foreground Side":"Foreground Side","Delete orbiting objects that are linked to a center object.":"Delete orbiting objects that are linked to a center object.","Delete orbiting objects that are linked to a center object":"Delete orbiting objects that are linked to a center object","Delete all _PARAM2_ that are linked to _PARAM1_":"Delete all _PARAM2_ that are linked to _PARAM1_","Cannot be the same object that was used for the Center object":"Cannot be the same object that was used for the Center object","Labeled button":"Labeled button","Resizeable button with a label.":"Resizeable button with a label.","The finite state machine used internally by the button object.":"The finite state machine used internally by the button object.","Button finite state machine":"Button finite state machine","Change the text style when the button is hovered.":"Change the text style when the button is hovered.","Hover text style":"Hover text style","Outline on hover":"Outline on hover","Hover color":"Hover color","Enable shadow on hover":"Enable shadow on hover","Hover font size":"Hover font size","Idle font size":"Idle font size","Idle color":"Idle color","Check if isHovered.":"Check if isHovered.","IsHovered":"IsHovered","_PARAM0_ isHovered":"_PARAM0_ isHovered","Change if isHovered.":"Change if isHovered.","_PARAM0_ isHovered: _PARAM2_":"_PARAM0_ isHovered: _PARAM2_","Return the text color":"Return the text color","Text color":"Text color","Hover bitmap text style":"Hover bitmap text style","Hover prefix":"Hover prefix","Hover suffix":"Hover suffix","Idle text":"Idle text","Button with a label.":"Button with a label.","Label":"Label","Hovered fade out duration":"Hovered fade out duration","States":"States","Label offset on Y axis when pressed":"Label offset on Y axis when pressed","Change the text of the button label.":"Change the text of the button label.","Label text":"Label text","Change the text of _PARAM0_ to _PARAM1_":"Change the text of _PARAM0_ to _PARAM1_","the label text.":"the label text.","the label text":"the label text","De/activate interactions with the button.":"De/activate interactions with the button.","De/activate interactions":"De/activate interactions","Activate interactions with _PARAM0_: _PARAM1_":"Activate interactions with _PARAM0_: _PARAM1_","Activate":"Activate","Check if interactions are activated on the button.":"Check if interactions are activated on the button.","Interactions activated":"Interactions activated","Interactions on _PARAM0_ are activated":"Interactions on _PARAM0_ are activated","the labelOffset of the object.":"the labelOffset of the object.","LabelOffset":"LabelOffset","the labelOffset":"the labelOffset","Resource bar (continuous)":"Resource bar (continuous)","A bar that represents a resource in the game (health, mana, ammo, etc).":"A bar that represents a resource in the game (health, mana, ammo, etc).","Resource bar":"Resource bar","Previous high value":"Previous high value","Previous high value conservation duration (in seconds)":"Previous high value conservation duration (in seconds)","the value of the object.":"the value of the object.","the value":"the value","the maximum value of the object.":"the maximum value of the object.","the maximum value":"the maximum value","Check if the bar is empty.":"Check if the bar is empty.","Empty":"Empty","_PARAM0_ bar is empty":"_PARAM0_ bar is empty","Check if the bar is full.":"Check if the bar is full.","Full":"Full","_PARAM0_ bar is full":"_PARAM0_ bar is full","the previous high value of the resource bar before the current change.":"the previous high value of the resource bar before the current change.","the previous high value":"the previous high value","Force the previous resource value to update to the current one.":"Force the previous resource value to update to the current one.","Update previous value":"Update previous value","Update the previous resource value of _PARAM0_":"Update the previous resource value of _PARAM0_","the previous high value conservation duration (in seconds) of the object.":"the previous high value conservation duration (in seconds) of the object.","Previous high value conservation duration":"Previous high value conservation duration","the previous high value conservation duration":"the previous high value conservation duration","Check if the resource value is changing.":"Check if the resource value is changing.","Value is changing":"Value is changing","_PARAM0_ value is changing":"_PARAM0_ value is changing","Initial value":"Initial value","It's used to detect a change at hot reload.":"It's used to detect a change at hot reload.","Easing duration":"Easing duration","Show the label":"Show the label","Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.":"Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.","Update layout":"Update layout","Update layout of _PARAM0_":"Update layout of _PARAM0_","_PARAM0_ is empty":"_PARAM0_ is empty","_PARAM0_ is full":"_PARAM0_ is full","the previous value conservation duration (in seconds) of the object.":"the previous value conservation duration (in seconds) of the object.","Previous value conservation duration":"Previous value conservation duration","the previous value conservation duration":"the previous value conservation duration","Value width":"Value width","Check if the label is shown.":"Check if the label is shown.","Label is shown":"Label is shown","_PARAM0_ label is shown":"_PARAM0_ label is shown","Show (or hide) the label on the bar.":"Show (or hide) the label on the bar.","Show label":"Show label","Show the label of _PARAM0_: _PARAM1_":"Show the label of _PARAM0_: _PARAM1_","Update the text that display the current value and maximum value.":"Update the text that display the current value and maximum value.","Update label":"Update label","Update label of _PARAM0_":"Update label of _PARAM0_","Slider":"Slider","A draggable slider that users can move to select a numerical value.":"A draggable slider that users can move to select a numerical value.","Represent a value on a slider.":"Represent a value on a slider.","Step size":"Step size","the minimum value of the object.":"the minimum value of the object.","the minimum value":"the minimum value","the bar value bounds size.":"the bar value bounds size.","the bar value bounds size":"the bar value bounds size","the step size of the object.":"the step size of the object.","the step size":"the step size","Bar left margin":"Bar left margin","Bar":"Bar","Bar top margin":"Bar top margin","Bar right margin":"Bar right margin","Bar bottom margin":"Bar bottom margin","Show the label when the value is changed":"Show the label when the value is changed","Label margin":"Label margin","Only used by the scene editor.":"Only used by the scene editor.","the value of the slider.":"the value of the slider.","the minimum value of the slider.":"the minimum value of the slider.","the maximum value of the slider.":"the maximum value of the slider.","the step size of the slider.":"the step size of the slider.","Update the thumb position according to the slider value.":"Update the thumb position according to the slider value.","Update thumb position":"Update thumb position","Update the thumb position of _PARAM0_":"Update the thumb position of _PARAM0_","Update the slider configuration.":"Update the slider configuration.","Update slider configuration":"Update slider configuration","Update the slider configuration of _PARAM0_":"Update the slider configuration of _PARAM0_","Check if the slider allows interactions.":"Check if the slider allows interactions.","Parallax for Tiled Sprite":"Parallax for Tiled Sprite","Parallax scrolling for Tiled Sprite backgrounds.":"Parallax scrolling for Tiled Sprite backgrounds.","Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").","Horizontal Parallax for a Tiled Sprite":"Horizontal Parallax for a Tiled Sprite","Parallax factor (speed for the parallax, usually between 0 and 1)":"Parallax factor (speed for the parallax, usually between 0 and 1)","Layer to be followed (leave empty for the base layer)":"Layer to be followed (leave empty for the base layer)","Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").","Vertical Parallax for a Tiled Sprite":"Vertical Parallax for a Tiled Sprite","Offset on Y axis":"Offset on Y axis","3D particle emitter":"3D particle emitter","Display a large number of particles in 3D to create visual effects in a 3D game.":"Display a large number of particles in 3D to create visual effects in a 3D game.","Display a large number of particles to create visual effects.":"Display a large number of particles to create visual effects.","Start color":"Start color","End color":"End color","Start opacity":"Start opacity","Flow of particles (particles per second)":"Flow of particles (particles per second)","Start min size":"Start min size","Start max size":"Start max size","End scale":"End scale","Start min speed":"Start min speed","Start max speed":"Start max speed","Min lifespan":"Min lifespan","Max lifespan":"Max lifespan","Emission duration":"Emission duration","Particles move with the emitter":"Particles move with the emitter","Spay cone angle":"Spay cone angle","Blending":"Blending","Gravity top":"Gravity top","Delete when emission ends":"Delete when emission ends","Z (elevation)":"Z (elevation)","Deprecated":"Deprecated","Rotation on X axis":"Rotation on X axis","Rotation on Y axis":"Rotation on Y axis","Start min length":"Start min length","Trail":"Trail","Start max length":"Start max length","Render mode":"Render mode","Follow the object":"Follow the object","Tail end width ratio":"Tail end width ratio","Update particle image":"Update particle image","Update particle image of _PARAM0_":"Update particle image of _PARAM0_","Register in layer":"Register in layer","Register _PARAM0_ in layer":"Register _PARAM0_ in layer","Delete itself":"Delete itself","Delete _PARAM0_":"Delete _PARAM0_","Check that emission has ended and no particle is alive anymore.":"Check that emission has ended and no particle is alive anymore.","Emission has ended":"Emission has ended","Emission from _PARAM0_ has ended":"Emission from _PARAM0_ has ended","Restart particule emission from the beginning.":"Restart particule emission from the beginning.","Restart":"Restart","Restart particule emission from _PARAM0_":"Restart particule emission from _PARAM0_","the Z position of the emitter.":"the Z position of the emitter.","Z elevaltion (deprecated)":"Z elevaltion (deprecated)","the Z position":"the Z position","the rotation on X axis of the emitter.":"the rotation on X axis of the emitter.","Rotation on X axis (deprecated)":"Rotation on X axis (deprecated)","the rotation on X axis":"the rotation on X axis","the rotation on Y axis of the emitter.":"the rotation on Y axis of the emitter.","Rotation on Y axis (deprecated)":"Rotation on Y axis (deprecated)","the rotation on Y axis":"the rotation on Y axis","the start color of the object.":"the start color of the object.","the start color":"the start color","the end color of the object.":"the end color of the object.","the end color":"the end color","the start opacity of the object.":"the start opacity of the object.","the start opacity":"the start opacity","the end opacity of the object.":"the end opacity of the object.","the end opacity":"the end opacity","the flow of particles of the object (particles per second).":"the flow of particles of the object (particles per second).","Flow of particles":"Flow of particles","the flow of particles":"the flow of particles","the start min size of the object.":"the start min size of the object.","the start min size":"the start min size","the start max size of the object.":"the start max size of the object.","the start max size":"the start max size","the end scale of the object.":"the end scale of the object.","the end scale":"the end scale","the min start speed of the object.":"the min start speed of the object.","Min start speed":"Min start speed","the min start speed":"the min start speed","the max start speed of the object.":"the max start speed of the object.","Max start speed":"Max start speed","the max start speed":"the max start speed","the min lifespan of the object.":"the min lifespan of the object.","the min lifespan":"the min lifespan","the max lifespan of the object.":"the max lifespan of the object.","the max lifespan":"the max lifespan","the emission duration of the object.":"the emission duration of the object.","the emission duration":"the emission duration","Check if particles move with the emitter.":"Check if particles move with the emitter.","_PARAM0_ particles move with the emitter":"_PARAM0_ particles move with the emitter","Change if particles move with the emitter.":"Change if particles move with the emitter.","_PARAM0_ particles move with the emitter: _PARAM1_":"_PARAM0_ particles move with the emitter: _PARAM1_","AreParticlesRelative":"AreParticlesRelative","the spay cone angle of the object.":"the spay cone angle of the object.","the spay cone angle":"the spay cone angle","the blending of the object.":"the blending of the object.","the blending":"the blending","the gravity top of the object.":"the gravity top of the object.","the gravity top":"the gravity top","the gravity of the object.":"the gravity of the object.","the gravity":"the gravity","Check if delete when emission ends.":"Check if delete when emission ends.","_PARAM0_ delete when emission ends":"_PARAM0_ delete when emission ends","Change if delete when emission ends.":"Change if delete when emission ends.","_PARAM0_ delete when emission ends: _PARAM1_":"_PARAM0_ delete when emission ends: _PARAM1_","ShouldAutodestruct":"ShouldAutodestruct","the start min trail length of the object.":"the start min trail length of the object.","Start min trail length":"Start min trail length","the start min trail length":"the start min trail length","the start max trail length of the object.":"the start max trail length of the object.","Start max trail length":"Start max trail length","the start max trail length":"the start max trail length","Check if the trail should follow the object.":"Check if the trail should follow the object.","Trail following the object":"Trail following the object","The trail is following _PARAM0_":"The trail is following _PARAM0_","Change if the trail should follow the object or not.":"Change if the trail should follow the object or not.","Make the trail follow":"Make the trail follow","Make the trail follow _PARAM0_: _PARAM1_":"Make the trail follow _PARAM0_: _PARAM1_","IsTrailFollowingLocalOrigin":"IsTrailFollowingLocalOrigin","the tail end width ratio of the object.":"the tail end width ratio of the object.","the tail end width ratio":"the tail end width ratio","the render mode of the object.":"the render mode of the object.","the render mode":"the render mode","2D Top-Down Physics Car":"2D Top-Down Physics Car","Simulate top-down car motion with drifting.":"Simulate top-down car motion with drifting.","Simulate 2D car motion, from a top-down view.":"Simulate 2D car motion, from a top-down view.","Physics car":"Physics car","Physics Engine 2.0":"Physics Engine 2.0","Wheel grip ratio (from 0 to 1)":"Wheel grip ratio (from 0 to 1)","A ratio of 0 is like driving on ice.":"A ratio of 0 is like driving on ice.","Steering":"Steering","Steering speed":"Steering speed","Sterring speed when turning back":"Sterring speed when turning back","Maximum steering angle":"Maximum steering angle","Steering angle":"Steering angle","Front wheels position":"Front wheels position","0 means at the center, 1 means at the front":"0 means at the center, 1 means at the front","Wheels":"Wheels","Rear wheels position":"Rear wheels position","0 means at the center, 1 means at the back":"0 means at the center, 1 means at the back","Simulate a press of the right key.":"Simulate a press of the right key.","Simulate right key press":"Simulate right key press","Simulate pressing right for _PARAM0_":"Simulate pressing right for _PARAM0_","Simulate a press of the left key.":"Simulate a press of the left key.","Simulate left key press":"Simulate left key press","Simulate pressing left for _PARAM0_":"Simulate pressing left for _PARAM0_","Simulate a press of the up key.":"Simulate a press of the up key.","Simulate up key press":"Simulate up key press","Simulate pressing up for _PARAM0_":"Simulate pressing up for _PARAM0_","Simulate a press of the down key.":"Simulate a press of the down key.","Simulate down key press":"Simulate down key press","Simulate pressing down for _PARAM0_":"Simulate pressing down for _PARAM0_","Simulate a steering stick for a given axis force.":"Simulate a steering stick for a given axis force.","Simulate steering stick":"Simulate steering stick","Simulate a steering stick for _PARAM0_ with a force of _PARAM2_":"Simulate a steering stick for _PARAM0_ with a force of _PARAM2_","Simulate an acceleration stick for a given axis force.":"Simulate an acceleration stick for a given axis force.","Simulate acceleration stick":"Simulate acceleration stick","Simulate an acceleration stick for _PARAM0_ with a force of _PARAM2_":"Simulate an acceleration stick for _PARAM0_ with a force of _PARAM2_","Apply wheel forces":"Apply wheel forces","Apply forces on the wheel at _PARAM2_ ; _PARAM3_ and _PARAM4_° of _PARAM0_":"Apply forces on the wheel at _PARAM2_ ; _PARAM3_ and _PARAM4_° of _PARAM0_","Wheel X":"Wheel X","Wheel Y":"Wheel Y","Wheel angle":"Wheel angle","Return the momentum of inertia (in kg ⋅ pixel²)":"Return the momentum of inertia (in kg ⋅ pixel²)","Momentum of inertia":"Momentum of inertia","Apply a polar force":"Apply a polar force","Length (in kg ⋅ pixels ⋅ s^−2)":"Length (in kg ⋅ pixels ⋅ s^−2)","Draw forces applying on the car for debug purpose.":"Draw forces applying on the car for debug purpose.","Draw forces for debug":"Draw forces for debug","Draw forces of car _PARAM0_ on _PARAM2_":"Draw forces of car _PARAM0_ on _PARAM2_","the steering angle of the object.":"the steering angle of the object.","the steering angle":"the steering angle","the wheel grip ratio of the object (from 0 to 1). A ratio of 0 is like driving on ice.":"the wheel grip ratio of the object (from 0 to 1). A ratio of 0 is like driving on ice.","Wheel grip ratio":"Wheel grip ratio","the wheel grip ratio":"the wheel grip ratio","the maximum steering angle of the object.":"the maximum steering angle of the object.","the maximum steering angle":"the maximum steering angle","the steering speed of the object.":"the steering speed of the object.","the steering speed":"the steering speed","the sterring speed when turning back of the object.":"the sterring speed when turning back of the object.","Sterring back speed":"Sterring back speed","the sterring speed when turning back":"the sterring speed when turning back","3D car keyboard mapper":"3D car keyboard mapper","3D car keyboard controls.":"3D car keyboard controls.","Control a 3D physics car with a keyboard.":"Control a 3D physics car with a keyboard.","Hand brake key":"Hand brake key","3D physics character animator":"3D physics character animator","Change animations of 3D physics characters automatically.":"Change animations of 3D physics characters automatically.","Change animations of a 3D physics character automatically.":"Change animations of a 3D physics character automatically.","Animatable capacity":"Animatable capacity","\"Idle\" animation name":"\"Idle\" animation name","Animation names":"Animation names","\"Run\" animation name":"\"Run\" animation name","\"Jump\" animation name":"\"Jump\" animation name","\"Fall\" animation name":"\"Fall\" animation name","3D character keyboard mapper":"3D character keyboard mapper","3D platformer and 3D shooter keyboard controls.":"3D platformer and 3D shooter keyboard controls.","Control a 3D physics character with a keyboard for a platformer or a top-down game.":"Control a 3D physics character with a keyboard for a platformer or a top-down game.","3D platformer keyboard mapper":"3D platformer keyboard mapper","Camera is locked for the frame":"Camera is locked for the frame","Check if camera is locked for the frame.":"Check if camera is locked for the frame.","Camera is locked":"Camera is locked","_PARAM0_ camera is locked for the frame":"_PARAM0_ camera is locked for the frame","Change if camera is locked for the frame.":"Change if camera is locked for the frame.","Lock the camera":"Lock the camera","_PARAM0_ camera is locked for the frame: _PARAM2_":"_PARAM0_ camera is locked for the frame: _PARAM2_","Control a 3D physics character with a keyboard for a first or third person shooter.":"Control a 3D physics character with a keyboard for a first or third person shooter.","3D shooter keyboard mapper":"3D shooter keyboard mapper","3D ellipse movement":"3D ellipse movement","Move 3D objects in elliptical paths or smooth back-and-forth in one direction.":"Move 3D objects in elliptical paths or smooth back-and-forth in one direction.","3D physics engine":"3D physics engine","Ellipse width":"Ellipse width","Ellipse height":"Ellipse height","the ellipse width of the object.":"the ellipse width of the object.","the ellipse width":"the ellipse width","the ellipse height of the object.":"the ellipse height of the object.","the ellipse height":"the ellipse height","the loop duration (in seconds).":"the loop duration (in seconds).","the loop duration":"the loop duration","Pinching gesture":"Pinching gesture","Move the camera or objects with pinching gestures.":"Move the camera or objects with pinching gestures.","Enable or disable camera pinch.":"Enable or disable camera pinch.","Enable or disable camera pinch":"Enable or disable camera pinch","Enable camera pinch: _PARAM1_":"Enable camera pinch: _PARAM1_","Enable camera pinch":"Enable camera pinch","Check if camera pinch is enabled.":"Check if camera pinch is enabled.","Camera pinch is enabled":"Camera pinch is enabled","Choose the layer to move with pinch gestures.":"Choose the layer to move with pinch gestures.","Camera pinch layer":"Camera pinch layer","Choose the layer _PARAM1_ to move with pinch gestures":"Choose the layer _PARAM1_ to move with pinch gestures","Change the camera pinch constraint.":"Change the camera pinch constraint.","Camera pinch constraints":"Camera pinch constraints","Change the camera pinch constraint to _PARAM1_":"Change the camera pinch constraint to _PARAM1_","Constraint":"Constraint","Pinch the camera of a layer.":"Pinch the camera of a layer.","Pinch camera":"Pinch camera","Pinch the camera of layer: _PARAM1_ with constraint: _PARAM2_":"Pinch the camera of layer: _PARAM1_ with constraint: _PARAM2_","Check if a touch is pinching, if 2 touches are pressed.":"Check if a touch is pinching, if 2 touches are pressed.","Touch is pinching":"Touch is pinching","Return the scaling of the pinch gesture from its beginning.":"Return the scaling of the pinch gesture from its beginning.","Pinch scaling":"Pinch scaling","Return the rotation of the pinch gesture from its beginning (in degrees).":"Return the rotation of the pinch gesture from its beginning (in degrees).","Pinch rotation":"Pinch rotation","Return the X position of the pinch center at the beginning of the gesture.":"Return the X position of the pinch center at the beginning of the gesture.","Pinch beginning center X":"Pinch beginning center X","Return the Y position of the pinch center at the beginning of the gesture.":"Return the Y position of the pinch center at the beginning of the gesture.","Pinch beginning center Y":"Pinch beginning center Y","Return the X position of the pinch center.":"Return the X position of the pinch center.","Pinch center X":"Pinch center X","Return the Y position of the pinch center.":"Return the Y position of the pinch center.","Pinch center Y":"Pinch center Y","Return the horizontal translation of the pinch gesture from its beginning.":"Return the horizontal translation of the pinch gesture from its beginning.","Pinch translation X":"Pinch translation X","Return the vertical translation of the pinch gesture from its beginning.":"Return the vertical translation of the pinch gesture from its beginning.","Pinch translation Y":"Pinch translation Y","Return the new X position of a point after the pinch gesture.":"Return the new X position of a point after the pinch gesture.","Transform X position":"Transform X position","Position X before the pinch":"Position X before the pinch","Position Y before the pinch":"Position Y before the pinch","Return the new Y position of a point after the pinch gesture.":"Return the new Y position of a point after the pinch gesture.","Transform Y position":"Transform Y position","Return the original X position of a point before the pinch gesture.":"Return the original X position of a point before the pinch gesture.","Inversed transform X position":"Inversed transform X position","Position X after the pinch":"Position X after the pinch","Position Y after the pinch":"Position Y after the pinch","Return the new position on the Y axis of a point after the pinch gesture.":"Return the new position on the Y axis of a point after the pinch gesture.","Inversed transform Y position":"Inversed transform Y position","Return the X coordinate of a position transformed from the scene to the canvas according to a layer.":"Return the X coordinate of a position transformed from the scene to the canvas according to a layer.","Transform X to canvas":"Transform X to canvas","Return the Y coordinate of a position transformed from the scene to the canvas according to a layer.":"Return the Y coordinate of a position transformed from the scene to the canvas according to a layer.","Transform Y to canvas":"Transform Y to canvas","Return the X coordinate of a position transformed from the canvas to the scene according to a layer.":"Return the X coordinate of a position transformed from the canvas to the scene according to a layer.","Transform X to scene":"Transform X to scene","Return the Y coordinate of a position transformed from the canvas to the scene according to a layer.":"Return the Y coordinate of a position transformed from the canvas to the scene according to a layer.","Transform Y to scene":"Transform Y to scene","Return the touch X on the canvas.":"Return the touch X on the canvas.","Touch X on canvas":"Touch X on canvas","Return the touch Y on the canvas.":"Return the touch Y on the canvas.","Touch Y on canvas":"Touch Y on canvas","Return the X coordinate of a vector after a rotation":"Return the X coordinate of a vector after a rotation","Rotated vector X":"Rotated vector X","Vector X":"Vector X","Vector Y":"Vector Y","Angle (in degrees)":"Angle (in degrees)","Return the Y coordinate of a vector after a rotation":"Return the Y coordinate of a vector after a rotation","Rotated vector Y":"Rotated vector Y","Move objects by holding 2 touches on them.":"Move objects by holding 2 touches on them.","Pinchable object":"Pinchable object","Resizable capability":"Resizable capability","Lock object size":"Lock object size","Check if the object is being pinched.":"Check if the object is being pinched.","Is being pinched":"Is being pinched","_PARAM0_ is being pinched":"_PARAM0_ is being pinched","Abort the pinching of this object.":"Abort the pinching of this object.","Abort pinching":"Abort pinching","Abort the pinching of _PARAM0_":"Abort the pinching of _PARAM0_","Pixel perfect movement":"Pixel perfect movement","Grid-based pixel-perfect movement for platformer and top-down characters.":"Grid-based pixel-perfect movement for platformer and top-down characters.","Return the speed necessary to cover a distance according to the deceleration.":"Return the speed necessary to cover a distance according to the deceleration.","Speed to reach":"Speed to reach","Braking distance from an initial speed: _PARAM2_ and a deceleration: _PARAM3_ is less than _PARAM1_":"Braking distance from an initial speed: _PARAM2_ and a deceleration: _PARAM3_ is less than _PARAM1_","Distance":"Distance","Return the braking distance according to an initial speed and a deceleration.":"Return the braking distance according to an initial speed and a deceleration.","Braking distance":"Braking distance","Define JavaScript classes for top-down.":"Define JavaScript classes for top-down.","Define JavaScript classes for top-down":"Define JavaScript classes for top-down","Define JavaScript classes for top-down":"Define JavaScript classes for top-down","Seamlessly align big pixels using a top-down movement.":"Seamlessly align big pixels using a top-down movement.","Pixel perfect top-down movement":"Pixel perfect top-down movement","Pixel size":"Pixel size","Pixel grid offset X":"Pixel grid offset X","Pixel grid offset Y":"Pixel grid offset Y","Seamlessly align big pixels using a 2D platformer character movement.":"Seamlessly align big pixels using a 2D platformer character movement.","Pixel perfect platformer character":"Pixel perfect platformer character","Platformer character animator":"Platformer character animator","Change animations and horizontal flipping of a platformer character automatically.":"Change animations and horizontal flipping of a platformer character automatically.","Enable animation changes":"Enable animation changes","Enable horizontal flipping":"Enable horizontal flipping","\"Climb\" animation name":"\"Climb\" animation name","Platformer character":"Platformer character","Flippable capacity":"Flippable capacity","Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.":"Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.","Enable (or disable) automated animation changes":"Enable (or disable) automated animation changes","Enable automated animation changes on _PARAM0_: _PARAM2_":"Enable automated animation changes on _PARAM0_: _PARAM2_","Change animations automatically":"Change animations automatically","Enable (or disable) automated horizontal flipping of a platform character.":"Enable (or disable) automated horizontal flipping of a platform character.","Enable (or disable) automated horizontal flipping":"Enable (or disable) automated horizontal flipping","Enable automated horizontal flipping on _PARAM0_: _PARAM2_":"Enable automated horizontal flipping on _PARAM0_: _PARAM2_","Set the \"Idle\" animation name. Do not use quotation marks.":"Set the \"Idle\" animation name. Do not use quotation marks.","Set \"Idle\" animation of _PARAM0_ to _PARAM2_":"Set \"Idle\" animation of _PARAM0_ to _PARAM2_","Animation name":"Animation name","Set the \"Move\" animation name. Do not use quotation marks.":"Set the \"Move\" animation name. Do not use quotation marks.","\"Move\" animation name":"\"Move\" animation name","Set \"Move\" animation of _PARAM0_ to _PARAM2_":"Set \"Move\" animation of _PARAM0_ to _PARAM2_","Set the \"Jump\" animation name. Do not use quotation marks.":"Set the \"Jump\" animation name. Do not use quotation marks.","Set \"Jump\" animation of _PARAM0_ to _PARAM2_":"Set \"Jump\" animation of _PARAM0_ to _PARAM2_","Set the \"Fall\" animation name. Do not use quotation marks.":"Set the \"Fall\" animation name. Do not use quotation marks.","Set \"Fall\" animation of _PARAM0_ to _PARAM2_":"Set \"Fall\" animation of _PARAM0_ to _PARAM2_","Set the \"Climb\" animation name. Do not use quotation marks.":"Set the \"Climb\" animation name. Do not use quotation marks.","Set \"Climb\" animation of _PARAM0_ to _PARAM2_":"Set \"Climb\" animation of _PARAM0_ to _PARAM2_","Platformer trajectory":"Platformer trajectory","Configure jumps by height/duration. AI tools for gap and ledge detection.":"Configure jumps by height/duration. AI tools for gap and ledge detection.","Configure the height of a jump and evaluate the jump trajectory.":"Configure the height of a jump and evaluate the jump trajectory.","Platformer trajectory evaluator":"Platformer trajectory evaluator","Jump height":"Jump height","Change the jump speed to reach a given height.":"Change the jump speed to reach a given height.","Change the jump height of _PARAM0_ to _PARAM2_":"Change the jump height of _PARAM0_ to _PARAM2_","Draw the jump trajectories from no sustain to full sustain.":"Draw the jump trajectories from no sustain to full sustain.","Draw jump":"Draw jump","Draw the jump trajectory of _PARAM0_ on _PARAM2_":"Draw the jump trajectory of _PARAM0_ on _PARAM2_","The jump Y displacement at a given time from the start of the jump.":"The jump Y displacement at a given time from the start of the jump.","Jump Y":"Jump Y","Jump sustaining duration":"Jump sustaining duration","The maximum Y displacement.":"The maximum Y displacement.","Peak Y":"Peak Y","The time from the start of the jump when it reaches the maximum Y displacement.":"The time from the start of the jump when it reaches the maximum Y displacement.","Peak time":"Peak time","The time from the start of the jump when it reaches a given Y displacement moving upward.":"The time from the start of the jump when it reaches a given Y displacement moving upward.","Jump up time":"Jump up time","The time from the start of the jump when it reaches a given Y displacement moving downward.":"The time from the start of the jump when it reaches a given Y displacement moving downward.","Jump down time":"Jump down time","The X displacement before the character stops (always positive).":"The X displacement before the character stops (always positive).","Stop distance":"Stop distance","The X displacement at a given time from now if decelerating (always positive).":"The X displacement at a given time from now if decelerating (always positive).","Stopping X":"Stopping X","The X displacement at a given time from now if accelerating (always positive).":"The X displacement at a given time from now if accelerating (always positive).","Moving X":"Moving X","Player avatar":"Player avatar","Display player avatars from GDevelop accounts in multiplayer games.":"Display player avatars from GDevelop accounts in multiplayer games.","Return the UserID from a lobby player number.":"Return the UserID from a lobby player number.","UserID":"UserID","Lobby player number":"Lobby player number","Display a player avatar according to their GDevelop account.":"Display a player avatar according to their GDevelop account.","Multiplayer Avatar":"Multiplayer Avatar","Border enabled":"Border enabled","Enable the border on the avatar.":"Enable the border on the avatar.","Player unique ID":"Player unique ID","the player unique ID of the avatar.":"the player unique ID of the avatar.","the player unique ID":"the player unique ID","Playgama Bridge":"Playgama Bridge","One SDK for cross-platform publishing HTML5 games.":"One SDK for cross-platform publishing HTML5 games.","Add Action Parameter.":"Add Action Parameter.","Add Action Parameter":"Add Action Parameter","Add Action Parameter _PARAM1_ : _PARAM2_":"Add Action Parameter _PARAM1_ : _PARAM2_","Path":"Path","Add Bool Action Parameter.":"Add Bool Action Parameter.","Add Bool Action Parameter":"Add Bool Action Parameter","Is Initialized.":"Is Initialized.","Is Initialized":"Is Initialized","Platform Id.":"Platform Id.","Platform Id":"Platform Id","Platform Language.":"Platform Language.","Platform Language":"Platform Language","Platform Payload.":"Platform Payload.","Platform Payload":"Platform Payload","Platform Tld.":"Platform Tld.","Platform Tld":"Platform Tld","Platform Is Audio Enabled.":"Platform Is Audio Enabled.","Platform Is Audio Enabled":"Platform Is Audio Enabled","Platform Is Paused.":"Platform Is Paused.","Platform Is Paused":"Platform Is Paused","Is Get All Games Supported.":"Is Get All Games Supported.","Is Get All Games Supported":"Is Get All Games Supported","Is Get Game By Id Supported.":"Is Get Game By Id Supported.","Is Get Game By Id Supported":"Is Get Game By Id Supported","On Get All Games Completed.":"On Get All Games Completed.","On Get All Games Completed":"On Get All Games Completed","On Get Game By Id Completed.":"On Get Game By Id Completed.","On Get Game By Id Completed":"On Get Game By Id Completed","Platform Get All Games.":"Platform Get All Games.","Platform Get All Games":"Platform Get All Games","Platform Get Game By Id.":"Platform Get Game By Id.","Platform Get Game By Id":"Platform Get Game By Id","Platform All Games Count.":"Platform All Games Count.","Platform All Games Count":"Platform All Games Count","Platform All Game Properties Count.":"Platform All Game Properties Count.","Platform All Game Properties Count":"Platform All Game Properties Count","Platform All Games Property Name.":"Platform All Games Property Name.","Platform All Games Property Name":"Platform All Games Property Name","Property Index":"Property Index","Platform All Games Property Value.":"Platform All Games Property Value.","Platform All Games Property Value":"Platform All Games Property Value","Game Index":"Game Index","Property":"Property","Platform Game By Id Property Value.":"Platform Game By Id Property Value.","Platform Game By Id Property Value":"Platform Game By Id Property Value","Platform On Audio State Changed.":"Platform On Audio State Changed.","Platform On Audio State Changed":"Platform On Audio State Changed","Platform On Pause State Changed.":"Platform On Pause State Changed.","Platform On Pause State Changed":"Platform On Pause State Changed","Device Type.":"Device Type.","Device Type":"Device Type","Is Mobile.":"Is Mobile.","Is Mobile":"Is Mobile","Is Tablet.":"Is Tablet.","Is Tablet":"Is Tablet","Is Desktop.":"Is Desktop.","Is Desktop":"Is Desktop","Is Tv.":"Is Tv.","Is Tv":"Is Tv","Player Id.":"Player Id.","Player Id":"Player Id","Player Name.":"Player Name.","Player Name":"Player Name","Player Extra Properties Count.":"Player Extra Properties Count.","Player Extra Properties Count":"Player Extra Properties Count","Player Extra Property Name.":"Player Extra Property Name.","Player Extra Property Name":"Player Extra Property Name","Player Extra Property Value.":"Player Extra Property Value.","Player Extra Property Value":"Player Extra Property Value","Player Photos Count.":"Player Photos Count.","Player Photos Count":"Player Photos Count","Player Photo # _PARAM1_.":"Player Photo # _PARAM1_.","Player Photo":"Player Photo","Index":"Index","Visibility State.":"Visibility State.","Visibility State":"Visibility State","On Visibility State Changed.":"On Visibility State Changed.","On Visibility State Changed":"On Visibility State Changed","Default Storage Type.":"Default Storage Type.","Default Storage Type":"Default Storage Type","Storage Data.":"Storage Data.","Storage Data":"Storage Data","Storage Data As JSON.":"Storage Data As JSON.","Storage Data As JSON":"Storage Data As JSON","Append Parameter to Storage Data Get Request.":"Append Parameter to Storage Data Get Request.","Append Parameter to Storage Data Get Request":"Append Parameter to Storage Data Get Request","Append Parameter _PARAM1_ to Storage Data Get Request":"Append Parameter _PARAM1_ to Storage Data Get Request","Append Parameter to Storage Data Set Request.":"Append Parameter to Storage Data Set Request.","Append Parameter to Storage Data Set Request":"Append Parameter to Storage Data Set Request","Append Parameter _PARAM1_ : _PARAM2_ to Storage Data Set Request":"Append Parameter _PARAM1_ : _PARAM2_ to Storage Data Set Request","Append Parameter to Storage Data Delete Request.":"Append Parameter to Storage Data Delete Request.","Append Parameter to Storage Data Delete Request":"Append Parameter to Storage Data Delete Request","Append Parameter _PARAM1_ to Storage Data Delete Request":"Append Parameter _PARAM1_ to Storage Data Delete Request","Is Last Action Completed Successfully.":"Is Last Action Completed Successfully.","Is Last Action Completed Successfully":"Is Last Action Completed Successfully","Send Storage Data Get Request.":"Send Storage Data Get Request.","Send Storage Data Get Request":"Send Storage Data Get Request","Send Storage Data Get Request _PARAM1_":"Send Storage Data Get Request _PARAM1_","Storage Type":"Storage Type","Send Storage Data Set Request.":"Send Storage Data Set Request.","Send Storage Data Set Request":"Send Storage Data Set Request","Send Storage Data Set Request _PARAM1_":"Send Storage Data Set Request _PARAM1_","Send Storage Data Delete Request.":"Send Storage Data Delete Request.","Send Storage Data Delete Request":"Send Storage Data Delete Request","Send Storage Data Delete Request _PARAM1_":"Send Storage Data Delete Request _PARAM1_","On Storage Data Get Request Completed.":"On Storage Data Get Request Completed.","On Storage Data Get Request Completed":"On Storage Data Get Request Completed","On Storage Data Set Request Completed.":"On Storage Data Set Request Completed.","On Storage Data Set Request Completed":"On Storage Data Set Request Completed","On Storage Data Delete Request Completed.":"On Storage Data Delete Request Completed.","On Storage Data Delete Request Completed":"On Storage Data Delete Request Completed","Has Storage Data.":"Has Storage Data.","Has Storage Data":"Has Storage Data","Has _PARAM1_ in Storage Data":"Has _PARAM1_ in Storage Data","Is Storage Supported.":"Is Storage Supported.","Is Storage Supported":"Is Storage Supported","Is Storage Supported _PARAM1_":"Is Storage Supported _PARAM1_","Is Storage Available.":"Is Storage Available.","Is Storage Available":"Is Storage Available","Is Storage Available _PARAM1_":"Is Storage Available _PARAM1_","Set Minimum Delay Between Interstitial.":"Set Minimum Delay Between Interstitial.","Set Minimum Delay Between Interstitial":"Set Minimum Delay Between Interstitial","Set Minimum Delay Between Interstitial _PARAM1_":"Set Minimum Delay Between Interstitial _PARAM1_","Seconds":"Seconds","Show Banner.":"Show Banner.","Show Banner":"Show Banner","Show Banner on _PARAM1_ with placement _PARAM2_":"Show Banner on _PARAM1_ with placement _PARAM2_","Placement (optional)":"Placement (optional)","Hide Banner.":"Hide Banner.","Hide Banner":"Hide Banner","Show Advanced Banners.":"Show Advanced Banners.","Show Advanced Banners":"Show Advanced Banners","Show Advanced Banners with placement _PARAM1_":"Show Advanced Banners with placement _PARAM1_","Hide Advanced Banners.":"Hide Advanced Banners.","Hide Advanced Banners":"Hide Advanced Banners","Show Interstitial.":"Show Interstitial.","Show Interstitial":"Show Interstitial","Show Interstitial with placement _PARAM1_":"Show Interstitial with placement _PARAM1_","Show Rewarded.":"Show Rewarded.","Show Rewarded":"Show Rewarded","Show Rewarded with placement _PARAM1_":"Show Rewarded with placement _PARAM1_","Check AdBlock.":"Check AdBlock.","Check AdBlock":"Check AdBlock","Minimum Delay Between Interstitial.":"Minimum Delay Between Interstitial.","Minimum Delay Between Interstitial":"Minimum Delay Between Interstitial","Banner State.":"Banner State.","Banner State":"Banner State","Interstitial State.":"Interstitial State.","Interstitial State":"Interstitial State","Rewarded State.":"Rewarded State.","Rewarded State":"Rewarded State","Rewarded Placement.":"Rewarded Placement.","Rewarded Placement":"Rewarded Placement","Advanced Banners State.":"Advanced Banners State.","Advanced Banners State":"Advanced Banners State","Is Banner Supported.":"Is Banner Supported.","Is Banner Supported":"Is Banner Supported","Is Interstitial Supported.":"Is Interstitial Supported.","Is Interstitial Supported":"Is Interstitial Supported","Is Rewarded Supported.":"Is Rewarded Supported.","Is Rewarded Supported":"Is Rewarded Supported","Is Advanced Banners Supported.":"Is Advanced Banners Supported.","Is Advanced Banners Supported":"Is Advanced Banners Supported","On Banner State Changed.":"On Banner State Changed.","On Banner State Changed":"On Banner State Changed","On Banner Loading.":"On Banner Loading.","On Banner Loading":"On Banner Loading","On Banner Shown.":"On Banner Shown.","On Banner Shown":"On Banner Shown","On Banner Hidden.":"On Banner Hidden.","On Banner Hidden":"On Banner Hidden","On Banner Failed.":"On Banner Failed.","On Banner Failed":"On Banner Failed","On Advanced Banners State Changed.":"On Advanced Banners State Changed.","On Advanced Banners State Changed":"On Advanced Banners State Changed","On Advanced Banners Loading.":"On Advanced Banners Loading.","On Advanced Banners Loading":"On Advanced Banners Loading","On Advanced Banners Shown.":"On Advanced Banners Shown.","On Advanced Banners Shown":"On Advanced Banners Shown","On Advanced Banners Hidden.":"On Advanced Banners Hidden.","On Advanced Banners Hidden":"On Advanced Banners Hidden","On Advanced Banners Failed.":"On Advanced Banners Failed.","On Advanced Banners Failed":"On Advanced Banners Failed","On Interstitial State Changed.":"On Interstitial State Changed.","On Interstitial State Changed":"On Interstitial State Changed","On Interstitial Loading.":"On Interstitial Loading.","On Interstitial Loading":"On Interstitial Loading","On Interstitial Opened.":"On Interstitial Opened.","On Interstitial Opened":"On Interstitial Opened","On Interstitial Closed.":"On Interstitial Closed.","On Interstitial Closed":"On Interstitial Closed","On Interstitial Failed.":"On Interstitial Failed.","On Interstitial Failed":"On Interstitial Failed","On Rewarded State Changed.":"On Rewarded State Changed.","On Rewarded State Changed":"On Rewarded State Changed","On Rewarded Loading.":"On Rewarded Loading.","On Rewarded Loading":"On Rewarded Loading","On Rewarded Opened.":"On Rewarded Opened.","On Rewarded Opened":"On Rewarded Opened","On Rewarded Closed.":"On Rewarded Closed.","On Rewarded Closed":"On Rewarded Closed","On Rewarded Rewarded.":"On Rewarded Rewarded.","On Rewarded Rewarded":"On Rewarded Rewarded","On Rewarded Failed.":"On Rewarded Failed.","On Rewarded Failed":"On Rewarded Failed","On Check AdBlock Completed.":"On Check AdBlock Completed.","On Check AdBlock Completed":"On Check AdBlock Completed","Send Message.":"Send Message.","Send Message":"Send Message","Send Message _PARAM1_":"Send Message _PARAM1_","Message":"Message","Send Custom Message.":"Send Custom Message.","Send Custom Message":"Send Custom Message","Send Custom Message _PARAM1_":"Send Custom Message _PARAM1_","Get Server Time.":"Get Server Time.","Get Server Time":"Get Server Time","Server Time.":"Server Time.","Server Time":"Server Time","On Get Server Time Completed.":"On Get Server Time Completed.","On Get Server Time Completed":"On Get Server Time Completed","Has Server Time.":"Has Server Time.","Has Server Time":"Has Server Time","Authorize Player.":"Authorize Player.","Authorize Player":"Authorize Player","Is Player Authorization Supported.":"Is Player Authorization Supported.","Is Player Authorization Supported":"Is Player Authorization Supported","Is Player Authorized.":"Is Player Authorized.","Is Player Authorized":"Is Player Authorized","On Authorize Player Completed.":"On Authorize Player Completed.","On Authorize Player Completed":"On Authorize Player Completed","Does Player Have Name.":"Does Player Have Name.","Does Player Have Name":"Does Player Have Name","Does Player Have Photo.":"Does Player Have Photo.","Does Player Have Photo":"Does Player Have Photo","Does Player Have Photo # _PARAM1_":"Does Player Have Photo # _PARAM1_","Share.":"Share.","Share":"Share","Invite Friends.":"Invite Friends.","Invite Friends":"Invite Friends","Join Community.":"Join Community.","Join Community":"Join Community","Create Post.":"Create Post.","Create Post":"Create Post","Add To Home Screen.":"Add To Home Screen.","Add To Home Screen":"Add To Home Screen","Add To Favorites.":"Add To Favorites.","Add To Favorites":"Add To Favorites","Rate.":"Rate.","Rate":"Rate","Is Share Supported.":"Is Share Supported.","Is Share Supported":"Is Share Supported","On Share Completed.":"On Share Completed.","On Share Completed":"On Share Completed","Is Invite Friends Supported.":"Is Invite Friends Supported.","Is Invite Friends Supported":"Is Invite Friends Supported","On Invite Friends Completed.":"On Invite Friends Completed.","On Invite Friends Completed":"On Invite Friends Completed","Is Join Community Supported.":"Is Join Community Supported.","Is Join Community Supported":"Is Join Community Supported","On Join Community Completed.":"On Join Community Completed.","On Join Community Completed":"On Join Community Completed","Is Create Post Supported.":"Is Create Post Supported.","Is Create Post Supported":"Is Create Post Supported","On Create Post Completed.":"On Create Post Completed.","On Create Post Completed":"On Create Post Completed","Is Add To Home Screen Supported.":"Is Add To Home Screen Supported.","Is Add To Home Screen Supported":"Is Add To Home Screen Supported","On Add To Home Screen Completed.":"On Add To Home Screen Completed.","On Add To Home Screen Completed":"On Add To Home Screen Completed","Is Add To Favorites Supported.":"Is Add To Favorites Supported.","Is Add To Favorites Supported":"Is Add To Favorites Supported","On Add To Favorites Completed.":"On Add To Favorites Completed.","On Add To Favorites Completed":"On Add To Favorites Completed","Is Rate Supported.":"Is Rate Supported.","Is Rate Supported":"Is Rate Supported","On Rate Completed.":"On Rate Completed.","On Rate Completed":"On Rate Completed","Is External Links Allowed.":"Is External Links Allowed.","Is External Links Allowed":"Is External Links Allowed","Leaderboards Set Score.":"Leaderboards Set Score.","Leaderboards Set Score":"Leaderboards Set Score","Leaderboards Set Score - Id: _PARAM1_, Score: _PARAM2_":"Leaderboards Set Score - Id: _PARAM1_, Score: _PARAM2_","Leaderboards Get Entries.":"Leaderboards Get Entries.","Leaderboards Get Entries":"Leaderboards Get Entries","Leaderboards Get Entries - Id: _PARAM1_":"Leaderboards Get Entries - Id: _PARAM1_","Leaderboards Show Native Popup.":"Leaderboards Show Native Popup.","Leaderboards Show Native Popup":"Leaderboards Show Native Popup","Leaderboards Show Native Popup - Id: _PARAM1_":"Leaderboards Show Native Popup - Id: _PARAM1_","Leaderboards Type.":"Leaderboards Type.","Leaderboards Type":"Leaderboards Type","Is Leaderboard Supported":"Is Leaderboard Supported","The leaderboard is of type Not Available.":"The leaderboard is of type Not Available.","The leaderboard is of type Not Available":"The leaderboard is of type Not Available","The leaderboard is of type In Game.":"The leaderboard is of type In Game.","The leaderboard is of type In Game":"The leaderboard is of type In Game","The leaderboard is of type Native.":"The leaderboard is of type Native.","The leaderboard is of type Native":"The leaderboard is of type Native","The leaderboard is of type Native Popup.":"The leaderboard is of type Native Popup.","The leaderboard is of type Native Popup":"The leaderboard is of type Native Popup","On Leaderboards Set Score Completed.":"On Leaderboards Set Score Completed.","On Leaderboards Set Score Completed":"On Leaderboards Set Score Completed","On Leaderboards Get Entries Completed.":"On Leaderboards Get Entries Completed.","On Leaderboards Get Entries Completed":"On Leaderboards Get Entries Completed","On Leaderboards Show Native Popup Completed.":"On Leaderboards Show Native Popup Completed.","On Leaderboards Show Native Popup Completed":"On Leaderboards Show Native Popup Completed","Leaderboard Entries Count.":"Leaderboard Entries Count.","Leaderboard Entries Count":"Leaderboard Entries Count","Leaderboard Entry Id.":"Leaderboard Entry Id.","Leaderboard Entry Id":"Leaderboard Entry Id","Entry Index":"Entry Index","Leaderboard Entry Name.":"Leaderboard Entry Name.","Leaderboard Entry Name":"Leaderboard Entry Name","Leaderboard Entry Photo.":"Leaderboard Entry Photo.","Leaderboard Entry Photo":"Leaderboard Entry Photo","Leaderboard Entry Rank.":"Leaderboard Entry Rank.","Leaderboard Entry Rank":"Leaderboard Entry Rank","Leaderboard Entry Score.":"Leaderboard Entry Score.","Leaderboard Entry Score":"Leaderboard Entry Score","Payments Purchase.":"Payments Purchase.","Payments Purchase":"Payments Purchase","Payments Purchase - Id: _PARAM1_":"Payments Purchase - Id: _PARAM1_","Payments Get Purchases.":"Payments Get Purchases.","Payments Get Purchases":"Payments Get Purchases","Payments Get Catalog.":"Payments Get Catalog.","Payments Get Catalog":"Payments Get Catalog","Payments Consume Purchase.":"Payments Consume Purchase.","Payments Consume Purchase":"Payments Consume Purchase","Payments Consume Purchase - Id: _PARAM1_":"Payments Consume Purchase - Id: _PARAM1_","Is Payments Supported.":"Is Payments Supported.","Is Payments Supported":"Is Payments Supported","On Payments Purchase Completed.":"On Payments Purchase Completed.","On Payments Purchase Completed":"On Payments Purchase Completed","On Payments Get Purchases Completed.":"On Payments Get Purchases Completed.","On Payments Get Purchases Completed":"On Payments Get Purchases Completed","On Payments Get Catalog Completed.":"On Payments Get Catalog Completed.","On Payments Get Catalog Completed":"On Payments Get Catalog Completed","On Payments Consume Purchase Completed.":"On Payments Consume Purchase Completed.","On Payments Consume Purchase Completed":"On Payments Consume Purchase Completed","Payments Last Purchase Properties Count.":"Payments Last Purchase Properties Count.","Payments Last Purchase Properties Count":"Payments Last Purchase Properties Count","Payments Last Purchase Property Name.":"Payments Last Purchase Property Name.","Payments Last Purchase Property Name":"Payments Last Purchase Property Name","Payments Last Purchase Property Value.":"Payments Last Purchase Property Value.","Payments Last Purchase Property Value":"Payments Last Purchase Property Value","Payments Purchases Count.":"Payments Purchases Count.","Payments Purchases Count":"Payments Purchases Count","Payments Purchase Properties Count.":"Payments Purchase Properties Count.","Payments Purchase Properties Count":"Payments Purchase Properties Count","Payments Purchase Property Name.":"Payments Purchase Property Name.","Payments Purchase Property Name":"Payments Purchase Property Name","Purchase Index":"Purchase Index","Payments Catalog Items Count.":"Payments Catalog Items Count.","Payments Catalog Items Count":"Payments Catalog Items Count","Payments Catalog Item Properties Count.":"Payments Catalog Item Properties Count.","Payments Catalog Item Properties Count":"Payments Catalog Item Properties Count","Payments Catalog Item Property Name.":"Payments Catalog Item Property Name.","Payments Catalog Item Property Name":"Payments Catalog Item Property Name","Payments Catalog Item Property Value.":"Payments Catalog Item Property Value.","Payments Catalog Item Property Value":"Payments Catalog Item Property Value","Product Index":"Product Index","Payments First Catalog Item Property Value.":"Payments First Catalog Item Property Value.","Payments First Catalog Item Property Value":"Payments First Catalog Item Property Value","Filter Property":"Filter Property","Filter Property Value":"Filter Property Value","Is Achievements Supported.":"Is Achievements Supported.","Is Achievements Supported":"Is Achievements Supported","Is Achievements Get List Supported.":"Is Achievements Get List Supported.","Is Achievements Get List Supported":"Is Achievements Get List Supported","Is Achievements Native Popup Supported.":"Is Achievements Native Popup Supported.","Is Achievements Native Popup Supported":"Is Achievements Native Popup Supported","On Achievements Unlock Completed.":"On Achievements Unlock Completed.","On Achievements Unlock Completed":"On Achievements Unlock Completed","On Achievements Get List Completed.":"On Achievements Get List Completed.","On Achievements Get List Completed":"On Achievements Get List Completed","On Achievements Show Native Popup Completed.":"On Achievements Show Native Popup Completed.","On Achievements Show Native Popup Completed":"On Achievements Show Native Popup Completed","Achievements Count.":"Achievements Count.","Achievements Count":"Achievements Count","Achievement Properties Count.":"Achievement Properties Count.","Achievement Properties Count":"Achievement Properties Count","Achievement Property Name.":"Achievement Property Name.","Achievement Property Name":"Achievement Property Name","Achievement Property Value.":"Achievement Property Value.","Achievement Property Value":"Achievement Property Value","Achievement Index":"Achievement Index","Achievements Unlock.":"Achievements Unlock.","Achievements Unlock":"Achievements Unlock","Achievements Get List.":"Achievements Get List.","Achievements Get List":"Achievements Get List","Achievements Show Native Popup.":"Achievements Show Native Popup.","Achievements Show Native Popup":"Achievements Show Native Popup","Is Remote Config Supported.":"Is Remote Config Supported.","Is Remote Config Supported":"Is Remote Config Supported","On Remote Config Got Completed.":"On Remote Config Got Completed.","On Remote Config Got Completed":"On Remote Config Got Completed","Has Remote Config Value.":"Has Remote Config Value.","Has Remote Config Value":"Has Remote Config Value","Has _PARAM1_ in Remote Config":"Has _PARAM1_ in Remote Config","Remote Config Value.":"Remote Config Value.","Remote Config Value":"Remote Config Value","Send Remote Config Get Request.":"Send Remote Config Get Request.","Send Remote Config Get Request":"Send Remote Config Get Request","Is Ad Block Detected.":"Is Ad Block Detected.","Is Ad Block Detected":"Is Ad Block Detected","Poki Games SDK":"Poki Games SDK","Poki Games SDK: display ads and manage game lifecycle for Poki hosting.":"Poki Games SDK: display ads and manage game lifecycle for Poki hosting.","Load Poki SDK.":"Load Poki SDK.","Load Poki SDK":"Load Poki SDK","Check if the Poki SDK is ready to be used.":"Check if the Poki SDK is ready to be used.","Poki SDK is ready":"Poki SDK is ready","Inform Poki game finished loading.":"Inform Poki game finished loading.","Game loading finished":"Game loading finished","Inform Poki game finished loading":"Inform Poki game finished loading","Inform Poki gameplay started.":"Inform Poki gameplay started.","Inform Poki gameplay started":"Inform Poki gameplay started","Inform Poki gameplay stopped.":"Inform Poki gameplay stopped.","Inform Poki gameplay stopped":"Inform Poki gameplay stopped","Request commercial break.":"Request commercial break.","Commercial break":"Commercial break","Request commercial break":"Request commercial break","Request rewarded break.":"Request rewarded break.","Rewarded break":"Rewarded break","Request rewarded break":"Request rewarded break","Create a shareable URL from parameters stored in a variable structure.":"Create a shareable URL from parameters stored in a variable structure.","Create shareable URL":"Create shareable URL","Create shareable URL from parameters _PARAM0_":"Create shareable URL from parameters _PARAM0_","Variable structure with URL parameters (example children: id, type)":"Variable structure with URL parameters (example children: id, type)","Get the last shareable URL generated by Create shareable URL.":"Get the last shareable URL generated by Create shareable URL.","Last shareable URL":"Last shareable URL","Read a URL parameter from Poki URL or the current URL.":"Read a URL parameter from Poki URL or the current URL.","Get URL parameter":"Get URL parameter","Parameter name (without the gd prefix)":"Parameter name (without the gd prefix)","Open an external URL via Poki SDK.":"Open an external URL via Poki SDK.","Open external link":"Open external link","Open external link _PARAM0_":"Open external link _PARAM0_","URL to open":"URL to open","Move the Poki Pill on mobile.":"Move the Poki Pill on mobile.","Move Poki Pill":"Move Poki Pill","Move Poki Pill to _PARAM0_ percent from top with _PARAM1_ px offset":"Move Poki Pill to _PARAM0_ percent from top with _PARAM1_ px offset","Top percent (0-50)":"Top percent (0-50)","Additional pixel offset":"Additional pixel offset","Measure an event for analytics.":"Measure an event for analytics.","Measure event":"Measure event","Measure category _PARAM0_ what _PARAM1_ action _PARAM2_":"Measure category _PARAM0_ what _PARAM1_ action _PARAM2_","Category (for example: level, tutorial, drawing)":"Category (for example: level, tutorial, drawing)","What is measured (for example: 1, de_dust, skip-level)":"What is measured (for example: 1, de_dust, skip-level)","Action (for example: start, complete, fail)":"Action (for example: start, complete, fail)","Checks if a commercial break is playing.":"Checks if a commercial break is playing.","Commercial break is playing":"Commercial break is playing","Checks if a rewarded break is playing.":"Checks if a rewarded break is playing.","Rewarded break is playing":"Rewarded break is playing","Checks if a commercial break just finished playing.":"Checks if a commercial break just finished playing.","Commercial break just finished playing":"Commercial break just finished playing","Checks if a rewarded break just finished playing.":"Checks if a rewarded break just finished playing.","Rewarded break just finished playing":"Rewarded break just finished playing","Checks if player should be rewarded after a rewarded break finished playing.":"Checks if player should be rewarded after a rewarded break finished playing.","Should reward player":"Should reward player","Pop-up":"Pop-up","Display pop-ups to alert, ask confirmation, and let user type a response in text box.":"Display pop-ups to alert, ask confirmation, and let user type a response in text box.","The response to a pop-up message is filled.":"The response to a pop-up message is filled.","Existing prompt response":"Existing prompt response","Response from the pop-up prompt is filled":"Response from the pop-up prompt is filled","Return the text response by user to prompt.":"Return the text response by user to prompt.","Response to prompt":"Response to prompt","Open prompt with message : _PARAM1_ with ID: _PARAM2_":"Open prompt with message : _PARAM1_ with ID: _PARAM2_","Displays a prompt in a pop-up that prompts the user for input. This action return the text input or the false boolean if canceled.":"Displays a prompt in a pop-up that prompts the user for input. This action return the text input or the false boolean if canceled.","Prompt":"Prompt","Open a prompt pop-up box with message: _PARAM1_ (placeholder: _PARAM2_)":"Open a prompt pop-up box with message: _PARAM1_ (placeholder: _PARAM2_)","Prompt message":"Prompt message","Input placeholder":"Input placeholder","Ask confirmation of user with a message in a dialog box with an OK button, and a Cancel button.":"Ask confirmation of user with a message in a dialog box with an OK button, and a Cancel button.","Confirm":"Confirm","Open a confirmation pop-up box with message: _PARAM1_":"Open a confirmation pop-up box with message: _PARAM1_","Confirmation message":"Confirmation message","The text to display in the confirm box.":"The text to display in the confirm box.","Check if a confirmation was accepted.":"Check if a confirmation was accepted.","Pop-up message confirmed":"Pop-up message confirmed","Pop-up message is confirmed":"Pop-up message is confirmed","Displays an alert box with a message and an OK button in a pop-up window.":"Displays an alert box with a message and an OK button in a pop-up window.","Alert":"Alert","Open an alert pop-up box with message: _PARAM1_":"Open an alert pop-up box with message: _PARAM1_","Alert message":"Alert message","RTS-like unit selection":"RTS-like unit selection","Select units by clicking on them or dragging a selection box.":"Select units by clicking on them or dragging a selection box.","Allow player to select units by clicking on them or dragging a selection box.":"Allow player to select units by clicking on them or dragging a selection box.","Allow player to select units by clicking on them or dragging a selection box":"Allow player to select units by clicking on them or dragging a selection box","Allow player to select _PARAM1_ with _PARAM7_ mouse button (or touch). Draw a selection box using _PARAM2_ on Layer: _PARAM3_ with Z order: _PARAM4_. Hold _PARAM5_ to add units and _PARAM6_ to remove units":"Allow player to select _PARAM1_ with _PARAM7_ mouse button (or touch). Draw a selection box using _PARAM2_ on Layer: _PARAM3_ with Z order: _PARAM4_. Hold _PARAM5_ to add units and _PARAM6_ to remove units","Units":"Units","Object (or object group) that can be Selected":"Object (or object group) that can be Selected","Selection box":"Selection box","Edit shape painter properties to change the appearance of this selection box":"Edit shape painter properties to change the appearance of this selection box","Layer (of selection box)":"Layer (of selection box)","Must be the same layer as the units being selected":"Must be the same layer as the units being selected","Z order (of selection box)":"Z order (of selection box)","Z order of the selection box":"Z order of the selection box","Additive select key":"Additive select key","Hold this key to add units to selection":"Hold this key to add units to selection","Subtractive select key":"Subtractive select key","Hold this key to remove units from selection":"Hold this key to remove units from selection","Mouse button used to select units":"Mouse button used to select units","Check if the unit is \"Preselected\".":"Check if the unit is \"Preselected\".","Is unit \"Preselected\"":"Is unit \"Preselected\"","_PARAM1_ is \"Preselected\"":"_PARAM1_ is \"Preselected\"","Check if the unit is \"Selected\".":"Check if the unit is \"Selected\".","Is unit \"Selected\"":"Is unit \"Selected\"","_PARAM1_ is \"Selected\"":"_PARAM1_ is \"Selected\"","Set unit as \"Preselected\".":"Set unit as \"Preselected\".","Set unit as \"Preselected\"":"Set unit as \"Preselected\"","Set _PARAM1_ as \"Preselected\": _PARAM2_":"Set _PARAM1_ as \"Preselected\": _PARAM2_","Set unit as \"Selected\".":"Set unit as \"Selected\".","Set unit as \"Selected\"":"Set unit as \"Selected\"","Set _PARAM1_ as \"Selected\": _PARAM2_":"Set _PARAM1_ as \"Selected\": _PARAM2_","Assign a unique ID to each \"Selected\" unit. This should be ran every time there is a change in the number of \"Selected\" units.":"Assign a unique ID to each \"Selected\" unit. This should be ran every time there is a change in the number of \"Selected\" units.","Assign a unique ID to each \"Selected\" unit":"Assign a unique ID to each \"Selected\" unit","Assign a unique ID to _PARAM1_ that are \"Selected\"":"Assign a unique ID to _PARAM1_ that are \"Selected\"","Provides the total number of _PARAM1_ that are currently \"Selected\".":"Provides the total number of _PARAM1_ that are currently \"Selected\".","Total number of \"Selected\" units":"Total number of \"Selected\" units","Unit":"Unit","Enable control groups using default controls.":"Enable control groups using default controls.","Enable control groups using default controls":"Enable control groups using default controls","Assign _PARAM1_ to control groups using default controls (Ctrl + number)":"Assign _PARAM1_ to control groups using default controls (Ctrl + number)","Object (or object group) that will be assigned to a control group":"Object (or object group) that will be assigned to a control group","Control group this unit is assigned to.":"Control group this unit is assigned to.","Control group this unit is assigned to":"Control group this unit is assigned to","Check if a unit is assigned to a control group.":"Check if a unit is assigned to a control group.","Check if a unit is assigned to a control group":"Check if a unit is assigned to a control group","_PARAM1_ is assigned to control group _PARAM2_":"_PARAM1_ is assigned to control group _PARAM2_","Control group ID":"Control group ID","Assign unit to a control group.":"Assign unit to a control group.","Assign unit to a control group":"Assign unit to a control group","Assign _PARAM1_ to control group _PARAM2_":"Assign _PARAM1_ to control group _PARAM2_","Unit ID of a selected unit.":"Unit ID of a selected unit.","Unit ID of a selected unit":"Unit ID of a selected unit","3D raycast":"3D raycast","Find 3D objects that cross a line.":"Find 3D objects that cross a line.","Sends a ray from the given source position and angle, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the given source position and angle, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast":"Raycast","Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ toward a rotation of _PARAM5_°, an elevation of _PARAM6_° and max distance of _PARAM7_ against _PARAM1_":"Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ toward a rotation of _PARAM5_°, an elevation of _PARAM6_° and max distance of _PARAM7_ against _PARAM1_","Objects to test against the ray":"Objects to test against the ray","Ray source X position":"Ray source X position","Ray source Y position":"Ray source Y position","Ray source Z position":"Ray source Z position","Rotation angle (in degrees)":"Rotation angle (in degrees)","Elevation angle (in degrees)":"Elevation angle (in degrees)","Ray maximum distance (in pixels)":"Ray maximum distance (in pixels)","Sends a ray from the given source position to the final point, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the given source position to the final point, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast to a position":"Raycast to a position","Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ to _PARAM5_; _PARAM6_; _PARAM7_ against _PARAM1_":"Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ to _PARAM5_; _PARAM6_; _PARAM7_ against _PARAM1_","Ray target X position":"Ray target X position","Ray target Y position":"Ray target Y position","Ray target Z position":"Ray target Z position","Sends a ray from the center of the camera, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the center of the camera, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast from camera center":"Raycast from camera center","Cast a ray from the camera center to a maximum distance of _PARAM2_ against _PARAM1_":"Cast a ray from the camera center to a maximum distance of _PARAM2_ against _PARAM1_","Sends a ray from the given source point on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the given source point on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast from a camera point":"Raycast from a camera point","Cast a ray from the camera point _PARAM2_; _PARAM3_ to a maximum distance of _PARAM4_ against _PARAM1_":"Cast a ray from the camera point _PARAM2_; _PARAM3_ to a maximum distance of _PARAM4_ against _PARAM1_","X position on the screen (from 0 to 1)":"X position on the screen (from 0 to 1)","Y position on the screen (from 0 to 1)":"Y position on the screen (from 0 to 1)","Sends a ray from the cursor on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.":"Sends a ray from the cursor on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.","Raycast from cursor":"Raycast from cursor","Cast a ray from the cursor on 2D layer: _PARAM2_ to a maximum distance of _PARAM3_ against _PARAM1_":"Cast a ray from the cursor on 2D layer: _PARAM2_ to a maximum distance of _PARAM3_ against _PARAM1_","2D layer":"2D layer","the last recast intersection distance.":"the last recast intersection distance.","Last recast distance":"Last recast distance","the last recast intersection distance":"the last recast intersection distance","Return the last recast intersection position on X axis.":"Return the last recast intersection position on X axis.","Last recast X intersection":"Last recast X intersection","Return the last recast intersection position on Y axis.":"Return the last recast intersection position on Y axis.","Last recast Y intersection":"Last recast Y intersection","Return the last recast intersection position on Z axis.":"Return the last recast intersection position on Z axis.","Last recast Z intersection":"Last recast Z intersection","Return the last recast intersection normal on X axis.":"Return the last recast intersection normal on X axis.","Last recast X normal":"Last recast X normal","Return the last recast intersection normal on Z axis.":"Return the last recast intersection normal on Z axis.","Last recast Z normal":"Last recast Z normal","Read pixels":"Read pixels","Read the values of pixels on the screen.":"Read the values of pixels on the screen.","Return the alpha component of the pixel at the specified position.":"Return the alpha component of the pixel at the specified position.","Read pixel alpha":"Read pixel alpha","Record":"Record","Record gameplay as video clips for download.":"Record gameplay as video clips for download.","Start the recording.":"Start the recording.","Start recording":"Start recording","End the recording.":"End the recording.","Stop recording":"Stop recording","Stop the recording":"Stop the recording","Pause recording.":"Pause recording.","Pause recording":"Pause recording","Resume recording.":"Resume recording.","Resume recording":"Resume recording","Save recording to the file system on destop, or to the downloads folder for web. Always ask for permission to save a file.":"Save recording to the file system on destop, or to the downloads folder for web. Always ask for permission to save a file.","Save recording":"Save recording","Save recording to _PARAM1_ as _PARAM2_":"Save recording to _PARAM1_ as _PARAM2_","File location, set using a FileSystem path e.g. FileSystem::DesktopPath() (only used for desktop saves)":"File location, set using a FileSystem path e.g. FileSystem::DesktopPath() (only used for desktop saves)","Name to save file as":"Name to save file as","Returns the current status of the reccorder: inactive (not recording), recording, or paused.":"Returns the current status of the reccorder: inactive (not recording), recording, or paused.","Get current state":"Get current state","Get the current framerate.":"Get the current framerate.","Get frame rate":"Get frame rate","Set frame rate to _PARAM1_":"Set frame rate to _PARAM1_","Set the frame rate, must be set before starting a recording. Defaults to the min FPS set in the game properties.":"Set the frame rate, must be set before starting a recording. Defaults to the min FPS set in the game properties.","Set frame rate":"Set frame rate","Recommended fps for video: 25, 30, 60, for GIFs use 5, 10, 20":"Recommended fps for video: 25, 30, 60, for GIFs use 5, 10, 20","Returns the current video bit rate per second.":"Returns the current video bit rate per second.","Get video bit rate per second":"Get video bit rate per second","Set the video bit rate, must be set before starting a recording. Defaults to 2500000.":"Set the video bit rate, must be set before starting a recording. Defaults to 2500000.","Set video bit rate":"Set video bit rate","Set the video bit rate to _PARAM1_":"Set the video bit rate to _PARAM1_","video bits per second":"video bits per second","Returns the audio bit rate per second. Defaults to 128000 if not set.":"Returns the audio bit rate per second. Defaults to 128000 if not set.","Set audio bit rate":"Set audio bit rate","Set the audio bit rate to _PARAM1_":"Set the audio bit rate to _PARAM1_","audio bits per second":"audio bits per second","Returns the audio bit rate per second.":"Returns the audio bit rate per second.","Get audio bit rate per second":"Get audio bit rate per second","Set the file format, if a selected file format is unsupported on the users platform a supported one will be picked by deafult.":"Set the file format, if a selected file format is unsupported on the users platform a supported one will be picked by deafult.","Set file format":"Set file format","Set file format to _PARAM1_":"Set file format to _PARAM1_","Recording format":"Recording format","Returns the current video format.":"Returns the current video format.","Get codec":"Get codec","Set the video codec, if a selected codec is unsupported on the users platform a supported one will be picked by deafult.":"Set the video codec, if a selected codec is unsupported on the users platform a supported one will be picked by deafult.","Set codec":"Set codec","Set video codec _PARAM1_":"Set video codec _PARAM1_","codec":"codec","Returns the current video codec.":"Returns the current video codec.","Get video codec":"Get video codec","When an error occurs this method will return what type of error it is.":"When an error occurs this method will return what type of error it is.","Error type":"Error type","Check if an error has occurred.":"Check if an error has occurred.","When an errror has occurred":"When an errror has occurred","When an error has occurred":"When an error has occurred","Check if a recording has just been paused.":"Check if a recording has just been paused.","When recording has paused":"When recording has paused","Check if a recording has just been resumed.":"Check if a recording has just been resumed.","When recording has resumed":"When recording has resumed","Check if recording has just started.":"Check if recording has just started.","When recording has started":"When recording has started","Check if recording has just stopped.":"Check if recording has just stopped.","When recording has stopped":"When recording has stopped","Check if recording has just been saved.":"Check if recording has just been saved.","When recording has saved":"When recording has saved","When recording has been saved":"When recording has been saved","Check if the specified format is available on the users device. To avoid unsupported formats pick commons ones like MP4 or WebM.":"Check if the specified format is available on the users device. To avoid unsupported formats pick commons ones like MP4 or WebM.","Is format supported on user device":"Is format supported on user device","Check if _PARAM1_ is available on the users device":"Check if _PARAM1_ is available on the users device","Select a common format for the best results":"Select a common format for the best results","Get the current GIF quality.":"Get the current GIF quality.","Set the GIF quality, must be set before starting a recording. Defaults to 10.":"Set the GIF quality, must be set before starting a recording. Defaults to 10.","Set GIF quality":"Set GIF quality","Set the GIF quality to _PARAM1_":"Set the GIF quality to _PARAM1_","Returns whether or not dithering is enabled for GIFs.":"Returns whether or not dithering is enabled for GIFs.","Enable dithering in GIF, must be set before starting a recording. Defaults to false.":"Enable dithering in GIF, must be set before starting a recording. Defaults to false.","Set GIF Dithering":"Set GIF Dithering","Enable dithering _PARAM1_":"Enable dithering _PARAM1_","Dithering":"Dithering","Rectangular movement":"Rectangular movement","Move objects in a rectangular pattern.":"Move objects in a rectangular pattern.","Distance from an object to the closest edge of a second object.":"Distance from an object to the closest edge of a second object.","Distance from an object to the closest edge of a second object":"Distance from an object to the closest edge of a second object","Distance from _PARAM1_ to the closest edge of _PARAM2_":"Distance from _PARAM1_ to the closest edge of _PARAM2_","Moving object":"Moving object","Update rectangular movement to follow the border of an object. Run once, or every time the center object moves.":"Update rectangular movement to follow the border of an object. Run once, or every time the center object moves.","Update rectangular movement to follow the border of an object":"Update rectangular movement to follow the border of an object","Update rectangular movement of _PARAM1_ to follow the border of _PARAM3_. Position on border: _PARAM4_":"Update rectangular movement of _PARAM1_ to follow the border of _PARAM3_. Position on border: _PARAM4_","Rectangle Movement (required)":"Rectangle Movement (required)","Position on border":"Position on border","Move to the nearest corner of the center object.":"Move to the nearest corner of the center object.","Move to the nearest corner of the center object":"Move to the nearest corner of the center object","Move _PARAM1_ to the nearest corner of _PARAM3_":"Move _PARAM1_ to the nearest corner of _PARAM3_","Dimension":"Dimension","Clockwise":"Clockwise","Horizontal edge duration":"Horizontal edge duration","Vertical edge duration":"Vertical edge duration","Initial position":"Initial position","Teleport the object to a corner of the movement rectangle.":"Teleport the object to a corner of the movement rectangle.","Teleport at a corner":"Teleport at a corner","Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop":"Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop","Corner":"Corner","Return the perimeter of the movement rectangle.":"Return the perimeter of the movement rectangle.","Perimeter":"Perimeter","Return the time the object takes to go through the whole rectangle (in seconds).":"Return the time the object takes to go through the whole rectangle (in seconds).","Return the time the object takes to go through a horizontal edge (in seconds).":"Return the time the object takes to go through a horizontal edge (in seconds).","Return the time the object takes to go through a vertical edge (in seconds).":"Return the time the object takes to go through a vertical edge (in seconds).","Return the rectangle width.":"Return the rectangle width.","Return the rectangle height.":"Return the rectangle height.","Return the left bound of the movement.":"Return the left bound of the movement.","Return the top bound of the movement.":"Return the top bound of the movement.","Return the right bound of the movement.":"Return the right bound of the movement.","Return the bottom bound of the movement.":"Return the bottom bound of the movement.","Change the left bound of the rectangular movement.":"Change the left bound of the rectangular movement.","Change the movement left bound of _PARAM0_ to _PARAM2_":"Change the movement left bound of _PARAM0_ to _PARAM2_","Change the top bound of the rectangular movement.":"Change the top bound of the rectangular movement.","Change the movement top bound of _PARAM0_ to _PARAM2_":"Change the movement top bound of _PARAM0_ to _PARAM2_","Change the right bound of the rectangular movement.":"Change the right bound of the rectangular movement.","Change the movement right bound of _PARAM0_ to _PARAM2_":"Change the movement right bound of _PARAM0_ to _PARAM2_","Change the bottom bound of the rectangular movement.":"Change the bottom bound of the rectangular movement.","Change the movement bottom bound of _PARAM0_ to _PARAM2_":"Change the movement bottom bound of _PARAM0_ to _PARAM2_","Change the time the object takes to go through a horizontal edge (in seconds).":"Change the time the object takes to go through a horizontal edge (in seconds).","Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_":"Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_","Change the time the object takes to go through a vertical edge (in seconds).":"Change the time the object takes to go through a vertical edge (in seconds).","Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_":"Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_","Change the direction to clockwise or counter-clockwise.":"Change the direction to clockwise or counter-clockwise.","Use clockwise direction for _PARAM0_: _PARAM2_":"Use clockwise direction for _PARAM0_: _PARAM2_","Change the easing function of the movement.":"Change the easing function of the movement.","Change the easing of _PARAM0_ to _PARAM2_":"Change the easing of _PARAM0_ to _PARAM2_","Toggle the direction to clockwise or counter-clockwise.":"Toggle the direction to clockwise or counter-clockwise.","Toggle direction":"Toggle direction","Toogle the direction of _PARAM0_":"Toogle the direction of _PARAM0_","Check if the object is moving clockwise.":"Check if the object is moving clockwise.","Is moving clockwise":"Is moving clockwise","_PARAM0_ is moving clockwise":"_PARAM0_ is moving clockwise","Check if the object is moving to the left.":"Check if the object is moving to the left.","Is moving left":"Is moving left","_PARAM0_ is moving to the left":"_PARAM0_ is moving to the left","Check if the object is moving up.":"Check if the object is moving up.","Is moving up":"Is moving up","_PARAM0_ is moving up":"_PARAM0_ is moving up","Object is moving to the right.":"Object is moving to the right.","Is moving right":"Is moving right","_PARAM0_ is moving to the right":"_PARAM0_ is moving to the right","Check if the object is moving down.":"Check if the object is moving down.","Is moving down":"Is moving down","_PARAM0_ is moving down":"_PARAM0_ is moving down","Object is on the left side of the rectangle.":"Object is on the left side of the rectangle.","Is on left":"Is on left","_PARAM0_ is on the left side":"_PARAM0_ is on the left side","Object is on the top side of the rectangle.":"Object is on the top side of the rectangle.","Is on top":"Is on top","_PARAM0_ is on the top side":"_PARAM0_ is on the top side","Object is on the right side of the rectangle.":"Object is on the right side of the rectangle.","Is on right":"Is on right","_PARAM0_ is on the right side":"_PARAM0_ is on the right side","Object is on the bottom side of the rectangle.":"Object is on the bottom side of the rectangle.","Is on bottom":"Is on bottom","_PARAM0_ is on the bottom side":"_PARAM0_ is on the bottom side","Return the duration between the top-left vertex and the top-right one.":"Return the duration between the top-left vertex and the top-right one.","Duration to top right":"Duration to top right","Return the duration between the top-left vertex and the bottom-right one.":"Return the duration between the top-left vertex and the bottom-right one.","Duration to bottom right":"Duration to bottom right","Return the duration between the top-left vertex and the bottom-left one.":"Return the duration between the top-left vertex and the bottom-left one.","Duration to bottom left":"Duration to bottom left","Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).":"Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).","Progress on edge":"Progress on edge","Return the X position of the current edge origin.":"Return the X position of the current edge origin.","Edge origin X":"Edge origin X","Return the Y position of the current edge origin.":"Return the Y position of the current edge origin.","Edge origin Y":"Edge origin Y","Return the X position of the current edge target.":"Return the X position of the current edge target.","Edge target X":"Edge target X","Return the Y position of the current edge target.":"Return the Y position of the current edge target.","Edge target Y":"Edge target Y","Return the time from the top-left vertex.":"Return the time from the top-left vertex.","Current time":"Current time","Return the covered length from the top-left vertex or the bottom-right one.":"Return the covered length from the top-left vertex or the bottom-right one.","Half Current length":"Half Current length","Return the displacement on the X axis from the top-left vertex.":"Return the displacement on the X axis from the top-left vertex.","Return the displacement on the Y axis from the top-left vertex.":"Return the displacement on the Y axis from the top-left vertex.","Rectangular flood fill":"Rectangular flood fill","Create objects as a grid to cover a rectangular area or an other object.":"Create objects as a grid to cover a rectangular area or an other object.","Create fill objects that cover the rectangular area of target objects.":"Create fill objects that cover the rectangular area of target objects.","Create objects to flood fill other objects":"Create objects to flood fill other objects","Create _PARAM2_ to cover _PARAM1_ with _PARAM3_ pixels between columns and _PARAM4_ pixels between rows on layer: _PARAM5_ at Z-order: _PARAM6_":"Create _PARAM2_ to cover _PARAM1_ with _PARAM3_ pixels between columns and _PARAM4_ pixels between rows on layer: _PARAM5_ at Z-order: _PARAM6_","Rectangular area that will be covered by fill objects":"Rectangular area that will be covered by fill objects","Fill object":"Fill object","Object that is created to cover the rectangular area of target objects":"Object that is created to cover the rectangular area of target objects","Space between columns (pixels)":"Space between columns (pixels)","Space between rows (pixels)":"Space between rows (pixels)","Z order":"Z order","Create multiple copies of an object.":"Create multiple copies of an object.","Create objects to flood fill a rectanglular area":"Create objects to flood fill a rectanglular area","Create _PARAM2_ columns and _PARAM3_ rows of _PARAM1_ with top-left corner at _PARAM4_ ; _PARAM5_ and _PARAM6_ pixels between columns and _PARAM7_ pixels between rows on layer: _PARAM8_ at Z-order: _PARAM9_":"Create _PARAM2_ columns and _PARAM3_ rows of _PARAM1_ with top-left corner at _PARAM4_ ; _PARAM5_ and _PARAM6_ pixels between columns and _PARAM7_ pixels between rows on layer: _PARAM8_ at Z-order: _PARAM9_","Number of columns (default: 1)":"Number of columns (default: 1)","Number of rows (default: 1)":"Number of rows (default: 1)","Top-left starting position (X) (default: 0)":"Top-left starting position (X) (default: 0)","Top-left starting position (Y) (default: 0)":"Top-left starting position (Y) (default: 0)","Amount of space between columns (default: 0)":"Amount of space between columns (default: 0)","Amount of space between rows (default: 0)":"Amount of space between rows (default: 0)","Regular Expressions":"Regular Expressions","Manipulates string with regular expressions.":"Manipulates string with regular expressions.","Checks if a string matches a regex pattern.":"Checks if a string matches a regex pattern.","String matches regex pattern":"String matches regex pattern","_PARAM3_ matches pattern _PARAM1_ (flags: _PARAM2_)":"_PARAM3_ matches pattern _PARAM1_ (flags: _PARAM2_)","The pattern to check for":"The pattern to check for","RegEx flags":"RegEx flags","The string to check for a pattern":"The string to check for a pattern","Split a string by each part of it that matches a regex pattern and stores each part into an array.":"Split a string by each part of it that matches a regex pattern and stores each part into an array.","Split a string into an array":"Split a string into an array","Split string _PARAM3_ into array _PARAM4_ by pattern _PARAM1_ (flags: _PARAM2_)":"Split string _PARAM3_ into array _PARAM4_ by pattern _PARAM1_ (flags: _PARAM2_)","The pattern to split by":"The pattern to split by","The string to split by the pattern":"The string to split by the pattern","The name of the variable to store the result in":"The name of the variable to store the result in","Builds an array containing all matches for a regex pattern.":"Builds an array containing all matches for a regex pattern.","Find all matches for a regex pattern":"Find all matches for a regex pattern","Store all matches of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"Store all matches of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)","Pattern":"Pattern","String":"String","Builds an array containing the first match for a regex pattern followed by the regex groups.":"Builds an array containing the first match for a regex pattern followed by the regex groups.","Find first match with groups for a regex pattern":"Find first match with groups for a regex pattern","Store first match and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"Store first match and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)","Flags":"Flags","Variable name":"Variable name","Builds an array containing for each regex pattern match an array with the match followed by its regex groups.":"Builds an array containing for each regex pattern match an array with the match followed by its regex groups.","Find all matches with their groups for a regex pattern":"Find all matches with their groups for a regex pattern","Store all matches and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"Store all matches and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)","Replaces a part of a string that matches a regex pattern with another string.":"Replaces a part of a string that matches a regex pattern with another string.","Replace pattern matches with a string":"Replace pattern matches with a string","Execute _PARAM1_ with the following _PARAM2_ for a match in _PARAM3_, and store the result in _PARAM4_":"Execute _PARAM1_ with the following _PARAM2_ for a match in _PARAM3_, and store the result in _PARAM4_","The string to search for pattern matches in":"The string to search for pattern matches in","The string to replace the matching patterns with":"The string to replace the matching patterns with","Finds a regex pattern in a string, and returns the index of the position of the match, or -1 if it doesn't match the pattern.":"Finds a regex pattern in a string, and returns the index of the position of the match, or -1 if it doesn't match the pattern.","Find a pattern":"Find a pattern","Sprite Snapshot":"Sprite Snapshot","Capture objects, layers, or scene areas as images into sprite textures.":"Capture objects, layers, or scene areas as images into sprite textures.","Renders an object and puts the rendered image into a sprite object.":"Renders an object and puts the rendered image into a sprite object.","Render an object into a sprite":"Render an object into a sprite","Render _PARAM1_ into sprite _PARAM2_":"Render _PARAM1_ into sprite _PARAM2_","The object to render":"The object to render","The sprite to render to":"The sprite to render to","Renders a layer and puts the rendered image into a sprite object.":"Renders a layer and puts the rendered image into a sprite object.","Render a layer into a sprite":"Render a layer into a sprite","Render layer _PARAM1_ into sprite _PARAM2_":"Render layer _PARAM1_ into sprite _PARAM2_","The layer to render":"The layer to render","Renders a scene and puts the rendered image into a sprite object.":"Renders a scene and puts the rendered image into a sprite object.","Render a scene into a sprite":"Render a scene into a sprite","Render the current scene into sprite _PARAM1_":"Render the current scene into sprite _PARAM1_","Renders a defined area of a scene and puts the rendered image into a sprite object.":"Renders a defined area of a scene and puts the rendered image into a sprite object.","Render an area of a scene into a sprite":"Render an area of a scene into a sprite","Render the area of a current scene into Sprite: _PARAM1_, from OriginX: _PARAM2_, OriginY: _PARAM3_, with Width: _PARAM4_, Height: _PARAM5_":"Render the area of a current scene into Sprite: _PARAM1_, from OriginX: _PARAM2_, OriginY: _PARAM3_, with Width: _PARAM4_, Height: _PARAM5_","Origin X position of the render area":"Origin X position of the render area","Origin Y Position of the render area":"Origin Y Position of the render area","Width of the are to render":"Width of the are to render","Height of the area to render":"Height of the area to render","Repeat every X seconds":"Repeat every X seconds","Trigger an action repeatedly at a configurable time interval in seconds.":"Trigger an action repeatedly at a configurable time interval in seconds.","Triggers every X seconds.":"Triggers every X seconds.","Repeat with a scene timer":"Repeat with a scene timer","Repeat every _PARAM2_ seconds using timer _PARAM1_":"Repeat every _PARAM2_ seconds using timer _PARAM1_","Timer name used to loop":"Timer name used to loop","Duration in seconds between each repetition":"Duration in seconds between each repetition","the number of times the timer has repeated.":"the number of times the timer has repeated.","Repetition number of a scene timer":"Repetition number of a scene timer","Repetition number of timer _PARAM1_":"Repetition number of timer _PARAM1_","Triggers every X seconds X amount of times.":"Triggers every X seconds X amount of times.","Repeat with a scene timer X times":"Repeat with a scene timer X times","Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_":"Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_","The limit of loops":"The limit of loops","Maximum nuber of repetition (-1 to repeat forever).":"Maximum nuber of repetition (-1 to repeat forever).","Reset repetition count of a scene timer.":"Reset repetition count of a scene timer.","Reset repetition count of a scene timer":"Reset repetition count of a scene timer","Reset repetition count for timer _PARAM1_":"Reset repetition count for timer _PARAM1_","Allows to repeat an object timer every X seconds.":"Allows to repeat an object timer every X seconds.","The name of the timer to repeat":"The name of the timer to repeat","The time between each trigger (in seconds)":"The time between each trigger (in seconds)","How many times should the timer trigger? -1 for forever.":"How many times should the timer trigger? -1 for forever.","An internal counter":"An internal counter","Repeat with an object timer":"Repeat with an object timer","Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_":"Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_","Repetition number of an object timer":"Repetition number of an object timer","Repetition number of timer _PARAM2_":"Repetition number of timer _PARAM2_","Repeat with an object timer X times":"Repeat with an object timer X times","Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_":"Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_","Reset repetition count of an object timer.":"Reset repetition count of an object timer.","Reset repetition count of an object timer":"Reset repetition count of an object timer","Reset repetition count for timer _PARAM2_ of _PARAM0_":"Reset repetition count for timer _PARAM2_ of _PARAM0_","Triggers every X seconds, where X is defined in the behavior properties.":"Triggers every X seconds, where X is defined in the behavior properties.","Repeat every X seconds (deprecated)":"Repeat every X seconds (deprecated)","Recurring timer _PARAM1_ of _PARAM0_ has triggered":"Recurring timer _PARAM1_ of _PARAM0_ has triggered","Pauses a recurring timer.":"Pauses a recurring timer.","Pause a recurring timer (deprecated)":"Pause a recurring timer (deprecated)","Pause recurring timer _PARAM1_ of _PARAM0_":"Pause recurring timer _PARAM1_ of _PARAM0_","Resumes a paused recurring timer.":"Resumes a paused recurring timer.","Resume a recurring timer (deprecated)":"Resume a recurring timer (deprecated)","Resume recurring timer _PARAM1_ of _PARAM0_":"Resume recurring timer _PARAM1_ of _PARAM0_","Allows to trigger the recurring timer X times again.":"Allows to trigger the recurring timer X times again.","Reset the limit (deprecated)":"Reset the limit (deprecated)","Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again":"Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again","Rolling counter":"Rolling counter","Smoothly change a counter value in a text object.":"Smoothly change a counter value in a text object.","Smoothly changes a counter value in a text object.":"Smoothly changes a counter value in a text object.","Animation duration":"Animation duration","Increment":"Increment","the value of the counter.":"the value of the counter.","Counter value":"Counter value","the counter value":"the counter value","Directly display the counter value without playing the animation.":"Directly display the counter value without playing the animation.","Jump to the counter animation end":"Jump to the counter animation end","Jump to the counter animation end of _PARAM0_":"Jump to the counter animation end of _PARAM0_","Room-based camera movement":"Room-based camera movement","Move/zoom camera to frame the room object containing the player.":"Move/zoom camera to frame the room object containing the player.","Move and zoom camera to the room object that contains the trigger object (usually the player).":"Move and zoom camera to the room object that contains the trigger object (usually the player).","Move and zoom camera to the room object that contains the trigger object (player)":"Move and zoom camera to the room object that contains the trigger object (player)","Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)":"Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)","Room object":"Room object","Room objects are used to mark areas that should be seen by the camera.":"Room objects are used to mark areas that should be seen by the camera.","Trigger object (player)":"Trigger object (player)","When the Trigger Object touches a new Room Object, the camera will move to the new room":"When the Trigger Object touches a new Room Object, the camera will move to the new room","Lerp speed":"Lerp speed","Range: 0 to 1":"Range: 0 to 1","Maximum zoom":"Maximum zoom","Minimum zoom":"Minimum zoom","Outside buffer (pixels)":"Outside buffer (pixels)","Minimum extra space displayed around each side the room":"Minimum extra space displayed around each side the room","Check if trigger object (usually the player) has entered a new room on this frame.":"Check if trigger object (usually the player) has entered a new room on this frame.","Check if trigger object (player) has entered a new room":"Check if trigger object (player) has entered a new room","_PARAM1_ has just entered a new room":"_PARAM1_ has just entered a new room","Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).":"Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).","Check if camera is zooming":"Check if camera is zooming","Camera is zooming":"Camera is zooming","Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).":"Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).","Check if camera is moving":"Check if camera is moving","Camera is moving":"Camera is moving","Animated score counter":"Animated score counter","Animated score counter with an icon.":"Animated score counter with an icon.","Shake objects with translation, rotation and scale.":"Shake objects with translation, rotation and scale.","Shake object (position, angle, scale)":"Shake object (position, angle, scale)","Shake an object, using one or more ways to shake (position, angle, scale). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"Shake an object, using one or more ways to shake (position, angle, scale). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_":"Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_","Duration of shake (in seconds) (Default: 0.5)":"Duration of shake (in seconds) (Default: 0.5)","Amplitude of postion shake in X direction (in pixels) (For example: 5)":"Amplitude of postion shake in X direction (in pixels) (For example: 5)","Amplitude of position shake in Y direction (in pixels) (For example: 5)":"Amplitude of position shake in Y direction (in pixels) (For example: 5)","Use a negative number to make the single-shake move in the opposite direction.":"Use a negative number to make the single-shake move in the opposite direction.","Amplitude of angle rotation shake (in degrees) (For example: 5)":"Amplitude of angle rotation shake (in degrees) (For example: 5)","Amplitude of scale shake (in percent change) (For example: 5)":"Amplitude of scale shake (in percent change) (For example: 5)","Amount of time between shakes (in seconds) (Default: 0.08)":"Amount of time between shakes (in seconds) (Default: 0.08)","For a single-shake effect, set it to the same value as \"Duration\".":"For a single-shake effect, set it to the same value as \"Duration\".","Stop shaking an object.":"Stop shaking an object.","Stop shaking an object":"Stop shaking an object","Stop shaking _PARAM0_":"Stop shaking _PARAM0_","Check if an object is shaking.":"Check if an object is shaking.","Check if an object is shaking":"Check if an object is shaking","_PARAM0_ is shaking":"_PARAM0_ is shaking","Default score":"Default score","Increasing score sound":"Increasing score sound","Sound":"Sound","Min baseline pitch":"Min baseline pitch","Max baseline pitch":"Max baseline pitch","Pitch factor":"Pitch factor","Pitch reset timeout":"Pitch reset timeout","Current pitch":"Current pitch","the score of the object.":"the score of the object.","Reset the pitch to the baseline value.":"Reset the pitch to the baseline value.","Reset pitch":"Reset pitch","Reset the pitch of _PARAM0_":"Reset the pitch of _PARAM0_","Screen wrap":"Screen wrap","Teleport objects to opposite screen edge when exiting viewport.":"Teleport objects to opposite screen edge when exiting viewport.","Teleport the object when leaving one side of the screen so that it immediately reappears on the opposite side, maintaining speed and trajectory.":"Teleport the object when leaving one side of the screen so that it immediately reappears on the opposite side, maintaining speed and trajectory.","Screen Wrap":"Screen Wrap","Horizontal wrapping":"Horizontal wrapping","Vertical wrapping":"Vertical wrapping","Top border of wrapped area (Y)":"Top border of wrapped area (Y)","Left border of wrapped area (X)":"Left border of wrapped area (X)","Right border of wrapped area (X)":"Right border of wrapped area (X)","If blank, the value will be the scene width.":"If blank, the value will be the scene width.","Bottom border of wrapped area (Y)":"Bottom border of wrapped area (Y)","If blank, the value will be scene height.":"If blank, the value will be scene height.","Number of pixels past the center where the object teleports and appears":"Number of pixels past the center where the object teleports and appears","Check if the object is wrapping on the left and right borders.":"Check if the object is wrapping on the left and right borders.","Is horizontal wrapping":"Is horizontal wrapping","_PARAM0_ is horizontal wrapping":"_PARAM0_ is horizontal wrapping","Check if the object is wrapping on the top and bottom borders.":"Check if the object is wrapping on the top and bottom borders.","Is vertical wrapping":"Is vertical wrapping","_PARAM0_ is vertical wrapping":"_PARAM0_ is vertical wrapping","Enable wrapping on the left and right borders.":"Enable wrapping on the left and right borders.","Enable horizontal wrapping":"Enable horizontal wrapping","Enable _PARAM0_ horizontal wrapping: _PARAM2_":"Enable _PARAM0_ horizontal wrapping: _PARAM2_","Enable wrapping on the top and bottom borders.":"Enable wrapping on the top and bottom borders.","Enable vertical wrapping":"Enable vertical wrapping","Enable _PARAM0_ vertical wrapping: _PARAM2_":"Enable _PARAM0_ vertical wrapping: _PARAM2_","Top border (Y position).":"Top border (Y position).","Top border":"Top border","Left border (X position).":"Left border (X position).","Left border":"Left border","Right border (X position).":"Right border (X position).","Right border":"Right border","Bottom border (Y position).":"Bottom border (Y position).","Bottom border":"Bottom border","Number of pixels past the center where the object teleports and appears.":"Number of pixels past the center where the object teleports and appears.","Trigger offset":"Trigger offset","Set top border (Y position).":"Set top border (Y position).","Set top border":"Set top border","Set _PARAM0_ top border to _PARAM2_":"Set _PARAM0_ top border to _PARAM2_","Top border value":"Top border value","Set left border (X position).":"Set left border (X position).","Set left border":"Set left border","Set _PARAM0_ left border to _PARAM2_":"Set _PARAM0_ left border to _PARAM2_","Left border value":"Left border value","Set bottom border (Y position).":"Set bottom border (Y position).","Set bottom border":"Set bottom border","Set _PARAM0_ bottom border to _PARAM2_":"Set _PARAM0_ bottom border to _PARAM2_","Bottom border value":"Bottom border value","Set right border (X position).":"Set right border (X position).","Set right border":"Set right border","Set _PARAM0_ right border to _PARAM2_":"Set _PARAM0_ right border to _PARAM2_","Right border value":"Right border value","Set trigger offset (pixels).":"Set trigger offset (pixels).","Set trigger offset":"Set trigger offset","Set _PARAM0_ trigger offset to _PARAM2_ pixels":"Set _PARAM0_ trigger offset to _PARAM2_ pixels","SetScreen Offset Leaving Value":"SetScreen Offset Leaving Value","Screen Wrap (physics objects)":"Screen Wrap (physics objects)","Angular Velocity":"Angular Velocity","Linear Velocity X":"Linear Velocity X","Linear Velocity Y":"Linear Velocity Y","Save current velocity values.":"Save current velocity values.","Save current velocity values":"Save current velocity values","Save current velocity values of _PARAM0_":"Save current velocity values of _PARAM0_","Apply saved velocity values.":"Apply saved velocity values.","Apply saved velocity values":"Apply saved velocity values","Apply saved velocity values of _PARAM0_":"Apply saved velocity values of _PARAM0_","Animate Shadow Clones":"Animate Shadow Clones","Create fading shadow clone trail.":"Create fading shadow clone trail.","Select the primary object, the shadow clone object, the number of shadow clones, the number of frames between shadow clones, the rate that shadow clones will fade away (if desired), the Z-value of the shadow clones, and the layer the shadow clones will be created on.":"Select the primary object, the shadow clone object, the number of shadow clones, the number of frames between shadow clones, the rate that shadow clones will fade away (if desired), the Z-value of the shadow clones, and the layer the shadow clones will be created on.","Animate shadow clones that follow the path of a primary object":"Animate shadow clones that follow the path of a primary object","Create and animate _PARAM3_ copies of _PARAM2_ that follow the position of _PARAM1_, with _PARAM4_ empty frames between shadow clones, and fading the opacity of shadow clones by _PARAM5_ per clone. Shrink scale of shadow clones by _PARAM6_ per clone. Shadow clones will be created on _PARAM7_ layer with a Z-value of _PARAM8_. Match X scale: _PARAM9_ Match Y scale: _PARAM10_ Match angle: _PARAM11_ Match animation: _PARAM12_ Match animation frame: _PARAM13_ Match vertical flip: _PARAM14_ Match horizontal flip: _PARAM15_":"Create and animate _PARAM3_ copies of _PARAM2_ that follow the position of _PARAM1_, with _PARAM4_ empty frames between shadow clones, and fading the opacity of shadow clones by _PARAM5_ per clone. Shrink scale of shadow clones by _PARAM6_ per clone. Shadow clones will be created on _PARAM7_ layer with a Z-value of _PARAM8_. Match X scale: _PARAM9_ Match Y scale: _PARAM10_ Match angle: _PARAM11_ Match animation: _PARAM12_ Match animation frame: _PARAM13_ Match vertical flip: _PARAM14_ Match horizontal flip: _PARAM15_","Object that shadow clones will follow":"Object that shadow clones will follow","Shadows clones will be made of this object (Cannot be the same object used for primary object)":"Shadows clones will be made of this object (Cannot be the same object used for primary object)","Number of shadow clones (Default: 1)":"Number of shadow clones (Default: 1)","Number of empty frames between shadow clones (Default: 1)":"Number of empty frames between shadow clones (Default: 1)","Fade speed (Range: 0 to 255) (Default: 0)":"Fade speed (Range: 0 to 255) (Default: 0)","Decrease in opacity for each consecutive shadow clone":"Decrease in opacity for each consecutive shadow clone","Shrink speed (Range: 0 to 100) (Default: 0)":"Shrink speed (Range: 0 to 100) (Default: 0)","Decrease in scale for each consecutive shadow clone":"Decrease in scale for each consecutive shadow clone","Shadow clones will be created on this layer. (Default: \"\") (Base Layer)":"Shadow clones will be created on this layer. (Default: \"\") (Base Layer)","Z value for created shadow clones":"Z value for created shadow clones","Match X scale of primary object:":"Match X scale of primary object:","Match Y scale of primary object:":"Match Y scale of primary object:","Match angle of primary object:":"Match angle of primary object:","Match animation of primary object:":"Match animation of primary object:","Match animation frame of primary object:":"Match animation frame of primary object:","Match the vertical flip of primary object:":"Match the vertical flip of primary object:","Match the horizontal flip of primary object:":"Match the horizontal flip of primary object:","Delete shadow clone objects that are linked to a primary object.":"Delete shadow clone objects that are linked to a primary object.","Delete shadow clone objects that are linked to a primary object":"Delete shadow clone objects that are linked to a primary object","Primary object":"Primary object","Shadow clones":"Shadow clones","Shake object":"Shake object","Shake objects with configurable translation, rotation, and scale intensity.":"Shake objects with configurable translation, rotation, and scale intensity.","Shake objects with translation and rotation.":"Shake objects with translation and rotation.","Shake object (position, angle)":"Shake object (position, angle)","Shake an object, using one or more ways to shake (position, angle). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"Shake an object, using one or more ways to shake (position, angle). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_":"Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_","Stop any shaking of object that was initiated by the Shake Object extension.":"Stop any shaking of object that was initiated by the Shake Object extension.","Stop shaking the object":"Stop shaking the object","3D object shake":"3D object shake","Shake 3D objects.":"Shake 3D objects.","Shake 3D objects with translation and rotation.":"Shake 3D objects with translation and rotation.","3D shake":"3D shake","Translation amplitude on X axis":"Translation amplitude on X axis","Translation amplitude on Y axis":"Translation amplitude on Y axis","Translation amplitude on Z axis":"Translation amplitude on Z axis","Rotation amplitude around X axis":"Rotation amplitude around X axis","Rotation amplitude around Y axis":"Rotation amplitude around Y axis","Rotation amplitude around Z axis":"Rotation amplitude around Z axis","Start to shake at the object creation":"Start to shake at the object creation","Shake the object with a linear easing at the start and the end.":"Shake the object with a linear easing at the start and the end.","Shake":"Shake","Shake _PARAM0_ for _PARAM2_ seconds with _PARAM3_ seconds of easing to start and _PARAM4_ seconds to stop":"Shake _PARAM0_ for _PARAM2_ seconds with _PARAM3_ seconds of easing to start and _PARAM4_ seconds to stop","Shake the object with a linear easing at the start and keep shaking until the stop action is used.":"Shake the object with a linear easing at the start and keep shaking until the stop action is used.","Start shaking":"Start shaking","Start shaking _PARAM0_ with _PARAM2_ seconds of easing":"Start shaking _PARAM0_ with _PARAM2_ seconds of easing","Stop shaking the object with a linear easing.":"Stop shaking the object with a linear easing.","Stop shaking":"Stop shaking","Stop shaking _PARAM0_ with _PARAM2_ seconds of easing":"Stop shaking _PARAM0_ with _PARAM2_ seconds of easing","Check if the object is shaking.":"Check if the object is shaking.","Is shaking":"Is shaking","Check if the object is stopping to shake.":"Check if the object is stopping to shake.","Is stopping to shake":"Is stopping to shake","_PARAM0_ is stopping to shake":"_PARAM0_ is stopping to shake","the shaking frequency of the object.":"the shaking frequency of the object.","Shaking frequency":"Shaking frequency","the shaking frequency":"the shaking frequency","Return the easing factor according to start properties.":"Return the easing factor according to start properties.","Start easing factor":"Start easing factor","Return the easing factor according to stop properties.":"Return the easing factor according to stop properties.","Stop easing factor":"Stop easing factor","stop easing factor":"stop easing factor","Share dialog and sharing options":"Share dialog and sharing options","Share text/URL via system share dialog. Mobile browsers and apps only.":"Share text/URL via system share dialog. Mobile browsers and apps only.","Share a link or text via another app using the system share dialog.":"Share a link or text via another app using the system share dialog.","Share text: _PARAM1_ and url: _PARAM2_ with title _PARAM3_":"Share text: _PARAM1_ and url: _PARAM2_ with title _PARAM3_","Text to share":"Text to share","Url to share":"Url to share","Title to show in the Share dialog":"Title to show in the Share dialog","Check if the browser/operating system of the device supports sharing. Sharing is typically not supported on desktop browsers or desktop apps.":"Check if the browser/operating system of the device supports sharing. Sharing is typically not supported on desktop browsers or desktop apps.","Sharing is supported":"Sharing is supported","The browser or system supports sharing":"The browser or system supports sharing","the result of the last share dialog.":"the result of the last share dialog.","Result of the last share dialog":"Result of the last share dialog","the result of the last share dialog":"the result of the last share dialog","Shock wave effect":"Shock wave effect","Draw expanding shock wave effect.":"Draw expanding shock wave effect.","Draw ellipse shock waves.":"Draw ellipse shock waves.","Ellipse shock wave":"Ellipse shock wave","Start width":"Start width","Start height":"Start height","Start outline thickness":"Start outline thickness","Outline":"Outline","Start angle":"Start angle","End width":"End width","End height":"End height","End outline thickness":"End outline thickness","End angle":"End angle","Timing":"Timing","Fill the shape":"Fill the shape","the start width of the object.":"the start width of the object.","the start width":"the start width","the start height of the object.":"the start height of the object.","the start height":"the start height","the start outline of the object.":"the start outline of the object.","the start outline":"the start outline","the start angle of the object.":"the start angle of the object.","the start angle":"the start angle","the end width of the object.":"the end width of the object.","the end width":"the end width","the end height of the object.":"the end height of the object.","the end height":"the end height","the end outline thickness of the object.":"the end outline thickness of the object.","the end outline thickness":"the end outline thickness","the end Color of the object.":"the end Color of the object.","End Color":"End Color","the end Color":"the end Color","the end Opacity of the object.":"the end Opacity of the object.","End Opacity":"End Opacity","the end Opacity":"the end Opacity","the end angle of the object.":"the end angle of the object.","the end angle":"the end angle","the duration of the animation.":"the duration of the animation.","the duration":"the duration","the easing of the animation.":"the easing of the animation.","the easing":"the easing","Check if the shape is filled.":"Check if the shape is filled.","Shape filled":"Shape filled","The shape of _PARAM0_ is filled":"The shape of _PARAM0_ is filled","Enable or disable the filling of the shape.":"Enable or disable the filling of the shape.","Enable filling":"Enable filling","Enable filling of _PARAM0_ : _PARAM2_":"Enable filling of _PARAM0_ : _PARAM2_","IsFilled":"IsFilled","Draw star shock waves.":"Draw star shock waves.","Star shock waves":"Star shock waves","Start radius":"Start radius","Start Inner radius":"Start Inner radius","Shape":"Shape","End radius":"End radius","End inner radius":"End inner radius","Number of points":"Number of points","the start radius of the object.":"the start radius of the object.","the start radius":"the start radius","the start inner radius of the object.":"the start inner radius of the object.","Start inner radius":"Start inner radius","the start inner radius":"the start inner radius","the start outline thickness of the object.":"the start outline thickness of the object.","the start outline thickness":"the start outline thickness","the end radius of the object.":"the end radius of the object.","the end radius":"the end radius","the end inner radius of the object.":"the end inner radius of the object.","the end inner radius":"the end inner radius","IsFilling":"IsFilling","the number of points of the star.":"the number of points of the star.","the number of points":"the number of points","Smooth Camera":"Smooth Camera","Smoothly scroll to follow an object.":"Smoothly scroll to follow an object.","Leftward catch-up speed (in ratio per second)":"Leftward catch-up speed (in ratio per second)","Catch-up speed":"Catch-up speed","Rightward catch-up speed (in ratio per second)":"Rightward catch-up speed (in ratio per second)","Upward catch-up speed (in ratio per second)":"Upward catch-up speed (in ratio per second)","Downward catch-up speed (in ratio per second)":"Downward catch-up speed (in ratio per second)","Follow on X axis":"Follow on X axis","Follow on Y axis":"Follow on Y axis","Follow free area left border":"Follow free area left border","Follow free area right border":"Follow free area right border","Follow free area top border":"Follow free area top border","Follow free area bottom border":"Follow free area bottom border","Camera offset X":"Camera offset X","Camera offset Y":"Camera offset Y","Camera delay":"Camera delay","Forecast time":"Forecast time","Forecast history duration":"Forecast history duration","Index (local variable)":"Index (local variable)","Leftward maximum speed":"Leftward maximum speed","Rightward maximum speed":"Rightward maximum speed","Upward maximum speed":"Upward maximum speed","Downward maximum speed":"Downward maximum speed","OldX (local variable)":"OldX (local variable)","OldY (local variable)":"OldY (local variable)","Move the camera closer to the object. This action must be called after the object has moved for the frame.":"Move the camera closer to the object. This action must be called after the object has moved for the frame.","Move the camera closer":"Move the camera closer","Move the camera closer to _PARAM0_":"Move the camera closer to _PARAM0_","Move the camera closer to the object.":"Move the camera closer to the object.","Do move the camera closer":"Do move the camera closer","Do move the camera closer _PARAM0_":"Do move the camera closer _PARAM0_","Delay the camera according to a maximum speed and catch up the delay.":"Delay the camera according to a maximum speed and catch up the delay.","Wait and catch up":"Wait and catch up","Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds":"Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds","Waiting duration (in seconds)":"Waiting duration (in seconds)","Waiting maximum camera target speed X":"Waiting maximum camera target speed X","Waiting maximum camera target speed Y":"Waiting maximum camera target speed Y","Catch up duration (in seconds)":"Catch up duration (in seconds)","Draw the targeted and actual camera position.":"Draw the targeted and actual camera position.","Draw debug":"Draw debug","Draw targeted and actual camera position for _PARAM0_ on _PARAM2_":"Draw targeted and actual camera position for _PARAM0_ on _PARAM2_","Enable or disable the following on X axis.":"Enable or disable the following on X axis.","Follow on X":"Follow on X","The camera follows _PARAM0_ on X axis: _PARAM2_":"The camera follows _PARAM0_ on X axis: _PARAM2_","Enable or disable the following on Y axis.":"Enable or disable the following on Y axis.","Follow on Y":"Follow on Y","The camera follows _PARAM0_ on Y axis: _PARAM2_":"The camera follows _PARAM0_ on Y axis: _PARAM2_","Change the camera follow free area right border.":"Change the camera follow free area right border.","Change the camera follow free area right border of _PARAM0_: _PARAM2_":"Change the camera follow free area right border of _PARAM0_: _PARAM2_","Change the camera follow free area left border.":"Change the camera follow free area left border.","Change the camera follow free area left border of _PARAM0_: _PARAM2_":"Change the camera follow free area left border of _PARAM0_: _PARAM2_","Change the camera follow free area top border.":"Change the camera follow free area top border.","Change the camera follow free area top border of _PARAM0_: _PARAM2_":"Change the camera follow free area top border of _PARAM0_: _PARAM2_","Change the camera follow free area bottom border.":"Change the camera follow free area bottom border.","Change the camera follow free area bottom border of _PARAM0_: _PARAM2_":"Change the camera follow free area bottom border of _PARAM0_: _PARAM2_","Change the camera leftward maximum speed (in pixels per second).":"Change the camera leftward maximum speed (in pixels per second).","Change the camera leftward maximum speed of _PARAM0_: _PARAM2_":"Change the camera leftward maximum speed of _PARAM0_: _PARAM2_","Leftward maximum speed (in pixels per second)":"Leftward maximum speed (in pixels per second)","Change the camera rightward maximum speed (in pixels per second).":"Change the camera rightward maximum speed (in pixels per second).","Change the camera rightward maximum speed of _PARAM0_: _PARAM2_":"Change the camera rightward maximum speed of _PARAM0_: _PARAM2_","Rightward maximum speed (in pixels per second)":"Rightward maximum speed (in pixels per second)","Change the camera upward maximum speed (in pixels per second).":"Change the camera upward maximum speed (in pixels per second).","Change the camera upward maximum speed of _PARAM0_: _PARAM2_":"Change the camera upward maximum speed of _PARAM0_: _PARAM2_","Upward maximum speed (in pixels per second)":"Upward maximum speed (in pixels per second)","Change the camera downward maximum speed (in pixels per second).":"Change the camera downward maximum speed (in pixels per second).","Change the camera downward maximum speed of _PARAM0_: _PARAM2_":"Change the camera downward maximum speed of _PARAM0_: _PARAM2_","Downward maximum speed (in pixels per second)":"Downward maximum speed (in pixels per second)","Change the camera leftward catch-up speed (in ratio per second).":"Change the camera leftward catch-up speed (in ratio per second).","Leftward catch-up speed":"Leftward catch-up speed","Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_":"Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_","Change the camera rightward catch-up speed (in ratio per second).":"Change the camera rightward catch-up speed (in ratio per second).","Rightward catch-up speed":"Rightward catch-up speed","Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_":"Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_","Change the camera downward catch-up speed (in ratio per second).":"Change the camera downward catch-up speed (in ratio per second).","Downward catch-up speed":"Downward catch-up speed","Change the camera downward catch-up speed of _PARAM0_: _PARAM2_":"Change the camera downward catch-up speed of _PARAM0_: _PARAM2_","Change the camera upward catch-up speed (in ratio per second).":"Change the camera upward catch-up speed (in ratio per second).","Upward catch-up speed":"Upward catch-up speed","Change the camera upward catch-up speed of _PARAM0_: _PARAM2_":"Change the camera upward catch-up speed of _PARAM0_: _PARAM2_","the camera offset on X axis of the object. This is not the current difference between the object and the camera position.":"the camera offset on X axis of the object. This is not the current difference between the object and the camera position.","the camera offset on X axis":"the camera offset on X axis","Change the camera offset on X axis of an object.":"Change the camera offset on X axis of an object.","Camera Offset X":"Camera Offset X","Change the camera offset on X axis of _PARAM0_: _PARAM2_":"Change the camera offset on X axis of _PARAM0_: _PARAM2_","the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.":"the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.","the camera offset on Y axis":"the camera offset on Y axis","Change the camera offset on Y axis of an object.":"Change the camera offset on Y axis of an object.","Camera Offset Y":"Camera Offset Y","Change the camera offset on Y axis of _PARAM0_: _PARAM2_":"Change the camera offset on Y axis of _PARAM0_: _PARAM2_","Change the camera forecast time (in seconds).":"Change the camera forecast time (in seconds).","Change the camera forecast time of _PARAM0_: _PARAM2_":"Change the camera forecast time of _PARAM0_: _PARAM2_","Change the camera delay (in seconds).":"Change the camera delay (in seconds).","Change the camera delay of _PARAM0_: _PARAM2_":"Change the camera delay of _PARAM0_: _PARAM2_","Return follow free area left border X.":"Return follow free area left border X.","Free area left":"Free area left","Return follow free area right border X.":"Return follow free area right border X.","Free area right":"Free area right","Return follow free area bottom border Y.":"Return follow free area bottom border Y.","Free area bottom":"Free area bottom","Return follow free area top border Y.":"Return follow free area top border Y.","Free area top":"Free area top","Update delayed position and delayed history. This is called in doStepPreEvents.":"Update delayed position and delayed history. This is called in doStepPreEvents.","Update delayed position":"Update delayed position","Update delayed position and delayed history of _PARAM0_":"Update delayed position and delayed history of _PARAM0_","Check if the camera following target is delayed from the object.":"Check if the camera following target is delayed from the object.","Camera is delayed":"Camera is delayed","The camera of _PARAM0_ is delayed":"The camera of _PARAM0_ is delayed","Return the current camera delay.":"Return the current camera delay.","Current delay":"Current delay","Check if the camera following is waiting at a reduced speed.":"Check if the camera following is waiting at a reduced speed.","Camera is waiting":"Camera is waiting","The camera of _PARAM0_ is waiting":"The camera of _PARAM0_ is waiting","Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.":"Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.","Add forecast history position":"Add forecast history position","Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_":"Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_","Object X":"Object X","Object Y":"Object Y","Update forecasted position. This is called in doStepPreEvents.":"Update forecasted position. This is called in doStepPreEvents.","Update forecasted position":"Update forecasted position","Update forecasted position of _PARAM0_":"Update forecasted position of _PARAM0_","Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.":"Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.","Project history ends":"Project history ends","Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_":"Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_","OldestX":"OldestX","OldestY":"OldestY","Newest X":"Newest X","Newest Y":"Newest Y","Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.":"Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.","Forecast time ratio":"Forecast time ratio","Smoothly scroll to follow a character and stabilize the camera when jumping.":"Smoothly scroll to follow a character and stabilize the camera when jumping.","Smooth platformer camera":"Smooth platformer camera","Smooth camera behavior":"Smooth camera behavior","Follow free area top in the air":"Follow free area top in the air","Follow free area bottom in the air":"Follow free area bottom in the air","Follow free area top on the floor":"Follow free area top on the floor","Follow free area bottom on the floor":"Follow free area bottom on the floor","Upward speed in the air (in ratio per second)":"Upward speed in the air (in ratio per second)","Downward speed in the air (in ratio per second)":"Downward speed in the air (in ratio per second)","Upward speed on the floor (in ratio per second)":"Upward speed on the floor (in ratio per second)","Downward speed on the floor (in ratio per second)":"Downward speed on the floor (in ratio per second)","Upward maximum speed in the air":"Upward maximum speed in the air","Downward maximum speed in the air":"Downward maximum speed in the air","Upward maximum speed on the floor":"Upward maximum speed on the floor","Downward maximum speed on the floor":"Downward maximum speed on the floor","Rectangular 2D grid":"Rectangular 2D grid","Snap objects on a virtual grid.":"Snap objects on a virtual grid.","Snap object to a virtual grid (i.e: this is not the grid used in the editor).":"Snap object to a virtual grid (i.e: this is not the grid used in the editor).","Snap objects to a virtual grid":"Snap objects to a virtual grid","Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","Speed restrictions":"Speed restrictions","Limit max movement and rotation speed for forces-based or Physics 2D.":"Limit max movement and rotation speed for forces-based or Physics 2D.","Limit the maximum speed an object will move from (non-physics) forces.":"Limit the maximum speed an object will move from (non-physics) forces.","Enforce max movement speed":"Enforce max movement speed","Limit the maximum speed an object will move from physics forces.":"Limit the maximum speed an object will move from physics forces.","Enforce max movement speed (physics)":"Enforce max movement speed (physics)","Limit the maximum rotation speed of an object from physics forces.":"Limit the maximum rotation speed of an object from physics forces.","Enforce max rotation speed (physics)":"Enforce max rotation speed (physics)","Object Masking":"Object Masking","Mask objects using a sprite or a Shape Painter.":"Mask objects using a sprite or a Shape Painter.","Define a sprite as a mask of an object.":"Define a sprite as a mask of an object.","Mask an object with a sprite":"Mask an object with a sprite","Sprite object to use as a mask":"Sprite object to use as a mask","Remove the mask of the specified object.":"Remove the mask of the specified object.","Remove the mask":"Remove the mask","Remove the mask of _PARAM1_":"Remove the mask of _PARAM1_","Object with a mask to remove":"Object with a mask to remove","Multitouch joystick and buttons (sprite)":"Multitouch joystick and buttons (sprite)","On-screen multitouch joystick and buttons.":"On-screen multitouch joystick and buttons.","Check if a button was just pressed on a multitouch controller.":"Check if a button was just pressed on a multitouch controller.","Multitouch controller button just pressed":"Multitouch controller button just pressed","Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed":"Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed","Multitouch controller identifier (1, 2, 3, 4...)":"Multitouch controller identifier (1, 2, 3, 4...)","Button name":"Button name","Check if a button is pressed on a multitouch controller.":"Check if a button is pressed on a multitouch controller.","Multitouch controller button pressed":"Multitouch controller button pressed","Button _PARAM2_ of multitouch controller _PARAM1_ is pressed":"Button _PARAM2_ of multitouch controller _PARAM1_ is pressed","Check if a button is released on a multitouch controller.":"Check if a button is released on a multitouch controller.","Multitouch controller button released":"Multitouch controller button released","Button _PARAM2_ of multitouch controller _PARAM1_ is released":"Button _PARAM2_ of multitouch controller _PARAM1_ is released","Change a button state for a multitouch controller.":"Change a button state for a multitouch controller.","Button state":"Button state","Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_":"Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_","Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).","Dead zone radius":"Dead zone radius","Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_","Joystick name":"Joystick name","Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).","Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_":"Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_","the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).":"the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).","Angle to 4-way index":"Angle to 4-way index","The angle _PARAM1_ 4-way index":"The angle _PARAM1_ 4-way index","the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).":"the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).","Angle to 8-way index":"Angle to 8-way index","The angle _PARAM1_ 8-way index":"The angle _PARAM1_ 8-way index","Check if angle is in a given direction.":"Check if angle is in a given direction.","Angle 4-way direction":"Angle 4-way direction","The angle _PARAM1_ is the 4-way direction _PARAM2_":"The angle _PARAM1_ is the 4-way direction _PARAM2_","Angle 8-way direction":"Angle 8-way direction","The angle _PARAM1_ is the 8-way direction _PARAM2_":"The angle _PARAM1_ is the 8-way direction _PARAM2_","Check if joystick is pushed in a given direction.":"Check if joystick is pushed in a given direction.","Joystick pushed in a direction (4-way)":"Joystick pushed in a direction (4-way)","Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_":"Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_","Joystick pushed in a direction (8-way)":"Joystick pushed in a direction (8-way)","the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).","Joystick force (deprecated)":"Joystick force (deprecated)","Joystick _PARAM2_ of multitouch controller _PARAM1_ force":"Joystick _PARAM2_ of multitouch controller _PARAM1_ force","the force of multitouch contoller stick (from 0 to 1).":"the force of multitouch contoller stick (from 0 to 1).","multitouch controller _PARAM1_ _PARAM2_ stick force":"multitouch controller _PARAM1_ _PARAM2_ stick force","Stick name":"Stick name","Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).","Joystick force":"Joystick force","Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_","Return the angle the joystick is pointing towards (Range: -180 to 180).":"Return the angle the joystick is pointing towards (Range: -180 to 180).","Joystick angle (deprecated)":"Joystick angle (deprecated)","Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).":"Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).","Change the angle the joystick is pointing towards (Range: -180 to 180).":"Change the angle the joystick is pointing towards (Range: -180 to 180).","Joystick angle":"Joystick angle","Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_","Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).":"Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).","Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).":"Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).","Check if a new touch has started on the right or left side of the screen.":"Check if a new touch has started on the right or left side of the screen.","New touch on a screen side":"New touch on a screen side","A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer":"A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer","Multitouch joystick":"Multitouch joystick","Screen side":"Screen side","Joystick that can be controlled by interacting with a touchscreen.":"Joystick that can be controlled by interacting with a touchscreen.","Multitouch Joystick":"Multitouch Joystick","Dead zone radius (range: 0 to 1)":"Dead zone radius (range: 0 to 1)","The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)":"The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)","Joystick angle (range: -180 to 180)":"Joystick angle (range: -180 to 180)","Joystick force (range: 0 to 1)":"Joystick force (range: 0 to 1)","the joystick force (from 0 to 1).":"the joystick force (from 0 to 1).","the joystick force":"the joystick force","Change the joystick angle of _PARAM0_ to _PARAM2_":"Change the joystick angle of _PARAM0_ to _PARAM2_","Return the stick force on X axis (from -1 at the left to 1 at the right).":"Return the stick force on X axis (from -1 at the left to 1 at the right).","Return the stick force on Y axis (from -1 at the top to 1 at the bottom).":"Return the stick force on Y axis (from -1 at the top to 1 at the bottom).","Joystick pushed in a direction (4-way movement)":"Joystick pushed in a direction (4-way movement)","_PARAM0_ is pushed in direction _PARAM2_":"_PARAM0_ is pushed in direction _PARAM2_","Joystick pushed in a direction (8-way movement)":"Joystick pushed in a direction (8-way movement)","Check if a joystick is pressed.":"Check if a joystick is pressed.","Joystick pressed":"Joystick pressed","Joystick _PARAM0_ is pressed":"Joystick _PARAM0_ is pressed","Reset the joystick values (except for angle, which stays the same)":"Reset the joystick values (except for angle, which stays the same)","Reset":"Reset","Reset the joystick of _PARAM0_":"Reset the joystick of _PARAM0_","the multitouch controller identifier.":"the multitouch controller identifier.","Multitouch controller identifier":"Multitouch controller identifier","the multitouch controller identifier":"the multitouch controller identifier","the joystick name.":"the joystick name.","the joystick name":"the joystick name","the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).","the dead zone radius":"the dead zone radius","Force the joystick into the pressing state.":"Force the joystick into the pressing state.","Force start pressing":"Force start pressing","Force start pressing _PARAM0_ with touch identifier: _PARAM2_":"Force start pressing _PARAM0_ with touch identifier: _PARAM2_","Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.":"Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.","Multitouch button":"Multitouch button","Button identifier":"Button identifier","TouchID":"TouchID","Button released":"Button released","Button just pressed":"Button just pressed","Triggering circle radius":"Triggering circle radius","This circle adds up to the object collision mask.":"This circle adds up to the object collision mask.","Check if the button was just pressed.":"Check if the button was just pressed.","Button _PARAM0_ was just pressed":"Button _PARAM0_ was just pressed","Check if the button is pressed.":"Check if the button is pressed.","Button pressed":"Button pressed","Button _PARAM0_ is pressed":"Button _PARAM0_ is pressed","Check if the button is released.":"Check if the button is released.","Button _PARAM0_ is released":"Button _PARAM0_ is released","Mark the button _PARAM0_ as _PARAM2_":"Mark the button _PARAM0_ as _PARAM2_","Control a platformer character with a multitouch controller.":"Control a platformer character with a multitouch controller.","Platformer multitouch controller mapper":"Platformer multitouch controller mapper","Platform character behavior":"Platform character behavior","Controller identifier (1, 2, 3, 4...)":"Controller identifier (1, 2, 3, 4...)","Jump button name":"Jump button name","Control a 3D physics character with a multitouch controller.":"Control a 3D physics character with a multitouch controller.","3D platformer multitouch controller mapper":"3D platformer multitouch controller mapper","3D shooter multitouch controller mapper":"3D shooter multitouch controller mapper","Control camera rotations with a multitouch controller.":"Control camera rotations with a multitouch controller.","First person camera multitouch controller mapper":"First person camera multitouch controller mapper","Control a 3D physics car with a multitouch controller.":"Control a 3D physics car with a multitouch controller.","3D car multitouch controller mapper":"3D car multitouch controller mapper","Steer joystick":"Steer joystick","Speed joystick":"Speed joystick","Hand brake button name":"Hand brake button name","Control a top-down character with a multitouch controller.":"Control a top-down character with a multitouch controller.","Top-down multitouch controller mapper":"Top-down multitouch controller mapper","Joystick for touchscreens.":"Joystick for touchscreens.","Pass the object property values to the behavior.":"Pass the object property values to the behavior.","Update configuration":"Update configuration","Update the configuration of _PARAM0_":"Update the configuration of _PARAM0_","Show the joystick until it is released.":"Show the joystick until it is released.","Show and start pressing":"Show and start pressing","Show _PARAM0_ at the cursor position and start pressing":"Show _PARAM0_ at the cursor position and start pressing","Return the X position of a specified touch":"Return the X position of a specified touch","Touch X position (on parent)":"Touch X position (on parent)","De/activate control of the joystick.":"De/activate control of the joystick.","De/activate control":"De/activate control","Activate control of _PARAM0_: _PARAM1_":"Activate control of _PARAM0_: _PARAM1_","Check if a stick is pressed.":"Check if a stick is pressed.","Stick pressed":"Stick pressed","Stick _PARAM0_ is pressed":"Stick _PARAM0_ is pressed","the strick force (from 0 to 1).":"the strick force (from 0 to 1).","the stick force":"the stick force","the stick force on X axis (from -1 at the left to 1 at the right).":"the stick force on X axis (from -1 at the left to 1 at the right).","the stick X force":"the stick X force","the stick force on Y axis (from -1 at the top to 1 at the bottom).":"the stick force on Y axis (from -1 at the top to 1 at the bottom).","the stick Y force":"the stick Y force","Return the angle the joystick is pointing towards (from -180 to 180).":"Return the angle the joystick is pointing towards (from -180 to 180).","Return the angle the stick is pointing towards (from -180 to 180).":"Return the angle the stick is pointing towards (from -180 to 180).","_PARAM0_ is pushed in direction _PARAM1_":"_PARAM0_ is pushed in direction _PARAM1_","the multitouch controller identifier (1, 2, 3, 4...).":"the multitouch controller identifier (1, 2, 3, 4...).","the joystick name of the object.":"the joystick name of the object.","the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).","Sprite Sheet Animations":"Sprite Sheet Animations","Animate a tiled sprite from a sprite sheet.":"Animate a tiled sprite from a sprite sheet.","Animates a sprite sheet using JSON (see extension description).":"Animates a sprite sheet using JSON (see extension description).","JSON sprite sheet animator":"JSON sprite sheet animator","JSON formatted text describing the sprite sheet":"JSON formatted text describing the sprite sheet","Current animation":"Current animation","Current frame of the animation":"Current frame of the animation","Currently displayed frame name":"Currently displayed frame name","Speed of the animation (in seconds)":"Speed of the animation (in seconds)","Loads the JSON data into the behavior":"Loads the JSON data into the behavior","Load the JSON":"Load the JSON","Load the JSON of _PARAM0_":"Load the JSON of _PARAM0_","Update the object attached to the behavior using the latest properties values.":"Update the object attached to the behavior using the latest properties values.","Update the object":"Update the object","Update object _PARAM0_ with properties of _PARAM1_":"Update object _PARAM0_ with properties of _PARAM1_","Updates the animation frame.":"Updates the animation frame.","Update the animation frame":"Update the animation frame","Update the current animation frame of _PARAM0_ to _PARAM2_":"Update the current animation frame of _PARAM0_ to _PARAM2_","The frame to set to":"The frame to set to","Loads a new JSON spritesheet data into the behavior.":"Loads a new JSON spritesheet data into the behavior.","Load data from a JSON resource":"Load data from a JSON resource","Load JSON spritesheet data for _PARAM0_ from _PARAM2_":"Load JSON spritesheet data for _PARAM0_ from _PARAM2_","The JSON to load":"The JSON to load","Display one frame without animating the object.":"Display one frame without animating the object.","Display a frame":"Display a frame","Display frame _PARAM2_ of _PARAM0_":"Display frame _PARAM2_ of _PARAM0_","The frame to display":"The frame to display","Play an animation from the sprite sheet.":"Play an animation from the sprite sheet.","Play Animation":"Play Animation","Play animation _PARAM2_ of _PARAM0_":"Play animation _PARAM2_ of _PARAM0_","The name of the animation":"The name of the animation","The name of the current animation. __null if no animation is playing.":"The name of the current animation. __null if no animation is playing.","If Current Frame of _PARAM0_ = _PARAM2_":"If Current Frame of _PARAM0_ = _PARAM2_","The name of the currently displayed frame.":"The name of the currently displayed frame.","Current frame":"Current frame","Pause the animation of a sprite sheet.":"Pause the animation of a sprite sheet.","Pause animation":"Pause animation","Pause the current animation of _PARAM0_":"Pause the current animation of _PARAM0_","Resume a paused animation of a sprite sheet.":"Resume a paused animation of a sprite sheet.","Resume animation":"Resume animation","Resume the current animation of _PARAM0_":"Resume the current animation of _PARAM0_","Animates a vertical (top to bottom) sprite sheet.":"Animates a vertical (top to bottom) sprite sheet.","Vertical sprite sheet animator":"Vertical sprite sheet animator","Horizontal width of sprite (in pixels)":"Horizontal width of sprite (in pixels)","Vertical height of sprite (in pixels)":"Vertical height of sprite (in pixels)","Empty space between each sprite (in pixels)":"Empty space between each sprite (in pixels)","Column of the animation":"Column of the animation","First Frame of the animation":"First Frame of the animation","Last Frame of the animation":"Last Frame of the animation","Current Frame of the animation":"Current Frame of the animation","Set the animation frame.":"Set the animation frame.","Set the animation frame":"Set the animation frame","Set the current frame of _PARAM0_ to _PARAM2_":"Set the current frame of _PARAM0_ to _PARAM2_","The frame":"The frame","Play animation":"Play animation","Play animation of _PARAM0_ on column _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"Play animation of _PARAM0_ on column _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_","First frame of the animation":"First frame of the animation","Last frame of the animation":"Last frame of the animation","Duration for each frame (seconds)":"Duration for each frame (seconds)","The column containing the animation":"The column containing the animation","The current frame of the current animation.":"The current frame of the current animation.","Pause the animation of _PARAM0_":"Pause the animation of _PARAM0_","Animates a horizontal (left to right) sprite sheet.":"Animates a horizontal (left to right) sprite sheet.","Horizontal sprite sheet animator":"Horizontal sprite sheet animator","Row of the animation":"Row of the animation","Play animation of _PARAM0_ on row _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"Play animation of _PARAM0_ on row _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_","Last Frame of animation":"Last Frame of animation","What row is the animation in":"What row is the animation in","Toggle switch":"Toggle switch","Toggle switch that users can click or touch.":"Toggle switch that users can click or touch.","The finite state machine used internally by the switch object.":"The finite state machine used internally by the switch object.","Switch finite state machine":"Switch finite state machine","Check if the toggle switch is checked.":"Check if the toggle switch is checked.","Check if the toggle switch was checked in the current frame.":"Check if the toggle switch was checked in the current frame.","Has just been checked":"Has just been checked","_PARAM0_ has just been checked":"_PARAM0_ has just been checked","Check if the toggle switch was unchecked in the current frame.":"Check if the toggle switch was unchecked in the current frame.","Has just been unchecked":"Has just been unchecked","_PARAM0_ has just been unchecked":"_PARAM0_ has just been unchecked","Check if the toggle switch was toggled in the current frame.":"Check if the toggle switch was toggled in the current frame.","Has just been toggled":"Has just been toggled","_PARAM0_ has just been toggled":"_PARAM0_ has just been toggled","Check (or uncheck) the toggle switch.":"Check (or uncheck) the toggle switch.","Check (or uncheck)":"Check (or uncheck)","Check _PARAM0_: _PARAM2_":"Check _PARAM0_: _PARAM2_","IsChecked":"IsChecked","Toggle the switch.":"Toggle the switch.","Toggle":"Toggle","Toggle _PARAM0_":"Toggle _PARAM0_","A toggle switch that users can click or touch.":"A toggle switch that users can click or touch.","Check if the toggle switch was checked or unchecked in the current frame.":"Check if the toggle switch was checked or unchecked in the current frame.","Check _PARAM0_: _PARAM1_":"Check _PARAM0_: _PARAM1_","Update the state animation.":"Update the state animation.","Update state animation":"Update state animation","Update the state animation of _PARAM0_":"Update the state animation of _PARAM0_","Star Rating Bar":"Star Rating Bar","Animated star rating bar, with customizable number of stars.":"Animated star rating bar, with customizable number of stars.","An animated score counter with an icon and a customisable font.":"An animated score counter with an icon and a customisable font.","Default rate":"Default rate","Shake the stars on value changes":"Shake the stars on value changes","Disable the rating":"Disable the rating","the rate of the object.":"the rate of the object.","the rate":"the rate","Check if the object is disabled.":"Check if the object is disabled.","_PARAM0_ is disabled":"_PARAM0_ is disabled","Enable or disable the object.":"Enable or disable the object.","_PARAM0_ is disabled: _PARAM1_":"_PARAM0_ is disabled: _PARAM1_","Disable":"Disable","Stay On Screen (2D)":"Stay On Screen (2D)","Constrain object position to remain within the camera viewport boundaries.":"Constrain object position to remain within the camera viewport boundaries.","Force the object to stay visible on the screen by setting back its 2D position inside the viewport of the camera.":"Force the object to stay visible on the screen by setting back its 2D position inside the viewport of the camera.","Stay on Screen":"Stay on Screen","Top margin":"Top margin","Bottom margin":"Bottom margin","Left margin":"Left margin","Right margin":"Right margin","the top margin (in pixels) to leave between the object and the screen border.":"the top margin (in pixels) to leave between the object and the screen border.","Screen top margin":"Screen top margin","the top margin":"the top margin","the bottom margin (in pixels) to leave between the object and the screen border.":"the bottom margin (in pixels) to leave between the object and the screen border.","Screen bottom margin":"Screen bottom margin","the bottom margin":"the bottom margin","the left margin (in pixels) to leave between the object and the screen border.":"the left margin (in pixels) to leave between the object and the screen border.","Screen left margin":"Screen left margin","the left margin":"the left margin","the right margin (in pixels) to leave between the object and the screen border.":"the right margin (in pixels) to leave between the object and the screen border.","Screen right margin":"Screen right margin","the right margin":"the right margin","Stick objects to others":"Stick objects to others","Stick objects to others, following position and rotation. For accessories/skeletons.":"Stick objects to others, following position and rotation. For accessories/skeletons.","Check if the object is stuck to another object.":"Check if the object is stuck to another object.","Is stuck to another object":"Is stuck to another object","_PARAM1_ is stuck to _PARAM3_":"_PARAM1_ is stuck to _PARAM3_","Sticker":"Sticker","Sticker behavior":"Sticker behavior","Basis":"Basis","Stick the object to another. Use the action to stick the object, or unstick it later.":"Stick the object to another. Use the action to stick the object, or unstick it later.","Only follow the position":"Only follow the position","Destroy when the object it's stuck on is destroyed":"Destroy when the object it's stuck on is destroyed","Stick on another object.":"Stick on another object.","Stick":"Stick","Stick _PARAM0_ to _PARAM2_":"Stick _PARAM0_ to _PARAM2_","Object to stick to":"Object to stick to","Unstick from the object it was stuck to.":"Unstick from the object it was stuck to.","Unstick":"Unstick","Unstick _PARAM0_":"Unstick _PARAM0_","Sway":"Sway","Sway objects like grass in wind with configurable amplitude, frequency, and phase.":"Sway objects like grass in wind with configurable amplitude, frequency, and phase.","Sway multiple instances of an object at different times - useful for random grass swaying.":"Sway multiple instances of an object at different times - useful for random grass swaying.","Sway uses the tween behavior":"Sway uses the tween behavior","Maximum angle to the left (in degrees) - Use a negative number":"Maximum angle to the left (in degrees) - Use a negative number","Maximum angle to the right (in degrees) - Use a positive number":"Maximum angle to the right (in degrees) - Use a positive number","Mininum value for random tween time range for angle (seconds)":"Mininum value for random tween time range for angle (seconds)","Maximum value for random tween time range for angle (seconds)":"Maximum value for random tween time range for angle (seconds)","Minimum Y scale amount":"Minimum Y scale amount","Y scale":"Y scale","Maximum Y scale amount":"Maximum Y scale amount","Mininum value for random tween time range for Y scale (seconds)":"Mininum value for random tween time range for Y scale (seconds)","Maximum value for random tween time range for Y scale (seconds)":"Maximum value for random tween time range for Y scale (seconds)","Set sway angle left and right.":"Set sway angle left and right.","Set sway angle left and right":"Set sway angle left and right","Sway the angle of _PARAM0_ to _PARAM2_° to the left and to _PARAM3_° to the right":"Sway the angle of _PARAM0_ to _PARAM2_° to the left and to _PARAM3_° to the right","Angle to the left (degrees) - Use negative number":"Angle to the left (degrees) - Use negative number","Angle to the right (degrees) - Use positive number":"Angle to the right (degrees) - Use positive number","Set sway angle time range.":"Set sway angle time range.","Set sway angle time range":"Set sway angle time range","Tween angle time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"Tween angle time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds","Angle tween time minimum (seconds)":"Angle tween time minimum (seconds)","Angle tween time maximum (seconds)":"Angle tween time maximum (seconds)","Set sway Y scale mininum and maximum.":"Set sway Y scale mininum and maximum.","Set sway Y scale mininum and maximum":"Set sway Y scale mininum and maximum","Sway the Y scale of _PARAM0_ from _PARAM2_ to _PARAM3_":"Sway the Y scale of _PARAM0_ from _PARAM2_ to _PARAM3_","Minimum Y scale":"Minimum Y scale","Maximum Y scale":"Maximum Y scale","Set Y scale time range.":"Set Y scale time range.","Set sway Y scale time range":"Set sway Y scale time range","Tween Y scale time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"Tween Y scale time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds","Y scale tween time minimum (seconds)":"Y scale tween time minimum (seconds)","Y scale tween time maximum (seconds)":"Y scale tween time maximum (seconds)","Swipe Gesture":"Swipe Gesture","Detect swipe gestures with angle, distance, and duration. Single-touch only.":"Detect swipe gestures with angle, distance, and duration. Single-touch only.","Enable (or disable) swipe gesture detection.":"Enable (or disable) swipe gesture detection.","Enable (or disable) swipe gesture detection":"Enable (or disable) swipe gesture detection","Enable swipe detection: _PARAM1_":"Enable swipe detection: _PARAM1_","Enable swipe detection":"Enable swipe detection","Draw a line that indicates the current swipe gesture. Edit \"Outline Size\" of the shape painter to adjust the thickness of the line.":"Draw a line that indicates the current swipe gesture. Edit \"Outline Size\" of the shape painter to adjust the thickness of the line.","Draw swipe gesture":"Draw swipe gesture","Draw a line with _PARAM1_ that shows the current swipe":"Draw a line with _PARAM1_ that shows the current swipe","Shape painter used to draw swipe":"Shape painter used to draw swipe","Change the layer used to detect swipe gestures.":"Change the layer used to detect swipe gestures.","Layer used to detect swipe gestures":"Layer used to detect swipe gestures","Use layer _PARAM1_ to detect swipe gestures":"Use layer _PARAM1_ to detect swipe gestures","the Layer used to detect swipe gestures.":"the Layer used to detect swipe gestures.","the Layer used to detect swipe gestures":"the Layer used to detect swipe gestures","Swipe angle (degrees).":"Swipe angle (degrees).","Swipe angle (degrees)":"Swipe angle (degrees)","the swipe angle (degrees)":"the swipe angle (degrees)","Swipe distance (pixels).":"Swipe distance (pixels).","Swipe distance (pixels)":"Swipe distance (pixels)","the swipe distance (pixels)":"the swipe distance (pixels)","Swipe distance in horizontal direction (pixels).":"Swipe distance in horizontal direction (pixels).","Swipe distance in horizontal direction (pixels)":"Swipe distance in horizontal direction (pixels)","the swipe distance in horizontal direction (pixels)":"the swipe distance in horizontal direction (pixels)","Swipe distance in vertical direction (pixels).":"Swipe distance in vertical direction (pixels).","Swipe distance in vertical direction (pixels)":"Swipe distance in vertical direction (pixels)","the swipe distance in vertical direction (pixels)":"the swipe distance in vertical direction (pixels)","Start point of the swipe X position.":"Start point of the swipe X position.","Start point of the swipe X position":"Start point of the swipe X position","the start point of the swipe X position":"the start point of the swipe X position","Start point of the swipe Y position.":"Start point of the swipe Y position.","Start point of the swipe Y position":"Start point of the swipe Y position","the start point of the swipe Y position":"the start point of the swipe Y position","End point of the swipe X position.":"End point of the swipe X position.","End point of the swipe X position":"End point of the swipe X position","the end point of the swipe X position":"the end point of the swipe X position","End point of the swipe Y position.":"End point of the swipe Y position.","End point of the swipe Y position":"End point of the swipe Y position","the end point of the swipe Y position":"the end point of the swipe Y position","Swipe duration (seconds).":"Swipe duration (seconds).","Swipe duration (seconds)":"Swipe duration (seconds)","swipe duration (seconds)":"swipe duration (seconds)","Check if a swipe is currently in progress.":"Check if a swipe is currently in progress.","Swipe is in progress":"Swipe is in progress","Check if swipe detection is enabled.":"Check if swipe detection is enabled.","Is swipe detection enabled":"Is swipe detection enabled","Swipe detection is enabled":"Swipe detection is enabled","Check if the swipe has just ended.":"Check if the swipe has just ended.","Swipe just ended":"Swipe just ended","Swipe has just ended":"Swipe has just ended","Check if swipe moved in a given direction.":"Check if swipe moved in a given direction.","Swipe moved in a direction (4-way movement)":"Swipe moved in a direction (4-way movement)","Swipe moved in direction _PARAM1_":"Swipe moved in direction _PARAM1_","Swipe moved in a direction (8-way movement)":"Swipe moved in a direction (8-way movement)","Text-to-Speech":"Text-to-Speech","Read text aloud using system Text-to-Speech. Configurable voice and speed.":"Read text aloud using system Text-to-Speech. Configurable voice and speed.","Audio":"Audio","Speaks a text message aloud through the system text-to-speech.":"Speaks a text message aloud through the system text-to-speech.","Speak out a message":"Speak out a message","Say _PARAM1_ with voice _PARAM2_, volume _PARAM3_%, rate _PARAM4_% and pitch _PARAM5_%":"Say _PARAM1_ with voice _PARAM2_, volume _PARAM3_%, rate _PARAM4_% and pitch _PARAM5_%","The message to be spoken":"The message to be spoken","The voice to be used":"The voice to be used","Voices vary depending on the operating system. \nHere is a list of windows voice names: https://bit.ly/windows-voices \nAnd here is a list of voice names for MacOS: https://bit.ly/mac-voices":"Voices vary depending on the operating system. \nHere is a list of windows voice names: https://bit.ly/windows-voices \nAnd here is a list of voice names for MacOS: https://bit.ly/mac-voices","Volume between 0% and 100%":"Volume between 0% and 100%","Speed between 10% and 1000%":"Speed between 10% and 1000%","Pitch between 0% and 200%":"Pitch between 0% and 200%","Forces all Text-to-Speech to be stopped.":"Forces all Text-to-Speech to be stopped.","Force stop speaking":"Force stop speaking","Third person camera":"Third person camera","Third-person camera orbiting an object at configurable distance, elevation, and rotation.":"Third-person camera orbiting an object at configurable distance, elevation, and rotation.","Move the camera to look at a position from a distance.":"Move the camera to look at a position from a distance.","Look at a position from a distance (deprecated)":"Look at a position from a distance (deprecated)","Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°":"Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°","Position on X axis":"Position on X axis","Position on Y axis":"Position on Y axis","Rotation angle (around Z axis)":"Rotation angle (around Z axis)","Elevation angle (around Y axis)":"Elevation angle (around Y axis)","Move the camera to look at an object from a distance.":"Move the camera to look at an object from a distance.","Look at an object from a distance (deprecated)":"Look at an object from a distance (deprecated)","Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_° and an elevation of _PARAM4_°":"Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_° and an elevation of _PARAM4_°","Look at a position from a distance":"Look at a position from a distance","Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_° and an elevation of _PARAM6_°":"Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_° and an elevation of _PARAM6_°","Position on Z axis":"Position on Z axis","Look at an object from a distance":"Look at an object from a distance","Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°":"Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°","Smoothly follow an object at a distance.":"Smoothly follow an object at a distance.","Halfway time for rotation":"Halfway time for rotation","Halfway time for elevation rotation":"Halfway time for elevation rotation","Only used by Z and ZY rotation modes":"Only used by Z and ZY rotation modes","Halfway time on Z axis":"Halfway time on Z axis","Camera distance":"Camera distance","Lateral distance offset":"Lateral distance offset","Ahead distance offset":"Ahead distance offset","Z offset":"Z offset","Rotation angle offset":"Rotation angle offset","Elevation angle offset":"Elevation angle offset","Follow free area top border on Z axis":"Follow free area top border on Z axis","Follow free area bottom border on Z axis":"Follow free area bottom border on Z axis","Automatically rotate the camera with the object":"Automatically rotate the camera with the object","Automatically rotate the camera with the object (elevation)":"Automatically rotate the camera with the object (elevation)","Best left unchecked, use the rotation mode instead":"Best left unchecked, use the rotation mode instead","Rotation mode":"Rotation mode","Targeted camera rotation angle":"Targeted camera rotation angle","Forward X":"Forward X","Forward Y":"Forward Y","Forward Z":"Forward Z","Lerp camera":"Lerp camera","Lerp the camera rotation to _PARAM0_ with a ratio of _PARAM2_ with rotation offset _PARAM3_° and elevation offset _PARAM4_°":"Lerp the camera rotation to _PARAM0_ with a ratio of _PARAM2_ with rotation offset _PARAM3_° and elevation offset _PARAM4_°","Move to object":"Move to object","Change the camera position to _PARAM0_ with offset _PARAM2_, _PARAM3_, _PARAM4_":"Change the camera position to _PARAM0_ with offset _PARAM2_, _PARAM3_, _PARAM4_","X offset":"X offset","Y offset":"Y offset","Update local basis":"Update local basis","Update local basis of _PARAM0_ and the camera":"Update local basis of _PARAM0_ and the camera","Rotate the camera all the way to the targeted angle.":"Rotate the camera all the way to the targeted angle.","Rotate the camera all the way":"Rotate the camera all the way","Rotate the camera all the way to the targeted angle of _PARAM0_":"Rotate the camera all the way to the targeted angle of _PARAM0_","the camera rotation.":"the camera rotation.","Camera rotation":"Camera rotation","the camera rotation":"the camera rotation","the halfway time for rotation of the object.":"the halfway time for rotation of the object.","the halfway time for rotation":"the halfway time for rotation","the halfway time for elevation rotation of the object.":"the halfway time for elevation rotation of the object.","Halfway time for elevation rotation":"Halfway time for elevation rotation","the halfway time for elevation rotation":"the halfway time for elevation rotation","the halfway time on Z axis of the object.":"the halfway time on Z axis of the object.","the halfway time on Z axis":"the halfway time on Z axis","Return follow free area bottom border Z.":"Return follow free area bottom border Z.","Free area Z min":"Free area Z min","Return follow free area top border Z.":"Return follow free area top border Z.","Free area Z max":"Free area Z max","the follow free area top border on Z axis of the object.":"the follow free area top border on Z axis of the object.","the follow free area top border on Z axis":"the follow free area top border on Z axis","the follow free area bottom border on Z axis of the object.":"the follow free area bottom border on Z axis of the object.","the follow free area bottom border on Z axis":"the follow free area bottom border on Z axis","the camera distance of the object.":"the camera distance of the object.","the camera distance":"the camera distance","the lateral distance offset of the object.":"the lateral distance offset of the object.","the lateral distance offset":"the lateral distance offset","the ahead distance offset of the object.":"the ahead distance offset of the object.","the ahead distance offset":"the ahead distance offset","the z offset of the object.":"the z offset of the object.","the z offset":"the z offset","the rotation angle offset of the object.":"the rotation angle offset of the object.","the rotation angle offset":"the rotation angle offset","the elevation angle offset of the object.":"the elevation angle offset of the object.","the elevation angle offset":"the elevation angle offset","the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.":"the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.","Targeted rotation angle":"Targeted rotation angle","the targeted camera rotation angle":"the targeted camera rotation angle","3D-like Flip for 2D Sprites":"3D-like Flip for 2D Sprites","Flip sprites with a 3D rotation visual effect (card flip style).":"Flip sprites with a 3D rotation visual effect (card flip style).","Flip a Sprite with a 3D effect.":"Flip a Sprite with a 3D effect.","3D Flip":"3D Flip","Flipping method":"Flipping method","Front animation name":"Front animation name","Animation method":"Animation method","Back animation name":"Back animation name","Start a flipping animation on the object.":"Start a flipping animation on the object.","Flip the object (deprecated)":"Flip the object (deprecated)","Flip _PARAM0_ over _PARAM2_ms":"Flip _PARAM0_ over _PARAM2_ms","Duration (in milliseconds)":"Duration (in milliseconds)","Start a flipping animation on the object. The X origin point must be set at the object center.":"Start a flipping animation on the object. The X origin point must be set at the object center.","Flip the object":"Flip the object","Flip _PARAM0_ over _PARAM2_ seconds":"Flip _PARAM0_ over _PARAM2_ seconds","Jump to the end of the flipping animation.":"Jump to the end of the flipping animation.","Jump to flipping end":"Jump to flipping end","Jump to the end of _PARAM0_ flipping":"Jump to the end of _PARAM0_ flipping","Checks if a flipping animation is currently playing.":"Checks if a flipping animation is currently playing.","Flipping is playing":"Flipping is playing","_PARAM0_ is flipping":"_PARAM0_ is flipping","Checks if the object is flipped or will be flipped.":"Checks if the object is flipped or will be flipped.","Is flipped":"Is flipped","_PARAM0_ is flipped":"_PARAM0_ is flipped","Flips the object to one specific side.":"Flips the object to one specific side.","Flip to a side (deprecated)":"Flip to a side (deprecated)","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ms":"Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ms","Reverse side":"Reverse side","Flips the object to one specific side. The X origin point must be set at the object center.":"Flips the object to one specific side. The X origin point must be set at the object center.","Flip to a side":"Flip to a side","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ seconds":"Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ seconds","Visually flipped":"Visually flipped","_PARAM0_ is visually flipped":"_PARAM0_ is visually flipped","Flip visually":"Flip visually","Flip visually _PARAM0_: _PARAM2_":"Flip visually _PARAM0_: _PARAM2_","Flipped":"Flipped","Resource bar (separated units)":"Resource bar (separated units)","left anchor":"left anchor","Left anchor":"Left anchor","Left anchor of _PARAM1_":"Left anchor of _PARAM1_","Anchor":"Anchor","Right anchor":"Right anchor","Right anchor of _PARAM1_":"Right anchor of _PARAM1_","Unit width":"Unit width","How much pixels to show for a value of 1.":"How much pixels to show for a value of 1.","the unit width of the object. How much pixels to show for a value of 1.":"the unit width of the object. How much pixels to show for a value of 1.","the unit width":"the unit width","Update the bar width.":"Update the bar width.","Bar width":"Bar width","Update the bar width of _PARAM0_":"Update the bar width of _PARAM0_","Time formatting":"Time formatting","Format seconds into HH:MM:SS or HH:MM:SS.000 time display strings.":"Format seconds into HH:MM:SS or HH:MM:SS.000 time display strings.","Format time in seconds to HH:MM:SS.":"Format time in seconds to HH:MM:SS.","Format time in seconds to HH:MM:SS":"Format time in seconds to HH:MM:SS","Format time _PARAM1_ to HH:MM:SS in _PARAM2_":"Format time _PARAM1_ to HH:MM:SS in _PARAM2_","Time, in seconds":"Time, in seconds","Format time in seconds to HH:MM:SS.000, including milliseconds.":"Format time in seconds to HH:MM:SS.000, including milliseconds.","Format time in seconds to HH:MM:SS.000":"Format time in seconds to HH:MM:SS.000","Timed Back and Forth Movement":"Timed Back and Forth Movement","Move objects back-and-forth horizontally or vertically for set time or distance.":"Move objects back-and-forth horizontally or vertically for set time or distance.","Move an object (e.g. enemy) for a chosen time or distance, then flip it and start over.":"Move an object (e.g. enemy) for a chosen time or distance, then flip it and start over.","Move the object vertically (instead of horizontally)":"Move the object vertically (instead of horizontally)","Moving speed (in pixel/s)":"Moving speed (in pixel/s)","Moving distance (in pixels)":"Moving distance (in pixels)","Moving maximum time (in seconds)":"Moving maximum time (in seconds)","Distance start point":"Distance start point","position of the sprite at the previous frame":"position of the sprite at the previous frame","check that time has elapsed":"check that time has elapsed","Toggle switch (for Shape Painter)":"Toggle switch (for Shape Painter)","Shape Painter toggle switch. Click/touch to toggle on/off with hover halo.":"Shape Painter toggle switch. Click/touch to toggle on/off with hover halo.","Use a shape-painter object to draw a toggle switch that users can click or touch.":"Use a shape-painter object to draw a toggle switch that users can click or touch.","Radius of the thumb (px) Example: 10":"Radius of the thumb (px) Example: 10","Active thumb color string. Example: 24;119;211":"Active thumb color string. Example: 24;119;211","Opacity of the thumb. Example: 255":"Opacity of the thumb. Example: 255","Width of the track (pixels) Example: 20":"Width of the track (pixels) Example: 20","Height of the track (pixels) Example: 14":"Height of the track (pixels) Example: 14","Color string for the track that is RIGHT of the thumb. Example: 150;150;150 (Leave blank to use thumb color)":"Color string for the track that is RIGHT of the thumb. Example: 150;150;150 (Leave blank to use thumb color)","Opacity of the track that is RIGHT of the thumb. Example: 255":"Opacity of the track that is RIGHT of the thumb. Example: 255","Color string for the track that is LEFT of the thumb. Example: 24;119;211 (Leave blank to use thumb color)":"Color string for the track that is LEFT of the thumb. Example: 24;119;211 (Leave blank to use thumb color)","Opacity of the track that is LEFT of the thumb. Example: 128":"Opacity of the track that is LEFT of the thumb. Example: 128","Size of halo when the mouse hovers and clicks on the thumb. Example: 24":"Size of halo when the mouse hovers and clicks on the thumb. Example: 24","Opacity of halo when the mouse hovers on the thumb. Example: 32":"Opacity of halo when the mouse hovers on the thumb. Example: 32","Opacity of the halo that appears when the toggle switch is pressed. Example: 64":"Opacity of the halo that appears when the toggle switch is pressed. Example: 64","Number of pixels the thumb is from the left side of the track.":"Number of pixels the thumb is from the left side of the track.","Disabled":"Disabled","State has been changed (used in ToggleChecked function)":"State has been changed (used in ToggleChecked function)","Inactive thumb color string. Example: 255;255;255":"Inactive thumb color string. Example: 255;255;255","Click or press has started on toggle switch":"Click or press has started on toggle switch","Offset (Y) of shadow on thumb. Positive numbers move shadow down, negative numbers move shadow up. Example: 4":"Offset (Y) of shadow on thumb. Positive numbers move shadow down, negative numbers move shadow up. Example: 4","Offset (X) of shadow on thumb. Positive numbers move shadow right, negative numbers move shadow left. Example: 0":"Offset (X) of shadow on thumb. Positive numbers move shadow right, negative numbers move shadow left. Example: 0","Opacity of shadow on thumb. Example: 32":"Opacity of shadow on thumb. Example: 32","Need redraw":"Need redraw","Was hovered":"Was hovered","Change the track width.":"Change the track width.","Change the track width of _PARAM0_ to _PARAM2_ pixels":"Change the track width of _PARAM0_ to _PARAM2_ pixels","Change the track height.":"Change the track height.","Track height":"Track height","Change the track height of _PARAM0_ to _PARAM2_ pixels":"Change the track height of _PARAM0_ to _PARAM2_ pixels","Change the thumb opacity.":"Change the thumb opacity.","Change the thumb opacity of _PARAM0_ to _PARAM2_":"Change the thumb opacity of _PARAM0_ to _PARAM2_","Change the inactive track opacity.":"Change the inactive track opacity.","Change the inactive track opacity of _PARAM0_ to _PARAM2_":"Change the inactive track opacity of _PARAM0_ to _PARAM2_","Change the active track opacity.":"Change the active track opacity.","Change the active track opacity of _PARAM0_ to _PARAM2_":"Change the active track opacity of _PARAM0_ to _PARAM2_","Change the halo opacity when the thumb is pressed.":"Change the halo opacity when the thumb is pressed.","Change the halo opacity of _PARAM0_ to _PARAM2_":"Change the halo opacity of _PARAM0_ to _PARAM2_","Change opacity of the halo when the thumb is hovered.":"Change opacity of the halo when the thumb is hovered.","Change the offset on Y axis of the thumb shadow.":"Change the offset on Y axis of the thumb shadow.","Thumb shadow offset on Y axis":"Thumb shadow offset on Y axis","Change the offset on Y axis of the thumb shadow of _PARAM0_ to _PARAM2_":"Change the offset on Y axis of the thumb shadow of _PARAM0_ to _PARAM2_","Y offset (pixels)":"Y offset (pixels)","Change the offset on X axis of the thumb shadow.":"Change the offset on X axis of the thumb shadow.","Thumb shadow offset on X axis":"Thumb shadow offset on X axis","Change the offset on X axis of the thumb shadow of _PARAM0_ to _PARAM2_":"Change the offset on X axis of the thumb shadow of _PARAM0_ to _PARAM2_","X offset (pixels)":"X offset (pixels)","Change the thumb shadow opacity.":"Change the thumb shadow opacity.","Thumb shadow opacity":"Thumb shadow opacity","Change the thumb shadow opacity of _PARAM0_ to _PARAM2_":"Change the thumb shadow opacity of _PARAM0_ to _PARAM2_","Opacity of shadow on thumb":"Opacity of shadow on thumb","Change the thumb radius.":"Change the thumb radius.","Thumb radius":"Thumb radius","Change the thumb radius of _PARAM0_ to _PARAM2_ pixels":"Change the thumb radius of _PARAM0_ to _PARAM2_ pixels","Change the halo radius.":"Change the halo radius.","Change the halo radius of _PARAM0_ to _PARAM2_ pixels":"Change the halo radius of _PARAM0_ to _PARAM2_ pixels","Change the active track color (the part on the thumb left).":"Change the active track color (the part on the thumb left).","Change the active track color of _PARAM0_ to _PARAM2_":"Change the active track color of _PARAM0_ to _PARAM2_","Color of active track":"Color of active track","Change the inactive track color (the part on the thumb right).":"Change the inactive track color (the part on the thumb right).","Change the inactive track color of _PARAM0_ to _PARAM2_":"Change the inactive track color of _PARAM0_ to _PARAM2_","Color of inactive track":"Color of inactive track","Change the thumb color (when unchecked).":"Change the thumb color (when unchecked).","Thumb color (when unchecked)":"Thumb color (when unchecked)","Change the thumb color of _PARAM0_ (when unchecked) to _PARAM2_":"Change the thumb color of _PARAM0_ (when unchecked) to _PARAM2_","Change the thumb color (when checked).":"Change the thumb color (when checked).","Thumb color (when checked)":"Thumb color (when checked)","Change the thumb color of _PARAM0_ (when checked) to _PARAM2_":"Change the thumb color of _PARAM0_ (when checked) to _PARAM2_","If checked, change to unchecked. If unchecked, change to checked.":"If checked, change to unchecked. If unchecked, change to checked.","Toggle the switch":"Toggle the switch","Change _PARAM0_ to opposite state (checked/unchecked)":"Change _PARAM0_ to opposite state (checked/unchecked)","Disable (or enable) the toggle switch.":"Disable (or enable) the toggle switch.","Disable (or enable) the toggle switch":"Disable (or enable) the toggle switch","Disable _PARAM0_: _PARAM2_":"Disable _PARAM0_: _PARAM2_","Check (or uncheck) the toggle switch":"Check (or uncheck) the toggle switch","Set _PARAM0_ to checked: _PARAM2_":"Set _PARAM0_ to checked: _PARAM2_","Check if mouse is hovering over toggle switch.":"Check if mouse is hovering over toggle switch.","Is mouse hovered over toggle switch?":"Is mouse hovered over toggle switch?","Mouse is hovering over _PARAM0_":"Mouse is hovering over _PARAM0_","Track width.":"Track width.","Track height.":"Track height.","Offset (Y) of shadow on thumb.":"Offset (Y) of shadow on thumb.","Offset (Y) of shadow on thumb":"Offset (Y) of shadow on thumb","Offset (X) of shadow on thumb.":"Offset (X) of shadow on thumb.","Offset (X) of shadow on thumb":"Offset (X) of shadow on thumb","Opacity of shadow on thumb.":"Opacity of shadow on thumb.","Thumb opacity.":"Thumb opacity.","Active track opacity.":"Active track opacity.","Inactive track opacity.":"Inactive track opacity.","Halo opacity (pressed).":"Halo opacity (pressed).","Halo opacity (hover).":"Halo opacity (hover).","Halo radius (pixels).":"Halo radius (pixels).","Active track color.":"Active track color.","Inactive track color.":"Inactive track color.","Active thumb color.":"Active thumb color.","Active thumb color":"Active thumb color","Check if the toggle switch is disabled.":"Check if the toggle switch is disabled.","Is disabled":"Is disabled","Inactive thumb color.":"Inactive thumb color.","Inactive thumb color":"Inactive thumb color","Top-down movement animator":"Top-down movement animator","Auto-set animations based on top-down movement direction (4 or 8 directions).":"Auto-set animations based on top-down movement direction (4 or 8 directions).","Change the animation according to the movement direction.":"Change the animation according to the movement direction.","Top-down movement":"Top-down movement","Scale animations according to speed":"Scale animations according to speed","Pause animations when objects stop":"Pause animations when objects stop","Animations must be called \"Walk0\", \"Walk1\"... for left, down...":"Animations must be called \"Walk0\", \"Walk1\"... for left, down...","Number of directions":"Number of directions","Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.":"Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.","Set to 90°, \"Walk0\" becomes the animation for down.":"Set to 90°, \"Walk0\" becomes the animation for down.","Update the animation according to the object direction.":"Update the animation according to the object direction.","Update animation":"Update animation","Update the animation of _PARAM0_":"Update the animation of _PARAM0_","the animation name of the object.":"the animation name of the object.","the animation name":"the animation name","Check if animations are paused when objects stop.":"Check if animations are paused when objects stop.","_PARAM0_ animations are paused when objects stop":"_PARAM0_ animations are paused when objects stop","Change whether animations are paused when objects stop.":"Change whether animations are paused when objects stop.","Pause animations of _PARAM0_ when stopped: _PARAM2_":"Pause animations of _PARAM0_ when stopped: _PARAM2_","IsPausingAnimation":"IsPausingAnimation","Check if animations are scaled according to speed.":"Check if animations are scaled according to speed.","_PARAM0_ animations are scaled according to speed":"_PARAM0_ animations are scaled according to speed","Change whether animations are scaled according to speed or not.":"Change whether animations are scaled according to speed or not.","Scale animations of _PARAM0_ according to speed: _PARAM2_":"Scale animations of _PARAM0_ according to speed: _PARAM2_","IsScalingAnimation":"IsScalingAnimation","Change the animation speed scale according to the object speed.":"Change the animation speed scale according to the object speed.","Animation speed scale":"Animation speed scale","Change the animation speed scale according to _PARAM0_ speed":"Change the animation speed scale according to _PARAM0_ speed","Pause the animation according to the object speed.":"Pause the animation according to the object speed.","Animation pause":"Animation pause","Pause the animation according to _PARAM0_ speed":"Pause the animation according to _PARAM0_ speed","Return the object movement direction.":"Return the object movement direction.","Return the difference between 2 directions.":"Return the difference between 2 directions.","Direction dirrerence":"Direction dirrerence","Other direction":"Other direction","Update the animation direction of the object.":"Update the animation direction of the object.","Update animation direction":"Update animation direction","Update the animation direction of _PARAM0_":"Update the animation direction of _PARAM0_","Update the animation name.":"Update the animation name.","Update animation name":"Update animation name","Update the animation name of _PARAM0_":"Update the animation name of _PARAM0_","Make object travel to random positions":"Make object travel to random positions","Move objects to random nearby positions using Pathfinding. Optional direction bias.":"Move objects to random nearby positions using Pathfinding. Optional direction bias.","Make object travel to a random position around the object current position. The movement is initiated only when the object is not moving already (its Pathfinding behavior speed is 0). Move towards a specified angle, if desired.":"Make object travel to a random position around the object current position. The movement is initiated only when the object is not moving already (its Pathfinding behavior speed is 0). Move towards a specified angle, if desired.","Make object travel to a random position, with optional direction":"Make object travel to a random position, with optional direction","Move _PARAM1_ to random positions, where each stop is at least _PARAM3_px and at most _PARAM4_px from the current position. Move towards angle _PARAM5_ with a bias of _PARAM6_":"Move _PARAM1_ to random positions, where each stop is at least _PARAM3_px and at most _PARAM4_px from the current position. Move towards angle _PARAM5_ with a bias of _PARAM6_","Object that will be travelling (must have Pathfinding behavior)":"Object that will be travelling (must have Pathfinding behavior)","Pathfinding Behavior (required)":"Pathfinding Behavior (required)","Minimum distance between each position (Default: 100px)":"Minimum distance between each position (Default: 100px)","Maximum distance between each position (Default: 200px)":"Maximum distance between each position (Default: 200px)","Direction (in degrees) the object will move towards (Range: 0-360)":"Direction (in degrees) the object will move towards (Range: 0-360)","Direction bias (Range: 0-1)":"Direction bias (Range: 0-1)","For example: \"0\" picks a completely random direction, \"0.5\" will select a direction within the half-circle that faces the specified direction, and \"1\" simply uses the specified direction.":"For example: \"0\" picks a completely random direction, \"0.5\" will select a direction within the half-circle that faces the specified direction, and \"1\" simply uses the specified direction.","Turret 2D movement":"Turret 2D movement","Rotate object like turret toward target position. Configurable speed and acceleration.":"Rotate object like turret toward target position. Configurable speed and acceleration.","A turret movement with customizable speed, acceleration and stop angles.":"A turret movement with customizable speed, acceleration and stop angles.","Turret movement":"Turret movement","Maximum rotation speed (in degrees per second)":"Maximum rotation speed (in degrees per second)","Maximum angle (use the same value for min and max to set no constraint)":"Maximum angle (use the same value for min and max to set no constraint)","Minimum angle (use the same value for min and max to set no constraint)":"Minimum angle (use the same value for min and max to set no constraint)","Aiming angle property":"Aiming angle property","Must move clockwise":"Must move clockwise","Must move counter-clockwise":"Must move counter-clockwise","Has moved":"Has moved","Target angle (MoveToward)":"Target angle (MoveToward)","Origin angle: the farest angle from AngleMin and AngleMax":"Origin angle: the farest angle from AngleMin and AngleMax","Check if the turret is moving.":"Check if the turret is moving.","Move clockwise.":"Move clockwise.","Move clockwise":"Move clockwise","Move _PARAM0_ clockwise":"Move _PARAM0_ clockwise","Move counter-clockwise.":"Move counter-clockwise.","Move counter-clockwise":"Move counter-clockwise","Move _PARAM0_ counter-clockwise":"Move _PARAM0_ counter-clockwise","Set angle toward a position.":"Set angle toward a position.","Set aiming angle toward a position":"Set aiming angle toward a position","Set the aiming angle of _PARAM0_ toward _PARAM2_;_PARAM3_":"Set the aiming angle of _PARAM0_ toward _PARAM2_;_PARAM3_","Move toward a position.":"Move toward a position.","Move _PARAM0_ toward _PARAM2_; _PARAM3_ within a _PARAM4_° margin":"Move _PARAM0_ toward _PARAM2_; _PARAM3_ within a _PARAM4_° margin","Angle margin":"Angle margin","Change the aiming angle.":"Change the aiming angle.","Aiming angle":"Aiming angle","Change the aiming angle of _PARAM0_ to _PARAM2_°":"Change the aiming angle of _PARAM0_ to _PARAM2_°","Aiming angle (between 0° and 360° if no stop angle are set).":"Aiming angle (between 0° and 360° if no stop angle are set).","Tween into view":"Tween into view","Tween objects from off-screen into position for smooth UI/cutscene entrances.":"Tween objects from off-screen into position for smooth UI/cutscene entrances.","Tween objects into position from off screen.":"Tween objects into position from off screen.","Motion":"Motion","Leave this value at 0 to move the object in from outside of the screen.":"Leave this value at 0 to move the object in from outside of the screen.","Tween in the object at creation":"Tween in the object at creation","Moving in easing":"Moving in easing","Moving out easing":"Moving out easing","Delete the object when the \"tween out of view\" action has finished":"Delete the object when the \"tween out of view\" action has finished","Fade in/out the object":"Fade in/out the object","The X position at the end of fade in":"The X position at the end of fade in","The Y position at the end of fade in":"The Y position at the end of fade in","Objects with opacity":"Objects with opacity","Move the object":"Move the object","Delay":"Delay","Fade in easing":"Fade in easing","Fade out easing":"Fade out easing","The X position at the beginning of fade in":"The X position at the beginning of fade in","The Y position at the beginning of fade in":"The Y position at the beginning of fade in","Return the X position at the beginning of the fade-in.":"Return the X position at the beginning of the fade-in.","Return the Y position at the beginning of the fade-in.":"Return the Y position at the beginning of the fade-in.","Tween the object to its set starting position.":"Tween the object to its set starting position.","Tween _PARAM0_ into view":"Tween _PARAM0_ into view","Tween the object to its off screen position.":"Tween the object to its off screen position.","Tween out of view":"Tween out of view","Tween _PARAM0_ out of view":"Tween _PARAM0_ out of view","Check if the object finished tweening into view.":"Check if the object finished tweening into view.","Tweened into view":"Tweened into view","_PARAM0_ finished tweening into view":"_PARAM0_ finished tweening into view","Check if the object finished tweened out of view.":"Check if the object finished tweened out of view.","Tweened out of view":"Tweened out of view","_PARAM0_ finished tweening out of view":"_PARAM0_ finished tweening out of view","Set whether to delete the object when the \"tween out of view\" action has finished.":"Set whether to delete the object when the \"tween out of view\" action has finished.","Delete after tween out":"Delete after tween out","Should delete _PARAM0_ when the \"tween out of view\" action has finished: _PARAM2_":"Should delete _PARAM0_ when the \"tween out of view\" action has finished: _PARAM2_","Should delete the object when the \"tween out of view\" action has finished":"Should delete the object when the \"tween out of view\" action has finished","Two choices dialog boxes":"Two choices dialog boxes","Two-choice dialog box with keyboard, gamepad, and touch support. Customizable text.":"Two-choice dialog box with keyboard, gamepad, and touch support. Customizable text.","A dialog box showing two options.":"A dialog box showing two options.","Two choices dialog box":"Two choices dialog box","Cancel with Escape key":"Cancel with Escape key","Enable or disable the escape key to close the dialog.":"Enable or disable the escape key to close the dialog.","Label for the \"Yes\" button":"Label for the \"Yes\" button","This is the button with identifier 0.":"This is the button with identifier 0.","Label for the \"No\" button":"Label for the \"No\" button","This is the button with identifier 1.":"This is the button with identifier 1.","Sound at hovering":"Sound at hovering","Check if the \"Yes\" button of the dialog was selected.":"Check if the \"Yes\" button of the dialog was selected.","\"Yes\" button is clicked":"\"Yes\" button is clicked","\"Yes\" button of _PARAM0_ is clicked":"\"Yes\" button of _PARAM0_ is clicked","Check if the \"No\" button of the dialog was selected.":"Check if the \"No\" button of the dialog was selected.","\"No\" button is clicked":"\"No\" button is clicked","\"No\" button of _PARAM0_ is clicked":"\"No\" button of _PARAM0_ is clicked","the highlighted button.":"the highlighted button.","Highlighted button":"Highlighted button","the highlighted button":"the highlighted button","the text shown by the dialog.":"the text shown by the dialog.","Text message":"Text message","the text":"the text","Webpage URL tools (Web browser)":"Webpage URL tools (Web browser)","Read/manipulate web game URLs: get/set attributes, query params, redirect, reload.":"Read/manipulate web game URLs: get/set attributes, query params, redirect, reload.","Gets the URL of the current game page.":"Gets the URL of the current game page.","Get the URL of the web page":"Get the URL of the web page","Reloads the current web page.":"Reloads the current web page.","Reload the web page":"Reload the web page","Reload the current page":"Reload the current page","Loads another page in place of the current one.":"Loads another page in place of the current one.","Redirect to another page":"Redirect to another page","Redirect to _PARAM1_":"Redirect to _PARAM1_","URL to redirect to":"URL to redirect to","Get an attribute from a URL.":"Get an attribute from a URL.","Get URL attribute":"Get URL attribute","The URL to get the attribute from":"The URL to get the attribute from","The attribute to get":"The attribute to get","Gets a parameter of a URL query string.":"Gets a parameter of a URL query string.","Get a parameter of a URL query string":"Get a parameter of a URL query string","The URL to get a query string parameter from":"The URL to get a query string parameter from","The query string parameter to get":"The query string parameter to get","Updates a specific part of a URL.":"Updates a specific part of a URL.","Update a URL attribute":"Update a URL attribute","The URL to change":"The URL to change","The attribute to update":"The attribute to update","The new value of this attribute":"The new value of this attribute","Sets or replaces a query string parameter of a URL.":"Sets or replaces a query string parameter of a URL.","Change a get parameter of a URL":"Change a get parameter of a URL","The query string parameter to update":"The query string parameter to update","The new value of the query string parameter":"The new value of the query string parameter","Removes a query string parameter from an URL.":"Removes a query string parameter from an URL.","Remove a get parameter of an URL":"Remove a get parameter of an URL","The query string parameter to remove":"The query string parameter to remove","Unique Identifiers":"Unique Identifiers","Generate unique identifiers: UUIDv4 random strings and incremented integer UIDs.":"Generate unique identifiers: UUIDv4 random strings and incremented integer UIDs.","Generates a unique identifier with the UUIDv4 pattern.":"Generates a unique identifier with the UUIDv4 pattern.","Generate a UUIDv4":"Generate a UUIDv4","Generates a unique identifier with the incremented integer pattern.":"Generates a unique identifier with the incremented integer pattern.","Generate an incremented integer UID":"Generate an incremented integer UID","Unicode":"Unicode","Convert between text and Unicode/binary representations. Basic string obfuscation support.":"Convert between text and Unicode/binary representations. Basic string obfuscation support.","Reverses the unicode of a string with a base.":"Reverses the unicode of a string with a base.","Reverse the unicode of a string":"Reverse the unicode of a string","String to reverse":"String to reverse","Base of the reverse (Default: 2)":"Base of the reverse (Default: 2)","Range of unicode characters (Put 16 here to support the most characters if you put 2 in the base)":"Range of unicode characters (Put 16 here to support the most characters if you put 2 in the base)","Converts a unicode representation into String with a base.":"Converts a unicode representation into String with a base.","Unicode to string":"Unicode to string","The unicode to convert to String":"The unicode to convert to String","Base":"Base","Seperator text (Optional)":"Seperator text (Optional)","Converts a string into unicode representation with a base.":"Converts a string into unicode representation with a base.","String to unicode conversion":"String to unicode conversion","The string to convert to unicode":"The string to convert to unicode","Values of multiple objects":"Values of multiple objects","Aggregate min/max/average position, size, Z-order across picked object instances.":"Aggregate min/max/average position, size, Z-order across picked object instances.","Minimum X position of picked object instances (using AABB of objects).":"Minimum X position of picked object instances (using AABB of objects).","Minimum X position of picked object instances":"Minimum X position of picked object instances","objects":"objects","Maximum X position of picked object instances (using AABB of objects).":"Maximum X position of picked object instances (using AABB of objects).","Maximum X position of picked object instances":"Maximum X position of picked object instances","Minimum Y position of picked object instances (using AABB of objects).":"Minimum Y position of picked object instances (using AABB of objects).","Minimum Y position of picked object instances":"Minimum Y position of picked object instances","Maximum Y position of picked object instances (using AABB of objects).":"Maximum Y position of picked object instances (using AABB of objects).","Maximum Y position of picked object instances":"Maximum Y position of picked object instances","Minimum Z order of picked object instances.":"Minimum Z order of picked object instances.","Minimum Z order of picked object instances":"Minimum Z order of picked object instances","Maximum Z order of picked object instances.":"Maximum Z order of picked object instances.","Maximum Z order of picked object instances":"Maximum Z order of picked object instances","Average Z order of picked object instances.":"Average Z order of picked object instances.","Average Z order of picked object instances":"Average Z order of picked object instances","X center point (absolute) of picked object instances.":"X center point (absolute) of picked object instances.","X center point (absolute) of picked object instances":"X center point (absolute) of picked object instances","Objects":"Objects","Objects that will be used to calculate their center point":"Objects that will be used to calculate their center point","Y center point (absolute) of picked object instances.":"Y center point (absolute) of picked object instances.","Y center point (absolute) of picked object instances":"Y center point (absolute) of picked object instances","X center point (average) of picked object instances.":"X center point (average) of picked object instances.","X center point (average) of picked object instances":"X center point (average) of picked object instances","Y center point (average) of picked object instances.":"Y center point (average) of picked object instances.","Y center point (average) of picked object instances":"Y center point (average) of picked object instances","Min object height of picked object instances.":"Min object height of picked object instances.","Min object height of picked object instances":"Min object height of picked object instances","Max object height of picked object instances.":"Max object height of picked object instances.","Max object height of picked object instances":"Max object height of picked object instances","Average height of picked object instances.":"Average height of picked object instances.","Average height of picked object instances":"Average height of picked object instances","Min object width of picked object instances.":"Min object width of picked object instances.","Min object width of picked object instances":"Min object width of picked object instances","Max object width of picked object instances.":"Max object width of picked object instances.","Max object width of picked object instances":"Max object width of picked object instances","Average width of picked object instances.":"Average width of picked object instances.","Average width of picked object instances":"Average width of picked object instances","Average horizontal force (X) of picked object instances.":"Average horizontal force (X) of picked object instances.","Average horizontal force (X) of picked object instances":"Average horizontal force (X) of picked object instances","Average vertical force (Y) of picked object instances.":"Average vertical force (Y) of picked object instances.","Average vertical force (Y) of picked object instances":"Average vertical force (Y) of picked object instances","Average angle of rotation of picked object instances.":"Average angle of rotation of picked object instances.","Average angle of rotation of picked object instances":"Average angle of rotation of picked object instances","WebSocket client":"WebSocket client","WebSocket client: connect to server, send/receive string messages in real-time.":"WebSocket client: connect to server, send/receive string messages in real-time.","Triggers if the client is currently connecting to the WebSocket server.":"Triggers if the client is currently connecting to the WebSocket server.","Connecting to a server":"Connecting to a server","Connecting to the server":"Connecting to the server","Triggers if the client is connected to a WebSocket server.":"Triggers if the client is connected to a WebSocket server.","Connected to a server":"Connected to a server","Connected to the server":"Connected to the server","Triggers if the connection to a WebSocket server was closed.":"Triggers if the connection to a WebSocket server was closed.","Connection to a server was closed":"Connection to a server was closed","Connection to the server closed":"Connection to the server closed","Connects to a WebSocket server.":"Connects to a WebSocket server.","Connect to server":"Connect to server","Connect to WebSocket server at _PARAM1_":"Connect to WebSocket server at _PARAM1_","The server address":"The server address","Disconnects from the current WebSocket server.":"Disconnects from the current WebSocket server.","Disconnect from server":"Disconnect from server","Disconnect from server (reason: _PARAM1_)":"Disconnect from server (reason: _PARAM1_)","The reason for disconnection":"The reason for disconnection","Triggers when the server has sent the client some data.":"Triggers when the server has sent the client some data.","An event was received":"An event was received","Data received from server":"Data received from server","Returns the piece of data from the server that is currently being processed.":"Returns the piece of data from the server that is currently being processed.","Data from server":"Data from server","Dismisses an event after processing it to allow processing the next one without waiting for the next frame.":"Dismisses an event after processing it to allow processing the next one without waiting for the next frame.","Mark as processed":"Mark as processed","Mark current event as completed":"Mark current event as completed","Sends a string to the server.":"Sends a string to the server.","Send data to the server":"Send data to the server","Send _PARAM1_ to the server":"Send _PARAM1_ to the server","The data to send to the server":"The data to send to the server","Triggers when a WebSocket error has occurred.":"Triggers when a WebSocket error has occurred.","An error occurred":"An error occurred","WebSocket error has occurred":"WebSocket error has occurred","Gets the last error that occurred.":"Gets the last error that occurred.","YSort":"YSort","Set Z-order from Y position for depth illusion in top-down/isometric views.":"Set Z-order from Y position for depth illusion in top-down/isometric views.","Set the depth (Z-order) of the instance to the value of its Y position in the scene, creating an illusion of depth. The origin point of the object is used to determine the Z-order.":"Set the depth (Z-order) of the instance to the value of its Y position in the scene, creating an illusion of depth. The origin point of the object is used to determine the Z-order.","Frameless preview window":"Frameless preview window","Requests the local preview window to be created without the native window frame.":"Requests the local preview window to be created without the native window frame.","Enable frameless preview window: _PARAM0_":"Enable frameless preview window: _PARAM0_","Enable frameless preview window?":"Enable frameless preview window?","Frameless game window":"Frameless game window","Requests the preview and exported desktop game windows to be created without the native window frame.":"Requests the preview and exported desktop game windows to be created without the native window frame.","Enable frameless game window: _PARAM0_":"Enable frameless game window: _PARAM0_","Enable frameless game window?":"Enable frameless game window?"}}; \ No newline at end of file diff --git a/newIDE/app/src/locales/en/messages.js b/newIDE/app/src/locales/en/messages.js index cabb9b47d593..fd0cf011c6c4 100644 --- a/newIDE/app/src/locales/en/messages.js +++ b/newIDE/app/src/locales/en/messages.js @@ -1 +1 @@ -/* eslint-disable */module.exports={languageData:{"plurals":function(n,ord){var s=String(n).split("."),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?"one":n10==2&&n100!=12?"two":n10==3&&n100!=13?"few":"other";return n==1&&v0?"one":"other"}},messages:{"\"{0}\" will be the new build of this game published on gd.games. Continue?":function(a){return["\"",a("0"),"\" will be the new build of this game published on gd.games. Continue?"]},"\"{0}\" will be unpublished on gd.games. Continue?":function(a){return["\"",a("0"),"\" will be unpublished on gd.games. Continue?"]},"% of parent":"% of parent","% of total":"% of total","(Events)":"(Events)","(Object)":"(Object)","(already installed in the project)":"(already installed in the project)","(default order)":"(default order)","(deleted)":"(deleted)","(install it from the Project Manager)":"(install it from the Project Manager)","(or paste actions)":"(or paste actions)","(or paste conditions)":"(or paste conditions)","(yet!)":"(yet!)","* (multiply by)":"* (multiply by)","+ (add)":"+ (add)","+ {0} tag(s)":function(a){return["+ ",a("0")," tag(s)"]},", objects /*{parameterObjects}*/":function(a){return[", objects /*",a("parameterObjects"),"*/"]},"- (subtract)":"- (subtract)","/ (divide by)":"/ (divide by)","/* Click here to choose objects to pass to JavaScript */":"/* Click here to choose objects to pass to JavaScript */","0,date":"0,date","0,date,date0":"0,date,date0","0,number,number0":"0,number,number0","1 child":"1 child","1 day ago":"1 day ago","1 hour ago":"1 hour ago","1 match":"1 match","1 minute":"1 minute","1 month":"1 month","1 new feedback":"1 new feedback","1 review":"1 review","1) Create a Certificate Signing Request and a Certificate":"1) Create a Certificate Signing Request and a Certificate","100% (Default)":"100% (Default)","100+ exports created":"100+ exports created","10th":"10th","1st":"1st","2 previews in 2 windows":"2 previews in 2 windows","2) Upload the Certificate generated by Apple":"2) Upload the Certificate generated by Apple","200%":"200%","2D effects":"2D effects","2D object":"2D object","2D objects can't be edited when in 3D mode":"2D objects can't be edited when in 3D mode","2nd":"2nd","3 previews in 3 windows":"3 previews in 3 windows","3) Upload one or more Mobile Provisioning Profiles":"3) Upload one or more Mobile Provisioning Profiles","3-part tutorial to creating and publishing a game from scratch.":"3-part tutorial to creating and publishing a game from scratch.","300%":"300%","3D effects":"3D effects","3D model":"3D model","3D models":"3D models","3D object":"3D object","3D platforms":"3D platforms","3D settings":"3D settings","3D, real-time editor (new)":"3D, real-time editor (new)","3rd":"3rd","4 previews in 4 windows":"4 previews in 4 windows","400%":"400%","4th":"4th","500%":"500%","5th":"5th","600%":"600%","6th":"6th","700%":"700%","7th":"7th","800%":"800%","8th":"8th","9th":"9th",":":":","< (less than)":"< (less than)","<0>For every child in<1><2/>{0}, store the child in variable<3><4/>{1}, the child name in<5><6/>{2}and do:":function(a){return["<0>For every child in<1><2/>",a("0"),", store the child in variable<3><4/>",a("1"),", the child name in<5><6/>",a("2"),"and do:"]},"<0>Share your game and start collecting data from your players to better understand them.":"<0>Share your game and start collecting data from your players to better understand them.","<0>{0} set to {1}.":function(a){return["<0>",a("0")," set to ",a("1"),"."]},"":"","":"","":"",""," (optional)","","= (equal to)":"= (equal to)","= (set to)":"= (set to)","> (greater than)":"> (greater than)","A condition that can be used in other events sheet. You can define the condition parameters: objects, texts, numbers, layers, etc...":"A condition that can be used in other events sheet. You can define the condition parameters: objects, texts, numbers, layers, etc...","A condition that can be used on objects with the behavior. You can define the condition parameters: objects, texts, numbers, layers, etc...":"A condition that can be used on objects with the behavior. You can define the condition parameters: objects, texts, numbers, layers, etc...","A condition that can be used on the object. You can define the condition parameters: objects, texts, numbers, layers, etc...":"A condition that can be used on the object. You can define the condition parameters: objects, texts, numbers, layers, etc...","A critical error occurred in the {componentTitle}.":function(a){return["A critical error occurred in the ",a("componentTitle"),"."]},"A functioning save has been found!":"A functioning save has been found!","A game to publish":"A game to publish","A global object with this name already exists. Please change the group name before setting it as a global group":"A global object with this name already exists. Please change the group name before setting it as a global group","A global object with this name already exists. Please change the object name before setting it as a global object":"A global object with this name already exists. Please change the object name before setting it as a global object","A lighting layer was created. Lights will be placed on it automatically. You can change the ambient light color in the properties of this layer":"A lighting layer was created. Lights will be placed on it automatically. You can change the ambient light color in the properties of this layer","A link or file will be created but the game will not be registered.":"A link or file will be created but the game will not be registered.","A new physics engine (Physics Engine 2.0) is now available. You should prefer using it for new game. For existing games, note that the two behaviors are not compatible, so you should only use one of them with your objects.":"A new physics engine (Physics Engine 2.0) is now available. You should prefer using it for new game. For existing games, note that the two behaviors are not compatible, so you should only use one of them with your objects.","A new secure window will open to complete the purchase.":"A new secure window will open to complete the purchase.","A new update is available!":"A new update is available!","A new update is being downloaded...":"A new update is being downloaded...","A new update will be installed after you quit and relaunch GDevelop":"A new update will be installed after you quit and relaunch GDevelop","A new window":"A new window","A scale under 1 on a Bitmap text object can downgrade the quality text, prefer to remake a bitmap font smaller in the external bmFont editor.":"A scale under 1 on a Bitmap text object can downgrade the quality text, prefer to remake a bitmap font smaller in the external bmFont editor.","A student account cannot be an admin of your team.":"A student account cannot be an admin of your team.","A temporary image to help you visualize the shape/polygon":"A temporary image to help you visualize the shape/polygon","AI Chat History":"AI Chat History","API Issuer ID: {0}":function(a){return["API Issuer ID: ",a("0")]},"API Issuer given by Apple":"API Issuer given by Apple","API key given by Apple":"API key given by Apple","API key: {0}":function(a){return["API key: ",a("0")]},"APK (for testing on device or sharing outside Google Play)":"APK (for testing on device or sharing outside Google Play)","Abandon":"Abandon","Abort":"Abort","About GDevelop":"About GDevelop","About dialog":"About dialog","About education plan":"About education plan","Accept":"Accept","Access GDevelop\u2019s resources for teaching game development and promote careers in technology.":"Access GDevelop\u2019s resources for teaching game development and promote careers in technology.","Access project history, name saves, restore older versions.<0/>Get a subscription to enable this feature.":"Access project history, name saves, restore older versions.<0/>Get a subscription to enable this feature.","Access public profile":"Access public profile","Achievements":"Achievements","Action":"Action","Action with operator":"Action with operator","Actions":"Actions","Activate":"Activate","Activate Later":"Activate Later","Activate Now":"Activate Now","Activate my subscription":"Activate my subscription","Activate your subscription code":"Activate your subscription code","Activate {productName}":function(a){return["Activate ",a("productName")]},"Activated":"Activated","Activating...":"Activating...","Active":"Active","Active until {0}":function(a){return["Active until ",a("0")]},"Active, we will get in touch to get the campaign up!":"Active, we will get in touch to get the campaign up!","Ad revenue sharing off":"Ad revenue sharing off","Ad revenue sharing on":"Ad revenue sharing on","Adapt automatically":"Adapt automatically","Adapt collision mask?":"Adapt collision mask?","Adapt events in scene <0>{scene_name} (\"{placementHint}\").":function(a){return["Adapt events in scene <0>",a("scene_name")," (\"",a("placementHint"),"\")."]},"Add":"Add","Add 2D lighting layer":"Add 2D lighting layer","Add <0>{object_name} to scene <1>{scene_name}.":function(a){return["Add <0>",a("object_name")," to scene <1>",a("scene_name"),"."]},"Add Ordering":"Add Ordering","Add a 2D effect":"Add a 2D effect","Add a 3D effect":"Add a 3D effect","Add a Long Description":"Add a Long Description","Add a New Extension":"Add a New Extension","Add a behavior":"Add a behavior","Add a certificate/profile first":"Add a certificate/profile first","Add a collaborator":"Add a collaborator","Add a comment":"Add a comment","Add a folder":"Add a folder","Add a function":"Add a function","Add a health bar for handle damage.":"Add a health bar for handle damage.","Add a health bar to this jumping character, losing health when hitting spikes.":"Add a health bar to this jumping character, losing health when hitting spikes.","Add a layer":"Add a layer","Add a link to your donation page. It will be displayed on your gd.games profile and game pages.":"Add a link to your donation page. It will be displayed on your gd.games profile and game pages.","Add a local variable":"Add a local variable","Add a local variable to the selected event":"Add a local variable to the selected event","Add a new behavior to the object":"Add a new behavior to the object","Add a new empty event":"Add a new empty event","Add a new event":"Add a new event","Add a new folder":"Add a new folder","Add a new function":"Add a new function","Add a new group":"Add a new group","Add a new group...":"Add a new group...","Add a new object":"Add a new object","Add a new option":"Add a new option","Add a new property":"Add a new property","Add a parameter":"Add a parameter","Add a parameter below":"Add a parameter below","Add a point":"Add a point","Add a property":"Add a property","Add a scene":"Add a scene","Add a score and display it on the screen":"Add a score and display it on the screen","Add a sprite":"Add a sprite","Add a sub-condition":"Add a sub-condition","Add a sub-event to the selected event":"Add a sub-event to the selected event","Add a time attack mode, where you have to reach the end as fast as possible.":"Add a time attack mode, where you have to reach the end as fast as possible.","Add a time attack mode.":"Add a time attack mode.","Add a variable":"Add a variable","Add a vertex":"Add a vertex","Add action":"Add action","Add again":"Add again","Add an Auth Key first":"Add an Auth Key first","Add an animation":"Add an animation","Add an event":"Add an event","Add an external layout":"Add an external layout","Add an object":"Add an object","Add any object variable to the group":"Add any object variable to the group","Add asset":"Add asset","Add characters and objects to the scene.":"Add characters and objects to the scene.","Add child":"Add child","Add collaborator":"Add collaborator","Add collision mask":"Add collision mask","Add condition":"Add condition","Add external events":"Add external events","Add instance to the scene":"Add instance to the scene","Add leaderboards to your online Game":"Add leaderboards to your online Game","Add new":"Add new","Add object":"Add object","Add or edit":"Add or edit","Add parameter...":"Add parameter...","Add personality and publish your game.":"Add personality and publish your game.","Add personality to your game and publish it online.":"Add personality to your game and publish it online.","Add player logins and a leaderboard.":"Add player logins and a leaderboard.","Add player logins to your game and add a leaderboard.":"Add player logins to your game and add a leaderboard.","Add solid rocks that falls from the sky at a random position around the player every 0.5 seconds":"Add solid rocks that falls from the sky at a random position around the player every 0.5 seconds","Add the assets":"Add the assets","Add these assets to my scene":"Add these assets to my scene","Add these assets to the project":"Add these assets to the project","Add this asset to my scene":"Add this asset to my scene","Add this asset to the project":"Add this asset to the project","Add to project":"Add to project","Add to the scene":"Add to the scene","Add variable":"Add variable","Add variable...":"Add variable...","Add your Discord username to get a role on the GDevelop Discord or access to a dedicated channel if you have a Gold or Pro subscription! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"Add your Discord username to get a role on the GDevelop Discord or access to a dedicated channel if you have a Gold or Pro subscription! Join the [GDevelop Discord](https://discord.gg/gdevelop).","Add your Discord username to get a special role on the GDevelop Discord! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"Add your Discord username to get a special role on the GDevelop Discord! Join the [GDevelop Discord](https://discord.gg/gdevelop).","Add your Discord username to get access to a dedicated channel! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"Add your Discord username to get access to a dedicated channel! Join the [GDevelop Discord](https://discord.gg/gdevelop).","Add your first animation":"Add your first animation","Add your first behavior":"Add your first behavior","Add your first characters to the scene and throw your first objects.":"Add your first characters to the scene and throw your first objects.","Add your first effect":"Add your first effect","Add your first event":"Add your first event","Add your first global variable":"Add your first global variable","Add your first instance variable":"Add your first instance variable","Add your first object group variable":"Add your first object group variable","Add your first object variable":"Add your first object variable","Add your first parameter":"Add your first parameter","Add your first property":"Add your first property","Add your first scene variable":"Add your first scene variable","Add {behaviorName} (<0>{behaviorTypeLabel}) behavior to <1>{object_name} in scene <2>{scene_name}.":function(a){return["Add ",a("behaviorName")," (<0>",a("behaviorTypeLabel"),") behavior to <1>",a("object_name")," in scene <2>",a("scene_name"),"."]},"Add...":"Add...","Adding...":"Adding...","Additional properties will appear here when you add behaviors to objects, such as the 2D or 3D Physics Engine.":"Additional properties will appear here when you add behaviors to objects, such as the 2D or 3D Physics Engine.","Additive rendering":"Additive rendering","Adjust height to fill screen (extend or crop)":"Adjust height to fill screen (extend or crop)","Adjust width to fill screen (extend or crop)":"Adjust width to fill screen (extend or crop)","Ads":"Ads","Advanced":"Advanced","Advanced course":"Advanced course","Advanced options":"Advanced options","Advanced properties":"Advanced properties","Advanced settings":"Advanced settings","Adventure":"Adventure","After watching the video, use this template to complete the following tasks.":"After watching the video, use this template to complete the following tasks.","Alive":"Alive","All":"All","All asset packs":"All asset packs","All behaviors being directly referenced in the events:":"All behaviors being directly referenced in the events:","All builds":"All builds","All categories":"All categories","All current entries will be deleted, are you sure you want to reset this leaderboard? This can't be undone.":"All current entries will be deleted, are you sure you want to reset this leaderboard? This can't be undone.","All entries":"All entries","All entries are displayed.":"All entries are displayed.","All exports":"All exports","All feedbacks processed":"All feedbacks processed","All game templates":"All game templates","All objects potentially used in events: {0}":function(a){return["All objects potentially used in events: ",a("0")]},"All the entries of {0} will be deleted too. This can't be undone.":function(a){return["All the entries of ",a("0")," will be deleted too. This can't be undone."]},"All your changes will be lost. Are you sure you want to cancel?":"All your changes will be lost. Are you sure you want to cancel?","All your games were played more than {0} times in total!":function(a){return["All your games were played more than ",a("0")," times in total!"]},"Allow players to join after the game has started":"Allow players to join after the game has started","Allow this project to run npm scripts?":"Allow this project to run npm scripts?","Allow to display advertisements on the game page on gd.games.":"Allow to display advertisements on the game page on gd.games.","Alpha":"Alpha","Alphabet":"Alphabet","Already a member?":"Already a member?","Already added":"Already added","Already cancelled":"Already cancelled","Already in project":"Already in project","Already installed":"Already installed","Alright, here's my approach:":"Alright, here's my approach:","Always":"Always","Always display the preview window on top of the editor":"Always display the preview window on top of the editor","Always preload at startup":"Always preload at startup","Always visible":"Always visible","Ambient light color":"Ambient light color","An action that can be used in other events sheet. You can define the action parameters: objects, texts, numbers, layers, etc...":"An action that can be used in other events sheet. You can define the action parameters: objects, texts, numbers, layers, etc...","An action that can be used on objects with the behavior. You can define the action parameters: objects, texts, numbers, layers, etc...":"An action that can be used on objects with the behavior. You can define the action parameters: objects, texts, numbers, layers, etc...","An action that can be used on the object. You can define the action parameters: objects, texts, numbers, layers, etc...":"An action that can be used on the object. You can define the action parameters: objects, texts, numbers, layers, etc...","An error happened":"An error happened","An error happened when retrieving the game's configuration. Please check your internet connection or try again later.":"An error happened when retrieving the game's configuration. Please check your internet connection or try again later.","An error happened when sending your request, please try again.":"An error happened when sending your request, please try again.","An error happened while cashing out. Verify your internet connection or try again later.":"An error happened while cashing out. Verify your internet connection or try again later.","An error happened while loading the certificates.":"An error happened while loading the certificates.","An error happened while loading this extension. Please check that it is a proper extension file and compatible with this version of GDevelop":"An error happened while loading this extension. Please check that it is a proper extension file and compatible with this version of GDevelop","An error happened while purchasing this product. Verify your internet connection or try again later.":"An error happened while purchasing this product. Verify your internet connection or try again later.","An error happened while registering the game. Verify your internet connection or retry later.":"An error happened while registering the game. Verify your internet connection or retry later.","An error happened while removing the collaborator. Verify your internet connection or retry later.":"An error happened while removing the collaborator. Verify your internet connection or retry later.","An error happened while transferring your credits. Verify your internet connection or try again later.":"An error happened while transferring your credits. Verify your internet connection or try again later.","An error happened while unregistering the game. Verify your internet connection or retry later.":"An error happened while unregistering the game. Verify your internet connection or retry later.","An error has occurred during functions generation. If GDevelop is installed, verify that nothing is preventing GDevelop from writing on disk. If you're running GDevelop online, verify your internet connection and refresh functions from the Project Manager.":"An error has occurred during functions generation. If GDevelop is installed, verify that nothing is preventing GDevelop from writing on disk. If you're running GDevelop online, verify your internet connection and refresh functions from the Project Manager.","An error has occurred in functions. Click to reload them.":"An error has occurred in functions. Click to reload them.","An error occured while storing the auth key.":"An error occured while storing the auth key.","An error occured while storing the provisioning profile.":"An error occured while storing the provisioning profile.","An error occurred in the {componentTitle}.":function(a){return["An error occurred in the ",a("componentTitle"),"."]},"An error occurred when creating a new leaderboard, please close the dialog, come back and try again.":"An error occurred when creating a new leaderboard, please close the dialog, come back and try again.","An error occurred when deleting the entry, please try again.":"An error occurred when deleting the entry, please try again.","An error occurred when deleting the leaderboard, please close the dialog, come back and try again.":"An error occurred when deleting the leaderboard, please close the dialog, come back and try again.","An error occurred when deleting the project. Please try again later.":"An error occurred when deleting the project. Please try again later.","An error occurred when downloading the tutorials.":"An error occurred when downloading the tutorials.","An error occurred when fetching the entries of the leaderboard, please try again.":"An error occurred when fetching the entries of the leaderboard, please try again.","An error occurred when fetching the leaderboards, please close the dialog and reopen it.":"An error occurred when fetching the leaderboards, please close the dialog and reopen it.","An error occurred when fetching the store content. Please try again later.":"An error occurred when fetching the store content. Please try again later.","An error occurred when opening or saving the project. Try again later or choose another location to save the project to.":"An error occurred when opening or saving the project. Try again later or choose another location to save the project to.","An error occurred when opening the project. Check that your internet connection is working and that your browser allows the use of cookies.":"An error occurred when opening the project. Check that your internet connection is working and that your browser allows the use of cookies.","An error occurred when resetting the leaderboard, please close the dialog, come back and try again.":"An error occurred when resetting the leaderboard, please close the dialog, come back and try again.","An error occurred when retrieving leaderboards, please try again later.":"An error occurred when retrieving leaderboards, please try again later.","An error occurred when saving the project, please verify your internet connection or try again later.":"An error occurred when saving the project, please verify your internet connection or try again later.","An error occurred when saving the project. Please try again by choosing another location.":"An error occurred when saving the project. Please try again by choosing another location.","An error occurred when saving the project. Please try again later.":"An error occurred when saving the project. Please try again later.","An error occurred when sending the form, please verify your internet connection and try again later.":"An error occurred when sending the form, please verify your internet connection and try again later.","An error occurred when setting the leaderboard as default, please close the dialog, come back and try again.":"An error occurred when setting the leaderboard as default, please close the dialog, come back and try again.","An error occurred when updating the appearance of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the appearance of the leaderboard, please close the dialog, come back and try again.","An error occurred when updating the display choice of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the display choice of the leaderboard, please close the dialog, come back and try again.","An error occurred when updating the name of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the name of the leaderboard, please close the dialog, come back and try again.","An error occurred when updating the sort direction of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the sort direction of the leaderboard, please close the dialog, come back and try again.","An error occurred when updating the visibility of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the visibility of the leaderboard, please close the dialog, come back and try again.","An error occurred while accepting the invitation. Please try again later.":"An error occurred while accepting the invitation. Please try again later.","An error occurred while activating your purchase. Please contact support if the problem persists.":"An error occurred while activating your purchase. Please contact support if the problem persists.","An error occurred while changing the password. Please try again later.":"An error occurred while changing the password. Please try again later.","An error occurred while creating the accounts.":"An error occurred while creating the accounts.","An error occurred while creating the group. Please try again later.":"An error occurred while creating the group. Please try again later.","An error occurred while editing the student. Please try again.":"An error occurred while editing the student. Please try again.","An error occurred while exporting your game. Verify your internet connection and try again.":"An error occurred while exporting your game. Verify your internet connection and try again.","An error occurred while fetching the project version, try again later.":"An error occurred while fetching the project version, try again later.","An error occurred while generating some icons. Verify that the image is valid and try again.":"An error occurred while generating some icons. Verify that the image is valid and try again.","An error occurred while generating the certificate.":"An error occurred while generating the certificate.","An error occurred while loading audio resources.":"An error occurred while loading audio resources.","An error occurred while loading fonts.":"An error occurred while loading fonts.","An error occurred while loading your AI requests.":"An error occurred while loading your AI requests.","An error occurred while loading your builds. Verify your internet connection and try again.":"An error occurred while loading your builds. Verify your internet connection and try again.","An error occurred while renaming the group name. Please try again later.":"An error occurred while renaming the group name. Please try again later.","An error occurred while restoring the project version: {0}":function(a){return["An error occurred while restoring the project version: ",a("0")]},"An error occurred while retrieving feedbacks for this game.":"An error occurred while retrieving feedbacks for this game.","An error occurred while trying to recover your project last versions. Please try again later.":"An error occurred while trying to recover your project last versions. Please try again later.","An error occurred, please try again later.":"An error occurred, please try again later.","An error occurred.":"An error occurred.","An error occurred. Please try again.":"An error occurred. Please try again.","An expression that can be used in formulas. Can either return a number or a string, and take some parameters.":"An expression that can be used in formulas. Can either return a number or a string, and take some parameters.","An expression that can be used on objects with the behavior. Can either return a number or a string, and take some parameters.":"An expression that can be used on objects with the behavior. Can either return a number or a string, and take some parameters.","An expression that can be used on the object. Can either return a number or a string, and take some parameters.":"An expression that can be used on the object. Can either return a number or a string, and take some parameters.","An extension with this name already exists in the project. Importing this extension will replace it.":"An extension with this name already exists in the project. Importing this extension will replace it.","An external editor is opened.":"An external editor is opened.","An internet connection is required to administrate your game's leaderboards.":"An internet connection is required to administrate your game's leaderboards.","An object that can be moved, rotated and scaled in 2D.":"An object that can be moved, rotated and scaled in 2D.","An object that can be moved, rotated and scaled in 3D.":"An object that can be moved, rotated and scaled in 3D.","An unexpected error happened. Please contact us for more details.":"An unexpected error happened. Please contact us for more details.","An unexpected error happened. Verify your internet connection or try again later.":"An unexpected error happened. Verify your internet connection or try again later.","An unexpected error occurred. The list has been refreshed.":"An unexpected error occurred. The list has been refreshed.","An unknown error happened, ensure your password is entered correctly.":"An unknown error happened, ensure your password is entered correctly.","An unknown error happened.":"An unknown error happened.","An update is installing.":"An update is installing.","An update is ready to be installed. Close ALL GDevelop apps or tabs in your browser, then open it again.":"An update is ready to be installed. Close ALL GDevelop apps or tabs in your browser, then open it again.","Analytics":"Analytics","Analyze Objects Used in this Event":"Analyze Objects Used in this Event","Analyzing the object properties":"Analyzing the object properties","Analyzing the project":"Analyzing the project","And others...":"And others...","And {remainingResultsCount} more results.":function(a){return["And ",a("remainingResultsCount")," more results."]},"Android":"Android","Android App Bundle (for publishing on Google Play)":"Android App Bundle (for publishing on Google Play)","Android Build":"Android Build","Android builds":"Android builds","Android icons and Android 12+ splashscreen":"Android icons and Android 12+ splashscreen","Android mobile devices (Google Play, Amazon)":"Android mobile devices (Google Play, Amazon)","Angle":"Angle","Animation":"Animation","Animation #{animationIndex}":function(a){return["Animation #",a("animationIndex")]},"Animation #{i} {0}":function(a){return["Animation #",a("i")," ",a("0")]},"Animations":"Animations","Animations are a sequence of images.":"Animations are a sequence of images.","Anonymous":"Anonymous","Anonymous players":"Anonymous players","Another personal website, newgrounds.com page, etc.":"Another personal website, newgrounds.com page, etc.","Answer":"Answer","Answer a 1-minute survey to personalize your suggested content.":"Answer a 1-minute survey to personalize your suggested content.","Answers video":"Answers video","Anti-aliasing":"Anti-aliasing","Antialising for 3D":"Antialising for 3D","Any object":"Any object","Any submitted score that is higher than the set value will not be saved in the leaderboard.":"Any submitted score that is higher than the set value will not be saved in the leaderboard.","Any submitted score that is lower than the set value will not be saved in the leaderboard.":"Any submitted score that is lower than the set value will not be saved in the leaderboard.","Any unsaved changes in the project will be lost.":"Any unsaved changes in the project will be lost.","Anyone can access it.":"Anyone can access it.","Anyone with the link can see it, but it is not listed in your game's leaderboards.":"Anyone with the link can see it, but it is not listed in your game's leaderboards.","App or tool":"App or tool","Appearance":"Appearance","Apple":"Apple","Apple App Store":"Apple App Store","Apple Certificates & Profiles":"Apple Certificates & Profiles","Apple mobile devices (App Store)":"Apple mobile devices (App Store)","Apply":"Apply","Apply changes":"Apply changes","Apply changes to preview":"Apply changes to preview","Apply changes to the running preview":"Apply changes to the running preview","Apply this change:":"Apply this change:","Archive accounts":"Archive accounts","Archive {0} accounts":function(a){return["Archive ",a("0")," accounts"]},"Archive {0} accounts?":function(a){return["Archive ",a("0")," accounts?"]},"Archived accounts":"Archived accounts","Are you sure you want to delete this entry? This can't be undone.":"Are you sure you want to delete this entry? This can't be undone.","Are you sure you want to hide this hint? You won't see it again, unless you re-activate it from the preferences.":"Are you sure you want to hide this hint? You won't see it again, unless you re-activate it from the preferences.","Are you sure you want to quit GDevelop?":"Are you sure you want to quit GDevelop?","Are you sure you want to remove these external events? This can't be undone.":"Are you sure you want to remove these external events? This can't be undone.","Are you sure you want to remove this animation?":"Are you sure you want to remove this animation?","Are you sure you want to remove this animation? You will lose the custom collision mask you have set for this object.":"Are you sure you want to remove this animation? You will lose the custom collision mask you have set for this object.","Are you sure you want to remove this behavior? This can't be undone.":"Are you sure you want to remove this behavior? This can't be undone.","Are you sure you want to remove this external layout? This can't be undone.":"Are you sure you want to remove this external layout? This can't be undone.","Are you sure you want to remove this folder and all its content (objects {0})? This can't be undone.":function(a){return["Are you sure you want to remove this folder and all its content (objects ",a("0"),")? This can't be undone."]},"Are you sure you want to remove this folder and all its functions ({0})? This can't be undone.":function(a){return["Are you sure you want to remove this folder and all its functions (",a("0"),")? This can't be undone."]},"Are you sure you want to remove this folder and all its properties ({0})? This can't be undone.":function(a){return["Are you sure you want to remove this folder and all its properties (",a("0"),")? This can't be undone."]},"Are you sure you want to remove this folder and with it the function {0}? This can't be undone.":function(a){return["Are you sure you want to remove this folder and with it the function ",a("0"),"? This can't be undone."]},"Are you sure you want to remove this folder and with it the object {0}? This can't be undone.":function(a){return["Are you sure you want to remove this folder and with it the object ",a("0"),"? This can't be undone."]},"Are you sure you want to remove this folder and with it the property {0}? This can't be undone.":function(a){return["Are you sure you want to remove this folder and with it the property ",a("0"),"? This can't be undone."]},"Are you sure you want to remove this function? This can't be undone.":"Are you sure you want to remove this function? This can't be undone.","Are you sure you want to remove this group? This can't be undone.":"Are you sure you want to remove this group? This can't be undone.","Are you sure you want to remove this object? This can't be undone.":"Are you sure you want to remove this object? This can't be undone.","Are you sure you want to remove this resource? This can't be undone.":"Are you sure you want to remove this resource? This can't be undone.","Are you sure you want to remove this scene? This can't be undone.":"Are you sure you want to remove this scene? This can't be undone.","Are you sure you want to remove this variant from your project? This can't be undone.":"Are you sure you want to remove this variant from your project? This can't be undone.","Are you sure you want to reset all shortcuts to their default values?":"Are you sure you want to reset all shortcuts to their default values?","Are you sure you want to restore the project to the state saved at this point in the AI conversation? This will overwrite the current project state.":"Are you sure you want to restore the project to the state saved at this point in the AI conversation? This will overwrite the current project state.","Are you sure you want to unregister this game?{0}If you haven't saved it, it will disappear from your games dashboard and you won't get access to player services, unless you register it again.":function(a){return["Are you sure you want to unregister this game?",a("0"),"If you haven't saved it, it will disappear from your games dashboard and you won't get access to player services, unless you register it again."]},"Are you teaching or learning game development?":"Are you teaching or learning game development?","Around 1 or 2 months":"Around 1 or 2 months","Around 3 to 5 months":"Around 3 to 5 months","Array":"Array","Art & Animation":"Art & Animation","As a percent of the game width.":"As a percent of the game width.","As a teacher, you will use one seat in the plan so make sure to include yourself!":"As a teacher, you will use one seat in the plan so make sure to include yourself!","Ask AI":"Ask AI","Ask AI (AI agent and chatbot)":"Ask AI (AI agent and chatbot)","Ask a follow up question":"Ask a follow up question","Ask every time":"Ask every time","Ask the AI":"Ask the AI","Ask your questions to the community":"Ask your questions to the community","Asset Store":"Asset Store","Asset pack bundles":"Asset pack bundles","Asset pack not found":"Asset pack not found","Asset pack not found - An error occurred, please try again later.":"Asset pack not found - An error occurred, please try again later.","Asset packs will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this pack (or restore your existing purchase).":"Asset packs will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this pack (or restore your existing purchase).","Asset store dialog":"Asset store dialog","Asset store tag":"Asset store tag","Assets":"Assets","Assets (coming soon!)":"Assets (coming soon!)","Assets import can't be undone. Make sure to backup your project beforehand.":"Assets import can't be undone. Make sure to backup your project beforehand.","Associated resource name":"Associated resource name","Asynchronous":"Asynchronous","At launch":"At launch","Atlas":"Atlas","Atlas resource":"Atlas resource","Attached object":"Attached object","Audio":"Audio","Audio & Sound":"Audio & Sound","Audio resource":"Audio resource","Audio type":"Audio type","Auth Key (App Store upload)":"Auth Key (App Store upload)","Auth Key for upload to App Store Connect":"Auth Key for upload to App Store Connect","Authors":"Authors","Auto download and install updates (recommended)":"Auto download and install updates (recommended)","Auto-save project on preview":"Auto-save project on preview","Automated":"Automated","Automatic collision mask activated. Click on the button to replace it with a custom one.":"Automatic collision mask activated. Click on the button to replace it with a custom one.","Automatic creation of lighting layer":"Automatic creation of lighting layer","Automatically follow the base layer.":"Automatically follow the base layer.","Automatically log in as a player in preview":"Automatically log in as a player in preview","Automatically open the diagnostic report at preview":"Automatically open the diagnostic report at preview","Automatically re-open the project edited during last session":"Automatically re-open the project edited during last session","Automatically take a screenshot in game previews":"Automatically take a screenshot in game previews","Automatically use GDevelop credits for AI requests when run out of AI credits":"Automatically use GDevelop credits for AI requests when run out of AI credits","Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.":"Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.","Average user feedback":"Average user feedback","Back":"Back","Back (Additional button, typically the Browser Back button)":"Back (Additional button, typically the Browser Back button)","Back face":"Back face","Back to discover":"Back to discover","Back to {0}":function(a){return["Back to ",a("0")]},"Background":"Background","Background and cameras":"Background and cameras","Background color":"Background color","Background color:":"Background color:","Background fade in duration (in seconds)":"Background fade in duration (in seconds)","Background image":"Background image","Background preloading of scene resources":"Background preloading of scene resources","Backgrounds":"Backgrounds","Base layer":"Base layer","Base layer properties":"Base layer properties","Be careful with this action, you may have problems exiting the preview if you don't add a way to toggle it back.":"Be careful with this action, you may have problems exiting the preview if you don't add a way to toggle it back.","Before installing this asset, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["Before installing this asset, it's strongly recommended to update these extensions",a("0"),"Do you want to update them now?"]},"Before installing this behavior, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["Before installing this behavior, it's strongly recommended to update these extensions",a("0"),"Do you want to update them now?"]},"Before installing this extension, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["Before installing this extension, it's strongly recommended to update these extensions",a("0"),"Do you want to update them now?"]},"Before you go, make sure that you've unpublished all your games on gd.games. Otherwise they will stay visible to the community. Are you sure you want to permanently delete your account? This action cannot be undone.":"Before you go, make sure that you've unpublished all your games on gd.games. Otherwise they will stay visible to the community. Are you sure you want to permanently delete your account? This action cannot be undone.","Before you go...":"Before you go...","Begin a driving game with a controllable car":"Begin a driving game with a controllable car","Begin a top-down adventure with one controllable character.":"Begin a top-down adventure with one controllable character.","Beginner":"Beginner","Beginner course":"Beginner course","Behavior":"Behavior","Behavior (for the previous object)":"Behavior (for the previous object)","Behavior Configuration":"Behavior Configuration","Behavior name":"Behavior name","Behavior properties":"Behavior properties","Behavior type":"Behavior type","Behaviors":"Behaviors","Behaviors add features to objects in a matter of clicks.":"Behaviors add features to objects in a matter of clicks.","Behaviors are attached to objects and make them alive. The rules of the game can be created using behaviors and events.":"Behaviors are attached to objects and make them alive. The rules of the game can be created using behaviors and events.","Behaviors of {objectOrGroupName}: {0} ;":function(a){return["Behaviors of ",a("objectOrGroupName"),": ",a("0")," ;"]},"Bio":"Bio","Bitmap Font":"Bitmap Font","Bitmap font resource":"Bitmap font resource","Block preview and export when diagnostic errors are found":"Block preview and export when diagnostic errors are found","Blocked on GDevelop?":"Blocked on GDevelop?","Blur radius":"Blur radius","Bold":"Bold","Boolean":"Boolean","Boolean (checkbox)":"Boolean (checkbox)","Bottom":"Bottom","Bottom bound":"Bottom bound","Bottom bound should be greater than right bound":"Bottom bound should be greater than right bound","Bottom face":"Bottom face","Bottom left corner":"Bottom left corner","Bottom margin":"Bottom margin","Bottom right corner":"Bottom right corner","Bounce rate":"Bounce rate","Bounds":"Bounds","Branding":"Branding","Branding and Loading screen":"Branding and Loading screen","Break into the <0>booming industry of casual gaming. Sharpen your skills and become a professional. Start for free:":"Break into the <0>booming industry of casual gaming. Sharpen your skills and become a professional. Start for free:","Breaking changes":"Breaking changes","Bring to front":"Bring to front","Browse":"Browse","Browse all templates":"Browse all templates","Browse assets":"Browse assets","Browse bundle":"Browse bundle","Browser":"Browser","Build and download":"Build and download","Build could not start or errored. Please check your internet connection or try again later.":"Build could not start or errored. Please check your internet connection or try again later.","Build dynamic levels with tiles.":"Build dynamic levels with tiles.","Build is starting...":"Build is starting...","Build open for feedbacks":"Build open for feedbacks","Build started!":"Build started!","Building":"Building","Bundle":"Bundle","Bundle not found":"Bundle not found","Bundle not found - An error occurred, please try again later.":"Bundle not found - An error occurred, please try again later.","Bundles and their content will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this bundle. (or restore your existing purchase).":"Bundles and their content will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this bundle. (or restore your existing purchase).","Buy GDevelop goodies and swag":"Buy GDevelop goodies and swag","Buy for {0} credits":function(a){return["Buy for ",a("0")," credits"]},"Buy for {formattedProductPriceText}":function(a){return["Buy for ",a("formattedProductPriceText")]},"Buy now and save {0}":function(a){return["Buy now and save ",a("0")]},"By accepting, the team admin will be able to access your projects and may update your profile information such as your username.":"By accepting, the team admin will be able to access your projects and may update your profile information such as your username.","By canceling your subscription, you will lose all your premium features at the end of the period you already paid for. Continue?":"By canceling your subscription, you will lose all your premium features at the end of the period you already paid for. Continue?","By creating an account and using GDevelop, you agree to the [Terms and Conditions](https://gdevelop.io/page/terms-and-conditions).":"By creating an account and using GDevelop, you agree to the [Terms and Conditions](https://gdevelop.io/page/terms-and-conditions).","Calibrating sensors":"Calibrating sensors","Camera":"Camera","Camera positioning":"Camera positioning","Camera type":"Camera type","Can't check if the game is registered online.":"Can't check if the game is registered online.","Can't load the announcements. Verify your internet connection or try again later.":"Can't load the announcements. Verify your internet connection or try again later.","Can't load the credits packages. Verify your internet connection or retry later.":"Can't load the credits packages. Verify your internet connection or retry later.","Can't load the extension registry. Verify your internet connection or try again later.":"Can't load the extension registry. Verify your internet connection or try again later.","Can't load the games. Verify your internet connection or retry later.":"Can't load the games. Verify your internet connection or retry later.","Can't load the licenses. Verify your internet connection or try again later.":"Can't load the licenses. Verify your internet connection or try again later.","Can't load the profile. Verify your internet connection or try again later.":"Can't load the profile. Verify your internet connection or try again later.","Can't load the results. Verify your internet connection or retry later.":"Can't load the results. Verify your internet connection or retry later.","Can't load the tutorials. Verify your internet connection or retry later.":"Can't load the tutorials. Verify your internet connection or retry later.","Can't load your game earnings. Verify your internet connection or try again later.":"Can't load your game earnings. Verify your internet connection or try again later.","Can't properly export the game.":"Can't properly export the game.","Can't upload your game to the build service.":"Can't upload your game to the build service.","Cancel":"Cancel","Cancel and change my subscription":"Cancel and change my subscription","Cancel and close":"Cancel and close","Cancel anytime":"Cancel anytime","Cancel changes":"Cancel changes","Cancel editing":"Cancel editing","Cancel edition":"Cancel edition","Cancel subscription":"Cancel subscription","Cancel your changes?":"Cancel your changes?","Cancel your subscription":"Cancel your subscription","Cancel your subscription?":"Cancel your subscription?","Cancelled":"Cancelled","Cancelled - Your subscription will end at the end of the paid period.":"Cancelled - Your subscription will end at the end of the paid period.","Cannot access project save":"Cannot access project save","Cannot filter on both asset packs and assets at the same time. Try clearing one of the filters!":"Cannot filter on both asset packs and assets at the same time. Try clearing one of the filters!","Cannot restore project":"Cannot restore project","Cannot see the exports":"Cannot see the exports","Cannot update thumbnail":"Cannot update thumbnail","Cash out":"Cash out","Category (shown in the editor)":"Category (shown in the editor)","Cell depth (in pixels)":"Cell depth (in pixels)","Cell height (in pixels)":"Cell height (in pixels)","Cell width (in pixels)":"Cell width (in pixels)","Center":"Center","Certificate and provisioning profile":"Certificate and provisioning profile","Certificate type: {0}":function(a){return["Certificate type: ",a("0")]},"Change editor zoom":"Change editor zoom","Change my email":"Change my email","Change the name in the project properties.":"Change the name in the project properties.","Change the package name in the game properties.":"Change the package name in the game properties.","Change thumbnail":"Change thumbnail","Change username or full name":"Change username or full name","Change your email":"Change your email","Changes and answers may have mistakes: experiment and use it for learning.":"Changes and answers may have mistakes: experiment and use it for learning.","Changes saved":"Changes saved","Chapter":"Chapter","Chapter materials":"Chapter materials","Chapters":"Chapters","Characters":"Characters","Check again for new updates":"Check again for new updates","Check that the file exists, that this file is a proper game created with GDevelop and that you have the authorization to open it.":"Check that the file exists, that this file is a proper game created with GDevelop and that you have the authorization to open it.","Check the logs to see if there is an explanation about what went wrong, or try again later.":"Check the logs to see if there is an explanation about what went wrong, or try again later.","Checking for update...":"Checking for update...","Checking tools":"Checking tools","Children configurations are deprecated. This [migration documentation](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) can help you use variants instead.":"Children configurations are deprecated. This [migration documentation](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) can help you use variants instead.","Choose":"Choose","Choose GDevelop language":"Choose GDevelop language","Choose a Auth Key":"Choose a Auth Key","Choose a file":"Choose a file","Choose a folder for the new game":"Choose a folder for the new game","Choose a font":"Choose a font","Choose a function, or a function of a behavior, to edit its events.":"Choose a function, or a function of a behavior, to edit its events.","Choose a function, or a function of a behavior, to set the parameters that it accepts.":"Choose a function, or a function of a behavior, to set the parameters that it accepts.","Choose a key":"Choose a key","Choose a layer":"Choose a layer","Choose a leaderboard":"Choose a leaderboard","Choose a leaderboard (optional)":"Choose a leaderboard (optional)","Choose a mouse button":"Choose a mouse button","Choose a new behavior function (\"method\")":"Choose a new behavior function (\"method\")","Choose a new extension function":"Choose a new extension function","Choose a new object function (\"method\")":"Choose a new object function (\"method\")","Choose a new object type":"Choose a new object type","Choose a pack":"Choose a pack","Choose a parameter":"Choose a parameter","Choose a provisioning profile":"Choose a provisioning profile","Choose a scene":"Choose a scene","Choose a skin":"Choose a skin","Choose a subscription":"Choose a subscription","Choose a subscription to enjoy the best of game creation.":"Choose a subscription to enjoy the best of game creation.","Choose a value":"Choose a value","Choose a workspace folder":"Choose a workspace folder","Choose an animation":"Choose an animation","Choose an animation and frame to edit the collision masks":"Choose an animation and frame to edit the collision masks","Choose an animation and frame to edit the points":"Choose an animation and frame to edit the points","Choose an effect":"Choose an effect","Choose an element to inspect in the list":"Choose an element to inspect in the list","Choose an export folder":"Choose an export folder","Choose an external layout":"Choose an external layout","Choose an icon":"Choose an icon","Choose an object":"Choose an object","Choose an object first or browse the list of actions.":"Choose an object first or browse the list of actions.","Choose an object first or browse the list of conditions.":"Choose an object first or browse the list of conditions.","Choose an object to add to the group":"Choose an object to add to the group","Choose an operator":"Choose an operator","Choose an option":"Choose an option","Choose and add an event":"Choose and add an event","Choose and add an event...":"Choose and add an event...","Choose and enter a package name in the game properties.":"Choose and enter a package name in the game properties.","Choose another location":"Choose another location","Choose file":"Choose file","Choose folder":"Choose folder","Choose from asset store":"Choose from asset store","Choose one or more files":"Choose one or more files","Choose the 3D model file (.glb) to use":"Choose the 3D model file (.glb) to use","Choose the JSON/LDtk file to use":"Choose the JSON/LDtk file to use","Choose the associated scene:":"Choose the associated scene:","Choose the atlas file (.atlas) to use":"Choose the atlas file (.atlas) to use","Choose the audio file to use":"Choose the audio file to use","Choose the bitmap font file (.fnt, .xml) to use":"Choose the bitmap font file (.fnt, .xml) to use","Choose the effect to apply":"Choose the effect to apply","Choose the font file to use":"Choose the font file to use","Choose the image file to use":"Choose the image file to use","Choose the json file to use":"Choose the json file to use","Choose the scene":"Choose the scene","Choose the spine json file to use":"Choose the spine json file to use","Choose the tileset to use":"Choose the tileset to use","Choose the upload key to use to identify your Android App Bundle. In most cases you don't need to change this. Use the \"Old upload key\" if you used to publish your game as an APK and you activated Play App Signing before switching to Android App Bundle.":"Choose the upload key to use to identify your Android App Bundle. In most cases you don't need to change this. Use the \"Old upload key\" if you used to publish your game as an APK and you activated Play App Signing before switching to Android App Bundle.","Choose the video file to use":"Choose the video file to use","Choose this plan":"Choose this plan","Choose where to add the assets:":"Choose where to add the assets:","Choose where to create the game":"Choose where to create the game","Choose where to create your projects":"Choose where to create your projects","Choose where to export the game":"Choose where to export the game","Choose where to load the project from":"Choose where to load the project from","Choose where to save the project to":"Choose where to save the project to","Choose your game art":"Choose your game art","Circle":"Circle","Claim":"Claim","Claim credits":"Claim credits","Claim this pack":"Claim this pack","Class":"Class","Classrooms":"Classrooms","Clear all filters":"Clear all filters","Clear search":"Clear search","Clear the rendered image between each frame":"Clear the rendered image between each frame","Click here to test the link.":"Click here to test the link.","Click on an instance on the canvas or an object in the list to display their properties.":"Click on an instance on the canvas or an object in the list to display their properties.","Click on the tilemap grid to activate or deactivate hit boxes.":"Click on the tilemap grid to activate or deactivate hit boxes.","Click to restart and install the update now.":"Click to restart and install the update now.","Close":"Close","Close GDevelop":"Close GDevelop","Close Instances List Panel":"Close Instances List Panel","Close Layers Panel":"Close Layers Panel","Close Object Groups Panel":"Close Object Groups Panel","Close Objects Panel":"Close Objects Panel","Close Project":"Close Project","Close Properties Panel":"Close Properties Panel","Close all":"Close all","Close all tasks":"Close all tasks","Close and launch a new preview":"Close and launch a new preview","Close others":"Close others","Close project":"Close project","Close task":"Close task","Close the AI chat?":"Close the AI chat?","Close the project?":"Close the project?","Close the project? Any changes that have not been saved will be lost.":"Close the project? Any changes that have not been saved will be lost.","Co-op Multiplayer":"Co-op Multiplayer","Code":"Code","Code editor Theme":"Code editor Theme","Collaborators":"Collaborators","Collapse All":"Collapse All","Collect at least {0} USD to cash out your earnings":function(a){return["Collect at least ",a("0")," USD to cash out your earnings"]},"Collect feedback from players":"Collect feedback from players","Collect game feedback":"Collect game feedback","Collisions handling with the Physics engine":"Collisions handling with the Physics engine","Color":"Color","Color (text)":"Color (text)","Color:":"Color:","Column title":"Column title","Come back to latest version":"Come back to latest version","Coming in {0}":function(a){return["Coming in ",a("0")]},"Command palette keyboard shortcut":"Command palette keyboard shortcut","Comment":"Comment","Commercial License":"Commercial License","Community Discord Chat":"Community Discord Chat","Community Forums":"Community Forums","Community list":"Community list","Companies, studios and agencies":"Companies, studios and agencies","Company name or full name":"Company name or full name","Compare all the advantages of the different plans in this <0>big feature comparison table.":"Compare all the advantages of the different plans in this <0>big feature comparison table.","Complete all tasks to claim your badge":"Complete all tasks to claim your badge","Complete your payment on the web browser":"Complete your payment on the web browser","Complete your purchase with the app store.":"Complete your purchase with the app store.","Completely alone":"Completely alone","Compressing before upload...":"Compressing before upload...","Condition":"Condition","Conditions":"Conditions","Configuration":"Configuration","Configure the external events":"Configure the external events","Configure the external layout":"Configure the external layout","Configure tile\u2019s hit boxes":"Configure tile\u2019s hit boxes","Confirm":"Confirm","Confirm the opening":"Confirm the opening","Confirm your email":"Confirm your email","Confirming your subscription":"Confirming your subscription","Congrats on finishing this course!":"Congrats on finishing this course!","Congratulations! You've finished this tutorial!":"Congratulations! You've finished this tutorial!","Connected players":"Connected players","Considering the best approach":"Considering the best approach","Considering the possibilities":"Considering the possibilities","Console":"Console","Consoles":"Consoles","Contact us at education@gdevelop.io if you want to update your plan":"Contact us at education@gdevelop.io if you want to update your plan","Contact:":"Contact:","Contains text":"Contains text","Content":"Content","Content for Teachers":"Content for Teachers","Continue":"Continue","Continue anyway":"Continue anyway","Continue editing":"Continue editing","Continue with Apple":"Continue with Apple","Continue with Github":"Continue with Github","Continue with Google":"Continue with Google","Continue with Human Intelligence":"Continue with Human Intelligence","Continue working":"Continue working","Contribute to GDevelop":"Contribute to GDevelop","Contributions":"Contributions","Contributor options":"Contributor options","Contributors":"Contributors","Contributors, in no particular order:":"Contributors, in no particular order:","Control a spaceship with a joystick.":"Control a spaceship with a joystick.","Control your spaceship with a joystick, while avoiding asteroids.":"Control your spaceship with a joystick, while avoiding asteroids.","Convert":"Convert","Copied to clipboard!":"Copied to clipboard!","Copy":"Copy","Copy active credentials to CSV":"Copy active credentials to CSV","Copy all":"Copy all","Copy all behaviors":"Copy all behaviors","Copy all effects":"Copy all effects","Copy build link":"Copy build link","Copy email address":"Copy email address","Copy file path":"Copy file path","Copy them into the project folder":"Copy them into the project folder","Copy {0} credentials to CSV":function(a){return["Copy ",a("0")," credentials to CSV"]},"Cordova":"Cordova","Could not activate purchase":"Could not activate purchase","Could not cancel your subscription":"Could not cancel your subscription","Could not cash out":"Could not cash out","Could not change subscription":"Could not change subscription","Could not create the object":"Could not create the object","Could not delete the build. Verify your internet connection or try again later.":"Could not delete the build. Verify your internet connection or try again later.","Could not find any resources matching your search.":"Could not find any resources matching your search.","Could not install the asset":"Could not install the asset","Could not install the extension":"Could not install the extension","Could not launch the preview":"Could not launch the preview","Could not load the project versions. Verify your internet connection or try again later.":"Could not load the project versions. Verify your internet connection or try again later.","Could not purchase this product":"Could not purchase this product","Could not remove invitation":"Could not remove invitation","Could not swap asset":"Could not swap asset","Could not transfer your credits":"Could not transfer your credits","Could not update the build name. Verify your internet connection or try again later.":"Could not update the build name. Verify your internet connection or try again later.","Counter of the loop":"Counter of the loop","Country name":"Country name","Courses will be linked to your user account and available indefinitely. Log in or sign up to purchase this course or restore a previous purchase.":"Courses will be linked to your user account and available indefinitely. Log in or sign up to purchase this course or restore a previous purchase.","Create":"Create","Create Extensions for GDevelop":"Create Extensions for GDevelop","Create a 3D explosion when the player is hit":"Create a 3D explosion when the player is hit","Create a GDevelop account to save your changes and keep personalizing your game":"Create a GDevelop account to save your changes and keep personalizing your game","Create a certificate signing request that will be asked by Apple to generate a full certificate.":"Create a certificate signing request that will be asked by Apple to generate a full certificate.","Create a game":"Create a game","Create a leaderboard":"Create a leaderboard","Create a new extension":"Create a new extension","Create a new game":"Create a new game","Create a new group":"Create a new group","Create a new instance on the scene (will be at position 0;0):":"Create a new instance on the scene (will be at position 0;0):","Create a new project":"Create a new project","Create a new room":"Create a new room","Create a new variant":"Create a new variant","Create a project first to add assets from the asset store":"Create a project first to add assets from the asset store","Create a project first to add this asset":"Create a project first to add this asset","Create a room and drag and drop members in it.":"Create a room and drag and drop members in it.","Create a signing request":"Create a signing request","Create a simple flying game with obstacles to avoid":"Create a simple flying game with obstacles to avoid","Create account":"Create account","Create accounts":"Create accounts","Create an API key on the [App Store Connect API page](https://appstoreconnect.apple.com/access/integrations/api). Give it a name and **administrator** rights. Download the \"Auth Key\" file and upload it here along with the required information you can find on the page.":"Create an API key on the [App Store Connect API page](https://appstoreconnect.apple.com/access/integrations/api). Give it a name and **administrator** rights. Download the \"Auth Key\" file and upload it here along with the required information you can find on the page.","Create an Account":"Create an Account","Create an account":"Create an account","Create an account or login first to export your game using online services.":"Create an account or login first to export your game using online services.","Create an account to activate your purchase!":"Create an account to activate your purchase!","Create an account to register your games and to get access to metrics collected anonymously, like the number of daily players and retention of the players after a few days.":"Create an account to register your games and to get access to metrics collected anonymously, like the number of daily players and retention of the players after a few days.","Create an account to store your project online.":"Create an account to store your project online.","Create and Publish a Fling game":"Create and Publish a Fling game","Create iOS certificate":"Create iOS certificate","Create installation file":"Create installation file","Create my account":"Create my account","Create new folder...":"Create new folder...","Create new game":"Create new game","Create new leaderboards now":"Create new leaderboards now","Create or search for new extensions":"Create or search for new extensions","Create package for Android":"Create package for Android","Create package for iOS":"Create package for iOS","Create scene <0>{scene_name}. <1>Click to open it.":function(a){return["Create scene <0>",a("scene_name"),". <1>Click to open it."]},"Create section":"Create section","Create students":"Create students","Create with Jfxr":"Create with Jfxr","Create with Piskel":"Create with Piskel","Create with Yarn":"Create with Yarn","Create your Apple certificate for iOS":"Create your Apple certificate for iOS","Create your Auth Key to send your game to App Store Connect":"Create your Auth Key to send your game to App Store Connect","Create your certificate and \"provisioning profile\" thanks to your Apple Developer account. We'll guide you with a step by step process.":"Create your certificate and \"provisioning profile\" thanks to your Apple Developer account. We'll guide you with a step by step process.","Create your first project using one of our templates or start from scratch.":"Create your first project using one of our templates or start from scratch.","Create your game's first leaderboard":"Create your game's first leaderboard","Created objects":"Created objects","Created on {0}":function(a){return["Created on ",a("0")]},"Creator profile":"Creator profile","Credit out":"Credit out","Credits available: {0}":function(a){return["Credits available: ",a("0")]},"Credits given":"Credits given","Credits will be linked to your user account. Log-in or sign-up to purchase them!":"Credits will be linked to your user account. Log-in or sign-up to purchase them!","Current build online":"Current build online","Current plan":"Current plan","Custom CSS":"Custom CSS","Custom css value cannot exceed {LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH} characters.":function(a){return["Custom css value cannot exceed ",a("LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH")," characters."]},"Custom display":"Custom display","Custom object name":"Custom object name","Custom object variant":"Custom object variant","Custom object variant properties":"Custom object variant properties","Custom objects can't contain both 2D or 3D.<0/>Please select either 2D instances or 3D instances.":"Custom objects can't contain both 2D or 3D.<0/>Please select either 2D instances or 3D instances.","Custom size":"Custom size","Custom upload key (not available yet)":"Custom upload key (not available yet)","Cut":"Cut","Dark (colored)":"Dark (colored)","Dark (plain)":"Dark (plain)","Date":"Date","Date from which entries are taken into account: {0}":function(a){return["Date from which entries are taken into account: ",a("0")]},"Days":"Days","Dead":"Dead","Dealing with data integration from external sources":"Dealing with data integration from external sources","Debugger":"Debugger","Debugger is starting...":"Debugger is starting...","Declare <0><1/>{variableName} as <2><3/>{0} with <4>{1}":function(a){return["Declare <0><1/>",a("variableName")," as <2><3/>",a("0")," with <4>",a("1"),""]},"Declare your app on App Store Connect and then register a key so that your game can be automatically uploaded when built. It's perfect to try your game with testers on Apple TestFlight.":"Declare your app on App Store Connect and then register a key so that your game can be automatically uploaded when built. It's perfect to try your game with testers on Apple TestFlight.","Default":"Default","Default (visible)":"Default (visible)","Default camera behavior":"Default camera behavior","Default height (in pixels)":"Default height (in pixels)","Default name for created objects":"Default name for created objects","Default orientation":"Default orientation","Default size":"Default size","Default skin":"Default skin","Default upload key (recommended)":"Default upload key (recommended)","Default value":"Default value","Default value of string variables":"Default value of string variables","Default visibility":"Default visibility","Default width (in pixels)":"Default width (in pixels)","Define custom password":"Define custom password","Delete":"Delete","Delete Entry":"Delete Entry","Delete Leaderboard":"Delete Leaderboard","Delete account":"Delete account","Delete build":"Delete build","Delete collision mask":"Delete collision mask","Delete game":"Delete game","Delete my account":"Delete my account","Delete object":"Delete object","Delete option":"Delete option","Delete project":"Delete project","Delete score {0} from {1}":function(a){return["Delete score ",a("0")," from ",a("1")]},"Delete selection":"Delete selection","Delete the selected event(s)":"Delete the selected event(s)","Delete the selected instances from the scene":"Delete the selected instances from the scene","Delete the selected resource":"Delete the selected resource","Delete when out of particles":"Delete when out of particles","Delete {gameName}":function(a){return["Delete ",a("gameName")]},"Dependencies":"Dependencies","Dependencies allow to add additional libraries in the exported games. NPM dependencies will be included for Electron builds (Windows, macOS, Linux) and Cordova dependencies will be included for Cordova builds (Android, iOS). Note that this is intended for usage in JavaScript events only. If you are only using standard events, you should not worry about this.":"Dependencies allow to add additional libraries in the exported games. NPM dependencies will be included for Electron builds (Windows, macOS, Linux) and Cordova dependencies will be included for Cordova builds (Android, iOS). Note that this is intended for usage in JavaScript events only. If you are only using standard events, you should not worry about this.","Dependency type":"Dependency type","Deprecated":"Deprecated","Deprecated action":"Deprecated action","Deprecated actions and conditions warning":"Deprecated actions and conditions warning","Deprecated condition":"Deprecated condition","Deprecated:":"Deprecated:","Deprecation notice":"Deprecation notice","Depth":"Depth","Description":"Description","Description (markdown supported)":"Description (markdown supported)","Description (will be prefixed by \"Compare\" or \"Return\")":"Description (will be prefixed by \"Compare\" or \"Return\")","Deselect All":"Deselect All","Desktop":"Desktop","Desktop & Mobile landscape":"Desktop & Mobile landscape","Desktop (Windows, macOS and Linux) icon":"Desktop (Windows, macOS and Linux) icon","Desktop Full HD":"Desktop Full HD","Desktop builds":"Desktop builds","Details":"Details","Developer options":"Developer options","Development (debugging & testing on a registered iPhone/iPad)":"Development (debugging & testing on a registered iPhone/iPad)","Development tools required":"Development tools required","Device orientation (for mobile)":"Device orientation (for mobile)","Diagnostic errors found":"Diagnostic errors found","Diagnostic report":"Diagnostic report","Dialog backdrop click behavior":"Dialog backdrop click behavior","Dialogs":"Dialogs","Did it work?":"Did it work?","Did you forget your password?":"Did you forget your password?","Different objects":"Different objects","Dimension":"Dimension","Direction":"Direction","Direction #{i}":function(a){return["Direction #",a("i")]},"Disable GDevelop splash at startup":"Disable GDevelop splash at startup","Disable effects/lighting in the editor":"Disable effects/lighting in the editor","Disable login buttons in leaderboard":"Disable login buttons in leaderboard","Discard changes and open events":"Discard changes and open events","Discard changes?":"Discard changes?","Discord":"Discord","Discord server, e.g: https://discord.gg/...":"Discord server, e.g: https://discord.gg/...","Discord user not found":"Discord user not found","Discord username":"Discord username","Discord username sync failed":"Discord username sync failed","Discover this bundle":"Discover this bundle","Display GDevelop logo at startup (in exported game)":"Display GDevelop logo at startup (in exported game)","Display GDevelop watermark after the game is loaded (in exported game)":"Display GDevelop watermark after the game is loaded (in exported game)","Display What's New when a new version is launched (recommended)":"Display What's New when a new version is launched (recommended)","Display as time":"Display as time","Display assignment operators in Events Sheets":"Display assignment operators in Events Sheets","Display both 2D and 3D objects (default)":"Display both 2D and 3D objects (default)","Display effects/lighting in the editor":"Display effects/lighting in the editor","Display object thumbnails in Events Sheets":"Display object thumbnails in Events Sheets","Display profiling information in scene editor":"Display profiling information in scene editor","Display save reminder after significant changes in project":"Display save reminder after significant changes in project","Displayed score":"Displayed score","Distance":"Distance","Do nothing":"Do nothing","Do you have a Patreon? Ko-fi? Paypal?":"Do you have a Patreon? Ko-fi? Paypal?","Do you have game development experience?":"Do you have game development experience?","Do you need any help?":"Do you need any help?","Do you really want to permanently delete your account?":"Do you really want to permanently delete your account?","Do you want to continue?":"Do you want to continue?","Do you want to quit the customization? All your changes will be lost.":"Do you want to quit the customization? All your changes will be lost.","Do you want to refactor your project?":"Do you want to refactor your project?","Do you wish to continue?":"Do you wish to continue?","Documentation":"Documentation","Don't allow":"Don't allow","Don't have an account yet?":"Don't have an account yet?","Don't play the animation when the object is far from the camera or hidden (recommended for performance)":"Don't play the animation when the object is far from the camera or hidden (recommended for performance)","Don't preload":"Don't preload","Don't save this project now":"Don't save this project now","Don't show this warning again":"Don't show this warning again","Donate link":"Donate link","Done":"Done","Done!":"Done!","Download":"Download","Download (APK)":"Download (APK)","Download (Android App Bundle)":"Download (Android App Bundle)","Download GDevelop desktop version":"Download GDevelop desktop version","Download a copy":"Download a copy","Download log files":"Download log files","Download pack sounds":"Download pack sounds","Download the Instant Game archive":"Download the Instant Game archive","Download the certificate file (.cer) generated by Apple and upload it here. GDevelop will keep it securely stored.":"Download the certificate file (.cer) generated by Apple and upload it here. GDevelop will keep it securely stored.","Download the compressed game and resources":"Download the compressed game and resources","Download the exported game":"Download the exported game","Download the latest version of GDevelop to check out this example!":"Download the latest version of GDevelop to check out this example!","Download the request file":"Download the request file","Downloading game resources...":"Downloading game resources...","Draft created:":"Draft created:","Drag here to add to the scene":"Drag here to add to the scene","Draw":"Draw","Draw the shapes relative to the object position on the scene":"Draw the shapes relative to the object position on the scene","Duplicate":"Duplicate","Duplicate <0>{duplicatedObjectName} as <1>{object_name} in scene <2>{scene_name}.":function(a){return["Duplicate <0>",a("duplicatedObjectName")," as <1>",a("object_name")," in scene <2>",a("scene_name"),"."]},"Duplicate selection":"Duplicate selection","Duration":"Duration","Each character, player, obstacle, background, item, etc. is an object. Objects are the building blocks of your game.":"Each character, player, obstacle, background, item, etc. is an object. Objects are the building blocks of your game.","Earn an exclusive badge":"Earn an exclusive badge","Earn {0}":function(a){return["Earn ",a("0")]},"Ease of use":"Ease of use","Easiest":"Easiest","Edit":"Edit","Edit Grid Options":"Edit Grid Options","Edit Object Variables":"Edit Object Variables","Edit behaviors":"Edit behaviors","Edit build name":"Edit build name","Edit children":"Edit children","Edit collision masks":"Edit collision masks","Edit comment":"Edit comment","Edit details":"Edit details","Edit effects":"Edit effects","Edit global variables":"Edit global variables","Edit group":"Edit group","Edit layer effects...":"Edit layer effects...","Edit layer...":"Edit layer...","Edit loading screen":"Edit loading screen","Edit my profile":"Edit my profile","Edit name":"Edit name","Edit object":"Edit object","Edit object behaviors...":"Edit object behaviors...","Edit object effects...":"Edit object effects...","Edit object group...":"Edit object group...","Edit object variables":"Edit object variables","Edit object variables...":"Edit object variables...","Edit object {0}":function(a){return["Edit object ",a("0")]},"Edit object...":"Edit object...","Edit or add variables...":"Edit or add variables...","Edit parameters...":"Edit parameters...","Edit points":"Edit points","Edit scene properties":"Edit scene properties","Edit scene variables":"Edit scene variables","Edit student":"Edit student","Edit the default variant":"Edit the default variant","Edit this action events":"Edit this action events","Edit this behavior":"Edit this behavior","Edit this condition events":"Edit this condition events","Edit variables...":"Edit variables...","Edit with Jfxr":"Edit with Jfxr","Edit with Piskel":"Edit with Piskel","Edit with Yarn":"Edit with Yarn","Edit your GDevelop profile":"Edit your GDevelop profile","Edit your profile and fill your discord username to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"Edit your profile and fill your discord username to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).","Edit your profile to pick a username!":"Edit your profile to pick a username!","Edit {0}":function(a){return["Edit ",a("0")]},"Edit {objectName}":function(a){return["Edit ",a("objectName")]},"Editing the game.":"Editing the game.","Editor":"Editor","Editor without transitions":"Editor without transitions","Education curriculum and resources":"Education curriculum and resources","Educational":"Educational","Effect name:":"Effect name:","Effects":"Effects","Effects cannot have empty names":"Effects cannot have empty names","Effects create visual changes to the object.":"Effects create visual changes to the object.","Either this game is not registered or you are not its owner, so you cannot see its builds.":"Either this game is not registered or you are not its owner, so you cannot see its builds.","Else":"Else","Else if":"Else if","Email":"Email","Email sent to {0}, waiting for validation...":function(a){return["Email sent to ",a("0"),", waiting for validation..."]},"Email verified":"Email verified","Embedded file name":"Embedded file name","Embedded help and tutorials":"Embedded help and tutorials","Empty free text":"Empty free text","Empty group":"Empty group","Empty project":"Empty project","Enable \"Close project\" shortcut ({0}) to close preview window":function(a){return["Enable \"Close project\" shortcut (",a("0"),") to close preview window"]},"Enable ads and revenue sharing on the game page":"Enable ads and revenue sharing on the game page","Enabled":"Enabled","End of jam":"End of jam","End opacity (0-255)":"End opacity (0-255)","Enforce only auto-generated player names":"Enforce only auto-generated player names","Ensure that you are connected to internet and that the URL used is correct, then try again.":"Ensure that you are connected to internet and that the URL used is correct, then try again.","Ensure this scene has the same objects, behaviors and variables as the ones used in these events.":"Ensure this scene has the same objects, behaviors and variables as the ones used in these events.","Ensure you don't have any typo in your username and that you have joined the GDevelop Discord server.":"Ensure you don't have any typo in your username and that you have joined the GDevelop Discord server.","Enter a query and press Search to find matches across all event sheets in your project.":"Enter a query and press Search to find matches across all event sheets in your project.","Enter a version in the game properties.":"Enter a version in the game properties.","Enter the effect name":"Enter the effect name","Enter the expression parameters":"Enter the expression parameters","Enter the leaderboard id":"Enter the leaderboard id","Enter the leaderboard id as a text or an expression":"Enter the leaderboard id as a text or an expression","Enter the name of an object.":"Enter the name of an object.","Enter the name of the object":"Enter the name of the object","Enter the parameter name (mandatory)":"Enter the parameter name (mandatory)","Enter the property name":"Enter the property name","Enter the sentence that will be displayed in the events sheet":"Enter the sentence that will be displayed in the events sheet","Enter the text to be displayed":"Enter the text to be displayed","Enter the text to be displayed by the object":"Enter the text to be displayed by the object","Enter your Discord username":"Enter your Discord username","Enter your code here":"Enter your code here","Erase":"Erase","Erase {existingInstanceCount} instance(s) in scene {scene_name}.":function(a){return["Erase ",a("existingInstanceCount")," instance(s) in scene ",a("scene_name"),"."]},"Error":"Error","Error loading Auth Keys.":"Error loading Auth Keys.","Error loading certificates.":"Error loading certificates.","Error retrieving the examples":"Error retrieving the examples","Error retrieving the extensions":"Error retrieving the extensions","Error when claiming asset pack":"Error when claiming asset pack","Error while building of the game. Check the logs of the build for more details.":"Error while building of the game. Check the logs of the build for more details.","Error while building the game. Check the logs of the build for more details.":"Error while building the game. Check the logs of the build for more details.","Error while building the game. Try again later. Your internet connection may be slow or one of your resources may be corrupted.":"Error while building the game. Try again later. Your internet connection may be slow or one of your resources may be corrupted.","Error while checking update":"Error while checking update","Error while compressing the game.":"Error while compressing the game.","Error while downloading the game resources. Check your internet connection and that all resources of the game are valid in the Resources editor.":"Error while downloading the game resources. Check your internet connection and that all resources of the game are valid in the Resources editor.","Error while exporting the game.":"Error while exporting the game.","Error while loading builds":"Error while loading builds","Error while loading the Play section. Verify your internet connection or try again later.":"Error while loading the Play section. Verify your internet connection or try again later.","Error while loading the Spine Texture Atlas resource ( {0} ).":function(a){return["Error while loading the Spine Texture Atlas resource ( ",a("0")," )."]},"Error while loading the Spine resource ( {0} ).":function(a){return["Error while loading the Spine resource ( ",a("0")," )."]},"Error while loading the asset. Verify your internet connection or try again later.":"Error while loading the asset. Verify your internet connection or try again later.","Error while loading the collaborators. Verify your internet connection or try again later.":"Error while loading the collaborators. Verify your internet connection or try again later.","Error while loading the marketing plans. Verify your internet connection or try again later.":"Error while loading the marketing plans. Verify your internet connection or try again later.","Error while uploading the game. Check your internet connection or try again later.":"Error while uploading the game. Check your internet connection or try again later.","Escape key behavior when editing an parameter inline":"Escape key behavior when editing an parameter inline","Evaluating the game logic":"Evaluating the game logic","Event sentences":"Event sentences","Events":"Events","Events Sheet":"Events Sheet","Events analysis":"Events analysis","Events define the rules of a game.":"Events define the rules of a game.","Events functions extension":"Events functions extension","Events that will be run at every frame (roughly 60 times per second), after the events from the events sheet of the scene.":"Events that will be run at every frame (roughly 60 times per second), after the events from the events sheet of the scene.","Events that will be run at every frame (roughly 60 times per second), before the events from the events sheet of the scene.":"Events that will be run at every frame (roughly 60 times per second), before the events from the events sheet of the scene.","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, after the events from the events sheet.":"Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, after the events from the events sheet.","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, before the events from the events sheet are launched.":"Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, before the events from the events sheet are launched.","Events that will be run at every frame (roughly 60 times per second), for every object, after the events from the events sheet.":"Events that will be run at every frame (roughly 60 times per second), for every object, after the events from the events sheet.","Events that will be run once when a scene is about to be unloaded from memory. The previous scene that was paused will be resumed after this.":"Events that will be run once when a scene is about to be unloaded from memory. The previous scene that was paused will be resumed after this.","Events that will be run once when a scene is paused (another scene is run on top of it).":"Events that will be run once when a scene is paused (another scene is run on top of it).","Events that will be run once when a scene is resumed (after it was previously paused).":"Events that will be run once when a scene is resumed (after it was previously paused).","Events that will be run once when a scene of the game is loaded, before the scene events.":"Events that will be run once when a scene of the game is loaded, before the scene events.","Events that will be run once when the behavior is deactivated on an object (step events won't be run until the behavior is activated again).":"Events that will be run once when the behavior is deactivated on an object (step events won't be run until the behavior is activated again).","Events that will be run once when the behavior is re-activated on an object (after it was previously deactivated).":"Events that will be run once when the behavior is re-activated on an object (after it was previously deactivated).","Events that will be run once when the first scene of the game is loaded, before any other events.":"Events that will be run once when the first scene of the game is loaded, before any other events.","Events that will be run once, after the object is removed from the scene and before it is entirely removed from memory.":"Events that will be run once, after the object is removed from the scene and before it is entirely removed from memory.","Events that will be run once, when an object is created with this behavior being attached to it.":"Events that will be run once, when an object is created with this behavior being attached to it.","Events that will be run once, when an object is created.":"Events that will be run once, when an object is created.","Events that will be run when the preview is being hot-reloaded.":"Events that will be run when the preview is being hot-reloaded.","Every animation from the GLB file is already in the list.":"Every animation from the GLB file is already in the list.","Every animation from the Spine file is already in the list.":"Every animation from the Spine file is already in the list.","Every child of an array must be the same type.":"Every child of an array must be the same type.","Ex: $":"Ex: $","Ex: coins":"Ex: coins","Examining the behaviors":"Examining the behaviors","Example: Check if the object is flashing.":"Example: Check if the object is flashing.","Example: Equipped shield name":"Example: Equipped shield name","Example: Flash the object":"Example: Flash the object","Example: Is flashing":"Example: Is flashing","Example: Make the object flash for 5 seconds.":"Example: Make the object flash for 5 seconds.","Example: Remaining life":"Example: Remaining life","Example: Return the name of the shield equipped by the player.":"Example: Return the name of the shield equipped by the player.","Example: Return the number of remaining lives for the player.":"Example: Return the number of remaining lives for the player.","Example: Use \"New Action Name\" instead.":"Example: Use \"New Action Name\" instead.","Examples ({0})":function(a){return["Examples (",a("0"),")"]},"Exchange your earnings with GDevelop credits, and use them on the GDevelop store":"Exchange your earnings with GDevelop credits, and use them on the GDevelop store","Exclude attribution requirements":"Exclude attribution requirements","Existing behaviors":"Existing behaviors","Existing effects":"Existing effects","Existing parameters":"Existing parameters","Existing properties":"Existing properties","Exit without saving":"Exit without saving","Expand All to Level":"Expand All to Level","Expand all sub folders":"Expand all sub folders","Expand inner area with parent":"Expand inner area with parent","Expected parent event":"Expected parent event","Experiment with the leaderboard colors using the playground":"Experiment with the leaderboard colors using the playground","Experimental":"Experimental","Experimental extension":"Experimental extension","Expert":"Expert","Explain and give some examples of what can be achieved with this extension.":"Explain and give some examples of what can be achieved with this extension.","Explain what the behavior is doing to the object. Start with a verb when possible.":"Explain what the behavior is doing to the object. Start with a verb when possible.","Explanation after an object is installed from the store":"Explanation after an object is installed from the store","Explore":"Explore","Explore by category":"Explore by category","Exploring the game.":"Exploring the game.","Export (web, iOS, Android)...":"Export (web, iOS, Android)...","Export HTML5 (external websites)":"Export HTML5 (external websites)","Export as a HTML5 game":"Export as a HTML5 game","Export as a pack":"Export as a pack","Export as assets":"Export as assets","Export extension":"Export extension","Export failed. Check that the output folder is accessible and that you have the necessary permissions.":"Export failed. Check that the output folder is accessible and that you have the necessary permissions.","Export game":"Export game","Export in progress...":"Export in progress...","Export name":"Export name","Export the scene objects to a file and learn more about the submission process in the documentation.":"Export the scene objects to a file and learn more about the submission process in the documentation.","Export to a file":"Export to a file","Export your game":"Export your game","Export {0} assets":function(a){return["Export ",a("0")," assets"]},"Exporting...":"Exporting...","Exports":"Exports","Expression":"Expression","Expression and condition":"Expression and condition","Expression used to sort instances before iterating. It will be evaluated for each instance.":"Expression used to sort instances before iterating. It will be evaluated for each instance.","Extend":"Extend","Extend Featuring":"Extend Featuring","Extend width or height to fill screen (without cropping the game area)":"Extend width or height to fill screen (without cropping the game area)","Extension":"Extension","Extension (storing the custom object)":"Extension (storing the custom object)","Extension containing the new function":"Extension containing the new function","Extension global variables":"Extension global variables","Extension name":"Extension name","Extension scene variables":"Extension scene variables","Extension update":"Extension update","Extension updates":"Extension updates","Extension variables":"Extension variables","Extensions":"Extensions","Extensions ({0})":function(a){return["Extensions (",a("0"),")"]},"Extensions search":"Extensions search","External events":"External events","External layout":"External layout","External layout name":"External layout name","External layouts":"External layouts","Extra source files (experimental)":"Extra source files (experimental)","Extract":"Extract","Extract Events to a Function":"Extract Events to a Function","Extract as a custom object":"Extract as a custom object","Extract as an external layout":"Extract as an external layout","Extract the events in a function":"Extract the events in a function","Extreme score must be equal or higher than {extremeAllowedScoreMin}.":function(a){return["Extreme score must be equal or higher than ",a("extremeAllowedScoreMin"),"."]},"Extreme score must be lower than {extremeAllowedScoreMax}.":function(a){return["Extreme score must be lower than ",a("extremeAllowedScoreMax"),"."]},"FPS:":"FPS:","Facebook":"Facebook","Facebook Games":"Facebook Games","Facebook Instant Games":"Facebook Instant Games","False":"False","False (not checked)":"False (not checked)","Far plane distance":"Far plane distance","Featuring already active":"Featuring already active","Feedbacks":"Feedbacks","Field of view (in degrees)":"Field of view (in degrees)","File":"File","File history":"File history","File name":"File name","File(s) from your device":"File(s) from your device","Fill":"Fill","Fill automatically":"Fill automatically","Fill bucket":"Fill bucket","Fill color":"Fill color","Fill opacity (0-255)":"Fill opacity (0-255)","Fill proportionally":"Fill proportionally","Filter the logs by group":"Filter the logs by group","Filters":"Filters","Find how to implement the most common game mechanics and more":"Find how to implement the most common game mechanics and more","Find the complete documentation on everything":"Find the complete documentation on everything","Find the substitles in your language in the setting of each video.":"Find the substitles in your language in the setting of each video.","Find your finished game on the \u201CBuild\u201D section. Or restart the tutorial by clicking on the card.":"Find your finished game on the \u201CBuild\u201D section. Or restart the tutorial by clicking on the card.","Finish and close":"Finish and close","Finished":"Finished","Fire a Bullet":"Fire a Bullet","Fire bullets in an Asteroids game.":"Fire bullets in an Asteroids game.","Fire bullets in this Asteroids game. Get ready for a Star Wars show.":"Fire bullets in this Asteroids game. Get ready for a Star Wars show.","First (before other files)":"First (before other files)","First editor":"First editor","First name":"First name","Fit content to window":"Fit content to window","Fit to content":"Fit to content","Fix those issues to get the campaign up!":"Fix those issues to get the campaign up!","Flip along Z axis":"Flip along Z axis","Flip horizontally":"Flip horizontally","Flip vertically":"Flip vertically","Flow of particles (particles/seconds)":"Flow of particles (particles/seconds)","Folders":"Folders","Follow":"Follow","Follow GDevelop on socials and check your profile to get some free credits!":"Follow GDevelop on socials and check your profile to get some free credits!","Follow a character with scrolling background.":"Follow a character with scrolling background.","Follow this Castlevania-type character with the camera, while the background scrolls.":"Follow this Castlevania-type character with the camera, while the background scrolls.","Font":"Font","Font resource":"Font resource","For Education":"For Education","For Individuals":"For Individuals","For Teams":"For Teams","For a given video resource, only one video will be played in memory and displayed. If you put this object multiple times on the scene, all the instances will be displaying the exact same video (with the same timing and paused/played/stopped state).":"For a given video resource, only one video will be played in memory and displayed. If you put this object multiple times on the scene, all the instances will be displaying the exact same video (with the same timing and paused/played/stopped state).","For a pixel type font, you must disable the Smooth checkbox related to your texture in the game resources to disable anti-aliasing.":"For a pixel type font, you must disable the Smooth checkbox related to your texture in the game resources to disable anti-aliasing.","For most games, the default automatic loading of resources will be fine. This action should only be used when trying to avoid loading screens from appearing between scenes.":"For most games, the default automatic loading of resources will be fine. This action should only be used when trying to avoid loading screens from appearing between scenes.","For teachers and educators having the GDevelop Education subscription. Ready to use resources for teaching.":"For teachers and educators having the GDevelop Education subscription. Ready to use resources for teaching.","For the 3D change to take effect, close and reopen all currently opened scenes.":"For the 3D change to take effect, close and reopen all currently opened scenes.","For the lifecycle functions to be executed, you need the extension to be used in the game, either by having at least one action, condition or expression used, or a behavior of the extension added to an object. Otherwise, the extension won't be included in the game.":"For the lifecycle functions to be executed, you need the extension to be used in the game, either by having at least one action, condition or expression used, or a behavior of the extension added to an object. Otherwise, the extension won't be included in the game.","Force display both 2D and 3D objects":"Force display both 2D and 3D objects","Force display only 2D objects":"Force display only 2D objects","Force display only 3D objects":"Force display only 3D objects","Forfeit my redeemed subscription and continue":"Forfeit my redeemed subscription and continue","Form sent with success. You should receive an email in the next minutes.":"Form sent with success. You should receive an email in the next minutes.","Forum access":"Forum access","Forum account not found":"Forum account not found","Forum sync failed":"Forum sync failed","Forums":"Forums","Forward (Additional button, typically the Browser Forward button)":"Forward (Additional button, typically the Browser Forward button)","Found 1 match in 1 event sheet":"Found 1 match in 1 event sheet","Found 1 match in {0} event sheets":function(a){return["Found 1 match in ",a("0")," event sheets"]},"Found {totalMatchCount} matches in 1 event sheet":function(a){return["Found ",a("totalMatchCount")," matches in 1 event sheet"]},"Found {totalMatchCount} matches in {0} event sheets":function(a){return["Found ",a("totalMatchCount")," matches in ",a("0")," event sheets"]},"Frame":"Frame","Frame #{i}":function(a){return["Frame #",a("i")]},"Free":"Free","Free in-app tutorials":"Free in-app tutorials","Free instance":"Free instance","Free!":"Free!","Freehand brush":"Freehand brush","From the same author":"From the same author","Front face":"Front face","Full Game Asset Packs":"Full Game Asset Packs","Full name":"Full name","Full name displayed in editor":"Full name displayed in editor","Fun":"Fun","Function Configuration":"Function Configuration","Function name":"Function name","Function type":"Function type","Functions":"Functions","GDevelop 5":"GDevelop 5","GDevelop Bundles":"GDevelop Bundles","GDevelop Cloud":"GDevelop Cloud","GDevelop Website":"GDevelop Website","GDevelop app":"GDevelop app","GDevelop auto-save":"GDevelop auto-save","GDevelop automatically saved a newer version of this project on {0}. This new version might differ from the one that you manually saved. Which version would you like to open?":function(a){return["GDevelop automatically saved a newer version of this project on ",a("0"),". This new version might differ from the one that you manually saved. Which version would you like to open?"]},"GDevelop credits":"GDevelop credits","GDevelop games on gd.games":"GDevelop games on gd.games","GDevelop is a full-featured, open-source game engine. Build and publish games for any mobile, desktop or web game store. It's super fast, easy to learn and powered by a community making it better every day.":"GDevelop is a full-featured, open-source game engine. Build and publish games for any mobile, desktop or web game store. It's super fast, easy to learn and powered by a community making it better every day.","GDevelop logo style":"GDevelop logo style","GDevelop update ready":"GDevelop update ready","GDevelop update ready ({version})":function(a){return["GDevelop update ready (",a("version"),")"]},"GDevelop was created by Florian \"4ian\" Rival.":"GDevelop was created by Florian \"4ian\" Rival.","GDevelop was upgraded to a new version! Check out the changes.":"GDevelop was upgraded to a new version! Check out the changes.","GDevelop watermark placement":"GDevelop watermark placement","GDevelop website":"GDevelop website","GDevelop will save your progress, so you can take a break if you need.":"GDevelop will save your progress, so you can take a break if you need.","GDevelop's installation is corrupted and can't be used":"GDevelop's installation is corrupted and can't be used","GLB animation name":"GLB animation name","Game Dashboard":"Game Dashboard","Game Design":"Game Design","Game Development":"Game Development","Game Info":"Game Info","Game Scenes":"Game Scenes","Game already registered":"Game already registered","Game background":"Game background","Game configuration has been saved":"Game configuration has been saved","Game description":"Game description","Game earnings":"Game earnings","Game export":"Game export","Game for teaching or learning":"Game for teaching or learning","Game leaderboards":"Game leaderboards","Game mechanic":"Game mechanic","Game name":"Game name","Game name in the game URL":"Game name in the game URL","Game not found":"Game not found","Game personalisation":"Game personalisation","Game preview \"{id}\" ({0})":function(a){return["Game preview \"",a("id"),"\" (",a("0"),")"]},"Game properties":"Game properties","Game resolution height":"Game resolution height","Game resolution resize mode (fullscreen or window)":"Game resolution resize mode (fullscreen or window)","Game resolution width":"Game resolution width","Game scene size":"Game scene size","Game settings":"Game settings","Game template not found":"Game template not found","Game template not found - An error occurred, please try again later.":"Game template not found - An error occurred, please try again later.","Game templates will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this game template. (or restore your existing purchase).":"Game templates will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this game template. (or restore your existing purchase).","Gamepad":"Gamepad","Games":"Games","Games to learn or teach something":"Games to learn or teach something","Gaming portals (Itch.io, Poki, CrazyGames...)":"Gaming portals (Itch.io, Poki, CrazyGames...)","General":"General","General:":"General:","Generate a link":"Generate a link","Generate a new link":"Generate a new link","Generate a shareable link to your game.":"Generate a shareable link to your game.","Generate all your icons from 1 file":"Generate all your icons from 1 file","Generate expression and action":"Generate expression and action","Generate random name":"Generate random name","Generate report at each preview":"Generate report at each preview","Generating your student\u2019s accounts...":"Generating your student\u2019s accounts...","Generation hint":"Generation hint","Genres":"Genres","Get Featuring":"Get Featuring","Get GDevelop Premium":"Get GDevelop Premium","Get Premium":"Get Premium","Get a GDevelop subscription to increase the limits.":"Get a GDevelop subscription to increase the limits.","Get a Gold or Pro subscription to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"Get a Gold or Pro subscription to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).","Get a Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"Get a Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.","Get a Pro subscription to invite collaborators into your project.":"Get a Pro subscription to invite collaborators into your project.","Get a Sub":"Get a Sub","Get a pro subscription to get full leaderboard customization.":"Get a pro subscription to get full leaderboard customization.","Get a pro subscription to unlock custom CSS.":"Get a pro subscription to unlock custom CSS.","Get a sample in your email":"Get a sample in your email","Get a silver or gold subscription to disable GDevelop branding.":"Get a silver or gold subscription to disable GDevelop branding.","Get a silver or gold subscription to unlock color customization.":"Get a silver or gold subscription to unlock color customization.","Get a subscription":"Get a subscription","Get a subscription to keep building with AI.":"Get a subscription to keep building with AI.","Get a subscription to unlock this packaging.":"Get a subscription to unlock this packaging.","Get access":"Get access","Get access to an exclusive channel on the [GDevelop Discord](https://discord.gg/gdevelop) by subscribing to a Gold, Pro or Education plan.":"Get access to an exclusive channel on the [GDevelop Discord](https://discord.gg/gdevelop) by subscribing to a Gold, Pro or Education plan.","Get back online to browse the huge library of free and premium examples.":"Get back online to browse the huge library of free and premium examples.","Get credit packs":"Get credit packs","Get lesson with Edu":"Get lesson with Edu","Get more GDevelop credits to keep building with AI.":"Get more GDevelop credits to keep building with AI.","Get more credits":"Get more credits","Get more leaderboards":"Get more leaderboards","Get more players":"Get more players","Get more players on your game":"Get more players on your game","Get our teaching resources":"Get our teaching resources","Get perks and cloud benefits when getting closer to your game launch. <0>Learn more":"Get perks and cloud benefits when getting closer to your game launch. <0>Learn more","Get premium":"Get premium","Get subscription":"Get subscription","Get the app":"Get the app","Get {0}!":function(a){return["Get ",a("0"),"!"]},"Get {estimatedTotalPriceFormatted} worth of value for less!":function(a){return["Get ",a("estimatedTotalPriceFormatted")," worth of value for less!"]},"GitHub repository":"GitHub repository","Github":"Github","Give feedback on a game!":"Give feedback on a game!","Global Groups":"Global Groups","Global Objects":"Global Objects","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?":"Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?":"Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?","Global groups":"Global groups","Global objects":"Global objects","Global objects in the project":"Global objects in the project","Global search":"Global search","Global search (search in project)":"Global search (search in project)","Global variable":"Global variable","Global variables":"Global variables","Go back":"Go back","Go back to {translatedExpectedEditor}{sceneMention} to keep creating your game.":function(a){return["Go back to ",a("translatedExpectedEditor"),a("sceneMention")," to keep creating your game."]},"Go to [Apple Developer Certificates list](https://developer.apple.com/account/resources/certificates/list) and click on the + button. Choose **Apple Distribution** (for app store) or **Apple Development** (for testing on device). When requested, upload the request file you downloaded.":"Go to [Apple Developer Certificates list](https://developer.apple.com/account/resources/certificates/list) and click on the + button. Choose **Apple Distribution** (for app store) or **Apple Development** (for testing on device). When requested, upload the request file you downloaded.","Go to [Apple Developer Profiles list](https://developer.apple.com/account/resources/profiles/list) and click on the + button. Choose **App Store Connect** or **iOS App Development**. Then, choose *Xcode iOS Wildcard App ID*, then the certificate you created earlier. For development, you can choose [the devices you registered](https://developer.apple.com/help/account/register-devices/register-a-single-device/). Finish by downloading the generated file and upload it here so it can be stored securely by GDevelop.":"Go to [Apple Developer Profiles list](https://developer.apple.com/account/resources/profiles/list) and click on the + button. Choose **App Store Connect** or **iOS App Development**. Then, choose *Xcode iOS Wildcard App ID*, then the certificate you created earlier. For development, you can choose [the devices you registered](https://developer.apple.com/help/account/register-devices/register-a-single-device/). Finish by downloading the generated file and upload it here so it can be stored securely by GDevelop.","Go to first page":"Go to first page","Google":"Google","Google Play (or other stores)":"Google Play (or other stores)","Got it":"Got it","Got it! I've put together a plan:":"Got it! I've put together a plan:","Gravity on particles on X axis":"Gravity on particles on X axis","Gravity on particles on Y axis":"Gravity on particles on Y axis","Group name":"Group name","Group name cannot be empty.":"Group name cannot be empty.","Group: {0}":function(a){return["Group: ",a("0")]},"Groups":"Groups","HTML5":"HTML5","HTML5 (external websites)":"HTML5 (external websites)","Had no players in the last week":"Had no players in the last week","Had {countOfSessionsLastWeek} players in the last week":function(a){return["Had ",a("countOfSessionsLastWeek")," players in the last week"]},"Has animations (JavaScript only)":"Has animations (JavaScript only)","Have you changed your usage of GDevelop?":"Have you changed your usage of GDevelop?","Having the same collision masks for all animations will erase and reset all the other animations collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the animations of the object?":"Having the same collision masks for all animations will erase and reset all the other animations collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the animations of the object?","Having the same collision masks for all frames will erase and reset all the other frames collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the frames of the animation?":"Having the same collision masks for all frames will erase and reset all the other frames collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the frames of the animation?","Having the same points for all animations will erase and reset all the other animations points. This can't be undone. Are you sure you want to share these points amongst all the animations of the object?":"Having the same points for all animations will erase and reset all the other animations points. This can't be undone. Are you sure you want to share these points amongst all the animations of the object?","Having the same points for all frames will erase and reset all the other frames points. This can't be undone. Are you sure you want to share these points amongst all the frames of the animation?":"Having the same points for all frames will erase and reset all the other frames points. This can't be undone. Are you sure you want to share these points amongst all the frames of the animation?","Health bar":"Health bar","Height":"Height","Help":"Help","Help for this action":"Help for this action","Help for this condition":"Help for this condition","Help page URL":"Help page URL","Help translate GDevelop":"Help translate GDevelop","Help us improve by telling us what could be improved:":"Help us improve by telling us what could be improved:","Help us improve our learning content":"Help us improve our learning content","Here are your redemption codes:":"Here are your redemption codes:","Here's how I'll tackle this:":"Here's how I'll tackle this:","Hidden":"Hidden","Hidden on gd.games":"Hidden on gd.games","Hide deprecated behaviors (prefer not to use anymore)":"Hide deprecated behaviors (prefer not to use anymore)","Hide details":"Hide details","Hide effect":"Hide effect","Hide experimental behaviors":"Hide experimental behaviors","Hide experimental extensions":"Hide experimental extensions","Hide experimental objects":"Hide experimental objects","Hide lifecycle functions (advanced)":"Hide lifecycle functions (advanced)","Hide other lifecycle functions (advanced)":"Hide other lifecycle functions (advanced)","Hide the AI assistant?":"Hide the AI assistant?","Hide the layer":"Hide the layer","Hide the leaderboard":"Hide the leaderboard","Hide the menu bar in the preview window":"Hide the menu bar in the preview window","Hide this hint?":"Hide this hint?","High quality":"High quality","Higher is better":"Higher is better","Higher is better (max: {formattedScore})":function(a){return["Higher is better (max: ",a("formattedScore"),")"]},"Highlight background color":"Highlight background color","Highlight text color":"Highlight text color","Hobbyists and indie devs":"Hobbyists and indie devs","Home page":"Home page","Homepage":"Homepage","Horizontal anchor":"Horizontal anchor","Horizontal flip":"Horizontal flip","Horror":"Horror","Hours":"Hours","How are you learning game dev?":"How are you learning game dev?","How are you working on your projects?":"How are you working on your projects?","How many students do you want to create?":"How many students do you want to create?","How to make my game more fun?":"How to make my game more fun?","How would you rate this chapter?":"How would you rate this chapter?","Huge":"Huge","I am learning game development":"I am learning game development","I am teaching game development":"I am teaching game development","I don\u2019t have a specific deadline":"I don\u2019t have a specific deadline","I have encountered bugs or performance problems":"I have encountered bugs or performance problems","I trust this project":"I trust this project","I want to add a leaderboard":"I want to add a leaderboard","I want to add an explosion when an enemy is destroyed":"I want to add an explosion when an enemy is destroyed","I want to create a main menu for my game":"I want to create a main menu for my game","I want to display the health of my player":"I want to display the health of my player","I want to receive the GDevelop Newsletter":"I want to receive the GDevelop Newsletter","I want to receive weekly stats about my games":"I want to receive weekly stats about my games","I'll do it later":"I'll do it later","I'm building a video game or app":"I'm building a video game or app","I'm learning or teaching game development":"I'm learning or teaching game development","I'm struggling to create what I want":"I'm struggling to create what I want","I've broken this into steps \u2014 let me walk you through it:":"I've broken this into steps \u2014 let me walk you through it:","I've mapped out a plan \u2014 here's what I'll do:":"I've mapped out a plan \u2014 here's what I'll do:","I've stopped using GDevelop":"I've stopped using GDevelop","I've thought this through \u2014 here's the plan:":"I've thought this through \u2014 here's the plan:","IDE":"IDE","IPA for App Store":"IPA for App Store","IPA for testing on registered devices":"IPA for testing on registered devices","Icon URL":"Icon URL","Icon and [DEPRECATED] text":"Icon and [DEPRECATED] text","Icon only":"Icon only","Icons":"Icons","Identifier":"Identifier","Identifier (text)":"Identifier (text)","Identifier name":"Identifier name","If activated, players won't be able to log in and claim a score just sent without being already logged in to the game.":"If activated, players won't be able to log in and claim a score just sent without being already logged in to the game.","If checked, player names will always be auto-generated, even if the game sent a custom name. Helpful if you're having a leaderboard where you want full anonymity.":"If checked, player names will always be auto-generated, even if the game sent a custom name. Helpful if you're having a leaderboard where you want full anonymity.","If no previous condition or action used the specified object(s), the picked instances count will be 0.":"If no previous condition or action used the specified object(s), the picked instances count will be 0.","If the parameter is a string or a number, you probably want to use the expressions \"GetArgumentAsString\" or \"GetArgumentAsNumber\", along with the conditions \"Compare two strings\" or \"Compare two numbers\".":"If the parameter is a string or a number, you probably want to use the expressions \"GetArgumentAsString\" or \"GetArgumentAsNumber\", along with the conditions \"Compare two strings\" or \"Compare two numbers\".","If you are in a browser, ensure you close all GDevelop tabs or restart the browser.":"If you are in a browser, ensure you close all GDevelop tabs or restart the browser.","If you are on desktop, please re-install it by downloading the latest version from <0>the website":"If you are on desktop, please re-install it by downloading the latest version from <0>the website","If you close this window while the build is being done, you can see its progress and download the game later by clicking on See All My Builds below.":"If you close this window while the build is being done, you can see its progress and download the game later by clicking on See All My Builds below.","If you don't have access to it, restart GDevelop. If you still can't access it, please contact us.":"If you don't have access to it, restart GDevelop. If you still can't access it, please contact us.","If you have a popup blocker interrupting the opening, allow the popups and try a second time to open the project.":"If you have a popup blocker interrupting the opening, allow the popups and try a second time to open the project.","If you skip this step, you can still do it manually later from the leaderboards panel in your Games Dashboard.":"If you skip this step, you can still do it manually later from the leaderboards panel in your Games Dashboard.","Ignore":"Ignore","Ignore and continue":"Ignore and continue","Image":"Image","Image resource":"Image resource","Implementation":"Implementation","Implementation steps:":"Implementation steps:","Implementing in-project monetization":"Implementing in-project monetization","Import":"Import","Import assets":"Import assets","Import extension":"Import extension","Import images":"Import images","Import one or more animations that are available in this Spine file.":"Import one or more animations that are available in this Spine file.","Importing project resources":"Importing project resources","Importing resources outside from the project folder":"Importing resources outside from the project folder","Improve and publish your Game":"Improve and publish your Game","In around a year":"In around a year","In order to purchase a marketing boost, log-in and select a game in your dashboard.":"In order to purchase a marketing boost, log-in and select a game in your dashboard.","In order to see your objects in the scene, you need to add an action \"Create objects from external layout\" in your events sheet.":"In order to see your objects in the scene, you need to add an action \"Create objects from external layout\" in your events sheet.","In order to use these external events, you still need to add a \"Link\" event in the events sheet of the corresponding scene":"In order to use these external events, you still need to add a \"Link\" event in the events sheet of the corresponding scene","In pixels.":"In pixels.","In pixels. 0 to ignore.":"In pixels. 0 to ignore.","In this tutorial you will learn:":"In this tutorial you will learn:","In-app Tutorials":"In-app Tutorials","In-game obstacles":"In-game obstacles","Include events from":"Include events from","Include store extensions":"Include store extensions","Included":"Included","Included in this bundle":"Included in this bundle","Included with GDevelop subscriptions":"Included with GDevelop subscriptions","Incompatible with the object":"Incompatible with the object","Increase seats":"Increase seats","Increase version number to {0}":function(a){return["Increase version number to ",a("0")]},"Indent Scale in Events Sheet":"Indent Scale in Events Sheet","Inferred type":"Inferred type","Initial text of the variable":"Initial text of the variable","Initial text to display":"Initial text to display","Input":"Input","Insert new...":"Insert new...","Inspect the game structure.":"Inspect the game structure.","Inspectors":"Inspectors","Instagram":"Instagram","Install again":"Install again","Install all the assets":"Install all the assets","Install font":"Install font","Install in project":"Install in project","Install the missing assets":"Install the missing assets","Installed as an app. No updates available.":"Installed as an app. No updates available.","Installing assets...":"Installing assets...","Instance":"Instance","Instance Variables":"Instance Variables","Instance properties":"Instance properties","Instance variables":"Instance variables","Instance variables overwrite the default values of the variables of the object.":"Instance variables overwrite the default values of the variables of the object.","Instance variables:":"Instance variables:","Instances":"Instances","Instances List":"Instances List","Instances editor":"Instances editor","Instances editor rendering":"Instances editor rendering","Instances editor.":"Instances editor.","Instances list":"Instances list","Instant":"Instant","Instant Games":"Instant Games","Instant or permanent force":"Instant or permanent force","Instead of <0>{0}":function(a){return["Instead of <0>",a("0"),""]},"Instruction":"Instruction","Instruction editor":"Instruction editor","Interaction Design":"Interaction Design","Interactive content":"Interactive content","Intermediate":"Intermediate","Intermediate course":"Intermediate course","Internal Name":"Internal Name","Internal instruction names":"Internal instruction names","Invalid email address":"Invalid email address","Invalid email address.":"Invalid email address.","Invalid file":"Invalid file","Invalid name":"Invalid name","Invalid parameters in events ({invalidParametersCount})":function(a){return["Invalid parameters in events (",a("invalidParametersCount"),")"]},"Invert Condition":"Invert Condition","Invert condition":"Invert condition","Invitation already accepted":"Invitation already accepted","Invitation sent to {lastInvitedEmail}.":function(a){return["Invitation sent to ",a("lastInvitedEmail"),"."]},"Invite":"Invite","Invite a student":"Invite a student","Invite a teacher":"Invite a teacher","Invite collaborators":"Invite collaborators","Invite students":"Invite students","Invite teacher":"Invite teacher","Inviting a user will provide them admin capabilities over the student accounts, as well as all the subscription perks. Only accounts without an existing subscription can be invited.":"Inviting a user will provide them admin capabilities over the student accounts, as well as all the subscription perks. Only accounts without an existing subscription can be invited.","Is not published on gd.games":"Is not published on gd.games","Is published on gd.games":"Is published on gd.games","Is the average time a player spends in the game.":"Is the average time a player spends in the game.","Is there anything that you struggle with while working on your projects?":"Is there anything that you struggle with while working on your projects?","Isometric":"Isometric","It didn't do enough":"It didn't do enough","It didn't work at all":"It didn't work at all","It is already installed/available in the project.":"It is already installed/available in the project.","It is part of behavior <0/> from extension <1/>.":"It is part of behavior <0/> from extension <1/>.","It is part of extension <0/> {0} .":function(a){return["It is part of extension <0/> ",a("0")," ."]},"It is part of object <0/> from extension <1/>.":"It is part of object <0/> from extension <1/>.","It looks like the build has timed out, please try again.":"It looks like the build has timed out, please try again.","It seems you entered a name with a quote. Variable names should not be quoted.":"It seems you entered a name with a quote. Variable names should not be quoted.","It will be downloaded and installed automatically.":"It will be downloaded and installed automatically.","It's missing a feature (please specify)":"It's missing a feature (please specify)","Italic":"Italic","Itch.io, Poki, CrazyGames...":"Itch.io, Poki, CrazyGames...","JSON resource":"JSON resource","JavaScript file":"JavaScript file","JavaScript files are imported as is (no compilation and not available in JavaScript code block autocompletions). Make sure your extension is used by the game (at least one action/condition used in a scene), otherwise the files won't be imported.":"JavaScript files are imported as is (no compilation and not available in JavaScript code block autocompletions). Make sure your extension is used by the game (at least one action/condition used in a scene), otherwise the files won't be imported.","JavaScript files must be imported by an extension - by choosing it the extension properties. Otherwise, it won't be loaded by the game.":"JavaScript files must be imported by an extension - by choosing it the extension properties. Otherwise, it won't be loaded by the game.","Join the discussion":"Join the discussion","Joystick controls":"Joystick controls","Json":"Json","Jump forward in time on creation (in seconds)":"Jump forward in time on creation (in seconds)","Just now":"Just now","Keep centered (best for game content)":"Keep centered (best for game content)","Keep learning":"Keep learning","Keep ratio":"Keep ratio","Keep subscription":"Keep subscription","Keep the new project linked to this game":"Keep the new project linked to this game","Keep their original location":"Keep their original location","Keep top-left corner fixed (best for content that can extend)":"Keep top-left corner fixed (best for content that can extend)","Keyboard":"Keyboard","Keyboard Key (deprecated)":"Keyboard Key (deprecated)","Keyboard Key (text)":"Keyboard Key (text)","Keyboard Shortcuts":"Keyboard Shortcuts","Keyboard key":"Keyboard key","Keyboard key (text)":"Keyboard key (text)","Label":"Label","Label displayed in editor":"Label displayed in editor","Lack of Graphics & Animation":"Lack of Graphics & Animation","Lack of Marketing & Publicity":"Lack of Marketing & Publicity","Lack of Music & Sound":"Lack of Music & Sound","Landscape":"Landscape","Language":"Language","Last (after other files)":"Last (after other files)","Last edited":"Last edited","Last edited:":"Last edited:","Last modified":"Last modified","Last name":"Last name","Last run collected on {0} frames.":function(a){return["Last run collected on ",a("0")," frames."]},"Latest save":"Latest save","Launch network preview over WiFi/LAN":"Launch network preview over WiFi/LAN","Launch new preview":"Launch new preview","Launch preview in...":"Launch preview in...","Launch preview with debugger and profiler":"Launch preview with debugger and profiler","Launch preview with diagnostic report":"Launch preview with diagnostic report","Layer":"Layer","Layer (text)":"Layer (text)","Layer effect (text)":"Layer effect (text)","Layer effect name":"Layer effect name","Layer effect property (text)":"Layer effect property (text)","Layer effect property name":"Layer effect property name","Layer properties":"Layer properties","Layer where instances are added by default":"Layer where instances are added by default","Layers":"Layers","Layers list":"Layers list","Layers:":"Layers:","Layouts":"Layouts","Leaderboard":"Leaderboard","Leaderboard (text)":"Leaderboard (text)","Leaderboard appearance":"Leaderboard appearance","Leaderboard name":"Leaderboard name","Leaderboard options":"Leaderboard options","Leaderboards":"Leaderboards","Leaderboards help retain your players":"Leaderboards help retain your players","Learn":"Learn","Learn about revenue on gd.games":"Learn about revenue on gd.games","Learn all the game-building mechanics of GDevelop":"Learn all the game-building mechanics of GDevelop","Learn by dissecting ready-made games":"Learn by dissecting ready-made games","Learn how to make <0>multiplayer games with GDevelop.":"Learn how to make <0>multiplayer games with GDevelop.","Learn how to use <0>leaderboards on GDevelop.":"Learn how to use <0>leaderboards on GDevelop.","Learn more":"Learn more","Learn more about Instant Games publication":"Learn more about Instant Games publication","Learn more about manual builds":"Learn more about manual builds","Learn more about publishing to platforms":"Learn more about publishing to platforms","Learn section":"Learn section","Learn the fundamental principles of GDevelop":"Learn the fundamental principles of GDevelop","Leave":"Leave","Leave and lose all changes":"Leave and lose all changes","Leave the customization?":"Leave the customization?","Leave the tutorial":"Leave the tutorial","Left":"Left","Left (primary)":"Left (primary)","Left bound":"Left bound","Left bound should be smaller than right bound":"Left bound should be smaller than right bound","Left face":"Left face","Left margin":"Left margin","Length":"Length","Less than a month":"Less than a month","Let me lay out the steps:":"Let me lay out the steps:","Let the user select":"Let the user select","Let's finish your game, shall we?":"Let's finish your game, shall we?","Let's go":"Let's go","Level {0}":function(a){return["Level ",a("0")]},"License":"License","Licensing":"Licensing","Lifecycle functions (advanced)":"Lifecycle functions (advanced)","Lifecycle functions only included when extension used":"Lifecycle functions only included when extension used","Lifecycle methods":"Lifecycle methods","Lifetime access":"Lifetime access","Light (colored)":"Light (colored)","Light (plain)":"Light (plain)","Light object automatically put in lighting layer":"Light object automatically put in lighting layer","Lighting settings":"Lighting settings","Limit cannot be empty, uncheck or fill a value between {extremeAllowedScoreMin} and {extremeAllowedScoreMax}.":function(a){return["Limit cannot be empty, uncheck or fill a value between ",a("extremeAllowedScoreMin")," and ",a("extremeAllowedScoreMax"),"."]},"Limit scores":"Limit scores","Limited time offer:":"Limited time offer:","Line":"Line","Line color":"Line color","Line height":"Line height","Linear (antialiased rendering, good for most games)":"Linear (antialiased rendering, good for most games)","Lines length":"Lines length","Lines thickness":"Lines thickness","Links can't be used outside of a scene.":"Links can't be used outside of a scene.","Linux (AppImage)":"Linux (AppImage)","Live Ops & Analytics":"Live Ops & Analytics","Live preview (apply changes to the running preview)":"Live preview (apply changes to the running preview)","Load autosave":"Load autosave","Load local lesson":"Load local lesson","Load more":"Load more","Load more...":"Load more...","Loading":"Loading","Loading Position":"Loading Position","Loading course...":"Loading course...","Loading preview...":"Loading preview...","Loading screen":"Loading screen","Loading the game link...":"Loading the game link...","Loading the game...":"Loading the game...","Loading your profile...":"Loading your profile...","Loading...":"Loading...","Lobby":"Lobby","Lobby configuration":"Lobby configuration","Local Variable":"Local Variable","Local variables":"Local variables","Locate file":"Locate file","Location":"Location","Lock position/angle in the editor":"Lock position/angle in the editor","Locked":"Locked","Log in":"Log in","Log in to your account":"Log in to your account","Log in to your account to activate your purchase!":"Log in to your account to activate your purchase!","Log-in to purchase these credits":"Log-in to purchase these credits","Log-in to purchase this course":"Log-in to purchase this course","Log-in to purchase this item":"Log-in to purchase this item","Login":"Login","Login now":"Login now","Login with GDevelop":"Login with GDevelop","Logo and progress fade in delay (in seconds)":"Logo and progress fade in delay (in seconds)","Logo and progress fade in duration (in seconds)":"Logo and progress fade in duration (in seconds)","Logout":"Logout","Long":"Long","Long description":"Long description","Long press for more events":"Long press for more events","Long press for quick menu":"Long press for quick menu","Looks like your project isn't there!{0}Your project must be stored on your computer.":function(a){return["Looks like your project isn't there!",a("0"),"Your project must be stored on your computer."]},"Loop":"Loop","Loop Counter Variable":"Loop Counter Variable","Low quality":"Low quality","Lower is better":"Lower is better","Lower is better (min: {formattedScore})":function(a){return["Lower is better (min: ",a("formattedScore"),")"]},"Make a character move like in a retro Pokemon game.":"Make a character move like in a retro Pokemon game.","Make a knight jump and run in this platformer game.":"Make a knight jump and run in this platformer game.","Make a knight jump and run.":"Make a knight jump and run.","Make a minimal 3D shooter":"Make a minimal 3D shooter","Make an entire game":"Make an entire game","Make asynchronous":"Make asynchronous","Make complete games step by step":"Make complete games step by step","Make it a Else for the previous event":"Make it a Else for the previous event","Make private":"Make private","Make public":"Make public","Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.":"Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.","Make sure to verify all your events creating objects, and optionally add an action to set the Z order back to 0 if it's important for your game. Do you want to continue (recommended)?":"Make sure to verify all your events creating objects, and optionally add an action to set the Z order back to 0 if it's important for your game. Do you want to continue (recommended)?","Make sure to verify your events and variables that may rely on string variables defaulting to \"0\". Do you want to continue (recommended)?":"Make sure to verify your events and variables that may rely on string variables defaulting to \"0\". Do you want to continue (recommended)?","Make sure you create your GitHub account, star the repository called 4ian/GDevelop, enter your username here and try again.":"Make sure you create your GitHub account, star the repository called 4ian/GDevelop, enter your username here and try again.","Make sure you follow the GDevelop account and try again.":"Make sure you follow the GDevelop account and try again.","Make sure you have a proper internet connection or try again later.":"Make sure you have a proper internet connection or try again later.","Make sure you star the repository called 4ian/GDevelop with your GitHub user and try again.":"Make sure you star the repository called 4ian/GDevelop with your GitHub user and try again.","Make sure you subscribed to the GDevelop channel and try again.":"Make sure you subscribed to the GDevelop channel and try again.","Make sure you're online, have a proper internet connection and try again. If you download and use GDevelop desktop application, you can also run previews without any internet connection.":"Make sure you're online, have a proper internet connection and try again. If you download and use GDevelop desktop application, you can also run previews without any internet connection.","Make sure your username is correct, follow the GDevelop account and try again.":"Make sure your username is correct, follow the GDevelop account and try again.","Make sure your username is correct, subscribe to the GDevelop channel and try again.":"Make sure your username is correct, subscribe to the GDevelop channel and try again.","Make synchronous":"Make synchronous","Make the leaderboard public":"Make the leaderboard public","Make the purpose of the property easy to understand":"Make the purpose of the property easy to understand","Make your game title":"Make your game title","Make your game visible to the GDevelop community and to the world with <0>Marketing Boosts.":"Make your game visible to the GDevelop community and to the world with <0>Marketing Boosts.","Make your game visible to the GDevelop community and to the world with Marketing Boosts.":"Make your game visible to the GDevelop community and to the world with Marketing Boosts.","Make your game visible to the GDevelop community and to the world with Marketing Boosts. <0>Read more about how they increase your views.":"Make your game visible to the GDevelop community and to the world with Marketing Boosts. <0>Read more about how they increase your views.","Making \"{objectOrGroupName}\" global would conflict with the following scenes that have a group or an object with the same name:{0}Continue only if you know what you're doing.":function(a){return["Making \"",a("objectOrGroupName"),"\" global would conflict with the following scenes that have a group or an object with the same name:",a("0"),"Continue only if you know what you're doing."]},"Manage":"Manage","Manage game online":"Manage game online","Manage leaderboards":"Manage leaderboards","Manage payments":"Manage payments","Manage seats":"Manage seats","Manage subscription":"Manage subscription","Manual build":"Manual build","Mark all as read":"Mark all as read","Mark all as solved":"Mark all as solved","Mark as read":"Mark as read","Mark as unread":"Mark as unread","Mark this function as deprecated to discourage its use.":"Mark this function as deprecated to discourage its use.","Marketing":"Marketing","Marketing campaigns":"Marketing campaigns","Match case":"Match case","Maximum 2D drawing distance":"Maximum 2D drawing distance","Maximum FPS (0 for unlimited)":"Maximum FPS (0 for unlimited)","Maximum Fps is too low":"Maximum Fps is too low","Maximum emitter force applied on particles":"Maximum emitter force applied on particles","Maximum number of particles displayed":"Maximum number of particles displayed","Maximum number of players per lobby":"Maximum number of players per lobby","Maximum score":"Maximum score","Me":"Me","Mean played time":"Mean played time","Measurement unit":"Measurement unit","Medium":"Medium","Medium quality":"Medium quality","Memory Tracker Registry":"Memory Tracker Registry","Menu":"Menu","Mesh shapes are only supported for 3D model objects.":"Mesh shapes are only supported for 3D model objects.","Message":"Message","Middle (Auxiliary button, usually the wheel button)":"Middle (Auxiliary button, usually the wheel button)","Minimize":"Minimize","Minimum FPS":"Minimum FPS","Minimum Fps is too low":"Minimum Fps is too low","Minimum duration of the screen (in seconds)":"Minimum duration of the screen (in seconds)","Minimum emitter force applied on particles":"Minimum emitter force applied on particles","Minimum number of players to start the lobby":"Minimum number of players to start the lobby","Minimum score":"Minimum score","Minutes":"Minutes","Missing actions/conditions/expressions ( {missingInstructionsCount})":function(a){return["Missing actions/conditions/expressions ( ",a("missingInstructionsCount"),")"]},"Missing behaviors for object \"{objectName}\"":function(a){return["Missing behaviors for object \"",a("objectName"),"\""]},"Missing instructions":"Missing instructions","Missing objects":"Missing objects","Missing scene variables":"Missing scene variables","Missing some contributions? If you are the author, create a Pull Request on the corresponding GitHub repository after adding your username in the authors of the example or the extension - or directly ask the original author to add your username.":"Missing some contributions? If you are the author, create a Pull Request on the corresponding GitHub repository after adding your username in the authors of the example or the extension - or directly ask the original author to add your username.","Missing texture atlas name in the Spine file.":"Missing texture atlas name in the Spine file.","Missing texture for an atlas in the Spine file.":"Missing texture for an atlas in the Spine file.","Missing variables for object \"{objectName}\"":function(a){return["Missing variables for object \"",a("objectName"),"\""]},"Mixed":"Mixed","Mixed values":"Mixed values","Mobile":"Mobile","Mobile portrait":"Mobile portrait","Modifying":"Modifying","Month":"Month","Monthly, {0}":function(a){return["Monthly, ",a("0")]},"Monthly, {0} per seat":function(a){return["Monthly, ",a("0")," per seat"]},"More details (optional)":"More details (optional)","More than 6 months":"More than 6 months","Most browsers will require the user to have interacted with your game before allowing any video to play. Make sure that the player click/touch the screen at the beginning of the game before starting any video.":"Most browsers will require the user to have interacted with your game before allowing any video to play. Make sure that the player click/touch the screen at the beginning of the game before starting any video.","Most monitors have a refresh rate of 60 FPS. Setting a maximum number of FPS under 60 will force the game to skip frames, and the real number of FPS will be way below 60, making the game laggy and impacting the gameplay negatively. Consider putting 60 or more for the maximum number or FPS, or disable it by setting 0.":"Most monitors have a refresh rate of 60 FPS. Setting a maximum number of FPS under 60 will force the game to skip frames, and the real number of FPS will be way below 60, making the game laggy and impacting the gameplay negatively. Consider putting 60 or more for the maximum number or FPS, or disable it by setting 0.","Most sessions (all time)":"Most sessions (all time)","Most sessions (past 7 days)":"Most sessions (past 7 days)","Mouse button":"Mouse button","Mouse button (deprecated)":"Mouse button (deprecated)","Mouse button (text)":"Mouse button (text)","Move Events into a Group":"Move Events into a Group","Move down":"Move down","Move events into a new group":"Move events into a new group","Move instances":"Move instances","Move like in retro Pokemon games.":"Move like in retro Pokemon games.","Move objects":"Move objects","Move objects from layer {0} to:":function(a){return["Move objects from layer ",a("0")," to:"]},"Move to bottom":"Move to bottom","Move to folder":"Move to folder","Move to position {index}":function(a){return["Move to position ",a("index")]},"Move to top":"Move to top","Move up":"Move up","Move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["Move ",a("existingInstanceCount")," <0>",a("object_name")," instance(s) to ",a("0")," (layer: ",a("1"),") in scene ",a("scene_name"),"."]},"Movement":"Movement","Multiline":"Multiline","Multiline text":"Multiline text","Multiplayer":"Multiplayer","Multiplayer lobbies":"Multiplayer lobbies","Multiple files, saved in folder next to the main file":"Multiple files, saved in folder next to the main file","Multiple frames":"Multiple frames","Multiple states":"Multiple states","Multiply scores with collectibles.":"Multiply scores with collectibles.","Music":"Music","Musics will only be played if the user has interacted with the game before (by clicking/touching it or pressing a key on the keyboard). This is due to browser limitations. Make sure to have the user interact with the game before using this action.":"Musics will only be played if the user has interacted with the game before (by clicking/touching it or pressing a key on the keyboard). This is due to browser limitations. Make sure to have the user interact with the game before using this action.","My Profile":"My Profile","My manual save":"My manual save","My profile":"My profile","MyObject":"MyObject","NPM":"NPM","Name":"Name","Name (optional)":"Name (optional)","Name displayed in editor":"Name displayed in editor","Name of the external layout":"Name of the external layout","Name version":"Name version","Narrative & Writing":"Narrative & Writing","Near plane distance":"Near plane distance","Nearest (no antialiasing, good for pixel perfect games)":"Nearest (no antialiasing, good for pixel perfect games)","Need latest GDevelop version":"Need latest GDevelop version","Need more?":"Need more?","Network":"Network","Never":"Never","Never preload":"Never preload","Never unload":"Never unload","Never unload (default)":"Never unload (default)","New":"New","New 3D editor":"New 3D editor","New Apple Certificate/Profile":"New Apple Certificate/Profile","New Auth Key (App Store upload)":"New Auth Key (App Store upload)","New Event Below":"New Event Below","New Object dialog":"New Object dialog","New chat":"New chat","New extension name":"New extension name","New group name":"New group name","New interactive services for clients":"New interactive services for clients","New lesson every month with the Education subscription":"New lesson every month with the Education subscription","New object":"New object","New object from scratch":"New object from scratch","New resource":"New resource","New variant":"New variant","Next":"Next","Next actions (and sub-events) will wait for this action to be finished before running.":"Next actions (and sub-events) will wait for this action to be finished before running.","Next page":"Next page","Next: Game logo":"Next: Game logo","Next: Tweak Gameplay":"Next: Tweak Gameplay","No":"No","No GDevelop user with this email can be found.":"No GDevelop user with this email can be found.","No access to project save":"No access to project save","No atlas image configured.":"No atlas image configured.","No behavior":"No behavior","No bio defined.":"No bio defined.","No changes to the game size":"No changes to the game size","No children":"No children","No cycle":"No cycle","No data to show yet. Share your game creator profile with more people to get more players!":"No data to show yet. Share your game creator profile with more people to get more players!","No entries":"No entries","No experience at all":"No experience at all","No forum account was found with email {0}. Make sure you have created an account on the GDevelop forum with this email.":function(a){return["No forum account was found with email ",a("0"),". Make sure you have created an account on the GDevelop forum with this email."]},"No game matching your search.":"No game matching your search.","No information about available updates.":"No information about available updates.","No inspector, choose another element in the list or toggle the raw data view.":"No inspector, choose another element in the list or toggle the raw data view.","No issues found in your project.":"No issues found in your project.","No leaderboard chosen":"No leaderboard chosen","No leaderboards":"No leaderboards","No lighting effect":"No lighting effect","No link defined.":"No link defined.","No matches found for \"{0}\".":function(a){return["No matches found for \"",a("0"),"\"."]},"No new animation":"No new animation","No options":"No options","No preview running. Run a preview and you will be able to inspect it with the debugger":"No preview running. Run a preview and you will be able to inspect it with the debugger","No project save available":"No project save available","No project save is available for this request message.":"No project save is available for this request message.","No project to open":"No project to open","No projects found for this game. Open manually a local project to have it added to the game dashboard.":"No projects found for this game. Open manually a local project to have it added to the game dashboard.","No projects yet.":"No projects yet.","No recent project":"No recent project","No result":"No result","No results":"No results","No results returned for your search. Try something else or typing at least 2 characters.":"No results returned for your search. Try something else or typing at least 2 characters.","No results returned for your search. Try something else!":"No results returned for your search. Try something else!","No results returned for your search. Try something else, browse the categories or create your object from scratch!":"No results returned for your search. Try something else, browse the categories or create your object from scratch!","No shortcut":"No shortcut","No similar asset was found.":"No similar asset was found.","No thumbnail":"No thumbnail","No thumbnail for your game, you can update it in your Game Dashboard!":"No thumbnail for your game, you can update it in your Game Dashboard!","No update available. You're using the latest version!":"No update available. You're using the latest version!","No uses left":"No uses left","No variable":"No variable","No warning":"No warning","No, close project":"No, close project","None":"None","Not applicable":"Not applicable","Not applicable to this plan":"Not applicable to this plan","Not compatible":"Not compatible","Not installed as an app. No updates available.":"Not installed as an app. No updates available.","Not now, thanks!":"Not now, thanks!","Not on mobile":"Not on mobile","Not published":"Not published","Not set":"Not set","Not stored":"Not stored","Not sure how many credits you need? Check <0>this guide to help you decide.":"Not sure how many credits you need? Check <0>this guide to help you decide.","Not visible":"Not visible","Note that the distinction between what is a mobile device and what is not is becoming blurry (with devices like iPad pro and other \"desktop-class\" tablets). If you use this for mobile controls, prefer to check if the device has touchscreen support.":"Note that the distinction between what is a mobile device and what is not is becoming blurry (with devices like iPad pro and other \"desktop-class\" tablets). If you use this for mobile controls, prefer to check if the device has touchscreen support.","Note that this option will only have an effect when saving your project on your computer's filesystem from the desktop app. Read about [using Git or GitHub with projects in multiple files](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/).":"Note that this option will only have an effect when saving your project on your computer's filesystem from the desktop app. Read about [using Git or GitHub with projects in multiple files](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/).","Note: write _PARAMx_ for parameters, e.g: Flash _PARAM1_ for 5 seconds":"Note: write _PARAMx_ for parameters, e.g: Flash _PARAM1_ for 5 seconds","Nothing corresponding to your search":"Nothing corresponding to your search","Nothing corresponding to your search. Try browsing the list instead.":"Nothing corresponding to your search. Try browsing the list instead.","Nothing to configure for this behavior.":"Nothing to configure for this behavior.","Nothing to configure for this effect.":"Nothing to configure for this effect.","Notifications":"Notifications","Number":"Number","Number between 0 and 1":"Number between 0 and 1","Number from a list of options (number)":"Number from a list of options (number)","Number of entries to display":"Number of entries to display","Number of particles in tank (-1 for infinite)":"Number of particles in tank (-1 for infinite)","Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.":"Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.","Number of seats":"Number of seats","Number of students":"Number of students","OK":"OK","OWNED":"OWNED","Object":"Object","Object Configuration":"Object Configuration","Object Groups":"Object Groups","Object Name":"Object Name","Object Variables":"Object Variables","Object animation (text)":"Object animation (text)","Object animation name":"Object animation name","Object editor":"Object editor","Object effect (text)":"Object effect (text)","Object effect name":"Object effect name","Object effect property (text)":"Object effect property (text)","Object effect property name":"Object effect property name","Object filters":"Object filters","Object group":"Object group","Object group properties":"Object group properties","Object groups":"Object groups","Object groups list":"Object groups list","Object name":"Object name","Object on which this behavior can be used":"Object on which this behavior can be used","Object point (text)":"Object point (text)","Object point name":"Object point name","Object properties":"Object properties","Object skin name":"Object skin name","Object type":"Object type","Object variable":"Object variable","Object's children":"Object's children","Object's children groups":"Object's children groups","Object's groups":"Object's groups","Objects":"Objects","Objects and characters":"Objects and characters","Objects created using events on this layer will be given a \"Z order\" of {0}, so that they appear in front of all objects of this layer. You can change this using the action to change an object Z order, after using an action to create it.":function(a){return["Objects created using events on this layer will be given a \"Z order\" of ",a("0"),", so that they appear in front of all objects of this layer. You can change this using the action to change an object Z order, after using an action to create it."]},"Objects groups":"Objects groups","Objects inside custom objects can't contain the following behaviors:":"Objects inside custom objects can't contain the following behaviors:","Objects list":"Objects list","Objects on {0}":function(a){return["Objects on ",a("0")]},"Objects or groups being directly referenced in the events: {0}":function(a){return["Objects or groups being directly referenced in the events: ",a("0")]},"Objects used with wrong actions or conditions":"Objects used with wrong actions or conditions","Official Game Dev courses":"Official Game Dev courses","Oh no! Your subscription from the redemption code has expired. You can renew it by redeeming a new code or getting a new subscription.":"Oh no! Your subscription from the redemption code has expired. You can renew it by redeeming a new code or getting a new subscription.","Ok":"Ok","Ok, don't show me this again":"Ok, don't show me this again","Old, legacy upload key (only if you used to publish your game as an APK and already activated Play App Signing)":"Old, legacy upload key (only if you used to publish your game as an APK and already activated Play App Signing)","Omit":"Omit","On Itch and/or Newgrounds":"On Itch and/or Newgrounds","On Poki and/or CrazyGames":"On Poki and/or CrazyGames","On Steam and/or Epic Games":"On Steam and/or Epic Games","On game page only":"On game page only","On my own":"On my own","Once removed, you'll need to generate a new certificate. Provisioning profiles will also be removed.":"Once removed, you'll need to generate a new certificate. Provisioning profiles will also be removed.","Once you're done, come back to GDevelop and the assets will be added to your account automatically.":"Once you're done, come back to GDevelop and the assets will be added to your account automatically.","Once you're done, come back to GDevelop and the bundle will be added to your account automatically.":"Once you're done, come back to GDevelop and the bundle will be added to your account automatically.","Once you're done, come back to GDevelop and the credits will be added to your account automatically.":"Once you're done, come back to GDevelop and the credits will be added to your account automatically.","Once you're done, come back to GDevelop and the game template will be added to your account automatically.":"Once you're done, come back to GDevelop and the game template will be added to your account automatically.","Once you're done, come back to GDevelop and your account will be upgraded automatically, unlocking the extra exports and online services.":"Once you're done, come back to GDevelop and your account will be upgraded automatically, unlocking the extra exports and online services.","Once you're done, start adding some functions to the behavior. Then, test the behavior by adding it to an object in a scene.":"Once you're done, start adding some functions to the behavior. Then, test the behavior by adding it to an object in a scene.","Once you're done, you will receive an email confirmation so that you can link the bundle to your account.":"Once you're done, you will receive an email confirmation so that you can link the bundle to your account.","One project at a time \u2014 Upgrade for more":"One project at a time \u2014 Upgrade for more","One-click packaging":"One-click packaging","Only PNG, JPEG and WEBP files are supported.":"Only PNG, JPEG and WEBP files are supported.","Only best entry":"Only best entry","Only cloud projects can be displayed here. If the user has created local projects, they need to be saved as cloud projects to be visible.":"Only cloud projects can be displayed here. If the user has created local projects, they need to be saved as cloud projects to be visible.","Only player's best entries are displayed.":"Only player's best entries are displayed.","Oops! Looks like this game has no logo set up, you can continue to the next step.":"Oops! Looks like this game has no logo set up, you can continue to the next step.","Opacity":"Opacity","Opacity (0 - 255)":"Opacity (0 - 255)","Open":"Open","Open About to download and install it.":"Open About to download and install it.","Open Apple Developer":"Open Apple Developer","Open Debugger":"Open Debugger","Open Game dashboard":"Open Game dashboard","Open Instances List Panel":"Open Instances List Panel","Open Layers Panel":"Open Layers Panel","Open My Profile":"Open My Profile","Open Object Groups Panel":"Open Object Groups Panel","Open Objects Panel":"Open Objects Panel","Open Properties Panel":"Open Properties Panel","Open Recent":"Open Recent","Open a new project? Any changes that have not been saved will be lost.":"Open a new project? Any changes that have not been saved will be lost.","Open a project":"Open a project","Open all tasks":"Open all tasks","Open another chat?":"Open another chat?","Open build link":"Open build link","Open command palette":"Open command palette","Open course":"Open course","Open events sheet":"Open events sheet","Open exam":"Open exam","Open extension settings":"Open extension settings","Open extension...":"Open extension...","Open external events...":"Open external events...","Open external layout...":"Open external layout...","Open file":"Open file","Open folder":"Open folder","Open from computer with GDevelop desktop app":"Open from computer with GDevelop desktop app","Open game for player feedback":"Open game for player feedback","Open in Store":"Open in Store","Open in a larger editor":"Open in a larger editor","Open in editor":"Open in editor","Open layer editor":"Open layer editor","Open lesson":"Open lesson","Open memory tracker registry":"Open memory tracker registry","Open more settings":"Open more settings","Open project":"Open project","Open project icons":"Open project icons","Open project manager":"Open project manager","Open project properties":"Open project properties","Open project resources":"Open project resources","Open quick customization":"Open quick customization","Open recent project...":"Open recent project...","Open report":"Open report","Open resource in browser":"Open resource in browser","Open scene editor":"Open scene editor","Open scene events":"Open scene events","Open scene properties":"Open scene properties","Open scene variables":"Open scene variables","Open scene...":"Open scene...","Open settings":"Open settings","Open task":"Open task","Open template":"Open template","Open the console":"Open the console","Open the exported game folder":"Open the exported game folder","Open the performance profiler":"Open the performance profiler","Open the project":"Open the project","Open the project associated with this AI request to restore to this state.":"Open the project associated with this AI request to restore to this state.","Open the project folder":"Open the project folder","Open the properties panel":"Open the properties panel","Open version":"Open version","Open version history":"Open version history","Open visual editor":"Open visual editor","Open visual editor for the object":"Open visual editor for the object","Open...":"Open...","Opening latest save...":"Opening latest save...","Opening older version...":"Opening older version...","Opening portal":"Opening portal","Operation not allowed":"Operation not allowed","Operator":"Operator","Optimize for Pixel Art":"Optimize for Pixel Art","Optional animation name":"Optional animation name","Optional. Enter a full URL (starting with https://) to a help page. A help icon will appear next to the action/condition/expression title in the editor, allowing users to quickly access documentation.":"Optional. Enter a full URL (starting with https://) to a help page. A help icon will appear next to the action/condition/expression title in the editor, allowing users to quickly access documentation.","Optionally, explain the purpose of the property in more details":"Optionally, explain the purpose of the property in more details","Options":"Options","Or flash this QR code:":"Or flash this QR code:","Or start typing...":"Or start typing...","Ordering":"Ordering","Orthographic camera":"Orthographic camera","Other":"Other","Other actions":"Other actions","Other conditions":"Other conditions","Other lifecycle methods":"Other lifecycle methods","Other reason":"Other reason","Other reason (please specify)":"Other reason (please specify)","Outdated extension":"Outdated extension","Outline":"Outline","Outline color":"Outline color","Outline opacity (0-255)":"Outline opacity (0-255)","Outline size (in pixels)":"Outline size (in pixels)","Overriding the ID may have unwanted consequences, such as blocking the ability to connect to any peer. Do not use this feature unless you really know what you are doing.":"Overriding the ID may have unwanted consequences, such as blocking the ability to connect to any peer. Do not use this feature unless you really know what you are doing.","Overwrite":"Overwrite","Owned":"Owned","Owned by another scene":"Owned by another scene","Owner":"Owner","Owners":"Owners","P2P is merely a peer-to-peer networking solution. It only handles the connection to another player, and the exchange of messages. Higher-level tasks, such as synchronizing the game state, are left to by implemented by you. Use the THNK Framework if you seek an easy, performant and flexible higher-level solution.":"P2P is merely a peer-to-peer networking solution. It only handles the connection to another player, and the exchange of messages. Higher-level tasks, such as synchronizing the game state, are left to by implemented by you. Use the THNK Framework if you seek an easy, performant and flexible higher-level solution.","Pack sounds":"Pack sounds","Pack type":"Pack type","Package game files":"Package game files","Package name (for iOS and Android)":"Package name (for iOS and Android)","Package the game for iOS, using your Apple Developer account.":"Package the game for iOS, using your Apple Developer account.","Packaging":"Packaging","Packaging your game for Android will create an APK file that can be installed on Android phones or an Android App Bundle that can be published to Google Play.":"Packaging your game for Android will create an APK file that can be installed on Android phones or an Android App Bundle that can be published to Google Play.","Packaging...":"Packaging...","Paint a Level with Tiles":"Paint a Level with Tiles","Panel sprite":"Panel sprite","Parameter #{0}":function(a){return["Parameter #",a("0")]},"Parameter name":"Parameter name","Parameters":"Parameters","Parameters allow function users to give data.":"Parameters allow function users to give data.","Parameters can't have children.":"Parameters can't have children.","Particle end size (in percents)":"Particle end size (in percents)","Particle maximum lifetime (in seconds)":"Particle maximum lifetime (in seconds)","Particle maximum rotation speed (degrees/second)":"Particle maximum rotation speed (degrees/second)","Particle minimum lifetime (in seconds)":"Particle minimum lifetime (in seconds)","Particle minimum rotation speed (degrees/second)":"Particle minimum rotation speed (degrees/second)","Particle start size (in percents)":"Particle start size (in percents)","Particle type":"Particle type","Particles end color":"Particles end color","Particles start color":"Particles start color","Particles start height":"Particles start height","Particles start width":"Particles start width","Password":"Password","Password cannot be empty":"Password cannot be empty","Paste":"Paste","Paste action(s)":"Paste action(s)","Paste and Match Style":"Paste and Match Style","Paste condition(s)":"Paste condition(s)","Paste {clipboardObjectName}":function(a){return["Paste ",a("clipboardObjectName")]},"Paste {clipboardObjectName} as a Global Object":function(a){return["Paste ",a("clipboardObjectName")," as a Global Object"]},"Paste {clipboardObjectName} as a Global Object inside folder":function(a){return["Paste ",a("clipboardObjectName")," as a Global Object inside folder"]},"Paste {clipboardObjectName} inside folder":function(a){return["Paste ",a("clipboardObjectName")," inside folder"]},"Pause":"Pause","Pause the game (from the toolbar) or hit refresh (on the left) to inspect the game":"Pause the game (from the toolbar) or hit refresh (on the left) to inspect the game","Paused":"Paused","Paypal secure":"Paypal secure","Peer to peer IP address leak warning/THNK recommendation":"Peer to peer IP address leak warning/THNK recommendation","Peer to peer data-loss notice":"Peer to peer data-loss notice","Pending":"Pending","Pending invitations":"Pending invitations","Percentage of people who leave before 60 seconds including loading screens.":"Percentage of people who leave before 60 seconds including loading screens.","Permanent":"Permanent","Permanently delete the leaderboard?":"Permanently delete the leaderboard?","Permanently delete the project?":"Permanently delete the project?","Personal license for claim with Gold or Pro subscription":"Personal license for claim with Gold or Pro subscription","Personal or company website":"Personal or company website","Personal website, itch.io page, etc.":"Personal website, itch.io page, etc.","Personalize your suggested content":"Personalize your suggested content","Perspective camera":"Perspective camera","Pixel size":"Pixel size","Place 3D platforms in a 2D game.":"Place 3D platforms in a 2D game.","Place 3D platforms in this 2D platformer, creating a path to the end.":"Place 3D platforms in this 2D platformer, creating a path to the end.","Place {newInstancesCount} <0>{object_name} instance(s) at {0} (layer: {1}) in scene {scene_name}.":function(a){return["Place ",a("newInstancesCount")," <0>",a("object_name")," instance(s) at ",a("0")," (layer: ",a("1"),") in scene ",a("scene_name"),"."]},"Place {newInstancesCount} and move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["Place ",a("newInstancesCount")," and move ",a("existingInstanceCount")," <0>",a("object_name")," instance(s) to ",a("0")," (layer: ",a("1"),") in scene ",a("scene_name"),"."]},"Placement":"Placement","Placement rationale":"Placement rationale","Platform default":"Platform default","Platformer":"Platformer","Play":"Play","Play a game":"Play a game","Play game":"Play game","Play section":"Play section","Played > 10 minutes":"Played > 10 minutes","Played > 15 minutes":"Played > 15 minutes","Played > 3 minutes":"Played > 3 minutes","Played > 5 minutes":"Played > 5 minutes","Played time":"Played time","Player":"Player","Player best entry":"Player best entry","Player feedback off":"Player feedback off","Player feedback on":"Player feedback on","Player name prefix (for auto-generated player names)":"Player name prefix (for auto-generated player names)","Player services":"Player services","Player {0} left a feedback message on {1}: \"{2}...\"":function(a){return["Player ",a("0")," left a feedback message on ",a("1"),": \"",a("2"),"...\""]},"Players":"Players","Playground":"Playground","Playing":"Playing","Please <0>backup your game file and save your game to ensure that you don't lose anything. You can try to reload this panel or restart GDevelop.":"Please <0>backup your game file and save your game to ensure that you don't lose anything. You can try to reload this panel or restart GDevelop.","Please check if popups are blocked in your browser settings.":"Please check if popups are blocked in your browser settings.","Please check your internet connection or try again later.":"Please check your internet connection or try again later.","Please double check online the changes to make sure that you are aware of anything new in this version that would require you to adapt your project.":"Please double check online the changes to make sure that you are aware of anything new in this version that would require you to adapt your project.","Please enter a name for your project.":"Please enter a name for your project.","Please enter a name that is at least one character long and 50 at most.":"Please enter a name that is at least one character long and 50 at most.","Please enter a valid URL, starting with https://":"Please enter a valid URL, starting with https://","Please enter a valid URL, starting with https://discord":"Please enter a valid URL, starting with https://discord","Please enter an email address.":"Please enter an email address.","Please explain your use of GDevelop.":"Please explain your use of GDevelop.","Please fill out every field.":"Please fill out every field.","Please get in touch with us to find a solution.":"Please get in touch with us to find a solution.","Please log out and log in again to verify your identify, then change your email.":"Please log out and log in again to verify your identify, then change your email.","Please login to access free samples of the Education plan resources.":"Please login to access free samples of the Education plan resources.","Please note that your device should be connected on the same network as this computer.":"Please note that your device should be connected on the same network as this computer.","Please pick a short username with only alphanumeric characters as well as _ and -":"Please pick a short username with only alphanumeric characters as well as _ and -","Please prefer using the new action \"Enforce camera boundaries\" which is more flexible.":"Please prefer using the new action \"Enforce camera boundaries\" which is more flexible.","Please tell us more":"Please tell us more","Please upgrade the editor to the latest version.":"Please upgrade the editor to the latest version.","Please wait":"Please wait","Please wait while we scan your project to find a solution.":"Please wait while we scan your project to find a solution.","Please wait...":"Please wait...","Point name":"Point name","Points":"Points","Polygon is not convex!":"Polygon is not convex!","Polygon with {verticesCount} vertices":function(a){return["Polygon with ",a("verticesCount")," vertices"]},"Pop back into main window":"Pop back into main window","Pop out in a separate window (beta)":"Pop out in a separate window (beta)","Portrait":"Portrait","Prefabs (Ready-to-use Objects)":"Prefabs (Ready-to-use Objects)","Preferences":"Preferences","Prefix":"Prefix","Preload at startup (default)":"Preload at startup (default)","Preload with an action":"Preload with an action","Preload with the scene":"Preload with the scene","Premium":"Premium","Prepare your game for Facebook Instant Games so that it can be play on Facebook Messenger. GDevelop will create a compressed file that you can upload on your Facebook Developer account.":"Prepare your game for Facebook Instant Games so that it can be play on Facebook Messenger. GDevelop will create a compressed file that you can upload on your Facebook Developer account.","Preparing the leaderboard for your game...":"Preparing the leaderboard for your game...","Press a shortcut combination...":"Press a shortcut combination...","Prevent selection in the editor":"Prevent selection in the editor","Preview":"Preview","Preview over wifi":"Preview over wifi","Preview {animationName}":function(a){return["Preview ",a("animationName")]},"Previews":"Previews","Previous breaking changes (no longer relevant)":"Previous breaking changes (no longer relevant)","Previous page":"Previous page","Private":"Private","Production & Project Management":"Production & Project Management","Profile":"Profile","Profiler":"Profiler","Programming & Scripting":"Programming & Scripting","Progress bar":"Progress bar","Progress bar color":"Progress bar color","Progress bar fade in delay and duration will be applied to GDevelop logo.":"Progress bar fade in delay and duration will be applied to GDevelop logo.","Progress bar height":"Progress bar height","Progress bar maximum width":"Progress bar maximum width","Progress bar minimum width":"Progress bar minimum width","Progress bar width":"Progress bar width","Progress fade in delay (in seconds)":"Progress fade in delay (in seconds)","Progress fade in duration (in seconds)":"Progress fade in duration (in seconds)","Project":"Project","Project file list":"Project file list","Project file type":"Project file type","Project files":"Project files","Project icons":"Project icons","Project is opened":"Project is opened","Project manager":"Project manager","Project mismatch":"Project mismatch","Project name":"Project name","Project name cannot be empty.":"Project name cannot be empty.","Project name changed":"Project name changed","Project not found":"Project not found","Project not saved":"Project not saved","Project package names should not begin with com.example":"Project package names should not begin with com.example","Project properly saved":"Project properly saved","Project properties":"Project properties","Project resources":"Project resources","Project save cannot be opened":"Project save cannot be opened","Project save not available":"Project save not available","Project save not found":"Project save not found","Project saved":"Project saved","Project was modified":"Project was modified","Project {projectName} will be deleted. You will no longer be able to access it.":function(a){return["Project ",a("projectName")," will be deleted. You will no longer be able to access it."]},"Projects":"Projects","Projects in disabled accounts will not be deleted. All disabled accounts can be reactivated after 15 days.":"Projects in disabled accounts will not be deleted. All disabled accounts can be reactivated after 15 days.","Promoting your game to the community":"Promoting your game to the community","Promotions + Earn credits":"Promotions + Earn credits","Properties":"Properties","Properties & Icons":"Properties & Icons","Properties can't have children.":"Properties can't have children.","Properties store data inside behaviors.":"Properties store data inside behaviors.","Properties store data inside objects.":"Properties store data inside objects.","Property list":"Property list","Property list editor":"Property list editor","Property name in events: `{parameterName}`":function(a){return["Property name in events: `",a("parameterName"),"`"]},"Props":"Props","Provisioning profiles":"Provisioning profiles","Public":"Public","Public on gd.games":"Public on gd.games","Public tutorials":"Public tutorials","Publish":"Publish","Publish game":"Publish game","Publish game on gd.games":"Publish game on gd.games","Publish new version":"Publish new version","Publish on gd.games":"Publish on gd.games","Publish on gd.games to let players try your game":"Publish on gd.games to let players try your game","Publish this build on gd.games":"Publish this build on gd.games","Publish to Android, iOS, unlock more cloud projects, leaderboards, collaboration features and more online services. <0>Learn more":"Publish to Android, iOS, unlock more cloud projects, leaderboards, collaboration features and more online services. <0>Learn more","Publisher name":"Publisher name","Publishing on gd.games":"Publishing on gd.games","Publishing to gd.games, the GDevelop gaming platform. Games can be played from any device.":"Publishing to gd.games, the GDevelop gaming platform. Games can be played from any device.","Purchase":"Purchase","Purchase Spine":"Purchase Spine","Purchase credits":"Purchase credits","Purchase seats":"Purchase seats","Purchase the Education subscription":"Purchase the Education subscription","Purchase with {usageCreditPrice} credits":function(a){return["Purchase with ",a("usageCreditPrice")," credits"]},"Purchase {0}":function(a){return["Purchase ",a("0")]},"Purchase {translatedCourseTitle}":function(a){return["Purchase ",a("translatedCourseTitle")]},"Puzzle":"Puzzle","Quadrilateral":"Quadrilateral","Quick Customization settings":"Quick Customization settings","Quick Customization: Behavior properties":"Quick Customization: Behavior properties","Quit tutorial":"Quit tutorial","R;G;B, like 100;200;180":"R;G;B, like 100;200;180","RPG":"RPG","Racing":"Racing","Radius":"Radius","Radius of the emitter":"Radius of the emitter","Rank this comment as bad":"Rank this comment as bad","Rank this comment as good":"Rank this comment as good","Rank this comment as great":"Rank this comment as great","Rate chapter":"Rate chapter","Raw error":"Raw error","Re-enable npm script security warning":"Re-enable npm script security warning","Re-install":"Re-install","React to lights":"React to lights","Read & Write":"Read & Write","Read <0>{behavior_name}'s settings on <1>{object_name} in scene {scene_name}.":function(a){return["Read <0>",a("behavior_name"),"'s settings on <1>",a("object_name")," in scene ",a("scene_name"),"."]},"Read <0>{object_name}'s properties in scene <1>{scene_name}.":function(a){return["Read <0>",a("object_name"),"'s properties in scene <1>",a("scene_name"),"."]},"Read <0>{scene_name}'s scene settings.":function(a){return["Read <0>",a("scene_name"),"'s scene settings."]},"Read docs for {extension_names}.":function(a){return["Read docs for ",a("extension_names"),"."]},"Read events in scene <0>{scene_name}.":function(a){return["Read events in scene <0>",a("scene_name"),"."]},"Read instances in scene <0>{scene_name}.":function(a){return["Read instances in scene <0>",a("scene_name"),"."]},"Read only":"Read only","Read the doc":"Read the doc","Read the wiki page for more info about the dataloss mode.":"Read the wiki page for more info about the dataloss mode.","Read tutorial":"Read tutorial","Reading the documentation":"Reading the documentation","Reading through the events":"Reading through the events","Ready-made games":"Ready-made games","Reasoning level":"Reasoning level","Reasoning level:":"Reasoning level:","Receive a copy of GDevelop\u2019s teaching resources:<0>Extract of our ready-to-teach Curriculum<1>Poster with GDevelop's core concepts to use in your classroom<2>\u201CGame Development as an Educational wonder\u201D PDF":"Receive a copy of GDevelop\u2019s teaching resources:<0>Extract of our ready-to-teach Curriculum<1>Poster with GDevelop's core concepts to use in your classroom<2>\u201CGame Development as an Educational wonder\u201D PDF","Receive weekly stats about your game by email":"Receive weekly stats about your game by email","Recharge your account to purchase this item.":"Recharge your account to purchase this item.","Recommendations":"Recommendations","Recommended":"Recommended","Recommended for you":"Recommended for you","Recovering older version...":"Recovering older version...","Rectangle paint":"Rectangle paint","Reddit":"Reddit","Redeem":"Redeem","Redeem a code":"Redeem a code","Redeemed":"Redeemed","Redeemed code valid until {0} .":function(a){return["Redeemed code valid until ",a("0")," ."]},"Redemption Codes":"Redemption Codes","Redemption or coupon code":"Redemption or coupon code","Redo":"Redo","Redo the last changes":"Redo the last changes","Redo the survey":"Redo the survey","Refine your search with more specific keywords.":"Refine your search with more specific keywords.","Refresh":"Refresh","Refresh dashboard":"Refresh dashboard","Refresh games":"Refresh games","Register or publish your game first to see its exports.":"Register or publish your game first to see its exports.","Register the project":"Register the project","Related expression and condition":"Related expression and condition","Related objects":"Related objects","Relational operator":"Relational operator","Relaunch the 3D editor":"Relaunch the 3D editor","Reload project from disk/cloud (lose all changes)":"Reload project from disk/cloud (lose all changes)","Reload the project? Any changes that have not been saved will be lost.":"Reload the project? Any changes that have not been saved will be lost.","Remaining usage":"Remaining usage","Remember that your access to this resource is exclusive to your account.":"Remember that your access to this resource is exclusive to your account.","Remix a game in 2 minutes":"Remix a game in 2 minutes","Remix an existing game":"Remix an existing game","Remove":"Remove","Remove <0>{behavior_name} behavior from <1>{object_name} in scene {scene_name}.":function(a){return["Remove <0>",a("behavior_name")," behavior from <1>",a("object_name")," in scene ",a("scene_name"),"."]},"Remove Ordering":"Remove Ordering","Remove behavior":"Remove behavior","Remove certificate":"Remove certificate","Remove collaborator":"Remove collaborator","Remove effect":"Remove effect","Remove entry":"Remove entry","Remove folder and function":"Remove folder and function","Remove folder and functions":"Remove folder and functions","Remove folder and object":"Remove folder and object","Remove folder and objects":"Remove folder and objects","Remove folder and properties":"Remove folder and properties","Remove folder and property":"Remove folder and property","Remove from list":"Remove from list","Remove from team":"Remove from team","Remove function":"Remove function","Remove group":"Remove group","Remove invitation?":"Remove invitation?","Remove object":"Remove object","Remove objects":"Remove objects","Remove objects from the scene list":"Remove objects from the scene list","Remove project from list":"Remove project from list","Remove resource":"Remove resource","Remove resources with invalid path":"Remove resources with invalid path","Remove scene <0>{scene_name}.":function(a){return["Remove scene <0>",a("scene_name"),"."]},"Remove shortcut":"Remove shortcut","Remove student?":"Remove student?","Remove the Else":"Remove the Else","Remove the Long Description":"Remove the Long Description","Remove the Loop Counter Variable":"Remove the Loop Counter Variable","Remove the animation":"Remove the animation","Remove the extension":"Remove the extension","Remove the sprite":"Remove the sprite","Remove this Auth Key":"Remove this Auth Key","Remove this certificate":"Remove this certificate","Remove this certificate?":"Remove this certificate?","Remove this counter of the loop":"Remove this counter of the loop","Remove unlimited":"Remove unlimited","Remove unused...":"Remove unused...","Remove variant":"Remove variant","Rename":"Rename","Rename <0>{object_name} to <1>{newValue} (in scene {scene_name}).":function(a){return["Rename <0>",a("object_name")," to <1>",a("newValue")," (in scene ",a("scene_name"),")."]},"Renamed object to {0}.":function(a){return["Renamed object to ",a("0"),"."]},"Rendering type":"Rendering type","Repeat <0>{0} times:":function(a){return["Repeat <0>",a("0")," times:"]},"Repeat borders and center textures (instead of stretching them)":"Repeat borders and center textures (instead of stretching them)","Repeat for each instance of<0>{0}":function(a){return["Repeat for each instance of<0>",a("0"),""]},"Repeat these:":"Repeat these:","Replace":"Replace","Replace <0>{object_name} in scene <1>{scene_name}.":function(a){return["Replace <0>",a("object_name")," in scene <1>",a("scene_name"),"."]},"Replace existing extension":"Replace existing extension","Replay":"Replay","Report a wrong translation":"Report a wrong translation","Report an issue":"Report an issue","Report anyway":"Report anyway","Report this comment as abusive, harmful or spam":"Report this comment as abusive, harmful or spam","Required behavior":"Required behavior","Reset":"Reset","Reset Debugger layout":"Reset Debugger layout","Reset Extension Editor layout":"Reset Extension Editor layout","Reset Resource Editor layout":"Reset Resource Editor layout","Reset Scene Editor layout":"Reset Scene Editor layout","Reset all shortcuts to default":"Reset all shortcuts to default","Reset and hide children configuration":"Reset and hide children configuration","Reset hidden Ask AI text inputs":"Reset hidden Ask AI text inputs","Reset hidden announcements":"Reset hidden announcements","Reset hidden embedded explanations":"Reset hidden embedded explanations","Reset hidden embedded tutorials":"Reset hidden embedded tutorials","Reset leaderboard":"Reset leaderboard","Reset leaderboard {0}":function(a){return["Reset leaderboard ",a("0")]},"Reset password":"Reset password","Reset requested the {0} . Please wait a few minutes...":function(a){return["Reset requested the ",a("0")," . Please wait a few minutes..."]},"Reset to automatic collision mask":"Reset to automatic collision mask","Reset to default":"Reset to default","Reset your password":"Reset your password","Resolution and rendering":"Resolution and rendering","Resource":"Resource","Resource URL":"Resource URL","Resource file path copied to clipboard":"Resource file path copied to clipboard","Resource kind":"Resource kind","Resource name":"Resource name","Resource type":"Resource type","Resource(s) URL(s) (one per line)":"Resource(s) URL(s) (one per line)","Resources":"Resources","Resources (any kind)":"Resources (any kind)","Resources added: {0}":function(a){return["Resources added: ",a("0")]},"Resources are automatically added to your project whenever you add an image, a font or a video to an object or when you choose an audio file in events. Choose a resource to display its properties.":"Resources are automatically added to your project whenever you add an image, a font or a video to an object or when you choose an audio file in events. Choose a resource to display its properties.","Resources loading":"Resources loading","Resources preloading":"Resources preloading","Resources unloading":"Resources unloading","Restart":"Restart","Restart 3D editor":"Restart 3D editor","Restart the Tutorial":"Restart the Tutorial","Restart tutorial":"Restart tutorial","Restarting the preview from scratch is required":"Restarting the preview from scratch is required","Restore":"Restore","Restore a previous purchase":"Restore a previous purchase","Restore accounts":"Restore accounts","Restore project before this message":"Restore project before this message","Restore project to this state?":"Restore project to this state?","Restore this version":"Restore this version","Restore version":"Restore version","Restored":"Restored","Restoring...":"Restoring...","Results for:":"Results for:","Retry":"Retry","Reviewing a starter game template.":"Reviewing a starter game template.","Reviewing the current state":"Reviewing the current state","Reviewing the game structure":"Reviewing the game structure","Reviewing the scene data":"Reviewing the scene data","Reviewing the {templateName} starter template.":function(a){return["Reviewing the ",a("templateName")," starter template."]},"Rework the game":"Rework the game","Right":"Right","Right (secondary)":"Right (secondary)","Right bound":"Right bound","Right bound should be greater than left bound":"Right bound should be greater than left bound","Right face":"Right face","Right margin":"Right margin","Right-click for more events":"Right-click for more events","Right-click for quick menu":"Right-click for quick menu","Room: {0}":function(a){return["Room: ",a("0")]},"Rooms":"Rooms","Root folder":"Root folder","Rotation":"Rotation","Rotation (X)":"Rotation (X)","Rotation (Y)":"Rotation (Y)","Rotation (Z)":"Rotation (Z)","Round pixels when rendering, useful for pixel perfect games.":"Round pixels when rendering, useful for pixel perfect games.","Round to X decimal point":"Round to X decimal point","Run a preview":"Run a preview","Run a preview (with loading & branding)":"Run a preview (with loading & branding)","Run a preview and you will be able to inspect it with the debugger.":"Run a preview and you will be able to inspect it with the debugger.","Run on this computer":"Run on this computer","Save":"Save","Save Project":"Save Project","Save and continue":"Save and continue","Save as main version":"Save as main version","Save as...":"Save as...","Save in the \"Downloads\" folder":"Save in the \"Downloads\" folder","Save on your computer: download GDevelop desktop app":"Save on your computer: download GDevelop desktop app","Save project":"Save project","Save project as":"Save project as","Save project as...":"Save project as...","Save to computer with GDevelop desktop app":"Save to computer with GDevelop desktop app","Save your changes or close the external editor to continue.":"Save your changes or close the external editor to continue.","Save your game":"Save your game","Save your project":"Save your project","Save your project before using the version history.":"Save your project before using the version history.","Saving project":"Saving project","Saving...":"Saving...","Scale mode (also called \"Sampling\")":"Scale mode (also called \"Sampling\")","Scaling factor":"Scaling factor","Scaling factor to apply to the default dimensions":"Scaling factor to apply to the default dimensions","Scan in the project folder for...":"Scan in the project folder for...","Scan missing animations":"Scan missing animations","Scene":"Scene","Scene Groups":"Scene Groups","Scene Objects":"Scene Objects","Scene Variables":"Scene Variables","Scene background color":"Scene background color","Scene editor":"Scene editor","Scene events":"Scene events","Scene groups":"Scene groups","Scene name":"Scene name","Scene name (text)":"Scene name (text)","Scene objects":"Scene objects","Scene properties":"Scene properties","Scene variable":"Scene variable","Scene variable (deprecated)":"Scene variable (deprecated)","Scene variables":"Scene variables","Scenes":"Scenes","Scope":"Scope","Score":"Score","Score column settings":"Score column settings","Score display":"Score display","Score multiplier":"Score multiplier","Scores sort order":"Scores sort order","Scroll":"Scroll","Search":"Search","Search GDevelop documentation.":"Search GDevelop documentation.","Search and replace in parameters":"Search and replace in parameters","Search assets":"Search assets","Search behaviors":"Search behaviors","Search by name":"Search by name","Search examples":"Search examples","Search extensions":"Search extensions","Search filters":"Search filters","Search for New Extensions":"Search for New Extensions","Search for new actions in extensions":"Search for new actions in extensions","Search for new conditions in extensions":"Search for new conditions in extensions","Search functions":"Search functions","Search in all event sheets...":"Search in all event sheets...","Search in event sentences":"Search in event sentences","Search in events":"Search in events","Search in project":"Search in project","Search in properties":"Search in properties","Search instances":"Search instances","Search object groups":"Search object groups","Search objects":"Search objects","Search objects or actions":"Search objects or actions","Search objects or conditions":"Search objects or conditions","Search panel":"Search panel","Search resources":"Search resources","Search results":"Search results","Search the shop":"Search the shop","Search variables":"Search variables","Search {searchPlaceholderObjectName} actions":function(a){return["Search ",a("searchPlaceholderObjectName")," actions"]},"Search {searchPlaceholderObjectName} conditions":function(a){return["Search ",a("searchPlaceholderObjectName")," conditions"]},"Search/import extensions":"Search/import extensions","Searching the asset store.":"Searching the asset store.","Seats":"Seats","Seats available:":"Seats available:","Seats left: {availableSeats}":function(a){return["Seats left: ",a("availableSeats")]},"Seconds":"Seconds","Section name":"Section name","See Marketing Boosts":"See Marketing Boosts","See all":"See all","See all exports":"See all exports","See all in the game dashboard":"See all in the game dashboard","See all projects":"See all projects","See all release notes":"See all release notes","See all the release notes":"See all the release notes","See more":"See more","See my codes":"See my codes","See plans":"See plans","See projects":"See projects","See resources":"See resources","See subscriptions":"See subscriptions","See the releases notes online":"See the releases notes online","See this bundle":"See this bundle","Select":"Select","Select All":"Select All","Select a behavior":"Select a behavior","Select a function...":"Select a function...","Select a game":"Select a game","Select a genre":"Select a genre","Select a thumbnail":"Select a thumbnail","Select all active":"Select all active","Select an author":"Select an author","Select an extension":"Select an extension","Select an image":"Select an image","Select an owner":"Select an owner","Select instances on scene ({instanceCountOnScene})":function(a){return["Select instances on scene (",a("instanceCountOnScene"),")"]},"Select log groups to display":"Select log groups to display","Select resource":"Select resource","Select the controls that apply:":"Select the controls that apply:","Select the leaderboard from a list":"Select the leaderboard from a list","Select the usernames of the authors of this project. They will be displayed in the selected order, if you publish this game as an example or in the community.":"Select the usernames of the authors of this project. They will be displayed in the selected order, if you publish this game as an example or in the community.","Select the usernames of the contributors to this extension. They will be displayed in the order selected. Do not see your name? Go to the Profile section and create an account!":"Select the usernames of the contributors to this extension. They will be displayed in the order selected. Do not see your name? Go to the Profile section and create an account!","Select the usernames of the owners of this project to let them manage this game builds. Be aware that owners can revoke your ownership.":"Select the usernames of the owners of this project to let them manage this game builds. Be aware that owners can revoke your ownership.","Select up to 3 genres for the game to be visible on gd.games's categories pages!":"Select up to 3 genres for the game to be visible on gd.games's categories pages!","Select {0} resources":function(a){return["Select ",a("0")," resources"]},"Selected instances will be moved to a new custom object.":"Selected instances will be moved to a new custom object.","Selected instances will be moved to a new external layout.":"Selected instances will be moved to a new external layout.","Send":"Send","Send a new form":"Send a new form","Send crash reports during previews to GDevelop":"Send crash reports during previews to GDevelop","Send feedback":"Send feedback","Send it again":"Send it again","Send the Auth Key":"Send the Auth Key","Send to back":"Send to back","Sending...":"Sending...","Sentence in Events Sheet":"Sentence in Events Sheet","Sentence in Events Sheet (automatically suffixed by \"of _PARAM0_\")":"Sentence in Events Sheet (automatically suffixed by \"of _PARAM0_\")","Serial: {0}":function(a){return["Serial: ",a("0")]},"Service seems to be unavailable, please try again later.":"Service seems to be unavailable, please try again later.","Sessions":"Sessions","Set <0>{object_name}'s variable <1>{variable_name_or_path}.":function(a){return["Set <0>",a("object_name"),"'s variable <1>",a("variable_name_or_path"),"."]},"Set an icon to the extension first":"Set an icon to the extension first","Set as default":"Set as default","Set as global":"Set as global","Set as global group":"Set as global group","Set as global object":"Set as global object","Set as start scene":"Set as start scene","Set by user":"Set by user","Set global variable <0>{variable_name_or_path}.":function(a){return["Set global variable <0>",a("variable_name_or_path"),"."]},"Set scene variable <0>{variable_name_or_path} in scene {scene_name}.":function(a){return["Set scene variable <0>",a("variable_name_or_path")," in scene ",a("scene_name"),"."]},"Set shortcut":"Set shortcut","Set to false":"Set to false","Set to true":"Set to true","Set to unlimited":"Set to unlimited","Set up new leaderboards for this game":"Set up new leaderboards for this game","Set up the base for your project <0>{project_name}.":function(a){return["Set up the base for your project <0>",a("project_name"),"."]},"Set variable <0>{variable_name_or_path}.":function(a){return["Set variable <0>",a("variable_name_or_path"),"."]},"Setting the minimum number of FPS below 20 will increase a lot the time that is allowed between the simulation of two frames of the game. If case of a sudden slowdown, or on slow computers, this can create buggy behaviors like objects passing beyond a wall. Consider setting 20 as the minimum FPS.":"Setting the minimum number of FPS below 20 will increase a lot the time that is allowed between the simulation of two frames of the game. If case of a sudden slowdown, or on slow computers, this can create buggy behaviors like objects passing beyond a wall. Consider setting 20 as the minimum FPS.","Settings":"Settings","Setup grid":"Setup grid","Shadow":"Shadow","Share":"Share","Share dialog":"Share dialog","Share same collision masks for all animations":"Share same collision masks for all animations","Share same collision masks for all sprites of this animation":"Share same collision masks for all sprites of this animation","Share same points for all animations":"Share same points for all animations","Share same points for all sprites of this animation":"Share same points for all sprites of this animation","Share your game":"Share your game","Share your game on gd.games and collect players feedback about your game.":"Share your game on gd.games and collect players feedback about your game.","Share your game with your friends or teammates.":"Share your game with your friends or teammates.","Sharing online":"Sharing online","Sharing the final file with the client":"Sharing the final file with the client","Shooter":"Shooter","Shop":"Shop","Shop section":"Shop section","Short":"Short","Short description":"Short description","Short label":"Short label","Should finish soon.":"Should finish soon.","Show":"Show","Show \"Ask AI\" button in the title bar":"Show \"Ask AI\" button in the title bar","Show Home":"Show Home","Show Mask":"Show Mask","Show Project Manager":"Show Project Manager","Show Properties Names":"Show Properties Names","Show advanced import options":"Show advanced import options","Show all feedbacks":"Show all feedbacks","Show button to load guided lesson from file and test it":"Show button to load guided lesson from file and test it","Show deprecated behaviors (prefer not to use anymore)":"Show deprecated behaviors (prefer not to use anymore)","Show deprecated options":"Show deprecated options","Show details":"Show details","Show diagnostic report":"Show diagnostic report","Show effect":"Show effect","Show experimental behaviors":"Show experimental behaviors","Show experimental extensions":"Show experimental extensions","Show experimental extensions in the list of extensions":"Show experimental extensions in the list of extensions","Show experimental objects":"Show experimental objects","Show grid":"Show grid","Show in local folder":"Show in local folder","Show internal":"Show internal","Show less":"Show less","Show lifecycle functions (advanced)":"Show lifecycle functions (advanced)","Show live assets":"Show live assets","Show more":"Show more","Show next assets":"Show next assets","Show objects in 3D in the scene editor":"Show objects in 3D in the scene editor","Show older":"Show older","Show other lifecycle functions (advanced)":"Show other lifecycle functions (advanced)","Show previous assets":"Show previous assets","Show progress bar":"Show progress bar","Show staging assets":"Show staging assets","Show the \"Create\" section by default when opening GDevelop":"Show the \"Create\" section by default when opening GDevelop","Show type errors in JavaScript events (needs a restart)":"Show type errors in JavaScript events (needs a restart)","Show unread feedback only":"Show unread feedback only","Show version history":"Show version history","Show/Hide instance properties":"Show/Hide instance properties","Showing {0} of {resultsCount}":function(a){return["Showing ",a("0")," of ",a("resultsCount")]},"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged \u2014 and when they drop off quickly.":"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged \u2014 and when they drop off quickly.","Side view":"Side view","Sign up":"Sign up","Signing Credentials":"Signing Credentials","Signing options":"Signing options","Simple":"Simple","Simulation":"Simulation","Single commercial use license for claim with Gold or Pro subscription":"Single commercial use license for claim with Gold or Pro subscription","Single file (default)":"Single file (default)","Size":"Size","Size:":"Size:","Skins":"Skins","Skip and create from scratch":"Skip and create from scratch","Skip the update":"Skip the update","Socials":"Socials","Some code experience":"Some code experience","Some extensions already exist in the project. Please select the ones you want to replace.":"Some extensions already exist in the project. Please select the ones you want to replace.","Some icons could not be generated.":"Some icons could not be generated.","Some no-code experience":"Some no-code experience","Some things in the answer don't exist in GDevelop":"Some things in the answer don't exist in GDevelop","Some variants already exist in the project. Please select the ones you want to replace.":"Some variants already exist in the project. Please select the ones you want to replace.","Something went wrong":"Something went wrong","Something went wrong while changing your subscription. Please try again.":"Something went wrong while changing your subscription. Please try again.","Something went wrong while swapping the asset. Please try again.":"Something went wrong while swapping the asset. Please try again.","Something went wrong while syncing your Discord username. Please try again later.":"Something went wrong while syncing your Discord username. Please try again later.","Something went wrong while syncing your forum access. Please try again later.":"Something went wrong while syncing your forum access. Please try again later.","Something wrong happened :(":"Something wrong happened :(","Something wrong happened when claiming the asset pack. Please check your internet connection or try again later.":"Something wrong happened when claiming the asset pack. Please check your internet connection or try again later.","Sorry":"Sorry","Sort by most recent":"Sort by most recent","Sort order":"Sort order","Sound":"Sound","Sounds and musics":"Sounds and musics","Source file":"Source file","Specific game mechanics":"Specific game mechanics","Specify something more to the AI to build":"Specify something more to the AI to build","Speech":"Speech","Spine Json":"Spine Json","Spine animation name":"Spine animation name","Spine json resource":"Spine json resource","Sport":"Sport","Spray cone angle (in degrees)":"Spray cone angle (in degrees)","Sprite":"Sprite","Standalone dialog":"Standalone dialog","Start Network Preview (Preview over WiFi/LAN)":"Start Network Preview (Preview over WiFi/LAN)","Start Preview and Debugger":"Start Preview and Debugger","Start a game where a ball can bounce around the screen":"Start a game where a ball can bounce around the screen","Start a new game from this project":"Start a new game from this project","Start a new game?":"Start a new game?","Start a preview to generate a thumbnail!":"Start a preview to generate a thumbnail!","Start a quizz game with a question and 4 answers":"Start a quizz game with a question and 4 answers","Start a simple endless runner game":"Start a simple endless runner game","Start a simple platformer with a player that can move and jump":"Start a simple platformer with a player that can move and jump","Start all previews from external layout {0}":function(a){return["Start all previews from external layout ",a("0")]},"Start all previews from scene {0}":function(a){return["Start all previews from scene ",a("0")]},"Start build with credits":"Start build with credits","Start by adding a new behavior.":"Start by adding a new behavior.","Start by adding a new external layout.":"Start by adding a new external layout.","Start by adding a new function.":"Start by adding a new function.","Start by adding a new group.":"Start by adding a new group.","Start by adding a new object.":"Start by adding a new object.","Start by adding a new property.":"Start by adding a new property.","Start by adding a new scene.":"Start by adding a new scene.","Start by adding new external events.":"Start by adding new external events.","Start for free":"Start for free","Start from a template":"Start from a template","Start learning":"Start learning","Start next chapter":"Start next chapter","Start opacity (0-255)":"Start opacity (0-255)","Start preview with diagnostic report":"Start preview with diagnostic report","Start profiling":"Start profiling","Start profiling and then stop it after a few seconds to see the results.":"Start profiling and then stop it after a few seconds to see the results.","Start the survey!":"Start the survey!","Start typing a command...":"Start typing a command...","Start typing a username":"Start typing a username","Start your game":"Start your game","Starting engine":"Starting engine","Stay there":"Stay there","Stop":"Stop","Stop music and sounds at scene startup":"Stop music and sounds at scene startup","Stop profiling":"Stop profiling","Stop working":"Stop working","Stopped. Ready when you are.":"Stopped. Ready when you are.","Store password":"Store password","Story-Rich":"Story-Rich","Strategy":"Strategy","String":"String","String (text)":"String (text)","String from a list of options (text)":"String from a list of options (text)","String variables with no value set now default to an empty string (\"\") instead of \"0\". This game was created before this change, so GDevelop maintains the old behavior: unset string variables default to \"0\". It's recommended that you switch to the new behavior and update any variables or conditions relying on \"0\" as a default.":"String variables with no value set now default to an empty string (\"\") instead of \"0\". This game was created before this change, so GDevelop maintains the old behavior: unset string variables default to \"0\". It's recommended that you switch to the new behavior and update any variables or conditions relying on \"0\" as a default.","Stripe secure":"Stripe secure","Structure":"Structure","Student":"Student","Student accounts":"Student accounts","Studying the event sheets":"Studying the event sheets","Studying the object behaviors":"Studying the object behaviors","Sub Event":"Sub Event","Submit a free pack":"Submit a free pack","Submit a paid pack":"Submit a paid pack","Submit a tutorial":"Submit a tutorial","Submit a tutorial translated in your language":"Submit a tutorial translated in your language","Submit an example":"Submit an example","Submit an update":"Submit an update","Submit and cancel":"Submit and cancel","Submit to the community":"Submit to the community","Submit your project as an example":"Submit your project as an example","Subscribe":"Subscribe","Subscribe to Edu":"Subscribe to Edu","Subscription Plan":"Subscription Plan","Subscription outside the app store":"Subscription outside the app store","Subscription with the Apple App store or Google Play store":"Subscription with the Apple App store or Google Play store","Subscriptions":"Subscriptions","Suffix":"Suffix","Support What You Love":"Support What You Love","Supported files":"Supported files","Survival":"Survival","Swap":"Swap","Swap assets":"Swap assets","Swap {0} with another asset":function(a){return["Swap ",a("0")," with another asset"]},"Switch to GDevelop Credits":"Switch to GDevelop Credits","Switch to GDevelop credits or keep building with AI.":"Switch to GDevelop credits or keep building with AI.","Switch to create objects with the highest Z order of the layer":"Switch to create objects with the highest Z order of the layer","Switch to empty string (\"\") as default for string variables":"Switch to empty string (\"\") as default for string variables","Switch to monthly pricing":"Switch to monthly pricing","Switch to yearly pricing":"Switch to yearly pricing","Sync your role on GDevelop's Discord server":"Sync your role on GDevelop's Discord server","Sync your subscription level on GDevelop's forum":"Sync your subscription level on GDevelop's forum","Table settings":"Table settings","Tags (comma separated)":"Tags (comma separated)","Taking your game further":"Taking your game further","Target event":"Target event","Tasks":"Tasks","Teach":"Teach","Teacher accounts":"Teacher accounts","Teachers, courses and universities":"Teachers, courses and universities","Team invitation":"Team invitation","Team section":"Team section","Tell us more!...":"Tell us more!...","Template":"Template","Test it out!":"Test it out!","Test value":"Test value","Test value (in second)":"Test value (in second)","Text":"Text","Text color":"Text color","Text color:":"Text color:","Text to replace in parameters":"Text to replace in parameters","Text to search in event sentences":"Text to search in event sentences","Text to search in parameters":"Text to search in parameters","Texts":"Texts","Thank you for supporting GDevelop. Credits were added to your account as a thank you.":"Thank you for supporting GDevelop. Credits were added to your account as a thank you.","Thank you for supporting the GDevelop open-source community. Credits were added to your account as a thank you.":"Thank you for supporting the GDevelop open-source community. Credits were added to your account as a thank you.","Thank you for your feedback":"Thank you for your feedback","Thanks for following GDevelop. We added credits to your account as a thank you gift.":"Thanks for following GDevelop. We added credits to your account as a thank you gift.","Thanks for getting a subscription and supporting GDevelop!":"Thanks for getting a subscription and supporting GDevelop!","Thanks for starring GDevelop repository. We added credits to your account as a thank you gift.":"Thanks for starring GDevelop repository. We added credits to your account as a thank you gift.","Thanks for trying GDevelop! Unlock more projects, AI usage, publishing, multiplayer, courses and much more by upgrading.":"Thanks for trying GDevelop! Unlock more projects, AI usage, publishing, multiplayer, courses and much more by upgrading.","Thanks to all users of GDevelop! There must be missing tons of people, please send your name if you've contributed and you're not listed.":"Thanks to all users of GDevelop! There must be missing tons of people, please send your name if you've contributed and you're not listed.","Thanks to the redemption code you've used, you have this subscription enabled until {0}.":function(a){return["Thanks to the redemption code you've used, you have this subscription enabled until ",a("0"),"."]},"That's a lot of unsuccessful login attempts! Wait a bit before trying again or reset your password.":"That's a lot of unsuccessful login attempts! Wait a bit before trying again or reset your password.","The \"{0}\" effect can only be applied once.":function(a){return["The \"",a("0"),"\" effect can only be applied once."]},"The 3D editor is new and may still have rough edges. It will continue to be improved in the near future. Read more about it on the [GDevelop blog](https://gdevelop.io/blog/3d-editor).":"The 3D editor is new and may still have rough edges. It will continue to be improved in the near future. Read more about it on the [GDevelop blog](https://gdevelop.io/blog/3d-editor).","The 3D editor or the game crashed":"The 3D editor or the game crashed","The 3D editor, or some logic/code inside the game, has encountered an unhandled exception or error. It's necessary to restart the 3D editor.":"The 3D editor, or some logic/code inside the game, has encountered an unhandled exception or error. It's necessary to restart the 3D editor.","The AI agent is in beta. Help us make it better by telling us what went wrong:":"The AI agent is in beta. Help us make it better by telling us what went wrong:","The AI encountered an error while handling your request - this request was not counted in your AI usage. Try again later.":"The AI encountered an error while handling your request - this request was not counted in your AI usage. Try again later.","The AI is currently working on your project. Closing the project will stop it. Do you want to continue?":"The AI is currently working on your project. Closing the project will stop it. Do you want to continue?","The AI is currently working on your project. Opening another chat will stop it. Do you want to continue?":"The AI is currently working on your project. Opening another chat will stop it. Do you want to continue?","The AI is currently working on your project. Should it continue working while the tab is closed?":"The AI is currently working on your project. Should it continue working while the tab is closed?","The AI is experimental and still being improved. <0>It can inspect your game objects and events.":"The AI is experimental and still being improved. <0>It can inspect your game objects and events.","The Atlas embedded in the Spine fine can't be located.":"The Atlas embedded in the Spine fine can't be located.","The Education subscription gives access to GDevelop's Game Development curriculum. Co-created with teachers and institutions, it\u2019s a ready-to-use, proven way to implement STEM in your classroom.":"The Education subscription gives access to GDevelop's Game Development curriculum. Co-created with teachers and institutions, it\u2019s a ready-to-use, proven way to implement STEM in your classroom.","The GDevelop project is open-source, powered by passion and community. Your membership helps the GDevelop company maintain servers, build new features, develop commercial offerings and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"The GDevelop project is open-source, powered by passion and community. Your membership helps the GDevelop company maintain servers, build new features, develop commercial offerings and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.","The URLs must be public and stay accessible while you work on this project - they won't be stored inside the project file. When exporting a game, the resources pointed by these URLs will be downloaded and stored inside the game.":"The URLs must be public and stay accessible while you work on this project - they won't be stored inside the project file. When exporting a game, the resources pointed by these URLs will be downloaded and stored inside the game.","The animation name {newName} is already taken":function(a){return["The animation name ",a("newName")," is already taken"]},"The answer is entirely wrong":"The answer is entirely wrong","The answer is not as good as it could be":"The answer is not as good as it could be","The answer is not in my language":"The answer is not in my language","The answer is out of scope for GDevelop":"The answer is out of scope for GDevelop","The answer is too long":"The answer is too long","The answer is too short":"The answer is too short","The asset pack {0} is now available, go claim it in the shop!":function(a){return["The asset pack ",a("0")," is now available, go claim it in the shop!"]},"The asset pack {0} will be linked to your account {1}.":function(a){return["The asset pack ",a("0")," will be linked to your account ",a("1"),"."]},"The atlas image is smaller than the tile size.":"The atlas image is smaller than the tile size.","The auth key {lastUploadedApiKey} was properly stored. It can now be used to automatically upload your app to the app store - verify you've declared an app for it.":function(a){return["The auth key ",a("lastUploadedApiKey")," was properly stored. It can now be used to automatically upload your app to the app store - verify you've declared an app for it."]},"The behavior is not attached to this object. Please select another object or add this behavior: {0}":function(a){return["The behavior is not attached to this object. Please select another object or add this behavior: ",a("0")]},"The bounding box is an imaginary rectangle surrounding the object collision mask. Even if the object X and Y positions are not changed, this rectangle can change if the object is rotated or if an animation is being played. Usually you should use actions and conditions related to the object position or center, but the bounding box can be useful to deal with the area of the object.":"The bounding box is an imaginary rectangle surrounding the object collision mask. Even if the object X and Y positions are not changed, this rectangle can change if the object is rotated or if an animation is being played. Usually you should use actions and conditions related to the object position or center, but the bounding box can be useful to deal with the area of the object.","The bundle you are trying to claim does not exist anymore. Please contact support if you think this is an error.":"The bundle you are trying to claim does not exist anymore. Please contact support if you think this is an error.","The bundle {0} will be linked to your account {1}.":function(a){return["The bundle ",a("0")," will be linked to your account ",a("1"),"."]},"The bundle {0} will be sent to the email address provided in the checkout.":function(a){return["The bundle ",a("0")," will be sent to the email address provided in the checkout."]},"The certificate could not be found. Please verify it was properly uploaded and try again.":"The certificate could not be found. Please verify it was properly uploaded and try again.","The certificate was properly generated. Don't forget to create and upload a provisioning profile associated to it.":"The certificate was properly generated. Don't forget to create and upload a provisioning profile associated to it.","The chat is becoming long - consider creating a new chat to ask other questions. The AI will better analyze your game and request in a new chat.":"The chat is becoming long - consider creating a new chat to ask other questions. The AI will better analyze your game and request in a new chat.","The course {0} will be linked to your account {1}.":function(a){return["The course ",a("0")," will be linked to your account ",a("1"),"."]},"The default variant is erased when the extension is updated.":"The default variant is erased when the extension is updated.","The description of the object should explain what the object is doing, and, briefly, how to use it.":"The description of the object should explain what the object is doing, and, briefly, how to use it.","The editor was unable to display the operation ({0}) used by the AI.":function(a){return["The editor was unable to display the operation (",a("0"),") used by the AI."]},"The effect name {newName} is already taken":function(a){return["The effect name ",a("newName")," is already taken"]},"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before adding them as a student in your team.":"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before adding them as a student in your team.","The email you provided already has a subscription with GDevelop. Please ask them to cancel it before defining them as teacher in your team.":"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before defining them as teacher in your team.","The email you provided could not be found.":"The email you provided could not be found.","The email you provided is already a member of your team.":"The email you provided is already a member of your team.","The email you provided is already an admin in your team.":"The email you provided is already an admin in your team.","The email you provided is not an admin in your team.":"The email you provided is not an admin in your team.","The extension can't be imported because it has the same name as a built-in extension.":"The extension can't be imported because it has the same name as a built-in extension.","The extension installed in this project is not up to date. Consider upgrading it before reporting any issue.":"The extension installed in this project is not up to date. Consider upgrading it before reporting any issue.","The extension was added to the project. You can now use it in the list of actions/conditions and, if it's a behavior, in the list of behaviors for an object.":"The extension was added to the project. You can now use it in the list of actions/conditions and, if it's a behavior, in the list of behaviors for an object.","The far plane distance must be greater than the near plan distance.":"The far plane distance must be greater than the near plan distance.","The field of view cannot be lower than 0\xB0 or greater than 180\xB0.":"The field of view cannot be lower than 0\xB0 or greater than 180\xB0.","The file {0} is invalid.":function(a){return["The file ",a("0")," is invalid."]},"The file {0} is too large. Use files that are smaller for your game: each must be less than {1} MB.":function(a){return["The file ",a("0")," is too large. Use files that are smaller for your game: each must be less than ",a("1")," MB."]},"The following actions, conditions, or expressions no longer exist in their extensions. This can happen when an extension's API has changed or when functionality has been removed. Update or remove these instructions.":"The following actions, conditions, or expressions no longer exist in their extensions. This can happen when an extension's API has changed or when functionality has been removed. Update or remove these instructions.","The following events have invalid parameters (shown with red underline in the events sheet). Click a location to navigate there.":"The following events have invalid parameters (shown with red underline in the events sheet). Click a location to navigate there.","The following file(s) cannot be used for this kind of object: {0}":function(a){return["The following file(s) cannot be used for this kind of object: ",a("0")]},"The font size is stored directly inside the font. If you want to change it, export again your font using an external editor like bmFont. Click on the help button to learn more.":"The font size is stored directly inside the font. If you want to change it, export again your font using an external editor like bmFont. Click on the help button to learn more.","The force will only push the object during the time of one frame. Typically used in an event with no conditions or with conditions that stay valid for a certain amount of time.":"The force will only push the object during the time of one frame. Typically used in an event with no conditions or with conditions that stay valid for a certain amount of time.","The force will push the object forever, unless you use the action \"Stop the object\". Typically used in an event with conditions that are only true once, or with a \"Trigger Once\" condition.":"The force will push the object forever, unless you use the action \"Stop the object\". Typically used in an event with conditions that are only true once, or with a \"Trigger Once\" condition.","The free version is enough for me":"The free version is enough for me","The game template {0} will be linked to your account {1}.":function(a){return["The game template ",a("0")," will be linked to your account ",a("1"),"."]},"The game was properly exported. You can now use Electron Builder (you need Node.js installed and to use the command-line on your computer to run it) to create an executable.":"The game was properly exported. You can now use Electron Builder (you need Node.js installed and to use the command-line on your computer to run it) to create an executable.","The game you're trying to open is not registered online. Open the project file, then register it before continuing.":"The game you're trying to open is not registered online. Open the project file, then register it before continuing.","The icing on the cake":"The icing on the cake","The image should be at least 864x864px, and the logo must fit [within a circle of 576px](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions). Transparent borders are automatically added when generated to help ensuring":"The image should be at least 864x864px, and the logo must fit [within a circle of 576px](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions). Transparent borders are automatically added when generated to help ensuring","The invitation sent to {email} will be cancelled.":function(a){return["The invitation sent to ",a("email")," will be cancelled."]},"The latest save of \"{cloudProjectName}\" is corrupt and cannot be opened.":function(a){return["The latest save of \"",a("cloudProjectName"),"\" is corrupt and cannot be opened."]},"The latest save of this project is corrupt and cannot be opened.":"The latest save of this project is corrupt and cannot be opened.","The layer {0} does not contain any object instances. Continue?":function(a){return["The layer ",a("0")," does not contain any object instances. Continue?"]},"The light object was automatically placed on the Lighting layer.":"The light object was automatically placed on the Lighting layer.","The lighting layer renders an ambient light on the scene. All lights should be placed on this layer so that shadows are properly rendered. By default, the layer follows the base layer camera. Uncheck this if you want to manually move the camera using events.":"The lighting layer renders an ambient light on the scene. All lights should be placed on this layer so that shadows are properly rendered. By default, the layer follows the base layer camera. Uncheck this if you want to manually move the camera using events.","The link to the asset pack you've followed seems outdated. Why not take a look at the other packs in the asset store?":"The link to the asset pack you've followed seems outdated. Why not take a look at the other packs in the asset store?","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles in the store?":"The link to the bundle you've followed seems outdated. Why not take a look at the other bundles in the store?","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles?":"The link to the bundle you've followed seems outdated. Why not take a look at the other bundles?","The link to the game template you've followed seems outdated. Why not take a look at the other templates in the store?":"The link to the game template you've followed seems outdated. Why not take a look at the other templates in the store?","The main account of the Education plan cannot be modified.":"The main account of the Education plan cannot be modified.","The maximum 2D drawing distance must be strictly greater than 0.":"The maximum 2D drawing distance must be strictly greater than 0.","The model has {meshShapeTrianglesCount} triangles. To keep good performance, consider making a simplified model with a modeling tool.":function(a){return["The model has ",a("meshShapeTrianglesCount")," triangles. To keep good performance, consider making a simplified model with a modeling tool."]},"The monthly free asset pack perk was not part of your plan at the time you got your subscription to GDevelop. To enjoy this perk, please purchase a new subscription.":"The monthly free asset pack perk was not part of your plan at the time you got your subscription to GDevelop. To enjoy this perk, please purchase a new subscription.","The more descriptive you are, the better we can match the content we\u2019ll recommend.":"The more descriptive you are, the better we can match the content we\u2019ll recommend.","The name of your game is empty":"The name of your game is empty","The near plane distance must be strictly greater than 0 and lower than the far plan distance.":"The near plane distance must be strictly greater than 0 and lower than the far plan distance.","The number of decimal places must be a whole value between {precisionMinValue} and {precisionMaxValue}":function(a){return["The number of decimal places must be a whole value between ",a("precisionMinValue")," and ",a("precisionMaxValue")]},"The number of displayed entries must be a whole value between {displayedEntriesMinNumber} and {displayedEntriesMaxNumber}":function(a){return["The number of displayed entries must be a whole value between ",a("displayedEntriesMinNumber")," and ",a("displayedEntriesMaxNumber")]},"The object does not exist or can't be used here.":"The object does not exist or can't be used here.","The package name begins with com.example, make sure you replace it with an unique one to be able to publish your game on app stores.":"The package name begins with com.example, make sure you replace it with an unique one to be able to publish your game on app stores.","The package name begins with com.example, make sure you replace it with an unique one, else installing your game might overwrite other games.":"The package name begins with com.example, make sure you replace it with an unique one, else installing your game might overwrite other games.","The package name is containing invalid characters or not following the convention \"xxx.yyy.zzz\" (numbers allowed after a letter only).":"The package name is containing invalid characters or not following the convention \"xxx.yyy.zzz\" (numbers allowed after a letter only).","The package name is empty.":"The package name is empty.","The package name is too long.":"The package name is too long.","The password is invalid.":"The password is invalid.","The password you entered is incorrect. Please try again.":"The password you entered is incorrect. Please try again.","The polygon is not convex":"The polygon is not convex","The polygon is not convex. Ensure it is, otherwise the collision mask won't work.":"The polygon is not convex. Ensure it is, otherwise the collision mask won't work.","The preview could not be launched because an error happened: {0}.":function(a){return["The preview could not be launched because an error happened: ",a("0"),"."]},"The preview could not be launched because you're offline.":"The preview could not be launched because you're offline.","The project associated with this AI request does not match the current project. Open the correct project to restore to this state.":"The project associated with this AI request does not match the current project. Open the correct project to restore to this state.","The project could not be saved. Please try again later.":"The project could not be saved. Please try again later.","The project currently opened is not registered online. Register it now to get access to leaderboards, player accounts, analytics and more!":"The project currently opened is not registered online. Register it now to get access to leaderboards, player accounts, analytics and more!","The project currently opened is registered online but you don't have access to it. A link or file will be created but the game will not be registered.":"The project currently opened is registered online but you don't have access to it. A link or file will be created but the game will not be registered.","The project file appears to be corrupted, but an autosave file exists (backup made automatically by GDevelop on {0}). Would you like to try to load it instead?":function(a){return["The project file appears to be corrupted, but an autosave file exists (backup made automatically by GDevelop on ",a("0"),"). Would you like to try to load it instead?"]},"The project save associated with this AI request message is no longer available due to your current plan's limit. Upgrade your subscription to access older project saves.":"The project save associated with this AI request message is no longer available due to your current plan's limit. Upgrade your subscription to access older project saves.","The project save associated with this AI request message was not found. It may have been deleted.":"The project save associated with this AI request message was not found. It may have been deleted.","The provisioning profile was properly stored ( {lastUploadedProvisioningProfileName}). If you properly uploaded the certificate before, it can now be used.":function(a){return["The provisioning profile was properly stored ( ",a("lastUploadedProvisioningProfileName"),"). If you properly uploaded the certificate before, it can now be used."]},"The purchase will be linked to your account once done.":"The purchase will be linked to your account once done.","The request could not be processed. Please verify you uploaded a valid certificate file (.cer) from Apple.":"The request could not be processed. Please verify you uploaded a valid certificate file (.cer) from Apple.","The request could not reach the servers, ensure you are connected to internet.":"The request could not reach the servers, ensure you are connected to internet.","The resource has been downloaded":"The resource has been downloaded","The result wasn't as good as it could have been":"The result wasn't as good as it could have been","The selected resource is not a proper Spine resource.":"The selected resource is not a proper Spine resource.","The sentence displays one or more wrongs parameters:":"The sentence displays one or more wrongs parameters:","The sentence is probably missing this/these parameter(s):":"The sentence is probably missing this/these parameter(s):","The server is currently unavailable. Please try again later.":"The server is currently unavailable. Please try again later.","The shape used in the Physics behavior is independent from the collision mask of the object. Be sure to use the \"Collision\" condition provided by the Physics behavior in the events. The usual \"Collision\" condition won't take into account the shape that you've set up here.":"The shape used in the Physics behavior is independent from the collision mask of the object. Be sure to use the \"Collision\" condition provided by the Physics behavior in the events. The usual \"Collision\" condition won't take into account the shape that you've set up here.","The specified external events do not exist in the game. Be sure that the name is correctly spelled or create them using the project manager.":"The specified external events do not exist in the game. Be sure that the name is correctly spelled or create them using the project manager.","The subscription of this account comes from outside the app store. Connect with your account on editor.gdevelop.io from your web-browser to manage it.":"The subscription of this account comes from outside the app store. Connect with your account on editor.gdevelop.io from your web-browser to manage it.","The subscription of this account was done using Apple or Google Play. Connect on your account on your Apple or Google device to manage it.":"The subscription of this account was done using Apple or Google Play. Connect on your account on your Apple or Google device to manage it.","The text input will be always shown on top of all other objects in the game - this is a limitation that can't be changed. According to the platform/device or browser running the game, the appearance can also slightly change.":"The text input will be always shown on top of all other objects in the game - this is a limitation that can't be changed. According to the platform/device or browser running the game, the appearance can also slightly change.","The tilemap must be designed in a separated program, Tiled, that can be downloaded on mapeditor.org. Save your map as a JSON file, then select here the Atlas image that you used and the Tile map JSON file.":"The tilemap must be designed in a separated program, Tiled, that can be downloaded on mapeditor.org. Save your map as a JSON file, then select here the Atlas image that you used and the Tile map JSON file.","The token used to claim this purchase is invalid.":"The token used to claim this purchase is invalid.","The uploaded certificate does not match the signing request that was generated. Please create a new signing request and generate a new certificate from Apple using it.":"The uploaded certificate does not match the signing request that was generated. Please create a new signing request and generate a new certificate from Apple using it.","The usage of a number or expression is deprecated. Please now use only \"Permanent\" or \"Instant\" for configuring forces.":"The usage of a number or expression is deprecated. Please now use only \"Permanent\" or \"Instant\" for configuring forces.","The variable name contains a space - this is not recommended. Prefer to use underscores or uppercase letters to separate words.":"The variable name contains a space - this is not recommended. Prefer to use underscores or uppercase letters to separate words.","The variable name looks like you're building an expression or a formula. You can only use this for structure or arrays. For example: Score[3].":"The variable name looks like you're building an expression or a formula. You can only use this for structure or arrays. For example: Score[3].","The version history is available for cloud projects only.":"The version history is available for cloud projects only.","The version that you've set for the game is invalid.":"The version that you've set for the game is invalid.","The {productType} {productName} will be linked to your account {0}":function(a){return["The ",a("productType")," ",a("productName")," will be linked to your account ",a("0")]},"There are currently no leaderboards created for this game. Open the leaderboards manager to create one.":"There are currently no leaderboards created for this game. Open the leaderboards manager to create one.","There are no <0>2D effects on this layer.":"There are no <0>2D effects on this layer.","There are no <0>3D effects on this layer.":"There are no <0>3D effects on this layer.","There are no <0>behaviors on this object instance.":"There are no <0>behaviors on this object instance.","There are no <0>behaviors on this object.":"There are no <0>behaviors on this object.","There are no <0>effects on this object.":"There are no <0>effects on this object.","There are no <0>variables on this object.":"There are no <0>variables on this object.","There are no <0>variables on this scene.":"There are no <0>variables on this scene.","There are no common <0>variables on this group objects.":"There are no common <0>variables on this group objects.","There are no objects. Objects will appear if you add some as parameter or add children to the object.":"There are no objects. Objects will appear if you add some as parameter or add children to the object.","There are no objects. Objects will appear if you add some as parameters.":"There are no objects. Objects will appear if you add some as parameters.","There are no provisioning profile created for this certificate. Create one in the Apple Developer interface and add it here.":"There are no provisioning profile created for this certificate. Create one in the Apple Developer interface and add it here.","There are no variables on this instance.":"There are no variables on this instance.","There are unsaved changes":"There are unsaved changes","There are variables used in events but not declared in this list: {0}.":function(a){return["There are variables used in events but not declared in this list: ",a("0"),"."]},"There are {instancesCountInLayout} object instances on this layer. Should they be moved to another layer?":function(a){return["There are ",a("instancesCountInLayout")," object instances on this layer. Should they be moved to another layer?"]},"There are {instancesCount} instances of objects on this layer.":function(a){return["There are ",a("instancesCount")," instances of objects on this layer."]},"There is no <0>global object yet.":"There is no <0>global object yet.","There is no behavior to set up for this object.":"There is no behavior to set up for this object.","There is no extension to update.":"There is no extension to update.","There is no global group yet.":"There is no global group yet.","There is no object in your game or in this scene. Start by adding an new object in the scene editor, using the objects list.":"There is no object in your game or in this scene. Start by adding an new object in the scene editor, using the objects list.","There is no variable to set up.":"There is no variable to set up.","There is no variant to update.":"There is no variant to update.","There is nothing to configure for this behavior. You can still use events to interact with the object and this behavior.":"There is nothing to configure for this behavior. You can still use events to interact with the object and this behavior.","There is nothing to configure for this effect.":"There is nothing to configure for this effect.","There is nothing to configure for this object. You can still use events to interact with the object.":"There is nothing to configure for this object. You can still use events to interact with the object.","There is nothing to configure.":"There is nothing to configure.","There was a problem":"There was a problem","There was an error verifying the URL(s). Please check they are correct.":"There was an error verifying the URL(s). Please check they are correct.","There was an error while canceling your subscription. Verify your internet connection or try again later.":"There was an error while canceling your subscription. Verify your internet connection or try again later.","There was an error while creating the object \"{0}\". Verify your internet connection or try again later.":function(a){return["There was an error while creating the object \"",a("0"),"\". Verify your internet connection or try again later."]},"There was an error while installing the asset \"{0}\". Verify your internet connection or try again later.":function(a){return["There was an error while installing the asset \"",a("0"),"\". Verify your internet connection or try again later."]},"There was an error while making an auto-save of the project. Verify that you have permissions to write in the project folder.":"There was an error while making an auto-save of the project. Verify that you have permissions to write in the project folder.","There was an error while updating the game's thumbnail on gd.games. Verify your internet connection or try again later.":"There was an error while updating the game's thumbnail on gd.games. Verify your internet connection or try again later.","There was an error while uploading some resources. Verify your internet connection or try again later.":"There was an error while uploading some resources. Verify your internet connection or try again later.","There was an issue getting the game analytics.":"There was an issue getting the game analytics.","There was an unknown error when trying to apply the code. Double check the code, try again later or contact us if this persists.":"There was an unknown error when trying to apply the code. Double check the code, try again later or contact us if this persists.","There were errors when importing resources for the project. You can retry (recommended) or continue despite the errors. In this case, the project might be missing some resources.":"There were errors when importing resources for the project. You can retry (recommended) or continue despite the errors. In this case, the project might be missing some resources.","There were errors when loading extensions. You cannot continue using GDevelop.":"There were errors when loading extensions. You cannot continue using GDevelop.","There were errors when preparing new leaderboards for the project.":"There were errors when preparing new leaderboards for the project.","These are behaviors":"These are behaviors","These are objects":"These are objects","These behaviors are already attached to the object:{0}Do you want to replace their property values?":function(a){return["These behaviors are already attached to the object:",a("0"),"Do you want to replace their property values?"]},"These effects already exist:{0}Do you want to replace them?":function(a){return["These effects already exist:",a("0"),"Do you want to replace them?"]},"These parameters already exist:{0}Do you want to replace them?":function(a){return["These parameters already exist:",a("0"),"Do you want to replace them?"]},"These properties already exist:{0}Do you want to replace them?":function(a){return["These properties already exist:",a("0"),"Do you want to replace them?"]},"These variables hold additional information and are available on all objects of the group.":"These variables hold additional information and are available on all objects of the group.","These variables hold additional information on a project.":"These variables hold additional information on a project.","These variables hold additional information on a scene.":"These variables hold additional information on a scene.","These variables hold additional information on an object.":"These variables hold additional information on an object.","Thickness":"Thickness","Thinking about your request...":"Thinking about your request...","Thinking through the approach":"Thinking through the approach","Thinking through the details":"Thinking through the details","Third editor":"Third editor","Third-party":"Third-party","This Auth Key was not sent or is not ready to be used.":"This Auth Key was not sent or is not ready to be used.","This Else event is not preceded by a standard event (or another Else), so it will run normally, like an event without an Else.":"This Else event is not preceded by a standard event (or another Else), so it will run normally, like an event without an Else.","This Else event will run if the previous event conditions are not met.":"This Else event will run if the previous event conditions are not met.","This Spine resource was exported with Spine {spineVersion}. The runtime requires data exported from Spine 4.2. Animations may not work correctly \u2014 please re-export from Spine 4.2.":function(a){return["This Spine resource was exported with Spine ",a("spineVersion"),". The runtime requires data exported from Spine 4.2. Animations may not work correctly \u2014 please re-export from Spine 4.2."]},"This account already owns this product, you cannot activate it again.":"This account already owns this product, you cannot activate it again.","This account has been deactivated or deleted.":"This account has been deactivated or deleted.","This account is already a student in another team.":"This account is already a student in another team.","This action cannot be undone.":"This action cannot be undone.","This action is deprecated and should not be used anymore. Instead, use for all your objects the behavior called \"Physics2\" and the associated actions (in this case, all objects must be set up to use Physics2, you can't mix the behaviors).":"This action is deprecated and should not be used anymore. Instead, use for all your objects the behavior called \"Physics2\" and the associated actions (in this case, all objects must be set up to use Physics2, you can't mix the behaviors).","This action is deprecated and should not be used anymore. Instead, use the \"Text input\" object.":"This action is deprecated and should not be used anymore. Instead, use the \"Text input\" object.","This action is not automatic yet, we will get in touch to gather your bank details.":"This action is not automatic yet, we will get in touch to gather your bank details.","This action will create a new texture and re-render the text each time it is called, which is expensive and can reduce performance. Avoid changing the character size of text frequently.":"This action will create a new texture and re-render the text each time it is called, which is expensive and can reduce performance. Avoid changing the character size of text frequently.","This asset requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["This asset requires updates to extensions that have breaking changes",a("0"),"Do you want to update them now?"]},"This behavior can be updated with new features and fixes.{0}Do you want to update it now ?":function(a){return["This behavior can be updated with new features and fixes.",a("0"),"Do you want to update it now ?"]},"This behavior can be updated. You may have to do some adaptations to make sure your game still works.{0}Do you want to update it now ?":function(a){return["This behavior can be updated. You may have to do some adaptations to make sure your game still works.",a("0"),"Do you want to update it now ?"]},"This behavior can't be setup per instance.":"This behavior can't be setup per instance.","This behavior is being used by multiple types of objects. Thus, you can't restrict its usage to any particular object type. All the object types using this behavior are listed here: {0}":function(a){return["This behavior is being used by multiple types of objects. Thus, you can't restrict its usage to any particular object type. All the object types using this behavior are listed here: ",a("0")]},"This behavior is unknown. It might be a behavior that was defined in an extension and that was later removed. You should delete it.":"This behavior is unknown. It might be a behavior that was defined in an extension and that was later removed. You should delete it.","This behavior requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["This behavior requires updates to extensions that have breaking changes",a("0"),"Do you want to update them now?"]},"This behavior will be visible in the scene and events editors.":"This behavior will be visible in the scene and events editors.","This behavior won't be visible in the scene and events editors.":"This behavior won't be visible in the scene and events editors.","This build is old and the generated games can't be downloaded anymore.":"This build is old and the generated games can't be downloaded anymore.","This bundle contains a subscription for {planName}. Do you want to activate your subscription right away?":function(a){return["This bundle contains a subscription for ",a("planName"),". Do you want to activate your subscription right away?"]},"This bundle includes:":"This bundle includes:","This can be customized for each scene in the scene properties dialog.":"This can be customized for each scene in the scene properties dialog.","This can either be a URL to a web page, or a path starting with a slash that will be opened in the GDevelop wiki. Leave empty if there is no help page, although it's recommended you eventually write one if you distribute the extension.":"This can either be a URL to a web page, or a path starting with a slash that will be opened in the GDevelop wiki. Leave empty if there is no help page, although it's recommended you eventually write one if you distribute the extension.","This certificate has an unknown type and is probably unable to be used by GDevelop.":"This certificate has an unknown type and is probably unable to be used by GDevelop.","This certificate type is unknown and might not work when building the app. Are you sure you want to continue?":"This certificate type is unknown and might not work when building the app. Are you sure you want to continue?","This certificate was not sent or is not ready to be used.":"This certificate was not sent or is not ready to be used.","This code is a coupon code and can't be redeemed here. Start a purchase and enter it there to get a discount.":"This code is a coupon code and can't be redeemed here. Start a purchase and enter it there to get a discount.","This code is not valid - verify you've entered it properly.":"This code is not valid - verify you've entered it properly.","This code was valid but can't be redeemed anymore. If this is unexpected, contact us or the code provider.":"This code was valid but can't be redeemed anymore. If this is unexpected, contact us or the code provider.","This condition may have unexpected results when the object is on different floors at the same time, due to the fact that the engine only considers the first floor the object comes into contact with.":"This condition may have unexpected results when the object is on different floors at the same time, due to the fact that the engine only considers the first floor the object comes into contact with.","This course is translated in multiple languages.":"This course is translated in multiple languages.","This email is invalid.":"This email is invalid.","This email was already used for another account.":"This email was already used for another account.","This event will be repeated for all instances.":"This event will be repeated for all instances.","This event will be repeated only for the first instances, up to this limit.":"This event will be repeated only for the first instances, up to this limit.","This extension requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["This extension requires updates to extensions that have breaking changes",a("0"),"Do you want to update them now?"]},"This file is an extension file for GDevelop 5. You should instead import it, using the window to add a new extension to your project.":"This file is an extension file for GDevelop 5. You should instead import it, using the window to add a new extension to your project.","This file is corrupt":"This file is corrupt","This file is not recognized as a GDevelop 5 project. Be sure to open a file that was saved using GDevelop.":"This file is not recognized as a GDevelop 5 project. Be sure to open a file that was saved using GDevelop.","This function calls itself (it is \"recursive\"). Ensure this is expected and there is a proper condition to stop it if necessary.":"This function calls itself (it is \"recursive\"). Ensure this is expected and there is a proper condition to stop it if necessary.","This function is asynchronous - it will only allow subsequent events to run after calling the action \"End asynchronous task\" within the function.":"This function is asynchronous - it will only allow subsequent events to run after calling the action \"End asynchronous task\" within the function.","This function is marked as deprecated. It will be displayed with a warning in the events editor.":"This function is marked as deprecated. It will be displayed with a warning in the events editor.","This function will be visible in the events editor.":"This function will be visible in the events editor.","This function will have a lot of parameters. Consider creating groups or functions for a smaller set of objects so that the function is easier to reuse.":"This function will have a lot of parameters. Consider creating groups or functions for a smaller set of objects so that the function is easier to reuse.","This function won't be visible in the events editor.":"This function won't be visible in the events editor.","This game is not registered online. Do you want to register it to access the online features?":"This game is not registered online. Do you want to register it to access the online features?","This game is registered online but you don't have access to it. Ask the owner of the game to add your account to the list of owners to be able to manage it.":"This game is registered online but you don't have access to it. Ask the owner of the game to add your account to the list of owners to be able to manage it.","This game is using leaderboards. GDevelop will create new leaderboards for this game in your account, so that the game is ready to be played and players can send their scores.":"This game is using leaderboards. GDevelop will create new leaderboards for this game in your account, so that the game is ready to be played and players can send their scores.","This group contains objects of different kinds. You'll only be able to use actions and conditions common to all objects with this group.":"This group contains objects of different kinds. You'll only be able to use actions and conditions common to all objects with this group.","This group contains objects of the same kind ({type}). You can use actions and conditions related to this kind of objects in events with this group.":function(a){return["This group contains objects of the same kind (",a("type"),"). You can use actions and conditions related to this kind of objects in events with this group."]},"This invitation is no longer valid.":"This invitation is no longer valid.","This is a \"lifecycle function\". It will be called automatically by the game engine. It has no parameters.":"This is a \"lifecycle function\". It will be called automatically by the game engine. It has no parameters.","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene having the behavior.":"This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene having the behavior.","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene.":"This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene.","This is a behavior.":"This is a behavior.","This is a condition.":"This is a condition.","This is a multichapter tutorial. GDevelop will save your progress so you can take a break when you need it.":"This is a multichapter tutorial. GDevelop will save your progress so you can take a break when you need it.","This is a relative path that will open in the GDevelop wiki.":"This is a relative path that will open in the GDevelop wiki.","This is all the feedback received on {0} coming from gd.games.":function(a){return["This is all the feedback received on ",a("0")," coming from gd.games."]},"This is an action.":"This is an action.","This is an asynchronous action, meaning that the actions and sub-events following it will wait for it to end. You should use other async actions like \"wait\" to schedule your actions and don't forget to use the action \"End asynchronous function\" to mark the end of the action.":"This is an asynchronous action, meaning that the actions and sub-events following it will wait for it to end. You should use other async actions like \"wait\" to schedule your actions and don't forget to use the action \"End asynchronous function\" to mark the end of the action.","This is an event.":"This is an event.","This is an expression.":"This is an expression.","This is an extension made by a community member and it only got through a light review by the GDevelop extension team. As such, we can't guarantee it meets all the quality standards of fully reviewed extensions.":"This is an extension made by a community member and it only got through a light review by the GDevelop extension team. As such, we can't guarantee it meets all the quality standards of fully reviewed extensions.","This is an extension.":"This is an extension.","This is an object.":"This is an object.","This is link to a webpage.":"This is link to a webpage.","This is not a URL starting with \"http://\" or \"https://\".":"This is not a URL starting with \"http://\" or \"https://\".","This is recommended as this allows you to earn money from your games. If you disable this, your game will not show any advertisement.":"This is recommended as this allows you to earn money from your games. If you disable this, your game will not show any advertisement.","This is the configuration of your behavior. Make sure to choose a proper internal name as it's hard to change it later. Enter a description explaining what the behavior is doing to the object.":"This is the configuration of your behavior. Make sure to choose a proper internal name as it's hard to change it later. Enter a description explaining what the behavior is doing to the object.","This is the configuration of your object. Make sure to choose a proper internal name as it's hard to change it later.":"This is the configuration of your object. Make sure to choose a proper internal name as it's hard to change it later.","This is the end of the version history.":"This is the end of the version history.","This is the list of builds that you've done for this game. <0/>Note that builds for mobile and desktop are available for 7 days, after which they are removed.":"This is the list of builds that you've done for this game. <0/>Note that builds for mobile and desktop are available for 7 days, after which they are removed.","This leaderboard is already resetting, please wait a bit, close the dialog, come back and try again.":"This leaderboard is already resetting, please wait a bit, close the dialog, come back and try again.","This link is private. You can share it with collaborators, friends or testers.<0/>When you're ready, go to the Game Dashboard and publish it on gd.games.":"This link is private. You can share it with collaborators, friends or testers.<0/>When you're ready, go to the Game Dashboard and publish it on gd.games.","This month":"This month","This needs improvement":"This needs improvement","This object can't be used here because it would create a circular dependency with the object being edited.":"This object can't be used here because it would create a circular dependency with the object being edited.","This object does not have any specific configuration. Add it on the scene and use events to interact with it.":"This object does not have any specific configuration. Add it on the scene and use events to interact with it.","This object exists, but can't be used here.":"This object exists, but can't be used here.","This object group is empty and locked.":"This object group is empty and locked.","This object has no behaviors: please add a behavior to the object first.":"This object has no behaviors: please add a behavior to the object first.","This object has no properties.":"This object has no properties.","This object misses some behaviors: {0}":function(a){return["This object misses some behaviors: ",a("0")]},"This object will be visible in the scene and events editors.":"This object will be visible in the scene and events editors.","This object won't be visible in the scene and events editors.":"This object won't be visible in the scene and events editors.","This password is too weak: please use more letters and digits.":"This password is too weak: please use more letters and digits.","This project cannot be opened":"This project cannot be opened","This project contains toolbar buttons that want to run npm scripts on your computer ({scriptNames}). Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["This project contains toolbar buttons that want to run npm scripts on your computer (",a("scriptNames"),"). Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data."]},"This project has an auto-saved version":"This project has an auto-saved version","This project has configured npm scripts ({scriptNames}) to run automatically when the \"{hookName}\" editor lifecycle hook fires. Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["This project has configured npm scripts (",a("scriptNames"),") to run automatically when the \"",a("hookName"),"\" editor lifecycle hook fires. Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data."]},"This project was modified by someone else on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["This project was modified by someone else on the ",a("formattedDate")," at ",a("formattedTime"),". Do you want to overwrite their changes?"]},"This project was modified by {lastUsernameWhoModifiedProject} on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["This project was modified by ",a("lastUsernameWhoModifiedProject")," on the ",a("formattedDate")," at ",a("formattedTime"),". Do you want to overwrite their changes?"]},"This property won't be visible in the editor.":"This property won't be visible in the editor.","This purchase cannot be claimed.":"This purchase cannot be claimed.","This purchase could not be found. Please contact support for more information.":"This purchase could not be found. Please contact support for more information.","This purchase has already been activated.":"This purchase has already been activated.","This request is for another project. <0>Start a new chat to build on a new project.":"This request is for another project. <0>Start a new chat to build on a new project.","This resource does not exist in the game":"This resource does not exist in the game","This scene will be used as the start scene.":"This scene will be used as the start scene.","This setting changes the visibility of the entire layer. Objects on the layer will not be treated as \"hidden\" for event conditions or actions.":"This setting changes the visibility of the entire layer. Objects on the layer will not be treated as \"hidden\" for event conditions or actions.","This shortcut clashes with another action.":"This shortcut clashes with another action.","This sprite uses a rectangle that is as large as the sprite for its collision mask.":"This sprite uses a rectangle that is as large as the sprite for its collision mask.","This tutorial must be unlocked to be accessed.":"This tutorial must be unlocked to be accessed.","This user does not have projects yet.":"This user does not have projects yet.","This user is already a collaborator.":"This user is already a collaborator.","This user was not found: have you created your account?":"This user was not found: have you created your account?","This username is already used, please pick another one.":"This username is already used, please pick another one.","This variable does not exist. <0>Click to add it.":"This variable does not exist. <0>Click to add it.","This variable has the same name as an object. Consider renaming one or the other.":"This variable has the same name as an object. Consider renaming one or the other.","This variable is not declared. It's recommended to use the *variables editor* to add it.":"This variable is not declared. It's recommended to use the *variables editor* to add it.","This variant can't be modified directly. It must be duplicated first.":"This variant can't be modified directly. It must be duplicated first.","This version of GDevelop is:":"This version of GDevelop is:","This was helpful":"This was helpful","This week":"This week","This will be used when packaging and submitting your application to the stores.":"This will be used when packaging and submitting your application to the stores.","This will close your current project. Unsaved changes will be lost.":"This will close your current project. Unsaved changes will be lost.","This will export your game as a Cordova project. Cordova is a technology that enables HTML5 games to be packaged for iOS and Android.":"This will export your game as a Cordova project. Cordova is a technology that enables HTML5 games to be packaged for iOS and Android.","This will export your game so that you can package it for Windows, macOS or Linux. You will need to install third-party tools (Node.js, Electron Builder) to package your game.":"This will export your game so that you can package it for Windows, macOS or Linux. You will need to install third-party tools (Node.js, Electron Builder) to package your game.","This will export your game to a folder. You can then upload it on a website/game hosting service and share it on marketplaces and gaming portals like CrazyGames, Poki, Game Jolt, itch.io, Newgrounds...":"This will export your game to a folder. You can then upload it on a website/game hosting service and share it on marketplaces and gaming portals like CrazyGames, Poki, Game Jolt, itch.io, Newgrounds...","This year":"This year","This/these file(s) are outside the project folder. Would you like to make a copy of them in your project folder first (recommended)?":"This/these file(s) are outside the project folder. Would you like to make a copy of them in your project folder first (recommended)?","Through a teacher":"Through a teacher","Throwing physics":"Throwing physics","TikTok":"TikTok","Tile Map":"Tile Map","Tile Set":"Tile Set","Tile map resource":"Tile map resource","Tile picker":"Tile picker","Tile size":"Tile size","Tiled sprite":"Tiled sprite","Tilemap":"Tilemap","Tilemap painter":"Tilemap painter","Time (ms)":"Time (ms)","Time between frames":"Time between frames","Time format":"Time format","Time score":"Time score","Timers":"Timers","Timers:":"Timers:","Timestamp: {0}":function(a){return["Timestamp: ",a("0")]},"Tiny":"Tiny","Title cannot be empty.":"Title cannot be empty.","To avoid flickering on objects followed by the camera, use sprites with even dimensions.":"To avoid flickering on objects followed by the camera, use sprites with even dimensions.","To begin, open or create a new project.":"To begin, open or create a new project.","To buy this new subscription, we need to stop your existing one before you can pay for the new one. This means the redemption code you're currently used won't be usable anymore.":"To buy this new subscription, we need to stop your existing one before you can pay for the new one. This means the redemption code you're currently used won't be usable anymore.","To confirm, type \"{translatedConfirmText}\"":function(a){return["To confirm, type \"",a("translatedConfirmText"),"\""]},"To edit the external events, choose the scene in which it will be included":"To edit the external events, choose the scene in which it will be included","To edit the external layout, choose the scene in which it will be included":"To edit the external layout, choose the scene in which it will be included","To get this new subscription, we need to stop your existing one before you can pay for the new one. This is immediate but your payment will NOT be pro-rated (you will pay the full price for the new subscription). You won't lose any project, game or other data.":"To get this new subscription, we need to stop your existing one before you can pay for the new one. This is immediate but your payment will NOT be pro-rated (you will pay the full price for the new subscription). You won't lose any project, game or other data.","To keep using GDevelop cloud, consider deleting old, unused projects.":"To keep using GDevelop cloud, consider deleting old, unused projects.","To keep using GDevelop leaderboards, consider deleting old, unused leaderboards.":"To keep using GDevelop leaderboards, consider deleting old, unused leaderboards.","To obtain the best pixel-perfect effect possible, go in the resources editor and disable the Smoothing for all images of your game. It will be done automatically for new images added from now.":"To obtain the best pixel-perfect effect possible, go in the resources editor and disable the Smoothing for all images of your game. It will be done automatically for new images added from now.","To preview the shape that the Physics engine will use for this object, choose first a temporary image to use for the preview.":"To preview the shape that the Physics engine will use for this object, choose first a temporary image to use for the preview.","To start a timer, don't forget to use the action \"Start (or reset) a scene timer\" in another event.":"To start a timer, don't forget to use the action \"Start (or reset) a scene timer\" in another event.","To start a timer, don't forget to use the action \"Start (or reset) an object timer\" in another event.":"To start a timer, don't forget to use the action \"Start (or reset) an object timer\" in another event.","To update your seats, contact us at education@gdevelop.io with the details of your current account and how many seats you would like.":"To update your seats, contact us at education@gdevelop.io with the details of your current account and how many seats you would like.","To use this formatting, you must send a score expressed in seconds":"To use this formatting, you must send a score expressed in seconds","Today":"Today","Toggle Developer Tools":"Toggle Developer Tools","Toggle Disabled":"Toggle Disabled","Toggle Fullscreen":"Toggle Fullscreen","Toggle Instances List Panel":"Toggle Instances List Panel","Toggle Layers Panel":"Toggle Layers Panel","Toggle Object Groups Panel":"Toggle Object Groups Panel","Toggle Objects Panel":"Toggle Objects Panel","Toggle Properties Panel":"Toggle Properties Panel","Toggle Wait the Action to End":"Toggle Wait the Action to End","Toggle disabled event":"Toggle disabled event","Toggle grid":"Toggle grid","Toggle inverted condition":"Toggle inverted condition","Toggle mask":"Toggle mask","Toggle/edit grid":"Toggle/edit grid","Too many things were changed or broken":"Too many things were changed or broken","Top":"Top","Top bound":"Top bound","Top bound should be smaller than bottom bound":"Top bound should be smaller than bottom bound","Top face":"Top face","Top left corner":"Top left corner","Top margin":"Top margin","Top right corner":"Top right corner","Top-Down RPG Pixel Perfect":"Top-Down RPG Pixel Perfect","Top-down":"Top-down","Top-down, classic editor":"Top-down, classic editor","Total":"Total","Touch (mobile)":"Touch (mobile)","Tracked C++ objects exposed to JavaScript. Counts refresh every second.":"Tracked C++ objects exposed to JavaScript. Counts refresh every second.","Transform a game into a multiplayer experience.":"Transform a game into a multiplayer experience.","Transform this Plinko game with collectibles that multiply your score.":"Transform this Plinko game with collectibles that multiply your score.","Transform this platformer into a co-op game, where two players can play together.":"Transform this platformer into a co-op game, where two players can play together.","Triangle":"Triangle","True":"True","True (checked)":"True (checked)","True or False":"True or False","True or False (boolean)":"True or False (boolean)","Try again":"Try again","Try different search terms or check your search options.":"Try different search terms or check your search options.","Try installing it from the extension store.":"Try installing it from the extension store.","Try it online":"Try it online","Try something else, browse the packs or create your object from scratch!":"Try something else, browse the packs or create your object from scratch!","Try your game":"Try your game","Tutorial":"Tutorial","Tweak gameplay":"Tweak gameplay","Twitter":"Twitter","Type":"Type","Type of License: <0>{0}":function(a){return["Type of License: <0>",a("0"),""]},"Type of License: {0}":function(a){return["Type of License: ",a("0")]},"Type of objects":"Type of objects","Type your email address to delete your account:":"Type your email address to delete your account:","Type your email to confirm":"Type your email to confirm","Type:":"Type:","UI Theme":"UI Theme","UI/Interface":"UI/Interface","URL":"URL","Unable to change feedback for this game":"Unable to change feedback for this game","Unable to change quality rating of feedback.":"Unable to change quality rating of feedback.","Unable to change read status of feedback.":"Unable to change read status of feedback.","Unable to change your email preferences":"Unable to change your email preferences","Unable to create a new project for the course chapter. Try again later.":"Unable to create a new project for the course chapter. Try again later.","Unable to create a new project for the tutorial. Try again later.":"Unable to create a new project for the tutorial. Try again later.","Unable to create the project":"Unable to create the project","Unable to delete the project":"Unable to delete the project","Unable to download and install the extension and its dependencies. Verify that your internet connection is working or try again later.":"Unable to download and install the extension and its dependencies. Verify that your internet connection is working or try again later.","Unable to download the icon. Verify your internet connection or try again later.":"Unable to download the icon. Verify your internet connection or try again later.","Unable to fetch leaderboards as you are offline.":"Unable to fetch leaderboards as you are offline.","Unable to fetch the example.":"Unable to fetch the example.","Unable to find the price for this asset pack. Please try again later.":"Unable to find the price for this asset pack. Please try again later.","Unable to find the price for this bundle. Please try again later.":"Unable to find the price for this bundle. Please try again later.","Unable to find the price for this course. Please try again later.":"Unable to find the price for this course. Please try again later.","Unable to find the price for this game template. Please try again later.":"Unable to find the price for this game template. Please try again later.","Unable to get the checkout URL. Please try again later.":"Unable to get the checkout URL. Please try again later.","Unable to load the code editor":"Unable to load the code editor","Unable to load the image":"Unable to load the image","Unable to load the information about the latest GDevelop releases. Verify your internet connection or retry later.":"Unable to load the information about the latest GDevelop releases. Verify your internet connection or retry later.","Unable to load the tutorial. Please try again later or contact us if the problem persists.":"Unable to load the tutorial. Please try again later or contact us if the problem persists.","Unable to mark one of the feedback as read.":"Unable to mark one of the feedback as read.","Unable to open the project":"Unable to open the project","Unable to open the project because this provider is unknown: {storageProviderName}. Try to open the project again from another location.":function(a){return["Unable to open the project because this provider is unknown: ",a("storageProviderName"),". Try to open the project again from another location."]},"Unable to open the project.":"Unable to open the project.","Unable to open this file.":"Unable to open this file.","Unable to open this window":"Unable to open this window","Unable to register the game":"Unable to register the game","Unable to remove collaborator":"Unable to remove collaborator","Unable to save the project":"Unable to save the project","Unable to start the debugger server! Make sure that you are authorized to run servers on this computer.":"Unable to start the debugger server! Make sure that you are authorized to run servers on this computer.","Unable to start the server for the preview! Make sure that you are authorized to run servers on this computer. Otherwise, use classic preview to test your game.":"Unable to start the server for the preview! Make sure that you are authorized to run servers on this computer. Otherwise, use classic preview to test your game.","Unable to unregister the game":"Unable to unregister the game","Unable to update game.":"Unable to update game.","Unable to update the game details.":"Unable to update the game details.","Unable to update the game owners or authors. Have you removed yourself from the owners?":"Unable to update the game owners or authors. Have you removed yourself from the owners?","Unable to update the game slug. A slug must be 6 to 30 characters long and only contains letters, digits or dashes.":"Unable to update the game slug. A slug must be 6 to 30 characters long and only contains letters, digits or dashes.","Unable to verify URLs {0} . Please check they are correct.":function(a){return["Unable to verify URLs ",a("0")," . Please check they are correct."]},"Understanding the context":"Understanding the context","Understood, I'll check my Apple or Google account":"Understood, I'll check my Apple or Google account","Undo":"Undo","Undo the last changes":"Undo the last changes","Unfortunately, this extension requires a newer version of GDevelop to work. Update GDevelop to be able to use this extension in your project.":"Unfortunately, this extension requires a newer version of GDevelop to work. Update GDevelop to be able to use this extension in your project.","Unknown behavior":"Unknown behavior","Unknown bundle":"Unknown bundle","Unknown certificate type":"Unknown certificate type","Unknown changes attempted for scene {scene_name}.":function(a){return["Unknown changes attempted for scene ",a("scene_name"),"."]},"Unknown game":"Unknown game","Unknown status":"Unknown status","Unknown status.":"Unknown status.","Unlimited":"Unlimited","Unlimited commercial use license for claim with Gold or Pro subscription":"Unlimited commercial use license for claim with Gold or Pro subscription","Unload at scene exit":"Unload at scene exit","Unloading of scene resources":"Unloading of scene resources","Unlock full access to GDevelop to create without limits!":"Unlock full access to GDevelop to create without limits!","Unlock the whole course":"Unlock the whole course","Unlock this lesson to finish the course":"Unlock this lesson to finish the course","Unlock with the full course":"Unlock with the full course","Unnamed":"Unnamed","Unregister game":"Unregister game","Unsaved changes":"Unsaved changes","Untitled external events":"Untitled external events","Untitled external layout":"Untitled external layout","Untitled scene":"Untitled scene","UntitledExtension":"UntitledExtension","Update":"Update","Update (could break the project)":"Update (could break the project)","Update <0>{label} of <1>{object_name} (in scene {scene_name}) to <2>{newValue}.":function(a){return["Update <0>",a("label")," of <1>",a("object_name")," (in scene ",a("scene_name"),") to <2>",a("newValue"),"."]},"Update <0>{label} of behavior {behavior_name} on object <1>{object_name} (in scene <2>{scene_name}) to <3>{newValue}.":function(a){return["Update <0>",a("label")," of behavior ",a("behavior_name")," on object <1>",a("object_name")," (in scene <2>",a("scene_name"),") to <3>",a("newValue"),"."]},"Update GDevelop to latest version":"Update GDevelop to latest version","Update events in scene <0>{scene_name}.":function(a){return["Update events in scene <0>",a("scene_name"),"."]},"Update game page":"Update game page","Update resolution during the game to fit the screen or window size":"Update resolution during the game to fit the screen or window size","Update some scene effects and groups for scene {scene_name}.":function(a){return["Update some scene effects and groups for scene ",a("scene_name"),"."]},"Update some scene effects and layers for scene {scene_name}.":function(a){return["Update some scene effects and layers for scene ",a("scene_name"),"."]},"Update some scene effects for scene {scene_name}.":function(a){return["Update some scene effects for scene ",a("scene_name"),"."]},"Update some scene effects, layers and groups for scene {scene_name}.":function(a){return["Update some scene effects, layers and groups for scene ",a("scene_name"),"."]},"Update some scene groups for scene {scene_name}.":function(a){return["Update some scene groups for scene ",a("scene_name"),"."]},"Update some scene layers and groups for scene {scene_name}.":function(a){return["Update some scene layers and groups for scene ",a("scene_name"),"."]},"Update some scene layers for scene {scene_name}.":function(a){return["Update some scene layers for scene ",a("scene_name"),"."]},"Update some scene properties and effects for scene {scene_name}.":function(a){return["Update some scene properties and effects for scene ",a("scene_name"),"."]},"Update some scene properties and groups for scene {scene_name}.":function(a){return["Update some scene properties and groups for scene ",a("scene_name"),"."]},"Update some scene properties and layers for scene {scene_name}.":function(a){return["Update some scene properties and layers for scene ",a("scene_name"),"."]},"Update some scene properties for scene {scene_name}.":function(a){return["Update some scene properties for scene ",a("scene_name"),"."]},"Update some scene properties, effects and groups for scene {scene_name}.":function(a){return["Update some scene properties, effects and groups for scene ",a("scene_name"),"."]},"Update some scene properties, layers and groups for scene {scene_name}.":function(a){return["Update some scene properties, layers and groups for scene ",a("scene_name"),"."]},"Update some scene properties, layers, effects and groups for scene {scene_name}.":function(a){return["Update some scene properties, layers, effects and groups for scene ",a("scene_name"),"."]},"Update the extension":"Update the extension","Update your seats":"Update your seats","Update your subscription":"Update your subscription","Update {0} properties of <0>{object_name} (in scene {scene_name}).":function(a){return["Update ",a("0")," properties of <0>",a("object_name")," (in scene ",a("scene_name"),")."]},"Update {0} settings of behavior {behavior_name} on object {object_name} (in scene {scene_name}).":function(a){return["Update ",a("0")," settings of behavior ",a("behavior_name")," on object ",a("object_name")," (in scene ",a("scene_name"),")."]},"Updates":"Updates","Updating...":"Updating...","Upgrade":"Upgrade","Upgrade for:":"Upgrade for:","Upgrade subscription":"Upgrade subscription","Upgrade to GDevelop Premium":"Upgrade to GDevelop Premium","Upgrade to GDevelop Premium to get more leaderboards, storage, and one-click packagings!":"Upgrade to GDevelop Premium to get more leaderboards, storage, and one-click packagings!","Upgrade to get more cloud projects, AI usage, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"Upgrade to get more cloud projects, AI usage, publishing, multiplayer, courses and credits every month with GDevelop Premium.","Upgrade to get more cloud projects, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"Upgrade to get more cloud projects, publishing, multiplayer, courses and credits every month with GDevelop Premium.","Upgrade your GDevelop subscription to unlock this packaging.":"Upgrade your GDevelop subscription to unlock this packaging.","Upgrade your Premium Plan":"Upgrade your Premium Plan","Upgrade your Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"Upgrade your Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.","Upgrade your subscription":"Upgrade your subscription","Upgrade your subscription to keep building with AI.":"Upgrade your subscription to keep building with AI.","Upload to build service":"Upload to build service","Uploading your game...":"Uploading your game...","Use":"Use","Use 3D rendering":"Use 3D rendering","Use <0><1/>{variableName} as the loop counter":function(a){return["Use <0><1/>",a("variableName")," as the loop counter"]},"Use GDevelop Credits":"Use GDevelop Credits","Use GDevelop credits or get a subscription to increase the limits.":"Use GDevelop credits or get a subscription to increase the limits.","Use GDevelop credits or upgrade your subscription to increase the limits.":"Use GDevelop credits or upgrade your subscription to increase the limits.","Use GDevelop credits to start an export.":"Use GDevelop credits to start an export.","Use a Tilemap to build a level and change it dynamically during the game.":"Use a Tilemap to build a level and change it dynamically during the game.","Use a custom collision mask":"Use a custom collision mask","Use a public URL":"Use a public URL","Use an expression":"Use an expression","Use as...":"Use as...","Use custom CSS for the leaderboard":"Use custom CSS for the leaderboard","Use experimental background serializer for saving projects":"Use experimental background serializer for saving projects","Use full image as collision mask":"Use full image as collision mask","Use icon":"Use icon","Use legacy renderer":"Use legacy renderer","Use same collision mask":"Use same collision mask","Use same collision mask for all animations?":"Use same collision mask for all animations?","Use same collision mask for all frames?":"Use same collision mask for all frames?","Use same points":"Use same points","Use same points for all animations?":"Use same points for all animations?","Use same points for all frames?":"Use same points for all frames?","Use the project setting":"Use the project setting","Use this external layout inside this scene to start all previews":"Use this external layout inside this scene to start all previews","Use this scene to start all previews":"Use this scene to start all previews","Use your email":"Use your email","User interface":"User interface","User name in the game URL":"User name in the game URL","Username":"Username","Usernames are required to choose a custom game URL.":"Usernames are required to choose a custom game URL.","Users can choose to see only players' best entries or not.":"Users can choose to see only players' best entries or not.","Users will be created with an anonymous email. You can later define a full name, a username, or update the generated password if needed.":"Users will be created with an anonymous email. You can later define a full name, a username, or update the generated password if needed.","Using GDevelop Credits":"Using GDevelop Credits","Using Nearest Scale Mode":"Using Nearest Scale Mode","Using a lot of effects can have a severe negative impact on the rendering performance, especially on low-end or mobile devices. Consider using less effects if possible. You can also disable and re-enable effects as needed using events.":"Using a lot of effects can have a severe negative impact on the rendering performance, especially on low-end or mobile devices. Consider using less effects if possible. You can also disable and re-enable effects as needed using events.","Using effects":"Using effects","Using empty events based behavior":"Using empty events based behavior","Using empty events based object":"Using empty events based object","Using events based behavior":"Using events based behavior","Using events based object":"Using events based object","Using function extractor":"Using function extractor","Using lighting layer":"Using lighting layer","Using non smoothed textures":"Using non smoothed textures","Using pixel rounding":"Using pixel rounding","Using the resource properties panel":"Using the resource properties panel","Using too much effects":"Using too much effects","Validate these parameters":"Validate these parameters","Validating...":"Validating...","Value":"Value","Variable":"Variable","Variables":"Variables","Variables declared in all objects of the group will be visible in event expressions.":"Variables declared in all objects of the group will be visible in event expressions.","Variables list":"Variables list","Variant":"Variant","Variant name":"Variant name","Variant updates":"Variant updates","Verify that you have the authorization for reading the file you're trying to access.":"Verify that you have the authorization for reading the file you're trying to access.","Verify your internet connection or try again later.":"Verify your internet connection or try again later.","Version":"Version","Version number (X.Y.Z)":"Version number (X.Y.Z)","Version {0}":function(a){return["Version ",a("0")]},"Version {0} ({1} available)":function(a){return["Version ",a("0")," (",a("1")," available)"]},"Version {version} is available and will be downloaded and installed automatically.":function(a){return["Version ",a("version")," is available and will be downloaded and installed automatically."]},"Version {version} is available. Open About to download and install it.":function(a){return["Version ",a("version")," is available. Open About to download and install it."]},"Vertical anchor":"Vertical anchor","Vertical flip":"Vertical flip","Video":"Video","Video format supported can vary according to devices and browsers. For maximum compatibility, use H.264/mp4 file format (and AAC for audio).":"Video format supported can vary according to devices and browsers. For maximum compatibility, use H.264/mp4 file format (and AAC for audio).","Video game":"Video game","Video resource":"Video resource","View":"View","View history":"View history","View original chat":"View original chat","Viewers":"Viewers","Viewpoint":"Viewpoint","Visibility":"Visibility","Visibility and instances ordering":"Visibility and instances ordering","Visibility in quick customization dialog":"Visibility in quick customization dialog","Visible":"Visible","Visible in editor":"Visible in editor","Visible in the search and your profile":"Visible in the search and your profile","Visual Effects":"Visual Effects","Visual appearance":"Visual appearance","Visual appearance (advanced)":"Visual appearance (advanced)","Visual effect":"Visual effect","Visuals":"Visuals","Wait for the action to end before executing the actions (and subevents) following it":"Wait for the action to end before executing the actions (and subevents) following it","Waiting for the purchase confirmation...":"Waiting for the purchase confirmation...","Waiting for the subscription confirmation...":"Waiting for the subscription confirmation...","Wallet":"Wallet","Want to know more?":"Want to know more?","Warning":"Warning","Watch changes in game engine (GDJS) sources and auto import them (dev only)":"Watch changes in game engine (GDJS) sources and auto import them (dev only)","Watch the project folder for file changes in order to refresh the resources used in the editor (images, 3D models, fonts, etc.)":"Watch the project folder for file changes in order to refresh the resources used in the editor (images, 3D models, fonts, etc.)","Watch tutorial":"Watch tutorial","We could not check your follow":"We could not check your follow","We could not check your subscription":"We could not check your subscription","We could not find your GitHub star":"We could not find your GitHub star","We could not find your GitHub user and star":"We could not find your GitHub user and star","We could not find your user":"We could not find your user","We couldn't find a version to go back to.":"We couldn't find a version to go back to.","We couldn't find your project.{0}If your project is stored on a different computer, launch GDevelop on that computer.{1}Otherwise, use the \"Open project\" button and find it in your filesystem.":function(a){return["We couldn't find your project.",a("0"),"If your project is stored on a different computer, launch GDevelop on that computer.",a("1"),"Otherwise, use the \"Open project\" button and find it in your filesystem."]},"We couldn't load your cloud projects. Verify your internet connection or try again later.":"We couldn't load your cloud projects. Verify your internet connection or try again later.","We have found a non-corrupt save from {0} available for modification.":function(a){return["We have found a non-corrupt save from ",a("0")," available for modification."]},"Web":"Web","Web Build":"Web Build","Web builds":"Web builds","Welcome back!":"Welcome back!","Welcome to GDevelop!":"Welcome to GDevelop!","What are you using GDevelop for?":"What are you using GDevelop for?","What could be improved?":"What could be improved?","What do you want to make?":"What do you want to make?","What is a good GDevelop feature I could use in my game?":"What is a good GDevelop feature I could use in my game?","What is your goal with GDevelop?":"What is your goal with GDevelop?","What kind of projects are you building?":"What kind of projects are you building?","What kind of projects do you want to build with GDevelop?":"What kind of projects do you want to build with GDevelop?","What should I do next?":"What should I do next?","What went wrong?":"What went wrong?","What would you add to my game?":"What would you add to my game?","What would you like to create?":"What would you like to create?","What would you like to do next?":"What would you like to do next?","What would you like to do with this uncorrupted version of your project?":"What would you like to do with this uncorrupted version of your project?","What's included:":"What's included:","What's new in GDevelop?":"What's new in GDevelop?","What's new?":"What's new?","When checked, will only display the best score of each player (only for the display below).":"When checked, will only display the best score of each player (only for the display below).","When do you plan to finish or release your projects?":"When do you plan to finish or release your projects?","When previewing the game in the editor, this duration is ignored (the game preview starts as soon as possible).":"When previewing the game in the editor, this duration is ignored (the game preview starts as soon as possible).","When you create an object using an action, GDevelop now sets the Z order of the object to the maximum value that was found when starting the scene for each layer. This allow to make sure that objects that you create are in front of others. This game was created before this change, so GDevelop maintains the old behavior: newly created objects Z order is set to 0. It's recommended that you switch to the new behavior by clicking the following button.":"When you create an object using an action, GDevelop now sets the Z order of the object to the maximum value that was found when starting the scene for each layer. This allow to make sure that objects that you create are in front of others. This game was created before this change, so GDevelop maintains the old behavior: newly created objects Z order is set to 0. It's recommended that you switch to the new behavior by clicking the following button.","Where are you planing to publish your project(s)?":"Where are you planing to publish your project(s)?","Where to store this project":"Where to store this project","While these conditions are true:":"While these conditions are true:","Width":"Width","Window":"Window","Window title":"Window title","Windows (auto-installer file)":"Windows (auto-installer file)","Windows (exe)":"Windows (exe)","Windows (zip file)":"Windows (zip file)","Windows (zip)":"Windows (zip)","Windows, MacOS and Linux":"Windows, MacOS and Linux","Windows, MacOS, Linux (Steam, MS Store...)":"Windows, MacOS, Linux (Steam, MS Store...)","Windows, macOS & Linux":"Windows, macOS & Linux","Windows/macOS/Linux (manual)":"Windows/macOS/Linux (manual)","Windows/macOS/Linux Build":"Windows/macOS/Linux Build","With an established team of people during the whole project":"With an established team of people during the whole project","With at least one other person":"With at least one other person","With placeholder":"With placeholder","Working...":"Working...","Would you like to describe your projects?":"Would you like to describe your projects?","Would you like to open the non-corrupt version instead?":"Would you like to open the non-corrupt version instead?","Write events for scene <0>{scene_name}.":function(a){return["Write events for scene <0>",a("scene_name"),"."]},"X":"X","X offset (in pixels)":"X offset (in pixels)","Y":"Y","Y offset (in pixels)":"Y offset (in pixels)","Year":"Year","Yearly, {0}":function(a){return["Yearly, ",a("0")]},"Yearly, {0} per seat":function(a){return["Yearly, ",a("0")," per seat"]},"Yes":"Yes","Yes or No":"Yes or No","Yes or No (boolean)":"Yes or No (boolean)","Yes, and enable auto-edit":"Yes, and enable auto-edit","Yes, discard my changes":"Yes, discard my changes","Yes, just this change":"Yes, just this change","Yesterday":"Yesterday","You already have an account for this email address with a different provider (Google, Apple or GitHub). Please try with one of those.":"You already have an account for this email address with a different provider (Google, Apple or GitHub). Please try with one of those.","You already have an active {translatedName} featuring for your game {0}. Check your emails or discord, we will get in touch with you to get the campaign up!":function(a){return["You already have an active ",a("translatedName")," featuring for your game ",a("0"),". Check your emails or discord, we will get in touch with you to get the campaign up!"]},"You already have these {0} assets installed, do you want to add them again?":function(a){return["You already have these ",a("0")," assets installed, do you want to add them again?"]},"You already have {0} asset(s) in your scene. Do you want to add the remaining {1} one(s)?":function(a){return["You already have ",a("0")," asset(s) in your scene. Do you want to add the remaining ",a("1")," one(s)?"]},"You already own this product":"You already own this product","You already own {0}!":function(a){return["You already own ",a("0"),"!"]},"You already used this code - you can't reuse a code multiple times.":"You already used this code - you can't reuse a code multiple times.","You are about to delete an object":"You are about to delete an object","You are about to delete the project {projectName}, which is currently opened. If you proceed, the project will be closed and you will lose any unsaved changes. Do you want to proceed?":function(a){return["You are about to delete the project ",a("projectName"),", which is currently opened. If you proceed, the project will be closed and you will lose any unsaved changes. Do you want to proceed?"]},"You are about to quit the tutorial.":"You are about to quit the tutorial.","You are about to remove \"{0}\" from the list of your projects.{1}It will not delete it from your disk and you can always re-open it later. Do you want to proceed?":function(a){return["You are about to remove \"",a("0"),"\" from the list of your projects.",a("1"),"It will not delete it from your disk and you can always re-open it later. Do you want to proceed?"]},"You are about to remove the last sprite of this object, which has a custom collision mask. The custom collision mask will be lost. Are you sure you want to continue?":"You are about to remove the last sprite of this object, which has a custom collision mask. The custom collision mask will be lost. Are you sure you want to continue?","You are about to remove {0}{1} from the list of collaborators. Are you sure?":function(a){return["You are about to remove ",a("0"),a("1")," from the list of collaborators. Are you sure?"]},"You are about to use {assetPackCreditsAmount} credits to purchase the asset pack {0}. Continue?":function(a){return["You are about to use ",a("assetPackCreditsAmount")," credits to purchase the asset pack ",a("0"),". Continue?"]},"You are about to use {creditsAmount} credits to purchase the course \"{translatedCourseTitle}\". Continue?":function(a){return["You are about to use ",a("creditsAmount")," credits to purchase the course \"",a("translatedCourseTitle"),"\". Continue?"]},"You are about to use {gameTemplateCreditsAmount} credits to purchase the game template {0}. Continue?":function(a){return["You are about to use ",a("gameTemplateCreditsAmount")," credits to purchase the game template ",a("0"),". Continue?"]},"You are about to use {planCreditsAmount} credits to extend the game featuring {translatedName} for your game {0} and push it to the top of gd.games. Continue?":function(a){return["You are about to use ",a("planCreditsAmount")," credits to extend the game featuring ",a("translatedName")," for your game ",a("0")," and push it to the top of gd.games. Continue?"]},"You are about to use {planCreditsAmount} credits to purchase the game featuring {translatedName} for your game {0}. Continue?":function(a){return["You are about to use ",a("planCreditsAmount")," credits to purchase the game featuring ",a("translatedName")," for your game ",a("0"),". Continue?"]},"You are about to use {usageCreditPrice} credits to start this build. Continue?":function(a){return["You are about to use ",a("usageCreditPrice")," credits to start this build. Continue?"]},"You are already a member of this team.":"You are already a member of this team.","You are in raw mode. You can edit the fields, but be aware that this can lead to unexpected results or even crash the debugged game!":"You are in raw mode. You can edit the fields, but be aware that this can lead to unexpected results or even crash the debugged game!","You are missing out on asset store discounts and other benefits! Verify your email address. Didn't receive it?":"You are missing out on asset store discounts and other benefits! Verify your email address. Didn't receive it?","You are not connected. Create an account to build your game for Android, Windows, macOS and Linux in one click, and get access to metrics for your game.":"You are not connected. Create an account to build your game for Android, Windows, macOS and Linux in one click, and get access to metrics for your game.","You are not owner of this project, so you cannot invite collaborators.":"You are not owner of this project, so you cannot invite collaborators.","You are not the owner of this game, ask the owner to add you as an owner to see its exports.":"You are not the owner of this game, ask the owner to add you as an owner to see its exports.","You can <0>help translate GDevelop into your language.":"You can <0>help translate GDevelop into your language.","You can add students who already have a GDevelop account. They will receive a notification to accept the invitation. If they don't have an account, they can create one with their student email.":"You can add students who already have a GDevelop account. They will receive a notification to accept the invitation. If they don't have an account, they can create one with their student email.","You can also launch a preview from this external layout, but remember that it will still create objects from the scene, as well as trigger its events. Make sure to disable any action loading the external layout before doing so to avoid having duplicate objects!":"You can also launch a preview from this external layout, but remember that it will still create objects from the scene, as well as trigger its events. Make sure to disable any action loading the external layout before doing so to avoid having duplicate objects!","You can always do it later by redeeming a code on your profile.":"You can always do it later by redeeming a code on your profile.","You can configure the following properties and they will be applied as soon as you share your game with an export to gd.games.":"You can configure the following properties and they will be applied as soon as you share your game with an export to gd.games.","You can contribute and <0>create your own themes.":"You can contribute and <0>create your own themes.","You can download the file of your game to continue working on it using the full GDevelop version:":"You can download the file of your game to continue working on it using the full GDevelop version:","You can export the extension to a file to easily import it in another project. If your extension is providing useful and reusable functions or behaviors, consider sharing it with the GDevelop community!":"You can export the extension to a file to easily import it in another project. If your extension is providing useful and reusable functions or behaviors, consider sharing it with the GDevelop community!","You can find your cloud projects in the Create section of the homepage.":"You can find your cloud projects in the Create section of the homepage.","You can install it from the Project Manager.":"You can install it from the Project Manager.","You can now compile the game by yourself using Cordova command-line tool to iOS (XCode is required) or Android (Android SDK is required).":"You can now compile the game by yourself using Cordova command-line tool to iOS (XCode is required) or Android (Android SDK is required).","You can now create a game on Facebook Instant Games, if not already done, and upload the generated archive.":"You can now create a game on Facebook Instant Games, if not already done, and upload the generated archive.","You can now go back to the asset store to use the assets in your games.":"You can now go back to the asset store to use the assets in your games.","You can now go back to the course.":"You can now go back to the course.","You can now go back to the store to use your new game template.":"You can now go back to the store to use your new game template.","You can now go back to use your new bundle.":"You can now go back to use your new bundle.","You can now go back to use your new product.":"You can now go back to use your new product.","You can now upload the game to a web hosting service to play it.":"You can now upload the game to a web hosting service to play it.","You can now use them across the app!":"You can now use them across the app!","You can only install up to {MAX_ASSETS_TO_INSTALL} assets at once. Try filtering the assets you would like to install, or install them one by one.":function(a){return["You can only install up to ",a("MAX_ASSETS_TO_INSTALL")," assets at once. Try filtering the assets you would like to install, or install them one by one."]},"You can open the command palette by pressing {commandPaletteShortcut} or {commandPaletteSecondaryShortcut}.":function(a){return["You can open the command palette by pressing ",a("commandPaletteShortcut")," or ",a("commandPaletteSecondaryShortcut"),"."]},"You can save your project to come back to it later. What do you want to do?":"You can save your project to come back to it later. What do you want to do?","You can select more than one.":"You can select more than one.","You can switch to GDevelop credits.":"You can switch to GDevelop credits.","You can use credits to feature a game or purchase asset packs and game templates in the store!":"You can use credits to feature a game or purchase asset packs and game templates in the store!","You can't delete your account while you have an active subscription. Please cancel your subscription first.":"You can't delete your account while you have an active subscription. Please cancel your subscription first.","You cannot add yourself as a collaborator.":"You cannot add yourself as a collaborator.","You cannot do this.":"You cannot do this.","You cannot unregister a game that has active leaderboards. To delete them, access the player services, and delete them one by one.":"You cannot unregister a game that has active leaderboards. To delete them, access the player services, and delete them one by one.","You currently have a subscription, applied thanks to a redemption code, valid until {0} . If you redeem another code, your existing subscription will be canceled and not redeemable anymore!":function(a){return["You currently have a subscription, applied thanks to a redemption code, valid until ",a("0")," . If you redeem another code, your existing subscription will be canceled and not redeemable anymore!"]},"You currently have a subscription. If you redeem a code, the existing subscription will be cancelled and replaced by the one given by the code.":"You currently have a subscription. If you redeem a code, the existing subscription will be cancelled and replaced by the one given by the code.","You do not have access to project saves with your current subscription plan. Please upgrade your plan to access this feature.":"You do not have access to project saves with your current subscription plan. Please upgrade your plan to access this feature.","You do not have permission to access the project save associated with this AI request message.":"You do not have permission to access the project save associated with this AI request message.","You don't have a thumbnail":"You don't have a thumbnail","You don't have any Android builds for this game.":"You don't have any Android builds for this game.","You don't have any active students. Click on \"Manage seats\" to add students or teachers to your team.":"You don't have any active students. Click on \"Manage seats\" to add students or teachers to your team.","You don't have any builds for this game.":"You don't have any builds for this game.","You don't have any credits available. You can purchase GDevelop credits to continue making AI requests.":"You don't have any credits available. You can purchase GDevelop credits to continue making AI requests.","You don't have any desktop builds for this game.":"You don't have any desktop builds for this game.","You don't have any feedback for this export.":"You don't have any feedback for this export.","You don't have any feedback for this game.":"You don't have any feedback for this game.","You don't have any iOS builds for this game.":"You don't have any iOS builds for this game.","You don't have any previous chat. Ask the AI your first question!":"You don't have any previous chat. Ask the AI your first question!","You don't have any unread feedback for this export.":"You don't have any unread feedback for this export.","You don't have any unread feedback for this game.":"You don't have any unread feedback for this game.","You don't have any web builds for this game.":"You don't have any web builds for this game.","You don't have enough AI credits to continue this conversation.":"You don't have enough AI credits to continue this conversation.","You don't have enough available seats to restore those accounts.":"You don't have enough available seats to restore those accounts.","You don't have enough rights to add a new admin.":"You don't have enough rights to add a new admin.","You don't have enough rights to invite a new student.":"You don't have enough rights to invite a new student.","You don't have enough rights to manage those accounts.":"You don't have enough rights to manage those accounts.","You don't have permissions to add collaborators.":"You don't have permissions to add collaborators.","You don't have permissions to delete this project.":"You don't have permissions to delete this project.","You don't have permissions to save this project. Please choose another location.":"You don't have permissions to save this project. Please choose another location.","You don't have the rights to access the version history of this project. Are you connected with the right account?":"You don't have the rights to access the version history of this project. Are you connected with the right account?","You don't need to add the @ in your username":"You don't need to add the @ in your username","You don't own any pack yet!":"You don't own any pack yet!","You don\u2019t have any feedback about your game. Share your game and start collecting player feedback.":"You don\u2019t have any feedback about your game. Share your game and start collecting player feedback.","You have 0 notifications.":"You have 0 notifications.","You have <0>{remainingBuilds} build remaining \u2014 you have used {usageRatio} in the past 24h.":function(a){return["You have <0>",a("remainingBuilds")," build remaining \u2014 you have used ",a("usageRatio")," in the past 24h."]},"You have <0>{remainingBuilds} build remaining \u2014 you have used {usageRatio} in the past 30 days.":function(a){return["You have <0>",a("remainingBuilds")," build remaining \u2014 you have used ",a("usageRatio")," in the past 30 days."]},"You have <0>{remainingBuilds} builds remaining \u2014 you have used {usageRatio} in the past 24h.":function(a){return["You have <0>",a("remainingBuilds")," builds remaining \u2014 you have used ",a("usageRatio")," in the past 24h."]},"You have <0>{remainingBuilds} builds remaining \u2014 you have used {usageRatio} in the past 30 days.":function(a){return["You have <0>",a("remainingBuilds")," builds remaining \u2014 you have used ",a("usageRatio")," in the past 30 days."]},"You have a build currently running, you can see its progress via the exports button at the bottom of this dialog.":"You have a build currently running, you can see its progress via the exports button at the bottom of this dialog.","You have an active subscription":"You have an active subscription","You have reached the maximum number of games you can register! You can unregister games in your Games Dashboard.":"You have reached the maximum number of games you can register! You can unregister games in your Games Dashboard.","You have reached the maximum number of guest collaborators for your subscription. Ask this user to get a Pro subscription!":"You have reached the maximum number of guest collaborators for your subscription. Ask this user to get a Pro subscription!","You have to wait {0} days before you can reactivate an archived account.":function(a){return["You have to wait ",a("0")," days before you can reactivate an archived account."]},"You have unlocked full access to GDevelop to create without limits!":"You have unlocked full access to GDevelop to create without limits!","You have unsaved changes in your project.":"You have unsaved changes in your project.","You haven't contributed any examples":"You haven't contributed any examples","You haven't contributed any extensions":"You haven't contributed any extensions","You just added an instance to a hidden layer (\"{0}\"). Open the layer panel to make it visible.":function(a){return["You just added an instance to a hidden layer (\"",a("0"),"\"). Open the layer panel to make it visible."]},"You might like":"You might like","You modified this project on the {formattedDate} at {formattedTime}. Do you want to overwrite your changes?":function(a){return["You modified this project on the ",a("formattedDate")," at ",a("formattedTime"),". Do you want to overwrite your changes?"]},"You must be connected to use online export services.":"You must be connected to use online export services.","You must be logged in to invite collaborators.":"You must be logged in to invite collaborators.","You must own a Spine license to publish a game with a Spine object.":"You must own a Spine license to publish a game with a Spine object.","You must re-open the project to continue this chat.":"You must re-open the project to continue this chat.","You must select a key.":"You must select a key.","You must select a valid key. \"{0}\" is not valid.":function(a){return["You must select a valid key. \"",a("0"),"\" is not valid."]},"You must select a valid key. \"{value}\" is not valid.":function(a){return["You must select a valid key. \"",a("value"),"\" is not valid."]},"You must select a valid value. \"{value}\" is not valid.":function(a){return["You must select a valid value. \"",a("value"),"\" is not valid."]},"You must select a value.":"You must select a value.","You must select at least one user to be the author of the game.":"You must select at least one user to be the author of the game.","You must select at least one user to be the owner of the game.":"You must select at least one user to be the owner of the game.","You need a Apple Developer account to create a certificate.":"You need a Apple Developer account to create a certificate.","You need a Apple Developer account to create an API key that will automatically publish your app.":"You need a Apple Developer account to create an API key that will automatically publish your app.","You need to cancel your current subscription before joining a team.":"You need to cancel your current subscription before joining a team.","You need to first save your project to the cloud to invite collaborators.":"You need to first save your project to the cloud to invite collaborators.","You need to login first to see your builds.":"You need to login first to see your builds.","You need to login first to see your game feedbacks.":"You need to login first to see your game feedbacks.","You need to save this project as a cloud project to install premium assets. Please save your project and try again.":"You need to save this project as a cloud project to install premium assets. Please save your project and try again.","You need to save this project as a cloud project to install this asset. Please save your project and try again.":"You need to save this project as a cloud project to install this asset. Please save your project and try again.","You received {0} credits thanks to your subscription":function(a){return["You received ",a("0")," credits thanks to your subscription"]},"You should have received an email containing instructions to reset and set a new password. Once it's done, you can use your new password in GDevelop.":"You should have received an email containing instructions to reset and set a new password. Once it's done, you can use your new password in GDevelop.","You still have {availableCredits} credits you can use for AI requests.":function(a){return["You still have ",a("availableCredits")," credits you can use for AI requests."]},"You still have {percentage}% left on this month's AI usage.":function(a){return["You still have ",a("percentage"),"% left on this month's AI usage."]},"You still have {percentage}% left on this month's AI usage. It resets on {dateString} at {timeString}.":function(a){return["You still have ",a("percentage"),"% left on this month's AI usage. It resets on ",a("dateString")," at ",a("timeString"),"."]},"You still have {percentage}% left on this week's AI usage.":function(a){return["You still have ",a("percentage"),"% left on this week's AI usage."]},"You still have {percentage}% left on this week's AI usage. It resets on {dateString} at {timeString}.":function(a){return["You still have ",a("percentage"),"% left on this week's AI usage. It resets on ",a("dateString")," at ",a("timeString"),"."]},"You still have {percentage}% left on today's AI usage.":function(a){return["You still have ",a("percentage"),"% left on today's AI usage."]},"You still have {percentage}% left on today's AI usage. It resets on {dateString} at {timeString}.":function(a){return["You still have ",a("percentage"),"% left on today's AI usage. It resets on ",a("dateString")," at ",a("timeString"),"."]},"You will get access to special discounts on the GDevelop asset store, as well as weekly stats about your games.":"You will get access to special discounts on the GDevelop asset store, as well as weekly stats about your games.","You will lose all custom collision masks. Do you want to continue?":"You will lose all custom collision masks. Do you want to continue?","You will lose any progress made with the external editor. Do you wish to cancel?":"You will lose any progress made with the external editor. Do you wish to cancel?","You won't see it here anymore, unless you re-activate it from the preferences.":"You won't see it here anymore, unless you re-activate it from the preferences.","You'll convert {0} USD to {1} credits.":function(a){return["You'll convert ",a("0")," USD to ",a("1")," credits."]},"You're about to add 1 asset.":"You're about to add 1 asset.","You're about to add {0} assets.":function(a){return["You're about to add ",a("0")," assets."]},"You're about to cash out {0} USD.":function(a){return["You're about to cash out ",a("0")," USD."]},"You're about to open (or re-open) a project. Click on \"Open the Project\" to continue.":"You're about to open (or re-open) a project. Click on \"Open the Project\" to continue.","You're about to restart this multichapter guided lesson.":"You're about to restart this multichapter guided lesson.","You're awesome!":"You're awesome!","You're deleting a game which:{0} - {1} {2} - {3} {4} If you continue, the game and this project will be deleted.{5} This action is irreversible. Do you want to continue?":function(a){return["You're deleting a game which:",a("0")," - ",a("1")," ",a("2")," - ",a("3")," ",a("4")," If you continue, the game and this project will be deleted.",a("5")," This action is irreversible. Do you want to continue?"]},"You're leaving the game tutorial":"You're leaving the game tutorial","You're now logged out":"You're now logged out","You're trying to save changes made to a previous version of your project. If you continue, it will be used as the new latest version.":"You're trying to save changes made to a previous version of your project. If you continue, it will be used as the new latest version.","You're {missingCredits} credits short.":function(a){return["You're ",a("missingCredits")," credits short."]},"You've been invited to join a team by {inviterEmail}":function(a){return["You've been invited to join a team by ",a("inviterEmail")]},"You've made some changes here. Are you sure you want to discard them and open the behavior events?":"You've made some changes here. Are you sure you want to discard them and open the behavior events?","You've made some changes here. Are you sure you want to discard them and open the function?":"You've made some changes here. Are you sure you want to discard them and open the function?","You've ran out of GDevelop Credits.":"You've ran out of GDevelop Credits.","You've ran out of GDevelop credits to continue this conversation.":"You've ran out of GDevelop credits to continue this conversation.","You've ran out of free AI requests.":"You've ran out of free AI requests.","You've reached the limit of cloud projects you can have. Delete some existing cloud projects of yours before trying again.":"You've reached the limit of cloud projects you can have. Delete some existing cloud projects of yours before trying again.","You've reached your maximum of {0} leaderboards for your game":function(a){return["You've reached your maximum of ",a("0")," leaderboards for your game"]},"You've reached your maximum storage of {maximumCount} cloud projects":function(a){return["You've reached your maximum storage of ",a("maximumCount")," cloud projects"]},"YouTube channel (tutorials and more)":"YouTube channel (tutorials and more)","Your Discord username":"Your Discord username","Your account has been deleted!":"Your account has been deleted!","Your account is upgraded, with the extra exports and online services. If you wish to change later, come back to your profile and choose another plan.":"Your account is upgraded, with the extra exports and online services. If you wish to change later, come back to your profile and choose another plan.","Your browser will now open to enter your payment details.":"Your browser will now open to enter your payment details.","Your computer":"Your computer","Your current subscription plan allows restoring versions from the last {historyRetentionDays} days.<0/>Get a higher plan to access older versions.":function(a){return["Your current subscription plan allows restoring versions from the last ",a("historyRetentionDays")," days.<0/>Get a higher plan to access older versions."]},"Your feedback is valuable to help us improve our premium services. Why are you canceling your subscription?":"Your feedback is valuable to help us improve our premium services. Why are you canceling your subscription?","Your forum account with email {email} will reflect your subscription level. You can press the sync button to update it immediately.":function(a){return["Your forum account with email ",a("email")," will reflect your subscription level. You can press the sync button to update it immediately."]},"Your free trial will expire in {0} hours.":function(a){return["Your free trial will expire in ",a("0")," hours."]},"Your game has some invalid elements, please fix these before continuing:":"Your game has some invalid elements, please fix these before continuing:","Your game is hidden on gd.games":"Your game is hidden on gd.games","Your game is in the \u201CBuild\u201D section or you can restart the tutorial.":"Your game is in the \u201CBuild\u201D section or you can restart the tutorial.","Your game is not published on gd.games":"Your game is not published on gd.games","Your game may not be registered, create one in the leaderboard manager.":"Your game may not be registered, create one in the leaderboard manager.","Your game will be exported and packaged online as a stand-alone game for Windows, Linux and/or macOS.":"Your game will be exported and packaged online as a stand-alone game for Windows, Linux and/or macOS.","Your game won't work if you open the index.html file on your computer. You must upload it to a web hosting platform (Itch.io, Poki, CrazyGames etc...) or a web server to run it.":"Your game won't work if you open the index.html file on your computer. You must upload it to a web hosting platform (Itch.io, Poki, CrazyGames etc...) or a web server to run it.","Your game {0} received a feedback message: \"{1}...\"":function(a){return["Your game ",a("0")," received a feedback message: \"",a("1"),"...\""]},"Your game {0} received {1} feedback messages":function(a){return["Your game ",a("0")," received ",a("1")," feedback messages"]},"Your game {0} was played more than {1} times!":function(a){return["Your game ",a("0")," was played more than ",a("1")," times!"]},"Your latest changes could not be applied to the preview(s) being run. You should start a new preview instead to make sure that all your changes are reflected in the game.":"Your latest changes could not be applied to the preview(s) being run. You should start a new preview instead to make sure that all your changes are reflected in the game.","Your membership helps the GDevelop company maintain servers, build new features and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"Your membership helps the GDevelop company maintain servers, build new features and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.","Your name":"Your name","Your need to first create your account, or login, to upload your own resources.":"Your need to first create your account, or login, to upload your own resources.","Your need to first save your game on GDevelop Cloud to upload your own resources.":"Your need to first save your game on GDevelop Cloud to upload your own resources.","Your new plan is now activated.":"Your new plan is now activated.","Your password must be between 8 and 30 characters long.":"Your password must be between 8 and 30 characters long.","Your plan:":"Your plan:","Your preview is ready! On your mobile or tablet, open your browser and enter in the address bar:":"Your preview is ready! On your mobile or tablet, open your browser and enter in the address bar:","Your project has {0} diagnostic error(s). Please fix them before exporting.":function(a){return["Your project has ",a("0")," diagnostic error(s). Please fix them before exporting."]},"Your project has {0} diagnostic error(s). Please fix them before launching a preview.":function(a){return["Your project has ",a("0")," diagnostic error(s). Please fix them before launching a preview."]},"Your project is saved in the same folder as the application. This folder will be deleted when the application is updated. Please choose another location if you don't want to lose your project.":"Your project is saved in the same folder as the application. This folder will be deleted when the application is updated. Please choose another location if you don't want to lose your project.","Your project name has changed, this will also save the whole project, continue?":"Your project name has changed, this will also save the whole project, continue?","Your purchase has been processed!":"Your purchase has been processed!","Your search and filters did not return any result.":"Your search and filters did not return any result.","Your search and filters did not return any result.<0/>If you need support for a specific language, please contact us.":"Your search and filters did not return any result.<0/>If you need support for a specific language, please contact us.","Your subscription has been canceled":"Your subscription has been canceled","Your subscription is set to be cancelled at the end of the current billing period. You will retain access to the plan benefits until then.":"Your subscription is set to be cancelled at the end of the current billing period. You will retain access to the plan benefits until then.","Your team does not have enough seats for a new admin.":"Your team does not have enough seats for a new admin.","Your team does not have enough seats for a new student.":"Your team does not have enough seats for a new student.","Your {productType} has been activated!":function(a){return["Your ",a("productType")," has been activated!"]},"You\u2019re about to permanently delete your GDevelop account username@mail.com. You will no longer be able to log into the app with this email address.":"You\u2019re about to permanently delete your GDevelop account username@mail.com. You will no longer be able to log into the app with this email address.","You\u2019ve reached the maximum amount of available seats. Increase the number of seats on your subscription to invite more students and collaborators.":"You\u2019ve reached the maximum amount of available seats. Increase the number of seats on your subscription to invite more students and collaborators.","Z":"Z","Z Order":"Z Order","Z Order of objects created from events":"Z Order of objects created from events","Z max":"Z max","Z max bound":"Z max bound","Z max bound should be greater than Z min bound":"Z max bound should be greater than Z min bound","Z min":"Z min","Z min bound":"Z min bound","Z min bound should be smaller than Z max bound":"Z min bound should be smaller than Z max bound","Z offset (in pixels)":"Z offset (in pixels)","Zoom In":"Zoom In","Zoom Out":"Zoom Out","Zoom in":"Zoom in","Zoom in (you can also use Ctrl + Mouse wheel)":"Zoom in (you can also use Ctrl + Mouse wheel)","Zoom out":"Zoom out","Zoom out (you can also use Ctrl + Mouse wheel)":"Zoom out (you can also use Ctrl + Mouse wheel)","Zoom to fit content":"Zoom to fit content","Zoom to fit selection":"Zoom to fit selection","Zoom to initial position":"Zoom to initial position","[Follow GDevelop](https://tiktok.com/@gdevelop) and enter your TikTok username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[Follow GDevelop](https://tiktok.com/@gdevelop) and enter your TikTok username here to get ",a("rewardValueInCredits")," free credits as a thank you!"]},"[Follow GDevelop](https://twitter.com/GDevelopApp) and enter your Twitter username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[Follow GDevelop](https://twitter.com/GDevelopApp) and enter your Twitter username here to get ",a("rewardValueInCredits")," free credits as a thank you!"]},"[Star the GDevelop repository](https://github.com/4ian/GDevelop) and add your GitHub username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[Star the GDevelop repository](https://github.com/4ian/GDevelop) and add your GitHub username here to get ",a("rewardValueInCredits")," free credits as a thank you!"]},"[Subscribe to GDevelop](https://youtube.com/@gdevelopapp) and enter your YouTube username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[Subscribe to GDevelop](https://youtube.com/@gdevelopapp) and enter your YouTube username here to get ",a("rewardValueInCredits")," free credits as a thank you!"]},"a permanent":"a permanent","add":"add","an instant":"an instant","ascending":"ascending","audios":"audios","bitmap fonts":"bitmap fonts","by":"by","contains":"contains","date,date":"date,date","date,date,date0":"date,date,date0","day,date,date0":"day,date,date0","delete":"delete","descending":"descending","divide by":"divide by","ends with":"ends with","false":"false","fonts":"fonts","gd.games":"gd.games","iOS":"iOS","iOS & Android (manual)":"iOS & Android (manual)","iOS (iPhone and iPad) icons":"iOS (iPhone and iPad) icons","iOS Build":"iOS Build","iOS builds":"iOS builds","in {elementsWithWords}":function(a){return["in ",a("elementsWithWords")]},"leaderboard.":"leaderboard.","leaderboards.":"leaderboards.","limit:":"limit:","macOS (zip file)":"macOS (zip file)","macOS (zip)":"macOS (zip)","min":"min","minutes":"minutes","multiply by":"multiply by","no":"no","no limit":"no limit","or":"or","order by distance to another object":"order by distance to another object","order by highest ammo":"order by highest ammo","order by highest health":"order by highest health","order by highest variable":"order by highest variable","order by physics speed":"order by physics speed","ordered by":"ordered by","panel sprites":"panel sprites","particle emitters":"particle emitters","redemptionCodeExpirationDate,date":"redemptionCodeExpirationDate,date","scene center":"scene center","set to":"set to","set to false":"set to false","set to true":"set to true","sprites":"sprites","starts with":"starts with","subtract":"subtract","the events sheet":"the events sheet","the home page":"the home page","the scene editor":"the scene editor","tile maps":"tile maps","tiled sprites":"tiled sprites","toggle":"toggle","true":"true","username":"username","yes":"yes","{0}":function(a){return[a("0")]},"{0} % of players with more than {1} minutes":function(a){return[a("0")," % of players with more than ",a("1")," minutes"]},"{0} (default)":function(a){return[a("0")," (default)"]},"{0} ({1})":function(a){return[a("0")," (",a("1"),")"]},"{0} Asset pack":function(a){return[a("0")," Asset pack"]},"{0} Asset packs":function(a){return[a("0")," Asset packs"]},"{0} Assets":function(a){return[a("0")," Assets"]},"{0} Course":function(a){return[a("0")," Course"]},"{0} Courses":function(a){return[a("0")," Courses"]},"{0} Game template":function(a){return[a("0")," Game template"]},"{0} Game templates":function(a){return[a("0")," Game templates"]},"{0} OFF":function(a){return[a("0")," OFF"]},"{0} builds":function(a){return[a("0")," builds"]},"{0} chapters":function(a){return[a("0")," chapters"]},"{0} children":function(a){return[a("0")," children"]},"{0} credits":function(a){return[a("0")," credits"]},"{0} credits available":function(a){return[a("0")," credits available"]},"{0} exports created":function(a){return[a("0")," exports created"]},"{0} exports ongoing...":function(a){return[a("0")," exports ongoing..."]},"{0} hours of material":function(a){return[a("0")," hours of material"]},"{0} invited you to join a team.":function(a){return[a("0")," invited you to join a team."]},"{0} is included in the bundle {1}.":function(a){return[a("0")," is included in the bundle ",a("1"),"."]},"{0} is included in this bundle for {1} !":function(a){return[a("0")," is included in this bundle for ",a("1")," !"]},"{0} minutes per player":function(a){return[a("0")," minutes per player"]},"{0} new feedbacks":function(a){return[a("0")," new feedbacks"]},"{0} of {1} completed":function(a){return[a("0")," of ",a("1")," completed"]},"{0} of {1} subscription":function(a){return[a("0")," of ",a("1")," subscription"]},"{0} options":function(a){return[a("0")," options"]},"{0} part":function(a){return[a("0")," part"]},"{0} players with more than {1} minutes":function(a){return[a("0")," players with more than ",a("1")," minutes"]},"{0} projects":function(a){return[a("0")," projects"]},"{0} properties":function(a){return[a("0")," properties"]},"{0} reviews":function(a){return[a("0")," reviews"]},"{0} sessions":function(a){return[a("0")," sessions"]},"{0} subscription":function(a){return[a("0")," subscription"]},"{0} use left":function(a){return[a("0")," use left"]},"{0} uses left":function(a){return[a("0")," uses left"]},"{0} variables":function(a){return[a("0")," variables"]},"{0} weeks":function(a){return[a("0")," weeks"]},"{0} will be added to your account {1}.":function(a){return[a("0")," will be added to your account ",a("1"),"."]},"{0}% bounce rate":function(a){return[a("0"),"% bounce rate"]},"{0}'s projects":function(a){return[a("0"),"'s projects"]},"{0}+ (Available with a subscription)":function(a){return[a("0"),"+ (Available with a subscription)"]},"{0}/{1} achievements":function(a){return[a("0"),"/",a("1")," achievements"]},"{0}Are you sure you want to remove this extension? This can't be undone.":function(a){return[a("0"),"Are you sure you want to remove this extension? This can't be undone."]},"{daysAgo} days ago":function(a){return[a("daysAgo")," days ago"]},"{durationInDays} days":function(a){return[a("durationInDays")," days"]},"{durationInMinutes} min.":function(a){return[a("durationInMinutes")," min."]},"{durationInMinutes} minutes":function(a){return[a("durationInMinutes")," minutes"]},"{email} has already accepted the invitation and joined the team.":function(a){return[a("email")," has already accepted the invitation and joined the team."]},"{email} will be removed from the team.":function(a){return[a("email")," will be removed from the team."]},"{fullName} ({username})":function(a){return[a("fullName")," (",a("username"),")"]},"{functionNode} action from {extensionNode} extension is missing.":function(a){return[a("functionNode")," action from ",a("extensionNode")," extension is missing."]},"{functionNode} action on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return[a("functionNode")," action on behavior ",a("behaviorNode")," from ",a("extensionNode")," extension is missing."]},"{functionNode} condition from {extensionNode} extension is missing.":function(a){return[a("functionNode")," condition from ",a("extensionNode")," extension is missing."]},"{functionNode} condition on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return[a("functionNode")," condition on behavior ",a("behaviorNode")," from ",a("extensionNode")," extension is missing."]},"{gameCount} of your games were played more than {0} times in total!":function(a){return[a("gameCount")," of your games were played more than ",a("0")," times in total!"]},"{hoursAgo} hours ago":function(a){return[a("hoursAgo")," hours ago"]},"{includedCreditsAmount} credits":function(a){return[a("includedCreditsAmount")," credits"]},"{minutesAgo} minutes ago":function(a){return[a("minutesAgo")," minutes ago"]},"{numberOfAssetPacks} Asset Pack":function(a){return[a("numberOfAssetPacks")," Asset Pack"]},"{numberOfAssetPacks} Asset Packs":function(a){return[a("numberOfAssetPacks")," Asset Packs"]},"{numberOfCourses} Course":function(a){return[a("numberOfCourses")," Course"]},"{numberOfCourses} Courses":function(a){return[a("numberOfCourses")," Courses"]},"{numberOfGameTemplates} Game Template":function(a){return[a("numberOfGameTemplates")," Game Template"]},"{numberOfGameTemplates} Game Templates":function(a){return[a("numberOfGameTemplates")," Game Templates"]},"{objectName} variables":function(a){return[a("objectName")," variables"]},"{percentage}% left":function(a){return[a("percentage"),"% left"]},"{periodLabel}, <0>{0} <1>{1}":function(a){return[a("periodLabel"),", <0>",a("0")," <1>",a("1"),""]},"{periodLabel}, <0>{0} <1>{1} per seat":function(a){return[a("periodLabel"),", <0>",a("0")," <1>",a("1")," per seat"]},"{periodLabel}, {0}":function(a){return[a("periodLabel"),", ",a("0")]},"{periodLabel}, {0} per seat":function(a){return[a("periodLabel"),", ",a("0")," per seat"]},"{planCreditsAmount} credits":function(a){return[a("planCreditsAmount")," credits"]},"{price} every {0} months":function(a){return[a("price")," every ",a("0")," months"]},"{price} every {0} weeks":function(a){return[a("price")," every ",a("0")," weeks"]},"{price} every {0} years":function(a){return[a("price")," every ",a("0")," years"]},"{price} per month":function(a){return[a("price")," per month"]},"{price} per seat, each month":function(a){return[a("price")," per seat, each month"]},"{price} per seat, each week":function(a){return[a("price")," per seat, each week"]},"{price} per seat, each year":function(a){return[a("price")," per seat, each year"]},"{price} per seat, every {0} months":function(a){return[a("price")," per seat, every ",a("0")," months"]},"{price} per seat, every {0} weeks":function(a){return[a("price")," per seat, every ",a("0")," weeks"]},"{price} per seat, every {0} years":function(a){return[a("price")," per seat, every ",a("0")," years"]},"{price} per week":function(a){return[a("price")," per week"]},"{price} per year":function(a){return[a("price")," per year"]},"{resultsCount} results":function(a){return[a("resultsCount")," results"]},"{roundedMonths} months":function(a){return[a("roundedMonths")," months"]},"{smartObjectsCount} smart objects":function(a){return[a("smartObjectsCount")," smart objects"]},"{totalCredits} Credits":function(a){return[a("totalCredits")," Credits"]},"{totalMatches} matches":function(a){return[a("totalMatches")," matches"]},"~{0} minutes.":function(a){return["~",a("0")," minutes."]},"\u201CPlayer feedback\u201D is off, turn it on to start collecting feedback on your game.":"\u201CPlayer feedback\u201D is off, turn it on to start collecting feedback on your game.","\u201CStart\u201D screen":"\u201CStart\u201D screen","\u201CYou win\u201D message":"\u201CYou win\u201D message","\u2260 (not equal to)":"\u2260 (not equal to)","\u2264 (less or equal to)":"\u2264 (less or equal to)","\u2265 (greater or equal to)":"\u2265 (greater or equal to)","\u274C Game configuration could not be saved, please try again later.":"\u274C Game configuration could not be saved, please try again later.","\uD83C\uDF89 Congrats on getting the {translatedName} featuring for your game {0}!":function(a){return["\uD83C\uDF89 Congrats on getting the ",a("translatedName")," featuring for your game ",a("0"),"!"]},"\uD83C\uDF89 You can now follow your new course!":"\uD83C\uDF89 You can now follow your new course!","\uD83C\uDF89 You can now use your assets!":"\uD83C\uDF89 You can now use your assets!","\uD83C\uDF89 You can now use your credits!":"\uD83C\uDF89 You can now use your credits!","\uD83C\uDF89 You can now use your template!":"\uD83C\uDF89 You can now use your template!","\uD83C\uDF89 Your request has been saved. Lay back, we'll contact you shortly.":"\uD83C\uDF89 Your request has been saved. Lay back, we'll contact you shortly.","\uD83D\uDC4B Good to see you {username}!":function(a){return["\uD83D\uDC4B Good to see you ",a("username"),"!"]},"\uD83D\uDC4B Good to see you!":"\uD83D\uDC4B Good to see you!","\uD83D\uDC4B Welcome to GDevelop {username}!":function(a){return["\uD83D\uDC4B Welcome to GDevelop ",a("username"),"!"]},"\uD83D\uDC4B Welcome to GDevelop!":"\uD83D\uDC4B Welcome to GDevelop!"}}; \ No newline at end of file +/* eslint-disable */module.exports={"languageData":{"plurals":function(n,ord){var s=String(n).split("."),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?"one":n10==2&&n100!=12?"two":n10==3&&n100!=13?"few":"other";return n==1&&v0?"one":"other"}},"messages":{"\"{0}\" will be the new build of this game published on gd.games. Continue?":function(a){return["\"",a("0"),"\" will be the new build of this game published on gd.games. Continue?"]},"\"{0}\" will be unpublished on gd.games. Continue?":function(a){return["\"",a("0"),"\" will be unpublished on gd.games. Continue?"]},"% of parent":"% of parent","% of total":"% of total","(Events)":"(Events)","(Object)":"(Object)","(already installed in the project)":"(already installed in the project)","(default order)":"(default order)","(deleted)":"(deleted)","(install it from the Project Manager)":"(install it from the Project Manager)","(or paste actions)":"(or paste actions)","(or paste conditions)":"(or paste conditions)","(yet!)":"(yet!)","* (multiply by)":"* (multiply by)","+ (add)":"+ (add)","+ {0} tag(s)":function(a){return["+ ",a("0")," tag(s)"]},", objects /*{parameterObjects}*/":function(a){return[", objects /*",a("parameterObjects"),"*/"]},"- (subtract)":"- (subtract)","/ (divide by)":"/ (divide by)","/* Click here to choose objects to pass to JavaScript */":"/* Click here to choose objects to pass to JavaScript */","0,date":"0,date","0,date,date0":"0,date,date0","0,number,number0":"0,number,number0","1 child":"1 child","1 day ago":"1 day ago","1 hour ago":"1 hour ago","1 match":"1 match","1 minute":"1 minute","1 month":"1 month","1 new feedback":"1 new feedback","1 review":"1 review","1) Create a Certificate Signing Request and a Certificate":"1) Create a Certificate Signing Request and a Certificate","100% (Default)":"100% (Default)","100+ exports created":"100+ exports created","10th":"10th","1st":"1st","2 previews in 2 windows":"2 previews in 2 windows","2) Upload the Certificate generated by Apple":"2) Upload the Certificate generated by Apple","200%":"200%","2D effects":"2D effects","2D object":"2D object","2D objects can't be edited when in 3D mode":"2D objects can't be edited when in 3D mode","2nd":"2nd","3 previews in 3 windows":"3 previews in 3 windows","3) Upload one or more Mobile Provisioning Profiles":"3) Upload one or more Mobile Provisioning Profiles","3-part tutorial to creating and publishing a game from scratch.":"3-part tutorial to creating and publishing a game from scratch.","300%":"300%","3D effects":"3D effects","3D model":"3D model","3D models":"3D models","3D object":"3D object","3D platforms":"3D platforms","3D settings":"3D settings","3D, real-time editor (new)":"3D, real-time editor (new)","3rd":"3rd","4 previews in 4 windows":"4 previews in 4 windows","400%":"400%","4th":"4th","500%":"500%","5th":"5th","600%":"600%","6th":"6th","700%":"700%","7th":"7th","800%":"800%","8th":"8th","9th":"9th",":":":","< (less than)":"< (less than)","<0>For every child in<1><2/>{0}, store the child in variable<3><4/>{1}, the child name in<5><6/>{2}and do:":function(a){return["<0>For every child in<1><2/>",a("0"),", store the child in variable<3><4/>",a("1"),", the child name in<5><6/>",a("2"),"and do:"]},"<0>Share your game and start collecting data from your players to better understand them.":"<0>Share your game and start collecting data from your players to better understand them.","<0>{0} set to {1}.":function(a){return["<0>",a("0")," set to ",a("1"),"."]},"":"","":"","":"",""," (optional)","","= (equal to)":"= (equal to)","= (set to)":"= (set to)","> (greater than)":"> (greater than)","A condition that can be used in other events sheet. You can define the condition parameters: objects, texts, numbers, layers, etc...":"A condition that can be used in other events sheet. You can define the condition parameters: objects, texts, numbers, layers, etc...","A condition that can be used on objects with the behavior. You can define the condition parameters: objects, texts, numbers, layers, etc...":"A condition that can be used on objects with the behavior. You can define the condition parameters: objects, texts, numbers, layers, etc...","A condition that can be used on the object. You can define the condition parameters: objects, texts, numbers, layers, etc...":"A condition that can be used on the object. You can define the condition parameters: objects, texts, numbers, layers, etc...","A critical error occurred in the {componentTitle}.":function(a){return["A critical error occurred in the ",a("componentTitle"),"."]},"A functioning save has been found!":"A functioning save has been found!","A game to publish":"A game to publish","A global object with this name already exists. Please change the group name before setting it as a global group":"A global object with this name already exists. Please change the group name before setting it as a global group","A global object with this name already exists. Please change the object name before setting it as a global object":"A global object with this name already exists. Please change the object name before setting it as a global object","A lighting layer was created. Lights will be placed on it automatically. You can change the ambient light color in the properties of this layer":"A lighting layer was created. Lights will be placed on it automatically. You can change the ambient light color in the properties of this layer","A link or file will be created but the game will not be registered.":"A link or file will be created but the game will not be registered.","A new physics engine (Physics Engine 2.0) is now available. You should prefer using it for new game. For existing games, note that the two behaviors are not compatible, so you should only use one of them with your objects.":"A new physics engine (Physics Engine 2.0) is now available. You should prefer using it for new game. For existing games, note that the two behaviors are not compatible, so you should only use one of them with your objects.","A new secure window will open to complete the purchase.":"A new secure window will open to complete the purchase.","A new update is available!":"A new update is available!","A new update is being downloaded...":"A new update is being downloaded...","A new update will be installed after you quit and relaunch GDevelop":"A new update will be installed after you quit and relaunch GDevelop","A new window":"A new window","A scale under 1 on a Bitmap text object can downgrade the quality text, prefer to remake a bitmap font smaller in the external bmFont editor.":"A scale under 1 on a Bitmap text object can downgrade the quality text, prefer to remake a bitmap font smaller in the external bmFont editor.","A student account cannot be an admin of your team.":"A student account cannot be an admin of your team.","A temporary image to help you visualize the shape/polygon":"A temporary image to help you visualize the shape/polygon","AI Chat History":"AI Chat History","API Issuer ID: {0}":function(a){return["API Issuer ID: ",a("0")]},"API Issuer given by Apple":"API Issuer given by Apple","API key given by Apple":"API key given by Apple","API key: {0}":function(a){return["API key: ",a("0")]},"APK (for testing on device or sharing outside Google Play)":"APK (for testing on device or sharing outside Google Play)","Abandon":"Abandon","Abort":"Abort","About GDevelop":"About GDevelop","About dialog":"About dialog","About education plan":"About education plan","Accept":"Accept","Access GDevelop’s resources for teaching game development and promote careers in technology.":"Access GDevelop’s resources for teaching game development and promote careers in technology.","Access project history, name saves, restore older versions.<0/>Get a subscription to enable this feature.":"Access project history, name saves, restore older versions.<0/>Get a subscription to enable this feature.","Access public profile":"Access public profile","Achievements":"Achievements","Action":"Action","Action with operator":"Action with operator","Actions":"Actions","Activate":"Activate","Activate Later":"Activate Later","Activate Now":"Activate Now","Activate my subscription":"Activate my subscription","Activate your subscription code":"Activate your subscription code","Activate {productName}":function(a){return["Activate ",a("productName")]},"Activated":"Activated","Activating...":"Activating...","Active":"Active","Active until {0}":function(a){return["Active until ",a("0")]},"Active, we will get in touch to get the campaign up!":"Active, we will get in touch to get the campaign up!","Ad revenue sharing off":"Ad revenue sharing off","Ad revenue sharing on":"Ad revenue sharing on","Adapt automatically":"Adapt automatically","Adapt collision mask?":"Adapt collision mask?","Adapt events in scene <0>{scene_name} (\"{placementHint}\").":function(a){return["Adapt events in scene <0>",a("scene_name")," (\"",a("placementHint"),"\")."]},"Add":"Add","Add 2D lighting layer":"Add 2D lighting layer","Add <0>{object_name} to scene <1>{scene_name}.":function(a){return["Add <0>",a("object_name")," to scene <1>",a("scene_name"),"."]},"Add Ordering":"Add Ordering","Add a 2D effect":"Add a 2D effect","Add a 3D effect":"Add a 3D effect","Add a Long Description":"Add a Long Description","Add a New Extension":"Add a New Extension","Add a behavior":"Add a behavior","Add a certificate/profile first":"Add a certificate/profile first","Add a collaborator":"Add a collaborator","Add a comment":"Add a comment","Add a folder":"Add a folder","Add a function":"Add a function","Add a health bar for handle damage.":"Add a health bar for handle damage.","Add a health bar to this jumping character, losing health when hitting spikes.":"Add a health bar to this jumping character, losing health when hitting spikes.","Add a layer":"Add a layer","Add a link to your donation page. It will be displayed on your gd.games profile and game pages.":"Add a link to your donation page. It will be displayed on your gd.games profile and game pages.","Add a local variable":"Add a local variable","Add a local variable to the selected event":"Add a local variable to the selected event","Add a new behavior to the object":"Add a new behavior to the object","Add a new empty event":"Add a new empty event","Add a new event":"Add a new event","Add a new folder":"Add a new folder","Add a new function":"Add a new function","Add a new group":"Add a new group","Add a new group...":"Add a new group...","Add a new object":"Add a new object","Add a new option":"Add a new option","Add a new property":"Add a new property","Add a parameter":"Add a parameter","Add a parameter below":"Add a parameter below","Add a point":"Add a point","Add a property":"Add a property","Add a scene":"Add a scene","Add a score and display it on the screen":"Add a score and display it on the screen","Add a sprite":"Add a sprite","Add a sub-condition":"Add a sub-condition","Add a sub-event to the selected event":"Add a sub-event to the selected event","Add a time attack mode, where you have to reach the end as fast as possible.":"Add a time attack mode, where you have to reach the end as fast as possible.","Add a time attack mode.":"Add a time attack mode.","Add a variable":"Add a variable","Add a vertex":"Add a vertex","Add action":"Add action","Add again":"Add again","Add an Auth Key first":"Add an Auth Key first","Add an animation":"Add an animation","Add an event":"Add an event","Add an external layout":"Add an external layout","Add an object":"Add an object","Add any object variable to the group":"Add any object variable to the group","Add asset":"Add asset","Add characters and objects to the scene.":"Add characters and objects to the scene.","Add child":"Add child","Add collaborator":"Add collaborator","Add collision mask":"Add collision mask","Add condition":"Add condition","Add external events":"Add external events","Add instance to the scene":"Add instance to the scene","Add leaderboards to your online Game":"Add leaderboards to your online Game","Add new":"Add new","Add object":"Add object","Add or edit":"Add or edit","Add parameter...":"Add parameter...","Add personality and publish your game.":"Add personality and publish your game.","Add personality to your game and publish it online.":"Add personality to your game and publish it online.","Add player logins and a leaderboard.":"Add player logins and a leaderboard.","Add player logins to your game and add a leaderboard.":"Add player logins to your game and add a leaderboard.","Add solid rocks that falls from the sky at a random position around the player every 0.5 seconds":"Add solid rocks that falls from the sky at a random position around the player every 0.5 seconds","Add the assets":"Add the assets","Add these assets to my scene":"Add these assets to my scene","Add these assets to the project":"Add these assets to the project","Add this asset to my scene":"Add this asset to my scene","Add this asset to the project":"Add this asset to the project","Add to project":"Add to project","Add to the scene":"Add to the scene","Add variable":"Add variable","Add variable...":"Add variable...","Add your Discord username to get a role on the GDevelop Discord or access to a dedicated channel if you have a Gold or Pro subscription! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"Add your Discord username to get a role on the GDevelop Discord or access to a dedicated channel if you have a Gold or Pro subscription! Join the [GDevelop Discord](https://discord.gg/gdevelop).","Add your Discord username to get a special role on the GDevelop Discord! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"Add your Discord username to get a special role on the GDevelop Discord! Join the [GDevelop Discord](https://discord.gg/gdevelop).","Add your Discord username to get access to a dedicated channel! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"Add your Discord username to get access to a dedicated channel! Join the [GDevelop Discord](https://discord.gg/gdevelop).","Add your first animation":"Add your first animation","Add your first behavior":"Add your first behavior","Add your first characters to the scene and throw your first objects.":"Add your first characters to the scene and throw your first objects.","Add your first effect":"Add your first effect","Add your first event":"Add your first event","Add your first global variable":"Add your first global variable","Add your first instance variable":"Add your first instance variable","Add your first object group variable":"Add your first object group variable","Add your first object variable":"Add your first object variable","Add your first parameter":"Add your first parameter","Add your first property":"Add your first property","Add your first scene variable":"Add your first scene variable","Add {behaviorName} (<0>{behaviorTypeLabel}) behavior to <1>{object_name} in scene <2>{scene_name}.":function(a){return["Add ",a("behaviorName")," (<0>",a("behaviorTypeLabel"),") behavior to <1>",a("object_name")," in scene <2>",a("scene_name"),"."]},"Add...":"Add...","Adding...":"Adding...","Additional properties will appear here when you add behaviors to objects, such as the 2D or 3D Physics Engine.":"Additional properties will appear here when you add behaviors to objects, such as the 2D or 3D Physics Engine.","Additive rendering":"Additive rendering","Adjust height to fill screen (extend or crop)":"Adjust height to fill screen (extend or crop)","Adjust width to fill screen (extend or crop)":"Adjust width to fill screen (extend or crop)","Ads":"Ads","Advanced":"Advanced","Advanced course":"Advanced course","Advanced options":"Advanced options","Advanced properties":"Advanced properties","Advanced settings":"Advanced settings","Adventure":"Adventure","After watching the video, use this template to complete the following tasks.":"After watching the video, use this template to complete the following tasks.","Alive":"Alive","All":"All","All asset packs":"All asset packs","All behaviors being directly referenced in the events:":"All behaviors being directly referenced in the events:","All builds":"All builds","All categories":"All categories","All current entries will be deleted, are you sure you want to reset this leaderboard? This can't be undone.":"All current entries will be deleted, are you sure you want to reset this leaderboard? This can't be undone.","All entries":"All entries","All entries are displayed.":"All entries are displayed.","All exports":"All exports","All feedbacks processed":"All feedbacks processed","All game templates":"All game templates","All objects potentially used in events: {0}":function(a){return["All objects potentially used in events: ",a("0")]},"All the entries of {0} will be deleted too. This can't be undone.":function(a){return["All the entries of ",a("0")," will be deleted too. This can't be undone."]},"All your changes will be lost. Are you sure you want to cancel?":"All your changes will be lost. Are you sure you want to cancel?","All your games were played more than {0} times in total!":function(a){return["All your games were played more than ",a("0")," times in total!"]},"Allow players to join after the game has started":"Allow players to join after the game has started","Allow this project to run npm scripts?":"Allow this project to run npm scripts?","Allow to display advertisements on the game page on gd.games.":"Allow to display advertisements on the game page on gd.games.","Alpha":"Alpha","Alphabet":"Alphabet","Already a member?":"Already a member?","Already added":"Already added","Already cancelled":"Already cancelled","Already in project":"Already in project","Already installed":"Already installed","Alright, here's my approach:":"Alright, here's my approach:","Always":"Always","Always display the preview window on top of the editor":"Always display the preview window on top of the editor","Always preload at startup":"Always preload at startup","Always visible":"Always visible","Ambient light color":"Ambient light color","An action that can be used in other events sheet. You can define the action parameters: objects, texts, numbers, layers, etc...":"An action that can be used in other events sheet. You can define the action parameters: objects, texts, numbers, layers, etc...","An action that can be used on objects with the behavior. You can define the action parameters: objects, texts, numbers, layers, etc...":"An action that can be used on objects with the behavior. You can define the action parameters: objects, texts, numbers, layers, etc...","An action that can be used on the object. You can define the action parameters: objects, texts, numbers, layers, etc...":"An action that can be used on the object. You can define the action parameters: objects, texts, numbers, layers, etc...","An error happened":"An error happened","An error happened when retrieving the game's configuration. Please check your internet connection or try again later.":"An error happened when retrieving the game's configuration. Please check your internet connection or try again later.","An error happened when sending your request, please try again.":"An error happened when sending your request, please try again.","An error happened while cashing out. Verify your internet connection or try again later.":"An error happened while cashing out. Verify your internet connection or try again later.","An error happened while loading the certificates.":"An error happened while loading the certificates.","An error happened while loading this extension. Please check that it is a proper extension file and compatible with this version of GDevelop":"An error happened while loading this extension. Please check that it is a proper extension file and compatible with this version of GDevelop","An error happened while purchasing this product. Verify your internet connection or try again later.":"An error happened while purchasing this product. Verify your internet connection or try again later.","An error happened while registering the game. Verify your internet connection or retry later.":"An error happened while registering the game. Verify your internet connection or retry later.","An error happened while removing the collaborator. Verify your internet connection or retry later.":"An error happened while removing the collaborator. Verify your internet connection or retry later.","An error happened while transferring your credits. Verify your internet connection or try again later.":"An error happened while transferring your credits. Verify your internet connection or try again later.","An error happened while unregistering the game. Verify your internet connection or retry later.":"An error happened while unregistering the game. Verify your internet connection or retry later.","An error has occurred during functions generation. If GDevelop is installed, verify that nothing is preventing GDevelop from writing on disk. If you're running GDevelop online, verify your internet connection and refresh functions from the Project Manager.":"An error has occurred during functions generation. If GDevelop is installed, verify that nothing is preventing GDevelop from writing on disk. If you're running GDevelop online, verify your internet connection and refresh functions from the Project Manager.","An error has occurred in functions. Click to reload them.":"An error has occurred in functions. Click to reload them.","An error occured while storing the auth key.":"An error occured while storing the auth key.","An error occured while storing the provisioning profile.":"An error occured while storing the provisioning profile.","An error occurred in the {componentTitle}.":function(a){return["An error occurred in the ",a("componentTitle"),"."]},"An error occurred when creating a new leaderboard, please close the dialog, come back and try again.":"An error occurred when creating a new leaderboard, please close the dialog, come back and try again.","An error occurred when deleting the entry, please try again.":"An error occurred when deleting the entry, please try again.","An error occurred when deleting the leaderboard, please close the dialog, come back and try again.":"An error occurred when deleting the leaderboard, please close the dialog, come back and try again.","An error occurred when deleting the project. Please try again later.":"An error occurred when deleting the project. Please try again later.","An error occurred when downloading the tutorials.":"An error occurred when downloading the tutorials.","An error occurred when fetching the entries of the leaderboard, please try again.":"An error occurred when fetching the entries of the leaderboard, please try again.","An error occurred when fetching the leaderboards, please close the dialog and reopen it.":"An error occurred when fetching the leaderboards, please close the dialog and reopen it.","An error occurred when fetching the store content. Please try again later.":"An error occurred when fetching the store content. Please try again later.","An error occurred when opening or saving the project. Try again later or choose another location to save the project to.":"An error occurred when opening or saving the project. Try again later or choose another location to save the project to.","An error occurred when opening the project. Check that your internet connection is working and that your browser allows the use of cookies.":"An error occurred when opening the project. Check that your internet connection is working and that your browser allows the use of cookies.","An error occurred when resetting the leaderboard, please close the dialog, come back and try again.":"An error occurred when resetting the leaderboard, please close the dialog, come back and try again.","An error occurred when retrieving leaderboards, please try again later.":"An error occurred when retrieving leaderboards, please try again later.","An error occurred when saving the project, please verify your internet connection or try again later.":"An error occurred when saving the project, please verify your internet connection or try again later.","An error occurred when saving the project. Please try again by choosing another location.":"An error occurred when saving the project. Please try again by choosing another location.","An error occurred when saving the project. Please try again later.":"An error occurred when saving the project. Please try again later.","An error occurred when sending the form, please verify your internet connection and try again later.":"An error occurred when sending the form, please verify your internet connection and try again later.","An error occurred when setting the leaderboard as default, please close the dialog, come back and try again.":"An error occurred when setting the leaderboard as default, please close the dialog, come back and try again.","An error occurred when updating the appearance of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the appearance of the leaderboard, please close the dialog, come back and try again.","An error occurred when updating the display choice of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the display choice of the leaderboard, please close the dialog, come back and try again.","An error occurred when updating the name of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the name of the leaderboard, please close the dialog, come back and try again.","An error occurred when updating the sort direction of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the sort direction of the leaderboard, please close the dialog, come back and try again.","An error occurred when updating the visibility of the leaderboard, please close the dialog, come back and try again.":"An error occurred when updating the visibility of the leaderboard, please close the dialog, come back and try again.","An error occurred while accepting the invitation. Please try again later.":"An error occurred while accepting the invitation. Please try again later.","An error occurred while activating your purchase. Please contact support if the problem persists.":"An error occurred while activating your purchase. Please contact support if the problem persists.","An error occurred while changing the password. Please try again later.":"An error occurred while changing the password. Please try again later.","An error occurred while creating the accounts.":"An error occurred while creating the accounts.","An error occurred while creating the group. Please try again later.":"An error occurred while creating the group. Please try again later.","An error occurred while editing the student. Please try again.":"An error occurred while editing the student. Please try again.","An error occurred while exporting your game. Verify your internet connection and try again.":"An error occurred while exporting your game. Verify your internet connection and try again.","An error occurred while fetching the project version, try again later.":"An error occurred while fetching the project version, try again later.","An error occurred while generating some icons. Verify that the image is valid and try again.":"An error occurred while generating some icons. Verify that the image is valid and try again.","An error occurred while generating the certificate.":"An error occurred while generating the certificate.","An error occurred while loading audio resources.":"An error occurred while loading audio resources.","An error occurred while loading fonts.":"An error occurred while loading fonts.","An error occurred while loading your AI requests.":"An error occurred while loading your AI requests.","An error occurred while loading your builds. Verify your internet connection and try again.":"An error occurred while loading your builds. Verify your internet connection and try again.","An error occurred while renaming the group name. Please try again later.":"An error occurred while renaming the group name. Please try again later.","An error occurred while restoring the project version: {0}":function(a){return["An error occurred while restoring the project version: ",a("0")]},"An error occurred while retrieving feedbacks for this game.":"An error occurred while retrieving feedbacks for this game.","An error occurred while trying to recover your project last versions. Please try again later.":"An error occurred while trying to recover your project last versions. Please try again later.","An error occurred, please try again later.":"An error occurred, please try again later.","An error occurred.":"An error occurred.","An error occurred. Please try again.":"An error occurred. Please try again.","An expression that can be used in formulas. Can either return a number or a string, and take some parameters.":"An expression that can be used in formulas. Can either return a number or a string, and take some parameters.","An expression that can be used on objects with the behavior. Can either return a number or a string, and take some parameters.":"An expression that can be used on objects with the behavior. Can either return a number or a string, and take some parameters.","An expression that can be used on the object. Can either return a number or a string, and take some parameters.":"An expression that can be used on the object. Can either return a number or a string, and take some parameters.","An extension with this name already exists in the project. Importing this extension will replace it.":"An extension with this name already exists in the project. Importing this extension will replace it.","An external editor is opened.":"An external editor is opened.","An internet connection is required to administrate your game's leaderboards.":"An internet connection is required to administrate your game's leaderboards.","An object that can be moved, rotated and scaled in 2D.":"An object that can be moved, rotated and scaled in 2D.","An object that can be moved, rotated and scaled in 3D.":"An object that can be moved, rotated and scaled in 3D.","An unexpected error happened. Please contact us for more details.":"An unexpected error happened. Please contact us for more details.","An unexpected error happened. Verify your internet connection or try again later.":"An unexpected error happened. Verify your internet connection or try again later.","An unexpected error occurred. The list has been refreshed.":"An unexpected error occurred. The list has been refreshed.","An unknown error happened, ensure your password is entered correctly.":"An unknown error happened, ensure your password is entered correctly.","An unknown error happened.":"An unknown error happened.","An update is installing.":"An update is installing.","An update is ready to be installed. Close ALL GDevelop apps or tabs in your browser, then open it again.":"An update is ready to be installed. Close ALL GDevelop apps or tabs in your browser, then open it again.","Analytics":"Analytics","Analyze Objects Used in this Event":"Analyze Objects Used in this Event","Analyzing the object properties":"Analyzing the object properties","Analyzing the project":"Analyzing the project","And others...":"And others...","And {remainingResultsCount} more results.":function(a){return["And ",a("remainingResultsCount")," more results."]},"Android":"Android","Android App Bundle (for publishing on Google Play)":"Android App Bundle (for publishing on Google Play)","Android Build":"Android Build","Android builds":"Android builds","Android icons and Android 12+ splashscreen":"Android icons and Android 12+ splashscreen","Android mobile devices (Google Play, Amazon)":"Android mobile devices (Google Play, Amazon)","Angle":"Angle","Animation":"Animation","Animation #{animationIndex}":function(a){return["Animation #",a("animationIndex")]},"Animation #{i} {0}":function(a){return["Animation #",a("i")," ",a("0")]},"Animations":"Animations","Animations are a sequence of images.":"Animations are a sequence of images.","Anonymous":"Anonymous","Anonymous players":"Anonymous players","Another personal website, newgrounds.com page, etc.":"Another personal website, newgrounds.com page, etc.","Answer":"Answer","Answer a 1-minute survey to personalize your suggested content.":"Answer a 1-minute survey to personalize your suggested content.","Answers video":"Answers video","Anti-aliasing":"Anti-aliasing","Antialising for 3D":"Antialising for 3D","Any object":"Any object","Any submitted score that is higher than the set value will not be saved in the leaderboard.":"Any submitted score that is higher than the set value will not be saved in the leaderboard.","Any submitted score that is lower than the set value will not be saved in the leaderboard.":"Any submitted score that is lower than the set value will not be saved in the leaderboard.","Any unsaved changes in the project will be lost.":"Any unsaved changes in the project will be lost.","Anyone can access it.":"Anyone can access it.","Anyone with the link can see it, but it is not listed in your game's leaderboards.":"Anyone with the link can see it, but it is not listed in your game's leaderboards.","App or tool":"App or tool","Appearance":"Appearance","Apple":"Apple","Apple App Store":"Apple App Store","Apple Certificates & Profiles":"Apple Certificates & Profiles","Apple mobile devices (App Store)":"Apple mobile devices (App Store)","Apply":"Apply","Apply changes":"Apply changes","Apply changes to preview":"Apply changes to preview","Apply changes to the running preview":"Apply changes to the running preview","Apply this change:":"Apply this change:","Archive accounts":"Archive accounts","Archive {0} accounts":function(a){return["Archive ",a("0")," accounts"]},"Archive {0} accounts?":function(a){return["Archive ",a("0")," accounts?"]},"Archived accounts":"Archived accounts","Are you sure you want to delete this entry? This can't be undone.":"Are you sure you want to delete this entry? This can't be undone.","Are you sure you want to hide this hint? You won't see it again, unless you re-activate it from the preferences.":"Are you sure you want to hide this hint? You won't see it again, unless you re-activate it from the preferences.","Are you sure you want to quit GDevelop?":"Are you sure you want to quit GDevelop?","Are you sure you want to remove these external events? This can't be undone.":"Are you sure you want to remove these external events? This can't be undone.","Are you sure you want to remove this animation?":"Are you sure you want to remove this animation?","Are you sure you want to remove this animation? You will lose the custom collision mask you have set for this object.":"Are you sure you want to remove this animation? You will lose the custom collision mask you have set for this object.","Are you sure you want to remove this behavior? This can't be undone.":"Are you sure you want to remove this behavior? This can't be undone.","Are you sure you want to remove this external layout? This can't be undone.":"Are you sure you want to remove this external layout? This can't be undone.","Are you sure you want to remove this folder and all its content (objects {0})? This can't be undone.":function(a){return["Are you sure you want to remove this folder and all its content (objects ",a("0"),")? This can't be undone."]},"Are you sure you want to remove this folder and all its functions ({0})? This can't be undone.":function(a){return["Are you sure you want to remove this folder and all its functions (",a("0"),")? This can't be undone."]},"Are you sure you want to remove this folder and all its properties ({0})? This can't be undone.":function(a){return["Are you sure you want to remove this folder and all its properties (",a("0"),")? This can't be undone."]},"Are you sure you want to remove this folder and with it the function {0}? This can't be undone.":function(a){return["Are you sure you want to remove this folder and with it the function ",a("0"),"? This can't be undone."]},"Are you sure you want to remove this folder and with it the object {0}? This can't be undone.":function(a){return["Are you sure you want to remove this folder and with it the object ",a("0"),"? This can't be undone."]},"Are you sure you want to remove this folder and with it the property {0}? This can't be undone.":function(a){return["Are you sure you want to remove this folder and with it the property ",a("0"),"? This can't be undone."]},"Are you sure you want to remove this function? This can't be undone.":"Are you sure you want to remove this function? This can't be undone.","Are you sure you want to remove this group? This can't be undone.":"Are you sure you want to remove this group? This can't be undone.","Are you sure you want to remove this object? This can't be undone.":"Are you sure you want to remove this object? This can't be undone.","Are you sure you want to remove this resource? This can't be undone.":"Are you sure you want to remove this resource? This can't be undone.","Are you sure you want to remove this scene? This can't be undone.":"Are you sure you want to remove this scene? This can't be undone.","Are you sure you want to remove this variant from your project? This can't be undone.":"Are you sure you want to remove this variant from your project? This can't be undone.","Are you sure you want to reset all shortcuts to their default values?":"Are you sure you want to reset all shortcuts to their default values?","Are you sure you want to restore the project to the state saved at this point in the AI conversation? This will overwrite the current project state.":"Are you sure you want to restore the project to the state saved at this point in the AI conversation? This will overwrite the current project state.","Are you sure you want to unregister this game?{0}If you haven't saved it, it will disappear from your games dashboard and you won't get access to player services, unless you register it again.":function(a){return["Are you sure you want to unregister this game?",a("0"),"If you haven't saved it, it will disappear from your games dashboard and you won't get access to player services, unless you register it again."]},"Are you teaching or learning game development?":"Are you teaching or learning game development?","Around 1 or 2 months":"Around 1 or 2 months","Around 3 to 5 months":"Around 3 to 5 months","Array":"Array","Art & Animation":"Art & Animation","As a percent of the game width.":"As a percent of the game width.","As a teacher, you will use one seat in the plan so make sure to include yourself!":"As a teacher, you will use one seat in the plan so make sure to include yourself!","Ask AI":"Ask AI","Ask AI (AI agent and chatbot)":"Ask AI (AI agent and chatbot)","Ask a follow up question":"Ask a follow up question","Ask every time":"Ask every time","Ask the AI":"Ask the AI","Ask your questions to the community":"Ask your questions to the community","Asset Store":"Asset Store","Asset pack bundles":"Asset pack bundles","Asset pack not found":"Asset pack not found","Asset pack not found - An error occurred, please try again later.":"Asset pack not found - An error occurred, please try again later.","Asset packs will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this pack (or restore your existing purchase).":"Asset packs will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this pack (or restore your existing purchase).","Asset store dialog":"Asset store dialog","Asset store tag":"Asset store tag","Assets":"Assets","Assets (coming soon!)":"Assets (coming soon!)","Assets import can't be undone. Make sure to backup your project beforehand.":"Assets import can't be undone. Make sure to backup your project beforehand.","Associated resource name":"Associated resource name","Asynchronous":"Asynchronous","At launch":"At launch","Atlas":"Atlas","Atlas resource":"Atlas resource","Attached object":"Attached object","Audio":"Audio","Audio & Sound":"Audio & Sound","Audio resource":"Audio resource","Audio type":"Audio type","Auth Key (App Store upload)":"Auth Key (App Store upload)","Auth Key for upload to App Store Connect":"Auth Key for upload to App Store Connect","Authors":"Authors","Auto download and install updates (recommended)":"Auto download and install updates (recommended)","Auto-save project on preview":"Auto-save project on preview","Automated":"Automated","Automatic collision mask activated. Click on the button to replace it with a custom one.":"Automatic collision mask activated. Click on the button to replace it with a custom one.","Automatic creation of lighting layer":"Automatic creation of lighting layer","Automatically follow the base layer.":"Automatically follow the base layer.","Automatically log in as a player in preview":"Automatically log in as a player in preview","Automatically open the diagnostic report at preview":"Automatically open the diagnostic report at preview","Automatically re-open the project edited during last session":"Automatically re-open the project edited during last session","Automatically take a screenshot in game previews":"Automatically take a screenshot in game previews","Automatically use GDevelop credits for AI requests when run out of AI credits":"Automatically use GDevelop credits for AI requests when run out of AI credits","Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.":"Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.","Average user feedback":"Average user feedback","Back":"Back","Back (Additional button, typically the Browser Back button)":"Back (Additional button, typically the Browser Back button)","Back face":"Back face","Back to discover":"Back to discover","Back to {0}":function(a){return["Back to ",a("0")]},"Background":"Background","Background and cameras":"Background and cameras","Background color":"Background color","Background color:":"Background color:","Background fade in duration (in seconds)":"Background fade in duration (in seconds)","Background image":"Background image","Background preloading of scene resources":"Background preloading of scene resources","Backgrounds":"Backgrounds","Base layer":"Base layer","Base layer properties":"Base layer properties","Be careful with this action, you may have problems exiting the preview if you don't add a way to toggle it back.":"Be careful with this action, you may have problems exiting the preview if you don't add a way to toggle it back.","Before installing this asset, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["Before installing this asset, it's strongly recommended to update these extensions",a("0"),"Do you want to update them now?"]},"Before installing this behavior, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["Before installing this behavior, it's strongly recommended to update these extensions",a("0"),"Do you want to update them now?"]},"Before installing this extension, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["Before installing this extension, it's strongly recommended to update these extensions",a("0"),"Do you want to update them now?"]},"Before you go, make sure that you've unpublished all your games on gd.games. Otherwise they will stay visible to the community. Are you sure you want to permanently delete your account? This action cannot be undone.":"Before you go, make sure that you've unpublished all your games on gd.games. Otherwise they will stay visible to the community. Are you sure you want to permanently delete your account? This action cannot be undone.","Before you go...":"Before you go...","Begin a driving game with a controllable car":"Begin a driving game with a controllable car","Begin a top-down adventure with one controllable character.":"Begin a top-down adventure with one controllable character.","Beginner":"Beginner","Beginner course":"Beginner course","Behavior":"Behavior","Behavior (for the previous object)":"Behavior (for the previous object)","Behavior Configuration":"Behavior Configuration","Behavior name":"Behavior name","Behavior properties":"Behavior properties","Behavior type":"Behavior type","Behaviors":"Behaviors","Behaviors add features to objects in a matter of clicks.":"Behaviors add features to objects in a matter of clicks.","Behaviors are attached to objects and make them alive. The rules of the game can be created using behaviors and events.":"Behaviors are attached to objects and make them alive. The rules of the game can be created using behaviors and events.","Behaviors of {objectOrGroupName}: {0} ;":function(a){return["Behaviors of ",a("objectOrGroupName"),": ",a("0")," ;"]},"Bio":"Bio","Bitmap Font":"Bitmap Font","Bitmap font resource":"Bitmap font resource","Block preview and export when diagnostic errors are found":"Block preview and export when diagnostic errors are found","Blocked on GDevelop?":"Blocked on GDevelop?","Blur radius":"Blur radius","Bold":"Bold","Boolean":"Boolean","Boolean (checkbox)":"Boolean (checkbox)","Bottom":"Bottom","Bottom bound":"Bottom bound","Bottom bound should be greater than right bound":"Bottom bound should be greater than right bound","Bottom face":"Bottom face","Bottom left corner":"Bottom left corner","Bottom margin":"Bottom margin","Bottom right corner":"Bottom right corner","Bounce rate":"Bounce rate","Bounds":"Bounds","Branding":"Branding","Branding and Loading screen":"Branding and Loading screen","Break into the <0>booming industry of casual gaming. Sharpen your skills and become a professional. Start for free:":"Break into the <0>booming industry of casual gaming. Sharpen your skills and become a professional. Start for free:","Breaking changes":"Breaking changes","Bring to front":"Bring to front","Browse":"Browse","Browse all templates":"Browse all templates","Browse assets":"Browse assets","Browse bundle":"Browse bundle","Browser":"Browser","Build and download":"Build and download","Build could not start or errored. Please check your internet connection or try again later.":"Build could not start or errored. Please check your internet connection or try again later.","Build dynamic levels with tiles.":"Build dynamic levels with tiles.","Build is starting...":"Build is starting...","Build open for feedbacks":"Build open for feedbacks","Build started!":"Build started!","Building":"Building","Bundle":"Bundle","Bundle not found":"Bundle not found","Bundle not found - An error occurred, please try again later.":"Bundle not found - An error occurred, please try again later.","Bundles and their content will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this bundle. (or restore your existing purchase).":"Bundles and their content will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this bundle. (or restore your existing purchase).","Buy GDevelop goodies and swag":"Buy GDevelop goodies and swag","Buy for {0} credits":function(a){return["Buy for ",a("0")," credits"]},"Buy for {formattedProductPriceText}":function(a){return["Buy for ",a("formattedProductPriceText")]},"Buy now and save {0}":function(a){return["Buy now and save ",a("0")]},"By accepting, the team admin will be able to access your projects and may update your profile information such as your username.":"By accepting, the team admin will be able to access your projects and may update your profile information such as your username.","By canceling your subscription, you will lose all your premium features at the end of the period you already paid for. Continue?":"By canceling your subscription, you will lose all your premium features at the end of the period you already paid for. Continue?","By creating an account and using GDevelop, you agree to the [Terms and Conditions](https://gdevelop.io/page/terms-and-conditions).":"By creating an account and using GDevelop, you agree to the [Terms and Conditions](https://gdevelop.io/page/terms-and-conditions).","Calibrating sensors":"Calibrating sensors","Camera":"Camera","Camera positioning":"Camera positioning","Camera type":"Camera type","Can't check if the game is registered online.":"Can't check if the game is registered online.","Can't load the announcements. Verify your internet connection or try again later.":"Can't load the announcements. Verify your internet connection or try again later.","Can't load the credits packages. Verify your internet connection or retry later.":"Can't load the credits packages. Verify your internet connection or retry later.","Can't load the extension registry. Verify your internet connection or try again later.":"Can't load the extension registry. Verify your internet connection or try again later.","Can't load the games. Verify your internet connection or retry later.":"Can't load the games. Verify your internet connection or retry later.","Can't load the licenses. Verify your internet connection or try again later.":"Can't load the licenses. Verify your internet connection or try again later.","Can't load the profile. Verify your internet connection or try again later.":"Can't load the profile. Verify your internet connection or try again later.","Can't load the results. Verify your internet connection or retry later.":"Can't load the results. Verify your internet connection or retry later.","Can't load the tutorials. Verify your internet connection or retry later.":"Can't load the tutorials. Verify your internet connection or retry later.","Can't load your game earnings. Verify your internet connection or try again later.":"Can't load your game earnings. Verify your internet connection or try again later.","Can't properly export the game.":"Can't properly export the game.","Can't upload your game to the build service.":"Can't upload your game to the build service.","Cancel":"Cancel","Cancel and change my subscription":"Cancel and change my subscription","Cancel and close":"Cancel and close","Cancel anytime":"Cancel anytime","Cancel changes":"Cancel changes","Cancel editing":"Cancel editing","Cancel edition":"Cancel edition","Cancel subscription":"Cancel subscription","Cancel your changes?":"Cancel your changes?","Cancel your subscription":"Cancel your subscription","Cancel your subscription?":"Cancel your subscription?","Cancelled":"Cancelled","Cancelled - Your subscription will end at the end of the paid period.":"Cancelled - Your subscription will end at the end of the paid period.","Cannot access project save":"Cannot access project save","Cannot filter on both asset packs and assets at the same time. Try clearing one of the filters!":"Cannot filter on both asset packs and assets at the same time. Try clearing one of the filters!","Cannot restore project":"Cannot restore project","Cannot see the exports":"Cannot see the exports","Cannot update thumbnail":"Cannot update thumbnail","Cash out":"Cash out","Category (shown in the editor)":"Category (shown in the editor)","Cell depth (in pixels)":"Cell depth (in pixels)","Cell height (in pixels)":"Cell height (in pixels)","Cell width (in pixels)":"Cell width (in pixels)","Center":"Center","Certificate and provisioning profile":"Certificate and provisioning profile","Certificate type: {0}":function(a){return["Certificate type: ",a("0")]},"Change editor zoom":"Change editor zoom","Change my email":"Change my email","Change the name in the project properties.":"Change the name in the project properties.","Change the package name in the game properties.":"Change the package name in the game properties.","Change thumbnail":"Change thumbnail","Change username or full name":"Change username or full name","Change your email":"Change your email","Changes and answers may have mistakes: experiment and use it for learning.":"Changes and answers may have mistakes: experiment and use it for learning.","Changes saved":"Changes saved","Chapter":"Chapter","Chapter materials":"Chapter materials","Chapters":"Chapters","Characters":"Characters","Check again for new updates":"Check again for new updates","Check that the file exists, that this file is a proper game created with GDevelop and that you have the authorization to open it.":"Check that the file exists, that this file is a proper game created with GDevelop and that you have the authorization to open it.","Check the logs to see if there is an explanation about what went wrong, or try again later.":"Check the logs to see if there is an explanation about what went wrong, or try again later.","Checking for update...":"Checking for update...","Checking tools":"Checking tools","Children configurations are deprecated. This [migration documentation](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) can help you use variants instead.":"Children configurations are deprecated. This [migration documentation](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) can help you use variants instead.","Choose":"Choose","Choose GDevelop language":"Choose GDevelop language","Choose a Auth Key":"Choose a Auth Key","Choose a file":"Choose a file","Choose a folder for the new game":"Choose a folder for the new game","Choose a font":"Choose a font","Choose a function, or a function of a behavior, to edit its events.":"Choose a function, or a function of a behavior, to edit its events.","Choose a function, or a function of a behavior, to set the parameters that it accepts.":"Choose a function, or a function of a behavior, to set the parameters that it accepts.","Choose a key":"Choose a key","Choose a layer":"Choose a layer","Choose a leaderboard":"Choose a leaderboard","Choose a leaderboard (optional)":"Choose a leaderboard (optional)","Choose a mouse button":"Choose a mouse button","Choose a new behavior function (\"method\")":"Choose a new behavior function (\"method\")","Choose a new extension function":"Choose a new extension function","Choose a new object function (\"method\")":"Choose a new object function (\"method\")","Choose a new object type":"Choose a new object type","Choose a pack":"Choose a pack","Choose a parameter":"Choose a parameter","Choose a provisioning profile":"Choose a provisioning profile","Choose a scene":"Choose a scene","Choose a skin":"Choose a skin","Choose a subscription":"Choose a subscription","Choose a subscription to enjoy the best of game creation.":"Choose a subscription to enjoy the best of game creation.","Choose a value":"Choose a value","Choose a workspace folder":"Choose a workspace folder","Choose an animation":"Choose an animation","Choose an animation and frame to edit the collision masks":"Choose an animation and frame to edit the collision masks","Choose an animation and frame to edit the points":"Choose an animation and frame to edit the points","Choose an effect":"Choose an effect","Choose an element to inspect in the list":"Choose an element to inspect in the list","Choose an export folder":"Choose an export folder","Choose an external layout":"Choose an external layout","Choose an icon":"Choose an icon","Choose an object":"Choose an object","Choose an object first or browse the list of actions.":"Choose an object first or browse the list of actions.","Choose an object first or browse the list of conditions.":"Choose an object first or browse the list of conditions.","Choose an object to add to the group":"Choose an object to add to the group","Choose an operator":"Choose an operator","Choose an option":"Choose an option","Choose and add an event":"Choose and add an event","Choose and add an event...":"Choose and add an event...","Choose and enter a package name in the game properties.":"Choose and enter a package name in the game properties.","Choose another location":"Choose another location","Choose file":"Choose file","Choose folder":"Choose folder","Choose from asset store":"Choose from asset store","Choose one or more files":"Choose one or more files","Choose the 3D model file (.glb) to use":"Choose the 3D model file (.glb) to use","Choose the JSON/LDtk file to use":"Choose the JSON/LDtk file to use","Choose the associated scene:":"Choose the associated scene:","Choose the atlas file (.atlas) to use":"Choose the atlas file (.atlas) to use","Choose the audio file to use":"Choose the audio file to use","Choose the bitmap font file (.fnt, .xml) to use":"Choose the bitmap font file (.fnt, .xml) to use","Choose the effect to apply":"Choose the effect to apply","Choose the font file to use":"Choose the font file to use","Choose the image file to use":"Choose the image file to use","Choose the json file to use":"Choose the json file to use","Choose the scene":"Choose the scene","Choose the spine json file to use":"Choose the spine json file to use","Choose the tileset to use":"Choose the tileset to use","Choose the upload key to use to identify your Android App Bundle. In most cases you don't need to change this. Use the \"Old upload key\" if you used to publish your game as an APK and you activated Play App Signing before switching to Android App Bundle.":"Choose the upload key to use to identify your Android App Bundle. In most cases you don't need to change this. Use the \"Old upload key\" if you used to publish your game as an APK and you activated Play App Signing before switching to Android App Bundle.","Choose the video file to use":"Choose the video file to use","Choose this plan":"Choose this plan","Choose where to add the assets:":"Choose where to add the assets:","Choose where to create the game":"Choose where to create the game","Choose where to create your projects":"Choose where to create your projects","Choose where to export the game":"Choose where to export the game","Choose where to load the project from":"Choose where to load the project from","Choose where to save the project to":"Choose where to save the project to","Choose your game art":"Choose your game art","Circle":"Circle","Claim":"Claim","Claim credits":"Claim credits","Claim this pack":"Claim this pack","Class":"Class","Classrooms":"Classrooms","Clear all filters":"Clear all filters","Clear search":"Clear search","Clear the rendered image between each frame":"Clear the rendered image between each frame","Click here to test the link.":"Click here to test the link.","Click on an instance on the canvas or an object in the list to display their properties.":"Click on an instance on the canvas or an object in the list to display their properties.","Click on the tilemap grid to activate or deactivate hit boxes.":"Click on the tilemap grid to activate or deactivate hit boxes.","Click to restart and install the update now.":"Click to restart and install the update now.","Close":"Close","Close GDevelop":"Close GDevelop","Close Instances List Panel":"Close Instances List Panel","Close Layers Panel":"Close Layers Panel","Close Object Groups Panel":"Close Object Groups Panel","Close Objects Panel":"Close Objects Panel","Close Project":"Close Project","Close Properties Panel":"Close Properties Panel","Close all":"Close all","Close all tasks":"Close all tasks","Close and launch a new preview":"Close and launch a new preview","Close others":"Close others","Close project":"Close project","Close task":"Close task","Close the AI chat?":"Close the AI chat?","Close the project?":"Close the project?","Close the project? Any changes that have not been saved will be lost.":"Close the project? Any changes that have not been saved will be lost.","Co-op Multiplayer":"Co-op Multiplayer","Code":"Code","Code editor Theme":"Code editor Theme","Collaborators":"Collaborators","Collapse All":"Collapse All","Collect at least {0} USD to cash out your earnings":function(a){return["Collect at least ",a("0")," USD to cash out your earnings"]},"Collect feedback from players":"Collect feedback from players","Collect game feedback":"Collect game feedback","Collisions handling with the Physics engine":"Collisions handling with the Physics engine","Color":"Color","Color (text)":"Color (text)","Color:":"Color:","Column title":"Column title","Come back to latest version":"Come back to latest version","Coming in {0}":function(a){return["Coming in ",a("0")]},"Command palette keyboard shortcut":"Command palette keyboard shortcut","Comment":"Comment","Commercial License":"Commercial License","Community Discord Chat":"Community Discord Chat","Community Forums":"Community Forums","Community list":"Community list","Companies, studios and agencies":"Companies, studios and agencies","Company name or full name":"Company name or full name","Compare all the advantages of the different plans in this <0>big feature comparison table.":"Compare all the advantages of the different plans in this <0>big feature comparison table.","Complete all tasks to claim your badge":"Complete all tasks to claim your badge","Complete your payment on the web browser":"Complete your payment on the web browser","Complete your purchase with the app store.":"Complete your purchase with the app store.","Completely alone":"Completely alone","Compressing before upload...":"Compressing before upload...","Condition":"Condition","Conditions":"Conditions","Configuration":"Configuration","Configure the external events":"Configure the external events","Configure the external layout":"Configure the external layout","Configure tile’s hit boxes":"Configure tile’s hit boxes","Confirm":"Confirm","Confirm the opening":"Confirm the opening","Confirm your email":"Confirm your email","Confirming your subscription":"Confirming your subscription","Congrats on finishing this course!":"Congrats on finishing this course!","Congratulations! You've finished this tutorial!":"Congratulations! You've finished this tutorial!","Connected players":"Connected players","Considering the best approach":"Considering the best approach","Considering the possibilities":"Considering the possibilities","Console":"Console","Consoles":"Consoles","Contact us at education@gdevelop.io if you want to update your plan":"Contact us at education@gdevelop.io if you want to update your plan","Contact:":"Contact:","Contains text":"Contains text","Content":"Content","Content for Teachers":"Content for Teachers","Continue":"Continue","Continue anyway":"Continue anyway","Continue editing":"Continue editing","Continue with Apple":"Continue with Apple","Continue with Github":"Continue with Github","Continue with Google":"Continue with Google","Continue with Human Intelligence":"Continue with Human Intelligence","Continue working":"Continue working","Contribute to GDevelop":"Contribute to GDevelop","Contributions":"Contributions","Contributor options":"Contributor options","Contributors":"Contributors","Contributors, in no particular order:":"Contributors, in no particular order:","Control a spaceship with a joystick.":"Control a spaceship with a joystick.","Control your spaceship with a joystick, while avoiding asteroids.":"Control your spaceship with a joystick, while avoiding asteroids.","Convert":"Convert","Copied to clipboard!":"Copied to clipboard!","Copy":"Copy","Copy active credentials to CSV":"Copy active credentials to CSV","Copy all":"Copy all","Copy all behaviors":"Copy all behaviors","Copy all effects":"Copy all effects","Copy build link":"Copy build link","Copy email address":"Copy email address","Copy file path":"Copy file path","Copy them into the project folder":"Copy them into the project folder","Copy {0} credentials to CSV":function(a){return["Copy ",a("0")," credentials to CSV"]},"Cordova":"Cordova","Could not activate purchase":"Could not activate purchase","Could not cancel your subscription":"Could not cancel your subscription","Could not cash out":"Could not cash out","Could not change subscription":"Could not change subscription","Could not create the object":"Could not create the object","Could not delete the build. Verify your internet connection or try again later.":"Could not delete the build. Verify your internet connection or try again later.","Could not find any resources matching your search.":"Could not find any resources matching your search.","Could not install the asset":"Could not install the asset","Could not install the extension":"Could not install the extension","Could not launch the preview":"Could not launch the preview","Could not load the project versions. Verify your internet connection or try again later.":"Could not load the project versions. Verify your internet connection or try again later.","Could not purchase this product":"Could not purchase this product","Could not remove invitation":"Could not remove invitation","Could not swap asset":"Could not swap asset","Could not transfer your credits":"Could not transfer your credits","Could not update the build name. Verify your internet connection or try again later.":"Could not update the build name. Verify your internet connection or try again later.","Counter of the loop":"Counter of the loop","Country name":"Country name","Courses will be linked to your user account and available indefinitely. Log in or sign up to purchase this course or restore a previous purchase.":"Courses will be linked to your user account and available indefinitely. Log in or sign up to purchase this course or restore a previous purchase.","Create":"Create","Create Extensions for GDevelop":"Create Extensions for GDevelop","Create a 3D explosion when the player is hit":"Create a 3D explosion when the player is hit","Create a GDevelop account to save your changes and keep personalizing your game":"Create a GDevelop account to save your changes and keep personalizing your game","Create a certificate signing request that will be asked by Apple to generate a full certificate.":"Create a certificate signing request that will be asked by Apple to generate a full certificate.","Create a game":"Create a game","Create a leaderboard":"Create a leaderboard","Create a new extension":"Create a new extension","Create a new game":"Create a new game","Create a new group":"Create a new group","Create a new instance on the scene (will be at position 0;0):":"Create a new instance on the scene (will be at position 0;0):","Create a new project":"Create a new project","Create a new room":"Create a new room","Create a new variant":"Create a new variant","Create a project first to add assets from the asset store":"Create a project first to add assets from the asset store","Create a project first to add this asset":"Create a project first to add this asset","Create a room and drag and drop members in it.":"Create a room and drag and drop members in it.","Create a signing request":"Create a signing request","Create a simple flying game with obstacles to avoid":"Create a simple flying game with obstacles to avoid","Create account":"Create account","Create accounts":"Create accounts","Create an API key on the [App Store Connect API page](https://appstoreconnect.apple.com/access/integrations/api). Give it a name and **administrator** rights. Download the \"Auth Key\" file and upload it here along with the required information you can find on the page.":"Create an API key on the [App Store Connect API page](https://appstoreconnect.apple.com/access/integrations/api). Give it a name and **administrator** rights. Download the \"Auth Key\" file and upload it here along with the required information you can find on the page.","Create an Account":"Create an Account","Create an account":"Create an account","Create an account or login first to export your game using online services.":"Create an account or login first to export your game using online services.","Create an account to activate your purchase!":"Create an account to activate your purchase!","Create an account to register your games and to get access to metrics collected anonymously, like the number of daily players and retention of the players after a few days.":"Create an account to register your games and to get access to metrics collected anonymously, like the number of daily players and retention of the players after a few days.","Create an account to store your project online.":"Create an account to store your project online.","Create and Publish a Fling game":"Create and Publish a Fling game","Create iOS certificate":"Create iOS certificate","Create installation file":"Create installation file","Create my account":"Create my account","Create new folder...":"Create new folder...","Create new game":"Create new game","Create new leaderboards now":"Create new leaderboards now","Create or search for new extensions":"Create or search for new extensions","Create package for Android":"Create package for Android","Create package for iOS":"Create package for iOS","Create scene <0>{scene_name}. <1>Click to open it.":function(a){return["Create scene <0>",a("scene_name"),". <1>Click to open it."]},"Create section":"Create section","Create students":"Create students","Create with Jfxr":"Create with Jfxr","Create with Piskel":"Create with Piskel","Create with Yarn":"Create with Yarn","Create your Apple certificate for iOS":"Create your Apple certificate for iOS","Create your Auth Key to send your game to App Store Connect":"Create your Auth Key to send your game to App Store Connect","Create your certificate and \"provisioning profile\" thanks to your Apple Developer account. We'll guide you with a step by step process.":"Create your certificate and \"provisioning profile\" thanks to your Apple Developer account. We'll guide you with a step by step process.","Create your first project using one of our templates or start from scratch.":"Create your first project using one of our templates or start from scratch.","Create your game's first leaderboard":"Create your game's first leaderboard","Created objects":"Created objects","Created on {0}":function(a){return["Created on ",a("0")]},"Creator profile":"Creator profile","Credit out":"Credit out","Credits available: {0}":function(a){return["Credits available: ",a("0")]},"Credits given":"Credits given","Credits will be linked to your user account. Log-in or sign-up to purchase them!":"Credits will be linked to your user account. Log-in or sign-up to purchase them!","Current build online":"Current build online","Current plan":"Current plan","Custom CSS":"Custom CSS","Custom css value cannot exceed {LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH} characters.":function(a){return["Custom css value cannot exceed ",a("LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH")," characters."]},"Custom display":"Custom display","Custom object name":"Custom object name","Custom object variant":"Custom object variant","Custom object variant properties":"Custom object variant properties","Custom objects can't contain both 2D or 3D.<0/>Please select either 2D instances or 3D instances.":"Custom objects can't contain both 2D or 3D.<0/>Please select either 2D instances or 3D instances.","Custom size":"Custom size","Custom upload key (not available yet)":"Custom upload key (not available yet)","Cut":"Cut","Dark (colored)":"Dark (colored)","Dark (plain)":"Dark (plain)","Date":"Date","Date from which entries are taken into account: {0}":function(a){return["Date from which entries are taken into account: ",a("0")]},"Days":"Days","Dead":"Dead","Dealing with data integration from external sources":"Dealing with data integration from external sources","Debugger":"Debugger","Debugger is starting...":"Debugger is starting...","Declare <0><1/>{variableName} as <2><3/>{0} with <4>{1}":function(a){return["Declare <0><1/>",a("variableName")," as <2><3/>",a("0")," with <4>",a("1"),""]},"Declare your app on App Store Connect and then register a key so that your game can be automatically uploaded when built. It's perfect to try your game with testers on Apple TestFlight.":"Declare your app on App Store Connect and then register a key so that your game can be automatically uploaded when built. It's perfect to try your game with testers on Apple TestFlight.","Default":"Default","Default (visible)":"Default (visible)","Default camera behavior":"Default camera behavior","Default height (in pixels)":"Default height (in pixels)","Default name for created objects":"Default name for created objects","Default orientation":"Default orientation","Default size":"Default size","Default skin":"Default skin","Default upload key (recommended)":"Default upload key (recommended)","Default value":"Default value","Default value of string variables":"Default value of string variables","Default visibility":"Default visibility","Default width (in pixels)":"Default width (in pixels)","Define custom password":"Define custom password","Delete":"Delete","Delete Entry":"Delete Entry","Delete Leaderboard":"Delete Leaderboard","Delete account":"Delete account","Delete build":"Delete build","Delete collision mask":"Delete collision mask","Delete game":"Delete game","Delete my account":"Delete my account","Delete object":"Delete object","Delete option":"Delete option","Delete project":"Delete project","Delete score {0} from {1}":function(a){return["Delete score ",a("0")," from ",a("1")]},"Delete selection":"Delete selection","Delete the selected event(s)":"Delete the selected event(s)","Delete the selected instances from the scene":"Delete the selected instances from the scene","Delete the selected resource":"Delete the selected resource","Delete when out of particles":"Delete when out of particles","Delete {gameName}":function(a){return["Delete ",a("gameName")]},"Dependencies":"Dependencies","Dependencies allow to add additional libraries in the exported games. NPM dependencies will be included for Electron builds (Windows, macOS, Linux) and Cordova dependencies will be included for Cordova builds (Android, iOS). Note that this is intended for usage in JavaScript events only. If you are only using standard events, you should not worry about this.":"Dependencies allow to add additional libraries in the exported games. NPM dependencies will be included for Electron builds (Windows, macOS, Linux) and Cordova dependencies will be included for Cordova builds (Android, iOS). Note that this is intended for usage in JavaScript events only. If you are only using standard events, you should not worry about this.","Dependency type":"Dependency type","Deprecated":"Deprecated","Deprecated action":"Deprecated action","Deprecated actions and conditions warning":"Deprecated actions and conditions warning","Deprecated condition":"Deprecated condition","Deprecated:":"Deprecated:","Deprecation notice":"Deprecation notice","Depth":"Depth","Description":"Description","Description (markdown supported)":"Description (markdown supported)","Description (will be prefixed by \"Compare\" or \"Return\")":"Description (will be prefixed by \"Compare\" or \"Return\")","Deselect All":"Deselect All","Desktop":"Desktop","Desktop & Mobile landscape":"Desktop & Mobile landscape","Desktop (Windows, macOS and Linux) icon":"Desktop (Windows, macOS and Linux) icon","Desktop Full HD":"Desktop Full HD","Desktop builds":"Desktop builds","Details":"Details","Developer options":"Developer options","Development (debugging & testing on a registered iPhone/iPad)":"Development (debugging & testing on a registered iPhone/iPad)","Development tools required":"Development tools required","Device orientation (for mobile)":"Device orientation (for mobile)","Diagnostic errors found":"Diagnostic errors found","Diagnostic report":"Diagnostic report","Dialog backdrop click behavior":"Dialog backdrop click behavior","Dialogs":"Dialogs","Did it work?":"Did it work?","Did you forget your password?":"Did you forget your password?","Different objects":"Different objects","Dimension":"Dimension","Direction":"Direction","Direction #{i}":function(a){return["Direction #",a("i")]},"Disable GDevelop splash at startup":"Disable GDevelop splash at startup","Disable effects/lighting in the editor":"Disable effects/lighting in the editor","Disable login buttons in leaderboard":"Disable login buttons in leaderboard","Discard changes and open events":"Discard changes and open events","Discard changes?":"Discard changes?","Discord":"Discord","Discord server, e.g: https://discord.gg/...":"Discord server, e.g: https://discord.gg/...","Discord user not found":"Discord user not found","Discord username":"Discord username","Discord username sync failed":"Discord username sync failed","Discover this bundle":"Discover this bundle","Display GDevelop logo at startup (in exported game)":"Display GDevelop logo at startup (in exported game)","Display GDevelop watermark after the game is loaded (in exported game)":"Display GDevelop watermark after the game is loaded (in exported game)","Display What's New when a new version is launched (recommended)":"Display What's New when a new version is launched (recommended)","Display as time":"Display as time","Display assignment operators in Events Sheets":"Display assignment operators in Events Sheets","Display both 2D and 3D objects (default)":"Display both 2D and 3D objects (default)","Display effects/lighting in the editor":"Display effects/lighting in the editor","Display object thumbnails in Events Sheets":"Display object thumbnails in Events Sheets","Display profiling information in scene editor":"Display profiling information in scene editor","Display save reminder after significant changes in project":"Display save reminder after significant changes in project","Displayed score":"Displayed score","Distance":"Distance","Do nothing":"Do nothing","Do you have a Patreon? Ko-fi? Paypal?":"Do you have a Patreon? Ko-fi? Paypal?","Do you have game development experience?":"Do you have game development experience?","Do you need any help?":"Do you need any help?","Do you really want to permanently delete your account?":"Do you really want to permanently delete your account?","Do you want to continue?":"Do you want to continue?","Do you want to quit the customization? All your changes will be lost.":"Do you want to quit the customization? All your changes will be lost.","Do you want to refactor your project?":"Do you want to refactor your project?","Do you wish to continue?":"Do you wish to continue?","Documentation":"Documentation","Don't allow":"Don't allow","Don't have an account yet?":"Don't have an account yet?","Don't play the animation when the object is far from the camera or hidden (recommended for performance)":"Don't play the animation when the object is far from the camera or hidden (recommended for performance)","Don't preload":"Don't preload","Don't save this project now":"Don't save this project now","Don't show this warning again":"Don't show this warning again","Donate link":"Donate link","Done":"Done","Done!":"Done!","Download":"Download","Download (APK)":"Download (APK)","Download (Android App Bundle)":"Download (Android App Bundle)","Download GDevelop desktop version":"Download GDevelop desktop version","Download a copy":"Download a copy","Download log files":"Download log files","Download pack sounds":"Download pack sounds","Download the Instant Game archive":"Download the Instant Game archive","Download the certificate file (.cer) generated by Apple and upload it here. GDevelop will keep it securely stored.":"Download the certificate file (.cer) generated by Apple and upload it here. GDevelop will keep it securely stored.","Download the compressed game and resources":"Download the compressed game and resources","Download the exported game":"Download the exported game","Download the latest version of GDevelop to check out this example!":"Download the latest version of GDevelop to check out this example!","Download the request file":"Download the request file","Downloading game resources...":"Downloading game resources...","Draft created:":"Draft created:","Drag here to add to the scene":"Drag here to add to the scene","Draw":"Draw","Draw the shapes relative to the object position on the scene":"Draw the shapes relative to the object position on the scene","Duplicate":"Duplicate","Duplicate <0>{duplicatedObjectName} as <1>{object_name} in scene <2>{scene_name}.":function(a){return["Duplicate <0>",a("duplicatedObjectName")," as <1>",a("object_name")," in scene <2>",a("scene_name"),"."]},"Duplicate selection":"Duplicate selection","Duration":"Duration","Each character, player, obstacle, background, item, etc. is an object. Objects are the building blocks of your game.":"Each character, player, obstacle, background, item, etc. is an object. Objects are the building blocks of your game.","Earn an exclusive badge":"Earn an exclusive badge","Earn {0}":function(a){return["Earn ",a("0")]},"Ease of use":"Ease of use","Easiest":"Easiest","Edit":"Edit","Edit Grid Options":"Edit Grid Options","Edit Object Variables":"Edit Object Variables","Edit behaviors":"Edit behaviors","Edit build name":"Edit build name","Edit children":"Edit children","Edit collision masks":"Edit collision masks","Edit comment":"Edit comment","Edit details":"Edit details","Edit effects":"Edit effects","Edit global variables":"Edit global variables","Edit group":"Edit group","Edit layer effects...":"Edit layer effects...","Edit layer...":"Edit layer...","Edit loading screen":"Edit loading screen","Edit my profile":"Edit my profile","Edit name":"Edit name","Edit object":"Edit object","Edit object behaviors...":"Edit object behaviors...","Edit object effects...":"Edit object effects...","Edit object group...":"Edit object group...","Edit object variables":"Edit object variables","Edit object variables...":"Edit object variables...","Edit object {0}":function(a){return["Edit object ",a("0")]},"Edit object...":"Edit object...","Edit or add variables...":"Edit or add variables...","Edit parameters...":"Edit parameters...","Edit points":"Edit points","Edit scene properties":"Edit scene properties","Edit scene variables":"Edit scene variables","Edit student":"Edit student","Edit the default variant":"Edit the default variant","Edit this action events":"Edit this action events","Edit this behavior":"Edit this behavior","Edit this condition events":"Edit this condition events","Edit variables...":"Edit variables...","Edit with Jfxr":"Edit with Jfxr","Edit with Piskel":"Edit with Piskel","Edit with Yarn":"Edit with Yarn","Edit your GDevelop profile":"Edit your GDevelop profile","Edit your profile and fill your discord username to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"Edit your profile and fill your discord username to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).","Edit your profile to pick a username!":"Edit your profile to pick a username!","Edit {0}":function(a){return["Edit ",a("0")]},"Edit {objectName}":function(a){return["Edit ",a("objectName")]},"Editing the game.":"Editing the game.","Editor":"Editor","Editor without transitions":"Editor without transitions","Education curriculum and resources":"Education curriculum and resources","Educational":"Educational","Effect name:":"Effect name:","Effects":"Effects","Effects cannot have empty names":"Effects cannot have empty names","Effects create visual changes to the object.":"Effects create visual changes to the object.","Either this game is not registered or you are not its owner, so you cannot see its builds.":"Either this game is not registered or you are not its owner, so you cannot see its builds.","Else":"Else","Else if":"Else if","Email":"Email","Email sent to {0}, waiting for validation...":function(a){return["Email sent to ",a("0"),", waiting for validation..."]},"Email verified":"Email verified","Embedded file name":"Embedded file name","Embedded help and tutorials":"Embedded help and tutorials","Empty free text":"Empty free text","Empty group":"Empty group","Empty project":"Empty project","Enable \"Close project\" shortcut ({0}) to close preview window":function(a){return["Enable \"Close project\" shortcut (",a("0"),") to close preview window"]},"Enable ads and revenue sharing on the game page":"Enable ads and revenue sharing on the game page","Enabled":"Enabled","End of jam":"End of jam","End opacity (0-255)":"End opacity (0-255)","Enforce only auto-generated player names":"Enforce only auto-generated player names","Ensure that you are connected to internet and that the URL used is correct, then try again.":"Ensure that you are connected to internet and that the URL used is correct, then try again.","Ensure this scene has the same objects, behaviors and variables as the ones used in these events.":"Ensure this scene has the same objects, behaviors and variables as the ones used in these events.","Ensure you don't have any typo in your username and that you have joined the GDevelop Discord server.":"Ensure you don't have any typo in your username and that you have joined the GDevelop Discord server.","Enter a query and press Search to find matches across all event sheets in your project.":"Enter a query and press Search to find matches across all event sheets in your project.","Enter a version in the game properties.":"Enter a version in the game properties.","Enter the effect name":"Enter the effect name","Enter the expression parameters":"Enter the expression parameters","Enter the leaderboard id":"Enter the leaderboard id","Enter the leaderboard id as a text or an expression":"Enter the leaderboard id as a text or an expression","Enter the name of an object.":"Enter the name of an object.","Enter the name of the object":"Enter the name of the object","Enter the parameter name (mandatory)":"Enter the parameter name (mandatory)","Enter the property name":"Enter the property name","Enter the sentence that will be displayed in the events sheet":"Enter the sentence that will be displayed in the events sheet","Enter the text to be displayed":"Enter the text to be displayed","Enter the text to be displayed by the object":"Enter the text to be displayed by the object","Enter your Discord username":"Enter your Discord username","Enter your code here":"Enter your code here","Erase":"Erase","Erase {existingInstanceCount} instance(s) in scene {scene_name}.":function(a){return["Erase ",a("existingInstanceCount")," instance(s) in scene ",a("scene_name"),"."]},"Error":"Error","Error loading Auth Keys.":"Error loading Auth Keys.","Error loading certificates.":"Error loading certificates.","Error retrieving the examples":"Error retrieving the examples","Error retrieving the extensions":"Error retrieving the extensions","Error when claiming asset pack":"Error when claiming asset pack","Error while building of the game. Check the logs of the build for more details.":"Error while building of the game. Check the logs of the build for more details.","Error while building the game. Check the logs of the build for more details.":"Error while building the game. Check the logs of the build for more details.","Error while building the game. Try again later. Your internet connection may be slow or one of your resources may be corrupted.":"Error while building the game. Try again later. Your internet connection may be slow or one of your resources may be corrupted.","Error while checking update":"Error while checking update","Error while compressing the game.":"Error while compressing the game.","Error while downloading the game resources. Check your internet connection and that all resources of the game are valid in the Resources editor.":"Error while downloading the game resources. Check your internet connection and that all resources of the game are valid in the Resources editor.","Error while exporting the game.":"Error while exporting the game.","Error while loading builds":"Error while loading builds","Error while loading the Play section. Verify your internet connection or try again later.":"Error while loading the Play section. Verify your internet connection or try again later.","Error while loading the Spine Texture Atlas resource ( {0} ).":function(a){return["Error while loading the Spine Texture Atlas resource ( ",a("0")," )."]},"Error while loading the Spine resource ( {0} ).":function(a){return["Error while loading the Spine resource ( ",a("0")," )."]},"Error while loading the asset. Verify your internet connection or try again later.":"Error while loading the asset. Verify your internet connection or try again later.","Error while loading the collaborators. Verify your internet connection or try again later.":"Error while loading the collaborators. Verify your internet connection or try again later.","Error while loading the marketing plans. Verify your internet connection or try again later.":"Error while loading the marketing plans. Verify your internet connection or try again later.","Error while uploading the game. Check your internet connection or try again later.":"Error while uploading the game. Check your internet connection or try again later.","Escape key behavior when editing an parameter inline":"Escape key behavior when editing an parameter inline","Evaluating the game logic":"Evaluating the game logic","Event sentences":"Event sentences","Events":"Events","Events Sheet":"Events Sheet","Events analysis":"Events analysis","Events define the rules of a game.":"Events define the rules of a game.","Events functions extension":"Events functions extension","Events that will be run at every frame (roughly 60 times per second), after the events from the events sheet of the scene.":"Events that will be run at every frame (roughly 60 times per second), after the events from the events sheet of the scene.","Events that will be run at every frame (roughly 60 times per second), before the events from the events sheet of the scene.":"Events that will be run at every frame (roughly 60 times per second), before the events from the events sheet of the scene.","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, after the events from the events sheet.":"Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, after the events from the events sheet.","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, before the events from the events sheet are launched.":"Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, before the events from the events sheet are launched.","Events that will be run at every frame (roughly 60 times per second), for every object, after the events from the events sheet.":"Events that will be run at every frame (roughly 60 times per second), for every object, after the events from the events sheet.","Events that will be run once when a scene is about to be unloaded from memory. The previous scene that was paused will be resumed after this.":"Events that will be run once when a scene is about to be unloaded from memory. The previous scene that was paused will be resumed after this.","Events that will be run once when a scene is paused (another scene is run on top of it).":"Events that will be run once when a scene is paused (another scene is run on top of it).","Events that will be run once when a scene is resumed (after it was previously paused).":"Events that will be run once when a scene is resumed (after it was previously paused).","Events that will be run once when a scene of the game is loaded, before the scene events.":"Events that will be run once when a scene of the game is loaded, before the scene events.","Events that will be run once when the behavior is deactivated on an object (step events won't be run until the behavior is activated again).":"Events that will be run once when the behavior is deactivated on an object (step events won't be run until the behavior is activated again).","Events that will be run once when the behavior is re-activated on an object (after it was previously deactivated).":"Events that will be run once when the behavior is re-activated on an object (after it was previously deactivated).","Events that will be run once when the first scene of the game is loaded, before any other events.":"Events that will be run once when the first scene of the game is loaded, before any other events.","Events that will be run once, after the object is removed from the scene and before it is entirely removed from memory.":"Events that will be run once, after the object is removed from the scene and before it is entirely removed from memory.","Events that will be run once, when an object is created with this behavior being attached to it.":"Events that will be run once, when an object is created with this behavior being attached to it.","Events that will be run once, when an object is created.":"Events that will be run once, when an object is created.","Events that will be run when the preview is being hot-reloaded.":"Events that will be run when the preview is being hot-reloaded.","Every animation from the GLB file is already in the list.":"Every animation from the GLB file is already in the list.","Every animation from the Spine file is already in the list.":"Every animation from the Spine file is already in the list.","Every child of an array must be the same type.":"Every child of an array must be the same type.","Ex: $":"Ex: $","Ex: coins":"Ex: coins","Examining the behaviors":"Examining the behaviors","Example: Check if the object is flashing.":"Example: Check if the object is flashing.","Example: Equipped shield name":"Example: Equipped shield name","Example: Flash the object":"Example: Flash the object","Example: Is flashing":"Example: Is flashing","Example: Make the object flash for 5 seconds.":"Example: Make the object flash for 5 seconds.","Example: Remaining life":"Example: Remaining life","Example: Return the name of the shield equipped by the player.":"Example: Return the name of the shield equipped by the player.","Example: Return the number of remaining lives for the player.":"Example: Return the number of remaining lives for the player.","Example: Use \"New Action Name\" instead.":"Example: Use \"New Action Name\" instead.","Examples ({0})":function(a){return["Examples (",a("0"),")"]},"Exchange your earnings with GDevelop credits, and use them on the GDevelop store":"Exchange your earnings with GDevelop credits, and use them on the GDevelop store","Exclude attribution requirements":"Exclude attribution requirements","Existing behaviors":"Existing behaviors","Existing effects":"Existing effects","Existing parameters":"Existing parameters","Existing properties":"Existing properties","Exit without saving":"Exit without saving","Expand All to Level":"Expand All to Level","Expand all sub folders":"Expand all sub folders","Expand inner area with parent":"Expand inner area with parent","Expected parent event":"Expected parent event","Experiment with the leaderboard colors using the playground":"Experiment with the leaderboard colors using the playground","Experimental":"Experimental","Experimental extension":"Experimental extension","Expert":"Expert","Explain and give some examples of what can be achieved with this extension.":"Explain and give some examples of what can be achieved with this extension.","Explain what the behavior is doing to the object. Start with a verb when possible.":"Explain what the behavior is doing to the object. Start with a verb when possible.","Explanation after an object is installed from the store":"Explanation after an object is installed from the store","Explore":"Explore","Explore by category":"Explore by category","Exploring the game.":"Exploring the game.","Export (web, iOS, Android)...":"Export (web, iOS, Android)...","Export HTML5 (external websites)":"Export HTML5 (external websites)","Export as a HTML5 game":"Export as a HTML5 game","Export as a pack":"Export as a pack","Export as assets":"Export as assets","Export extension":"Export extension","Export failed. Check that the output folder is accessible and that you have the necessary permissions.":"Export failed. Check that the output folder is accessible and that you have the necessary permissions.","Export game":"Export game","Export in progress...":"Export in progress...","Export name":"Export name","Export the scene objects to a file and learn more about the submission process in the documentation.":"Export the scene objects to a file and learn more about the submission process in the documentation.","Export to a file":"Export to a file","Export your game":"Export your game","Export {0} assets":function(a){return["Export ",a("0")," assets"]},"Exporting...":"Exporting...","Exports":"Exports","Expression":"Expression","Expression and condition":"Expression and condition","Expression used to sort instances before iterating. It will be evaluated for each instance.":"Expression used to sort instances before iterating. It will be evaluated for each instance.","Extend":"Extend","Extend Featuring":"Extend Featuring","Extend width or height to fill screen (without cropping the game area)":"Extend width or height to fill screen (without cropping the game area)","Extension":"Extension","Extension (storing the custom object)":"Extension (storing the custom object)","Extension containing the new function":"Extension containing the new function","Extension global variables":"Extension global variables","Extension name":"Extension name","Extension scene variables":"Extension scene variables","Extension update":"Extension update","Extension updates":"Extension updates","Extension variables":"Extension variables","Extensions":"Extensions","Extensions ({0})":function(a){return["Extensions (",a("0"),")"]},"Extensions search":"Extensions search","External events":"External events","External layout":"External layout","External layout name":"External layout name","External layouts":"External layouts","Extra source files (experimental)":"Extra source files (experimental)","Extract":"Extract","Extract Events to a Function":"Extract Events to a Function","Extract as a custom object":"Extract as a custom object","Extract as an external layout":"Extract as an external layout","Extract the events in a function":"Extract the events in a function","Extreme score must be equal or higher than {extremeAllowedScoreMin}.":function(a){return["Extreme score must be equal or higher than ",a("extremeAllowedScoreMin"),"."]},"Extreme score must be lower than {extremeAllowedScoreMax}.":function(a){return["Extreme score must be lower than ",a("extremeAllowedScoreMax"),"."]},"FPS:":"FPS:","Facebook":"Facebook","Facebook Games":"Facebook Games","Facebook Instant Games":"Facebook Instant Games","False":"False","False (not checked)":"False (not checked)","Far plane distance":"Far plane distance","Featuring already active":"Featuring already active","Feedbacks":"Feedbacks","Field of view (in degrees)":"Field of view (in degrees)","File":"File","File history":"File history","File name":"File name","File(s) from your device":"File(s) from your device","Fill":"Fill","Fill automatically":"Fill automatically","Fill bucket":"Fill bucket","Fill color":"Fill color","Fill opacity (0-255)":"Fill opacity (0-255)","Fill proportionally":"Fill proportionally","Filter the logs by group":"Filter the logs by group","Filters":"Filters","Find how to implement the most common game mechanics and more":"Find how to implement the most common game mechanics and more","Find the complete documentation on everything":"Find the complete documentation on everything","Find the substitles in your language in the setting of each video.":"Find the substitles in your language in the setting of each video.","Find your finished game on the “Build” section. Or restart the tutorial by clicking on the card.":"Find your finished game on the “Build” section. Or restart the tutorial by clicking on the card.","Finish and close":"Finish and close","Finished":"Finished","Fire a Bullet":"Fire a Bullet","Fire bullets in an Asteroids game.":"Fire bullets in an Asteroids game.","Fire bullets in this Asteroids game. Get ready for a Star Wars show.":"Fire bullets in this Asteroids game. Get ready for a Star Wars show.","First (before other files)":"First (before other files)","First editor":"First editor","First name":"First name","Fit content to window":"Fit content to window","Fit to content":"Fit to content","Fix those issues to get the campaign up!":"Fix those issues to get the campaign up!","Flip along Z axis":"Flip along Z axis","Flip horizontally":"Flip horizontally","Flip vertically":"Flip vertically","Flow of particles (particles/seconds)":"Flow of particles (particles/seconds)","Folders":"Folders","Follow":"Follow","Follow GDevelop on socials and check your profile to get some free credits!":"Follow GDevelop on socials and check your profile to get some free credits!","Follow a character with scrolling background.":"Follow a character with scrolling background.","Follow this Castlevania-type character with the camera, while the background scrolls.":"Follow this Castlevania-type character with the camera, while the background scrolls.","Font":"Font","Font resource":"Font resource","For Education":"For Education","For Individuals":"For Individuals","For Teams":"For Teams","For a given video resource, only one video will be played in memory and displayed. If you put this object multiple times on the scene, all the instances will be displaying the exact same video (with the same timing and paused/played/stopped state).":"For a given video resource, only one video will be played in memory and displayed. If you put this object multiple times on the scene, all the instances will be displaying the exact same video (with the same timing and paused/played/stopped state).","For a pixel type font, you must disable the Smooth checkbox related to your texture in the game resources to disable anti-aliasing.":"For a pixel type font, you must disable the Smooth checkbox related to your texture in the game resources to disable anti-aliasing.","For most games, the default automatic loading of resources will be fine. This action should only be used when trying to avoid loading screens from appearing between scenes.":"For most games, the default automatic loading of resources will be fine. This action should only be used when trying to avoid loading screens from appearing between scenes.","For teachers and educators having the GDevelop Education subscription. Ready to use resources for teaching.":"For teachers and educators having the GDevelop Education subscription. Ready to use resources for teaching.","For the 3D change to take effect, close and reopen all currently opened scenes.":"For the 3D change to take effect, close and reopen all currently opened scenes.","For the lifecycle functions to be executed, you need the extension to be used in the game, either by having at least one action, condition or expression used, or a behavior of the extension added to an object. Otherwise, the extension won't be included in the game.":"For the lifecycle functions to be executed, you need the extension to be used in the game, either by having at least one action, condition or expression used, or a behavior of the extension added to an object. Otherwise, the extension won't be included in the game.","Force display both 2D and 3D objects":"Force display both 2D and 3D objects","Force display only 2D objects":"Force display only 2D objects","Force display only 3D objects":"Force display only 3D objects","Forfeit my redeemed subscription and continue":"Forfeit my redeemed subscription and continue","Form sent with success. You should receive an email in the next minutes.":"Form sent with success. You should receive an email in the next minutes.","Forum access":"Forum access","Forum account not found":"Forum account not found","Forum sync failed":"Forum sync failed","Forums":"Forums","Forward (Additional button, typically the Browser Forward button)":"Forward (Additional button, typically the Browser Forward button)","Found 1 match in 1 event sheet":"Found 1 match in 1 event sheet","Found 1 match in {0} event sheets":function(a){return["Found 1 match in ",a("0")," event sheets"]},"Found {totalMatchCount} matches in 1 event sheet":function(a){return["Found ",a("totalMatchCount")," matches in 1 event sheet"]},"Found {totalMatchCount} matches in {0} event sheets":function(a){return["Found ",a("totalMatchCount")," matches in ",a("0")," event sheets"]},"Frame":"Frame","Frame #{i}":function(a){return["Frame #",a("i")]},"Free":"Free","Free in-app tutorials":"Free in-app tutorials","Free instance":"Free instance","Free!":"Free!","Freehand brush":"Freehand brush","From the same author":"From the same author","Front face":"Front face","Full Game Asset Packs":"Full Game Asset Packs","Full name":"Full name","Full name displayed in editor":"Full name displayed in editor","Fun":"Fun","Function Configuration":"Function Configuration","Function name":"Function name","Function type":"Function type","Functions":"Functions","GDevelop 5":"GDevelop 5","GDevelop Bundles":"GDevelop Bundles","GDevelop Cloud":"GDevelop Cloud","GDevelop Website":"GDevelop Website","GDevelop app":"GDevelop app","GDevelop auto-save":"GDevelop auto-save","GDevelop automatically saved a newer version of this project on {0}. This new version might differ from the one that you manually saved. Which version would you like to open?":function(a){return["GDevelop automatically saved a newer version of this project on ",a("0"),". This new version might differ from the one that you manually saved. Which version would you like to open?"]},"GDevelop credits":"GDevelop credits","GDevelop games on gd.games":"GDevelop games on gd.games","GDevelop is a full-featured, open-source game engine. Build and publish games for any mobile, desktop or web game store. It's super fast, easy to learn and powered by a community making it better every day.":"GDevelop is a full-featured, open-source game engine. Build and publish games for any mobile, desktop or web game store. It's super fast, easy to learn and powered by a community making it better every day.","GDevelop logo style":"GDevelop logo style","GDevelop update ready":"GDevelop update ready","GDevelop update ready ({version})":function(a){return["GDevelop update ready (",a("version"),")"]},"GDevelop was created by Florian \"4ian\" Rival.":"GDevelop was created by Florian \"4ian\" Rival.","GDevelop was upgraded to a new version! Check out the changes.":"GDevelop was upgraded to a new version! Check out the changes.","GDevelop watermark placement":"GDevelop watermark placement","GDevelop website":"GDevelop website","GDevelop will save your progress, so you can take a break if you need.":"GDevelop will save your progress, so you can take a break if you need.","GDevelop's installation is corrupted and can't be used":"GDevelop's installation is corrupted and can't be used","GLB animation name":"GLB animation name","Game Dashboard":"Game Dashboard","Game Design":"Game Design","Game Development":"Game Development","Game Info":"Game Info","Game Scenes":"Game Scenes","Game already registered":"Game already registered","Game background":"Game background","Game configuration has been saved":"Game configuration has been saved","Game description":"Game description","Game earnings":"Game earnings","Game export":"Game export","Game for teaching or learning":"Game for teaching or learning","Game leaderboards":"Game leaderboards","Game mechanic":"Game mechanic","Game name":"Game name","Game name in the game URL":"Game name in the game URL","Game not found":"Game not found","Game personalisation":"Game personalisation","Game preview \"{id}\" ({0})":function(a){return["Game preview \"",a("id"),"\" (",a("0"),")"]},"Game properties":"Game properties","Game resolution height":"Game resolution height","Game resolution resize mode (fullscreen or window)":"Game resolution resize mode (fullscreen or window)","Game resolution width":"Game resolution width","Game scene size":"Game scene size","Game settings":"Game settings","Game template not found":"Game template not found","Game template not found - An error occurred, please try again later.":"Game template not found - An error occurred, please try again later.","Game templates will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this game template. (or restore your existing purchase).":"Game templates will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this game template. (or restore your existing purchase).","Gamepad":"Gamepad","Games":"Games","Games to learn or teach something":"Games to learn or teach something","Gaming portals (Itch.io, Poki, CrazyGames...)":"Gaming portals (Itch.io, Poki, CrazyGames...)","General":"General","General:":"General:","Generate a link":"Generate a link","Generate a new link":"Generate a new link","Generate a shareable link to your game.":"Generate a shareable link to your game.","Generate all your icons from 1 file":"Generate all your icons from 1 file","Generate expression and action":"Generate expression and action","Generate random name":"Generate random name","Generate report at each preview":"Generate report at each preview","Generating your student’s accounts...":"Generating your student’s accounts...","Generation hint":"Generation hint","Genres":"Genres","Get Featuring":"Get Featuring","Get GDevelop Premium":"Get GDevelop Premium","Get Premium":"Get Premium","Get a GDevelop subscription to increase the limits.":"Get a GDevelop subscription to increase the limits.","Get a Gold or Pro subscription to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"Get a Gold or Pro subscription to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).","Get a Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"Get a Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.","Get a Pro subscription to invite collaborators into your project.":"Get a Pro subscription to invite collaborators into your project.","Get a Sub":"Get a Sub","Get a pro subscription to get full leaderboard customization.":"Get a pro subscription to get full leaderboard customization.","Get a pro subscription to unlock custom CSS.":"Get a pro subscription to unlock custom CSS.","Get a sample in your email":"Get a sample in your email","Get a silver or gold subscription to disable GDevelop branding.":"Get a silver or gold subscription to disable GDevelop branding.","Get a silver or gold subscription to unlock color customization.":"Get a silver or gold subscription to unlock color customization.","Get a subscription":"Get a subscription","Get a subscription to keep building with AI.":"Get a subscription to keep building with AI.","Get a subscription to unlock this packaging.":"Get a subscription to unlock this packaging.","Get access":"Get access","Get access to an exclusive channel on the [GDevelop Discord](https://discord.gg/gdevelop) by subscribing to a Gold, Pro or Education plan.":"Get access to an exclusive channel on the [GDevelop Discord](https://discord.gg/gdevelop) by subscribing to a Gold, Pro or Education plan.","Get back online to browse the huge library of free and premium examples.":"Get back online to browse the huge library of free and premium examples.","Get credit packs":"Get credit packs","Get lesson with Edu":"Get lesson with Edu","Get more GDevelop credits to keep building with AI.":"Get more GDevelop credits to keep building with AI.","Get more credits":"Get more credits","Get more leaderboards":"Get more leaderboards","Get more players":"Get more players","Get more players on your game":"Get more players on your game","Get our teaching resources":"Get our teaching resources","Get perks and cloud benefits when getting closer to your game launch. <0>Learn more":"Get perks and cloud benefits when getting closer to your game launch. <0>Learn more","Get premium":"Get premium","Get subscription":"Get subscription","Get the app":"Get the app","Get {0}!":function(a){return["Get ",a("0"),"!"]},"Get {estimatedTotalPriceFormatted} worth of value for less!":function(a){return["Get ",a("estimatedTotalPriceFormatted")," worth of value for less!"]},"GitHub repository":"GitHub repository","Github":"Github","Give feedback on a game!":"Give feedback on a game!","Global Groups":"Global Groups","Global Objects":"Global Objects","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?":"Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?":"Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?","Global groups":"Global groups","Global objects":"Global objects","Global objects in the project":"Global objects in the project","Global search":"Global search","Global search (search in project)":"Global search (search in project)","Global variable":"Global variable","Global variables":"Global variables","Go back":"Go back","Go back to {translatedExpectedEditor}{sceneMention} to keep creating your game.":function(a){return["Go back to ",a("translatedExpectedEditor"),a("sceneMention")," to keep creating your game."]},"Go to [Apple Developer Certificates list](https://developer.apple.com/account/resources/certificates/list) and click on the + button. Choose **Apple Distribution** (for app store) or **Apple Development** (for testing on device). When requested, upload the request file you downloaded.":"Go to [Apple Developer Certificates list](https://developer.apple.com/account/resources/certificates/list) and click on the + button. Choose **Apple Distribution** (for app store) or **Apple Development** (for testing on device). When requested, upload the request file you downloaded.","Go to [Apple Developer Profiles list](https://developer.apple.com/account/resources/profiles/list) and click on the + button. Choose **App Store Connect** or **iOS App Development**. Then, choose *Xcode iOS Wildcard App ID*, then the certificate you created earlier. For development, you can choose [the devices you registered](https://developer.apple.com/help/account/register-devices/register-a-single-device/). Finish by downloading the generated file and upload it here so it can be stored securely by GDevelop.":"Go to [Apple Developer Profiles list](https://developer.apple.com/account/resources/profiles/list) and click on the + button. Choose **App Store Connect** or **iOS App Development**. Then, choose *Xcode iOS Wildcard App ID*, then the certificate you created earlier. For development, you can choose [the devices you registered](https://developer.apple.com/help/account/register-devices/register-a-single-device/). Finish by downloading the generated file and upload it here so it can be stored securely by GDevelop.","Go to first page":"Go to first page","Google":"Google","Google Play (or other stores)":"Google Play (or other stores)","Got it":"Got it","Got it! I've put together a plan:":"Got it! I've put together a plan:","Gravity on particles on X axis":"Gravity on particles on X axis","Gravity on particles on Y axis":"Gravity on particles on Y axis","Group name":"Group name","Group name cannot be empty.":"Group name cannot be empty.","Group: {0}":function(a){return["Group: ",a("0")]},"Groups":"Groups","HTML5":"HTML5","HTML5 (external websites)":"HTML5 (external websites)","Had no players in the last week":"Had no players in the last week","Had {countOfSessionsLastWeek} players in the last week":function(a){return["Had ",a("countOfSessionsLastWeek")," players in the last week"]},"Has animations (JavaScript only)":"Has animations (JavaScript only)","Have you changed your usage of GDevelop?":"Have you changed your usage of GDevelop?","Having the same collision masks for all animations will erase and reset all the other animations collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the animations of the object?":"Having the same collision masks for all animations will erase and reset all the other animations collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the animations of the object?","Having the same collision masks for all frames will erase and reset all the other frames collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the frames of the animation?":"Having the same collision masks for all frames will erase and reset all the other frames collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the frames of the animation?","Having the same points for all animations will erase and reset all the other animations points. This can't be undone. Are you sure you want to share these points amongst all the animations of the object?":"Having the same points for all animations will erase and reset all the other animations points. This can't be undone. Are you sure you want to share these points amongst all the animations of the object?","Having the same points for all frames will erase and reset all the other frames points. This can't be undone. Are you sure you want to share these points amongst all the frames of the animation?":"Having the same points for all frames will erase and reset all the other frames points. This can't be undone. Are you sure you want to share these points amongst all the frames of the animation?","Health bar":"Health bar","Height":"Height","Help":"Help","Help for this action":"Help for this action","Help for this condition":"Help for this condition","Help page URL":"Help page URL","Help translate GDevelop":"Help translate GDevelop","Help us improve by telling us what could be improved:":"Help us improve by telling us what could be improved:","Help us improve our learning content":"Help us improve our learning content","Here are your redemption codes:":"Here are your redemption codes:","Here's how I'll tackle this:":"Here's how I'll tackle this:","Hidden":"Hidden","Hidden on gd.games":"Hidden on gd.games","Hide deprecated behaviors (prefer not to use anymore)":"Hide deprecated behaviors (prefer not to use anymore)","Hide details":"Hide details","Hide effect":"Hide effect","Hide experimental behaviors":"Hide experimental behaviors","Hide experimental extensions":"Hide experimental extensions","Hide experimental objects":"Hide experimental objects","Hide lifecycle functions (advanced)":"Hide lifecycle functions (advanced)","Hide other lifecycle functions (advanced)":"Hide other lifecycle functions (advanced)","Hide the AI assistant?":"Hide the AI assistant?","Hide the layer":"Hide the layer","Hide the leaderboard":"Hide the leaderboard","Hide the menu bar in the preview window":"Hide the menu bar in the preview window","Hide this hint?":"Hide this hint?","High quality":"High quality","Higher is better":"Higher is better","Higher is better (max: {formattedScore})":function(a){return["Higher is better (max: ",a("formattedScore"),")"]},"Highlight background color":"Highlight background color","Highlight text color":"Highlight text color","Hobbyists and indie devs":"Hobbyists and indie devs","Home page":"Home page","Homepage":"Homepage","Horizontal anchor":"Horizontal anchor","Horizontal flip":"Horizontal flip","Horror":"Horror","Hours":"Hours","How are you learning game dev?":"How are you learning game dev?","How are you working on your projects?":"How are you working on your projects?","How many students do you want to create?":"How many students do you want to create?","How to make my game more fun?":"How to make my game more fun?","How would you rate this chapter?":"How would you rate this chapter?","Huge":"Huge","I am learning game development":"I am learning game development","I am teaching game development":"I am teaching game development","I don’t have a specific deadline":"I don’t have a specific deadline","I have encountered bugs or performance problems":"I have encountered bugs or performance problems","I trust this project":"I trust this project","I want to add a leaderboard":"I want to add a leaderboard","I want to add an explosion when an enemy is destroyed":"I want to add an explosion when an enemy is destroyed","I want to create a main menu for my game":"I want to create a main menu for my game","I want to display the health of my player":"I want to display the health of my player","I want to receive the GDevelop Newsletter":"I want to receive the GDevelop Newsletter","I want to receive weekly stats about my games":"I want to receive weekly stats about my games","I'll do it later":"I'll do it later","I'm building a video game or app":"I'm building a video game or app","I'm learning or teaching game development":"I'm learning or teaching game development","I'm struggling to create what I want":"I'm struggling to create what I want","I've broken this into steps — let me walk you through it:":"I've broken this into steps — let me walk you through it:","I've mapped out a plan — here's what I'll do:":"I've mapped out a plan — here's what I'll do:","I've stopped using GDevelop":"I've stopped using GDevelop","I've thought this through — here's the plan:":"I've thought this through — here's the plan:","IDE":"IDE","IPA for App Store":"IPA for App Store","IPA for testing on registered devices":"IPA for testing on registered devices","Icon URL":"Icon URL","Icon and [DEPRECATED] text":"Icon and [DEPRECATED] text","Icon only":"Icon only","Icons":"Icons","Identifier":"Identifier","Identifier (text)":"Identifier (text)","Identifier name":"Identifier name","If activated, players won't be able to log in and claim a score just sent without being already logged in to the game.":"If activated, players won't be able to log in and claim a score just sent without being already logged in to the game.","If checked, player names will always be auto-generated, even if the game sent a custom name. Helpful if you're having a leaderboard where you want full anonymity.":"If checked, player names will always be auto-generated, even if the game sent a custom name. Helpful if you're having a leaderboard where you want full anonymity.","If no previous condition or action used the specified object(s), the picked instances count will be 0.":"If no previous condition or action used the specified object(s), the picked instances count will be 0.","If the parameter is a string or a number, you probably want to use the expressions \"GetArgumentAsString\" or \"GetArgumentAsNumber\", along with the conditions \"Compare two strings\" or \"Compare two numbers\".":"If the parameter is a string or a number, you probably want to use the expressions \"GetArgumentAsString\" or \"GetArgumentAsNumber\", along with the conditions \"Compare two strings\" or \"Compare two numbers\".","If you are in a browser, ensure you close all GDevelop tabs or restart the browser.":"If you are in a browser, ensure you close all GDevelop tabs or restart the browser.","If you are on desktop, please re-install it by downloading the latest version from <0>the website":"If you are on desktop, please re-install it by downloading the latest version from <0>the website","If you close this window while the build is being done, you can see its progress and download the game later by clicking on See All My Builds below.":"If you close this window while the build is being done, you can see its progress and download the game later by clicking on See All My Builds below.","If you don't have access to it, restart GDevelop. If you still can't access it, please contact us.":"If you don't have access to it, restart GDevelop. If you still can't access it, please contact us.","If you have a popup blocker interrupting the opening, allow the popups and try a second time to open the project.":"If you have a popup blocker interrupting the opening, allow the popups and try a second time to open the project.","If you skip this step, you can still do it manually later from the leaderboards panel in your Games Dashboard.":"If you skip this step, you can still do it manually later from the leaderboards panel in your Games Dashboard.","Ignore":"Ignore","Ignore and continue":"Ignore and continue","Image":"Image","Image resource":"Image resource","Implementation":"Implementation","Implementation steps:":"Implementation steps:","Implementing in-project monetization":"Implementing in-project monetization","Import":"Import","Import assets":"Import assets","Import extension":"Import extension","Import images":"Import images","Import one or more animations that are available in this Spine file.":"Import one or more animations that are available in this Spine file.","Importing project resources":"Importing project resources","Importing resources outside from the project folder":"Importing resources outside from the project folder","Improve and publish your Game":"Improve and publish your Game","In around a year":"In around a year","In order to purchase a marketing boost, log-in and select a game in your dashboard.":"In order to purchase a marketing boost, log-in and select a game in your dashboard.","In order to see your objects in the scene, you need to add an action \"Create objects from external layout\" in your events sheet.":"In order to see your objects in the scene, you need to add an action \"Create objects from external layout\" in your events sheet.","In order to use these external events, you still need to add a \"Link\" event in the events sheet of the corresponding scene":"In order to use these external events, you still need to add a \"Link\" event in the events sheet of the corresponding scene","In pixels.":"In pixels.","In pixels. 0 to ignore.":"In pixels. 0 to ignore.","In this tutorial you will learn:":"In this tutorial you will learn:","In-app Tutorials":"In-app Tutorials","In-game obstacles":"In-game obstacles","Include events from":"Include events from","Include store extensions":"Include store extensions","Included":"Included","Included in this bundle":"Included in this bundle","Included with GDevelop subscriptions":"Included with GDevelop subscriptions","Incompatible with the object":"Incompatible with the object","Increase seats":"Increase seats","Increase version number to {0}":function(a){return["Increase version number to ",a("0")]},"Indent Scale in Events Sheet":"Indent Scale in Events Sheet","Inferred type":"Inferred type","Initial text of the variable":"Initial text of the variable","Initial text to display":"Initial text to display","Input":"Input","Insert new...":"Insert new...","Inspect the game structure.":"Inspect the game structure.","Inspectors":"Inspectors","Instagram":"Instagram","Install again":"Install again","Install all the assets":"Install all the assets","Install font":"Install font","Install in project":"Install in project","Install the missing assets":"Install the missing assets","Installed as an app. No updates available.":"Installed as an app. No updates available.","Installing assets...":"Installing assets...","Instance":"Instance","Instance Variables":"Instance Variables","Instance properties":"Instance properties","Instance variables":"Instance variables","Instance variables overwrite the default values of the variables of the object.":"Instance variables overwrite the default values of the variables of the object.","Instance variables:":"Instance variables:","Instances":"Instances","Instances List":"Instances List","Instances editor":"Instances editor","Instances editor rendering":"Instances editor rendering","Instances editor.":"Instances editor.","Instances list":"Instances list","Instant":"Instant","Instant Games":"Instant Games","Instant or permanent force":"Instant or permanent force","Instead of <0>{0}":function(a){return["Instead of <0>",a("0"),""]},"Instruction":"Instruction","Instruction editor":"Instruction editor","Interaction Design":"Interaction Design","Interactive content":"Interactive content","Intermediate":"Intermediate","Intermediate course":"Intermediate course","Internal Name":"Internal Name","Internal instruction names":"Internal instruction names","Invalid email address":"Invalid email address","Invalid email address.":"Invalid email address.","Invalid file":"Invalid file","Invalid name":"Invalid name","Invalid parameters in events ({invalidParametersCount})":function(a){return["Invalid parameters in events (",a("invalidParametersCount"),")"]},"Invert Condition":"Invert Condition","Invert condition":"Invert condition","Invitation already accepted":"Invitation already accepted","Invitation sent to {lastInvitedEmail}.":function(a){return["Invitation sent to ",a("lastInvitedEmail"),"."]},"Invite":"Invite","Invite a student":"Invite a student","Invite a teacher":"Invite a teacher","Invite collaborators":"Invite collaborators","Invite students":"Invite students","Invite teacher":"Invite teacher","Inviting a user will provide them admin capabilities over the student accounts, as well as all the subscription perks. Only accounts without an existing subscription can be invited.":"Inviting a user will provide them admin capabilities over the student accounts, as well as all the subscription perks. Only accounts without an existing subscription can be invited.","Is not published on gd.games":"Is not published on gd.games","Is published on gd.games":"Is published on gd.games","Is the average time a player spends in the game.":"Is the average time a player spends in the game.","Is there anything that you struggle with while working on your projects?":"Is there anything that you struggle with while working on your projects?","Isometric":"Isometric","It didn't do enough":"It didn't do enough","It didn't work at all":"It didn't work at all","It is already installed/available in the project.":"It is already installed/available in the project.","It is part of behavior <0/> from extension <1/>.":"It is part of behavior <0/> from extension <1/>.","It is part of extension <0/> {0} .":function(a){return["It is part of extension <0/> ",a("0")," ."]},"It is part of object <0/> from extension <1/>.":"It is part of object <0/> from extension <1/>.","It looks like the build has timed out, please try again.":"It looks like the build has timed out, please try again.","It seems you entered a name with a quote. Variable names should not be quoted.":"It seems you entered a name with a quote. Variable names should not be quoted.","It will be downloaded and installed automatically.":"It will be downloaded and installed automatically.","It's missing a feature (please specify)":"It's missing a feature (please specify)","Italic":"Italic","Itch.io, Poki, CrazyGames...":"Itch.io, Poki, CrazyGames...","JSON resource":"JSON resource","JavaScript file":"JavaScript file","JavaScript files are imported as is (no compilation and not available in JavaScript code block autocompletions). Make sure your extension is used by the game (at least one action/condition used in a scene), otherwise the files won't be imported.":"JavaScript files are imported as is (no compilation and not available in JavaScript code block autocompletions). Make sure your extension is used by the game (at least one action/condition used in a scene), otherwise the files won't be imported.","JavaScript files must be imported by an extension - by choosing it the extension properties. Otherwise, it won't be loaded by the game.":"JavaScript files must be imported by an extension - by choosing it the extension properties. Otherwise, it won't be loaded by the game.","Join the discussion":"Join the discussion","Joystick controls":"Joystick controls","Json":"Json","Jump forward in time on creation (in seconds)":"Jump forward in time on creation (in seconds)","Just now":"Just now","Keep centered (best for game content)":"Keep centered (best for game content)","Keep learning":"Keep learning","Keep ratio":"Keep ratio","Keep subscription":"Keep subscription","Keep the new project linked to this game":"Keep the new project linked to this game","Keep their original location":"Keep their original location","Keep top-left corner fixed (best for content that can extend)":"Keep top-left corner fixed (best for content that can extend)","Keyboard":"Keyboard","Keyboard Key (deprecated)":"Keyboard Key (deprecated)","Keyboard Key (text)":"Keyboard Key (text)","Keyboard Shortcuts":"Keyboard Shortcuts","Keyboard key":"Keyboard key","Keyboard key (text)":"Keyboard key (text)","Label":"Label","Label displayed in editor":"Label displayed in editor","Lack of Graphics & Animation":"Lack of Graphics & Animation","Lack of Marketing & Publicity":"Lack of Marketing & Publicity","Lack of Music & Sound":"Lack of Music & Sound","Landscape":"Landscape","Language":"Language","Last (after other files)":"Last (after other files)","Last edited":"Last edited","Last edited:":"Last edited:","Last modified":"Last modified","Last name":"Last name","Last run collected on {0} frames.":function(a){return["Last run collected on ",a("0")," frames."]},"Latest save":"Latest save","Launch network preview over WiFi/LAN":"Launch network preview over WiFi/LAN","Launch new preview":"Launch new preview","Launch preview in...":"Launch preview in...","Launch preview with debugger and profiler":"Launch preview with debugger and profiler","Launch preview with diagnostic report":"Launch preview with diagnostic report","Layer":"Layer","Layer (text)":"Layer (text)","Layer effect (text)":"Layer effect (text)","Layer effect name":"Layer effect name","Layer effect property (text)":"Layer effect property (text)","Layer effect property name":"Layer effect property name","Layer properties":"Layer properties","Layer where instances are added by default":"Layer where instances are added by default","Layers":"Layers","Layers list":"Layers list","Layers:":"Layers:","Layouts":"Layouts","Leaderboard":"Leaderboard","Leaderboard (text)":"Leaderboard (text)","Leaderboard appearance":"Leaderboard appearance","Leaderboard name":"Leaderboard name","Leaderboard options":"Leaderboard options","Leaderboards":"Leaderboards","Leaderboards help retain your players":"Leaderboards help retain your players","Learn":"Learn","Learn about revenue on gd.games":"Learn about revenue on gd.games","Learn all the game-building mechanics of GDevelop":"Learn all the game-building mechanics of GDevelop","Learn by dissecting ready-made games":"Learn by dissecting ready-made games","Learn how to make <0>multiplayer games with GDevelop.":"Learn how to make <0>multiplayer games with GDevelop.","Learn how to use <0>leaderboards on GDevelop.":"Learn how to use <0>leaderboards on GDevelop.","Learn more":"Learn more","Learn more about Instant Games publication":"Learn more about Instant Games publication","Learn more about manual builds":"Learn more about manual builds","Learn more about publishing to platforms":"Learn more about publishing to platforms","Learn section":"Learn section","Learn the fundamental principles of GDevelop":"Learn the fundamental principles of GDevelop","Leave":"Leave","Leave and lose all changes":"Leave and lose all changes","Leave the customization?":"Leave the customization?","Leave the tutorial":"Leave the tutorial","Left":"Left","Left (primary)":"Left (primary)","Left bound":"Left bound","Left bound should be smaller than right bound":"Left bound should be smaller than right bound","Left face":"Left face","Left margin":"Left margin","Length":"Length","Less than a month":"Less than a month","Let me lay out the steps:":"Let me lay out the steps:","Let the user select":"Let the user select","Let's finish your game, shall we?":"Let's finish your game, shall we?","Let's go":"Let's go","Level {0}":function(a){return["Level ",a("0")]},"License":"License","Licensing":"Licensing","Lifecycle functions (advanced)":"Lifecycle functions (advanced)","Lifecycle functions only included when extension used":"Lifecycle functions only included when extension used","Lifecycle methods":"Lifecycle methods","Lifetime access":"Lifetime access","Light (colored)":"Light (colored)","Light (plain)":"Light (plain)","Light object automatically put in lighting layer":"Light object automatically put in lighting layer","Lighting settings":"Lighting settings","Limit cannot be empty, uncheck or fill a value between {extremeAllowedScoreMin} and {extremeAllowedScoreMax}.":function(a){return["Limit cannot be empty, uncheck or fill a value between ",a("extremeAllowedScoreMin")," and ",a("extremeAllowedScoreMax"),"."]},"Limit scores":"Limit scores","Limited time offer:":"Limited time offer:","Line":"Line","Line color":"Line color","Line height":"Line height","Linear (antialiased rendering, good for most games)":"Linear (antialiased rendering, good for most games)","Lines length":"Lines length","Lines thickness":"Lines thickness","Links can't be used outside of a scene.":"Links can't be used outside of a scene.","Linux (AppImage)":"Linux (AppImage)","Live Ops & Analytics":"Live Ops & Analytics","Live preview (apply changes to the running preview)":"Live preview (apply changes to the running preview)","Load autosave":"Load autosave","Load local lesson":"Load local lesson","Load more":"Load more","Load more...":"Load more...","Loading":"Loading","Loading Position":"Loading Position","Loading course...":"Loading course...","Loading preview...":"Loading preview...","Loading screen":"Loading screen","Loading the game link...":"Loading the game link...","Loading the game...":"Loading the game...","Loading your profile...":"Loading your profile...","Loading...":"Loading...","Lobby":"Lobby","Lobby configuration":"Lobby configuration","Local Variable":"Local Variable","Local variables":"Local variables","Locate file":"Locate file","Location":"Location","Lock position/angle in the editor":"Lock position/angle in the editor","Locked":"Locked","Log in":"Log in","Log in to your account":"Log in to your account","Log in to your account to activate your purchase!":"Log in to your account to activate your purchase!","Log-in to purchase these credits":"Log-in to purchase these credits","Log-in to purchase this course":"Log-in to purchase this course","Log-in to purchase this item":"Log-in to purchase this item","Login":"Login","Login now":"Login now","Login with GDevelop":"Login with GDevelop","Logo and progress fade in delay (in seconds)":"Logo and progress fade in delay (in seconds)","Logo and progress fade in duration (in seconds)":"Logo and progress fade in duration (in seconds)","Logout":"Logout","Long":"Long","Long description":"Long description","Long press for more events":"Long press for more events","Long press for quick menu":"Long press for quick menu","Looks like your project isn't there!{0}Your project must be stored on your computer.":function(a){return["Looks like your project isn't there!",a("0"),"Your project must be stored on your computer."]},"Loop":"Loop","Loop Counter Variable":"Loop Counter Variable","Low quality":"Low quality","Lower is better":"Lower is better","Lower is better (min: {formattedScore})":function(a){return["Lower is better (min: ",a("formattedScore"),")"]},"Make a character move like in a retro Pokemon game.":"Make a character move like in a retro Pokemon game.","Make a knight jump and run in this platformer game.":"Make a knight jump and run in this platformer game.","Make a knight jump and run.":"Make a knight jump and run.","Make a minimal 3D shooter":"Make a minimal 3D shooter","Make an entire game":"Make an entire game","Make asynchronous":"Make asynchronous","Make complete games step by step":"Make complete games step by step","Make it a Else for the previous event":"Make it a Else for the previous event","Make private":"Make private","Make public":"Make public","Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.":"Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.","Make sure to verify all your events creating objects, and optionally add an action to set the Z order back to 0 if it's important for your game. Do you want to continue (recommended)?":"Make sure to verify all your events creating objects, and optionally add an action to set the Z order back to 0 if it's important for your game. Do you want to continue (recommended)?","Make sure to verify your events and variables that may rely on string variables defaulting to \"0\". Do you want to continue (recommended)?":"Make sure to verify your events and variables that may rely on string variables defaulting to \"0\". Do you want to continue (recommended)?","Make sure you create your GitHub account, star the repository called 4ian/GDevelop, enter your username here and try again.":"Make sure you create your GitHub account, star the repository called 4ian/GDevelop, enter your username here and try again.","Make sure you follow the GDevelop account and try again.":"Make sure you follow the GDevelop account and try again.","Make sure you have a proper internet connection or try again later.":"Make sure you have a proper internet connection or try again later.","Make sure you star the repository called 4ian/GDevelop with your GitHub user and try again.":"Make sure you star the repository called 4ian/GDevelop with your GitHub user and try again.","Make sure you subscribed to the GDevelop channel and try again.":"Make sure you subscribed to the GDevelop channel and try again.","Make sure you're online, have a proper internet connection and try again. If you download and use GDevelop desktop application, you can also run previews without any internet connection.":"Make sure you're online, have a proper internet connection and try again. If you download and use GDevelop desktop application, you can also run previews without any internet connection.","Make sure your username is correct, follow the GDevelop account and try again.":"Make sure your username is correct, follow the GDevelop account and try again.","Make sure your username is correct, subscribe to the GDevelop channel and try again.":"Make sure your username is correct, subscribe to the GDevelop channel and try again.","Make synchronous":"Make synchronous","Make the leaderboard public":"Make the leaderboard public","Make the purpose of the property easy to understand":"Make the purpose of the property easy to understand","Make your game title":"Make your game title","Make your game visible to the GDevelop community and to the world with <0>Marketing Boosts.":"Make your game visible to the GDevelop community and to the world with <0>Marketing Boosts.","Make your game visible to the GDevelop community and to the world with Marketing Boosts.":"Make your game visible to the GDevelop community and to the world with Marketing Boosts.","Make your game visible to the GDevelop community and to the world with Marketing Boosts. <0>Read more about how they increase your views.":"Make your game visible to the GDevelop community and to the world with Marketing Boosts. <0>Read more about how they increase your views.","Making \"{objectOrGroupName}\" global would conflict with the following scenes that have a group or an object with the same name:{0}Continue only if you know what you're doing.":function(a){return["Making \"",a("objectOrGroupName"),"\" global would conflict with the following scenes that have a group or an object with the same name:",a("0"),"Continue only if you know what you're doing."]},"Manage":"Manage","Manage game online":"Manage game online","Manage leaderboards":"Manage leaderboards","Manage payments":"Manage payments","Manage seats":"Manage seats","Manage subscription":"Manage subscription","Manual build":"Manual build","Mark all as read":"Mark all as read","Mark all as solved":"Mark all as solved","Mark as read":"Mark as read","Mark as unread":"Mark as unread","Mark this function as deprecated to discourage its use.":"Mark this function as deprecated to discourage its use.","Marketing":"Marketing","Marketing campaigns":"Marketing campaigns","Match case":"Match case","Maximum 2D drawing distance":"Maximum 2D drawing distance","Maximum FPS (0 for unlimited)":"Maximum FPS (0 for unlimited)","Maximum Fps is too low":"Maximum Fps is too low","Maximum emitter force applied on particles":"Maximum emitter force applied on particles","Maximum number of particles displayed":"Maximum number of particles displayed","Maximum number of players per lobby":"Maximum number of players per lobby","Maximum score":"Maximum score","Me":"Me","Mean played time":"Mean played time","Measurement unit":"Measurement unit","Medium":"Medium","Medium quality":"Medium quality","Memory Tracker Registry":"Memory Tracker Registry","Menu":"Menu","Mesh shapes are only supported for 3D model objects.":"Mesh shapes are only supported for 3D model objects.","Message":"Message","Middle (Auxiliary button, usually the wheel button)":"Middle (Auxiliary button, usually the wheel button)","Minimize":"Minimize","Minimum FPS":"Minimum FPS","Minimum Fps is too low":"Minimum Fps is too low","Minimum duration of the screen (in seconds)":"Minimum duration of the screen (in seconds)","Minimum emitter force applied on particles":"Minimum emitter force applied on particles","Minimum number of players to start the lobby":"Minimum number of players to start the lobby","Minimum score":"Minimum score","Minutes":"Minutes","Missing actions/conditions/expressions ( {missingInstructionsCount})":function(a){return["Missing actions/conditions/expressions ( ",a("missingInstructionsCount"),")"]},"Missing behaviors for object \"{objectName}\"":function(a){return["Missing behaviors for object \"",a("objectName"),"\""]},"Missing instructions":"Missing instructions","Missing objects":"Missing objects","Missing scene variables":"Missing scene variables","Missing some contributions? If you are the author, create a Pull Request on the corresponding GitHub repository after adding your username in the authors of the example or the extension - or directly ask the original author to add your username.":"Missing some contributions? If you are the author, create a Pull Request on the corresponding GitHub repository after adding your username in the authors of the example or the extension - or directly ask the original author to add your username.","Missing texture atlas name in the Spine file.":"Missing texture atlas name in the Spine file.","Missing texture for an atlas in the Spine file.":"Missing texture for an atlas in the Spine file.","Missing variables for object \"{objectName}\"":function(a){return["Missing variables for object \"",a("objectName"),"\""]},"Mixed":"Mixed","Mixed values":"Mixed values","Mobile":"Mobile","Mobile portrait":"Mobile portrait","Modifying":"Modifying","Month":"Month","Monthly, {0}":function(a){return["Monthly, ",a("0")]},"Monthly, {0} per seat":function(a){return["Monthly, ",a("0")," per seat"]},"More details (optional)":"More details (optional)","More than 6 months":"More than 6 months","Most browsers will require the user to have interacted with your game before allowing any video to play. Make sure that the player click/touch the screen at the beginning of the game before starting any video.":"Most browsers will require the user to have interacted with your game before allowing any video to play. Make sure that the player click/touch the screen at the beginning of the game before starting any video.","Most monitors have a refresh rate of 60 FPS. Setting a maximum number of FPS under 60 will force the game to skip frames, and the real number of FPS will be way below 60, making the game laggy and impacting the gameplay negatively. Consider putting 60 or more for the maximum number or FPS, or disable it by setting 0.":"Most monitors have a refresh rate of 60 FPS. Setting a maximum number of FPS under 60 will force the game to skip frames, and the real number of FPS will be way below 60, making the game laggy and impacting the gameplay negatively. Consider putting 60 or more for the maximum number or FPS, or disable it by setting 0.","Most sessions (all time)":"Most sessions (all time)","Most sessions (past 7 days)":"Most sessions (past 7 days)","Mouse button":"Mouse button","Mouse button (deprecated)":"Mouse button (deprecated)","Mouse button (text)":"Mouse button (text)","Move Events into a Group":"Move Events into a Group","Move down":"Move down","Move events into a new group":"Move events into a new group","Move instances":"Move instances","Move like in retro Pokemon games.":"Move like in retro Pokemon games.","Move objects":"Move objects","Move objects from layer {0} to:":function(a){return["Move objects from layer ",a("0")," to:"]},"Move to bottom":"Move to bottom","Move to folder":"Move to folder","Move to position {index}":function(a){return["Move to position ",a("index")]},"Move to top":"Move to top","Move up":"Move up","Move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["Move ",a("existingInstanceCount")," <0>",a("object_name")," instance(s) to ",a("0")," (layer: ",a("1"),") in scene ",a("scene_name"),"."]},"Movement":"Movement","Multiline":"Multiline","Multiline text":"Multiline text","Multiplayer":"Multiplayer","Multiplayer lobbies":"Multiplayer lobbies","Multiple files, saved in folder next to the main file":"Multiple files, saved in folder next to the main file","Multiple frames":"Multiple frames","Multiple states":"Multiple states","Multiply scores with collectibles.":"Multiply scores with collectibles.","Music":"Music","Musics will only be played if the user has interacted with the game before (by clicking/touching it or pressing a key on the keyboard). This is due to browser limitations. Make sure to have the user interact with the game before using this action.":"Musics will only be played if the user has interacted with the game before (by clicking/touching it or pressing a key on the keyboard). This is due to browser limitations. Make sure to have the user interact with the game before using this action.","My Profile":"My Profile","My manual save":"My manual save","My profile":"My profile","MyObject":"MyObject","NPM":"NPM","Name":"Name","Name (optional)":"Name (optional)","Name displayed in editor":"Name displayed in editor","Name of the external layout":"Name of the external layout","Name version":"Name version","Narrative & Writing":"Narrative & Writing","Near plane distance":"Near plane distance","Nearest (no antialiasing, good for pixel perfect games)":"Nearest (no antialiasing, good for pixel perfect games)","Need latest GDevelop version":"Need latest GDevelop version","Need more?":"Need more?","Network":"Network","Never":"Never","Never preload":"Never preload","Never unload":"Never unload","Never unload (default)":"Never unload (default)","New":"New","New 3D editor":"New 3D editor","New Apple Certificate/Profile":"New Apple Certificate/Profile","New Auth Key (App Store upload)":"New Auth Key (App Store upload)","New Event Below":"New Event Below","New Object dialog":"New Object dialog","New chat":"New chat","New extension name":"New extension name","New group name":"New group name","New interactive services for clients":"New interactive services for clients","New lesson every month with the Education subscription":"New lesson every month with the Education subscription","New object":"New object","New object from scratch":"New object from scratch","New resource":"New resource","New variant":"New variant","Next":"Next","Next actions (and sub-events) will wait for this action to be finished before running.":"Next actions (and sub-events) will wait for this action to be finished before running.","Next page":"Next page","Next: Game logo":"Next: Game logo","Next: Tweak Gameplay":"Next: Tweak Gameplay","No":"No","No GDevelop user with this email can be found.":"No GDevelop user with this email can be found.","No access to project save":"No access to project save","No atlas image configured.":"No atlas image configured.","No behavior":"No behavior","No bio defined.":"No bio defined.","No changes to the game size":"No changes to the game size","No children":"No children","No cycle":"No cycle","No data to show yet. Share your game creator profile with more people to get more players!":"No data to show yet. Share your game creator profile with more people to get more players!","No entries":"No entries","No experience at all":"No experience at all","No forum account was found with email {0}. Make sure you have created an account on the GDevelop forum with this email.":function(a){return["No forum account was found with email ",a("0"),". Make sure you have created an account on the GDevelop forum with this email."]},"No game matching your search.":"No game matching your search.","No information about available updates.":"No information about available updates.","No inspector, choose another element in the list or toggle the raw data view.":"No inspector, choose another element in the list or toggle the raw data view.","No issues found in your project.":"No issues found in your project.","No leaderboard chosen":"No leaderboard chosen","No leaderboards":"No leaderboards","No lighting effect":"No lighting effect","No link defined.":"No link defined.","No matches found for \"{0}\".":function(a){return["No matches found for \"",a("0"),"\"."]},"No new animation":"No new animation","No options":"No options","No preview running. Run a preview and you will be able to inspect it with the debugger":"No preview running. Run a preview and you will be able to inspect it with the debugger","No project save available":"No project save available","No project save is available for this request message.":"No project save is available for this request message.","No project to open":"No project to open","No projects found for this game. Open manually a local project to have it added to the game dashboard.":"No projects found for this game. Open manually a local project to have it added to the game dashboard.","No projects yet.":"No projects yet.","No recent project":"No recent project","No result":"No result","No results":"No results","No results returned for your search. Try something else or typing at least 2 characters.":"No results returned for your search. Try something else or typing at least 2 characters.","No results returned for your search. Try something else!":"No results returned for your search. Try something else!","No results returned for your search. Try something else, browse the categories or create your object from scratch!":"No results returned for your search. Try something else, browse the categories or create your object from scratch!","No shortcut":"No shortcut","No similar asset was found.":"No similar asset was found.","No thumbnail":"No thumbnail","No thumbnail for your game, you can update it in your Game Dashboard!":"No thumbnail for your game, you can update it in your Game Dashboard!","No update available. You're using the latest version!":"No update available. You're using the latest version!","No uses left":"No uses left","No variable":"No variable","No warning":"No warning","No, close project":"No, close project","None":"None","Not applicable":"Not applicable","Not applicable to this plan":"Not applicable to this plan","Not compatible":"Not compatible","Not installed as an app. No updates available.":"Not installed as an app. No updates available.","Not now, thanks!":"Not now, thanks!","Not on mobile":"Not on mobile","Not published":"Not published","Not set":"Not set","Not stored":"Not stored","Not sure how many credits you need? Check <0>this guide to help you decide.":"Not sure how many credits you need? Check <0>this guide to help you decide.","Not visible":"Not visible","Note that the distinction between what is a mobile device and what is not is becoming blurry (with devices like iPad pro and other \"desktop-class\" tablets). If you use this for mobile controls, prefer to check if the device has touchscreen support.":"Note that the distinction between what is a mobile device and what is not is becoming blurry (with devices like iPad pro and other \"desktop-class\" tablets). If you use this for mobile controls, prefer to check if the device has touchscreen support.","Note that this option will only have an effect when saving your project on your computer's filesystem from the desktop app. Read about [using Git or GitHub with projects in multiple files](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/).":"Note that this option will only have an effect when saving your project on your computer's filesystem from the desktop app. Read about [using Git or GitHub with projects in multiple files](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/).","Note: write _PARAMx_ for parameters, e.g: Flash _PARAM1_ for 5 seconds":"Note: write _PARAMx_ for parameters, e.g: Flash _PARAM1_ for 5 seconds","Nothing corresponding to your search":"Nothing corresponding to your search","Nothing corresponding to your search. Try browsing the list instead.":"Nothing corresponding to your search. Try browsing the list instead.","Nothing to configure for this behavior.":"Nothing to configure for this behavior.","Nothing to configure for this effect.":"Nothing to configure for this effect.","Notifications":"Notifications","Number":"Number","Number between 0 and 1":"Number between 0 and 1","Number from a list of options (number)":"Number from a list of options (number)","Number of entries to display":"Number of entries to display","Number of particles in tank (-1 for infinite)":"Number of particles in tank (-1 for infinite)","Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.":"Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.","Number of seats":"Number of seats","Number of students":"Number of students","OK":"OK","OWNED":"OWNED","Object":"Object","Object Configuration":"Object Configuration","Object Groups":"Object Groups","Object Name":"Object Name","Object Variables":"Object Variables","Object animation (text)":"Object animation (text)","Object animation name":"Object animation name","Object editor":"Object editor","Object effect (text)":"Object effect (text)","Object effect name":"Object effect name","Object effect property (text)":"Object effect property (text)","Object effect property name":"Object effect property name","Object filters":"Object filters","Object group":"Object group","Object group properties":"Object group properties","Object groups":"Object groups","Object groups list":"Object groups list","Object name":"Object name","Object on which this behavior can be used":"Object on which this behavior can be used","Object point (text)":"Object point (text)","Object point name":"Object point name","Object properties":"Object properties","Object skin name":"Object skin name","Object type":"Object type","Object variable":"Object variable","Object's children":"Object's children","Object's children groups":"Object's children groups","Object's groups":"Object's groups","Objects":"Objects","Objects and characters":"Objects and characters","Objects created using events on this layer will be given a \"Z order\" of {0}, so that they appear in front of all objects of this layer. You can change this using the action to change an object Z order, after using an action to create it.":function(a){return["Objects created using events on this layer will be given a \"Z order\" of ",a("0"),", so that they appear in front of all objects of this layer. You can change this using the action to change an object Z order, after using an action to create it."]},"Objects groups":"Objects groups","Objects inside custom objects can't contain the following behaviors:":"Objects inside custom objects can't contain the following behaviors:","Objects list":"Objects list","Objects on {0}":function(a){return["Objects on ",a("0")]},"Objects or groups being directly referenced in the events: {0}":function(a){return["Objects or groups being directly referenced in the events: ",a("0")]},"Objects used with wrong actions or conditions":"Objects used with wrong actions or conditions","Official Game Dev courses":"Official Game Dev courses","Oh no! Your subscription from the redemption code has expired. You can renew it by redeeming a new code or getting a new subscription.":"Oh no! Your subscription from the redemption code has expired. You can renew it by redeeming a new code or getting a new subscription.","Ok":"Ok","Ok, don't show me this again":"Ok, don't show me this again","Old, legacy upload key (only if you used to publish your game as an APK and already activated Play App Signing)":"Old, legacy upload key (only if you used to publish your game as an APK and already activated Play App Signing)","Omit":"Omit","On Itch and/or Newgrounds":"On Itch and/or Newgrounds","On Poki and/or CrazyGames":"On Poki and/or CrazyGames","On Steam and/or Epic Games":"On Steam and/or Epic Games","On game page only":"On game page only","On my own":"On my own","Once removed, you'll need to generate a new certificate. Provisioning profiles will also be removed.":"Once removed, you'll need to generate a new certificate. Provisioning profiles will also be removed.","Once you're done, come back to GDevelop and the assets will be added to your account automatically.":"Once you're done, come back to GDevelop and the assets will be added to your account automatically.","Once you're done, come back to GDevelop and the bundle will be added to your account automatically.":"Once you're done, come back to GDevelop and the bundle will be added to your account automatically.","Once you're done, come back to GDevelop and the credits will be added to your account automatically.":"Once you're done, come back to GDevelop and the credits will be added to your account automatically.","Once you're done, come back to GDevelop and the game template will be added to your account automatically.":"Once you're done, come back to GDevelop and the game template will be added to your account automatically.","Once you're done, come back to GDevelop and your account will be upgraded automatically, unlocking the extra exports and online services.":"Once you're done, come back to GDevelop and your account will be upgraded automatically, unlocking the extra exports and online services.","Once you're done, start adding some functions to the behavior. Then, test the behavior by adding it to an object in a scene.":"Once you're done, start adding some functions to the behavior. Then, test the behavior by adding it to an object in a scene.","Once you're done, you will receive an email confirmation so that you can link the bundle to your account.":"Once you're done, you will receive an email confirmation so that you can link the bundle to your account.","One project at a time — Upgrade for more":"One project at a time — Upgrade for more","One-click packaging":"One-click packaging","Only PNG, JPEG and WEBP files are supported.":"Only PNG, JPEG and WEBP files are supported.","Only best entry":"Only best entry","Only cloud projects can be displayed here. If the user has created local projects, they need to be saved as cloud projects to be visible.":"Only cloud projects can be displayed here. If the user has created local projects, they need to be saved as cloud projects to be visible.","Only player's best entries are displayed.":"Only player's best entries are displayed.","Oops! Looks like this game has no logo set up, you can continue to the next step.":"Oops! Looks like this game has no logo set up, you can continue to the next step.","Opacity":"Opacity","Opacity (0 - 255)":"Opacity (0 - 255)","Open":"Open","Open About to download and install it.":"Open About to download and install it.","Open Apple Developer":"Open Apple Developer","Open Debugger":"Open Debugger","Open Game dashboard":"Open Game dashboard","Open Instances List Panel":"Open Instances List Panel","Open Layers Panel":"Open Layers Panel","Open My Profile":"Open My Profile","Open Object Groups Panel":"Open Object Groups Panel","Open Objects Panel":"Open Objects Panel","Open Properties Panel":"Open Properties Panel","Open Recent":"Open Recent","Open a new project? Any changes that have not been saved will be lost.":"Open a new project? Any changes that have not been saved will be lost.","Open a project":"Open a project","Open all tasks":"Open all tasks","Open another chat?":"Open another chat?","Open build link":"Open build link","Open command palette":"Open command palette","Open course":"Open course","Open events sheet":"Open events sheet","Open exam":"Open exam","Open extension settings":"Open extension settings","Open extension...":"Open extension...","Open external events...":"Open external events...","Open external layout...":"Open external layout...","Open file":"Open file","Open folder":"Open folder","Open from computer with GDevelop desktop app":"Open from computer with GDevelop desktop app","Open game for player feedback":"Open game for player feedback","Open in Store":"Open in Store","Open in a larger editor":"Open in a larger editor","Open in editor":"Open in editor","Open layer editor":"Open layer editor","Open lesson":"Open lesson","Open memory tracker registry":"Open memory tracker registry","Open more settings":"Open more settings","Open project":"Open project","Open project icons":"Open project icons","Open project manager":"Open project manager","Open project properties":"Open project properties","Open project resources":"Open project resources","Open quick customization":"Open quick customization","Open recent project...":"Open recent project...","Open report":"Open report","Open resource in browser":"Open resource in browser","Open scene editor":"Open scene editor","Open scene events":"Open scene events","Open scene properties":"Open scene properties","Open scene variables":"Open scene variables","Open scene...":"Open scene...","Open settings":"Open settings","Open task":"Open task","Open template":"Open template","Open the console":"Open the console","Open the exported game folder":"Open the exported game folder","Open the performance profiler":"Open the performance profiler","Open the project":"Open the project","Open the project associated with this AI request to restore to this state.":"Open the project associated with this AI request to restore to this state.","Open the project folder":"Open the project folder","Open the properties panel":"Open the properties panel","Open version":"Open version","Open version history":"Open version history","Open visual editor":"Open visual editor","Open visual editor for the object":"Open visual editor for the object","Open...":"Open...","Opening latest save...":"Opening latest save...","Opening older version...":"Opening older version...","Opening portal":"Opening portal","Operation not allowed":"Operation not allowed","Operator":"Operator","Optimize for Pixel Art":"Optimize for Pixel Art","Optional animation name":"Optional animation name","Optional. Enter a full URL (starting with https://) to a help page. A help icon will appear next to the action/condition/expression title in the editor, allowing users to quickly access documentation.":"Optional. Enter a full URL (starting with https://) to a help page. A help icon will appear next to the action/condition/expression title in the editor, allowing users to quickly access documentation.","Optionally, explain the purpose of the property in more details":"Optionally, explain the purpose of the property in more details","Options":"Options","Or flash this QR code:":"Or flash this QR code:","Or start typing...":"Or start typing...","Ordering":"Ordering","Orthographic camera":"Orthographic camera","Other":"Other","Other actions":"Other actions","Other conditions":"Other conditions","Other lifecycle methods":"Other lifecycle methods","Other reason":"Other reason","Other reason (please specify)":"Other reason (please specify)","Outdated extension":"Outdated extension","Outline":"Outline","Outline color":"Outline color","Outline opacity (0-255)":"Outline opacity (0-255)","Outline size (in pixels)":"Outline size (in pixels)","Overriding the ID may have unwanted consequences, such as blocking the ability to connect to any peer. Do not use this feature unless you really know what you are doing.":"Overriding the ID may have unwanted consequences, such as blocking the ability to connect to any peer. Do not use this feature unless you really know what you are doing.","Overwrite":"Overwrite","Owned":"Owned","Owned by another scene":"Owned by another scene","Owner":"Owner","Owners":"Owners","P2P is merely a peer-to-peer networking solution. It only handles the connection to another player, and the exchange of messages. Higher-level tasks, such as synchronizing the game state, are left to by implemented by you. Use the THNK Framework if you seek an easy, performant and flexible higher-level solution.":"P2P is merely a peer-to-peer networking solution. It only handles the connection to another player, and the exchange of messages. Higher-level tasks, such as synchronizing the game state, are left to by implemented by you. Use the THNK Framework if you seek an easy, performant and flexible higher-level solution.","Pack sounds":"Pack sounds","Pack type":"Pack type","Package game files":"Package game files","Package name (for iOS and Android)":"Package name (for iOS and Android)","Package the game for iOS, using your Apple Developer account.":"Package the game for iOS, using your Apple Developer account.","Packaging":"Packaging","Packaging your game for Android will create an APK file that can be installed on Android phones or an Android App Bundle that can be published to Google Play.":"Packaging your game for Android will create an APK file that can be installed on Android phones or an Android App Bundle that can be published to Google Play.","Packaging...":"Packaging...","Paint a Level with Tiles":"Paint a Level with Tiles","Panel sprite":"Panel sprite","Parameter #{0}":function(a){return["Parameter #",a("0")]},"Parameter name":"Parameter name","Parameters":"Parameters","Parameters allow function users to give data.":"Parameters allow function users to give data.","Parameters can't have children.":"Parameters can't have children.","Particle end size (in percents)":"Particle end size (in percents)","Particle maximum lifetime (in seconds)":"Particle maximum lifetime (in seconds)","Particle maximum rotation speed (degrees/second)":"Particle maximum rotation speed (degrees/second)","Particle minimum lifetime (in seconds)":"Particle minimum lifetime (in seconds)","Particle minimum rotation speed (degrees/second)":"Particle minimum rotation speed (degrees/second)","Particle start size (in percents)":"Particle start size (in percents)","Particle type":"Particle type","Particles end color":"Particles end color","Particles start color":"Particles start color","Particles start height":"Particles start height","Particles start width":"Particles start width","Password":"Password","Password cannot be empty":"Password cannot be empty","Paste":"Paste","Paste action(s)":"Paste action(s)","Paste and Match Style":"Paste and Match Style","Paste condition(s)":"Paste condition(s)","Paste {clipboardObjectName}":function(a){return["Paste ",a("clipboardObjectName")]},"Paste {clipboardObjectName} as a Global Object":function(a){return["Paste ",a("clipboardObjectName")," as a Global Object"]},"Paste {clipboardObjectName} as a Global Object inside folder":function(a){return["Paste ",a("clipboardObjectName")," as a Global Object inside folder"]},"Paste {clipboardObjectName} inside folder":function(a){return["Paste ",a("clipboardObjectName")," inside folder"]},"Pause":"Pause","Pause the game (from the toolbar) or hit refresh (on the left) to inspect the game":"Pause the game (from the toolbar) or hit refresh (on the left) to inspect the game","Paused":"Paused","Paypal secure":"Paypal secure","Peer to peer IP address leak warning/THNK recommendation":"Peer to peer IP address leak warning/THNK recommendation","Peer to peer data-loss notice":"Peer to peer data-loss notice","Pending":"Pending","Pending invitations":"Pending invitations","Percentage of people who leave before 60 seconds including loading screens.":"Percentage of people who leave before 60 seconds including loading screens.","Permanent":"Permanent","Permanently delete the leaderboard?":"Permanently delete the leaderboard?","Permanently delete the project?":"Permanently delete the project?","Personal license for claim with Gold or Pro subscription":"Personal license for claim with Gold or Pro subscription","Personal or company website":"Personal or company website","Personal website, itch.io page, etc.":"Personal website, itch.io page, etc.","Personalize your suggested content":"Personalize your suggested content","Perspective camera":"Perspective camera","Pixel size":"Pixel size","Place 3D platforms in a 2D game.":"Place 3D platforms in a 2D game.","Place 3D platforms in this 2D platformer, creating a path to the end.":"Place 3D platforms in this 2D platformer, creating a path to the end.","Place {newInstancesCount} <0>{object_name} instance(s) at {0} (layer: {1}) in scene {scene_name}.":function(a){return["Place ",a("newInstancesCount")," <0>",a("object_name")," instance(s) at ",a("0")," (layer: ",a("1"),") in scene ",a("scene_name"),"."]},"Place {newInstancesCount} and move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["Place ",a("newInstancesCount")," and move ",a("existingInstanceCount")," <0>",a("object_name")," instance(s) to ",a("0")," (layer: ",a("1"),") in scene ",a("scene_name"),"."]},"Placement":"Placement","Placement rationale":"Placement rationale","Platform default":"Platform default","Platformer":"Platformer","Play":"Play","Play a game":"Play a game","Play game":"Play game","Play section":"Play section","Played > 10 minutes":"Played > 10 minutes","Played > 15 minutes":"Played > 15 minutes","Played > 3 minutes":"Played > 3 minutes","Played > 5 minutes":"Played > 5 minutes","Played time":"Played time","Player":"Player","Player best entry":"Player best entry","Player feedback off":"Player feedback off","Player feedback on":"Player feedback on","Player name prefix (for auto-generated player names)":"Player name prefix (for auto-generated player names)","Player services":"Player services","Player {0} left a feedback message on {1}: \"{2}...\"":function(a){return["Player ",a("0")," left a feedback message on ",a("1"),": \"",a("2"),"...\""]},"Players":"Players","Playground":"Playground","Playing":"Playing","Please <0>backup your game file and save your game to ensure that you don't lose anything. You can try to reload this panel or restart GDevelop.":"Please <0>backup your game file and save your game to ensure that you don't lose anything. You can try to reload this panel or restart GDevelop.","Please check if popups are blocked in your browser settings.":"Please check if popups are blocked in your browser settings.","Please check your internet connection or try again later.":"Please check your internet connection or try again later.","Please double check online the changes to make sure that you are aware of anything new in this version that would require you to adapt your project.":"Please double check online the changes to make sure that you are aware of anything new in this version that would require you to adapt your project.","Please enter a name for your project.":"Please enter a name for your project.","Please enter a name that is at least one character long and 50 at most.":"Please enter a name that is at least one character long and 50 at most.","Please enter a valid URL, starting with https://":"Please enter a valid URL, starting with https://","Please enter a valid URL, starting with https://discord":"Please enter a valid URL, starting with https://discord","Please enter an email address.":"Please enter an email address.","Please explain your use of GDevelop.":"Please explain your use of GDevelop.","Please fill out every field.":"Please fill out every field.","Please get in touch with us to find a solution.":"Please get in touch with us to find a solution.","Please log out and log in again to verify your identify, then change your email.":"Please log out and log in again to verify your identify, then change your email.","Please login to access free samples of the Education plan resources.":"Please login to access free samples of the Education plan resources.","Please note that your device should be connected on the same network as this computer.":"Please note that your device should be connected on the same network as this computer.","Please pick a short username with only alphanumeric characters as well as _ and -":"Please pick a short username with only alphanumeric characters as well as _ and -","Please prefer using the new action \"Enforce camera boundaries\" which is more flexible.":"Please prefer using the new action \"Enforce camera boundaries\" which is more flexible.","Please tell us more":"Please tell us more","Please upgrade the editor to the latest version.":"Please upgrade the editor to the latest version.","Please wait":"Please wait","Please wait while we scan your project to find a solution.":"Please wait while we scan your project to find a solution.","Please wait...":"Please wait...","Point name":"Point name","Points":"Points","Polygon is not convex!":"Polygon is not convex!","Polygon with {verticesCount} vertices":function(a){return["Polygon with ",a("verticesCount")," vertices"]},"Pop back into main window":"Pop back into main window","Pop out in a separate window (beta)":"Pop out in a separate window (beta)","Portrait":"Portrait","Prefabs (Ready-to-use Objects)":"Prefabs (Ready-to-use Objects)","Preferences":"Preferences","Prefix":"Prefix","Preload at startup (default)":"Preload at startup (default)","Preload with an action":"Preload with an action","Preload with the scene":"Preload with the scene","Premium":"Premium","Prepare your game for Facebook Instant Games so that it can be play on Facebook Messenger. GDevelop will create a compressed file that you can upload on your Facebook Developer account.":"Prepare your game for Facebook Instant Games so that it can be play on Facebook Messenger. GDevelop will create a compressed file that you can upload on your Facebook Developer account.","Preparing the leaderboard for your game...":"Preparing the leaderboard for your game...","Press a shortcut combination...":"Press a shortcut combination...","Prevent selection in the editor":"Prevent selection in the editor","Preview":"Preview","Preview over wifi":"Preview over wifi","Preview {animationName}":function(a){return["Preview ",a("animationName")]},"Previews":"Previews","Previous breaking changes (no longer relevant)":"Previous breaking changes (no longer relevant)","Previous page":"Previous page","Private":"Private","Production & Project Management":"Production & Project Management","Profile":"Profile","Profiler":"Profiler","Programming & Scripting":"Programming & Scripting","Progress bar":"Progress bar","Progress bar color":"Progress bar color","Progress bar fade in delay and duration will be applied to GDevelop logo.":"Progress bar fade in delay and duration will be applied to GDevelop logo.","Progress bar height":"Progress bar height","Progress bar maximum width":"Progress bar maximum width","Progress bar minimum width":"Progress bar minimum width","Progress bar width":"Progress bar width","Progress fade in delay (in seconds)":"Progress fade in delay (in seconds)","Progress fade in duration (in seconds)":"Progress fade in duration (in seconds)","Project":"Project","Project file list":"Project file list","Project file type":"Project file type","Project files":"Project files","Project icons":"Project icons","Project is opened":"Project is opened","Project manager":"Project manager","Project mismatch":"Project mismatch","Project name":"Project name","Project name cannot be empty.":"Project name cannot be empty.","Project name changed":"Project name changed","Project not found":"Project not found","Project not saved":"Project not saved","Project package names should not begin with com.example":"Project package names should not begin with com.example","Project properly saved":"Project properly saved","Project properties":"Project properties","Project resources":"Project resources","Project save cannot be opened":"Project save cannot be opened","Project save not available":"Project save not available","Project save not found":"Project save not found","Project saved":"Project saved","Project was modified":"Project was modified","Project {projectName} will be deleted. You will no longer be able to access it.":function(a){return["Project ",a("projectName")," will be deleted. You will no longer be able to access it."]},"Projects":"Projects","Projects in disabled accounts will not be deleted. All disabled accounts can be reactivated after 15 days.":"Projects in disabled accounts will not be deleted. All disabled accounts can be reactivated after 15 days.","Promoting your game to the community":"Promoting your game to the community","Promotions + Earn credits":"Promotions + Earn credits","Properties":"Properties","Properties & Icons":"Properties & Icons","Properties can't have children.":"Properties can't have children.","Properties store data inside behaviors.":"Properties store data inside behaviors.","Properties store data inside objects.":"Properties store data inside objects.","Property list":"Property list","Property list editor":"Property list editor","Property name in events: `{parameterName}`":function(a){return["Property name in events: `",a("parameterName"),"`"]},"Props":"Props","Provisioning profiles":"Provisioning profiles","Public":"Public","Public on gd.games":"Public on gd.games","Public tutorials":"Public tutorials","Publish":"Publish","Publish game":"Publish game","Publish game on gd.games":"Publish game on gd.games","Publish new version":"Publish new version","Publish on gd.games":"Publish on gd.games","Publish on gd.games to let players try your game":"Publish on gd.games to let players try your game","Publish this build on gd.games":"Publish this build on gd.games","Publish to Android, iOS, unlock more cloud projects, leaderboards, collaboration features and more online services. <0>Learn more":"Publish to Android, iOS, unlock more cloud projects, leaderboards, collaboration features and more online services. <0>Learn more","Publisher name":"Publisher name","Publishing on gd.games":"Publishing on gd.games","Publishing to gd.games, the GDevelop gaming platform. Games can be played from any device.":"Publishing to gd.games, the GDevelop gaming platform. Games can be played from any device.","Purchase":"Purchase","Purchase Spine":"Purchase Spine","Purchase credits":"Purchase credits","Purchase seats":"Purchase seats","Purchase the Education subscription":"Purchase the Education subscription","Purchase with {usageCreditPrice} credits":function(a){return["Purchase with ",a("usageCreditPrice")," credits"]},"Purchase {0}":function(a){return["Purchase ",a("0")]},"Purchase {translatedCourseTitle}":function(a){return["Purchase ",a("translatedCourseTitle")]},"Puzzle":"Puzzle","Quadrilateral":"Quadrilateral","Quick Customization settings":"Quick Customization settings","Quick Customization: Behavior properties":"Quick Customization: Behavior properties","Quit tutorial":"Quit tutorial","R;G;B, like 100;200;180":"R;G;B, like 100;200;180","RPG":"RPG","Racing":"Racing","Radius":"Radius","Radius of the emitter":"Radius of the emitter","Rank this comment as bad":"Rank this comment as bad","Rank this comment as good":"Rank this comment as good","Rank this comment as great":"Rank this comment as great","Rate chapter":"Rate chapter","Raw error":"Raw error","Re-enable npm script security warning":"Re-enable npm script security warning","Re-install":"Re-install","React to lights":"React to lights","Read & Write":"Read & Write","Read <0>{behavior_name}'s settings on <1>{object_name} in scene {scene_name}.":function(a){return["Read <0>",a("behavior_name"),"'s settings on <1>",a("object_name")," in scene ",a("scene_name"),"."]},"Read <0>{object_name}'s properties in scene <1>{scene_name}.":function(a){return["Read <0>",a("object_name"),"'s properties in scene <1>",a("scene_name"),"."]},"Read <0>{scene_name}'s scene settings.":function(a){return["Read <0>",a("scene_name"),"'s scene settings."]},"Read docs for {extension_names}.":function(a){return["Read docs for ",a("extension_names"),"."]},"Read events in scene <0>{scene_name}.":function(a){return["Read events in scene <0>",a("scene_name"),"."]},"Read instances in scene <0>{scene_name}.":function(a){return["Read instances in scene <0>",a("scene_name"),"."]},"Read only":"Read only","Read the doc":"Read the doc","Read the wiki page for more info about the dataloss mode.":"Read the wiki page for more info about the dataloss mode.","Read tutorial":"Read tutorial","Reading the documentation":"Reading the documentation","Reading through the events":"Reading through the events","Ready-made games":"Ready-made games","Reasoning level":"Reasoning level","Reasoning level:":"Reasoning level:","Receive a copy of GDevelop’s teaching resources:<0>Extract of our ready-to-teach Curriculum<1>Poster with GDevelop's core concepts to use in your classroom<2>“Game Development as an Educational wonder” PDF":"Receive a copy of GDevelop’s teaching resources:<0>Extract of our ready-to-teach Curriculum<1>Poster with GDevelop's core concepts to use in your classroom<2>“Game Development as an Educational wonder” PDF","Receive weekly stats about your game by email":"Receive weekly stats about your game by email","Recharge your account to purchase this item.":"Recharge your account to purchase this item.","Recommendations":"Recommendations","Recommended":"Recommended","Recommended for you":"Recommended for you","Recovering older version...":"Recovering older version...","Rectangle paint":"Rectangle paint","Reddit":"Reddit","Redeem":"Redeem","Redeem a code":"Redeem a code","Redeemed":"Redeemed","Redeemed code valid until {0} .":function(a){return["Redeemed code valid until ",a("0")," ."]},"Redemption Codes":"Redemption Codes","Redemption or coupon code":"Redemption or coupon code","Redo":"Redo","Redo the last changes":"Redo the last changes","Redo the survey":"Redo the survey","Refine your search with more specific keywords.":"Refine your search with more specific keywords.","Refresh":"Refresh","Refresh dashboard":"Refresh dashboard","Refresh games":"Refresh games","Register or publish your game first to see its exports.":"Register or publish your game first to see its exports.","Register the project":"Register the project","Related expression and condition":"Related expression and condition","Related objects":"Related objects","Relational operator":"Relational operator","Relaunch the 3D editor":"Relaunch the 3D editor","Reload project from disk/cloud (lose all changes)":"Reload project from disk/cloud (lose all changes)","Reload the project? Any changes that have not been saved will be lost.":"Reload the project? Any changes that have not been saved will be lost.","Remaining usage":"Remaining usage","Remember that your access to this resource is exclusive to your account.":"Remember that your access to this resource is exclusive to your account.","Remix a game in 2 minutes":"Remix a game in 2 minutes","Remix an existing game":"Remix an existing game","Remove":"Remove","Remove <0>{behavior_name} behavior from <1>{object_name} in scene {scene_name}.":function(a){return["Remove <0>",a("behavior_name")," behavior from <1>",a("object_name")," in scene ",a("scene_name"),"."]},"Remove Ordering":"Remove Ordering","Remove behavior":"Remove behavior","Remove certificate":"Remove certificate","Remove collaborator":"Remove collaborator","Remove effect":"Remove effect","Remove entry":"Remove entry","Remove folder and function":"Remove folder and function","Remove folder and functions":"Remove folder and functions","Remove folder and object":"Remove folder and object","Remove folder and objects":"Remove folder and objects","Remove folder and properties":"Remove folder and properties","Remove folder and property":"Remove folder and property","Remove from list":"Remove from list","Remove from team":"Remove from team","Remove function":"Remove function","Remove group":"Remove group","Remove invitation?":"Remove invitation?","Remove object":"Remove object","Remove objects":"Remove objects","Remove objects from the scene list":"Remove objects from the scene list","Remove project from list":"Remove project from list","Remove resource":"Remove resource","Remove resources with invalid path":"Remove resources with invalid path","Remove scene <0>{scene_name}.":function(a){return["Remove scene <0>",a("scene_name"),"."]},"Remove shortcut":"Remove shortcut","Remove student?":"Remove student?","Remove the Else":"Remove the Else","Remove the Long Description":"Remove the Long Description","Remove the Loop Counter Variable":"Remove the Loop Counter Variable","Remove the animation":"Remove the animation","Remove the extension":"Remove the extension","Remove the sprite":"Remove the sprite","Remove this Auth Key":"Remove this Auth Key","Remove this certificate":"Remove this certificate","Remove this certificate?":"Remove this certificate?","Remove this counter of the loop":"Remove this counter of the loop","Remove unlimited":"Remove unlimited","Remove unused...":"Remove unused...","Remove variant":"Remove variant","Rename":"Rename","Rename <0>{object_name} to <1>{newValue} (in scene {scene_name}).":function(a){return["Rename <0>",a("object_name")," to <1>",a("newValue")," (in scene ",a("scene_name"),")."]},"Renamed object to {0}.":function(a){return["Renamed object to ",a("0"),"."]},"Rendering type":"Rendering type","Repeat <0>{0} times:":function(a){return["Repeat <0>",a("0")," times:"]},"Repeat borders and center textures (instead of stretching them)":"Repeat borders and center textures (instead of stretching them)","Repeat for each instance of<0>{0}":function(a){return["Repeat for each instance of<0>",a("0"),""]},"Repeat these:":"Repeat these:","Replace":"Replace","Replace <0>{object_name} in scene <1>{scene_name}.":function(a){return["Replace <0>",a("object_name")," in scene <1>",a("scene_name"),"."]},"Replace existing extension":"Replace existing extension","Replay":"Replay","Report a wrong translation":"Report a wrong translation","Report an issue":"Report an issue","Report anyway":"Report anyway","Report this comment as abusive, harmful or spam":"Report this comment as abusive, harmful or spam","Required behavior":"Required behavior","Reset":"Reset","Reset Debugger layout":"Reset Debugger layout","Reset Extension Editor layout":"Reset Extension Editor layout","Reset Resource Editor layout":"Reset Resource Editor layout","Reset Scene Editor layout":"Reset Scene Editor layout","Reset all shortcuts to default":"Reset all shortcuts to default","Reset and hide children configuration":"Reset and hide children configuration","Reset hidden Ask AI text inputs":"Reset hidden Ask AI text inputs","Reset hidden announcements":"Reset hidden announcements","Reset hidden embedded explanations":"Reset hidden embedded explanations","Reset hidden embedded tutorials":"Reset hidden embedded tutorials","Reset leaderboard":"Reset leaderboard","Reset leaderboard {0}":function(a){return["Reset leaderboard ",a("0")]},"Reset password":"Reset password","Reset requested the {0} . Please wait a few minutes...":function(a){return["Reset requested the ",a("0")," . Please wait a few minutes..."]},"Reset to automatic collision mask":"Reset to automatic collision mask","Reset to default":"Reset to default","Reset your password":"Reset your password","Resolution and rendering":"Resolution and rendering","Resource":"Resource","Resource URL":"Resource URL","Resource file path copied to clipboard":"Resource file path copied to clipboard","Resource kind":"Resource kind","Resource name":"Resource name","Resource type":"Resource type","Resource(s) URL(s) (one per line)":"Resource(s) URL(s) (one per line)","Resources":"Resources","Resources (any kind)":"Resources (any kind)","Resources added: {0}":function(a){return["Resources added: ",a("0")]},"Resources are automatically added to your project whenever you add an image, a font or a video to an object or when you choose an audio file in events. Choose a resource to display its properties.":"Resources are automatically added to your project whenever you add an image, a font or a video to an object or when you choose an audio file in events. Choose a resource to display its properties.","Resources loading":"Resources loading","Resources preloading":"Resources preloading","Resources unloading":"Resources unloading","Restart":"Restart","Restart 3D editor":"Restart 3D editor","Restart the Tutorial":"Restart the Tutorial","Restart tutorial":"Restart tutorial","Restarting the preview from scratch is required":"Restarting the preview from scratch is required","Restore":"Restore","Restore a previous purchase":"Restore a previous purchase","Restore accounts":"Restore accounts","Restore project before this message":"Restore project before this message","Restore project to this state?":"Restore project to this state?","Restore this version":"Restore this version","Restore version":"Restore version","Restored":"Restored","Restoring...":"Restoring...","Results for:":"Results for:","Retry":"Retry","Reviewing a starter game template.":"Reviewing a starter game template.","Reviewing the current state":"Reviewing the current state","Reviewing the game structure":"Reviewing the game structure","Reviewing the scene data":"Reviewing the scene data","Reviewing the {templateName} starter template.":function(a){return["Reviewing the ",a("templateName")," starter template."]},"Rework the game":"Rework the game","Right":"Right","Right (secondary)":"Right (secondary)","Right bound":"Right bound","Right bound should be greater than left bound":"Right bound should be greater than left bound","Right face":"Right face","Right margin":"Right margin","Right-click for more events":"Right-click for more events","Right-click for quick menu":"Right-click for quick menu","Room: {0}":function(a){return["Room: ",a("0")]},"Rooms":"Rooms","Root folder":"Root folder","Rotation":"Rotation","Rotation (X)":"Rotation (X)","Rotation (Y)":"Rotation (Y)","Rotation (Z)":"Rotation (Z)","Round pixels when rendering, useful for pixel perfect games.":"Round pixels when rendering, useful for pixel perfect games.","Round to X decimal point":"Round to X decimal point","Run a preview":"Run a preview","Run a preview (with loading & branding)":"Run a preview (with loading & branding)","Run a preview and you will be able to inspect it with the debugger.":"Run a preview and you will be able to inspect it with the debugger.","Run on this computer":"Run on this computer","Save":"Save","Save Project":"Save Project","Save and continue":"Save and continue","Save as main version":"Save as main version","Save as...":"Save as...","Save in the \"Downloads\" folder":"Save in the \"Downloads\" folder","Save on your computer: download GDevelop desktop app":"Save on your computer: download GDevelop desktop app","Save project":"Save project","Save project as":"Save project as","Save project as...":"Save project as...","Save to computer with GDevelop desktop app":"Save to computer with GDevelop desktop app","Save your changes or close the external editor to continue.":"Save your changes or close the external editor to continue.","Save your game":"Save your game","Save your project":"Save your project","Save your project before using the version history.":"Save your project before using the version history.","Saving project":"Saving project","Saving...":"Saving...","Scale mode (also called \"Sampling\")":"Scale mode (also called \"Sampling\")","Scaling factor":"Scaling factor","Scaling factor to apply to the default dimensions":"Scaling factor to apply to the default dimensions","Scan in the project folder for...":"Scan in the project folder for...","Scan missing animations":"Scan missing animations","Scene":"Scene","Scene Groups":"Scene Groups","Scene Objects":"Scene Objects","Scene Variables":"Scene Variables","Scene background color":"Scene background color","Scene editor":"Scene editor","Scene events":"Scene events","Scene groups":"Scene groups","Scene name":"Scene name","Scene name (text)":"Scene name (text)","Scene objects":"Scene objects","Scene properties":"Scene properties","Scene variable":"Scene variable","Scene variable (deprecated)":"Scene variable (deprecated)","Scene variables":"Scene variables","Scenes":"Scenes","Scope":"Scope","Score":"Score","Score column settings":"Score column settings","Score display":"Score display","Score multiplier":"Score multiplier","Scores sort order":"Scores sort order","Scroll":"Scroll","Search":"Search","Search GDevelop documentation.":"Search GDevelop documentation.","Search and replace in parameters":"Search and replace in parameters","Search assets":"Search assets","Search behaviors":"Search behaviors","Search by name":"Search by name","Search examples":"Search examples","Search extensions":"Search extensions","Search filters":"Search filters","Search for New Extensions":"Search for New Extensions","Search for new actions in extensions":"Search for new actions in extensions","Search for new conditions in extensions":"Search for new conditions in extensions","Search functions":"Search functions","Search in all event sheets...":"Search in all event sheets...","Search in event sentences":"Search in event sentences","Search in events":"Search in events","Search in project":"Search in project","Search in properties":"Search in properties","Search instances":"Search instances","Search object groups":"Search object groups","Search objects":"Search objects","Search objects or actions":"Search objects or actions","Search objects or conditions":"Search objects or conditions","Search panel":"Search panel","Search resources":"Search resources","Search results":"Search results","Search the shop":"Search the shop","Search variables":"Search variables","Search {searchPlaceholderObjectName} actions":function(a){return["Search ",a("searchPlaceholderObjectName")," actions"]},"Search {searchPlaceholderObjectName} conditions":function(a){return["Search ",a("searchPlaceholderObjectName")," conditions"]},"Search/import extensions":"Search/import extensions","Searching the asset store.":"Searching the asset store.","Seats":"Seats","Seats available:":"Seats available:","Seats left: {availableSeats}":function(a){return["Seats left: ",a("availableSeats")]},"Seconds":"Seconds","Section name":"Section name","See Marketing Boosts":"See Marketing Boosts","See all":"See all","See all exports":"See all exports","See all in the game dashboard":"See all in the game dashboard","See all projects":"See all projects","See all release notes":"See all release notes","See all the release notes":"See all the release notes","See more":"See more","See my codes":"See my codes","See plans":"See plans","See projects":"See projects","See resources":"See resources","See subscriptions":"See subscriptions","See the releases notes online":"See the releases notes online","See this bundle":"See this bundle","Select":"Select","Select All":"Select All","Select a behavior":"Select a behavior","Select a function...":"Select a function...","Select a game":"Select a game","Select a genre":"Select a genre","Select a thumbnail":"Select a thumbnail","Select all active":"Select all active","Select an author":"Select an author","Select an extension":"Select an extension","Select an image":"Select an image","Select an owner":"Select an owner","Select instances on scene ({instanceCountOnScene})":function(a){return["Select instances on scene (",a("instanceCountOnScene"),")"]},"Select log groups to display":"Select log groups to display","Select resource":"Select resource","Select the controls that apply:":"Select the controls that apply:","Select the leaderboard from a list":"Select the leaderboard from a list","Select the usernames of the authors of this project. They will be displayed in the selected order, if you publish this game as an example or in the community.":"Select the usernames of the authors of this project. They will be displayed in the selected order, if you publish this game as an example or in the community.","Select the usernames of the contributors to this extension. They will be displayed in the order selected. Do not see your name? Go to the Profile section and create an account!":"Select the usernames of the contributors to this extension. They will be displayed in the order selected. Do not see your name? Go to the Profile section and create an account!","Select the usernames of the owners of this project to let them manage this game builds. Be aware that owners can revoke your ownership.":"Select the usernames of the owners of this project to let them manage this game builds. Be aware that owners can revoke your ownership.","Select up to 3 genres for the game to be visible on gd.games's categories pages!":"Select up to 3 genres for the game to be visible on gd.games's categories pages!","Select {0} resources":function(a){return["Select ",a("0")," resources"]},"Selected instances will be moved to a new custom object.":"Selected instances will be moved to a new custom object.","Selected instances will be moved to a new external layout.":"Selected instances will be moved to a new external layout.","Send":"Send","Send a new form":"Send a new form","Send crash reports during previews to GDevelop":"Send crash reports during previews to GDevelop","Send feedback":"Send feedback","Send it again":"Send it again","Send the Auth Key":"Send the Auth Key","Send to back":"Send to back","Sending...":"Sending...","Sentence in Events Sheet":"Sentence in Events Sheet","Sentence in Events Sheet (automatically suffixed by \"of _PARAM0_\")":"Sentence in Events Sheet (automatically suffixed by \"of _PARAM0_\")","Serial: {0}":function(a){return["Serial: ",a("0")]},"Service seems to be unavailable, please try again later.":"Service seems to be unavailable, please try again later.","Sessions":"Sessions","Set <0>{object_name}'s variable <1>{variable_name_or_path}.":function(a){return["Set <0>",a("object_name"),"'s variable <1>",a("variable_name_or_path"),"."]},"Set an icon to the extension first":"Set an icon to the extension first","Set as default":"Set as default","Set as global":"Set as global","Set as global group":"Set as global group","Set as global object":"Set as global object","Set as start scene":"Set as start scene","Set by user":"Set by user","Set global variable <0>{variable_name_or_path}.":function(a){return["Set global variable <0>",a("variable_name_or_path"),"."]},"Set scene variable <0>{variable_name_or_path} in scene {scene_name}.":function(a){return["Set scene variable <0>",a("variable_name_or_path")," in scene ",a("scene_name"),"."]},"Set shortcut":"Set shortcut","Set to false":"Set to false","Set to true":"Set to true","Set to unlimited":"Set to unlimited","Set up new leaderboards for this game":"Set up new leaderboards for this game","Set up the base for your project <0>{project_name}.":function(a){return["Set up the base for your project <0>",a("project_name"),"."]},"Set variable <0>{variable_name_or_path}.":function(a){return["Set variable <0>",a("variable_name_or_path"),"."]},"Setting the minimum number of FPS below 20 will increase a lot the time that is allowed between the simulation of two frames of the game. If case of a sudden slowdown, or on slow computers, this can create buggy behaviors like objects passing beyond a wall. Consider setting 20 as the minimum FPS.":"Setting the minimum number of FPS below 20 will increase a lot the time that is allowed between the simulation of two frames of the game. If case of a sudden slowdown, or on slow computers, this can create buggy behaviors like objects passing beyond a wall. Consider setting 20 as the minimum FPS.","Settings":"Settings","Setup grid":"Setup grid","Shadow":"Shadow","Share":"Share","Share dialog":"Share dialog","Share same collision masks for all animations":"Share same collision masks for all animations","Share same collision masks for all sprites of this animation":"Share same collision masks for all sprites of this animation","Share same points for all animations":"Share same points for all animations","Share same points for all sprites of this animation":"Share same points for all sprites of this animation","Share your game":"Share your game","Share your game on gd.games and collect players feedback about your game.":"Share your game on gd.games and collect players feedback about your game.","Share your game with your friends or teammates.":"Share your game with your friends or teammates.","Sharing online":"Sharing online","Sharing the final file with the client":"Sharing the final file with the client","Shooter":"Shooter","Shop":"Shop","Shop section":"Shop section","Short":"Short","Short description":"Short description","Short label":"Short label","Should finish soon.":"Should finish soon.","Show":"Show","Show \"Ask AI\" button in the title bar":"Show \"Ask AI\" button in the title bar","Show Home":"Show Home","Show Mask":"Show Mask","Show Project Manager":"Show Project Manager","Show Properties Names":"Show Properties Names","Show advanced import options":"Show advanced import options","Show all feedbacks":"Show all feedbacks","Show button to load guided lesson from file and test it":"Show button to load guided lesson from file and test it","Show deprecated behaviors (prefer not to use anymore)":"Show deprecated behaviors (prefer not to use anymore)","Show deprecated options":"Show deprecated options","Show details":"Show details","Show diagnostic report":"Show diagnostic report","Show effect":"Show effect","Show experimental behaviors":"Show experimental behaviors","Show experimental extensions":"Show experimental extensions","Show experimental extensions in the list of extensions":"Show experimental extensions in the list of extensions","Show experimental objects":"Show experimental objects","Show grid":"Show grid","Show in local folder":"Show in local folder","Show internal":"Show internal","Show less":"Show less","Show lifecycle functions (advanced)":"Show lifecycle functions (advanced)","Show live assets":"Show live assets","Show more":"Show more","Show next assets":"Show next assets","Show objects in 3D in the scene editor":"Show objects in 3D in the scene editor","Show older":"Show older","Show other lifecycle functions (advanced)":"Show other lifecycle functions (advanced)","Show previous assets":"Show previous assets","Show progress bar":"Show progress bar","Show staging assets":"Show staging assets","Show the \"Create\" section by default when opening GDevelop":"Show the \"Create\" section by default when opening GDevelop","Show type errors in JavaScript events (needs a restart)":"Show type errors in JavaScript events (needs a restart)","Show unread feedback only":"Show unread feedback only","Show version history":"Show version history","Show/Hide instance properties":"Show/Hide instance properties","Showing {0} of {resultsCount}":function(a){return["Showing ",a("0")," of ",a("resultsCount")]},"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged — and when they drop off quickly.":"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged — and when they drop off quickly.","Side view":"Side view","Sign up":"Sign up","Signing Credentials":"Signing Credentials","Signing options":"Signing options","Simple":"Simple","Simulation":"Simulation","Single commercial use license for claim with Gold or Pro subscription":"Single commercial use license for claim with Gold or Pro subscription","Single file (default)":"Single file (default)","Size":"Size","Size:":"Size:","Skins":"Skins","Skip and create from scratch":"Skip and create from scratch","Skip the update":"Skip the update","Socials":"Socials","Some code experience":"Some code experience","Some extensions already exist in the project. Please select the ones you want to replace.":"Some extensions already exist in the project. Please select the ones you want to replace.","Some icons could not be generated.":"Some icons could not be generated.","Some no-code experience":"Some no-code experience","Some things in the answer don't exist in GDevelop":"Some things in the answer don't exist in GDevelop","Some variants already exist in the project. Please select the ones you want to replace.":"Some variants already exist in the project. Please select the ones you want to replace.","Something went wrong":"Something went wrong","Something went wrong while changing your subscription. Please try again.":"Something went wrong while changing your subscription. Please try again.","Something went wrong while swapping the asset. Please try again.":"Something went wrong while swapping the asset. Please try again.","Something went wrong while syncing your Discord username. Please try again later.":"Something went wrong while syncing your Discord username. Please try again later.","Something went wrong while syncing your forum access. Please try again later.":"Something went wrong while syncing your forum access. Please try again later.","Something wrong happened :(":"Something wrong happened :(","Something wrong happened when claiming the asset pack. Please check your internet connection or try again later.":"Something wrong happened when claiming the asset pack. Please check your internet connection or try again later.","Sorry":"Sorry","Sort by most recent":"Sort by most recent","Sort order":"Sort order","Sound":"Sound","Sounds and musics":"Sounds and musics","Source file":"Source file","Specific game mechanics":"Specific game mechanics","Specify something more to the AI to build":"Specify something more to the AI to build","Speech":"Speech","Spine Json":"Spine Json","Spine animation name":"Spine animation name","Spine json resource":"Spine json resource","Sport":"Sport","Spray cone angle (in degrees)":"Spray cone angle (in degrees)","Sprite":"Sprite","Standalone dialog":"Standalone dialog","Start Network Preview (Preview over WiFi/LAN)":"Start Network Preview (Preview over WiFi/LAN)","Start Preview and Debugger":"Start Preview and Debugger","Start a game where a ball can bounce around the screen":"Start a game where a ball can bounce around the screen","Start a new game from this project":"Start a new game from this project","Start a new game?":"Start a new game?","Start a preview to generate a thumbnail!":"Start a preview to generate a thumbnail!","Start a quizz game with a question and 4 answers":"Start a quizz game with a question and 4 answers","Start a simple endless runner game":"Start a simple endless runner game","Start a simple platformer with a player that can move and jump":"Start a simple platformer with a player that can move and jump","Start all previews from external layout {0}":function(a){return["Start all previews from external layout ",a("0")]},"Start all previews from scene {0}":function(a){return["Start all previews from scene ",a("0")]},"Start build with credits":"Start build with credits","Start by adding a new behavior.":"Start by adding a new behavior.","Start by adding a new external layout.":"Start by adding a new external layout.","Start by adding a new function.":"Start by adding a new function.","Start by adding a new group.":"Start by adding a new group.","Start by adding a new object.":"Start by adding a new object.","Start by adding a new property.":"Start by adding a new property.","Start by adding a new scene.":"Start by adding a new scene.","Start by adding new external events.":"Start by adding new external events.","Start for free":"Start for free","Start from a template":"Start from a template","Start learning":"Start learning","Start next chapter":"Start next chapter","Start opacity (0-255)":"Start opacity (0-255)","Start preview with diagnostic report":"Start preview with diagnostic report","Start profiling":"Start profiling","Start profiling and then stop it after a few seconds to see the results.":"Start profiling and then stop it after a few seconds to see the results.","Start the survey!":"Start the survey!","Start typing a command...":"Start typing a command...","Start typing a username":"Start typing a username","Start your game":"Start your game","Starting engine":"Starting engine","Stay there":"Stay there","Stop":"Stop","Stop music and sounds at scene startup":"Stop music and sounds at scene startup","Stop profiling":"Stop profiling","Stop working":"Stop working","Stopped. Ready when you are.":"Stopped. Ready when you are.","Store password":"Store password","Story-Rich":"Story-Rich","Strategy":"Strategy","String":"String","String (text)":"String (text)","String from a list of options (text)":"String from a list of options (text)","String variables with no value set now default to an empty string (\"\") instead of \"0\". This game was created before this change, so GDevelop maintains the old behavior: unset string variables default to \"0\". It's recommended that you switch to the new behavior and update any variables or conditions relying on \"0\" as a default.":"String variables with no value set now default to an empty string (\"\") instead of \"0\". This game was created before this change, so GDevelop maintains the old behavior: unset string variables default to \"0\". It's recommended that you switch to the new behavior and update any variables or conditions relying on \"0\" as a default.","Stripe secure":"Stripe secure","Structure":"Structure","Student":"Student","Student accounts":"Student accounts","Studying the event sheets":"Studying the event sheets","Studying the object behaviors":"Studying the object behaviors","Sub Event":"Sub Event","Submit a free pack":"Submit a free pack","Submit a paid pack":"Submit a paid pack","Submit a tutorial":"Submit a tutorial","Submit a tutorial translated in your language":"Submit a tutorial translated in your language","Submit an example":"Submit an example","Submit an update":"Submit an update","Submit and cancel":"Submit and cancel","Submit to the community":"Submit to the community","Submit your project as an example":"Submit your project as an example","Subscribe":"Subscribe","Subscribe to Edu":"Subscribe to Edu","Subscription Plan":"Subscription Plan","Subscription outside the app store":"Subscription outside the app store","Subscription with the Apple App store or Google Play store":"Subscription with the Apple App store or Google Play store","Subscriptions":"Subscriptions","Suffix":"Suffix","Support What You Love":"Support What You Love","Supported files":"Supported files","Survival":"Survival","Swap":"Swap","Swap assets":"Swap assets","Swap {0} with another asset":function(a){return["Swap ",a("0")," with another asset"]},"Switch to GDevelop Credits":"Switch to GDevelop Credits","Switch to GDevelop credits or keep building with AI.":"Switch to GDevelop credits or keep building with AI.","Switch to create objects with the highest Z order of the layer":"Switch to create objects with the highest Z order of the layer","Switch to empty string (\"\") as default for string variables":"Switch to empty string (\"\") as default for string variables","Switch to monthly pricing":"Switch to monthly pricing","Switch to yearly pricing":"Switch to yearly pricing","Sync your role on GDevelop's Discord server":"Sync your role on GDevelop's Discord server","Sync your subscription level on GDevelop's forum":"Sync your subscription level on GDevelop's forum","Table settings":"Table settings","Tags (comma separated)":"Tags (comma separated)","Taking your game further":"Taking your game further","Target event":"Target event","Tasks":"Tasks","Teach":"Teach","Teacher accounts":"Teacher accounts","Teachers, courses and universities":"Teachers, courses and universities","Team invitation":"Team invitation","Team section":"Team section","Tell us more!...":"Tell us more!...","Template":"Template","Test it out!":"Test it out!","Test value":"Test value","Test value (in second)":"Test value (in second)","Text":"Text","Text color":"Text color","Text color:":"Text color:","Text to replace in parameters":"Text to replace in parameters","Text to search in event sentences":"Text to search in event sentences","Text to search in parameters":"Text to search in parameters","Texts":"Texts","Thank you for supporting GDevelop. Credits were added to your account as a thank you.":"Thank you for supporting GDevelop. Credits were added to your account as a thank you.","Thank you for supporting the GDevelop open-source community. Credits were added to your account as a thank you.":"Thank you for supporting the GDevelop open-source community. Credits were added to your account as a thank you.","Thank you for your feedback":"Thank you for your feedback","Thanks for following GDevelop. We added credits to your account as a thank you gift.":"Thanks for following GDevelop. We added credits to your account as a thank you gift.","Thanks for getting a subscription and supporting GDevelop!":"Thanks for getting a subscription and supporting GDevelop!","Thanks for starring GDevelop repository. We added credits to your account as a thank you gift.":"Thanks for starring GDevelop repository. We added credits to your account as a thank you gift.","Thanks for trying GDevelop! Unlock more projects, AI usage, publishing, multiplayer, courses and much more by upgrading.":"Thanks for trying GDevelop! Unlock more projects, AI usage, publishing, multiplayer, courses and much more by upgrading.","Thanks to all users of GDevelop! There must be missing tons of people, please send your name if you've contributed and you're not listed.":"Thanks to all users of GDevelop! There must be missing tons of people, please send your name if you've contributed and you're not listed.","Thanks to the redemption code you've used, you have this subscription enabled until {0}.":function(a){return["Thanks to the redemption code you've used, you have this subscription enabled until ",a("0"),"."]},"That's a lot of unsuccessful login attempts! Wait a bit before trying again or reset your password.":"That's a lot of unsuccessful login attempts! Wait a bit before trying again or reset your password.","The \"{0}\" effect can only be applied once.":function(a){return["The \"",a("0"),"\" effect can only be applied once."]},"The 3D editor is new and may still have rough edges. It will continue to be improved in the near future. Read more about it on the [GDevelop blog](https://gdevelop.io/blog/3d-editor).":"The 3D editor is new and may still have rough edges. It will continue to be improved in the near future. Read more about it on the [GDevelop blog](https://gdevelop.io/blog/3d-editor).","The 3D editor or the game crashed":"The 3D editor or the game crashed","The 3D editor, or some logic/code inside the game, has encountered an unhandled exception or error. It's necessary to restart the 3D editor.":"The 3D editor, or some logic/code inside the game, has encountered an unhandled exception or error. It's necessary to restart the 3D editor.","The AI agent is in beta. Help us make it better by telling us what went wrong:":"The AI agent is in beta. Help us make it better by telling us what went wrong:","The AI encountered an error while handling your request - this request was not counted in your AI usage. Try again later.":"The AI encountered an error while handling your request - this request was not counted in your AI usage. Try again later.","The AI is currently working on your project. Closing the project will stop it. Do you want to continue?":"The AI is currently working on your project. Closing the project will stop it. Do you want to continue?","The AI is currently working on your project. Opening another chat will stop it. Do you want to continue?":"The AI is currently working on your project. Opening another chat will stop it. Do you want to continue?","The AI is currently working on your project. Should it continue working while the tab is closed?":"The AI is currently working on your project. Should it continue working while the tab is closed?","The AI is experimental and still being improved. <0>It can inspect your game objects and events.":"The AI is experimental and still being improved. <0>It can inspect your game objects and events.","The Atlas embedded in the Spine fine can't be located.":"The Atlas embedded in the Spine fine can't be located.","The Education subscription gives access to GDevelop's Game Development curriculum. Co-created with teachers and institutions, it’s a ready-to-use, proven way to implement STEM in your classroom.":"The Education subscription gives access to GDevelop's Game Development curriculum. Co-created with teachers and institutions, it’s a ready-to-use, proven way to implement STEM in your classroom.","The GDevelop project is open-source, powered by passion and community. Your membership helps the GDevelop company maintain servers, build new features, develop commercial offerings and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"The GDevelop project is open-source, powered by passion and community. Your membership helps the GDevelop company maintain servers, build new features, develop commercial offerings and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.","The URLs must be public and stay accessible while you work on this project - they won't be stored inside the project file. When exporting a game, the resources pointed by these URLs will be downloaded and stored inside the game.":"The URLs must be public and stay accessible while you work on this project - they won't be stored inside the project file. When exporting a game, the resources pointed by these URLs will be downloaded and stored inside the game.","The animation name {newName} is already taken":function(a){return["The animation name ",a("newName")," is already taken"]},"The answer is entirely wrong":"The answer is entirely wrong","The answer is not as good as it could be":"The answer is not as good as it could be","The answer is not in my language":"The answer is not in my language","The answer is out of scope for GDevelop":"The answer is out of scope for GDevelop","The answer is too long":"The answer is too long","The answer is too short":"The answer is too short","The asset pack {0} is now available, go claim it in the shop!":function(a){return["The asset pack ",a("0")," is now available, go claim it in the shop!"]},"The asset pack {0} will be linked to your account {1}.":function(a){return["The asset pack ",a("0")," will be linked to your account ",a("1"),"."]},"The atlas image is smaller than the tile size.":"The atlas image is smaller than the tile size.","The auth key {lastUploadedApiKey} was properly stored. It can now be used to automatically upload your app to the app store - verify you've declared an app for it.":function(a){return["The auth key ",a("lastUploadedApiKey")," was properly stored. It can now be used to automatically upload your app to the app store - verify you've declared an app for it."]},"The behavior is not attached to this object. Please select another object or add this behavior: {0}":function(a){return["The behavior is not attached to this object. Please select another object or add this behavior: ",a("0")]},"The bounding box is an imaginary rectangle surrounding the object collision mask. Even if the object X and Y positions are not changed, this rectangle can change if the object is rotated or if an animation is being played. Usually you should use actions and conditions related to the object position or center, but the bounding box can be useful to deal with the area of the object.":"The bounding box is an imaginary rectangle surrounding the object collision mask. Even if the object X and Y positions are not changed, this rectangle can change if the object is rotated or if an animation is being played. Usually you should use actions and conditions related to the object position or center, but the bounding box can be useful to deal with the area of the object.","The bundle you are trying to claim does not exist anymore. Please contact support if you think this is an error.":"The bundle you are trying to claim does not exist anymore. Please contact support if you think this is an error.","The bundle {0} will be linked to your account {1}.":function(a){return["The bundle ",a("0")," will be linked to your account ",a("1"),"."]},"The bundle {0} will be sent to the email address provided in the checkout.":function(a){return["The bundle ",a("0")," will be sent to the email address provided in the checkout."]},"The certificate could not be found. Please verify it was properly uploaded and try again.":"The certificate could not be found. Please verify it was properly uploaded and try again.","The certificate was properly generated. Don't forget to create and upload a provisioning profile associated to it.":"The certificate was properly generated. Don't forget to create and upload a provisioning profile associated to it.","The chat is becoming long - consider creating a new chat to ask other questions. The AI will better analyze your game and request in a new chat.":"The chat is becoming long - consider creating a new chat to ask other questions. The AI will better analyze your game and request in a new chat.","The course {0} will be linked to your account {1}.":function(a){return["The course ",a("0")," will be linked to your account ",a("1"),"."]},"The default variant is erased when the extension is updated.":"The default variant is erased when the extension is updated.","The description of the object should explain what the object is doing, and, briefly, how to use it.":"The description of the object should explain what the object is doing, and, briefly, how to use it.","The editor was unable to display the operation ({0}) used by the AI.":function(a){return["The editor was unable to display the operation (",a("0"),") used by the AI."]},"The effect name {newName} is already taken":function(a){return["The effect name ",a("newName")," is already taken"]},"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before adding them as a student in your team.":"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before adding them as a student in your team.","The email you provided already has a subscription with GDevelop. Please ask them to cancel it before defining them as teacher in your team.":"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before defining them as teacher in your team.","The email you provided could not be found.":"The email you provided could not be found.","The email you provided is already a member of your team.":"The email you provided is already a member of your team.","The email you provided is already an admin in your team.":"The email you provided is already an admin in your team.","The email you provided is not an admin in your team.":"The email you provided is not an admin in your team.","The extension can't be imported because it has the same name as a built-in extension.":"The extension can't be imported because it has the same name as a built-in extension.","The extension installed in this project is not up to date. Consider upgrading it before reporting any issue.":"The extension installed in this project is not up to date. Consider upgrading it before reporting any issue.","The extension was added to the project. You can now use it in the list of actions/conditions and, if it's a behavior, in the list of behaviors for an object.":"The extension was added to the project. You can now use it in the list of actions/conditions and, if it's a behavior, in the list of behaviors for an object.","The far plane distance must be greater than the near plan distance.":"The far plane distance must be greater than the near plan distance.","The field of view cannot be lower than 0° or greater than 180°.":"The field of view cannot be lower than 0° or greater than 180°.","The file {0} is invalid.":function(a){return["The file ",a("0")," is invalid."]},"The file {0} is too large. Use files that are smaller for your game: each must be less than {1} MB.":function(a){return["The file ",a("0")," is too large. Use files that are smaller for your game: each must be less than ",a("1")," MB."]},"The following actions, conditions, or expressions no longer exist in their extensions. This can happen when an extension's API has changed or when functionality has been removed. Update or remove these instructions.":"The following actions, conditions, or expressions no longer exist in their extensions. This can happen when an extension's API has changed or when functionality has been removed. Update or remove these instructions.","The following events have invalid parameters (shown with red underline in the events sheet). Click a location to navigate there.":"The following events have invalid parameters (shown with red underline in the events sheet). Click a location to navigate there.","The following file(s) cannot be used for this kind of object: {0}":function(a){return["The following file(s) cannot be used for this kind of object: ",a("0")]},"The font size is stored directly inside the font. If you want to change it, export again your font using an external editor like bmFont. Click on the help button to learn more.":"The font size is stored directly inside the font. If you want to change it, export again your font using an external editor like bmFont. Click on the help button to learn more.","The force will only push the object during the time of one frame. Typically used in an event with no conditions or with conditions that stay valid for a certain amount of time.":"The force will only push the object during the time of one frame. Typically used in an event with no conditions or with conditions that stay valid for a certain amount of time.","The force will push the object forever, unless you use the action \"Stop the object\". Typically used in an event with conditions that are only true once, or with a \"Trigger Once\" condition.":"The force will push the object forever, unless you use the action \"Stop the object\". Typically used in an event with conditions that are only true once, or with a \"Trigger Once\" condition.","The free version is enough for me":"The free version is enough for me","The game template {0} will be linked to your account {1}.":function(a){return["The game template ",a("0")," will be linked to your account ",a("1"),"."]},"The game was properly exported. You can now use Electron Builder (you need Node.js installed and to use the command-line on your computer to run it) to create an executable.":"The game was properly exported. You can now use Electron Builder (you need Node.js installed and to use the command-line on your computer to run it) to create an executable.","The game you're trying to open is not registered online. Open the project file, then register it before continuing.":"The game you're trying to open is not registered online. Open the project file, then register it before continuing.","The icing on the cake":"The icing on the cake","The image should be at least 864x864px, and the logo must fit [within a circle of 576px](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions). Transparent borders are automatically added when generated to help ensuring":"The image should be at least 864x864px, and the logo must fit [within a circle of 576px](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions). Transparent borders are automatically added when generated to help ensuring","The invitation sent to {email} will be cancelled.":function(a){return["The invitation sent to ",a("email")," will be cancelled."]},"The latest save of \"{cloudProjectName}\" is corrupt and cannot be opened.":function(a){return["The latest save of \"",a("cloudProjectName"),"\" is corrupt and cannot be opened."]},"The latest save of this project is corrupt and cannot be opened.":"The latest save of this project is corrupt and cannot be opened.","The layer {0} does not contain any object instances. Continue?":function(a){return["The layer ",a("0")," does not contain any object instances. Continue?"]},"The light object was automatically placed on the Lighting layer.":"The light object was automatically placed on the Lighting layer.","The lighting layer renders an ambient light on the scene. All lights should be placed on this layer so that shadows are properly rendered. By default, the layer follows the base layer camera. Uncheck this if you want to manually move the camera using events.":"The lighting layer renders an ambient light on the scene. All lights should be placed on this layer so that shadows are properly rendered. By default, the layer follows the base layer camera. Uncheck this if you want to manually move the camera using events.","The link to the asset pack you've followed seems outdated. Why not take a look at the other packs in the asset store?":"The link to the asset pack you've followed seems outdated. Why not take a look at the other packs in the asset store?","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles in the store?":"The link to the bundle you've followed seems outdated. Why not take a look at the other bundles in the store?","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles?":"The link to the bundle you've followed seems outdated. Why not take a look at the other bundles?","The link to the game template you've followed seems outdated. Why not take a look at the other templates in the store?":"The link to the game template you've followed seems outdated. Why not take a look at the other templates in the store?","The main account of the Education plan cannot be modified.":"The main account of the Education plan cannot be modified.","The maximum 2D drawing distance must be strictly greater than 0.":"The maximum 2D drawing distance must be strictly greater than 0.","The model has {meshShapeTrianglesCount} triangles. To keep good performance, consider making a simplified model with a modeling tool.":function(a){return["The model has ",a("meshShapeTrianglesCount")," triangles. To keep good performance, consider making a simplified model with a modeling tool."]},"The monthly free asset pack perk was not part of your plan at the time you got your subscription to GDevelop. To enjoy this perk, please purchase a new subscription.":"The monthly free asset pack perk was not part of your plan at the time you got your subscription to GDevelop. To enjoy this perk, please purchase a new subscription.","The more descriptive you are, the better we can match the content we’ll recommend.":"The more descriptive you are, the better we can match the content we’ll recommend.","The name of your game is empty":"The name of your game is empty","The near plane distance must be strictly greater than 0 and lower than the far plan distance.":"The near plane distance must be strictly greater than 0 and lower than the far plan distance.","The number of decimal places must be a whole value between {precisionMinValue} and {precisionMaxValue}":function(a){return["The number of decimal places must be a whole value between ",a("precisionMinValue")," and ",a("precisionMaxValue")]},"The number of displayed entries must be a whole value between {displayedEntriesMinNumber} and {displayedEntriesMaxNumber}":function(a){return["The number of displayed entries must be a whole value between ",a("displayedEntriesMinNumber")," and ",a("displayedEntriesMaxNumber")]},"The object does not exist or can't be used here.":"The object does not exist or can't be used here.","The package name begins with com.example, make sure you replace it with an unique one to be able to publish your game on app stores.":"The package name begins with com.example, make sure you replace it with an unique one to be able to publish your game on app stores.","The package name begins with com.example, make sure you replace it with an unique one, else installing your game might overwrite other games.":"The package name begins with com.example, make sure you replace it with an unique one, else installing your game might overwrite other games.","The package name is containing invalid characters or not following the convention \"xxx.yyy.zzz\" (numbers allowed after a letter only).":"The package name is containing invalid characters or not following the convention \"xxx.yyy.zzz\" (numbers allowed after a letter only).","The package name is empty.":"The package name is empty.","The package name is too long.":"The package name is too long.","The password is invalid.":"The password is invalid.","The password you entered is incorrect. Please try again.":"The password you entered is incorrect. Please try again.","The polygon is not convex":"The polygon is not convex","The polygon is not convex. Ensure it is, otherwise the collision mask won't work.":"The polygon is not convex. Ensure it is, otherwise the collision mask won't work.","The preview could not be launched because an error happened: {0}.":function(a){return["The preview could not be launched because an error happened: ",a("0"),"."]},"The preview could not be launched because you're offline.":"The preview could not be launched because you're offline.","The project associated with this AI request does not match the current project. Open the correct project to restore to this state.":"The project associated with this AI request does not match the current project. Open the correct project to restore to this state.","The project could not be saved. Please try again later.":"The project could not be saved. Please try again later.","The project currently opened is not registered online. Register it now to get access to leaderboards, player accounts, analytics and more!":"The project currently opened is not registered online. Register it now to get access to leaderboards, player accounts, analytics and more!","The project currently opened is registered online but you don't have access to it. A link or file will be created but the game will not be registered.":"The project currently opened is registered online but you don't have access to it. A link or file will be created but the game will not be registered.","The project file appears to be corrupted, but an autosave file exists (backup made automatically by GDevelop on {0}). Would you like to try to load it instead?":function(a){return["The project file appears to be corrupted, but an autosave file exists (backup made automatically by GDevelop on ",a("0"),"). Would you like to try to load it instead?"]},"The project save associated with this AI request message is no longer available due to your current plan's limit. Upgrade your subscription to access older project saves.":"The project save associated with this AI request message is no longer available due to your current plan's limit. Upgrade your subscription to access older project saves.","The project save associated with this AI request message was not found. It may have been deleted.":"The project save associated with this AI request message was not found. It may have been deleted.","The provisioning profile was properly stored ( {lastUploadedProvisioningProfileName}). If you properly uploaded the certificate before, it can now be used.":function(a){return["The provisioning profile was properly stored ( ",a("lastUploadedProvisioningProfileName"),"). If you properly uploaded the certificate before, it can now be used."]},"The purchase will be linked to your account once done.":"The purchase will be linked to your account once done.","The request could not be processed. Please verify you uploaded a valid certificate file (.cer) from Apple.":"The request could not be processed. Please verify you uploaded a valid certificate file (.cer) from Apple.","The request could not reach the servers, ensure you are connected to internet.":"The request could not reach the servers, ensure you are connected to internet.","The resource has been downloaded":"The resource has been downloaded","The result wasn't as good as it could have been":"The result wasn't as good as it could have been","The selected resource is not a proper Spine resource.":"The selected resource is not a proper Spine resource.","The sentence displays one or more wrongs parameters:":"The sentence displays one or more wrongs parameters:","The sentence is probably missing this/these parameter(s):":"The sentence is probably missing this/these parameter(s):","The server is currently unavailable. Please try again later.":"The server is currently unavailable. Please try again later.","The shape used in the Physics behavior is independent from the collision mask of the object. Be sure to use the \"Collision\" condition provided by the Physics behavior in the events. The usual \"Collision\" condition won't take into account the shape that you've set up here.":"The shape used in the Physics behavior is independent from the collision mask of the object. Be sure to use the \"Collision\" condition provided by the Physics behavior in the events. The usual \"Collision\" condition won't take into account the shape that you've set up here.","The specified external events do not exist in the game. Be sure that the name is correctly spelled or create them using the project manager.":"The specified external events do not exist in the game. Be sure that the name is correctly spelled or create them using the project manager.","The subscription of this account comes from outside the app store. Connect with your account on editor.gdevelop.io from your web-browser to manage it.":"The subscription of this account comes from outside the app store. Connect with your account on editor.gdevelop.io from your web-browser to manage it.","The subscription of this account was done using Apple or Google Play. Connect on your account on your Apple or Google device to manage it.":"The subscription of this account was done using Apple or Google Play. Connect on your account on your Apple or Google device to manage it.","The text input will be always shown on top of all other objects in the game - this is a limitation that can't be changed. According to the platform/device or browser running the game, the appearance can also slightly change.":"The text input will be always shown on top of all other objects in the game - this is a limitation that can't be changed. According to the platform/device or browser running the game, the appearance can also slightly change.","The tilemap must be designed in a separated program, Tiled, that can be downloaded on mapeditor.org. Save your map as a JSON file, then select here the Atlas image that you used and the Tile map JSON file.":"The tilemap must be designed in a separated program, Tiled, that can be downloaded on mapeditor.org. Save your map as a JSON file, then select here the Atlas image that you used and the Tile map JSON file.","The token used to claim this purchase is invalid.":"The token used to claim this purchase is invalid.","The uploaded certificate does not match the signing request that was generated. Please create a new signing request and generate a new certificate from Apple using it.":"The uploaded certificate does not match the signing request that was generated. Please create a new signing request and generate a new certificate from Apple using it.","The usage of a number or expression is deprecated. Please now use only \"Permanent\" or \"Instant\" for configuring forces.":"The usage of a number or expression is deprecated. Please now use only \"Permanent\" or \"Instant\" for configuring forces.","The variable name contains a space - this is not recommended. Prefer to use underscores or uppercase letters to separate words.":"The variable name contains a space - this is not recommended. Prefer to use underscores or uppercase letters to separate words.","The variable name looks like you're building an expression or a formula. You can only use this for structure or arrays. For example: Score[3].":"The variable name looks like you're building an expression or a formula. You can only use this for structure or arrays. For example: Score[3].","The version history is available for cloud projects only.":"The version history is available for cloud projects only.","The version that you've set for the game is invalid.":"The version that you've set for the game is invalid.","The {productType} {productName} will be linked to your account {0}":function(a){return["The ",a("productType")," ",a("productName")," will be linked to your account ",a("0")]},"There are currently no leaderboards created for this game. Open the leaderboards manager to create one.":"There are currently no leaderboards created for this game. Open the leaderboards manager to create one.","There are no <0>2D effects on this layer.":"There are no <0>2D effects on this layer.","There are no <0>3D effects on this layer.":"There are no <0>3D effects on this layer.","There are no <0>behaviors on this object instance.":"There are no <0>behaviors on this object instance.","There are no <0>behaviors on this object.":"There are no <0>behaviors on this object.","There are no <0>effects on this object.":"There are no <0>effects on this object.","There are no <0>variables on this object.":"There are no <0>variables on this object.","There are no <0>variables on this scene.":"There are no <0>variables on this scene.","There are no common <0>variables on this group objects.":"There are no common <0>variables on this group objects.","There are no objects. Objects will appear if you add some as parameter or add children to the object.":"There are no objects. Objects will appear if you add some as parameter or add children to the object.","There are no objects. Objects will appear if you add some as parameters.":"There are no objects. Objects will appear if you add some as parameters.","There are no provisioning profile created for this certificate. Create one in the Apple Developer interface and add it here.":"There are no provisioning profile created for this certificate. Create one in the Apple Developer interface and add it here.","There are no variables on this instance.":"There are no variables on this instance.","There are unsaved changes":"There are unsaved changes","There are variables used in events but not declared in this list: {0}.":function(a){return["There are variables used in events but not declared in this list: ",a("0"),"."]},"There are {instancesCountInLayout} object instances on this layer. Should they be moved to another layer?":function(a){return["There are ",a("instancesCountInLayout")," object instances on this layer. Should they be moved to another layer?"]},"There are {instancesCount} instances of objects on this layer.":function(a){return["There are ",a("instancesCount")," instances of objects on this layer."]},"There is no <0>global object yet.":"There is no <0>global object yet.","There is no behavior to set up for this object.":"There is no behavior to set up for this object.","There is no extension to update.":"There is no extension to update.","There is no global group yet.":"There is no global group yet.","There is no object in your game or in this scene. Start by adding an new object in the scene editor, using the objects list.":"There is no object in your game or in this scene. Start by adding an new object in the scene editor, using the objects list.","There is no variable to set up.":"There is no variable to set up.","There is no variant to update.":"There is no variant to update.","There is nothing to configure for this behavior. You can still use events to interact with the object and this behavior.":"There is nothing to configure for this behavior. You can still use events to interact with the object and this behavior.","There is nothing to configure for this effect.":"There is nothing to configure for this effect.","There is nothing to configure for this object. You can still use events to interact with the object.":"There is nothing to configure for this object. You can still use events to interact with the object.","There is nothing to configure.":"There is nothing to configure.","There was a problem":"There was a problem","There was an error verifying the URL(s). Please check they are correct.":"There was an error verifying the URL(s). Please check they are correct.","There was an error while canceling your subscription. Verify your internet connection or try again later.":"There was an error while canceling your subscription. Verify your internet connection or try again later.","There was an error while creating the object \"{0}\". Verify your internet connection or try again later.":function(a){return["There was an error while creating the object \"",a("0"),"\". Verify your internet connection or try again later."]},"There was an error while installing the asset \"{0}\". Verify your internet connection or try again later.":function(a){return["There was an error while installing the asset \"",a("0"),"\". Verify your internet connection or try again later."]},"There was an error while making an auto-save of the project. Verify that you have permissions to write in the project folder.":"There was an error while making an auto-save of the project. Verify that you have permissions to write in the project folder.","There was an error while updating the game's thumbnail on gd.games. Verify your internet connection or try again later.":"There was an error while updating the game's thumbnail on gd.games. Verify your internet connection or try again later.","There was an error while uploading some resources. Verify your internet connection or try again later.":"There was an error while uploading some resources. Verify your internet connection or try again later.","There was an issue getting the game analytics.":"There was an issue getting the game analytics.","There was an unknown error when trying to apply the code. Double check the code, try again later or contact us if this persists.":"There was an unknown error when trying to apply the code. Double check the code, try again later or contact us if this persists.","There were errors when importing resources for the project. You can retry (recommended) or continue despite the errors. In this case, the project might be missing some resources.":"There were errors when importing resources for the project. You can retry (recommended) or continue despite the errors. In this case, the project might be missing some resources.","There were errors when loading extensions. You cannot continue using GDevelop.":"There were errors when loading extensions. You cannot continue using GDevelop.","There were errors when preparing new leaderboards for the project.":"There were errors when preparing new leaderboards for the project.","These are behaviors":"These are behaviors","These are objects":"These are objects","These behaviors are already attached to the object:{0}Do you want to replace their property values?":function(a){return["These behaviors are already attached to the object:",a("0"),"Do you want to replace their property values?"]},"These effects already exist:{0}Do you want to replace them?":function(a){return["These effects already exist:",a("0"),"Do you want to replace them?"]},"These parameters already exist:{0}Do you want to replace them?":function(a){return["These parameters already exist:",a("0"),"Do you want to replace them?"]},"These properties already exist:{0}Do you want to replace them?":function(a){return["These properties already exist:",a("0"),"Do you want to replace them?"]},"These variables hold additional information and are available on all objects of the group.":"These variables hold additional information and are available on all objects of the group.","These variables hold additional information on a project.":"These variables hold additional information on a project.","These variables hold additional information on a scene.":"These variables hold additional information on a scene.","These variables hold additional information on an object.":"These variables hold additional information on an object.","Thickness":"Thickness","Thinking about your request...":"Thinking about your request...","Thinking through the approach":"Thinking through the approach","Thinking through the details":"Thinking through the details","Third editor":"Third editor","Third-party":"Third-party","This Auth Key was not sent or is not ready to be used.":"This Auth Key was not sent or is not ready to be used.","This Else event is not preceded by a standard event (or another Else), so it will run normally, like an event without an Else.":"This Else event is not preceded by a standard event (or another Else), so it will run normally, like an event without an Else.","This Else event will run if the previous event conditions are not met.":"This Else event will run if the previous event conditions are not met.","This Spine resource was exported with Spine {spineVersion}. The runtime requires data exported from Spine 4.2. Animations may not work correctly — please re-export from Spine 4.2.":function(a){return["This Spine resource was exported with Spine ",a("spineVersion"),". The runtime requires data exported from Spine 4.2. Animations may not work correctly \u2014 please re-export from Spine 4.2."]},"This account already owns this product, you cannot activate it again.":"This account already owns this product, you cannot activate it again.","This account has been deactivated or deleted.":"This account has been deactivated or deleted.","This account is already a student in another team.":"This account is already a student in another team.","This action cannot be undone.":"This action cannot be undone.","This action is deprecated and should not be used anymore. Instead, use for all your objects the behavior called \"Physics2\" and the associated actions (in this case, all objects must be set up to use Physics2, you can't mix the behaviors).":"This action is deprecated and should not be used anymore. Instead, use for all your objects the behavior called \"Physics2\" and the associated actions (in this case, all objects must be set up to use Physics2, you can't mix the behaviors).","This action is deprecated and should not be used anymore. Instead, use the \"Text input\" object.":"This action is deprecated and should not be used anymore. Instead, use the \"Text input\" object.","This action is not automatic yet, we will get in touch to gather your bank details.":"This action is not automatic yet, we will get in touch to gather your bank details.","This action will create a new texture and re-render the text each time it is called, which is expensive and can reduce performance. Avoid changing the character size of text frequently.":"This action will create a new texture and re-render the text each time it is called, which is expensive and can reduce performance. Avoid changing the character size of text frequently.","This asset requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["This asset requires updates to extensions that have breaking changes",a("0"),"Do you want to update them now?"]},"This behavior can be updated with new features and fixes.{0}Do you want to update it now ?":function(a){return["This behavior can be updated with new features and fixes.",a("0"),"Do you want to update it now ?"]},"This behavior can be updated. You may have to do some adaptations to make sure your game still works.{0}Do you want to update it now ?":function(a){return["This behavior can be updated. You may have to do some adaptations to make sure your game still works.",a("0"),"Do you want to update it now ?"]},"This behavior can't be setup per instance.":"This behavior can't be setup per instance.","This behavior is being used by multiple types of objects. Thus, you can't restrict its usage to any particular object type. All the object types using this behavior are listed here: {0}":function(a){return["This behavior is being used by multiple types of objects. Thus, you can't restrict its usage to any particular object type. All the object types using this behavior are listed here: ",a("0")]},"This behavior is unknown. It might be a behavior that was defined in an extension and that was later removed. You should delete it.":"This behavior is unknown. It might be a behavior that was defined in an extension and that was later removed. You should delete it.","This behavior requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["This behavior requires updates to extensions that have breaking changes",a("0"),"Do you want to update them now?"]},"This behavior will be visible in the scene and events editors.":"This behavior will be visible in the scene and events editors.","This behavior won't be visible in the scene and events editors.":"This behavior won't be visible in the scene and events editors.","This build is old and the generated games can't be downloaded anymore.":"This build is old and the generated games can't be downloaded anymore.","This bundle contains a subscription for {planName}. Do you want to activate your subscription right away?":function(a){return["This bundle contains a subscription for ",a("planName"),". Do you want to activate your subscription right away?"]},"This bundle includes:":"This bundle includes:","This can be customized for each scene in the scene properties dialog.":"This can be customized for each scene in the scene properties dialog.","This can either be a URL to a web page, or a path starting with a slash that will be opened in the GDevelop wiki. Leave empty if there is no help page, although it's recommended you eventually write one if you distribute the extension.":"This can either be a URL to a web page, or a path starting with a slash that will be opened in the GDevelop wiki. Leave empty if there is no help page, although it's recommended you eventually write one if you distribute the extension.","This certificate has an unknown type and is probably unable to be used by GDevelop.":"This certificate has an unknown type and is probably unable to be used by GDevelop.","This certificate type is unknown and might not work when building the app. Are you sure you want to continue?":"This certificate type is unknown and might not work when building the app. Are you sure you want to continue?","This certificate was not sent or is not ready to be used.":"This certificate was not sent or is not ready to be used.","This code is a coupon code and can't be redeemed here. Start a purchase and enter it there to get a discount.":"This code is a coupon code and can't be redeemed here. Start a purchase and enter it there to get a discount.","This code is not valid - verify you've entered it properly.":"This code is not valid - verify you've entered it properly.","This code was valid but can't be redeemed anymore. If this is unexpected, contact us or the code provider.":"This code was valid but can't be redeemed anymore. If this is unexpected, contact us or the code provider.","This condition may have unexpected results when the object is on different floors at the same time, due to the fact that the engine only considers the first floor the object comes into contact with.":"This condition may have unexpected results when the object is on different floors at the same time, due to the fact that the engine only considers the first floor the object comes into contact with.","This course is translated in multiple languages.":"This course is translated in multiple languages.","This email is invalid.":"This email is invalid.","This email was already used for another account.":"This email was already used for another account.","This event will be repeated for all instances.":"This event will be repeated for all instances.","This event will be repeated only for the first instances, up to this limit.":"This event will be repeated only for the first instances, up to this limit.","This extension requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["This extension requires updates to extensions that have breaking changes",a("0"),"Do you want to update them now?"]},"This file is an extension file for GDevelop 5. You should instead import it, using the window to add a new extension to your project.":"This file is an extension file for GDevelop 5. You should instead import it, using the window to add a new extension to your project.","This file is corrupt":"This file is corrupt","This file is not recognized as a GDevelop 5 project. Be sure to open a file that was saved using GDevelop.":"This file is not recognized as a GDevelop 5 project. Be sure to open a file that was saved using GDevelop.","This function calls itself (it is \"recursive\"). Ensure this is expected and there is a proper condition to stop it if necessary.":"This function calls itself (it is \"recursive\"). Ensure this is expected and there is a proper condition to stop it if necessary.","This function is asynchronous - it will only allow subsequent events to run after calling the action \"End asynchronous task\" within the function.":"This function is asynchronous - it will only allow subsequent events to run after calling the action \"End asynchronous task\" within the function.","This function is marked as deprecated. It will be displayed with a warning in the events editor.":"This function is marked as deprecated. It will be displayed with a warning in the events editor.","This function will be visible in the events editor.":"This function will be visible in the events editor.","This function will have a lot of parameters. Consider creating groups or functions for a smaller set of objects so that the function is easier to reuse.":"This function will have a lot of parameters. Consider creating groups or functions for a smaller set of objects so that the function is easier to reuse.","This function won't be visible in the events editor.":"This function won't be visible in the events editor.","This game is not registered online. Do you want to register it to access the online features?":"This game is not registered online. Do you want to register it to access the online features?","This game is registered online but you don't have access to it. Ask the owner of the game to add your account to the list of owners to be able to manage it.":"This game is registered online but you don't have access to it. Ask the owner of the game to add your account to the list of owners to be able to manage it.","This game is using leaderboards. GDevelop will create new leaderboards for this game in your account, so that the game is ready to be played and players can send their scores.":"This game is using leaderboards. GDevelop will create new leaderboards for this game in your account, so that the game is ready to be played and players can send their scores.","This group contains objects of different kinds. You'll only be able to use actions and conditions common to all objects with this group.":"This group contains objects of different kinds. You'll only be able to use actions and conditions common to all objects with this group.","This group contains objects of the same kind ({type}). You can use actions and conditions related to this kind of objects in events with this group.":function(a){return["This group contains objects of the same kind (",a("type"),"). You can use actions and conditions related to this kind of objects in events with this group."]},"This invitation is no longer valid.":"This invitation is no longer valid.","This is a \"lifecycle function\". It will be called automatically by the game engine. It has no parameters.":"This is a \"lifecycle function\". It will be called automatically by the game engine. It has no parameters.","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene having the behavior.":"This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene having the behavior.","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene.":"This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene.","This is a behavior.":"This is a behavior.","This is a condition.":"This is a condition.","This is a multichapter tutorial. GDevelop will save your progress so you can take a break when you need it.":"This is a multichapter tutorial. GDevelop will save your progress so you can take a break when you need it.","This is a relative path that will open in the GDevelop wiki.":"This is a relative path that will open in the GDevelop wiki.","This is all the feedback received on {0} coming from gd.games.":function(a){return["This is all the feedback received on ",a("0")," coming from gd.games."]},"This is an action.":"This is an action.","This is an asynchronous action, meaning that the actions and sub-events following it will wait for it to end. You should use other async actions like \"wait\" to schedule your actions and don't forget to use the action \"End asynchronous function\" to mark the end of the action.":"This is an asynchronous action, meaning that the actions and sub-events following it will wait for it to end. You should use other async actions like \"wait\" to schedule your actions and don't forget to use the action \"End asynchronous function\" to mark the end of the action.","This is an event.":"This is an event.","This is an expression.":"This is an expression.","This is an extension made by a community member and it only got through a light review by the GDevelop extension team. As such, we can't guarantee it meets all the quality standards of fully reviewed extensions.":"This is an extension made by a community member and it only got through a light review by the GDevelop extension team. As such, we can't guarantee it meets all the quality standards of fully reviewed extensions.","This is an extension.":"This is an extension.","This is an object.":"This is an object.","This is link to a webpage.":"This is link to a webpage.","This is not a URL starting with \"http://\" or \"https://\".":"This is not a URL starting with \"http://\" or \"https://\".","This is recommended as this allows you to earn money from your games. If you disable this, your game will not show any advertisement.":"This is recommended as this allows you to earn money from your games. If you disable this, your game will not show any advertisement.","This is the configuration of your behavior. Make sure to choose a proper internal name as it's hard to change it later. Enter a description explaining what the behavior is doing to the object.":"This is the configuration of your behavior. Make sure to choose a proper internal name as it's hard to change it later. Enter a description explaining what the behavior is doing to the object.","This is the configuration of your object. Make sure to choose a proper internal name as it's hard to change it later.":"This is the configuration of your object. Make sure to choose a proper internal name as it's hard to change it later.","This is the end of the version history.":"This is the end of the version history.","This is the list of builds that you've done for this game. <0/>Note that builds for mobile and desktop are available for 7 days, after which they are removed.":"This is the list of builds that you've done for this game. <0/>Note that builds for mobile and desktop are available for 7 days, after which they are removed.","This leaderboard is already resetting, please wait a bit, close the dialog, come back and try again.":"This leaderboard is already resetting, please wait a bit, close the dialog, come back and try again.","This link is private. You can share it with collaborators, friends or testers.<0/>When you're ready, go to the Game Dashboard and publish it on gd.games.":"This link is private. You can share it with collaborators, friends or testers.<0/>When you're ready, go to the Game Dashboard and publish it on gd.games.","This month":"This month","This needs improvement":"This needs improvement","This object can't be used here because it would create a circular dependency with the object being edited.":"This object can't be used here because it would create a circular dependency with the object being edited.","This object does not have any specific configuration. Add it on the scene and use events to interact with it.":"This object does not have any specific configuration. Add it on the scene and use events to interact with it.","This object exists, but can't be used here.":"This object exists, but can't be used here.","This object group is empty and locked.":"This object group is empty and locked.","This object has no behaviors: please add a behavior to the object first.":"This object has no behaviors: please add a behavior to the object first.","This object has no properties.":"This object has no properties.","This object misses some behaviors: {0}":function(a){return["This object misses some behaviors: ",a("0")]},"This object will be visible in the scene and events editors.":"This object will be visible in the scene and events editors.","This object won't be visible in the scene and events editors.":"This object won't be visible in the scene and events editors.","This password is too weak: please use more letters and digits.":"This password is too weak: please use more letters and digits.","This project cannot be opened":"This project cannot be opened","This project contains toolbar buttons that want to run npm scripts on your computer ({scriptNames}). Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["This project contains toolbar buttons that want to run npm scripts on your computer (",a("scriptNames"),"). Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data."]},"This project has an auto-saved version":"This project has an auto-saved version","This project has configured npm scripts ({scriptNames}) to run automatically when the \"{hookName}\" editor lifecycle hook fires. Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["This project has configured npm scripts (",a("scriptNames"),") to run automatically when the \"",a("hookName"),"\" editor lifecycle hook fires. Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data."]},"This project was modified by someone else on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["This project was modified by someone else on the ",a("formattedDate")," at ",a("formattedTime"),". Do you want to overwrite their changes?"]},"This project was modified by {lastUsernameWhoModifiedProject} on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["This project was modified by ",a("lastUsernameWhoModifiedProject")," on the ",a("formattedDate")," at ",a("formattedTime"),". Do you want to overwrite their changes?"]},"This property won't be visible in the editor.":"This property won't be visible in the editor.","This purchase cannot be claimed.":"This purchase cannot be claimed.","This purchase could not be found. Please contact support for more information.":"This purchase could not be found. Please contact support for more information.","This purchase has already been activated.":"This purchase has already been activated.","This request is for another project. <0>Start a new chat to build on a new project.":"This request is for another project. <0>Start a new chat to build on a new project.","This resource does not exist in the game":"This resource does not exist in the game","This scene will be used as the start scene.":"This scene will be used as the start scene.","This setting changes the visibility of the entire layer. Objects on the layer will not be treated as \"hidden\" for event conditions or actions.":"This setting changes the visibility of the entire layer. Objects on the layer will not be treated as \"hidden\" for event conditions or actions.","This shortcut clashes with another action.":"This shortcut clashes with another action.","This sprite uses a rectangle that is as large as the sprite for its collision mask.":"This sprite uses a rectangle that is as large as the sprite for its collision mask.","This tutorial must be unlocked to be accessed.":"This tutorial must be unlocked to be accessed.","This user does not have projects yet.":"This user does not have projects yet.","This user is already a collaborator.":"This user is already a collaborator.","This user was not found: have you created your account?":"This user was not found: have you created your account?","This username is already used, please pick another one.":"This username is already used, please pick another one.","This variable does not exist. <0>Click to add it.":"This variable does not exist. <0>Click to add it.","This variable has the same name as an object. Consider renaming one or the other.":"This variable has the same name as an object. Consider renaming one or the other.","This variable is not declared. It's recommended to use the *variables editor* to add it.":"This variable is not declared. It's recommended to use the *variables editor* to add it.","This variant can't be modified directly. It must be duplicated first.":"This variant can't be modified directly. It must be duplicated first.","This version of GDevelop is:":"This version of GDevelop is:","This was helpful":"This was helpful","This week":"This week","This will be used when packaging and submitting your application to the stores.":"This will be used when packaging and submitting your application to the stores.","This will close your current project. Unsaved changes will be lost.":"This will close your current project. Unsaved changes will be lost.","This will export your game as a Cordova project. Cordova is a technology that enables HTML5 games to be packaged for iOS and Android.":"This will export your game as a Cordova project. Cordova is a technology that enables HTML5 games to be packaged for iOS and Android.","This will export your game so that you can package it for Windows, macOS or Linux. You will need to install third-party tools (Node.js, Electron Builder) to package your game.":"This will export your game so that you can package it for Windows, macOS or Linux. You will need to install third-party tools (Node.js, Electron Builder) to package your game.","This will export your game to a folder. You can then upload it on a website/game hosting service and share it on marketplaces and gaming portals like CrazyGames, Poki, Game Jolt, itch.io, Newgrounds...":"This will export your game to a folder. You can then upload it on a website/game hosting service and share it on marketplaces and gaming portals like CrazyGames, Poki, Game Jolt, itch.io, Newgrounds...","This year":"This year","This/these file(s) are outside the project folder. Would you like to make a copy of them in your project folder first (recommended)?":"This/these file(s) are outside the project folder. Would you like to make a copy of them in your project folder first (recommended)?","Through a teacher":"Through a teacher","Throwing physics":"Throwing physics","TikTok":"TikTok","Tile Map":"Tile Map","Tile Set":"Tile Set","Tile map resource":"Tile map resource","Tile picker":"Tile picker","Tile size":"Tile size","Tiled sprite":"Tiled sprite","Tilemap":"Tilemap","Tilemap painter":"Tilemap painter","Time (ms)":"Time (ms)","Time between frames":"Time between frames","Time format":"Time format","Time score":"Time score","Timers":"Timers","Timers:":"Timers:","Timestamp: {0}":function(a){return["Timestamp: ",a("0")]},"Tiny":"Tiny","Title cannot be empty.":"Title cannot be empty.","To avoid flickering on objects followed by the camera, use sprites with even dimensions.":"To avoid flickering on objects followed by the camera, use sprites with even dimensions.","To begin, open or create a new project.":"To begin, open or create a new project.","To buy this new subscription, we need to stop your existing one before you can pay for the new one. This means the redemption code you're currently used won't be usable anymore.":"To buy this new subscription, we need to stop your existing one before you can pay for the new one. This means the redemption code you're currently used won't be usable anymore.","To confirm, type \"{translatedConfirmText}\"":function(a){return["To confirm, type \"",a("translatedConfirmText"),"\""]},"To edit the external events, choose the scene in which it will be included":"To edit the external events, choose the scene in which it will be included","To edit the external layout, choose the scene in which it will be included":"To edit the external layout, choose the scene in which it will be included","To get this new subscription, we need to stop your existing one before you can pay for the new one. This is immediate but your payment will NOT be pro-rated (you will pay the full price for the new subscription). You won't lose any project, game or other data.":"To get this new subscription, we need to stop your existing one before you can pay for the new one. This is immediate but your payment will NOT be pro-rated (you will pay the full price for the new subscription). You won't lose any project, game or other data.","To keep using GDevelop cloud, consider deleting old, unused projects.":"To keep using GDevelop cloud, consider deleting old, unused projects.","To keep using GDevelop leaderboards, consider deleting old, unused leaderboards.":"To keep using GDevelop leaderboards, consider deleting old, unused leaderboards.","To obtain the best pixel-perfect effect possible, go in the resources editor and disable the Smoothing for all images of your game. It will be done automatically for new images added from now.":"To obtain the best pixel-perfect effect possible, go in the resources editor and disable the Smoothing for all images of your game. It will be done automatically for new images added from now.","To preview the shape that the Physics engine will use for this object, choose first a temporary image to use for the preview.":"To preview the shape that the Physics engine will use for this object, choose first a temporary image to use for the preview.","To start a timer, don't forget to use the action \"Start (or reset) a scene timer\" in another event.":"To start a timer, don't forget to use the action \"Start (or reset) a scene timer\" in another event.","To start a timer, don't forget to use the action \"Start (or reset) an object timer\" in another event.":"To start a timer, don't forget to use the action \"Start (or reset) an object timer\" in another event.","To update your seats, contact us at education@gdevelop.io with the details of your current account and how many seats you would like.":"To update your seats, contact us at education@gdevelop.io with the details of your current account and how many seats you would like.","To use this formatting, you must send a score expressed in seconds":"To use this formatting, you must send a score expressed in seconds","Today":"Today","Toggle Developer Tools":"Toggle Developer Tools","Toggle Disabled":"Toggle Disabled","Toggle Fullscreen":"Toggle Fullscreen","Toggle Instances List Panel":"Toggle Instances List Panel","Toggle Layers Panel":"Toggle Layers Panel","Toggle Object Groups Panel":"Toggle Object Groups Panel","Toggle Objects Panel":"Toggle Objects Panel","Toggle Properties Panel":"Toggle Properties Panel","Toggle Wait the Action to End":"Toggle Wait the Action to End","Toggle disabled event":"Toggle disabled event","Toggle grid":"Toggle grid","Toggle inverted condition":"Toggle inverted condition","Toggle mask":"Toggle mask","Toggle/edit grid":"Toggle/edit grid","Too many things were changed or broken":"Too many things were changed or broken","Top":"Top","Top bound":"Top bound","Top bound should be smaller than bottom bound":"Top bound should be smaller than bottom bound","Top face":"Top face","Top left corner":"Top left corner","Top margin":"Top margin","Top right corner":"Top right corner","Top-Down RPG Pixel Perfect":"Top-Down RPG Pixel Perfect","Top-down":"Top-down","Top-down, classic editor":"Top-down, classic editor","Total":"Total","Touch (mobile)":"Touch (mobile)","Tracked C++ objects exposed to JavaScript. Counts refresh every second.":"Tracked C++ objects exposed to JavaScript. Counts refresh every second.","Transform a game into a multiplayer experience.":"Transform a game into a multiplayer experience.","Transform this Plinko game with collectibles that multiply your score.":"Transform this Plinko game with collectibles that multiply your score.","Transform this platformer into a co-op game, where two players can play together.":"Transform this platformer into a co-op game, where two players can play together.","Triangle":"Triangle","True":"True","True (checked)":"True (checked)","True or False":"True or False","True or False (boolean)":"True or False (boolean)","Try again":"Try again","Try different search terms or check your search options.":"Try different search terms or check your search options.","Try installing it from the extension store.":"Try installing it from the extension store.","Try it online":"Try it online","Try something else, browse the packs or create your object from scratch!":"Try something else, browse the packs or create your object from scratch!","Try your game":"Try your game","Tutorial":"Tutorial","Tweak gameplay":"Tweak gameplay","Twitter":"Twitter","Type":"Type","Type of License: <0>{0}":function(a){return["Type of License: <0>",a("0"),""]},"Type of License: {0}":function(a){return["Type of License: ",a("0")]},"Type of objects":"Type of objects","Type your email address to delete your account:":"Type your email address to delete your account:","Type your email to confirm":"Type your email to confirm","Type:":"Type:","UI Theme":"UI Theme","UI/Interface":"UI/Interface","URL":"URL","Unable to change feedback for this game":"Unable to change feedback for this game","Unable to change quality rating of feedback.":"Unable to change quality rating of feedback.","Unable to change read status of feedback.":"Unable to change read status of feedback.","Unable to change your email preferences":"Unable to change your email preferences","Unable to create a new project for the course chapter. Try again later.":"Unable to create a new project for the course chapter. Try again later.","Unable to create a new project for the tutorial. Try again later.":"Unable to create a new project for the tutorial. Try again later.","Unable to create the project":"Unable to create the project","Unable to delete the project":"Unable to delete the project","Unable to download and install the extension and its dependencies. Verify that your internet connection is working or try again later.":"Unable to download and install the extension and its dependencies. Verify that your internet connection is working or try again later.","Unable to download the icon. Verify your internet connection or try again later.":"Unable to download the icon. Verify your internet connection or try again later.","Unable to fetch leaderboards as you are offline.":"Unable to fetch leaderboards as you are offline.","Unable to fetch the example.":"Unable to fetch the example.","Unable to find the price for this asset pack. Please try again later.":"Unable to find the price for this asset pack. Please try again later.","Unable to find the price for this bundle. Please try again later.":"Unable to find the price for this bundle. Please try again later.","Unable to find the price for this course. Please try again later.":"Unable to find the price for this course. Please try again later.","Unable to find the price for this game template. Please try again later.":"Unable to find the price for this game template. Please try again later.","Unable to get the checkout URL. Please try again later.":"Unable to get the checkout URL. Please try again later.","Unable to load the code editor":"Unable to load the code editor","Unable to load the image":"Unable to load the image","Unable to load the information about the latest GDevelop releases. Verify your internet connection or retry later.":"Unable to load the information about the latest GDevelop releases. Verify your internet connection or retry later.","Unable to load the tutorial. Please try again later or contact us if the problem persists.":"Unable to load the tutorial. Please try again later or contact us if the problem persists.","Unable to mark one of the feedback as read.":"Unable to mark one of the feedback as read.","Unable to open the project":"Unable to open the project","Unable to open the project because this provider is unknown: {storageProviderName}. Try to open the project again from another location.":function(a){return["Unable to open the project because this provider is unknown: ",a("storageProviderName"),". Try to open the project again from another location."]},"Unable to open the project.":"Unable to open the project.","Unable to open this file.":"Unable to open this file.","Unable to open this window":"Unable to open this window","Unable to register the game":"Unable to register the game","Unable to remove collaborator":"Unable to remove collaborator","Unable to save the project":"Unable to save the project","Unable to start the debugger server! Make sure that you are authorized to run servers on this computer.":"Unable to start the debugger server! Make sure that you are authorized to run servers on this computer.","Unable to start the server for the preview! Make sure that you are authorized to run servers on this computer. Otherwise, use classic preview to test your game.":"Unable to start the server for the preview! Make sure that you are authorized to run servers on this computer. Otherwise, use classic preview to test your game.","Unable to unregister the game":"Unable to unregister the game","Unable to update game.":"Unable to update game.","Unable to update the game details.":"Unable to update the game details.","Unable to update the game owners or authors. Have you removed yourself from the owners?":"Unable to update the game owners or authors. Have you removed yourself from the owners?","Unable to update the game slug. A slug must be 6 to 30 characters long and only contains letters, digits or dashes.":"Unable to update the game slug. A slug must be 6 to 30 characters long and only contains letters, digits or dashes.","Unable to verify URLs {0} . Please check they are correct.":function(a){return["Unable to verify URLs ",a("0")," . Please check they are correct."]},"Understanding the context":"Understanding the context","Understood, I'll check my Apple or Google account":"Understood, I'll check my Apple or Google account","Undo":"Undo","Undo the last changes":"Undo the last changes","Unfortunately, this extension requires a newer version of GDevelop to work. Update GDevelop to be able to use this extension in your project.":"Unfortunately, this extension requires a newer version of GDevelop to work. Update GDevelop to be able to use this extension in your project.","Unknown behavior":"Unknown behavior","Unknown bundle":"Unknown bundle","Unknown certificate type":"Unknown certificate type","Unknown changes attempted for scene {scene_name}.":function(a){return["Unknown changes attempted for scene ",a("scene_name"),"."]},"Unknown game":"Unknown game","Unknown status":"Unknown status","Unknown status.":"Unknown status.","Unlimited":"Unlimited","Unlimited commercial use license for claim with Gold or Pro subscription":"Unlimited commercial use license for claim with Gold or Pro subscription","Unload at scene exit":"Unload at scene exit","Unloading of scene resources":"Unloading of scene resources","Unlock full access to GDevelop to create without limits!":"Unlock full access to GDevelop to create without limits!","Unlock the whole course":"Unlock the whole course","Unlock this lesson to finish the course":"Unlock this lesson to finish the course","Unlock with the full course":"Unlock with the full course","Unnamed":"Unnamed","Unregister game":"Unregister game","Unsaved changes":"Unsaved changes","Untitled external events":"Untitled external events","Untitled external layout":"Untitled external layout","Untitled scene":"Untitled scene","UntitledExtension":"UntitledExtension","Update":"Update","Update (could break the project)":"Update (could break the project)","Update <0>{label} of <1>{object_name} (in scene {scene_name}) to <2>{newValue}.":function(a){return["Update <0>",a("label")," of <1>",a("object_name")," (in scene ",a("scene_name"),") to <2>",a("newValue"),"."]},"Update <0>{label} of behavior {behavior_name} on object <1>{object_name} (in scene <2>{scene_name}) to <3>{newValue}.":function(a){return["Update <0>",a("label")," of behavior ",a("behavior_name")," on object <1>",a("object_name")," (in scene <2>",a("scene_name"),") to <3>",a("newValue"),"."]},"Update GDevelop to latest version":"Update GDevelop to latest version","Update events in scene <0>{scene_name}.":function(a){return["Update events in scene <0>",a("scene_name"),"."]},"Update game page":"Update game page","Update resolution during the game to fit the screen or window size":"Update resolution during the game to fit the screen or window size","Update some scene effects and groups for scene {scene_name}.":function(a){return["Update some scene effects and groups for scene ",a("scene_name"),"."]},"Update some scene effects and layers for scene {scene_name}.":function(a){return["Update some scene effects and layers for scene ",a("scene_name"),"."]},"Update some scene effects for scene {scene_name}.":function(a){return["Update some scene effects for scene ",a("scene_name"),"."]},"Update some scene effects, layers and groups for scene {scene_name}.":function(a){return["Update some scene effects, layers and groups for scene ",a("scene_name"),"."]},"Update some scene groups for scene {scene_name}.":function(a){return["Update some scene groups for scene ",a("scene_name"),"."]},"Update some scene layers and groups for scene {scene_name}.":function(a){return["Update some scene layers and groups for scene ",a("scene_name"),"."]},"Update some scene layers for scene {scene_name}.":function(a){return["Update some scene layers for scene ",a("scene_name"),"."]},"Update some scene properties and effects for scene {scene_name}.":function(a){return["Update some scene properties and effects for scene ",a("scene_name"),"."]},"Update some scene properties and groups for scene {scene_name}.":function(a){return["Update some scene properties and groups for scene ",a("scene_name"),"."]},"Update some scene properties and layers for scene {scene_name}.":function(a){return["Update some scene properties and layers for scene ",a("scene_name"),"."]},"Update some scene properties for scene {scene_name}.":function(a){return["Update some scene properties for scene ",a("scene_name"),"."]},"Update some scene properties, effects and groups for scene {scene_name}.":function(a){return["Update some scene properties, effects and groups for scene ",a("scene_name"),"."]},"Update some scene properties, layers and groups for scene {scene_name}.":function(a){return["Update some scene properties, layers and groups for scene ",a("scene_name"),"."]},"Update some scene properties, layers, effects and groups for scene {scene_name}.":function(a){return["Update some scene properties, layers, effects and groups for scene ",a("scene_name"),"."]},"Update the extension":"Update the extension","Update your seats":"Update your seats","Update your subscription":"Update your subscription","Update {0} properties of <0>{object_name} (in scene {scene_name}).":function(a){return["Update ",a("0")," properties of <0>",a("object_name")," (in scene ",a("scene_name"),")."]},"Update {0} settings of behavior {behavior_name} on object {object_name} (in scene {scene_name}).":function(a){return["Update ",a("0")," settings of behavior ",a("behavior_name")," on object ",a("object_name")," (in scene ",a("scene_name"),")."]},"Updates":"Updates","Updating...":"Updating...","Upgrade":"Upgrade","Upgrade for:":"Upgrade for:","Upgrade subscription":"Upgrade subscription","Upgrade to GDevelop Premium":"Upgrade to GDevelop Premium","Upgrade to GDevelop Premium to get more leaderboards, storage, and one-click packagings!":"Upgrade to GDevelop Premium to get more leaderboards, storage, and one-click packagings!","Upgrade to get more cloud projects, AI usage, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"Upgrade to get more cloud projects, AI usage, publishing, multiplayer, courses and credits every month with GDevelop Premium.","Upgrade to get more cloud projects, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"Upgrade to get more cloud projects, publishing, multiplayer, courses and credits every month with GDevelop Premium.","Upgrade your GDevelop subscription to unlock this packaging.":"Upgrade your GDevelop subscription to unlock this packaging.","Upgrade your Premium Plan":"Upgrade your Premium Plan","Upgrade your Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"Upgrade your Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.","Upgrade your subscription":"Upgrade your subscription","Upgrade your subscription to keep building with AI.":"Upgrade your subscription to keep building with AI.","Upload to build service":"Upload to build service","Uploading your game...":"Uploading your game...","Use":"Use","Use 3D rendering":"Use 3D rendering","Use <0><1/>{variableName} as the loop counter":function(a){return["Use <0><1/>",a("variableName")," as the loop counter"]},"Use GDevelop Credits":"Use GDevelop Credits","Use GDevelop credits or get a subscription to increase the limits.":"Use GDevelop credits or get a subscription to increase the limits.","Use GDevelop credits or upgrade your subscription to increase the limits.":"Use GDevelop credits or upgrade your subscription to increase the limits.","Use GDevelop credits to start an export.":"Use GDevelop credits to start an export.","Use a Tilemap to build a level and change it dynamically during the game.":"Use a Tilemap to build a level and change it dynamically during the game.","Use a custom collision mask":"Use a custom collision mask","Use a public URL":"Use a public URL","Use an expression":"Use an expression","Use as...":"Use as...","Use custom CSS for the leaderboard":"Use custom CSS for the leaderboard","Use experimental background serializer for saving projects":"Use experimental background serializer for saving projects","Use full image as collision mask":"Use full image as collision mask","Use icon":"Use icon","Use legacy renderer":"Use legacy renderer","Use same collision mask":"Use same collision mask","Use same collision mask for all animations?":"Use same collision mask for all animations?","Use same collision mask for all frames?":"Use same collision mask for all frames?","Use same points":"Use same points","Use same points for all animations?":"Use same points for all animations?","Use same points for all frames?":"Use same points for all frames?","Use the project setting":"Use the project setting","Use this external layout inside this scene to start all previews":"Use this external layout inside this scene to start all previews","Use this scene to start all previews":"Use this scene to start all previews","Use your email":"Use your email","User interface":"User interface","User name in the game URL":"User name in the game URL","Username":"Username","Usernames are required to choose a custom game URL.":"Usernames are required to choose a custom game URL.","Users can choose to see only players' best entries or not.":"Users can choose to see only players' best entries or not.","Users will be created with an anonymous email. You can later define a full name, a username, or update the generated password if needed.":"Users will be created with an anonymous email. You can later define a full name, a username, or update the generated password if needed.","Using GDevelop Credits":"Using GDevelop Credits","Using Nearest Scale Mode":"Using Nearest Scale Mode","Using a lot of effects can have a severe negative impact on the rendering performance, especially on low-end or mobile devices. Consider using less effects if possible. You can also disable and re-enable effects as needed using events.":"Using a lot of effects can have a severe negative impact on the rendering performance, especially on low-end or mobile devices. Consider using less effects if possible. You can also disable and re-enable effects as needed using events.","Using effects":"Using effects","Using empty events based behavior":"Using empty events based behavior","Using empty events based object":"Using empty events based object","Using events based behavior":"Using events based behavior","Using events based object":"Using events based object","Using function extractor":"Using function extractor","Using lighting layer":"Using lighting layer","Using non smoothed textures":"Using non smoothed textures","Using pixel rounding":"Using pixel rounding","Using the resource properties panel":"Using the resource properties panel","Using too much effects":"Using too much effects","Validate these parameters":"Validate these parameters","Validating...":"Validating...","Value":"Value","Variable":"Variable","Variables":"Variables","Variables declared in all objects of the group will be visible in event expressions.":"Variables declared in all objects of the group will be visible in event expressions.","Variables list":"Variables list","Variant":"Variant","Variant name":"Variant name","Variant updates":"Variant updates","Verify that you have the authorization for reading the file you're trying to access.":"Verify that you have the authorization for reading the file you're trying to access.","Verify your internet connection or try again later.":"Verify your internet connection or try again later.","Version":"Version","Version number (X.Y.Z)":"Version number (X.Y.Z)","Version {0}":function(a){return["Version ",a("0")]},"Version {0} ({1} available)":function(a){return["Version ",a("0")," (",a("1")," available)"]},"Version {version} is available and will be downloaded and installed automatically.":function(a){return["Version ",a("version")," is available and will be downloaded and installed automatically."]},"Version {version} is available. Open About to download and install it.":function(a){return["Version ",a("version")," is available. Open About to download and install it."]},"Vertical anchor":"Vertical anchor","Vertical flip":"Vertical flip","Video":"Video","Video format supported can vary according to devices and browsers. For maximum compatibility, use H.264/mp4 file format (and AAC for audio).":"Video format supported can vary according to devices and browsers. For maximum compatibility, use H.264/mp4 file format (and AAC for audio).","Video game":"Video game","Video resource":"Video resource","View":"View","View history":"View history","View original chat":"View original chat","Viewers":"Viewers","Viewpoint":"Viewpoint","Visibility":"Visibility","Visibility and instances ordering":"Visibility and instances ordering","Visibility in quick customization dialog":"Visibility in quick customization dialog","Visible":"Visible","Visible in editor":"Visible in editor","Visible in the search and your profile":"Visible in the search and your profile","Visual Effects":"Visual Effects","Visual appearance":"Visual appearance","Visual appearance (advanced)":"Visual appearance (advanced)","Visual effect":"Visual effect","Visuals":"Visuals","Wait for the action to end before executing the actions (and subevents) following it":"Wait for the action to end before executing the actions (and subevents) following it","Waiting for the purchase confirmation...":"Waiting for the purchase confirmation...","Waiting for the subscription confirmation...":"Waiting for the subscription confirmation...","Wallet":"Wallet","Want to know more?":"Want to know more?","Warning":"Warning","Watch changes in game engine (GDJS) sources and auto import them (dev only)":"Watch changes in game engine (GDJS) sources and auto import them (dev only)","Watch the project folder for file changes in order to refresh the resources used in the editor (images, 3D models, fonts, etc.)":"Watch the project folder for file changes in order to refresh the resources used in the editor (images, 3D models, fonts, etc.)","Watch tutorial":"Watch tutorial","We could not check your follow":"We could not check your follow","We could not check your subscription":"We could not check your subscription","We could not find your GitHub star":"We could not find your GitHub star","We could not find your GitHub user and star":"We could not find your GitHub user and star","We could not find your user":"We could not find your user","We couldn't find a version to go back to.":"We couldn't find a version to go back to.","We couldn't find your project.{0}If your project is stored on a different computer, launch GDevelop on that computer.{1}Otherwise, use the \"Open project\" button and find it in your filesystem.":function(a){return["We couldn't find your project.",a("0"),"If your project is stored on a different computer, launch GDevelop on that computer.",a("1"),"Otherwise, use the \"Open project\" button and find it in your filesystem."]},"We couldn't load your cloud projects. Verify your internet connection or try again later.":"We couldn't load your cloud projects. Verify your internet connection or try again later.","We have found a non-corrupt save from {0} available for modification.":function(a){return["We have found a non-corrupt save from ",a("0")," available for modification."]},"Web":"Web","Web Build":"Web Build","Web builds":"Web builds","Welcome back!":"Welcome back!","Welcome to GDevelop!":"Welcome to GDevelop!","What are you using GDevelop for?":"What are you using GDevelop for?","What could be improved?":"What could be improved?","What do you want to make?":"What do you want to make?","What is a good GDevelop feature I could use in my game?":"What is a good GDevelop feature I could use in my game?","What is your goal with GDevelop?":"What is your goal with GDevelop?","What kind of projects are you building?":"What kind of projects are you building?","What kind of projects do you want to build with GDevelop?":"What kind of projects do you want to build with GDevelop?","What should I do next?":"What should I do next?","What went wrong?":"What went wrong?","What would you add to my game?":"What would you add to my game?","What would you like to create?":"What would you like to create?","What would you like to do next?":"What would you like to do next?","What would you like to do with this uncorrupted version of your project?":"What would you like to do with this uncorrupted version of your project?","What's included:":"What's included:","What's new in GDevelop?":"What's new in GDevelop?","What's new?":"What's new?","When checked, will only display the best score of each player (only for the display below).":"When checked, will only display the best score of each player (only for the display below).","When do you plan to finish or release your projects?":"When do you plan to finish or release your projects?","When previewing the game in the editor, this duration is ignored (the game preview starts as soon as possible).":"When previewing the game in the editor, this duration is ignored (the game preview starts as soon as possible).","When you create an object using an action, GDevelop now sets the Z order of the object to the maximum value that was found when starting the scene for each layer. This allow to make sure that objects that you create are in front of others. This game was created before this change, so GDevelop maintains the old behavior: newly created objects Z order is set to 0. It's recommended that you switch to the new behavior by clicking the following button.":"When you create an object using an action, GDevelop now sets the Z order of the object to the maximum value that was found when starting the scene for each layer. This allow to make sure that objects that you create are in front of others. This game was created before this change, so GDevelop maintains the old behavior: newly created objects Z order is set to 0. It's recommended that you switch to the new behavior by clicking the following button.","Where are you planing to publish your project(s)?":"Where are you planing to publish your project(s)?","Where to store this project":"Where to store this project","While these conditions are true:":"While these conditions are true:","Width":"Width","Window":"Window","Window title":"Window title","Windows (auto-installer file)":"Windows (auto-installer file)","Windows (exe)":"Windows (exe)","Windows (zip file)":"Windows (zip file)","Windows (zip)":"Windows (zip)","Windows, MacOS and Linux":"Windows, MacOS and Linux","Windows, MacOS, Linux (Steam, MS Store...)":"Windows, MacOS, Linux (Steam, MS Store...)","Windows, macOS & Linux":"Windows, macOS & Linux","Windows/macOS/Linux (manual)":"Windows/macOS/Linux (manual)","Windows/macOS/Linux Build":"Windows/macOS/Linux Build","With an established team of people during the whole project":"With an established team of people during the whole project","With at least one other person":"With at least one other person","With placeholder":"With placeholder","Working...":"Working...","Would you like to describe your projects?":"Would you like to describe your projects?","Would you like to open the non-corrupt version instead?":"Would you like to open the non-corrupt version instead?","Write events for scene <0>{scene_name}.":function(a){return["Write events for scene <0>",a("scene_name"),"."]},"X":"X","X offset (in pixels)":"X offset (in pixels)","Y":"Y","Y offset (in pixels)":"Y offset (in pixels)","Year":"Year","Yearly, {0}":function(a){return["Yearly, ",a("0")]},"Yearly, {0} per seat":function(a){return["Yearly, ",a("0")," per seat"]},"Yes":"Yes","Yes or No":"Yes or No","Yes or No (boolean)":"Yes or No (boolean)","Yes, and enable auto-edit":"Yes, and enable auto-edit","Yes, discard my changes":"Yes, discard my changes","Yes, just this change":"Yes, just this change","Yesterday":"Yesterday","You already have an account for this email address with a different provider (Google, Apple or GitHub). Please try with one of those.":"You already have an account for this email address with a different provider (Google, Apple or GitHub). Please try with one of those.","You already have an active {translatedName} featuring for your game {0}. Check your emails or discord, we will get in touch with you to get the campaign up!":function(a){return["You already have an active ",a("translatedName")," featuring for your game ",a("0"),". Check your emails or discord, we will get in touch with you to get the campaign up!"]},"You already have these {0} assets installed, do you want to add them again?":function(a){return["You already have these ",a("0")," assets installed, do you want to add them again?"]},"You already have {0} asset(s) in your scene. Do you want to add the remaining {1} one(s)?":function(a){return["You already have ",a("0")," asset(s) in your scene. Do you want to add the remaining ",a("1")," one(s)?"]},"You already own this product":"You already own this product","You already own {0}!":function(a){return["You already own ",a("0"),"!"]},"You already used this code - you can't reuse a code multiple times.":"You already used this code - you can't reuse a code multiple times.","You are about to delete an object":"You are about to delete an object","You are about to delete the project {projectName}, which is currently opened. If you proceed, the project will be closed and you will lose any unsaved changes. Do you want to proceed?":function(a){return["You are about to delete the project ",a("projectName"),", which is currently opened. If you proceed, the project will be closed and you will lose any unsaved changes. Do you want to proceed?"]},"You are about to quit the tutorial.":"You are about to quit the tutorial.","You are about to remove \"{0}\" from the list of your projects.{1}It will not delete it from your disk and you can always re-open it later. Do you want to proceed?":function(a){return["You are about to remove \"",a("0"),"\" from the list of your projects.",a("1"),"It will not delete it from your disk and you can always re-open it later. Do you want to proceed?"]},"You are about to remove the last sprite of this object, which has a custom collision mask. The custom collision mask will be lost. Are you sure you want to continue?":"You are about to remove the last sprite of this object, which has a custom collision mask. The custom collision mask will be lost. Are you sure you want to continue?","You are about to remove {0}{1} from the list of collaborators. Are you sure?":function(a){return["You are about to remove ",a("0"),a("1")," from the list of collaborators. Are you sure?"]},"You are about to use {assetPackCreditsAmount} credits to purchase the asset pack {0}. Continue?":function(a){return["You are about to use ",a("assetPackCreditsAmount")," credits to purchase the asset pack ",a("0"),". Continue?"]},"You are about to use {creditsAmount} credits to purchase the course \"{translatedCourseTitle}\". Continue?":function(a){return["You are about to use ",a("creditsAmount")," credits to purchase the course \"",a("translatedCourseTitle"),"\". Continue?"]},"You are about to use {gameTemplateCreditsAmount} credits to purchase the game template {0}. Continue?":function(a){return["You are about to use ",a("gameTemplateCreditsAmount")," credits to purchase the game template ",a("0"),". Continue?"]},"You are about to use {planCreditsAmount} credits to extend the game featuring {translatedName} for your game {0} and push it to the top of gd.games. Continue?":function(a){return["You are about to use ",a("planCreditsAmount")," credits to extend the game featuring ",a("translatedName")," for your game ",a("0")," and push it to the top of gd.games. Continue?"]},"You are about to use {planCreditsAmount} credits to purchase the game featuring {translatedName} for your game {0}. Continue?":function(a){return["You are about to use ",a("planCreditsAmount")," credits to purchase the game featuring ",a("translatedName")," for your game ",a("0"),". Continue?"]},"You are about to use {usageCreditPrice} credits to start this build. Continue?":function(a){return["You are about to use ",a("usageCreditPrice")," credits to start this build. Continue?"]},"You are already a member of this team.":"You are already a member of this team.","You are in raw mode. You can edit the fields, but be aware that this can lead to unexpected results or even crash the debugged game!":"You are in raw mode. You can edit the fields, but be aware that this can lead to unexpected results or even crash the debugged game!","You are missing out on asset store discounts and other benefits! Verify your email address. Didn't receive it?":"You are missing out on asset store discounts and other benefits! Verify your email address. Didn't receive it?","You are not connected. Create an account to build your game for Android, Windows, macOS and Linux in one click, and get access to metrics for your game.":"You are not connected. Create an account to build your game for Android, Windows, macOS and Linux in one click, and get access to metrics for your game.","You are not owner of this project, so you cannot invite collaborators.":"You are not owner of this project, so you cannot invite collaborators.","You are not the owner of this game, ask the owner to add you as an owner to see its exports.":"You are not the owner of this game, ask the owner to add you as an owner to see its exports.","You can <0>help translate GDevelop into your language.":"You can <0>help translate GDevelop into your language.","You can add students who already have a GDevelop account. They will receive a notification to accept the invitation. If they don't have an account, they can create one with their student email.":"You can add students who already have a GDevelop account. They will receive a notification to accept the invitation. If they don't have an account, they can create one with their student email.","You can also launch a preview from this external layout, but remember that it will still create objects from the scene, as well as trigger its events. Make sure to disable any action loading the external layout before doing so to avoid having duplicate objects!":"You can also launch a preview from this external layout, but remember that it will still create objects from the scene, as well as trigger its events. Make sure to disable any action loading the external layout before doing so to avoid having duplicate objects!","You can always do it later by redeeming a code on your profile.":"You can always do it later by redeeming a code on your profile.","You can configure the following properties and they will be applied as soon as you share your game with an export to gd.games.":"You can configure the following properties and they will be applied as soon as you share your game with an export to gd.games.","You can contribute and <0>create your own themes.":"You can contribute and <0>create your own themes.","You can download the file of your game to continue working on it using the full GDevelop version:":"You can download the file of your game to continue working on it using the full GDevelop version:","You can export the extension to a file to easily import it in another project. If your extension is providing useful and reusable functions or behaviors, consider sharing it with the GDevelop community!":"You can export the extension to a file to easily import it in another project. If your extension is providing useful and reusable functions or behaviors, consider sharing it with the GDevelop community!","You can find your cloud projects in the Create section of the homepage.":"You can find your cloud projects in the Create section of the homepage.","You can install it from the Project Manager.":"You can install it from the Project Manager.","You can now compile the game by yourself using Cordova command-line tool to iOS (XCode is required) or Android (Android SDK is required).":"You can now compile the game by yourself using Cordova command-line tool to iOS (XCode is required) or Android (Android SDK is required).","You can now create a game on Facebook Instant Games, if not already done, and upload the generated archive.":"You can now create a game on Facebook Instant Games, if not already done, and upload the generated archive.","You can now go back to the asset store to use the assets in your games.":"You can now go back to the asset store to use the assets in your games.","You can now go back to the course.":"You can now go back to the course.","You can now go back to the store to use your new game template.":"You can now go back to the store to use your new game template.","You can now go back to use your new bundle.":"You can now go back to use your new bundle.","You can now go back to use your new product.":"You can now go back to use your new product.","You can now upload the game to a web hosting service to play it.":"You can now upload the game to a web hosting service to play it.","You can now use them across the app!":"You can now use them across the app!","You can only install up to {MAX_ASSETS_TO_INSTALL} assets at once. Try filtering the assets you would like to install, or install them one by one.":function(a){return["You can only install up to ",a("MAX_ASSETS_TO_INSTALL")," assets at once. Try filtering the assets you would like to install, or install them one by one."]},"You can open the command palette by pressing {commandPaletteShortcut} or {commandPaletteSecondaryShortcut}.":function(a){return["You can open the command palette by pressing ",a("commandPaletteShortcut")," or ",a("commandPaletteSecondaryShortcut"),"."]},"You can save your project to come back to it later. What do you want to do?":"You can save your project to come back to it later. What do you want to do?","You can select more than one.":"You can select more than one.","You can switch to GDevelop credits.":"You can switch to GDevelop credits.","You can use credits to feature a game or purchase asset packs and game templates in the store!":"You can use credits to feature a game or purchase asset packs and game templates in the store!","You can't delete your account while you have an active subscription. Please cancel your subscription first.":"You can't delete your account while you have an active subscription. Please cancel your subscription first.","You cannot add yourself as a collaborator.":"You cannot add yourself as a collaborator.","You cannot do this.":"You cannot do this.","You cannot unregister a game that has active leaderboards. To delete them, access the player services, and delete them one by one.":"You cannot unregister a game that has active leaderboards. To delete them, access the player services, and delete them one by one.","You currently have a subscription, applied thanks to a redemption code, valid until {0} . If you redeem another code, your existing subscription will be canceled and not redeemable anymore!":function(a){return["You currently have a subscription, applied thanks to a redemption code, valid until ",a("0")," . If you redeem another code, your existing subscription will be canceled and not redeemable anymore!"]},"You currently have a subscription. If you redeem a code, the existing subscription will be cancelled and replaced by the one given by the code.":"You currently have a subscription. If you redeem a code, the existing subscription will be cancelled and replaced by the one given by the code.","You do not have access to project saves with your current subscription plan. Please upgrade your plan to access this feature.":"You do not have access to project saves with your current subscription plan. Please upgrade your plan to access this feature.","You do not have permission to access the project save associated with this AI request message.":"You do not have permission to access the project save associated with this AI request message.","You don't have a thumbnail":"You don't have a thumbnail","You don't have any Android builds for this game.":"You don't have any Android builds for this game.","You don't have any active students. Click on \"Manage seats\" to add students or teachers to your team.":"You don't have any active students. Click on \"Manage seats\" to add students or teachers to your team.","You don't have any builds for this game.":"You don't have any builds for this game.","You don't have any credits available. You can purchase GDevelop credits to continue making AI requests.":"You don't have any credits available. You can purchase GDevelop credits to continue making AI requests.","You don't have any desktop builds for this game.":"You don't have any desktop builds for this game.","You don't have any feedback for this export.":"You don't have any feedback for this export.","You don't have any feedback for this game.":"You don't have any feedback for this game.","You don't have any iOS builds for this game.":"You don't have any iOS builds for this game.","You don't have any previous chat. Ask the AI your first question!":"You don't have any previous chat. Ask the AI your first question!","You don't have any unread feedback for this export.":"You don't have any unread feedback for this export.","You don't have any unread feedback for this game.":"You don't have any unread feedback for this game.","You don't have any web builds for this game.":"You don't have any web builds for this game.","You don't have enough AI credits to continue this conversation.":"You don't have enough AI credits to continue this conversation.","You don't have enough available seats to restore those accounts.":"You don't have enough available seats to restore those accounts.","You don't have enough rights to add a new admin.":"You don't have enough rights to add a new admin.","You don't have enough rights to invite a new student.":"You don't have enough rights to invite a new student.","You don't have enough rights to manage those accounts.":"You don't have enough rights to manage those accounts.","You don't have permissions to add collaborators.":"You don't have permissions to add collaborators.","You don't have permissions to delete this project.":"You don't have permissions to delete this project.","You don't have permissions to save this project. Please choose another location.":"You don't have permissions to save this project. Please choose another location.","You don't have the rights to access the version history of this project. Are you connected with the right account?":"You don't have the rights to access the version history of this project. Are you connected with the right account?","You don't need to add the @ in your username":"You don't need to add the @ in your username","You don't own any pack yet!":"You don't own any pack yet!","You don’t have any feedback about your game. Share your game and start collecting player feedback.":"You don’t have any feedback about your game. Share your game and start collecting player feedback.","You have 0 notifications.":"You have 0 notifications.","You have <0>{remainingBuilds} build remaining — you have used {usageRatio} in the past 24h.":function(a){return["You have <0>",a("remainingBuilds")," build remaining \u2014 you have used ",a("usageRatio")," in the past 24h."]},"You have <0>{remainingBuilds} build remaining — you have used {usageRatio} in the past 30 days.":function(a){return["You have <0>",a("remainingBuilds")," build remaining \u2014 you have used ",a("usageRatio")," in the past 30 days."]},"You have <0>{remainingBuilds} builds remaining — you have used {usageRatio} in the past 24h.":function(a){return["You have <0>",a("remainingBuilds")," builds remaining \u2014 you have used ",a("usageRatio")," in the past 24h."]},"You have <0>{remainingBuilds} builds remaining — you have used {usageRatio} in the past 30 days.":function(a){return["You have <0>",a("remainingBuilds")," builds remaining \u2014 you have used ",a("usageRatio")," in the past 30 days."]},"You have a build currently running, you can see its progress via the exports button at the bottom of this dialog.":"You have a build currently running, you can see its progress via the exports button at the bottom of this dialog.","You have an active subscription":"You have an active subscription","You have reached the maximum number of games you can register! You can unregister games in your Games Dashboard.":"You have reached the maximum number of games you can register! You can unregister games in your Games Dashboard.","You have reached the maximum number of guest collaborators for your subscription. Ask this user to get a Pro subscription!":"You have reached the maximum number of guest collaborators for your subscription. Ask this user to get a Pro subscription!","You have to wait {0} days before you can reactivate an archived account.":function(a){return["You have to wait ",a("0")," days before you can reactivate an archived account."]},"You have unlocked full access to GDevelop to create without limits!":"You have unlocked full access to GDevelop to create without limits!","You have unsaved changes in your project.":"You have unsaved changes in your project.","You haven't contributed any examples":"You haven't contributed any examples","You haven't contributed any extensions":"You haven't contributed any extensions","You just added an instance to a hidden layer (\"{0}\"). Open the layer panel to make it visible.":function(a){return["You just added an instance to a hidden layer (\"",a("0"),"\"). Open the layer panel to make it visible."]},"You might like":"You might like","You modified this project on the {formattedDate} at {formattedTime}. Do you want to overwrite your changes?":function(a){return["You modified this project on the ",a("formattedDate")," at ",a("formattedTime"),". Do you want to overwrite your changes?"]},"You must be connected to use online export services.":"You must be connected to use online export services.","You must be logged in to invite collaborators.":"You must be logged in to invite collaborators.","You must own a Spine license to publish a game with a Spine object.":"You must own a Spine license to publish a game with a Spine object.","You must re-open the project to continue this chat.":"You must re-open the project to continue this chat.","You must select a key.":"You must select a key.","You must select a valid key. \"{0}\" is not valid.":function(a){return["You must select a valid key. \"",a("0"),"\" is not valid."]},"You must select a valid key. \"{value}\" is not valid.":function(a){return["You must select a valid key. \"",a("value"),"\" is not valid."]},"You must select a valid value. \"{value}\" is not valid.":function(a){return["You must select a valid value. \"",a("value"),"\" is not valid."]},"You must select a value.":"You must select a value.","You must select at least one user to be the author of the game.":"You must select at least one user to be the author of the game.","You must select at least one user to be the owner of the game.":"You must select at least one user to be the owner of the game.","You need a Apple Developer account to create a certificate.":"You need a Apple Developer account to create a certificate.","You need a Apple Developer account to create an API key that will automatically publish your app.":"You need a Apple Developer account to create an API key that will automatically publish your app.","You need to cancel your current subscription before joining a team.":"You need to cancel your current subscription before joining a team.","You need to first save your project to the cloud to invite collaborators.":"You need to first save your project to the cloud to invite collaborators.","You need to login first to see your builds.":"You need to login first to see your builds.","You need to login first to see your game feedbacks.":"You need to login first to see your game feedbacks.","You need to save this project as a cloud project to install premium assets. Please save your project and try again.":"You need to save this project as a cloud project to install premium assets. Please save your project and try again.","You need to save this project as a cloud project to install this asset. Please save your project and try again.":"You need to save this project as a cloud project to install this asset. Please save your project and try again.","You received {0} credits thanks to your subscription":function(a){return["You received ",a("0")," credits thanks to your subscription"]},"You should have received an email containing instructions to reset and set a new password. Once it's done, you can use your new password in GDevelop.":"You should have received an email containing instructions to reset and set a new password. Once it's done, you can use your new password in GDevelop.","You still have {availableCredits} credits you can use for AI requests.":function(a){return["You still have ",a("availableCredits")," credits you can use for AI requests."]},"You still have {percentage}% left on this month's AI usage.":function(a){return["You still have ",a("percentage"),"% left on this month's AI usage."]},"You still have {percentage}% left on this month's AI usage. It resets on {dateString} at {timeString}.":function(a){return["You still have ",a("percentage"),"% left on this month's AI usage. It resets on ",a("dateString")," at ",a("timeString"),"."]},"You still have {percentage}% left on this week's AI usage.":function(a){return["You still have ",a("percentage"),"% left on this week's AI usage."]},"You still have {percentage}% left on this week's AI usage. It resets on {dateString} at {timeString}.":function(a){return["You still have ",a("percentage"),"% left on this week's AI usage. It resets on ",a("dateString")," at ",a("timeString"),"."]},"You still have {percentage}% left on today's AI usage.":function(a){return["You still have ",a("percentage"),"% left on today's AI usage."]},"You still have {percentage}% left on today's AI usage. It resets on {dateString} at {timeString}.":function(a){return["You still have ",a("percentage"),"% left on today's AI usage. It resets on ",a("dateString")," at ",a("timeString"),"."]},"You will get access to special discounts on the GDevelop asset store, as well as weekly stats about your games.":"You will get access to special discounts on the GDevelop asset store, as well as weekly stats about your games.","You will lose all custom collision masks. Do you want to continue?":"You will lose all custom collision masks. Do you want to continue?","You will lose any progress made with the external editor. Do you wish to cancel?":"You will lose any progress made with the external editor. Do you wish to cancel?","You won't see it here anymore, unless you re-activate it from the preferences.":"You won't see it here anymore, unless you re-activate it from the preferences.","You'll convert {0} USD to {1} credits.":function(a){return["You'll convert ",a("0")," USD to ",a("1")," credits."]},"You're about to add 1 asset.":"You're about to add 1 asset.","You're about to add {0} assets.":function(a){return["You're about to add ",a("0")," assets."]},"You're about to cash out {0} USD.":function(a){return["You're about to cash out ",a("0")," USD."]},"You're about to open (or re-open) a project. Click on \"Open the Project\" to continue.":"You're about to open (or re-open) a project. Click on \"Open the Project\" to continue.","You're about to restart this multichapter guided lesson.":"You're about to restart this multichapter guided lesson.","You're awesome!":"You're awesome!","You're deleting a game which:{0} - {1} {2} - {3} {4} If you continue, the game and this project will be deleted.{5} This action is irreversible. Do you want to continue?":function(a){return["You're deleting a game which:",a("0")," - ",a("1")," ",a("2")," - ",a("3")," ",a("4")," If you continue, the game and this project will be deleted.",a("5")," This action is irreversible. Do you want to continue?"]},"You're leaving the game tutorial":"You're leaving the game tutorial","You're now logged out":"You're now logged out","You're trying to save changes made to a previous version of your project. If you continue, it will be used as the new latest version.":"You're trying to save changes made to a previous version of your project. If you continue, it will be used as the new latest version.","You're {missingCredits} credits short.":function(a){return["You're ",a("missingCredits")," credits short."]},"You've been invited to join a team by {inviterEmail}":function(a){return["You've been invited to join a team by ",a("inviterEmail")]},"You've made some changes here. Are you sure you want to discard them and open the behavior events?":"You've made some changes here. Are you sure you want to discard them and open the behavior events?","You've made some changes here. Are you sure you want to discard them and open the function?":"You've made some changes here. Are you sure you want to discard them and open the function?","You've ran out of GDevelop Credits.":"You've ran out of GDevelop Credits.","You've ran out of GDevelop credits to continue this conversation.":"You've ran out of GDevelop credits to continue this conversation.","You've ran out of free AI requests.":"You've ran out of free AI requests.","You've reached the limit of cloud projects you can have. Delete some existing cloud projects of yours before trying again.":"You've reached the limit of cloud projects you can have. Delete some existing cloud projects of yours before trying again.","You've reached your maximum of {0} leaderboards for your game":function(a){return["You've reached your maximum of ",a("0")," leaderboards for your game"]},"You've reached your maximum storage of {maximumCount} cloud projects":function(a){return["You've reached your maximum storage of ",a("maximumCount")," cloud projects"]},"YouTube channel (tutorials and more)":"YouTube channel (tutorials and more)","Your Discord username":"Your Discord username","Your account has been deleted!":"Your account has been deleted!","Your account is upgraded, with the extra exports and online services. If you wish to change later, come back to your profile and choose another plan.":"Your account is upgraded, with the extra exports and online services. If you wish to change later, come back to your profile and choose another plan.","Your browser will now open to enter your payment details.":"Your browser will now open to enter your payment details.","Your computer":"Your computer","Your current subscription plan allows restoring versions from the last {historyRetentionDays} days.<0/>Get a higher plan to access older versions.":function(a){return["Your current subscription plan allows restoring versions from the last ",a("historyRetentionDays")," days.<0/>Get a higher plan to access older versions."]},"Your feedback is valuable to help us improve our premium services. Why are you canceling your subscription?":"Your feedback is valuable to help us improve our premium services. Why are you canceling your subscription?","Your forum account with email {email} will reflect your subscription level. You can press the sync button to update it immediately.":function(a){return["Your forum account with email ",a("email")," will reflect your subscription level. You can press the sync button to update it immediately."]},"Your free trial will expire in {0} hours.":function(a){return["Your free trial will expire in ",a("0")," hours."]},"Your game has some invalid elements, please fix these before continuing:":"Your game has some invalid elements, please fix these before continuing:","Your game is hidden on gd.games":"Your game is hidden on gd.games","Your game is in the “Build” section or you can restart the tutorial.":"Your game is in the “Build” section or you can restart the tutorial.","Your game is not published on gd.games":"Your game is not published on gd.games","Your game may not be registered, create one in the leaderboard manager.":"Your game may not be registered, create one in the leaderboard manager.","Your game will be exported and packaged online as a stand-alone game for Windows, Linux and/or macOS.":"Your game will be exported and packaged online as a stand-alone game for Windows, Linux and/or macOS.","Your game won't work if you open the index.html file on your computer. You must upload it to a web hosting platform (Itch.io, Poki, CrazyGames etc...) or a web server to run it.":"Your game won't work if you open the index.html file on your computer. You must upload it to a web hosting platform (Itch.io, Poki, CrazyGames etc...) or a web server to run it.","Your game {0} received a feedback message: \"{1}...\"":function(a){return["Your game ",a("0")," received a feedback message: \"",a("1"),"...\""]},"Your game {0} received {1} feedback messages":function(a){return["Your game ",a("0")," received ",a("1")," feedback messages"]},"Your game {0} was played more than {1} times!":function(a){return["Your game ",a("0")," was played more than ",a("1")," times!"]},"Your latest changes could not be applied to the preview(s) being run. You should start a new preview instead to make sure that all your changes are reflected in the game.":"Your latest changes could not be applied to the preview(s) being run. You should start a new preview instead to make sure that all your changes are reflected in the game.","Your membership helps the GDevelop company maintain servers, build new features and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"Your membership helps the GDevelop company maintain servers, build new features and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.","Your name":"Your name","Your need to first create your account, or login, to upload your own resources.":"Your need to first create your account, or login, to upload your own resources.","Your need to first save your game on GDevelop Cloud to upload your own resources.":"Your need to first save your game on GDevelop Cloud to upload your own resources.","Your new plan is now activated.":"Your new plan is now activated.","Your password must be between 8 and 30 characters long.":"Your password must be between 8 and 30 characters long.","Your plan:":"Your plan:","Your preview is ready! On your mobile or tablet, open your browser and enter in the address bar:":"Your preview is ready! On your mobile or tablet, open your browser and enter in the address bar:","Your project has {0} diagnostic error(s). Please fix them before exporting.":function(a){return["Your project has ",a("0")," diagnostic error(s). Please fix them before exporting."]},"Your project has {0} diagnostic error(s). Please fix them before launching a preview.":function(a){return["Your project has ",a("0")," diagnostic error(s). Please fix them before launching a preview."]},"Your project is saved in the same folder as the application. This folder will be deleted when the application is updated. Please choose another location if you don't want to lose your project.":"Your project is saved in the same folder as the application. This folder will be deleted when the application is updated. Please choose another location if you don't want to lose your project.","Your project name has changed, this will also save the whole project, continue?":"Your project name has changed, this will also save the whole project, continue?","Your purchase has been processed!":"Your purchase has been processed!","Your search and filters did not return any result.":"Your search and filters did not return any result.","Your search and filters did not return any result.<0/>If you need support for a specific language, please contact us.":"Your search and filters did not return any result.<0/>If you need support for a specific language, please contact us.","Your subscription has been canceled":"Your subscription has been canceled","Your subscription is set to be cancelled at the end of the current billing period. You will retain access to the plan benefits until then.":"Your subscription is set to be cancelled at the end of the current billing period. You will retain access to the plan benefits until then.","Your team does not have enough seats for a new admin.":"Your team does not have enough seats for a new admin.","Your team does not have enough seats for a new student.":"Your team does not have enough seats for a new student.","Your {productType} has been activated!":function(a){return["Your ",a("productType")," has been activated!"]},"You’re about to permanently delete your GDevelop account username@mail.com. You will no longer be able to log into the app with this email address.":"You’re about to permanently delete your GDevelop account username@mail.com. You will no longer be able to log into the app with this email address.","You’ve reached the maximum amount of available seats. Increase the number of seats on your subscription to invite more students and collaborators.":"You’ve reached the maximum amount of available seats. Increase the number of seats on your subscription to invite more students and collaborators.","Z":"Z","Z Order":"Z Order","Z Order of objects created from events":"Z Order of objects created from events","Z max":"Z max","Z max bound":"Z max bound","Z max bound should be greater than Z min bound":"Z max bound should be greater than Z min bound","Z min":"Z min","Z min bound":"Z min bound","Z min bound should be smaller than Z max bound":"Z min bound should be smaller than Z max bound","Z offset (in pixels)":"Z offset (in pixels)","Zoom In":"Zoom In","Zoom Out":"Zoom Out","Zoom in":"Zoom in","Zoom in (you can also use Ctrl + Mouse wheel)":"Zoom in (you can also use Ctrl + Mouse wheel)","Zoom out":"Zoom out","Zoom out (you can also use Ctrl + Mouse wheel)":"Zoom out (you can also use Ctrl + Mouse wheel)","Zoom to fit content":"Zoom to fit content","Zoom to fit selection":"Zoom to fit selection","Zoom to initial position":"Zoom to initial position","[Follow GDevelop](https://tiktok.com/@gdevelop) and enter your TikTok username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[Follow GDevelop](https://tiktok.com/@gdevelop) and enter your TikTok username here to get ",a("rewardValueInCredits")," free credits as a thank you!"]},"[Follow GDevelop](https://twitter.com/GDevelopApp) and enter your Twitter username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[Follow GDevelop](https://twitter.com/GDevelopApp) and enter your Twitter username here to get ",a("rewardValueInCredits")," free credits as a thank you!"]},"[Star the GDevelop repository](https://github.com/4ian/GDevelop) and add your GitHub username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[Star the GDevelop repository](https://github.com/4ian/GDevelop) and add your GitHub username here to get ",a("rewardValueInCredits")," free credits as a thank you!"]},"[Subscribe to GDevelop](https://youtube.com/@gdevelopapp) and enter your YouTube username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[Subscribe to GDevelop](https://youtube.com/@gdevelopapp) and enter your YouTube username here to get ",a("rewardValueInCredits")," free credits as a thank you!"]},"a permanent":"a permanent","add":"add","an instant":"an instant","ascending":"ascending","audios":"audios","bitmap fonts":"bitmap fonts","by":"by","contains":"contains","date,date":"date,date","date,date,date0":"date,date,date0","day,date,date0":"day,date,date0","delete":"delete","descending":"descending","divide by":"divide by","ends with":"ends with","false":"false","fonts":"fonts","gd.games":"gd.games","iOS":"iOS","iOS & Android (manual)":"iOS & Android (manual)","iOS (iPhone and iPad) icons":"iOS (iPhone and iPad) icons","iOS Build":"iOS Build","iOS builds":"iOS builds","in {elementsWithWords}":function(a){return["in ",a("elementsWithWords")]},"leaderboard.":"leaderboard.","leaderboards.":"leaderboards.","limit:":"limit:","macOS (zip file)":"macOS (zip file)","macOS (zip)":"macOS (zip)","min":"min","minutes":"minutes","multiply by":"multiply by","no":"no","no limit":"no limit","or":"or","order by distance to another object":"order by distance to another object","order by highest ammo":"order by highest ammo","order by highest health":"order by highest health","order by highest variable":"order by highest variable","order by physics speed":"order by physics speed","ordered by":"ordered by","panel sprites":"panel sprites","particle emitters":"particle emitters","redemptionCodeExpirationDate,date":"redemptionCodeExpirationDate,date","scene center":"scene center","set to":"set to","set to false":"set to false","set to true":"set to true","sprites":"sprites","starts with":"starts with","subtract":"subtract","the events sheet":"the events sheet","the home page":"the home page","the scene editor":"the scene editor","tile maps":"tile maps","tiled sprites":"tiled sprites","toggle":"toggle","true":"true","username":"username","yes":"yes","{0}":function(a){return[a("0")]},"{0} % of players with more than {1} minutes":function(a){return[a("0")," % of players with more than ",a("1")," minutes"]},"{0} (default)":function(a){return[a("0")," (default)"]},"{0} ({1})":function(a){return[a("0")," (",a("1"),")"]},"{0} Asset pack":function(a){return[a("0")," Asset pack"]},"{0} Asset packs":function(a){return[a("0")," Asset packs"]},"{0} Assets":function(a){return[a("0")," Assets"]},"{0} Course":function(a){return[a("0")," Course"]},"{0} Courses":function(a){return[a("0")," Courses"]},"{0} Game template":function(a){return[a("0")," Game template"]},"{0} Game templates":function(a){return[a("0")," Game templates"]},"{0} OFF":function(a){return[a("0")," OFF"]},"{0} builds":function(a){return[a("0")," builds"]},"{0} chapters":function(a){return[a("0")," chapters"]},"{0} children":function(a){return[a("0")," children"]},"{0} credits":function(a){return[a("0")," credits"]},"{0} credits available":function(a){return[a("0")," credits available"]},"{0} exports created":function(a){return[a("0")," exports created"]},"{0} exports ongoing...":function(a){return[a("0")," exports ongoing..."]},"{0} hours of material":function(a){return[a("0")," hours of material"]},"{0} invited you to join a team.":function(a){return[a("0")," invited you to join a team."]},"{0} is included in the bundle {1}.":function(a){return[a("0")," is included in the bundle ",a("1"),"."]},"{0} is included in this bundle for {1} !":function(a){return[a("0")," is included in this bundle for ",a("1")," !"]},"{0} minutes per player":function(a){return[a("0")," minutes per player"]},"{0} new feedbacks":function(a){return[a("0")," new feedbacks"]},"{0} of {1} completed":function(a){return[a("0")," of ",a("1")," completed"]},"{0} of {1} subscription":function(a){return[a("0")," of ",a("1")," subscription"]},"{0} options":function(a){return[a("0")," options"]},"{0} part":function(a){return[a("0")," part"]},"{0} players with more than {1} minutes":function(a){return[a("0")," players with more than ",a("1")," minutes"]},"{0} projects":function(a){return[a("0")," projects"]},"{0} properties":function(a){return[a("0")," properties"]},"{0} reviews":function(a){return[a("0")," reviews"]},"{0} sessions":function(a){return[a("0")," sessions"]},"{0} subscription":function(a){return[a("0")," subscription"]},"{0} use left":function(a){return[a("0")," use left"]},"{0} uses left":function(a){return[a("0")," uses left"]},"{0} variables":function(a){return[a("0")," variables"]},"{0} weeks":function(a){return[a("0")," weeks"]},"{0} will be added to your account {1}.":function(a){return[a("0")," will be added to your account ",a("1"),"."]},"{0}% bounce rate":function(a){return[a("0"),"% bounce rate"]},"{0}'s projects":function(a){return[a("0"),"'s projects"]},"{0}+ (Available with a subscription)":function(a){return[a("0"),"+ (Available with a subscription)"]},"{0}/{1} achievements":function(a){return[a("0"),"/",a("1")," achievements"]},"{0}Are you sure you want to remove this extension? This can't be undone.":function(a){return[a("0"),"Are you sure you want to remove this extension? This can't be undone."]},"{daysAgo} days ago":function(a){return[a("daysAgo")," days ago"]},"{durationInDays} days":function(a){return[a("durationInDays")," days"]},"{durationInMinutes} min.":function(a){return[a("durationInMinutes")," min."]},"{durationInMinutes} minutes":function(a){return[a("durationInMinutes")," minutes"]},"{email} has already accepted the invitation and joined the team.":function(a){return[a("email")," has already accepted the invitation and joined the team."]},"{email} will be removed from the team.":function(a){return[a("email")," will be removed from the team."]},"{fullName} ({username})":function(a){return[a("fullName")," (",a("username"),")"]},"{functionNode} action from {extensionNode} extension is missing.":function(a){return[a("functionNode")," action from ",a("extensionNode")," extension is missing."]},"{functionNode} action on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return[a("functionNode")," action on behavior ",a("behaviorNode")," from ",a("extensionNode")," extension is missing."]},"{functionNode} condition from {extensionNode} extension is missing.":function(a){return[a("functionNode")," condition from ",a("extensionNode")," extension is missing."]},"{functionNode} condition on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return[a("functionNode")," condition on behavior ",a("behaviorNode")," from ",a("extensionNode")," extension is missing."]},"{gameCount} of your games were played more than {0} times in total!":function(a){return[a("gameCount")," of your games were played more than ",a("0")," times in total!"]},"{hoursAgo} hours ago":function(a){return[a("hoursAgo")," hours ago"]},"{includedCreditsAmount} credits":function(a){return[a("includedCreditsAmount")," credits"]},"{minutesAgo} minutes ago":function(a){return[a("minutesAgo")," minutes ago"]},"{numberOfAssetPacks} Asset Pack":function(a){return[a("numberOfAssetPacks")," Asset Pack"]},"{numberOfAssetPacks} Asset Packs":function(a){return[a("numberOfAssetPacks")," Asset Packs"]},"{numberOfCourses} Course":function(a){return[a("numberOfCourses")," Course"]},"{numberOfCourses} Courses":function(a){return[a("numberOfCourses")," Courses"]},"{numberOfGameTemplates} Game Template":function(a){return[a("numberOfGameTemplates")," Game Template"]},"{numberOfGameTemplates} Game Templates":function(a){return[a("numberOfGameTemplates")," Game Templates"]},"{objectName} variables":function(a){return[a("objectName")," variables"]},"{percentage}% left":function(a){return[a("percentage"),"% left"]},"{periodLabel}, <0>{0} <1>{1}":function(a){return[a("periodLabel"),", <0>",a("0")," <1>",a("1"),""]},"{periodLabel}, <0>{0} <1>{1} per seat":function(a){return[a("periodLabel"),", <0>",a("0")," <1>",a("1")," per seat"]},"{periodLabel}, {0}":function(a){return[a("periodLabel"),", ",a("0")]},"{periodLabel}, {0} per seat":function(a){return[a("periodLabel"),", ",a("0")," per seat"]},"{planCreditsAmount} credits":function(a){return[a("planCreditsAmount")," credits"]},"{price} every {0} months":function(a){return[a("price")," every ",a("0")," months"]},"{price} every {0} weeks":function(a){return[a("price")," every ",a("0")," weeks"]},"{price} every {0} years":function(a){return[a("price")," every ",a("0")," years"]},"{price} per month":function(a){return[a("price")," per month"]},"{price} per seat, each month":function(a){return[a("price")," per seat, each month"]},"{price} per seat, each week":function(a){return[a("price")," per seat, each week"]},"{price} per seat, each year":function(a){return[a("price")," per seat, each year"]},"{price} per seat, every {0} months":function(a){return[a("price")," per seat, every ",a("0")," months"]},"{price} per seat, every {0} weeks":function(a){return[a("price")," per seat, every ",a("0")," weeks"]},"{price} per seat, every {0} years":function(a){return[a("price")," per seat, every ",a("0")," years"]},"{price} per week":function(a){return[a("price")," per week"]},"{price} per year":function(a){return[a("price")," per year"]},"{resultsCount} results":function(a){return[a("resultsCount")," results"]},"{roundedMonths} months":function(a){return[a("roundedMonths")," months"]},"{smartObjectsCount} smart objects":function(a){return[a("smartObjectsCount")," smart objects"]},"{totalCredits} Credits":function(a){return[a("totalCredits")," Credits"]},"{totalMatches} matches":function(a){return[a("totalMatches")," matches"]},"~{0} minutes.":function(a){return["~",a("0")," minutes."]},"“Player feedback” is off, turn it on to start collecting feedback on your game.":"“Player feedback” is off, turn it on to start collecting feedback on your game.","“Start” screen":"“Start” screen","“You win” message":"“You win” message","≠ (not equal to)":"≠ (not equal to)","≤ (less or equal to)":"≤ (less or equal to)","≥ (greater or equal to)":"≥ (greater or equal to)","❌ Game configuration could not be saved, please try again later.":"❌ Game configuration could not be saved, please try again later.","🎉 Congrats on getting the {translatedName} featuring for your game {0}!":function(a){return["\uD83C\uDF89 Congrats on getting the ",a("translatedName")," featuring for your game ",a("0"),"!"]},"🎉 You can now follow your new course!":"🎉 You can now follow your new course!","🎉 You can now use your assets!":"🎉 You can now use your assets!","🎉 You can now use your credits!":"🎉 You can now use your credits!","🎉 You can now use your template!":"🎉 You can now use your template!","🎉 Your request has been saved. Lay back, we'll contact you shortly.":"🎉 Your request has been saved. Lay back, we'll contact you shortly.","👋 Good to see you {username}!":function(a){return["\uD83D\uDC4B Good to see you ",a("username"),"!"]},"👋 Good to see you!":"👋 Good to see you!","👋 Welcome to GDevelop {username}!":function(a){return["\uD83D\uDC4B Welcome to GDevelop ",a("username"),"!"]},"👋 Welcome to GDevelop!":"👋 Welcome to GDevelop!","Some extensions could not be loaded. Expected {0} JS extension modules, got {1}. Please check the console for more details.":function(a){return["Some extensions could not be loaded. Expected ",a("0")," JS extension modules, got ",a("1"),". Please check the console for more details."]},"Desktop window options":"Desktop window options","Transparent native window":"Transparent native window","Creates the Electron window with native transparency enabled.":"Creates the Electron window with native transparency enabled.","Frameless window":"Frameless window","Transparent game background":"Transparent game background","Disable window shadow":"Disable window shadow","Disable hardware acceleration":"Disable hardware acceleration","Use only as a compatibility option for transparent windows.":"Use only as a compatibility option for transparent windows.","Auto edit":"Auto edit","Calculating...":"Calculating...","Off":"Off","On":"On","The AI tried to use a function of the editor that is unknown.":"The AI tried to use a function of the editor that is unknown."}}; diff --git a/newIDE/app/src/locales/zh_CN/extension-messages.js b/newIDE/app/src/locales/zh_CN/extension-messages.js index 86a31c22288b..c3a69ddc35a8 100644 --- a/newIDE/app/src/locales/zh_CN/extension-messages.js +++ b/newIDE/app/src/locales/zh_CN/extension-messages.js @@ -1 +1 @@ -/* eslint-disable */module.exports={languageData:{"plurals":function(n,ord){if(ord)return"other";return"other"}},messages:{"Advanced HTTP":"\u9AD8\u7EA7HTTP","An extension to create HTTP requests with more advanced settings than the built-in \"Network request\" action, like specifying headers or bypassing CORS.":"\u4F7F\u7528\u8BE5\u6269\u5C55\u521B\u5EFAHTTP\u8BF7\u6C42\uFF0C\u6BD4\u5185\u7F6E\u7684\u201C\u7F51\u7EDC\u8BF7\u6C42\u201D\u64CD\u4F5C\u5177\u6709\u66F4\u9AD8\u7EA7\u7684\u8BBE\u7F6E\uFF0C\u5982\u6307\u5B9A\u6807\u5934\u6216\u7ED5\u8FC7CORS\u3002","Network":"\u7F51\u7EDC","Creates a template for your request. All requests must be made from a request template.":"\u4E3A\u60A8\u7684\u8BF7\u6C42\u521B\u5EFA\u4E00\u4E2A\u6A21\u677F\u3002\u6240\u6709\u8BF7\u6C42\u5FC5\u987B\u4F7F\u7528\u8BF7\u6C42\u6A21\u677F\u521B\u5EFA\u3002","Create a new request template":"\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u8BF7\u6C42\u6A21\u677F","Create request template _PARAM1_ with URL _PARAM2_":"\u4F7F\u7528 URL _PARAM2_ \u521B\u5EFA\u8BF7\u6C42\u6A21\u677F _PARAM1_\u3002","New request template name":"\u65B0\u8BF7\u6C42\u6A21\u677F\u540D\u79F0","URL the request will be sent to":"\u5C06\u8981\u53D1\u9001\u8BF7\u6C42\u7684 URL","Creates a new request template with all the attributes from an existing one.":"\u4ECE\u73B0\u6709\u8BF7\u6C42\u6A21\u677F\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u8BF7\u6C42\u6A21\u677F\uFF0C\u5305\u542B\u6240\u6709\u5C5E\u6027\u3002","Copy a request template":"\u590D\u5236\u8BF7\u6C42\u6A21\u677F","Create request _PARAM1_ from template _PARAM2_":"\u4ECE\u6A21\u677F _PARAM2_ \u521B\u5EFA\u8BF7\u6C42 _PARAM1_","Request to copy":"\u8981\u590D\u5236\u7684\u8BF7\u6C42","The HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"\u8BF7\u6C42\u7684 HTTP \u65B9\u6CD5\u3002\u5982\u679C\u4E0D\u786E\u5B9A\uFF0C\u4F7F\u7528 GET\uFF0C\u8FD9\u662F\u9ED8\u8BA4\u503C\u3002","HTTP Method (Verb)":"HTTP \u65B9\u6CD5\uFF08\u52A8\u8BCD\uFF09","Set HTTP method of request _PARAM1_ to _PARAM2_":"\u8BBE\u7F6E\u8BF7\u6C42 _PARAM1_ \u7684 HTTP \u65B9\u6CD5\u4E3A _PARAM2_","Request template name":"\u8BF7\u6C42\u6A21\u677F\u540D\u79F0","HTTP Method":"HTTP \u65B9\u6CD5","the HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"\u8BF7\u6C42\u7684 HTTP \u65B9\u6CD5\u3002\u5982\u679C\u4E0D\u786E\u5B9A\uFF0C\u4F7F\u7528 GET\uFF0C\u8FD9\u662F\u9ED8\u8BA4\u503C\u3002\u8BF7\u6C42 REST API \u7AEF\u70B9\u53EF\u80FD\u4F1A\u56E0\u4F7F\u7528\u7684\u65B9\u6CD5\u4E0D\u540C\u800C\u4EA7\u751F\u4E0D\u540C\u6548\u679C\u3002\u8BF7\u53C2\u8003\u8C03\u7528\u7684 API \u7684\u6587\u6863\u4EE5\u4E86\u89E3\u8981\u4F7F\u7528\u7684\u9002\u5F53\u65B9\u6CD5\u3002","HTTP method of request _PARAM1_":"\u8BF7\u6C42 _PARAM1_ \u7684 HTTP \u65B9\u6CD5","Defines to what extent the results of the request is can/must be cached. When cached, instead of sending a request to the server, the browser will avoid making a real request to the server and will use a previous response given by the server for the same request.\nThe server also has a say in this via the Cache-Control header.":"\u5B9A\u4E49\u8BF7\u6C42\u7ED3\u679C\u7F13\u5B58\u7684\u7A0B\u5EA6\u3002\u7F13\u5B58\u540E\uFF0C\u6D4F\u89C8\u5668\u5C06\u907F\u514D\u5411\u670D\u52A1\u5668\u53D1\u9001\u8BF7\u6C42\uFF0C\u5E76\u4F7F\u7528\u670D\u52A1\u5668\u5148\u524D\u4E3A\u76F8\u540C\u8BF7\u6C42\u63D0\u4F9B\u7684\u4E0A\u4E00\u4E2A\u54CD\u5E94\uFF0C\u800C\u4E0D\u662F\u5411\u670D\u52A1\u5668\u53D1\u51FA\u771F\u5B9E\u8BF7\u6C42\u3002\u670D\u52A1\u5668\u8FD8\u53EF\u901A\u8FC7 Cache-Control \u6807\u5934\u63A7\u5236\u6B64\u884C\u4E3A\u3002","HTTP Caching strategy":"HTTP \u7F13\u5B58\u6218\u7565","Set HTTP caching strategy of request _PARAM1_ to _PARAM2_":"\u8BBE\u7F6E\u8BF7\u6C42 _PARAM1_ \u7684 HTTP \u7F13\u5B58\u7B56\u7565\u4E3A _PARAM2_","Learn more about what each caching strategy does [on the MDN page for cache](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache).":"\u4E86\u89E3\u6BCF\u79CD\u7F13\u5B58\u7B56\u7565\u7684\u66F4\u591A\u4FE1\u606F[\u5728 MDN \u7684\u7F13\u5B58\u9875\u9762] (https://developer.mozilla.org/zh-CN/docs/Web/API/Request/cache)\u3002","HTTP Caching":"HTTP \u7F13\u5B58","HTTP caching strategy of request _PARAM1_":"\u8BF7\u6C42 _PARAM1_ \u7684 HTTP \u7F13\u5B58\u7B56\u7565","Sets the body of an HTTP request to a JSON representation of a structure variable.":"\u5C06 HTTP \u8BF7\u6C42\u7684\u4E3B\u4F53\u8BBE\u7F6E\u4E3A\u7ED3\u6784\u53D8\u91CF\u7684 JSON \u8868\u793A\u3002","Body as JSON":"\u4E3B\u4F53\u4F5C\u4E3A JSON","Set body of request _PARAM1_ to contents of _PARAM2_ as JSON":"\u5C06\u8BF7\u6C42 _PARAM1_ \u7684\u4E3B\u4F53\u8BBE\u7F6E\u4E3A _PARAM2_ \u7684\u5185\u5BB9\u4F5C\u4E3A JSON","Variable with body contents":"\u5305\u542B\u4E3B\u4F53\u5185\u5BB9\u7684\u53D8\u91CF","Sets the body of an HTTP request to a form data representation of a structure variable.":"\u5C06 HTTP \u8BF7\u6C42\u7684\u4E3B\u4F53\u8BBE\u7F6E\u4E3A\u7ED3\u6784\u53D8\u91CF\u7684\u8868\u5355\u6570\u636E\u8868\u793A\u3002","Body as form data":"\u4F5C\u4E3A\u8868\u5355\u6570\u636E\u7684\u4E3B\u4F53","Set body of request _PARAM1_ to contents of _PARAM2_ as form data":"\u5C06\u8BF7\u6C42_PARAM1_\u7684\u4E3B\u4F53\u8BBE\u7F6E\u4E3A_PARAM2_\u7684\u5185\u5BB9\uFF0C\u4F5C\u4E3A\u8868\u5355\u6570\u636E","the body of the HTTP request. Contains data to send to the server, ususally in plain text, JSON or FormData format. This cannot be set for GET requests.":"HTTP\u8BF7\u6C42\u7684\u4E3B\u4F53\u3002\u5305\u542B\u53D1\u9001\u5230\u670D\u52A1\u5668\u7684\u6570\u636E\uFF0C\u901A\u5E38\u4EE5\u7EAF\u6587\u672C\u3001JSON\u6216FormData\u683C\u5F0F\u3002\u65E0\u6CD5\u4E3AGET\u8BF7\u6C42\u8BBE\u7F6E\u6B64\u9879\u3002","Body":"\u4E3B\u4F53","body of request _PARAM1_":"\u8BF7\u6C42\u6B63\u6587_PARAM1_","an HTTP header to be sent with the request.":"\u8981\u968F\u8BF7\u6C42\u53D1\u9001\u7684HTTP\u6807\u5934\u3002","Header":"\u6807\u9898","HTTP header _PARAM2_ of request _PARAM1_":"\u8BF7\u6C42_PARAM1_\u7684HTTP\u6807\u5934_PARAM2_","HTTP header name":"HTTP\u6807\u5934\u540D\u79F0","the request template's target URL.":"\u8BF7\u6C42\u6A21\u677F\u7684\u76EE\u6807URL\u3002","URL":"URL","the URL of request template _PARAM1_":"\u8BF7\u6C42\u6A21\u677F_PARAM1_\u7684URL","CORS prevents most external websites from being queried with the browser's HTTP client, since the browser may be authenticated on that website and as such another website would be able to impersonate the player on that other website.\nWhen the CORS Bypass is enabled, the request will be made from a server that is not authenticated anywhere and as such is not blocked by CORS, and it will share the response with your game. Note that as such, authentication cookies are ignored! If you own the REST API you are requesting, add CORS headers to your server instead of using this CORS Bypass.":"CORS\u963B\u6B62\u6D4F\u89C8\u5668\u7684HTTP\u5BA2\u6237\u7AEF\u67E5\u8BE2\u5927\u591A\u6570\u5916\u90E8\u7F51\u7AD9\uFF0C\u56E0\u4E3A\u6D4F\u89C8\u5668\u53EF\u80FD\u5728\u8BE5\u7F51\u7AD9\u4E0A\u8FDB\u884C\u4E86\u8EAB\u4EFD\u9A8C\u8BC1\uFF0C\u56E0\u6B64\u53E6\u4E00\u4E2A\u7F51\u7AD9\u5C06\u80FD\u591F\u5192\u5145\u8BE5\u5176\u4ED6\u7F51\u7AD9\u7684\u73A9\u5BB6\u3002\n\u542F\u7528CORS Bypass\u540E\uFF0C\u8BF7\u6C42\u5C06\u6765\u81EA\u672A\u7ECF\u8EAB\u4EFD\u9A8C\u8BC1\u7684\u670D\u52A1\u5668\uFF0C\u56E0\u6B64\u4E0D\u4F1A\u88ABCORS\u963B\u6B62\uFF0C\u5E76\u4E14\u5B83\u5C06\u4F1A\u4E0E\u60A8\u7684\u6E38\u620F\u5171\u4EAB\u54CD\u5E94\u3002\u8BF7\u6CE8\u610F\uFF0C\u8FD9\u6837\u505A\u4F1A\u5FFD\u7565\u8EAB\u4EFD\u9A8C\u8BC1cookie\uFF01\u5982\u679C\u60A8\u62E5\u6709\u6240\u8BF7\u6C42\u7684REST API\uFF0C\u8BF7\u5728\u670D\u52A1\u5668\u4E0A\u6DFB\u52A0CORS\u6807\u5934\uFF0C\u800C\u4E0D\u4F7F\u7528\u6B64CORS Bypass\u3002","Enable CORS Bypass":"\u542F\u7528CORS Bypass","Enable CORS Bypass for request _PARAM1_: _PARAM2_":"\u4E3A\u8BF7\u6C42_PARAM1_\u542F\u7528CORS Bypass\uFF1A_PARAM2_","Enable the CORS Bypass?":"\u542F\u7528CORS Bypass\uFF1F","The CORS Bypass server is offered for free by [arthuro555](https://twitter.com/arthuro555). Consider making a [donation](https://ko-fi.com/arthuro555) to help keep the CORS Bypass server running.":"CORS Bypass\u670D\u52A1\u5668\u7531[arthuro555](https://twitter.com/arthuro555)\u514D\u8D39\u63D0\u4F9B\u3002\u8003\u8651\u6350\u8D60\u4EE5\u5E2E\u52A9\u4FDD\u6301CORS Bypass\u670D\u52A1\u5668\u8FD0\u884C\u3002","Checks whether or not CORS Bypass has been enabled for the request template.":"\u68C0\u67E5\u8BF7\u6C42\u6A21\u677F\u662F\u5426\u542F\u7528\u4E86CORS Bypass\u3002","CORS Bypass enabled":"CORS Bypass\u5DF2\u542F\u7528","CORS Bypass is enabled for request _PARAM1_":"CORS Bypass\u5DF2\u4E3A\u8BF7\u6C42_PARAM1_\u542F\u7528","Executes the request defined by a request template.":"\u6267\u884C\u7531\u8BF7\u6C42\u6A21\u677F\u5B9A\u4E49\u7684\u8BF7\u6C42\u3002","Execute the request":"\u6267\u884C\u8BF7\u6C42","Execute request _PARAM1_ and store results in _PARAM2_":"\u6267\u884C\u8BF7\u6C42_PARAM1_\u5E76\u5C06\u7ED3\u679C\u5B58\u50A8\u5728_PARAM2_","Request to execute":"\u8981\u6267\u884C\u7684\u8BF7\u6C42","Variable where to store the response to the request":"\u7528\u4E8E\u5B58\u50A8\u5BF9\u8BF7\u6C42\u7684\u54CD\u5E94\u7684\u53D8\u91CF","Checks whether the server marked the response as a success (status code 1XX/2XX), not as a failure (status code 4XX/5XX).":"\u68C0\u67E5\u670D\u52A1\u5668\u662F\u5426\u5C06\u54CD\u5E94\u6807\u8BB0\u4E3A\u6210\u529F\uFF08\u72B6\u6001\u78011XX/2XX\uFF09\uFF0C\u800C\u4E0D\u662F\u5931\u8D25\uFF08\u72B6\u6001\u78014XX/5XX\uFF09\u3002","Success":"\u6210\u529F","Response _PARAM1_ indicates a success":"\u54CD\u5E94_PARAM1_\u8868\u793A\u6210\u529F","Variable containing the response":"\u5305\u542B\u54CD\u5E94\u7684\u53D8\u91CF","the status code of the HTTP request (e.g. 200 if succeeded, 404 if not found, etc).":"HTTP\u8BF7\u6C42\u7684\u72B6\u6001\u7801\uFF08\u4F8B\u5982\uFF0C\u5982\u679C\u6210\u529F\u5219\u4E3A200\uFF0C\u5982\u679C\u672A\u627E\u5230\u5219\u4E3A404\u7B49\uFF09\u3002","Status code":"\u72B6\u6001\u7801","Status code of response _PARAM1_":"\u54CD\u5E94_PARAM1_\u7684\u72B6\u6001\u7801","Gets the status text for a response. For example, for a response with the status code 404, the status text will be \"Not Found\".":"\u83B7\u53D6\u54CD\u5E94\u7684\u72B6\u6001\u6587\u672C\u3002\u4F8B\u5982\uFF0C\u5BF9\u4E8E\u72B6\u6001\u7801\u4E3A404\u7684\u54CD\u5E94\uFF0C\u72B6\u6001\u6587\u672C\u5C06\u4E3A\u201C\u672A\u627E\u5230\u201D\u3002","Status text":"\u72B6\u6001\u6587\u672C","one of the HTTP headers included in the server's response.":"\u670D\u52A1\u5668\u54CD\u5E94\u4E2D\u5305\u542B\u7684HTTP\u6807\u5934\u4E4B\u4E00\u3002","Header _PARAM2_ of response _PARAM1_":"\u54CD\u5E94_PARAM1_\u7684\u6807\u5934_PARAM2_","Reads the body sent by the server, and store it as a string in a variable.":"\u8BFB\u53D6\u670D\u52A1\u5668\u53D1\u9001\u7684\u6B63\u6587\uFF0C\u5E76\u5C06\u5176\u5B58\u50A8\u4E3A\u53D8\u91CF\u4E2D\u7684\u5B57\u7B26\u4E32\u3002","Get response body (text)":"\u83B7\u53D6\u54CD\u5E94\u6B63\u6587\uFF08\u6587\u672C\uFF09","Read body of response _PARAM1_ into _PARAM2_ as text":"\u5C06_PARAM1_\u54CD\u5E94\u7684\u6B63\u6587\u8BFB\u5165_PARAM2_\u4E3A\u6587\u672C","Variable where to write the body contents into":"\u5C06\u6B63\u6587\u5185\u5BB9\u5199\u5165\u7684\u53D8\u91CF","Reads the body sent by the server, parses it as JSON and stores the resulting structure in a variable.":"\u8BFB\u53D6\u670D\u52A1\u5668\u53D1\u9001\u7684\u6B63\u6587\uFF0C\u5C06\u5176\u89E3\u6790\u4E3AJSON\uFF0C\u5E76\u5C06\u5F97\u5230\u7684\u7ED3\u6784\u5B58\u50A8\u5728\u53D8\u91CF\u4E2D\u3002","Get response body (JSON)":"\u83B7\u53D6\u54CD\u5E94\u6B63\u6587\uFF08JSON\uFF09","Read body of response _PARAM1_ into _PARAM2_ as JSON":"\u5C06_PARAM1_\u54CD\u5E94\u7684\u6B63\u6587\u8BFB\u5165_PARAM2_\u4E3AJSON","Advanced platformer movements":"\u9AD8\u7EA7\u5E73\u53F0\u52A8\u4F5C","Let platformer characters: air jump, wall jump wall sliding, coyote time and dashing.":"\u5141\u8BB8\u5E73\u53F0\u89D2\u8272\uFF1A\u7A7A\u4E2D\u8DF3\u8DC3\uFF0C\u5899\u8DF3\uFF0C\u5899\u6ED1\uFF0C\u72FC\u72D7\u65F6\u95F4\u548C\u51B2\u523A\u3002","Movement":"\u8FD0\u52A8","Let platformer characters jump shortly after leaving a platform and also jump in mid-air.":"\u5141\u8BB8\u5E73\u53F0\u89D2\u8272\u5728\u79BB\u5F00\u5E73\u53F0\u540E\u4E0D\u4E45\u8DF3\u8DC3\uFF0C\u5E76\u5728\u7A7A\u4E2D\u8DF3\u8DC3\u3002","Coyote time and air jump":"Coyote\u65F6\u95F4\u548C\u7A7A\u4E2D\u8DF3\u8DC3","Platformer character behavior":"\u5E73\u53F0\u89D2\u8272\u884C\u4E3A","Coyote time duration":"Coyote\u65F6\u95F4\u6301\u7EED\u65F6\u95F4","Coyote time":"Coyote\u65F6\u95F4","Can coyote jump":"\u53EF\u4EE5\u8FDB\u884CCoyote\u8DF3","Was in the air":"\u66FE\u5728\u7A7A\u4E2D","Number of air jumps":"\u7A7A\u4E2D\u8DF3\u6570\u91CF","Air jump":"\u7A7A\u4E2D\u8DF3","Floor jumps count as air jumps":"\u5730\u677F\u8DF3\u8DC3\u8BA1\u5165\u7A7A\u4E2D\u8DF3\u8DC3","Object":"\u5BF9\u8C61","Behavior":"\u884C\u4E3A","Change the coyote time duration of an object (in seconds).":"\u66F4\u6539\u5BF9\u8C61\u7684\u8725\u72EE\u65F6\u95F4\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","Coyote timeframe":"\u8725\u72EE\u65F6\u95F4\u5E27","Change coyote time of _PARAM0_: _PARAM2_ seconds":"\u66F4\u6539_PARAM0_\u7684\u72FC\u72D7\u65F6\u95F4\uFF1A_PARAM2_\u79D2","Duration":"\u6301\u7EED\u65F6\u95F4","Coyote time duration in seconds.":"\u72FC\u72D7\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Check if a coyote jump can currently happen.":"\u68C0\u67E5\u5F53\u524D\u662F\u5426\u53EF\u4EE5\u8FDB\u884C\u72FC\u72D7\u8DF3\u8DC3\u3002","_PARAM0_ can coyote jump":"_PARAM0_\u53EF\u4EE5\u8FDB\u884C\u72FC\u72D7\u8DF3\u8DC3","Update WasInTheAir":"\u66F4\u65B0WasInTheAir","Update WasInTheAir property of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684WasInTheAir\u5C5E\u6027","Number of jumps in mid-air that are allowed.":"\u5141\u8BB8\u5728\u7A7A\u4E2D\u8FDB\u884C\u7684\u8DF3\u8DC3\u6B21\u6570\u3002","Maximal jump number":"\u6700\u5927\u8DF3\u8DC3\u6B21\u6570","Number of jumps in mid-air that are still allowed.":"\u4ECD\u7136\u5141\u8BB8\u5728\u7A7A\u4E2D\u8FDB\u884C\u7684\u8DF3\u8DC3\u6B21\u6570\u3002","Remaining jump":"\u5269\u4F59\u8DF3\u8DC3\u6B21\u6570","Change the number of times the character can jump in mid-air.":"\u66F4\u6539\u5B57\u7B26\u5728\u7A7A\u4E2D\u53EF\u4EE5\u8DF3\u8DC3\u7684\u6B21\u6570\u3002","Air jumps":"\u7A7A\u4E2D\u8DF3\u8DC3","Change the number of times _PARAM0_ can jump in mid-air: _PARAM2_":"\u66F4\u6539_PARAM0_\u5728\u7A7A\u4E2D\u53EF\u4EE5\u8DF3\u8DC3\u7684\u6B21\u6570\uFF1A_PARAM2_","Remove one of the remaining air jumps of a character.":"\u79FB\u9664\u89D2\u8272\u5269\u4F59\u7684\u4E00\u4E2A\u7A7A\u4E2D\u8DF3\u8DC3\u3002","Remove a remaining air jump":"\u79FB\u9664\u4E00\u4E2A\u5269\u4F59\u7A7A\u4E2D\u8DF3\u8DC3\u3002","Remove one of the remaining air jumps of _PARAM0_":"\u79FB\u9664_PARAM0_\u5269\u4F59\u7684\u4E00\u4E2A\u7A7A\u4E2D\u8DF3\u8DC3\u3002","Allow back all air jumps of a character.":"\u5141\u8BB8\u89D2\u8272\u91CD\u65B0\u8FDB\u884C\u6240\u6709\u7A7A\u4E2D\u8DF3\u8DC3\u3002","Reset air jumps":"\u91CD\u7F6E\u7A7A\u4E2D\u8DF3\u8DC3","Allow back all air jumps of _PARAM0_":"\u5141\u8BB8_PARAM0_\u91CD\u65B0\u8FDB\u884C\u6240\u6709\u7A7A\u4E2D\u8DF3\u8DC3","Check if floor jumps are counted as air jumps for an object.":"\u68C0\u67E5\u5BF9\u8C61\u7684\u5730\u9762\u8DF3\u8DC3\u662F\u5426\u8BA1\u4E3A\u7A7A\u4E2D\u8DF3\u8DC3\u3002","Floor jumps count as air jumps for _PARAM0_":"\u5BF9\u8C61\u7684\u5730\u9762\u8DF3\u8DC3\u8BA1\u4E3A_PARAM0_\u7684\u7A7A\u4E2D\u8DF3\u8DC3","Let platformer characters jump and slide against walls.":"\u5141\u8BB8\u5E73\u53F0\u89D2\u8272\u8DF3\u8DC3\u5E76\u6CBF\u5899\u6ED1\u52A8\u3002","Wall jump":"\u5899\u8DF3","Platformer character configuration stack":"\u5E73\u53F0\u89D2\u8272\u914D\u7F6E\u5806\u6808","Jump detection time frame":"\u8DF3\u8DC3\u68C0\u6D4B\u65F6\u95F4\u5E27","Side speed":"\u4FA7\u8FB9\u901F\u5EA6","Side acceleration":"\u4FA7\u8FB9\u52A0\u901F\u5EA6","Side speed sustain time":"\u4FA7\u901F\u7EF4\u6301\u65F6\u95F4","Gravity":"\u91CD\u529B","Wall sliding":"\u5899\u58C1\u6ED1\u884C","Maximum falling speed":"\u6700\u5927\u4E0B\u843D\u901F\u5EA6","Impact speed absorption":"\u51B2\u51FB\u901F\u5EA6\u5438\u6536","Minimal falling speed":"\u6700\u5C0F\u4E0B\u843D\u901F\u5EA6","Keep sliding without holding a key":"\u65E0\u9700\u6309\u952E\u4FDD\u6301\u6ED1\u884C","Check if the object has just wall jumped.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u521A\u521A\u8FDB\u884C\u4E86\u5899\u8DF3\u3002","Has just wall jumped":"\u521A\u521A\u8FDB\u884C\u4E86\u5899\u8DF3","_PARAM0_ has just jumped from a wall":"_PARAM0_\u521A\u521A\u8FDB\u884C\u4E86\u4ECE\u5899\u7684\u8DF3\u8DC3","Check if the object is wall jumping.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u53EF\u4EE5\u8DF3\u5899\u3002","Is wall jumping":"\u662F\u5426\u5728\u8DF3\u5899","_PARAM0_ jumped from a wall":"_PARAM0_ \u4ECE\u5899\u4E0A\u8DF3\u4E0B\u3002","Check if the object is against a wall.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5728\u9760\u5899\u3002","Against a wall":"\u9760\u5899","_PARAM0_ is against a wall":"_PARAM0_ \u9760\u7740\u5899\u3002","Remember that the character was against a wall.":"\u8BB0\u4F4F\u89D2\u8272\u66FE\u7ECF\u9760\u7740\u5899\u3002","Remember is against wall":"\u8BB0\u4F4F\u9760\u5899","_PARAM0_ remembers having been against a wall":"_PARAM0_ \u8BB0\u5F97\u66FE\u7ECF\u9760\u7740\u5899\u3002","Forget that the character was against a wall.":"\u5FD8\u8BB0\u89D2\u8272\u66FE\u7ECF\u9760\u7740\u5899\u3002","Forget is against wall":"\u5FD8\u8BB0\u9760\u5899","_PARAM0_ forgets to had been against a wall":"_PARAM0_ \u5FD8\u8BB0\u66FE\u9760\u7740\u5899","Remember that the character was against a wall within the time frame.":"\u8BB0\u5F97\u89D2\u8272\u66FE\u7ECF\u5728\u65F6\u95F4\u8303\u56F4\u5185\u9760\u7740\u5899\u3002","Was against wall":"\u5728\u65F6\u95F4\u8303\u56F4\u5185\u9760\u5899","_PARAM0_ remembers to had been against a wall within _PARAM2_ seconds":"_PARAM0_ \u8BB0\u5F97\u89D2\u8272\u5728 _PARAM2_ \u79D2\u5185\u9760\u7740\u5899","Time frame":"\u65F6\u95F4\u8303\u56F4","The time frame in seconds.":"\u65F6\u95F4\u8303\u56F4\uFF08\u79D2\uFF09\u3002","Remember that the jump key was pressed.":"\u8BB0\u4F4F\u8DF3\u8DC3\u952E\u88AB\u6309\u4E0B\u3002","Remember key pressed":"\u8BB0\u4F4F\u6309\u952E\u5DF2\u88AB\u6309\u4E0B","_PARAM0_ remembers the _PARAM2_ key was pressed":"_PARAM0_ \u8BB0\u5F97 _PARAM2_ \u6309\u952E\u5DF2\u88AB\u6309\u4E0B","Key":"\u5BC6\u94A5","Forget that the jump key was pressed.":"\u5FD8\u8BB0\u8DF3\u8DC3\u952E\u88AB\u6309\u4E0B\u3002","Forget key pressed":"\u5FD8\u8BB0\u6309\u952E\u5DF2\u88AB\u6309\u4E0B","_PARAM0_ forgets the _PARAM2_ key was pressed":"_PARAM0_ \u5FD8\u8BB0 _PARAM2_ \u6309\u952E\u5DF2\u88AB\u6309\u4E0B","Check if the key was pressed within the time frame.":"\u68C0\u67E5\u6309\u952E\u662F\u5426\u5728\u65F6\u95F4\u8303\u56F4\u5185\u88AB\u6309\u4E0B\u3002","_PARAM0_ remembers _PARAM3_ key was pressed within _PARAM2_ seconds":"_PARAM0_ \u8BB0\u5F97 _PARAM3_ \u6309\u952E\u5728 _PARAM2_ \u79D2\u5185\u88AB\u6309\u4E0B","Enable side speed.":"\u542F\u7528\u4FA7\u8FB9\u901F\u5EA6\u3002","Toggle side speed":"\u5207\u6362\u4FA7\u8FB9\u901F\u5EA6","Enable side speed for _PARAM0_: _PARAM2_":"\u542F\u7528 _PARAM0_ \u7684\u4FA7\u8FB9\u901F\u5EA6\uFF1A_PARAM2_","Enable side speed":"\u542F\u7528\u4FA7\u8FB9\u901F\u5EA6","Enable wall sliding.":"\u542F\u7528\u5899\u58C1\u6ED1\u884C\u3002","Slide on wall":"\u5728\u5899\u4E0A\u6ED1\u52A8","Enable wall sliding for _PARAM0_: _PARAM2_":"\u542F\u7528 _PARAM0_ \u7684\u5899\u58C1\u6ED1\u884C\uFF1A_PARAM2_","Enable wall sliding":"\u542F\u7528\u5899\u58C1\u6ED1\u884C","Absorb falling speed of an object.":"\u5438\u6536\u5BF9\u8C61\u7684\u4E0B\u843D\u901F\u5EA6\u3002","Absorb falling speed":"\u5438\u6536\u4E0B\u843D\u901F\u5EA6","Absorb falling speed of _PARAM0_: _PARAM2_":"\u5438\u6536 _PARAM0_ \u7684\u4E0B\u843D\u901F\u5EA6\uFF1A_PARAM2_","Speed absorption (in pixels per second)":"\u6BCF\u79D2\u901F\u5EA6\u5438\u6536\u91CF\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","The wall jump detection time frame of an object (in seconds).":"\u5BF9\u8C61\u7684\u5899\u58C1\u8DF3\u8DC3\u68C0\u6D4B\u65F6\u95F4\u8303\u56F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Jump time frame":"\u8DF3\u8DC3\u65F6\u95F4\u8303\u56F4","Change the wall jump detection time frame of _PARAM0_: _PARAM2_":"\u66F4\u6539_OBJECT0_\u7684\u5899\u58C1\u8DF3\u8DC3\u68C0\u6D4B\u65F6\u95F4\u8303\u56F4: _PARAM2_","Change the wall jump detection time frame of an object (in seconds).":"\u66F4\u6539\u5BF9\u8C61\u7684\u5899\u58C1\u8DF3\u8DC3\u68C0\u6D4B\u65F6\u95F4\u8303\u56F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Jump detection time frame (in seconds)":"\u8DF3\u8DC3\u68C0\u6D4B\u65F6\u95F4\u8303\u56F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09","The side speed of wall jumps of an object (in pixels per second).":"\u5BF9\u8C61\u7684\u5899\u58C1\u8DF3\u8DC3\u4FA7\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\u6BCF\u79D2\uFF09\u3002","Change the side speed of wall jumps of _PARAM0_: _PARAM2_":"\u66F4\u6539_OBJECT0_\u7684\u5899\u58C1\u8DF3\u8DC3\u4FA7\u901F\u5EA6: _PARAM2_","Change the side speed of wall jumps of an object (in pixels per second).":"\u66F4\u6539\u5BF9\u8C61\u7684\u5899\u58C1\u8DF3\u8DC3\u4FA7\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\u6BCF\u79D2\uFF09\u3002","The side acceleration of wall jumps of an object (in pixels per second per second).":"\u5BF9\u8C61\u7684\u5899\u58C1\u8DF3\u8DC3\u4FA7\u52A0\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u6BCF\u79D2\u4E3A\u5355\u4F4D\u7684\u50CF\u7D20\uFF09\u3002","Change the side acceleration of wall jumps of _PARAM0_: _PARAM2_":"\u66F4\u6539_OBJECT0_\u7684\u5899\u58C1\u8DF3\u8DC3\u4FA7\u52A0\u901F\u5EA6: _PARAM2_","Change the side acceleration of wall jumps of an object (in pixels per second per second).":"\u66F4\u6539\u5BF9\u8C61\u7684\u5899\u58C1\u8DF3\u8DC3\u4FA7\u52A0\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u6BCF\u79D2\u4E3A\u5355\u4F4D\u7684\u50CF\u7D20\uFF09\u3002","The wall sliding gravity of an object (in pixels per second per second).":"\u5BF9\u8C61\u7684\u5899\u58C1\u6ED1\u52A8\u91CD\u529B\uFF08\u4EE5\u6BCF\u79D2\u6BCF\u79D2\u4E3A\u5355\u4F4D\u7684\u50CF\u7D20\uFF09\u3002","Change the wall sliding gravity of _PARAM0_: _PARAM2_":"\u66F4\u6539_OBJECT0_\u7684\u5899\u58C1\u6ED1\u52A8\u91CD\u529B: _PARAM2_","Change the wall sliding gravity of an object (in pixels per second per second).":"\u66F4\u6539\u5BF9\u8C61\u7684\u5899\u58C1\u6ED1\u52A8\u91CD\u529B\uFF08\u4EE5\u6BCF\u79D2\u6BCF\u79D2\u4E3A\u5355\u4F4D\u7684\u50CF\u7D20\uFF09\u3002","The wall sliding maximum falling speed of an object (in pixels per second).":"\u5BF9\u8C61\u7684\u5899\u58C1\u6ED1\u52A8\u6700\u5927\u4E0B\u843D\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u4E3A\u5355\u4F4D\u7684\u50CF\u7D20\uFF09\u3002","Change the wall sliding maximum falling speed of _PARAM0_: _PARAM2_":"\u66F4\u6539_OBJECT0_\u7684\u5899\u58C1\u6ED1\u52A8\u6700\u5927\u4E0B\u843D\u901F\u5EA6: _PARAM2_","Change the wall sliding maximum falling speed of an object (in pixels per second).":"\u66F4\u6539\u5BF9\u8C61\u7684\u5899\u58C1\u6ED1\u52A8\u6700\u5927\u4E0B\u843D\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u4E3A\u5355\u4F4D\u7684\u50CF\u7D20\uFF09\u3002","Change the impact speed absorption of an object.":"\u66F4\u6539\u5BF9\u8C61\u7684\u51B2\u51FB\u901F\u5EA6\u5438\u6536\u91CF\u3002","Change the impact speed absorption of _PARAM0_: _PARAM2_":"\u66F4\u6539_OBJECT0_\u7684\u51B2\u51FB\u901F\u5EA6\u5438\u6536\u91CF: _PARAM2_","Make platformer characters dash toward the floor.":"\u4F7F\u5E73\u53F0\u89D2\u8272\u671D\u5730\u677F\u51B2\u523A\u3002","Dive dash":"\u6F5C\u6C34\u51B2\u523A","Initial falling speed":"\u521D\u59CB\u4E0B\u843D\u901F\u5EA6","Simulate a press of dive key to make the object dives to the floor if it can dive.":"\u6A21\u62DF\u6309\u4E0B\u6F5C\u6C34\u952E\uFF0C\u4F7F\u5BF9\u8C61\u6F5C\u5165\u5730\u677F\uFF08\u5982\u679C\u53EF\u4EE5\u6F5C\u6C34\uFF09\u3002","Simulate dive key":"\u6A21\u62DF\u6F5C\u6C34\u952E","Simulate pressing dive key for _PARAM0_":"\u6A21\u62DF\u4E3A_OBJECT0_\u6309\u4E0B\u6F5C\u6C34\u952E","Check if the object can dive.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u53EF\u4EE5\u6F5C\u6C34\u3002","Can dive":"\u53EF\u4EE5\u6F5C\u6C34","_PARAM0_ can dive":"_OBJECT0_\u53EF\u4EE5\u6F5C\u6C34","Check if the object is diving.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u6F5C\u6C34\u4E2D\u3002","Is diving":"\u6B63\u5728\u6F5C\u6C34","_PARAM0_ is diving":"_OBJECT0_\u6B63\u5728\u6F5C\u6C34","Make platformer characters dash horizontally.":"\u4F7F\u5E73\u53F0\u89D2\u8272\u6C34\u5E73\u51B2\u523A\u3002","Horizontal dash":"\u6C34\u5E73\u51B2\u523A","Platformer charcacter configuration stack":"\u5E73\u53F0\u89D2\u8272\u914D\u7F6E\u5806\u6808","Initial speed":"\u521D\u59CB\u901F\u5EA6","Sustain minimum duration":"\u6700\u5C0F\u6301\u7EED\u65F6\u95F4","Sustain":"\u7EF4\u6301","Sustain maxiumum duration":"\u6700\u5927\u6301\u7EED\u65F6\u95F4","Sustain acceleration":"\u6301\u7EED\u52A0\u901F","Sustain maxiumum speed":"\u6301\u7EED\u6700\u5927\u901F\u5EA6","Sustain gravity":"\u6301\u7EED\u91CD\u529B","Decceleration":"\u51CF\u901F","Cool down duration":"\u51B7\u5374\u6301\u7EED\u65F6\u95F4","Update the last direction used by the character.":"\u66F4\u65B0\u89D2\u8272\u4F7F\u7528\u7684\u6700\u540E\u4E00\u4E2A\u65B9\u5411\u3002","Update last direction":"\u66F4\u65B0\u6700\u540E\u65B9\u5411","Update last direction used by _PARAM0_":"\u66F4\u65B0_PARAM0_\u4F7F\u7528\u7684\u6700\u540E\u65B9\u5411","Simulate a press of dash key.":"\u6A21\u62DF\u6309\u4E0B\u51B2\u523A\u952E\u3002","Simulate dash key":"\u6A21\u62DF\u51B2\u523A\u952E","Simulate pressing dash key for _PARAM0_":"\u6A21\u62DF\u6309\u4E0B\u7834\u6298\u53F7\u952E\u4EE5\u83B7\u53D6_PARAM0_","Check if the object is dashing.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5728\u7834\u6298\u53F7\u72B6\u6001\u3002","Is dashing":"\u7834\u6298\u53F7\u72B6\u6001","_PARAM0_ is dashing":"_PARAM0_\u6B63\u5728\u7834\u6298\u53F7\u72B6\u6001","Abort the current dash and set the object to its usual horizontal speed.":"\u4E2D\u6B62\u5F53\u524D\u7684\u7834\u6298\u53F7\u72B6\u6001\u5E76\u5C06\u5BF9\u8C61\u8BBE\u7F6E\u4E3A\u901A\u5E38\u7684\u6C34\u5E73\u901F\u5EA6\u3002","Abort dash":"\u4E2D\u6B62\u7834\u6298\u53F7","Abort the current dash of _PARAM0_":"\u4E2D\u6B62_PARAM0_\u7684\u5F53\u524D\u7834\u6298\u53F7\u72B6\u6001","Resolve conflict between platformer character configuration changes.":"\u89E3\u51B3\u5E73\u53F0\u89D2\u8272\u914D\u7F6E\u66F4\u6539\u4E4B\u95F4\u7684\u51B2\u7A81\u3002","Revert configuration changes for one identifier and update the character configuration to use the most recent ones.":"\u6062\u590D\u4E00\u4E2A\u6807\u8BC6\u7B26\u7684\u914D\u7F6E\u66F4\u6539\uFF0C\u5E76\u66F4\u65B0\u89D2\u8272\u914D\u7F6E\u4EE5\u4F7F\u7528\u6700\u8FD1\u7684\u66F4\u6539\u3002","Revert configuration":"\u6062\u590D\u914D\u7F6E","Revert configuration changes: _PARAM2_ on _PARAM0_":"\u6062\u590D_PARAM0_\u7684_PARAM2_\u7684\u914D\u7F6E\u66F4\u6539","Configuration identifier":"\u914D\u7F6E\u6807\u8BC6\u7B26","Return the character property value when no change applies on it.":"\u5728\u5B83\u4E0A\u9762\u6CA1\u6709\u5E94\u7528\u66F4\u6539\u65F6\uFF0C\u8FD4\u56DE\u89D2\u8272\u5C5E\u6027\u503C\u3002","Setting":"\u8BBE\u7F6E","Configure the _PARAM2_ of _PARAM0_: _PARAM3_ with the identifier: _PARAM4_":"\u914D\u7F6E_PARAM2_\u7684_PARAM0_\uFF1A_PARAM3_\uFF0C\u5E26\u6709\u6807\u8BC6\u7B26\uFF1A_PARAM4_","Return the usual maximum horizontal speed when no configuration change applies on it.":"\u5F53\u5B83\u4E0A\u6CA1\u6709\u5E94\u7528\u66F4\u6539\u65F6\uFF0C\u8FD4\u56DE\u901A\u5E38\u7684\u6700\u5927\u6C34\u5E73\u901F\u5EA6\u3002","Usual maximum horizontal speed":"\u901A\u5E38\u7684\u6700\u5927\u6C34\u5E73\u901F\u5EA6","Configure the maximum horizontal speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u914D\u7F6E_PARAM0_\u7684\u6700\u5927\u6C34\u5E73\u901F\u5EA6\uFF1A_PARAM2_\uFF0C\u5E26\u6709\u6807\u8BC6\u7B26\uFF1A_PARAM3_","Configure a character property for a given configuration layer and move this layer on top.":"\u4E3A\u7ED9\u5B9A\u7684\u914D\u7F6E\u5C42\u914D\u7F6E\u89D2\u8272\u5C5E\u6027\uFF0C\u5E76\u5C06\u8BE5\u5C42\u79FB\u52A8\u5230\u9876\u90E8\u3002","Configure setting":"\u914D\u7F6E\u8BBE\u7F6E","Setting value":"\u8BBE\u7F6E\u503C","Configure character gravity for a given configuration layer and move this layer on top.":"\u4E3A\u7ED9\u5B9A\u7684\u914D\u7F6E\u5C42\u914D\u7F6E\u89D2\u8272\u91CD\u529B\uFF0C\u5E76\u5C06\u8BE5\u5C42\u79FB\u52A8\u5230\u9876\u90E8\u3002","Configure gravity":"\u914D\u7F6E\u91CD\u529B","Configure the gravity of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u914D\u7F6E_PARAM0_\u7684\u91CD\u529B\uFF1A_PARAM2_\uFF0C\u5E26\u6709\u6807\u8BC6\u7B26\uFF1A_PARAM3_","Configure character deceleration for a given configuration layer and move this layer on top.":"\u4E3A\u7ED9\u5B9A\u7684\u914D\u7F6E\u5C42\u914D\u7F6E\u89D2\u8272\u51CF\u901F\uFF0C\u5E76\u5C06\u8BE5\u5C42\u79FB\u52A8\u5230\u9876\u90E8\u3002","Configure horizontal deceleration":"\u914D\u7F6E\u6C34\u5E73\u51CF\u901F","Configure the horizontal deceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u914D\u7F6E_PARAM0_\u7684\u6C34\u5E73\u51CF\u901F\uFF1A_PARAM2_\uFF0C\u5E26\u6709\u6807\u8BC6\u7B26\uFF1A_PARAM3_","Acceleration":"\u52A0\u901F\u5EA6","Configure character maximum speed for a given configuration layer and move this layer on top.":"\u4E3A\u7ED9\u5B9A\u7684\u914D\u7F6E\u5C42\u914D\u7F6E\u89D2\u8272\u6700\u5927\u901F\u5EA6\uFF0C\u5E76\u5C06\u8BE5\u5C42\u79FB\u52A8\u5230\u9876\u90E8\u3002","Configure maximum horizontal speed":"\u914D\u7F6E\u6700\u5927\u6C34\u5E73\u901F\u5EA6","Maximum horizontal speed":"\u6700\u5927\u6C34\u5E73\u901F\u5EA6","Configure character acceleration for a given configuration layer and move this layer on top.":"\u4E3A\u7ED9\u5B9A\u7684\u914D\u7F6E\u5C42\u914D\u7F6E\u89D2\u8272\u52A0\u901F\u5EA6\uFF0C\u5E76\u5C06\u8BE5\u5C42\u79FB\u52A8\u5230\u9876\u90E8\u3002","Configure horizontal acceleration":"\u914D\u7F6E\u6C34\u5E73\u52A0\u901F\u5EA6","Configure the horizontal acceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u914D\u7F6E_PARAM0_\u7684\u6C34\u5E73\u52A0\u901F\u5EA6\uFF1A_PARAM2_\uFF0C\u5E26\u6709\u6807\u8BC6\u7B26\uFF1A_PARAM3_","Configure character maximum falling speed for a given configuration layer and move this layer on top.":"\u4E3A\u7ED9\u5B9A\u914D\u7F6E\u5C42\u914D\u7F6E\u5B57\u7B26\u6700\u5927\u4E0B\u843D\u901F\u5EA6\uFF0C\u5E76\u5C06\u6B64\u5C42\u7F6E\u4E8E\u9876\u90E8\u3002","Configure maximum falling speed":"\u914D\u7F6E\u6700\u5927\u4E0B\u843D\u901F\u5EA6","Configure the maximum falling speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u914D\u7F6E_PARAM0_\u7684\u6700\u5927\u4E0B\u843D\u901F\u5EA6: _PARAM2_\uFF0C\u4F7F\u7528\u6807\u8BC6\u7B26: _PARAM3_","Advanced movements for 3D physics characters":"3D \u7269\u7406\u89D2\u8272\u7684\u9AD8\u7EA7\u52A8\u4F5C","Let 3D physics characters: air jump, wall jump wall sliding, coyote time and dashing.":"\u8BA9 3D \u7269\u7406\u89D2\u8272\uFF1A\u7A7A\u4E2D\u8DF3\u8DC3\uFF0C\u5899\u8DF3\uFF0C\u5899\u6ED1\uFF0Ccoyote \u65F6\u95F4\u548C\u51B2\u523A\u3002","Let 3D physics characters jump shortly after leaving a platform and also jump in mid-air.":"3D\u7269\u7406\u89D2\u8272\u5728\u79BB\u5F00\u5E73\u53F0\u540E\u80FD\u591F\u77ED\u6682\u8DF3\u8DC3\uFF0C\u5E76\u4E14\u5728\u7A7A\u4E2D\u8DF3\u8DC3\u3002","Coyote time and air jump for 3D":"3D\u8C7A\u72FC\u65F6\u95F4\u548C\u7A7A\u4E2D\u8DF3\u8DC3","3D physics character":"3D\u7269\u7406\u89D2\u8272","A Jump control was applied from a default control or simulated by an action.":"\u4ECE\u9ED8\u8BA4\u63A7\u5236\u6216\u901A\u8FC7\u64CD\u4F5C\u5E94\u7528\u4E86\u8DF3\u8DC3\u63A7\u5236\u3002","Jump pressed or simulated":"\u8DF3\u8DC3\u6309\u4E0B\u6216\u6A21\u62DF","_PARAM0_ has the Jump key pressed or simulated":"_PARAM0_\u5DF2\u6309\u4E0B\u6216\u6A21\u62DF\u4E86\u8DF3\u8DC3\u952E","Advanced p2p event handling":"P2P \u4E8B\u4EF6\u5904\u7406\u7684\u9AD8\u7EA7","Allows handling all received P2P events at once instead of one per frame. It is more complex but also potentially more performant.":"\u5141\u8BB8\u4E00\u6B21\u5904\u7406\u6240\u6709\u63A5\u6536\u5230\u7684 P2P \u4E8B\u4EF6\uFF0C\u800C\u4E0D\u662F\u6BCF\u5E27\u5904\u7406\u4E00\u4E2A\u3002\u5B83\u66F4\u590D\u6742\uFF0C\u4F46\u4E5F\u53EF\u80FD\u66F4\u9AD8\u6548\u3002","Marks the event as handled, to go on to the next.":"\u5C06\u4E8B\u4EF6\u6807\u8BB0\u4E3A\u5DF2\u5904\u7406\uFF0C\u4EE5\u7EE7\u7EED\u4E0B\u4E00\u4E2A\u3002","Dismiss event":"\u89E3\u6563\u4E8B\u4EF6","Dismiss event _PARAM1_ as handled":"\u89E3\u6563\u4E8B\u4EF6_PARAM1_\u4E3A\u5DF2\u5904\u7406","The event to dismiss":"\u8981\u89E3\u6563\u7684\u4E8B\u4EF6","Advanced projectile":"\u9AD8\u7EA7\u5F39\u9053","Control how a projectile moves including speed, acceleration, distance, and lifetime.":"\u63A7\u5236\u5F39\u9053\u7684\u79FB\u52A8\u901F\u5EA6\u3001\u52A0\u901F\u5EA6\u3001\u8DDD\u79BB\u548C\u5BFF\u547D\u3002","Control how a projectile object moves including lifetime, distance, speed, and acceleration.":"\u63A7\u5236\u53D1\u5C04\u7269\u5BF9\u8C61\u7684\u79FB\u52A8\uFF0C\u5305\u62EC\u5BFF\u547D\u3001\u8DDD\u79BB\u3001\u901F\u5EA6\u548C\u52A0\u901F\u5EA6\u3002","Lifetime":"\u5BFF\u547D","Use \"0\" to ignore this property.":"\u4F7F\u7528\"0\"\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","Max distance from starting position":"\u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u79BB","Max speed":"\u6700\u5927\u901F\u5EA6","Speed from object forces will not exceed this value. Use \"0\" to ignore this property.":"\u6765\u81EA\u5BF9\u8C61\u529B\u7684\u901F\u5EA6\u4E0D\u4F1A\u8D85\u8FC7\u8FD9\u4E2A\u503C\u3002\u4F7F\u7528\"0\"\u6765\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","Speed from object forces will not go below this value. Use \"0\" to ignore this property.":"\u6765\u81EA\u5BF9\u8C61\u529B\u7684\u901F\u5EA6\u4E0D\u4F1A\u4F4E\u4E8E\u8FD9\u4E2A\u503C\u3002\u4F7F\u7528\"0\"\u6765\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","Negative acceleration can be used to stop a projectile.":"\u8D1F\u52A0\u901F\u5EA6\u53EF\u4EE5\u7528\u4E8E\u505C\u6B62\u4E00\u4E2A\u629B\u5C04\u4F53\u3002","Starting speed":"\u8D77\u59CB\u901F\u5EA6","Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"\u5BF9\u8C61\u5C06\u5728\u521B\u5EFA\u65F6\u671D\u5411\u7684\u65B9\u5411\u79FB\u52A8\u3002\u4F7F\u7528\"0\"\u6765\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","Delete when lifetime is exceeded":"\u5F53\u8D85\u51FA\u5BFF\u547D\u65F6\u5220\u9664","Delete when distance from starting position is exceeded":"\u5F53\u8D85\u51FA\u8D77\u59CB\u4F4D\u7F6E\u7684\u8DDD\u79BB\u65F6\u5220\u9664","Check if max distance from starting position has been exceeded (object will be deleted next frame).":"\u68C0\u67E5\u662F\u5426\u8D85\u8FC7\u4E86\u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u79BB\uFF08\u5BF9\u8C61\u5C06\u5728\u4E0B\u4E00\u5E27\u88AB\u5220\u9664\uFF09\u3002","Max distance from starting position has been exceeded":"\u5DF2\u8D85\u8FC7\u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u79BB","Max distance from starting position of _PARAM0_ has been exceeded":"_PARAM0_\u7684\u8DDD\u79BB\u4ECE\u8D77\u59CB\u4F4D\u7F6E\u5DF2\u7ECF\u8D85\u8FC7\u4E86\u6700\u5927\u8DDD\u79BB","Check if lifetime has been exceeded (object will be deleted next frame).":"\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u8D85\u8FC7\u4E86\u5BFF\u547D\uFF08\u5BF9\u8C61\u5C06\u5728\u4E0B\u4E00\u5E27\u88AB\u5220\u9664\uFF09\u3002","Lifetime has been exceeded":"\u5DF2\u8D85\u8FC7\u5BFF\u547D","Lifetime of _PARAM0_ has been exceeded":"_PARAM0_\u7684\u5BFF\u547D\u5DF2\u7ECF\u8D85\u8FC7","the lifetime of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"\u5BF9\u8C61\u7684\u5BFF\u547D\u3002\u5C5E\u6027\u8D85\u8FC7\u540E\uFF0C\u5BF9\u8C61\u5C06\u88AB\u5220\u9664\u3002\u4F7F\u7528\"0\"\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","the lifetime":"\u5BFF\u547D","Restart lifetime timer of object.":"\u91CD\u65B0\u542F\u52A8\u5BF9\u8C61\u7684\u751F\u5B58\u5B9A\u65F6\u5668\u3002","Restart lifetime timer":"\u91CD\u65B0\u542F\u52A8\u751F\u5B58\u5B9A\u65F6\u5668","Restart lifetime timer of _PARAM0_":"\u91CD\u65B0\u542F\u52A8_PARAM0_\u7684\u751F\u5B58\u5B9A\u65F6\u5668","the max distance from starting position of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"\u5BF9\u8C61\u79BB\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u79BB\u3002\u5C5E\u6027\u8D85\u8FC7\u540E\uFF0C\u5BF9\u8C61\u5C06\u88AB\u5220\u9664\u3002\u4F7F\u7528\"0\"\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","the max distance from starting position":"\u79BB\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u79BB","Change the starting position of object to it's current position.":"\u5C06\u5BF9\u8C61\u7684\u8D77\u59CB\u4F4D\u7F6E\u66F4\u6539\u4E3A\u5176\u5F53\u524D\u4F4D\u7F6E\u3002","Change starting position to the current position":"\u5C06\u8D77\u59CB\u4F4D\u7F6E\u66F4\u6539\u4E3A\u5F53\u524D\u4F4D\u7F6E","Change the starting position of _PARAM0_ to it's current position":"\u5C06_PARAM0_\u7684\u8D77\u59CB\u4F4D\u7F6E\u66F4\u6539\u4E3A\u5176\u5F53\u524D\u4F4D\u7F6E","the max speed of the object. Object forces cannot exceed this value. Use \"0\" to ignore this property.":"\u5BF9\u8C61\u7684\u6700\u5927\u901F\u5EA6\u3002\u5BF9\u8C61\u7684\u529B\u4E0D\u5F97\u8D85\u8FC7\u6B64\u503C\u3002\u4F7F\u7528\"0\"\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","the max speed":"\u6700\u5927\u901F\u5EA6","the minSpeed of the object. Object forces cannot go below this value. Use \"0\" to ignore this property.":"\u5BF9\u8C61\u7684\u6700\u5C0F\u901F\u5EA6\u3002\u5BF9\u8C61\u7684\u529B\u4E0D\u5F97\u4F4E\u4E8E\u6B64\u503C\u3002\u4F7F\u7528\"0\"\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","MinSpeed":"\u6700\u5C0F\u901F\u5EA6","the minSpeed":"\u6700\u5C0F\u901F\u5EA6","the acceleration of the object. Use a negative number to slow down.":"\u5BF9\u8C61\u7684\u52A0\u901F\u5EA6\u3002\u4F7F\u7528\u8D1F\u6570\u6765\u51CF\u901F\u3002","the acceleration":"\u52A0\u901F\u5EA6","the starting speed of the object. Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"\u5BF9\u8C61\u7684\u521D\u59CB\u901F\u5EA6\u3002\u5BF9\u8C61\u88AB\u521B\u5EFA\u65F6\u6CBF\u7740\u5176\u9762\u671D\u7684\u65B9\u5411\u79FB\u52A8\u3002\u4F7F\u7528\"0\"\u5FFD\u7565\u6B64\u5C5E\u6027\u3002","the starting speed":"\u521D\u59CB\u901F\u5EA6","Check if automatic deletion is enabled when lifetime is exceeded.":"\u68C0\u67E5\u662F\u5426\u5728\u5BFF\u547D\u8D85\u51FA\u65F6\u542F\u7528\u81EA\u52A8\u5220\u9664\u3002","Automatic deletion is enabled when lifetime is exceeded":"\u5728\u5BFF\u547D\u8D85\u51FA\u65F6\u81EA\u52A8\u5220\u9664\u5DF2\u542F\u7528","Automatic deletion is enabled when lifetime is exceeded on _PARAM0_":"\u5F53 _PARAM0_ \u5BFF\u547D\u8D85\u51FA\u65F6\u542F\u7528\u81EA\u52A8\u5220\u9664","Change automatic deletion of object when lifetime is exceeded.":"\u66F4\u6539\u5BFF\u547D\u8D85\u51FA\u65F6\u81EA\u52A8\u5220\u9664\u5BF9\u8C61\u3002","Change automatic deletion when lifetime is exceeded":"\u5F53\u5BFF\u547D\u8D85\u51FA\u65F6\u66F4\u6539\u81EA\u52A8\u5220\u9664","Enable automatic deletion of _PARAM0_ when lifetime is exceeded: _PARAM2_":"\u5728\u5BFF\u547D\u8D85\u51FA\u65F6\u542F\u7528\u81EA\u52A8\u5220\u9664 _PARAM0_ \uFF1A _PARAM2_","DeleteWhenLifetimeExceeded":"DeleteWhenLifetimeExceeded","Check if automatic deletion is enabled when distance from starting position is exceeded.":"\u68C0\u67E5\u662F\u5426\u5728\u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u8D85\u51FA\u65F6\u542F\u7528\u81EA\u52A8\u5220\u9664\u3002","Automatic deletion is enabled when distance from starting position is exceeded":"\u5728\u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u8D85\u51FA\u65F6\u81EA\u52A8\u5220\u9664\u5DF2\u542F\u7528","Automatic deletion is enabled when distance from starting position is exceeded on _PARAM0_":"\u5F53 _PARAM0_ \u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u8D85\u51FA\u65F6\u542F\u7528\u81EA\u52A8\u5220\u9664","Change automatic deletion when distance from starting position is exceeded.":"\u66F4\u6539\u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u8D85\u51FA\u65F6\u81EA\u52A8\u5220\u9664\u5BF9\u8C61\u3002","Change automatic deletion when distance from starting position is exceeded":"\u5F53\u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u8D85\u51FA\u65F6\u66F4\u6539\u81EA\u52A8\u5220\u9664","Enable automatic deletion of _PARAM0_ when distance from starting position is exceeded: _PARAM2_":"\u5728\u8DDD\u79BB\u8D77\u59CB\u4F4D\u7F6E\u8D85\u51FA\u65F6\u542F\u7528 _PARAM0_ \u7684\u81EA\u52A8\u5220\u9664\uFF1A_PARAM2_","DeleteWhenDistanceExceeded":"DeleteWhenDistanceExceeded","Animated Back and Forth Movement":"\u5F80\u8FD4\u52A8\u753B","Make the object go on the left, then when some distance is reached, flip and go back to the right. Make sure that your object has two animations called \"GoLeft\" and \"TurnLeft\".":"\u4F7F\u5BF9\u8C61\u5411\u5DE6\u79FB\u52A8\uFF0C\u7136\u540E\u8FBE\u5230\u4E00\u5B9A\u8DDD\u79BB\u65F6\u7FFB\u8F6C\u5E76\u8FD4\u56DE\u53F3\u4FA7\u3002\u786E\u4FDD\u60A8\u7684\u5BF9\u8C61\u6709\u4E24\u4E2A\u540D\u4E3A\"GoLeft\"\u548C\"TurnLeft\"\u7684\u52A8\u753B\u3002","Animated Back and Forth (mirrored) Movement":"\u52A8\u753B\u5F0F\u524D\u540E\uFF08\u955C\u50CF\uFF09\u79FB\u52A8","Animatable capability":"\u53EF\u52A8\u753B\u5316\u529F\u80FD","Flippable capability":"\u53EF\u7FFB\u8F6C\u529F\u80FD","Speed on X axis, in pixels per second":"X\u8F74\u4E0A\u7684\u901F\u5EA6\uFF0C\u6BCF\u79D2\u50CF\u7D20\u6570","Distance traveled on X axis, in pixels":"X\u8F74\u4E0A\u7684\u884C\u8FDB\u8DDD\u79BB\uFF0C\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D","Array tools":"\u6570\u7EC4\u5DE5\u5177","A collection of utilities and tools for working with arrays.":"\u7528\u4E8E\u5904\u7406\u6570\u7EC4\u7684\u5B9E\u7528\u5DE5\u5177\u548C\u5DE5\u5177\u7684\u96C6\u5408\u3002","General":"\u901A\u7528","The index of the first variable that equals to a specific number in an array.":"\u5728\u6570\u7EC4\u4E2D\u7B49\u4E8E\u7279\u5B9A\u6570\u5B57\u7684\u7B2C\u4E00\u4E2A\u53D8\u91CF\u7684\u7D22\u5F15\u3002","Index of number":"\u6570\u5B57\u7684\u7D22\u5F15","The first index where _PARAM2_ can be found in _PARAM1_":"\u5728_PARAM1_\u4E2D\u627E\u5230_PARAM2_\u7684\u7B2C\u4E00\u4E2A\u7D22\u5F15","Array to search the value in":"\u6570\u7EC4\u4E2D\u641C\u7D22\u503C","Number to search in the array":"\u5728\u6570\u7EC4\u4E2D\u641C\u7D22\u7684\u6570\u5B57","The index of the first variable that equals to a specific text in an array.":"\u5728\u6570\u7EC4\u4E2D\u7B49\u4E8E\u7279\u5B9A\u6587\u672C\u7684\u7B2C\u4E00\u4E2A\u53D8\u91CF\u7684\u7D22\u5F15\u3002","Index of text":"\u6587\u672C\u7684\u7D22\u5F15","String to search in the array":"\u5728\u6570\u7EC4\u4E2D\u641C\u7D22\u7684\u6587\u672C","The index of the last variable that equals to a specific number in an array.":"\u5728\u6570\u7EC4\u4E2D\u7B49\u4E8E\u7279\u5B9A\u6570\u5B57\u7684\u6700\u540E\u4E00\u4E2A\u53D8\u91CF\u7684\u7D22\u5F15\u3002","Last index of number":"\u6570\u5B57\u7684\u6700\u540E\u4E00\u4E2A\u7D22\u5F15","The last index where _PARAM2_ can be found in _PARAM1_":"\u5728_PARAM1_\u4E2D\u627E\u5230_PARAM2_\u7684\u6700\u540E\u4E00\u4E2A\u7D22\u5F15","The index of the last variable that equals to a specific text in an array.":"\u5728\u6570\u7EC4\u4E2D\u7B49\u4E8E\u7279\u5B9A\u6587\u672C\u7684\u6700\u540E\u4E00\u4E2A\u53D8\u91CF\u7684\u7D22\u5F15\u3002","Last index of text":"\u6587\u672C\u7684\u6700\u540E\u4E00\u4E2A\u7D22\u5F15","Returns a random number of an array of numbers.":"\u8FD4\u56DE\u6570\u5B57\u6570\u7EC4\u7684\u968F\u673A\u6570\u3002","Random number in array":"\u6570\u7EC4\u4E2D\u7684\u968F\u673A\u6570","A randomly picked number of _PARAM1_":"\u968F\u673A\u9009\u62E9\u7684 _PARAM1_ \u4E2A\u6570\u5B57","Array to get a number from":"\u4ECE\u4E2D\u83B7\u53D6\u6570\u5B57\u7684\u6570\u7EC4","a random string of an array of strings.":"\u5B57\u7B26\u4E32\u6570\u7EC4\u7684\u968F\u673A\u5B57\u7B26\u4E32\u3002","Random string in array":"\u6570\u7EC4\u4E2D\u7684\u968F\u673A\u5B57\u7B26\u4E32","A randomly picked string of _PARAM1_":"\u968F\u673A\u9009\u62E9\u7684 _PARAM1_ \u4E2A\u5B57\u7B26\u4E32","Array to get a string from":"\u4ECE\u4E2D\u83B7\u53D6\u5B57\u7B26\u4E32\u7684\u6570\u7EC4","Removes the last array child of an array, and return it as a number.":"\u79FB\u9664\u6570\u7EC4\u7684\u6700\u540E\u4E00\u4E2A\u5B50\u5143\u7D20\uFF0C\u5E76\u5C06\u5176\u4F5C\u4E3A\u6570\u5B57\u8FD4\u56DE\u3002","Get and remove last variable from array (as number)":"\u83B7\u53D6\u5E76\u79FB\u9664\u6570\u7EC4\u4E2D\u7684\u6700\u540E\u4E00\u4E2A\u53D8\u91CF\uFF08\u4F5C\u4E3A\u6570\u5B57\uFF09","Remove last child of _PARAM1_ and store it in _PARAM2_":"\u79FB\u9664 _PARAM1_ \u7684\u6700\u540E\u4E00\u4E2A\u5B50\u5143\u7D20\uFF0C\u5E76\u5B58\u50A8\u5230 _PARAM2_ \u4E2D","Array to pop a child from":"\u4ECE\u4E2D\u5F39\u51FA\u5B50\u5143\u7D20\u7684\u6570\u7EC4","Removes the last array child of an array, and return it as a string.":"\u79FB\u9664\u6570\u7EC4\u7684\u6700\u540E\u4E00\u4E2A\u5B50\u5143\u7D20\uFF0C\u5E76\u5C06\u5176\u4F5C\u4E3A\u5B57\u7B26\u4E32\u8FD4\u56DE\u3002","Pop string from array":"\u4ECE\u6570\u7EC4\u4E2D\u5F39\u51FA\u5B57\u7B26\u4E32","Removes the first array child of an array, and return it as a number.":"\u79FB\u9664\u6570\u7EC4\u7684\u7B2C\u4E00\u4E2A\u5B50\u5143\u7D20\uFF0C\u5E76\u5C06\u5176\u4F5C\u4E3A\u6570\u5B57\u8FD4\u56DE\u3002","Shift number from array":"\u4ECE\u6570\u7EC4\u4E2D\u8F6C\u79FB\u6570\u5B57","Array to shift a child from":"\u6570\u7EC4\u4E2D\u79FB\u9664\u5B50\u5143\u7D20","Removes the first array child of an array, and return it as a string.":"\u79FB\u9664\u6570\u7EC4\u7684\u7B2C\u4E00\u4E2A\u5B50\u5143\u7D20\uFF0C\u5E76\u5C06\u5176\u4F5C\u4E3A\u5B57\u7B26\u4E32\u8FD4\u56DE\u3002","Shift string from array":"\u4ECE\u6570\u7EC4\u4E2D\u79FB\u9664\u5B57\u7B26\u4E32","Checks if an array contains a specific number.":"\u68C0\u67E5\u6570\u7EC4\u662F\u5426\u5305\u542B\u7279\u5B9A\u6570\u5B57\u3002","Array has number":"\u6570\u7EC4\u5305\u542B\u6570\u5B57","Array _PARAM1_ has number _PARAM2_":"\u6570\u7EC4 _PARAM1_ \u5305\u542B\u6570\u5B57 _PARAM2_","The number to search":"\u8981\u641C\u7D22\u7684\u6570\u5B57","Checks if an array contains a specific string.":"\u68C0\u67E5\u6570\u7EC4\u662F\u5426\u5305\u542B\u7279\u5B9A\u5B57\u7B26\u4E32\u3002","Array has string":"\u6570\u7EC4\u5305\u542B\u5B57\u7B26\u4E32","Array _PARAM1_ has string _PARAM2_":"\u6570\u7EC4 _PARAM1_ \u5305\u542B\u5B57\u7B26\u4E32 _PARAM2_","The text to search":"\u8981\u641C\u7D22\u7684\u6587\u672C","Copies a portion of a scene array variable into a new scene array variable.":"\u5C06\u573A\u666F\u6570\u7EC4\u53D8\u91CF\u7684\u4E00\u90E8\u5206\u590D\u5236\u5230\u65B0\u7684\u573A\u666F\u6570\u7EC4\u53D8\u91CF\u4E2D\u3002","Slice an array":"\u5207\u5206\u6570\u7EC4","Slice array _PARAM1_ from indices _PARAM3_ to _PARAM4_ into _PARAM2_":"\u5C06\u6570\u7EC4 _PARAM1_ \u4ECE\u7D22\u5F15 _PARAM3_ \u5230 _PARAM4_ \u5207\u7247\u6210 _PARAM2_","The array to take a slice from":"\u8981\u5207\u7247\u7684\u6570\u7EC4","The array to store the slice into":"\u8981\u5B58\u50A8\u5207\u7247\u7684\u6570\u7EC4","The index to start the slice from":"\u5207\u7247\u5F00\u59CB\u7684\u7D22\u5F15","The index to end the slice at":"\u5207\u7247\u7ED3\u675F\u7684\u7D22\u5F15","Set to 0 to copy all of the array. If you use a negative value, the index will be selected beginning from the end. \nFor example, slicing an array with 5 elements from 0 to -1 would take only elements from indices 0 to 3.":"\u5C06\u5176\u8BBE\u7F6E\u4E3A0\u4EE5\u590D\u5236\u6570\u7EC4\u7684\u6240\u6709\u5185\u5BB9\u3002\u5982\u679C\u4F7F\u7528\u8D1F\u503C\uFF0C\u7D22\u5F15\u5C06\u4ECE\u672B\u5C3E\u5F00\u59CB\u9009\u62E9\u3002 \n\u4F8B\u5982\uFF0C\u4ECE\u7D22\u5F150\u5230-1\u5BF9\u5177\u67095\u4E2A\u5143\u7D20\u7684\u6570\u7EC4\u8FDB\u884C\u5207\u7247\u5C06\u4EC5\u53D6\u7D22\u5F150\u52303\u7684\u5143\u7D20\u3002","Cuts a portion of an array off.":"\u4ECE\u6570\u7EC4\u4E2D\u5207\u9664\u4E00\u90E8\u5206\u3002","Splice an array":"\u526A\u5207\u6570\u7EC4","Remove _PARAM3_ items from array _PARAM1_ starting from index _PARAM2_":"\u4ECE\u7D22\u5F15_PARAM2_\u5F00\u59CB\uFF0C\u4ECE\u6570\u7EC4_PARAM1_\u4E2D\u5220\u9664_PARAM3_\u9879","The array to remove items from":"\u4ECE\u4E2D\u5220\u9664\u9879\u76EE\u7684\u6570\u7EC4","The index to start removing from":"\u5F00\u59CB\u5220\u9664\u7684\u7D22\u5F15","If you use a negative value, the index will be selected beginning from the end.":"\u5982\u679C\u4F7F\u7528\u8D1F\u503C\uFF0C\u7D22\u5F15\u5C06\u4ECE\u672B\u5C3E\u5F00\u59CB\u9009\u62E9\u3002","The amount of elements to remove":"\u8981\u5220\u9664\u7684\u5143\u7D20\u6570\u91CF","Set to 0 to remove until the end of the array.":"\u5C06\u5176\u8BBE\u7F6E\u4E3A0\u4EE5\u5220\u9664\u5230\u6570\u7EC4\u672B\u5C3E\u3002","Combines all elements of 2 scene arrays into one new scene array.":"\u5C062\u4E2A\u573A\u666F\u6570\u7EC4\u7684\u6240\u6709\u5143\u7D20\u5408\u5E76\u4E3A\u4E00\u4E2A\u65B0\u7684\u573A\u666F\u6570\u7EC4\u3002","Combine 2 arrays":"\u7ED3\u54082\u4E2A\u6570\u7EC4","Combine array _PARAM1_ and _PARAM2_ into _PARAM3_":"\u5C06\u6570\u7EC4_PARAM1_\u548C\u6570\u7EC4_PARAM2_\u5408\u5E76\u4E3A_PARAM3_","The first array":"\u7B2C\u4E00\u4E2A\u6570\u7EC4","The second array":"\u7B2C\u4E8C\u4E2A\u6570\u7EC4","The variable to store the new array in":"\u8981\u5C06\u65B0\u6570\u7EC4\u5B58\u50A8\u5728\u7684\u53D8\u91CF","Appends a copy of all variables of one array to another array.":"\u5C06\u4E00\u4E2A\u6570\u7EC4\u7684\u6240\u6709\u53D8\u91CF\u7684\u526F\u672C\u9644\u52A0\u5230\u53E6\u4E00\u4E2A\u6570\u7EC4\u3002","Append all variable to another array":"\u5C06\u6240\u6709\u53D8\u91CF\u9644\u52A0\u5230\u53E6\u4E00\u4E2A\u6570\u7EC4","Append all elements from array _PARAM1_ into _PARAM2_":"\u5C06\u6570\u7EC4_PARAM1_\u7684\u6240\u6709\u5143\u7D20\u9644\u52A0\u5230_PARAM2_","The array to get the variables from":"\u8981\u4ECE\u4E2D\u83B7\u53D6\u53D8\u91CF\u7684\u6570\u7EC4","The variable to append the variables in":"\u8981\u9644\u52A0\u53D8\u91CF\u7684\u53D8\u91CF","Reverses children of an array. The first array child becomes the last, and the last array child becomes the first.":"\u98A0\u5012\u6570\u7EC4\u7684\u5B50\u9879\u3002\u7B2C\u4E00\u4E2A\u6570\u7EC4\u7684\u5B50\u9879\u53D8\u4E3A\u6700\u540E\u4E00\u4E2A\uFF0C\u6700\u540E\u4E00\u4E2A\u6570\u7EC4\u7684\u5B50\u9879\u53D8\u4E3A\u7B2C\u4E00\u4E2A\u3002","Reverse an array":"\u98A0\u5012\u6570\u7EC4","Reverse array _PARAM1_":"\u98A0\u5012\u6570\u7EC4_PARAM1_","The array to reverse":"\u8981\u98A0\u5012\u7684\u6570\u7EC4","Fill an element with a number.":"\u4F7F\u7528\u6570\u5B57\u586B\u5145\u5143\u7D20\u3002","Fill array with number":"\u7528\u6570\u5B57\u586B\u5145\u6570\u7EC4","Fill array _PARAM1_ with _PARAM2_ from index _PARAM3_ to index _PARAM4_":"\u4ECE\u7D22\u5F15_PARAM3_\u586B\u5145\u6570\u7EC4_PARAM1_\u5230\u7D22\u5F15_PARAM4_","The array to fill":"\u586B\u5145\u7684\u6570\u7EC4","The number to fill":"\u586B\u5145\u7684\u6570\u5B57","The index to start filling from":"\u586B\u5145\u5F00\u59CB\u7684\u7D22\u5F15","The index to stop filling at":"\u586B\u5145\u505C\u6B62\u7684\u7D22\u5F15","Set to 0 to fill until the end of the array.":"\u8BBE\u7F6E\u4E3A0\u4EE5\u586B\u5145\u5230\u6570\u7EC4\u7684\u672B\u5C3E\u3002","Shuffles all children of an array.":"\u968F\u673A\u6D17\u724C\u6570\u7EC4\u7684\u6240\u6709\u5B50\u9879\u3002","Shuffle array":"\u968F\u673A\u6D17\u724C\u6570\u7EC4","Shuffle array _PARAM1_":"\u6D17\u724C\u6570\u7EC4 _PARAM1_","The array to shuffle":"\u8981\u968F\u673A\u6D17\u724C\u7684\u6570\u7EC4","Replaces all arrays inside of an array with their children. For example, [[1,2], [3,4]] becomes [1,2,3,4].":"\u7528\u5B83\u4EEC\u7684\u5B50\u9879\u66FF\u6362\u6570\u7EC4\u5185\u7684\u6240\u6709\u6570\u7EC4\u3002\u4F8B\u5982\uFF0C[[1,2]\uFF0C[3,4]]\u53D8\u6210[1,2,3,4]\u3002","Flatten array":"\u5C55\u5E73\u6570\u7EC4","Flatten array _PARAM1_ (Deeply flatten: _PARAM2_)":"\u5C55\u5F00\u6570\u7EC4 _PARAM1_ (\u6DF1\u5EA6\u5C55\u5E73: _PARAM2_)","The array to flatten":"\u8981\u5C55\u5E73\u7684\u6570\u7EC4","Deeply flatten":"\u6DF1\u5EA6\u5C55\u5E73","If yes, will continue flattening until there is no arrays in the array anymore.":"\u79FB\u9664\u6570\u7EC4\u7684\u6700\u540E\u4E00\u4E2A\u5B50\u9879\uFF0C\u5E76\u5C06\u5176\u5B58\u50A8\u5728\u53E6\u4E00\u4E2A\u53D8\u91CF\u4E2D\u3002","Removes the last array child of an array, and stores it in another variable.":"\u4ECE\u6570\u7EC4\u4E2D\u5220\u9664\u6700\u540E\u4E00\u4E2A\u5B50\u9879\uFF0C\u5E76\u5C06\u5176\u5B58\u50A8\u5728\u53E6\u4E00\u4E2A\u53D8\u91CF\u4E2D\u3002","Pop array child":"\u5F39\u51FA\u6570\u7EC4\u5B50\u9879","The array to pop a child from":"\u4ECE\u4E2D\u5F39\u51FA\u5B50\u9879\u7684\u6570\u7EC4","The variable to store the popped value into":"\u5C06\u5F39\u51FA\u7684\u503C\u5B58\u50A8\u5728\u53D8\u91CF\u4E2D","Removes the first array child of an array, and stores it in another variable.":"\u79FB\u9664\u6570\u7EC4\u7684\u7B2C\u4E00\u4E2A\u5B50\u9879\uFF0C\u5E76\u5C06\u5176\u5B58\u50A8\u5728\u53E6\u4E00\u4E2A\u53D8\u91CF\u4E2D\u3002","Shift array child":"\u79FB\u52A8\u6570\u7EC4\u5B50\u9879","Remove first child of _PARAM1_ and store it in _PARAM2_":"\u5220\u9664_PARAM1_\u7684\u7B2C\u4E00\u4E2A\u5B50\u9879\uFF0C\u5E76\u5C06\u5176\u5B58\u50A8\u5728_PARAM2_\u4E2D","The array to shift a child from":"\u4ECE\u4E2D\u79FB\u52A8\u5B50\u9879\u7684\u6570\u7EC4","The variable to store the shifted value into":"\u5C06\u79FB\u52A8\u7684\u503C\u5B58\u50A8\u5728\u53D8\u91CF\u4E2D","Insert a variable at a specific index of an array.":"\u5728\u6570\u7EC4\u7684\u7279\u5B9A\u7D22\u5F15\u5904\u63D2\u5165\u4E00\u4E2A\u53D8\u91CF\u3002","Insert variable at":"\u63D2\u5165\u53D8\u91CF","Insert variable _PARAM3_ in _PARAM1_ at index _PARAM2_":"\u5728\u7D22\u5F15_PARAM2_\u4E2D\u7684_PARAM1_\u4E2D\u63D2\u5165\u53D8\u91CF_PARAM3_","The array to insert a variable in":"\u8981\u63D2\u5165\u53D8\u91CF\u7684\u6570\u7EC4","The index to insert the variable at":"\u8981\u63D2\u5165\u53D8\u91CF\u7684\u7D22\u5F15","The name of the variable to insert":"\u8981\u63D2\u5165\u7684\u53D8\u91CF\u7684\u540D\u79F0","Split a string into an array of strings via a separator.":"\u901A\u8FC7\u5206\u9694\u7B26\u5C06\u5B57\u7B26\u4E32\u62C6\u5206\u4E3A\u5B57\u7B26\u4E32\u6570\u7EC4\u3002","Split string into array":"\u901A\u8FC7\u5206\u9694\u4E32_PARAM2_\u5C06_PARAM1_\u5206\u5272\u6210\u6570\u7EC4","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM3_":"\u8981\u62C6\u5206\u7684\u5B57\u7B26\u4E32","The string to split":"\u8981\u62C6\u5206\u7684\u5B57\u7B26\u4E32","The separator to use to split the string":"\u7528\u4E8E\u62C6\u5206\u5B57\u7B26\u4E32\u7684\u5206\u9694\u7B26","For example, if you have a string \"Hello World\", and the separator is a space (\" \"), the resulting array would be [\"Hello\", \"World\"]. If the separator is an empty string (\"\"), it will make an element per character ([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]).":"\u4F8B\u5982\uFF0C\u5982\u679C\u4F60\u6709\u4E00\u4E2A\u5B57\u7B26\u4E32\"Hello World\"\uFF0C\u5E76\u4E14\u5206\u9694\u7B26\u662F\u4E00\u4E2A\u7A7A\u683C\uFF08\" \"\uFF09\uFF0C\u5219\u7ED3\u679C\u6570\u7EC4\u5C06\u662F[\"Hello\", \"World\"]\u3002\u5982\u679C\u5206\u9694\u7B26\u662F\u4E00\u4E2A\u7A7A\u5B57\u7B26\u4E32\uFF08\"\"\uFF09\uFF0C\u5B83\u5C06\u4F7F\u6BCF\u4E2A\u5B57\u7B26\u6210\u4E3A\u4E00\u4E2A\u5143\u7D20\uFF08[\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]\uFF09\u3002","Array where to store the results":"\u7528\u4E8E\u5B58\u50A8\u7ED3\u679C\u7684\u6570\u7EC4","Returns a string made from all strings in an array.":"\u8FD4\u56DE\u7531\u6570\u7EC4\u4E2D\u6240\u6709\u5B57\u7B26\u4E32\u7EC4\u6210\u7684\u5B57\u7B26\u4E32\u3002","Join all elements of an array together into a string":"\u5C06\u6570\u7EC4\u4E2D\u6240\u6709\u5143\u7D20\u8FDE\u63A5\u6210\u4E00\u4E2A\u5B57\u7B26\u4E32","The name of the array to join into a string":"\u8981\u8FDE\u63A5\u6210\u5B57\u7B26\u4E32\u7684\u6570\u7EC4\u7684\u540D\u79F0","Optional separator text between each element":"\u6BCF\u4E2A\u5143\u7D20\u4E4B\u95F4\u7684\u53EF\u9009\u5206\u9694\u7B26\u6587\u672C","Get the sum of all numbers in an array.":"\u83B7\u53D6\u6570\u7EC4\u4E2D\u6240\u6709\u6570\u5B57\u7684\u603B\u548C\u3002","Sum of array children":"\u6570\u7EC4\u5B50\u9879\u7684\u603B\u548C","The array":"\u6570\u7EC4","Gets the smallest number in an array.":"\u83B7\u53D6\u6570\u7EC4\u4E2D\u6700\u5C0F\u7684\u6570\u5B57\u3002","Smallest value":"\u6700\u5C0F\u503C","Gets the biggest number in an array.":"\u83B7\u53D6\u6570\u7EC4\u4E2D\u6700\u5927\u7684\u6570\u5B57\u3002","Biggest value":"\u6700\u5927\u503C","Gets the average number in an array.":"\u83B7\u53D6\u6570\u7EC4\u4E2D\u6570\u5B57\u7684\u5E73\u5747\u503C\u3002","Average value":"\u5E73\u5747\u503C","Gets the median number in an array.":"\u83B7\u53D6\u6570\u7EC4\u4E2D\u6570\u5B57\u7684\u4E2D\u503C\u3002","Median value":"\u4E2D\u4F4D\u6570","Sort an array of number from smallest to biggest.":"\u5C06\u6570\u5B57\u6570\u7EC4\u4ECE\u5C0F\u5230\u5927\u6392\u5E8F\u3002","Sort an array":"\u5BF9\u6570\u7EC4\u8FDB\u884C\u6392\u5E8F","Sort array _PARAM1_":"\u5BF9_PARAM1_\u8FDB\u884C\u6392\u5E8F","The array to sort":"\u8981\u6392\u5E8F\u7684\u6570\u7EC4","The first index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"_PARAM1_\u7684_PARAM2_\u4E2D\u53EF\u4EE5\u627E\u5230\u7684\u7B2C\u4E00\u4E2A\u7D22\u5F15","The object the variable is from":"\u53D8\u91CF\u6240\u5C5E\u7684\u5BF9\u8C61","The last index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"_PARAM1_\u7684_PARAM2_\u4E2D\u53EF\u4EE5\u627E\u5230\u7684\u6700\u540E\u4E00\u4E2A\u7D22\u5F15","A randomly picked number of _PARAM2_ of _PARAM1_":"_PARAM1_\u7684_PARAM2_\u4E2A\u968F\u673A\u9009\u62E9\u7684\u6570\u5B57","A randomly picked string of _PARAM2_ of _PARAM1_":"_PARAM1_\u7684_PARAM2_\u4E2A\u968F\u673A\u9009\u62E9\u7684\u5B57\u7B26\u4E32","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM3_":"\u5220\u9664_PARAM1_\u7684_PARAM2_\u7684\u6700\u540E\u4E00\u4E2A\u5B50\u9879\uFF0C\u5E76\u5C06\u5176\u5B58\u50A8\u5728_PARAM3_\u4E2D","Array _PARAM2_ of _PARAM1_ has number _PARAM3_":"\u5728\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_\u4E2A\u6709\u6570\u5B57_PARAM3_","Array _PARAM2_ of _PARAM1_ has string _PARAM3_":"\u5728\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_\u4E2A\u6709\u5B57\u7B26\u4E32_PARAM3_","Slice array _PARAM2_ of _PARAM1_ from indices _PARAM5_ to _PARAM6_ into _PARAM4_ of _PARAM3_":"\u5C06\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_\u4E2A\u4ECE\u7B2C_PARAM5_\u5230\u7B2C_PARAM6_\u5207\u7247\u4E3A\u6570\u7EC4_PARAM3_\u7684\u7B2C_PARAM4_","Remove _PARAM4_ items from array _PARAM2_ of _PARAM1_ starting from index _PARAM3_":"\u4ECE\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_\u4ECE\u7D22\u5F15_PARAM3_\u5F00\u59CB\u79FB\u9664_PARAM4_\u4E2A\u9879\u76EE","Combine array _PARAM2_ of _PARAM1_ and _PARAM4_ of _PARAM3_ into _PARAM6_ of _PARAM5_":"\u5C06\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_\u548C\u6570\u7EC4_PARAM3_\u7684\u7B2C_PARAM4_\u5408\u5E76\u4E3A\u6570\u7EC4_PARAM5_\u7684\u7B2C_PARAM6_","Append all elements from array _PARAM2_ of _PARAM1_ into _PARAM4_ of _PARAM3_":"\u5C06\u6570\u7EC4_PARAM1_\u7684\u6240\u6709\u5143\u7D20\u8FFD\u52A0\u5230\u6570\u7EC4_PARAM3_\u7684\u7B2C_PARAM4_","Reverse array _PARAM2_ of _PARAM1_":"\u53CD\u8F6C\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_","Fill array _PARAM2_ of _PARAM1_ with _PARAM3_ from index _PARAM4_ to index _PARAM5_":"\u5728\u6570\u7EC4_PARAM1_\u4E2D\u4ECE\u7D22\u5F15_PARAM4_\u5230\u7D22\u5F15_PARAM5_\u7528_PARAM3_\u586B\u5145\u6570\u7EC4_PARAM2_","Shuffle array _PARAM2_ of _PARAM1_":"\u6253\u4E71\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_","Flatten array _PARAM2_ of _PARAM1_ (Deeply flatten: _PARAM3_)":"\u5C55\u5E73\u6570\u7EC4_PARAM1_\uFF08\u6DF1\u5EA6\u5C55\u5E73\uFF1A_PARAM3_\uFF09","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"\u4ECE\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_\u79FB\u9664\u6700\u540E\u4E00\u4E2A\u5B50\u9879\u5E76\u5B58\u50A8\u5230\u6570\u7EC4_PARAM3_\u7684\u7B2C_PARAM4_","Remove first child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"\u4ECE\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_\u79FB\u9664\u7B2C\u4E00\u4E2A\u5B50\u9879\u5E76\u5B58\u50A8\u5230\u6570\u7EC4_PARAM3_\u7684\u7B2C_PARAM4_","Insert variable _PARAM5_ of _PARAM4_ in _PARAM2_ of _PARAM1_ at index _PARAM3_":"\u5728_PARAM1_\u7684_PARAM2_\u4E2D\u7684\u7D22\u5F15_PARAM3_\u5904\u63D2\u5165_PARAM4_\u7684_PARAM5_\u53D8\u91CF","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM4_ of _PARAM3_":"\u901A\u8FC7\u5206\u9694\u7B26_PARAM2_\u5C06\u5B57\u7B26\u4E32_PARAM1_\u5206\u5272\u6210\u6570\u7EC4_PARAM3_\u7684\u7B2C_PARAM4_","Sort array _PARAM2_ of _PARAM1_":"\u5BF9\u6570\u7EC4_PARAM1_\u7684\u7B2C_PARAM2_\u8FDB\u884C\u6392\u5E8F","Platforms Validation":"\u5E73\u53F0\u9A8C\u8BC1","Checks if the game is currently executed on an allowed platform (for web).":"\u68C0\u67E5\u6E38\u620F\u5F53\u524D\u662F\u5426\u5728\u5141\u8BB8\u7684\u5E73\u53F0\u4E0A\u6267\u884C\uFF08\u7528\u4E8E web\uFF09\u3002","Checks if the game is executed on an authorized platform (preferably, run this only once at beginning of the game).":"\u68C0\u67E5\u6E38\u620F\u662F\u5426\u5728\u6388\u6743\u5E73\u53F0\u4E0A\u6267\u884C\uFF08\u6700\u597D\u4EC5\u5728\u6E38\u620F\u5F00\u59CB\u65F6\u8FD0\u884C\u4E00\u6B21\uFF09\u3002","Is the game running on an authorized platform":"\u6E38\u620F\u662F\u5426\u5728\u6388\u6743\u5E73\u53F0\u4E0A\u8FD0\u884C","The game is running on a authorized platform":"\u6E38\u620F\u5728\u6388\u6743\u5E73\u53F0\u4E0A\u8FD0\u884C","Get the referrer's location (the domain of the website that hosts your game).":"\u83B7\u53D6\u5F15\u8350\u4EBA\u4F4D\u7F6E\uFF08\u6258\u7BA1\u6E38\u620F\u7684\u7F51\u7AD9\u7684\u57DF\u540D\uFF09\u3002","Get referrer location":"\u83B7\u53D6\u5F15\u8350\u4EBA\u4F4D\u7F6E","Adds a new valid platform (domain name where the game is expected to be played, for example, gd.games).":"\u6DFB\u52A0\u65B0\u7684\u6709\u6548\u5E73\u53F0\uFF08\u6E38\u620F\u9884\u671F\u64AD\u653E\u7684\u57DF\u540D\uFF0C\u4F8B\u5982\uFF0Cgd.games\uFF09\u3002","Add a valid platform":"\u6DFB\u52A0\u6709\u6548\u5E73\u53F0","Add _PARAM1_ as valid platform":"\u6DFB\u52A0_PARAM1_\u4F5C\u4E3A\u6709\u6548\u5E73\u53F0","Domain name (e.g : gd.games)":"\u57DF\u540D\uFF08\u4F8B\u5982\uFF1Agd.games\uFF09","Check if a domain is contained in the authorized list array.":"\u68C0\u67E5\u57DF\u540D\u662F\u5426\u5305\u542B\u5728\u6388\u6743\u5217\u8868\u6570\u7EC4\u4E2D\u3002","Check if a domain is contained in the authorized list":"\u68C0\u67E5\u57DF\u540D\u662F\u5426\u5305\u542B\u5728\u6388\u6743\u5217\u8868\u4E2D","Check if _PARAM1_ is in the list of authorized platforms":"\u68C0\u67E5_PARAM1_\u662F\u5426\u5728\u6388\u6743\u5E73\u53F0\u5217\u8868\u4E2D","Domain to check":"\u57DF\u540D\u68C0\u67E5","Auto typing animation for text (\"typewriter\" effect)":"\u6587\u672C\u7684\u81EA\u52A8\u6253\u5B57\u52A8\u753B\uFF08\"\u6253\u5B57\u673A\"\u6548\u679C\uFF09","Reveal a text one letter after the other.":"\u4E00\u4E2A\u63A5\u4E00\u4E2A\u5730\u9010\u4E2A\u663E\u793A\u6587\u672C\u3002","User interface":"\u7528\u6237\u754C\u9762","Auto typing text":"\u81EA\u52A8\u6253\u5B57\u6587\u672C","Text capability":"\u6587\u672C\u80FD\u529B","Time between characters":"\u5B57\u7B26\u4E4B\u95F4\u7684\u65F6\u95F4","Detect if a new text character was just displayed":"\u68C0\u6D4B\u65B0\u7684\u6587\u672C\u5B57\u7B26\u662F\u5426\u521A\u521A\u663E\u793A","Is next word wrapped":"\u4E0B\u4E00\u4E2A\u8BCD\u662F\u5426\u6362\u884C","_PARAM0_ next word is wrapped":"_PARAM0_ \u4E0B\u4E00\u4E2A\u8BCD\u5DF2\u6362\u884C","Clear forced line breaks":"\u6E05\u9664\u5F3A\u5236\u6362\u884C","Clear forced line breaks in _PARAM0_":"\u6E05\u9664 _PARAM0_ \u4E2D\u7684\u5F3A\u5236\u6362\u884C","Check if the full text has been typed.":"\u68C0\u67E5\u662F\u5426\u5DF2\u952E\u5165\u5B8C\u6574\u6587\u672C\u3002","Finished typing":"\u5B8C\u6210\u952E\u5165","_PARAM0_ finished typing":"_PARAM0_ \u5B8C\u6210\u952E\u5165","Check if a character has just been typed. Useful for triggering sound effects.":"\u68C0\u67E5\u662F\u5426\u521A\u521A\u952E\u5165\u4E00\u4E2A\u5B57\u7B26\u3002\u7528\u4E8E\u89E6\u53D1\u58F0\u97F3\u6548\u679C\u3002","Has just typed":"\u521A\u521A\u5DF2\u952E\u5165","_PARAM0_ has just typed a character":"_PARAM0_ \u521A\u521A\u5DF2\u952E\u5165\u4E00\u4E2A\u5B57\u7B26","Restart typing from the beginning of text. The autotyping also start automatically when a new text is set for the object.":"\u91CD\u65B0\u952E\u5165\u6587\u672C\u5F00\u5934\u3002\u5F53\u4E3A\u5BF9\u8C61\u8BBE\u7F6E\u65B0\u6587\u672C\u65F6\uFF0C\u81EA\u52A8\u5F00\u59CB autotyping\u3002","Restart typing from the beginning":"\u91CD\u65B0\u4ECE\u5F00\u5934\u952E\u5165","Restart typing from the beginning on _PARAM0_":"\u91CD\u65B0\u4ECE _PARAM0_ \u7684\u5F00\u5934\u952E\u5165","Jump to a specific position in the text. Positions start at \"0\" and increase by one for every character.":"\u8DF3\u8F6C\u5230\u6587\u672C\u4E2D\u7684\u7279\u5B9A\u4F4D\u7F6E\u3002\u4F4D\u7F6E\u4ECE\u201C0\u201D\u5F00\u59CB\uFF0C\u6BCF\u4E2A\u5B57\u7B26\u589E\u52A0\u4E00\u4E2A\u3002","Show Nth first characters":"\u663E\u793A N \u4E2A\u5B57\u7B26","Show _PARAM2_ first characters on _PARAM0_":"\u5728 _PARAM0_ \u4E0A\u663E\u793A\u524D _PARAM2_ \u4E2A\u5B57\u7B26","Character position":"\u5B57\u7B26\u4F4D\u7F6E","Show the full text.":"\u663E\u793A\u5B8C\u6574\u6587\u672C\u3002","Show the full text":"\u663E\u793A\u5B8C\u6574\u6587\u672C","Show the full text on _PARAM0_":"\u5728_PARAM0_\u4E0A\u663E\u793A\u5B8C\u6574\u6587\u672C","the time between characters beign typed.":"\u88AB\u6253\u5B57\u5B57\u7B26\u4E4B\u95F4\u7684\u65F6\u95F4\u3002","the time between characters":"\u5B57\u7B26\u4E4B\u95F4\u7684\u65F6\u95F4","Android back button":"\u5B89\u5353\u540E\u9000\u6309\u94AE","Allow to customize the behavior of the Android back button.":"\u5141\u8BB8\u81EA\u5B9A\u4E49\u5B89\u5353\u540E\u9000\u6309\u94AE\u7684\u884C\u4E3A\u3002","Input":"\u8F93\u5165","Triggers whenever the player presses the back button.":"\u6BCF\u5F53\u73A9\u5BB6\u6309\u4E0B\u8FD4\u56DE\u6309\u94AE\u65F6\u89E6\u53D1\u3002","Back button is pressed":"\u6309\u4E0B\u8FD4\u56DE\u6309\u94AE","This simulates the normal action of the back button. \nThis action will quit the app when in a mobile app, and go back to the previous page when in a web browser.":"\u8FD9\u6A21\u62DF\u4E86\u8FD4\u56DE\u6309\u94AE\u7684\u6B63\u5E38\u64CD\u4F5C\u3002\n\u6B64\u64CD\u4F5C\u5C06\u5728\u79FB\u52A8\u5E94\u7528\u7A0B\u5E8F\u4E2D\u9000\u51FA\u5E94\u7528\u7A0B\u5E8F\uFF0C\u5E76\u5728 Web \u6D4F\u89C8\u5668\u4E2D\u8FD4\u56DE\u5230\u4E0A\u4E00\u9875\u3002","Trigger back button":"\u89E6\u53D1\u8FD4\u56DE\u6309\u94AE","Simulate back button press":"\u6A21\u62DF\u8FD4\u56DE\u6309\u94AE\u6309\u4E0B","Base conversion":"\u57FA\u6570\u8F6C\u6362","Provides conversion expressions for numbers in different bases.":"\u63D0\u4F9B\u4E0D\u540C\u8FDB\u5236\u6570\u5B57\u7684\u8F6C\u6362\u8868\u8FBE\u5F0F\u3002","Advanced":"\u9AD8\u7EA7","Converts a string representing a number in a different base to a decimal number.":"\u5C06\u8868\u793A\u4E0D\u540C\u8FDB\u5236\u7684\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236\u6570\u3002","Convert to decimal":"\u8F6C\u6362\u4E3A\u5341\u8FDB\u5236","String representing a number":"\u8868\u793A\u6570\u5B57\u7684\u5B57\u7B26\u4E32","The base the number in the string is in":"\u5B57\u7B26\u4E32\u4E2D\u6570\u5B57\u7684\u8FDB\u5236","Converts a number to a trsing representing it in another base.":"\u5C06\u6570\u5B57\u8F6C\u6362\u4E3A\u53E6\u4E00\u4E2A\u8FDB\u5236\u4E2D\u8868\u793A\u7684\u5B57\u7B26\u4E32\u3002","Convert to different base":"\u8F6C\u6362\u4E3A\u4E0D\u540C\u7684\u8FDB\u5236","Number to convert":"\u8981\u8F6C\u6362\u7684\u6570\u5B57","The base to convert the number to":"\u8981\u5C06\u6570\u5B57\u8F6C\u6362\u4E3A\u7684\u57FA\u6570","Platformer and top-down remapper":"\u5E73\u53F0\u6E38\u620F\u548C\u9876\u90E8\u5411\u4E0B\u91CD\u6620\u5C04\u5668","Quickly remap keyboard controls.":"\u5FEB\u901F\u91CD\u6620\u5C04\u952E\u76D8\u63A7\u5236\u3002","Remap keyboard controls of the top-down movement.":"\u91CD\u6620\u5C04\u9876\u90E8\u5411\u4E0B\u8FD0\u52A8\u7684\u952E\u76D8\u63A7\u5236\u3002","Top-down keyboard remapper":"\u9876\u90E8\u5411\u4E0B\u952E\u76D8\u91CD\u6620\u5C04\u5668","Up key":"\u4E0A\u6309\u952E","Left key":"\u5DE6\u6309\u952E","Right key":"\u53F3\u6309\u952E","Down key":"\u4E0B\u6309\u952E","Remaps Top-Down behavior controls to a custom control scheme.":"\u5C06\u4E0A/\u4E0B\u884C\u4E3A\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u4E3A\u81EA\u5B9A\u4E49\u63A7\u5236\u65B9\u6848\u3002","Remap Top-Down controls to a custom scheme":"\u5C06\u4E0A/\u4E0B\u884C\u4E3A\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u4E3A\u81EA\u5B9A\u4E49\u65B9\u6848","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_":"\u91CD\u65B0\u6620\u5C04_PARAM0_\u7684\u63A7\u4EF6\uFF1A\u4E0A: _PARAM2_, \u5DE6: _PARAM3_, \u4E0B: _PARAM4_, \u53F3: _PARAM5_","Remaps Top-Down behavior controls to a preset control scheme.":"\u5C06\u4E0A/\u4E0B\u884C\u4E3A\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u4E3A\u9884\u8BBE\u63A7\u5236\u65B9\u6848\u3002","Remap Top-Down controls to a preset":"\u5C06\u4E0A/\u4E0B\u884C\u4E3A\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u4E3A\u9884\u8BBE","Remap controls of _PARAM0_ to preset _PARAM2_":"\u5C06_PARAM0_\u7684\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u5230\u9884\u8BBE_PARAM2_","Preset name":"\u9884\u8BBE\u540D\u79F0","Remap keyboard controls of the platformer character movement.":"\u91CD\u6620\u5C04\u5E73\u53F0\u6E38\u620F\u89D2\u8272\u79FB\u52A8\u7684\u952E\u76D8\u63A7\u5236\u3002","Platformer keyboard mapper":"\u5E73\u53F0\u6E38\u620F\u952E\u76D8\u6620\u5C04\u5668","Jump key":"\u8DF3\u8DC3\u6309\u952E","Remaps Platformer behavior controls to a custom control scheme.":"\u5C06\u5E73\u53F0\u884C\u4E3A\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u4E3A\u81EA\u5B9A\u4E49\u63A7\u5236\u65B9\u6848\u3002","Remap Platformer controls to a custom scheme":"\u5C06\u5E73\u53F0\u884C\u4E3A\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u4E3A\u81EA\u5B9A\u4E49\u65B9\u6848","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_, Jump: _PARAM6_":"\u91CD\u65B0\u6620\u5C04_PARAM0_\u7684\u63A7\u4EF6\uFF1A\u4E0A: _PARAM2_, \u5DE6: _PARAM3_, \u4E0B: _PARAM4_, \u53F3: _PARAM5_, \u8DF3\u8DC3: _PARAM6_","Remaps Platformer behavior controls to a preset control scheme.":"\u5C06\u5E73\u53F0\u884C\u4E3A\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u4E3A\u9884\u8BBE\u63A7\u5236\u65B9\u6848\u3002","Remap Platformer controls to a preset":"\u5C06\u5E73\u53F0\u884C\u4E3A\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u4E3A\u9884\u8BBE","3D Billboard":"3D\u770B\u677F","Rotate 3D objects to appear like 2D sprites.":"\u5C063D\u5BF9\u8C61\u65CB\u8F6C\u4EE5\u5448\u73B02D\u7CBE\u7075\u3002","Visual effect":"\u89C6\u89C9\u6548\u679C","Rotate to always face the camera (only the front face of the cube should be enabled).":"\u59CB\u7EC8\u9762\u5411\u76F8\u673A\u65CB\u8F6C\uFF08\u53EA\u5141\u8BB8\u542F\u7528\u65B9\u5757\u7684\u6B63\u9762\uFF09\u3002","Billboard":"\u5E7F\u544A\u724C","3D capability":"3D capability","Should rotate on X axis":"\u5E94\u8BE5\u56F4\u7ED5X\u8F74\u65CB\u8F6C","Should rotate on Y axis":"\u5E94\u8BE5\u56F4\u7ED5Y\u8F74\u65CB\u8F6C","Should rotate on Z axis":"\u5E94\u8BE5\u56F4\u7ED5Z\u8F74\u65CB\u8F6C","Offset position":"\u504F\u79FB\u4F4D\u7F6E","Rotate the object to the camera. This is also done automatically at the end of the scene events.":"\u5C06\u5BF9\u8C61\u65CB\u8F6C\u5230\u955C\u5934\u3002\u8FD9\u4E5F\u4F1A\u5728\u573A\u666F\u4E8B\u4EF6\u7ED3\u675F\u65F6\u81EA\u52A8\u5B8C\u6210\u3002","Rotate to face the camera":"\u65CB\u8F6C\u4EE5\u9762\u5411\u76F8\u673A","Rotate _PARAM0_ to the camera":"\u5C06_PARAM0_\u65CB\u8F6C\u5230\u76F8\u673A","Check if the object should rotate on X axis.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5E94\u5728X\u8F74\u4E0A\u65CB\u8F6C\u3002","_PARAM0_ should rotate on X axis":"_PARAM0_\u5E94\u5728X\u8F74\u4E0A\u65CB\u8F6C","Change if the object should rotate on X axis.":"\u66F4\u6539\u5BF9\u8C61\u662F\u5426\u5E94\u5728X\u8F74\u4E0A\u65CB\u8F6C\u3002","_PARAM0_ should rotate on X axis: _PARAM2_":"_PARAM0_\u5E94\u5728X\u8F74\u4E0A\u65CB\u8F6C\uFF1A_PARAM2_","ShouldRotateX":"\u5E94\u5728X\u8F74\u4E0A\u65CB\u8F6C","Check if the object should rotate on Y axis.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5E94\u5728Y\u8F74\u4E0A\u65CB\u8F6C\u3002","_PARAM0_ should rotate on Y axis":"_PARAM0_\u5E94\u5728Y\u8F74\u4E0A\u65CB\u8F6C","Change if the object should rotate on Y axis.":"\u66F4\u6539\u5BF9\u8C61\u662F\u5426\u5E94\u5728Y\u8F74\u4E0A\u65CB\u8F6C\u3002","_PARAM0_ should rotate on Y axis: _PARAM2_":"_PARAM0_\u5E94\u5728Y\u8F74\u4E0A\u65CB\u8F6C\uFF1A_PARAM2_","ShouldRotateY":"\u5E94\u5728Y\u8F74\u4E0A\u65CB\u8F6C","Check if the object should rotate on Z axis.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5E94\u5728Z\u8F74\u4E0A\u65CB\u8F6C\u3002","_PARAM0_ should rotate on Z axis":"_PARAM0_\u5E94\u5728Z\u8F74\u4E0A\u65CB\u8F6C","Change if the object should rotate on Z axis.":"\u66F4\u6539\u5BF9\u8C61\u662F\u5426\u5E94\u5728Z\u8F74\u4E0A\u65CB\u8F6C\u3002","_PARAM0_ should rotate on Z axis: _PARAM2_":"_PARAM0_ \u5E94\u8BE5\u7ED5 Z \u8F74\u65CB\u8F6C\uFF1A_PARAM2_","ShouldRotateZ":"\u5E94\u8BE5\u65CB\u8F6C Z \u8F74","Enable texture transparency of the front face.":"\u542F\u7528\u6B63\u9762\u7EB9\u7406\u7684\u900F\u660E\u5EA6\u3002","Enable texture transparency":"\u542F\u7528\u7EB9\u7406\u900F\u660E\u5EA6","Enable texture transparency of _PARAM0_":"\u542F\u7528 _PARAM0_ \u7684\u7EB9\u7406\u900F\u660E\u5EA6","Boids movement":"Boids\u8FD0\u52A8","Simulates flocks movement.":"\u6A21\u62DF\u7FA4\u96C6\u8FD0\u52A8\u3002","Define helper classes JavaScript code.":"\u5B9A\u4E49\u8F85\u52A9\u7C7BJavaScript\u4EE3\u7801\u3002","Define helper classes":"\u5B9A\u4E49\u8F85\u52A9\u7C7B","Define helper classes JavaScript code":"\u5B9A\u4E49\u8F85\u52A9\u7C7BJavaScript\u4EE3\u7801","Move as part of a flock.":"\u4F5C\u4E3A\u4E00\u4E2A\u7FA4\u4F53\u7684\u4E00\u90E8\u5206\u79FB\u52A8\u3002","Boids Movement":"\u9E1F\u7FA4\u8FD0\u52A8","Maximum speed":"\u6700\u5927\u901F\u5EA6","Maximum acceleration":"\u6700\u5927\u52A0\u901F\u5EA6","Rotate object":"\u65CB\u8F6C\u7269\u4F53","Cohesion sight radius":"\u51DD\u805A\u89C6\u89D2\u534A\u5F84","Sight":"\u89C6\u7EBF","Alignement sight radius":"\u5BF9\u51C6\u89C6\u89D2\u534A\u5F84","Separation sight radius":"\u5206\u79BB\u89C6\u89D2\u534A\u5F84","Cohesion decision weight":"\u805A\u5408\u51B3\u7B56\u6743\u91CD","Decision":"\u51B3\u5B9A","Alignment decision weight":"\u5BF9\u9F50\u51B3\u7B56\u6743\u91CD","Separation decision weight":"\u5206\u79BB\u51B3\u7B56\u6743\u91CD","Collision layer":"\u78B0\u649E\u5C42","Intend to move in a given direction.":"\u6253\u7B97\u671D\u7740\u7ED9\u5B9A\u65B9\u5411\u79FB\u52A8\u3002","Move in a direction":"\u671D\u4E00\u4E2A\u65B9\u5411\u79FB\u52A8","_PARAM0_ intent to move in the direction _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ \u6253\u7B97\u671D _PARAM2_ \u65B9\u5411\u79FB\u52A8\uFF1B_PARAM3_\uFF08\u51B3\u7B56\u6743\u91CD\uFF1A_PARAM4_\uFF09","Direction X":"\u65B9\u5411 X","Direction Y":"\u65B9\u5411 Y","Decision weight":"\u51B3\u7B56\u6743\u91CD","Intend to move toward a position.":"\u6253\u7B97\u671D\u7740\u4E00\u4E2A\u4F4D\u7F6E\u79FB\u52A8\u3002","Move toward a position":"\u671D\u4E00\u4E2A\u4F4D\u7F6E\u79FB\u52A8","_PARAM0_ intend to move toward _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ \u6253\u7B97\u671D _PARAM2_ \u4F4D\u7F6E\u79FB\u52A8\uFF1B_PARAM3_\uFF08\u51B3\u7B56\u6743\u91CD\uFF1A_PARAM4_\uFF09","Target X":"\u76EE\u6807X","Target Y":"\u76EE\u6807 Y","Intend to move toward an object.":"\u6253\u7B97\u671D\u4E00\u4E2A\u5BF9\u8C61\u79FB\u52A8\u3002","Move toward an object":"\u671D\u4E00\u4E2A\u5BF9\u8C61\u79FB\u52A8","_PARAM0_ intend to move toward _PARAM2_ (decision weight: _PARAM3_)":"_PARAM0_ \u6253\u7B97\u671D _PARAM2_ \u79FB\u52A8\uFF08\u51B3\u7B56\u6743\u91CD\uFF1A_PARAM3_\uFF09","Targeted object":"\u76EE\u6807\u5BF9\u8C61","Intend to avoid an area with a given center and radius.":"\u6253\u7B97\u907F\u5F00\u7ED9\u5B9A\u4E2D\u5FC3\u548C\u534A\u5F84\u7684\u533A\u57DF\u3002","Avoid a position":"\u907F\u5F00\u4E00\u4E2A\u4F4D\u7F6E","_PARAM0_ intend to avoid a radius of _PARAM4_ around _PARAM2_; _PARAM3_ (decision weight: _PARAM5_)":"_PARAM0_ \u6253\u7B97\u907F\u5F00 _PARAM2_ \u5468\u56F4\u7684 _PARAM4_ \u534A\u5F84\u533A\u57DF\uFF1B_PARAM3_ (\u51B3\u7B56\u6743\u91CD: _PARAM5_)","Center X":"\u4E2D\u5FC3 X","Center Y":"\u4E2D\u5FC3 Y","Radius":"\u534A\u5F84","Intend to avoid an area from an object center and a given radius.":"\u6253\u7B97\u907F\u5F00\u4E00\u4E2A\u5BF9\u8C61\u4E2D\u5FC3\u548C\u7ED9\u5B9A\u534A\u5F84\u7684\u533A\u57DF\u3002","Avoid an object":"\u907F\u5F00\u4E00\u4E2A\u5BF9\u8C61","_PARAM0_ intend to avoid a radius of _PARAM3_ around _PARAM2_ (decision weight: _PARAM4_)":"_PARAM0_ \u6253\u7B97\u907F\u5F00 _PARAM2_ \u5468\u56F4 _PARAM3_ \u534A\u5F84\u7684\u533A\u57DF\uFF08\u51B3\u7B56\u6743\u91CD\uFF1A_PARAM4_\uFF09","Avoided object":"\u907F\u5F00\u7684\u5BF9\u8C61","Return the current speed.":"\u8FD4\u56DE\u5F53\u524D\u901F\u5EA6\u3002","Speed":"\u901F\u5EA6","Return the current horizontal speed.":"\u8FD4\u56DE\u5F53\u524D\u6C34\u5E73\u901F\u5EA6\u3002","Velocity X":"\u901F\u5EA6 X","Return the current vertical speed.":"\u8FD4\u56DE\u5F53\u524D\u5782\u76F4\u901F\u5EA6\u3002","Velocity Y":"\u901F\u5EA6 Y","Check if the object is rotated while moving on its path.":"\u68C0\u67E5\u5BF9\u8C61\u5728\u8DEF\u5F84\u4E0A\u79FB\u52A8\u65F6\u662F\u5426\u65CB\u8F6C\u3002","Object Rotated":"\u5BF9\u8C61\u5DF2\u65CB\u8F6C","_PARAM0_ is rotated when moving":"_PARAM0_\u5728\u79FB\u52A8\u65F6\u65CB\u8F6C","Return the maximum speed.":"\u8FD4\u56DE\u6700\u5927\u901F\u5EA6\u3002","Change the maximum speed of the object.":"\u66F4\u6539\u5BF9\u8C61\u7684\u6700\u5927\u901F\u5EA6\u3002","Change the maximum speed of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6700\u5927\u901F\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Max Speed":"\u6700\u5927\u901F\u5EA6","Return the maximum acceleration.":"\u8FD4\u56DE\u6700\u5927\u52A0\u901F\u5EA6\u3002","Change the maximum acceleration of the object.":"\u66F4\u6539\u5BF9\u8C61\u7684\u6700\u5927\u52A0\u901F\u5EA6\u3002","Change the maximum acceleration of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6700\u5927\u52A0\u901F\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Steering Force":"\u8F6C\u5411\u529B","Return the cohesion sight radius.":"\u8FD4\u56DE\u5185\u805A\u89C6\u8DDD\u3002","Change the cohesion sight radius.":"\u66F4\u6539\u5185\u805A\u89C6\u8DDD\u3002","Change the cohesion sight radius of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5185\u805A\u89C6\u534A\u5F84\u66F4\u6539\u4E3A_PARAM2_","Value":"\u6570\u503C","Return the alignment sight radius.":"\u8FD4\u56DE\u5BF9\u9F50\u89C6\u8DDD\u3002","Alignment sight radius":"\u5BF9\u9F50\u89C6\u8DDD","Change the alignment sight radius of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5BF9\u9F50\u89C6\u534A\u5F84\u66F4\u6539\u4E3A_PARAM2_","Return the separation sight radius.":"\u8FD4\u56DE\u5206\u79BB\u89C6\u8DDD\u3002","Change the separation sight radius of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5206\u79BB\u89C6\u534A\u5F84\u66F4\u6539\u4E3A_PARAM2_","Return which weight the cohesion takes in the chosen direction.":"\u8FD4\u56DE\u5185\u805A\u4EE5\u6240\u9009\u65B9\u5411\u3002","Cohesion weight":"\u5185\u805A\u6743\u91CD","Change the weight the cohesion takes in the chosen direction.":"\u66F4\u6539\u5185\u805A\u5728\u6240\u9009\u65B9\u5411\u7684\u6743\u91CD\u3002","Change the cohesion weight of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5185\u805A\u6743\u91CD\u66F4\u6539\u4E3A_PARAM2_","Return which weight the alignment takes in the chosen direction.":"\u8FD4\u56DE\u5BF9\u9F50\u5728\u6240\u9009\u65B9\u5411\u7684\u6743\u91CD\u3002","Alignment weight":"\u5BF9\u9F50\u6743\u91CD","Change the weight the alignment takes in the chosen direction.":"\u66F4\u6539\u5BF9\u9F50\u5728\u6240\u9009\u65B9\u5411\u7684\u6743\u91CD\u3002","Change the alignment weight of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5BF9\u9F50\u6743\u91CD\u66F4\u6539\u4E3A_PARAM2_","Return which weight the separation takes in the chosen direction.":"\u8FD4\u56DE\u5206\u79BB\u5728\u6240\u9009\u65B9\u5411\u7684\u6743\u91CD\u3002","Separation weight":"\u5206\u79BB\u6743\u91CD","Change the weight the separation takes in the chosen direction.":"\u66F4\u6539\u5206\u79BB\u5728\u6240\u9009\u65B9\u5411\u7684\u6743\u91CD\u3002","Change the separation weight of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5206\u79BB\u6743\u91CD\u66F4\u6539\u4E3A_PARAM2_","Boomerang":"\u98DE\u65CB\u9556","Throw an object that returns to the thrower like a boomerang.":"\u6295\u63B7\u4E00\u4E2A\u5BF9\u8C61\uFF0C\u50CF\u98DE\u65CB\u9556\u4E00\u6837\u8FD4\u56DE\u7ED9\u6295\u63B7\u8005\u3002","Throw speed (pixels per second)":"\u629B\u51FA\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09","Time before changing directions (seconds)":"\u6539\u53D8\u65B9\u5411\u4E4B\u524D\u7684\u65F6\u95F4\uFF08\u79D2\uFF09","Rotation (degrees per second)":"\u65CB\u8F6C\uFF08\u6BCF\u79D2\u5EA6\u6570\uFF09","Thrower X position":"\u6295\u63B7\u8005X\u4F4D\u7F6E","Thrower Y position":"\u6295\u63B7\u8005Y\u4F4D\u7F6E","Boomerang is returning":"\u56DE\u65CB\u9556\u6B63\u5728\u8FD4\u56DE","Throw boomerang toward an angle.":"\u5411\u89D2\u5EA6\u6254\u98DE\u9556\u3002","Throw boomerang toward an angle":"\u671D\u89D2\u5EA6\u6254\u98DE\u9556","Throw boomerang _PARAM0_ toward angle _PARAM2_ degrees, speed of _PARAM3_ pixels per second, rotating _PARAM5_ degrees per second, and send boomerang back after of _PARAM4_ seconds":"\u5411\u89D2\u5EA6_PARAM2_\u5EA6\u6254\u98DE\u9556_PARAM0_\uFF0C\u901F\u5EA6\u4E3A_PARAM3_\u50CF\u7D20\u6BCF\u79D2\uFF0C\u65CB\u8F6C\u901F\u5EA6\u4E3A_PARAM5_\u5EA6\u6BCF\u79D2\uFF0C_PARAM4_\u79D2\u540E\u5C06\u98DE\u9556\u53D1\u9001\u56DE","Angle (degrees)":"\u89D2\u5EA6\uFF08\u5EA6\uFF09","Throw boomerang toward a position.":"\u5411\u67D0\u4E2A\u4F4D\u7F6E\u6254\u98CE\u9556\u3002","Throw boomerang toward a position":"\u5411\u67D0\u4E2A\u4F4D\u7F6E\u6254\u98CE\u9556","Throw boomerang _PARAM0_ toward _PARAM2_;_PARAM3_ at a speed of _PARAM4_ pixels per second, rotating _PARAM6_ degrees per second, and send boomerang back after of _PARAM5_ seconds":"\u5411_PARAM0_\u6254\u98CE\u9556\uFF0C\u671D\u7740_PARAM2_;_PARAM3_\uFF0C\u901F\u5EA6\u4E3A_PARAM4_\u50CF\u7D20\u6BCF\u79D2\uFF0C\u65CB\u8F6C\u901F\u5EA6\u4E3A_PARAM6_\u5EA6\u6BCF\u79D2\uFF0C\u5E76\u5728_PARAM5_\u79D2\u540E\u53D1\u9001\u98CE\u9556\u56DE\u6765\u3002","Target X position":"\u76EE\u6807X\u4F4D\u7F6E","Target Y position":"\u76EE\u6807Y\u4F4D\u7F6E","Send boomerang back to thrower.":"\u5C06\u98CE\u9556\u53D1\u56DE\u7ED9\u6295\u63B7\u8005\u3002","Send boomerang back to thrower":"\u5C06\u98CE\u9556\u53D1\u56DE\u7ED9\u6295\u63B7\u8005","Send boomerang _PARAM0_ back to thrower":"\u5C06\u98CE\u9556_PARAM0_\u53D1\u56DE\u7ED9\u6295\u63B7\u8005","Set amount of time before boomerang changes directions (seconds).":"\u5728\u98CE\u9556\u6539\u53D8\u65B9\u5411\u4E4B\u524D\u7684\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","Set amount of time before boomerang changes directions":"\u8BBE\u7F6E\u98CE\u9556\u6539\u53D8\u65B9\u5411\u4E4B\u524D\u7684\u65F6\u95F4","Set amount of time before _PARAM0_ changes directions to _PARAM2_ (seconds)":"\u5728_PARAM0_\u6539\u53D8\u65B9\u5411\u4E3A_PARAM2_\u4E4B\u524D\u7684\u65F6\u95F4\uFF08\u79D2\uFF09","Time before boomerange changes direction (seconds)":"\u98CE\u9556\u6539\u53D8\u65B9\u5411\u4E4B\u524D\u7684\u65F6\u95F4\uFF08\u79D2\uFF09","Track position of boomerang thrower.":"\u8FFD\u8E2A\u98CE\u9556\u6295\u63B7\u8005\u7684\u4F4D\u7F6E\u3002","Track position of boomerang thrower":"\u8FFD\u8E2A\u98CE\u9556\u6295\u63B7\u8005\u7684\u4F4D\u7F6E","Track position of thrower _PARAM2_ who threw boomerang _PARAM0_":"\u8FFD\u8E2A\u6295\u63B7\u4E86\u98CE\u9556_PARAM0_\u7684\u6295\u63B7\u8005_PARAM2_\u7684\u4F4D\u7F6E","Thrower":"\u6295\u63B7\u8005","Boomerang is returning to thrower.":"\u98CE\u9556\u6B63\u5728\u8FD4\u56DE\u7ED9\u6295\u63B7\u8005\u3002","Boomerang is returning to thrower":"\u98CE\u9556\u6B63\u5728\u8FD4\u56DE\u7ED9\u6295\u63B7\u8005","Boomerang _PARAM0_ is returning to thrower":"\u98CE\u9556_PARAM0_\u6B63\u5728\u8FD4\u56DE\u7ED9\u6295\u63B7\u8005","Bounce (using forces)":"\u5F39\u8DF3\uFF08\u4F7F\u7528\u529B\uFF09","Bounce the object off another object it just touched.":"\u5C06\u7269\u4F53\u4ECE\u521A\u89E6\u6478\u5230\u7684\u53E6\u4E00\u4E2A\u7269\u4F53\u4E0A\u5F39\u5F00\u3002","Provides an action to make the object bounce from another object it just touched. Add a permanent force to the object and, when in collision with another one, use the action to make it bounce realistically.":"\u63D0\u4F9B\u4E00\u79CD\u64CD\u4F5C\uFF0C\u4F7F\u5BF9\u8C61\u4ECE\u521A\u521A\u89E6\u78B0\u7684\u53E6\u4E00\u4E2A\u5BF9\u8C61\u4E0A\u5F39\u56DE\u3002\u5411\u5BF9\u8C61\u6DFB\u52A0\u6C38\u4E45\u529B\uFF0C\u5F53\u4E0E\u53E6\u4E00\u4E2A\u5BF9\u8C61\u78B0\u649E\u65F6\uFF0C\u4F7F\u7528\u64CD\u4F5C\u4F7F\u5B83\u5B9E\u73B0\u903C\u771F\u7684\u5F39\u8DF3\u3002","Bounce":"\u5F39\u8DF3","Bounce count":"\u5F39\u8DF3\u6B21\u6570","Number of times this object has bounced off another object":"\u8FD9\u4E2A\u5BF9\u8C61\u5F39\u5F00\u53E6\u4E00\u4E2A\u5BF9\u8C61\u7684\u6B21\u6570","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"\u5C06\u5BF9\u8C61\u5411\u5176\u5F53\u524D\u53D1\u751F\u78B0\u649E\u7684\u5BF9\u8C61\u5F39\u5F00\uFF0C\u6839\u636E\u5BF9\u8C61\u65BD\u52A0\u7684\u89D2\u5EA6\u548C\u901F\u5EA6\u7684\u529B\u91CF\u8FDB\u884C\u5F39\u5F00\u3002\n\u5728\u542F\u52A8\u6B64\u64CD\u4F5C\u4E4B\u524D\uFF0C\u8BF7\u786E\u4FDD\u5728\u4E24\u4E2A\u5BF9\u8C61\u4E4B\u95F4\u8FDB\u884C\u78B0\u649E\u6D4B\u8BD5\u3002\u6240\u6709\u7684\u529B\u5C06\u4F1A\u88AB\u4ECE\u5BF9\u8C61\u4E2D\u79FB\u9664\uFF0C\u5E76\u4E14\u5C06\u6DFB\u52A0\u4E00\u4E2A\u65B0\u7684\u6C38\u4E45\u529B\u6765\u4F7F\u5BF9\u8C61\u5F39\u5F00\u3002","Bounce off another object":"\u5411\u53E6\u4E00\u4E2A\u5BF9\u8C61\u5F39\u5F00","Bounce _PARAM0_ off _PARAM2_":"\u5C06_PARAM0_\u4ECE_PARAM2_\u5F39\u5F00","The objects to bounce on":"\u8981\u5F39\u5F00\u7684\u5BF9\u8C61","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be calculated *to go toward the specified angle (the \"normal angle\")*. For example, if the object is arriving at this exact angle, it will bounce in the opposite direction.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"\u5C06\u5BF9\u8C61\u5411\u5176\u5F53\u524D\u53D1\u751F\u78B0\u649E\u7684\u5BF9\u8C61\u5F39\u5F00\uFF0C\u6839\u636E\u5BF9\u8C61\u65BD\u52A0\u7684\u89D2\u5EA6\u548C\u901F\u5EA6\u7684\u529B\u91CF\u8FDB\u884C\u5F39\u5F00\u3002\n\u5F39\u5F00\u5C06\u59CB\u7EC8*\u6839\u636E\u6307\u5B9A\u7684\u89D2\u5EA6\uFF08\u201C\u6CD5\u7EBF\u89D2\u5EA6\u201D\uFF09*\u8FDB\u884C\u8BA1\u7B97\u3002 \u4F8B\u5982\uFF0C\u5982\u679C\u5BF9\u8C61\u6B63\u597D\u4EE5\u8FD9\u4E2A\u89D2\u5EA6\u5230\u8FBE\uFF0C\u5219\u5C06\u671D\u76F8\u53CD\u65B9\u5411\u5F39\u5F00\u3002\n\u5728\u542F\u52A8\u6B64\u64CD\u4F5C\u4E4B\u524D\uFF0C\u8BF7\u786E\u4FDD\u5728\u4E24\u4E2A\u5BF9\u8C61\u4E4B\u95F4\u8FDB\u884C\u78B0\u649E\u6D4B\u8BD5\u3002\u6240\u6709\u7684\u529B\u5C06\u4F1A\u88AB\u4ECE\u5BF9\u8C61\u4E2D\u79FB\u9664\uFF0C\u5E76\u4E14\u5C06\u6DFB\u52A0\u4E00\u4E2A\u65B0\u7684\u6C38\u4E45\u529B\u6765\u4F7F\u5BF9\u8C61\u5F39\u5F00\u3002","Bounce off another object toward a specified angle":"\u5411\u6307\u5B9A\u89D2\u5EA6\u5F39\u5F00\u53E6\u4E00\u4E2A\u5BF9\u8C61","Bounce _PARAM0_ off _PARAM2_ assuming a normal angle of _PARAM3_":"\u4EE5\u6B63\u5E38\u89D2\u5EA6 _PARAM3_ \u5F39\u8DF3 _PARAM0_ \u4ECE _PARAM2_ \u4E0A","The \"normal\" angle, in degrees, to bounce against":"\u201C\u6B63\u5E38\u201D\u89D2\u5EA6\uFF0C\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF0C\u5F39\u51FA\u53CD\u5F39","This can be understood at the direction that the bounce must go toward.":"\u8FD9\u53EF\u4EE5\u7406\u89E3\u4E3A\u5F39\u8DF3\u5FC5\u987B\u53BB\u7684\u65B9\u5411\u3002","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be vertical, like if the object is *colliding a perfectly horizontal obstacle* (like the top/bottom of the screen in a pong game). For example, if the object is arriving with an angle of exactly 90 degrees, it will bounce in the opposite direction: -90 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"\u6839\u636E\u7269\u4F53\u4E0A\u65BD\u52A0\u7684\u89D2\u5EA6\u548C\u901F\u5EA6\uFF0C\u4F7F\u8BE5\u7269\u4F53\u5F39\u5F00\u4E0E\u5176\u5F53\u524D\u53D1\u751F\u78B0\u649E\u7684\u53E6\u4E00\u4E2A\u7269\u4F53\u3002\n\u5F39\u8DF3\u5C06\u59CB\u7EC8\u662F\u5782\u76F4\u7684\uFF0C\u5C31\u50CF\u7269\u4F53\u6B63\u5728*\u4E0E\u5B8C\u5168\u6C34\u5E73\u7684\u969C\u788D\u7269*\uFF08\u5982\u4E52\u4E53\u7403\u6E38\u620F\u4E2D\u7684\u9876\u90E8/\u5E95\u90E8\uFF09\u53D1\u751F\u78B0\u649E\u3002\u4F8B\u5982\uFF0C\u5982\u679C\u7269\u4F53\u4EE5\u6B63\u597D90\u5EA6\u7684\u89D2\u5EA6\u5230\u8FBE\uFF0C\u5B83\u5C06\u5411\u76F8\u53CD\u65B9\u5411\u5F39\u56DE\uFF1A-90\u5EA6\u3002\n\u786E\u4FDD\u5728\u542F\u52A8\u6B64\u64CD\u4F5C\u4E4B\u524D\u6D4B\u8BD5\u4E24\u4E2A\u7269\u4F53\u4E4B\u95F4\u7684\u78B0\u649E\u3002\u6240\u6709\u529B\u90FD\u5C06\u4ECE\u7269\u4F53\u4E0A\u79FB\u9664\uFF0C\u7136\u540E\u5C06\u6DFB\u52A0\u65B0\u7684\u6C38\u4E45\u529B\u4EE5\u4F7F\u7269\u4F53\u5F39\u5F00\u3002","Bounce vertically":"\u5782\u76F4\u5F39\u8DF3","Bounce _PARAM0_ off _PARAM2_ - always vertically":"\u4EE5\u5782\u76F4\u65B9\u5411\u5F39\u8DF3 _PARAM0_ \u4ECE _PARAM2_ \u4E0A","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be horizontal, like if the object is *colliding a perfectly vertical obstacle* (like paddles in a pong game). For example, if the object is arriving with an angle of exactly 0 degrees, it will bounce in the opposite direction: 180 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"\u6839\u636E\u7269\u4F53\u4E0A\u65BD\u52A0\u7684\u89D2\u5EA6\u548C\u901F\u5EA6\uFF0C\u4F7F\u8BE5\u7269\u4F53\u5F39\u5F00\u4E0E\u5176\u5F53\u524D\u53D1\u751F\u78B0\u649E\u7684\u53E6\u4E00\u4E2A\u7269\u4F53\u3002\n\u5F39\u8DF3\u5C06\u59CB\u7EC8\u662F\u6C34\u5E73\u7684\uFF0C\u5C31\u50CF\u7269\u4F53\u6B63\u5728*\u4E0E\u5B8C\u5168\u5782\u76F4\u7684\u969C\u788D\u7269*\uFF08\u5982\u4E52\u4E53\u7403\u6E38\u620F\u4E2D\u7684\u7403\u62CD\uFF09\u53D1\u751F\u78B0\u649E\u3002\u4F8B\u5982\uFF0C\u5982\u679C\u7269\u4F53\u4EE5\u6B63\u597D0\u5EA6\u7684\u89D2\u5EA6\u5230\u8FBE\uFF0C\u5B83\u5C06\u5411\u76F8\u53CD\u65B9\u5411\u5F39\u56DE\uFF1A180\u5EA6\u3002\n\u786E\u4FDD\u5728\u542F\u52A8\u6B64\u64CD\u4F5C\u4E4B\u524D\u6D4B\u8BD5\u4E24\u4E2A\u7269\u4F53\u4E4B\u95F4\u7684\u78B0\u649E\u3002\u6240\u6709\u529B\u90FD\u5C06\u4ECE\u7269\u4F53\u4E0A\u79FB\u9664\uFF0C\u7136\u540E\u5C06\u6DFB\u52A0\u65B0\u7684\u6C38\u4E45\u529B\u4EE5\u4F7F\u7269\u4F53\u5F39\u5F00\u3002","Bounce horizontally":"\u6C34\u5E73\u5F39\u8DF3","Bounce _PARAM0_ off _PARAM2_ - always horizontally":"\u4EE5\u6C34\u5E73\u65B9\u5411\u5F39\u8DF3 _PARAM0_ \u4ECE _PARAM2_ \u4E0A","the number of times this object has bounced off another object.":"\u8BE5\u7269\u4F53\u5F39\u8D77\u53E6\u4E00\u4E2A\u7269\u4F53\u7684\u6B21\u6570\u3002","the bounce count":"\u5F39\u8DF3\u8BA1\u6570","Button states and effects":"\u6309\u94AE\u72B6\u6001\u548C\u6548\u679C","Use any object as a button and change appearance according to user interactions.":"\u4F7F\u7528\u4EFB\u4F55\u5BF9\u8C61\u4F5C\u4E3A\u6309\u94AE\uFF0C\u5E76\u6839\u636E\u7528\u6237\u4EA4\u4E92\u6539\u53D8\u5916\u89C2\u3002","Use objects as buttons.":"\u5C06\u5BF9\u8C61\u7528\u4F5C\u6309\u94AE\u3002","Button states":"\u6309\u94AE\u72B6\u6001","Should check hovering":"\u5E94\u68C0\u67E5\u60AC\u505C","State":"\u72B6\u6001","Touch id":"\u89E6\u6478 ID","Touch is inside":"\u89E6\u6478\u5728\u5185\u90E8","Mouse is inside":"\u9F20\u6807\u5728\u5185\u90E8","Reset the state of the button.":"\u91CD\u7F6E\u6309\u94AE\u7684\u72B6\u6001\u3002","Reset state":"\u91CD\u8BBE\u72B6\u6001","Reset the button state of _PARAM0_":"\u91CD\u7F6E _PARAM0_ \u7684\u6309\u94AE\u72B6\u6001","Check if the button is not used.":"\u68C0\u67E5\u6309\u94AE\u662F\u5426\u672A\u4F7F\u7528\u3002","Is idle":"\u7A7A\u95F2","_PARAM0_ is idle":"_PARAM0_ \u5904\u4E8E\u7A7A\u95F2\u72B6\u6001","Check if the button was just clicked.":"\u68C0\u67E5\u6309\u94AE\u662F\u5426\u521A\u88AB\u70B9\u51FB\u3002","Is clicked":"\u5DF2\u70B9\u51FB","_PARAM0_ is clicked":"_PARAM0_\u88AB\u5355\u51FB","Check if the cursor is hovered over the button.":"\u68C0\u67E5\u5149\u6807\u662F\u5426\u60AC\u505C\u5728\u6309\u94AE\u4E0A\u3002","Is hovered":"\u5DF2\u60AC\u505C","_PARAM0_ is hovered":"_PARAM0_\u88AB\u60AC\u505C","Check if the button is either hovered or pressed but not hovered.":"\u68C0\u67E5\u6309\u94AE\u662F\u5426\u60AC\u505C\u6216\u88AB\u6309\u4E0B\u4F46\u672A\u60AC\u505C\u3002","Is focused":"\u5DF2\u805A\u7126","_PARAM0_ is focused":"_PARAM0_\u5DF2\u805A\u7126","Check if the button is currently being pressed with mouse or touch.":"\u68C0\u67E5\u6309\u94AE\u5F53\u524D\u662F\u5426\u4F7F\u7528\u9F20\u6807\u6216\u89E6\u6478\u88AB\u6309\u4E0B\u3002","Is pressed":"\u5DF2\u6309\u4E0B","_PARAM0_ is pressed":"_PARAM0_\u5DF2\u6309\u4E0B","Check if the button is currently being pressed outside with mouse or touch.":"\u68C0\u67E5\u6309\u94AE\u5F53\u524D\u662F\u5426\u4F7F\u7528\u9F20\u6807\u6216\u89E6\u6478\u88AB\u6309\u4E0B\u5728\u5916\u9762\u3002","Is held outside":"\u5728\u5916\u9762\u4FDD\u6301","_PARAM0_ is held outside":"_PARAM0_\u5728\u5916\u9762\u4FDD\u6301","the touch id that is using the button or 0 if none.":"\u6B63\u5728\u4F7F\u7528\u6309\u94AE\u7684\u89E6\u6478ID\uFF0C\u5982\u679C\u6CA1\u6709\u5219\u4E3A0\u3002","the touch id":"\u89E6\u6478ID","Enable effects on buttons based on their state.":"\u6839\u636E\u5B83\u4EEC\u7684\u72B6\u6001\u5728\u6309\u94AE\u4E0A\u542F\u7528\u6548\u679C\u3002","Button object effects":"\u6309\u94AE\u5BF9\u8C61\u6548\u679C","Effect capability":"\u6548\u679C\u80FD\u529B","Idle state effect":"\u5F85\u673A\u72B6\u6001\u6548\u679C","Effects":"\u6548\u679C","Focused state effect":"\u805A\u7126\u72B6\u6001\u6548\u679C","The state is Focused when the button is hovered or held outside.":"\u5F53\u6309\u94AE\u5728\u5916\u90E8\u60AC\u505C\u6216\u6309\u4F4F\u65F6\uFF0C\u72B6\u6001\u4E3A\u805A\u7126\u3002","Pressed state effect":"\u6309\u4E0B\u72B6\u6001\u6548\u679C","the idle state effect of the object.":"\u5BF9\u8C61\u7684\u7A7A\u95F2\u72B6\u6001\u6548\u679C\u3002","the idle state effect":"\u7A7A\u95F2\u72B6\u6001\u6548\u679C","the focused state effect of the object. The state is Focused when the button is hovered or held outside.":"\u5BF9\u8C61\u7684\u805A\u7126\u72B6\u6001\u6548\u679C\u3002\u5F53\u6309\u94AE\u88AB\u60AC\u505C\u6216\u5728\u5916\u9762\u4FDD\u6301\u65F6\uFF0C\u72B6\u6001\u4E3A\u805A\u7126\u3002","the focused state effect":"\u805A\u7126\u72B6\u6001\u6548\u679C","the pressed state effect of the object.":"\u5BF9\u8C61\u7684\u6309\u4E0B\u72B6\u6001\u6548\u679C\u3002","the pressed state effect":"\u6309\u4E0B\u72B6\u6001\u7684\u6548\u679C","Change the animation of buttons according to their state.":"\u6839\u636E\u5B83\u4EEC\u7684\u72B6\u6001\u66F4\u6539\u6309\u94AE\u7684\u52A8\u753B\u3002","Button animation":"\u6309\u94AE\u52A8\u753B","Idle state animation name":"\u5F85\u673A\u72B6\u6001\u52A8\u753B\u540D\u79F0","Animation":"\u52A8\u753B","Focused state animation name":"\u805A\u7126\u72B6\u6001\u52A8\u753B\u540D\u79F0","Pressed state animation name":"\u6309\u4E0B\u72B6\u6001\u52A8\u753B\u540D\u79F0","the idle state animation name of the object.":"\u5BF9\u8C61\u7684\u7A7A\u95F2\u72B6\u6001\u52A8\u753B\u540D\u79F0\u3002","the idle state animation name":"\u7A7A\u95F2\u72B6\u6001\u52A8\u753B\u540D\u79F0","the focused state animation name of the object. The state is Focused when the button is hovered or held outside.":"\u5BF9\u8C61\u7684\u7126\u70B9\u72B6\u6001\u52A8\u753B\u540D\u79F0\u3002\u5F53\u6309\u94AE\u60AC\u505C\u6216\u5728\u5916\u90E8\u6309\u4F4F\u65F6\uFF0C\u8BE5\u72B6\u6001\u5904\u4E8E\u7126\u70B9\u72B6\u6001\u3002","the focused state animation name":"\u7126\u70B9\u72B6\u6001\u52A8\u753B\u540D\u79F0","the pressed state animation name of the object.":"\u5BF9\u8C61\u7684\u6309\u4E0B\u72B6\u6001\u52A8\u753B\u540D\u79F0\u3002","the pressed state animation name":"\u6309\u4E0B\u72B6\u6001\u52A8\u753B\u540D\u79F0","Smoothly change an effect on buttons according to their state.":"\u6839\u636E\u5B83\u4EEC\u7684\u72B6\u6001\u5728\u6309\u94AE\u4E0A\u5E73\u6ED1\u66F4\u6539\u6548\u679C\u3002","Button object effect tween":"\u6309\u94AE\u5BF9\u8C61\u6548\u679C\u8FC7\u6E21","Effect name":"\u6548\u679C\u540D\u79F0","Effect":"\u6548\u679C","Effect parameter":"\u6548\u679C\u53C2\u6570","The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"\u6548\u679C\u53C2\u6570\u540D\u79F0\u53EF\u5728\u201C\u663E\u793A\u53C2\u6570\u540D\u79F0\u201D\u64CD\u4F5C\u7684\u4E0B\u62C9\u83DC\u5355\u4E2D\u7684\u6548\u679C\u9009\u9879\u5361\u4E2D\u627E\u5230\u3002","Idle effect parameter value":"\u7A7A\u95F2\u6548\u679C\u53C2\u6570\u503C","Focused effect parameter value":"\u7126\u70B9\u6548\u679C\u53C2\u6570\u503C","Pressed effect parameter value":"\u6309\u4E0B\u6548\u679C\u53C2\u6570\u503C","Fade-in easing":"\u6DE1\u5165\u7F13\u52A8","Fade-out easing":"\u6DE1\u51FA\u7F13\u52A8","Fade-in duration":"\u6DE1\u5165\u6301\u7EED\u65F6\u95F4","Fade-out duration":"\u6DE1\u51FA\u6301\u7EED\u65F6\u95F4","Disable the effect in idle state":"\u7981\u7528\u7A7A\u95F2\u72B6\u6001\u4E0B\u7684\u6548\u679C","Time delta":"\u65F6\u95F4\u589E\u91CF","Fade in":"\u6DE1\u5165","_PARAM0_ fade in to _PARAM2_":"_PARAM0_ \u6DE1\u5165\u81F3 _PARAM2_","Fade out":"\u6DE1\u51FA","_PARAM0_ fade out to _PARAM2_":"_PARAM0_ \u6DE1\u51FA\u81F3 _PARAM2_","Play tween":"\u64AD\u653E\u7F13\u52A8\u6548\u679C","Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing":"\u5BF9\u8C61 _PARAM0_ \u7684\u6548\u679C\u5C5E\u6027\u5728 _PARAM2_ \u79D2\u5185\u7F13\u52A8\uFF0C\u5E76\u5E26\u6709 _PARAM3_ \u7F13\u548C\u3002","Duration (in seconds)":"\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","Easing":"\u7F13\u52A8","the effect name of the object.":"\u5BF9\u8C61\u7684\u6548\u679C\u540D\u79F0\u3002","the effect name":"\u6548\u679C\u540D\u79F0","the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"\u5BF9\u8C61\u7684\u6548\u679C\u53C2\u6570\u3002\u6548\u679C\u53C2\u6570\u540D\u79F0\u53EF\u4EE5\u5728\u6548\u679C\u9009\u9879\u5361\u4E2D\u901A\u8FC7\u4E0B\u62C9\u83DC\u5355\u7684\u201C\u663E\u793A\u53C2\u6570\u540D\u79F0\u201D\u64CD\u4F5C\u4E2D\u627E\u5230\u3002","the effect parameter":"\u6548\u679C\u53C2\u6570","Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"\u66F4\u6539\u5BF9\u8C61\u7684\u6548\u679C\u53C2\u6570\u3002\u6548\u679C\u53C2\u6570\u540D\u79F0\u53EF\u4EE5\u5728\u6548\u679C\u9009\u9879\u5361\u4E2D\u901A\u8FC7\u4E0B\u62C9\u83DC\u5355\u7684\u201C\u663E\u793A\u53C2\u6570\u540D\u79F0\u201D\u64CD\u4F5C\u4E2D\u627E\u5230\u3002","Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_":"\u5C06 _PARAM0_ \u7684\u7F13\u52A8\u6548\u679C\u66F4\u6539\u4E3A _PARAM2_\uFF0C\u5E76\u4F7F\u7528\u53C2\u6570 _PARAM3_\u3002","Parameter name":"\u53C2\u6570\u540D\u79F0","the idle effect parameter value of the object.":"\u5BF9\u8C61\u7684\u7A7A\u95F2\u6548\u679C\u53C2\u6570\u503C\u3002","the idle effect parameter value":"\u7A7A\u95F2\u6548\u679C\u53C2\u6570\u503C","the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.":"\u5BF9\u8C61\u7684\u7126\u70B9\u6548\u679C\u53C2\u6570\u503C\u3002\u5F53\u6309\u94AE\u60AC\u505C\u6216\u5728\u5916\u90E8\u6309\u4F4F\u65F6\uFF0C\u8BE5\u72B6\u6001\u5904\u4E8E\u7126\u70B9\u72B6\u6001\u3002","the focused effect parameter value":"\u7126\u70B9\u6548\u679C\u53C2\u6570\u503C","the pressed effect parameter value of the object.":"\u5BF9\u8C61\u7684\u6309\u4E0B\u6548\u679C\u53C2\u6570\u503C\u3002","the pressed effect parameter value":"\u6309\u538B\u6548\u679C\u53C2\u6570\u503C","the fade-in easing of the object.":"\u5BF9\u8C61\u7684\u6DE1\u5165\u7F13\u548C\u3002","the fade-in easing":"\u6DE1\u5165\u7F13\u548C","the fade-out easing of the object.":"\u5BF9\u8C61\u7684\u6DE1\u51FA\u7F13\u548C\u3002","the fade-out easing":"\u6DE1\u51FA\u7F13\u548C","the fade-in duration of the object.":"\u5BF9\u8C61\u7684\u6DE1\u5165\u6301\u7EED\u65F6\u95F4\u3002","the fade-in duration":"\u6DE1\u5165\u6301\u7EED\u65F6\u95F4","the fade-out duration of the object.":"\u5BF9\u8C61\u7684\u6DE1\u51FA\u6301\u7EED\u65F6\u95F4\u3002","the fade-out duration":"\u6DE1\u51FA\u6301\u7EED\u65F6\u95F4","Smoothly resize buttons according to their state.":"\u5E73\u7A33\u8C03\u6574\u6309\u94AE\u5927\u5C0F\u4EE5\u9002\u5E94\u5B83\u4EEC\u7684\u72B6\u6001\u3002","Button scale tween":"\u6309\u94AE\u7F29\u653E\u8865\u95F4","Scalable capability":"\u53EF\u4F38\u7F29\u80FD\u529B","Button states behavior (required)":"\u6309\u94AE\u72B6\u6001\u884C\u4E3A\uFF08\u5FC5\u586B\uFF09","Tween behavior (required)":"\u8865\u95F4\u884C\u4E3A\uFF08\u5FC5\u586B\uFF09","Idle state size scale":"\u7A7A\u95F2\u72B6\u6001\u5927\u5C0F\u7F29\u653E","Size":"\u5927\u5C0F","Focused state size scale":"\u7126\u70B9\u72B6\u6001\u5927\u5C0F\u7F29\u653E","Pressed state size scale":"\u6309\u4E0B\u72B6\u6001\u5927\u5C0F\u7F29\u653E","the idle state size scale of the object.":"\u5BF9\u8C61\u7684\u7A7A\u95F2\u72B6\u6001\u5C3A\u5BF8\u6BD4\u4F8B\u3002","the idle state size scale":"\u7A7A\u95F2\u72B6\u6001\u5C3A\u5BF8\u6BD4\u4F8B","the focused state size scale of the object. The state is Focused when the button is hovered or held outside.":"\u5BF9\u8C61\u7684\u805A\u7126\u72B6\u6001\u5C3A\u5BF8\u6BD4\u4F8B\u3002\u5F53\u6309\u94AE\u60AC\u505C\u6216\u5728\u5916\u90E8\u6309\u4F4F\u65F6\uFF0C\u72B6\u6001\u4E3A\u805A\u7126\u3002","the focused state size scale":"\u805A\u7126\u72B6\u6001\u5C3A\u5BF8\u6BD4\u4F8B","the pressed state size scale of the object.":"\u5BF9\u8C61\u7684\u6309\u4E0B\u72B6\u6001\u5C3A\u5BF8\u6BD4\u4F8B\u3002","the pressed state size scale":"\u6309\u4E0B\u72B6\u6001\u5C3A\u5BF8\u6BD4\u4F8B","Smoothly change the color tint of buttons according to their state.":"\u5E73\u7A33\u6539\u53D8\u6309\u94AE\u7684\u989C\u8272\u8272\u8C03\u4EE5\u9002\u5E94\u5B83\u4EEC\u7684\u72B6\u6001\u3002","Button color tint tween":"\u6309\u94AE\u989C\u8272\u8272\u8C03\u8865\u95F4","Tween":"\u8865\u95F4","Idle state color tint":"\u7A7A\u95F2\u72B6\u6001\u989C\u8272\u8272\u8C03","Color":"\u989C\u8272","Focused state color tint":"\u7126\u70B9\u72B6\u6001\u989C\u8272\u8272\u8C03","Pressed state color tint":"\u6309\u4E0B\u72B6\u6001\u989C\u8272\u8272\u8C03","the idle state color tint of the object.":"\u5BF9\u8C61\u7684\u7A7A\u95F2\u72B6\u6001\u989C\u8272\u8272\u8C03\u3002","the idle state color tint":"\u7A7A\u95F2\u72B6\u6001\u989C\u8272\u8272\u8C03","the focused state color tint of the object. The state is Focused when the button is hovered or held outside.":"\u5BF9\u8C61\u7684\u805A\u7126\u72B6\u6001\u989C\u8272\u8272\u8C03\u3002\u5F53\u6309\u94AE\u60AC\u505C\u6216\u5728\u5916\u90E8\u6309\u4F4F\u65F6\uFF0C\u72B6\u6001\u4E3A\u805A\u7126\u3002","the focused state color tint":"\u805A\u7126\u72B6\u6001\u989C\u8272\u8272\u8C03","the pressed state color tint of the object.":"\u5BF9\u8C61\u7684\u6309\u4E0B\u72B6\u6001\u989C\u8272\u8272\u8C03\u3002","the pressed state color tint":"\u6309\u4E0B\u72B6\u6001\u989C\u8272\u8272\u8C03","Camera impulse":"\u76F8\u673A\u8109\u51B2","Move the camera following an impulse trajectory.":"\u6309\u8109\u51B2\u8F68\u8FF9\u79FB\u52A8\u76F8\u673A\u3002","Camera":"\u6444\u50CF\u673A","Add an impulse to the camera position.":"\u4E3A\u76F8\u673A\u4F4D\u7F6E\u6DFB\u52A0\u4E00\u4E2A\u51B2\u52A8\u3002","Add a camera impulse":"\u6DFB\u52A0\u76F8\u673A\u51B2\u52A8","Add an impulse _PARAM1_ to the camera from layer _PARAM2_ with an amplitude of _PARAM3_ and an angle of _PARAM4_, going away in _PARAM5_ seconds with _PARAM6_ easing, staying _PARAM7_ seconds, going back in _PARAM8_ seconds with _PARAM9_ easing":"\u4ECE\u56FE\u5C42_PARAM2_\u5411\u76F8\u673A\u6DFB\u52A0\u4E00\u4E2A\u632F\u52A8\uFF0C\u632F\u5E45\u4E3A_PARAM3_\uFF0C\u89D2\u5EA6\u4E3A_PARAM4_\uFF0C\u5728_PARAM5_\u79D2\u5185\u5E26\u7740_PARAM6_\u7F13\u52A8\u6D88\u5931\uFF0C\u505C\u7559_PARAM7_\u79D2\uFF0C\u5728_PARAM8_\u79D2\u5185\u5E26\u7740_PARAM9_\u7F13\u52A8\u8FD4\u56DE","Identifier":"\u6807\u8BC6\u7B26","Layer":"\u5C42","Displacement X":"X\u8F74\u4F4D\u79FB","Displacement Y":"Y\u8F74\u4F4D\u79FB","Get away duration (in seconds)":"\u79BB\u5F00\u65F6\u95F4\uFF08\u79D2\uFF09","Get away easing":"\u79BB\u5F00\u7F13\u52A8","Stay duration (in seconds)":"\u505C\u7559\u65F6\u95F4\uFF08\u79D2\uFF09","Get back duration (in seconds)":"\u8FD4\u56DE\u65F6\u95F4\uFF08\u79D2\uFF09","Get back easing":"\u8FD4\u56DE\u7F13\u52A8","Add a camera impulse (angle)":"\u6DFB\u52A0\u76F8\u673A\u51B2\u52A8\uFF08\u89D2\u5EA6\uFF09","Amplitude":"\u632F\u5E45","Angle (in degree)":"\u89D2\u5EA6\uFF08\u5EA6\uFF09","Check if a camera impulse is playing.":"\u68C0\u67E5\u76F8\u673A\u662F\u5426\u6B63\u5728\u64AD\u653E\u51B2\u52A8\u3002","Camera impulse is playing":"\u76F8\u673A\u51B2\u52A8\u6B63\u5728\u64AD\u653E","Camera impulse _PARAM1_ is playing":"\u76F8\u673A\u51B2\u52A8_PARAM1_\u6B63\u5728\u64AD\u653E","Camera shake":"\u6444\u50CF\u673A\u6296\u52A8","Shake layer cameras.":"\u6447\u52A8\u5C42\u6444\u50CF\u673A\u3002","Shake the camera on layers chosen with configuration actions.":"\u6839\u636E\u914D\u7F6E\u52A8\u4F5C\u5728\u9009\u62E9\u7684\u56FE\u5C42\u4E0A\u6296\u52A8\u76F8\u673A\u3002","Shake camera":"\u6296\u52A8\u76F8\u673A","Shake camera for _PARAM1_ seconds with _PARAM2_ seconds of easing to start and _PARAM3_ seconds to stop":"\u7528_PARAM2_\u79D2\u7684\u7F13\u52A8\u5F00\u59CB\u6447\u52A8\u76F8\u673A\uFF0C\u6447\u52A8_PARAM1_\u79D2\u540E\uFF0C\u518D\u7528_PARAM3_\u79D2\u7684\u7F13\u52A8\u7ED3\u675F","Ease duration to start (in seconds)":"\u5F00\u59CB\u7F13\u52A8\u65F6\u95F4\uFF08\u79D2\uFF09","Ease duration to stop (in seconds)":"\u7ED3\u675F\u7F13\u52A8\u65F6\u95F4\uFF08\u79D2\uFF09","Shake the camera on the specified layer, using one or more ways to shake (position, angle, zoom). This action is deprecated. Please use the other one with the same name.":"\u5728\u6307\u5B9A\u56FE\u5C42\u4E0A\u6296\u52A8\u76F8\u673A\uFF0C\u4F7F\u7528\u4E00\u79CD\u6216\u591A\u79CD\u65B9\u5F0F\u6296\u52A8\uFF08\u4F4D\u7F6E\u3001\u89D2\u5EA6\u3001\u7F29\u653E\uFF09\u3002\u6B64\u52A8\u4F5C\u5DF2\u5F03\u7528\u3002\u8BF7\u4F7F\u7528\u540D\u79F0\u76F8\u540C\u7684\u5176\u4ED6\u52A8\u4F5C\u3002","Shake camera (deprecated)":"\u6296\u52A8\u76F8\u673A\uFF08\u5DF2\u5F03\u7528\uFF09","Shake camera on _PARAM3_ layer for _PARAM5_ seconds. Use an amplitude of _PARAM1_px on X axis and _PARAM2_px on Y axis, angle rotation amplitude _PARAM6_ degrees, and zoom amplitude _PARAM7_ percent. Wait _PARAM8_ seconds between shakes. Keep shaking until stopped: _PARAM9_":"\u5728 _PARAM5_ \u79D2\u5185\u5728 _PARAM3_ \u5C42\u4E0A\u6447\u52A8\u76F8\u673A\u3002 \u5728X\u8F74\u4E0A\u4F7F\u7528 _PARAM1_px \u7684\u632F\u5E45\uFF0C\u5728Y\u8F74\u4E0A\u4F7F\u7528 _PARAM2_px \u7684\u632F\u5E45\uFF0C\u89D2\u5EA6\u65CB\u8F6C\u632F\u5E45\u4E3A _PARAM6_ \u5EA6\uFF0C\u7F29\u653E\u632F\u5E45\u4E3A _PARAM7_ \uFF05\u3002 \u5728\u6447\u52A8\u4E4B\u95F4\u7B49\u5F85 _PARAM8_ \u79D2\u3002 \u6301\u7EED\u6447\u52A8\u76F4\u5230\u505C\u6B62\uFF1A_PARAM9_","Amplitude of shaking on the X axis (in pixels)":"\u5728X\u8F74\u4E0A\u6447\u52A8\u7684\u5E45\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","Amplitude of shaking on the Y axis (in pixels)":"\u5728Y\u8F74\u4E0A\u6447\u52A8\u7684\u5E45\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","Layer (base layer if empty)":"\uFF08\u5982\u679C\u4E3A\u7A7A\uFF0C\u5219\u4E3A\u57FA\u7840\u5C42\uFF09\u7684\u5C42","Camera index (Default: 0)":"\u76F8\u673A\u7D22\u5F15\uFF08\u9ED8\u8BA4\u503C\uFF1A0\uFF09","Duration (in seconds) (Default: 0.5)":"\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\uFF08\u9ED8\u8BA4\u503C\uFF1A0.5\uFF09","Angle rotation amplitude (in degrees) (For example: 2)":"\u89D2\u5EA6\u65CB\u8F6C\u632F\u5E45\uFF08\u5EA6\uFF09\uFF08\u4F8B\u5982\uFF1A2\uFF09","Zoom factor amplitude":"\u7F29\u653E\u632F\u5E45","Period between shakes (in seconds) (Default: 0.08)":"\u6447\u52A8\u4E4B\u95F4\u7684\u5468\u671F\uFF08\u79D2\uFF09\uFF08\u9ED8\u8BA4\u503C\uFF1A0.08\uFF09","Keep shaking until stopped":"\u6301\u7EED\u6447\u52A8\u76F4\u5230\u505C\u6B62","Duration value will be ignored":"\u6301\u7EED\u65F6\u95F4\u503C\u5C06\u88AB\u5FFD\u7565","Start shaking the camera indefinitely.":"\u65E0\u9650\u671F\u5F00\u59CB\u6447\u52A8\u76F8\u673A\u3002","Start camera shaking":"\u5F00\u59CB\u6447\u52A8\u76F8\u673A","Start shaking the camera with _PARAM1_ seconds of easing":"\u4F7F\u7528 _PARAM1_ \u79D2\u7684\u7F13\u52A8\u5F00\u59CB\u6447\u52A8\u76F8\u673A","Ease duration (in seconds)":"\u7F13\u52A8\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","Stop shaking the camera.":"\u505C\u6B62\u6447\u52A8\u76F8\u673A\u3002","Stop camera shaking":"\u505C\u6B62\u6447\u52A8\u76F8\u673A","Stop shaking the camera with _PARAM1_ seconds of easing":"\u4F7F\u7528 _PARAM1_ \u79D2\u7684\u7F13\u52A8\u505C\u6B62\u6447\u52A8\u76F8\u673A","Mark a layer as shakable.":"\u6807\u8BB0\u4E00\u4E2A\u56FE\u5C42\u4E3A\u53EF\u6447\u52A8\u3002","Shakable layer":"\u53EF\u6447\u52A8\u7684\u56FE\u5C42","Mark the layer: _PARAM2_ as shakable: _PARAM1_":"\u5C06\u56FE\u5C42\uFF1A_PARAM2_ \u6807\u8BB0\u4E3A\u53EF\u6447\u52A8\uFF1A_PARAM1_","Shakable":"\u53EF\u6447\u52A8","Check if the camera is shaking.":"\u68C0\u67E5\u76F8\u673A\u662F\u5426\u5728\u6447\u52A8\u3002","Camera is shaking":"\u76F8\u673A\u6B63\u5728\u6447\u52A8","Change the translation amplitude of the shaking (in pixels).":"\u6539\u53D8\u6447\u52A8\u7684\u5E73\u79FB\u5E45\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Layer translation amplitude":"\u56FE\u5C42\u5E73\u79FB\u632F\u5E45","Change the translation amplitude of the shaking to _PARAM1_; _PARAM2_ (layer: _PARAM3_)":"\u6539\u53D8\u6447\u52A8\u7684\u5E73\u79FB\u5E45\u5EA6\u4E3A _PARAM1_\uFF1B_PARAM2_\uFF08\u5C42\uFF1A_PARAM3_\uFF09","Change the rotation amplitude of the shaking (in degrees).":"\u6539\u53D8\u6447\u52A8\u7684\u65CB\u8F6C\u5E45\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u3002","Layer rotation amplitude":"\u56FE\u5C42\u65CB\u8F6C\u632F\u5E45","Change the rotation amplitude of the shaking to _PARAM1_ degrees (layer: _PARAM2_)":"\u6539\u53D8\u6447\u52A8\u7684\u65CB\u8F6C\u5E45\u5EA6\u4E3A_PARAMETER1_\u5EA6\uFF08\u5C42\uFF1A_PARAM2_\uFF09","NewLayerName":"NewLayerName","Change the zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"\u66F4\u6539\u6447\u6643\u7684\u653E\u5927\u7F29\u5C0F\u7CFB\u6570\u3002\u6447\u6643\u5C06\u6309\u7167\u6B64\u7CFB\u6570\u8FDB\u884C\u653E\u5927\u548C\u7F29\u5C0F\uFF08\u4F8B\u59821.0625\u662F\u4E00\u4E2A\u6709\u6548\u503C\uFF09\u3002","Layer zoom amplitude":"\u56FE\u5C42\u7F29\u653E\u5E45\u5EA6","Change the zoom factor amplitude of the shaking to _PARAM1_ (layer: _PARAM2_)":"\u66F4\u6539\u9707\u52A8\u6447\u6643\u7684\u653E\u5927\u7F29\u5C0F\u7CFB\u6570\u4E3A_PARAM1_\uFF08\u56FE\u5C42\uFF1A_PARAM2_\uFF09","Zoom factor":"\u7F29\u653E\u7CFB\u6570","Change the number of back and forth per seconds.":"\u66F4\u6539\u6765\u56DE\u6446\u52A8\u7684\u6B21\u6570\u3002","Layer shaking frequency":"\u56FE\u5C42\u9707\u52A8\u9891\u7387","Change the shaking frequency to _PARAM1_ (layer: _PARAM2_)":"\u66F4\u6539\u9707\u52A8\u9891\u7387\u4E3A_PARAM1_\uFF08\u56FE\u5C42\uFF1A_PARAM2_\uFF09","Frequency":"\u9891\u7387","Change the default translation amplitude of the shaking (in pixels).":"\u66F4\u6539\u6447\u6643\u7684\u9ED8\u8BA4\u5E73\u79FB\u5E45\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Default translation amplitude":"\u9ED8\u8BA4\u5E73\u79FB\u5E45\u5EA6","Change the default translation amplitude of the shaking to _PARAM1_; _PARAM2_":"\u5C06\u6447\u6643\u7684\u9ED8\u8BA4\u5E73\u79FB\u5E45\u5EA6\u66F4\u6539\u4E3A_PARAM1_\uFF1B_PARAM2_","Change the default rotation amplitude of the shaking (in degrees).":"\u66F4\u6539\u6447\u6643\u7684\u9ED8\u8BA4\u65CB\u8F6C\u5E45\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u3002","Default rotation amplitude":"\u9ED8\u8BA4\u65CB\u8F6C\u5E45\u5EA6","Change the default rotation amplitude of the shaking to _PARAM1_ degrees":"\u5C06\u6447\u6643\u7684\u9ED8\u8BA4\u65CB\u8F6C\u5E45\u5EA6\u66F4\u6539\u4E3A_PARAM1_\u5EA6","Change the default zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"\u66F4\u6539\u6447\u6643\u7684\u9ED8\u8BA4\u653E\u5927\u7F29\u5C0F\u7CFB\u6570\u3002\u6447\u6643\u5C06\u6309\u7167\u6B64\u7CFB\u6570\u8FDB\u884C\u653E\u5927\u548C\u7F29\u5C0F\uFF08\u4F8B\u59821.0625\u662F\u4E00\u4E2A\u6709\u6548\u503C\uFF09\u3002","Default zoom amplitude":"\u9ED8\u8BA4\u7F29\u653E\u5E45\u5EA6","Change the default zoom factor amplitude of the shaking to _PARAM1_":"\u5C06\u6447\u6643\u7684\u9ED8\u8BA4\u653E\u5927\u7F29\u5C0F\u7CFB\u6570\u66F4\u6539\u4E3A_PARAM1_","Change the default number of back and forth per seconds.":"\u66F4\u6539\u6447\u6643\u7684\u9ED8\u8BA4\u6765\u56DE\u6446\u52A8\u6B21\u6570\u3002","Default shaking frequency":"\u9ED8\u8BA4\u6447\u6643\u9891\u7387","Change the default shaking frequency to _PARAM1_":"\u5C06\u6447\u6643\u7684\u9ED8\u8BA4\u6447\u6643\u9891\u7387\u66F4\u6539\u4E3A_PARAM1_","Generate a number from 2 dimensional simplex noise.":"\u4ECE\u4E8C\u7EF4simplex\u566A\u58F0\u751F\u6210\u4E00\u4E2A\u6570\u5B57\u3002","2D noise":"\u4E8C\u7EF4\u566A\u58F0","Generator name":"\u751F\u6210\u5668\u540D\u79F0","X coordinate":"X\u5750\u6807","Y coordinate":"Y\u5750\u6807","Generate a number from 3 dimensional simplex noise.":"\u4ECE\u4E09\u7EF4simplex\u566A\u58F0\u751F\u6210\u4E00\u4E2A\u6570\u5B57\u3002","3D noise":"\u4E09\u7EF4\u566A\u58F0","Z coordinate":"Z\u5750\u6807","Generate a number from 4 dimensional simplex noise.":"\u4ECE4\u7EF4simplex\u566A\u97F3\u4E2D\u751F\u6210\u4E00\u4E2A\u6570\u5B57\u3002","4D noise":"4D\u566A\u58F0","W coordinate":"W\u5750\u6807","Create a noise generator with default settings (frequency = 1, octaves = 1, persistence = 0.5, lacunarity = 2).":"\u4F7F\u7528\u9ED8\u8BA4\u8BBE\u7F6E\uFF08\u9891\u7387=1\uFF0C\u97F3\u8272=1\uFF0C\u6301\u7EED\u6027=0.5\uFF0C\u7F1D\u9699=2\uFF09\u521B\u5EFA\u4E00\u4E2A\u566A\u97F3\u751F\u6210\u5668\u3002","Create a noise generator":"\u521B\u5EFA\u4E00\u4E2A\u566A\u58F0\u751F\u6210\u5668","Create a noise generator named _PARAM1_":"\u521B\u5EFA\u540D\u4E3A_PARAM1_\u7684\u566A\u58F0\u751F\u6210\u5668","Delete a noise generator and loose its settings.":"\u5220\u9664\u566A\u58F0\u751F\u6210\u5668\u5E76\u4E22\u5931\u5176\u8BBE\u7F6E\u3002","Delete a noise generator":"\u5220\u9664\u4E00\u4E2A\u566A\u58F0\u751F\u6210\u5668","Delete _PARAM1_ noise generator":"\u5220\u9664_PARAM1_\u566A\u58F0\u751F\u6210\u5668","Delete all noise generators and loose their settings.":"\u5220\u9664\u6240\u6709\u566A\u58F0\u751F\u6210\u5668\u5E76\u4E22\u5931\u5176\u8BBE\u7F6E\u3002","Delete all noise generators":"\u5220\u9664\u6240\u6709\u566A\u58F0\u751F\u6210\u5668","The seed is a number used to generate the random noise. Setting the same seed will result in the same random noise generation. It's for example useful to generate the same world, by saving this seed value and reusing it later to generate again a world.":"\u79CD\u5B50\u662F\u4E00\u4E2A\u7528\u4E8E\u751F\u6210\u968F\u673A\u566A\u58F0\u7684\u6570\u5B57\u3002\u8BBE\u7F6E\u76F8\u540C\u7684\u79CD\u5B50\u5C06\u5BFC\u81F4\u76F8\u540C\u7684\u968F\u673A\u566A\u58F0\u751F\u6210\u3002\u4F8B\u5982\uFF0C\u901A\u8FC7\u4FDD\u5B58\u6B64\u79CD\u5B50\u503C\u5E76\u5728\u4EE5\u540E\u91CD\u65B0\u4F7F\u7528\u5B83\u6765\u518D\u6B21\u751F\u6210\u4E16\u754C\uFF0C\u53EF\u4EE5\u751F\u6210\u76F8\u540C\u7684\u4E16\u754C\u3002","Noise seed":"\u566A\u58F0\u79CD\u5B50","Change the noise seed to _PARAM1_":"\u5C06\u566A\u58F0\u79CD\u5B50\u66F4\u6539\u4E3A_PARAM1_","Seed":"\u79CD\u5B50","15 digits numbers maximum":"\u6700\u591A15\u4F4D\u6570\u5B57","Change the looping period on X used for noise generation. The noise will wrap-around on X.":"\u66F4\u6539\u7528\u4E8E\u566A\u58F0\u751F\u6210\u7684X\u65B9\u5411\u5FAA\u73AF\u5468\u671F\u3002\u566A\u58F0\u5C06\u5728X\u4E0A\u5305\u88F9\u3002","Noise looping period on X":"\u566A\u58F0\u5728X\u8F74\u4E0A\u7684\u5FAA\u73AF\u5468\u671F","Change the looping period on X of _PARAM2_: _PARAM1_":"\u66F4\u6539 _PARAM2_ \u7684\u5FAA\u73AF\u5468\u671F\uFF1A_PARAM1_","Looping period on X":"X \u7684\u5FAA\u73AF\u5468\u671F","Change the looping period on Y used for noise generation. The noise will wrap-around on Y.":"\u66F4\u6539 Y \u4E0A\u7528\u4E8E\u566A\u97F3\u751F\u6210\u7684\u5FAA\u73AF\u5468\u671F\u3002\u566A\u97F3\u5C06\u5728 Y \u4E0A\u73AF\u7ED5\u3002","Noise looping period on Y":"Y \u7684\u566A\u97F3\u5FAA\u73AF\u5468\u671F","Change the looping period on Y of _PARAM2_: _PARAM1_":"\u66F4\u6539 _PARAM2_ \u7684 Y \u5FAA\u73AF\u5468\u671F\uFF1A_PARAM1_","Looping period on Y":"Y \u7684\u5FAA\u73AF\u5468\u671F","Change the base frequency used for noise generation. A lower frequency will zoom in the noise.":"\u66F4\u6539\u7528\u4E8E\u566A\u97F3\u751F\u6210\u7684\u57FA\u7840\u9891\u7387\u3002\u8F83\u4F4E\u7684\u9891\u7387\u4F1A\u4F7F\u566A\u97F3\u653E\u5927\u3002","Noise base frequency":"\u566A\u97F3\u57FA\u7840\u9891\u7387","Change the noise frequency of _PARAM2_: _PARAM1_":"\u66F4\u6539 _PARAM2_ \u7684\u566A\u97F3\u9891\u7387\uFF1A_PARAM1_","Change the number of octaves used for noise generation. It can be seen as layers of noise with different zoom.":"\u66F4\u6539\u7528\u4E8E\u566A\u97F3\u751F\u6210\u7684\u500D\u9891\u6570\u3002\u53EF\u4EE5\u770B\u4F5C\u662F\u4E0D\u540C\u7F29\u653E\u7684\u566A\u58F0\u5C42\u3002","Noise octaves":"\u566A\u97F3\u500D\u9891\u6570","Change the number of noise octaves of _PARAM2_: _PARAM1_":"\u66F4\u6539 _PARAM2_ \u7684\u566A\u97F3\u500D\u9891\u6570\uFF1A_PARAM1_","Octaves":"\u500D\u9891\u6570","Change the persistence used for noise generation. At its default value \"0.5\", it halves the noise amplitude at each octave.":"\u66F4\u6539\u7528\u4E8E\u566A\u97F3\u751F\u6210\u7684\u6301\u4E45\u6027\u3002\u5728\u5176\u9ED8\u8BA4\u503C\u201C0.5\u201D\u65F6\uFF0C\u5B83\u4F1A\u5728\u6BCF\u4E2A\u500D\u9891\u6570\u4E0A\u51CF\u534A\u566A\u97F3\u632F\u5E45\u3002","Noise persistence":"\u566A\u97F3\u6301\u4E45\u6027","Change the noise persistence of _PARAM2_: _PARAM1_":"\u66F4\u6539 _PARAM2_ \u7684\u566A\u97F3\u6301\u4E45\u6027\uFF1A_PARAM1_","Persistence":"\u6301\u4E45\u6027","Change the lacunarity used for noise generation. At its default value \"2\", it doubles the frequency at each octave.":"\u66F4\u6539\u7528\u4E8E\u566A\u97F3\u751F\u6210\u7684\u5206\u5C42\u6027\u3002\u5728\u9ED8\u8BA4\u503C\u201C2\u201D\u4E0A\uFF0C\u5B83\u4F1A\u5728\u6BCF\u4E2A\u500D\u9891\u6570\u4E0A\u589E\u52A0\u9891\u7387\u3002","Noise lacunarity":"\u566A\u58F0\u95F4\u9699","Change the noise lacunarity of _PARAM2_: _PARAM1_":"\u66F4\u6539_PARAM2_\u7684\u566A\u58F0\u95F4\u9699\uFF1A_PARAM1_","Lacunarity":"\u95F4\u9699","The seed used for noise generation.":"\u7528\u4E8E\u566A\u58F0\u751F\u6210\u7684\u79CD\u5B50\u3002","The base frequency used for noise generation.":"\u7528\u4E8E\u566A\u58F0\u751F\u6210\u7684\u57FA\u9891\u3002","The number of octaves used for noise generation.":"\u7528\u4E8E\u566A\u58F0\u751F\u6210\u7684\u632F\u8361\u5668\u6570\u91CF\u3002","Noise octaves number":"\u566A\u58F0\u632F\u8361\u5668\u6570\u91CF","The persistence used for noise generation.":"\u7528\u4E8E\u566A\u58F0\u751F\u6210\u7684\u6301\u7EED\u6027\u3002","The lacunarity used for noise generation.":"\u7528\u4E8E\u566A\u58F0\u751F\u6210\u7684\u95F4\u9699\u3002","Camera Zoom":"\u6444\u50CF\u673A\u7F29\u653E","Allows to zoom camera on a layer with a speed (factor per second).":"\u5141\u8BB8\u4EE5\u901F\u5EA6\uFF08\u6BCF\u79D2\u7684\u500D\u6570\uFF09\u5728\u5C42\u4E0A\u7F29\u653E\u6444\u50CF\u673A\u3002","Change the camera zoom at a given speed (in factor per second).":"\u4EE5\u7ED9\u5B9A\u901F\u5EA6\u6539\u53D8\u6444\u50CF\u5934\u7F29\u653E\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\u7684\u56E0\u5B50\uFF09\u3002","Zoom camera with speed":"\u7528\u901F\u5EA6\u7F29\u653E\u6444\u50CF\u5934","Zoom camera with speed: _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"\u4F7F\u7528\u901F\u5EA6\u7F29\u653E\u6444\u50CF\u5934\uFF1A_PARAM1_\uFF08\u56FE\u5C42\uFF1A_PARAM2_\uFF0C\u6444\u50CF\u5934\uFF1A_PARAM3_\uFF09","Zoom speed":"\u7F29\u653E\u901F\u5EA6","Zoom by a factor per second. 1: no effect, 2: zoom in x2 every second, 0.5: zoom out x2 every second.":"\u6309\u6BCF\u79D2\u56E0\u5B50\u7F29\u653E\u3002 1\uFF1A\u65E0\u6548\u679C\uFF0C2\uFF1A\u6BCF\u79D2\u653E\u5927\u4E24\u500D\uFF0C0.5\uFF1A\u6BCF\u79D2\u7F29\u5C0F\u4E24\u500D\u3002","Camera number (default: 0)":"\u6444\u50CF\u5934\u7F16\u53F7\uFF08\u9ED8\u8BA4\uFF1A0\uFF09","Change the camera zoom and keep an anchor point fixed on screen (instead of the center).":"\u66F4\u6539\u6444\u50CF\u5934\u7F29\u653E\u5E76\u4FDD\u6301\u5C4F\u5E55\u4E0A\u7684\u951A\u70B9\u56FA\u5B9A\uFF08\u800C\u4E0D\u662F\u4E2D\u5FC3\uFF09\u3002","Zoom with anchor":"\u5E26\u951A\u70B9\u7F29\u653E","Change camera zoom to: _PARAM1_ with an anchor at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"\u5C06\u76F8\u673A\u7F29\u653E\u66F4\u6539\u4E3A\uFF1A_PARAM1_\uFF0C\u5E76\u5728\u5C4F\u5E55\u4E0A\u4FDD\u6301\u951A\u70B9\u5728\uFF1A_PARAM4_\uFF1B_PARAM5_\uFF08\u56FE\u5C42\uFF1A_PARAM2_\uFF0C\u6444\u50CF\u5934\uFF1A_PARAM3_\uFF09","Zoom":"\u7F29\u653E","1: Initial zoom, 2: zoom in x2, 0.5: zoom out x2...":"1\uFF1A\u521D\u59CB\u7F29\u653E\uFF0C2\uFF1A\u6BCF\u79D2\u653E\u5927\u4E24\u500D\uFF0C0.5\uFF1A\u6BCF\u79D2\u7F29\u5C0F\u4E24\u500D\u2026\u2026","Anchor X":"\u951A\u70B9X","Anchor Y":"\u951A\u70B9Y","Change the camera zoom at a given speed (in factor per second) and keep an anchor point fixed on screen (instead of the center).":"\u4EE5\u7ED9\u5B9A\u901F\u5EA6\uFF08\u6BCF\u79D2\u56E0\u7D20\uFF09\u6539\u53D8\u6444\u50CF\u673A\u7F29\u653E\u5E76\u4FDD\u6301\u5C4F\u5E55\u4E0A\u7684\u951A\u70B9\u56FA\u5B9A\uFF08\u800C\u4E0D\u662F\u4E2D\u5FC3\uFF09\u3002","Zoom camera with speed and anchor":"\u901F\u5EA6\u548C\u951A\u70B9\u7F29\u653E\u6444\u50CF\u673A","Zoom camera with speed: _PARAM1_ and an anchror at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"\u4F7F\u7528\u901F\u5EA6\uFF1A_PARAM1_ \u7F29\u653E\u6444\u50CF\u673A\uFF0C\u5E76\u5C06\u5176\u951A\u70B9\u653E\u5728\uFF1A_PARAM4_\uFF1B_PARAM5_\uFF08\u56FE\u5C42\uFF1A_PARAM2_\uFF0C\u6444\u50CF\u673A\uFF1A_PARAM3_\uFF09","Cancellable draggable object":"\u53EF\u53D6\u6D88\u7684\u53EF\u62D6\u52A8\u5BF9\u8C61","Allow to cancel the drag of an object (having the Draggable behavior) and return it smoothly to its previous position.":"\u5141\u8BB8\u53D6\u6D88\u5BF9\u8C61\u7684\u62D6\u52A8\uFF08\u5177\u6709\u53EF\u62D6\u52A8\u884C\u4E3A\uFF09\u5E76\u5E73\u7A33\u5730\u5C06\u5176\u8FD4\u56DE\u5230\u5176\u5148\u524D\u4F4D\u7F6E\u3002","Allow to cancel the drag of an object and make it smoothly return to its original position (with a tween).":"\u5141\u8BB8\u53D6\u6D88\u5BF9\u5BF9\u8C61\u7684\u62D6\u52A8\uFF0C\u5E76\u4F7F\u5176\u5E73\u6ED1\u8FD4\u56DE\u5230\u539F\u59CB\u4F4D\u7F6E\uFF08\u5E26\u6709\u7F13\u52A8\u6548\u679C\uFF09\u3002","Cancellable Draggable object":"\u53EF\u53D6\u6D88\u62D6\u52A8\u7684\u5BF9\u8C61","Draggable behavior":"\u53EF\u62D6\u52A8\u884C\u4E3A","Tween behavior":"Tween\u884C\u4E3A","Original X":"\u539F\u59CBX","Original Y":"\u539F\u59CBY","Cancel last drag.":"\u53D6\u6D88\u4E0A\u6B21\u62D6\u52A8\u3002","Cancel drag (deprecated)":"\u53D6\u6D88\u62D6\u52A8 (\u5DF2\u5F03\u7528)","Cancel last dragging of _PARAM0_ in _PARAM2_ ms with easing _PARAM3_":"\u4F7F\u7528\u53C2\u65703\u4E2D\u7684\u7F13\u548C\u5728\u53C2\u65702\u6BEB\u79D2\u5185\u53D6\u6D88\u4E0A\u6B21\u5BF9_PARAM0_\u7684\u62D6\u52A8\u3002","Duration in milliseconds":"\u6BEB\u79D2\u6570","Cancel drag":"\u53D6\u6D88\u62D6\u52A8","Cancel last dragging of _PARAM0_ with easing _PARAM3_ in _PARAM2_ seconds":"\u4F7F\u7528\u53C2\u65703\u4E2D\u7684\u7F13\u548C\u5728\u53C2\u65702\u79D2\u5185\u53D6\u6D88\u5BF9_PARAM0_\u7684\u4E0A\u6B21\u62D6\u52A8\u3002","Duration in seconds":"\u79D2\u6570","Dragging is cancelled, the object is returning to its original position.":"\u53D6\u6D88\u62D6\u52A8\uFF0C\u5BF9\u8C61\u6B63\u5728\u8FD4\u56DE\u539F\u59CB\u4F4D\u7F6E\u3002","Dragging is cancelled":"\u62D6\u52A8\u5DF2\u53D6\u6D88","_PARAM0_ dragging is cancelled":"_PARAM0_\u7684\u62D6\u52A8\u5DF2\u53D6\u6D88","Checkbox (for Shape Painter)":"\u590D\u9009\u6846\uFF08\u7528\u4E8E\u56FE\u5F62\u7ED8\u5236\u5668\uFF09","Checkbox that can be toggled by a left-click or touch.":"\u53EF\u4EE5\u901A\u8FC7\u5DE6\u952E\u5355\u51FB\u6216\u89E6\u6478\u5207\u6362\u7684\u590D\u9009\u6846\u3002","Checkbox":"\u590D\u9009\u6846","Checked":"\u5DF2\u9009","Checkbox state":"\u590D\u9009\u6846\u72B6\u6001","Halo size (hover). If blank, this is set to \"SideLength\".":"\u5149\u5708\u5927\u5C0F\uFF08\u60AC\u505C\uFF09\u3002\u5982\u679C\u7559\u7A7A\uFF0C\u5219\u8BBE\u7F6E\u4E3A\u201CSideLength\u201D\u3002","Checkbox appearance":"\u590D\u9009\u6846\u5916\u89C2","Halo opacity (hover)":"\u5149\u5708\u4E0D\u900F\u660E\u5EA6\uFF08\u60AC\u505C\uFF09","Halo opacity (pressed)":"\u5149\u5708\u4E0D\u900F\u660E\u5EA6\uFF08\u6309\u4E0B\uFF09","Enable interactions":"\u542F\u7528\u4EA4\u4E92","State of the checkbox has changed. (Used in \"ToggleChecked\" function)":"\u590D\u9009\u6846\u72B6\u6001\u5DF2\u66F4\u6539\u3002\uFF08\u7528\u4E8E\u201CToggleChecked\u201D\u51FD\u6570\uFF09","Primary color of checkbox. (Example: 24;119;211) Fill color when box is checked.":"\u590D\u9009\u6846\u7684\u4E3B\u8981\u989C\u8272\u3002\uFF08\u793A\u4F8B\uFF1A24;119;211\uFF09\u5728\u52FE\u9009\u6846\u65F6\u7684\u586B\u5145\u989C\u8272\u3002","Secondary color of checkbox. (Example: 255;255;255) Color of checkmark when box is checked.":"\u590D\u9009\u6846\u7684\u8F85\u52A9\u989C\u8272\u3002\uFF08\u793A\u4F8B\uFF1A255;255;255\uFF09\u76D2\u52FE\u9009\u65F6\u7684\u989C\u8272\u3002","Length of each side (px) Minimum: 10":"\u6BCF\u8FB9\u957F\u5EA6\uFF08px\uFF09\u6700\u5C0F\u503C\uFF1A10","Line width of checkmark (px) (Min: 1, Max: 1/4 * SideLength)":"\u52FE\u9009\u7EBF\u5BBD\uFF08px\uFF09\uFF08\u6700\u5C0F\uFF1A1\uFF0C\u6700\u5927\uFF1A1/4 * SideLength\uFF09","Border thickness (px) This border is only visible when the checkbox is unchecked.":"\u8FB9\u6846\u539A\u5EA6\uFF08px\uFF09\u53EA\u6709\u5728\u590D\u9009\u6846\u672A\u9009\u4E2D\u65F6\u624D\u53EF\u89C1\u3002","Halo size (pressed). If blank, this is set to \"HaloRadiusHover * 1.1\"":"\u5149\u5708\u5927\u5C0F\uFF08\u6309\u4E0B\uFF09\u3002\u5982\u679C\u7559\u7A7A\uFF0C\u5219\u8BBE\u7F6E\u4E3A\u201CHaloRadiusHover * 1.1\u201D","Check (or uncheck) the checkbox.":"\u52FE\u9009\uFF08\u6216\u53D6\u6D88\u52FE\u9009\uFF09\u590D\u9009\u6846\u3002","Check (or uncheck) the checkbox":"\u52FE\u9009\uFF08\u6216\u53D6\u6D88\u52FE\u9009\uFF09\u590D\u9009\u6846","Add checkmark to _PARAM0_: _PARAM2_":"\u4E3A_PARAM0_\u6DFB\u52A0\u590D\u9009\u6807\u8BB0: _PARAM2_","Check the checkbox?":"\u52FE\u9009\u590D\u9009\u6846\uFF1F","Enable or disable interactions with the checkbox. Users cannot interact while it is disabled.":"\u542F\u7528\u6216\u7981\u7528\u4E0E\u590D\u9009\u6846\u7684\u4EA4\u4E92\u3002\u5728\u5176\u88AB\u7981\u7528\u671F\u95F4\u7528\u6237\u65E0\u6CD5\u8FDB\u884C\u4EA4\u4E92\u3002","Enable interactions with checkbox":"\u542F\u7528\u4E0E\u590D\u9009\u6846\u7684\u4EA4\u4E92","Enable interactions of _PARAM0_: _PARAM2_":"\u542F\u7528_PARAM0_\u7684\u4EA4\u4E92\uFF1A_PARAM2_","Enable":"\u542F\u7528","If checked, change to unchecked. If unchecked, change to checked.":"\u5982\u679C\u9009\u4E2D\uFF0C\u5219\u66F4\u6539\u4E3A\u672A\u9009\u4E2D\u3002\u5982\u679C\u672A\u9009\u4E2D\uFF0C\u5219\u66F4\u6539\u4E3A\u5DF2\u9009\u4E2D\u3002","Toggle checkmark":"\u5207\u6362\u590D\u9009\u6807\u8BB0","Toggle checkmark on _PARAM0_":"\u5728_PARAM0_\u4E0A\u5207\u6362\u590D\u9009\u6807\u8BB0","Change the primary color of checkbox.":"\u66F4\u6539\u590D\u9009\u6846\u7684\u4E3B\u8981\u989C\u8272\u3002","Primary color of checkbox":"\u590D\u9009\u6846\u7684\u4E3B\u8981\u989C\u8272","Change the primary color of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u4E3B\u989C\u8272\uFF1A_PARAM2_","Primary color":"\u4E3B\u8981\u989C\u8272","Change the secondary color of checkbox.":"\u66F4\u6539\u590D\u9009\u6846\u7684\u6B21\u8981\u989C\u8272\u3002","Secondary color of checkbox":"\u590D\u9009\u6846\u7684\u6B21\u8981\u989C\u8272","Change the secondary color of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u6B21\u989C\u8272\uFF1A_PARAM2_","Secondary color":"\u6B21\u8981\u989C\u8272","Change the halo opacity when pressed.":"\u5728\u6309\u4E0B\u65F6\u66F4\u6539\u8F89\u5149\u4E0D\u900F\u660E\u5EA6\u3002","Halo opacity when pressed":"\u6309\u4E0B\u65F6\u7684\u8F89\u5149\u4E0D\u900F\u660E\u5EA6","Change the halo opacity of _PARAM0_ when pressed: _PARAM2_":"\u66F4\u6539_PARAM0_\u5728\u6309\u4E0B\u65F6\u7684\u8F89\u5149\u4E0D\u900F\u660E\u5EA6\uFF1A_PARAM2_","Halo opacity":"\u8F89\u5149\u4E0D\u900F\u660E\u5EA6","Change the halo opacity when hovered.":"\u5728\u60AC\u505C\u65F6\u66F4\u6539\u8F89\u5149\u4E0D\u900F\u660E\u5EA6\u3002","Halo opacity when hovered":"\u60AC\u505C\u65F6\u7684\u8F89\u5149\u4E0D\u900F\u660E\u5EA6","Change the halo opacity of _PARAM0_ when hovered: _PARAM2_":"\u66F4\u6539_PARAM0_\u60AC\u505C\u65F6\u7684\u8F89\u5149\u4E0D\u900F\u660E\u5EA6\uFF1A_PARAM2_","Change the halo radius when pressed.":"\u6309\u4E0B\u65F6\u66F4\u6539\u8F89\u5149\u534A\u5F84\u3002","Halo radius when pressed":"\u6309\u4E0B\u65F6\u7684\u8F89\u5149\u534A\u5F84","Change the halo radius of _PARAM0_ when pressed: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u5728\u6309\u4E0B\u65F6\u7684\u8F89\u5149\u534A\u5F84\uFF1A_PARAM2_ px","Halo radius":"\u8F89\u5149\u534A\u5F84","Change the halo radius when hovered. This size is also used to detect interaction with the checkbox.":"\u5728\u60AC\u505C\u65F6\u66F4\u6539\u8F89\u5149\u534A\u5F84\u3002\u6B64\u5927\u5C0F\u4E5F\u7528\u4E8E\u68C0\u6D4B\u590D\u9009\u6846\u7684\u4EA4\u4E92\u3002","Halo radius when hovered":"\u60AC\u505C\u65F6\u7684\u8F89\u5149\u534A\u5F84","Change the halo radius of _PARAM0_ when hovered: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u60AC\u505C\u65F6\u7684\u8F89\u5149\u534A\u5F84\uFF1A_PARAM2_ px","Change the border thickness of checkbox.":"\u66F4\u6539\u590D\u9009\u6846\u7684\u8FB9\u6846\u539A\u5EA6\u3002","Border thickness of checkbox":"\u590D\u9009\u6846\u7684\u8FB9\u6846\u539A\u5EA6","Change the border thickness of _PARAM0_: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u7684\u8FB9\u6846\u539A\u5EA6\uFF1A_PARAM2_ px","Track thickness":"\u8F68\u9053\u539A\u5EA6","Change the side length of checkbox.":"\u66F4\u6539\u590D\u9009\u6846\u7684\u8FB9\u957F\u3002","Side length of checkbox":"\u590D\u9009\u6846\u7684\u8FB9\u957F","Change the side length of _PARAM0_: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u7684\u8FB9\u957F\uFF1A_PARAM2_\u50CF\u7D20","Track width (px)":"\u8DDF\u8E2A\u5BBD\u5EA6\uFF08\u50CF\u7D20\uFF09","Change the line width of checkmark.":"\u66F4\u6539\u52FE\u9009\u7EBF\u5BBD\u5EA6\u3002","Line width of checkmark":"\u52FE\u9009\u7EBF\u5BBD\u5EA6","Change the line width of _PARAM0_: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u7684\u7EBF\u5BBD\u5EA6\uFF1A_PARAM2_\u50CF\u7D20","Line width (px)":"\u7EBF\u5BBD\u5EA6\uFF08\u50CF\u7D20\uFF09","Check if the checkbox is checked.":"\u68C0\u67E5\u590D\u9009\u6846\u662F\u5426\u88AB\u52FE\u9009\u3002","Is checked":"\u5DF2\u9009\u4E2D","_PARAM0_ is checked":"_PARAM0_\u5DF2\u52FE\u9009","Check if the checkbox interations are enabled.":"\u68C0\u67E5\u590D\u9009\u6846\u4EA4\u4E92\u662F\u5426\u5DF2\u542F\u7528\u3002","Interactions enabled":"\u4EA4\u4E92\u5DF2\u542F\u7528","Interactions of _PARAM0_ are enabled":"_PARAM0_\u7684\u4EA4\u4E92\u5DF2\u542F\u7528","Return the color used to draw the outline of the checkbox (when unchecked) and the fill color (when checked).":"\u8FD4\u56DE\u7528\u4E8E\u7ED8\u5236\u590D\u9009\u6846\u8F6E\u5ED3\uFF08\u672A\u52FE\u9009\u65F6\uFF09\u548C\u586B\u5145\u989C\u8272\uFF08\u5DF2\u52FE\u9009\u65F6\uFF09\u7684\u989C\u8272\u3002","Change the maximum value of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u6700\u5927\u503C\u4E3A_PARAM2_","Return the color used to fill the checkbox (when unchecked) and to draw the checkmark (when checked).":"\u8FD4\u56DE\u7528\u4E8E\u586B\u5145\u590D\u9009\u6846\uFF08\u672A\u52FE\u9009\u65F6\uFF09\u548C\u7ED8\u5236\u52FE\u9009\u7EBF\uFF08\u5DF2\u52FE\u9009\u65F6\uFF09\u7684\u989C\u8272\u3002","Return the radius of the halo while the checkbox is touched or clicked.":"\u8FD4\u56DE\u5728\u5355\u51FB\u6216\u89E6\u6478\u590D\u9009\u6846\u65F6\u7528\u4E8E\u7ED8\u5236\u5149\u5708\u7684\u534A\u5F84\u3002","Halo radius while touched or clicked":"\u5355\u51FB\u65F6\u7684\u5149\u5708\u534A\u5F84","Return the opacity of the halo while the checkbox is touched or clicked.":"\u8FD4\u56DE\u5728\u5355\u51FB\u6216\u89E6\u6478\u590D\u9009\u6846\u65F6\u5149\u5708\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Halo opacity (while touched or clicked)":"\u5149\u5708\u7684\u4E0D\u900F\u660E\u5EA6\uFF08\u5355\u51FB\u6216\u89E6\u6478\u65F6\uFF09","Return the radius of the halo when the mouse is hovering near the checkbox.":"\u8FD4\u56DE\u5F53\u9F20\u6807\u60AC\u505C\u5728\u590D\u9009\u6846\u9644\u8FD1\u65F6\u5149\u5708\u7684\u534A\u5F84\u3002","Halo radius (during hover)":"\u5149\u5708\u534A\u5F84\uFF08\u60AC\u505C\u65F6\uFF09","Return the opacity of the halo when the mouse is hovering near the checkbox.":"\u8FD4\u56DE\u9F20\u6807\u5728\u590D\u9009\u6846\u9644\u8FD1\u60AC\u505C\u65F6\u5149\u5708\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Halo opacity (during hover)":"\u5149\u5708\u7684\u4E0D\u900F\u660E\u5EA6\uFF08\u60AC\u505C\u65F6\uFF09","Return the line width of checkmark (pixels).":"\u8FD4\u56DE\u52FE\u9009\u7EBF\u7684\u7EBF\u5BBD\u5EA6\uFF08\u50CF\u7D20\uFF09\u3002","Line width":"\u7EBF\u5BBD\u5EA6","Return the side length of checkbox (pixels).":"\u8FD4\u56DE\u590D\u9009\u6846\u8FB9\u957F\uFF08\u50CF\u7D20\uFF09\u3002","Side length":"\u8FB9\u957F","Return the border thickness of checkbox (pixels).":"\u8FD4\u56DE\u590D\u9009\u6846\u8FB9\u6846\u539A\u5EA6\uFF08\u50CF\u7D20\uFF09\u3002","Border thickness":"\u8FB9\u6846\u539A\u5EA6","Check if the checkbox is being pressed by mouse or touch.":"\u68C0\u67E5\u590D\u9009\u6846\u662F\u5426\u6B63\u5728\u88AB\u9F20\u6807\u6216\u89E6\u6478\u6309\u4E0B\u3002","Checkbox is being pressed":"\u590D\u9009\u6846\u6B63\u5728\u88AB\u6309\u4E0B","_PARAM0_ is being pressed by mouse or touch":"_PARAM0_\u6B63\u5728\u88AB\u9F20\u6807\u6216\u89E6\u6478\u6309\u4E0B","Update the hitbox.":"\u66F4\u65B0\u70B9\u51FB\u533A\u57DF\u3002","Update hitbox":"\u66F4\u65B0\u78B0\u649E\u6846","Update the hitbox of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u78B0\u649E\u6846","Checkpoints":"\u68C0\u67E5\u70B9","Respawn objects at checkpoints.":"\u5728\u68C0\u67E5\u70B9\u91CD\u65B0\u751F\u6210\u5BF9\u8C61\u3002","Game mechanic":"\u6E38\u620F\u673A\u5236","Update a checkpoint of an object.":"\u66F4\u65B0\u5BF9\u8C61\u7684\u68C0\u67E5\u70B9\u3002","Save checkpoint":"\u4FDD\u5B58\u68C0\u67E5\u70B9","Save checkpoint _PARAM4_ of _PARAM1_ to _PARAM2_ (x-axis), _PARAM3_ (y-axis)":"\u5C06_PARAM1_\u7684\u68C0\u67E5\u70B9_PARAM4_\u4FDD\u5B58\u5230_PARAM2_\uFF08x\u8F74\uFF09\uFF0C_PARAM3_\uFF08y\u8F74\uFF09","Save checkpoint of object":"\u5BF9\u8C61\u7684\u68C0\u67E5\u70B9\u4FDD\u5B58","X position":"X\u4F4D\u7F6E","Y position":"Y\u4F4D\u7F6E","Checkpoint name":"\u68C0\u67E5\u70B9\u540D\u79F0","Change the position of the object to the saved checkpoint.":"\u5C06\u5BF9\u8C61\u7684\u4F4D\u7F6E\u66F4\u6539\u4E3A\u4FDD\u5B58\u7684\u68C0\u67E5\u70B9\u3002","Load checkpoint":"\u52A0\u8F7D\u68C0\u67E5\u70B9","Move _PARAM2_ to checkpoint _PARAM3_ of _PARAM1_":"\u5C06_PARAM2_\u79FB\u52A8\u5230\u68C0\u67E5\u70B9_PARAM1_\u7684_PARAM3_","Load checkpoint from object":"\u4ECE\u5BF9\u8C61\u52A0\u8F7D\u68C0\u67E5\u70B9","Change position of object":"\u6539\u53D8\u5BF9\u8C61\u7684\u4F4D\u7F6E","Ignore (possibly) empty checkpoints":"\u5FFD\u7565\uFF08\u53EF\u80FD\u4E3A\u7A7A\uFF09\u7684\u68C0\u67E5\u70B9","Loading not yet saved checkpoints will (by default) set the position to the coordinate 0;0. Select \"yes\" to completely ignore non-existant checkpoints. To define an alternative checkpoint for it, create a new event and use the \"Checkpoint exists\" condition, save the wanted checkpoint as the action.":"\u5C1A\u672A\u4FDD\u5B58\u7684\u68C0\u67E5\u70B9\uFF08\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF09\u5C06\u4F4D\u7F6E\u8BBE\u7F6E\u4E3A\u5750\u68070;0\u3002\u9009\u62E9\u201C\u662F\u201D\u4EE5\u5B8C\u5168\u5FFD\u7565\u4E0D\u5B58\u5728\u7684\u68C0\u67E5\u70B9\u3002\u8981\u4E3A\u5176\u5B9A\u4E49\u66FF\u4EE3\u68C0\u67E5\u70B9\uFF0C\u8BF7\u521B\u5EFA\u65B0\u4E8B\u4EF6\u5E76\u4F7F\u7528\u201C\u68C0\u67E5\u70B9\u5B58\u5728\u201D\u6761\u4EF6\uFF0C\u5C06\u6240\u9700\u7684\u68C0\u67E5\u70B9\u4FDD\u5B58\u4E3A\u64CD\u4F5C\u3002","Check if a checkpoint has a position saved / does exist.":"\u68C0\u67E5\u68C0\u67E5\u70B9\u662F\u5426\u5DF2\u4FDD\u5B58\u4F4D\u7F6E/\u5B58\u5728\u3002","Checkpoint exists":"\u68C0\u67E5\u70B9\u5B58\u5728","Checkpoint _PARAM2_ of _PARAM1_ exists":"_PARAM1_\u7684\u68C0\u67E5\u70B9_PARAM2_\u5B58\u5728","Check checkpoint from object":"\u68C0\u67E5\u70B9\u662F\u5426\u5B58\u5728\u4E8E\u5BF9\u8C61","Clipboard":"\u526A\u8D34\u677F","Read and write the clipboard.":"\u8BFB\u53D6\u548C\u5199\u5165\u526A\u8D34\u677F\u3002","Read the text from the clipboard asynchronously. \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"\u5F02\u6B65\u4ECE\u526A\u8D34\u677F\u8BFB\u53D6\u6587\u672C\u3002\n\u4E5F\u8BF7\u6CE8\u610F\uFF0C\u5BF9\u4E8E Web \u6D4F\u89C8\u5668\uFF0C\u53EF\u80FD\u4F1A\u8981\u6C42\u7528\u6237\u5141\u8BB8\u8BFB\u53D6\u526A\u8D34\u677F\u3002","Get text from the clipboard":"\u4ECE\u526A\u8D34\u677F\u83B7\u53D6\u6587\u672C","Read clipboard and store text in _PARAM1_":"\u8BFB\u53D6\u526A\u8D34\u677F\u5E76\u5C06\u6587\u672C\u5B58\u50A8\u5728_PARAM1_\u4E2D","Callback variable where to store the clipboard contents":"\u56DE\u8C03\u53D8\u91CF\uFF0C\u7528\u4E8E\u5B58\u50A8\u526A\u8D34\u677F\u5185\u5BB9","Write the text in the clipboard.":"\u5728\u526A\u8D34\u677F\u4E2D\u5199\u5165\u6587\u672C\u3002","Write text to the clipboard":"\u5C06\u6587\u672C\u5199\u5165\u526A\u8D34\u677F","Write _PARAM1_ to clipboard":"\u5C06_PARAM1_\u5199\u5165\u526A\u8D34\u677F","Text to write to clipboard":"\u8981\u5199\u5165\u526A\u8D34\u677F\u7684\u6587\u672C","Read the text from the clipboard asynchronously. As this is \"asynchronous\", the variable won't be immediately filled with the text from the clipboard. You will have to wait a few frames before it will be. If you want your subsequent actions and subevents to automatically wait for the read to finish, use the waiting version of this action instead (recomended). \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"\u5F02\u6B65\u4ECE\u526A\u8D34\u677F\u8BFB\u53D6\u6587\u672C\u3002\u7531\u4E8E\u8FD9\u662F\u201C\u5F02\u6B65\u201D\uFF0C\u53D8\u91CF\u4E0D\u4F1A\u7ACB\u5373\u586B\u5145\u6765\u81EA\u526A\u8D34\u677F\u7684\u6587\u672C\u3002\u60A8\u5C06\u4E0D\u5F97\u4E0D\u7B49\u5F85\u51E0\u5E27\u624D\u80FD\u51FA\u73B0\u3002\u5982\u679C\u8981\u4F7F\u60A8\u7684\u540E\u7EED\u64CD\u4F5C\u548C\u5B50\u4E8B\u4EF6\u81EA\u52A8\u7B49\u5F85\u8BFB\u53D6\u5B8C\u6210\uFF0C\u8BF7\u4F7F\u7528\u6B64\u64CD\u4F5C\u7684\u7B49\u5F85\u7248\u672C\uFF08\u63A8\u8350\uFF09\u3002\n\u8FD8\u8981\u6CE8\u610F\uFF0C\u5728 Web \u6D4F\u89C8\u5668\u4E0A\uFF0C\u7528\u6237\u53EF\u80FD\u4F1A\u88AB\u8981\u6C42\u5141\u8BB8\u4ECE\u526A\u8D34\u677F\u8BFB\u53D6\u3002","(No waiting) Get text from the clipboard":"\uFF08\u65E0\u9700\u7B49\u5F85\uFF09\u4ECE\u526A\u8D34\u677F\u83B7\u53D6\u6587\u672C","Callback variable where to store the result":"\u56DE\u8C03\u53D8\u91CF\uFF0C\u7528\u4E8E\u5B58\u50A8\u7ED3\u679C","[DEPRECATED] Read the text from the clipboard (Windows, macOS, Linux only)":"[\u5F03\u7528]\u4ECE\u526A\u8D34\u677F\u8BFB\u53D6\u6587\u672C\uFF08\u4EC5\u9650Windows\u3001macOS\u548CLinux\uFF09","[DEPRECATED] Get text from the clipboard (Windows, macOS, Linux)":"[\u5F03\u7528] \u4ECE\u526A\u8D34\u677F\u83B7\u53D6\u6587\u672C\uFF08\u4EC5\u9650Windows\u3001macOS\u548CLinux\uFF09","Volume settings":"\u97F3\u91CF\u8BBE\u7F6E","A collapsible volume setting menu.":"\u53EF\u6298\u53E0\u7684\u97F3\u91CF\u8BBE\u7F6E\u83DC\u5355\u3002","Check if the events are running for the editor.":"\u68C0\u67E5\u4E8B\u4EF6\u662F\u5426\u6B63\u5728\u4E3A\u7F16\u8F91\u5668\u8FD0\u884C\u3002","Editor is running":"\u7F16\u8F91\u5668\u6B63\u5728\u8FD0\u884C","Events are running for the editor":"\u4E8B\u4EF6\u6B63\u5728\u4E3A\u7F16\u8F91\u5668\u8FD0\u884C","Collapsible volume setting menu.":"\u53EF\u6298\u53E0\u7684\u97F3\u91CF\u8BBE\u7F6E\u83DC\u5355\u3002","Show the volum controls.":"\u663E\u793A\u97F3\u91CF\u63A7\u5236\u3002","Open volum controls":"\u6253\u5F00\u97F3\u91CF\u63A7\u5236","Open _PARAM0_ volum controls":"\u6253\u5F00 _PARAM0_ \u97F3\u91CF\u63A7\u5236","Hide the volum controls.":"\u9690\u85CF\u97F3\u91CF\u63A7\u5236\u3002","Close volum controls":"\u5173\u95ED\u97F3\u91CF\u63A7\u5236","Close _PARAM0_ volum controls":"\u5173\u95ED _PARAM0_ \u97F3\u91CF\u63A7\u5236","Color Conversion":"\u989C\u8272\u8F6C\u6362","Expressions to convert color values between various formats (RGB, HSV, HSL, named colors), calculate luminance according to WCAG 2.0 standards, and to blend two colors.":"\u8868\u8FBE\u5F0F\uFF0C\u53EF\u5728\u5404\u79CD\u683C\u5F0F\uFF08RGB\u3001HSV\u3001HSL\u548C\u547D\u540D\u989C\u8272\uFF09\u4E4B\u95F4\u8F6C\u6362\u989C\u8272\u503C\uFF0C\u6839\u636EWCAG 2.0\u6807\u51C6\u8BA1\u7B97\u4EAE\u5EA6\uFF0C\u5E76\u6DF7\u5408\u4E24\u79CD\u989C\u8272\u3002","Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".":"\u5C06\u5341\u516D\u8FDB\u5236\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3ARGB\u5B57\u7B26\u4E32\u3002\u793A\u4F8B\u8F93\u5165\uFF1A\u201C0459AF\u201D\u3002","Hexadecimal to RGB":"\u5341\u516D\u8FDB\u5236\u8F6C\u6362\u4E3ARGB","Hex value":"\u5341\u516D\u8FDB\u5236\u503C","Calculate luminance of a RGB color. Example input: \"0;128;255\".":"\u8BA1\u7B97RGB\u989C\u8272\u7684\u4EAE\u5EA6\u3002 \u793A\u4F8B\u8F93\u5165\uFF1A\u201C0\uFF1B128\uFF1B255\u201D\u3002","Luminance from RGB":"RGB\u989C\u8272\u7684\u4EAE\u5EA6","RGB color":"RGB\u989C\u8272","Calculate luminance of a hexadecimal color. Example input: \"0459AF\".":"\u8BA1\u7B97\u5341\u516D\u8FDB\u5236\u989C\u8272\u7684\u4EAE\u5EA6\u3002 \u793A\u4F8B\u8F93\u5165\uFF1A\u201C0459AF\u201D\u3002","Luminance from hexadecimal":"\u5341\u516D\u8FDB\u5236\u989C\u8272\u7684\u4EAE\u5EA6","Blend two RGB colors by applying a weighted mean.":"\u901A\u8FC7\u52A0\u6743\u5E73\u5747\u503C\u6DF7\u5408\u4E24\u4E2A RGB \u989C\u8272\u3002","Blend RGB colors":"\u6DF7\u5408 RGB \u989C\u8272","First RGB color":"\u7B2C\u4E00\u4E2A RGB \u989C\u8272","Second RGB color":"\u7B2C\u4E8C\u4E2A RGB \u989C\u8272","Ratio":"\u6BD4\u4F8B","Range: 0 to 1, where 0 gives the first color and 1 gives the second color":"\u8303\u56F4\uFF1A0 \u5230 1\uFF0C\u5176\u4E2D 0 \u7ED9\u51FA\u7B2C\u4E00\u79CD\u989C\u8272\uFF0C\u800C 1 \u7ED9\u51FA\u7B2C\u4E8C\u79CD\u989C\u8272","Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".":"\u5C06 RGB \u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u5341\u516D\u8FDB\u5236\u5B57\u7B26\u4E32\u3002\u793A\u4F8B\u8F93\u5165\uFF1A\u201C0;128;255\u201D\u3002","RGB to hexadecimal":"RGB \u8F6C\u6362\u4E3A\u5341\u516D\u8FDB\u5236","RGB value":"RGB \u503C","Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".":"\u5C06 RGB \u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A HSL \u5B57\u7B26\u4E32\u3002\u793A\u4F8B\u8F93\u5165\uFF1A\u201C0;128;255\u201D\u201D\u3002","RGB to HSL":"RGB \u8F6C\u6362\u4E3A HSL","Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).":"\u5C06 HSV \u989C\u8272\u503C\u8F6C\u6362\u4E3A RGB \u5B57\u7B26\u4E32\u3002\u6709\u6548\u8F93\u5165\u8303\u56F4\uFF1AH(0 \u5230 360)\uFF0CS(0 \u5230 100)\uFF0CV(0 \u5230 100)\u3002","HSV to RGB":"HSV \u8F6C\u6362\u4E3A RGB","Hue 0-360":"\u8272\u76F8 0-360","Saturation 0-100":"\u9971\u548C\u5EA6 0-100","Value 0-100":"\u660E\u5EA6 0-100","Converts a RGB string into a HSV string. Example input: \"0;128;255\".":"\u5C06 RGB \u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A HSV \u5B57\u7B26\u4E32\u3002\u793A\u4F8B\u8F93\u5165\uFF1A\u201C0;128;255\u201D\u3002","RGB to HSV":"RGB \u8F6C\u6362\u4E3A HSV","Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.":"\u5C06\u989C\u8272\u540D\u79F0\u8F6C\u6362\u4E3ARGB\u5B57\u7B26\u4E32\u3002 \uFF08\u793A\u4F8B\uFF1A\u9ED1\u8272\uFF0C\u7070\u8272\uFF0C\u767D\u8272\uFF0C\u7EA2\u8272\uFF0C\u7D2B\u8272\uFF0C\u7EFF\u8272\uFF0C\u9EC4\u8272\uFF0C\u84DD\u8272\uFF09\n\u5B8C\u6574\u7684\u989C\u8272\u5217\u8868\uFF1Ahttps://www.w3schools.com/colors/colors_names.asp\u3002","Color name to RGB":"\u989C\u8272\u540D\u79F0\u81F3RGB","Name of a color":"\u989C\u8272\u540D\u79F0","Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).":"\u5C06HSL\u989C\u8272\u503C\u8F6C\u6362\u4E3ARGB\u5B57\u7B26\u4E32\u3002 \u6709\u6548\u7684\u8F93\u5165\u8303\u56F4\uFF1AH\uFF080\u5230360\uFF09\uFF0CS\uFF080\u5230100\uFF09\uFF0CL\uFF080\u5230100\uFF09\u3002","HSL to RGB":"HSL\u81F3RGB","Lightness 0-100":"\u4EAE\u5EA60-100","Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.":"\u5C06\u989C\u8272\u8272\u8C03\uFF08\u8303\u56F4\uFF1A0\u5230360\uFF09\u8F6C\u6362\u4E3ARGB\u989C\u8272\u5B57\u7B26\u4E32\uFF0C\u9971\u548C\u5EA6\u4E3A100\uFF05\uFF0C\u4EAE\u5EA6\u4E3A50\uFF05\u3002","Hue to RGB":"\u8272\u8C03\u81F3RGB","Compressor":"\u538B\u7F29\u673A","Compress and decompress strings.":"\u538B\u7F29\u548C\u89E3\u538B\u5B57\u7B26\u4E32\u3002","Decompress a string.":"\u89E3\u538B\u5B57\u7B26\u4E32\u3002","Decompress String":"\u89E3\u538B\u5B57\u7B26\u4E32","String to decompress":"\u8981\u89E3\u538B\u7684\u5B57\u7B26\u4E32","Compress a string.":"\u538B\u7F29\u5B57\u7B26\u4E32\u3002","Compress String":"\u538B\u7F29\u5B57\u7B26\u4E32","String to compress":"\u8981\u538B\u7F29\u7684\u5B57\u7B26\u4E32","Copy camera settings":"\u590D\u5236\u6444\u50CF\u673A\u8BBE\u7F6E","Copy the camera settings of a layer and apply them to another layer.":"\u590D\u5236\u4E00\u4E2A\u56FE\u5C42\u7684\u6444\u50CF\u673A\u8BBE\u7F6E\u5E76\u5C06\u5176\u5E94\u7528\u5230\u53E6\u4E00\u4E2A\u56FE\u5C42\u3002","Copy camera settings of a layer and apply them to another layer.":"\u590D\u5236\u56FE\u5C42\u7684\u76F8\u673A\u8BBE\u7F6E\u5E76\u5C06\u5176\u5E94\u7528\u5230\u53E6\u4E00\u4E2A\u56FE\u5C42\u3002","Copy camera settings of _PARAM1_ layer and apply them to _PARAM3_ layer (X position: _PARAM5_, Y position: _PARAM6_, Zoom: _PARAM7_, Angle: _PARAM8_)":"\u590D\u5236_PARAM1_\u56FE\u5C42\u7684\u76F8\u673A\u8BBE\u7F6E\u5E76\u5E94\u7528\u5230_PARAM3_\u56FE\u5C42\uFF08X\u4F4D\u7F6E\uFF1A_PARAM5_\uFF0CY\u4F4D\u7F6E\uFF1A_PARAM6_\uFF0C\u7F29\u653E\uFF1A_PARAM7_\uFF0C\u89D2\u5EA6\uFF1A_PARAM8_\uFF09","Source layer":"\u6E90\u56FE\u5C42","Source camera":"\u6E90\u76F8\u673A","Destination layer":"\u76EE\u6807\u56FE\u5C42","Destination camera":"\u76EE\u6807\u76F8\u673A","Clone X position":"\u514B\u9686X\u4F4D\u7F6E","Clone Y position":"\u514B\u9686Y\u4F4D\u7F6E","Clone zoom":"\u514B\u9686\u7F29\u653E","Clone angle":"\u514B\u9686\u89D2\u5EA6","CrazyGames SDK v3":"CrazyGames SDK v3","Allow games to be hosted on CrazyGames website, display ads and interact with CrazyGames user accounts.":"\u5141\u8BB8\u6E38\u620F\u6258\u7BA1\u5728CrazyGames\u7F51\u7AD9\uFF0C\u663E\u793A\u5E7F\u544A\u5E76\u4E0ECrazyGames\u7528\u6237\u8D26\u6237\u4EA4\u4E92\u3002","Third-party":"\u7B2C\u4E09\u65B9","Get link account response.":"\u83B7\u53D6\u94FE\u63A5\u5E10\u6237\u54CD\u5E94\u3002","Link account response":"\u94FE\u63A5\u5E10\u6237\u54CD\u5E94","the last error from the CrazyGames API.":"CrazyGames API\u7684\u6700\u540E\u4E00\u4E2A\u9519\u8BEF\u3002","Get last error":"\u83B7\u53D6\u4E0A\u4E00\u4E2A\u9519\u8BEF","CrazyGames API last error is":"CrazyGames API\u7684\u4E0A\u4E00\u4E2A\u9519\u8BEF\u662F","Check if an user is signed into CrazyGames. If signed in, retrieves username and profile picture.":"\u68C0\u67E5\u7528\u6237\u662F\u5426\u767B\u5F55\u5230CrazyGames\u3002 \u5982\u679C\u5DF2\u767B\u5F55\uFF0C\u5219\u68C0\u7D22\u7528\u6237\u540D\u548C\u4E2A\u4EBA\u8D44\u6599\u56FE\u7247\u3002","Check and load if an user is signed in CrazyGames":"\u68C0\u67E5\u5E76\u52A0\u8F7D\u7528\u6237\u662F\u5426\u767B\u5F55\u5230CrazyGames","Check if user is signed in CrazyGames":"\u68C0\u67E5\u7528\u6237\u662F\u5426\u767B\u5F55\u5230CrazyGames","Check if the user is signed in.":"\u68C0\u67E5\u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55\u3002","User is signed in":"\u7528\u6237\u5DF2\u767B\u5F55","Return an invite link.":"\u8FD4\u56DE\u9080\u8BF7\u94FE\u63A5\u3002","Invite link":"\u9080\u8BF7\u94FE\u63A5","Room id":"\u623F\u95F4\u7F16\u53F7","Display an invite button.":"\u663E\u793A\u9080\u8BF7\u6309\u94AE\u3002","Display invite button":"\u663E\u793A\u9080\u8BF7\u6309\u94AE","Display an invite button for the room id: _PARAM1_":"\u663E\u793A\u623F\u95F4\u7F16\u53F7\u7684\u9080\u8BF7\u6309\u94AE: _PARAM1_","Load CrazyGames SDK.":"\u52A0\u8F7DCrazyGames SDK\u3002","Load SDK":"\u52A0\u8F7DSDK","Load CrazyGames SDK":"\u52A0\u8F7DCrazyGames SDK","Check if the CrazyGames SDK is ready to be used.":"\u68C0\u67E5CrazyGames SDK\u662F\u5426\u51C6\u5907\u597D\u4F7F\u7528\u3002","CrazyGames SDK is ready":"CrazyGames SDK\u5DF2\u51C6\u5907\u5C31\u7EEA","Let CrazyGames know gameplay started.":"\u544A\u77E5CrazyGames\u6E38\u620F\u73A9\u6CD5\u5DF2\u5F00\u59CB\u3002","Gameplay started":"\u6E38\u620F\u73A9\u6CD5\u5DF2\u5F00\u59CB","Let CrazyGames know gameplay started":"\u544A\u77E5CrazyGames\u6E38\u620F\u73A9\u6CD5\u5DF2\u5F00\u59CB","Let CrazyGames know gameplay stopped.":"\u544A\u77E5CrazyGames\u6E38\u620F\u73A9\u6CD5\u5DF2\u505C\u6B62\u3002","Gameplay stopped":"\u6E38\u620F\u73A9\u6CD5\u5DF2\u505C\u6B62","Let CrazyGames know gameplay stopped":"\u544A\u77E5CrazyGames\u6E38\u620F\u73A9\u6CD5\u5DF2\u505C\u6B62","Let CrazyGames know loading started.":"\u544A\u77E5CrazyGames\u6E38\u620F\u52A0\u8F7D\u5DF2\u5F00\u59CB\u3002","Loading started":"\u6E38\u620F\u52A0\u8F7D\u5DF2\u5F00\u59CB","Let CrazyGames know loading started":"\u544A\u77E5CrazyGames\u6E38\u620F\u52A0\u8F7D\u5DF2\u5F00\u59CB","Let CrazyGames know loading stopped.":"\u544A\u77E5CrazyGames\u6E38\u620F\u52A0\u8F7D\u5DF2\u505C\u6B62\u3002","Loading stopped":"\u6E38\u620F\u52A0\u8F7D\u5DF2\u505C\u6B62","Let CrazyGames know loading stopped":"\u544A\u77E5CrazyGames\u6E38\u620F\u52A0\u8F7D\u5DF2\u505C\u6B62","Display a video ad. The game is automatically muted while the video is playing.":"\u663E\u793A\u89C6\u9891\u5E7F\u544A\u3002\u6E38\u620F\u5728\u64AD\u653E\u89C6\u9891\u65F6\u4F1A\u81EA\u52A8\u9759\u97F3\u3002","Display video ad":"\u663E\u793A\u89C6\u9891\u5E7F\u544A","Display _PARAM1_ video ad":"\u663E\u793A_PARAM1_\u89C6\u9891\u5E7F\u544A","Ad Type":"\u5E7F\u544A\u7C7B\u578B","Checks if a video ad just finished playing successfully.":"\u68C0\u67E5\u89C6\u9891\u5E7F\u544A\u662F\u5426\u5DF2\u6210\u529F\u64AD\u653E\u5B8C\u6BD5\u3002","Video ad just finished playing":"\u89C6\u9891\u5E7F\u544A\u5DF2\u6210\u529F\u64AD\u653E\u5B8C\u6BD5","Checks if a video ad is playing.":"\u68C0\u67E5\u662F\u5426\u5728\u64AD\u653E\u89C6\u9891\u5E7F\u544A\u3002","Video ad is playing":"\u6B63\u5728\u64AD\u653E\u89C6\u9891\u5E7F\u544A","Check if the user changed.":"\u68C0\u67E5\u7528\u6237\u662F\u5426\u5DF2\u66F4\u6539\u3002","User changed":"\u7528\u6237\u5DF2\u66F4\u6539","Check if a video ad had an error.":"\u68C0\u67E5\u89C6\u9891\u5E7F\u544A\u662F\u5426\u5B58\u5728\u9519\u8BEF\u3002","Video ad had an error":"\u89C6\u9891\u5E7F\u544A\u51FA\u73B0\u9519\u8BEF","Generate an invite link to invite friends to join your game sessions. This URL can be added to the clipboard or displayed in the game to let the user select it.":"\u751F\u6210\u4E00\u4E2A\u9080\u8BF7\u94FE\u63A5\uFF0C\u9080\u8BF7\u670B\u53CB\u52A0\u5165\u60A8\u7684\u6E38\u620F\u4F1A\u8BDD\u3002\u6B64 URL \u53EF\u4EE5\u6DFB\u52A0\u5230\u526A\u8D34\u677F\uFF0C\u4E5F\u53EF\u4EE5\u663E\u793A\u5728\u6E38\u620F\u4E2D\uFF0C\u8BA9\u7528\u6237\u9009\u62E9\u3002","Generate an invite link":"\u751F\u6210\u4E00\u4E2A\u9080\u8BF7\u94FE\u63A5","Generate an invite link for _PARAM1_":"\u4E3A_PARAM1_\u751F\u6210\u4E00\u4E2A\u9080\u8BF7\u94FE\u63A5","Display an happy time by emitting sparkling confetti. The celebration should remain a special moment.":"\u901A\u8FC7\u91CA\u653E\u95EA\u95EA\u53D1\u4EAE\u7684\u5F69\u5E26\u5C55\u73B0\u6B22\u4E50\u65F6\u5149\u3002\u5E86\u795D\u6D3B\u52A8\u5E94\u8BE5\u662F\u4E00\u4E2A\u7279\u6B8A\u7684\u65F6\u523B\u3002","Display happy time":"\u5C55\u793A\u5FEB\u4E50\u65F6\u5149","Scan for ad blockers.":"\u626B\u63CF\u5E7F\u544A\u62E6\u622A\u5668\u3002","Scan for ad blockers":"\u626B\u63CF\u5E7F\u544A\u62E6\u622A\u5668","Check if user is using an ad blocker. This condition is always false before the \"Scan for ad blockers\" is called.":"\u68C0\u67E5\u7528\u6237\u662F\u5426\u6B63\u5728\u4F7F\u7528\u5E7F\u544A\u62E6\u622A\u5668\u3002\u5728\u8C03\u7528\u201C\u626B\u63CF\u5E7F\u544A\u62E6\u622A\u5668\u201D\u4E4B\u524D\uFF0C\u6B64\u6761\u4EF6\u59CB\u7EC8\u4E3A\u5047\u3002","Ad blocker is detected":"\u68C0\u6D4B\u5230\u5E7F\u544A\u62E6\u622A\u5668","Display a banner that can be called once per 60 seconds.":"\u663E\u793A\u4E00\u4E2A\u53EF\u4EE5\u6BCF60\u79D2\u8C03\u7528\u4E00\u6B21\u7684\u6A2A\u5E45\u3002","Display a banner":"\u663E\u793A\u4E00\u4E2A\u6A2A\u5E45","Display a banner: _PARAM1_ at position _PARAM3_ ; _PARAM4_ with size _PARAM2_":"\u663E\u793A\u6A2A\u5E45\uFF1A_PARAM1_ \u5728\u4F4D\u7F6E _PARAM3_ \uFF1B _PARAM4_ \u4EE5\u5C3A\u5BF8 _PARAM2_","Banner name":"\u6A2A\u5E45\u540D\u79F0","Ad size":"\u5E7F\u544A\u5C3A\u5BF8","Position X":"\u4F4D\u7F6E X","Position Y":"\u4F4D\u7F6E Y","Hide a banner.":"\u9690\u85CF\u6A2A\u5E45\u3002","Hide a banner":"\u9690\u85CF\u6A2A\u5E45","Hide the banner: _PARAM1_":"\u9690\u85CF\u6A2A\u5E45\uFF1A_PARAM1_","Hide all banners.":"\u9690\u85CF\u6240\u6709\u6A2A\u5E45\u3002","Hide all banners":"\u9690\u85CF\u6240\u6709\u6A2A\u5E45","Hide all the banners":"\u9690\u85CF\u6240\u6709\u6A2A\u5E45","Hide the invite button.":"\u9690\u85CF\u9080\u8BF7\u6309\u94AE\u3002","Hide invite button":"\u9690\u85CF\u9080\u8BF7\u6309\u94AE","Get the environment.":"\u83B7\u53D6\u73AF\u5883\u3002","Get the environment":"\u83B7\u53D6\u73AF\u5883","display environment into _PARAM1_":"\u5728_PARAM1_\u4E2D\u663E\u793A\u73AF\u5883","Retrieve user data.":"\u68C0\u7D22\u7528\u6237\u6570\u636E\u3002","Retrieve user data":"\u68C0\u7D22\u7528\u6237\u6570\u636E","Show CrazyGames login window.":"\u663E\u793A CrazyGames \u767B\u5F55\u7A97\u53E3\u3002","Show CrazyGames login window":"\u663E\u793A CrazyGames \u767B\u5F55\u7A97\u53E3","Show account link prompt.":"\u663E\u793A\u5E10\u6237\u94FE\u63A5\u63D0\u793A\u3002","Show account link prompt":"\u663E\u793A\u5E10\u6237\u94FE\u63A5\u63D0\u793A","the username.":"\u7528\u6237\u540D\u3002","Username":"\u7528\u6237\u540D","Username is":"\u7528\u6237\u540D\u662F","the CrazyGames User ID.":"CrazyGames \u7528\u6237ID\u3002","CrazyGames User ID":"CrazyGames \u7528\u6237ID","CrazyGames user ID is":"CrazyGames\u7528\u6237ID\u662F","Gets the signed-in user's profile picture URL.":"Gets the signed-in user's profile picture URL.","Gets the signed-in user's profile picture URL":"Gets the signed-in user's profile picture URL","Return true when the user prefers to instantly join a lobby.":"\u5F53\u7528\u6237\u503E\u5411\u4E8E\u7ACB\u5373\u52A0\u5165\u5927\u5802\u65F6\u8FD4\u56DE true\u3002","Is instantly joining a lobby":"\u7ACB\u5373\u52A0\u5165\u5927\u5802","Return true if the user prefers the chat disabled.":"\u5982\u679C\u7528\u6237\u559C\u6B22\u7981\u7528\u804A\u5929\uFF0C\u5219\u8FD4\u56DE true\u3002","Is the user chat disabled":"\u7528\u6237\u7684\u804A\u5929\u662F\u5426\u5DF2\u7981\u7528","Retrieves user system info, browser, version and device.":"\u68C0\u7D22\u7528\u6237\u7CFB\u7EDF\u4FE1\u606F\uFF0C\u6D4F\u89C8\u5668\u3001\u7248\u672C\u548C\u8BBE\u5907\u3002","Retrieves user system info":"\u68C0\u7D22\u7528\u6237\u7CFB\u7EDF\u4FE1\u606F","Get invite parameters if user is invited to this game.":"\u5982\u679C\u7528\u6237\u88AB\u9080\u8BF7\u5230\u8FD9\u4E2A\u6E38\u620F\u4E2D\uFF0C\u5219\u83B7\u53D6\u9080\u8BF7\u53C2\u6570\u3002","Get invite parameters":"\u83B7\u53D6\u9080\u8BF7\u53C2\u6570","Param":"\u53C2\u6570","Save the session data.":"\u4FDD\u5B58\u4F1A\u8BDD\u6570\u636E\u3002","Save session data":"\u4FDD\u5B58\u4F1A\u8BDD\u6570\u636E","Save session data, with the id: _PARAM1_ to: _PARAM2_":"\u4FDD\u5B58\u4F1A\u8BDD\u6570\u636E\uFF0Cid\uFF1A_PARAM1_ \u5230\uFF1A_PARAM2_","Id":"Id","Get user session data, if there is no saved data, \"null\" will be returned.":"\u83B7\u53D6\u7528\u6237\u4F1A\u8BDD\u6570\u636E\uFF0C\u5982\u679C\u6CA1\u6709\u4FDD\u5B58\u7684\u6570\u636E\uFF0C\u5C06\u8FD4\u56DE\"null\"\u3002","Get user session data":"\u83B7\u53D6\u7528\u6237\u4F1A\u8BDD\u6570\u636E","the availability of the user's account.":"\u7528\u6237\u8D26\u6237\u7684\u53EF\u7528\u6027\u3002","Is user account available":"\u7528\u6237\u8D26\u6237\u662F\u5426\u53EF\u7528","The CrazyGames user account is available":"CrazyGames \u7528\u6237\u8D26\u6237\u53EF\u7528","Retrieve the user's session token for authentication.":"\u68C0\u7D22\u7528\u6237\u7684\u4F1A\u8BDD\u4EE4\u724C\u8FDB\u884C\u8EAB\u4EFD\u9A8C\u8BC1\u3002","Get User Token":"\u83B7\u53D6\u7528\u6237\u4EE4\u724C","Retrieve the authentication token from Xsolla.":"\u4ECE Xsolla \u68C0\u7D22\u8EAB\u4EFD\u9A8C\u8BC1\u4EE4\u724C\u3002","Get Xsolla Token":"\u83B7\u53D6 Xsolla \u4EE4\u724C","Generate Xsolla token.":"\u751F\u6210 Xsolla \u4EE4\u724C\u3002","Generate Xsolla token":"\u751F\u6210 Xsolla \u4EE4\u724C","Cursor movement conditions":"\u5149\u6807\u79FB\u52A8\u6761\u4EF6","Conditions to check the cursor movement (still or moving).":"\u7528\u4E8E\u68C0\u67E5\u5149\u6807\u79FB\u52A8\uFF08\u9759\u6B62\u6216\u8FD0\u52A8\uFF09\u7684\u6761\u4EF6\u3002","Check if the cursor has stayed still for the specified time on the default layer.":"\u68C0\u67E5\u5149\u6807\u5728\u9ED8\u8BA4\u56FE\u5C42\u4E0A\u662F\u5426\u4FDD\u6301\u9759\u6B62\u7684\u6307\u5B9A\u65F6\u95F4\u3002","Cursor stays still":"\u5149\u6807\u4FDD\u6301\u9759\u6B62","Cursor has stayed still for _PARAM1_ seconds":"\u5149\u6807\u5DF2\u7ECF\u9759\u6B62_PARAM1_\u79D2","Check if the cursor is moving on the default layer.":"\u68C0\u67E5\u5149\u6807\u5728\u9ED8\u8BA4\u56FE\u5C42\u4E0A\u662F\u5426\u79FB\u52A8\u3002","Cursor is moving":"\u5149\u6807\u6B63\u5728\u79FB\u52A8","Cursor type":"\u5149\u6807\u7C7B\u578B","Provides an action to change the type of the cursor, and a behavior to change the cursor when an object is hovered.":"\u63D0\u4F9B\u4E00\u4E2A\u66F4\u6539\u5149\u6807\u7C7B\u578B\u7684\u52A8\u4F5C\uFF0C\u4EE5\u53CA\u4E00\u4E2A\u5728\u5BF9\u8C61\u60AC\u505C\u65F6\u66F4\u6539\u5149\u6807\u7684\u884C\u4E3A\u3002","Change the type of the cursor.":"\u66F4\u6539\u5149\u6807\u7684\u7C7B\u578B\u3002","Change the cursor to _PARAM1_":"\u66F4\u6539\u5149\u6807\u4E3A_PARAM1_","The new cursor type":"\u65B0\u7684\u5149\u6807\u7C7B\u578B","List of available cursors on https://developer.mozilla.org/en-US/docs/Web/CSS/cursor":"\u5728https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\u4E0A\u5217\u51FA\u7684\u53EF\u7528\u5149\u6807","Do change the type of the cursor.":"\u66F4\u6539\u5149\u6807\u7C7B\u578B\u3002","Do change cursor type":"\u66F4\u6539\u5149\u6807\u7C7B\u578B","Do change the cursor to _PARAM1_":"\u786E\u5B9E\u66F4\u6539\u5149\u6807\u4E3A_PARAM1_","Change the cursor appearence when the object is hovered (on Windows, macOS or Linux).":"\u5728\u5BF9\u8C61\u60AC\u505C\u65F6\u66F4\u6539\u5149\u6807\u5916\u89C2\uFF08\u5728 Windows\u3001macOS \u6216 Linux \u4E0A\uFF09\u3002","Custom cursor when hovered":"\u60AC\u505C\u65F6\u7684\u81EA\u5B9A\u4E49\u5149\u6807","The cursor type":"\u5149\u6807\u7C7B\u578B","See https://developer.mozilla.org/en-US/docs/Web/CSS/cursor for a list of possible cursors.":"\u8BF7\u53C2\u9605https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\u4EE5\u83B7\u53D6\u53EF\u80FD\u5149\u6807\u5217\u8868\u3002","Curved movement":"\u66F2\u7EBF\u8FD0\u52A8","Move objects on curved paths.":"\u5728\u66F2\u7EBF\u8DEF\u5F84\u4E0A\u79FB\u52A8\u5BF9\u8C61\u3002","Append a cubic Bezier curve at the end of the path.":"\u5728\u8DEF\u5F84\u672B\u5C3E\u6DFB\u52A0\u4E00\u4E2A\u4E09\u6B21\u8D1D\u585E\u5C14\u66F2\u7EBF\u3002","Append a curve":"\u6DFB\u52A0\u4E00\u4E2A\u66F2\u7EBF","Append a curve to the path _PARAM1_ relatively to the end: _PARAM8_, first control point: _PARAM2_ ; _PARAM3_, second control point: _PARAM4_ ; _PARAM5_, destination: _PARAM6_ ; _PARAM7_":"\u76F8\u5BF9\u4E8E\u7ED3\u675F\uFF0C\u5C06\u4E00\u6761\u66F2\u7EBF\u8FFD\u52A0\u5230\u8DEF\u5F84_PARAM1_\uFF1A\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9\uFF1A_PARAM2_ \uFF1B\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9\uFF1A_PARAM3_ \uFF1B_PARAM4_ \uFF1B_PARAM5_ \uFF1B\u76EE\u6807\uFF1A_PARAM6_ \uFF1B_PARAM7_","Path name":"\u8DEF\u5F84\u540D\u79F0","First control point X":"\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9X","First control point Y":"\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9Y","Second Control point X":"\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9X","Second Control point Y":"\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9Y","Destination point X":"\u76EE\u6807\u70B9X","Destination point Y":"\u76EE\u6807\u70B9Y","Relative":"\u76F8\u5BF9\u7684","Append a cubic Bezier curve to the end of an object's path. The first control point is symmetrical to the last control point of the path.":"\u5C06\u4E09\u6B21\u8D1D\u585E\u5C14\u66F2\u7EBF\u8FFD\u52A0\u5230\u5BF9\u8C61\u8DEF\u5F84\u7684\u672B\u5C3E\u3002 \u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9\u5BF9\u79F0\u4E8E\u8DEF\u5F84\u7684\u6700\u540E\u4E00\u4E2A\u63A7\u5236\u70B9\u3002","Append a smooth curve":"\u8FFD\u52A0\u4E00\u4E2A\u5E73\u6ED1\u66F2\u7EBF","Append a smooth curve to the path _PARAM1_ relatively to the end: _PARAM6_, second control point: _PARAM2_ ; _PARAM3_, destination: _PARAM4_ ; _PARAM5_":"\u76F8\u5BF9\u4E8E\u7ED3\u675F\uFF0C\u5C06\u5E73\u6ED1\u66F2\u7EBF\u8FFD\u52A0\u5230\u8DEF\u5F84_PARAM1_\uFF1A\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9\uFF1A_PARAM2_ \uFF1B_PARAM3_ \uFF1B\u76EE\u6807\uFF1A_PARAM4_ \uFF1B_PARAM5_","Append a line at the end of the path.":"\u5728\u8DEF\u5F84\u672B\u5C3E\u8FFD\u52A0\u4E00\u6761\u7EBF\u3002","Append a line":"\u8FFD\u52A0\u4E00\u6761\u7EBF","Append a line to the path _PARAM1_ relatively to the end: _PARAM4_, destination: _PARAM2_ ; _PARAM3_":"\u76F8\u5BF9\u4E8E\u7ED3\u675F\uFF0C\u5C06\u4E00\u6761\u7EBF\u8FFD\u52A0\u5230\u8DEF\u5F84_PARAM1_\uFF1A\u76EE\u6807\uFF1A_PARAM2_ \uFF1B_PARAM3_","Append a line to close the path.":"\u8FFD\u52A0\u4E00\u6761\u7EBF\u5173\u95ED\u8DEF\u5F84\u3002","Close a path":"\u5173\u95ED\u8DEF\u5F84","Close the path _PARAM1_":"\u5173\u95ED\u8DEF\u5F84_PARAM1_","Create a path from SVG commands, for instance \"M 0,0 C 55,0 100,45 100,100\". Commands are: M = Move, C = Curve, S = Smooth, L = Line. Lower case is for relative positions. The preferred way to build the commands is to use an external SVG editor like Inkscape.":"\u4ECESVG\u547D\u4EE4\u521B\u5EFA\u8DEF\u5F84\uFF0C\u4F8B\u5982\" M 0,0 C 55,0 100,45 100,100\"\u3002 \u547D\u4EE4\u662F\uFF1AM = \u79FB\u52A8\uFF0CC = \u66F2\u7EBF\uFF0CS = \u5E73\u6ED1\uFF0CL = \u7EBF\u3002 \u5C0F\u5199\u7528\u4E8E\u76F8\u5BF9\u4F4D\u7F6E\u3002 \u6784\u5EFA\u547D\u4EE4\u7684\u9996\u9009\u65B9\u6CD5\u662F\u4F7F\u7528\u5916\u90E8SVG\u7F16\u8F91\u5668\uFF0C\u5982Inkscape\u3002","Create a path from SVG":"\u4ECESVG\u521B\u5EFA\u8DEF\u5F84","Create the path _PARAM1_ from the SVG path commands _PARAM2_":"\u4ECESVG\u547D\u4EE4\u521B\u5EFA\u8DEF\u5F84_PARAM1_","SVG commands":"SVG\u547D\u4EE4","Return the SVG commands of a path.":"\u8FD4\u56DE\u8DEF\u5F84\u7684SVG\u547D\u4EE4\u3002","SVG path commands":"SVG\u8DEF\u5F84\u547D\u4EE4","Delete a path from the memory.":"\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u8DEF\u5F84\u3002","Delete a path":"\u5220\u9664\u8DEF\u5F84","Delete the path: _PARAM1_":"\u5220\u9664\u8DEF\u5F84\uFF1A_PARAM1_","Append a path to another path.":"\u5C06\u8DEF\u5F84\u8FFD\u52A0\u5230\u53E6\u4E00\u8DEF\u5F84\u3002","Append a path":"\u8FFD\u52A0\u8DEF\u5F84","Append the path _PARAM2_ to the path _PARAM1_":"\u5C06_PATH2_\u8FFD\u52A0\u5230\u8DEF\u5F84_PATH1_","Name of the path to modify":"\u8981\u4FEE\u6539\u7684\u8DEF\u5F84\u540D\u79F0","Name of the path to add to the first one":"\u8981\u6DFB\u52A0\u5230\u7B2C\u4E00\u4E2A\u8DEF\u5F84\u7684\u8DEF\u5F84\u540D\u79F0","Duplicate a path.":"\u590D\u5236\u8DEF\u5F84\u3002","Duplicate a path":"\u590D\u5236\u8DEF\u5F84","Create path _PARAM1_ as a duplicate of path _PARAM2_":"\u5C06\u8DEF\u5F84_PARAM1_\u521B\u5EFA\u4E3A\u8DEF\u5F84_PARAM2_\u7684\u526F\u672C","Name of the path to create":"\u8981\u521B\u5EFA\u7684\u8DEF\u5F84\u540D\u79F0","Name of the source path":"\u6E90\u8DEF\u5F84\u540D\u79F0","Append a path to another path. The appended path is rotated to have a smooth junction.":"\u8FFD\u52A0\u8DEF\u5F84\u5230\u53E6\u4E00\u6761\u8DEF\u5F84\u3002\u8FFD\u52A0\u7684\u8DEF\u5F84\u5C06\u65CB\u8F6C\u4EE5\u5B9E\u73B0\u5E73\u6ED1\u8FDE\u63A5\u3002","Append a rotated path":"\u8FFD\u52A0\u65CB\u8F6C\u8DEF\u5F84","Append the path _PARAM2_ rotated to connect to the path _PARAM1_ flip: _PARAM3_":"\u5C06\u8DEF\u5F84_PARAM2_\u65CB\u8F6C\uFF0C\u8FDE\u63A5\u5230\u8DEF\u5F84_PARAM1_\uFF0C\u7FFB\u8F6C\uFF1A_PARAM3_","Flip the appended path":"\u7FFB\u8F6C\u8FFD\u52A0\u7684\u8DEF\u5F84","Return the speed scale on Y axis. This is used to change the view point of a path (top-dwon or isometry).":"\u8FD4\u56DEY\u8F74\u4E0A\u7684\u901F\u5EA6\u6BD4\u4F8B\u3002\u7528\u4E8E\u6539\u53D8\u8DEF\u5F84\u7684\u89C6\u89D2\uFF08\u4FEF\u89C6\u6216\u7B49\u89D2\uFF09\u3002","Speed scale Y":"\u901F\u5EA6\u6BD4\u4F8BY","Change the speed scale on Y axis. This allows to change the view point of a path (top-dwon or isometry).":"\u6539\u53D8Y\u8F74\u4E0A\u7684\u901F\u5EA6\u6BD4\u4F8B\u3002\u5141\u8BB8\u66F4\u6539\u8DEF\u5F84\u7684\u89C6\u89D2\uFF08\u4FEF\u89C6\u6216\u7B49\u89D2\uFF09\u3002","Change the speed scale Y of the path _PARAM1_ to _PARAM2_":"\u5C06\u8DEF\u5F84_PARAM1_\u7684Y\u8F74\u901F\u5EA6\u6BD4\u4F8B\u66F4\u6539\u4E3A_PARAM2_","Speed scale on Y axis (0.5 for pixel isometry)":"Y\u8F74\u901F\u5EA6\u6BD4\u4F8B\uFF08\u50CF\u7D20\u7B49\u89D20.5\uFF09","Invert a path, the end becomes the beginning.":"\u53CD\u8F6C\u8DEF\u5F84\uFF0C\u672B\u7AEF\u53D8\u4E3A\u5F00\u5934\u3002","Invert a path":"\u53CD\u8F6C\u8DEF\u5F84","Invert the path _PARAM1_":"\u53CD\u8F6C\u8DEF\u5F84_PARAM1_","Flip a path.":"\u7FFB\u8F6C\u8DEF\u5F84\u3002","Flip a path":"\u7FFB\u8F6C\u8DEF\u5F84","Flip the path _PARAM1_":"\u7FFB\u8F6C\u8DEF\u5F84_PARAM1_","Flip a path horizontally.":"\u6C34\u5E73\u7FFB\u8F6C\u8DEF\u5F84\u3002","Flip a path horizontally":"\u6C34\u5E73\u7FFB\u8F6C\u8DEF\u5F84","Flip the path _PARAM1_ horizontally":"\u6C34\u5E73\u7FFB\u8F6C\u8DEF\u5F84_PARAM1_","Flip a path vertically.":"\u5782\u76F4\u7FFB\u8F6C\u8DEF\u5F84\u3002","Flip a path vertically":"\u5782\u76F4\u7FFB\u8F6C\u8DEF\u5F84","Flip the path _PARAM1_ vertically":"\u5782\u76F4\u7FFB\u8F6C\u8DEF\u5F84_PARAM1_","Scale a path.":"\u7F29\u653E\u8DEF\u5F84\u3002","Scale a path":"\u7F29\u653E\u8DEF\u5F84","Scale the path _PARAM1_ by _PARAM2_ ; _PARAM3_":"\u5C06\u8DEF\u5F84_PARAM1_\u7F29\u653E_PARAM2_\uFF1B_PARAM3_","Scale on X axis":"X\u8F74\u7F29\u653E","Scale on Y axis":"Y\u8F74\u7F29\u653E","Rotate a path.":"\u65CB\u8F6C\u8DEF\u5F84\u3002","Rotate a path":"\u65CB\u8F6C\u8DEF\u5F84","Rotate _PARAM2_\xB0 the path _PARAM1_":"\u65CB\u8F6C\u8DEF\u5F84_PARAM1_ _PARAM2_\xB0","Rotation angle":"\u65CB\u8F6C\u89D2\u5EA6","Check if a path is closed.":"\u68C0\u67E5\u8DEF\u5F84\u662F\u5426\u95ED\u5408\u3002","Is closed":"\u662F\u5426\u95ED\u5408","The path _PARAM1_ is closed":"\u8DEF\u5F84_PARAM1_\u5DF2\u95ED\u5408","Return the position on X axis of the path for a given length.":"\u8FD4\u56DE\u7ED9\u5B9A\u957F\u5EA6\u7684\u8DEF\u5F84\u5728X\u8F74\u4E0A\u7684\u4F4D\u7F6E\u3002","Path X":"\u8DEF\u5F84X","Length on the path":"\u8DEF\u5F84\u957F\u5EA6","Return the position on Y axis of the path for a given length.":"\u8FD4\u56DE\u7ED9\u5B9A\u957F\u5EA6\u7684\u8DEF\u5F84\u5728Y\u8F74\u4E0A\u7684\u4F4D\u7F6E\u3002","Path Y":"\u8DEF\u5F84Y","Return the direction angle of the path for a given length (in degree).":"\u8FD4\u56DE\u7ED9\u5B9A\u957F\u5EA6\u7684\u8DEF\u5F84\u7684\u65B9\u5411\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u3002","Path angle":"\u8DEF\u5F84\u89D2\u5EA6","Return the length of the path.":"\u8FD4\u56DE\u8DEF\u5F84\u7684\u957F\u5EA6\u3002","Path length":"\u8DEF\u5F84\u957F\u5EA6","Return the displacement on X axis of the path end.":"\u8FD4\u56DE\u8DEF\u5F84\u672B\u7AEF\u5728X\u8F74\u4E0A\u7684\u4F4D\u79FB\u3002","Path end X":"\u8DEF\u5F84\u672B\u7AEFX","Return the displacement on Y axis of the path end.":"\u8FD4\u56DE\u8DEF\u5F84\u672B\u7AEF\u5728Y\u8F74\u4E0A\u7684\u4F4D\u79FB\u3002","Path end Y":"\u8DEF\u5F84\u672B\u7AEFY","Return the number of lines or curves that make the path.":"\u8FD4\u56DE\u7EC4\u6210\u8DEF\u5F84\u7684\u7EBF\u6761\u6216\u66F2\u7EBF\u7684\u6570\u91CF\u3002","Path element count":"\u8DEF\u5F84\u5143\u7D20\u8BA1\u6570","Return the origin position on X axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u5728X\u8F74\u4E0A\u7684\u539F\u59CB\u4F4D\u7F6E\u3002","Origin X":"\u539F\u59CBX","Curve index":"\u66F2\u7EBF\u7D22\u5F15","Return the origin position on Y axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u5728Y\u8F74\u4E0A\u7684\u539F\u59CB\u4F4D\u7F6E\u3002","Origin Y":"\u539F\u59CBY","Return the first control point position on X axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9\u5728X\u8F74\u4E0A\u7684\u4F4D\u7F6E\u3002","First control X":"\u7B2C\u4E00\u4E2A\u63A7\u5236X","Return the first control point position on Y axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9\u5728Y\u8F74\u4E0A\u7684\u4F4D\u7F6E\u3002","First control Y":"\u7B2C\u4E00\u4E2A\u63A7\u5236Y","Return the second control point position on X axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9\u5728X\u8F74\u4E0A\u7684\u4F4D\u7F6E\u3002","Second control X":"\u7B2C\u4E8C\u4E2A\u63A7\u5236X","Return the second control point position on Y axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9\u5728Y\u8F74\u4E0A\u7684\u4F4D\u7F6E\u3002","Second control Y":"\u7B2C\u4E8C\u4E2A\u63A7\u5236Y","Return the target position on X axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A\u76EE\u6807\u4F4D\u7F6E\u5728X\u8F74\u4E0A\u7684\u4F4D\u7F6E\u3002","Return the target position on Y axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A\u76EE\u6807\u4F4D\u7F6E\u5728Y\u8F74\u4E0A\u7684\u4F4D\u7F6E\u3002","Path exists.":"\u8DEF\u5F84\u5B58\u5728\u3002","Path exists":"\u8DEF\u5F84\u5B58\u5728","Path _PARAM1_ exists":"\u8DEF\u5F84 _PARAM1_ \u5B58\u5728","Move objects on curved paths in a given duration and tween easing function.":"\u5728\u7ED9\u5B9A\u7684\u6301\u7EED\u65F6\u95F4\u548C\u7F13\u52A8\u51FD\u6570\u4E2D\u6CBF\u7740\u66F2\u7EBF\u79FB\u52A8\u5BF9\u8C61\u3002","Movement on a curve (duration-based)":"\u66F2\u7EBF\u4E0A\u7684\u8FD0\u52A8\uFF08\u57FA\u4E8E\u6301\u7EED\u65F6\u95F4\uFF09","Rotation offset":"\u65CB\u8F6C\u504F\u79FB","Flip on X to go back":"\u5728 X \u8F74\u7FFB\u8F6C\u4EE5\u8FD4\u56DE","Flip on Y to go back":"\u5728 Y \u8F74\u7FFB\u8F6C\u4EE5\u8FD4\u56DE","Speed scale":"\u901F\u5EA6\u6BD4\u4F8B","Pause duration before going back":"\u8FD4\u56DE\u4E4B\u524D\u7684\u6682\u505C\u6301\u7EED\u65F6\u95F4","Viewpoint":"\u89C2\u70B9","Set the the object on the path according to the current length.":"\u6839\u636E\u5F53\u524D\u957F\u5EA6\u8BBE\u7F6E\u8DEF\u5F84\u4E0A\u7684\u5BF9\u8C61","Update position":"\u66F4\u65B0\u4F4D\u7F6E","Update the position of _PARAM0_ on the path":"\u66F4\u65B0\u8DEF\u5F84\u4E0A_PARAM0_\u7684\u4F4D\u7F6E","Move the object to a position by following a path.":"\u6CBF\u7740\u8DEF\u5F84\u5C06\u5BF9\u8C61\u79FB\u52A8\u5230\u4E00\u4E2A\u4F4D\u7F6E","Move on path to a position":"\u5728\u8DEF\u5F84\u4E0A\u79FB\u52A8\u5230\u4E00\u4E2A\u4F4D\u7F6E","Move _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"\u5C06_PARAM0_\u79FB\u52A8\u5230_PARAM6_ ; _PARAM7_\u7684\u8DEF\u5F84\u4E0A\uFF1A_PARAM2_\u5728_PARAM4_\u79D2\u5185\uFF0C_PARAM3_\u6B21\u91CD\u590D\u5E76\u91C7\u7528_PARAM5_\u7684\u7F13\u52A8","The path can be define with the \"Append curve\" action.":"\u8DEF\u5F84\u53EF\u4EE5\u901A\u8FC7\u201C\u9644\u52A0\u66F2\u7EBF\u201D\u52A8\u4F5C\u6765\u5B9A\u4E49","Number of repetitions":"\u91CD\u590D\u6B21\u6570","Destination X":"\u76EE\u6807X","Destination Y":"\u76EE\u6807Y","Move the object to a position by following a path and go back.":"\u6309\u7167\u8DEF\u5F84\u5C06\u5BF9\u8C61\u79FB\u52A8\u5230\u4E00\u4E2A\u4F4D\u7F6E\uFF0C\u7136\u540E\u8FD4\u56DE","Move back and forth to a position":"\u5F80\u8FD4\u79FB\u52A8\u5230\u4E00\u4E2A\u4F4D\u7F6E","Move back and forth _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM8_ seconds before going back and loop: _PARAM9_":"\u5F80\u8FD4\u79FB\u52A8_PARAM0_\u5230_PARAM6_ ; _PARAM7_\u7684\u8DEF\u5F84\u4E0A\uFF1A_PARAM2_\u5728_PARAM4_\u79D2\u5185\uFF0C_PARAM3_\u6B21\u91CD\u590D\u5E76\u91C7\u7528_PARAM5_\u7684\u7F13\u52A8\uFF0C\u5728\u8FD4\u56DE\u524D\u7B49\u5F85_PARAM8_\u79D2\u548C\u5FAA\u73AF:_PARAM9_","Duration to wait before going back":"\u7B49\u5F85\u8FD4\u56DE\u524D\u7684\u6301\u7EED\u65F6\u95F4","Loop":"\u5FAA\u73AF","Move the object by following a path.":"\u6309\u7167\u8DEF\u5F84\u79FB\u52A8\u5BF9\u8C61","Move on path":"\u6309\u8DEF\u5F84\u79FB\u52A8","Move _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"\u5728\u8DEF\u5F84\u4E0A_PARAM0_\u91CD\u590D_PARAM3_\u6B21\u5728_PARAM4_\u79D2\u5185\uFF0C_PARAM2_\u7684\u7F13\u52A8\u72B6\u6001","Move the object by following a path and go back.":"\u6309\u7167\u8DEF\u5F84\u79FB\u52A8\u5BF9\u8C61\uFF0C\u7136\u540E\u8FD4\u56DE","Move back and forth":"\u6765\u56DE\u79FB\u52A8","Move back and forth _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM6_ seconds before going back and loop: _PARAM7_":"\u6765\u56DE\u79FB\u52A8_PARAM0_\u5728\u8DEF\u5F84\u4E0A\uFF1A_PARAM2_\u5728_PARAM4_\u79D2\u5185\uFF0C_PARAM3_\u6B21\u91CD\u590D\u5E76\u91C7\u7528_PARAM5_\u7684\u7F13\u52A8\uFF0C\u5728\u8FD4\u56DE\u524D\u7B49\u5F85_PARAM6_\u79D2\u548C\u5FAA\u73AF:_PARAM7_","Check if the object has reached one of the 2 ends of the path.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5DF2\u5230\u8FBE\u8DEF\u5F84\u7684\u4E24\u7AEF\u4E4B\u4E00","Reached an end":"\u5DF2\u5230\u8FBE\u7EC8\u70B9","_PARAM0_ reached an end of the path":"_PARAM0_\u5DF2\u5230\u8FBE\u8DEF\u5F84\u7684\u7EC8\u70B9","Check if the object has finished to move on the path.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5DF2\u5B8C\u6210\u5728\u8DEF\u5F84\u4E0A\u7684\u79FB\u52A8","Finished to move":"\u5DF2\u5B8C\u6210\u79FB\u52A8","_PARAM0_ has finished to move":"_PARAM0_\u5DF2\u5B8C\u6210\u79FB\u52A8","Return the angle of movement on its path.":"\u8FD4\u56DE\u5176\u8DEF\u5F84\u4E0A\u7684\u8FD0\u52A8\u89D2\u5EA6\u3002","Movement angle":"\u8FD0\u52A8\u89D2\u5EA6","Draw the object trajectory.":"\u7ED8\u5236\u5BF9\u8C61\u8F68\u8FF9\u3002","Draw the trajectory":"\u7ED8\u5236\u8F68\u8FF9","Draw trajectory of _PARAM0_ on _PARAM2_":"\u5728 _PARAM2_ \u4E0A\u7ED8\u5236 _PARAM0_ \u7684\u8F68\u8FF9","Shape painter":"\u5F62\u72B6\u7ED8\u5236\u7A0B\u5E8F","Change the transformation to apply to the path.":"\u66F4\u6539\u5E94\u7528\u4E8E\u8DEF\u5F84\u7684\u53D8\u6362\u3002","Path transformation":"\u8DEF\u5F84\u53D8\u6362","Change the path trasformation of _PARAM0_ to origin _PARAM2_; _PARAM3_ scale by _PARAM4_ and a rotation of _PARAM5_\xB0":"\u66F4\u6539 _PARAM0_ \u7684\u8DEF\u5F84\u8F6C\u6362\u4E3A\u8D77\u70B9 _PARAM2_\uFF1B _PARAM3_ \u7F29\u653E _PARAM4_ \u53CA\u65CB\u8F6C _PARAM5_\xB0","Scale":"\u7F29\u653E","Angle":"\u89D2\u5EA6","Initialize the movement state.":"\u521D\u59CB\u5316\u8FD0\u52A8\u72B6\u6001\u3002","Initialize the movement":"\u521D\u59CB\u5316\u8FD0\u52A8","Initialize the movement of _PARAM0_":"\u521D\u59CB\u5316 _PARAM0_ \u7684\u8FD0\u52A8","Return the number of repetitions between the current position and the origin.":"\u8FD4\u56DE\u5F53\u524D\u4F4D\u7F6E\u548C\u8D77\u70B9\u4E4B\u95F4\u7684\u91CD\u590D\u6B21\u6570\u3002","Repetition done":"\u91CD\u590D\u5B8C\u6210","Return the position on one repeated path.":"\u8FD4\u56DE\u91CD\u590D\u8DEF\u5F84\u7684\u4F4D\u7F6E\u3002","Path position":"\u8DEF\u5F84\u4F4D\u7F6E","Return the progress on the full path from 0 to 1, where 0 means the origin and 1 the end.":"\u8FD4\u56DE\u4ECE0\u52301\u7684\u8DEF\u5F84\u4E0A\u7684\u6574\u4F53\u8FDB\u5EA6\uFF0C\u5176\u4E2D0\u8868\u793A\u8D77\u70B9\uFF0C1\u8868\u793A\u7EC8\u70B9\u3002","Progress":"\u8FDB\u5EA6","Return the length of the path (one repetition only).":"\u8FD4\u56DE\u8DEF\u5F84\u7684\u957F\u5EA6\uFF08\u4EC5\u4E00\u6B21\u91CD\u590D\uFF09\u3002","Return the speed scale on Y axis of the path.":"\u8FD4\u56DE\u8DEF\u5F84Y\u8F74\u4E0A\u7684\u901F\u5EA6\u6BD4\u4F8B\u3002","Path speed scale Y":"\u8DEF\u5F84\u901F\u5EA6\u6BD4\u4F8BY","Return the angle to use when the object is going back or not.":"\u5BF9\u8C61\u56DE\u9000\u6216\u975E\u56DE\u9000\u65F6\u8981\u4F7F\u7528\u7684\u89D2\u5EA6\u3002","Back or forth angle":"\u56DE\u9000\u6216\u975E\u56DE\u9000\u89D2\u5EA6","Move objects on curved paths at a given speed.":"\u4EE5\u7ED9\u5B9A\u901F\u5EA6\u6CBF\u7740\u66F2\u7EBF\u79FB\u52A8\u5BF9\u8C61\u3002","Movement on a curve (speed-based)":"\u66F2\u7EBF\u4E0A\u7684\u8FD0\u52A8\uFF08\u57FA\u4E8E\u901F\u5EA6\uFF09","Rotation":"\u65CB\u8F6C","Change the path followed by an object.":"\u66F4\u6539\u5BF9\u8C61\u9075\u5FAA\u7684\u8DEF\u5F84\u3002","Follow a path":"\u9075\u5FAA\u8DEF\u5F84","_PARAM0_ follow the path: _PARAM2_ repeated _PARAM3_ times and loop: _PARAM4_":"_PARAM0_ \u9075\u5FAA\u8DEF\u5F84\uFF1A_PARAM2_ \u91CD\u590D _PARAM3_ \u6B21\u4E14\u5FAA\u73AF\uFF1A_PARAM4_","Change the path followed by an object to reach a position.":"\u66F4\u6539\u5BF9\u8C61\u9075\u5FAA\u7684\u8DEF\u5F84\uFF0C\u4EE5\u5230\u8FBE\u67D0\u4E2A\u4F4D\u7F6E\u3002","Follow a path to a position":"\u5230\u8FBE\u4F4D\u7F6E\u7684\u8DEF\u5F84","_PARAM0_ follow the path _PARAM2_ repeated _PARAM3_ times to reach _PARAM5_ ; _PARAM6_ and loop: _PARAM4_":"_PARAM0_ \u9075\u5FAA\u8DEF\u5F84 _PARAM2_ \u91CD\u590D _PARAM3_ \u6B21\u8FBE\u5230 _PARAM5_ ; _PARAM6_ \u5E76\u5FAA\u73AF\uFF1A_PARAM4_","the length between the trajectory origin and the current position without counting the loops.":"\u8F68\u8FF9\u8D77\u70B9\u4E0E\u5F53\u524D\u4F4D\u7F6E\u4E4B\u95F4\u7684\u957F\u5EA6\uFF0C\u4E0D\u8BA1\u7B97\u5FAA\u73AF\u3002","Position on the loop":"\u5FAA\u73AF\u4E2D\u7684\u4F4D\u7F6E","the length from the trajectory origin in the current loop":"\u5F53\u524D\u5FAA\u73AF\u4E2D\u8F68\u8FF9\u8D77\u70B9\u7684\u957F\u5EA6","the number time the object loop the trajectory.":"\u5BF9\u8C61\u5FAA\u73AF\u8F68\u8FF9\u7684\u6B21\u6570\u3002","Current loop":"\u5F53\u524D\u73AF\u8DEF","the current loop":"\u5F53\u524D\u73AF\u8DEF","the length between the trajectory origin and the current position counting the loops.":"\u8F68\u8FF9\u8D77\u70B9\u5230\u5F53\u524D\u4F4D\u7F6E\u7684\u957F\u5EA6\uFF0C\u8BA1\u7B97\u5FAA\u73AF\u3002","Position on the path":"\u8DEF\u5F84\u4E0A\u7684\u4F4D\u7F6E","the length from the trajectory origin counting the loops":"\u8BA1\u7B97\u8F68\u8FF9\u8D77\u70B9\u5230\u5F53\u524D\u4F4D\u7F6E\u7684\u957F\u5EA6\uFF0C\u5305\u62EC\u5FAA\u73AF","Change the position of the object on the path.":"\u6539\u53D8\u7269\u4F53\u5728\u8DEF\u5F84\u4E0A\u7684\u4F4D\u7F6E\u3002","Change the position of _PARAM0_ on the path at the length _PARAM2_":"\u5728\u8DEF\u5F84\u4E0A\u5C06_PARAM0_\u7684\u4F4D\u7F6E\u79FB\u52A8\u81F3\u957F\u5EA6_PARAM2_","Length":"\u957F\u5EA6","Check if the length from the trajectory origin is lesser than a value.":"\u68C0\u67E5\u8F68\u8FF9\u8D77\u70B9\u5230\u957F\u5EA6\u662F\u5426\u5C0F\u4E8E\u67D0\u4E2A\u503C\u3002","Current length":"\u5F53\u524D\u957F\u5EA6","_PARAM0_ is less than _PARAM2_ pixels away from the trajectory origin":"_PARAM0_\u8DDD\u79BB\u8F68\u8FF9\u8D77\u70B9\u7684\u50CF\u7D20\u8DDD\u79BB\u5C0F\u4E8E_PARAM2_","Length from the trajectory origin (in pixels)":"\u8F68\u8FF9\u8D77\u70B9\u7684\u957F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","Check if the object has reached the origin position of the path.":"\u68C0\u67E5\u7269\u4F53\u662F\u5426\u5230\u8FBE\u8DEF\u5F84\u7684\u539F\u59CB\u4F4D\u7F6E\u3002","Reached path origin":"\u5DF2\u8FBE\u5230\u8DEF\u5F84\u539F\u70B9","_PARAM0_ reached the path beginning":"_PARAM0_\u5DF2\u5230\u8FBE\u8DEF\u5F84\u7684\u8D77\u70B9","Check if the object has reached the target position of the path.":"\u68C0\u67E5\u7269\u4F53\u662F\u5426\u5230\u8FBE\u8DEF\u5F84\u7684\u76EE\u6807\u4F4D\u7F6E\u3002","Reached path target":"\u5DF2\u8FBE\u5230\u8DEF\u5F84\u76EE\u6807","_PARAM0_ reached the path target":"_PARAM0_\u5DF2\u5230\u8FBE\u8DEF\u5F84\u76EE\u6807","Reach an end":"\u8FBE\u5230\u672B\u7AEF","Check if the object can still move in the current direction.":"\u68C0\u67E5\u7269\u4F53\u662F\u5426\u8FD8\u53EF\u4EE5\u7EE7\u7EED\u6CBF\u5F53\u524D\u65B9\u5411\u79FB\u52A8\u3002","Can move further":"\u53EF\u4EE5\u8FDB\u4E00\u6B65\u79FB\u52A8","_PARAM0_ can move further on its path":"_PARAM0_\u53EF\u4EE5\u7EE7\u7EED\u6CBF\u7740\u8DEF\u5F84\u79FB\u52A8","the speed of the object.":"\u7269\u4F53\u7684\u901F\u5EA6\u3002","the speed":"\u901F\u5EA6","Change the current speed of the object.":"\u6539\u53D8\u7269\u4F53\u7684\u5F53\u524D\u901F\u5EA6\u3002","Change the speed of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u901F\u5EA6\u6539\u4E3A_PARAM2_","Speed (in pixels per second)":"\u901F\u5EA6\uFF08\u6BCF\u79D2\u7684\u50CF\u7D20\u6570\uFF09","Make an object accelerate until it reaches a given speed.":"\u4F7F\u7269\u4F53\u52A0\u901F\uFF0C\u76F4\u5230\u8FBE\u5230\u7ED9\u5B9A\u7684\u901F\u5EA6\u3002","Accelerate":"\u52A0\u901F","_PARAM0_ accelerate at _PARAM3_ to reach the speed of _PARAM2_":"_PARAM0_\u52A0\u901F\u81F3_PARAM3_\uFF0C\u4EE5\u8FBE\u5230_PARAM2_\u7684\u901F\u5EA6","Targeted speed (in pixels per second)":"\u76EE\u6807\u901F\u5EA6\uFF08\u6BCF\u79D2\u7684\u50CF\u7D20\u6570\uFF09","Acceleration (in pixels per second per second)":"\u52A0\u901F\u5EA6\uFF08\u6BCF\u79D2\u7684\u50CF\u7D20\u6570\u6BCF\u79D2\uFF09","Make an object accelerate to reaches a speed in a given amount of time.":"\u4F7F\u7269\u4F53\u52A0\u901F\u5230\u5728\u7ED9\u5B9A\u65F6\u95F4\u5185\u8FBE\u5230\u7684\u901F\u5EA6\u3002","Accelerate during":"\u52A0\u901F\u65F6\u957F","_PARAM0_ accelerate during _PARAM3_ seconds to reach the speed of _PARAM2_":"_PARAM0_\u5728_PARAM3_\u79D2\u5185\u52A0\u901F\u5230\u8FBE_PARAM2_\u7684\u901F\u5EA6","Repeated path position":"\u91CD\u590D\u7684\u8DEF\u5F84\u4F4D\u7F6E","Return the length of the complete trajectory (without looping).":"\u8FD4\u56DE\u5B8C\u6574\u8F68\u8FF9\u7684\u957F\u5EA6\uFF08\u4E0D\u5305\u62EC\u5FAA\u73AF\uFF09\u3002","Total length":"\u603B\u957F\u5EA6","Return the path origin on X axis of the object.":"\u8FD4\u56DE\u5BF9\u8C61\u5728X\u8F74\u4E0A\u7684\u8DEF\u5F84\u8D77\u70B9\u3002","Path origin X":"\u8DEF\u5F84\u8D77\u70B9X","the path origin on X axis":"\u5BF9\u8C61\u5728X\u8F74\u4E0A\u7684\u8DEF\u5F84\u8D77\u70B9","Return the path origin on Y axis of the object.":"\u8FD4\u56DE\u5BF9\u8C61\u5728Y\u8F74\u4E0A\u7684\u8DEF\u5F84\u8D77\u70B9\u3002","Path origin Y":"\u8DEF\u5F84\u8D77\u70B9Y","the path origin on Y axis":"\u5BF9\u8C61\u5728Y\u8F74\u4E0A\u7684\u8DEF\u5F84\u8D77\u70B9","Depth effect":"\u6DF1\u5EA6\u6548\u679C","Change scale based on Y position to simulate depth of field.":"\u6839\u636E Y \u4F4D\u7F6E\u66F4\u6539\u6BD4\u4F8B\u4EE5\u6A21\u62DF\u666F\u6DF1\u3002","The scale of the object decreases the closer it is to the horizon, giving the illusion that the object is travelling away from the viewer.":"\u5BF9\u8C61\u7684\u6BD4\u4F8B\u968F\u7740\u63A5\u8FD1\u5730\u5E73\u7EBF\u800C\u51CF\u5C0F\uFF0C\u8FD9\u4F7F\u5F97\u5BF9\u8C61\u5728\u89C2\u770B\u8005\u8FDC\u79BB\u65F6\u4EA7\u751F\u4E86\u5E7B\u89C9\u3002","Max scale when the object is at the bottom of the screen (Default: 1)":"\u5F53\u7269\u4F53\u5728\u5C4F\u5E55\u5E95\u90E8\u65F6\u7684\u6700\u5927\u6BD4\u4F8B\uFF08\u9ED8\u8BA4\u503C\uFF1A1\uFF09","Y position that represents a horizon where objects appear infinitely small (Default: 0)":"\u8868\u793A\u7269\u4F53\u51FA\u73B0\u4E3A\u65E0\u7A77\u5C0F\u7684\u5730\u5E73\u7EBF\u7684 Y \u4F4D\u7F6E\uFF08\u9ED8\u8BA4\u503C\uFF1A0\uFF09","Exponential rate of change (Default: 2)":"\u6307\u6570\u53D8\u5316\u7387\uFF08\u9ED8\u8BA4\u503C\uFF1A2\uFF09","Percent away from the horizon":"\u8FDC\u79BB\u5730\u5E73\u7EBF\u7684\u767E\u5206\u6BD4","Percent away from the horizon. This is \"0\" at the horizon, and \"1\" at the bottom of the screen.":"\u8DDD\u79BB\u5730\u5E73\u7EBF\u7684\u767E\u5206\u6BD4\u3002\u5728\u5730\u5E73\u7EBF\u4E0A\u4E3A\"0\"\uFF0C\u5728\u5C4F\u5E55\u5E95\u90E8\u4E3A\"1\"\u3002","Percent away from horizon":"\u5730\u5E73\u7EBF\u5904\u7684\u767E\u5206\u6BD4","Exponential rate of change, based on Y position.":"\u6839\u636EY\u4F4D\u7F6E\u7684\u6307\u6570\u7EA7\u53D8\u5316\u7387\u3002","Exponential rate of change":"\u6307\u6570\u7EA7\u53D8\u5316\u7387","Max scale when the object is at the bottom of the screen.":"\u5F53\u5BF9\u8C61\u5728\u5C4F\u5E55\u5E95\u90E8\u65F6\u7684\u6700\u5927\u6BD4\u4F8B\u3002","Max scale":"\u6700\u5927\u6BD4\u4F8B","Y value of horizon.":"\u5730\u5E73\u7EBF\u7684Y\u503C\u3002","Y value of horizon":"\u5730\u5E73\u7EBF\u7684Y\u503C","Set max scale when the object is at the bottom of the screen (Default: 2).":"\u5F53\u5BF9\u8C61\u4F4D\u4E8E\u5C4F\u5E55\u5E95\u90E8\u65F6\u8BBE\u7F6E\u6700\u5927\u6BD4\u4F8B\uFF08\u9ED8\u8BA4\uFF1A2\uFF09\u3002","Set max scale":"\u8BBE\u7F6E\u6700\u5927\u6BD4\u4F8B","Set max scale of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6700\u5927\u6BD4\u4F8B\u8BBE\u7F6E\u4E3A_PARAM2_\u3002","Y Exponent":"Y\u6307\u6570","Set Y exponential rate of change (Default: 2).":"\u8BBE\u7F6EY\u6307\u6570\u7EA7\u53D8\u5316\u7387\uFF08\u9ED8\u8BA4\uFF1A2\uFF09\u3002","Set exponential rate of change":"\u8BBE\u7F6E\u6307\u6570\u7EA7\u53D8\u5316\u7387","Set Y exponential rate of change of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684Y\u6307\u6570\u7EA7\u53D8\u5316\u7387\u8BBE\u7F6E\u4E3A_PARAM2_\u3002","Set Y position of the horizon, where objects are infinitely small (Default: 0).":"\u8BBE\u7F6E\u5730\u5E73\u7EBF\u7684Y\u4F4D\u7F6E\uFF0C\u5176\u4E2D\u7269\u4F53\u662F\u65E0\u9650\u5C0F\uFF08\u9ED8\u8BA4\uFF1A0\uFF09\u3002","Set Y position of horizon":"\u8BBE\u7F6E\u5730\u5E73\u7EBF\u7684Y\u4F4D\u7F6E","Set horizon of _PARAM0_ to Y position _PARAM2_":"\u5C06_PARAM0_\u7684\u5730\u5E73\u7EBF\u8BBE\u7F6E\u4E3AY\u4F4D\u7F6E_PARAM2_\u3002","Horizon Y":"\u5730\u5E73\u7EBFY","Discord rich presence (Windows, Mac, Linux)":"Discord \u5BCC\u5B58\u5728\uFF08Windows\u3001Mac\u3001Linux\uFF09","Adds discord rich presence to your games.":"\u4E3A\u60A8\u7684\u6E38\u620F\u6DFB\u52A0 Discord \u5BCC\u5B58\u5728\u3002","Attempts to connect to discord if it is installed, and initialize rich presence.":"\u5982\u679C\u5DF2\u5B89\u88C5\uFF0C\u5219\u5C1D\u8BD5\u8FDE\u63A5\u5230 Discord\uFF0C\u5E76\u521D\u59CB\u5316\u4E30\u5BCC\u7684\u5B58\u5728\u3002","Initialize rich presence":"\u521D\u59CB\u5316\u4E30\u5BCC\u7684\u5B58\u5728","Initialize rich presence with ID _PARAM1_":"\u4F7F\u7528 ID _PARAM1_ \u521D\u59CB\u5316\u4E30\u5BCC\u7684\u5B58\u5728","The discord client ID":"Discord \u5BA2\u6237\u7AEF ID","Update the data in the rich presence. See the discord documentation for more info on each field. Each field except state is optional.":"\u66F4\u65B0\u4E30\u5BCC\u7684\u5B58\u5728\u4E2D\u7684\u6570\u636E\u3002\u67E5\u770B Discord \u6587\u6863\u4EE5\u83B7\u53D6\u6709\u5173\u6BCF\u4E2A\u5B57\u6BB5\u7684\u66F4\u591A\u4FE1\u606F\u3002\u9664 state \u5916\u7684\u6BCF\u4E2A\u5B57\u6BB5\u90FD\u662F\u53EF\u9009\u7684\u3002","Update rich presence":"\u66F4\u65B0\u4E30\u5BCC\u7684\u5B58\u5728","Update rich presence to state _PARAM1_, details _PARAM2_, begin timestamp _PARAM3_, end timestamp _PARAM4_, large image _PARAM5_ with text _PARAM6_ and small image _PARAM7_ with text _PARAM8_":"\u66F4\u65B0\u4E30\u5BCC\u7684\u5B58\u5728\u4E3A\u72B6\u6001 _PARAM1_, \u8BE6\u7EC6\u4FE1\u606F _PARAM2_, \u5F00\u59CB\u65F6\u95F4\u6233 _PARAM3_, \u7ED3\u675F\u65F6\u95F4\u6233 _PARAM4_, \u5927\u56FE\u50CF _PARAM5_ \u4E0E\u6587\u672C _PARAM6_ \u548C\u5C0F\u56FE\u50CF _PARAM7_ \u4E0E\u6587\u672C _PARAM8_","The current state":"\u5F53\u524D\u72B6\u6001","The details of the current state":"\u5F53\u524D\u72B6\u6001\u7684\u8BE6\u60C5","The timstamp of the start of the match":"\u6BD4\u8D5B\u5F00\u59CB\u7684\u65F6\u95F4\u6233","If this is filled, discord will show the time elapsed since the start.":"\u5982\u679C\u586B\u5199\u4E86\uFF0C\u5219 Discord \u5C06\u663E\u793A\u81EA\u6BD4\u8D5B\u5F00\u59CB\u4EE5\u6765\u7ECF\u8FC7\u7684\u65F6\u95F4\u3002","The timestamp of the end of the match":"\u6BD4\u8D5B\u7ED3\u675F\u65F6\u95F4\u6233","If this is filled, discord will display the remaining time.":"\u5982\u679C\u586B\u5199\uFF0Cdiscord\u5C06\u663E\u793A\u5269\u4F59\u65F6\u95F4\u3002","The name of the big image":"\u5927\u56FE\u50CF\u7684\u540D\u79F0","The text of the large image":"\u5927\u56FE\u50CF\u7684\u6587\u672C","The name of the small image":"\u5C0F\u56FE\u50CF\u7684\u540D\u79F0","The text of the small image":"\u5C0F\u56FE\u50CF\u7684\u6587\u672C","Double-click and tap":"\u53CC\u51FB\u548C\u8F7B\u51FB","Check for a double-click or a tap.":"\u68C0\u67E5\u53CC\u51FB\u6216\u8F7B\u51FB\u3002","Check if the specified mouse button is clicked twice in a short amount of time.":"\u68C0\u67E5\u6307\u5B9A\u7684\u9F20\u6807\u6309\u94AE\u662F\u5426\u5728\u77ED\u65F6\u95F4\u5185\u88AB\u70B9\u51FB\u4E24\u6B21\u3002","Double-clicked (or double-tapped)":"\u53CC\u51FB\uFF08\u6216\u53CC\u51FB\uFF09","_PARAM1_ mouse button is double-clicked":"_PARAM1_\u9F20\u6807\u6309\u94AE\u88AB\u53CC\u51FB","Mouse button to track":"\u8DDF\u8E2A\u7684\u9F20\u6807\u6309\u94AE","As touch devices do not have middle/right tap equivalents, you will need to account for this within your events if you're not using the left mouse button and building for touch devices.":"\u7531\u4E8E\u89E6\u6478\u8BBE\u5907\u6CA1\u6709\u4E2D/\u53F3\u952E\u7B49\u6548\u7269\uFF0C\u5982\u679C\u672A\u4F7F\u7528\u5DE6\u9F20\u6807\u6309\u94AE\u5E76\u4E3A\u89E6\u6478\u8BBE\u5907\u5EFA\u7ACB\uFF0C\u60A8\u5C06\u9700\u8981\u5728\u4E8B\u4EF6\u5185\u8003\u8651\u6B64\u60C5\u51B5\u3002","Check if the specified mouse button is clicked.":"\u68C0\u67E5\u6307\u5B9A\u7684\u9F20\u6807\u6309\u94AE\u662F\u5426\u88AB\u70B9\u51FB\u3002","Clicked (or tapped)":"\u5DF2\u70B9\u51FB\uFF08\u6216\u8F7B\u51FB\uFF09","_PARAM1_ mouse button is clicked":"_PARAM1_\u9F20\u6807\u6309\u94AE\u88AB\u70B9\u51FB","_PARAM1_ mouse button is clicked _PARAM2_ times":"_PARAM1_\u9F20\u6807\u6309\u94AE\u88AB\u70B9\u51FB_PARAM2_\u6B21","Click count":"\u70B9\u51FB\u8BA1\u6570","Drag camera with the mouse (or touchscreen)":"\u4F7F\u7528\u9F20\u6807\uFF08\u6216\u89E6\u6478\u5C4F\uFF09\u62D6\u52A8\u6444\u50CF\u673A","Move a camera by dragging the mouse (or touchscreen).":"\u7528\u9F20\u6807\u62D6\u52A8\uFF08\u6216\u89E6\u6478\u5C4F\uFF09\u4EE5\u79FB\u52A8\u6444\u50CF\u673A\u3002","Drag camera with the mouse":"\u4F7F\u7528\u9F20\u6807\u62D6\u52A8\u76F8\u673A","Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button":"\u4F7F\u7528_PARAM4_\u9F20\u6807\u6309\u94AE\u5728_PARAM3_\u65B9\u5411\u4E0A\u5728_PARAM2_\u56FE\u5C42\u4E0A\u62D6\u52A8\u76F8\u673A","Camera layer (default: \"\")":"\u76F8\u673A\u56FE\u5C42\uFF08\u9ED8\u8BA4\u4E3A\"\"\uFF09","Directions that the camera can move (horizontal, vertical, both)":"\u76F8\u673A\u53EF\u4EE5\u79FB\u52A8\u7684\u65B9\u5411\uFF08\u6C34\u5E73\uFF0C\u5782\u76F4\uFF0C\u4E24\u8005\uFF09","Mouse button (use \"Left\" for touchscreen)":"\u9F20\u6807\u6309\u94AE\uFF08\u89E6\u6478\u5C4F\u4F7F\u7528\"Left\"\uFF09","Draggable (for physics objects)":"\u53EF\u62D6\u52A8\uFF08\u9002\u7528\u4E8E\u7269\u7406\u5BF9\u8C61\uFF09","Drag a physics object with the mouse (or touch).":"\u4F7F\u7528\u9F20\u6807\uFF08\u6216\u89E6\u6478\uFF09\u62D6\u52A8\u7269\u7406\u5BF9\u8C61\u3002","Physics behavior":"\u7269\u7406\u884C\u4E3A","Mouse button":"\u9F20\u6807\u6309\u94AE","Maximum force":"\u6700\u5927\u529B","Frequency (Hz)":"\u9891\u7387\uFF08\u8D6B\u5179\uFF09","Damping ratio (Range: 0 to 1)":"\u963B\u5C3C\u6BD4\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09","Enable automatic dragging":"\u542F\u7528\u81EA\u52A8\u62D6\u52A8","If automatic dragging is disabled, use the \"Start drag\" and \"Release drag\" actions.":"\u5982\u679C\u7981\u7528\u4E86\u81EA\u52A8\u62D6\u52A8\uFF0C\u8BF7\u4F7F\u7528\u201C\u5F00\u59CB\u62D6\u52A8\u201D\u548C\u201C\u91CA\u653E\u62D6\u52A8\u201D\u52A8\u4F5C\u3002","Start dragging object.":"\u5F00\u59CB\u62D6\u52A8\u5BF9\u8C61\u3002","Start dragging object":"\u5F00\u59CB\u62D6\u52A8\u5BF9\u8C61","Start dragging (physics) _PARAM0_":"\u5F00\u59CB\u62D6\u52A8\uFF08\u7269\u7406\uFF09_PARAM0_","Release dragged object.":"\u91CA\u653E\u88AB\u62D6\u52A8\u7684\u5BF9\u8C61\u3002","Release dragged object":"\u91CA\u653E\u88AB\u62D6\u52A8\u7684\u5BF9\u8C61","Release _PARAM0_ from being dragged (physics)":"\u91CA\u653E_PARAM0_\u88AB\u62D6\u52A8\u7684\u5BF9\u8C61\uFF08\u7269\u7406\uFF09","Check if object is being dragged.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u6B63\u5728\u88AB\u62D6\u52A8\u3002","Is being dragged":"\u6B63\u5728\u88AB\u62D6\u52A8","_PARAM0_ is being dragged (physics)":"_PARAM0_ \u6B63\u5728\u88AB\u62D6\u52A8 (\u7269\u7406)","the mouse button used to move the object.":"\u7528\u4E8E\u79FB\u52A8\u5BF9\u8C61\u7684\u9F20\u6807\u6309\u94AE\u3002","the dragging mouse button":"\u62D6\u52A8\u9F20\u6807\u6309\u94AE","the maximum joint force (in Newtons) of the object.":"\u5BF9\u8C61\u7684\u6700\u5927\u5173\u8282\u529B\uFF08\u725B\u987F\uFF09\u3002","the maximum force":"\u6700\u5927\u529B","the joint frequency (per second) of the object.":"\u5BF9\u8C61\u7684\u5173\u8282\u9891\u7387\uFF08\u6BCF\u79D2\uFF09\u3002","the frequency":"\u5173\u8282\u9891\u7387","the joint damping ratio (range: 0 to 1) of the object.":"\u5BF9\u8C61\u7684\u5173\u8282\u963B\u5C3C\u6BD4\uFF08\u8303\u56F4\uFF1A0 \u5230 1\uFF09\u3002","Damping ratio":"\u963B\u5C3C\u6BD4","the damping ratio (range: 0 to 1)":"\u963B\u5C3C\u6BD4\uFF08\u8303\u56F4\uFF1A0 \u5230 1\uFF09","Check if automatic dragging is enabled.":"\u68C0\u67E5\u662F\u5426\u542F\u7528\u81EA\u52A8\u62D6\u52A8\u3002","Automatic dragging":"\u81EA\u52A8\u62D6\u52A8","Automatic dragging is enabled on _PARAM0_":"\u5728 _PARAM0_ \u4E0A\u542F\u7528\u81EA\u52A8\u62D6\u52A8","Enable (or disable) automatic dragging with the mouse or touch.":"\u4F7F\u7528\u9F20\u6807\u6216\u89E6\u6478\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52A8\u62D6\u52A8\u3002","Enable (or disable) automatic dragging":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52A8\u62D6\u52A8","Enable automatic dragging on _PARAM0_: _PARAM2_":"\u5728 _PARAM0_ \u4E0A\u542F\u7528\u81EA\u52A8\u62D6\u52A8\uFF1A_PARAM2_","EnableAutomaticDragging":"EnableAutomaticDragging","Draggable slider (for Shape Painter)":"\u53EF\u62D6\u52A8\u6ED1\u5757\uFF08\u9002\u7528\u4E8EShape Painter\uFF09","A draggable slider that users can move to select a numerical value.":"\u7528\u6237\u53EF\u4EE5\u79FB\u52A8\u7684\u53EF\u62D6\u52A8\u6ED1\u5757\u4EE5\u9009\u62E9\u6570\u503C\u3002","Let users select a numerical value by dragging a slider.":"\u8BA9\u7528\u6237\u901A\u8FC7\u62D6\u52A8\u6ED1\u5757\u9009\u62E9\u6570\u503C\u3002","Draggable slider":"\u53EF\u62D6\u52A8\u7684\u6ED1\u5757","Minimum value":"\u6700\u5C0F\u503C","Maximum value":"\u6700\u5927\u503C","Tick spacing":"\u523B\u5EA6\u95F4\u8DDD","Thumb shape":"\u6ED1\u5757\u5F62\u72B6","Thumb":"\u6ED1\u5757","Thumb width":"\u6ED1\u5757\u5BBD\u5EA6","Thumb height":"\u6ED1\u5757\u9AD8\u5EA6","Thumb Color":"\u6ED1\u5757\u989C\u8272","Thumb opacity":"\u6ED1\u5757\u4E0D\u900F\u660E\u5EA6","Track length":"\u8F68\u9053\u957F\u5EA6","Track":"\u8F68\u9053","Inactive track color (thumb color by default)":"\u975E\u6D3B\u52A8\u8F68\u9053\u989C\u8272\uFF08\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4E3A\u6ED1\u5757\u989C\u8272\uFF09","Inactive track opacity":"\u975E\u6D3B\u52A8\u8F68\u9053\u4E0D\u900F\u660E\u5EA6","Active track color (thumb color by default)":"\u6D3B\u52A8\u8F68\u9053\u989C\u8272\uFF08\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4E3A\u6ED1\u5757\u989C\u8272\uFF09","Active track opacity":"\u6D3B\u52A8\u8F68\u9053\u4E0D\u900F\u660E\u5EA6","Halo size (hover)":"\u5149\u73AF\u5927\u5C0F\uFF08\u60AC\u505C\uFF09","Rounded track ends":"\u5706\u5F62\u8F68\u9053\u7AEF\u70B9","Check if the slider is being dragged.":"\u68C0\u67E5\u6ED1\u5757\u662F\u5426\u6B63\u5728\u88AB\u62D6\u52A8\u3002","Being dragged":"\u6B63\u5728\u88AB\u62D6\u52A8","_PARAM0_ is being dragged":"_PARAM0_ \u6B63\u5728\u88AB\u62D6\u52A8","Check if the slider interations are enabled.":"\u68C0\u67E5\u6ED1\u5757\u4EA4\u4E92\u662F\u5426\u542F\u7528\u3002","Enable or disable the slider. Users cannot interact while it is disabled.":"\u542F\u7528\u6216\u7981\u7528\u6ED1\u5757\u3002\u5728\u7981\u7528\u65F6\u7528\u6237\u65E0\u6CD5\u8FDB\u884C\u4EA4\u4E92\u3002","The value of the slider (based on position of the thumb).":"\u6ED1\u5757\u503C\uFF08\u6839\u636E\u62C7\u6307\u4F4D\u7F6E\uFF09\u3002","Slider value":"\u6ED1\u5757\u503C","Change the value of a slider (this will move the thumb to the correct position).":"\u66F4\u6539\u6ED1\u5757\u7684\u503C\uFF08\u8FD9\u5C06\u628A\u62C7\u6307\u79FB\u52A8\u5230\u6B63\u786E\u7684\u4F4D\u7F6E\uFF09\u3002","Change the value of _PARAM0_: _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u503C\uFF1A_PARAM2_","The minimum value of a slider.":"\u6ED1\u5757\u7684\u6700\u5C0F\u503C\u3002","Slider minimum value":"\u6ED1\u5757\u6700\u5C0F\u503C","Change the minimum value of a slider.":"\u66F4\u6539\u6ED1\u5757\u7684\u6700\u5C0F\u503C\u3002","Change the minimum value of _PARAM0_: _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u6700\u5C0F\u503C\uFF1A_PARAM2_","The maximum value of a slider.":"\u6ED1\u5757\u7684\u6700\u5927\u503C\u3002","Slider maximum value":"\u6ED1\u5757\u6700\u5927\u503C","Thickness of track.":"\u8F68\u9053\u7684\u539A\u5EA6\u3002","Slider track thickness":"\u6ED1\u5757\u8F68\u9053\u539A\u5EA6","Length of track.":"\u8F68\u9053\u7684\u957F\u5EA6\u3002","Slider track length":"\u6ED1\u5757\u8F68\u9053\u957F\u5EA6","Height of thumb.":"\u62C7\u6307\u7684\u9AD8\u5EA6\u3002","Slider thumb height":"\u6ED1\u5757\u62C7\u6307\u9AD8\u5EA6","Change the maximum value of a slider.":"\u66F4\u6539\u6ED1\u5757\u7684\u6700\u5927\u503C\u3002","The tick spacing of a slider.":"\u6ED1\u5757\u7684\u523B\u5EA6\u95F4\u8DDD\u3002","Change the tick spacing of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u523B\u5EA6\u95F4\u8DDD\uFF1A_PARAM2_","Change the tick spacing of a slider.":"\u66F4\u6539\u6ED1\u5757\u7684\u523B\u5EA6\u95F4\u8DDD\u3002","Change length of track.":"\u66F4\u6539\u8F68\u9053\u7684\u957F\u5EA6\u3002","Change track length of _PARAM0_ to _PARAM2_ px":"\u5C06_PARAM0_\u7684\u8F68\u9053\u957F\u5EA6\u66F4\u6539\u4E3A_PARAM2_px","Track width":"\u8F68\u9053\u5BBD\u5EA6","Change thickness of track.":"\u66F4\u6539\u8F68\u9053\u7684\u539A\u5EA6\u3002","Change track thickness of _PARAM0_ to _PARAM2_ px":"\u5C06_PARAM0_\u7684\u8F68\u9053\u539A\u5EA6\u66F4\u6539\u4E3A_PARAM2_px","Change width of thumb.":"\u66F4\u6539\u62C7\u6307\u7684\u5BBD\u5EA6\u3002","Change thumb width of _PARAM0_ to _PARAM2_ px":"\u5C06_PARAM0_\u7684\u62C7\u6307\u5BBD\u5EA6\u66F4\u6539\u4E3A_PARAM2_px","Change height of thumb.":"\u66F4\u6539\u62C7\u6307\u7684\u9AD8\u5EA6\u3002","Change thumb height of _PARAM0_ to _PARAM2_ px":"\u5C06_PARAM0_\u7684\u62C7\u6307\u9AD8\u5EA6\u66F4\u6539\u4E3A_PARAM2_px","Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.":"\u66F4\u6539\u62C7\u6307\u5468\u56F4\u5149\u5708\u7684\u534A\u5F84\u3002\u6B64\u5927\u5C0F\u8FD8\u7528\u4E8E\u68C0\u6D4B\u4E0E\u6ED1\u5757\u7684\u4EA4\u4E92\u3002","Change halo radius of _PARAM0_ to _PARAM2_ px":"\u5C06_PARAM0_\u7684\u5149\u5708\u534A\u5F84\u66F4\u6539\u4E3A_PARAM2_px","Change the halo opacity when the thumb is hovered.":"\u5F53\u62C7\u6307\u60AC\u505C\u65F6\u66F4\u6539\u5149\u5708\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px":"\u5C06_PARAM0_\u60AC\u505C\u65F6\u7684\u5149\u5708\u4E0D\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_px","Change opacity of halo when pressed.":"\u5F53\u6309\u4E0B\u65F6\u66F4\u6539\u5149\u73AF\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px":"\u5C06_PARAM0_\u6309\u4E0B\u65F6\u7684\u5149\u73AF\u4E0D\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_px","Change shape of thumb (circle or rectangle).":"\u66F4\u6539\u62C7\u6307\u7684\u5F62\u72B6\uFF08\u5706\u5F62\u6216\u77E9\u5F62\uFF09\u3002","Change shape of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5F62\u72B6\u66F4\u6539\u4E3A_PARAM2_","New thumb shape":"\u65B0\u7684\u62C7\u6307\u5F62\u72B6","Make track use rounded ends.":"\u4F7F\u8F68\u9053\u4F7F\u7528\u5706\u5F62\u7AEF\u3002","Draw _PARAM0_ with a rounded track: _PARAM2_":"\u4F7F\u7528\u5706\u5F62\u8F68\u9053\u7ED8\u5236_PARAM0_\uFF1A_PARAM2_","Rounded track":"\u5706\u5F62\u8F68\u9053","Change opacity of thumb.":"\u66F4\u6539\u62C7\u6307\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Change thumb opacity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Change opacity of inactive track.":"\u66F4\u6539\u975E\u6D3B\u52A8\u8F68\u9053\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Change inactive track opacity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u975E\u6D3B\u52A8\u8F68\u9053\u4E0D\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Change opacity of active track.":"\u66F4\u6539\u6D3B\u52A8\u8F68\u9053\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Change active track opacity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6D3B\u52A8\u8F68\u9053\u4E0D\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Change the color of the track that is LEFT of the thumb.":"\u66F4\u6539\u62C7\u6307\u5DE6\u4FA7\u7684\u8F68\u9053\u7684\u989C\u8272\u3002","Active track color":"\u6D3B\u52A8\u8F68\u9053\u989C\u8272","Change active track color of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6D3B\u52A8\u8F68\u9053\u989C\u8272\u66F4\u6539\u4E3A_PARAM2_","Change the color of the track that is RIGHT of the thumb.":"\u66F4\u6539\u62C7\u6307\u53F3\u4FA7\u7684\u8F68\u9053\u7684\u989C\u8272\u3002","Inactive track color":"\u975E\u6D3B\u52A8\u8F68\u9053\u989C\u8272","Change inactive track color of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u975E\u6D3B\u52A8\u8F68\u9053\u989C\u8272\u66F4\u6539\u4E3A_PARAM2_","Change the thumb color to a specific value.":"\u5C06\u62C7\u6307\u7684\u989C\u8272\u66F4\u6539\u4E3A\u7279\u5B9A\u503C\u3002","Thumb color":"\u62C7\u6307\u989C\u8272","Change thumb color of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u62C7\u6307\u989C\u8272\u66F4\u6539\u4E3A_PARAM2_","Pathfinding painter":"\u5BFB\u8DEF\u7ED8\u5236\u5668","Draw the pathfinding of an object using a shape painter.":"\u4F7F\u7528\u5F62\u72B6\u7ED8\u5236\u5668\u7ED8\u5236\u5BF9\u8C61\u7684\u5BFB\u8DEF\u3002","Draw the path followed by the object using a shape painter.":"\u4F7F\u7528\u5F62\u72B6\u7ED8\u5236\u5668\u7ED8\u5236\u5BF9\u8C61\u6240\u7ECF\u8FC7\u7684\u8DEF\u5F84\u3002","LoopIndex":"LoopIndex","Draw the path followed by the object using a shape painter. It automatically creates an instance of the shape painter object if there is none.":"\u4F7F\u7528\u5F62\u72B6\u7ED8\u5236\u5668\u7ED8\u5236\u8BE5\u5BF9\u8C61\u6240\u7ECF\u8FC7\u7684\u8DEF\u5F84\u3002\u5982\u679C\u6CA1\u6709\u5B9E\u4F8B\u7684\u5F62\u72B6\u7ED8\u5236\u5668\u5BF9\u8C61\uFF0C\u5219\u4F1A\u81EA\u52A8\u521B\u5EFA\u4E00\u4E2A\u3002","Draw pathfinding":"\u7ED8\u5236\u8DEF\u5F84","Draw the path followed by _PARAM0_ using _PARAM3_":"\u4F7F\u7528_PARAM3_\u7ED8\u5236_PARAM0_\u6240\u7ECF\u8FC7\u7684\u8DEF\u5F84","Pathfinding behavior":"\u8DEF\u5F84\u627E\u5BFB\u884C\u4E3A","Shape painter used to draw the path":"\u7528\u4E8E\u7ED8\u5236\u8DEF\u5F84\u7684\u5F62\u72B6\u7ED8\u5236\u5668","Edge scroll camera":"\u8FB9\u7F18\u6EDA\u52A8\u76F8\u673A","Scroll camera when cursor is near edge of screen.":"\u5F53\u5149\u6807\u63A5\u8FD1\u5C4F\u5E55\u8FB9\u7F18\u65F6\u6EDA\u52A8\u76F8\u673A\u3002","Enable (or disable) camera edge scrolling . Use \"Configure camera edge scrolling\" to adjust settings.":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u6444\u50CF\u673A\u8FB9\u7F18\u6EDA\u52A8\u3002\u4F7F\u7528\"\u914D\u7F6E\u6444\u50CF\u673A\u8FB9\u7F18\u6EDA\u52A8\"\u6765\u8C03\u6574\u8BBE\u7F6E\u3002","Enable (or disable) camera edge scrolling":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u6444\u50CF\u673A\u8FB9\u7F18\u6EDA\u52A8","Enable camera edge scrolling: _PARAM1_":"\u542F\u7528\u6444\u50CF\u673A\u8FB9\u7F18\u6EDA\u52A8\uFF1A_PARAM1_","Enable camera edge scrolling":"\u542F\u7528\u6444\u50CF\u673A\u8FB9\u7F18\u6EDA\u52A8","Configure camera edge scrolling that moves when mouse is near an edge of the screen.":"\u914D\u7F6E\u6444\u50CF\u673A\u8FB9\u7F18\u6EDA\u52A8\uFF0C\u5F53\u9F20\u6807\u9760\u8FD1\u5C4F\u5E55\u8FB9\u7F18\u65F6\u79FB\u52A8\u3002","Configure camera edge scrolling":"\u914D\u7F6E\u6444\u50CF\u673A\u8FB9\u7F18\u6EDA\u52A8","Configure camera edge scrolling (layer: _PARAM3_, screen margin: _PARAM1_, scroll speed: _PARAM2_, style: _PARAM5_)":"\u914D\u7F6E\u6444\u50CF\u673A\u8FB9\u7F18\u6EDA\u52A8\uFF08\u5C42\uFF1A_PARAM3_\uFF0C\u5C4F\u5E55\u8FB9\u7F18\uFF1A_PARAM1_\uFF0C\u6EDA\u52A8\u901F\u5EA6\uFF1A_PARAM2_\uFF0C\u6837\u5F0F\uFF1A_PARAM5_\uFF09","Screen margin (pixels)":"\u5C4F\u5E55\u8FB9\u7F18\uFF08\u50CF\u7D20\uFF09","Scroll speed (in pixels per second)":"\u6EDA\u52A8\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09","Scroll style":"\u6EDA\u52A8\u6837\u5F0F","Check if the camera is scrolling.":"\u68C0\u67E5\u6444\u50CF\u673A\u662F\u5426\u6EDA\u52A8\u3002","Camera is scrolling":"\u6444\u50CF\u673A\u6B63\u5728\u6EDA\u52A8","Check if the camera is scrolling up.":"\u68C0\u67E5\u6444\u50CF\u673A\u662F\u5426\u5411\u4E0A\u6EDA\u52A8\u3002","Camera is scrolling up":"\u6444\u50CF\u673A\u6B63\u5728\u5411\u4E0A\u6EDA\u52A8","Check if the camera is scrolling down.":"\u68C0\u67E5\u6444\u50CF\u673A\u662F\u5426\u5411\u4E0B\u6EDA\u52A8\u3002","Camera is scrolling down":"\u76F8\u673A\u6B63\u5728\u5411\u4E0B\u6EDA\u52A8","Check if the camera is scrolling left.":"\u68C0\u67E5\u76F8\u673A\u662F\u5426\u5411\u5DE6\u6EDA\u52A8\u3002","Camera is scrolling left":"\u76F8\u673A\u6B63\u5728\u5411\u5DE6\u6EDA\u52A8","Check if the camera is scrolling right.":"\u68C0\u67E5\u76F8\u673A\u662F\u5426\u5411\u53F3\u6EDA\u52A8\u3002","Camera is scrolling right":"\u76F8\u673A\u6B63\u5728\u5411\u53F3\u6EDA\u52A8","Draw a rectangle that shows where edge scrolling will be triggered.":"\u7ED8\u5236\u4E00\u4E2A\u663E\u793A\u8FB9\u7F18\u6EDA\u52A8\u5C06\u88AB\u89E6\u53D1\u7684\u77E9\u5F62\u3002","Draw edge scrolling screen margin":"\u7ED8\u5236\u8FB9\u7F18\u6EDA\u52A8\u5C4F\u5E55\u8FB9\u7F18","Draw edge scrolling screen margin with _PARAM1_":"\u7528_PARAM1_\u7ED8\u5236\u8FB9\u7F18\u6EDA\u52A8\u5C4F\u5E55\u8FB9\u7F18","Return the speed the camera is currently scrolling in horizontal direction (in pixels per second).":"\u8FD4\u56DE\u76F8\u673A\u5F53\u524D\u5728\u6C34\u5E73\u65B9\u5411\u4E0A\u6EDA\u52A8\u7684\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09\u3002","Horizontal edge scroll speed":"\u6C34\u5E73\u8FB9\u7F18\u6EDA\u52A8\u901F\u5EA6","Return the speed the camera is currently scrolling in vertical direction (in pixels per second).":"\u8FD4\u56DE\u76F8\u673A\u5F53\u524D\u5728\u5782\u76F4\u65B9\u5411\u4E0A\u6EDA\u52A8\u7684\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09\u3002","Vertical edge scroll speed":"\u5782\u76F4\u8FB9\u7F18\u6EDA\u52A8\u901F\u5EA6","Return the absolute scroll speed according to the mouse distance from the border.":"\u6839\u636E\u9F20\u6807\u8DDD\u79BB\u8FB9\u754C\u7684\u8DDD\u79BB\u8FD4\u56DE\u7EDD\u5BF9\u6EDA\u52A8\u901F\u5EA6\u3002","Absolute scroll speed":"\u7EDD\u5BF9\u6EDA\u52A8\u901F\u5EA6","Border distance":"\u8FB9\u754C\u8DDD\u79BB","Ellipse movement":"\u692D\u5706\u79FB\u52A8","Move objects on ellipses or smoothly back and forth in one direction.":"\u5728\u692D\u5706\u4E0A\u79FB\u52A8\u5BF9\u8C61\u6216\u5728\u4E00\u4E2A\u65B9\u5411\u4E0A\u5E73\u6ED1\u6765\u56DE\u79FB\u52A8\u3002","Radius of the movement on X axis":"\u5728X\u8F74\u4E0A\u7684\u79FB\u52A8\u534A\u5F84","Ellipse":"\u692D\u5706","Radius of the movement on Y axis":"\u5728Y\u8F74\u4E0A\u7684\u79FB\u52A8\u534A\u5F84","Loop duration":"\u5FAA\u73AF\u6301\u7EED\u65F6\u95F4","Turn left":"\u5DE6\u8F6C","Initial direction":"\u521D\u59CB\u65B9\u5411","Rotate":"\u65CB\u8F6C","Change the turning direction (left or right).":"\u66F4\u6539\u8F6C\u5411\u65B9\u5411\uFF08\u5DE6\u6216\u53F3\uFF09\u3002","Turn the other way":"\u5411\u53E6\u4E00\u4FA7\u8F6C\u5411","_PARAM0_ turn the other way":"_PARAM0_\u5411\u53E6\u4E00\u4FA7\u8F6C\u5411","Change the in which side the object is turning (left or right).":"\u66F4\u6539\u5BF9\u8C61\u8F6C\u5411\u7684\u65B9\u5411\uFF08\u5DE6\u6216\u53F3\uFF09\u3002","Turn left or right":"\u5411\u5DE6\u6216\u5411\u53F3\u8F6C\u5411","_PARAM0_ turn left: _PARAM2_":"_PARAM0_\u5411\u5DE6\u8F6C\u5411\uFF1A_PARAM2_","Check if the object is turning left.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5411\u5DE6\u8F6C\u5411\u3002","Is turning left":"\u6B63\u5728\u5411\u5DE6\u8F6C\u5411","_PARAM0_ is turning left":"_PARAM0_\u6B63\u5728\u5411\u5DE6\u8F6C\u5411","Return the movement angle of the object.":"\u8FD4\u56DE\u7269\u4F53\u7684\u8FD0\u52A8\u89D2\u5EA6\u3002","Set initial Y of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u521D\u59CBY\u8BBE\u7F6E\u4E3A_PARAM2_","Return the loop duration (in seconds).":"\u8FD4\u56DE\u5FAA\u73AF\u6301\u7EED\u65F6\u95F4\uFF08\u5355\u4F4D\uFF1A\u79D2\uFF09\u3002","Return the ellipse radius on X axis.":"\u8FD4\u56DEX\u8F74\u4E0A\u7684\u692D\u5706\u534A\u5F84\u3002","Radius X":"\u534A\u5F84X","Radius Y":"\u534A\u5F84Y","Return the movement center position on X axis.":"\u8FD4\u56DEX\u8F74\u4E0A\u7684\u8FD0\u52A8\u4E2D\u5FC3\u4F4D\u7F6E\u3002","Movement center X":"\u8FD0\u52A8\u4E2D\u5FC3X","Return the movement center position on Y axis.":"\u8FD4\u56DEY\u8F74\u4E0A\u7684\u8FD0\u52A8\u4E2D\u5FC3\u4F4D\u7F6E\u3002","Movement center Y":"\u8FD0\u52A8\u4E2D\u5FC3Y","Change the radius on X axis of the movement.":"\u66F4\u6539\u8FD0\u52A8\u7684X\u8F74\u534A\u5F84\u3002","Change the radius on X axis of the movement of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u8FD0\u52A8X\u8F74\u534A\u5F84\u66F4\u6539\u4E3A_PARAM2_","Change the radius on Y axis of the movement.":"\u66F4\u6539\u8FD0\u52A8\u7684Y\u8F74\u534A\u5F84\u3002","Change the radius on Y axis of the movement of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u8FD0\u52A8Y\u8F74\u534A\u5F84\u66F4\u6539\u4E3A_PARAM2_","Change the loop duration.":"\u66F4\u6539\u5FAA\u73AF\u6301\u7EED\u65F6\u95F4\u3002","Change the loop duration of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5FAA\u73AF\u6301\u7EED\u65F6\u95F4\u66F4\u6539\u4E3A_PARAM2_","Speed (in degrees per second)":"\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\uFF09","Change the movement angle. The object is teleported according to the angle.":"\u66F4\u6539\u8FD0\u52A8\u89D2\u5EA6\u3002\u6839\u636E\u89D2\u5EA6\u4F7F\u5BF9\u8C61\u4F20\u9001\u3002","Teleport at an angle":"\u6839\u636E\u89D2\u5EA6\u4F20\u9001","Teleport _PARAM0_ on the ellipse at _PARAM2_\xB0":"\u5728\u692D\u5706\u4E0A\u4EE5_PARAM2_\xB0\u7684\u89D2\u5EA6\u4F20\u9001_PARAM0_","Delta X":"\u0394X","Delta Y":"\u0394Y","Direction angle":"\u65B9\u5411\u89D2\u5EA6","Emojis":"\u8868\u60C5\u7B26\u53F7","Display emoji characters in text objects and store them in strings.":"\u5728\u6587\u672C\u5BF9\u8C61\u4E2D\u663E\u793A\u8868\u60C5\u7B26\u53F7\u5E76\u5C06\u5176\u5B58\u50A8\u4E3A\u5B57\u7B26\u4E32\u3002","Returns the specified emoji, from the provided name.":"\u6839\u636E\u63D0\u4F9B\u7684\u540D\u79F0\u8FD4\u56DE\u6307\u5B9A\u7684\u8868\u60C5\u7B26\u53F7\u3002","Returns the specified emoji (name)":"\u8FD4\u56DE\u6307\u5B9A\u7684\u8868\u60C5\u7B26\u53F7\uFF08\u540D\u79F0\uFF09","Name of emoji":"\u8868\u60C5\u7B26\u53F7\u7684\u540D\u79F0","Full list of emojis: [https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)":"\u8868\u60C5\u7B26\u53F7\u7684\u5B8C\u6574\u5217\u8868\uFF1A[https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)","Returns the specified emoji, from a hexadecimal value.":"\u6839\u636E\u5341\u516D\u8FDB\u5236\u503C\u8FD4\u56DE\u6307\u5B9A\u7684\u8868\u60C5\u7B26\u53F7\u3002","Returns the specified emoji (hex)":"\u8FD4\u56DE\u6307\u5B9A\u7684\u8868\u60C5\u7B26\u53F7\uFF08\u5341\u516D\u8FDB\u5236\uFF09","Hexadecimal code":"\u5341\u516D\u8FDB\u5236\u4EE3\u7801","Full list of hexadecimal code: [https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)":"\u5341\u516D\u8FDB\u5236\u4EE3\u7801\u7684\u5B8C\u6574\u5217\u8868\uFF1A[https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)","Explosion force":"\u7206\u70B8\u529B","Simulate an explosion with physics forces on target objects.":"\u6A21\u62DF\u5BF9\u76EE\u6807\u5BF9\u8C61\u65BD\u52A0\u7269\u7406\u529B\u7684\u7206\u70B8\u3002","Simulate explosion with physics forces":"\u4F7F\u7528\u7269\u7406\u529B\u6A21\u62DF\u7206\u70B8","Simulate an explosion that affects _PARAM1_ within explosion radius: _PARAM6_ (pixels), Explosion center: _PARAM3_, _PARAM4_. Max force: _PARAM5_":"\u6A21\u62DF\u5F71\u54CD_PARAM1_\u8303\u56F4\u5185\u7684\u7206\u70B8\uFF1A_PARAM6_\uFF08\u50CF\u7D20\uFF09\uFF0C\u7206\u70B8\u4E2D\u5FC3\uFF1A_PARAM3_\uFF0C_PARAM4_\u3002 \u6700\u5927\u529B\uFF1A_PARAM5_","Target Object":"\u76EE\u6807\u5BF9\u8C61","Physics Behavior (required)":"\u7269\u7406\u884C\u4E3A\uFF08\u5FC5\u586B\uFF09","Explosion center (X)":"\u7206\u70B8\u4E2D\u5FC3\uFF08X\uFF09","Explosion center (Y)":"\u7206\u70B8\u4E2D\u5FC3\uFF08Y\uFF09","Max force (of explosion)":"\u7206\u70B8\u7684\u6700\u5927\u529B\uFF08\u7206\u70B8\u7684\uFF09","Force decreases the farther an object is from the explosion center.":"\u529B\u968F\u5BF9\u8C61\u79BB\u7206\u70B8\u4E2D\u5FC3\u7684\u8DDD\u79BB\u800C\u51CF\u5C0F\u3002","Max distance (from center of explosion) (pixels)":"\u6700\u5927\u8DDD\u79BB\uFF08\u4ECE\u7206\u70B8\u4E2D\u5FC3\uFF09\uFF08\u50CF\u7D20\uFF09","Objects less than this distance will be affected by the explosion.":"\u5C0F\u4E8E\u6B64\u8DDD\u79BB\u7684\u5BF9\u8C61\u5C06\u53D7\u5230\u5F71\u54CD\u3002","Extended math support":"\u8F85\u52A9\u6570\u5B66\u652F\u6301","Additional math functions and constants as expressions and conditions.":"\u989D\u5916\u7684\u6570\u5B66\u51FD\u6570\u548C\u5E38\u6570\u4F5C\u4E3A\u8868\u8FBE\u5F0F\u548C\u6761\u4EF6\u3002","Returns a term from the Fibonacci sequence.":"\u8FD4\u56DE\u6765\u81EA\u6590\u6CE2\u90A3\u5951\u6570\u5217\u7684\u4E00\u4E2A\u9879\u3002","Fibonacci numbers":"\u6590\u6CE2\u90A3\u5951\u6570","The desired term in the sequence":"\u5E8F\u5217\u4E2D\u6240\u9700\u7684\u9879","Calculates the steepness of a line between two points.":"\u8BA1\u7B97\u4E24\u70B9\u4E4B\u95F4\u7EBF\u7684\u659C\u7387\u3002","Slope":"\u659C\u7387","X value of the first point":"\u7B2C\u4E00\u4E2A\u70B9\u7684X\u503C","Y value of the first point":"\u7B2C\u4E00\u4E2A\u70B9\u7684Y\u503C","X value of the second point":"\u7B2C\u4E8C\u4E2A\u70B9\u7684X\u503C","Y value of the second point":"\u7B2C\u4E8C\u4E2A\u70B9\u7684Y\u503C","Converts a number of one range e.g. 0-1 to another 0-255.":"\u5C06\u4E00\u4E2A\u8303\u56F4\uFF08\u4F8B\u59820-1\uFF09\u5185\u7684\u6570\u5B57\u8F6C\u6362\u4E3A\u53E6\u4E00\u4E2A\u8303\u56F40-255\u3002","Map":"\u6620\u5C04","The value to convert":"\u8981\u8F6C\u6362\u7684\u503C","The lowest value of the first range":"\u7B2C\u4E00\u4E2A\u8303\u56F4\u7684\u6700\u5C0F\u503C","The highest value of the first range":"\u7B2C\u4E00\u4E2A\u8303\u56F4\u7684\u6700\u5927\u503C","The lowest value of the second range":"\u7B2C\u4E8C\u4E2A\u8303\u56F4\u7684\u6700\u5C0F\u503C","The highest value of the second range":"\u7B2C\u4E8C\u4E2A\u8303\u56F4\u7684\u6700\u5927\u503C","Returns the value of the length of the hypotenuse.":"\u8FD4\u56DE\u659C\u8FB9\u7684\u957F\u5EA6\u503C\u3002","Hypotenuse length":"\u659C\u8FB9\u957F\u5EA6","First side of the triangle":"\u4E09\u89D2\u5F62\u7684\u7B2C\u4E00\u8FB9","Second side of the triangle":"\u4E09\u89D2\u5F62\u7684\u7B2C\u4E8C\u8FB9","Returns the greatest common factor of two numbers.":"\u8FD4\u56DE\u4E24\u6570\u7684\u6700\u5927\u516C\u7EA6\u6570\u3002","Greatest common factor (gcf)":"\u6700\u5927\u516C\u7EA6\u6570\uFF08GCF\uFF09","Any integer":"\u4EFB\u610F\u6574\u6570","Returns the lowest common multiple of two numbers.":"\u8FD4\u56DE\u4E24\u4E2A\u6570\u5B57\u7684\u6700\u5C0F\u516C\u500D\u6570\u3002","Lowest common multiple (lcm)":"\u6700\u5C0F\u516C\u500D\u6570 (lcm)","Returns the input multiplied by all the previous whole numbers.":"\u8FD4\u56DE\u8F93\u5165\u503C\u4E58\u4EE5\u6240\u6709\u524D\u9762\u7684\u6574\u6570\u3002","Factorial":"\u9636\u4E58","Any positive integer":"\u4EFB\u4F55\u6B63\u6574\u6570","Converts a polar coordinate into the Cartesian x value.":"\u5C06\u6781\u5750\u6807\u8F6C\u6362\u4E3A\u7B1B\u5361\u5C14\u5E73\u9762\u5750\u6807 x \u503C\u3002","Polar coordinate to Cartesian X value":"\u6781\u5750\u6807\u8F6C\u7B1B\u5361\u5C14\u5E73\u9762\u5750\u6807 x \u503C","Angle or theta in radians":"\u89D2\u5EA6\u6216\u5F27\u5EA6\u03B8","Converts a polar coordinate into the Cartesian y value.":"\u5C06\u6781\u5750\u6807\u8F6C\u6362\u4E3A\u7B1B\u5361\u5C14\u5E73\u9762\u5750\u6807 y \u503C\u3002","Polar coordinate to Cartesian Y value":"\u6781\u5750\u6807\u8F6C\u7B1B\u5361\u5C14\u5E73\u9762\u5750\u6807 y \u503C","Converts a isometric coordinate into the Cartesian x value.":"\u5C06\u7B49\u89D2\u5750\u6807\u8F6C\u6362\u4E3A\u7B1B\u5361\u5C14\u5E73\u9762\u5750\u6807 x \u503C\u3002","Isometric coordinate to Cartesian X value":"\u7B49\u89D2\u5750\u6807\u8F6C\u7B1B\u5361\u5C14\u5E73\u9762\u5750\u6807 x \u503C","Position on the x axis":"x \u8F74\u4E0A\u7684\u4F4D\u7F6E","Position on the y axis":"y \u8F74\u4E0A\u7684\u4F4D\u7F6E","Converts a isometric coordinate into the Cartesian y value.":"\u5C06\u7B49\u89D2\u5750\u6807\u8F6C\u6362\u4E3A\u7B1B\u5361\u5C14\u5E73\u9762\u5750\u6807 y \u503C\u3002","Isometric coordinate to Cartesian Y value":"\u7B49\u89D2\u5750\u6807\u8F6C\u7B1B\u5361\u5C14\u5E73\u9762\u5750\u6807 y \u503C","Returns the golden ratio.":"\u8FD4\u56DE\u9EC4\u91D1\u5206\u5272\u6BD4\u3002","Golden ratio":"\u9EC4\u91D1\u5206\u5272\u6BD4","Returns Pi (\u03C0).":"\u8FD4\u56DE Pi (\u03C0)\u3002","Pi (\u03C0)":"\u03C0","Returns half Pi.":"\u8FD4\u56DE Pi \u7684\u4E00\u534A\u3002","Half Pi":"\u534A Pi","Returns the natural logarithm of e. (Euler's number).":"\u8FD4\u56DE\u81EA\u7136\u5BF9\u6570 e \u7684\u503C\u3002","Natural logarithm of e":"e \u7684\u81EA\u7136\u5BF9\u6570","Returns the natural logarithm of 2.":"\u8FD4\u56DE 2 \u7684\u81EA\u7136\u5BF9\u6570\u3002","Natural logarithm of 2":"2 \u7684\u81EA\u7136\u5BF9\u6570","Returns the natural logarithm of 10.":"\u8FD4\u56DE 10 \u7684\u81EA\u7136\u5BF9\u6570\u3002","Natural logarithm of 10":"10 \u7684\u81EA\u7136\u5BF9\u6570","Returns the base 2 logarithm of e. (Euler's number).":"\u8FD4\u56DE e \u7684\u4EE5 2 \u4E3A\u5E95\u7684\u5BF9\u6570\u3002","Base 2 logarithm of e":"e \u7684\u4EE5 2 \u4E3A\u5E95\u7684\u5BF9\u6570","Returns the base 10 logarithm of e. (Euler's number).":"\u8FD4\u56DE e \u7684\u4EE5 10 \u4E3A\u5E95\u7684\u5BF9\u6570\u3002","Base 10 logarithm of e":"e \u7684\u4EE5 10 \u4E3A\u5E95\u7684\u5BF9\u6570","Returns square root of 2.":"\u8FD4\u56DE 2 \u7684\u5E73\u65B9\u6839\u3002","Square root of 2":"2 \u7684\u5E73\u65B9\u6839","Returns square root of 1/2.":"\u8FD4\u56DE 1/2 \u7684\u5E73\u65B9\u6839\u3002","Square root of 1/2":"1/2\u7684\u5E73\u65B9\u6839","Returns quarter Pi.":"\u8FD4\u56DE\u56DB\u5206\u4E4B\u4E00\u03C0\u3002","Quarter Pi":"\u56DB\u5206\u4E4B\u4E00\u03C0","Formats a number to use the specified number of decimal places (Deprecated).":"\u5C06\u6570\u5B57\u683C\u5F0F\u5316\u4E3A\u6307\u5B9A\u5C0F\u6570\u4F4D\u6570\uFF08\u5DF2\u5F03\u7528\uFF09\u3002","ToFixed":"ToFixed","The value to be rounded":"\u8981\u820D\u5165\u7684\u503C","Number of decimal places":"\u5C0F\u6570\u4F4D\u6570","Formats a number to a string with the specified number of decimal places.":"\u5C06\u6570\u5B57\u683C\u5F0F\u5316\u4E3A\u6307\u5B9A\u5C0F\u6570\u4F4D\u6570\u7684\u5B57\u7B26\u4E32\u3002","Check if the number is even (divisible by 2). To check for odd numbers, invert this condition.":"\u68C0\u67E5\u6570\u5B57\u662F\u5426\u4E3A\u5076\u6570\uFF08\u53EF\u88AB2\u6574\u9664\uFF09\u3002\u8981\u68C0\u67E5\u5947\u6570\uFF0C\u53CD\u8F6C\u6B64\u6761\u4EF6\u3002","Is even?":"\u662F\u5076\u6570\u5417\uFF1F","_PARAM1_ is even":"_PARAM1_\u662F\u5076\u6570","Extended variables support":"\u6269\u5C55\u7684\u53D8\u91CF\u652F\u6301","Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.":"\u6DFB\u52A0\u6761\u4EF6\u3001\u52A8\u4F5C\u548C\u8868\u8FBE\u5F0F\u6765\u68C0\u67E5\u53D8\u91CF\u7684\u5B58\u5728\uFF0C\u590D\u5236\u53D8\u91CF\uFF0C\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u73B0\u6709\u53D8\u91CF\uFF0C\u5E76\u521B\u5EFA\u52A8\u6001\u53D8\u91CF\u3002","Check if a global variable exists.":"\u68C0\u67E5\u5168\u5C40\u53D8\u91CF\u662F\u5426\u5B58\u5728\u3002","Global variable exists":"\u5168\u5C40\u53D8\u91CF\u5B58\u5728","If the global variable _PARAM1_ exist":"\u5982\u679C\u5168\u5C40\u53D8\u91CF_PARAM1_\u5B58\u5728","Name of the global variable":"\u5168\u5C40\u53D8\u91CF\u7684\u540D\u79F0","Check if the global variable exists.":"\u68C0\u67E5\u5168\u5C40\u53D8\u91CF\u662F\u5426\u5B58\u5728\u3002","Check if a scene variable exists.":"\u68C0\u67E5\u573A\u666F\u53D8\u91CF\u662F\u5426\u5B58\u5728\u3002","Scene variable exists":"\u573A\u666F\u53D8\u91CF\u5B58\u5728","If the scene variable _PARAM1_ exist":"\u5982\u679C\u573A\u666F\u53D8\u91CF_PARAM1_\u5B58\u5728","Name of the scene variable":"\u573A\u666F\u53D8\u91CF\u7684\u540D\u79F0","Check if the scene variable exists.":"\u68C0\u67E5\u573A\u666F\u53D8\u91CF\u662F\u5426\u5B58\u5728\u3002","Check if an object variable exists.":"\u68C0\u67E5\u5BF9\u8C61\u53D8\u91CF\u662F\u5426\u5B58\u5728\u3002","Object variable exists":"\u5BF9\u8C61\u53D8\u91CF\u5B58\u5728","Object _PARAM1_ has object variable _PARAM2_":"\u5BF9\u8C61_PARAM1_\u6709\u5BF9\u8C61\u53D8\u91CF_PARAM2_","Name of object variable":"\u5BF9\u8C61\u53D8\u91CF\u7684\u540D\u79F0","Delete a global variable, removing it from memory.":"\u5220\u9664\u5168\u5C40\u53D8\u91CF\uFF0C\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u3002","Delete global variable":"\u5220\u9664\u5168\u5C40\u53D8\u91CF","Delete global variable _PARAM1_":"\u5220\u9664\u5168\u5C40\u53D8\u91CF_PARAM1_","Name of the global variable to delete":"\u8981\u5220\u9664\u7684\u5168\u5C40\u53D8\u91CF\u7684\u540D\u79F0","Delete the global variable, removing it from memory.":"\u5220\u9664\u5168\u5C40\u53D8\u91CF\uFF0C\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u3002","Delete the global variable _PARAM1_ from memory":"\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u5168\u5C40\u53D8\u91CF_PARAM1_","Modify the text of a scene variable.":"\u4FEE\u6539\u573A\u666F\u53D8\u91CF\u7684\u6587\u672C\u3002","String of a scene variable":"\u573A\u666F\u53D8\u91CF\u7684\u5B57\u7B26\u4E32","Change the text of scene variable _PARAM1_ to _PARAM2_":"\u5C06\u573A\u666F\u53D8\u91CF_PARAM1_\u7684\u6587\u672C\u66F4\u6539\u4E3A_PARAM2_","Modify the text of a global variable.":"\u4FEE\u6539\u5168\u5C40\u53D8\u91CF\u7684\u6587\u672C\u3002","String of a global variable":"\u5168\u5C40\u53D8\u91CF\u7684\u5B57\u7B26\u4E32","Change the text of global variable _PARAM1_ to _PARAM2_":"\u5C06\u5168\u5C40\u53D8\u91CF _PARAM1_ \u7684\u6587\u672C\u66F4\u6539\u4E3A _PARAM2_","Modify the value of a global variable.":"\u4FEE\u6539\u5168\u5C40\u53D8\u91CF\u7684\u503C\u3002","Value of a global variable":"\u5168\u5C40\u53D8\u91CF\u7684\u503C","Change the global variable _PARAM1_ with value: _PARAM2_":"\u5C06\u5168\u5C40\u53D8\u91CF _PARAM1_ \u7684\u503C\u66F4\u6539\u4E3A\uFF1A_PARAM2_","Modify the value of a scene variable.":"\u4FEE\u6539\u573A\u666F\u53D8\u91CF\u7684\u503C\u3002","Value of a scene variable":"\u573A\u666F\u53D8\u91CF\u7684\u503C","Change the scene variable _PARAM1_ with value: _PARAM2_":"\u5C06\u573A\u666F\u53D8\u91CF _PARAM1_ \u7684\u503C\u66F4\u6539\u4E3A\uFF1A_PARAM2_","Delete scene variable, the variable will be deleted from the memory.":"\u5220\u9664\u573A\u666F\u53D8\u91CF\uFF0C\u8BE5\u53D8\u91CF\u5C06\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u3002","Delete scene variable":"\u5220\u9664\u573A\u666F\u53D8\u91CF","Delete the scene variable _PARAM1_":"\u5220\u9664\u573A\u666F\u53D8\u91CF _PARAM1_","Name of the scene variable to delete":"\u8981\u5220\u9664\u7684\u573A\u666F\u53D8\u91CF\u540D\u79F0","Delete the scene variable, the variable will be deleted from the memory.":"\u5220\u9664\u573A\u666F\u53D8\u91CF\uFF0C\u8BE5\u53D8\u91CF\u5C06\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u3002","Delete the scene variable _PARAM1_ from memory":"\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u573A\u666F\u53D8\u91CF _PARAM1_","Copy an object variable from one object to another.":"\u5C06\u5BF9\u8C61\u53D8\u91CF\u4ECE\u4E00\u4E2A\u5BF9\u8C61\u590D\u5236\u5230\u53E6\u4E00\u4E2A\u5BF9\u8C61\u3002","Copy an object variable":"\u590D\u5236\u5BF9\u8C61\u53D8\u91CF","Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_":"\u5C06 _PARAM1_ \u7684\u503C\u53D8\u91CF\u590D\u5236\u5230 _PARAM3_ \u7684\u503C\u53D8\u91CF","Source object":"\u6E90\u5BF9\u8C61","Variable to copy":"\u8981\u590D\u5236\u7684\u53D8\u91CF","Destination object":"\u76EE\u6807\u5BF9\u8C61","To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.":"\u8981\u5C06\u53D8\u91CF\u5728\u540C\u4E00\u5BF9\u8C61\u76842\u4E2A\u5B9E\u4F8B\u4E4B\u95F4\u590D\u5236\uFF0C\u5FC5\u987B\u5148\u5C06\u53D8\u91CF\u590D\u5236\u5230\u53E6\u4E00\u4E2A\u5BF9\u8C61\u3002","Destination variable":"\u76EE\u6807\u53D8\u91CF","Copy the object variable from one object to another.":"\u5C06\u5BF9\u8C61\u53D8\u91CF\u4ECE\u4E00\u4E2A\u5BF9\u8C61\u590D\u5236\u5230\u53E6\u4E00\u4E2A\u5BF9\u8C61\u3002","Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)":"\u5C06_PARAM1_\u7684\u53D8\u91CF_PARAM2_\u590D\u5236\u5230\u53D8\u91CF_PARAM3_\u7684_PARAM4_\uFF08\u9996\u5148\u6E05\u7A7A\u76EE\u6807\uFF1A_PARAM5_\uFF09","Clear the destination variable before copying":"\u5728\u590D\u5236\u4E4B\u524D\u6E05\u9664\u76EE\u6807\u53D8\u91CF","Copy all object variables from one object to another.":"\u5C06\u4E00\u4E2A\u5BF9\u8C61\u7684\u6240\u6709\u53D8\u91CF\u590D\u5236\u5230\u53E6\u4E00\u4E2A\u5BF9\u8C61\u3002","Copy all object variables":"\u590D\u5236\u6240\u6709\u5BF9\u8C61\u53D8\u91CF","Copy all variables from _PARAM1_ to _PARAM2_":"\u5C06\u6240\u6709\u53D8\u91CF\u4ECE_PARAM1_\u590D\u5236\u5230_PARAM2_","Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)":"\u5C06\u5BF9\u8C61_PARAM1_\u7684\u6240\u6709\u53D8\u91CF\u590D\u5236\u5230\u5BF9\u8C61_PARAM2_\uFF08\u9996\u5148\u6E05\u7A7A\u76EE\u6807\uFF1A_PARAM3_\uFF09","Delete an object variable, removing it from memory.":"\u5220\u9664\u5BF9\u8C61\u53D8\u91CF\uFF0C\u4ECE\u5185\u5B58\u4E2D\u79FB\u9664\u3002","Delete object variable":"\u5220\u9664\u5BF9\u8C61\u53D8\u91CF","Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory":"\u4ECE\u5185\u5B58\u4E2D\u5220\u9664\u5BF9\u8C61_PARAM1_\u7684\u5BF9\u8C61\u53D8\u91CF_PARAM2_","Return the text of a global variable.":"\u8FD4\u56DE\u5168\u5C40\u53D8\u91CF\u7684\u6587\u672C\u3002","Text of a global variable":"\u5168\u5C40\u53D8\u91CF\u7684\u6587\u672C","Return the text of a scene variable.":"\u8FD4\u56DE\u573A\u666F\u53D8\u91CF\u7684\u6587\u672C\u3002","Text of a scene variable":"\u573A\u666F\u53D8\u91CF\u7684\u6587\u672C","Return the value of a global variable.":"\u8FD4\u56DE\u5168\u5C40\u53D8\u91CF\u7684\u503C\u3002","Return the value of a scene variable.":"\u8FD4\u56DE\u573A\u666F\u53D8\u91CF\u7684\u503C\u3002","Copy the global variable to scene. This copy everything from the types to the values.":"\u5C06\u5168\u5C40\u53D8\u91CF\u590D\u5236\u5230\u573A\u666F\u3002 \u8FD9\u4F1A\u5C06\u4E00\u5207\u4ECE\u7C7B\u578B\u5230\u503C\u590D\u5236\u3002","Copy a global variable to scene":"\u5C06\u5168\u5C40\u53D8\u91CF\u590D\u5236\u5230\u573A\u666F","Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)":"\u5C06\u5168\u5C40\u53D8\u91CF:_PARAM1_\u590D\u5236\u5230\u573A\u666F\u53D8\u91CF:_PARAM2_\uFF08\u9996\u5148\u6E05\u7A7A\u76EE\u6807\uFF1A_PARAM3_\uFF09","Global variable to copy":"\u8981\u590D\u5236\u7684\u5168\u5C40\u53D8\u91CF","Scene variable destination":"\u573A\u666F\u53D8\u91CF\u76EE\u7684\u5730","Copy the scene variable to global. This copy everything from the types to the values.":"\u5C06\u573A\u666F\u53D8\u91CF\u590D\u5236\u5230\u5168\u5C40\u53D8\u91CF\u4E2D\u3002\u8FD9\u5C06\u590D\u5236\u7C7B\u578B\u5230\u503C\u4E2D\u7684\u6BCF\u4E00\u9879\u3002","Copy a scene variable to global":"\u5C06\u573A\u666F\u53D8\u91CF\u590D\u5236\u5230\u5168\u5C40","Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)":"\u5C06\u573A\u666F\u53D8\u91CF:_PARAM1_\u590D\u5236\u5230\u5168\u5C40\u53D8\u91CF:_PARAM2_(\u9996\u5148\u6E05\u9664\u76EE\u6807: _PARAM3_)","Scene variable to copy":"\u8981\u590D\u5236\u7684\u573A\u666F\u53D8\u91CF","Global variable destination":"\u5168\u5C40\u53D8\u91CF\u76EE\u7684\u5730","Frames per second (FPS)":"\u6BCF\u79D2\u5E27\u6570\uFF08FPS\uFF09","Calculate and display the frames per second (FPS) of the game.":"\u8BA1\u7B97\u5E76\u663E\u793A\u6BCF\u79D2\u5E27\u6570 (FPS)\u3002","Frames per second (FPS) during the last second.":"\u4E0A\u4E00\u4E2A\u79D2\u5185\u7684\u6BCF\u79D2\u5E27\u6570(FPS)\u3002","Frames Per Second (FPS)":"\u6BCF\u79D2\u5E27\u6570(FPS)","Frames per second (FPS) during the last second. [Deprecated]":"\u4E0A\u4E00\u4E2A\u79D2\u5185\u7684\u6BCF\u79D2\u5E27\u6570(FPS)\u3002[\u5DF2\u5F03\u7528]","Frames Per Second (FPS) [Deprecated]":"\u6BCF\u79D2\u5E27\u6570(FPS) [\u5DF2\u5F03\u7528]","The accuracy of the FPS":"FPS\u7684\u51C6\u786E\u6027","This tells how many numbers after the period should be shown.":"\u6B64\u9879\u5B9A\u4E49\u5C0F\u6570\u70B9\u540E\u5E94\u8BE5\u663E\u793A\u7684\u6570\u5B57\u7684\u6570\u91CF\u3002","Makes a text object display the current FPS.":"\u4F7F\u6587\u672C\u5BF9\u8C61\u663E\u793A\u5F53\u524DFPS\u3002","FPS Displayer":"FPS\u5C55\u793A\u5668","FPS counter prefix":"FPS\u8BA1\u6570\u5668\u524D\u7F00","Number of decimal digits":"\u5C0F\u6570\u4F4D\u6570","Face Forward":"\u9762\u671D\u524D\u65B9","Face object towards the direction of movement.":"\u5C06\u5BF9\u8C61\u7684\u9762\u5411\u4E0E\u79FB\u52A8\u65B9\u5411\u5BF9\u9F50\u3002","Face forward":"\u9762\u5411\u6B63\u9762","Rotation speed (degrees per second)":"\u65CB\u8F6C\u901F\u5EA6(\u6BCF\u79D2\u7684\u5EA6\u6570)","Use \"0\" for immediate turning.":"\u4F7F\u7528\"0\"\u8FDB\u884C\u7ACB\u5373\u8F6C\u5411\u3002","Offset angle":"\u504F\u79FB\u89D2\u5EA6","Can be used when the image of the object is not facing to the right.":"\u5F53\u5BF9\u8C61\u7684\u56FE\u50CF\u4E0D\u9762\u5411\u53F3\u4FA7\u65F6\u53EF\u4F7F\u7528\u3002","Previous X position":"\u4E4B\u524D\u7684X\u4F4D\u7F6E","Previous Y position":"\u4E4B\u524D\u7684Y\u4F4D\u7F6E","Direction the object is moving (in degrees)":"\u5BF9\u8C61\u79FB\u52A8\u7684\u65B9\u5411(\u4EE5\u5EA6\u4E3A\u5355\u4F4D)","Set rotation speed (degrees per second). Use \"0\" for immediate turning.":"\u8BBE\u7F6E\u65CB\u8F6C\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\uFF09\u3002\u5C06\u201C0\u201D\u7528\u4E8E\u7ACB\u5373\u8F6C\u5411\u3002","Set rotation speed":"\u8BBE\u7F6E\u65CB\u8F6C\u901F\u5EA6","Set rotation speed of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u65CB\u8F6C\u901F\u5EA6\u8BBE\u7F6E\u4E3A_PARAM2_","Rotation Speed":"\u65CB\u8F6C\u901F\u5EA6","Set offset angle.":"\u8BBE\u7F6E\u504F\u79FB\u89D2\u5EA6\u3002","Set offset angle":"\u8BBE\u7F6E\u504F\u79FB\u89D2\u5EA6","Set offset angle of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u504F\u79FB\u89D2\u5EA6\u8BBE\u7F6E\u4E3A_PARAM2_","Rotation speed (in degrees per second).":"\u65CB\u8F6C\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\u6570\uFF09\u3002","Rotation speed":"\u65CB\u8F6C\u901F\u5EA6","Rotation speed of _PARAM0_":"_PARAM0_\u7684\u65CB\u8F6C\u901F\u5EA6","Offset angle.":"\u504F\u79FB\u89D2\u5EA6\u3002","Direction the object is moving (in degrees).":"\u7269\u4F53\u79FB\u52A8\u7684\u65B9\u5411\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u3002","Movement direction":"\u79FB\u52A8\u65B9\u5411","Fire bullets":"\u5F00\u706B\u5B50\u5F39","Fire bullets, manage ammo, reloading and overheating.":"\u5F00\u706B\u5B50\u5F39\uFF0C\u7BA1\u7406\u5F39\u836F\u3001\u91CD\u65B0\u88C5\u586B\u548C\u8FC7\u70ED\u3002","Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).":"\u4EE5\u5185\u7F6E\u51B7\u5374\u65F6\u95F4\u3001\u5F39\u836F\u3001\u91CD\u88C5\u548C\u8FC7\u70ED\u529F\u80FD\u53D1\u5C04\u5B50\u5F39\u3002\u4E00\u65E6\u6DFB\u52A0\u5230\u60A8\u7684\u5FC5\u987B\u5C04\u51FB\u7684\u5BF9\u8C61\u4E2D\uFF0C\u4F7F\u7528\u884C\u4E3A\u52A8\u4F5C\u5C06\u53E6\u4E00\u4E2A\u5BF9\u8C61\u4F5C\u4E3A\u5B50\u5F39\u53D1\u5C04\u3002\u8FD9\u4E9B\u52A8\u4F5C\u4F1A\u5185\u90E8\u68C0\u67E5\u6240\u6709\u7EA6\u675F\uFF08\u53EF\u4EE5\u5728\u6CA1\u6709\u6761\u4EF6\u7684\u60C5\u51B5\u4E0B\u8C03\u7528\uFF0C\u53EA\u6709\u5728\u51C6\u5907\u597D\u65F6\u624D\u4F1A\u53D1\u5C04\uFF09\uFF0C\u5E76\u4F7F\u5B50\u5F39\u79FB\u52A8\uFF08\u4F7F\u7528\u6C38\u4E45\u6027\u529B\u91CF\uFF09\u3002","Firing cooldown":"\u5C04\u51FB\u51B7\u5374","Objects cannot shoot while firing cooldown is active.":"\u5728\u5C04\u51FB\u51B7\u5374\u6D3B\u52A8\u65F6\uFF0C\u5BF9\u8C61\u65E0\u6CD5\u5C04\u51FB\u3002","Rotate bullets to match their trajectory":"\u65CB\u8F6C\u5B50\u5F39\u4EE5\u5339\u914D\u5176\u8F68\u8FF9","Firing arc":"\u5C04\u51FB\u5F27","Multi-Fire bullets will be evenly spaced inside the firing arc":"\u591A\u91CD\u5C04\u51FB\u7684\u5B50\u5F39\u5C06\u5747\u5300\u5206\u5E03\u5728\u5C04\u51FB\u5F27\u5185","Multi-Fire":"\u591A\u91CD\u5C04\u51FB","Number of bullets created at once":"\u4E00\u6B21\u521B\u5EFA\u7684\u5B50\u5F39\u6570\u91CF","Angle variance":"\u89D2\u5EA6\u5DEE\u5F02","Make imperfect aim (between 0 and 180 degrees).":"\u4EA7\u751F\u4E0D\u5B8C\u7F8E\u7784\u51C6\uFF08\u57280\u5230180\u5EA6\u4E4B\u95F4\uFF09\u3002","Firing variance":"\u5C04\u51FB\u53D8\u5F02","Bullet speed variance":"\u5B50\u5F39\u901F\u5EA6\u53D8\u5F02","Bullet speed will be adjusted by a random value within this range.":"\u5B50\u5F39\u901F\u5EA6\u5C06\u5728\u6B64\u8303\u56F4\u5185\u88AB\u968F\u673A\u503C\u8C03\u6574\u3002","Ammo quantity (current)":"\u5F53\u524D\u5F39\u836F\u6570\u91CF (current)","Shots per reload":"\u6BCF\u6B21\u88C5\u586B\u7684\u5C04\u51FB\u6570","Use 0 to disable reloading.":"\u4F7F\u7528 0 \u7981\u7528\u91CD\u65B0\u88C5\u586B\u3002","Reload":"\u88C5\u586B","Reloading duration":"\u88C5\u586B\u6301\u7EED\u65F6\u95F4","Objects cannot shoot while reloading is in progress.":"\u5728\u91CD\u65B0\u88C5\u586B\u8FDB\u884C\u4E2D\uFF0C\u5BF9\u8C61\u4E0D\u80FD\u5C04\u51FB\u3002","Max ammo":"\u6700\u5927\u5F39\u836F\u91CF","Ammo":"\u5F39\u836F","Shots before next reload":"\u4E0B\u6B21\u88C5\u586B\u524D\u7684\u5C04\u51FB\u6B21\u6570","Total shots fired":"\u603B\u5C04\u51FB\u6B21\u6570","Regardless of how many bullets are created, only 1 shot will be counted per frame":"\u65E0\u8BBA\u521B\u5EFA\u4E86\u591A\u5C11\u5B50\u5F39\uFF0C\u6BCF\u5E27\u53EA\u8BA1\u65701\u6B21\u5C04\u51FB\u3002","Total bullets created":"\u603B\u5171\u521B\u5EFA\u7684\u5B50\u5F39\u6570\u91CF","Starting ammo":"\u521D\u59CB\u5F39\u836F","Total reloads completed":"\u5B8C\u6210\u7684\u603B\u88C5\u586B\u6B21\u6570","Unlimited ammo":"\u65E0\u9650\u5F39\u836F","Heat increase per shot (between 0 and 1)":"\u6BCF\u53D1\u5B50\u5F39\u7684\u70ED\u91CF\u589E\u52A0\uFF08\u57280\u548C1\u4E4B\u95F4\uFF09","Object is overheated when Heat reaches 1.":"\u5F53\u70ED\u91CF\u8FBE\u52301\u65F6\uFF0C\u5BF9\u8C61\u8FC7\u70ED\u3002","Overheat":"\u8FC7\u70ED","Heat level (Range: 0 to 1)":"\u70ED\u91CF\u6C34\u5E73\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09","Reload automatically":"\u81EA\u52A8\u88C5\u586B","Overheat duration":"\u8FC7\u70ED\u6301\u7EED\u65F6\u95F4","Object cannot shoot while overheat duration is active.":"\u5BF9\u8C61\u5728\u8FC7\u70ED\u6301\u7EED\u65F6\u95F4\u6D3B\u8DC3\u671F\u95F4\u4E0D\u80FD\u5C04\u51FB\u3002","Linear cooling rate (per second)":"\u7EBF\u6027\u51B7\u5374\u901F\u7387\uFF08\u6BCF\u79D2\uFF09","Exponential cooling rate (per second)":"\u6307\u6570\u51B7\u5374\u901F\u7387\uFF08\u6BCF\u79D2\uFF09","Happens faster when heat is high and slower when heat is low.":"\u5F53\u70ED\u91CF\u9AD8\u65F6\u51B7\u5374\u901F\u7387\u66F4\u5FEB\uFF0C\u70ED\u91CF\u4F4E\u65F6\u51B7\u5374\u901F\u7387\u66F4\u6162\u3002","Layer the bullets are created on":"\u521B\u5EFA\u5B50\u5F39\u7684\u5C42","Base layer by default.":"\u9ED8\u8BA4\u7684\u57FA\u7840\u5C42\u3002","Shooting configuration":"\u5C04\u51FB\u914D\u7F6E","Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"\u4EE5\u6307\u5B9A\u7684\u901F\u5EA6\u671D\u5411\u5BF9\u8C61\u53D1\u5C04\u5B50\u5F39\u3002\u6301\u7EED\u8C03\u7528\u6B64\u64CD\u4F5C\uFF0C\u8BE5\u52A8\u4F5C\u5728\u5185\u90E8\u68C0\u67E5\u51C6\u5907\u72B6\u6001\u2014\u2014\u65E0\u9700\u989D\u5916\u7684\u5B9A\u65F6\u5668\u6216\u68C0\u67E5\u3002","Fire bullets toward an object":"\u671D\u5411\u7269\u4F53\u53D1\u5C04\u5B50\u5F39","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s":"\u4ECE_PARAM0_\u53D1\u5C04_PARAM4_\uFF08\u5982\u679C\u51C6\u5907\u597D\uFF09\uFF0C\u5728\u4F4D\u7F6E_PARAM2_\uFF1B_PARAM3_\uFF0C\u671D\u5411_PARAM5_\u4EE5\u901F\u5EA6_PARAM6_ px/s","X position, where to create the bullet":"\u521B\u5EFA\u5B50\u5F39\u7684X\u4F4D\u7F6E","Y position, where to create the bullet":"\u521B\u5EFA\u5B50\u5F39\u7684Y\u4F4D\u7F6E","The bullet object":"\u5B50\u5F39\u5BF9\u8C61","Target object":"\u76EE\u6807\u5BF9\u8C61","Speed of the bullet, in pixels per second":"\u5B50\u5F39\u901F\u5EA6\uFF0C\u6BCF\u79D2\u50CF\u7D20\u6570","Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"\u4EE5\u6307\u5B9A\u7684\u901F\u5EA6\u671D\u7740\u4E00\u4E2A\u4F4D\u7F6E\u53D1\u5C04\u5B50\u5F39\u3002\u6301\u7EED\u8C03\u7528\u6B64\u64CD\u4F5C\uFF0C\u8BE5\u52A8\u4F5C\u5728\u5185\u90E8\u68C0\u67E5\u51C6\u5907\u72B6\u6001\u2014\u2014\u65E0\u9700\u989D\u5916\u7684\u5B9A\u65F6\u5668\u6216\u68C0\u67E5\u3002","Fire bullets toward a position":"\u671D\u5411\u4F4D\u7F6E\u53D1\u5C04\u5B50\u5F39","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s":"\u4ECE_PARAM0_\u53D1\u5C04_PARAM4_\uFF08\u5982\u679C\u51C6\u5907\u597D\uFF09\uFF0C\u5728\u4F4D\u7F6E_PARAM2_\uFF1B_PARAM3_\uFF0C\u671D\u5411\u4F4D\u7F6E_PARAM5_\uFF1B_PARAM6_\u4EE5\u901F\u5EA6_PARAM7_ px/s","Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"\u4EE5\u7ED9\u5B9A\u89D2\u5EA6\u548C\u6307\u5B9A\u901F\u5EA6\u53D1\u5C04\u5B50\u5F39\u3002\u6301\u7EED\u8C03\u7528\u6B64\u64CD\u4F5C\uFF0C\u52A8\u4F5C\u4F1A\u5728\u5185\u90E8\u68C0\u67E5\u51C6\u5907\u60C5\u51B5\u2014\u2014\u65E0\u9700\u989D\u5916\u7684\u8BA1\u65F6\u5668\u6216\u68C0\u67E5\u3002","Fire bullets toward an angle":"\u671D\u7279\u5B9A\u89D2\u5EA6\u53D1\u5C04\u5B50\u5F39","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s":"\u4ECE_PARAM0_\u53D1\u5C04_PARAM4_\uFF08\u5982\u679C\u51C6\u5907\u5C31\u7EEA\uFF09\uFF0C\u4F4D\u4E8E\u4F4D\u7F6E_PARAM2_\uFF1B_PARAM3_\uFF0C\u671D\u7740\u89D2\u5EA6_PARAM5_\u548C\u901F\u5EA6_PARAM6_ px/s","Angle of the bullet, in degrees":"\u5B50\u5F39\u7684\u89D2\u5EA6\uFF0C\u4EE5\u5EA6\u4E3A\u5355\u4F4D","Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.":"\u53D1\u5C04\u5355\u9897\u5B50\u5F39\u3002\u6B64\u52A8\u4F5C\u4EC5\u53EF\u5728\u201C\u53D1\u5C04\u5B50\u5F39\u201D\u52A8\u4F5C\u5185\u4F7F\u7528\u3002","Fire a single bullet":"\u53D1\u5C04\u5355\u9897\u5B50\u5F39","Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s":"\u4ECE\u4F4D\u7F6E_PARAM0_\u53D1\u5C04\u5355\u9897_PARAM4_\uFF0C\u5728\u4F4D\u7F6E_PARAM2_; _PARAM3_\uFF0C\u4EE5\u89D2\u5EA6_PARAM5_\u548C\u901F\u5EA6_PARAM6_ px/s\u53D1\u5C04\u5B50\u5F39","Reload ammo.":"\u88C5\u8F7D\u5F39\u836F\u3002","Reload ammo":"\u88C5\u8F7D\u5F39\u836F","Reload ammo on _PARAM0_":"\u91CD\u65B0\u88C5\u586B_PARAM0_\u4E0A\u7684\u5F39\u836F","Check if the object has just fired something.":"\u68C0\u67E5\u7269\u4F53\u662F\u5426\u521A\u521A\u53D1\u5C04\u4E86\u4EC0\u4E48\u3002","Has just fired":"\u521A\u521A\u53D1\u5C04","_PARAM0_ has just fired":"_PARAM0_\u521A\u521A\u53D1\u5C04","Check if bullet rotates to match trajectory.":"\u68C0\u67E5\u5B50\u5F39\u662F\u5426\u65CB\u8F6C\u4EE5\u5339\u914D\u5F39\u9053\u3002","Is bullet rotation enabled":"\u5B50\u5F39\u662F\u5426\u542F\u7528\u65CB\u8F6C","Bullet rotation enabled on _PARAM0_":"\u542F\u7528 _PARAM0_ \u7684\u5B50\u5F39\u65CB\u8F6C","the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.":"\u5B50\u5F39\u53D1\u5C04\u8303\u56F4\uFF08\u5EA6\u6570\uFF09\uFF0C\u5B50\u5F39\u5728\u53D1\u5C04\u8303\u56F4\u5185\u5747\u5300\u5206\u5E03\u3002","the firing arc":"\u53D1\u5C04\u8303\u56F4","Firing arc (degrees) Range: 0 to 360":"\u53D1\u5C04\u8303\u56F4\uFF08\u5EA6\u6570\uFF09 \u8303\u56F4: 0 \u5230 360","Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.":"\u66F4\u6539\u5B50\u5F39\u53D1\u5C04\u8303\u56F4\uFF08\u5EA6\u6570\uFF09\uFF0C\u5176\u4E2D\u5B50\u5F39\u5C06\u4F1A\u5747\u5300\u5206\u5E03\u4E8E\u53D1\u5C04\u8303\u56F4\u5185\u3002","Set firing arc (deprecated)":"\u8BBE\u7F6E\u53D1\u5C04\u8303\u56F4\uFF08\u5DF2\u5F03\u7528\uFF09","Set firing arc of _PARAM0_ to _PARAM2_ degrees":"\u5C06 _PARAM0_ \u7684\u53D1\u5C04\u8303\u56F4\u8BBE\u7F6E\u4E3A _PARAM2_ \u5EA6","the angle variance (in degrees) applied to each bullet.":"\u5E94\u7528\u4E8E\u6BCF\u9897\u5B50\u5F39\u7684\u89D2\u5EA6\u5DEE\u5F02\uFF08\u5EA6\u6570\uFF09\u3002","the angle variance":"\u89D2\u5EA6\u5DEE\u5F02","Angle variance (degrees) Range: 0 to 180":"\u89D2\u5EA6\u5DEE\u5F02\uFF08\u5EA6\u6570\uFF09 \u8303\u56F4: 0 \u5230 180","Change the angle variance (in degrees) applied to each bullet.":"\u66F4\u6539\u6BCF\u9897\u5B50\u5F39\u7684\u89D2\u5EA6\u5DEE\u5F02\uFF08\u5EA6\u6570\uFF09\u3002","Set angle variance (deprecated)":"\u8BBE\u7F6E\u89D2\u5EA6\u5DEE\u5F02\uFF08\u5DF2\u5F03\u7528\uFF09","Set angle variance of _PARAM0_ to _PARAM2_ degrees":"\u5C06 _PARAM0_ \u7684\u89D2\u5EA6\u5DEE\u5F02\u8BBE\u7F6E\u4E3A _PARAM2_ \u5EA6","the bullet speed variance (pixels per second) applied to each bullet.":"\u5E94\u7528\u4E8E\u6BCF\u9897\u5B50\u5F39\u7684\u901F\u5EA6\u5DEE\u5F02\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09\u3002","the bullet speed variance":"\u901F\u5EA6\u5DEE\u5F02","Change the speed variance (pixels per second) applied to each bullet.":"\u66F4\u6539\u5E94\u7528\u4E8E\u6BCF\u9897\u5B50\u5F39\u7684\u901F\u5EA6\u5DEE\u5F02\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09\u3002","Set bullet speed variance (deprecated)":"\u8BBE\u7F6E\u5B50\u5F39\u901F\u5EA6\u5DEE\u5F02\uFF08\u5DF2\u5F03\u7528\uFF09","Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second":"\u5C06 _PARAM0_ \u7684\u5B50\u5F39\u901F\u5EA6\u5DEE\u5F02\u8BBE\u7F6E\u4E3A _PARAM2_ \u6BCF\u79D2\u50CF\u7D20","the number of bullets shot every time the \"fire bullet\" action is used.":"\u6BCF\u6B21\u4F7F\u7528\u201C\u53D1\u5C04\u5B50\u5F39\u201D\u52A8\u4F5C\u5C04\u51FA\u7684\u5B50\u5F39\u6570\u91CF\u3002","Bullets per shot":"\u6BCF\u53D1\u5C04\u7684\u5B50\u5F39\u6570","the number of bullets per shot":"\u6BCF\u6B21\u53D1\u5C04\u7684\u5B50\u5F39\u6570\u91CF","Bullets":"\u5B50\u5F39","Change the number of bullets shot every time the \"fire bullet\" action is used.":"\u66F4\u6539\u6BCF\u6B21\u4F7F\u7528\u201C\u53D1\u5C04\u5B50\u5F39\u201D\u52A8\u4F5C\u5C04\u51FA\u7684\u5B50\u5F39\u6570\u91CF\u3002","Set number of bullets per shot (deprecated)":"\u8BBE\u7F6E\u6BCF\u6B21\u53D1\u5C04\u7684\u5B50\u5F39\u6570\u91CF\uFF08\u5DF2\u5F03\u7528\uFF09","Set number of bullets per shot of _PARAM0_ to _PARAM2_":"\u5C06 _PARAM0_ \u6BCF\u6B21\u53D1\u5C04\u7684\u5B50\u5F39\u6570\u91CF\u8BBE\u7F6E\u4E3A _PARAM2_","Change the layer that bullets are created on.":"\u521B\u5EFA\u5B50\u5F39\u7684\u56FE\u5C42\u3002","Set bullet layer":"\u8BBE\u7F6E\u5B50\u5F39\u56FE\u5C42","Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_":"\u5C06\u7528\u4E8E\u53D1\u5C04\u7531 _PARAM0_ \u5C04\u51FA\u7684\u5B50\u5F39\u7684\u56FE\u5C42\u8BBE\u7F6E\u4E3A _PARAM2_","Enable bullet rotation.":"\u542F\u7528\u5B50\u5F39\u65CB\u8F6C\u3002","Enable (or disable) bullet rotation":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u5B50\u5F39\u65CB\u8F6C","Enable bullet rotation on _PARAM0_: _PARAM2_":"\u5728 _PARAM0_ \u4E0A\u542F\u7528\u5B50\u5F39\u65CB\u8F6C\uFF1A_PARAM2_","Rotate bullet to match trajetory":"\u4F7F\u5B50\u5F39\u65CB\u8F6C\u5339\u914D\u8F68\u8FF9","Enable unlimited ammo.":"\u542F\u7528\u65E0\u9650\u5B50\u5F39\u3002","Enable (or disable) unlimited ammo":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u65E0\u9650\u5F39\u836F","Enable unlimited ammo on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u4E0A\u542F\u7528\u65E0\u9650\u5F39\u836F\uFF1A_PARAM2_","the firing cooldown (in seconds) also known as rate of fire.":"\u5C04\u51FB\u51B7\u5374\u65F6\u95F4\uFF08\u79D2\uFF09\uFF0C\u4E5F\u79F0\u4E3A\u5C04\u901F\u3002","the firing cooldown":"\u5C04\u51FB\u51B7\u5374\u65F6\u95F4","Cooldown in seconds":"\u51B7\u5374\u65F6\u95F4\uFF08\u79D2\uFF09","Change the firing cooldown, which changes the rate of fire.":"\u66F4\u6539\u5C04\u51FB\u51B7\u5374\u65F6\u95F4\uFF0C\u8FD9\u5C06\u6539\u53D8\u5C04\u901F\u3002","Set firing cooldown (deprecated)":"\u8BBE\u7F6E\u5C04\u51FB\u51B7\u5374\u65F6\u95F4\uFF08\u5DF2\u5F03\u7528\uFF09","Set the fire rate of _PARAM0_ to _PARAM2_ seconds":"\u5C06_PARAM0_\u7684\u5F00\u706B\u901F\u7387\u8BBE\u7F6E\u4E3A_PARAM2_\u79D2","the reload duration (in seconds).":"\u91CD\u88C5\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","Reload duration":"\u91CD\u88C5\u65F6\u95F4","the reload duration":"\u91CD\u88C5\u65F6\u95F4","Reload duration (seconds)":"\u91CD\u88C5\u65F6\u95F4\uFF08\u79D2\uFF09","Change the duration to reload ammo.":"\u66F4\u6539\u91CD\u65B0\u88C5\u586B\u5F39\u836F\u7684\u65F6\u95F4\u3002","Set reload duration (deprecated)":"\u8BBE\u7F6E\u91CD\u65B0\u88C5\u586B\u65F6\u95F4\uFF08\u5DF2\u5F03\u7528\uFF09","Set the reload duration of _PARAM0_ to _PARAM2_ seconds":"\u5C06_PARAM0_\u7684\u91CD\u65B0\u88C5\u586B\u65F6\u95F4\u8BBE\u7F6E\u4E3A_PARAM2_\u79D2","the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.":"\u8FC7\u70ED\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\u3002\u5F53\u7269\u4F53\u8FC7\u70ED\u65F6\uFF0C\u65E0\u6CD5\u5728\u6B64\u6301\u7EED\u65F6\u95F4\u5185\u53D1\u5C04\u3002","the overheat duration":"\u8FC7\u70ED\u6301\u7EED\u65F6\u95F4","Overheat duration (seconds)":"\u8FC7\u70ED\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","Change the duration after becoming overheated.":"\u66F4\u6539\u7269\u4F53\u8FC7\u70ED\u540E\u7684\u6301\u7EED\u65F6\u95F4\u3002","Set overheat duration (deprecated)":"\u8BBE\u7F6E\u8FC7\u70ED\u6301\u7EED\u65F6\u95F4\uFF08\u5DF2\u5F03\u7528\uFF09","Set the overheat duration of _PARAM0_ to _PARAM2_ seconds":"\u5C06_PARAM0_\u7684\u8FC7\u70ED\u6301\u7EED\u65F6\u95F4\u8BBE\u7F6E\u4E3A_PARAM2_\u79D2","the ammo quantity.":"\u5F39\u836F\u6570\u91CF\u3002","Ammo quantity":"\u5F39\u836F\u6570\u91CF","the ammo quantity":"\u5F39\u836F\u6570\u91CF","Change the quantity of ammo.":"\u66F4\u6539\u5F39\u836F\u7684\u6570\u91CF\u3002","Set ammo quantity (deprecated)":"\u8BBE\u7F6E\u5F39\u836F\u6570\u91CF\uFF08\u5DF2\u5F03\u7528\uFF09","Set the ammo quantity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5F39\u836F\u6570\u91CF\u8BBE\u7F6E\u4E3A_PARAM2_","the heat increase per shot.":"\u6BCF\u53D1\u5C04\u589E\u52A0\u7684\u70ED\u91CF\u3002","Heat increase per shot":"\u6BCF\u53D1\u5C04\u589E\u52A0\u7684\u70ED\u91CF","the heat increase per shot":"\u6BCF\u53D1\u5C04\u589E\u52A0\u7684\u70ED\u91CF","Heat increase per shot (Range: 0 to 1)":"\u6BCF\u53D1\u5C04\u589E\u52A0\u7684\u70ED\u91CF\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09","Change the heat increase per shot.":"\u66F4\u6539\u6BCF\u53D1\u5C04\u589E\u52A0\u7684\u70ED\u91CF\u3002","Set heat increase per shot (deprecated)":"\u8BBE\u7F6E\u6BCF\u53D1\u5C04\u589E\u52A0\u70ED\u91CF\uFF08\u5DF2\u5F03\u7528\uFF09","Set the heat increase of _PARAM0_ to _PARAM2_ per shot":"\u5C06_PARAM0_\u7684\u6BCF\u53D1\u5C04\u589E\u52A0\u7684\u70ED\u91CF\u8BBE\u7F6E\u4E3A_PARAM2_","the max ammo.":"\u6700\u5927\u5F39\u836F\u3002","the max ammo":"\u6700\u5927\u5F39\u836F","Change the max ammo.":"\u66F4\u6539\u6700\u5927\u5F39\u836F\u91CF\u3002","Set max ammo (deprecated)":"\u8BBE\u7F6E\u6700\u5927\u5F39\u836F\uFF08\u5DF2\u5F03\u7528\uFF09","Set the max ammo of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6700\u5927\u5F39\u836F\u8BBE\u7F6E\u4E3A_PARAM2_","Reset total shots fired.":"\u91CD\u7F6E\u5DF2\u53D1\u5C04\u7684\u603B\u5B50\u5F39\u6570\u3002","Reset total shots fired":"\u91CD\u7F6E\u5DF2\u53D1\u5C04\u7684\u603B\u5B50\u5F39\u6570","Reset total shots fired by _PARAM0_":"\u91CD\u7F6E_PARAM0_\u53D1\u5C04\u7684\u603B\u5B50\u5F39\u6570","Reset total bullets created.":"\u91CD\u7F6E\u5DF2\u521B\u5EFA\u7684\u603B\u5B50\u5F39\u6570\u3002","Reset total bullets created":"\u91CD\u7F6E\u5DF2\u521B\u5EFA\u7684\u603B\u5B50\u5F39\u6570","Reset total bullets created by _PARAM0_":"\u91CD\u7F6E_PARAM0_\u521B\u5EFA\u7684\u603B\u5B50\u5F39\u6570","Reset total reloads completed.":"\u91CD\u7F6E\u5DF2\u5B8C\u6210\u7684\u603B\u88C5\u5F39\u6B21\u6570\u3002","Reset total reloads completed":"\u91CD\u7F6E\u5DF2\u5B8C\u6210\u7684\u603B\u88C5\u5F39\u6B21\u6570","Reset total reloads completed by _PARAM0_":"\u91CD\u7F6E_PARAM0_\u5B8C\u6210\u7684\u603B\u88C5\u5F39\u6B21\u6570","the number of shots per reload.":"\u6BCF\u6B21\u88C5\u5F39\u7684\u5C04\u51FB\u6B21\u6570\u3002","the shots per reload":"\u6BCF\u6B21\u88C5\u5F39\u7684\u5C04\u51FB\u6B21\u6570","Change the number of shots per reload.":"\u66F4\u6539\u6BCF\u6B21\u88C5\u5F39\u7684\u5C04\u51FB\u6B21\u6570\u3002","Set shots per reload (deprecated)":"\u8BBE\u7F6E\u5C04\u51FB\u6B21\u6570\uFF08\u5DF2\u5F03\u7528\uFF09","Set the shots per reload of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6BCF\u6B21\u88C5\u5F39\u7684\u5C04\u51FB\u6B21\u6570\u8BBE\u7F6E\u4E3A_PARAM2_","Enable (or disable) automatic reloading.":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52A8\u88C5\u5F39\u3002","Enable (or disable) automatic reloading":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52A8\u88C5\u5F39","Enable automatic reloading on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u4E0A\u542F\u7528\u81EA\u52A8\u88C5\u5F39\uFF1A_PARAM2_","Enable automatic reloading":"\u542F\u7528\u81EA\u52A8\u88C5\u5F39","the linear cooling rate (per second).":"\u7EBF\u6027\u51B7\u5374\u901F\u7387\uFF08\u6BCF\u79D2\uFF09\u3002","Linear cooling rate":"\u7EBF\u6027\u51B7\u5374\u901F\u7387","the linear cooling rate":"\u7EBF\u6027\u51B7\u5374\u901F\u7387","Heat cooling rate (per second)":"\u70ED\u51B7\u5374\u901F\u7387\uFF08\u6BCF\u79D2\uFF09","Change the linear rate of cooling.":"\u66F4\u6539\u7EBF\u6027\u51B7\u5374\u901F\u7387\u3002","Set linear cooling rate (deprecated)":"\u8BBE\u7F6E\u7EBF\u6027\u51B7\u5374\u901F\u7387\uFF08\u5DF2\u5F03\u7528\uFF09","Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second":"\u5C06_PARAM0_\u7684\u7EBF\u6027\u51B7\u5374\u901F\u7387\u8BBE\u7F6E\u4E3A\u6BCF\u79D2_PARAM2_","the exponential cooling rate, per second.":"\u6307\u6570\u51B7\u5374\u901F\u7387\uFF0C\u6BCF\u79D2\u3002","Exponential cooling rate":"\u6307\u6570\u51B7\u5374\u901F\u7387","the exponential cooling rate":"\u6307\u6570\u51B7\u5374\u901F\u7387","Change the exponential rate of cooling.":"\u66F4\u6539\u6307\u6570\u51B7\u5374\u901F\u7387\u3002","Set exponential cooling rate (deprecated)":"\u8BBE\u7F6E\u6307\u6570\u51B7\u5374\u901F\u7387\uFF08\u5DF2\u5F03\u7528\uFF09","Set the exponential cooling rate of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6307\u6570\u51B7\u5374\u901F\u7387\u8BBE\u7F6E\u4E3A\u6BCF\u79D2_PARAM2_","Increase ammo quantity.":"\u589E\u52A0\u5F39\u836F\u6570\u91CF\u3002","Increase ammo":"\u589E\u52A0\u5F39\u836F","Increase ammo of _PARAM0_ by _PARAM2_ shots":"\u589E\u52A0 _PARAM0_ \u7684\u5F39\u836F _PARAM2_ \u53D1","Ammo gained":"\u83B7\u5F97\u5F39\u836F","Layer that bullets are created on.":"\u5B50\u5F39\u521B\u5EFA\u7684\u5C42\u3002","Bullet layer":"\u5B50\u5F39\u5C42","the heat level (range: 0 to 1).":"\u70ED\u91CF\u6C34\u5E73\uFF08\u8303\u56F4\uFF1A0 \u5230 1\uFF09\u3002","Heat level":"\u70ED\u91CF\u6C34\u5E73","the heat level":"\u70ED\u91CF\u6C34\u5E73","Total shots fired (multi-bullet shots are considered one shot).":"\u603B\u5171\u5C04\u51FB\u6B21\u6570\uFF08\u591A\u5F39\u5C04\u88AB\u89C6\u4E3A\u4E00\u6B21\u5C04\u51FB\uFF09\u3002","Shots fired":"\u5C04\u51FB\u6B21\u6570","Total bullets created.":"\u603B\u5171\u521B\u5EFA\u7684\u5B50\u5F39\u3002","Bullets created":"\u5DF2\u521B\u5EFA\u5B50\u5F39","Reloads completed.":"\u88C5\u586B\u5B8C\u6210\u3002","Reloads completed":"\u88C5\u586B\u5B8C\u6210","the remaining shots before the next reload is required.":"\u5728\u9700\u8981\u4E0B\u4E00\u6B21\u88C5\u586B\u4E4B\u524D\u5269\u4F59\u7684\u5B50\u5F39\u6570\u3002","the remaining shots (before the next reload)":"\u5269\u4F59\u7684\u5B50\u5F39\u6570\uFF08\u5728\u4E0B\u6B21\u88C5\u586B\u4E4B\u524D\uFF09","the remaining duration before the cooldown will permit a bullet to be fired, in seconds.":"\u5728\u51B7\u5374\u7ED3\u675F\u524D\u5269\u4F59\u7684\u6301\u7EED\u65F6\u95F4\uFF0C\u4EE5\u79D2\u8BA1\u3002","Duration before cooldown end":"\u51B7\u5374\u7ED3\u675F\u524D\u7684\u6301\u7EED\u65F6\u95F4","the remaining duration before the cooldown end":"\u51B7\u5374\u7ED3\u675F\u524D\u7684\u5269\u4F59\u6301\u7EED\u65F6\u95F4","the remaining duration before the overheat penalty ends, in seconds.":"\u5728\u8FC7\u70ED\u60E9\u7F5A\u7ED3\u675F\u524D\u5269\u4F59\u7684\u6301\u7EED\u65F6\u95F4\uFF0C\u4EE5\u79D2\u8BA1\u3002","Duration before overheat end":"\u8FC7\u70ED\u7ED3\u675F\u524D\u7684\u6301\u7EED\u65F6\u95F4","the remaining duration before the overheat end":"\u8FC7\u70ED\u7ED3\u675F\u524D\u7684\u5269\u4F59\u6301\u7EED\u65F6\u95F4","the remaining duration before the reload finishes, in seconds.":"\u5728\u88C5\u586B\u5B8C\u6210\u524D\u5269\u4F59\u7684\u6301\u7EED\u65F6\u95F4\uFF0C\u4EE5\u79D2\u8BA1\u3002","Duration before the reload finishes":"\u88C5\u586B\u7ED3\u675F\u524D\u7684\u6301\u7EED\u65F6\u95F4","the remaining duration before the reload finishes":"\u88C5\u586B\u7ED3\u675F\u524D\u7684\u5269\u4F59\u6301\u7EED\u65F6\u95F4","Check if object is currently performing an ammo reload.":"\u68C0\u67E5\u5BF9\u8C61\u5F53\u524D\u662F\u5426\u6B63\u5728\u8FDB\u884C\u5F39\u836F\u88C5\u586B\u3002","Is ammo reloading in progress":"\u5F39\u836F\u662F\u5426\u6B63\u5728\u8FDB\u884C\u88C5\u586B","_PARAM0_ is reloading ammo":"_PARAM0_\u6B63\u5728\u91CD\u65B0\u52A0\u8F7D\u5F39\u836F","Check if object is ready to shoot.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u51C6\u5907\u5C04\u51FB\u3002","Is ready to shoot":"\u53EF\u4EE5\u8FDB\u884C\u5C04\u51FB","_PARAM0_ is ready to shoot":"_PARAM0_\u5DF2\u51C6\u5907\u597D\u5C04\u51FB","Check if automatic reloading is enabled.":"\u68C0\u67E5\u81EA\u52A8\u88C5\u586B\u662F\u5426\u5DF2\u542F\u7528\u3002","Is automatic reloading enabled":"\u81EA\u52A8\u88C5\u586B\u662F\u5426\u5DF2\u542F\u7528","Automatic reloading is enabled on_PARAM0_":"\u81EA\u52A8\u91CD\u65B0\u88C5\u586B\u5DF2\u542F\u7528_PARAM0_\u4E0A","Check if ammo is unlimited.":"\u68C0\u67E5\u5F39\u836F\u662F\u5426\u65E0\u9650\u5236\u3002","Is ammo unlimited":"\u5F39\u836F\u662F\u5426\u65E0\u9650\u5236","_PARAM0_ has unlimited ammo":"_PARAM0_\u5177\u6709\u65E0\u9650\u5F39\u836F","Check if object has no ammo available.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u6CA1\u6709\u53EF\u7528\u7684\u5F39\u836F\u3002","Is out of ammo":"\u5F39\u836F\u5DF2\u7528\u5C3D","_PARAM0_ is out of ammo":"_PARAM0_\u5DF2\u7528\u5C3D\u5F39\u836F","Check if object needs to reload ammo.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u9700\u8981\u88C5\u586B\u5F39\u836F\u3002","Is a reload needed":"\u9700\u8981\u8FDB\u884C\u88C5\u586B","_PARAM0_ needs to reload ammo":"_PARAM0_\u9700\u8981\u91CD\u65B0\u88C5\u586B\u5F39\u836F","Check if object is overheated.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u8FC7\u70ED\u3002","Is overheated":"\u5DF2\u8FC7\u70ED","_PARAM0_ is overheated":"_PARAM0_\u5DF2\u8FC7\u70ED","Check if firing cooldown is active.":"\u68C0\u67E5\u5C04\u51FB\u51B7\u5374\u662F\u5426\u6FC0\u6D3B\u3002","Is firing cooldown active":"\u5C04\u51FB\u51B7\u5374\u662F\u5426\u6FC0\u6D3B","Firing cooldown is active on _PARAM0_":"\u89E6\u53D1\u51B7\u5374\u65F6\u95F4\u5DF2\u5728_PARAM0_\u4E0A\u6FC0\u6D3B","First person 3D camera":"\u7B2C\u4E00\u4EBA\u79F0 3D \u6444\u50CF\u5934","Move the camera to look though objects eyes.":"\u5C06\u6444\u50CF\u5934\u79FB\u52A8\u4EE5\u901A\u8FC7\u5BF9\u8C61\u7684\u89C6\u89D2\u67E5\u770B\u3002","Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","Look through object eyes":"\u4ECE\u5BF9\u8C61\u7684\u89C6\u89D2\u89C2\u770B","Move the camera of _PARAM2_ to look though _PARAM1_ eyes":"\u4F7F_PARAM2_\u7684\u76F8\u673A\u4ECE_PARAM1_\u7684\u89C6\u89D2\u770B","Move the camera of _PARAM3_ to look though _PARAM1_ eyes":"Move the camera of _PARAM3_ to look though _PARAM1_ eyes","3D Object":"3D Object","Flash object":"\u95EA\u5149\u5BF9\u8C61","Make an object flash visibility (blink), color tint, object effect, or opacity (fade).":"\u4F7F\u5BF9\u8C61\u95EA\u70C1\u53EF\u89C1\u6027\uFF08\u95EA\u70C1\uFF09\u3001\u989C\u8272\u7740\u8272\u3001\u5BF9\u8C61\u6548\u679C\u6216\u4E0D\u900F\u660E\u5EA6\uFF08\u6DE1\u5316\uFF09\u3002","Color tint applied to an object.":"\u5E94\u7528\u4E8E\u5BF9\u8C61\u7684\u989C\u8272\u8272\u8C03\u3002","Color tint applied to an object":"\u5E94\u7528\u4E8E\u5BF9\u8C61\u7684\u989C\u8272\u8272\u8C03","Color tint applied to _PARAM1_":"\u5E94\u7528\u4E8E _PARAM1_ \u7684\u989C\u8272\u8272\u8C03","Check if a color tint is applied to an object.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5E94\u7528\u989C\u8272\u8272\u8C03\u3002","Is a color tint applied to an object":"\u5BF9\u8C61\u5E94\u7528\u989C\u8272\u8272\u8C03\u5417","_PARAM1_ is color tinted":"_PARAM1_\u662F\u6709\u8272\u8C03\u7684","Toggle color tint between the starting tint and a given value.":"\u5728\u8D77\u59CB\u8272\u8C03\u548C\u7ED9\u5B9A\u503C\u4E4B\u95F4\u5207\u6362\u989C\u8272\u8C03\u3002","Toggle a color tint":"\u5207\u6362\u989C\u8272\u8C03","Toggle color tint _PARAM2_ on _PARAM1_":"\u5728_PARAM1_\u4E0A\u5207\u6362_PARAM2_\u7684\u989C\u8272\u8C03","Color tint":"\u989C\u8272\u8C03","Toggle object visibility.":"\u5207\u6362\u5BF9\u8C61\u53EF\u89C1\u6027\u3002","Toggle object visibility":"\u5207\u6362\u5BF9\u8C61\u53EF\u89C1\u6027","Toggle visibility of _PARAM1_":"\u5207\u6362_PARAM1_\u7684\u53EF\u89C1\u6027","Make the object flash (blink) for a period of time so it alternates between visible and invisible.":"\u4F7F\u5BF9\u8C61\u5728\u4E00\u6BB5\u65F6\u95F4\u5185\u95EA\u70C1\uFF0C\u4EA4\u66FF\u53EF\u89C1\u548C\u4E0D\u53EF\u89C1\u3002","Flash visibility (blink)":"\u95EA\u70C1\u53EF\u89C1\u6027","Half period":"\u534A\u4E2A\u5468\u671F","Time that the object is invisible":"\u5BF9\u8C61\u4E0D\u53EF\u89C1\u7684\u65F6\u95F4","Flash duration":"\u95EA\u70C1\u6301\u7EED\u65F6\u95F4","Use \"0\" to keep flashing until stopped":"\u4F7F\u7528\"0\"\u4EE5\u4F7F\u5176\u6301\u7EED\u95EA\u70C1\u76F4\u5230\u505C\u6B62","Make an object flash (blink) visibility for a period of time.":"\u4F7F\u4E00\u4E2A\u5BF9\u8C61\u5728\u4E00\u6BB5\u65F6\u95F4\u5185\u95EA\u70C1\u53EF\u89C1","Make _PARAM0_ flash (blink) for _PARAM2_ seconds":"\u4F7F_PARAM0_\u5728_PARAM2_\u79D2\u5185\u95EA\u70C1","Duration of the flashing, in seconds":"\u95EA\u70C1\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","Use \"0\" to keep flashing until stopped.":"\u4F7F\u7528\u201C0\u201D\u4FDD\u6301\u95EA\u70C1\u76F4\u5230\u505C\u6B62","Check if an object is flashing visibility.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u6B63\u5728\u95EA\u70C1\u53EF\u89C1","Is object flashing visibility":"\u5BF9\u8C61\u662F\u5426\u6B63\u5728\u95EA\u70C1\u53EF\u89C1","_PARAM0_ is flashing":"_PARAM0_\u6B63\u5728\u95EA\u70C1","Stop flashing visibility (blink) of an object.":"\u505C\u6B62\u5BF9\u8C61\u95EA\u70C1\u53EF\u89C1","Stop flashing visibility (blink)":"\u505C\u6B62\u95EA\u70C1\u53EF\u89C1","Stop flashing visibility of _PARAM0_":"\u505C\u6B62\u95EA\u70C1_PARAM0_\u7684\u53EF\u89C1\u6027","the half period of the object (time the object is invisible).":"\u5BF9\u8C61\u7684\u534A\u5468\u671F\uFF08\u5BF9\u8C61\u4E0D\u53EF\u89C1\u7684\u65F6\u95F4\uFF09","the half period (time the object is invisible)":"\u534A\u5468\u671F\uFF08\u5BF9\u8C61\u4E0D\u53EF\u89C1\u7684\u65F6\u95F4\uFF09","Make an object flash a color tint for a period of time.":"\u4F7F\u5BF9\u8C61\u5728\u4E00\u6BB5\u65F6\u95F4\u5185\u95EA\u70C1\u6709\u8272\u8C03","Flash color tint":"\u95EA\u70C1\u6709\u8272\u8C03","Time between flashes":"\u95EA\u70C1\u4E4B\u95F4\u7684\u65F6\u95F4","Tint color":"\u7740\u8272","Flash a color tint":"\u95EA\u70C1\u989C\u8272\u8272\u8C03","Make _PARAM0_ flash the color tint _PARAM3_ for _PARAM2_ seconds":"\u4F7F_PARAM0_\u5728_PARAM2_\u79D2\u5185\u95EA\u70C1\u989C\u8272\u8272\u8C03_PARAM3_","Check if an object is flashing a color tint.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u6B63\u5728\u95EA\u70C1\u989C\u8272\u8272\u8C03","Is object flashing a color tint":"\u5BF9\u8C61\u662F\u5426\u6B63\u5728\u95EA\u70C1\u989C\u8272\u8272\u8C03","_PARAM0_ is flashing a color tint":"_PARAM0_\u6B63\u5728\u95EA\u70C1\u989C\u8272\u8272\u8C03","Stop flashing a color tint on an object.":"\u505C\u6B62\u5BF9\u8C61\u95EA\u70C1\u989C\u8272\u8272\u8C03","Stop flashing color tint":"\u505C\u6B62\u95EA\u70C1\u989C\u8272\u8272\u8C03","Stop flashing color tint _PARAM0_":"\u505C\u6B62\u95EA\u70C1\u989C\u8272\u8272\u8C03_PARAM0_","the half period (time between flashes) of the object.":"\u5BF9\u8C61\u7684\u534A\u5468\u671F\uFF08\u95EA\u70C1\u95F4\u7684\u65F6\u95F4\uFF09","the half period (time between flashes)":"\u534A\u5468\u671F\uFF08\u95EA\u70C1\u95F4\u7684\u65F6\u95F4\uFF09","Flash opacity smoothly (fade) in a repeating loop.":"\u4EE5\u91CD\u590D\u5FAA\u73AF\u5E73\u6ED1\u5730\u95EA\u70C1\u4E0D\u900F\u660E\u5EA6\u3002","Flash opacity smothly (fade)":"\u5E73\u6ED1\u5730\u95EA\u70C1\u4E0D\u900F\u660E\u5EA6","Opacity capability":"\u4E0D\u900F\u660E\u5EA6\u80FD\u529B","Tween Behavior (required)":"\u63D2\u503C\u884C\u4E3A\uFF08\u5FC5\u9700\uFF09","Target opacity (Range: 0 - 255)":"\u76EE\u6807\u4E0D\u900F\u660E\u5EA6\uFF08\u8303\u56F4\uFF1A0 - 255\uFF09","Opacity will fade between the starting value and a target value":"\u4E0D\u900F\u660E\u5EA6\u5C06\u5728\u8D77\u59CB\u503C\u548C\u76EE\u6807\u503C\u4E4B\u95F4\u6DE1\u51FA","Starting opacity":"\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6","Make an object flash opacity smoothly (fade) in a repeating loop.":"\u4F7F\u4E00\u4E2A\u5BF9\u8C61\u7684\u4E0D\u900F\u660E\u5EA6\u5E73\u7A33\u95EA\u70C1","Flash the opacity (fade)":"\u95EA\u70C1\u4E0D\u900F\u660E\u5EA6\uFF08\u6E10\u53D8\uFF09","Make _PARAM0_ flash opacity smoothly to _PARAM4_ in a loop for _PARAM3_ seconds":"\u4F7F_PARAM0_\u4E0D\u900F\u660E\u5EA6\u5E73\u7A33\u95EA\u70C1\u81F3_PARAM4_\uFF0C\u5FAA\u73AF_PARAM3_\u79D2","Target opacity":"\u76EE\u6807\u4E0D\u900F\u660E\u5EA6","Check if an object is flashing opacity.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u6B63\u5728\u95EA\u70C1\u4E0D\u900F\u660E\u5EA6","Is object flashing opacity":"\u5BF9\u8C61\u662F\u5426\u6B63\u5728\u95EA\u70C1\u4E0D\u900F\u660E\u5EA6","_PARAM0_ is flashing opacity":"_PARAM0_\u6B63\u5728\u95EA\u70C1\u4E0D\u900F\u660E\u5EA6","Stop flashing opacity of an object.":"\u505C\u6B62\u5BF9\u8C61\u7684\u4E0D\u900F\u660E\u5EA6\u95EA\u70C1","Stop flashing opacity":"\u505C\u6B62\u95EA\u70C1\u4E0D\u900F\u660E\u5EA6","Stop flashing opacity of _PARAM0_":"\u505C\u6B62_PARAM0_\u7684\u4E0D\u900F\u660E\u5EA6\u95EA\u70C1","Make the object flash an effect for a period of time.":"\u4F7F\u5BF9\u8C61\u5728\u4E00\u6BB5\u65F6\u95F4\u5185\u95EA\u70C1\u6548\u679C\u3002","Flash effect":"\u95EA\u70C1\u6548\u679C","Name of effect":"\u6548\u679C\u7684\u540D\u79F0","Make an object flash an effect for a period of time.":"\u4F7F\u4E00\u4E2A\u5BF9\u8C61\u5728\u4E00\u6BB5\u65F6\u95F4\u5185\u95EA\u70C1\u6548\u679C","Flash an effect":"\u95EA\u70C1\u4E00\u4E2A\u6548\u679C","Make _PARAM0_ flash the effect _PARAM3_ for _PARAM2_ seconds":"\u4F7F_PARAM0_\u95EA\u70C1\u6548\u679C_PARAM3_\u6301\u7EED_PARAM2_\u79D2","Check if an object is flashing an effect.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u95EA\u70C1\u4E86\u4E00\u4E2A\u6548\u679C\u3002","Is object flashing an effect":"\u5BF9\u8C61\u662F\u5426\u6B63\u5728\u95EA\u70C1\u4E00\u4E2A\u6548\u679C","_PARAM0_ is flashing an effect":"_PARAM0_\u6B63\u5728\u95EA\u70C1\u4E00\u4E2A\u6548\u679C","Stop flashing an effect of an object.":"\u505C\u6B62\u5BF9\u8C61\u7684\u4E00\u4E2A\u6548\u679C\u95EA\u70C1\u3002","Stop flashing an effect":"\u505C\u6B62\u95EA\u70C1\u4E00\u4E2A\u6548\u679C","Stop flashing an effect on _PARAM0_":"\u505C\u6B62_PARAM0_\u7684\u4E00\u4E2A\u6548\u679C\u95EA\u70C1","Toggle an object effect.":"\u5207\u6362\u5BF9\u8C61\u6548\u679C\u3002","Toggle an object effect":"\u5207\u6362\u5BF9\u8C61\u6548\u679C","Toggle effect _PARAM2_ on _PARAM0_":"\u5728_PARAM0_\u4E0A\u5207\u6362\u6548\u679C_PARAM2_","Effect name to toggle":"\u8981\u5207\u6362\u7684\u6548\u679C\u540D\u79F0","Flash layer":"Flash \u56FE\u5C42","Make a layer visible for a specified duration, and then hide the layer.":"\u8BA9\u4E00\u4E2A\u56FE\u5C42\u5728\u6307\u5B9A\u7684\u6301\u7EED\u65F6\u95F4\u5185\u53EF\u89C1\uFF0C\u7136\u540E\u9690\u85CF\u8BE5\u56FE\u5C42\u3002","Make layer _PARAM1_ visible for _PARAM2_ seconds":"\u4F7F\u56FE\u5C42_PARAM1_\u5728_PARAM2_\u79D2\u540E\u53EF\u89C1","Flash and transition painter":"Flash \u548C\u8FC7\u6E21\u7ED8\u56FE\u5DE5\u5177","Paint transition effects with a plain color.":"\u4F7F\u7528\u5355\u8272\u7ED8\u5236\u8FC7\u6E21\u6548\u679C\u3002","Paint all over the screen a color for a period of time.":"\u5728\u4E00\u6BB5\u65F6\u95F4\u5185\u5728\u5C4F\u5E55\u4E0A\u6D82\u62B9\u989C\u8272\u3002","Type of effect":"\u6548\u679C\u7C7B\u578B","Direction of transition":"\u8FC7\u6E21\u65B9\u5411","The maximum of the opacity only for flash":"\u4EC5\u9650\u95EA\u70C1\u7684\u6700\u5927\u4E0D\u900F\u660E\u5EA6","Paint Effect.":"\u7ED8\u5236\u6548\u679C\u3002","Paint Effect":"\u7ED8\u5236\u6548\u679C","Paint effect type _PARAM4_ of _PARAM0_ with direction _PARAM5_ and color _PARAM2_ for _PARAM3_ seconds":"\u7ED8\u5236\u6548\u679C\u7C7B\u578B_PARAM4_\u7684_PARAM0_\u4EE5\u65B9\u5411_PARAM5_\u548C\u989C\u8272_PARAM2_\u6301\u7EED_PARAM3_\u79D2","Direction transition":"\u65B9\u5411\u8FC7\u6E21","End opacity":"\u7ED3\u675F\u4E0D\u900F\u660E\u5EA6","Paint effect ended.":"\u7ED8\u5236\u6548\u679C\u7ED3\u675F\u3002","Paint effect ended":"\u7ED8\u5236\u6548\u679C\u7ED3\u675F","When paint effect of _PARAM0_ ends":"\u5F53_PARAM0_\u7684\u7ED8\u5236\u6548\u679C\u7ED3\u675F\u65F6","Follow multiple 2D objects with the camera":"\u8DDF\u968F\u591A\u4E2A 2D \u7269\u4F53\u4E0E\u76F8\u673A","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen.":"\u6539\u53D8\u6444\u50CF\u673A\u7684\u7F29\u653E\u548C\u4F4D\u7F6E\uFF0C\u4EE5\u786E\u4FDD\u5C4F\u5E55\u4E0A\u7684\u6240\u6709\u5BF9\u8C61\u5B9E\u4F8B\uFF08\u6216\u5BF9\u8C61\u7EC4\uFF09\u90FD\u80FD\u663E\u793A\u3002","Follow multiple objects with camera":"\u8DDF\u968F\u591A\u4E2A\u5BF9\u8C61\u8FDB\u884C\u6444\u50CF\u673A\u8DDF\u968F","Move camera to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Max zoom: _PARAM4_. Move the camera at a speed of _PARAM5_":"\u79FB\u52A8\u76F8\u673A\u4EE5\u5728\u5C4F\u5E55\u4E0A\u4FDD\u6301_PARAM1_\u7684\u5B9E\u4F8B\u3002\u6C34\u5E73\u548C\u5782\u76F4\u5206\u522B\u4F7F\u7528_PARAM2_px\u548C_PARAM3_px\u7684\u8FB9\u8DDD\u3002\u6700\u5927\u7F29\u653E\uFF1A_PARAM4_\u3002\u76F8\u673A\u4EE5_PARAM5_\u7684\u901F\u5EA6\u79FB\u52A8","Object (or Object group)":"\u5BF9\u8C61\uFF08\u6216\u5BF9\u8C61\u7EC4\uFF09","Extra space on sides of screen":"\u5C4F\u5E55\u8FB9\u7F18\u7684\u989D\u5916\u7A7A\u95F4","Each side will include this buffer":"\u6BCF\u4E00\u8FB9\u90FD\u5C06\u5305\u542B\u6B64\u7F13\u51B2\u533A","Extra space on top and bottom of screen":"\u5C4F\u5E55\u9876\u90E8\u548C\u5E95\u90E8\u7684\u989D\u5916\u7A7A\u95F4","Maximum zoom level (Default: 1)":"\u6700\u5927\u7F29\u653E\u7EA7\u522B\uFF08\u9ED8\u8BA4\u503C\uFF1A1\uFF09","Limit how far the camera will zoom in":"\u9650\u5236\u76F8\u673A\u7F29\u653E\u7684\u7A0B\u5EA6","Camera move speed (Range: 0 to 1) (Default: 0.05)":"\u76F8\u673A\u79FB\u52A8\u901F\u5EA6\uFF08\u8303\u56F4\uFF1A0\u52301\uFF09\uFF08\u9ED8\u8BA4\u503C\uFF1A0.05\uFF09","Percent of distance to destination that will be travelled each frame (used by lerp function)":"\u6BCF\u5E27\u79FB\u52A8\u5230\u76EE\u6807\u8DDD\u79BB\u7684\u767E\u5206\u6BD4\uFF08\u7531lerp\u51FD\u6570\u4F7F\u7528\uFF09","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen. (Deprecated)":"\u66F4\u6539\u7F29\u653E\u548C\u76F8\u673A\u4F4D\u7F6E\uFF0C\u4EE5\u4F7F\u5BF9\u8C61\uFF08\u6216\u5BF9\u8C61\u7EC4\uFF09\u7684\u6240\u6709\u5B9E\u4F8B\u90FD\u5728\u5C4F\u5E55\u4E0A\uFF08\u5DF2\u5F03\u7528\uFF09","Follow multiple objects with camera (Deprecated)":"\u4F7F\u7528\u7F29\u653E\u548C\u4F4D\u7F6E\u6765\u8DDF\u8E2A\u76F8\u673A\u4E2D\u7684\u591A\u4E2A\u5BF9\u8C61\uFF08\u5DF2\u5F03\u7528\uFF09","Move camera on layer _PARAM6_ to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Use a zoom between _PARAM4_ and _PARAM5_. Move the camera at a speed of _PARAM8_":"\u5C06\u56FE\u5C42_PARAM6_\u4E0A\u7684\u76F8\u673A\u79FB\u52A8\uFF0C\u4EE5\u4FDD\u6301\u5C4F\u5E55\u4E0A\u7684_PARAM1_\u5B9E\u4F8B\u3002\u6C34\u5E73\u548C\u5782\u76F4\u5404\u4F7F\u7528_PARAM2_px\u7684\u8FB9\u8DDD\u3002\u5728_PARAM4_\u548C_PARAM5_\u4E4B\u95F4\u4F7F\u7528\u7F29\u653E\u3002\u4EE5_PARAM8_\u7684\u901F\u5EA6\u79FB\u52A8\u76F8\u673A","Minimum zoom level":"\u6700\u5C0F\u7F29\u653E\u7EA7\u522B","Limit how far the camera will zoom OUT":"\u9650\u5236\u76F8\u673A\u7684\u6700\u5927\u7F29\u653E\u7A0B\u5EA6","Limit how far the camera will zoom IN":"\u9650\u5236\u76F8\u673A\u7684\u6700\u5C0F\u7F29\u653E\u7A0B\u5EA6","Use \"\" for base layer":"\u7528\u4E8E\u57FA\u7840\u56FE\u5C42\u7684\"\"","Gamepads (controllers)":"\u6E38\u620F\u624B\u67C4\uFF08\u63A7\u5236\u5668\uFF09","Add support for gamepads (or other controllers) to your game, giving access to information such as button presses, axis positions, trigger pressure, etc...":"\u4E3A\u60A8\u7684\u6E38\u620F\u6DFB\u52A0\u5BF9\u6E38\u620F\u624B\u67C4\uFF08\u6216\u5176\u4ED6\u63A7\u5236\u5668\uFF09\u7684\u652F\u6301\uFF0C\u4EE5\u4FBF\u8BBF\u95EE\u8BF8\u5982\u6309\u94AE\u6309\u4E0B\u3001\u8F74\u4F4D\u3001\u6273\u673A\u538B\u529B\u7B49\u4FE1\u606F\u3002","Accelerated speed":"\u52A0\u901F\u901F\u5EA6","Current speed":"\u5F53\u524D\u901F\u5EA6","Targeted speed":"\u76EE\u6807\u901F\u5EA6","Deceleration":"\u51CF\u901F","Get the value of the pressure on a gamepad trigger.":"\u83B7\u53D6\u6E38\u620F\u624B\u67C4\u6273\u673A\u4E0A\u7684\u538B\u529B\u503C\u3002","Pressure on a gamepad trigger":"\u6E38\u620F\u624B\u67C4\u6273\u673A\u7684\u538B\u529B","Player _PARAM1_ push axis _PARAM2_ to _PARAM3_":"\u73A9\u5BB6_PARAM1_\u6309\u4E0B\u8F74_PARAM2_\u5230_PARAM3_","The gamepad identifier: 1, 2, 3 or 4":"\u6E38\u620F\u624B\u67C4\u6807\u8BC6\u7B26\uFF1A1\u30012\u30013\u62164","Trigger button":"\u89E6\u53D1\u6309\u94AE","the force of gamepad stick (from 0 to 1).":"\u6E38\u620F\u624B\u67C4\u6447\u6746\u7684\u529B\u5EA6\uFF08\u4ECE0\u52301\uFF09\u3002","Stick force":"\u6447\u6746\u529B\u91CF","the gamepad _PARAM1_ _PARAM2_ stick force":"\u6E38\u620F\u624B\u67C4_PARAM1__PARAM2_\u6447\u6746\u529B\u5EA6","Stick: \"Left\" or \"Right\"":"\u6447\u6746\uFF1A\"\u5DE6\"\u6216\"\u53F3\"","Get the rotation value of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"\u83B7\u53D6\u6E38\u620F\u624B\u67C4\u6447\u6746\u7684\u65CB\u8F6C\u503C\u3002\u5982\u679C\u6B7B\u533A\u503C\u5F88\u9AD8\uFF0C\u5219\u89D2\u5EA6\u503C\u56DB\u820D\u4E94\u5165\u4E3A\u4E3B\u8F74\uFF1A\u5DE6\u3001\u5DE6\u3001\u4E0A\u3001\u4E0B\u3002\u96F6\u6B7B\u533A\u503C\u4F1A\u7ED9\u4E88\u89D2\u5EA6\u503C\u5B8C\u5168\u81EA\u7531\u3002","Value of a stick rotation (deprecated)":"\u65CB\u8F6C\u68D2\u7684\u4EF7\u503C\uFF08\u5DF2\u5F03\u7528\uFF09","Return the angle of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"\u8FD4\u56DE\u6E38\u620F\u624B\u67C4\u6447\u6746\u7684\u89D2\u5EA6\u3002\n\u5982\u679C\u6B7B\u533A\u503C\u8F83\u9AD8\uFF0C\u5219\u89D2\u5EA6\u503C\u5C06\u88AB\u56DB\u820D\u4E94\u5165\u5230\u4E3B\u8F74\uFF0C\u5411\u5DE6\uFF0C\u5411\u53F3\uFF0C\u5411\u4E0A\uFF0C\u5411\u4E0B\u3002\n\u96F6\u6B7B\u533A\u503C\u5C06\u4F7F\u89D2\u5EA6\u503C\u5B8C\u5168\u81EA\u7531\u3002","Stick angle":"\u6447\u6746\u89D2\u5EA6","Get the value of axis of a gamepad stick.":"\u83B7\u53D6\u6E38\u620F\u624B\u67C4\u6447\u6746\u7684\u8F74\u503C\u3002","Value of a gamepad axis (deprecated)":"\u6E38\u620F\u624B\u67C4\u8F74\u7684\u503C\uFF08\u5DF2\u5F03\u7528\uFF09","Direction":"\u65B9\u5411","Return the gamepad stick force on X axis (from -1 at the left to 1 at the right).":"\u8FD4\u56DE\u6E38\u620F\u624B\u67C4X\u8F74\u4E0A\u7684\u529B\u91CF\uFF08\u4ECE\u5DE6\u4FA7\u7684-1\u5230\u53F3\u4FA7\u76841\uFF09\u3002","Stick X force":"\u6447\u6746X\u529B\u91CF","Return the gamepad stick force on Y axis (from -1 at the top to 1 at the bottom).":"\u8FD4\u56DE\u6E38\u620F\u624B\u67C4Y\u8F74\u4E0A\u7684\u529B\u91CF\uFF08\u4ECE\u9876\u90E8\u7684-1\u5230\u5E95\u90E8\u76841\uFF09\u3002","Stick Y force":"\u6447\u6746Y\u529B\u91CF","Test if a button is released on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"\u6D4B\u8BD5\u6E38\u620F\u624B\u67C4\u4E0A\u7684\u6309\u94AE\u662F\u5426\u5DF2\u91CA\u653E\u3002\u6309\u94AE\u53EF\u4EE5\u662F\uFF1A\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* \u5176\u4ED6: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button released":"\u6E38\u620F\u624B\u67C4\u6309\u94AE\u5DF2\u91CA\u653E","Button _PARAM2_ of gamepad _PARAM1_ is released":"_PARAM1_\u7684\u6E38\u620F\u624B\u67C4_PARAM2_\u5DF2\u91CA\u653E","Name of the button":"\u6309\u94AE\u7684\u540D\u79F0","Check if a button was just pressed on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"\u68C0\u67E5\u6E38\u620F\u624B\u67C4\u4E0A\u7684\u6309\u94AE\u662F\u5426\u521A\u88AB\u6309\u4E0B\u3002\u6309\u94AE\u53EF\u4EE5\u662F\uFF1A\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* \u5176\u4ED6: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button just pressed":"\u6E38\u620F\u624B\u67C4\u6309\u94AE\u521A\u88AB\u6309\u4E0B","Button _PARAM2_ of gamepad _PARAM1_ was just pressed":"\u6E38\u620F\u624B\u67C4 _PARAM1_ \u7684\u6309\u94AE _PARAM2_ \u521A\u88AB\u6309\u4E0B","Return the index of the last pressed button of a gamepad.":"\u8FD4\u56DE\u6E38\u620F\u624B\u67C4\u7684\u6700\u540E\u6309\u4E0B\u6309\u94AE\u7684\u7D22\u5F15\u3002","Last pressed button (id)":"\u6700\u540E\u6309\u4E0B\u6309\u94AE\uFF08\u7F16\u53F7\uFF09","Check if any button is pressed on a gamepad.":"\u68C0\u67E5\u6E38\u620F\u624B\u67C4\u4E0A\u662F\u5426\u6309\u4E0B\u4EFB\u610F\u6309\u94AE\u3002","Any gamepad button pressed":"\u6309\u4E0B\u4EFB\u610F\u6E38\u620F\u624B\u67C4\u6309\u94AE","Any button of gamepad _PARAM1_ is pressed":"_PARAM1_\u7684\u6E38\u620F\u624B\u67C4\u4EFB\u610F\u6309\u94AE\u88AB\u6309\u4E0B","Return the last button pressed. \nButtons for Xbox and PS4 can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Both: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"\u8FD4\u56DE\u6700\u540E\u6309\u4E0B\u7684\u6309\u94AE\u3002\nXbox\u548CPS4\u7684\u6309\u94AE\u53EF\u4EE5\u662F\uFF1A\n* Xbox\uFF1A\u201CA\u201D\uFF0C\u201CB\u201D\uFF0C\u201CX\u201D\uFF0C\u201CY\u201D\uFF0C\u201CLB\u201D\uFF0C\u201CRB\u201D\uFF0C\u201CLT\u201D\uFF0C\u201CRT\u201D\uFF0C\u201CBACK\u201D\uFF0C\u201CSTART\u201D\uFF0C\n* PS4\uFF1A\u201CCROSS\u201D\uFF0C\u201CSQUARE\u201D\uFF0C\u201CCIRCLE\u201D\uFF0C\u201CTRIANGLE\u201D\uFF0C\u201CL1\u201D\uFF0C\u201CL2\u201D\uFF0C\u201CR1\u201D\uFF0C\u201CR2\u201D\uFF0C\u201CSHARE\u201D\uFF0C\u201COPTIONS\u201D\uFF0C\u201CPS_BUTTON\u201D\uFF0C\u201CCLICK_TOUCHPAD\u201D\uFF0C\n* \u4E24\u8005\uFF1A\u201CUP\u201D\uFF0C\u201CDOWN\u201D\uFF0C\u201CLEFT\u201D\uFF0C\u201CRIGHT\u201D\uFF0C\u201CCLICK_STICK_LEFT\u201D\uFF0C\u201CCLICK_STICK_RIGHT\u201D\u3002","Last pressed button (string)":"\u6700\u540E\u6309\u4E0B\u7684\u6309\u94AE\uFF08\u5B57\u7B26\u4E32\uFF09","Button _PARAM2_ of gamepad _PARAM1_ is pressed":"_PARAM1_\u7684\u6E38\u620F\u624B\u67C4_PARAM2_\u88AB\u6309\u4E0B","Controller type":"\u63A7\u5236\u5668\u7C7B\u578B","Return the number of gamepads.":"\u8FD4\u56DE\u6E38\u620F\u624B\u67C4\u7684\u6570\u91CF\u3002","Gamepad count":"\u6E38\u620F\u624B\u67C4\u6570\u91CF","Check if a button is pressed on a gamepad. \nButtons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"\u68C0\u67E5\u6E38\u620F\u624B\u67C4\u4E0A\u7684\u6309\u94AE\u662F\u5426\u88AB\u6309\u4E0B\u3002 \u6309\u94AE\u53EF\u4EE5\u662F\uFF1A\n* Xbox\uFF1A\u201CA\u201D\uFF0C\u201CB\u201D\uFF0C\u201CX\u201D\uFF0C\u201CY\u201D\uFF0C\u201CLB\u201D\uFF0C\u201CRB\u201D\uFF0C\u201CLT\u201D\uFF0C\u201CRT\u201D\uFF0C\u201CBACK\u201D\uFF0C\u201CSTART\u201D\uFF0C\n* PS4\uFF1A\u201CCROSS\u201D\uFF0C\u201CSQUARE\u201D\uFF0C\u201CCIRCLE\u201D\uFF0C\u201CTRIANGLE\u201D\uFF0C\u201CL1\u201D\uFF0C\u201CL2\u201D\uFF0C\u201CR1\u201D\uFF0C\u201CR2\u201D\uFF0C\u201CSHARE\u201D\uFF0C\u201COPTIONS\u201D\uFF0C\u201CPS_BUTTON\u201D\uFF0C\u201CCLICK_TOUCHPAD\u201D\uFF0C\n* \u5176\u4ED6\uFF1A\u201CUP\u201D\uFF0C\u201CDOWN\u201D\uFF0C\u201CLEFT\u201D\uFF0C\u201CRIGHT\u201D\uFF0C\u201CCLICK_STICK_LEFT\u201D\uFF0C\u201CCLICK_STICK_RIGHT\u201D\u3002","Gamepad button pressed":"\u6E38\u620F\u624B\u67C4\u6309\u94AE\u88AB\u6309\u4E0B","Return the value of the deadzone applied to a gamepad sticks, between 0 and 1.":"\u8FD4\u56DE\u5E94\u7528\u4E8E\u6E38\u620F\u624B\u67C4\u6447\u6746\u7684\u6B7B\u533A\u503C\uFF0C\u8303\u56F4\u4E3A0\u52301\u3002","Gamepad deadzone for sticks":"\u6E38\u620F\u624B\u67C4\u6447\u6746\u6B7B\u533A\u503C","Set the deadzone for sticks of the gamepad. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved). Deadzone is between 0 and 1, and is by default 0.2.":"\u8BBE\u7F6E\u6E38\u620F\u624B\u67C4\u6447\u6746\u7684\u6B7B\u533A\u503C\u3002 \u6B7B\u533A\u662F\u5728\u8BE5\u533A\u57DF\u5185\uFF0C\u6447\u6746\u7684\u79FB\u52A8\u4E0D\u4F1A\u88AB\u8003\u8651\uFF08\u76F8\u53CD\uFF0C\u6447\u6746\u5C06\u88AB\u89C6\u4E3A\u672A\u79FB\u52A8\uFF09\u3002 \u6B7B\u533A\u503C\u57280\u52301\u4E4B\u95F4\uFF0C\u9ED8\u8BA4\u4E3A0.2\u3002","Set gamepad deadzone for sticks":"\u8BBE\u7F6E\u6E38\u620F\u624B\u67C4\u6447\u6746\u7684\u6B7B\u533A\u503C","Set deadzone for sticks on gamepad: _PARAM1_ to _PARAM2_":"\u8BBE\u7F6E\u6E38\u620F\u624B\u67C4\u6447\u6746\u7684\u6B7B\u533A\u503C\uFF1A\u4ECE_PARAM1_\u5230_PARAM2_","Deadzone for sticks, 0.2 by default (0 to 1)":"\u6447\u6746\u7684\u6B7B\u533A\u503C\uFF0C\u9ED8\u8BA4\u4E3A0.2\uFF080\u81F31\uFF09","Check if a stick of a gamepad is pushed in a given direction.":"\u68C0\u67E5\u6E38\u620F\u624B\u67C4\u7684\u6447\u6746\u662F\u5426\u5411\u6307\u5B9A\u65B9\u5411\u63A8\u52A8\u3002","Gamepad stick pushed (axis)":"\u6E38\u620F\u624B\u67C4\u7684\u6447\u6746\u88AB\u63A8\u52A8\uFF08\u8F74\uFF09","_PARAM2_ stick of gamepad _PARAM1_ is pushed in direction _PARAM3_":"_PARAM2_ \u6E38\u620F\u624B\u67C4 _PARAM1_ \u7684\u6447\u6746\u5411 _PARAM3_ \u65B9\u5411\u63A8\u52A8","Return the number of connected gamepads.":"\u8FD4\u56DE\u8FDE\u63A5\u7684\u6E38\u620F\u624B\u67C4\u6570\u91CF\u3002","Connected gamepads count":"\u8FDE\u63A5\u7684\u6E38\u620F\u624B\u67C4\u6570\u91CF","Return a string containing informations about the specified gamepad.":"\u8FD4\u56DE\u5305\u542B\u6709\u5173\u6307\u5B9A\u6E38\u620F\u624B\u67C4\u7684\u4FE1\u606F\u7684\u5B57\u7B26\u4E32\u3002","Gamepad type":"\u6E38\u620F\u624B\u67C4\u7C7B\u578B","Player _PARAM1_ use _PARAM2_ controller":"\u73A9\u5BB6_PARAM1_\u4F7F\u7528_PARAM2_\u63A7\u5236\u5668","Check if the specified gamepad has the specified information in its description. Useful to know if the gamepad is a Xbox or PS4 controller.":"\u68C0\u67E5\u6307\u5B9A\u6E38\u620F\u624B\u67C4\u7684\u63CF\u8FF0\u4E2D\u662F\u5426\u5305\u542B\u6307\u5B9A\u4FE1\u606F\u3002 \u6709\u52A9\u4E8E\u77E5\u9053\u6E38\u620F\u624B\u67C4\u662F\u5426\u4E3AXbox\u6216PS4\u63A7\u5236\u5668\u3002","Gamepad _PARAM1_ is a _PARAM2_ controller":"\u6E38\u620F\u624B\u67C4_PARAM1_\u662F_PARAM2_\u63A7\u5236\u5668","Type: \"Xbox\", \"PS4\", \"Steam\" or \"PS3\" (among other)":"\u7C7B\u578B\uFF1A\"Xbox\"\uFF0C\"PS4\"\uFF0C\"Steam\"\u6216\"PS3\"\uFF08\u4EE5\u53CA\u5176\u4ED6\uFF09","Check if a gamepad is connected.":"\u68C0\u67E5\u6E38\u620F\u624B\u67C4\u662F\u5426\u5DF2\u8FDE\u63A5\u3002","Gamepad connected":"\u6E38\u620F\u624B\u67C4\u5DF2\u8FDE\u63A5","Gamepad _PARAM1_ is plugged and connected":"\u6E38\u620F\u624B\u67C4_PARAM1_\u5DF2\u63D2\u4E0A\u5E76\u5DF2\u8FDE\u63A5","Generate a vibration on the specified controller. Might only work if the game is running in a recent web browser.":"\u5728\u6307\u5B9A\u63A7\u5236\u5668\u4E0A\u751F\u6210\u632F\u52A8\u3002 \u5982\u679C\u6E38\u620F\u5728\u6700\u8FD1\u7684Web\u6D4F\u89C8\u5668\u4E2D\u8FD0\u884C\uFF0C\u53EF\u80FD\u4EC5\u4F1A\u8D77\u4F5C\u7528\u3002","Gamepad vibration":"\u6E38\u620F\u624B\u67C4\u9707\u52A8","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds":"\u4F7F\u6E38\u620F\u624B\u67C4_PARAM1_\u632F\u52A8_PARAM2_\u79D2","Time of the vibration, in seconds (optional, default value is 1)":"\u9707\u52A8\u65F6\u95F4\uFF0C\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u503C\u4E3A1\uFF09","Generate an advanced vibration on the specified controller. Incompatible with Firefox.":"\u5728\u6307\u5B9A\u7684\u63A7\u5236\u5668\u4E0A\u751F\u6210\u9AD8\u7EA7\u9707\u52A8\u3002 \u4E0EFirefox\u4E0D\u517C\u5BB9\u3002","Advanced gamepad vibration":"\u9AD8\u7EA7\u6E38\u620F\u624B\u67C4\u9707\u52A8","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds with the vibration magnitude of _PARAM3_ and _PARAM4_":"\u4F7F\u6E38\u620F\u624B\u67C4_PARAM1_\u632F\u52A8_PARAM2_\u79D2\uFF0C\u632F\u52A8\u5E45\u5EA6\u4E3A_PARAM3_\u548C_PARAM4_","Strong rumble magnitude (from 0 to 1)":"\u5F3A\u529B\u632F\u52A8\u5E45\u5EA6\uFF08\u4ECE0\u52301\uFF09","Weak rumble magnitude (from 0 to 1)":"\u5F31\u529B\u632F\u52A8\u5E45\u5EA6\uFF08\u4ECE0\u52301\uFF09","Change a vibration on the specified controller. Incompatible with Firefox.":"\u66F4\u6539\u6307\u5B9A\u63A7\u5236\u5668\u4E0A\u7684\u632F\u52A8\u3002 \u4E0EFirefox\u4E0D\u517C\u5BB9\u3002","Change gamepad active vibration":"\u66F4\u6539\u6E38\u620F\u624B\u67C4\u7684\u4E3B\u52A8\u632F\u52A8","Change the vibration magnitude of _PARAM2_ & _PARAM3_ on gamepad _PARAM1_":"\u66F4\u6539\u6E38\u620F\u624B\u67C4_PARAM1_\u4E0A\u7684\u632F\u52A8\u5E45\u5EA6_PARAM2_\u548C_PARAM3_","Check if any button is released on a gamepad.":"\u68C0\u67E5\u6E38\u620F\u624B\u67C4\u662F\u5426\u6709\u4EFB\u4F55\u6309\u94AE\u91CA\u653E\u3002","Any gamepad button released":"\u4EFB\u4F55\u6E38\u620F\u624B\u67C4\u6309\u94AE\u88AB\u91CA\u653E","Any button of gamepad _PARAM1_ is released":"\u4EFB\u4F55\u6E38\u620F\u624B\u67C4_PARAM1_\u7684\u6309\u94AE\u5DF2\u91CA\u653E","Return the strength of the weak vibration motor on the gamepad of a player.":"\u8FD4\u56DE\u73A9\u5BB6\u6E38\u620F\u624B\u67C4\u4E0A\u5F31\u632F\u52A8\u7535\u673A\u7684\u529B\u5EA6\u3002","Weak rumble magnitude":"\u5F31\u529B\u632F\u52A8\u5E45\u5EA6","Return the strength of the strong vibration motor on the gamepad of a player.":"\u8FD4\u56DE\u73A9\u5BB6\u6E38\u620F\u624B\u67C4\u4E0A\u5F3A\u632F\u52A8\u7535\u673A\u7684\u529B\u5EA6\u3002","Strong rumble magnitude":"\u5F3A\u529B\u632F\u52A8\u5E45\u5EA6","Control a platformer character with a gamepad.":"\u4F7F\u7528\u6E38\u620F\u624B\u67C4\u63A7\u5236\u5E73\u53F0\u6E38\u620F\u89D2\u8272\u3002","Platformer gamepad mapper":"\u5E73\u53F0\u6E38\u620F\u624B\u67C4\u6620\u5C04\u5668","Gamepad identifier (1, 2, 3 or 4)":"\u6E38\u620F\u624B\u67C4\u6807\u8BC6\u7B26\uFF081\u30012\u30013\u62164\uFF09","Use directional pad":"\u4F7F\u7528\u65B9\u5411\u952E","Controls":"\u63A7\u5236","Use left stick":"\u4F7F\u7528\u5DE6\u6447\u6746","Use right stick":"\u4F7F\u7528\u53F3\u6447\u6746","Jump button":"\u8DF3\u8DC3\u6309\u94AE","Control a 3D physics character with a gamepad.":"\u4F7F\u7528\u6E38\u620F\u624B\u67C4\u63A7\u52363D\u7269\u7406\u89D2\u8272","3D platformer gamepad mapper":"3D\u5E73\u53F0\u6E38\u620F\u624B\u67C4\u6620\u5C04\u5668","Walk joystick":"\u6B65\u884C\u6447\u6746","3D shooter gamepad mapper":"3D\u5C04\u51FB\u6E38\u620F\u624B\u67C4\u6620\u5C04\u7A0B\u5E8F","Camera joystick":"\u6444\u50CF\u5934\u6447\u6746","Control camera rotations with a gamepad.":"\u4F7F\u7528\u6E38\u620F\u624B\u67C4\u63A7\u5236\u6444\u50CF\u5934\u65CB\u8F6C\u3002","First person camera gamepad mapper":"\u7B2C\u4E00\u4EBA\u79F0\u6444\u50CF\u5934\u6E38\u620F\u624B\u67C4\u6620\u5C04\u5668","Maximum rotation speed":"\u6700\u5927\u65CB\u8F6C\u901F\u5EA6","Horizontal rotation":"\u6C34\u5E73\u65CB\u8F6C","Rotation acceleration":"\u65CB\u8F6C\u52A0\u901F\u5EA6","Rotation deceleration":"\u65CB\u8F6C\u51CF\u901F\u5EA6","Vertical rotation":"\u5782\u76F4\u65CB\u8F6C","Minimum angle":"\u6700\u5C0F\u89D2\u5EA6","Maximum angle":"\u6700\u5927\u89D2\u5EA6","Z position offset":"Z\u4F4D\u7F6E\u504F\u79FB","Position":"\u4F4D\u7F6E","Current rotation speed Z":"\u5F53\u524D\u65CB\u8F6C\u901F\u5EA6Z","Current rotation speed Y":"\u5F53\u524D\u65CB\u8F6C\u901F\u5EA6Y","Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"\u4F7F\u76F8\u673A\u4ECE_PARAM1_\u7684\u89C6\u89D2\u770B\u3002\u5F53\u6240\u6709\u89D2\u5EA6\u4E3A0\u4E14\u5934\u90E8\u671D\u5411 Z+ \u65F6\uFF0C\u5BF9\u8C61\u5FC5\u987B\u5411\u53F3\u770B\u3002","Move the camera to look though _PARAM0_ eyes":"\u5C06\u6444\u50CF\u5934\u79FB\u52A8\u5230\u901A\u8FC7_PARAM0_\u7684\u89C6\u89D2\u770B\u3002","the maximum horizontal rotation speed of the object.":"\u5BF9\u8C61\u7684\u6700\u5927\u6C34\u5E73\u65CB\u8F6C\u901F\u5EA6\u3002","Maximum horizontal rotation speed":"\u6700\u5927\u6C34\u5E73\u65CB\u8F6C\u901F\u5EA6","the maximum horizontal rotation speed":"\u6700\u5927\u6C34\u5E73\u65CB\u8F6C\u901F\u5EA6","the horizontal rotation acceleration of the object.":"\u5BF9\u8C61\u7684\u6C34\u5E73\u65CB\u8F6C\u52A0\u901F\u5EA6\u3002","Horizontal rotation acceleration":"\u6C34\u5E73\u65CB\u8F6C\u52A0\u901F\u5EA6","the horizontal rotation acceleration":"\u6C34\u5E73\u65CB\u8F6C\u52A0\u901F\u5EA6","the horizontal rotation deceleration of the object.":"\u5BF9\u8C61\u7684\u6C34\u5E73\u65CB\u8F6C\u51CF\u901F\u3002","Horizontal rotation deceleration":"\u6C34\u5E73\u65CB\u8F6C\u51CF\u901F","the horizontal rotation deceleration":"\u6C34\u5E73\u65CB\u8F6C\u51CF\u901F","the maximum vertical rotation speed of the object.":"\u5BF9\u8C61\u7684\u6700\u5927\u5782\u76F4\u65CB\u8F6C\u901F\u5EA6\u3002","Maximum vertical rotation speed":"\u6700\u5927\u5782\u76F4\u65CB\u8F6C\u901F\u5EA6","the maximum vertical rotation speed":"\u76EE\u6807\u7684\u6700\u5927\u5782\u76F4\u65CB\u8F6C\u901F\u5EA6","the vertical rotation acceleration of the object.":"\u7269\u4F53\u7684\u5782\u76F4\u65CB\u8F6C\u52A0\u901F\u5EA6\u3002","Vertical rotation acceleration":"\u5782\u76F4\u65CB\u8F6C\u52A0\u901F\u5EA6","the vertical rotation acceleration":"\u7269\u4F53\u7684\u5782\u76F4\u65CB\u8F6C\u52A0\u901F\u5EA6","the vertical rotation deceleration of the object.":"\u7269\u4F53\u7684\u5782\u76F4\u65CB\u8F6C\u51CF\u901F\u5EA6\u3002","Vertical rotation deceleration":"\u5782\u76F4\u65CB\u8F6C\u51CF\u901F\u5EA6","the vertical rotation deceleration":"\u7269\u4F53\u7684\u5782\u76F4\u65CB\u8F6C\u51CF\u901F\u5EA6","the minimum vertical camera angle of the object.":"\u7269\u4F53\u7684\u6700\u5C0F\u5782\u76F4\u6444\u50CF\u673A\u89D2\u5EA6\u3002","Minimum vertical camera angle":"\u6700\u5C0F\u5782\u76F4\u76F8\u673A\u89D2\u5EA6","the minimum vertical camera angle":"\u6700\u5C0F\u5782\u76F4\u6444\u50CF\u673A\u89D2\u5EA6","the maximum vertical camera angle of the object.":"\u7269\u4F53\u7684\u6700\u5927\u5782\u76F4\u6444\u50CF\u673A\u89D2\u5EA6\u3002","Maximum vertical camera angle":"\u6700\u5927\u5782\u76F4\u76F8\u673A\u89D2\u5EA6","the maximum vertical camera angle":"\u6700\u5927\u5782\u76F4\u6444\u50CF\u673A\u89D2\u5EA6","the z position offset of the object.":"\u7269\u4F53\u7684 Z \u4F4D\u7F6E\u504F\u79FB\u3002","the z position offset":"Z \u4F4D\u7F6E\u504F\u79FB\u3002","Control a 3D physics car with a gamepad.":"Control a 3D physics car with a gamepad.","3D car gamepad mapper":"3D car gamepad mapper","3D physics car":"3D physics car","Hand brake button":"Hand brake button","Control a top-down character with a gamepad.":"\u4F7F\u7528\u6E38\u620F\u624B\u67C4\u63A7\u5236\u9876\u90E8\u5411\u4E0B\u89D2\u8272\u3002","Top-down gamepad mapper":"\u9876\u90E8\u5411\u4E0B\u6E38\u620F\u624B\u67C4\u6620\u5C04\u5668","Top-down movement behavior":"\u9876\u90E8\u5411\u4E0B\u79FB\u52A8\u884C\u4E3A","Stick mode":"\u6447\u6746\u6A21\u5F0F","Hash":"\u54C8\u5E0C","Hash with MD5 or SHA256.":"\u4F7F\u7528MD5\u6216SHA256\u8FDB\u884C\u54C8\u5E0C\u3002","Returns a Hash a MD5 based on a string.":"\u6839\u636E\u5B57\u7B26\u4E32\u8FD4\u56DE\u57FA\u4E8EMD5\u7684\u54C8\u5E0C\u3002","Hash a String with MD5":"\u4F7F\u7528MD5\u5BF9\u5B57\u7B26\u4E32\u8FDB\u884C\u54C8\u5E0C","String to be hashed":"\u8981\u8FDB\u884C\u54C8\u5E0C\u5904\u7406\u7684\u5B57\u7B26\u4E32","Returns a Hash a SHA256 based on a string.":"\u6839\u636E\u5B57\u7B26\u4E32\u8FD4\u56DE\u57FA\u4E8ESHA256\u7684\u54C8\u5E0C\u3002","Hash a String with SHA256":"\u4F7F\u7528SHA256\u5BF9\u5B57\u7B26\u4E32\u8FDB\u884C\u54C8\u5E0C","Health points and damage":"\u751F\u547D\u503C\u548C\u4F24\u5BB3","Manage health (life) points, shield and armor.":"\u7BA1\u7406\u751F\u547D\uFF08\u751F\u547D\uFF09\u503C\uFF0C\u62A4\u76FE\u548C\u88C5\u7532\u3002","Health":"\u751F\u547D\u503C","Starting health":"\u8D77\u59CB\u751F\u547D\u503C","Current health (life) points":"\u5F53\u524D\u751F\u547D\u503C\uFF08\u751F\u547D\uFF09\u70B9\u6570","Maximum health":"\u6700\u5927\u751F\u547D\u503C","Use 0 for no maximum.":"\u4F7F\u75280\u8868\u793A\u6CA1\u6709\u6700\u5927\u503C\u3002","Damage cooldown":"\u4F24\u5BB3\u51B7\u5374\u65F6\u95F4","Allow heals to increase health above max health (regen will never exceed max health)":"\u5141\u8BB8\u6CBB\u7597\u4F7F\u5065\u5EB7\u503C\u8D85\u8FC7\u6700\u5927\u5065\u5EB7\u503C\uFF08\u518D\u751F\u6C38\u8FDC\u4E0D\u4F1A\u8D85\u8FC7\u6700\u5927\u5065\u5EB7\u503C\uFF09","Damage to health from the previous incoming damage":"\u6765\u81EA\u5148\u524D\u53D7\u5230\u4F24\u5BB3\u7684\u751F\u547D\u503C\u51CF\u5C11","Chance to dodge incoming damage (between 0 and 1)":"\u95EA\u907F\u5373\u5C06\u5230\u6765\u7684\u4F24\u5BB3\u7684\u51E0\u7387\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u95F4\uFF09","When a damage is dodged, no damage is applied.":"\u5F53\u4F24\u5BB3\u88AB\u95EA\u907F\u65F6\uFF0C\u4E0D\u4F1A\u5E94\u7528\u4F24\u5BB3\u3002","Health points gained from the previous heal":"\u4ECE\u4EE5\u524D\u7684\u6CBB\u7597\u4E2D\u83B7\u5F97\u7684\u751F\u547D\u503C","Rate of health regeneration (points per second)":"\u6BCF\u79D2\u5065\u5EB7\u518D\u751F\u7387\uFF08\u6BCF\u79D2\u591A\u5C11\u70B9\uFF09","Health regeneration":"\u5065\u5EB7\u518D\u751F","Health regeneration delay":"\u5065\u5EB7\u518D\u751F\u5EF6\u8FDF","Delay before health regeneration starts after a hit.":"\u53D7\u4F24\u540E\u5065\u5EB7\u518D\u751F\u5F00\u59CB\u524D\u7684\u5EF6\u8FDF\u3002","Current shield points":"\u5F53\u524D\u62A4\u76FE\u70B9\u6570","Shield":"\u62A4\u76FE","Maximum shield":"\u6700\u5927\u62A4\u76FE","Leave 0 for unlimited.":"\u5C060\u7559\u4F5C\u65E0\u9650\u3002","Duration of shield":"\u62A4\u76FE\u6301\u7EED\u65F6\u95F4","Use 0 to make the shield permanent.":"\u4F7F\u75280\u4F7F\u62A4\u76FE\u6C38\u4E45\u5B58\u5728\u3002","Rate of shield regeneration (points per second)":"\u62A4\u76FE\u518D\u751F\u7387\uFF08\u6BCF\u79D2\u591A\u5C11\u70B9\uFF09","Shield regeneration":"\u62A4\u76FE\u518D\u751F","Block excess damage when shield is broken":"\u62A4\u76FE\u7834\u88C2\u65F6\u963B\u6B62\u8FC7\u91CF\u4F24\u5BB3\u3002","Shield regeneration delay":"\u62A4\u76FE\u518D\u751F\u5EF6\u8FDF","Delay before shield regeneration starts after a hit.":"\u53D7\u5230\u653B\u51FB\u540E\u62A4\u76FE\u518D\u751F\u5F00\u59CB\u524D\u7684\u5EF6\u8FDF\u3002","Damage to shield from the previous incoming damage":"\u53D7\u5230\u7684\u4E0A\u4E00\u6B21\u5165\u4FB5\u4F24\u5BB3\u5BF9\u62A4\u76FE\u7684\u4F24\u5BB3","Flat damage reduction from armor":"\u6765\u81EA\u88C5\u7532\u7684\u5E73\u5766\u4F24\u5BB3\u51CF\u5C11","Incoming damages are reduced by this value.":"\u5165\u4FB5\u4F24\u5BB3\u5C06\u51CF\u5C11\u8FD9\u4E2A\u503C\u3002","Armor":"\u88C5\u7532","Percentage damage reduction from armor (between 0 and 1)":"\u6765\u81EA\u88C5\u7532\u7684\u767E\u5206\u6BD4\u4F24\u5BB3\u51CF\u5C11\uFF080\u548C1\u4E4B\u95F4\uFF09","Apply damage to the object. Shield and armor can reduce this damage if enabled.":"\u5411\u5BF9\u8C61\u5E94\u7528\u4F24\u5BB3\u3002\u5982\u679C\u542F\u7528\uFF0C\u76FE\u724C\u548C\u76D4\u7532\u53EF\u4EE5\u51CF\u8F7B\u8FD9\u79CD\u4F24\u5BB3\u3002","Apply damage to an object":"\u5411\u5BF9\u8C61\u5E94\u7528\u4F24\u5BB3","Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)":"\u5C06_PARAM0_\u7684\u751F\u547D\u503C\u66F4\u6539\u4E3A_PARAM2_\u70B9\uFF08\u4F24\u5BB3\u53EF\u4EE5\u901A\u8FC7\u76FE\u724C\uFF1A_PARAM3_\uFF0C\u62A4\u7532\uFF1A_PARAM4_\u51CF\u5C11\uFF09","Points of damage":"\u4F24\u5BB3\u70B9","Shield can reduce damage taken":"\u76FE\u724C\u53EF\u4EE5\u51CF\u5C11\u53D7\u5230\u7684\u4F24\u5BB3","Armor can reduce damage taken":"\u76D4\u7532\u53EF\u4EE5\u51CF\u5C11\u53D7\u5230\u7684\u4F24\u5BB3","current health points of the object.":"\u7269\u4F53\u7684\u5F53\u524D\u751F\u547D\u503C\u3002","Health points":"\u751F\u547D\u503C","health points":"\u751F\u547D\u503C","Change the health points of the object. Will not trigger damage cooldown.":"\u66F4\u6539\u7269\u4F53\u7684\u751F\u547D\u503C\u3002\u4E0D\u4F1A\u89E6\u53D1\u4F24\u5BB3\u51B7\u5374\u3002","Change health points":"\u66F4\u6539\u751F\u547D\u503C","Change the health of _PARAM0_ to _PARAM2_ points":"\u5C06_PARAM0_\u7684\u751F\u547D\u503C\u66F4\u6539\u4E3A_PARAM2_\u70B9\u3002","New health value":"\u65B0\u7684\u751F\u547D\u503C","Change health points (deprecated)":"\u66F4\u6539\u751F\u547D\u503C\uFF08\u5DF2\u5F03\u7528\uFF09","Heal the object by increasing its health points.":"\u901A\u8FC7\u589E\u52A0\u5176\u5065\u5EB7\u70B9\u6570\u6765\u6CBB\u6108\u5BF9\u8C61\u3002","Heal object":"\u6CBB\u7597\u5BF9\u8C61","Heal _PARAM0_ with _PARAM2_ health points":"\u7528_PARAM0_\u5065\u5EB7\u70B9\u6570\u6CBB\u6108_PARAM2_","Points to heal (will be added to object health)":"\u8981\u6CBB\u6108\u7684\u70B9\u6570\uFF08\u5C06\u4F1A\u88AB\u6DFB\u52A0\u5230\u5BF9\u8C61\u5065\u5EB7\u4E2D\uFF09","the maximum health points of the object.":"\u5BF9\u8C61\u7684\u6700\u5927\u5065\u5EB7\u70B9\u6570\u3002","Maximum health points":"\u6700\u5927\u5065\u5EB7\u70B9\u6570","the maximum health points":"\u5BF9\u8C61\u7684\u6700\u5927\u5065\u5EB7\u70B9\u6570","Change the object maximum health points.":"\u6539\u53D8\u5BF9\u8C61\u7684\u6700\u5927\u5065\u5EB7\u70B9\u6570\u3002","Maximum health points (deprecated)":"\u6700\u5927\u5065\u5EB7\u70B9\u6570\uFF08\u5DF2\u5F03\u7528\uFF09","Change the maximum health of _PARAM0_ to _PARAM2_ points":"\u5C06_PARAM0_\u7684\u6700\u5927\u5065\u5EB7\u6539\u53D8\u4E3A_PARAM2_\u70B9","the rate of health regeneration (points per second).":"\u5065\u5EB7\u518D\u751F\u7387\uFF08\u6BCF\u79D2\u7684\u70B9\u6570\uFF09\u3002","Rate of health regeneration":"\u5065\u5EB7\u518D\u751F\u7387","the rate of health regeneration":"\u5065\u5EB7\u518D\u751F\u7387","Rate of regen":"\u518D\u751F\u7387","Change the rate of health regeneration.":"\u6539\u53D8\u5065\u5EB7\u518D\u751F\u7387\u3002","Rate of health regeneration (deprecated)":"\u5065\u5EB7\u518D\u751F\u7387\uFF08\u5DF2\u5F03\u7528\uFF09","Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second":"\u5C06_PARAM0_\u7684\u5065\u5EB7\u518D\u751F\u7387\u66F4\u6539\u4E3A_PARAM2_\u6BCF\u79D2\u7684\u70B9\u6570","the duration of damage cooldown (seconds).":"\u53D7\u4F24\u51B7\u5374\u7684\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","the duration of damage cooldown":"\u53D7\u4F24\u51B7\u5374\u7684\u6301\u7EED\u65F6\u95F4","Duration of damage cooldown (seconds)":"\u53D7\u4F24\u51B7\u5374\u7684\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","Change the duration of damage cooldown (seconds).":"\u6539\u53D8\u53D7\u4F24\u51B7\u5374\u7684\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","Damage cooldown (deprecated)":"\u4F24\u5BB3\u51B7\u5374\uFF08\u5DF2\u5F03\u7528\uFF09","Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds":"\u5C06_PARAM0_\u53D7\u4F24\u51B7\u5374\u7684\u6301\u7EED\u65F6\u95F4\u6539\u53D8\u4E3A_PARAM2_\u79D2","the delay before health regeneration starts after last being hit (seconds).":"\u6700\u540E\u53D7\u5230\u4F24\u5BB3\u540E\u5F00\u59CB\u5065\u5EB7\u518D\u751F\u7684\u5EF6\u8FDF\uFF08\u79D2\uFF09\u3002","the health regeneration delay":"\u5065\u5EB7\u518D\u751F\u5EF6\u8FDF","Delay (seconds)":"\u5EF6\u8FDF\uFF08\u79D2\uFF09","Change the delay before health regeneration starts after being hit.":"\u6539\u53D8\u53D7\u4F24\u540E\u5065\u5EB7\u518D\u751F\u5F00\u59CB\u524D\u7684\u5EF6\u8FDF\u3002","Health regeneration delay (deprecated)":"\u5065\u5EB7\u518D\u751F\u5EF6\u8FDF\uFF08\u5DF2\u5F03\u7528\uFF09","Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds":"\u5C06_PARAM0_\u4E0A\u7684\u5065\u5EB7\u518D\u751F\u5EF6\u8FDF\u6539\u4E3A_PARAM2_\u79D2","the chance to dodge incoming damage (range: 0 to 1).":"\u95EA\u907F\u8FDB\u5165\u7684\u4F24\u5BB3\u7684\u51E0\u7387\uFF08\u8303\u56F4\uFF1A0\u52301\uFF09\u3002","Dodge chance":"\u95EA\u907F\u7684\u51E0\u7387","the chance to dodge incoming damage":"\u95EA\u907F\u8FDB\u5165\u7684\u4F24\u5BB3\u7684\u51E0\u7387","Chance to dodge (Range: 0 to 1)":"\u95EA\u907F\u7684\u51E0\u7387\uFF08\u8303\u56F4\uFF1A0\u52301\uFF09","Change the chance to dodge incoming damage.":"\u6539\u53D8\u95EA\u907F\u8FDB\u5165\u7684\u4F24\u5BB3\u7684\u51E0\u7387\u3002","Chance to dodge incoming damage (deprecated)":"\u95EA\u907F\u7D2F\u8FDB\u5165\u7684\u4F24\u5BB3\uFF08\u5DF2\u5F03\u7528\uFF09","Change the chance to dodge on _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u95EA\u907F\u51E0\u7387\u66F4\u6539\u4E3A_PARAM2_","the flat damage reduction from the armor. Incoming damage is reduced by this value.":"\u6765\u81EA\u62A4\u7532\u7684\u56FA\u5B9A\u4F24\u5BB3\u51CF\u5C11\u3002\u8FD9\u4E2A\u6570\u503C\u5C06\u51CF\u5C11\u6240\u53D7\u5230\u7684\u4F24\u5BB3\u3002","Armor flat damage reduction":"\u62A4\u7532\u7684\u56FA\u5B9A\u4F24\u5BB3\u51CF\u5C11","the armor flat damage reduction":"\u6765\u81EA\u62A4\u7532\u7684\u56FA\u5B9A\u4F24\u5BB3\u51CF\u5C11","Flat reduction from armor":"\u62A4\u7532\u7684\u56FA\u5B9A\u51CF\u5C11","Change the flat damage reduction from armor. Incoming damage is reduced by this value.":"\u66F4\u6539\u62A4\u7532\u7684\u56FA\u5B9A\u4F24\u5BB3\u51CF\u5C11\u3002\u6240\u53D7\u4F24\u5BB3\u5C06\u51CF\u5C11\u8FD9\u4E2A\u6570\u503C\u3002","Flat damage reduction from armor (deprecated)":"\u62A4\u7532\u7684\u56FA\u5B9A\u4F24\u5BB3\u51CF\u5C11\uFF08\u5DF2\u5F03\u7528\uFF09","Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points":"\u5C06\u62A4\u7532\u7684\u56FA\u5B9A\u4F24\u5BB3\u51CF\u5C11\u4ECE_PARAM0_\u66F4\u6539\u4E3A_PARAM2_\u70B9","the percent damage reduction from armor (range: 0 to 1).":"\u6765\u81EA\u62A4\u7532\u7684\u767E\u5206\u6BD4\u4F24\u5BB3\u51CF\u5C11\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09\u3002","Armor percent damage reduction":"\u62A4\u7532\u7684\u767E\u5206\u6BD4\u4F24\u5BB3\u51CF\u5C11","the armor percent damage reduction":"\u6765\u81EA\u62A4\u7532\u7684\u767E\u5206\u6BD4\u4F24\u5BB3\u51CF\u5C11","Percent damage reduction from armor":"\u62A4\u7532\u7684\u767E\u5206\u6BD4\u51CF\u5C11","Change the percent damage reduction from armor. Range: 0 to 1.":"\u66F4\u6539\u62A4\u7532\u7684\u767E\u5206\u6BD4\u4F24\u5BB3\u51CF\u5C11\u3002\u8303\u56F4\uFF1A0\u81F31\u3002","Percent damage reduction from armor (deprecated)":"\u62A4\u7532\u7684\u767E\u5206\u6BD4\u4F24\u5BB3\u51CF\u5C11\uFF08\u5DF2\u5F03\u7528\uFF09","Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_":"\u5C06\u62A4\u7532\u7684\u767E\u5206\u6BD4\u4F24\u5BB3\u51CF\u5C11\u4ECE_PARAM0_\u66F4\u6539\u4E3A_PARAM2_","Allow heals to increase health above max health. Regeneration will not exceed max health.":"\u5141\u8BB8\u6CBB\u7597\u4F7F\u751F\u547D\u503C\u63D0\u9AD8\u5230\u6700\u5927\u751F\u547D\u503C\u4EE5\u4E0A\u3002\u518D\u751F\u5C06\u4E0D\u4F1A\u8D85\u8FC7\u6700\u5927\u751F\u547D\u503C\u3002","Allow over-healing":"\u5141\u8BB8\u8FC7\u5EA6\u6CBB\u7597","Allow over-healing on _PARAM0_: _PARAM2_":"\u5141\u8BB8\u8FC7\u5EA6\u6CBB\u7597\u5728_PARAM0_\uFF1A_PARAM2_","Mark object as hit at least once.":"\u6807\u8BB0\u5BF9\u8C61\u81F3\u5C11\u88AB\u51FB\u4E2D\u4E00\u6B21\u3002","Mark object as hit at least once":"\u5C06\u5BF9\u8C61\u6807\u8BB0\u4E3A\u81F3\u5C11\u88AB\u51FB\u4E2D\u4E00\u6B21","Mark _PARAM0_ as hit at least once: _PARAM2_":"\u5C06_PARAM0_\u6807\u8BB0\u4E3A\u81F3\u5C11\u88AB\u51FB\u4E2D\u4E00\u6B21\uFF1A_PARAM2_","Hit at least once":"\u81F3\u5C11\u88AB\u51FB\u4E2D\u4E00\u6B21","Mark object as just damaged.":"\u5C06\u5BF9\u8C61\u6807\u8BB0\u4E3A\u521A\u53D7\u5230\u4F24\u5BB3\u3002","Mark object as just damaged":"\u5C06\u5BF9\u8C61\u6807\u8BB0\u4E3A\u521A\u53D7\u5230\u4F24\u5BB3","Mark _PARAM0_ as just damaged: _PARAM2_":"\u5C06_PARAM0_\u6807\u8BB0\u4E3A\u521A\u53D7\u5230\u4F24\u5BB3\uFF1A_PARAM2_","Just damaged":"\u521A\u53D7\u5230\u4F24\u5BB3","Trigger damage cooldown.":"\u89E6\u53D1\u4F24\u5BB3\u51B7\u5374\u3002","Trigger damage cooldown":"\u89E6\u53D1\u4F24\u5BB3\u51B7\u5374","Trigger the damage cooldown on _PARAM0_":"\u89E6\u53D1_PARAM0_\u4E0A\u7684\u4F24\u5BB3\u51B7\u5374","Check if the object has been hit at least once.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u81F3\u5C11\u88AB\u51FB\u4E2D\u4E00\u6B21\u3002","Object has been hit at least once":"\u5BF9\u8C61\u5DF2\u7ECF\u81F3\u5C11\u88AB\u51FB\u4E2D\u4E00\u6B21","_PARAM0_ has been hit at least once":"_PARAM0_\u5DF2\u7ECF\u81F3\u5C11\u88AB\u51FB\u4E2D\u4E00\u6B21","Check if health was just damaged previously in the events.":"\u68C0\u67E5\u4E8B\u4EF6\u4E2D\u4E4B\u524D\u7684\u751F\u547D\u503C\u662F\u5426\u521A\u53D7\u5230\u4F24\u5BB3\u3002","Is health just damaged":"\u751F\u547D\u503C\u521A\u521A\u53D7\u5230\u4F24\u5BB3","Health has just been damaged on _PARAM0_":"\u5065\u5EB7\u521A\u521A\u5728_PARAM0_\u4E0A\u53D7\u635F","Check if the object was just healed previously in the events.":"\u68C0\u67E5\u5BF9\u8C61\u5728\u4E8B\u4EF6\u4E2D\u662F\u5426\u521A\u521A\u53D7\u5230\u4E86\u6CBB\u6108\u3002","Is just healed":"\u521A\u521A\u53D7\u5230\u6CBB\u6108","_PARAM0_ has just been healed":"_PARAM0_\u521A\u521A\u88AB\u6CBB\u6108","Check if damage cooldown is active. Object and shield cannot be damaged while this is active.":"\u68C0\u67E5\u4F24\u5BB3\u51B7\u5374\u662F\u5426\u6FC0\u6D3B\u3002 \u5728\u6B64\u671F\u95F4\uFF0C\u5BF9\u8C61\u548C\u62A4\u76FE\u65E0\u6CD5\u53D7\u5230\u4F24\u5BB3\u3002","Is damage cooldown active":"\u4F24\u5BB3\u51B7\u5374\u662F\u5426\u6FC0\u6D3B","Damage cooldown on _PARAM0_ is active":"Damage cooldown on _PARAM0_ is active","the time before damage cooldown ends (seconds).":"\u4F24\u5BB3\u51B7\u5374\u7ED3\u675F\u524D\u7684\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","Time remaining in damage cooldown":"\u4F24\u5BB3\u51B7\u5374\u7ED3\u675F\u65F6\u5269\u4F59\u65F6\u95F4","the time before damage cooldown end":"\u4F24\u5BB3\u51B7\u5374\u7ED3\u675F\u524D\u7684\u65F6\u95F4","Check if the object is considered dead (no health points).":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u88AB\u5224\u65AD\u4E3A\u6B7B\u4EA1\uFF08\u6CA1\u6709\u751F\u547D\u503C\uFF09\u3002","Is dead":"\u5DF2\u6B7B\u4EA1","_PARAM0_ is dead":"_PARAM0_\u5DF2\u6B7B\u4EA1","the time since last taken hit (seconds).":"\u4E0A\u6B21\u53D7\u5230\u6253\u51FB\u540E\u7684\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","Time since last hit":"\u4E0A\u6B21\u53D7\u5230\u6253\u51FB\u7684\u65F6\u95F4","the time since last taken hit on health":"\u4E0A\u6B21\u53D7\u5230\u4F24\u5BB3\u540E\u6240\u7ECF\u5386\u7684\u65F6\u95F4","the health damage taken from most recent hit.":"\u6700\u8FD1\u4E00\u6B21\u6253\u51FB\u9020\u6210\u7684\u5065\u5EB7\u4F24\u5BB3\u3002","Health damage taken from most recent hit":"\u6700\u8FD1\u4E00\u6B21\u6253\u51FB\u5BFC\u81F4\u7684\u5065\u5EB7\u635F\u4F24","the health damage taken from most recent hit":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u5065\u5EB7\u4F24\u5BB3","the maximum shield points of the object.":"\u5BF9\u8C61\u7684\u6700\u5927\u62A4\u76FE\u70B9\u6570\u3002","Maximum shield points":"\u6700\u5927\u62A4\u76FE\u70B9\u6570","the maximum shield points":"\u6700\u5927\u62A4\u76FE\u70B9\u6570","Change the maximum shield points of the object.":"\u66F4\u6539\u5BF9\u8C61\u7684\u6700\u5927\u62A4\u76FE\u70B9\u6570\u3002","Maximum shield points (deprecated)":"\u6700\u5927\u62A4\u76FE\u70B9\u6570\uFF08\u5DF2\u5F03\u7528\uFF09","Change the maximum shield of _PARAM0_ to _PARAM2_ points":"\u5C06_PARAM0_\u7684\u6700\u5927\u62A4\u76FE\u6539\u4E3A_PARAM2_\u70B9","Change maximum shield points.":"\u66F4\u6539\u6700\u5927\u62A4\u76FE\u70B9\u6570\u3002","Max shield points (deprecated)":"\u6700\u5927\u62A4\u76FE\u70B9\u6570\uFF08\u5DF2\u5F03\u7528\uFF09","Change the maximum shield points on _PARAM0_ to _PARAM2_ points":"\u5C06_PARAM0_\u7684\u6700\u5927\u62A4\u76FE\u70B9\u6570\u6539\u4E3A_PARAM2_\u70B9","Shield points":"\u62A4\u76FE\u70B9\u6570","the current shield points of the object.":"\u5BF9\u8C61\u7684\u5F53\u524D\u62A4\u76FE\u70B9\u6570\u3002","the shield points":"\u62A4\u76FE\u70B9\u6570","Change current shield points. Will not trigger damage cooldown.":"\u66F4\u6539\u5F53\u524D\u62A4\u76FE\u70B9\u6570\u3002 \u4E0D\u4F1A\u89E6\u53D1\u4F24\u5BB3\u51B7\u5374\u3002","Shield points (deprecated)":"\u62A4\u76FE\u70B9\u6570\uFF08\u5DF2\u5F03\u7528\uFF09","Change current shield points on _PARAM0_ to _PARAM2_ points":"\u5C06_PARAM0_\u7684\u5F53\u524D\u62A4\u76FE\u70B9\u6570\u66F4\u6539\u4E3A_PARAM2_\u70B9","the rate of shield regeneration (points per second).":"\u62A4\u76FE\u518D\u751F\u901F\u7387\uFF08\u6BCF\u79D2\u7684\u70B9\u6570\uFF09\u3002","Rate of shield regeneration":"\u62A4\u76FE\u518D\u751F\u901F\u7387","the rate of shield regeneration":"\u62A4\u76FE\u518D\u751F\u7387","Regeneration rate (points per second)":"\u518D\u751F\u7387\uFF08\u6BCF\u79D2\u7684\u70B9\u6570\uFF09","Change rate of shield regeneration.":"\u66F4\u6539\u62A4\u76FE\u518D\u751F\u7387\u3002","Shield regeneration rate (deprecated)":"\u62A4\u76FE\u518D\u751F\u7387\uFF08\u5DF2\u5F03\u7528\uFF09","Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second":"\u5C06_PARAM0_\u7684\u62A4\u76FE\u518D\u751F\u7387\u66F4\u6539\u4E3A_PARAM2_\u6BCF\u79D2","the delay before shield regeneration starts after being hit (seconds).":"\u53D7\u5230\u653B\u51FB\u540E\u62A4\u76FE\u518D\u751F\u5F00\u59CB\u524D\u7684\u5EF6\u8FDF\uFF08\u79D2\uFF09\u3002","the shield regeneration delay":"\u62A4\u76FE\u518D\u751F\u5EF6\u8FDF","Regeneration delay (seconds)":"\u518D\u751F\u5EF6\u8FDF\uFF08\u79D2\uFF09","Change delay before shield regeneration starts after being hit.":"\u53D7\u5230\u653B\u51FB\u540E\u62A4\u76FE\u518D\u751F\u5F00\u59CB\u524D\u7684\u5EF6\u8FDF\u66F4\u6539\u3002","Shield regeneration delay (deprecated)":"\u62A4\u76FE\u518D\u751F\u5EF6\u8FDF\uFF08\u5DF2\u5F03\u7528\uFF09","Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds":"\u5C06_PARAM0_\u7684\u62A4\u76FE\u518D\u751F\u5EF6\u8FDF\u66F4\u6539\u4E3A_PARAM2_\u79D2","the duration of the shield (seconds). A value of \"0\" means the shield is permanent.":"\u62A4\u76FE\u7684\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\u3002 \u503C\u201C0\u201D\u8868\u793A\u62A4\u76FE\u6C38\u4E45\u3002","the duration of the shield":"\u62A4\u76FE\u7684\u6301\u7EED\u65F6\u95F4","Shield duration (seconds)":"\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","Change duration of shield. Use \"0\" to make shield permanent.":"\u66F4\u6539\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\u3002 \u4F7F\u7528\u201C0\u201D\u4F7F\u62A4\u76FE\u6C38\u4E45\u3002","Duration of shield (deprecated)":"\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\uFF08\u5DF2\u5F03\u7528\uFF09","Change the duration of shield on _PARAM0_ to _PARAM2_ seconds":"\u5C06_PARAM0_\u7684\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\u66F4\u6539\u4E3A_PARAM2_\u79D2","Renew shield duration to it's full value.":"\u5C06\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\u6062\u590D\u5230\u5B8C\u6574\u503C\u3002","Renew shield duration":"\u6062\u590D\u62A4\u76FE\u6301\u7EED\u65F6\u95F4","Renew the shield duration on _PARAM0_":"\u6062\u590D_PARAM0_\u7684\u62A4\u76FE\u6301\u7EED\u65F6\u95F4","Activate the shield by setting the shield points and renewing the shield duration (optional).":"\u901A\u8FC7\u8BBE\u7F6E\u62A4\u76FE\u70B9\u6570\u5E76\u66F4\u65B0\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\uFF08\u53EF\u9009\uFF09\u6765\u6FC0\u6D3B\u62A4\u76FE\u3002","Activate shield":"\u6FC0\u6D3B\u62A4\u76FE","Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)":"\u7528_PARAM2_\u70B9\u6FC0\u6D3B_PARAM0_\u4E0A\u7684\u62A4\u76FE\uFF08\u66F4\u65B0\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\uFF1A_PARAM3_\uFF09","Enable (or disable) blocking excess damage when shield breaks.":"\u5F53\u62A4\u76FE\u7834\u788E\u65F6\u963B\u6B62\u591A\u4F59\u7684\u4F24\u5BB3\uFF08\u542F\u7528\u6216\u7981\u7528\uFF09\u3002","Block excess damage when shield breaks":"\u62A4\u76FE\u7834\u788E\u65F6\u963B\u6B62\u591A\u4F59\u7684\u4F24\u5BB3","Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_":"\u5F53\u62A4\u76FE\u7834\u788E\u65F6\uFF0C_PARAM0_\u53EF\u4EE5\u963B\u6B62\u591A\u4F59\u7684\u4F24\u5BB3\uFF1A_PARAM2_","Block excess damage":"\u963B\u6B62\u591A\u4F59\u7684\u4F24\u5BB3","Check if the shield was just damaged previously in the events.":"\u68C0\u67E5\u4E8B\u4EF6\u4E2D\u62A4\u76FE\u662F\u5426\u521A\u521A\u53D7\u5230\u4F24\u5BB3\u3002","Is shield just damaged":"\u62A4\u76FE\u662F\u5426\u521A\u521A\u53D7\u5230\u4F24\u5BB3","Shield on _PARAM0_ has just been damaged":"_PARAM0_\u7684\u62A4\u76FE\u521A\u521A\u53D7\u5230\u4E86\u4F24\u5BB3","Check if incoming damage was just dodged.":"\u68C0\u67E5\u662F\u5426\u521A\u521A\u8EB2\u907F\u4E86\u5165\u4FB5\u7684\u4F24\u5BB3\u3002","Damage was just dodged":"\u4F24\u5BB3\u521A\u521A\u8EB2\u907F","_PARAM0_ just dodged incoming damage":"_PARAM0_\u521A\u521A\u8EB2\u907F\u4E86\u6765\u88AD\u7684\u4F24\u5BB3","Check if the shield is active (based on shield points and duration).":"\u68C0\u67E5\u62A4\u76FE\u662F\u5426\u5904\u4E8E\u6D3B\u52A8\u72B6\u6001\uFF08\u6839\u636E\u62A4\u76FE\u70B9\u6570\u548C\u6301\u7EED\u65F6\u95F4\uFF09\u3002","Is shield active":"\u62A4\u76FE\u662F\u5426\u6FC0\u6D3B","Shield on _PARAM0_ is active":"\u62A4\u76FE\u5728_PARAM0_\u5DF2\u6FC0\u6D3B","the time before the shield duration ends (seconds).":"\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\u7ED3\u675F\u524D\u7684\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","Time before shield duration ends":"\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\u7ED3\u675F\u524D\u7684\u65F6\u95F4","the time before the shield duration end":"\u62A4\u76FE\u6301\u7EED\u65F6\u95F4\u7ED3\u675F\u524D\u7684\u65F6\u95F4","the shield damage taken from most recent hit.":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u62A4\u76FE\u4F24\u5BB3\u3002","Shield damage taken from most recent hit":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u62A4\u76FE\u4F24\u5BB3","the shield damage taken from most recent hit":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u62A4\u76FE\u4F24\u5BB3","the health points gained from previous heal.":"\u4E0A\u4E00\u6B21\u6CBB\u7597\u83B7\u5F97\u7684\u751F\u547D\u503C\u3002","Health points gained from previous heal":"\u4E0A\u4E00\u6B21\u6CBB\u7597\u83B7\u5F97\u7684\u751F\u547D\u503C","the health points gained from previous heal":"\u4E0A\u4E00\u6B21\u6CBB\u7597\u83B7\u5F97\u7684\u751F\u547D\u503C","Hexagonal 2D grid":"\u516D\u89D2\u5F62 2D \u7F51\u683C","Snap objects to an hexagonal grid.":"\u5C06\u5BF9\u8C61\u6355\u6349\u5230\u516D\u89D2\u5F62\u7F51\u683C\u3002","Snap object to a virtual pointy topped hexagonal grid (this is not the grid used in the editor).":"\u5C06\u5BF9\u8C61\u6355\u6349\u5230\u865A\u62DF\u5C16\u89D2\u9876\u90E8\u7684\u516D\u89D2\u7F51\u683C\u4E0A\uFF08\u8FD9\u4E0D\u662F\u7F16\u8F91\u5668\u4E2D\u4F7F\u7528\u7684\u7F51\u683C\uFF09\u3002","Snap objects to a virtual pointy topped hexagonal grid":"\u5C06\u5BF9\u8C61\u6355\u6349\u5230\u865A\u62DF\u5C16\u89D2\u9876\u90E8\u7684\u516D\u89D2\u7F51\u683C","Snap _PARAM1_ to a virtual pointy topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"\u4F7F\u7528\u5BBD\u5EA6_PARAM2_px\uFF0C\u9AD8\u5EA6_PARAM3_px\u548C\u504F\u79FB\u4F4D\u7F6E\uFF08PARAM4\uFF1BPARAM5\uFF09\u5C06_PARAM1\u6355\u6349\u5230\u865A\u62DF\u5C16\u89D2\u9876\u90E8\u7684\u516D\u89D2\u7F51\u683C\u3002","Objects to snap to the virtual grid":"\u8981\u6355\u6349\u5230\u865A\u62DF\u7F51\u683C\u7684\u5BF9\u8C61","Width of a cell of the virtual grid (in pixels)":"\u865A\u62DF\u7F51\u683C\u7684\u5355\u5143\u683C\u5BBD\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","Height of a cell of the virtual grid (in pixels)":"\u865A\u62DF\u7F51\u683C\u7684\u5355\u5143\u683C\u9AD8\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","The actual row height will be 3/4 of this.":"\u5B9E\u9645\u884C\u9AD8\u4E3A\u8FD9\u4E2A\u503C\u76843/4\u3002","Offset on the X axis of the virtual grid (in pixels)":"\u865A\u62DF\u7F51\u683CX\u8F74\u4E0A\u7684\u504F\u79FB\u91CF\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","Offset on the Y axis of the virtual grid (in pixels)":"\u865A\u62DF\u7F51\u683CY\u8F74\u4E0A\u7684\u504F\u79FB\u91CF\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","Odd rows are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"\u5947\u6570\u884C\u4ECE\u534A\u4E2A\u5355\u5143\u683C\u5904\u504F\u79FB\uFF0C\u4F7F\u7528\u201CCellHeight * 3/4\u201D\u504F\u79FB\u53EF\u4F7F\u5176\u53E6\u4E00\u79CD\u65B9\u5F0F\u3002","Snap object to a virtual flat topped hexagonal grid (this is not the grid used in the editor).":"\u5C06\u5BF9\u8C61\u5BF9\u9F50\u5230\u865A\u62DF\u7684\u5E73\u9876\u516D\u8FB9\u5F62\u7F51\u683C\uFF08\u8FD9\u4E0D\u662F\u7F16\u8F91\u5668\u4E2D\u4F7F\u7528\u7684\u7F51\u683C\uFF09\u3002","Snap objects to a virtual flat topped hexagonal grid":"\u5C06\u5BF9\u8C61\u5BF9\u9F50\u5230\u865A\u62DF\u7684\u5E73\u9876\u516D\u8FB9\u5F62\u7F51\u683C","Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","The actual column width will be 3/4 of this.":"\u5B9E\u9645\u5217\u5BBD\u5C06\u662F\u8BE5\u503C\u76843/4\u3002","Odd columns are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"\u5947\u6570\u5217\u4ECE\u534A\u4E2A\u5355\u4F4D\u683C\u79FB\u52A8\uFF0C\u4F7F\u7528\"CellHeight * 3/4\"\u504F\u79FB\u6765\u8FDB\u884C\u53E6\u4E00\u79CD\u65B9\u5F0F\u3002","Snap object to a virtual bubble grid (this is not the grid used in the editor).":"\u5C06\u5BF9\u8C61\u5BF9\u9F50\u5230\u865A\u62DF\u6C14\u6CE1\u7F51\u683C\uFF08\u8FD9\u4E0D\u662F\u7F16\u8F91\u5668\u4E2D\u4F7F\u7528\u7684\u7F51\u683C\uFF09\u3002","Snap objects to a virtual bubble grid":"\u5C06\u5BF9\u8C61\u5BF9\u9F50\u5230\u865A\u62DF\u6C14\u6CE1\u7F51\u683C","Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","The actual row height will be 7/8 of this.":"\u5B9E\u9645\u884C\u9AD8\u5C06\u662F\u8BE5\u503C\u76847/8\u3002","Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way":"Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way","Homing projectile":"\u5BFB\u7684\u5F39\u9053","Make a projectile object move towards a target object.":"\u4F7F\u4E00\u4E2A\u5F39\u9053\u5BF9\u8C61\u671D\u7740\u76EE\u6807\u5BF9\u8C61\u79FB\u52A8\u3002","Lock projectile object to target object. (This is required for \"Move projectile towards target\").":"Lock projectile object to target object. (This is required for \"Move projectile towards target\")\u3002","Lock projectile to target":"\u5C06\u629B\u5C04\u7269\u9501\u5B9A\u5230\u76EE\u6807","Lock projectile _PARAM1_ to target _PARAM2_":"Lock projectile _PARAM1_ to target _PARAM2_","Projectile object":"\u629B\u5C04\u7269\u5BF9\u8C61","Move physics projectile towards the object that it has been locked to. This action must be run every frame.":"\u5C06\u7269\u7406\u629B\u5C04\u7269\u671D\u5411\u6240\u9501\u5B9A\u7684\u5BF9\u8C61\u79FB\u52A8\u3002\u5FC5\u987B\u6BCF\u4E00\u5E27\u8FD0\u884C\u6B64\u52A8\u4F5C\u3002","Move physics projectile towards target":"\u5C06\u7269\u7406\u629B\u5C04\u7269\u671D\u5411\u76EE\u6807\u79FB\u52A8","Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_","Physics Behavior":"\u7269\u7406\u884C\u4E3A","Initial speed (pixels per second)":"\u521D\u59CB\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09","Acceleration (speed increase per second)":"\u52A0\u901F\u5EA6\uFF08\u6BCF\u79D2\u901F\u5EA6\u589E\u52A0\uFF09","Max lifetime (seconds)":"\u6700\u5927\u751F\u5B58\u65F6\u95F4\uFF08\u79D2\uFF09","Projectile will be deleted after this value is reached.":"\u8FBE\u5230\u8BE5\u503C\u540E\uFF0C\u629B\u5C04\u7269\u5C06\u88AB\u5220\u9664\u3002","Delete Projectile if it collides with Target:":"\u5982\u679C\u4E0E\u76EE\u6807\u78B0\u649E\uFF0C\u5219\u5220\u9664\u629B\u5C04\u7269\uFF1A","Move projectile towards the object that it has been locked to. This action must be run every frame.":"\u5C06\u5BF9\u8C61\u5BF9\u9F50\u5230\u6240\u9501\u5B9A\u7684\u5BF9\u8C61\u3002\u5FC5\u987B\u6BCF\u4E00\u5E27\u8FD0\u884C\u6B64\u52A8\u4F5C\u3002","Move projectile towards target":"\u5C06\u5BF9\u8C61\u5BF9\u9F50\u5230\u76EE\u6807","Move projectile _PARAM1_ towards target _PARAM2_. Rotate speed: _PARAM3_ Initial speed: _PARAM4_ Acceleration: _PARAM5_ Max speed: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"\u5C06\u5F39\u4E38 _PARAM1_ \u79FB\u5411\u76EE\u6807 _PARAM2_\u3002 \u65CB\u8F6C\u901F\u5EA6\uFF1A_PARAM3_ \u521D\u59CB\u901F\u5EA6\uFF1A_PARAM4_ \u52A0\u901F\u5EA6\uFF1A_PARAM5_ \u6700\u5927\u901F\u5EA6\uFF1A_PARAM6_ \u6700\u5927\u751F\u5B58\u65F6\u95F4\uFF1A_PARAM7_ \u78B0\u649E\u65F6\u5220\u9664\uFF1A_PARAM8_","Idle object tracker":"\u7A7A\u95F2\u5BF9\u8C61\u8DDF\u8E2A\u5668","Check if an object has not moved (with some, customizable, tolerance) for a certain duration (1 second by default).":"\u68C0\u67E5\u5BF9\u8C61\u5728\u67D0\u6BB5\u65F6\u95F4\u5185\uFF08\u9ED8\u8BA4\u4E3A1\u79D2\uFF09\u662F\u5426\u6CA1\u6709\u79FB\u52A8\uFF08\u5E26\u6709\u4E00\u4E9B\u53EF\u5B9A\u5236\u7684\u5BB9\u5DEE\uFF09\u3002","Check if an object has not moved (with some tolerance, 20 pixels by default) for a certain duration (1 second by default).":"\u68C0\u67E5\u5BF9\u8C61\u5728\u4E00\u5B9A\u65F6\u95F4\u5185\uFF08\u9ED8\u8BA4\u4E3A1\u79D2\uFF09\u662F\u5426\u6CA1\u6709\u79FB\u52A8\uFF08\u9ED8\u8BA420\u50CF\u7D20\u5BB9\u5DEE\uFF09\u3002","Idle tracker":"\u7A7A\u95F2\u8FFD\u8E2A\u5668","Time, in seconds, before considering the object as idle":"\u5728\u5C06\u5BF9\u8C61\u89C6\u4E3A\u7A7A\u95F2\u4E4B\u524D\u7684\u79D2\u6570","Distance, in pixels, allowed for the object to travel and still be considered idle":"\u5141\u8BB8\u5BF9\u8C61\u79FB\u52A8\u7684\u50CF\u7D20\u8DDD\u79BB\uFF0C\u4EE5\u4FBF\u4ECD\u7136\u88AB\u89C6\u4E3A\u7A7A\u95F2","Check if the object has just moved from its last position (using the tolerance configured in the behavior).":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u521A\u521A\u4ECE\u5176\u4E0A\u4E00\u4E2A\u4F4D\u7F6E\u79FB\u52A8\uFF08\u4F7F\u7528\u884C\u4E3A\u4E2D\u914D\u7F6E\u7684\u5BB9\u5DEE\uFF09\u3002","Has just moved from last position":"\u521A\u521A\u4ECE\u4E0A\u4E00\u4E2A\u4F4D\u7F6E\u79FB\u52A8","_PARAM0_ has moved from its last position":"_PARAM0_\u4ECE\u5176\u4E0A\u4E00\u4E2A\u4F4D\u7F6E\u79FB\u52A8","Check if the object is idle: it has not moved from its last position (or within the tolerance) for the time configured in the behavior.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u7A7A\u95F2\uFF1A\u5B83\u6CA1\u6709\u4ECE\u5176\u4E0A\u4E00\u4E2A\u4F4D\u7F6E\uFF08\u6216\u5728\u5BB9\u5DEE\u5185\uFF09\u79FB\u52A8\u5230\u884C\u4E3A\u4E2D\u914D\u7F6E\u7684\u65F6\u95F4\u5185\u3002","Is idle (since enough time)":"\u7A7A\u95F2\uFF08\u65F6\u95F4\u5DF2\u8DB3\u591F\uFF09","Iframe":"Iframe","Create or delete an iframe to embed websites.":"\u521B\u5EFA\u6216\u5220\u9664\u5D4C\u5165\u7F51\u7AD9\u7684iframe\u3002","Create a new Iframe to embed a website inside the game.":"\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684iFrame\u4EE5\u5728\u6E38\u620F\u4E2D\u5D4C\u5165\u7F51\u7AD9\u3002","Create an Iframe":"\u521B\u5EFA\u4E00\u4E2AiFrame","Create Iframe _PARAM1_ at position _PARAM5_:_PARAM6_, width: _PARAM3_, height: _PARAM4_, url: _PARAM2_":"\u5728\u4F4D\u7F6E_PARAM5_:_PARAM6_\u521B\u5EFA\u4E00\u4E2A\u540D\u4E3A_PARAM1_\u7684iFrame\uFF0C\u5BBD\u5EA6\uFF1A_PARAM3_\uFF0C\u9AD8\u5EA6\uFF1A_PARAM4_\uFF0C\u7F51\u5740\uFF1A_PARAM2_","Name (DOM id)":"\u540D\u79F0\uFF08DOM id\uFF09","Width":"\u5BBD\u5EA6","Height":"\u9AD8\u5EA6","Show scrollbar":"\u663E\u793A\u6EDA\u52A8\u6761","Show border":"\u663E\u793A\u8FB9\u6846","Extra CSS styles (optional)":"\u989D\u5916\u7684CSS\u6837\u5F0F\uFF08\u53EF\u9009\uFF09","e.g: `\"border: 10px #f00 solid;\"`":"\u4F8B\u5982\uFF1A`\"border: 10px #f00 solid;\"`","Delete the specified Iframe.":"\u5220\u9664\u6307\u5B9A\u7684iFrame\u3002","Delete an Iframe":"\u5220\u9664\u4E00\u4E2AiFrame","Delete Iframe _PARAM1_":"\u5220\u9664iFrame _PARAM1_","Mobile In-App Purchase (experimental)":"\u79FB\u52A8\u5E94\u7528\u5185\u8D2D\u4E70\uFF08\u5B9E\u9A8C\u6027\uFF09","Add products to buy directly in your game (\"In-App Purchase\"), for games published on Android or iOS.":"\u5C06\u4EA7\u54C1\u76F4\u63A5\u6DFB\u52A0\u5230\u60A8\u7684\u6E38\u620F\u4E2D\u8FDB\u884C\u8D2D\u4E70\uFF08\"\u5E94\u7528\u5185\u8D2D\u4E70\"\uFF09\uFF0C\u9002\u7528\u4E8E\u5728Android\u6216iOS\u4E0A\u53D1\u5E03\u7684\u6E38\u620F\u3002","Ads":"\u5E7F\u544A","Register a Product of your store. This is required to do for all products you want to display or order from the app. \nMake sure you register them all and finalize registration before ordering a product.":"\u6CE8\u518C\u5546\u5E97\u4E2D\u7684\u4EA7\u54C1\u3002\u8FD9\u662F\u4F60\u5E0C\u671B\u4ECE\u5E94\u7528\u4E2D\u663E\u793A\u6216\u8BA2\u8D2D\u7684\u6240\u6709\u4EA7\u54C1\u90FD\u9700\u8981\u505A\u7684\u4E8B\u3002\n\u786E\u4FDD\u4F60\u6CE8\u518C\u4E86\u6240\u6709\u8FD9\u4E9B\u4EA7\u54C1\uFF0C\u5E76\u5728\u8BA2\u8D2D\u4EA7\u54C1\u524D\u5B8C\u6210\u6CE8\u518C\u3002","Register a Product":"\u6CE8\u518C\u4EA7\u54C1","Register product _PARAM1_ as a _PARAM2_ (platform: _PARAM3_)":"\u5C06\u4EA7\u54C1_PARAM1_\uFF08\u5E73\u53F0\uFF1A_PARAM3_\uFF09\u6CE8\u518C\u4E3A\u4EA7\u54C1_PARAM2_","The internal ID of the product":"\u8BE5\u4EA7\u54C1\u7684\u5185\u90E8ID","Use the ID of the product you entered on the IAP provider (Google play, Apple store...)":"\u4F7F\u7528IAP\u63D0\u4F9B\u5546\uFF08Google play\u3001Apple store\u2026\uFF09\u4E0A\u8F93\u5165\u7684\u4EA7\u54C1ID","The type of product":"\u4EA7\u54C1\u7C7B\u578B","Which platform you're registering the product to":"\u8981\u5C06\u4EA7\u54C1\u6CE8\u518C\u5230\u7684\u5E73\u53F0","Finalize store registration. Do this after registering every product and before ordering or getting information about a product.":"\u5B8C\u6210\u5546\u5E97\u6CE8\u518C\u3002\u5728\u8BA2\u8D2D\u6216\u83B7\u53D6\u6709\u5173\u4EA7\u54C1\u7684\u4FE1\u606F\u4E4B\u524D\uFF0C\u786E\u4FDD\u5728\u6CE8\u518C\u6BCF\u4E2A\u4EA7\u54C1\u4E4B\u540E\u6267\u884C\u6B64\u64CD\u4F5C\u3002","Finalize registration":"\u5B8C\u6210\u6CE8\u518C","Finalize store registration":"\u5B8C\u6210\u5546\u5E97\u6CE8\u518C","Opens the purchase menu to let the user buy a product.\nEnsure you use the condition to check if the store is ready and that the product ID has been registered and finalized before calling this action.":"\u6253\u5F00\u8D2D\u4E70\u83DC\u5355\uFF0C\u8BA9\u7528\u6237\u8D2D\u4E70\u4EA7\u54C1\u3002\n\u786E\u4FDD\u4F7F\u7528\u6761\u4EF6\u68C0\u67E5\u5546\u5E97\u662F\u5426\u51C6\u5907\u5C31\u7EEA\uFF0C\u5E76\u4E14\u4EA7\u54C1ID\u5DF2\u6CE8\u518C\u5E76\u5728\u8C03\u7528\u6B64\u64CD\u4F5C\u4E4B\u524D\u8FDB\u884C\u4E86\u6700\u7EC8\u6CE8\u518C\u3002","Order a product":"\u8BA2\u8D2D\u4EA7\u54C1","Order product _PARAM1_":"\u8BA2\u8D2D\u4EA7\u54C1_PARAM1_","The id of the product to buy":"\u8D2D\u4E70\u4EA7\u54C1\u7684\u7F16\u53F7","Get all the data about a product from the IAP provider and store it into a structure variable.\nCheck [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) for the exhaustive list of what can be retrieved from the product.":"\u83B7\u53D6\u6765\u81EAIAP\u63D0\u4F9B\u5546\u7684\u4EA7\u54C1\u7684\u6240\u6709\u6570\u636E\uFF0C\u5E76\u5C06\u5176\u5B58\u50A8\u5230\u4E00\u4E2A\u7ED3\u6784\u53D8\u91CF\u4E2D\u3002\n\u67E5\u770B[\u6B64\u9875\u9762](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md)\u4EE5\u83B7\u53D6\u4ECE\u4EA7\u54C1\u4E2D\u68C0\u7D22\u7684\u8BE6\u5C3D\u6E05\u5355\u3002","Load product data in a variable":"\u5728\u53D8\u91CF\u4E2D\u52A0\u8F7D\u4EA7\u54C1\u6570\u636E","Store data of _PARAM1_ in scene variable named _PARAM2_":"\u5C06_PARAM1_\u7684\u6570\u636E\u5B58\u50A8\u5728\u573A\u666F\u53D8\u91CF_PARAM2_\u4E2D","The id or alias of the product to get info about":"\u83B7\u53D6\u6709\u5173\u4EA7\u54C1\u4FE1\u606F\u7684ID\u6216\u522B\u540D","The name of the scene variable to store the product data in":"\u8981\u5B58\u50A8\u4EA7\u54C1\u6570\u636E\u7684\u573A\u666F\u53D8\u91CF\u7684\u540D\u79F0","The variable will be a structure, see [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) to know what child variables are accessible.":"\u53D8\u91CF\u5C06\u662F\u4E00\u4E2A\u7ED3\u6784\uFF0C\u8BF7\u67E5\u770B[\u6B64\u9875\u9762](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md)\u4EE5\u4E86\u89E3\u53EF\u8BBF\u95EE\u7684\u5B50\u53D8\u91CF\u3002","When an event is triggered for a product (approved or finished), this sets a scene variable to true. \nYou can then compare the value of the variable in a condition, and have actions launched to react to the changes.\nUse with Trigger Once to avoid registering multiple watchers unnecessarily.\nApproved is triggered after the purchase is complete.\nFinished is triggered after you have marked the purchased as delivered (less useful).":"\u5F53\u4EA7\u54C1\u4E8B\u4EF6\u89E6\u53D1\u65F6\uFF08\u5DF2\u6279\u51C6\u6216\u5DF2\u5B8C\u6210\uFF09\uFF0C\u5C06\u4E00\u4E2A\u573A\u666F\u53D8\u91CF\u8BBE\u7F6E\u4E3Atrue\u3002 \n\u7136\u540E\u53EF\u4EE5\u5728\u6761\u4EF6\u4E2D\u6BD4\u8F83\u53D8\u91CF\u7684\u503C\uFF0C\u5E76\u542F\u52A8\u52A8\u4F5C\u4EE5\u5BF9\u53D8\u5316\u505A\u51FA\u53CD\u5E94\u3002\n\u4E0E\u89E6\u53D1\u4E00\u6B21\u4E00\u6837\u4F7F\u7528\uFF0C\u4EE5\u907F\u514D\u4E0D\u5FC5\u8981\u5730\u6CE8\u518C\u591A\u4E2A\u89C2\u5BDF\u8005\u3002\n\u5DF2\u6279\u51C6\u662F\u5728\u8D2D\u4E70\u5B8C\u6210\u540E\u89E6\u53D1\u7684\u3002\n\u5DF2\u5B8C\u6210\u662F\u5728\u60A8\u6807\u8BB0\u5DF2\u4EA4\u4ED8\u7684\u8D2D\u4E70\u540E\u89E6\u53D1\u7684\uFF08\u4E0D\u90A3\u4E48\u6709\u7528\uFF09\u3002","Update a variable when a product event is triggered":"\u5728\u4EA7\u54C1\u4E8B\u4EF6\u89E6\u53D1\u65F6\u66F4\u65B0\u4E00\u4E2A\u53D8\u91CF","Watch the event _PARAM3_ for product _PARAM1_ and set scene variable named _PARAM2_ to true when it happens":"\u89C2\u5BDF\u4EA7\u54C1_PARAM1_\u7684\u4E8B\u4EF6_PARAM3_\uFF0C\u5E76\u5728\u53D1\u751F\u65F6\u5C06\u573A\u666F\u53D8\u91CF\u547D\u540D_PARAM2_\u8BBE\u7F6E\u4E3Atrue","The id of the product to watch":"\u8981\u89C2\u770B\u7684\u4EA7\u54C1\u7684ID","The name of the scene variable to set to \"true\" when the event happens":"\u5F53\u4E8B\u4EF6\u53D1\u751F\u65F6\u5C06\u573A\u666F\u53D8\u91CF\u7684\u540D\u79F0_PARAM2_\u8BBE\u7F6E\u4E3A\"true\"","The event to listen to":"\u8981\u76D1\u542C\u7684\u4E8B\u4EF6","Mark a purchase as delivered, after you delivered the rewards the user has paid for and saved it somewhere. If you don't do so, the user will get the money refunded as the purchase will be considered as incomplete, with the rewards not given.":"\u5C06\u8D2D\u4E70\u6807\u8BB0\u4E3A\u5DF2\u4EA4\u4ED8\uFF0C\u4E4B\u540E\u60A8\u4EA4\u4ED8\u4E86\u7528\u6237\u5DF2\u652F\u4ED8\u7684\u5956\u52B1\u5E76\u5C06\u5176\u4FDD\u5B58\u5728\u67D0\u5904\u3002 \u5982\u679C\u60A8\u4E0D\u8FD9\u6837\u505A\uFF0C\u7528\u6237\u5C06\u4F1A\u88AB\u9000\u6B3E\uFF0C\u56E0\u4E3A\u8D2D\u4E70\u5C06\u88AB\u89C6\u4E3A\u4E0D\u5B8C\u6574\uFF0C\u5956\u52B1\u672A\u53D1\u653E\u3002","Finalize a purchase":"\u5B8C\u6210\u8D2D\u4E70","Mark purchase of _PARAM1_ as delivered":"\u6807\u8BB0_PARAM1_\u7684\u8D2D\u4E70\u4E3A\u5DF2\u4EA4\u4ED8","The id or alias of the product to finalize":"\u8981\u5B8C\u6210\u7684\u4EA7\u54C1\u7684ID\u6216\u522B\u540D","Triggers after finalizing the registration. Products can then be retrieved and purchased (you can get data of a product like the price, you can use the action to order a product...).":"\u5728\u6CE8\u518C\u5B8C\u6210\u540E\u89E6\u53D1\u3002 \u4E4B\u540E\u53EF\u4EE5\u68C0\u7D22\u548C\u8D2D\u4E70\u4EA7\u54C1\uFF08\u53EF\u4EE5\u83B7\u53D6\u4EA7\u54C1\u6570\u636E\uFF0C\u5982\u4EF7\u683C\uFF0C\u60A8\u53EF\u4EE5\u4F7F\u7528\u8BE5\u64CD\u4F5C\u8BA2\u8D2D\u4EA7\u54C1...\uFF09\u3002","Store is ready":"\u5546\u5E97\u5DF2\u51C6\u5907\u5C31\u7EEA","Input Validation":"\u8F93\u5165\u9A8C\u8BC1","Conditions and expressions to check, sanitize and manipulate strings.":"\u68C0\u67E5\u3001\u6E05\u7406\u548C\u64CD\u4F5C\u5B57\u7B26\u4E32\u7684\u6761\u4EF6\u548C\u8868\u8FBE\u5F0F\u3002","Check if the string is a valid phone number.":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684\u7535\u8BDD\u53F7\u7801\u3002","Check if a string is a valid phone number":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684\u7535\u8BDD\u53F7\u7801","_PARAM1_ is a valid phone number":"_PARAM1_\u662F\u4E00\u4E2A\u6709\u6548\u7684\u7535\u8BDD\u53F7\u7801","Phone number":"\u7535\u8BDD\u53F7\u7801","Check if the string is a valid URL.":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684URL\u3002","Check if a string is a valid URL":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u4E3A\u6709\u6548\u7684URL","_PARAM1_ is a valid URL":"_PARAM1_\u662F\u6709\u6548\u7684URL","Check if the string is a valid email.":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u4E3A\u6709\u6548\u7684\u7535\u5B50\u90AE\u4EF6\u3002","Check if a string is a valid email":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u4E3A\u6709\u6548\u7684\u7535\u5B50\u90AE\u4EF6","_PARAM1_ is a valid email":"_PARAM1_\u662F\u6709\u6548\u7684\u7535\u5B50\u90AE\u4EF6","Email":"\u7535\u5B50\u90AE\u4EF6","Check if the string represents a number (potentially with a minus sign and potentially with a decimal point).":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u8868\u793A\u6570\u5B57\uFF08\u53EF\u80FD\u5E26\u8D1F\u53F7\uFF0C\u53EF\u80FD\u5E26\u5C0F\u6570\u70B9\uFF09\u3002","Check if a string represents a number":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u8868\u793A\u6570\u5B57","_PARAM1_ represents a number":"_PARAM1_\u8868\u793A\u4E00\u4E2A\u6570\u5B57","Number":"\u6570\u5B57","Check if the string has only latin alphabet letters.":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u53EA\u5305\u542B\u62C9\u4E01\u5B57\u6BCD\u3002","Check if a string has only latin alphabet letters":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u53EA\u5305\u542B\u62C9\u4E01\u5B57\u6BCD","_PARAM1_ has only latin alphabet letters":"_PARAM1_\u53EA\u5305\u542B\u62C9\u4E01\u5B57\u6BCD","Letters":"\u5B57\u6BCD","Returns the string without the first line.":"\u8FD4\u56DE\u6CA1\u6709\u7B2C\u4E00\u884C\u7684\u5B57\u7B26\u4E32\u3002","Remove the first line":"\u79FB\u9664\u7B2C\u4E00\u884C","String to remove the first line from":"\u8981\u4ECE\u4E2D\u5220\u9664\u7B2C\u4E00\u884C\u7684\u5B57\u7B26\u4E32","Count the number of lines in a string.":"\u8BA1\u7B97\u5B57\u7B26\u4E32\u4E2D\u7684\u884C\u6570\u3002","Count lines":"\u8BA1\u7B97\u884C\u6570","The text to count lines from":"\u8BA1\u7B97\u884C\u6570\u7684\u6587\u672C","Replaces every new line character with a space.":"\u7528\u7A7A\u683C\u66FF\u6362\u6BCF\u4E2A\u65B0\u884C\u5B57\u7B26\u3002","Replace new lines by a space":"\u7528\u7A7A\u683C\u66FF\u6362\u65B0\u884C","The text to remove new lines from":"\u8981\u4ECE\u5176\u4E2D\u5220\u9664\u6362\u884C\u7B26\u7684\u6587\u672C","Remove any non-numerical and non A-Z characters.":"\u79FB\u9664\u4EFB\u4F55\u975E\u6570\u5B57\u548C\u975EA-Z\u5B57\u7B26\u3002","Remove any non-numerical and non A-Z characters":"\u79FB\u9664\u4EFB\u4F55\u975E\u6570\u5B57\u548C\u975EA-Z\u5B57\u7B26","The text to sanitize":"\u8981\u8FDB\u884C\u6E05\u7406\u7684\u6587\u672C","Internet Connectivity":"Internet Connectivity","Checks if the device running the game is connected to the internet.":"\u68C0\u67E5\u8FD0\u884C\u6E38\u620F\u7684\u8BBE\u5907\u662F\u5426\u8FDE\u63A5\u5230\u4E92\u8054\u7F51\u3002","Checks if the device is connected to the internet.":"\u68C0\u67E5\u8BBE\u5907\u662F\u5426\u8FDE\u63A5\u5230\u4E92\u8054\u7F51\u3002","Is the device online?":"\u8BBE\u5907\u662F\u5426\u5728\u7EBF\uFF1F","The device is online":"\u8BBE\u5907\u5728\u7EBF","Simple inventories":"\u7B80\u5355\u5E93\u5B58","Manage inventory items.":"\u7BA1\u7406\u5E93\u5B58\u9879\u76EE\u3002","Add an item in an inventory.":"\u5728\u5E93\u5B58\u4E2D\u6DFB\u52A0\u4E00\u9879\u3002","Add an item":"\u6DFB\u52A0\u4E00\u9879","Add a _PARAM2_ to inventory _PARAM1_":"\u5411\u5E93\u5B58_PARAM1_\u6DFB\u52A0_PARAM2_","Inventory name":"\u5E93\u5B58\u540D\u79F0","Item name":"\u9879\u76EE\u540D\u79F0","Remove an item from an inventory.":"\u4ECE\u5E93\u5B58\u4E2D\u5220\u9664\u4E00\u9879\u3002","Remove an item":"\u5220\u9664\u4E00\u9879","Remove a _PARAM2_ from inventory _PARAM1_":"\u4ECE\u5E93\u5B58_PARAM1_\u4E2D\u5220\u9664_PARAM2_","the number of an item in an inventory.":"\u5E93\u5B58\u4E2D\u7269\u54C1\u7684\u6570\u91CF\u3002","Item count":"\u7269\u54C1\u8BA1\u6570","the count of _PARAM2_ in _PARAM1_":"\u5728_PARAM1_\u4E2D\u7684_PARAM2_\u6570\u91CF","Check if at least one of the specified items is in the inventory.":"\u68C0\u67E5\u5B58\u8D27\u4E2D\u662F\u5426\u81F3\u5C11\u6709\u4E00\u4E2A\u6307\u5B9A\u7269\u54C1\u3002","Has an item":"\u6709\u4E00\u4E2A\u7269\u54C1","Inventory _PARAM1_ contains a _PARAM2_":"\u5E93\u5B58_PARAM1_\u4E2D\u5305\u542B_PARAM2_","the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"\u53EF\u4EE5\u6DFB\u52A0\u81F3\u5E93\u5B58\u4E2D\u7684\u6307\u5B9A\u7269\u54C1\u7684\u6700\u5927\u6570\u91CF\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u6BCF\u79CD\u7269\u54C1\u7684\u5141\u8BB8\u6570\u91CF\u4E0D\u53D7\u9650\u5236\u3002","Item capacity":"\u7269\u54C1\u5BB9\u91CF","_PARAM2_ capacity in inventory _PARAM1_":"_PARAM1_\u4E2D\u7684_PARAM2_\u5BB9\u91CF","Check if a limited amount of an object is allowed by the inventory. Item capacity is unlimited by default.":"\u68C0\u67E5\u5E93\u5B58\u4E2D\u662F\u5426\u5141\u8BB8\u5BF9\u8C61\u7684\u6709\u9650\u6570\u91CF\u3002\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0C\u7269\u54C1\u5BB9\u91CF\u4E0D\u53D7\u9650\u5236\u3002","Limited item capacity":"\u6709\u9650\u7684\u7269\u54C1\u5BB9\u91CF","Allow a limited count of _PARAM2_ in inventory _PARAM1_":"\u5141\u8BB8\u5728\u5E93\u5B58_PARAM1_\u4E2D\u6709\u9650\u6570\u91CF\u7684_PARAM2_: _PARAM3_","Allow a limited amount of an object to be in an inventory. Item capacity is unlimited by default.":"\u5141\u8BB8\u5BF9\u8C61\u7684\u6709\u9650\u6570\u91CF\u5B58\u5728\u4E8E\u5E93\u5B58\u4E2D\u3002\u7269\u54C1\u5BB9\u91CF\u9ED8\u8BA4\u4E3A\u65E0\u9650\u3002","Limit item capacity":"\u9650\u5236\u7269\u54C1\u5BB9\u91CF","Allow a limited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"\u5728\u5E93\u5B58_PARAM1_\u4E2D\u6709\u9650\u6570\u91CF\u7684_PARAM2_\uFF1A_PARAM3_","Limit the item capacity":"\u9650\u5236\u7269\u54C1\u5BB9\u91CF","Check if an item has reached its maximum number allowed in the inventory.":"\u68C0\u67E5\u7269\u54C1\u662F\u5426\u5DF2\u8FBE\u5230\u5728\u5E93\u5B58\u4E2D\u5141\u8BB8\u7684\u6700\u5927\u6570\u91CF\u3002","Item full":"\u7269\u54C1\u5DF2\u6EE1","Inventory _PARAM1_ is full of _PARAM2_":"\u5E93\u5B58_PARAM1_\u5DF2\u6EE1_PARAM2_","Check if an item is equipped.":"\u68C0\u67E5\u7269\u54C1\u662F\u5426\u5DF2\u88C5\u5907\u3002","Item equipped":"\u7269\u54C1\u5DF2\u88C5\u5907","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM2_\u5DF2\u88C5\u5907\u5728\u5E93\u5B58_PARAM1_\u4E2D","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"\u6807\u8BB0\u4E00\u4E2A\u7269\u54C1\u4E3A\u5DF2\u88C5\u5907\u3002\u5982\u679C\u7269\u54C1\u6570\u91CF\u4E3A0\uFF0C\u5219\u4E0D\u4F1A\u88AB\u6807\u8BB0\u4E3A\u5DF2\u88C5\u5907\u3002","Equip an item":"\u88C5\u5907\u4E00\u4E2A\u7269\u54C1","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"\u5728\u5E93\u5B58_PARAM1_\u4E2D\u5C06_PARAM2_\u8BBE\u7F6E\u4E3A\u5DF2\u88C5\u5907\uFF1A_PARAM3_","Equip":"\u88C5\u5907","Save all the items of the inventory in a scene variable, so that it can be restored later.":"\u4FDD\u5B58\u5E93\u5B58\u4E2D\u7684\u6240\u6709\u7269\u54C1\u5230\u573A\u666F\u53D8\u91CF\u4E2D\uFF0C\u4EE5\u4FBF\u7A0D\u540E\u6062\u590D\u3002","Save an inventory in a scene variable":"\u5728\u573A\u666F\u53D8\u91CF\u4E2D\u4FDD\u5B58\u5E93\u5B58","Save inventory _PARAM1_ in variable _PARAM2_":"\u5728\u53D8\u91CF_PARAM2_\u4E2D\u4FDD\u5B58\u5E93\u5B58_PARAM1_","Scene variable":"\u573A\u666F\u53D8\u91CF","Load the content of the inventory from a scene variable.":"\u4ECE\u573A\u666F\u53D8\u91CF\u4E2D\u52A0\u8F7D\u5E93\u5B58\u7684\u5185\u5BB9\u3002","Load an inventory from a scene variable":"\u4ECE\u573A\u666F\u53D8\u91CF\u4E2D\u52A0\u8F7D\u5E93\u5B58","Load inventory _PARAM1_ from variable _PARAM2_":"\u4ECE\u53D8\u91CF_PARAM2_\u52A0\u8F7D\u5E93\u5B58_PARAM1_","Object \"Is On Screen\" Detection":"\u5BF9\u8C61\u201C\u5728\u5C4F\u5E55\u4E0A\u201D\u7684\u68C0\u6D4B","This adds a condition to detect if an object is on screen based off its current layer.":"\u8FD9\u5C06\u6DFB\u52A0\u4E00\u4E2A\u6761\u4EF6\uFF0C\u6839\u636E\u5F53\u524D\u56FE\u5C42\u4E0A\u7684\u5BF9\u8C61\uFF0C\u68C0\u6D4B\u5BF9\u8C61\u662F\u5426\u5728\u5C4F\u5E55\u4E0A\u3002","This behavior provides a condition to check if the object is located within the visible portion of its layer's camera. The condition also allows for specifying padding to the virtual screen border.\nNote that object visibility, such as being hidden or 0 opacity, is not considered (but you can use those existing conditions in addition to this behavior).":"\u6B64\u884C\u4E3A\u63D0\u4F9B\u6761\u4EF6\u4EE5\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u4F4D\u4E8E\u5176\u56FE\u5C42\u76F8\u673A\u7684\u53EF\u89C1\u90E8\u5206\u5185\u3002\u6761\u4EF6\u8FD8\u5141\u8BB8\u6307\u5B9A\u865A\u62DF\u5C4F\u5E55\u8FB9\u6846\u7684\u586B\u5145\u3002\n\u8BF7\u6CE8\u610F\uFF0C\u5BF9\u8C61\u7684\u53EF\u89C1\u6027\uFF0C\u5982\u9690\u85CF\u62160\u4E0D\u900F\u660E\u5EA6\uFF0C\u4E0D\u4F1A\u88AB\u8003\u8651\uFF08\u4F46\u60A8\u53EF\u4EE5\u4F7F\u7528\u8FD9\u4E9B\u73B0\u6709\u6761\u4EF6\u4EE5\u53CA\u6B64\u884C\u4E3A\uFF09\u3002","Is on screen":"\u5728\u5C4F\u5E55\u4E0A","Checks if an object position is within the viewport of its layer.":"\u68C0\u67E5\u5BF9\u8C61\u4F4D\u7F6E\u662F\u5426\u5728\u5176\u56FE\u5C42\u7684\u89C6\u56FE\u5185\u3002","_PARAM0_ is on screen (padded by _PARAM2_ pixels)":"_PARAM0_ \u5728\u5C4F\u5E55\u4E0A\uFF08\u4EE5_PARAM2_\u50CF\u7D20\u586B\u5145\uFF09","Padding (in pixels)":"\u586B\u5145\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","Number of pixels to pad the screen border. Zero by default. A negative value goes inside the screen, a positive value go outside.":"\u50CF\u7D20\u6570\u4EE5\u586B\u5145\u5C4F\u5E55\u8FB9\u6846\u3002\u9ED8\u8BA4\u4E3A\u96F6\u3002\u8D1F\u503C\u8FDB\u5165\u5C4F\u5E55\uFF0C\u6B63\u503C\u8D85\u51FA\u3002","Konami Code":"\u80AF\u5C3C\u7C73\u4EE3\u7801","Allows to input the classic Konami Code (\"Up, Up, Down, Down, Left, Right, Left, Right, B, A\") into a scene for cheats and easter eggs.":"\u5141\u8BB8\u5728\u573A\u666F\u4E2D\u8F93\u5165\u4F20\u7EDF\u7684\u80AF\u5C3C\u7C73\u4EE3\u7801\uFF08\u201C\u4E0A\uFF0C\u4E0A\uFF0C\u4E0B\uFF0C\u4E0B\uFF0C\u5DE6\uFF0C\u53F3\uFF0C\u5DE6\uFF0C\u53F3\uFF0CB\uFF0CA\u201D\uFF09\u8FDB\u884C\u4F5C\u5F0A\u548C\u5F69\u86CB\u3002","Checks if the Konami Code is correctly inputted.":"\u68C0\u67E5 Konami Code \u662F\u5426\u88AB\u6B63\u786E\u8F93\u5165\u3002","Is Inputted":"\u5DF2\u8F93\u5165","Konami Code is inputted with _PARAM0_":"Konami Code \u7531_PARAM0_\u8F93\u5165","Language":"\u8BED\u8A00","Get the preferred language of the user, set on their browser or device.":"\u83B7\u53D6\u7528\u6237\u5728\u5176\u6D4F\u89C8\u5668\u6216\u8BBE\u5907\u4E0A\u8BBE\u7F6E\u7684\u9996\u9009\u8BED\u8A00\u3002","Returns a string representing the preferred language of the user.\nThe format represents the language first, and usually the country where it's used. For example: \"en\" (English), \"en-US\" (English as used in the United States), \"en-GB\" (United Kingdom English), \"es\" (Spanish), \"zh-CN\" (Chinese as used in China), etc.":"\u8FD4\u56DE\u8868\u793A\u7528\u6237\u9996\u9009\u8BED\u8A00\u7684\u5B57\u7B26\u4E32\u3002\n\u683C\u5F0F\u9996\u5148\u8868\u793A\u8BED\u8A00\uFF0C\u901A\u5E38\u662F\u4F7F\u7528\u7684\u56FD\u5BB6\u3002\u4F8B\u5982\uFF1A\"en\"\uFF08\u82F1\u8BED\uFF09\uFF0C\"en-US\"\uFF08\u5728\u7F8E\u56FD\u4F7F\u7528\u7684\u82F1\u8BED\uFF09\uFF0C\"en-GB\"\uFF08\u82F1\u56FD\u82F1\u8BED\uFF09\uFF0C\"es\"\uFF08\u897F\u73ED\u7259\u8BED\uFF09\uFF0C\"zh-CN\"\uFF08\u5728\u4E2D\u56FD\u4F7F\u7528\u7684\u4E2D\u6587\uFF09\u7B49\u3002","Game over dialog":"\u6E38\u620F\u7ED3\u675F\u5BF9\u8BDD\u6846","Display the score and let players choose what to do next.":"\u663E\u793A\u5206\u6570\u5E76\u8BA9\u73A9\u5BB6\u9009\u62E9\u63A5\u4E0B\u6765\u8981\u505A\u4EC0\u4E48\u3002","Return a formated time for a given timestamp":"\u8FD4\u56DE\u7ED9\u5B9A\u65F6\u95F4\u6233\u7684\u683C\u5F0F\u5316\u65F6\u95F4","Format time":"\u683C\u5F0F\u5316\u65F6\u95F4","Time":"\u65F6\u95F4","Format":"\u683C\u5F0F","To fixed":"\u56FA\u5B9A","Pad start":"\u586B\u5145\u5F00\u59CB","Text":"\u6587\u672C","Target length":"\u76EE\u6807\u957F\u5EA6","Pad string":"\u586B\u5145\u5B57\u7B26\u4E32","Default player name":"\u9ED8\u8BA4\u73A9\u5BB6\u540D\u79F0","Leaderboard":"\u6392\u884C\u699C","Best score":"\u6700\u4F73\u5206\u6570","Score format":"\u5206\u6570\u683C\u5F0F","Prefix":"\u524D\u7F00","Suffix":"\u540E\u7F00","Round to decimal point":"\u56DB\u820D\u4E94\u5165\u5230\u5C0F\u6570\u70B9","Score label":"\u5206\u6570\u6807\u7B7E","Best score label":"\u6700\u4F73\u5206\u6570\u6807\u7B7E","the score.":"\u5206\u6570\u3002","Score":"\u5206\u6570","the score":"\u5F97\u5206","the best score of the object.":"\u5BF9\u8C61\u7684\u6700\u4F73\u5206\u6570\u3002","the best score":"\u6700\u4F73\u5206\u6570","Return the formated score.":"\u8FD4\u56DE\u683C\u5F0F\u5316\u7684\u5206\u6570\u3002","Format score":"\u683C\u5F0F\u5316\u5206\u6570","the default player name.":"\u9ED8\u8BA4\u73A9\u5BB6\u540D\u79F0\u3002","the default player name":"\u9ED8\u8BA4\u73A9\u5BB6\u540D\u79F0","the player name.":"\u73A9\u5BB6\u540D\u79F0\u3002","Player name":"\u73A9\u5BB6\u540D\u79F0","the player name":"\u73A9\u5BB6\u540D\u79F0","Check if the restart button of the dialog is clicked.":"\u68C0\u67E5\u5BF9\u8BDD\u6846\u7684\u91CD\u542F\u6309\u94AE\u662F\u5426\u88AB\u70B9\u51FB\u3002","Restart button clicked":"\u91CD\u542F\u6309\u94AE\u88AB\u70B9\u51FB","Restart button of _PARAM0_ is clicked":"_PARAM0_ \u7684\u91CD\u542F\u6309\u94AE\u88AB\u70B9\u51FB","Check if the next button of the dialog is clicked.":"\u68C0\u67E5\u5BF9\u8BDD\u6846\u7684\u4E0B\u4E00\u4E2A\u6309\u94AE\u662F\u5426\u88AB\u70B9\u51FB\u3002","Next button clicked":"\u4E0B\u4E00\u4E2A\u6309\u94AE\u88AB\u70B9\u51FB","Next button of _PARAM0_ is clicked":"_PARAM0_ \u7684\u4E0B\u4E00\u4E2A\u6309\u94AE\u88AB\u70B9\u51FB","Check if the back button of the dialog is clicked.":"\u68C0\u67E5\u5BF9\u8BDD\u6846\u7684\u540E\u9000\u6309\u94AE\u662F\u5426\u88AB\u70B9\u51FB\u3002","Back button clicked":"\u540E\u9000\u6309\u94AE\u88AB\u70B9\u51FB","Back button of _PARAM0_ is clicked":"_PARAM0_ \u7684\u540E\u9000\u6309\u94AE\u88AB\u70B9\u51FB","Check if the score has been sucessfully submitted by the dialog.":"\u68C0\u67E5\u5BF9\u8BDD\u6846\u662F\u5426\u6210\u529F\u63D0\u4EA4\u4E86\u5206\u6570\u3002","Score is submitted":"\u5206\u6570\u5DF2\u63D0\u4EA4","_PARAM0_ submitted a score":"_PARAM0_ \u63D0\u4EA4\u4E86\u4E00\u4E2A\u5206\u6570","the leaderboard of the object.":"\u5BF9\u8C61\u7684\u6392\u884C\u699C\u3002","the leaderboard":"\u6392\u884C\u699C","the title of the object.":"\u5BF9\u8C61\u7684\u6807\u9898\u3002","Title":"\u6807\u9898","the title":"\u6807\u9898","Fade in the decoration objects of the dialog.":"\u6DE1\u5165\u5BF9\u8BDD\u6846\u7684\u88C5\u9970\u5BF9\u8C61\u3002","Fade in decorations":"\u6DE1\u5165\u88C5\u9970\u7269","Fade in the decorations of _PARAM0_":"\u6DE1\u5165 _PARAM0_ \u7684\u88C5\u9970\u7269","Fade out the decoration objects of the dialog.":"\u6DE1\u51FA\u5BF9\u8BDD\u6846\u7684\u88C5\u9970\u5BF9\u8C61\u3002","Fade out decorations":"\u6DE1\u51FA\u88C5\u9970\u7269","Fade out the decorations of _PARAM0_":"\u6DE1\u51FA _PARAM0_ \u7684\u88C5\u9970\u7269","Check if the fade in animation of the decorations is finished.":"\u68C0\u67E5\u88C5\u9970\u7684\u6DE1\u5165\u52A8\u753B\u662F\u5426\u5B8C\u6210\u3002","Decorations are faded in":"\u88C5\u9970\u7269\u5DF2\u6DE1\u5165","Fade in animation of _PARAM0_ is finished":"_PARAM0_ \u7684\u6DE1\u5165\u52A8\u753B\u5DF2\u5B8C\u6210","Check if the fade out animation of the decorations is finished.":"\u68C0\u67E5\u88C5\u9970\u7684\u6DE1\u51FA\u52A8\u753B\u662F\u5426\u5B8C\u6210\u3002","Decorations are faded out":"\u88C5\u9970\u7269\u5DF2\u6DE1\u51FA","Fade out animation of _PARAM0_ is finished":"_PARAM0_ \u7684\u6DE1\u51FA\u52A8\u753B\u5DF2\u5B8C\u6210","Linear Movement":"\u7EBF\u6027\u8FD0\u52A8","Move objects on a straight line.":"\u6CBF\u76F4\u7EBF\u79FB\u52A8\u5BF9\u8C61\u3002","Linear movement":"\u7EBF\u6027\u8FD0\u52A8","Speed on X axis":"X\u8F74\u901F\u5EA6","Speed on Y axis":"Y\u8F74\u901F\u5EA6","the speed on X axis of the object.":"\u5BF9\u8C61\u5728 X \u8F74\u4E0A\u7684\u901F\u5EA6\u3002","the speed on X axis":"X \u8F74\u4E0A\u7684\u901F\u5EA6","the speed on Y axis of the object.":"\u5BF9\u8C61\u5728 Y \u8F74\u4E0A\u7684\u901F\u5EA6\u3002","the speed on Y axis":"Y \u8F74\u4E0A\u7684\u901F\u5EA6","Move objects ahead according to their angle.":"\u6839\u636E\u5176\u89D2\u5EA6\u79FB\u52A8\u5BF9\u8C61\u3002","Linear movement by angle":"\u6839\u636E\u89D2\u5EA6\u7684\u7EBF\u6027\u8FD0\u52A8","Linked Objects Tools":"\u94FE\u5F0F\u5BF9\u8C61\u5DE5\u5177","Conditions to use Linked Objects as a graph and a path finding movement behavior.":"\u7528\u4F5C\u5C06\u94FE\u5F0F\u5BF9\u8C61\u7528\u4F5C\u56FE\u548C\u8DEF\u5F84\u67E5\u627E\u79FB\u52A8\u884C\u4E3A\u7684\u6761\u4EF6\u3002","Link to neighbors on a rectangular grid.":"\u8FDE\u63A5\u5230\u77E9\u5F62\u7F51\u683C\u4E0A\u7684\u90BB\u5C45\u3002","Link to neighbors on a rectangular grid":"\u8FDE\u63A5\u5230\u77E9\u5F62\u7F51\u683C\u4E0A\u7684\u90BB\u5C45","Link _PARAM1_ and its neighbors _PARAM2_ on a rectangular grid with cell dimensions: _PARAM3_; _PARAM4_":"\u5728\u5177\u6709\u5355\u5143\u5C3A\u5BF8\uFF1A_PARAM3_; _PARAM4_ \u7684\u77E9\u5F62\u7F51\u683C\u4E0A\u8FDE\u63A5_PARAM1_\u53CA\u5176\u90BB\u5C45_PARAM2_","Neighbor":"\u90BB\u5C45","The 2 objects can't be the same.":"\u8FD92\u4E2A\u5BF9\u8C61\u4E0D\u80FD\u662F\u76F8\u540C\u7684\u3002","Cell width":"\u5355\u5143\u5BBD\u5EA6","Cell height":"\u5355\u5143\u9AD8\u5EA6","Allows diagonals":"\u5141\u8BB8\u5BF9\u89D2\u7EBF","Link to neighbors on a hexagonal grid.":"\u8FDE\u63A5\u5230\u516D\u89D2\u7F51\u683C\u4E0A\u7684\u90BB\u5C45\u3002","Link to neighbors on a hexagonal grid":"\u5728\u516D\u89D2\u7F51\u683C\u4E0A\u8FDE\u63A5\u5230\u90BB\u5C45","Link _PARAM1_ and its neighbors _PARAM2_ on a hexagonal grid with cell dimensions: _PARAM3_; _PARAM4_":"\u5728\u5177\u6709\u5355\u5143\u5C3A\u5BF8\uFF1A_PARAM3_; _PARAM4_ \u7684\u516D\u89D2\u7F51\u683C\u4E0A\u8FDE\u63A5_PARAM1_\u53CA\u5176\u90BB\u5C45_PARAM2_","Link to neighbors on an isometric grid.":"\u8FDE\u63A5\u5230\u7B49\u89D2\u7F51\u683C\u4E0A\u7684\u90BB\u5C45\u3002","Link to neighbors on an isometric grid":"\u5728\u7B49\u89D2\u7F51\u683C\u4E0A\u8FDE\u63A5\u5230\u90BB\u5C45","Link _PARAM1_ and its neighbors _PARAM2_ on an isometric grid with cell dimensions: _PARAM3_; _PARAM4_":"\u5728\u5177\u6709\u5355\u5143\u5C3A\u5BF8\uFF1A_PARAM3_; _PARAM4_ \u7684\u7B49\u89D2\u7F51\u683C\u4E0A\u8FDE\u63A5_PARAM1_\u53CA\u5176\u90BB\u5C45_PARAM2_","Can reach through a given cost sum.":"\u53EF\u4EE5\u901A\u8FC7\u7ED9\u5B9A\u7684\u6210\u672C\u603B\u548C\u5230\u8FBE\u3002","Can reach with links limited by cost":"\u53EF\u4EE5\u901A\u8FC7\u6210\u672C\u9650\u5236\u7684\u8FDE\u63A5\u5230\u8FBE","Take into account all \"_PARAM1_\" that can reach _PARAM2_ with initial value from the variable _PARAM3_ through at most a cost of: _PARAM4_ according to cost class: _PARAM5_ and at most _PARAM6_ links depth":"\u8003\u8651\u6240\u6709\u80FD\u591F\u901A\u8FC7\u7ED9\u5B9A\u6210\u672C\u7C7B: _PARAM5_ \u548C\u6700\u591A_PARAM6_\u4E2A\u94FE\u63A5\u6DF1\u5EA6\u4E0B\u7684\u521D\u59CB\u503C\u4ECE\u53D8\u91CF_PARAM3_\u5230\u8FBE_PARAM2_\u7684\u201C_PARAM1_\u201D\u3002","Pick these objects...":"\u9009\u62E9\u8FD9\u4E9B\u5BF9\u8C61\u2026\u2026","if they can reach this object":"\u5982\u679C\u5B83\u4EEC\u53EF\u4EE5\u5230\u8FBE\u8FD9\u4E2A\u5BF9\u8C61","Initial length variable":"\u521D\u59CB\u957F\u5EA6\u53D8\u91CF","Start to 0 if left empty":"\u5982\u679C\u5DE6\u7A7A\u5219\u5F00\u59CB\u4E3A0","Maximum cost":"\u6700\u5927\u6210\u672C","Cost class":"\u6210\u672C\u7C7B","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost must be positive.":"\u4FDD\u6301\u7A7A\u767D\u4EE5\u4F7F\u4E00\u5207\u7684\u503C\u4E3A\u53EF\u7A7F\u8D8A\uFF0C\u6210\u672C=1\u3002\u5B83\u67E5\u627Elinktools_Cost\u7684\u53D8\u91CF\u5B50\u96C6\uFF0C\u5982\u679C\u6CA1\u6709\u5B50\u96C6\u5219\u8868\u793A\u4E0D\u53EF\u7A7F\u8D8A\uFF0C\u6210\u672C\u5FC5\u987B\u662F\u6B63\u6570\u3002","Maximum depth":"\u6700\u5927\u6DF1\u5EA6","Ignore first node cost":"\u5FFD\u7565\u7B2C\u4E00\u4E2A\u8282\u70B9\u7684\u6210\u672C","Can reach through a given number of links.":"\u53EF\u4EE5\u901A\u8FC7\u7ED9\u5B9A\u6570\u91CF\u7684\u94FE\u63A5\u5230\u8FBE","Can reach with links limited by length":"\u53EF\u4EE5\u901A\u8FC7\u957F\u5EA6\u9650\u5236\u7684\u94FE\u63A5\u5230\u8FBE","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through at most _PARAM3_ links according to cost class: _PARAM4_":"\u8003\u8651\u6240\u6709\u300E_PARAM1_\u300F\uFF0C\u5B83\u4EEC\u6700\u591A\u901A\u8FC7\u6210\u672C\u7C7B\uFF1A\u300E_PARAM4_\u300F\u4E0A\u96503\u7684\u94FE\u63A5\u5230\u8FBE\u300E_PARAM2_\u300F","Maximum link length":"\u6700\u5927\u94FE\u63A5\u957F\u5EA6","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost can be 0 or 1.":"\u4FDD\u6301\u7A7A\u767D\u4EE5\u4F7F\u4E00\u5207\u7684\u503C\u4E3A\u53EF\u7A7F\u8D8A\uFF0C\u6210\u672C\u53EF\u4EE5\u4E3A0\u62161\u3002\u5B83\u67E5\u627Elinktools_Cost\u7684\u53D8\u91CF\u5B50\u96C6\uFF0C\u5982\u679C\u6CA1\u6709\u5B50\u96C6\u5219\u8868\u793A\u4E0D\u53EF\u7A7F\u8D8A\uFF0C\u6210\u672C\u53EF\u4EE5\u4E3A0\u62161\u3002","Can reach through links.":"\u53EF\u4EE5\u901A\u8FC7\u94FE\u63A5\u5230\u8FBE","Can reach":"\u53EF\u4EE5\u5230\u8FBE","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through links":"\u8003\u8651\u6240\u6709\u300E_PARAM1_\u300F\uFF0C\u5B83\u4EEC\u901A\u8FC7\u94FE\u63A5\u53EF\u4EE5\u5230\u8FBE\u300E_PARAM2_\u300F","Cost sum.":"\u6210\u672C\u7684\u603B\u548C\u3002","Cost sum":"\u6210\u672C\u603B\u548C","The object will move from one object instance to another according to how they are linked to one another to reach a targeted object.":"\u8BE5\u5BF9\u8C61\u5C06\u6839\u636E\u5B83\u4EEC\u4E4B\u95F4\u7684\u94FE\u63A5\u65B9\u5F0F\u4ECE\u4E00\u4E2A\u5BF9\u8C61\u5B9E\u4F8B\u79FB\u52A8\u5230\u53E6\u4E00\u4E2A\u5BF9\u8C61\u5B9E\u4F8B\uFF0C\u4EE5\u5230\u8FBE\u76EE\u6807\u5BF9\u8C61\u3002","Link path finding":"\u94FE\u63A5\u8DEF\u5F84\u67E5\u627E","Angle offset":"\u89D2\u5EA6\u504F\u79FB","Is following a path":"\u6B63\u5728\u6309\u8DEF\u5F84\u8DDF\u968F","Next node index":"\u4E0B\u4E00\u4E2A\u8282\u70B9\u7D22\u5F15","Next node X":"\u4E0B\u4E00\u4E2A\u8282\u70B9X","Next node Y":"\u4E0B\u4E00\u4E2A\u8282\u70B9 Y","Is at a node":"\u5728\u8282\u70B9","Next node angle":"\u4E0B\u4E00\u4E2A\u8282\u70B9\u89D2\u5EA6","Move the object to a position.":"\u5C06\u5BF9\u8C61\u79FB\u5230\u6307\u5B9A\u4F4D\u7F6E\u3002","Move to a position":"\u79FB\u5230\u6307\u5B9A\u4F4D\u7F6E","Move _PARAM0_ to _PARAM3_ passing by _PARAM2_ using cost class _PARAM4_":"_PARAM0_\u7ECF\u7531_PARAM2_\u8FC7\u53BB\u65B9\u5230\u8FBE_PARAM3_\u4F4D\u7F6E\uFF0C\u4F7F\u7528\u6210\u672C\u7EA7\u522B_PARAM4_","Crossable objects":"\u53EF\u7A7F\u8FC7\u7684\u5BF9\u8C61","Destination objects":"\u76EE\u6807\u5BF9\u8C61","Check if the object position is the on a path node.":"\u68C0\u67E5\u5BF9\u8C61\u4F4D\u7F6E\u662F\u5426\u5728\u8DEF\u5F84\u8282\u70B9\u4E0A\u3002","_PARAM0_ is at a node":"_PARAM0_ \u5728\u8282\u70B9\u4E0A","Forget the path.":"\u5FD8\u8BB0\u8DEF\u5F84\u3002","Forget the path":"\u5FD8\u8BB0\u8DEF\u5F84","_PARAM0_ forgets the path":"_PARAM0_ \u5FD8\u8BB0\u8DEF\u5F84","Set next node index":"\u8BBE\u7F6E\u4E0B\u4E00\u4E2A\u8282\u70B9\u7D22\u5F15","Set next node index of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u4E0B\u4E00\u4E2A\u8282\u70B9\u7D22\u5F15\u8BBE\u7F6E\u4E3A_PARAM2_","Node index":"\u8282\u70B9\u7D22\u5F15","Check if the object is moving.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5728\u79FB\u52A8\u3002","Is moving":"\u6B63\u5728\u79FB\u52A8","_PARAM0_ is moving":"_PARAM0_\u6B63\u5728\u79FB\u52A8","Check if a path has been found.":"\u68C0\u67E5\u662F\u5426\u627E\u5230\u8DEF\u5F84\u3002","Path found":"\u627E\u5230\u8DEF\u5F84","A path has been found for _PARAM0_":"\u5DF2\u4E3A_PARAM0_\u627E\u5230\u8DEF\u5F84","Check if the destination was reached.":"\u68C0\u67E5\u662F\u5426\u5230\u8FBE\u76EE\u7684\u5730\u3002","Destination reached":"\u5DF2\u5230\u8FBE\u76EE\u7684\u5730","_PARAM0_ reached its destination":"_PARAM0_\u5DF2\u5230\u8FBE\u5176\u76EE\u7684\u5730","Speed of the object on the path.":"\u8DEF\u5F84\u4E0A\u7269\u4F53\u7684\u901F\u5EA6\u3002","Get the number of waypoints on the path.":"\u83B7\u53D6\u8DEF\u5F84\u4E0A\u7684\u8DEF\u6807\u6570\u3002","Node count":"\u8282\u70B9\u8BA1\u6570","Waypoint X position.":"\u8DEF\u6807X\u4F4D\u7F6E\u3002","Node X":"\u8282\u70B9X","Waypoint index":"\u8DEF\u6807\u7D22\u5F15","Node Y":"\u8282\u70B9Y","Next waypoint index.":"\u4E0B\u4E00\u4E2A\u8DEF\u6807\u7D22\u5F15\u3002","Next waypoint X position.":"\u4E0B\u4E00\u4E2A\u8DEF\u6807X\u4F4D\u7F6E\u3002","Next waypoint Y position.":"\u4E0B\u4E00\u4E2A\u8DEF\u6807Y\u4F4D\u7F6E\u3002","Destination X position.":"\u76EE\u7684\u5730X\u4F4D\u7F6E\u3002","Destination Y position.":"\u76EE\u7684\u5730Y\u4F4D\u7F6E\u3002","the acceleration of the object.":"\u7269\u4F53\u7684\u52A0\u901F\u5EA6\u3002","the maximum speed of the object.":"\u7269\u4F53\u7684\u6700\u5927\u901F\u5EA6\u3002","the maximum speed":"\u6700\u5927\u901F\u5EA6","the rotation speed of the object.":"\u7269\u4F53\u7684\u65CB\u8F6C\u901F\u5EA6\u3002","the rotation speed":"\u65CB\u8F6C\u901F\u5EA6","the rotation offset applied when moving the object.":"\u79FB\u52A8\u7269\u4F53\u65F6\u5E94\u7528\u7684\u65CB\u8F6C\u504F\u79FB\u3002","the rotation angle offset on the path":"\u8DEF\u5F84\u4E0A\u7684\u65CB\u8F6C\u89D2\u5EA6\u504F\u79FB","Check if the object is rotated when traveling on its path.":"\u79FB\u52A8\u65F6\u5BF9\u8DEF\u5F84\u8FDB\u884C\u65CB\u8F6C\u3002","Object rotated":"\u7269\u4F53\u5DF2\u65CB\u8F6C","_PARAM0_ is rotated when traveling on its path":"_PARAM0_\u5728\u79FB\u52A8\u65F6\u5DF2\u65CB\u8F6C","Enable or disable rotation of the object on the path.":"\u542F\u7528\u6216\u7981\u7528\u7269\u4F53\u5728\u8DEF\u5F84\u4E0A\u7684\u65CB\u8F6C\u3002","Rotate the object":"\u65CB\u8F6C\u7269\u4F53","Enable rotation of _PARAM0_ on the path: _PARAM2_":"\u542F\u7528_PATH0_\u5728\u8DEF\u5F84\u4E0A\u7684\u65CB\u8F6C\uFF1A_PARAM2_","MQTT Client (advanced)":"MQTT \u5BA2\u6237\u7AEF\uFF08\u9AD8\u7EA7\uFF09","An MQTT client for GDevelop: allow connections to a MQTT server and send/receive messages.":"GDevelop \u7684 MQTT \u5BA2\u6237\u7AEF\uFF1A\u5141\u8BB8\u8FDE\u63A5\u5230 MQTT \u670D\u52A1\u5668\u5E76\u53D1\u9001/\u63A5\u6536\u6D88\u606F\u3002","Triggers if the client is connected to an MQTT broker server.":"\u5982\u679C\u5BA2\u6237\u7AEF\u8FDE\u63A5\u5230MQTT\u4EE3\u7406\u670D\u52A1\u5668\uFF0C\u5219\u89E6\u53D1\u3002","Is connected to a broker?":"\u8FDE\u63A5\u5230\u4EE3\u7406\u5417\uFF1F","Client connected to a broker":"\u5BA2\u6237\u7AEF\u8FDE\u63A5\u5230\u4EE3\u7406","Connects to an MQTT broker.":"\u8FDE\u63A5\u5230MQTT\u4EE3\u7406\u3002","Connect to a broker":"\u8FDE\u63A5\u4EE3\u7406","Connect to MQTT broker _PARAM1_ with parameters _PARAM2_ (secure connection: _PARAM3_)":"\u4F7F\u7528\u53C2\u6570_PARAM1_\u8FDE\u63A5\u5230MQTT\u4EE3\u7406_PARAM2_\uFF08\u5B89\u5168\u8FDE\u63A5\uFF1A_PARAM3_\uFF09","Host port":"\u4E3B\u673A\u7AEF\u53E3","Settings as JSON":"\u8BBE\u7F6E\u4E3AJSON","You can find the list of settings at [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client). \nAn example of valid configuration would be `\" \"clientId \": \"myUserName \" \"`.":"\u60A8\u53EF\u4EE5\u5728[MQTT.js\u6587\u6863](https://github.com/mqttjs/MQTT.js/#client)\u4E2D\u627E\u5230\u8BBE\u7F6E\u7684\u5217\u8868\u3002\n\u6709\u6548\u914D\u7F6E\u793A\u4F8B\u4E3A`\" \"clientId \": \"myUserName \" `\u3002","Use secure WebSockets?":"\u4F7F\u7528\u5B89\u5168WebSockets\u5417\uFF1F","Disconnects from the current MQTT broker.":"\u65AD\u5F00\u5F53\u524DMQTT\u4EE3\u7406\u3002","Disconnect from broker":"\u4ECE\u4EE3\u7406\u65AD\u5F00","Disconnect from MQTT broker (force: _PARAM1_)":"\u65AD\u5F00MQTT\u4EE3\u7406\uFF08\u5F3A\u5236\uFF1A_PARAM1_\uFF09","Force end the connection?":"\u5F3A\u5236\u7ED3\u675F\u8FDE\u63A5\uFF1F","By default, MQTT waits for pending messages or messages in the process of being sent to finish being sent before ending the connection. Use this to cancel any request and immediately shutdown the connection.":"\u9ED8\u8BA4\u60C5\u51B5\u4E0B\uFF0CMQTT\u5728\u5173\u95ED\u8FDE\u63A5\u4E4B\u524D\u7B49\u5F85\u6302\u8D77\u6D88\u606F\u6216\u6B63\u5728\u53D1\u9001\u7684\u6D88\u606F\u5B8C\u6210\u53D1\u9001\u3002\u4F7F\u7528\u6B64\u529F\u80FD\u53D6\u6D88\u4EFB\u4F55\u8BF7\u6C42\u5E76\u7ACB\u5373\u5173\u95ED\u8FDE\u63A5\u3002","Publishes a message on a topic.":"\u5728\u4E3B\u9898\u4E0A\u53D1\u5E03\u6D88\u606F\u3002","Publish message":"\u53D1\u5E03\u6D88\u606F","Publish variable _PARAM1_ on topic _PARAM2_ (QoS: _PARAM3_)":"\u5728\u4E3B\u9898_PARAM2_\u4E0A\u4EE5QoS\u4E3A_PARAM3_\u53D1\u5E03\u53D8\u91CF_PARAM1_","Text to publish":"\u8981\u53D1\u5E03\u7684\u6587\u672C","Topic to publish to":"\u8981\u53D1\u5E03\u7684\u4E3B\u9898","The QoS":"QoS","See [this](https://github.com/mqttjs/MQTT.js#qos) for more details.":"\u6709\u5173\u66F4\u591A\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u53C2\u9605[\u8FD9\u91CC](https://github.com/mqttjs/MQTT.js#qos)\u3002","Should the message be retained?":"\u6D88\u606F\u5E94\u8BE5\u4FDD\u7559\u5417\uFF1F","When a message is retained, it will be sent to every client that subscribe to the topic. Only one message can be retained per topic, if another retained message is sent it will overwrite the previous one. \nRead more [here](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages).":"\u5F53\u6D88\u606F\u88AB\u4FDD\u7559\u65F6\uFF0C\u5B83\u5C06\u53D1\u9001\u7ED9\u8BA2\u9605\u4E3B\u9898\u7684\u6BCF\u4E2A\u5BA2\u6237\u7AEF\u3002\u6BCF\u4E2A\u4E3B\u9898\u53EA\u80FD\u4FDD\u7559\u4E00\u4E2A\u6D88\u606F\uFF0C\u5982\u679C\u53D1\u9001\u53E6\u4E00\u4E2A\u4FDD\u7559\u6D88\u606F\uFF0C\u5B83\u5C06\u8986\u76D6\u5148\u524D\u7684\u6D88\u606F\u3002\u5728[\u6B64\u5904](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages)\u6709\u66F4\u591A\u9605\u8BFB\u3002","Subcribe to a topic. All messages published on that topic will be received.":"\u8BA2\u9605\u4E3B\u9898\u3002\u8BE5\u4E3B\u9898\u4E0A\u53D1\u5E03\u7684\u6240\u6709\u6D88\u606F\u5C06\u88AB\u63A5\u6536\u3002","Subscribe to a topic":"\u8BA2\u9605\u4E3B\u9898","Subscribe to topic _PARAM1_ with QoS at _PARAM2_ and dataloss _PARAM3_":"\u4F7F\u7528QoS\u5728_PARAM2_\u8BA2\u9605\u4E3B\u9898_PARAM1_\u5E76\u6570\u636E\u4E22\u5931_PARAM3_","The topic to subscribe to":"\u8BA2\u9605\u7684\u4E3B\u9898","See https://github.com/mqttjs/MQTT.js#qos for more details":"\u6709\u5173\u66F4\u591A\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u53C2\u9605https://github.com/mqttjs/MQTT.js#qos","Is dataloss allowed?":"\u5141\u8BB8\u6570\u636E\u4E22\u5931\u5417\uFF1F","See https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode for more details":"\u67E5\u770Bhttps://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode\u4E86\u89E3\u66F4\u591A\u8BE6\u60C5","Unsubcribe from a topic. No more messages from this topic will be received.":"\u53D6\u6D88\u8BA2\u9605\u4E00\u4E2A\u4E3B\u9898\u3002\u5C06\u4E0D\u518D\u63A5\u6536\u6765\u81EA\u8BE5\u4E3B\u9898\u7684\u6D88\u606F\u3002","Unsubscribe from a topic":"\u53D6\u6D88\u8BA2\u9605\u4E00\u4E2A\u4E3B\u9898","Unsubscribe from topic _PARAM1_":"\u53D6\u6D88\u8BA2\u9605\u4E3B\u9898_PARAM1_","Triggers whenever a message was received. Note that you first need to subcribe to a topic in order to get messages from it.":"\u5F53\u63A5\u6536\u5230\u6D88\u606F\u65F6\u89E6\u53D1\u3002\u8BF7\u6CE8\u610F\uFF0C\u60A8\u9996\u5148\u9700\u8981\u8BA2\u9605\u4E3B\u9898\u4EE5\u4FBF\u4ECE\u4E2D\u83B7\u53D6\u6D88\u606F\u3002","On message":"\u6D88\u606F","Message received from topic _PARAM1_":"\u4ECE\u4E3B\u9898_PARAM1_\u6536\u5230\u7684\u6D88\u606F","The topic to listen to":"\u76D1\u542C\u7684\u4E3B\u9898","Get the last received message of a topic.":"\u83B7\u53D6\u4E3B\u9898\u7684\u6700\u540E\u63A5\u6536\u6D88\u606F\u3002","Get last message":"\u83B7\u53D6\u6700\u540E\u6D88\u606F","The topic to get the message from":"\u4ECE\u4E2D\u83B7\u53D6\u6D88\u606F\u7684\u4E3B\u9898","Gets the last error. Returns an empty string if there was no errors.":"\u83B7\u53D6\u6700\u540E\u7684\u9519\u8BEF\u3002\u5982\u679C\u6CA1\u6709\u9519\u8BEF\uFF0C\u5219\u8FD4\u56DE\u7A7A\u5B57\u7B26\u4E32\u3002","Get the last error":"\u83B7\u53D6\u6700\u540E\u7684\u9519\u8BEF","Marching Squares (experimental)":"Marching Squares\uFF08\u5B9E\u9A8C\u6027\uFF09","Allow to build a \"scalar field\" and draw contour lines of it: useful for fog of wars, liquid effects, paint the ground, etc...":"\u5141\u8BB8\u6784\u5EFA\u201C\u6807\u91CF\u573A\u201D\u5E76\u7ED8\u5236\u5176\u7B49\u9AD8\u7EBF\uFF1A\u5BF9\u4E8E\u8FF7\u96FE\uFF0C\u6DB2\u4F53\u6548\u679C\uFF0C\u7ED8\u5236\u5730\u9762\u7B49\u975E\u5E38\u6709\u7528\u2026\u2026","Define the scalar field painter library JavaScript code.":"\u5B9A\u4E49\u6807\u91CF\u573A\u753B\u5BB6\u5E93JavaScript\u4EE3\u7801\u3002","Define scalar field painter library":"\u5B9A\u4E49\u6807\u91CF\u573A\u753B\u5BB6\u5E93","Define the scalar field painter library JavaScript code":"\u5B9A\u4E49\u6807\u91CF\u573A\u753B\u5BB6\u5E93JavaScript\u4EE3\u7801","Add to a Shape painter object and use the actions to draw a field. Useful for fog of wars, liquid effects (water, lava, blobs...).":"\u6DFB\u52A0\u5230\u5F62\u72B6\u753B\u5BB6\u5BF9\u8C61\u5E76\u4F7F\u7528\u64CD\u4F5C\u6765\u7ED8\u5236\u4E00\u4E2A\u573A\u3002\u5BF9\u4E8E\u6218\u4E89\u8FF7\u96FE\uFF0C\u6DB2\u4F53\u6548\u679C\uFF08\u6C34\uFF0C\u7194\u5CA9\uFF0C\u6591\u70B9...\uFF09\u975E\u5E38\u6709\u7528\u3002","Marching squares painter":"Marching squares \u753B\u5BB6","Area left bound":"\u533A\u57DF\u5DE6\u8FB9\u754C","Area top bound":"\u533A\u57DF\u9876\u90E8\u8FB9\u754C","Area right bound":"\u533A\u57DF\u53F3\u8FB9\u754C","Area bottom bound":"\u533A\u57DF\u5E95\u8FB9\u754C","Fill outside":"\u586B\u5145\u5916\u90E8","Contour threshold":"\u8F6E\u5ED3\u9608\u503C","Must only draw what is on the screen":"\u53EA\u80FD\u7ED8\u5236\u5C4F\u5E55\u4E0A\u7684\u5185\u5BB9","Extend behavior class":"\u6269\u5C55\u884C\u4E3A\u7C7B","Extend object instance prototype.":"\u6269\u5C55\u5BF9\u8C61\u5B9E\u4F8B\u539F\u578B\u3002","Extend object instance prototype":"\u6269\u5C55\u5BF9\u8C61\u5B9E\u4F8B\u539F\u578B","Extend _PARAM0_ prototype":"\u6269\u5C55 _PARAM0_ \u539F\u578B","Clear the field by setting every values to 0.":"\u901A\u8FC7\u5C06\u6BCF\u4E2A\u503C\u8BBE\u7F6E\u4E3A 0 \u6765\u6E05\u9664\u5B57\u6BB5\u3002","Clear the field":"\u6E05\u9664\u5B57\u6BB5","Clear the field of _PARAM0_":"\u6E05\u9664 _PARAM0_ \u7684\u5B57\u6BB5","Unfill an area of the field from a given location until a given height is reached.":"\u4ECE\u7ED9\u5B9A\u4F4D\u7F6E\u5F00\u59CB\uFF0C\u76F4\u5230\u8FBE\u5230\u7ED9\u5B9A\u9AD8\u5EA6\uFF0C\u586B\u5145\u5B57\u6BB5\u7684\u533A\u57DF\u3002","Unfill area":"\u53D6\u6D88\u586B\u5145\u533A\u57DF","Unfill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a minimum of _PARAM4_ with thickness: _PARAM5_":"\u4ECE x: _PARAM2_, y: _PARAM3_ \u5F00\u59CB\uFF0C\u4EE5 _PARAM5_ \u7684\u539A\u5EA6\uFF0C\u53D6\u6D88 _PARAM0_ \u5B57\u6BB5\u7684\u586B\u5145\uFF0C\u76F4\u5230\u8FBE\u5230 _PARAM4_\u3002","Minimum height":"\u6700\u5C0F\u9AD8\u5EA6","Contour thickness":"\u8F6E\u5ED3\u539A\u5EA6","Capping radius ratio":"\u9876\u90E8\u534A\u5F84\u6BD4","Small values allow quicker process, but can result to tearing. Try values around 8.":"\u8F83\u5C0F\u7684\u503C\u53EF\u4EE5\u52A0\u5FEB\u5904\u7406\u901F\u5EA6\uFF0C\u4F46\u53EF\u80FD\u5BFC\u81F4\u6495\u88C2\u3002\u8BF7\u5C1D\u8BD5\u5927\u7EA6\u4E3A 8 \u7684\u503C\u3002","Fill an area of the field from a given location until a given height is reached.":"\u4ECE\u7ED9\u5B9A\u4F4D\u7F6E\u5F00\u59CB\uFF0C\u76F4\u5230\u8FBE\u5230\u7ED9\u5B9A\u9AD8\u5EA6\uFF0C\u586B\u5145\u5B57\u6BB5\u7684\u533A\u57DF\u3002","Fill area":"\u586B\u5145\u533A\u57DF","Fill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a maximum of _PARAM4_ with thickness: _PARAM5_":"\u4ECE x: _PARAM2_, y: _PARAM3_ \u5F00\u59CB\uFF0C\u4EE5 _PARAM5_ \u7684\u539A\u5EA6\uFF0C\u586B\u5145 _PARAM0_ \u5B57\u6BB5\u7684\u533A\u57DF\uFF0C\u76F4\u5230\u8FBE\u5230 _PARAM4_\u3002","Maximum height":"\u6700\u5927\u9AD8\u5EA6","Cap every value of the field to a range.":"\u5C06\u5B57\u6BB5\u7684\u6BCF\u4E2A\u503C\u9650\u5236\u5728\u8303\u56F4\u5185\u3002","Clamp the field":"\u5939\u4F4F\u5B57\u6BB5","Clamp the field of _PARAM0_ from: _PARAM2_ to: _PARAM3_":"\u5C06 _PARAM0_ \u7684\u5B57\u6BB5\u5939\u4F4F\u4ECE _PARAM2_ \u5230 _PARAM3_","Minimum":"\u6700\u5C0F","Maximum":"\u6700\u5927","Apply an affine on the field values.":"\u5BF9\u5B57\u6BB5\u503C\u5E94\u7528\u4EFF\u5C04\u3002","Transform the field":"\u53D8\u6362\u5B57\u6BB5","Transform the field of _PARAM0_ with a coefficient: _PARAM2_ and an offset: _PARAM3_":"\u5BF9 _PARAM0_ \u5B57\u6BB5\u8FDB\u884C\u53D8\u6362\uFF0C\u4F7F\u7528\u7CFB\u6570\uFF1A_PARAM2_ \u548C\u504F\u79FB\uFF1A_PARAM3_","Coefficient":"\u7CFB\u6570","Offset":"\u504F\u79FB","Add a hill to the field.":"\u5411\u5B57\u6BB5\u6DFB\u52A0\u5C71\u4E18\u3002","Add a hill":"\u6DFB\u52A0\u5C71\u4E18","Add a hill to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, _PARAM4_, radius: _PARAM5_, opacity: _PARAM6_ using: _PARAM8_":"\u5411 _PARAM0_ \u7684\u5B57\u6BB5\u6DFB\u52A0\u5C71\u4E18\uFF0C\u4E2D\u5FC3\uFF1A_PARAM2_, _PARAM3_, _PARAM4_, \u534A\u5F84\uFF1A_PARAM5_, \u4E0D\u900F\u660E\u5EA6\uFF1A_PARAM6_\uFF0C\u4F7F\u7528\uFF1A_PARAM8_\u3002","The hill height at the center, a value of 1 or less means a flat hill.":"\u4E2D\u5FC3\u9AD8\u5EA6\u5C71\u4E18\uFF0C\u503C\u4E3A 1 \u6216\u66F4\u4F4E\u8868\u793A\u5E73\u9876\u5C71\u3002","The hill height is 1 at this radius.":"\u5728\u8FD9\u4E2A\u534A\u5F84\u4E0A\u5C71\u7684\u9AD8\u5EA6\u4E3A1\u3002","Opacity":"\u4E0D\u900F\u660E\u5EA6","Set to 1 to apply the hill instantly or repeat this action with a lower value to make is progressive.":"\u8BBE\u7F6E\u4E3A1\uFF0C\u7ACB\u5373\u5E94\u7528\u5C71\u4E18\uFF0C\u6216\u8005\u4EE5\u8F83\u5C0F\u7684\u503C\u91CD\u590D\u6B64\u64CD\u4F5C\uFF0C\u4F7F\u5176\u9010\u6E10\u53D8\u5316\u3002","Operation":"\u64CD\u4F5C","Add a disk to the field.":"\u5728\u573A\u5730\u4E0A\u6DFB\u52A0\u4E00\u4E2A\u5706\u76D8\u3002","Add a disk":"\u6DFB\u52A0\u4E00\u4E2A\u5706\u76D8","Add a disk to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_ using: _PARAM6_":"\u5728_PARAM0_\u7684\u573A\u5730\u4E0A\u6DFB\u52A0\u4E00\u4E2A\u5706\u76D8\uFF0C\u4E2D\u5FC3\u4F4D\u7F6E\uFF1A_PARAM2_\uFF0C_PARAM3_\uFF0C\u534A\u5F84\uFF1A_PARAM4_\uFF0C\u4F7F\u7528\uFF1A_PARAM6_","The spike height is 1 at this radius.":"\u5728\u8FD9\u4E2A\u534A\u5F84\u4E0A\u5C16\u5CF0\u7684\u9AD8\u5EA6\u4E3A1\u3002","Mask a disk to the field.":"\u5728\u573A\u5730\u4E0A\u4E3A\u4E00\u4E2A\u5706\u76D8\u6DFB\u52A0\u8499\u7248\u3002","Mask a disk":"\u6DFB\u52A0\u8499\u7248\u7684\u4E00\u4E2A\u5706\u76D8","Mask a disk on the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_":"\u5728_PARAM0_\u7684\u573A\u5730\u4E0A\uFF0C\u4EE5\u4E2D\u5FC3\uFF1A_PARAM2_\uFF0C_PARAM3_\uFF0C\u534A\u5F84\uFF1A_PARAM4_\u7684\u4F4D\u7F6E\u6DFB\u52A0\u4E00\u4E2A\u5706\u76D8\u7684\u8499\u7248\u3002","Add a line to the field.":"\u5728\u573A\u5730\u4E0A\u6DFB\u52A0\u4E00\u6761\u7EBF\u3002","Add a line":"\u6DFB\u52A0\u4E00\u6761\u7EBF","Add a line to the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_ using: _PARAM8_":"\u5728_PARAM0_\u7684\u573A\u5730\u4E0A\uFF0C\u4ECE_PARAM2_ ; _PARAM3_\u5230_PARAM4_ ; _PARAM5_\uFF0C\u4F7F\u7528\u539A\u5EA6\uFF1A_PARAM6_\u8FDB\u884C\u6DFB\u52A0\u4E00\u6761\u7EBF\u3002","X position of the start":"\u5F00\u59CB\u4F4D\u7F6E\u7684X\u5750\u6807","Y position of the start":"\u5F00\u59CB\u4F4D\u7F6E\u7684Y\u5750\u6807","X position of the end":"\u7ED3\u675F\u4F4D\u7F6E\u7684X\u5750\u6807","Y position of the end":"\u7ED3\u675F\u4F4D\u7F6E\u7684Y\u5750\u6807","Thickness":"\u539A\u5EA6","Mask a line to the field.":"\u5728\u573A\u5730\u4E0A\u4E3A\u4E00\u6761\u7EBF\u6DFB\u52A0\u8499\u7248\u3002","Mask a line":"\u6DFB\u52A0\u4E00\u6761\u7EBF\u7684\u8499\u7248","Mask a line on the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_":"\u5728_PARAM0_\u7684\u573A\u5730\u4E0A\uFF0C\u4ECE_PARAM2_ ; _PARAM3_\u5230_PARAM4_ ; _PARAM5_\uFF0C\u539A\u5EA6\u4E3A\uFF1A_PARAM6_\u7684\u5730\u65B9\u6DFB\u52A0\u4E00\u6761\u7EBF\u7684\u8499\u7248\u3002","Apply a given operation on every value of the field using the value from the other field at the same position.":"\u5BF9\u573A\u5730\u7684\u6BCF\u4E2A\u503C\u5E94\u7528\u7ED9\u5B9A\u7684\u64CD\u4F5C\uFF0C\u4F7F\u7528\u76F8\u540C\u4F4D\u7F6E\u7684\u53E6\u4E00\u4E2A\u573A\u5730\u7684\u503C\u3002","Merge a field":"\u5408\u5E76\u573A\u5730","Merge _PARAM0_ with the field of _PARAM2_ using: _PARAM4_":"\u5C06_PARAM0_\u4E0E_PARAM2_\u7684\u573A\u5730\u5408\u5E76\uFF0C\u4F7F\u7528\uFF1A_PARAM4_\u3002","Field object":"\u573A\u5730\u5BF9\u8C61","Field behavior":"\u573A\u5730\u884C\u4E3A","Update the field hitboxes.":"\u66F4\u65B0\u573A\u5730\u7684\u78B0\u649E\u6846\u3002","Update hitboxes":"\u66F4\u65B0\u78B0\u649E\u6846","Update the field hitboxes of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u573A\u5730\u78B0\u649E\u6846\u3002","Draw the field contours.":"\u7ED8\u5236\u573A\u5730\u8F6E\u5ED3\u3002","Draw the contours":"\u7ED8\u5236\u8F6E\u5ED3","Draw the field contours of _PARAM0_":"\u7ED8\u5236_PARAM0_\u7684\u9886\u57DF\u8F6E\u5ED3","Change the width of the field cells.":"\u66F4\u6539\u9886\u57DF\u5355\u5143\u683C\u7684\u5BBD\u5EA6\u3002","Width of the cells":"\u5355\u5143\u683C\u7684\u5BBD\u5EA6","Change the width of the field cells of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u9886\u57DF\u5355\u5143\u683C\u5BBD\u5EA6\uFF1A_PARAM2_","Change the height of the field cells.":"\u66F4\u6539\u9886\u57DF\u5355\u5143\u683C\u7684\u9AD8\u5EA6\u3002","Height of the cells":"\u5355\u5143\u683C\u7684\u9AD8\u5EA6","Change the height of the field cells of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u9886\u57DF\u5355\u5143\u683C\u9AD8\u5EA6\uFF1A_PARAM2_","Rebuild the field with the new dimensions.":"\u4F7F\u7528\u65B0\u7684\u5C3A\u5BF8\u91CD\u5EFA\u9886\u57DF\u3002","Rebuild the field":"\u91CD\u5EFA\u9886\u57DF","Rebuild the field _PARAM0_":"\u91CD\u5EFA\u9886\u57DF_PARAM0_","Fill outside or inside of the contours.":"\u5728\u8F6E\u5ED3\u5916\u90E8\u6216\u5185\u90E8\u586B\u5145\u3002","Fill outside of the contours of _PARAM0_: _PARAM2_":"_PARAM0_\u8F6E\u5ED3\u5916\u90E8\u586B\u5145\uFF1A_PARAM2_","Fill outside?":"\u586B\u5145\u8F6E\u5ED3\u5916\u90E8\uFF1F","Change the contour threshold.":"\u66F4\u6539\u8F6E\u5ED3\u9608\u503C\u3002","Change the contour threshold of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u8F6E\u5ED3\u9608\u503C\uFF1A_PARAM2_","Change the field area bounds.":"\u66F4\u6539\u9886\u57DF\u533A\u57DF\u8FB9\u754C\u3002","Area bounds":"\u533A\u57DF\u8FB9\u754C","Change the field area bounds of _PARAM0_ left: _PARAM2_ top: _PARAM3_ right: _PARAM4_ bottom: _PARAM5_":"\u66F4\u6539_PARAM0_\u5DE6\u8FB9\u754C: _PARAM2_ \u9876\u90E8: _PARAM3_ \u53F3\u8FB9\u754C: _PARAM4_ \u5E95\u90E8: _PARAM5_\u7684\u9886\u57DF\u533A\u57DF\u8FB9\u754C","Left bound":"\u5DE6\u8FB9\u754C","Top bound":"\u9876\u90E8\u8FB9\u754C","Right bound":"\u53F3\u8FB9\u754C","Bottom bound":"\u5E95\u90E8\u8FB9\u754C","Area left bound of the field.":"\u9886\u57DF\u7684\u5DE6\u8FB9\u754C\u3002","Area left":"\u5DE6\u8FB9\u754C","Area top bound of the field.":"\u9886\u57DF\u7684\u9876\u90E8\u8FB9\u754C\u3002","Area top":"\u9876\u90E8\u8FB9\u754C","Area right bound of the field.":"\u9886\u57DF\u7684\u53F3\u8FB9\u754C\u3002","Area right":"\u53F3\u8FB9\u754C","Area bottom bound of the field.":"\u9886\u57DF\u7684\u5E95\u90E8\u8FB9\u754C\u3002","Area bottom":"\u5E95\u90E8\u8FB9\u754C","Width of the field cells.":"\u9886\u57DF\u5355\u5143\u683C\u7684\u5BBD\u5EA6\u3002","Width of a cell":"\u5355\u5143\u683C\u7684\u5BBD\u5EA6","Height of the field cells.":"\u9886\u57DF\u5355\u5143\u683C\u7684\u9AD8\u5EA6\u3002","Height of a cell":"\u5355\u5143\u683C\u7684\u9AD8\u5EA6","The number of cells on the x axis.":"\u5728x\u8F74\u4E0A\u7684\u5355\u5143\u6570\u91CF\u3002","Dimension X":"X \u7EF4\u5EA6","At _PARAM2_; _PARAM3_ the field value of _PARAM0_ is greater than _PARAM4_":"\u5728_PARAM2_\uFF1B_PARAM3_\u65F6\uFF0C_PARAM0_\u7684\u5B57\u6BB5\u503C\u5927\u4E8E_PARAM4_","The number of cells on the y axis.":"\u5728y\u8F74\u4E0A\u7684\u5355\u5143\u6570\u91CF\u3002","Dimension Y":"Y \u7EF4\u5EA6","The contour threshold.":"\u8F6E\u5ED3\u9608\u503C\u3002","The normal X coordinate at a given location.":"\u5728\u7ED9\u5B9A\u4F4D\u7F6E\u7684\u6CD5\u7EBFX\u5750\u6807\u3002","Normal X":"\u6CD5\u7EBFX","X position of the point":"\u70B9\u7684X\u4F4D\u7F6E","Y position of the point":"\u70B9\u7684Y\u4F4D\u7F6E","The normal Y coordinate at a given location.":"\u5728\u7ED9\u5B9A\u4F4D\u7F6E\u7684\u6CD5\u7EBFY\u5750\u6807\u3002","Normal Y":"\u6CD5\u7EBFY","The normal Z coordinate at a given location.":"\u5728\u7ED9\u5B9A\u4F4D\u7F6E\u7684\u6CD5\u7EBFZ\u5750\u6807\u3002","Normal Z":"\u6CD5\u7EBFZ","Change the field value at a grid point.":"\u5728\u7F51\u683C\u70B9\u5904\u66F4\u6539\u5B57\u6BB5\u503C\u3002","Grid value":"\u7F51\u683C\u503C","Change the field value of _PARAM0_ at the grid point _PARAM2_; _PARAM3_ to _PARAM4_":"\u66F4\u6539_PARAM2_\u7684\u7F51\u683C\u70B9_PARAM3_\u5904\u7684_PARAM0_\u5B57\u6BB5\u503C\u4E3A_PARAM4_","X grid index":"X\u7F51\u683C\u7D22\u5F15","Y grid index":"Y\u7F51\u683C\u7D22\u5F15","Field value":"\u5B57\u6BB5\u503C","The field value at a grid point.":"\u5728\u7F51\u683C\u70B9\u5904\u7684\u5B57\u6BB5\u503C\u3002","The field value at a given location.":"\u5728\u7ED9\u5B9A\u4F4D\u7F6E\u7684\u5B57\u6BB5\u503C\u3002","Check if the contours are filled outside.":"\u68C0\u67E5\u8F6E\u5ED3\u662F\u5426\u5728\u5916\u90E8\u88AB\u586B\u5145\u3002","The contours of _PARAM0_ are filled outside":"_PARAM0_\u7684\u8F6E\u5ED3\u5728\u5916\u90E8\u88AB\u586B\u5145","Check if a field is greater than a given value.":"\u68C0\u67E5\u5B57\u6BB5\u662F\u5426\u5927\u4E8E\u7ED9\u5B9A\u503C\u3002","Check if a point is inside the contour.":"\u68C0\u67E5\u70B9\u662F\u5426\u5728\u8F6E\u5ED3\u5185\u3002","Point is inside":"\u70B9\u5728\u5185\u90E8","_PARAM2_; _PARAM3_ is inside _PARAM0_":"_PARAM2_; _PARAM3_\u5728_PARAM0_\u5185","Cursor object":"\u5149\u6807\u5BF9\u8C61","Turn any object into a cursor.":"\u5C06\u4EFB\u4F55\u5BF9\u8C61\u53D8\u6210\u5149\u6807\u3002","Turn any object into a mouse cursor.":"\u5C06\u4EFB\u4F55\u5BF9\u8C61\u8F6C\u6362\u4E3A\u9F20\u6807\u6307\u9488\u3002","Cursor":"\u9F20\u6807\u6307\u9488","Mouse Pointer Lock":"\u9F20\u6807\u6307\u9488\u9501\u5B9A","This behavior removes the limit on the distance the mouse can move and hides the cursor.":"\u6B64\u884C\u4E3A\u79FB\u9664\u4E86\u9F20\u6807\u53EF\u79FB\u52A8\u8DDD\u79BB\u7684\u9650\u5236\uFF0C\u5E76\u9690\u85CF\u4E86\u5149\u6807\u3002","Lock the mouse pointer to hide it.":"\u9501\u5B9A\u9F20\u6807\u6307\u9488\u4EE5\u9690\u85CF\u5B83\u3002","Request Pointer Lock":"\u8BF7\u6C42\u6307\u9488\u9501\u5B9A","Unlocks the mouse pointer and show it.":"\u89E3\u9501\u9F20\u6807\u6307\u9488\u5E76\u663E\u793A\u5B83\u3002","Exit pointer lock":"\u9000\u51FA\u6307\u9488\u9501\u5B9A","Check if the mouse pointer is locked.":"\u68C0\u67E5\u9F20\u6807\u6307\u9488\u662F\u5426\u88AB\u9501\u5B9A\u3002","Pointer is locked":"\u6307\u9488\u5DF2\u9501\u5B9A","The mouse pointer is locked":"\u9F20\u6807\u6307\u9488\u5DF2\u9501\u5B9A","Check if the mouse pointer is actually locked.":"\u68C0\u67E5\u9F20\u6807\u6307\u9488\u662F\u5426\u5B9E\u9645\u4E0A\u88AB\u9501\u5B9A\u3002","Pointer is actually locked":"\u6307\u9488\u5B9E\u9645\u4E0A\u5DF2\u9501\u5B9A","The mouse pointer actually is locked":"\u9F20\u6807\u6307\u9488\u5B9E\u9645\u4E0A\u5DF2\u9501\u5B9A","Check if the mouse pointer lock is emulated.":"\u68C0\u67E5\u9F20\u6807\u6307\u9488\u9501\u5B9A\u662F\u5426\u6A21\u62DF\u3002","Pointer lock is emulated":"\u9F20\u6807\u6307\u9488\u9501\u5B9A\u5DF2\u6A21\u62DF","The mouse pointer lock is emulated":"\u9F20\u6807\u6307\u9488\u9501\u5DF2\u88AB\u6A21\u62DF","Check if the locked pointer is moving.":"\u68C0\u67E5\u9501\u5B9A\u7684\u6307\u9488\u662F\u5426\u79FB\u52A8\u3002","Locked pointer is moving":"\u9501\u5B9A\u7684\u6307\u9488\u6B63\u5728\u79FB\u52A8","the movement of the locked pointer on the X axis.":"\u9501\u5B9A\u6307\u9488\u5728X\u8F74\u4E0A\u7684\u79FB\u52A8\u3002","Pointer X movement":"\u6307\u9488X\u79FB\u52A8","the movement of the locked pointer on the X axis":"\u9501\u5B9A\u6307\u9488\u5728X\u8F74\u4E0A\u7684\u79FB\u52A8","the movement of the pointer on the Y axis.":"\u6307\u9488\u5728Y\u8F74\u4E0A\u7684\u79FB\u52A8\u3002","Pointer Y movement":"\u6307\u9488Y\u79FB\u52A8","the movement of the pointer on the Y axis":"\u6307\u9488\u5728Y\u8F74\u4E0A\u7684\u79FB\u52A8","Return the X position of a specific touch":"\u8FD4\u56DE\u7279\u5B9A\u89E6\u6478\u7684X\u4F4D\u7F6E","Touch X position":"\u89E6\u6478X\u4F4D\u7F6E","Touch identifier":"\u89E6\u6478\u6807\u8BC6\u7B26","Return the Y position of a specific touch":"\u8FD4\u56DE\u7279\u5B9A\u89E6\u6478\u7684Y\u4F4D\u7F6E","Touch Y position":"\u89E6\u6478Y\u4F4D\u7F6E","the speed factor for touch movement.":"\u89E6\u6478\u79FB\u52A8\u7684\u901F\u5EA6\u56E0\u5B50\u3002","Speed factor for touch movement":"\u89E6\u6478\u79FB\u52A8\u7684\u901F\u5EA6\u56E0\u5B50","the speed factor for touch movement":"\u89E6\u6478\u79FB\u52A8\u7684\u901F\u5EA6\u56E0\u5B50","Control camera rotations with a mouse.":"\u7528\u9F20\u6807\u63A7\u5236\u76F8\u673A\u65CB\u8F6C\u3002","First person camera mouse mapper":"\u7B2C\u4E00\u4EBA\u79F0\u76F8\u673A\u9F20\u6807\u6620\u5C04","Horizontal rotation speed factor":"\u6C34\u5E73\u65CB\u8F6C\u901F\u5EA6\u56E0\u5B50","Vertical rotation speed factor":"\u5782\u76F4\u65CB\u8F6C\u901F\u5EA6\u56E0\u5B50","Lock the pointer on click":"\u5355\u51FB\u65F6\u9501\u5B9A\u6307\u9488","the horizontal rotation speed factor of the object.":"\u7269\u4F53\u7684\u6C34\u5E73\u65CB\u8F6C\u901F\u5EA6\u7CFB\u6570\u3002","the horizontal rotation speed factor":"\u6C34\u5E73\u65CB\u8F6C\u901F\u5EA6\u7CFB\u6570","the vertical rotation speed factor of the object.":"\u7269\u4F53\u7684\u5782\u76F4\u65CB\u8F6C\u901F\u5EA6\u7CFB\u6570\u3002","the vertical rotation speed factor":"\u5782\u76F4\u65CB\u8F6C\u901F\u5EA6\u7CFB\u6570","Multiplayer custom lobbies":"\u591A\u4EBA\u81EA\u5B9A\u4E49\u623F\u95F4","Custom lobbies for built-in multiplayer.":"\u5185\u7F6E\u591A\u4EBA\u6E38\u620F\u7684\u81EA\u5B9A\u4E49\u623F\u95F4\u3002","Return project identifier.":"\u8FD4\u56DE\u9879\u76EE\u6807\u8BC6\u7B26\u3002","Project identifier":"\u9879\u76EE\u6807\u8BC6\u7B26","Return game version.":"\u8FD4\u56DE\u6E38\u620F\u7248\u672C\u3002","Game version":"\u6E38\u620F\u7248\u672C","Return true if game run in preview.":"\u5982\u679C\u6E38\u620F\u5728\u9884\u89C8\u4E2D\u8FD0\u884C\u5219\u8FD4\u56DE\u771F\u3002","Preview":"\u9884\u89C8","Define a shape painter as a mask of an object.":"\u5C06\u5F62\u72B6\u7ED8\u5236\u5668\u5B9A\u4E49\u4E3A\u7269\u4F53\u7684\u8499\u7248\u3002","Mask an object with a shape painter":"\u4F7F\u7528\u5F62\u72B6\u7ED8\u5236\u5668\u5BF9\u7269\u4F53\u8FDB\u884C\u906E\u7F69","Mask _PARAM1_ with mask _PARAM2_":"\u7528\u8499\u7248_PARAM2_\u906E\u7F69_PARAM1_","Object to mask":"\u8981\u8FDB\u884C\u906E\u7F69\u7684\u7269\u4F53","Shape painter to use as a mask":"\u7528\u4F5C\u8499\u7248\u7684\u5F62\u72B6\u7ED8\u5236\u5668","Loading.":"\u52A0\u8F7D\u4E2D\u3002","Loading":"\u52A0\u8F7D","Customize the interface of multiplayer lobbies.\nJoining will only work if the \"join after game starts\" setting is enabled, as the game automatically starts after joining a lobby.":"\u81EA\u5B9A\u4E49\u591A\u4EBA\u6E38\u620F\u5927\u5385\u7684\u754C\u9762\u3002\n\u53EA\u6709\u5F53 \"\u6E38\u620F\u5F00\u59CB\u540E\u52A0\u5165\" \u8BBE\u7F6E\u88AB\u542F\u7528\u65F6\u624D\u80FD\u52A0\u5165\uFF0C\u56E0\u4E3A\u6E38\u620F\u5728\u52A0\u5165\u5927\u5385\u540E\u4F1A\u81EA\u52A8\u5F00\u59CB\u3002","Update lobbies.":"\u66F4\u65B0\u5927\u5385\u3002","Update lobbies":"\u66F4\u65B0\u5927\u5385","Update lobbies _PARAM0_":"\u66F4\u65B0\u5927\u5385 _PARAM0_","Return last error.":"\u8FD4\u56DE\u6700\u540E\u4E00\u4E2A\u9519\u8BEF\u3002","Last error":"\u6700\u540E\u4E00\u4E2A\u9519\u8BEF","Custom lobby.":"\u81EA\u5B9A\u4E49\u5927\u5385\u3002","Custom lobby":"\u81EA\u5B9A\u4E49\u5927\u5385","Set lobby name.":"\u8BBE\u7F6E\u5927\u5385\u540D\u79F0\u3002","Set lobby name":"\u8BBE\u7F6E\u5927\u5385\u540D\u79F0","Set lobby name _PARAM0_: _PARAM1_":"\u8BBE\u7F6E\u5927\u5385\u540D\u79F0 _PARAM0_: _PARAM1_","Lobby name":"\u5927\u5385\u540D\u79F0","Set players in lobby count.":"\u8BBE\u7F6E\u5927\u5385\u73A9\u5BB6\u6570\u91CF\u3002","Set players in lobby count":"\u8BBE\u7F6E\u5927\u5385\u73A9\u5BB6\u6570\u91CF","Set players in lobby count _PARAM0_, players in lobby: _PARAM1_, max players _PARAM2_":"\u8BBE\u7F6E\u5927\u5385\u73A9\u5BB6\u6570\u91CF _PARAM0_\uFF0C\u5927\u5385\u4E2D\u7684\u73A9\u5BB6\uFF1A _PARAM1_\uFF0C\u6700\u5927\u73A9\u5BB6 _PARAM2_","Players count in lobby":"\u5927\u5385\u4E2D\u7684\u73A9\u5BB6\u6570\u91CF","Maxum count players in lobby":"\u5927\u5385\u4E2D\u6700\u5927\u73A9\u5BB6\u6570\u91CF","Set lobby ID.":"\u8BBE\u7F6E\u5927\u5385 ID\u3002","Set lobby ID":"\u8BBE\u7F6E\u5927\u5385 ID","Set lobby ID _PARAM0_: _PARAM1_":"\u8BBE\u7F6E\u5927\u5385 ID _PARAM0_: _PARAM1_","Lobby ID":"\u5927\u5385 ID","Return true if lobby is full.":"\u5982\u679C\u5927\u5385\u5DF2\u6EE1\uFF0C\u5219\u8FD4\u56DE\u771F\u3002","Is full":"\u5DF2\u6EE1","Lobby _PARAM0_ is full":"\u5927\u5385 _PARAM0_ \u5DF2\u6EE1","Activate interactions.":"\u6FC0\u6D3B\u4E92\u52A8\u3002","Activate interactions":"\u6FC0\u6D3B\u4E92\u52A8","Activate interactions of _PARAM0_: _PARAM1_":"\u6FC0\u6D3B _PARAM0_ \u7684\u4E92\u52A8\uFF1A _PARAM1_","Yes or no":"\u662F\u6216\u5426","Noise generator":"\u566A\u58F0\u751F\u6210\u5668","Generate noise values for procedural generation.":"\u751F\u6210\u566A\u58F0\u6570\u503C\u7528\u4E8E\u8FC7\u7A0B\u751F\u6210\u3002","Generate a number between -1 and 1 from 1 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"\u4ECE1\u7EF4simplex\u566A\u97F3\u751F\u6210-1\u52301\u4E4B\u95F4\u7684\u6570\u5B57\u3002\u6269\u5C55\u6570\u5B66\u6269\u5C55\u6A21\u5757\u4E2D\u7684\u201CMap\u201D\u8868\u8FBE\u5F0F\u53EF\u7528\u4E8E\u5C06\u503C\u6620\u5C04\u5230\u4EFB\u610F\u9009\u62E9\u7684\u8303\u56F4\u3002","1D noise":"1D\u566A\u97F3","Generate a number between -1 and 1 from 2 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"\u4ECE2\u7EF4simplex\u566A\u97F3\u751F\u6210-1\u52301\u4E4B\u95F4\u7684\u6570\u5B57\u3002\u6269\u5C55\u6570\u5B66\u6269\u5C55\u6A21\u5757\u4E2D\u7684\u201CMap\u201D\u8868\u8FBE\u5F0F\u53EF\u7528\u4E8E\u5C06\u503C\u6620\u5C04\u5230\u4EFB\u610F\u9009\u62E9\u7684\u8303\u56F4\u3002","Generate a number between -1 and 1 from 3 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"\u4ECE 3 \u7EF4\u7B80\u5355\u566A\u58F0\u4E2D\u751F\u6210\u4ECB\u4E8E -1 \u548C 1 \u4E4B\u95F4\u7684\u6570\u5B57\u3002\u53EF\u4EE5\u4F7F\u7528\u6269\u5C55\u6570\u5B66\u6269\u5C55\u4E2D\u7684 \"Map\" \u8868\u8FBE\u5F0F\u5C06\u503C\u6620\u5C04\u5230\u4EFB\u4F55\u6240\u9009\u62E9\u7684\u8FB9\u754C\u3002","Generate a number between -1 and 1 from 4 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"\u4ECE 4 \u7EF4\u7B80\u5355\u566A\u58F0\u4E2D\u751F\u6210\u4ECB\u4E8E -1 \u548C 1 \u4E4B\u95F4\u7684\u6570\u5B57\u3002\u53EF\u4EE5\u4F7F\u7528\u6269\u5C55\u6570\u5B66\u6269\u5C55\u4E2D\u7684 \"Map\" \u8868\u8FBE\u5F0F\u5C06\u503C\u6620\u5C04\u5230\u4EFB\u4F55\u6240\u9009\u62E9\u7684\u8FB9\u754C\u3002","Delete a noise generators and loose its settings.":"\u5220\u9664\u566A\u58F0\u751F\u6210\u5668\u5E76\u4E22\u5931\u5176\u8BBE\u7F6E\u3002","2 dimensional Perlin noise (depecated, use Noise2d instead).":"2\u7EF4 Perlin \u566A\u58F0\uFF08\u5DF2\u5F03\u7528\uFF0C\u4F7F\u7528 Noise2d \u4EE3\u66FF\uFF09\u3002","Perlin 2D noise":"Perlin 2D \u566A\u58F0","x value":"x \u503C","y value":"y \u503C","3 dimensional Perlin noise (depecated, use Noise3d instead).":"3\u7EF4 Perlin \u566A\u58F0\uFF08\u5DF2\u5F03\u7528\uFF0C\u4F7F\u7528 Noise3d \u4EE3\u66FF\uFF09\u3002","Perlin 3D noise":"Perlin 3D \u566A\u58F0","z value":"z \u503C","2 dimensional simplex noise (depecated, use Noise2d instead).":"2\u7EF4\u7B80\u5355\u566A\u58F0\uFF08\u5DF2\u5F03\u7528\uFF0C\u4F7F\u7528 Noise2d \u4EE3\u66FF\uFF09\u3002","Simplex 2D noise":"Simplex 2D \u566A\u58F0","3 dimensional simplex noise (depecated, use Noise3d instead).":"3\u7EF4\u7B80\u5355\u566A\u58F0\uFF08\u5DF2\u5F03\u7528\uFF0C\u4F7F\u7528 Noise3d \u4EE3\u66FF\uFF09\u3002","Simplex 3D noise":"Simplex 3D \u566A\u58F0","Object picking tools":"\u5BF9\u8C61\u9009\u62E9\u5DE5\u5177","Adds various object picking related tools.":"\u6DFB\u52A0\u5404\u79CD\u4E0E\u5BF9\u8C61\u9009\u62E9\u76F8\u5173\u7684\u5DE5\u5177\u3002","Unpicks all instances of an object.":"\u53D6\u6D88\u9009\u62E9\u5BF9\u8C61\u7684\u6240\u6709\u5B9E\u4F8B\u3002","Unpick all instances":"\u53D6\u6D88\u9009\u62E9\u6240\u6709\u5B9E\u4F8B","Unpick all instances of _PARAM1_":"\u53D6\u6D88\u9009\u62E9 _PARAM1_ \u7684\u6240\u6709\u5B9E\u4F8B","The object to unpick all instances from":"\u53D6\u6D88\u9009\u62E9\u6240\u6709\u5B9E\u4F8B\u6240\u5C5E\u7684\u5BF9\u8C61","Pick object instances that have the lowest Z-order.":"\u9009\u62E9\u5177\u6709\u6700\u4F4E Z \u987A\u5E8F\u7684\u5BF9\u8C61\u5B9E\u4F8B\u3002","Pick objects with lowest Z-order":"\u9009\u62E9\u5177\u6709\u6700\u4F4E Z \u987A\u5E8F\u7684\u5BF9\u8C61","Pick _PARAM1_ with the lowest Z-order":"\u9009\u62E9 _PARAM1_ \u5177\u6709\u6700\u4F4E Z \u987A\u5E8F\u7684\u5BF9\u8C61","Object to select instances from":"\u4ECE\u4E2D\u9009\u62E9\u5B9E\u4F8B\u7684\u5BF9\u8C61","Pick object instances that have the highest Z-order.":"\u9009\u62E9\u5177\u6709\u6700\u9AD8 Z \u987A\u5E8F\u7684\u5BF9\u8C61\u5B9E\u4F8B\u3002","Pick objects with highest Z-order":"\u9009\u62E9\u5177\u6709\u6700\u9AD8 Z \u987A\u5E8F\u7684\u5BF9\u8C61","Pick _PARAM1_ with the highest Z-order":"\u9009\u62E9 _PARAM1_ \u5177\u6709\u6700\u9AD8 Z \u987A\u5E8F\u7684\u5BF9\u8C61","Pick object instances that have the lowest value of an object variable.":"\u9009\u62E9\u5177\u6709\u5BF9\u8C61\u53D8\u91CF\u7684\u6700\u4F4E\u503C\u7684\u5BF9\u8C61\u5B9E\u4F8B\u3002","Pick objects with lowest variable value":"\u9009\u62E9\u5177\u6709\u6700\u4F4E\u53D8\u91CF\u503C\u7684\u5BF9\u8C61","Pick _PARAM1_ with the lowest value of variable _PARAM2_":"\u9009\u62E9 _PARAM1_ \u5177\u6709\u53D8\u91CF _PARAM2_ \u7684\u6700\u4F4E\u503C","Object variable name":"\u5BF9\u8C61\u53D8\u91CF\u540D\u79F0","Pick object instances that have the highest value of an object variable.":"\u9009\u62E9\u5177\u6709\u5BF9\u8C61\u53D8\u91CF\u7684\u6700\u9AD8\u503C\u7684\u5BF9\u8C61\u5B9E\u4F8B\u3002","Pick objects with highest variable value":"\u9009\u62E9\u5177\u6709\u6700\u9AD8\u53D8\u91CF\u503C\u7684\u5BF9\u8C61","Pick _PARAM1_ with the highest value of variable _PARAM2_":"\u9009\u62E9 _PARAM1_ \u5177\u6709\u53D8\u91CF _PARAM2_ \u7684\u6700\u9AD8\u503C","Picks the first instance out of a list of objects.":"\u4ECE\u5BF9\u8C61\u5217\u8868\u4E2D\u9009\u51FA\u7B2C\u4E00\u4E2A\u5B9E\u4F8B\u3002","Pick the first object (deprecated)":"\u9009\u62E9\u7B2C\u4E00\u4E2A\u5BF9\u8C61\uFF08\u5DF2\u5F03\u7528\uFF09","Pick the first _PARAM1_":"\u9009\u62E9\u7B2C\u4E00\u4E2A_PARAM1_","The object to select an instances from":"\u4ECE\u5BF9\u8C61\u5217\u8868\u4E2D\u9009\u62E9\u4E00\u4E2A\u5B9E\u4F8B\u3002","Picks the last instance out of a list of objects.":"\u4ECE\u5BF9\u8C61\u5217\u8868\u4E2D\u9009\u51FA\u6700\u540E\u4E00\u4E2A\u5B9E\u4F8B\u3002","Pick the last object (deprecated)":"\u9009\u62E9\u6700\u540E\u4E00\u4E2A\u5BF9\u8C61\uFF08\u5DF2\u5F03\u7528\uFF09","Pick the last _PARAM1_":"\u9009\u62E9\u6700\u540E\u4E00\u4E2A_PARAM1_","Picks the Nth instance out of a list of objects.":"\u4ECE\u5BF9\u8C61\u5217\u8868\u4E2D\u9009\u51FA\u7B2CN\u4E2A\u5B9E\u4F8B\u3002","Pick the Nth object (deprecated)":"\u9009\u62E9\u7B2CN\u4E2A\u5BF9\u8C61\uFF08\u5DF2\u5F03\u7528\uFF09","Pick the _PARAM2_th _PARAM1_":"\u9009\u62E9\u7B2C_PARAM2_\u4E2A_PARAM1_","The place in the objects lists an instance has to have to be picked":"\u5B9E\u4F8B\u5728\u5BF9\u8C61\u5217\u8868\u4E2D\u7684\u4F4D\u7F6E\uFF0C\u53EF\u4EE5\u9009\u62E9","Slice a 2D object into pieces":"\u5C06 2D \u7269\u4F53\u5207\u6210\u51E0\u5757","Slice an object into smaller pieces that match the color of original object.":"\u5C06\u5BF9\u8C61\u5207\u5272\u6210\u4E0E\u539F\u59CB\u5BF9\u8C61\u989C\u8272\u76F8\u5339\u914D\u7684\u5C0F\u5757\u3002","Slice an object into smaller pieces that match color of the original object. The new object should be a solid white color.":"\u5C06\u5BF9\u8C61\u5207\u5272\u6210\u989C\u8272\u4E0E\u539F\u59CB\u5BF9\u8C61\u76F8\u5339\u914D\u7684\u5C0F\u5757\u3002\u65B0\u5BF9\u8C61\u5E94\u8BE5\u662F\u7EAF\u767D\u8272\u3002","Slice object into smaller pieces":"\u5C06\u5BF9\u8C61\u5207\u5272\u6210\u5C0F\u5757","Cut _PARAM1_ into _PARAM3_ vertical strips and _PARAM4_ horizontal strips using _PARAM2_ for the new objects. Delete original object: _PARAM5_":"\u4F7F\u7528_PARAM2_\u5207\u5272_PARAM1_\uFF0C\u7EB5\u5411\u5207\u5272_PARAM3_\u5757\uFF0C\u6A2A\u5411\u5207\u5272_PARAM4_\u5757\u3002\u5220\u9664\u539F\u59CB\u5BF9\u8C61\uFF1A_PARAM5_","Object to be sliced":"\u8981\u5207\u5272\u7684\u5BF9\u8C61","Object used for sliced pieces":"\u7528\u4E8E\u5207\u5272\u540E\u5C0F\u5757\u7684\u5BF9\u8C61","Recommended: Use a sprite that is a single white pixel":"\u5EFA\u8BAE\uFF1A\u4F7F\u7528\u5355\u4E2A\u767D\u8272\u50CF\u7D20\u7684\u7CBE\u7075","Vertical slices":"\u7EB5\u5411\u5207\u5757","Horizontal slices":"\u6A2A\u5411\u5207\u5757","Delete original object":"\u5220\u9664\u539F\u59CB\u5BF9\u8C61","Return the blue component of the pixel at the specified position.":"\u8FD4\u56DE\u6307\u5B9A\u4F4D\u7F6E\u50CF\u7D20\u7684\u84DD\u8272\u5206\u91CF\u3002","Read pixel blue":"\u8BFB\u53D6\u50CF\u7D20\u7684\u84DD\u8272","Return the green component of the pixel at the specified position.":"\u8FD4\u56DE\u6307\u5B9A\u4F4D\u7F6E\u50CF\u7D20\u7684\u7EFF\u8272\u5206\u91CF\u3002","Read pixel green":"\u8BFB\u53D6\u50CF\u7D20\u7684\u7EFF\u8272","Return the red component of the pixel at the specified position.":"\u8FD4\u56DE\u6307\u5B9A\u4F4D\u7F6E\u50CF\u7D20\u7684\u7EA2\u8272\u5206\u91CF\u3002","Read pixel red":"\u8BFB\u53D6\u50CF\u7D20\u7684\u7EA2\u8272","Object spawner 2D area":"\u7269\u4F53\u751F\u6210\u5668 2D \u533A\u57DF","Spawn (create) objects periodically.":"\u5468\u671F\u6027\u5730\u4EA7\u751F\uFF08\u521B\u5EFA\uFF09\u5BF9\u8C61\u3002","Object spawner":"\u5BF9\u8C61\u751F\u6210\u5668","Spawn period":"\u751F\u6210\u5468\u671F","Offset X (relative to position of spawner)":"X\u504F\u79FB\uFF08\u76F8\u5BF9\u4E8E\u751F\u6210\u4F4D\u7F6E\uFF09","Offset Y (relative to position of spawner)":"Y\u504F\u79FB\uFF08\u76F8\u5BF9\u4E8E\u751F\u6210\u4F4D\u7F6E\uFF09","Max objects in the scene (per spawner)":"\u573A\u666F\u4E2D\u7684\u5BF9\u8C61\u6700\u5927\u6570\u91CF\uFF08\u6BCF\u4E2A\u751F\u6210\u5668\uFF09","Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"\u8BBE\u7F6E\u4E3A 0 \u4EE5\u53D6\u6D88\u9650\u5236\uFF0C\u9650\u5236\u573A\u666F\u4E2D\u7531\u6B64\u751F\u6210\u5668\u521B\u5EFA\u7684\u5BF9\u8C61\u6570\u91CF\u3002","Spawner capacity":"\u751F\u6210\u5668\u5BB9\u91CF","Number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"\u6B64\u751F\u6210\u5668\u53EF\u4EE5\u521B\u5EFA\u7684\u5BF9\u8C61\u6570\u91CF\u3002\u6BCF\u6B21\u751F\u6210\u5BF9\u8C61\u65F6\u90FD\u4F1A\u51CF\u5C11\u8FD9\u4E2A\u6570\u91CF\u3002","Unlimited capacity":"\u65E0\u9650\u5BB9\u91CF","Use random positions":"\u4F7F\u7528\u968F\u673A\u4F4D\u7F6E","Objects will be created at a random position inside the spawner. Useful for making large spawner areas.":"\u5BF9\u8C61\u5C06\u5728\u751F\u6210\u5668\u5185\u7684\u968F\u673A\u4F4D\u7F6E\u521B\u5EFA\u3002\u9002\u7528\u4E8E\u521B\u5EFA\u5927\u578B\u751F\u6210\u533A\u57DF\u3002","Spawn (create) objects periodically. This action must be run every frame to work. When the max quantity is reached and an instance is deleted, the spawner waits the duration of the spawn period before creating another instance. Spawned objects are automatically linked to the spawner.":"\u5B9A\u671F\u4EA7\u751F\uFF08\u521B\u5EFA\uFF09\u7269\u4F53\u3002\u6B64\u64CD\u4F5C\u5FC5\u987B\u6BCF\u5E27\u8FD0\u884C\u624D\u80FD\u751F\u6548\u3002\u5F53\u8FBE\u5230\u6700\u5927\u6570\u91CF\u5E76\u5220\u9664\u4E00\u4E2A\u5B9E\u4F8B\u65F6\uFF0C\u751F\u6210\u5668\u5C06\u5728\u4EA7\u751F\u53E6\u4E00\u4E2A\u5B9E\u4F8B\u4E4B\u524D\u7B49\u5F85\u751F\u6210\u5468\u671F\u7684\u6301\u7EED\u65F6\u95F4\u3002\u751F\u6210\u7684\u5BF9\u8C61\u4F1A\u81EA\u52A8\u4E0E\u751F\u6210\u5668\u94FE\u63A5\u3002","Spawn objects periodically":"\u5B9A\u671F\u4EA7\u751F\u7269\u4F53","Periodically spawn (create) a _PARAM2_ located at spawner _PARAM0_":"\u5B9A\u671F\u751F\u6210\uFF08\u521B\u5EFA\uFF09\u4F4D\u4E8E\u751F\u6210\u70B9_PARAM0_\u5904\u7684_PARAM2_","Object that will be created":"\u5C06\u8981\u521B\u5EFA\u7684\u5BF9\u8C61","Change the offset X relative to the center of spawner (in pixels).":"\u76F8\u5BF9\u4E8E\u751F\u6210\u70B9\u4E2D\u5FC3\u7684\u504F\u79FBX\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Offset on X axis (deprecated)":"\u5728X\u8F74\u4E0A\u7684\u504F\u79FB\uFF08\u5DF2\u5F03\u7528\uFF09","Change the offset X of _PARAM0_ to _PARAM2_ pixels":"\u5C06_PARAM0_\u7684\u504F\u79FBX\u6539\u4E3A_PARAM2_\u50CF\u7D20","Change the offset Y relative to the center of spawner (in pixels).":"\u76F8\u5BF9\u4E8E\u751F\u6210\u70B9\u4E2D\u5FC3\u7684\u504F\u79FBY\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Offset on Y axis (deprecated)":"\u5728Y\u8F74\u4E0A\u7684\u504F\u79FB\uFF08\u5DF2\u5F03\u7528\uFF09","Change the offset Y of _PARAM0_ to _PARAM2_ pixels":"\u5C06_PARAM0_\u7684\u504F\u79FBY\u6539\u4E3A_PARAM2_\u50CF\u7D20","Change the spawn period (in seconds).":"\u66F4\u6539\u751F\u6210\u5468\u671F\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Change the spawn period of _PARAM0_ to _PARAM2_ seconds":"\u5C06_PARAM0_\u7684\u751F\u6210\u5468\u671F\u66F4\u6539\u4E3A_PARAM2_\u79D2","Return the offset X relative to the center of spawner (in pixels).":"\u8FD4\u56DE\u751F\u6210\u70B9\u4E2D\u5FC3\u7684\u504F\u79FBX\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Offset X (deprecated)":"X\u8F74\u504F\u79FB\uFF08\u5DF2\u5F03\u7528\uFF09","Return the offset Y relative to the center of spawner (in pixels).":"\u8FD4\u56DE\u751F\u6210\u70B9\u4E2D\u5FC3\u7684\u504F\u79FBY\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Offset Y (deprecated)":"Y\u8F74\u504F\u79FB\uFF08\u5DF2\u5F03\u7528\uFF09","Return the spawn period (in seconds).":"\u8FD4\u56DE\u751F\u6210\u5468\u671F\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Restart the cooldown of a spawner.":"\u91CD\u65B0\u542F\u52A8\u751F\u6210\u70B9\u7684\u51B7\u5374\u3002","Restart spawning cooldown":"\u91CD\u65B0\u542F\u52A8\u751F\u6210\u51B7\u5374","Restart the cooldown of _PARAM0_":"\u91CD\u65B0\u542F\u52A8_PARAM0_\u7684\u51B7\u5374","Return the remaining time before the next spawn (in seconds). Useful for triggering visual and sound effects.":"\u8FD4\u56DE\u4E0B\u4E00\u6B21\u751F\u6210\u524D\u7684\u5269\u4F59\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002\u7528\u4E8E\u89E6\u53D1\u89C6\u89C9\u548C\u97F3\u9891\u6548\u679C\u3002","Time before the next spawn":"\u4E0B\u6B21\u751F\u6210\u524D\u7684\u65F6\u95F4","_PARAM0_ just spawned an object":"_PARAM0_\u521A\u521A\u751F\u6210\u4E86\u4E00\u4E2A\u5BF9\u8C61","Check if an object has just been created by this spawner. Useful for triggering visual and sound effects.":"\u68C0\u67E5\u662F\u5426\u6709\u5BF9\u8C61\u88AB\u6B64\u751F\u6210\u70B9\u521A\u521A\u521B\u5EFA\u3002\u7528\u4E8E\u89E6\u53D1\u89C6\u89C9\u548C\u97F3\u9891\u6548\u679C\u3002","Object was just spawned":"\u5BF9\u8C61\u521A\u521A\u88AB\u751F\u6210","the max objects in the scene (per spawner) of the object. Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"\u573A\u666F\u4E2D\u7684\u5BF9\u8C61\u7684\u6700\u5927\u6570\u91CF\uFF08\u6BCF\u4E2A\u751F\u6210\u70B9\uFF09\u3002\u9650\u5236\u4E86\u7531\u6B64\u751F\u6210\u70B9\u521B\u5EFA\u7684\u573A\u666F\u4E2D\u7684\u5BF9\u8C61\u6570\u91CF\u3002\u5C06\u5176\u8BBE\u7F6E\u4E3A0\u8868\u793A\u65E0\u9650\u5236\u3002","the max objects in the scene (per spawner)":"\u573A\u666F\u4E2D\u7684\u5BF9\u8C61\u7684\u6700\u5927\u6570\u91CF\uFF08\u6BCF\u4E2A\u751F\u6210\u70B9\uFF09","Check if spawner has unlimited capacity.":"\u68C0\u67E5\u751F\u6210\u70B9\u662F\u5426\u5177\u6709\u65E0\u9650\u5BB9\u91CF\u3002","_PARAM0_ has unlimited capacity":"_PARAM0_\u5177\u6709\u65E0\u9650\u5BB9\u91CF","Change unlimited capacity of spawner.":"\u66F4\u6539\u751F\u6210\u70B9\u7684\u65E0\u9650\u5BB9\u91CF\u3002","Unlimited object capacity":"\u65E0\u9650\u5BF9\u8C61\u5BB9\u91CF","_PARAM0_ unlimited capacity: _PARAM2_":"_PARAM0_\u65E0\u9650\u5BB9\u91CF\uFF1A_PARAM2_","UnlimitedObjectCapacity":"UnlimitedObjectCapacity","the number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"\u53EF\u7531\u6B64\u751F\u6210\u7684\u5BF9\u8C61\u6570\u91CF\u3002\u6BCF\u6B21\u751F\u6210\u5BF9\u8C61\u65F6\u51CF\u5C11\u4E00\u6B21\u3002","the spawner capacity":"\u751F\u6210\u5668\u5BB9\u91CF","Check if using random positions. Useful for making large spawner areas.":"\u68C0\u67E5\u662F\u5426\u4F7F\u7528\u968F\u673A\u4F4D\u7F6E\u3002\u7528\u4E8E\u521B\u5EFA\u5927\u578B\u751F\u6210\u5668\u533A\u57DF\u3002","Use random positions inside _PARAM0_":"\u5728_PARAM0_\u5185\u4F7F\u7528\u968F\u673A\u4F4D\u7F6E","Enable (or disable) random positions. Useful for making large spawner areas.":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u968F\u673A\u4F4D\u7F6E\u3002\u7528\u4E8E\u521B\u5EFA\u5927\u578B\u751F\u6210\u5668\u533A\u57DF\u3002","Use random positions inside _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u5185\u4F7F\u7528\u968F\u673A\u4F4D\u7F6E\uFF1A_PARAM2_","RandomPosition":"\u968F\u673A\u4F4D\u7F6E","Object Stack":"\u5BF9\u8C61\u5806\u6808","An ordered list of objects and a shuffle action.":"\u4E00\u4E2A\u5BF9\u8C61\u7684\u6709\u5E8F\u5217\u8868\u548C\u4E00\u4E2A\u6D17\u724C\u64CD\u4F5C\u3002","Check if the stack contains the object between a range. The lower and upper bounds are included.":"\u68C0\u67E5\u5806\u6808\u662F\u5426\u5305\u542B\u5BF9\u8C61\u5904\u4E8E\u8303\u56F4\u5185\u3002\u5305\u542B\u4E0B\u9650\u548C\u4E0A\u9650\u3002","Contain between a range":"\u5305\u542B\u5728\u4E00\u5B9A\u8303\u56F4\u5185","_PARAM3_ is into the stack of _PARAM1_ between _PARAM4_ and _PARAM5_":"_PARAM3_ \u5904\u4E8E _PARAM1_ \u7684\u5806\u6808\u4E4B\u95F4\u7684 _PARAM4_ \u548C _PARAM5_","Stack":"\u5806\u6808","Stack behavior":"\u5806\u6808\u884C\u4E3A","Element":"\u5143\u7D20","Lower bound":"\u4E0B\u754C","Upper bound":"\u4E0A\u754C","Check if the stack contains the object at a height.":"\u68C0\u67E5\u5806\u6808\u662F\u5426\u5305\u542B\u5BF9\u8C61\u7684\u9AD8\u5EA6\u3002","Contain at":"\u5305\u542B\u4E8E","_PARAM3_ is into the stack of _PARAM1_ at _PARAM4_":"_PARAM3_ \u5904\u4E8E _PARAM1_ \u7684\u5806\u6808\u5185\uFF0C\u9AD8\u5EA6\u4E3A _PARAM4_","Check if an object is on the stack top.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u4F4D\u4E8E\u5806\u6808\u9876\u90E8\u3002","Stack top":"\u5806\u6808\u9876\u90E8","_PARAM3_ is on top of the stack of _PARAM1_":"_PARAM3_ \u5904\u4E8E _PARAM1_ \u7684\u5806\u6808\u9876\u90E8","Check if the stack contains the object.":"\u68C0\u67E5\u5806\u6808\u662F\u5426\u5305\u542B\u5BF9\u8C61\u3002","Contain":"\u5305\u542B","_PARAM3_ is into the stack of _PARAM1_":"_PARAM3_ \u5904\u4E8E _PARAM1_ \u7684\u5806\u6808\u5185","Hold an ordered list of objects.":"\u4FDD\u5B58\u4E00\u7CFB\u5217\u6709\u5E8F\u7684\u5BF9\u8C61\u3002","Add the object on the top of the stack.":"\u5C06\u5BF9\u8C61\u6DFB\u52A0\u5230\u5806\u6808\u9876\u90E8\u3002","Add on top":"\u5728\u9876\u90E8\u6DFB\u52A0","Add _PARAM2_ on top of the stack of _PARAM0_":"\u5728_PARAM0_\u7684\u5806\u6808\u9876\u90E8\u6DFB\u52A0_PARAM2_","Insert the object into the stack.":"\u5C06\u5BF9\u8C61\u63D2\u5165\u5806\u6808\u3002","Insert into the stack":"\u63D2\u5165\u5806\u6808","Insert _PARAM2_ into the stack of _PARAM0_ at height: _PARAM3_":"\u5C06_PARAM2_\u63D2\u5165_PARAM0_\u7684\u5806\u6808\u4E2D\uFF0C\u9AD8\u5EA6\u4E3A\uFF1A_PARAM3_","Remove the object from the stack.":"\u4ECE\u5806\u6808\u4E2D\u79FB\u9664\u5BF9\u8C61\u3002","Remove from the stack":"\u4ECE\u5806\u6808\u4E2D\u79FB\u9664","Remove _PARAM2_ from the stack of _PARAM0_":"\u4ECE_PARAM0_\u7684\u5806\u6808\u4E2D\u79FB\u9664_PARAM2_","Remove any object from the stack.":"\u4ECE\u5806\u6808\u4E2D\u79FB\u9664\u4EFB\u4F55\u5BF9\u8C61\u3002","Clear":"\u6E05\u7A7A","Remove every object of the stack of _PARAM0_":"\u79FB\u9664_PARAM0_\u7684\u5806\u6808\u4E2D\u7684\u6240\u6709\u5BF9\u8C61","Move the objects from a stack into another.":"\u5C06\u5BF9\u8C61\u4ECE\u4E00\u4E2A\u5806\u6808\u79FB\u52A8\u5230\u53E6\u4E00\u4E2A\u5806\u6808\u3002","Move into the stack":"\u79FB\u5230\u5806\u6808\u4E2D","Move the objects of the stack of _PARAM3_ from:_PARAM5_ to:_PARAM6_ into the stack of _PARAM0_ at height: _PARAM2_":"\u5C06_PARAM3_\u5806\u6808\u4E2D\u7684\u5BF9\u8C61\u4ECE\uFF1A_PARAM5_\u79FB\u52A8\u5230\uFF1A_PARAM6_\u79FB\u5230_PARAM0_\u7684\u5806\u6808\u4E2D\uFF0C\u9AD8\u5EA6\u4E3A\uFF1A_PARAM2_","Move all the object from a stack into another.":"\u5C06\u5806\u6808\u4E2D\u7684\u6240\u6709\u5BF9\u8C61\u79FB\u52A8\u5230\u53E6\u4E00\u4E2A\u5806\u6808\u3002","Move all into the stack":"\u79FB\u5230\u5806\u6808\u4E2D\u6240\u6709\u90E8\u5206","Move all the objects of the stack of _PARAM3_ into the stack of _PARAM0_ at height: _PARAM2_":"\u5C06_PARAM3_\u7684\u5806\u6808\u4E2D\u7684\u6240\u6709\u5BF9\u8C61\u79FB\u5230_PARAM0_\u7684\u5806\u6808\u4E2D\uFF0C\u9AD8\u5EA6\u4E3A\uFF1A_PARAM2_","Move all the object from a stack into another one at the top.":"\u5C06\u5806\u6808\u4E2D\u7684\u6240\u6709\u5BF9\u8C61\u79FB\u52A8\u5230\u53E6\u4E00\u4E2A\u5806\u6808\u7684\u9876\u90E8\u3002","Move all on top of the stack":"\u79FB\u5230\u5806\u6808\u7684\u9876\u90E8","Move all the objects of the stack of _PARAM2_ on the top of the stack of _PARAM0_":"\u5C06_PARAM2_\u7684\u5806\u6808\u4E2D\u7684\u6240\u6709\u5BF9\u8C61\u79FB\u5230_PARAM0_\u7684\u5806\u6808\u7684\u9876\u90E8","Shuffle the stack.":"\u6D17\u724C\u5806\u6808\u3002","Shuffle":"\u6D17\u724C","Shuffle the stack of _PARAM0_":"\u6D17\u724C_PARAM0_\u7684\u5806\u6808","The height of an element in the stack.":"\u5806\u6808\u4E2D\u5143\u7D20\u7684\u9AD8\u5EA6\u3002","Height of a stack element":"\u5806\u6808\u5143\u7D20\u7684\u9AD8\u5EA6","the number of objects in the stack.":"\u6808\u4E2D\u5BF9\u8C61\u7684\u6570\u91CF\u3002","Stack height":"\u6808\u7684\u9AD8\u5EA6","the number of objects in the stack":"\u6808\u4E2D\u5BF9\u8C61\u7684\u6570\u91CF","Compare the number of objects in the stack.":"\u6BD4\u8F83\u6808\u4E2D\u5BF9\u8C61\u7684\u6570\u91CF\u3002","Stack height (deprecated)":"\u6808\u9AD8\u5EA6\uFF08\u5DF2\u5F03\u7528\uFF09","_PARAM0_ has _PARAM2_ objects in its stack":"_PARAM0_\u7684\u6808\u4E2D\u6709_PARAM2_\u4E2A\u5BF9\u8C61","Check if the stack is empty.":"\u68C0\u67E5\u6808\u662F\u5426\u4E3A\u7A7A\u3002","Is empty":"\u4E3A\u7A7A","The stack of _PARAM0_ is empty":"_PARAM0_\u7684\u6808\u4E3A\u7A7A","Make objects orbit around a center object":"\u4F7F\u7269\u4F53\u56F4\u7ED5\u4E00\u4E2A\u4E2D\u5FC3\u5BF9\u8C61\u8FD0\u52A8","Make objects orbit around a center object in a circular or elliptical shape.":"\u4F7F\u7269\u4F53\u5728\u5706\u5F62\u6216\u692D\u5706\u5F62\u7684\u65B9\u5F0F\u56F4\u7ED5\u4E2D\u5FC3\u5BF9\u8C61\u8FD0\u52A8\u3002","Move objects in orbit around a center object.":"\u73AF\u7ED5\u4E2D\u5FC3\u5BF9\u8C61\u79FB\u52A8\u5BF9\u8C61\u3002","Move objects in orbit around a center object":"\u73AF\u7ED5\u4E2D\u5FC3\u5BF9\u8C61\u79FB\u52A8\u5BF9\u8C61","Animate _PARAM3_ copies of _PARAM2_ that orbit around _PARAM1_ at a distance of _PARAM5_ with orbit speed of _PARAM4_ degrees per second. Rotate orbiting objects at _PARAM6_ degrees per second. Start objects with an angle offset of _PARAM9_ degrees. Create objects on layer _PARAM7_ with Z value _PARAM8_. Reset locations of orbiting objects after quantity is reduced: _PARAM10_":"\u4EE5 _PARAM5_ \u7684\u8DDD\u79BB\u56F4\u7ED5 _PARAM1_ \u65CB\u8F6C _PARAM3_ \u4E2A _PARAM2_ \u7684\u526F\u672C\u3002\u4EE5 _PARAM4_ \u5EA6\u6BCF\u79D2\u7684\u901F\u5EA6\u65CB\u8F6C\u8F68\u9053\u5BF9\u8C61\u3002 \u4EE5 _PARAM6_ \u5EA6\u6BCF\u79D2\u7684\u901F\u5EA6\u65CB\u8F6C\u8F68\u9053\u5BF9\u8C61\u3002 \u5728\u56FE\u5C42_PARAM7_\u4E0A\u521B\u5EFA\u5BF9\u8C61\uFF0C\u5177\u6709Z\u503C_PARAM8_\u3002 \u5F53\u6570\u91CF\u51CF\u5C11\u540E\uFF0C\u91CD\u65B0\u8BBE\u7F6E\u8F68\u9053\u5BF9\u8C61\u7684\u4F4D\u7F6E: _PARAM10_","Center object":"\u4E2D\u5FC3\u5BF9\u8C61","Orbiting object":"\u73AF\u7ED5\u5BF9\u8C61","Cannot be the same object used for the Center object":"\u4E0D\u80FD\u4E0E\u4E2D\u5FC3\u5BF9\u8C61\u76F8\u540C\u7684\u5BF9\u8C61","Quantity of orbiting objects":"\u73AF\u7ED5\u5BF9\u8C61\u6570\u91CF","Orbit speed (in degrees per second)":"\u6BCF\u79D2\u7684\u8F68\u9053\u901F\u5EA6\uFF08\u89D2\u5EA6\uFF09","Use negative numbers to orbit counter-clockwise":"\u4F7F\u7528\u8D1F\u6570\u6309\u9006\u65F6\u9488\u65B9\u5411\u7ED5\u884C","Distance from the center object (in pixels)":"\u8DDD\u4E2D\u5FC3\u7269\u4F53\u7684\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","Angular speed (in degrees per second)":"\u89D2\u901F\u5EA6\uFF08\u6BCF\u79D2\u7684\u89D2\u5EA6\uFF09","Use negative numbers to rotate counter-clockwise":"\u4F7F\u7528\u8D1F\u6570\u6309\u9006\u65F6\u9488\u65B9\u5411\u65CB\u8F6C","Layer that orbiting objects will be created on (base layer if empty)":"\u653E\u7F6E\u7ED5\u884C\u5BF9\u8C61\u7684\u56FE\u5C42\uFF08\u5982\u679C\u4E3A\u7A7A\u5219\u4E3A\u57FA\u672C\u56FE\u5C42\uFF09","Z order of orbiting objects":"\u7ED5\u884C\u7269\u4F53\u7684Z\u987A\u5E8F","Starting angle offset (in degrees)":"\u521D\u59CB\u89D2\u5EA6\u504F\u79FB\uFF08\u89D2\u5EA6\uFF09","Reset locations of orbiting objects after quantity is reduced":"\u51CF\u5C11\u6570\u91CF\u540E\u91CD\u7F6E\u7ED5\u884C\u7269\u4F53\u7684\u4F4D\u7F6E","Move objects in elliptical orbit around a center object. Z-order is changed to make 3D effect.":"\u56F4\u7ED5\u4E2D\u5FC3\u7269\u4F53\u7684\u692D\u5706\u8F68\u9053\u4E0A\u79FB\u52A8\u7269\u4F53\u3002Z\u987A\u5E8F\u88AB\u66F4\u6539\u4EE5\u4EA7\u751F3D\u6548\u679C\u3002","Move objects in elliptical orbit around a center object":"\u56F4\u7ED5\u4E2D\u5FC3\u7269\u4F53\u7684\u692D\u5706\u8F68\u9053\u4E0A\u79FB\u52A8\u7269\u4F53","Animate _PARAM3_ copies of _PARAM2_ in elliptical orbit around _PARAM1_ with vertical radius of _PARAM5_, horizontal radius of _PARAM9_ and an orbit speed of _PARAM4_ degrees per second. Foreground side is _PARAM10_. Rotate orbiting objects at _PARAM6_ degrees per second":"\u5728\u4E2D\u5FC3\u7269\u4F53\u5468\u56F4\u7684\u692D\u5706\u8F68\u9053\u4E0A\u4EE5\u6BCF\u79D2_PARAM4_\u5EA6\u7684\u901F\u5EA6\u52A8\u753B\u5316_PARAM3_\u4E2A_PARAM2_\u526F\u672C\u3002\u524D\u666F\u662F_PARAM10_\u3002\u4EE5\u6BCF\u79D2_PARAM6_\u5EA6\u7684\u901F\u5EA6\u65CB\u8F6C\u7ED5\u884C\u5BF9\u8C61\u3002","Vertical distance from the center object (pixels)":"\u8DDD\u4E2D\u5FC3\u7269\u4F53\u7684\u5782\u76F4\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","Horizontal distance from the center object (pixels)":"\u8DDD\u4E2D\u5FC3\u7269\u4F53\u7684\u6C34\u5E73\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","Foreground Side":"\u524D\u666F\u9762","Delete orbiting objects that are linked to a center object.":"\u5220\u9664\u94FE\u63A5\u5230\u4E2D\u5FC3\u7269\u4F53\u7684\u7ED5\u884C\u7269\u4F53\u3002","Delete orbiting objects that are linked to a center object":"\u5220\u9664\u94FE\u63A5\u5230\u4E2D\u5FC3\u7269\u4F53\u7684\u7ED5\u884C\u7269\u4F53","Delete all _PARAM2_ that are linked to _PARAM1_":"\u5220\u9664\u6240\u6709\u94FE\u63A5\u5230_PARAM1_\u7684_PARAM2_","Cannot be the same object that was used for the Center object":"\u4E0D\u80FD\u4E0E\u7528\u4E8E\u4E2D\u5FC3\u7269\u4F53\u7684\u76F8\u540C\u7269\u4F53","Labeled button":"\u5E26\u6807\u7B7E\u7684\u6309\u94AE","A button with a label.":"\u4E00\u4E2A\u5E26\u6807\u7B7E\u7684\u6309\u94AE\u3002","The finite state machine used internally by the button object.":"\u6309\u94AE\u7269\u4F53\u5185\u90E8\u4F7F\u7528\u7684\u6709\u9650\u72B6\u6001\u673A\u3002","Button finite state machine":"\u6309\u94AE\u6709\u9650\u72B6\u6001\u673A","Change the text style when the button is hovered.":"\u5F53\u9F20\u6807\u60AC\u505C\u5728\u6309\u94AE\u4E0A\u65F6\u66F4\u6539\u6587\u672C\u6837\u5F0F\u3002","Hover text style":"\u60AC\u505C\u6587\u672C\u6837\u5F0F","Outline on hover":"\u60AC\u505C\u65F6\u7684\u8F6E\u5ED3","Hover color":"\u60AC\u505C\u989C\u8272","Enable shadow on hover":"\u60AC\u505C\u65F6\u542F\u7528\u9634\u5F71","Hover font size":"\u60AC\u505C\u5B57\u4F53\u5927\u5C0F","Idle font size":"\u9759\u6B62\u5B57\u4F53\u5927\u5C0F","Idle color":"\u9759\u6B62\u989C\u8272","Check if isHovered.":"\u68C0\u67E5\u662F\u5426\u60AC\u505C\u3002","IsHovered":"\u662F\u5426\u60AC\u505C","_PARAM0_ isHovered":"_PARAM0_ \u662F\u5426\u60AC\u505C","Change if isHovered.":"\u82E5\u60AC\u505C\u5219\u66F4\u6539\u3002","_PARAM0_ isHovered: _PARAM2_":"_PARAM0_ \u662F\u5426\u60AC\u505C: _PARAM2_","Return the text color":"\u8FD4\u56DE\u6587\u672C\u989C\u8272","Text color":"\u6587\u672C\u989C\u8272","Hover bitmap text style":"\u60AC\u505C\u4F4D\u56FE\u6587\u672C\u6837\u5F0F","Hover prefix":"\u60AC\u505C\u524D\u7F00","Hover suffix":"\u60AC\u505C\u540E\u7F00","Idle text":"\u9759\u6B62\u6587\u672C","Button with a label.":"\u5E26\u6807\u7B7E\u7684\u6309\u94AE\u3002","Label":"\u6807\u7B7E","Hovered fade out duration":"\u60AC\u505C\u6E10\u53D8\u6D88\u5931\u6301\u7EED\u65F6\u95F4","States":"\u72B6\u6001","Label offset on Y axis when pressed":"\u6309\u4E0B\u65F6Y\u8F74\u7684\u6807\u7B7E\u504F\u79FB","Change the text of the button label.":"\u66F4\u6539\u6309\u94AE\u6807\u7B7E\u7684\u6587\u672C\u3002","Label text":"\u6807\u7B7E\u6587\u672C","Change the text of _PARAM0_ to _PARAM1_":"\u5C06_PARAM0_\u7684\u6587\u672C\u66F4\u6539\u4E3A_PARAM1_","the label text.":"\u6807\u7B7E\u6587\u672C\u3002","the label text":"\u6807\u7B7E\u6587\u672C","De/activate interactions with the button.":"\u6FC0\u6D3B/\u505C\u7528\u4E0E\u6309\u94AE\u7684\u4EA4\u4E92\u3002","De/activate interactions":"\u6FC0\u6D3B/\u505C\u7528\u4EA4\u4E92","Activate interactions with _PARAM0_: _PARAM1_":"\u6FC0\u6D3B_PARAM0_\u7684\u4EA4\u4E92\uFF1A_PARAM1_","Activate":"\u6FC0\u6D3B","Check if interactions are activated on the button.":"\u68C0\u67E5\u6309\u94AE\u662F\u5426\u6FC0\u6D3B\u4EA4\u4E92\u3002","Interactions activated":"\u4EA4\u4E92\u5DF2\u6FC0\u6D3B","Interactions on _PARAM0_ are activated":"_PARAM0_\u7684\u4EA4\u4E92\u5DF2\u6FC0\u6D3B","the labelOffset of the object.":"\u5BF9\u8C61\u7684 labelOffset\u3002","LabelOffset":"\u6807\u7B7E\u504F\u79FB","the labelOffset":"labelOffset","Resource bar (continuous)":"\u8D44\u6E90\u6761\uFF08\u8FDE\u7EED\uFF09","A bar that represents a resource in the game (health, mana, ammo, etc).":"\u8868\u793A\u6E38\u620F\u4E2D\u7684\u8D44\u6E90\uFF08\u751F\u547D\u3001\u6CD5\u529B\u3001\u5F39\u836F\u7B49\uFF09\u7684\u6761\u5F62\u56FE\u3002","Resource bar":"\u8D44\u6E90\u680F","Previous high value":"\u4EE5\u524D\u7684\u9AD8\u503C","Previous high value conservation duration (in seconds)":"\u4EE5\u524D\u7684\u9AD8\u503C\u4FDD\u7559\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09","the value of the object.":"\u5BF9\u8C61\u7684\u503C\u3002","the value":"\u503C","the maximum value of the object.":"\u5BF9\u8C61\u7684\u6700\u5927\u503C\u3002","the maximum value":"\u6700\u5927\u503C","Check if the bar is empty.":"\u68C0\u67E5\u680F\u662F\u5426\u4E3A\u7A7A\u3002","Empty":"\u7A7A","_PARAM0_ bar is empty":"_PARAM0_\u680F\u4E3A\u7A7A","Check if the bar is full.":"\u68C0\u67E5\u680F\u662F\u5426\u6EE1\u3002","Full":"\u6EE1","_PARAM0_ bar is full":"_PARAM0_\u680F\u5DF2\u6EE1","the previous high value of the resource bar before the current change.":"\u5F53\u524D\u66F4\u6539\u4E4B\u524D\u8D44\u6E90\u680F\u7684\u5148\u524D\u9AD8\u503C\u3002","the previous high value":"\u5148\u524D\u9AD8\u503C","Force the previous resource value to update to the current one.":"\u5F3A\u5236\u5148\u524D\u7684\u8D44\u6E90\u503C\u66F4\u65B0\u4E3A\u5F53\u524D\u503C\u3002","Update previous value":"\u66F4\u65B0\u5148\u524D\u503C","Update the previous resource value of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u5148\u524D\u8D44\u6E90\u503C","the previous high value conservation duration (in seconds) of the object.":"\u5BF9\u8C61\u7684\u5148\u524D\u9AD8\u503C\u4FDD\u7559\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Previous high value conservation duration":"\u5148\u524D\u9AD8\u503C\u4FDD\u7559\u65F6\u95F4","the previous high value conservation duration":"\u5148\u524D\u9AD8\u503C\u4FDD\u7559\u65F6\u95F4","Check if the resource value is changing.":"\u68C0\u67E5\u8D44\u6E90\u503C\u662F\u5426\u5728\u6539\u53D8\u3002","Value is changing":"\u503C\u5728\u6539\u53D8","_PARAM0_ value is changing":"_PARAM0_\u503C\u5728\u6539\u53D8","Initial value":"\u521D\u59CB\u503C","It's used to detect a change at hot reload.":"\u7528\u4E8E\u68C0\u6D4B\u70ED\u91CD\u65B0\u52A0\u8F7D\u65F6\u7684\u66F4\u6539\u3002","Easing duration":"\u7F13\u52A8\u6301\u7EED\u65F6\u95F4","Show the label":"\u663E\u793A\u6807\u7B7E","Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.":"\u6839\u636E\u6309\u94AE\u914D\u7F6E\u5C45\u4E2D\u680F\u3002\u5728\u6309\u94AE\u8C03\u6574\u5927\u5C0F\u65F6\uFF0C\u8FD9\u5728doStepPostEvents\u4E2D\u4F7F\u7528\u3002","Update layout":"\u66F4\u65B0\u5E03\u5C40","Update layout of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u5E03\u5C40","_PARAM0_ is empty":"_PARAM0_\u4E3A\u7A7A","_PARAM0_ is full":"_PARAM0_\u5DF2\u6EE1","the previous value conservation duration (in seconds) of the object.":"\u5BF9\u8C61\u7684\u5148\u524D\u503C\u4FDD\u7559\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Previous value conservation duration":"\u5148\u524D\u503C\u4FDD\u7559\u65F6\u95F4","the previous value conservation duration":"\u5148\u524D\u503C\u7684\u4FDD\u7559\u65F6\u95F4","Value width":"\u503C\u7684\u5BBD\u5EA6","Check if the label is shown.":"\u68C0\u67E5\u6807\u7B7E\u662F\u5426\u663E\u793A\u3002","Label is shown":"\u6807\u7B7E\u5DF2\u663E\u793A","_PARAM0_ label is shown":"_PARAM0_ \u6807\u7B7E\u5DF2\u663E\u793A","Show (or hide) the label on the bar.":"\u5728\u6761\u4E0A\u663E\u793A\uFF08\u6216\u9690\u85CF\uFF09\u6807\u7B7E\u3002","Show label":"\u663E\u793A\u6807\u7B7E","Show the label of _PARAM0_: _PARAM1_":"\u663E\u793A _PARAM0_ \u7684\u6807\u7B7E\uFF1A_PARAM1_","Update the text that display the current value and maximum value.":"\u66F4\u65B0\u663E\u793A\u5F53\u524D\u503C\u548C\u6700\u5927\u503C\u7684\u6587\u672C\u3002","Update label":"\u66F4\u65B0\u6807\u7B7E","Update label of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u6807\u7B7E","Slider":"\u6ED1\u5757","Represent a value on a slider.":"\u5728\u6ED1\u5757\u4E0A\u8868\u793A\u4E00\u4E2A\u503C\u3002","Step size":"\u6B65\u957F","the minimum value of the object.":"\u5BF9\u8C61\u7684\u6700\u5C0F\u503C\u3002","the minimum value":"\u6700\u5C0F\u503C","the bar value bounds size.":"\u6761\u503C\u754C\u9650\u7684\u5927\u5C0F\u3002","the bar value bounds size":"\u6761\u503C\u754C\u9650\u7684\u5927\u5C0F","the step size of the object.":"\u5BF9\u8C61\u7684\u6B65\u957F\u3002","the step size":"\u6B65\u957F","Bar left margin":"\u6761\u5DE6\u8FB9\u8DDD","Bar":"\u6761","Bar top margin":"\u6761\u9876\u90E8\u8FB9\u8DDD","Bar right margin":"\u6761\u53F3\u8FB9\u8DDD","Bar bottom margin":"\u6761\u5E95\u90E8\u8FB9\u8DDD","Show the label when the value is changed":"\u5728\u503C\u6539\u53D8\u65F6\u663E\u793A\u6807\u7B7E","Label margin":"\u6807\u7B7E\u8FB9\u8DDD","Only used by the scene editor.":"\u4EC5\u7531\u573A\u666F\u7F16\u8F91\u5668\u4F7F\u7528\u3002","the value of the slider.":"\u6ED1\u5757\u7684\u503C\u3002","the minimum value of the slider.":"\u6ED1\u5757\u7684\u6700\u5C0F\u503C\u3002","the maximum value of the slider.":"\u6ED1\u5757\u7684\u6700\u5927\u503C\u3002","the step size of the slider.":"\u6ED1\u5757\u7684\u6B65\u957F\u3002","Update the thumb position according to the slider value.":"\u6839\u636E\u6ED1\u5757\u503C\u66F4\u65B0\u62C7\u6307\u4F4D\u7F6E\u3002","Update thumb position":"\u66F4\u65B0\u62C7\u6307\u4F4D\u7F6E","Update the thumb position of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u62C7\u6307\u4F4D\u7F6E","Update the slider configuration.":"\u66F4\u65B0\u6ED1\u5757\u914D\u7F6E\u3002","Update slider configuration":"\u66F4\u65B0\u6ED1\u5757\u914D\u7F6E","Update the slider configuration of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u6ED1\u5757\u914D\u7F6E","Check if the slider allows interactions.":"\u68C0\u67E5\u6ED1\u5757\u662F\u5426\u5141\u8BB8\u4EA4\u4E92\u3002","Parallax for Tiled Sprite":"\u5E73\u94FA\u7CBE\u7075\u7684\u89C6\u5DEE","Behaviors to animate Tiled Sprite objects in the background, following the camera with a parallax effect.":"\u7528\u4E8E\u5728\u80CC\u666F\u4E2D\u52A8\u753B\u5E73\u94FA\u7CBE\u7075\u5BF9\u8C61\u7684\u884C\u4E3A\uFF0C\u5E76\u4F7F\u7528\u89C6\u5DEE\u6548\u679C\u8DDF\u968F\u6444\u50CF\u673A\u3002","Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"\u5C06\u74F7\u7816\u7CBE\u7075\u7684\u56FE\u50CF\u6CBF\u7740\u89C6\u5DEE\u6548\u679C\u6C34\u5E73\u8DDF\u968F\u76F8\u673A\u3002\u5C06\u6B64\u6DFB\u52A0\u5230\u4E00\u4E2A\u5BF9\u8C61\u540E\uFF0C\u5C06\u8BE5\u5BF9\u8C61\u653E\u5728\u4E00\u4E2A\u4E0D\u79FB\u52A8\u7684\u56FE\u5C42\u4E0A\uFF0C\u5E76\u7F6E\u4E8E\u88AB\u8DDF\u968F\u7684\u56FE\u5C42\u540E\u9762\uFF08\u4F8B\u5982\uFF0C\u201C\u80CC\u666F\u201D\u56FE\u5C42\uFF09\u3002","Horizontal Parallax for a Tiled Sprite":"\u74F7\u7816\u7CBE\u7075\u7684\u6C34\u5E73\u89C6\u5DEE","Parallax factor (speed for the parallax, usually between 0 and 1)":"\u89C6\u5DEE\u7CFB\u6570\uFF08\u89C6\u5DEE\u901F\u5EA6\uFF0C\u901A\u5E38\u57280\u548C1\u4E4B\u95F4\uFF09","Layer to be followed (leave empty for the base layer)":"\u8981\u8DDF\u968F\u7684\u56FE\u5C42\uFF08\u7559\u7A7A\u4EE5\u4F7F\u7528\u57FA\u672C\u56FE\u5C42\uFF09","Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"\u5C06\u74F7\u7816\u7CBE\u7075\u7684\u56FE\u50CF\u5782\u76F4\u8DDF\u968F\u76F8\u673A\uFF0C\u4EE5\u4EA7\u751F\u89C6\u5DEE\u6548\u5E94\u3002\u6DFB\u52A0\u6B64\u6548\u679C\u5230\u4E00\u4E2A\u5BF9\u8C61\u540E\uFF0C\u5C06\u5BF9\u8C61\u653E\u5728\u4E00\u4E2A\u4E0D\u52A8\u7684\u56FE\u5C42\u4E0A\uFF0C\u653E\u5728\u88AB\u8DDF\u968F\u7684\u56FE\u5C42\u540E\u9762\uFF08\u4F8B\u5982\uFF0C\u4E00\u4E2A\u540D\u4E3A\u201C\u80CC\u666F\u201D\u7684\u56FE\u5C42\uFF09\u3002","Vertical Parallax for a Tiled Sprite":"\u74F7\u7816\u7CBE\u7075\u7684\u5782\u76F4\u89C6\u5DEE","Offset on Y axis":"Y\u8F74\u504F\u79FB","3D particle emitter":"3D \u7C92\u5B50\u53D1\u5C04\u5668","Display a large number of particles in 3D to create visual effects in a 3D game.":"\u57283D\u6E38\u620F\u4E2D\u663E\u793A\u5927\u91CF\u7C92\u5B50\u4EE5\u521B\u5EFA\u89C6\u89C9\u6548\u679C\u3002","Display a large number of particles to create visual effects.":"\u663E\u793A\u5927\u91CF\u7C92\u5B50\u4EE5\u521B\u5EFA\u89C6\u89C9\u6548\u679C\u3002","Start color":"\u8D77\u59CB\u989C\u8272","End color":"\u7ED3\u675F\u989C\u8272","Start opacity":"\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6","Flow of particles (particles per second)":"\u7C92\u5B50\u7684\u6D41\u52A8\uFF08\u6BCF\u79D2\u7684\u7C92\u5B50\u6570\uFF09","Start min size":"\u5F00\u59CB\u6700\u5C0F\u5C3A\u5BF8","Start max size":"\u5F00\u59CB\u6700\u5927\u5C3A\u5BF8","End scale":"\u7ED3\u675F\u6BD4\u4F8B","Start min speed":"\u5F00\u59CB\u6700\u5C0F\u901F\u5EA6","Start max speed":"\u5F00\u59CB\u6700\u5927\u901F\u5EA6","Min lifespan":"\u6700\u5C0F\u5BFF\u547D","Max lifespan":"\u6700\u5927\u5BFF\u547D","Emission duration":"\u53D1\u5C04\u6301\u7EED\u65F6\u95F4","Particles move with the emitter":"\u7C92\u5B50\u968F\u53D1\u5C04\u5668\u79FB\u52A8","Spay cone angle":"\u55B7\u5C04\u9525\u89D2","Blending":"\u6DF7\u5408","Gravity top":"\u91CD\u529B\u9876\u90E8","Delete when emission ends":"\u53D1\u5C04\u7ED3\u675F\u65F6\u5220\u9664","Z (elevation)":"Z\uFF08\u9AD8\u5EA6\uFF09","Deprecated":"\u5F03\u7528","Rotation on X axis":"X\u8F74\u65CB\u8F6C","Rotation on Y axis":"Y\u8F74\u65CB\u8F6C","Start min length":"\u5F00\u59CB\u6700\u5C0F\u957F\u5EA6","Trail":"\u5C3E\u8FF9","Start max length":"\u5F00\u59CB\u6700\u5927\u957F\u5EA6","Render mode":"\u6E32\u67D3\u6A21\u5F0F","Follow the object":"\u8DDF\u968F\u8BE5\u5BF9\u8C61","Tail end width ratio":"\u5C3E\u90E8\u5BBD\u5EA6\u6BD4","Update from properties.":"\u4ECE\u5C5E\u6027\u66F4\u65B0\u3002","Update from properties":"\u4ECE\u5C5E\u6027\u66F4\u65B0","Update from properties of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u5C5E\u6027","Update helper":"\u66F4\u65B0\u52A9\u624B","Update graphical helper of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u56FE\u5F62\u52A9\u624B","Update particle image":"\u66F4\u65B0\u7C92\u5B50\u56FE\u50CF","Update particle image of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u7C92\u5B50\u56FE\u50CF","Register in layer":"\u5728\u56FE\u5C42\u4E2D\u6CE8\u518C","Register _PARAM0_ in layer":"\u5728\u56FE\u5C42\u4E2D\u6CE8\u518C _PARAM0_","Delete itself":"\u5220\u9664\u672C\u8EAB","Delete _PARAM0_":"\u5220\u9664 _PARAM0_","Check that emission has ended and no particle is alive anymore.":"\u68C0\u67E5\u653E\u5C04\u662F\u5426\u5DF2\u7ED3\u675F\uFF0C\u6CA1\u6709\u7C92\u5B50\u518D\u5B58\u6D3B\u3002","Emission has ended":"\u653E\u5C04\u5DF2\u7ED3\u675F","Emission from _PARAM0_ has ended":"_PARAM0_\u7684\u653E\u5C04\u5DF2\u7ED3\u675F","Restart particule emission from the beginning.":"\u4ECE\u5934\u5F00\u59CB\u91CD\u542F\u7C92\u5B50\u653E\u5C04\u3002","Restart":"\u91CD\u542F","Restart particule emission from _PARAM0_":"\u4ECE_PARAM0_\u91CD\u542F\u7C92\u5B50\u653E\u5C04","the Z position of the emitter.":"\u653E\u5C04\u5668\u7684Z\u4F4D\u7F6E\u3002","Z elevaltion (deprecated)":"Z\u9AD8\u5EA6\uFF08\u5DF2\u5F03\u7528\uFF09","the Z position":"Z\u4F4D\u7F6E","the rotation on X axis of the emitter.":"\u653E\u5C04\u5668X\u8F74\u65CB\u8F6C\u3002","Rotation on X axis (deprecated)":"X\u8F74\u65CB\u8F6C\uFF08\u5DF2\u5F03\u7528\uFF09","the rotation on X axis":"X\u8F74\u65CB\u8F6C","the rotation on Y axis of the emitter.":"\u653E\u5C04\u5668Y\u8F74\u65CB\u8F6C\u3002","Rotation on Y axis (deprecated)":"Y\u8F74\u65CB\u8F6C\uFF08\u5DF2\u5F03\u7528\uFF09","the rotation on Y axis":"Y\u8F74\u65CB\u8F6C","the start color of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u989C\u8272\u3002","the start color":"\u8D77\u59CB\u989C\u8272","the end color of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u989C\u8272\u3002","the end color":"\u7ED3\u675F\u989C\u8272","the start opacity of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6\u3002","the start opacity":"\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6","the end opacity of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u4E0D\u900F\u660E\u5EA6\u3002","the end opacity":"\u7ED3\u675F\u4E0D\u900F\u660E\u5EA6","the flow of particles of the object (particles per second).":"\u5BF9\u8C61\u7684\u7C92\u5B50\u6D41\u91CF\uFF08\u6BCF\u79D2\u7C92\u5B50\u6570\uFF09\u3002","Flow of particles":"\u7C92\u5B50\u6D41\u91CF","the flow of particles":"\u7C92\u5B50\u6D41\u91CF","the start min size of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u6700\u5C0F\u5927\u5C0F\u3002","the start min size":"\u8D77\u59CB\u6700\u5C0F\u5927\u5C0F","the start max size of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u6700\u5927\u5927\u5C0F\u3002","the start max size":"\u8D77\u59CB\u6700\u5927\u5927\u5C0F","the end scale of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u6BD4\u4F8B\u3002","the end scale":"\u7EC8\u70B9\u523B\u5EA6","the min start speed of the object.":"\u7269\u4F53\u7684\u6700\u5C0F\u521D\u59CB\u901F\u5EA6\u3002","Min start speed":"\u6700\u5C0F\u521D\u59CB\u901F\u5EA6","the min start speed":"\u7269\u4F53\u7684\u6700\u5C0F\u521D\u59CB\u901F\u5EA6","the max start speed of the object.":"\u7269\u4F53\u7684\u6700\u5927\u521D\u59CB\u901F\u5EA6\u3002","Max start speed":"\u6700\u5927\u521D\u59CB\u901F\u5EA6","the max start speed":"\u7269\u4F53\u7684\u6700\u5927\u521D\u59CB\u901F\u5EA6","the min lifespan of the object.":"\u7269\u4F53\u7684\u6700\u5C0F\u5BFF\u547D\u3002","the min lifespan":"\u6700\u5C0F\u5BFF\u547D","the max lifespan of the object.":"\u7269\u4F53\u7684\u6700\u5927\u5BFF\u547D\u3002","the max lifespan":"\u6700\u5927\u5BFF\u547D","the emission duration of the object.":"\u7269\u4F53\u7684\u53D1\u5C04\u6301\u7EED\u65F6\u95F4\u3002","the emission duration":"\u53D1\u5C04\u6301\u7EED\u65F6\u95F4","Check if particles move with the emitter.":"\u68C0\u67E5\u7C92\u5B50\u662F\u5426\u968F\u55B7\u5C04\u5668\u79FB\u52A8\u3002","_PARAM0_ particles move with the emitter":"_PARAM0_\u7C92\u5B50\u968F\u55B7\u5C04\u5668\u79FB\u52A8","Change if particles move with the emitter.":"\u66F4\u6539\u7C92\u5B50\u662F\u5426\u968F\u55B7\u5C04\u5668\u79FB\u52A8\u3002","_PARAM0_ particles move with the emitter: _PARAM1_":"_PARAM0_\u7C92\u5B50\u968F\u55B7\u5C04\u5668\u79FB\u52A8\uFF1A_PARAM1_","AreParticlesRelative":"\u7C92\u5B50\u76F8\u5BF9","the spay cone angle of the object.":"\u7269\u4F53\u7684\u55B7\u5C04\u9525\u89D2\u3002","the spay cone angle":"\u55B7\u5C04\u9525\u89D2","the blending of the object.":"\u7269\u4F53\u7684\u6DF7\u5408\u6548\u679C\u3002","the blending":"\u6DF7\u5408\u6548\u679C","the gravity top of the object.":"\u7269\u4F53\u7684\u9876\u90E8\u91CD\u529B\u3002","the gravity top":"\u9876\u90E8\u91CD\u529B","the gravity of the object.":"\u7269\u4F53\u7684\u91CD\u529B\u3002","the gravity":"\u91CD\u529B","Check if delete when emission ends.":"\u68C0\u67E5\u662F\u5426\u5728\u53D1\u5C04\u7ED3\u675F\u65F6\u5220\u9664\u7C92\u5B50\u3002","_PARAM0_ delete when emission ends":"_PARAM0_\u53D1\u5C04\u7ED3\u675F\u65F6\u5220\u9664","Change if delete when emission ends.":"\u66F4\u6539\u53D1\u5C04\u7ED3\u675F\u65F6\u662F\u5426\u5220\u9664\u3002","_PARAM0_ delete when emission ends: _PARAM1_":"_PARAM0_\u53D1\u5C04\u7ED3\u675F\u65F6\u5220\u9664\uFF1A_PARAM1_","ShouldAutodestruct":"\u81EA\u52A8\u9500\u6BC1","the start min trail length of the object.":"\u5BF9\u8C61\u7684\u6700\u5C0F\u8D77\u59CB\u5C3E\u8FF9\u957F\u5EA6\u3002","Start min trail length":"\u6700\u5C0F\u5C3E\u8FF9\u957F\u5EA6","the start min trail length":"\u6700\u5C0F\u8D77\u59CB\u5C3E\u8FF9\u957F\u5EA6","the start max trail length of the object.":"\u5BF9\u8C61\u7684\u6700\u5927\u8D77\u59CB\u5C3E\u8FF9\u957F\u5EA6\u3002","Start max trail length":"\u6700\u5927\u5C3E\u8FF9\u957F\u5EA6","the start max trail length":"\u6700\u5927\u8D77\u59CB\u5C3E\u8FF9\u957F\u5EA6","Check if the trail should follow the object.":"\u68C0\u67E5\u5C3E\u8FF9\u662F\u5426\u5E94\u8BE5\u8DDF\u968F\u5BF9\u8C61\u3002","Trail following the object":"\u5C3E\u8FF9\u8DDF\u968F\u5BF9\u8C61","The trail is following _PARAM0_":"\u5C3E\u8FF9\u6B63\u5728\u8DDF\u968F _PARAM0_","Change if the trail should follow the object or not.":"\u66F4\u6539\u5C3E\u8FF9\u662F\u5426\u5E94\u8BE5\u8DDF\u968F\u5BF9\u8C61\u3002","Make the trail follow":"\u8BA9\u5C3E\u8FF9\u8DDF\u968F","Make the trail follow _PARAM0_: _PARAM1_":"\u8BA9\u5C3E\u8FF9\u8DDF\u968F _PARAM0_: _PARAM1_","IsTrailFollowingLocalOrigin":"IsTrailFollowingLocalOrigin","the tail end width ratio of the object.":"\u5BF9\u8C61\u7684\u5C3E\u90E8\u5BBD\u5EA6\u6BD4\u3002","the tail end width ratio":"\u5C3E\u90E8\u5BBD\u5EA6\u6BD4","the render mode of the object.":"\u5BF9\u8C61\u7684\u6E32\u67D3\u6A21\u5F0F\u3002","the render mode":"\u6E32\u67D3\u6A21\u5F0F","2D Top-Down Physics Car":"2D \u4ECE\u4E0A\u5230\u4E0B\u7684\u7269\u7406\u8F66","Simulate top-down car motion with drifting.":"\u6A21\u62DF\u4ECE\u4E0A\u5230\u4E0B\u7684\u6C7D\u8F66\u8FD0\u52A8\u5E26\u6F02\u79FB\u3002","Simulate 2D car motion, from a top-down view.":"\u4ECE\u4E0A\u5230\u4E0B\u7684\u89C6\u89D2\u6A21\u62DF 2D \u6C7D\u8F66\u8FD0\u52A8\u3002","Physics car":"\u7269\u7406\u6C7D\u8F66","Physics Engine 2.0":"\u7269\u7406\u5F15\u64CE 2.0","Wheel grip ratio (from 0 to 1)":"\u8F6E\u80CE\u6293\u5730\u6BD4\u7387\uFF080\u52301\uFF09","A ratio of 0 is like driving on ice.":"\u6BD4\u73870\u5C31\u50CF\u5728\u51B0\u4E0A\u884C\u9A76\u3002","Steering":"\u8F6C\u5411","Steering speed":"\u8F6C\u5411\u901F\u5EA6","Sterring speed when turning back":"\u5411\u540E\u8F6C\u5F2F\u65F6\u7684\u8F6C\u5411\u901F\u5EA6","Maximum steering angle":"\u6700\u5927\u8F6C\u5411\u89D2\u5EA6","Steering angle":"\u8F6C\u5411\u89D2\u5EA6","Front wheels position":"\u524D\u8F6E\u4F4D\u7F6E","0 means at the center, 1 means at the front":"0\u610F\u5473\u7740\u5728\u4E2D\u5FC3\uFF0C1\u610F\u5473\u7740\u5728\u524D\u9762","Wheels":"\u8F66\u8F6E","Rear wheels position":"\u540E\u8F6E\u4F4D\u7F6E","0 means at the center, 1 means at the back":"0\u610F\u5473\u7740\u5728\u4E2D\u5FC3\uFF0C1\u610F\u5473\u7740\u5728\u540E\u9762","Simulate a press of the right key.":"\u6A21\u62DF\u6309\u4E0B\u53F3\u952E\u3002","Simulate right key press":"\u6A21\u62DF\u6309\u4E0B\u53F3\u952E","Simulate pressing right for _PARAM0_":"\u6A21\u62DF\u6309\u4E0B\u53F3\u952E_PARAM0_","Simulate a press of the left key.":"\u6A21\u62DF\u6309\u4E0B\u5DE6\u952E\u3002","Simulate left key press":"\u6A21\u62DF\u6309\u4E0B\u5DE6\u952E","Simulate pressing left for _PARAM0_":"\u6A21\u62DF\u6309\u4E0B\u5DE6\u952E_PARAM0_","Simulate a press of the up key.":"\u6A21\u62DF\u6309\u4E0B\u4E0A\u952E\u3002","Simulate up key press":"\u6A21\u62DF\u4E0A\u952E\u6309\u4E0B","Simulate pressing up for _PARAM0_":"\u6A21\u62DF\u6309\u4E0B\u4E0A\u952E\uFF0C_PARAM0_","Simulate a press of the down key.":"\u6A21\u62DF\u6309\u4E0B\u4E0B\u952E\u3002","Simulate down key press":"\u6A21\u62DF\u4E0B\u952E\u6309\u4E0B","Simulate pressing down for _PARAM0_":"\u6A21\u62DF\u6309\u4E0B\u4E0B\u952E\uFF0C_PARAM0_","Simulate a steering stick for a given axis force.":"\u6A21\u62DF\u7ED9\u5B9A\u8F74\u529B\u7684\u65B9\u5411\u76D8\u3002","Simulate steering stick":"\u6A21\u62DF\u65B9\u5411\u76D8","Simulate a steering stick for _PARAM0_ with a force of _PARAM2_":"\u6A21\u62DF\u4E00\u4E2A\u529B\u4E3A_PARAM2_\u7684\u65B9\u5411\u76D8\u7ED9_PARAM0_","Simulate an acceleration stick for a given axis force.":"\u6A21\u62DF\u7ED9\u5B9A\u8F74\u529B\u7684\u52A0\u901F\u5EA6\u65B9\u5411\u76D8\u3002","Simulate acceleration stick":"\u6A21\u62DF\u52A0\u901F\u5EA6\u65B9\u5411\u76D8","Simulate an acceleration stick for _PARAM0_ with a force of _PARAM2_":"\u6A21\u62DF\u4E00\u4E2A\u529B\u4E3A_PARAM2_\u7684\u52A0\u901F\u5EA6\u65B9\u5411\u76D8\u7ED9_PARAM0_","Apply wheel forces":"\u5E94\u7528\u8F6E\u5B50\u529B","Apply forces on the wheel at _PARAM2_ ; _PARAM3_ and _PARAM4_\xB0 of _PARAM0_":"\u5728_PARAM0_\u4E0A\u65BD\u52A0\u529B\uFF0C\u53C2\u6570\u4E3A_PARAM2_\u3001PARAM3_\u548CPARAM4_\xB0","Wheel X":"\u8F6E\u5B50X","Wheel Y":"\u8F6E\u5B50Y","Wheel angle":"\u8F6E\u5B50\u89D2\u5EA6","Return the momentum of inertia (in kg \u22C5 pixel\xB2)":"\u8FD4\u56DE\u52A8\u91CF\u60EF\u6027\uFF08\u4EE5kg \u22C5 pixel\xB2\u4E3A\u5355\u4F4D\uFF09","Momentum of inertia":"\u60EF\u6027\u52A8\u91CF","Apply a polar force":"\u5E94\u7528\u6781\u6027\u529B","Length (in kg \u22C5 pixels \u22C5 s^\u22122)":"\u957F\u5EA6\uFF08\u4EE5kg \u22C5 pixels \u22C5 s^\u22122\u4E3A\u5355\u4F4D\uFF09","Draw forces applying on the car for debug purpose.":"\u7ED8\u5236\u8C03\u8BD5\u76EE\u7684\u8F66\u8F86\u4E0A\u65BD\u52A0\u7684\u529B\u3002","Draw forces for debug":"\u7ED8\u5236\u8C03\u8BD5\u7528\u529B","Draw forces of car _PARAM0_ on _PARAM2_":"\u7ED8\u5236\u8F66\u8F86_PARAM0_\u5728_PARAM2_\u4E0A\u7684\u529B","the steering angle of the object.":"\u5BF9\u8C61\u7684\u8F6C\u5411\u89D2\u5EA6\u3002","the steering angle":"\u8F6C\u5411\u89D2\u5EA6","the wheel grip ratio of the object (from 0 to 1). A ratio of 0 is like driving on ice.":"\u5BF9\u8C61\u7684\u8F6E\u80CE\u6293\u5730\u6BD4\uFF08\u4ECE0\u52301\uFF09\u3002 \u6BD4\u7387\u4E3A0\u7684\u6548\u679C\u5982\u540C\u5728\u51B0\u9762\u4E0A\u884C\u9A76\u3002","Wheel grip ratio":"\u8F6E\u80CE\u6293\u5730\u6BD4","the wheel grip ratio":"\u5BF9\u8C61\u7684\u8F6E\u80CE\u6293\u5730\u6BD4","the maximum steering angle of the object.":"\u5BF9\u8C61\u7684\u6700\u5927\u8F6C\u5411\u89D2\u5EA6\u3002","the maximum steering angle":"\u6700\u5927\u8F6C\u5411\u89D2\u5EA6","the steering speed of the object.":"\u5BF9\u8C61\u7684\u8F6C\u5411\u901F\u5EA6\u3002","the steering speed":"\u8F6C\u5411\u901F\u5EA6","the sterring speed when turning back of the object.":"\u8F6C\u5411\u540E\u5BF9\u8C61\u7684\u8F6C\u5411\u901F\u5EA6\u3002","Sterring back speed":"\u8F6C\u5411\u540E\u7684\u901F\u5EA6","the sterring speed when turning back":"\u8F6C\u5411\u65F6\u8F6C\u5411\u901F\u5EA6","3D car keyboard mapper":"3D car keyboard mapper","3D car keyboard controls.":"3D car keyboard controls.","Control a 3D physics car with a keyboard.":"Control a 3D physics car with a keyboard.","Hand brake key":"Hand brake key","3D physics character animator":"3D \u7269\u7406\u89D2\u8272\u52A8\u753B\u5236\u4F5C\u5668","Change animations of a 3D physics character automatically.":"\u81EA\u52A8\u66F4\u6539 3D \u7269\u7406\u89D2\u8272\u7684\u52A8\u753B\u3002","Animatable capacity":"\u53EF\u52A8\u753B\u5BB9\u91CF","\"Idle\" animation name":"\"\u5F85\u673A\"\u52A8\u753B\u540D\u79F0","Animation names":"\u52A8\u753B\u540D\u79F0","\"Run\" animation name":"\"\u8DD1\u6B65\"\u52A8\u753B\u540D\u79F0","\"Jump\" animation name":"\"\u8DF3\u8DC3\"\u52A8\u753B\u540D\u79F0","\"Fall\" animation name":"\"\u4E0B\u843D\"\u52A8\u753B\u540D\u79F0","3D character keyboard mapper":"3D\u89D2\u8272\u952E\u76D8\u6620\u5C04\u5668","3D platformer and 3D shooter keyboard controls.":"3D\u5E73\u53F0\u6E38\u620F\u548C3D\u5C04\u51FB\u6E38\u620F\u952E\u76D8\u63A7\u5236\u3002","Control a 3D physics character with a keyboard for a platformer or a top-down game.":"\u7528\u952E\u76D8\u63A7\u52363D\u7269\u7406\u89D2\u8272\uFF0C\u7528\u4E8E\u5E73\u53F0\u6E38\u620F\u6216\u9876\u90E8\u89C6\u89D2\u6E38\u620F\u3002","3D platformer keyboard mapper":"3D\u5E73\u53F0\u6E38\u620F\u952E\u76D8\u6620\u5C04","Camera is locked for the frame":"\u76F8\u673A\u5DF2\u9501\u5B9A\u8BE5\u5E27","Check if camera is locked for the frame.":"\u68C0\u67E5\u76F8\u673A\u662F\u5426\u9501\u5B9A\u5230\u5E27\u3002","Camera is locked":"\u76F8\u673A\u5DF2\u9501\u5B9A","_PARAM0_ camera is locked for the frame":"\u5E27\u5DF2\u9501\u5B9A_PARAM0_\u76F8\u673A","Change if camera is locked for the frame.":"\u66F4\u6539\u662F\u5426\u9501\u5B9A\u76F8\u673A\u5230\u5E27\u3002","Lock the camera":"\u9501\u5B9A\u76F8\u673A","_PARAM0_ camera is locked for the frame: _PARAM2_":"\u5E27\u5DF2\u9501\u5B9A_PARAM0_\u76F8\u673A\uFF1A_PARAM2_","Control a 3D physics character with a keyboard for a first or third person shooter.":"\u7528\u952E\u76D8\u63A7\u52363D\u7269\u7406\u89D2\u8272\uFF0C\u7528\u4E8E\u7B2C\u4E00\u4EBA\u79F0\u5C04\u51FB\u6216\u7B2C\u4E09\u4EBA\u79F0\u5C04\u51FB\u3002","3D shooter keyboard mapper":"3D\u5C04\u51FB\u6E38\u620F\u952E\u76D8\u6620\u5C04","3D ellipse movement":"3D\u692D\u5706\u8FD0\u52A8","3D physics engine":"3D\u7269\u7406\u5F15\u64CE","Ellipse width":"\u692D\u5706\u5BBD\u5EA6","Ellipse height":"\u692D\u5706\u9AD8\u5EA6","the ellipse width of the object.":"\u5BF9\u8C61\u7684\u692D\u5706\u5BBD\u5EA6\u3002","the ellipse width":"\u692D\u5706\u5BBD\u5EA6","the ellipse height of the object.":"\u5BF9\u8C61\u7684\u692D\u5706\u9AD8\u5EA6\u3002","the ellipse height":"\u692D\u5706\u9AD8\u5EA6","the loop duration (in seconds).":"\u5FAA\u73AF\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","the loop duration":"\u5FAA\u73AF\u6301\u7EED\u65F6\u95F4","Pinching gesture":"\u634F\u5408\u624B\u52BF","Move the camera or objects with pinching gestures.":"\u4F7F\u7528\u634F\u5408\u624B\u52BF\u79FB\u52A8\u76F8\u673A\u6216\u7269\u4F53\u3002","Enable or disable camera pinch.":"\u542F\u7528\u6216\u7981\u7528\u955C\u5934\u634F\u5408\u3002","Enable or disable camera pinch":"\u542F\u7528\u6216\u7981\u7528\u955C\u5934\u634F\u5408","Enable camera pinch: _PARAM1_":"\u542F\u7528\u955C\u5934\u634F\u5408\uFF1A_PARAM1_","Enable camera pinch":"\u542F\u7528\u955C\u5934\u634F\u5408","Check if camera pinch is enabled.":"\u68C0\u67E5\u955C\u5934\u634F\u5408\u662F\u5426\u5DF2\u542F\u7528\u3002","Camera pinch is enabled":"\u955C\u5934\u634F\u5408\u5DF2\u542F\u7528","Choose the layer to move with pinch gestures.":"\u9009\u62E9\u4F7F\u7528\u634F\u5408\u624B\u52BF\u79FB\u52A8\u7684\u5C42\u3002","Camera pinch layer":"\u955C\u5934\u634F\u5408\u5C42","Choose the layer _PARAM1_ to move with pinch gestures":"\u9009\u62E9\u4F7F\u7528\u634F\u5408\u624B\u52BF\u79FB\u52A8\u7684\u5C42_PARAM1_","Change the camera pinch constraint.":"\u66F4\u6539\u76F8\u673A\u634F\u5408\u7EA6\u675F\u3002","Camera pinch constraints":"\u76F8\u673A\u634F\u5408\u7EA6\u675F","Change the camera pinch constraint to _PARAM1_":"\u5C06\u76F8\u673A\u634F\u5408\u7EA6\u675F\u66F4\u6539\u4E3A_PARAM1_","Constraint":"\u7EA6\u675F","Pinch the camera of a layer.":"\u634F\u5408\u76F8\u673A\u7684\u4E00\u4E2A\u5C42\u3002","Pinch camera":"\u634F\u5408\u76F8\u673A","Pinch the camera of layer: _PARAM1_ with constraint: _PARAM2_":"\u634F\u5408\u5C42\uFF1A_PARAM1_ \u4E0A\u7684\u76F8\u673A\uFF0C\u4F7F\u7528\u7EA6\u675F\uFF1A_PARAM2_","Check if a touch is pinching, if 2 touches are pressed.":"\u68C0\u67E5\u662F\u5426\u6709\u4E00\u4E2A\u89E6\u6478\u634F\u5408\uFF0C\u5982\u679C\u67092\u4E2A\u89E6\u6478\u5728\u6309\u538B\u3002","Touch is pinching":"\u89E6\u6478\u6B63\u5728\u634F\u5408","Return the scaling of the pinch gesture from its beginning.":"\u8FD4\u56DE\u634F\u5408\u624B\u52BF\u4ECE\u5176\u5F00\u59CB\u7684\u7F29\u653E\u3002","Pinch scaling":"\u634F\u5408\u7F29\u653E","Return the rotation of the pinch gesture from its beginning (in degrees).":"\u8FD4\u56DE\u634F\u5408\u624B\u52BF\u4ECE\u5176\u5F00\u59CB\u7684\u65CB\u8F6C\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u3002","Pinch rotation":"\u634F\u5408\u65CB\u8F6C","Return the X position of the pinch center at the beginning of the gesture.":"\u8FD4\u56DE\u624B\u52BF\u5F00\u59CB\u65F6\u634F\u5408\u4E2D\u5FC3\u7684X\u4F4D\u7F6E\u3002","Pinch beginning center X":"\u634F\u5408\u5F00\u59CB\u4E2D\u5FC3X","Return the Y position of the pinch center at the beginning of the gesture.":"\u5728\u624B\u52BF\u5F00\u59CB\u65F6\u8FD4\u56DE\u634F\u5408\u4E2D\u5FC3\u7684Y\u4F4D\u7F6E\u3002","Pinch beginning center Y":"\u634F\u5408\u5F00\u59CB\u4E2D\u5FC3Y","Return the X position of the pinch center.":"\u8FD4\u56DE\u634F\u5408\u4E2D\u5FC3\u7684X\u4F4D\u7F6E\u3002","Pinch center X":"\u634F\u5408\u4E2D\u5FC3X","Return the Y position of the pinch center.":"\u8FD4\u56DE\u634F\u5408\u4E2D\u5FC3\u7684Y\u4F4D\u7F6E\u3002","Pinch center Y":"\u634F\u5408\u4E2D\u5FC3Y","Return the horizontal translation of the pinch gesture from its beginning.":"\u4ECE\u5F00\u59CB\u65F6\u8FD4\u56DE\u634F\u5408\u624B\u52BF\u7684\u6C34\u5E73\u5E73\u79FB\u3002","Pinch translation X":"\u634F\u5408\u5E73\u79FBX","Return the vertical translation of the pinch gesture from its beginning.":"\u4ECE\u5F00\u59CB\u65F6\u8FD4\u56DE\u634F\u5408\u624B\u52BF\u7684\u5782\u76F4\u5E73\u79FB\u3002","Pinch translation Y":"\u634F\u5408\u5E73\u79FBY","Return the new X position of a point after the pinch gesture.":"\u8FD4\u56DE\u634F\u5408\u624B\u52BF\u540E\u70B9\u7684\u65B0X\u4F4D\u7F6E\u3002","Transform X position":"\u53D8\u6362X\u4F4D\u7F6E","Position X before the pinch":"\u634F\u5408\u524DX\u4F4D\u7F6E","Position Y before the pinch":"\u634F\u5408\u524DY\u4F4D\u7F6E","Return the new Y position of a point after the pinch gesture.":"\u8FD4\u56DE\u634F\u5408\u624B\u52BF\u540E\u70B9\u7684\u65B0Y\u4F4D\u7F6E\u3002","Transform Y position":"\u53D8\u6362Y\u4F4D\u7F6E","Return the original X position of a point before the pinch gesture.":"\u8FD4\u56DE\u634F\u5408\u624B\u52BF\u524D\u70B9\u7684\u539F\u59CBX\u4F4D\u7F6E\u3002","Inversed transform X position":"\u53CD\u5411\u53D8\u6362X\u4F4D\u7F6E","Position X after the pinch":"\u634F\u5408\u540EX\u4F4D\u7F6E","Position Y after the pinch":"\u634F\u5408\u540EY\u4F4D\u7F6E","Return the new position on the Y axis of a point after the pinch gesture.":"\u8FD4\u56DE\u634F\u5408\u624B\u52BF\u540E\u70B9\u5728Y\u8F74\u4E0A\u7684\u65B0\u4F4D\u7F6E\u3002","Inversed transform Y position":"\u53CD\u5411\u53D8\u6362Y\u4F4D\u7F6E","Return the X coordinate of a position transformed from the scene to the canvas according to a layer.":"\u4ECE\u4E00\u4E2A\u56FE\u5C42\u6309\u7167\u573A\u666F\u8F6C\u6362\u4E3A\u753B\u5E03\u7684\u4F4D\u7F6E\u8FD4\u56DE\u70B9\u7684X\u5750\u6807\u3002","Transform X to canvas":"\u628AX\u8F6C\u6362\u5230\u753B\u5E03","Return the Y coordinate of a position transformed from the scene to the canvas according to a layer.":"\u4ECE\u4E00\u4E2A\u56FE\u5C42\u6309\u7167\u573A\u666F\u8F6C\u6362\u4E3A\u753B\u5E03\u7684\u4F4D\u7F6E\u8FD4\u56DE\u70B9\u7684Y\u5750\u6807\u3002","Transform Y to canvas":"\u628AY\u8F6C\u6362\u5230\u753B\u5E03","Return the X coordinate of a position transformed from the canvas to the scene according to a layer.":"\u4ECE\u753B\u5E03\u6309\u7167\u573A\u666F\u8F6C\u6362\u5230\u4E00\u4E2A\u56FE\u5C42\u7684\u4F4D\u7F6E\u8FD4\u56DE\u70B9\u7684X\u5750\u6807\u3002","Transform X to scene":"\u628AX\u8F6C\u6362\u5230\u573A\u666F","Return the Y coordinate of a position transformed from the canvas to the scene according to a layer.":"\u4ECE\u753B\u5E03\u6309\u7167\u573A\u666F\u8F6C\u6362\u5230\u4E00\u4E2A\u56FE\u5C42\u7684\u4F4D\u7F6E\u8FD4\u56DE\u70B9\u7684Y\u5750\u6807\u3002","Transform Y to scene":"\u628AY\u8F6C\u6362\u5230\u573A\u666F","Return the touch X on the canvas.":"\u8FD4\u56DE\u753B\u5E03\u4E0A\u7684\u89E6\u6478X\u3002","Touch X on canvas":"\u753B\u5E03\u4E0A\u7684\u89E6\u6478X","Return the touch Y on the canvas.":"\u8FD4\u56DE\u753B\u5E03\u4E0A\u7684\u89E6\u6478Y\u3002","Touch Y on canvas":"\u753B\u5E03\u4E0A\u7684\u89E6\u6478Y","Return the X coordinate of a vector after a rotation":"\u8FD4\u56DE\u65CB\u8F6C\u540E\u5411\u91CF\u7684X\u5750\u6807","Rotated vector X":"\u65CB\u8F6C\u540E\u7684X\u8F74\u5411\u91CF","Vector X":"X\u8F74\u5411\u91CF","Vector Y":"Y\u8F74\u5411\u91CF","Angle (in degrees)":"\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09","Return the Y coordinate of a vector after a rotation":"\u5728\u65CB\u8F6C\u540E\u5F97\u5230\u5411\u91CF\u7684Y\u5750\u6807","Rotated vector Y":"\u65CB\u8F6C\u540E\u7684Y\u8F74\u5411\u91CF","Move objects by holding 2 touches on them.":"\u901A\u8FC7\u4FDD\u6301\u4E24\u4E2A\u89E6\u6478\u6765\u79FB\u52A8\u5BF9\u8C61\u3002","Pinchable object":"\u53EF\u634F\u5408\u7684\u5BF9\u8C61","Resizable capability":"\u53EF\u8C03\u6574\u5927\u5C0F\u7684\u529F\u80FD","Lock object size":"\u9501\u5B9A\u5BF9\u8C61\u5927\u5C0F","Check if the object is being pinched.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u88AB\u634F\u3002","Is being pinched":"\u6B63\u5728\u88AB\u634F","_PARAM0_ is being pinched":"_PARAM0_\u88AB\u634F\u4F4F","Abort the pinching of this object.":"\u4E2D\u6B62\u634F\u5236\u8BE5\u5BF9\u8C61\u3002","Abort pinching":"\u4E2D\u6B62\u634F\u5236","Abort the pinching of _PARAM0_":"\u4E2D\u6B62\u634F\u5236_PARAM0_","Pixel perfect movement":"\u50CF\u7D20\u5B8C\u7F8E\u79FB\u52A8","Grid-based or pixel perfect platformer and top-down movements.":"\u57FA\u4E8E\u7F51\u683C\u6216\u50CF\u7D20\u5B8C\u7F8E\u7684\u5E73\u53F0\u6E38\u620F\u548C\u4FEF\u89C6\u79FB\u52A8\u3002","Return the speed necessary to cover a distance according to the deceleration.":"\u6839\u636E\u51CF\u901F\u8FD4\u56DE\u8986\u76D6\u8DDD\u79BB\u6240\u9700\u7684\u901F\u5EA6\u3002","Speed to reach":"\u5230\u8FBE\u901F\u5EA6","Braking distance from an initial speed: _PARAM2_ and a deceleration: _PARAM3_ is less than _PARAM1_":"\u4ECE\u521D\u59CB\u901F\u5EA6:_PARAM2_\u548C\u51CF\u901F:_PARAM3_\u7684\u5236\u52A8\u8DDD\u79BB\u5C0F\u4E8E_PARAM1_","Distance":"\u8DDD\u79BB","Return the braking distance according to an initial speed and a deceleration.":"\u6839\u636E\u521D\u59CB\u901F\u5EA6\u548C\u51CF\u901F\u8FD4\u56DE\u5236\u52A8\u8DDD\u79BB\u3002","Braking distance":"\u5236\u52A8\u8DDD\u79BB","Define JavaScript classes for top-down.":"\u4E3A\u81EA\u9876\u5411\u4E0B\u5B9A\u4E49JavaScript\u7C7B\u3002","Define JavaScript classes for top-down":"\u4E3A\u81EA\u9876\u5411\u4E0B\u5B9A\u4E49JavaScript\u7C7B","Define JavaScript classes for top-down":"\u4E3A\u81EA\u9876\u5411\u4E0B\u5B9A\u4E49JavaScript\u7C7B","Seamlessly align big pixels using a top-down movement.":"\u4F7F\u7528\u81EA\u9876\u5411\u4E0B\u79FB\u52A8\u65E0\u7F1D\u5BF9\u9F50\u5927\u50CF\u7D20\u3002","Pixel perfect top-down movement":"\u50CF\u7D20\u5B8C\u7F8E\u7684\u81EA\u9876\u5411\u4E0B\u8FD0\u52A8","Pixel size":"\u50CF\u7D20\u5C3A\u5BF8","Pixel grid offset X":"\u50CF\u7D20\u7F51\u683C\u504F\u79FBX","Pixel grid offset Y":"\u50CF\u7D20\u7F51\u683C\u504F\u79FBY","Seamlessly align big pixels using a 2D platformer character movement.":"\u65E0\u7F1D\u5BF9\u9F50\u5927\u50CF\u7D20\uFF0C\u4F7F\u7528\u4E8C\u7EF4\u5E73\u53F0\u89D2\u8272\u79FB\u52A8\u3002","Pixel perfect platformer character":"\u50CF\u7D20\u5B8C\u7F8E\u7684\u5E73\u53F0\u6E38\u620F\u89D2\u8272","Platformer character animator":"\u5E73\u53F0\u89D2\u8272\u52A8\u753B\u5236\u4F5C\u5668","Change animations and horizontal flipping of a platformer character automatically.":"\u81EA\u52A8\u66F4\u6539\u5E73\u53F0\u6E38\u620F\u89D2\u8272\u7684\u52A8\u753B\u548C\u6C34\u5E73\u7FFB\u8F6C\u3002","Enable animation changes":"\u542F\u7528\u52A8\u753B\u66F4\u6539","Enable horizontal flipping":"\u542F\u7528\u6C34\u5E73\u7FFB\u8F6C","\"Climb\" animation name":"\"\u6500\u722C\"\u52A8\u753B\u540D\u79F0","Platformer character":"\u5E73\u53F0\u6E38\u620F\u89D2\u8272","Flippable capacity":"\u53EF\u7FFB\u8F6C\u80FD\u529B","Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u5E73\u53F0\u89D2\u8272\u7684\u52A8\u753B\u66F4\u6539\u3002\u7981\u7528\u52A8\u753B\u66F4\u6539\u53EF\u7528\u4E8E\u64AD\u653E\u81EA\u5B9A\u4E49\u52A8\u753B\u3002","Enable (or disable) automated animation changes":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52A8\u52A8\u753B\u66F4\u6539","Enable automated animation changes on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u4E0A\u542F\u7528\u81EA\u52A8\u52A8\u753B\u66F4\u6539\uFF1A_PARAM2_","Change animations automatically":"\u81EA\u52A8\u66F4\u6539\u52A8\u753B","Enable (or disable) automated horizontal flipping of a platform character.":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u5E73\u53F0\u89D2\u8272\u7684\u81EA\u52A8\u6C34\u5E73\u7FFB\u8F6C\u3002","Enable (or disable) automated horizontal flipping":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52A8\u6C34\u5E73\u7FFB\u8F6C","Enable automated horizontal flipping on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u4E0A\u542F\u7528\u81EA\u52A8\u6C34\u5E73\u7FFB\u8F6C\uFF1A_PARAM2_","Set the \"Idle\" animation name. Do not use quotation marks.":"\u8BBE\u7F6E\u201C\u7A7A\u95F2\u201D\u52A8\u753B\u540D\u79F0\u3002\u8BF7\u52FF\u4F7F\u7528\u5F15\u53F7\u3002","Set \"Idle\" animation of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u201CIdle\u201D\u52A8\u753B\u8BBE\u7F6E\u4E3A_PARAM2_","Animation name":"\u52A8\u753B\u540D\u79F0","Set the \"Move\" animation name. Do not use quotation marks.":"\u8BBE\u7F6E\u201C\u79FB\u52A8\u201D\u52A8\u753B\u540D\u79F0\u3002\u8BF7\u52FF\u4F7F\u7528\u5F15\u53F7\u3002","\"Move\" animation name":"\u201C\u79FB\u52A8\u201D\u52A8\u753B\u540D\u79F0","Set \"Move\" animation of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u201CMove\u201D\u52A8\u753B\u8BBE\u7F6E\u4E3A_PARAM2_","Set the \"Jump\" animation name. Do not use quotation marks.":"\u8BBE\u7F6E\u201C\u8DF3\u8DC3\u201D\u52A8\u753B\u540D\u79F0\u3002\u8BF7\u52FF\u4F7F\u7528\u5F15\u53F7\u3002","Set \"Jump\" animation of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\"\u8DF3\u8DC3\"\u52A8\u753B\u8BBE\u7F6E\u4E3A_PARAM2_","Set the \"Fall\" animation name. Do not use quotation marks.":"\u8BBE\u7F6E\"Fall\"\u52A8\u753B\u540D\u79F0\u3002\u8BF7\u52FF\u4F7F\u7528\u5F15\u53F7\u3002","Set \"Fall\" animation of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\"\u4E0B\u843D\"\u52A8\u753B\u8BBE\u7F6E\u4E3A_PARAM2_","Set the \"Climb\" animation name. Do not use quotation marks.":"\u8BBE\u7F6E\"Climb\"\u52A8\u753B\u540D\u79F0\u3002\u8BF7\u52FF\u4F7F\u7528\u5F15\u53F7\u3002","Set \"Climb\" animation of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\"\u6500\u722C\"\u52A8\u753B\u8BBE\u7F6E\u4E3A_PARAM2_","Platformer trajectory":"\u5E73\u53F0\u6E38\u620F\u89D2\u8272\u8F68\u8FF9","Platformer character jump easy configuration and platformer AI tools.":"\u5E73\u53F0\u6E38\u620F\u89D2\u8272\u8DF3\u8DC3\u8F7B\u677E\u914D\u7F6E\u548C\u5E73\u53F0\u6E38\u620FAI\u5DE5\u5177\u3002","Configure the height of a jump and evaluate the jump trajectory.":"\u914D\u7F6E\u8DF3\u8DC3\u9AD8\u5EA6\u5E76\u8BC4\u4F30\u8DF3\u8DC3\u8F68\u8FF9\u3002","Platformer trajectory evaluator":"\u5E73\u53F0\u6E38\u620F\u89D2\u8272\u8F68\u8FF9\u8BC4\u4F30\u5668","Jump height":"\u8DF3\u8DC3\u9AD8\u5EA6","Change the jump speed to reach a given height.":"\u66F4\u6539\u8DF3\u8DC3\u901F\u5EA6\u4EE5\u8FBE\u5230\u7ED9\u5B9A\u7684\u9AD8\u5EA6\u3002","Change the jump height of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u8DF3\u8DC3\u9AD8\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Draw the jump trajectories from no sustain to full sustain.":"\u4ECE\u65E0\u7EF4\u6301\u5230\u5B8C\u5168\u7EF4\u6301\u7ED8\u5236\u8DF3\u8DC3\u8F68\u8FF9\u3002","Draw jump":"\u7ED8\u5236\u8DF3\u8DC3","Draw the jump trajectory of _PARAM0_ on _PARAM2_":"\u5728_PARAM2_\u4E0A\u7ED8\u5236_PARAM0_\u7684\u8DF3\u8DC3\u8F68\u8FF9","The jump Y displacement at a given time from the start of the jump.":"\u7ED9\u5B9A\u65F6\u95F4\u4ECE\u8DF3\u8DC3\u5F00\u59CB\u65F6\u7684\u8DF3\u8DC3Y\u4F4D\u79FB\u3002","Jump Y":"\u8DF3\u8DC3Y","Jump sustaining duration":"\u8DF3\u8DC3\u7EF4\u6301\u6301\u7EED\u65F6\u95F4","The maximum Y displacement.":"\u6700\u5927Y\u4F4D\u79FB\u3002","Peak Y":"\u9876\u70B9Y","The time from the start of the jump when it reaches the maximum Y displacement.":"\u4ECE\u8DF3\u8DC3\u5F00\u59CB\u65F6\u5230\u8FBE\u6700\u5927Y\u4F4D\u79FB\u65F6\u7684\u65F6\u95F4\u3002","Peak time":"\u9876\u70B9\u65F6\u95F4","The time from the start of the jump when it reaches a given Y displacement moving upward.":"\u4ECE\u8DF3\u8DC3\u5F00\u59CB\u65F6\u5230\u8FBE\u7ED9\u5B9A\u5411\u4E0AY\u4F4D\u79FB\u7684\u65F6\u95F4\u3002","Jump up time":"\u5411\u4E0A\u8DF3\u8DC3\u65F6\u95F4","The time from the start of the jump when it reaches a given Y displacement moving downward.":"\u4ECE\u8DF3\u8DC3\u5F00\u59CB\u65F6\u5230\u8FBE\u7ED9\u5B9A\u5411\u4E0BY\u4F4D\u79FB\u7684\u65F6\u95F4\u3002","Jump down time":"\u5411\u4E0B\u8DF3\u8DC3\u65F6\u95F4","The X displacement before the character stops (always positive).":"\u89D2\u8272\u505C\u6B62\u524D\u7684X\u4F4D\u79FB\uFF08\u59CB\u7EC8\u4E3A\u6B63\uFF09\u3002","Stop distance":"\u505C\u6B62\u8DDD\u79BB","The X displacement at a given time from now if decelerating (always positive).":"\u4ECE\u73B0\u5728\u5F00\u59CB\uFF0C\u5982\u679C\u51CF\u901F\uFF0C\u5230\u8FBE\u7ED9\u5B9A\u65F6\u95F4\u7684X\u4F4D\u79FB\uFF08\u59CB\u7EC8\u4E3A\u6B63\uFF09\u3002","Stopping X":"\u51CF\u901FX","The X displacement at a given time from now if accelerating (always positive).":"\u4ECE\u73B0\u5728\u5F00\u59CB\uFF0C\u5982\u679C\u52A0\u901F\uFF0C\u5230\u8FBE\u7ED9\u5B9A\u65F6\u95F4\u7684X\u4F4D\u79FB\uFF08\u59CB\u7EC8\u4E3A\u6B63\uFF09\u3002","Moving X":"\u52A0\u901FX","Player avatar":"\u73A9\u5BB6\u5934\u50CF","Display player avatars according to their GDevelop account.":"\u6839\u636E\u5176GDevelop\u5E10\u6237\u663E\u793A\u73A9\u5BB6\u5934\u50CF\u3002","Return the UserID from a lobby player number.":"\u4ECE\u5927\u5385\u73A9\u5BB6\u7F16\u53F7\u8FD4\u56DEUserID\u3002","UserID":"\u7528\u6237ID","Lobby player number":"\u5927\u5385\u73A9\u5BB6\u7F16\u53F7","Display a player avatar according to their GDevelop account.":"\u6839\u636E\u5176 GDevelop \u8D26\u6237\u663E\u793A\u73A9\u5BB6\u5934\u50CF\u3002","Multiplayer Avatar":"\u591A\u4EBA\u6E38\u620F\u73A9\u5BB6\u5934\u50CF","Border enabled":"\u542F\u7528\u8FB9\u6846","Enable the border on the avatar.":"\u5728\u5934\u50CF\u4E0A\u542F\u7528\u8FB9\u6846\u3002","Player unique ID":"\u73A9\u5BB6\u552F\u4E00ID","the player unique ID of the avatar.":"\u73A9\u5BB6\u89D2\u8272\u5934\u50CF\u7684\u552F\u4E00ID\u3002","the player unique ID":"\u73A9\u5BB6\u552F\u4E00ID","Playgama Bridge":"Playgama\u6865","One SDK for cross-platform publishing HTML5 games.":"\u4E00\u4E2A\u7528\u4E8E\u8DE8\u5E73\u53F0\u53D1\u5E03HTML5\u6E38\u620F\u7684SDK\u3002","Add Action Parameter.":"\u6DFB\u52A0\u64CD\u4F5C\u53C2\u6570\u3002","Add Action Parameter":"\u6DFB\u52A0\u64CD\u4F5C\u53C2\u6570","Add Action Parameter _PARAM1_ : _PARAM2_":"\u6DFB\u52A0\u64CD\u4F5C\u53C2\u6570 _PARAM1_\uFF1A_PARAM2_","Path":"\u8DEF\u5F84","Add Bool Action Parameter.":"\u6DFB\u52A0\u5E03\u5C14\u64CD\u4F5C\u53C2\u6570\u3002","Add Bool Action Parameter":"\u6DFB\u52A0\u5E03\u5C14\u64CD\u4F5C\u53C2\u6570","Is Initialized.":"\u5DF2\u521D\u59CB\u5316\u3002","Is Initialized":"\u5DF2\u521D\u59CB\u5316","Platform Id.":"\u5E73\u53F0ID\u3002","Platform Id":"\u5E73\u53F0ID","Platform Language.":"\u5E73\u53F0\u8BED\u8A00\u3002","Platform Language":"\u5E73\u53F0\u8BED\u8A00","Platform Payload.":"\u5E73\u53F0\u6709\u6548\u8F7D\u8377\u3002","Platform Payload":"\u5E73\u53F0\u6709\u6548\u8F7D\u8377","Platform Tld.":"\u5E73\u53F0\u9876\u7EA7\u57DF\u3002","Platform Tld":"\u5E73\u53F0\u9876\u7EA7\u57DF","Platform Is Audio Enabled.":"\u5E73\u53F0\u5DF2\u542F\u7528\u97F3\u9891\u3002","Platform Is Audio Enabled":"\u5E73\u53F0\u5DF2\u542F\u7528\u97F3\u9891","Platform Is Paused.":"\u5E73\u53F0\u5DF2\u6682\u505C\u3002","Platform Is Paused":"\u5E73\u53F0\u5DF2\u6682\u505C","Is Get All Games Supported.":"Is Get All Games Supported.","Is Get All Games Supported":"Is Get All Games Supported","Is Get Game By Id Supported.":"Is Get Game By Id Supported.","Is Get Game By Id Supported":"Is Get Game By Id Supported","On Get All Games Completed.":"On Get All Games Completed.","On Get All Games Completed":"On Get All Games Completed","On Get Game By Id Completed.":"On Get Game By Id Completed.","On Get Game By Id Completed":"On Get Game By Id Completed","Platform Get All Games.":"Platform Get All Games.","Platform Get All Games":"Platform Get All Games","Platform Get Game By Id.":"Platform Get Game By Id.","Platform Get Game By Id":"Platform Get Game By Id","Platform All Games Count.":"Platform All Games Count.","Platform All Games Count":"Platform All Games Count","Platform All Game Properties Count.":"Platform All Game Properties Count.","Platform All Game Properties Count":"Platform All Game Properties Count","Platform All Games Property Name.":"Platform All Games Property Name.","Platform All Games Property Name":"Platform All Games Property Name","Property Index":"\u5C5E\u6027\u7D22\u5F15","Platform All Games Property Value.":"Platform All Games Property Value.","Platform All Games Property Value":"Platform All Games Property Value","Game Index":"Game Index","Property":"\u5C5E\u6027","Platform Game By Id Property Value.":"Platform Game By Id Property Value.","Platform Game By Id Property Value":"Platform Game By Id Property Value","Platform On Audio State Changed.":"\u5E73\u53F0\u97F3\u9891\u72B6\u6001\u5DF2\u66F4\u6539\u3002","Platform On Audio State Changed":"\u5E73\u53F0\u7684\u97F3\u9891\u72B6\u6001\u5DF2\u6539\u53D8","Platform On Pause State Changed.":"\u5E73\u53F0\u6682\u505C\u72B6\u6001\u5DF2\u66F4\u6539\u3002","Platform On Pause State Changed":"\u5E73\u53F0\u6682\u505C\u72B6\u6001\u5DF2\u66F4\u6539","Device Type.":"\u8BBE\u5907\u7C7B\u578B\u3002","Device Type":"\u8BBE\u5907\u7C7B\u578B","Is Mobile.":"\u662F\u624B\u673A\u3002","Is Mobile":"\u662F\u624B\u673A","Is Tablet.":"\u662F\u5E73\u677F\u7535\u8111\u3002","Is Tablet":"\u662F\u5E73\u677F\u7535\u8111","Is Desktop.":"\u662F\u53F0\u5F0F\u7535\u8111\u3002","Is Desktop":"\u662F\u53F0\u5F0F\u7535\u8111","Is Tv.":"\u662F\u7535\u89C6\u3002","Is Tv":"\u662F\u7535\u89C6","Player Id.":"\u73A9\u5BB6ID\u3002","Player Id":"\u73A9\u5BB6ID","Player Name.":"\u73A9\u5BB6\u540D\u79F0\u3002","Player Name":"\u73A9\u5BB6\u540D\u79F0","Player Extra Properties Count.":"\u73A9\u5BB6\u989D\u5916\u5C5E\u6027\u6570\u91CF\u3002","Player Extra Properties Count":"\u73A9\u5BB6\u989D\u5916\u5C5E\u6027\u6570\u91CF","Player Extra Property Name.":"\u73A9\u5BB6\u989D\u5916\u5C5E\u6027\u540D\u79F0\u3002","Player Extra Property Name":"\u73A9\u5BB6\u989D\u5916\u5C5E\u6027\u540D\u79F0","Player Extra Property Value.":"\u73A9\u5BB6\u989D\u5916\u5C5E\u6027\u503C\u3002","Player Extra Property Value":"\u73A9\u5BB6\u989D\u5916\u5C5E\u6027\u503C","Player Photos Count.":"\u73A9\u5BB6\u7167\u7247\u6570\u91CF\u3002","Player Photos Count":"\u73A9\u5BB6\u7167\u7247\u6570\u91CF","Player Photo # _PARAM1_.":"\u73A9\u5BB6\u7167\u7247# _PARAM1_\u3002","Player Photo":"\u73A9\u5BB6\u7167\u7247","Index":"\u7D22\u5F15","Visibility State.":"\u53EF\u89C1\u72B6\u6001\u3002","Visibility State":"\u53EF\u89C1\u72B6\u6001","On Visibility State Changed.":"\u5728\u53EF\u89C1\u72B6\u6001\u6539\u53D8\u65F6\u3002","On Visibility State Changed":"\u5728\u53EF\u89C1\u72B6\u6001\u6539\u53D8\u65F6","Default Storage Type.":"\u9ED8\u8BA4\u5B58\u50A8\u7C7B\u578B\u3002","Default Storage Type":"\u9ED8\u8BA4\u5B58\u50A8\u7C7B\u578B","Storage Data.":"\u5B58\u50A8\u6570\u636E\u3002","Storage Data":"\u5B58\u50A8\u6570\u636E","Storage Data As JSON.":"\u5B58\u50A8\u6570\u636E\u4E3A JSON\u3002","Storage Data As JSON":"\u5B58\u50A8\u6570\u636E\u4E3A JSON","Append Parameter to Storage Data Get Request.":"\u8FFD\u52A0\u53C2\u6570\u5230\u5B58\u50A8\u6570\u636E\u83B7\u53D6\u8BF7\u6C42\u3002","Append Parameter to Storage Data Get Request":"\u8FFD\u52A0\u53C2\u6570\u5230\u5B58\u50A8\u6570\u636E\u83B7\u53D6\u8BF7\u6C42","Append Parameter _PARAM1_ to Storage Data Get Request":"\u8FFD\u52A0\u53C2\u6570_PARAM1_\u5230\u5B58\u50A8\u6570\u636E\u83B7\u53D6\u8BF7\u6C42","Append Parameter to Storage Data Set Request.":"\u8FFD\u52A0\u53C2\u6570\u5230\u5B58\u50A8\u6570\u636E\u8BBE\u7F6E\u8BF7\u6C42\u3002","Append Parameter to Storage Data Set Request":"\u8FFD\u52A0\u53C2\u6570\u5230\u5B58\u50A8\u6570\u636E\u8BBE\u7F6E\u8BF7\u6C42","Append Parameter _PARAM1_ : _PARAM2_ to Storage Data Set Request":"\u8FFD\u52A0\u53C2\u6570_PARAM1_: _PARAM2_\u5230\u5B58\u50A8\u6570\u636E\u8BBE\u7F6E\u8BF7\u6C42","Append Parameter to Storage Data Delete Request.":"\u8FFD\u52A0\u53C2\u6570\u5230\u5B58\u50A8\u6570\u636E\u5220\u9664\u8BF7\u6C42\u3002","Append Parameter to Storage Data Delete Request":"\u8FFD\u52A0\u53C2\u6570\u5230\u5B58\u50A8\u6570\u636E\u5220\u9664\u8BF7\u6C42","Append Parameter _PARAM1_ to Storage Data Delete Request":"\u8FFD\u52A0\u53C2\u6570_PARAM1_\u5230\u5B58\u50A8\u6570\u636E\u5220\u9664\u8BF7\u6C42","Is Last Action Completed Successfully.":"\u4E0A\u4E00\u64CD\u4F5C\u6210\u529F\u5B8C\u6210\u3002","Is Last Action Completed Successfully":"\u4E0A\u4E00\u64CD\u4F5C\u6210\u529F\u5B8C\u6210","Send Storage Data Get Request.":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u83B7\u53D6\u8BF7\u6C42\u3002","Send Storage Data Get Request":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u83B7\u53D6\u8BF7\u6C42","Send Storage Data Get Request _PARAM1_":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u83B7\u53D6\u8BF7\u6C42_PARAM1_","Storage Type":"\u5B58\u50A8\u7C7B\u578B","Send Storage Data Set Request.":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u8BBE\u7F6E\u8BF7\u6C42\u3002","Send Storage Data Set Request":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u8BBE\u7F6E\u8BF7\u6C42","Send Storage Data Set Request _PARAM1_":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u8BBE\u7F6E\u8BF7\u6C42_PARAM1_","Send Storage Data Delete Request.":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u5220\u9664\u8BF7\u6C42\u3002","Send Storage Data Delete Request":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u5220\u9664\u8BF7\u6C42","Send Storage Data Delete Request _PARAM1_":"\u53D1\u9001\u5B58\u50A8\u6570\u636E\u5220\u9664\u8BF7\u6C42_PARAM1_","On Storage Data Get Request Completed.":"\u5728\u5B58\u50A8\u6570\u636E\u83B7\u53D6\u8BF7\u6C42\u5B8C\u6210\u65F6\u3002","On Storage Data Get Request Completed":"\u5728\u5B58\u50A8\u6570\u636E\u83B7\u53D6\u8BF7\u6C42\u5B8C\u6210\u65F6","On Storage Data Set Request Completed.":"\u5728\u5B58\u50A8\u6570\u636E\u8BBE\u7F6E\u8BF7\u6C42\u5B8C\u6210\u65F6\u3002","On Storage Data Set Request Completed":"\u5728\u5B58\u50A8\u6570\u636E\u8BBE\u7F6E\u8BF7\u6C42\u5B8C\u6210\u65F6","On Storage Data Delete Request Completed.":"\u5B58\u50A8\u6570\u636E\u5220\u9664\u8BF7\u6C42\u5DF2\u5B8C\u6210\u3002","On Storage Data Delete Request Completed":"Storage Data Delete Request Completed","Has Storage Data.":"\u6709\u5B58\u50A8\u6570\u636E\u3002","Has Storage Data":"\u6709\u5B58\u50A8\u6570\u636E","Has _PARAM1_ in Storage Data":"\u5B58\u50A8\u6570\u636E\u4E2D\u5305\u542B_PARAM1_","Is Storage Supported.":"\u5B58\u50A8\u652F\u6301\u3002","Is Storage Supported":"Storage Supported","Is Storage Supported _PARAM1_":"\u5B58\u50A8\u652F\u6301_PARAM1_","Is Storage Available.":"\u5B58\u50A8\u53EF\u7528\u3002","Is Storage Available":"Storage Available","Is Storage Available _PARAM1_":"\u5B58\u50A8\u53EF\u7528_PARAM1_","Set Minimum Delay Between Interstitial.":"\u8BBE\u7F6E\u63D2\u9875\u5E7F\u544A\u4E4B\u95F4\u7684\u6700\u5C0F\u5EF6\u8FDF\u3002","Set Minimum Delay Between Interstitial":"\u8BBE\u7F6E\u63D2\u9875\u5E7F\u544A\u4E4B\u95F4\u7684\u6700\u5C0F\u5EF6\u8FDF","Set Minimum Delay Between Interstitial _PARAM1_":"\u8BBE\u7F6E\u63D2\u9875\u5E7F\u544A\u4E4B\u95F4\u7684\u6700\u5C0F\u5EF6\u8FDF_PARAM1_","Seconds":"\u79D2","Show Banner.":"\u663E\u793A\u6A2A\u5E45\u3002","Show Banner":"\u663E\u793A\u6A2A\u5E45","Show Banner on _PARAM1_ with placement _PARAM2_":"\u5728 _PARAM1_ \u4E0A\u663E\u793A\u6A2A\u5E45\uFF0C\u653E\u7F6E _PARAM2_","Placement (optional)":"\u653E\u7F6E\uFF08\u53EF\u9009\uFF09","Hide Banner.":"\u9690\u85CF\u6A2A\u5E45\u3002","Hide Banner":"\u9690\u85CF\u6A2A\u5E45","Show Interstitial.":"\u663E\u793A\u63D2\u9875\u5E7F\u544A\u3002","Show Interstitial":"\u663E\u793A\u63D2\u9875\u5E7F\u544A","Show Interstitial with placement _PARAM1_":"\u4F7F\u7528\u653E\u7F6E _PARAM1_ \u663E\u793A\u63D2\u9875\u5F0F\u5E7F\u544A","Show Rewarded.":"\u663E\u793A\u6FC0\u52B1\u89C6\u9891\u5E7F\u544A\u3002","Show Rewarded":"\u663E\u793A\u6FC0\u52B1\u89C6\u9891\u5E7F\u544A","Show Rewarded with placement _PARAM1_":"\u4F7F\u7528\u653E\u7F6E _PARAM1_ \u663E\u793A\u5956\u52B1\u5E7F\u544A","Check AdBlock.":"\u68C0\u67E5\u5E7F\u544A\u62E6\u622A\u3002","Check AdBlock":"\u68C0\u67E5\u5E7F\u544A\u62E6\u622A","Minimum Delay Between Interstitial.":"\u63D2\u9875\u5E7F\u544A\u4E4B\u95F4\u7684\u6700\u5C0F\u5EF6\u8FDF\u3002","Minimum Delay Between Interstitial":"\u63D2\u9875\u5E7F\u544A\u4E4B\u95F4\u7684\u6700\u5C0F\u5EF6\u8FDF","Banner State.":"\u6A2A\u5E45\u72B6\u6001\u3002","Banner State":"\u6A2A\u5E45\u72B6\u6001","Interstitial State.":"\u63D2\u9875\u5E7F\u544A\u72B6\u6001\u3002","Interstitial State":"\u63D2\u5C4F\u5E7F\u544A\u72B6\u6001","Rewarded State.":"\u6FC0\u52B1\u89C6\u9891\u72B6\u6001\u3002","Rewarded State":"\u6FC0\u52B1\u89C6\u9891\u72B6\u6001","Rewarded Placement.":"\u5956\u52B1\u653E\u7F6E\u3002","Rewarded Placement":"\u5956\u52B1\u653E\u7F6E","Is Banner Supported.":"\u6A2A\u5E45\u5E7F\u544A\u652F\u6301\u60C5\u51B5\u3002","Is Banner Supported":"\u6A2A\u5E45\u5E7F\u544A\u652F\u6301\u60C5\u51B5","Is Interstitial Supported.":"\u63D2\u9875\u5F0F\u5E7F\u544A\u662F\u5426\u53D7\u652F\u6301\u3002","Is Interstitial Supported":"\u63D2\u9875\u5F0F\u5E7F\u544A\u662F\u5426\u53D7\u652F\u6301","Is Rewarded Supported.":"\u5956\u52B1\u5E7F\u544A\u662F\u5426\u53D7\u652F\u6301\u3002","Is Rewarded Supported":"\u5956\u52B1\u5E7F\u544A\u662F\u5426\u53D7\u652F\u6301","On Banner State Changed.":"\u6A2A\u5E45\u5E7F\u544A\u72B6\u6001\u5DF2\u66F4\u6539\u3002","On Banner State Changed":"\u6A2A\u5E45\u5E7F\u544A\u72B6\u6001\u5DF2\u66F4\u6539","On Banner Loading.":"\u6A2A\u5E45\u5E7F\u544A\u52A0\u8F7D\u4E2D\u3002","On Banner Loading":"\u6A2A\u5E45\u5E7F\u544A\u52A0\u8F7D\u4E2D","On Banner Shown.":"\u6A2A\u5E45\u5E7F\u544A\u5DF2\u663E\u793A\u3002","On Banner Shown":"\u6A2A\u5E45\u5E7F\u544A\u5DF2\u663E\u793A","On Banner Hidden.":"\u6A2A\u5E45\u5E7F\u544A\u5DF2\u9690\u85CF\u3002","On Banner Hidden":"\u6A2A\u5E45\u5E7F\u544A\u5DF2\u9690\u85CF","On Banner Failed.":"\u6A2A\u5E45\u5E7F\u544A\u52A0\u8F7D\u5931\u8D25\u3002","On Banner Failed":"\u6A2A\u5E45\u5E7F\u544A\u52A0\u8F7D\u5931\u8D25","On Interstitial State Changed.":"\u63D2\u5C4F\u5E7F\u544A\u72B6\u6001\u5DF2\u66F4\u6539\u3002","On Interstitial State Changed":"\u63D2\u5C4F\u5E7F\u544A\u72B6\u6001\u5DF2\u66F4\u6539","On Interstitial Loading.":"\u63D2\u5C4F\u5E7F\u544A\u52A0\u8F7D\u4E2D\u3002","On Interstitial Loading":"\u63D2\u5C4F\u5E7F\u544A\u52A0\u8F7D\u4E2D","On Interstitial Opened.":"\u63D2\u5C4F\u5E7F\u544A\u5DF2\u5C55\u793A\u3002","On Interstitial Opened":"\u63D2\u5C4F\u5E7F\u544A\u5DF2\u5C55\u793A","On Interstitial Closed.":"\u63D2\u5C4F\u5E7F\u544A\u5DF2\u5173\u95ED\u3002","On Interstitial Closed":"\u63D2\u5C4F\u5E7F\u544A\u5DF2\u5173\u95ED","On Interstitial Failed.":"\u63D2\u5C4F\u5E7F\u544A\u52A0\u8F7D\u5931\u8D25\u3002","On Interstitial Failed":"\u63D2\u5C4F\u5E7F\u544A\u52A0\u8F7D\u5931\u8D25","On Rewarded State Changed.":"\u6FC0\u52B1\u89C6\u9891\u72B6\u6001\u5DF2\u66F4\u6539\u3002","On Rewarded State Changed":"\u6FC0\u52B1\u89C6\u9891\u72B6\u6001\u5DF2\u66F4\u6539","On Rewarded Loading.":"\u6FC0\u52B1\u89C6\u9891\u52A0\u8F7D\u4E2D\u3002","On Rewarded Loading":"\u6FC0\u52B1\u89C6\u9891\u52A0\u8F7D\u4E2D","On Rewarded Opened.":"\u6FC0\u52B1\u89C6\u9891\u5DF2\u5C55\u793A\u3002","On Rewarded Opened":"\u6FC0\u52B1\u89C6\u9891\u5DF2\u5C55\u793A","On Rewarded Closed.":"\u6FC0\u52B1\u89C6\u9891\u5DF2\u5173\u95ED\u3002","On Rewarded Closed":"\u6FC0\u52B1\u89C6\u9891\u5DF2\u5173\u95ED","On Rewarded Rewarded.":"\u6FC0\u52B1\u89C6\u9891\u5DF2\u83B7\u5F97\u5956\u52B1\u3002","On Rewarded Rewarded":"\u6FC0\u52B1\u89C6\u9891\u5DF2\u83B7\u5F97\u5956\u52B1","On Rewarded Failed.":"\u6FC0\u52B1\u89C6\u9891\u52A0\u8F7D\u5931\u8D25\u3002","On Rewarded Failed":"\u6FC0\u52B1\u89C6\u9891\u52A0\u8F7D\u5931\u8D25","On Check AdBlock Completed.":"\u68C0\u67E5\u5E7F\u544A\u62E6\u622A\u5DF2\u5B8C\u6210\u3002","On Check AdBlock Completed":"\u68C0\u67E5\u5E7F\u544A\u62E6\u622A\u5DF2\u5B8C\u6210","Send Message.":"\u53D1\u9001\u6D88\u606F\u3002","Send Message":"\u53D1\u9001\u6D88\u606F","Send Message _PARAM1_":"\u53D1\u9001\u6D88\u606F_PARAM1_","Message":"\u6D88\u606F","Get Server Time.":"\u83B7\u53D6\u670D\u52A1\u5668\u65F6\u95F4\u3002","Get Server Time":"\u83B7\u53D6\u670D\u52A1\u5668\u65F6\u95F4","Server Time.":"\u670D\u52A1\u5668\u65F6\u95F4\u3002","Server Time":"\u670D\u52A1\u5668\u65F6\u95F4","On Get Server Time Completed.":"\u5728\u83B7\u53D6\u670D\u52A1\u5668\u65F6\u95F4\u5B8C\u6210\u65F6\u3002","On Get Server Time Completed":"\u83B7\u53D6\u670D\u52A1\u5668\u65F6\u95F4\u5B8C\u6210\u65F6","Has Server Time.":"\u6709\u670D\u52A1\u5668\u65F6\u95F4\u3002","Has Server Time":"\u6709\u670D\u52A1\u5668\u65F6\u95F4","Authorize Player.":"\u6388\u6743\u73A9\u5BB6\u3002","Authorize Player":"\u6388\u6743\u73A9\u5BB6","Is Player Authorization Supported.":"\u73A9\u5BB6\u6388\u6743\u662F\u5426\u652F\u6301\u3002","Is Player Authorization Supported":"\u73A9\u5BB6\u6388\u6743\u662F\u5426\u652F\u6301","Is Player Authorized.":"\u73A9\u5BB6\u662F\u5426\u6388\u6743\u3002","Is Player Authorized":"\u73A9\u5BB6\u662F\u5426\u6388\u6743","On Authorize Player Completed.":"\u5728\u6388\u6743\u73A9\u5BB6\u5B8C\u6210\u65F6\u3002","On Authorize Player Completed":"\u6388\u6743\u73A9\u5BB6\u5B8C\u6210\u65F6","Does Player Have Name.":"\u73A9\u5BB6\u662F\u5426\u6709\u59D3\u540D\u3002","Does Player Have Name":"\u73A9\u5BB6\u662F\u5426\u6709\u59D3\u540D","Does Player Have Photo.":"\u73A9\u5BB6\u662F\u5426\u6709\u7167\u7247\u3002","Does Player Have Photo":"\u73A9\u5BB6\u662F\u5426\u6709\u7167\u7247","Does Player Have Photo # _PARAM1_":"\u73A9\u5BB6\u662F\u5426\u6709\u7167\u7247#_PARAM1_","Share.":"\u5206\u4EAB\u3002","Share":"\u5206\u4EAB","Invite Friends.":"\u9080\u8BF7\u597D\u53CB\u3002","Invite Friends":"\u9080\u8BF7\u597D\u53CB","Join Community.":"\u52A0\u5165\u793E\u533A\u3002","Join Community":"\u52A0\u5165\u793E\u533A","Create Post.":"\u521B\u5EFA\u5E16\u5B50\u3002","Create Post":"\u521B\u5EFA\u5E16\u5B50","Add To Home Screen.":"\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u3002","Add To Home Screen":"\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55","Add To Favorites.":"\u6DFB\u52A0\u5230\u6536\u85CF\u5939\u3002","Add To Favorites":"\u6DFB\u52A0\u5230\u6536\u85CF\u5939","Rate.":"\u8BC4\u5206\u3002","Rate":"\u8BC4\u5206","Is Share Supported.":"\u662F\u5426\u652F\u6301\u5171\u4EAB\u3002","Is Share Supported":"\u662F\u5426\u652F\u6301\u5171\u4EAB","On Share Completed.":"\u5728\u5171\u4EAB\u5B8C\u6210\u65F6\u3002","On Share Completed":"\u5728\u5171\u4EAB\u5B8C\u6210\u65F6","Is Invite Friends Supported.":"\u662F\u5426\u652F\u6301\u9080\u8BF7\u670B\u53CB\u3002","Is Invite Friends Supported":"\u662F\u5426\u652F\u6301\u9080\u8BF7\u670B\u53CB","On Invite Friends Completed.":"\u5728\u9080\u8BF7\u670B\u53CB\u5B8C\u6210\u65F6\u3002","On Invite Friends Completed":"\u5728\u9080\u8BF7\u670B\u53CB\u5B8C\u6210\u65F6","Is Join Community Supported.":"\u662F\u5426\u652F\u6301\u52A0\u5165\u793E\u533A\u3002","Is Join Community Supported":"\u662F\u5426\u652F\u6301\u52A0\u5165\u793E\u533A","On Join Community Completed.":"\u5728\u52A0\u5165\u793E\u533A\u5B8C\u6210\u65F6\u3002","On Join Community Completed":"\u5728\u52A0\u5165\u793E\u533A\u5B8C\u6210\u65F6","Is Create Post Supported.":"\u662F\u5426\u652F\u6301\u521B\u5EFA\u5E16\u5B50\u3002","Is Create Post Supported":"\u662F\u5426\u652F\u6301\u521B\u5EFA\u5E16\u5B50","On Create Post Completed.":"\u5728\u521B\u5EFA\u5E16\u5B50\u5B8C\u6210\u65F6\u3002","On Create Post Completed":"\u5728\u521B\u5EFA\u5E16\u5B50\u5B8C\u6210\u65F6","Is Add To Home Screen Supported.":"\u662F\u5426\u652F\u6301\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u3002","Is Add To Home Screen Supported":"\u662F\u5426\u652F\u6301\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55","On Add To Home Screen Completed.":"\u5728\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u5B8C\u6210\u65F6\u3002","On Add To Home Screen Completed":"\u5728\u6DFB\u52A0\u5230\u4E3B\u5C4F\u5E55\u5B8C\u6210\u65F6","Is Add To Favorites Supported.":"\u662F\u5426\u652F\u6301\u6DFB\u52A0\u5230\u6536\u85CF\u5939\u3002","Is Add To Favorites Supported":"\u662F\u5426\u652F\u6301\u6DFB\u52A0\u5230\u6536\u85CF\u5939","On Add To Favorites Completed.":"\u5728\u6DFB\u52A0\u5230\u6536\u85CF\u5939\u5B8C\u6210\u65F6\u3002","On Add To Favorites Completed":"\u5728\u6DFB\u52A0\u5230\u6536\u85CF\u5939\u5B8C\u6210\u65F6","Is Rate Supported.":"\u662F\u5426\u652F\u6301\u8BC4\u5206\u3002","Is Rate Supported":"\u662F\u5426\u652F\u6301\u8BC4\u5206","On Rate Completed.":"\u5728\u8BC4\u5206\u5B8C\u6210\u65F6\u3002","On Rate Completed":"\u5728\u8BC4\u5206\u5B8C\u6210\u65F6","Is External Links Allowed.":"\u662F\u5426\u5141\u8BB8\u5916\u90E8\u94FE\u63A5\u3002","Is External Links Allowed":"\u662F\u5426\u5141\u8BB8\u5916\u90E8\u94FE\u63A5","Leaderboards Set Score.":"\u6392\u884C\u699C\u8BBE\u5B9A\u5206\u6570\u3002","Leaderboards Set Score":"\u6392\u884C\u699C\u8BBE\u5B9A\u5206\u6570","Leaderboards Set Score - Id: _PARAM1_, Score: _PARAM2_":"\u6392\u884C\u699C\u8BBE\u5B9A\u5206\u6570 - ID: _PARAM1_\uFF0C\u5206\u6570: _PARAM2_","Leaderboards Get Entries.":"\u6392\u884C\u699C\u83B7\u53D6\u6761\u76EE\u3002","Leaderboards Get Entries":"\u6392\u884C\u699C\u83B7\u53D6\u6761\u76EE","Leaderboards Get Entries - Id: _PARAM1_":"\u6392\u884C\u699C\u83B7\u53D6\u6761\u76EE - ID: _PARAM1_","Leaderboards Show Native Popup.":"\u6392\u884C\u699C\u663E\u793A\u672C\u5730\u5F39\u51FA\u7A97\u53E3\u3002","Leaderboards Show Native Popup":"\u6392\u884C\u699C\u663E\u793A\u672C\u5730\u5F39\u51FA\u7A97\u53E3","Leaderboards Show Native Popup - Id: _PARAM1_":"\u6392\u884C\u699C\u663E\u793A\u672C\u5730\u5F39\u51FA\u7A97\u53E3 - Id: _PARAM1_","Leaderboards Type.":"\u6392\u884C\u699C\u7C7B\u578B\u3002","Leaderboards Type":"\u6392\u884C\u699C\u7C7B\u578B","Is Leaderboard Supported":"\u6392\u884C\u699C\u652F\u6301\u60C5\u51B5","The leaderboard is of type Not Available.":"\u8BE5\u6392\u884C\u699C\u7C7B\u578B\u4E0D\u53EF\u7528\u3002","The leaderboard is of type Not Available":"\u8BE5\u6392\u884C\u699C\u7C7B\u578B\u4E0D\u53EF\u7528","The leaderboard is of type In Game.":"\u8BE5\u6392\u884C\u699C\u7C7B\u578B\u4E3A\u6E38\u620F\u5185\u3002","The leaderboard is of type In Game":"\u8BE5\u6392\u884C\u699C\u7C7B\u578B\u4E3A\u6E38\u620F\u5185","The leaderboard is of type Native.":"\u8BE5\u6392\u884C\u699C\u7C7B\u578B\u4E3A\u672C\u673A\u3002","The leaderboard is of type Native":"\u8BE5\u6392\u884C\u699C\u7C7B\u578B\u4E3A\u672C\u673A","The leaderboard is of type Native Popup.":"\u6392\u884C\u699C\u7684\u7C7B\u578B\u4E3A\u672C\u5730\u5F39\u51FA\u7A97\u53E3\u3002","The leaderboard is of type Native Popup":"\u6392\u884C\u699C\u7684\u7C7B\u578B\u4E3A\u672C\u5730\u5F39\u51FA\u7A97\u53E3","On Leaderboards Set Score Completed.":"\u6392\u884C\u699C\u8BBE\u5B9A\u5206\u6570\u5B8C\u6210\u3002","On Leaderboards Set Score Completed":"\u6392\u884C\u699C\u8BBE\u5B9A\u5206\u6570\u5B8C\u6210","On Leaderboards Get Entries Completed.":"\u6392\u884C\u699C\u83B7\u53D6\u6761\u76EE\u5B8C\u6210\u3002","On Leaderboards Get Entries Completed":"\u6392\u884C\u699C\u83B7\u53D6\u6761\u76EE\u5B8C\u6210","On Leaderboards Show Native Popup Completed.":"\u6392\u884C\u699C\u663E\u793A\u672C\u5730\u5F39\u51FA\u7A97\u53E3\u5DF2\u5B8C\u6210\u3002","On Leaderboards Show Native Popup Completed":"\u6392\u884C\u699C\u663E\u793A\u672C\u5730\u5F39\u51FA\u7A97\u53E3\u5DF2\u5B8C\u6210","Leaderboard Entries Count.":"\u6392\u884C\u699C\u8BB0\u5F55\u6570\u3002","Leaderboard Entries Count":"\u6392\u884C\u699C\u8BB0\u5F55\u6570","Leaderboard Entry Id.":"\u6392\u884C\u699C\u6761\u76EE ID\u3002","Leaderboard Entry Id":"\u6392\u884C\u699C\u6761\u76EE ID","Entry Index":"\u9879\u76EE\u7D22\u5F15","Leaderboard Entry Name.":"\u6392\u884C\u699C\u6761\u76EE\u540D\u79F0\u3002","Leaderboard Entry Name":"\u6392\u884C\u699C\u6761\u76EE\u540D\u79F0","Leaderboard Entry Photo.":"\u6392\u884C\u699C\u6761\u76EE\u7167\u7247\u3002","Leaderboard Entry Photo":"\u6392\u884C\u699C\u6761\u76EE\u7167\u7247","Leaderboard Entry Rank.":"\u6392\u884C\u699C\u6761\u76EE\u6392\u540D\u3002","Leaderboard Entry Rank":"\u6392\u884C\u699C\u6761\u76EE\u6392\u540D","Leaderboard Entry Score.":"\u6392\u884C\u699C\u6761\u76EE\u5206\u6570\u3002","Leaderboard Entry Score":"\u6392\u884C\u699C\u6761\u76EE\u5206\u6570","Payments Purchase.":"\u652F\u4ED8\u8D2D\u4E70\u3002","Payments Purchase":"\u652F\u4ED8\u8D2D\u4E70","Payments Purchase - Id: _PARAM1_":"\u652F\u4ED8\u8D2D\u4E70 - ID: _PARAM1_","Payments Get Purchases.":"\u83B7\u53D6\u8D2D\u4E70\u4FE1\u606F\u3002","Payments Get Purchases":"\u83B7\u53D6\u8D2D\u4E70\u4FE1\u606F","Payments Get Catalog.":"\u83B7\u53D6\u76EE\u5F55\u4FE1\u606F\u3002","Payments Get Catalog":"\u83B7\u53D6\u76EE\u5F55\u4FE1\u606F","Payments Consume Purchase.":"\u4ED8\u6B3E\u6D88\u8017\u8D2D\u4E70\u3002","Payments Consume Purchase":"\u4ED8\u6B3E\u6D88\u8017\u8D2D\u4E70","Payments Consume Purchase - Id: _PARAM1_":"\u652F\u4ED8\u6D88\u8D39\u8D2D\u4E70 - ID: _PARAM1_","Is Payments Supported.":"\u662F\u5426\u652F\u6301\u4ED8\u6B3E\u3002","Is Payments Supported":"\u662F\u5426\u652F\u6301\u4ED8\u6B3E","On Payments Purchase Completed.":"\u5173\u4E8E\u4ED8\u6B3E\u8D2D\u4E70\u5DF2\u5B8C\u6210\u3002","On Payments Purchase Completed":"\u5173\u4E8E\u4ED8\u6B3E\u8D2D\u4E70\u5DF2\u5B8C\u6210","On Payments Get Purchases Completed.":"\u5173\u4E8E\u83B7\u53D6\u8D2D\u4E70\u7684\u4ED8\u6B3E\u5DF2\u5B8C\u6210\u3002","On Payments Get Purchases Completed":"\u5173\u4E8E\u83B7\u53D6\u8D2D\u4E70\u7684\u4ED8\u6B3E\u5DF2\u5B8C\u6210","On Payments Get Catalog Completed.":"\u5173\u4E8E\u83B7\u53D6\u76EE\u5F55\u5DF2\u5B8C\u6210\u4ED8\u6B3E\u3002","On Payments Get Catalog Completed":"\u5173\u4E8E\u83B7\u53D6\u76EE\u5F55\u5DF2\u5B8C\u6210\u4ED8\u6B3E","On Payments Consume Purchase Completed.":"\u5173\u4E8E\u6D88\u8017\u8D2D\u4E70\u5DF2\u5B8C\u6210\u4ED8\u6B3E\u3002","On Payments Consume Purchase Completed":"\u5173\u4E8E\u6D88\u8017\u8D2D\u4E70\u5DF2\u5B8C\u6210\u4ED8\u6B3E","Payments Last Purchase Properties Count.":"\u4ED8\u6B3E\u6700\u540E\u8D2D\u4E70\u5C5E\u6027\u8BA1\u6570\u3002","Payments Last Purchase Properties Count":"\u4ED8\u6B3E\u6700\u540E\u8D2D\u4E70\u5C5E\u6027\u8BA1\u6570","Payments Last Purchase Property Name.":"\u4ED8\u6B3E\u6700\u540E\u8D2D\u4E70\u5C5E\u6027\u540D\u79F0\u3002","Payments Last Purchase Property Name":"\u4ED8\u6B3E\u6700\u540E\u8D2D\u4E70\u5C5E\u6027\u540D\u79F0","Payments Last Purchase Property Value.":"\u4ED8\u6B3E\u6700\u540E\u8D2D\u4E70\u5C5E\u6027\u503C\u3002","Payments Last Purchase Property Value":"\u4ED8\u6B3E\u6700\u540E\u8D2D\u4E70\u5C5E\u6027\u503C","Payments Purchases Count.":"\u4ED8\u6B3E\u8D2D\u4E70\u8BA1\u6570\u3002","Payments Purchases Count":"\u4ED8\u6B3E\u8D2D\u4E70\u8BA1\u6570","Payments Purchase Properties Count.":"\u4ED8\u6B3E\u8D2D\u4E70\u5C5E\u6027\u8BA1\u6570\u3002","Payments Purchase Properties Count":"\u4ED8\u6B3E\u8D2D\u4E70\u5C5E\u6027\u8BA1\u6570","Payments Purchase Property Name.":"\u4ED8\u6B3E\u8D2D\u4E70\u5C5E\u6027\u540D\u79F0\u3002","Payments Purchase Property Name":"\u4ED8\u6B3E\u8D2D\u4E70\u5C5E\u6027\u540D\u79F0","Purchase Index":"\u8D2D\u4E70\u7D22\u5F15","Payments Catalog Items Count.":"\u4ED8\u6B3E\u76EE\u5F55\u9879\u76EE\u8BA1\u6570\u3002","Payments Catalog Items Count":"\u4ED8\u6B3E\u76EE\u5F55\u9879\u76EE\u8BA1\u6570","Payments Catalog Item Properties Count.":"\u4ED8\u6B3E\u76EE\u5F55\u9879\u76EE\u5C5E\u6027\u8BA1\u6570\u3002","Payments Catalog Item Properties Count":"\u4ED8\u6B3E\u76EE\u5F55\u9879\u76EE\u5C5E\u6027\u8BA1\u6570","Payments Catalog Item Property Name.":"\u4ED8\u6B3E\u76EE\u5F55\u9879\u76EE\u5C5E\u6027\u540D\u79F0\u3002","Payments Catalog Item Property Name":"\u4ED8\u6B3E\u76EE\u5F55\u9879\u76EE\u5C5E\u6027\u540D\u79F0","Payments Catalog Item Property Value.":"Payments Catalog Item Property Value.","Payments Catalog Item Property Value":"Payments Catalog Item Property Value","Product Index":"\u4EA7\u54C1\u7D22\u5F15","Payments First Catalog Item Property Value.":"Payments First Catalog Item Property Value.","Payments First Catalog Item Property Value":"Payments First Catalog Item Property Value","Filter Property":"Filter Property","Filter Property Value":"Filter Property Value","Is Achievements Supported.":"\u6210\u5C31\u662F\u5426\u53D7\u652F\u6301\u3002","Is Achievements Supported":"\u6210\u5C31\u662F\u5426\u53D7\u652F\u6301","Is Achievements Get List Supported.":"\u6210\u5C31\u83B7\u53D6\u5217\u8868\u662F\u5426\u53D7\u652F\u6301\u3002","Is Achievements Get List Supported":"\u6210\u5C31\u83B7\u53D6\u5217\u8868\u662F\u5426\u53D7\u652F\u6301","Is Achievements Native Popup Supported.":"\u6210\u5C31\u672C\u673A\u5F39\u51FA\u652F\u6301\u3002","Is Achievements Native Popup Supported":"\u6210\u5C31\u672C\u673A\u5F39\u51FA\u652F\u6301","On Achievements Unlock Completed.":"\u6210\u5C31\u5DF2\u89E3\u9501\u5B8C\u6210\u3002","On Achievements Unlock Completed":"\u6210\u5C31\u5DF2\u89E3\u9501\u5B8C\u6210","On Achievements Get List Completed.":"\u6210\u5C31\u5217\u8868\u83B7\u53D6\u5DF2\u5B8C\u6210\u3002","On Achievements Get List Completed":"\u6210\u5C31\u5217\u8868\u83B7\u53D6\u5DF2\u5B8C\u6210","On Achievements Show Native Popup Completed.":"\u6210\u5C31\u672C\u673A\u5F39\u51FA\u5DF2\u5B8C\u6210\u3002","On Achievements Show Native Popup Completed":"\u6210\u5C31\u672C\u673A\u5F39\u51FA\u5DF2\u5B8C\u6210","Achievements Count.":"\u6210\u5C31\u6570\u91CF\u3002","Achievements Count":"\u6210\u5C31\u6570\u91CF","Achievement Properties Count.":"\u6210\u5C31\u5C5E\u6027\u6570\u91CF\u3002","Achievement Properties Count":"\u6210\u5C31\u5C5E\u6027\u6570\u91CF","Achievement Property Name.":"\u6210\u5C31\u5C5E\u6027\u540D\u79F0\u3002","Achievement Property Name":"\u6210\u5C31\u5C5E\u6027\u540D\u79F0","Achievement Property Value.":"\u6210\u5C31\u5C5E\u6027\u503C\u3002","Achievement Property Value":"\u6210\u5C31\u5C5E\u6027\u503C","Achievement Index":"\u6210\u5C31\u7D22\u5F15","Achievements Unlock.":"\u89E3\u9501\u6210\u5C31\u3002","Achievements Unlock":"\u89E3\u9501\u6210\u5C31","Achievements Get List.":"\u83B7\u53D6\u6210\u5C31\u5217\u8868\u3002","Achievements Get List":"\u83B7\u53D6\u6210\u5C31\u5217\u8868","Achievements Show Native Popup.":"\u663E\u793A\u672C\u673A\u6210\u5C31\u5F39\u51FA\u3002","Achievements Show Native Popup":"\u663E\u793A\u672C\u673A\u6210\u5C31\u5F39\u51FA","Is Remote Config Supported.":"\u8FDC\u7A0B\u914D\u7F6E\u662F\u5426\u53D7\u652F\u6301\u3002","Is Remote Config Supported":"\u8FDC\u7A0B\u914D\u7F6E\u662F\u5426\u53D7\u652F\u6301","On Remote Config Got Completed.":"\u8FDC\u7A0B\u914D\u7F6E\u83B7\u53D6\u5DF2\u5B8C\u6210\u3002","On Remote Config Got Completed":"\u8FDC\u7A0B\u914D\u7F6E\u83B7\u53D6\u5DF2\u5B8C\u6210","Has Remote Config Value.":"\u662F\u5426\u6709\u8FDC\u7A0B\u914D\u7F6E\u503C\u3002","Has Remote Config Value":"\u662F\u5426\u6709\u8FDC\u7A0B\u914D\u7F6E\u503C","Has _PARAM1_ in Remote Config":"\u8FDC\u7A0B\u914D\u7F6E\u4E2D\u6709_PARAM1_\u3002","Remote Config Value.":"\u8FDC\u7A0B\u914D\u7F6E\u503C\u3002","Remote Config Value":"\u8FDC\u7A0B\u914D\u7F6E\u503C","Send Remote Config Get Request.":"\u53D1\u9001\u8FDC\u7A0B\u914D\u7F6E\u83B7\u53D6\u8BF7\u6C42\u3002","Send Remote Config Get Request":"\u53D1\u9001\u8FDC\u7A0B\u914D\u7F6E\u83B7\u53D6\u8BF7\u6C42","Is Ad Block Detected.":"\u68C0\u6D4B\u5230\u5E7F\u544A\u62E6\u622A\u5668\u3002","Is Ad Block Detected":"\u68C0\u6D4B\u5230\u5E7F\u544A\u62E6\u622A\u5668","Poki Games SDK":"Poki\u6E38\u620FSDK","Allow games to be hosted on Poki website and display ads.":"\u5141\u8BB8\u6E38\u620F\u6258\u7BA1\u5728Poki\u7F51\u7AD9\u4E0A\u5E76\u663E\u793A\u5E7F\u544A\u3002","Load Poki SDK.":"\u52A0\u8F7D Poki SDK\u3002","Load Poki SDK":"\u52A0\u8F7D Poki SDK","Check if the Poki SDK is ready to be used.":"\u68C0\u67E5 Poki SDK \u662F\u5426\u51C6\u5907\u597D\u4F7F\u7528\u3002","Poki SDK is ready":"Poki SDK \u51C6\u5907\u5C31\u7EEA","Inform Poki game finished loading.":"\u901A\u77E5 Poki \u6E38\u620F\u52A0\u8F7D\u5B8C\u6210\u3002","Game loading finished":"\u6E38\u620F\u52A0\u8F7D\u5B8C\u6210","Inform Poki game finished loading":"\u901A\u77E5 Poki \u6E38\u620F\u52A0\u8F7D\u5B8C\u6210","Inform Poki gameplay started.":"\u901A\u77E5 Poki \u6E38\u620F\u73A9\u6CD5\u5DF2\u5F00\u59CB\u3002","Inform Poki gameplay started":"\u901A\u77E5 Poki \u6E38\u620F\u73A9\u6CD5\u5DF2\u5F00\u59CB","Inform Poki gameplay stopped.":"\u901A\u77E5 Poki \u6E38\u620F\u73A9\u6CD5\u5DF2\u7ED3\u675F\u3002","Inform Poki gameplay stopped":"\u901A\u77E5 Poki \u6E38\u620F\u73A9\u6CD5\u5DF2\u7ED3\u675F","Request commercial break.":"\u8BF7\u6C42\u5546\u4E1A\u4E2D\u65AD\u3002","Commercial break":"\u5546\u4E1A\u4E2D\u65AD","Request commercial break":"\u8BF7\u6C42\u5546\u4E1A\u4E2D\u65AD","Request rewarded break.":"\u8BF7\u6C42\u5956\u52B1\u4E2D\u65AD\u3002","Rewarded break":"\u5956\u52B1\u4E2D\u65AD","Request rewarded break":"\u8BF7\u6C42\u5956\u52B1\u4E2D\u65AD","Create a shareable URL from parameters stored in a variable structure.":"\u4ECE\u5B58\u50A8\u5728\u53D8\u91CF\u7ED3\u6784\u4E2D\u7684\u53C2\u6570\u521B\u5EFA\u53EF\u5171\u4EAB\u7684 URL\u3002","Create shareable URL":"\u521B\u5EFA\u53EF\u5171\u4EAB\u7684 URL","Create shareable URL from parameters _PARAM0_":"\u4ECE\u53C2\u6570 _PARAM0_ \u521B\u5EFA\u53EF\u5171\u4EAB\u7684 URL","Variable structure with URL parameters (example children: id, type)":"\u5E26\u6709 URL \u53C2\u6570\u7684\u53D8\u91CF\u7ED3\u6784\uFF08\u793A\u4F8B\u5B50\u9879\uFF1Aid\uFF0C\u7C7B\u578B\uFF09","Get the last shareable URL generated by Create shareable URL.":"\u83B7\u53D6\u7531\u521B\u5EFA\u53EF\u5171\u4EAB\u7684 URL \u751F\u6210\u7684\u6700\u540E\u4E00\u4E2A\u53EF\u5171\u4EAB\u7684 URL\u3002","Last shareable URL":"\u6700\u540E\u53EF\u5206\u4EAB\u7684 URL","Read a URL parameter from Poki URL or the current URL.":"\u4ECE Poki URL \u6216\u5F53\u524D URL \u8BFB\u53D6 URL \u53C2\u6570\u3002","Get URL parameter":"\u83B7\u53D6 URL \u53C2\u6570","Parameter name (without the gd prefix)":"\u53C2\u6570\u540D\u79F0\uFF08\u4E0D\u5E26 gd \u524D\u7F00\uFF09","Open an external URL via Poki SDK.":"\u901A\u8FC7 Poki SDK \u6253\u5F00\u5916\u90E8 URL\u3002","Open external link":"\u6253\u5F00\u5916\u90E8\u94FE\u63A5","Open external link _PARAM0_":"\u6253\u5F00\u5916\u90E8\u94FE\u63A5 _PARAM0_","URL to open":"\u8981\u6253\u5F00\u7684 URL","Move the Poki Pill on mobile.":"\u5728\u79FB\u52A8\u8BBE\u5907\u4E0A\u79FB\u52A8 Poki Pill\u3002","Move Poki Pill":"\u79FB\u52A8 Poki Pill","Move Poki Pill to _PARAM0_ percent from top with _PARAM1_ px offset":"\u5C06 Poki Pill \u79FB\u52A8\u5230\u8DDD\u79BB\u9876\u90E8 _PARAM0_% \u7684\u4F4D\u7F6E\uFF0C\u504F\u79FB\u91CF\u4E3A _PARAM1_ \u50CF\u7D20","Top percent (0-50)":"\u9876\u90E8\u767E\u5206\u6BD4\uFF080-50\uFF09","Additional pixel offset":"\u989D\u5916\u7684\u50CF\u7D20\u504F\u79FB\u91CF","Measure an event for analytics.":"\u6D4B\u91CF\u4E8B\u4EF6\u4EE5\u8FDB\u884C\u5206\u6790\u3002","Measure event":"\u6D4B\u91CF\u4E8B\u4EF6","Measure category _PARAM0_ what _PARAM1_ action _PARAM2_":"\u6D4B\u91CF\u7C7B\u522B _PARAM0_ \u7684 _PARAM1_ \u884C\u52A8 _PARAM2_","Category (for example: level, tutorial, drawing)":"\u7C7B\u522B\uFF08\u4F8B\u5982\uFF1A\u5173\u5361\uFF0C\u6559\u7A0B\uFF0C\u7ED8\u56FE\uFF09","What is measured (for example: 1, de_dust, skip-level)":"\u88AB\u6D4B\u91CF\u7684\u5185\u5BB9\uFF08\u4F8B\u5982\uFF1A1\uFF0Cde_dust\uFF0C\u8DF3\u5173\uFF09","Action (for example: start, complete, fail)":"\u884C\u4E3A\uFF08\u4F8B\u5982\uFF1A\u5F00\u59CB\uFF0C\u5B8C\u6210\uFF0C\u5931\u8D25\uFF09","Checks if a commercial break is playing.":"\u68C0\u67E5\u662F\u5426\u6B63\u5728\u64AD\u653E\u5546\u4E1A\u4E2D\u65AD\u3002","Commercial break is playing":"\u6B63\u5728\u64AD\u653E\u5546\u4E1A\u4E2D\u65AD","Checks if a rewarded break is playing.":"\u68C0\u67E5\u662F\u5426\u6B63\u5728\u64AD\u653E\u5956\u52B1\u4E2D\u65AD\u3002","Rewarded break is playing":"\u6B63\u5728\u64AD\u653E\u5956\u52B1\u4E2D\u65AD","Checks if a commercial break just finished playing.":"\u68C0\u67E5\u662F\u5426\u521A\u521A\u7ED3\u675F\u64AD\u653E\u5546\u4E1A\u4E2D\u65AD\u3002","Commercial break just finished playing":"\u521A\u521A\u7ED3\u675F\u64AD\u653E\u5546\u4E1A\u4E2D\u65AD","Checks if a rewarded break just finished playing.":"\u68C0\u67E5\u662F\u5426\u521A\u521A\u7ED3\u675F\u64AD\u653E\u5956\u52B1\u4E2D\u65AD\u3002","Rewarded break just finished playing":"\u521A\u521A\u7ED3\u675F\u64AD\u653E\u5956\u52B1\u4E2D\u65AD","Checks if player should be rewarded after a rewarded break finished playing.":"\u68C0\u67E5\u5728\u5956\u52B1\u4E2D\u65AD\u64AD\u653E\u7ED3\u675F\u540E\u662F\u5426\u5E94\u5956\u52B1\u73A9\u5BB6\u3002","Should reward player":"\u5E94\u5956\u52B1\u73A9\u5BB6","Pop-up":"\u5F39\u51FA","Display pop-ups to alert, ask confirmation, and let user type a response in text box.":"\u663E\u793A\u5F39\u51FA\u7A97\u53E3\u4EE5\u8B66\u544A\u3001\u786E\u8BA4\u8BE2\u95EE\uFF0C\u5E76\u5141\u8BB8\u7528\u6237\u5728\u6587\u672C\u6846\u4E2D\u952E\u5165\u54CD\u5E94\u3002","The response to a pop-up message is filled.":"\u586B\u5199\u5F39\u51FA\u6D88\u606F\u7684\u54CD\u5E94\u3002","Existing prompt response":"\u73B0\u6709\u63D0\u793A\u54CD\u5E94","Response from the pop-up prompt is filled":"\u586B\u5199\u5F39\u51FA\u63D0\u793A\u7684\u54CD\u5E94","Return the text response by user to prompt.":"\u8FD4\u56DE\u7528\u6237\u5BF9\u63D0\u793A\u7684\u6587\u672C\u54CD\u5E94\u3002","Response to prompt":"\u63D0\u793A\u7684\u54CD\u5E94","Open prompt with message : _PARAM1_ with ID: _PARAM2_":"\u6253\u5F00\u5177\u6709\u6D88\u606F\uFF1A_PARAM1_\u548CID\uFF1A_PARAM2_\u7684\u63D0\u793A\u3002","Displays a prompt in a pop-up that prompts the user for input. This action return the text input or the false boolean if canceled.":"\u5728\u5F39\u51FA\u5F0F\u7A97\u53E3\u4E2D\u663E\u793A\u63D0\u793A\u4EE5\u63D0\u793A\u7528\u6237\u8F93\u5165\u3002\u8BE5\u64CD\u4F5C\u8FD4\u56DE\u6587\u672C\u8F93\u5165\uFF0C\u5982\u679C\u53D6\u6D88\uFF0C\u5219\u8FD4\u56DEfalse\u5E03\u5C14\u503C\u3002","Prompt":"\u63D0\u793A","Open a prompt pop-up box with message: _PARAM1_ (placeholder: _PARAM2_)":"\u4F7F\u7528\u6D88\u606F\uFF1A_PARAM1_\uFF08\u5360\u4F4D\u7B26\uFF1A_PARAM2_\uFF09\u6253\u5F00\u63D0\u793A\u5F39\u51FA\u6846","Prompt message":"\u63D0\u793A\u6D88\u606F","Input placeholder":"\u8F93\u5165\u5360\u4F4D\u7B26","Ask confirmation of user with a message in a dialog box with an OK button, and a Cancel button.":"\u8BE2\u95EE\u7528\u6237\u662F\u5426\u9009\u62E9\u5BF9\u8BDD\u6846\u4E2D\u7684\u6D88\u606F\uFF0C\u8BE5\u5BF9\u8BDD\u6846\u5305\u542B\u4E00\u4E2A\u786E\u5B9A\u6309\u94AE\u548C\u4E00\u4E2A\u53D6\u6D88\u6309\u94AE\u3002","Confirm":"\u786E\u8BA4","Open a confirmation pop-up box with message: _PARAM1_":"\u6253\u5F00\u4E00\u4E2A\u786E\u8BA4\u5F39\u51FA\u6846\uFF0C\u663E\u793A\u6D88\u606F\uFF1A_PARAM1_","Confirmation message":"\u786E\u8BA4\u6D88\u606F","The text to display in the confirm box.":"\u5728\u786E\u8BA4\u6846\u4E2D\u663E\u793A\u7684\u6587\u672C\u3002","Check if a confirmation was accepted.":"\u68C0\u67E5\u662F\u5426\u63A5\u53D7\u4E86\u786E\u8BA4\u3002","Pop-up message confirmed":"\u5F39\u51FA\u6D88\u606F\u5DF2\u786E\u8BA4","Pop-up message is confirmed":"\u5F39\u51FA\u6D88\u606F\u5DF2\u786E\u8BA4","Displays an alert box with a message and an OK button in a pop-up window.":"\u5728\u5F39\u51FA\u7A97\u53E3\u4E2D\u663E\u793A\u5E26\u6709\u6D88\u606F\u548C\u786E\u5B9A\u6309\u94AE\u7684\u8B66\u62A5\u6846\u3002","Alert":"\u8B66\u62A5","Open an alert pop-up box with message: _PARAM1_":"\u6253\u5F00\u5E26\u6709\u6D88\u606F\uFF1A_PARAM1_\u7684\u8B66\u62A5\u5F39\u51FA\u6846\u3002","Alert message":"\u8B66\u62A5\u6D88\u606F","RTS-like unit selection":"\u7C7B\u4F3CRTS\u7684\u5355\u4F4D\u9009\u62E9","Allow player to select units by clicking on them or dragging a selection box.":"\u5141\u8BB8\u73A9\u5BB6\u901A\u8FC7\u70B9\u51FB\u6216\u62D6\u52A8\u9009\u62E9\u6846\u6765\u9009\u62E9\u5355\u4F4D\u3002","Allow player to select units by clicking on them or dragging a selection box":"\u5141\u8BB8\u73A9\u5BB6\u901A\u8FC7\u70B9\u51FB\u6216\u62D6\u52A8\u9009\u62E9\u6846\u6765\u9009\u62E9\u5355\u4F4D\u3002","Allow player to select _PARAM1_ with _PARAM7_ mouse button (or touch). Draw a selection box using _PARAM2_ on Layer: _PARAM3_ with Z order: _PARAM4_. Hold _PARAM5_ to add units and _PARAM6_ to remove units":"\u5141\u8BB8\u73A9\u5BB6\u4F7F\u7528_PARAM7_\u9F20\u6807\u6309\u94AE\uFF08\u6216\u89E6\u6478\uFF09\u9009\u62E9_PARAM1_\u3002\u5728_ZPARAM3_\u56FE\u5C42\u4F7F\u7528_PARAM2_\u7ED8\u5236\u9009\u62E9\u6846\uFF0CZ\u987A\u5E8F\u4E3A_PARAM4_\u3002\u6309\u4F4F_PARAM5_\u6DFB\u52A0\u5355\u4F4D\uFF0C\u5E76\u6309\u4F4F_PARAM6_\u79FB\u9664\u5355\u4F4D","Units":"\u5355\u4F4D","Object (or object group) that can be Selected":"\u53EF\u4EE5\u9009\u62E9\u7684\u5BF9\u8C61\uFF08\u6216\u5BF9\u8C61\u7EC4\uFF09","Selection box":"\u9009\u62E9\u6846","Edit shape painter properties to change the appearance of this selection box":"\u7F16\u8F91\u5F62\u72B6\u7ED8\u5236\u5668\u5C5E\u6027\u4EE5\u66F4\u6539\u6B64\u9009\u62E9\u6846\u7684\u5916\u89C2","Layer (of selection box)":"\uFF08\u9009\u62E9\u6846\uFF09\u56FE\u5C42","Must be the same layer as the units being selected":"\u5FC5\u987B\u4E0E\u88AB\u9009\u62E9\u7684\u5355\u4F4D\u5728\u76F8\u540C\u7684\u56FE\u5C42\u4E0A","Z order (of selection box)":"\uFF08\u9009\u62E9\u6846\uFF09Z\u987A\u5E8F","Z order of the selection box":"\u9009\u62E9\u6846\u7684Z\u987A\u5E8F","Additive select key":"\u6DFB\u52A0\u9009\u62E9\u952E","Hold this key to add units to selection":"\u6309\u4F4F\u6B64\u952E\u53EF\u4EE5\u5C06\u5355\u4F4D\u6DFB\u52A0\u5230\u9009\u62E9\u9879","Subtractive select key":"\u51CF\u6CD5\u9009\u62E9\u952E","Hold this key to remove units from selection":"\u6309\u4F4F\u6B64\u952E\u53EF\u4EE5\u4ECE\u9009\u62E9\u9879\u4E2D\u79FB\u9664\u5355\u4F4D","Mouse button used to select units":"\u7528\u4E8E\u9009\u62E9\u5355\u4F4D\u7684\u9F20\u6807\u6309\u94AE","Check if the unit is \"Preselected\".":"\u68C0\u67E5\u5355\u4F4D\u662F\u5426\u4E3A\u201C\u9884\u9009\u201D\u3002","Is unit \"Preselected\"":"\u5355\u4F4D\u662F\u5426\u4E3A\u201C\u9884\u9009\u201D","_PARAM1_ is \"Preselected\"":"_PARAM1_\u662F\u201C\u9884\u9009\u201D","Check if the unit is \"Selected\".":"\u68C0\u67E5\u5355\u4F4D\u662F\u5426\u4E3A\u201C\u5DF2\u9009\u62E9\u201D\u3002","Is unit \"Selected\"":"\u5355\u4F4D\u662F\u5426\u4E3A\u201C\u5DF2\u9009\u62E9\u201D","_PARAM1_ is \"Selected\"":"_PARAM1_\u662F\u201C\u5DF2\u9009\u62E9\u201D","Set unit as \"Preselected\".":"\u5C06\u5355\u4F4D\u8BBE\u4E3A\u201C\u9884\u9009\u201D\u3002","Set unit as \"Preselected\"":"\u5C06\u5355\u4F4D\u8BBE\u4E3A\u201C\u9884\u9009\u201D","Set _PARAM1_ as \"Preselected\": _PARAM2_":"\u5C06_PARAM1_\u8BBE\u4E3A\u201C\u9884\u9009\u201D\uFF1A_PARAM2_","Set unit as \"Selected\".":"\u5C06\u5355\u4F4D\u8BBE\u4E3A\u201C\u5DF2\u9009\u62E9\u201D\u3002","Set unit as \"Selected\"":"\u5C06\u5355\u4F4D\u8BBE\u4E3A\u201C\u5DF2\u9009\u62E9\u201D","Set _PARAM1_ as \"Selected\": _PARAM2_":"\u5C06_PARAM1_\u8BBE\u4E3A\u201C\u5DF2\u9009\u62E9\u201D\uFF1A_PARAM2_","Assign a unique ID to each \"Selected\" unit. This should be ran every time there is a change in the number of \"Selected\" units.":"\u4E3A\u6BCF\u4E2A\u201C\u5DF2\u9009\u62E9\u201D\u5355\u4F4D\u5206\u914D\u4E00\u4E2A\u552F\u4E00ID\u3002\u6BCF\u5F53\u201C\u5DF2\u9009\u62E9\u201D\u5355\u4F4D\u6570\u91CF\u53D1\u751F\u53D8\u5316\u65F6\uFF0C\u90FD\u5E94\u8FD0\u884C\u6B64\u64CD\u4F5C\u3002","Assign a unique ID to each \"Selected\" unit":"\u4E3A\u6BCF\u4E2A\u201C\u5DF2\u9009\u62E9\u201D\u5355\u4F4D\u5206\u914D\u4E00\u4E2A\u552F\u4E00ID","Assign a unique ID to _PARAM1_ that are \"Selected\"":"\u4E3A_PARAM1_\u4E2D\u7684\u201C\u5DF2\u9009\u62E9\u201D\u5355\u4F4D\u5206\u914D\u4E00\u4E2A\u552F\u4E00ID","Provides the total number of _PARAM1_ that are currently \"Selected\".":"\u63D0\u4F9B\u5F53\u524D\u201C\u5DF2\u9009\u62E9\u201D_PARAM1_\u7684\u603B\u6570\u3002","Total number of \"Selected\" units":"\u201C\u5DF2\u9009\u62E9\u201D\u5355\u4F4D\u7684\u603B\u6570","Unit":"\u5355\u4F4D","Enable control groups using default controls.":"\u4F7F\u7528\u9ED8\u8BA4\u63A7\u4EF6\u542F\u7528\u63A7\u5236\u7EC4\u3002","Enable control groups using default controls":"\u4F7F\u7528\u9ED8\u8BA4\u63A7\u4EF6\u542F\u7528\u63A7\u5236\u7EC4","Assign _PARAM1_ to control groups using default controls (Ctrl + number)":"\u4F7F\u7528\u9ED8\u8BA4\u63A7\u4EF6\u5C06_PARAM1_\u5206\u914D\u7ED9\u63A7\u5236\u7EC4\uFF08Ctrl+\u6570\u5B57\uFF09","Object (or object group) that will be assigned to a control group":"\u5C06\u5206\u914D\u5230\u63A7\u5236\u7EC4\u7684\u5BF9\u8C61\uFF08\u6216\u5BF9\u8C61\u7EC4\uFF09","Control group this unit is assigned to.":"\u5206\u914D\u5230\u63A7\u5236\u7EC4\u7684\u8BE5\u5355\u4F4D\u3002","Control group this unit is assigned to":"\u5206\u914D\u5230\u63A7\u5236\u7EC4\u7684\u8BE5\u5355\u4F4D","Check if a unit is assigned to a control group.":"\u68C0\u67E5\u5355\u4F4D\u662F\u5426\u5206\u914D\u5230\u63A7\u5236\u7EC4\u3002","Check if a unit is assigned to a control group":"\u68C0\u67E5\u5355\u4F4D\u662F\u5426\u5206\u914D\u5230\u63A7\u5236\u7EC4","_PARAM1_ is assigned to control group _PARAM2_":"_PARAM1_\u5DF2\u5206\u914D\u5230\u63A7\u5236\u7EC4_PARAM2_","Control group ID":"\u63A7\u5236\u7EC4ID","Assign unit to a control group.":"\u5C06\u5355\u4F4D\u5206\u914D\u5230\u63A7\u5236\u7EC4\u3002","Assign unit to a control group":"\u5C06\u5355\u4F4D\u5206\u914D\u5230\u63A7\u5236\u7EC4","Assign _PARAM1_ to control group _PARAM2_":"\u5C06_PARAM1_\u5206\u914D\u5230\u63A7\u5236\u7EC4_PARAM2_","Unit ID of a selected unit.":"\u6240\u9009\u5355\u4F4D\u7684\u5355\u4F4DID\u3002","Unit ID of a selected unit":"\u6240\u9009\u5355\u4F4D\u7684\u5355\u4F4DID","Read pixels":"\u8BFB\u53D6\u50CF\u7D20","Read the values of pixels on the screen.":"\u8BFB\u53D6\u5C4F\u5E55\u4E0A\u7684\u50CF\u7D20\u503C\u3002","Return the alpha component of the pixel at the specified position.":"\u8FD4\u56DE\u6307\u5B9A\u4F4D\u7F6E\u7684\u50CF\u7D20\u7684alpha\u5206\u91CF\u3002","Read pixel alpha":"\u8BFB\u53D6\u50CF\u7D20alpha","Record":"\u5F55\u5236","Actions to record the game and players download the clips. Works on desktop, and in the browser.":"\u5F55\u5236\u6E38\u620F\u7684\u64CD\u4F5C\uFF0C\u73A9\u5BB6\u4E0B\u8F7D\u526A\u8F91\u3002\u9002\u7528\u4E8E\u684C\u9762\u548C\u6D4F\u89C8\u5668\u3002","Start the recording.":"\u5F00\u59CB\u5F55\u5236\u3002","Start recording":"\u5F00\u59CB\u5F55\u5236","End the recording.":"\u7ED3\u675F\u5F55\u5236\u3002","Stop recording":"\u505C\u6B62\u5F55\u5236","Stop the recording":"\u505C\u6B62\u5F55\u5236","Pause recording.":"\u6682\u505C\u5F55\u5236\u3002","Pause recording":"\u6682\u505C\u5F55\u5236","Resume recording.":"\u6062\u590D\u5F55\u5236\u3002","Resume recording":"\u6062\u590D\u5F55\u5236","Save recording to the file system on destop, or to the downloads folder for web. Always ask for permission to save a file.":"\u5C06\u5F55\u5236\u4FDD\u5B58\u5230\u684C\u9762\u6587\u4EF6\u7CFB\u7EDF\uFF0C\u6216\u4FDD\u5B58\u5230Web\u7684\u4E0B\u8F7D\u6587\u4EF6\u5939\u3002\u59CB\u7EC8\u8BF7\u6C42\u6743\u9650\u4FDD\u5B58\u6587\u4EF6\u3002","Save recording":"\u4FDD\u5B58\u5F55\u5236","Save recording to _PARAM1_ as _PARAM2_":"\u5C06\u5F55\u5236\u4FDD\u5B58\u5230_PARAM1_\u4E3A_PARAM2_","File location, set using a FileSystem path e.g. FileSystem::DesktopPath() (only used for desktop saves)":"\u6587\u4EF6\u4F4D\u7F6E\uFF0C\u4F7F\u7528\u6587\u4EF6\u7CFB\u7EDF\u8DEF\u5F84\u8BBE\u7F6E\uFF0C\u4F8B\u5982FileSystem::DesktopPath()\uFF08\u4EC5\u7528\u4E8E\u684C\u9762\u4FDD\u5B58\uFF09","Name to save file as":"\u8981\u4FDD\u5B58\u7684\u6587\u4EF6\u540D","Returns the current status of the reccorder: inactive (not recording), recording, or paused.":"\u8FD4\u56DE\u5F55\u5236\u5668\u7684\u5F53\u524D\u72B6\u6001\uFF1A\u975E\u6D3B\u52A8\uFF08\u672A\u5F55\u5236\uFF09\uFF0C\u5F55\u5236\u6216\u6682\u505C\u3002","Get current state":"\u83B7\u53D6\u5F53\u524D\u72B6\u6001","Get the current framerate.":"\u83B7\u53D6\u5F53\u524D\u5E27\u901F\u7387\u3002","Get frame rate":"\u83B7\u53D6\u5E27\u901F\u7387","Set frame rate to _PARAM1_":"\u5C06\u5E27\u901F\u7387\u8BBE\u4E3A_PARAM1_","Set the frame rate, must be set before starting a recording. Defaults to the min FPS set in the game properties.":"\u8BBE\u7F6E\u5E27\u7387\uFF0C\u5FC5\u987B\u5728\u5F00\u59CB\u5F55\u5236\u4E4B\u524D\u8BBE\u7F6E\u3002\u9ED8\u8BA4\u8BBE\u7F6E\u4E3A\u6E38\u620F\u5C5E\u6027\u4E2D\u8BBE\u7F6E\u7684\u6700\u5C0FFPS\u3002","Set frame rate":"\u8BBE\u7F6E\u5E27\u7387","Recommended fps for video: 25, 30, 60, for GIFs use 5, 10, 20":"\u63A8\u8350\u7684\u89C6\u9891\u5E27\u7387\uFF1A25\uFF0C30\uFF0C60\uFF0C\u5BF9\u4E8E GIF \u4F7F\u7528 5\u300110\u300120","Returns the current video bit rate per second.":"\u6BCF\u79D2\u7684\u5F53\u524D\u89C6\u9891\u6BD4\u7279\u7387\u3002","Get video bit rate per second":"\u83B7\u53D6\u6BCF\u79D2\u7684\u89C6\u9891\u6BD4\u7279\u7387","Set the video bit rate, must be set before starting a recording. Defaults to 2500000.":"\u8BBE\u7F6E\u89C6\u9891\u6BD4\u7279\u7387\uFF0C\u5FC5\u987B\u5728\u5F00\u59CB\u5F55\u5236\u524D\u8BBE\u7F6E\u3002\u9ED8\u8BA4\u4E3A 2500000\u3002","Set video bit rate":"\u8BBE\u7F6E\u89C6\u9891\u6BD4\u7279\u7387","Set the video bit rate to _PARAM1_":"\u5C06\u89C6\u9891\u6BD4\u7279\u7387\u8BBE\u4E3A_PARAM1_","video bits per second":"\u6BCF\u79D2\u7684\u89C6\u9891\u6BD4\u7279\u7387","Returns the audio bit rate per second. Defaults to 128000 if not set.":"\u6BCF\u79D2\u7684\u97F3\u9891\u6BD4\u7279\u7387\u3002\u5982\u679C\u672A\u8BBE\u7F6E\uFF0C\u5219\u9ED8\u8BA4\u4E3A 128000\u3002","Set audio bit rate":"\u8BBE\u7F6E\u97F3\u9891\u6BD4\u7279\u7387","Set the audio bit rate to _PARAM1_":"\u5C06\u97F3\u9891\u6BD4\u7279\u7387\u8BBE\u4E3A_PARAM1_","audio bits per second":"\u6BCF\u79D2\u7684\u97F3\u9891\u6BD4\u7279\u7387","Returns the audio bit rate per second.":"\u6BCF\u79D2\u7684\u97F3\u9891\u6BD4\u7279\u7387\u3002","Get audio bit rate per second":"\u83B7\u53D6\u6BCF\u79D2\u7684\u97F3\u9891\u6BD4\u7279\u7387","Set the file format, if a selected file format is unsupported on the users platform a supported one will be picked by deafult.":"\u8BBE\u7F6E\u6587\u4EF6\u683C\u5F0F\uFF0C\u5982\u679C\u6240\u9009\u7684\u6587\u4EF6\u683C\u5F0F\u5728\u7528\u6237\u7684\u5E73\u53F0\u4E0A\u4E0D\u53D7\u652F\u6301\uFF0C\u5219\u4F1A\u9009\u62E9\u652F\u6301\u7684\u6587\u4EF6\u683C\u5F0F\u4F5C\u4E3A\u9ED8\u8BA4\u503C\u3002","Set file format":"\u8BBE\u7F6E\u6587\u4EF6\u683C\u5F0F","Set file format to _PARAM1_":"\u5C06\u6587\u4EF6\u683C\u5F0F\u8BBE\u4E3A_PARAM1_","Recording format":"\u5F55\u5236\u683C\u5F0F","Returns the current video format.":"\u6BCF\u79D2\u7684\u5F53\u524D\u89C6\u9891\u683C\u5F0F\u3002","Get codec":"\u83B7\u53D6\u7F16\u89E3\u7801\u5668","Set the video codec, if a selected codec is unsupported on the users platform a supported one will be picked by deafult.":"\u8BBE\u7F6E\u89C6\u9891\u7F16\u89E3\u7801\u5668\uFF0C\u5982\u679C\u7528\u6237\u5E73\u53F0\u4E0A\u4E0D\u652F\u6301\u6240\u9009\u7684\u7F16\u89E3\u7801\u5668\uFF0C\u5219\u4F1A\u9009\u62E9\u652F\u6301\u7684\u7F16\u89E3\u7801\u5668\u4F5C\u4E3A\u9ED8\u8BA4\u503C\u3002","Set codec":"\u8BBE\u7F6E\u7F16\u89E3\u7801\u5668","Set video codec _PARAM1_":"\u5C06\u89C6\u9891\u7F16\u89E3\u7801\u5668\u8BBE\u4E3A_PARAM1_","codec":"\u7F16\u89E3\u7801\u5668","Returns the current video codec.":"\u6BCF\u79D2\u7684\u5F53\u524D\u89C6\u9891\u7F16\u89E3\u7801\u5668\u3002","Get video codec":"\u83B7\u53D6\u89C6\u9891\u7F16\u89E3\u7801\u5668","When an error occurs this method will return what type of error it is.":"\u53D1\u751F\u9519\u8BEF\u65F6\uFF0C\u6B64\u65B9\u6CD5\u5C06\u8FD4\u56DE\u9519\u8BEF\u7C7B\u578B\u3002","Error type":"\u9519\u8BEF\u7C7B\u578B","Check if an error has occurred.":"\u68C0\u67E5\u662F\u5426\u53D1\u751F\u9519\u8BEF\u3002","When an errror has occurred":"\u5F53\u53D1\u751F\u9519\u8BEF","When an error has occurred":"\u5F53\u53D1\u751F\u9519\u8BEF","Check if a recording has just been paused.":"\u68C0\u67E5\u662F\u5426\u5F55\u5236\u521A\u6682\u505C\u3002","When recording has paused":"\u5F55\u5236\u6682\u505C\u65F6","Check if a recording has just been resumed.":"\u68C0\u67E5\u662F\u5426\u5F55\u5236\u521A\u6062\u590D\u3002","When recording has resumed":"\u5F55\u5236\u6062\u590D\u65F6","Check if recording has just started.":"\u68C0\u67E5\u662F\u5426\u521A\u5F00\u59CB\u5F55\u5236\u3002","When recording has started":"\u5F00\u59CB\u5F55\u5236\u65F6","Check if recording has just stopped.":"\u68C0\u67E5\u5F55\u97F3\u662F\u5426\u521A\u521A\u505C\u6B62\u3002","When recording has stopped":"\u5F55\u97F3\u505C\u6B62\u540E","Check if recording has just been saved.":"\u68C0\u67E5\u5F55\u97F3\u662F\u5426\u521A\u521A\u4FDD\u5B58\u3002","When recording has saved":"\u5F55\u97F3\u4FDD\u5B58\u540E","When recording has been saved":"\u5F55\u97F3\u5DF2\u4FDD\u5B58","Check if the specified format is available on the users device. To avoid unsupported formats pick commons ones like MP4 or WebM.":"\u68C0\u67E5\u7528\u6237\u8BBE\u5907\u4E0A\u662F\u5426\u6709\u6307\u5B9A\u7684\u683C\u5F0F\u3002\u4E3A\u907F\u514D\u4E0D\u652F\u6301\u7684\u683C\u5F0F\uFF0C\u8BF7\u9009\u62E9\u5E38\u89C1\u7684\u683C\u5F0F\uFF0C\u5982MP4\u6216WebM\u3002","Is format supported on user device":"\u683C\u5F0F\u5728\u7528\u6237\u8BBE\u5907\u4E0A\u662F\u5426\u652F\u6301","Check if _PARAM1_ is available on the users device":"\u68C0\u67E5_PARAM1_\u5728\u7528\u6237\u8BBE\u5907\u4E0A\u662F\u5426\u53EF\u7528","Select a common format for the best results":"\u4E3A\u83B7\u5F97\u6700\u4F73\u7ED3\u679C\u9009\u62E9\u5E38\u89C1\u683C\u5F0F","Get the current GIF quality.":"\u83B7\u53D6\u5F53\u524DGIF\u8D28\u91CF\u3002","Set the GIF quality, must be set before starting a recording. Defaults to 10.":"\u8BBE\u7F6EGIF\u8D28\u91CF\uFF0C\u5FC5\u987B\u5728\u5F00\u59CB\u5F55\u5236\u4E4B\u524D\u8BBE\u7F6E\u3002\u9ED8\u8BA4\u4E3A10\u3002","Set GIF quality":"\u8BBE\u7F6EGIF\u8D28\u91CF","Set the GIF quality to _PARAM1_":"\u5C06GIF\u8D28\u91CF\u8BBE\u7F6E\u4E3A_PARAM1_","Quality":"\u8D28\u91CF","Returns whether or not dithering is enabled for GIFs.":"\u8FD4\u56DEGIF\u662F\u5426\u5DF2\u542F\u7528\u6296\u52A8\u3002","Enable dithering in GIF, must be set before starting a recording. Defaults to false.":"\u542F\u7528GIF\u6296\u52A8\uFF0C\u5FC5\u987B\u5728\u5F00\u59CB\u5F55\u5236\u4E4B\u524D\u8BBE\u7F6E\u3002\u9ED8\u8BA4\u4E3A\u5047\u3002","Set GIF Dithering":"\u8BBE\u7F6EGIF\u6296\u52A8","Enable dithering _PARAM1_":"\u542F\u7528_PARAM1_\u6296\u52A8","Dithering":"\u6296\u52A8","Rectangular movement":"\u77E9\u5F62\u79FB\u52A8","Move objects in a rectangular pattern.":"\u4EE5\u77E9\u5F62\u6A21\u5F0F\u79FB\u52A8\u5BF9\u8C61\u3002","Distance from an object to the closest edge of a second object.":"\u5BF9\u8C61\u5230\u7B2C\u4E8C\u4E2A\u5BF9\u8C61\u6700\u8FD1\u8FB9\u7F18\u7684\u8DDD\u79BB\u3002","Distance from an object to the closest edge of a second object":"\u5BF9\u8C61\u5230\u7B2C\u4E8C\u4E2A\u5BF9\u8C61\u6700\u8FD1\u8FB9\u7F18\u7684\u8DDD\u79BB","Distance from _PARAM1_ to the closest edge of _PARAM2_":"\u4ECE_PARAM1_\u5230_PARAM2_\u6700\u8FD1\u8FB9\u7F18\u7684\u8DDD\u79BB","Moving object":"\u79FB\u52A8\u5BF9\u8C61","Update rectangular movement to follow the border of an object. Run once, or every time the center object moves.":"\u66F4\u65B0\u77E9\u5F62\u8FD0\u52A8\u4EE5\u8DDF\u968F\u5BF9\u8C61\u7684\u8FB9\u754C\u3002 \u4EC5\u8FD0\u884C\u4E00\u6B21\uFF0C\u6216\u6BCF\u6B21\u4E2D\u5FC3\u5BF9\u8C61\u79FB\u52A8\u65F6\u3002","Update rectangular movement to follow the border of an object":"\u66F4\u65B0\u77E9\u5F62\u8FD0\u52A8\u4EE5\u8DDF\u968F\u5BF9\u8C61\u7684\u8FB9\u754C","Update rectangular movement of _PARAM1_ to follow the border of _PARAM3_. Position on border: _PARAM4_":"\u66F4\u65B0_PARAM1_\u7684\u77E9\u5F62\u8FD0\u52A8\uFF0C\u4EE5\u8DDF\u968F_PARAM3_\u7684\u8FB9\u754C\u3002 \u8FB9\u754C\u4F4D\u7F6E\uFF1A_PARAM4_","Rectangle Movement (required)":"\u77E9\u5F62\u8FD0\u52A8\uFF08\u5FC5\u9700\uFF09","Position on border":"\u8FB9\u754C\u4F4D\u7F6E","Move to the nearest corner of the center object.":"\u79FB\u52A8\u5230\u4E2D\u5FC3\u5BF9\u8C61\u7684\u6700\u8FD1\u89D2\u843D\u3002","Move to the nearest corner of the center object":"\u79FB\u52A8\u5230\u4E2D\u5FC3\u5BF9\u8C61\u7684\u6700\u8FD1\u89D2\u843D","Move _PARAM1_ to the nearest corner of _PARAM3_":"\u79FB\u52A8_PARAM1_\u5230_PARAM3_\u7684\u6700\u8FD1\u89D2\u843D","Dimension":"\u5C3A\u5BF8","Clockwise":"\u987A\u65F6\u9488","Horizontal edge duration":"\u6C34\u5E73\u8FB9\u7F18\u6301\u7EED\u65F6\u95F4","Vertical edge duration":"\u5782\u76F4\u8FB9\u7F18\u6301\u7EED\u65F6\u95F4","Initial position":"\u521D\u59CB\u4F4D\u7F6E","Teleport the object to a corner of the movement rectangle.":"\u5C06\u5BF9\u8C61\u4F20\u9001\u5230\u8FD0\u52A8\u77E9\u5F62\u7684\u4E00\u4E2A\u89D2\u3002","Teleport at a corner":"\u4F20\u9001\u5230\u4E00\u4E2A\u89D2","Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop":"\u5C06_PARAM0_\u7684\u4F4D\u7F6E\u8BBE\u7F6E\u4E3A\u77E9\u5F62\u5FAA\u73AF\u7684_PARAM2_","Corner":"\u89D2","Return the perimeter of the movement rectangle.":"\u8FD4\u56DE\u8FD0\u52A8\u77E9\u5F62\u7684\u5468\u957F\u3002","Perimeter":"\u5468\u957F","Return the time the object takes to go through the whole rectangle (in seconds).":"\u8FD4\u56DE\u5BF9\u8C61\u901A\u8FC7\u6574\u4E2A\u77E9\u5F62\u6240\u9700\u7684\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Return the time the object takes to go through a horizontal edge (in seconds).":"\u8FD4\u56DE\u5BF9\u8C61\u901A\u8FC7\u6C34\u5E73\u8FB9\u7F18\u6240\u9700\u7684\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Return the time the object takes to go through a vertical edge (in seconds).":"\u8FD4\u56DE\u5BF9\u8C61\u901A\u8FC7\u5782\u76F4\u8FB9\u7F18\u6240\u9700\u7684\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Return the rectangle width.":"\u8FD4\u56DE\u77E9\u5F62\u7684\u5BBD\u5EA6\u3002","Return the rectangle height.":"\u8FD4\u56DE\u77E9\u5F62\u7684\u9AD8\u5EA6\u3002","Return the left bound of the movement.":"\u8FD4\u56DE\u8FD0\u52A8\u7684\u5DE6\u8FB9\u754C\u3002","Return the top bound of the movement.":"\u8FD4\u56DE\u8FD0\u52A8\u7684\u9876\u90E8\u8FB9\u754C\u3002","Return the right bound of the movement.":"\u8FD4\u56DE\u8FD0\u52A8\u7684\u53F3\u8FB9\u754C\u3002","Return the bottom bound of the movement.":"\u8FD4\u56DE\u8FD0\u52A8\u7684\u5E95\u90E8\u8FB9\u754C\u3002","Change the left bound of the rectangular movement.":"\u66F4\u6539\u77E9\u5F62\u8FD0\u52A8\u7684\u5DE6\u8FB9\u754C\u3002","Change the movement left bound of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u8FD0\u52A8\u5DE6\u8FB9\u754C\u66F4\u6539\u4E3A_PARAM2_","Change the top bound of the rectangular movement.":"\u66F4\u6539\u77E9\u5F62\u8FD0\u52A8\u7684\u9876\u90E8\u8FB9\u754C\u3002","Change the movement top bound of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u8FD0\u52A8\u9876\u90E8\u8FB9\u754C\u66F4\u6539\u4E3A_PARAM2_","Change the right bound of the rectangular movement.":"\u66F4\u6539\u77E9\u5F62\u8FD0\u52A8\u7684\u53F3\u8FB9\u754C\u3002","Change the movement right bound of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u8FD0\u52A8\u53F3\u8FB9\u754C\u66F4\u6539\u4E3A_PARAM2_","Change the bottom bound of the rectangular movement.":"\u66F4\u6539\u77E9\u5F62\u8FD0\u52A8\u7684\u5E95\u90E8\u8FB9\u754C\u3002","Change the movement bottom bound of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u8FD0\u52A8\u5E95\u90E8\u8FB9\u754C\u66F4\u6539\u4E3A_PARAM2_","Change the time the object takes to go through a horizontal edge (in seconds).":"\u66F4\u6539\u5BF9\u8C61\u901A\u8FC7\u6C34\u5E73\u8FB9\u7F18\u6240\u9700\u7684\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_":"\u5C06_PARAM0_\u901A\u8FC7\u6C34\u5E73\u8FB9\u7F18\u884C\u8FDB\u6240\u9700\u7684\u65F6\u95F4\u66F4\u6539\u4E3A_PARAM2_","Change the time the object takes to go through a vertical edge (in seconds).":"\u66F4\u6539\u5BF9\u8C61\u901A\u8FC7\u5782\u76F4\u8FB9\u7F18\u6240\u9700\u7684\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_":"\u5C06_PARAM0_\u901A\u8FC7\u5782\u76F4\u8FB9\u7F18\u884C\u8FDB\u6240\u9700\u7684\u65F6\u95F4\u66F4\u6539\u4E3A_PARAM2_","Change the direction to clockwise or counter-clockwise.":"\u5C06\u65B9\u5411\u66F4\u6539\u4E3A\u987A\u65F6\u9488\u6216\u9006\u65F6\u9488\u3002","Use clockwise direction for _PARAM0_: _PARAM2_":"\u5BF9_PARAM0_\u4F7F\u7528\u987A\u65F6\u9488\u65B9\u5411\uFF1A_PARAM2_","Change the easing function of the movement.":"\u66F4\u6539\u79FB\u52A8\u7684\u7F13\u52A8\u51FD\u6570\u3002","Change the easing of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u7F13\u52A8\u6539\u4E3A_PARAM2_","Toggle the direction to clockwise or counter-clockwise.":"\u5207\u6362\u65B9\u5411\u4E3A\u987A\u65F6\u9488\u6216\u9006\u65F6\u9488\u3002","Toggle direction":"\u5207\u6362\u65B9\u5411","Toogle the direction of _PARAM0_":"\u5207\u6362_PARAM0_\u7684\u65B9\u5411","Check if the object is moving clockwise.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u987A\u65F6\u9488\u79FB\u52A8\u3002","Is moving clockwise":"\u6B63\u5728\u987A\u65F6\u9488\u79FB\u52A8","_PARAM0_ is moving clockwise":"_PARAM0_\u987A\u65F6\u9488\u79FB\u52A8","Check if the object is moving to the left.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5411\u5DE6\u79FB\u52A8\u3002","Is moving left":"\u6B63\u5728\u5411\u5DE6\u79FB\u52A8","_PARAM0_ is moving to the left":"_PARAM0_\u5411\u5DE6\u79FB\u52A8","Check if the object is moving up.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5411\u4E0A\u79FB\u52A8\u3002","Is moving up":"\u6B63\u5728\u5411\u4E0A\u79FB\u52A8","_PARAM0_ is moving up":"_PARAM0_\u5411\u4E0A\u79FB\u52A8","Object is moving to the right.":"\u5BF9\u8C61\u6B63\u5728\u5411\u53F3\u79FB\u52A8\u3002","Is moving right":"\u6B63\u5728\u5411\u53F3\u79FB\u52A8","_PARAM0_ is moving to the right":"_PARAM0_\u5411\u53F3\u79FB\u52A8","Check if the object is moving down.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5411\u4E0B\u79FB\u52A8\u3002","Is moving down":"\u6B63\u5728\u5411\u4E0B\u79FB\u52A8","_PARAM0_ is moving down":"_PARAM0_\u5411\u4E0B\u79FB\u52A8","Object is on the left side of the rectangle.":"\u5BF9\u8C61\u5728\u77E9\u5F62\u7684\u5DE6\u4FA7\u3002","Is on left":"\u5728\u5DE6\u4FA7","_PARAM0_ is on the left side":"_PARAM0_\u5728\u5DE6\u4FA7","Object is on the top side of the rectangle.":"\u5BF9\u8C61\u5728\u77E9\u5F62\u7684\u9876\u90E8\u3002","Is on top":"\u5728\u9876\u90E8","_PARAM0_ is on the top side":"_PARAM0_\u5728\u9876\u90E8","Object is on the right side of the rectangle.":"\u5BF9\u8C61\u5728\u77E9\u5F62\u7684\u53F3\u4FA7\u3002","Is on right":"\u5728\u53F3\u4FA7","_PARAM0_ is on the right side":"_PARAM0_\u5728\u53F3\u4FA7","Object is on the bottom side of the rectangle.":"\u5BF9\u8C61\u5728\u77E9\u5F62\u7684\u5E95\u90E8\u3002","Is on bottom":"\u5728\u5E95\u90E8","_PARAM0_ is on the bottom side":"_PARAM0_\u5728\u5E95\u90E8","Return the duration between the top-left vertex and the top-right one.":"\u8FD4\u56DE\u9876\u90E8\u5DE6\u8FB9\u70B9\u5230\u9876\u90E8\u53F3\u8FB9\u70B9\u4E4B\u95F4\u7684\u6301\u7EED\u65F6\u95F4\u3002","Duration to top right":"\u5230\u9876\u90E8\u53F3\u8FB9\u7684\u6301\u7EED\u65F6\u95F4","Return the duration between the top-left vertex and the bottom-right one.":"\u8FD4\u56DE\u9876\u90E8\u5DE6\u8FB9\u70B9\u5230\u5E95\u90E8\u53F3\u8FB9\u70B9\u4E4B\u95F4\u7684\u6301\u7EED\u65F6\u95F4\u3002","Duration to bottom right":"\u5230\u5E95\u90E8\u53F3\u8FB9\u7684\u6301\u7EED\u65F6\u95F4","Return the duration between the top-left vertex and the bottom-left one.":"\u8FD4\u56DE\u5DE6\u4E0A\u9876\u70B9\u548C\u5DE6\u4E0B\u9876\u70B9\u4E4B\u95F4\u7684\u6301\u7EED\u65F6\u95F4\u3002","Duration to bottom left":"\u5230\u5DE6\u4E0B\u7684\u6301\u7EED\u65F6\u95F4","Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).":"\u8FD4\u56DE\u81EA\u6700\u540E\u4E00\u4E2A\u9876\u70B9\u5230\u8FB9\u957F\u4E4B\u95F4\u7684\u8986\u76D6\u8DDD\u79BB\u4E0E\u6BD4\u7387\uFF08\u53D6\u503C\u8303\u56F4\u57280\u52301\u4E4B\u95F4\uFF09\u3002","Progress on edge":"\u8FB9\u4E0A\u7684\u8FDB\u5EA6","Return the X position of the current edge origin.":"\u8FD4\u56DE\u5F53\u524D\u8FB9\u7684\u8D77\u70B9\u7684X\u5750\u6807\u3002","Edge origin X":"\u8FB9\u8D77\u70B9\u7684X","Return the Y position of the current edge origin.":"\u8FD4\u56DE\u5F53\u524D\u8FB9\u7684\u8D77\u70B9\u7684Y\u5750\u6807\u3002","Edge origin Y":"\u8FB9\u8D77\u70B9\u7684Y","Return the X position of the current edge target.":"\u8FD4\u56DE\u5F53\u524D\u8FB9\u7684\u76EE\u6807\u7684X\u5750\u6807\u3002","Edge target X":"\u8FB9\u76EE\u6807\u7684X","Return the Y position of the current edge target.":"\u8FD4\u56DE\u5F53\u524D\u8FB9\u7684\u76EE\u6807\u7684Y\u5750\u6807\u3002","Edge target Y":"\u8FB9\u76EE\u6807\u7684Y","Return the time from the top-left vertex.":"\u8FD4\u56DE\u81EA\u5DE6\u4E0A\u9876\u70B9\u7684\u65F6\u95F4\u3002","Current time":"\u5F53\u524D\u65F6\u95F4","Return the covered length from the top-left vertex or the bottom-right one.":"\u8FD4\u56DE\u81EA\u5DE6\u4E0A\u9876\u70B9\u6216\u53F3\u4E0B\u9876\u70B9\u7684\u8986\u76D6\u957F\u5EA6\u3002","Half Current length":"\u5F53\u524D\u957F\u5EA6\u7684\u4E00\u534A","Return the displacement on the X axis from the top-left vertex.":"\u4ECE\u5DE6\u4E0A\u9876\u70B9\u8FD4\u56DEX\u8F74\u7684\u4F4D\u79FB\u3002","Return the displacement on the Y axis from the top-left vertex.":"\u4ECE\u5DE6\u4E0A\u9876\u70B9\u8FD4\u56DEY\u8F74\u7684\u4F4D\u79FB\u3002","Rectangular flood fill":"\u77E9\u5F62\u6CDB\u6EE5\u586B\u5145","Create objects as a grid to cover a rectangular area or an other object.":"\u521B\u5EFA\u7F51\u683C\u5BF9\u8C61\u4EE5\u8986\u76D6\u77E9\u5F62\u533A\u57DF\u6216\u5176\u4ED6\u5BF9\u8C61\u3002","Create fill objects that cover the rectangular area of target objects.":"\u521B\u5EFA\u586B\u5145\u5BF9\u8C61\u4EE5\u8986\u76D6\u76EE\u6807\u5BF9\u8C61\u7684\u77E9\u5F62\u533A\u57DF\u3002","Create objects to flood fill other objects":"\u521B\u5EFA\u5BF9\u8C61\u6765\u586B\u5145\u5176\u4ED6\u5BF9\u8C61","Create _PARAM2_ to cover _PARAM1_ with _PARAM3_ pixels between columns and _PARAM4_ pixels between rows on layer: _PARAM5_ at Z-order: _PARAM6_":"\u521B\u5EFA_PARAM2_\u4EE5\u8986\u76D6_PARAM1_\uFF0C\u5217\u4E4B\u95F4\u95F4\u9694_PARAM3_\u50CF\u7D20\uFF0C\u884C\u4E4B\u95F4\u95F4\u9694_PARAM4_\u50CF\u7D20\uFF0C\u5728_Z-order_\u5C42:_PARAM5_\u4E0A\u7684_Z-order_\u503C:_PARAM6_","Rectangular area that will be covered by fill objects":"\u5C06\u586B\u5145\u5BF9\u8C61\u8986\u76D6\u7684\u77E9\u5F62\u533A\u57DF","Fill object":"\u586B\u5145\u5BF9\u8C61","Object that is created to cover the rectangular area of target objects":"\u521B\u5EFA\u7684\u7528\u4E8E\u8986\u76D6\u76EE\u6807\u5BF9\u8C61\u7684\u77E9\u5F62\u533A\u57DF\u7684\u5BF9\u8C61","Space between columns (pixels)":"\u5217\u4E4B\u95F4\u7684\u95F4\u9694\uFF08\u50CF\u7D20\uFF09","Space between rows (pixels)":"\u884C\u4E4B\u95F4\u7684\u95F4\u9694\uFF08\u50CF\u7D20\uFF09","Z order":"Z\u987A\u5E8F","Create multiple copies of an object.":"\u521B\u5EFA\u5BF9\u8C61\u7684\u591A\u4E2A\u526F\u672C\u3002","Create objects to flood fill a rectanglular area":"\u521B\u5EFA\u5BF9\u8C61\u4EE5\u586B\u5145\u77E9\u5F62\u533A\u57DF","Create _PARAM2_ columns and _PARAM3_ rows of _PARAM1_ with top-left corner at _PARAM4_ ; _PARAM5_ and _PARAM6_ pixels between columns and _PARAM7_ pixels between rows on layer: _PARAM8_ at Z-order: _PARAM9_":"\u5728_Z-order_\u5C42_PARAM8_\u4E0A\uFF0C\u4EE5_Z-order_\u4F4D\u7F6E_PARAM9_\uFF0C\u521B\u5EFA_PARAM2_\u5217\u548C_PARAM3_\u884C\u7684_PARAM1_\uFF0C\u5DE6\u4E0A\u89D2\u4F4D\u7F6E\u5728_PARAM4_\uFF1B_PARAM5_\u548C_PARAM6_\u5217\u4E4B\u95F4\u7684\u50CF\u7D20\u548C_PARAM7_\u884C\u4E4B\u95F4\u7684\u50CF\u7D20","Number of columns (default: 1)":"\u5217\u6570\uFF08\u9ED8\u8BA4\uFF1A1\uFF09","Number of rows (default: 1)":"\u884C\u6570\uFF08\u9ED8\u8BA4\uFF1A1\uFF09","Top-left starting position (X) (default: 0)":"\u5DE6\u4E0A\u89D2\u8D77\u59CB\u4F4D\u7F6E\uFF08X\uFF09\uFF08\u9ED8\u8BA4\uFF1A0\uFF09","Top-left starting position (Y) (default: 0)":"\u5DE6\u4E0A\u89D2\u8D77\u59CB\u4F4D\u7F6E\uFF08Y\uFF09\uFF08\u9ED8\u8BA4\uFF1A0\uFF09","Amount of space between columns (default: 0)":"\u5217\u4E4B\u95F4\u7684\u7A7A\u95F4\u91CF\uFF08\u9ED8\u8BA4\uFF1A0\uFF09","Amount of space between rows (default: 0)":"\u884C\u4E4B\u95F4\u7684\u7A7A\u95F4\u91CF\uFF08\u9ED8\u8BA4\uFF1A0\uFF09","Regular Expressions":"\u6B63\u5219\u8868\u8FBE\u5F0F","Functions for using regular expressions to manipulate strings.":"\u7528\u4E8E\u64CD\u4F5C\u5B57\u7B26\u4E32\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\u529F\u80FD\u3002","Checks if a string matches a regex pattern.":"\u68C0\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u5339\u914D\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u3002","String matches regex pattern":"\u5B57\u7B26\u4E32\u4E0E\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u5339\u914D","_PARAM3_ matches pattern _PARAM1_ (flags: _PARAM2_)":"_PARAM3_\u5339\u914D\u6A21\u5F0F_PARAM1_\uFF08\u6807\u5FD7\uFF1A_PARAM2_\uFF09","The pattern to check for":"\u8981\u68C0\u67E5\u7684\u6A21\u5F0F","RegEx flags":"\u6B63\u5219\u8868\u8FBE\u5F0F\u6807\u5FD7","The string to check for a pattern":"\u8981\u68C0\u67E5\u6A21\u5F0F\u7684\u5B57\u7B26\u4E32","Split a string by each part of it that matches a regex pattern and stores each part into an array.":"\u901A\u8FC7\u5B57\u7B26\u4E32\u4E2D\u5339\u914D\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u7684\u6BCF\u4E2A\u90E8\u5206\u62C6\u5206\u5B57\u7B26\u4E32\uFF0C\u5E76\u5C06\u6BCF\u4E2A\u90E8\u5206\u5B58\u50A8\u5230\u6570\u7EC4\u4E2D\u3002","Split a string into an array":"\u5C06\u5B57\u7B26\u4E32\u62C6\u5206\u6210\u4E00\u4E2A\u6570\u7EC4","Split string _PARAM3_ into array _PARAM4_ by pattern _PARAM1_ (flags: _PARAM2_)":"\u6309\u6A21\u5F0F_PARAM1_\uFF08\u6807\u5FD7\uFF1A_PARAM2_\uFF09\u5C06\u5B57\u7B26\u4E32_PARAM3_\u62C6\u5206\u4E3A\u6570\u7EC4_PARAM4_","The pattern to split by":"\u62C6\u5206\u7684\u6A21\u5F0F","The string to split by the pattern":"\u6309\u6A21\u5F0F\u62C6\u5206\u7684\u5B57\u7B26\u4E32","The name of the variable to store the result in":"\u5B58\u50A8\u7ED3\u679C\u7684\u53D8\u91CF\u7684\u540D\u79F0","Builds an array containing all matches for a regex pattern.":"\u6784\u5EFA\u5305\u542B\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u7684\u6240\u6709\u5339\u914D\u9879\u7684\u6570\u7EC4\u3002","Find all matches for a regex pattern":"\u67E5\u627E\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u7684\u6240\u6709\u5339\u914D\u9879","Store all matches of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"\u4F7F\u7528\u6A21\u5F0F_PARAM1_\u4E2D_PARAM3_\u7684\u6240\u6709\u5339\u914D\u9879\u5B58\u50A8\u5728_PARAM4_\u4E2D\uFF08\u6807\u5FD7\uFF1A_PARAM2_\uFF09","Pattern":"\u6A21\u5F0F","String":"\u5B57\u7B26\u4E32","Builds an array containing the first match for a regex pattern followed by the regex groups.":"\u6784\u5EFA\u5305\u542B\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u7684\u7B2C\u4E00\u4E2A\u5339\u914D\u9879\u53CA\u5176\u6B63\u5219\u8868\u8FBE\u5F0F\u7EC4\u7684\u6570\u7EC4\u3002","Find first match with groups for a regex pattern":"\u67E5\u627E\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u7684\u7B2C\u4E00\u4E2A\u5339\u914D\u9879\u53CA\u5176\u7EC4","Store first match and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"\u4F7F\u7528\u6A21\u5F0F_PARAM1_\u4E2D_PARAM3_\u7684\u7B2C\u4E00\u4E2A\u5339\u914D\u9879\u53CA\u5176\u7EC4\u5B58\u50A8\u5728_PARAM4_\u4E2D\uFF08\u6807\u5FD7\uFF1A_PARAM2_\uFF09","Flags":"\u6807\u5FD7","Variable name":"\u53D8\u91CF\u540D","Builds an array containing for each regex pattern match an array with the match followed by its regex groups.":"\u6784\u5EFA\u5305\u542B\u6BCF\u4E2A\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u5339\u914D\u9879\u53CA\u5176\u6B63\u5219\u8868\u8FBE\u5F0F\u7EC4\u7684\u6570\u7EC4\u3002","Find all matches with their groups for a regex pattern":"\u67E5\u627E\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u7684\u6240\u6709\u5339\u914D\u9879\u53CA\u5176\u7EC4","Store all matches and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"\u4F7F\u7528\u6A21\u5F0F_PARAM1_\u4E2D_PARAM3_\u7684\u6240\u6709\u5339\u914D\u9879\u53CA\u5176\u7EC4\u5B58\u50A8\u5728_PARAM4_\u4E2D\uFF08\u6807\u5FD7\uFF1A_PARAM2_\uFF09","Replaces a part of a string that matches a regex pattern with another string.":"\u7528\u53E6\u4E00\u4E2A\u5B57\u7B26\u4E32\u66FF\u6362\u4E0E\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\u5339\u914D\u7684\u5B57\u7B26\u4E32\u7684\u4E00\u90E8\u5206\u3002","Replace pattern matches with a string":"\u7528\u5B57\u7B26\u4E32\u66FF\u6362\u6A21\u5F0F\u5339\u914D","Execute _PARAM1_ with the following _PARAM2_ for a match in _PARAM3_, and store the result in _PARAM4_":"\u4F7F\u7528_PARAM2_\u6267\u884C_PARAM1_\u4EE5\u5728_PARAM3_\u4E2D\u8FDB\u884C\u5339\u914D\uFF0C\u5E76\u5C06\u7ED3\u679C\u5B58\u50A8\u5728_PARAM4_\u4E2D","The string to search for pattern matches in":"\u641C\u7D22\u6A21\u5F0F\u5728\u5176\u5339\u914D\u4E2D\u7684\u5B57\u7B26\u4E32","The string to replace the matching patterns with":"\u7528\u5B57\u7B26\u4E32\u66FF\u6362\u5339\u914D\u7684\u6A21\u5F0F","Finds a regex pattern in a string, and returns the index of the position of the match, or -1 if it doesn't match the pattern.":"\u5728\u5B57\u7B26\u4E32\u4E2D\u67E5\u627E\u6B63\u5219\u8868\u8FBE\u5F0F\u6A21\u5F0F\uFF0C\u5E76\u8FD4\u56DE\u5339\u914D\u4F4D\u7F6E\u7684\u7D22\u5F15\uFF0C\u5982\u679C\u4E0D\u5339\u914D\u6A21\u5F0F\uFF0C\u5219\u8FD4\u56DE-1\u3002","Find a pattern":"\u627E\u5230\u6A21\u5F0F","Sprite Snapshot":"\u7CBE\u7075\u5FEB\u7167","Renders an object, layer, scene or an area of a scene and puts the resulting image into a sprite.":"\u6E32\u67D3\u5BF9\u8C61\u3001\u56FE\u5C42\u3001\u573A\u666F\u6216\u573A\u666F\u533A\u57DF\uFF0C\u5E76\u5C06\u751F\u6210\u7684\u56FE\u50CF\u653E\u5165\u7CBE\u7075\u3002","Renders an object and puts the rendered image into a sprite object.":"\u6E32\u67D3\u5BF9\u8C61\u5E76\u5C06\u6E32\u67D3\u7684\u56FE\u50CF\u653E\u5165\u7CBE\u7075\u5BF9\u8C61\u4E2D\u3002","Render an object into a sprite":"\u5C06\u5BF9\u8C61\u6E32\u67D3\u4E3A\u7CBE\u7075","Render _PARAM1_ into sprite _PARAM2_":"\u5C06_PARAM1_\u6E32\u67D3\u4E3A\u7CBE\u7075_PARAM2_","The object to render":"\u8981\u6E32\u67D3\u7684\u5BF9\u8C61","The sprite to render to":"\u8981\u6E32\u67D3\u7684\u7CBE\u7075","Renders a layer and puts the rendered image into a sprite object.":"\u6E32\u67D3\u5C42\u5E76\u5C06\u6E32\u67D3\u7684\u56FE\u50CF\u653E\u5165\u7CBE\u7075\u5BF9\u8C61\u4E2D\u3002","Render a layer into a sprite":"\u5C06\u56FE\u5C42\u6E32\u67D3\u4E3A\u7CBE\u7075","Render layer _PARAM1_ into sprite _PARAM2_":"\u5C06\u56FE\u5C42_PARAM1_\u6E32\u67D3\u4E3A\u7CBE\u7075_PARAM2_","The layer to render":"\u6E32\u67D3\u7684\u5C42","Renders a scene and puts the rendered image into a sprite object.":"\u6E32\u67D3\u4E00\u4E2A\u573A\u666F\u5E76\u5C06\u6E32\u67D3\u7684\u56FE\u50CF\u653E\u5165\u7CBE\u7075\u5BF9\u8C61\u4E2D\u3002","Render a scene into a sprite":"\u5C06\u573A\u666F\u6E32\u67D3\u5230\u7CBE\u7075\u4E2D","Render the current scene into sprite _PARAM1_":"\u5C06\u5F53\u524D\u573A\u666F\u6E32\u67D3\u5230\u7CBE\u7075_PARAM1_\u4E2D","Renders a defined area of a scene and puts the rendered image into a sprite object.":"\u6E32\u67D3\u573A\u666F\u7684\u6307\u5B9A\u533A\u57DF\u5E76\u5C06\u6E32\u67D3\u7684\u56FE\u50CF\u653E\u5165\u7CBE\u7075\u5BF9\u8C61\u4E2D\u3002","Render an area of a scene into a sprite":"\u5C06\u573A\u666F\u7684\u533A\u57DF\u6E32\u67D3\u5230\u7CBE\u7075\u4E2D","Render the area of a current scene into Sprite: _PARAM1_, from OriginX: _PARAM2_, OriginY: _PARAM3_, with Width: _PARAM4_, Height: _PARAM5_":"\u6E32\u67D3\u5F53\u524D\u573A\u666F\u7684\u533A\u57DF\u5230\u7CBE\u7075\uFF1A_PARAM1_\uFF0C\u4ECEOriginX\uFF1A_PARAM2_\uFF0COriginY\uFF1A_PARAM3_\uFF0C\u5BBD\u5EA6\uFF1A_PARAM4_\uFF0C\u9AD8\u5EA6\uFF1A_PARAM5_","Origin X position of the render area":"\u6E32\u67D3\u533A\u57DF\u7684\u8D77\u70B9X\u4F4D\u7F6E","Origin Y Position of the render area":"\u6E32\u67D3\u533A\u57DF\u7684\u8D77\u70B9Y\u4F4D\u7F6E","Width of the are to render":"\u6E32\u67D3\u533A\u57DF\u7684\u5BBD\u5EA6","Height of the area to render":"\u6E32\u67D3\u533A\u57DF\u7684\u9AD8\u5EA6","Repeat every X seconds":"\u6BCF\u9694X\u79D2\u91CD\u590D","Trigger an event every X seconds.":"\u6BCF\u9694X\u79D2\u89E6\u53D1\u4E00\u4E2A\u4E8B\u4EF6\u3002","Triggers every X seconds.":"\u6BCF\u9694X\u79D2\u89E6\u53D1\u3002","Repeat with a scene timer":"\u91CD\u590D\u4F7F\u7528\u573A\u666F\u8BA1\u65F6\u5668","Repeat every _PARAM2_ seconds using timer _PARAM1_":"\u4F7F\u7528\u5B9A\u65F6\u5668_PARAM1_\u6BCF\u9694_PARAM2_\u79D2\u91CD\u590D","Timer name used to loop":"\u7528\u4E8E\u5FAA\u73AF\u7684\u5B9A\u65F6\u5668\u540D\u79F0","Duration in seconds between each repetition":"\u6BCF\u6B21\u91CD\u590D\u4E4B\u95F4\u7684\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","the number of times the timer has repeated.":"\u5B9A\u65F6\u5668\u5DF2\u91CD\u590D\u7684\u6B21\u6570\u3002","Repetition number of a scene timer":"\u573A\u666F\u5B9A\u65F6\u5668\u91CD\u590D\u6B21\u6570","Repetition number of timer _PARAM1_":"\u5B9A\u65F6\u5668_PARAM1_\u7684\u91CD\u590D\u6B21\u6570","Triggers every X seconds X amount of times.":"\u6BCF\u9694X\u79D2\u89E6\u53D1X\u6B21\u3002","Repeat with a scene timer X times":"\u91CD\u590D\u4F7F\u7528\u573A\u666F\u8BA1\u65F6\u5668X\u6B21","Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_":"\u4F7F\u7528\u5B9A\u65F6\u5668_PARAM1_\u6BCF\u9694_PARAM2_\u79D2\u91CD\u590D_PARAM3_\u6B21","The limit of loops":"\u5FAA\u73AF\u7684\u6B21\u6570\u9650\u5236","Maximum nuber of repetition (-1 to repeat forever).":"\u91CD\u590D\u6B21\u6570\u7684\u6700\u5927\u503C\uFF08-1\u8868\u793A\u6C38\u8FDC\u91CD\u590D\uFF09\u3002","Reset repetition count of a scene timer.":"\u91CD\u7F6E\u573A\u666F\u5B9A\u65F6\u5668\u7684\u91CD\u590D\u8BA1\u6570\u3002","Reset repetition count of a scene timer":"\u91CD\u7F6E\u573A\u666F\u5B9A\u65F6\u5668\u7684\u91CD\u590D\u8BA1\u6570","Reset repetition count for timer _PARAM1_":"\u91CD\u7F6E\u5B9A\u65F6\u5668_PARAM1_\u7684\u91CD\u590D\u8BA1\u6570","Allows to repeat an object timer every X seconds.":"\u5141\u8BB8\u6BCF\u9694X\u79D2\u91CD\u590D\u5BF9\u8C61\u8BA1\u65F6\u5668\u3002","The name of the timer to repeat":"\u8981\u91CD\u590D\u7684\u5B9A\u65F6\u5668\u540D\u79F0","The time between each trigger (in seconds)":"\u6BCF\u6B21\u89E6\u53D1\u4E4B\u95F4\u7684\u65F6\u95F4\uFF08\u79D2\uFF09","How many times should the timer trigger? -1 for forever.":"\u5B9A\u65F6\u5668\u5E94\u89E6\u53D1\u7684\u6B21\u6570\uFF1F-1\u4EE3\u8868\u6C38\u8FDC\u3002","An internal counter":"\u5185\u90E8\u8BA1\u6570\u5668","Repeat with an object timer":"\u7528\u4E00\u4E2A\u5BF9\u8C61\u7684\u8BA1\u65F6\u5668\u91CD\u590D","Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_":"\u4F7F\u7528_PARAM0_\u7684\u8BA1\u65F6\u5668_PARAM2_\u6BCF_PARAM3_\u79D2\u91CD\u590D\u3002","Repetition number of an object timer":"\u5BF9\u8C61\u8BA1\u65F6\u5668\u7684\u91CD\u590D\u6B21\u6570","Repetition number of timer _PARAM2_":"\u8BA1\u65F6\u5668_PARAM2_\u7684\u91CD\u590D\u6B21\u6570","Repeat with an object timer X times":"\u4F7F\u7528\u5BF9\u8C61\u8BA1\u65F6\u5668\u91CD\u590DX\u6B21","Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_":"\u4F7F\u7528_PARAM0_\u7684\u8BA1\u65F6\u5668_PARAM2_\u6BCF_PARAM3_\u79D2\u91CD\u590D_PARAM4_\u6B21\u3002","Reset repetition count of an object timer.":"\u91CD\u7F6E\u5BF9\u8C61\u8BA1\u65F6\u5668\u7684\u91CD\u590D\u6B21\u6570\u3002","Reset repetition count of an object timer":"\u91CD\u7F6E\u5BF9\u8C61\u8BA1\u65F6\u5668\u7684\u91CD\u590D\u6B21\u6570","Reset repetition count for timer _PARAM2_ of _PARAM0_":"\u91CD\u7F6E_PARAM0_\u7684\u8BA1\u65F6\u5668_PARAM2_\u7684\u91CD\u590D\u6B21\u6570","Triggers every X seconds, where X is defined in the behavior properties.":"\u89E6\u53D1\u6BCF\u9694X\u79D2\uFF0C\u5176\u4E2DX\u5728\u884C\u4E3A\u5C5E\u6027\u4E2D\u5B9A\u4E49\u3002","Repeat every X seconds (deprecated)":"\u6BCFX\u79D2\u91CD\u590D\uFF08\u5DF2\u5F03\u7528\uFF09","Recurring timer _PARAM1_ of _PARAM0_ has triggered":"_PARAM0_\u7684_PARAM1_\u5FAA\u73AF\u8BA1\u65F6\u5668\u5DF2\u89E6\u53D1","Pauses a recurring timer.":"\u6682\u505C\u5FAA\u73AF\u8BA1\u65F6\u5668\u3002","Pause a recurring timer (deprecated)":"\u6682\u505C\u5FAA\u73AF\u8BA1\u65F6\u5668\uFF08\u5DF2\u5F03\u7528\uFF09","Pause recurring timer _PARAM1_ of _PARAM0_":"\u6682\u505C_PARAM0_\u7684_PARAM1_\u5FAA\u73AF\u8BA1\u65F6\u5668","Resumes a paused recurring timer.":"\u6062\u590D\u5DF2\u6682\u505C\u7684\u5B9A\u65F6\u5668\u3002","Resume a recurring timer (deprecated)":"\u6062\u590D\u5DF2\u6682\u505C\u7684\u5B9A\u65F6\u5668\uFF08\u5DF2\u5F03\u7528\uFF09","Resume recurring timer _PARAM1_ of _PARAM0_":"\u6062\u590D\u91CD\u590D\u5B9A\u65F6\u5668_PARAM1_\u7684\u7B2C_PARAM0_\u6B21","Allows to trigger the recurring timer X times again.":"\u5141\u8BB8\u518D\u6B21\u89E6\u53D1\u91CD\u590D\u5B9A\u65F6\u5668X\u6B21\u3002","Reset the limit (deprecated)":"\u91CD\u7F6E\u9650\u5236\uFF08\u5DF2\u5F03\u7528\uFF09","Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again":"\u5141\u8BB8\u518D\u6B21\u89E6\u53D1\u91CD\u590D\u5B9A\u65F6\u5668_PARAM1_\u7684\u7B2C_PARAM0_\u6B21","Rolling counter":"\u6EDA\u52A8\u8BA1\u6570\u5668","Smoothly change a counter value in a text object.":"\u5728\u6587\u672C\u5BF9\u8C61\u4E2D\u5E73\u6ED1\u66F4\u6539\u8BA1\u6570\u5668\u503C\u3002","Smoothly changes a counter value in a text object.":"\u5E73\u6ED1\u66F4\u6539\u6587\u672C\u5BF9\u8C61\u7684\u8BA1\u6570\u5668\u503C\u3002","Animation duration":"\u52A8\u753B\u6301\u7EED\u65F6\u95F4","Increment":"\u589E\u91CF","the value of the counter.":"\u8BA1\u6570\u5668\u7684\u503C\u3002","Counter value":"\u8BA1\u6570\u5668\u503C","the counter value":"\u8BA1\u6570\u5668\u503C","Directly display the counter value without playing the animation.":"\u76F4\u63A5\u663E\u793A\u8BA1\u6570\u5668\u503C\uFF0C\u800C\u4E0D\u64AD\u653E\u52A8\u753B\u3002","Jump to the counter animation end":"\u8DF3\u8F6C\u5230\u8BA1\u6570\u5668\u52A8\u753B\u7684\u672B\u5C3E","Jump to the counter animation end of _PARAM0_":"\u8DF3\u8F6C\u5230\u53C2\u65700\u7684\u8BA1\u6570\u5668\u52A8\u753B\u7684\u672B\u5C3E","Room-based camera movement":"\u57FA\u4E8E\u623F\u95F4\u7684\u6444\u50CF\u673A\u79FB\u52A8","Move and zoom camera to the room object that contains the trigger object (usually the player).":"\u5C06\u6444\u50CF\u673A\u79FB\u52A8\u548C\u7F29\u653E\u5230\u5305\u542B\u89E6\u53D1\u5BF9\u8C61\uFF08\u901A\u5E38\u662F\u73A9\u5BB6\uFF09\u7684\u623F\u95F4\u5BF9\u8C61\u4E2D\u3002","Move and zoom camera to the room object that contains the trigger object (player)":"\u5C06\u6444\u50CF\u673A\u79FB\u52A8\u548C\u7F29\u653E\u5230\u5305\u542B\u89E6\u53D1\u5BF9\u8C61\uFF08\u73A9\u5BB6\uFF09\u7684\u623F\u95F4\u5BF9\u8C61\u3002","Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)":"\u5C06\u6444\u50CF\u5934\u79FB\u52A8\u5230\u5305\u542B\u89E6\u53D1\u5BF9\u8C61_PARAM2_\u7684\u623F\u95F4\u5BF9\u8C61_PARAM1_\uFF08\u56FE\u5C42\uFF1A_PARAM3_\uFF0C\u63D2\u503C\u901F\u5EA6\uFF1A_PARAM4_\uFF0C\u6700\u5927\u7F29\u653E\uFF1A_PARAM5_\uFF0C\u6700\u5C0F\u7F29\u653E\uFF1A_PARAM6_\uFF0C\u8FB9\u754C\u7F13\u51B2\uFF1A_PARAM7_px\uFF09","Room object":"\u623F\u95F4\u5BF9\u8C61","Room objects are used to mark areas that should be seen by the camera.":"\u623F\u95F4\u5BF9\u8C61\u7528\u4E8E\u6807\u8BB0\u6444\u50CF\u5934\u5E94\u770B\u5230\u7684\u533A\u57DF\u3002","Trigger object (player)":"\u89E6\u53D1\u5BF9\u8C61\uFF08\u73A9\u5BB6\uFF09","When the Trigger Object touches a new Room Object, the camera will move to the new room":"\u5F53\u89E6\u53D1\u5BF9\u8C61\u89E6\u78B0\u5230\u65B0\u7684\u623F\u95F4\u5BF9\u8C61\u65F6\uFF0C\u6444\u50CF\u5934\u5C06\u79FB\u52A8\u5230\u65B0\u7684\u623F\u95F4","Lerp speed":"\u63D2\u503C\u901F\u5EA6","Range: 0 to 1":"\u8303\u56F4\uFF1A0 \u5230 1","Maximum zoom":"\u6700\u5927\u7F29\u653E","Minimum zoom":"\u6700\u5C0F\u7F29\u653E","Outside buffer (pixels)":"\u5916\u90E8\u7F13\u51B2\u533A\uFF08\u50CF\u7D20\uFF09","Minimum extra space displayed around each side the room":"\u5728\u623F\u95F4\u7684\u6BCF\u4E00\u4FA7\u5468\u56F4\u663E\u793A\u6700\u5C0F\u7684\u989D\u5916\u7A7A\u95F4","Check if trigger object (usually the player) has entered a new room on this frame.":"\u68C0\u67E5\u89E6\u53D1\u5BF9\u8C61\uFF08\u901A\u5E38\u662F\u73A9\u5BB6\uFF09\u662F\u5426\u5728\u6B64\u5E27\u8FDB\u5165\u65B0\u7684\u623F\u95F4\u3002","Check if trigger object (player) has entered a new room":"\u68C0\u67E5\u89E6\u53D1\u5BF9\u8C61\uFF08\u73A9\u5BB6\uFF09\u662F\u5426\u8FDB\u5165\u4E86\u65B0\u7684\u623F\u95F4","_PARAM1_ has just entered a new room":"_PARAM1_\u521A\u521A\u8FDB\u5165\u4E86\u65B0\u7684\u623F\u95F4","Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).":"\u68C0\u67E5\u6444\u50CF\u5934\u662F\u5426\u6B63\u5728\u7F29\u653E\uFF08\u9700\u8981\u5728\u6B64\u6269\u5C55\u4E2D\u4F7F\u7528\u201C\u79FB\u52A8\u548C\u7F29\u653E\u6444\u50CF\u5934\u201D\u52A8\u4F5C\uFF09\u3002","Check if camera is zooming":"\u68C0\u67E5\u6444\u50CF\u5934\u662F\u5426\u6B63\u5728\u7F29\u653E","Camera is zooming":"\u6444\u50CF\u5934\u6B63\u5728\u7F29\u653E","Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).":"\u68C0\u67E5\u6444\u50CF\u5934\u662F\u5426\u6B63\u5728\u79FB\u52A8\uFF08\u9700\u8981\u5728\u6B64\u6269\u5C55\u4E2D\u4F7F\u7528\u201C\u79FB\u52A8\u548C\u7F29\u653E\u6444\u50CF\u5934\u201D\u52A8\u4F5C\uFF09\u3002","Check if camera is moving":"\u68C0\u67E5\u6444\u50CF\u5934\u662F\u5426\u6B63\u5728\u79FB\u52A8","Camera is moving":"\u6444\u50CF\u5934\u6B63\u5728\u79FB\u52A8","Animated Score Counter":"\u52A8\u753B\u8BB0\u5206\u724C","An animated score counter with an icon and a customisable font.":"\u5E26\u56FE\u6807\u548C\u53EF\u81EA\u5B9A\u4E49\u5B57\u4F53\u7684\u52A8\u753B\u8BB0\u5206\u724C\u3002","Shake objects with translation, rotation and scale.":"\u7528\u5E73\u79FB\u3001\u65CB\u8F6C\u548C\u7F29\u653E\u6296\u52A8\u5BF9\u8C61\u3002","Shake object (position, angle, scale)":"\u7528\u5E73\u79FB\u3001\u65CB\u8F6C\u3001\u7F29\u653E\u6296\u52A8\u5BF9\u8C61","Shake an object, using one or more ways to shake (position, angle, scale). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"\u6447\u6643\u4E00\u4E2A\u5BF9\u8C61\uFF0C\u4F7F\u7528\u4E00\u79CD\u6216\u591A\u79CD\u65B9\u5F0F\u6765\u6447\u6643\uFF08\u4F4D\u7F6E\uFF0C\u89D2\u5EA6\uFF0C\u6BD4\u4F8B\uFF09\u3002\u5982\u679C\u4F7F\u7528\u4E0D\u540C\u7684\u53C2\u6570\uFF0C\u786E\u4FDD\u5728\u5F00\u59CB\u65B0\u7684\u6447\u6643\u4E4B\u524D\"\u505C\u6B62\u6447\u6643\"\u3002","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_":"\u6447\u6643\u5BF9\u8C61_PARAM0_\u4E00\u6BB5\u65F6\u95F4_PARAM2_\u79D2\u3002\u4FEE\u6539\u4F4D\u7F6E\u632F\u5E45_PARAM3_\u5728X\u8F74\u548C_PARAM4_\u5728Y\u8F74\uFF0C\u89D2\u5EA6\u65CB\u8F6C\u632F\u5E45_PARAM5_\uFF0C\u548C\u6BD4\u4F8B\u632F\u5E45_PARAM6_\u3002\u6447\u6643\u4E4B\u95F4\u7B49\u5F85_PARAM7_\u79D2\u3002\u6301\u7EED\u6447\u6643\u76F4\u5230\u505C\u6B62\uFF1A_PARAM8_","Duration of shake (in seconds) (Default: 0.5)":"\u6447\u6643\u7684\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\uFF08\u9ED8\u8BA4\uFF1A0.5\uFF09","Amplitude of postion shake in X direction (in pixels) (For example: 5)":"\u4F4D\u7F6E\u5728X\u8F74\u4E0A\u7684\u632F\u52A8\u5E45\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\uFF08\u4F8B\u5982\uFF1A5\uFF09","Amplitude of position shake in Y direction (in pixels) (For example: 5)":"\u4F4D\u7F6E\u5728Y\u8F74\u4E0A\u7684\u632F\u52A8\u5E45\u5EA6\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\uFF08\u4F8B\u5982\uFF1A5\uFF09","Use a negative number to make the single-shake move in the opposite direction.":"\u4F7F\u7528\u8D1F\u6570\u4F7F\u5355\u6B21\u6447\u6643\u671D\u76F8\u53CD\u65B9\u5411\u79FB\u52A8\u3002","Amplitude of angle rotation shake (in degrees) (For example: 5)":"\u89D2\u5EA6\u65CB\u8F6C\u632F\u52A8\u632F\u5E45\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\uFF08\u4F8B\u5982\uFF1A5\uFF09","Amplitude of scale shake (in percent change) (For example: 5)":"\u6BD4\u4F8B\u632F\u52A8\u632F\u5E45\uFF08\u4EE5\u767E\u5206\u6BD4\u53D8\u5316\uFF09\uFF08\u4F8B\u5982\uFF1A5\uFF09","Amount of time between shakes (in seconds) (Default: 0.08)":"\u4E24\u6B21\u6447\u52A8\u4E4B\u95F4\u7684\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\uFF08\u9ED8\u8BA4\u503C\uFF1A0.08\uFF09","For a single-shake effect, set it to the same value as \"Duration\".":"\u5BF9\u4E8E\u5355\u6B21\u6447\u52A8\u6548\u679C\uFF0C\u5C06\u5176\u8BBE\u7F6E\u4E3A\"\u6301\u7EED\u65F6\u95F4\"\u7684\u76F8\u540C\u503C\u3002","Stop shaking an object.":"\u505C\u6B62\u9707\u52A8\u7269\u4F53\u3002","Stop shaking an object":"\u505C\u6B62\u9707\u52A8\u7269\u4F53","Stop shaking _PARAM0_":"\u505C\u6B62\u9707\u52A8_PARAM0_","Check if an object is shaking.":"\u68C0\u67E5\u7269\u4F53\u662F\u5426\u6B63\u5728\u9707\u52A8\u3002","Check if an object is shaking":"\u68C0\u67E5\u7269\u4F53\u662F\u5426\u6B63\u5728\u9707\u52A8","_PARAM0_ is shaking":"_PARAM0_\u6B63\u5728\u9707\u52A8","Default score":"\u9ED8\u8BA4\u5206\u6570","Increasing score sound":"\u589E\u52A0\u5206\u6570\u58F0\u97F3","Sound":"\u58F0\u97F3","Min baseline pitch":"\u6700\u5C0F\u57FA\u7EBF\u97F3\u8C03","Max baseline pitch":"\u6700\u5927\u57FA\u7EBF\u97F3\u8C03","Pitch factor":"\u97F3\u8C03\u56E0\u5B50","Pitch reset timeout":"\u97F3\u8C03\u91CD\u7F6E\u8D85\u65F6","Current pitch":"\u5F53\u524D\u97F3\u8C03","the score of the object.":"\u7269\u4F53\u7684\u5F97\u5206\u3002","Reset the pitch to the baseline value.":"\u5C06\u97F3\u8C03\u91CD\u7F6E\u4E3A\u57FA\u7EBF\u503C\u3002","Reset pitch":"\u91CD\u7F6E\u97F3\u8C03","Reset the pitch of _PARAM0_":"\u91CD\u7F6E_PARM0_\u7684\u97F3\u8C03","Screen wrap":"\u5C4F\u5E55\u73AF\u7ED5","Teleport object when it moves off the screen and immediately appear on the opposite side while maintaining speed and trajectory.":"\u7269\u4F53\u79FB\u51FA\u5C4F\u5E55\u65F6\u4F20\u9001\u7269\u4F53\uFF0C\u5E76\u7ACB\u5373\u51FA\u73B0\u5728\u76F8\u53CD\u65B9\u5411\uFF0C\u540C\u65F6\u4FDD\u6301\u901F\u5EA6\u548C\u8F68\u8FF9\u3002","Teleport the object when leaving one side of the screen so that it immediately reappears on the opposite side, maintaining speed and trajectory.":"\u5F53\u7269\u4F53\u79BB\u5F00\u5C4F\u5E55\u7684\u4E00\u4FA7\u65F6\uFF0C\u7ACB\u5373\u4F20\u9001\u7269\u4F53\uFF0C\u4EE5\u4FDD\u6301\u901F\u5EA6\u548C\u8F68\u8FF9\u3002","Screen Wrap":"\u5C4F\u5E55\u5305\u88F9","Horizontal wrapping":"\u6C34\u5E73\u5305\u88F9","Vertical wrapping":"\u5782\u76F4\u5305\u88F9","Top border of wrapped area (Y)":"\u5305\u88F9\u533A\u57DF\u7684\u9876\u90E8\u8FB9\u754C\uFF08Y\uFF09","Left border of wrapped area (X)":"\u5305\u88F9\u533A\u57DF\u7684\u5DE6\u4FA7\u8FB9\u754C\uFF08X\uFF09","Right border of wrapped area (X)":"\u5305\u88F9\u533A\u57DF\u7684\u53F3\u4FA7\u8FB9\u754C\uFF08X\uFF09","If blank, the value will be the scene width.":"\u5982\u679C\u4E3A\u7A7A\uFF0C\u5219\u8BE5\u503C\u5C06\u662F\u573A\u666F\u5BBD\u5EA6\u3002","Bottom border of wrapped area (Y)":"\u5305\u88F9\u533A\u57DF\u7684\u4E0B\u8FB9\u754C\uFF08Y\uFF09","If blank, the value will be scene height.":"\u5982\u679C\u4E3A\u7A7A\uFF0C\u8BE5\u503C\u5C06\u4E3A\u573A\u666F\u9AD8\u5EA6\u3002","Number of pixels past the center where the object teleports and appears":"\u7269\u4F53\u8D85\u51FA\u4E2D\u5FC3\u591A\u5C11\u50CF\u7D20\u65F6\u4F20\u9001\u5E76\u51FA\u73B0","Check if the object is wrapping on the left and right borders.":"\u68C0\u67E5\u7269\u4F53\u662F\u5426\u5305\u88F9\u5728\u5DE6\u53F3\u8FB9\u754C\u4E0A\u3002","Is horizontal wrapping":"\u662F\u5426\u6C34\u5E73\u5305\u88F9","_PARAM0_ is horizontal wrapping":"_PARAM0_\u662F\u6C34\u5E73\u5305\u88F9","Check if the object is wrapping on the top and bottom borders.":"\u68C0\u67E5\u7269\u4F53\u662F\u5426\u5728\u9876\u90E8\u548C\u5E95\u90E8\u8FB9\u754C\u4E0A\u5305\u88F9\u3002","Is vertical wrapping":"\u662F\u5426\u5782\u76F4\u5305\u88F9","_PARAM0_ is vertical wrapping":"_PARAM0_\u662F\u5782\u76F4\u5305\u88F9","Enable wrapping on the left and right borders.":"\u5728\u5DE6\u53F3\u8FB9\u754C\u4E0A\u542F\u7528\u5305\u88F9\u3002","Enable horizontal wrapping":"\u542F\u7528\u6C34\u5E73\u5305\u88F9","Enable _PARAM0_ horizontal wrapping: _PARAM2_":"\u542F\u7528_PARAM0_\u6C34\u5E73\u5305\u88F9\uFF1A_PARAM2_","Enable wrapping on the top and bottom borders.":"\u5728\u9876\u90E8\u548C\u5E95\u90E8\u8FB9\u754C\u4E0A\u542F\u7528\u5305\u88F9\u3002","Enable vertical wrapping":"\u542F\u7528\u5782\u76F4\u5305\u88F9","Enable _PARAM0_ vertical wrapping: _PARAM2_":"\u542F\u7528_PARAM0_\u5782\u76F4\u5305\u88F9\uFF1A_PARAM2_","Top border (Y position).":"\u9876\u90E8\u8FB9\u754C\uFF08Y\u4F4D\u7F6E\uFF09\u3002","Top border":"\u9876\u90E8\u8FB9\u754C","Left border (X position).":"\u5DE6\u8FB9\u754C\uFF08X\u4F4D\u7F6E\uFF09\u3002","Left border":"\u5DE6\u8FB9\u754C","Right border (X position).":"\u53F3\u8FB9\u754C\uFF08X\u4F4D\u7F6E\uFF09\u3002","Right border":"\u53F3\u8FB9\u754C","Bottom border (Y position).":"\u5E95\u90E8\u8FB9\u754C\uFF08Y\u4F4D\u7F6E\uFF09\u3002","Bottom border":"\u5E95\u90E8\u8FB9\u6846","Number of pixels past the center where the object teleports and appears.":"\u8D85\u51FA\u4E2D\u5FC3\u50CF\u7D20\u6570\uFF0C\u7269\u4F53\u4F20\u9001\u5E76\u51FA\u73B0\u7684\u4F4D\u7F6E\u3002","Trigger offset":"\u89E6\u53D1\u5668\u504F\u79FB","Set top border (Y position).":"\u8BBE\u7F6E\u9876\u90E8\u8FB9\u6846(Y\u4F4D\u7F6E)\u3002","Set top border":"\u8BBE\u7F6E\u9876\u90E8\u8FB9\u6846","Set _PARAM0_ top border to _PARAM2_":"\u5C06_PARAM0_\u9876\u90E8\u8FB9\u6846\u8BBE\u7F6E\u4E3A_PARAM2_","Top border value":"\u9876\u90E8\u8FB9\u6846\u6570\u503C","Set left border (X position).":"\u8BBE\u7F6E\u5DE6\u8FB9\u6846(X\u4F4D\u7F6E)\u3002","Set left border":"\u8BBE\u7F6E\u5DE6\u8FB9\u6846","Set _PARAM0_ left border to _PARAM2_":"\u5C06_PARAM0_\u5DE6\u8FB9\u6846\u8BBE\u7F6E\u4E3A_PARAM2_","Left border value":"\u5DE6\u8FB9\u6846\u6570\u503C","Set bottom border (Y position).":"\u8BBE\u7F6E\u5E95\u90E8\u8FB9\u6846(Y\u4F4D\u7F6E)\u3002","Set bottom border":"\u8BBE\u7F6E\u5E95\u90E8\u8FB9\u6846","Set _PARAM0_ bottom border to _PARAM2_":"\u5C06_PARAM0_\u5E95\u90E8\u8FB9\u6846\u8BBE\u7F6E\u4E3A_PARAM2_","Bottom border value":"\u5E95\u90E8\u8FB9\u6846\u6570\u503C","Set right border (X position).":"\u8BBE\u7F6E\u53F3\u8FB9\u6846(X\u4F4D\u7F6E)\u3002","Set right border":"\u8BBE\u7F6E\u53F3\u8FB9\u6846","Set _PARAM0_ right border to _PARAM2_":"\u5C06_PARAM0_\u53F3\u8FB9\u6846\u8BBE\u7F6E\u4E3A_PARAM2_","Right border value":"\u53F3\u8FB9\u6846\u6570\u503C","Set trigger offset (pixels).":"\u8BBE\u7F6E\u89E6\u53D1\u5668\u504F\u79FB(\u50CF\u7D20)\u3002","Set trigger offset":"\u8BBE\u7F6E\u89E6\u53D1\u5668\u504F\u79FB","Set _PARAM0_ trigger offset to _PARAM2_ pixels":"\u5C06_PARAM0_\u89E6\u53D1\u5668\u504F\u79FB\u8BBE\u7F6E\u4E3A_PARAM2_\u50CF\u7D20","SetScreen Offset Leaving Value":"Save current velocity values.","Screen Wrap (physics objects)":"\u5C4F\u5E55\u5305\u88F9\uFF08\u7269\u7406\u5BF9\u8C61\uFF09","Angular Velocity":"\u89D2\u901F\u5EA6","Linear Velocity X":"\u7EBF\u901F\u5EA6X","Linear Velocity Y":"\u7EBF\u901F\u5EA6Y","Save current velocity values.":"\u4FDD\u5B58\u5F53\u524D\u901F\u5EA6\u503C","Save current velocity values":"\u4FDD\u5B58\u5F53\u524D\u901F\u5EA6\u503C","Save current velocity values of _PARAM0_":"\u4FDD\u5B58_PARAM0_\u5F53\u524D\u901F\u5EA6\u503C","Apply saved velocity values.":"\u5E94\u7528\u4FDD\u5B58\u7684\u901F\u5EA6\u503C\u3002","Apply saved velocity values":"\u5E94\u7528\u4FDD\u5B58\u7684\u901F\u5EA6\u503C","Apply saved velocity values of _PARAM0_":"\u5E94\u7528_PARAM0_\u4FDD\u5B58\u7684\u901F\u5EA6\u503C","Animate Shadow Clones":"\u52A8\u753B\u9634\u5F71\u514B\u9686","Create and animate shadow clones that follow the path of a primary object.":"\u521B\u5EFA\u548C\u52A8\u753B\u9634\u5F71\u514B\u9686\u4EE5\u8DDF\u968F\u4E3B\u8981\u5BF9\u8C61\u7684\u8DEF\u5F84\u3002","Select the primary object, the shadow clone object, the number of shadow clones, the number of frames between shadow clones, the rate that shadow clones will fade away (if desired), the Z-value of the shadow clones, and the layer the shadow clones will be created on.":"\u9009\u62E9\u4E3B\u8981\u7269\u4F53\uFF0C\u5F71\u5B50\u514B\u9686\u7269\u4F53\uFF0C\u5F71\u5B50\u514B\u9686\u6570\u91CF\uFF0C\u5F71\u5B50\u514B\u9686\u4E4B\u95F4\u7684\u5E27\u6570\uFF0C\u5F71\u5B50\u514B\u9686\u6DE1\u51FA\u7684\u901F\u7387\uFF08\u5982\u679C\u9700\u8981\uFF09\uFF0C\u5F71\u5B50\u514B\u9686\u7684Z\u503C\uFF0C\u4EE5\u53CA\u5F71\u5B50\u514B\u9686\u5C06\u88AB\u521B\u5EFA\u7684\u56FE\u5C42\u3002","Animate shadow clones that follow the path of a primary object":"\u52A8\u753B\u9634\u5F71\u514B\u9686\uFF0C\u8DDF\u968F\u4E3B\u8981\u5BF9\u8C61\u7684\u8DEF\u5F84","Create and animate _PARAM3_ copies of _PARAM2_ that follow the position of _PARAM1_, with _PARAM4_ empty frames between shadow clones, and fading the opacity of shadow clones by _PARAM5_ per clone. Shrink scale of shadow clones by _PARAM6_ per clone. Shadow clones will be created on _PARAM7_ layer with a Z-value of _PARAM8_. Match X scale: _PARAM9_ Match Y scale: _PARAM10_ Match angle: _PARAM11_ Match animation: _PARAM12_ Match animation frame: _PARAM13_ Match vertical flip: _PARAM14_ Match horizontal flip: _PARAM15_":"\u521B\u5EFA\u548C\u52A8\u753B_PARAM3_\u7684\u526F\u672C\uFF0C\u8FD9\u4E9B\u526F\u672C\u9075\u5FAA_PARAM1_\u7684\u4F4D\u7F6E\uFF0C\u4E0E\u7A7A\u7684\u5E27\u4E4B\u95F4_PARAM4_\u7684\u5F71\u5B50\u514B\u9686\uFF0C\u5E76\u4E14\u6BCF\u4E2A\u514B\u9686\u900F\u660E\u5EA6\u6DE1\u51FA_PARAM5_\u3002\u6BCF\u4E2A\u526F\u672C\u7F29\u5C0F\u6BD4\u7387_PARAM6_\u3002\u5F71\u5B50\u514B\u9686\u5C06\u5728_PARAM7_\u56FE\u5C42\u4E0A\u521B\u5EFA\uFF0CZ\u503C\u4E3A_PARAM8_\u3002\u5339\u914DX\u6BD4\u4F8B\uFF1A_PARAM9_ \u5339\u914DY\u6BD4\u4F8B\uFF1A_PARAM10_ \u5339\u914D\u89D2\u5EA6\uFF1A_PARAM11_ \u5339\u914D\u52A8\u753B\uFF1A_PARAM12_ \u5339\u914D\u52A8\u753B\u5E27\uFF1A_PARAM13_ \u5339\u914D\u5782\u76F4\u7FFB\u8F6C\uFF1A_PARAM14_ \u5339\u914D\u6C34\u5E73\u7FFB\u8F6C\uFF1A_PARAM15_","Object that shadow clones will follow":"\u5F71\u5B50\u514B\u9686\u5C06\u8DDF\u968F\u7684\u7269\u4F53","Shadows clones will be made of this object (Cannot be the same object used for primary object)":"\u9634\u5F71\u514B\u9686\u5C06\u7531\u6B64\u7269\u4F53\u5236\u6210\uFF08\u4E0D\u80FD\u4E0E\u4E3B\u8981\u5BF9\u8C61\u4F7F\u7528\u76F8\u540C\u7684\u5BF9\u8C61\uFF09","Number of shadow clones (Default: 1)":"\u5F71\u5B50\u514B\u9686\u6570\u91CF\uFF08\u9ED8\u8BA4\uFF1A1\uFF09","Number of empty frames between shadow clones (Default: 1)":"\u5F71\u5B50\u514B\u9686\u4E4B\u95F4\u7684\u7A7A\u5E27\u6570\uFF08\u9ED8\u8BA4\uFF1A1\uFF09","Fade speed (Range: 0 to 255) (Default: 0)":"\u6DE1\u51FA\u901F\u5EA6\uFF08\u8303\u56F4\uFF1A0\u5230255\uFF09\uFF08\u9ED8\u8BA4\uFF1A0\uFF09","Decrease in opacity for each consecutive shadow clone":"\u6BCF\u4E2A\u8FDE\u7EED\u9634\u5F71\u514B\u9686\u7684\u900F\u660E\u5EA6\u51CF\u5C11","Shrink speed (Range: 0 to 100) (Default: 0)":"\u7F29\u5C0F\u901F\u5EA6\uFF08\u8303\u56F4\uFF1A0\u5230100\uFF09\uFF08\u9ED8\u8BA4\uFF1A0\uFF09","Decrease in scale for each consecutive shadow clone":"\u6BCF\u4E2A\u8FDE\u7EED\u9634\u5F71\u514B\u9686\u7684\u7F29\u653E\u51CF\u5C11","Shadow clones will be created on this layer. (Default: \"\") (Base Layer)":"\u5F71\u5B50\u514B\u9686\u5C06\u5728\u6B64\u56FE\u5C42\u521B\u5EFA\u3002\uFF08\u9ED8\u8BA4\uFF1A\"\"\uFF09\uFF08\u57FA\u7840\u56FE\u5C42\uFF09","Z value for created shadow clones":"\u521B\u5EFA\u7684\u5F71\u5B50\u514B\u9686\u7684Z\u503C","Match X scale of primary object:":"\u4E3B\u8981\u5BF9\u8C61\u7684X\u6BD4\u4F8B\u5339\u914D\uFF1A","Match Y scale of primary object:":"\u4E3B\u8981\u5BF9\u8C61\u7684Y\u6BD4\u4F8B\u5339\u914D\uFF1A","Match angle of primary object:":"\u4E3B\u8981\u5BF9\u8C61\u7684\u89D2\u5EA6\u5339\u914D\uFF1A","Match animation of primary object:":"\u4E3B\u8981\u5BF9\u8C61\u7684\u52A8\u753B\u5339\u914D\uFF1A","Match animation frame of primary object:":"\u4E3B\u8981\u5BF9\u8C61\u7684\u52A8\u753B\u5E27\u5339\u914D\uFF1A","Match the vertical flip of primary object:":"\u4E3B\u8981\u5BF9\u8C61\u7684\u5782\u76F4\u7FFB\u8F6C\u5339\u914D\uFF1A","Match the horizontal flip of primary object:":"\u4E3B\u8981\u5BF9\u8C61\u7684\u6C34\u5E73\u7FFB\u8F6C\u5339\u914D\uFF1A","Delete shadow clone objects that are linked to a primary object.":"\u5220\u9664\u4E0E\u4E3B\u5BF9\u8C61\u76F8\u5173\u8054\u7684\u9634\u5F71\u514B\u9686\u5BF9\u8C61\u3002","Delete shadow clone objects that are linked to a primary object":"\u5220\u9664\u4E0E\u4E3B\u5BF9\u8C61\u76F8\u5173\u8054\u7684\u9634\u5F71\u514B\u9686\u5BF9\u8C61","Primary object":"\u4E3B\u5BF9\u8C61","Shadow clones":"\u9634\u5F71\u514B\u9686","Shake object":"\u6447\u6643\u5BF9\u8C61","Shake an object.":"\u6447\u6643\u4E00\u4E2A\u5BF9\u8C61\u3002","Shake objects with translation and rotation.":"\u4EE5\u5E73\u79FB\u548C\u65CB\u8F6C\u6765\u6296\u52A8\u5BF9\u8C61\u3002","Shake object (position, angle)":"\u6296\u52A8\u5BF9\u8C61\uFF08\u4F4D\u7F6E\uFF0C\u89D2\u5EA6\uFF09","Shake an object, using one or more ways to shake (position, angle). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"\u4F7F\u5BF9\u8C61\u6643\u52A8\uFF0C\u91C7\u7528\u4E00\u79CD\u6216\u591A\u79CD\u65B9\u5F0F\u8FDB\u884C\u6643\u52A8\uFF08\u4F4D\u7F6E\uFF0C\u89D2\u5EA6\uFF09\u3002\u786E\u4FDD\u5F00\u59CB\u65B0\u7684\u6643\u52A8\u4E4B\u524D\u201C\u505C\u6B62\u6643\u52A8\u201D\uFF0C\u5982\u679C\u4F7F\u7528\u4E0D\u540C\u7684\u53C2\u6570\uFF0C\u9700\u8981\u91C7\u7528\u76F8\u540C\u7684\u53C2\u6570\u3002","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_":"\u6643\u52A8\u5BF9\u8C61_PARAM0_\uFF0C\u6301\u7EED_PARAM2_\u79D2\u3002\u5728X\u8F74\u4E0A\u5C06\u4F4D\u7F6E\u632F\u5E45_PARAM3_\u548CY\u8F74\u4E0A_PARAM4_\uFF0C\u89D2\u5EA6\u65CB\u8F6C\u632F\u5E45_PARAM5_. \u7B49\u5F85_PARAM6_\u79D2\u3002\u8FDE\u7EED\u6643\u52A8\u76F4\u5230\u505C\u6B62\uFF1A_PARAM7_","Stop any shaking of object that was initiated by the Shake Object extension.":"\u505C\u6B62\u7531\u6643\u52A8\u5BF9\u8C61\u6269\u5C55\u7A0B\u5E8F\u5F15\u53D1\u7684\u4EFB\u4F55\u5BF9\u8C61\u7684\u6643\u52A8\u3002","Stop shaking the object":"\u505C\u6B62\u6643\u52A8\u5BF9\u8C61","3D object shake":"3D\u5BF9\u8C61\u6447\u6643","Shake 3D objects.":"\u6447\u66433D\u5BF9\u8C61","Shake 3D objects with translation and rotation.":"\u4EE5\u5E73\u79FB\u548C\u65CB\u8F6C\u6765\u6296\u52A83D\u5BF9\u8C61\u3002","3D shake":"3D\u6296\u52A8","Translation amplitude on X axis":"X\u8F74\u4E0A\u7684\u5E73\u79FB\u632F\u5E45","Translation amplitude on Y axis":"Y\u8F74\u4E0A\u7684\u5E73\u79FB\u632F\u5E45","Translation amplitude on Z axis":"Z\u8F74\u4E0A\u7684\u5E73\u79FB\u632F\u5E45","Rotation amplitude around X axis":"\u7ED5X\u8F74\u7684\u65CB\u8F6C\u632F\u5E45","Rotation amplitude around Y axis":"\u7ED5Y\u8F74\u7684\u65CB\u8F6C\u632F\u5E45","Rotation amplitude around Z axis":"\u7ED5Z\u8F74\u7684\u65CB\u8F6C\u632F\u5E45","Start to shake at the object creation":"\u5728\u5BF9\u8C61\u521B\u5EFA\u65F6\u5F00\u59CB\u6296\u52A8","Shake the object with a linear easing at the start and the end.":"\u4EE5\u7EBF\u6027\u7F13\u548C\u65B9\u5F0F\u5728\u8D77\u59CB\u548C\u7ED3\u675F\u65F6\u6643\u52A8\u5BF9\u8C61\u3002","Shake":"\u6447\u52A8","Shake _PARAM0_ for _PARAM2_ seconds with _PARAM3_ seconds of easing to start and _PARAM4_ seconds to stop":"\u6447\u52A8 _PARAM0_ \u6301\u7EED _PARAM2_ \u79D2\uFF0C\u521D\u59CB\u7F13\u52A8\u6301\u7EED _PARAM3_ \u79D2\uFF0C\u505C\u6B62\u9700\u8981 _PARAM4_ \u79D2","Shake the object with a linear easing at the start and keep shaking until the stop action is used.":"\u4F7F\u7528\u7EBF\u6027\u7F13\u52A8\u5F00\u59CB\u6447\u52A8\u5BF9\u8C61\uFF0C\u5E76\u6301\u7EED\u6447\u52A8\u76F4\u5230\u505C\u6B62\u52A8\u4F5C\u88AB\u4F7F\u7528\u3002","Start shaking":"\u5F00\u59CB\u6447\u52A8","Start shaking _PARAM0_ with _PARAM2_ seconds of easing":"\u5F00\u59CB\u6447\u52A8 _PARAM0_ \u6301\u7EED _PARAM2_ \u79D2\u7684\u7F13\u52A8","Stop shaking the object with a linear easing.":"\u4F7F\u7528\u7EBF\u6027\u7F13\u52A8\u505C\u6B62\u6447\u52A8\u5BF9\u8C61\u3002","Stop shaking":"\u505C\u6B62\u6447\u52A8","Stop shaking _PARAM0_ with _PARAM2_ seconds of easing":"\u505C\u6B62\u6447\u52A8 _PARAM0_ \u6301\u7EED _PARAM2_ \u79D2\u7684\u7F13\u52A8","Check if the object is shaking.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5728\u6447\u52A8\u3002","Is shaking":"\u5728\u6447\u52A8","Check if the object is stopping to shake.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5728\u505C\u6B62\u6447\u52A8\u3002","Is stopping to shake":"\u5728\u505C\u6B62\u6447\u52A8","_PARAM0_ is stopping to shake":"_PARAM0_ \u5728\u505C\u6B62\u6447\u52A8","the shaking frequency of the object.":"\u5BF9\u8C61\u7684\u6447\u52A8\u9891\u7387\u3002","Shaking frequency":"\u6447\u52A8\u9891\u7387","the shaking frequency":"\u6447\u52A8\u9891\u7387","Return the easing factor according to start properties.":"\u6839\u636E\u8D77\u59CB\u5C5E\u6027\u8FD4\u56DE\u7F13\u52A8\u56E0\u5B50\u3002","Start easing factor":"\u8D77\u59CB\u7F13\u52A8\u56E0\u5B50","Return the easing factor according to stop properties.":"\u6839\u636E\u505C\u6B62\u5C5E\u6027\u8FD4\u56DE\u7F13\u52A8\u56E0\u5B50\u3002","Stop easing factor":"\u505C\u6B62\u7F13\u52A8\u56E0\u5B50","stop easing factor":"\u505C\u6B62\u7F13\u52A8\u56E0\u5B50","Share dialog and sharing options":"\u5171\u4EAB\u5BF9\u8BDD\u6846\u548C\u5171\u4EAB\u9009\u9879","Allows to share content via the system share dialog. Works only on mobile (browser or mobile app).":"\u5141\u8BB8\u901A\u8FC7\u7CFB\u7EDF\u5171\u4EAB\u5BF9\u8BDD\u6846\u5171\u4EAB\u5185\u5BB9\u3002\u4EC5\u5728\u79FB\u52A8\u8BBE\u5907\u4E0A\uFF08\u6D4F\u89C8\u5668\u6216\u79FB\u52A8\u5E94\u7528\u7A0B\u5E8F\uFF09\u6709\u6548\u3002","Share a link or text via another app using the system share dialog.":"\u4F7F\u7528\u7CFB\u7EDF\u5171\u4EAB\u5BF9\u8BDD\u6846\u901A\u8FC7\u5176\u4ED6\u5E94\u7528\u7A0B\u5E8F\u5171\u4EAB\u94FE\u63A5\u6216\u6587\u672C\u3002","Share text: _PARAM1_ and url: _PARAM2_ with title _PARAM3_":"\u7528\u6807\u9898_PARAM3_\u5171\u4EAB_PARAM1_\u548Curl:_PARAM2_\u7684\u6587\u672C","Text to share":"\u8981\u5171\u4EAB\u7684\u6587\u672C","Url to share":"\u8981\u5171\u4EAB\u7684\u7F51\u5740","Title to show in the Share dialog":"\u5728\u5171\u4EAB\u5BF9\u8BDD\u6846\u4E2D\u663E\u793A\u7684\u6807\u9898","Check if the browser/operating system of the device supports sharing. Sharing is typically not supported on desktop browsers or desktop apps.":"\u68C0\u67E5\u8BBE\u5907\u7684\u6D4F\u89C8\u5668/\u64CD\u4F5C\u7CFB\u7EDF\u662F\u5426\u652F\u6301\u5171\u4EAB\u3002\u901A\u5E38\u5728\u684C\u9762\u6D4F\u89C8\u5668\u6216\u684C\u9762\u5E94\u7528\u4E0A\u4E0D\u652F\u6301\u5171\u4EAB\u3002","Sharing is supported":"\u652F\u6301\u5171\u4EAB","The browser or system supports sharing":"\u6D4F\u89C8\u5668\u6216\u7CFB\u7EDF\u652F\u6301\u5171\u4EAB","the result of the last share dialog.":"\u4E0A\u6B21\u5171\u4EAB\u5BF9\u8BDD\u6846\u7684\u7ED3\u679C\u3002","Result of the last share dialog":"\u4E0A\u6B21\u5171\u4EAB\u5BF9\u8BDD\u6846\u7684\u7ED3\u679C","the result of the last share dialog":"\u4E0A\u6B21\u5171\u4EAB\u5BF9\u8BDD\u6846\u7684\u7ED3\u679C","Shock wave effect":"Shock wave effect","Draw shock wave.":"\u7ED8\u5236\u51B2\u51FB\u6CE2\u3002","Draw ellipse shock waves.":"\u7ED8\u5236\u692D\u5706\u5F62\u51B2\u51FB\u6CE2\u3002","Ellipse shock wave":"\u692D\u5706\u5F62\u51B2\u51FB\u6CE2","Start width":"\u8D77\u59CB\u5BBD\u5EA6","Start height":"\u8D77\u59CB\u9AD8\u5EA6","Start outline thickness":"\u8D77\u59CB\u8F6E\u5ED3\u539A\u5EA6","Outline":"\u8F6E\u5ED3","Start angle":"\u8D77\u59CB\u89D2\u5EA6","End width":"\u7ED3\u675F\u5BBD\u5EA6","End height":"\u7ED3\u675F\u9AD8\u5EA6","End outline thickness":"\u7ED3\u675F\u8F6E\u5ED3\u539A\u5EA6","End angle":"\u7ED3\u675F\u89D2\u5EA6","Timing":"\u5B9A\u65F6","Fill the shape":"\u586B\u5145\u5F62\u72B6","the start width of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u5BBD\u5EA6\u3002","the start width":"\u5BF9\u8C61\u7684\u8D77\u59CB\u5BBD\u5EA6","the start height of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u9AD8\u5EA6\u3002","the start height":"\u5BF9\u8C61\u7684\u8D77\u59CB\u9AD8\u5EA6","the start outline of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u8F6E\u5ED3\u3002","the start outline":"\u5BF9\u8C61\u7684\u8D77\u59CB\u8F6E\u5ED3","the start angle of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u89D2\u5EA6\u3002","the start angle":"\u5BF9\u8C61\u7684\u8D77\u59CB\u89D2\u5EA6","the end width of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u5BBD\u5EA6\u3002","the end width":"\u5BF9\u8C61\u7684\u7ED3\u675F\u5BBD\u5EA6","the end height of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u9AD8\u5EA6\u3002","the end height":"\u5BF9\u8C61\u7684\u7ED3\u675F\u9AD8\u5EA6","the end outline thickness of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u8F6E\u5ED3\u539A\u5EA6\u3002","the end outline thickness":"\u5BF9\u8C61\u7684\u7ED3\u675F\u8F6E\u5ED3\u539A\u5EA6","the end Color of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u989C\u8272\u3002","End Color":"\u7ED3\u675F\u989C\u8272","the end Color":"\u5BF9\u8C61\u7684\u7ED3\u675F\u989C\u8272","the end Opacity of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u4E0D\u900F\u660E\u5EA6\u3002","End Opacity":"\u7ED3\u675F\u4E0D\u900F\u660E\u5EA6","the end Opacity":"\u5BF9\u8C61\u7684\u7ED3\u675F\u4E0D\u900F\u660E\u5EA6","the end angle of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u89D2\u5EA6\u3002","the end angle":"\u5BF9\u8C61\u7684\u7ED3\u675F\u89D2\u5EA6","the duration of the animation.":"\u52A8\u753B\u7684\u6301\u7EED\u65F6\u95F4\u3002","the duration":"\u52A8\u753B\u7684\u6301\u7EED\u65F6\u95F4","the easing of the animation.":"\u52A8\u753B\u7684\u7F13\u52A8\u3002","the easing":"\u7F13\u52A8","Check if the shape is filled.":"\u68C0\u67E5\u5F62\u72B6\u662F\u5426\u586B\u5145\u3002","Shape filled":"\u5F62\u72B6\u5DF2\u586B\u5145","The shape of _PARAM0_ is filled":"\u5F62\u72B6_PARAM0_\u5DF2\u586B\u5145","Enable or disable the filling of the shape.":"\u542F\u7528\u6216\u7981\u7528\u5BF9\u5F62\u72B6\u7684\u586B\u5145\u3002","Enable filling":"\u542F\u7528\u586B\u5145","Enable filling of _PARAM0_ : _PARAM2_":"\u542F\u7528\u586B\u5145_PARAM0_\uFF1A_PARAM2_","IsFilled":"\u5DF2\u586B\u5145","Draw star shock waves.":"\u7ED8\u5236\u661F\u5F62\u51B2\u51FB\u6CE2\u3002","Star shock waves":"\u661F\u5F62\u51B2\u51FB\u6CE2","Start radius":"\u8D77\u59CB\u534A\u5F84","Start Inner radius":"\u8D77\u59CB\u5185\u534A\u5F84","Shape":"\u5F62\u72B6","End radius":"\u7ED3\u675F\u534A\u5F84","End inner radius":"\u7ED3\u675F\u5185\u534A\u5F84","Number of points":"\u70B9\u7684\u6570\u91CF","the start radius of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u534A\u5F84\u3002","the start radius":"\u5BF9\u8C61\u7684\u8D77\u59CB\u534A\u5F84","the start inner radius of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u5185\u534A\u5F84\u3002","Start inner radius":"\u5185\u534A\u5F84","the start inner radius":"\u5BF9\u8C61\u7684\u8D77\u59CB\u5185\u534A\u5F84","the start outline thickness of the object.":"\u5BF9\u8C61\u7684\u8D77\u59CB\u8F6E\u5ED3\u539A\u5EA6\u3002","the start outline thickness":"\u5BF9\u8C61\u7684\u8D77\u59CB\u8F6E\u5ED3\u539A\u5EA6","the end radius of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u534A\u5F84\u3002","the end radius":"\u7ED3\u675F\u534A\u5F84","the end inner radius of the object.":"\u5BF9\u8C61\u7684\u7ED3\u675F\u5185\u534A\u5F84\u3002","the end inner radius":"\u7ED3\u675F\u5185\u534A\u5F84","IsFilling":"\u6B63\u5728\u88C5\u586B","the number of points of the star.":"\u661F\u661F\u7684\u70B9\u6570\u3002","the number of points":"\u70B9\u6570","Smooth Camera":"Smooth Camera","Smoothly scroll to follow an object.":"Smoothly scroll to follow an object.","Leftward catch-up speed (in ratio per second)":"\u5DE6\u4FA7\u8D76\u8D85\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09","Catch-up speed":"\u8D76\u8D85\u901F\u5EA6","Rightward catch-up speed (in ratio per second)":"\u53F3\u4FA7\u8D76\u8D85\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09","Upward catch-up speed (in ratio per second)":"\u5411\u4E0A\u8D76\u8D85\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09","Downward catch-up speed (in ratio per second)":"\u5411\u4E0B\u8D76\u8D85\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09","Follow on X axis":"\u5728X\u8F74\u4E0A\u8DDF\u968F","Follow on Y axis":"\u5728Y\u8F74\u4E0A\u8DDF\u968F","Follow free area left border":"\u5728\u7A7A\u4E2D\u4E0A\u65B9\u7684\u81EA\u7531\u533A\u57DF","Follow free area right border":"\u5728\u7A7A\u4E2D\u4E0B\u65B9\u7684\u81EA\u7531\u533A\u57DF","Follow free area top border":"\u8DDF\u8E2A\u7A7A\u95F2\u533A\u57DF\u9876\u90E8\u8FB9\u754C","Follow free area bottom border":"\u8DDF\u8E2A\u7A7A\u95F2\u533A\u57DF\u5E95\u90E8\u8FB9\u754C","Camera offset X":"\u6444\u50CF\u673A\u504F\u79FBX","Camera offset Y":"\u6444\u50CF\u673A\u504F\u79FBY","Camera delay":"\u6444\u50CF\u673A\u5EF6\u8FDF","Forecast time":"\u9884\u6D4B\u65F6\u95F4","Forecast history duration":"\u9884\u6D4B\u5386\u53F2\u6301\u7EED\u65F6\u95F4","Index (local variable)":"\u7D22\u5F15\uFF08\u672C\u5730\u53D8\u91CF\uFF09","Leftward maximum speed":"\u5411\u5DE6\u7684\u6700\u5927\u901F\u5EA6","Rightward maximum speed":"\u5411\u53F3\u7684\u6700\u5927\u901F\u5EA6","Upward maximum speed":"\u5411\u4E0A\u7684\u6700\u5927\u901F\u5EA6","Downward maximum speed":"\u5411\u4E0B\u7684\u6700\u5927\u901F\u5EA6","OldX (local variable)":"OldX\uFF08\u672C\u5730\u53D8\u91CF\uFF09","OldY (local variable)":"OldY\uFF08\u672C\u5730\u53D8\u91CF\uFF09","Move the camera closer to the object. This action must be called after the object has moved for the frame.":"\u5C06\u6444\u50CF\u673A\u79FB\u8FD1\u5BF9\u8C61\u3002\u6B64\u64CD\u4F5C\u5FC5\u987B\u5728\u5BF9\u8C61\u79FB\u52A8\u4E00\u5E27\u540E\u8C03\u7528\u3002","Move the camera closer":"\u5C06\u6444\u50CF\u673A\u79FB\u8FD1","Move the camera closer to _PARAM0_":"\u5C06\u6444\u50CF\u673A\u9760\u8FD1_PARAM0_","Move the camera closer to the object.":"\u5C06\u6444\u50CF\u673A\u79FB\u8FD1\u5BF9\u8C61\u3002","Do move the camera closer":"\u79FB\u52A8\u6444\u50CF\u673A\u66F4\u8FD1","Do move the camera closer _PARAM0_":"\u5728\u79FB\u52A8\u6444\u50CF\u673A\u65F6\u66F4\u8FD1_PARAM0_","Delay the camera according to a maximum speed and catch up the delay.":"\u6839\u636E\u6700\u5927\u901F\u5EA6\u5EF6\u8FDF\u76F8\u673A\u5E76\u8D76\u4E0A\u5EF6\u8FDF\u3002","Wait and catch up":"\u7B49\u5F85\u5E76\u8D76\u4E0A","Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds":"\u5EF6\u8FDF\u76F8\u673A _PARAM0_\uFF1A_PARAM2_ \u79D2\uFF0C\u6839\u636E\u6700\u5927\u901F\u5EA6_PARAM3_\uFF1B_PARAM4_\u79D2\uFF0C\u5728_PARAM5_\u79D2\u5185\u8FFD\u4E0A","Waiting duration (in seconds)":"\u7B49\u5F85\u65F6\u95F4\uFF08\u79D2\uFF09","Waiting maximum camera target speed X":"\u7B49\u5F85\u6700\u5927\u76F8\u673A\u76EE\u6807\u901F\u5EA6 X","Waiting maximum camera target speed Y":"\u7B49\u5F85\u6700\u5927\u76F8\u673A\u76EE\u6807\u901F\u5EA6 Y","Catch up duration (in seconds)":"\u8D76\u4E0A\u65F6\u95F4\uFF08\u79D2\uFF09","Draw the targeted and actual camera position.":"\u7ED8\u5236\u76EE\u6807\u548C\u5B9E\u9645\u6444\u50CF\u673A\u4F4D\u7F6E\u3002","Draw debug":"\u7ED8\u5236\u8C03\u8BD5","Draw targeted and actual camera position for _PARAM0_ on _PARAM2_":"\u5728_PARAM2_\u4E0A\u7ED8\u5236_PARAM0_\u7684\u76EE\u6807\u548C\u5B9E\u9645\u6444\u50CF\u673A\u4F4D\u7F6E","Enable or disable the following on X axis.":"\u5728 X \u8F74\u4E0A\u542F\u7528\u6216\u7981\u7528\u4EE5\u4E0B\u5185\u5BB9\u3002","Follow on X":"\u5728 X \u8F74\u4E0A\u8DDF\u968F","The camera follows _PARAM0_ on X axis: _PARAM2_":"\u5728 X \u8F74\u4E0A\u8DDF\u968F_PARAM0_\u7684\u76F8\u673A\uFF1A_PARAM2_","Enable or disable the following on Y axis.":"\u5728 Y \u8F74\u4E0A\u542F\u7528\u6216\u7981\u7528\u4EE5\u4E0B\u5185\u5BB9\u3002","Follow on Y":"\u5728 Y \u8F74\u4E0A\u8DDF\u968F","The camera follows _PARAM0_ on Y axis: _PARAM2_":"\u5728 Y \u8F74\u4E0A\u8DDF\u968F_PARAM0_\u7684\u76F8\u673A\uFF1A_PARAM2_","Change the camera follow free area right border.":"\u66F4\u6539\u76F8\u673A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u7684\u53F3\u8FB9\u754C\u3002","Change the camera follow free area right border of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u53F3\u8FB9\u754C:_PARAM0_\uFF1A_PARAM2_","Change the camera follow free area left border.":"\u66F4\u6539\u76F8\u673A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u5DE6\u8FB9\u754C\u3002","Change the camera follow free area left border of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u5DE6\u8FB9\u754C\uFF1A_PARAM0_\uFF1A_PARAM2_","Change the camera follow free area top border.":"\u66F4\u6539\u76F8\u673A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u9876\u8FB9\u754C\u3002","Change the camera follow free area top border of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u9876\u8FB9\u754C\uFF1A_PARAM0_\uFF1A_PARAM2_","Change the camera follow free area bottom border.":"\u66F4\u6539\u76F8\u673A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u5E95\u8FB9\u754C\u3002","Change the camera follow free area bottom border of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u5E95\u8FB9\u754C\uFF1A_PARAM0_\uFF1A_PARAM2_","Change the camera leftward maximum speed (in pixels per second).":"\u66F4\u6539\u76F8\u673A\u5DE6\u5411\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09\u3002","Change the camera leftward maximum speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u5DE6\u5411\u6700\u5927\u901F\u5EA6\uFF1A_PARAM0_\uFF1A_PARAM2_","Leftward maximum speed (in pixels per second)":"\u5411\u5DE6\u6700\u5927\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u50CF\u7D20\u8BA1\uFF09","Change the camera rightward maximum speed (in pixels per second).":"\u66F4\u6539\u76F8\u673A\u53F3\u5411\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09\u3002","Change the camera rightward maximum speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u53F3\u5411\u6700\u5927\u901F\u5EA6\uFF1A_PARAM0_\uFF1A_PARAM2_","Rightward maximum speed (in pixels per second)":"\u5411\u53F3\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09","Change the camera upward maximum speed (in pixels per second).":"\u66F4\u6539\u76F8\u673A\u5411\u4E0A\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09\u3002","Change the camera upward maximum speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u5411\u4E0A\u6700\u5927\u901F\u5EA6\uFF1A_PARAM0_\uFF1A_PARAM2_","Upward maximum speed (in pixels per second)":"\u5411\u4E0A\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09","Change the camera downward maximum speed (in pixels per second).":"\u66F4\u6539\u76F8\u673A\u5411\u4E0B\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09\u3002","Change the camera downward maximum speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u5411\u4E0B\u6700\u5927\u901F\u5EA6\uFF1A_PARAM0_\uFF1A_PARAM2_","Downward maximum speed (in pixels per second)":"\u5411\u4E0B\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6570\uFF09","Change the camera leftward catch-up speed (in ratio per second).":"\u66F4\u6539\u76F8\u673A\u5411\u5DE6\u6355\u6349\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09\u3002","Leftward catch-up speed":"\u5411\u5DE6\u6355\u6349\u901F\u5EA6","Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u5411\u5DE6\u6355\u6349\u901F\u5EA6\uFF1A_PARAM0_\uFF1A_PARAM2_","Change the camera rightward catch-up speed (in ratio per second).":"\u66F4\u6539\u76F8\u673A\u5411\u53F3\u6355\u6349\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09\u3002","Rightward catch-up speed":"\u5411\u53F3\u6355\u6349\u901F\u5EA6","Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u5411\u53F3\u6355\u6349\u901F\u5EA6\uFF1A_PARAM0_\uFF1A_PARAM2_","Change the camera downward catch-up speed (in ratio per second).":"\u66F4\u6539\u76F8\u673A\u5411\u4E0B\u6355\u6349\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09\u3002","Downward catch-up speed":"\u5411\u4E0B\u6355\u6349\u901F\u5EA6","Change the camera downward catch-up speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u5411\u4E0B\u6355\u6349\u901F\u5EA6\uFF1A_PARAM0_\uFF1A_PARAM2_","Change the camera upward catch-up speed (in ratio per second).":"\u66F4\u6539\u76F8\u673A\u5411\u4E0A\u6355\u6349\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09\u3002","Upward catch-up speed":"\u5411\u4E0A\u6355\u6349\u901F\u5EA6","Change the camera upward catch-up speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u673A\u5411\u4E0A\u6355\u6349\u901F\u5EA6\uFF1A_PARAM0_\uFF1A_PARAM2_","the camera offset on X axis of the object. This is not the current difference between the object and the camera position.":"\u7269\u4F53\u5728X\u8F74\u4E0A\u7684\u6444\u50CF\u673A\u504F\u79FB\u3002\u8FD9\u4E0D\u662F\u7269\u4F53\u4E0E\u6444\u50CF\u673A\u4F4D\u7F6E\u4E4B\u95F4\u7684\u5F53\u524D\u5DEE\u5F02\u3002","the camera offset on X axis":"\u7269\u4F53\u5728X\u8F74\u4E0A\u7684\u6444\u50CF\u673A\u504F\u79FB","Change the camera offset on X axis of an object.":"\u6539\u53D8\u7269\u4F53\u5728X\u8F74\u4E0A\u7684\u6444\u50CF\u673A\u504F\u79FB\u3002","Camera Offset X":"\u6444\u50CF\u673A\u504F\u79FBX","Change the camera offset on X axis of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684X\u8F74\u4E0A\u7684\u6444\u50CF\u673A\u504F\u79FB\uFF1A_PARAM2_","the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.":"\u7269\u4F53\u5728Y\u8F74\u4E0A\u7684\u6444\u50CF\u673A\u504F\u79FB\u3002\u8FD9\u4E0D\u662F\u7269\u4F53\u4E0E\u6444\u50CF\u673A\u4F4D\u7F6E\u4E4B\u95F4\u7684\u5F53\u524D\u5DEE\u5F02\u3002","the camera offset on Y axis":"\u7269\u4F53\u5728Y\u8F74\u4E0A\u7684\u6444\u50CF\u673A\u504F\u79FB","Change the camera offset on Y axis of an object.":"\u6539\u53D8\u7269\u4F53\u5728Y\u8F74\u4E0A\u7684\u6444\u50CF\u673A\u504F\u79FB\u3002","Camera Offset Y":"\u6444\u50CF\u673A\u504F\u79FBY","Change the camera offset on Y axis of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684Y\u8F74\u4E0A\u7684\u6444\u50CF\u673A\u504F\u79FB\uFF1A_PARAM2_","Change the camera forecast time (in seconds).":"\u66F4\u6539\u6444\u50CF\u673A\u9884\u6D4B\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Change the camera forecast time of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u6444\u50CF\u673A\u9884\u6D4B\u65F6\u95F4\uFF1A_PARAM2_","Change the camera delay (in seconds).":"\u66F4\u6539\u6444\u50CF\u673A\u5EF6\u8FDF\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09\u3002","Change the camera delay of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u6444\u50CF\u673A\u5EF6\u8FDF\uFF1A_PARAM2_","Return follow free area left border X.":"\u8FD4\u56DE\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u7684\u5DE6\u8FB9\u754CX\u3002","Free area left":"\u81EA\u7531\u533A\u57DF\u5DE6","Return follow free area right border X.":"\u8FD4\u56DE\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u7684\u53F3\u8FB9\u754CX\u3002","Free area right":"\u81EA\u7531\u533A\u57DF\u53F3","Return follow free area bottom border Y.":"\u8FD4\u56DE\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u7684\u5E95\u90E8\u8FB9\u754CY\u3002","Free area bottom":"\u81EA\u7531\u533A\u57DF\u5E95\u90E8","Return follow free area top border Y.":"\u8FD4\u56DE\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u7684\u9876\u90E8\u8FB9\u754CY\u3002","Free area top":"\u81EA\u7531\u533A\u57DF\u9876\u90E8","Update delayed position and delayed history. This is called in doStepPreEvents.":"\u66F4\u65B0\u5EF6\u8FDF\u4F4D\u7F6E\u548C\u5EF6\u8FDF\u5386\u53F2\u3002\u8FD9\u5728doStepPreEvents\u4E2D\u88AB\u8C03\u7528\u3002","Update delayed position":"\u66F4\u65B0\u5EF6\u8FDF\u4F4D\u7F6E","Update delayed position and delayed history of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u5EF6\u8FDF\u4F4D\u7F6E\u548C\u5EF6\u8FDF\u5386\u53F2","Check if the camera following target is delayed from the object.":"\u68C0\u67E5\u6444\u50CF\u673A\u662F\u5426\u5EF6\u8FDF\u4E8E\u7269\u4F53\u3002","Camera is delayed":"\u6444\u50CF\u673A\u88AB\u5EF6\u8FDF","The camera of _PARAM0_ is delayed":"_PARAM0_\u7684\u6444\u50CF\u673A\u88AB\u5EF6\u8FDF","Return the current camera delay.":"\u8FD4\u56DE\u5F53\u524D\u6444\u50CF\u673A\u5EF6\u8FDF\u3002","Current delay":"\u5F53\u524D\u5EF6\u8FDF","Check if the camera following is waiting at a reduced speed.":"\u68C0\u67E5\u6444\u50CF\u673A\u662F\u5426\u6309\u964D\u4F4E\u7684\u901F\u5EA6\u7B49\u5F85\u3002","Camera is waiting":"\u6444\u50CF\u673A\u5728\u7B49\u5F85","The camera of _PARAM0_ is waiting":"_PARAM0_\u7684\u6444\u50CF\u673A\u5728\u7B49\u5F85","Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.":"\u5411\u5EF6\u8FDF\u4F4D\u7F6E\u5386\u53F2\u6DFB\u52A0\u4F4D\u7F6E\u4EE5\u8FDB\u884C\u9884\u6D4B\u3002\u8FD9\u5728UpadteDelayedPosition\u4E2D\u88AB\u8C03\u75282\u6B21\u3002","Add forecast history position":"\u6DFB\u52A0\u9884\u6D4B\u5386\u53F2\u4F4D\u7F6E","Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_":"\u5C06\u65F6\u95F4_PARAM2_\u548C\u4F4D\u7F6E_PARAM3_; _PARAM4_\u6DFB\u52A0\u5230_PARAM0_\u7684\u9884\u6D4B\u5386\u53F2\u8BB0\u5F55","Object X":"\u5BF9\u8C61X","Object Y":"\u5BF9\u8C61Y","Update forecasted position. This is called in doStepPreEvents.":"\u66F4\u65B0\u9884\u6D4B\u4F4D\u7F6E\u3002\u8FD9\u5728doStepPreEvents\u4E2D\u8C03\u7528\u3002","Update forecasted position":"\u66F4\u65B0\u9884\u6D4B\u4F4D\u7F6E","Update forecasted position of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u9884\u6D4B\u4F4D\u7F6E","Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.":"\u5C06\u9879\u76EE\u5386\u53F2\u7ED3\u675F\u4F4D\u7F6E\u6295\u5F71\u5230\u7EBF\u6027\u56DE\u5F52\u7EBF\u4E0A\u3002\u6B64\u51FD\u6570\u4EC5\u7531UpdateForecastedPosition\u8C03\u7528\u3002","Project history ends":"\u9879\u76EE\u5386\u53F2\u7ED3\u675F","Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_":"\u9879\u76EE\u5386\u53F2\u6700\u8001:_PARAM2_;_PARAM3_\u548C\u6700\u65B0\u4F4D\u7F6E:_PARAM4_;_PARAM5_ of _PARAM0_","OldestX":"\u6700\u8001\u7684X","OldestY":"\u6700\u8001\u7684Y","Newest X":"\u6700\u65B0X","Newest Y":"\u6700\u65B0Y","Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.":"\u8FD4\u56DE\u9884\u6D4B\u65F6\u95F4\u4E0E\u5386\u53F2\u6301\u7EED\u65F6\u95F4\u4E4B\u95F4\u7684\u6BD4\u7387\u3002\u6B64\u51FD\u6570\u4EC5\u7531UpdateForecastedPosition\u8C03\u7528\u3002","Forecast time ratio":"\u9884\u6D4B\u65F6\u95F4\u6BD4\u7387","Smoothly scroll to follow a character and stabilize the camera when jumping.":"\u5E73\u7A33\u5730\u6EDA\u52A8\u4EE5\u8DDF\u968F\u89D2\u8272\uFF0C\u5E76\u5728\u8DF3\u8DC3\u65F6\u7A33\u5B9A\u76F8\u673A\u3002","Smooth platformer camera":"\u5E73\u6ED1\u5E73\u53F0\u6E38\u620F\u76F8\u673A","Smooth camera behavior":"\u5E73\u6ED1\u76F8\u673A\u884C\u4E3A","Follow free area top in the air":"\u7A7A\u4E2D\u7684\u8DDF\u8E2A\u81EA\u7531\u533A\u57DF\u9876\u90E8","Follow free area bottom in the air":"\u7A7A\u4E2D\u7684\u8DDF\u8E2A\u81EA\u7531\u533A\u57DF\u5E95\u90E8","Follow free area top on the floor":"\u5730\u9762\u4E0A\u7684\u8DDF\u8E2A\u81EA\u7531\u533A\u57DF\u9876\u90E8","Follow free area bottom on the floor":"\u5730\u9762\u4E0A\u7684\u8DDF\u8E2A\u81EA\u7531\u533A\u57DF\u5E95\u90E8","Upward speed in the air (in ratio per second)":"\u7A7A\u4E2D\u7684\u5411\u4E0A\u901F\u5EA6\uFF08\u6BCF\u79D2\u4E2D\u7684\u6BD4\u7387\uFF09","Downward speed in the air (in ratio per second)":"\u7A7A\u4E2D\u7684\u5411\u4E0B\u901F\u5EA6\uFF08\u6BCF\u79D2\u4E2D\u7684\u6BD4\u7387\uFF09","Upward speed on the floor (in ratio per second)":"\u5730\u9762\u4E0A\u7684\u5411\u4E0A\u901F\u5EA6\uFF08\u6BCF\u79D2\u4E2D\u7684\u6BD4\u7387\uFF09","Downward speed on the floor (in ratio per second)":"\u5730\u9762\u4E0A\u7684\u5411\u4E0B\u901F\u5EA6\uFF08\u6BCF\u79D2\u4E2D\u7684\u6BD4\u7387\uFF09","Upward maximum speed in the air":"\u7A7A\u4E2D\u7684\u5411\u4E0A\u6700\u5927\u901F\u5EA6","Downward maximum speed in the air":"\u7A7A\u4E2D\u7684\u5411\u4E0B\u6700\u5927\u901F\u5EA6","Upward maximum speed on the floor":"\u5730\u9762\u4E0A\u7684\u5411\u4E0A\u6700\u5927\u901F\u5EA6","Downward maximum speed on the floor":"\u5730\u9762\u4E0A\u7684\u5411\u4E0B\u6700\u5927\u901F\u5EA6","Rectangular 2D grid":"\u77E9\u5F62\u4E8C\u7EF4\u7F51\u683C","Snap objects on a virtual grid.":"Snap objects on a virtual grid.","Snap object to a virtual grid (i.e: this is not the grid used in the editor).":"\u5C06\u5BF9\u8C61\u6355\u6349\u5230\u865A\u62DF\u7F51\u683C\uFF08\u5373\uFF1A\u8FD9\u4E0D\u662F\u7F16\u8F91\u5668\u4E2D\u4F7F\u7528\u7684\u7F51\u683C\uFF09\u3002","Snap objects to a virtual grid":"\u5C06\u5BF9\u8C61\u6355\u6349\u5230\u865A\u62DF\u7F51\u683C","Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"\u5229\u7528\u5BBD\u5EA6\u4E3A_PARAM2_\u50CF\u7D20\uFF0C\u9AD8\u5EA6_PARAM3_\u50CF\u7D20\u7684\u5355\u5143\u683C\u548C\u504F\u79FB\u4F4D\u7F6E\uFF08_PARAM4_; _PARAM5_\uFF09\u5C06_PARAM1_\u5BF9\u8C61\u6355\u6349\u5230\u865A\u62DF\u7F51\u683C\u3002","Speed restrictions":"Speed restrictions","Limit the maximum movement and rotation speed of an object from forces or the 2D Physics behavior.":"\u9650\u5236\u7269\u4F53\u56E0\u529B\u91CF\u6216\u4E8C\u7EF4\u7269\u7406\u884C\u4E3A\u9020\u6210\u7684\u6700\u5927\u79FB\u52A8\u548C\u65CB\u8F6C\u901F\u5EA6\u3002","Limit the maximum speed an object will move from (non-physics) forces.":"\u9650\u5236\u5BF9\u8C61\u7531\uFF08\u975E\u7269\u7406\uFF09\u529B\u79FB\u52A8\u7684\u6700\u5927\u901F\u5EA6\u3002","Enforce max movement speed":"\u5B9E\u65BD\u6700\u5927\u79FB\u52A8\u901F\u5EA6","Maximum speed (pixels/second)":"\u6700\u5927\u901F\u5EA6\uFF08\u50CF\u7D20/\u79D2\uFF09","Limit the maximum speed an object will move from physics forces.":"\u9650\u5236\u7269\u4F53\u53D7\u5230\u7269\u7406\u529B\u5F71\u54CD\u7684\u6700\u5927\u79FB\u52A8\u901F\u5EA6\u3002","Enforce max movement speed (physics)":"\u5B9E\u65BD\u6700\u5927\u79FB\u52A8\u901F\u5EA6\uFF08\u7269\u7406\uFF09","Limit the maximum rotation speed of an object from physics forces.":"\u9650\u5236\u7269\u4F53\u53D7\u5230\u7269\u7406\u529B\u5F71\u54CD\u7684\u6700\u5927\u65CB\u8F6C\u901F\u5EA6\u3002","Enforce max rotation speed (physics)":"\u5B9E\u65BD\u6700\u5927\u65CB\u8F6C\u901F\u5EA6\uFF08\u7269\u7406\uFF09","Maximum rotation speed (degrees/second)":"\u6700\u5927\u65CB\u8F6C\u901F\u5EA6\uFF08\u5EA6/\u79D2\uFF09","Object Masking":"Object Masking","Use a sprite or a shape painter to mask another object.":"Use a sprite or a shape painter to mask another object.","Define a sprite as a mask of an object.":"\u5C06\u7CBE\u7075\u5B9A\u4E49\u4E3A\u7269\u4F53\u7684\u8499\u7248\u3002","Mask an object with a sprite":"\u4F7F\u7528\u7CBE\u7075\u5BF9\u7269\u4F53\u8FDB\u884C\u906E\u7F69","Sprite object to use as a mask":"\u7528\u4F5C\u8499\u7248\u7684\u7CBE\u7075\u7269\u4F53","Remove the mask of the specified object.":"\u79FB\u9664\u6307\u5B9A\u7269\u4F53\u7684\u8499\u7248\u3002","Remove the mask":"\u79FB\u9664\u8499\u7248","Remove the mask of _PARAM1_":"\u79FB\u9664_PARAM1_\u7684\u8499\u7248","Object with a mask to remove":"\u5E26\u6709\u8981\u79FB\u9664\u8499\u7248\u7684\u7269\u4F53","Multitouch joystick and buttons (sprite)":"Multitouch joystick and buttons (sprite)","Joysticks or buttons for touchscreens.":"Joysticks or buttons for touchscreens.","Check if a button was just pressed on a multitouch controller.":"\u68C0\u67E5\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u4E0A\u662F\u5426\u521A\u521A\u6309\u4E0B\u4E00\u4E2A\u6309\u94AE\u3002","Multitouch controller button just pressed":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6309\u94AE\u521A\u521A\u6309\u4E0B","Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668 _PARAM1_ \u7684\u6309\u94AE _PARAM2_ \u521A\u521A\u6309\u4E0B","Multitouch controller identifier (1, 2, 3, 4...)":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6807\u8BC6\u7B26\uFF081\u30012\u30013\u30014...\uFF09","Button name":"\u6309\u94AE\u540D\u79F0","Check if a button is pressed on a multitouch controller.":"\u68C0\u67E5\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u4E0A\u662F\u5426\u6309\u4E0B\u4E00\u4E2A\u6309\u94AE\u3002","Multitouch controller button pressed":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6309\u94AE\u5DF2\u6309\u4E0B","Button _PARAM2_ of multitouch controller _PARAM1_ is pressed":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u6309\u94AE_PARAM2_\u5DF2\u6309\u4E0B","Check if a button is released on a multitouch controller.":"\u68C0\u67E5\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u4E0A\u7684\u6309\u94AE\u662F\u5426\u5DF2\u91CA\u653E\u3002","Multitouch controller button released":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6309\u94AE\u5DF2\u91CA\u653E","Button _PARAM2_ of multitouch controller _PARAM1_ is released":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u6309\u94AE_PARAM2_\u5DF2\u91CA\u653E","Change a button state for a multitouch controller.":"\u66F4\u6539\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u7684\u6309\u94AE\u72B6\u6001\u3002","Button state":"\u6309\u94AE\u72B6\u6001","Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_":"\u5C06\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u6309\u94AE_PARAM2_\u6807\u8BB0\u4E3A_PARAM3_","Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"\u66F4\u6539\u6447\u6746\u7684\u6B7B\u533A\u534A\u5F84\u3002\u6B7B\u533A\u662F\u4E00\u4E2A\u533A\u57DF\uFF0C\u5728\u8BE5\u533A\u57DF\u5185\u6447\u6746\u7684\u79FB\u52A8\u4E0D\u4F1A\u88AB\u8BA1\u5165\uFF08\u76F8\u53CD\uFF0C\u6447\u6746\u5C06\u88AB\u89C6\u4E3A\u672A\u79FB\u52A8\uFF09\u3002","Dead zone radius":"\u6B7B\u533A\u534A\u5F84","Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"\u5C06\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u591A\u70B9\u89E6\u63A7\u6447\u6746_PARAM2_\u7684\u6B7B\u533A\u66F4\u6539\u4E3A_PARAM3_","Joystick name":"\u6447\u6746\u540D\u79F0","Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"\u8FD4\u56DE\u624B\u67C4\u7684\u6B7B\u533A\u534A\u5F84\u3002\u6B7B\u533A\u662F\u624B\u67C4\u4E0A\u7684\u79FB\u52A8\u4E0D\u88AB\u8BA1\u5165\u7684\u533A\u57DF\uFF08\u76F8\u53CD\uFF0C\u624B\u67C4\u5C06\u88AB\u89C6\u4E3A\u672A\u79FB\u52A8\uFF09\u3002","Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_":"\u5C06\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u591A\u70B9\u89E6\u63A7\u624B\u67C4_PARAM2_\u6B7B\u533A\u66F4\u6539\u4E3A_PARAM3_","the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).":"\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u7684\u65B9\u5411\u7D22\u5F15\uFF08\u5DE6=1\uFF0C\u4E0B=2\uFF0C\u53F3=3\uFF0C\u4E0A=4\uFF09\u3002","Angle to 4-way index":"\u89D2\u5EA6\u8F6C4\u65B9\u5411\u7D22\u5F15","The angle _PARAM1_ 4-way index":"_PARAM1_\u76844\u65B9\u5411\u7D22\u5F15\u89D2\u5EA6","the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).":"\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u7684\u65B9\u5411\u7D22\u5F15\uFF08\u5DE6=1\uFF0C\u5DE6\u4E0B=2... \u5DE6\u4E0A=7\uFF09\u3002","Angle to 8-way index":"\u89D2\u5EA6\u8F6C8\u65B9\u5411\u7D22\u5F15","The angle _PARAM1_ 8-way index":"_PARAM1_\u76848\u65B9\u5411\u7D22\u5F15\u89D2\u5EA6","Check if angle is in a given direction.":"\u68C0\u67E5\u89D2\u5EA6\u662F\u5426\u5728\u7ED9\u5B9A\u65B9\u5411\u3002","Angle 4-way direction":"\u89D2\u5EA64\u65B9\u5411\u65B9\u5411","The angle _PARAM1_ is the 4-way direction _PARAM2_":"_PARAM1_\u7684\u89D2\u5EA6\u662F4\u65B9\u5411\u7684_PARAM2_","Angle 8-way direction":"\u89D2\u5EA68\u65B9\u5411\u65B9\u5411","The angle _PARAM1_ is the 8-way direction _PARAM2_":"_PARAM1_\u7684\u89D2\u5EA6\u662F8\u65B9\u5411\u7684_PARAM2_","Check if joystick is pushed in a given direction.":"\u68C0\u67E5\u624B\u67C4\u662F\u5426\u671D\u7279\u5B9A\u65B9\u5411\u63A8\u52A8\u3002","Joystick pushed in a direction (4-way)":"\u624B\u67C4\u63A8\u5411\u4E00\u4E2A\u65B9\u5411\uFF084\u65B9\u5411\uFF09","Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u624B\u67C4_PARAM2_\u63A8\u5411\u65B9\u5411_PARAM3_","Joystick pushed in a direction (8-way)":"\u624B\u67C4\u63A8\u5411\u4E00\u4E2A\u65B9\u5411\uFF088\u65B9\u5411\uFF09","the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"\u62C7\u6307\u79BB\u5F00\u624B\u67C4\u4E2D\u5FC3\u7684\u767E\u5206\u6BD4\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09\u3002","Joystick force (deprecated)":"\u624B\u67C4\u529B\uFF08\u5F03\u7528\uFF09","Joystick _PARAM2_ of multitouch controller _PARAM1_ force":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_ _PARAM2_\u6447\u6746\u529B","the force of multitouch contoller stick (from 0 to 1).":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6447\u6746\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09\u3002","multitouch controller _PARAM1_ _PARAM2_ stick force":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_ _PARAM2_\u6447\u6746\u529B","Stick name":"\u6447\u6746\u540D\u79F0","Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"\u66F4\u6539\u62C7\u6307\u79BB\u5F00\u624B\u67C4\u4E2D\u5FC3\u7684\u767E\u5206\u6BD4\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09\u3002","Joystick force":"\u624B\u67C4\u529B","Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"\u5C06\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u6447\u6746_PARAM2_\u529B\u66F4\u6539\u4E3A_PARAM3_","Return the angle the joystick is pointing towards (Range: -180 to 180).":"\u8FD4\u56DE\u64CD\u7EB5\u6746\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u8303\u56F4\uFF1A-180\u81F3180\uFF09\u3002","Joystick angle (deprecated)":"\u64CD\u7EB5\u6746\u89D2\u5EA6\uFF08\u5DF2\u5F03\u7528\uFF09","Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).":"\u8FD4\u56DE\u89E6\u6478\u5C4F\u63A7\u5236\u5668\u6447\u6746\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u8303\u56F4\uFF1A-180\u81F3180\uFF09\u3002","Change the angle the joystick is pointing towards (Range: -180 to 180).":"\u6539\u53D8\u64CD\u7EB5\u6746\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u8303\u56F4\uFF1A-180\u81F3180\uFF09\u3002","Joystick angle":"\u64CD\u7EB5\u6746\u89D2\u5EA6","Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"\u5C06\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668 _PARAM1_ \u7684\u64CD\u7EB5\u6746 _PARAM2_ \u89D2\u5EA6\u66F4\u6539\u4E3A _PARAM3_","Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).":"\u8FD4\u56DE\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6447\u6746\u5728X\u8F74\u7684\u529B\u91CF\uFF08\u4ECE\u5DE6\u81F3-1\u5230\u53F3\u81F31\uFF09\u3002","Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).":"\u8FD4\u56DE\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6447\u6746\u5728Y\u8F74\u7684\u529B\u91CF\uFF08\u4ECE\u9876\u81F3-1\u5230\u5E95\u81F31\uFF09\u3002","Check if a new touch has started on the right or left side of the screen.":"\u68C0\u67E5\u662F\u5426\u5728\u5C4F\u5E55\u7684\u53F3\u4FA7\u6216\u5DE6\u4FA7\u5F00\u59CB\u4E86\u65B0\u7684\u89E6\u6478\u3002","New touch on a screen side":"\u5C4F\u5E55\u4FA7\u7684\u65B0\u89E6\u6478","A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer":"\u5C4F\u5E55\u7684 _PARAM1_ \u56FE\u5C42\u4E0A\u7684 _PARAM2_ \u4FA7\u5F00\u59CB\u4E86\u65B0\u7684\u89E6\u6478","Multitouch joystick":"\u591A\u70B9\u89E6\u6478\u64CD\u7EB5\u6746","Screen side":"\u5C4F\u5E55\u4FA7","Joystick that can be controlled by interacting with a touchscreen.":"\u53EF\u4EE5\u901A\u8FC7\u89E6\u6478\u5C4F\u8FDB\u884C\u64CD\u7EB5\u7684\u64CD\u7EB5\u6746\u3002","Multitouch Joystick":"\u591A\u70B9\u89E6\u63A7\u64CD\u7EB5\u6746","Dead zone radius (range: 0 to 1)":"\u6B7B\u533A\u534A\u5F84\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09","The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)":"\u6B7B\u533A\u662F\u4E00\u4E2A\u533A\u57DF\uFF0C\u6447\u6746\u79FB\u52A8\u5C06\u4E0D\u4E88\u8003\u8651\uFF08\u53D6\u800C\u4EE3\u4E4B\u7684\u662F\u5C06\u6447\u6746\u89C6\u4E3A\u672A\u79FB\u52A8\uFF09","Joystick angle (range: -180 to 180)":"\u64CD\u7EB5\u6746\u89D2\u5EA6\uFF08\u8303\u56F4\uFF1A-180\u81F3180\uFF09","Joystick force (range: 0 to 1)":"\u64CD\u7EB5\u6746\u529B\u91CF\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09","the joystick force (from 0 to 1).":"\u6447\u6746\u529B\uFF08\u4ECE0\u52301\uFF09\u3002","the joystick force":"\u6447\u6746\u529B","Change the joystick angle of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6447\u6746\u89D2\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Return the stick force on X axis (from -1 at the left to 1 at the right).":"\u8FD4\u56DEX\u8F74\u4E0A\u7684\u6447\u6746\u529B\uFF08\u4ECE\u5DE6\u4FA7\u7684-1\u5230\u53F3\u4FA7\u76841\uFF09\u3002","Return the stick force on Y axis (from -1 at the top to 1 at the bottom).":"\u8FD4\u56DEY\u8F74\u4E0A\u7684\u6447\u6746\u529B\uFF08\u4ECE\u9876\u90E8\u7684-1\u5230\u5E95\u90E8\u76841\uFF09\u3002","Joystick pushed in a direction (4-way movement)":"\u6447\u6746\u5411\u4E00\u4E2A\u65B9\u5411\u63A8\uFF084\u5411\u79FB\u52A8\uFF09","_PARAM0_ is pushed in direction _PARAM2_":"_PARAM0_\u671D_PARAM2_\u65B9\u5411\u63A8","Joystick pushed in a direction (8-way movement)":"\u6447\u6746\u5411\u4E00\u4E2A\u65B9\u5411\u63A8\uFF088\u5411\u79FB\u52A8\uFF09","Check if a joystick is pressed.":"\u68C0\u67E5\u6447\u6746\u662F\u5426\u88AB\u6309\u4E0B\u3002","Joystick pressed":"\u6447\u6746\u6309\u4E0B","Joystick _PARAM0_ is pressed":"_PARAM0_\u7684\u6447\u6746\u88AB\u6309\u4E0B","Reset the joystick values (except for angle, which stays the same)":"\u91CD\u7F6E\u6447\u6746\u503C\uFF08\u4F46\u89D2\u5EA6\u4FDD\u6301\u4E0D\u53D8\uFF09","Reset":"\u91CD\u7F6E","Reset the joystick of _PARAM0_":"\u91CD\u7F6E_PARAM0_\u7684\u6447\u6746","the multitouch controller identifier.":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6807\u8BC6\u7B26\u3002","Multitouch controller identifier":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6807\u8BC6\u7B26","the multitouch controller identifier":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6807\u8BC6\u7B26","the joystick name.":"\u6447\u6746\u540D\u79F0\u3002","the joystick name":"\u6447\u6746\u540D\u79F0","the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"\u6447\u6746\u7684\u6B7B\u533A\u534A\u5F84\uFF08\u8303\u56F4\uFF1A0\u81F31\uFF09\u3002\u6B7B\u533A\u662F\u624B\u67C4\u4E0A\u7684\u79FB\u52A8\u4E0D\u4F1A\u88AB\u8BA1\u5165\u7684\u533A\u57DF\uFF08\u76F8\u53CD\uFF0C\u624B\u67C4\u4E0D\u4F1A\u88AB\u8BA4\u4E3A\u662F\u79FB\u52A8\u7684\uFF09\u3002","the dead zone radius":"\u6B7B\u533A\u534A\u5F84","Force the joystick into the pressing state.":"\u5C06\u6447\u6746\u5F3A\u5236\u8FDB\u5165\u6309\u4E0B\u72B6\u6001\u3002","Force start pressing":"\u5F3A\u5236\u5F00\u59CB\u6309\u4E0B","Force start pressing _PARAM0_ with touch identifier: _PARAM2_":"\u4F7F\u7528\u89E6\u6478\u6807\u8BC6\u7B26_PARAM2_\u5F3A\u5236\u5F00\u59CB\u6309\u4E0B_PARAM0_\u3002","Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.":"\u68C0\u6D4B\u5BF9\u8C61\u4E0A\u5728\u89E6\u6478\u5C4F\u4E0A\u8FDB\u884C\u7684\u6309\u538B\uFF0C\u4F7F\u5176\u50CF\u6309\u94AE\u4E00\u6837\u8FD0\u4F5C\uFF0C\u5E76\u81EA\u52A8\u89E6\u53D1\u5177\u6709\u76F8\u540C\u6807\u8BC6\u7B26\u7684\u6309\u94AE\u4EE5\u5B9E\u73B0\u6620\u5C04\u884C\u4E3A\u3002","Multitouch button":"\u591A\u70B9\u89E6\u63A7\u6309\u94AE","Button identifier":"\u6309\u94AE\u6807\u8BC6\u7B26","TouchID":"\u89E6\u6478ID","Button released":"\u6309\u94AE\u5DF2\u91CA\u653E","Button just pressed":"\u6309\u94AE\u521A\u521A\u88AB\u6309\u4E0B","Triggering circle radius":"\u89E6\u53D1\u5706\u534A\u5F84","This circle adds up to the object collision mask.":"\u6B64\u5706\u589E\u52A0\u4E86\u5BF9\u8C61\u78B0\u649E\u63A9\u7801\u3002","Check if the button was just pressed.":"\u68C0\u67E5\u6309\u94AE\u662F\u5426\u521A\u521A\u88AB\u6309\u4E0B\u3002","Button _PARAM0_ was just pressed":"\u6309\u94AE _PARAM0_ \u521A\u521A\u88AB\u6309\u4E0B","Check if the button is pressed.":"\u68C0\u67E5\u6309\u94AE\u662F\u5426\u88AB\u6309\u4E0B\u3002","Button pressed":"\u6309\u94AE\u5DF2\u6309\u4E0B","Button _PARAM0_ is pressed":"\u6309\u94AE_PARAM0_\u5DF2\u6309\u4E0B","Check if the button is released.":"\u68C0\u67E5\u6309\u94AE\u662F\u5426\u5DF2\u91CA\u653E\u3002","Button _PARAM0_ is released":"\u6309\u94AE_PARAM0_\u5DF2\u91CA\u653E","Mark the button _PARAM0_ as _PARAM2_":"\u5C06\u6309\u94AE_PARAM0_\u6807\u8BB0\u4E3A_PARAM2_","Control a platformer character with a multitouch controller.":"\u4F7F\u7528\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u63A7\u5236\u5E73\u53F0\u6E38\u620F\u89D2\u8272\u3002","Platformer multitouch controller mapper":"\u5E73\u53F0\u6E38\u620F\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6620\u5C04\u5668","Platform character behavior":"\u5E73\u53F0\u89D2\u8272\u884C\u4E3A","Controller identifier (1, 2, 3, 4...)":"\u63A7\u5236\u5668\u6807\u8BC6\u7B26\uFF081\u30012\u30013\u30014\u2026\u2026\uFF09","Jump button name":"\u8DF3\u8F6C\u6309\u94AE\u540D\u79F0","Control a 3D physics character with a multitouch controller.":"\u4F7F\u7528\u591A\u70B9\u89E6\u63A7\u63A7\u52363D\u7269\u7406\u89D2\u8272\u3002","3D platformer multitouch controller mapper":"3D\u5E73\u53F0\u6E38\u620F\u591A\u70B9\u89E6\u6478\u63A7\u5236\u5668\u6620\u5C04","3D shooter multitouch controller mapper":"3D\u5C04\u51FB\u6E38\u620F\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6620\u5C04","Control camera rotations with a multitouch controller.":"\u4F7F\u7528\u591A\u70B9\u89E6\u63A7\u5668\u63A7\u5236\u6444\u50CF\u673A\u65CB\u8F6C\u3002","First person camera multitouch controller mapper":"\u7B2C\u4E00\u4EBA\u79F0\u6444\u50CF\u5934\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6620\u5C04","Control a 3D physics car with a multitouch controller.":"Control a 3D physics car with a multitouch controller.","3D car multitouch controller mapper":"3D car multitouch controller mapper","Steer joystick":"Steer joystick","Speed joystick":"Speed joystick","Hand brake button name":"Hand brake button name","Control a top-down character with a multitouch controller.":"\u4F7F\u7528\u591A\u70B9\u89E6\u63A7\u5668\u63A7\u5236\u9876\u90E8\u89D2\u8272\u3002","Top-down multitouch controller mapper":"\u9876\u90E8\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6620\u5C04","Joystick for touchscreens.":"\u89E6\u5C4F\u624B\u67C4\u3002","Pass the object property values to the behavior.":"\u5C06\u5BF9\u8C61\u5C5E\u6027\u503C\u4F20\u9012\u7ED9\u884C\u4E3A\u3002","Update configuration":"\u66F4\u65B0\u914D\u7F6E","Update the configuration of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u914D\u7F6E","Show the joystick until it is released.":"\u663E\u793A\u6447\u6746\u76F4\u5230\u91CA\u653E\u3002","Show and start pressing":"\u663E\u793A\u5E76\u5F00\u59CB\u6309\u4E0B","Show _PARAM0_ at the cursor position and start pressing":"\u5728\u5149\u6807\u4F4D\u7F6E\u663E\u793A_PARAM0_\u5E76\u5F00\u59CB\u6309\u4E0B","Return the X position of a specified touch":"\u8FD4\u56DE\u7279\u5B9A\u89E6\u6478\u7684X\u4F4D\u7F6E","Touch X position (on parent)":"\u89E6\u6478X\u4F4D\u7F6E\uFF08\u5728\u7236\u7EA7\uFF09","De/activate control of the joystick.":"\u6FC0\u6D3B/\u505C\u7528\u6447\u6746\u63A7\u5236\u3002","De/activate control":"\u6FC0\u6D3B/\u505C\u7528\u63A7\u5236","Activate control of _PARAM0_: _PARAM1_":"\u6FC0\u6D3B_PARAM0_\u7684\u63A7\u5236\uFF1A_PARAM1_","Check if a stick is pressed.":"\u68C0\u67E5\u6447\u6746\u662F\u5426\u6309\u4E0B\u3002","Stick pressed":"\u6447\u6746\u5DF2\u6309\u4E0B","Stick _PARAM0_ is pressed":"\u6447\u6746_PARAM0_\u5DF2\u6309\u4E0B","the strick force (from 0 to 1).":"\u6447\u6746\u529B\uFF08\u4ECE0\u52301\uFF09\u3002","the stick force":"\u6447\u6746\u529B","the stick force on X axis (from -1 at the left to 1 at the right).":"X\u8F74\u4E0A\u7684\u6447\u6746\u529B\uFF08\u4ECE\u5DE6\u4FA7\u7684-1\u5230\u53F3\u4FA7\u76841\uFF09\u3002","the stick X force":"\u6447\u6746X\u8F74\u529B","the stick force on Y axis (from -1 at the top to 1 at the bottom).":"y\u8F74\u4E0A\u7684\u6746\u529B\uFF08\u4ECE\u8868\u9762\u5230\u8868\u9762\u4E3A-1\uFF0C\u4ECE\u8868\u9762\u5230\u5E95\u90E8\u4E3A1\uFF09\u3002","the stick Y force":"\u6746Y\u529B","Return the angle the joystick is pointing towards (from -180 to 180).":"\u8FD4\u56DE\u6447\u6746\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u4ECE-180\u5230180\uFF09\u3002","Return the angle the stick is pointing towards (from -180 to 180).":"\u8FD4\u56DE\u6746\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u4ECE-180\u5230180\uFF09\u3002","_PARAM0_ is pushed in direction _PARAM1_":"_PARAM0_\u671D_DIRECTION_\u63A8","the multitouch controller identifier (1, 2, 3, 4...).":"\u591A\u70B9\u89E6\u63A7\u63A7\u5236\u5668\u6807\u8BC6\u7B26\uFF081\u30012\u30013\u30014...\uFF09\u3002","the joystick name of the object.":"\u5BF9\u8C61\u7684\u6447\u6746\u540D\u79F0\u3002","the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"\u6447\u6746\u7684\u6B7B\u533A\u534A\u5F84\uFF08\u8303\u56F4\uFF1A0\u52301\uFF09\u3002\u6B7B\u533A\u662F\u4E00\u4E2A\u533A\u57DF\uFF0C\u6E38\u620F\u624B\u67C4\u4E0A\u7684\u79FB\u52A8\u4E0D\u4F1A\u88AB\u8003\u8651\u5728\u5185\uFF08\u76F8\u53CD\uFF0C\u624B\u67C4\u4F1A\u88AB\u89C6\u4E3A\u672A\u79FB\u52A8\uFF09\u3002","Sprite Sheet Animations":"\u7CBE\u7075\u8868\u52A8\u753B","Animate a tiled sprite from a sprite sheet.":"\u4ECE\u7CBE\u7075\u8868\u52A8\u753B\u4E2D\u521B\u5EFA\u5E73\u94FA\u7CBE\u7075\u3002","Animates a sprite sheet using JSON (see extension description).":"\u4F7F\u7528JSON\u64AD\u653E\u7CBE\u7075\u8868\uFF08\u8BF7\u53C2\u9605\u6269\u5C55\u8BF4\u660E\uFF09\u3002","JSON sprite sheet animator":"JSON\u7CBE\u7075\u8868\u52A8\u753B\u5236\u4F5C","JSON formatted text describing the sprite sheet":"JSON\u683C\u5F0F\u63CF\u8FF0\u7CBE\u7075\u8868\u7684\u6587\u672C","Current animation":"\u5F53\u524D\u52A8\u753B","Current frame of the animation":"\u5F53\u524D\u52A8\u753B\u5E27","Currently displayed frame name":"\u5F53\u524D\u663E\u793A\u7684\u5E27\u540D\u79F0","Speed of the animation (in seconds)":"\u52A8\u753B\u901F\u5EA6\uFF08\u5355\u4F4D\uFF1A\u79D2\uFF09","Loads the JSON data into the behavior":"\u5C06JSON\u6570\u636E\u52A0\u8F7D\u5230\u884C\u4E3A\u4E2D","Load the JSON":"\u52A0\u8F7DJSON","Load the JSON of _PARAM0_":"\u52A0\u8F7D_PARAM0_\u7684JSON","Update the object attached to the behavior using the latest properties values.":"\u4F7F\u7528\u6700\u65B0\u5C5E\u6027\u503C\u66F4\u65B0\u9644\u52A0\u5230\u8BE5\u884C\u4E3A\u7684\u5BF9\u8C61","Update the object":"\u66F4\u65B0\u5BF9\u8C61","Update object _PARAM0_ with properties of _PARAM1_":"\u4F7F\u7528_PARAM1_\u7684\u5C5E\u6027\u66F4\u65B0_PARAM0_\u5BF9\u8C61","Updates the animation frame.":"\u66F4\u65B0\u52A8\u753B\u5E27\u3002","Update the animation frame":"\u66F4\u65B0\u52A8\u753B\u5E27","Update the current animation frame of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5F53\u524D\u52A8\u753B\u5E27\u66F4\u65B0\u4E3A_PARAM2_\u3002","The frame to set to":"\u8981\u8BBE\u7F6E\u7684\u5E27","Loads a new JSON spritesheet data into the behavior.":"\u5C06\u65B0\u7684JSON\u7CBE\u7075\u8868\u6570\u636E\u52A0\u8F7D\u5230\u884C\u4E3A\u4E2D\u3002","Load data from a JSON resource":"\u4ECEJSON\u8D44\u6E90\u52A0\u8F7D\u6570\u636E","Load JSON spritesheet data for _PARAM0_ from _PARAM2_":"\u4ECE_PARAM2_\u52A0\u8F7D_PARAM0_\u7684JSON\u7CBE\u7075\u8868\u6570\u636E","The JSON to load":"\u8981\u52A0\u8F7D\u7684JSON","Display one frame without animating the object.":"\u663E\u793A\u4E00\u4E2A\u5E27\uFF0C\u800C\u4E0D\u5BF9\u5BF9\u8C61\u8FDB\u884C\u52A8\u753B\u5904\u7406\u3002","Display a frame":"\u663E\u793A\u4E00\u5E27","Display frame _PARAM2_ of _PARAM0_":"\u663E\u793A_PARAM0_\u7684\u5E27_PARAM2_","The frame to display":"\u8981\u663E\u793A\u7684\u5E27","Play an animation from the sprite sheet.":"\u4ECE\u7CBE\u7075\u8868\u64AD\u653E\u52A8\u753B\u3002","Play Animation":"\u64AD\u653E\u52A8\u753B","Play animation _PARAM2_ of _PARAM0_":"\u4ECE_PARAM0_\u64AD\u653E\u52A8\u753B_PARAM2_","The name of the animation":"\u52A8\u753B\u7684\u540D\u79F0","The name of the current animation. __null if no animation is playing.":"\u5F53\u524D\u52A8\u753B\u7684\u540D\u79F0\u3002 __\u5982\u679C\u6CA1\u6709\u6B63\u5728\u64AD\u653E\u7684\u52A8\u753B\uFF0C\u5219\u4E3A\u7A7A\u3002","If Current Frame of _PARAM0_ = _PARAM2_":"\u5982\u679C_PARAM0_\u7684\u5F53\u524D\u5E27 = _PARAM2_","The name of the currently displayed frame.":"\u5F53\u524D\u663E\u793A\u7684\u5E27\u7684\u540D\u79F0\u3002","Current frame":"\u5F53\u524D\u5E27","Pause the animation of a sprite sheet.":"\u6682\u505C\u7CBE\u7075\u8868\u7684\u52A8\u753B\u3002","Pause animation":"\u6682\u505C\u52A8\u753B","Pause the current animation of _PARAM0_":"\u6682\u505C_PARAM0_\u7684\u5F53\u524D\u52A8\u753B","Resume a paused animation of a sprite sheet.":"\u6062\u590D\u6682\u505C\u7684\u7CBE\u7075\u8868\u52A8\u753B\u3002","Resume animation":"\u6062\u590D\u52A8\u753B","Resume the current animation of _PARAM0_":"\u6062\u590D_PARAM0_\u7684\u5F53\u524D\u52A8\u753B\u3002","Animates a vertical (top to bottom) sprite sheet.":"\u4F7F\u7528\u5782\u76F4\uFF08\u4ECE\u4E0A\u5230\u4E0B\uFF09\u7CBE\u7075\u8868\u8FDB\u884C\u52A8\u753B\u3002","Vertical sprite sheet animator":"\u5782\u76F4\u7CBE\u7075\u8868\u52A8\u753B\u5236\u4F5C","Horizontal width of sprite (in pixels)":"\u7CBE\u7075\u7684\u6C34\u5E73\u5BBD\u5EA6\uFF08\u5355\u4F4D\uFF1A\u50CF\u7D20\uFF09","Vertical height of sprite (in pixels)":"\u7CBE\u7075\u7684\u5782\u76F4\u9AD8\u5EA6\uFF08\u5355\u4F4D\uFF1A\u50CF\u7D20\uFF09","Empty space between each sprite (in pixels)":"\u6BCF\u4E2A\u7CBE\u7075\u4E4B\u95F4\u7684\u7A7A\u767D\u95F4\u9694\uFF08\u5355\u4F4D\uFF1A\u50CF\u7D20\uFF09","Column of the animation":"\u52A8\u753B\u7684\u5217","First Frame of the animation":"\u52A8\u753B\u7684\u7B2C\u4E00\u5E27","Last Frame of the animation":"\u52A8\u753B\u7684\u6700\u540E\u4E00\u5E27","Current Frame of the animation":"\u52A8\u753B\u7684\u5F53\u524D\u5E27","Set the animation frame.":"\u8BBE\u7F6E\u52A8\u753B\u5E27\u3002","Set the animation frame":"\u8BBE\u7F6E\u52A8\u753B\u5E27","Set the current frame of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5F53\u524D\u5E27\u8BBE\u7F6E\u4E3A_PARAM2_","The frame":"\u5E27","Play animation":"\u64AD\u653E\u52A8\u753B","Play animation of _PARAM0_ on column _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"\u5728\u7B2C_PARAM5_\u5217\u64AD\u653E_PARAM0_\u52A8\u753B\uFF0C\u4ECE\u7B2C_PARAM2_\u5230\u7B2C_PARAM3_\u5E27\uFF0C\u901F\u5EA6\u4E3A_PARAM4_","First frame of the animation":"\u52A8\u753B\u7684\u7B2C\u4E00\u5E27","Last frame of the animation":"\u52A8\u753B\u7684\u6700\u540E\u4E00\u5E27","Duration for each frame (seconds)":"\u6BCF\u5E27\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","The column containing the animation":"\u5305\u542B\u52A8\u753B\u7684\u5217","The current frame of the current animation.":"\u5F53\u524D\u52A8\u753B\u7684\u5F53\u524D\u5E27\u3002","Pause the animation of _PARAM0_":"\u6682\u505C_PARAM0_\u7684\u52A8\u753B","Animates a horizontal (left to right) sprite sheet.":"\u4F7F\u7528\u6C34\u5E73\uFF08\u4ECE\u5DE6\u5230\u53F3\uFF09\u7CBE\u7075\u8868\u8FDB\u884C\u52A8\u753B\u3002","Horizontal sprite sheet animator":"\u6C34\u5E73\u7CBE\u7075\u8868\u52A8\u753B\u5236\u4F5C","Row of the animation":"\u52A8\u753B\u7684\u884C","Play animation of _PARAM0_ on row _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"\u4EE5_PARAM4_\u7684\u901F\u5EA6\uFF0C\u5728\u7B2C_PARAM5_\u884C\u4ECE\u7B2C_PARAM2_\u5230\u7B2C_PARAM3_\u5E27\u64AD\u653E_PARAM0_\u52A8\u753B","Last Frame of animation":"\u52A8\u753B\u7684\u6700\u540E\u4E00\u5E27","What row is the animation in":"\u52A8\u753B\u6240\u5728\u7684\u884C","Toggle switch":"Toggle switch","Toggle switch that users can click or touch.":"Toggle switch that users can click or touch\u3002","The finite state machine used internally by the switch object.":"\u5F00\u5173\u5BF9\u8C61\u5185\u90E8\u4F7F\u7528\u7684\u6709\u9650\u72B6\u6001\u673A\u3002","Switch finite state machine":"\u5F00\u5173\u6709\u9650\u72B6\u6001\u673A","Check if the toggle switch is checked.":"\u68C0\u67E5\u5F00\u5173\u662F\u5426\u5904\u4E8E\u9009\u4E2D\u72B6\u6001\u3002","Check if the toggle switch was checked in the current frame.":"\u68C0\u67E5\u5F53\u524D\u5E27\u4E2D\u662F\u5426\u68C0\u67E5\u4E86\u5207\u6362\u5F00\u5173\u3002","Has just been checked":"\u521A\u521A\u88AB\u68C0\u67E5\u8FC7","_PARAM0_ has just been checked":"_PARAM0_\u521A\u521A\u88AB\u68C0\u67E5\u8FC7","Check if the toggle switch was unchecked in the current frame.":"\u68C0\u67E5\u5F53\u524D\u5E27\u4E2D\u5F00\u5173\u662F\u5426\u88AB\u53D6\u6D88\u9009\u4E2D\u3002","Has just been unchecked":"\u521A\u521A\u88AB\u53D6\u6D88\u9009\u4E2D","_PARAM0_ has just been unchecked":"_PARAM0_\u521A\u521A\u88AB\u53D6\u6D88\u9009\u4E2D","Check if the toggle switch was toggled in the current frame.":"\u68C0\u67E5\u5F53\u524D\u5E27\u4E2D\u5F00\u5173\u662F\u5426\u88AB\u5207\u6362\u3002","Has just been toggled":"\u521A\u521A\u88AB\u5207\u6362","_PARAM0_ has just been toggled":"_PARAM0_\u521A\u521A\u88AB\u5207\u6362","Check (or uncheck) the toggle switch.":"\u52FE\u9009\uFF08\u6216\u53D6\u6D88\u52FE\u9009\uFF09\u5F00\u5173\u3002","Check (or uncheck)":"\u9009\u62E9\uFF08\u6216\u53D6\u6D88\u9009\u62E9\uFF09","Check _PARAM0_: _PARAM2_":"\u68C0\u67E5_PARAM0_\uFF1A_PARAM2_","IsChecked":"\u5DF2\u9009\u4E2D","Toggle the switch.":"\u5207\u6362\u5F00\u5173\u3002","Toggle":"\u5207\u6362","Toggle _PARAM0_":"\u5207\u6362_PARAM0_","A toggle switch that users can click or touch.":"\u7528\u6237\u53EF\u4EE5\u70B9\u51FB\u6216\u89E6\u6478\u7684\u5207\u6362\u5F00\u5173\u3002","Check if the toggle switch was checked or unchecked in the current frame.":"\u68C0\u67E5\u5F53\u524D\u5E27\u4E2D\u5F00\u5173\u662F\u5426\u662F\u9009\u4E2D\u6216\u672A\u9009\u4E2D\u7684\u3002","Check _PARAM0_: _PARAM1_":"\u68C0\u67E5_PARAM0_\uFF1A_PARAM1_","Update the state animation.":"\u66F4\u65B0\u72B6\u6001\u52A8\u753B\u3002","Update state animation":"\u66F4\u65B0\u72B6\u6001\u52A8\u753B","Update the state animation of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u72B6\u6001\u52A8\u753B","Star Rating Bar":"Star Rating Bar","An animated bar to rate out of 5.":"An animated bar to rate out of 5\u3002","Default rate":"\u9ED8\u8BA4\u901F\u7387","Shake the stars on value changes":"\u5728\u503C\u53D8\u5316\u65F6\u6447\u52A8\u661F\u661F","Disable the rating":"\u7981\u7528\u8BC4\u7EA7","the rate of the object.":"\u7269\u4F53\u7684\u901F\u7387\u3002","the rate":"\u901F\u7387","Check if the object is disabled.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5DF2\u7981\u7528\u3002","_PARAM0_ is disabled":"_PARAM0_\u5DF2\u7981\u7528","Enable or disable the object.":"\u542F\u7528\u6216\u7981\u7528\u5BF9\u8C61\u3002","_PARAM0_ is disabled: _PARAM1_":"_PARAM0_\u5DF2\u7981\u7528\uFF1A_PARAM1_","Disable":"\u7981\u7528","Stay On Screen (2D)":"\u4FDD\u6301\u5728\u5C4F\u5E55\u4E0A\uFF08\u4E8C\u7EF4\uFF09","Move the object to keep it visible on the screen.":"\u79FB\u52A8\u5BF9\u8C61\u4EE5\u4FDD\u6301\u5176\u5728\u5C4F\u5E55\u4E0A\u53EF\u89C1\u3002","Force the object to stay visible on the screen by setting back its 2D position inside the viewport of the camera.":"\u901A\u8FC7\u5C06\u7269\u4F53\u7684\u4E8C\u7EF4\u4F4D\u7F6E\u8BBE\u7F6E\u56DE\u76F8\u673A\u89C6\u53E3\u5185\uFF0C\u5F3A\u5236\u8BE5\u7269\u4F53\u5728\u5C4F\u5E55\u4E0A\u53EF\u89C1\u3002","Stay on Screen":"\u7559\u5728\u5C4F\u5E55\u4E0A","Top margin":"\u4E0A\u8FB9\u8DDD","Bottom margin":"\u4E0B\u8FB9\u8DDD","Left margin":"\u5DE6\u8FB9\u8DDD","Right margin":"\u53F3\u8FB9\u8DDD","the top margin (in pixels) to leave between the object and the screen border.":"\u5BF9\u8C61\u548C\u5C4F\u5E55\u8FB9\u754C\u4E4B\u95F4\u7684\u9876\u90E8\u8FB9\u8DDD\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Screen top margin":"\u5C4F\u5E55\u9876\u90E8\u8FB9\u8DDD","the top margin":"\u9876\u90E8\u8FB9\u8DDD","the bottom margin (in pixels) to leave between the object and the screen border.":"\u5BF9\u8C61\u548C\u5C4F\u5E55\u8FB9\u754C\u4E4B\u95F4\u7684\u5E95\u90E8\u8FB9\u8DDD\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Screen bottom margin":"\u5C4F\u5E55\u5E95\u90E8\u8FB9\u8DDD","the bottom margin":"\u5E95\u90E8\u8FB9\u8DDD","the left margin (in pixels) to leave between the object and the screen border.":"\u5BF9\u8C61\u548C\u5C4F\u5E55\u8FB9\u754C\u4E4B\u95F4\u7684\u5DE6\u4FA7\u8FB9\u8DDD\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Screen left margin":"\u5C4F\u5E55\u5DE6\u4FA7\u8FB9\u8DDD","the left margin":"\u5DE6\u4FA7\u8FB9\u8DDD","the right margin (in pixels) to leave between the object and the screen border.":"\u5BF9\u8C61\u548C\u5C4F\u5E55\u8FB9\u754C\u4E4B\u95F4\u7684\u53F3\u4FA7\u8FB9\u8DDD\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09\u3002","Screen right margin":"\u5C4F\u5E55\u53F3\u4FA7\u8FB9\u8DDD","the right margin":"\u53F3\u4FA7\u8FB9\u8DDD","Stick objects to others":"\u5C06\u5BF9\u8C61\u7C98\u8D34\u5230\u5176\u4ED6\u5BF9\u8C61","Make objects follow the position and rotation of the object they are stuck to.":"\u4F7F\u5BF9\u8C61\u8DDF\u968F\u5B83\u4EEC\u6240\u7C98\u8D34\u5230\u7684\u5BF9\u8C61\u7684\u4F4D\u7F6E\u548C\u65CB\u8F6C\u3002","Check if the object is stuck to another object.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u7C98\u5728\u53E6\u4E00\u4E2A\u5BF9\u8C61\u4E0A\u3002","Is stuck to another object":"\u662F\u5426\u7C98\u5728\u53E6\u4E00\u4E2A\u5BF9\u8C61\u4E0A","_PARAM1_ is stuck to _PARAM3_":"_PARAM1_\u88AB\u7C98\u5728_PARAM3_\u4E0A\u3002","Sticker":"\u8D34\u7EB8","Sticker behavior":"\u8D34\u7EB8\u884C\u4E3A","Basis":"\u57FA\u7840","Stick the object to another. Use the action to stick the object, or unstick it later.":"\u5C06\u5BF9\u8C61\u7C98\u8D34\u5230\u53E6\u4E00\u4E2A\u5BF9\u8C61\u3002\u4F7F\u7528\u64CD\u4F5C\u5C06\u5BF9\u8C61\u7C98\u8D34\uFF0C\u6216\u7A0D\u540E\u53D6\u6D88\u7C98\u8D34\u3002","Only follow the position":"\u53EA\u8DDF\u968F\u4F4D\u7F6E","Destroy when the object it's stuck on is destroyed":"\u5F53\u5176\u7C98\u8D34\u7684\u5BF9\u8C61\u88AB\u9500\u6BC1\u65F6\u9500\u6BC1","Stick on another object.":"\u7C98\u5728\u53E6\u4E00\u4E2A\u5BF9\u8C61\u4E0A\u3002","Stick":"\u7C98\u8D34","Stick _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7C98\u8D34\u5230_PARAM2_","Object to stick to":"\u8981\u7C98\u8D34\u7684\u5BF9\u8C61","Unstick from the object it was stuck to.":"\u53D6\u6D88\u4E0E\u5176\u7C98\u8D34\u7684\u5BF9\u8C61\u7684\u7C98\u8D34\u3002","Unstick":"\u53D6\u6D88\u7C98\u8D34","Unstick _PARAM0_":"\u53D6\u6D88\u7C98\u8D34_PARAM0_","Sway":"\u6447\u6446","Sway objects like grass in the wind.":"\u50CF\u98CE\u4E2D\u7684\u8349\u4E00\u6837\u6447\u6446\u5BF9\u8C61\u3002","Sway multiple instances of an object at different times - useful for random grass swaying.":"\u5728\u4E0D\u540C\u65F6\u95F4\u6446\u52A8\u591A\u4E2A\u5BF9\u8C61\u7684\u5B9E\u4F8B - \u7528\u6765\u968F\u673A\u6446\u52A8\u8349\u3002","Sway uses the tween behavior":"Sway\u4F7F\u7528\u7F13\u52A8\u884C\u4E3A","Maximum angle to the left (in degrees) - Use a negative number":"\u6700\u5927\u5DE6\u8FB9\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09- \u4F7F\u7528\u8D1F\u6570","Maximum angle to the right (in degrees) - Use a positive number":"\u6700\u5927\u53F3\u8FB9\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09- \u4F7F\u7528\u6B63\u6570","Mininum value for random tween time range for angle (seconds)":"\u89D2\u5EA6\u968F\u673A\u7F13\u52A8\u65F6\u95F4\u8303\u56F4\u7684\u6700\u5C0F\u503C\uFF08\u79D2\uFF09","Maximum value for random tween time range for angle (seconds)":"\u89D2\u5EA6\u968F\u673A\u7F13\u52A8\u65F6\u95F4\u8303\u56F4\u7684\u6700\u5927\u503C\uFF08\u79D2\uFF09","Minimum Y scale amount":"Y\u8F74\u7F29\u653E\u7684\u6700\u5C0F\u503C","Y scale":"Y\u8F74\u7F29\u653E","Maximum Y scale amount":"Y\u8F74\u7F29\u653E\u7684\u6700\u5927\u503C","Mininum value for random tween time range for Y scale (seconds)":"Y\u8F74\u7F29\u653E\u7684\u8303\u56F4\u5185\u7684\u968F\u673A\u7F13\u52A8\u65F6\u95F4\u8303\u56F4\u7684\u6700\u5C0F\u503C\uFF08\u79D2\uFF09","Maximum value for random tween time range for Y scale (seconds)":"Y\u8F74\u7F29\u653E\u7684\u8303\u56F4\u5185\u7684\u968F\u673A\u7F13\u52A8\u65F6\u95F4\u8303\u56F4\u7684\u6700\u5927\u503C\uFF08\u79D2\uFF09","Set sway angle left and right.":"\u8BBE\u7F6E\u5DE6\u53F3\u6447\u6446\u89D2\u5EA6\u3002","Set sway angle left and right":"\u8BBE\u7F6E\u5DE6\u53F3\u6447\u6446\u89D2\u5EA6","Sway the angle of _PARAM0_ to _PARAM2_\xB0 to the left and to _PARAM3_\xB0 to the right":"\u5C06_PARAM0_\u7684\u6447\u6446\u89D2\u5EA6\u8BBE\u7F6E\u4E3A_PARAM2_\xB0\u81F3\u5DE6\u4FA7\u548C_PARAM3_\xB0\u81F3\u53F3\u4FA7","Angle to the left (degrees) - Use negative number":"\u5DE6\u4FA7\u89D2\u5EA6\uFF08\u5EA6\uFF09-\u4F7F\u7528\u8D1F\u6570","Angle to the right (degrees) - Use positive number":"\u53F3\u4FA7\u89D2\u5EA6\uFF08\u5EA6\uFF09-\u4F7F\u7528\u6B63\u6570","Set sway angle time range.":"\u8BBE\u7F6E\u6447\u6446\u89D2\u5EA6\u65F6\u95F4\u8303\u56F4\u3002","Set sway angle time range":"\u8BBE\u7F6E\u6447\u6446\u89D2\u5EA6\u65F6\u95F4\u8303\u56F4","Tween angle time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"PARMA0_\u7684\u89D2\u5EA6\u7F13\u52A8\u65F6\u95F4\u8303\u56F4\uFF0C\u5C06\u6700\u5C0F\u8BBE\u7F6E\u4E3A_PARAM2_\u79D2\uFF0C\u6700\u5927\u8BBE\u7F6E\u4E3A_PARAM3_\u79D2","Angle tween time minimum (seconds)":"\u89D2\u5EA6\u7F13\u52A8\u65F6\u95F4\u6700\u5C0F\u65F6\uFF08\u79D2\uFF09","Angle tween time maximum (seconds)":"\u89D2\u5EA6\u7F13\u52A8\u65F6\u95F4\u6700\u5927\u65F6\uFF08\u79D2\uFF09","Set sway Y scale mininum and maximum.":"\u8BBE\u7F6E\u6447\u6446Y\u8F74\u7684\u6700\u5C0F\u548C\u6700\u5927\u6BD4\u4F8B\u3002","Set sway Y scale mininum and maximum":"\u8BBE\u7F6E\u6447\u6446Y\u8F74\u7684\u6700\u5C0F\u548C\u6700\u5927\u6BD4\u4F8B","Sway the Y scale of _PARAM0_ from _PARAM2_ to _PARAM3_":"\u6447\u6446_PARAM0_\u7684Y\u8F74\u6BD4\u4F8B\u4ECE_PARAM2_\u5230_PARAM3_","Minimum Y scale":"\u6700\u5C0FY\u8F74\u6BD4\u4F8B","Maximum Y scale":"\u6700\u5927Y\u8F74\u6BD4\u4F8B","Set Y scale time range.":"\u8BBE\u7F6EY\u8F74\u6BD4\u4F8B\u65F6\u95F4\u8303\u56F4\u3002","Set sway Y scale time range":"\u8BBE\u7F6E\u6447\u6446Y\u8F74\u6BD4\u4F8B\u65F6\u95F4\u8303\u56F4","Tween Y scale time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"_PARAM0_\u7684Y\u8F74\u6BD4\u4F8B\u65F6\u95F4\u8303\u56F4\uFF0C\u5C06\u6700\u5C0F\u8BBE\u7F6E\u4E3A_PARAM2_\u79D2\uFF0C\u6700\u5927\u8BBE\u7F6E\u4E3A_PARAM3_\u79D2","Y scale tween time minimum (seconds)":"Y\u8F74\u6BD4\u4F8BTween\u65F6\u95F4\u6700\u5C0F\u503C\uFF08\u79D2\uFF09","Y scale tween time maximum (seconds)":"Y\u8F74\u6BD4\u4F8BTween\u65F6\u95F4\u6700\u5927\u503C\uFF08\u79D2\uFF09","Swipe Gesture":"\u6ED1\u52A8\u624B\u52BF","Detect swipe gestures based on their distance and duration.":"\u6839\u636E\u5B83\u4EEC\u7684\u8DDD\u79BB\u548C\u6301\u7EED\u65F6\u95F4\u68C0\u6D4B\u6ED1\u52A8\u624B\u52BF\u3002","Enable (or disable) swipe gesture detection.":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u6ED1\u52A8\u624B\u52BF\u68C0\u6D4B\u3002","Enable (or disable) swipe gesture detection":"\u542F\u7528\uFF08\u6216\u7981\u7528\uFF09\u6ED1\u52A8\u624B\u52BF\u68C0\u6D4B","Enable swipe detection: _PARAM1_":"\u542F\u7528\u6ED1\u52A8\u68C0\u6D4B\uFF1A_PARAM1_","Enable swipe detection":"\u542F\u7528\u6ED1\u52A8\u68C0\u6D4B","Draw a line that indicates the current swipe gesture. Edit \"Outline Size\" of the shape painter to adjust the thickness of the line.":"\u7ED8\u5236\u4E00\u6839\u6307\u793A\u5F53\u524D\u6ED1\u52A8\u624B\u52BF\u7684\u7EBF\u3002\u7F16\u8F91\u5F62\u72B6\u7ED8\u5236\u5668\u7684\u201C\u8F6E\u5ED3\u5927\u5C0F\u201D\u4EE5\u8C03\u6574\u7EBF\u7684\u539A\u5EA6\u3002","Draw swipe gesture":"\u7ED8\u5236\u6ED1\u52A8\u624B\u52BF","Draw a line with _PARAM1_ that shows the current swipe":"\u4F7F\u7528_PARAM1_\u7ED8\u5236\u4E00\u6761\u663E\u793A\u5F53\u524D\u6ED1\u52A8\u7684\u7EBF","Shape painter used to draw swipe":"\u7528\u4E8E\u7ED8\u5236\u6ED1\u52A8\u7684\u5F62\u72B6\u7ED8\u5236\u5668","Change the layer used to detect swipe gestures.":"\u66F4\u6539\u7528\u4E8E\u68C0\u6D4B\u6ED1\u52A8\u624B\u52BF\u7684\u56FE\u5C42\u3002","Layer used to detect swipe gestures":"\u7528\u4E8E\u68C0\u6D4B\u6ED1\u52A8\u624B\u52BF\u7684\u56FE\u5C42","Use layer _PARAM1_ to detect swipe gestures":"\u4F7F\u7528\u56FE\u5C42_PARAM1_\u6765\u68C0\u6D4B\u6ED1\u52A8\u624B\u52BF","the Layer used to detect swipe gestures.":"\u7528\u4E8E\u68C0\u6D4B\u6ED1\u52A8\u624B\u52BF\u7684\u56FE\u5C42\u3002","the Layer used to detect swipe gestures":"\u7528\u4E8E\u68C0\u6D4B\u6ED1\u52A8\u624B\u52BF\u7684\u56FE\u5C42","Swipe angle (degrees).":"\u6ED1\u52A8\u89D2\u5EA6\uFF08\u5EA6\uFF09\u3002","Swipe angle (degrees)":"\u6ED1\u52A8\u89D2\u5EA6\uFF08\u5EA6\uFF09","the swipe angle (degrees)":"\u6ED1\u52A8\u89D2\u5EA6\uFF08\u5EA6\uFF09","Swipe distance (pixels).":"\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09\u3002","Swipe distance (pixels)":"\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","the swipe distance (pixels)":"\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","Swipe distance in horizontal direction (pixels).":"\u6C34\u5E73\u65B9\u5411\u7684\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09\u3002","Swipe distance in horizontal direction (pixels)":"\u6C34\u5E73\u65B9\u5411\u7684\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","the swipe distance in horizontal direction (pixels)":"\u6C34\u5E73\u65B9\u5411\u7684\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","Swipe distance in vertical direction (pixels).":"\u7AD6\u76F4\u65B9\u5411\u7684\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09\u3002","Swipe distance in vertical direction (pixels)":"\u7AD6\u76F4\u65B9\u5411\u7684\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","the swipe distance in vertical direction (pixels)":"\u7AD6\u76F4\u65B9\u5411\u7684\u6ED1\u52A8\u8DDD\u79BB\uFF08\u50CF\u7D20\uFF09","Start point of the swipe X position.":"\u5F00\u59CB\u6ED1\u52A8\u7684X\u5750\u6807\u3002","Start point of the swipe X position":"\u5F00\u59CB\u6ED1\u52A8\u7684X\u5750\u6807","the start point of the swipe X position":"\u5F00\u59CB\u6ED1\u52A8\u7684X\u5750\u6807","Start point of the swipe Y position.":"\u5F00\u59CB\u6ED1\u52A8\u7684Y\u5750\u6807\u3002","Start point of the swipe Y position":"\u5F00\u59CB\u6ED1\u52A8\u7684Y\u5750\u6807","the start point of the swipe Y position":"\u5F00\u59CB\u6ED1\u52A8\u7684Y\u5750\u6807","End point of the swipe X position.":"\u7ED3\u675F\u6ED1\u52A8\u7684X\u5750\u6807\u3002","End point of the swipe X position":"\u7ED3\u675F\u6ED1\u52A8\u7684X\u5750\u6807","the end point of the swipe X position":"\u7ED3\u675F\u6ED1\u52A8\u7684X\u5750\u6807","End point of the swipe Y position.":"\u7ED3\u675F\u6ED1\u52A8\u7684Y\u5750\u6807\u3002","End point of the swipe Y position":"\u7ED3\u675F\u6ED1\u52A8\u7684Y\u5750\u6807","the end point of the swipe Y position":"\u7ED3\u675F\u6ED1\u52A8\u7684Y\u5750\u6807","Swipe duration (seconds).":"\u6ED1\u52A8\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09\u3002","Swipe duration (seconds)":"\u6ED1\u52A8\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","swipe duration (seconds)":"\u6ED1\u52A8\u6301\u7EED\u65F6\u95F4\uFF08\u79D2\uFF09","Check if a swipe is currently in progress.":"\u68C0\u67E5\u5F53\u524D\u662F\u5426\u6B63\u5728\u8FDB\u884C\u6ED1\u52A8\u3002","Swipe is in progress":"\u6ED1\u52A8\u6B63\u5728\u8FDB\u884C\u4E2D","Check if swipe detection is enabled.":"\u68C0\u67E5\u6ED1\u52A8\u68C0\u6D4B\u662F\u5426\u5DF2\u542F\u7528\u3002","Is swipe detection enabled":"\u6ED1\u52A8\u68C0\u6D4B\u662F\u5426\u5DF2\u542F\u7528","Swipe detection is enabled":"\u6ED1\u52A8\u68C0\u6D4B\u5DF2\u542F\u7528","Check if the swipe has just ended.":"\u68C0\u67E5\u6ED1\u52A8\u662F\u5426\u521A\u521A\u7ED3\u675F\u3002","Swipe just ended":"\u8F7B\u626B\u521A\u521A\u7ED3\u675F","Swipe has just ended":"\u8F7B\u626B\u521A\u521A\u7ED3\u675F","Check if swipe moved in a given direction.":"\u68C0\u6D4B\u8F7B\u626B\u662F\u5426\u671D\u6307\u5B9A\u65B9\u5411\u79FB\u52A8\u3002","Swipe moved in a direction (4-way movement)":"\u8F7B\u626B\u671D\u4E00\u4E2A\u65B9\u5411\u79FB\u52A8\uFF084\u5411\u79FB\u52A8\uFF09","Swipe moved in direction _PARAM1_":"\u8F7B\u626B\u671D_PARAM1_\u65B9\u5411\u79FB\u52A8","Swipe moved in a direction (8-way movement)":"\u8F7B\u626B\u671D\u4E00\u4E2A\u65B9\u5411\u79FB\u52A8\uFF088\u5411\u79FB\u52A8\uFF09","Text-to-Speech":"\u8BED\u97F3\u5408\u6210","An extension to enable the use of Text-to-Speech features.":"\u4E00\u4E2A\u6269\u5C55\uFF0C\u4F7F\u60A8\u80FD\u591F\u4F7F\u7528\u8BED\u97F3\u5408\u6210\u529F\u80FD\u3002","Audio":"\u97F3\u9891","Speaks a text message aloud through the system text-to-speech.":"\u901A\u8FC7\u7CFB\u7EDF\u6587\u672C\u5230\u8BED\u97F3\u529F\u80FD\u5927\u58F0\u6717\u8BFB\u6587\u672C\u6D88\u606F\u3002","Speak out a message":"\u6717\u8BFB\u6D88\u606F","Say _PARAM1_ with voice _PARAM2_, volume _PARAM3_%, rate _PARAM4_% and pitch _PARAM5_%":"\u4F7F\u7528\u58F0\u97F3_PARAM2_\u3001\u97F3\u91CF_PARAM3_%\u3001\u901F\u7387_PARAM4_%\u548C\u97F3\u8C03_PARAM5_%\u8BF4_PARAM1_","The message to be spoken":"\u8981\u6717\u8BFB\u7684\u6D88\u606F","The voice to be used":"\u8981\u4F7F\u7528\u7684\u58F0\u97F3","Voices vary depending on the operating system. \nHere is a list of windows voice names: https://bit.ly/windows-voices \nAnd here is a list of voice names for MacOS: https://bit.ly/mac-voices":"\u6839\u636E\u64CD\u4F5C\u7CFB\u7EDF\u800C\u53D8\u3002\u8FD9\u91CC\u662FWindows\u7CFB\u7EDF\u58F0\u97F3\u540D\u79F0\u5217\u8868\uFF1Ahttps://bit.ly/windows-voices \u548CMacOS\u7684\u58F0\u97F3\u540D\u79F0\u5217\u8868\uFF1Ahttps://bit.ly/mac-voices","Volume between 0% and 100%":"\u97F3\u91CF\u57280%\u548C100%\u4E4B\u95F4","Speed between 10% and 1000%":"\u901F\u5EA6\u572810%\u548C1000%\u4E4B\u95F4","Pitch between 0% and 200%":"\u97F3\u8C03\u57280%\u548C200%\u4E4B\u95F4","Forces all Text-to-Speech to be stopped.":"\u5F3A\u5236\u505C\u6B62\u6240\u6709\u6587\u672C\u5230\u8BED\u97F3\u3002","Force stop speaking":"\u5F3A\u5236\u505C\u6B62\u6717\u8BFB","Third person camera":"\u7B2C\u4E09\u4EBA\u79F0\u6444\u50CF\u673A","Move the camera to look at an object from a given distance.":"\u79FB\u52A8\u6444\u50CF\u673A\u4EE5\u4ECE\u7ED9\u5B9A\u8DDD\u79BB\u67E5\u770B\u5BF9\u8C61\u3002","Move the camera to look at a position from a distance.":"\u5C06\u6444\u50CF\u673A\u79FB\u52A8\u4EE5\u8FDC\u8DDD\u79BB\u67E5\u770B\u4F4D\u7F6E\u3002","Look at a position from a distance (deprecated)":"\u4ECE\u8FDC\u5904\u770B\u4F4D\u7F6E\uFF08\u5DF2\u5F03\u7528\uFF09","Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_\xB0 and an elevation of _PARAM5_\xB0":"\u5C06_PARAM6_\u7684\u6444\u50CF\u673A\u770B\u5411_PARAM1_;\u4EE5_PARAM3_\u50CF\u7D20\u4ECE_PARAM2_\u8FDC\u5904\uFF0C\u65CB\u8F6C_PARAM4_\xB0\uFF0C\u9AD8\u5EA6_PARAM5_\xB0","Position on X axis":"X\u8F74\u4E0A\u7684\u4F4D\u7F6E","Position on Y axis":"Y\u8F74\u4E0A\u7684\u4F4D\u7F6E","Rotation angle (around Z axis)":"\u65CB\u8F6C\u89D2\u5EA6\uFF08\u7ED5Z\u8F74\uFF09","Elevation angle (around Y axis)":"\u4FEF\u4EF0\u89D2\u5EA6\uFF08\u7ED5Y\u8F74\uFF09","Move the camera to look at an object from a distance.":"\u5C06\u6444\u50CF\u673A\u79FB\u52A8\u4EE5\u8FDC\u8DDD\u79BB\u67E5\u770B\u5BF9\u8C61\u3002","Look at an object from a distance (deprecated)":"\u4ECE\u8FDC\u5904\u770B\u5BF9\u8C61\uFF08\u5DF2\u5F03\u7528\uFF09","Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_\xB0 and an elevation of _PARAM4_\xB0":"\u5C06_PARAM5_\u7684\u6444\u50CF\u673A\u770B\u5411_PARAM1_\uFF0C\u4ECE_PARAM2_\u50CF\u7D20\uFF0C\u65CB\u8F6C_PARAM3_\xB0\uFF0C\u9AD8\u5EA6_PARAM4_\xB0","Look at a position from a distance":"\u4ECE\u8FDC\u5904\u770B\u4F4D\u7F6E","Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_\xB0 and an elevation of _PARAM6_\xB0":"\u5C06_PARAM7_\u7684\u6444\u50CF\u673A\u770B\u5411_PARAM1_; _PARAM2_; _PARAM3_\uFF0C\u4ECE_PARAM4_\u50CF\u7D20\uFF0C\u65CB\u8F6C_PARAM5_\xB0\uFF0C\u9AD8\u5EA6_PARAM6_\xB0","Position on Z axis":"Z\u8F74\u4E0A\u7684\u4F4D\u7F6E","Look at an object from a distance":"\u4ECE\u8FDC\u5904\u770B\u4E00\u4E2A\u5BF9\u8C61","Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_\xB0 and an elevation of _PARAM5_\xB0":"\u5C06_PARAM6_\u7684\u76F8\u673A\u79FB\u52A8\u5230_PARAM3_\u50CF\u7D20\u5904\u67E5\u770B_PARAM1_\uFF0C\u65CB\u8F6C_PARAM4_\xB0\u5E76\u4FEF\u89C6_PARAM5_\xB0","Smoothly follow an object at a distance.":"\u5E73\u6ED1\u5730\u8FFD\u968F\u4E00\u4E2A\u8DDD\u79BB\u5916\u7684\u5BF9\u8C61\u3002","Halfway time for rotation":"\u5BF9\u8C61\u65CB\u8F6C\u7684\u4E2D\u9014\u65F6\u95F4","Halfway time for elevation rotation":"\u9AD8\u5EA6\u65CB\u8F6C\u7684\u4E2D\u95F4\u65F6\u95F4","Only used by Z and ZY rotation modes":"\u4EC5\u7528\u4E8E Z \u548C ZY \u65CB\u8F6C\u6A21\u5F0F","Halfway time on Z axis":"Z\u8F74\u4E0A\u7684\u4E2D\u9014\u65F6\u95F4","Camera distance":"\u76F8\u673A\u8DDD\u79BB","Lateral distance offset":"\u6A2A\u5411\u8DDD\u79BB\u504F\u79FB","Ahead distance offset":"\u524D\u65B9\u8DDD\u79BB\u504F\u79FB","Z offset":"Z\u504F\u79FB","Rotation angle offset":"\u65CB\u8F6C\u89D2\u5EA6\u504F\u79FB","Elevation angle offset":"\u4EF0\u89D2\u504F\u79FB","Follow free area top border on Z axis":"\u5728Z\u8F74\u4E0A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u9876\u90E8\u8FB9\u6846","Follow free area bottom border on Z axis":"\u5728Z\u8F74\u4E0A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u5E95\u90E8\u8FB9\u6846","Automatically rotate the camera with the object":"\u81EA\u52A8\u65CB\u8F6C\u76F8\u673A\u4E0E\u5BF9\u8C61","Automatically rotate the camera with the object (elevation)":"Automatically rotate the camera with the object (elevation)","Best left unchecked, use the rotation mode instead":"\u6700\u597D\u4FDD\u6301\u672A\u9009\u4E2D\u72B6\u6001\uFF0C\u8BF7\u6539\u7528\u65CB\u8F6C\u6A21\u5F0F","Rotation mode":"\u65CB\u8F6C\u6A21\u5F0F","Targeted camera rotation angle":"\u76EE\u6807\u76F8\u673A\u65CB\u8F6C\u89D2\u5EA6","Forward X":"\u524D\u8FDB X","Forward Y":"\u524D\u8FDB Y","Forward Z":"\u524D\u8FDB Z","Lerp camera":"\u63D2\u503C\u6444\u50CF\u673A","Lerp the camera rotation to _PARAM0_ with a ratio of _PARAM2_ with rotation offset _PARAM3_\xB0 and elevation offset _PARAM4_\xB0":"\u5C06\u6444\u50CF\u673A\u65CB\u8F6C\u63D2\u503C\u5230 _PARAM0_\uFF0C\u6BD4\u7387\u4E3A _PARAM2_\uFF0C\u65CB\u8F6C\u504F\u79FB\u4E3A _PARAM3_\xB0\uFF0C\u9AD8\u5EA6\u504F\u79FB\u4E3A _PARAM4_\xB0","Move to object":"\u79FB\u52A8\u5230\u5BF9\u8C61","Change the camera position to _PARAM0_ with offset _PARAM2_, _PARAM3_, _PARAM4_":"\u5C06\u6444\u50CF\u673A\u4F4D\u7F6E\u66F4\u6539\u4E3A _PARAM0_\uFF0C\u504F\u79FB\u503C\u4E3A _PARAM2_\u3001_PARAM3_\u3001_PARAM4_","X offset":"X \u504F\u79FB","Y offset":"Y \u504F\u79FB","Update local basis":"\u66F4\u65B0\u672C\u5730\u57FA\u51C6","Update local basis of _PARAM0_ and the camera":"\u66F4\u65B0 _PARAM0_ \u548C\u6444\u50CF\u673A\u7684\u672C\u5730\u57FA\u51C6","Rotate the camera all the way to the targeted angle.":"\u5C06\u6444\u50CF\u673A\u5B8C\u5168\u65CB\u8F6C\u81F3\u76EE\u6807\u89D2\u5EA6\u3002","Rotate the camera all the way":"\u5C06\u6444\u50CF\u673A\u5B8C\u5168\u65CB\u8F6C","Rotate the camera all the way to the targeted angle of _PARAM0_":"\u5C06\u6444\u50CF\u673A\u5B8C\u5168\u65CB\u8F6C\u81F3\u76EE\u6807\u89D2\u5EA6_PARAM0_","the camera rotation.":"\u6444\u50CF\u673A\u65CB\u8F6C\u3002","Camera rotation":"\u6444\u50CF\u673A\u65CB\u8F6C","the camera rotation":"\u6444\u50CF\u673A\u65CB\u8F6C","the halfway time for rotation of the object.":"\u5BF9\u8C61\u65CB\u8F6C\u7684\u4E2D\u9014\u65F6\u95F4\u3002","the halfway time for rotation":"\u5BF9\u8C61\u65CB\u8F6C\u7684\u4E2D\u9014\u65F6\u95F4","the halfway time for elevation rotation of the object.":"the halfway time for elevation rotation of the object.","Halfway time for elevation rotation":"Halfway time for elevation rotation","the halfway time for elevation rotation":"the halfway time for elevation rotation","the halfway time on Z axis of the object.":"\u5BF9\u8C61\u7684Z\u8F74\u4E0A\u7684\u4E2D\u9014\u65F6\u95F4\u3002","the halfway time on Z axis":"\u5BF9\u8C61Z\u8F74\u4E0A\u7684\u4E2D\u9014\u65F6\u95F4","Return follow free area bottom border Z.":"\u8FD4\u56DE\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u5E95\u90E8\u8FB9\u754CZ\u3002","Free area Z min":"\u81EA\u7531\u533A\u57DFZ\u6700\u5C0F","Return follow free area top border Z.":"\u8FD4\u56DE\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u9876\u90E8\u8FB9\u754CZ\u3002","Free area Z max":"\u81EA\u7531\u533A\u57DFZ\u6700\u5927","the follow free area top border on Z axis of the object.":"\u5BF9\u8C61Z\u8F74\u4E0A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u9876\u90E8\u8FB9\u754C\u3002","the follow free area top border on Z axis":"\u5BF9\u8C61Z\u8F74\u4E0A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u9876\u90E8\u8FB9\u754C","the follow free area bottom border on Z axis of the object.":"\u5BF9\u8C61Z\u8F74\u4E0A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u5E95\u90E8\u8FB9\u754C\u3002","the follow free area bottom border on Z axis":"\u5BF9\u8C61Z\u8F74\u4E0A\u8DDF\u968F\u81EA\u7531\u533A\u57DF\u5E95\u90E8\u8FB9\u754C","the camera distance of the object.":"\u5BF9\u8C61\u7684\u6444\u50CF\u673A\u8DDD\u79BB","the camera distance":"\u6444\u50CF\u673A\u8DDD\u79BB","the lateral distance offset of the object.":"\u5BF9\u8C61\u7684\u6A2A\u5411\u8DDD\u79BB\u504F\u79FB","the lateral distance offset":"\u6A2A\u5411\u8DDD\u79BB\u504F\u79FB","the ahead distance offset of the object.":"\u5BF9\u8C61\u7684\u524D\u5411\u8DDD\u79BB\u504F\u79FB","the ahead distance offset":"\u524D\u5411\u8DDD\u79BB\u504F\u79FB","the z offset of the object.":"\u5BF9\u8C61\u7684z\u504F\u79FB\u91CF\u3002","the z offset":"z\u504F\u79FB\u91CF","the rotation angle offset of the object.":"\u5BF9\u8C61\u7684\u65CB\u8F6C\u89D2\u5EA6\u504F\u79FB\u91CF\u3002","the rotation angle offset":"\u65CB\u8F6C\u89D2\u5EA6\u504F\u79FB\u91CF","the elevation angle offset of the object.":"\u5BF9\u8C61\u7684\u4EF0\u89D2\u504F\u79FB\u91CF\u3002","the elevation angle offset":"\u4EF0\u89D2\u504F\u79FB\u91CF","the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.":"\u5BF9\u8C61\u7684\u76EE\u6807\u6444\u50CF\u673A\u65CB\u8F6C\u89D2\u5EA6\u3002\u8BBE\u7F6E\u6B64\u89D2\u5EA6\u65F6\uFF0C\u6444\u50CF\u673A\u4F1A\u8DDF\u968F\u8BE5\u503C\uFF0C\u800C\u4E0D\u662F\u5BF9\u8C61\u89D2\u5EA6\u3002","Targeted rotation angle":"\u76EE\u6807\u65CB\u8F6C\u89D2\u5EA6","the targeted camera rotation angle":"\u76EE\u6807\u6444\u50CF\u673A\u65CB\u8F6C\u89D2\u5EA6","3D-like Flip for 2D Sprites":"\u7528\u4E8E\u4E8C\u7EF4\u7CBE\u7075\u7684\u4E09\u7EF4\u7FFB\u8F6C\u6548\u679C","Flip sprites with a 3D-like rotation effect.":"\u4F7F\u7528\u7C7B\u4F3C\u4E09\u7EF4\u7684\u65CB\u8F6C\u6548\u679C\u7FFB\u8F6C\u7CBE\u7075\u3002","Flip a Sprite with a 3D effect.":"\u5E26\u6709\u4E09\u7EF4\u6548\u679C\u7684\u7CBE\u7075\u7FFB\u8F6C\u3002","3D Flip":"3D\u7FFB\u8F6C","Flipping method":"\u7FFB\u8F6C\u65B9\u6CD5","Front animation name":"\u6B63\u9762\u52A8\u753B\u540D\u79F0","Animation method":"\u52A8\u753B\u65B9\u6CD5","Back animation name":"\u80CC\u9762\u52A8\u753B\u540D\u79F0","Start a flipping animation on the object.":"\u5728\u5BF9\u8C61\u4E0A\u5F00\u59CB\u7FFB\u8F6C\u52A8\u753B\u3002","Flip the object (deprecated)":"\u7FFB\u8F6C\u5BF9\u8C61\uFF08\u5DF2\u5F03\u7528\uFF09","Flip _PARAM0_ over _PARAM2_ms":"\u5C06_PARAM0_\u5728_PARAM2_\u6BEB\u79D2\u5185\u7FFB\u8F6C","Duration (in milliseconds)":"\u6301\u7EED\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09","Start a flipping animation on the object. The X origin point must be set at the object center.":"\u5728\u5BF9\u8C61\u4E0A\u5F00\u59CB\u7FFB\u8F6C\u52A8\u753B\u3002X\u539F\u70B9\u5FC5\u987B\u8BBE\u7F6E\u5728\u5BF9\u8C61\u4E2D\u5FC3\u3002","Flip the object":"\u7FFB\u8F6C\u5BF9\u8C61","Flip _PARAM0_ over _PARAM2_ seconds":"\u5C06_PARAM0_\u5728_PARAM2_\u79D2\u5185\u7FFB\u8F6C","Jump to the end of the flipping animation.":"\u8DF3\u8F6C\u5230\u7FFB\u8F6C\u52A8\u753B\u7684\u7ED3\u675F\u3002","Jump to flipping end":"\u8DF3\u8F6C\u81F3\u7FFB\u8F6C\u7ED3\u675F","Jump to the end of _PARAM0_ flipping":"\u8DF3\u8F6C\u5230_PARAM0_\u7FFB\u8F6C\u7684\u7ED3\u675F","Checks if a flipping animation is currently playing.":"\u68C0\u67E5\u5F53\u524D\u662F\u5426\u6B63\u5728\u64AD\u653E\u7FFB\u8F6C\u52A8\u753B\u3002","Flipping is playing":"\u6B63\u5728\u64AD\u653E\u7FFB\u8F6C","_PARAM0_ is flipping":"_PARAM0_\u6B63\u5728\u7FFB\u8F6C","Checks if the object is flipped or will be flipped.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u88AB\u7FFB\u8F6C\u6216\u5C06\u88AB\u7FFB\u8F6C\u3002","Is flipped":"\u88AB\u7FFB\u8F6C","_PARAM0_ is flipped":"_PARAM0_ \u88AB\u7FFB\u8F6C","Flips the object to one specific side.":"\u5C06\u5BF9\u8C61\u7FFB\u8F6C\u5230\u6307\u5B9A\u4FA7\u9762\u3002","Flip to a side (deprecated)":"\u7FFB\u8F6C\u81F3\u4E00\u4FA7\uFF08\u5DF2\u5F03\u7528\uFF09","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ms":"\u5C06_PARAM0_ \u7FFB\u8F6C\u5230\u53CD\u9762\uFF1A\u5728_PARAM2_ \u6BEB\u79D2\u5185","Reverse side":"\u53CD\u9762","Flips the object to one specific side. The X origin point must be set at the object center.":"\u5C06\u5BF9\u8C61\u7FFB\u8F6C\u5230\u6307\u5B9A\u4E00\u4FA7\u3002X\u539F\u70B9\u5FC5\u987B\u8BBE\u7F6E\u5728\u5BF9\u8C61\u4E2D\u5FC3\u3002","Flip to a side":"\u7FFB\u8F6C\u81F3\u4E00\u4FA7","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ seconds":"\u5C06_PARAM0_\u7FFB\u8F6C\u5230\u53CD\u9762\uFF1A_PARAM2_\u5728_PARAM3_\u79D2\u5185","Visually flipped":"\u89C6\u89C9\u4E0A\u7FFB\u8F6C","_PARAM0_ is visually flipped":"_PARAM0_ \u5728\u89C6\u89C9\u4E0A\u7FFB\u8F6C","Flip visually":"\u76F4\u89C2\u5730\u7FFB\u8F6C","Flip visually _PARAM0_: _PARAM2_":"\u76F4\u89C2\u5730\u7FFB\u8F6C_PARAM0_\uFF1A_PARAM2_","Flipped":"\u5DF2\u7FFB\u8F6C","Resource bar (separated units)":"\u8D44\u6E90\u6761\uFF08\u5206\u5F00\u5355\u4F4D\uFF09","left anchor":"\u5DE6\u951A\u70B9","Left anchor":"\u5DE6\u951A","Left anchor of _PARAM1_":"_PARAM1_ \u7684\u5DE6\u951A","Anchor":"\u951A","Right anchor":"\u53F3\u951A\u70B9","Right anchor of _PARAM1_":"_PARAM1_ \u7684\u53F3\u951A\u70B9","Unit width":"\u5355\u4F4D\u5BBD\u5EA6","How much pixels to show for a value of 1.":"\u6BCF\u4E00\u4E2A\u503C\u663E\u793A\u591A\u5C11\u50CF\u7D20","the unit width of the object. How much pixels to show for a value of 1.":"\u5BF9\u8C61\u7684\u5355\u4F4D\u5BBD\u5EA6\u3002\u663E\u793A\u503C\u4E3A 1 \u65F6\u7684\u50CF\u7D20\u6570\u3002","the unit width":"\u5355\u4F4D\u5BBD\u5EA6","Update the bar width.":"\u66F4\u65B0\u6761\u5BBD\u5EA6\u3002","Bar width":"\u6761\u5BBD\u5EA6","Update the bar width of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u6761\u5F62\u5BBD\u5EA6","Time formatting":"\u65F6\u95F4\u683C\u5F0F\u5316","Converts seconds into standard time formats, such as HH:MM:SS.":"Converts seconds into standard time formats, such as HH:MM:SS.","Format time in seconds to HH:MM:SS.":"\u5C06\u79D2\u6570\u683C\u5F0F\u5316\u4E3AHH:MM:SS\u3002","Format time in seconds to HH:MM:SS":"\u5C06\u79D2\u6570\u683C\u5F0F\u5316\u4E3AHH:MM:SS","Format time _PARAM1_ to HH:MM:SS in _PARAM2_":"\u5C06_PARAM1_\u7684\u65F6\u95F4\u683C\u5F0F\u5316\u4E3AHH:MM:SS","Time, in seconds":"\u65F6\u95F4\uFF0C\u4EE5\u79D2\u8BA1","Format time in seconds to HH:MM:SS.000, including milliseconds.":"\u5C06\u79D2\u6570\u683C\u5F0F\u5316\u4E3AHH:MM:SS.000\uFF0C\u5305\u62EC\u6BEB\u79D2\u3002","Format time in seconds to HH:MM:SS.000":"\u5C06\u79D2\u6570\u683C\u5F0F\u5316\u4E3AHH:MM:SS.000","Timed Back and Forth Movement":"\u5B9A\u65F6\u6765\u56DE\u8FD0\u52A8","This behavior moves objects back and forth for a chosen time or distance, vertically or horizontally.":"\u6B64\u884C\u4E3A\u5C06\u5BF9\u8C61\u5782\u76F4\u6216\u6C34\u5E73\u5730\u6765\u56DE\u79FB\u52A8\u4E00\u6BB5\u65F6\u95F4\u6216\u8DDD\u79BB\u3002","Move an object (e.g. enemy) for a chosen time or distance, then flip it and start over.":"\u5728\u9009\u62E9\u7684\u65F6\u95F4\u6216\u8DDD\u79BB\u5185\u79FB\u52A8\u4E00\u4E2A\u5BF9\u8C61\uFF08\u4F8B\u5982\u654C\u4EBA\uFF09\uFF0C\u7136\u540E\u7FFB\u8F6C\u5E76\u91CD\u65B0\u5F00\u59CB\u3002","Move the object vertically (instead of horizontally)":"\u5782\u76F4\u79FB\u52A8\u7269\u4F53\uFF08\u800C\u4E0D\u662F\u6C34\u5E73\u79FB\u52A8\uFF09","Moving speed (in pixel/s)":"\u79FB\u52A8\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20/\u79D2\u4E3A\u5355\u4F4D\uFF09","Moving distance (in pixels)":"\u79FB\u52A8\u8DDD\u79BB\uFF08\u4EE5\u50CF\u7D20\u4E3A\u5355\u4F4D\uFF09","Moving maximum time (in seconds)":"\u79FB\u52A8\u6700\u5927\u65F6\u95F4\uFF08\u4EE5\u79D2\u4E3A\u5355\u4F4D\uFF09","Distance start point":"\u8DDD\u79BB\u8D77\u59CB\u70B9","position of the sprite at the previous frame":"\u4E0A\u4E00\u5E27\u4E2D\u7CBE\u7075\u7684\u4F4D\u7F6E","check that time has elapsed":"\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u8FC7\u4E86\u65F6\u95F4","Toggle switch (for Shape Painter)":"\u5207\u6362\u5F00\u5173\uFF08\u7528\u4E8E\u5F62\u72B6\u7ED8\u5236\u5668\uFF09","Use a shape-painter object to draw a toggle switch that users can click or touch.":"\u4F7F\u7528\u5F62\u72B6\u7ED8\u5236\u5668\u5BF9\u8C61\u7ED8\u5236\u7528\u6237\u53EF\u4EE5\u5355\u51FB\u6216\u89E6\u6478\u7684\u5207\u6362\u5F00\u5173\u3002","Radius of the thumb (px) Example: 10":"\u62C7\u6307\u7684\u534A\u5F84\uFF08\u50CF\u7D20\uFF09\u793A\u4F8B\uFF1A10","Active thumb color string. Example: 24;119;211":"\u6FC0\u6D3B\u62C7\u6307\u7684\u989C\u8272\u5B57\u7B26\u4E32\u3002\u793A\u4F8B\uFF1A24;119;211","Opacity of the thumb. Example: 255":"\u62C7\u6307\u7684\u4E0D\u900F\u660E\u5EA6\u3002\u793A\u4F8B\uFF1A255","Width of the track (pixels) Example: 20":"\u8F68\u9053\u7684\u5BBD\u5EA6\uFF08\u50CF\u7D20\uFF09\u793A\u4F8B\uFF1A20","Height of the track (pixels) Example: 14":"\u8F68\u9053\u7684\u9AD8\u5EA6\uFF08\u50CF\u7D20\uFF09\u793A\u4F8B\uFF1A14","Color string for the track that is RIGHT of the thumb. Example: 150;150;150 (Leave blank to use thumb color)":"\u8F68\u9053\u7684\u989C\u8272\u5B57\u7B26\u4E32\uFF0C\u4F4D\u4E8E\u62C7\u6307\u7684\u53F3\u4FA7\u3002\u793A\u4F8B\uFF1A150;150;150\uFF08\u5982\u679C\u7559\u7A7A\uFF0C\u5219\u4F7F\u7528\u62C7\u6307\u7684\u989C\u8272\uFF09","Opacity of the track that is RIGHT of the thumb. Example: 255":"\u8F68\u9053\u7684\u53F3\u4FA7\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u3002\u793A\u4F8B\uFF1A255","Color string for the track that is LEFT of the thumb. Example: 24;119;211 (Leave blank to use thumb color)":"\u8F68\u9053\u7684\u989C\u8272\u5B57\u7B26\u4E32\uFF0C\u4F4D\u4E8E\u62C7\u6307\u7684\u5DE6\u4FA7\u3002\u793A\u4F8B\uFF1A24;119;211\uFF08\u5982\u679C\u7559\u7A7A\uFF0C\u5219\u4F7F\u7528\u62C7\u6307\u7684\u989C\u8272\uFF09","Opacity of the track that is LEFT of the thumb. Example: 128":"\u8F68\u9053\u7684\u5DE6\u4FA7\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u3002\u793A\u4F8B\uFF1A128","Size of halo when the mouse hovers and clicks on the thumb. Example: 24":"\u9F20\u6807\u60AC\u505C\u5728\u62C7\u6307\u4E0A\u65F6\u7684\u5149\u6655\u5C3A\u5BF8\u3002\u793A\u4F8B\uFF1A24","Opacity of halo when the mouse hovers on the thumb. Example: 32":"\u9F20\u6807\u60AC\u505C\u5728\u62C7\u6307\u4E0A\u65F6\u7684\u5149\u6655\u4E0D\u900F\u660E\u5EA6\u3002\u793A\u4F8B\uFF1A32","Opacity of the halo that appears when the toggle switch is pressed. Example: 64":"\u5207\u6362\u5F00\u5173\u88AB\u6309\u4E0B\u65F6\u51FA\u73B0\u7684\u5149\u6655\u4E0D\u900F\u660E\u5EA6\u3002\u793A\u4F8B\uFF1A64","Number of pixels the thumb is from the left side of the track.":"\u62C7\u6307\u8DDD\u79BB\u8F68\u9053\u5DE6\u4FA7\u7684\u50CF\u7D20\u6570\u3002","Disabled":"\u5DF2\u7981\u7528","State has been changed (used in ToggleChecked function)":"\u72B6\u6001\u5DF2\u66F4\u6539\uFF08\u5728ToggleChecked\u51FD\u6570\u4E2D\u4F7F\u7528\uFF09","Inactive thumb color string. Example: 255;255;255":"\u975E\u6FC0\u6D3B\u62C7\u6307\u7684\u989C\u8272\u5B57\u7B26\u4E32\u3002\u793A\u4F8B\uFF1A255;255;255","Click or press has started on toggle switch":"\u5355\u51FB\u6216\u6309\u4E0B\u5F00\u5173\u5DF2\u542F\u52A8","Offset (Y) of shadow on thumb. Positive numbers move shadow down, negative numbers move shadow up. Example: 4":"\u62C7\u6307\u4E0A\u9634\u5F71\u7684\u504F\u79FB\u91CF\uFF08Y\uFF09\u3002\u6B63\u6570\u5411\u4E0B\u79FB\u52A8\u9634\u5F71\uFF0C\u8D1F\u6570\u5219\u5411\u4E0A\u3002\u793A\u4F8B\uFF1A4","Offset (X) of shadow on thumb. Positive numbers move shadow right, negative numbers move shadow left. Example: 0":"\u62C7\u6307\u9634\u5F71\u7684\u504F\u79FB(X)\u3002\u6B63\u6570\u5411\u53F3\u79FB\u52A8\u9634\u5F71\uFF0C\u8D1F\u6570\u5411\u5DE6\u79FB\u52A8\u9634\u5F71\u3002\u4F8B\u5982\uFF1A0","Opacity of shadow on thumb. Example: 32":"\u62C7\u6307\u9634\u5F71\u7684\u4E0D\u900F\u660E\u5EA6\u3002\u4F8B\u5982\uFF1A32","Need redraw":"\u9700\u8981\u91CD\u7ED8","Was hovered":"\u66FE\u7ECF\u60AC\u505C","Change the track width.":"\u66F4\u6539\u8F68\u9053\u5BBD\u5EA6\u3002","Change the track width of _PARAM0_ to _PARAM2_ pixels":"\u5C06_PARAM0_\u7684\u8F68\u9053\u5BBD\u5EA6\u66F4\u6539\u4E3A_PARAM2_\u50CF\u7D20","Change the track height.":"\u66F4\u6539\u8F68\u9053\u9AD8\u5EA6\u3002","Track height":"\u8F68\u9053\u9AD8\u5EA6","Change the track height of _PARAM0_ to _PARAM2_ pixels":"\u5C06_PARAM0_\u7684\u8F68\u9053\u9AD8\u5EA6\u66F4\u6539\u4E3A_PARAM2_\u50CF\u7D20","Change the thumb opacity.":"\u66F4\u6539\u62C7\u6307\u900F\u660E\u5EA6\u3002","Change the thumb opacity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u62C7\u6307\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Change the inactive track opacity.":"\u66F4\u6539\u975E\u6D3B\u52A8\u72B6\u6001\u8F68\u9053\u900F\u660E\u5EA6\u3002","Change the inactive track opacity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u975E\u6D3B\u52A8\u72B6\u6001\u8F68\u9053\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Change the active track opacity.":"\u66F4\u6539\u6D3B\u52A8\u72B6\u6001\u8F68\u9053\u900F\u660E\u5EA6\u3002","Change the active track opacity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6D3B\u52A8\u72B6\u6001\u8F68\u9053\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Change the halo opacity when the thumb is pressed.":"\u5F53\u6309\u4E0B\u62C7\u6307\u65F6\u66F4\u6539\u5149\u6655\u900F\u660E\u5EA6\u3002","Change the halo opacity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u5149\u6655\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Change opacity of the halo when the thumb is hovered.":"\u5F53\u62C7\u6307\u60AC\u505C\u65F6\u66F4\u6539\u5149\u6655\u900F\u660E\u5EA6\u3002","Change the offset on Y axis of the thumb shadow.":"\u66F4\u6539\u62C7\u6307\u9634\u5F71\u5728Y\u8F74\u4E0A\u7684\u504F\u79FB\u91CF\u3002","Thumb shadow offset on Y axis":"\u62C7\u6307\u9634\u5F71\u5728Y\u8F74\u4E0A\u7684\u504F\u79FB\u91CF","Change the offset on Y axis of the thumb shadow of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u62C7\u6307\u9634\u5F71\u5728Y\u8F74\u4E0A\u7684\u504F\u79FB\u91CF\u66F4\u6539\u4E3A_PARAM2_","Y offset (pixels)":"Y\u8F74\u504F\u79FB\u91CF\uFF08\u50CF\u7D20\uFF09","Change the offset on X axis of the thumb shadow.":"\u66F4\u6539\u62C7\u6307\u9634\u5F71\u5728X\u8F74\u4E0A\u7684\u504F\u79FB\u91CF\u3002","Thumb shadow offset on X axis":"\u62C7\u6307\u9634\u5F71\u5728X\u8F74\u4E0A\u7684\u504F\u79FB\u91CF","Change the offset on X axis of the thumb shadow of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u62C7\u6307\u9634\u5F71\u5728X\u8F74\u4E0A\u7684\u504F\u79FB\u91CF\u66F4\u6539\u4E3A_PARAM2_","X offset (pixels)":"X\u8F74\u504F\u79FB\u91CF\uFF08\u50CF\u7D20\uFF09","Change the thumb shadow opacity.":"\u66F4\u6539\u62C7\u6307\u9634\u5F71\u900F\u660E\u5EA6\u3002","Thumb shadow opacity":"\u62C7\u6307\u9634\u5F71\u900F\u660E\u5EA6","Change the thumb shadow opacity of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u62C7\u6307\u9634\u5F71\u900F\u660E\u5EA6\u66F4\u6539\u4E3A_PARAM2_","Opacity of shadow on thumb":"\u62C7\u6307\u9634\u5F71\u7684\u4E0D\u900F\u660E\u5EA6","Change the thumb radius.":"\u66F4\u6539\u62C7\u6307\u534A\u5F84\u3002","Thumb radius":"\u62C7\u6307\u534A\u5F84","Change the thumb radius of _PARAM0_ to _PARAM2_ pixels":"\u5C06_PARAM0_\u7684\u62C7\u6307\u534A\u5F84\u66F4\u6539\u4E3A_PARAM2_\u50CF\u7D20","Change the halo radius.":"\u66F4\u6539\u5149\u6655\u534A\u5F84\u3002","Change the halo radius of _PARAM0_ to _PARAM2_ pixels":"\u5C06_PARAM0_\u7684\u5149\u73AF\u534A\u5F84\u66F4\u6539\u4E3A_PARAM2_\u50CF\u7D20","Change the active track color (the part on the thumb left).":"\u66F4\u6539\u6D3B\u52A8\u8F68\u9053\u989C\u8272\uFF08\u62C7\u6307\u5DE6\u4FA7\u7684\u90E8\u5206\uFF09\u3002","Change the active track color of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u6D3B\u52A8\u8F68\u9053\u989C\u8272\u66F4\u6539\u4E3A_PARAM2_","Color of active track":"\u6D3B\u52A8\u8F68\u9053\u7684\u989C\u8272","Change the inactive track color (the part on the thumb right).":"\u66F4\u6539\u975E\u6D3B\u52A8\u8F68\u9053\u989C\u8272\uFF08\u62C7\u6307\u53F3\u4FA7\u7684\u90E8\u5206\uFF09\u3002","Change the inactive track color of _PARAM0_ to _PARAM2_":"\u5C06_PARAM0_\u7684\u975E\u6D3B\u52A8\u8F68\u9053\u989C\u8272\u66F4\u6539\u4E3A_PARAM2_","Color of inactive track":"\u975E\u6D3B\u52A8\u8F68\u9053\u7684\u989C\u8272","Change the thumb color (when unchecked).":"\u66F4\u6539\u62C7\u6307\u989C\u8272\uFF08\u672A\u9009\u4E2D\u65F6\uFF09\u3002","Thumb color (when unchecked)":"\u62C7\u6307\u989C\u8272\uFF08\u672A\u9009\u4E2D\u65F6\uFF09","Change the thumb color of _PARAM0_ (when unchecked) to _PARAM2_":"\u5C06_PARAM0_\u7684\u62C7\u6307\u989C\u8272\uFF08\u672A\u9009\u4E2D\u65F6\uFF09\u66F4\u6539\u4E3A_PARAM2_","Change the thumb color (when checked).":"\u66F4\u6539\u62C7\u6307\u989C\u8272\uFF08\u9009\u4E2D\u65F6\uFF09\u3002","Thumb color (when checked)":"\u62C7\u6307\u989C\u8272\uFF08\u9009\u4E2D\u65F6\uFF09","Change the thumb color of _PARAM0_ (when checked) to _PARAM2_":"\u5C06_PARAM0_\u7684\u62C7\u6307\u989C\u8272\uFF08\u9009\u4E2D\u65F6\uFF09\u66F4\u6539\u4E3A_PARAM2_","If checked, change to unchecked. If unchecked, change to checked.":"\u5982\u679C\u9009\u4E2D\uFF0C\u5219\u66F4\u6539\u4E3A\u672A\u9009\u4E2D\u3002\u5982\u679C\u672A\u9009\u4E2D\uFF0C\u5219\u66F4\u6539\u4E3A\u9009\u4E2D\u3002","Toggle the switch":"\u5207\u6362\u5F00\u5173","Change _PARAM0_ to opposite state (checked/unchecked)":"\u5C06_PARAM0_\u66F4\u6539\u4E3A\u76F8\u53CD\u72B6\u6001\uFF08\u9009\u4E2D/\u672A\u9009\u4E2D\uFF09","Disable (or enable) the toggle switch.":"\u7981\u7528\uFF08\u6216\u542F\u7528\uFF09\u5207\u6362\u5F00\u5173\u3002","Disable (or enable) the toggle switch":"\u7981\u7528\uFF08\u6216\u542F\u7528\uFF09\u5207\u6362\u5F00\u5173","Disable _PARAM0_: _PARAM2_":"\u7981\u7528_PARAM0_\uFF1A_PARAM2_","Check (or uncheck) the toggle switch":"\u9009\u4E2D\uFF08\u6216\u53D6\u6D88\u9009\u4E2D\uFF09\u5207\u6362\u5F00\u5173","Set _PARAM0_ to checked: _PARAM2_":"\u5C06_PARAM0_\u8BBE\u7F6E\u4E3A\u9009\u4E2D\uFF1A_PARAM2_","Check if mouse is hovering over toggle switch.":"\u68C0\u67E5\u9F20\u6807\u662F\u5426\u60AC\u505C\u5728\u5207\u6362\u5F00\u5173\u4E0A\u3002","Is mouse hovered over toggle switch?":"\u9F20\u6807\u662F\u5426\u60AC\u505C\u5728\u5207\u6362\u5F00\u5173\u4E0A\uFF1F","Mouse is hovering over _PARAM0_":"\u9F20\u6807\u662F\u5426\u60AC\u505C\u5728_PARAM0_\u4E0A","Track width.":"\u8F68\u9053\u5BBD\u5EA6\u3002","Track height.":"\u8F68\u9053\u9AD8\u5EA6\u3002","Offset (Y) of shadow on thumb.":"\u62C7\u6307\u4E0A\u9634\u5F71\u7684\u504F\u79FB\uFF08Y\uFF09\u3002","Offset (Y) of shadow on thumb":"\u62C7\u6307\u4E0A\u9634\u5F71\u7684\u504F\u79FB\uFF08Y\uFF09","Offset (X) of shadow on thumb.":"\u62C7\u6307\u4E0A\u9634\u5F71\u7684\u504F\u79FB\uFF08X\uFF09\u3002","Offset (X) of shadow on thumb":"\u62C7\u6307\u4E0A\u9634\u5F71\u7684\u504F\u79FB\uFF08X\uFF09","Opacity of shadow on thumb.":"\u62C7\u6307\u4E0A\u9634\u5F71\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Thumb opacity.":"\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u3002","Active track opacity.":"\u6D3B\u52A8\u8F68\u9053\u4E0D\u900F\u660E\u5EA6\u3002","Inactive track opacity.":"\u975E\u6D3B\u52A8\u8F68\u9053\u4E0D\u900F\u660E\u5EA6\u3002","Halo opacity (pressed).":"\u5149\u5708\u4E0D\u900F\u660E\u5EA6\uFF08\u5DF2\u6309\u4E0B\uFF09\u3002","Halo opacity (hover).":"\u5149\u5708\u4E0D\u900F\u660E\u5EA6\uFF08\u60AC\u505C\uFF09\u3002","Halo radius (pixels).":"\u5149\u5708\u534A\u5F84\uFF08\u50CF\u7D20\uFF09\u3002","Active track color.":"\u6D3B\u8DC3\u8F68\u9053\u989C\u8272\u3002","Inactive track color.":"\u975E\u6D3B\u8DC3\u8F68\u9053\u989C\u8272\u3002","Active thumb color.":"\u6D3B\u8DC3\u62C7\u6307\u989C\u8272\u3002","Active thumb color":"\u6D3B\u8DC3\u62C7\u6307\u989C\u8272","Check if the toggle switch is disabled.":"\u68C0\u67E5\u5207\u6362\u5F00\u5173\u662F\u5426\u5DF2\u7981\u7528\u3002","Is disabled":"\u5DF2\u7981\u7528","Inactive thumb color.":"\u975E\u6D3B\u8DC3\u62C7\u6307\u989C\u8272\u3002","Inactive thumb color":"\u975E\u6D3B\u8DC3\u62C7\u6307\u989C\u8272","Top-down movement animator":"Top-down movement animator","Change the animation according to the movement direction.":"Change the animation according to the movement direction.","Top-down movement":"Top-down movement","Scale animations according to speed":"Scale animations according to speed","Pause animations when objects stop":"Pause animations when objects stop","Animations must be called \"Walk0\", \"Walk1\"... for left, down...":"Animations must be called \"Walk0\", \"Walk1\"... for left, down...","Number of directions":"Number of directions","Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.":"Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.","Set to 90\xB0, \"Walk0\" becomes the animation for down.":"Set to 90\xB0, \"Walk0\" becomes the animation for down.","Update the animation according to the object direction.":"Update the animation according to the object direction.","Update animation":"Update animation","Update the animation of _PARAM0_":"Update the animation of _PARAM0_","the animation name of the object.":"the animation name of the object.","the animation name":"the animation name","Check if animations are paused when objects stop.":"Check if animations are paused when objects stop.","_PARAM0_ animations are paused when objects stop":"_PARAM0_ animations are paused when objects stop","Change whether animations are paused when objects stop.":"Change whether animations are paused when objects stop.","Pause animations of _PARAM0_ when stopped: _PARAM2_":"Pause animations of _PARAM0_ when stopped: _PARAM2_","IsPausingAnimation":"IsPausingAnimation","Check if animations are scaled according to speed.":"Check if animations are scaled according to speed.","_PARAM0_ animations are scaled according to speed":"_PARAM0_ animations are scaled according to speed","Change whether animations are scaled according to speed or not.":"Change whether animations are scaled according to speed or not.","Scale animations of _PARAM0_ according to speed: _PARAM2_":"Scale animations of _PARAM0_ according to speed: _PARAM2_","IsScalingAnimation":"IsScalingAnimation","Change the animation speed scale according to the object speed.":"Change the animation speed scale according to the object speed.","Animation speed scale":"Animation speed scale","Change the animation speed scale according to _PARAM0_ speed":"Change the animation speed scale according to _PARAM0_ speed","Pause the animation according to the object speed.":"Pause the animation according to the object speed.","Animation pause":"Animation pause","Pause the animation according to _PARAM0_ speed":"Pause the animation according to _PARAM0_ speed","Return the object movement direction.":"Return the object movement direction.","Return the difference between 2 directions.":"Return the difference between 2 directions.","Direction dirrerence":"Direction dirrerence","Other direction":"Other direction","Update the animation direction of the object.":"Update the animation direction of the object.","Update animation direction":"Update animation direction","Update the animation direction of _PARAM0_":"Update the animation direction of _PARAM0_","Update the animation name.":"Update the animation name.","Update animation name":"Update animation name","Update the animation name of _PARAM0_":"Update the animation name of _PARAM0_","Make object travel to random positions":"\u4F7F\u5BF9\u8C61\u79FB\u52A8\u5230\u968F\u673A\u4F4D\u7F6E","Make object travel to random positions (with the pathfinding behavior).":"\u4F7F\u5BF9\u8C61\u79FB\u52A8\u5230\u968F\u673A\u4F4D\u7F6E\uFF08\u4F7F\u7528\u8DEF\u5F84\u67E5\u627E\u884C\u4E3A\uFF09\u3002","Make object travel to a random position around the object current position. The movement is initiated only when the object is not moving already (its Pathfinding behavior speed is 0). Move towards a specified angle, if desired.":"\u4F7F\u7269\u4F53\u5728\u5176\u5F53\u524D\u4F4D\u7F6E\u5468\u56F4\u7684\u968F\u673A\u4F4D\u7F6E\u884C\u8FDB\u3002\u53EA\u6709\u5F53\u7269\u4F53\u5C1A\u672A\u79FB\u52A8\u65F6\uFF08\u5176\u8DEF\u5F84\u627E\u5BFB\u884C\u4E3A\u7684\u901F\u5EA6\u4E3A0\uFF09\u624D\u4F1A\u542F\u52A8\u79FB\u52A8\u3002\u6839\u636E\u9700\u8981\u671D\u5411\u6307\u5B9A\u7684\u89D2\u5EA6\u79FB\u52A8\u3002","Make object travel to a random position, with optional direction":"\u4F7F\u7269\u4F53\u79FB\u52A8\u5230\u968F\u673A\u4F4D\u7F6E\uFF0C\u53EF\u9009\u62E9\u65B9\u5411","Move _PARAM1_ to random positions, where each stop is at least _PARAM3_px and at most _PARAM4_px from the current position. Move towards angle _PARAM5_ with a bias of _PARAM6_":"\u5C06_PARAM1_\u79FB\u52A8\u5230\u968F\u673A\u4F4D\u7F6E\uFF0C\u6BCF\u6B21\u505C\u6B62\u65F6\u8DDD\u79BB\u5F53\u524D\u4F4D\u7F6E\u81F3\u5C11_PARAM3_px\uFF0C\u5E76\u4E14\u6700\u591A_PARAM4_px\u3002\u671D\u7740\u89D2\u5EA6_PARAM5_\u79FB\u52A8\uFF0C\u504F\u5411_PARAM6_","Object that will be travelling (must have Pathfinding behavior)":"\u5C06\u8981\u884C\u8FDB\u7684\u7269\u4F53\uFF08\u5FC5\u987B\u6709\u8DEF\u5F84\u627E\u5BFB\u884C\u4E3A\uFF09","Pathfinding Behavior (required)":"\u8DEF\u5F84\u627E\u5BFB\u884C\u4E3A\uFF08\u5FC5\u9700\uFF09","Minimum distance between each position (Default: 100px)":"\u6BCF\u4E2A\u4F4D\u7F6E\u4E4B\u95F4\u7684\u6700\u5C0F\u8DDD\u79BB\uFF08\u9ED8\u8BA4\uFF1A100px\uFF09","Maximum distance between each position (Default: 200px)":"\u6BCF\u4E2A\u4F4D\u7F6E\u4E4B\u95F4\u7684\u6700\u5927\u8DDD\u79BB\uFF08\u9ED8\u8BA4\uFF1A200px\uFF09","Direction (in degrees) the object will move towards (Range: 0-360)":"\u7269\u4F53\u5C06\u671D\u5411\u7684\u65B9\u5411\uFF08\u8303\u56F4\uFF1A0-360\xB0\uFF09","Direction bias (Range: 0-1)":"\u65B9\u5411\u504F\u5411\uFF08\u8303\u56F4\uFF1A0-1\uFF09","For example: \"0\" picks a completely random direction, \"0.5\" will select a direction within the half-circle that faces the specified direction, and \"1\" simply uses the specified direction.":"\u4F8B\u5982\uFF1A\u201C0\u201D\u9009\u62E9\u5B8C\u5168\u968F\u673A\u7684\u65B9\u5411\uFF0C\u201C0.5\u201D\u5C06\u9009\u62E9\u671D\u5411\u6307\u5B9A\u65B9\u5411\u7684\u534A\u5706\u5185\u7684\u65B9\u5411\uFF0C\u201C1\u201D\u76F4\u63A5\u4F7F\u7528\u6307\u5B9A\u65B9\u5411\u3002","Turret 2D movement":"\u70AE\u5854 2D \u79FB\u52A8","A turret movement with customizable speed, acceleration and stop angles.":"\u5E26\u6709\u53EF\u5B9A\u5236\u901F\u5EA6\u3001\u52A0\u901F\u5EA6\u548C\u505C\u6B62\u89D2\u5EA6\u7684\u70AE\u53F0\u79FB\u52A8\u3002","Turret movement":"\u70AE\u53F0\u79FB\u52A8","Maximum rotation speed (in degrees per second)":"\u6700\u5927\u65CB\u8F6C\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\u6570\uFF09","Maximum angle (use the same value for min and max to set no constraint)":"\u6700\u5927\u89D2\u5EA6\uFF08\u4F7F\u7528\u76F8\u540C\u7684\u6570\u503C\u4F5C\u4E3A\u6700\u5C0F\u503C\u548C\u6700\u5927\u503C\u4EE5\u672A\u52A0\u9650\u5236\uFF09","Minimum angle (use the same value for min and max to set no constraint)":"\u6700\u5C0F\u89D2\u5EA6\uFF08\u4F7F\u7528\u76F8\u540C\u7684\u6570\u503C\u4F5C\u4E3A\u6700\u5C0F\u503C\u548C\u6700\u5927\u503C\u4EE5\u672A\u52A0\u9650\u5236\uFF09","Aiming angle property":"\u7784\u51C6\u89D2\u5EA6\u5C5E\u6027","Must move clockwise":"\u5FC5\u987B\u987A\u65F6\u9488\u79FB\u52A8","Must move counter-clockwise":"\u5FC5\u987B\u9006\u65F6\u9488\u79FB\u52A8","Has moved":"\u5DF2\u79FB\u52A8","Target angle (MoveToward)":"\u76EE\u6807\u89D2\u5EA6\uFF08MoveToward\uFF09","Origin angle: the farest angle from AngleMin and AngleMax":"\u539F\u59CB\u89D2\u5EA6\uFF1A\u6700\u8FDC\u79BBAngleMin\u548CAngleMax\u7684\u89D2\u5EA6","Check if the turret is moving.":"\u68C0\u67E5\u70AE\u5854\u662F\u5426\u79FB\u52A8\u3002","Move clockwise.":"\u987A\u65F6\u9488\u79FB\u52A8\u3002","Move clockwise":"\u987A\u65F6\u9488\u79FB\u52A8","Move _PARAM0_ clockwise":"\u987A\u65F6\u9488\u79FB\u52A8_PARAM0_","Move counter-clockwise.":"\u9006\u65F6\u9488\u79FB\u52A8\u3002","Move counter-clockwise":"\u9006\u65F6\u9488\u79FB\u52A8","Move _PARAM0_ counter-clockwise":"\u9006\u65F6\u9488\u79FB\u52A8_PARAM0_","Set angle toward a position.":"\u671D\u5411\u67D0\u4F4D\u7F6E\u3002","Set aiming angle toward a position":"\u671D\u5411\u67D0\u4F4D\u7F6E\u7684\u7784\u51C6\u89D2\u5EA6","Set the aiming angle of _PARAM0_ toward _PARAM2_;_PARAM3_":"\u5C06_PARAM0_\u7684\u7784\u51C6\u89D2\u5EA6\u671D\u5411_PARAM2_;_PARAM3_","Move toward a position.":"\u671D\u5411\u67D0\u4F4D\u7F6E\u79FB\u52A8\u3002","Move _PARAM0_ toward _PARAM2_; _PARAM3_ within a _PARAM4_\xB0 margin":"\u5C06_PARAM0_\u671D\u5411_PARAM2_; _PARAM3_\u79FB\u52A8\uFF0C\u5728_PARAM4_\xB0\u8FB9\u7F18\u5185","Angle margin":"\u89D2\u5EA6\u8FB9\u7F18","Change the aiming angle.":"\u6539\u53D8\u7784\u51C6\u89D2\u5EA6\u3002","Aiming angle":"\u7784\u51C6\u89D2\u5EA6","Change the aiming angle of _PARAM0_ to _PARAM2_\xB0":"\u5C06_PARAM0_\u7684\u7784\u51C6\u89D2\u5EA6\u6539\u53D8\u4E3A_PARAM2_\xB0","Aiming angle (between 0\xB0 and 360\xB0 if no stop angle are set).":"\u7784\u51C6\u89D2\u5EA6\uFF08\u5982\u679C\u672A\u8BBE\u7F6E\u505C\u6B62\u89D2\u5EA6\uFF0C\u5219\u4E3A0\xB0\u81F3360\xB0\u4E4B\u95F4\uFF09\u3002","Tween into view":"\u79FB\u5165\u89C6\u56FE\u7684\u9010\u6E10\u663E\u793A","Tween objects into position from off screen.":"\u4ECE\u5C4F\u5E55\u5916\u5C06\u5BF9\u8C61\u79FB\u52A8\u5230\u4F4D\u7F6E\u3002","Motion":"\u8FD0\u52A8","Leave this value at 0 to move the object in from outside of the screen.":"\u5C06\u6B64\u503C\u4FDD\u7559\u4E3A 0 \u4EE5\u4F7F\u5BF9\u8C61\u4ECE\u5C4F\u5E55\u5916\u79FB\u52A8\u3002","Tween in the object at creation":"\u5728\u521B\u5EFA\u65F6\u79FB\u52A8\u5BF9\u8C61","Moving in easing":"\u79FB\u52A8\u65F6\u7684\u7F13\u52A8\u6548\u679C","Moving out easing":"\u79FB\u52A8\u65F6\u7684\u7F13\u51FA\u6548\u679C","Delete the object when the \"tween out of view\" action has finished":"\u5728\u201C\u79FB\u52A8\u51FA\u89C6\u56FE\u201D\u64CD\u4F5C\u5B8C\u6210\u540E\u5220\u9664\u5BF9\u8C61","Fade in/out the object":"\u6DE1\u5165/\u6DE1\u51FA\u5BF9\u8C61","The X position at the end of fade in":"\u6DE1\u5165\u7ED3\u675F\u65F6\u7684 X \u4F4D\u7F6E","The Y position at the end of fade in":"\u6DE1\u5165\u7ED3\u675F\u65F6\u7684 Y \u4F4D\u7F6E","Objects with opacity":"\u5177\u6709\u900F\u660E\u5EA6\u7684\u5BF9\u8C61","Move the object":"\u79FB\u52A8\u5BF9\u8C61","Delay":"\u5EF6\u8FDF","Fade in easing":"\u6DE1\u5165\u7684\u7F13\u52A8\u6548\u679C","Fade out easing":"\u6DE1\u51FA\u7684\u7F13\u52A8\u6548\u679C","The X position at the beginning of fade in":"\u6DE1\u5165\u5F00\u59CB\u65F6\u7684 X \u4F4D\u7F6E","The Y position at the beginning of fade in":"\u6DE1\u5165\u5F00\u59CB\u65F6\u7684 Y \u4F4D\u7F6E","Return the X position at the beginning of the fade-in.":"\u8FD4\u56DE\u6DE1\u5165\u5F00\u59CB\u65F6\u7684 X \u4F4D\u7F6E\u3002","Return the Y position at the beginning of the fade-in.":"\u8FD4\u56DE\u6DE1\u5165\u5F00\u59CB\u65F6\u7684 Y \u4F4D\u7F6E\u3002","Tween the object to its set starting position.":"\u5C06\u5BF9\u8C61\u7F13\u52A8\u5230\u5176\u8BBE\u7F6E\u7684\u8D77\u59CB\u4F4D\u7F6E\u3002","Tween _PARAM0_ into view":"\u5C06 _PARAM0_ \u7F13\u52A8\u5230\u89C6\u56FE\u4E2D","Tween the object to its off screen position.":"\u5C06\u5BF9\u8C61\u7F13\u52A8\u5230\u5176\u5C4F\u5E55\u5916\u4F4D\u7F6E\u3002","Tween out of view":"\u7F13\u52A8\u51FA\u89C6\u56FE","Tween _PARAM0_ out of view":"\u5C06 _PARAM0_ \u7F13\u52A8\u51FA\u89C6\u56FE","Check if the object finished tweening into view.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5B8C\u6210\u7F13\u52A8\u5165\u89C6\u56FE\u3002","Tweened into view":"\u7F13\u52A8\u5165\u89C6\u56FE","_PARAM0_ finished tweening into view":"_PARAM0_ \u5B8C\u6210\u7F13\u52A8\u5165\u89C6\u56FE","Check if the object finished tweened out of view.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u5B8C\u6210\u7F13\u52A8\u51FA\u89C6\u56FE\u3002","Tweened out of view":"\u7F13\u52A8\u51FA\u89C6\u56FE","_PARAM0_ finished tweening out of view":"_PARAM0_ \u5B8C\u6210\u7F13\u52A8\u51FA\u89C6\u56FE","Set whether to delete the object when the \"tween out of view\" action has finished.":"\u8BBE\u7F6E\u5728\u201C\u7F13\u52A8\u51FA\u89C6\u56FE\u201D\u64CD\u4F5C\u5B8C\u6210\u65F6\u662F\u5426\u5220\u9664\u5BF9\u8C61\u3002","Delete after tween out":"\u6DE1\u51FA\u540E\u5220\u9664","Should delete _PARAM0_ when the \"tween out of view\" action has finished: _PARAM2_":"\u5728\u201C\u7F13\u52A8\u51FA\u89C6\u56FE\u201D\u64CD\u4F5C\u5B8C\u6210\u65F6\u662F\u5426\u5E94\u5220\u9664 _PARAM0_: _PARAM2_","Should delete the object when the \"tween out of view\" action has finished":"\u5728\u201C\u7F13\u52A8\u51FA\u89C6\u56FE\u201D\u64CD\u4F5C\u5B8C\u6210\u65F6\u662F\u5426\u5E94\u5220\u9664\u5BF9\u8C61","Two choices dialog boxes":"\u4E24\u9009\u9879\u5BF9\u8BDD\u6846","A dialog box with buttons to let users make a choice.":"\u5E26\u6709\u6309\u94AE\u7684\u5BF9\u8BDD\u6846\uFF0C\u8BA9\u7528\u6237\u505A\u51FA\u9009\u62E9\u3002","A dialog box showing two options.":"\u663E\u793A\u4E24\u4E2A\u9009\u9879\u7684\u5BF9\u8BDD\u6846\u3002","Two choices dialog box":"\u4E24\u4E2A\u9009\u62E9\u5BF9\u8BDD\u6846","Cancel with Escape key":"\u4F7F\u7528Escape\u952E\u53D6\u6D88","Enable or disable the escape key to close the dialog.":"\u542F\u7528\u6216\u7981\u7528Escape\u952E\u4EE5\u5173\u95ED\u5BF9\u8BDD\u6846\u3002","Label for the \"Yes\" button":"\u201C\u662F\u201D\u6309\u94AE\u7684\u6807\u7B7E","This is the button with identifier 0.":"\u8FD9\u662F\u6807\u8BC6\u4E3A0\u7684\u6309\u94AE\u3002","Label for the \"No\" button":"\u201C\u5426\u201D\u6309\u94AE\u7684\u6807\u7B7E","This is the button with identifier 1.":"\u8FD9\u662F\u6807\u8BC6\u4E3A1\u7684\u6309\u94AE\u3002","Sound at hovering":"\u60AC\u505C\u65F6\u7684\u58F0\u97F3","Check if the \"Yes\" button of the dialog was selected.":"\u68C0\u67E5\u5BF9\u8BDD\u6846\u7684\"\u662F\"\u6309\u94AE\u662F\u5426\u5DF2\u9009\u62E9\u3002","\"Yes\" button is clicked":"\"\u662F\"\u6309\u94AE\u5DF2\u70B9\u51FB","\"Yes\" button of _PARAM0_ is clicked":"_PARAM0_\u7684\"\u662F\"\u6309\u94AE\u5DF2\u70B9\u51FB","Check if the \"No\" button of the dialog was selected.":"\u68C0\u67E5\u5BF9\u8BDD\u6846\u7684\"\u5426\"\u6309\u94AE\u662F\u5426\u5DF2\u9009\u62E9\u3002","\"No\" button is clicked":"\"\u5426\"\u6309\u94AE\u5DF2\u70B9\u51FB","\"No\" button of _PARAM0_ is clicked":"_PARAM0_\u7684\"\u5426\"\u6309\u94AE\u5DF2\u70B9\u51FB","the highlighted button.":"\u9AD8\u4EAE\u6309\u94AE\u3002","Highlighted button":"\u9AD8\u4EAE\u6309\u94AE","the highlighted button":"\u9AD8\u4EAE\u7684\u6309\u94AE","the text shown by the dialog.":"\u5BF9\u8BDD\u6846\u663E\u793A\u7684\u6587\u672C\u3002","Text message":"\u6587\u672C\u6D88\u606F","the text":"\u8BE5\u6587\u672C","Webpage URL tools (Web browser)":"\u7F51\u9875URL\u5DE5\u5177\uFF08Web\u6D4F\u89C8\u5668\uFF09","Allows to read URL where a web-game is hosted and manipulate URL strings.":"\u5141\u8BB8\u8BFB\u53D6\u6258\u7BA1\u7F51\u9875\u6E38\u620F\u7684 URL \u5E76\u64CD\u7EB5 URL \u5B57\u7B26\u4E32\u3002","Gets the URL of the current game page.":"\u83B7\u53D6\u5F53\u524D\u6E38\u620F\u9875\u9762\u7684URL\u3002","Get the URL of the web page":"\u83B7\u53D6\u7F51\u9875\u7684URL","Reloads the current web page.":"\u91CD\u65B0\u52A0\u8F7D\u5F53\u524D\u7F51\u9875\u3002","Reload the web page":"\u91CD\u65B0\u52A0\u8F7D\u7F51\u9875","Reload the current page":"\u91CD\u65B0\u52A0\u8F7D\u5F53\u524D\u9875\u9762","Loads another page in place of the current one.":"\u52A0\u8F7D\u66FF\u6362\u5F53\u524D\u9875\u9762\u7684\u53E6\u4E00\u4E2A\u9875\u9762\u3002","Redirect to another page":"\u91CD\u5B9A\u5411\u5230\u53E6\u4E00\u4E2A\u9875\u9762","Redirect to _PARAM1_":"\u91CD\u5B9A\u5411\u5230_PARAM1_","URL to redirect to":"\u91CD\u5B9A\u5411\u7684URL","Get an attribute from a URL.":"\u4ECEURL\u83B7\u53D6\u5C5E\u6027\u3002","Get URL attribute":"\u83B7\u53D6URL\u5C5E\u6027","The URL to get the attribute from":"\u8981\u83B7\u53D6\u5C5E\u6027\u7684URL","The attribute to get":"\u8981\u83B7\u53D6\u7684\u5C5E\u6027","Gets a parameter of a URL query string.":"\u83B7\u53D6URL\u67E5\u8BE2\u5B57\u7B26\u4E32\u7684\u53C2\u6570\u3002","Get a parameter of a URL query string":"\u83B7\u53D6URL\u67E5\u8BE2\u5B57\u7B26\u4E32\u7684\u53C2\u6570","The URL to get a query string parameter from":"\u8981\u83B7\u53D6\u67E5\u8BE2\u5B57\u7B26\u4E32\u53C2\u6570\u7684URL","The query string parameter to get":"\u8981\u83B7\u53D6\u7684\u67E5\u8BE2\u5B57\u7B26\u4E32\u53C2\u6570","Updates a specific part of a URL.":"\u66F4\u65B0URL\u7684\u7279\u5B9A\u90E8\u5206\u3002","Update a URL attribute":"\u66F4\u65B0URL\u5C5E\u6027","The URL to change":"\u8981\u66F4\u6539\u7684URL","The attribute to update":"\u8981\u66F4\u65B0\u7684\u5C5E\u6027","The new value of this attribute":"\u6B64\u5C5E\u6027\u7684\u65B0\u503C","Sets or replaces a query string parameter of a URL.":"\u8BBE\u7F6E\u6216\u66F4\u6362URL\u7684\u67E5\u8BE2\u5B57\u7B26\u4E32\u53C2\u6570\u3002","Change a get parameter of a URL":"\u66F4\u6539URL\u7684\u67E5\u8BE2\u53C2\u6570","The query string parameter to update":"\u8981\u66F4\u65B0\u7684\u67E5\u8BE2\u53C2\u6570","The new value of the query string parameter":"\u67E5\u8BE2\u5B57\u7B26\u4E32\u53C2\u6570\u7684\u65B0\u503C","Removes a query string parameter from an URL.":"\u4ECEURL\u5220\u9664\u67E5\u8BE2\u5B57\u7B26\u4E32\u53C2\u6570\u3002","Remove a get parameter of an URL":"\u4ECEURL\u5220\u9664\u67E5\u8BE2\u53C2\u6570","The query string parameter to remove":"\u8981\u5220\u9664\u7684\u67E5\u8BE2\u5B57\u7B26\u4E32\u53C2\u6570","Unique Identifiers":"\u552F\u4E00\u6807\u8BC6\u7B26","A collection of UID generation expressions.":"UID\u751F\u6210\u8868\u8FBE\u5F0F\u7684\u96C6\u5408\u3002","Generates a unique identifier with the UUIDv4 pattern.":"\u4F7F\u7528UUIDv4\u6A21\u5F0F\u751F\u6210\u552F\u4E00\u6807\u8BC6\u7B26\u3002","Generate a UUIDv4":"\u751F\u6210UUIDv4","Generates a unique identifier with the incremented integer pattern.":"\u4F7F\u7528\u9012\u589E\u6574\u6570\u6A21\u5F0F\u751F\u6210\u552F\u4E00\u6807\u8BC6\u7B26\u3002","Generate an incremented integer UID":"\u751F\u6210\u9012\u589E\u6574\u6570UID","Unicode":"Unicode","Provides conversion tools for Ascii and Unicode characters.":"\u4E3AAscii\u548CUnicode\u5B57\u7B26\u63D0\u4F9B\u8F6C\u6362\u5DE5\u5177\u3002","Reverses the unicode of a string with a base.":"\u4F7F\u7528\u57FA\u6570\u53CD\u8F6C\u5B57\u7B26\u4E32\u7684Unicode\u3002","Reverse the unicode of a string":"\u53CD\u8F6C\u5B57\u7B26\u4E32\u7684Unicode","String to reverse":"\u8981\u53CD\u8F6C\u7684\u5B57\u7B26\u4E32","Base of the reverse (Default: 2)":"\u53CD\u8F6C\u7684\u57FA\u6570\uFF08\u9ED8\u8BA4\u503C\uFF1A2\uFF09","Range of unicode characters (Put 16 here to support the most characters if you put 2 in the base)":"Unicode\u5B57\u7B26\u8303\u56F4\uFF08\u5982\u679C\u5728\u57FA\u6570\u4E2D\u653E2\uFF0C\u5219\u5728\u6B64\u5904\u653E16\u4EE5\u652F\u6301\u6700\u591A\u5B57\u7B26\uFF09","Converts a unicode representation into String with a base.":"\u5C06Unicode\u8868\u793A\u8F6C\u6362\u4E3A\u5E26\u6709\u57FA\u6570\u7684\u5B57\u7B26\u4E32\u3002","Unicode to string":"Unicode\u8F6C\u5B57\u7B26\u4E32","The unicode to convert to String":"\u8981\u8F6C\u6362\u4E3A\u5B57\u7B26\u4E32\u7684Unicode","Base":"\u57FA\u6570","Seperator text (Optional)":"\u5206\u9694\u6587\u672C\uFF08\u53EF\u9009\uFF09","Converts a string into unicode representation with a base.":"\u5C06\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u5177\u6709\u57FA\u6570\u7684Unicode\u8868\u793A\u3002","String to unicode conversion":"\u5B57\u7B26\u4E32\u5230Unicode\u7684\u8F6C\u6362","The string to convert to unicode":"\u8981\u8F6C\u6362\u4E3AUnicode\u7684\u5B57\u7B26\u4E32","Values of multiple objects":"\u591A\u4E2A\u5BF9\u8C61\u7684\u503C","Values of picked object instances (including position, size, force and angle).":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u503C\uFF08\u5305\u62EC\u4F4D\u7F6E\uFF0C\u5927\u5C0F\uFF0C\u529B\u548C\u89D2\u5EA6\uFF09\u3002","Minimum X position of picked object instances (using AABB of objects).":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684X\u4F4D\u7F6E\u7684\u6700\u5C0F\u503C\uFF08\u4F7F\u7528\u5BF9\u8C61\u7684AABB\uFF09\u3002","Minimum X position of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0FX\u4F4D\u7F6E","objects":"\u5BF9\u8C61","Maximum X position of picked object instances (using AABB of objects).":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927X\u4F4D\u7F6E\uFF08\u4F7F\u7528\u5BF9\u8C61\u7684AABB\uFF09\u3002","Maximum X position of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927X\u4F4D\u7F6E","Minimum Y position of picked object instances (using AABB of objects).":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0FY\u4F4D\u7F6E\uFF08\u4F7F\u7528\u5BF9\u8C61\u7684AABB\uFF09\u3002","Minimum Y position of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0FY\u4F4D\u7F6E","Maximum Y position of picked object instances (using AABB of objects).":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927Y\u4F4D\u7F6E\uFF08\u4F7F\u7528\u5BF9\u8C61\u7684AABB\uFF09\u3002","Maximum Y position of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927Y\u4F4D\u7F6E","Minimum Z order of picked object instances.":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0FZ\u987A\u5E8F\u3002","Minimum Z order of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0FZ\u987A\u5E8F","Maximum Z order of picked object instances.":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927Z\u987A\u5E8F\u3002","Maximum Z order of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927Z\u987A\u5E8F","Average Z order of picked object instances.":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747Z\u987A\u5E8F\u3002","Average Z order of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747Z\u987A\u5E8F","X center point (absolute) of picked object instances.":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684X\u4E2D\u5FC3\u70B9\uFF08\u7EDD\u5BF9\u503C\uFF09\u3002","X center point (absolute) of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684X\u4E2D\u5FC3\u70B9\uFF08\u7EDD\u5BF9\u503C\uFF09\u3002","Objects":"\u5BF9\u8C61","Objects that will be used to calculate their center point":"\u8981\u7528\u4E8E\u8BA1\u7B97\u5176\u4E2D\u5FC3\u70B9\u7684\u5BF9\u8C61","Y center point (absolute) of picked object instances.":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684Y\u4E2D\u5FC3\u70B9\uFF08\u7EDD\u5BF9\u503C\uFF09\u3002","Y center point (absolute) of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684Y\u4E2D\u5FC3\u70B9\uFF08\u7EDD\u5BF9\u503C\uFF09\u3002","X center point (average) of picked object instances.":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684X\u4E2D\u5FC3\u70B9\uFF08\u5E73\u5747\u503C\uFF09\u3002","X center point (average) of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684X\u4E2D\u5FC3\u70B9\uFF08\u5E73\u5747\u503C\uFF09\u3002","Y center point (average) of picked object instances.":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684Y\u4E2D\u5FC3\u70B9\uFF08\u5E73\u5747\u503C\uFF09\u3002","Y center point (average) of picked object instances":"\u9009\u5B9A\u5BF9\u8C61\u5B9E\u4F8B\u7684Y\u4E2D\u5FC3\u70B9\uFF08\u5E73\u5747\u503C\uFF09\u3002","Min object height of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0F\u5BF9\u8C61\u9AD8\u5EA6\u3002","Min object height of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0F\u5BF9\u8C61\u9AD8\u5EA6","Max object height of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927\u5BF9\u8C61\u9AD8\u5EA6\u3002","Max object height of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927\u5BF9\u8C61\u9AD8\u5EA6","Average height of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u9AD8\u5EA6\u3002","Average height of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u9AD8\u5EA6","Min object width of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0F\u5BF9\u8C61\u5BBD\u5EA6\u3002","Min object width of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5C0F\u5BF9\u8C61\u5BBD\u5EA6","Max object width of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927\u5BF9\u8C61\u5BBD\u5EA6\u3002","Max object width of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u6700\u5927\u5BF9\u8C61\u5BBD\u5EA6","Average width of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u5BBD\u5EA6\u3002","Average width of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u5BBD\u5EA6","Average horizontal force (X) of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u6C34\u5E73\u529B\uFF08X\uFF09\u3002","Average horizontal force (X) of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u6C34\u5E73\u529B\uFF08X\uFF09","Average vertical force (Y) of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u5782\u76F4\u529B\uFF08Y\uFF09\u3002","Average vertical force (Y) of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u5782\u76F4\u529B\uFF08Y\uFF09","Average angle of rotation of picked object instances.":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u65CB\u8F6C\u89D2\u5EA6\u3002","Average angle of rotation of picked object instances":"\u9009\u62E9\u7684\u5BF9\u8C61\u5B9E\u4F8B\u7684\u5E73\u5747\u65CB\u8F6C\u89D2\u5EA6","WebSocket client":"WebSocket\u5BA2\u6237\u7AEF","A WebSocket client for fast client-server networking.":"\u7528\u4E8E\u5FEB\u901F\u5BA2\u6237\u7AEF-\u670D\u52A1\u5668\u7F51\u7EDC\u7684WebSocket\u5BA2\u6237\u7AEF\u3002","Triggers if the client is currently connecting to the WebSocket server.":"\u5982\u679C\u5BA2\u6237\u7AEF\u5F53\u524D\u6B63\u5728\u8FDE\u63A5\u5230WebSocket\u670D\u52A1\u5668\uFF0C\u5219\u89E6\u53D1\u3002","Connecting to a server":"\u8FDE\u63A5\u5230\u670D\u52A1\u5668","Connecting to the server":"\u8FDE\u63A5\u5230\u670D\u52A1\u5668","Triggers if the client is connected to a WebSocket server.":"\u5982\u679C\u5BA2\u6237\u7AEF\u5DF2\u8FDE\u63A5\u5230WebSocket\u670D\u52A1\u5668\uFF0C\u5219\u89E6\u53D1\u3002","Connected to a server":"\u5DF2\u8FDE\u63A5\u5230\u670D\u52A1\u5668","Connected to the server":"\u5DF2\u8FDE\u63A5\u5230\u670D\u52A1\u5668","Triggers if the connection to a WebSocket server was closed.":"\u5982\u679C\u8FDE\u63A5\u5230WebSocket\u670D\u52A1\u5668\u88AB\u5173\u95ED\uFF0C\u5219\u89E6\u53D1\u3002","Connection to a server was closed":"\u8FDE\u63A5\u5230\u670D\u52A1\u5668\u7684\u8FDE\u63A5\u88AB\u5173\u95ED","Connection to the server closed":"\u8FDE\u63A5\u5230\u670D\u52A1\u5668\u7684\u8FDE\u63A5\u5173\u95ED","Connects to a WebSocket server.":"\u8FDE\u63A5\u5230WebSocket\u670D\u52A1\u5668\u3002","Connect to server":"\u8FDE\u63A5\u5230\u670D\u52A1\u5668","Connect to WebSocket server at _PARAM1_":"\u8FDE\u63A5\u5230WebSocket\u670D\u52A1\u5668\u5728_PARAM1_","The server address":"\u670D\u52A1\u5668\u5730\u5740","Disconnects from the current WebSocket server.":"\u65AD\u5F00\u4E0E\u5F53\u524DWebSocket\u670D\u52A1\u5668\u7684\u8FDE\u63A5\u3002","Disconnect from server":"\u4E0E\u670D\u52A1\u5668\u65AD\u5F00\u8FDE\u63A5","Disconnect from server (reason: _PARAM1_)":"\u4ECE\u670D\u52A1\u5668\u65AD\u5F00\u8FDE\u63A5\uFF08\u539F\u56E0\uFF1A_PARAM1_\uFF09","The reason for disconnection":"\u65AD\u5F00\u8FDE\u63A5\u7684\u539F\u56E0","Triggers when the server has sent the client some data.":"\u670D\u52A1\u5668\u53D1\u9001\u6570\u636E\u7ED9\u5BA2\u6237\u7AEF\u65F6\u89E6\u53D1\u3002","An event was received":"\u5DF2\u63A5\u6536\u5230\u4E00\u4E2A\u4E8B\u4EF6","Data received from server":"\u4ECE\u670D\u52A1\u5668\u63A5\u6536\u5230\u7684\u6570\u636E","Returns the piece of data from the server that is currently being processed.":"\u6B63\u5728\u5904\u7406\u670D\u52A1\u5668\u5F53\u524D\u6B63\u5728\u5904\u7406\u7684\u6570\u636E\u7247\u6BB5\u3002","Data from server":"\u6765\u81EA\u670D\u52A1\u5668\u7684\u6570\u636E","Dismisses an event after processing it to allow processing the next one without waiting for the next frame.":"\u5904\u7406\u5B8C\u4E00\u4E2A\u4E8B\u4EF6\u540E\uFF0C\u5141\u8BB8\u4E0D\u7B49\u5F85\u4E0B\u4E00\u5E27\u6765\u5904\u7406\u4E0B\u4E00\u4E2A\u4E8B\u4EF6\u3002","Mark as processed":"\u6807\u8BB0\u4E3A\u5DF2\u5904\u7406","Mark current event as completed":"\u5C06\u5F53\u524D\u4E8B\u4EF6\u6807\u8BB0\u4E3A\u5DF2\u5B8C\u6210","Sends a string to the server.":"\u5411\u670D\u52A1\u5668\u53D1\u9001\u4E00\u4E2A\u5B57\u7B26\u4E32\u3002","Send data to the server":"\u5411\u670D\u52A1\u5668\u53D1\u9001\u6570\u636E","Send _PARAM1_ to the server":"\u5C06 _PARAM1_ \u53D1\u9001\u5230\u670D\u52A1\u5668","The data to send to the server":"\u8981\u53D1\u9001\u5230\u670D\u52A1\u5668\u7684\u6570\u636E","Triggers when a WebSocket error has occurred.":"WebSocket \u53D1\u751F\u9519\u8BEF\u65F6\u89E6\u53D1\u3002","An error occurred":"\u53D1\u751F\u4E86\u4E00\u4E2A\u9519\u8BEF\u4E8B\u4EF6","WebSocket error has occurred":"WebSocket \u53D1\u751F\u9519\u8BEF","Gets the last error that occurred.":"\u83B7\u53D6\u4E0A\u6B21\u53D1\u751F\u7684\u9519\u8BEF\u3002","YSort":"YSort","Create an illusion of depth by setting the Z-order based on the Y position of the object. Useful for isometric games, 2D games with a \"Top-Down\" view, RPG...":"\u901A\u8FC7\u6839\u636E\u5BF9\u8C61\u7684Y\u4F4D\u7F6E\u8BBE\u7F6EZ\u987A\u5E8F\u521B\u5EFA\u6DF1\u5EA6\u7684\u9519\u89C9\u3002\u9002\u7528\u4E8E\u7B49\u89D2\u6E38\u620F\uFF0C\u5E26\u6709\u201C\u4FEF\u89C6\u201D\u89C6\u56FE\u76842D\u6E38\u620F\uFF0CRPG\u2026\u2026","Set the depth (Z-order) of the instance to the value of its Y position in the scene, creating an illusion of depth. The origin point of the object is used to determine the Z-order.":"\u5C06\u5B9E\u4F8B\u7684\u6DF1\u5EA6\uFF08Z \u8F74\u987A\u5E8F\uFF09\u8BBE\u7F6E\u4E3A\u573A\u666F\u4E2D\u5176 Y \u4F4D\u7F6E\u7684\u503C\uFF0C\u4ECE\u800C\u8425\u9020\u51FA\u6DF1\u5EA6\u6548\u679C\u3002\u5BF9\u8C61\u7684\u539F\u70B9\u7528\u4E8E\u786E\u5B9A Z \u8F74\u987A\u5E8F\u3002"}}; \ No newline at end of file +/* eslint-disable */module.exports={"languageData":{"plurals":function(n,ord){if(ord)return"other";return"other"}},"messages":{"Advanced HTTP":"高级HTTP","An extension to create HTTP requests with more advanced settings than the built-in \"Network request\" action, like specifying headers or bypassing CORS.":"使用该扩展创建HTTP请求,比内置的“网络请求”操作具有更高级的设置,如指定标头或绕过CORS。","Network":"网络","Creates a template for your request. All requests must be made from a request template.":"为您的请求创建一个模板。所有请求必须使用请求模板创建。","Create a new request template":"创建一个新的请求模板","Create request template _PARAM1_ with URL _PARAM2_":"使用 URL _PARAM2_ 创建请求模板 _PARAM1_。","New request template name":"新请求模板名称","URL the request will be sent to":"将要发送请求的 URL","Creates a new request template with all the attributes from an existing one.":"从现有请求模板创建一个新的请求模板,包含所有属性。","Copy a request template":"复制请求模板","Create request _PARAM1_ from template _PARAM2_":"从模板 _PARAM2_ 创建请求 _PARAM1_","Request to copy":"要复制的请求","The HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"请求的 HTTP 方法。如果不确定,使用 GET,这是默认值。","HTTP Method (Verb)":"HTTP 方法(动词)","Set HTTP method of request _PARAM1_ to _PARAM2_":"设置请求 _PARAM1_ 的 HTTP 方法为 _PARAM2_","Request template name":"请求模板名称","HTTP Method":"HTTP 方法","the HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"请求的 HTTP 方法。如果不确定,使用 GET,这是默认值。请求 REST API 端点可能会因使用的方法不同而产生不同效果。请参考调用的 API 的文档以了解要使用的适当方法。","HTTP method of request _PARAM1_":"请求 _PARAM1_ 的 HTTP 方法","Defines to what extent the results of the request is can/must be cached. When cached, instead of sending a request to the server, the browser will avoid making a real request to the server and will use a previous response given by the server for the same request.\nThe server also has a say in this via the Cache-Control header.":"定义请求结果缓存的程度。缓存后,浏览器将避免向服务器发送请求,并使用服务器先前为相同请求提供的上一个响应,而不是向服务器发出真实请求。服务器还可通过 Cache-Control 标头控制此行为。","HTTP Caching strategy":"HTTP 缓存战略","Set HTTP caching strategy of request _PARAM1_ to _PARAM2_":"设置请求 _PARAM1_ 的 HTTP 缓存策略为 _PARAM2_","Learn more about what each caching strategy does [on the MDN page for cache](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache).":"了解每种缓存策略的更多信息[在 MDN 的缓存页面] (https://developer.mozilla.org/zh-CN/docs/Web/API/Request/cache)。","HTTP Caching":"HTTP 缓存","HTTP caching strategy of request _PARAM1_":"请求 _PARAM1_ 的 HTTP 缓存策略","Sets the body of an HTTP request to a JSON representation of a structure variable.":"将 HTTP 请求的主体设置为结构变量的 JSON 表示。","Body as JSON":"主体作为 JSON","Set body of request _PARAM1_ to contents of _PARAM2_ as JSON":"将请求 _PARAM1_ 的主体设置为 _PARAM2_ 的内容作为 JSON","Variable with body contents":"包含主体内容的变量","Sets the body of an HTTP request to a form data representation of a structure variable.":"将 HTTP 请求的主体设置为结构变量的表单数据表示。","Body as form data":"作为表单数据的主体","Set body of request _PARAM1_ to contents of _PARAM2_ as form data":"将请求_PARAM1_的主体设置为_PARAM2_的内容,作为表单数据","the body of the HTTP request. Contains data to send to the server, ususally in plain text, JSON or FormData format. This cannot be set for GET requests.":"HTTP请求的主体。包含发送到服务器的数据,通常以纯文本、JSON或FormData格式。无法为GET请求设置此项。","Body":"主体","body of request _PARAM1_":"请求正文_PARAM1_","an HTTP header to be sent with the request.":"要随请求发送的HTTP标头。","Header":"标题","HTTP header _PARAM2_ of request _PARAM1_":"请求_PARAM1_的HTTP标头_PARAM2_","HTTP header name":"HTTP标头名称","the request template's target URL.":"请求模板的目标URL。","URL":"URL","the URL of request template _PARAM1_":"请求模板_PARAM1_的URL","CORS prevents most external websites from being queried with the browser's HTTP client, since the browser may be authenticated on that website and as such another website would be able to impersonate the player on that other website.\nWhen the CORS Bypass is enabled, the request will be made from a server that is not authenticated anywhere and as such is not blocked by CORS, and it will share the response with your game. Note that as such, authentication cookies are ignored! If you own the REST API you are requesting, add CORS headers to your server instead of using this CORS Bypass.":"CORS阻止浏览器的HTTP客户端查询大多数外部网站,因为浏览器可能在该网站上进行了身份验证,因此另一个网站将能够冒充该其他网站的玩家。\n启用CORS Bypass后,请求将来自未经身份验证的服务器,因此不会被CORS阻止,并且它将会与您的游戏共享响应。请注意,这样做会忽略身份验证cookie!如果您拥有所请求的REST API,请在服务器上添加CORS标头,而不使用此CORS Bypass。","Enable CORS Bypass":"启用CORS Bypass","Enable CORS Bypass for request _PARAM1_: _PARAM2_":"为请求_PARAM1_启用CORS Bypass:_PARAM2_","Enable the CORS Bypass?":"启用CORS Bypass?","The CORS Bypass server is offered for free by [arthuro555](https://twitter.com/arthuro555). Consider making a [donation](https://ko-fi.com/arthuro555) to help keep the CORS Bypass server running.":"CORS Bypass服务器由[arthuro555](https://twitter.com/arthuro555)免费提供。考虑捐赠以帮助保持CORS Bypass服务器运行。","Checks whether or not CORS Bypass has been enabled for the request template.":"检查请求模板是否启用了CORS Bypass。","CORS Bypass enabled":"CORS Bypass已启用","CORS Bypass is enabled for request _PARAM1_":"CORS Bypass已为请求_PARAM1_启用","Executes the request defined by a request template.":"执行由请求模板定义的请求。","Execute the request":"执行请求","Execute request _PARAM1_ and store results in _PARAM2_":"执行请求_PARAM1_并将结果存储在_PARAM2_","Request to execute":"要执行的请求","Variable where to store the response to the request":"用于存储对请求的响应的变量","Checks whether the server marked the response as a success (status code 1XX/2XX), not as a failure (status code 4XX/5XX).":"检查服务器是否将响应标记为成功(状态码1XX/2XX),而不是失败(状态码4XX/5XX)。","Success":"成功","Response _PARAM1_ indicates a success":"响应_PARAM1_表示成功","Variable containing the response":"包含响应的变量","the status code of the HTTP request (e.g. 200 if succeeded, 404 if not found, etc).":"HTTP请求的状态码(例如,如果成功则为200,如果未找到则为404等)。","Status code":"状态码","Status code of response _PARAM1_":"响应_PARAM1_的状态码","Gets the status text for a response. For example, for a response with the status code 404, the status text will be \"Not Found\".":"获取响应的状态文本。例如,对于状态码为404的响应,状态文本将为“未找到”。","Status text":"状态文本","one of the HTTP headers included in the server's response.":"服务器响应中包含的HTTP标头之一。","Header _PARAM2_ of response _PARAM1_":"响应_PARAM1_的标头_PARAM2_","Reads the body sent by the server, and store it as a string in a variable.":"读取服务器发送的正文,并将其存储为变量中的字符串。","Get response body (text)":"获取响应正文(文本)","Read body of response _PARAM1_ into _PARAM2_ as text":"将_PARAM1_响应的正文读入_PARAM2_为文本","Variable where to write the body contents into":"将正文内容写入的变量","Reads the body sent by the server, parses it as JSON and stores the resulting structure in a variable.":"读取服务器发送的正文,将其解析为JSON,并将得到的结构存储在变量中。","Get response body (JSON)":"获取响应正文(JSON)","Read body of response _PARAM1_ into _PARAM2_ as JSON":"将_PARAM1_响应的正文读入_PARAM2_为JSON","Advanced platformer movements":"高级平台动作","Let platformer characters: air jump, wall jump wall sliding, coyote time and dashing.":"允许平台角色:空中跳跃,墙跳,墙滑,狼狗时间和冲刺。","Movement":"运动","Let platformer characters jump shortly after leaving a platform and also jump in mid-air.":"允许平台角色在离开平台后不久跳跃,并在空中跳跃。","Coyote time and air jump":"Coyote时间和空中跳跃","Platformer character behavior":"平台角色行为","Coyote time duration":"Coyote时间持续时间","Coyote time":"Coyote时间","Can coyote jump":"可以进行Coyote跳","Was in the air":"曾在空中","Number of air jumps":"空中跳数量","Air jump":"空中跳","Floor jumps count as air jumps":"地板跳跃计入空中跳跃","Object":"对象","Behavior":"行为","Change the coyote time duration of an object (in seconds).":"更改对象的蜥狮时间持续时间(秒)。","Coyote timeframe":"蜥狮时间帧","Change coyote time of _PARAM0_: _PARAM2_ seconds":"更改_PARAM0_的狼狗时间:_PARAM2_秒","Duration":"持续时间","Coyote time duration in seconds.":"狼狗时间(以秒为单位)。","Check if a coyote jump can currently happen.":"检查当前是否可以进行狼狗跳跃。","_PARAM0_ can coyote jump":"_PARAM0_可以进行狼狗跳跃","Update WasInTheAir":"更新WasInTheAir","Update WasInTheAir property of _PARAM0_":"更新_PARAM0_的WasInTheAir属性","Number of jumps in mid-air that are allowed.":"允许在空中进行的跳跃次数。","Maximal jump number":"最大跳跃次数","Number of jumps in mid-air that are still allowed.":"仍然允许在空中进行的跳跃次数。","Remaining jump":"剩余跳跃次数","Change the number of times the character can jump in mid-air.":"更改字符在空中可以跳跃的次数。","Air jumps":"空中跳跃","Change the number of times _PARAM0_ can jump in mid-air: _PARAM2_":"更改_PARAM0_在空中可以跳跃的次数:_PARAM2_","Remove one of the remaining air jumps of a character.":"移除角色剩余的一个空中跳跃。","Remove a remaining air jump":"移除一个剩余空中跳跃。","Remove one of the remaining air jumps of _PARAM0_":"移除_PARAM0_剩余的一个空中跳跃。","Allow back all air jumps of a character.":"允许角色重新进行所有空中跳跃。","Reset air jumps":"重置空中跳跃","Allow back all air jumps of _PARAM0_":"允许_PARAM0_重新进行所有空中跳跃","Check if floor jumps are counted as air jumps for an object.":"检查对象的地面跳跃是否计为空中跳跃。","Floor jumps count as air jumps for _PARAM0_":"对象的地面跳跃计为_PARAM0_的空中跳跃","Let platformer characters jump and slide against walls.":"允许平台角色跳跃并沿墙滑动。","Wall jump":"墙跳","Platformer character configuration stack":"平台角色配置堆栈","Jump detection time frame":"跳跃检测时间帧","Side speed":"侧边速度","Side acceleration":"侧边加速度","Side speed sustain time":"侧速维持时间","Gravity":"重力","Wall sliding":"墙壁滑行","Maximum falling speed":"最大下落速度","Impact speed absorption":"冲击速度吸收","Minimal falling speed":"最小下落速度","Keep sliding without holding a key":"无需按键保持滑行","Check if the object has just wall jumped.":"检查对象是否刚刚进行了墙跳。","Has just wall jumped":"刚刚进行了墙跳","_PARAM0_ has just jumped from a wall":"_PARAM0_刚刚进行了从墙的跳跃","Check if the object is wall jumping.":"检查对象是否可以跳墙。","Is wall jumping":"是否在跳墙","_PARAM0_ jumped from a wall":"_PARAM0_ 从墙上跳下。","Check if the object is against a wall.":"检查对象是否在靠墙。","Against a wall":"靠墙","_PARAM0_ is against a wall":"_PARAM0_ 靠着墙。","Remember that the character was against a wall.":"记住角色曾经靠着墙。","Remember is against wall":"记住靠墙","_PARAM0_ remembers having been against a wall":"_PARAM0_ 记得曾经靠着墙。","Forget that the character was against a wall.":"忘记角色曾经靠着墙。","Forget is against wall":"忘记靠墙","_PARAM0_ forgets to had been against a wall":"_PARAM0_ 忘记曾靠着墙","Remember that the character was against a wall within the time frame.":"记得角色曾经在时间范围内靠着墙。","Was against wall":"在时间范围内靠墙","_PARAM0_ remembers to had been against a wall within _PARAM2_ seconds":"_PARAM0_ 记得角色在 _PARAM2_ 秒内靠着墙","Time frame":"时间范围","The time frame in seconds.":"时间范围(秒)。","Remember that the jump key was pressed.":"记住跳跃键被按下。","Remember key pressed":"记住按键已被按下","_PARAM0_ remembers the _PARAM2_ key was pressed":"_PARAM0_ 记得 _PARAM2_ 按键已被按下","Key":"密钥","Forget that the jump key was pressed.":"忘记跳跃键被按下。","Forget key pressed":"忘记按键已被按下","_PARAM0_ forgets the _PARAM2_ key was pressed":"_PARAM0_ 忘记 _PARAM2_ 按键已被按下","Check if the key was pressed within the time frame.":"检查按键是否在时间范围内被按下。","_PARAM0_ remembers _PARAM3_ key was pressed within _PARAM2_ seconds":"_PARAM0_ 记得 _PARAM3_ 按键在 _PARAM2_ 秒内被按下","Enable side speed.":"启用侧边速度。","Toggle side speed":"切换侧边速度","Enable side speed for _PARAM0_: _PARAM2_":"启用 _PARAM0_ 的侧边速度:_PARAM2_","Enable side speed":"启用侧边速度","Enable wall sliding.":"启用墙壁滑行。","Slide on wall":"在墙上滑动","Enable wall sliding for _PARAM0_: _PARAM2_":"启用 _PARAM0_ 的墙壁滑行:_PARAM2_","Enable wall sliding":"启用墙壁滑行","Absorb falling speed of an object.":"吸收对象的下落速度。","Absorb falling speed":"吸收下落速度","Absorb falling speed of _PARAM0_: _PARAM2_":"吸收 _PARAM0_ 的下落速度:_PARAM2_","Speed absorption (in pixels per second)":"每秒速度吸收量(以像素为单位)","The wall jump detection time frame of an object (in seconds).":"对象的墙壁跳跃检测时间范围(以秒为单位)。","Jump time frame":"跳跃时间范围","Change the wall jump detection time frame of _PARAM0_: _PARAM2_":"更改_OBJECT0_的墙壁跳跃检测时间范围: _PARAM2_","Change the wall jump detection time frame of an object (in seconds).":"更改对象的墙壁跳跃检测时间范围(以秒为单位)。","Jump detection time frame (in seconds)":"跳跃检测时间范围(以秒为单位)","The side speed of wall jumps of an object (in pixels per second).":"对象的墙壁跳跃侧速度(以像素为单位每秒)。","Change the side speed of wall jumps of _PARAM0_: _PARAM2_":"更改_OBJECT0_的墙壁跳跃侧速度: _PARAM2_","Change the side speed of wall jumps of an object (in pixels per second).":"更改对象的墙壁跳跃侧速度(以像素为单位每秒)。","The side acceleration of wall jumps of an object (in pixels per second per second).":"对象的墙壁跳跃侧加速度(以每秒每秒为单位的像素)。","Change the side acceleration of wall jumps of _PARAM0_: _PARAM2_":"更改_OBJECT0_的墙壁跳跃侧加速度: _PARAM2_","Change the side acceleration of wall jumps of an object (in pixels per second per second).":"更改对象的墙壁跳跃侧加速度(以每秒每秒为单位的像素)。","The wall sliding gravity of an object (in pixels per second per second).":"对象的墙壁滑动重力(以每秒每秒为单位的像素)。","Change the wall sliding gravity of _PARAM0_: _PARAM2_":"更改_OBJECT0_的墙壁滑动重力: _PARAM2_","Change the wall sliding gravity of an object (in pixels per second per second).":"更改对象的墙壁滑动重力(以每秒每秒为单位的像素)。","The wall sliding maximum falling speed of an object (in pixels per second).":"对象的墙壁滑动最大下落速度(以每秒为单位的像素)。","Change the wall sliding maximum falling speed of _PARAM0_: _PARAM2_":"更改_OBJECT0_的墙壁滑动最大下落速度: _PARAM2_","Change the wall sliding maximum falling speed of an object (in pixels per second).":"更改对象的墙壁滑动最大下落速度(以每秒为单位的像素)。","Change the impact speed absorption of an object.":"更改对象的冲击速度吸收量。","Change the impact speed absorption of _PARAM0_: _PARAM2_":"更改_OBJECT0_的冲击速度吸收量: _PARAM2_","Make platformer characters dash toward the floor.":"使平台角色朝地板冲刺。","Dive dash":"潜水冲刺","Initial falling speed":"初始下落速度","Simulate a press of dive key to make the object dives to the floor if it can dive.":"模拟按下潜水键,使对象潜入地板(如果可以潜水)。","Simulate dive key":"模拟潜水键","Simulate pressing dive key for _PARAM0_":"模拟为_OBJECT0_按下潜水键","Check if the object can dive.":"检查对象是否可以潜水。","Can dive":"可以潜水","_PARAM0_ can dive":"_OBJECT0_可以潜水","Check if the object is diving.":"检查对象是否潜水中。","Is diving":"正在潜水","_PARAM0_ is diving":"_OBJECT0_正在潜水","Make platformer characters dash horizontally.":"使平台角色水平冲刺。","Horizontal dash":"水平冲刺","Platformer charcacter configuration stack":"平台角色配置堆栈","Initial speed":"初始速度","Sustain minimum duration":"最小持续时间","Sustain":"维持","Sustain maxiumum duration":"最大持续时间","Sustain acceleration":"持续加速","Sustain maxiumum speed":"持续最大速度","Sustain gravity":"持续重力","Decceleration":"减速","Cool down duration":"冷却持续时间","Update the last direction used by the character.":"更新角色使用的最后一个方向。","Update last direction":"更新最后方向","Update last direction used by _PARAM0_":"更新_PARAM0_使用的最后方向","Simulate a press of dash key.":"模拟按下冲刺键。","Simulate dash key":"模拟冲刺键","Simulate pressing dash key for _PARAM0_":"模拟按下破折号键以获取_PARAM0_","Check if the object is dashing.":"检查对象是否在破折号状态。","Is dashing":"破折号状态","_PARAM0_ is dashing":"_PARAM0_正在破折号状态","Abort the current dash and set the object to its usual horizontal speed.":"中止当前的破折号状态并将对象设置为通常的水平速度。","Abort dash":"中止破折号","Abort the current dash of _PARAM0_":"中止_PARAM0_的当前破折号状态","Resolve conflict between platformer character configuration changes.":"解决平台角色配置更改之间的冲突。","Revert configuration changes for one identifier and update the character configuration to use the most recent ones.":"恢复一个标识符的配置更改,并更新角色配置以使用最近的更改。","Revert configuration":"恢复配置","Revert configuration changes: _PARAM2_ on _PARAM0_":"恢复_PARAM0_的_PARAM2_的配置更改","Configuration identifier":"配置标识符","Return the character property value when no change applies on it.":"在它上面没有应用更改时,返回角色属性值。","Setting":"设置","Configure the _PARAM2_ of _PARAM0_: _PARAM3_ with the identifier: _PARAM4_":"配置_PARAM2_的_PARAM0_:_PARAM3_,带有标识符:_PARAM4_","Return the usual maximum horizontal speed when no configuration change applies on it.":"当它上没有应用更改时,返回通常的最大水平速度。","Usual maximum horizontal speed":"通常的最大水平速度","Configure the maximum horizontal speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"配置_PARAM0_的最大水平速度:_PARAM2_,带有标识符:_PARAM3_","Configure a character property for a given configuration layer and move this layer on top.":"为给定的配置层配置角色属性,并将该层移动到顶部。","Configure setting":"配置设置","Setting value":"设置值","Configure character gravity for a given configuration layer and move this layer on top.":"为给定的配置层配置角色重力,并将该层移动到顶部。","Configure gravity":"配置重力","Configure the gravity of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"配置_PARAM0_的重力:_PARAM2_,带有标识符:_PARAM3_","Configure character deceleration for a given configuration layer and move this layer on top.":"为给定的配置层配置角色减速,并将该层移动到顶部。","Configure horizontal deceleration":"配置水平减速","Configure the horizontal deceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"配置_PARAM0_的水平减速:_PARAM2_,带有标识符:_PARAM3_","Acceleration":"加速度","Configure character maximum speed for a given configuration layer and move this layer on top.":"为给定的配置层配置角色最大速度,并将该层移动到顶部。","Configure maximum horizontal speed":"配置最大水平速度","Maximum horizontal speed":"最大水平速度","Configure character acceleration for a given configuration layer and move this layer on top.":"为给定的配置层配置角色加速度,并将该层移动到顶部。","Configure horizontal acceleration":"配置水平加速度","Configure the horizontal acceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"配置_PARAM0_的水平加速度:_PARAM2_,带有标识符:_PARAM3_","Configure character maximum falling speed for a given configuration layer and move this layer on top.":"为给定配置层配置字符最大下落速度,并将此层置于顶部。","Configure maximum falling speed":"配置最大下落速度","Configure the maximum falling speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"配置_PARAM0_的最大下落速度: _PARAM2_,使用标识符: _PARAM3_","Advanced movements for 3D physics characters":"3D 物理角色的高级动作","Let 3D physics characters: air jump, wall jump wall sliding, coyote time and dashing.":"让 3D 物理角色:空中跳跃,墙跳,墙滑,coyote 时间和冲刺。","Let 3D physics characters jump shortly after leaving a platform and also jump in mid-air.":"3D物理角色在离开平台后能够短暂跳跃,并且在空中跳跃。","Coyote time and air jump for 3D":"3D豺狼时间和空中跳跃","3D physics character":"3D物理角色","A Jump control was applied from a default control or simulated by an action.":"从默认控制或通过操作应用了跳跃控制。","Jump pressed or simulated":"跳跃按下或模拟","_PARAM0_ has the Jump key pressed or simulated":"_PARAM0_已按下或模拟了跳跃键","Advanced p2p event handling":"P2P 事件处理的高级","Allows handling all received P2P events at once instead of one per frame. It is more complex but also potentially more performant.":"允许一次处理所有接收到的 P2P 事件,而不是每帧处理一个。它更复杂,但也可能更高效。","Marks the event as handled, to go on to the next.":"将事件标记为已处理,以继续下一个。","Dismiss event":"解散事件","Dismiss event _PARAM1_ as handled":"解散事件_PARAM1_为已处理","The event to dismiss":"要解散的事件","Advanced projectile":"高级弹道","Control how a projectile moves including speed, acceleration, distance, and lifetime.":"控制弹道的移动速度、加速度、距离和寿命。","Control how a projectile object moves including lifetime, distance, speed, and acceleration.":"控制发射物对象的移动,包括寿命、距离、速度和加速度。","Lifetime":"寿命","Use \"0\" to ignore this property.":"使用\"0\"忽略此属性。","Max distance from starting position":"距离起始位置的最大距离","Max speed":"最大速度","Speed from object forces will not exceed this value. Use \"0\" to ignore this property.":"来自对象力的速度不会超过这个值。使用\"0\"来忽略此属性。","Speed from object forces will not go below this value. Use \"0\" to ignore this property.":"来自对象力的速度不会低于这个值。使用\"0\"来忽略此属性。","Negative acceleration can be used to stop a projectile.":"负加速度可以用于停止一个抛射体。","Starting speed":"起始速度","Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"对象将在创建时朝向的方向移动。使用\"0\"来忽略此属性。","Delete when lifetime is exceeded":"当超出寿命时删除","Delete when distance from starting position is exceeded":"当超出起始位置的距离时删除","Check if max distance from starting position has been exceeded (object will be deleted next frame).":"检查是否超过了距离起始位置的最大距离(对象将在下一帧被删除)。","Max distance from starting position has been exceeded":"已超过距离起始位置的最大距离","Max distance from starting position of _PARAM0_ has been exceeded":"_PARAM0_的距离从起始位置已经超过了最大距离","Check if lifetime has been exceeded (object will be deleted next frame).":"检查是否已经超过了寿命(对象将在下一帧被删除)。","Lifetime has been exceeded":"已超过寿命","Lifetime of _PARAM0_ has been exceeded":"_PARAM0_的寿命已经超过","the lifetime of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"对象的寿命。属性超过后,对象将被删除。使用\"0\"忽略此属性。","the lifetime":"寿命","Restart lifetime timer of object.":"重新启动对象的生存定时器。","Restart lifetime timer":"重新启动生存定时器","Restart lifetime timer of _PARAM0_":"重新启动_PARAM0_的生存定时器","the max distance from starting position of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"对象离起始位置的最大距离。属性超过后,对象将被删除。使用\"0\"忽略此属性。","the max distance from starting position":"离起始位置的最大距离","Change the starting position of object to it's current position.":"将对象的起始位置更改为其当前位置。","Change starting position to the current position":"将起始位置更改为当前位置","Change the starting position of _PARAM0_ to it's current position":"将_PARAM0_的起始位置更改为其当前位置","the max speed of the object. Object forces cannot exceed this value. Use \"0\" to ignore this property.":"对象的最大速度。对象的力不得超过此值。使用\"0\"忽略此属性。","the max speed":"最大速度","the minSpeed of the object. Object forces cannot go below this value. Use \"0\" to ignore this property.":"对象的最小速度。对象的力不得低于此值。使用\"0\"忽略此属性。","MinSpeed":"最小速度","the minSpeed":"最小速度","the acceleration of the object. Use a negative number to slow down.":"对象的加速度。使用负数来减速。","the acceleration":"加速度","the starting speed of the object. Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"对象的初始速度。对象被创建时沿着其面朝的方向移动。使用\"0\"忽略此属性。","the starting speed":"初始速度","Check if automatic deletion is enabled when lifetime is exceeded.":"检查是否在寿命超出时启用自动删除。","Automatic deletion is enabled when lifetime is exceeded":"在寿命超出时自动删除已启用","Automatic deletion is enabled when lifetime is exceeded on _PARAM0_":"当 _PARAM0_ 寿命超出时启用自动删除","Change automatic deletion of object when lifetime is exceeded.":"更改寿命超出时自动删除对象。","Change automatic deletion when lifetime is exceeded":"当寿命超出时更改自动删除","Enable automatic deletion of _PARAM0_ when lifetime is exceeded: _PARAM2_":"在寿命超出时启用自动删除 _PARAM0_ : _PARAM2_","DeleteWhenLifetimeExceeded":"DeleteWhenLifetimeExceeded","Check if automatic deletion is enabled when distance from starting position is exceeded.":"检查是否在距离起始位置超出时启用自动删除。","Automatic deletion is enabled when distance from starting position is exceeded":"在距离起始位置超出时自动删除已启用","Automatic deletion is enabled when distance from starting position is exceeded on _PARAM0_":"当 _PARAM0_ 距离起始位置超出时启用自动删除","Change automatic deletion when distance from starting position is exceeded.":"更改距离起始位置超出时自动删除对象。","Change automatic deletion when distance from starting position is exceeded":"当距离起始位置超出时更改自动删除","Enable automatic deletion of _PARAM0_ when distance from starting position is exceeded: _PARAM2_":"在距离起始位置超出时启用 _PARAM0_ 的自动删除:_PARAM2_","DeleteWhenDistanceExceeded":"DeleteWhenDistanceExceeded","Animated Back and Forth Movement":"往返动画","Make the object go on the left, then when some distance is reached, flip and go back to the right. Make sure that your object has two animations called \"GoLeft\" and \"TurnLeft\".":"使对象向左移动,然后达到一定距离时翻转并返回右侧。确保您的对象有两个名为\"GoLeft\"和\"TurnLeft\"的动画。","Animated Back and Forth (mirrored) Movement":"动画式前后(镜像)移动","Animatable capability":"可动画化功能","Flippable capability":"可翻转功能","Speed on X axis, in pixels per second":"X轴上的速度,每秒像素数","Distance traveled on X axis, in pixels":"X轴上的行进距离,以像素为单位","Array tools":"数组工具","A collection of utilities and tools for working with arrays.":"用于处理数组的实用工具和工具的集合。","General":"通用","The index of the first variable that equals to a specific number in an array.":"在数组中等于特定数字的第一个变量的索引。","Index of number":"数字的索引","The first index where _PARAM2_ can be found in _PARAM1_":"在_PARAM1_中找到_PARAM2_的第一个索引","Array to search the value in":"数组中搜索值","Number to search in the array":"在数组中搜索的数字","The index of the first variable that equals to a specific text in an array.":"在数组中等于特定文本的第一个变量的索引。","Index of text":"文本的索引","String to search in the array":"在数组中搜索的文本","The index of the last variable that equals to a specific number in an array.":"在数组中等于特定数字的最后一个变量的索引。","Last index of number":"数字的最后一个索引","The last index where _PARAM2_ can be found in _PARAM1_":"在_PARAM1_中找到_PARAM2_的最后一个索引","The index of the last variable that equals to a specific text in an array.":"在数组中等于特定文本的最后一个变量的索引。","Last index of text":"文本的最后一个索引","Returns a random number of an array of numbers.":"返回数字数组的随机数。","Random number in array":"数组中的随机数","A randomly picked number of _PARAM1_":"随机选择的 _PARAM1_ 个数字","Array to get a number from":"从中获取数字的数组","a random string of an array of strings.":"字符串数组的随机字符串。","Random string in array":"数组中的随机字符串","A randomly picked string of _PARAM1_":"随机选择的 _PARAM1_ 个字符串","Array to get a string from":"从中获取字符串的数组","Removes the last array child of an array, and return it as a number.":"移除数组的最后一个子元素,并将其作为数字返回。","Get and remove last variable from array (as number)":"获取并移除数组中的最后一个变量(作为数字)","Remove last child of _PARAM1_ and store it in _PARAM2_":"移除 _PARAM1_ 的最后一个子元素,并存储到 _PARAM2_ 中","Array to pop a child from":"从中弹出子元素的数组","Removes the last array child of an array, and return it as a string.":"移除数组的最后一个子元素,并将其作为字符串返回。","Pop string from array":"从数组中弹出字符串","Removes the first array child of an array, and return it as a number.":"移除数组的第一个子元素,并将其作为数字返回。","Shift number from array":"从数组中转移数字","Array to shift a child from":"数组中移除子元素","Removes the first array child of an array, and return it as a string.":"移除数组的第一个子元素,并将其作为字符串返回。","Shift string from array":"从数组中移除字符串","Checks if an array contains a specific number.":"检查数组是否包含特定数字。","Array has number":"数组包含数字","Array _PARAM1_ has number _PARAM2_":"数组 _PARAM1_ 包含数字 _PARAM2_","The number to search":"要搜索的数字","Checks if an array contains a specific string.":"检查数组是否包含特定字符串。","Array has string":"数组包含字符串","Array _PARAM1_ has string _PARAM2_":"数组 _PARAM1_ 包含字符串 _PARAM2_","The text to search":"要搜索的文本","Copies a portion of a scene array variable into a new scene array variable.":"将场景数组变量的一部分复制到新的场景数组变量中。","Slice an array":"切分数组","Slice array _PARAM1_ from indices _PARAM3_ to _PARAM4_ into _PARAM2_":"将数组 _PARAM1_ 从索引 _PARAM3_ 到 _PARAM4_ 切片成 _PARAM2_","The array to take a slice from":"要切片的数组","The array to store the slice into":"要存储切片的数组","The index to start the slice from":"切片开始的索引","The index to end the slice at":"切片结束的索引","Set to 0 to copy all of the array. If you use a negative value, the index will be selected beginning from the end. \nFor example, slicing an array with 5 elements from 0 to -1 would take only elements from indices 0 to 3.":"将其设置为0以复制数组的所有内容。如果使用负值,索引将从末尾开始选择。 \n例如,从索引0到-1对具有5个元素的数组进行切片将仅取索引0到3的元素。","Cuts a portion of an array off.":"从数组中切除一部分。","Splice an array":"剪切数组","Remove _PARAM3_ items from array _PARAM1_ starting from index _PARAM2_":"从索引_PARAM2_开始,从数组_PARAM1_中删除_PARAM3_项","The array to remove items from":"从中删除项目的数组","The index to start removing from":"开始删除的索引","If you use a negative value, the index will be selected beginning from the end.":"如果使用负值,索引将从末尾开始选择。","The amount of elements to remove":"要删除的元素数量","Set to 0 to remove until the end of the array.":"将其设置为0以删除到数组末尾。","Combines all elements of 2 scene arrays into one new scene array.":"将2个场景数组的所有元素合并为一个新的场景数组。","Combine 2 arrays":"结合2个数组","Combine array _PARAM1_ and _PARAM2_ into _PARAM3_":"将数组_PARAM1_和数组_PARAM2_合并为_PARAM3_","The first array":"第一个数组","The second array":"第二个数组","The variable to store the new array in":"要将新数组存储在的变量","Appends a copy of all variables of one array to another array.":"将一个数组的所有变量的副本附加到另一个数组。","Append all variable to another array":"将所有变量附加到另一个数组","Append all elements from array _PARAM1_ into _PARAM2_":"将数组_PARAM1_的所有元素附加到_PARAM2_","The array to get the variables from":"要从中获取变量的数组","The variable to append the variables in":"要附加变量的变量","Reverses children of an array. The first array child becomes the last, and the last array child becomes the first.":"颠倒数组的子项。第一个数组的子项变为最后一个,最后一个数组的子项变为第一个。","Reverse an array":"颠倒数组","Reverse array _PARAM1_":"颠倒数组_PARAM1_","The array to reverse":"要颠倒的数组","Fill an element with a number.":"使用数字填充元素。","Fill array with number":"用数字填充数组","Fill array _PARAM1_ with _PARAM2_ from index _PARAM3_ to index _PARAM4_":"从索引_PARAM3_填充数组_PARAM1_到索引_PARAM4_","The array to fill":"填充的数组","The number to fill":"填充的数字","The index to start filling from":"填充开始的索引","The index to stop filling at":"填充停止的索引","Set to 0 to fill until the end of the array.":"设置为0以填充到数组的末尾。","Shuffles all children of an array.":"随机洗牌数组的所有子项。","Shuffle array":"随机洗牌数组","Shuffle array _PARAM1_":"洗牌数组 _PARAM1_","The array to shuffle":"要随机洗牌的数组","Replaces all arrays inside of an array with their children. For example, [[1,2], [3,4]] becomes [1,2,3,4].":"用它们的子项替换数组内的所有数组。例如,[[1,2],[3,4]]变成[1,2,3,4]。","Flatten array":"展平数组","Flatten array _PARAM1_ (Deeply flatten: _PARAM2_)":"展开数组 _PARAM1_ (深度展平: _PARAM2_)","The array to flatten":"要展平的数组","Deeply flatten":"深度展平","If yes, will continue flattening until there is no arrays in the array anymore.":"移除数组的最后一个子项,并将其存储在另一个变量中。","Removes the last array child of an array, and stores it in another variable.":"从数组中删除最后一个子项,并将其存储在另一个变量中。","Pop array child":"弹出数组子项","The array to pop a child from":"从中弹出子项的数组","The variable to store the popped value into":"将弹出的值存储在变量中","Removes the first array child of an array, and stores it in another variable.":"移除数组的第一个子项,并将其存储在另一个变量中。","Shift array child":"移动数组子项","Remove first child of _PARAM1_ and store it in _PARAM2_":"删除_PARAM1_的第一个子项,并将其存储在_PARAM2_中","The array to shift a child from":"从中移动子项的数组","The variable to store the shifted value into":"将移动的值存储在变量中","Insert a variable at a specific index of an array.":"在数组的特定索引处插入一个变量。","Insert variable at":"插入变量","Insert variable _PARAM3_ in _PARAM1_ at index _PARAM2_":"在索引_PARAM2_中的_PARAM1_中插入变量_PARAM3_","The array to insert a variable in":"要插入变量的数组","The index to insert the variable at":"要插入变量的索引","The name of the variable to insert":"要插入的变量的名称","Split a string into an array of strings via a separator.":"通过分隔符将字符串拆分为字符串数组。","Split string into array":"通过分隔串_PARAM2_将_PARAM1_分割成数组","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM3_":"要拆分的字符串","The string to split":"要拆分的字符串","The separator to use to split the string":"用于拆分字符串的分隔符","For example, if you have a string \"Hello World\", and the separator is a space (\" \"), the resulting array would be [\"Hello\", \"World\"]. If the separator is an empty string (\"\"), it will make an element per character ([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]).":"例如,如果你有一个字符串\"Hello World\",并且分隔符是一个空格(\" \"),则结果数组将是[\"Hello\", \"World\"]。如果分隔符是一个空字符串(\"\"),它将使每个字符成为一个元素([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"])。","Array where to store the results":"用于存储结果的数组","Returns a string made from all strings in an array.":"返回由数组中所有字符串组成的字符串。","Join all elements of an array together into a string":"将数组中所有元素连接成一个字符串","The name of the array to join into a string":"要连接成字符串的数组的名称","Optional separator text between each element":"每个元素之间的可选分隔符文本","Get the sum of all numbers in an array.":"获取数组中所有数字的总和。","Sum of array children":"数组子项的总和","The array":"数组","Gets the smallest number in an array.":"获取数组中最小的数字。","Smallest value":"最小值","Gets the biggest number in an array.":"获取数组中最大的数字。","Biggest value":"最大值","Gets the average number in an array.":"获取数组中数字的平均值。","Average value":"平均值","Gets the median number in an array.":"获取数组中数字的中值。","Median value":"中位数","Sort an array of number from smallest to biggest.":"将数字数组从小到大排序。","Sort an array":"对数组进行排序","Sort array _PARAM1_":"对_PARAM1_进行排序","The array to sort":"要排序的数组","The first index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"_PARAM1_的_PARAM2_中可以找到的第一个索引","The object the variable is from":"变量所属的对象","The last index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"_PARAM1_的_PARAM2_中可以找到的最后一个索引","A randomly picked number of _PARAM2_ of _PARAM1_":"_PARAM1_的_PARAM2_个随机选择的数字","A randomly picked string of _PARAM2_ of _PARAM1_":"_PARAM1_的_PARAM2_个随机选择的字符串","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM3_":"删除_PARAM1_的_PARAM2_的最后一个子项,并将其存储在_PARAM3_中","Array _PARAM2_ of _PARAM1_ has number _PARAM3_":"在数组_PARAM1_的第_PARAM2_个有数字_PARAM3_","Array _PARAM2_ of _PARAM1_ has string _PARAM3_":"在数组_PARAM1_的第_PARAM2_个有字符串_PARAM3_","Slice array _PARAM2_ of _PARAM1_ from indices _PARAM5_ to _PARAM6_ into _PARAM4_ of _PARAM3_":"将数组_PARAM1_的第_PARAM2_个从第_PARAM5_到第_PARAM6_切片为数组_PARAM3_的第_PARAM4_","Remove _PARAM4_ items from array _PARAM2_ of _PARAM1_ starting from index _PARAM3_":"从数组_PARAM1_的第_PARAM2_从索引_PARAM3_开始移除_PARAM4_个项目","Combine array _PARAM2_ of _PARAM1_ and _PARAM4_ of _PARAM3_ into _PARAM6_ of _PARAM5_":"将数组_PARAM1_的第_PARAM2_和数组_PARAM3_的第_PARAM4_合并为数组_PARAM5_的第_PARAM6_","Append all elements from array _PARAM2_ of _PARAM1_ into _PARAM4_ of _PARAM3_":"将数组_PARAM1_的所有元素追加到数组_PARAM3_的第_PARAM4_","Reverse array _PARAM2_ of _PARAM1_":"反转数组_PARAM1_的第_PARAM2_","Fill array _PARAM2_ of _PARAM1_ with _PARAM3_ from index _PARAM4_ to index _PARAM5_":"在数组_PARAM1_中从索引_PARAM4_到索引_PARAM5_用_PARAM3_填充数组_PARAM2_","Shuffle array _PARAM2_ of _PARAM1_":"打乱数组_PARAM1_的第_PARAM2_","Flatten array _PARAM2_ of _PARAM1_ (Deeply flatten: _PARAM3_)":"展平数组_PARAM1_(深度展平:_PARAM3_)","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"从数组_PARAM1_的第_PARAM2_移除最后一个子项并存储到数组_PARAM3_的第_PARAM4_","Remove first child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"从数组_PARAM1_的第_PARAM2_移除第一个子项并存储到数组_PARAM3_的第_PARAM4_","Insert variable _PARAM5_ of _PARAM4_ in _PARAM2_ of _PARAM1_ at index _PARAM3_":"在_PARAM1_的_PARAM2_中的索引_PARAM3_处插入_PARAM4_的_PARAM5_变量","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM4_ of _PARAM3_":"通过分隔符_PARAM2_将字符串_PARAM1_分割成数组_PARAM3_的第_PARAM4_","Sort array _PARAM2_ of _PARAM1_":"对数组_PARAM1_的第_PARAM2_进行排序","Platforms Validation":"平台验证","Checks if the game is currently executed on an allowed platform (for web).":"检查游戏当前是否在允许的平台上执行(用于 web)。","Checks if the game is executed on an authorized platform (preferably, run this only once at beginning of the game).":"检查游戏是否在授权平台上执行(最好仅在游戏开始时运行一次)。","Is the game running on an authorized platform":"游戏是否在授权平台上运行","The game is running on a authorized platform":"游戏在授权平台上运行","Get the referrer's location (the domain of the website that hosts your game).":"获取引荐人位置(托管游戏的网站的域名)。","Get referrer location":"获取引荐人位置","Adds a new valid platform (domain name where the game is expected to be played, for example, gd.games).":"添加新的有效平台(游戏预期播放的域名,例如,gd.games)。","Add a valid platform":"添加有效平台","Add _PARAM1_ as valid platform":"添加_PARAM1_作为有效平台","Domain name (e.g : gd.games)":"域名(例如:gd.games)","Check if a domain is contained in the authorized list array.":"检查域名是否包含在授权列表数组中。","Check if a domain is contained in the authorized list":"检查域名是否包含在授权列表中","Check if _PARAM1_ is in the list of authorized platforms":"检查_PARAM1_是否在授权平台列表中","Domain to check":"域名检查","Auto typing animation for text (\"typewriter\" effect)":"文本的自动打字动画(\"打字机\"效果)","Reveal a text one letter after the other.":"一个接一个地逐个显示文本。","User interface":"用户界面","Auto typing text":"自动打字文本","Text capability":"文本能力","Time between characters":"字符之间的时间","Detect if a new text character was just displayed":"检测新的文本字符是否刚刚显示","Is next word wrapped":"下一个词是否换行","_PARAM0_ next word is wrapped":"_PARAM0_ 下一个词已换行","Clear forced line breaks":"清除强制换行","Clear forced line breaks in _PARAM0_":"清除 _PARAM0_ 中的强制换行","Check if the full text has been typed.":"检查是否已键入完整文本。","Finished typing":"完成键入","_PARAM0_ finished typing":"_PARAM0_ 完成键入","Check if a character has just been typed. Useful for triggering sound effects.":"检查是否刚刚键入一个字符。用于触发声音效果。","Has just typed":"刚刚已键入","_PARAM0_ has just typed a character":"_PARAM0_ 刚刚已键入一个字符","Restart typing from the beginning of text. The autotyping also start automatically when a new text is set for the object.":"重新键入文本开头。当为对象设置新文本时,自动开始 autotyping。","Restart typing from the beginning":"重新从开头键入","Restart typing from the beginning on _PARAM0_":"重新从 _PARAM0_ 的开头键入","Jump to a specific position in the text. Positions start at \"0\" and increase by one for every character.":"跳转到文本中的特定位置。位置从“0”开始,每个字符增加一个。","Show Nth first characters":"显示 N 个字符","Show _PARAM2_ first characters on _PARAM0_":"在 _PARAM0_ 上显示前 _PARAM2_ 个字符","Character position":"字符位置","Show the full text.":"显示完整文本。","Show the full text":"显示完整文本","Show the full text on _PARAM0_":"在_PARAM0_上显示完整文本","the time between characters beign typed.":"被打字字符之间的时间。","the time between characters":"字符之间的时间","Android back button":"安卓后退按钮","Allow to customize the behavior of the Android back button.":"允许自定义安卓后退按钮的行为。","Input":"输入","Triggers whenever the player presses the back button.":"每当玩家按下返回按钮时触发。","Back button is pressed":"按下返回按钮","This simulates the normal action of the back button. \nThis action will quit the app when in a mobile app, and go back to the previous page when in a web browser.":"这模拟了返回按钮的正常操作。\n此操作将在移动应用程序中退出应用程序,并在 Web 浏览器中返回到上一页。","Trigger back button":"触发返回按钮","Simulate back button press":"模拟返回按钮按下","Base conversion":"基数转换","Provides conversion expressions for numbers in different bases.":"提供不同进制数字的转换表达式。","Advanced":"高级","Converts a string representing a number in a different base to a decimal number.":"将表示不同进制的字符串转换为十进制数。","Convert to decimal":"转换为十进制","String representing a number":"表示数字的字符串","The base the number in the string is in":"字符串中数字的进制","Converts a number to a trsing representing it in another base.":"将数字转换为另一个进制中表示的字符串。","Convert to different base":"转换为不同的进制","Number to convert":"要转换的数字","The base to convert the number to":"要将数字转换为的基数","Platformer and top-down remapper":"平台游戏和顶部向下重映射器","Quickly remap keyboard controls.":"快速重映射键盘控制。","Remap keyboard controls of the top-down movement.":"重映射顶部向下运动的键盘控制。","Top-down keyboard remapper":"顶部向下键盘重映射器","Up key":"上按键","Left key":"左按键","Right key":"右按键","Down key":"下按键","Remaps Top-Down behavior controls to a custom control scheme.":"将上/下行为控件重新映射为自定义控制方案。","Remap Top-Down controls to a custom scheme":"将上/下行为控件重新映射为自定义方案","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_":"重新映射_PARAM0_的控件:上: _PARAM2_, 左: _PARAM3_, 下: _PARAM4_, 右: _PARAM5_","Remaps Top-Down behavior controls to a preset control scheme.":"将上/下行为控件重新映射为预设控制方案。","Remap Top-Down controls to a preset":"将上/下行为控件重新映射为预设","Remap controls of _PARAM0_ to preset _PARAM2_":"将_PARAM0_的控件重新映射到预设_PARAM2_","Preset name":"预设名称","Remap keyboard controls of the platformer character movement.":"重映射平台游戏角色移动的键盘控制。","Platformer keyboard mapper":"平台游戏键盘映射器","Jump key":"跳跃按键","Remaps Platformer behavior controls to a custom control scheme.":"将平台行为控件重新映射为自定义控制方案。","Remap Platformer controls to a custom scheme":"将平台行为控件重新映射为自定义方案","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_, Jump: _PARAM6_":"重新映射_PARAM0_的控件:上: _PARAM2_, 左: _PARAM3_, 下: _PARAM4_, 右: _PARAM5_, 跳跃: _PARAM6_","Remaps Platformer behavior controls to a preset control scheme.":"将平台行为控件重新映射为预设控制方案。","Remap Platformer controls to a preset":"将平台行为控件重新映射为预设","3D Billboard":"3D看板","Rotate 3D objects to appear like 2D sprites.":"将3D对象旋转以呈现2D精灵。","Visual effect":"视觉效果","Rotate to always face the camera (only the front face of the cube should be enabled).":"始终面向相机旋转(只允许启用方块的正面)。","Billboard":"广告牌","3D capability":"3D capability","Should rotate on X axis":"应该围绕X轴旋转","Should rotate on Y axis":"应该围绕Y轴旋转","Should rotate on Z axis":"应该围绕Z轴旋转","Offset position":"偏移位置","Rotate the object to the camera. This is also done automatically at the end of the scene events.":"将对象旋转到镜头。这也会在场景事件结束时自动完成。","Rotate to face the camera":"旋转以面向相机","Rotate _PARAM0_ to the camera":"将_PARAM0_旋转到相机","Check if the object should rotate on X axis.":"检查对象是否应在X轴上旋转。","_PARAM0_ should rotate on X axis":"_PARAM0_应在X轴上旋转","Change if the object should rotate on X axis.":"更改对象是否应在X轴上旋转。","_PARAM0_ should rotate on X axis: _PARAM2_":"_PARAM0_应在X轴上旋转:_PARAM2_","ShouldRotateX":"应在X轴上旋转","Check if the object should rotate on Y axis.":"检查对象是否应在Y轴上旋转。","_PARAM0_ should rotate on Y axis":"_PARAM0_应在Y轴上旋转","Change if the object should rotate on Y axis.":"更改对象是否应在Y轴上旋转。","_PARAM0_ should rotate on Y axis: _PARAM2_":"_PARAM0_应在Y轴上旋转:_PARAM2_","ShouldRotateY":"应在Y轴上旋转","Check if the object should rotate on Z axis.":"检查对象是否应在Z轴上旋转。","_PARAM0_ should rotate on Z axis":"_PARAM0_应在Z轴上旋转","Change if the object should rotate on Z axis.":"更改对象是否应在Z轴上旋转。","_PARAM0_ should rotate on Z axis: _PARAM2_":"_PARAM0_ 应该绕 Z 轴旋转:_PARAM2_","ShouldRotateZ":"应该旋转 Z 轴","Enable texture transparency of the front face.":"启用正面纹理的透明度。","Enable texture transparency":"启用纹理透明度","Enable texture transparency of _PARAM0_":"启用 _PARAM0_ 的纹理透明度","Boids movement":"Boids运动","Simulates flocks movement.":"模拟群集运动。","Define helper classes JavaScript code.":"定义辅助类JavaScript代码。","Define helper classes":"定义辅助类","Define helper classes JavaScript code":"定义辅助类JavaScript代码","Move as part of a flock.":"作为一个群体的一部分移动。","Boids Movement":"鸟群运动","Maximum speed":"最大速度","Maximum acceleration":"最大加速度","Rotate object":"旋转物体","Cohesion sight radius":"凝聚视角半径","Sight":"视线","Alignement sight radius":"对准视角半径","Separation sight radius":"分离视角半径","Cohesion decision weight":"聚合决策权重","Decision":"决定","Alignment decision weight":"对齐决策权重","Separation decision weight":"分离决策权重","Collision layer":"碰撞层","Intend to move in a given direction.":"打算朝着给定方向移动。","Move in a direction":"朝一个方向移动","_PARAM0_ intent to move in the direction _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ 打算朝 _PARAM2_ 方向移动;_PARAM3_(决策权重:_PARAM4_)","Direction X":"方向 X","Direction Y":"方向 Y","Decision weight":"决策权重","Intend to move toward a position.":"打算朝着一个位置移动。","Move toward a position":"朝一个位置移动","_PARAM0_ intend to move toward _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ 打算朝 _PARAM2_ 位置移动;_PARAM3_(决策权重:_PARAM4_)","Target X":"目标X","Target Y":"目标 Y","Intend to move toward an object.":"打算朝一个对象移动。","Move toward an object":"朝一个对象移动","_PARAM0_ intend to move toward _PARAM2_ (decision weight: _PARAM3_)":"_PARAM0_ 打算朝 _PARAM2_ 移动(决策权重:_PARAM3_)","Targeted object":"目标对象","Intend to avoid an area with a given center and radius.":"打算避开给定中心和半径的区域。","Avoid a position":"避开一个位置","_PARAM0_ intend to avoid a radius of _PARAM4_ around _PARAM2_; _PARAM3_ (decision weight: _PARAM5_)":"_PARAM0_ 打算避开 _PARAM2_ 周围的 _PARAM4_ 半径区域;_PARAM3_ (决策权重: _PARAM5_)","Center X":"中心 X","Center Y":"中心 Y","Radius":"半径","Intend to avoid an area from an object center and a given radius.":"打算避开一个对象中心和给定半径的区域。","Avoid an object":"避开一个对象","_PARAM0_ intend to avoid a radius of _PARAM3_ around _PARAM2_ (decision weight: _PARAM4_)":"_PARAM0_ 打算避开 _PARAM2_ 周围 _PARAM3_ 半径的区域(决策权重:_PARAM4_)","Avoided object":"避开的对象","Return the current speed.":"返回当前速度。","Speed":"速度","Return the current horizontal speed.":"返回当前水平速度。","Velocity X":"速度 X","Return the current vertical speed.":"返回当前垂直速度。","Velocity Y":"速度 Y","Check if the object is rotated while moving on its path.":"检查对象在路径上移动时是否旋转。","Object Rotated":"对象已旋转","_PARAM0_ is rotated when moving":"_PARAM0_在移动时旋转","Return the maximum speed.":"返回最大速度。","Change the maximum speed of the object.":"更改对象的最大速度。","Change the maximum speed of _PARAM0_ to _PARAM2_":"将_PARAM0_的最大速度更改为_PARAM2_","Max Speed":"最大速度","Return the maximum acceleration.":"返回最大加速度。","Change the maximum acceleration of the object.":"更改对象的最大加速度。","Change the maximum acceleration of _PARAM0_ to _PARAM2_":"将_PARAM0_的最大加速度更改为_PARAM2_","Steering Force":"转向力","Return the cohesion sight radius.":"返回内聚视距。","Change the cohesion sight radius.":"更改内聚视距。","Change the cohesion sight radius of _PARAM0_ to _PARAM2_":"将_PARAM0_的内聚视半径更改为_PARAM2_","Value":"数值","Return the alignment sight radius.":"返回对齐视距。","Alignment sight radius":"对齐视距","Change the alignment sight radius of _PARAM0_ to _PARAM2_":"将_PARAM0_的对齐视半径更改为_PARAM2_","Return the separation sight radius.":"返回分离视距。","Change the separation sight radius of _PARAM0_ to _PARAM2_":"将_PARAM0_的分离视半径更改为_PARAM2_","Return which weight the cohesion takes in the chosen direction.":"返回内聚以所选方向。","Cohesion weight":"内聚权重","Change the weight the cohesion takes in the chosen direction.":"更改内聚在所选方向的权重。","Change the cohesion weight of _PARAM0_ to _PARAM2_":"将_PARAM0_的内聚权重更改为_PARAM2_","Return which weight the alignment takes in the chosen direction.":"返回对齐在所选方向的权重。","Alignment weight":"对齐权重","Change the weight the alignment takes in the chosen direction.":"更改对齐在所选方向的权重。","Change the alignment weight of _PARAM0_ to _PARAM2_":"将_PARAM0_的对齐权重更改为_PARAM2_","Return which weight the separation takes in the chosen direction.":"返回分离在所选方向的权重。","Separation weight":"分离权重","Change the weight the separation takes in the chosen direction.":"更改分离在所选方向的权重。","Change the separation weight of _PARAM0_ to _PARAM2_":"将_PARAM0_的分离权重更改为_PARAM2_","Boomerang":"飞旋镖","Throw an object that returns to the thrower like a boomerang.":"投掷一个对象,像飞旋镖一样返回给投掷者。","Throw speed (pixels per second)":"抛出速度(每秒像素数)","Time before changing directions (seconds)":"改变方向之前的时间(秒)","Rotation (degrees per second)":"旋转(每秒度数)","Thrower X position":"投掷者X位置","Thrower Y position":"投掷者Y位置","Boomerang is returning":"回旋镖正在返回","Throw boomerang toward an angle.":"向角度扔飞镖。","Throw boomerang toward an angle":"朝角度扔飞镖","Throw boomerang _PARAM0_ toward angle _PARAM2_ degrees, speed of _PARAM3_ pixels per second, rotating _PARAM5_ degrees per second, and send boomerang back after of _PARAM4_ seconds":"向角度_PARAM2_度扔飞镖_PARAM0_,速度为_PARAM3_像素每秒,旋转速度为_PARAM5_度每秒,_PARAM4_秒后将飞镖发送回","Angle (degrees)":"角度(度)","Throw boomerang toward a position.":"向某个位置扔风镖。","Throw boomerang toward a position":"向某个位置扔风镖","Throw boomerang _PARAM0_ toward _PARAM2_;_PARAM3_ at a speed of _PARAM4_ pixels per second, rotating _PARAM6_ degrees per second, and send boomerang back after of _PARAM5_ seconds":"向_PARAM0_扔风镖,朝着_PARAM2_;_PARAM3_,速度为_PARAM4_像素每秒,旋转速度为_PARAM6_度每秒,并在_PARAM5_秒后发送风镖回来。","Target X position":"目标X位置","Target Y position":"目标Y位置","Send boomerang back to thrower.":"将风镖发回给投掷者。","Send boomerang back to thrower":"将风镖发回给投掷者","Send boomerang _PARAM0_ back to thrower":"将风镖_PARAM0_发回给投掷者","Set amount of time before boomerang changes directions (seconds).":"在风镖改变方向之前的时间(秒)。","Set amount of time before boomerang changes directions":"设置风镖改变方向之前的时间","Set amount of time before _PARAM0_ changes directions to _PARAM2_ (seconds)":"在_PARAM0_改变方向为_PARAM2_之前的时间(秒)","Time before boomerange changes direction (seconds)":"风镖改变方向之前的时间(秒)","Track position of boomerang thrower.":"追踪风镖投掷者的位置。","Track position of boomerang thrower":"追踪风镖投掷者的位置","Track position of thrower _PARAM2_ who threw boomerang _PARAM0_":"追踪投掷了风镖_PARAM0_的投掷者_PARAM2_的位置","Thrower":"投掷者","Boomerang is returning to thrower.":"风镖正在返回给投掷者。","Boomerang is returning to thrower":"风镖正在返回给投掷者","Boomerang _PARAM0_ is returning to thrower":"风镖_PARAM0_正在返回给投掷者","Bounce (using forces)":"弹跳(使用力)","Bounce the object off another object it just touched.":"将物体从刚触摸到的另一个物体上弹开。","Provides an action to make the object bounce from another object it just touched. Add a permanent force to the object and, when in collision with another one, use the action to make it bounce realistically.":"提供一种操作,使对象从刚刚触碰的另一个对象上弹回。向对象添加永久力,当与另一个对象碰撞时,使用操作使它实现逼真的弹跳。","Bounce":"弹跳","Bounce count":"弹跳次数","Number of times this object has bounced off another object":"这个对象弹开另一个对象的次数","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"将对象向其当前发生碰撞的对象弹开,根据对象施加的角度和速度的力量进行弹开。\n在启动此操作之前,请确保在两个对象之间进行碰撞测试。所有的力将会被从对象中移除,并且将添加一个新的永久力来使对象弹开。","Bounce off another object":"向另一个对象弹开","Bounce _PARAM0_ off _PARAM2_":"将_PARAM0_从_PARAM2_弹开","The objects to bounce on":"要弹开的对象","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be calculated *to go toward the specified angle (the \"normal angle\")*. For example, if the object is arriving at this exact angle, it will bounce in the opposite direction.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"将对象向其当前发生碰撞的对象弹开,根据对象施加的角度和速度的力量进行弹开。\n弹开将始终*根据指定的角度(“法线角度”)*进行计算。 例如,如果对象正好以这个角度到达,则将朝相反方向弹开。\n在启动此操作之前,请确保在两个对象之间进行碰撞测试。所有的力将会被从对象中移除,并且将添加一个新的永久力来使对象弹开。","Bounce off another object toward a specified angle":"向指定角度弹开另一个对象","Bounce _PARAM0_ off _PARAM2_ assuming a normal angle of _PARAM3_":"以正常角度 _PARAM3_ 弹跳 _PARAM0_ 从 _PARAM2_ 上","The \"normal\" angle, in degrees, to bounce against":"“正常”角度,以度为单位,弹出反弹","This can be understood at the direction that the bounce must go toward.":"这可以理解为弹跳必须去的方向。","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be vertical, like if the object is *colliding a perfectly horizontal obstacle* (like the top/bottom of the screen in a pong game). For example, if the object is arriving with an angle of exactly 90 degrees, it will bounce in the opposite direction: -90 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"根据物体上施加的角度和速度,使该物体弹开与其当前发生碰撞的另一个物体。\n弹跳将始终是垂直的,就像物体正在*与完全水平的障碍物*(如乒乓球游戏中的顶部/底部)发生碰撞。例如,如果物体以正好90度的角度到达,它将向相反方向弹回:-90度。\n确保在启动此操作之前测试两个物体之间的碰撞。所有力都将从物体上移除,然后将添加新的永久力以使物体弹开。","Bounce vertically":"垂直弹跳","Bounce _PARAM0_ off _PARAM2_ - always vertically":"以垂直方向弹跳 _PARAM0_ 从 _PARAM2_ 上","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be horizontal, like if the object is *colliding a perfectly vertical obstacle* (like paddles in a pong game). For example, if the object is arriving with an angle of exactly 0 degrees, it will bounce in the opposite direction: 180 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"根据物体上施加的角度和速度,使该物体弹开与其当前发生碰撞的另一个物体。\n弹跳将始终是水平的,就像物体正在*与完全垂直的障碍物*(如乒乓球游戏中的球拍)发生碰撞。例如,如果物体以正好0度的角度到达,它将向相反方向弹回:180度。\n确保在启动此操作之前测试两个物体之间的碰撞。所有力都将从物体上移除,然后将添加新的永久力以使物体弹开。","Bounce horizontally":"水平弹跳","Bounce _PARAM0_ off _PARAM2_ - always horizontally":"以水平方向弹跳 _PARAM0_ 从 _PARAM2_ 上","the number of times this object has bounced off another object.":"该物体弹起另一个物体的次数。","the bounce count":"弹跳计数","Button states and effects":"按钮状态和效果","Use any object as a button and change appearance according to user interactions.":"使用任何对象作为按钮,并根据用户交互改变外观。","Use objects as buttons.":"将对象用作按钮。","Button states":"按钮状态","Should check hovering":"应检查悬停","State":"状态","Touch id":"触摸 ID","Touch is inside":"触摸在内部","Mouse is inside":"鼠标在内部","Reset the state of the button.":"重置按钮的状态。","Reset state":"重设状态","Reset the button state of _PARAM0_":"重置 _PARAM0_ 的按钮状态","Check if the button is not used.":"检查按钮是否未使用。","Is idle":"空闲","_PARAM0_ is idle":"_PARAM0_ 处于空闲状态","Check if the button was just clicked.":"检查按钮是否刚被点击。","Is clicked":"已点击","_PARAM0_ is clicked":"_PARAM0_被单击","Check if the cursor is hovered over the button.":"检查光标是否悬停在按钮上。","Is hovered":"已悬停","_PARAM0_ is hovered":"_PARAM0_被悬停","Check if the button is either hovered or pressed but not hovered.":"检查按钮是否悬停或被按下但未悬停。","Is focused":"已聚焦","_PARAM0_ is focused":"_PARAM0_已聚焦","Check if the button is currently being pressed with mouse or touch.":"检查按钮当前是否使用鼠标或触摸被按下。","Is pressed":"已按下","_PARAM0_ is pressed":"_PARAM0_已按下","Check if the button is currently being pressed outside with mouse or touch.":"检查按钮当前是否使用鼠标或触摸被按下在外面。","Is held outside":"在外面保持","_PARAM0_ is held outside":"_PARAM0_在外面保持","the touch id that is using the button or 0 if none.":"正在使用按钮的触摸ID,如果没有则为0。","the touch id":"触摸ID","Enable effects on buttons based on their state.":"根据它们的状态在按钮上启用效果。","Button object effects":"按钮对象效果","Effect capability":"效果能力","Idle state effect":"待机状态效果","Effects":"效果","Focused state effect":"聚焦状态效果","The state is Focused when the button is hovered or held outside.":"当按钮在外部悬停或按住时,状态为聚焦。","Pressed state effect":"按下状态效果","the idle state effect of the object.":"对象的空闲状态效果。","the idle state effect":"空闲状态效果","the focused state effect of the object. The state is Focused when the button is hovered or held outside.":"对象的聚焦状态效果。当按钮被悬停或在外面保持时,状态为聚焦。","the focused state effect":"聚焦状态效果","the pressed state effect of the object.":"对象的按下状态效果。","the pressed state effect":"按下状态的效果","Change the animation of buttons according to their state.":"根据它们的状态更改按钮的动画。","Button animation":"按钮动画","Idle state animation name":"待机状态动画名称","Animation":"动画","Focused state animation name":"聚焦状态动画名称","Pressed state animation name":"按下状态动画名称","the idle state animation name of the object.":"对象的空闲状态动画名称。","the idle state animation name":"空闲状态动画名称","the focused state animation name of the object. The state is Focused when the button is hovered or held outside.":"对象的焦点状态动画名称。当按钮悬停或在外部按住时,该状态处于焦点状态。","the focused state animation name":"焦点状态动画名称","the pressed state animation name of the object.":"对象的按下状态动画名称。","the pressed state animation name":"按下状态动画名称","Smoothly change an effect on buttons according to their state.":"根据它们的状态在按钮上平滑更改效果。","Button object effect tween":"按钮对象效果过渡","Effect name":"效果名称","Effect":"效果","Effect parameter":"效果参数","The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"效果参数名称可在“显示参数名称”操作的下拉菜单中的效果选项卡中找到。","Idle effect parameter value":"空闲效果参数值","Focused effect parameter value":"焦点效果参数值","Pressed effect parameter value":"按下效果参数值","Fade-in easing":"淡入缓动","Fade-out easing":"淡出缓动","Fade-in duration":"淡入持续时间","Fade-out duration":"淡出持续时间","Disable the effect in idle state":"禁用空闲状态下的效果","Time delta":"时间增量","Fade in":"淡入","_PARAM0_ fade in to _PARAM2_":"_PARAM0_ 淡入至 _PARAM2_","Fade out":"淡出","_PARAM0_ fade out to _PARAM2_":"_PARAM0_ 淡出至 _PARAM2_","Play tween":"播放缓动效果","Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing":"对象 _PARAM0_ 的效果属性在 _PARAM2_ 秒内缓动,并带有 _PARAM3_ 缓和。","Duration (in seconds)":"持续时间(秒)","Easing":"缓动","the effect name of the object.":"对象的效果名称。","the effect name":"效果名称","the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"对象的效果参数。效果参数名称可以在效果选项卡中通过下拉菜单的“显示参数名称”操作中找到。","the effect parameter":"效果参数","Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"更改对象的效果参数。效果参数名称可以在效果选项卡中通过下拉菜单的“显示参数名称”操作中找到。","Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_":"将 _PARAM0_ 的缓动效果更改为 _PARAM2_,并使用参数 _PARAM3_。","Parameter name":"参数名称","the idle effect parameter value of the object.":"对象的空闲效果参数值。","the idle effect parameter value":"空闲效果参数值","the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.":"对象的焦点效果参数值。当按钮悬停或在外部按住时,该状态处于焦点状态。","the focused effect parameter value":"焦点效果参数值","the pressed effect parameter value of the object.":"对象的按下效果参数值。","the pressed effect parameter value":"按压效果参数值","the fade-in easing of the object.":"对象的淡入缓和。","the fade-in easing":"淡入缓和","the fade-out easing of the object.":"对象的淡出缓和。","the fade-out easing":"淡出缓和","the fade-in duration of the object.":"对象的淡入持续时间。","the fade-in duration":"淡入持续时间","the fade-out duration of the object.":"对象的淡出持续时间。","the fade-out duration":"淡出持续时间","Smoothly resize buttons according to their state.":"平稳调整按钮大小以适应它们的状态。","Button scale tween":"按钮缩放补间","Scalable capability":"可伸缩能力","Button states behavior (required)":"按钮状态行为(必填)","Tween behavior (required)":"补间行为(必填)","Idle state size scale":"空闲状态大小缩放","Size":"大小","Focused state size scale":"焦点状态大小缩放","Pressed state size scale":"按下状态大小缩放","the idle state size scale of the object.":"对象的空闲状态尺寸比例。","the idle state size scale":"空闲状态尺寸比例","the focused state size scale of the object. The state is Focused when the button is hovered or held outside.":"对象的聚焦状态尺寸比例。当按钮悬停或在外部按住时,状态为聚焦。","the focused state size scale":"聚焦状态尺寸比例","the pressed state size scale of the object.":"对象的按下状态尺寸比例。","the pressed state size scale":"按下状态尺寸比例","Smoothly change the color tint of buttons according to their state.":"平稳改变按钮的颜色色调以适应它们的状态。","Button color tint tween":"按钮颜色色调补间","Tween":"补间","Idle state color tint":"空闲状态颜色色调","Color":"颜色","Focused state color tint":"焦点状态颜色色调","Pressed state color tint":"按下状态颜色色调","the idle state color tint of the object.":"对象的空闲状态颜色色调。","the idle state color tint":"空闲状态颜色色调","the focused state color tint of the object. The state is Focused when the button is hovered or held outside.":"对象的聚焦状态颜色色调。当按钮悬停或在外部按住时,状态为聚焦。","the focused state color tint":"聚焦状态颜色色调","the pressed state color tint of the object.":"对象的按下状态颜色色调。","the pressed state color tint":"按下状态颜色色调","Camera impulse":"相机脉冲","Move the camera following an impulse trajectory.":"按脉冲轨迹移动相机。","Camera":"摄像机","Add an impulse to the camera position.":"为相机位置添加一个冲动。","Add a camera impulse":"添加相机冲动","Add an impulse _PARAM1_ to the camera from layer _PARAM2_ with an amplitude of _PARAM3_ and an angle of _PARAM4_, going away in _PARAM5_ seconds with _PARAM6_ easing, staying _PARAM7_ seconds, going back in _PARAM8_ seconds with _PARAM9_ easing":"从图层_PARAM2_向相机添加一个振动,振幅为_PARAM3_,角度为_PARAM4_,在_PARAM5_秒内带着_PARAM6_缓动消失,停留_PARAM7_秒,在_PARAM8_秒内带着_PARAM9_缓动返回","Identifier":"标识符","Layer":"层","Displacement X":"X轴位移","Displacement Y":"Y轴位移","Get away duration (in seconds)":"离开时间(秒)","Get away easing":"离开缓动","Stay duration (in seconds)":"停留时间(秒)","Get back duration (in seconds)":"返回时间(秒)","Get back easing":"返回缓动","Add a camera impulse (angle)":"添加相机冲动(角度)","Amplitude":"振幅","Angle (in degree)":"角度(度)","Check if a camera impulse is playing.":"检查相机是否正在播放冲动。","Camera impulse is playing":"相机冲动正在播放","Camera impulse _PARAM1_ is playing":"相机冲动_PARAM1_正在播放","Camera shake":"摄像机抖动","Shake layer cameras.":"摇动层摄像机。","Shake the camera on layers chosen with configuration actions.":"根据配置动作在选择的图层上抖动相机。","Shake camera":"抖动相机","Shake camera for _PARAM1_ seconds with _PARAM2_ seconds of easing to start and _PARAM3_ seconds to stop":"用_PARAM2_秒的缓动开始摇动相机,摇动_PARAM1_秒后,再用_PARAM3_秒的缓动结束","Ease duration to start (in seconds)":"开始缓动时间(秒)","Ease duration to stop (in seconds)":"结束缓动时间(秒)","Shake the camera on the specified layer, using one or more ways to shake (position, angle, zoom). This action is deprecated. Please use the other one with the same name.":"在指定图层上抖动相机,使用一种或多种方式抖动(位置、角度、缩放)。此动作已弃用。请使用名称相同的其他动作。","Shake camera (deprecated)":"抖动相机(已弃用)","Shake camera on _PARAM3_ layer for _PARAM5_ seconds. Use an amplitude of _PARAM1_px on X axis and _PARAM2_px on Y axis, angle rotation amplitude _PARAM6_ degrees, and zoom amplitude _PARAM7_ percent. Wait _PARAM8_ seconds between shakes. Keep shaking until stopped: _PARAM9_":"在 _PARAM5_ 秒内在 _PARAM3_ 层上摇动相机。 在X轴上使用 _PARAM1_px 的振幅,在Y轴上使用 _PARAM2_px 的振幅,角度旋转振幅为 _PARAM6_ 度,缩放振幅为 _PARAM7_ %。 在摇动之间等待 _PARAM8_ 秒。 持续摇动直到停止:_PARAM9_","Amplitude of shaking on the X axis (in pixels)":"在X轴上摇动的幅度(以像素为单位)","Amplitude of shaking on the Y axis (in pixels)":"在Y轴上摇动的幅度(以像素为单位)","Layer (base layer if empty)":"(如果为空,则为基础层)的层","Camera index (Default: 0)":"相机索引(默认值:0)","Duration (in seconds) (Default: 0.5)":"持续时间(秒)(默认值:0.5)","Angle rotation amplitude (in degrees) (For example: 2)":"角度旋转振幅(度)(例如:2)","Zoom factor amplitude":"缩放振幅","Period between shakes (in seconds) (Default: 0.08)":"摇动之间的周期(秒)(默认值:0.08)","Keep shaking until stopped":"持续摇动直到停止","Duration value will be ignored":"持续时间值将被忽略","Start shaking the camera indefinitely.":"无限期开始摇动相机。","Start camera shaking":"开始摇动相机","Start shaking the camera with _PARAM1_ seconds of easing":"使用 _PARAM1_ 秒的缓动开始摇动相机","Ease duration (in seconds)":"缓动持续时间(秒)","Stop shaking the camera.":"停止摇动相机。","Stop camera shaking":"停止摇动相机","Stop shaking the camera with _PARAM1_ seconds of easing":"使用 _PARAM1_ 秒的缓动停止摇动相机","Mark a layer as shakable.":"标记一个图层为可摇动。","Shakable layer":"可摇动的图层","Mark the layer: _PARAM2_ as shakable: _PARAM1_":"将图层:_PARAM2_ 标记为可摇动:_PARAM1_","Shakable":"可摇动","Check if the camera is shaking.":"检查相机是否在摇动。","Camera is shaking":"相机正在摇动","Change the translation amplitude of the shaking (in pixels).":"改变摇动的平移幅度(以像素为单位)。","Layer translation amplitude":"图层平移振幅","Change the translation amplitude of the shaking to _PARAM1_; _PARAM2_ (layer: _PARAM3_)":"改变摇动的平移幅度为 _PARAM1_;_PARAM2_(层:_PARAM3_)","Change the rotation amplitude of the shaking (in degrees).":"改变摇动的旋转幅度(以度为单位)。","Layer rotation amplitude":"图层旋转振幅","Change the rotation amplitude of the shaking to _PARAM1_ degrees (layer: _PARAM2_)":"改变摇动的旋转幅度为_PARAMETER1_度(层:_PARAM2_)","NewLayerName":"NewLayerName","Change the zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"更改摇晃的放大缩小系数。摇晃将按照此系数进行放大和缩小(例如1.0625是一个有效值)。","Layer zoom amplitude":"图层缩放幅度","Change the zoom factor amplitude of the shaking to _PARAM1_ (layer: _PARAM2_)":"更改震动摇晃的放大缩小系数为_PARAM1_(图层:_PARAM2_)","Zoom factor":"缩放系数","Change the number of back and forth per seconds.":"更改来回摆动的次数。","Layer shaking frequency":"图层震动频率","Change the shaking frequency to _PARAM1_ (layer: _PARAM2_)":"更改震动频率为_PARAM1_(图层:_PARAM2_)","Frequency":"频率","Change the default translation amplitude of the shaking (in pixels).":"更改摇晃的默认平移幅度(以像素为单位)。","Default translation amplitude":"默认平移幅度","Change the default translation amplitude of the shaking to _PARAM1_; _PARAM2_":"将摇晃的默认平移幅度更改为_PARAM1_;_PARAM2_","Change the default rotation amplitude of the shaking (in degrees).":"更改摇晃的默认旋转幅度(以度为单位)。","Default rotation amplitude":"默认旋转幅度","Change the default rotation amplitude of the shaking to _PARAM1_ degrees":"将摇晃的默认旋转幅度更改为_PARAM1_度","Change the default zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"更改摇晃的默认放大缩小系数。摇晃将按照此系数进行放大和缩小(例如1.0625是一个有效值)。","Default zoom amplitude":"默认缩放幅度","Change the default zoom factor amplitude of the shaking to _PARAM1_":"将摇晃的默认放大缩小系数更改为_PARAM1_","Change the default number of back and forth per seconds.":"更改摇晃的默认来回摆动次数。","Default shaking frequency":"默认摇晃频率","Change the default shaking frequency to _PARAM1_":"将摇晃的默认摇晃频率更改为_PARAM1_","Generate a number from 2 dimensional simplex noise.":"从二维simplex噪声生成一个数字。","2D noise":"二维噪声","Generator name":"生成器名称","X coordinate":"X坐标","Y coordinate":"Y坐标","Generate a number from 3 dimensional simplex noise.":"从三维simplex噪声生成一个数字。","3D noise":"三维噪声","Z coordinate":"Z坐标","Generate a number from 4 dimensional simplex noise.":"从4维simplex噪音中生成一个数字。","4D noise":"4D噪声","W coordinate":"W坐标","Create a noise generator with default settings (frequency = 1, octaves = 1, persistence = 0.5, lacunarity = 2).":"使用默认设置(频率=1,音色=1,持续性=0.5,缝隙=2)创建一个噪音生成器。","Create a noise generator":"创建一个噪声生成器","Create a noise generator named _PARAM1_":"创建名为_PARAM1_的噪声生成器","Delete a noise generator and loose its settings.":"删除噪声生成器并丢失其设置。","Delete a noise generator":"删除一个噪声生成器","Delete _PARAM1_ noise generator":"删除_PARAM1_噪声生成器","Delete all noise generators and loose their settings.":"删除所有噪声生成器并丢失其设置。","Delete all noise generators":"删除所有噪声生成器","The seed is a number used to generate the random noise. Setting the same seed will result in the same random noise generation. It's for example useful to generate the same world, by saving this seed value and reusing it later to generate again a world.":"种子是一个用于生成随机噪声的数字。设置相同的种子将导致相同的随机噪声生成。例如,通过保存此种子值并在以后重新使用它来再次生成世界,可以生成相同的世界。","Noise seed":"噪声种子","Change the noise seed to _PARAM1_":"将噪声种子更改为_PARAM1_","Seed":"种子","15 digits numbers maximum":"最多15位数字","Change the looping period on X used for noise generation. The noise will wrap-around on X.":"更改用于噪声生成的X方向循环周期。噪声将在X上包裹。","Noise looping period on X":"噪声在X轴上的循环周期","Change the looping period on X of _PARAM2_: _PARAM1_":"更改 _PARAM2_ 的循环周期:_PARAM1_","Looping period on X":"X 的循环周期","Change the looping period on Y used for noise generation. The noise will wrap-around on Y.":"更改 Y 上用于噪音生成的循环周期。噪音将在 Y 上环绕。","Noise looping period on Y":"Y 的噪音循环周期","Change the looping period on Y of _PARAM2_: _PARAM1_":"更改 _PARAM2_ 的 Y 循环周期:_PARAM1_","Looping period on Y":"Y 的循环周期","Change the base frequency used for noise generation. A lower frequency will zoom in the noise.":"更改用于噪音生成的基础频率。较低的频率会使噪音放大。","Noise base frequency":"噪音基础频率","Change the noise frequency of _PARAM2_: _PARAM1_":"更改 _PARAM2_ 的噪音频率:_PARAM1_","Change the number of octaves used for noise generation. It can be seen as layers of noise with different zoom.":"更改用于噪音生成的倍频数。可以看作是不同缩放的噪声层。","Noise octaves":"噪音倍频数","Change the number of noise octaves of _PARAM2_: _PARAM1_":"更改 _PARAM2_ 的噪音倍频数:_PARAM1_","Octaves":"倍频数","Change the persistence used for noise generation. At its default value \"0.5\", it halves the noise amplitude at each octave.":"更改用于噪音生成的持久性。在其默认值“0.5”时,它会在每个倍频数上减半噪音振幅。","Noise persistence":"噪音持久性","Change the noise persistence of _PARAM2_: _PARAM1_":"更改 _PARAM2_ 的噪音持久性:_PARAM1_","Persistence":"持久性","Change the lacunarity used for noise generation. At its default value \"2\", it doubles the frequency at each octave.":"更改用于噪音生成的分层性。在默认值“2”上,它会在每个倍频数上增加频率。","Noise lacunarity":"噪声间隙","Change the noise lacunarity of _PARAM2_: _PARAM1_":"更改_PARAM2_的噪声间隙:_PARAM1_","Lacunarity":"间隙","The seed used for noise generation.":"用于噪声生成的种子。","The base frequency used for noise generation.":"用于噪声生成的基频。","The number of octaves used for noise generation.":"用于噪声生成的振荡器数量。","Noise octaves number":"噪声振荡器数量","The persistence used for noise generation.":"用于噪声生成的持续性。","The lacunarity used for noise generation.":"用于噪声生成的间隙。","Camera Zoom":"摄像机缩放","Allows to zoom camera on a layer with a speed (factor per second).":"允许以速度(每秒的倍数)在层上缩放摄像机。","Change the camera zoom at a given speed (in factor per second).":"以给定速度改变摄像头缩放(以秒为单位的因子)。","Zoom camera with speed":"用速度缩放摄像头","Zoom camera with speed: _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"使用速度缩放摄像头:_PARAM1_(图层:_PARAM2_,摄像头:_PARAM3_)","Zoom speed":"缩放速度","Zoom by a factor per second. 1: no effect, 2: zoom in x2 every second, 0.5: zoom out x2 every second.":"按每秒因子缩放。 1:无效果,2:每秒放大两倍,0.5:每秒缩小两倍。","Camera number (default: 0)":"摄像头编号(默认:0)","Change the camera zoom and keep an anchor point fixed on screen (instead of the center).":"更改摄像头缩放并保持屏幕上的锚点固定(而不是中心)。","Zoom with anchor":"带锚点缩放","Change camera zoom to: _PARAM1_ with an anchor at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"将相机缩放更改为:_PARAM1_,并在屏幕上保持锚点在:_PARAM4_;_PARAM5_(图层:_PARAM2_,摄像头:_PARAM3_)","Zoom":"缩放","1: Initial zoom, 2: zoom in x2, 0.5: zoom out x2...":"1:初始缩放,2:每秒放大两倍,0.5:每秒缩小两倍……","Anchor X":"锚点X","Anchor Y":"锚点Y","Change the camera zoom at a given speed (in factor per second) and keep an anchor point fixed on screen (instead of the center).":"以给定速度(每秒因素)改变摄像机缩放并保持屏幕上的锚点固定(而不是中心)。","Zoom camera with speed and anchor":"速度和锚点缩放摄像机","Zoom camera with speed: _PARAM1_ and an anchror at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"使用速度:_PARAM1_ 缩放摄像机,并将其锚点放在:_PARAM4_;_PARAM5_(图层:_PARAM2_,摄像机:_PARAM3_)","Cancellable draggable object":"可取消的可拖动对象","Allow to cancel the drag of an object (having the Draggable behavior) and return it smoothly to its previous position.":"允许取消对象的拖动(具有可拖动行为)并平稳地将其返回到其先前位置。","Allow to cancel the drag of an object and make it smoothly return to its original position (with a tween).":"允许取消对对象的拖动,并使其平滑返回到原始位置(带有缓动效果)。","Cancellable Draggable object":"可取消拖动的对象","Draggable behavior":"可拖动行为","Tween behavior":"Tween行为","Original X":"原始X","Original Y":"原始Y","Cancel last drag.":"取消上次拖动。","Cancel drag (deprecated)":"取消拖动 (已弃用)","Cancel last dragging of _PARAM0_ in _PARAM2_ ms with easing _PARAM3_":"使用参数3中的缓和在参数2毫秒内取消上次对_PARAM0_的拖动。","Duration in milliseconds":"毫秒数","Cancel drag":"取消拖动","Cancel last dragging of _PARAM0_ with easing _PARAM3_ in _PARAM2_ seconds":"使用参数3中的缓和在参数2秒内取消对_PARAM0_的上次拖动。","Duration in seconds":"秒数","Dragging is cancelled, the object is returning to its original position.":"取消拖动,对象正在返回原始位置。","Dragging is cancelled":"拖动已取消","_PARAM0_ dragging is cancelled":"_PARAM0_的拖动已取消","Checkbox (for Shape Painter)":"复选框(用于图形绘制器)","Checkbox that can be toggled by a left-click or touch.":"可以通过左键单击或触摸切换的复选框。","Checkbox":"复选框","Checked":"已选","Checkbox state":"复选框状态","Halo size (hover). If blank, this is set to \"SideLength\".":"光圈大小(悬停)。如果留空,则设置为“SideLength”。","Checkbox appearance":"复选框外观","Halo opacity (hover)":"光圈不透明度(悬停)","Halo opacity (pressed)":"光圈不透明度(按下)","Enable interactions":"启用交互","State of the checkbox has changed. (Used in \"ToggleChecked\" function)":"复选框状态已更改。(用于“ToggleChecked”函数)","Primary color of checkbox. (Example: 24;119;211) Fill color when box is checked.":"复选框的主要颜色。(示例:24;119;211)在勾选框时的填充颜色。","Secondary color of checkbox. (Example: 255;255;255) Color of checkmark when box is checked.":"复选框的辅助颜色。(示例:255;255;255)盒勾选时的颜色。","Length of each side (px) Minimum: 10":"每边长度(px)最小值:10","Line width of checkmark (px) (Min: 1, Max: 1/4 * SideLength)":"勾选线宽(px)(最小:1,最大:1/4 * SideLength)","Border thickness (px) This border is only visible when the checkbox is unchecked.":"边框厚度(px)只有在复选框未选中时才可见。","Halo size (pressed). If blank, this is set to \"HaloRadiusHover * 1.1\"":"光圈大小(按下)。如果留空,则设置为“HaloRadiusHover * 1.1”","Check (or uncheck) the checkbox.":"勾选(或取消勾选)复选框。","Check (or uncheck) the checkbox":"勾选(或取消勾选)复选框","Add checkmark to _PARAM0_: _PARAM2_":"为_PARAM0_添加复选标记: _PARAM2_","Check the checkbox?":"勾选复选框?","Enable or disable interactions with the checkbox. Users cannot interact while it is disabled.":"启用或禁用与复选框的交互。在其被禁用期间用户无法进行交互。","Enable interactions with checkbox":"启用与复选框的交互","Enable interactions of _PARAM0_: _PARAM2_":"启用_PARAM0_的交互:_PARAM2_","Enable":"启用","If checked, change to unchecked. If unchecked, change to checked.":"如果选中,则更改为未选中。如果未选中,则更改为已选中。","Toggle checkmark":"切换复选标记","Toggle checkmark on _PARAM0_":"在_PARAM0_上切换复选标记","Change the primary color of checkbox.":"更改复选框的主要颜色。","Primary color of checkbox":"复选框的主要颜色","Change the primary color of _PARAM0_: _PARAM2_":"更改_PARAM0_的主颜色:_PARAM2_","Primary color":"主要颜色","Change the secondary color of checkbox.":"更改复选框的次要颜色。","Secondary color of checkbox":"复选框的次要颜色","Change the secondary color of _PARAM0_: _PARAM2_":"更改_PARAM0_的次颜色:_PARAM2_","Secondary color":"次要颜色","Change the halo opacity when pressed.":"在按下时更改辉光不透明度。","Halo opacity when pressed":"按下时的辉光不透明度","Change the halo opacity of _PARAM0_ when pressed: _PARAM2_":"更改_PARAM0_在按下时的辉光不透明度:_PARAM2_","Halo opacity":"辉光不透明度","Change the halo opacity when hovered.":"在悬停时更改辉光不透明度。","Halo opacity when hovered":"悬停时的辉光不透明度","Change the halo opacity of _PARAM0_ when hovered: _PARAM2_":"更改_PARAM0_悬停时的辉光不透明度:_PARAM2_","Change the halo radius when pressed.":"按下时更改辉光半径。","Halo radius when pressed":"按下时的辉光半径","Change the halo radius of _PARAM0_ when pressed: _PARAM2_ px":"更改_PARAM0_在按下时的辉光半径:_PARAM2_ px","Halo radius":"辉光半径","Change the halo radius when hovered. This size is also used to detect interaction with the checkbox.":"在悬停时更改辉光半径。此大小也用于检测复选框的交互。","Halo radius when hovered":"悬停时的辉光半径","Change the halo radius of _PARAM0_ when hovered: _PARAM2_ px":"更改_PARAM0_悬停时的辉光半径:_PARAM2_ px","Change the border thickness of checkbox.":"更改复选框的边框厚度。","Border thickness of checkbox":"复选框的边框厚度","Change the border thickness of _PARAM0_: _PARAM2_ px":"更改_PARAM0_的边框厚度:_PARAM2_ px","Track thickness":"轨道厚度","Change the side length of checkbox.":"更改复选框的边长。","Side length of checkbox":"复选框的边长","Change the side length of _PARAM0_: _PARAM2_ px":"更改_PARAM0_的边长:_PARAM2_像素","Track width (px)":"跟踪宽度(像素)","Change the line width of checkmark.":"更改勾选线宽度。","Line width of checkmark":"勾选线宽度","Change the line width of _PARAM0_: _PARAM2_ px":"更改_PARAM0_的线宽度:_PARAM2_像素","Line width (px)":"线宽度(像素)","Check if the checkbox is checked.":"检查复选框是否被勾选。","Is checked":"已选中","_PARAM0_ is checked":"_PARAM0_已勾选","Check if the checkbox interations are enabled.":"检查复选框交互是否已启用。","Interactions enabled":"交互已启用","Interactions of _PARAM0_ are enabled":"_PARAM0_的交互已启用","Return the color used to draw the outline of the checkbox (when unchecked) and the fill color (when checked).":"返回用于绘制复选框轮廓(未勾选时)和填充颜色(已勾选时)的颜色。","Change the maximum value of _PARAM0_: _PARAM2_":"更改_PARAM0_的最大值为_PARAM2_","Return the color used to fill the checkbox (when unchecked) and to draw the checkmark (when checked).":"返回用于填充复选框(未勾选时)和绘制勾选线(已勾选时)的颜色。","Return the radius of the halo while the checkbox is touched or clicked.":"返回在单击或触摸复选框时用于绘制光圈的半径。","Halo radius while touched or clicked":"单击时的光圈半径","Return the opacity of the halo while the checkbox is touched or clicked.":"返回在单击或触摸复选框时光圈的不透明度。","Halo opacity (while touched or clicked)":"光圈的不透明度(单击或触摸时)","Return the radius of the halo when the mouse is hovering near the checkbox.":"返回当鼠标悬停在复选框附近时光圈的半径。","Halo radius (during hover)":"光圈半径(悬停时)","Return the opacity of the halo when the mouse is hovering near the checkbox.":"返回鼠标在复选框附近悬停时光圈的不透明度。","Halo opacity (during hover)":"光圈的不透明度(悬停时)","Return the line width of checkmark (pixels).":"返回勾选线的线宽度(像素)。","Line width":"线宽度","Return the side length of checkbox (pixels).":"返回复选框边长(像素)。","Side length":"边长","Return the border thickness of checkbox (pixels).":"返回复选框边框厚度(像素)。","Border thickness":"边框厚度","Check if the checkbox is being pressed by mouse or touch.":"检查复选框是否正在被鼠标或触摸按下。","Checkbox is being pressed":"复选框正在被按下","_PARAM0_ is being pressed by mouse or touch":"_PARAM0_正在被鼠标或触摸按下","Update the hitbox.":"更新点击区域。","Update hitbox":"更新碰撞框","Update the hitbox of _PARAM0_":"更新_PARAM0_的碰撞框","Checkpoints":"检查点","Respawn objects at checkpoints.":"在检查点重新生成对象。","Game mechanic":"游戏机制","Update a checkpoint of an object.":"更新对象的检查点。","Save checkpoint":"保存检查点","Save checkpoint _PARAM4_ of _PARAM1_ to _PARAM2_ (x-axis), _PARAM3_ (y-axis)":"将_PARAM1_的检查点_PARAM4_保存到_PARAM2_(x轴),_PARAM3_(y轴)","Save checkpoint of object":"对象的检查点保存","X position":"X位置","Y position":"Y位置","Checkpoint name":"检查点名称","Change the position of the object to the saved checkpoint.":"将对象的位置更改为保存的检查点。","Load checkpoint":"加载检查点","Move _PARAM2_ to checkpoint _PARAM3_ of _PARAM1_":"将_PARAM2_移动到检查点_PARAM1_的_PARAM3_","Load checkpoint from object":"从对象加载检查点","Change position of object":"改变对象的位置","Ignore (possibly) empty checkpoints":"忽略(可能为空)的检查点","Loading not yet saved checkpoints will (by default) set the position to the coordinate 0;0. Select \"yes\" to completely ignore non-existant checkpoints. To define an alternative checkpoint for it, create a new event and use the \"Checkpoint exists\" condition, save the wanted checkpoint as the action.":"尚未保存的检查点(默认情况下)将位置设置为坐标0;0。选择“是”以完全忽略不存在的检查点。要为其定义替代检查点,请创建新事件并使用“检查点存在”条件,将所需的检查点保存为操作。","Check if a checkpoint has a position saved / does exist.":"检查检查点是否已保存位置/存在。","Checkpoint exists":"检查点存在","Checkpoint _PARAM2_ of _PARAM1_ exists":"_PARAM1_的检查点_PARAM2_存在","Check checkpoint from object":"检查点是否存在于对象","Clipboard":"剪贴板","Read and write the clipboard.":"读取和写入剪贴板。","Read the text from the clipboard asynchronously. \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"异步从剪贴板读取文本。\n也请注意,对于 Web 浏览器,可能会要求用户允许读取剪贴板。","Get text from the clipboard":"从剪贴板获取文本","Read clipboard and store text in _PARAM1_":"读取剪贴板并将文本存储在_PARAM1_中","Callback variable where to store the clipboard contents":"回调变量,用于存储剪贴板内容","Write the text in the clipboard.":"在剪贴板中写入文本。","Write text to the clipboard":"将文本写入剪贴板","Write _PARAM1_ to clipboard":"将_PARAM1_写入剪贴板","Text to write to clipboard":"要写入剪贴板的文本","Read the text from the clipboard asynchronously. As this is \"asynchronous\", the variable won't be immediately filled with the text from the clipboard. You will have to wait a few frames before it will be. If you want your subsequent actions and subevents to automatically wait for the read to finish, use the waiting version of this action instead (recomended). \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"异步从剪贴板读取文本。由于这是“异步”,变量不会立即填充来自剪贴板的文本。您将不得不等待几帧才能出现。如果要使您的后续操作和子事件自动等待读取完成,请使用此操作的等待版本(推荐)。\n还要注意,在 Web 浏览器上,用户可能会被要求允许从剪贴板读取。","(No waiting) Get text from the clipboard":"(无需等待)从剪贴板获取文本","Callback variable where to store the result":"回调变量,用于存储结果","[DEPRECATED] Read the text from the clipboard (Windows, macOS, Linux only)":"[弃用]从剪贴板读取文本(仅限Windows、macOS和Linux)","[DEPRECATED] Get text from the clipboard (Windows, macOS, Linux)":"[弃用] 从剪贴板获取文本(仅限Windows、macOS和Linux)","Volume settings":"音量设置","A collapsible volume setting menu.":"可折叠的音量设置菜单。","Check if the events are running for the editor.":"检查事件是否正在为编辑器运行。","Editor is running":"编辑器正在运行","Events are running for the editor":"事件正在为编辑器运行","Collapsible volume setting menu.":"可折叠的音量设置菜单。","Show the volum controls.":"显示音量控制。","Open volum controls":"打开音量控制","Open _PARAM0_ volum controls":"打开 _PARAM0_ 音量控制","Hide the volum controls.":"隐藏音量控制。","Close volum controls":"关闭音量控制","Close _PARAM0_ volum controls":"关闭 _PARAM0_ 音量控制","Color Conversion":"颜色转换","Expressions to convert color values between various formats (RGB, HSV, HSL, named colors), calculate luminance according to WCAG 2.0 standards, and to blend two colors.":"表达式,可在各种格式(RGB、HSV、HSL和命名颜色)之间转换颜色值,根据WCAG 2.0标准计算亮度,并混合两种颜色。","Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".":"将十六进制字符串转换为RGB字符串。示例输入:“0459AF”。","Hexadecimal to RGB":"十六进制转换为RGB","Hex value":"十六进制值","Calculate luminance of a RGB color. Example input: \"0;128;255\".":"计算RGB颜色的亮度。 示例输入:“0;128;255”。","Luminance from RGB":"RGB颜色的亮度","RGB color":"RGB颜色","Calculate luminance of a hexadecimal color. Example input: \"0459AF\".":"计算十六进制颜色的亮度。 示例输入:“0459AF”。","Luminance from hexadecimal":"十六进制颜色的亮度","Blend two RGB colors by applying a weighted mean.":"通过加权平均值混合两个 RGB 颜色。","Blend RGB colors":"混合 RGB 颜色","First RGB color":"第一个 RGB 颜色","Second RGB color":"第二个 RGB 颜色","Ratio":"比例","Range: 0 to 1, where 0 gives the first color and 1 gives the second color":"范围:0 到 1,其中 0 给出第一种颜色,而 1 给出第二种颜色","Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".":"将 RGB 字符串转换为十六进制字符串。示例输入:“0;128;255”。","RGB to hexadecimal":"RGB 转换为十六进制","RGB value":"RGB 值","Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".":"将 RGB 字符串转换为 HSL 字符串。示例输入:“0;128;255””。","RGB to HSL":"RGB 转换为 HSL","Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).":"将 HSV 颜色值转换为 RGB 字符串。有效输入范围:H(0 到 360),S(0 到 100),V(0 到 100)。","HSV to RGB":"HSV 转换为 RGB","Hue 0-360":"色相 0-360","Saturation 0-100":"饱和度 0-100","Value 0-100":"明度 0-100","Converts a RGB string into a HSV string. Example input: \"0;128;255\".":"将 RGB 字符串转换为 HSV 字符串。示例输入:“0;128;255”。","RGB to HSV":"RGB 转换为 HSV","Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.":"将颜色名称转换为RGB字符串。 (示例:黑色,灰色,白色,红色,紫色,绿色,黄色,蓝色)\n完整的颜色列表:https://www.w3schools.com/colors/colors_names.asp。","Color name to RGB":"颜色名称至RGB","Name of a color":"颜色名称","Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).":"将HSL颜色值转换为RGB字符串。 有效的输入范围:H(0到360),S(0到100),L(0到100)。","HSL to RGB":"HSL至RGB","Lightness 0-100":"亮度0-100","Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.":"将颜色色调(范围:0到360)转换为RGB颜色字符串,饱和度为100%,亮度为50%。","Hue to RGB":"色调至RGB","Compressor":"压缩机","Compress and decompress strings.":"压缩和解压字符串。","Decompress a string.":"解压字符串。","Decompress String":"解压字符串","String to decompress":"要解压的字符串","Compress a string.":"压缩字符串。","Compress String":"压缩字符串","String to compress":"要压缩的字符串","Copy camera settings":"复制摄像机设置","Copy the camera settings of a layer and apply them to another layer.":"复制一个图层的摄像机设置并将其应用到另一个图层。","Copy camera settings of a layer and apply them to another layer.":"复制图层的相机设置并将其应用到另一个图层。","Copy camera settings of _PARAM1_ layer and apply them to _PARAM3_ layer (X position: _PARAM5_, Y position: _PARAM6_, Zoom: _PARAM7_, Angle: _PARAM8_)":"复制_PARAM1_图层的相机设置并应用到_PARAM3_图层(X位置:_PARAM5_,Y位置:_PARAM6_,缩放:_PARAM7_,角度:_PARAM8_)","Source layer":"源图层","Source camera":"源相机","Destination layer":"目标图层","Destination camera":"目标相机","Clone X position":"克隆X位置","Clone Y position":"克隆Y位置","Clone zoom":"克隆缩放","Clone angle":"克隆角度","CrazyGames SDK v3":"CrazyGames SDK v3","Allow games to be hosted on CrazyGames website, display ads and interact with CrazyGames user accounts.":"允许游戏托管在CrazyGames网站,显示广告并与CrazyGames用户账户交互。","Third-party":"第三方","Get link account response.":"获取链接帐户响应。","Link account response":"链接帐户响应","the last error from the CrazyGames API.":"CrazyGames API的最后一个错误。","Get last error":"获取上一个错误","CrazyGames API last error is":"CrazyGames API的上一个错误是","Check if an user is signed into CrazyGames. If signed in, retrieves username and profile picture.":"检查用户是否登录到CrazyGames。 如果已登录,则检索用户名和个人资料图片。","Check and load if an user is signed in CrazyGames":"检查并加载用户是否登录到CrazyGames","Check if user is signed in CrazyGames":"检查用户是否登录到CrazyGames","Check if the user is signed in.":"检查用户是否已登录。","User is signed in":"用户已登录","Return an invite link.":"返回邀请链接。","Invite link":"邀请链接","Room id":"房间编号","Display an invite button.":"显示邀请按钮。","Display invite button":"显示邀请按钮","Display an invite button for the room id: _PARAM1_":"显示房间编号的邀请按钮: _PARAM1_","Load CrazyGames SDK.":"加载CrazyGames SDK。","Load SDK":"加载SDK","Load CrazyGames SDK":"加载CrazyGames SDK","Check if the CrazyGames SDK is ready to be used.":"检查CrazyGames SDK是否准备好使用。","CrazyGames SDK is ready":"CrazyGames SDK已准备就绪","Let CrazyGames know gameplay started.":"告知CrazyGames游戏玩法已开始。","Gameplay started":"游戏玩法已开始","Let CrazyGames know gameplay started":"告知CrazyGames游戏玩法已开始","Let CrazyGames know gameplay stopped.":"告知CrazyGames游戏玩法已停止。","Gameplay stopped":"游戏玩法已停止","Let CrazyGames know gameplay stopped":"告知CrazyGames游戏玩法已停止","Let CrazyGames know loading started.":"告知CrazyGames游戏加载已开始。","Loading started":"游戏加载已开始","Let CrazyGames know loading started":"告知CrazyGames游戏加载已开始","Let CrazyGames know loading stopped.":"告知CrazyGames游戏加载已停止。","Loading stopped":"游戏加载已停止","Let CrazyGames know loading stopped":"告知CrazyGames游戏加载已停止","Display a video ad. The game is automatically muted while the video is playing.":"显示视频广告。游戏在播放视频时会自动静音。","Display video ad":"显示视频广告","Display _PARAM1_ video ad":"显示_PARAM1_视频广告","Ad Type":"广告类型","Checks if a video ad just finished playing successfully.":"检查视频广告是否已成功播放完毕。","Video ad just finished playing":"视频广告已成功播放完毕","Checks if a video ad is playing.":"检查是否在播放视频广告。","Video ad is playing":"正在播放视频广告","Check if the user changed.":"检查用户是否已更改。","User changed":"用户已更改","Check if a video ad had an error.":"检查视频广告是否存在错误。","Video ad had an error":"视频广告出现错误","Generate an invite link to invite friends to join your game sessions. This URL can be added to the clipboard or displayed in the game to let the user select it.":"生成一个邀请链接,邀请朋友加入您的游戏会话。此 URL 可以添加到剪贴板,也可以显示在游戏中,让用户选择。","Generate an invite link":"生成一个邀请链接","Generate an invite link for _PARAM1_":"为_PARAM1_生成一个邀请链接","Display an happy time by emitting sparkling confetti. The celebration should remain a special moment.":"通过释放闪闪发亮的彩带展现欢乐时光。庆祝活动应该是一个特殊的时刻。","Display happy time":"展示快乐时光","Scan for ad blockers.":"扫描广告拦截器。","Scan for ad blockers":"扫描广告拦截器","Check if user is using an ad blocker. This condition is always false before the \"Scan for ad blockers\" is called.":"检查用户是否正在使用广告拦截器。在调用“扫描广告拦截器”之前,此条件始终为假。","Ad blocker is detected":"检测到广告拦截器","Display a banner that can be called once per 60 seconds.":"显示一个可以每60秒调用一次的横幅。","Display a banner":"显示一个横幅","Display a banner: _PARAM1_ at position _PARAM3_ ; _PARAM4_ with size _PARAM2_":"显示横幅:_PARAM1_ 在位置 _PARAM3_ ; _PARAM4_ 以尺寸 _PARAM2_","Banner name":"横幅名称","Ad size":"广告尺寸","Position X":"位置 X","Position Y":"位置 Y","Hide a banner.":"隐藏横幅。","Hide a banner":"隐藏横幅","Hide the banner: _PARAM1_":"隐藏横幅:_PARAM1_","Hide all banners.":"隐藏所有横幅。","Hide all banners":"隐藏所有横幅","Hide all the banners":"隐藏所有横幅","Hide the invite button.":"隐藏邀请按钮。","Hide invite button":"隐藏邀请按钮","Get the environment.":"获取环境。","Get the environment":"获取环境","display environment into _PARAM1_":"在_PARAM1_中显示环境","Retrieve user data.":"检索用户数据。","Retrieve user data":"检索用户数据","Show CrazyGames login window.":"显示 CrazyGames 登录窗口。","Show CrazyGames login window":"显示 CrazyGames 登录窗口","Show account link prompt.":"显示帐户链接提示。","Show account link prompt":"显示帐户链接提示","the username.":"用户名。","Username":"用户名","Username is":"用户名是","the CrazyGames User ID.":"CrazyGames 用户ID。","CrazyGames User ID":"CrazyGames 用户ID","CrazyGames user ID is":"CrazyGames用户ID是","Gets the signed-in user's profile picture URL.":"Gets the signed-in user's profile picture URL.","Gets the signed-in user's profile picture URL":"Gets the signed-in user's profile picture URL","Return true when the user prefers to instantly join a lobby.":"当用户倾向于立即加入大堂时返回 true。","Is instantly joining a lobby":"立即加入大堂","Return true if the user prefers the chat disabled.":"如果用户喜欢禁用聊天,则返回 true。","Is the user chat disabled":"用户的聊天是否已禁用","Retrieves user system info, browser, version and device.":"检索用户系统信息,浏览器、版本和设备。","Retrieves user system info":"检索用户系统信息","Get invite parameters if user is invited to this game.":"如果用户被邀请到这个游戏中,则获取邀请参数。","Get invite parameters":"获取邀请参数","Param":"参数","Save the session data.":"保存会话数据。","Save session data":"保存会话数据","Save session data, with the id: _PARAM1_ to: _PARAM2_":"保存会话数据,id:_PARAM1_ 到:_PARAM2_","Id":"Id","Get user session data, if there is no saved data, \"null\" will be returned.":"获取用户会话数据,如果没有保存的数据,将返回\"null\"。","Get user session data":"获取用户会话数据","the availability of the user's account.":"用户账户的可用性。","Is user account available":"用户账户是否可用","The CrazyGames user account is available":"CrazyGames 用户账户可用","Retrieve the user's session token for authentication.":"检索用户的会话令牌进行身份验证。","Get User Token":"获取用户令牌","Retrieve the authentication token from Xsolla.":"从 Xsolla 检索身份验证令牌。","Get Xsolla Token":"获取 Xsolla 令牌","Generate Xsolla token.":"生成 Xsolla 令牌。","Generate Xsolla token":"生成 Xsolla 令牌","Cursor movement conditions":"光标移动条件","Conditions to check the cursor movement (still or moving).":"用于检查光标移动(静止或运动)的条件。","Check if the cursor has stayed still for the specified time on the default layer.":"检查光标在默认图层上是否保持静止的指定时间。","Cursor stays still":"光标保持静止","Cursor has stayed still for _PARAM1_ seconds":"光标已经静止_PARAM1_秒","Check if the cursor is moving on the default layer.":"检查光标在默认图层上是否移动。","Cursor is moving":"光标正在移动","Cursor type":"光标类型","Provides an action to change the type of the cursor, and a behavior to change the cursor when an object is hovered.":"提供一个更改光标类型的动作,以及一个在对象悬停时更改光标的行为。","Change the type of the cursor.":"更改光标的类型。","Change the cursor to _PARAM1_":"更改光标为_PARAM1_","The new cursor type":"新的光标类型","List of available cursors on https://developer.mozilla.org/en-US/docs/Web/CSS/cursor":"在https://developer.mozilla.org/en-US/docs/Web/CSS/cursor上列出的可用光标","Do change the type of the cursor.":"更改光标类型。","Do change cursor type":"更改光标类型","Do change the cursor to _PARAM1_":"确实更改光标为_PARAM1_","Change the cursor appearence when the object is hovered (on Windows, macOS or Linux).":"在对象悬停时更改光标外观(在 Windows、macOS 或 Linux 上)。","Custom cursor when hovered":"悬停时的自定义光标","The cursor type":"光标类型","See https://developer.mozilla.org/en-US/docs/Web/CSS/cursor for a list of possible cursors.":"请参阅https://developer.mozilla.org/en-US/docs/Web/CSS/cursor以获取可能光标列表。","Curved movement":"曲线运动","Move objects on curved paths.":"在曲线路径上移动对象。","Append a cubic Bezier curve at the end of the path.":"在路径末尾添加一个三次贝塞尔曲线。","Append a curve":"添加一个曲线","Append a curve to the path _PARAM1_ relatively to the end: _PARAM8_, first control point: _PARAM2_ ; _PARAM3_, second control point: _PARAM4_ ; _PARAM5_, destination: _PARAM6_ ; _PARAM7_":"相对于结束,将一条曲线追加到路径_PARAM1_:第一个控制点:_PARAM2_ ;第二个控制点:_PARAM3_ ;_PARAM4_ ;_PARAM5_ ;目标:_PARAM6_ ;_PARAM7_","Path name":"路径名称","First control point X":"第一个控制点X","First control point Y":"第一个控制点Y","Second Control point X":"第二个控制点X","Second Control point Y":"第二个控制点Y","Destination point X":"目标点X","Destination point Y":"目标点Y","Relative":"相对的","Append a cubic Bezier curve to the end of an object's path. The first control point is symmetrical to the last control point of the path.":"将三次贝塞尔曲线追加到对象路径的末尾。 第一个控制点对称于路径的最后一个控制点。","Append a smooth curve":"追加一个平滑曲线","Append a smooth curve to the path _PARAM1_ relatively to the end: _PARAM6_, second control point: _PARAM2_ ; _PARAM3_, destination: _PARAM4_ ; _PARAM5_":"相对于结束,将平滑曲线追加到路径_PARAM1_:第二个控制点:_PARAM2_ ;_PARAM3_ ;目标:_PARAM4_ ;_PARAM5_","Append a line at the end of the path.":"在路径末尾追加一条线。","Append a line":"追加一条线","Append a line to the path _PARAM1_ relatively to the end: _PARAM4_, destination: _PARAM2_ ; _PARAM3_":"相对于结束,将一条线追加到路径_PARAM1_:目标:_PARAM2_ ;_PARAM3_","Append a line to close the path.":"追加一条线关闭路径。","Close a path":"关闭路径","Close the path _PARAM1_":"关闭路径_PARAM1_","Create a path from SVG commands, for instance \"M 0,0 C 55,0 100,45 100,100\". Commands are: M = Move, C = Curve, S = Smooth, L = Line. Lower case is for relative positions. The preferred way to build the commands is to use an external SVG editor like Inkscape.":"从SVG命令创建路径,例如\" M 0,0 C 55,0 100,45 100,100\"。 命令是:M = 移动,C = 曲线,S = 平滑,L = 线。 小写用于相对位置。 构建命令的首选方法是使用外部SVG编辑器,如Inkscape。","Create a path from SVG":"从SVG创建路径","Create the path _PARAM1_ from the SVG path commands _PARAM2_":"从SVG命令创建路径_PARAM1_","SVG commands":"SVG命令","Return the SVG commands of a path.":"返回路径的SVG命令。","SVG path commands":"SVG路径命令","Delete a path from the memory.":"从内存中删除路径。","Delete a path":"删除路径","Delete the path: _PARAM1_":"删除路径:_PARAM1_","Append a path to another path.":"将路径追加到另一路径。","Append a path":"追加路径","Append the path _PARAM2_ to the path _PARAM1_":"将_PATH2_追加到路径_PATH1_","Name of the path to modify":"要修改的路径名称","Name of the path to add to the first one":"要添加到第一个路径的路径名称","Duplicate a path.":"复制路径。","Duplicate a path":"复制路径","Create path _PARAM1_ as a duplicate of path _PARAM2_":"将路径_PARAM1_创建为路径_PARAM2_的副本","Name of the path to create":"要创建的路径名称","Name of the source path":"源路径名称","Append a path to another path. The appended path is rotated to have a smooth junction.":"追加路径到另一条路径。追加的路径将旋转以实现平滑连接。","Append a rotated path":"追加旋转路径","Append the path _PARAM2_ rotated to connect to the path _PARAM1_ flip: _PARAM3_":"将路径_PARAM2_旋转,连接到路径_PARAM1_,翻转:_PARAM3_","Flip the appended path":"翻转追加的路径","Return the speed scale on Y axis. This is used to change the view point of a path (top-dwon or isometry).":"返回Y轴上的速度比例。用于改变路径的视角(俯视或等角)。","Speed scale Y":"速度比例Y","Change the speed scale on Y axis. This allows to change the view point of a path (top-dwon or isometry).":"改变Y轴上的速度比例。允许更改路径的视角(俯视或等角)。","Change the speed scale Y of the path _PARAM1_ to _PARAM2_":"将路径_PARAM1_的Y轴速度比例更改为_PARAM2_","Speed scale on Y axis (0.5 for pixel isometry)":"Y轴速度比例(像素等角0.5)","Invert a path, the end becomes the beginning.":"反转路径,末端变为开头。","Invert a path":"反转路径","Invert the path _PARAM1_":"反转路径_PARAM1_","Flip a path.":"翻转路径。","Flip a path":"翻转路径","Flip the path _PARAM1_":"翻转路径_PARAM1_","Flip a path horizontally.":"水平翻转路径。","Flip a path horizontally":"水平翻转路径","Flip the path _PARAM1_ horizontally":"水平翻转路径_PARAM1_","Flip a path vertically.":"垂直翻转路径。","Flip a path vertically":"垂直翻转路径","Flip the path _PARAM1_ vertically":"垂直翻转路径_PARAM1_","Scale a path.":"缩放路径。","Scale a path":"缩放路径","Scale the path _PARAM1_ by _PARAM2_ ; _PARAM3_":"将路径_PARAM1_缩放_PARAM2_;_PARAM3_","Scale on X axis":"X轴缩放","Scale on Y axis":"Y轴缩放","Rotate a path.":"旋转路径。","Rotate a path":"旋转路径","Rotate _PARAM2_° the path _PARAM1_":"旋转路径_PARAM1_ _PARAM2_°","Rotation angle":"旋转角度","Check if a path is closed.":"检查路径是否闭合。","Is closed":"是否闭合","The path _PARAM1_ is closed":"路径_PARAM1_已闭合","Return the position on X axis of the path for a given length.":"返回给定长度的路径在X轴上的位置。","Path X":"路径X","Length on the path":"路径长度","Return the position on Y axis of the path for a given length.":"返回给定长度的路径在Y轴上的位置。","Path Y":"路径Y","Return the direction angle of the path for a given length (in degree).":"返回给定长度的路径的方向角度(以度为单位)。","Path angle":"路径角度","Return the length of the path.":"返回路径的长度。","Path length":"路径长度","Return the displacement on X axis of the path end.":"返回路径末端在X轴上的位移。","Path end X":"路径末端X","Return the displacement on Y axis of the path end.":"返回路径末端在Y轴上的位移。","Path end Y":"路径末端Y","Return the number of lines or curves that make the path.":"返回组成路径的线条或曲线的数量。","Path element count":"路径元素计数","Return the origin position on X axis of a curve.":"返回曲线在X轴上的原始位置。","Origin X":"原始X","Curve index":"曲线索引","Return the origin position on Y axis of a curve.":"返回曲线在Y轴上的原始位置。","Origin Y":"原始Y","Return the first control point position on X axis of a curve.":"返回曲线上第一个控制点在X轴上的位置。","First control X":"第一个控制X","Return the first control point position on Y axis of a curve.":"返回曲线上第一个控制点在Y轴上的位置。","First control Y":"第一个控制Y","Return the second control point position on X axis of a curve.":"返回曲线上第二个控制点在X轴上的位置。","Second control X":"第二个控制X","Return the second control point position on Y axis of a curve.":"返回曲线上第二个控制点在Y轴上的位置。","Second control Y":"第二个控制Y","Return the target position on X axis of a curve.":"返回曲线上目标位置在X轴上的位置。","Return the target position on Y axis of a curve.":"返回曲线上目标位置在Y轴上的位置。","Path exists.":"路径存在。","Path exists":"路径存在","Path _PARAM1_ exists":"路径 _PARAM1_ 存在","Move objects on curved paths in a given duration and tween easing function.":"在给定的持续时间和缓动函数中沿着曲线移动对象。","Movement on a curve (duration-based)":"曲线上的运动(基于持续时间)","Rotation offset":"旋转偏移","Flip on X to go back":"在 X 轴翻转以返回","Flip on Y to go back":"在 Y 轴翻转以返回","Speed scale":"速度比例","Pause duration before going back":"返回之前的暂停持续时间","Viewpoint":"观点","Set the the object on the path according to the current length.":"根据当前长度设置路径上的对象","Update position":"更新位置","Update the position of _PARAM0_ on the path":"更新路径上_PARAM0_的位置","Move the object to a position by following a path.":"沿着路径将对象移动到一个位置","Move on path to a position":"在路径上移动到一个位置","Move _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"将_PARAM0_移动到_PARAM6_ ; _PARAM7_的路径上:_PARAM2_在_PARAM4_秒内,_PARAM3_次重复并采用_PARAM5_的缓动","The path can be define with the \"Append curve\" action.":"路径可以通过“附加曲线”动作来定义","Number of repetitions":"重复次数","Destination X":"目标X","Destination Y":"目标Y","Move the object to a position by following a path and go back.":"按照路径将对象移动到一个位置,然后返回","Move back and forth to a position":"往返移动到一个位置","Move back and forth _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM8_ seconds before going back and loop: _PARAM9_":"往返移动_PARAM0_到_PARAM6_ ; _PARAM7_的路径上:_PARAM2_在_PARAM4_秒内,_PARAM3_次重复并采用_PARAM5_的缓动,在返回前等待_PARAM8_秒和循环:_PARAM9_","Duration to wait before going back":"等待返回前的持续时间","Loop":"循环","Move the object by following a path.":"按照路径移动对象","Move on path":"按路径移动","Move _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"在路径上_PARAM0_重复_PARAM3_次在_PARAM4_秒内,_PARAM2_的缓动状态","Move the object by following a path and go back.":"按照路径移动对象,然后返回","Move back and forth":"来回移动","Move back and forth _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM6_ seconds before going back and loop: _PARAM7_":"来回移动_PARAM0_在路径上:_PARAM2_在_PARAM4_秒内,_PARAM3_次重复并采用_PARAM5_的缓动,在返回前等待_PARAM6_秒和循环:_PARAM7_","Check if the object has reached one of the 2 ends of the path.":"检查对象是否已到达路径的两端之一","Reached an end":"已到达终点","_PARAM0_ reached an end of the path":"_PARAM0_已到达路径的终点","Check if the object has finished to move on the path.":"检查对象是否已完成在路径上的移动","Finished to move":"已完成移动","_PARAM0_ has finished to move":"_PARAM0_已完成移动","Return the angle of movement on its path.":"返回其路径上的运动角度。","Movement angle":"运动角度","Draw the object trajectory.":"绘制对象轨迹。","Draw the trajectory":"绘制轨迹","Draw trajectory of _PARAM0_ on _PARAM2_":"在 _PARAM2_ 上绘制 _PARAM0_ 的轨迹","Shape painter":"形状绘制程序","Change the transformation to apply to the path.":"更改应用于路径的变换。","Path transformation":"路径变换","Change the path trasformation of _PARAM0_ to origin _PARAM2_; _PARAM3_ scale by _PARAM4_ and a rotation of _PARAM5_°":"更改 _PARAM0_ 的路径转换为起点 _PARAM2_; _PARAM3_ 缩放 _PARAM4_ 及旋转 _PARAM5_°","Scale":"缩放","Angle":"角度","Initialize the movement state.":"初始化运动状态。","Initialize the movement":"初始化运动","Initialize the movement of _PARAM0_":"初始化 _PARAM0_ 的运动","Return the number of repetitions between the current position and the origin.":"返回当前位置和起点之间的重复次数。","Repetition done":"重复完成","Return the position on one repeated path.":"返回重复路径的位置。","Path position":"路径位置","Return the progress on the full path from 0 to 1, where 0 means the origin and 1 the end.":"返回从0到1的路径上的整体进度,其中0表示起点,1表示终点。","Progress":"进度","Return the length of the path (one repetition only).":"返回路径的长度(仅一次重复)。","Return the speed scale on Y axis of the path.":"返回路径Y轴上的速度比例。","Path speed scale Y":"路径速度比例Y","Return the angle to use when the object is going back or not.":"对象回退或非回退时要使用的角度。","Back or forth angle":"回退或非回退角度","Move objects on curved paths at a given speed.":"以给定速度沿着曲线移动对象。","Movement on a curve (speed-based)":"曲线上的运动(基于速度)","Rotation":"旋转","Change the path followed by an object.":"更改对象遵循的路径。","Follow a path":"遵循路径","_PARAM0_ follow the path: _PARAM2_ repeated _PARAM3_ times and loop: _PARAM4_":"_PARAM0_ 遵循路径:_PARAM2_ 重复 _PARAM3_ 次且循环:_PARAM4_","Change the path followed by an object to reach a position.":"更改对象遵循的路径,以到达某个位置。","Follow a path to a position":"到达位置的路径","_PARAM0_ follow the path _PARAM2_ repeated _PARAM3_ times to reach _PARAM5_ ; _PARAM6_ and loop: _PARAM4_":"_PARAM0_ 遵循路径 _PARAM2_ 重复 _PARAM3_ 次达到 _PARAM5_ ; _PARAM6_ 并循环:_PARAM4_","the length between the trajectory origin and the current position without counting the loops.":"轨迹起点与当前位置之间的长度,不计算循环。","Position on the loop":"循环中的位置","the length from the trajectory origin in the current loop":"当前循环中轨迹起点的长度","the number time the object loop the trajectory.":"对象循环轨迹的次数。","Current loop":"当前环路","the current loop":"当前环路","the length between the trajectory origin and the current position counting the loops.":"轨迹起点到当前位置的长度,计算循环。","Position on the path":"路径上的位置","the length from the trajectory origin counting the loops":"计算轨迹起点到当前位置的长度,包括循环","Change the position of the object on the path.":"改变物体在路径上的位置。","Change the position of _PARAM0_ on the path at the length _PARAM2_":"在路径上将_PARAM0_的位置移动至长度_PARAM2_","Length":"长度","Check if the length from the trajectory origin is lesser than a value.":"检查轨迹起点到长度是否小于某个值。","Current length":"当前长度","_PARAM0_ is less than _PARAM2_ pixels away from the trajectory origin":"_PARAM0_距离轨迹起点的像素距离小于_PARAM2_","Length from the trajectory origin (in pixels)":"轨迹起点的长度(以像素为单位)","Check if the object has reached the origin position of the path.":"检查物体是否到达路径的原始位置。","Reached path origin":"已达到路径原点","_PARAM0_ reached the path beginning":"_PARAM0_已到达路径的起点","Check if the object has reached the target position of the path.":"检查物体是否到达路径的目标位置。","Reached path target":"已达到路径目标","_PARAM0_ reached the path target":"_PARAM0_已到达路径目标","Reach an end":"达到末端","Check if the object can still move in the current direction.":"检查物体是否还可以继续沿当前方向移动。","Can move further":"可以进一步移动","_PARAM0_ can move further on its path":"_PARAM0_可以继续沿着路径移动","the speed of the object.":"物体的速度。","the speed":"速度","Change the current speed of the object.":"改变物体的当前速度。","Change the speed of _PARAM0_ to _PARAM2_":"将_PARAM0_的速度改为_PARAM2_","Speed (in pixels per second)":"速度(每秒的像素数)","Make an object accelerate until it reaches a given speed.":"使物体加速,直到达到给定的速度。","Accelerate":"加速","_PARAM0_ accelerate at _PARAM3_ to reach the speed of _PARAM2_":"_PARAM0_加速至_PARAM3_,以达到_PARAM2_的速度","Targeted speed (in pixels per second)":"目标速度(每秒的像素数)","Acceleration (in pixels per second per second)":"加速度(每秒的像素数每秒)","Make an object accelerate to reaches a speed in a given amount of time.":"使物体加速到在给定时间内达到的速度。","Accelerate during":"加速时长","_PARAM0_ accelerate during _PARAM3_ seconds to reach the speed of _PARAM2_":"_PARAM0_在_PARAM3_秒内加速到达_PARAM2_的速度","Repeated path position":"重复的路径位置","Return the length of the complete trajectory (without looping).":"返回完整轨迹的长度(不包括循环)。","Total length":"总长度","Return the path origin on X axis of the object.":"返回对象在X轴上的路径起点。","Path origin X":"路径起点X","the path origin on X axis":"对象在X轴上的路径起点","Return the path origin on Y axis of the object.":"返回对象在Y轴上的路径起点。","Path origin Y":"路径起点Y","the path origin on Y axis":"对象在Y轴上的路径起点","Depth effect":"深度效果","Change scale based on Y position to simulate depth of field.":"根据 Y 位置更改比例以模拟景深。","The scale of the object decreases the closer it is to the horizon, giving the illusion that the object is travelling away from the viewer.":"对象的比例随着接近地平线而减小,这使得对象在观看者远离时产生了幻觉。","Max scale when the object is at the bottom of the screen (Default: 1)":"当物体在屏幕底部时的最大比例(默认值:1)","Y position that represents a horizon where objects appear infinitely small (Default: 0)":"表示物体出现为无穷小的地平线的 Y 位置(默认值:0)","Exponential rate of change (Default: 2)":"指数变化率(默认值:2)","Percent away from the horizon":"远离地平线的百分比","Percent away from the horizon. This is \"0\" at the horizon, and \"1\" at the bottom of the screen.":"距离地平线的百分比。在地平线上为\"0\",在屏幕底部为\"1\"。","Percent away from horizon":"地平线处的百分比","Exponential rate of change, based on Y position.":"根据Y位置的指数级变化率。","Exponential rate of change":"指数级变化率","Max scale when the object is at the bottom of the screen.":"当对象在屏幕底部时的最大比例。","Max scale":"最大比例","Y value of horizon.":"地平线的Y值。","Y value of horizon":"地平线的Y值","Set max scale when the object is at the bottom of the screen (Default: 2).":"当对象位于屏幕底部时设置最大比例(默认:2)。","Set max scale":"设置最大比例","Set max scale of _PARAM0_ to _PARAM2_":"将_PARAM0_的最大比例设置为_PARAM2_。","Y Exponent":"Y指数","Set Y exponential rate of change (Default: 2).":"设置Y指数级变化率(默认:2)。","Set exponential rate of change":"设置指数级变化率","Set Y exponential rate of change of _PARAM0_ to _PARAM2_":"将_PARAM0_的Y指数级变化率设置为_PARAM2_。","Set Y position of the horizon, where objects are infinitely small (Default: 0).":"设置地平线的Y位置,其中物体是无限小(默认:0)。","Set Y position of horizon":"设置地平线的Y位置","Set horizon of _PARAM0_ to Y position _PARAM2_":"将_PARAM0_的地平线设置为Y位置_PARAM2_。","Horizon Y":"地平线Y","Discord rich presence (Windows, Mac, Linux)":"Discord 富存在(Windows、Mac、Linux)","Adds discord rich presence to your games.":"为您的游戏添加 Discord 富存在。","Attempts to connect to discord if it is installed, and initialize rich presence.":"如果已安装,则尝试连接到 Discord,并初始化丰富的存在。","Initialize rich presence":"初始化丰富的存在","Initialize rich presence with ID _PARAM1_":"使用 ID _PARAM1_ 初始化丰富的存在","The discord client ID":"Discord 客户端 ID","Update the data in the rich presence. See the discord documentation for more info on each field. Each field except state is optional.":"更新丰富的存在中的数据。查看 Discord 文档以获取有关每个字段的更多信息。除 state 外的每个字段都是可选的。","Update rich presence":"更新丰富的存在","Update rich presence to state _PARAM1_, details _PARAM2_, begin timestamp _PARAM3_, end timestamp _PARAM4_, large image _PARAM5_ with text _PARAM6_ and small image _PARAM7_ with text _PARAM8_":"更新丰富的存在为状态 _PARAM1_, 详细信息 _PARAM2_, 开始时间戳 _PARAM3_, 结束时间戳 _PARAM4_, 大图像 _PARAM5_ 与文本 _PARAM6_ 和小图像 _PARAM7_ 与文本 _PARAM8_","The current state":"当前状态","The details of the current state":"当前状态的详情","The timstamp of the start of the match":"比赛开始的时间戳","If this is filled, discord will show the time elapsed since the start.":"如果填写了,则 Discord 将显示自比赛开始以来经过的时间。","The timestamp of the end of the match":"比赛结束时间戳","If this is filled, discord will display the remaining time.":"如果填写,discord将显示剩余时间。","The name of the big image":"大图像的名称","The text of the large image":"大图像的文本","The name of the small image":"小图像的名称","The text of the small image":"小图像的文本","Double-click and tap":"双击和轻击","Check for a double-click or a tap.":"检查双击或轻击。","Check if the specified mouse button is clicked twice in a short amount of time.":"检查指定的鼠标按钮是否在短时间内被点击两次。","Double-clicked (or double-tapped)":"双击(或双击)","_PARAM1_ mouse button is double-clicked":"_PARAM1_鼠标按钮被双击","Mouse button to track":"跟踪的鼠标按钮","As touch devices do not have middle/right tap equivalents, you will need to account for this within your events if you're not using the left mouse button and building for touch devices.":"由于触摸设备没有中/右键等效物,如果未使用左鼠标按钮并为触摸设备建立,您将需要在事件内考虑此情况。","Check if the specified mouse button is clicked.":"检查指定的鼠标按钮是否被点击。","Clicked (or tapped)":"已点击(或轻击)","_PARAM1_ mouse button is clicked":"_PARAM1_鼠标按钮被点击","_PARAM1_ mouse button is clicked _PARAM2_ times":"_PARAM1_鼠标按钮被点击_PARAM2_次","Click count":"点击计数","Drag camera with the mouse (or touchscreen)":"使用鼠标(或触摸屏)拖动摄像机","Move a camera by dragging the mouse (or touchscreen).":"用鼠标拖动(或触摸屏)以移动摄像机。","Drag camera with the mouse":"使用鼠标拖动相机","Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button":"使用_PARAM4_鼠标按钮在_PARAM3_方向上在_PARAM2_图层上拖动相机","Camera layer (default: \"\")":"相机图层(默认为\"\")","Directions that the camera can move (horizontal, vertical, both)":"相机可以移动的方向(水平,垂直,两者)","Mouse button (use \"Left\" for touchscreen)":"鼠标按钮(触摸屏使用\"Left\")","Draggable (for physics objects)":"可拖动(适用于物理对象)","Drag a physics object with the mouse (or touch).":"使用鼠标(或触摸)拖动物理对象。","Physics behavior":"物理行为","Mouse button":"鼠标按钮","Maximum force":"最大力","Frequency (Hz)":"频率(赫兹)","Damping ratio (Range: 0 to 1)":"阻尼比(范围:0至1)","Enable automatic dragging":"启用自动拖动","If automatic dragging is disabled, use the \"Start drag\" and \"Release drag\" actions.":"如果禁用了自动拖动,请使用“开始拖动”和“释放拖动”动作。","Start dragging object.":"开始拖动对象。","Start dragging object":"开始拖动对象","Start dragging (physics) _PARAM0_":"开始拖动(物理)_PARAM0_","Release dragged object.":"释放被拖动的对象。","Release dragged object":"释放被拖动的对象","Release _PARAM0_ from being dragged (physics)":"释放_PARAM0_被拖动的对象(物理)","Check if object is being dragged.":"检查对象是否正在被拖动。","Is being dragged":"正在被拖动","_PARAM0_ is being dragged (physics)":"_PARAM0_ 正在被拖动 (物理)","the mouse button used to move the object.":"用于移动对象的鼠标按钮。","the dragging mouse button":"拖动鼠标按钮","the maximum joint force (in Newtons) of the object.":"对象的最大关节力(牛顿)。","the maximum force":"最大力","the joint frequency (per second) of the object.":"对象的关节频率(每秒)。","the frequency":"关节频率","the joint damping ratio (range: 0 to 1) of the object.":"对象的关节阻尼比(范围:0 到 1)。","Damping ratio":"阻尼比","the damping ratio (range: 0 to 1)":"阻尼比(范围:0 到 1)","Check if automatic dragging is enabled.":"检查是否启用自动拖动。","Automatic dragging":"自动拖动","Automatic dragging is enabled on _PARAM0_":"在 _PARAM0_ 上启用自动拖动","Enable (or disable) automatic dragging with the mouse or touch.":"使用鼠标或触摸启用(或禁用)自动拖动。","Enable (or disable) automatic dragging":"启用(或禁用)自动拖动","Enable automatic dragging on _PARAM0_: _PARAM2_":"在 _PARAM0_ 上启用自动拖动:_PARAM2_","EnableAutomaticDragging":"EnableAutomaticDragging","Draggable slider (for Shape Painter)":"可拖动滑块(适用于Shape Painter)","A draggable slider that users can move to select a numerical value.":"用户可以移动的可拖动滑块以选择数值。","Let users select a numerical value by dragging a slider.":"让用户通过拖动滑块选择数值。","Draggable slider":"可拖动的滑块","Minimum value":"最小值","Maximum value":"最大值","Tick spacing":"刻度间距","Thumb shape":"滑块形状","Thumb":"滑块","Thumb width":"滑块宽度","Thumb height":"滑块高度","Thumb Color":"滑块颜色","Thumb opacity":"滑块不透明度","Track length":"轨道长度","Track":"轨道","Inactive track color (thumb color by default)":"非活动轨道颜色(默认情况下为滑块颜色)","Inactive track opacity":"非活动轨道不透明度","Active track color (thumb color by default)":"活动轨道颜色(默认情况下为滑块颜色)","Active track opacity":"活动轨道不透明度","Halo size (hover)":"光环大小(悬停)","Rounded track ends":"圆形轨道端点","Check if the slider is being dragged.":"检查滑块是否正在被拖动。","Being dragged":"正在被拖动","_PARAM0_ is being dragged":"_PARAM0_ 正在被拖动","Check if the slider interations are enabled.":"检查滑块交互是否启用。","Enable or disable the slider. Users cannot interact while it is disabled.":"启用或禁用滑块。在禁用时用户无法进行交互。","The value of the slider (based on position of the thumb).":"滑块值(根据拇指位置)。","Slider value":"滑块值","Change the value of a slider (this will move the thumb to the correct position).":"更改滑块的值(这将把拇指移动到正确的位置)。","Change the value of _PARAM0_: _PARAM2_":"更改 _PARAM0_ 的值:_PARAM2_","The minimum value of a slider.":"滑块的最小值。","Slider minimum value":"滑块最小值","Change the minimum value of a slider.":"更改滑块的最小值。","Change the minimum value of _PARAM0_: _PARAM2_":"更改 _PARAM0_ 的最小值:_PARAM2_","The maximum value of a slider.":"滑块的最大值。","Slider maximum value":"滑块最大值","Thickness of track.":"轨道的厚度。","Slider track thickness":"滑块轨道厚度","Length of track.":"轨道的长度。","Slider track length":"滑块轨道长度","Height of thumb.":"拇指的高度。","Slider thumb height":"滑块拇指高度","Change the maximum value of a slider.":"更改滑块的最大值。","The tick spacing of a slider.":"滑块的刻度间距。","Change the tick spacing of _PARAM0_: _PARAM2_":"更改_PARAM0_的刻度间距:_PARAM2_","Change the tick spacing of a slider.":"更改滑块的刻度间距。","Change length of track.":"更改轨道的长度。","Change track length of _PARAM0_ to _PARAM2_ px":"将_PARAM0_的轨道长度更改为_PARAM2_px","Track width":"轨道宽度","Change thickness of track.":"更改轨道的厚度。","Change track thickness of _PARAM0_ to _PARAM2_ px":"将_PARAM0_的轨道厚度更改为_PARAM2_px","Change width of thumb.":"更改拇指的宽度。","Change thumb width of _PARAM0_ to _PARAM2_ px":"将_PARAM0_的拇指宽度更改为_PARAM2_px","Change height of thumb.":"更改拇指的高度。","Change thumb height of _PARAM0_ to _PARAM2_ px":"将_PARAM0_的拇指高度更改为_PARAM2_px","Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.":"更改拇指周围光圈的半径。此大小还用于检测与滑块的交互。","Change halo radius of _PARAM0_ to _PARAM2_ px":"将_PARAM0_的光圈半径更改为_PARAM2_px","Change the halo opacity when the thumb is hovered.":"当拇指悬停时更改光圈的不透明度。","Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px":"将_PARAM0_悬停时的光圈不透明度更改为_PARAM2_px","Change opacity of halo when pressed.":"当按下时更改光环的不透明度。","Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px":"将_PARAM0_按下时的光环不透明度更改为_PARAM2_px","Change shape of thumb (circle or rectangle).":"更改拇指的形状(圆形或矩形)。","Change shape of _PARAM0_ to _PARAM2_":"将_PARAM0_的形状更改为_PARAM2_","New thumb shape":"新的拇指形状","Make track use rounded ends.":"使轨道使用圆形端。","Draw _PARAM0_ with a rounded track: _PARAM2_":"使用圆形轨道绘制_PARAM0_:_PARAM2_","Rounded track":"圆形轨道","Change opacity of thumb.":"更改拇指的不透明度。","Change thumb opacity of _PARAM0_ to _PARAM2_":"将_PARAM0_的拇指不透明度更改为_PARAM2_","Change opacity of inactive track.":"更改非活动轨道的不透明度。","Change inactive track opacity of _PARAM0_ to _PARAM2_":"将_PARAM0_的非活动轨道不透明度更改为_PARAM2_","Change opacity of active track.":"更改活动轨道的不透明度。","Change active track opacity of _PARAM0_ to _PARAM2_":"将_PARAM0_的活动轨道不透明度更改为_PARAM2_","Change the color of the track that is LEFT of the thumb.":"更改拇指左侧的轨道的颜色。","Active track color":"活动轨道颜色","Change active track color of _PARAM0_ to _PARAM2_":"将_PARAM0_的活动轨道颜色更改为_PARAM2_","Change the color of the track that is RIGHT of the thumb.":"更改拇指右侧的轨道的颜色。","Inactive track color":"非活动轨道颜色","Change inactive track color of _PARAM0_ to _PARAM2_":"将_PARAM0_的非活动轨道颜色更改为_PARAM2_","Change the thumb color to a specific value.":"将拇指的颜色更改为特定值。","Thumb color":"拇指颜色","Change thumb color of _PARAM0_ to _PARAM2_":"将_PARAM0_的拇指颜色更改为_PARAM2_","Pathfinding painter":"寻路绘制器","Draw the pathfinding of an object using a shape painter.":"使用形状绘制器绘制对象的寻路。","Draw the path followed by the object using a shape painter.":"使用形状绘制器绘制对象所经过的路径。","LoopIndex":"LoopIndex","Draw the path followed by the object using a shape painter. It automatically creates an instance of the shape painter object if there is none.":"使用形状绘制器绘制该对象所经过的路径。如果没有实例的形状绘制器对象,则会自动创建一个。","Draw pathfinding":"绘制路径","Draw the path followed by _PARAM0_ using _PARAM3_":"使用_PARAM3_绘制_PARAM0_所经过的路径","Pathfinding behavior":"路径找寻行为","Shape painter used to draw the path":"用于绘制路径的形状绘制器","Edge scroll camera":"边缘滚动相机","Scroll camera when cursor is near edge of screen.":"当光标接近屏幕边缘时滚动相机。","Enable (or disable) camera edge scrolling . Use \"Configure camera edge scrolling\" to adjust settings.":"启用(或禁用)摄像机边缘滚动。使用\"配置摄像机边缘滚动\"来调整设置。","Enable (or disable) camera edge scrolling":"启用(或禁用)摄像机边缘滚动","Enable camera edge scrolling: _PARAM1_":"启用摄像机边缘滚动:_PARAM1_","Enable camera edge scrolling":"启用摄像机边缘滚动","Configure camera edge scrolling that moves when mouse is near an edge of the screen.":"配置摄像机边缘滚动,当鼠标靠近屏幕边缘时移动。","Configure camera edge scrolling":"配置摄像机边缘滚动","Configure camera edge scrolling (layer: _PARAM3_, screen margin: _PARAM1_, scroll speed: _PARAM2_, style: _PARAM5_)":"配置摄像机边缘滚动(层:_PARAM3_,屏幕边缘:_PARAM1_,滚动速度:_PARAM2_,样式:_PARAM5_)","Screen margin (pixels)":"屏幕边缘(像素)","Scroll speed (in pixels per second)":"滚动速度(每秒像素数)","Scroll style":"滚动样式","Check if the camera is scrolling.":"检查摄像机是否滚动。","Camera is scrolling":"摄像机正在滚动","Check if the camera is scrolling up.":"检查摄像机是否向上滚动。","Camera is scrolling up":"摄像机正在向上滚动","Check if the camera is scrolling down.":"检查摄像机是否向下滚动。","Camera is scrolling down":"相机正在向下滚动","Check if the camera is scrolling left.":"检查相机是否向左滚动。","Camera is scrolling left":"相机正在向左滚动","Check if the camera is scrolling right.":"检查相机是否向右滚动。","Camera is scrolling right":"相机正在向右滚动","Draw a rectangle that shows where edge scrolling will be triggered.":"绘制一个显示边缘滚动将被触发的矩形。","Draw edge scrolling screen margin":"绘制边缘滚动屏幕边缘","Draw edge scrolling screen margin with _PARAM1_":"用_PARAM1_绘制边缘滚动屏幕边缘","Return the speed the camera is currently scrolling in horizontal direction (in pixels per second).":"返回相机当前在水平方向上滚动的速度(每秒像素数)。","Horizontal edge scroll speed":"水平边缘滚动速度","Return the speed the camera is currently scrolling in vertical direction (in pixels per second).":"返回相机当前在垂直方向上滚动的速度(每秒像素数)。","Vertical edge scroll speed":"垂直边缘滚动速度","Return the absolute scroll speed according to the mouse distance from the border.":"根据鼠标距离边界的距离返回绝对滚动速度。","Absolute scroll speed":"绝对滚动速度","Border distance":"边界距离","Ellipse movement":"椭圆移动","Move objects on ellipses or smoothly back and forth in one direction.":"在椭圆上移动对象或在一个方向上平滑来回移动。","Radius of the movement on X axis":"在X轴上的移动半径","Ellipse":"椭圆","Radius of the movement on Y axis":"在Y轴上的移动半径","Loop duration":"循环持续时间","Turn left":"左转","Initial direction":"初始方向","Rotate":"旋转","Change the turning direction (left or right).":"更改转向方向(左或右)。","Turn the other way":"向另一侧转向","_PARAM0_ turn the other way":"_PARAM0_向另一侧转向","Change the in which side the object is turning (left or right).":"更改对象转向的方向(左或右)。","Turn left or right":"向左或向右转向","_PARAM0_ turn left: _PARAM2_":"_PARAM0_向左转向:_PARAM2_","Check if the object is turning left.":"检查对象是否向左转向。","Is turning left":"正在向左转向","_PARAM0_ is turning left":"_PARAM0_正在向左转向","Return the movement angle of the object.":"返回物体的运动角度。","Set initial Y of _PARAM0_ to _PARAM2_":"将_PARAM0_的初始Y设置为_PARAM2_","Return the loop duration (in seconds).":"返回循环持续时间(单位:秒)。","Return the ellipse radius on X axis.":"返回X轴上的椭圆半径。","Radius X":"半径X","Radius Y":"半径Y","Return the movement center position on X axis.":"返回X轴上的运动中心位置。","Movement center X":"运动中心X","Return the movement center position on Y axis.":"返回Y轴上的运动中心位置。","Movement center Y":"运动中心Y","Change the radius on X axis of the movement.":"更改运动的X轴半径。","Change the radius on X axis of the movement of _PARAM0_ to _PARAM2_":"将_PARAM0_的运动X轴半径更改为_PARAM2_","Change the radius on Y axis of the movement.":"更改运动的Y轴半径。","Change the radius on Y axis of the movement of _PARAM0_ to _PARAM2_":"将_PARAM0_的运动Y轴半径更改为_PARAM2_","Change the loop duration.":"更改循环持续时间。","Change the loop duration of _PARAM0_ to _PARAM2_":"将_PARAM0_的循环持续时间更改为_PARAM2_","Speed (in degrees per second)":"速度(每秒度)","Change the movement angle. The object is teleported according to the angle.":"更改运动角度。根据角度使对象传送。","Teleport at an angle":"根据角度传送","Teleport _PARAM0_ on the ellipse at _PARAM2_°":"在椭圆上以_PARAM2_°的角度传送_PARAM0_","Delta X":"ΔX","Delta Y":"ΔY","Direction angle":"方向角度","Emojis":"表情符号","Display emoji characters in text objects and store them in strings.":"在文本对象中显示表情符号并将其存储为字符串。","Returns the specified emoji, from the provided name.":"根据提供的名称返回指定的表情符号。","Returns the specified emoji (name)":"返回指定的表情符号(名称)","Name of emoji":"表情符号的名称","Full list of emojis: [https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)":"表情符号的完整列表:[https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)","Returns the specified emoji, from a hexadecimal value.":"根据十六进制值返回指定的表情符号。","Returns the specified emoji (hex)":"返回指定的表情符号(十六进制)","Hexadecimal code":"十六进制代码","Full list of hexadecimal code: [https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)":"十六进制代码的完整列表:[https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)","Explosion force":"爆炸力","Simulate an explosion with physics forces on target objects.":"模拟对目标对象施加物理力的爆炸。","Simulate explosion with physics forces":"使用物理力模拟爆炸","Simulate an explosion that affects _PARAM1_ within explosion radius: _PARAM6_ (pixels), Explosion center: _PARAM3_, _PARAM4_. Max force: _PARAM5_":"模拟影响_PARAM1_范围内的爆炸:_PARAM6_(像素),爆炸中心:_PARAM3_,_PARAM4_。 最大力:_PARAM5_","Target Object":"目标对象","Physics Behavior (required)":"物理行为(必填)","Explosion center (X)":"爆炸中心(X)","Explosion center (Y)":"爆炸中心(Y)","Max force (of explosion)":"爆炸的最大力(爆炸的)","Force decreases the farther an object is from the explosion center.":"力随对象离爆炸中心的距离而减小。","Max distance (from center of explosion) (pixels)":"最大距离(从爆炸中心)(像素)","Objects less than this distance will be affected by the explosion.":"小于此距离的对象将受到影响。","Extended math support":"辅助数学支持","Additional math functions and constants as expressions and conditions.":"额外的数学函数和常数作为表达式和条件。","Returns a term from the Fibonacci sequence.":"返回来自斐波那契数列的一个项。","Fibonacci numbers":"斐波那契数","The desired term in the sequence":"序列中所需的项","Calculates the steepness of a line between two points.":"计算两点之间线的斜率。","Slope":"斜率","X value of the first point":"第一个点的X值","Y value of the first point":"第一个点的Y值","X value of the second point":"第二个点的X值","Y value of the second point":"第二个点的Y值","Converts a number of one range e.g. 0-1 to another 0-255.":"将一个范围(例如0-1)内的数字转换为另一个范围0-255。","Map":"映射","The value to convert":"要转换的值","The lowest value of the first range":"第一个范围的最小值","The highest value of the first range":"第一个范围的最大值","The lowest value of the second range":"第二个范围的最小值","The highest value of the second range":"第二个范围的最大值","Returns the value of the length of the hypotenuse.":"返回斜边的长度值。","Hypotenuse length":"斜边长度","First side of the triangle":"三角形的第一边","Second side of the triangle":"三角形的第二边","Returns the greatest common factor of two numbers.":"返回两数的最大公约数。","Greatest common factor (gcf)":"最大公约数(GCF)","Any integer":"任意整数","Returns the lowest common multiple of two numbers.":"返回两个数字的最小公倍数。","Lowest common multiple (lcm)":"最小公倍数 (lcm)","Returns the input multiplied by all the previous whole numbers.":"返回输入值乘以所有前面的整数。","Factorial":"阶乘","Any positive integer":"任何正整数","Converts a polar coordinate into the Cartesian x value.":"将极坐标转换为笛卡尔平面坐标 x 值。","Polar coordinate to Cartesian X value":"极坐标转笛卡尔平面坐标 x 值","Angle or theta in radians":"角度或弧度θ","Converts a polar coordinate into the Cartesian y value.":"将极坐标转换为笛卡尔平面坐标 y 值。","Polar coordinate to Cartesian Y value":"极坐标转笛卡尔平面坐标 y 值","Converts a isometric coordinate into the Cartesian x value.":"将等角坐标转换为笛卡尔平面坐标 x 值。","Isometric coordinate to Cartesian X value":"等角坐标转笛卡尔平面坐标 x 值","Position on the x axis":"x 轴上的位置","Position on the y axis":"y 轴上的位置","Converts a isometric coordinate into the Cartesian y value.":"将等角坐标转换为笛卡尔平面坐标 y 值。","Isometric coordinate to Cartesian Y value":"等角坐标转笛卡尔平面坐标 y 值","Returns the golden ratio.":"返回黄金分割比。","Golden ratio":"黄金分割比","Returns Pi (π).":"返回 Pi (π)。","Pi (π)":"π","Returns half Pi.":"返回 Pi 的一半。","Half Pi":"半 Pi","Returns the natural logarithm of e. (Euler's number).":"返回自然对数 e 的值。","Natural logarithm of e":"e 的自然对数","Returns the natural logarithm of 2.":"返回 2 的自然对数。","Natural logarithm of 2":"2 的自然对数","Returns the natural logarithm of 10.":"返回 10 的自然对数。","Natural logarithm of 10":"10 的自然对数","Returns the base 2 logarithm of e. (Euler's number).":"返回 e 的以 2 为底的对数。","Base 2 logarithm of e":"e 的以 2 为底的对数","Returns the base 10 logarithm of e. (Euler's number).":"返回 e 的以 10 为底的对数。","Base 10 logarithm of e":"e 的以 10 为底的对数","Returns square root of 2.":"返回 2 的平方根。","Square root of 2":"2 的平方根","Returns square root of 1/2.":"返回 1/2 的平方根。","Square root of 1/2":"1/2的平方根","Returns quarter Pi.":"返回四分之一π。","Quarter Pi":"四分之一π","Formats a number to use the specified number of decimal places (Deprecated).":"将数字格式化为指定小数位数(已弃用)。","ToFixed":"ToFixed","The value to be rounded":"要舍入的值","Number of decimal places":"小数位数","Formats a number to a string with the specified number of decimal places.":"将数字格式化为指定小数位数的字符串。","Check if the number is even (divisible by 2). To check for odd numbers, invert this condition.":"检查数字是否为偶数(可被2整除)。要检查奇数,反转此条件。","Is even?":"是偶数吗?","_PARAM1_ is even":"_PARAM1_是偶数","Extended variables support":"扩展的变量支持","Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.":"添加条件、动作和表达式来检查变量的存在,复制变量,从内存中删除现有变量,并创建动态变量。","Check if a global variable exists.":"检查全局变量是否存在。","Global variable exists":"全局变量存在","If the global variable _PARAM1_ exist":"如果全局变量_PARAM1_存在","Name of the global variable":"全局变量的名称","Check if the global variable exists.":"检查全局变量是否存在。","Check if a scene variable exists.":"检查场景变量是否存在。","Scene variable exists":"场景变量存在","If the scene variable _PARAM1_ exist":"如果场景变量_PARAM1_存在","Name of the scene variable":"场景变量的名称","Check if the scene variable exists.":"检查场景变量是否存在。","Check if an object variable exists.":"检查对象变量是否存在。","Object variable exists":"对象变量存在","Object _PARAM1_ has object variable _PARAM2_":"对象_PARAM1_有对象变量_PARAM2_","Name of object variable":"对象变量的名称","Delete a global variable, removing it from memory.":"删除全局变量,从内存中删除。","Delete global variable":"删除全局变量","Delete global variable _PARAM1_":"删除全局变量_PARAM1_","Name of the global variable to delete":"要删除的全局变量的名称","Delete the global variable, removing it from memory.":"删除全局变量,从内存中删除。","Delete the global variable _PARAM1_ from memory":"从内存中删除全局变量_PARAM1_","Modify the text of a scene variable.":"修改场景变量的文本。","String of a scene variable":"场景变量的字符串","Change the text of scene variable _PARAM1_ to _PARAM2_":"将场景变量_PARAM1_的文本更改为_PARAM2_","Modify the text of a global variable.":"修改全局变量的文本。","String of a global variable":"全局变量的字符串","Change the text of global variable _PARAM1_ to _PARAM2_":"将全局变量 _PARAM1_ 的文本更改为 _PARAM2_","Modify the value of a global variable.":"修改全局变量的值。","Value of a global variable":"全局变量的值","Change the global variable _PARAM1_ with value: _PARAM2_":"将全局变量 _PARAM1_ 的值更改为:_PARAM2_","Modify the value of a scene variable.":"修改场景变量的值。","Value of a scene variable":"场景变量的值","Change the scene variable _PARAM1_ with value: _PARAM2_":"将场景变量 _PARAM1_ 的值更改为:_PARAM2_","Delete scene variable, the variable will be deleted from the memory.":"删除场景变量,该变量将从内存中删除。","Delete scene variable":"删除场景变量","Delete the scene variable _PARAM1_":"删除场景变量 _PARAM1_","Name of the scene variable to delete":"要删除的场景变量名称","Delete the scene variable, the variable will be deleted from the memory.":"删除场景变量,该变量将从内存中删除。","Delete the scene variable _PARAM1_ from memory":"从内存中删除场景变量 _PARAM1_","Copy an object variable from one object to another.":"将对象变量从一个对象复制到另一个对象。","Copy an object variable":"复制对象变量","Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_":"将 _PARAM1_ 的值变量复制到 _PARAM3_ 的值变量","Source object":"源对象","Variable to copy":"要复制的变量","Destination object":"目标对象","To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.":"要将变量在同一对象的2个实例之间复制,必须先将变量复制到另一个对象。","Destination variable":"目标变量","Copy the object variable from one object to another.":"将对象变量从一个对象复制到另一个对象。","Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)":"将_PARAM1_的变量_PARAM2_复制到变量_PARAM3_的_PARAM4_(首先清空目标:_PARAM5_)","Clear the destination variable before copying":"在复制之前清除目标变量","Copy all object variables from one object to another.":"将一个对象的所有变量复制到另一个对象。","Copy all object variables":"复制所有对象变量","Copy all variables from _PARAM1_ to _PARAM2_":"将所有变量从_PARAM1_复制到_PARAM2_","Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)":"将对象_PARAM1_的所有变量复制到对象_PARAM2_(首先清空目标:_PARAM3_)","Delete an object variable, removing it from memory.":"删除对象变量,从内存中移除。","Delete object variable":"删除对象变量","Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory":"从内存中删除对象_PARAM1_的对象变量_PARAM2_","Return the text of a global variable.":"返回全局变量的文本。","Text of a global variable":"全局变量的文本","Return the text of a scene variable.":"返回场景变量的文本。","Text of a scene variable":"场景变量的文本","Return the value of a global variable.":"返回全局变量的值。","Return the value of a scene variable.":"返回场景变量的值。","Copy the global variable to scene. This copy everything from the types to the values.":"将全局变量复制到场景。 这会将一切从类型到值复制。","Copy a global variable to scene":"将全局变量复制到场景","Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)":"将全局变量:_PARAM1_复制到场景变量:_PARAM2_(首先清空目标:_PARAM3_)","Global variable to copy":"要复制的全局变量","Scene variable destination":"场景变量目的地","Copy the scene variable to global. This copy everything from the types to the values.":"将场景变量复制到全局变量中。这将复制类型到值中的每一项。","Copy a scene variable to global":"将场景变量复制到全局","Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)":"将场景变量:_PARAM1_复制到全局变量:_PARAM2_(首先清除目标: _PARAM3_)","Scene variable to copy":"要复制的场景变量","Global variable destination":"全局变量目的地","Frames per second (FPS)":"每秒帧数(FPS)","Calculate and display the frames per second (FPS) of the game.":"计算并显示每秒帧数 (FPS)。","Frames per second (FPS) during the last second.":"上一个秒内的每秒帧数(FPS)。","Frames Per Second (FPS)":"每秒帧数(FPS)","Frames per second (FPS) during the last second. [Deprecated]":"上一个秒内的每秒帧数(FPS)。[已弃用]","Frames Per Second (FPS) [Deprecated]":"每秒帧数(FPS) [已弃用]","The accuracy of the FPS":"FPS的准确性","This tells how many numbers after the period should be shown.":"此项定义小数点后应该显示的数字的数量。","Makes a text object display the current FPS.":"使文本对象显示当前FPS。","FPS Displayer":"FPS展示器","FPS counter prefix":"FPS计数器前缀","Number of decimal digits":"小数位数","Face Forward":"面朝前方","Face object towards the direction of movement.":"将对象的面向与移动方向对齐。","Face forward":"面向正面","Rotation speed (degrees per second)":"旋转速度(每秒的度数)","Use \"0\" for immediate turning.":"使用\"0\"进行立即转向。","Offset angle":"偏移角度","Can be used when the image of the object is not facing to the right.":"当对象的图像不面向右侧时可使用。","Previous X position":"之前的X位置","Previous Y position":"之前的Y位置","Direction the object is moving (in degrees)":"对象移动的方向(以度为单位)","Set rotation speed (degrees per second). Use \"0\" for immediate turning.":"设置旋转速度(每秒度)。将“0”用于立即转向。","Set rotation speed":"设置旋转速度","Set rotation speed of _PARAM0_ to _PARAM2_":"将_PARAM0_的旋转速度设置为_PARAM2_","Rotation Speed":"旋转速度","Set offset angle.":"设置偏移角度。","Set offset angle":"设置偏移角度","Set offset angle of _PARAM0_ to _PARAM2_":"将_PARAM0_的偏移角度设置为_PARAM2_","Rotation speed (in degrees per second).":"旋转速度(每秒度数)。","Rotation speed":"旋转速度","Rotation speed of _PARAM0_":"_PARAM0_的旋转速度","Offset angle.":"偏移角度。","Direction the object is moving (in degrees).":"物体移动的方向(以度为单位)。","Movement direction":"移动方向","Fire bullets":"开火子弹","Fire bullets, manage ammo, reloading and overheating.":"开火子弹,管理弹药、重新装填和过热。","Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).":"以内置冷却时间、弹药、重装和过热功能发射子弹。一旦添加到您的必须射击的对象中,使用行为动作将另一个对象作为子弹发射。这些动作会内部检查所有约束(可以在没有条件的情况下调用,只有在准备好时才会发射),并使子弹移动(使用永久性力量)。","Firing cooldown":"射击冷却","Objects cannot shoot while firing cooldown is active.":"在射击冷却活动时,对象无法射击。","Rotate bullets to match their trajectory":"旋转子弹以匹配其轨迹","Firing arc":"射击弧","Multi-Fire bullets will be evenly spaced inside the firing arc":"多重射击的子弹将均匀分布在射击弧内","Multi-Fire":"多重射击","Number of bullets created at once":"一次创建的子弹数量","Angle variance":"角度差异","Make imperfect aim (between 0 and 180 degrees).":"产生不完美瞄准(在0到180度之间)。","Firing variance":"射击变异","Bullet speed variance":"子弹速度变异","Bullet speed will be adjusted by a random value within this range.":"子弹速度将在此范围内被随机值调整。","Ammo quantity (current)":"当前弹药数量 (current)","Shots per reload":"每次装填的射击数","Use 0 to disable reloading.":"使用 0 禁用重新装填。","Reload":"装填","Reloading duration":"装填持续时间","Objects cannot shoot while reloading is in progress.":"在重新装填进行中,对象不能射击。","Max ammo":"最大弹药量","Ammo":"弹药","Shots before next reload":"下次装填前的射击次数","Total shots fired":"总射击次数","Regardless of how many bullets are created, only 1 shot will be counted per frame":"无论创建了多少子弹,每帧只计数1次射击。","Total bullets created":"总共创建的子弹数量","Starting ammo":"初始弹药","Total reloads completed":"完成的总装填次数","Unlimited ammo":"无限弹药","Heat increase per shot (between 0 and 1)":"每发子弹的热量增加(在0和1之间)","Object is overheated when Heat reaches 1.":"当热量达到1时,对象过热。","Overheat":"过热","Heat level (Range: 0 to 1)":"热量水平(范围:0至1)","Reload automatically":"自动装填","Overheat duration":"过热持续时间","Object cannot shoot while overheat duration is active.":"对象在过热持续时间活跃期间不能射击。","Linear cooling rate (per second)":"线性冷却速率(每秒)","Exponential cooling rate (per second)":"指数冷却速率(每秒)","Happens faster when heat is high and slower when heat is low.":"当热量高时冷却速率更快,热量低时冷却速率更慢。","Layer the bullets are created on":"创建子弹的层","Base layer by default.":"默认的基础层。","Shooting configuration":"射击配置","Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"以指定的速度朝向对象发射子弹。持续调用此操作,该动作在内部检查准备状态——无需额外的定时器或检查。","Fire bullets toward an object":"朝向物体发射子弹","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s":"从_PARAM0_发射_PARAM4_(如果准备好),在位置_PARAM2_;_PARAM3_,朝向_PARAM5_以速度_PARAM6_ px/s","X position, where to create the bullet":"创建子弹的X位置","Y position, where to create the bullet":"创建子弹的Y位置","The bullet object":"子弹对象","Target object":"目标对象","Speed of the bullet, in pixels per second":"子弹速度,每秒像素数","Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"以指定的速度朝着一个位置发射子弹。持续调用此操作,该动作在内部检查准备状态——无需额外的定时器或检查。","Fire bullets toward a position":"朝向位置发射子弹","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s":"从_PARAM0_发射_PARAM4_(如果准备好),在位置_PARAM2_;_PARAM3_,朝向位置_PARAM5_;_PARAM6_以速度_PARAM7_ px/s","Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"以给定角度和指定速度发射子弹。持续调用此操作,动作会在内部检查准备情况——无需额外的计时器或检查。","Fire bullets toward an angle":"朝特定角度发射子弹","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s":"从_PARAM0_发射_PARAM4_(如果准备就绪),位于位置_PARAM2_;_PARAM3_,朝着角度_PARAM5_和速度_PARAM6_ px/s","Angle of the bullet, in degrees":"子弹的角度,以度为单位","Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.":"发射单颗子弹。此动作仅可在“发射子弹”动作内使用。","Fire a single bullet":"发射单颗子弹","Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s":"从位置_PARAM0_发射单颗_PARAM4_,在位置_PARAM2_; _PARAM3_,以角度_PARAM5_和速度_PARAM6_ px/s发射子弹","Reload ammo.":"装载弹药。","Reload ammo":"装载弹药","Reload ammo on _PARAM0_":"重新装填_PARAM0_上的弹药","Check if the object has just fired something.":"检查物体是否刚刚发射了什么。","Has just fired":"刚刚发射","_PARAM0_ has just fired":"_PARAM0_刚刚发射","Check if bullet rotates to match trajectory.":"检查子弹是否旋转以匹配弹道。","Is bullet rotation enabled":"子弹是否启用旋转","Bullet rotation enabled on _PARAM0_":"启用 _PARAM0_ 的子弹旋转","the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.":"子弹发射范围(度数),子弹在发射范围内均匀分布。","the firing arc":"发射范围","Firing arc (degrees) Range: 0 to 360":"发射范围(度数) 范围: 0 到 360","Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.":"更改子弹发射范围(度数),其中子弹将会均匀分布于发射范围内。","Set firing arc (deprecated)":"设置发射范围(已弃用)","Set firing arc of _PARAM0_ to _PARAM2_ degrees":"将 _PARAM0_ 的发射范围设置为 _PARAM2_ 度","the angle variance (in degrees) applied to each bullet.":"应用于每颗子弹的角度差异(度数)。","the angle variance":"角度差异","Angle variance (degrees) Range: 0 to 180":"角度差异(度数) 范围: 0 到 180","Change the angle variance (in degrees) applied to each bullet.":"更改每颗子弹的角度差异(度数)。","Set angle variance (deprecated)":"设置角度差异(已弃用)","Set angle variance of _PARAM0_ to _PARAM2_ degrees":"将 _PARAM0_ 的角度差异设置为 _PARAM2_ 度","the bullet speed variance (pixels per second) applied to each bullet.":"应用于每颗子弹的速度差异(每秒像素数)。","the bullet speed variance":"速度差异","Change the speed variance (pixels per second) applied to each bullet.":"更改应用于每颗子弹的速度差异(每秒像素数)。","Set bullet speed variance (deprecated)":"设置子弹速度差异(已弃用)","Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second":"将 _PARAM0_ 的子弹速度差异设置为 _PARAM2_ 每秒像素","the number of bullets shot every time the \"fire bullet\" action is used.":"每次使用“发射子弹”动作射出的子弹数量。","Bullets per shot":"每发射的子弹数","the number of bullets per shot":"每次发射的子弹数量","Bullets":"子弹","Change the number of bullets shot every time the \"fire bullet\" action is used.":"更改每次使用“发射子弹”动作射出的子弹数量。","Set number of bullets per shot (deprecated)":"设置每次发射的子弹数量(已弃用)","Set number of bullets per shot of _PARAM0_ to _PARAM2_":"将 _PARAM0_ 每次发射的子弹数量设置为 _PARAM2_","Change the layer that bullets are created on.":"创建子弹的图层。","Set bullet layer":"设置子弹图层","Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_":"将用于发射由 _PARAM0_ 射出的子弹的图层设置为 _PARAM2_","Enable bullet rotation.":"启用子弹旋转。","Enable (or disable) bullet rotation":"启用(或禁用)子弹旋转","Enable bullet rotation on _PARAM0_: _PARAM2_":"在 _PARAM0_ 上启用子弹旋转:_PARAM2_","Rotate bullet to match trajetory":"使子弹旋转匹配轨迹","Enable unlimited ammo.":"启用无限子弹。","Enable (or disable) unlimited ammo":"启用(或禁用)无限弹药","Enable unlimited ammo on _PARAM0_: _PARAM2_":"在_PARAM0_上启用无限弹药:_PARAM2_","the firing cooldown (in seconds) also known as rate of fire.":"射击冷却时间(秒),也称为射速。","the firing cooldown":"射击冷却时间","Cooldown in seconds":"冷却时间(秒)","Change the firing cooldown, which changes the rate of fire.":"更改射击冷却时间,这将改变射速。","Set firing cooldown (deprecated)":"设置射击冷却时间(已弃用)","Set the fire rate of _PARAM0_ to _PARAM2_ seconds":"将_PARAM0_的开火速率设置为_PARAM2_秒","the reload duration (in seconds).":"重装时间(秒)。","Reload duration":"重装时间","the reload duration":"重装时间","Reload duration (seconds)":"重装时间(秒)","Change the duration to reload ammo.":"更改重新装填弹药的时间。","Set reload duration (deprecated)":"设置重新装填时间(已弃用)","Set the reload duration of _PARAM0_ to _PARAM2_ seconds":"将_PARAM0_的重新装填时间设置为_PARAM2_秒","the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.":"过热持续时间(秒)。当物体过热时,无法在此持续时间内发射。","the overheat duration":"过热持续时间","Overheat duration (seconds)":"过热持续时间(秒)","Change the duration after becoming overheated.":"更改物体过热后的持续时间。","Set overheat duration (deprecated)":"设置过热持续时间(已弃用)","Set the overheat duration of _PARAM0_ to _PARAM2_ seconds":"将_PARAM0_的过热持续时间设置为_PARAM2_秒","the ammo quantity.":"弹药数量。","Ammo quantity":"弹药数量","the ammo quantity":"弹药数量","Change the quantity of ammo.":"更改弹药的数量。","Set ammo quantity (deprecated)":"设置弹药数量(已弃用)","Set the ammo quantity of _PARAM0_ to _PARAM2_":"将_PARAM0_的弹药数量设置为_PARAM2_","the heat increase per shot.":"每发射增加的热量。","Heat increase per shot":"每发射增加的热量","the heat increase per shot":"每发射增加的热量","Heat increase per shot (Range: 0 to 1)":"每发射增加的热量(范围:0至1)","Change the heat increase per shot.":"更改每发射增加的热量。","Set heat increase per shot (deprecated)":"设置每发射增加热量(已弃用)","Set the heat increase of _PARAM0_ to _PARAM2_ per shot":"将_PARAM0_的每发射增加的热量设置为_PARAM2_","the max ammo.":"最大弹药。","the max ammo":"最大弹药","Change the max ammo.":"更改最大弹药量。","Set max ammo (deprecated)":"设置最大弹药(已弃用)","Set the max ammo of _PARAM0_ to _PARAM2_":"将_PARAM0_的最大弹药设置为_PARAM2_","Reset total shots fired.":"重置已发射的总子弹数。","Reset total shots fired":"重置已发射的总子弹数","Reset total shots fired by _PARAM0_":"重置_PARAM0_发射的总子弹数","Reset total bullets created.":"重置已创建的总子弹数。","Reset total bullets created":"重置已创建的总子弹数","Reset total bullets created by _PARAM0_":"重置_PARAM0_创建的总子弹数","Reset total reloads completed.":"重置已完成的总装弹次数。","Reset total reloads completed":"重置已完成的总装弹次数","Reset total reloads completed by _PARAM0_":"重置_PARAM0_完成的总装弹次数","the number of shots per reload.":"每次装弹的射击次数。","the shots per reload":"每次装弹的射击次数","Change the number of shots per reload.":"更改每次装弹的射击次数。","Set shots per reload (deprecated)":"设置射击次数(已弃用)","Set the shots per reload of _PARAM0_ to _PARAM2_":"将_PARAM0_的每次装弹的射击次数设置为_PARAM2_","Enable (or disable) automatic reloading.":"启用(或禁用)自动装弹。","Enable (or disable) automatic reloading":"启用(或禁用)自动装弹","Enable automatic reloading on _PARAM0_: _PARAM2_":"在_PARAM0_上启用自动装弹:_PARAM2_","Enable automatic reloading":"启用自动装弹","the linear cooling rate (per second).":"线性冷却速率(每秒)。","Linear cooling rate":"线性冷却速率","the linear cooling rate":"线性冷却速率","Heat cooling rate (per second)":"热冷却速率(每秒)","Change the linear rate of cooling.":"更改线性冷却速率。","Set linear cooling rate (deprecated)":"设置线性冷却速率(已弃用)","Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second":"将_PARAM0_的线性冷却速率设置为每秒_PARAM2_","the exponential cooling rate, per second.":"指数冷却速率,每秒。","Exponential cooling rate":"指数冷却速率","the exponential cooling rate":"指数冷却速率","Change the exponential rate of cooling.":"更改指数冷却速率。","Set exponential cooling rate (deprecated)":"设置指数冷却速率(已弃用)","Set the exponential cooling rate of _PARAM0_ to _PARAM2_":"将_PARAM0_的指数冷却速率设置为每秒_PARAM2_","Increase ammo quantity.":"增加弹药数量。","Increase ammo":"增加弹药","Increase ammo of _PARAM0_ by _PARAM2_ shots":"增加 _PARAM0_ 的弹药 _PARAM2_ 发","Ammo gained":"获得弹药","Layer that bullets are created on.":"子弹创建的层。","Bullet layer":"子弹层","the heat level (range: 0 to 1).":"热量水平(范围:0 到 1)。","Heat level":"热量水平","the heat level":"热量水平","Total shots fired (multi-bullet shots are considered one shot).":"总共射击次数(多弹射被视为一次射击)。","Shots fired":"射击次数","Total bullets created.":"总共创建的子弹。","Bullets created":"已创建子弹","Reloads completed.":"装填完成。","Reloads completed":"装填完成","the remaining shots before the next reload is required.":"在需要下一次装填之前剩余的子弹数。","the remaining shots (before the next reload)":"剩余的子弹数(在下次装填之前)","the remaining duration before the cooldown will permit a bullet to be fired, in seconds.":"在冷却结束前剩余的持续时间,以秒计。","Duration before cooldown end":"冷却结束前的持续时间","the remaining duration before the cooldown end":"冷却结束前的剩余持续时间","the remaining duration before the overheat penalty ends, in seconds.":"在过热惩罚结束前剩余的持续时间,以秒计。","Duration before overheat end":"过热结束前的持续时间","the remaining duration before the overheat end":"过热结束前的剩余持续时间","the remaining duration before the reload finishes, in seconds.":"在装填完成前剩余的持续时间,以秒计。","Duration before the reload finishes":"装填结束前的持续时间","the remaining duration before the reload finishes":"装填结束前的剩余持续时间","Check if object is currently performing an ammo reload.":"检查对象当前是否正在进行弹药装填。","Is ammo reloading in progress":"弹药是否正在进行装填","_PARAM0_ is reloading ammo":"_PARAM0_正在重新加载弹药","Check if object is ready to shoot.":"检查对象是否准备射击。","Is ready to shoot":"可以进行射击","_PARAM0_ is ready to shoot":"_PARAM0_已准备好射击","Check if automatic reloading is enabled.":"检查自动装填是否已启用。","Is automatic reloading enabled":"自动装填是否已启用","Automatic reloading is enabled on_PARAM0_":"自动重新装填已启用_PARAM0_上","Check if ammo is unlimited.":"检查弹药是否无限制。","Is ammo unlimited":"弹药是否无限制","_PARAM0_ has unlimited ammo":"_PARAM0_具有无限弹药","Check if object has no ammo available.":"检查对象是否没有可用的弹药。","Is out of ammo":"弹药已用尽","_PARAM0_ is out of ammo":"_PARAM0_已用尽弹药","Check if object needs to reload ammo.":"检查对象是否需要装填弹药。","Is a reload needed":"需要进行装填","_PARAM0_ needs to reload ammo":"_PARAM0_需要重新装填弹药","Check if object is overheated.":"检查对象是否过热。","Is overheated":"已过热","_PARAM0_ is overheated":"_PARAM0_已过热","Check if firing cooldown is active.":"检查射击冷却是否激活。","Is firing cooldown active":"射击冷却是否激活","Firing cooldown is active on _PARAM0_":"触发冷却时间已在_PARAM0_上激活","First person 3D camera":"第一人称 3D 摄像头","Move the camera to look though objects eyes.":"将摄像头移动以通过对象的视角查看。","Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","Look through object eyes":"从对象的视角观看","Move the camera of _PARAM2_ to look though _PARAM1_ eyes":"使_PARAM2_的相机从_PARAM1_的视角看","Move the camera of _PARAM3_ to look though _PARAM1_ eyes":"Move the camera of _PARAM3_ to look though _PARAM1_ eyes","3D Object":"3D Object","Flash object":"闪光对象","Make an object flash visibility (blink), color tint, object effect, or opacity (fade).":"使对象闪烁可见性(闪烁)、颜色着色、对象效果或不透明度(淡化)。","Color tint applied to an object.":"应用于对象的颜色色调。","Color tint applied to an object":"应用于对象的颜色色调","Color tint applied to _PARAM1_":"应用于 _PARAM1_ 的颜色色调","Check if a color tint is applied to an object.":"检查对象是否应用颜色色调。","Is a color tint applied to an object":"对象应用颜色色调吗","_PARAM1_ is color tinted":"_PARAM1_是有色调的","Toggle color tint between the starting tint and a given value.":"在起始色调和给定值之间切换颜色调。","Toggle a color tint":"切换颜色调","Toggle color tint _PARAM2_ on _PARAM1_":"在_PARAM1_上切换_PARAM2_的颜色调","Color tint":"颜色调","Toggle object visibility.":"切换对象可见性。","Toggle object visibility":"切换对象可见性","Toggle visibility of _PARAM1_":"切换_PARAM1_的可见性","Make the object flash (blink) for a period of time so it alternates between visible and invisible.":"使对象在一段时间内闪烁,交替可见和不可见。","Flash visibility (blink)":"闪烁可见性","Half period":"半个周期","Time that the object is invisible":"对象不可见的时间","Flash duration":"闪烁持续时间","Use \"0\" to keep flashing until stopped":"使用\"0\"以使其持续闪烁直到停止","Make an object flash (blink) visibility for a period of time.":"使一个对象在一段时间内闪烁可见","Make _PARAM0_ flash (blink) for _PARAM2_ seconds":"使_PARAM0_在_PARAM2_秒内闪烁","Duration of the flashing, in seconds":"闪烁持续时间(秒)","Use \"0\" to keep flashing until stopped.":"使用“0”保持闪烁直到停止","Check if an object is flashing visibility.":"检查对象是否正在闪烁可见","Is object flashing visibility":"对象是否正在闪烁可见","_PARAM0_ is flashing":"_PARAM0_正在闪烁","Stop flashing visibility (blink) of an object.":"停止对象闪烁可见","Stop flashing visibility (blink)":"停止闪烁可见","Stop flashing visibility of _PARAM0_":"停止闪烁_PARAM0_的可见性","the half period of the object (time the object is invisible).":"对象的半周期(对象不可见的时间)","the half period (time the object is invisible)":"半周期(对象不可见的时间)","Make an object flash a color tint for a period of time.":"使对象在一段时间内闪烁有色调","Flash color tint":"闪烁有色调","Time between flashes":"闪烁之间的时间","Tint color":"着色","Flash a color tint":"闪烁颜色色调","Make _PARAM0_ flash the color tint _PARAM3_ for _PARAM2_ seconds":"使_PARAM0_在_PARAM2_秒内闪烁颜色色调_PARAM3_","Check if an object is flashing a color tint.":"检查对象是否正在闪烁颜色色调","Is object flashing a color tint":"对象是否正在闪烁颜色色调","_PARAM0_ is flashing a color tint":"_PARAM0_正在闪烁颜色色调","Stop flashing a color tint on an object.":"停止对象闪烁颜色色调","Stop flashing color tint":"停止闪烁颜色色调","Stop flashing color tint _PARAM0_":"停止闪烁颜色色调_PARAM0_","the half period (time between flashes) of the object.":"对象的半周期(闪烁间的时间)","the half period (time between flashes)":"半周期(闪烁间的时间)","Flash opacity smoothly (fade) in a repeating loop.":"以重复循环平滑地闪烁不透明度。","Flash opacity smothly (fade)":"平滑地闪烁不透明度","Opacity capability":"不透明度能力","Tween Behavior (required)":"插值行为(必需)","Target opacity (Range: 0 - 255)":"目标不透明度(范围:0 - 255)","Opacity will fade between the starting value and a target value":"不透明度将在起始值和目标值之间淡出","Starting opacity":"起始不透明度","Make an object flash opacity smoothly (fade) in a repeating loop.":"使一个对象的不透明度平稳闪烁","Flash the opacity (fade)":"闪烁不透明度(渐变)","Make _PARAM0_ flash opacity smoothly to _PARAM4_ in a loop for _PARAM3_ seconds":"使_PARAM0_不透明度平稳闪烁至_PARAM4_,循环_PARAM3_秒","Target opacity":"目标不透明度","Check if an object is flashing opacity.":"检查对象是否正在闪烁不透明度","Is object flashing opacity":"对象是否正在闪烁不透明度","_PARAM0_ is flashing opacity":"_PARAM0_正在闪烁不透明度","Stop flashing opacity of an object.":"停止对象的不透明度闪烁","Stop flashing opacity":"停止闪烁不透明度","Stop flashing opacity of _PARAM0_":"停止_PARAM0_的不透明度闪烁","Make the object flash an effect for a period of time.":"使对象在一段时间内闪烁效果。","Flash effect":"闪烁效果","Name of effect":"效果的名称","Make an object flash an effect for a period of time.":"使一个对象在一段时间内闪烁效果","Flash an effect":"闪烁一个效果","Make _PARAM0_ flash the effect _PARAM3_ for _PARAM2_ seconds":"使_PARAM0_闪烁效果_PARAM3_持续_PARAM2_秒","Check if an object is flashing an effect.":"检查对象是否闪烁了一个效果。","Is object flashing an effect":"对象是否正在闪烁一个效果","_PARAM0_ is flashing an effect":"_PARAM0_正在闪烁一个效果","Stop flashing an effect of an object.":"停止对象的一个效果闪烁。","Stop flashing an effect":"停止闪烁一个效果","Stop flashing an effect on _PARAM0_":"停止_PARAM0_的一个效果闪烁","Toggle an object effect.":"切换对象效果。","Toggle an object effect":"切换对象效果","Toggle effect _PARAM2_ on _PARAM0_":"在_PARAM0_上切换效果_PARAM2_","Effect name to toggle":"要切换的效果名称","Flash layer":"Flash 图层","Make a layer visible for a specified duration, and then hide the layer.":"让一个图层在指定的持续时间内可见,然后隐藏该图层。","Make layer _PARAM1_ visible for _PARAM2_ seconds":"使图层_PARAM1_在_PARAM2_秒后可见","Flash and transition painter":"Flash 和过渡绘图工具","Paint transition effects with a plain color.":"使用单色绘制过渡效果。","Paint all over the screen a color for a period of time.":"在一段时间内在屏幕上涂抹颜色。","Type of effect":"效果类型","Direction of transition":"过渡方向","The maximum of the opacity only for flash":"仅限闪烁的最大不透明度","Paint Effect.":"绘制效果。","Paint Effect":"绘制效果","Paint effect type _PARAM4_ of _PARAM0_ with direction _PARAM5_ and color _PARAM2_ for _PARAM3_ seconds":"绘制效果类型_PARAM4_的_PARAM0_以方向_PARAM5_和颜色_PARAM2_持续_PARAM3_秒","Direction transition":"方向过渡","End opacity":"结束不透明度","Paint effect ended.":"绘制效果结束。","Paint effect ended":"绘制效果结束","When paint effect of _PARAM0_ ends":"当_PARAM0_的绘制效果结束时","Follow multiple 2D objects with the camera":"跟随多个 2D 物体与相机","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen.":"改变摄像机的缩放和位置,以确保屏幕上的所有对象实例(或对象组)都能显示。","Follow multiple objects with camera":"跟随多个对象进行摄像机跟随","Move camera to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Max zoom: _PARAM4_. Move the camera at a speed of _PARAM5_":"移动相机以在屏幕上保持_PARAM1_的实例。水平和垂直分别使用_PARAM2_px和_PARAM3_px的边距。最大缩放:_PARAM4_。相机以_PARAM5_的速度移动","Object (or Object group)":"对象(或对象组)","Extra space on sides of screen":"屏幕边缘的额外空间","Each side will include this buffer":"每一边都将包含此缓冲区","Extra space on top and bottom of screen":"屏幕顶部和底部的额外空间","Maximum zoom level (Default: 1)":"最大缩放级别(默认值:1)","Limit how far the camera will zoom in":"限制相机缩放的程度","Camera move speed (Range: 0 to 1) (Default: 0.05)":"相机移动速度(范围:0到1)(默认值:0.05)","Percent of distance to destination that will be travelled each frame (used by lerp function)":"每帧移动到目标距离的百分比(由lerp函数使用)","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen. (Deprecated)":"更改缩放和相机位置,以使对象(或对象组)的所有实例都在屏幕上(已弃用)","Follow multiple objects with camera (Deprecated)":"使用缩放和位置来跟踪相机中的多个对象(已弃用)","Move camera on layer _PARAM6_ to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Use a zoom between _PARAM4_ and _PARAM5_. Move the camera at a speed of _PARAM8_":"将图层_PARAM6_上的相机移动,以保持屏幕上的_PARAM1_实例。水平和垂直各使用_PARAM2_px的边距。在_PARAM4_和_PARAM5_之间使用缩放。以_PARAM8_的速度移动相机","Minimum zoom level":"最小缩放级别","Limit how far the camera will zoom OUT":"限制相机的最大缩放程度","Limit how far the camera will zoom IN":"限制相机的最小缩放程度","Use \"\" for base layer":"用于基础图层的\"\"","Gamepads (controllers)":"游戏手柄(控制器)","Add support for gamepads (or other controllers) to your game, giving access to information such as button presses, axis positions, trigger pressure, etc...":"为您的游戏添加对游戏手柄(或其他控制器)的支持,以便访问诸如按钮按下、轴位、扳机压力等信息。","Accelerated speed":"加速速度","Current speed":"当前速度","Targeted speed":"目标速度","Deceleration":"减速","Get the value of the pressure on a gamepad trigger.":"获取游戏手柄扳机上的压力值。","Pressure on a gamepad trigger":"游戏手柄扳机的压力","Player _PARAM1_ push axis _PARAM2_ to _PARAM3_":"玩家_PARAM1_按下轴_PARAM2_到_PARAM3_","The gamepad identifier: 1, 2, 3 or 4":"游戏手柄标识符:1、2、3或4","Trigger button":"触发按钮","the force of gamepad stick (from 0 to 1).":"游戏手柄摇杆的力度(从0到1)。","Stick force":"摇杆力量","the gamepad _PARAM1_ _PARAM2_ stick force":"游戏手柄_PARAM1__PARAM2_摇杆力度","Stick: \"Left\" or \"Right\"":"摇杆:\"左\"或\"右\"","Get the rotation value of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"获取游戏手柄摇杆的旋转值。如果死区值很高,则角度值四舍五入为主轴:左、左、上、下。零死区值会给予角度值完全自由。","Value of a stick rotation (deprecated)":"旋转棒的价值(已弃用)","Return the angle of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"返回游戏手柄摇杆的角度。\n如果死区值较高,则角度值将被四舍五入到主轴,向左,向右,向上,向下。\n零死区值将使角度值完全自由。","Stick angle":"摇杆角度","Get the value of axis of a gamepad stick.":"获取游戏手柄摇杆的轴值。","Value of a gamepad axis (deprecated)":"游戏手柄轴的值(已弃用)","Direction":"方向","Return the gamepad stick force on X axis (from -1 at the left to 1 at the right).":"返回游戏手柄X轴上的力量(从左侧的-1到右侧的1)。","Stick X force":"摇杆X力量","Return the gamepad stick force on Y axis (from -1 at the top to 1 at the bottom).":"返回游戏手柄Y轴上的力量(从顶部的-1到底部的1)。","Stick Y force":"摇杆Y力量","Test if a button is released on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"测试游戏手柄上的按钮是否已释放。按钮可以是:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* 其他: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button released":"游戏手柄按钮已释放","Button _PARAM2_ of gamepad _PARAM1_ is released":"_PARAM1_的游戏手柄_PARAM2_已释放","Name of the button":"按钮的名称","Check if a button was just pressed on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"检查游戏手柄上的按钮是否刚被按下。按钮可以是:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* 其他: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button just pressed":"游戏手柄按钮刚被按下","Button _PARAM2_ of gamepad _PARAM1_ was just pressed":"游戏手柄 _PARAM1_ 的按钮 _PARAM2_ 刚被按下","Return the index of the last pressed button of a gamepad.":"返回游戏手柄的最后按下按钮的索引。","Last pressed button (id)":"最后按下按钮(编号)","Check if any button is pressed on a gamepad.":"检查游戏手柄上是否按下任意按钮。","Any gamepad button pressed":"按下任意游戏手柄按钮","Any button of gamepad _PARAM1_ is pressed":"_PARAM1_的游戏手柄任意按钮被按下","Return the last button pressed. \nButtons for Xbox and PS4 can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Both: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"返回最后按下的按钮。\nXbox和PS4的按钮可以是:\n* Xbox:“A”,“B”,“X”,“Y”,“LB”,“RB”,“LT”,“RT”,“BACK”,“START”,\n* PS4:“CROSS”,“SQUARE”,“CIRCLE”,“TRIANGLE”,“L1”,“L2”,“R1”,“R2”,“SHARE”,“OPTIONS”,“PS_BUTTON”,“CLICK_TOUCHPAD”,\n* 两者:“UP”,“DOWN”,“LEFT”,“RIGHT”,“CLICK_STICK_LEFT”,“CLICK_STICK_RIGHT”。","Last pressed button (string)":"最后按下的按钮(字符串)","Button _PARAM2_ of gamepad _PARAM1_ is pressed":"_PARAM1_的游戏手柄_PARAM2_被按下","Controller type":"控制器类型","Return the number of gamepads.":"返回游戏手柄的数量。","Gamepad count":"游戏手柄数量","Check if a button is pressed on a gamepad. \nButtons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"检查游戏手柄上的按钮是否被按下。 按钮可以是:\n* Xbox:“A”,“B”,“X”,“Y”,“LB”,“RB”,“LT”,“RT”,“BACK”,“START”,\n* PS4:“CROSS”,“SQUARE”,“CIRCLE”,“TRIANGLE”,“L1”,“L2”,“R1”,“R2”,“SHARE”,“OPTIONS”,“PS_BUTTON”,“CLICK_TOUCHPAD”,\n* 其他:“UP”,“DOWN”,“LEFT”,“RIGHT”,“CLICK_STICK_LEFT”,“CLICK_STICK_RIGHT”。","Gamepad button pressed":"游戏手柄按钮被按下","Return the value of the deadzone applied to a gamepad sticks, between 0 and 1.":"返回应用于游戏手柄摇杆的死区值,范围为0到1。","Gamepad deadzone for sticks":"游戏手柄摇杆死区值","Set the deadzone for sticks of the gamepad. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved). Deadzone is between 0 and 1, and is by default 0.2.":"设置游戏手柄摇杆的死区值。 死区是在该区域内,摇杆的移动不会被考虑(相反,摇杆将被视为未移动)。 死区值在0到1之间,默认为0.2。","Set gamepad deadzone for sticks":"设置游戏手柄摇杆的死区值","Set deadzone for sticks on gamepad: _PARAM1_ to _PARAM2_":"设置游戏手柄摇杆的死区值:从_PARAM1_到_PARAM2_","Deadzone for sticks, 0.2 by default (0 to 1)":"摇杆的死区值,默认为0.2(0至1)","Check if a stick of a gamepad is pushed in a given direction.":"检查游戏手柄的摇杆是否向指定方向推动。","Gamepad stick pushed (axis)":"游戏手柄的摇杆被推动(轴)","_PARAM2_ stick of gamepad _PARAM1_ is pushed in direction _PARAM3_":"_PARAM2_ 游戏手柄 _PARAM1_ 的摇杆向 _PARAM3_ 方向推动","Return the number of connected gamepads.":"返回连接的游戏手柄数量。","Connected gamepads count":"连接的游戏手柄数量","Return a string containing informations about the specified gamepad.":"返回包含有关指定游戏手柄的信息的字符串。","Gamepad type":"游戏手柄类型","Player _PARAM1_ use _PARAM2_ controller":"玩家_PARAM1_使用_PARAM2_控制器","Check if the specified gamepad has the specified information in its description. Useful to know if the gamepad is a Xbox or PS4 controller.":"检查指定游戏手柄的描述中是否包含指定信息。 有助于知道游戏手柄是否为Xbox或PS4控制器。","Gamepad _PARAM1_ is a _PARAM2_ controller":"游戏手柄_PARAM1_是_PARAM2_控制器","Type: \"Xbox\", \"PS4\", \"Steam\" or \"PS3\" (among other)":"类型:\"Xbox\",\"PS4\",\"Steam\"或\"PS3\"(以及其他)","Check if a gamepad is connected.":"检查游戏手柄是否已连接。","Gamepad connected":"游戏手柄已连接","Gamepad _PARAM1_ is plugged and connected":"游戏手柄_PARAM1_已插上并已连接","Generate a vibration on the specified controller. Might only work if the game is running in a recent web browser.":"在指定控制器上生成振动。 如果游戏在最近的Web浏览器中运行,可能仅会起作用。","Gamepad vibration":"游戏手柄震动","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds":"使游戏手柄_PARAM1_振动_PARAM2_秒","Time of the vibration, in seconds (optional, default value is 1)":"震动时间,以秒为单位(可选,默认值为1)","Generate an advanced vibration on the specified controller. Incompatible with Firefox.":"在指定的控制器上生成高级震动。 与Firefox不兼容。","Advanced gamepad vibration":"高级游戏手柄震动","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds with the vibration magnitude of _PARAM3_ and _PARAM4_":"使游戏手柄_PARAM1_振动_PARAM2_秒,振动幅度为_PARAM3_和_PARAM4_","Strong rumble magnitude (from 0 to 1)":"强力振动幅度(从0到1)","Weak rumble magnitude (from 0 to 1)":"弱力振动幅度(从0到1)","Change a vibration on the specified controller. Incompatible with Firefox.":"更改指定控制器上的振动。 与Firefox不兼容。","Change gamepad active vibration":"更改游戏手柄的主动振动","Change the vibration magnitude of _PARAM2_ & _PARAM3_ on gamepad _PARAM1_":"更改游戏手柄_PARAM1_上的振动幅度_PARAM2_和_PARAM3_","Check if any button is released on a gamepad.":"检查游戏手柄是否有任何按钮释放。","Any gamepad button released":"任何游戏手柄按钮被释放","Any button of gamepad _PARAM1_ is released":"任何游戏手柄_PARAM1_的按钮已释放","Return the strength of the weak vibration motor on the gamepad of a player.":"返回玩家游戏手柄上弱振动电机的力度。","Weak rumble magnitude":"弱力振动幅度","Return the strength of the strong vibration motor on the gamepad of a player.":"返回玩家游戏手柄上强振动电机的力度。","Strong rumble magnitude":"强力振动幅度","Control a platformer character with a gamepad.":"使用游戏手柄控制平台游戏角色。","Platformer gamepad mapper":"平台游戏手柄映射器","Gamepad identifier (1, 2, 3 or 4)":"游戏手柄标识符(1、2、3或4)","Use directional pad":"使用方向键","Controls":"控制","Use left stick":"使用左摇杆","Use right stick":"使用右摇杆","Jump button":"跳跃按钮","Control a 3D physics character with a gamepad.":"使用游戏手柄控制3D物理角色","3D platformer gamepad mapper":"3D平台游戏手柄映射器","Walk joystick":"步行摇杆","3D shooter gamepad mapper":"3D射击游戏手柄映射程序","Camera joystick":"摄像头摇杆","Control camera rotations with a gamepad.":"使用游戏手柄控制摄像头旋转。","First person camera gamepad mapper":"第一人称摄像头游戏手柄映射器","Maximum rotation speed":"最大旋转速度","Horizontal rotation":"水平旋转","Rotation acceleration":"旋转加速度","Rotation deceleration":"旋转减速度","Vertical rotation":"垂直旋转","Minimum angle":"最小角度","Maximum angle":"最大角度","Z position offset":"Z位置偏移","Position":"位置","Current rotation speed Z":"当前旋转速度Z","Current rotation speed Y":"当前旋转速度Y","Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"使相机从_PARAM1_的视角看。当所有角度为0且头部朝向 Z+ 时,对象必须向右看。","Move the camera to look though _PARAM0_ eyes":"将摄像头移动到通过_PARAM0_的视角看。","the maximum horizontal rotation speed of the object.":"对象的最大水平旋转速度。","Maximum horizontal rotation speed":"最大水平旋转速度","the maximum horizontal rotation speed":"最大水平旋转速度","the horizontal rotation acceleration of the object.":"对象的水平旋转加速度。","Horizontal rotation acceleration":"水平旋转加速度","the horizontal rotation acceleration":"水平旋转加速度","the horizontal rotation deceleration of the object.":"对象的水平旋转减速。","Horizontal rotation deceleration":"水平旋转减速","the horizontal rotation deceleration":"水平旋转减速","the maximum vertical rotation speed of the object.":"对象的最大垂直旋转速度。","Maximum vertical rotation speed":"最大垂直旋转速度","the maximum vertical rotation speed":"目标的最大垂直旋转速度","the vertical rotation acceleration of the object.":"物体的垂直旋转加速度。","Vertical rotation acceleration":"垂直旋转加速度","the vertical rotation acceleration":"物体的垂直旋转加速度","the vertical rotation deceleration of the object.":"物体的垂直旋转减速度。","Vertical rotation deceleration":"垂直旋转减速度","the vertical rotation deceleration":"物体的垂直旋转减速度","the minimum vertical camera angle of the object.":"物体的最小垂直摄像机角度。","Minimum vertical camera angle":"最小垂直相机角度","the minimum vertical camera angle":"最小垂直摄像机角度","the maximum vertical camera angle of the object.":"物体的最大垂直摄像机角度。","Maximum vertical camera angle":"最大垂直相机角度","the maximum vertical camera angle":"最大垂直摄像机角度","the z position offset of the object.":"物体的 Z 位置偏移。","the z position offset":"Z 位置偏移。","Control a 3D physics car with a gamepad.":"Control a 3D physics car with a gamepad.","3D car gamepad mapper":"3D car gamepad mapper","3D physics car":"3D physics car","Hand brake button":"Hand brake button","Control a top-down character with a gamepad.":"使用游戏手柄控制顶部向下角色。","Top-down gamepad mapper":"顶部向下游戏手柄映射器","Top-down movement behavior":"顶部向下移动行为","Stick mode":"摇杆模式","Hash":"哈希","Hash with MD5 or SHA256.":"使用MD5或SHA256进行哈希。","Returns a Hash a MD5 based on a string.":"根据字符串返回基于MD5的哈希。","Hash a String with MD5":"使用MD5对字符串进行哈希","String to be hashed":"要进行哈希处理的字符串","Returns a Hash a SHA256 based on a string.":"根据字符串返回基于SHA256的哈希。","Hash a String with SHA256":"使用SHA256对字符串进行哈希","Health points and damage":"生命值和伤害","Manage health (life) points, shield and armor.":"管理生命(生命)值,护盾和装甲。","Health":"生命值","Starting health":"起始生命值","Current health (life) points":"当前生命值(生命)点数","Maximum health":"最大生命值","Use 0 for no maximum.":"使用0表示没有最大值。","Damage cooldown":"伤害冷却时间","Allow heals to increase health above max health (regen will never exceed max health)":"允许治疗使健康值超过最大健康值(再生永远不会超过最大健康值)","Damage to health from the previous incoming damage":"来自先前受到伤害的生命值减少","Chance to dodge incoming damage (between 0 and 1)":"闪避即将到来的伤害的几率(介于0和1之间)","When a damage is dodged, no damage is applied.":"当伤害被闪避时,不会应用伤害。","Health points gained from the previous heal":"从以前的治疗中获得的生命值","Rate of health regeneration (points per second)":"每秒健康再生率(每秒多少点)","Health regeneration":"健康再生","Health regeneration delay":"健康再生延迟","Delay before health regeneration starts after a hit.":"受伤后健康再生开始前的延迟。","Current shield points":"当前护盾点数","Shield":"护盾","Maximum shield":"最大护盾","Leave 0 for unlimited.":"将0留作无限。","Duration of shield":"护盾持续时间","Use 0 to make the shield permanent.":"使用0使护盾永久存在。","Rate of shield regeneration (points per second)":"护盾再生率(每秒多少点)","Shield regeneration":"护盾再生","Block excess damage when shield is broken":"护盾破裂时阻止过量伤害。","Shield regeneration delay":"护盾再生延迟","Delay before shield regeneration starts after a hit.":"受到攻击后护盾再生开始前的延迟。","Damage to shield from the previous incoming damage":"受到的上一次入侵伤害对护盾的伤害","Flat damage reduction from armor":"来自装甲的平坦伤害减少","Incoming damages are reduced by this value.":"入侵伤害将减少这个值。","Armor":"装甲","Percentage damage reduction from armor (between 0 and 1)":"来自装甲的百分比伤害减少(0和1之间)","Apply damage to the object. Shield and armor can reduce this damage if enabled.":"向对象应用伤害。如果启用,盾牌和盔甲可以减轻这种伤害。","Apply damage to an object":"向对象应用伤害","Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)":"将_PARAM0_的生命值更改为_PARAM2_点(伤害可以通过盾牌:_PARAM3_,护甲:_PARAM4_减少)","Points of damage":"伤害点","Shield can reduce damage taken":"盾牌可以减少受到的伤害","Armor can reduce damage taken":"盔甲可以减少受到的伤害","current health points of the object.":"物体的当前生命值。","Health points":"生命值","health points":"生命值","Change the health points of the object. Will not trigger damage cooldown.":"更改物体的生命值。不会触发伤害冷却。","Change health points":"更改生命值","Change the health of _PARAM0_ to _PARAM2_ points":"将_PARAM0_的生命值更改为_PARAM2_点。","New health value":"新的生命值","Change health points (deprecated)":"更改生命值(已弃用)","Heal the object by increasing its health points.":"通过增加其健康点数来治愈对象。","Heal object":"治疗对象","Heal _PARAM0_ with _PARAM2_ health points":"用_PARAM0_健康点数治愈_PARAM2_","Points to heal (will be added to object health)":"要治愈的点数(将会被添加到对象健康中)","the maximum health points of the object.":"对象的最大健康点数。","Maximum health points":"最大健康点数","the maximum health points":"对象的最大健康点数","Change the object maximum health points.":"改变对象的最大健康点数。","Maximum health points (deprecated)":"最大健康点数(已弃用)","Change the maximum health of _PARAM0_ to _PARAM2_ points":"将_PARAM0_的最大健康改变为_PARAM2_点","the rate of health regeneration (points per second).":"健康再生率(每秒的点数)。","Rate of health regeneration":"健康再生率","the rate of health regeneration":"健康再生率","Rate of regen":"再生率","Change the rate of health regeneration.":"改变健康再生率。","Rate of health regeneration (deprecated)":"健康再生率(已弃用)","Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second":"将_PARAM0_的健康再生率更改为_PARAM2_每秒的点数","the duration of damage cooldown (seconds).":"受伤冷却的持续时间(秒)。","the duration of damage cooldown":"受伤冷却的持续时间","Duration of damage cooldown (seconds)":"受伤冷却的持续时间(秒)","Change the duration of damage cooldown (seconds).":"改变受伤冷却的持续时间(秒)。","Damage cooldown (deprecated)":"伤害冷却(已弃用)","Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds":"将_PARAM0_受伤冷却的持续时间改变为_PARAM2_秒","the delay before health regeneration starts after last being hit (seconds).":"最后受到伤害后开始健康再生的延迟(秒)。","the health regeneration delay":"健康再生延迟","Delay (seconds)":"延迟(秒)","Change the delay before health regeneration starts after being hit.":"改变受伤后健康再生开始前的延迟。","Health regeneration delay (deprecated)":"健康再生延迟(已弃用)","Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds":"将_PARAM0_上的健康再生延迟改为_PARAM2_秒","the chance to dodge incoming damage (range: 0 to 1).":"闪避进入的伤害的几率(范围:0到1)。","Dodge chance":"闪避的几率","the chance to dodge incoming damage":"闪避进入的伤害的几率","Chance to dodge (Range: 0 to 1)":"闪避的几率(范围:0到1)","Change the chance to dodge incoming damage.":"改变闪避进入的伤害的几率。","Chance to dodge incoming damage (deprecated)":"闪避累进入的伤害(已弃用)","Change the chance to dodge on _PARAM0_ to _PARAM2_":"将_PARAM0_的闪避几率更改为_PARAM2_","the flat damage reduction from the armor. Incoming damage is reduced by this value.":"来自护甲的固定伤害减少。这个数值将减少所受到的伤害。","Armor flat damage reduction":"护甲的固定伤害减少","the armor flat damage reduction":"来自护甲的固定伤害减少","Flat reduction from armor":"护甲的固定减少","Change the flat damage reduction from armor. Incoming damage is reduced by this value.":"更改护甲的固定伤害减少。所受伤害将减少这个数值。","Flat damage reduction from armor (deprecated)":"护甲的固定伤害减少(已弃用)","Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points":"将护甲的固定伤害减少从_PARAM0_更改为_PARAM2_点","the percent damage reduction from armor (range: 0 to 1).":"来自护甲的百分比伤害减少(范围:0至1)。","Armor percent damage reduction":"护甲的百分比伤害减少","the armor percent damage reduction":"来自护甲的百分比伤害减少","Percent damage reduction from armor":"护甲的百分比减少","Change the percent damage reduction from armor. Range: 0 to 1.":"更改护甲的百分比伤害减少。范围:0至1。","Percent damage reduction from armor (deprecated)":"护甲的百分比伤害减少(已弃用)","Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_":"将护甲的百分比伤害减少从_PARAM0_更改为_PARAM2_","Allow heals to increase health above max health. Regeneration will not exceed max health.":"允许治疗使生命值提高到最大生命值以上。再生将不会超过最大生命值。","Allow over-healing":"允许过度治疗","Allow over-healing on _PARAM0_: _PARAM2_":"允许过度治疗在_PARAM0_:_PARAM2_","Mark object as hit at least once.":"标记对象至少被击中一次。","Mark object as hit at least once":"将对象标记为至少被击中一次","Mark _PARAM0_ as hit at least once: _PARAM2_":"将_PARAM0_标记为至少被击中一次:_PARAM2_","Hit at least once":"至少被击中一次","Mark object as just damaged.":"将对象标记为刚受到伤害。","Mark object as just damaged":"将对象标记为刚受到伤害","Mark _PARAM0_ as just damaged: _PARAM2_":"将_PARAM0_标记为刚受到伤害:_PARAM2_","Just damaged":"刚受到伤害","Trigger damage cooldown.":"触发伤害冷却。","Trigger damage cooldown":"触发伤害冷却","Trigger the damage cooldown on _PARAM0_":"触发_PARAM0_上的伤害冷却","Check if the object has been hit at least once.":"检查对象是否至少被击中一次。","Object has been hit at least once":"对象已经至少被击中一次","_PARAM0_ has been hit at least once":"_PARAM0_已经至少被击中一次","Check if health was just damaged previously in the events.":"检查事件中之前的生命值是否刚受到伤害。","Is health just damaged":"生命值刚刚受到伤害","Health has just been damaged on _PARAM0_":"健康刚刚在_PARAM0_上受损","Check if the object was just healed previously in the events.":"检查对象在事件中是否刚刚受到了治愈。","Is just healed":"刚刚受到治愈","_PARAM0_ has just been healed":"_PARAM0_刚刚被治愈","Check if damage cooldown is active. Object and shield cannot be damaged while this is active.":"检查伤害冷却是否激活。 在此期间,对象和护盾无法受到伤害。","Is damage cooldown active":"伤害冷却是否激活","Damage cooldown on _PARAM0_ is active":"Damage cooldown on _PARAM0_ is active","the time before damage cooldown ends (seconds).":"伤害冷却结束前的时间(秒)。","Time remaining in damage cooldown":"伤害冷却结束时剩余时间","the time before damage cooldown end":"伤害冷却结束前的时间","Check if the object is considered dead (no health points).":"检查对象是否被判断为死亡(没有生命值)。","Is dead":"已死亡","_PARAM0_ is dead":"_PARAM0_已死亡","the time since last taken hit (seconds).":"上次受到打击后的时间(秒)。","Time since last hit":"上次受到打击的时间","the time since last taken hit on health":"上次受到伤害后所经历的时间","the health damage taken from most recent hit.":"最近一次打击造成的健康伤害。","Health damage taken from most recent hit":"最近一次打击导致的健康损伤","the health damage taken from most recent hit":"最近一次受到的健康伤害","the maximum shield points of the object.":"对象的最大护盾点数。","Maximum shield points":"最大护盾点数","the maximum shield points":"最大护盾点数","Change the maximum shield points of the object.":"更改对象的最大护盾点数。","Maximum shield points (deprecated)":"最大护盾点数(已弃用)","Change the maximum shield of _PARAM0_ to _PARAM2_ points":"将_PARAM0_的最大护盾改为_PARAM2_点","Change maximum shield points.":"更改最大护盾点数。","Max shield points (deprecated)":"最大护盾点数(已弃用)","Change the maximum shield points on _PARAM0_ to _PARAM2_ points":"将_PARAM0_的最大护盾点数改为_PARAM2_点","Shield points":"护盾点数","the current shield points of the object.":"对象的当前护盾点数。","the shield points":"护盾点数","Change current shield points. Will not trigger damage cooldown.":"更改当前护盾点数。 不会触发伤害冷却。","Shield points (deprecated)":"护盾点数(已弃用)","Change current shield points on _PARAM0_ to _PARAM2_ points":"将_PARAM0_的当前护盾点数更改为_PARAM2_点","the rate of shield regeneration (points per second).":"护盾再生速率(每秒的点数)。","Rate of shield regeneration":"护盾再生速率","the rate of shield regeneration":"护盾再生率","Regeneration rate (points per second)":"再生率(每秒的点数)","Change rate of shield regeneration.":"更改护盾再生率。","Shield regeneration rate (deprecated)":"护盾再生率(已弃用)","Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second":"将_PARAM0_的护盾再生率更改为_PARAM2_每秒","the delay before shield regeneration starts after being hit (seconds).":"受到攻击后护盾再生开始前的延迟(秒)。","the shield regeneration delay":"护盾再生延迟","Regeneration delay (seconds)":"再生延迟(秒)","Change delay before shield regeneration starts after being hit.":"受到攻击后护盾再生开始前的延迟更改。","Shield regeneration delay (deprecated)":"护盾再生延迟(已弃用)","Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds":"将_PARAM0_的护盾再生延迟更改为_PARAM2_秒","the duration of the shield (seconds). A value of \"0\" means the shield is permanent.":"护盾的持续时间(秒)。 值“0”表示护盾永久。","the duration of the shield":"护盾的持续时间","Shield duration (seconds)":"护盾持续时间(秒)","Change duration of shield. Use \"0\" to make shield permanent.":"更改护盾持续时间。 使用“0”使护盾永久。","Duration of shield (deprecated)":"护盾持续时间(已弃用)","Change the duration of shield on _PARAM0_ to _PARAM2_ seconds":"将_PARAM0_的护盾持续时间更改为_PARAM2_秒","Renew shield duration to it's full value.":"将护盾持续时间恢复到完整值。","Renew shield duration":"恢复护盾持续时间","Renew the shield duration on _PARAM0_":"恢复_PARAM0_的护盾持续时间","Activate the shield by setting the shield points and renewing the shield duration (optional).":"通过设置护盾点数并更新护盾持续时间(可选)来激活护盾。","Activate shield":"激活护盾","Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)":"用_PARAM2_点激活_PARAM0_上的护盾(更新护盾持续时间:_PARAM3_)","Enable (or disable) blocking excess damage when shield breaks.":"当护盾破碎时阻止多余的伤害(启用或禁用)。","Block excess damage when shield breaks":"护盾破碎时阻止多余的伤害","Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_":"当护盾破碎时,_PARAM0_可以阻止多余的伤害:_PARAM2_","Block excess damage":"阻止多余的伤害","Check if the shield was just damaged previously in the events.":"检查事件中护盾是否刚刚受到伤害。","Is shield just damaged":"护盾是否刚刚受到伤害","Shield on _PARAM0_ has just been damaged":"_PARAM0_的护盾刚刚受到了伤害","Check if incoming damage was just dodged.":"检查是否刚刚躲避了入侵的伤害。","Damage was just dodged":"伤害刚刚躲避","_PARAM0_ just dodged incoming damage":"_PARAM0_刚刚躲避了来袭的伤害","Check if the shield is active (based on shield points and duration).":"检查护盾是否处于活动状态(根据护盾点数和持续时间)。","Is shield active":"护盾是否激活","Shield on _PARAM0_ is active":"护盾在_PARAM0_已激活","the time before the shield duration ends (seconds).":"护盾持续时间结束前的时间(秒)。","Time before shield duration ends":"护盾持续时间结束前的时间","the time before the shield duration end":"护盾持续时间结束前的时间","the shield damage taken from most recent hit.":"最近一次受到的护盾伤害。","Shield damage taken from most recent hit":"最近一次受到的护盾伤害","the shield damage taken from most recent hit":"最近一次受到的护盾伤害","the health points gained from previous heal.":"上一次治疗获得的生命值。","Health points gained from previous heal":"上一次治疗获得的生命值","the health points gained from previous heal":"上一次治疗获得的生命值","Hexagonal 2D grid":"六角形 2D 网格","Snap objects to an hexagonal grid.":"将对象捕捉到六角形网格。","Snap object to a virtual pointy topped hexagonal grid (this is not the grid used in the editor).":"将对象捕捉到虚拟尖角顶部的六角网格上(这不是编辑器中使用的网格)。","Snap objects to a virtual pointy topped hexagonal grid":"将对象捕捉到虚拟尖角顶部的六角网格","Snap _PARAM1_ to a virtual pointy topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"使用宽度_PARAM2_px,高度_PARAM3_px和偏移位置(PARAM4;PARAM5)将_PARAM1捕捉到虚拟尖角顶部的六角网格。","Objects to snap to the virtual grid":"要捕捉到虚拟网格的对象","Width of a cell of the virtual grid (in pixels)":"虚拟网格的单元格宽度(以像素为单位)","Height of a cell of the virtual grid (in pixels)":"虚拟网格的单元格高度(以像素为单位)","The actual row height will be 3/4 of this.":"实际行高为这个值的3/4。","Offset on the X axis of the virtual grid (in pixels)":"虚拟网格X轴上的偏移量(以像素为单位)","Offset on the Y axis of the virtual grid (in pixels)":"虚拟网格Y轴上的偏移量(以像素为单位)","Odd rows are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"奇数行从半个单元格处偏移,使用“CellHeight * 3/4”偏移可使其另一种方式。","Snap object to a virtual flat topped hexagonal grid (this is not the grid used in the editor).":"将对象对齐到虚拟的平顶六边形网格(这不是编辑器中使用的网格)。","Snap objects to a virtual flat topped hexagonal grid":"将对象对齐到虚拟的平顶六边形网格","Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","The actual column width will be 3/4 of this.":"实际列宽将是该值的3/4。","Odd columns are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"奇数列从半个单位格移动,使用\"CellHeight * 3/4\"偏移来进行另一种方式。","Snap object to a virtual bubble grid (this is not the grid used in the editor).":"将对象对齐到虚拟气泡网格(这不是编辑器中使用的网格)。","Snap objects to a virtual bubble grid":"将对象对齐到虚拟气泡网格","Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","The actual row height will be 7/8 of this.":"实际行高将是该值的7/8。","Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way":"Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way","Homing projectile":"寻的弹道","Make a projectile object move towards a target object.":"使一个弹道对象朝着目标对象移动。","Lock projectile object to target object. (This is required for \"Move projectile towards target\").":"Lock projectile object to target object. (This is required for \"Move projectile towards target\")。","Lock projectile to target":"将抛射物锁定到目标","Lock projectile _PARAM1_ to target _PARAM2_":"Lock projectile _PARAM1_ to target _PARAM2_","Projectile object":"抛射物对象","Move physics projectile towards the object that it has been locked to. This action must be run every frame.":"将物理抛射物朝向所锁定的对象移动。必须每一帧运行此动作。","Move physics projectile towards target":"将物理抛射物朝向目标移动","Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_","Physics Behavior":"物理行为","Initial speed (pixels per second)":"初始速度(每秒像素数)","Acceleration (speed increase per second)":"加速度(每秒速度增加)","Max lifetime (seconds)":"最大生存时间(秒)","Projectile will be deleted after this value is reached.":"达到该值后,抛射物将被删除。","Delete Projectile if it collides with Target:":"如果与目标碰撞,则删除抛射物:","Move projectile towards the object that it has been locked to. This action must be run every frame.":"将对象对齐到所锁定的对象。必须每一帧运行此动作。","Move projectile towards target":"将对象对齐到目标","Move projectile _PARAM1_ towards target _PARAM2_. Rotate speed: _PARAM3_ Initial speed: _PARAM4_ Acceleration: _PARAM5_ Max speed: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"将弹丸 _PARAM1_ 移向目标 _PARAM2_。 旋转速度:_PARAM3_ 初始速度:_PARAM4_ 加速度:_PARAM5_ 最大速度:_PARAM6_ 最大生存时间:_PARAM7_ 碰撞时删除:_PARAM8_","Idle object tracker":"空闲对象跟踪器","Check if an object has not moved (with some, customizable, tolerance) for a certain duration (1 second by default).":"检查对象在某段时间内(默认为1秒)是否没有移动(带有一些可定制的容差)。","Check if an object has not moved (with some tolerance, 20 pixels by default) for a certain duration (1 second by default).":"检查对象在一定时间内(默认为1秒)是否没有移动(默认20像素容差)。","Idle tracker":"空闲追踪器","Time, in seconds, before considering the object as idle":"在将对象视为空闲之前的秒数","Distance, in pixels, allowed for the object to travel and still be considered idle":"允许对象移动的像素距离,以便仍然被视为空闲","Check if the object has just moved from its last position (using the tolerance configured in the behavior).":"检查对象是否刚刚从其上一个位置移动(使用行为中配置的容差)。","Has just moved from last position":"刚刚从上一个位置移动","_PARAM0_ has moved from its last position":"_PARAM0_从其上一个位置移动","Check if the object is idle: it has not moved from its last position (or within the tolerance) for the time configured in the behavior.":"检查对象是否空闲:它没有从其上一个位置(或在容差内)移动到行为中配置的时间内。","Is idle (since enough time)":"空闲(时间已足够)","Iframe":"Iframe","Create or delete an iframe to embed websites.":"创建或删除嵌入网站的iframe。","Create a new Iframe to embed a website inside the game.":"创建一个新的iFrame以在游戏中嵌入网站。","Create an Iframe":"创建一个iFrame","Create Iframe _PARAM1_ at position _PARAM5_:_PARAM6_, width: _PARAM3_, height: _PARAM4_, url: _PARAM2_":"在位置_PARAM5_:_PARAM6_创建一个名为_PARAM1_的iFrame,宽度:_PARAM3_,高度:_PARAM4_,网址:_PARAM2_","Name (DOM id)":"名称(DOM id)","Width":"宽度","Height":"高度","Show scrollbar":"显示滚动条","Show border":"显示边框","Extra CSS styles (optional)":"额外的CSS样式(可选)","e.g: `\"border: 10px #f00 solid;\"`":"例如:`\"border: 10px #f00 solid;\"`","Delete the specified Iframe.":"删除指定的iFrame。","Delete an Iframe":"删除一个iFrame","Delete Iframe _PARAM1_":"删除iFrame _PARAM1_","Mobile In-App Purchase (experimental)":"移动应用内购买(实验性)","Add products to buy directly in your game (\"In-App Purchase\"), for games published on Android or iOS.":"将产品直接添加到您的游戏中进行购买(\"应用内购买\"),适用于在Android或iOS上发布的游戏。","Ads":"广告","Register a Product of your store. This is required to do for all products you want to display or order from the app. \nMake sure you register them all and finalize registration before ordering a product.":"注册商店中的产品。这是你希望从应用中显示或订购的所有产品都需要做的事。\n确保你注册了所有这些产品,并在订购产品前完成注册。","Register a Product":"注册产品","Register product _PARAM1_ as a _PARAM2_ (platform: _PARAM3_)":"将产品_PARAM1_(平台:_PARAM3_)注册为产品_PARAM2_","The internal ID of the product":"该产品的内部ID","Use the ID of the product you entered on the IAP provider (Google play, Apple store...)":"使用IAP提供商(Google play、Apple store…)上输入的产品ID","The type of product":"产品类型","Which platform you're registering the product to":"要将产品注册到的平台","Finalize store registration. Do this after registering every product and before ordering or getting information about a product.":"完成商店注册。在订购或获取有关产品的信息之前,确保在注册每个产品之后执行此操作。","Finalize registration":"完成注册","Finalize store registration":"完成商店注册","Opens the purchase menu to let the user buy a product.\nEnsure you use the condition to check if the store is ready and that the product ID has been registered and finalized before calling this action.":"打开购买菜单,让用户购买产品。\n确保使用条件检查商店是否准备就绪,并且产品ID已注册并在调用此操作之前进行了最终注册。","Order a product":"订购产品","Order product _PARAM1_":"订购产品_PARAM1_","The id of the product to buy":"购买产品的编号","Get all the data about a product from the IAP provider and store it into a structure variable.\nCheck [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) for the exhaustive list of what can be retrieved from the product.":"获取来自IAP提供商的产品的所有数据,并将其存储到一个结构变量中。\n查看[此页面](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md)以获取从产品中检索的详尽清单。","Load product data in a variable":"在变量中加载产品数据","Store data of _PARAM1_ in scene variable named _PARAM2_":"将_PARAM1_的数据存储在场景变量_PARAM2_中","The id or alias of the product to get info about":"获取有关产品信息的ID或别名","The name of the scene variable to store the product data in":"要存储产品数据的场景变量的名称","The variable will be a structure, see [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) to know what child variables are accessible.":"变量将是一个结构,请查看[此页面](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md)以了解可访问的子变量。","When an event is triggered for a product (approved or finished), this sets a scene variable to true. \nYou can then compare the value of the variable in a condition, and have actions launched to react to the changes.\nUse with Trigger Once to avoid registering multiple watchers unnecessarily.\nApproved is triggered after the purchase is complete.\nFinished is triggered after you have marked the purchased as delivered (less useful).":"当产品事件触发时(已批准或已完成),将一个场景变量设置为true。 \n然后可以在条件中比较变量的值,并启动动作以对变化做出反应。\n与触发一次一样使用,以避免不必要地注册多个观察者。\n已批准是在购买完成后触发的。\n已完成是在您标记已交付的购买后触发的(不那么有用)。","Update a variable when a product event is triggered":"在产品事件触发时更新一个变量","Watch the event _PARAM3_ for product _PARAM1_ and set scene variable named _PARAM2_ to true when it happens":"观察产品_PARAM1_的事件_PARAM3_,并在发生时将场景变量命名_PARAM2_设置为true","The id of the product to watch":"要观看的产品的ID","The name of the scene variable to set to \"true\" when the event happens":"当事件发生时将场景变量的名称_PARAM2_设置为\"true\"","The event to listen to":"要监听的事件","Mark a purchase as delivered, after you delivered the rewards the user has paid for and saved it somewhere. If you don't do so, the user will get the money refunded as the purchase will be considered as incomplete, with the rewards not given.":"将购买标记为已交付,之后您交付了用户已支付的奖励并将其保存在某处。 如果您不这样做,用户将会被退款,因为购买将被视为不完整,奖励未发放。","Finalize a purchase":"完成购买","Mark purchase of _PARAM1_ as delivered":"标记_PARAM1_的购买为已交付","The id or alias of the product to finalize":"要完成的产品的ID或别名","Triggers after finalizing the registration. Products can then be retrieved and purchased (you can get data of a product like the price, you can use the action to order a product...).":"在注册完成后触发。 之后可以检索和购买产品(可以获取产品数据,如价格,您可以使用该操作订购产品...)。","Store is ready":"商店已准备就绪","Input Validation":"输入验证","Conditions and expressions to check, sanitize and manipulate strings.":"检查、清理和操作字符串的条件和表达式。","Check if the string is a valid phone number.":"检查字符串是否是有效的电话号码。","Check if a string is a valid phone number":"检查字符串是否是有效的电话号码","_PARAM1_ is a valid phone number":"_PARAM1_是一个有效的电话号码","Phone number":"电话号码","Check if the string is a valid URL.":"检查字符串是否是有效的URL。","Check if a string is a valid URL":"检查字符串是否为有效的URL","_PARAM1_ is a valid URL":"_PARAM1_是有效的URL","Check if the string is a valid email.":"检查字符串是否为有效的电子邮件。","Check if a string is a valid email":"检查字符串是否为有效的电子邮件","_PARAM1_ is a valid email":"_PARAM1_是有效的电子邮件","Email":"电子邮件","Check if the string represents a number (potentially with a minus sign and potentially with a decimal point).":"检查字符串是否表示数字(可能带负号,可能带小数点)。","Check if a string represents a number":"检查字符串是否表示数字","_PARAM1_ represents a number":"_PARAM1_表示一个数字","Number":"数字","Check if the string has only latin alphabet letters.":"检查字符串是否只包含拉丁字母。","Check if a string has only latin alphabet letters":"检查字符串是否只包含拉丁字母","_PARAM1_ has only latin alphabet letters":"_PARAM1_只包含拉丁字母","Letters":"字母","Returns the string without the first line.":"返回没有第一行的字符串。","Remove the first line":"移除第一行","String to remove the first line from":"要从中删除第一行的字符串","Count the number of lines in a string.":"计算字符串中的行数。","Count lines":"计算行数","The text to count lines from":"计算行数的文本","Replaces every new line character with a space.":"用空格替换每个新行字符。","Replace new lines by a space":"用空格替换新行","The text to remove new lines from":"要从其中删除换行符的文本","Remove any non-numerical and non A-Z characters.":"移除任何非数字和非A-Z字符。","Remove any non-numerical and non A-Z characters":"移除任何非数字和非A-Z字符","The text to sanitize":"要进行清理的文本","Internet Connectivity":"Internet Connectivity","Checks if the device running the game is connected to the internet.":"检查运行游戏的设备是否连接到互联网。","Checks if the device is connected to the internet.":"检查设备是否连接到互联网。","Is the device online?":"设备是否在线?","The device is online":"设备在线","Simple inventories":"简单库存","Manage inventory items.":"管理库存项目。","Add an item in an inventory.":"在库存中添加一项。","Add an item":"添加一项","Add a _PARAM2_ to inventory _PARAM1_":"向库存_PARAM1_添加_PARAM2_","Inventory name":"库存名称","Item name":"项目名称","Remove an item from an inventory.":"从库存中删除一项。","Remove an item":"删除一项","Remove a _PARAM2_ from inventory _PARAM1_":"从库存_PARAM1_中删除_PARAM2_","the number of an item in an inventory.":"库存中物品的数量。","Item count":"物品计数","the count of _PARAM2_ in _PARAM1_":"在_PARAM1_中的_PARAM2_数量","Check if at least one of the specified items is in the inventory.":"检查存货中是否至少有一个指定物品。","Has an item":"有一个物品","Inventory _PARAM1_ contains a _PARAM2_":"库存_PARAM1_中包含_PARAM2_","the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"可以添加至库存中的指定物品的最大数量。默认情况下,每种物品的允许数量不受限制。","Item capacity":"物品容量","_PARAM2_ capacity in inventory _PARAM1_":"_PARAM1_中的_PARAM2_容量","Check if a limited amount of an object is allowed by the inventory. Item capacity is unlimited by default.":"检查库存中是否允许对象的有限数量。默认情况下,物品容量不受限制。","Limited item capacity":"有限的物品容量","Allow a limited count of _PARAM2_ in inventory _PARAM1_":"允许在库存_PARAM1_中有限数量的_PARAM2_: _PARAM3_","Allow a limited amount of an object to be in an inventory. Item capacity is unlimited by default.":"允许对象的有限数量存在于库存中。物品容量默认为无限。","Limit item capacity":"限制物品容量","Allow a limited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"在库存_PARAM1_中有限数量的_PARAM2_:_PARAM3_","Limit the item capacity":"限制物品容量","Check if an item has reached its maximum number allowed in the inventory.":"检查物品是否已达到在库存中允许的最大数量。","Item full":"物品已满","Inventory _PARAM1_ is full of _PARAM2_":"库存_PARAM1_已满_PARAM2_","Check if an item is equipped.":"检查物品是否已装备。","Item equipped":"物品已装备","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM2_已装备在库存_PARAM1_中","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"标记一个物品为已装备。如果物品数量为0,则不会被标记为已装备。","Equip an item":"装备一个物品","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"在库存_PARAM1_中将_PARAM2_设置为已装备:_PARAM3_","Equip":"装备","Save all the items of the inventory in a scene variable, so that it can be restored later.":"保存库存中的所有物品到场景变量中,以便稍后恢复。","Save an inventory in a scene variable":"在场景变量中保存库存","Save inventory _PARAM1_ in variable _PARAM2_":"在变量_PARAM2_中保存库存_PARAM1_","Scene variable":"场景变量","Load the content of the inventory from a scene variable.":"从场景变量中加载库存的内容。","Load an inventory from a scene variable":"从场景变量中加载库存","Load inventory _PARAM1_ from variable _PARAM2_":"从变量_PARAM2_加载库存_PARAM1_","Object \"Is On Screen\" Detection":"对象“在屏幕上”的检测","This adds a condition to detect if an object is on screen based off its current layer.":"这将添加一个条件,根据当前图层上的对象,检测对象是否在屏幕上。","This behavior provides a condition to check if the object is located within the visible portion of its layer's camera. The condition also allows for specifying padding to the virtual screen border.\nNote that object visibility, such as being hidden or 0 opacity, is not considered (but you can use those existing conditions in addition to this behavior).":"此行为提供条件以检查对象是否位于其图层相机的可见部分内。条件还允许指定虚拟屏幕边框的填充。\n请注意,对象的可见性,如隐藏或0不透明度,不会被考虑(但您可以使用这些现有条件以及此行为)。","Is on screen":"在屏幕上","Checks if an object position is within the viewport of its layer.":"检查对象位置是否在其图层的视图内。","_PARAM0_ is on screen (padded by _PARAM2_ pixels)":"_PARAM0_ 在屏幕上(以_PARAM2_像素填充)","Padding (in pixels)":"填充(以像素为单位)","Number of pixels to pad the screen border. Zero by default. A negative value goes inside the screen, a positive value go outside.":"像素数以填充屏幕边框。默认为零。负值进入屏幕,正值超出。","Konami Code":"肯尼米代码","Allows to input the classic Konami Code (\"Up, Up, Down, Down, Left, Right, Left, Right, B, A\") into a scene for cheats and easter eggs.":"允许在场景中输入传统的肯尼米代码(“上,上,下,下,左,右,左,右,B,A”)进行作弊和彩蛋。","Checks if the Konami Code is correctly inputted.":"检查 Konami Code 是否被正确输入。","Is Inputted":"已输入","Konami Code is inputted with _PARAM0_":"Konami Code 由_PARAM0_输入","Language":"语言","Get the preferred language of the user, set on their browser or device.":"获取用户在其浏览器或设备上设置的首选语言。","Returns a string representing the preferred language of the user.\nThe format represents the language first, and usually the country where it's used. For example: \"en\" (English), \"en-US\" (English as used in the United States), \"en-GB\" (United Kingdom English), \"es\" (Spanish), \"zh-CN\" (Chinese as used in China), etc.":"返回表示用户首选语言的字符串。\n格式首先表示语言,通常是使用的国家。例如:\"en\"(英语),\"en-US\"(在美国使用的英语),\"en-GB\"(英国英语),\"es\"(西班牙语),\"zh-CN\"(在中国使用的中文)等。","Game over dialog":"游戏结束对话框","Display the score and let players choose what to do next.":"显示分数并让玩家选择接下来要做什么。","Return a formated time for a given timestamp":"返回给定时间戳的格式化时间","Format time":"格式化时间","Time":"时间","Format":"格式","To fixed":"固定","Pad start":"填充开始","Text":"文本","Target length":"目标长度","Pad string":"填充字符串","Default player name":"默认玩家名称","Leaderboard":"排行榜","Best score":"最佳分数","Score format":"分数格式","Prefix":"前缀","Suffix":"后缀","Round to decimal point":"四舍五入到小数点","Score label":"分数标签","Best score label":"最佳分数标签","the score.":"分数。","Score":"分数","the score":"得分","the best score of the object.":"对象的最佳分数。","the best score":"最佳分数","Return the formated score.":"返回格式化的分数。","Format score":"格式化分数","the default player name.":"默认玩家名称。","the default player name":"默认玩家名称","the player name.":"玩家名称。","Player name":"玩家名称","the player name":"玩家名称","Check if the restart button of the dialog is clicked.":"检查对话框的重启按钮是否被点击。","Restart button clicked":"重启按钮被点击","Restart button of _PARAM0_ is clicked":"_PARAM0_ 的重启按钮被点击","Check if the next button of the dialog is clicked.":"检查对话框的下一个按钮是否被点击。","Next button clicked":"下一个按钮被点击","Next button of _PARAM0_ is clicked":"_PARAM0_ 的下一个按钮被点击","Check if the back button of the dialog is clicked.":"检查对话框的后退按钮是否被点击。","Back button clicked":"后退按钮被点击","Back button of _PARAM0_ is clicked":"_PARAM0_ 的后退按钮被点击","Check if the score has been sucessfully submitted by the dialog.":"检查对话框是否成功提交了分数。","Score is submitted":"分数已提交","_PARAM0_ submitted a score":"_PARAM0_ 提交了一个分数","the leaderboard of the object.":"对象的排行榜。","the leaderboard":"排行榜","the title of the object.":"对象的标题。","Title":"标题","the title":"标题","Fade in the decoration objects of the dialog.":"淡入对话框的装饰对象。","Fade in decorations":"淡入装饰物","Fade in the decorations of _PARAM0_":"淡入 _PARAM0_ 的装饰物","Fade out the decoration objects of the dialog.":"淡出对话框的装饰对象。","Fade out decorations":"淡出装饰物","Fade out the decorations of _PARAM0_":"淡出 _PARAM0_ 的装饰物","Check if the fade in animation of the decorations is finished.":"检查装饰的淡入动画是否完成。","Decorations are faded in":"装饰物已淡入","Fade in animation of _PARAM0_ is finished":"_PARAM0_ 的淡入动画已完成","Check if the fade out animation of the decorations is finished.":"检查装饰的淡出动画是否完成。","Decorations are faded out":"装饰物已淡出","Fade out animation of _PARAM0_ is finished":"_PARAM0_ 的淡出动画已完成","Linear Movement":"线性运动","Move objects on a straight line.":"沿直线移动对象。","Linear movement":"线性运动","Speed on X axis":"X轴速度","Speed on Y axis":"Y轴速度","the speed on X axis of the object.":"对象在 X 轴上的速度。","the speed on X axis":"X 轴上的速度","the speed on Y axis of the object.":"对象在 Y 轴上的速度。","the speed on Y axis":"Y 轴上的速度","Move objects ahead according to their angle.":"根据其角度移动对象。","Linear movement by angle":"根据角度的线性运动","Linked Objects Tools":"链式对象工具","Conditions to use Linked Objects as a graph and a path finding movement behavior.":"用作将链式对象用作图和路径查找移动行为的条件。","Link to neighbors on a rectangular grid.":"连接到矩形网格上的邻居。","Link to neighbors on a rectangular grid":"连接到矩形网格上的邻居","Link _PARAM1_ and its neighbors _PARAM2_ on a rectangular grid with cell dimensions: _PARAM3_; _PARAM4_":"在具有单元尺寸:_PARAM3_; _PARAM4_ 的矩形网格上连接_PARAM1_及其邻居_PARAM2_","Neighbor":"邻居","The 2 objects can't be the same.":"这2个对象不能是相同的。","Cell width":"单元宽度","Cell height":"单元高度","Allows diagonals":"允许对角线","Link to neighbors on a hexagonal grid.":"连接到六角网格上的邻居。","Link to neighbors on a hexagonal grid":"在六角网格上连接到邻居","Link _PARAM1_ and its neighbors _PARAM2_ on a hexagonal grid with cell dimensions: _PARAM3_; _PARAM4_":"在具有单元尺寸:_PARAM3_; _PARAM4_ 的六角网格上连接_PARAM1_及其邻居_PARAM2_","Link to neighbors on an isometric grid.":"连接到等角网格上的邻居。","Link to neighbors on an isometric grid":"在等角网格上连接到邻居","Link _PARAM1_ and its neighbors _PARAM2_ on an isometric grid with cell dimensions: _PARAM3_; _PARAM4_":"在具有单元尺寸:_PARAM3_; _PARAM4_ 的等角网格上连接_PARAM1_及其邻居_PARAM2_","Can reach through a given cost sum.":"可以通过给定的成本总和到达。","Can reach with links limited by cost":"可以通过成本限制的连接到达","Take into account all \"_PARAM1_\" that can reach _PARAM2_ with initial value from the variable _PARAM3_ through at most a cost of: _PARAM4_ according to cost class: _PARAM5_ and at most _PARAM6_ links depth":"考虑所有能够通过给定成本类: _PARAM5_ 和最多_PARAM6_个链接深度下的初始值从变量_PARAM3_到达_PARAM2_的“_PARAM1_”。","Pick these objects...":"选择这些对象……","if they can reach this object":"如果它们可以到达这个对象","Initial length variable":"初始长度变量","Start to 0 if left empty":"如果左空则开始为0","Maximum cost":"最大成本","Cost class":"成本类","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost must be positive.":"保持空白以使一切的值为可穿越,成本=1。它查找linktools_Cost的变量子集,如果没有子集则表示不可穿越,成本必须是正数。","Maximum depth":"最大深度","Ignore first node cost":"忽略第一个节点的成本","Can reach through a given number of links.":"可以通过给定数量的链接到达","Can reach with links limited by length":"可以通过长度限制的链接到达","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through at most _PARAM3_ links according to cost class: _PARAM4_":"考虑所有『_PARAM1_』,它们最多通过成本类:『_PARAM4_』上限3的链接到达『_PARAM2_』","Maximum link length":"最大链接长度","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost can be 0 or 1.":"保持空白以使一切的值为可穿越,成本可以为0或1。它查找linktools_Cost的变量子集,如果没有子集则表示不可穿越,成本可以为0或1。","Can reach through links.":"可以通过链接到达","Can reach":"可以到达","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through links":"考虑所有『_PARAM1_』,它们通过链接可以到达『_PARAM2_』","Cost sum.":"成本的总和。","Cost sum":"成本总和","The object will move from one object instance to another according to how they are linked to one another to reach a targeted object.":"该对象将根据它们之间的链接方式从一个对象实例移动到另一个对象实例,以到达目标对象。","Link path finding":"链接路径查找","Angle offset":"角度偏移","Is following a path":"正在按路径跟随","Next node index":"下一个节点索引","Next node X":"下一个节点X","Next node Y":"下一个节点 Y","Is at a node":"在节点","Next node angle":"下一个节点角度","Move the object to a position.":"将对象移到指定位置。","Move to a position":"移到指定位置","Move _PARAM0_ to _PARAM3_ passing by _PARAM2_ using cost class _PARAM4_":"_PARAM0_经由_PARAM2_过去方到达_PARAM3_位置,使用成本级别_PARAM4_","Crossable objects":"可穿过的对象","Destination objects":"目标对象","Check if the object position is the on a path node.":"检查对象位置是否在路径节点上。","_PARAM0_ is at a node":"_PARAM0_ 在节点上","Forget the path.":"忘记路径。","Forget the path":"忘记路径","_PARAM0_ forgets the path":"_PARAM0_ 忘记路径","Set next node index":"设置下一个节点索引","Set next node index of _PARAM0_ to _PARAM2_":"将_PARAM0_的下一个节点索引设置为_PARAM2_","Node index":"节点索引","Check if the object is moving.":"检查对象是否在移动。","Is moving":"正在移动","_PARAM0_ is moving":"_PARAM0_正在移动","Check if a path has been found.":"检查是否找到路径。","Path found":"找到路径","A path has been found for _PARAM0_":"已为_PARAM0_找到路径","Check if the destination was reached.":"检查是否到达目的地。","Destination reached":"已到达目的地","_PARAM0_ reached its destination":"_PARAM0_已到达其目的地","Speed of the object on the path.":"路径上物体的速度。","Get the number of waypoints on the path.":"获取路径上的路标数。","Node count":"节点计数","Waypoint X position.":"路标X位置。","Node X":"节点X","Waypoint index":"路标索引","Node Y":"节点Y","Next waypoint index.":"下一个路标索引。","Next waypoint X position.":"下一个路标X位置。","Next waypoint Y position.":"下一个路标Y位置。","Destination X position.":"目的地X位置。","Destination Y position.":"目的地Y位置。","the acceleration of the object.":"物体的加速度。","the maximum speed of the object.":"物体的最大速度。","the maximum speed":"最大速度","the rotation speed of the object.":"物体的旋转速度。","the rotation speed":"旋转速度","the rotation offset applied when moving the object.":"移动物体时应用的旋转偏移。","the rotation angle offset on the path":"路径上的旋转角度偏移","Check if the object is rotated when traveling on its path.":"移动时对路径进行旋转。","Object rotated":"物体已旋转","_PARAM0_ is rotated when traveling on its path":"_PARAM0_在移动时已旋转","Enable or disable rotation of the object on the path.":"启用或禁用物体在路径上的旋转。","Rotate the object":"旋转物体","Enable rotation of _PARAM0_ on the path: _PARAM2_":"启用_PATH0_在路径上的旋转:_PARAM2_","MQTT Client (advanced)":"MQTT 客户端(高级)","An MQTT client for GDevelop: allow connections to a MQTT server and send/receive messages.":"GDevelop 的 MQTT 客户端:允许连接到 MQTT 服务器并发送/接收消息。","Triggers if the client is connected to an MQTT broker server.":"如果客户端连接到MQTT代理服务器,则触发。","Is connected to a broker?":"连接到代理吗?","Client connected to a broker":"客户端连接到代理","Connects to an MQTT broker.":"连接到MQTT代理。","Connect to a broker":"连接代理","Connect to MQTT broker _PARAM1_ with parameters _PARAM2_ (secure connection: _PARAM3_)":"使用参数_PARAM1_连接到MQTT代理_PARAM2_(安全连接:_PARAM3_)","Host port":"主机端口","Settings as JSON":"设置为JSON","You can find the list of settings at [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client). \nAn example of valid configuration would be `\" \"clientId \": \"myUserName \" \"`.":"您可以在[MQTT.js文档](https://github.com/mqttjs/MQTT.js/#client)中找到设置的列表。\n有效配置示例为`\" \"clientId \": \"myUserName \" `。","Use secure WebSockets?":"使用安全WebSockets吗?","Disconnects from the current MQTT broker.":"断开当前MQTT代理。","Disconnect from broker":"从代理断开","Disconnect from MQTT broker (force: _PARAM1_)":"断开MQTT代理(强制:_PARAM1_)","Force end the connection?":"强制结束连接?","By default, MQTT waits for pending messages or messages in the process of being sent to finish being sent before ending the connection. Use this to cancel any request and immediately shutdown the connection.":"默认情况下,MQTT在关闭连接之前等待挂起消息或正在发送的消息完成发送。使用此功能取消任何请求并立即关闭连接。","Publishes a message on a topic.":"在主题上发布消息。","Publish message":"发布消息","Publish variable _PARAM1_ on topic _PARAM2_ (QoS: _PARAM3_)":"在主题_PARAM2_上以QoS为_PARAM3_发布变量_PARAM1_","Text to publish":"要发布的文本","Topic to publish to":"要发布的主题","The QoS":"QoS","See [this](https://github.com/mqttjs/MQTT.js#qos) for more details.":"有关更多详细信息,请参阅[这里](https://github.com/mqttjs/MQTT.js#qos)。","Should the message be retained?":"消息应该保留吗?","When a message is retained, it will be sent to every client that subscribe to the topic. Only one message can be retained per topic, if another retained message is sent it will overwrite the previous one. \nRead more [here](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages).":"当消息被保留时,它将发送给订阅主题的每个客户端。每个主题只能保留一个消息,如果发送另一个保留消息,它将覆盖先前的消息。在[此处](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages)有更多阅读。","Subcribe to a topic. All messages published on that topic will be received.":"订阅主题。该主题上发布的所有消息将被接收。","Subscribe to a topic":"订阅主题","Subscribe to topic _PARAM1_ with QoS at _PARAM2_ and dataloss _PARAM3_":"使用QoS在_PARAM2_订阅主题_PARAM1_并数据丢失_PARAM3_","The topic to subscribe to":"订阅的主题","See https://github.com/mqttjs/MQTT.js#qos for more details":"有关更多详细信息,请参阅https://github.com/mqttjs/MQTT.js#qos","Is dataloss allowed?":"允许数据丢失吗?","See https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode for more details":"查看https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode了解更多详情","Unsubcribe from a topic. No more messages from this topic will be received.":"取消订阅一个主题。将不再接收来自该主题的消息。","Unsubscribe from a topic":"取消订阅一个主题","Unsubscribe from topic _PARAM1_":"取消订阅主题_PARAM1_","Triggers whenever a message was received. Note that you first need to subcribe to a topic in order to get messages from it.":"当接收到消息时触发。请注意,您首先需要订阅主题以便从中获取消息。","On message":"消息","Message received from topic _PARAM1_":"从主题_PARAM1_收到的消息","The topic to listen to":"监听的主题","Get the last received message of a topic.":"获取主题的最后接收消息。","Get last message":"获取最后消息","The topic to get the message from":"从中获取消息的主题","Gets the last error. Returns an empty string if there was no errors.":"获取最后的错误。如果没有错误,则返回空字符串。","Get the last error":"获取最后的错误","Marching Squares (experimental)":"Marching Squares(实验性)","Allow to build a \"scalar field\" and draw contour lines of it: useful for fog of wars, liquid effects, paint the ground, etc...":"允许构建“标量场”并绘制其等高线:对于迷雾,液体效果,绘制地面等非常有用……","Define the scalar field painter library JavaScript code.":"定义标量场画家库JavaScript代码。","Define scalar field painter library":"定义标量场画家库","Define the scalar field painter library JavaScript code":"定义标量场画家库JavaScript代码","Add to a Shape painter object and use the actions to draw a field. Useful for fog of wars, liquid effects (water, lava, blobs...).":"添加到形状画家对象并使用操作来绘制一个场。对于战争迷雾,液体效果(水,熔岩,斑点...)非常有用。","Marching squares painter":"Marching squares 画家","Area left bound":"区域左边界","Area top bound":"区域顶部边界","Area right bound":"区域右边界","Area bottom bound":"区域底边界","Fill outside":"填充外部","Contour threshold":"轮廓阈值","Must only draw what is on the screen":"只能绘制屏幕上的内容","Extend behavior class":"扩展行为类","Extend object instance prototype.":"扩展对象实例原型。","Extend object instance prototype":"扩展对象实例原型","Extend _PARAM0_ prototype":"扩展 _PARAM0_ 原型","Clear the field by setting every values to 0.":"通过将每个值设置为 0 来清除字段。","Clear the field":"清除字段","Clear the field of _PARAM0_":"清除 _PARAM0_ 的字段","Unfill an area of the field from a given location until a given height is reached.":"从给定位置开始,直到达到给定高度,填充字段的区域。","Unfill area":"取消填充区域","Unfill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a minimum of _PARAM4_ with thickness: _PARAM5_":"从 x: _PARAM2_, y: _PARAM3_ 开始,以 _PARAM5_ 的厚度,取消 _PARAM0_ 字段的填充,直到达到 _PARAM4_。","Minimum height":"最小高度","Contour thickness":"轮廓厚度","Capping radius ratio":"顶部半径比","Small values allow quicker process, but can result to tearing. Try values around 8.":"较小的值可以加快处理速度,但可能导致撕裂。请尝试大约为 8 的值。","Fill an area of the field from a given location until a given height is reached.":"从给定位置开始,直到达到给定高度,填充字段的区域。","Fill area":"填充区域","Fill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a maximum of _PARAM4_ with thickness: _PARAM5_":"从 x: _PARAM2_, y: _PARAM3_ 开始,以 _PARAM5_ 的厚度,填充 _PARAM0_ 字段的区域,直到达到 _PARAM4_。","Maximum height":"最大高度","Cap every value of the field to a range.":"将字段的每个值限制在范围内。","Clamp the field":"夹住字段","Clamp the field of _PARAM0_ from: _PARAM2_ to: _PARAM3_":"将 _PARAM0_ 的字段夹住从 _PARAM2_ 到 _PARAM3_","Minimum":"最小","Maximum":"最大","Apply an affine on the field values.":"对字段值应用仿射。","Transform the field":"变换字段","Transform the field of _PARAM0_ with a coefficient: _PARAM2_ and an offset: _PARAM3_":"对 _PARAM0_ 字段进行变换,使用系数:_PARAM2_ 和偏移:_PARAM3_","Coefficient":"系数","Offset":"偏移","Add a hill to the field.":"向字段添加山丘。","Add a hill":"添加山丘","Add a hill to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, _PARAM4_, radius: _PARAM5_, opacity: _PARAM6_ using: _PARAM8_":"向 _PARAM0_ 的字段添加山丘,中心:_PARAM2_, _PARAM3_, _PARAM4_, 半径:_PARAM5_, 不透明度:_PARAM6_,使用:_PARAM8_。","The hill height at the center, a value of 1 or less means a flat hill.":"中心高度山丘,值为 1 或更低表示平顶山。","The hill height is 1 at this radius.":"在这个半径上山的高度为1。","Opacity":"不透明度","Set to 1 to apply the hill instantly or repeat this action with a lower value to make is progressive.":"设置为1,立即应用山丘,或者以较小的值重复此操作,使其逐渐变化。","Operation":"操作","Add a disk to the field.":"在场地上添加一个圆盘。","Add a disk":"添加一个圆盘","Add a disk to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_ using: _PARAM6_":"在_PARAM0_的场地上添加一个圆盘,中心位置:_PARAM2_,_PARAM3_,半径:_PARAM4_,使用:_PARAM6_","The spike height is 1 at this radius.":"在这个半径上尖峰的高度为1。","Mask a disk to the field.":"在场地上为一个圆盘添加蒙版。","Mask a disk":"添加蒙版的一个圆盘","Mask a disk on the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_":"在_PARAM0_的场地上,以中心:_PARAM2_,_PARAM3_,半径:_PARAM4_的位置添加一个圆盘的蒙版。","Add a line to the field.":"在场地上添加一条线。","Add a line":"添加一条线","Add a line to the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_ using: _PARAM8_":"在_PARAM0_的场地上,从_PARAM2_ ; _PARAM3_到_PARAM4_ ; _PARAM5_,使用厚度:_PARAM6_进行添加一条线。","X position of the start":"开始位置的X坐标","Y position of the start":"开始位置的Y坐标","X position of the end":"结束位置的X坐标","Y position of the end":"结束位置的Y坐标","Thickness":"厚度","Mask a line to the field.":"在场地上为一条线添加蒙版。","Mask a line":"添加一条线的蒙版","Mask a line on the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_":"在_PARAM0_的场地上,从_PARAM2_ ; _PARAM3_到_PARAM4_ ; _PARAM5_,厚度为:_PARAM6_的地方添加一条线的蒙版。","Apply a given operation on every value of the field using the value from the other field at the same position.":"对场地的每个值应用给定的操作,使用相同位置的另一个场地的值。","Merge a field":"合并场地","Merge _PARAM0_ with the field of _PARAM2_ using: _PARAM4_":"将_PARAM0_与_PARAM2_的场地合并,使用:_PARAM4_。","Field object":"场地对象","Field behavior":"场地行为","Update the field hitboxes.":"更新场地的碰撞框。","Update hitboxes":"更新碰撞框","Update the field hitboxes of _PARAM0_":"更新_PARAM0_的场地碰撞框。","Draw the field contours.":"绘制场地轮廓。","Draw the contours":"绘制轮廓","Draw the field contours of _PARAM0_":"绘制_PARAM0_的领域轮廓","Change the width of the field cells.":"更改领域单元格的宽度。","Width of the cells":"单元格的宽度","Change the width of the field cells of _PARAM0_: _PARAM2_":"更改_PARAM0_的领域单元格宽度:_PARAM2_","Change the height of the field cells.":"更改领域单元格的高度。","Height of the cells":"单元格的高度","Change the height of the field cells of _PARAM0_: _PARAM2_":"更改_PARAM0_的领域单元格高度:_PARAM2_","Rebuild the field with the new dimensions.":"使用新的尺寸重建领域。","Rebuild the field":"重建领域","Rebuild the field _PARAM0_":"重建领域_PARAM0_","Fill outside or inside of the contours.":"在轮廓外部或内部填充。","Fill outside of the contours of _PARAM0_: _PARAM2_":"_PARAM0_轮廓外部填充:_PARAM2_","Fill outside?":"填充轮廓外部?","Change the contour threshold.":"更改轮廓阈值。","Change the contour threshold of _PARAM0_: _PARAM2_":"更改_PARAM0_的轮廓阈值:_PARAM2_","Change the field area bounds.":"更改领域区域边界。","Area bounds":"区域边界","Change the field area bounds of _PARAM0_ left: _PARAM2_ top: _PARAM3_ right: _PARAM4_ bottom: _PARAM5_":"更改_PARAM0_左边界: _PARAM2_ 顶部: _PARAM3_ 右边界: _PARAM4_ 底部: _PARAM5_的领域区域边界","Left bound":"左边界","Top bound":"顶部边界","Right bound":"右边界","Bottom bound":"底部边界","Area left bound of the field.":"领域的左边界。","Area left":"左边界","Area top bound of the field.":"领域的顶部边界。","Area top":"顶部边界","Area right bound of the field.":"领域的右边界。","Area right":"右边界","Area bottom bound of the field.":"领域的底部边界。","Area bottom":"底部边界","Width of the field cells.":"领域单元格的宽度。","Width of a cell":"单元格的宽度","Height of the field cells.":"领域单元格的高度。","Height of a cell":"单元格的高度","The number of cells on the x axis.":"在x轴上的单元数量。","Dimension X":"X 维度","At _PARAM2_; _PARAM3_ the field value of _PARAM0_ is greater than _PARAM4_":"在_PARAM2_;_PARAM3_时,_PARAM0_的字段值大于_PARAM4_","The number of cells on the y axis.":"在y轴上的单元数量。","Dimension Y":"Y 维度","The contour threshold.":"轮廓阈值。","The normal X coordinate at a given location.":"在给定位置的法线X坐标。","Normal X":"法线X","X position of the point":"点的X位置","Y position of the point":"点的Y位置","The normal Y coordinate at a given location.":"在给定位置的法线Y坐标。","Normal Y":"法线Y","The normal Z coordinate at a given location.":"在给定位置的法线Z坐标。","Normal Z":"法线Z","Change the field value at a grid point.":"在网格点处更改字段值。","Grid value":"网格值","Change the field value of _PARAM0_ at the grid point _PARAM2_; _PARAM3_ to _PARAM4_":"更改_PARAM2_的网格点_PARAM3_处的_PARAM0_字段值为_PARAM4_","X grid index":"X网格索引","Y grid index":"Y网格索引","Field value":"字段值","The field value at a grid point.":"在网格点处的字段值。","The field value at a given location.":"在给定位置的字段值。","Check if the contours are filled outside.":"检查轮廓是否在外部被填充。","The contours of _PARAM0_ are filled outside":"_PARAM0_的轮廓在外部被填充","Check if a field is greater than a given value.":"检查字段是否大于给定值。","Check if a point is inside the contour.":"检查点是否在轮廓内。","Point is inside":"点在内部","_PARAM2_; _PARAM3_ is inside _PARAM0_":"_PARAM2_; _PARAM3_在_PARAM0_内","Cursor object":"光标对象","Turn any object into a cursor.":"将任何对象变成光标。","Turn any object into a mouse cursor.":"将任何对象转换为鼠标指针。","Cursor":"鼠标指针","Mouse Pointer Lock":"鼠标指针锁定","This behavior removes the limit on the distance the mouse can move and hides the cursor.":"此行为移除了鼠标可移动距离的限制,并隐藏了光标。","Lock the mouse pointer to hide it.":"锁定鼠标指针以隐藏它。","Request Pointer Lock":"请求指针锁定","Unlocks the mouse pointer and show it.":"解锁鼠标指针并显示它。","Exit pointer lock":"退出指针锁定","Check if the mouse pointer is locked.":"检查鼠标指针是否被锁定。","Pointer is locked":"指针已锁定","The mouse pointer is locked":"鼠标指针已锁定","Check if the mouse pointer is actually locked.":"检查鼠标指针是否实际上被锁定。","Pointer is actually locked":"指针实际上已锁定","The mouse pointer actually is locked":"鼠标指针实际上已锁定","Check if the mouse pointer lock is emulated.":"检查鼠标指针锁定是否模拟。","Pointer lock is emulated":"鼠标指针锁定已模拟","The mouse pointer lock is emulated":"鼠标指针锁已被模拟","Check if the locked pointer is moving.":"检查锁定的指针是否移动。","Locked pointer is moving":"锁定的指针正在移动","the movement of the locked pointer on the X axis.":"锁定指针在X轴上的移动。","Pointer X movement":"指针X移动","the movement of the locked pointer on the X axis":"锁定指针在X轴上的移动","the movement of the pointer on the Y axis.":"指针在Y轴上的移动。","Pointer Y movement":"指针Y移动","the movement of the pointer on the Y axis":"指针在Y轴上的移动","Return the X position of a specific touch":"返回特定触摸的X位置","Touch X position":"触摸X位置","Touch identifier":"触摸标识符","Return the Y position of a specific touch":"返回特定触摸的Y位置","Touch Y position":"触摸Y位置","the speed factor for touch movement.":"触摸移动的速度因子。","Speed factor for touch movement":"触摸移动的速度因子","the speed factor for touch movement":"触摸移动的速度因子","Control camera rotations with a mouse.":"用鼠标控制相机旋转。","First person camera mouse mapper":"第一人称相机鼠标映射","Horizontal rotation speed factor":"水平旋转速度因子","Vertical rotation speed factor":"垂直旋转速度因子","Lock the pointer on click":"单击时锁定指针","the horizontal rotation speed factor of the object.":"物体的水平旋转速度系数。","the horizontal rotation speed factor":"水平旋转速度系数","the vertical rotation speed factor of the object.":"物体的垂直旋转速度系数。","the vertical rotation speed factor":"垂直旋转速度系数","Multiplayer custom lobbies":"多人自定义房间","Custom lobbies for built-in multiplayer.":"内置多人游戏的自定义房间。","Return project identifier.":"返回项目标识符。","Project identifier":"项目标识符","Return game version.":"返回游戏版本。","Game version":"游戏版本","Return true if game run in preview.":"如果游戏在预览中运行则返回真。","Preview":"预览","Define a shape painter as a mask of an object.":"将形状绘制器定义为物体的蒙版。","Mask an object with a shape painter":"使用形状绘制器对物体进行遮罩","Mask _PARAM1_ with mask _PARAM2_":"用蒙版_PARAM2_遮罩_PARAM1_","Object to mask":"要进行遮罩的物体","Shape painter to use as a mask":"用作蒙版的形状绘制器","Loading.":"加载中。","Loading":"加载","Customize the interface of multiplayer lobbies.\nJoining will only work if the \"join after game starts\" setting is enabled, as the game automatically starts after joining a lobby.":"自定义多人游戏大厅的界面。\n只有当 \"游戏开始后加入\" 设置被启用时才能加入,因为游戏在加入大厅后会自动开始。","Update lobbies.":"更新大厅。","Update lobbies":"更新大厅","Update lobbies _PARAM0_":"更新大厅 _PARAM0_","Return last error.":"返回最后一个错误。","Last error":"最后一个错误","Custom lobby.":"自定义大厅。","Custom lobby":"自定义大厅","Set lobby name.":"设置大厅名称。","Set lobby name":"设置大厅名称","Set lobby name _PARAM0_: _PARAM1_":"设置大厅名称 _PARAM0_: _PARAM1_","Lobby name":"大厅名称","Set players in lobby count.":"设置大厅玩家数量。","Set players in lobby count":"设置大厅玩家数量","Set players in lobby count _PARAM0_, players in lobby: _PARAM1_, max players _PARAM2_":"设置大厅玩家数量 _PARAM0_,大厅中的玩家: _PARAM1_,最大玩家 _PARAM2_","Players count in lobby":"大厅中的玩家数量","Maxum count players in lobby":"大厅中最大玩家数量","Set lobby ID.":"设置大厅 ID。","Set lobby ID":"设置大厅 ID","Set lobby ID _PARAM0_: _PARAM1_":"设置大厅 ID _PARAM0_: _PARAM1_","Lobby ID":"大厅 ID","Return true if lobby is full.":"如果大厅已满,则返回真。","Is full":"已满","Lobby _PARAM0_ is full":"大厅 _PARAM0_ 已满","Activate interactions.":"激活互动。","Activate interactions":"激活互动","Activate interactions of _PARAM0_: _PARAM1_":"激活 _PARAM0_ 的互动: _PARAM1_","Yes or no":"是或否","Noise generator":"噪声生成器","Generate noise values for procedural generation.":"生成噪声数值用于过程生成。","Generate a number between -1 and 1 from 1 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"从1维simplex噪音生成-1到1之间的数字。扩展数学扩展模块中的“Map”表达式可用于将值映射到任意选择的范围。","1D noise":"1D噪音","Generate a number between -1 and 1 from 2 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"从2维simplex噪音生成-1到1之间的数字。扩展数学扩展模块中的“Map”表达式可用于将值映射到任意选择的范围。","Generate a number between -1 and 1 from 3 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"从 3 维简单噪声中生成介于 -1 和 1 之间的数字。可以使用扩展数学扩展中的 \"Map\" 表达式将值映射到任何所选择的边界。","Generate a number between -1 and 1 from 4 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"从 4 维简单噪声中生成介于 -1 和 1 之间的数字。可以使用扩展数学扩展中的 \"Map\" 表达式将值映射到任何所选择的边界。","Delete a noise generators and loose its settings.":"删除噪声生成器并丢失其设置。","2 dimensional Perlin noise (depecated, use Noise2d instead).":"2维 Perlin 噪声(已弃用,使用 Noise2d 代替)。","Perlin 2D noise":"Perlin 2D 噪声","x value":"x 值","y value":"y 值","3 dimensional Perlin noise (depecated, use Noise3d instead).":"3维 Perlin 噪声(已弃用,使用 Noise3d 代替)。","Perlin 3D noise":"Perlin 3D 噪声","z value":"z 值","2 dimensional simplex noise (depecated, use Noise2d instead).":"2维简单噪声(已弃用,使用 Noise2d 代替)。","Simplex 2D noise":"Simplex 2D 噪声","3 dimensional simplex noise (depecated, use Noise3d instead).":"3维简单噪声(已弃用,使用 Noise3d 代替)。","Simplex 3D noise":"Simplex 3D 噪声","Object picking tools":"对象选择工具","Adds various object picking related tools.":"添加各种与对象选择相关的工具。","Unpicks all instances of an object.":"取消选择对象的所有实例。","Unpick all instances":"取消选择所有实例","Unpick all instances of _PARAM1_":"取消选择 _PARAM1_ 的所有实例","The object to unpick all instances from":"取消选择所有实例所属的对象","Pick object instances that have the lowest Z-order.":"选择具有最低 Z 顺序的对象实例。","Pick objects with lowest Z-order":"选择具有最低 Z 顺序的对象","Pick _PARAM1_ with the lowest Z-order":"选择 _PARAM1_ 具有最低 Z 顺序的对象","Object to select instances from":"从中选择实例的对象","Pick object instances that have the highest Z-order.":"选择具有最高 Z 顺序的对象实例。","Pick objects with highest Z-order":"选择具有最高 Z 顺序的对象","Pick _PARAM1_ with the highest Z-order":"选择 _PARAM1_ 具有最高 Z 顺序的对象","Pick object instances that have the lowest value of an object variable.":"选择具有对象变量的最低值的对象实例。","Pick objects with lowest variable value":"选择具有最低变量值的对象","Pick _PARAM1_ with the lowest value of variable _PARAM2_":"选择 _PARAM1_ 具有变量 _PARAM2_ 的最低值","Object variable name":"对象变量名称","Pick object instances that have the highest value of an object variable.":"选择具有对象变量的最高值的对象实例。","Pick objects with highest variable value":"选择具有最高变量值的对象","Pick _PARAM1_ with the highest value of variable _PARAM2_":"选择 _PARAM1_ 具有变量 _PARAM2_ 的最高值","Picks the first instance out of a list of objects.":"从对象列表中选出第一个实例。","Pick the first object (deprecated)":"选择第一个对象(已弃用)","Pick the first _PARAM1_":"选择第一个_PARAM1_","The object to select an instances from":"从对象列表中选择一个实例。","Picks the last instance out of a list of objects.":"从对象列表中选出最后一个实例。","Pick the last object (deprecated)":"选择最后一个对象(已弃用)","Pick the last _PARAM1_":"选择最后一个_PARAM1_","Picks the Nth instance out of a list of objects.":"从对象列表中选出第N个实例。","Pick the Nth object (deprecated)":"选择第N个对象(已弃用)","Pick the _PARAM2_th _PARAM1_":"选择第_PARAM2_个_PARAM1_","The place in the objects lists an instance has to have to be picked":"实例在对象列表中的位置,可以选择","Slice a 2D object into pieces":"将 2D 物体切成几块","Slice an object into smaller pieces that match the color of original object.":"将对象切割成与原始对象颜色相匹配的小块。","Slice an object into smaller pieces that match color of the original object. The new object should be a solid white color.":"将对象切割成颜色与原始对象相匹配的小块。新对象应该是纯白色。","Slice object into smaller pieces":"将对象切割成小块","Cut _PARAM1_ into _PARAM3_ vertical strips and _PARAM4_ horizontal strips using _PARAM2_ for the new objects. Delete original object: _PARAM5_":"使用_PARAM2_切割_PARAM1_,纵向切割_PARAM3_块,横向切割_PARAM4_块。删除原始对象:_PARAM5_","Object to be sliced":"要切割的对象","Object used for sliced pieces":"用于切割后小块的对象","Recommended: Use a sprite that is a single white pixel":"建议:使用单个白色像素的精灵","Vertical slices":"纵向切块","Horizontal slices":"横向切块","Delete original object":"删除原始对象","Return the blue component of the pixel at the specified position.":"返回指定位置像素的蓝色分量。","Read pixel blue":"读取像素的蓝色","Return the green component of the pixel at the specified position.":"返回指定位置像素的绿色分量。","Read pixel green":"读取像素的绿色","Return the red component of the pixel at the specified position.":"返回指定位置像素的红色分量。","Read pixel red":"读取像素的红色","Object spawner 2D area":"物体生成器 2D 区域","Spawn (create) objects periodically.":"周期性地产生(创建)对象。","Object spawner":"对象生成器","Spawn period":"生成周期","Offset X (relative to position of spawner)":"X偏移(相对于生成位置)","Offset Y (relative to position of spawner)":"Y偏移(相对于生成位置)","Max objects in the scene (per spawner)":"场景中的对象最大数量(每个生成器)","Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"设置为 0 以取消限制,限制场景中由此生成器创建的对象数量。","Spawner capacity":"生成器容量","Number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"此生成器可以创建的对象数量。每次生成对象时都会减少这个数量。","Unlimited capacity":"无限容量","Use random positions":"使用随机位置","Objects will be created at a random position inside the spawner. Useful for making large spawner areas.":"对象将在生成器内的随机位置创建。适用于创建大型生成区域。","Spawn (create) objects periodically. This action must be run every frame to work. When the max quantity is reached and an instance is deleted, the spawner waits the duration of the spawn period before creating another instance. Spawned objects are automatically linked to the spawner.":"定期产生(创建)物体。此操作必须每帧运行才能生效。当达到最大数量并删除一个实例时,生成器将在产生另一个实例之前等待生成周期的持续时间。生成的对象会自动与生成器链接。","Spawn objects periodically":"定期产生物体","Periodically spawn (create) a _PARAM2_ located at spawner _PARAM0_":"定期生成(创建)位于生成点_PARAM0_处的_PARAM2_","Object that will be created":"将要创建的对象","Change the offset X relative to the center of spawner (in pixels).":"相对于生成点中心的偏移X(以像素为单位)。","Offset on X axis (deprecated)":"在X轴上的偏移(已弃用)","Change the offset X of _PARAM0_ to _PARAM2_ pixels":"将_PARAM0_的偏移X改为_PARAM2_像素","Change the offset Y relative to the center of spawner (in pixels).":"相对于生成点中心的偏移Y(以像素为单位)。","Offset on Y axis (deprecated)":"在Y轴上的偏移(已弃用)","Change the offset Y of _PARAM0_ to _PARAM2_ pixels":"将_PARAM0_的偏移Y改为_PARAM2_像素","Change the spawn period (in seconds).":"更改生成周期(以秒为单位)。","Change the spawn period of _PARAM0_ to _PARAM2_ seconds":"将_PARAM0_的生成周期更改为_PARAM2_秒","Return the offset X relative to the center of spawner (in pixels).":"返回生成点中心的偏移X(以像素为单位)。","Offset X (deprecated)":"X轴偏移(已弃用)","Return the offset Y relative to the center of spawner (in pixels).":"返回生成点中心的偏移Y(以像素为单位)。","Offset Y (deprecated)":"Y轴偏移(已弃用)","Return the spawn period (in seconds).":"返回生成周期(以秒为单位)。","Restart the cooldown of a spawner.":"重新启动生成点的冷却。","Restart spawning cooldown":"重新启动生成冷却","Restart the cooldown of _PARAM0_":"重新启动_PARAM0_的冷却","Return the remaining time before the next spawn (in seconds). Useful for triggering visual and sound effects.":"返回下一次生成前的剩余时间(以秒为单位)。用于触发视觉和音频效果。","Time before the next spawn":"下次生成前的时间","_PARAM0_ just spawned an object":"_PARAM0_刚刚生成了一个对象","Check if an object has just been created by this spawner. Useful for triggering visual and sound effects.":"检查是否有对象被此生成点刚刚创建。用于触发视觉和音频效果。","Object was just spawned":"对象刚刚被生成","the max objects in the scene (per spawner) of the object. Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"场景中的对象的最大数量(每个生成点)。限制了由此生成点创建的场景中的对象数量。将其设置为0表示无限制。","the max objects in the scene (per spawner)":"场景中的对象的最大数量(每个生成点)","Check if spawner has unlimited capacity.":"检查生成点是否具有无限容量。","_PARAM0_ has unlimited capacity":"_PARAM0_具有无限容量","Change unlimited capacity of spawner.":"更改生成点的无限容量。","Unlimited object capacity":"无限对象容量","_PARAM0_ unlimited capacity: _PARAM2_":"_PARAM0_无限容量:_PARAM2_","UnlimitedObjectCapacity":"UnlimitedObjectCapacity","the number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"可由此生成的对象数量。每次生成对象时减少一次。","the spawner capacity":"生成器容量","Check if using random positions. Useful for making large spawner areas.":"检查是否使用随机位置。用于创建大型生成器区域。","Use random positions inside _PARAM0_":"在_PARAM0_内使用随机位置","Enable (or disable) random positions. Useful for making large spawner areas.":"启用(或禁用)随机位置。用于创建大型生成器区域。","Use random positions inside _PARAM0_: _PARAM2_":"在_PARAM0_内使用随机位置:_PARAM2_","RandomPosition":"随机位置","Object Stack":"对象堆栈","An ordered list of objects and a shuffle action.":"一个对象的有序列表和一个洗牌操作。","Check if the stack contains the object between a range. The lower and upper bounds are included.":"检查堆栈是否包含对象处于范围内。包含下限和上限。","Contain between a range":"包含在一定范围内","_PARAM3_ is into the stack of _PARAM1_ between _PARAM4_ and _PARAM5_":"_PARAM3_ 处于 _PARAM1_ 的堆栈之间的 _PARAM4_ 和 _PARAM5_","Stack":"堆栈","Stack behavior":"堆栈行为","Element":"元素","Lower bound":"下界","Upper bound":"上界","Check if the stack contains the object at a height.":"检查堆栈是否包含对象的高度。","Contain at":"包含于","_PARAM3_ is into the stack of _PARAM1_ at _PARAM4_":"_PARAM3_ 处于 _PARAM1_ 的堆栈内,高度为 _PARAM4_","Check if an object is on the stack top.":"检查对象是否位于堆栈顶部。","Stack top":"堆栈顶部","_PARAM3_ is on top of the stack of _PARAM1_":"_PARAM3_ 处于 _PARAM1_ 的堆栈顶部","Check if the stack contains the object.":"检查堆栈是否包含对象。","Contain":"包含","_PARAM3_ is into the stack of _PARAM1_":"_PARAM3_ 处于 _PARAM1_ 的堆栈内","Hold an ordered list of objects.":"保存一系列有序的对象。","Add the object on the top of the stack.":"将对象添加到堆栈顶部。","Add on top":"在顶部添加","Add _PARAM2_ on top of the stack of _PARAM0_":"在_PARAM0_的堆栈顶部添加_PARAM2_","Insert the object into the stack.":"将对象插入堆栈。","Insert into the stack":"插入堆栈","Insert _PARAM2_ into the stack of _PARAM0_ at height: _PARAM3_":"将_PARAM2_插入_PARAM0_的堆栈中,高度为:_PARAM3_","Remove the object from the stack.":"从堆栈中移除对象。","Remove from the stack":"从堆栈中移除","Remove _PARAM2_ from the stack of _PARAM0_":"从_PARAM0_的堆栈中移除_PARAM2_","Remove any object from the stack.":"从堆栈中移除任何对象。","Clear":"清空","Remove every object of the stack of _PARAM0_":"移除_PARAM0_的堆栈中的所有对象","Move the objects from a stack into another.":"将对象从一个堆栈移动到另一个堆栈。","Move into the stack":"移到堆栈中","Move the objects of the stack of _PARAM3_ from:_PARAM5_ to:_PARAM6_ into the stack of _PARAM0_ at height: _PARAM2_":"将_PARAM3_堆栈中的对象从:_PARAM5_移动到:_PARAM6_移到_PARAM0_的堆栈中,高度为:_PARAM2_","Move all the object from a stack into another.":"将堆栈中的所有对象移动到另一个堆栈。","Move all into the stack":"移到堆栈中所有部分","Move all the objects of the stack of _PARAM3_ into the stack of _PARAM0_ at height: _PARAM2_":"将_PARAM3_的堆栈中的所有对象移到_PARAM0_的堆栈中,高度为:_PARAM2_","Move all the object from a stack into another one at the top.":"将堆栈中的所有对象移动到另一个堆栈的顶部。","Move all on top of the stack":"移到堆栈的顶部","Move all the objects of the stack of _PARAM2_ on the top of the stack of _PARAM0_":"将_PARAM2_的堆栈中的所有对象移到_PARAM0_的堆栈的顶部","Shuffle the stack.":"洗牌堆栈。","Shuffle":"洗牌","Shuffle the stack of _PARAM0_":"洗牌_PARAM0_的堆栈","The height of an element in the stack.":"堆栈中元素的高度。","Height of a stack element":"堆栈元素的高度","the number of objects in the stack.":"栈中对象的数量。","Stack height":"栈的高度","the number of objects in the stack":"栈中对象的数量","Compare the number of objects in the stack.":"比较栈中对象的数量。","Stack height (deprecated)":"栈高度(已弃用)","_PARAM0_ has _PARAM2_ objects in its stack":"_PARAM0_的栈中有_PARAM2_个对象","Check if the stack is empty.":"检查栈是否为空。","Is empty":"为空","The stack of _PARAM0_ is empty":"_PARAM0_的栈为空","Make objects orbit around a center object":"使物体围绕一个中心对象运动","Make objects orbit around a center object in a circular or elliptical shape.":"使物体在圆形或椭圆形的方式围绕中心对象运动。","Move objects in orbit around a center object.":"环绕中心对象移动对象。","Move objects in orbit around a center object":"环绕中心对象移动对象","Animate _PARAM3_ copies of _PARAM2_ that orbit around _PARAM1_ at a distance of _PARAM5_ with orbit speed of _PARAM4_ degrees per second. Rotate orbiting objects at _PARAM6_ degrees per second. Start objects with an angle offset of _PARAM9_ degrees. Create objects on layer _PARAM7_ with Z value _PARAM8_. Reset locations of orbiting objects after quantity is reduced: _PARAM10_":"以 _PARAM5_ 的距离围绕 _PARAM1_ 旋转 _PARAM3_ 个 _PARAM2_ 的副本。以 _PARAM4_ 度每秒的速度旋转轨道对象。 以 _PARAM6_ 度每秒的速度旋转轨道对象。 在图层_PARAM7_上创建对象,具有Z值_PARAM8_。 当数量减少后,重新设置轨道对象的位置: _PARAM10_","Center object":"中心对象","Orbiting object":"环绕对象","Cannot be the same object used for the Center object":"不能与中心对象相同的对象","Quantity of orbiting objects":"环绕对象数量","Orbit speed (in degrees per second)":"每秒的轨道速度(角度)","Use negative numbers to orbit counter-clockwise":"使用负数按逆时针方向绕行","Distance from the center object (in pixels)":"距中心物体的距离(像素)","Angular speed (in degrees per second)":"角速度(每秒的角度)","Use negative numbers to rotate counter-clockwise":"使用负数按逆时针方向旋转","Layer that orbiting objects will be created on (base layer if empty)":"放置绕行对象的图层(如果为空则为基本图层)","Z order of orbiting objects":"绕行物体的Z顺序","Starting angle offset (in degrees)":"初始角度偏移(角度)","Reset locations of orbiting objects after quantity is reduced":"减少数量后重置绕行物体的位置","Move objects in elliptical orbit around a center object. Z-order is changed to make 3D effect.":"围绕中心物体的椭圆轨道上移动物体。Z顺序被更改以产生3D效果。","Move objects in elliptical orbit around a center object":"围绕中心物体的椭圆轨道上移动物体","Animate _PARAM3_ copies of _PARAM2_ in elliptical orbit around _PARAM1_ with vertical radius of _PARAM5_, horizontal radius of _PARAM9_ and an orbit speed of _PARAM4_ degrees per second. Foreground side is _PARAM10_. Rotate orbiting objects at _PARAM6_ degrees per second":"在中心物体周围的椭圆轨道上以每秒_PARAM4_度的速度动画化_PARAM3_个_PARAM2_副本。前景是_PARAM10_。以每秒_PARAM6_度的速度旋转绕行对象。","Vertical distance from the center object (pixels)":"距中心物体的垂直距离(像素)","Horizontal distance from the center object (pixels)":"距中心物体的水平距离(像素)","Foreground Side":"前景面","Delete orbiting objects that are linked to a center object.":"删除链接到中心物体的绕行物体。","Delete orbiting objects that are linked to a center object":"删除链接到中心物体的绕行物体","Delete all _PARAM2_ that are linked to _PARAM1_":"删除所有链接到_PARAM1_的_PARAM2_","Cannot be the same object that was used for the Center object":"不能与用于中心物体的相同物体","Labeled button":"带标签的按钮","A button with a label.":"一个带标签的按钮。","The finite state machine used internally by the button object.":"按钮物体内部使用的有限状态机。","Button finite state machine":"按钮有限状态机","Change the text style when the button is hovered.":"当鼠标悬停在按钮上时更改文本样式。","Hover text style":"悬停文本样式","Outline on hover":"悬停时的轮廓","Hover color":"悬停颜色","Enable shadow on hover":"悬停时启用阴影","Hover font size":"悬停字体大小","Idle font size":"静止字体大小","Idle color":"静止颜色","Check if isHovered.":"检查是否悬停。","IsHovered":"是否悬停","_PARAM0_ isHovered":"_PARAM0_ 是否悬停","Change if isHovered.":"若悬停则更改。","_PARAM0_ isHovered: _PARAM2_":"_PARAM0_ 是否悬停: _PARAM2_","Return the text color":"返回文本颜色","Text color":"文本颜色","Hover bitmap text style":"悬停位图文本样式","Hover prefix":"悬停前缀","Hover suffix":"悬停后缀","Idle text":"静止文本","Button with a label.":"带标签的按钮。","Label":"标签","Hovered fade out duration":"悬停渐变消失持续时间","States":"状态","Label offset on Y axis when pressed":"按下时Y轴的标签偏移","Change the text of the button label.":"更改按钮标签的文本。","Label text":"标签文本","Change the text of _PARAM0_ to _PARAM1_":"将_PARAM0_的文本更改为_PARAM1_","the label text.":"标签文本。","the label text":"标签文本","De/activate interactions with the button.":"激活/停用与按钮的交互。","De/activate interactions":"激活/停用交互","Activate interactions with _PARAM0_: _PARAM1_":"激活_PARAM0_的交互:_PARAM1_","Activate":"激活","Check if interactions are activated on the button.":"检查按钮是否激活交互。","Interactions activated":"交互已激活","Interactions on _PARAM0_ are activated":"_PARAM0_的交互已激活","the labelOffset of the object.":"对象的 labelOffset。","LabelOffset":"标签偏移","the labelOffset":"labelOffset","Resource bar (continuous)":"资源条(连续)","A bar that represents a resource in the game (health, mana, ammo, etc).":"表示游戏中的资源(生命、法力、弹药等)的条形图。","Resource bar":"资源栏","Previous high value":"以前的高值","Previous high value conservation duration (in seconds)":"以前的高值保留时间(以秒为单位)","the value of the object.":"对象的值。","the value":"值","the maximum value of the object.":"对象的最大值。","the maximum value":"最大值","Check if the bar is empty.":"检查栏是否为空。","Empty":"空","_PARAM0_ bar is empty":"_PARAM0_栏为空","Check if the bar is full.":"检查栏是否满。","Full":"满","_PARAM0_ bar is full":"_PARAM0_栏已满","the previous high value of the resource bar before the current change.":"当前更改之前资源栏的先前高值。","the previous high value":"先前高值","Force the previous resource value to update to the current one.":"强制先前的资源值更新为当前值。","Update previous value":"更新先前值","Update the previous resource value of _PARAM0_":"更新_PARAM0_的先前资源值","the previous high value conservation duration (in seconds) of the object.":"对象的先前高值保留时间(以秒为单位)。","Previous high value conservation duration":"先前高值保留时间","the previous high value conservation duration":"先前高值保留时间","Check if the resource value is changing.":"检查资源值是否在改变。","Value is changing":"值在改变","_PARAM0_ value is changing":"_PARAM0_值在改变","Initial value":"初始值","It's used to detect a change at hot reload.":"用于检测热重新加载时的更改。","Easing duration":"缓动持续时间","Show the label":"显示标签","Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.":"根据按钮配置居中栏。在按钮调整大小时,这在doStepPostEvents中使用。","Update layout":"更新布局","Update layout of _PARAM0_":"更新 _PARAM0_ 的布局","_PARAM0_ is empty":"_PARAM0_为空","_PARAM0_ is full":"_PARAM0_已满","the previous value conservation duration (in seconds) of the object.":"对象的先前值保留时间(以秒为单位)。","Previous value conservation duration":"先前值保留时间","the previous value conservation duration":"先前值的保留时间","Value width":"值的宽度","Check if the label is shown.":"检查标签是否显示。","Label is shown":"标签已显示","_PARAM0_ label is shown":"_PARAM0_ 标签已显示","Show (or hide) the label on the bar.":"在条上显示(或隐藏)标签。","Show label":"显示标签","Show the label of _PARAM0_: _PARAM1_":"显示 _PARAM0_ 的标签:_PARAM1_","Update the text that display the current value and maximum value.":"更新显示当前值和最大值的文本。","Update label":"更新标签","Update label of _PARAM0_":"更新 _PARAM0_ 的标签","Slider":"滑块","Represent a value on a slider.":"在滑块上表示一个值。","Step size":"步长","the minimum value of the object.":"对象的最小值。","the minimum value":"最小值","the bar value bounds size.":"条值界限的大小。","the bar value bounds size":"条值界限的大小","the step size of the object.":"对象的步长。","the step size":"步长","Bar left margin":"条左边距","Bar":"条","Bar top margin":"条顶部边距","Bar right margin":"条右边距","Bar bottom margin":"条底部边距","Show the label when the value is changed":"在值改变时显示标签","Label margin":"标签边距","Only used by the scene editor.":"仅由场景编辑器使用。","the value of the slider.":"滑块的值。","the minimum value of the slider.":"滑块的最小值。","the maximum value of the slider.":"滑块的最大值。","the step size of the slider.":"滑块的步长。","Update the thumb position according to the slider value.":"根据滑块值更新拇指位置。","Update thumb position":"更新拇指位置","Update the thumb position of _PARAM0_":"更新 _PARAM0_ 的拇指位置","Update the slider configuration.":"更新滑块配置。","Update slider configuration":"更新滑块配置","Update the slider configuration of _PARAM0_":"更新 _PARAM0_ 的滑块配置","Check if the slider allows interactions.":"检查滑块是否允许交互。","Parallax for Tiled Sprite":"平铺精灵的视差","Behaviors to animate Tiled Sprite objects in the background, following the camera with a parallax effect.":"用于在背景中动画平铺精灵对象的行为,并使用视差效果跟随摄像机。","Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"将瓷砖精灵的图像沿着视差效果水平跟随相机。将此添加到一个对象后,将该对象放在一个不移动的图层上,并置于被跟随的图层后面(例如,“背景”图层)。","Horizontal Parallax for a Tiled Sprite":"瓷砖精灵的水平视差","Parallax factor (speed for the parallax, usually between 0 and 1)":"视差系数(视差速度,通常在0和1之间)","Layer to be followed (leave empty for the base layer)":"要跟随的图层(留空以使用基本图层)","Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"将瓷砖精灵的图像垂直跟随相机,以产生视差效应。添加此效果到一个对象后,将对象放在一个不动的图层上,放在被跟随的图层后面(例如,一个名为“背景”的图层)。","Vertical Parallax for a Tiled Sprite":"瓷砖精灵的垂直视差","Offset on Y axis":"Y轴偏移","3D particle emitter":"3D 粒子发射器","Display a large number of particles in 3D to create visual effects in a 3D game.":"在3D游戏中显示大量粒子以创建视觉效果。","Display a large number of particles to create visual effects.":"显示大量粒子以创建视觉效果。","Start color":"起始颜色","End color":"结束颜色","Start opacity":"起始不透明度","Flow of particles (particles per second)":"粒子的流动(每秒的粒子数)","Start min size":"开始最小尺寸","Start max size":"开始最大尺寸","End scale":"结束比例","Start min speed":"开始最小速度","Start max speed":"开始最大速度","Min lifespan":"最小寿命","Max lifespan":"最大寿命","Emission duration":"发射持续时间","Particles move with the emitter":"粒子随发射器移动","Spay cone angle":"喷射锥角","Blending":"混合","Gravity top":"重力顶部","Delete when emission ends":"发射结束时删除","Z (elevation)":"Z(高度)","Deprecated":"弃用","Rotation on X axis":"X轴旋转","Rotation on Y axis":"Y轴旋转","Start min length":"开始最小长度","Trail":"尾迹","Start max length":"开始最大长度","Render mode":"渲染模式","Follow the object":"跟随该对象","Tail end width ratio":"尾部宽度比","Update from properties.":"从属性更新。","Update from properties":"从属性更新","Update from properties of _PARAM0_":"更新 _PARAM0_ 的属性","Update helper":"更新助手","Update graphical helper of _PARAM0_":"更新 _PARAM0_ 的图形助手","Update particle image":"更新粒子图像","Update particle image of _PARAM0_":"更新 _PARAM0_ 的粒子图像","Register in layer":"在图层中注册","Register _PARAM0_ in layer":"在图层中注册 _PARAM0_","Delete itself":"删除本身","Delete _PARAM0_":"删除 _PARAM0_","Check that emission has ended and no particle is alive anymore.":"检查放射是否已结束,没有粒子再存活。","Emission has ended":"放射已结束","Emission from _PARAM0_ has ended":"_PARAM0_的放射已结束","Restart particule emission from the beginning.":"从头开始重启粒子放射。","Restart":"重启","Restart particule emission from _PARAM0_":"从_PARAM0_重启粒子放射","the Z position of the emitter.":"放射器的Z位置。","Z elevaltion (deprecated)":"Z高度(已弃用)","the Z position":"Z位置","the rotation on X axis of the emitter.":"放射器X轴旋转。","Rotation on X axis (deprecated)":"X轴旋转(已弃用)","the rotation on X axis":"X轴旋转","the rotation on Y axis of the emitter.":"放射器Y轴旋转。","Rotation on Y axis (deprecated)":"Y轴旋转(已弃用)","the rotation on Y axis":"Y轴旋转","the start color of the object.":"对象的起始颜色。","the start color":"起始颜色","the end color of the object.":"对象的结束颜色。","the end color":"结束颜色","the start opacity of the object.":"对象的起始不透明度。","the start opacity":"起始不透明度","the end opacity of the object.":"对象的结束不透明度。","the end opacity":"结束不透明度","the flow of particles of the object (particles per second).":"对象的粒子流量(每秒粒子数)。","Flow of particles":"粒子流量","the flow of particles":"粒子流量","the start min size of the object.":"对象的起始最小大小。","the start min size":"起始最小大小","the start max size of the object.":"对象的起始最大大小。","the start max size":"起始最大大小","the end scale of the object.":"对象的结束比例。","the end scale":"终点刻度","the min start speed of the object.":"物体的最小初始速度。","Min start speed":"最小初始速度","the min start speed":"物体的最小初始速度","the max start speed of the object.":"物体的最大初始速度。","Max start speed":"最大初始速度","the max start speed":"物体的最大初始速度","the min lifespan of the object.":"物体的最小寿命。","the min lifespan":"最小寿命","the max lifespan of the object.":"物体的最大寿命。","the max lifespan":"最大寿命","the emission duration of the object.":"物体的发射持续时间。","the emission duration":"发射持续时间","Check if particles move with the emitter.":"检查粒子是否随喷射器移动。","_PARAM0_ particles move with the emitter":"_PARAM0_粒子随喷射器移动","Change if particles move with the emitter.":"更改粒子是否随喷射器移动。","_PARAM0_ particles move with the emitter: _PARAM1_":"_PARAM0_粒子随喷射器移动:_PARAM1_","AreParticlesRelative":"粒子相对","the spay cone angle of the object.":"物体的喷射锥角。","the spay cone angle":"喷射锥角","the blending of the object.":"物体的混合效果。","the blending":"混合效果","the gravity top of the object.":"物体的顶部重力。","the gravity top":"顶部重力","the gravity of the object.":"物体的重力。","the gravity":"重力","Check if delete when emission ends.":"检查是否在发射结束时删除粒子。","_PARAM0_ delete when emission ends":"_PARAM0_发射结束时删除","Change if delete when emission ends.":"更改发射结束时是否删除。","_PARAM0_ delete when emission ends: _PARAM1_":"_PARAM0_发射结束时删除:_PARAM1_","ShouldAutodestruct":"自动销毁","the start min trail length of the object.":"对象的最小起始尾迹长度。","Start min trail length":"最小尾迹长度","the start min trail length":"最小起始尾迹长度","the start max trail length of the object.":"对象的最大起始尾迹长度。","Start max trail length":"最大尾迹长度","the start max trail length":"最大起始尾迹长度","Check if the trail should follow the object.":"检查尾迹是否应该跟随对象。","Trail following the object":"尾迹跟随对象","The trail is following _PARAM0_":"尾迹正在跟随 _PARAM0_","Change if the trail should follow the object or not.":"更改尾迹是否应该跟随对象。","Make the trail follow":"让尾迹跟随","Make the trail follow _PARAM0_: _PARAM1_":"让尾迹跟随 _PARAM0_: _PARAM1_","IsTrailFollowingLocalOrigin":"IsTrailFollowingLocalOrigin","the tail end width ratio of the object.":"对象的尾部宽度比。","the tail end width ratio":"尾部宽度比","the render mode of the object.":"对象的渲染模式。","the render mode":"渲染模式","2D Top-Down Physics Car":"2D 从上到下的物理车","Simulate top-down car motion with drifting.":"模拟从上到下的汽车运动带漂移。","Simulate 2D car motion, from a top-down view.":"从上到下的视角模拟 2D 汽车运动。","Physics car":"物理汽车","Physics Engine 2.0":"物理引擎 2.0","Wheel grip ratio (from 0 to 1)":"轮胎抓地比率(0到1)","A ratio of 0 is like driving on ice.":"比率0就像在冰上行驶。","Steering":"转向","Steering speed":"转向速度","Sterring speed when turning back":"向后转弯时的转向速度","Maximum steering angle":"最大转向角度","Steering angle":"转向角度","Front wheels position":"前轮位置","0 means at the center, 1 means at the front":"0意味着在中心,1意味着在前面","Wheels":"车轮","Rear wheels position":"后轮位置","0 means at the center, 1 means at the back":"0意味着在中心,1意味着在后面","Simulate a press of the right key.":"模拟按下右键。","Simulate right key press":"模拟按下右键","Simulate pressing right for _PARAM0_":"模拟按下右键_PARAM0_","Simulate a press of the left key.":"模拟按下左键。","Simulate left key press":"模拟按下左键","Simulate pressing left for _PARAM0_":"模拟按下左键_PARAM0_","Simulate a press of the up key.":"模拟按下上键。","Simulate up key press":"模拟上键按下","Simulate pressing up for _PARAM0_":"模拟按下上键,_PARAM0_","Simulate a press of the down key.":"模拟按下下键。","Simulate down key press":"模拟下键按下","Simulate pressing down for _PARAM0_":"模拟按下下键,_PARAM0_","Simulate a steering stick for a given axis force.":"模拟给定轴力的方向盘。","Simulate steering stick":"模拟方向盘","Simulate a steering stick for _PARAM0_ with a force of _PARAM2_":"模拟一个力为_PARAM2_的方向盘给_PARAM0_","Simulate an acceleration stick for a given axis force.":"模拟给定轴力的加速度方向盘。","Simulate acceleration stick":"模拟加速度方向盘","Simulate an acceleration stick for _PARAM0_ with a force of _PARAM2_":"模拟一个力为_PARAM2_的加速度方向盘给_PARAM0_","Apply wheel forces":"应用轮子力","Apply forces on the wheel at _PARAM2_ ; _PARAM3_ and _PARAM4_° of _PARAM0_":"在_PARAM0_上施加力,参数为_PARAM2_、PARAM3_和PARAM4_°","Wheel X":"轮子X","Wheel Y":"轮子Y","Wheel angle":"轮子角度","Return the momentum of inertia (in kg ⋅ pixel²)":"返回动量惯性(以kg ⋅ pixel²为单位)","Momentum of inertia":"惯性动量","Apply a polar force":"应用极性力","Length (in kg ⋅ pixels ⋅ s^−2)":"长度(以kg ⋅ pixels ⋅ s^−2为单位)","Draw forces applying on the car for debug purpose.":"绘制调试目的车辆上施加的力。","Draw forces for debug":"绘制调试用力","Draw forces of car _PARAM0_ on _PARAM2_":"绘制车辆_PARAM0_在_PARAM2_上的力","the steering angle of the object.":"对象的转向角度。","the steering angle":"转向角度","the wheel grip ratio of the object (from 0 to 1). A ratio of 0 is like driving on ice.":"对象的轮胎抓地比(从0到1)。 比率为0的效果如同在冰面上行驶。","Wheel grip ratio":"轮胎抓地比","the wheel grip ratio":"对象的轮胎抓地比","the maximum steering angle of the object.":"对象的最大转向角度。","the maximum steering angle":"最大转向角度","the steering speed of the object.":"对象的转向速度。","the steering speed":"转向速度","the sterring speed when turning back of the object.":"转向后对象的转向速度。","Sterring back speed":"转向后的速度","the sterring speed when turning back":"转向时转向速度","3D car keyboard mapper":"3D car keyboard mapper","3D car keyboard controls.":"3D car keyboard controls.","Control a 3D physics car with a keyboard.":"Control a 3D physics car with a keyboard.","Hand brake key":"Hand brake key","3D physics character animator":"3D 物理角色动画制作器","Change animations of a 3D physics character automatically.":"自动更改 3D 物理角色的动画。","Animatable capacity":"可动画容量","\"Idle\" animation name":"\"待机\"动画名称","Animation names":"动画名称","\"Run\" animation name":"\"跑步\"动画名称","\"Jump\" animation name":"\"跳跃\"动画名称","\"Fall\" animation name":"\"下落\"动画名称","3D character keyboard mapper":"3D角色键盘映射器","3D platformer and 3D shooter keyboard controls.":"3D平台游戏和3D射击游戏键盘控制。","Control a 3D physics character with a keyboard for a platformer or a top-down game.":"用键盘控制3D物理角色,用于平台游戏或顶部视角游戏。","3D platformer keyboard mapper":"3D平台游戏键盘映射","Camera is locked for the frame":"相机已锁定该帧","Check if camera is locked for the frame.":"检查相机是否锁定到帧。","Camera is locked":"相机已锁定","_PARAM0_ camera is locked for the frame":"帧已锁定_PARAM0_相机","Change if camera is locked for the frame.":"更改是否锁定相机到帧。","Lock the camera":"锁定相机","_PARAM0_ camera is locked for the frame: _PARAM2_":"帧已锁定_PARAM0_相机:_PARAM2_","Control a 3D physics character with a keyboard for a first or third person shooter.":"用键盘控制3D物理角色,用于第一人称射击或第三人称射击。","3D shooter keyboard mapper":"3D射击游戏键盘映射","3D ellipse movement":"3D椭圆运动","3D physics engine":"3D物理引擎","Ellipse width":"椭圆宽度","Ellipse height":"椭圆高度","the ellipse width of the object.":"对象的椭圆宽度。","the ellipse width":"椭圆宽度","the ellipse height of the object.":"对象的椭圆高度。","the ellipse height":"椭圆高度","the loop duration (in seconds).":"循环持续时间(秒)。","the loop duration":"循环持续时间","Pinching gesture":"捏合手势","Move the camera or objects with pinching gestures.":"使用捏合手势移动相机或物体。","Enable or disable camera pinch.":"启用或禁用镜头捏合。","Enable or disable camera pinch":"启用或禁用镜头捏合","Enable camera pinch: _PARAM1_":"启用镜头捏合:_PARAM1_","Enable camera pinch":"启用镜头捏合","Check if camera pinch is enabled.":"检查镜头捏合是否已启用。","Camera pinch is enabled":"镜头捏合已启用","Choose the layer to move with pinch gestures.":"选择使用捏合手势移动的层。","Camera pinch layer":"镜头捏合层","Choose the layer _PARAM1_ to move with pinch gestures":"选择使用捏合手势移动的层_PARAM1_","Change the camera pinch constraint.":"更改相机捏合约束。","Camera pinch constraints":"相机捏合约束","Change the camera pinch constraint to _PARAM1_":"将相机捏合约束更改为_PARAM1_","Constraint":"约束","Pinch the camera of a layer.":"捏合相机的一个层。","Pinch camera":"捏合相机","Pinch the camera of layer: _PARAM1_ with constraint: _PARAM2_":"捏合层:_PARAM1_ 上的相机,使用约束:_PARAM2_","Check if a touch is pinching, if 2 touches are pressed.":"检查是否有一个触摸捏合,如果有2个触摸在按压。","Touch is pinching":"触摸正在捏合","Return the scaling of the pinch gesture from its beginning.":"返回捏合手势从其开始的缩放。","Pinch scaling":"捏合缩放","Return the rotation of the pinch gesture from its beginning (in degrees).":"返回捏合手势从其开始的旋转(以度为单位)。","Pinch rotation":"捏合旋转","Return the X position of the pinch center at the beginning of the gesture.":"返回手势开始时捏合中心的X位置。","Pinch beginning center X":"捏合开始中心X","Return the Y position of the pinch center at the beginning of the gesture.":"在手势开始时返回捏合中心的Y位置。","Pinch beginning center Y":"捏合开始中心Y","Return the X position of the pinch center.":"返回捏合中心的X位置。","Pinch center X":"捏合中心X","Return the Y position of the pinch center.":"返回捏合中心的Y位置。","Pinch center Y":"捏合中心Y","Return the horizontal translation of the pinch gesture from its beginning.":"从开始时返回捏合手势的水平平移。","Pinch translation X":"捏合平移X","Return the vertical translation of the pinch gesture from its beginning.":"从开始时返回捏合手势的垂直平移。","Pinch translation Y":"捏合平移Y","Return the new X position of a point after the pinch gesture.":"返回捏合手势后点的新X位置。","Transform X position":"变换X位置","Position X before the pinch":"捏合前X位置","Position Y before the pinch":"捏合前Y位置","Return the new Y position of a point after the pinch gesture.":"返回捏合手势后点的新Y位置。","Transform Y position":"变换Y位置","Return the original X position of a point before the pinch gesture.":"返回捏合手势前点的原始X位置。","Inversed transform X position":"反向变换X位置","Position X after the pinch":"捏合后X位置","Position Y after the pinch":"捏合后Y位置","Return the new position on the Y axis of a point after the pinch gesture.":"返回捏合手势后点在Y轴上的新位置。","Inversed transform Y position":"反向变换Y位置","Return the X coordinate of a position transformed from the scene to the canvas according to a layer.":"从一个图层按照场景转换为画布的位置返回点的X坐标。","Transform X to canvas":"把X转换到画布","Return the Y coordinate of a position transformed from the scene to the canvas according to a layer.":"从一个图层按照场景转换为画布的位置返回点的Y坐标。","Transform Y to canvas":"把Y转换到画布","Return the X coordinate of a position transformed from the canvas to the scene according to a layer.":"从画布按照场景转换到一个图层的位置返回点的X坐标。","Transform X to scene":"把X转换到场景","Return the Y coordinate of a position transformed from the canvas to the scene according to a layer.":"从画布按照场景转换到一个图层的位置返回点的Y坐标。","Transform Y to scene":"把Y转换到场景","Return the touch X on the canvas.":"返回画布上的触摸X。","Touch X on canvas":"画布上的触摸X","Return the touch Y on the canvas.":"返回画布上的触摸Y。","Touch Y on canvas":"画布上的触摸Y","Return the X coordinate of a vector after a rotation":"返回旋转后向量的X坐标","Rotated vector X":"旋转后的X轴向量","Vector X":"X轴向量","Vector Y":"Y轴向量","Angle (in degrees)":"角度(以度为单位)","Return the Y coordinate of a vector after a rotation":"在旋转后得到向量的Y坐标","Rotated vector Y":"旋转后的Y轴向量","Move objects by holding 2 touches on them.":"通过保持两个触摸来移动对象。","Pinchable object":"可捏合的对象","Resizable capability":"可调整大小的功能","Lock object size":"锁定对象大小","Check if the object is being pinched.":"检查对象是否被捏。","Is being pinched":"正在被捏","_PARAM0_ is being pinched":"_PARAM0_被捏住","Abort the pinching of this object.":"中止捏制该对象。","Abort pinching":"中止捏制","Abort the pinching of _PARAM0_":"中止捏制_PARAM0_","Pixel perfect movement":"像素完美移动","Grid-based or pixel perfect platformer and top-down movements.":"基于网格或像素完美的平台游戏和俯视移动。","Return the speed necessary to cover a distance according to the deceleration.":"根据减速返回覆盖距离所需的速度。","Speed to reach":"到达速度","Braking distance from an initial speed: _PARAM2_ and a deceleration: _PARAM3_ is less than _PARAM1_":"从初始速度:_PARAM2_和减速:_PARAM3_的制动距离小于_PARAM1_","Distance":"距离","Return the braking distance according to an initial speed and a deceleration.":"根据初始速度和减速返回制动距离。","Braking distance":"制动距离","Define JavaScript classes for top-down.":"为自顶向下定义JavaScript类。","Define JavaScript classes for top-down":"为自顶向下定义JavaScript类","Define JavaScript classes for top-down":"为自顶向下定义JavaScript类","Seamlessly align big pixels using a top-down movement.":"使用自顶向下移动无缝对齐大像素。","Pixel perfect top-down movement":"像素完美的自顶向下运动","Pixel size":"像素尺寸","Pixel grid offset X":"像素网格偏移X","Pixel grid offset Y":"像素网格偏移Y","Seamlessly align big pixels using a 2D platformer character movement.":"无缝对齐大像素,使用二维平台角色移动。","Pixel perfect platformer character":"像素完美的平台游戏角色","Platformer character animator":"平台角色动画制作器","Change animations and horizontal flipping of a platformer character automatically.":"自动更改平台游戏角色的动画和水平翻转。","Enable animation changes":"启用动画更改","Enable horizontal flipping":"启用水平翻转","\"Climb\" animation name":"\"攀爬\"动画名称","Platformer character":"平台游戏角色","Flippable capacity":"可翻转能力","Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.":"启用(或禁用)平台角色的动画更改。禁用动画更改可用于播放自定义动画。","Enable (or disable) automated animation changes":"启用(或禁用)自动动画更改","Enable automated animation changes on _PARAM0_: _PARAM2_":"在_PARAM0_上启用自动动画更改:_PARAM2_","Change animations automatically":"自动更改动画","Enable (or disable) automated horizontal flipping of a platform character.":"启用(或禁用)平台角色的自动水平翻转。","Enable (or disable) automated horizontal flipping":"启用(或禁用)自动水平翻转","Enable automated horizontal flipping on _PARAM0_: _PARAM2_":"在_PARAM0_上启用自动水平翻转:_PARAM2_","Set the \"Idle\" animation name. Do not use quotation marks.":"设置“空闲”动画名称。请勿使用引号。","Set \"Idle\" animation of _PARAM0_ to _PARAM2_":"将_PARAM0_的“Idle”动画设置为_PARAM2_","Animation name":"动画名称","Set the \"Move\" animation name. Do not use quotation marks.":"设置“移动”动画名称。请勿使用引号。","\"Move\" animation name":"“移动”动画名称","Set \"Move\" animation of _PARAM0_ to _PARAM2_":"将_PARAM0_的“Move”动画设置为_PARAM2_","Set the \"Jump\" animation name. Do not use quotation marks.":"设置“跳跃”动画名称。请勿使用引号。","Set \"Jump\" animation of _PARAM0_ to _PARAM2_":"将_PARAM0_的\"跳跃\"动画设置为_PARAM2_","Set the \"Fall\" animation name. Do not use quotation marks.":"设置\"Fall\"动画名称。请勿使用引号。","Set \"Fall\" animation of _PARAM0_ to _PARAM2_":"将_PARAM0_的\"下落\"动画设置为_PARAM2_","Set the \"Climb\" animation name. Do not use quotation marks.":"设置\"Climb\"动画名称。请勿使用引号。","Set \"Climb\" animation of _PARAM0_ to _PARAM2_":"将_PARAM0_的\"攀爬\"动画设置为_PARAM2_","Platformer trajectory":"平台游戏角色轨迹","Platformer character jump easy configuration and platformer AI tools.":"平台游戏角色跳跃轻松配置和平台游戏AI工具。","Configure the height of a jump and evaluate the jump trajectory.":"配置跳跃高度并评估跳跃轨迹。","Platformer trajectory evaluator":"平台游戏角色轨迹评估器","Jump height":"跳跃高度","Change the jump speed to reach a given height.":"更改跳跃速度以达到给定的高度。","Change the jump height of _PARAM0_ to _PARAM2_":"将_PARAM0_的跳跃高度更改为_PARAM2_","Draw the jump trajectories from no sustain to full sustain.":"从无维持到完全维持绘制跳跃轨迹。","Draw jump":"绘制跳跃","Draw the jump trajectory of _PARAM0_ on _PARAM2_":"在_PARAM2_上绘制_PARAM0_的跳跃轨迹","The jump Y displacement at a given time from the start of the jump.":"给定时间从跳跃开始时的跳跃Y位移。","Jump Y":"跳跃Y","Jump sustaining duration":"跳跃维持持续时间","The maximum Y displacement.":"最大Y位移。","Peak Y":"顶点Y","The time from the start of the jump when it reaches the maximum Y displacement.":"从跳跃开始时到达最大Y位移时的时间。","Peak time":"顶点时间","The time from the start of the jump when it reaches a given Y displacement moving upward.":"从跳跃开始时到达给定向上Y位移的时间。","Jump up time":"向上跳跃时间","The time from the start of the jump when it reaches a given Y displacement moving downward.":"从跳跃开始时到达给定向下Y位移的时间。","Jump down time":"向下跳跃时间","The X displacement before the character stops (always positive).":"角色停止前的X位移(始终为正)。","Stop distance":"停止距离","The X displacement at a given time from now if decelerating (always positive).":"从现在开始,如果减速,到达给定时间的X位移(始终为正)。","Stopping X":"减速X","The X displacement at a given time from now if accelerating (always positive).":"从现在开始,如果加速,到达给定时间的X位移(始终为正)。","Moving X":"加速X","Player avatar":"玩家头像","Display player avatars according to their GDevelop account.":"根据其GDevelop帐户显示玩家头像。","Return the UserID from a lobby player number.":"从大厅玩家编号返回UserID。","UserID":"用户ID","Lobby player number":"大厅玩家编号","Display a player avatar according to their GDevelop account.":"根据其 GDevelop 账户显示玩家头像。","Multiplayer Avatar":"多人游戏玩家头像","Border enabled":"启用边框","Enable the border on the avatar.":"在头像上启用边框。","Player unique ID":"玩家唯一ID","the player unique ID of the avatar.":"玩家角色头像的唯一ID。","the player unique ID":"玩家唯一ID","Playgama Bridge":"Playgama桥","One SDK for cross-platform publishing HTML5 games.":"一个用于跨平台发布HTML5游戏的SDK。","Add Action Parameter.":"添加操作参数。","Add Action Parameter":"添加操作参数","Add Action Parameter _PARAM1_ : _PARAM2_":"添加操作参数 _PARAM1_:_PARAM2_","Path":"路径","Add Bool Action Parameter.":"添加布尔操作参数。","Add Bool Action Parameter":"添加布尔操作参数","Is Initialized.":"已初始化。","Is Initialized":"已初始化","Platform Id.":"平台ID。","Platform Id":"平台ID","Platform Language.":"平台语言。","Platform Language":"平台语言","Platform Payload.":"平台有效载荷。","Platform Payload":"平台有效载荷","Platform Tld.":"平台顶级域。","Platform Tld":"平台顶级域","Platform Is Audio Enabled.":"平台已启用音频。","Platform Is Audio Enabled":"平台已启用音频","Platform Is Paused.":"平台已暂停。","Platform Is Paused":"平台已暂停","Is Get All Games Supported.":"Is Get All Games Supported.","Is Get All Games Supported":"Is Get All Games Supported","Is Get Game By Id Supported.":"Is Get Game By Id Supported.","Is Get Game By Id Supported":"Is Get Game By Id Supported","On Get All Games Completed.":"On Get All Games Completed.","On Get All Games Completed":"On Get All Games Completed","On Get Game By Id Completed.":"On Get Game By Id Completed.","On Get Game By Id Completed":"On Get Game By Id Completed","Platform Get All Games.":"Platform Get All Games.","Platform Get All Games":"Platform Get All Games","Platform Get Game By Id.":"Platform Get Game By Id.","Platform Get Game By Id":"Platform Get Game By Id","Platform All Games Count.":"Platform All Games Count.","Platform All Games Count":"Platform All Games Count","Platform All Game Properties Count.":"Platform All Game Properties Count.","Platform All Game Properties Count":"Platform All Game Properties Count","Platform All Games Property Name.":"Platform All Games Property Name.","Platform All Games Property Name":"Platform All Games Property Name","Property Index":"属性索引","Platform All Games Property Value.":"Platform All Games Property Value.","Platform All Games Property Value":"Platform All Games Property Value","Game Index":"Game Index","Property":"属性","Platform Game By Id Property Value.":"Platform Game By Id Property Value.","Platform Game By Id Property Value":"Platform Game By Id Property Value","Platform On Audio State Changed.":"平台音频状态已更改。","Platform On Audio State Changed":"平台的音频状态已改变","Platform On Pause State Changed.":"平台暂停状态已更改。","Platform On Pause State Changed":"平台暂停状态已更改","Device Type.":"设备类型。","Device Type":"设备类型","Is Mobile.":"是手机。","Is Mobile":"是手机","Is Tablet.":"是平板电脑。","Is Tablet":"是平板电脑","Is Desktop.":"是台式电脑。","Is Desktop":"是台式电脑","Is Tv.":"是电视。","Is Tv":"是电视","Player Id.":"玩家ID。","Player Id":"玩家ID","Player Name.":"玩家名称。","Player Name":"玩家名称","Player Extra Properties Count.":"玩家额外属性数量。","Player Extra Properties Count":"玩家额外属性数量","Player Extra Property Name.":"玩家额外属性名称。","Player Extra Property Name":"玩家额外属性名称","Player Extra Property Value.":"玩家额外属性值。","Player Extra Property Value":"玩家额外属性值","Player Photos Count.":"玩家照片数量。","Player Photos Count":"玩家照片数量","Player Photo # _PARAM1_.":"玩家照片# _PARAM1_。","Player Photo":"玩家照片","Index":"索引","Visibility State.":"可见状态。","Visibility State":"可见状态","On Visibility State Changed.":"在可见状态改变时。","On Visibility State Changed":"在可见状态改变时","Default Storage Type.":"默认存储类型。","Default Storage Type":"默认存储类型","Storage Data.":"存储数据。","Storage Data":"存储数据","Storage Data As JSON.":"存储数据为 JSON。","Storage Data As JSON":"存储数据为 JSON","Append Parameter to Storage Data Get Request.":"追加参数到存储数据获取请求。","Append Parameter to Storage Data Get Request":"追加参数到存储数据获取请求","Append Parameter _PARAM1_ to Storage Data Get Request":"追加参数_PARAM1_到存储数据获取请求","Append Parameter to Storage Data Set Request.":"追加参数到存储数据设置请求。","Append Parameter to Storage Data Set Request":"追加参数到存储数据设置请求","Append Parameter _PARAM1_ : _PARAM2_ to Storage Data Set Request":"追加参数_PARAM1_: _PARAM2_到存储数据设置请求","Append Parameter to Storage Data Delete Request.":"追加参数到存储数据删除请求。","Append Parameter to Storage Data Delete Request":"追加参数到存储数据删除请求","Append Parameter _PARAM1_ to Storage Data Delete Request":"追加参数_PARAM1_到存储数据删除请求","Is Last Action Completed Successfully.":"上一操作成功完成。","Is Last Action Completed Successfully":"上一操作成功完成","Send Storage Data Get Request.":"发送存储数据获取请求。","Send Storage Data Get Request":"发送存储数据获取请求","Send Storage Data Get Request _PARAM1_":"发送存储数据获取请求_PARAM1_","Storage Type":"存储类型","Send Storage Data Set Request.":"发送存储数据设置请求。","Send Storage Data Set Request":"发送存储数据设置请求","Send Storage Data Set Request _PARAM1_":"发送存储数据设置请求_PARAM1_","Send Storage Data Delete Request.":"发送存储数据删除请求。","Send Storage Data Delete Request":"发送存储数据删除请求","Send Storage Data Delete Request _PARAM1_":"发送存储数据删除请求_PARAM1_","On Storage Data Get Request Completed.":"在存储数据获取请求完成时。","On Storage Data Get Request Completed":"在存储数据获取请求完成时","On Storage Data Set Request Completed.":"在存储数据设置请求完成时。","On Storage Data Set Request Completed":"在存储数据设置请求完成时","On Storage Data Delete Request Completed.":"存储数据删除请求已完成。","On Storage Data Delete Request Completed":"Storage Data Delete Request Completed","Has Storage Data.":"有存储数据。","Has Storage Data":"有存储数据","Has _PARAM1_ in Storage Data":"存储数据中包含_PARAM1_","Is Storage Supported.":"存储支持。","Is Storage Supported":"Storage Supported","Is Storage Supported _PARAM1_":"存储支持_PARAM1_","Is Storage Available.":"存储可用。","Is Storage Available":"Storage Available","Is Storage Available _PARAM1_":"存储可用_PARAM1_","Set Minimum Delay Between Interstitial.":"设置插页广告之间的最小延迟。","Set Minimum Delay Between Interstitial":"设置插页广告之间的最小延迟","Set Minimum Delay Between Interstitial _PARAM1_":"设置插页广告之间的最小延迟_PARAM1_","Seconds":"秒","Show Banner.":"显示横幅。","Show Banner":"显示横幅","Show Banner on _PARAM1_ with placement _PARAM2_":"在 _PARAM1_ 上显示横幅,放置 _PARAM2_","Placement (optional)":"放置(可选)","Hide Banner.":"隐藏横幅。","Hide Banner":"隐藏横幅","Show Interstitial.":"显示插页广告。","Show Interstitial":"显示插页广告","Show Interstitial with placement _PARAM1_":"使用放置 _PARAM1_ 显示插页式广告","Show Rewarded.":"显示激励视频广告。","Show Rewarded":"显示激励视频广告","Show Rewarded with placement _PARAM1_":"使用放置 _PARAM1_ 显示奖励广告","Check AdBlock.":"检查广告拦截。","Check AdBlock":"检查广告拦截","Minimum Delay Between Interstitial.":"插页广告之间的最小延迟。","Minimum Delay Between Interstitial":"插页广告之间的最小延迟","Banner State.":"横幅状态。","Banner State":"横幅状态","Interstitial State.":"插页广告状态。","Interstitial State":"插屏广告状态","Rewarded State.":"激励视频状态。","Rewarded State":"激励视频状态","Rewarded Placement.":"奖励放置。","Rewarded Placement":"奖励放置","Is Banner Supported.":"横幅广告支持情况。","Is Banner Supported":"横幅广告支持情况","Is Interstitial Supported.":"插页式广告是否受支持。","Is Interstitial Supported":"插页式广告是否受支持","Is Rewarded Supported.":"奖励广告是否受支持。","Is Rewarded Supported":"奖励广告是否受支持","On Banner State Changed.":"横幅广告状态已更改。","On Banner State Changed":"横幅广告状态已更改","On Banner Loading.":"横幅广告加载中。","On Banner Loading":"横幅广告加载中","On Banner Shown.":"横幅广告已显示。","On Banner Shown":"横幅广告已显示","On Banner Hidden.":"横幅广告已隐藏。","On Banner Hidden":"横幅广告已隐藏","On Banner Failed.":"横幅广告加载失败。","On Banner Failed":"横幅广告加载失败","On Interstitial State Changed.":"插屏广告状态已更改。","On Interstitial State Changed":"插屏广告状态已更改","On Interstitial Loading.":"插屏广告加载中。","On Interstitial Loading":"插屏广告加载中","On Interstitial Opened.":"插屏广告已展示。","On Interstitial Opened":"插屏广告已展示","On Interstitial Closed.":"插屏广告已关闭。","On Interstitial Closed":"插屏广告已关闭","On Interstitial Failed.":"插屏广告加载失败。","On Interstitial Failed":"插屏广告加载失败","On Rewarded State Changed.":"激励视频状态已更改。","On Rewarded State Changed":"激励视频状态已更改","On Rewarded Loading.":"激励视频加载中。","On Rewarded Loading":"激励视频加载中","On Rewarded Opened.":"激励视频已展示。","On Rewarded Opened":"激励视频已展示","On Rewarded Closed.":"激励视频已关闭。","On Rewarded Closed":"激励视频已关闭","On Rewarded Rewarded.":"激励视频已获得奖励。","On Rewarded Rewarded":"激励视频已获得奖励","On Rewarded Failed.":"激励视频加载失败。","On Rewarded Failed":"激励视频加载失败","On Check AdBlock Completed.":"检查广告拦截已完成。","On Check AdBlock Completed":"检查广告拦截已完成","Send Message.":"发送消息。","Send Message":"发送消息","Send Message _PARAM1_":"发送消息_PARAM1_","Message":"消息","Get Server Time.":"获取服务器时间。","Get Server Time":"获取服务器时间","Server Time.":"服务器时间。","Server Time":"服务器时间","On Get Server Time Completed.":"在获取服务器时间完成时。","On Get Server Time Completed":"获取服务器时间完成时","Has Server Time.":"有服务器时间。","Has Server Time":"有服务器时间","Authorize Player.":"授权玩家。","Authorize Player":"授权玩家","Is Player Authorization Supported.":"玩家授权是否支持。","Is Player Authorization Supported":"玩家授权是否支持","Is Player Authorized.":"玩家是否授权。","Is Player Authorized":"玩家是否授权","On Authorize Player Completed.":"在授权玩家完成时。","On Authorize Player Completed":"授权玩家完成时","Does Player Have Name.":"玩家是否有姓名。","Does Player Have Name":"玩家是否有姓名","Does Player Have Photo.":"玩家是否有照片。","Does Player Have Photo":"玩家是否有照片","Does Player Have Photo # _PARAM1_":"玩家是否有照片#_PARAM1_","Share.":"分享。","Share":"分享","Invite Friends.":"邀请好友。","Invite Friends":"邀请好友","Join Community.":"加入社区。","Join Community":"加入社区","Create Post.":"创建帖子。","Create Post":"创建帖子","Add To Home Screen.":"添加到主屏幕。","Add To Home Screen":"添加到主屏幕","Add To Favorites.":"添加到收藏夹。","Add To Favorites":"添加到收藏夹","Rate.":"评分。","Rate":"评分","Is Share Supported.":"是否支持共享。","Is Share Supported":"是否支持共享","On Share Completed.":"在共享完成时。","On Share Completed":"在共享完成时","Is Invite Friends Supported.":"是否支持邀请朋友。","Is Invite Friends Supported":"是否支持邀请朋友","On Invite Friends Completed.":"在邀请朋友完成时。","On Invite Friends Completed":"在邀请朋友完成时","Is Join Community Supported.":"是否支持加入社区。","Is Join Community Supported":"是否支持加入社区","On Join Community Completed.":"在加入社区完成时。","On Join Community Completed":"在加入社区完成时","Is Create Post Supported.":"是否支持创建帖子。","Is Create Post Supported":"是否支持创建帖子","On Create Post Completed.":"在创建帖子完成时。","On Create Post Completed":"在创建帖子完成时","Is Add To Home Screen Supported.":"是否支持添加到主屏幕。","Is Add To Home Screen Supported":"是否支持添加到主屏幕","On Add To Home Screen Completed.":"在添加到主屏幕完成时。","On Add To Home Screen Completed":"在添加到主屏幕完成时","Is Add To Favorites Supported.":"是否支持添加到收藏夹。","Is Add To Favorites Supported":"是否支持添加到收藏夹","On Add To Favorites Completed.":"在添加到收藏夹完成时。","On Add To Favorites Completed":"在添加到收藏夹完成时","Is Rate Supported.":"是否支持评分。","Is Rate Supported":"是否支持评分","On Rate Completed.":"在评分完成时。","On Rate Completed":"在评分完成时","Is External Links Allowed.":"是否允许外部链接。","Is External Links Allowed":"是否允许外部链接","Leaderboards Set Score.":"排行榜设定分数。","Leaderboards Set Score":"排行榜设定分数","Leaderboards Set Score - Id: _PARAM1_, Score: _PARAM2_":"排行榜设定分数 - ID: _PARAM1_,分数: _PARAM2_","Leaderboards Get Entries.":"排行榜获取条目。","Leaderboards Get Entries":"排行榜获取条目","Leaderboards Get Entries - Id: _PARAM1_":"排行榜获取条目 - ID: _PARAM1_","Leaderboards Show Native Popup.":"排行榜显示本地弹出窗口。","Leaderboards Show Native Popup":"排行榜显示本地弹出窗口","Leaderboards Show Native Popup - Id: _PARAM1_":"排行榜显示本地弹出窗口 - Id: _PARAM1_","Leaderboards Type.":"排行榜类型。","Leaderboards Type":"排行榜类型","Is Leaderboard Supported":"排行榜支持情况","The leaderboard is of type Not Available.":"该排行榜类型不可用。","The leaderboard is of type Not Available":"该排行榜类型不可用","The leaderboard is of type In Game.":"该排行榜类型为游戏内。","The leaderboard is of type In Game":"该排行榜类型为游戏内","The leaderboard is of type Native.":"该排行榜类型为本机。","The leaderboard is of type Native":"该排行榜类型为本机","The leaderboard is of type Native Popup.":"排行榜的类型为本地弹出窗口。","The leaderboard is of type Native Popup":"排行榜的类型为本地弹出窗口","On Leaderboards Set Score Completed.":"排行榜设定分数完成。","On Leaderboards Set Score Completed":"排行榜设定分数完成","On Leaderboards Get Entries Completed.":"排行榜获取条目完成。","On Leaderboards Get Entries Completed":"排行榜获取条目完成","On Leaderboards Show Native Popup Completed.":"排行榜显示本地弹出窗口已完成。","On Leaderboards Show Native Popup Completed":"排行榜显示本地弹出窗口已完成","Leaderboard Entries Count.":"排行榜记录数。","Leaderboard Entries Count":"排行榜记录数","Leaderboard Entry Id.":"排行榜条目 ID。","Leaderboard Entry Id":"排行榜条目 ID","Entry Index":"项目索引","Leaderboard Entry Name.":"排行榜条目名称。","Leaderboard Entry Name":"排行榜条目名称","Leaderboard Entry Photo.":"排行榜条目照片。","Leaderboard Entry Photo":"排行榜条目照片","Leaderboard Entry Rank.":"排行榜条目排名。","Leaderboard Entry Rank":"排行榜条目排名","Leaderboard Entry Score.":"排行榜条目分数。","Leaderboard Entry Score":"排行榜条目分数","Payments Purchase.":"支付购买。","Payments Purchase":"支付购买","Payments Purchase - Id: _PARAM1_":"支付购买 - ID: _PARAM1_","Payments Get Purchases.":"获取购买信息。","Payments Get Purchases":"获取购买信息","Payments Get Catalog.":"获取目录信息。","Payments Get Catalog":"获取目录信息","Payments Consume Purchase.":"付款消耗购买。","Payments Consume Purchase":"付款消耗购买","Payments Consume Purchase - Id: _PARAM1_":"支付消费购买 - ID: _PARAM1_","Is Payments Supported.":"是否支持付款。","Is Payments Supported":"是否支持付款","On Payments Purchase Completed.":"关于付款购买已完成。","On Payments Purchase Completed":"关于付款购买已完成","On Payments Get Purchases Completed.":"关于获取购买的付款已完成。","On Payments Get Purchases Completed":"关于获取购买的付款已完成","On Payments Get Catalog Completed.":"关于获取目录已完成付款。","On Payments Get Catalog Completed":"关于获取目录已完成付款","On Payments Consume Purchase Completed.":"关于消耗购买已完成付款。","On Payments Consume Purchase Completed":"关于消耗购买已完成付款","Payments Last Purchase Properties Count.":"付款最后购买属性计数。","Payments Last Purchase Properties Count":"付款最后购买属性计数","Payments Last Purchase Property Name.":"付款最后购买属性名称。","Payments Last Purchase Property Name":"付款最后购买属性名称","Payments Last Purchase Property Value.":"付款最后购买属性值。","Payments Last Purchase Property Value":"付款最后购买属性值","Payments Purchases Count.":"付款购买计数。","Payments Purchases Count":"付款购买计数","Payments Purchase Properties Count.":"付款购买属性计数。","Payments Purchase Properties Count":"付款购买属性计数","Payments Purchase Property Name.":"付款购买属性名称。","Payments Purchase Property Name":"付款购买属性名称","Purchase Index":"购买索引","Payments Catalog Items Count.":"付款目录项目计数。","Payments Catalog Items Count":"付款目录项目计数","Payments Catalog Item Properties Count.":"付款目录项目属性计数。","Payments Catalog Item Properties Count":"付款目录项目属性计数","Payments Catalog Item Property Name.":"付款目录项目属性名称。","Payments Catalog Item Property Name":"付款目录项目属性名称","Payments Catalog Item Property Value.":"Payments Catalog Item Property Value.","Payments Catalog Item Property Value":"Payments Catalog Item Property Value","Product Index":"产品索引","Payments First Catalog Item Property Value.":"Payments First Catalog Item Property Value.","Payments First Catalog Item Property Value":"Payments First Catalog Item Property Value","Filter Property":"Filter Property","Filter Property Value":"Filter Property Value","Is Achievements Supported.":"成就是否受支持。","Is Achievements Supported":"成就是否受支持","Is Achievements Get List Supported.":"成就获取列表是否受支持。","Is Achievements Get List Supported":"成就获取列表是否受支持","Is Achievements Native Popup Supported.":"成就本机弹出支持。","Is Achievements Native Popup Supported":"成就本机弹出支持","On Achievements Unlock Completed.":"成就已解锁完成。","On Achievements Unlock Completed":"成就已解锁完成","On Achievements Get List Completed.":"成就列表获取已完成。","On Achievements Get List Completed":"成就列表获取已完成","On Achievements Show Native Popup Completed.":"成就本机弹出已完成。","On Achievements Show Native Popup Completed":"成就本机弹出已完成","Achievements Count.":"成就数量。","Achievements Count":"成就数量","Achievement Properties Count.":"成就属性数量。","Achievement Properties Count":"成就属性数量","Achievement Property Name.":"成就属性名称。","Achievement Property Name":"成就属性名称","Achievement Property Value.":"成就属性值。","Achievement Property Value":"成就属性值","Achievement Index":"成就索引","Achievements Unlock.":"解锁成就。","Achievements Unlock":"解锁成就","Achievements Get List.":"获取成就列表。","Achievements Get List":"获取成就列表","Achievements Show Native Popup.":"显示本机成就弹出。","Achievements Show Native Popup":"显示本机成就弹出","Is Remote Config Supported.":"远程配置是否受支持。","Is Remote Config Supported":"远程配置是否受支持","On Remote Config Got Completed.":"远程配置获取已完成。","On Remote Config Got Completed":"远程配置获取已完成","Has Remote Config Value.":"是否有远程配置值。","Has Remote Config Value":"是否有远程配置值","Has _PARAM1_ in Remote Config":"远程配置中有_PARAM1_。","Remote Config Value.":"远程配置值。","Remote Config Value":"远程配置值","Send Remote Config Get Request.":"发送远程配置获取请求。","Send Remote Config Get Request":"发送远程配置获取请求","Is Ad Block Detected.":"检测到广告拦截器。","Is Ad Block Detected":"检测到广告拦截器","Poki Games SDK":"Poki游戏SDK","Allow games to be hosted on Poki website and display ads.":"允许游戏托管在Poki网站上并显示广告。","Load Poki SDK.":"加载 Poki SDK。","Load Poki SDK":"加载 Poki SDK","Check if the Poki SDK is ready to be used.":"检查 Poki SDK 是否准备好使用。","Poki SDK is ready":"Poki SDK 准备就绪","Inform Poki game finished loading.":"通知 Poki 游戏加载完成。","Game loading finished":"游戏加载完成","Inform Poki game finished loading":"通知 Poki 游戏加载完成","Inform Poki gameplay started.":"通知 Poki 游戏玩法已开始。","Inform Poki gameplay started":"通知 Poki 游戏玩法已开始","Inform Poki gameplay stopped.":"通知 Poki 游戏玩法已结束。","Inform Poki gameplay stopped":"通知 Poki 游戏玩法已结束","Request commercial break.":"请求商业中断。","Commercial break":"商业中断","Request commercial break":"请求商业中断","Request rewarded break.":"请求奖励中断。","Rewarded break":"奖励中断","Request rewarded break":"请求奖励中断","Create a shareable URL from parameters stored in a variable structure.":"从存储在变量结构中的参数创建可共享的 URL。","Create shareable URL":"创建可共享的 URL","Create shareable URL from parameters _PARAM0_":"从参数 _PARAM0_ 创建可共享的 URL","Variable structure with URL parameters (example children: id, type)":"带有 URL 参数的变量结构(示例子项:id,类型)","Get the last shareable URL generated by Create shareable URL.":"获取由创建可共享的 URL 生成的最后一个可共享的 URL。","Last shareable URL":"最后可分享的 URL","Read a URL parameter from Poki URL or the current URL.":"从 Poki URL 或当前 URL 读取 URL 参数。","Get URL parameter":"获取 URL 参数","Parameter name (without the gd prefix)":"参数名称(不带 gd 前缀)","Open an external URL via Poki SDK.":"通过 Poki SDK 打开外部 URL。","Open external link":"打开外部链接","Open external link _PARAM0_":"打开外部链接 _PARAM0_","URL to open":"要打开的 URL","Move the Poki Pill on mobile.":"在移动设备上移动 Poki Pill。","Move Poki Pill":"移动 Poki Pill","Move Poki Pill to _PARAM0_ percent from top with _PARAM1_ px offset":"将 Poki Pill 移动到距离顶部 _PARAM0_% 的位置,偏移量为 _PARAM1_ 像素","Top percent (0-50)":"顶部百分比(0-50)","Additional pixel offset":"额外的像素偏移量","Measure an event for analytics.":"测量事件以进行分析。","Measure event":"测量事件","Measure category _PARAM0_ what _PARAM1_ action _PARAM2_":"测量类别 _PARAM0_ 的 _PARAM1_ 行动 _PARAM2_","Category (for example: level, tutorial, drawing)":"类别(例如:关卡,教程,绘图)","What is measured (for example: 1, de_dust, skip-level)":"被测量的内容(例如:1,de_dust,跳关)","Action (for example: start, complete, fail)":"行为(例如:开始,完成,失败)","Checks if a commercial break is playing.":"检查是否正在播放商业中断。","Commercial break is playing":"正在播放商业中断","Checks if a rewarded break is playing.":"检查是否正在播放奖励中断。","Rewarded break is playing":"正在播放奖励中断","Checks if a commercial break just finished playing.":"检查是否刚刚结束播放商业中断。","Commercial break just finished playing":"刚刚结束播放商业中断","Checks if a rewarded break just finished playing.":"检查是否刚刚结束播放奖励中断。","Rewarded break just finished playing":"刚刚结束播放奖励中断","Checks if player should be rewarded after a rewarded break finished playing.":"检查在奖励中断播放结束后是否应奖励玩家。","Should reward player":"应奖励玩家","Pop-up":"弹出","Display pop-ups to alert, ask confirmation, and let user type a response in text box.":"显示弹出窗口以警告、确认询问,并允许用户在文本框中键入响应。","The response to a pop-up message is filled.":"填写弹出消息的响应。","Existing prompt response":"现有提示响应","Response from the pop-up prompt is filled":"填写弹出提示的响应","Return the text response by user to prompt.":"返回用户对提示的文本响应。","Response to prompt":"提示的响应","Open prompt with message : _PARAM1_ with ID: _PARAM2_":"打开具有消息:_PARAM1_和ID:_PARAM2_的提示。","Displays a prompt in a pop-up that prompts the user for input. This action return the text input or the false boolean if canceled.":"在弹出式窗口中显示提示以提示用户输入。该操作返回文本输入,如果取消,则返回false布尔值。","Prompt":"提示","Open a prompt pop-up box with message: _PARAM1_ (placeholder: _PARAM2_)":"使用消息:_PARAM1_(占位符:_PARAM2_)打开提示弹出框","Prompt message":"提示消息","Input placeholder":"输入占位符","Ask confirmation of user with a message in a dialog box with an OK button, and a Cancel button.":"询问用户是否选择对话框中的消息,该对话框包含一个确定按钮和一个取消按钮。","Confirm":"确认","Open a confirmation pop-up box with message: _PARAM1_":"打开一个确认弹出框,显示消息:_PARAM1_","Confirmation message":"确认消息","The text to display in the confirm box.":"在确认框中显示的文本。","Check if a confirmation was accepted.":"检查是否接受了确认。","Pop-up message confirmed":"弹出消息已确认","Pop-up message is confirmed":"弹出消息已确认","Displays an alert box with a message and an OK button in a pop-up window.":"在弹出窗口中显示带有消息和确定按钮的警报框。","Alert":"警报","Open an alert pop-up box with message: _PARAM1_":"打开带有消息:_PARAM1_的警报弹出框。","Alert message":"警报消息","RTS-like unit selection":"类似RTS的单位选择","Allow player to select units by clicking on them or dragging a selection box.":"允许玩家通过点击或拖动选择框来选择单位。","Allow player to select units by clicking on them or dragging a selection box":"允许玩家通过点击或拖动选择框来选择单位。","Allow player to select _PARAM1_ with _PARAM7_ mouse button (or touch). Draw a selection box using _PARAM2_ on Layer: _PARAM3_ with Z order: _PARAM4_. Hold _PARAM5_ to add units and _PARAM6_ to remove units":"允许玩家使用_PARAM7_鼠标按钮(或触摸)选择_PARAM1_。在_ZPARAM3_图层使用_PARAM2_绘制选择框,Z顺序为_PARAM4_。按住_PARAM5_添加单位,并按住_PARAM6_移除单位","Units":"单位","Object (or object group) that can be Selected":"可以选择的对象(或对象组)","Selection box":"选择框","Edit shape painter properties to change the appearance of this selection box":"编辑形状绘制器属性以更改此选择框的外观","Layer (of selection box)":"(选择框)图层","Must be the same layer as the units being selected":"必须与被选择的单位在相同的图层上","Z order (of selection box)":"(选择框)Z顺序","Z order of the selection box":"选择框的Z顺序","Additive select key":"添加选择键","Hold this key to add units to selection":"按住此键可以将单位添加到选择项","Subtractive select key":"减法选择键","Hold this key to remove units from selection":"按住此键可以从选择项中移除单位","Mouse button used to select units":"用于选择单位的鼠标按钮","Check if the unit is \"Preselected\".":"检查单位是否为“预选”。","Is unit \"Preselected\"":"单位是否为“预选”","_PARAM1_ is \"Preselected\"":"_PARAM1_是“预选”","Check if the unit is \"Selected\".":"检查单位是否为“已选择”。","Is unit \"Selected\"":"单位是否为“已选择”","_PARAM1_ is \"Selected\"":"_PARAM1_是“已选择”","Set unit as \"Preselected\".":"将单位设为“预选”。","Set unit as \"Preselected\"":"将单位设为“预选”","Set _PARAM1_ as \"Preselected\": _PARAM2_":"将_PARAM1_设为“预选”:_PARAM2_","Set unit as \"Selected\".":"将单位设为“已选择”。","Set unit as \"Selected\"":"将单位设为“已选择”","Set _PARAM1_ as \"Selected\": _PARAM2_":"将_PARAM1_设为“已选择”:_PARAM2_","Assign a unique ID to each \"Selected\" unit. This should be ran every time there is a change in the number of \"Selected\" units.":"为每个“已选择”单位分配一个唯一ID。每当“已选择”单位数量发生变化时,都应运行此操作。","Assign a unique ID to each \"Selected\" unit":"为每个“已选择”单位分配一个唯一ID","Assign a unique ID to _PARAM1_ that are \"Selected\"":"为_PARAM1_中的“已选择”单位分配一个唯一ID","Provides the total number of _PARAM1_ that are currently \"Selected\".":"提供当前“已选择”_PARAM1_的总数。","Total number of \"Selected\" units":"“已选择”单位的总数","Unit":"单位","Enable control groups using default controls.":"使用默认控件启用控制组。","Enable control groups using default controls":"使用默认控件启用控制组","Assign _PARAM1_ to control groups using default controls (Ctrl + number)":"使用默认控件将_PARAM1_分配给控制组(Ctrl+数字)","Object (or object group) that will be assigned to a control group":"将分配到控制组的对象(或对象组)","Control group this unit is assigned to.":"分配到控制组的该单位。","Control group this unit is assigned to":"分配到控制组的该单位","Check if a unit is assigned to a control group.":"检查单位是否分配到控制组。","Check if a unit is assigned to a control group":"检查单位是否分配到控制组","_PARAM1_ is assigned to control group _PARAM2_":"_PARAM1_已分配到控制组_PARAM2_","Control group ID":"控制组ID","Assign unit to a control group.":"将单位分配到控制组。","Assign unit to a control group":"将单位分配到控制组","Assign _PARAM1_ to control group _PARAM2_":"将_PARAM1_分配到控制组_PARAM2_","Unit ID of a selected unit.":"所选单位的单位ID。","Unit ID of a selected unit":"所选单位的单位ID","Read pixels":"读取像素","Read the values of pixels on the screen.":"读取屏幕上的像素值。","Return the alpha component of the pixel at the specified position.":"返回指定位置的像素的alpha分量。","Read pixel alpha":"读取像素alpha","Record":"录制","Actions to record the game and players download the clips. Works on desktop, and in the browser.":"录制游戏的操作,玩家下载剪辑。适用于桌面和浏览器。","Start the recording.":"开始录制。","Start recording":"开始录制","End the recording.":"结束录制。","Stop recording":"停止录制","Stop the recording":"停止录制","Pause recording.":"暂停录制。","Pause recording":"暂停录制","Resume recording.":"恢复录制。","Resume recording":"恢复录制","Save recording to the file system on destop, or to the downloads folder for web. Always ask for permission to save a file.":"将录制保存到桌面文件系统,或保存到Web的下载文件夹。始终请求权限保存文件。","Save recording":"保存录制","Save recording to _PARAM1_ as _PARAM2_":"将录制保存到_PARAM1_为_PARAM2_","File location, set using a FileSystem path e.g. FileSystem::DesktopPath() (only used for desktop saves)":"文件位置,使用文件系统路径设置,例如FileSystem::DesktopPath()(仅用于桌面保存)","Name to save file as":"要保存的文件名","Returns the current status of the reccorder: inactive (not recording), recording, or paused.":"返回录制器的当前状态:非活动(未录制),录制或暂停。","Get current state":"获取当前状态","Get the current framerate.":"获取当前帧速率。","Get frame rate":"获取帧速率","Set frame rate to _PARAM1_":"将帧速率设为_PARAM1_","Set the frame rate, must be set before starting a recording. Defaults to the min FPS set in the game properties.":"设置帧率,必须在开始录制之前设置。默认设置为游戏属性中设置的最小FPS。","Set frame rate":"设置帧率","Recommended fps for video: 25, 30, 60, for GIFs use 5, 10, 20":"推荐的视频帧率:25,30,60,对于 GIF 使用 5、10、20","Returns the current video bit rate per second.":"每秒的当前视频比特率。","Get video bit rate per second":"获取每秒的视频比特率","Set the video bit rate, must be set before starting a recording. Defaults to 2500000.":"设置视频比特率,必须在开始录制前设置。默认为 2500000。","Set video bit rate":"设置视频比特率","Set the video bit rate to _PARAM1_":"将视频比特率设为_PARAM1_","video bits per second":"每秒的视频比特率","Returns the audio bit rate per second. Defaults to 128000 if not set.":"每秒的音频比特率。如果未设置,则默认为 128000。","Set audio bit rate":"设置音频比特率","Set the audio bit rate to _PARAM1_":"将音频比特率设为_PARAM1_","audio bits per second":"每秒的音频比特率","Returns the audio bit rate per second.":"每秒的音频比特率。","Get audio bit rate per second":"获取每秒的音频比特率","Set the file format, if a selected file format is unsupported on the users platform a supported one will be picked by deafult.":"设置文件格式,如果所选的文件格式在用户的平台上不受支持,则会选择支持的文件格式作为默认值。","Set file format":"设置文件格式","Set file format to _PARAM1_":"将文件格式设为_PARAM1_","Recording format":"录制格式","Returns the current video format.":"每秒的当前视频格式。","Get codec":"获取编解码器","Set the video codec, if a selected codec is unsupported on the users platform a supported one will be picked by deafult.":"设置视频编解码器,如果用户平台上不支持所选的编解码器,则会选择支持的编解码器作为默认值。","Set codec":"设置编解码器","Set video codec _PARAM1_":"将视频编解码器设为_PARAM1_","codec":"编解码器","Returns the current video codec.":"每秒的当前视频编解码器。","Get video codec":"获取视频编解码器","When an error occurs this method will return what type of error it is.":"发生错误时,此方法将返回错误类型。","Error type":"错误类型","Check if an error has occurred.":"检查是否发生错误。","When an errror has occurred":"当发生错误","When an error has occurred":"当发生错误","Check if a recording has just been paused.":"检查是否录制刚暂停。","When recording has paused":"录制暂停时","Check if a recording has just been resumed.":"检查是否录制刚恢复。","When recording has resumed":"录制恢复时","Check if recording has just started.":"检查是否刚开始录制。","When recording has started":"开始录制时","Check if recording has just stopped.":"检查录音是否刚刚停止。","When recording has stopped":"录音停止后","Check if recording has just been saved.":"检查录音是否刚刚保存。","When recording has saved":"录音保存后","When recording has been saved":"录音已保存","Check if the specified format is available on the users device. To avoid unsupported formats pick commons ones like MP4 or WebM.":"检查用户设备上是否有指定的格式。为避免不支持的格式,请选择常见的格式,如MP4或WebM。","Is format supported on user device":"格式在用户设备上是否支持","Check if _PARAM1_ is available on the users device":"检查_PARAM1_在用户设备上是否可用","Select a common format for the best results":"为获得最佳结果选择常见格式","Get the current GIF quality.":"获取当前GIF质量。","Set the GIF quality, must be set before starting a recording. Defaults to 10.":"设置GIF质量,必须在开始录制之前设置。默认为10。","Set GIF quality":"设置GIF质量","Set the GIF quality to _PARAM1_":"将GIF质量设置为_PARAM1_","Quality":"质量","Returns whether or not dithering is enabled for GIFs.":"返回GIF是否已启用抖动。","Enable dithering in GIF, must be set before starting a recording. Defaults to false.":"启用GIF抖动,必须在开始录制之前设置。默认为假。","Set GIF Dithering":"设置GIF抖动","Enable dithering _PARAM1_":"启用_PARAM1_抖动","Dithering":"抖动","Rectangular movement":"矩形移动","Move objects in a rectangular pattern.":"以矩形模式移动对象。","Distance from an object to the closest edge of a second object.":"对象到第二个对象最近边缘的距离。","Distance from an object to the closest edge of a second object":"对象到第二个对象最近边缘的距离","Distance from _PARAM1_ to the closest edge of _PARAM2_":"从_PARAM1_到_PARAM2_最近边缘的距离","Moving object":"移动对象","Update rectangular movement to follow the border of an object. Run once, or every time the center object moves.":"更新矩形运动以跟随对象的边界。 仅运行一次,或每次中心对象移动时。","Update rectangular movement to follow the border of an object":"更新矩形运动以跟随对象的边界","Update rectangular movement of _PARAM1_ to follow the border of _PARAM3_. Position on border: _PARAM4_":"更新_PARAM1_的矩形运动,以跟随_PARAM3_的边界。 边界位置:_PARAM4_","Rectangle Movement (required)":"矩形运动(必需)","Position on border":"边界位置","Move to the nearest corner of the center object.":"移动到中心对象的最近角落。","Move to the nearest corner of the center object":"移动到中心对象的最近角落","Move _PARAM1_ to the nearest corner of _PARAM3_":"移动_PARAM1_到_PARAM3_的最近角落","Dimension":"尺寸","Clockwise":"顺时针","Horizontal edge duration":"水平边缘持续时间","Vertical edge duration":"垂直边缘持续时间","Initial position":"初始位置","Teleport the object to a corner of the movement rectangle.":"将对象传送到运动矩形的一个角。","Teleport at a corner":"传送到一个角","Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop":"将_PARAM0_的位置设置为矩形循环的_PARAM2_","Corner":"角","Return the perimeter of the movement rectangle.":"返回运动矩形的周长。","Perimeter":"周长","Return the time the object takes to go through the whole rectangle (in seconds).":"返回对象通过整个矩形所需的时间(以秒为单位)。","Return the time the object takes to go through a horizontal edge (in seconds).":"返回对象通过水平边缘所需的时间(以秒为单位)。","Return the time the object takes to go through a vertical edge (in seconds).":"返回对象通过垂直边缘所需的时间(以秒为单位)。","Return the rectangle width.":"返回矩形的宽度。","Return the rectangle height.":"返回矩形的高度。","Return the left bound of the movement.":"返回运动的左边界。","Return the top bound of the movement.":"返回运动的顶部边界。","Return the right bound of the movement.":"返回运动的右边界。","Return the bottom bound of the movement.":"返回运动的底部边界。","Change the left bound of the rectangular movement.":"更改矩形运动的左边界。","Change the movement left bound of _PARAM0_ to _PARAM2_":"将_PARAM0_的运动左边界更改为_PARAM2_","Change the top bound of the rectangular movement.":"更改矩形运动的顶部边界。","Change the movement top bound of _PARAM0_ to _PARAM2_":"将_PARAM0_的运动顶部边界更改为_PARAM2_","Change the right bound of the rectangular movement.":"更改矩形运动的右边界。","Change the movement right bound of _PARAM0_ to _PARAM2_":"将_PARAM0_的运动右边界更改为_PARAM2_","Change the bottom bound of the rectangular movement.":"更改矩形运动的底部边界。","Change the movement bottom bound of _PARAM0_ to _PARAM2_":"将_PARAM0_的运动底部边界更改为_PARAM2_","Change the time the object takes to go through a horizontal edge (in seconds).":"更改对象通过水平边缘所需的时间(以秒为单位)。","Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_":"将_PARAM0_通过水平边缘行进所需的时间更改为_PARAM2_","Change the time the object takes to go through a vertical edge (in seconds).":"更改对象通过垂直边缘所需的时间(以秒为单位)。","Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_":"将_PARAM0_通过垂直边缘行进所需的时间更改为_PARAM2_","Change the direction to clockwise or counter-clockwise.":"将方向更改为顺时针或逆时针。","Use clockwise direction for _PARAM0_: _PARAM2_":"对_PARAM0_使用顺时针方向:_PARAM2_","Change the easing function of the movement.":"更改移动的缓动函数。","Change the easing of _PARAM0_ to _PARAM2_":"将_PARAM0_的缓动改为_PARAM2_","Toggle the direction to clockwise or counter-clockwise.":"切换方向为顺时针或逆时针。","Toggle direction":"切换方向","Toogle the direction of _PARAM0_":"切换_PARAM0_的方向","Check if the object is moving clockwise.":"检查对象是否顺时针移动。","Is moving clockwise":"正在顺时针移动","_PARAM0_ is moving clockwise":"_PARAM0_顺时针移动","Check if the object is moving to the left.":"检查对象是否向左移动。","Is moving left":"正在向左移动","_PARAM0_ is moving to the left":"_PARAM0_向左移动","Check if the object is moving up.":"检查对象是否向上移动。","Is moving up":"正在向上移动","_PARAM0_ is moving up":"_PARAM0_向上移动","Object is moving to the right.":"对象正在向右移动。","Is moving right":"正在向右移动","_PARAM0_ is moving to the right":"_PARAM0_向右移动","Check if the object is moving down.":"检查对象是否向下移动。","Is moving down":"正在向下移动","_PARAM0_ is moving down":"_PARAM0_向下移动","Object is on the left side of the rectangle.":"对象在矩形的左侧。","Is on left":"在左侧","_PARAM0_ is on the left side":"_PARAM0_在左侧","Object is on the top side of the rectangle.":"对象在矩形的顶部。","Is on top":"在顶部","_PARAM0_ is on the top side":"_PARAM0_在顶部","Object is on the right side of the rectangle.":"对象在矩形的右侧。","Is on right":"在右侧","_PARAM0_ is on the right side":"_PARAM0_在右侧","Object is on the bottom side of the rectangle.":"对象在矩形的底部。","Is on bottom":"在底部","_PARAM0_ is on the bottom side":"_PARAM0_在底部","Return the duration between the top-left vertex and the top-right one.":"返回顶部左边点到顶部右边点之间的持续时间。","Duration to top right":"到顶部右边的持续时间","Return the duration between the top-left vertex and the bottom-right one.":"返回顶部左边点到底部右边点之间的持续时间。","Duration to bottom right":"到底部右边的持续时间","Return the duration between the top-left vertex and the bottom-left one.":"返回左上顶点和左下顶点之间的持续时间。","Duration to bottom left":"到左下的持续时间","Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).":"返回自最后一个顶点到边长之间的覆盖距离与比率(取值范围在0到1之间)。","Progress on edge":"边上的进度","Return the X position of the current edge origin.":"返回当前边的起点的X坐标。","Edge origin X":"边起点的X","Return the Y position of the current edge origin.":"返回当前边的起点的Y坐标。","Edge origin Y":"边起点的Y","Return the X position of the current edge target.":"返回当前边的目标的X坐标。","Edge target X":"边目标的X","Return the Y position of the current edge target.":"返回当前边的目标的Y坐标。","Edge target Y":"边目标的Y","Return the time from the top-left vertex.":"返回自左上顶点的时间。","Current time":"当前时间","Return the covered length from the top-left vertex or the bottom-right one.":"返回自左上顶点或右下顶点的覆盖长度。","Half Current length":"当前长度的一半","Return the displacement on the X axis from the top-left vertex.":"从左上顶点返回X轴的位移。","Return the displacement on the Y axis from the top-left vertex.":"从左上顶点返回Y轴的位移。","Rectangular flood fill":"矩形泛滥填充","Create objects as a grid to cover a rectangular area or an other object.":"创建网格对象以覆盖矩形区域或其他对象。","Create fill objects that cover the rectangular area of target objects.":"创建填充对象以覆盖目标对象的矩形区域。","Create objects to flood fill other objects":"创建对象来填充其他对象","Create _PARAM2_ to cover _PARAM1_ with _PARAM3_ pixels between columns and _PARAM4_ pixels between rows on layer: _PARAM5_ at Z-order: _PARAM6_":"创建_PARAM2_以覆盖_PARAM1_,列之间间隔_PARAM3_像素,行之间间隔_PARAM4_像素,在_Z-order_层:_PARAM5_上的_Z-order_值:_PARAM6_","Rectangular area that will be covered by fill objects":"将填充对象覆盖的矩形区域","Fill object":"填充对象","Object that is created to cover the rectangular area of target objects":"创建的用于覆盖目标对象的矩形区域的对象","Space between columns (pixels)":"列之间的间隔(像素)","Space between rows (pixels)":"行之间的间隔(像素)","Z order":"Z顺序","Create multiple copies of an object.":"创建对象的多个副本。","Create objects to flood fill a rectanglular area":"创建对象以填充矩形区域","Create _PARAM2_ columns and _PARAM3_ rows of _PARAM1_ with top-left corner at _PARAM4_ ; _PARAM5_ and _PARAM6_ pixels between columns and _PARAM7_ pixels between rows on layer: _PARAM8_ at Z-order: _PARAM9_":"在_Z-order_层_PARAM8_上,以_Z-order_位置_PARAM9_,创建_PARAM2_列和_PARAM3_行的_PARAM1_,左上角位置在_PARAM4_;_PARAM5_和_PARAM6_列之间的像素和_PARAM7_行之间的像素","Number of columns (default: 1)":"列数(默认:1)","Number of rows (default: 1)":"行数(默认:1)","Top-left starting position (X) (default: 0)":"左上角起始位置(X)(默认:0)","Top-left starting position (Y) (default: 0)":"左上角起始位置(Y)(默认:0)","Amount of space between columns (default: 0)":"列之间的空间量(默认:0)","Amount of space between rows (default: 0)":"行之间的空间量(默认:0)","Regular Expressions":"正则表达式","Functions for using regular expressions to manipulate strings.":"用于操作字符串的正则表达式功能。","Checks if a string matches a regex pattern.":"检查字符串是否匹配正则表达式模式。","String matches regex pattern":"字符串与正则表达式模式匹配","_PARAM3_ matches pattern _PARAM1_ (flags: _PARAM2_)":"_PARAM3_匹配模式_PARAM1_(标志:_PARAM2_)","The pattern to check for":"要检查的模式","RegEx flags":"正则表达式标志","The string to check for a pattern":"要检查模式的字符串","Split a string by each part of it that matches a regex pattern and stores each part into an array.":"通过字符串中匹配正则表达式模式的每个部分拆分字符串,并将每个部分存储到数组中。","Split a string into an array":"将字符串拆分成一个数组","Split string _PARAM3_ into array _PARAM4_ by pattern _PARAM1_ (flags: _PARAM2_)":"按模式_PARAM1_(标志:_PARAM2_)将字符串_PARAM3_拆分为数组_PARAM4_","The pattern to split by":"拆分的模式","The string to split by the pattern":"按模式拆分的字符串","The name of the variable to store the result in":"存储结果的变量的名称","Builds an array containing all matches for a regex pattern.":"构建包含正则表达式模式的所有匹配项的数组。","Find all matches for a regex pattern":"查找正则表达式模式的所有匹配项","Store all matches of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"使用模式_PARAM1_中_PARAM3_的所有匹配项存储在_PARAM4_中(标志:_PARAM2_)","Pattern":"模式","String":"字符串","Builds an array containing the first match for a regex pattern followed by the regex groups.":"构建包含正则表达式模式的第一个匹配项及其正则表达式组的数组。","Find first match with groups for a regex pattern":"查找正则表达式模式的第一个匹配项及其组","Store first match and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"使用模式_PARAM1_中_PARAM3_的第一个匹配项及其组存储在_PARAM4_中(标志:_PARAM2_)","Flags":"标志","Variable name":"变量名","Builds an array containing for each regex pattern match an array with the match followed by its regex groups.":"构建包含每个正则表达式模式匹配项及其正则表达式组的数组。","Find all matches with their groups for a regex pattern":"查找正则表达式模式的所有匹配项及其组","Store all matches and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"使用模式_PARAM1_中_PARAM3_的所有匹配项及其组存储在_PARAM4_中(标志:_PARAM2_)","Replaces a part of a string that matches a regex pattern with another string.":"用另一个字符串替换与正则表达式模式匹配的字符串的一部分。","Replace pattern matches with a string":"用字符串替换模式匹配","Execute _PARAM1_ with the following _PARAM2_ for a match in _PARAM3_, and store the result in _PARAM4_":"使用_PARAM2_执行_PARAM1_以在_PARAM3_中进行匹配,并将结果存储在_PARAM4_中","The string to search for pattern matches in":"搜索模式在其匹配中的字符串","The string to replace the matching patterns with":"用字符串替换匹配的模式","Finds a regex pattern in a string, and returns the index of the position of the match, or -1 if it doesn't match the pattern.":"在字符串中查找正则表达式模式,并返回匹配位置的索引,如果不匹配模式,则返回-1。","Find a pattern":"找到模式","Sprite Snapshot":"精灵快照","Renders an object, layer, scene or an area of a scene and puts the resulting image into a sprite.":"渲染对象、图层、场景或场景区域,并将生成的图像放入精灵。","Renders an object and puts the rendered image into a sprite object.":"渲染对象并将渲染的图像放入精灵对象中。","Render an object into a sprite":"将对象渲染为精灵","Render _PARAM1_ into sprite _PARAM2_":"将_PARAM1_渲染为精灵_PARAM2_","The object to render":"要渲染的对象","The sprite to render to":"要渲染的精灵","Renders a layer and puts the rendered image into a sprite object.":"渲染层并将渲染的图像放入精灵对象中。","Render a layer into a sprite":"将图层渲染为精灵","Render layer _PARAM1_ into sprite _PARAM2_":"将图层_PARAM1_渲染为精灵_PARAM2_","The layer to render":"渲染的层","Renders a scene and puts the rendered image into a sprite object.":"渲染一个场景并将渲染的图像放入精灵对象中。","Render a scene into a sprite":"将场景渲染到精灵中","Render the current scene into sprite _PARAM1_":"将当前场景渲染到精灵_PARAM1_中","Renders a defined area of a scene and puts the rendered image into a sprite object.":"渲染场景的指定区域并将渲染的图像放入精灵对象中。","Render an area of a scene into a sprite":"将场景的区域渲染到精灵中","Render the area of a current scene into Sprite: _PARAM1_, from OriginX: _PARAM2_, OriginY: _PARAM3_, with Width: _PARAM4_, Height: _PARAM5_":"渲染当前场景的区域到精灵:_PARAM1_,从OriginX:_PARAM2_,OriginY:_PARAM3_,宽度:_PARAM4_,高度:_PARAM5_","Origin X position of the render area":"渲染区域的起点X位置","Origin Y Position of the render area":"渲染区域的起点Y位置","Width of the are to render":"渲染区域的宽度","Height of the area to render":"渲染区域的高度","Repeat every X seconds":"每隔X秒重复","Trigger an event every X seconds.":"每隔X秒触发一个事件。","Triggers every X seconds.":"每隔X秒触发。","Repeat with a scene timer":"重复使用场景计时器","Repeat every _PARAM2_ seconds using timer _PARAM1_":"使用定时器_PARAM1_每隔_PARAM2_秒重复","Timer name used to loop":"用于循环的定时器名称","Duration in seconds between each repetition":"每次重复之间的持续时间(秒)","the number of times the timer has repeated.":"定时器已重复的次数。","Repetition number of a scene timer":"场景定时器重复次数","Repetition number of timer _PARAM1_":"定时器_PARAM1_的重复次数","Triggers every X seconds X amount of times.":"每隔X秒触发X次。","Repeat with a scene timer X times":"重复使用场景计时器X次","Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_":"使用定时器_PARAM1_每隔_PARAM2_秒重复_PARAM3_次","The limit of loops":"循环的次数限制","Maximum nuber of repetition (-1 to repeat forever).":"重复次数的最大值(-1表示永远重复)。","Reset repetition count of a scene timer.":"重置场景定时器的重复计数。","Reset repetition count of a scene timer":"重置场景定时器的重复计数","Reset repetition count for timer _PARAM1_":"重置定时器_PARAM1_的重复计数","Allows to repeat an object timer every X seconds.":"允许每隔X秒重复对象计时器。","The name of the timer to repeat":"要重复的定时器名称","The time between each trigger (in seconds)":"每次触发之间的时间(秒)","How many times should the timer trigger? -1 for forever.":"定时器应触发的次数?-1代表永远。","An internal counter":"内部计数器","Repeat with an object timer":"用一个对象的计时器重复","Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_":"使用_PARAM0_的计时器_PARAM2_每_PARAM3_秒重复。","Repetition number of an object timer":"对象计时器的重复次数","Repetition number of timer _PARAM2_":"计时器_PARAM2_的重复次数","Repeat with an object timer X times":"使用对象计时器重复X次","Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_":"使用_PARAM0_的计时器_PARAM2_每_PARAM3_秒重复_PARAM4_次。","Reset repetition count of an object timer.":"重置对象计时器的重复次数。","Reset repetition count of an object timer":"重置对象计时器的重复次数","Reset repetition count for timer _PARAM2_ of _PARAM0_":"重置_PARAM0_的计时器_PARAM2_的重复次数","Triggers every X seconds, where X is defined in the behavior properties.":"触发每隔X秒,其中X在行为属性中定义。","Repeat every X seconds (deprecated)":"每X秒重复(已弃用)","Recurring timer _PARAM1_ of _PARAM0_ has triggered":"_PARAM0_的_PARAM1_循环计时器已触发","Pauses a recurring timer.":"暂停循环计时器。","Pause a recurring timer (deprecated)":"暂停循环计时器(已弃用)","Pause recurring timer _PARAM1_ of _PARAM0_":"暂停_PARAM0_的_PARAM1_循环计时器","Resumes a paused recurring timer.":"恢复已暂停的定时器。","Resume a recurring timer (deprecated)":"恢复已暂停的定时器(已弃用)","Resume recurring timer _PARAM1_ of _PARAM0_":"恢复重复定时器_PARAM1_的第_PARAM0_次","Allows to trigger the recurring timer X times again.":"允许再次触发重复定时器X次。","Reset the limit (deprecated)":"重置限制(已弃用)","Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again":"允许再次触发重复定时器_PARAM1_的第_PARAM0_次","Rolling counter":"滚动计数器","Smoothly change a counter value in a text object.":"在文本对象中平滑更改计数器值。","Smoothly changes a counter value in a text object.":"平滑更改文本对象的计数器值。","Animation duration":"动画持续时间","Increment":"增量","the value of the counter.":"计数器的值。","Counter value":"计数器值","the counter value":"计数器值","Directly display the counter value without playing the animation.":"直接显示计数器值,而不播放动画。","Jump to the counter animation end":"跳转到计数器动画的末尾","Jump to the counter animation end of _PARAM0_":"跳转到参数0的计数器动画的末尾","Room-based camera movement":"基于房间的摄像机移动","Move and zoom camera to the room object that contains the trigger object (usually the player).":"将摄像机移动和缩放到包含触发对象(通常是玩家)的房间对象中。","Move and zoom camera to the room object that contains the trigger object (player)":"将摄像机移动和缩放到包含触发对象(玩家)的房间对象。","Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)":"将摄像头移动到包含触发对象_PARAM2_的房间对象_PARAM1_(图层:_PARAM3_,插值速度:_PARAM4_,最大缩放:_PARAM5_,最小缩放:_PARAM6_,边界缓冲:_PARAM7_px)","Room object":"房间对象","Room objects are used to mark areas that should be seen by the camera.":"房间对象用于标记摄像头应看到的区域。","Trigger object (player)":"触发对象(玩家)","When the Trigger Object touches a new Room Object, the camera will move to the new room":"当触发对象触碰到新的房间对象时,摄像头将移动到新的房间","Lerp speed":"插值速度","Range: 0 to 1":"范围:0 到 1","Maximum zoom":"最大缩放","Minimum zoom":"最小缩放","Outside buffer (pixels)":"外部缓冲区(像素)","Minimum extra space displayed around each side the room":"在房间的每一侧周围显示最小的额外空间","Check if trigger object (usually the player) has entered a new room on this frame.":"检查触发对象(通常是玩家)是否在此帧进入新的房间。","Check if trigger object (player) has entered a new room":"检查触发对象(玩家)是否进入了新的房间","_PARAM1_ has just entered a new room":"_PARAM1_刚刚进入了新的房间","Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).":"检查摄像头是否正在缩放(需要在此扩展中使用“移动和缩放摄像头”动作)。","Check if camera is zooming":"检查摄像头是否正在缩放","Camera is zooming":"摄像头正在缩放","Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).":"检查摄像头是否正在移动(需要在此扩展中使用“移动和缩放摄像头”动作)。","Check if camera is moving":"检查摄像头是否正在移动","Camera is moving":"摄像头正在移动","Animated Score Counter":"动画记分牌","An animated score counter with an icon and a customisable font.":"带图标和可自定义字体的动画记分牌。","Shake objects with translation, rotation and scale.":"用平移、旋转和缩放抖动对象。","Shake object (position, angle, scale)":"用平移、旋转、缩放抖动对象","Shake an object, using one or more ways to shake (position, angle, scale). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"摇晃一个对象,使用一种或多种方式来摇晃(位置,角度,比例)。如果使用不同的参数,确保在开始新的摇晃之前\"停止摇晃\"。","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_":"摇晃对象_PARAM0_一段时间_PARAM2_秒。修改位置振幅_PARAM3_在X轴和_PARAM4_在Y轴,角度旋转振幅_PARAM5_,和比例振幅_PARAM6_。摇晃之间等待_PARAM7_秒。持续摇晃直到停止:_PARAM8_","Duration of shake (in seconds) (Default: 0.5)":"摇晃的持续时间(秒)(默认:0.5)","Amplitude of postion shake in X direction (in pixels) (For example: 5)":"位置在X轴上的振动幅度(以像素为单位)(例如:5)","Amplitude of position shake in Y direction (in pixels) (For example: 5)":"位置在Y轴上的振动幅度(以像素为单位)(例如:5)","Use a negative number to make the single-shake move in the opposite direction.":"使用负数使单次摇晃朝相反方向移动。","Amplitude of angle rotation shake (in degrees) (For example: 5)":"角度旋转振动振幅(以度为单位)(例如:5)","Amplitude of scale shake (in percent change) (For example: 5)":"比例振动振幅(以百分比变化)(例如:5)","Amount of time between shakes (in seconds) (Default: 0.08)":"两次摇动之间的时间(以秒为单位)(默认值:0.08)","For a single-shake effect, set it to the same value as \"Duration\".":"对于单次摇动效果,将其设置为\"持续时间\"的相同值。","Stop shaking an object.":"停止震动物体。","Stop shaking an object":"停止震动物体","Stop shaking _PARAM0_":"停止震动_PARAM0_","Check if an object is shaking.":"检查物体是否正在震动。","Check if an object is shaking":"检查物体是否正在震动","_PARAM0_ is shaking":"_PARAM0_正在震动","Default score":"默认分数","Increasing score sound":"增加分数声音","Sound":"声音","Min baseline pitch":"最小基线音调","Max baseline pitch":"最大基线音调","Pitch factor":"音调因子","Pitch reset timeout":"音调重置超时","Current pitch":"当前音调","the score of the object.":"物体的得分。","Reset the pitch to the baseline value.":"将音调重置为基线值。","Reset pitch":"重置音调","Reset the pitch of _PARAM0_":"重置_PARM0_的音调","Screen wrap":"屏幕环绕","Teleport object when it moves off the screen and immediately appear on the opposite side while maintaining speed and trajectory.":"物体移出屏幕时传送物体,并立即出现在相反方向,同时保持速度和轨迹。","Teleport the object when leaving one side of the screen so that it immediately reappears on the opposite side, maintaining speed and trajectory.":"当物体离开屏幕的一侧时,立即传送物体,以保持速度和轨迹。","Screen Wrap":"屏幕包裹","Horizontal wrapping":"水平包裹","Vertical wrapping":"垂直包裹","Top border of wrapped area (Y)":"包裹区域的顶部边界(Y)","Left border of wrapped area (X)":"包裹区域的左侧边界(X)","Right border of wrapped area (X)":"包裹区域的右侧边界(X)","If blank, the value will be the scene width.":"如果为空,则该值将是场景宽度。","Bottom border of wrapped area (Y)":"包裹区域的下边界(Y)","If blank, the value will be scene height.":"如果为空,该值将为场景高度。","Number of pixels past the center where the object teleports and appears":"物体超出中心多少像素时传送并出现","Check if the object is wrapping on the left and right borders.":"检查物体是否包裹在左右边界上。","Is horizontal wrapping":"是否水平包裹","_PARAM0_ is horizontal wrapping":"_PARAM0_是水平包裹","Check if the object is wrapping on the top and bottom borders.":"检查物体是否在顶部和底部边界上包裹。","Is vertical wrapping":"是否垂直包裹","_PARAM0_ is vertical wrapping":"_PARAM0_是垂直包裹","Enable wrapping on the left and right borders.":"在左右边界上启用包裹。","Enable horizontal wrapping":"启用水平包裹","Enable _PARAM0_ horizontal wrapping: _PARAM2_":"启用_PARAM0_水平包裹:_PARAM2_","Enable wrapping on the top and bottom borders.":"在顶部和底部边界上启用包裹。","Enable vertical wrapping":"启用垂直包裹","Enable _PARAM0_ vertical wrapping: _PARAM2_":"启用_PARAM0_垂直包裹:_PARAM2_","Top border (Y position).":"顶部边界(Y位置)。","Top border":"顶部边界","Left border (X position).":"左边界(X位置)。","Left border":"左边界","Right border (X position).":"右边界(X位置)。","Right border":"右边界","Bottom border (Y position).":"底部边界(Y位置)。","Bottom border":"底部边框","Number of pixels past the center where the object teleports and appears.":"超出中心像素数,物体传送并出现的位置。","Trigger offset":"触发器偏移","Set top border (Y position).":"设置顶部边框(Y位置)。","Set top border":"设置顶部边框","Set _PARAM0_ top border to _PARAM2_":"将_PARAM0_顶部边框设置为_PARAM2_","Top border value":"顶部边框数值","Set left border (X position).":"设置左边框(X位置)。","Set left border":"设置左边框","Set _PARAM0_ left border to _PARAM2_":"将_PARAM0_左边框设置为_PARAM2_","Left border value":"左边框数值","Set bottom border (Y position).":"设置底部边框(Y位置)。","Set bottom border":"设置底部边框","Set _PARAM0_ bottom border to _PARAM2_":"将_PARAM0_底部边框设置为_PARAM2_","Bottom border value":"底部边框数值","Set right border (X position).":"设置右边框(X位置)。","Set right border":"设置右边框","Set _PARAM0_ right border to _PARAM2_":"将_PARAM0_右边框设置为_PARAM2_","Right border value":"右边框数值","Set trigger offset (pixels).":"设置触发器偏移(像素)。","Set trigger offset":"设置触发器偏移","Set _PARAM0_ trigger offset to _PARAM2_ pixels":"将_PARAM0_触发器偏移设置为_PARAM2_像素","SetScreen Offset Leaving Value":"Save current velocity values.","Screen Wrap (physics objects)":"屏幕包裹(物理对象)","Angular Velocity":"角速度","Linear Velocity X":"线速度X","Linear Velocity Y":"线速度Y","Save current velocity values.":"保存当前速度值","Save current velocity values":"保存当前速度值","Save current velocity values of _PARAM0_":"保存_PARAM0_当前速度值","Apply saved velocity values.":"应用保存的速度值。","Apply saved velocity values":"应用保存的速度值","Apply saved velocity values of _PARAM0_":"应用_PARAM0_保存的速度值","Animate Shadow Clones":"动画阴影克隆","Create and animate shadow clones that follow the path of a primary object.":"创建和动画阴影克隆以跟随主要对象的路径。","Select the primary object, the shadow clone object, the number of shadow clones, the number of frames between shadow clones, the rate that shadow clones will fade away (if desired), the Z-value of the shadow clones, and the layer the shadow clones will be created on.":"选择主要物体,影子克隆物体,影子克隆数量,影子克隆之间的帧数,影子克隆淡出的速率(如果需要),影子克隆的Z值,以及影子克隆将被创建的图层。","Animate shadow clones that follow the path of a primary object":"动画阴影克隆,跟随主要对象的路径","Create and animate _PARAM3_ copies of _PARAM2_ that follow the position of _PARAM1_, with _PARAM4_ empty frames between shadow clones, and fading the opacity of shadow clones by _PARAM5_ per clone. Shrink scale of shadow clones by _PARAM6_ per clone. Shadow clones will be created on _PARAM7_ layer with a Z-value of _PARAM8_. Match X scale: _PARAM9_ Match Y scale: _PARAM10_ Match angle: _PARAM11_ Match animation: _PARAM12_ Match animation frame: _PARAM13_ Match vertical flip: _PARAM14_ Match horizontal flip: _PARAM15_":"创建和动画_PARAM3_的副本,这些副本遵循_PARAM1_的位置,与空的帧之间_PARAM4_的影子克隆,并且每个克隆透明度淡出_PARAM5_。每个副本缩小比率_PARAM6_。影子克隆将在_PARAM7_图层上创建,Z值为_PARAM8_。匹配X比例:_PARAM9_ 匹配Y比例:_PARAM10_ 匹配角度:_PARAM11_ 匹配动画:_PARAM12_ 匹配动画帧:_PARAM13_ 匹配垂直翻转:_PARAM14_ 匹配水平翻转:_PARAM15_","Object that shadow clones will follow":"影子克隆将跟随的物体","Shadows clones will be made of this object (Cannot be the same object used for primary object)":"阴影克隆将由此物体制成(不能与主要对象使用相同的对象)","Number of shadow clones (Default: 1)":"影子克隆数量(默认:1)","Number of empty frames between shadow clones (Default: 1)":"影子克隆之间的空帧数(默认:1)","Fade speed (Range: 0 to 255) (Default: 0)":"淡出速度(范围:0到255)(默认:0)","Decrease in opacity for each consecutive shadow clone":"每个连续阴影克隆的透明度减少","Shrink speed (Range: 0 to 100) (Default: 0)":"缩小速度(范围:0到100)(默认:0)","Decrease in scale for each consecutive shadow clone":"每个连续阴影克隆的缩放减少","Shadow clones will be created on this layer. (Default: \"\") (Base Layer)":"影子克隆将在此图层创建。(默认:\"\")(基础图层)","Z value for created shadow clones":"创建的影子克隆的Z值","Match X scale of primary object:":"主要对象的X比例匹配:","Match Y scale of primary object:":"主要对象的Y比例匹配:","Match angle of primary object:":"主要对象的角度匹配:","Match animation of primary object:":"主要对象的动画匹配:","Match animation frame of primary object:":"主要对象的动画帧匹配:","Match the vertical flip of primary object:":"主要对象的垂直翻转匹配:","Match the horizontal flip of primary object:":"主要对象的水平翻转匹配:","Delete shadow clone objects that are linked to a primary object.":"删除与主对象相关联的阴影克隆对象。","Delete shadow clone objects that are linked to a primary object":"删除与主对象相关联的阴影克隆对象","Primary object":"主对象","Shadow clones":"阴影克隆","Shake object":"摇晃对象","Shake an object.":"摇晃一个对象。","Shake objects with translation and rotation.":"以平移和旋转来抖动对象。","Shake object (position, angle)":"抖动对象(位置,角度)","Shake an object, using one or more ways to shake (position, angle). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"使对象晃动,采用一种或多种方式进行晃动(位置,角度)。确保开始新的晃动之前“停止晃动”,如果使用不同的参数,需要采用相同的参数。","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_":"晃动对象_PARAM0_,持续_PARAM2_秒。在X轴上将位置振幅_PARAM3_和Y轴上_PARAM4_,角度旋转振幅_PARAM5_. 等待_PARAM6_秒。连续晃动直到停止:_PARAM7_","Stop any shaking of object that was initiated by the Shake Object extension.":"停止由晃动对象扩展程序引发的任何对象的晃动。","Stop shaking the object":"停止晃动对象","3D object shake":"3D对象摇晃","Shake 3D objects.":"摇晃3D对象","Shake 3D objects with translation and rotation.":"以平移和旋转来抖动3D对象。","3D shake":"3D抖动","Translation amplitude on X axis":"X轴上的平移振幅","Translation amplitude on Y axis":"Y轴上的平移振幅","Translation amplitude on Z axis":"Z轴上的平移振幅","Rotation amplitude around X axis":"绕X轴的旋转振幅","Rotation amplitude around Y axis":"绕Y轴的旋转振幅","Rotation amplitude around Z axis":"绕Z轴的旋转振幅","Start to shake at the object creation":"在对象创建时开始抖动","Shake the object with a linear easing at the start and the end.":"以线性缓和方式在起始和结束时晃动对象。","Shake":"摇动","Shake _PARAM0_ for _PARAM2_ seconds with _PARAM3_ seconds of easing to start and _PARAM4_ seconds to stop":"摇动 _PARAM0_ 持续 _PARAM2_ 秒,初始缓动持续 _PARAM3_ 秒,停止需要 _PARAM4_ 秒","Shake the object with a linear easing at the start and keep shaking until the stop action is used.":"使用线性缓动开始摇动对象,并持续摇动直到停止动作被使用。","Start shaking":"开始摇动","Start shaking _PARAM0_ with _PARAM2_ seconds of easing":"开始摇动 _PARAM0_ 持续 _PARAM2_ 秒的缓动","Stop shaking the object with a linear easing.":"使用线性缓动停止摇动对象。","Stop shaking":"停止摇动","Stop shaking _PARAM0_ with _PARAM2_ seconds of easing":"停止摇动 _PARAM0_ 持续 _PARAM2_ 秒的缓动","Check if the object is shaking.":"检查对象是否在摇动。","Is shaking":"在摇动","Check if the object is stopping to shake.":"检查对象是否在停止摇动。","Is stopping to shake":"在停止摇动","_PARAM0_ is stopping to shake":"_PARAM0_ 在停止摇动","the shaking frequency of the object.":"对象的摇动频率。","Shaking frequency":"摇动频率","the shaking frequency":"摇动频率","Return the easing factor according to start properties.":"根据起始属性返回缓动因子。","Start easing factor":"起始缓动因子","Return the easing factor according to stop properties.":"根据停止属性返回缓动因子。","Stop easing factor":"停止缓动因子","stop easing factor":"停止缓动因子","Share dialog and sharing options":"共享对话框和共享选项","Allows to share content via the system share dialog. Works only on mobile (browser or mobile app).":"允许通过系统共享对话框共享内容。仅在移动设备上(浏览器或移动应用程序)有效。","Share a link or text via another app using the system share dialog.":"使用系统共享对话框通过其他应用程序共享链接或文本。","Share text: _PARAM1_ and url: _PARAM2_ with title _PARAM3_":"用标题_PARAM3_共享_PARAM1_和url:_PARAM2_的文本","Text to share":"要共享的文本","Url to share":"要共享的网址","Title to show in the Share dialog":"在共享对话框中显示的标题","Check if the browser/operating system of the device supports sharing. Sharing is typically not supported on desktop browsers or desktop apps.":"检查设备的浏览器/操作系统是否支持共享。通常在桌面浏览器或桌面应用上不支持共享。","Sharing is supported":"支持共享","The browser or system supports sharing":"浏览器或系统支持共享","the result of the last share dialog.":"上次共享对话框的结果。","Result of the last share dialog":"上次共享对话框的结果","the result of the last share dialog":"上次共享对话框的结果","Shock wave effect":"Shock wave effect","Draw shock wave.":"绘制冲击波。","Draw ellipse shock waves.":"绘制椭圆形冲击波。","Ellipse shock wave":"椭圆形冲击波","Start width":"起始宽度","Start height":"起始高度","Start outline thickness":"起始轮廓厚度","Outline":"轮廓","Start angle":"起始角度","End width":"结束宽度","End height":"结束高度","End outline thickness":"结束轮廓厚度","End angle":"结束角度","Timing":"定时","Fill the shape":"填充形状","the start width of the object.":"对象的起始宽度。","the start width":"对象的起始宽度","the start height of the object.":"对象的起始高度。","the start height":"对象的起始高度","the start outline of the object.":"对象的起始轮廓。","the start outline":"对象的起始轮廓","the start angle of the object.":"对象的起始角度。","the start angle":"对象的起始角度","the end width of the object.":"对象的结束宽度。","the end width":"对象的结束宽度","the end height of the object.":"对象的结束高度。","the end height":"对象的结束高度","the end outline thickness of the object.":"对象的结束轮廓厚度。","the end outline thickness":"对象的结束轮廓厚度","the end Color of the object.":"对象的结束颜色。","End Color":"结束颜色","the end Color":"对象的结束颜色","the end Opacity of the object.":"对象的结束不透明度。","End Opacity":"结束不透明度","the end Opacity":"对象的结束不透明度","the end angle of the object.":"对象的结束角度。","the end angle":"对象的结束角度","the duration of the animation.":"动画的持续时间。","the duration":"动画的持续时间","the easing of the animation.":"动画的缓动。","the easing":"缓动","Check if the shape is filled.":"检查形状是否填充。","Shape filled":"形状已填充","The shape of _PARAM0_ is filled":"形状_PARAM0_已填充","Enable or disable the filling of the shape.":"启用或禁用对形状的填充。","Enable filling":"启用填充","Enable filling of _PARAM0_ : _PARAM2_":"启用填充_PARAM0_:_PARAM2_","IsFilled":"已填充","Draw star shock waves.":"绘制星形冲击波。","Star shock waves":"星形冲击波","Start radius":"起始半径","Start Inner radius":"起始内半径","Shape":"形状","End radius":"结束半径","End inner radius":"结束内半径","Number of points":"点的数量","the start radius of the object.":"对象的起始半径。","the start radius":"对象的起始半径","the start inner radius of the object.":"对象的起始内半径。","Start inner radius":"内半径","the start inner radius":"对象的起始内半径","the start outline thickness of the object.":"对象的起始轮廓厚度。","the start outline thickness":"对象的起始轮廓厚度","the end radius of the object.":"对象的结束半径。","the end radius":"结束半径","the end inner radius of the object.":"对象的结束内半径。","the end inner radius":"结束内半径","IsFilling":"正在装填","the number of points of the star.":"星星的点数。","the number of points":"点数","Smooth Camera":"Smooth Camera","Smoothly scroll to follow an object.":"Smoothly scroll to follow an object.","Leftward catch-up speed (in ratio per second)":"左侧赶超速度(每秒比率)","Catch-up speed":"赶超速度","Rightward catch-up speed (in ratio per second)":"右侧赶超速度(每秒比率)","Upward catch-up speed (in ratio per second)":"向上赶超速度(每秒比率)","Downward catch-up speed (in ratio per second)":"向下赶超速度(每秒比率)","Follow on X axis":"在X轴上跟随","Follow on Y axis":"在Y轴上跟随","Follow free area left border":"在空中上方的自由区域","Follow free area right border":"在空中下方的自由区域","Follow free area top border":"跟踪空闲区域顶部边界","Follow free area bottom border":"跟踪空闲区域底部边界","Camera offset X":"摄像机偏移X","Camera offset Y":"摄像机偏移Y","Camera delay":"摄像机延迟","Forecast time":"预测时间","Forecast history duration":"预测历史持续时间","Index (local variable)":"索引(本地变量)","Leftward maximum speed":"向左的最大速度","Rightward maximum speed":"向右的最大速度","Upward maximum speed":"向上的最大速度","Downward maximum speed":"向下的最大速度","OldX (local variable)":"OldX(本地变量)","OldY (local variable)":"OldY(本地变量)","Move the camera closer to the object. This action must be called after the object has moved for the frame.":"将摄像机移近对象。此操作必须在对象移动一帧后调用。","Move the camera closer":"将摄像机移近","Move the camera closer to _PARAM0_":"将摄像机靠近_PARAM0_","Move the camera closer to the object.":"将摄像机移近对象。","Do move the camera closer":"移动摄像机更近","Do move the camera closer _PARAM0_":"在移动摄像机时更近_PARAM0_","Delay the camera according to a maximum speed and catch up the delay.":"根据最大速度延迟相机并赶上延迟。","Wait and catch up":"等待并赶上","Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds":"延迟相机 _PARAM0_:_PARAM2_ 秒,根据最大速度_PARAM3_;_PARAM4_秒,在_PARAM5_秒内追上","Waiting duration (in seconds)":"等待时间(秒)","Waiting maximum camera target speed X":"等待最大相机目标速度 X","Waiting maximum camera target speed Y":"等待最大相机目标速度 Y","Catch up duration (in seconds)":"赶上时间(秒)","Draw the targeted and actual camera position.":"绘制目标和实际摄像机位置。","Draw debug":"绘制调试","Draw targeted and actual camera position for _PARAM0_ on _PARAM2_":"在_PARAM2_上绘制_PARAM0_的目标和实际摄像机位置","Enable or disable the following on X axis.":"在 X 轴上启用或禁用以下内容。","Follow on X":"在 X 轴上跟随","The camera follows _PARAM0_ on X axis: _PARAM2_":"在 X 轴上跟随_PARAM0_的相机:_PARAM2_","Enable or disable the following on Y axis.":"在 Y 轴上启用或禁用以下内容。","Follow on Y":"在 Y 轴上跟随","The camera follows _PARAM0_ on Y axis: _PARAM2_":"在 Y 轴上跟随_PARAM0_的相机:_PARAM2_","Change the camera follow free area right border.":"更改相机跟随自由区域的右边界。","Change the camera follow free area right border of _PARAM0_: _PARAM2_":"更改相机跟随自由区域右边界:_PARAM0_:_PARAM2_","Change the camera follow free area left border.":"更改相机跟随自由区域左边界。","Change the camera follow free area left border of _PARAM0_: _PARAM2_":"更改相机跟随自由区域左边界:_PARAM0_:_PARAM2_","Change the camera follow free area top border.":"更改相机跟随自由区域顶边界。","Change the camera follow free area top border of _PARAM0_: _PARAM2_":"更改相机跟随自由区域顶边界:_PARAM0_:_PARAM2_","Change the camera follow free area bottom border.":"更改相机跟随自由区域底边界。","Change the camera follow free area bottom border of _PARAM0_: _PARAM2_":"更改相机跟随自由区域底边界:_PARAM0_:_PARAM2_","Change the camera leftward maximum speed (in pixels per second).":"更改相机左向最大速度(每秒像素数)。","Change the camera leftward maximum speed of _PARAM0_: _PARAM2_":"更改相机左向最大速度:_PARAM0_:_PARAM2_","Leftward maximum speed (in pixels per second)":"向左最大速度(以每秒像素计)","Change the camera rightward maximum speed (in pixels per second).":"更改相机右向最大速度(每秒像素数)。","Change the camera rightward maximum speed of _PARAM0_: _PARAM2_":"更改相机右向最大速度:_PARAM0_:_PARAM2_","Rightward maximum speed (in pixels per second)":"向右最大速度(每秒像素数)","Change the camera upward maximum speed (in pixels per second).":"更改相机向上最大速度(每秒像素数)。","Change the camera upward maximum speed of _PARAM0_: _PARAM2_":"更改相机向上最大速度:_PARAM0_:_PARAM2_","Upward maximum speed (in pixels per second)":"向上最大速度(每秒像素数)","Change the camera downward maximum speed (in pixels per second).":"更改相机向下最大速度(每秒像素数)。","Change the camera downward maximum speed of _PARAM0_: _PARAM2_":"更改相机向下最大速度:_PARAM0_:_PARAM2_","Downward maximum speed (in pixels per second)":"向下最大速度(每秒像素数)","Change the camera leftward catch-up speed (in ratio per second).":"更改相机向左捕捉速度(每秒比率)。","Leftward catch-up speed":"向左捕捉速度","Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_":"更改相机向左捕捉速度:_PARAM0_:_PARAM2_","Change the camera rightward catch-up speed (in ratio per second).":"更改相机向右捕捉速度(每秒比率)。","Rightward catch-up speed":"向右捕捉速度","Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_":"更改相机向右捕捉速度:_PARAM0_:_PARAM2_","Change the camera downward catch-up speed (in ratio per second).":"更改相机向下捕捉速度(每秒比率)。","Downward catch-up speed":"向下捕捉速度","Change the camera downward catch-up speed of _PARAM0_: _PARAM2_":"更改相机向下捕捉速度:_PARAM0_:_PARAM2_","Change the camera upward catch-up speed (in ratio per second).":"更改相机向上捕捉速度(每秒比率)。","Upward catch-up speed":"向上捕捉速度","Change the camera upward catch-up speed of _PARAM0_: _PARAM2_":"更改相机向上捕捉速度:_PARAM0_:_PARAM2_","the camera offset on X axis of the object. This is not the current difference between the object and the camera position.":"物体在X轴上的摄像机偏移。这不是物体与摄像机位置之间的当前差异。","the camera offset on X axis":"物体在X轴上的摄像机偏移","Change the camera offset on X axis of an object.":"改变物体在X轴上的摄像机偏移。","Camera Offset X":"摄像机偏移X","Change the camera offset on X axis of _PARAM0_: _PARAM2_":"更改_PARAM0_的X轴上的摄像机偏移:_PARAM2_","the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.":"物体在Y轴上的摄像机偏移。这不是物体与摄像机位置之间的当前差异。","the camera offset on Y axis":"物体在Y轴上的摄像机偏移","Change the camera offset on Y axis of an object.":"改变物体在Y轴上的摄像机偏移。","Camera Offset Y":"摄像机偏移Y","Change the camera offset on Y axis of _PARAM0_: _PARAM2_":"更改_PARAM0_的Y轴上的摄像机偏移:_PARAM2_","Change the camera forecast time (in seconds).":"更改摄像机预测时间(以秒为单位)。","Change the camera forecast time of _PARAM0_: _PARAM2_":"更改_PARAM0_的摄像机预测时间:_PARAM2_","Change the camera delay (in seconds).":"更改摄像机延迟(以秒为单位)。","Change the camera delay of _PARAM0_: _PARAM2_":"更改_PARAM0_的摄像机延迟:_PARAM2_","Return follow free area left border X.":"返回跟随自由区域的左边界X。","Free area left":"自由区域左","Return follow free area right border X.":"返回跟随自由区域的右边界X。","Free area right":"自由区域右","Return follow free area bottom border Y.":"返回跟随自由区域的底部边界Y。","Free area bottom":"自由区域底部","Return follow free area top border Y.":"返回跟随自由区域的顶部边界Y。","Free area top":"自由区域顶部","Update delayed position and delayed history. This is called in doStepPreEvents.":"更新延迟位置和延迟历史。这在doStepPreEvents中被调用。","Update delayed position":"更新延迟位置","Update delayed position and delayed history of _PARAM0_":"更新_PARAM0_的延迟位置和延迟历史","Check if the camera following target is delayed from the object.":"检查摄像机是否延迟于物体。","Camera is delayed":"摄像机被延迟","The camera of _PARAM0_ is delayed":"_PARAM0_的摄像机被延迟","Return the current camera delay.":"返回当前摄像机延迟。","Current delay":"当前延迟","Check if the camera following is waiting at a reduced speed.":"检查摄像机是否按降低的速度等待。","Camera is waiting":"摄像机在等待","The camera of _PARAM0_ is waiting":"_PARAM0_的摄像机在等待","Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.":"向延迟位置历史添加位置以进行预测。这在UpadteDelayedPosition中被调用2次。","Add forecast history position":"添加预测历史位置","Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_":"将时间_PARAM2_和位置_PARAM3_; _PARAM4_添加到_PARAM0_的预测历史记录","Object X":"对象X","Object Y":"对象Y","Update forecasted position. This is called in doStepPreEvents.":"更新预测位置。这在doStepPreEvents中调用。","Update forecasted position":"更新预测位置","Update forecasted position of _PARAM0_":"更新_PARAM0_的预测位置","Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.":"将项目历史结束位置投影到线性回归线上。此函数仅由UpdateForecastedPosition调用。","Project history ends":"项目历史结束","Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_":"项目历史最老:_PARAM2_;_PARAM3_和最新位置:_PARAM4_;_PARAM5_ of _PARAM0_","OldestX":"最老的X","OldestY":"最老的Y","Newest X":"最新X","Newest Y":"最新Y","Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.":"返回预测时间与历史持续时间之间的比率。此函数仅由UpdateForecastedPosition调用。","Forecast time ratio":"预测时间比率","Smoothly scroll to follow a character and stabilize the camera when jumping.":"平稳地滚动以跟随角色,并在跳跃时稳定相机。","Smooth platformer camera":"平滑平台游戏相机","Smooth camera behavior":"平滑相机行为","Follow free area top in the air":"空中的跟踪自由区域顶部","Follow free area bottom in the air":"空中的跟踪自由区域底部","Follow free area top on the floor":"地面上的跟踪自由区域顶部","Follow free area bottom on the floor":"地面上的跟踪自由区域底部","Upward speed in the air (in ratio per second)":"空中的向上速度(每秒中的比率)","Downward speed in the air (in ratio per second)":"空中的向下速度(每秒中的比率)","Upward speed on the floor (in ratio per second)":"地面上的向上速度(每秒中的比率)","Downward speed on the floor (in ratio per second)":"地面上的向下速度(每秒中的比率)","Upward maximum speed in the air":"空中的向上最大速度","Downward maximum speed in the air":"空中的向下最大速度","Upward maximum speed on the floor":"地面上的向上最大速度","Downward maximum speed on the floor":"地面上的向下最大速度","Rectangular 2D grid":"矩形二维网格","Snap objects on a virtual grid.":"Snap objects on a virtual grid.","Snap object to a virtual grid (i.e: this is not the grid used in the editor).":"将对象捕捉到虚拟网格(即:这不是编辑器中使用的网格)。","Snap objects to a virtual grid":"将对象捕捉到虚拟网格","Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"利用宽度为_PARAM2_像素,高度_PARAM3_像素的单元格和偏移位置(_PARAM4_; _PARAM5_)将_PARAM1_对象捕捉到虚拟网格。","Speed restrictions":"Speed restrictions","Limit the maximum movement and rotation speed of an object from forces or the 2D Physics behavior.":"限制物体因力量或二维物理行为造成的最大移动和旋转速度。","Limit the maximum speed an object will move from (non-physics) forces.":"限制对象由(非物理)力移动的最大速度。","Enforce max movement speed":"实施最大移动速度","Maximum speed (pixels/second)":"最大速度(像素/秒)","Limit the maximum speed an object will move from physics forces.":"限制物体受到物理力影响的最大移动速度。","Enforce max movement speed (physics)":"实施最大移动速度(物理)","Limit the maximum rotation speed of an object from physics forces.":"限制物体受到物理力影响的最大旋转速度。","Enforce max rotation speed (physics)":"实施最大旋转速度(物理)","Maximum rotation speed (degrees/second)":"最大旋转速度(度/秒)","Object Masking":"Object Masking","Use a sprite or a shape painter to mask another object.":"Use a sprite or a shape painter to mask another object.","Define a sprite as a mask of an object.":"将精灵定义为物体的蒙版。","Mask an object with a sprite":"使用精灵对物体进行遮罩","Sprite object to use as a mask":"用作蒙版的精灵物体","Remove the mask of the specified object.":"移除指定物体的蒙版。","Remove the mask":"移除蒙版","Remove the mask of _PARAM1_":"移除_PARAM1_的蒙版","Object with a mask to remove":"带有要移除蒙版的物体","Multitouch joystick and buttons (sprite)":"Multitouch joystick and buttons (sprite)","Joysticks or buttons for touchscreens.":"Joysticks or buttons for touchscreens.","Check if a button was just pressed on a multitouch controller.":"检查多点触控控制器上是否刚刚按下一个按钮。","Multitouch controller button just pressed":"多点触控控制器按钮刚刚按下","Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed":"多点触控控制器 _PARAM1_ 的按钮 _PARAM2_ 刚刚按下","Multitouch controller identifier (1, 2, 3, 4...)":"多点触控控制器标识符(1、2、3、4...)","Button name":"按钮名称","Check if a button is pressed on a multitouch controller.":"检查多点触控控制器上是否按下一个按钮。","Multitouch controller button pressed":"多点触控控制器按钮已按下","Button _PARAM2_ of multitouch controller _PARAM1_ is pressed":"多点触控控制器_PARAM1_的按钮_PARAM2_已按下","Check if a button is released on a multitouch controller.":"检查多点触控控制器上的按钮是否已释放。","Multitouch controller button released":"多点触控控制器按钮已释放","Button _PARAM2_ of multitouch controller _PARAM1_ is released":"多点触控控制器_PARAM1_的按钮_PARAM2_已释放","Change a button state for a multitouch controller.":"更改多点触控控制器的按钮状态。","Button state":"按钮状态","Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_":"将多点触控控制器_PARAM1_的按钮_PARAM2_标记为_PARAM3_","Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"更改摇杆的死区半径。死区是一个区域,在该区域内摇杆的移动不会被计入(相反,摇杆将被视为未移动)。","Dead zone radius":"死区半径","Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"将多点触控控制器_PARAM1_的多点触控摇杆_PARAM2_的死区更改为_PARAM3_","Joystick name":"摇杆名称","Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"返回手柄的死区半径。死区是手柄上的移动不被计入的区域(相反,手柄将被视为未移动)。","Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_":"将多点触控控制器_PARAM1_的多点触控手柄_PARAM2_死区更改为_PARAM3_","the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).":"角度(以度为单位)的方向索引(左=1,下=2,右=3,上=4)。","Angle to 4-way index":"角度转4方向索引","The angle _PARAM1_ 4-way index":"_PARAM1_的4方向索引角度","the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).":"角度(以度为单位)的方向索引(左=1,左下=2... 左上=7)。","Angle to 8-way index":"角度转8方向索引","The angle _PARAM1_ 8-way index":"_PARAM1_的8方向索引角度","Check if angle is in a given direction.":"检查角度是否在给定方向。","Angle 4-way direction":"角度4方向方向","The angle _PARAM1_ is the 4-way direction _PARAM2_":"_PARAM1_的角度是4方向的_PARAM2_","Angle 8-way direction":"角度8方向方向","The angle _PARAM1_ is the 8-way direction _PARAM2_":"_PARAM1_的角度是8方向的_PARAM2_","Check if joystick is pushed in a given direction.":"检查手柄是否朝特定方向推动。","Joystick pushed in a direction (4-way)":"手柄推向一个方向(4方向)","Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_":"多点触控控制器_PARAM1_的手柄_PARAM2_推向方向_PARAM3_","Joystick pushed in a direction (8-way)":"手柄推向一个方向(8方向)","the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"拇指离开手柄中心的百分比(范围:0至1)。","Joystick force (deprecated)":"手柄力(弃用)","Joystick _PARAM2_ of multitouch controller _PARAM1_ force":"多点触控控制器_PARAM1_ _PARAM2_摇杆力","the force of multitouch contoller stick (from 0 to 1).":"多点触控控制器摇杆(范围:0至1)。","multitouch controller _PARAM1_ _PARAM2_ stick force":"多点触控控制器_PARAM1_ _PARAM2_摇杆力","Stick name":"摇杆名称","Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"更改拇指离开手柄中心的百分比(范围:0至1)。","Joystick force":"手柄力","Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"将多点触控控制器_PARAM1_的摇杆_PARAM2_力更改为_PARAM3_","Return the angle the joystick is pointing towards (Range: -180 to 180).":"返回操纵杆指向的角度(范围:-180至180)。","Joystick angle (deprecated)":"操纵杆角度(已弃用)","Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).":"返回触摸屏控制器摇杆指向的角度(范围:-180至180)。","Change the angle the joystick is pointing towards (Range: -180 to 180).":"改变操纵杆指向的角度(范围:-180至180)。","Joystick angle":"操纵杆角度","Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"将多点触控控制器 _PARAM1_ 的操纵杆 _PARAM2_ 角度更改为 _PARAM3_","Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).":"返回多点触控控制器摇杆在X轴的力量(从左至-1到右至1)。","Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).":"返回多点触控控制器摇杆在Y轴的力量(从顶至-1到底至1)。","Check if a new touch has started on the right or left side of the screen.":"检查是否在屏幕的右侧或左侧开始了新的触摸。","New touch on a screen side":"屏幕侧的新触摸","A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer":"屏幕的 _PARAM1_ 图层上的 _PARAM2_ 侧开始了新的触摸","Multitouch joystick":"多点触摸操纵杆","Screen side":"屏幕侧","Joystick that can be controlled by interacting with a touchscreen.":"可以通过触摸屏进行操纵的操纵杆。","Multitouch Joystick":"多点触控操纵杆","Dead zone radius (range: 0 to 1)":"死区半径(范围:0至1)","The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)":"死区是一个区域,摇杆移动将不予考虑(取而代之的是将摇杆视为未移动)","Joystick angle (range: -180 to 180)":"操纵杆角度(范围:-180至180)","Joystick force (range: 0 to 1)":"操纵杆力量(范围:0至1)","the joystick force (from 0 to 1).":"摇杆力(从0到1)。","the joystick force":"摇杆力","Change the joystick angle of _PARAM0_ to _PARAM2_":"将_PARAM0_的摇杆角度更改为_PARAM2_","Return the stick force on X axis (from -1 at the left to 1 at the right).":"返回X轴上的摇杆力(从左侧的-1到右侧的1)。","Return the stick force on Y axis (from -1 at the top to 1 at the bottom).":"返回Y轴上的摇杆力(从顶部的-1到底部的1)。","Joystick pushed in a direction (4-way movement)":"摇杆向一个方向推(4向移动)","_PARAM0_ is pushed in direction _PARAM2_":"_PARAM0_朝_PARAM2_方向推","Joystick pushed in a direction (8-way movement)":"摇杆向一个方向推(8向移动)","Check if a joystick is pressed.":"检查摇杆是否被按下。","Joystick pressed":"摇杆按下","Joystick _PARAM0_ is pressed":"_PARAM0_的摇杆被按下","Reset the joystick values (except for angle, which stays the same)":"重置摇杆值(但角度保持不变)","Reset":"重置","Reset the joystick of _PARAM0_":"重置_PARAM0_的摇杆","the multitouch controller identifier.":"多点触控控制器标识符。","Multitouch controller identifier":"多点触控控制器标识符","the multitouch controller identifier":"多点触控控制器标识符","the joystick name.":"摇杆名称。","the joystick name":"摇杆名称","the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"摇杆的死区半径(范围:0至1)。死区是手柄上的移动不会被计入的区域(相反,手柄不会被认为是移动的)。","the dead zone radius":"死区半径","Force the joystick into the pressing state.":"将摇杆强制进入按下状态。","Force start pressing":"强制开始按下","Force start pressing _PARAM0_ with touch identifier: _PARAM2_":"使用触摸标识符_PARAM2_强制开始按下_PARAM0_。","Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.":"检测对象上在触摸屏上进行的按压,使其像按钮一样运作,并自动触发具有相同标识符的按钮以实现映射行为。","Multitouch button":"多点触控按钮","Button identifier":"按钮标识符","TouchID":"触摸ID","Button released":"按钮已释放","Button just pressed":"按钮刚刚被按下","Triggering circle radius":"触发圆半径","This circle adds up to the object collision mask.":"此圆增加了对象碰撞掩码。","Check if the button was just pressed.":"检查按钮是否刚刚被按下。","Button _PARAM0_ was just pressed":"按钮 _PARAM0_ 刚刚被按下","Check if the button is pressed.":"检查按钮是否被按下。","Button pressed":"按钮已按下","Button _PARAM0_ is pressed":"按钮_PARAM0_已按下","Check if the button is released.":"检查按钮是否已释放。","Button _PARAM0_ is released":"按钮_PARAM0_已释放","Mark the button _PARAM0_ as _PARAM2_":"将按钮_PARAM0_标记为_PARAM2_","Control a platformer character with a multitouch controller.":"使用多点触控控制器控制平台游戏角色。","Platformer multitouch controller mapper":"平台游戏多点触控控制器映射器","Platform character behavior":"平台角色行为","Controller identifier (1, 2, 3, 4...)":"控制器标识符(1、2、3、4……)","Jump button name":"跳转按钮名称","Control a 3D physics character with a multitouch controller.":"使用多点触控控制3D物理角色。","3D platformer multitouch controller mapper":"3D平台游戏多点触摸控制器映射","3D shooter multitouch controller mapper":"3D射击游戏多点触控控制器映射","Control camera rotations with a multitouch controller.":"使用多点触控器控制摄像机旋转。","First person camera multitouch controller mapper":"第一人称摄像头多点触控控制器映射","Control a 3D physics car with a multitouch controller.":"Control a 3D physics car with a multitouch controller.","3D car multitouch controller mapper":"3D car multitouch controller mapper","Steer joystick":"Steer joystick","Speed joystick":"Speed joystick","Hand brake button name":"Hand brake button name","Control a top-down character with a multitouch controller.":"使用多点触控器控制顶部角色。","Top-down multitouch controller mapper":"顶部多点触控控制器映射","Joystick for touchscreens.":"触屏手柄。","Pass the object property values to the behavior.":"将对象属性值传递给行为。","Update configuration":"更新配置","Update the configuration of _PARAM0_":"更新_PARAM0_的配置","Show the joystick until it is released.":"显示摇杆直到释放。","Show and start pressing":"显示并开始按下","Show _PARAM0_ at the cursor position and start pressing":"在光标位置显示_PARAM0_并开始按下","Return the X position of a specified touch":"返回特定触摸的X位置","Touch X position (on parent)":"触摸X位置(在父级)","De/activate control of the joystick.":"激活/停用摇杆控制。","De/activate control":"激活/停用控制","Activate control of _PARAM0_: _PARAM1_":"激活_PARAM0_的控制:_PARAM1_","Check if a stick is pressed.":"检查摇杆是否按下。","Stick pressed":"摇杆已按下","Stick _PARAM0_ is pressed":"摇杆_PARAM0_已按下","the strick force (from 0 to 1).":"摇杆力(从0到1)。","the stick force":"摇杆力","the stick force on X axis (from -1 at the left to 1 at the right).":"X轴上的摇杆力(从左侧的-1到右侧的1)。","the stick X force":"摇杆X轴力","the stick force on Y axis (from -1 at the top to 1 at the bottom).":"y轴上的杆力(从表面到表面为-1,从表面到底部为1)。","the stick Y force":"杆Y力","Return the angle the joystick is pointing towards (from -180 to 180).":"返回摇杆指向的角度(从-180到180)。","Return the angle the stick is pointing towards (from -180 to 180).":"返回杆指向的角度(从-180到180)。","_PARAM0_ is pushed in direction _PARAM1_":"_PARAM0_朝_DIRECTION_推","the multitouch controller identifier (1, 2, 3, 4...).":"多点触控控制器标识符(1、2、3、4...)。","the joystick name of the object.":"对象的摇杆名称。","the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"摇杆的死区半径(范围:0到1)。死区是一个区域,游戏手柄上的移动不会被考虑在内(相反,手柄会被视为未移动)。","Sprite Sheet Animations":"精灵表动画","Animate a tiled sprite from a sprite sheet.":"从精灵表动画中创建平铺精灵。","Animates a sprite sheet using JSON (see extension description).":"使用JSON播放精灵表(请参阅扩展说明)。","JSON sprite sheet animator":"JSON精灵表动画制作","JSON formatted text describing the sprite sheet":"JSON格式描述精灵表的文本","Current animation":"当前动画","Current frame of the animation":"当前动画帧","Currently displayed frame name":"当前显示的帧名称","Speed of the animation (in seconds)":"动画速度(单位:秒)","Loads the JSON data into the behavior":"将JSON数据加载到行为中","Load the JSON":"加载JSON","Load the JSON of _PARAM0_":"加载_PARAM0_的JSON","Update the object attached to the behavior using the latest properties values.":"使用最新属性值更新附加到该行为的对象","Update the object":"更新对象","Update object _PARAM0_ with properties of _PARAM1_":"使用_PARAM1_的属性更新_PARAM0_对象","Updates the animation frame.":"更新动画帧。","Update the animation frame":"更新动画帧","Update the current animation frame of _PARAM0_ to _PARAM2_":"将_PARAM0_的当前动画帧更新为_PARAM2_。","The frame to set to":"要设置的帧","Loads a new JSON spritesheet data into the behavior.":"将新的JSON精灵表数据加载到行为中。","Load data from a JSON resource":"从JSON资源加载数据","Load JSON spritesheet data for _PARAM0_ from _PARAM2_":"从_PARAM2_加载_PARAM0_的JSON精灵表数据","The JSON to load":"要加载的JSON","Display one frame without animating the object.":"显示一个帧,而不对对象进行动画处理。","Display a frame":"显示一帧","Display frame _PARAM2_ of _PARAM0_":"显示_PARAM0_的帧_PARAM2_","The frame to display":"要显示的帧","Play an animation from the sprite sheet.":"从精灵表播放动画。","Play Animation":"播放动画","Play animation _PARAM2_ of _PARAM0_":"从_PARAM0_播放动画_PARAM2_","The name of the animation":"动画的名称","The name of the current animation. __null if no animation is playing.":"当前动画的名称。 __如果没有正在播放的动画,则为空。","If Current Frame of _PARAM0_ = _PARAM2_":"如果_PARAM0_的当前帧 = _PARAM2_","The name of the currently displayed frame.":"当前显示的帧的名称。","Current frame":"当前帧","Pause the animation of a sprite sheet.":"暂停精灵表的动画。","Pause animation":"暂停动画","Pause the current animation of _PARAM0_":"暂停_PARAM0_的当前动画","Resume a paused animation of a sprite sheet.":"恢复暂停的精灵表动画。","Resume animation":"恢复动画","Resume the current animation of _PARAM0_":"恢复_PARAM0_的当前动画。","Animates a vertical (top to bottom) sprite sheet.":"使用垂直(从上到下)精灵表进行动画。","Vertical sprite sheet animator":"垂直精灵表动画制作","Horizontal width of sprite (in pixels)":"精灵的水平宽度(单位:像素)","Vertical height of sprite (in pixels)":"精灵的垂直高度(单位:像素)","Empty space between each sprite (in pixels)":"每个精灵之间的空白间隔(单位:像素)","Column of the animation":"动画的列","First Frame of the animation":"动画的第一帧","Last Frame of the animation":"动画的最后一帧","Current Frame of the animation":"动画的当前帧","Set the animation frame.":"设置动画帧。","Set the animation frame":"设置动画帧","Set the current frame of _PARAM0_ to _PARAM2_":"将_PARAM0_的当前帧设置为_PARAM2_","The frame":"帧","Play animation":"播放动画","Play animation of _PARAM0_ on column _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"在第_PARAM5_列播放_PARAM0_动画,从第_PARAM2_到第_PARAM3_帧,速度为_PARAM4_","First frame of the animation":"动画的第一帧","Last frame of the animation":"动画的最后一帧","Duration for each frame (seconds)":"每帧持续时间(秒)","The column containing the animation":"包含动画的列","The current frame of the current animation.":"当前动画的当前帧。","Pause the animation of _PARAM0_":"暂停_PARAM0_的动画","Animates a horizontal (left to right) sprite sheet.":"使用水平(从左到右)精灵表进行动画。","Horizontal sprite sheet animator":"水平精灵表动画制作","Row of the animation":"动画的行","Play animation of _PARAM0_ on row _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"以_PARAM4_的速度,在第_PARAM5_行从第_PARAM2_到第_PARAM3_帧播放_PARAM0_动画","Last Frame of animation":"动画的最后一帧","What row is the animation in":"动画所在的行","Toggle switch":"Toggle switch","Toggle switch that users can click or touch.":"Toggle switch that users can click or touch。","The finite state machine used internally by the switch object.":"开关对象内部使用的有限状态机。","Switch finite state machine":"开关有限状态机","Check if the toggle switch is checked.":"检查开关是否处于选中状态。","Check if the toggle switch was checked in the current frame.":"检查当前帧中是否检查了切换开关。","Has just been checked":"刚刚被检查过","_PARAM0_ has just been checked":"_PARAM0_刚刚被检查过","Check if the toggle switch was unchecked in the current frame.":"检查当前帧中开关是否被取消选中。","Has just been unchecked":"刚刚被取消选中","_PARAM0_ has just been unchecked":"_PARAM0_刚刚被取消选中","Check if the toggle switch was toggled in the current frame.":"检查当前帧中开关是否被切换。","Has just been toggled":"刚刚被切换","_PARAM0_ has just been toggled":"_PARAM0_刚刚被切换","Check (or uncheck) the toggle switch.":"勾选(或取消勾选)开关。","Check (or uncheck)":"选择(或取消选择)","Check _PARAM0_: _PARAM2_":"检查_PARAM0_:_PARAM2_","IsChecked":"已选中","Toggle the switch.":"切换开关。","Toggle":"切换","Toggle _PARAM0_":"切换_PARAM0_","A toggle switch that users can click or touch.":"用户可以点击或触摸的切换开关。","Check if the toggle switch was checked or unchecked in the current frame.":"检查当前帧中开关是否是选中或未选中的。","Check _PARAM0_: _PARAM1_":"检查_PARAM0_:_PARAM1_","Update the state animation.":"更新状态动画。","Update state animation":"更新状态动画","Update the state animation of _PARAM0_":"更新_PARAM0_的状态动画","Star Rating Bar":"Star Rating Bar","An animated bar to rate out of 5.":"An animated bar to rate out of 5。","Default rate":"默认速率","Shake the stars on value changes":"在值变化时摇动星星","Disable the rating":"禁用评级","the rate of the object.":"物体的速率。","the rate":"速率","Check if the object is disabled.":"检查对象是否已禁用。","_PARAM0_ is disabled":"_PARAM0_已禁用","Enable or disable the object.":"启用或禁用对象。","_PARAM0_ is disabled: _PARAM1_":"_PARAM0_已禁用:_PARAM1_","Disable":"禁用","Stay On Screen (2D)":"保持在屏幕上(二维)","Move the object to keep it visible on the screen.":"移动对象以保持其在屏幕上可见。","Force the object to stay visible on the screen by setting back its 2D position inside the viewport of the camera.":"通过将物体的二维位置设置回相机视口内,强制该物体在屏幕上可见。","Stay on Screen":"留在屏幕上","Top margin":"上边距","Bottom margin":"下边距","Left margin":"左边距","Right margin":"右边距","the top margin (in pixels) to leave between the object and the screen border.":"对象和屏幕边界之间的顶部边距(以像素为单位)。","Screen top margin":"屏幕顶部边距","the top margin":"顶部边距","the bottom margin (in pixels) to leave between the object and the screen border.":"对象和屏幕边界之间的底部边距(以像素为单位)。","Screen bottom margin":"屏幕底部边距","the bottom margin":"底部边距","the left margin (in pixels) to leave between the object and the screen border.":"对象和屏幕边界之间的左侧边距(以像素为单位)。","Screen left margin":"屏幕左侧边距","the left margin":"左侧边距","the right margin (in pixels) to leave between the object and the screen border.":"对象和屏幕边界之间的右侧边距(以像素为单位)。","Screen right margin":"屏幕右侧边距","the right margin":"右侧边距","Stick objects to others":"将对象粘贴到其他对象","Make objects follow the position and rotation of the object they are stuck to.":"使对象跟随它们所粘贴到的对象的位置和旋转。","Check if the object is stuck to another object.":"检查对象是否粘在另一个对象上。","Is stuck to another object":"是否粘在另一个对象上","_PARAM1_ is stuck to _PARAM3_":"_PARAM1_被粘在_PARAM3_上。","Sticker":"贴纸","Sticker behavior":"贴纸行为","Basis":"基础","Stick the object to another. Use the action to stick the object, or unstick it later.":"将对象粘贴到另一个对象。使用操作将对象粘贴,或稍后取消粘贴。","Only follow the position":"只跟随位置","Destroy when the object it's stuck on is destroyed":"当其粘贴的对象被销毁时销毁","Stick on another object.":"粘在另一个对象上。","Stick":"粘贴","Stick _PARAM0_ to _PARAM2_":"将_PARAM0_粘贴到_PARAM2_","Object to stick to":"要粘贴的对象","Unstick from the object it was stuck to.":"取消与其粘贴的对象的粘贴。","Unstick":"取消粘贴","Unstick _PARAM0_":"取消粘贴_PARAM0_","Sway":"摇摆","Sway objects like grass in the wind.":"像风中的草一样摇摆对象。","Sway multiple instances of an object at different times - useful for random grass swaying.":"在不同时间摆动多个对象的实例 - 用来随机摆动草。","Sway uses the tween behavior":"Sway使用缓动行为","Maximum angle to the left (in degrees) - Use a negative number":"最大左边角度(以度为单位)- 使用负数","Maximum angle to the right (in degrees) - Use a positive number":"最大右边角度(以度为单位)- 使用正数","Mininum value for random tween time range for angle (seconds)":"角度随机缓动时间范围的最小值(秒)","Maximum value for random tween time range for angle (seconds)":"角度随机缓动时间范围的最大值(秒)","Minimum Y scale amount":"Y轴缩放的最小值","Y scale":"Y轴缩放","Maximum Y scale amount":"Y轴缩放的最大值","Mininum value for random tween time range for Y scale (seconds)":"Y轴缩放的范围内的随机缓动时间范围的最小值(秒)","Maximum value for random tween time range for Y scale (seconds)":"Y轴缩放的范围内的随机缓动时间范围的最大值(秒)","Set sway angle left and right.":"设置左右摇摆角度。","Set sway angle left and right":"设置左右摇摆角度","Sway the angle of _PARAM0_ to _PARAM2_° to the left and to _PARAM3_° to the right":"将_PARAM0_的摇摆角度设置为_PARAM2_°至左侧和_PARAM3_°至右侧","Angle to the left (degrees) - Use negative number":"左侧角度(度)-使用负数","Angle to the right (degrees) - Use positive number":"右侧角度(度)-使用正数","Set sway angle time range.":"设置摇摆角度时间范围。","Set sway angle time range":"设置摇摆角度时间范围","Tween angle time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"PARMA0_的角度缓动时间范围,将最小设置为_PARAM2_秒,最大设置为_PARAM3_秒","Angle tween time minimum (seconds)":"角度缓动时间最小时(秒)","Angle tween time maximum (seconds)":"角度缓动时间最大时(秒)","Set sway Y scale mininum and maximum.":"设置摇摆Y轴的最小和最大比例。","Set sway Y scale mininum and maximum":"设置摇摆Y轴的最小和最大比例","Sway the Y scale of _PARAM0_ from _PARAM2_ to _PARAM3_":"摇摆_PARAM0_的Y轴比例从_PARAM2_到_PARAM3_","Minimum Y scale":"最小Y轴比例","Maximum Y scale":"最大Y轴比例","Set Y scale time range.":"设置Y轴比例时间范围。","Set sway Y scale time range":"设置摇摆Y轴比例时间范围","Tween Y scale time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"_PARAM0_的Y轴比例时间范围,将最小设置为_PARAM2_秒,最大设置为_PARAM3_秒","Y scale tween time minimum (seconds)":"Y轴比例Tween时间最小值(秒)","Y scale tween time maximum (seconds)":"Y轴比例Tween时间最大值(秒)","Swipe Gesture":"滑动手势","Detect swipe gestures based on their distance and duration.":"根据它们的距离和持续时间检测滑动手势。","Enable (or disable) swipe gesture detection.":"启用(或禁用)滑动手势检测。","Enable (or disable) swipe gesture detection":"启用(或禁用)滑动手势检测","Enable swipe detection: _PARAM1_":"启用滑动检测:_PARAM1_","Enable swipe detection":"启用滑动检测","Draw a line that indicates the current swipe gesture. Edit \"Outline Size\" of the shape painter to adjust the thickness of the line.":"绘制一根指示当前滑动手势的线。编辑形状绘制器的“轮廓大小”以调整线的厚度。","Draw swipe gesture":"绘制滑动手势","Draw a line with _PARAM1_ that shows the current swipe":"使用_PARAM1_绘制一条显示当前滑动的线","Shape painter used to draw swipe":"用于绘制滑动的形状绘制器","Change the layer used to detect swipe gestures.":"更改用于检测滑动手势的图层。","Layer used to detect swipe gestures":"用于检测滑动手势的图层","Use layer _PARAM1_ to detect swipe gestures":"使用图层_PARAM1_来检测滑动手势","the Layer used to detect swipe gestures.":"用于检测滑动手势的图层。","the Layer used to detect swipe gestures":"用于检测滑动手势的图层","Swipe angle (degrees).":"滑动角度(度)。","Swipe angle (degrees)":"滑动角度(度)","the swipe angle (degrees)":"滑动角度(度)","Swipe distance (pixels).":"滑动距离(像素)。","Swipe distance (pixels)":"滑动距离(像素)","the swipe distance (pixels)":"滑动距离(像素)","Swipe distance in horizontal direction (pixels).":"水平方向的滑动距离(像素)。","Swipe distance in horizontal direction (pixels)":"水平方向的滑动距离(像素)","the swipe distance in horizontal direction (pixels)":"水平方向的滑动距离(像素)","Swipe distance in vertical direction (pixels).":"竖直方向的滑动距离(像素)。","Swipe distance in vertical direction (pixels)":"竖直方向的滑动距离(像素)","the swipe distance in vertical direction (pixels)":"竖直方向的滑动距离(像素)","Start point of the swipe X position.":"开始滑动的X坐标。","Start point of the swipe X position":"开始滑动的X坐标","the start point of the swipe X position":"开始滑动的X坐标","Start point of the swipe Y position.":"开始滑动的Y坐标。","Start point of the swipe Y position":"开始滑动的Y坐标","the start point of the swipe Y position":"开始滑动的Y坐标","End point of the swipe X position.":"结束滑动的X坐标。","End point of the swipe X position":"结束滑动的X坐标","the end point of the swipe X position":"结束滑动的X坐标","End point of the swipe Y position.":"结束滑动的Y坐标。","End point of the swipe Y position":"结束滑动的Y坐标","the end point of the swipe Y position":"结束滑动的Y坐标","Swipe duration (seconds).":"滑动持续时间(秒)。","Swipe duration (seconds)":"滑动持续时间(秒)","swipe duration (seconds)":"滑动持续时间(秒)","Check if a swipe is currently in progress.":"检查当前是否正在进行滑动。","Swipe is in progress":"滑动正在进行中","Check if swipe detection is enabled.":"检查滑动检测是否已启用。","Is swipe detection enabled":"滑动检测是否已启用","Swipe detection is enabled":"滑动检测已启用","Check if the swipe has just ended.":"检查滑动是否刚刚结束。","Swipe just ended":"轻扫刚刚结束","Swipe has just ended":"轻扫刚刚结束","Check if swipe moved in a given direction.":"检测轻扫是否朝指定方向移动。","Swipe moved in a direction (4-way movement)":"轻扫朝一个方向移动(4向移动)","Swipe moved in direction _PARAM1_":"轻扫朝_PARAM1_方向移动","Swipe moved in a direction (8-way movement)":"轻扫朝一个方向移动(8向移动)","Text-to-Speech":"语音合成","An extension to enable the use of Text-to-Speech features.":"一个扩展,使您能够使用语音合成功能。","Audio":"音频","Speaks a text message aloud through the system text-to-speech.":"通过系统文本到语音功能大声朗读文本消息。","Speak out a message":"朗读消息","Say _PARAM1_ with voice _PARAM2_, volume _PARAM3_%, rate _PARAM4_% and pitch _PARAM5_%":"使用声音_PARAM2_、音量_PARAM3_%、速率_PARAM4_%和音调_PARAM5_%说_PARAM1_","The message to be spoken":"要朗读的消息","The voice to be used":"要使用的声音","Voices vary depending on the operating system. \nHere is a list of windows voice names: https://bit.ly/windows-voices \nAnd here is a list of voice names for MacOS: https://bit.ly/mac-voices":"根据操作系统而变。这里是Windows系统声音名称列表:https://bit.ly/windows-voices 和MacOS的声音名称列表:https://bit.ly/mac-voices","Volume between 0% and 100%":"音量在0%和100%之间","Speed between 10% and 1000%":"速度在10%和1000%之间","Pitch between 0% and 200%":"音调在0%和200%之间","Forces all Text-to-Speech to be stopped.":"强制停止所有文本到语音。","Force stop speaking":"强制停止朗读","Third person camera":"第三人称摄像机","Move the camera to look at an object from a given distance.":"移动摄像机以从给定距离查看对象。","Move the camera to look at a position from a distance.":"将摄像机移动以远距离查看位置。","Look at a position from a distance (deprecated)":"从远处看位置(已弃用)","Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°":"将_PARAM6_的摄像机看向_PARAM1_;以_PARAM3_像素从_PARAM2_远处,旋转_PARAM4_°,高度_PARAM5_°","Position on X axis":"X轴上的位置","Position on Y axis":"Y轴上的位置","Rotation angle (around Z axis)":"旋转角度(绕Z轴)","Elevation angle (around Y axis)":"俯仰角度(绕Y轴)","Move the camera to look at an object from a distance.":"将摄像机移动以远距离查看对象。","Look at an object from a distance (deprecated)":"从远处看对象(已弃用)","Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_° and an elevation of _PARAM4_°":"将_PARAM5_的摄像机看向_PARAM1_,从_PARAM2_像素,旋转_PARAM3_°,高度_PARAM4_°","Look at a position from a distance":"从远处看位置","Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_° and an elevation of _PARAM6_°":"将_PARAM7_的摄像机看向_PARAM1_; _PARAM2_; _PARAM3_,从_PARAM4_像素,旋转_PARAM5_°,高度_PARAM6_°","Position on Z axis":"Z轴上的位置","Look at an object from a distance":"从远处看一个对象","Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°":"将_PARAM6_的相机移动到_PARAM3_像素处查看_PARAM1_,旋转_PARAM4_°并俯视_PARAM5_°","Smoothly follow an object at a distance.":"平滑地追随一个距离外的对象。","Halfway time for rotation":"对象旋转的中途时间","Halfway time for elevation rotation":"高度旋转的中间时间","Only used by Z and ZY rotation modes":"仅用于 Z 和 ZY 旋转模式","Halfway time on Z axis":"Z轴上的中途时间","Camera distance":"相机距离","Lateral distance offset":"横向距离偏移","Ahead distance offset":"前方距离偏移","Z offset":"Z偏移","Rotation angle offset":"旋转角度偏移","Elevation angle offset":"仰角偏移","Follow free area top border on Z axis":"在Z轴上跟随自由区域顶部边框","Follow free area bottom border on Z axis":"在Z轴上跟随自由区域底部边框","Automatically rotate the camera with the object":"自动旋转相机与对象","Automatically rotate the camera with the object (elevation)":"Automatically rotate the camera with the object (elevation)","Best left unchecked, use the rotation mode instead":"最好保持未选中状态,请改用旋转模式","Rotation mode":"旋转模式","Targeted camera rotation angle":"目标相机旋转角度","Forward X":"前进 X","Forward Y":"前进 Y","Forward Z":"前进 Z","Lerp camera":"插值摄像机","Lerp the camera rotation to _PARAM0_ with a ratio of _PARAM2_ with rotation offset _PARAM3_° and elevation offset _PARAM4_°":"将摄像机旋转插值到 _PARAM0_,比率为 _PARAM2_,旋转偏移为 _PARAM3_°,高度偏移为 _PARAM4_°","Move to object":"移动到对象","Change the camera position to _PARAM0_ with offset _PARAM2_, _PARAM3_, _PARAM4_":"将摄像机位置更改为 _PARAM0_,偏移值为 _PARAM2_、_PARAM3_、_PARAM4_","X offset":"X 偏移","Y offset":"Y 偏移","Update local basis":"更新本地基准","Update local basis of _PARAM0_ and the camera":"更新 _PARAM0_ 和摄像机的本地基准","Rotate the camera all the way to the targeted angle.":"将摄像机完全旋转至目标角度。","Rotate the camera all the way":"将摄像机完全旋转","Rotate the camera all the way to the targeted angle of _PARAM0_":"将摄像机完全旋转至目标角度_PARAM0_","the camera rotation.":"摄像机旋转。","Camera rotation":"摄像机旋转","the camera rotation":"摄像机旋转","the halfway time for rotation of the object.":"对象旋转的中途时间。","the halfway time for rotation":"对象旋转的中途时间","the halfway time for elevation rotation of the object.":"the halfway time for elevation rotation of the object.","Halfway time for elevation rotation":"Halfway time for elevation rotation","the halfway time for elevation rotation":"the halfway time for elevation rotation","the halfway time on Z axis of the object.":"对象的Z轴上的中途时间。","the halfway time on Z axis":"对象Z轴上的中途时间","Return follow free area bottom border Z.":"返回跟随自由区域底部边界Z。","Free area Z min":"自由区域Z最小","Return follow free area top border Z.":"返回跟随自由区域顶部边界Z。","Free area Z max":"自由区域Z最大","the follow free area top border on Z axis of the object.":"对象Z轴上跟随自由区域顶部边界。","the follow free area top border on Z axis":"对象Z轴上跟随自由区域顶部边界","the follow free area bottom border on Z axis of the object.":"对象Z轴上跟随自由区域底部边界。","the follow free area bottom border on Z axis":"对象Z轴上跟随自由区域底部边界","the camera distance of the object.":"对象的摄像机距离","the camera distance":"摄像机距离","the lateral distance offset of the object.":"对象的横向距离偏移","the lateral distance offset":"横向距离偏移","the ahead distance offset of the object.":"对象的前向距离偏移","the ahead distance offset":"前向距离偏移","the z offset of the object.":"对象的z偏移量。","the z offset":"z偏移量","the rotation angle offset of the object.":"对象的旋转角度偏移量。","the rotation angle offset":"旋转角度偏移量","the elevation angle offset of the object.":"对象的仰角偏移量。","the elevation angle offset":"仰角偏移量","the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.":"对象的目标摄像机旋转角度。设置此角度时,摄像机会跟随该值,而不是对象角度。","Targeted rotation angle":"目标旋转角度","the targeted camera rotation angle":"目标摄像机旋转角度","3D-like Flip for 2D Sprites":"用于二维精灵的三维翻转效果","Flip sprites with a 3D-like rotation effect.":"使用类似三维的旋转效果翻转精灵。","Flip a Sprite with a 3D effect.":"带有三维效果的精灵翻转。","3D Flip":"3D翻转","Flipping method":"翻转方法","Front animation name":"正面动画名称","Animation method":"动画方法","Back animation name":"背面动画名称","Start a flipping animation on the object.":"在对象上开始翻转动画。","Flip the object (deprecated)":"翻转对象(已弃用)","Flip _PARAM0_ over _PARAM2_ms":"将_PARAM0_在_PARAM2_毫秒内翻转","Duration (in milliseconds)":"持续时间(毫秒)","Start a flipping animation on the object. The X origin point must be set at the object center.":"在对象上开始翻转动画。X原点必须设置在对象中心。","Flip the object":"翻转对象","Flip _PARAM0_ over _PARAM2_ seconds":"将_PARAM0_在_PARAM2_秒内翻转","Jump to the end of the flipping animation.":"跳转到翻转动画的结束。","Jump to flipping end":"跳转至翻转结束","Jump to the end of _PARAM0_ flipping":"跳转到_PARAM0_翻转的结束","Checks if a flipping animation is currently playing.":"检查当前是否正在播放翻转动画。","Flipping is playing":"正在播放翻转","_PARAM0_ is flipping":"_PARAM0_正在翻转","Checks if the object is flipped or will be flipped.":"检查对象是否被翻转或将被翻转。","Is flipped":"被翻转","_PARAM0_ is flipped":"_PARAM0_ 被翻转","Flips the object to one specific side.":"将对象翻转到指定侧面。","Flip to a side (deprecated)":"翻转至一侧(已弃用)","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ms":"将_PARAM0_ 翻转到反面:在_PARAM2_ 毫秒内","Reverse side":"反面","Flips the object to one specific side. The X origin point must be set at the object center.":"将对象翻转到指定一侧。X原点必须设置在对象中心。","Flip to a side":"翻转至一侧","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ seconds":"将_PARAM0_翻转到反面:_PARAM2_在_PARAM3_秒内","Visually flipped":"视觉上翻转","_PARAM0_ is visually flipped":"_PARAM0_ 在视觉上翻转","Flip visually":"直观地翻转","Flip visually _PARAM0_: _PARAM2_":"直观地翻转_PARAM0_:_PARAM2_","Flipped":"已翻转","Resource bar (separated units)":"资源条(分开单位)","left anchor":"左锚点","Left anchor":"左锚","Left anchor of _PARAM1_":"_PARAM1_ 的左锚","Anchor":"锚","Right anchor":"右锚点","Right anchor of _PARAM1_":"_PARAM1_ 的右锚点","Unit width":"单位宽度","How much pixels to show for a value of 1.":"每一个值显示多少像素","the unit width of the object. How much pixels to show for a value of 1.":"对象的单位宽度。显示值为 1 时的像素数。","the unit width":"单位宽度","Update the bar width.":"更新条宽度。","Bar width":"条宽度","Update the bar width of _PARAM0_":"更新 _PARAM0_ 的条形宽度","Time formatting":"时间格式化","Converts seconds into standard time formats, such as HH:MM:SS.":"Converts seconds into standard time formats, such as HH:MM:SS.","Format time in seconds to HH:MM:SS.":"将秒数格式化为HH:MM:SS。","Format time in seconds to HH:MM:SS":"将秒数格式化为HH:MM:SS","Format time _PARAM1_ to HH:MM:SS in _PARAM2_":"将_PARAM1_的时间格式化为HH:MM:SS","Time, in seconds":"时间,以秒计","Format time in seconds to HH:MM:SS.000, including milliseconds.":"将秒数格式化为HH:MM:SS.000,包括毫秒。","Format time in seconds to HH:MM:SS.000":"将秒数格式化为HH:MM:SS.000","Timed Back and Forth Movement":"定时来回运动","This behavior moves objects back and forth for a chosen time or distance, vertically or horizontally.":"此行为将对象垂直或水平地来回移动一段时间或距离。","Move an object (e.g. enemy) for a chosen time or distance, then flip it and start over.":"在选择的时间或距离内移动一个对象(例如敌人),然后翻转并重新开始。","Move the object vertically (instead of horizontally)":"垂直移动物体(而不是水平移动)","Moving speed (in pixel/s)":"移动速度(以像素/秒为单位)","Moving distance (in pixels)":"移动距离(以像素为单位)","Moving maximum time (in seconds)":"移动最大时间(以秒为单位)","Distance start point":"距离起始点","position of the sprite at the previous frame":"上一帧中精灵的位置","check that time has elapsed":"检查是否已经过了时间","Toggle switch (for Shape Painter)":"切换开关(用于形状绘制器)","Use a shape-painter object to draw a toggle switch that users can click or touch.":"使用形状绘制器对象绘制用户可以单击或触摸的切换开关。","Radius of the thumb (px) Example: 10":"拇指的半径(像素)示例:10","Active thumb color string. Example: 24;119;211":"激活拇指的颜色字符串。示例:24;119;211","Opacity of the thumb. Example: 255":"拇指的不透明度。示例:255","Width of the track (pixels) Example: 20":"轨道的宽度(像素)示例:20","Height of the track (pixels) Example: 14":"轨道的高度(像素)示例:14","Color string for the track that is RIGHT of the thumb. Example: 150;150;150 (Leave blank to use thumb color)":"轨道的颜色字符串,位于拇指的右侧。示例:150;150;150(如果留空,则使用拇指的颜色)","Opacity of the track that is RIGHT of the thumb. Example: 255":"轨道的右侧拇指不透明度。示例:255","Color string for the track that is LEFT of the thumb. Example: 24;119;211 (Leave blank to use thumb color)":"轨道的颜色字符串,位于拇指的左侧。示例:24;119;211(如果留空,则使用拇指的颜色)","Opacity of the track that is LEFT of the thumb. Example: 128":"轨道的左侧拇指不透明度。示例:128","Size of halo when the mouse hovers and clicks on the thumb. Example: 24":"鼠标悬停在拇指上时的光晕尺寸。示例:24","Opacity of halo when the mouse hovers on the thumb. Example: 32":"鼠标悬停在拇指上时的光晕不透明度。示例:32","Opacity of the halo that appears when the toggle switch is pressed. Example: 64":"切换开关被按下时出现的光晕不透明度。示例:64","Number of pixels the thumb is from the left side of the track.":"拇指距离轨道左侧的像素数。","Disabled":"已禁用","State has been changed (used in ToggleChecked function)":"状态已更改(在ToggleChecked函数中使用)","Inactive thumb color string. Example: 255;255;255":"非激活拇指的颜色字符串。示例:255;255;255","Click or press has started on toggle switch":"单击或按下开关已启动","Offset (Y) of shadow on thumb. Positive numbers move shadow down, negative numbers move shadow up. Example: 4":"拇指上阴影的偏移量(Y)。正数向下移动阴影,负数则向上。示例:4","Offset (X) of shadow on thumb. Positive numbers move shadow right, negative numbers move shadow left. Example: 0":"拇指阴影的偏移(X)。正数向右移动阴影,负数向左移动阴影。例如:0","Opacity of shadow on thumb. Example: 32":"拇指阴影的不透明度。例如:32","Need redraw":"需要重绘","Was hovered":"曾经悬停","Change the track width.":"更改轨道宽度。","Change the track width of _PARAM0_ to _PARAM2_ pixels":"将_PARAM0_的轨道宽度更改为_PARAM2_像素","Change the track height.":"更改轨道高度。","Track height":"轨道高度","Change the track height of _PARAM0_ to _PARAM2_ pixels":"将_PARAM0_的轨道高度更改为_PARAM2_像素","Change the thumb opacity.":"更改拇指透明度。","Change the thumb opacity of _PARAM0_ to _PARAM2_":"将_PARAM0_的拇指透明度更改为_PARAM2_","Change the inactive track opacity.":"更改非活动状态轨道透明度。","Change the inactive track opacity of _PARAM0_ to _PARAM2_":"将_PARAM0_的非活动状态轨道透明度更改为_PARAM2_","Change the active track opacity.":"更改活动状态轨道透明度。","Change the active track opacity of _PARAM0_ to _PARAM2_":"将_PARAM0_的活动状态轨道透明度更改为_PARAM2_","Change the halo opacity when the thumb is pressed.":"当按下拇指时更改光晕透明度。","Change the halo opacity of _PARAM0_ to _PARAM2_":"将_PARAM0_的光晕透明度更改为_PARAM2_","Change opacity of the halo when the thumb is hovered.":"当拇指悬停时更改光晕透明度。","Change the offset on Y axis of the thumb shadow.":"更改拇指阴影在Y轴上的偏移量。","Thumb shadow offset on Y axis":"拇指阴影在Y轴上的偏移量","Change the offset on Y axis of the thumb shadow of _PARAM0_ to _PARAM2_":"将_PARAM0_的拇指阴影在Y轴上的偏移量更改为_PARAM2_","Y offset (pixels)":"Y轴偏移量(像素)","Change the offset on X axis of the thumb shadow.":"更改拇指阴影在X轴上的偏移量。","Thumb shadow offset on X axis":"拇指阴影在X轴上的偏移量","Change the offset on X axis of the thumb shadow of _PARAM0_ to _PARAM2_":"将_PARAM0_的拇指阴影在X轴上的偏移量更改为_PARAM2_","X offset (pixels)":"X轴偏移量(像素)","Change the thumb shadow opacity.":"更改拇指阴影透明度。","Thumb shadow opacity":"拇指阴影透明度","Change the thumb shadow opacity of _PARAM0_ to _PARAM2_":"将_PARAM0_的拇指阴影透明度更改为_PARAM2_","Opacity of shadow on thumb":"拇指阴影的不透明度","Change the thumb radius.":"更改拇指半径。","Thumb radius":"拇指半径","Change the thumb radius of _PARAM0_ to _PARAM2_ pixels":"将_PARAM0_的拇指半径更改为_PARAM2_像素","Change the halo radius.":"更改光晕半径。","Change the halo radius of _PARAM0_ to _PARAM2_ pixels":"将_PARAM0_的光环半径更改为_PARAM2_像素","Change the active track color (the part on the thumb left).":"更改活动轨道颜色(拇指左侧的部分)。","Change the active track color of _PARAM0_ to _PARAM2_":"将_PARAM0_的活动轨道颜色更改为_PARAM2_","Color of active track":"活动轨道的颜色","Change the inactive track color (the part on the thumb right).":"更改非活动轨道颜色(拇指右侧的部分)。","Change the inactive track color of _PARAM0_ to _PARAM2_":"将_PARAM0_的非活动轨道颜色更改为_PARAM2_","Color of inactive track":"非活动轨道的颜色","Change the thumb color (when unchecked).":"更改拇指颜色(未选中时)。","Thumb color (when unchecked)":"拇指颜色(未选中时)","Change the thumb color of _PARAM0_ (when unchecked) to _PARAM2_":"将_PARAM0_的拇指颜色(未选中时)更改为_PARAM2_","Change the thumb color (when checked).":"更改拇指颜色(选中时)。","Thumb color (when checked)":"拇指颜色(选中时)","Change the thumb color of _PARAM0_ (when checked) to _PARAM2_":"将_PARAM0_的拇指颜色(选中时)更改为_PARAM2_","If checked, change to unchecked. If unchecked, change to checked.":"如果选中,则更改为未选中。如果未选中,则更改为选中。","Toggle the switch":"切换开关","Change _PARAM0_ to opposite state (checked/unchecked)":"将_PARAM0_更改为相反状态(选中/未选中)","Disable (or enable) the toggle switch.":"禁用(或启用)切换开关。","Disable (or enable) the toggle switch":"禁用(或启用)切换开关","Disable _PARAM0_: _PARAM2_":"禁用_PARAM0_:_PARAM2_","Check (or uncheck) the toggle switch":"选中(或取消选中)切换开关","Set _PARAM0_ to checked: _PARAM2_":"将_PARAM0_设置为选中:_PARAM2_","Check if mouse is hovering over toggle switch.":"检查鼠标是否悬停在切换开关上。","Is mouse hovered over toggle switch?":"鼠标是否悬停在切换开关上?","Mouse is hovering over _PARAM0_":"鼠标是否悬停在_PARAM0_上","Track width.":"轨道宽度。","Track height.":"轨道高度。","Offset (Y) of shadow on thumb.":"拇指上阴影的偏移(Y)。","Offset (Y) of shadow on thumb":"拇指上阴影的偏移(Y)","Offset (X) of shadow on thumb.":"拇指上阴影的偏移(X)。","Offset (X) of shadow on thumb":"拇指上阴影的偏移(X)","Opacity of shadow on thumb.":"拇指上阴影的不透明度。","Thumb opacity.":"拇指不透明度。","Active track opacity.":"活动轨道不透明度。","Inactive track opacity.":"非活动轨道不透明度。","Halo opacity (pressed).":"光圈不透明度(已按下)。","Halo opacity (hover).":"光圈不透明度(悬停)。","Halo radius (pixels).":"光圈半径(像素)。","Active track color.":"活跃轨道颜色。","Inactive track color.":"非活跃轨道颜色。","Active thumb color.":"活跃拇指颜色。","Active thumb color":"活跃拇指颜色","Check if the toggle switch is disabled.":"检查切换开关是否已禁用。","Is disabled":"已禁用","Inactive thumb color.":"非活跃拇指颜色。","Inactive thumb color":"非活跃拇指颜色","Top-down movement animator":"Top-down movement animator","Change the animation according to the movement direction.":"Change the animation according to the movement direction.","Top-down movement":"Top-down movement","Scale animations according to speed":"Scale animations according to speed","Pause animations when objects stop":"Pause animations when objects stop","Animations must be called \"Walk0\", \"Walk1\"... for left, down...":"Animations must be called \"Walk0\", \"Walk1\"... for left, down...","Number of directions":"Number of directions","Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.":"Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.","Set to 90°, \"Walk0\" becomes the animation for down.":"Set to 90°, \"Walk0\" becomes the animation for down.","Update the animation according to the object direction.":"Update the animation according to the object direction.","Update animation":"Update animation","Update the animation of _PARAM0_":"Update the animation of _PARAM0_","the animation name of the object.":"the animation name of the object.","the animation name":"the animation name","Check if animations are paused when objects stop.":"Check if animations are paused when objects stop.","_PARAM0_ animations are paused when objects stop":"_PARAM0_ animations are paused when objects stop","Change whether animations are paused when objects stop.":"Change whether animations are paused when objects stop.","Pause animations of _PARAM0_ when stopped: _PARAM2_":"Pause animations of _PARAM0_ when stopped: _PARAM2_","IsPausingAnimation":"IsPausingAnimation","Check if animations are scaled according to speed.":"Check if animations are scaled according to speed.","_PARAM0_ animations are scaled according to speed":"_PARAM0_ animations are scaled according to speed","Change whether animations are scaled according to speed or not.":"Change whether animations are scaled according to speed or not.","Scale animations of _PARAM0_ according to speed: _PARAM2_":"Scale animations of _PARAM0_ according to speed: _PARAM2_","IsScalingAnimation":"IsScalingAnimation","Change the animation speed scale according to the object speed.":"Change the animation speed scale according to the object speed.","Animation speed scale":"Animation speed scale","Change the animation speed scale according to _PARAM0_ speed":"Change the animation speed scale according to _PARAM0_ speed","Pause the animation according to the object speed.":"Pause the animation according to the object speed.","Animation pause":"Animation pause","Pause the animation according to _PARAM0_ speed":"Pause the animation according to _PARAM0_ speed","Return the object movement direction.":"Return the object movement direction.","Return the difference between 2 directions.":"Return the difference between 2 directions.","Direction dirrerence":"Direction dirrerence","Other direction":"Other direction","Update the animation direction of the object.":"Update the animation direction of the object.","Update animation direction":"Update animation direction","Update the animation direction of _PARAM0_":"Update the animation direction of _PARAM0_","Update the animation name.":"Update the animation name.","Update animation name":"Update animation name","Update the animation name of _PARAM0_":"Update the animation name of _PARAM0_","Make object travel to random positions":"使对象移动到随机位置","Make object travel to random positions (with the pathfinding behavior).":"使对象移动到随机位置(使用路径查找行为)。","Make object travel to a random position around the object current position. The movement is initiated only when the object is not moving already (its Pathfinding behavior speed is 0). Move towards a specified angle, if desired.":"使物体在其当前位置周围的随机位置行进。只有当物体尚未移动时(其路径找寻行为的速度为0)才会启动移动。根据需要朝向指定的角度移动。","Make object travel to a random position, with optional direction":"使物体移动到随机位置,可选择方向","Move _PARAM1_ to random positions, where each stop is at least _PARAM3_px and at most _PARAM4_px from the current position. Move towards angle _PARAM5_ with a bias of _PARAM6_":"将_PARAM1_移动到随机位置,每次停止时距离当前位置至少_PARAM3_px,并且最多_PARAM4_px。朝着角度_PARAM5_移动,偏向_PARAM6_","Object that will be travelling (must have Pathfinding behavior)":"将要行进的物体(必须有路径找寻行为)","Pathfinding Behavior (required)":"路径找寻行为(必需)","Minimum distance between each position (Default: 100px)":"每个位置之间的最小距离(默认:100px)","Maximum distance between each position (Default: 200px)":"每个位置之间的最大距离(默认:200px)","Direction (in degrees) the object will move towards (Range: 0-360)":"物体将朝向的方向(范围:0-360°)","Direction bias (Range: 0-1)":"方向偏向(范围:0-1)","For example: \"0\" picks a completely random direction, \"0.5\" will select a direction within the half-circle that faces the specified direction, and \"1\" simply uses the specified direction.":"例如:“0”选择完全随机的方向,“0.5”将选择朝向指定方向的半圆内的方向,“1”直接使用指定方向。","Turret 2D movement":"炮塔 2D 移动","A turret movement with customizable speed, acceleration and stop angles.":"带有可定制速度、加速度和停止角度的炮台移动。","Turret movement":"炮台移动","Maximum rotation speed (in degrees per second)":"最大旋转速度(每秒度数)","Maximum angle (use the same value for min and max to set no constraint)":"最大角度(使用相同的数值作为最小值和最大值以未加限制)","Minimum angle (use the same value for min and max to set no constraint)":"最小角度(使用相同的数值作为最小值和最大值以未加限制)","Aiming angle property":"瞄准角度属性","Must move clockwise":"必须顺时针移动","Must move counter-clockwise":"必须逆时针移动","Has moved":"已移动","Target angle (MoveToward)":"目标角度(MoveToward)","Origin angle: the farest angle from AngleMin and AngleMax":"原始角度:最远离AngleMin和AngleMax的角度","Check if the turret is moving.":"检查炮塔是否移动。","Move clockwise.":"顺时针移动。","Move clockwise":"顺时针移动","Move _PARAM0_ clockwise":"顺时针移动_PARAM0_","Move counter-clockwise.":"逆时针移动。","Move counter-clockwise":"逆时针移动","Move _PARAM0_ counter-clockwise":"逆时针移动_PARAM0_","Set angle toward a position.":"朝向某位置。","Set aiming angle toward a position":"朝向某位置的瞄准角度","Set the aiming angle of _PARAM0_ toward _PARAM2_;_PARAM3_":"将_PARAM0_的瞄准角度朝向_PARAM2_;_PARAM3_","Move toward a position.":"朝向某位置移动。","Move _PARAM0_ toward _PARAM2_; _PARAM3_ within a _PARAM4_° margin":"将_PARAM0_朝向_PARAM2_; _PARAM3_移动,在_PARAM4_°边缘内","Angle margin":"角度边缘","Change the aiming angle.":"改变瞄准角度。","Aiming angle":"瞄准角度","Change the aiming angle of _PARAM0_ to _PARAM2_°":"将_PARAM0_的瞄准角度改变为_PARAM2_°","Aiming angle (between 0° and 360° if no stop angle are set).":"瞄准角度(如果未设置停止角度,则为0°至360°之间)。","Tween into view":"移入视图的逐渐显示","Tween objects into position from off screen.":"从屏幕外将对象移动到位置。","Motion":"运动","Leave this value at 0 to move the object in from outside of the screen.":"将此值保留为 0 以使对象从屏幕外移动。","Tween in the object at creation":"在创建时移动对象","Moving in easing":"移动时的缓动效果","Moving out easing":"移动时的缓出效果","Delete the object when the \"tween out of view\" action has finished":"在“移动出视图”操作完成后删除对象","Fade in/out the object":"淡入/淡出对象","The X position at the end of fade in":"淡入结束时的 X 位置","The Y position at the end of fade in":"淡入结束时的 Y 位置","Objects with opacity":"具有透明度的对象","Move the object":"移动对象","Delay":"延迟","Fade in easing":"淡入的缓动效果","Fade out easing":"淡出的缓动效果","The X position at the beginning of fade in":"淡入开始时的 X 位置","The Y position at the beginning of fade in":"淡入开始时的 Y 位置","Return the X position at the beginning of the fade-in.":"返回淡入开始时的 X 位置。","Return the Y position at the beginning of the fade-in.":"返回淡入开始时的 Y 位置。","Tween the object to its set starting position.":"将对象缓动到其设置的起始位置。","Tween _PARAM0_ into view":"将 _PARAM0_ 缓动到视图中","Tween the object to its off screen position.":"将对象缓动到其屏幕外位置。","Tween out of view":"缓动出视图","Tween _PARAM0_ out of view":"将 _PARAM0_ 缓动出视图","Check if the object finished tweening into view.":"检查对象是否完成缓动入视图。","Tweened into view":"缓动入视图","_PARAM0_ finished tweening into view":"_PARAM0_ 完成缓动入视图","Check if the object finished tweened out of view.":"检查对象是否完成缓动出视图。","Tweened out of view":"缓动出视图","_PARAM0_ finished tweening out of view":"_PARAM0_ 完成缓动出视图","Set whether to delete the object when the \"tween out of view\" action has finished.":"设置在“缓动出视图”操作完成时是否删除对象。","Delete after tween out":"淡出后删除","Should delete _PARAM0_ when the \"tween out of view\" action has finished: _PARAM2_":"在“缓动出视图”操作完成时是否应删除 _PARAM0_: _PARAM2_","Should delete the object when the \"tween out of view\" action has finished":"在“缓动出视图”操作完成时是否应删除对象","Two choices dialog boxes":"两选项对话框","A dialog box with buttons to let users make a choice.":"带有按钮的对话框,让用户做出选择。","A dialog box showing two options.":"显示两个选项的对话框。","Two choices dialog box":"两个选择对话框","Cancel with Escape key":"使用Escape键取消","Enable or disable the escape key to close the dialog.":"启用或禁用Escape键以关闭对话框。","Label for the \"Yes\" button":"“是”按钮的标签","This is the button with identifier 0.":"这是标识为0的按钮。","Label for the \"No\" button":"“否”按钮的标签","This is the button with identifier 1.":"这是标识为1的按钮。","Sound at hovering":"悬停时的声音","Check if the \"Yes\" button of the dialog was selected.":"检查对话框的\"是\"按钮是否已选择。","\"Yes\" button is clicked":"\"是\"按钮已点击","\"Yes\" button of _PARAM0_ is clicked":"_PARAM0_的\"是\"按钮已点击","Check if the \"No\" button of the dialog was selected.":"检查对话框的\"否\"按钮是否已选择。","\"No\" button is clicked":"\"否\"按钮已点击","\"No\" button of _PARAM0_ is clicked":"_PARAM0_的\"否\"按钮已点击","the highlighted button.":"高亮按钮。","Highlighted button":"高亮按钮","the highlighted button":"高亮的按钮","the text shown by the dialog.":"对话框显示的文本。","Text message":"文本消息","the text":"该文本","Webpage URL tools (Web browser)":"网页URL工具(Web浏览器)","Allows to read URL where a web-game is hosted and manipulate URL strings.":"允许读取托管网页游戏的 URL 并操纵 URL 字符串。","Gets the URL of the current game page.":"获取当前游戏页面的URL。","Get the URL of the web page":"获取网页的URL","Reloads the current web page.":"重新加载当前网页。","Reload the web page":"重新加载网页","Reload the current page":"重新加载当前页面","Loads another page in place of the current one.":"加载替换当前页面的另一个页面。","Redirect to another page":"重定向到另一个页面","Redirect to _PARAM1_":"重定向到_PARAM1_","URL to redirect to":"重定向的URL","Get an attribute from a URL.":"从URL获取属性。","Get URL attribute":"获取URL属性","The URL to get the attribute from":"要获取属性的URL","The attribute to get":"要获取的属性","Gets a parameter of a URL query string.":"获取URL查询字符串的参数。","Get a parameter of a URL query string":"获取URL查询字符串的参数","The URL to get a query string parameter from":"要获取查询字符串参数的URL","The query string parameter to get":"要获取的查询字符串参数","Updates a specific part of a URL.":"更新URL的特定部分。","Update a URL attribute":"更新URL属性","The URL to change":"要更改的URL","The attribute to update":"要更新的属性","The new value of this attribute":"此属性的新值","Sets or replaces a query string parameter of a URL.":"设置或更换URL的查询字符串参数。","Change a get parameter of a URL":"更改URL的查询参数","The query string parameter to update":"要更新的查询参数","The new value of the query string parameter":"查询字符串参数的新值","Removes a query string parameter from an URL.":"从URL删除查询字符串参数。","Remove a get parameter of an URL":"从URL删除查询参数","The query string parameter to remove":"要删除的查询字符串参数","Unique Identifiers":"唯一标识符","A collection of UID generation expressions.":"UID生成表达式的集合。","Generates a unique identifier with the UUIDv4 pattern.":"使用UUIDv4模式生成唯一标识符。","Generate a UUIDv4":"生成UUIDv4","Generates a unique identifier with the incremented integer pattern.":"使用递增整数模式生成唯一标识符。","Generate an incremented integer UID":"生成递增整数UID","Unicode":"Unicode","Provides conversion tools for Ascii and Unicode characters.":"为Ascii和Unicode字符提供转换工具。","Reverses the unicode of a string with a base.":"使用基数反转字符串的Unicode。","Reverse the unicode of a string":"反转字符串的Unicode","String to reverse":"要反转的字符串","Base of the reverse (Default: 2)":"反转的基数(默认值:2)","Range of unicode characters (Put 16 here to support the most characters if you put 2 in the base)":"Unicode字符范围(如果在基数中放2,则在此处放16以支持最多字符)","Converts a unicode representation into String with a base.":"将Unicode表示转换为带有基数的字符串。","Unicode to string":"Unicode转字符串","The unicode to convert to String":"要转换为字符串的Unicode","Base":"基数","Seperator text (Optional)":"分隔文本(可选)","Converts a string into unicode representation with a base.":"将字符串转换为具有基数的Unicode表示。","String to unicode conversion":"字符串到Unicode的转换","The string to convert to unicode":"要转换为Unicode的字符串","Values of multiple objects":"多个对象的值","Values of picked object instances (including position, size, force and angle).":"选择的对象实例的值(包括位置,大小,力和角度)。","Minimum X position of picked object instances (using AABB of objects).":"选定对象实例的X位置的最小值(使用对象的AABB)。","Minimum X position of picked object instances":"选定对象实例的最小X位置","objects":"对象","Maximum X position of picked object instances (using AABB of objects).":"选定对象实例的最大X位置(使用对象的AABB)。","Maximum X position of picked object instances":"选定对象实例的最大X位置","Minimum Y position of picked object instances (using AABB of objects).":"选定对象实例的最小Y位置(使用对象的AABB)。","Minimum Y position of picked object instances":"选定对象实例的最小Y位置","Maximum Y position of picked object instances (using AABB of objects).":"选定对象实例的最大Y位置(使用对象的AABB)。","Maximum Y position of picked object instances":"选定对象实例的最大Y位置","Minimum Z order of picked object instances.":"选定对象实例的最小Z顺序。","Minimum Z order of picked object instances":"选定对象实例的最小Z顺序","Maximum Z order of picked object instances.":"选定对象实例的最大Z顺序。","Maximum Z order of picked object instances":"选定对象实例的最大Z顺序","Average Z order of picked object instances.":"选定对象实例的平均Z顺序。","Average Z order of picked object instances":"选定对象实例的平均Z顺序","X center point (absolute) of picked object instances.":"选定对象实例的X中心点(绝对值)。","X center point (absolute) of picked object instances":"选定对象实例的X中心点(绝对值)。","Objects":"对象","Objects that will be used to calculate their center point":"要用于计算其中心点的对象","Y center point (absolute) of picked object instances.":"选定对象实例的Y中心点(绝对值)。","Y center point (absolute) of picked object instances":"选定对象实例的Y中心点(绝对值)。","X center point (average) of picked object instances.":"选定对象实例的X中心点(平均值)。","X center point (average) of picked object instances":"选定对象实例的X中心点(平均值)。","Y center point (average) of picked object instances.":"选定对象实例的Y中心点(平均值)。","Y center point (average) of picked object instances":"选定对象实例的Y中心点(平均值)。","Min object height of picked object instances.":"选择的对象实例的最小对象高度。","Min object height of picked object instances":"选择的对象实例的最小对象高度","Max object height of picked object instances.":"选择的对象实例的最大对象高度。","Max object height of picked object instances":"选择的对象实例的最大对象高度","Average height of picked object instances.":"选择的对象实例的平均高度。","Average height of picked object instances":"选择的对象实例的平均高度","Min object width of picked object instances.":"选择的对象实例的最小对象宽度。","Min object width of picked object instances":"选择的对象实例的最小对象宽度","Max object width of picked object instances.":"选择的对象实例的最大对象宽度。","Max object width of picked object instances":"选择的对象实例的最大对象宽度","Average width of picked object instances.":"选择的对象实例的平均宽度。","Average width of picked object instances":"选择的对象实例的平均宽度","Average horizontal force (X) of picked object instances.":"选择的对象实例的平均水平力(X)。","Average horizontal force (X) of picked object instances":"选择的对象实例的平均水平力(X)","Average vertical force (Y) of picked object instances.":"选择的对象实例的平均垂直力(Y)。","Average vertical force (Y) of picked object instances":"选择的对象实例的平均垂直力(Y)","Average angle of rotation of picked object instances.":"选择的对象实例的平均旋转角度。","Average angle of rotation of picked object instances":"选择的对象实例的平均旋转角度","WebSocket client":"WebSocket客户端","A WebSocket client for fast client-server networking.":"用于快速客户端-服务器网络的WebSocket客户端。","Triggers if the client is currently connecting to the WebSocket server.":"如果客户端当前正在连接到WebSocket服务器,则触发。","Connecting to a server":"连接到服务器","Connecting to the server":"连接到服务器","Triggers if the client is connected to a WebSocket server.":"如果客户端已连接到WebSocket服务器,则触发。","Connected to a server":"已连接到服务器","Connected to the server":"已连接到服务器","Triggers if the connection to a WebSocket server was closed.":"如果连接到WebSocket服务器被关闭,则触发。","Connection to a server was closed":"连接到服务器的连接被关闭","Connection to the server closed":"连接到服务器的连接关闭","Connects to a WebSocket server.":"连接到WebSocket服务器。","Connect to server":"连接到服务器","Connect to WebSocket server at _PARAM1_":"连接到WebSocket服务器在_PARAM1_","The server address":"服务器地址","Disconnects from the current WebSocket server.":"断开与当前WebSocket服务器的连接。","Disconnect from server":"与服务器断开连接","Disconnect from server (reason: _PARAM1_)":"从服务器断开连接(原因:_PARAM1_)","The reason for disconnection":"断开连接的原因","Triggers when the server has sent the client some data.":"服务器发送数据给客户端时触发。","An event was received":"已接收到一个事件","Data received from server":"从服务器接收到的数据","Returns the piece of data from the server that is currently being processed.":"正在处理服务器当前正在处理的数据片段。","Data from server":"来自服务器的数据","Dismisses an event after processing it to allow processing the next one without waiting for the next frame.":"处理完一个事件后,允许不等待下一帧来处理下一个事件。","Mark as processed":"标记为已处理","Mark current event as completed":"将当前事件标记为已完成","Sends a string to the server.":"向服务器发送一个字符串。","Send data to the server":"向服务器发送数据","Send _PARAM1_ to the server":"将 _PARAM1_ 发送到服务器","The data to send to the server":"要发送到服务器的数据","Triggers when a WebSocket error has occurred.":"WebSocket 发生错误时触发。","An error occurred":"发生了一个错误事件","WebSocket error has occurred":"WebSocket 发生错误","Gets the last error that occurred.":"获取上次发生的错误。","YSort":"YSort","Create an illusion of depth by setting the Z-order based on the Y position of the object. Useful for isometric games, 2D games with a \"Top-Down\" view, RPG...":"通过根据对象的Y位置设置Z顺序创建深度的错觉。适用于等角游戏,带有“俯视”视图的2D游戏,RPG……","Set the depth (Z-order) of the instance to the value of its Y position in the scene, creating an illusion of depth. The origin point of the object is used to determine the Z-order.":"将实例的深度(Z 轴顺序)设置为场景中其 Y 位置的值,从而营造出深度效果。对象的原点用于确定 Z 轴顺序。","Window focus, position, size, always-on-top, minimize/maximize, desktop pet controls, content protection. Desktop only.":"窗口焦点、位置、大小、置顶、最小化/最大化、桌宠控制、内容保护。仅桌面端。","Show in taskbar":"在任务栏中显示","Shows or hides the window in the operating system taskbar.":"在操作系统任务栏中显示或隐藏窗口。","Show window in taskbar: _PARAM0_":"在任务栏中显示窗口:_PARAM0_","Show in taskbar?":"在任务栏中显示?","Ignore mouse events":"忽略鼠标事件","Makes the window ignore mouse events so clicks can go through to windows behind it.":"让窗口忽略鼠标事件,使点击可以穿透到后面的窗口。","Ignore mouse events: _PARAM0_, forward mouse movement: _PARAM1_":"忽略鼠标事件:_PARAM0_,转发鼠标移动:_PARAM1_","Ignore mouse events?":"忽略鼠标事件?","Forward mouse movement events to the game?":"将鼠标移动事件转发给游戏?","Window background color":"窗口背景颜色","Changes the native window background color. Use #00000000 for a transparent window background.":"更改原生窗口背景颜色。使用 #00000000 可得到透明窗口背景。","Set the native window background color to _PARAM0_":"将原生窗口背景颜色设置为 _PARAM0_","Background color":"背景颜色","Show menu bar":"显示菜单栏","Shows or hides the native menu bar of the window.":"显示或隐藏窗口的原生菜单栏。","Show window menu bar: _PARAM0_":"显示窗口菜单栏:_PARAM0_","Show menu bar?":"显示菜单栏?","Dock window to screen work area":"将窗口停靠到屏幕工作区","Moves the window to a corner, the center, or custom coordinates on the current screen work area.":"将窗口移动到当前屏幕工作区的角落、中心或自定义坐标。","Dock the window to _PARAM0_ with offset _PARAM1_;_PARAM2_ and custom position _PARAM3_;_PARAM4_":"将窗口停靠到 _PARAM0_,偏移 _PARAM1_;_PARAM2_,自定义位置 _PARAM3_;_PARAM4_","Dock position":"停靠位置","Corner X offset":"角落 X 偏移","Corner Y offset":"角落 Y 偏移","Custom X position":"自定义 X 位置","Custom Y position":"自定义 Y 位置","Apply desktop pet window mode":"应用桌宠窗口模式","Applies common desktop pet window settings: transparent native background, no shadow, optional always-on-top, taskbar hiding, mouse click-through, menu bar hiding, and docking.":"应用常见桌宠窗口设置:透明原生背景、无阴影、可选置顶、隐藏任务栏、鼠标点击穿透、隐藏菜单栏和停靠。","Apply desktop pet window mode at _PARAM0_ with offset _PARAM1_;_PARAM2_, custom position _PARAM3_;_PARAM4_, always on top: _PARAM5_, show in taskbar: _PARAM6_, click-through: _PARAM7_, show menu bar: _PARAM8_":"在 _PARAM0_ 应用桌宠窗口模式,偏移 _PARAM1_;_PARAM2_,自定义位置 _PARAM3_;_PARAM4_,置顶:_PARAM5_,任务栏显示:_PARAM6_,点击穿透:_PARAM7_,显示菜单栏:_PARAM8_","Always on top?":"置顶?","Click-through?":"点击穿透?","Screen work area X position":"屏幕工作区 X 位置","Returns the X position of the current screen work area.":"返回当前屏幕工作区的 X 位置。","Screen work area Y position":"屏幕工作区 Y 位置","Returns the Y position of the current screen work area.":"返回当前屏幕工作区的 Y 位置。","Screen work area width":"屏幕工作区宽度","Returns the width of the current screen work area.":"返回当前屏幕工作区的宽度。","Screen work area height":"屏幕工作区高度","Returns the height of the current screen work area.":"返回当前屏幕工作区的高度。","A number between 0 (fully transparent) and 1 (fully opaque).":"0(完全透明)到 1(完全不透明)之间的数字。","The level is like a layer for operating system windows instead of a layer in GDevelop. The later the position in the list, the higher the window level. When always-on-top is turned off, the level will be set to normal. From floating to status (included), the window will be below the macOS Dock and below the Windows taskbar. From pop-up-menu and higher, the window will be shown above the macOS Dock and the Windows taskbar. Linux ignores this parameter.":"该层级类似 GDevelop 中的图层,但作用于操作系统窗口。列表越靠后,窗口层级越高。禁用置顶时,层级会设为 normal。从 floating 到 status(含)会让窗口位于 macOS Dock 下方、Windows 任务栏下方。从 pop-up-menu 开始,窗口会显示在 macOS Dock 和 Windows 任务栏上方。Linux 会忽略此参数。","Bottom right":"右下角","Top right":"右上角","Bottom left":"左下角","Top left":"左上角","Center":"居中","Custom":"自定义","Normal":"普通","Floating":"浮动","Torn-off menu":"分离菜单","Modal panel":"模态面板","Main menu":"主菜单","Status":"状态","Pop-up menu":"弹出菜单","Screen saver":"屏幕保护","The level is like a layer in GDevelop but for the OS. The further down the list, the higher it will be. When disabling always on top, the level will be set to normal. From \"floating\" to \"status\" included, the window is placed below the Dock on macOS and below the taskbar on Windows. Starting from \"pop-up-menu\", it is shown above the Dock on macOS and above the taskbar on Windows. This parameter is ignored on linux.":"该层级类似 GDevelop 中的图层,但作用于操作系统窗口。列表越靠后,窗口层级越高。禁用置顶时,层级会设为 normal。从 floating 到 status(含)会让窗口位于 macOS Dock 下方、Windows 任务栏下方。从 pop-up-menu 开始,窗口会显示在 macOS Dock 和 Windows 任务栏上方。Linux 会忽略此参数。","Frameless preview window":"无边框预览窗口","Requests the local preview window to be created without the native window frame.":"请求本地预览窗口在创建时不使用原生窗口边框。","Enable frameless preview window: _PARAM0_":"启用无边框预览窗口:_PARAM0_","Enable frameless preview window?":"启用无边框预览窗口?","Frameless game window":"无边框游戏窗口","Requests the preview and exported desktop game windows to be created without the native window frame.":"请求预览和导出的桌面游戏窗口在创建时不使用原生窗口边框。","Enable frameless game window: _PARAM0_":"启用无边框游戏窗口:_PARAM0_","Enable frameless game window?":"启用无边框游戏窗口?"}}; \ No newline at end of file diff --git a/newIDE/app/src/locales/zh_CN/messages.js b/newIDE/app/src/locales/zh_CN/messages.js index 521c63512cc4..96ba4ed28067 100644 --- a/newIDE/app/src/locales/zh_CN/messages.js +++ b/newIDE/app/src/locales/zh_CN/messages.js @@ -1 +1 @@ -/* eslint-disable */module.exports={languageData:{"plurals":function(n,ord){if(ord)return"other";return"other"}},messages:{"\"{0}\" will be the new build of this game published on gd.games. Continue?":function(a){return["\u201C",a("0"),"\u201D\u66F4\u65B0\u6E38\u620F\u5230 gd.games\uFF0C\u662F\u5426\u7EE7\u7EED\uFF1F"]},"\"{0}\" will be unpublished on gd.games. Continue?":function(a){return[a("0"),"\u5C06\u5728 gd.games\u4E0A\u53D6\u6D88\u53D1\u5E03\u3002\u662F\u5426\u7EE7\u7EED\uFF1F"]},"% of parent":"\u5360\u603B\u4F53\u7684\u767E\u5206\u6BD4","% of total":"\u5360\u603B\u91CF\u7684\u767E\u5206\u6BD4","(Events)":"\uFF08\u4E8B\u4EF6\uFF09","(Object)":"(\u5BF9\u8C61)","(already installed in the project)":"\uFF08\u5DF2\u5728\u9879\u76EE\u4E2D\u5B89\u88C5\uFF09","(default order)":"(\u9ED8\u8BA4\u987A\u5E8F)","(deleted)":"(\u5DF2\u5220\u9664)","(install it from the Project Manager)":"\uFF08\u4ECE\u9879\u76EE\u7BA1\u7406\u5668\u5B89\u88C5\uFF09","(or paste actions)":"(\u6216\u7C98\u8D34\u52A8\u4F5C)","(or paste conditions)":"(\u6216\u7C98\u8D34\u6761\u4EF6)","(yet!)":"(\u5C1A\u672A\uFF01)","* (multiply by)":"* ( \u4E58\u4EE5 )","+ (add)":"+\uFF08\u52A0\u4E0A\uFF09","+ {0} tag(s)":function(a){return["+ ",a("0")," \u6807\u7B7E(s)"]},", objects /*{parameterObjects}*/":function(a){return[", \u5BF9\u8C61 /*",a("parameterObjects"),"*/"]},"- (subtract)":"- (\u51CF\u53BB\uFF09 ","/ (divide by)":"/ (\u9664\u4EE5)","/* Click here to choose objects to pass to JavaScript */":"/* \u70B9\u6211\u9009\u62E9\u5BF9\u8C61\u4F20\u7ED9 JavaScript */","0,date":"0,\u65E5\u671F","0,date,date0":"0,date,date0","0,number,number0":"0,\u6570\u5B57,\u6570\u5B570","1 child":"1 \u4E2A\u5B50\u9879","1 day ago":"1 \u5929\u524D","1 hour ago":"1 \u5C0F\u65F6\u524D","1 match":"1\u573A\u6BD4\u8D5B","1 minute":"1 \u5206\u949F","1 month":"1 \u4E2A\u6708","1 new feedback":"1 \u6761\u65B0\u53CD\u9988","1 review":"1 \u6761\u8BC4\u8BBA","1) Create a Certificate Signing Request and a Certificate":"1) \u521B\u5EFA\u8BC1\u4E66\u7B7E\u540D\u8BF7\u6C42\u548C\u8BC1\u4E66","100% (Default)":"100% (\u9ED8\u8BA4)","100+ exports created":"\u5DF2\u521B\u5EFA 100+ \u5BFC\u51FA","10th":"\u7B2C\u5341","1st":"\u7B2C\u4E00","2 previews in 2 windows":"\u5728 2 \u4E2A\u7A97\u53E3\u4E2D\u8FDB\u884C 2 \u4E2A\u9884\u89C8","2) Upload the Certificate generated by Apple":"2) \u4E0A\u4F20 Apple \u751F\u6210\u7684\u8BC1\u4E66","200%":"200%","2D effects":"\u4E8C\u7EF4\u6548\u679C","2D object":"2D \u5BF9\u8C61","2D objects can't be edited when in 3D mode":"\u5728 3D \u6A21\u5F0F\u4E0B\u65E0\u6CD5\u7F16\u8F91 2D \u5BF9\u8C61","2nd":"\u7B2C\u4E8C","3 previews in 3 windows":"\u57283\u4E2A\u7A97\u53E3\u4E2D\u8FDB\u884C3\u6B21\u9884\u89C8","3) Upload one or more Mobile Provisioning Profiles":"3) \u4E0A\u4F20\u4E00\u4E2A\u6216\u591A\u4E2A\u79FB\u52A8\u914D\u7F6E\u6587\u4EF6","3-part tutorial to creating and publishing a game from scratch.":"\u4ECE\u96F6\u5F00\u59CB\u521B\u5EFA\u548C\u53D1\u5E03\u6E38\u620F\u76843\u90E8\u66F2\u6559\u7A0B\u3002","300%":"300%","3D effects":"3D \u6548\u679C","3D model":"\u4E09\u7EF4\u6A21\u578B","3D models":"3D \u6A21\u578B","3D object":"3D \u5BF9\u8C61","3D platforms":"3D \u5E73\u53F0","3D settings":"3D \u8BBE\u7F6E","3D, real-time editor (new)":"3D\uFF0C\u5B9E\u65F6\u7F16\u8F91\u5668\uFF08\u65B0\uFF09","3rd":"\u7B2C\u4E09","4 previews in 4 windows":"\u5728 4 \u4E2A\u7A97\u53E3\u4E2D\u8FDB\u884C 4 \u4E2A\u9884\u89C8","400%":"400%","4th":"\u7B2C\u56DB","500%":"500%","5th":"\u7B2C\u4E94","600%":"600%","6th":"\u7B2C\u516D","700%":"700%","7th":"\u7B2C\u4E03","800%":"800%","8th":"\u7B2C\u516B","9th":"\u7B2C\u4E5D",":":":","< (less than)":"<\uFF08\u5C0F\u4E8E\uFF09","<0>For every child in<1><2/>{0}, store the child in variable<3><4/>{1}, the child name in<5><6/>{2}and do:":function(a){return["<0>\u5BF9\u4E8E<1><2/>",a("0"),"\u4E2D\u7684\u6BCF\u4E2A\u5B50\u9879\uFF0C\u5C06\u5B50\u9879\u4FDD\u5B58\u5728\u53D8\u91CF\u4E2D<3><4/>",a("1"),"\uFF0C\u5B50\u9879\u7684\u540D\u5B57\u5728<5><6/>",a("2"),"\uFF0C\u5E76\u8FDB\u884C\uFF1A"]},"<0>Share your game and start collecting data from your players to better understand them.":"<0>\u5206\u4EAB\u4F60\u7684\u6E38\u620F\u5E76\u5F00\u59CB\u4ECE\u4F60\u7684\u73A9\u5BB6\u6536\u96C6\u6570\u636E\u4EE5\u66F4\u597D\u5730\u4E86\u89E3\u4ED6\u4EEC\u3002","<0>{0} set to {1}.":function(a){return["<0>",a("0")," \u8BBE\u7F6E\u4E3A ",a("1"),"\u3002"]},"":"<\u521B\u5EFA\u65B0\u7684\u6269\u5C55\u540D>","":"<\u8F93\u5165\u7EC4\u540D\u79F0>","":"< \u8F93\u5165\u5916\u90E8\u4E8B\u4EF6\u7684\u540D\u79F0 >"," (optional)":"":"":"<选择变量>"," (可选)","","= (equal to)":"= (等于)","= (set to)":"= (设为)","> (greater than)":"> (大于)","A condition that can be used in other events sheet. You can define the condition parameters: objects, texts, numbers, layers, etc...":"可以在其他事件表中使用的条件。您可以定义条件参数:对象,文本,数字,图层等......","A condition that can be used on objects with the behavior. You can define the condition parameters: objects, texts, numbers, layers, etc...":"可以在具有行为的对象上使用的条件。您可以定义条件参数:对象,文本,数字,图层等......","A condition that can be used on the object. You can define the condition parameters: objects, texts, numbers, layers, etc...":"可以在对象上使用的条件。您可以定义条件参数:对象、文本、数字、图层等...","A critical error occurred in the {componentTitle}.":function(a){return[a("componentTitle")," \u4E2D\u53D1\u751F\u4E25\u91CD\u9519\u8BEF\u3002"]},"A functioning save has been found!":"已找到一个有效的存档!","A game to publish":"要发布的游戏","A global object with this name already exists. Please change the group name before setting it as a global group":"具有此名称的全局对象已经存在。请在将其设置为全局组之前更改组名称。","A global object with this name already exists. Please change the object name before setting it as a global object":"此名称的全局对象已经存在。请在将其设置为全局对象之前更改对象名称","A lighting layer was created. Lights will be placed on it automatically. You can change the ambient light color in the properties of this layer":"已创建一个照明图层。灯光将自动放置在它上。您可以在此图层属性中更改环境光。","A link or file will be created but the game will not be registered.":"一个链接或文件将被创建,但游戏将不会被注册。","A new physics engine (Physics Engine 2.0) is now available. You should prefer using it for new game. For existing games, note that the two behaviors are not compatible, so you should only use one of them with your objects.":"现在可以使用一个新的物理引擎(物理引擎2.0)。您应该更喜欢使用它来做新的游戏。对于现有游戏,请注意这两个行为是不兼容的,因此您只能为您的对象使用其中一个行为。","A new secure window will open to complete the purchase.":"一个新的安全窗口将打开以完成购买。","A new update is available!":"有新更新可用!","A new update is being downloaded...":"正在下载新更新...","A new update will be installed after you quit and relaunch GDevelop":"退出并重新启动 GDevelop 后将安装新的更新","A new window":"一个新窗口","A scale under 1 on a Bitmap text object can downgrade the quality text, prefer to remake a bitmap font smaller in the external bmFont editor.":"在位图文本对象上,低于 1 的缩放尺度会降低文本的质量。请最好在如 bmFont 的外部编辑器中把位图字体重新制作得小一些。","A student account cannot be an admin of your team.":"学生账户不能成为您团队的管理员。","A temporary image to help you visualize the shape/polygon":"一张有助于你理解形状或多边形的图片","AI Chat History":"AI 聊天历史","API Issuer ID: {0}":function(a){return["API \u9881\u53D1\u8005 ID\uFF1A",a("0")]},"API Issuer given by Apple":"Apple 提供的 API 发行者","API key given by Apple":"Apple 提供的 API 密钥","API key: {0}":function(a){return["API \u5BC6\u94A5\uFF1A",a("0")]},"APK (for testing on device or sharing outside Google Play)":"APK (用于在设备上测试或在谷歌播放外面分享)","Abandon":"弃用","Abort":"中止","About GDevelop":"关于GDevelop","About dialog":"对话框“关于”","About education plan":"关于教育计划","Accept":"接受","Access GDevelop’s resources for teaching game development and promote careers in technology.":"访问 GDevelop 的资源来教授游戏开发和促进技术职业。","Access project history, name saves, restore older versions.<0/>Get a subscription to enable this feature.":"访问项目历史记录、名称保存、还原旧版本。<0/>获取订阅以启用此功能。","Access public profile":"访问公共配置文件","Achievements":"成就","Action":"执行","Action with operator":"操作员操作","Actions":"动作","Activate":"激活","Activate Later":"稍后激活","Activate Now":"立即激活","Activate my subscription":"激活我的订阅","Activate your subscription code":"激活您的订阅代码","Activate {productName}":function(a){return["\u6FC0\u6D3B ",a("productName")]},"Activated":"激活","Activating...":"激活中...","Active":"已启用","Active until {0}":function(a){return["\u6709\u6548\u76F4\u81F3 ",a("0")]},"Active, we will get in touch to get the campaign up!":"积极主动,我们将与您联系以开展活动!","Ad revenue sharing off":"广告收入分成关闭","Ad revenue sharing on":"广告收入分成","Adapt automatically":"自动适应","Adapt collision mask?":"适应碰撞遮罩?","Adapt events in scene <0>{scene_name} (\"{placementHint}\").":function(a){return["\u5728\u573A\u666F <0>",a("scene_name")," \u4E2D\u8C03\u6574\u4E8B\u4EF6\uFF08\"",a("placementHint"),"\"\uFF09\u3002"]},"Add":"添加","Add 2D lighting layer":"添加照明图层","Add <0>{object_name} to scene <1>{scene_name}.":function(a){return["\u5C06 <0>",a("object_name")," \u6DFB\u52A0\u5230\u573A\u666F <1>",a("scene_name"),"\u3002"]},"Add Ordering":"添加排序","Add a 2D effect":"添加 2D 效果","Add a 3D effect":"添加 3D 效果","Add a Long Description":"添加一个长描述","Add a New Extension":"添加一个新的扩展","Add a behavior":"添加一个行为","Add a certificate/profile first":"首先添加证书/配置文件","Add a collaborator":"添加一个合作者","Add a comment":"添加一条评论","Add a folder":"添加文件夹","Add a function":"添加一个函数","Add a health bar for handle damage.":"添加一个生命条来显示受到的伤害。","Add a health bar to this jumping character, losing health when hitting spikes.":"给这个跳跃角色添加一个生命值条,当击中尖刺时会失去生命值。","Add a layer":"添加图层","Add a link to your donation page. It will be displayed on your gd.games profile and game pages.":"添加指向您的捐赠页面的链接。它将显示在您的 gd.games 个人资料和游戏页面上。","Add a local variable":"添加一个局部变量","Add a local variable to the selected event":"将局部变量添加到所选事件","Add a new behavior to the object":"添加一项新行为到对象","Add a new empty event":"添加新的空事件","Add a new event":"添加一个新事件","Add a new folder":"添加新文件夹","Add a new function":"添加一项新功能","Add a new group":"添加一个新组","Add a new group...":"添加新组...","Add a new object":"添加一个新对象","Add a new option":" 添加新选项","Add a new property":"添加一个新属性","Add a parameter":"添加参数","Add a parameter below":"在下面添加一个参数","Add a point":"添加点","Add a property":"添加属性","Add a scene":"添加一个场景","Add a score and display it on the screen":"添加一个分数并在屏幕上显示","Add a sprite":"添加精灵","Add a sub-condition":"添加子条件","Add a sub-event to the selected event":"为选定事件添加子事件","Add a time attack mode, where you have to reach the end as fast as possible.":"添加时间攻击模式,您必须尽快到达终点。","Add a time attack mode.":"增加计时攻击模式。","Add a variable":"添加一个变量","Add a vertex":"添加顶点","Add action":"添加操作","Add again":"再次添加","Add an Auth Key first":"首先添加认证密钥","Add an animation":"添加动画","Add an event":"添加事件","Add an external layout":"添加外部布局","Add an object":"添加对象","Add any object variable to the group":"将任意对象变量添加到组","Add asset":"新增资产","Add characters and objects to the scene.":"在场景中添加角色和物体。","Add child":"添加子项","Add collaborator":"添加合作人","Add collision mask":"添加碰撞遮罩","Add condition":"添加条件","Add external events":"添加外部事件","Add instance to the scene":"添加实例到场景中","Add leaderboards to your online Game":"给你的在线游戏添加排行榜","Add new":"添加新内容","Add object":"添加对象","Add or edit":"新增或编辑","Add parameter...":"添加参数...","Add personality and publish your game.":"添加个性并发布您的游戏。","Add personality to your game and publish it online.":"为您的游戏添加个性,并在线发布。","Add player logins and a leaderboard.":"添加玩家登录功能和排行榜。","Add player logins to your game and add a leaderboard.":"将玩家登录添加到您的游戏并添加排行榜。","Add solid rocks that falls from the sky at a random position around the player every 0.5 seconds":"每0.5秒在玩家周围随机位置添加从天而降的固体岩石。","Add the assets":"添加素材","Add these assets to my scene":"将这些资产添加到我的场景中","Add these assets to the project":"将这些素材添加到项目","Add this asset to my scene":"将此资产添加到我的场景中","Add this asset to the project":"将此素材添加到项目","Add to project":"添加到项目","Add to the scene":"添加到场景","Add variable":"添加变量","Add variable...":"添加变量...","Add your Discord username to get a role on the GDevelop Discord or access to a dedicated channel if you have a Gold or Pro subscription! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"添加您的 Discord 用户名以在 GDevelop Discord 上获得角色,或者如果您有 Gold 或 Pro 订阅,则可访问专用频道!加入 [GDevelop Discord](https://discord.gg/gdevelop)。","Add your Discord username to get a special role on the GDevelop Discord! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"添加您的 Discord 用户名以在 GDevelop Discord 上获得特别角色!加入 [GDevelop Discord](https://discord.gg/gdevelop)。","Add your Discord username to get access to a dedicated channel! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"添加您的 Discord 用户名即可访问专用频道!加入 [GDevelop Discord](https://discord.gg/gdevelop)。","Add your first animation":"添加您的第一个动画","Add your first behavior":"添加您的第一个行为","Add your first characters to the scene and throw your first objects.":"将您的第一个角色添加到场景中,并投掷您的第一个对象。","Add your first effect":"添加您的第一个特效","Add your first event":"添加您的第一个事件","Add your first global variable":"添加您的首个全局变量","Add your first instance variable":"添加您的第一个实例变量","Add your first object group variable":"添加您的第一个对象组变量","Add your first object variable":"添加您的第一个对象变量","Add your first parameter":"添加您的第一个参数","Add your first property":"添加您的第一个属性","Add your first scene variable":"添加您的第一个场景变量","Add {behaviorName} (<0>{behaviorTypeLabel}) behavior to <1>{object_name} in scene <2>{scene_name}.":function(a){return["\u5C06 ",a("behaviorName")," \uFF08<0>",a("behaviorTypeLabel"),"\uFF09\u884C\u4E3A\u6DFB\u52A0\u5230\u573A\u666F <2>",a("scene_name")," \u4E2D\u7684 <1>",a("object_name"),"\u3002"]},"Add...":"添加...","Adding...":"添加中...","Additional properties will appear here when you add behaviors to objects, such as the 2D or 3D Physics Engine.":"当您将行为添加到对象时,其他属性将显示在此处,例如二维或三维物理引擎。","Additive rendering":"附加渲染","Adjust height to fill screen (extend or crop)":"调整高度以填充屏幕 (扩展或裁剪)","Adjust width to fill screen (extend or crop)":"调整宽度以填充屏幕 (扩展或裁剪)","Ads":"广告","Advanced":"高级","Advanced course":"高级课程","Advanced options":"高级选项","Advanced properties":"高级属性","Advanced settings":"高级设置","Adventure":"冒险","After watching the video, use this template to complete the following tasks.":"观看完视频后,使用此模板完成以下任务。","Alive":"活着","All":"全部","All asset packs":"所有资产包","All behaviors being directly referenced in the events:":"事件中直接引用的所有行为:","All builds":"所有版本","All categories":"所有类别","All current entries will be deleted, are you sure you want to reset this leaderboard? This can't be undone.":"所有当前作品都将被删除,您确定要重置此排行榜吗?这不能撤消。","All entries":"所有作品","All entries are displayed.":"显示所有作品。","All exports":"全部导出","All feedbacks processed":"所有反馈均已处理","All game templates":"所有游戏模板","All objects potentially used in events: {0}":function(a){return["\u4E8B\u4EF6\u4E2D\u53EF\u80FD\u4F7F\u7528\u7684\u6240\u6709\u5BF9\u8C61: ",a("0")]},"All the entries of {0} will be deleted too. This can't be undone.":function(a){return[a("0")," \u7684\u6240\u6709\u6761\u76EE\u4E5F\u5C06\u88AB\u5220\u9664\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u6D88\u3002"]},"All your changes will be lost. Are you sure you want to cancel?":"您所做的所有更改都将丢失。你确定要取消?","All your games were played more than {0} times in total!":function(a){return["\u60A8\u6240\u6709\u7684\u6E38\u620F\u603B\u5171\u73A9\u4E86\u8D85\u8FC7 ",a("0")," \u6B21\uFF01"]},"Allow players to join after the game has started":"允许玩家在游戏开始后加入","Allow this project to run npm scripts?":"允许此项目运行 npm 脚本吗?","Allow to display advertisements on the game page on gd.games.":"允许在 gd.games 的游戏页面上显示广告。","Alpha":"Alpha","Alphabet":"字母表","Already a member?":"已经是会员了吗?","Already added":"已添加","Already cancelled":"已经取消","Already in project":"已经在项目中","Already installed":"已安装","Alright, here's my approach:":"好的,这是我的方法:","Always":"总是","Always display the preview window on top of the editor":"总是在编辑器顶部显示预览窗口","Always preload at startup":"始终在启动时预加载","Always visible":"总是可见","Ambient light color":"环境光颜色","An action that can be used in other events sheet. You can define the action parameters: objects, texts, numbers, layers, etc...":"一个可以在其他事件表中使用的动作。您可以定义动作参数:对象、文本、数字、图层等...","An action that can be used on objects with the behavior. You can define the action parameters: objects, texts, numbers, layers, etc...":"可以在具有行为的对象上使用的操作。您可以定义操作参数:对象,文本,数字,图层等......","An action that can be used on the object. You can define the action parameters: objects, texts, numbers, layers, etc...":"可以在对象上使用的动作。您可以定义动作参数:对象、文本、数字、图层等...","An error happened":"发生错误","An error happened when retrieving the game's configuration. Please check your internet connection or try again later.":"检索游戏配置时发生错误。请检查您的互联网连接或稍后重试。","An error happened when sending your request, please try again.":"发送请求时发生错误,请重试。","An error happened while cashing out. Verify your internet connection or try again later.":"提现时发生错误。请检查您的互联网连接或稍后重试。","An error happened while loading the certificates.":"加载证书时出错。","An error happened while loading this extension. Please check that it is a proper extension file and compatible with this version of GDevelop":"加载此扩展时出错。请检查它是否是一个正确的扩展文件,且适用于此版本的 GDevelop","An error happened while purchasing this product. Verify your internet connection or try again later.":"购买此产品时出错。请验证您的互联网连接或稍后再试。","An error happened while registering the game. Verify your internet connection or retry later.":"注册游戏时发生错误。请验证您的网络连接或稍后重试。","An error happened while removing the collaborator. Verify your internet connection or retry later.":"删除合作者时出错。请验证您的网络连接或稍后重试。","An error happened while transferring your credits. Verify your internet connection or try again later.":"转移您的积分时发生错误。请检查您的互联网连接或稍后重试。","An error happened while unregistering the game. Verify your internet connection or retry later.":"取消注册游戏时出错。请检查您的互联网连接或稍后重试。","An error has occurred during functions generation. If GDevelop is installed, verify that nothing is preventing GDevelop from writing on disk. If you're running GDevelop online, verify your internet connection and refresh functions from the Project Manager.":"函数生成期间发生错误。如果安装了 GDevelop,请确认没有任何东西阻止 GDevelop 写入磁盘。如果您在线运行 GDevelop,请验证您的互联网连接并从项目管理器中刷新功能。","An error has occurred in functions. Click to reload them.":"函数中发生错误。点击重新加载它们。","An error occured while storing the auth key.":"存储身份验证密钥时发生错误。","An error occured while storing the provisioning profile.":"存储配置文件时发生错误。","An error occurred in the {componentTitle}.":function(a){return[a("componentTitle")," \u4E2D\u53D1\u751F\u9519\u8BEF\u3002"]},"An error occurred when creating a new leaderboard, please close the dialog, come back and try again.":"创建新的排行榜时出错,请关闭对话框,返回并重试。","An error occurred when deleting the entry, please try again.":"删除参赛作品时出错,请重试。","An error occurred when deleting the leaderboard, please close the dialog, come back and try again.":"删除排行榜时出错,请关闭对话框,返回并重试。","An error occurred when deleting the project. Please try again later.":"删除项目时出错。请稍后重试。","An error occurred when downloading the tutorials.":"下载教程时出错。","An error occurred when fetching the entries of the leaderboard, please try again.":"获取排行榜条时发生错误,请重试。","An error occurred when fetching the leaderboards, please close the dialog and reopen it.":"获取排行榜时出错,请关闭对话框并重新打开它。","An error occurred when fetching the store content. Please try again later.":"获取商店内容时发生错误。请稍后再试。","An error occurred when opening or saving the project. Try again later or choose another location to save the project to.":"打开或保存项目时出错。稍后重试或选择另一个位置来保存项目。","An error occurred when opening the project. Check that your internet connection is working and that your browser allows the use of cookies.":"打开项目时发生错误。检查您的Internet连接是否正常工作,并允许浏览器使用Cookie。","An error occurred when resetting the leaderboard, please close the dialog, come back and try again.":"重置排行榜时发生错误,请关闭对话框,返回并重试。","An error occurred when retrieving leaderboards, please try again later.":"获取排行榜时出错,请稍后再试。","An error occurred when saving the project, please verify your internet connection or try again later.":"保存项目时发生错误,请验证您的Internet连接或稍后再试。","An error occurred when saving the project. Please try again by choosing another location.":"保存项目时发生错误。请选择其他位置再试一次。","An error occurred when saving the project. Please try again later.":"保存项目时出错。请稍后再试。","An error occurred when sending the form, please verify your internet connection and try again later.":"发送表单时出错,请验证您的互联网连接,然后重试。","An error occurred when setting the leaderboard as default, please close the dialog, come back and try again.":"设置排行榜为默认时发生错误,请关闭对话框,返回后重试。","An error occurred when updating the appearance of the leaderboard, please close the dialog, come back and try again.":"更新排行榜外观时出错,请关闭对话框,返回后重试。","An error occurred when updating the display choice of the leaderboard, please close the dialog, come back and try again.":"更新排行榜显示选项时发生错误,请关闭对话框,返回并重试。","An error occurred when updating the name of the leaderboard, please close the dialog, come back and try again.":"更新排行榜名称时发生错误,请关闭对话框,返回并重试。","An error occurred when updating the sort direction of the leaderboard, please close the dialog, come back and try again.":"更新排序方式时出错,请关闭对话框,返回后重试。","An error occurred when updating the visibility of the leaderboard, please close the dialog, come back and try again.":"更新排行榜可见性时发生错误,请关闭对话框,返回并重试。","An error occurred while accepting the invitation. Please try again later.":"接受邀请时发生错误。请稍后再试。","An error occurred while activating your purchase. Please contact support if the problem persists.":"激活您的购买时发生错误。如果问题仍然存在,请联系支持。","An error occurred while changing the password. Please try again later.":"更改密码时出错。请稍后再试。","An error occurred while creating the accounts.":"创建帐户时出错。","An error occurred while creating the group. Please try again later.":"创建组时出错。请稍后再试。","An error occurred while editing the student. Please try again.":"编辑学生时发生错误。请再试一次。","An error occurred while exporting your game. Verify your internet connection and try again.":"导出游戏时出错。请检查您的互联网连接并重试。","An error occurred while fetching the project version, try again later.":"获取项目版本时发生错误,请稍后再试。","An error occurred while generating some icons. Verify that the image is valid and try again.":"生成某些图标时出错。请验证图像是否有效,然后重试。","An error occurred while generating the certificate.":"生成证书时发生错误。","An error occurred while loading audio resources.":"加载音频资源时出错。","An error occurred while loading fonts.":"加载字体时出错。","An error occurred while loading your AI requests.":"加载您的 AI 请求时发出错误。","An error occurred while loading your builds. Verify your internet connection and try again.":"加载构建时发生错误。请验证您的互联网连接,然后重试。","An error occurred while renaming the group name. Please try again later.":"重命名组名称时出错。请稍后再试。","An error occurred while restoring the project version: {0}":function(a){return["\u6062\u590D\u9879\u76EE\u7248\u672C\u65F6\u53D1\u751F\u9519\u8BEF\uFF1A",a("0")]},"An error occurred while retrieving feedbacks for this game.":"检索此游戏的反馈时出错。","An error occurred while trying to recover your project last versions. Please try again later.":"试图恢复项目上一版本时出错。请稍后再试。","An error occurred, please try again later.":"发生错误,请稍后再试。","An error occurred.":"发生错误。","An error occurred. Please try again.":"发生错误。请重试。","An expression that can be used in formulas. Can either return a number or a string, and take some parameters.":"一个可以用在公式中的表达式。可以返回一个数字或字符串,并且使用一些参数。","An expression that can be used on objects with the behavior. Can either return a number or a string, and take some parameters.":"可以在具有行为的对象上使用的表达式。可以返回一个数字或字符串,并占用一些参数。","An expression that can be used on the object. Can either return a number or a string, and take some parameters.":"可以在对象上使用的表达式。可以返回一个数字或字符串,并且接收一些参数。","An extension with this name already exists in the project. Importing this extension will replace it.":"该名称的扩展已存在于项目中。导入此扩展将会替换它。","An external editor is opened.":"打开外部编辑器。","An internet connection is required to administrate your game's leaderboards.":"管理您的游戏排行榜需要互联网连接。","An object that can be moved, rotated and scaled in 2D.":"一个可以在 2D 中移动、旋转和缩放的物体。","An object that can be moved, rotated and scaled in 3D.":"一个可以在 3D 中移动、旋转和缩放的物体。","An unexpected error happened. Please contact us for more details.":"发生意外错误。请联系我们了解更多详情。","An unexpected error happened. Verify your internet connection or try again later.":"发生意外错误。请验证您的网络连接或稍后再试。","An unexpected error occurred. The list has been refreshed.":"发生意外错误。列表已被刷新。","An unknown error happened, ensure your password is entered correctly.":"发生未知错误,请确保您的密码正确输入。","An unknown error happened.":"发生未知错误。","An update is installing.":"正在安装一个更新。","An update is ready to be installed. Close ALL GDevelop apps or tabs in your browser, then open it again.":"已准备好安装一个更新。请先关闭浏览器中的所有GDevelop 应用或标签,然后重新打开这个更新。","Analytics":"分析","Analyze Objects Used in this Event":"分析在此事件中使用的对象","Analyzing the object properties":"分析对象属性","Analyzing the project":"分析项目","And others...":"以及其他...","And {remainingResultsCount} more results.":function(a){return["\u8FD8\u6709 ",a("remainingResultsCount")," \u4E2A\u7ED3\u679C\u3002"]},"Android":"安卓","Android App Bundle (for publishing on Google Play)":"Android 应用程序包 (在Google Play上发布)","Android Build":"安卓版本(Android Build)","Android builds":"安卓构建","Android icons and Android 12+ splashscreen":"Android 图标和 Android 12+ 启动画面","Android mobile devices (Google Play, Amazon)":"Android 移动设备 (Google Play, Amazon)","Angle":"角度","Animation":"动画","Animation #{animationIndex}":function(a){return["\u52A8\u753B #",a("animationIndex")]},"Animation #{i} {0}":function(a){return["\u52A8\u753B #",a("i")," ",a("0")]},"Animations":"动画","Animations are a sequence of images.":"动画是一系列图像。","Anonymous":"匿名的","Anonymous players":"匿名玩家","Another personal website, newgrounds.com page, etc.":"另一个个人网站,newgrounds.com 网页等。","Answer":"回答","Answer a 1-minute survey to personalize your suggested content.":"回答一个 1 分钟的问卷来个性化你的建议内容。","Answers video":"回答视频","Anti-aliasing":"抗锯齿","Antialising for 3D":"3D 抗锯齿","Any object":"任何对象","Any submitted score that is higher than the set value will not be saved in the leaderboard.":"任何已提交的得分高于设定值都不会保存在排行榜中。","Any submitted score that is lower than the set value will not be saved in the leaderboard.":"任何提交的得分低于设定值都不会保存在排行榜中。","Any unsaved changes in the project will be lost.":"项目中任何未保存的更改都将丢失。","Anyone can access it.":"任何人都可以访问它。","Anyone with the link can see it, but it is not listed in your game's leaderboards.":"任何带有链接的人都可以看到它,但它没有在游戏排行榜中列出。","App or tool":"应用程序或工具","Appearance":"外观","Apple":"苹果","Apple App Store":"苹果应用商店","Apple Certificates & Profiles":"苹果证书和配置文件","Apple mobile devices (App Store)":"苹果移动设备 (App Store)","Apply":"应用","Apply changes":"应用更改","Apply changes to preview":"应用更改到预览","Apply changes to the running preview":"将更改应用到正在运行的预览","Apply this change:":"应用此更改:","Archive accounts":"存档账户","Archive {0} accounts":function(a){return["\u5B58\u6863 ",a("0")," \u5E10\u6237"]},"Archive {0} accounts?":function(a){return["\u5B58\u6863 ",a("0")," \u5E10\u6237\u5417\uFF1F"]},"Archived accounts":"存档的帐户","Are you sure you want to delete this entry? This can't be undone.":"您确定要删除此参赛作品吗?此操作无法撤消。","Are you sure you want to hide this hint? You won't see it again, unless you re-activate it from the preferences.":"您确定要隐藏此提示吗?您将不再看到它,除非您从设置中重新激活它。","Are you sure you want to quit GDevelop?":"您确定要退出GDevelop吗?","Are you sure you want to remove these external events? This can't be undone.":"确定要删除这些外部事件吗?此操作无法撤销。","Are you sure you want to remove this animation?":"您确定要删除此动画吗?","Are you sure you want to remove this animation? You will lose the custom collision mask you have set for this object.":"您确定要删除此动画吗?您将丢失您为此对象设置的自定义碰撞遮罩。","Are you sure you want to remove this behavior? This can't be undone.":"您确定要删除此行为吗?此操作无法撤销。","Are you sure you want to remove this external layout? This can't be undone.":"确定要删除此外部布局吗?此操作无法撤销。","Are you sure you want to remove this folder and all its content (objects {0})? This can't be undone.":function(a){return["\u786E\u5B9E\u8981\u5220\u9664\u6B64\u6587\u4EF6\u5939\u53CA\u5176\u6240\u6709\u5185\u5BB9 (\u5BF9\u8C61",a("0"),") \u5417? \u65E0\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and all its functions ({0})? This can't be undone.":function(a){return["\u60A8\u786E\u5B9A\u8981\u5220\u9664\u6B64\u6587\u4EF6\u5939\u53CA\u5176\u6240\u6709\u529F\u80FD (",a("0"),") \u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002"]},"Are you sure you want to remove this folder and all its properties ({0})? This can't be undone.":function(a){return["\u4F60\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A\u6587\u4EF6\u5939\u53CA\u5176\u6240\u6709\u5C5E\u6027 (",a("0"),") \u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002"]},"Are you sure you want to remove this folder and with it the function {0}? This can't be undone.":function(a){return["\u60A8\u786E\u5B9A\u8981\u5220\u9664\u6B64\u6587\u4EF6\u5939\u53CA\u5176\u529F\u80FD ",a("0")," \u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002"]},"Are you sure you want to remove this folder and with it the object {0}? This can't be undone.":function(a){return["\u786E\u5B9E\u8981\u5220\u9664\u6B64\u6587\u4EF6\u5939\u548C\u5BF9\u8C61 ",a("0")," \u5417? \u65E0\u6CD5\u64A4\u6D88\u6B64\u64CD\u4F5C\u3002"]},"Are you sure you want to remove this folder and with it the property {0}? This can't be undone.":function(a){return["\u4F60\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A\u6587\u4EF6\u5939\u53CA\u5176\u5C5E\u6027 ",a("0")," \u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002"]},"Are you sure you want to remove this function? This can't be undone.":"您确定要删除此函数吗?此操作无法撤销。","Are you sure you want to remove this group? This can't be undone.":"您确定要删除此组吗?此操作无法撤销。","Are you sure you want to remove this object? This can't be undone.":"您确定要删除此对象?这个操作无法撤消。","Are you sure you want to remove this resource? This can't be undone.":"您确定要删除此资源吗?此操作无法撤销。","Are you sure you want to remove this scene? This can't be undone.":"确定要移除此场景吗?此操作无法撤销。","Are you sure you want to remove this variant from your project? This can't be undone.":"您确定要将此变体从您的项目中移除吗?此操作无法撤消。","Are you sure you want to reset all shortcuts to their default values?":"您确定要将所有快捷方式(shortcuts)重置为默认值吗?","Are you sure you want to restore the project to the state saved at this point in the AI conversation? This will overwrite the current project state.":"您确定要将项目恢复到此时在 AI 对话中保存的状态吗?这将覆盖当前项目状态。","Are you sure you want to unregister this game?{0}If you haven't saved it, it will disappear from your games dashboard and you won't get access to player services, unless you register it again.":function(a){return["\u60A8\u786E\u5B9A\u8981\u53D6\u6D88\u6CE8\u518C\u6B64\u6E38\u620F\u5417\uFF1F",a("0"),"\u5982\u679C\u60A8\u5C1A\u672A\u4FDD\u5B58\u5B83\uFF0C\u5B83\u5C06\u4ECE\u60A8\u7684\u6E38\u620F\u4FE1\u606F\u4E2D\u5FC3\u4E2D\u6D88\u5931\uFF0C\u5E76\u4E14\u60A8\u5C06\u65E0\u6CD5\u8BBF\u95EE\u73A9\u5BB6\u670D\u52A1\uFF0C\u9664\u975E\u60A8\u518D\u6B21\u6CE8\u518C\u5B83\u3002"]},"Are you teaching or learning game development?":"您正在教授或学习游戏开发吗?","Around 1 or 2 months":"大约1或2个月","Around 3 to 5 months":"大约3到5个月","Array":"数组","Art & Animation":"艺术与动画","As a percent of the game width.":"占游戏宽度的百分比。","As a teacher, you will use one seat in the plan so make sure to include yourself!":"作为一名教师,您将在计划中使用一个座位,因此请务必包括您自己!","Ask AI":"询问 AI","Ask AI (AI agent and chatbot)":"询问AI (AI代理和聊天机器人)","Ask a follow up question":"问一个后续问题","Ask every time":"每次询问","Ask the AI":"询问 AI","Ask your questions to the community":"向社区询问您的问题","Asset Store":"资产商店","Asset pack bundles":"资产包捆绑","Asset pack not found":"未找到资产包","Asset pack not found - An error occurred, please try again later.":"资源包未找到 - 发生错误,请稍后再试。","Asset packs will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this pack (or restore your existing purchase).":"资源包将链接到您的用户帐户并可用于您的所有项目。登录或注册以购买此包 (或恢复您现有的购买)。","Asset store dialog":"资源商店对话框","Asset store tag":"资产商店标签","Assets":"素材","Assets (coming soon!)":"资产(即将到来!)","Assets import can't be undone. Make sure to backup your project beforehand.":"资产导入无法撤销。请确保提前备份您的项目。","Associated resource name":"关联的资源名称","Asynchronous":"异步","At launch":"在启动时","Atlas":"图集","Atlas resource":"图集资源","Attached object":"附着对象","Audio":"音频","Audio & Sound":"音频和声音","Audio resource":"音频资源","Audio type":"音频类型","Auth Key (App Store upload)":"验证密钥 (应用商店上传)","Auth Key for upload to App Store Connect":"用于上传到 App Store Connect 的身份验证密钥","Authors":"作者","Auto download and install updates (recommended)":"自动下载和安装更新 (推荐)","Auto-save project on preview":"预览时自动保存项目","Automated":"自动化","Automatic collision mask activated. Click on the button to replace it with a custom one.":"自动碰撞遮罩已激活。单击按钮将其替换为自定义按钮。","Automatic creation of lighting layer":"自动创建照明图层","Automatically follow the base layer.":"自动跟随基本层(base layer)","Automatically log in as a player in preview":"在预览中自动以玩家身份登录","Automatically open the diagnostic report at preview":"在预览时自动打开诊断报告","Automatically re-open the project edited during last session":"自动重新打开上次会话中编辑的项目","Automatically take a screenshot in game previews":"在游戏预览中自动截屏","Automatically use GDevelop credits for AI requests when run out of AI credits":"在用完 AI 额度时自动使用 GDevelop 额度进行 AI 请求","Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.":"15分钟后仍活跃的玩家平均数。此图表显示了玩家在 X 分钟后继续游戏的时间长度,有助于了解玩家是迅速退出还是持续游戏一段时间。","Average user feedback":"普通用户反馈","Back":"返回","Back (Additional button, typically the Browser Back button)":"后退 (附加按钮,通常是浏览器后退按钮)","Back face":"背面","Back to discover":"返回以发现","Back to {0}":function(a){return["\u8FD4\u56DE\u5230 ",a("0")]},"Background":"背景","Background and cameras":"背景和相机","Background color":"背景色","Background color:":"背景眼色;","Background fade in duration (in seconds)":"背景淡入持续时间(秒)","Background image":"背景图像","Background preloading of scene resources":"场景资源的后台预加载","Backgrounds":"背景","Base layer":"基础层","Base layer properties":"基础图层属性","Be careful with this action, you may have problems exiting the preview if you don't add a way to toggle it back.":"请谨慎执行此操作,如果你没有添加切换回预览的方式,则退出预览可能会遇到问题。","Before installing this asset, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88C5\u6B64\u8D44\u4EA7\u4E4B\u524D\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u66F4\u65B0\u8FD9\u4E9B\u6269\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before installing this behavior, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88C5\u6B64\u884C\u4E3A\u4E4B\u524D\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u66F4\u65B0\u8FD9\u4E9B\u6269\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before installing this extension, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88C5\u6B64\u6269\u5C55\u4E4B\u524D\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u66F4\u65B0\u8FD9\u4E9B\u6269\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before you go, make sure that you've unpublished all your games on gd.games. Otherwise they will stay visible to the community. Are you sure you want to permanently delete your account? This action cannot be undone.":"在您开始之前,请确保您已取消在 gd.games 上发布所有游戏。否则,它们将对社区保持可见。您确定要永久删除您的帐户吗?此操作无法撤消。","Before you go...":"在您离开之前...","Begin a driving game with a controllable car":"开始一场可以控制的汽车的驾驶游戏","Begin a top-down adventure with one controllable character.":"开始一场单个可控制角色的俯视冒险游戏。","Beginner":"初学者","Beginner course":"初级课程","Behavior":"行为","Behavior (for the previous object)":"行为(对于上一个对象)","Behavior Configuration":"行为配置","Behavior name":"行为名称","Behavior properties":"行为属性","Behavior type":"行为类型","Behaviors":"行为","Behaviors add features to objects in a matter of clicks.":"行为在点击对象中添加功能。","Behaviors are attached to objects and make them alive. The rules of the game can be created using behaviors and events.":"行为依附于对象并使它们活跃起来。游戏规则可以通过行为和事件来创建。","Behaviors of {objectOrGroupName}: {0} ;":function(a){return[a("objectOrGroupName")," \u7684\u884C\u4E3A\uFF1A",a("0"),"\uFF1B"]},"Bio":"个人信息","Bitmap Font":"位图字体","Bitmap font resource":"位图字体资源","Block preview and export when diagnostic errors are found":"在发现诊断错误时阻止预览和导出","Blocked on GDevelop?":"在 GDevelop 上被阻止?","Blur radius":"模糊半径","Bold":"粗体","Boolean":"布尔","Boolean (checkbox)":"布尔值(复选框)","Bottom":"底部","Bottom bound":"底部边界","Bottom bound should be greater than right bound":"底部边界应大于右侧边界","Bottom face":"底面","Bottom left corner":"左下角","Bottom margin":"底边距","Bottom right corner":"右下角","Bounce rate":"跳出率","Bounds":"边界","Branding":"品牌推广","Branding and Loading screen":"品牌和加载屏幕","Break into the <0>booming industry of casual gaming. Sharpen your skills and become a professional. Start for free:":"进入<0>蓬勃发展的行业的休闲游戏。提升你的技能,成为一名专业人士。免费开始:","Breaking changes":"重大更改","Bring to front":"置于前端","Browse":"浏览","Browse all templates":"浏览所有模板","Browse assets":"浏览资产","Browse bundle":"浏览捆绑包","Browser":"浏览器","Build and download":"生成并下载","Build could not start or errored. Please check your internet connection or try again later.":"构建无法开始或出现错误。请检查您的网络连接,或者稍后再试。","Build dynamic levels with tiles.":"使用瓦片构建动态层级。","Build is starting...":"构建正在启动……","Build open for feedbacks":"建立开放的反馈","Build started!":"构建已开始!","Building":"正在生成","Bundle":"捆绑包","Bundle not found":"找不到捆绑包","Bundle not found - An error occurred, please try again later.":"未找到捆绑包 - 发生错误,请稍后再试。","Bundles and their content will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this bundle. (or restore your existing purchase).":"捆绑包及其内容将链接到您的用户帐户,并可在您所有项目中使用。登录或注册以购买此捆绑包。(或恢复您现有的购买)。","Buy GDevelop goodies and swag":"购买 GDevelop 礼品和赠品","Buy for {0} credits":function(a){return["\u8D2D\u4E70 ",a("0")," \u4E2A\u79EF\u5206"]},"Buy for {formattedProductPriceText}":function(a){return["\u4E3A ",a("formattedProductPriceText")," \u8D2D\u4E70"]},"Buy now and save {0}":function(a){return["\u73B0\u5728\u8D2D\u4E70\u5E76\u8282\u7701 ",a("0")]},"By accepting, the team admin will be able to access your projects and may update your profile information such as your username.":"通过接受,团队管理员将能够访问您的项目,并可能更新您的个人资料信息,例如您的用户名。","By canceling your subscription, you will lose all your premium features at the end of the period you already paid for. Continue?":"通过取消订阅,您将在已付费的期限结束时失去所有高级功能。继续?","By creating an account and using GDevelop, you agree to the [Terms and Conditions](https://gdevelop.io/page/terms-and-conditions).":"创建帐户并使用 GDevelop,即表示您同意[条款和条件](https://gdevelop.io/page/terms-and-conditions)。","Calibrating sensors":"校准传感器","Camera":"相机","Camera positioning":"相机定位","Camera type":"相机类型","Can't check if the game is registered online.":"无法检查游戏是否在线注册。","Can't load the announcements. Verify your internet connection or try again later.":"无法加载公告。请验证您的网络连接或稍后再试。","Can't load the credits packages. Verify your internet connection or retry later.":"无法加载积分包。请验证您的互联网连接或稍后重试。","Can't load the extension registry. Verify your internet connection or try again later.":"无法加载扩展存储库。请检查您的网络连接,或者稍后再试。","Can't load the games. Verify your internet connection or retry later.":"无法加载游戏。请验证您的网络连接或稍后重试。","Can't load the licenses. Verify your internet connection or try again later.":"无法加载许可证。请验证您的互联网连接或稍后重试。","Can't load the profile. Verify your internet connection or try again later.":"无法加载配置文件。请验证您的互联网连接或稍后重试。","Can't load the results. Verify your internet connection or retry later.":"无法加载结果。请验证您的网络连接或稍后重试。","Can't load the tutorials. Verify your internet connection or retry later.":"无法加载教程。请验证您的网络连接或稍后重试。","Can't load your game earnings. Verify your internet connection or try again later.":"无法加载您的游戏收入。请验证您的互联网连接或稍后重试。","Can't properly export the game.":"无法正确导出游戏。","Can't upload your game to the build service.":"无法将你的游戏上传到构建服务上。","Cancel":"取消","Cancel and change my subscription":"取消并更改我的订阅","Cancel and close":"取消并关闭","Cancel anytime":"随时取消","Cancel changes":"取消更改","Cancel editing":"取消编辑","Cancel edition":"取消版本","Cancel subscription":"取消订阅","Cancel your changes?":"取消您的更改?","Cancel your subscription":"取消订阅","Cancel your subscription?":"取消您的订阅吗?","Cancelled":"已取消","Cancelled - Your subscription will end at the end of the paid period.":"已取消 - 您的订阅将在付费周期结束时结束。","Cannot access project save":"无法访问项目保存","Cannot filter on both asset packs and assets at the same time. Try clearing one of the filters!":"无法同时对资产包和资产进行过滤。请尝试清除其中一个过滤器!","Cannot restore project":"无法还原项目","Cannot see the exports":"无法查看导出","Cannot update thumbnail":"无法更新缩略图","Cash out":"提现","Category (shown in the editor)":"类别(在编辑器中显示)","Cell depth (in pixels)":"单元格深度(以像素为单位)","Cell height (in pixels)":"单元格高度 (以像素为单位)","Cell width (in pixels)":"单元格宽度 (以像素为单位)","Center":"中心","Certificate and provisioning profile":"证书和配置文件","Certificate type: {0}":function(a){return["\u8BC1\u4E66\u7C7B\u578B\uFF1A",a("0")]},"Change editor zoom":"更改编辑器缩放","Change my email":"更改我的电子邮件","Change the name in the project properties.":"在项目属性中更改名称。","Change the package name in the game properties.":"在游戏属性中更改包名称。","Change thumbnail":"更改缩略图","Change username or full name":"更改用户名或全名","Change your email":"更改您的电子邮件","Changes and answers may have mistakes: experiment and use it for learning.":"更改和答案可能包含错误:进行实验并用于学习。","Changes saved":"更改已保存","Chapter":"章","Chapter materials":"章节材料","Chapters":"章节","Characters":"角色","Check again for new updates":"再次检查是否有新的更新","Check that the file exists, that this file is a proper game created with GDevelop and that you have the authorization to open it.":"检查该文件是否存在,该文件是否是使用GDevelop创建的正确游戏,以及您是否有权打开它。","Check the logs to see if there is an explanation about what went wrong, or try again later.":"检查日志以查看是否有关于问题出在哪里的说明, 或者稍后再试。","Checking for update...":"正在检查更新...","Checking tools":"检查工具","Children configurations are deprecated. This [migration documentation](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) can help you use variants instead.":"子配置已被弃用。此[迁移文档] (https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) 可以帮助你使用变体。","Choose":"选择","Choose GDevelop language":"选择GDevelop语言","Choose a Auth Key":"选择一个身份验证密钥","Choose a file":"选择文件","Choose a folder for the new game":"选择新游戏的文件夹","Choose a font":"选择字体","Choose a function, or a function of a behavior, to edit its events.":"选择一个函数或行为函数来编辑其事件。","Choose a function, or a function of a behavior, to set the parameters that it accepts.":"选择一个函数,或者一个行为函数,以设置它接受的参数。","Choose a key":"选择一个按键","Choose a layer":"选择图层","Choose a leaderboard":"选择一个排行榜","Choose a leaderboard (optional)":"选择一个排行榜(可选)","Choose a mouse button":"选择鼠标按钮","Choose a new behavior function (\"method\")":"选择新的行为函数 (\"方法\")","Choose a new extension function":"选择一个新的扩展函数","Choose a new object function (\"method\")":"选择一个新的对象函数 (\"方法\")","Choose a new object type":"选择一个新的对象类型","Choose a pack":"选择一个包","Choose a parameter":"选择一个参数","Choose a provisioning profile":"选择配置文件","Choose a scene":"选择一个场景","Choose a skin":"选择皮肤","Choose a subscription":"选择一项订阅","Choose a subscription to enjoy the best of game creation.":"选择订阅即可享受最佳游戏创作。","Choose a value":"选择一个值","Choose a workspace folder":"选择一个工作区文件夹","Choose an animation":"选择一个动画","Choose an animation and frame to edit the collision masks":"选择动画和帧来编辑碰撞蒙板","Choose an animation and frame to edit the points":"选择动画和帧来编辑点","Choose an effect":"选择一种效果","Choose an element to inspect in the list":"在列表中选择要检查的元素","Choose an export folder":"选择导出文件夹","Choose an external layout":"选择外部布局","Choose an icon":"选择一个图标","Choose an object":"选择对象","Choose an object first or browse the list of actions.":"首先选择一个对象或浏览动作列表。","Choose an object first or browse the list of conditions.":"首先选择一个对象或浏览条件列表。","Choose an object to add to the group":"选择要添加到群组的对象","Choose an operator":"选择一个操作符","Choose an option":"选择一个选项","Choose and add an event":"选择并添加事件","Choose and add an event...":"选择并添加事件...","Choose and enter a package name in the game properties.":"在游戏属性中选择并输入包名称。","Choose another location":"选择另一个位置","Choose file":"选择文件","Choose folder":"选择目录","Choose from asset store":"从资产商店选择","Choose one or more files":"选择一个或多个文件","Choose the 3D model file (.glb) to use":"选择要使用的3D模型文件(.glb)","Choose the JSON/LDtk file to use":"选择要使用的 JSON /LDtk 文件","Choose the associated scene:":"选择关联的场景:","Choose the atlas file (.atlas) to use":"选择要使用的图集文件 (.atlas)","Choose the audio file to use":"选择要使用的音频文件","Choose the bitmap font file (.fnt, .xml) to use":"选择要使用的位图字体文件(.fnt, .xml)","Choose the effect to apply":"选择要应用的效果","Choose the font file to use":"选择要使用的字体文件","Choose the image file to use":"选择要使用的图像文件","Choose the json file to use":"选择要使用的json文件","Choose the scene":"选择场景","Choose the spine json file to use":"选择要使用的 spine json 文件","Choose the tileset to use":"选择要使用的瓷砖","Choose the upload key to use to identify your Android App Bundle. In most cases you don't need to change this. Use the \"Old upload key\" if you used to publish your game as an APK and you activated Play App Signing before switching to Android App Bundle.":"选择用于识别您的 Android 应用程序包的上传密钥。在大多数情况下,您不需要更改它。 如果您曾经以APK形式发布您的游戏,并在切换到 Android 应用程序包之前激活了Play App签名,请使用“旧上传密钥”。","Choose the video file to use":"选择要使用的视频文件","Choose this plan":"选择此计划","Choose where to add the assets:":"选择添加素材的目标点:","Choose where to create the game":"选择在哪里创建游戏","Choose where to create your projects":"选择要在哪里创建您的项目","Choose where to export the game":"选择导出游戏的位置","Choose where to load the project from":"选择从何处加载项目","Choose where to save the project to":"选择将项目保存到的位置","Choose your game art":"选择你的游戏艺术","Circle":"圆","Claim":"要求","Claim credits":"索取学分","Claim this pack":"领取此包","Class":"类","Classrooms":"教室","Clear all filters":"清除所有过滤器","Clear search":"清除搜索","Clear the rendered image between each frame":"清除每帧之间渲染的图像","Click here to test the link.":"点击这里测试链接。","Click on an instance on the canvas or an object in the list to display their properties.":"单击画布上的实例或列表中的对象以显示其属性。","Click on the tilemap grid to activate or deactivate hit boxes.":"单击瓦片地图网格即可激活或停用命中框。","Click to restart and install the update now.":"点击以立即重新启动并安装更新。","Close":"关闭","Close GDevelop":"关闭 GDevelop","Close Instances List Panel":"关闭实例列表面板","Close Layers Panel":"关闭图层面板","Close Object Groups Panel":"关闭对象组面板","Close Objects Panel":"关闭对象面板","Close Project":"关闭项目","Close Properties Panel":"关闭属性面板","Close all":"关闭全部","Close all tasks":"关闭所有任务","Close and launch a new preview":"关闭并启动新预览","Close others":"关闭其它","Close project":"关闭项目","Close task":"关闭任务","Close the AI chat?":"关闭 AI 聊天?","Close the project?":"关闭项目吗?","Close the project? Any changes that have not been saved will be lost.":"关闭项目?任何未保存的更改都将丢失。","Co-op Multiplayer":"合作多人游戏","Code":"代码","Code editor Theme":"代码编辑器主题","Collaborators":"合作者","Collapse All":"全部折叠","Collect at least {0} USD to cash out your earnings":function(a){return["\u6536\u96C6\u81F3\u5C11 ",a("0")," \u7F8E\u5143\u6765\u63D0\u73B0\u60A8\u7684\u6536\u5165"]},"Collect feedback from players":"收集玩家的反馈","Collect game feedback":"收集游戏的反馈","Collisions handling with the Physics engine":"物理引擎碰撞处理","Color":"颜色","Color (text)":"颜色 (文本)","Color:":"色彩:","Column title":"专栏标题","Come back to latest version":"回到最新版本","Coming in {0}":function(a){return["\u8FDB\u5165 ",a("0")]},"Command palette keyboard shortcut":"命令面板快捷方式","Comment":"注释","Commercial License":"商业许可证","Community Discord Chat":"社区Discord聊天","Community Forums":"社区论坛","Community list":"社区列表","Companies, studios and agencies":"公司、工作室和机构","Company name or full name":"公司名称或全名","Compare all the advantages of the different plans in this <0>big feature comparison table.":"在这个 <0>大功能比较表 中比较不同计划的所有优点。","Complete all tasks to claim your badge":"完成所有任务来领取您的徽章","Complete your payment on the web browser":"在 web 浏览器上完成您的付款","Complete your purchase with the app store.":"使用应用商店完成您的购买。","Completely alone":"完全独自一人","Compressing before upload...":"上传前压缩……","Condition":"条件","Conditions":"条件","Configuration":"配置","Configure the external events":"配置外部事件","Configure the external layout":"配置外部布局","Configure tile’s hit boxes":"配置图块的命中框","Confirm":"确认","Confirm the opening":"确认打开","Confirm your email":"确认您的电子邮件","Confirming your subscription":"确认您的订阅","Congrats on finishing this course!":"恭喜你完成这门课程!","Congratulations! You've finished this tutorial!":"恭喜!您已经完成了这个教程!","Connected players":"已连接的玩家","Considering the best approach":"考虑最佳方案","Considering the possibilities":"考虑可能性","Console":"控制台","Consoles":"控制台","Contact us at education@gdevelop.io if you want to update your plan":"如果您想要更新您的计划,请联系我们 education@gdevelop.io","Contact:":"联系人:","Contains text":"包含文字","Content":"内容","Content for Teachers":"适合教师的内容","Continue":"继续","Continue anyway":"仍然继续","Continue editing":"继续编辑","Continue with Apple":"继续使用 Apple","Continue with Github":"继续使用 Github","Continue with Google":"继续使用 Google","Continue with Human Intelligence":"继续进行人工智能","Continue working":"继续工作","Contribute to GDevelop":"参与GDevelop开发","Contributions":"贡献","Contributor options":"贡献者选项","Contributors":"贡献者","Contributors, in no particular order:":"贡献者,排名不分先后:","Control a spaceship with a joystick.":"用操纵杆控制宇宙飞船。","Control your spaceship with a joystick, while avoiding asteroids.":"使用操纵杆控制你的宇宙飞船,同时避开小行星。","Convert":"转换","Copied to clipboard!":"已复制到剪贴板!","Copy":"复制","Copy active credentials to CSV":"复制活动凭证到CSV","Copy all":"全部复制","Copy all behaviors":"复制所有行为","Copy all effects":"复制所有效果","Copy build link":"复制构建链接","Copy email address":"复制电子邮件地址","Copy file path":"复制文件路径","Copy them into the project folder":"将它们复制到项目文件夹中","Copy {0} credentials to CSV":function(a){return["\u590D\u5236 ",a("0")," \u51ED\u8BC1\u5230CSV"]},"Cordova":"Cordova","Could not activate purchase":"无法激活购买","Could not cancel your subscription":"无法取消您的订阅","Could not cash out":"无法提现","Could not change subscription":"无法更改订阅","Could not create the object":"无法创建对象","Could not delete the build. Verify your internet connection or try again later.":"无法删除构建。请验证您的互联网连接或稍后再试。","Could not find any resources matching your search.":"未找到与您的搜索匹配的任何资源。","Could not install the asset":"无法安装资产","Could not install the extension":"无法安装扩展","Could not launch the preview":"无法启动预览","Could not load the project versions. Verify your internet connection or try again later.":"无法加载项目版本。请验证您的网络连接或稍后再试。","Could not purchase this product":"无法购买该产品","Could not remove invitation":"无法移除邀请","Could not swap asset":"无法交换资产","Could not transfer your credits":"无法转让您的学分","Could not update the build name. Verify your internet connection or try again later.":"无法更新构建名称。请验证您的互联网连接或稍后再试。","Counter of the loop":"循环计数器","Country name":"国家的名字","Courses will be linked to your user account and available indefinitely. Log in or sign up to purchase this course or restore a previous purchase.":"课程将链接到您的用户帐户,并无限期可用。登录或注册以购买此课程或恢复之前的购买。","Create":"创建","Create Extensions for GDevelop":"为GDevelop创建扩展","Create a 3D explosion when the player is hit":"当玩家被击中时创建 3D 爆炸","Create a GDevelop account to save your changes and keep personalizing your game":"创建 GDevelop 帐户以保存您的更改并继续个性化您的游戏","Create a certificate signing request that will be asked by Apple to generate a full certificate.":"创建一个证书签名请求,Apple 将要求该请求生成完整的证书。","Create a game":"创建一个游戏","Create a leaderboard":"创建排行榜","Create a new extension":"创建一个新的扩展","Create a new game":"创建一个新游戏","Create a new group":"创建一个新组","Create a new instance on the scene (will be at position 0;0):":"在场景中创建一个新实例 (将位于位置 0;0):","Create a new project":"创建一个新项目","Create a new room":"创建一个新房间","Create a new variant":"创建新变体","Create a project first to add assets from the asset store":"首先创建一个项目,并从商店添加素材","Create a project first to add this asset":"首先创建一个项目来添加该资产","Create a room and drag and drop members in it.":"创建一个房间并将成员拖放到其中。","Create a signing request":"创建签名请求","Create a simple flying game with obstacles to avoid":"创建一款有障碍物需要躲避的简单飞行游戏","Create account":"创建帐户","Create accounts":"创建账户","Create an API key on the [App Store Connect API page](https://appstoreconnect.apple.com/access/integrations/api). Give it a name and **administrator** rights. Download the \"Auth Key\" file and upload it here along with the required information you can find on the page.":"在 [App Store Connect API 页面](https://appstoreconnect.apple.com/access/integrations/api) 上创建 API 密钥。为其指定名称和**管理员**权限。下载“身份验证密钥”文件并将其与页面上找到的所需信息一起上传到此处。","Create an Account":"创建一个帐户","Create an account":"创建一个帐户","Create an account or login first to export your game using online services.":"首先创建一个帐户或登录以使用在线服务导出您的游戏。","Create an account to activate your purchase!":"创建账户以激活您的购买!","Create an account to register your games and to get access to metrics collected anonymously, like the number of daily players and retention of the players after a few days.":"创建一个帐户来注册游戏并访问匿名收集的指标,例如每日玩家数和几天后的玩家留存量。","Create an account to store your project online.":"创建一个帐户在线存储您的项目。","Create and Publish a Fling game":"创建并发布 Fling 游戏","Create iOS certificate":"创建 iOS 证书","Create installation file":"创建安装文件","Create my account":"创建我的帐户","Create new folder...":"创建新文件夹...","Create new game":"创建新游戏","Create new leaderboards now":"立即创建新的排行榜","Create or search for new extensions":"创建或搜索新扩展","Create package for Android":"为 Android 创建软件包","Create package for iOS":"为 iOS 创建软件包","Create scene <0>{scene_name}. <1>Click to open it.":function(a){return["\u521B\u5EFA\u573A\u666F <0>",a("scene_name"),"\u3002 <1>\u70B9\u51FB\u6253\u5F00\u3002"]},"Create section":"创建部分","Create students":"创建学生","Create with Jfxr":"使用 Jfxr 创建","Create with Piskel":"用 Piskel 创建","Create with Yarn":"用 Yarn 创建","Create your Apple certificate for iOS":"创建适用于 iOS 的 Apple 证书","Create your Auth Key to send your game to App Store Connect":"创建您的身份验证密钥以将您的游戏发送到 App Store Connect","Create your certificate and \"provisioning profile\" thanks to your Apple Developer account. We'll guide you with a step by step process.":"通过您的 Apple 开发者帐户创建您的证书和“配置文件”。我们将指导您逐步进行。","Create your first project using one of our templates or start from scratch.":"使用我们的模板之一创建您的第一个项目或从零开始。","Create your game's first leaderboard":"创建您的游戏的第一个排行榜","Created objects":"创建对象","Created on {0}":function(a){return["\u521B\u5EFA\u4E8E ",a("0")]},"Creator profile":"创作者简介","Credit out":"信用","Credits available: {0}":function(a){return["\u53EF\u7528\u79EF\u5206: ",a("0")]},"Credits given":"给予的学分","Credits will be linked to your user account. Log-in or sign-up to purchase them!":"积分将链接到您的用户帐户。登录或注册即可购买!","Current build online":"当前在线版本","Current plan":"当前计划","Custom CSS":"自定义 CSS","Custom css value cannot exceed {LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH} characters.":function(a){return["\u81EA\u5B9A\u4E49 css \u503C\u4E0D\u80FD\u8D85\u8FC7 ",a("LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH")," \u4E2A\u5B57\u7B26\u3002"]},"Custom display":"自定义显示","Custom object name":"自定义对象名称","Custom object variant":"自定义对象变体","Custom object variant properties":"自定义对象变体属性","Custom objects can't contain both 2D or 3D.<0/>Please select either 2D instances or 3D instances.":"自定义对象不能同时包含 2D 或 3D。<0/>请选择 2D 实例或 3D 实例。","Custom size":"自定义尺寸","Custom upload key (not available yet)":"自定义上传密钥(尚不可用)","Cut":"剪切","Dark (colored)":"暗色(着色)","Dark (plain)":"暗色(平原)","Date":"日期","Date from which entries are taken into account: {0}":function(a){return["\u53C2\u8D5B\u4F5C\u54C1\u88AB\u8003\u8651\u7684\u65E5\u671F\uFF1A ",a("0")]},"Days":"天","Dead":"死亡","Dealing with data integration from external sources":"处理来自外部来源的数据集成","Debugger":"调试器","Debugger is starting...":"调试器正在启动……","Declare <0><1/>{variableName} as <2><3/>{0} with <4>{1}":function(a){return["\u5C06 <0><1/>",a("variableName")," \u58F0\u660E\u4E3A <2><3/>",a("0")," \u4F7F\u7528 <4>",a("1"),""]},"Declare your app on App Store Connect and then register a key so that your game can be automatically uploaded when built. It's perfect to try your game with testers on Apple TestFlight.":"在 App Store Connect 上声明您的应用程序,然后注册一个密钥,以便您的游戏在构建时可以自动上传。与 Apple TestFlight 上的测试人员一起尝试您的游戏是完美的选择。","Default":"默认设置","Default (visible)":"默认 (可见)","Default camera behavior":"默认相机行为","Default height (in pixels)":"默认高度 (以像素为单位)","Default name for created objects":"创建对象的默认名称","Default orientation":"默认方向","Default size":"默认大小","Default skin":"默认皮肤","Default upload key (recommended)":"默认上传密钥(推荐)","Default value":"默认值","Default value of string variables":"字符串变量的默认值","Default visibility":"默认可见性","Default width (in pixels)":"默认宽度 (以像素为单位)","Define custom password":"定义自定义密码","Delete":"删除","Delete Entry":"删除条目","Delete Leaderboard":"删除排行榜","Delete account":"删除帐户","Delete build":"删除构建","Delete collision mask":"删除碰撞遮罩","Delete game":"删除游戏","Delete my account":"删除我的帐户","Delete object":"删除对象","Delete option":"删除选项","Delete project":"删除项目","Delete score {0} from {1}":function(a){return["\u4ECE ",a("1")," \u4E2D\u5220\u9664\u5F97\u5206 ",a("0")]},"Delete selection":"删除选中项","Delete the selected event(s)":"删除所选事件","Delete the selected instances from the scene":"从场景中删除选定实例","Delete the selected resource":"删除所选资源","Delete when out of particles":"当粒子消失时删除","Delete {gameName}":function(a){return["\u5220\u9664 ",a("gameName")]},"Dependencies":"依赖关系","Dependencies allow to add additional libraries in the exported games. NPM dependencies will be included for Electron builds (Windows, macOS, Linux) and Cordova dependencies will be included for Cordova builds (Android, iOS). Note that this is intended for usage in JavaScript events only. If you are only using standard events, you should not worry about this.":"依赖关系允许在导出的游戏中添加其他库。 NPM依赖关系将包含在Electron版本(Windows,macOS,Linux)中,而Cordova依赖关系将包含在Cordova版本(Android,iOS)中。请注意,这仅适用于JavaScript事件。如果仅使用标准事件,则不必为此担心。","Dependency type":"依赖类型","Deprecated":"已弃用","Deprecated action":"已弃用的操作","Deprecated actions and conditions warning":"已弃用的操作和条件警告","Deprecated condition":"已弃用的条件","Deprecated:":"已弃用:","Deprecation notice":"已弃用通知","Depth":"深度","Description":"描述","Description (markdown supported)":"描述 (支持markdown)","Description (will be prefixed by \"Compare\" or \"Return\")":"描述(将以“比较”或“返回”为前缀)","Deselect All":"取消全选","Desktop":"桌面","Desktop & Mobile landscape":"桌面和移动横屏模式","Desktop (Windows, macOS and Linux) icon":"桌面 (Windows, macOS 和 Linux) 图标","Desktop Full HD":"桌面全高清模式","Desktop builds":"桌面版本","Details":"细节","Developer options":"开发者选项","Development (debugging & testing on a registered iPhone/iPad)":"开发 (在已注册的 iPhone/iPad 上调试和测试)","Development tools required":"需要开发工具","Device orientation (for mobile)":"设备定位(适用于移动设备)","Diagnostic errors found":"发现诊断错误","Diagnostic report":"诊断报告","Dialog backdrop click behavior":"对话框背景点击行为","Dialogs":"对话框","Did it work?":"它工作了吗?","Did you forget your password?":"您忘记了您的密码吗?","Different objects":"不同的物体","Dimension":"维度","Direction":"方向 ","Direction #{i}":function(a){return["\u65B9\u5411 #",a("i")]},"Disable GDevelop splash at startup":"启动时禁用GDevelop splash","Disable effects/lighting in the editor":"在编辑器中禁用效果/照明","Disable login buttons in leaderboard":"禁用排行榜中的登录按钮","Discard changes and open events":"放弃更改并打开事件","Discard changes?":"放弃更改?","Discord":"Discord","Discord server, e.g: https://discord.gg/...":"Discord 服务器,例如: https://discord.gg/...","Discord user not found":"未找到 Discord 用户","Discord username":"Discord 用户名","Discord username sync failed":"Discord 用户名同步失败","Discover this bundle":"查看此包","Display GDevelop logo at startup (in exported game)":"启动时显示 GDevelop 徽标(导出游戏)","Display GDevelop watermark after the game is loaded (in exported game)":"游戏加载后显示 GDevelop 水印(在导出游戏中)","Display What's New when a new version is launched (recommended)":"显示新版本启动时的 \"新增功能\" (推荐)","Display as time":"显示为时间","Display assignment operators in Events Sheets":"在事件表中显示赋值运算符","Display both 2D and 3D objects (default)":"同时显示 2D 和 3D 对象 (默认)","Display effects/lighting in the editor":"在编辑器中显示效果/照明","Display object thumbnails in Events Sheets":"在事件表中显示对象的缩略图","Display profiling information in scene editor":"在场景编辑器中显示分析信息","Display save reminder after significant changes in project":"在项目发生重大更改后显示保存提醒","Displayed score":"显示分数","Distance":"距离","Do nothing":"什么都不做","Do you have a Patreon? Ko-fi? Paypal?":"您有一个Patreon吗?Ko-fi?Paypal?","Do you have game development experience?":"您有游戏开发经验吗?","Do you need any help?":"你需要帮助吗?","Do you really want to permanently delete your account?":"你真的想永久删除你的帐户吗?","Do you want to continue?":"你想继续吗?","Do you want to quit the customization? All your changes will be lost.":"是否要退出自定义?所有更改都将丢失。","Do you want to refactor your project?":"你想重构你的项目吗?","Do you wish to continue?":"您想要继续吗?","Documentation":"文档","Don't allow":"不允许","Don't have an account yet?":"还没有一个帐号?","Don't play the animation when the object is far from the camera or hidden (recommended for performance)":"当对象远离相机或隐藏时不要播放动画 (性能提升推荐)","Don't preload":"不要预加载","Don't save this project now":"现在不保存此项目","Don't show this warning again":"不要再次显示此警告","Donate link":"捐赠链接","Done":"完成","Done!":"完成!","Download":"下载","Download (APK)":"下载 (APK)","Download (Android App Bundle)":"下载 (Android App Bundle)","Download GDevelop desktop version":"下载GDevelop桌面版本","Download a copy":"下载副本","Download log files":"下载日志文件","Download pack sounds":"下载包声音","Download the Instant Game archive":"下载即时游戏存档","Download the certificate file (.cer) generated by Apple and upload it here. GDevelop will keep it securely stored.":"下载 Apple 生成的证书文件 (.cer) 并在此处上传。GDevelop 将安全地存储它。","Download the compressed game and resources":"下载压缩游戏和资源","Download the exported game":"下载导出的游戏","Download the latest version of GDevelop to check out this example!":"下载最新版本的 GDevelop 来查看这个示例!","Download the request file":"下载请求文件","Downloading game resources...":"正在下载资源","Draft created:":"草稿已创建:","Drag here to add to the scene":"拖到这里以添加到场景","Draw":"绘制","Draw the shapes relative to the object position on the scene":"绘制场景中相对于对象位置的形状","Duplicate":"重复","Duplicate <0>{duplicatedObjectName} as <1>{object_name} in scene <2>{scene_name}.":function(a){return["\u5728\u573A\u666F <2>",a("scene_name")," \u4E2D\u5C06 <0>",a("duplicatedObjectName")," \u590D\u5236\u4E3A <1>",a("object_name"),"\u3002"]},"Duplicate selection":"复制选中项","Duration":"期限","Each character, player, obstacle, background, item, etc. is an object. Objects are the building blocks of your game.":"每个角色、玩家、障碍物、背景、物品等都是一个对象。对象是游戏的基石。","Earn an exclusive badge":"获得专属徽章","Earn {0}":function(a){return["\u8D5A\u53D6 ",a("0")]},"Ease of use":"易于使用","Easiest":"最简单","Edit":"编辑","Edit Grid Options":"编辑网格选项","Edit Object Variables":"编辑对象变量","Edit behaviors":"编辑行为","Edit build name":"编辑构建名称","Edit children":"编辑子项","Edit collision masks":"编辑碰撞遮罩","Edit comment":"编辑评论","Edit details":"编辑详细信息","Edit effects":"编辑特效","Edit global variables":"编辑全局变量","Edit group":"编辑组","Edit layer effects...":"编辑图层特效...","Edit layer...":"编辑图层...","Edit loading screen":"编辑加载屏幕","Edit my profile":"编辑我的个人资料","Edit name":"编辑名称","Edit object":"编辑对象","Edit object behaviors...":"编辑对象行为...","Edit object effects...":"编辑对象特效...","Edit object group...":"编辑对象组...","Edit object variables":"编辑对象变量","Edit object variables...":"编辑对象变量","Edit object {0}":function(a){return["\u7F16\u8F91\u5BF9\u8C61 ",a("0")]},"Edit object...":"编辑对象","Edit or add variables...":"编辑或添加变量...","Edit parameters...":"编辑参数...","Edit points":"编辑点","Edit scene properties":"编辑场景属性","Edit scene variables":"编辑场景变量","Edit student":"编辑学生","Edit the default variant":"编辑默认变体","Edit this action events":"编辑此动作事件","Edit this behavior":"编辑此行为","Edit this condition events":"编辑此条件事件","Edit variables...":"编辑变量...","Edit with Jfxr":"使用 Jfxr 编辑","Edit with Piskel":"使用 Piskel 编辑","Edit with Yarn":"用 Yarn 编辑","Edit your GDevelop profile":"编辑您的 GDevelop 资料","Edit your profile and fill your discord username to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"编辑您的个人资料并填写您的 Discord 用户名以在 [GDevelop Discord](https://discord.gg/gdevelop) 上领取您的角色。","Edit your profile to pick a username!":"编辑您的个人资料,选择一个用户名!","Edit {0}":function(a){return["\u7F16\u8F91 ",a("0")]},"Edit {objectName}":function(a){return["\u7F16\u8F91 ",a("objectName")]},"Editing the game.":"编辑游戏。","Editor":"编辑","Editor without transitions":"没有切换的编辑器","Education curriculum and resources":"教育课程和资源","Educational":"教育","Effect name:":"效果名称:","Effects":"特效","Effects cannot have empty names":"效果不能有空名称","Effects create visual changes to the object.":"特效会对对象进行视觉更改。","Either this game is not registered or you are not its owner, so you cannot see its builds.":"要么这个游戏没有注册,要么你不是它的所有者,所以你看不到它的构建。","Else":"Else","Else if":"Else if","Email":"电子邮件","Email sent to {0}, waiting for validation...":function(a){return["\u7535\u5B50\u90AE\u4EF6\u5DF2\u53D1\u9001\u81F3 ",a("0"),"\uFF0C\u7B49\u5F85\u9A8C\u8BC1..."]},"Email verified":"电子邮件已验证","Embedded file name":"嵌入文件名","Embedded help and tutorials":"嵌入式帮助和教程","Empty free text":"空的自由文本","Empty group":"空组","Empty project":"空项目","Enable \"Close project\" shortcut ({0}) to close preview window":function(a){return["\u542F\u7528\"\u5173\u95ED\u5DE5\u7A0B\"\u5FEB\u6377\u952E(",a("0"),") \u6765\u5173\u95ED\u9884\u89C8\u7A97\u53E3"]},"Enable ads and revenue sharing on the game page":"在游戏页面启用广告和收益分成","Enabled":"已启用","End of jam":"jam 结束","End opacity (0-255)":"透明度","Enforce only auto-generated player names":"仅强制执行自动生成的玩家名称","Ensure that you are connected to internet and that the URL used is correct, then try again.":"请确保您已连接到互联网,并确保所使用的 URL 正确,然后再试一次。","Ensure this scene has the same objects, behaviors and variables as the ones used in these events.":"确保该场景具有与这些事件中使用的相同的对象、行为和变量。","Ensure you don't have any typo in your username and that you have joined the GDevelop Discord server.":"确保您的用户名没有任何拼写错误,并且您已加入 GDevelop Discord 服务器。","Enter a query and press Search to find matches across all event sheets in your project.":"输入查询并按搜索,以在您项目中的所有事件表中查找匹配项。","Enter a version in the game properties.":"在游戏属性中输入一个版本。","Enter the effect name":"输入效果名称","Enter the expression parameters":"输入表达式参数","Enter the leaderboard id":"输入排行榜 id","Enter the leaderboard id as a text or an expression":"输入排行榜ID作为文本或表达式","Enter the name of an object.":"输入一个对象的名称","Enter the name of the object":"输入对象的名称","Enter the parameter name (mandatory)":"输入参数名称(强制性)","Enter the property name":"输入属性名","Enter the sentence that will be displayed in the events sheet":"输入将会在事件表中被显示的句子","Enter the text to be displayed":"输入要显示的文本","Enter the text to be displayed by the object":"输入要由对象显示的文本","Enter your Discord username":"输入您的 Discord 用户名","Enter your code here":"在此处输入您的代码","Erase":"擦除","Erase {existingInstanceCount} instance(s) in scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u5220\u9664 ",a("existingInstanceCount")," \u4E2A\u5B9E\u4F8B\u3002"]},"Error":"错误","Error loading Auth Keys.":"加载身份验证密钥时出错。","Error loading certificates.":"加载证书时出错。","Error retrieving the examples":"获取示例时出错","Error retrieving the extensions":"获取扩展时出错","Error when claiming asset pack":"领取资产包时出错","Error while building of the game. Check the logs of the build for more details.":"构建游戏时出错。检查构建日志以获取更多详细信息。","Error while building the game. Check the logs of the build for more details.":"构建游戏时出错。检查构建日志以获取更多详细信息。","Error while building the game. Try again later. Your internet connection may be slow or one of your resources may be corrupted.":"构建游戏时出错。稍后再试。您的互联网连接速度可能很慢,或者您的资源之一可能已损坏。","Error while checking update":"检查更新时出错","Error while compressing the game.":"压缩游戏时出错。","Error while downloading the game resources. Check your internet connection and that all resources of the game are valid in the Resources editor.":"下载游戏资源时出错。检查您的互联网连接,确保游戏的所有资源在资源编辑器中均有效。","Error while exporting the game.":"导出游戏时出错。","Error while loading builds":"加载构建时出错","Error while loading the Play section. Verify your internet connection or try again later.":"在加载播放部分时出现错误。请检查您的互联网连接或稍后再试。","Error while loading the Spine Texture Atlas resource ( {0} ).":function(a){return["\u52A0\u8F7D Spine \u7EB9\u7406\u56FE\u96C6\u8D44\u6E90 ( ",a("0")," ) \u65F6\u51FA\u9519\u3002"]},"Error while loading the Spine resource ( {0} ).":function(a){return["\u52A0\u8F7D Spine \u8D44\u6E90 ( ",a("0")," ) \u65F6\u51FA\u9519\u3002"]},"Error while loading the asset. Verify your internet connection or try again later.":"加载资产时出错。请验证您的网络连接或稍后再试。","Error while loading the collaborators. Verify your internet connection or try again later.":"加载合作者时出错。请验证您的网络连接或稍后再试。","Error while loading the marketing plans. Verify your internet connection or try again later.":"加载营销计划时出错。请验证您的互联网连接或稍后重试。","Error while uploading the game. Check your internet connection or try again later.":"上传游戏时出错。请检查您的互联网连接或稍后重试。","Escape key behavior when editing an parameter inline":"编辑内联参数时转义密钥行为","Evaluating the game logic":"评估游戏逻辑","Event sentences":"事件句子","Events":"事件","Events Sheet":"活动表","Events analysis":"事件分析","Events define the rules of a game.":"事件定义了游戏规则。","Events functions extension":"事件功能扩展","Events that will be run at every frame (roughly 60 times per second), after the events from the events sheet of the scene.":"在场景事件表中的事件之后,将在每帧 (每秒约60次) 上运行的事件。","Events that will be run at every frame (roughly 60 times per second), before the events from the events sheet of the scene.":"在场景事件表中的事件之前,将在每帧 (每秒大约60次) 上运行事件。","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, after the events from the events sheet.":"在事件表上的事件之后,将会在每一帧(大约每秒60次)为每个有此行为附着的对象而运行的事件。","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, before the events from the events sheet are launched.":"在事件表上的事件加载之前,将会在每一帧(大约每秒60次)为每个有此行为附着的对象而运行的事件。","Events that will be run at every frame (roughly 60 times per second), for every object, after the events from the events sheet.":"在事件表中的事件之后,对于每个对象,将在每一帧(大约每秒 60 次)运行的事件。","Events that will be run once when a scene is about to be unloaded from memory. The previous scene that was paused will be resumed after this.":"当一个场景要从内存中被卸载时将运行一次的事件。 在此之前被暂停的场景将在此之后恢复。","Events that will be run once when a scene is paused (another scene is run on top of it).":"当一个场景被暂停时将运行一次的事件 ( 另一个场景在此场景上运行) 。","Events that will be run once when a scene is resumed (after it was previously paused).":"当一个场景被恢复时( 之前被暂停后) 将运行一次的事件。","Events that will be run once when a scene of the game is loaded, before the scene events.":"此事件将会在一个游戏场景加载时执行一次,先于该场景的事件。","Events that will be run once when the behavior is deactivated on an object (step events won't be run until the behavior is activated again).":"当在一个对象上停用该行为时,将运行一次的事件(在再次激活该行为之前,不会运行步进事件) 。","Events that will be run once when the behavior is re-activated on an object (after it was previously deactivated).":"当在一个对象上重新激活该行为时(之前已被停用),将运行一次的事件。","Events that will be run once when the first scene of the game is loaded, before any other events.":"在加载游戏的第一个场景时,在任何其它事件之前,将运行一次的事件。","Events that will be run once, after the object is removed from the scene and before it is entirely removed from memory.":"对象从场景中被移除之后,并从内存中被全部删除之前,将会运行一次的事件。","Events that will be run once, when an object is created with this behavior being attached to it.":"当一个对象有此行为附着而被创造时,将会运行一次的事件。","Events that will be run once, when an object is created.":"创建对象时将运行一次的事件。","Events that will be run when the preview is being hot-reloaded.":"预览热加载时将运行的事件。","Every animation from the GLB file is already in the list.":"GLB 文件中的每个动画都已在列表中。","Every animation from the Spine file is already in the list.":"Spine 文件中的每个动画都已在列表中。","Every child of an array must be the same type.":"数组中的每个子项必须是同一类型。","Ex: $":"例如:$","Ex: coins":"例如:硬币","Examining the behaviors":"检查行为","Example: Check if the object is flashing.":"示例:检查对象是否正在闪烁。","Example: Equipped shield name":"示例:装备的护盾名称","Example: Flash the object":"示例:让对象闪烁","Example: Is flashing":"示例:正在闪烁","Example: Make the object flash for 5 seconds.":"示例:使对象闪烁5秒钟。","Example: Remaining life":"示例:剩余生命","Example: Return the name of the shield equipped by the player.":"示例:返回玩家装备的盾牌名称。","Example: Return the number of remaining lives for the player.":"示例:返回玩家的剩余生命数。","Example: Use \"New Action Name\" instead.":"示例:使用\"新操作名称\"替代。","Examples ({0})":function(a){return["\u793A\u4F8B (",a("0"),")"]},"Exchange your earnings with GDevelop credits, and use them on the GDevelop store":"将您的收入兑换成 GDevelop 积分,并在 GDevelop 商店中使用它们","Exclude attribution requirements":"排除归因要求","Existing behaviors":"现有行为","Existing effects":"现有效果","Existing parameters":"现有参数","Existing properties":"现有属性","Exit without saving":"不保存退出","Expand All to Level":"全部展开到级别","Expand all sub folders":"展开所有子文件夹","Expand inner area with parent":"使用父级扩展内部区域","Expected parent event":"预期的父事件","Experiment with the leaderboard colors using the playground":"使用游乐场上的排行榜颜色进行实验","Experimental":"实验性","Experimental extension":"实验性扩展","Expert":"专家","Explain and give some examples of what can be achieved with this extension.":"解释并举例说明使用此扩展可以实现什么。","Explain what the behavior is doing to the object. Start with a verb when possible.":"解释行为对对象做了什么。尽可能以动词开头。","Explanation after an object is installed from the store":"从商店安装对象后的说明","Explore":"探索","Explore by category":"按类别浏览","Exploring the game.":"探索游戏。","Export (web, iOS, Android)...":"导出 (网络、iOS、Android)……","Export HTML5 (external websites)":"导出 HTML5(外部网站)","Export as a HTML5 game":"导出为 HTML5 游戏","Export as a pack":"导出为包","Export as assets":"导出为资产","Export extension":"导出扩展","Export failed. Check that the output folder is accessible and that you have the necessary permissions.":"导出失败。请检查输出文件夹是否可访问,以及您是否具有必要的权限。","Export game":"导出游戏","Export in progress...":"正在导出……","Export name":"导出名称","Export the scene objects to a file and learn more about the submission process in the documentation.":"将场景对象导出到文件并在文档中了解有关提交过程的更多信息。","Export to a file":"导出到文件","Export your game":"导出你的游戏","Export {0} assets":function(a){return["\u5BFC\u51FA ",a("0")," \u8D44\u4EA7"]},"Exporting...":"正在导出...","Exports":"导出","Expression":"表达式","Expression and condition":"表达式和条件","Expression used to sort instances before iterating. It will be evaluated for each instance.":"用于在迭代之前对实例进行排序的表达式。它将针对每个实例进行评估。","Extend":"扩展","Extend Featuring":"扩展功能","Extend width or height to fill screen (without cropping the game area)":"扩展宽度或高度以填充屏幕 (不裁剪游戏区域)","Extension":"扩展","Extension (storing the custom object)":"扩展 (存储自定义对象)","Extension containing the new function":"包含新功能的扩展","Extension global variables":"扩展全局变量","Extension name":"扩展名","Extension scene variables":"扩展场景变量","Extension update":"扩展更新","Extension updates":"扩展更新","Extension variables":"扩展变量","Extensions":"扩展","Extensions ({0})":function(a){return["\u6269\u5C55 (",a("0"),")"]},"Extensions search":"扩展搜索","External events":"外部事件","External layout":"外部布局","External layout name":"外部布局名称","External layouts":"外部布局","Extra source files (experimental)":"额外源文件 (实验性)","Extract":"提取","Extract Events to a Function":"提取事件给函数","Extract as a custom object":"提取为自定义对象","Extract as an external layout":"提取为外部布局","Extract the events in a function":"从函数中提取事件","Extreme score must be equal or higher than {extremeAllowedScoreMin}.":function(a){return["\u6781\u7AEF\u5206\u6570\u5FC5\u987B\u7B49\u4E8E\u6216\u5927\u4E8E ",a("extremeAllowedScoreMin"),"\u3002"]},"Extreme score must be lower than {extremeAllowedScoreMax}.":function(a){return["\u6781\u7AEF\u5206\u6570\u5FC5\u987B\u5C0F\u4E8E ",a("extremeAllowedScoreMax"),"\u3002"]},"FPS:":"帧率","Facebook":"Facebook","Facebook Games":"Facebook游戏","Facebook Instant Games":"Facebook 即时游戏","False":"False","False (not checked)":"否(不选中)","Far plane distance":"远平面距离","Featuring already active":"功能已经激活","Feedbacks":"反馈","Field of view (in degrees)":"视野 (以度数为单位)","File":"文件","File history":"文件历史记录","File name":"文件名","File(s) from your device":"来自您设备的文件 (s)","Fill":"填充","Fill automatically":"自动填充","Fill bucket":"填充桶","Fill color":"填充颜色","Fill opacity (0-255)":"填充不透明度 (0-255)","Fill proportionally":"按比例填充","Filter the logs by group":"按组筛选日志","Filters":"过滤器","Find how to implement the most common game mechanics and more":"查找如何实施最常见的游戏机制以及更多","Find the complete documentation on everything":"查找所有内容的完整文档","Find the substitles in your language in the setting of each video.":"在每个视频的设置中找到您喜欢的语言的字幕。","Find your finished game on the “Build” section. Or restart the tutorial by clicking on the card.":"在“构建”部分找到您完成的游戏。或者通过单击卡片重新启动教程。","Finish and close":"完成并关闭","Finished":"已完成","Fire a Bullet":"发射一颗子弹","Fire bullets in an Asteroids game.":"在小行星游戏中发射子弹。","Fire bullets in this Asteroids game. Get ready for a Star Wars show.":"在这个小行星游戏中发射子弹。准备好了星球大战演示。","First (before other files)":"首先 (在其它文件之前)","First editor":"第一个编辑器","First name":"名字","Fit content to window":"使内容适合窗口","Fit to content":"适合内容","Fix those issues to get the campaign up!":"解决这些问题以启动活动!","Flip along Z axis":"沿 Z 轴翻转","Flip horizontally":"水平翻转","Flip vertically":"垂直翻转","Flow of particles (particles/seconds)":"粒子的流动 (粒子/秒)","Folders":"文件夹","Follow":"跟随","Follow GDevelop on socials and check your profile to get some free credits!":"关注 GDevelop 的社交媒体,检查您的个人资料以获取一些免费积分!","Follow a character with scrolling background.":"跟随一个具有滚动背景的角色。","Follow this Castlevania-type character with the camera, while the background scrolls.":"用摄像机跟随这个类似《恶魔城》类型的角色,同时背景滚动。","Font":"字体","Font resource":"字体资源","For Education":"用于教育","For Individuals":"用于个人","For Teams":"用于团队","For a given video resource, only one video will be played in memory and displayed. If you put this object multiple times on the scene, all the instances will be displaying the exact same video (with the same timing and paused/played/stopped state).":"一个指定的视频源,只有一个视频会在内存中显示。如果您多次在场景上放置,所有的实例都会用同样的暂停,播放,停止状态播放","For a pixel type font, you must disable the Smooth checkbox related to your texture in the game resources to disable anti-aliasing.":"对于像素类型的字体,您必须在游戏资源中禁用与您的纹理相关的平滑复选框,才能禁用抗锯齿。","For most games, the default automatic loading of resources will be fine. This action should only be used when trying to avoid loading screens from appearing between scenes.":"对于大多数游戏来说,默认自动加载资源就可以了。仅当尝试避免在场景之间出现加载屏幕时才应使用此操作。","For teachers and educators having the GDevelop Education subscription. Ready to use resources for teaching.":"对于有GDevelop 教育订阅的教师和教育工作者来说,可以准备好使用相关资源进行教学。","For the 3D change to take effect, close and reopen all currently opened scenes.":"要使 3D 更改生效,请关闭并重新打开所有当前打开的场景。","For the lifecycle functions to be executed, you need the extension to be used in the game, either by having at least one action, condition or expression used, or a behavior of the extension added to an object. Otherwise, the extension won't be included in the game.":"对于要执行的生命周期函数,你需要在游戏中使用该扩展,方法是:对加到一个对象上的某个扩展,至少使用一个动作、条件、表达式,或者一个行为。否则,该扩展将不会被包含到游戏中。","Force display both 2D and 3D objects":"强制显示 2D 和 3D 对象","Force display only 2D objects":"强制只显示2D对象","Force display only 3D objects":"强制只显示3D对象","Forfeit my redeemed subscription and continue":"放弃我已兑换的订阅并继续","Form sent with success. You should receive an email in the next minutes.":"表格发送成功。您应该会在接下来的几分钟内收到一封电子邮件。","Forum access":"论坛访问","Forum account not found":"论坛账户未找到","Forum sync failed":"论坛同步失败","Forums":"论坛","Forward (Additional button, typically the Browser Forward button)":"前进 (附加按钮,通常是浏览器前进按钮)","Found 1 match in 1 event sheet":"在1个事件表中找到1个匹配项","Found 1 match in {0} event sheets":function(a){return["\u5728",a("0"),"\u4E2A\u4E8B\u4EF6\u8868\u4E2D\u627E\u52301\u4E2A\u5339\u914D\u9879"]},"Found {totalMatchCount} matches in 1 event sheet":function(a){return["\u57281\u4E2A\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230",a("totalMatchCount"),"\u4E2A\u5339\u914D\u9879"]},"Found {totalMatchCount} matches in {0} event sheets":function(a){return["\u5728",a("0"),"\u4E2A\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230",a("totalMatchCount"),"\u4E2A\u5339\u914D\u9879"]},"Frame":"帧","Frame #{i}":function(a){return["\u5E27 #",a("i")]},"Free":"免费的","Free in-app tutorials":"免费应用内教程","Free instance":"免费实例","Free!":"免费的!","Freehand brush":"自由手刷","From the same author":"来自同一作者","Front face":"正面","Full Game Asset Packs":"完整游戏资源包","Full name":"全名","Full name displayed in editor":"编辑器中显示的全名","Fun":"有趣的","Function Configuration":"功能配置","Function name":"函数名","Function type":"函数类型:","Functions":"函数","GDevelop 5":"GDevelop 5","GDevelop Bundles":"GDevelop 捆绑包","GDevelop Cloud":"GDevelop 云","GDevelop Website":"GDevelop 网站","GDevelop app":"GDevelop 应用程序","GDevelop auto-save":"GDevelop 自动保存","GDevelop automatically saved a newer version of this project on {0}. This new version might differ from the one that you manually saved. Which version would you like to open?":function(a){return["GDevelop \u5728 ",a("0")," \u4E0A\u81EA\u52A8\u4FDD\u5B58\u6B64\u9879\u76EE\u7684\u65B0\u7248\u672C\u3002 \u8FD9\u4E2A\u65B0\u7248\u672C\u53EF\u80FD\u4E0D\u540C\u4E8E\u4F60\u624B\u52A8\u4FDD\u5B58\u7684\u7248\u672C\u3002\u4F60\u60F3\u8981\u6253\u5F00\u54EA\u4E2A\u7248\u672C\uFF1F"]},"GDevelop credits":"GDevelop 积分","GDevelop games on gd.games":"gd.games 上的 GDevelop 游戏","GDevelop is a full-featured, open-source game engine. Build and publish games for any mobile, desktop or web game store. It's super fast, easy to learn and powered by a community making it better every day.":"GDevelop 是一个全功能的、开放源码的游戏引擎。它可以为任何移动、桌面或网上游戏商店建立和发布游戏。 它是超快的、容易学习的,以及由社区提供动力的,每天都在变得越来越好。","GDevelop logo style":"GDevelop 徽标样式","GDevelop update ready":"GDevelop 更新已准备好","GDevelop update ready ({version})":function(a){return["GDevelop \u66F4\u65B0\u5DF2\u51C6\u5907\u597D (",a("version"),")"]},"GDevelop was created by Florian \"4ian\" Rival.":"GDevelop由Florian \"4ian\" Rival创建。","GDevelop was upgraded to a new version! Check out the changes.":"GDevelop已被升级到新版本!请查看更改。","GDevelop watermark placement":"GDevelop 水印位置","GDevelop website":"GDevelop网站","GDevelop will save your progress, so you can take a break if you need.":"GDevelop 将保存您的进度,因此您可以在需要时休息一下。","GDevelop's installation is corrupted and can't be used":"GDevelop 的安装已损坏,不能使用","GLB animation name":"GLB 动画名称","Game Dashboard":"游戏仪表板","Game Design":"游戏设计","Game Development":"定制游戏开发","Game Info":"游戏信息","Game Scenes":"游戏场景","Game already registered":"游戏已注册","Game background":"游戏背景","Game configuration has been saved":"游戏配置已保存","Game description":"游戏描述","Game earnings":"游戏收入","Game export":"游戏导出","Game for teaching or learning":"用于教学或学习的游戏","Game leaderboards":"游戏排行榜","Game mechanic":"游戏机制","Game name":"游戏名称","Game name in the game URL":"游戏URL中的游戏名称","Game not found":"找不到游戏","Game personalisation":"游戏个性化","Game preview \"{id}\" ({0})":function(a){return["\u6E38\u620F\u9884\u89C8 \"",a("id"),"\" (",a("0"),")"]},"Game properties":"游戏属性","Game resolution height":"游戏分辨率高度","Game resolution resize mode (fullscreen or window)":"游戏分辨率调整大小模式(全屏或窗口)","Game resolution width":"游戏分辨率宽度","Game scene size":"游戏场景大小","Game settings":"游戏设置","Game template not found":"找不到游戏模板","Game template not found - An error occurred, please try again later.":"未找到游戏模板 - 发生错误,请稍后重试。","Game templates will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this game template. (or restore your existing purchase).":"游戏模板将链接到您的用户帐户并可用于您的所有项目。登录或注册即可购买此游戏模板。(或恢复您现有的购买)。","Gamepad":"游戏手柄","Games":"游戏","Games to learn or teach something":"学习或教授东西的游戏","Gaming portals (Itch.io, Poki, CrazyGames...)":"游戏门户网站 (Itch.io、 Poki、 CrazyGames...)","General":"一般","General:":"常规","Generate a link":"生成一个链接","Generate a new link":"生成一个新链接","Generate a shareable link to your game.":"生成您的游戏的可共享链接。","Generate all your icons from 1 file":"从一个文件生成所有图标","Generate expression and action":"生成表达式和动作","Generate random name":"生成随机名称","Generate report at each preview":"每次预览时生成报告","Generating your student’s accounts...":"正在生成您的学生帐户...","Generation hint":"生成提示","Genres":"类型","Get Featuring":"获得功能","Get GDevelop Premium":"获取 GDevelop 高级版","Get Premium":"获得高级版","Get a GDevelop subscription to increase the limits.":"获取 GDevelop 订阅以增加限制。","Get a Gold or Pro subscription to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"获取 Gold 或 Pro 订阅以声明您在 [GDevelop Discord](https://discord.gg/gdevelop) 上的角色。","Get a Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"获取高级订阅以拥有更多的 AI 请求和 GDevelop 积分,以解锁引擎的额外好处。","Get a Pro subscription to invite collaborators into your project.":"获取专业订阅以邀请合作者加入您的项目。","Get a Sub":"获得一个子项","Get a pro subscription to get full leaderboard customization.":"获取专业版订阅以获得完整的排行榜定制。","Get a pro subscription to unlock custom CSS.":"获取专业订阅以解锁自定义 CSS。","Get a sample in your email":"在您的电子邮件中获取示例","Get a silver or gold subscription to disable GDevelop branding.":"获得银色或金色订阅以禁用 GDevelop 品牌。","Get a silver or gold subscription to unlock color customization.":"获取银色或金色订阅以解锁颜色定制。","Get a subscription":"获得订阅","Get a subscription to keep building with AI.":"获取订阅以继续使用 AI 进行创作。","Get a subscription to unlock this packaging.":"获取订阅以解锁此软件包。","Get access":"获取访问","Get access to an exclusive channel on the [GDevelop Discord](https://discord.gg/gdevelop) by subscribing to a Gold, Pro or Education plan.":"通过订阅 Gold、Pro 或教育计划获取对 [GDevelop Discord](https://discord.gg/gdevelop) 上独占频道的访问权限。","Get back online to browse the huge library of free and premium examples.":"返回在线以浏览大量免费和高级示例。","Get credit packs":"获取积分包","Get lesson with Edu":"与 Edu 一起上课","Get more GDevelop credits to keep building with AI.":"获取更多 GDevelop 积分以继续使用 AI 进行创作。","Get more credits":"获取更多积分","Get more leaderboards":"获取更多排行榜","Get more players":"获得更多玩家","Get more players on your game":"让更多玩家加入你的游戏","Get our teaching resources":"获取我们的教学资源","Get perks and cloud benefits when getting closer to your game launch. <0>Learn more":"临近游戏发布时获取额外福利和云优势。<0>了解更多","Get premium":"获得高级版","Get subscription":"获取订阅","Get the app":"获取应用程序","Get {0}!":function(a){return["\u83B7\u5F97 ",a("0"),"\uFF01"]},"Get {estimatedTotalPriceFormatted} worth of value for less!":function(a){return["\u4EE5\u66F4\u5C11\u7684\u4EF7\u683C\u83B7\u5F97 ",a("estimatedTotalPriceFormatted")," \u7684\u4EF7\u503C\uFF01"]},"GitHub repository":"GitHub 存储库","Github":"Github","Give feedback on a game!":"在游戏中提供反馈!","Global Groups":"全局组","Global Objects":"全局对象","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?":"全局元素有助于在多个场景中管理对象,推荐用于频繁使用的对象。此操作无法撤销。您要将其设置为全局组吗?","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?":"全局元素有助于在多个场景中管理对象,推荐用于频繁使用的对象。此操作无法撤销。您要将其设置为全局对象吗?","Global groups":"全局组","Global objects":"全局对象","Global objects in the project":"项目中的全局对象","Global search":"全局搜索","Global search (search in project)":"全局搜索(搜索项目中的内容)","Global variable":"全局变量","Global variables":"全局变量","Go back":"返回","Go back to {translatedExpectedEditor}{sceneMention} to keep creating your game.":function(a){return["\u8FD4\u56DE ",a("translatedExpectedEditor"),a("sceneMention")," \u7EE7\u7EED\u521B\u5EFA\u60A8\u7684\u6E38\u620F\u3002"]},"Go to [Apple Developer Certificates list](https://developer.apple.com/account/resources/certificates/list) and click on the + button. Choose **Apple Distribution** (for app store) or **Apple Development** (for testing on device). When requested, upload the request file you downloaded.":"转到 [Apple 开发者证书列表](https://developer.apple.com/account/resources/certificates/list) 并单击 + 按钮。选择 **Apple Distribution** (用于应用程序商店) 或 **Apple Development** (用于在设备上测试)。当请求时,上传您下载的请求文件。","Go to [Apple Developer Profiles list](https://developer.apple.com/account/resources/profiles/list) and click on the + button. Choose **App Store Connect** or **iOS App Development**. Then, choose *Xcode iOS Wildcard App ID*, then the certificate you created earlier. For development, you can choose [the devices you registered](https://developer.apple.com/help/account/register-devices/register-a-single-device/). Finish by downloading the generated file and upload it here so it can be stored securely by GDevelop.":"转到 [Apple 开发者配置文件列表](https://developer.apple.com/account/resources/profiles/list) 并单击 + 按钮。选择 **App Store Connect** 或 **iOS 应用程序开发**。然后,选择 *Xcode iOS Wildcard App ID*,然后选择您之前创建的证书。对于开发,您可以选择[您注册的设备](https://developer.apple.com/help/account/register-devices/register-a-single-device/)。下载生成的文件并将其上传到此处,以便 GDevelop 安全地存储它。","Go to first page":"转到第一页","Google":"谷歌","Google Play (or other stores)":"Google Play (或其他商店)","Got it":"明白了","Got it! I've put together a plan:":"明白了!我已制定计划:","Gravity on particles on X axis":"X轴粒子重力","Gravity on particles on Y axis":"Y轴粒子重力","Group name":"群组名称","Group name cannot be empty.":"组名不能为空。","Group: {0}":function(a){return["\u7B2C",a("0")," \u7EC4\uFF1A"]},"Groups":"组","HTML5":"HTML5","HTML5 (external websites)":"HTML5 (外部网站)","Had no players in the last week":"上周没有玩家","Had {countOfSessionsLastWeek} players in the last week":function(a){return["\u4E0A\u5468\u6709 ",a("countOfSessionsLastWeek")," \u540D\u73A9\u5BB6"]},"Has animations (JavaScript only)":"具有动画(仅限 JavaScript)","Have you changed your usage of GDevelop?":"您是否改变了 GDevelop 的使用方式?","Having the same collision masks for all animations will erase and reset all the other animations collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the animations of the object?":"对于所有动画具有相同的碰撞遮罩将擦除并重置所有其他动画的碰撞遮罩。这是无法撤消的。是否确实要在对象的所有动画中共享这些碰撞遮罩?","Having the same collision masks for all frames will erase and reset all the other frames collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the frames of the animation?":"对于所有帧具有相同的碰撞掩码将擦除并重置所有其他帧的碰撞掩码。这是无法撤消的。是否确实要在动画的所有帧之间共享这些碰撞遮罩?","Having the same points for all animations will erase and reset all the other animations points. This can't be undone. Are you sure you want to share these points amongst all the animations of the object?":"对所有动画具有相同的点将擦除和重置所有其他动画点。这是无法挽回的。您确定要在对象的所有动画中分享这些点吗?","Having the same points for all frames will erase and reset all the other frames points. This can't be undone. Are you sure you want to share these points amongst all the frames of the animation?":"对所有帧使用相同的点将擦除并重置所有其他帧点。这是无法挽回的。您确定要在动画的所有帧之间共享这些点吗?","Health bar":"生命值","Height":"高度","Help":"帮助","Help for this action":"此操作的帮助","Help for this condition":"此条件的帮助","Help page URL":"帮助页面URL","Help translate GDevelop":"帮助翻译 GDevelop","Help us improve by telling us what could be improved:":"请告诉我们哪些方面可以改进,以帮助我们改进:","Help us improve our learning content":"帮助我们改善学习内容","Here are your redemption codes:":"这是您的兑换码:","Here's how I'll tackle this:":"我将这样解决这个问题:","Hidden":"隐藏","Hidden on gd.games":"在 gd.games 上隐藏","Hide deprecated behaviors (prefer not to use anymore)":"隐藏废弃的行为(不再使用)","Hide details":"隐藏详情","Hide effect":"隐藏效果","Hide experimental behaviors":"隐藏实验性行为","Hide experimental extensions":"隐藏实验性扩展","Hide experimental objects":"隐藏实验对象","Hide lifecycle functions (advanced)":"隐藏生命周期函数(高级)","Hide other lifecycle functions (advanced)":"隐藏其他生命周期函数(高级)","Hide the AI assistant?":"隐藏 AI 助手?","Hide the layer":"隐藏图层","Hide the leaderboard":"隐藏排行榜","Hide the menu bar in the preview window":"在预览窗口中隐藏菜单栏","Hide this hint?":"隐藏此提示?","High quality":"高质量","Higher is better":"越高越好","Higher is better (max: {formattedScore})":function(a){return["\u8D8A\u9AD8\u8D8A\u597D(\u6700\u5927: ",a("formattedScore"),")"]},"Highlight background color":"突出显示背景颜色","Highlight text color":"突出显示文本颜色","Hobbyists and indie devs":"爱好者和独立开发者","Home page":"主页","Homepage":"首页","Horizontal anchor":"水平锚点","Horizontal flip":"水平翻转","Horror":"恐怖","Hours":"小时","How are you learning game dev?":"你是如何学习游戏开发的?","How are you working on your projects?":"您的项目进展如何?","How many students do you want to create?":"您想创建多少学生?","How to make my game more fun?":"如何让我的游戏更有趣?","How would you rate this chapter?":"你会如何评价这一章节?","Huge":"巨大","I am learning game development":"我正在学习游戏开发","I am teaching game development":"我正在教授游戏开发","I don’t have a specific deadline":"我没有具体的截止日期","I have encountered bugs or performance problems":"我遇到了错误或性能问题","I trust this project":"我信任这个项目","I want to add a leaderboard":"我想添加一个排行榜","I want to add an explosion when an enemy is destroyed":"我想在敌人被摧毁时添加爆炸效果","I want to create a main menu for my game":"我想为我的游戏创建一个主菜单","I want to display the health of my player":"我想显示我的玩家的生命值","I want to receive the GDevelop Newsletter":"我想收到 GDevelop 新闻通讯","I want to receive weekly stats about my games":"我想收到我的游戏的每周统计数据","I'll do it later":"我稍后再试","I'm building a video game or app":"我正在制作一个视频游戏或应用程序","I'm learning or teaching game development":"我正在学习或教授游戏开发","I'm struggling to create what I want":"我正在努力创造我想要的东西","I've broken this into steps — let me walk you through it:":"我已将其分解为几个步骤 - 让我为您讲解:","I've mapped out a plan — here's what I'll do:":"我已制定计划 - 这是我将要做的:","I've stopped using GDevelop":"我已经停止使用 GDevelop","I've thought this through — here's the plan:":"我已经考虑周全 - 这是计划:","IDE":"IDE(集成开发环境)","IPA for App Store":"应用商店的 IPA","IPA for testing on registered devices":"用于在注册设备上进行测试的 IPA","Icon URL":"图标 URL","Icon and [DEPRECATED] text":"图标和[已弃用]文本","Icon only":"仅图标","Icons":"图标","Identifier":"标识符","Identifier (text)":"标识符(文本)","Identifier name":"标识符名称","If activated, players won't be able to log in and claim a score just sent without being already logged in to the game.":"如果激活,玩家在未登录游戏的情况下将无法登录并领取刚刚发送的分数。","If checked, player names will always be auto-generated, even if the game sent a custom name. Helpful if you're having a leaderboard where you want full anonymity.":"如果选中,即使游戏发送了自定义名称,玩家名称也将始终自动生成。如果您想要完全匿名的排行榜,这会很有帮助。","If no previous condition or action used the specified object(s), the picked instances count will be 0.":"如果之前的条件或操作未使用指定的对象,则拾取的实例计数将为0。","If the parameter is a string or a number, you probably want to use the expressions \"GetArgumentAsString\" or \"GetArgumentAsNumber\", along with the conditions \"Compare two strings\" or \"Compare two numbers\".":"如果参数是字符串或数字,则可能要使用表达式“ 以字符串形式获取参数”或“ 获取参数作为数字”,以及条件“比较两个字符串”或“比较两个数字”。","If you are in a browser, ensure you close all GDevelop tabs or restart the browser.":"如果您在浏览器中,请确保关闭所有 GDevelop 标签或重启浏览器。","If you are on desktop, please re-install it by downloading the latest version from <0>the website":"如果您使用的是桌面版,请通过 <0>网站 下载最新版本重新安装","If you close this window while the build is being done, you can see its progress and download the game later by clicking on See All My Builds below.":"如果你在生成过程中关闭此窗口, 可在稍后通过单击下面的 \"查看所有我的生成\" 来查看其进度并下载游戏。","If you don't have access to it, restart GDevelop. If you still can't access it, please contact us.":"如果您无法访问,请重新启动 GDevelop。如果您仍然无法访问,请联系我们。","If you have a popup blocker interrupting the opening, allow the popups and try a second time to open the project.":"如果你有一个弹出屏蔽器中断了打开,允许弹出窗口,并尝试第二次打开项目。","If you skip this step, you can still do it manually later from the leaderboards panel in your Games Dashboard.":"如果您跳过这一步,您仍然可以在游戏仪表板的排行榜面板中手动进行操作。","Ignore":"忽略","Ignore and continue":"忽略并继续","Image":"图像","Image resource":"图像资源","Implementation":"实现","Implementation steps:":"实施步骤:","Implementing in-project monetization":"实现项目内货币化","Import":"导入","Import assets":"导入资产","Import extension":"导入扩展","Import images":"导入图像","Import one or more animations that are available in this Spine file.":"导入此 Spine 文件中可用的一个或多个动画。","Importing project resources":"导入项目资源","Importing resources outside from the project folder":"从项目文件夹外部导入资源","Improve and publish your Game":"改进并发布您的游戏","In around a year":"一年左右的时间里","In order to purchase a marketing boost, log-in and select a game in your dashboard.":"要购买营销推广,请登录并在仪表板中选择一款游戏。","In order to see your objects in the scene, you need to add an action \"Create objects from external layout\" in your events sheet.":"为了在场景中看到你的对象,你需要在事件列表中添加一个动作“从外部布局创建对象”。","In order to use these external events, you still need to add a \"Link\" event in the events sheet of the corresponding scene":"为了使用这些外部事件,您仍然需要在相应场景的事件表中添加一个“Link”事件","In pixels.":"以像素为单位。","In pixels. 0 to ignore.":"以像素为单位。0表示忽略。","In this tutorial you will learn:":"在这个教程中,您将学习:","In-app Tutorials":"应用内教程","In-game obstacles":"游戏中的障碍","Include events from":"从...插入事件","Include store extensions":"包含商店扩展","Included":"包括","Included in this bundle":"包含在这个捆绑包中","Included with GDevelop subscriptions":"包含在 GDevelop 订阅中","Incompatible with the object":"与对象不兼容","Increase seats":"增加席位","Increase version number to {0}":function(a){return["\u5C06\u7248\u672C\u53F7\u589E\u52A0\u5230 ",a("0")]},"Indent Scale in Events Sheet":"事件表中的缩进比例","Inferred type":"推断类型","Initial text of the variable":"变量的初始文本","Initial text to display":"要显示的初始文本","Input":"输入","Insert new...":"插入新的...","Inspect the game structure.":"检查游戏结构。","Inspectors":"检查器","Instagram":"Instagram","Install again":"再次安装","Install all the assets":"安装所有资产","Install font":"安装字体","Install in project":"在项目中安装","Install the missing assets":"安装缺失的资产","Installed as an app. No updates available.":"已作为应用程序安装。没有可用的更新。","Installing assets...":"正在安装资产...","Instance":"实例","Instance Variables":"实例变量","Instance properties":"实例属性","Instance variables":"实例变量","Instance variables overwrite the default values of the variables of the object.":"实例变量覆盖对象变量的默认值。","Instance variables:":"实例变量:","Instances":"实例","Instances List":"实例列表","Instances editor":"实例编辑器","Instances editor rendering":"实例编辑器渲染","Instances editor.":"实例编辑器。","Instances list":"实例列表","Instant":"即时","Instant Games":"即时游戏","Instant or permanent force":"立即或永久的力","Instead of <0>{0}":function(a){return["\u800C\u4E0D\u662F <0>",a("0"),""]},"Instruction":"指令","Instruction editor":"指令编辑器","Interaction Design":"交互设计","Interactive content":"互动内容","Intermediate":"中级","Intermediate course":"中级课程","Internal Name":"内部名称","Internal instruction names":"内部指令名称","Invalid email address":"无效的电子邮件地址","Invalid email address.":"无效的电子邮件地址。","Invalid file":"无效的文件","Invalid name":"无效的名称","Invalid parameters in events ({invalidParametersCount})":function(a){return["\u4E8B\u4EF6\u4E2D\u7684\u65E0\u6548\u53C2\u6570\uFF08",a("invalidParametersCount"),"\uFF09"]},"Invert Condition":"反转条件","Invert condition":"反转条件","Invitation already accepted":"邀请已被接受","Invitation sent to {lastInvitedEmail}.":function(a){return["\u9080\u8BF7\u5DF2\u53D1\u9001\u81F3 ",a("lastInvitedEmail"),"\u3002"]},"Invite":"邀请","Invite a student":"邀请一名学生","Invite a teacher":"邀请一名教师","Invite collaborators":"邀请合作者","Invite students":"邀请学生","Invite teacher":"邀请教师","Inviting a user will provide them admin capabilities over the student accounts, as well as all the subscription perks. Only accounts without an existing subscription can be invited.":"邀请用户将授予他们对学生账户的管理员权限,以及所有订阅特权。只有没有现有订阅的账户才能被邀请。","Is not published on gd.games":"未在 gd.gamp 上发布","Is published on gd.games":"在 gd.gamp 上发布","Is the average time a player spends in the game.":"玩家在游戏中平均停留的时间。","Is there anything that you struggle with while working on your projects?":"您在做项目时有遇到什么困难吗?","Isometric":"等轴测","It didn't do enough":"它做得不够。","It didn't work at all":"根本没有效果。","It is already installed/available in the project.":"它已在项目中安装/可用。","It is part of behavior <0/> from extension <1/>.":"<0/> 扩展程序 <1/> 这是行为的一部分。","It is part of extension <0/> {0} .":function(a){return["\u8FD9\u662F\u6269\u5C55 <0/> ",a("0")," \u7684\u4E00\u90E8\u5206\u3002"]},"It is part of object <0/> from extension <1/>.":"这是 <0/> 扩展 <1/> 对象的一部分。","It looks like the build has timed out, please try again.":"看起来构建已超时,请再试一次。","It seems you entered a name with a quote. Variable names should not be quoted.":"看起来你输入了一个带引号的名字。变量名不应该带引号。","It will be downloaded and installed automatically.":"将自动下载并安装。","It's missing a feature (please specify)":"它缺少一个功能 (请注明)","Italic":"斜体","Itch.io, Poki, CrazyGames...":"Itch.io、Poki、CrazyGames...","JSON resource":"JSON 资源","JavaScript file":"JavaScript 文件","JavaScript files are imported as is (no compilation and not available in JavaScript code block autocompletions). Make sure your extension is used by the game (at least one action/condition used in a scene), otherwise the files won't be imported.":"JavaScript 文件按原样导入 (没有编译,在JavaScript代码块自动完成中不可用)。确保游戏使用了您的扩展名(场景中至少使用了一个动作/条件),否则文件将不会被导入。","JavaScript files must be imported by an extension - by choosing it the extension properties. Otherwise, it won't be loaded by the game.":"JavaScript 文件必须由一个扩展导入 - 通过选择它的扩展属性。否则,它不会被游戏加载。","Join the discussion":"加入讨论","Joystick controls":"操纵杆控制","Json":"Json","Jump forward in time on creation (in seconds)":"在创建时向前跳转(以秒为单位)","Just now":"现在","Keep centered (best for game content)":"保持居中 (最适合游戏内容)","Keep learning":"继续学习","Keep ratio":"保持比率","Keep subscription":"保持订阅","Keep the new project linked to this game":"保持新项目与此游戏的链接","Keep their original location":"保留其原始位置","Keep top-left corner fixed (best for content that can extend)":"保持左上角固定 (最适合可扩展的内容)","Keyboard":"键盘","Keyboard Key (deprecated)":"键盘键 (已弃用)","Keyboard Key (text)":"键盘密钥 (文本)","Keyboard Shortcuts":"键盘快捷键","Keyboard key":"键盘键","Keyboard key (text)":"键盘键 (文本)","Label":"标签","Label displayed in editor":"编辑器中显示的名称","Lack of Graphics & Animation":"缺乏图形和动画","Lack of Marketing & Publicity":"缺乏营销和宣传","Lack of Music & Sound":"缺乏音乐和声音","Landscape":"横向显示","Language":"语言","Last (after other files)":"最后 (在其它文件之后)","Last edited":"上次编辑","Last edited:":"最后编辑:","Last modified":"上次修改时间","Last name":"姓氏","Last run collected on {0} frames.":function(a){return["\u5728 ",a("0")," \u5E27\u4E0A\u6536\u96C6\u7684\u6700\u540E\u4E00\u6B21\u8FD0\u884C\u3002"]},"Latest save":"最新保存","Launch network preview over WiFi/LAN":"通过 WiFi/LAN 启动网络预览","Launch new preview":"启动新预览","Launch preview in...":"启动预览...","Launch preview with debugger and profiler":"使用调试器(debugger)和配置文件启动预览","Launch preview with diagnostic report":"启动带有诊断报告的预览","Layer":"图层","Layer (text)":"图层(文本)","Layer effect (text)":"图层特效 (文本)","Layer effect name":"图层效果名称","Layer effect property (text)":"图层效果属性 (文本)","Layer effect property name":"图层效果属性名称","Layer properties":"图层属性","Layer where instances are added by default":"默认情况下添加实例的图层","Layers":"图层","Layers list":"图层列表","Layers:":"图层:","Layouts":"布局(layouts)","Leaderboard":"排行榜","Leaderboard (text)":"排行榜 (文本)","Leaderboard appearance":"排行榜外观","Leaderboard name":"排行榜名称","Leaderboard options":"排行榜选项","Leaderboards":"排行榜","Leaderboards help retain your players":"排行榜帮助保留你的玩家","Learn":"学习","Learn about revenue on gd.games":"了解在 gd.gams 上的收入","Learn all the game-building mechanics of GDevelop":"学习GDevelop的所有游戏构建机制","Learn by dissecting ready-made games":"通过解析现成的游戏来学习","Learn how to make <0>multiplayer games with GDevelop.":"学习如何使用 GDevelop 制作<0>多人游戏。","Learn how to use <0>leaderboards on GDevelop.":"学习如何在 GDevelop 上使用 <0>排行榜。","Learn more":"了解更多","Learn more about Instant Games publication":"了解更多关于即时游戏发布的信息","Learn more about manual builds":"了解有关手动构建的更多信息","Learn more about publishing to platforms":"了解有关发布到平台的更多信息","Learn section":"学习部分","Learn the fundamental principles of GDevelop":"学习GDevelop 的基本原理","Leave":"退出","Leave and lose all changes":"离开并丢失所有更改","Leave the customization?":"离开自定义?","Leave the tutorial":"离开教程","Left":"左","Left (primary)":"左 (主要)","Left bound":"左边界","Left bound should be smaller than right bound":"左边界应小于右边界","Left face":"左面","Left margin":"左边距","Length":"长度","Less than a month":"不到一个月","Let me lay out the steps:":"让我列出步骤:","Let the user select":"让用户选择","Let's finish your game, shall we?":"让我们完成你的游戏,好吗?","Let's go":"让我们来吧","Level {0}":function(a){return["\u7B49\u7EA7 ",a("0")]},"License":"许可证","Licensing":"许可协议","Lifecycle functions (advanced)":"生命周期函数(高级)","Lifecycle functions only included when extension used":"生命周期函数仅当使用扩展时才会被包含","Lifecycle methods":"生命周期方法","Lifetime access":"终身访问","Light (colored)":"浅色(着色)","Light (plain)":"浅色(平原)","Light object automatically put in lighting layer":"光照物件自动放入照明图层","Lighting settings":"照明设置","Limit cannot be empty, uncheck or fill a value between {extremeAllowedScoreMin} and {extremeAllowedScoreMax}.":function(a){return["\u6781\u9650\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u53D6\u6D88\u9009\u4E2D\u6216\u586B\u5199\u5728 ",a("extremeAllowedScoreMin")," \u548C ",a("extremeAllowedScoreMax")," \u4E4B\u95F4\u7684\u503C\u3002"]},"Limit scores":"限制分数","Limited time offer:":"限时优惠:","Line":"线","Line color":"线条颜色","Line height":"行高","Linear (antialiased rendering, good for most games)":"线性 (抗锯齿渲染, 适用于大多数游戏)","Lines length":"线条长度","Lines thickness":"线条厚度","Links can't be used outside of a scene.":"不能在场景外使用链接。","Linux (AppImage)":"Linux (AppImage)","Live Ops & Analytics":"实时运维与分析","Live preview (apply changes to the running preview)":"实时预览(应用更改到正在运行的预览)","Load autosave":"加载自动保存","Load local lesson":"加载本地课程","Load more":"加载更多","Load more...":"加载更多...","Loading":"加载","Loading Position":"加载位置","Loading course...":"加载课程...","Loading preview...":"加载预览...","Loading screen":"加载屏幕","Loading the game link...":"正在加载游戏链接...","Loading the game...":"正在加载游戏...","Loading your profile...":"正在加载您的个人资料...","Loading...":"正在加载……","Lobby":"大厅","Lobby configuration":"大厅配置","Local Variable":"局部变量","Local variables":"局部变量","Locate file":"定位文件","Location":"位置","Lock position/angle in the editor":"锁定编辑器中的位置/角度","Locked":"已锁定","Log in":"登录","Log in to your account":"登录到您的帐户","Log in to your account to activate your purchase!":"登录您的账户以激活您的购买!","Log-in to purchase these credits":"登录以购买这些积分","Log-in to purchase this course":"登录以购买此课程","Log-in to purchase this item":"登录以购买此项目","Login":"登录","Login now":"立即登录","Login with GDevelop":"使用 GDevelop 登录","Logo and progress fade in delay (in seconds)":"标志和进度延迟淡入淡出(秒)","Logo and progress fade in duration (in seconds)":"标志和进度淡入持续时间(秒)","Logout":"登出","Long":"长","Long description":"详细描述","Long press for more events":"长按可查看更多事件","Long press for quick menu":"长按可获取快捷菜单","Looks like your project isn't there!{0}Your project must be stored on your computer.":function(a){return["\u60A8\u7684\u9879\u76EE\u4F3C\u4E4E\u4E0D\u5728\u90A3\u91CC\uFF01",a("0"),"\u60A8\u7684\u9879\u76EE\u5FC5\u987B\u5B58\u50A8\u5728\u60A8\u7684\u8BA1\u7B97\u673A\u4E0A\u3002"]},"Loop":"循环","Loop Counter Variable":"循环计数器变量","Low quality":"低质量","Lower is better":"下方较好","Lower is better (min: {formattedScore})":function(a){return["\u8D8A\u4F4E\u8D8A\u597D(\u6700\u5C0F\uFF1A ",a("formattedScore"),")"]},"Make a character move like in a retro Pokemon game.":"让角色像复古的口袋妖怪游戏中一样移动。","Make a knight jump and run in this platformer game.":"在这个平台游戏中让骑士跳跃并奔跑。","Make a knight jump and run.":"让骑士跳跃并奔跑。","Make a minimal 3D shooter":"制作一个简单的 3D 射击游戏","Make an entire game":"制作整个游戏","Make asynchronous":"进行异步操作","Make complete games step by step":"逐步完成完整的游戏","Make it a Else for the previous event":"将其在上一个事件中设为 Else","Make private":"私密设置","Make public":"公开设置","Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.":"确保在图层效果中设置灯光,或者选择“无灯光效果”,否则对象将显示为黑色。","Make sure to verify all your events creating objects, and optionally add an action to set the Z order back to 0 if it's important for your game. Do you want to continue (recommended)?":"确保验证所有创建对象的事件,如果这对您的游戏很重要,则可以选择添加一个操作将 Z 顺序设置回 0。是否继续(推荐)?","Make sure to verify your events and variables that may rely on string variables defaulting to \"0\". Do you want to continue (recommended)?":"确保验证您的事件和变量,这些变量可能依赖于默认值为\"0\"的字符串变量。您想继续吗(推荐)?","Make sure you create your GitHub account, star the repository called 4ian/GDevelop, enter your username here and try again.":"确保您创建了您的GitHub帐户,在名为4ian/GDevelopup的存储库中添加星号,在此处输入您的用户名,然后重试。","Make sure you follow the GDevelop account and try again.":"确保您关注 GDevelop 帐户并重试。","Make sure you have a proper internet connection or try again later.":"确保您有正确的互联网连接或稍后重试。","Make sure you star the repository called 4ian/GDevelop with your GitHub user and try again.":"请确保将名为4ian/GDevelopup的存储库与您的GitHub用户一起加入,然后重试。","Make sure you subscribed to the GDevelop channel and try again.":"请确保您已订阅 GDevelop 频道,然后重试。","Make sure you're online, have a proper internet connection and try again. If you download and use GDevelop desktop application, you can also run previews without any internet connection.":"请确保您在线,有适当的互联网连接,然后重试。 如果您下载并使用 GDevelop 桌面应用程序,您也可以在没有网络连接的情况下运行预览。","Make sure your username is correct, follow the GDevelop account and try again.":"确保您的用户名正确,关注 GDevelop 帐户并重试。","Make sure your username is correct, subscribe to the GDevelop channel and try again.":"请确保您的用户名正确,订阅 GDevelop 频道并重试。","Make synchronous":"同步化","Make the leaderboard public":"公开排行榜","Make the purpose of the property easy to understand":"使该属性的目的易于了解","Make your game title":"制作你的游戏标题","Make your game visible to the GDevelop community and to the world with <0>Marketing Boosts.":"通过 <0>营销推广 让你的游戏在 GDevelop 社区和全世界可见。","Make your game visible to the GDevelop community and to the world with Marketing Boosts.":"通过营销推广,让你的游戏在 GDevelop 社区和全世界都可见。","Make your game visible to the GDevelop community and to the world with Marketing Boosts. <0>Read more about how they increase your views.":"通过营销推广,让你的游戏在 GDevelop 社区和全世界都可见。<0>阅读更多 关于他们如何提高您的浏览量。","Making \"{objectOrGroupName}\" global would conflict with the following scenes that have a group or an object with the same name:{0}Continue only if you know what you're doing.":function(a){return["\u4F7F\u201C",a("objectOrGroupName"),"\u201D\u5168\u5C40\u5316\u5C06\u4E0E\u4E0B\u5217\u5177\u6709\u76F8\u540C\u540D\u79F0\u7684\u7EC4\u6216\u5BF9\u8C61\u7684\u573A\u666F\u51B2\u7A81: ",a("0"),"\u53EA\u6709\u5728\u60A8\u77E5\u9053\u6B63\u5728\u505A\u4EC0\u4E48\u7684\u60C5\u51B5\u4E0B\u624D\u7EE7\u7EED\u3002"]},"Manage":"管理","Manage game online":"在线管理游戏","Manage leaderboards":"管理排行榜","Manage payments":"管理付款","Manage seats":"管理席位","Manage subscription":"管理订阅","Manual build":"手动构建","Mark all as read":"全部标记为已读","Mark all as solved":"全部标记为已解决","Mark as read":"标记为已读","Mark as unread":"标记为未读","Mark this function as deprecated to discourage its use.":"将此功能标记为已弃用以劝阻其使用。","Marketing":"市场营销","Marketing campaigns":"营销活动","Match case":"区分大小写","Maximum 2D drawing distance":"最大2D绘图距离","Maximum FPS (0 for unlimited)":"最大 FPS (0,无限制)","Maximum Fps is too low":"最大帧率太低","Maximum emitter force applied on particles":"施加在粒子上的最大发射力","Maximum number of particles displayed":"显示的最大粒子数","Maximum number of players per lobby":"每个大厅的最大玩家数量","Maximum score":"最大分数","Me":"我","Mean played time":"平均游戏时间","Measurement unit":"测量单位","Medium":"中","Medium quality":"中等质量","Memory Tracker Registry":"内存跟踪器注册表","Menu":"菜单","Mesh shapes are only supported for 3D model objects.":"仅支持3D模型对象的网格形状。","Message":"消息","Middle (Auxiliary button, usually the wheel button)":"中键 (辅助按钮,通常是轮键)","Minimize":"最小化","Minimum FPS":"最小FPS","Minimum Fps is too low":"最小帧太低","Minimum duration of the screen (in seconds)":"屏幕最小持续时间(秒)","Minimum emitter force applied on particles":"施加在粒子上的最小发射力","Minimum number of players to start the lobby":"启动大厅的最小玩家数量","Minimum score":"最小分数","Minutes":"分钟","Missing actions/conditions/expressions ( {missingInstructionsCount})":function(a){return["\u7F3A\u5C11\u64CD\u4F5C/\u6761\u4EF6/\u8868\u8FBE\u5F0F\uFF08",a("missingInstructionsCount"),"\uFF09"]},"Missing behaviors for object \"{objectName}\"":function(a){return["\u5BF9\u8C61 \u201C",a("objectName"),"\u201D \u7F3A\u5C11\u884C\u4E3A"]},"Missing instructions":"缺少指令","Missing objects":"缺少对象","Missing scene variables":"缺少场景变量","Missing some contributions? If you are the author, create a Pull Request on the corresponding GitHub repository after adding your username in the authors of the example or the extension - or directly ask the original author to add your username.":"缺少一些贡献? 如果你是作者, 在相应的 GitHub 仓库添加您的用户名或扩展的作者后创建合并请求 - 或直接要求原作者添加您的用户名。","Missing texture atlas name in the Spine file.":"Spine 文件中缺少纹理图集名称。","Missing texture for an atlas in the Spine file.":"Spine 文件中缺少图集的纹理。","Missing variables for object \"{objectName}\"":function(a){return["\u5BF9\u8C61 \u201C",a("objectName"),"\u201D \u7F3A\u5C11\u53D8\u91CF"]},"Mixed":"混合","Mixed values":"混合值","Mobile":"移动设备","Mobile portrait":"移动竖屏模式","Modifying":"正在修改","Month":"月","Monthly, {0}":function(a){return["\u6BCF\u6708, ",a("0")]},"Monthly, {0} per seat":function(a){return["\u6BCF\u6708\uFF0C\u6BCF\u4E2A\u5EA7\u4F4D",a("0")]},"More details (optional)":"更多细节(可选)","More than 6 months":"超过 6 个月","Most browsers will require the user to have interacted with your game before allowing any video to play. Make sure that the player click/touch the screen at the beginning of the game before starting any video.":"大多数浏览器将要求用户在允许任何视频播放之前与您的游戏互动。请确保玩家在游戏开始前点击/触摸屏幕。","Most monitors have a refresh rate of 60 FPS. Setting a maximum number of FPS under 60 will force the game to skip frames, and the real number of FPS will be way below 60, making the game laggy and impacting the gameplay negatively. Consider putting 60 or more for the maximum number or FPS, or disable it by setting 0.":"大多数显示屏都有60帧的刷新率。把最高帧数限制在60帧一下会造成闪帧,跳帧,产生负面影响,请让最高帧数大雨60帧或不限制","Most sessions (all time)":"大多数会议 (所有时间)","Most sessions (past 7 days)":"大多数会议 (过去 7 天)","Mouse button":"鼠标按键","Mouse button (deprecated)":"鼠标按钮 (已弃用)","Mouse button (text)":"鼠标按钮 (文本)","Move Events into a Group":"将事件添加到事件分组","Move down":"向下移动","Move events into a new group":"将事件移动到新组中","Move instances":"移动实例","Move like in retro Pokemon games.":"像在复古的宝可梦游戏中一样移动。","Move objects":"移动对象","Move objects from layer {0} to:":function(a){return["\u5C06\u5BF9\u8C61\u4ECE\u56FE\u5C42 ",a("0")," \u79FB\u52A8\u5230\uFF1A"]},"Move to bottom":"移动到底部","Move to folder":"移动到文件夹","Move to position {index}":function(a){return["\u79FB\u52A8\u5230\u4F4D\u7F6E ",a("index")]},"Move to top":"移动到顶部","Move up":"向上移动","Move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5C06 ",a("existingInstanceCount")," \u4E2A <0>",a("object_name")," \u5B9E\u4F8B\u79FB\u81F3 ",a("0"),"\uFF08\u5C42\uFF1A",a("1"),"\uFF09\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u3002"]},"Movement":"移动","Multiline":"多行文本","Multiline text":"多行文本","Multiplayer":"多人游戏","Multiplayer lobbies":"多人游戏大厅","Multiple files, saved in folder next to the main file":"多个文件,保存在主文件夹旁边的文件夹","Multiple frames":"多帧","Multiple states":"多个状态","Multiply scores with collectibles.":"用收集品来乘以分数。","Music":"音乐","Musics will only be played if the user has interacted with the game before (by clicking/touching it or pressing a key on the keyboard). This is due to browser limitations. Make sure to have the user interact with the game before using this action.":"只有当用户与游戏交互过(通过点击/触摸或按下一个键盘按键),才能播放音乐。这是浏览器的限制。请确保使用该动作前,先让用户与游戏进行交互。","My Profile":"我的个人资料","My manual save":"我的手动保存","My profile":"我的个人资料","MyObject":"我的对象","NPM":"NPM","Name":"名称","Name (optional)":"名称 (可选)","Name displayed in editor":"编辑器中显示的名称","Name of the external layout":"外部布局名称","Name version":"名称版本","Narrative & Writing":"叙述与写作","Near plane distance":"近平面距离","Nearest (no antialiasing, good for pixel perfect games)":"最近 (无抗锯齿, 适合高像素游戏)","Need latest GDevelop version":"需要最新版本的 GDevelop","Need more?":"需要更多吗?","Network":"网络","Never":"从不","Never preload":"从不预加载","Never unload":"从不卸载","Never unload (default)":"从不卸载(默认)","New":"新的","New 3D editor":"新 3D 编辑器","New Apple Certificate/Profile":"新的 Apple 证书/配置文件","New Auth Key (App Store upload)":"新的身份验证密钥 (应用商店上传)","New Event Below":"在下方添加新的事件","New Object dialog":"新建对象对话框","New chat":"新聊天","New extension name":"新扩展名称","New group name":"新组名","New interactive services for clients":"为客户提供新的交互服务","New lesson every month with the Education subscription":"通过教育订阅,每月都有新课程","New object":"新建对象","New object from scratch":"从零开始创建新对象","New resource":"新资源","New variant":"新变体","Next":"下一个","Next actions (and sub-events) will wait for this action to be finished before running.":"下一个动作(和子事件)将等待此动作完成后才能运行。","Next page":"下一页","Next: Game logo":"下一步:游戏标志","Next: Tweak Gameplay":"下一步:调整游戏玩法","No":"否","No GDevelop user with this email can be found.":"找不到具有该电子邮件地址的 GDevelop 用户。","No access to project save":"无法访问项目保存","No atlas image configured.":"未配置地图集图像。","No behavior":"无行为","No bio defined.":"没有定义bio。","No changes to the game size":"游戏大小没有变化","No children":"没有子项","No cycle":"没有循环","No data to show yet. Share your game creator profile with more people to get more players!":"尚无数据可显示。与更多人分享您的游戏创建者资料以吸引更多玩家!","No entries":"没有参赛作品","No experience at all":"完全没有经验","No forum account was found with email {0}. Make sure you have created an account on the GDevelop forum with this email.":function(a){return["\u672A\u627E\u5230\u4F7F\u7528\u90AE\u7BB1 ",a("0")," \u7684\u8BBA\u575B\u8D26\u6237\u3002\u8BF7\u786E\u4FDD\u60A8\u5DF2\u4F7F\u7528\u8BE5\u90AE\u7BB1\u5728 GDevelop \u8BBA\u575B\u4E0A\u521B\u5EFA\u8D26\u6237\u3002"]},"No game matching your search.":"没有匹配您搜索的游戏。","No information about available updates.":"没有可用更新的信息。","No inspector, choose another element in the list or toggle the raw data view.":"没有检查器, 请在列表中选择另一个元素或切换原始数据视图。","No issues found in your project.":"在您的项目中未发现问题。","No leaderboard chosen":"没有选择排行榜","No leaderboards":"没有排行榜","No lighting effect":"无灯光效果","No link defined.":"未定义链接。","No matches found for \"{0}\".":function(a){return["\u672A\u627E\u5230\u4E0E\"",a("0"),"\"\u76F8\u5339\u914D\u7684\u9879\u3002"]},"No new animation":"没有新动画","No options":"没有选项","No preview running. Run a preview and you will be able to inspect it with the debugger":"没有预览正在运行。运行预览,您将能够使用调试器检查它","No project save available":"没有可用的项目保存","No project save is available for this request message.":"此请求消息没有可用的项目保存。","No project to open":"没有项目要打开","No projects found for this game. Open manually a local project to have it added to the game dashboard.":"没有找到此游戏的项目。请手动打开一个本地项目,将其添加到游戏仪表板中。","No projects yet.":"尚无项目。","No recent project":"没有最近的项目","No result":"无结果","No results":"没有结果","No results returned for your search. Try something else or typing at least 2 characters.":"没有返回搜索结果。请尝试其他内容或输入至少 2 个字符。","No results returned for your search. Try something else!":"您的搜索未返回任何结果。请尝试其他内容!","No results returned for your search. Try something else, browse the categories or create your object from scratch!":"没有返回搜索结果。尝试其他方法,浏览类别或从零开始创建您的对象!","No shortcut":"无快捷方式","No similar asset was found.":"未发现类似资产。","No thumbnail":"无缩略图","No thumbnail for your game, you can update it in your Game Dashboard!":"您的游戏没有缩略图,您可以在游戏仪表板中更新它!","No update available. You're using the latest version!":"没有可用更新。您正在使用最新版本!","No uses left":"没有剩余使用次数","No variable":"无变量","No warning":"无警告","No, close project":"不,关闭项目","None":"无","Not applicable":"不适用","Not applicable to this plan":"不适用于此计划","Not compatible":"不兼容","Not installed as an app. No updates available.":"未作为应用程序安装。没有可用的更新。","Not now, thanks!":"不是现在,谢谢!","Not on mobile":"不在移动设备上","Not published":"未发布","Not set":"未设置","Not stored":"未存储","Not sure how many credits you need? Check <0>this guide to help you decide.":"不确定您需要多少积分?请检查<0>本指南,以帮助您决定。","Not visible":"不可见","Note that the distinction between what is a mobile device and what is not is becoming blurry (with devices like iPad pro and other \"desktop-class\" tablets). If you use this for mobile controls, prefer to check if the device has touchscreen support.":"请注意,什么是移动设备与什么不是移动设备之间的区别变得越来越模糊(使用iPad Pro和其他“台式机”平板电脑这样的设备)。如果将此用于移动控件,则最好检查设备是否支持触摸屏。","Note that this option will only have an effect when saving your project on your computer's filesystem from the desktop app. Read about [using Git or GitHub with projects in multiple files](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/).":"请注意,只有当从桌面应用程序将项目保存到计算机的文件系统上时,此选项才会生效。阅读[在多个文件中使用Git或GitHub项目](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/)。","Note: write _PARAMx_ for parameters, e.g: Flash _PARAM1_ for 5 seconds":"格式:例如 闪烁_PARAM1_持续_PARAM2_秒。_PARAMx_是必须,下面列表中有几个参数这里就填几个PARAM","Nothing corresponding to your search":"没有找到与您的搜索相对应的内容","Nothing corresponding to your search. Try browsing the list instead.":"没有找到您要搜索的内容。您可以尝试先浏览下列表。","Nothing to configure for this behavior.":"此行为无需配置。","Nothing to configure for this effect.":"此效果无需配置。","Notifications":"通知","Number":"数字","Number between 0 and 1":"0到1之间的数字","Number from a list of options (number)":"选项列表中的数字 (数字)","Number of entries to display":"要显示的条目数","Number of particles in tank (-1 for infinite)":"坦克中的粒子数 (-1表示无限)","Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.":"参与游戏的玩家人数。观众在包括加载屏幕的情况下停留至少60秒时,被视为玩家。","Number of seats":"座位数","Number of students":"学生人数","OK":"OK","OWNED":"拥有","Object":"对象/物体","Object Configuration":"对象配置","Object Groups":"对象组","Object Name":"对象名称","Object Variables":"对象变量","Object animation (text)":"对象动画 (文本)","Object animation name":"对象动画名称","Object editor":"对象编辑器","Object effect (text)":"对象效果 (文本)","Object effect name":"对象效果名称","Object effect property (text)":"对象效果属性 (文本)","Object effect property name":"对象效果属性名称","Object filters":"对象过滤器","Object group":"对象组","Object group properties":"对象组属性","Object groups":"对象组","Object groups list":"对象组列表","Object name":"对象名称","Object on which this behavior can be used":"此行为可用的对象","Object point (text)":"对象点(文本)","Object point name":"对象点名称","Object properties":"对象属性","Object skin name":"对象皮肤名称","Object type":"对象类型","Object variable":"对象变量","Object's children":"对象的子项","Object's children groups":"对象的子组","Object's groups":"对象组","Objects":"对象","Objects and characters":"对象和角色","Objects created using events on this layer will be given a \"Z order\" of {0}, so that they appear in front of all objects of this layer. You can change this using the action to change an object Z order, after using an action to create it.":function(a){return["\u4F7F\u7528\u8BE5\u5C42\u4E0A\u7684\u4E8B\u4EF6\u521B\u5EFA\u7684\u5BF9\u8C61\u5C06\u88AB\u8D4B\u4E88 ",a("0")," \u7684\u201CZ \u987A\u5E8F\u201D\uFF0C\u4EE5\u4FBF\u5B83\u4EEC\u51FA\u73B0\u5728\u8BE5\u5C42\u6240\u6709\u5BF9\u8C61\u7684\u524D\u9762\u3002\u5728\u4F7F\u7528\u52A8\u4F5C\u521B\u5EFA\u5BF9\u8C61\u540E\uFF0C\u60A8\u53EF\u4EE5\u4F7F\u7528\u66F4\u6539\u5BF9\u8C61 Z \u987A\u5E8F\u7684\u52A8\u4F5C\u6765\u66F4\u6539\u6B64\u8BBE\u7F6E\u3002"]},"Objects groups":"对象组","Objects inside custom objects can't contain the following behaviors:":"自定义对象内部的对象不能包含以下行为:","Objects list":"对象列表","Objects on {0}":function(a){return[a("0")," \u4E0A\u7684\u5BF9\u8C61"]},"Objects or groups being directly referenced in the events: {0}":function(a){return["\u4E8B\u4EF6\u4E2D\u76F4\u63A5\u5F15\u7528\u7684\u5BF9\u8C61\u6216\u7EC4: ",a("0")]},"Objects used with wrong actions or conditions":"在错误的行为或条件下使用的对象","Official Game Dev courses":"官方游戏开发课程","Oh no! Your subscription from the redemption code has expired. You can renew it by redeeming a new code or getting a new subscription.":"哦不!您通过兑换码订阅已过期。您可以通过兑换新代码或获取新订阅来续订。","Ok":"确定","Ok, don't show me this again":"好的,不要再给我展示这个了","Old, legacy upload key (only if you used to publish your game as an APK and already activated Play App Signing)":"旧的传统上传密钥(仅当您曾将游戏发布为APK并已激活Play App签名时)","Omit":"省略","On Itch and/or Newgrounds":"在 Itch 和/或 Newgrounds","On Poki and/or CrazyGames":"在 Poki 和/或 CrazyGames","On Steam and/or Epic Games":"在 Steam 和/或 Epic Games","On game page only":"仅在游戏页面上","On my own":"独自一人","Once removed, you'll need to generate a new certificate. Provisioning profiles will also be removed.":"删除后,您需要生成新证书。配置文件也将被删除。","Once you're done, come back to GDevelop and the assets will be added to your account automatically.":"完成后,返回GDevelop,资产将自动添加到您的帐户中。","Once you're done, come back to GDevelop and the bundle will be added to your account automatically.":"完成后,返回 GDevelop,捆绑包将自动添加到您的帐户中。","Once you're done, come back to GDevelop and the credits will be added to your account automatically.":"完成后,返回 GDevelop,积分将自动添加到您的帐户中。","Once you're done, come back to GDevelop and the game template will be added to your account automatically.":"完成后,返回 GDevelop,游戏模板将自动添加到您的帐户中。","Once you're done, come back to GDevelop and your account will be upgraded automatically, unlocking the extra exports and online services.":"一旦完成,返回 GDevelop,您的帐户将自动升级,解锁额外的导出和在线服务。","Once you're done, start adding some functions to the behavior. Then, test the behavior by adding it to an object in a scene.":"完成后,开始向行为添加一些功能。然后,通过将其添加到场景中的对象来测试行为。","Once you're done, you will receive an email confirmation so that you can link the bundle to your account.":"完成后,您将收到一封电子邮件确认,以便您可以将捆绑包链接到您的账户。","One project at a time — Upgrade for more":"一次一个项目 —— 升级以获得更多","One-click packaging":"一键打包","Only PNG, JPEG and WEBP files are supported.":"只支持 PNG、JPEG 和 WEBP 文件。","Only best entry":"仅最佳参赛作品","Only cloud projects can be displayed here. If the user has created local projects, they need to be saved as cloud projects to be visible.":"此处只能显示云项目。如果用户创建了本地项目,则需要将其保存为云项目才能可见。","Only player's best entries are displayed.":"只显示玩家的最佳参赛作品。","Oops! Looks like this game has no logo set up, you can continue to the next step.":"哎呀! 看起来这个游戏没有设置标志,你可以继续下一步。","Opacity":"不透明度","Opacity (0 - 255)":"不透明度 (0-255)","Open":"开启","Open About to download and install it.":"打开“关于”以下载并安装。","Open Apple Developer":"打开苹果开发者","Open Debugger":"打开调试器","Open Game dashboard":"打开游戏仪表板","Open Instances List Panel":"打开实例列表面板","Open Layers Panel":"打开图层面板","Open My Profile":"打开我的个人资料","Open Object Groups Panel":"打开对象组面板","Open Objects Panel":"打开对象面板","Open Properties Panel":"打开属性面板","Open Recent":"打开最近的","Open a new project? Any changes that have not been saved will be lost.":"打开新项目?任何尚未保存的更改都将丢失。","Open a project":"打开一个项目","Open all tasks":"打开所有任务","Open another chat?":"打开另一个聊天吗?","Open build link":"打开构建链接","Open command palette":"打开命令面板","Open course":"打开课程","Open events sheet":"打开事件表","Open exam":"打开考试","Open extension settings":"打开扩展设置","Open extension...":"打开扩展...","Open external events...":"打开外部事件(external events)...","Open external layout...":"打开外部布局(external layout)...","Open file":"打开文件","Open folder":"打开文件夹","Open from computer with GDevelop desktop app":"通过 GDevelop 桌面应用程序从计算机打开","Open game for player feedback":"开放游戏征求玩家反馈","Open in Store":"在商店中打开","Open in a larger editor":"在较大的编辑器中打开","Open in editor":"在编辑器中打开","Open layer editor":"打开图层编辑器","Open lesson":"公开课","Open memory tracker registry":"打开内存跟踪器注册表","Open more settings":"打开更多设置","Open project":"打开项目","Open project icons":"打开项目图标","Open project manager":"打开项目管理器","Open project properties":"打开项目属性(properties)","Open project resources":"打开项目资源","Open quick customization":"打开快速自定义","Open recent project...":"打开最近的项目...","Open report":"打开报告","Open resource in browser":"在浏览器中打开资源","Open scene editor":"打开场景编辑器","Open scene events":"打开场景事件","Open scene properties":"打开场景属性(Properties)","Open scene variables":"打开场景变量","Open scene...":"打开场景...","Open settings":"打开设置","Open task":"打开任务","Open template":"打开模板","Open the console":"打开控制台","Open the exported game folder":"打开导出的游戏文件夹","Open the performance profiler":"打开性能分析工具","Open the project":"打开项目","Open the project associated with this AI request to restore to this state.":"打开与此 AI 请求关联的项目以恢复到此状态。","Open the project folder":"打开项目文件夹","Open the properties panel":"打开“属性”面板","Open version":"打开版本","Open version history":"打开版本历史记录","Open visual editor":"打开可视化编辑器","Open visual editor for the object":"打开对象的可视化编辑器","Open...":"打开...","Opening latest save...":"正在打开最新保存...","Opening older version...":"正在打开旧版本...","Opening portal":"打开门户网站","Operation not allowed":"不允许操作","Operator":"运算符(Operator)","Optimize for Pixel Art":"像素艺术优化","Optional animation name":"可选动画名称","Optional. Enter a full URL (starting with https://) to a help page. A help icon will appear next to the action/condition/expression title in the editor, allowing users to quickly access documentation.":"可选。输入帮助页面的完整 URL(以 https:// 开头)。在编辑器中,操作/条件/表达式标题旁将出现一个帮助图标,让用户可以快速访问文档。","Optionally, explain the purpose of the property in more details":"还可以更详细地解释属性的用途","Options":"选项","Or flash this QR code:":"或者刷这个二维码:","Or start typing...":"或者开始输入...","Ordering":"排序","Orthographic camera":"正交相机","Other":"其他","Other actions":"更多操作","Other conditions":"更多条件","Other lifecycle methods":"其他生命周期方法 ","Other reason":"其他原因","Other reason (please specify)":"其他原因 (请注明)","Outdated extension":"过时的扩展","Outline":"轮廓线","Outline color":"轮廓颜色","Outline opacity (0-255)":"轮廓不透明度 (0-255)","Outline size (in pixels)":"轮廓尺寸 (以像素为单位)","Overriding the ID may have unwanted consequences, such as blocking the ability to connect to any peer. Do not use this feature unless you really know what you are doing.":"覆盖 ID 可能会产生不良后果,例如阻止连接到任何对等点的能力。除非您真的知道自己在做什么,否则不要使用此功能。","Overwrite":"覆盖","Owned":"拥有","Owned by another scene":"属于另一个场景","Owner":"所有者","Owners":"所有者","P2P is merely a peer-to-peer networking solution. It only handles the connection to another player, and the exchange of messages. Higher-level tasks, such as synchronizing the game state, are left to by implemented by you. Use the THNK Framework if you seek an easy, performant and flexible higher-level solution.":"P2P 只是一种点对点网络解决方案。它只处理与另一个玩家的连接以及消息交换。更高级别的任务,例如同步游戏状态,则由您来实现。如果您寻求简单、高性能且灵活的高级解决方案,请使用 THNK 框架。","Pack sounds":"打包声音","Pack type":"包类型","Package game files":"打包游戏文件","Package name (for iOS and Android)":"软件包名称 (适用于iOS和Android)","Package the game for iOS, using your Apple Developer account.":"使用您的 Apple 开发者帐户将游戏打包为 iOS 版。","Packaging":"打包","Packaging your game for Android will create an APK file that can be installed on Android phones or an Android App Bundle that can be published to Google Play.":"打包您的 Android 游戏将创建一个 APK 文件,可以安装在 Android 手机上,或者可以发布到 Google Play 的Android 应用程序包。","Packaging...":"正在打包...","Paint a Level with Tiles":"使用瓦片绘制关卡","Panel sprite":"面板精灵","Parameter #{0}":function(a){return["\u53C2\u6570 #",a("0")]},"Parameter name":"参数名称","Parameters":"参数","Parameters allow function users to give data.":"参数允许函数用户提供数据。","Parameters can't have children.":"参数不能有子项。","Particle end size (in percents)":"粒子末端大小 (以百分比为单位)","Particle maximum lifetime (in seconds)":"粒子最长寿命 (以秒为单位)","Particle maximum rotation speed (degrees/second)":"粒子最大旋转速度 (度/秒)","Particle minimum lifetime (in seconds)":"粒子最短寿命 (以秒为单位)","Particle minimum rotation speed (degrees/second)":"粒子最小旋转速度 (度/秒)","Particle start size (in percents)":"粒子起始大小 (以百分比为单位)","Particle type":"粒子类型","Particles end color":"粒子末端颜色","Particles start color":"粒子起始颜色","Particles start height":"粒子起始高度","Particles start width":"粒子起始宽度","Password":"密码","Password cannot be empty":"密码不能为空","Paste":"粘贴","Paste action(s)":"粘贴动作(s)","Paste and Match Style":"粘贴和匹配样式","Paste condition(s)":"粘贴条件 (s)","Paste {clipboardObjectName}":function(a){return["\u7C98\u8D34 ",a("clipboardObjectName")]},"Paste {clipboardObjectName} as a Global Object":function(a){return["\u5C06 ",a("clipboardObjectName")," \u7C98\u8D34\u4E3A\u5168\u5C40\u5BF9\u8C61"]},"Paste {clipboardObjectName} as a Global Object inside folder":function(a){return["\u5C06 ",a("clipboardObjectName")," \u4F5C\u4E3A\u5168\u5C40\u5BF9\u8C61\u7C98\u8D34\u5230\u6587\u4EF6\u5939\u5185"]},"Paste {clipboardObjectName} inside folder":function(a){return["\u5C06 ",a("clipboardObjectName")," \u7C98\u8D34\u5230\u6587\u4EF6\u5939\u5185"]},"Pause":"暂停","Pause the game (from the toolbar) or hit refresh (on the left) to inspect the game":"暂停游戏(从工具栏) 或点击刷新(在左侧) 以检查游戏","Paused":"暂停","Paypal secure":"Paypal 安全","Peer to peer IP address leak warning/THNK recommendation":"点对点 IP 地址泄漏警告/THNK 推荐","Peer to peer data-loss notice":"点对点数据丢失通知","Pending":"待处理","Pending invitations":"待处理的邀请","Percentage of people who leave before 60 seconds including loading screens.":"在60秒内,包括加载屏幕,离开的人的百分比。","Permanent":"永久的","Permanently delete the leaderboard?":"永久删除排行榜?","Permanently delete the project?":"永久删除该项目?","Personal license for claim with Gold or Pro subscription":"通过黄金或专业订阅进行索赔的个人许可证","Personal or company website":"个人或公司网站","Personal website, itch.io page, etc.":"个人网站,itch.io页面等。","Personalize your suggested content":"个性化您的建议内容","Perspective camera":"透视相机","Pixel size":"像素大小","Place 3D platforms in a 2D game.":"在 2D 游戏中放置 3D 平台。","Place 3D platforms in this 2D platformer, creating a path to the end.":"在这个 2D 平台游戏中放置 3D 平台,创建一条通往终点的路径。","Place {newInstancesCount} <0>{object_name} instance(s) at {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u653E\u7F6E ",a("newInstancesCount")," \u4E2A <0>",a("object_name")," \u5B9E\u4F8B\u4E8E ",a("0"),"\uFF08\u5C42\uFF1A",a("1"),"\uFF09\u3002"]},"Place {newInstancesCount} and move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u653E\u7F6E ",a("newInstancesCount")," \u5E76\u79FB\u52A8 ",a("existingInstanceCount")," \u4E2A <0>",a("object_name")," \u5B9E\u4F8B\u81F3 ",a("0"),"\uFF08\u5C42\uFF1A",a("1"),"\uFF09\u3002"]},"Placement":"位置","Placement rationale":"位置路线","Platform default":"平台默认","Platformer":"平台","Play":"游玩","Play a game":"玩游戏","Play game":"玩游戏","Play section":"游戏部分","Played > 10 minutes":"玩了 > 10 分钟","Played > 15 minutes":"玩了 > 15 分钟","Played > 3 minutes":"玩了 > 3 分钟","Played > 5 minutes":"玩了 > 5 分钟","Played time":"游戏时间","Player":"Player","Player best entry":"播放器最佳作品","Player feedback off":"玩家反馈关闭","Player feedback on":"玩家反馈开启","Player name prefix (for auto-generated player names)":"玩家名称前缀 (用于自动生成的玩家名称)","Player services":"玩家服务","Player {0} left a feedback message on {1}: \"{2}...\"":function(a){return["\u73A9\u5BB6 ",a("0")," \u5728 ",a("1")," \u7559\u4E0B\u4E86\u53CD\u9988\u4FE1\u606F\uFF1A\"",a("2"),"...\""]},"Players":"玩家","Playground":"游乐场","Playing":"播放中","Please <0>backup your game file and save your game to ensure that you don't lose anything. You can try to reload this panel or restart GDevelop.":"请<0>备份您的游戏文件并保存您的游戏,以确保您不会丢失任何东西。您可以尝试重新加载此面板或重新启动 GDevelop。","Please check if popups are blocked in your browser settings.":"请检查您的浏览器设置中是否已阻止弹出窗口。","Please check your internet connection or try again later.":"请检查你的网络连接或稍后再试一次。","Please double check online the changes to make sure that you are aware of anything new in this version that would require you to adapt your project.":"请在线仔细检查更改,以确保您知道此版本中的任何需要您调整项目的新内容。","Please enter a name for your project.":"请为您的项目输入名称。","Please enter a name that is at least one character long and 50 at most.":"请输入至少一个字符长,最多50个字符的名称。","Please enter a valid URL, starting with https://":"请输入一个有效的 URL,开始于 https://","Please enter a valid URL, starting with https://discord":"请输入一个有效的 URL,从 https://discord 开始","Please enter an email address.":"请输入电子邮件地址。","Please explain your use of GDevelop.":"请解释一下你使用 GDevelop 的原因。","Please fill out every field.":"请填写每个字段。","Please get in touch with us to find a solution.":"请与我们联系,以便找到解决办法。","Please log out and log in again to verify your identify, then change your email.":"请注销并重新登录以验证您的身份,然后更改您的电子邮件。","Please login to access free samples of the Education plan resources.":"请登录以访问教育计划资源的免费样本。","Please note that your device should be connected on the same network as this computer.":"请注意, 你的设备应与此计算机连接在同一网络上。","Please pick a short username with only alphanumeric characters as well as _ and -":"请选择仅包含字母数字字符以及 _ 和 - 的简短用户名","Please prefer using the new action \"Enforce camera boundaries\" which is more flexible.":"请使用更灵活的新动作“强制摄影机边界”。","Please tell us more":"请告诉我们更多信息","Please upgrade the editor to the latest version.":"请将编辑器升级到最新版本。","Please wait":"请等待","Please wait while we scan your project to find a solution.":"请稍候,我们正在扫描您的项目以寻找解决方案。","Please wait...":"请稍候...","Point name":"点名称","Points":"点","Polygon is not convex!":"多边形不是凸多边形!","Polygon with {verticesCount} vertices":function(a){return["\u5177\u6709 ",a("verticesCount")," \u4E2A\u9876\u70B9\u7684\u591A\u8FB9\u5F62"]},"Pop back into main window":"弹回主窗口","Pop out in a separate window (beta)":"在单独的窗口中弹出(测试版)","Portrait":"纵向","Prefabs (Ready-to-use Objects)":"预制件(待使用对象)","Preferences":"偏好设置","Prefix":"前缀","Preload at startup (default)":"启动时预加载(默认)","Preload with an action":"通过动作预加载","Preload with the scene":"通过场景预加载","Premium":"高级版","Prepare your game for Facebook Instant Games so that it can be play on Facebook Messenger. GDevelop will create a compressed file that you can upload on your Facebook Developer account.":"为Facebook Instant Games准备游戏,以便可以在Facebook Messenger上玩。 GDevelop将创建一个压缩文件,您可以将其上传到您的Facebook Developer帐户。","Preparing the leaderboard for your game...":"为您的游戏准备排行榜...","Press a shortcut combination...":"按下快捷键组合...","Prevent selection in the editor":"防止在编辑器中进行选择","Preview":"预览","Preview over wifi":"在wifi下预览","Preview {animationName}":function(a){return["\u9884\u89C8 ",a("animationName")]},"Previews":"预览","Previous breaking changes (no longer relevant)":"以前的重大更改(不再相关)","Previous page":"上一页","Private":"私人","Production & Project Management":"制作与项目管理","Profile":"个人信息","Profiler":"性能分析工具","Programming & Scripting":"编程与脚本","Progress bar":"进度条","Progress bar color":"进度条颜色","Progress bar fade in delay and duration will be applied to GDevelop logo.":"进度条淡入淡出延迟和持续时间将应用于 GDevelop 标志。","Progress bar height":"进度条高度","Progress bar maximum width":"进度条最大宽度","Progress bar minimum width":"进度条最小宽度","Progress bar width":"进度条宽度","Progress fade in delay (in seconds)":"进度淡入延迟(以秒为单位)","Progress fade in duration (in seconds)":"进度在持续时间内淡出(以秒为单位)","Project":"项目","Project file list":"项目文件列表","Project file type":"项目文件类型","Project files":"项目文件","Project icons":"项目图标","Project is opened":"项目已打开","Project manager":"项目管理器","Project mismatch":"项目不匹配","Project name":"项目名称","Project name cannot be empty.":"项目名称不能为空。","Project name changed":"项目名称已更改","Project not found":"未找到项目","Project not saved":"项目未保存","Project package names should not begin with com.example":"项目包名称不应以 com.example 开头。","Project properly saved":"项目已正确保存","Project properties":"项目属性","Project resources":"项目资源","Project save cannot be opened":"无法打开项目保存","Project save not available":"项目保存不可用","Project save not found":"未找到项目保存","Project saved":"项目已保存","Project was modified":"项目已修改","Project {projectName} will be deleted. You will no longer be able to access it.":function(a){return["\u9879\u76EE ",a("projectName")," \u5C06\u88AB\u5220\u9664\u3002\u60A8\u5C06\u65E0\u6CD5\u518D\u8BBF\u95EE\u5B83\u3002"]},"Projects":"项目","Projects in disabled accounts will not be deleted. All disabled accounts can be reactivated after 15 days.":"禁用帐户中的项目不会被删除。所有禁用帐户均可在 15 天后重新激活。","Promoting your game to the community":"向社区推广您的游戏","Promotions + Earn credits":"促销+赚取积分","Properties":"属性","Properties & Icons":"属性和图标","Properties can't have children.":"属性不能有子项。","Properties store data inside behaviors.":"属性将数据存储在行为中。","Properties store data inside objects.":"属性将数据存储在对象内部。","Property list":"属性列表","Property list editor":"属性列表编辑器","Property name in events: `{parameterName}`":function(a){return["\u4E8B\u4EF6\u4E2D\u7684\u5C5E\u6027\u540D\u79F0: `",a("parameterName"),"`"]},"Props":"道具","Provisioning profiles":"配置文件","Public":"公开的","Public on gd.games":"在 gd.games 上公开","Public tutorials":"公开教程","Publish":"发布","Publish game":"发布游戏","Publish game on gd.games":"在 gd.gamp 上发布游戏","Publish new version":"发布新版本","Publish on gd.games":"在 gd.gamp 上发布","Publish on gd.games to let players try your game":"在 gd.gamp 上发布,让玩家尝试你的游戏","Publish this build on gd.games":"在 gd.games 上发布此构建","Publish to Android, iOS, unlock more cloud projects, leaderboards, collaboration features and more online services. <0>Learn more":"发布到 Android、iOS,解锁更多云项目、排行榜、协作功能和更多在线服务。<0>了解更多","Publisher name":"发布者姓名","Publishing on gd.games":"在 gd.gamp 上发布","Publishing to gd.games, the GDevelop gaming platform. Games can be played from any device.":"发布到 gd.games, GDevelop 游戏平台。游戏可以在任何设备上玩。","Purchase":"购买","Purchase Spine":"购买 Spine","Purchase credits":"购买积分","Purchase seats":"购买座位","Purchase the Education subscription":"购买教育订阅","Purchase with {usageCreditPrice} credits":function(a){return["\u4F7F\u7528 ",a("usageCreditPrice")," \u79EF\u5206\u8D2D\u4E70"]},"Purchase {0}":function(a){return["\u8D2D\u4E70 ",a("0")]},"Purchase {translatedCourseTitle}":function(a){return["\u8D2D\u4E70",a("translatedCourseTitle")]},"Puzzle":"谜题","Quadrilateral":"四边形","Quick Customization settings":"快速自定义设置","Quick Customization: Behavior properties":"快速自定义:行为属性","Quit tutorial":"退出教程","R;G;B, like 100;200;180":"R; G; B,比如 100; 200; 180","RPG":"RPG","Racing":"竞速类","Radius":"半径","Radius of the emitter":"发射区半径","Rank this comment as bad":"将此评论评为差评","Rank this comment as good":"将此评论评为好评","Rank this comment as great":"将此评论评为优秀","Rate chapter":"评价章节","Raw error":"原始错误","Re-enable npm script security warning":"重新启用 npm 脚本安全警告","Re-install":"重新安装","React to lights":"对灯光作出反应","Read & Write":"读写","Read <0>{behavior_name}'s settings on <1>{object_name} in scene {scene_name}.":function(a){return["\u8BFB\u53D6 <0>",a("behavior_name")," \u5728\u573A\u666F ",a("scene_name")," \u4E2D\u7684 <1>",a("object_name")," \u7684\u8BBE\u7F6E\u3002"]},"Read <0>{object_name}'s properties in scene <1>{scene_name}.":function(a){return["\u8BFB\u53D6 <0>",a("object_name")," \u5728\u573A\u666F <1>",a("scene_name")," \u4E2D\u7684\u5C5E\u6027\u3002"]},"Read <0>{scene_name}'s scene settings.":function(a){return["\u8BFB\u53D6 <0>",a("scene_name")," \u7684\u573A\u666F\u8BBE\u7F6E\u3002"]},"Read docs for {extension_names}.":function(a){return["\u9605\u8BFB ",a("extension_names")," \u7684\u6587\u6863\u3002"]},"Read events in scene <0>{scene_name}.":function(a){return["\u9605\u8BFB\u573A\u666F <0>",a("scene_name")," \u7684\u4E8B\u4EF6\u3002"]},"Read instances in scene <0>{scene_name}.":function(a){return["\u9605\u8BFB\u573A\u666F <0>",a("scene_name")," \u7684\u5B9E\u4F8B\u3002"]},"Read only":"只读","Read the doc":"阅读文档","Read the wiki page for more info about the dataloss mode.":"阅读wiki页面了解更多关于数据模式的信息。","Read tutorial":"阅读教程","Reading the documentation":"正在读取文档","Reading through the events":"正在阅读事件","Ready-made games":"现成的游戏","Reasoning level":"推理级别","Reasoning level:":"推理级别:","Receive a copy of GDevelop’s teaching resources:<0>Extract of our ready-to-teach Curriculum<1>Poster with GDevelop's core concepts to use in your classroom<2>“Game Development as an Educational wonder” PDF":"收到一份 GDevelop 的教学资源: <0> 摘录我们的即用型课程 <1> 带有 GDevelopment 核心概念的海报在你的课堂上使用 <2> “游戏开发是一个教育奇迹”PDF ","Receive weekly stats about your game by email":"通过电子邮件接收有关您游戏的每周统计数据","Recharge your account to purchase this item.":"为您的帐户充值以购买该商品。","Recommendations":"推荐内容","Recommended":"推荐","Recommended for you":"推荐给你的","Recovering older version...":"正在恢复旧版本...","Rectangle paint":"矩形绘画","Reddit":"Reddit","Redeem":"兑换","Redeem a code":"兑换代码","Redeemed":"兑换","Redeemed code valid until {0} .":function(a){return["\u5151\u6362\u7801\u6709\u6548\u671F\u81F3 ",a("0")," \u3002"]},"Redemption Codes":"兑换码","Redemption or coupon code":"兑换码或优惠券代码","Redo":"重做","Redo the last changes":"重做上次更改","Redo the survey":"重做调查","Refine your search with more specific keywords.":"使用更具体的关键字优化搜索。","Refresh":"刷新","Refresh dashboard":"刷新仪表板","Refresh games":"刷新游戏","Register or publish your game first to see its exports.":"首先注册或发布您的游戏以查看其导出。","Register the project":"注册项目","Related expression and condition":"相关表达式和条件","Related objects":"相关对象","Relational operator":"关系运算符(Relation operator)","Relaunch the 3D editor":"重新启动3D编辑器","Reload project from disk/cloud (lose all changes)":"从磁盘/云重新加载项目(将丢失所有更改)","Reload the project? Any changes that have not been saved will be lost.":"重新加载项目?任何未保存的更改将会丢失。","Remaining usage":"剩余使用次数","Remember that your access to this resource is exclusive to your account.":"很抱歉,您的账户没有足够的权限来访问这个资源。","Remix a game in 2 minutes":"2 分钟内重制一款游戏","Remix an existing game":"重新混合现有游戏","Remove":"删除","Remove <0>{behavior_name} behavior from <1>{object_name} in scene {scene_name}.":function(a){return["\u4ECE\u573A\u666F ",a("scene_name")," \u7684 <1>",a("object_name")," \u4E2D\u79FB\u9664 <0>",a("behavior_name")," \u884C\u4E3A\u3002"]},"Remove Ordering":"删除排序","Remove behavior":"删除行为","Remove certificate":"删除证书","Remove collaborator":"删除合作者","Remove effect":"移除效果","Remove entry":"删除条目","Remove folder and function":"删除文件夹和功能","Remove folder and functions":"删除文件夹和功能","Remove folder and object":"删除文件夹和对象","Remove folder and objects":"删除文件夹和对象","Remove folder and properties":"删除文件夹和属性","Remove folder and property":"删除文件夹和属性","Remove from list":"从列表中删除","Remove from team":"从团队中移除","Remove function":"删除函数","Remove group":"移除组","Remove invitation?":"移除邀请吗?","Remove object":"移除对象","Remove objects":"删除对象","Remove objects from the scene list":"从场景列表中删除对象","Remove project from list":"从列表中删除项目","Remove resource":"移除资源","Remove resources with invalid path":"删除具有无效路径的资源","Remove scene <0>{scene_name}.":function(a){return["\u79FB\u9664\u573A\u666F <0>",a("scene_name"),"\u3002"]},"Remove shortcut":"删除快捷键","Remove student?":"移除学生吗?","Remove the Else":"删除 Else","Remove the Long Description":"删除长描述","Remove the Loop Counter Variable":"移除循环计数器变量","Remove the animation":"删除动画","Remove the extension":"移除扩展","Remove the sprite":"删除精灵","Remove this Auth Key":"删除此认证密钥","Remove this certificate":"删除此证书","Remove this certificate?":"删除此证书?","Remove this counter of the loop":"移除此循环的计数器","Remove unlimited":"删除无限制","Remove unused...":"移除未使用...","Remove variant":"删除变体","Rename":"重命名","Rename <0>{object_name} to <1>{newValue} (in scene {scene_name}).":function(a){return["\u5C06 <0>",a("object_name")," \u91CD\u547D\u540D\u4E3A <1>",a("newValue"),"\uFF08\u5728\u573A\u666F ",a("scene_name")," \u4E2D\uFF09\u3002"]},"Renamed object to {0}.":function(a){return["\u5DF2\u5C06\u5BF9\u8C61\u91CD\u547D\u540D\u4E3A ",a("0"),"\u3002"]},"Rendering type":"渲染类型","Repeat <0>{0} times:":function(a){return["\u91CD\u590D <0>",a("0")," \u6B21\uFF1A"]},"Repeat borders and center textures (instead of stretching them)":"重复边框和中心纹理(而不是拉伸它们)","Repeat for each instance of<0>{0}":function(a){return["\u5BF9\u6BCF\u4E2A<0>",a("0"),"\u5B9E\u4F8B\u91CD\u590D"]},"Repeat these:":"重复这些:","Replace":"替换","Replace <0>{object_name} in scene <1>{scene_name}.":function(a){return["\u5728\u573A\u666F <1>",a("scene_name")," \u4E2D\u66FF\u6362 <0>",a("object_name"),"\u3002"]},"Replace existing extension":"替换现有扩展","Replay":"回放","Report a wrong translation":"反馈错误的翻译","Report an issue":"报告一个问题","Report anyway":"仍然报告","Report this comment as abusive, harmful or spam":"举报此评论为辱骂性评论、有害评论或垃圾评论","Required behavior":"必填行为","Reset":"重置","Reset Debugger layout":"重置调试器布局","Reset Extension Editor layout":"重置扩展编辑器布局","Reset Resource Editor layout":"重置资源编辑器布局","Reset Scene Editor layout":"重置场景编辑器布局","Reset all shortcuts to default":"重置所有快捷键","Reset and hide children configuration":"重置并隐藏子配置","Reset hidden Ask AI text inputs":"重置隐藏的询问 AI 文本输入","Reset hidden announcements":"重置隐藏的公告","Reset hidden embedded explanations":"重置隐藏的嵌入式解释","Reset hidden embedded tutorials":"重置隐藏的嵌入式教程","Reset leaderboard":"重置排行榜","Reset leaderboard {0}":function(a){return["\u91CD\u7F6E\u6392\u884C\u699C ",a("0")]},"Reset password":"重置密码","Reset requested the {0} . Please wait a few minutes...":function(a){return["\u91CD\u7F6E\u8BF7\u6C42",a("0"),"\u3002\u8BF7\u7B49\u5F85\u51E0\u5206\u949F..."]},"Reset to automatic collision mask":"重置为自动碰撞遮罩","Reset to default":"重置为默认值","Reset your password":"重置您的密码","Resolution and rendering":"分辨率和渲染","Resource":"资源","Resource URL":"资源 URL","Resource file path copied to clipboard":"复制到剪贴板的资源文件路径","Resource kind":"资源类型","Resource name":"资源名称","Resource type":"资源类型","Resource(s) URL(s) (one per line)":"资源: URL(每行一个)","Resources":"资源","Resources (any kind)":"资源 (任何类型)","Resources added: {0}":function(a){return["\u8D44\u6E90\u5DF2\u6DFB\u52A0: ",a("0")]},"Resources are automatically added to your project whenever you add an image, a font or a video to an object or when you choose an audio file in events. Choose a resource to display its properties.":"当您添加图片、字体或视频到对象或事件中选择音频文件时,资源自动添加到您的项目中。选择资源显示属性。","Resources loading":"资源加载中","Resources preloading":"资源预加载中","Resources unloading":"资源卸载中","Restart":"重新启动","Restart 3D editor":"重启3D编辑器","Restart the Tutorial":"重启教程","Restart tutorial":"重启教程","Restarting the preview from scratch is required":"重新启动预览(from scratch is required)","Restore":"还原","Restore a previous purchase":"恢复之前的购买","Restore accounts":"恢复帐户","Restore project before this message":"在此消息之前还原项目","Restore project to this state?":"将项目恢复到此状态?","Restore this version":"恢复此版本","Restore version":"还原版本","Restored":"已还原","Restoring...":"正在还原...","Results for:":"结果为:","Retry":"重试","Reviewing a starter game template.":"正在查看一个初始游戏模板。","Reviewing the current state":"正在检查当前状态","Reviewing the game structure":"正在检查游戏结构","Reviewing the scene data":"正在检查场景数据","Reviewing the {templateName} starter template.":function(a){return["\u6B63\u5728\u67E5\u770B ",a("templateName")," \u521D\u59CB\u6A21\u677F\u3002"]},"Rework the game":"重新制作游戏","Right":"右","Right (secondary)":"右 (次要)","Right bound":"右边界","Right bound should be greater than left bound":"右边界应大于左边界","Right face":"右面","Right margin":"右边距","Right-click for more events":"右键点击查看更多事件","Right-click for quick menu":"右键点击获得快捷菜单","Room: {0}":function(a){return["\u623F\u95F4: ",a("0")]},"Rooms":"房间","Root folder":"根文件夹","Rotation":"旋转","Rotation (X)":"旋转 (X)","Rotation (Y)":"旋转 (Y)","Rotation (Z)":"旋转 (Z)","Round pixels when rendering, useful for pixel perfect games.":"渲染时旋转像素,对像素完美游戏有用。","Round to X decimal point":"四舍五入到X小数点","Run a preview":"启动预览","Run a preview (with loading & branding)":"运行预览(加载和品牌)","Run a preview and you will be able to inspect it with the debugger.":"运行预览,你就可以用调试器来检查它。","Run on this computer":"在此电脑上运行","Save":"保存","Save Project":"保存项目","Save and continue":"保存并继续","Save as main version":"保存为主版本","Save as...":"另存为...","Save in the \"Downloads\" folder":"保存在“下载”文件夹中","Save on your computer: download GDevelop desktop app":"在您的计算机上保存:下载 GDevelop 桌面应用程序","Save project":"保存项目","Save project as":"将项目另存为","Save project as...":"项目另存为...","Save to computer with GDevelop desktop app":"通过 GDevelop 桌面应用程序保存到计算机","Save your changes or close the external editor to continue.":"保存您的更改或关闭外部编辑器以继续。","Save your game":"保存你的游戏","Save your project":"保存项目","Save your project before using the version history.":"在使用版本历史记录之前保存您的项目。","Saving project":"保存项目","Saving...":"正在保存中......","Scale mode (also called \"Sampling\")":"缩放模式 (也称为“取样”)","Scaling factor":"比例因子","Scaling factor to apply to the default dimensions":"适用于默认尺寸的缩放系数","Scan in the project folder for...":"扫描项目文件夹...","Scan missing animations":"扫描缺失的动画","Scene":"场景","Scene Groups":"场景组","Scene Objects":"场景对象","Scene Variables":"场景变量","Scene background color":"场景背景色","Scene editor":"场景编辑器","Scene events":"场景事件","Scene groups":"场景组","Scene name":"场景名称","Scene name (text)":"场景名称 (文本)","Scene objects":"场景对象","Scene properties":"场景属性","Scene variable":"场景变量","Scene variable (deprecated)":"场景变量 (弃用)","Scene variables":"场景变量","Scenes":"场景","Scope":"范围","Score":"分数","Score column settings":"分数列设置","Score display":"分数显示","Score multiplier":"分数乘数","Scores sort order":"分数排序顺序","Scroll":"滚动","Search":"搜索","Search GDevelop documentation.":"搜索 GDevelop 文档。","Search and replace in parameters":"在参数中搜索并替换","Search assets":"搜索资产","Search behaviors":"搜索行为","Search by name":"按名称搜索","Search examples":"搜索示例","Search extensions":"搜索扩展","Search filters":"搜索过滤器","Search for New Extensions":"搜索新的扩展","Search for new actions in extensions":"在扩展中搜索新的操作","Search for new conditions in extensions":"在扩展中搜索新的条件","Search functions":"搜索功能","Search in all event sheets...":"在所有事件表中搜索...","Search in event sentences":"搜索事件句子","Search in events":"在事件中搜索","Search in project":"在项目中搜索","Search in properties":"在属性中搜索","Search instances":"搜索实例","Search object groups":"搜索对象组","Search objects":"搜索对象","Search objects or actions":"搜索对象或动作","Search objects or conditions":"搜索对象或条件","Search panel":"搜索面板","Search resources":"搜索资源","Search results":"搜索结果","Search the shop":"搜索商店","Search variables":"搜索变量","Search {searchPlaceholderObjectName} actions":function(a){return["\u641C\u7D22 ",a("searchPlaceholderObjectName")," \u52A8\u4F5C"]},"Search {searchPlaceholderObjectName} conditions":function(a){return["\u641C\u7D22 ",a("searchPlaceholderObjectName")," \u6761\u4EF6"]},"Search/import extensions":"搜索/导入扩展","Searching the asset store.":"搜索资产商店。","Seats":"座位","Seats available:":"可用座位:","Seats left: {availableSeats}":function(a){return["\u5269\u4F59\u5E2D\u4F4D\uFF1A",a("availableSeats")]},"Seconds":"秒","Section name":"章节名称","See Marketing Boosts":"查看营销推广","See all":"查看全部","See all exports":"查看所有导出","See all in the game dashboard":"在游戏仪表板中查看所有内容","See all projects":"查看所有项目","See all release notes":"查看所有发行说明","See all the release notes":"查看所有发行说明","See more":"查看更多","See my codes":"查看我的代码","See plans":"查看计划","See projects":"查看项目","See resources":"查看资源","See subscriptions":"查看订阅","See the releases notes online":"在线查看发行说明","See this bundle":"查看此包","Select":"选择","Select All":"选择所有","Select a behavior":"选择行为","Select a function...":"选择一个函数...","Select a game":"选择一个游戏","Select a genre":"选择一种类型","Select a thumbnail":"选择缩略图","Select all active":"选择所有激活状态","Select an author":"选择作者","Select an extension":"选择一个扩展","Select an image":"选择图像","Select an owner":"选择所有者","Select instances on scene ({instanceCountOnScene})":function(a){return["\u9009\u62E9\u573A\u666F\u4E2D\u7684\u5B9E\u4F8B (",a("instanceCountOnScene"),")"]},"Select log groups to display":"选择要显示的日志组","Select resource":"选择资源","Select the controls that apply:":"选择适用的控件:","Select the leaderboard from a list":"从列表中选择排行榜","Select the usernames of the authors of this project. They will be displayed in the selected order, if you publish this game as an example or in the community.":"选择此项目作者的用户名。 如果您以示例或在社区中发布此游戏,他们将被显示在选定的顺序中。","Select the usernames of the contributors to this extension. They will be displayed in the order selected. Do not see your name? Go to the Profile section and create an account!":"选择此扩展的贡献者的用户名。他们将显示在选择的顺序中。 不要看到您的名字?转到个人资料部分并创建一个帐户!","Select the usernames of the owners of this project to let them manage this game builds. Be aware that owners can revoke your ownership.":"选择此项目所有者的用户名,让他们管理此游戏版本。请注意,所有者可以撤销您的所有权。","Select up to 3 genres for the game to be visible on gd.games's categories pages!":"选择最多3种类型的游戏可见于 gd.game 的分类页面!","Select {0} resources":function(a){return["\u9009\u62E9 ",a("0")," \u8D44\u6E90"]},"Selected instances will be moved to a new custom object.":"选定的实例将被移动到新的自定义对象。","Selected instances will be moved to a new external layout.":"选定的实例将移动到一个新的外部布局。","Send":"发送","Send a new form":"发送新表格","Send crash reports during previews to GDevelop":"在预览期间将崩溃报告发送给 GDevelop","Send feedback":"发送反馈","Send it again":"再次发送","Send the Auth Key":"发送验证密钥","Send to back":"置于后面","Sending...":"发送中...","Sentence in Events Sheet":"事件表中的语句","Sentence in Events Sheet (automatically suffixed by \"of _PARAM0_\")":"事件表中的句子(自动后缀为“_PARAM0_”)","Serial: {0}":function(a){return["\u5E8F\u5217\u53F7: ",a("0")]},"Service seems to be unavailable, please try again later.":"服务似乎无法使用,请稍后再试。","Sessions":"会议","Set <0>{object_name}'s variable <1>{variable_name_or_path}.":function(a){return["\u8BBE\u7F6E <0>",a("object_name")," \u7684\u53D8\u91CF <1>",a("variable_name_or_path"),"\u3002"]},"Set an icon to the extension first":"首先为扩展设置一个图标","Set as default":"设置为默认","Set as global":"设置为全局","Set as global group":"设置为全局群组","Set as global object":"设置为全局对象","Set as start scene":"设置为开始场景","Set by user":"由用户设置","Set global variable <0>{variable_name_or_path}.":function(a){return["\u8BBE\u7F6E\u5168\u5C40\u53D8\u91CF <0>",a("variable_name_or_path"),"\u3002"]},"Set scene variable <0>{variable_name_or_path} in scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u8BBE\u7F6E\u573A\u666F\u53D8\u91CF <0>",a("variable_name_or_path"),"\u3002"]},"Set shortcut":"设置快捷键","Set to false":"设置为 false","Set to true":"设置为 true","Set to unlimited":"设置为无限制","Set up new leaderboards for this game":"为此游戏设置新的排行榜","Set up the base for your project <0>{project_name}.":function(a){return["\u4E3A\u60A8\u7684\u9879\u76EE <0>",a("project_name")," \u8BBE\u7F6E\u57FA\u7840\u3002"]},"Set variable <0>{variable_name_or_path}.":function(a){return["\u8BBE\u7F6E\u53D8\u91CF <0>",a("variable_name_or_path"),"\u3002"]},"Setting the minimum number of FPS below 20 will increase a lot the time that is allowed between the simulation of two frames of the game. If case of a sudden slowdown, or on slow computers, this can create buggy behaviors like objects passing beyond a wall. Consider setting 20 as the minimum FPS.":"设置 FPS 20 以下的最低数量将会增加在模拟两框架游戏之间允许的时间。如果突然减速或缓慢计算机上,这可能造成像物体越过隔离墙以外的bug 行为。考虑设置20,作为最低FPS。","Settings":"设置","Setup grid":"设置网格","Shadow":"阴影","Share":"分享","Share dialog":"分享对话框","Share same collision masks for all animations":"为所有动画共享相同的碰撞蒙版","Share same collision masks for all sprites of this animation":"为该动画的所有精灵共享相同的碰撞蒙版","Share same points for all animations":"为所有动画共享相同的点","Share same points for all sprites of this animation":"为该动画的所有精灵共享相同的点","Share your game":"分享你的游戏","Share your game on gd.games and collect players feedback about your game.":"在 gd.games 上分享您的游戏并收集玩家对您的游戏的反馈。","Share your game with your friends or teammates.":"与您的朋友或队友分享您的游戏。","Sharing online":"在线分享","Sharing the final file with the client":"与客户端共享最终文件","Shooter":"射击","Shop":"商店","Shop section":"商店部分","Short":"短","Short description":"简短描述","Short label":"短标签","Should finish soon.":"应该很快就会完成。","Show":"显示","Show \"Ask AI\" button in the title bar":"在标题栏中显示 “询问AI” 按钮","Show Home":"显示主页","Show Mask":"显示蒙板","Show Project Manager":"打开项目管理器","Show Properties Names":"显示属性名称","Show advanced import options":"显示高级导入选项","Show all feedbacks":"显示所有反馈","Show button to load guided lesson from file and test it":"显示按钮,从文件中加载引导课程并进行测试","Show deprecated behaviors (prefer not to use anymore)":"显示已弃用的行为(不再使用)","Show deprecated options":"显示已弃用的选项","Show details":"显示详情","Show diagnostic report":"显示诊断报告","Show effect":"显示效果","Show experimental behaviors":"显示实验性行为","Show experimental extensions":"显示实验扩展","Show experimental extensions in the list of extensions":"在扩展列表中显示实验扩展","Show experimental objects":"显示实验对象","Show grid":"显示网格","Show in local folder":"在本地文件夹中显示","Show internal":"显示内部设置","Show less":"显示更少","Show lifecycle functions (advanced)":"显示生命周期函数(高级)","Show live assets":"显示活动素材","Show more":"显示更多","Show next assets":"显示下一个资产","Show objects in 3D in the scene editor":"在场景编辑器中以 3D 形式显示对象","Show older":"显示较旧的","Show other lifecycle functions (advanced)":"显示其他生命周期函数(高级)","Show previous assets":"显示以前的资产","Show progress bar":"显示进度条","Show staging assets":"显示暂存素材","Show the \"Create\" section by default when opening GDevelop":"打开 GDevelop 时默认显示\"创建\"部分","Show type errors in JavaScript events (needs a restart)":"在 JavaScript 事件中显示类型错误(需要重新启动)","Show unread feedback only":"仅显示未读反馈","Show version history":"显示版本历史记录","Show/Hide instance properties":"显示/隐藏实例属性","Showing {0} of {resultsCount}":function(a){return["\u663E\u793A ",a("0")," / ",a("resultsCount")]},"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged — and when they drop off quickly.":"显示玩家在游戏中的停留时间。百分比表示基于最佳日期,玩超过3分钟、5分钟、10分钟和15分钟的人数。较高的值意味着当天更好的玩家留存率。这有助于您了解玩家最活跃的时间段以及他们快速流失的时刻。","Side view":"侧边视图","Sign up":"注册","Signing Credentials":"签署证书","Signing options":"签名选项","Simple":"简单","Simulation":"模拟","Single commercial use license for claim with Gold or Pro subscription":"通过黄金或专业订阅申请的单一商业使用许可证","Single file (default)":"单文件 (默认)","Size":"大小","Size:":"大小 ︰","Skins":"皮肤","Skip and create from scratch":"跳过并从头开始创建","Skip the update":"跳过更新","Socials":"社交","Some code experience":"一些代码经验","Some extensions already exist in the project. Please select the ones you want to replace.":"项目中已经存在一些扩展。请选择您想要替换的扩展。","Some icons could not be generated.":"无法生成某些图标。","Some no-code experience":"一些无代码经验","Some things in the answer don't exist in GDevelop":"答案中的一些内容在 GDevelop 中并不存在","Some variants already exist in the project. Please select the ones you want to replace.":"项目中已经存在一些变体。请选择您想要替换的变体。","Something went wrong":"出了些问题","Something went wrong while changing your subscription. Please try again.":"更改您的订阅时出现了问题。请再试一次。","Something went wrong while swapping the asset. Please try again.":"交换资产时出现错误。请重试。","Something went wrong while syncing your Discord username. Please try again later.":"同步您的 Discord 用户名时出现问题。请稍后再试。","Something went wrong while syncing your forum access. Please try again later.":"同步您的论坛访问时出现问题。请稍后再试。","Something wrong happened :(":"出现了某些错误","Something wrong happened when claiming the asset pack. Please check your internet connection or try again later.":"领取资产包时发生错误。请检查您的互联网连接或稍后重试。","Sorry":"很抱歉","Sort by most recent":"按最新排序","Sort order":"排序顺序","Sound":"声音","Sounds and musics":"声音和音乐","Source file":"源文件","Specific game mechanics":"特定的游戏机制","Specify something more to the AI to build":"向 AI 指定更多构建内容。","Speech":"演示","Spine Json":"Spine Json","Spine animation name":"Spine 动画名称","Spine json resource":"Spine json 资源","Sport":"体育运动","Spray cone angle (in degrees)":"发射角度(度)","Sprite":"精灵","Standalone dialog":"独立对话框","Start Network Preview (Preview over WiFi/LAN)":"启动线上预览 (通过 WiFi/LAN 预览)","Start Preview and Debugger":"启动预览和调试器","Start a game where a ball can bounce around the screen":"开始一个球在屏幕上反弹的游戏","Start a new game from this project":"从此项目开始一个新游戏","Start a new game?":"开始新游戏?","Start a preview to generate a thumbnail!":"开始预览以生成缩略图!","Start a quizz game with a question and 4 answers":"开始一个带有问题和 4 个答案的测验游戏","Start a simple endless runner game":"开始一个简单的无尽跑酷游戏","Start a simple platformer with a player that can move and jump":"开始一个简单的平台游戏,玩家可以移动和跳跃","Start all previews from external layout {0}":function(a){return["\u4ECE\u5916\u90E8\u5E03\u5C40\u5F00\u59CB\u6240\u6709\u9884\u89C8 ",a("0")]},"Start all previews from scene {0}":function(a){return["\u4ECE\u573A\u666F\u5F00\u59CB\u6240\u6709\u9884\u89C8 ",a("0")]},"Start build with credits":"开始使用积分构建","Start by adding a new behavior.":"首先添加一个新行为。","Start by adding a new external layout.":"首先添加一个新的外部布局。","Start by adding a new function.":"首先添加一个新函数。","Start by adding a new group.":"首先添加一个新组。","Start by adding a new object.":"首先添加一个新对象。","Start by adding a new property.":"开始时添加一个新属性。","Start by adding a new scene.":"首先添加一个新场景。","Start by adding new external events.":"首先添加新的外部事件。","Start for free":"免费开始","Start from a template":"从一个模板开始","Start learning":"开始学习","Start next chapter":"开始下一章节","Start opacity (0-255)":"开始 不透明","Start preview with diagnostic report":"使用诊断报告开始预览","Start profiling":"开始解析","Start profiling and then stop it after a few seconds to see the results.":"开始分析,且在数秒内停止,显示结果","Start the survey!":"开始调查!","Start typing a command...":"开始输入命令...","Start typing a username":"开始输入用户名","Start your game":"开始你的游戏","Starting engine":"启动引擎","Stay there":"留在这里","Stop":"停止","Stop music and sounds at scene startup":"在场景启动时停止音乐和声音","Stop profiling":"停止 解析","Stop working":"停止工作","Stopped. Ready when you are.":"已停止。准备好随时随地。","Store password":"存储密码","Story-Rich":"故事性","Strategy":"策略","String":"字符串","String (text)":"字符串(文本)","String from a list of options (text)":"从选项列表中的字符串 (文本)","String variables with no value set now default to an empty string (\"\") instead of \"0\". This game was created before this change, so GDevelop maintains the old behavior: unset string variables default to \"0\". It's recommended that you switch to the new behavior and update any variables or conditions relying on \"0\" as a default.":"未设置值的字符串变量现在默认值为一个空字符串(\"\"),而不是\"0\"。这个游戏是在此更改之前创建的,因此 GDevelop 保持了旧的行为:未设置的字符串变量默认值为\"0\"。建议您切换到新行为,并更新任何依赖于\"0\"作为默认值的变量或条件。","Stripe secure":"Stripe 安全","Structure":"结构","Student":"学生","Student accounts":"学生帐户","Studying the event sheets":"研究事件表","Studying the object behaviors":"研究对象行为","Sub Event":"子事件","Submit a free pack":"提交免费包","Submit a paid pack":"提交付费包","Submit a tutorial":"提交一份教程","Submit a tutorial translated in your language":"提交用您的语言翻译的教程","Submit an example":"提交一个示例","Submit an update":"提交更新","Submit and cancel":"提交并取消","Submit to the community":"提交给社区","Submit your project as an example":"作为示例提交您的项目","Subscribe":"订阅","Subscribe to Edu":"订阅 Edu","Subscription Plan":"订阅计划","Subscription outside the app store":"应用程序商店之外的订阅","Subscription with the Apple App store or Google Play store":"通过 Apple App Store 或 Google Play 商店进行订阅","Subscriptions":"订阅","Suffix":"后缀","Support What You Love":"支持你喜欢的内容","Supported files":"支持的文件","Survival":"生存","Swap":"交换","Swap assets":"交换资产","Swap {0} with another asset":function(a){return["\u5C06 ",a("0")," \u4E0E\u5176\u4ED6\u8D44\u4EA7\u4EA4\u6362"]},"Switch to GDevelop Credits":"切换到 GDevelop 积分","Switch to GDevelop credits or keep building with AI.":"切换到 GDevelop 积分或继续使用 AI 进行创作。","Switch to create objects with the highest Z order of the layer":"切换以创建具有最高Z层顺序的对象","Switch to empty string (\"\") as default for string variables":"将字符串变量的默认值切换为空字符串(\"\")","Switch to monthly pricing":"切换到按月定价","Switch to yearly pricing":"切换到按年定价","Sync your role on GDevelop's Discord server":"在 GDevelop 的 Discord 服务器上同步您的角色","Sync your subscription level on GDevelop's forum":"在 GDevelop 论坛上同步您的订阅等级","Table settings":"表格设置","Tags (comma separated)":"标签 (以逗号分隔)","Taking your game further":"让您的游戏更进一步","Target event":"目标事件","Tasks":"任务","Teach":"教育","Teacher accounts":"教师账户","Teachers, courses and universities":"教师、课程和大学","Team invitation":"团队邀请","Team section":"团队部分","Tell us more!...":"告诉我们更多!...","Template":"模板","Test it out!":"测试!","Test value":"测试值","Test value (in second)":"测试值(秒)","Text":"文本","Text color":"文本颜色","Text color:":"文本颜色:","Text to replace in parameters":"在参数中要被替换的文字","Text to search in event sentences":"在事件句子中搜索的文本","Text to search in parameters":"要搜索参数的文本","Texts":"文本","Thank you for supporting GDevelop. Credits were added to your account as a thank you.":"感谢您对 GDevelop 的支持。作为感谢,积分已添加到您的帐户中。","Thank you for supporting the GDevelop open-source community. Credits were added to your account as a thank you.":"感谢您对 GDevelop 开源社区的支持。作为感谢,积分已添加到您的帐户中。","Thank you for your feedback":"感谢您的反馈意见","Thanks for following GDevelop. We added credits to your account as a thank you gift.":"感谢您关注 GDevelop。我们已将积分添加到您的帐户中作为答谢礼物。","Thanks for getting a subscription and supporting GDevelop!":"感谢您订阅并支持 GDevelop !","Thanks for starring GDevelop repository. We added credits to your account as a thank you gift.":"感谢您对 GDevelop 存储库加星标。我们已将积分添加到您的帐户中作为答谢礼物。","Thanks for trying GDevelop! Unlock more projects, AI usage, publishing, multiplayer, courses and much more by upgrading.":"感谢您试用 GDevelop!升级后即可解锁更多项目、发布、多人游戏、课程等。","Thanks to all users of GDevelop! There must be missing tons of people, please send your name if you've contributed and you're not listed.":"感谢所有GDevelop 5\n用户!这里有一堆没有列出的人,如果您没有列出,请联系我们","Thanks to the redemption code you've used, you have this subscription enabled until {0}.":function(a){return["\u611F\u8C22\u60A8\u4F7F\u7528\u7684\u5151\u6362\u4EE3\u7801\uFF0C\u60A8\u53EF\u4EE5\u5728 ",a("0")," \u4E4B\u524D\u542F\u7528\u6B64\u8BA2\u9605\u3002"]},"That's a lot of unsuccessful login attempts! Wait a bit before trying again or reset your password.":"这是一个不成功的登录尝试!请稍等,然后重试或重置您的密码。","The \"{0}\" effect can only be applied once.":function(a){return["\"",a("0"),"\"\u6548\u679C\u53EA\u80FD\u5E94\u7528\u4E00\u6B21\u3002"]},"The 3D editor is new and may still have rough edges. It will continue to be improved in the near future. Read more about it on the [GDevelop blog](https://gdevelop.io/blog/3d-editor).":"3D 编辑器是新的,可能仍然有一些粗糙之处。它将在不久的将来继续得到改进。您可以在 [GDevelop 博客](https://gdevelop.io/blog/3d-editor) 上了解更多信息。","The 3D editor or the game crashed":"3D编辑器或者游戏崩溃了","The 3D editor, or some logic/code inside the game, has encountered an unhandled exception or error. It's necessary to restart the 3D editor.":"3D编辑器,或者游戏内部的某些逻辑/代码,遇到了未处理的异常或错误。需要重新启动3D编辑器。","The AI agent is in beta. Help us make it better by telling us what went wrong:":"AI 代理处于测试阶段。通过告诉我们发生了什么问题来帮助我们改进:","The AI encountered an error while handling your request - this request was not counted in your AI usage. Try again later.":"在处理您的请求时,AI 遇到了错误——这个请求在您的 AI 使用中没有计算在内。稍后再试。","The AI is currently working on your project. Closing the project will stop it. Do you want to continue?":"AI 正在处理您的项目。关闭项目将停止它。您想继续吗?","The AI is currently working on your project. Opening another chat will stop it. Do you want to continue?":"AI 正在处理您的项目。打开另一个聊天将停止它。您想继续吗?","The AI is currently working on your project. Should it continue working while the tab is closed?":"AI 正在处理您的项目。应该在标签关闭时继续工作吗?","The AI is experimental and still being improved. <0>It can inspect your game objects and events.":"AI 是实验性的,还在改进中。<0>它可以检查您的游戏对象和事件。","The Atlas embedded in the Spine fine can't be located.":"嵌入 Spine 细部的图集无法定位。","The Education subscription gives access to GDevelop's Game Development curriculum. Co-created with teachers and institutions, it’s a ready-to-use, proven way to implement STEM in your classroom.":"教育订阅可让您访问 GDevelop 的游戏开发课程。该课程由教师和机构共同创建,是一种现成的、经过验证的在课堂上实施 STEM 的方法。","The GDevelop project is open-source, powered by passion and community. Your membership helps the GDevelop company maintain servers, build new features, develop commercial offerings and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"GDevelop项目是开源的,由热情和社区推动。您的会员资格可以帮助GDevelop公司维护服务器、构建新功能、开发商业产品并保持开源项目的蓬勃发展。我们的目标:让游戏开发快速、有趣且易于所有人使用。","The URLs must be public and stay accessible while you work on this project - they won't be stored inside the project file. When exporting a game, the resources pointed by these URLs will be downloaded and stored inside the game.":"URL必须是公开的,并且在您在此项目工作时保持访问 - 它们不会存储在项目文件中。导出游戏时,将下载并存储在游戏内的这些URL指向的资源。","The animation name {newName} is already taken":function(a){return["\u52A8\u753B\u540D\u79F0 ",a("newName")," \u5DF2\u88AB\u4F7F\u7528"]},"The answer is entirely wrong":"答案是完全错误的","The answer is not as good as it could be":"答案并没有想象中的那么好","The answer is not in my language":"答案不是用我的语言表达的","The answer is out of scope for GDevelop":"这个问题的答案超出了 GDevelop 的范围","The answer is too long":"答案太长了","The answer is too short":"答案太简短了","The asset pack {0} is now available, go claim it in the shop!":function(a){return["\u8D44\u6E90\u5305 ",a("0")," \u73B0\u5DF2\u4E0A\u7EBF\uFF0C\u5FEB\u53BB\u5546\u5E97\u9886\u53D6\u5427\uFF01"]},"The asset pack {0} will be linked to your account {1}.":function(a){return["\u7D20\u6750\u5305 ",a("0")," \u5C06\u88AB\u94FE\u63A5\u5230\u60A8\u7684\u5E10\u6237 ",a("1")]},"The atlas image is smaller than the tile size.":"地图集图像比图块尺寸小。","The auth key {lastUploadedApiKey} was properly stored. It can now be used to automatically upload your app to the app store - verify you've declared an app for it.":function(a){return["\u8EAB\u4EFD\u9A8C\u8BC1\u5BC6\u94A5 ",a("lastUploadedApiKey")," \u5DF2\u6B63\u786E\u5B58\u50A8\u3002\u73B0\u5728\u53EF\u4EE5\u4F7F\u7528\u5B83\u81EA\u52A8\u5C06\u60A8\u7684\u5E94\u7528\u7A0B\u5E8F\u4E0A\u4F20\u5230\u5E94\u7528\u7A0B\u5E8F\u5546\u5E97 - \u9A8C\u8BC1\u60A8\u5DF2\u4E3A\u5176\u58F0\u660E\u4E86\u4E00\u4E2A\u5E94\u7528\u7A0B\u5E8F\u3002"]},"The behavior is not attached to this object. Please select another object or add this behavior: {0}":function(a){return["\u884C\u4E3A\u672A\u9644\u52A0\u5230\u6B64\u5BF9\u8C61\u3002\u8BF7\u9009\u62E9\u53E6\u4E00\u4E2A\u5BF9\u8C61\u6216\u6DFB\u52A0\u6B64\u884C\u4E3A\uFF1A",a("0")]},"The bounding box is an imaginary rectangle surrounding the object collision mask. Even if the object X and Y positions are not changed, this rectangle can change if the object is rotated or if an animation is being played. Usually you should use actions and conditions related to the object position or center, but the bounding box can be useful to deal with the area of the object.":"包围盒是对象碰撞遮罩周围的假想矩形。即使对象的X和Y位置没有改变,这个矩形也可以在物体旋转或播放动画时被修改。通常您应该使用与对象位置或中心相关的动作和条件,但包围盒可能有助于处理对象的区域。","The bundle you are trying to claim does not exist anymore. Please contact support if you think this is an error.":"您试图认领的捆绑包不再存在。如果您认为这是一个错误,请联系支持。","The bundle {0} will be linked to your account {1}.":function(a){return["\u6346\u7ED1\u5305 ",a("0")," \u5C06\u94FE\u63A5\u5230\u60A8\u7684\u5E10\u6237 ",a("1"),"\u3002"]},"The bundle {0} will be sent to the email address provided in the checkout.":function(a){return["\u6346\u7ED1\u5305 ",a("0")," \u5C06\u53D1\u9001\u81F3\u5728\u7ED3\u8D26\u65F6\u63D0\u4F9B\u7684\u7535\u5B50\u90AE\u4EF6\u5730\u5740\u3002"]},"The certificate could not be found. Please verify it was properly uploaded and try again.":"未找到证书。请确认已正确上传并重试。","The certificate was properly generated. Don't forget to create and upload a provisioning profile associated to it.":"证书已正确生成。不要忘记创建并上传与其关联的配置文件。","The chat is becoming long - consider creating a new chat to ask other questions. The AI will better analyze your game and request in a new chat.":"聊天正在变得越来越长。考虑创建一个新的聊天来提问其他问题。 AI 将在新的聊天中更好地分析您的游戏和请求。","The course {0} will be linked to your account {1}.":function(a){return["\u8BFE\u7A0B",a("0"),"\u5C06\u94FE\u63A5\u5230\u60A8\u7684\u5E10\u6237",a("1"),"\u3002"]},"The default variant is erased when the extension is updated.":"当扩展更新时,默认变体会被删除。","The description of the object should explain what the object is doing, and, briefly, how to use it.":"对目标的描述应解释目标正在做些什么,并简要解释如何使用它。","The editor was unable to display the operation ({0}) used by the AI.":function(a){return["\u7F16\u8F91\u5668\u65E0\u6CD5\u663E\u793A AI \u4F7F\u7528\u7684\u64CD\u4F5C (",a("0"),")\u3002"]},"The effect name {newName} is already taken":function(a){return["\u6548\u679C\u540D\u79F0 ",a("newName")," \u5DF2\u7ECF\u88AB\u4F7F\u7528"]},"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before adding them as a student in your team.":"您提供的电子邮件已经在 GDevelop 中拥有订阅。请要求他们在将其添加为您的团队中的学生之前取消订阅。","The email you provided already has a subscription with GDevelop. Please ask them to cancel it before defining them as teacher in your team.":"您提供的电子邮件已订阅 GDevelop。请要求他们取消订阅,然后再将其定义为您团队中的教师。","The email you provided could not be found.":"找不到您提供的电子邮件。","The email you provided is already a member of your team.":"您提供的电子邮件已经是您团队的成员。","The email you provided is already an admin in your team.":"您提供的电子邮件已经是您团队的管理员。","The email you provided is not an admin in your team.":"您提供的电子邮件不是您团队的管理员。","The extension can't be imported because it has the same name as a built-in extension.":"该扩展无法导入,因为它与内置扩展同名。","The extension installed in this project is not up to date. Consider upgrading it before reporting any issue.":"此项目中安装的扩展不是最新的。在报告任何问题之前考虑升级它。","The extension was added to the project. You can now use it in the list of actions/conditions and, if it's a behavior, in the list of behaviors for an object.":"该扩展已添加到项目中。 您现在可以在操作/条件列表中使用它,如果它是一种行为,则可以在对象的行为列表中使用。","The far plane distance must be greater than the near plan distance.":"远平面距离必须大于近平面距离。","The field of view cannot be lower than 0° or greater than 180°.":"视野不能小于0°或大于180°。","The file {0} is invalid.":function(a){return["\u6587\u4EF6 ",a("0")," \u65E0\u6548\u3002"]},"The file {0} is too large. Use files that are smaller for your game: each must be less than {1} MB.":function(a){return["\u6587\u4EF6 ",a("0")," \u592A\u5927\u3002\u4E3A\u60A8\u7684\u6E38\u620F\u4F7F\u7528\u8F83\u5C0F\u7684\u6587\u4EF6\uFF1A\u6BCF\u4E2A\u6587\u4EF6\u5FC5\u987B\u5C0F\u4E8E ",a("1")," MB\u3002"]},"The following actions, conditions, or expressions no longer exist in their extensions. This can happen when an extension's API has changed or when functionality has been removed. Update or remove these instructions.":"以下操作、条件或表达式在其扩展中不存在。这可能是因为扩展的 API 已经更改或功能已被移除。请更新或移除这些指令。","The following events have invalid parameters (shown with red underline in the events sheet). Click a location to navigate there.":"以下事件具有无效参数(在事件表中用红色下划线显示)。点击位置以导航。","The following file(s) cannot be used for this kind of object: {0}":function(a){return["\u4EE5\u4E0B\u6587\u4EF6 (s) \u4E0D\u80FD\u7528\u4E8E\u8FD9\u7C7B\u5BF9\u8C61: ",a("0")]},"The font size is stored directly inside the font. If you want to change it, export again your font using an external editor like bmFont. Click on the help button to learn more.":"字体的大小直接存储在字体内。 如果您想要更改其大小,请使用如 bmFont 的外部编辑器修改后重新导出导入您的字体。点击帮助按钮了解更多信息。","The force will only push the object during the time of one frame. Typically used in an event with no conditions or with conditions that stay valid for a certain amount of time.":"力只会推这个物体一帧。通常用在一个没有条件的事件中,或在某段事件类有效的事件","The force will push the object forever, unless you use the action \"Stop the object\". Typically used in an event with conditions that are only true once, or with a \"Trigger Once\" condition.":"除非您使用“停止对象”操作,否则该力将永远推动对象。通常用于带有仅为一次真的条件,或具有“触发一次”条件的事件中。","The free version is enough for me":"免费版本对我来说已经足够了","The game template {0} will be linked to your account {1}.":function(a){return["\u6E38\u620F\u6A21\u677F ",a("0")," \u5C06\u94FE\u63A5\u5230\u60A8\u7684\u5E10\u6237 ",a("1"),"\u3002"]},"The game was properly exported. You can now use Electron Builder (you need Node.js installed and to use the command-line on your computer to run it) to create an executable.":"游戏已正确导出。您现在可以使用 Electron Builder (您需要安装 Node.js,并且使用命令行来运行它) 来创建可执行文件。","The game you're trying to open is not registered online. Open the project file, then register it before continuing.":"您试图打开的游戏没有在线注册。打开项目文件,然后注册再继续。","The icing on the cake":"锦上添花","The image should be at least 864x864px, and the logo must fit [within a circle of 576px](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions). Transparent borders are automatically added when generated to help ensuring":"图像应至少为864x864px,徽标必须适合 [在576px的圆圈内] (https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions). 生成时会自动添加透明边框,以帮助确保","The invitation sent to {email} will be cancelled.":function(a){return["\u53D1\u9001\u81F3 ",a("email")," \u7684\u9080\u8BF7\u5C06\u88AB\u53D6\u6D88\u3002"]},"The latest save of \"{cloudProjectName}\" is corrupt and cannot be opened.":function(a){return[a("cloudProjectName"),"\u7684\u6700\u65B0\u4FDD\u5B58\u5DF2\u635F\u574F\uFF0C\u65E0\u6CD5\u6253\u5F00\u3002"]},"The latest save of this project is corrupt and cannot be opened.":"此项目的最新保存已损坏,无法打开。","The layer {0} does not contain any object instances. Continue?":function(a){return["\u56FE\u5C42 ",a("0")," \u4E0D\u5305\u542B\u4EFB\u4F55\u5BF9\u8C61\u5B9E\u4F8B\u3002\u662F\u5426\u7EE7\u7EED\uFF1F"]},"The light object was automatically placed on the Lighting layer.":"光照物件自动放置在照明图层。","The lighting layer renders an ambient light on the scene. All lights should be placed on this layer so that shadows are properly rendered. By default, the layer follows the base layer camera. Uncheck this if you want to manually move the camera using events.":"照明图层会在屏幕上渲染一个环境光。所有灯光都应放在这个照明图层上,以使阴影得到正确的渲染。 默认情况下,将根据基础图层相机渲染。如果您想通过事件单独控制本图层相机,请取消选中此项。","The link to the asset pack you've followed seems outdated. Why not take a look at the other packs in the asset store?":"您所关注的资产包的链接似乎已过时。为什么不看看资产商店中的其他包呢?","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles in the store?":"您关注的捆绑包链接似乎已过时。为什么不看看商店中的其他捆绑包?","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles?":"您所关注的模板的链接似乎已过时。为什么不看看其他模板呢?","The link to the game template you've followed seems outdated. Why not take a look at the other templates in the store?":"您所关注的游戏模板的链接似乎已过时。为什么不看看商店中的其他模板呢?","The main account of the Education plan cannot be modified.":"教育计划的主要内容不能修改。","The maximum 2D drawing distance must be strictly greater than 0.":"最大2D绘图距离必须严格大于0。","The model has {meshShapeTrianglesCount} triangles. To keep good performance, consider making a simplified model with a modeling tool.":function(a){return["\u6A21\u578B\u6709 ",a("meshShapeTrianglesCount")," \u4E09\u89D2\u5F62\u3002\u4E3A\u4E86\u4FDD\u6301\u826F\u597D\u7684\u6027\u80FD\uFF0C\u8BF7\u8003\u8651\u4F7F\u7528\u5EFA\u6A21\u5DE5\u5177\u5236\u4F5C\u7B80\u5316\u6A21\u578B\u3002"]},"The monthly free asset pack perk was not part of your plan at the time you got your subscription to GDevelop. To enjoy this perk, please purchase a new subscription.":"当您订阅 GDevelop 时,每月免费资产包福利并不属于您的计划的一部分。要享受此优惠,请购买新的订阅。","The more descriptive you are, the better we can match the content we’ll recommend.":"您的描述性越强,我们就越能匹配我们推荐的内容。","The name of your game is empty":"您的游戏名称为空","The near plane distance must be strictly greater than 0 and lower than the far plan distance.":"近平面距离必须严格大于 0 且小于远平面距离。","The number of decimal places must be a whole value between {precisionMinValue} and {precisionMaxValue}":function(a){return["\u5C0F\u6570\u70B9\u6570\u5FC5\u987B\u662F ",a("precisionMinValue")," \u548C ",a("precisionMaxValue")," \u4E4B\u95F4\u7684\u6574\u6570\u503C"]},"The number of displayed entries must be a whole value between {displayedEntriesMinNumber} and {displayedEntriesMaxNumber}":function(a){return["\u663E\u793A\u7684\u6761\u76EE\u6570\u91CF\u5FC5\u987B\u662F\u4E00\u4E2A ",a("displayedEntriesMinNumber")," \u548C ",a("displayedEntriesMaxNumber")," \u4E4B\u95F4\u7684\u6574\u6570\u503C"]},"The object does not exist or can't be used here.":"该对象不存在或不能在此处使用。","The package name begins with com.example, make sure you replace it with an unique one to be able to publish your game on app stores.":"软件包名称以 com.example 开头,请确保将其替换为唯一的软件包,以便能够在应用商店上发布您的游戏。","The package name begins with com.example, make sure you replace it with an unique one, else installing your game might overwrite other games.":"软件包名称以com.example开始,请确保将其替换为唯一的软件包,否则安装您的游戏可能会覆盖其他游戏。","The package name is containing invalid characters or not following the convention \"xxx.yyy.zzz\" (numbers allowed after a letter only).":"包名包含无效字符,或者未遵循“xxx.yy.zz”的规范(仅允许数字跟在字母后面)。","The package name is empty.":"包名称为空。","The package name is too long.":"包名称太长。","The password is invalid.":"密码无效。","The password you entered is incorrect. Please try again.":"您输入密码不正确。请再试一次。","The polygon is not convex":"多边形不是凸的","The polygon is not convex. Ensure it is, otherwise the collision mask won't work.":"此多边形不是凸多边形。请保证是凸多边形,否则碰撞遮罩无法工作。","The preview could not be launched because an error happened: {0}.":function(a){return["\u65E0\u6CD5\u542F\u52A8\u9884\u89C8\uFF0C\u56E0\u4E3A\u53D1\u751F\u9519\u8BEF\uFF1A ",a("0"),"\u3002"]},"The preview could not be launched because you're offline.":"由于您离线无法启动预览。","The project associated with this AI request does not match the current project. Open the correct project to restore to this state.":"与此 AI 请求相关的项目与当前项目不匹配。打开正确的项目以恢复到此状态。","The project could not be saved. Please try again later.":"项目无法保存。请稍后再试。","The project currently opened is not registered online. Register it now to get access to leaderboards, player accounts, analytics and more!":"当前打开的项目未在线注册。立即注册以访问排行榜、玩家帐户、分析等!","The project currently opened is registered online but you don't have access to it. A link or file will be created but the game will not be registered.":"当前打开的项目已在线注册,但您无法访问该项目。一个链接或文件将被创建,但游戏将不会被注册。","The project file appears to be corrupted, but an autosave file exists (backup made automatically by GDevelop on {0}). Would you like to try to load it instead?":function(a){return["\u9879\u76EE\u6587\u4EF6\u4F3C\u4E4E\u5DF2\u635F\u574F\uFF0C\u4F46\u662F\u5B58\u5728\u81EA\u52A8\u4FDD\u5B58\u6587\u4EF6(\u7531 GDevelop \u5728 ",a("0")," \u81EA\u52A8\u5907\u4EFD)\u3002 \u4F60\u60F3\u8981\u52A0\u8F7D\u5B83\u5417\uFF1F"]},"The project save associated with this AI request message is no longer available due to your current plan's limit. Upgrade your subscription to access older project saves.":"与此 AI 请求消息关联的项目保存因您当前计划的限制而不再可用。升级您的订阅以访问较旧的项目保存。","The project save associated with this AI request message was not found. It may have been deleted.":"与此 AI 请求消息关联的项目保存未找到。可能已被删除。","The provisioning profile was properly stored ( {lastUploadedProvisioningProfileName}). If you properly uploaded the certificate before, it can now be used.":function(a){return["\u9884\u914D\u914D\u7F6E\u6587\u4EF6\u5DF2\u6B63\u786E\u5B58\u50A8 (",a("lastUploadedProvisioningProfileName"),")\u3002\u5982\u679C\u60A8\u4E4B\u524D\u6B63\u786E\u4E0A\u4F20\u4E86\u8BC1\u4E66\uFF0C\u73B0\u5728\u5C31\u53EF\u4EE5\u4F7F\u7528\u4E86\u3002"]},"The purchase will be linked to your account once done.":"购买完成后将链接到您的帐户。","The request could not be processed. Please verify you uploaded a valid certificate file (.cer) from Apple.":"请求无法处理。请确认您上传了来自Apple的有效证书文件(.cer)。","The request could not reach the servers, ensure you are connected to internet.":"请求无法到达服务器,确保您已连接到互联网。","The resource has been downloaded":"资源已下载","The result wasn't as good as it could have been":"结果没有达到预期的好。","The selected resource is not a proper Spine resource.":"所选资源不是正确的 Spine 资源。","The sentence displays one or more wrongs parameters:":"该句子显示一个或多个错误参数:","The sentence is probably missing this/these parameter(s):":"该句可能丢失以下参数:()","The server is currently unavailable. Please try again later.":"服务器当前不可用。请稍后再试。","The shape used in the Physics behavior is independent from the collision mask of the object. Be sure to use the \"Collision\" condition provided by the Physics behavior in the events. The usual \"Collision\" condition won't take into account the shape that you've set up here.":"物理行为中使用的形状独立于物体的碰撞遮罩。 请务必使用由在事件中的物理行为提供的“碰撞”条件。通常的“碰撞”条件不会考虑您在此处设置的形状。","The specified external events do not exist in the game. Be sure that the name is correctly spelled or create them using the project manager.":"指定的外部事件不在游戏中。请确认名称正确,也可以使用项目管理器创建。","The subscription of this account comes from outside the app store. Connect with your account on editor.gdevelop.io from your web-browser to manage it.":"该账户的订阅来自于应用商店之外。从您的网络浏览器连接到您在 editor.gdevelop.io 上的帐户以对其进行管理。","The subscription of this account was done using Apple or Google Play. Connect on your account on your Apple or Google device to manage it.":"此帐户的订阅是使用 Apple 或 Google Play 完成的。在您的 Apple 或 Google 设备上连接您的帐户以对其进行管理。","The text input will be always shown on top of all other objects in the game - this is a limitation that can't be changed. According to the platform/device or browser running the game, the appearance can also slightly change.":"文本输入将始终显示在游戏中所有其他对象的顶部——这是一个无法更改的限制。根据运行游戏的平台/设备或浏览器的不同,游戏的外观也会略有变化。","The tilemap must be designed in a separated program, Tiled, that can be downloaded on mapeditor.org. Save your map as a JSON file, then select here the Atlas image that you used and the Tile map JSON file.":"必须在单独的程序Tiled中设计tilemap,可以在mapeditor.org上下载该程序。将地图另存为JSON文件,然后在此处选择您使用的Atlas图像和Tile Map JSON文件。","The token used to claim this purchase is invalid.":"用于认领此购买的令牌无效。","The uploaded certificate does not match the signing request that was generated. Please create a new signing request and generate a new certificate from Apple using it.":"上传的证书与生成的签名请求不匹配。请创建一个新的签名请求,并根据该请求从Apple生成一个新的证书。","The usage of a number or expression is deprecated. Please now use only \"Permanent\" or \"Instant\" for configuring forces.":"使用一个数字或表达式已被废弃。现在只能用“Permanent(永久)”或“Instan(即时)”来配置力。","The variable name contains a space - this is not recommended. Prefer to use underscores or uppercase letters to separate words.":"变量名称包含一个空格 - 不推荐使用这个空格。更喜欢使用下划线或大写字母分隔单词。","The variable name looks like you're building an expression or a formula. You can only use this for structure or arrays. For example: Score[3].":"变量名称看起来像你正在构建一个表达式或公式。 您只能使用这个结构或数组。例如:得分[3]。","The version history is available for cloud projects only.":"版本历史记录仅适用于云项目。","The version that you've set for the game is invalid.":"您为游戏设置的版本无效。","The {productType} {productName} will be linked to your account {0}":function(a){return[a("productType")," ",a("productName")," \u5C06\u94FE\u63A5\u5230\u60A8\u7684\u8D26\u6237 ",a("0")]},"There are currently no leaderboards created for this game. Open the leaderboards manager to create one.":"当前没有为这场游戏创建排行榜。打开排行榜管理器创建一个。","There are no <0>2D effects on this layer.":"此图层上没有<0>2D效果。","There are no <0>3D effects on this layer.":"此图层上没有<0>3D效果。","There are no <0>behaviors on this object instance.":"此对象实例上没有<0>行为。","There are no <0>behaviors on this object.":"此对象上没有<0>行为。","There are no <0>effects on this object.":"此对象上没有<0>效果。","There are no <0>variables on this object.":"此对象上没有<0>变量。","There are no <0>variables on this scene.":"此场景上没有<0>变量。","There are no common <0>variables on this group objects.":"此组对象上没有共同的<0>变量。","There are no objects. Objects will appear if you add some as parameter or add children to the object.":"没有对象。如果您添加一些对象作为参数或向对象添加子项,则会出现对象。","There are no objects. Objects will appear if you add some as parameters.":"没有对象。如果您把一些对象作为参数添加时,对象才会出现。","There are no provisioning profile created for this certificate. Create one in the Apple Developer interface and add it here.":"没有为此证书创建配置文件。在 Apple Developer 界面中创建一个并将其添加到此处。","There are no variables on this instance.":"此实例上没有变量。","There are unsaved changes":"有未保存的更改","There are variables used in events but not declared in this list: {0}.":function(a){return["\u5728\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u4E86\u53D8\u91CF\uFF0C\u4F46\u5728\u6B64\u5217\u8868\u4E2D\u6CA1\u6709\u58F0\u660E: ",a("0"),"\u3002"]},"There are {instancesCountInLayout} object instances on this layer. Should they be moved to another layer?":function(a){return["\u6B64\u5C42\u4E0A\u6709 ",a("instancesCountInLayout")," \u5BF9\u8C61\u5B9E\u4F8B\u3002\u662F\u5426\u5E94\u8BE5\u5C06\u5B83\u4EEC\u79FB\u52A8\u5230\u53E6\u4E00\u5C42\uFF1F"]},"There are {instancesCount} instances of objects on this layer.":function(a){return["\u6B64\u56FE\u5C42\u4E0A\u6709 ",a("instancesCount")," \u4E2A\u5BF9\u8C61\u5B9E\u4F8B\u3002"]},"There is no <0>global object yet.":"还没有 <0> 全局对象 。","There is no behavior to set up for this object.":"这个对象没有要设置的行为。","There is no extension to update.":"没有可更新的扩展。","There is no global group yet.":"还没有全局组。","There is no object in your game or in this scene. Start by adding an new object in the scene editor, using the objects list.":"您的游戏或本场景中没有对象。请在场景编辑器的对象列表中,添加一个新的对象。","There is no variable to set up.":"没有变量需要设置。","There is no variant to update.":"没有可更新的变体。","There is nothing to configure for this behavior. You can still use events to interact with the object and this behavior.":"没有任何可用来配置此行为。您仍然可以使用事件来与对象和这种行为互动。","There is nothing to configure for this effect.":"没有什么需要配置的。","There is nothing to configure for this object. You can still use events to interact with the object.":"没有任何可用来配置此行为。您仍然可以使用事件来与对象和这种行为互动。","There is nothing to configure.":"没有什么需要配置的。","There was a problem":"出现了一个问题","There was an error verifying the URL(s). Please check they are correct.":"验证URL(s)时出错。请检查它们是否正确。","There was an error while canceling your subscription. Verify your internet connection or try again later.":"取消订阅时出错。请验证您的互联网连接或稍后重试。","There was an error while creating the object \"{0}\". Verify your internet connection or try again later.":function(a){return["\u521B\u5EFA\u5BF9\u8C61\u201C",a("0"),"\u201D\u65F6\u51FA\u9519\u3002\u8BF7\u9A8C\u8BC1\u60A8\u7684\u4E92\u8054\u7F51\u8FDE\u63A5\u6216\u7A0D\u540E\u518D\u8BD5\u3002"]},"There was an error while installing the asset \"{0}\". Verify your internet connection or try again later.":function(a){return["\u5B89\u88C5\u8D44\u4EA7 \"",a("0"),"\" \u65F6\u51FA\u9519\u3002\u8BF7\u9A8C\u8BC1\u60A8\u7684\u4E92\u8054\u7F51\u8FDE\u63A5\u6216\u7A0D\u540E\u91CD\u8BD5\u3002"]},"There was an error while making an auto-save of the project. Verify that you have permissions to write in the project folder.":"自动保存项目时出错。请验证您是否有写入项目文件夹的权限。","There was an error while updating the game's thumbnail on gd.games. Verify your internet connection or try again later.":"在 gd.games 上更新游戏缩略图时出错。请检查您的互联网连接或稍后重试。","There was an error while uploading some resources. Verify your internet connection or try again later.":"上传某些资源时出错。请验证您的互联网连接或稍后再试。","There was an issue getting the game analytics.":"获取游戏分析时出现问题。","There was an unknown error when trying to apply the code. Double check the code, try again later or contact us if this persists.":"尝试应用代码时出现未知错误。仔细检查代码,稍后再试,如果问题仍然存在,请联系我们。","There were errors when importing resources for the project. You can retry (recommended) or continue despite the errors. In this case, the project might be missing some resources.":"导入项目资源时出错。您可以重试 (推荐) 或继续,尽管出现错误。在这种情况下,项目可能缺少一些资源。","There were errors when loading extensions. You cannot continue using GDevelop.":"在加载扩展时出现错误。您无法继续使用 GDevelop。","There were errors when preparing new leaderboards for the project.":"在为项目准备新的排行榜时发生错误。","These are behaviors":"这些是行为","These are objects":"这些是对象","These behaviors are already attached to the object:{0}Do you want to replace their property values?":function(a){return["\u8FD9\u4E9B\u884C\u4E3A\u5DF2\u7ECF\u9644\u52A0\u5230\u5BF9\u8C61: ",a("0"),"\u662F\u5426\u8981\u66FF\u6362\u5B83\u4EEC\u7684\u5C5E\u6027\u503C\uFF1F"]},"These effects already exist:{0}Do you want to replace them?":function(a){return["\u8FD9\u4E9B\u6548\u679C\u5DF2\u7ECF\u5B58\u5728:",a("0"),"\u4F60\u60F3\u8981\u66FF\u6362\u5B83\u4EEC\u5417\uFF1F"]},"These parameters already exist:{0}Do you want to replace them?":function(a){return["\u8FD9\u4E9B\u53C2\u6570\u5DF2\u7ECF\u5B58\u5728\uFF1A",a("0"),"\u60A8\u60F3\u8981\u66FF\u6362\u5B83\u4EEC\u5417\uFF1F"]},"These properties already exist:{0}Do you want to replace them?":function(a){return["\u8FD9\u4E9B\u5C5E\u6027\u5DF2\u7ECF\u5B58\u5728\uFF1A",a("0"),"\u60A8\u60F3\u8981\u66FF\u6362\u5B83\u4EEC\u5417\uFF1F"]},"These variables hold additional information and are available on all objects of the group.":"这些变量包含附加信息,并且可用于组中的所有对象。","These variables hold additional information on a project.":"这些变量包含项目的附加信息。","These variables hold additional information on a scene.":"这些变量包含场景中的附加信息。","These variables hold additional information on an object.":"这些变量包含有关对象的附加信息。","Thickness":"厚度","Thinking about your request...":"正在考虑您的请求...","Thinking through the approach":"思考方法","Thinking through the details":"思考细节","Third editor":"第三编辑器","Third-party":"第三方","This Auth Key was not sent or is not ready to be used.":"此身份验证密钥尚未发送或尚未准备好使用。","This Else event is not preceded by a standard event (or another Else), so it will run normally, like an event without an Else.":"此 Else 事件没有前置标准事件(或另一个 Else),因此它将像没有 Else 的事件一样正常运行。","This Else event will run if the previous event conditions are not met.":"如果前一个事件条件不满足,此 Else 事件将运行。","This Spine resource was exported with Spine {spineVersion}. The runtime requires data exported from Spine 4.2. Animations may not work correctly — please re-export from Spine 4.2.":function(a){return["\u6B64 Spine \u8D44\u6E90\u662F\u4F7F\u7528 Spine ",a("spineVersion")," \u5BFC\u51FA\u7684\u3002\u8FD0\u884C\u65F6\u9700\u8981\u4ECE Spine 4.2 \u5BFC\u51FA\u7684\u6570\u636E\u3002\u52A8\u753B\u53EF\u80FD\u65E0\u6CD5\u6B63\u786E\u5DE5\u4F5C \u2014 \u8BF7\u4ECE Spine 4.2 \u91CD\u65B0\u5BFC\u51FA\u3002"]},"This account already owns this product, you cannot activate it again.":"此账户已经拥有该产品,您无法再次激活它。","This account has been deactivated or deleted.":"此帐户已被停用或删除。","This account is already a student in another team.":"该账户已经是另一个团队的学生。","This action cannot be undone.":"此操作无法撤消。","This action is deprecated and should not be used anymore. Instead, use for all your objects the behavior called \"Physics2\" and the associated actions (in this case, all objects must be set up to use Physics2, you can't mix the behaviors).":"此操作被废弃,不应再使用。相反,现在应该使用“物理2”插件的所有对象,行为和相关动作 (在这种情况下,所有对象都必须设置使用物理2插件,您不能混合行为)","This action is deprecated and should not be used anymore. Instead, use the \"Text input\" object.":"此操作已弃用,不应再使用。请改用“文本输入”对象。","This action is not automatic yet, we will get in touch to gather your bank details.":"此操作尚未自动完成,我们将与您联系以收集您的银行详细信息。","This action will create a new texture and re-render the text each time it is called, which is expensive and can reduce performance. Avoid changing the character size of text frequently.":"此操作将创建一个新的纹理,并在每次调用时重新渲染文本,这非常耗费资源并可能降低性能。请避免频繁更改文本的字符大小。","This asset requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u8D44\u4EA7\u9700\u8981\u5BF9\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u6269\u5C55\u8FDB\u884C\u66F4\u65B0",a("0"),"\u60A8\u60F3\u73B0\u5728\u66F4\u65B0\u5B83\u4EEC\u5417\uFF1F"]},"This behavior can be updated with new features and fixes.{0}Do you want to update it now ?":function(a){return["\u6B64\u884C\u4E3A\u53EF\u4EE5\u901A\u8FC7\u65B0\u529F\u80FD\u548C\u4FEE\u590D\u8FDB\u884C\u66F4\u65B0\u3002",a("0"),"\u4F60\u60F3\u7ACB\u5373\u66F4\u65B0\u5417\uFF1F"]},"This behavior can be updated. You may have to do some adaptations to make sure your game still works.{0}Do you want to update it now ?":function(a){return["\u6B64\u884C\u4E3A\u53EF\u4EE5\u66F4\u65B0\u3002\u4F60\u53EF\u80FD\u9700\u8981\u505A\u4E00\u4E9B\u8C03\u6574\u4EE5\u786E\u4FDD\u4F60\u7684\u6E38\u620F\u4ECD\u7136\u6709\u6548\u3002",a("0"),"\u4F60\u60F3\u7ACB\u5373\u66F4\u65B0\u5417\uFF1F"]},"This behavior can't be setup per instance.":"此行为无法按实例设置。","This behavior is being used by multiple types of objects. Thus, you can't restrict its usage to any particular object type. All the object types using this behavior are listed here: {0}":function(a){return["\u591A\u79CD\u7C7B\u578B\u7684\u5BF9\u8C61\u6B63\u5728\u4F7F\u7528\u6B64\u884C\u4E3A\uFF0C\u56E0\u6B64\u60A8\u4E0D\u80FD\u5C06\u5176\u7528\u6CD5\u9650\u5236\u4E3A\u4EFB\u4F55\u7279\u5B9A\u7684\u5BF9\u8C61\u7C7B\u578B\u3002\u6B64\u5904\u5217\u51FA\u4E86\u4F7F\u7528\u6B64\u884C\u4E3A\u7684\u6240\u6709\u5BF9\u8C61\u7C7B\u578B\uFF1A ",a("0")]},"This behavior is unknown. It might be a behavior that was defined in an extension and that was later removed. You should delete it.":"此行为未知。它可能是在扩展名中定义并随后被删除的行为。您应该删除它。","This behavior requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u884C\u4E3A\u9700\u8981\u5BF9\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u6269\u5C55\u8FDB\u884C\u66F4\u65B0",a("0"),"\u60A8\u60F3\u73B0\u5728\u66F4\u65B0\u5B83\u4EEC\u5417\uFF1F"]},"This behavior will be visible in the scene and events editors.":"此行为将在场景和事件编辑器中可见。","This behavior won't be visible in the scene and events editors.":"此行为将在场景和事件编辑器中不可见。","This build is old and the generated games can't be downloaded anymore.":"这个构建太老了,生成的游戏已经不可下载","This bundle contains a subscription for {planName}. Do you want to activate your subscription right away?":function(a){return["\u6B64\u5305\u5305\u542B ",a("planName")," \u7684\u8BA2\u9605\u3002\u60A8\u60F3\u7ACB\u5373\u6FC0\u6D3B\u60A8\u7684\u8BA2\u9605\u5417\uFF1F"]},"This bundle includes:":"此捆绑包包括:","This can be customized for each scene in the scene properties dialog.":"这可以在场景属性对话框中为每个场景自定义。","This can either be a URL to a web page, or a path starting with a slash that will be opened in the GDevelop wiki. Leave empty if there is no help page, although it's recommended you eventually write one if you distribute the extension.":"它可以是网页的URL,也可以是将在GDevelop Wiki中打开的以斜杠开头的路径。如果没有帮助页面,请保留为空,尽管建议您在分发扩展时最终写一个帮助页面。","This certificate has an unknown type and is probably unable to be used by GDevelop.":"该证书的类型未知,GDevelop 可能无法使用。","This certificate type is unknown and might not work when building the app. Are you sure you want to continue?":"此证书类型未知,并且在构建应用程序时可能不起作用。你确定你要继续吗?","This certificate was not sent or is not ready to be used.":"该证书尚未发送或尚未准备好使用。","This code is a coupon code and can't be redeemed here. Start a purchase and enter it there to get a discount.":"此代码是一个优惠券代码,无法在此处兑换。开始购买并在此处输入以获取折扣。","This code is not valid - verify you've entered it properly.":"此代码无效 - 请验证您输入的代码是否正确。","This code was valid but can't be redeemed anymore. If this is unexpected, contact us or the code provider.":"此代码有效但无法再兑换。如果这是意外,请联系我们或代码提供商。","This condition may have unexpected results when the object is on different floors at the same time, due to the fact that the engine only considers the first floor the object comes into contact with.":"当对象同时处于不同的地板上,这个条件可能会产生意外的结果。 由于引擎只考虑到一层,对象会被碰到。","This course is translated in multiple languages.":"本课程提供多种语言的翻译。","This email is invalid.":"此电子邮件无效。","This email was already used for another account.":"此电子邮件已被用于另一个帐户。","This event will be repeated for all instances.":"此事件将对所有实例重复。","This event will be repeated only for the first instances, up to this limit.":"此事件将仅对首个实例重复,直到此限制。","This extension requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u6269\u5C55\u9700\u8981\u5BF9\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u6269\u5C55\u8FDB\u884C\u66F4\u65B0",a("0"),"\u60A8\u60F3\u73B0\u5728\u66F4\u65B0\u5B83\u4EEC\u5417\uFF1F"]},"This file is an extension file for GDevelop 5. You should instead import it, using the window to add a new extension to your project.":"此文件是GDevelop 5的扩展文件。您应该导入它,使用窗口向项目添加新的扩展。","This file is corrupt":"此文件已损坏","This file is not recognized as a GDevelop 5 project. Be sure to open a file that was saved using GDevelop.":"此文件不是 GDevelop 5 工程文件。请务必打开使用 GDevelop 保存过的文件。","This function calls itself (it is \"recursive\"). Ensure this is expected and there is a proper condition to stop it if necessary.":"该函数调用自身(它是“递归的”)。确保这是预期的,并且有适当的条件可以在必要时停止它。","This function is asynchronous - it will only allow subsequent events to run after calling the action \"End asynchronous task\" within the function.":"该函数是异步的 - 它只允许在调用函数内的“结束异步任务”操作后运行后续事件。","This function is marked as deprecated. It will be displayed with a warning in the events editor.":"此功能已标记为已弃用。在事件编辑器中将显示警告。","This function will be visible in the events editor.":"此函数将在事件编辑器中可见。","This function will have a lot of parameters. Consider creating groups or functions for a smaller set of objects so that the function is easier to reuse.":"此函数会有许多参数。考虑为较小的一组对象创建组或函数,以便使函数更容易再使用。","This function won't be visible in the events editor.":"此功能在事件编辑器中不可见。","This game is not registered online. Do you want to register it to access the online features?":"此游戏尚未在线注册。您是否要注册以使用在线功能?","This game is registered online but you don't have access to it. Ask the owner of the game to add your account to the list of owners to be able to manage it.":"此游戏已在线注册,但您无权访问。请让游戏所有者将您的帐户添加到所有者列表中,以便管理它。","This game is using leaderboards. GDevelop will create new leaderboards for this game in your account, so that the game is ready to be played and players can send their scores.":"此游戏使用排行榜。GDevelop将在您的帐户中为此游戏创建新的排行榜,以便游戏准备就绪,玩家可以发送他们的分数。","This group contains objects of different kinds. You'll only be able to use actions and conditions common to all objects with this group.":"该组包含不同种类的对象。您将只能使用该组中所有对象共有的操作和条件。","This group contains objects of the same kind ({type}). You can use actions and conditions related to this kind of objects in events with this group.":function(a){return["\u8BE5\u7EC4\u5305\u542B\u76F8\u540C\u7C7B\u578B (",a("type"),") \u7684\u5BF9\u8C61\u3002\u60A8\u53EF\u4EE5\u5728\u6B64\u7EC4\u7684\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u4E0E\u6B64\u7C7B\u5BF9\u8C61\u76F8\u5173\u7684\u64CD\u4F5C\u548C\u6761\u4EF6\u3002"]},"This invitation is no longer valid.":"该邀请不再有效。","This is a \"lifecycle function\". It will be called automatically by the game engine. It has no parameters.":"这是一个“生命周期功能”。它将被游戏引擎自动调用。它没有参数。","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene having the behavior.":"这是一个“生命周期方法”。对于场景中拥有该行为的每个实例,这个方法都会被游戏引擎自动调用。","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene.":"这是一种“生命周期方法”。游戏引擎会为场景中的每个实例自动调用它。","This is a behavior.":"这是一种行为。","This is a condition.":"这是一个条件。","This is a multichapter tutorial. GDevelop will save your progress so you can take a break when you need it.":"这是一个多章节教程。 GDevelop 将保存您的进度,以便您可以在需要时休息一下。","This is a relative path that will open in the GDevelop wiki.":"这是在 GDevelop wiki 中打开的相对路径。","This is all the feedback received on {0} coming from gd.games.":function(a){return["\u8FD9\u662F\u5728 ",a("0")," \u6536\u5230\u7684\u6765\u81EA gd.games \u7684\u6240\u6709\u53CD\u9988\u3002"]},"This is an action.":"这是一个操作。","This is an asynchronous action, meaning that the actions and sub-events following it will wait for it to end. You should use other async actions like \"wait\" to schedule your actions and don't forget to use the action \"End asynchronous function\" to mark the end of the action.":"这是一个异步动作,意味着它后面的动作和子事件将等待它结束。您应该使用其他异步动作,比如“等待”来安排您的动作,并且不要忘记使用“结束异步函数”动作来标记动作的结束。","This is an event.":"这是一个事件。","This is an expression.":"这是一个表达式。","This is an extension made by a community member and it only got through a light review by the GDevelop extension team. As such, we can't guarantee it meets all the quality standards of fully reviewed extensions.":"这是一个由社区成员制作的扩展,它仅经过GDevelop扩展团队的简单审查。因此,我们无法保证它符合所有全面审查扩展的质量标准。","This is an extension.":"这是一个扩展。","This is an object.":"这是一个对象。","This is link to a webpage.":"这是链接到一个网页。","This is not a URL starting with \"http://\" or \"https://\".":"这不是以 \"http://\" 或 \"https://\" 开头的URL。","This is recommended as this allows you to earn money from your games. If you disable this, your game will not show any advertisement.":"建议使用此功能,因为这样您可以从游戏中赚钱。如果您禁用此功能,您的游戏将不会显示任何广告。","This is the configuration of your behavior. Make sure to choose a proper internal name as it's hard to change it later. Enter a description explaining what the behavior is doing to the object.":"这是你的行为配置。确保选择一个合适的内部名称,因为以后很难更改它。输入一个描述,以解释行为对对象的作用。","This is the configuration of your object. Make sure to choose a proper internal name as it's hard to change it later.":"这是对象的配置。请确保选择一个合适的内部名称,因为以后很难更改它。","This is the end of the version history.":"这是版本历史的结束。","This is the list of builds that you've done for this game. <0/>Note that builds for mobile and desktop are available for 7 days, after which they are removed.":"这是该游戏的构建版本列表。<0/>注意,手机和桌面版本可用7天,之后将被删除。","This leaderboard is already resetting, please wait a bit, close the dialog, come back and try again.":"该排行榜已经重置,请等一下,关闭对话框,回来然后重试。","This link is private. You can share it with collaborators, friends or testers.<0/>When you're ready, go to the Game Dashboard and publish it on gd.games.":"此链接是私密的。您可以与合作者、朋友或测试人员分享。<0/>准备就绪后,请前往游戏仪表板并将其发布在 gd.games 上。","This month":"本月","This needs improvement":"这需要改进","This object can't be used here because it would create a circular dependency with the object being edited.":"此对象无法在此处使用,因为它会与正在编辑的对象创建循环依赖关系。","This object does not have any specific configuration. Add it on the scene and use events to interact with it.":"该对象没有任何特定的配置。请把它添加到场景中,并通过事件与其交互。","This object exists, but can't be used here.":"此对象存在,但无法在此处使用。","This object group is empty and locked.":"这个对象组为空且已锁定。","This object has no behaviors: please add a behavior to the object first.":"该对象没有行为:请先给该对象添加一个行为。","This object has no properties.":"此对象没有属性。","This object misses some behaviors: {0}":function(a){return["\u8BE5\u5BF9\u8C61\u7F3A\u5C11\u4E00\u4E9B\u884C\u4E3A\uFF1A",a("0")]},"This object will be visible in the scene and events editors.":"此对象将在场景和事件编辑器中可见。","This object won't be visible in the scene and events editors.":"此对象将在场景和事件编辑器中不可见。","This password is too weak: please use more letters and digits.":"密码太弱:请使用更多的字母和数字。","This project cannot be opened":"无法打开此项目","This project contains toolbar buttons that want to run npm scripts on your computer ({scriptNames}). Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["\u8BE5\u9879\u76EE\u5305\u542B\u5728\u60A8\u7684\u8BA1\u7B97\u673A\u4E0A\u8FD0\u884C npm \u811A\u672C\u7684\u5DE5\u5177\u680F\u6309\u94AE\uFF08",a("scriptNames"),"\uFF09\u3002\u4EC5\u5728\u60A8\u81EA\u5DF1\u521B\u5EFA package.json \u6216\u4ECE\u60A8\u4FE1\u4EFB\u7684\u6765\u6E90\u83B7\u53D6\u65F6\u624D\u5141\u8BB8\u8FD9\u6837\u505A\u3002\u6076\u610F\u811A\u672C\u53EF\u80FD\u4F1A\u635F\u5BB3\u60A8\u7684\u8BA1\u7B97\u673A\u6216\u76D7\u53D6\u60A8\u7684\u6570\u636E\u3002"]},"This project has an auto-saved version":"此项目有一个自动保存的版本","This project has configured npm scripts ({scriptNames}) to run automatically when the \"{hookName}\" editor lifecycle hook fires. Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["\u6B64\u9879\u76EE\u5DF2\u914D\u7F6E npm \u811A\u672C (",a("scriptNames"),")\uFF0C\u5C06\u5728 \"",a("hookName"),"\" \u7F16\u8F91\u5668\u751F\u547D\u5468\u671F\u94A9\u5B50\u89E6\u53D1\u65F6\u81EA\u52A8\u8FD0\u884C\u3002\u53EA\u6709\u5728\u60A8\u81EA\u5DF1\u521B\u5EFA\u4E86 package.json \u6216\u8005\u4ECE\u53EF\u4FE1\u7684\u6765\u6E90\u83B7\u53D6\u65F6\u624D\u5141\u8BB8\u8FD9\u6837\u505A\u3002\u6076\u610F\u811A\u672C\u53EF\u80FD\u4F1A\u635F\u5BB3\u60A8\u7684\u8BA1\u7B97\u673A\u6216\u7A83\u53D6\u60A8\u7684\u6570\u636E\u3002"]},"This project was modified by someone else on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["\u6B64\u9879\u76EE\u5DF2\u7531\u5176\u4ED6\u4EBA\u5728 ",a("formattedDate")," \u7684 ",a("formattedTime")," \u4FEE\u6539\u3002\u662F\u5426\u8986\u76D6\u5176\u66F4\u6539\uFF1F"]},"This project was modified by {lastUsernameWhoModifiedProject} on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["\u6B64\u9879\u76EE\u7531 ",a("lastUsernameWhoModifiedProject")," \u4E8E ",a("formattedDate")," \u5728 ",a("formattedTime")," \u4FEE\u6539\u3002\u662F\u5426\u8986\u76D6\u5176\u66F4\u6539\uFF1F"]},"This property won't be visible in the editor.":"此属性在编辑器中不可见。","This purchase cannot be claimed.":"此购买无法被认领。","This purchase could not be found. Please contact support for more information.":"此购买无法找到。如需更多信息,请联系支持。","This purchase has already been activated.":"此购买已被激活。","This request is for another project. <0>Start a new chat to build on a new project.":"此请求适用于另一个项目。 <0>开始一个新聊天 以构建一个新项目。","This resource does not exist in the game":"此资源在游戏中不存在","This scene will be used as the start scene.":"此场景将被用作开始场景。","This setting changes the visibility of the entire layer. Objects on the layer will not be treated as \"hidden\" for event conditions or actions.":"此设置更改整个图层的可见性。对于事件条件或动作,图层上的对象不会被视为\"隐藏\"。","This shortcut clashes with another action.":"这个快捷键与另一个冲突。","This sprite uses a rectangle that is as large as the sprite for its collision mask.":"该精灵使用与精灵一样大的矩形作为其碰撞遮罩。","This tutorial must be unlocked to be accessed.":"此教程必须先解锁才能访问。","This user does not have projects yet.":"此用户还没有项目。","This user is already a collaborator.":"此用户已是合作者。","This user was not found: have you created your account?":"找不到此用户:您是否创建了您的帐户?","This username is already used, please pick another one.":"此用户名已被使用,请选择其他用户名。","This variable does not exist. <0>Click to add it.":"此变量不存在。<0>点击添加。","This variable has the same name as an object. Consider renaming one or the other.":"此变量与对象同名。请考虑重命名其中一个或另一个。","This variable is not declared. It's recommended to use the *variables editor* to add it.":"此变量未声明。建议使用 *变量编辑器* 来添加它。","This variant can't be modified directly. It must be duplicated first.":"此变体不能直接修改。必须先复制。","This version of GDevelop is:":"当前 GDevelop 的版本是:","This was helpful":"这很有帮助","This week":"本周","This will be used when packaging and submitting your application to the stores.":"这将在打包应用程序并将其提交到应用商店时使用。","This will close your current project. Unsaved changes will be lost.":"这将关闭您的当前项目。未保存的更改将丢失。","This will export your game as a Cordova project. Cordova is a technology that enables HTML5 games to be packaged for iOS and Android.":"这会将您的游戏导出为 Cordova 项目。 Cordova 是一项使 HTML5 游戏能够打包用于 iOS 和 Android 的技术。","This will export your game so that you can package it for Windows, macOS or Linux. You will need to install third-party tools (Node.js, Electron Builder) to package your game.":"这将导出您的游戏,以便您可以将其打包为Windows,macOS或Linux。 您需要安装第三方工具(Node.js,Electron Builder)来打包您的游戏。","This will export your game to a folder. You can then upload it on a website/game hosting service and share it on marketplaces and gaming portals like CrazyGames, Poki, Game Jolt, itch.io, Newgrounds...":"这将导出你的游戏到一个文件夹。 然后您可以在网站/游戏托管服务上上传它,并在市场和游戏门户网站上分享它,如CrazyGames、Poki、Game Jolt、itch.io、Newground...","This year":"今年","This/these file(s) are outside the project folder. Would you like to make a copy of them in your project folder first (recommended)?":"此文件/这些文件不在项目文件夹之内。您想要先将这些文件复制到您的工程文件夹中吗(推荐)?","Through a teacher":"通过一个老师","Throwing physics":"投掷物理","TikTok":"TikTok","Tile Map":"瓦片地图","Tile Set":"瓦块集","Tile map resource":"瓦片地图资源","Tile picker":"瓦块选择器","Tile size":"图块大小","Tiled sprite":"平铺贴图","Tilemap":"瓦片地图","Tilemap painter":"Tilemap 画家","Time (ms)":"时间 (毫秒)","Time between frames":"帧之间的时间","Time format":"时间格式","Time score":"时间分数","Timers":"计时器","Timers:":"计时器:","Timestamp: {0}":function(a){return["\u65F6\u95F4\u6233: ",a("0")]},"Tiny":"最小","Title cannot be empty.":"标题不能为空。","To avoid flickering on objects followed by the camera, use sprites with even dimensions.":"为了避免在相机跟随的对象上闪烁,使用偶数尺寸的精灵。","To begin, open or create a new project.":"打开或创建一个新项目以开始。","To buy this new subscription, we need to stop your existing one before you can pay for the new one. This means the redemption code you're currently used won't be usable anymore.":"要购买这个新订阅,我们需要先停止您现有的订阅,然后您才能为新订阅付款。这意味着您当前使用的兑换码将不再可用。","To confirm, type \"{translatedConfirmText}\"":function(a){return["\u82E5\u8981\u786E\u8BA4\uFF0C\u8BF7\u8F93\u5165 \"",a("translatedConfirmText"),"\""]},"To edit the external events, choose the scene in which it will be included":"要编辑外部事件,请选择将包含它的场景","To edit the external layout, choose the scene in which it will be included":"要编辑外部布局,请选择将包含它的场景","To get this new subscription, we need to stop your existing one before you can pay for the new one. This is immediate but your payment will NOT be pro-rated (you will pay the full price for the new subscription). You won't lose any project, game or other data.":"要获得这一新订阅,我们需要先停止您现有的订阅,然后您才能支付新订阅的费用。这是即时的,但您的付款不会按比例计算 (您将为新订阅支付全价)。您不会丢失任何项目、游戏或其他数据。","To keep using GDevelop cloud, consider deleting old, unused projects.":"要继续使用 GDevelop 云,请考虑删除旧、未使用的项目。","To keep using GDevelop leaderboards, consider deleting old, unused leaderboards.":"要继续使用 GDevelop 排行榜,请考虑删除旧的、未使用的排行榜。","To obtain the best pixel-perfect effect possible, go in the resources editor and disable the Smoothing for all images of your game. It will be done automatically for new images added from now.":"要获得尽可能最好的像素完美效果,请进入资源编辑器并禁用游戏所有图像的平滑处理。它将自动完成从现在开始添加的新图像。","To preview the shape that the Physics engine will use for this object, choose first a temporary image to use for the preview.":"要预览物理引擎将为此对象使用的形状,首先选择一个临时图像用于预览。","To start a timer, don't forget to use the action \"Start (or reset) a scene timer\" in another event.":"要启动计时器,不要忘记在另一个事件中使用“开始(或重置)场景计时器”的动作。","To start a timer, don't forget to use the action \"Start (or reset) an object timer\" in another event.":"要启动计时器,不要忘记在另一个事件中使用“开始(或重置)对象计时器”的动作。","To update your seats, contact us at education@gdevelop.io with the details of your current account and how many seats you would like.":"要更新您的席位,请通过 education@gdevelop.io 联系我们,提供您当前账户的详细信息和您希望的席位数量。","To use this formatting, you must send a score expressed in seconds":"要使用此格式,必须发送以秒为单位的分数","Today":"今天","Toggle Developer Tools":"切换开发者工具","Toggle Disabled":"切换禁用","Toggle Fullscreen":"切换全屏","Toggle Instances List Panel":"切换实例列表面板","Toggle Layers Panel":"切换图层面板","Toggle Object Groups Panel":"切换对象组面板","Toggle Objects Panel":"切换对象面板","Toggle Properties Panel":"切换属性面板","Toggle Wait the Action to End":"切换等待动作结束","Toggle disabled event":"切换禁用事件","Toggle grid":"切换网格","Toggle inverted condition":"切换反向条件","Toggle mask":"切换遮罩(mask)","Toggle/edit grid":"切换/编辑网格","Too many things were changed or broken":"更改或损坏的内容太多。","Top":"顶端","Top bound":"顶部边界","Top bound should be smaller than bottom bound":"顶部边界应小于底部边界","Top face":"顶面","Top left corner":"左上角","Top margin":"上边距","Top right corner":"右上角","Top-Down RPG Pixel Perfect":"自上而下像素完美角色扮演游戏","Top-down":"自上而下","Top-down, classic editor":"俯视,经典编辑器","Total":"总计","Touch (mobile)":"触摸(移动)","Tracked C++ objects exposed to JavaScript. Counts refresh every second.":"暴露给JavaScript的跟踪C++对象。计数每秒刷新。","Transform a game into a multiplayer experience.":"将游戏变成多人游戏体验。","Transform this Plinko game with collectibles that multiply your score.":"利用可以增加您的分数的收藏品来改变这个 Plinko 游戏。","Transform this platformer into a co-op game, where two players can play together.":"将这个平台游戏转变为一个合作游戏,两个玩家可以一起玩。","Triangle":"三角形","True":"真","True (checked)":"True (选中)","True or False":"True 或 False","True or False (boolean)":"是与非(布尔值)","Try again":"再试一次","Try different search terms or check your search options.":"尝试不同的搜索词或检查您的搜索选项。","Try installing it from the extension store.":"尝试从扩展商店安装它。","Try it online":"在线试用","Try something else, browse the packs or create your object from scratch!":"尝试其他东西,浏览包或从零开始创建您的对象!","Try your game":"尝试你的游戏","Tutorial":"教程","Tweak gameplay":"调整游戏玩法","Twitter":"推特","Type":"类型","Type of License: <0>{0}":function(a){return["\u8BB8\u53EF\u8BC1\u7C7B\u578B\uFF1A <0>",a("0"),""]},"Type of License: {0}":function(a){return["\u8BB8\u53EF\u8BC1\u7C7B\u578B: ",a("0")]},"Type of objects":"对象类型","Type your email address to delete your account:":"输入您的电子邮件地址以删除您的帐户:","Type your email to confirm":"输入您的电子邮件以确认","Type:":"类型:","UI Theme":"界面主题","UI/Interface":"UI/界面","URL":"URL","Unable to change feedback for this game":"无法更改此游戏的反馈","Unable to change quality rating of feedback.":"无法更改反馈的质量评级。","Unable to change read status of feedback.":"无法更改反馈的读取状态。","Unable to change your email preferences":"无法更改您的电子邮件首选项","Unable to create a new project for the course chapter. Try again later.":"无法为课程章节创建新项目。请稍后重试。","Unable to create a new project for the tutorial. Try again later.":"无法为本教程创建新项目。请稍后再试。","Unable to create the project":"无法创建项目","Unable to delete the project":"无法删除项目","Unable to download and install the extension and its dependencies. Verify that your internet connection is working or try again later.":"无法下载并安装扩展及其依赖项。验证您的互联网连接是否正常工作,或稍后再试。","Unable to download the icon. Verify your internet connection or try again later.":"无法下载此图标。请验证您的网络连接或稍后再试。","Unable to fetch leaderboards as you are offline.":"由于您处于离线状态,因此无法获取排行榜。","Unable to fetch the example.":"无法获取示例。","Unable to find the price for this asset pack. Please try again later.":"无法找到此资源包的价格。请稍后再试。","Unable to find the price for this bundle. Please try again later.":"无法找到此捆绑包的价格。请稍后再试。","Unable to find the price for this course. Please try again later.":"无法找到此课程的价格。请稍后再试。","Unable to find the price for this game template. Please try again later.":"无法找到此游戏模板的价格。请稍后再试。","Unable to get the checkout URL. Please try again later.":"无法获取结帐 URL。请稍后再试。","Unable to load the code editor":"无法加载代码编辑器","Unable to load the image":"无法载入图像","Unable to load the information about the latest GDevelop releases. Verify your internet connection or retry later.":"无法加载最新的 GDevelop 版本的信息。验证您的互联网连接或稍后重试。","Unable to load the tutorial. Please try again later or contact us if the problem persists.":"无法加载教程。请稍后再试,如果问题仍然存在,请联系我们。","Unable to mark one of the feedback as read.":"无法将其中一个反馈标记为已读。","Unable to open the project":"无法打开项目","Unable to open the project because this provider is unknown: {storageProviderName}. Try to open the project again from another location.":function(a){return["\u65E0\u6CD5\u6253\u5F00\u9879\u76EE\uFF0C\u56E0\u4E3A\u6B64\u63D0\u4F9B\u5546\u672A\u77E5\uFF1A ",a("storageProviderName"),"\u3002\u8BF7\u5C1D\u8BD5\u4ECE\u53E6\u4E00\u4E2A\u4F4D\u7F6E\u91CD\u65B0\u6253\u5F00\u9879\u76EE\u3002"]},"Unable to open the project.":"不能打开项目.","Unable to open this file.":"不能打开这个文件.","Unable to open this window":"无法打开此窗口","Unable to register the game":"无法注册游戏","Unable to remove collaborator":"无法删除合作者","Unable to save the project":"无法保存项目","Unable to start the debugger server! Make sure that you are authorized to run servers on this computer.":"无法启动调试器服务器!请确保您被授权在这台计算机上运行服务器。","Unable to start the server for the preview! Make sure that you are authorized to run servers on this computer. Otherwise, use classic preview to test your game.":"无法启动预览服务器!请确保您被授权在这台计算机上运行服务器。否则,使用经典预览来测试您的游戏。","Unable to unregister the game":"无法取消注册游戏","Unable to update game.":"无法更新游戏。","Unable to update the game details.":"无法更新游戏详细信息。","Unable to update the game owners or authors. Have you removed yourself from the owners?":"无法更新游戏所有者或作者。您是否已将自己从所有者中删除?","Unable to update the game slug. A slug must be 6 to 30 characters long and only contains letters, digits or dashes.":"无法更新游戏slug。slug必须是 6 到 30 个字符,且只包含字母、数字或破折号。","Unable to verify URLs {0} . Please check they are correct.":function(a){return["\u65E0\u6CD5\u9A8C\u8BC1 URL ",a("0")," \u3002\u8BF7\u68C0\u67E5\u5B83\u4EEC\u662F\u5426\u6B63\u786E\u3002"]},"Understanding the context":"理解上下文","Understood, I'll check my Apple or Google account":"明白了,我会检查我的苹果或谷歌账户","Undo":"撤消","Undo the last changes":"撤消上次更改","Unfortunately, this extension requires a newer version of GDevelop to work. Update GDevelop to be able to use this extension in your project.":"不幸的是,此扩展需要更新版本的 GDevelop 才能工作。更新 GDevelop 以便能够在您的项目中使用此扩展。","Unknown behavior":"未知行为","Unknown bundle":"未知捆绑包","Unknown certificate type":"未知证书类型","Unknown changes attempted for scene {scene_name}.":function(a){return["\u5BF9\u573A\u666F ",a("scene_name")," \u7684\u672A\u77E5\u66F4\u6539\u3002"]},"Unknown game":"未知游戏","Unknown status":"未知状态","Unknown status.":"未知状态","Unlimited":"无限制","Unlimited commercial use license for claim with Gold or Pro subscription":"通过黄金或专业订阅即可获得无限商业使用许可","Unload at scene exit":"在场景退出时卸载","Unloading of scene resources":"场景资源的卸载","Unlock full access to GDevelop to create without limits!":"解锁对 GDevelop 的完全访问权限,无限制地进行创作!","Unlock the whole course":"解锁整个课程","Unlock this lesson to finish the course":"解锁此课程以完成课程","Unlock with the full course":"通过完整课程解锁","Unnamed":"未命名的","Unregister game":"注销游戏","Unsaved changes":"未保存的更改","Untitled external events":"未命名的外部事件","Untitled external layout":"未命名的外部布局","Untitled scene":"未命名场景","UntitledExtension":"无标题扩展名","Update":"更新","Update (could break the project)":"更新(可能破坏项目)","Update <0>{label} of <1>{object_name} (in scene {scene_name}) to <2>{newValue}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0 <0>",a("label")," \u7684 <1>",a("object_name"),"\uFF08\u5728\u573A\u666F\u4E2D\uFF09\u81F3 <2>",a("newValue"),"\u3002"]},"Update <0>{label} of behavior {behavior_name} on object <1>{object_name} (in scene <2>{scene_name}) to <3>{newValue}.":function(a){return["\u5728\u573A\u666F <2>",a("scene_name")," \u4E2D\u66F4\u65B0 <0>",a("label")," \u7684\u884C\u4E3A ",a("behavior_name")," \u5728\u5BF9\u8C61 <1>",a("object_name")," \u7684\uFF08\u5728\u573A\u666F\u4E2D\uFF09\u81F3 <3>",a("newValue"),"\u3002"]},"Update GDevelop to latest version":"更新 GDevelop 到最新版本","Update events in scene <0>{scene_name}.":function(a){return["\u66F4\u65B0\u573A\u666F <0>",a("scene_name")," \u4E2D\u7684\u4E8B\u4EF6\u3002"]},"Update game page":"更新游戏页面","Update resolution during the game to fit the screen or window size":"在游戏过程中更新分辨率以适合屏幕或窗口大小","Update some scene effects and groups for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u6548\u679C\u548C\u7EC4\u3002"]},"Update some scene effects and layers for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u6548\u679C\u548C\u56FE\u5C42\u3002"]},"Update some scene effects for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u6548\u679C\u3002"]},"Update some scene effects, layers and groups for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u6548\u679C\u3001\u56FE\u5C42\u548C\u7EC4\u3002"]},"Update some scene groups for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u7EC4\u3002"]},"Update some scene layers and groups for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u56FE\u5C42\u548C\u7EC4\u3002"]},"Update some scene layers for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u56FE\u5C42\u3002"]},"Update some scene properties and effects for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u5C5E\u6027\u548C\u6548\u679C\u3002"]},"Update some scene properties and groups for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u5C5E\u6027\u548C\u7EC4\u3002"]},"Update some scene properties and layers for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u5C5E\u6027\u548C\u56FE\u5C42\u3002"]},"Update some scene properties for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u5C5E\u6027\u3002"]},"Update some scene properties, effects and groups for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u5C5E\u6027\u3001\u6548\u679C\u548C\u7EC4\u3002"]},"Update some scene properties, layers and groups for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u5C5E\u6027\u3001\u56FE\u5C42\u548C\u7EC4\u3002"]},"Update some scene properties, layers, effects and groups for scene {scene_name}.":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u4E00\u4E9B\u573A\u666F\u5C5E\u6027\u3001\u56FE\u5C42\u3001\u6548\u679C\u548C\u7EC4\u3002"]},"Update the extension":"更新扩展","Update your seats":"更新您的席位","Update your subscription":"更新您的订阅","Update {0} properties of <0>{object_name} (in scene {scene_name}).":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0 <0>",a("object_name")," \u7684 ",a("0")," \u5C5E\u6027\u3002"]},"Update {0} settings of behavior {behavior_name} on object {object_name} (in scene {scene_name}).":function(a){return["\u5728\u573A\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u5BF9\u8C61 ",a("object_name")," \u7684\u884C\u4E3A ",a("behavior_name")," \u7684 ",a("0")," \u8BBE\u7F6E\u3002"]},"Updates":"更新","Updating...":"正在更新...","Upgrade":"升级","Upgrade for:":"升级:","Upgrade subscription":"升级订阅","Upgrade to GDevelop Premium":"升级到 GDevelop 高级版","Upgrade to GDevelop Premium to get more leaderboards, storage, and one-click packagings!":"升级到 GDevelop 高级版以获得更多排行榜、存储空间和一键打包!","Upgrade to get more cloud projects, AI usage, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"升级后,每月可使用 GDevelop 高级版获取更多云项目、人工智能使用、发布、多人游戏、课程和积分。","Upgrade to get more cloud projects, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"升级后,每月可使用 GDevelop 高级版获取更多云项目、发布、多人游戏、课程和积分。","Upgrade your GDevelop subscription to unlock this packaging.":"升级您的 GDevelop 订阅即可解锁此包。","Upgrade your Premium Plan":"升级您的高级计划","Upgrade your Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"升级您的高级订阅以拥有更多的 AI 请求和 GDevelop 积分,以解锁引擎的额外好处。","Upgrade your subscription":"升级您的订阅","Upgrade your subscription to keep building with AI.":"升级您的订阅以继续使用 AI 进行创作。","Upload to build service":"上传到构建服务","Uploading your game...":"正在上传您的游戏...","Use":"使用","Use 3D rendering":"使用 3D 渲染","Use <0><1/>{variableName} as the loop counter":function(a){return["\u5C06 <0><1/>",a("variableName")," \u4F5C\u4E3A\u5FAA\u73AF\u8BA1\u6570\u5668\u4F7F\u7528"]},"Use GDevelop Credits":"使用 GDevelop 积分","Use GDevelop credits or get a subscription to increase the limits.":"使用 GDevelop 积分或订阅来增加限制。","Use GDevelop credits or upgrade your subscription to increase the limits.":"使用 GDevelop 积分或升级您的订阅来增加限制。","Use GDevelop credits to start an export.":"使用 GDevelop 积分开始导出。","Use a Tilemap to build a level and change it dynamically during the game.":"使用 瓦片地图 构建关卡并在游戏过程中动态更改它。","Use a custom collision mask":"使用自定义碰撞遮罩","Use a public URL":"使用公共 URL","Use an expression":"使用表达式","Use as...":"用作...","Use custom CSS for the leaderboard":"使用自定义 CSS 制作排行榜","Use experimental background serializer for saving projects":"使用实验性背景序列化程序保存项目","Use full image as collision mask":"使用完整图像作为碰撞遮罩","Use icon":"使用图标","Use legacy renderer":"使用旧版渲染器","Use same collision mask":"使用相同的碰撞遮罩","Use same collision mask for all animations?":"对所有动画使用相同的碰撞遮罩?","Use same collision mask for all frames?":"对所有帧使用相同的碰撞遮罩?","Use same points":"使用相同的点","Use same points for all animations?":"对所有动画使用相同的点?","Use same points for all frames?":"对所有帧使用相同的点?","Use the project setting":"使用项目设置","Use this external layout inside this scene to start all previews":"使用此场景内的外部布局来开始所有预览","Use this scene to start all previews":"使用此场景开始所有预览","Use your email":"使用您的电子邮件","User interface":"用户界面","User name in the game URL":"游戏URL中的用户名","Username":"用户名","Usernames are required to choose a custom game URL.":"需要用户名才能选择自定义游戏URL。","Users can choose to see only players' best entries or not.":"用户可以选择只查看玩家的最佳作品。","Users will be created with an anonymous email. You can later define a full name, a username, or update the generated password if needed.":"用户将使用匿名电子邮件创建。您可以稍后定义全名、用户名,或在需要时更新生成的密码。","Using GDevelop Credits":"使用 GDevelop 积分","Using Nearest Scale Mode":"使用最近的缩放模式","Using a lot of effects can have a severe negative impact on the rendering performance, especially on low-end or mobile devices. Consider using less effects if possible. You can also disable and re-enable effects as needed using events.":"使用太多的效果会对渲染性能产生严重的负面影响,特别是对低端或移动设备的影响很大。 如果可能,请考虑减少特效。您也可以禁用和重新启用特效,视需要使用事件。","Using effects":"使用效果","Using empty events based behavior":"使用基于事件的空行为","Using empty events based object":"使用基于空事件的对象","Using events based behavior":"使用基于事件的行为","Using events based object":"使用基于事件的对象","Using function extractor":"使用函数提取器","Using lighting layer":"使用照明图层","Using non smoothed textures":"使用非平滑纹理","Using pixel rounding":"使用像素舍入","Using the resource properties panel":"使用资源属性面板","Using too much effects":"使用过多效果","Validate these parameters":"验证这些参数","Validating...":"正在验证...","Value":"值","Variable":"变量","Variables":"变量","Variables declared in all objects of the group will be visible in event expressions.":"在该组的所有对象中声明的变量将在事件表达式中可见。","Variables list":"变量列表","Variant":"变体","Variant name":"变体名称","Variant updates":"变体更新","Verify that you have the authorization for reading the file you're trying to access.":"验证您是否已授权阅读您要访问的文件。","Verify your internet connection or try again later.":"验证您的网络连接或稍后再试。","Version":"版本","Version number (X.Y.Z)":"版本号 (X.Y.Z)","Version {0}":function(a){return["\u7248\u672C ",a("0")]},"Version {0} ({1} available)":function(a){return["\u7248\u672C ",a("0")," (",a("1")," \u53EF\u7528)"]},"Version {version} is available and will be downloaded and installed automatically.":function(a){return["\u7248\u672C ",a("version")," \u53EF\u7528\uFF0C\u5C06\u81EA\u52A8\u4E0B\u8F7D\u5E76\u5B89\u88C5\u3002"]},"Version {version} is available. Open About to download and install it.":function(a){return["\u7248\u672C ",a("version")," \u53EF\u7528\u3002\u6253\u5F00\u201C\u5173\u4E8E\u201D\u4EE5\u4E0B\u8F7D\u5E76\u5B89\u88C5\u3002"]},"Vertical anchor":"垂直锚点","Vertical flip":"垂直翻转","Video":"视频","Video format supported can vary according to devices and browsers. For maximum compatibility, use H.264/mp4 file format (and AAC for audio).":"根据不同设备和浏览器支持多种视频格式。为达到最大兼容性,请使用 H.264/mp4 格式的视频文件 (音频请使用AAC)。","Video game":"电子游戏","Video resource":"视频资源","View":"查看","View history":"查看历史记录","View original chat":"查看原始聊天","Viewers":"观众","Viewpoint":"视点","Visibility":"可见性","Visibility and instances ordering":"可见性和实例排序","Visibility in quick customization dialog":"快速自定义对话框中的可见性","Visible":"可见","Visible in editor":"编辑器中可见","Visible in the search and your profile":"在搜索和您的个人资料中可见","Visual Effects":"视觉效果","Visual appearance":"视觉外观","Visual appearance (advanced)":"视觉外观(高级)","Visual effect":"视觉效果","Visuals":"可见性","Wait for the action to end before executing the actions (and subevents) following it":"等待操作结束,然后再执行其后的操作(和子事件)","Waiting for the purchase confirmation...":"正在等待购买确认...","Waiting for the subscription confirmation...":"正在等待订阅确认...","Wallet":"钱包","Want to know more?":"想了解更多吗?","Warning":"警告","Watch changes in game engine (GDJS) sources and auto import them (dev only)":"观看游戏引擎(GDJS) 源中的更改并自动导入(仅限开发人员)","Watch the project folder for file changes in order to refresh the resources used in the editor (images, 3D models, fonts, etc.)":"查看项目文件夹中的文件更改,以刷新编辑器中使用的资源 (图像、3D模型、字体等)","Watch tutorial":"观看教程","We could not check your follow":"我们无法检查您的关注","We could not check your subscription":"我们无法查看您的订阅","We could not find your GitHub star":"我们找不到您的 GitHub 星号","We could not find your GitHub user and star":"我们找不到您的 GitHub 用户和星号","We could not find your user":"我们找不到您的用户","We couldn't find a version to go back to.":"我们找不到要返回的版本。","We couldn't find your project.{0}If your project is stored on a different computer, launch GDevelop on that computer.{1}Otherwise, use the \"Open project\" button and find it in your filesystem.":function(a){return["\u6211\u4EEC\u627E\u4E0D\u5230\u60A8\u7684\u9879\u76EE\u3002",a("0"),"\u5982\u679C\u60A8\u7684\u9879\u76EE\u5B58\u50A8\u5728\u5176\u4ED6\u8BA1\u7B97\u673A\u4E0A\uFF0C\u8BF7\u5728\u8BE5\u8BA1\u7B97\u673A\u4E0A\u542F\u52A8 GDevelop\u3002",a("1"),"\u5426\u5219\uFF0C\u8BF7\u4F7F\u7528\u201C\u6253\u5F00\u9879\u76EE\u201D\u6309\u94AE\u5E76\u5728\u6587\u4EF6\u7CFB\u7EDF\u4E2D\u627E\u5230\u5B83\u3002"]},"We couldn't load your cloud projects. Verify your internet connection or try again later.":"我们无法加载您的云项目。请验证您的互联网连接或稍后再试。","We have found a non-corrupt save from {0} available for modification.":function(a){return["\u6211\u4EEC\u53D1\u73B0\u6765\u81EA ",a("0")," \u7684\u672A\u635F\u574F\u5B58\u6863\u53EF\u4F9B\u4FEE\u6539\u3002"]},"Web":"Web","Web Build":"Web 版本","Web builds":"Web 版本","Welcome back!":"欢迎回来!","Welcome to GDevelop!":"欢迎使用 GDevelop !","What are you using GDevelop for?":"你用GDevelop做什么?","What could be improved?":"还有什么可以改进的?","What do you want to make?":"你想制作什么?","What is a good GDevelop feature I could use in my game?":"在我的游戏中,我可以使用 GDevelop 的哪些好功能?","What is your goal with GDevelop?":"您使用 GDevelop 的目标是什么?","What kind of projects are you building?":"您正在建造什么类型的项目?","What kind of projects do you want to build with GDevelop?":"您想使用 GDevelop 构建什么样的项目?","What should I do next?":"我接下来该做什么?","What went wrong?":"发生了什么问题?","What would you add to my game?":"你会为我的游戏增加什么?","What would you like to create?":"您想创建什么?","What would you like to do next?":"接下来您想做什么?","What would you like to do with this uncorrupted version of your project?":"您希望如何处理这个未损坏的项目版本?","What's included:":"包含内容:","What's new in GDevelop?":"GDevelop 中的新内容?","What's new?":"更新日志","When checked, will only display the best score of each player (only for the display below).":"选中时,将只显示每个玩家的最佳分数(仅用于下面的显示)。","When do you plan to finish or release your projects?":"您计划什么时候完成或发布您的项目?","When previewing the game in the editor, this duration is ignored (the game preview starts as soon as possible).":"当在编辑器中预览游戏时,此持续时间将被忽略(游戏预览尽快开始)。","When you create an object using an action, GDevelop now sets the Z order of the object to the maximum value that was found when starting the scene for each layer. This allow to make sure that objects that you create are in front of others. This game was created before this change, so GDevelop maintains the old behavior: newly created objects Z order is set to 0. It's recommended that you switch to the new behavior by clicking the following button.":"当您使用动作创建对象时,GDevelop现在会将对象的Z顺序设置为开始每一层场景时发现的最大值。这样可以确保您创建的对象位于其他对象的前面。该游戏是在此更改之前创建的,因此GDevelop保留了旧的行为:新创建的对象Z顺序设置为0。建议您通过单击以下按钮切换到新行为。","Where are you planing to publish your project(s)?":"您打算在哪里发布您的项目(s)?","Where to store this project":"存储此项目的位置","While these conditions are true:":"如果这些条件都为真:","Width":"宽度","Window":"窗口","Window title":"窗口标题","Windows (auto-installer file)":"Windows (自动安装程序文件)","Windows (exe)":"Windows (exe)","Windows (zip file)":"Windows (zip 文件)","Windows (zip)":"Windows (zip)","Windows, MacOS and Linux":"Windows、 MacOS 和 Linux","Windows, MacOS, Linux (Steam, MS Store...)":"Windows, MacOS, Linux (Steam, MS Store...)","Windows, macOS & Linux":"Windows, macOS & Linux","Windows/macOS/Linux (manual)":"Windows/macOS/Linux (手动)","Windows/macOS/Linux Build":"Windows/macOS/Linux 版本","With an established team of people during the whole project":"在整个项目期间拥有一支成熟的团队","With at least one other person":"至少和另一个人","With placeholder":"使用占位符","Working...":"工作中...","Would you like to describe your projects?":"您想描述一下您的项目吗?","Would you like to open the non-corrupt version instead?":"您想要打开非损坏的版本吗?","Write events for scene <0>{scene_name}.":function(a){return["\u4E3A\u573A\u666F <0>",a("scene_name")," \u7F16\u5199\u4E8B\u4EF6\u3002"]},"X":"X","X offset (in pixels)":"X 偏移 (像素)","Y":"Y","Y offset (in pixels)":"Y 偏移 (像素)","Year":"年","Yearly, {0}":function(a){return["\u6BCF\u5E74, ",a("0")]},"Yearly, {0} per seat":function(a){return["\u6BCF\u5E74\uFF0C\u6BCF\u4E2A\u5EA7\u4F4D",a("0")]},"Yes":"是","Yes or No":"是或否","Yes or No (boolean)":"是或否 (布尔值)","Yes, and enable auto-edit":"是的,并启用自动编辑","Yes, discard my changes":"是的,放弃我的更改","Yes, just this change":"是的,仅此更改","Yesterday":"昨天","You already have an account for this email address with a different provider (Google, Apple or GitHub). Please try with one of those.":"您已在其他提供商 (Google、Apple 或 GitHub) 处拥有此电子邮件地址的帐户。请尝试其中之一。","You already have an active {translatedName} featuring for your game {0}. Check your emails or discord, we will get in touch with you to get the campaign up!":function(a){return["\u60A8\u5DF2\u7ECF\u4E3A\u60A8\u7684\u6E38\u620F ",a("0")," \u63D0\u4F9B\u4E86\u4E00\u4E2A\u6709\u6548\u7684 ",a("translatedName"),"\u3002\u68C0\u67E5\u60A8\u7684\u7535\u5B50\u90AE\u4EF6\u6216\u4E0D\u548C\u8C10\uFF0C\u6211\u4EEC\u5C06\u4E0E\u60A8\u8054\u7CFB\u4EE5\u542F\u52A8\u6D3B\u52A8\uFF01"]},"You already have these {0} assets installed, do you want to add them again?":function(a){return["\u60A8\u5DF2\u7ECF\u5B89\u88C5\u4E86 ",a("0")," \u4E2A\u8D44\u4EA7\uFF0C\u60A8\u60F3\u8981\u518D\u6B21\u6DFB\u52A0\u5B83\u4EEC\u5417\uFF1F"]},"You already have {0} asset(s) in your scene. Do you want to add the remaining {1} one(s)?":function(a){return["\u60A8\u7684\u573A\u666F\u4E2D\u5DF2\u7ECF\u6709 ",a("0")," \u4E2A\u8D44\u4EA7\u3002\u60A8\u60F3\u8981\u6DFB\u52A0\u5269\u4F59\u7684 ",a("1")," \u4E2A(s)\u5417\uFF1F"]},"You already own this product":"您已经拥有这个产品","You already own {0}!":function(a){return["\u60A8\u5DF2\u7ECF\u62E5\u6709 ",a("0"),"\uFF01"]},"You already used this code - you can't reuse a code multiple times.":"您已经使用过此代码 - 您不能多次重复使用代码。","You are about to delete an object":"您将要删除一个对象","You are about to delete the project {projectName}, which is currently opened. If you proceed, the project will be closed and you will lose any unsaved changes. Do you want to proceed?":function(a){return["\u60A8\u5373\u5C06\u5220\u9664\u5F53\u524D\u6253\u5F00\u7684\u9879\u76EE ",a("projectName"),"\u3002\u5982\u679C\u7EE7\u7EED\uFF0C\u9879\u76EE\u5C06\u88AB\u5173\u95ED\uFF0C\u5E76\u4E14\u60A8\u5C06\u4E22\u5931\u6240\u6709\u672A\u4FDD\u5B58\u7684\u66F4\u6539\u3002\u662F\u5426\u8981\u7EE7\u7EED\uFF1F"]},"You are about to quit the tutorial.":"您即将退出该教程。","You are about to remove \"{0}\" from the list of your projects.{1}It will not delete it from your disk and you can always re-open it later. Do you want to proceed?":function(a){return["\u60A8\u5373\u5C06\u4ECE\u9879\u76EE\u5217\u8868\u4E2D\u5220\u9664\u201C",a("0"),"\u201D\u3002",a("1"),"\u6B64\u64CD\u4F5C\u4E0D\u4F1A\u5C06\u5176\u4ECE\u78C1\u76D8\u4E2D\u5220\u9664\uFF0C\u5E76\u4E14\u60A8\u4EE5\u540E\u53EF\u4EE5\u968F\u65F6\u91CD\u65B0\u6253\u5F00\u5B83\u3002\u8981\u7EE7\u7EED\u5417\uFF1F"]},"You are about to remove the last sprite of this object, which has a custom collision mask. The custom collision mask will be lost. Are you sure you want to continue?":"您将要删除该对象的最后一个精灵,该对象具有自定义碰撞遮罩。自定义碰撞遮罩将会丢失。你确定你要继续吗?","You are about to remove {0}{1} from the list of collaborators. Are you sure?":function(a){return["\u60A8\u5C06\u4ECE\u5408\u4F5C\u8005\u5217\u8868\u4E2D\u5220\u9664 ",a("0"),a("1")," \u3002\u60A8\u786E\u5B9A\u5417\uFF1F"]},"You are about to use {assetPackCreditsAmount} credits to purchase the asset pack {0}. Continue?":function(a){return["\u60A8\u5C06\u4F7F\u7528 ",a("assetPackCreditsAmount")," \u79EF\u5206\u6765\u8D2D\u4E70\u8D44\u4EA7\u5305 ",a("0"),"\u3002\u7EE7\u7EED\uFF1F"]},"You are about to use {creditsAmount} credits to purchase the course \"{translatedCourseTitle}\". Continue?":function(a){return["\u60A8\u5373\u5C06\u4F7F\u7528",a("creditsAmount"),"\u79EF\u5206\u8D2D\u4E70\u8BFE\u7A0B\"",a("translatedCourseTitle"),"\"\u3002\u7EE7\u7EED\u5417\uFF1F"]},"You are about to use {gameTemplateCreditsAmount} credits to purchase the game template {0}. Continue?":function(a){return["\u60A8\u5C06\u4F7F\u7528 ",a("gameTemplateCreditsAmount")," \u79EF\u5206\u8D2D\u4E70\u6E38\u620F\u6A21\u677F ",a("0"),"\u3002\u7EE7\u7EED\uFF1F"]},"You are about to use {planCreditsAmount} credits to extend the game featuring {translatedName} for your game {0} and push it to the top of gd.games. Continue?":function(a){return["\u60A8\u5C06\u4F7F\u7528 ",a("planCreditsAmount")," \u79EF\u5206\u6765\u6269\u5C55\u60A8\u7684\u6E38\u620F ",a("0")," \u4E2D\u5305\u542B ",a("translatedName")," \u7684\u6E38\u620F\uFF0C\u5E76\u5C06\u5176\u63A8\u81F3 gd.games \u7684\u9876\u90E8\u3002\u7EE7\u7EED\uFF1F"]},"You are about to use {planCreditsAmount} credits to purchase the game featuring {translatedName} for your game {0}. Continue?":function(a){return["\u60A8\u5C06\u4F7F\u7528 ",a("planCreditsAmount")," \u79EF\u5206\u4E3A\u60A8\u7684\u6E38\u620F ",a("0")," \u8D2D\u4E70\u5305\u542B ",a("translatedName")," \u7684\u6E38\u620F\u3002\u7EE7\u7EED\uFF1F"]},"You are about to use {usageCreditPrice} credits to start this build. Continue?":function(a){return["\u60A8\u5C06\u4F7F\u7528 ",a("usageCreditPrice")," \u79EF\u5206\u6765\u5F00\u59CB\u6B64\u6784\u5EFA\u3002\u7EE7\u7EED\uFF1F"]},"You are already a member of this team.":"您已经是该团队的成员。","You are in raw mode. You can edit the fields, but be aware that this can lead to unexpected results or even crash the debugged game!":"您处于原始模式。您可以编辑字段,但这可能导致意外结果甚至崩溃调试游戏!","You are missing out on asset store discounts and other benefits! Verify your email address. Didn't receive it?":"你错过了资产商店的折扣和其他好处! 核实你的电子邮件地址。没有收到吗?","You are not connected. Create an account to build your game for Android, Windows, macOS and Linux in one click, and get access to metrics for your game.":"您尚未连接。创建一个帐户即可一键构建适用于Android,Windows,macOS和Linux的游戏,并可以访问游戏指标。","You are not owner of this project, so you cannot invite collaborators.":"您不是此项目的所有者,所以您不能邀请合作者。","You are not the owner of this game, ask the owner to add you as an owner to see its exports.":"您不是该游戏的所有者,请要求所有者将您添加为所有者以查看其导出。","You can <0>help translate GDevelop into your language.":"您可以<0>帮助将 GDevelop 翻译成您的语言。","You can add students who already have a GDevelop account. They will receive a notification to accept the invitation. If they don't have an account, they can create one with their student email.":"您可以添加已经拥有 GDevelop 账户的学生。他们将收到接受邀请的通知。如果他们没有账户,可以使用他们的学生电子邮件创建一个。","You can also launch a preview from this external layout, but remember that it will still create objects from the scene, as well as trigger its events. Make sure to disable any action loading the external layout before doing so to avoid having duplicate objects!":"您也可以从这个外部布局启动一个预览,但请记住,它仍将创建场景中的对象,并触发其事件。请务必禁用任何行动载入的外部布局之前,这样做,以避免有重复的对象!","You can always do it later by redeeming a code on your profile.":"您可以在个人资料中稍后通过兑换代码来完成此操作。","You can configure the following properties and they will be applied as soon as you share your game with an export to gd.games.":"您可以配置以下属性,这些属性将在您通过导出到 gd.games 共享游戏时立即应用。","You can contribute and <0>create your own themes.":"您可以贡献并且<0>创建自己的主题。","You can download the file of your game to continue working on it using the full GDevelop version:":"您可以使用完整的 GDevelop 版本,下载您的游戏文件,以便继续使用它:","You can export the extension to a file to easily import it in another project. If your extension is providing useful and reusable functions or behaviors, consider sharing it with the GDevelop community!":"你可以将扩展名导出到文件,以便在另一个项目中轻松导入。如果你的扩展名提供有用并可重复使用的函数或行为,请考虑与GDevelop社区分享它!","You can find your cloud projects in the Create section of the homepage.":"您可以在主页的创建部分找到您的云项目。","You can install it from the Project Manager.":"您可以从项目管理器安装它。","You can now compile the game by yourself using Cordova command-line tool to iOS (XCode is required) or Android (Android SDK is required).":"您现在可以使用 Cordova command-line 工具编译游戏到 iOS (XCode 是必需的) 或 Android SDK 。","You can now create a game on Facebook Instant Games, if not already done, and upload the generated archive.":"您现在可以在 Facebook 即时游戏上创建游戏,如果还没有创建,然后上传生成的存档。","You can now go back to the asset store to use the assets in your games.":"您现在可以返回资产商店以在游戏中使用资产。","You can now go back to the course.":"您现在可以返回到课程。","You can now go back to the store to use your new game template.":"您现在可以返回商店使用您的新游戏模板。","You can now go back to use your new bundle.":"您现在可以返回使用您的新捆绑包。","You can now go back to use your new product.":"您现在可以返回使用您的新产品。","You can now upload the game to a web hosting service to play it.":"您现在可以将游戏上传到网络托管服务来玩。","You can now use them across the app!":"您现在可以在整个应用程序中使用它们!","You can only install up to {MAX_ASSETS_TO_INSTALL} assets at once. Try filtering the assets you would like to install, or install them one by one.":function(a){return["\u4E00\u6B21\u53EA\u80FD\u5B89\u88C5\u6700\u591A ",a("MAX_ASSETS_TO_INSTALL")," \u8D44\u4EA7\u3002\u5C1D\u8BD5\u7B5B\u9009\u60A8\u60F3\u8981\u5B89\u88C5\u7684\u8D44\u4EA7\uFF0C\u6216\u8005\u4E00\u4E2A\u4E00\u4E2A\u5730\u5B89\u88C5\u5B83\u4EEC\u3002"]},"You can open the command palette by pressing {commandPaletteShortcut} or {commandPaletteSecondaryShortcut}.":function(a){return["\u60A8\u53EF\u4EE5\u6309 ",a("commandPaletteShortcut")," \u6216 ",a("commandPaletteSecondaryShortcut")," \u6253\u5F00\u547D\u4EE4\u9762\u677F\u3002"]},"You can save your project to come back to it later. What do you want to do?":"您可以保存您的项目,稍后再回到它。您想做什么?","You can select more than one.":"您可以选择多个。","You can switch to GDevelop credits.":"您可以切换到 GDevelop 积分。","You can use credits to feature a game or purchase asset packs and game templates in the store!":"您可以使用积分来推荐游戏或在商店中购买资产包和游戏模板!","You can't delete your account while you have an active subscription. Please cancel your subscription first.":"当您的订阅有效时,您无法删除您的帐户。请先取消订阅。","You cannot add yourself as a collaborator.":"您不能将自己添加为合作者。","You cannot do this.":"你不能这样做。","You cannot unregister a game that has active leaderboards. To delete them, access the player services, and delete them one by one.":"您无法取消注册具有活跃排行榜的游戏。要删除它们,请访问玩家服务,然后逐个删除它们。","You currently have a subscription, applied thanks to a redemption code, valid until {0} . If you redeem another code, your existing subscription will be canceled and not redeemable anymore!":function(a){return["\u60A8\u76EE\u524D\u6709\u4E00\u4E2A\u8BA2\u9605\uFF0C\u4F7F\u7528\u5151\u6362\u7801\u5E94\u7528\uFF0C\u6709\u6548\u671F\u81F3 ",a("0"),"\u3002\u5982\u679C\u60A8\u5151\u6362\u53E6\u4E00\u4E2A\u4EE3\u7801\uFF0C\u60A8\u7684\u73B0\u6709\u8BA2\u9605\u5C06\u88AB\u53D6\u6D88\uFF0C\u65E0\u6CD5\u518D\u5151\u6362\uFF01"]},"You currently have a subscription. If you redeem a code, the existing subscription will be cancelled and replaced by the one given by the code.":"您目前有一个订阅。如果您兑换代码,现有订阅将被取消并由代码提供的订阅取代。","You do not have access to project saves with your current subscription plan. Please upgrade your plan to access this feature.":"您在当前订阅计划下无法访问项目保存。请升级您的计划以访问此功能。","You do not have permission to access the project save associated with this AI request message.":"您没有权限访问与此 AI 请求消息关联的项目保存。","You don't have a thumbnail":"您没有缩略图","You don't have any Android builds for this game.":"您没有任何适用于此游戏的安卓版本。","You don't have any active students. Click on \"Manage seats\" to add students or teachers to your team.":"您没有任何活跃的学生。点击“管理席位”来添加学生或教师到您的团队。","You don't have any builds for this game.":"您没有此游戏的任何构建。","You don't have any credits available. You can purchase GDevelop credits to continue making AI requests.":"您没有可用的积分。您可以购买 GDevelop 积分以继续发起 AI 请求。","You don't have any desktop builds for this game.":"你没有此游戏的任何桌面版本。","You don't have any feedback for this export.":"您对于此次导出没有任何反馈。","You don't have any feedback for this game.":"您对此游戏没有任何反馈。","You don't have any iOS builds for this game.":"您没有此游戏的任何 iOS 版本。","You don't have any previous chat. Ask the AI your first question!":"您还没有任何之前的聊天记录。向 AI 提出您的第一个问题吧!","You don't have any unread feedback for this export.":"您对于此次导出没有任何未读反馈。","You don't have any unread feedback for this game.":"您对此游戏没有任何未读的反馈。","You don't have any web builds for this game.":"你没有此游戏的任何web版本。","You don't have enough AI credits to continue this conversation.":"您没有足够的 AI 积分来继续此对话。","You don't have enough available seats to restore those accounts.":"您没有足够的可用席位来恢复这些帐户。","You don't have enough rights to add a new admin.":"您没有足够的权限添加新管理员。","You don't have enough rights to invite a new student.":"您没有足够的权限邀请新的学生。","You don't have enough rights to manage those accounts.":"您没有足够的权限来管理这些帐户。","You don't have permissions to add collaborators.":"您没有添加合作者的权限。","You don't have permissions to delete this project.":"您没有删除此项目的权限。","You don't have permissions to save this project. Please choose another location.":"您没有保存此项目的权限。请选择其他位置。","You don't have the rights to access the version history of this project. Are you connected with the right account?":"您没有权限访问该项目的版本历史。您是否使用正确的账户连接?","You don't need to add the @ in your username":"您不需要在您的用户名中添加 @","You don't own any pack yet!":"你还没有任何包!","You don’t have any feedback about your game. Share your game and start collecting player feedback.":"您还没有任何关于游戏的反馈。分享您的游戏并开始收集玩家反馈。","You have 0 notifications.":"您有 0 条通知。","You have <0>{remainingBuilds} build remaining — you have used {usageRatio} in the past 24h.":function(a){return["\u60A8\u8FD8\u5269\u4F59 <0>",a("remainingBuilds")," \u4E2A\u7248\u672C - \u60A8\u5728\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} build remaining — you have used {usageRatio} in the past 30 days.":function(a){return["\u60A8\u8FD8\u5269\u4F59 <0>",a("remainingBuilds")," \u4E2A\u7248\u672C - \u60A8\u5728\u8FC7\u53BB 30 \u5929\u5185\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} builds remaining — you have used {usageRatio} in the past 24h.":function(a){return["\u60A8\u8FD8\u5269\u4F59 <0>",a("remainingBuilds")," \u4E2A\u7248\u672C - \u60A8\u5728\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} builds remaining — you have used {usageRatio} in the past 30 days.":function(a){return["\u60A8\u8FD8\u5269\u4F59 <0>",a("remainingBuilds")," \u4E2A\u7248\u672C - \u60A8\u5728\u8FC7\u53BB 30 \u5929\u5185\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have a build currently running, you can see its progress via the exports button at the bottom of this dialog.":"您当前正在运行一个构建,您可以通过此对话框底部的导出按钮查看其进度。","You have an active subscription":"您有一个有效的订阅","You have reached the maximum number of games you can register! You can unregister games in your Games Dashboard.":"您已达到可注册游戏的最大数量!您可以在游戏仪表板中注销游戏。","You have reached the maximum number of guest collaborators for your subscription. Ask this user to get a Pro subscription!":"您的订阅已达到访客合作者的最大数量。请此用户获得专业订阅!","You have to wait {0} days before you can reactivate an archived account.":function(a){return["\u60A8\u5FC5\u987B\u7B49\u5F85 ",a("0")," \u5929\u624D\u80FD\u91CD\u65B0\u6FC0\u6D3B\u5DF2\u5B58\u6863\u7684\u5E10\u6237\u3002"]},"You have unlocked full access to GDevelop to create without limits!":"您已解锁对 GDevelop 的完全访问权限,可以无限制地进行创作!","You have unsaved changes in your project.":"您的项目有未保存的更改。","You haven't contributed any examples":"您还没有贡献任何示例","You haven't contributed any extensions":"您还没有贡献任何扩展","You just added an instance to a hidden layer (\"{0}\"). Open the layer panel to make it visible.":function(a){return["\u60A8\u521A\u521A\u5411\u9690\u85CF\u5C42 (\"",a("0"),"\") \u6DFB\u52A0\u4E86\u4E00\u4E2A\u5B9E\u4F8B\u3002\u8BF7\u6253\u5F00\u56FE\u5C42\u9762\u677F\u4F7F\u5176\u53EF\u89C1\u3002"]},"You might like":"你可能会喜欢","You modified this project on the {formattedDate} at {formattedTime}. Do you want to overwrite your changes?":function(a){return["\u60A8\u5728 ",a("formattedDate")," \u7684 ",a("formattedTime")," \u4FEE\u6539\u4E86\u8BE5\u9879\u76EE\u3002\u60A8\u60F3\u8981\u8986\u76D6\u60A8\u7684\u66F4\u6539\u5417\uFF1F"]},"You must be connected to use online export services.":"您必须连接才能使用在线导出服务。","You must be logged in to invite collaborators.":"您必须登录才能邀请合作者。","You must own a Spine license to publish a game with a Spine object.":"您必须拥有一个 Spine 许可证才能发布一个具有 Spine 对象的游戏。","You must re-open the project to continue this chat.":"您必须重新打开该项目才能继续此聊天。","You must select a key.":"您必须选择一个键。","You must select a valid key. \"{0}\" is not valid.":function(a){return["\u60A8\u5FC5\u987B\u9009\u62E9\u4E00\u4E2A\u6709\u6548\u7684\u952E\u3002\u201C",a("0"),"\u201D\u65E0\u6548\u3002"]},"You must select a valid key. \"{value}\" is not valid.":function(a){return["\u60A8\u5FC5\u987B\u9009\u62E9\u4E00\u4E2A\u6709\u6548\u7684\u952E\uFF0C \"",a("value"),"\" \u662F\u65E0\u6548\u7684\u3002"]},"You must select a valid value. \"{value}\" is not valid.":function(a){return["\u60A8\u5FC5\u987B\u9009\u62E9\u4E00\u4E2A\u6709\u6548\u7684\u503C\u3002\"",a("value"),"\" \u65E0\u6548\u3002"]},"You must select a value.":"您必须选择一个值。","You must select at least one user to be the author of the game.":"您必须选择至少一名用户作为游戏的作者。","You must select at least one user to be the owner of the game.":"您必须选择至少一个用户作为游戏的所有者。","You need a Apple Developer account to create a certificate.":"您需要一个 Apple 开发者帐户来创建证书。","You need a Apple Developer account to create an API key that will automatically publish your app.":"您需要一个 Apple 开发者帐户来创建将自动发布您的应用程序的 API 密钥。","You need to cancel your current subscription before joining a team.":"您需要在加入团队之前取消当前的订阅。","You need to first save your project to the cloud to invite collaborators.":"您需要首先将您的项目保存到云端来邀请合作者。","You need to login first to see your builds.":"您需要先登录才能看到您的项目。","You need to login first to see your game feedbacks.":"你需要先登录才能看到你的游戏反馈。","You need to save this project as a cloud project to install premium assets. Please save your project and try again.":"您需要将此项目保存为云项目来安装此高级素材。请保存您的项目,然后重试!","You need to save this project as a cloud project to install this asset. Please save your project and try again.":"您需要将此项目保存为云项目来安装此素材。请保存您的项目,然后重试!","You received {0} credits thanks to your subscription":function(a){return["\u7531\u4E8E\u60A8\u7684\u8BA2\u9605\uFF0C\u60A8\u83B7\u5F97\u4E86 ",a("0")," \u79EF\u5206"]},"You should have received an email containing instructions to reset and set a new password. Once it's done, you can use your new password in GDevelop.":"您应该收到一封包含重置密码的信邮件。完成后,您就可以在 GDevelop 中使用您的新密码了。","You still have {availableCredits} credits you can use for AI requests.":function(a){return["\u60A8\u8FD8\u6709 ",a("availableCredits")," \u79EF\u5206\u53EF\u4EE5\u7528\u6765\u53D1\u8D77 AI \u8BF7\u6C42\u3002"]},"You still have {percentage}% left on this month's AI usage.":function(a){return["\u60A8\u672C\u6708\u7684 AI \u4F7F\u7528\u91CF\u8FD8\u6709 ",a("percentage"),"% \u5269\u4F59\u3002"]},"You still have {percentage}% left on this month's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u672C\u6708\u7684 AI \u4F7F\u7528\u91CF\u8FD8\u6709 ",a("percentage"),"% \u5269\u4F59\u3002\u5B83\u5C06\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You still have {percentage}% left on this week's AI usage.":function(a){return["\u60A8\u672C\u5468\u7684 AI \u4F7F\u7528\u91CF\u8FD8\u6709 ",a("percentage"),"% \u5269\u4F59\u3002"]},"You still have {percentage}% left on this week's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u672C\u5468\u7684 AI \u4F7F\u7528\u91CF\u8FD8\u6709 ",a("percentage"),"% \u5269\u4F59\u3002\u5B83\u5C06\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You still have {percentage}% left on today's AI usage.":function(a){return["\u60A8\u4ECA\u5929\u7684 AI \u4F7F\u7528\u91CF\u8FD8\u6709 ",a("percentage"),"% \u5269\u4F59\u3002"]},"You still have {percentage}% left on today's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u4ECA\u5929\u7684 AI \u4F7F\u7528\u91CF\u8FD8\u6709 ",a("percentage"),"% \u5269\u4F59\u3002\u5B83\u5C06\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You will get access to special discounts on the GDevelop asset store, as well as weekly stats about your games.":"你将获得 GDevelopment 资产商店的特别折扣,以及关于你的游戏的每周统计数据。","You will lose all custom collision masks. Do you want to continue?":"您将丢失所有自定义碰撞遮罩。是否要继续?","You will lose any progress made with the external editor. Do you wish to cancel?":"您将失去使用外部编辑器取得的任何进展。您想取消吗?","You won't see it here anymore, unless you re-activate it from the preferences.":"您在这里不会再看到它,除非您从首选项中重新激活它。","You'll convert {0} USD to {1} credits.":function(a){return["\u60A8\u5C06\u628A ",a("0")," \u7F8E\u5143\u5151\u6362\u4E3A ",a("1")," \u4E2A\u79EF\u5206\u3002"]},"You're about to add 1 asset.":"您将要添加1个资产。","You're about to add {0} assets.":function(a){return["\u60A8\u5C06\u8981\u6DFB\u52A0 ",a("0")," \u4E2A\u7D20\u6750\u3002\u662F\u5426\u7EE7\u7EED\uFF1F"]},"You're about to cash out {0} USD.":function(a){return["\u60A8\u5373\u5C06\u63D0\u73B0 ",a("0")," \u7F8E\u5143\u3002"]},"You're about to open (or re-open) a project. Click on \"Open the Project\" to continue.":"您即将打开(或重新打开)一个项目。点击“打开项目”继续。","You're about to restart this multichapter guided lesson.":"您即将重新开始这个多章节的指导课程。","You're awesome!":"你太棒了!","You're deleting a game which:{0} - {1} {2} - {3} {4} If you continue, the game and this project will be deleted.{5} This action is irreversible. Do you want to continue?":function(a){return["\u4F60\u6B63\u5728\u5220\u9664\u4E00\u4E2A\u6E38\u620F\uFF0C\u8BE5\u6E38\u620F\u4E3A\uFF1A",a("0")," - ",a("1")," ",a("2")," - ",a("3")," ",a("4")," \u5982\u679C\u7EE7\u7EED\uFF0C\u6E38\u620F\u548C\u8BE5\u9879\u76EE\u5C06\u88AB\u5220\u9664\u3002\u6B64\u64CD\u4F5C\u4E0D\u53EF\u9006\u3002",a("5")," \u4F60\u786E\u5B9A\u8981\u7EE7\u7EED\u5417\uFF1F"]},"You're leaving the game tutorial":"你要离开游戏教程","You're now logged out":"您现在已退出","You're trying to save changes made to a previous version of your project. If you continue, it will be used as the new latest version.":"您正在尝试保存对项目先前版本所做的更改。如果继续,它将用作新的最新版本。","You're {missingCredits} credits short.":function(a){return["\u60A8\u8FD8\u7F3A ",a("missingCredits")," \u4E2A\u79EF\u5206\u3002"]},"You've been invited to join a team by {inviterEmail}":function(a){return["\u60A8\u5DF2\u88AB ",a("inviterEmail")," \u9080\u8BF7\u52A0\u5165\u56E2\u961F\u3002"]},"You've made some changes here. Are you sure you want to discard them and open the behavior events?":"你在这里做了一些改变。您确定要丢弃它们并打开行为事件吗?","You've made some changes here. Are you sure you want to discard them and open the function?":"您已经在这里进行了一些修改。您确定要放弃它们并打开函数吗?","You've ran out of GDevelop Credits.":"您已用完 GDevelop 积分。","You've ran out of GDevelop credits to continue this conversation.":"您已用完 GDevelop 积分,无法继续此对话。","You've ran out of free AI requests.":"您已用完免费 AI 请求。","You've reached the limit of cloud projects you can have. Delete some existing cloud projects of yours before trying again.":"您已经达到了您可以使用的云端项目的极限。在再次尝试之前先删除一些现有的云端项目。","You've reached your maximum of {0} leaderboards for your game":function(a){return["\u4F60\u7684\u6E38\u620F\u5DF2\u7ECF\u8FBE\u5230 ",a("0")," \u4E2A\u6392\u884C\u699C\u7684\u4E0A\u9650"]},"You've reached your maximum storage of {maximumCount} cloud projects":function(a){return["\u60A8\u5DF2\u8FBE\u5230 ",a("maximumCount")," \u4E2A\u4E91\u9879\u76EE\u7684\u6700\u5927\u5B58\u50A8\u7A7A\u95F4"]},"YouTube channel (tutorials and more)":"YouTube频道 (教程和更多)","Your Discord username":"您的 Discord 用户名","Your account has been deleted!":"您的帐户已被删除!","Your account is upgraded, with the extra exports and online services. If you wish to change later, come back to your profile and choose another plan.":"您的帐户已升级,带有额外的导出和在线服务。 如果您希望稍后更改,请回到您的个人资料并选择另一个计划。","Your browser will now open to enter your payment details.":"您的浏览器现在将打开以输入您的付款详细信息。","Your computer":"您的电脑","Your current subscription plan allows restoring versions from the last {historyRetentionDays} days.<0/>Get a higher plan to access older versions.":function(a){return["\u60A8\u5F53\u524D\u7684\u8BA2\u9605\u8BA1\u5212\u5141\u8BB8\u4ECE\u8FC7\u53BB ",a("historyRetentionDays")," \u5929\u5185\u6062\u590D\u7248\u672C\u3002<0/>\u5347\u7EA7\u5230\u66F4\u9AD8\u7684\u8BA1\u5212\u4EE5\u8BBF\u95EE\u8F83\u65E7\u7684\u7248\u672C\u3002"]},"Your feedback is valuable to help us improve our premium services. Why are you canceling your subscription?":"您的反馈对于帮助我们改进优质服务非常有价值。为什么要取消订阅?","Your forum account with email {email} will reflect your subscription level. You can press the sync button to update it immediately.":function(a){return["\u60A8\u7684\u8BBA\u575B\u8D26\u6237\u4F7F\u7528\u90AE\u7BB1 ",a("email")," \u5C06\u53CD\u6620\u60A8\u7684\u8BA2\u9605\u7B49\u7EA7\u3002\u60A8\u53EF\u4EE5\u6309\u540C\u6B65\u6309\u94AE\u7ACB\u5373\u66F4\u65B0\u3002"]},"Your free trial will expire in {0} hours.":function(a){return["\u60A8\u7684\u514D\u8D39\u8BD5\u7528\u5C06\u5728 ",a("0")," \u5C0F\u65F6\u540E\u5230\u671F\u3002"]},"Your game has some invalid elements, please fix these before continuing:":"您的游戏有一些无效元素,请在继续之前修复这些元素:","Your game is hidden on gd.games":"您的游戏在 gd.gams 上隐藏","Your game is in the “Build” section or you can restart the tutorial.":"你的游戏在“构建”部分,或者你可以重新开始教程。","Your game is not published on gd.games":"您的游戏未在 gd.gamp 上发布","Your game may not be registered, create one in the leaderboard manager.":"您的游戏可能尚未注册,请在排行榜管理器中创建一个。","Your game will be exported and packaged online as a stand-alone game for Windows, Linux and/or macOS.":"您的游戏将被导出和打包,作为Windows、Linux和/或macOS的独立游戏。","Your game won't work if you open the index.html file on your computer. You must upload it to a web hosting platform (Itch.io, Poki, CrazyGames etc...) or a web server to run it.":"如果您在计算机上打开 index.html 文件,您的游戏将无法运行。您必须将其上传到网络托管平台 (Itch.io、Poki、CrazyGames 等) 或网络服务器才能运行它。","Your game {0} received a feedback message: \"{1}...\"":function(a){return["\u60A8\u7684\u6E38\u620F ",a("0")," \u6536\u5230\u4E00\u6761\u53CD\u9988\u6D88\u606F\uFF1A\u201C",a("1"),"...\u201D"]},"Your game {0} received {1} feedback messages":function(a){return["\u60A8\u7684\u6E38\u620F ",a("0")," \u6536\u5230\u4E86 ",a("1")," \u6761\u53CD\u9988\u6D88\u606F"]},"Your game {0} was played more than {1} times!":function(a){return["\u60A8\u7684\u6E38\u620F ",a("0")," \u5DF2\u73A9\u8D85\u8FC7 ",a("1")," \u6B21\uFF01"]},"Your latest changes could not be applied to the preview(s) being run. You should start a new preview instead to make sure that all your changes are reflected in the game.":"您的最新更改无法应用于正在运行的预览。 您应该开始一个新的预览,以确保您的所有更改都已经反映在游戏中。","Your membership helps the GDevelop company maintain servers, build new features and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"您的会员资格可以帮助 GDevelop 公司维护服务器、构建新功能并保持开源项目的蓬勃发展。我们的目标:让游戏开发快速、有趣且易于所有人使用。","Your name":"您的名字:","Your need to first create your account, or login, to upload your own resources.":"您需要首先创建您的帐户或登录,以上传您自己的资源。","Your need to first save your game on GDevelop Cloud to upload your own resources.":"您需要先将游戏保存在 GDevelop Cloud 上才能上传您自己的资源。","Your new plan is now activated.":"您的新计划已被激活。","Your password must be between 8 and 30 characters long.":"您的密码长度必须介于 8 到 30 个字符之间。","Your plan:":"您的计划:","Your preview is ready! On your mobile or tablet, open your browser and enter in the address bar:":"预览输出完成!在其他设备的浏览器上输入以下网址:","Your project has {0} diagnostic error(s). Please fix them before exporting.":function(a){return["\u60A8\u7684\u9879\u76EE\u6709 ",a("0")," \u4E2A\u8BCA\u65AD\u9519\u8BEF\u3002\u8BF7\u5728\u5BFC\u51FA\u4E4B\u524D\u4FEE\u590D\u5B83\u4EEC\u3002"]},"Your project has {0} diagnostic error(s). Please fix them before launching a preview.":function(a){return["\u60A8\u7684\u9879\u76EE\u6709 ",a("0")," \u4E2A\u8BCA\u65AD\u9519\u8BEF\u3002\u8BF7\u5728\u542F\u52A8\u9884\u89C8\u4E4B\u524D\u4FEE\u590D\u5B83\u4EEC\u3002"]},"Your project is saved in the same folder as the application. This folder will be deleted when the application is updated. Please choose another location if you don't want to lose your project.":"项目保存在与应用程序相同的文件夹中。更新应用程序时将删除此文件夹。如果您不想失去您的项目,请选择其他位置。","Your project name has changed, this will also save the whole project, continue?":"您的项目名称已更改,这也将保存整个项目,是否继续?","Your purchase has been processed!":"您的购买已处理完毕!","Your search and filters did not return any result.":"您的搜索和过滤器没有返回任何结果。","Your search and filters did not return any result.<0/>If you need support for a specific language, please contact us.":"您的搜索和过滤器没有返回任何结果。<0/>如果您需要对特定语言的支持,请联系我们。","Your subscription has been canceled":"您的订阅已被取消","Your subscription is set to be cancelled at the end of the current billing period. You will retain access to the plan benefits until then.":"您的订阅将在当前账单周期结束时被取消。届时您将继续享受该计划的所有权益。","Your team does not have enough seats for a new admin.":"您的团队没有足够的席位容纳新管理员。","Your team does not have enough seats for a new student.":"您的团队没有足够的席位容纳新的学生。","Your {productType} has been activated!":function(a){return["\u60A8\u7684 ",a("productType")," \u5DF2\u6FC0\u6D3B\uFF01"]},"You’re about to permanently delete your GDevelop account username@mail.com. You will no longer be able to log into the app with this email address.":"你将要永久删除你的GDevelop帐户 username@mail.com.您将无法再使用此电子邮件地址登录应用程序。","You’ve reached the maximum amount of available seats. Increase the number of seats on your subscription to invite more students and collaborators.":"您已达到可用席位的最大数量。请增加您的订阅席位数量以邀请更多的学生和合作者。","Z":"Z","Z Order":"Z轴(前后关系)","Z Order of objects created from events":"从事件创建对象的Z 顺序","Z max":"Z 最大","Z max bound":"Z 最大边界","Z max bound should be greater than Z min bound":"Z 最大边界应大于 Z 最小边界","Z min":"Z 最小","Z min bound":"Z 最小边界","Z min bound should be smaller than Z max bound":"Z 最小边界应小于 Z 最大边界","Z offset (in pixels)":"Z偏移(以像素为单位)","Zoom In":"放大","Zoom Out":"缩小","Zoom in":"放大","Zoom in (you can also use Ctrl + Mouse wheel)":"放大 (您也可以使用 Ctrl + 鼠标滚轮)","Zoom out":"缩小","Zoom out (you can also use Ctrl + Mouse wheel)":"缩小 (您也可以使用 Ctrl + 鼠标滚轮)","Zoom to fit content":"缩放以适应内容","Zoom to fit selection":"缩放以适合选择","Zoom to initial position":"缩放到初始位置","[Follow GDevelop](https://tiktok.com/@gdevelop) and enter your TikTok username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u5173\u6CE8 GDevelop](https://tiktok.com/@gdevelop) \u5E76\u5728\u6B64\u5904\u8F93\u5165\u60A8\u7684 TikTok \u7528\u6237\u540D\u5373\u53EF\u83B7\u5F97 ",a("rewardValueInCredits")," \u514D\u8D39\u79EF\u5206\u4EE5\u793A\u611F\u8C22\uFF01"]},"[Follow GDevelop](https://twitter.com/GDevelopApp) and enter your Twitter username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u5173\u6CE8 GDevelop](https://twitter.com/GDevelopApp) \u5E76\u5728\u6B64\u5904\u8F93\u5165\u60A8\u7684 Twitter \u7528\u6237\u540D\u5373\u53EF\u83B7\u5F97 ",a("rewardValueInCredits")," \u514D\u8D39\u79EF\u5206\u4EE5\u793A\u611F\u8C22\uFF01"]},"[Star the GDevelop repository](https://github.com/4ian/GDevelop) and add your GitHub username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u4E3A GDevelop \u5B58\u50A8\u5E93\u52A0\u6CE8\u661F\u6807](https://github.com/4ian/GDevelop) \u5E76\u5728\u6B64\u5904\u6DFB\u52A0\u60A8\u7684 GitHub \u7528\u6237\u540D\uFF0C\u4EE5\u83B7\u5F97 ",a("rewardValueInCredits")," \u514D\u8D39\u79EF\u5206\u4F5C\u4E3A\u611F\u8C22\uFF01"]},"[Subscribe to GDevelop](https://youtube.com/@gdevelopapp) and enter your YouTube username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["\u8BA2\u9605 GDevelop (https://youtube.com/@gdevelopapp)\uFF0C\u5728\u6B64\u8F93\u5165\u60A8\u7684YouTube\u7528\u6237\u540D\uFF0C\u5373\u53EF\u83B7\u5F97 ",a("rewardValueInCredits")," \u514D\u8D39\u79EF\u5206\uFF0C\u4EE5\u793A\u611F\u8C22\uFF01"]},"a permanent":"永久的","add":"添加","an instant":"瞬间","ascending":"升序","audios":"音频","bitmap fonts":"位图字体","by":"通过","contains":"包含","date,date":"日期,日期","date,date,date0":"日期,日期,日期0","day,date,date0":"日,日期,日期0","delete":"删除","descending":"降序","divide by":"除以","ends with":"结尾为","false":"假","fonts":"字体","gd.games":"gd.games","iOS":"iOS","iOS & Android (manual)":"iOS & Android (手册)","iOS (iPhone and iPad) icons":"iOS (iPhone 和 iPad) 图标","iOS Build":"iOS 构建","iOS builds":"iOS 构建","in {elementsWithWords}":function(a){return["\u5728 ",a("elementsWithWords")]},"leaderboard.":"排行榜。","leaderboards.":"排行榜。","limit:":"限制:","macOS (zip file)":"macOS (zip 文件)","macOS (zip)":"macOS (zip)","min":"分钟","minutes":"分","multiply by":"乘","no":"否","no limit":"无限制","or":"或者","order by distance to another object":"按与另一个对象的距离排序","order by highest ammo":"按最高弹药排序","order by highest health":"按最高生命值排序","order by highest variable":"按最高变量排序","order by physics speed":"按物理速度排序","ordered by":"按排序","panel sprites":"面板精灵","particle emitters":"粒子发射器","redemptionCodeExpirationDate,date":"redemptionCodeExpirationDate,date","scene center":"场景中心","set to":"设置为","set to false":"设置为 false","set to true":"设置为 true","sprites":"精灵","starts with":"开头为","subtract":"减去","the events sheet":"事件表","the home page":"主页","the scene editor":"场景编辑器","tile maps":"瓦片地图","tiled sprites":"瓦块精灵","toggle":"切换","true":"真","username":"用户名","yes":"是","{0}":function(a){return[a("0")]},"{0} % of players with more than {1} minutes":function(a){return[a("0")," %\u7684\u73A9\u5BB6\u8D85\u8FC7 ",a("1")," \u5206\u949F"]},"{0} (default)":function(a){return[a("0")," (\u9ED8\u8BA4)"]},"{0} ({1})":function(a){return[a("0")," (",a("1"),")"]},"{0} Asset pack":function(a){return[a("0")," \u8D44\u4EA7\u5305"]},"{0} Asset packs":function(a){return[a("0")," \u8D44\u4EA7\u5305"]},"{0} Assets":function(a){return[a("0")," \u8D44\u4EA7"]},"{0} Course":function(a){return[a("0")," \u8BFE\u7A0B"]},"{0} Courses":function(a){return[a("0")," \u8BFE\u7A0B"]},"{0} Game template":function(a){return[a("0")," \u6E38\u620F\u6A21\u677F"]},"{0} Game templates":function(a){return[a("0")," \u6E38\u620F\u6A21\u677F"]},"{0} OFF":function(a){return[a("0")," OFF"]},"{0} builds":function(a){return[a("0")," \u7248\u672C"]},"{0} chapters":function(a){return[a("0")," \u7AE0\u8282"]},"{0} children":function(a){return[a("0")," \u4E2A\u5B50\u9879"]},"{0} credits":function(a){return[a("0")," \u4E2A\u79EF\u5206"]},"{0} credits available":function(a){return[a("0")," \u79EF\u5206\u53EF\u7528"]},"{0} exports created":function(a){return["\u5DF2\u521B\u5EFA ",a("0")," \u4E2A\u5BFC\u51FA"]},"{0} exports ongoing...":function(a){return[a("0")," \u5BFC\u51FA\u6B63\u5728\u8FDB\u884C\u4E2D..."]},"{0} hours of material":function(a){return[a("0")," \u5C0F\u65F6\u7684\u6750\u6599"]},"{0} invited you to join a team.":function(a){return[a("0")," \u9080\u8BF7\u60A8\u52A0\u5165\u56E2\u961F\u3002"]},"{0} is included in the bundle {1}.":function(a){return[a("0")," \u5305\u542B\u5728\u6346\u7ED1\u5305 ",a("1")," \u4E2D\u3002"]},"{0} is included in this bundle for {1} !":function(a){return[a("0")," \u5305\u542B\u5728\u6B64\u6346\u7ED1\u5305\u4E2D\uFF0C\u552E\u4EF7 ",a("1"),"\uFF01"]},"{0} minutes per player":function(a){return["\u6BCF\u4F4D\u73A9\u5BB6",a("0")," \u5206\u949F"]},"{0} new feedbacks":function(a){return[a("0")," \u65B0\u53CD\u9988"]},"{0} of {1} completed":function(a){return[a("1")," \u7684 ",a("0")," \u5DF2\u5B8C\u6210"]},"{0} of {1} subscription":function(a){return[a("0")," \u7684 ",a("1")," \u8BA2\u9605"]},"{0} options":function(a){return[a("0")," \u9009\u9879"]},"{0} part":function(a){return[a("0")," \u90E8\u5206"]},"{0} players with more than {1} minutes":function(a){return[a("0")," \u73A9\u5BB6\u8D85\u8FC7 ",a("1")," \u5206\u949F"]},"{0} projects":function(a){return[a("0")," \u9879\u76EE"]},"{0} properties":function(a){return[a("0")," \u5C5E\u6027"]},"{0} reviews":function(a){return[a("0")," \u8BC4\u8BBA"]},"{0} sessions":function(a){return[a("0")," \u4E2A\u4F1A\u8BDD"]},"{0} subscription":function(a){return[a("0")," \u8BA2\u9605"]},"{0} use left":function(a){return["\u5269\u4F59 ",a("0")," \u6B21\u4F7F\u7528"]},"{0} uses left":function(a){return["\u5269\u4F59 ",a("0")," \u6B21\u4F7F\u7528"]},"{0} variables":function(a){return[a("0")," \u4E2A\u53D8\u91CF"]},"{0} weeks":function(a){return[a("0")," \u5468"]},"{0} will be added to your account {1}.":function(a){return[a("0")," \u5C06\u6DFB\u52A0\u5230\u60A8\u7684\u5E10\u6237 ",a("1"),"\u3002"]},"{0}% bounce rate":function(a){return[a("0"),"% \u8DF3\u51FA\u7387"]},"{0}'s projects":function(a){return[a("0")," \u7684\u9879\u76EE"]},"{0}+ (Available with a subscription)":function(a){return[a("0")," + (\u8BA2\u9605\u5373\u53EF)"]},"{0}/{1} achievements":function(a){return[a("0"),"/",a("1")," \u6210\u5C31"]},"{0}Are you sure you want to remove this extension? This can't be undone.":"确定要删除此扩展吗?此操作无法撤销。","{daysAgo} days ago":function(a){return[a("daysAgo")," \u5929\u524D"]},"{durationInDays} days":function(a){return[a("durationInDays")," \u5929"]},"{durationInMinutes} min.":function(a){return[a("durationInMinutes")," \u5206\u949F\u3002"]},"{durationInMinutes} minutes":function(a){return[a("durationInMinutes")," \u5206\u949F"]},"{email} has already accepted the invitation and joined the team.":function(a){return[a("email")," \u5DF2\u7ECF\u63A5\u53D7\u4E86\u9080\u8BF7\u5E76\u52A0\u5165\u4E86\u56E2\u961F\u3002"]},"{email} will be removed from the team.":function(a){return[a("email")," \u5C06\u4ECE\u56E2\u961F\u4E2D\u79FB\u9664\u3002"]},"{fullName} ({username})":function(a){return[a("fullName")," (",a("username"),")"]},"{functionNode} action from {extensionNode} extension is missing.":function(a){return["\u6765\u81EA ",a("functionNode")," \u6269\u5C55\u7684 ",a("extensionNode")," \u64CD\u4F5C\u4E22\u5931\u3002"]},"{functionNode} action on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return[a("functionNode")," \u5BF9 ",a("extensionNode")," \u6269\u5C55\u7684 ",a("behaviorNode")," \u884C\u4E3A\u64CD\u4F5C\u4E22\u5931\u3002"]},"{functionNode} condition from {extensionNode} extension is missing.":function(a){return["\u6765\u81EA ",a("extensionNode")," \u6269\u5C55\u7684 ",a("functionNode")," \u6761\u4EF6\u7F3A\u5931\u3002"]},"{functionNode} condition on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return["\u5728 ",a("functionNode")," \u884C\u4E3A ",a("behaviorNode")," \u4E0A\u7F3A\u5C11\u6765\u81EA ",a("extensionNode")," \u6269\u5C55\u7684\u6761\u4EF6\u3002"]},"{gameCount} of your games were played more than {0} times in total!":function(a){return["\u60A8\u7684 ",a("gameCount")," \u4E2A\u6E38\u620F\u603B\u5171\u73A9\u4E86\u8D85\u8FC7 ",a("0")," \u6B21\uFF01"]},"{hoursAgo} hours ago":function(a){return[a("hoursAgo")," \u5C0F\u65F6\u524D"]},"{includedCreditsAmount} credits":function(a){return[a("includedCreditsAmount")," \u79EF\u5206"]},"{minutesAgo} minutes ago":function(a){return[a("minutesAgo")," \u5206\u949F\u524D"]},"{numberOfAssetPacks} Asset Pack":function(a){return[a("numberOfAssetPacks")," \u8D44\u4EA7\u5305"]},"{numberOfAssetPacks} Asset Packs":function(a){return[a("numberOfAssetPacks")," \u8D44\u4EA7\u5305"]},"{numberOfCourses} Course":function(a){return[a("numberOfCourses")," \u8BFE\u7A0B"]},"{numberOfCourses} Courses":function(a){return[a("numberOfCourses")," \u8BFE\u7A0B"]},"{numberOfGameTemplates} Game Template":function(a){return[a("numberOfGameTemplates")," \u6E38\u620F\u6A21\u677F"]},"{numberOfGameTemplates} Game Templates":function(a){return[a("numberOfGameTemplates")," \u6E38\u620F\u6A21\u677F"]},"{objectName} variables":function(a){return[a("objectName")," \u53D8\u91CF"]},"{percentage}% left":function(a){return[a("percentage"),"% \u5269\u4F59"]},"{periodLabel}, <0>{0} <1>{1}":function(a){return[a("periodLabel"),", <0>",a("0")," <1>",a("1"),""]},"{periodLabel}, <0>{0} <1>{1} per seat":function(a){return[a("periodLabel"),", <0>",a("0")," <1>",a("1")," \u6BCF\u4E2A\u5EA7\u4F4D"]},"{periodLabel}, {0}":function(a){return[a("periodLabel"),", ",a("0")]},"{periodLabel}, {0} per seat":function(a){return[a("periodLabel"),", ",a("0")," \u6BCF\u4E2A\u5EA7\u4F4D"]},"{planCreditsAmount} credits":function(a){return[a("planCreditsAmount")," \u79EF\u5206"]},"{price} every {0} months":function(a){return["\u6BCF ",a("0")," \u6708 ",a("price")]},"{price} every {0} weeks":function(a){return["\u6BCF ",a("0")," \u5468 ",a("price")]},"{price} every {0} years":function(a){return["\u6BCF ",a("0")," \u5E74 ",a("price")]},"{price} per month":function(a){return["\u6BCF\u6708 ",a("price")]},"{price} per seat, each month":function(a){return["\u6BCF\u4E2A\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u6708"]},"{price} per seat, each week":function(a){return["\u6BCF\u4E2A\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u5468"]},"{price} per seat, each year":function(a){return["\u6BCF\u4E2A\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u5E74"]},"{price} per seat, every {0} months":function(a){return["\u6BCF\u4E2A\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u6708"]},"{price} per seat, every {0} weeks":function(a){return["\u6BCF\u4E2A\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u5468"]},"{price} per seat, every {0} years":function(a){return["\u6BCF\u4E2A\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u5E74"]},"{price} per week":function(a){return["\u6BCF\u5468 ",a("price")]},"{price} per year":function(a){return["\u6BCF\u5E74 ",a("price")]},"{resultsCount} results":function(a){return[a("resultsCount")," \u4E2A\u7ED3\u679C"]},"{roundedMonths} months":function(a){return[a("roundedMonths")," \u4E2A\u6708"]},"{smartObjectsCount} smart objects":function(a){return[a("smartObjectsCount")," \u667A\u80FD\u5BF9\u8C61"]},"{totalCredits} Credits":function(a){return[a("totalCredits")," \u79EF\u5206"]},"{totalMatches} matches":function(a){return[a("totalMatches"),"\u4E2A\u5339\u914D\u9879"]},"~{0} minutes.":function(a){return["\u5728 ",a("0")," \u5206\u949F\u5185."]},"“Player feedback” is off, turn it on to start collecting feedback on your game.":"“玩家反馈”已关闭,请将其打开以开始收集有关您的游戏的反馈。","“Start” screen":"“开始”屏幕","“You win” message":"“你赢了”的信息","≠ (not equal to)":"≠ (不等于)","≤ (less or equal to)":"≤ (小于或等于)","≥ (greater or equal to)":"≥ (大于或等于)","❌ Game configuration could not be saved, please try again later.":"❌ 游戏配置无法保存,请稍后重试。","🎉 Congrats on getting the {translatedName} featuring for your game {0}!":function(a){return["\uD83C\uDF89 \u606D\u559C\u60A8\u7684\u6E38\u620F ",a("0")," \u83B7\u5F97\u4E86 ",a("translatedName")," \u7CBE\u9009\uFF01"]},"🎉 You can now follow your new course!":"🎉您现在可以关注您的新课程!","🎉 You can now use your assets!":"🎉 您现在可以使用您的资产了!","🎉 You can now use your credits!":"🎉 您现在就可以使用您的积分了!","🎉 You can now use your template!":"🎉 您现在可以使用您的模板了!","🎉 Your request has been saved. Lay back, we'll contact you shortly.":"🎉 您的请求已保存。请稍候,我们将尽快与您联系。","👋 Good to see you {username}!":function(a){return["\uD83D\uDC4B \u5F88\u9AD8\u5174\u770B\u5230\u4F60 ",a("username"),"\uFF01"]},"👋 Good to see you!":"👋 很高兴看到你 !","👋 Welcome to GDevelop {username}!":function(a){return["\uD83D\uDC4B \u6B22\u8FCE\u4F7F\u7528 GDevelop ",a("username"),"\uFF01"]},"👋 Welcome to GDevelop!":"👋 欢迎使用 GDevelop !","Change the width of an object.":"调整对象的宽度。","the width":"宽度","Change the height of an object.":"调整对象的高度。","the height":"高度","Scale":"缩放","Modify the scale of the specified object.":"调整指定对象的比例","the scale":"缩放比例","Scale on X axis":"X 轴缩放比例","the width's scale of an object":"对象宽度比例","the width's scale":"宽度比例","Scale on Y axis":"Y 轴缩放比例","the height's scale of an object":"对象高度比例","the height's scale":"高度比例","Flip the object horizontally":"水平翻转对象","Flip horizontally _PARAM0_: _PARAM1_":"水平翻转_PARAM0_:_PARAM1_","Activate flipping":"激活翻转","Flip the object vertically":"垂直翻转对象","Flip vertically _PARAM0_: _PARAM1_":"垂直翻转_PARAM0_:_PARAM1_","Horizontally flipped":"水平翻转","Check if the object is horizontally flipped":"检查对象是否水平翻转","_PARAM0_ is horizontally flipped":"_PARAM0_ 是水平翻转","Vertically flipped":"垂直翻转","Check if the object is vertically flipped":"检查对象是否垂直翻转","_PARAM0_ is vertically flipped":"_PARAM0_ 是垂直翻转","the opacity of an object, between 0 (fully transparent) to 255 (opaque)":"对象的不透明度,介于 0 (完全透明) 到 255 (不透明) 之间","the opacity":"不透明度","Change ":"更改 ","Check the property value for .":"检查 的属性值。","Property of _PARAM0_ is true":"_PARAM0_ 属性 为 true","Update the property value for .":"更新 的属性值。","Set property value for of _PARAM0_ to ":"将 _PARAM0_ 的 属性值设为 ","New value to set":"要设置的新值","Toggle":"切换","Toggle the property value for .\nIf it was true, it will become false, and if it was false it will become true.":"切换 的属性值。\n如果为真,将变成假;如果为假,将变成真。","Toggle property of _PARAM0_":"切换属性 _PARAM0_","the property value for ":" 的属性值"," property":" 属性"," shared property":" 共享属性","Center of rotation":"旋转中心","Change the center of rotation of an object relatively to the object origin.":"相对于物体原点,改变物体旋转中心。","Change the center of rotation of _PARAM0_ to _PARAM1_ ; _PARAM2_ ; _PARAM3_":"将 _PARAM0_ 的旋转中心更改为 _PARAM1_ ; _PARAM2_ ; _PARAM3_","X position":"X 位置","Y position":"Y 位置","Z position":"Z位置","Change the center of rotation of _PARAM0_ to _PARAM1_ ; _PARAM2_":"将 _PARAM0_ 的旋转中心更改为 _PARAM1_ ; _PARAM2_","Error during exporting! Unable to export events:\n":"导出时出现错误!无法导出事件:\n","Error during export:\n":"导出期间出现错误:\n","Unable to write ":"无法写入 ","Javascript code":"Javascript 代码","Insert some Javascript code into events":"插入 Javascript 代码到事件","Consider objects touching each other, but not overlapping, as in collision (default: no)":"考虑物体相互接触,但不重叠,如碰撞(默认:否)","HTML5 (Web and Android games)":"HTML5 ( 网页和安卓游戏 )","HTML5 and javascript based games for web browsers.":"为 web 浏览器而设的基于 HTML5 和 javascript的游戏。","Enables the creation of 2D games that can be played in web browsers. These can also be exported to Android with third-party tools.":"启用可在 web 浏览器中玩的2D 游戏创建,这些也可以用第三方工具导出到 Android 。","Gravity":"重力","Jump":"跳跃","Jump speed":"弹跳速度","Jump sustain time":"跳跃维持时间","Maximum time (in seconds) during which the jump strength is sustained if the jump key is held - allowing variable height jumps.":"如果按住跳跃键,则可以保持跳跃强度的最长时间(以秒为单位)-允许可变高度的跳跃。","Max. falling speed":"最大下落的速度","Ladder climbing speed":"爬梯速度","Ladder":"梯子","Acceleration":"加速度","Walk":"行走","Deceleration":"减速","Max. speed":"最大速度","Disable default keyboard controls":"禁用默认键盘控制","Slope max. angle":"斜坡最大角度","Can grab platform ledges":"可以抓平台壁架","Ledge":"Ledge","Automatically grab platform ledges without having to move horizontally":"自动抓住平台壁架,而无需水平移动","Grab offset on Y axis":"Y轴外部偏移量","Grab tolerance on X axis":"抓取 X轴上的公差","Use frame rate dependent trajectories (deprecated — best left unchecked)":"使用帧速率相关的轨迹(不推荐使用,建议取消选中)","Deprecated options":"已弃用的选项","Allows repeated jumps while holding the jump key (deprecated — best left unchecked)":"允许在按住跳跃键时进行重复跳跃(不推荐使用,建议取消选中)","Can go down from jumpthru platforms":"可以从跳跃平台向下移动","Platform":"平台","Jumpthru platform":"可穿越平台","Ledges can be grabbed":"可以抓住边角","Platform behavior":"平台行为","Platformer character":"平台角色","Jump and run on platforms.":"在平台上跳跃和奔跑。","Is moving":"移动中","Check if the object is moving (whether it is on the floor or in the air).":"检查物体是否移动(无论是在地板上还是在空中)。","_PARAM0_ is moving":"_PARAM0_ 正在移动","Platformer state":"平台状态","Is on floor":"在地板上","Check if the object is on a platform.":"检查对象是否在平台上。","_PARAM0_ is on floor":"_PARAM0_ 在地板上","Is on ladder":"是在梯子上","Check if the object is on a ladder.":"检查对象是否在平台上。","_PARAM0_ is on ladder":"_PARAM0_ 在梯子上","Is jumping":"跳起中","Check if the object is jumping.":"检测对象是否在跳起","_PARAM0_ is jumping":"_PARAM0_ 正在跳起","Is falling":"正在下落","Check if the object is falling.\nNote that the object can be flagged as jumping and falling at the same time: at the end of a jump, the fall speed becomes higher than the jump speed.":"检查对象是下降的,\n注意,对象可以被标记为跳落在同一时间:在跳结束,下降速度高于跳速度。","_PARAM0_ is falling":"_PARAM0_ 正在下落","Is grabbing platform ledge":"抓住平台壁架","Check if the object is grabbing a platform ledge.":"检查物体是否抓住了平台。","_PARAM0_ is grabbing a platform ledge":"_PARAM0_抓住一个平台","Compare the gravity applied on the object.":"比较施加在物体上的重力。","the gravity":"重力","Platformer configuration":"平台配置","Gravity to compare to (in pixels per second per second)":"要比较的重力(以每秒像素为单位)","Change the gravity applied on an object.":"改变施加在物体上的重力。","Gravity (in pixels per second per second)":"重力(以每秒像素为单位)","Maximum falling speed":"最大的下落速度","Compare the maximum falling speed of the object.":"比较物体的最大下落速度。","the maximum falling speed":"最大降落速度","Max speed to compare to (in pixels per second)":"与之比较的最大速度(像素每秒)","Change the maximum falling speed of an object.":"改变物体的最大下落速度。","Max speed (in pixels per second)":"最大速度(像素每秒)","If jumping, try to preserve the current speed in the air":"如果是跳跃,尽量保持当前空中的速度","Compare the ladder climbing speed (in pixels per second).":"比较爬梯速度(以像素/秒为单位)。","the ladder climbing speed":"爬梯速度","Speed to compare to (in pixels per second)":"与之比较的速度(像素每秒)","Change the ladder climbing speed.":"改变梯子的爬升速度。","Speed (in pixels per second)":"(单位为像素每秒) 的速度","Compare the horizontal acceleration of the object.":"比较物体的水平加速度。","the horizontal acceleration":"水平加速度","Acceleration to compare to (in pixels per second per second)":"与之比较的加速(像素/秒)","Change the horizontal acceleration of an object.":"改变物体的水平加速度。","Acceleration (in pixels per second per second)":"加速速(像素每秒)","Compare the horizontal deceleration of the object.":"比较物体的水平减速度。","the horizontal deceleration":"水平减速","Deceleration to compare to (in pixels per second per second)":"与之比较的减速(像素/秒)","Change the horizontal deceleration of an object.":"改变物体的水平减速度。","Deceleration (in pixels per second per second)":"减速(像素每秒)","Maximum horizontal speed":"最大水平速度","Compare the maximum horizontal speed of the object.":"比较物体的最大水平速度。","the maximum horizontal speed":"最大水平速度","Change the maximum horizontal speed of an object.":"更改物体的最大水平速度。","Compare the jump speed of the object.Its value is always positive.":"比较物体的跳跃速度。它的值总是正数。","the jump speed":"跳跃速度","Change the jump speed of an object. Its value is always positive.":"改变物体的跳跃速度。它的值总是正数。","Compare the jump sustain time of the object.This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"比较物体的跳跃维持时间。这是保持按住跳跃按钮允许维持初始跳跃速度的时间。","the jump sustain time":"跳跃维持时间","Duration to compare to (in seconds)":"比较的持续时间(以秒为单位)","Change the jump sustain time of an object.This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"更改物体的跳跃维持时间。这是保持按住跳跃按钮允许维持初始跳跃速度的时间。","Duration (in seconds)":"持续时间(秒)","Allow jumping again":"是否允许再次跳跃","When this action is executed, the object is able to jump again, even if it is in the air: this can be useful to allow a double jump for example. This is not a permanent effect: you must call again this action everytime you want to allow the object to jump (apart if it's on the floor).":"当执行此操作时, 对象能够再次跳跃. 即使它在空中; 这能有助于 [如:双倍跳跃] , 但这不是永久效果. 每当你想要让对象跳跃时你都必须再次调用此动作 (如果它在地面上).","Allow _PARAM0_ to jump again":"允许 _PARAM0_ 再跳一次","Forbid jumping again in the air":"禁止再次在空中跳跃","This revokes the effect of \"Allow jumping again\". The object is made unable to jump while in mid air. This has no effect if the object is not in the air.":"这会取消“允许再次跳跃”的效果。 物体在半空中无法跳跃。 如果物体不在空中,这没有任何影响。","Forbid _PARAM0_ to air jump":"禁止_PARAM0_空中跳跃","Abort jump":"中止跳跃","Abort the current jump and stop the object vertically. This action doesn't have any effect when the character is not jumping.":"中止当前跳转并垂直停止对象。当角色不跳时,这个动作不会有任何效果。","Abort the current jump of _PARAM0_":"中止当前_PARAM0_ 的跳跃","Can jump":"可以跳","Check if the object can jump.":"检查对象是否可以跳跃。","_PARAM0_ can jump":"_PARAM0_ 可以跳","Simulate left key press":"模拟左键按下","Simulate a press of the left key.":"模拟左键的按下。","Simulate pressing Left for _PARAM0_":"模拟 _PARAM0_ 左键按下","Platformer controls":"平台控制","Simulate right key press":"模拟右键按下","Simulate a press of the right key.":"模拟右键的按下。","Simulate pressing Right for _PARAM0_":"模拟 _PARAM0_ 右键按下","Simulate up key press":"模拟上键按下","Simulate a press of the up key (used when on a ladder).":"模拟上键的按下(在梯子上时)。","Simulate pressing Up for _PARAM0_":"模拟 _PARAM0_ 上键按下","Simulate down key press":"模拟下键按下","Simulate a press of the down key (used when on a ladder).":"模拟下键的按下(在梯子上时)。","Simulate pressing Down for _PARAM0_":"模拟 _PARAM0_ 下键按下","Simulate ladder key press":"模拟梯键按下","Simulate a press of the ladder key (used to grab a ladder).":"模拟梯键按下(用于抓住梯子)。","Simulate pressing Ladder key for _PARAM0_":"模拟 _PARAM0_ 梯键按下","Simulate release ladder key press":"模拟释放梯形按键","Simulate a press of the Release Ladder key (used to get off a ladder).":"模拟按下释放梯子键(用于离开梯子)。","Simulate pressing Release Ladder key for _PARAM0_":"模拟按下_PARAM0_的释放梯键","Simulate jump key press":"模拟跳跃键按下","Simulate a press of the jump key.":"模拟跳跃键的按下。","Simulate pressing Jump key for _PARAM0_":"模拟 _PARAM0_ 跳跃键按下","Simulate release platform key press":"模拟释放平台按键","Simulate a press of the release platform key (used when grabbing a platform ledge).":"模拟按下释放平台键(在抓住平台壁架时使用)。","Simulate pressing Release Platform key for _PARAM0_":"模拟按下 _PARAM0_ 的释放平台键","Simulate control":"模拟控制","Simulate a press of a key.\nValid keys are Left, Right, Jump, Ladder, Release Ladder, Up, Down.":"模拟按键的按下。\n有效的键是向左、向右、跳跃、梯子、释放梯子、向上、向下。","Simulate pressing _PARAM2_ key for _PARAM0_":"模拟 _PARAM0_ _PARAM2_ 键按下","Key":"关键","Control pressed or simulated":"按下或模拟控制","A control was applied from a default control or simulated by an action.":"从默认控制或通过动作模拟应用控制。","_PARAM0_ has the _PARAM2_ key pressed or simulated":"_PARAM0_ 按下或模拟的 _PARAM2_ 键","Ignore default controls":"忽略默认控制","De/activate the use of default controls.\nIf deactivated, use the simulated actions to move the object.":"取消/激活默认控制的使用。\n如果取消激活,使用模拟的动作移动对象。","Ignore default controls for _PARAM0_: _PARAM2_":"忽略_PARAM0_的默认控件:_PARAM2_","Ignore controls":"忽略控制","Platform grabbing":"平台抓取","Enable (or disable) the ability of the object to grab platforms when falling near to one.":"启用(或禁用)对象接近平台时抓住平台的能力。","Allow _PARAM0_ to grab platforms: _PARAM2_":"允许 _PARAM0_ 抓取平台:_PARAM2_","Can grab platforms":"可以抓取平台","Check if the object can grab the platforms.":"检查对象是否可以抓取平台。","_PARAM0_ can grab the platforms":"_PARAM0_ 可以抓取平台","Current falling speed":"当前下落速度","Compare the current falling speed of the object. Its value is always positive.":"比较物体当前的下降速度,它的值总是正数。","the current falling speed":"当前下降速度","Change the current falling speed of the object. This action doesn't have any effect when the character is not falling or is in the first phase of a jump.":"改变物体当前的下落速度。当角色没有下落或者处于跳跃的第一阶段时,这个动作没有任何效果。","Current jump speed":"当前跳跃速度","Compare the current jump speed of the object. Its value is always positive.":"比较物体当前的跳跃速度。它的值总是正数。","the current jump speed":"当前跳跃速度","Current horizontal speed":"当前水平速度","Change the current horizontal speed of the object. The object moves to the left with negative values and to the right with positive ones":"更改对象的当前水平速度。对象向左移动为负值,向右移动为正值","the current horizontal speed":"当前水平速度","Compare the current horizontal speed of the object. The object moves to the left with negative values and to the right with positive ones":"比较物体当前的水平速度。对象向左移动为负值,向右移动为正值","Return the gravity applied on the object (in pixels per second per second).":"返回应用于对象的重力(每秒像素/秒)。","Return the maximum falling speed of the object (in pixels per second).":"返回对象的最大下降速度(每秒像素)。","Return the ladder climbing speed of the object (in pixels per second).":"返回对象的爬梯速度(每秒像素)。","Return the horizontal acceleration of the object (in pixels per second per second).":"返回对象的水平加速度(每秒像素/秒)。","Return the horizontal deceleration of the object (in pixels per second per second).":"返回对象的水平减速(每秒像素/秒)。","Return the maximum horizontal speed of the object (in pixels per second).":"返回对象的最大水平速度(每秒像素)。","Return the jump speed of the object (in pixels per second). Its value is always positive.":"返回对象的跳跃速度(每秒像素)。其值总是正数。","Return the jump sustain time of the object (in seconds).This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"返回物体的跳转维持时间(以秒为单位)。在这段时间内,保持跳跃按钮不动,可以保持初始跳跃速度。","Current fall speed":"当前下落速度","Return the current fall speed of the object (in pixels per second). Its value is always positive.":"返回对象当前的下降速度(每秒像素)。其值总是正数。","Return the current horizontal speed of the object (in pixels per second). The object moves to the left with negative values and to the right with positive ones":"返回对象当前水平的速度(每秒像素)。 对象带着负值向左移动,带着正值向右移动","Return the current jump speed of the object (in pixels per second). Its value is always positive.":"返回对象当前的跳跃速度(每秒像素)。其值总是正数。","Flag objects as being platforms which characters can run on.":"将对象标记为角色可以在其上运行的平台。","Platform type":"平台类型","Change the platform type of the object: Platform, Jump-Through, or Ladder.":"更改平台的平台类型:平台、跳转、或梯形。","Set platform type of _PARAM0_ to _PARAM2_":"设置 _PARAM0_ 的平台类型为 _PARAM2_","Character is on given platform":"角色在给定平台上","Check if a platformer character is on a given platform.":"检查平台游戏角色是否在给定平台上。","_PARAM0_ is on platform _PARAM2_":"_PARAM0_ 位于平台 _PARAM2_ 上","Collision":"碰撞","Platforms":"平台","Font size":"字体大小","Alignment":"对准","Alignment of the text when multiple lines are displayed":"显示多行时的文本对齐","Vertical alignment":"垂直对齐","Show outline":"显示轮廓线","Show shadow":"显示阴影","Text object":"文字对象","An object that can be used to display any text on the screen: remaining life counter, some indicators, menu buttons, dialogues...":"一个可用于在屏幕上显示任何文本的对象:剩余的生命计数器、一些指标、菜单按钮、对话...","Displays a text on the screen.":"在屏幕上显示文本。","Change the font of the text.":"更改文本字体。","Change font of _PARAM0_ to _PARAM1_":"把 _PARAM0_ 的字体更改为 _PARAM1_","Font resource name":"字体资源名称","Change the color of the text. The color is white by default.":"更改文本的颜色。默认颜色是白色。","Change color of _PARAM0_ to _PARAM1_":"把 _PARAM0_ 的颜色更改为 _PARAM1_","Gradient":"梯度","Change the gradient of the text.":"更改文本的渐变。","Change gradient of _PARAM0_ to colors _PARAM2_ _PARAM3_ _PARAM4_ _PARAM5_, type _PARAM1_":"将 _PARAM0_ 的渐变更改为颜色 _PARAM2_ _PARAM3_ _PARAM4_ _PARAM5_,输入 _PARAM1_","Gradient type":"渐变类型","First Color":"第一个颜色","Second Color":"第二个颜色","Third Color":"第三个颜色","Fourth Color":"第四个颜色","Change the outline of the text. A thickness of 0 disables the outline.":"更改文本的轮廓。厚度0会禁用轮廓。","Change outline of _PARAM0_ to color _PARAM1_ with thickness _PARAM2_":"将_PARAM0_的轮廓更改为颜色_PARAM1_,厚度为_PARAM2_","Enable outline":"启用轮廓线","Enable or disable the outline of the text.":"启用或禁用文本轮廓线。","Enable the outline of _PARAM0_: _PARAM1_":"启用_PARAM0_的轮廓线:_PARAM1_","Outline enabled":"轮廓线已启用","Check if the text outline is enabled.":"检查文本轮廓线是否启用。","The outline of _PARAM0_ is enabled":"_PARAM0_ 的轮廓线已启用","Change the outline color of the text.":"更改文本的轮廓线颜色。","Change the text outline color of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的文本轮廓线颜色更改为 _PARAM1_","Outline thickness":"轮廓线厚度","the outline thickness of the text":"文本的轮廓线厚度","the text outline thickness":"文本轮廓线厚度","Text shadow":"文字阴影","Change the shadow of the text.":"更改文本的阴影。","Change the shadow of _PARAM0_ to color _PARAM1_ distance _PARAM2_ blur _PARAM3_ angle _PARAM4_":"将_PARAM0_ 的阴影改为颜色 _PARAM1_ 距离_PARAM2_ 模糊 _PARAM3_ 角度 _PARAM4_","Blur":"模糊","Enable shadow":"启用阴影","Enable or disable the shadow of the text.":"启用或禁用文本的阴影。","Enable the shadow of _PARAM0_: _PARAM1_":"启用 _PARAM0_ 的阴影:_PARAM1_","Show the shadow":"显示阴影","Shadow enabled":"阴影已启用","Check if the text shadow is enabled.":"检查文字阴影是否已启用。","The shadow of _PARAM0_ is enabled":"_PARAM0_ 的阴影已启用","Shadow color":"阴影颜色","Change the shadow color of the text.":"更改文本的阴影颜色。","Change the shadow color of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的阴影颜色更改为 _PARAM1_","Shadow opacity":"阴影不透明度","the shadow opacity of the text":"文本的阴影不透明度","the shadow opacity ":"阴影不透明度 ","Shadow distance":"阴影距离","the shadow distance of the text":"文本的阴影距离","the shadow distance ":"阴影距离 ","Shadow angle":"阴影角度","the shadow angle of the text":"文本的阴影角度","the shadow angle ":"阴影角度 ","Angle (in degrees)":"角度 (度):","Shadow blur radius":"阴影模糊半径","the shadow blur radius of the text":"文本的阴影模糊半径","the shadow blur radius ":"阴影模糊半径 ","Smoothing":"平滑","Activate or deactivate text smoothing.":"激活或取消激活文本平滑。","Smooth _PARAM0_: _PARAM1_":"平滑 _PARAM0_: _PARAM1_","Style":"风格","Smooth the text":"平滑文字","Check if an object is smoothed":"检查对象是否平滑","_PARAM0_ is smoothed":"_PARAM0_ 已平滑化","De/activate bold":"不/激活粗体","Set bold style of _PARAM0_ : _PARAM1_":"设置 _PARAM0_ 的粗体样式: _PARAM1_","Set bold style":"设置粗体样式","Check if the bold style is activated":"测试粗体样式是否被激活","_PARAM0_ bold style is set":"_PARAM0_ 的粗体样式已设置","De/activate italic.":"不/激活斜体。","Set italic style for _PARAM0_ : _PARAM1_":"设置 _PARAM0_ 的斜体样式: _PARAM1_","Set italic":"设置斜体","Check if the italic style is activated":"检查斜体样式是否被激活","_PARAM0_ italic style is set":"_PARAM0_ 的斜体样式已设置","Underlined":"下划线","De/activate underlined style.":"不/激活下划线。","Set underlined style of _PARAM0_: _PARAM1_":"设置_PARAM0_ 的下划线样式: _PARAM1_","Underline":"下划线","Check if the underlined style of an object is set.":"检查对象的下划线样式是否被激活","_PARAM0_ underlined style is activated":"_PARAM0_ 的下划线已激活","Padding":"填充","Compare the number of pixels around a text object. If the shadow or the outline around the text are getting cropped, raise this value.":"比较文本对象周围的像素数。 如果文本周围的阴影或轮廓被裁剪,请提高此值。","the padding":"填充","Set the number of pixels around a text object. If the shadow or the outline around the text are getting cropped, raise this value.":"设置文本对象周围的像素数。 如果文本周围的阴影或轮廓被裁剪,请提高此值。","Change the text alignment of a multiline text object.":"更改多行文本对象的对齐方式。","Align _PARAM0_: _PARAM1_":"对齐_PARAM0_:_PARAM1_","Compare the text alignment of a multiline text object.":"比较多行文本对象的文本对齐方式。","the alignment":"对齐方式","Word wrapping":"自动换行","De/activate word wrapping. Note that word wrapping is a graphical option,\nyou can't get the number of lines displayed":"取消/激活自动换行。注意,自动换行是一个图形选项,\n您不能获得显示的行数","Activate word wrapping of _PARAM0_: _PARAM1_":"启用 _PARAM0_ 的自动换行:_PARAM1_","Wrapping":"自动换行","Check if word wrapping is enabled.":"检查是否启用了自动换行功能。","_PARAM0_ word wrapping is enabled":"_PARAM0_ 文本换行已启用","Wrapping width":"自动换行宽度","Change the word wrapping width of a Text object.":"更改文本对象的换行宽度。","the wrapping width":"自动换行宽度","Compare the word wrapping width of a Text object.":"比较文本对象的换行宽度。","the font size of a text object":"文本对象的字体大小","the font size":"字体大小","the line height of a text object":"文本对象的行高","the line height":"行高","Modify the angle of a Text object.":"修改文字对象的角度。","the angle":"角度","Compare the value of the angle of a Text object.":"测试文本对象的角度值。","Angle to compare to (in degrees)":"与之比较的角度(度)","Compare the scale of the text on the X axis":"比较文本在 X 轴上的缩放比例","the scale on the X axis":"x 轴上的缩放比例","Scale to compare to (1 by default)":"要比较的比例(默认为1)","Modify the scale of the text on the X axis (default scale is 1)":"更改文字在 X 轴上的缩放比例(默认比例为 1)","Scale (1 by default)":"缩放 ( 默认1)","Compare the scale of the text on the Y axis":"比较文本在 Y 轴上的缩放比例","the scale on the Y axis":"y 轴上的缩放比例","Modify the scale of the text on the Y axis (default scale is 1)":"更改文字在 Y 轴上的缩放比例(默认比例为 1)","Modify the scale of the specified object (default scale is 1)":"更改特定对象的缩放比例(默认比例为 1)","X Scale of a Text object":"文字物件的X比例尺","Y Scale of a Text object":"文字物件的Y比例尺","Text opacity":"文本不透明度","Change the opacity of a Text. 0 is fully transparent, 255 is opaque (default).":"更改文本的不透明度。0是完全透明的, 255 是不透明的 (默认值)。","Opacity (0-255)":"不透明度 (0-255)","Compare the opacity of a Text object, between 0 (fully transparent) to 255 (opaque).":"比较对象的不透明度,0(完全透明)到 255(不透明)之间取值","Opacity to compare to (0-255)":"用来比较的透明度 (0-255)","Opacity of a Text object":"文本对象的不透明度","Modify the text":"修改文本","Modify the text of a Text object.":"修改文字对象的文本。","the text":"文本","Compare the text":"比较文字","Compare the text of a Text object.":"比较文字对象的文本。","Text to compare to":"要比较的文本","Texture":"纹理","Tiled Sprite Object":"瓦块精灵对象","Tiled Sprite":"瓦块精灵","Displays an image repeated over an area.":"显示在一个区域上重复的图像。","Compare the opacity of a Tiled Sprite, between 0 (fully transparent) to 255 (opaque).":"比较平铺精灵的不透明度,介于 0(完全透明)到 255(不透明)之间。","Change Tiled Sprite opacity":"更改平铺精灵的不透明度","Change the opacity of a Tiled Sprite. 0 is fully transparent, 255 is opaque (default).":"更改一个平铺精灵的不透明度, 0为完全透明, 255为不透明(默认值)。","Tint color":"主题颜色","Change the tint of a Tiled Sprite. The default color is white.":"更改平铺精灵的色调。默认颜色是白色。","Change tint of _PARAM0_ to _PARAM1_":"把 _PARAM0_ 的颜色更改为 _PARAM1_","Tint":"着色","Modify the width of a Tiled Sprite.":"修改平铺的精灵的宽度。","Test the width of a Tiled Sprite.":"修改平铺的精灵的宽度。","Modify the height of a Tiled Sprite.":"修改平铺 Sprite 的高度。","Test the height of a Tiled Sprite.":"测试Panel Sprite的高度。","Modify the size of a Tiled Sprite.":"修改瓷砖精灵的大小。","Change the size of _PARAM0_: set to _PARAM1_x_PARAM2_":"更改_PARAM0_的大小:设置为 _PARAM1_x_PARAM2_","Modify the angle of a Tiled Sprite.":"修改Panel Sprite的角度。","Image X Offset":"图像 X 偏移","Modify the offset used on the X axis when displaying the image.":"修改在 X 轴上显示图像时的偏移量。","the X offset":"X 偏移量","Image offset":"图像偏移","Test the offset used on the X axis when displaying the image.":"测试在 X 轴上显示图像时的偏移量。","Return the offset used on the X axis when displaying the image.":"返回显示图像时在 X 轴上使用的偏移量。","Image Y Offset":"图像 Y 偏移","Modify the offset used on the Y axis when displaying the image.":"修改在 Y 轴上显示图像时的偏移量。","the Y offset":"Y 偏移量","Test the offset used on the Y axis when displaying the image.":"测试在 Y 轴上显示图像时的偏移量。","Return the offset used on the Y axis when displaying the image.":"返回显示图像时在 Y 轴上使用的偏移量。","Change the image of a Tiled Sprite.":"更改平铺精灵的图像。","Set image _PARAM1_ on _PARAM0_":"在 _PARAM0_ 上设置图像 _PARAM1_","Allows diagonals":"允许对角线","Path smoothing":"路径平滑","Rotation speed":"旋转速度","Rotate object":"旋转对象","Angle offset":"角度偏移","Cell width":"单元格宽度","Virtual Grid":"虚拟网格","Cell height":"单元格高度","X offset":"X 偏移量","Y offset":"Y 偏移量","Extra border size":"额外边框大小","Smoothing max cell gap":"平滑最大单元间隙","It's recommended to leave a max gap of 1 cell. Setting it to 0 disable the smoothing.":"建议保留 1 个单元格的最大间隙。将其设置为 0 禁用平滑。","Impassable obstacle":"不可通行的障碍","Cost (if not impassable)":"损失(如果不可通行)","Pathfinding behavior":"寻路行为","Pathfinding":"寻路","Move objects to a target while avoiding all objects that are flagged as obstacles.":"将对象移动到目标,同时避开标记为障碍物的所有对象。","Move to a position":"移动到某个位置","Move the object to a position":"移动对象到某个位置","Move _PARAM0_ to _PARAM3_;_PARAM4_":"移动 _PARAM0_ 到 _PARAM3_;_PARAM4_","Movement on the path":"在路径上移动","Destination X position":"目的地X坐标","Destination Y position":"目的地Y坐标","Path found":"路径寻找","Check if a path has been found.":"检查是否找到路径。","A path has been found for _PARAM0_":"_PARAM0_ 找到了路径","Destination reached":"到达目的地","Check if the destination was reached.":"检查是否到达目的地。","_PARAM0_ reached its destination":"_ PARAM0 _reached 其目的地","Width of the cells":"单元格宽度","Change the width of the cells of the virtual grid.":"更改虚拟网格的单元格的宽度。","the width of the virtual cells":"虚拟单元格的宽度","Virtual grid":"虚拟网格","Width of the virtual grid":"虚拟网格的宽度","Compare the width of the cells of the virtual grid.":"比较虚拟网格单元格的宽度。","Height of the cells":"单元格高度","Change the height of the cells of the virtual grid.":"更改虚拟网格的单元格的高度。","the height of the virtual cells":"虚拟单元格的高度","Height of the virtual grid":"虚拟网格的高度","Compare the height of the cells of the virtual grid.":"比较虚拟网格的单元格的高度。","Change the acceleration when moving the object":"移动对象时更改加速","the acceleration on the path":"路径上的加速度","Pathfinding configuration":"路径定位配置","Compare the acceleration when moving the object":"在移动对象时比较加速度","the acceleration":"加速度","Maximum speed":"最大速度","Change the maximum speed when moving the object":"移动对象时更改最大速度","the max. speed on the path":"路径上的最大速度","Compare the maximum speed when moving the object":"比较移动对象时的最大速度","the max. speed":"最大速度","Speed":"速度","Change the speed of the object on the path":"更改路径上对象的速度","the speed on the path":"路径上的速度","Speed on its path":"路径上的速度","Compare the speed of the object on its path.":"比较物体在其路径上的速度。","the speed":"速度","Angle of movement on its path":"路径上的移动角度","Compare the angle of movement of an object on its path.":"比较物体在其路径上的运动角度。","Angle of movement of _PARAM0_ is _PARAM2_ ± _PARAM3_°":"_PARAM0_ 的移动角度为 _PARAM2_ ± _PARAM3_°","Angle, in degrees":"角度,以度为单位","Tolerance, in degrees":"公差(度)","Angular maximum speed":"角的最大速度","Change the maximum angular speed when moving the object":"移动对象时更改最大角速度","the max. angular speed on the path":"路径上的最大角速度","Max angular speed (in degrees per second)":"最大角速度(度/秒)","Compare the maximum angular speed when moving the object":"比较移动物体时的最大角速度","the max. angular speed":"最大角速度","Max angular speed to compare to (in degrees per second)":"与之比较的最大角速度(像素/秒)","Rotation offset":"旋转偏移量","Change the rotation offset applied when moving the object":"更改移动对象时应用的旋转偏移量。","the rotation offset on the path":"路径上的旋转偏移","Compare the rotation offset when moving the object":"比较移动物体时的旋转偏移量。","the rotation offset":"旋转偏移","Extra border":"额外边框","Change the size of the extra border applied to the object when planning a path":"在规划路径时更改应用于对象的额外边框的大小。","the size of the extra border on the path":"路径上额外边框的大小","Compare the size of the extra border applied to the object when planning a path":"在规划路径时比较应用于对象的额外边框的大小。","Diagonal movement":"对角移动","Allow or restrict diagonal movement on the path":"允许或限制路径上的对角线移动。","Allow diagonal movement for _PARAM0_ on the path: _PARAM2_":"允许路径上_PARAM0_的对角线移动:_PARAM2_","Allow?":"是否允许?","Check if the object is allowed to move diagonally on the path":"检查是否允许对象在路径上对角移动","Diagonal moves allowed for _PARAM0_":"允许 _ PARAM0 _ 的对角线移动","Rotate the object":"旋转对象","Enable or disable rotation of the object on the path":"启用或禁用路径上对象的旋转","Enable rotation of _PARAM0_ on the path: _PARAM2_":"启用 _ PARAM0 行动的旋转路径: _ PARAM2 _","Rotate object?":"旋转物体?","Object rotated":"对象被旋转","Check if the object is rotated when traveling on its path.":"检查物体在其路径上行驶时是否旋转。","_PARAM0_ is rotated when traveling on its path":"_ PARAM0 _is 在其路径上移动时旋转","Get a waypoint X position":"取一个路径点的X坐标","Get next waypoint X position":"取下一个路径点的X坐标","Node index (start at 0!)":"节点索引(0开始)","Get a waypoint Y position":"取一个路径点的Y坐标","Get next waypoint Y position":"取下一个路径点的Y坐标","Index of the next waypoint":"下一个路径点的索引","Get the index of the next waypoint to reach":"到下一个关键点指标达到","Waypoint count":"路径点计数","Get the number of waypoints on the path":"获取路径上的点数","Last waypoint X position":"最后航点 X 位置","Last waypoint Y position":"最后航点 Y 位置","Acceleration of the object on the path":"对象在路径上的加速度","Maximum speed of the object on the path":"路径上对象的最大速度","Speed of the object on the path":"对象在路径上的速度","Angular maximum speed of the object on the path":"物体在路径上的角度最大速度","Rotation offset applied the object on the path":"旋转偏移应用了路径上的对象","Extra border applied the object on the path":"额外的边框应用路径上的对象","Width of a cell":"单元的宽度","Height of a cell":"单元的高度","Grid X offset":"网格 X 偏移量","X offset of the virtual grid":"虚拟网格的X偏移量","Grid Y offset":"网格Y 偏移","Y offset of the virtual grid":"虚拟网格的Y偏移量","Obstacle for pathfinding":"寻路障碍","Flag objects as being obstacles for pathfinding.":"标记对象为路径障碍物。","Cost":"开销","Change the cost of going through the object.":"更改通过对象的成本。","the cost":"代价","Obstacles":"障碍","Compare the cost of going through the object":"比较通过对象的成本","Should object be impassable":"如果物体无法通过","Decide if the object is an impassable obstacle.":"判断该物体是否为无法通过的障碍物。","Set _PARAM0_ as an impassable obstacle: _PARAM2_":"将 _PARAM0_ 设置为无法通行的障碍: _PARAM2_","Impassable":"无法通过","Check if the obstacle is impassable.":"检查障碍物是否无法通过。","_PARAM0_ is impassable":"_PARAM0_ 是无法通行的","Obstacle cost":"障碍开销","Margins":"边距","Panel Sprite (9-patch) Object":"面板精灵 (\"9-块\") 对象","Panel Sprite (\"9-patch\")":"面板精灵 (\"9-块\")","An image with edges and corners that are stretched separately from the full image.":"边缘和角落分别与完整图像分开的图像。","Compare the opacity of a Panel Sprite, between 0 (fully transparent) to 255 (opaque).":"比较面板精灵的不透明度,介于0(完全透明)到255(不透明)之间。","Change Panel Sprite opacity":"更改面板精灵的不透明度","Change the opacity of a Panel Sprite. 0 is fully transparent, 255 is opaque (default).":"更改面板精灵的不透明度。 0是完全透明的,255是不透明的(默认)。","Panel Sprite":"面板精灵","Change the tint of a Panel Sprite. The default color is white.":"更改面板精灵的色调。默认颜色为白色。","Modify the width of a Panel Sprite.":"修改面板精灵的宽度。","Size and angle":"大小和角度","Check the width of a Panel Sprite.":"检查面板精灵的宽度。","Modify the height of a Panel Sprite.":"修改 Panel Sprite 的高度。","Check the height of a Panel Sprite.":"检查 Panel Sprite 的高度。","Image name (deprecated)":"图像名称 (已废弃)","Change the image of a Panel Sprite.":"更改面板精灵的图像。","Image name":"图像名称","Image file (or image resource name)":"图像文件 (或图像资源名称)","Allow diagonals":"允许对角线","Only use acceleration to turn back (deprecated — best left unchecked)":"仅使用加速来转变方向(已弃用 — 最好保持不选)","Top-Down":"自上而下","Isometry 2:1 (26.565°)":"等距 2:1 (26.565°)","True Isometry (30°)":"真实等距 (30°)","Custom Isometry":"自定义几何体","Custom isometry angle (between 1deg and 44deg)":"自定义等距角度(在1度和44度之间)","If you choose \"Custom Isometry\", this allows to specify the angle of your isometry projection.":"如果你选择“自定义等距”,这允许指定你的等距投影的角度","Movement angle offset":"移动角度偏移","Usually 0, unless you choose an *Isometry* viewpoint in which case -45 is recommended.":"通常为0,除非您选择一个 *Isometry* 视点,在这种情况下推荐-45","Top-down movement":"自上而下的运动","Allows to move an object in either 4 or 8 directions, with the keyboard (default), a virtual stick (for this, also add the \"Top-down multitouch controller mapper\" behavior and a\"Multitouch Joystick\" object), gamepad or manually using events.":"允许通过键盘(默认)、虚拟摇杆(为此,还需添加“自上而下多点触控控制器映射器”行为和“多点触控操纵杆”对象)、游戏手柄或使用事件手动在4或8个方向中移动对象。","Top-down movement (4 or 8 directions)":"自上而下的运动(4或8个方向)","Move objects left, up, right, and down (and, optionally, diagonally).":"向左、向上、向右和向下移动对象(还可以选择对角线方向)。","Simulate a press of left key.":"模拟左键的按下。","Top-down controls":"自上而下的控制","Simulate a press of right key.":"模拟右键的按下。","Simulate a press of up key.":"模拟上键的按下。","Simulate a press of down key.":"模拟按下键模拟。","Simulate a press of a key.\nValid keys are Left, Right, Up, Down.":"模拟按下一个键。\n有效按键为左,右,上,下。","Simulate stick control":"模拟摇杆控制","Simulate a stick control.":"模拟摇杆控制。","Simulate a stick control for _PARAM0_ with a _PARAM2_ angle and a _PARAM3_ force":"以 _PARAM2_ 的角度和 _PARAM3_ 的力度模拟 _PARAM0_ 的摇杆控制","Stick angle (in degrees)":"摇杆角度(以度为单位)","In top-down movement, a stick angle of 0° moves the object to the right. 90° moves it down, and -90° moves it up.":"在自上而下的移动中,摇杆角度为0°时,物体向右移动。90°时向下移动,-90°时向上移动。","Stick force (between 0 and 1)":"摇杆力度(介于0和1之间)","Top-down state":"自上而下的状态","Stick angle":"置顶角度","Return the angle of the simulated stick input (in degrees)":"返回模拟杆输入的角度(以度为单位)","Check if the object is moving.":"检测对象是否正在移动","Change the acceleration of the object":"变更对象的加速度","Top-down configuration":"自上而下的配置","Compare the acceleration of the object":"比较对象的加速度","Change the deceleration of the object":"改变对象的减速度","the deceleration":"减速","Compare the deceleration of the object":"比较对象的加速度","Change the maximum speed of the object":"改变物体的最大角速度","Compare the maximum speed of the object":"比较对象的最大速度","Compare the speed of the object":"比较对象的速度","Change the maximum angular speed of the object":"改变物体的最大角速度","Compare the maximum angular speed of the object":"比较对象的最大速度","Compare the rotation offset applied when moving the object":"更改移动对象时应用的旋转偏移量。","Angle of movement":"运动的角度","Compare the angle of the top-down movement of the object.":"比较对象自上而下移动的角度。","the angle of movement":"移动角度","Tolerance (in degrees)":"公差(度)","Speed on X axis":"X轴速度","Compare the velocity of the top-down movement of the object on the X axis.":"比较对象在X轴上自上而下移动的速度。","the speed of movement on X axis":"X轴上的移动速度","Speed on the X axis":"X轴速度","Change the speed on the X axis of the movement":"更改移动的 X 轴上的速度","the speed on the X axis of the movement":"移动的 X 轴上的速度","Speed on Y axis":"Y轴速度","Compare the velocity of the top-down movement of the object on the Y axis.":"比较对象在 Y 轴上自上而下移动的速度。","the speed of movement on Y axis":"Y 轴上的移动速度","Speed on the Y axis":"Y轴速度","Change the speed on the Y axis of the movement":"更改移动的 Y 轴上的速度","the speed on the Y axis of the movement":"移动的 Y 轴速度","Allow or restrict diagonal movement":"允许或限制对角线移动","Allow diagonal moves for _PARAM0_: _PARAM2_":"对于 _PARAM0_允许非轴向移动: _PARAM2_","Check if the object is allowed to move diagonally":"检查对象是否被允许沿对角线移动","Allow diagonal moves for _PARAM0_":"允许 _PARAM0_ 的非轴向移动","Enable or disable rotation of the object":"启用或禁用路径上对象的旋转","Enable rotation of _PARAM0_: _PARAM2_":"允许_PARAM0_旋转: _PARAM2_","Check if the object is rotated while traveling on its path.":"检查物体在其路径上行驶时是否旋转。","_PARAM0_ is rotated when moving":"_PARAM0_在移动中被旋转","Acceleration of the object":"物体加速度","Deceleration of the object":"对象的减速","Maximum speed of the object":"对象的最大速度","Speed of the object":"物体的速度","Angular maximum speed of the object":"物体的角度最大速度","Rotation offset applied to the object":"旋转偏移应用于对象","Angle of the movement":"移动角度","Angle, in degrees, of the movement":"移动角度,程度","Speed on the X axis of the movement":"移动X轴速度","Speed on the Y axis of the movement":"移动Y轴速度","the movement angle offset":"移动角度偏移","Inventories":"背包","Actions and conditions to store named inventories in memory, with items (indexed by their name), a count for each of them, a maximum count and an equipped state. Can be loaded/saved from/to a GDevelop variable.":"用于将命名的库存存储在内存中的操作和条件,库存中的每个物品(按名称索引),每个物品的计数,最大计数和装备状态。可以从GDevelop变量加载/保存。","Add an item":"添加物品","Add an item in an inventory.":"在背包中增加一个物品","Add a _PARAM2_ to inventory _PARAM1_":"向背包 _PARAM1_中添加一个 _PARAM2_","Inventory name":"背包名","Item name":"物品名","Remove an item":"移除一个物品","Remove an item from an inventory.":"从一个背包中移除一个物品","Remove a _PARAM2_ from inventory _PARAM1_":"从背包_PARAM1_中移除一个_PARAM2_","Item count":"物品计数","Compare the number of an item in an inventory.":"比较一个物品在一个背包中的编号","the count of _PARAM2_ in _PARAM1_":"_PARAM1_ 中 _PARAM2_ 的个数","Has an item":"有一个物品","Check if at least one of the specified items is in the inventory.":"检查在背包中是否含有至少一个指定物品","Inventory _PARAM1_ contains a _PARAM2_":"背包_PARAM1_中包含一个_PARAM2_","Set a maximum count for an item":"设置一个物品的最大数量","Set the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"设置一个背包中能够一个物品添加指定物品的最大数量。在默认情况下,每个物品的上限数量是无限的。","Set the maximum count for _PARAM2_ in inventory _PARAM1_ to _PARAM3_":"将在背包_PARAM1_中_PARAM2_的最大数量设置成_PARAM3_","Maximum count":"最大数量","Set unlimited count for an item":"将一个物品的最大数量设置成无限多","Allow an unlimited amount of an object to be in an inventory. This is the case by default for each item.":"允许背包中存在最大数量为无限多的一个物品(物品最大数量的默认设置是为无限多)。","Allow an unlimited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"将背包_PARAM1_中_PARAM2_的最大数量设置为无限:_PARAM3_","Allow an unlimited amount?":"允许不限数量?","Item full":"物品已满","Check if an item has reached its maximum number allowed in the inventory.":"检查物料是否已达到库存中允许的最大数量。","Inventory _PARAM1_ is full of _PARAM2_":"背包 _PARAM1_ is full of _PARAM2_","Equip an item":"装备一个物品","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"将项目标记为正在装备。 如果项目数为0,则不会被标记为装备。","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"将库存 _PARAM1_ 中的装备 _PARAM2_ 设置为已装备: _PARAM3_","Equip?":"装备吗?","Item equipped":"装备的物品","Check if an item is equipped.":"检查是否装备了物品","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM2_在背包_PARAM1_中被装备","Save an inventory in a scene variable":"在场景变量中保存库存","Save all the items of the inventory in a scene variable, so that it can be restored later.":"将库存的所有项目保存在场景变量中,以便之后可以还原。","Save inventory _PARAM1_ in variable _PARAM2_":"将库存_PARAM1_保存在变量_PARAM2_中","Load an inventory from a scene variable":"从场景变量加载库存","Load the content of the inventory from a scene variable.":"从场景变量加载库存中的内容。","Load inventory _PARAM1_ from variable _PARAM2_":"从_PARAM2_中读取背包_PARAM1_","Get the number of an item in the inventory":"获取一个物品在此背包中的编号","Item maximum":"项目最大值","Get the maximum of an item in the inventory, or 0 if it is unlimited":"获取库存中物品的最大值,如果是无限的,则为0","Spine json":"Spine json","Skin":"皮肤","System information":"系统信息","Conditions to check if the device has a touchscreen, is a mobile, or if the game runs as a preview.":"检查设备是否具有触摸屏、是否为移动设备或游戏是否以预览模式运行的条件。","Is a mobile device":"是一个移动设备","Check if the device running the game is a mobile device (phone or tablet on iOS, Android or other mobile devices). The game itself might be a web game or distributed as a native mobile app (to check this precisely, use other conditions).":"检查运行游戏的设备是否是移动设备(iOS、 Android 或其他移动设备上的手机或平板电脑)。游戏本身可能是一个网络游戏,或者作为本地移动应用程序发布(为了精确地检查这一点,使用其他条件)。","The device is a mobile device":"该设备是一个移动设备","Is a native mobile app":"是一个本地的移动应用程序","Check if the game is running as a native mobile app (iOS or Android app).":"检查游戏是否作为本地移动应用程序(iOS 或 Android 应用程序)运行。","The game is running as a native mobile app":"这个游戏是作为本地移动应用程序运行的","Is a native desktop app":"是一个本地桌面应用程序","Check if the game is running as a native desktop app.":"检查游戏是否作为本地桌面应用程序运行。","The game is running as a native desktop app":"这个游戏是作为一个本地桌面应用程序运行的","Is WebGL supported":"是否支持 WebGL","Check if GPU accelerated WebGL is supported on the target device.":"检查目标设备上是否支持 GPU 加速的 WebGL。","WebGL is available":"WebGL 可用","Is the game running as a preview":"游戏作为预览运行","Check if the game is currently being previewed in the editor. This can be used to enable a \"Debug mode\" or do some work only in previews.":"检查当前是否正在编辑器中预览游戏。这可用于启用“调试模式”或仅在预览中执行某些工作。","The game is being previewed in the editor":"游戏正在编辑器中预览","Device has a touchscreen":"设备有触摸屏幕","Check if the device running the game has a touchscreen (typically Android phones, iPhones, iPads, but also some laptops).":"检查运行游戏的设备是否有触摸屏(典型的安卓手机、 iPhone、 iPads 以及一些笔记本电脑)。","The device has a touchscreen":"设备有触摸屏幕","Box (rectangle)":"框框 (矩形)","Custom polygon":"自定义多边形","Shape":"形状","Dynamic object":"静态对象","Fixed rotation":"固定旋转","Consider as bullet (better collision handling)":"考虑作为子弹 (更好的碰撞处理)","Mass density":"质量密度","Friction":"摩擦","Restitution (elasticity)":"恢复原状 (弹性):","Linear Damping":"线性阻尼","Angular Damping":"角阻尼","Gravity on X axis (in m/s²)":"X 轴上的重力(m/s平方)","Gravity on Y axis (in m/s²)":"Y 轴上的重力(m/s平方)","X Scale: number of pixels for 1 meter":"X 缩放:1米像素数","Y Scale: number of pixels for 1 meter":"Y 缩放:1米像素数","X scale: number of pixels for 1 meter":"Y 缩放:1米像素数","Y scale: number of pixels for 1 meter":"Y 缩放:1米像素数","Deletion margin":"删除边距","Margin before deleting the object, in pixels.":"删除对象之前的边距,以像素为单位。","Unseen object grace distance":"未见对象的宽限距离","If the object hasn't been visible yet, don't delete it until it travels this far beyond the screen (in pixels). Useful to avoid objects being deleted before they are visible when they spawn.":"如果对象尚未可见,请在它超出屏幕这个距离(以像素为单位)之前不要删除它。 这对于避免在对象生成时被删除的是很有用的。","Destroy Outside Screen Behavior":"屏幕外销毁的行为","This behavior can be used to destroy objects when they go outside of the bounds of the 2D camera. Useful for 2D bullets or other short-lived objects. Don't use it for 3D objects in a FPS/TPS game or any game with a camera not being a top view (for 3D objects, prefer comparing the position, for example Z position to see if an object goes outside of the bound of the map). If the object appears outside of the screen, it's not removed unless it goes beyond the unseen object grace distance.":"此行为可用于在对象超出 2D 相机边界时删除对象。 对于 2D 子弹或其他短暂存在的对象很有用。 不要在 FPS/TPS 游戏或任何不是俯视图的游戏中使用它用于 3D 对象(对于 3D 对象,建议比较位置,例如 Z 轴位置,以查看对象是否超出地图边界)。 如果对象出现在屏幕外,则除非它超出未见对象的宽限距离,否则不会被移除。","Destroy when outside of the screen":"在屏幕外面消失","DestroyOutside":"出界删除","Destroy objects automatically when they go outside of the 2D camera borders.":"当对象超出2D相机边界时自动销毁对象。","Additional border (extra distance before deletion)":"额外边界(删除前的额外距离)","the extra distance (in pixels) the object must travel beyond the screen before it gets deleted":"物体必须超出屏幕删除前必须移动的额外距离(以像素为单位)","the additional border":"附加边框","Destroy outside configuration":"销毁外部配置","the grace distance (in pixels) before deleting the object if it has never been visible on the screen. Useful to avoid objects being deleted before they are visible when they spawn":"如果物体从未在屏幕上可见,则在删除该物体之前的宽限距离(以像素为单位)。有助于避免物体在生成时被删除之前不可见","the unseen grace distance":"未见的宽限距离","relativeToOriginalWindowSize":"相对原始窗口大小","Anchor relatively to original window size":"相对于原始窗口大小的锚点","otherwise, objects are anchored according to the window size when the object is created.":"否则,对象将根据对象创建时的窗口大小来固定。","No anchor":"无锚点","Window left":"窗口左侧","Window center":"窗口中心","Window right":"窗口右侧","Proportional":"比例","Left edge":"左边缘","Anchor the left edge of the object on X axis.":"将物体的左边缘固定在X轴上。","Right edge":"右边缘","Anchor the right edge of the object on X axis.":"将物体的右边缘固定在X轴上。","Window top":"窗口顶部","Window bottom":"窗口底部","Top edge":"顶部边缘","Anchor the top edge of the object on Y axis.":"将物体的顶部边缘固定在Y轴上。","Bottom edge":"底部边缘","Anchor the bottom edge of the object on Y axis.":"将物体的底部边缘固定在Y轴上。","Stretch object when anchoring right or bottom edge (deprecated, it's recommended to leave this unchecked and anchor both sides if you want Sprite to stretch instead.)":"锚定右侧或底部边缘时拉伸对象(已弃用,如果您希望 Sprite 拉伸,建议不要选中此选项并锚定两侧。)","Anchor":"锚点","Anchor objects to the window's bounds.":"将对象锚定到窗口的边界。","Shopify":"商店","Interact with products and generate URLs for checkouts with your Shopify shop.":"与产品互动,生成 URL,以便与您的购物店进行校验。","Initialize a shop":"初始化商店","Initialize a shop with your credentials. Call this action first, and then use the shop name in the other actions to interact with products.":"初始化一个店铺,并拥有您的证书。先调用此操作,然后在其他行动中使用商店名称来与产品互动。","Initialize shop _PARAM1_ (domain: _PARAM2_, appId: _PARAM3_)":"初始化商店_PARAM1_ (域名: _PARAM2_, appId: _PARAM3_)","Shop name":"商店名称","Domain (xxx.myshopify.com)":"域名 (xx.myShopify.com)","App Id":"应用ID","Access Token":"访问令牌","Get the URL for buying a product":"获取购买产品的 URL","Get the URL for buying a product from a shop. The URL will be stored in the scene variable that you specify. You can then use the action to open an URL to redirect the player to the checkout.":"从商店购买产品的 URL。URL 将被存储在你指定的变量中。您可以使用操作打开 URL 来重定向玩家到结帐界面","Get the URL for product #_PARAM2_ (quantity: _PARAM3_, variant: _PARAM4_) from shop _PARAM1_, and store it in _PARAM5_ (or _PARAM6_ in case of error)":"从商店_PARAM1__ 获取产品 #_PARAM2_ (数量: _PARAM3_, 变量: _PARAM4_) 的 URL,并将错误储存在 _PARAM5_ (或 _PARAM6_ 中)","Shop name (initialized with \"Initialize a shop\" action)":"商店名称 (初始化 \"初始化商店\" 操作)","Product id":"产品ID","Quantity":"数量","Variant (0 by default)":"变量(0为默认)","Scene variable where the URL for checkout must be stored":"必须存储要检查的 URL 变量","Scene variable containing the error (if any)":"储存错误的变量(有的话)","Emission minimal force":"最少排放力","Modify minimal emission force of particles.":"修改粒子最小排放力。","the minimal emission force":"最小发射力度","Common":"一般","Emission maximal force":"最大排放力","Modify maximal emission force of particles.":"修改粒子最大排放力。","the maximal emission force":"最大发射力度","Emission angle":"发射角度","Modify emission angle.":"修改发射角度。","the emission angle":"发射角度","Test the value of emission angle of the emitter.":"测试发射器发射角度的值。","Emission angle 1":"发射角度1","Change emission angle #1":"改变发射角度 #1","the 1st emission angle":"第一个发射角度","Test the value of emission 1st angle of the emitter":"测试发射器发射第一角度的值","Emission angle 2":"发射角度2","Change emission angle #2":"改变发射角度 #2","the 2nd emission angle":"第二个发射角度","Test the emission angle #2 of the emitter.":"测试发射器的发射#2角度#2。","Angle of the spray cone":"锥形喷射角角度","Modify the angle of the spray cone.":"修改锥形喷射角的角度","the angle of the spray cone":"喷雾圆锥的角度","Test the angle of the spray cone of the emitter":"测试发射器的锥形喷射角角度","Creation radius":"创建半径","Modify creation radius of particles.\nParticles have to be recreated in order to take changes in account.":"修改粒子的创建半径。\n为了更改帐户,必须重新创建粒子。","the creation radius":"创建半径","Test creation radius of particles.":"粒子的测试生成半径。","Minimum lifetime":"最短生存期","Modify particles minimum lifetime. Particles have to be recreated in order to take changes in account.":"修改粒子的最小寿命。粒子必须重新创建,以便考虑到变化。","the minimum lifetime of particles":"粒子最短生存期","Test minimum lifetime of particles.":"测试粒子的最小寿命。","Maximum lifetime":"最大生存期","Modify particles maximum lifetime.\nParticles have to be recreated in order to take changes in account.":"修改粒子的最大寿命。\n粒子必须重建以账户变动。","the maximum lifetime of particles":"粒子最长生存期","Test maximum lifetime of particles.":"测试粒子的最大寿命。","Gravity value on X axis":"X轴重力","Change value of the gravity on X axis.":"X 轴上的重力变化值。","the gravity on X axis":"x轴重力","Compare value of the gravity on X axis.":"比较X轴重力的值。","Gravity value on Y axis":"Y 轴重力值","Change value of the gravity on Y axis.":"修改Y轴上的重力方向","the gravity on Y axis":"y轴重力","Compare value of the gravity on Y axis.":"比较Y轴重力的值。","Gravity angle":"重力角度","Change gravity angle":"更改重力角度","the gravity angle":"重力角度","Test the gravity angle of the emitter":"测试重力角度的发射器","Change the gravity of the emitter.":"修改重力角发射器","Test the gravity of the emitter.":"测试发射器的重力","Start emission":"开始发送","Refill tank (if not infinite) and start emission of the particles.":"重新填充罐(如果不是无限)并开始发射粒子。","Start emission of _PARAM0_":"开始发射 _PARAM0_","Stop emission":"停止发射","Stop the emission of particles.":"停止发射粒子。","Stop emission of _PARAM0_":"停止发射 _PARAM0_","Start color":"起始颜色","Modify start color of particles.":"修改粒子的起始颜色。","Change particles start color of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的粒子开始颜色更改为 _PARAM1_","End color":"结束颜色","Modify end color of particles.":"修改粒子的结束颜色。","Change particles end color of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的粒子结束颜色更改为 _PARAM1_","Start color red component":"开始颜色红色组件","Modify the start color red component.":"修改开始颜色红色组件。","the start color red component":"开始颜色为红色组件","Value (0-255)":"值 (0-255)","Compare the start color red component.":"比较开始颜色红色组件。","Value to compare to (0-255)":"要比较的值 (0-255)","End color red component":"结束红色组件","Modify the end color red component.":"修改结束的红色组件。","the end color red component":"结束颜色为红色","Compare the end color red component.":"比较结束的红色组件。","Start color blue component":"开始颜色蓝色组件","Modify the start color blue component.":"修改开始颜色为蓝色的组件。","the start color blue component":"开始颜色为蓝色组件","Compare the start color blue component.":"比较开始颜色蓝色组件。","End color blue component":"结束颜色蓝色组件","Modify the end color blue component.":"修改结束颜色蓝色组件。","the end color blue component":"结束颜色为蓝色","Compare the end color blue component.":"比较结束颜色蓝色组件。","Start color green component":"开始颜色绿色组件","Modify the start color green component.":"修改开始颜色绿色组件。","the start color green component":"开始颜色为绿色","Compare the start color green component.":"比较开始颜色绿色组件。","End color green component":"结束颜色绿色组件","Modify the end color green component.":"修改结束颜色绿色组件。","the end color green component":"结束颜色为绿色","Compare the end color green component.":"比较结束颜色绿色组件。","Start size":"起始大小","Modify the particle start size.":"修改粒子起始大小。","the start size":"起始大小","Compare the particle start size.":"比较粒子起始大小。","End size":"结束大小","Modify the particle end size.":"修改粒子结束大小。","the end size":"结束大小","Compare the particle end size.":"比较粒子结束大小。","Start opacity":"开始不透明度","Modify the start opacity of particles.":"修改粒子的起始不透明度。","the start opacity":"起始不透明度","Compare the start opacity of particles.":"比较粒子的起始不透明度。","End opacity":"结束不透明度","Modify the end opacity of particles.":"修改粒子的结束不透明度。","the end opacity":"结束不透明度","Compare the end opacity of particles.":"比较粒子的结束不透明度。","No more particles":"没有更多的的粒子","Check if the object does not emit particles any longer, so as to destroy it for example.":"检查对象是否不再释放粒子,以便摧毁它。","_PARAM0_ does not emit any longer":"_PARAM0_ 不再发布","Particle rotation min speed":"粒子旋转最小速度","the minimum rotation speed of the particles":"粒子的最小旋转速度","the particles minimum rotation speed":"粒子最小旋转速度","Angular speed (in degrees per second)":"角速度 ( 以度为单位每秒 )","Particle rotation max speed":"粒子旋转最大速度","the maximum rotation speed of the particles":"粒子的最大旋转速度","the particles maximum rotation speed":"粒子最大旋转速度","Number of displayed particles":"显示的粒子数量","the maximum number of displayed particles":"显示粒子的最大数量","Activate particles additive rendering":"激活粒子附加渲染","the particles additive rendering is activated":"粒子附加渲染被激活","displaying particles with additive rendering activated":"显示激活附加渲染的粒子","Recreate particles":"重新创建粒子","Destroy and recreate particles, so as to take changes made to setup of the emitter in account.":"销毁和重新创建粒子,以便对发射器的设置进行更改。","Recreate particles of _PARAM0_":"重新创建_PARAM0_的粒子","Setup":"设置","Rendering first parameter":"绘制第一个参数","Modify first parameter of rendering (Size/Length).\nParticles have to be recreated in order to take changes in account.":"修改渲染的第一个参数(大小/长度)。必须重新创建 nparticles以进行更改。","the rendering 1st parameter":"渲染第一个参数","Test the first parameter of rendering (Size/Length).":"测试渲染的第一个参数(大小/长度)。","the 1st rendering parameter":"第一个渲染参数","Rendering second parameter":"呈现第二个参数","Modify the second parameter of rendering (Size/Length).\nParticles have to be recreated in order to take changes in account.":"修改渲染的第二个参数(大小/长度)。必须重新创建 n 粒子以进行更改。","the rendering 2nd parameter":"渲染第二个参数","Test the second parameter of rendering (Size/Length).":"测试渲染的第二个参数(大小/长度)。","the 2nd rendering parameter":"第二个渲染参数","Capacity":"容量","Change the capacity of the emitter.":"改变发射器的容量。","the capacity":"容量","Test the capacity of the emitter.":"测试发射器的重力","Capacity to compare to":"容量比较","Flow":"流量","Change the flow of the emitter.":"改变发射器的流量。","the flow":"流","Flow (in particles per second)":"流量(每秒粒子数)","Test the flow of the emitter.":"测试发射器的流量。","Flow to compare to (in particles per second)":"要比较的流量(以每秒粒子数为单位)","Particle image (deprecated)":"粒子图像 (已废弃)","Change the image of particles (if displayed).":"更改粒子图像(如果显示)。","Change the image of particles of _PARAM0_ to _PARAM1_":"_PARAM0_ 的粒子图像更改为 _PARAM1_","Image to use":"要使用的图像","Particle image":"粒子图像","Test the name of the image displayed by particles.":"检查粒子所显示的图像的名称。","the image displayed by particles":"粒子显示的图像","Particles image":"粒子图像","Name of the image displayed by particles.":"粒子显示的图像名称。","Particles":"颗粒","Particles number":"粒子数","Particles count":"粒子计数","Number of particles currently displayed.":"当前显示的粒子数量。","Capacity of the particle tank.":"粒子箱的容量。","Flow of the particles (particles/second).":"粒子流(粒子/秒)。","The minimal emission force of the particles.":"微粒的最小发射力。","The maximal emission force of the particles.":"粒子的最大发射力。","Emission angle of the particles.":"粒子的发射角度。","Emission angle A":"发射角A","Emission angle B":"发射角B","Radius of emission zone":"发射区半径","The radius of the emission zone.":"发射区半径。","X gravity":"X 重力","Gravity of particles applied on X-axis.":"X轴上应用的粒子重力","Y gravity":"Y 重力","Gravity of particles applied on Y-axis.":"应用在Y轴上的粒子重力","Angle of gravity.":"重力角度。","Value of gravity.":"重力值。","Minimum lifetime of particles":"粒子最短生存期","Minimum lifetime of the particles.":"粒子的最小寿命。","Maximum lifetime of particles":"粒子最长生存期","Maximum lifetime of the particles.":"粒子的最大寿命。","The start color red component of the particles.":"粒子的开始颜色为红色。","The end color red component of the particles.":"粒子的结束颜色为红色。","The start color blue component of the particles.":"粒子的开始颜色为蓝色。","The end color blue component of the particles.":"粒子的结束颜色为蓝色。","The start color green component of the particles.":"粒子的开始颜色为绿色。","The end color green component of the particles.":"粒子的结束颜色为绿色。","Start opacity of the particles.":"开始粒子的不透明度。","End opacity of the particles.":"结束粒子的不透明度。","Start size of particles.":"开始粒子的大小。","End size of particles.":"粒子的最终大小。","Jump emitter forward in time":"及时向前跳跃发射器","Simulate the passage of time for an emitter, including creating and moving particles":"模拟发射器的时间流逝,包括创建和移动粒子","Jump _PARAM0_ forward in time by _PARAM1_ seconds":"将 _PARAM0_ 时间向前跳转 _PARAM1_ 秒","Seconds of time":"秒的时间","Particle system":"粒子系统","2D particles emitter":"2D 粒子发射器","2D effects like smoke, fire or sparks.":"像烟、火或火花的二维特效。","Particles size":"粒子大小","Start size (in percents)":"起始大小(百分比)","End size (in percents)":"结束大小(百分比)","Particles color":"粒子颜色","Particles flow":"粒子流动","Max particles count":"最大粒子数","Tank":"坦克","Particles flow (particles/seconds)":"粒子流动 (粒子/秒)","Emitter force min":"最小发射力","Particles movement":"粒子运动","Emitter force max":"最大发射力","Minimum rotation speed":"最小旋转速度","Maximum rotation speed":"最大旋转速度","Cone spray angle":"锥形喷射角度","Emitter radius":"发射器半径","Gravity X":"水平力","Particles gravity":"粒子重力","Gravity Y":"Y轴力","Particles life time":"粒子生命时间","Jump forward in time on creation":"在创造时向前跳跃","Reduce initial dimensions to keep aspect ratio":"减小初始尺寸以保持宽高比","Rotation around X axis":"绕 X 轴旋转","Default rotation":"默认旋转","Rotation around Y axis":"绕 Y 轴旋转","Rotation around Z axis":"绕 Z 轴旋转","Basic (no lighting, no shadows)":"基础(无光照,无阴影)","Standard (without metalness)":"标准(无金属感)","Keep original":"保持原样","Material":"材质","Lighting":"灯光","Model origin":"模型原点","Top left":"左上角","Object center":"对象中心","Bottom center (Z)":"底部中心 (Z)","Bottom center (Y)":"底部中心 (Y)","Origin point":"原点","Centered on Z only":"仅在 Z 上居中","Center point":"中心点","Crossfade duration":"交叉淡入淡出持续时间","Shadow casting":"阴影投射","Shadow receiving":"阴影接收","Fill opacity":"填充不透明度","Outline opacity":"外框不透明度","Outline size":"外框尺寸","Use absolute coordinates":"使用绝对坐标","Drawing":"绘制","Clear drawing at each frame":"清除每一帧的绘图","When activated, clear the previous render at each frame. Otherwise, shapes are staying on the screen until you clear manually the object in events.":"激活后,清除每一帧的上一次渲染。否则,形状会一直留在屏幕上,直到您手动清除事件中的对象。","Antialiasing":"抗锯齿","Antialiasing mode":"抗锯齿模式","Shape painter":"形状绘画","An object that can be used to draw arbitrary 2D shapes on the screen using events.":"这个对象可以用于使用事件在屏幕上绘制任意的2D形状。","Draw basic 2D shapes using events.":"使用事件绘制基本的 2D 图形。","Rectangle":"矩形","Draw a rectangle on screen":"在屏幕上绘制矩形","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a rectangle with _PARAM0_":"从_PARAM1_; _PARAM2_到_PARAM3_; _ Param4_用_PARAM0_绘制一个矩形","Shape Painter object":"形状绘画对象","Left X position":"左 X 位置","Top Y position":"顶部 Y 位置","Right X position":"右 X 位置","Bottom Y position":"底部 Y 位置","Draw a circle on screen":"在屏幕上绘制一个圆","Draw at _PARAM1_;_PARAM2_ a circle of radius _PARAM3_ with _PARAM0_":"在_PARAM1_; _PARAM2_绘制一个半径为_PARAM3_的圆,并带有_PARAM0_","X position of center":"中心X坐标","Y position of center":"中心Y坐标","Radius (in pixels)":"半径(像素)","X position of start point":"起始点的X坐标","Y position of start point":"起始点的Y坐标","X position of end point":"结束点的X坐标","Y position of end point":"结束点的Y坐标","Thickness (in pixels)":"粗细(像素)","Draw a line on screen":"在屏幕上绘制一行","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a line (thickness: _PARAM5_) with _PARAM0_":"从 _PARAM1_; _PARAM2_ 到 _PARAM3_; _PARAM4_ 用 _PARAM0_ 绘制一条线(厚度为: _PARAM5_)","Ellipse":"椭圆","Draw an ellipse on screen":"在屏幕上画一个椭圆","Draw at _PARAM1_;_PARAM2_ an ellipse of width _PARAM3_ and height _PARAM4_ with _PARAM0_":"在_PARAM1_;_PARAM2_ 处用 _PARAM0_ 以宽度_PARAM3_ 和高度 _PARAM4_ 画一个椭圆","The width of the ellipse":"椭圆的宽度","The height of the ellipse":"椭圆的高度","Fillet Rectangle":"圆角矩形","Draw a fillet rectangle on screen":"在屏幕上绘制圆角矩形","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a fillet rectangle (fillet: _PARAM5_)with _PARAM0_":"使用 _PARAM0_ 从 _PARAM1_; _PARAM2_ 到 _PARAM3_; _PARAM4_ 绘制一个圆角矩形 (圆角:_PARAM5_)","Fillet (in pixels)":"圆角 (以像素为单位)","Rounded rectangle":"圆角矩形","Draw a rounded rectangle on screen":"在屏幕上画一个圆角矩形","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a rounded rectangle (radius: _PARAM5_) with _PARAM0_":"从 _PARAM1_;_PARAM2_ 到 _PARAM3_;_PARAM4_ 用 _PARAM0_ 画一个圆角矩形(半径为: _PARAM5_)","Chamfer Rectangle":"倒角矩形","Draw a chamfer rectangle on screen":"在屏幕上绘制一个倒角矩形","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a chamfer rectangle (chamfer: _PARAM5_) with _PARAM0_":"使用 _PARAM0_ 从 _PARAM1_;_PARAM2_ 到 _PARAM3_;_PARAM4_ 绘制一个倒角矩形 (倒角:_PARAM5_)","Chamfer (in pixels)":"倒角 (以像素为单位)","Torus":"圆环","Draw a torus on screen":"在屏幕上绘制一个圆环","Draw at _PARAM1_;_PARAM2_ a torus with inner radius: _PARAM3_, outer radius: _PARAM4_ and with start arc angle: _PARAM5_°, end angle: _PARAM6_° with _PARAM0_":"在 _PARAM1_;_PARAM2_ 处绘制一个圆环,其内半径:_PARAM3_,外半径:_PARAM4_,起始圆弧角度:_PARAM5_°,结束角度:_PARAM6_°,带 _PARAM0_","Inner Radius (in pixels)":"内半径 (以像素为单位)","Outer Radius (in pixels)":"外半径 (以像素为单位)","Start Arc (in degrees)":"起始圆弧 (以度为单位)","End Arc (in degrees)":"结束圆弧 (以度为单位)","Regular Polygon":"正多边形","Draw a regular polygon on screen":"在屏幕上绘制一个正多边形","Draw at _PARAM1_;_PARAM2_ a regular polygon with _PARAM3_ sides and radius: _PARAM4_ (rotation: _PARAM5_) with _PARAM0_":"在 _PARAM1_;_PARAM2_ 处绘制一个正多边形,其边长为 _PARAM3_,半径为:_PARAM4_ (旋转:_PARAM5_),并带有_PARAM0_","Number of sides of the polygon (minimum: 3)":"多边形的边数(最小: 3)","Rotation (in degrees)":"旋转(角度)","Star":"星形","Draw a star on screen":"在屏幕上画一个星形","Draw at _PARAM1_;_PARAM2_ a star with _PARAM3_ points and radius: _PARAM4_ (inner radius: _PARAM5_, rotation: _PARAM6_) with _PARAM0_":"在_PARAM1_;_PARAM2_ 处用 _PARAM0_ 画一个星型,有 _PARAM3_ 个点,半径为 _PARAM4_ (内部半径为: _PARAM5_, 旋转为: _PARAM6_)","Number of points of the star (minimum: 2)":"星形的顶点数量(最小为2)","Inner radius (in pixels, half radius by default)":"内部半径(以像素为单位,默认为半径的一半)","Arc":"弧","Draw an arc on screen. If \"Close path\" is set to yes, a line will be drawn between the start and end point of the arc, closing the shape.":"在屏幕上画一条弧。如果“选择路径”设为是,那么弧的起点和终点间将会画一条线,形成一个闭合图形。","Draw at _PARAM1_;_PARAM2_ an arc with radius: _PARAM3_, start angle: _PARAM4_, end angle: _PARAM5_ (anticlockwise: _PARAM6_, close path: _PARAM7_) with _PARAM0_":"在 _PARAM1_;_PARAM2_ 处用 _PARAM0_ 绘制一个半径为 _PARAM3_ 的弧, 起始角度为: _PARAM4_, 结束角度为: _PARAM5_ (逆时针为: _PARAM6_, 闭合路径为: _PARAM7_)","Start angle of the arc (in degrees)":"弧的起始角度(角度)","End angle of the arc (in degrees)":"弧的终止角度(角度)","Anticlockwise":"逆时针","Close path":"闭合路径","Bezier curve":"贝塞尔曲线","Draw a bezier curve on screen":"在屏幕上绘制贝塞尔曲线","Draw from _PARAM1_;_PARAM2_ to _PARAM7_;_PARAM8_ a bezier curve (first control point: _PARAM3_;_PARAM4_, second control point: _PARAM5_;_PARAM6_) with _PARAM0_":"从 _PARAM1_;_PARAM2_ 到 _PARAM7_;_PARAM8_ 用 _PARAM0_ 绘制一条贝塞尔曲线(第一控制点为: _PARAM3_;_PARAM4_, 第二控制点为: _PARAM5_;_PARAM6_)","First control point x":"第一控制点的x","First control point y":"第一控制点的y","Second Control point x":"第二控制点的x","Second Control point y":"第二控制点的y","Destination point x":"目的点的x","Destination point y":"目的点的y","Quadratic curve":"二次曲线","Draw a quadratic curve on screen":"在屏幕上绘制二次曲线","Draw from _PARAM1_;_PARAM2_ to _PARAM5_;_PARAM6_ a quadratic curve (control point: _PARAM3_;_PARAM4_) with _PARAM0_":"从_PARAM1_;_PARAM2_ 到_PARAM5_;_PARAM6_ 用 _PARAM0_ 绘制一个二次曲线 (控制点:_PARAM3_;_PARAM4_)","Control point x":"控制点 x","Control point y":"控制点 Y","Begin fill path":"开始填充路径","Begin to draw a simple one-color fill. Subsequent actions, such as \"Path line\" (in the Advanced category) can be used to draw. Be sure to use \"End fill path\" action when you're done drawing the shape.":"开始绘制一个简单的单色填充. 随后的动作, 例如 “路径线” (在高级类别中) 可以用于绘制. 在绘制形状时, 请务必使用 “结束填充路径” 操作.","Begin drawing filling of an advanced path with _PARAM0_ (start: _PARAM1_;_PARAM2_)":"开始使用_PARAM0_绘制高级路径的图形填充(开始:_PARAM1_;_PARAM2_)","Start drawing x":"开始绘制 x","Start drawing y":"开始绘制 y","End fill path":"结束填充路径","Finish the filling drawing in an advanced path":"在高级路径中完成填充图","Finish the filling drawing in an advanced path with _PARAM0_":"以 _PARAM0_ 完成高级路径的填充绘图","Move path drawing position":"移动路径绘制位置","Move the drawing position for the current path":"移动当前路径的绘图位置","Move the drawing position of the path to _PARAM1_;_PARAM2_ with _PARAM0_":"将路径的绘图位置移动到 _PARAM1_; _PARAM2_ 和 _PARAM0_","Path line":"路径线","Add to a path a line to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"在路径中添加到位置的直线。原点来自上一个动作或“开始填充路径”或“移动路径绘图位置”。默认情况下,开始位置将是对象的位置。","Add to a path a line to the position _PARAM1_;_PARAM2_ with _PARAM0_":"将路径添加到位置_PARAM1_; _PARAM2_和_PARAM0_","Path bezier curve":"路径贝塞尔曲线","Add to a path a bezier curve to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"将贝塞尔曲线添加到路径中。原点来自上一个动作或“开始填充路径”或“移动路径绘图位置”。默认情况下,开始位置将是对象的位置。","Add to a path a bezier curve to the position _PARAM5_;_PARAM6_ (first control point: _PARAM1_;_PARAM2_, second control point: _PARAM3_;_PARAM4_) with _PARAM0_":"将一条贝塞尔曲线添加到具有_PARAM0_的位置_PARAM5 _; _Param6_(第一控制点:_PARAM1_; _PARAM2_,第二控制点:_PARAM3_; _PARAM4_)","Path arc":"路径弧","Add to a path an arc to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"将圆弧添加到位置。原点来自上一个动作或“开始填充路径”或“移动路径绘图位置”。默认情况下,开始位置将是对象的位置。","Add to a path an arc at the position _PARAM1_;_PARAM2_ (radius: _PARAM3_, start angle: _PARAM4_, end angle: _PARAM5_, anticlockwise: _PARAM6_) with _PARAM0_":"在路径_PARAM1_; _PARAM2_(半径:_PARAM3_,起始角度:_PARAM4_,结束角度:_PARAM5_,逆时针:_PARAM6_)上添加一条圆弧,并带有_PARAM0_","Center x of circle":"圆的中心 X","Center y of circle":"圆心的y坐标","Start angle":"起始角度","End angle":"结束角度","Path quadratic curve":"路径二次曲线","Add to a path a quadratic curve to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"将二次曲线添加到某个位置。原点来自上一个动作或“开始填充路径”或“移动路径绘图位置”。默认情况下,开始位置将是对象的位置。","Add to a path a quadratic curve to the position _PARAM3_;_PARAM4_ (control point: _PARAM1_;_PARAM2_) with _PARAM0_":"将一条二次曲线添加到具有_PARAM0_的位置_PARAM3 _; _PARAM4_(控制点:_PARAM1 _; _PARAM2_)","Close Path":"闭合路径","Close the path of the advanced shape. This closes the outline between the last and the first point.":"闭合高级形状的路径, 这将结束最后一点和第一点之间的轮廓.","Close the path with _PARAM0_":"用 _PARAM0_ 关闭路径","Clear shapes":"清除形状","Clear the rendered shape(s). Useful if not set to be done automatically.":"清除渲染的形状。如果未设置为自动完成,则非常有用。","Clear the rendered image of _PARAM0_":"清除_PARAM0_的渲染图像","Clear between frames":"在帧之间清除","Activate (or deactivate) the clearing of the rendered shape at the beginning of each frame.":"在每帧开始时激活(或取消激活)渲染形状的清除。","Clear the rendered image of _PARAM0_ between each frame: _PARAM1_":"在每帧之间清除_PARAM0_的渲染图像:_PARAM1_","Clear between each frame":"在每个帧之间清除","Check if the rendered image is cleared between frames.":"检查渲染的图像是否在帧之间被清除。","_PARAM0_ is clearing its rendered image between each frame":"_PARAM0_正在清除每帧之间的渲染图像","Change the color used when filling":"改变填充时使用的颜色","Change fill color of _PARAM0_ to _PARAM1_":" 更改填充颜色 _PARAM0_ 为 _PARAM1_","Filing color red component":"文件颜色为红色的组件","Filing color green component":"文件颜色为绿色的组件","Filing color blue component":"文件颜色为蓝色的组件","Modify the color of the outline of future drawings.":"修改未来图纸轮廓的颜色。","Change outline color of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的轮廓颜色更改为 _PARAM1_","Outline color red component":"轮廓颜色红色组件","Outline color green component":"轮廓颜色绿色组件","Outline color blue component":"轮廓颜色蓝色组件","Modify the size of the outline of future drawings.":"修改未来绘图轮廓的大小。","the size of the outline":"检测外框的大小","Test the size of the outline.":"检测外框的大小","Modify the opacity level used when filling future drawings.":"修改填充未来图纸时使用的不透明度级别。","the opacity of filling":"填充的不透明度","Test the value of the opacity level used when filling.":"测试填充时使用的不透明度的值。","Filling opacity":"填充不透明度","Modify the opacity of the outline of future drawings.":"修改未来图纸轮廓的不透明度。","the opacity of the outline":"轮廓的不透明度","Test the opacity of the outline.":"测试轮廓的不透明度。","Use relative coordinates":"使用相对坐标","Set if the object should use relative coordinates (by default) or not. It's recommended to use relative coordinates.":"设置对象是否应使用相对坐标(默认情况下)。建议使用相对坐标。","Use relative coordinates for _PARAM0_: _PARAM1_":"将相对坐标用于_PARAM0_:_PARAM1_","Use relative coordinates?":"使用相对坐标?","Relative coordinates":"相对坐标","Check if the coordinates of the shape painter is relative.":"检查形状绘制器的坐标是否是相对的。","_PARAM0_ is using relative coordinates":"_PARAM0_ 正在使用相对坐标","Change the center of rotation of _PARAM0_ to _PARAM1_, _PARAM2_":"将 _PARAM0_ 的旋转中心更改为 _PARAM1_, _PARAM2_","Collision Mask":"碰撞蒙板","Change the collision mask of an object to a rectangle relatively to the object origin.":"对象的碰撞遮罩更改为相对于对象原点的矩形。","Change the collision mask of _PARAM0_ to a rectangle from _PARAM1_; _PARAM2_ to _PARAM3_; _PARAM4_":"将 _PARAM0_ 的碰撞遮罩更改为矩形,从_PARAM1_; _PARAM2_ 更改为_PARAM3_; _PARAM4_","Position":"位置","X drawing coordinate of a point from the scene":"屏幕上某点的X绘制坐标","X scene position":"X场景位置","Y scene position":"Y场景位置","Y drawing coordinate of a point from the scene":"屏幕上某点的Y绘制坐标","X scene coordinate of a point from the drawing":"绘图中某点的 X 场景坐标","X drawing position":"X绘图位置","Y drawing position":"Y 绘图位置","Y scene coordinate of a point from the drawing":"绘图中某点的 Y 场景坐标","Set anti-aliasing of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的抗锯齿设置为 _PARAM1_","Anti-aliasing quality level":"抗锯齿质量等级","Anti-aliasing type":"抗锯齿类型","Checks the selected type of anti-aliasing":"检查所选的抗锯齿类型","The anti-aliasing of _PARAM0_ is set to _PARAM1_":"_PARAM0_ 的抗锯齿设置为 _PARAM1_","Type of anti-aliasing to check the object against":"检查对象的抗锯齿类型","Type of anti-aliasing used by a shape painter":"形状绘制器使用的抗锯齿类型","Returns the type of anti-aliasing in use: none, low, medium, or high.":"返回正在使用的抗锯齿类型:无、低、中或高。","Linked objects":"链接对象","Link two objects":"链接两个对象","Link two objects together, so as to be able to get one from the other.":"将两个对象链接在一起,以便能够从一个得到另一个。","Link _PARAM1_ and _PARAM2_":"链接 _PARAM1_ 和 _PARAM2_","Object 1":"对象 1","Object 2":"对象 2","Unlink two objects":"取消链接两个对象","Unlink two objects.":"取消链接两个对象。","Unlink _PARAM1_ and _PARAM2_":"解除 _PARAM1_ 和 _PARAM2_ 的链接","Unlink all objects from an object":"将所有对象与一个对象取消链接","Unlink all objects from an object.":"将所有对象与一个对象取消链接。","Unlink all objects from _PARAM1_":"将所有对象与 _PARAM1_ 取消链接","Take into account linked objects":"考虑到链接对象","Take some objects linked to the object into account for next conditions and actions.\nThe condition will return false if no object was taken into account.":"考虑到下一个条件和动作,一些与对象相关联的对象。\n如果不考虑对象,条件将返回 false。","Take into account all \"_PARAM1_\" linked to _PARAM2_":"考虑所有 \"_PARAM1_\" 链接到 _PARAM2_","Pick these objects...":"选择这些对象...","...if they are linked to this object":"...如果他们被链接到此对象","Take objects linked to the object into account for next actions.":"将与对象相关联的对象计入下一个动作。","Precise check":"精确检查","Use the object (custom) collision mask instead of the bounding box, making the behavior more precise at the cost of reduced performance":"使用对象(自定义)碰撞遮罩而不是边界框,以降低性能为代价使行为更精确h","Draggable Behavior":"可拖动行为","Allows objects to be moved using the mouse (or touch). Add the behavior to an object to make it draggable. Use events to enable or disable the behavior when needed.":"允许使用鼠标(或触摸)移动对象。将行为添加到对象以使其可拖动。在需要时使用事件来启用或禁用行为。","Draggable object":"可拖动对象","Draggable":"可拖动","Move objects by holding a mouse button (or touch).":"按住鼠标按钮(或触摸)移动物体。","Being dragged":"正被拖动","Check if the object is being dragged. This means the mouse button or touch is pressed on it. When the mouse button or touch is released, the object is no longer being considered dragged (use the condition \"Was just dropped\" to check when the dragging is ending).":"检查对象是否正在被拖动。这意味着鼠标按钮或触摸正按在上面。当鼠标按钮或触摸被释放时,对象将不再被视为正在拖动(使用条件\"刚刚放下\"来检查拖动何时结束)。","_PARAM0_ is being dragged":"_PARAM0_ 正在被拖动","Was just dropped":"刚刚被放下","Check if the object was just dropped after being dragged (the mouse button or touch was just released this frame).":"检查对象在被拖动后是否刚刚被放下(鼠标按钮或触摸在这一帧刚刚释放)。","_PARAM0_ was just dropped":"_PARAM0_ 刚刚被放下","Bitmap Text":"位图文本","Displays a text using a \"Bitmap Font\" (an image representing characters). This is more performant than a traditional Text object and it allows for complete control on the characters aesthetic.":"显示使用 \"位图字体\" (代表字符的图像) 的文本。 这比传统的文本对象更能性能,它允许对字符的完全控制。","Bitmap Atlas":"位图图集","Text scale":"文字大小","Font tint":"字体色调","Image-based text.":"基于图像的文本。","Bitmap text":"位图文本","Return the text.":"返回文本。","the opacity, between 0 (fully transparent) and 255 (opaque)":"不透明度,介于 0 (完全透明) 和 255 (不透明) 之间","the font size, defined in the Bitmap Font":"字体大小,在位图字体中定义","the scale (1 by default)":"文字缩放尺度(默认为 1)","Font name":"字体名称","the font name (defined in the Bitmap font)":"字体名称(位图字体中定义)","the font name":"字体名称","Set the tint of the Bitmap Text object.":"设置位图文本对象的色调。","Set tint of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的色调更改为 _PARAM1_","Bitmap files resources":"位图文件资源","Change the Bitmap Font and/or the atlas image used by the object.":"更改对象使用的位图字体和/或图集图像。","Set the bitmap font of _PARAM0_ to _PARAM1_ and the atlas to _PARAM2_":"将 _PARAM0_ 的位图字体设为 _PARAM1_ ,图集设为 _PARAM2_","Bitmap font resource name":"位图字体资源名称","Texture atlas resource name":"纹理图集资源名称","the text alignment":"文字对齐","Alignment (\"left\", \"right\" or \"center\")":"对齐(\"左\"、\"右\"或\"中心\")","Change the alignment of a Bitmap text object.":"修改位图文本对象的对齐。","Set the alignment of _PARAM0_ to _PARAM1_":"设置 _PARAM0_ 的文字对齐为 _PARAM1_","De/activate word wrapping.":"取消/激活自动换行。","Activate word wrapping":"启用自动换行","the width, in pixels, after which the text is wrapped on next line":"当文字换至下一行时,行首的宽度,以像素为单位","File system":"文件系统","Access the filesystem of the operating system - only works on native, desktop games exported to Windows, Linux or macOS.":"访问操作系统的文件系统——仅适用于导出到Windows、Linux或macOS的原生桌面游戏。","File or directory exists":"文件或文件夹存在性","Check if the file or directory exists.":"检查文件或文件夹是否存在。","The path _PARAM0_ exists":"路径_PARAM0_ 存在","Windows, Linux, MacOS":"Windows, Linux, MacOS","Path to file or directory":"文件或文件夹路径","Create a directory":"创建文件夹","Create a new directory at the specified path.":"在指定路径创建新文件夹。","Create directory _PARAM0_":"创建目录_PARAM0_","Directory":"目录","(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occurred.":"(可选) 用于存储结果的变量。'ok':任务成功,'error':发生错误。","Save a text into a file":"将文本保存到文件","Save a text into a file. Only use this on small files to avoid any lag or freeze during the game execution.":"将文本保存到文件中。仅在小文件中使用此选项以避免游戏执行过程中出现任何延迟或冻结。","Save _PARAM0_ into file _PARAM1_":"保存 _PARAM0_ 到文件 _PARAM1_","Save path":"保存路径","Save a text into a file (Async)":"将文本保存到文件中(异步)","Save a text into a file asynchronously. Use this for large files to avoid any lag or freeze during game execution. The 'result' variable gets updated when the operation has finished.":"将文本另存为异步文件。使用此选项以避免游戏执行过程中出现任何延迟或冻结。 操作完成后,'结果'变量将会更新。","Windows, Linux, MacOS/Asynchronous":"Windows,Linux,MacOS/Asynuous","Save a scene variable into a JSON file":"将场景变量保存到 JSON 文件","Save a scene variable (including, for structure, all the children) into a file in JSON format. Only use this on small files to avoid any lag or freeze during the game execution.":"将场景变量(对于结构,包括所有子项)以JSON格式保存到文件中。仅在小文件上使用此选项,以避免在游戏执行期间出现任何延迟或冻结。","Save scene variable _PARAM0_ into file _PARAM1_ as JSON":"将场景变量 _PARAM0_ 保存为 _PARAM1_ 文件为 JSON","Save a scene variable into a JSON file (Async)":"将场景变量保存到 JSON 文件 (异步)","Save the scene variable (including, for structures, all the children) into a file in JSON format, asynchronously. Use this for large files to avoid any lag or freeze during game execution. The 'result' variable gets updated when the operation has finished.":"将场景变量(包括结构中的所有子元素)保存为一个 JSON 格式的文件,异步格式。 用于大型文件以避免游戏执行过程中出现任何延迟或冻结。操作完成后“结果”变量会更新。","Load a text from a file (Async)":"从文件加载文本(异步)","Load a text from a file, asynchronously. Use this for large files to avoid any lag or freeze during game execution. The content of the file will be available in the scene variable after a small delay (usually a few milliseconds). The 'result' variable gets updated when the operation has finished.":"从文件加载文本异步。用它来处理大型文件,以避免游戏执行过程中出现任何延迟或冻结。 文件的内容将在稍后的场景变量中可用 (通常是几毫秒)。 操作完成后,'结果'变量将会更新。","Load text from _PARAM1_ into scene variable _PARAM0_ (Async)":"从 _PARAM1_ 加载文本到场景变量 _PARAM0_ (异步)","Load path":"加载路径","Normalize the file content (recommended)":"规范化文件内容(推荐)","This replaces Windows new lines characters (\"CRLF\") by a single new line character.":"这会将 Windows 换行符 (\"CRLF\") 替换为单个换行符。","Load a text from a file":"从文件中加载文本","Load a text from a file. Only use this on small files to avoid any lag or freeze during the game execution.":"从文件中加载文本。仅在小文件中使用此选项以避免游戏执行过程中出现任何延迟或冻结。","Load text from _PARAM1_ into scene variable _PARAM0_":"从 _PARAM1_ 将文本加载到场景变量 _PARAM0_","Load a scene variable from a JSON file":"从 JSON 文件加载场景变量","Load a JSON formatted text from a file and convert it to a scene variable (potentially a structure variable with children). Only use this on small files to avoid any lag or freeze during the game execution.":"从文件中加载 JSON 格式的文本,并将其转换为场景变量(可能是带有子节点的结构变量)。只有在小文件上使用这个,以避免任何延迟或在游戏执行期间冻结。","Load JSON from _PARAM1_ into scene variable _PARAM0_":"从 _PARAM1_ 加载JSON 到场景变量 _PARAM0_","Load a scene variable from a JSON file (Async)":"从 JSON 文件加载场景变量(异步)","Load a JSON formatted text from a file and convert it to a scene variable (potentially a structure variable with children), asynchronously. Use this for large files to avoid any lag or freeze during game execution. The content of the file will be available as a scene variable after a small delay (usually a few milliseconds). The 'result' variable gets updated when the operation has finished.":"从文件加载JSON格式化文本并将其转换为场景变量(可能是一个带子的结构变量),异步的。 用于大型文件,以避免游戏执行过程中出现任何延迟或冻结。 文件的内容将作为场景变量在稍后显示(通常是几毫秒)。 操作完成后,'结果'变量将会更新。","Delete a file":"删除文件","Delete a file from the filesystem.":"从文件系统中删除文件。","Delete the file _PARAM0_":"删除文件 _PARAM0_","File path":"文件路径","Delete a file (Async)":"删除文件(异步)","Delete a file from the filesystem asynchronously. The option result variable will be updated once the file is deleted.":"从文件系统中删除异步文件。删除文件后,选项结果变量将会更新。","Read a directory":"读取目录","Reads the contents of a directory (all files and sub-directories) and stores them in an array.":"读取目录的内容 (所有文件和子目录) 并将其存储在数组中。","Read the directory _PARAM0_ into _PARAM1_":"将目录_PARAM0_读入_PARAM1_","Directory path":"目录路径","Variable to store the result":"存储结果的变量","Desktop folder":"桌面文件夹","Get the path to the desktop folder.":"获取桌面文件夹的路径。","Documents folder":"文档文件夹","Get the path to the documents folder.":"获取文档文件夹的路径。","Pictures folder":"图片文件夹","Get the path to the pictures folder.":"获取图片文件夹的路径。","Game executable file":"游戏可执行文件","Get the path to this game executable file.":"获取此游戏可执行文件的路径。","Game executable folder":"游戏可执行文件夹","Get the path to this game executable folder.":"获取此游戏可执行文件夹的路径。","Userdata folder (for application settings)":"用户数据文件夹 (用于应用程序设置)","Get the path to userdata folder (for application settings).":"获取到用户数据文件夹的路径(用于应用程序设置)。","User's Home folder":"用户的主文件夹","Get the path to the user home folder.":"获取用户主文件夹的路径。","Temp folder":"临时文件夹","Get the path to temp folder.":"获取临时文件夹的路径。","Path delimiter":"路径分隔符","Get the operating system path delimiter.":"获取操作系统路径分隔符。","Get directory name from a path":"从路径获取目录名称","Returns the portion of the path that represents the directories, without the ending file name.":"返回代表目录的路径部分,没有结束文件名称。","File or folder path":"文件或文件夹路径","Get file name from a path":"从路径获取文件名","Returns the name of the file with its extension, if any.":"如果有扩展,则返回文件的名称。","Get the extension from a file path":"从文件路径获取扩展","Returns the extension of the file designated by the given path, including the extension period. For example: \".txt\".":"返回给定路径指定的文件扩展名,包括扩展时间。例如:“.txt”。","Text Input":"文本输入","A text field the player can type text into.":"玩家可以在其中输入文本的文本字段。","Initial value":"初始值","Placeholder":"占位符","Font size (px)":"字体大小 (px)","Text area":"文本区域","Telephone number":"电话号码","Input type":"输入类型","By default, a \"text\" is single line. Choose \"text area\" to allow multiple lines to be entered.":"默认情况下,“文本”是单行。选择“文本区域”允许输入多行。","Field":"字段","Disabled":"已禁用","Enable spell check":"启用拼写检查","Field appearance":"字段外观","Border appearance":"边框外观","Padding (horizontal)":"填充 (水平)","Padding (vertical)":"填充 (垂直)","Max length":"最大长度","The maximum length of the input value (this property will be ignored if the input type is a number).":"输入值的最大长度(如果输入类型是数字,此属性将被忽略)。","Text alignment":"文本对齐","Text input":"文本输入","the placeholder":"占位符","Set the font of the object.":"设置对象的字体。","Set the font of _PARAM0_ to _PARAM1_":"设置 _PARAM0_ 的字体为 _PARAM1_","the input type":"输入类型","Set the text color of the object.":"设置对象的文本颜色。","Set the text color of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的文本颜色设为 _PARAM1_","Set the fill color of the object.":"设置对象的填充颜色。","Set the fill color of _PARAM0_ to _PARAM1_":"设置 _PARAM0_ 的填充颜色为 _PARAM1_","the fill opacity, between 0 (fully transparent) and 255 (opaque)":"填充不透明度, 介于 0 (完全透明) 和 255 (不透明)","the fill opacity":"填充不透明度","Border color":"边框颜色","Set the border color of the object.":"设置对象的边框颜色。","Set the border color of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的边框颜色设为 _PARAM1_","Border opacity":"边框不透明度","the border opacity, between 0 (fully transparent) and 255 (opaque)":"边框不透明度, 0(完全透明) 和 255 (不透明)","the border opacity":"边界不透明度","Border width":"边框宽度","the border width":"边界宽度","Read-only":"只读","the text input is read-only":"文本输入为只读","read-only":"只读","Read-only?":"只读?","the text input is disabled":"文本输入已禁用","disabled":"已禁用","Spell check enabled":"拼写检查已启用","spell check is enabled":"拼写检查已启用","spell check enabled":"拼写检查已启用","Focused":"聚焦","Check if the text input is focused (the cursor is in the field and player can type text in).":"检查文本输入是否被聚焦(光标在字段中,玩家可以输入文本)。","_PARAM0_ is focused":"_PARAM0_ 是焦点的","Input is submitted":"输入已提交","Check if the input is submitted, which usually happens when the Enter key is pressed on a keyboard, or a specific button on mobile virtual keyboards.":"检查输入是否已提交,通常在键盘上按下 Enter 键或移动虚拟键盘上的特定按钮时发生。","_PARAM0_ value was submitted":"_PARAM0_ 值已提交","Focus":"焦点","Focus the input so that text can be entered (like if it was touched/clicked).":"焦点输入,以便可以输入文本(就像触摸/单击一样)。","Focus _PARAM0_":"焦点 _PARAM0_","2D Physics Engine":"2D 物理引擎","Physics Engine 2.0":"物理引擎 2.0","Static":"静态物体","Dynamic":"动态","Kinematic":"运动学","A static object won't move (perfect for obstacles). Dynamic objects can move. Kinematic will move according to forces applied to it only (useful for characters or specific mechanisms).":"静态物体不会移动 (非常适合用作障碍物)。动态物体可以移动。运动物体只会根据施加在其上的力而移动 (适用于角色或特定机制)。","Considered as a bullet":"被视为一颗子弹","Useful for fast moving objects which requires a more accurate collision detection.":"对于需要更精确碰撞检测的快速移动物体很有用。","Physics body advanced settings":"物理主体高级设置","If enabled, the object won't rotate and will stay at the same angle. Useful for characters for example.":"如果启用,对象将不会旋转并保持相同的角度。例如,对于角色很有用。","Can be put to sleep by the engine":"可以通过引擎进入休眠状态","Allows the physics engine to stop computing interaction with the object when it's not touched. It's recommended to keep this on.":"允许物理引擎在物体未被触碰时停止计算与物体的交互。建议保持开启。","Box":"文本框","Edge":"边缘","Polygon":"多边形","Origin":"起源","TopLeft":"左上","Density":"密度","Define the weight of the object, according to its size. The bigger the density, the heavier the object.":"根据物体的大小来定义物体的重量。密度越大,物体越重。","The friction applied when touching other objects. The higher the value, the more friction.":"接触其他物体时产生的摩擦力。值越高,摩擦力越大。","Restitution":"恢复原状","The \"bounciness\" of the object. The higher the value, the more other objects will bounce against it.":"物体的“弹性”。值越高,其他物体与其反弹的次数就越多。","Simulate realistic 2D physics for the object including gravity, forces, collisions, and joints.":"为该对象模拟真实的二维物理效果,包括重力、力、碰撞和关节。","Edit shape and advanced settings":"编辑形状和高级设置","World scale":"世界比例","Return the world scale.":"返回世界比例。","Global":"全局","World gravity on X axis":"X轴上的世界重力","Compare the world gravity on X axis.":"比较X轴上的世界重力。","the world gravity on X axis":"X轴上的世界重力","World gravity on Y axis":"Y轴上的世界重力","Compare the world gravity on Y axis.":"比较Y轴上的世界重力。","the world gravity on Y axis":"Y轴上的世界重力","World gravity":"世界重力","Modify the world gravity.":"修改世界重力。","While an object is needed, this will apply to all objects using the behavior.":"当需要对象时,这将适用于所有使用该行为的对象。","Set the world gravity of _PARAM0_ to _PARAM2_;_PARAM3_":"将 _PARAM0_ 的世界重力设为 _PARAM2_;_PARAM3_","World time scale":"世界时间范围","Compare the world time scale.":"比较世界时间刻度。","the world time scale":"世界时间范围","Time scale to compare to (1 by default)":"要比较的时间尺度(默认为 1)","Modify the world time scale.":"修改世界时间尺度。","Set the world time scale of _PARAM0_ to _PARAM2_":"设置 _PARAM0_ 的世界时间尺度为 _PARAM2_","Time scale (1 by default)":"时间缩放(默认为1)","Is dynamic":"是动态的","Check if an object is dynamic.":"检查对象是否动态.","_PARAM0_ is dynamic":"_PARAM0_ 是动态的","Dynamics":"动态","Set as dynamic":"设置为动态","Set an object as dynamic. Is affected by gravity, forces and velocities.":"将对象设置为动态。受到重力、力量和速度的影响。","Set _PARAM0_ as dynamic":"设置 _PARAM0_ 为动态","Is static":"静态的","Check if an object is static.":"检查对象是否静态.","_PARAM0_ is static":"_PARAM0_ 是静态的","Set as static":"设置为静态的","Set an object as static. Is not affected by gravity, and can't be moved by forces or velocities at all.":"将对象设置为静态。不受重力影响,不能被力量或速度移动。","Set _PARAM0_ as static":"设置 _PARAM0_ 为静态的","Is kinematic":"是运动学的","Check if an object is kinematic.":"检查物体是否具有运动能力。","_PARAM0_ is kinematic":"_PARAM0_ 是运动学的","Set as kinematic":"设为运动学模式","Set an object as kinematic. Is like a static body but can be moved through its velocity.":"将对象设置为运动学的。就像一个静态物体,但可以通过它的速度移动。","Set _PARAM0_ as kinematic":"将 _PARAM0_ 设置运动模式","Is treated as a bullet":"作为子弹处理","Check if the object is being treated as a bullet.":"检查对象是否被当作一个子弹。","_PARAM0_ is treated as a bullet":"_PARAM0_ 被视为子弹","Treat as bullet":"作为子弹处理","Treat the object as a bullet. Better collision handling on high speeds at cost of some performance.":"将对象视为子弹。更好地快速处理碰撞,代价是某些性能。","Treat _PARAM0_ as bullet: _PARAM2_":"将 _PARAM0_ 作为子弹处理: _PARAM2_","Has fixed rotation":"有固定旋转","Check if an object has fixed rotation.":"检查对象是否具有固定旋转。","_PARAM0_ has fixed rotation":"_PARAM0_ 有固定旋转","Enable or disable an object fixed rotation. If enabled the object won't be able to rotate.":"启用或禁用对象固定旋转。如果启用,对象将无法旋转。","Set _PARAM0_ fixed rotation: _PARAM2_":"设置 _PARAM0_ 固定旋转: _PARAM2_","Is sleeping allowed":"允许睡眠","Check if an object can sleep.":"检查物体是否可以休眠。","_PARAM0_ can sleep":"_PARAM0_ 可以睡眠","Sleeping allowed":"允许睡眠","Allow or not an object to sleep. If enabled the object will be able to sleep, improving performance for non-currently-moving objects.":"允许或禁止物体睡眠。如果启用,则该对象将能够休眠,从而提高非当前移动对象的性能。","Allow _PARAM0_ to sleep: _PARAM2_":"允许 _PARAM0_ 休眠: _PARAM2_","Can sleep":"可以睡眠","Is sleeping":"正在睡眠","Check if an object is sleeping.":"检查物体是否正在休眠。","_PARAM0_ is sleeping":"_PARAM0_ 正在睡眠","Shape scale":"形状比例","Modify an object shape scale. It affects custom shape dimensions and shape offset. If custom dimensions are not set, the body will be scaled automatically to the object size.":"修改对象形状比例。它影响自定义形状尺寸和形状偏移。如果未设置自定义尺寸,主体将自动缩放到对象大小。","the shape scale":"形状比例","Body settings":"身体设置","Test an object density.":"测试对象密度。","the _PARAM0_ density":"_PARAM0_ 亮度","Modify an object density. The body's density and volume determine its mass.":"修改对象密度。身体的密度和体积决定其质量。","the density":"密度","Density of the object":"物体密度","Get the density of an object.":"获取对象的密度。","Test an object friction.":"测试对象摩擦。","the _PARAM0_ friction":"_PARAM0_摩擦力","Modify an object friction. How much energy is lost from the movement of one object over another. The combined friction from two bodies is calculated as 'sqrt(bodyA.friction * bodyB.friction)'.":"改变物体摩擦力。一个物体移动到另一个物体上会丢失多少能量。 两个物体的合并摩擦是“sqrt(bodyA.friction * bodyB.friction)”。","the friction":"摩擦力","Friction of the object":"对象的摩擦力","Get the friction of an object.":"获取对象的摩擦力。","Test an object restitution.":"测试对象还原。","the _PARAM0_ restitution":"_PARAM0_ 恢复","Modify an object restitution. Energy conservation on collision. The combined restitution from two bodies is calculated as 'max(bodyA.restitution, bodyB.restitution)'.":"修改对象恢复。碰撞时节能。来自两个实体的合并补偿被计算为“ max(bodyA.restitution,bodyB.restitution)”。","the restitution":"恢复原状","Restitution of the object":"恢复对象","Get the restitution of an object.":"获取物品的恢复。","Linear damping":"线性阻尼","Test an object linear damping.":"测试对象线性阻尼。","the _PARAM0_ linear damping":"_PARAM0_ 线性阻尼","Modify an object linear damping. How much movement speed is lost across the time.":"修改对象线性阻尼。单位时间内速度降低大小。","the linear damping":"线性阻尼","Linear damping of the object":"对象的线性阻尼","Get the linear damping of an object.":"获取对象的线性阻尼。","Angular damping":"角阻尼","Test an object angular damping.":"测试对象角阻尼。","the _PARAM0_ angular damping":"_PARAM0_ 角度阻尼","Modify an object angular damping. How much angular speed is lost across the time.":"修改对象角度阻尼。整个时间损失了多少角速度。","the angular damping":"角阻尼","Angular damping of the object":"对象的角阻尼量","Get the angular damping of an object.":"获取对象的角阻尼。","Gravity scale":"重力","Test an object gravity scale.":"测试对象重力比例。","the _PARAM0_ gravity scale":"_PARAM0_ 重力比例","Modify an object gravity scale. The gravity applied to an object is the world gravity multiplied by the object gravity scale.":"修改对象重力尺寸。适用于对象的重力尺寸是世界重力乘以对象重力比例。","the gravity scale":"重力比例","Gravity scale of the object":"对象的重力比例","Get the gravity scale of an object.":"获取对象的重力比例。","Layer enabled":"启用图层","Check if an object has a specific layer enabled.":"检查对象是否启用了特定图层。","_PARAM0_ has layer _PARAM2_ enabled":"_PARAM0_ 已启用图层 _PARAM2_","Filtering":"过滤","Layer (1 - 16)":"图层(1-16)","Enable layer":"启用图层","Enable or disable a layer for an object. Two objects collide if any layer of the first object matches any mask of the second one and vice versa.":"启用或禁用对象的图层。如果第一个对象的任何层与第二个对象的任何蒙版匹配,则两个对象发生碰撞,反之亦然。","Enable layer _PARAM2_ for _PARAM0_: _PARAM3_":"为_PARAM0_: _PARAM3_ 启用图层 _PARAM2_","Enable":"启用","Mask enabled":"启用蒙版","Check if an object has a specific mask enabled.":"检查对象是否启用了特定遮罩。","_PARAM0_ has mask _PARAM2_ enabled":"_PARAM0_ 已启用掩码 _PARAM2_","Mask (1 - 16)":"遮罩(1-16)","Enable mask":"启用蒙版","Enable or disable a mask for an object. Two objects collide if any layer of the first object matches any mask of the second one and vice versa.":"对对象启用或禁用掩码。 两个对象,如果第一个对象的任何一层与第二个对象的任何蒙版相撞,反之亦然。","Enable mask _PARAM2_ for _PARAM0_: _PARAM3_":"为 _PARAM0_: _PARAM3_ 启用掩码 _PARAM2_","Linear velocity X":"线性速度 X","Test an object linear velocity on X.":"在 X 上测试一个物体的线性速度。","the linear velocity on X":"X上的线性速度","Velocity":"速度","Modify an object linear velocity on X.":"在 X上修改对象线性速度。","Linear velocity on X axis":"X轴上的线性速度","Get the linear velocity of an object on X axis.":"在 X 轴上获取对象的线性速度。","Linear velocity Y":"线性速度 Y","Test an object linear velocity on Y.":"在 Y 上测试一个物体的线性速度。","the linear velocity on Y":"Y线性速度","Modify an object linear velocity on Y.":"在 Y上修改对象线性速度。","Linear velocity on Y axis":"Y轴上的线性速度","Get the linear velocity of an object on Y axis.":"在 Y 轴上获取对象的线性速度。","Linear velocity":"线性速度","Test an object linear velocity length.":"测试对象线性速度长度。","the linear velocity length":"线性速度长度","Get the linear velocity of an object.":"获取对象的线性速度。","Linear velocity angle":"线性速度角度","Test an object linear velocity angle.":"测试对象的线性速度角度。","the linear velocity angle":"线性速度角度","Compare the linear velocity angle of the object.":"比较物体的线速度角度。","Linear velocity towards an angle":"朝向某一角度的线速度","Set the linear velocity towards an angle.":"将线速度设置为某个角度。","Set the linear velocity of _PARAM0_ towards angle: _PARAM2_ degrees, speed: _PARAM3_ pixels per second":"设置 _PARAM0_ 的线速度,角度:_PARAM2_ 度,速度:_PARAM3_ 像素每秒","Get the linear velocity angle of an object.":"获取对象的线性速度角。","Angular velocity":"角速度","Test an object angular velocity.":"测试对象的角速度。","the angular velocity":"角速度","Angular speed to compare to (in degrees per second)":"比较角速度(以每秒度数为单位)","Modify an object angular velocity.":"修改对象的角度速度。","Get the angular velocity of an object.":"获取对象的角速度。","Apply force":"应用力","Apply a force to the object over time. It \"accelerates\" an object and must be used every frame during a time period.":"随着时间的推移向物体施加力。它“加速”一个对象,并且必须在一段时间内的每一帧使用。","Apply to _PARAM0_ a force of _PARAM2_;_PARAM3_":"应用到_PARAM0_的力量_PARAM2_;_PARAM3_","Forces & impulses":"力量和冲量","X component (N)":"X 组件 (N)","Y component (N)":"Y 组件 (N)","A force is like an acceleration but depends on the mass.":"力类似于加速度,但它取决于质量。","Application point on X axis":"X 轴上的应用点","Application point on Y axis":"Y 轴上的应用点","Use `MassCenterX` and `MassCenterY` expressions to avoid any rotation.":"使用 `MassCenterX` 和 `MassCenterY` 表达式来避免任何旋转。","Apply force (angle)":"应用力(角度)","Apply a force to the object over time using polar coordinates. It \"accelerates\" an object and must be used every frame during a time period.":"使用极坐标随时间向对象施加力。它“加速”一个对象,并且必须在一段时间内的每一帧使用。","Apply to _PARAM0_ a force of angle _PARAM2_ and length _PARAM3_":"应用到 _PARAM0_ 一个角度的力_PARAM2_ 和 _PARAM3_","Length (N)":"长度(N)","Apply force toward position":"对位置施加力","Apply a force to the object over time to move it toward a position. It \"accelerates\" an object and must be used every frame during a time period.":"随着时间的推移向对象施加力,将其移向某个位置。它“加速”一个对象,并且必须在一段时间内的每一帧使用。","Apply to _PARAM0_ a force of length _PARAM2_ towards _PARAM3_;_PARAM4_":"对 _PARAM0_ 施加朝向 _PARAM3_;_PARAM4_ 的长度为 _PARAM2_ 的力","Apply impulse":"应用冲量","Apply an impulse to the object. It instantly changes the speed, to give an initial speed for instance.":"向物体施加一个冲量。它立即改变速度,例如给出一个初始速度。","Apply to _PARAM0_ an impulse of _PARAM2_;_PARAM3_":"对 _PARAM0_ 施加 _PARAM2_;_PARAM3_ 的冲量","X component (N·s or kg·m·s⁻¹)":"X 分量 (N·s or kg·m·s⁻¹)","Y component (N·s or kg·m·s⁻¹)":"Y 分量 (N·s or kg·m·s⁻¹)","An impulse is like a speed addition but depends on the mass.":"冲量就像速度加法,但取决于质量。","Apply impulse (angle)":"应用冲量(角度)","Apply an impulse to the object using polar coordinates. It instantly changes the speed, to give an initial speed for instance.":"使用极坐标向对象施加冲量。它会立即改变速度,例如给出初始速度。","Apply to _PARAM0_ an impulse of angle _PARAM2_ and length _PARAM3_ (applied at _PARAM4_;_PARAM5_)":"将角度 _PARAM2_ 和长度 _PARAM3_ 的冲量应用于 _PARAM0_ (应用于 _PARAM4_;_PARAM5_)","Length (N·s or kg·m·s⁻¹)":"长度 (N·s or kg·m·s⁻¹)","Apply impulse toward position":"向位置施加冲量","Apply an impulse to the object to move it toward a position. It instantly changes the speed, to give an initial speed for instance.":"向对象施加冲量以将其移向某个位置。它会立即改变速度,例如给出初始速度。","Apply to _PARAM0_ an impulse of length _PARAM2_ towards _PARAM3_;_PARAM4_ (applied at _PARAM5_;_PARAM6_)":"将长度为 _PARAM2_ 的冲量应用于 _PARAM0_,朝向 _PARAM3_;_PARAM4_ (应用于 _PARAM5_;_PARAM6_)","Apply torque (rotational force)":"施加扭矩 (旋转力)","Apply a torque (also called \"rotational force\") to the object. It \"accelerates\" an object rotation and must be used every frame during a time period.":"向物体施加扭矩 (也称为“旋转力”)。它“加速”对象旋转,并且必须在一段时间内的每一帧使用。","Apply to _PARAM0_ a torque of _PARAM2_":"应用到 _PARAM0_ 一个 _PARAM2_ 的tortque","Torque (N·m)":"扭矩 (N·m)","A torque is like a rotation acceleration but depends on the mass.":"扭矩类似于旋转加速度,但取决于质量。","Apply angular impulse (rotational impulse)":"施加角冲量(旋转冲量)","Apply an angular impulse (also called a \"rotational impulse\") to the object. It instantly changes the rotation speed, to give an initial speed for instance.":"对物体施加角冲量 (也称为“旋转冲量”)。它会立即改变旋转速度,例如给出初始速度。","Apply to _PARAM0_ an angular impulse of _PARAM2_":"对 _PARAM0_ 应用 _PARAM2_ 的角冲量","Angular impulse (N·m·s)":"角冲量 (N·m·s)","An impulse is like a rotation speed addition but depends on the mass.":"冲量就像转速的加法,但取决于质量。","Mass":"质量","Return the mass of the object (in kilograms)":"返回物体的质量(以千克为单位)","Inertia":"惯性","Return the rotational inertia of the object (in kilograms · meters²)":"返回物体的转动惯量 (单位:千克·米²)","Mass center X":"质量中心 X","Mass center Y":"质量中心 Y","Joint first object":"关节第一个对象","Check if an object is the first object on a joint.":"检查某个物体是否是关节上的第一个物体。","_PARAM0_ is the first object for joint _PARAM2_":"_PARAM0_ 是关节_PARAM2_ 的第一个对象","Joints":"关节","Joint ID":"关节 ID","Joint second object":"关节第二个对象","Check if an object is the second object on a joint.":"检查某个物体是否是关节上的第二个物体。","_PARAM0_ is the second object for joint _PARAM2_":"_PARAM0_是关节_PARAM2_的第二个对象","Joint first anchor X":"连接第一个锚点 X","Joint first anchor Y":"连接第一个锚点 Y","Joint second anchor X":"连接第二个锚点 X","Joint second anchor Y":"连接第二个锚点 Y","Joint reaction force":"联合反作用力","Test a joint reaction force.":"测试关节反作用力。","the joint _PARAM2_ reaction force":"联合_PARAM2_反作用力","Joint reaction torque":"联合反作用扭矩","Test a joint reaction torque.":"测试关节反作用扭矩。","the joint _PARAM2_ reaction torque":"关节_PARAM2_反作用扭矩","Remove joint":"删除节点","Remove a joint from the scene.":"从场景中删除节点","Remove joint _PARAM2_":"删除节点_PARAM2_","Add distance joint":"添加距离节点","Add a distance joint between two objects. The length is converted to meters using the world scale on X. The frequency and damping ratio are related to the joint speed of oscillation and how fast it stops.":"在两个对象之间添加一个距离节点。长度被世界比例转换为米。频率和阻尼率与节点的震荡速度及停止速度相关。","Add a distance joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之间添加一个距离节点","Joints ❯ Distance":"关节 ❯ 距离","First object":"第一个对象","Anchor X on first body":"第一个物体上的 X 锚点","Anchor Y on first body":"第一个物体上的 Y 锚点","Second object":"第二个对象","Anchor X on second body":"第二个物体上的 X 锚点","Anchor Y on second body":"第二个物体上的 Y 锚点","Length (-1 to use current objects distance) (default: -1)":"长度 (-1 使用当前对象距离) (默认值:-1)","Frequency (Hz) (non-negative) (default: 0)":"频率(Hz) (非负) (默认:0)","Damping ratio (non-negative) (default: 1)":"阻尼比率(非负) (默认值:1)","Allow collision between connected bodies? (default: no)":"允许在已连接的物体之间碰撞? (默认: 否)","Variable where to store the joint ID (default: none)":"变量存储关节ID的位置(默认值:无)","Distance joint length":"距离关节长度","Modify a distance joint length.":"修改距离关节长度。","the length for distance joint _PARAM2_":"距离 _PARAM2_ 的长度","Distance joint frequency":"距离节点频率","Modify a distance joint frequency.":"修改距离关节频率。","the frequency for distance joint _PARAM2_":"距离 _PARAM2_ 的频率","Distance joint damping ratio":"距离关节阻尼比","Modify a distance joint damping ratio.":"修改距离关节的阻尼比。","the damping ratio for distance joint _PARAM2_":"距离关节_PARAM2_的阻尼比","Add revolute joint":"添加旋转关节","Add a revolute joint to an object at a fixed point. The object is attached as the second object in the joint, so you can use this for gear joints.":"在固定点向对象添加旋转关节。该对象被附加为关节中的第二个对象,因此可以将其用于齿轮关节。","Add a revolute joint to _PARAM0_ at _PARAM2_;_PARAM3_":"在_PARAM2 _; _ PARAM3_上向_PARAM0_添加旋转关节","Joints ❯ Revolute":"关节 ❯ 旋转","X anchor":"X 锚点","Y anchor":"Y 锚点","Enable angle limits? (default: no)":"启用角度限制? (默认: 否)","Reference angle (default: 0)":"参考角度 (默认:0)","Minimum angle (default: 0)":"最小角度 (默认:0)","Maximum angle (default: 0)":"最大角度 (默认:0)","Enable motor? (default: no)":"启用动力?(默认:否)","Motor speed (default: 0)":"动力速度 (默认:0)","Motor maximum torque (default: 0)":"动力最大扭矩(默认值:0)","Add revolute joint between two bodies":"在两个物体之间添加旋转关节","Add a revolute joint between two objects. The reference angle determines what is considered as the base angle at the initial state.":"在两个对象之间添加旋转关节。参考角确定初始状态下的底角。","Add a revolute joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之间添加旋转关节","Revolute joint reference angle":"旋转关节参考角","Revolute joint current angle":"旋转接头当前角度","Revolute joint angular speed":"旋转关节角速度","Revolute joint limits enabled":"启用旋转关节限制","Check if a revolute joint limits are enabled.":"检查旋转关节限制是否启用。","Limits for revolute joint _PARAM2_ are enabled":"启用旋转关节_PARAM2_的限制","Enable revolute joint limits":"启用旋转关节限制","Enable or disable a revolute joint angle limits.":"启用或禁用旋转关节角度限制。","Enable limits for revolute joint _PARAM2_: _PARAM3_":"启用旋转关节_PARAM2_的限制:_PARAM3_","Revolute joint limits":"旋转关节极限","Modify a revolute joint angle limits.":"修改旋转关节角度限制。","Set the limits to _PARAM3_;_PARAM4_ for revolute joint _PARAM2_":"将旋转关节_PARAM2_的限制设置为_PARAM3 _; _ PARAM4_","Minimum angle":"最小角度","Maximum angle":"最大角度","Revolute joint minimum angle":"旋转关节最小角度","Revolute joint maximum angle":"旋转关节最大角度","Revolute joint motor enabled":"旋转关节动力已启用","Check if a revolute joint motor is enabled.":"检查旋转关节电机是否启用。","Motor of revolute joint _PARAM2_ is enabled":"旋转关节_PARAM2_的动力已启用","Enable revolute joint motor":"启用旋转关节动力","Enable or disable a revolute joint motor.":"启用或禁用旋转关节动力。","Enable motor for revolute joint _PARAM2_: _PARAM3_":"启用用于旋转关节_PARAM2_的动力:_PARAM3_","Revolute joint motor speed":"旋转关节动力转速","Modify a revolute joint motor speed.":"修改旋转关节动力速度。","the motor speed for revolute joint _PARAM2_":"旋转接头_PARAM2_的动力速度","Revolute joint max motor torque":"旋转关节最大动力扭矩","Modify a revolute joint maximum motor torque.":"修改旋转关节最大动力扭矩。","the maximum motor torque for revolute joint _PARAM2_":"旋转接头_PARAM2_的最大动力扭矩","Revolute joint maximum motor torque":"旋转关节最大动力扭矩","Revolute joint motor torque":"旋转关节动力扭矩","Add prismatic joint":"添加棱柱形接头","Add a prismatic joint between two objects. The translation limits are converted to meters using the world scale on X.":"在两个对象之间添加一个棱柱形关节。平移限制使用X上的世界标度转换为米。","Add a prismatic joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之间添加棱形关节","Joints ❯ Prismatic":"关节 ❯ 棱柱","Axis angle":"轴角度","Enable limits? (default: no)":"启用限制吗?(默认:否)","Minimum translation (default: 0)":"最小平移量(默认:0)","Maximum translation (default: 0)":"最大平移量(默认:0)","Motor maximum force (default: 0)":"最大动力(默认:0)","Prismatic joint axis angle":"棱柱关节轴角度","Prismatic joint reference angle":"棱柱关节参考角","Prismatic joint current translation":"棱柱形联合电流平移","Prismatic joint current speed":"棱柱关节电流速度","Prismatic joint speed":"棱柱关节速度","Prismatic joint limits enabled":"启用棱柱关节限制","Check if a prismatic joint limits are enabled.":"检查是否启用了棱柱关节限制。","Limits for prismatic joint _PARAM2_ are enabled":"启用四角形关节_PARAM2_的限制","Enable prismatic joint limits":"启用棱柱形关节限制","Enable or disable a prismatic joint limits.":"启用或禁用棱柱关节限制。","Enable limits for prismatic joint _PARAM2_: _PARAM3_":"启用四角形关节_PARAM2_的限制:_PARAM3_","Prismatic joint limits":"棱柱关节限制","Modify a prismatic joint limits.":"修改棱柱关节限制。","Set the limits to _PARAM3_;_PARAM4_ for prismatic joint _PARAM2_":"将四角形关节_PARAM2_的限制设置为_PARAM3 _; _ PARAM4_","Minimum translation":"最小平移","Maximum translation":"最大平移","Prismatic joint minimum translation":"棱柱形联合最小平移","Prismatic joint maximum translation":"棱柱形联合最大平移","Prismatic joint motor enabled":"启用棱镜关节动力","Check if a prismatic joint motor is enabled.":"检查棱柱关节电机是否启用。","Motor for prismatic joint _PARAM2_ is enabled":"启用了用于四角关节_PARAM2_的动力","Enable prismatic joint motor":"启用棱柱关节动力","Enable or disable a prismatic joint motor.":"启用或禁用棱柱关节动力。","Enable motor for prismatic joint _PARAM2_: _PARAM3_":"启用用于方形关节_PARAM2_的动力:_PARAM3_","Prismatic joint motor speed":"棱镜关节动力转速","Modify a prismatic joint motor speed.":"修改棱柱关节动力的速度。","the motor force for prismatic joint _PARAM2_":"棱柱关节_PARAM2_的动力","Prismatic joint max motor force":"棱柱关节最大动力","Modify a prismatic joint maximum motor force.":"修改棱柱形接头的最大动力。","the maximum motor force for prismatic joint _PARAM2_":"棱柱关节_PARAM2_的动力","Prismatic joint maximum motor force":"棱柱关节最大动力","Prismatic joint motor force":"棱柱关节动力","Add pulley joint":"添加滑轮接头","Add a pulley joint between two objects. Lengths are converted to meters using the world scale on X.":"在两个对象之间添加一个滑轮关节。使用X上的世界比例尺将长度转换为米。","Add a pulley joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之间添加滑轮关节","Joints ❯ Pulley":"关节 ❯ 滑轮","Ground anchor X for first object":"第一个对象的地面锚点 X","Ground anchor Y for first object":"第一个对象的地面锚点 Y","Ground anchor X for second object":"第二个对象的地面锚点 X","Ground anchor Y for second object":"第二个对象的地面锚点 Y","Length for first object (-1 to use anchor positions) (default: -1)":"第一个对象的长度 (-1 使用锚点位置) (默认: -1)","Length for second object (-1 to use anchor positions) (default: -1)":"第二个对象的长度 (-1 使用锚点位置) (默认: -1)","Ratio (non-negative) (default: 1":"比率(非负) (默认: 1","Pulley joint first ground anchor X":"滑轮关节第一个地面锚 X","Pulley joint first ground anchor Y":"滑轮关节第一个地面锚 Y","Pulley joint second ground anchor X":"滑轮关节第二地面锚 X","Pulley joint second ground anchor Y":"滑轮关节第二地面锚 Y","Pulley joint first length":"滑轮关节第一长度","Pulley joint second length":"滑轮关节第二长度","Pulley joint ratio":"滑轮关节比率","Add gear joint":"添加齿轮关节","Add a gear joint between two joints. Attention: Gear joints require the joints to be revolute or prismatic, and both of them to be attached to a static body as first object.":"在两个关节之间添加一个齿轮关节。注意:齿轮关节要求关节是旋转的或棱柱形的,并且两者都必须作为第一个对象附着到静态物体上。","Add a gear joint between joints _PARAM2_ and _PARAM3_":"在关节_PARAM2_和_PARAM3_之间添加齿轮关节","Joints ❯ Gear":"关节 ❯ 齿轮","First joint ID":"第一个关节 ID","Second joint ID":"第二个关节 ID","Ratio (non-zero) (default: 1)":"比率(非零) (默认值:1)","Gear joint first joint":"齿轮关节第一个关节","Gear joint second joint":"齿轮关节第二个关节","Gear joint ratio":"齿轮关节比例","Modify a Gear joint ratio.":"修改齿轮关节比例。","the ratio for gear joint _PARAM2_":"齿轮关节比例_PARAM2_","Add mouse joint":"添加鼠标关节","Add a mouse joint to an object (makes the object move towards a specific point).":"向对象添加鼠标关节(使对象移向特定点)。","Add a mouse joint to _PARAM0_":"将鼠标关节添加到_PARAM0_","Joints ❯ Mouse":"关节 ❯ 鼠标","Target X":"目标x","Target Y":"目标y","Maximum force (N) (non-negative) (default: 500)":"最大力量(N) (非负) (默认:500)","Frequency (Hz) (positive) (default: 10)":"频率(Hz) (正值) (默认:10)","Mouse joint target":"鼠标关节目标","Set a mouse joint target.":"设置鼠标关节目标。","Set the target position of mouse joint _PARAM2_ of _PARAM0_ to _PARAM3_;_PARAM4_":"将_PARAM0_的鼠标关节_PARAM2_的目标位置设置为_PARAM3 _; _ PARAM4_","Mouse joint target X":"鼠标关节目标 X","Mouse joint target Y":"鼠标关节目标 Y","Mouse joint max force":"鼠标关节最大力量","Set a mouse joint maximum force.":"设置鼠标关节的最大力量。","the maximum force for mouse joint _PARAM2_":"鼠标关节_PARAM2_的最大作用力","Mouse joint maximum force":"鼠标关节最大力量","Mouse joint frequency":"鼠标关节频率","Set a mouse joint frequency.":"设置鼠标关节频率。","the frequency for mouse joint _PARAM2_":"鼠标关节 _PARAM2_ 的频率","Mouse joint damping ratio":"鼠标关节阻尼比","Set a mouse joint damping ratio.":"设置鼠标关节阻尼比。","the damping ratio for mouse joint _PARAM2_":"鼠标关节_PARAM2_ 的阻尼比","Add wheel joint":"添加车轮关节","Add a wheel joint between two objects. Higher frequencies means higher suspensions. Damping determines oscillations, critical damping of 1 means no oscillations.":"在两个对象之间添加一个车轮关节。较高的频率意味着较高的悬挂。阻尼确定振荡,临界阻尼为1表示无振荡。","Add a wheel joint between _PARAM0_ and _PARAM4_":"在 _PARAM0_ 和 _PARAM4_ 之间添加车轮关节","Joints ❯ Wheel":"关节 ❯ 车轮","Frequency (Hz) (non-negative) (default: 10)":"频率(Hz) (非负) (默认:10)","Wheel joint axis angle":"车轮关节轴角度","Wheel joint current translation":"车轮关节当前平移","Wheel joint current speed":"车轮关节电流速度","Wheel joint speed":"车轮关节速度","Wheel joint motor enabled":"车轮关节动力已启用","Check if a wheel joint motor is enabled.":"检查车轮接头电机是否启用。","Motor for wheel joint _PARAM2_ is enabled":"车轮关节动力_PARAM2_ 已启用","Enable wheel joint motor":"启用车轮关节动力","Enable or disable a wheel joint motor.":"启用或禁用车轮关节动力。","Enable motor for wheel joint _PARAM2_: _PARAM3_":"启用车轮关节_PARAM2_的动力: _PARAM3_","Wheel joint motor speed":"车轮关节动力速度","Modify a wheel joint motor speed.":"修改车轮关节动力速度。","the motor speed for wheel joint _PARAM2_":"车轮关节的动力速度 _PARAM2_","Wheel joint max motor torque":"车轮关节最大动力扭矩","Modify a wheel joint maximum motor torque.":"修改车轮关节最大动力扭矩。","the maximum motor torque for wheel joint _PARAM2_":"车轮关节最大动力扭矩 _PARAM2_","Wheel joint maximum motor torque":"车轮关节最大动力扭矩","Wheel joint motor torque":"车轮关节动力扭矩","Wheel joint frequency":"车轮关节频率","Modify a wheel joint frequency.":"修改车轮关节动力频率。","the frequency for wheel joint _PARAM2_":"车轮关节的频率 _PARAM2_","Wheel joint damping ratio":"车轮关节阻尼比","Modify a wheel joint damping ratio.":"修改车轮关节阻尼比","the damping ratio for wheel joint _PARAM2_":"车轮关节的阻尼比 _PARAM2_","Add weld joint":"添加焊接关节","Add a weld joint between two objects.":"在两个对象之间添加一个焊接的关节。","Add a weld joint between _PARAM0_ and _PARAM4_":"在 _PARAM0_ 和 _PARAM4_ 之间添加一个焊接关节","Joints ❯ Weld":"关节 ❯ 焊接","Weld joint reference angle":"焊接关节参考角度","Weld joint frequency":"焊接关节频率","Modify a weld joint frequency.":"修改焊接关节频率。","the frequency for weld joint _PARAM2_":"焊接关节 _PARAM2_ 的频率","Weld joint damping ratio":"焊接关节阻尼比","Modify a weld joint damping ratio.":"修改焊接关节阻尼比。","the damping ratio for weld joint _PARAM2_":"焊接关节 _PARAM2_ 的阻尼比","Add rope joint":"添加绳索关节","Add a rope joint between two objects. The maximum length is converted to meters using the world scale on X.":"在两个对象之间添加一个绳索关节。最大长度使用X上的世界标度转换为米。","Add a rope joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之间添加绳索关节","Joints ❯ Rope":"关节 ❯ 绳子","Maximum length (-1 to use current objects distance) (default: -1)":"最大长度 (-1 使用当前对象距离) (默认: -1)","Rope joint max length":"绳索关节最大长度","Modify a rope joint maximum length.":"修改绳索关节的最大长度。","the maximum length for rope joint _PARAM2_":"绳索关节_PARAM2_的最大长度","Rope joint maximum length":"绳索关节最大长度","Add friction joint":"添加摩擦关节","Add a friction joint between two objects.":"在两个对象之间添加摩擦关节。","Add a friction joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之间添加摩擦关节","Joints ❯ Friction":"关节 ❯ 摩擦力","Maximum force (non-negative)":"最大力量(非负)","Maximum torque (non-negative)":"最大扭矩(非负)","Friction joint max force":"摩擦关节最大力量","Modify a friction joint maximum force.":"修改摩擦关节的最大力量。","the maximum force for friction joint _PARAM2_":"摩擦关节_PARAM2_的最大力量","Friction joint maximum force":"摩擦关节最大力量","Friction joint max torque":"摩擦关节最大扭矩","Modify a friction joint maximum torque.":"修改摩擦关节的最大扭矩。","the maximum torque for friction joint _PARAM2_":"摩擦关节_PARAM2_的最大扭矩","Friction joint maximum torque":"摩擦关节最大扭矩","Add motor joint":"添加动力关节","Add a motor joint between two objects. The position and angle offsets are relative to the first object.":"在两个对象之间添加一个动力关节。位置和角度偏移是相对于第一个对象的。","Add a motor joint between _PARAM0_ and _PARAM2_":"在_PARAM0_和_PARAM2_之间添加动力关节","Joints ❯ Motor":"关节 ❯ 动力","Offset X position":"偏移X位置","Offset Y position":"偏移 Y 位置","Offset Angle":"偏移角度","Correction factor (default: 1)":"校正系数 (默认: 1)","Motor joint offset":"动力关节偏移","Modify a motor joint offset.":"修改动力关节偏移。","Set offset to _PARAM3_;_PARAM4_ for motor joint _PARAM2_":"将动力关节_PARAM2_的偏移设置为_PARAM3 _; _ PARAM4_","Offset X":"偏移 X","Offset Y":"偏移Y","Motor joint offset X":"动力关节偏移 X","Motor joint offset Y":"动力关节偏移 Y","Motor joint angular offset":"动力关节角度偏移","Modify a motor joint angular offset.":"修改动力关节角度偏移。","the angular offset for motor joint _PARAM2_":"动力关节_PARAM2_的角度偏移","Motor joint max force":"动力关节最大力量","Modify a motor joint maximum force.":"修改动力关节的最大力量。","the maximum force for motor joint _PARAM2_":"动力关节_PARAM2_的最大力量","Motor joint maximum force":"动力关节最大力量","Motor joint max torque":"动力关节最大扭矩","Modify a motor joint maximum torque.":"修改动力关节的最大扭矩。","the maximum torque for motor joint _PARAM2_":"动力关节_PARAM2_的最大扭矩","Motor joint maximum torque":"动力关节最大扭矩","Motor joint correction factor":"动力关节校正系数","Modify a motor joint correction factor.":"修改动力关节校正系数。","the correction factor for motor joint _PARAM2_":"动力关节_PARAM2_的校正系数","Check if two objects collide.":"检查两个对象是否相撞。","_PARAM0_ is colliding with _PARAM2_":"_PARAM0_与_PARAM2_发生冲突","Collision started":"碰撞开始","Check if two objects just started colliding during this frame.":"检查两个对象是否在此帧期间开始碰撞。","_PARAM0_ started colliding with _PARAM2_":"_PARAM0_ 开始与 _PARAM2_ 碰撞","Collision stopped":"碰撞已停止","Check if two objects just stopped colliding at this frame.":"检查两个对象是否在此帧处停止碰撞","_PARAM0_ stopped colliding with _PARAM2_":"_PARAM0_ 停止与 _PARAM2_ 碰撞","Allow your game to send scores to your leaderboards (anonymously or from the logged-in player) or display existing leaderboards to the player.":"允许您的游戏将分数发送到您的排行榜(匿名或来自已登录的玩家),或向玩家显示现有的排行榜。","Save player score":"保存玩家分数","Save the player's score to the given leaderboard. If the player is connected, the score will be attached to the connected player (unless disabled).":"将玩家的分数保存到给定的排行榜中。如果玩家已连接,分数将附加到已连接的玩家 (除非禁用)。","Send to leaderboard _PARAM1_ the score _PARAM2_ with player name: _PARAM3_":"将分数 _PARAM2_ 发送到排行榜_PARAM1_,玩家名称:_PARAM3_","Save score":"保存分数","Score to register for the player":"要注册玩家的得分","Name to register for the player":"要注册玩家的名称","Leave this empty to let the leaderboard automatically generate a player name (e.g: \"Player23464\"). You can configure this in the leaderboard administration.":"将此字段留空,让排行榜自动生成玩家名称(例如:\"Player23464\")。您可以在排行榜管理中进行配置。","Save connected player score":"保存已连接的玩家分数","Save the connected player's score to the given leaderboard.":"将所连接的玩家的得分保存到给定的排行榜。","Send to leaderboard _PARAM1_ the score _PARAM2_ for the connected player":"将已连接玩家的分数 _PARAM2_ 发送到排行榜_PARAM1_","Always attach scores to the connected player":"始终将分数附加到连接的玩家","Set if the score sent to a leaderboard is always attached to the connected player - if any. This is on by default.":"设置发送到排行榜的分数是否总是与连接的玩家相关联-如果有的话。默认情况下,这是开启的。","Always attach the score to the connected player: _PARAM1_":"始终将分数附加到连接的玩家:_PARAM1_","Enable?":"启用?","Last score save has errored":"上次的分数保存已经丢失","Check if the last attempt to save a score has errored.":"检查最后一次保存分数的尝试是否已失效。","Last score save in leaderboard _PARAM0_ has errored":"在排行榜_PARAM0_ 保存的最后得分已经丢失","If no leaderboard is specified, will return the value related to the last leaderboard save action.":"如果没有指定排行榜,将返回与最后一个排行榜相关的值保存操作。","Last score save has succeeded":"上次成绩保存成功","Check if the last attempt to save a score has succeeded.":"检查最后一次试图保存分数是否成功。","Last score save in leaderboard _PARAM0_ has succeeded":"在排行榜_PARAM0_ 保存的最后分数已成功","If no leaderboard is specified, will return the value related to the last leaderboard save action that successfully ended.":"如果没有指定排行榜,将返回与最后一个排行榜相关的值,这些操作已成功结束。","Score is saving":"正在保存得分","Check if a score is currently being saved in leaderboard.":"检查是否正在将分数保存在排行榜中。","Score is saving in leaderboard _PARAM0_":"分数保存到排行榜_PARAM0_","Closed by player":"由玩家关闭","Check if the player has just closed the leaderboard view.":"检查玩家是否刚刚关闭了排行榜视图。","Player has just closed the leaderboard view":"玩家刚刚关闭了排行榜视图","Display leaderboard":"显示排行榜","Error of last save attempt":"最后一次保存尝试出错","Get the error of the last save attempt.":"获取最后一次保存尝试的错误。","Leaderboard display has errored":"排行榜显示已擦除","Check if the display of the leaderboard errored.":"检查排行榜显示是否失效。","Leaderboard display has loaded":"排行榜显示已加载","Check if the display of the leaderboard has finished loading and been displayed on screen.":"检查排行榜显示是否已完成加载并显示在屏幕上。","Leaderboard display has loaded and is displayed on screen":"排行榜显示已加载并显示在屏幕上","Leaderboard display is loading":"排行榜显示加载中","Check if the display of the leaderboard is loading.":"检查排行榜是否正在加载显示。","Format player name":"格式化玩家名称","Formats a name so that it can be submitted to a leaderboard.":"格式化名称以便可以提交给排行榜。","Raw player name":"原始玩家名称","Display the specified leaderboard on top of the game. If a leaderboard was already displayed on top of the game, the new leaderboard will replace it.":"在游戏顶部显示指定的排行榜。 如果排行榜已经显示在游戏顶端,新的排行榜将替换它。","Display leaderboard _PARAM1_ (display a loader: _PARAM2_)":"显示排行榜_PARAM1_ (显示加载器: _PARAM2_)","Display loader while leaderboard is loading":"当排行榜加载时显示加载器","Close current leaderboard":"关闭当前排行榜","Close the leaderboard currently displayed on top of the game.":"关闭当前游戏顶部显示的排行榜。","Close current leaderboard displayed on top of the game":"关闭游戏顶部显示的当前排行榜","Device sensors":"设备传感器","Allow the game to access the sensors of a mobile device.":"允许游戏访问移动设备的传感器。","Sensor active":"传感器激活","The condition is true if the device orientation sensor is currently active":"如果设备方向传感器当前处于活动状态,则条件为 true","Orientation sensor is active":"方向传感器已激活","Orientation":"方向","Compare the value of orientation alpha":"比较方向alpha的值","Compare the value of orientation alpha. (Range: 0 to 360°)":"比较方向alpha的值。 (范围:0至360°)","the orientation alpha":"方向alpha","Sign of the test":"测试的符号","Compare the value of orientation beta":"比较方向测试的值","Compare the value of orientation beta. (Range: -180 to 180°)":"比较定向位的值。(距离:-180至180度)","the orientation beta":"定向测试版","Compare the value of orientation gamma":"比较定向伽玛的值","Compare the value of orientation gamma. (Range: -90 to 90°)":"比较定向伽玛的值(距离: -90 到 90°)","the orientation gamma":"定向伽马","Activate orientation sensor":"激活方向传感器。","Activate the orientation sensor. (remember to turn it off again)":"激活方向传感器(请记住再次关闭它)","Activate the orientation sensor.":"激活方向传感器。","Deactivate orientation sensor":"停用方向传感器","Deactivate the orientation sensor.":"停用方向传感器。","Is Absolute":"绝对","Get if the devices orientation is absolute and not relative":"获取设备的绝对方向","Alpha value":"透明度","Get the devices orientation Alpha (compass)":"获取设备方向Alpha (指南针)","Beta value":"测试版值","Get the devices orientation Beta":"获取设备方向测试版","Gamma value":"伽玛值","Get the devices orientation Gamma value":"获取设备方向伽玛值","The condition is true if the device motion sensor is currently active":"如果设备移动传感器正在激活,条件为 true","Motion sensor is active":"运动传感器已激活","Motion":"运动","Compare the value of rotation alpha":"比较旋转alpha的值","Compare the value of rotation alpha. (Note: few devices support this sensor)":"比较旋转alpha的值。 (注意:很少有设备支持此传感器)","the rotation alpha":"旋转alpha","Value (m/s²)":"值 (m/s2)","Compare the value of rotation beta":"比较旋转测试版的值","Compare the value of rotation beta. (Note: few devices support this sensor)":"比较旋转位的值。(注意:支持此传感器的设备不多)","the rotation beta":"旋转测试版","Compare the value of rotation gamma":"比较旋转伽玛的值","Compare the value of rotation gamma. (Note: few devices support this sensor)":"比较旋转伽玛的值 (注意:支持此传感器的设备不多)","the rotation gamma":"旋转伽马","Compare the value of acceleration on X-axis":"比较X轴上加速度的值","Compare the value of acceleration on the X-axis (m/s²).":"比较X轴上的加速度值 (m/s2)。","the acceleration X":"加速度 X","Compare the value of acceleration on Y-axis":"比较Y-轴上加速度的值","Compare the value of acceleration on the Y-axis (m/s²).":"比较Y-轴上的加速度值 (m/s2)。","the acceleration Y":"加速度Y","Compare the value of acceleration on Z-axis":"比较Z轴上加速度的值","Compare the value of acceleration on the Z-axis (m/s²).":"比较Z轴上的加速度值 (m/s2)。","the acceleration Z":"加速度Z","Activate motion sensor":"激活运动传感器","Activate the motion sensor. (remember to turn it off again)":"激活运动传感器(请记住再次关闭它)","Activate the motion sensor.":"激活运动传感器。","Deactivate motion sensor":"停用运动传感器","Deactivate the motion sensor.":"停用运动传感器。","Get the devices rotation Alpha":"获取设备旋转 Alpha","Get the devices rotation Beta":"获取设备旋转 Beta","Get the devices rotation Gamma":"获取设备旋转 Gamma","Acceleration X value":"加速 X 值","Get the devices acceleration on the X-axis (m/s²)":"在X轴上加速设备 (m/s2)","Acceleration Y value":"加速 Y 值","Get the devices acceleration on the Y-axis (m/s²)":"获取设备在Y轴上的加速度(m /s²)","Acceleration Z value":"加速 Z 值","Get the devices acceleration on the Z-axis (m/s²)":"获得设备在Z轴上的加速度(m /s²)","Dialogue Tree":"对话树","Load dialogue tree from a scene variable":"从场景变量加载对话树","Load a dialogue data object - Yarn JSON format, stored in a scene variable. Use this command to load all the Dialogue data at the beginning of the game.":"加载对话数据对象 - Yarn JSON 格式,存储在场景变量中。使用此命令可在游戏开始时加载所有对话数据。","Load dialogue data from scene variable _PARAM0_":"从场景变量 _PARAM0_ 加载对话数据","Scene variable that holds the Yarn JSON data":"保存 Yarn JSON 数据的场景变量","Load dialogue tree from a JSON file":"从 JSON 文件加载对话树","Load a dialogue data object - Yarn JSON format, stored in a JSON file. Use this command to load all the Dialogue data at the beginning of the game.":"加载对话数据对象 - Yarn JSON 格式,存储在 JSON 文件中。使用此命令加载游戏开始时的所有对话数据。","Load dialogue data from JSON file _PARAM1_":"从 JSON 文件 _PARAM1_ 加载对话数据","JSON file that holds the Yarn JSON data":"保存 Yarn JSON 数据的 JSON 文件","Start dialogue from branch":"从分支开始对话","Start dialogue from branch. Use this to initiate the dialogue from a specified branch.":"从分支开始对话。用来启动指定分支的对话。","Start dialogue from branch _PARAM0_":"从分支 _PARAM0_ 开始对话","Dialogue branch":"对话分支","Stop running dialogue":"停止执行对话","Stop the running dialogue. Use this to interrupt dialogue parsing.":"停止正在运行的对话。用它来中断对话解析。","Go to the next dialogue line":"转到下一个对话行","Go to the next dialogue line. Use this to advance to the next dialogue line when the player presses a button.":"转到下一个对话线。当玩家按下按钮时,用它来推进到下一个对话线。","Confirm selected option":"确认选定的选项","Set the selected option as confirmed, which will validate it and go forward to the next node. Use other actions to select options (see \"select next option\" and \"Select previous option\").":"将选中的选项设置为已确认,将验证它,并转到下一个节点。 使用其他动作选择选项(见\"选择下一个选项\"和\"选择上一个选项\")。","Select next option":"选择下一个选项","Select next option (add 1 to selected option number). Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"选择下一个选项 (将所选选项编号加 1)。当对话类型为“选项”且玩家按下按钮更改所选选项时使用此选项。","Select previous option":"选择上一个选项","Select previous option (subtract 1 from selected option number). Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"选择上一个选项 (从所选选项编号中减 1)。当对话行类型为“选项”且玩家按下按钮更改所选选项时使用此选项。","Select option by number":"按编号选择选项","Select option by number. Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"按数字选择选项。当对话线为“选项”类型且播放器按下按钮以更改选中的选项时,使用此选项。","Select option at index _PARAM0_":"在索引 _PARAM0_ 选择选项","Option index number":"选项索引号","Scroll clipped text":"滚动剪切文本","Scroll clipped text. Use this with a timer and \"get clipped text\" when you want to create a typewriter effect. Every time the action runs, a new character appears from the text.":"滚动剪切的文本。当您想要创建打字机效果时,使用计时器和“获取剪切文本”。 每次动作运行时,文本中都会出现一个新字符。","Complete clipped text scrolling":"完成剪切文本滚动","Complete the clipped text scrolling. Use this action whenever you want to skip scrolling.":"完成剪切的文本滚动。当您想跳过滚动时使用此动作。","Set dialogue state string variable":"设置对话状态字符串变量","Set dialogue state string variable. Use this to set a variable that the dialogue data is using.":"设置对话状态字符串变量。使用此设置对话数据使用的变量。","Set dialogue state string variable _PARAM0_ to _PARAM1_":"将对话状态变量_PARAM0_ 设置为 _PARAM1_","State variable name":"状态变量名称","New value":"新值","Set dialogue state number variable":"设置对话状态变量","Set dialogue state number variable. Use this to set a variable that the dialogue data is using.":"设置对话状态变量。使用此设置对话数据使用的变量。","Set dialogue state number variable _PARAM0_ to _PARAM1_":"设置对话状态变量 _PARAM0_ 到 _PARAM1_","Set dialogue state boolean variable":"设置对话状态布尔变量","Set dialogue state boolean variable. Use this to set a variable that the dialogue data is using.":"设置对话状态布尔变量。使用此设置对话数据使用的变量。","Set dialogue state boolean variable _PARAM0_ to _PARAM1_":"设置对话状态布尔变量 _PARAM0_ 到 _PARAM1_","Save dialogue state":"保存对话状态","Save dialogue state. Use this to store the dialogue state into a variable, which can later be used for saving the game. That way player choices can become part of the game save.":"保存对话状态。用它来将对话状态存储为一个变量,这个变量以后可以用于保存游戏。 这样玩家的选择就可以成为游戏保存的一部分。","Save dialogue state to _PARAM0_":"将对话状态保存到 _PARAM0_","Global Variable":"全局变量","Load dialogue state":"加载对话状态","Load dialogue state. Use this to restore dialogue state, if you have stored in a variable before with the \"Save state\" action.":"加载对话状态,如果您在“保存状态”操作之前存储在一个变量中,则使用此恢复对话状态。","Load dialogue state from _PARAM0_":"从 _PARAM0_ 加载对话状态","Clear dialogue state":"清除对话状态","Clear dialogue state. This resets all dialogue state accumulated by the player choices. Useful when the player is starting a new game.":"清除对话状态。这将重置玩家选择的所有对话状态。当玩家开始新游戏时有用。","Get the current dialogue line text":"获取当前对话行文本","Returns the current dialogue line text":"返回当前对话行文本","Get the number of options in an options line type":"获取选项行类型中选项的数量","Get the text of an option from an options line type":"从选项行类型中获取选项的文本","Get the text of an option from an options line type, using the option's Number. The numbers start from 0.":"使用选项的编号从选项行类型中获取选项的文本。编号从 0 开始。","Option Index Number":"选项索引号","Get a Horizontal list of options from the options line type":"从选项行类型中获取选项的水平列表","Get the text of all available options from an options line type as a horizontal list. You can also pass the selected option's cursor string, which by default is ->":"从选项行类型中获取所有可用选项的文本作为水平列表。您还可以传递所选选项的光标字符串,默认情况下为 ->","Options Selection Cursor":"选项选择光标","Get a Vertical list of options from the options line type":"从选项行类型中获取选项的垂直列表","Get the text of all available options from an options line type as a vertical list. You can also pass the selected option's cursor string, which by default is ->":"从选项行类型中获取所有可用选项的文本作为垂直列表。您还可以传递所选选项的光标字符串,默认情况下为 ->","Get the number of the currently selected option":"获取当前选中选项的数量","Get the number of the currently selected option. Use this to help you render the option selection marker at the right place.":"获取当前选中选项的数量。使用此选项可以帮助您在正确的地方呈现选项的选择标记。","Get dialogue line text clipped":"获得剪切的对话行文本","Get dialogue line text clipped by the typewriter effect. Use the \"Scroll clipped text\" action to control the typewriter effect.":"获取被打字机效果剪切的对话行文本。使用“滚动剪切的文本”操作来控制打字机效果。","Get the title of the current branch of the running dialogue":"获取当前对话分支的标题","Get the tags of the current branch of the running dialogue":"获取当前对话分支的标签","Get a tag of the current branch of the running dialogue via its index":"通过其索引获取当前对话分支的标签","Tag Index Number":"标签索引编号","Get the parameters of a command call":"获取命令调用的参数","Get the parameters of a command call - <>":"获取命令调用的参数 - <>","parameter Index Number":"参数索引编号","Get the number of parameters in the currently passed command":"获取当前传递命令中的参数数","Get parameter from a Tag found by the branch contains tag condition":"从分支中找到的标签获取参数包含标签条件","Get a list of all visited branches":"获取所有已访问分支的列表","Get the full raw text of the current branch":"获取当前分支的原始文本","Get the number stored in a dialogue state variable":"获取存储在对话状态变量中的数字","Dialogue state variable name":"对话状态变量名称","Get the string stored in a dialogue state variable":"获取存储在对话状态变量中的字符串","Command is called":"命令被调用","Check if a specific Command is called. If it is a <>, you can even get the parameter with the CommandParameter expression.":"检查指定的命令是否被调用。如果它是 <>,您甚至可以使用命令参数表达式获取参数。","Command <<_PARAM0_>> is called":"命令 <_PARAM0_>被调用","Command String":"命令字符串","Dialogue line type":"对话线类型","Check if the current dialogue line line is one of the three existing types. Use this to set what logic is executed for each type.\nThe three types are as follows:\n- text: when displaying dialogue text.\n- options: when displaying [[branching/options]] for dialogue choices.\n-command: when <> are triggered by the dialogue data.":"检查当前对话行是否为现有三种类型之一。使用此设置每种类型执行的逻辑。\n三种类型如下:\n- 文本:当显示对话文本时。\n- 选项:当显示 [[分支/选项]] 对话选择时,\n-命令:<> 是由对话数据触发的。","The dialogue line is _PARAM0_":"对话线是 _PARAM0_","type":"类型","Dialogue is running":"对话正在运行","Check if the dialogue is running. Use this to for things like locking the player movement while speaking with a non player character.":"检查对话是否正在运行。用它来锁定玩家运动等事项与非玩家角色交谈。","Dialogue has branch":"对话有分支","Check if the dialogue has a branch with specified name. Use this to check if a dialogue branch exists in the loaded dialogue data.":"检查对话是否具有指定名称的分支。使用此来检查对话分支是否存在于加载对话数据中。","Dialogue has a branch named _PARAM0_":"对话有一个分支,名称为 _PARAM0_","Branch name":"分支名称","Has selected option changed":"已更改所选选项","Check if a selected option has changed when the current dialogue line type is options. Use this to detect when the player has selected another option, so you can re-draw where the selection arrow is.":"检查当当前对话行类型为选项时选中的选项是否已更改。 当玩家选择了另一个选项时使用此选项来检测,所以您可以重新绘制选中箭头的位置。","Selected option has changed":"所选选项已更改","Current dialogue branch title":"当前对话处标题","Check if the current dialogue branch title is equal to a string. Use this to trigger game events when the player has visited a specific dialogue branch.":"检查当前对话分支标题是否等于字符串。 当玩家访问特定对话分支时,用它来触发游戏事件。","The current dialogue branch title is _PARAM0_":"当前对话分支标题是 _PARAM0_","title name":"标题名称","Current dialogue branch contains a tag":"当前对话处包含一个标签","Check if the current dialogue branch contains a specific tag. Tags are an alternative useful way to <> to drive game logic with the dialogue data.":"检查当前对话分支是否包含一个特定标签。 标签是用对话数据驱动游戏逻辑的 <> 的另一种有用方式。","The current dialogue branch contains a _PARAM0_ tag":"当前对话分支包含 _PARAM0_ 标签","tag name":"标签名称","Branch title has been visited":"已访问分支标题","Check if a branch has been visited":"检查分支是否已被访问","Branch title _PARAM0_ has been visited":"分支标题 _PARAM0_ 已被访问","branch title":"分支标题","Compare dialogue state string variable":"比较对话状态字符串变量","Compare dialogue state string variable. Use this to trigger game events via dialogue variables.":"比较对话状态字符串变量。通过对话变量来触发游戏事件。","Dialogue state string variable _PARAM0_ is equal to _PARAM1_":"对话状态字符串变量 _PARAM0_ 等于 _PARAM1_","State variable":"状态变量","Equal to":"等于","Compare dialogue state number variable":"比较对话状态变量","Compare dialogue state number variable. Use this to trigger game events via dialogue variables.":"比较对话状态变量。通过对话变量来触发游戏事件。","Dialogue state number variable _PARAM0_ is equal to _PARAM1_":"对话状态变量 _PARAM0_ 等于 _PARAM1_","Compare dialogue state boolean variable":"比较对话状态布尔变量","Compare dialogue state variable. Use this to trigger game events via dialogue variables.":"比较对话状态变量。通过对话变量来触发游戏事件。","Dialogue state boolean variable _PARAM0_ is equal to _PARAM1_":"对话状态变量 _PARAM0_ 等于 _PARAM1_","Clipped text has completed scrolling":"片段文本已完成滚动","Check if the clipped text scrolling has completed. Use this to prevent the player from going to the next dialogue line before the typing effect has revealed the entire text.":"检查剪切的文本滚动是否已完成。 用它来防止玩家在输入效果显示整个文本之前前往下一个对话线。","P2P":"P2P","Event triggered by peer":"对等点触发的事件","Triggers once when a connected client sends the event":"当一个连接的客户端发送事件时触发一次","Event _PARAM0_ received from other client (data loss: _PARAM1_)":"从其他客户端收到事件 _PARAM0_ (数据丢失: _PARAM1_)","Event name":"事件名称","Data loss allowed?":"允许丢失数据?","Is P2P ready":"P2P 已准备好","True if the peer-to-peer extension initialized and is ready to use.":"如果对等点扩展初始化并准备使用,则为真。","Is P2P ready?":"P2P准备好了吗?","An error occurred":"发生错误","Triggers once when an error occurs. Use P2P::GetLastError() expression to get the content of the error if you want to analyse it or display it to the user.":"发生错误时触发一次。 使用 P2P::GetLastError() 表达式来获取错误的内容,如果您想要分析它或向用户显示它。","P2P error occurred":"发生P2P错误","Peer disconnected":"节点断开连接","Triggers once when a peer disconnects.":"当对等点断开连接时触发一次。","P2P peer disconnected":"P2P 对等点断开连接","Peer Connected":"对等点已连接","Triggers once when a remote peer initiates a connection.":"当远程对方启动连接时触发一次。","P2P peer connected":"已连接 P2P 节点","Connect to another client":"连接到另一个客户端","Connects the current client to another client using its id.":"使用其ID连接当前客户端到另一个客户端。","Connect to P2P client _PARAM0_":"连接到 P2P 客户端 _PARAM0_","ID of the other client":"其他客户端的 ID","Connect to a broker server":"连接到代理服务器","Connects the extension to a broker server.":"将扩展连接到代理服务器。","Connect to the broker server at http://_PARAM0_:_PARAM1_/":"连接到代理服务器:http://_PARAM0_:_PARAM1_/","Host":"主机","Port":"端口","Path":"路径","SSl enabled?":"启用SSL?","Use a custom ICE server":"使用自定义的 ICE 服务器","Disables the default ICE (STUN or TURN) servers list and use one of your own. Note that it is recommended to add at least 1 self-hosted STUN and TURN server for games that are not over LAN but over the internet. This action can be used multiple times to add multiple servers. This action needs to be called BEFORE connecting to the broker server.":"禁用默认ICE(STUN or TURN)服务器列表,并使用您自己的服务器。请注意,对于不是通过LAN而是通过internet的游戏,建议至少添加一个自托管的STUN和TURN服务器。此操作可多次用于添加多个服务器。在连接到代理服务器之前,需要调用此操作。","Use ICE server _PARAM0_ (username: _PARAM1_, password: _PARAM2_)":"使用 ICE 服务器 _PARAM0_ (用户名: _PARAM1_, 密码: _PARAM2_)","URL to the ICE server":"ICE 服务器的 URL","(Optional) Username":"(可选) 用户名","(Optional) Password":"(可选) 密码","Disable IP address sharing":"禁用 IP 地址共享","Disables the sharing of IP addresses with the other peers. This action needs to be called BEFORE connecting to the broker server.":"禁止与其他对等方共享 IP 地址。需要在连接到代理服务器之前调用此操作。","Disable IP sharing: _PARAM0_":"禁用IP共享:_PARAM0_","Disable sharing of IP addresses":"禁用 IP 地址共享","Connect to the default broker server":"连接到默认代理服务器","Connects to the default broker server.":"连接到默认代理服务器。","Override the client ID":"覆盖客户端 ID","Overrides the client ID of the current game instance with a specified ID. Must be called BEFORE connecting to a broker.":"使用特定 ID 覆盖游戏实例的客户端 ID。必须在连接至代理前调用。","Override the client ID with _PARAM0_":"以 _PARAM0_ 覆盖客户端 ID","ID":"ID","Trigger event on all connected clients":"触发所有已连接客户端的事件","Triggers an event on all connected clients":"在所有已连接的客户端触发事件","Trigger event _PARAM0_ on all connected clients (extra data: _PARAM1_)":"在所有已连接客户端上触发事件 _PARAM0_ (额外数据: _PARAM1_)","Extra data (optional)":"额外数据(可选)","Trigger event on a specific client":"对特定客户端触发事件","Triggers an event on a specific connected client":"在特定连接的客户端触发事件","Trigger event _PARAM1_ on client _PARAM0_ (extra data: _PARAM2_)":"在客户端 _PARAM0_ 触发事件 _PARAM1_ (额外数据: _PARAM2_)","Trigger event on all connected clients (variable)":"触发所有已连接客户端的事件(变量)","Variable containing the extra data":"包含额外数据的变量","Trigger event on a specific client (variable)":"触发特定客户端的事件(变量)","Get event data (variable)":"获取事件数据(变量)","Store the data of the specified event in a variable. Check in the conditions that the event was received using the \"Event received\" condition.":"将指定事件的数据存储在一个变量中。请检查事件收到的条件使用\"事件收到\"。","Overwrite _PARAM1_ with variable sent with last trigger of _PARAM0_":"以 _PARAM0_ 最后一次触发的变量覆盖_PARAM1_","Variable where to store the received data":"存储收到数据的变量","Disconnect from a peer":"断开与同伴的连接","Disconnects this client from another client.":"断开此客户端与其他客户端的连接。","Disconnect from client _PARAM0_":"从客户端 _PARAM0_ 断开连接","Disconnect from all peers":"断开与所有同伴的连接","Disconnects this client from all other clients.":"断开此客户端与所有其他客户端的连接。","Disconnect from all clients":"断开所有客户端的连接","Disconnect from broker":"断开与代理的连接","Disconnects the client from the broker server.":"断开客户端与代理服务器的连接。","Disconnect the client from the broker":"断开客户端与代理的连接","Disconnect from all":"断开所有连接","Disconnects the client from the broker server and all other clients.":"断开客户端与代理服务器和所有其他客户端的连接。","Disconnect the client from the broker and other clients":"断开客户端与代理和其他客户端的连接","Get event data":"获取事件数据","Returns the data received when the specified event was last triggered":"返回指定事件最后一次触发时收到的数据","Get event sender":"获取事件发送者","Returns the id of the peer that triggered the event":"返回触发事件的对等方的ID","Get client ID":"获取客户端 ID","Gets the client ID of the current game instance":"获取当前游戏实例的客户端 ID","Get last error":"得到最后一个错误","Gets the description of the last P2P error":"获取最后一个 P2P 错误的描述","Get last disconnected peer":"获取最后一个断开的对等点","Gets the ID of the latest peer that has disconnected.":"获取已断开连接的最新对等点的 ID。","Get ID of the connected peer":"获取已连接对等点的 ID","Gets the ID of the newly connected peer.":"获取新连接的对等点的 ID。","Steamworks (Steam) (experimental)":"Steamworks (Steam) (实验性)","Adds integrations for Steam's Steamworks game development SDK.":"为 Steam 的 Steamworks 游戏开发 SDK 添加集成。","Steam App ID":"Steam 应用程序 ID","Require Steam to launch the game":"要求Steam启动游戏","Claim achievement":"声称成就","Marks a Steam achievement as obtained. Steam will pop-up a notification with the achievement's data defined on the Steamworks partner website.":"将 Steam 成就标记为已获得。Steam 将弹出一条通知,其中包含 Steamworks 合作伙伴网站上定义的成就数据。","Claim steam achievement _PARAM0_":"领取 Steam 成就 _PARAM0_","Achievement ID":"成就 ID","Unclaim achievement":"撤销成就","Removes a player's Steam achievement.":"删除玩家的 Steam 成就。","Unclaim Steam achievement _PARAM0_":"取消 Steam 成就 _PARAM0_","Has achievement":"有成就","Checks if a player owns one of this game's Steam achievement.":"检查玩家是否拥有这个游戏的 Steam 成就之一。","Player has previously claimed the Steam achievement _PARAM0_":"玩家先前已经认领过 Steam 成就 _PARAM0_","Steam ID":"Steam ID","The player's unique Steam ID number. Note that it is too big a number to load correctly as a traditional number (\"floating point number\"), and must be used as a string.":"玩家的唯一 Steam ID 号。请注意,该数字太大,无法作为传统数字(“浮点数”)正确加载,并且必须用作字符串。","The player's registered name on Steam.":"玩家在 Steam 上的注册名称。","Country code":"国家代码","The player's country represented as its two-letter code.":"玩家所在的国家/地区用两个字母的代码表示。","Steam Level":"Steam 等级","Obtains the player's Steam level":"获得玩家 Steam 等级","Steam rich presence":"Steam 丰富存在","Changes an attribute of Steam's rich presence. Allows other player to see exactly what the player's currently doing in the game.":"改变了 Steam 丰富状态的一个属性。允许其他玩家准确地看到该玩家当前在游戏中正在做什么。","Set steam rich presence attribute _PARAM0_ to _PARAM1_":"设置蒸汽丰富状态属性 _PARAM0_ 到 _PARAM1_","Rich presence":"丰富状态","Is Steamworks Loaded":"Steamworks 是否已加载","Checks whether the Steamworks SDK could be properly loaded. If steam is not installed, the game is not running on PC, or for any other reason Steamworks features will not be able to function, this function will trigger allowing you to disable functionality that relies on Steamworks.":"检查Steamworks SDK是否可以正确加载。如果未安装 steam,游戏未在 PC 上运行,或者由于任何其他原因 Steamworks 功能将无法运行,则此功能将触发,允许您禁用依赖于 Steamworks 的功能。","Steamworks is properly loaded":"Steamworks 已正确加载","Utilities":"实用程序","Steam AppID":"Steam 应用程序 ID","Obtains the game's Steam app ID, as declared in the games properties.":"获取游戏的 Steam 应用程序 ID,如游戏属性中声明的那样。","Current time (from the Steam servers)":"当前时间 (来自Steam服务器)","Obtains the real current time from the Steam servers, which cannot be faked by changing the system time.":"从 Steam 服务器获取当前的真实时间,无法通过更改系统时间来伪造。","Is on Steam Deck":"在 Steam Deck 上","Checks whether the game is currently running on a Steam Deck or not.":"检查游戏当前是否正在 Steam Deck 上运行。","Game is running on a Steam Deck":"游戏正在 Steam Deck 上运行","Create a lobby":"创建一个大厅","Creates a new steam lobby owned by the player, for other players to join.":"创建一个由玩家拥有的新蒸汽大厅,供其他玩家加入。","Create a lobby visible to _PARAM0_ with max. _PARAM1_ players (store results in _PARAM2_)":"创建一个对 _PARAM0_ 可见的大厅,最多 _PARAM1_ 玩家 (将结果存储在 _PARAM2_ 中)","Matchmaking":"匹配","Get a list of lobbies":"获取大厅列表","Fills an array variable with a list of lobbies for the player to join.":"用供玩家要加入的大厅列表填充数组变量。","Fill _PARAM0_ with a list of lobbies":"用大厅列表填充 _PARAM0_","Join a lobby (by ID)":"加入一个大厅(通过 ID)","Join a Steam lobby, using its lobby ID.":"使用其大厅 ID 加入 Steam 大厅。","Join lobby _PARAM0_ (store result in _PARAM1_)":"加入大厅 _PARAM0_ (将结果存储在 _PARAM1_ 中)","Leave current lobby":"离开当前大厅","Marks the player as having left the current lobby.":"将玩家标记为已离开当前大厅。","Leave the current lobby":"离开当前大厅","Matchmaking ❯ Current lobby":"配对 ❯ 当前大厅","Open invite dialogue":"打开邀请对话","Opens the steam invitation dialogue to let the player invite their Steam friends to the current lobby. Only works if the player is currently in a lobby.":"打开 Steam 邀请对话框,让玩家邀请他们的 Steam 好友到当前大厅。仅当玩家当前位于大厅时才有效。","Open lobby invitation dialogue":"打开大厅邀请对话","Set a lobby attribute":"设置大厅属性","Sets an attribute of the current lobby. Attributes are readable to anyone that can see the lobby. They can contain public information about the lobby like a description, or for example a P2P ID for knowing where to connect to join this lobby.":"设置当前大厅的属性。任何可以看到大厅的人都可以读取属性。它们可以包含有关大厅的公共信息,例如描述,或者例如用于了解从哪里连接以加入该大厅的 P2P ID。","Set current lobby attribute _PARAM0_ to _PARAM1_ (store result in _PARAM2_)":"将当前大厅属性 _PARAM0_ 设置为 _PARAM1_ (将结果存储在 _PARAM2_ 中)","Set the lobby joinability":"设置大厅可连接性","Sets whether other users can join the current lobby or not.":"设置其他用户是否可以加入当前大厅。","Make current lobby joinable: _PARAM0_ (store result in _PARAM1_)":"使当前大厅可加入: _PARAM0_ (将结果存储在 _PARAM1_ 中)","Get the lobby's members":"获取大厅的成员","Gets the Steam ID of all players in the current lobby.":"获取当前大厅中所有玩家的 Steam ID。","Store the array of all players in _PARAM0_":"将所有玩家的数组存储在 _PARAM0_ 中","Get a lobby's members":"获取大厅的成员","Gets the Steam ID of all players in a lobby.":"获取大厅中所有玩家的 Steam ID。","Store the array of all players of lobby _PARAM0_ in _PARAM1_":"将大厅 _PARAM0_ 的所有玩家的数组存储在 _PARAM1_ 中","Current lobby's ID":"当前大厅的 ID","The ID of the current lobby, useful for letting other players join it.":"当前大厅的 ID,用于让其他玩家加入它。","Attribute of the lobby":"大厅的属性","Obtains the value of one of the current lobby's attributes.":"获取当前大厅属性之一的值。","Member count of the lobby":"大厅的成员数","Obtains the current lobby's member count.":"获取当前大厅的成员数。","Member limit of the lobby":"大厅的成员限制","Obtains the current lobby's maximum member limit.":"获得当前大厅的最大成员限制。","Owner of the lobby":"大厅的主人","Obtains the Steam ID of the user that owns the current lobby.":"获取拥有当前大厅的用户的 Steam ID。","Attribute of a lobby":"大厅的属性","Obtains the value of one of a lobby's attributes.":"获取大厅属性之一的值。","Member count of a lobby":"大厅成员数量","Obtains a lobby's member count.":"获取大厅的成员数量。","Member limit of a lobby":"大厅的成员限制","Obtains a lobby's maximum member limit.":"获取大厅的最大成员限制。","Owner of a lobby":"大厅的主人","Obtains the Steam ID of the user that owns a lobby.":"获取拥有大厅的用户的 Steam ID。","Player owns an application":"玩家拥有一个应用程序","Checks if the current user owns an application on Steam.":"检查当前用户是否拥有 Steam 上的应用程序。","App _PARAM0_ owned on Steam":"Steam 上拥有的应用程序 _PARAM0_","Steam Apps":"Steam 应用程序","Player installed an application":"玩家安装了应用程序","Checks if the current user has a Steam application currently installed.":"检查当前用户当前是否安装了 Steam 应用程序。","App _PARAM0_ installed from Steam":"从 Steam 安装的应用程序 _PARAM0_","Player installed DLC":"玩家安装的 DLC","Checks if the current user has installed a piece of DLC.":"检查当前用户是否安装了 DLC。","DLC _PARAM0_ installed from Steam":"从 Steam 安装 DLC _PARAM0_","Get installed app path":"获取已安装的应用程序路径","Gets the path to an installed Steam application.":"获取已安装的 Steam 应用程序的路径。","Player has a VAC ban":"玩家已被 VAC 封禁","Checks if the current user has a VAC ban on their account.":"检查当前用户的帐户是否受到 VAC 禁令。","Player cannot be exposed to violence":"玩家不能遭受暴力","Checks if the current user may only be exposed to low violence, due to e.g. their age and content restrictions in their country.":"检查当前用户是否可能仅因年龄和所在国家/地区的内容限制而遭受低度暴力。","Player bought the game":"玩家购买了游戏","Checks if the current user actually bought & owns the game. If the \"Require Steam\" checkbox has been checked in the game properties, this will always be true as Steam will not allow to launch the game if it is not owned. Can be used to display an anti-piracy message instead of straight up blocking the launch of the game.":"检查当前用户是否确实购买并拥有该游戏。如果在游戏属性中选中了“需要 Steam”复选框,则始终如此,因为如果游戏不被拥有,Steam 将不允许启动该游戏。可用于显示反盗版消息,而不是直接阻止游戏的启动。","Game language":"游戏语言","Gets the language the user set in the Steam game properties.":"获取用户在 Steam 游戏属性中设置的语言。","Current beta name":"当前测试版名称","Gets the name of the beta the player enrolled to in the Steam game properties.":"获取玩家在 Steam 游戏属性中注册的测试版名称。","Current app build ID":"当前应用程序构建 ID","Gets the ID of the current app build.":"获取当前应用程序构建的 ID。","Digital action activated":"数字动作已激活","Triggers when a digital action (a button that is either pressed or not) of a Steam Input controller has been triggered.":"当 Steam 输入控制器的数字动作 (按下或未按下的按钮) 被触发时触发。","Digital action _PARAM1_ of controller _PARAM0_ has been activated":"控制器 _PARAM0_ 的数字动作 _PARAM1_ 已激活","Activate an action set":"激活动作集","Activates a Steam Input action set of a Steam Input controller.":"激活 Steam 输入控制器的 Steam 输入动作集。","Activate action set _PARAM1_ of controller _PARAM0_":"激活控制器 _PARAM0_ 的动作集 _PARAM1_","Controller count":"控制器计数","The amount of connected Steam Input controllers.":"已连接的 Steam 输入控制器的数量。","Analog X-Action vector":"模拟X-动作向量","The action vector of a Steam Input analog joystick on the X-axis, from 1 (all right) to -1 (all left).":"X 轴上 Steam 输入模拟操纵杆的动作向量,从 1 (全部右侧) 到 -1 (全部左侧)。","Analog Y-Action vector":"模拟Y-动作向量","The action vector of a Steam Input analog joystick on the Y-axis, from 1 (all up) to -1 (all down).":"Y 轴上 Steam 输入模拟操纵杆的动作向量,从 1 (全部向上) 到 -1 (全部向下)。","Is Steam Cloud enabled?":"Steam 云是否已启用?","Checks whether steam cloud has been enabled or not for this application.":"检查该应用程序是否已启用 Steam 云。","Steam Cloud is enabled":"Steam 云已启用","Cloud Save":"云保存","File exists":"文件已存在","Checks if a file exists on Steam Cloud.":"检查 Steam 云上是否存在文件。","File _PARAM0_ exists on Steam Cloud":"文件 _PARAM0_ 存在于 Steam 云上","Write a file":"写一个文件","Writes a file onto the Steam Cloud.":"将文件写入 Steam 云。","Write _PARAM1_ into the file _PARAM0_ on Steam Cloud (store result in _PARAM2_)":"将 _PARAM1_ 写入 Steam 云上的文件 _PARAM0_ (将结果存储在 _PARAM2_ 中)","Deletes a file from the Steam Cloud.":"从 Steam 云中删除文件。","Delete file _PARAM0_ from Steam Cloud (store result in _PARAM1_)":"从 Steam 云删除文件 _PARAM0_ (将结果存储在 _PARAM1_ 中)","Read a file":"读取文件","Reads a file from Steam Cloud and returns its contents.":"从 Steam 云读取文件并返回其内容。","Create a Workshop item":"创建创意工坊项目","Creates an item owned by the current player on the Steam Workshop. This only assignes an ID to an item for the user - use the action \"Update workshop item\" to set the item data and upload the workshop file.":"在 Steam 创意工坊上创建当前玩家拥有的物品。这只会为用户的项目分配一个 ID - 使用“更新创意工坊项目”操作来设置项目数据并上传创意工坊文件。","Create a Workshop item and store its ID in _PARAM0_":"创建一个创意工坊项目并将其 ID 存储在 _PARAM0_ 中","Workshop":"创意工坊","Update a Workshop item":"更新创意工坊项目","Releases an update to a Workshop item owned by the player. If you leave a field empty, it will be kept unmodified as it was before the update.":"发布玩家拥有的创意工坊项目的更新。如果您将某个字段留空,它将保持更新前的状态不变。","Update the Workshop item _PARAM0_ with itemId title description changeNote previewPath contentPath tags visibility":"使用 itemId 标题描述更改创意工坊项目 _PARAM0_ 更改注释预览路径内容路径标签可见性","Workshop Item ID":"创意工坊项目 ID","Title":"标题","Changelog":"更新日志","Path to the preview image file":"预览图像文件的路径","Path to the file with the item's file":"包含项目文件的文件路径","Tags":"标签","Subscribe to a Workshop item":"订阅创意工坊项目","Makes the player subscribe to a workshop item. This will cause it to be downloaded and installed ASAP.":"使玩家订阅创意工坊项目。这将导致它被尽快下载并安装。","Subscribe to Workshop item _PARAM0_ (store result in _PARAM1_)":"订阅创意工坊项目 _PARAM0_ (将结果存储在 _PARAM1_ 中)","Unsubscribe to a Workshop item":"取消订阅创意工坊项目","Makes the player unsubscribe to a workshop item. This will cause it to removed after quitting the game.":"使玩家取消订阅创意工坊项目。这将导致它在退出游戏后被删除。","Unsubscribe to Workshop item _PARAM0_ (store result in _PARAM1_)":"取消订阅创意工坊项目 _PARAM0_ (将结果存储在 _PARAM1_ 中)","Download a Workshop item":"下载创意工坊项目","Initiates the download of a Workshop item now.":"立即开始下载创意工坊项目。","Start downloading workshop item _PARAM0_ now, pause other downloads: _PARAM1_":"立即开始下载创意工坊项目 _PARAM0_ ,暂停其他下载: _PARAM1_","Check workshop item state":"检查创意工坊项目状态","Check whether a state flag is set for a Workshop item.":"检查是否为创意工坊项目设置了状态标志。","Flag _PARAM1_ is set on Workshop item _PARAM0_":"创意工坊项目 _PARAM0_ 上设置了标志 _PARAM1_","Workshop item installation location":"创意工坊项目安装位置","The file path to the contents file of an installed workshop item.":"已安装创意工坊项目的内容文件的文件路径。","Workshop item size":"创意工坊项目大小","The size on disk taken by the contents file of an installed workshop item.":"已安装的创意工坊项目的内容文件在磁盘上占用的大小。","Workshop item installation time":"创意工坊项目安装时间","The timestamp of the last time the contents file of an installed workshop item was updated.":"上次更新已安装创意工坊项目的内容文件的时间戳。","Workshop item download progress":"创意工坊项目下载进度","The amount of data that has been downloaded by Steam for a currrently downloading item so far.":"目前为止 Steam 已下载的当前下载项目的数据量。","Workshop ❯ Download":"创意工坊 ❯ 下载","Workshop item download total":"创意工坊项目下载总数","The amount of data that needs to be downloaded in total by Steam for a currrently downloading item.":"对于当前下载的项目,Steam 总共需要下载的数据量。","BBCode Text Object":"BBCode 文本对象","BBCode text":"BBCode 文本","Base color":"基本颜色","Base size":"基本大小","Base alignment":" v","Visible on start":"从开始时可见","BBText":"BBText","Formatted text allowing to mix styles using BBCode markup.":"格式化文本,允许使用 BBCode 标记混合样式。","Compare the value of the BBCode text.":"比较BBCode文本的值。","the BBCode text":"BBCode 文本","Set BBCode text":"设置 BBCode 文本","Get BBCode text":"获取 BBCode 文本","Color (R;G;B)":"颜色 (R;G;B)","Set base color":"设置基本颜色","Set base color of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的基本颜色设置为 _PARAM1_","Compare the value of the base opacity of the text.":"比较文本基础不透明度的值。","the base opacity":"基础不透明度","Set base opacity":"设置基础不透明度","Get the base opacity":"获取基础不透明度","Compare the base font size of the text.":"比较文本的基本字体大小。","the base font size":"基本字体大小","Set base font size":"设置基本字体大小","Get the base font size":"获取基本字体大小","Font family":"字体系列","Compare the value of font family":"比较字体组的值","the base font family":"基本字体系列","Set font family":"设置字体系列","Get the base font family":"获取基本字体系列","Check the current text alignment.":"检查当前文本的对齐方式。","The text alignment of _PARAM0_ is _PARAM1_":"_PARAM0_ 的文本对齐是 _PARAM1_","Change the alignment of the text.":"更改文本的对齐方式。","text alignment":"文本对齐","Get the text alignment":"获取文本对齐","Compare the width, in pixels, after which the text is wrapped on next line.":"比较宽度(以像素为单位),然后将文本换行到下一行。","Change the width, in pixels, after which the text is wrapped on next line.":"更改宽度(以像素为单位),然后将文本换行到下一行。","Get the wrapping width":"获取包装宽度","Screenshot":"屏幕快照","Take screenshot":"截图至PNG","Take a screenshot of the game, and save it to a png file (supported only when running on Windows/Linux/macOS).":"拍摄游戏的屏幕截图并将其保存到 png 文件(仅支持 Windows/Linux/macOS 平台)。","Take a screenshot and save at _PARAM1_":"截取屏幕并在 _PARAM1_ 保存","AdMob":"AdMob","Allow to display AdMob banners, app open, interstitials, rewarded interstitials and rewarded video ads.":"允许显示 AdMob 横幅广告、应用打开广告、插页式广告、插页式奖励广告和视频广告。","AdMob Android App ID":"AdMob Android App ID","AdMob iOS App ID":"AdMob iOS App ID","Enable test mode":"启用测试模式","Activate or deactivate the test mode (\"development\" mode).\nWhen activated, tests ads will be served instead of real ones.\n\nIt is important to enable test ads during development so that you can click on them without charging advertisers. If you click on too many ads without being in test mode, you risk your account being flagged for invalid activity.":"激活或停用测试模式 (\"开发\" 模式)。\n激活后,将提供测试广告而不是实际广告。\n\n在开发过程中启用测试广告非常重要,这样您就可以在没有收费广告商的情况下点击它们。 如果您点击过多的广告而不处于测试模式,您就有可能将您的帐户标记为无效的活动。","Enable test mode (serving test ads, for development): _PARAM0_":"启用测试模式(投放测试广告,以供开发):_PARAM0_","Enable test mode?":"启用测试模式?","Prevent AdMob auto initialization":"防止AdMob 自动初始化","Prevent AdMob from initializing automatically. You will need to call \"Initialize AdMob\" action manually.\nThis is useful if you want to control when the consent dialog will be shown (for example, after the user has accepted your game terms).":"防止AdMob自动初始化。您需要手动调用“初始化AdMob”操作。\n 这在您希望控制同意对话框显示的时间(例如,在用户接受游戏条款之后)时非常有用。","Initialize AdMob manually":"手动初始化 AdMob","Initialize AdMob manually. This will trigger the consent dialog if needed, and then load the ads.\nUse this action if you have disabled the auto init and want to control when the consent dialog will be shown.":"手动初始化AdMob。这将触发所需的同意对话框,然后加载广告。\n 如果您已禁用自动初始化并希望控制何时显示同意对话框,请使用此操作。","Initialize AdMob":"初始化 AdMob","AdMob initializing":"AdMob 正在初始化","Check if AdMob is initializing.":"检查 AdMob 是否正在初始化。","AdMob is initializing":"AdMob 正在初始化","AdMob initialized":"AdMob 已初始化","Check if AdMob has been initialized.":"检查 AdMob 是否已初始化。","AdMob has been initialized":"AdMob 已初始化","App open loading":"应用程序打开加载","Check if an app open is currently loading.":"检查打开的应用程序当前是否正在加载。","App open is loading":"打开的应用程序正在加载","App open ready":"应用程序打开就绪","Check if an app open is ready to be displayed.":"检查打开的应用程序是否已准备好显示。","App open is ready":"应用程序打开准备就绪","App open showing":"应用程序打开显示","Check if there is an app open being displayed.":"检查是否有打开的应用程序正在显示。","App open is showing":"应用程序打开显示","App open errored":"应用程序打开错误","Check if there was an error while loading the app open.":"检查打开应用程序加载时是否有错误。","App open had an error":"应用程序打开时出错","Load app open":"加载应用程序打开","Start loading an app open (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test app open will be displayed.":"开始加载一个打开的应用程序(当加载完成时可以自动显示)。如果设置了测试模式,将显示一个打开的测试应用程序。","Load app open with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (landscape: _PARAM2_, display automatically when loaded: _PARAM3_)":"加载应用打开,Android 广告单元 ID:_PARAM0_,iOS 广告单元 ID:_PARAM1_ (横向:_PARAM2_,加载时自动显示:_PARAM3_ )","Android app open ID":"Android 应用程序打开 ID","iOS app open ID":"iOS 应用程序打开 ID","Display in landscape? (portrait otherwise)":"横向显示?(否则为纵向)","Displayed automatically when loading is finished?":"加载完成时自动显示?","Show app open":"显示应用程序已打开","Show the app open that was loaded. Will work only when the app open is fully loaded.":"显示已加载的打开的应用程序。只有当应用程序打开完全加载时才会工作。","Show the loaded app open":"显示加载的应用程序打开","Banner showing":"横幅显示","Check if there is a banner being displayed.":"检查是否有横幅正在显示。","Banner is showing":"横幅正在显示","Banner configured":"横幅已配置","Check if there is a banner correctly configured ready to be shown.":"检查是否有正确配置的横幅可以显示。","Banner is configured":"横幅已配置","Banner loaded":"横幅已加载","Check if there is a banner correctly loaded ready to be shown.":"检查是否已正确加载准备显示的横幅。","Banner is loaded":"横幅已加载","Banner had an error":"横幅广告出现错误","Check if there was a error while displaying a banner.":"检查显示横幅广告时是否有错误。","Banner ad had an error":"横幅广告出现错误","Configure the banner":"配置横幅","Configure a banner, which can then be displayed.\nIf a banner is already displayed, it will be removed\nIf test mode is set, a test banner will be displayed.\n\nOnce a banner is positioned (at the top or bottom of the game), it can't be moved anymore.":"配置横幅,然后可以显示。\n如果横幅已经显示,它将被删除\n如果设置了测试模式,将显示测试横幅。\n\n一旦横幅被定位(在顶部或底部游戏),它不能再移动了。","Configure the banner with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_, display at top: _PARAM2_":"为横幅配置Android广告单元ID:_PARAM0_,iOS广告单元ID:_PARAM1_,顶部显示:_PARAM2_","Android banner ID":"安卓横幅ID","iOS banner ID":"iOS横幅ID","Display at top? (bottom otherwise)":"置顶显示?(否则置底)","Show banner":"显示横幅广告","Show the banner that was previously set up.":"显示先前设置的横幅。","Hide banner":"隐藏横幅广告","Hide the banner. You can show it again with the corresponding action.":"隐藏横幅。您可以通过相应的操作再次显示它。","Interstitial loading":"插页式广告","Check if an interstitial is currently loading.":"检查是否正在加载插页式广告。","Interstitial is loading":"插页式广告正在加载","Interstitial ready":"插页式广告就绪","Check if an interstitial is ready to be displayed.":"检查是否可以显示插页式广告。","Interstitial is ready":"插页式广告已准备就绪","Interstitial showing":"插页式广告","Check if there is an interstitial being displayed.":"检查是否显示插页式广告。","Interstitial is showing":"插页式广告显示","Interstitial had an error":"插页式广告有错误","Check if there was a error while loading the interstitial.":"加载插页式广告时检查是否有错误。","Interstitial ad had an error":"插页式广告出错","Load interstitial":"加载插页式广告","Start loading an interstitial (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test interstitial will be displayed.":"开始加载插页式广告(加载完成后会自动显示)。\n如果设置了测试模式,则会显示测试插页式广告。","Load interstitial with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"使用Android广告单元ID:_PARAM0_,iOS广告单元ID:_PARAM1_加载非页内广告(加载后自动显示:_PARAM2_)","Android interstitial ID":"Android插页式广告ID","iOS interstitial ID":"iOS插页式广告ID","Show interstitial":"显示插页式广告","Show the interstitial that was loaded. Will work only when the interstitial is fully loaded.":"显示已加载的非页内广告。仅在插页式广告满载后才能使用。","Show the loaded interstitial":"显示已加载的非页内广告","Rewarded interstitial loading":"奖励插页式加载","Check if a rewarded interstitial is currently loading.":"检查奖励插页式广告当前是否正在加载。","Rewarded interstitial is loading":"奖励插页式广告正在加载","Rewarded interstitial ready":"奖励插页式广告就绪","Check if a rewarded interstitial is ready to be displayed.":"检查奖励插页式广告是否已准备好显示。","Rewarded interstitial is ready":"奖励插页式广告已准备就绪","Rewarded interstitial showing":"奖励插页式展示","Check if there is a rewarded interstitial being displayed.":"检查是否显示了奖励插页式广告。","Rewarded interstitial is showing":"奖励插页式广告正在展示","Rewarded interstitial had an error":"奖励插页式广告有错误","Check if there was a error while loading the rewarded interstitial.":"检查加载奖励插页式广告时是否有错误。","Rewarded Interstitial had an error":"奖励插页式广告有错误","Rewarded Interstitial reward received":"奖励插页式广告收到的奖励","Check if the reward of the rewarded interstitial was given to the user.\nYou can mark this reward as cleared, so that the condition will be false and you can show later another rewarded interstitial.":"检查是否已将奖励插页式广告的奖励提供给用户。\n您可以将此奖励标记为已清除,这样条件将为 false,稍后您可以显示另一个奖励插页式广告。","User got the reward of the rewarded interstitial (and clear this reward: _PARAM0_)":"用户获得了插屏奖励的奖励 (并清除此奖励:_PARAM0_)","Clear the reward (needed to show another rewarded interstitial)":"清除奖励 (需要显示另一个奖励插页)","Load rewarded interstitial":"加载奖励插页式广告","Start loading a rewarded interstitial (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test rewarded interstitial will be displayed.\nThis is similar to a rewarded video, but can be displayed at any time, and the user can close it.":"开始加载奖励插屏 (加载完成后可以自动显示)。\n如果设置了测试模式,将显示测试奖励插屏。\n这类似于奖励视频,但可以随时显示,并且用户可以关闭它。","Load rewarded interstitial with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"使用 Android 广告单元 ID:_PARAM0_、iOS 广告单元 ID:_PARAM1_ 加载插屏奖励 (加载时自动显示:_PARAM2_)","Android rewarded interstitial ID":"Android 奖励插页式 ID","Show rewarded interstitial":"显示奖励插页式广告","Show the rewarded interstitial that was loaded. Will work only when the rewarded interstitial is fully loaded.":"显示已加载的插页式奖励。仅当奖励插页式广告已满载时才会工作。","Show the loaded rewarded interstitial":"显示已加载的奖励插页式广告","Mark the reward of the rewarded interstitial as claimed":"将奖励插页的奖励标记为已领取","Mark the rewarded interstitial reward as claimed. Useful if you used the condition to check if the reward was given to the user without clearing the reward.":"将奖励的插页式广告奖励标记为已声明。如果您使用条件检查奖励是否已提供给用户而不清除奖励,则很有用。","Rewarded video loading":"奖励视频加载","Check if a rewarded video is currently loading.":"检查奖励视频当前是否正在加载。","Rewarded video is loading":"奖励视频正在加载","Rewarded video ready":"奖励视频准备就绪","Check if a rewarded video is ready to be displayed.":"检查奖励视频是否已准备好显示。","Rewarded video is ready":"奖励视频已准备就绪","Rewarded video showing":"奖励视频展示","Check if there is a rewarded video being displayed.":"检查是否有奖励视频正在显示。","Rewarded video is showing":"奖励视频正在显示","Rewarded video had an error":"奖励视频有错误","Check if there was a error while loading the rewarded video.":"加载奖励视频时,检查是否有错误。","Rewarded video ad had an error":"奖励视频广告出错","Rewarded Video reward received":"已收到奖励视频奖励","Check if the reward of the rewarded video was given to the user.\nYou can mark this reward as cleared, so that the condition will be false and you can show later another rewarded video.":"检查奖励视频的奖励是否给了用户。\n您可以将此奖励标记为已清除,这样条件将为 false,稍后您可以显示另一个奖励视频。","User got the reward of the rewarded video (and clear this reward: _PARAM0_)":"用户获得奖励视频的奖励 (并清除此奖励:_PARAM0_)","Clear the reward (needed to show another rewarded video)":"清除奖励 (需要展示另一个奖励视频)","Load rewarded video":"加载奖励视频","Start loading a reward video (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test video will be displayed.":"开始加载奖励视频(当加载完成时可以自动显示)。\n如果设置测试模式,将显示测试视频。","Load reward video with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"加载带有Android广告单元ID _PARAM0_,iOS广告单元ID _PARAM1_的奖励视频(加载后自动显示:_PARAM2_)","Android reward video ID":"Android 奖励视频 ID","iOS reward video ID":"iOS 奖励视频 ID","Show rewarded video":"显示奖励视频","Show the reward video that was loaded. Will work only when the video is fully loaded.":"显示已加载的奖励视频。仅在视频完全加载后才能使用。","Show the loaded reward video":"显示已加载的奖励视频","Mark the reward of the rewarded video as claimed":"将奖励视频的奖励标记为已领取","Mark the rewarded video reward as claimed. Useful if you used the condition to check if the reward was given to the user without clearing the reward.":"将奖励视频奖励标记为已领取。如果您使用条件检查奖励是否已提供给用户而不清除奖励,则很有用。","Tilemap file (Tiled or LDtk)":"Tilemap 文件(Tiled 或 LDtk)","This is the file that was saved or exported from Tiled or LDtk.":"这是从 Tiled 或 LDtk 保存或导出的文件。","LDtk or Tiled":"LDtk 或 Tiled","Tileset JSON file (optional)":"Tileset JSON 文件(可选)","Optional: specify this if you've saved the tileset in a different file as the Tiled tilemap.":"可选:如果您将 tileset 保存在不同的文件中作为 Tiled tilemap,请指定此项。","Tiled only":"仅 Tiled","Atlas image":"图集图像","The Atlas image containing the tileset.":"包含 tileset 的地图集图像。","Visible layers":"可见图层","All layers":"所有层","Only the layer with the specified index":"仅指定索引的图层","Display mode":"显示模式","Layer index to display":"要显示的图层索引","If \"index\" is selected as the display mode, this is the index of the layer to display.":"如果选择“索引”作为显示模式,则这是要显示的图层的索引。","Level index to display":"要显示的级别索引","Select which level to render via its index (LDtk)":"选择要通过其索引呈现的级别(LDtk)","Animation speed scale":"动画速度比值","Animation FPS":"动画FPS","External Tilemap (Tiled/LDtk)":"外部 Tilemap (Tiled/LDtk)","Tilemap imported from external editors like LDtk or Tiled.":"从外部编辑器导入的瓷砖地图,例如 LDtk 或 Tiled。","Check the tilemap file (Tiled or LDtk) being used.":"检查正在使用的 tilemap 文件(Tiled 或 LDtk)。","The tilemap file of _PARAM0_ is _PARAM1_":"_PARAM0_ 的 tilemap 文件是 _PARAM1_","Tile map":"瓦片地图","Set the Tiled or LDtk file containing the Tilemap data to display. This is usually the main file exported from Tiled/LDtk.":"设置包含要显示的 Tilemap 数据的 Tiled 或 LDtk 文件。这通常是从 Tiled/LDtk 导出的主文件。","Set the tilemap file of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的 tilemap 文件设置为 _PARAM1_","Tileset JSON file":"Tileset JSON文件","Check the tileset JSON file being used.":"检查正在使用的 pileset JSON 文件。","The tileset JSON file of _PARAM0_ is _PARAM1_":"_PARAM0_的tileset JSON文件是_PARAM1_","Set the JSON file with the tileset data (sometimes that is embedded in the Tilemap, so not needed)":"使用tileset数据设置 JSON 文件(有时这些数据嵌入在 Tilemap 中,所以不需要)","Set the tileset JSON file of _PARAM0_ to _PARAM1_":"将_PARAM0_的tileset JSON文件设置为_PARAM1_","Compare the value of the display mode.":"比较显示模式的值。","The display mode of _PARAM0_ is _PARAM1_":"_PARAM0_ 的显示模式是 _PARAM1_","Set the display mode":"设置显示模式","Set the display mode of _PARAM0_ to _PARAM1_":"设置 _PARAM0_ 的显示模式为 _PARAM1_","Layer index":"图层索引","Compare the value of the layer index.":"比较图层索引的值。","the layer index":"图层索引","Set the layer index of the Tilemap.":"设置Tilemap的图层索引。","Get the layer index being displayed":"获取正在显示的图层索引","Level index":"级别索引","the level index being displayed.":"正在显示的级别索引。","the level index":"级别索引","Compare the animation speed scale.":"比较动画速度比例。","the animation speed scale":"动画速度比例","Speed scale to compare to (1 by default)":"要比较的速度比例(默认为 1)","Set the animation speed scale of the Tilemap.":"设置 Tilemap 的动画速度比例。","Speed scale (1 by default)":"速度比例 (1 默认)","Get the Animation speed scale":"获取动画速度比例","Animation speed (FPS)":"动画速度 (FPS)","Compare the animation speed.":"比较动画速度。","the animation speed (FPS)":"动画速度 (FPS)","Animation speed to compare to (in frames per second)":"要比较的动画速度(以每秒帧数为单位)","Set the animation speed of the Tilemap.":"设置 Tilemap 的动画速度。","Animation speed (in frames per second)":"动画速度(每秒帧数)","Get the animation speed (in frames per second)":"获取动画速度(以每秒帧数为单位)","Columns":"列","Number of columns.":"列数。","Rows":"行","Number of rows.":"行数。","Tile size in pixels.":"以像素为单位的图块大小。","Tile ids with hit box":"带有命中框的图块 id","The list of tile ids with a hit box (separated by commas).":"带有命中框的图块 id 列表 (用逗号分隔)。","Grid-based map built from reusable tiles.":"基于网格的地图,由可重用的瓷砖构建。","Edit tileset and collisions":"编辑图块集和碰撞","Tileset column count":"图块集列数","Get the number of columns in the tileset.":"获取图块集中的列数。","Tileset row count":"图块集行数","Get the number of rows in the tileset.":"获取图块集中的行数。","Scene X coordinate of tile":"场景图块的 X 坐标","Get the scene X position of the center of the tile.":"获取图块中心的场景 X 位置。","Grid X":"网格 X","Grid Y":"网格 Y","Scene Y coordinate of tile":"场景图块的 Y 坐标","Get the scene Y position of the center of the tile.":"获取图块中心的场景 Y 位置。","Tile map grid column coordinate":"瓦片地图网格列坐标","Get the grid column coordinates in the tile map corresponding to the scene coordinates.":"获取场景坐标对应的瓦片地图中的网格列坐标。","Position X":"位置 X","Position Y":"位置 Y","Tile map grid row coordinate":"瓦片地图网格行坐标","Get the grid row coordinates in the tile map corresponding to the scene coordinates.":"获取场景坐标对应的瓦片地图中的网格行坐标。","Tile (at position)":"平铺 (在位置)","the id of the tile at the scene coordinates":"场景坐标处的图块的 id","the tile id in _PARAM0_ at scene coordinates _PARAM3_ ; _PARAM4_":"场景坐标_PARAM3_ 处 _PARAM0_ 中的图块id;_PARAM4_","Flip tile vertically (at position)":"垂直翻转图块 (在位置)","Flip tile vertically at scene coordinates.":"在场景坐标处垂直翻转图块。","Flip tile vertically in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"在场景坐标 _PARAM1_ 处垂直翻转 _PARAM0_ 中的图块;_PARAM2_:_PARAM3_","Flip tile horizontally (at position)":"水平翻转图块 (在位置)","Flip tile horizontally at scene coordinates.":"在场景坐标处水平翻转图块。","Flip tile horizontally in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"在场景坐标 _PARAM1_ 处在 _PARAM0_ 中水平翻转图块;_PARAM2_:_PARAM3_","Remove tile (at position)":"移除图块 (在位置)","Remove the tile at the scene coordinates.":"移除场景坐标处的图块。","Remove tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_":"移除场景坐标 _PARAM1_ ; _PARAM2_ 处的 _PARAM0_ 中的图块","Tile (on the grid)":"平铺 (在网格上)","the id of the tile at the grid coordinates":"网格坐标处的图块的 id","the tile id at grid coordinates _PARAM3_ ; _PARAM4_":"网格坐标 _PARAM3_ 处的图块 id; _PARAM4_","Flip tile vertically (on the grid)":"垂直翻转图块 (在网格上)","Flip tile vertically at grid coordinates.":"在网格坐标处垂直翻转图块。","Flip tile vertically in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"在网格坐标 _PARAM1_ 处垂直翻转 _PARAM0_ 中的图块;_PARAM2_:_PARAM3_","Flip tile horizontally (on the grid)":"水平翻转图块 (在网格上)","Flip tile horizontally at grid coordinates.":"在网格坐标处水平翻转图块。","Flip tile horizontally in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"在网格坐标 _PARAM1_ 处水平翻转 _PARAM0_ 中的图块;_PARAM2_:_PARAM3_","Remove tile (on the grid)":"移除图块 (在网格上)","Remove the tile at the grid coordinates.":"移除网格坐标处的图块。","Remove tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_":"移除网格坐标 _PARAM1_ 处的 _PARAM0_ 中的图块;_PARAM2_","Tile flipped horizontally (at position)":"水平翻转图块 (在位置)","Check if tile at scene coordinates is flipped horizontally.":"检查场景坐标处的图块是否水平翻转。","The tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_ is flipped horizontally":"场景坐标 _PARAM1_ ; _PARAM2_ 处的 _PARAM0_ 中的图块被水平翻转","Tile flipped vertically (at position)":"垂直翻转图块 (在位置)","Check if tile at scene coordinates is flipped vertically.":"检查场景坐标处的图块是否垂直翻转。","The tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_ is flipped vertically":"场景坐标 _PARAM1_ ; _PARAM2_ 处的 _PARAM0_ 中的图块被垂直翻转","Tile flipped horizontally (on the grid)":"水平翻转图块 (在网格上)","Check if tile at grid coordinates is flipped horizontally.":"检查网格坐标处的图块是否水平翻转。","The tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_ is flipped horizontally":"_PARAM0_ 中网格坐标为 _PARAM1_ ; _PARAM2_ 的图块被水平翻转","Tile flipped vertically (on the grid)":"垂直翻转图块 (在网格上)","Check if tile at grid coordinates is flipped vertically.":"检查网格坐标处的图块是否垂直翻转。","The tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_ is flipped vertically":"_PARAM0_ 中网格坐标为 _PARAM1_ ; _PARAM2_ 的图块被垂直翻转","Grid row count":"网格行数","the grid row count in the tile map":"瓦片地图中的网格行数","the grid row count":"网格行数","Grid column count":"网格列数","the grid column count in the tile map":"瓦片地图中的网格列数","the grid column count":"网格列数","Tilemap JSON file":"TilemapJSON文件","This is the JSON file that was saved or exported from Tiled. LDtk is not supported yet for collisions.":"这是从 Tiled 保存或导出的 JSON 文件。LDtk 尚不支持碰撞。","Optional, don't specify it if you've not saved the tileset in a different file.":"可选,如果你没有将Tileset保存在另一个文件中,则不要指定它。","Class filter":"类过滤器","Only the tiles with the given class (set in Tiled 1.9+) will have hitboxes created.":"只有带有给定类的瓷砖(在Tiled 1.9+中设置)才会创建HITBOX。","Use all layers":"使用所有图层","Debug mode":"调试模式","When activated, it displays the hitboxes in the given color.":"激活后,它会以给定的颜色显示HITBOX。","External Tilemap (Tiled/LDtk) collision mask":"外部 Tilemap (Tiled/LDtk) 碰撞遮罩","Invisible object handling collisions with parts of a tilemap.":"不可见对象处理与TileMap的部分碰撞。","Check the Tilemap JSON file being used.":"检查正在使用的 Tilemap JSON 文件。","The Tilemap JSON file of _PARAM0_ is _PARAM1_":"_PARAM0_ 的 Tilemap JSON 文件是 _PARAM1_","Tile map collision mask":"瓦片地图碰撞遮罩","Set the JSON file containing the Tilemap data to display. This is usually the JSON file exported from Tiled.":"设置要显示的包含Tilemap数据的JSON文件。这通常是从Tiled导出的JSON文件。","Set the Tilemap JSON file of _PARAM0_ to _PARAM1_":"将_PARAM0_的Tilemap JSON文件设置为_PARAM1_","The Tilemap object can be used to display tile-based objects. It's a good way to create maps for RPG, strategy games or create objects by assembling tiles, useful for platformer, retro-looking games, etc... External tilemaps are also supported - but it's recommended to use the built-in, simple Tilemap object for most use cases.":"Tilemap对象可用于显示基于瓦片的对象。这是创建RPG、策略游戏地图或通过拼接瓦片创建对象的好方法,适用于平台游戏、复古风格的游戏等。外部瓦片地图也受支持,但建议在大多数情况下使用内置的简单Tilemap对象。","Tweening":"补间","Smoothly animate object properties over time — such as position, rotation scale, opacity, and more — as well as variables. Ideal for creating fluid transitions and UI animations. While you can use tweens to move objects, other behaviors (like platform, physics, ellipse movement...) or forces are often better suited for dynamic movement. Tween is best used for animating UI elements, static objects that need to move from one point to another, or other values like variables.":"平滑地在一段时间内动画对象属性——例如位置、旋转缩放、透明度等——以及变量。非常适合创建流畅的过渡和用户界面动画。虽然您可以使用补间动画来移动对象,但其他行为(如平台、物理、椭圆运动……)或力通常更适合动态移动。补间动画最适合用来动画化用户界面元素、需要从一个点移动到另一个点的静态对象,或者其他值,比如变量。","Ease":"缓解","Tween between 2 values according to an easing function.":"根据缓和函数,在2个值之间补间。","Easing":"缓和","From value":"从值","To value":"到值","Weighting":"权重","From 0 to 1.":"从 0 到 1。","Tween a number in a scene variable":"在场景变量中补间一个数字","Tweens a scene variable's numeric value from one number to another.":"将场景变量的数值从一个数字补间为另一个数字。","Tween variable _PARAM2_ from _PARAM3_ to _PARAM4_ over _PARAM5_ms with easing _PARAM6_ as _PARAM1_":"将补间变量 _PARAM2_ 从 _PARAM3_ 调整为 _PARAM4_ 超过 _PARAM5_ ms,将 _PARAM6_ 缓和为 _PARAM1_","Scene Tweens":"场景补间","Tween Identifier":"补间标识符","The variable to tween":"变量到补间","Final value":"最终值","Duration (in milliseconds)":"持续时间(毫秒)","Tweens a scene variable's numeric value from its current value to a new one.":"将场景变量的数值从其当前值补间到新值。","Tween variable _PARAM2_ to _PARAM3_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"将变量 _PARAM2_ 调整为 _PARAM3_ 超过 _PARAM4_ ms,将 _PARAM5_ 缓和为 _PARAM1_","Tween variable _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"将变量 _PARAM2_ 补间到 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM1_","Tween a scene value":"补间场景值","Tweens a scene value that can be use with the expression Tween::Value.":"补间可与表达式 Tween::Value 一起使用的场景值。","Tween the value from _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"将值从 _PARAM2_ 补间到 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM1_","Exponential interpolation":"指数插值","Tween a layer value":"补间图层值","Tweens a layer value that can be use with the expression Tween::Value.":"补间可与表达式 Tween::Value 一起使用的图层值。","Tween the value of _PARAM7_ from _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"将 _PARAM7_ 的值从 _PARAM2_ 补间到 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM1_","Tween the camera position":"补间相机位置","Tweens the camera position from the current one to a new one.":"将相机位置从当前位置调整到新位置。","Tween camera on layer _PARAM4_ to _PARAM2_;_PARAM3_ over _PARAM5_ms with easing _PARAM6_ as _PARAM1_":"将 _PARAM4_ 层上的相机补间到 _PARAM2_;_PARAM3_ 超过 _PARAM5_ms,将 _PARAM6_ 缓和为 _PARAM1_","Target X position":"目标 X 位置","Target Y position":"目标 Y 位置","Tween camera on layer _PARAM4_ to _PARAM2_;_PARAM3_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM1_":"将图层 _PARAM4_ 上的摄像机补间到 _PARAM2_;_PARAM3_,并在 _PARAM6_ 秒内将 _PARAM5_ 缓动为 _PARAM1_","Tween the camera zoom":"相机补间缩放","Tweens the camera zoom from the current zoom factor to a new one.":"将相机缩放从当前缩放因子调整为新的缩放因子。","Tween the zoom of camera on layer _PARAM3_ to _PARAM2_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"在 _PARAM4_ms 上将 _PARAM3_ 层上的相机缩放补间到 _PARAM2_,并将 _PARAM5_ 缓和为 _PARAM1_","Target zoom":"目标缩放","Tween the zoom of camera on layer _PARAM3_ to _PARAM2_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"将层 _PARAM3_ 上相机的缩放补间到 _PARAM2_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM1_","Tween the camera rotation":"补间相机旋转","Tweens the camera rotation from the current angle to a new one.":"将相机旋转从当前角度补间到新角度。","Tween the rotation of camera on layer _PARAM3_ to _PARAM2_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"将 _PARAM3_ 层上的相机旋转补间到 _PARAM2_ 超过 _PARAM4_ms,并将 _PARAM5_ 缓和为 _PARAM1_","Target rotation (in degrees)":"目标旋转 (以度为单位)","Tween the rotation of camera on layer _PARAM3_ to _PARAM2_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"将层 _PARAM3_ 上相机的旋转补间到 _PARAM2_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM1_","Tween number effect property":"补间数字效果属性","Tweens a number effect property from its current value to a new one.":"将数字效果属性从其当前值补间为新值。","Tween the property _PARAM5_ for effect _PARAM4_ of _PARAM3_ to _PARAM2_ with easing _PARAM6_ over _PARAM7_ seconds as _PARAM1_":"将 _PARAM3_ 的效果 _PARAM4_ 的属性 _PARAM5_ 补间到 _PARAM2_,并在 _PARAM7_ 秒内缓动 _PARAM6_ 作为 _PARAM1_","Effect name":"效果名称","Property name":"属性名称","Tween color effect property":"补间颜色效果属性","Tweens a color effect property from its current value to a new one.":"将颜色效果属性从其当前值补间为新值。","Tween the color property _PARAM5_ for effect _PARAM4_ of _PARAM3_ to _PARAM2_ with easing _PARAM6_ over _PARAM7_ seconds as _PARAM1_":"将 _PARAM3_ 的效果 _PARAM4_ 的颜色属性 _PARAM5_ 补间到 _PARAM2_,并在 _PARAM7_ 秒内缓动 _PARAM6_ 作为 _PARAM1_","To color":"设置颜色","Scene tween exists":"场景补间已存在","Check if the scene tween exists.":"检查场景补间是否存在。","Scene tween _PARAM1_ exists":"场景补间 _PARAM1_ 存在","Scene tween is playing":"补间正在播放的场景","Check if the scene tween is currently playing.":"检查场景补间是否正在播放。","Scene tween _PARAM1_ is playing":"场景补间 _PARAM1_ 正在播放","Scene tween finished playing":"场景补间播放完毕","Check if the scene tween has finished playing.":"检查场景补间是否已完成播放。","Scene tween _PARAM1_ has finished playing":"场景补间 _PARAM1_ 已经完成播放","Pause a scene tween":"暂停一个场景补间","Pause the running scene tween.":"暂停正在运行的场景补间。","Pause the scene tween _PARAM1_":"暂停场景补间_PARAM1_","Stop a scene tween":"停止场景补间!","Stop the running scene tween.":"停止运行场景补间。","Stop the scene tween _PARAM1_ (jump to the end: _PARAM2_)":"停止场景补间_PARAM1_ (跳到结尾: _PARAM2_)","Jump to the end":"跳转到末端","Resume a scene tween":"恢复场景补间","Resume the scene tween.":"恢复补间的场景。","Resume the scene tween _PARAM1_":"恢复场景补间_PARAM1_","Remove a scene tween":"删除场景补间","Remove the scene tween. Call this when the tween is no longer needed to free memory.":"删除场景补间。当不再需要补间以释放内存时,请调用此选项。","Remove the scene tween _PARAM1_":"删除场景补间_PARAM1_","Tween progress":"补间进度","the progress of a tween (between 0.0 and 1.0)":"补间的进度 (0.0 到 1.0 之间)","the progress of the scene tween _PARAM1_":"场景补间动画进度 _PARAM1_","Tween value":"补间值","Return the value of a tween. It is always 0 for tweens with several values.":"返回补间的值。对于具有多个值的补间,它始终为 0。","Tween":"缓动","Smoothly animate position, angle, scale and other properties of objects.":"平滑地设置对象的位置、角度、缩放和其他属性的动画。","Add object variable tween":"添加对象变量补间","Add a tween animation for an object variable.":"为对象变量添加补间动画。","Tween the variable _PARAM3_ of _PARAM0_ from _PARAM4_ to _PARAM5_ with easing _PARAM6_ over _PARAM7_ms as _PARAM2_":"将 _PARAM0_ 的变量 _PARAM3_ 从 _PARAM4_ 补间为 _PARAM5_,并在 _PARAM7_ms 内缓和 _PARAM6_ 作为 _PARAM2_","Destroy this object when tween finishes":"补间完成时销毁该对象","Tween a number in an object variable":"补间对象变量中的数字","Tweens an object variable's numeric value from its current value to a new one.":"将对象变量的数值从其当前值补间到新值。","Tween the variable _PARAM3_ of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"将 _PARAM0_ 的变量 _PARAM3_ 补间为 _PARAM4_ 并在 _PARAM6_ms 内缓和 _PARAM5_ 作为 _PARAM2_","Tween the variable _PARAM3_ of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"将 _PARAM0_ 的变量 _PARAM3_ 补间为 _PARAM4_,并在 _PARAM6_ 秒内缓动 _PARAM5_ 作为 _PARAM2_","Tween an object value":"补间对象值","Tweens an object value that can be use with the object expression Tween::Value.":"补间对象值可与对象表达式 Tween::Value 一起使用。","Tween the value of _PARAM0_ from _PARAM3_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"将 _PARAM0_ 的值从 _PARAM3_ 补间到 _PARAM4_,并在 _PARAM6_ 秒内缓动 _PARAM5_ 作为 _PARAM2_","Tween object position":"补间对象位置","Tweens an object position from its current position to a new one.":"将对象位置从其当前位置补间到新位置。","Tween the position of _PARAM0_ to x: _PARAM3_, y: _PARAM4_ with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"将 _PARAM0_ 的位置补间到 x: _PARAM3_, y: _PARAM4_ 并缓和 _PARAM5_ 超过 _PARAM6_ms 作为 _PARAM2_","To X":"到 X","To Y":"到 Y","Tween the position of _PARAM0_ to x: _PARAM3_, y: _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"将 _PARAM0_ 的位置补间到 x: _PARAM3_、y: _PARAM4_,并在 _PARAM6_ 秒内将 _PARAM5_ 缓动为 _PARAM2_","Tween object X position":"补间对象 X 位置","Tweens an object X position from its current X position to a new one.":"将对象的 X 位置从当前的 X 位置补间到一个新位置。","Tween the X position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的 X 位置补间到 _PARAM3_ 并在 _PARAM5_ms 内缓和 _PARAM4_ 作为 _PARAM2_","Tween the X position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的 X 位置补间到 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween object Z position":"补间对象 Z 位置","Tweens an object Z position (3D objects only) from its current Z position to a new one.":"将对象 Z 位置 (仅限 3D 对象) 从其当前 Z 位置补间到新位置。","Tween the Z position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的 Z 位置调整为 _PARAM3_,将 _PARAM4_ 缓和 _PARAM5_ms 作为 _PARAM2_","To Z":"到 Z","Tween the Z position of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"将 _PARAM0_ 的 Z 位置补间到 _PARAM4_,并在 _PARAM6_ 秒内缓动 _PARAM5_ 作为 _PARAM3_","3D capability":"3D功能","Tween object width":"补间对象宽度","Tweens an object width from its current width to a new one.":"将对象宽度从其当前宽度补间到新宽度。","Tween the width of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的宽度补间为 _PARAM3_,并在 _PARAM5_ms 内缓和 _PARAM4_ 作为 _PARAM2_","To width":"到宽度","Tween the width of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的宽度补间为 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween object height":"补间对象高度","Tweens an object height from its current height to a new one.":"补间对象高度将对象高度从其当前高度补间到新高度。","Tween the height of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的高度补间为 _PARAM3_,并在 _PARAM5_ms 内缓和 _PARAM4_ 作为 _PARAM2_","To height":"到高度","Tween the height of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的高度补间为 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween object depth":"补间对象深度","Tweens an object depth (suitable 3D objects only) from its current depth to a new one.":"将对象深度 (仅限适用的 3D 对象) 从当前深度补间到新深度。","Tween the depth of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的深度调整为 _PARAM3_,将 _PARAM4_ 缓和 _PARAM5_ms 作为 _PARAM2_","To depth":"到深度","Tween the depth of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"将 _PARAM0_ 的深度补间为 _PARAM4_,并在 _PARAM6_ 秒内缓动 _PARAM5_ 作为 _PARAM3_","Tween object Y position":"补间对象 Y 位置","Tweens an object Y position from its current Y position to a new one.":"将对象 Y 位置从其当前 Y 位置补间到新位置。","Tween the Y position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的 Y 位置补间到 _PARAM3_ 并在 _PARAM5_ms 内缓和 _PARAM4_ 作为 _PARAM2_","Tween the Y position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的 Y 位置补间到 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween object angle":"补间对象角度","Tweens an object angle from its current angle to a new one.":"将对象角度从其当前角度补间到新角度。","Tween the angle of _PARAM0_ to _PARAM3_° with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的角度补间为 _PARAM3_°,将 _PARAM4_ 缓和 _PARAM5_ms 作为 _PARAM2_","To angle (in degrees)":"角度(角度值):","Tween the angle of _PARAM0_ to _PARAM3_° with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的角度调整为 _PARAM3_°,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween object rotation on X axis":"X 轴上的补间对象旋转","Tweens an object rotation on X axis from its current angle to a new one.":"将 X 轴上的对象旋转从当前角度补间到新角度。","Tween the rotation on X axis of _PARAM0_ to _PARAM4_° with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"将 _PARAM0_ 的 X 轴旋转补间到 _PARAM4_°,并在 _PARAM6_ 秒内缓动 _PARAM5_ 作为 _PARAM3_","Tween object rotation on Y axis":"Y 轴上的补间对象旋转","Tweens an object rotation on Y axis from its current angle to a new one.":"将 Y 轴上的对象旋转从当前角度补间到新角度。","Tween the rotation on Y axis of _PARAM0_ to _PARAM4_° with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"将 _PARAM0_ 的 Y 轴旋转补间到 _PARAM4_°,并在 _PARAM6_ 秒内缓动 _PARAM5_ 作为 _PARAM3_","Tween object scale":"补间对象比例","Tweens an object scale from its current scale to a new one (note: the scale can never be less than 0).":"将对象从当前比例补间为新比例(注意:比例永远不能小于 0)。","Tween the scale of _PARAM0_ to X-scale: _PARAM3_, Y-scale: _PARAM4_ (from center: _PARAM8_) with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"_PARAM0_到X-scale: _PARAM3_, Y-scale: _PARAM4_ (从中心: _PARAM8_) 放松_PARAM5_ 通过 _PARAM6_ms 放宽为 _PARAM2_","To scale X":"缩放 X","To scale Y":"缩放Y","Scale from center of object":"以对象中心点缩放","Tweens an object scale from its current scale to a new one (note: the scale can never be 0 or less).":"将对象缩放比例从当前比例补间到新比例 (注意:比例永远不能为 0 或更小)。","Tween the scale of _PARAM0_ to X-scale: _PARAM3_, Y-scale: _PARAM4_ (from center: _PARAM8_) with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"将 _PARAM0_ 的比例调整为 X 比例:_PARAM3_,Y 比例:_PARAM4_ (从中心:_PARAM8_),并在 _PARAM6_ 秒内将 _PARAM5_ 缓动为 _PARAM2_","Tweens an object scale from its current value to a new one (note: the scale can never be 0 or less).":"将对象比例从其当前值补间为新值 (注意:比例永远不能为 0 或更小)。","Tween the scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的比例调整为 _PARAM3_ (从中心:_PARAM7_),并在 _PARAM5_ 秒内将 _PARAM4_ 缓动为 _PARAM2_","To scale":"按比例","Tween object X-scale":"补间对象 X 比例","Tweens an object X-scale from its current value to a new one (note: the scale can never be less than 0).":"将对象 X 比例从其当前值补间到新值(注意:比例永远不能小于 0)。","Tween the X-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的 X 比例补间到 _PARAM3_(从中心:_PARAM7_),缓和 _PARAM4_ 超过 _PARAM5_ms 作为 _PARAM2_","Tweens an object X-scale from its current value to a new one (note: the scale can never be 0 or less).":"将对象的 X 缩放比例从其当前值补间为新值 (注意:缩放比例永远不能为 0 或更小)。","Tween the X-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的 X 比例补间到 _PARAM3_ (从中心:_PARAM7_),并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween object Y-scale":"补间对象 Y 比例","Tweens an object Y-scale from its current value to a new one (note: the scale can never be less than 0).":"将对象 Y 比例从其当前值补间到新值(注意:比例永远不能小于 0)。","Tween the Y-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的 Y 比例补间到 _PARAM3_(从中心:_PARAM7_),缓和 _PARAM4_ 超过 _PARAM5_ms 作为 _PARAM2_","Tweens an object Y-scale from its current value to a new one (note: the scale can never be 0 or less).":"将对象的 Y 缩放比例从其当前值补间为新值 (注意:缩放比例永远不能为 0 或更小)。","Tween the Y-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的 Y 比例补间到 _PARAM3_ (从中心:_PARAM7_),并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween text size":"补间文本大小","Tweens the text object character size from its current value to a new one (note: the size can never be less than 1).":"将文本对象字符大小从其当前值补间到新值(注意:大小永远不能小于 1)。","Tween the character size of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的字符大小补间为 _PARAM3_,将 _PARAM4_ 缓和 _PARAM5_ms 作为 _PARAM2_","To character size":"到字符大小","Tween the character size of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的字符大小补间到 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween object opacity":"补间对象不透明度","Tweens the object opacity from its current value to a new one (note: the value shall stay between 0 and 255).":"将对象不透明度从其当前值补间到新值(注意:该值应保持在0到255之间)。","Tween the opacity of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的不透明度补间为 _PARAM3_,并在 _PARAM5_ms 内缓和 _PARAM4_ 作为 _PARAM2_","To opacity":"设置不透明度","Tween the opacity of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_ and destroy: _PARAM6_":"将 _PARAM0_ 的不透明度调整为 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_ 并销毁:_PARAM6_","Tween the property _PARAM6_ for effect _PARAM5_ of _PARAM0_ to _PARAM4_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM3_":"将 _PARAM0_ 的效果 _PARAM5_ 的属性 _PARAM6_ 补间到 _PARAM4_,并在 _PARAM8_ 秒内缓动 _PARAM7_ 作为 _PARAM3_","Effect capability":"效果功能","Tween the color property _PARAM6_ for effect _PARAM5_ of _PARAM0_ to _PARAM4_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM3_":"将 _PARAM0_ 的效果 _PARAM5_ 的颜色属性 _PARAM6_ 补间到 _PARAM4_,并在 _PARAM8_ 秒内缓动 _PARAM7_ 作为 _PARAM3_","Tween object color":"补间对象颜色","Tweens the object color from its current value to a new one. Format: \"128;200;255\" with values between 0 and 255 for red, green and blue":"将对象颜色从其当前值补间到新值。格式:“128;200;255”,红色、绿色和蓝色的值在 0 到 255 之间","Tween the color of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"将 _PARAM0_ 的颜色补间为 _PARAM3_,并在 _PARAM5_ms 内缓和 _PARAM4_ 作为 _PARAM2_","Tween on the Hue/Saturation/Lightness (HSL)":"色调/饱和度/亮度 (HSL)","Useful to have a more natural change between colors.":"在颜色之间有更自然的变化非常有用。","Tween the color of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"将 _PARAM0_ 的颜色补间为 _PARAM3_,并在 _PARAM5_ 秒内缓动 _PARAM4_ 作为 _PARAM2_","Tween object HSL color":"补间对象 HSL 颜色","Tweens the object color using Hue/Saturation/Lightness. Hue is in degrees, Saturation and Lightness are between 0 and 100. Use -1 for Saturation and Lightness to let them unchanged.":"使用色相/饱和度/亮度补间对象颜色。色调以度为单位,饱和度和亮度在 0 到 100 之间。饱和度和亮度使用 -1 让它们保持不变。","Tween the color of _PARAM0_ using HSL to H: _PARAM3_ (_PARAM4_), S: _PARAM5_, L: _PARAM6_ with easing _PARAM7_ over _PARAM8_ms as _PARAM2_":"使用 HSL 将 _PARAM0_ 的颜色补间为 H:_PARAM3_ (_PARAM4_),S:_PARAM5_,L:_PARAM6_,并在 _PARAM8_ms 上缓和 _PARAM7_ 作为 _PARAM2_","To Hue (in degrees)":"到色相 (以度为单位)","Animate Hue":"动态色调","To Saturation (0 to 100, -1 to ignore)":"至饱和度(0至100, -1 可忽略)","To Lightness (0 to 100, -1 to ignore)":"至亮度(0到100, -1 可忽略)","Tween the color of _PARAM0_ using HSL to H: _PARAM3_ (_PARAM4_), S: _PARAM5_, L: _PARAM6_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM2_":"使用 HSL 将 _PARAM0_ 的颜色补间为 H: _PARAM3_ (_PARAM4_)、S: _PARAM5_、L: _PARAM6_,并在 _PARAM8_ 秒内将 _PARAM7_ 缓动为 _PARAM2_","Tween exists":"补间已存在","Check if the tween animation exists.":"检查补间动画是否存在。","Tween _PARAM2_ on _PARAM0_ exists":"_PARAM0_上的补间_PARAM2_存在","Tween is playing":"Tween正在播放","Check if the tween animation is currently playing.":"检查当前是否正在播放补间动画。","Tween _PARAM2_ on _PARAM0_ is playing":"正在播放_PARAM0_上的补间_PARAM2_","Tween finished playing":"补间完成播放","Check if the tween animation has finished playing.":"检查补间动画是否已完成播放。","Tween _PARAM2_ on _PARAM0_ has finished playing":"_PARAM0_上的补间_PARAM2_已播放完毕","Pause a tween":"暂停补间","Pause the running tween animation.":"暂停正在运行的补间动画。","Pause the tween _PARAM2_ on _PARAM0_":"暂停_PARAM0_上的补间_PARAM2_","Stop a tween":"停止补间","Stop the running tween animation.":"停止正在运行的补间动画。","Stop the tween _PARAM2_ on _PARAM0_":"停止_PARAM0_上的补间_PARAM2_","Jump to end":"跳到最后","Resume a tween":"恢复补间","Resume the tween animation.":"恢复补间动画。","Resume the tween _PARAM2_ on _PARAM0_":"在_PARAM0_上恢复补间_PARAM2_","Remove a tween":"删除补间","Remove the tween animation from the object.":"从对象中删除补间动画。","Remove the tween _PARAM2_ from _PARAM0_":"从_PARAM0_移除补间_PARAM2_","the progress of the tween _PARAM2_":"补间动画进度 _PARAM1_","Spine (experimental)":"Spine (实验性)","Displays a Spine animation.":"显示 Spine 动画。","Spine":"Spine","Display and smoothly animate a 2D object with skeletal animations made with Spine. Use files exported from Spine (json, atlas and image).":"使用 Spine 制作的骨骼动画显示 2D 对象并对其进行流畅的动画处理。使用从 Spine 导出的文件 (json、atlas 和 image)。","Edit animations":"编辑动画","Animation mixing duration":"动画混合持续时间","the duration of the smooth transition between 2 animations (in second)":"两个动画之间平滑过渡的持续时间 (以秒为单位)","the animation mixing duration":"动画混合持续时间","Animations and images":"动画和图像","Point attachment X position":"点附着 X 位置","x position of spine point attachment":"spine 点附着的 x 位置","x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 点附着的 x 位置","Attachment name":"附件名称","Slot name (use \"\" if names are the same)":"插槽名称 (如果名称相同,请使用\" \")","Point attachment Y position":"点附着 Y 位置","y position of spine point attachment":"spine 点附着的 y 位置","y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 点附着的 y 位置","Point attachment scale world X position":"点附着缩放世界 X 位置","world x position of spine point attachment scale":"spine 点附着缩放的世界 X 位置","world x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 点附着的世界 X 位置","Point attachment scale local X position":"点附着缩放本地 X 位置","local x position of spine point attachment scale":"spine 点附着缩放的本地 X 位置","local x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 点附着的本地 X 位置","Point attachment scale world Y position":"点附着缩放世界 Y 位置","world y position of spine point attachment scale":"spine 点附着缩放的世界 Y 位置","world y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 点附着的世界 Y 位置","Point attachment scale local Y position":"点附着缩放本地 Y 位置","local y position of spine point attachment scale":"spine 点附着缩放的本地 Y 位置","local y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 点附着的本地 Y 位置","Point attachment world rotation":"点附着世界旋转","world rotation of spine point attachment":"spine 点附着的世界旋转","world rotation of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 点附着的世界旋转","Point attachment local rotation":"点附着本地旋转","local rotation of spine point attachment":"spine 点附着的本地旋转","local rotation of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 点附着的本地旋转","Get skin name":"获取皮肤名称","the skin of the object":"对象的皮肤","the skin":"皮肤","Skin name":"皮肤名称","Set skin":"设置皮肤","Set the skin of a Spine object.":"设置一个 Spine 对象的皮肤。","Set the skin of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的皮肤设置为 _PARAM1_","This allows players to join online lobbies and synchronize gameplay across devices without needing to manage servers or networking.\n\nUse the \"Open game lobbies\" action to let players join a game, and use conditions like \"Lobby game has just started\" to begin gameplay. Add the \"Multiplayer object\" behavior to game objects that should be synchronized, and assign or change their ownership using player numbers. Variables and game state (like scenes, scores, or timers) are automatically synced by the host, with options to change ownership or disable sync when needed. Common multiplayer logic —like handling joins/leaves, collisions, and host migration— is supported out-of-the-box for up to 8 players per game.":"这使玩家可以加入在线大厅并在设备之间同步游戏,而无需管理服务器或网络。\n\n使用“打开游戏大厅”操作让玩家加入游戏,并使用“大厅游戏刚刚开始”之类的条件开始游戏。为需要同步的游戏对象添加“多人对象”行为,使用玩家编号分配或改变它们的所有权。变量和游戏状态(如场景、分数或计时器)由主持人自动同步,具有在需要时变更所有权或禁用同步的选项。常见的多人逻辑——如处理加入/离开、碰撞和主机迁移——支持最多8名玩家的游戏。","Current lobby ID":"当前大厅的 ID","Returns current lobby ID.":"返回当前大厅的 ID。","Lobbies":"大厅","Join a specific lobby by its ID":"通过其 ID 加入特定大厅","Join a specific lobby. The player will join the game instantly if this is possible.":"加入特定大厅。如果可能的话,玩家将立即加入游戏。","Join a specific lobby by its ID _PARAM1_":"通过其 ID 加入特定大厅 _PARAM1_","Lobby ID":"大厅 ID","Display loader while joining a lobby.":"在加入大厅时显示加载程序。","Display game lobbies if unable to join a specific one.":"如果无法加入特定大厅,则显示游戏大厅。","Join the next available lobby":"加入下一个可用的大厅","Join the next available lobby. The player will join the game instantly if this is possible.":"加入下一个可用的大厅。如果可能的话,玩家将立即加入游戏。","Display loader while searching for a lobby.":"搜索大厅时显示加载程序。","Display game lobbies if no lobby can be joined directly.":"如果没有大厅可以直接加入,则显示游戏大厅。","Is searching for a lobby to join":"正在寻找要加入的大厅","Is searching for a lobby to join.":"正在寻找一个可以加入的大厅。","Quick join failed to join a lobby":"快速加入未能加入大厅","Quick join failed to join a lobby.":"快速加入未能加入大厅。","Quick join action failure reason":"快速加入操作失败原因","Returns the reason why the Quick join action failed. It can either be 'FULL' if all lobbies were occupied, 'NOT_ENOUGH_PLAYERS' if the lobby's configuration requires more than 1 player to start the game and no other players were available. It can also take the value 'UNKNOWN'.":"返回快速加入操作失败的原因。 如果所有大厅都被占用,它可以是“满”,如果大厅的配置需要超过1名玩家才能开始游戏,并且没有其他玩家可用,则可以是“不够玩家”。 它也可以取“未知”的值。","Open Game Lobbies":"开放游戏大厅","Open the game lobbies window, where players can join lobbies or see the one they are in.":"打开游戏大厅窗口,玩家可以在其中加入大厅或查看他们所在的大厅。","Open the game lobbies":"打开游戏大厅","Close Game Lobbies":"关闭游戏大厅","Close the game lobbies window. Using this action is usually not required because the window is automatically closed when the game of a lobby starts or if the user cancels.":"关闭游戏大厅窗口。通常不需要使用此操作,因为当大厅的游戏开始或用户取消时,窗口会自动关闭。","Close the game lobbies":"关闭游戏大厅","Allow players to close the lobbies window":"允许玩家关闭大厅窗口","Allow players to close the lobbies window. Allowed by default.":"允许玩家关闭大厅窗口。默认允许。","Allow players to close the lobbies window: _PARAM1_":"允许玩家关闭大厅窗口:_PARAM1_","Show close button":"显示关闭按钮","End Lobby Game":"结束大厅游戏","End the lobby game. This will trigger the \"Lobby game has just ended\" condition.":"结束大厅游戏。这将触发“大厅游戏刚刚结束”条件。","End the lobby game":"结束大厅游戏","Leave Game Lobby":"离开游戏大厅","Leave the current game lobby. This will trigger the \"Player has left\" condition on the other players, and the \"Lobby game has ended\" condition on the player leaving.":"离开当前游戏大厅。这将触发其他玩家的“玩家已离开”条件,以及离开的玩家的“大厅游戏已结束”条件。","Leave the game lobby":"离开游戏大厅","Send custom message to other players":"向其他玩家发送自定义消息","Send a custom message to other players in the lobby, with an automatic retry system if it hasn't been received. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"向大厅中的其他玩家发送自定义消息,如果未收到,则使用自动重试系统。与条件“已收到消息”一起使用可了解主机何时正确处理消息。","Send message _PARAM0_ to other players with content _PARAM1_":"向其他玩家发送内容为 _PARAM1_ 的消息 _PARAM0_","Message name":"消息名称","Message content":"消息内容","Send custom message to other players with a variable":"使用变量向其他玩家发送自定义消息","Send a custom message to other players in the lobby containing a variable, with an automatic retry system if it hasn't been received. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"向大厅中的其他玩家发送包含变量的自定义消息,如果未收到,则使用自动重试系统。使用条件“已收到消息”可了解主机何时正确处理了消息。","Send message _PARAM0_ to other players with variable _PARAM1_":"使用变量 _PARAM1_ 向其他玩家发送消息 _PARAM0_","Get message variable":"获取消息变量","Store the data of the specified message in a variable. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"将指定消息的数据存储在变量中。与条件“消息已收到”一起使用,以了解主机何时正确处理了该消息。","Save message _PARAM0_ data in _PARAM1_":"将消息 _PARAM0_ 数据保存在 _PARAM1_ 中","Lobbies window is open":"大厅窗口已打开","Check if the lobbies window is open.":"检查是否打开大厅窗口。","Lobby game has just started":"大厅游戏刚刚开始","Check if the lobby game has just started.":"检查大厅游戏是否刚刚开始。","Lobby game has started":"大厅游戏已开始","Lobby game is running":"大厅游戏正在运行","Check if the lobby game is running.":"检查大厅游戏是否在运行。","Lobby game has just ended":"大厅游戏刚刚结束","Check if the lobby game has just ended.":"检查大厅游戏是否已经结束。","Lobby game has ended":"大厅游戏已结束","Custom message has been received from another player":"已从另一个玩家收到自定义消息","Check if a custom message has been received from another player. Will be true only for one frame.":"检查是否已收到来自其他玩家的自定义消息。仅对一帧有效。","Message _PARAM0_ has been received":"消息 _PARAM0_ 已被接收","Objects synchronization rate":"对象同步速率","objects synchronization rate (between 1 and 60, default is 30 times per second)":"对象同步速率 (介于1和60之间,默认为每秒30次)","objects synchronization rate":"对象同步速率","Sync rate":"同步速率","Player is host":"玩家是主机","Check if the player is the host. (Player 1 is the host)":"检查玩家是否为主机 (玩家1为主机)","Any player has left":"任意玩家已离开","Check if any player has left the lobby game.":"检查是否有任何玩家离开大厅游戏。","Player has left":"玩家已经离开了","Check if the player has left the lobby game.":"检查玩家是否已离开大厅游戏。","Player _PARAM0_ has left":"玩家 _PARAM0_ 已经离开了","Player number":"玩家编号","Player number that just left":"刚刚离开的玩家编号","Returns the player number of the player that has just left the lobby.":"返回刚刚离开大厅的玩家的玩家编号。","Any player has joined":"任何玩家都已加入","Check if any player has joined the lobby.":"检查是否有任何玩家加入了大厅。","Player has joined":"玩家已加入","Check if the player has joined the lobby.":"检查玩家是否已经加入大厅。","Player _PARAM0_ has joined":"玩家 _PARAM0_ 已加入","Player number that just joined":"刚刚加入的玩家编号","Returns the player number of the player that has just joined the lobby.":"返回刚刚加入大厅的玩家的玩家编号。","Host is migrating":"主机正在迁移","Check if the host is migrating, in order to adapt the game state (like pausing the game).":"检查主机是否正在迁移,以便适应游戏状态 (如暂停游戏)。","Configure lobby game to end when host leaves":"配置大厅游戏在主机离开时结束","Configure the lobby game to end when the host leaves. This will trigger the \"Lobby game has just ended\" condition. (Default behavior is to migrate the host)":"配置大厅游戏在主机离开后结束。 这将触发\"大厅游戏刚刚结束\"条件。(默认行为是迁移主机)","End lobby game when host leaves":"在主机离开时结束大厅游戏","Message data":"信息数据","Returns the data received when the specified message was received from another player.":"返回从其他玩家收到指定消息时收到的数据。","Message sender":"消息发送者","Returns the player number of the sender of the specified message.":"返回指定消息发送者的玩家编号。","Number of players in lobby":"大厅中的玩家数量","the number of players in the lobby":"大厅中的玩家数量","Player is connected":"玩家已连接","Check if the specified player is connected to the lobby.":"检查指定的玩家是否已连接到大厅。","Player _PARAM0_ is connected":"玩家 _PARAM0_ 已连接","The position of the player in the lobby (1, 2, ...)":"玩家在大厅中的位置 (1, 2, ...)","Current player number in lobby":"大厅中的当前玩家编号","the current player number in the lobby (1, 2, ...)":"大厅中的当前玩家编号 (1、2、…)","the current player number in the lobby":"大厅中的当前玩家编号","Player username in lobby":"大厅中的玩家用户名","Get the username of the player in the lobby.":"获取大厅中玩家的用户名。","Current player username in lobby":"大厅中的当前玩家用户名","Get the username of the current player in the lobby.":"获取大厅中当前玩家的用户名。","Player ping in lobby":"大厅中的玩家 ping","Get the ping of the player in the lobby.":"获取大厅中玩家的 ping。","Current player ping in lobby":"当前玩家在大厅中的 Ping","Get the ping of the current player in the lobby.":"获取大厅中当前玩家的 ping。","Player variable ownership":"玩家的可变所有权","the player owning the variable":"拥有变量的玩家","the player owning the variable _PARAM1_":"拥有变量 _PARAM1_ 的玩家","Only root variables can change ownership. Arrays and structures children are synchronized with their parent.":"只有根变量可以更改所有权。数组和结构子级与其父级同步。","Take ownership of variable":"获取变量的所有权","Take the ownership of the variable. It will then be synchronized to other players, with the current player as the owner.":"获取变量的所有权。然后它将被同步到其他玩家,以当前玩家为所有者。","Take ownership of _PARAM1_":"取得 _PARAM1_ 的所有权","Remove ownership of variable":"删除变量的所有权","Remove the ownership of the variable. It will still be synchronized to other players, but the host owns it.":"删除变量的所有权。它仍将同步给其他玩家,但主机拥有它。","Remove ownership of _PARAM1_":"删除 _PARAM1_ 的所有权","Disable variable synchronization":"禁用变量同步","Disable synchronization of the variable over the network. It will not be sent to other players anymore.":"禁用变量在网络上的同步。它将不再发送给其他玩家。","Disable synchronization of _PARAM1_":"禁用 _PARAM1_ 的同步","Player owning the object":"拥有该对象的玩家","Who is synchronizing the object to the players. If this is an object controlled by a player, then assign the player number. Otherwise just leave \"Host\" and the host of the game will synchronize the object to the players. (Note: you can change the ownership of the object during the game with corresponding actions).":"谁正在将对象同步到玩家。如果这是由玩家控制的对象,则分配玩家编号。否则只需保留“主机”,游戏主机会将对象同步给玩家。(注:您可以在游戏过程中通过相应的操作更改该对象的所有权)。","Action when player disconnects":"当玩家断开连接时的动作","Multiplayer object":"多人游戏对象","Allow the object to be synchronized with other players in the lobby.":"允许该对象与大厅中的其他玩家同步。","Player object ownership":"玩家对象所有权","the player owning the object":"拥有该对象的玩家","the player owning the instance":"拥有实例的玩家","Is object owned by current player":"对象是否属于当前玩家","Check if the object is owned by the current player, as a player or the host.":"检查对象是否为当前玩家作为玩家或主机所拥有。","Object _PARAM0_ is owned by current player":"对象 _PARAM0_ 由当前玩家拥有","Take ownership of object":"获取对象的所有权","Take the ownership of the object. It will then be synchronized to other players, with the current player as the owner.":"取得该对象的所有权。然后它将同步给其他玩家,当前玩家为所有者。","Take ownership of _PARAM0_":"取得 _PARAM0_ 的所有权","Remove object ownership":"移除对象所有权","Remove the ownership of the object from the player. It will still be synchronized to other players, but the host owns it.":"移除玩家对该对象的所有权。它仍然会同步给其他玩家,但主机拥有它。","Remove ownership of _PARAM0_":"移除 _PARAM0_ 的所有权","Enable (or disable) the synchronization of a behavior":"启用 (或禁用) 行为同步","Enable or disable the synchronization of a behavior over the network. If disabled, the behavior's current state will not be sent to other players anymore.":"启用或禁用网络上行为的同步。如果禁用,行为的当前状态将不再发送给其他玩家。","Enable synchronization of _PARAM2_ for _PARAM0_: _PARAM3_":"启用 _PARAM2_ 与 _PARAM0_ 的同步:_PARAM3_","Multiplayer behavior":"多人游戏行为","Object behavior":"对象行为","Enable synchronization":"启用同步","Player Authentication":"玩家认证","Allow your game to authenticate players.":"允许您的游戏对玩家进行身份验证。","Display authentication banner":"显示身份验证横幅","Display an authentication banner at the top of the game screen, for the player to log in.":"在游戏画面顶部显示认证横幅,供玩家登录。","Display an authentication banner":"显示身份验证横幅","Hide authentication banner":"隐藏身份验证横幅","Hide the authentication banner from the top of the game screen.":"隐藏游戏屏幕顶部的身份验证横幅。","Hide the authentication banner":"隐藏身份验证横幅","Open authentication window":"打开身份验证窗口","Open an authentication window for the player to log in.":"打开一个验证窗口供玩家登录。","Open an authentication window":"打开身份验证窗口","Authentication window is open":"身份验证窗口已打开","Check if the authentication window is open.":"检查身份验证窗口是否打开。","Log out the player":"注销玩家","Log out the player.":"注销玩家。","Get the username of the authenticated player.":"获取经过身份验证的玩家的用户名。","User ID":"用户 ID","Get the unique user ID of the authenticated player.":"获取经过身份验证的玩家的唯一用户 ID。","Player is authenticated":"玩家已通过身份验证","Check if the player is authenticated.":"检查玩家是否已通过身份验证。","Player has logged in":"玩家已登录","Check if the player has just logged in.":"检查玩家是否刚刚登录。","Debugger Tools":"调试器工具","Allow to interact with the editor debugger from the game (notably: enable 2D debug draw, log a message in the debugger console).":"允许从游戏与编辑器调试器交互(特别是:启用 2D 调试绘制,在调试控制台记录消息)。","Pause game execution":"暂停游戏执行","This pauses the game, useful for inspecting the game state through the debugger. Note that events will be still executed until the end before the game is paused.":"暂停游戏,可以通过调试器检查游戏状态。 请注意,在游戏暂停之前事件仍将被执行。","Draw collisions hitboxes and points":"绘制碰撞箱和点","This activates the display of rectangles and information on screen showing the objects bounding boxes (blue), the hitboxes (red) and some points of objects.":"这将激活矩形和在屏幕上显示物体边界框(蓝色)、hitbox(红色) 和物体的一些点的信息的显示。","Enable debugging view of bounding boxes/collision masks: _PARAM1_ (include invisible objects: _PARAM2_, point names: _PARAM3_, custom points: _PARAM4_)":"启用边界框/碰撞掩码的调试视图: _PARAM1_ (包括不可见对象: _PARAM2_, 点名: _PARAM3_, 自定义点: _PARAM4_)","Enable debug draw":"启用调试绘图","Show collisions for hidden objects":"显示隐藏对象的碰撞","Show points names":"显示点名称","Show custom points":"显示自定义点","Log a message to the console":"将消息记录到控制台","Logs a message to the debugger's console.":"将一条消息记录到调试器的控制台。","Log message _PARAM0_ of type _PARAM1_ to the console in group _PARAM2_":"将类型为 _PARAM1_ 的消息_PARAM0_ 记录到控制台_PARAM2_的组中。","Provides an object to display a video on the scene. The recommended file format is MPEG4, with H264 video codec and AAC audio codec, to maximize the support of the video on different platform and browsers.":"提供一个对象以在场景中显示视频。推荐的文件格式为 MPEG4,具有 H264 视频编解码器和 AAC 音频编解码器,以最大限度地支持不同平台和浏览器上的视频。","Loop the video":"循环视频","Playback settings":"回放设置","Video volume (0-100)":"视频音量 (0-100)","Displays a video.":"显示视频。","Play a video":"播放视频","Play a video (recommended file format is MPEG4, with H264 video codec and AAC audio codec).":"播放视频 (建议的文件格式为 MPEG4, 有H264 视频编码和 AAC 音频编解码器)。","Play the video of _PARAM0_":"播放 _PARAM0_ 的视频","Video object":"视频对象","Pause a video":"暂停视频","Pause the specified video.":"暂停指定的视频。","Pause video _PARAM0_":"暂停视频 _PARAM0_","Loop a video":"循环播放视频","Loop the specified video.":"循环指定的视频。","Loop video of _PARAM0_: _PARAM1_":"_PARAM0_循环视频: _PARAM1_","Activate loop":"激活循环","Mute a video":"静音视频","Mute, or unmute, the specified video.":"静音或取消静音指定的视频。","Mute video of _PARAM0_: _PARAM1_":"_PARAM0_视频无声: _PARAM1_","Activate mute":"打开声音","Current time":"当前时间","Set the time of the video":"设置视频时间","the time":"时间","Position (in seconds)":"位置(秒)","Volume":"音量","Set the volume of the video object.":"设置视频对象的音量。","the volume":"设置音量","Volume (0-100)":"音量 (0-100)","Get the volume":"获取音量","Get the volume of a video object, between 0 (muted) and 100 (maximum).":"获取视频对象的音量,介于 0 (无声) 和 100 (最大)。","Is played":"已播放","Check if a video is played.":"检查该视频是否已播放","_PARAM0_ is played":"_PARAM0_ 是播放","Is paused":"为暂停时","Check if the video is paused.":"检测视频是否已暂停","_PARAM0_ is paused":"_PARAM0_ 已暂停","Is looped":"是循环","Check if the video is looped.":"检查视频是否在循环播放","_PARAM0_ is looped":"_PARAM0_ 是循环的","Compare the current volume of a video object.":"比较当前视频对象的音量。","Volume to compare to (0-100)":"要比较的音量 (0-100)","Is muted":"静音","Check if a video is muted.":"检查视频是否已静音","_PARAM0_ is muted":"_PARAM0_是静音的","Get current time":"获取当前时间","Return the current time of a video object (in seconds).":"返回视频对象的当前时间(秒)。","Get the duration":"获取时长","Return the duration of a video object (in seconds).":"返回视频对象的时长(秒)。","Compare the duration of a video object":"比较视频对象的持续时间","the duration (in seconds)":"持续时间(秒)","Compare the current time of a video object":"比较视频对象的当前时间","the current time (in seconds)":"当前时间(秒)","Time to compare to (in seconds)":"比较时间(以秒为单位)","Is ended":"已结束","Check if a video is ended":"检查视频是否结束","_PARAM0_ is ended":"_PARAM0_ 已结束","Set opacity":"设定不透明度","Set opacity of the specified video object.":"设置指定视频对象的不透明度。","Compare the opacity of a video object":"比较视频对象的不透明度","Get current opacity":"获取当前不透明度","Return the opacity of a video object":"返回视频对象的不透明度","Set playback speed":"设置回放速度","Set playback speed of the specified video object, (1 = the default speed, >1 = faster and <1 = slower).":"设置指定视频对象的播放速度(1= 默认速度, >1 = 更快, <1 = 更慢).","the playback speed":"播放速度","Playback speed (1 by default)":"播放速度 (1 默认)","Playback speed ":"回放速度 ","Compare the playback speed of a video object":"比较视频对象的播放速度","Get current playback speed":"获取当前播放速度","Return the playback speed of a video object":"返回视频对象的播放速度","Spatial sound":"空间声音","Allow positioning sounds in a 3D space. The stereo system of the device is used to simulate the position of the sound and to give the impression that the sound is located somewhere around the player.":"允许在3D空间内放置声音。 设备的立体系统用于模拟声音的位置,并给人留下声音位于播放器周围某处的印象。","Set position of sound":"设置声音位置","Sets the spatial position of a sound. When a sound is at a distance of 1 to the listener, it's heard at 100% volume. Then, it follows an *inverse distance model*. At a distance of 2, it's heard at 50%, and at a distance of 4 it's heard at 25%.":"设置声音的空间位置。当声音距离监听器1时,它会听到100%的音量。 然后沿用*反向距离模型*。 距离2时,听到的是50%,而距离4时,听到的是25%。","Set position of sound on channel _PARAM1_ to position _PARAM2_, _PARAM3_, _PARAM4_":"设置 _PARAM1_ 频道声音的位置为 _PARAM2_, _PARAM3_, _PARAM4_","Channel":"通道","Listener position":"监听器位置","Change the spatial position of the listener/player.":"更改监听器/播放器的空间位置。","Change the listener position to _PARAM0_, _PARAM1_, _PARAM2_":"将监听器位置更改为 _PARAM0_、_PARAM1_、_PARAM2_","Lights":"灯光","Light Obstacle Behavior":"光线障碍行为","Flag objects as being obstacles to 2D lights. The light emitted by light objects will be stopped by the object. This does not work on 3D objects and 3D games.":"将对象标记为2D光线的障碍物。光对象发出的光线将被对象阻挡。这在3D对象和3D游戏中无效。","When activated, display the lines used to render the light - useful to understand how the light is rendered on screen.":"启用时,显示用于渲染灯的线条 - 有助于理解屏幕上灯光的渲染方式。","Light texture (optional)":"灯光纹理(可选)","A texture to be used to display the light. If you don't specify a texture, the light is rendered as fading from bright, in its center, to dark.":"用于显示灯光的纹理. 如果您没有指定纹理,光线将会变为从亮丽、中心变为黑暗。","Light":"灯光","Displays a 2D light on the scene, with a customizable radius and color. Then add the Light Obstacle behavior to the objects that must act as obstacle to the lights.":"在场景中显示 2D 灯光,具有可自定义的半径和颜色。然后将光障碍行为添加到必须作为灯光障碍的对象中。","Light radius":"灯光半径","Set the radius of light object":"设置灯光对象的半径","Set the radius of _PARAM0_ to: _PARAM1_":"将 _PARAM0_ 的半径设为:_PARAM1_","Light color":"光的颜色","Set the color of light object in format \"R;G;B\" string.":"以\"R;G;B\"字符串的格式设置灯光对象的颜色。","Set the color of _PARAM0_ to: _PARAM1_":"设置 _PARAM0_ 的颜色至_PARAM1_","Allow your game to send scores and interact with the Facebook Instant Games platform.":"允许您的游戏发送分数并与 Facebook 即时游戏平台交互。","Save player data":"保存玩家数据","Save the content of the given scene variable in the player data, stored on Facebook Instant Games servers":"将指定场景变量的内容保存到玩家数据中,存储在 Facebook 即时游戏服务器","Save the content of _PARAM1_ in key _PARAM0_ of player data (store success message in _PARAM2_ or error in _PARAM3_)":"将_PARAM1_ 的内容保存到玩家数据的关键_PARAM0_ (存储成功消息在 _PARAM2_ 中或错误在 _PARAM3_)","Player data":"玩家数据","Variable where to store the success message (optional)":"变量成功存储到何处的消息(可选)","Variable where to store the error message (optional, if an error occurs)":"存储错误信息的变量(可选,如果发生错误)","Load player data":"加载玩家数据","Load the player data with the given key in a variable":"用变量中给定的密钥加载玩家数据","Load player data with key _PARAM0_ in _PARAM1_ (or error in _PARAM2_)":"在 _PARAM1_ 中用键_PARAM0_ 加载玩家数据(或_PARAM2_中的错误)","Data key name (e.g: \"Lives\")":"数据密钥名称(如:“生命”)","Variable where to store loaded data":"存储加载数据的变量","Save the score, and optionally the content of the given variable in the player score, for the given metadata.":"为给定的元数据保存得分,并可选地保存玩家分数中给定的变量内容。","In leaderboard _PARAM0_, save score _PARAM1_ for the player and extra data from _PARAM2_ (store success message in _PARAM3_ or error in _PARAM4_)":"在排行榜_PARAM0_中,为玩家保存得分_PARAM1_以及从 _PARAM2_ 的额外数据(存储成功消息在 _PARAM3_ 或错误 _PARAM4_)","Optional variable with metadata to save":"带有元数据的可选变量可保存","Load player entry":"加载参与的玩家","Load the player entry in the given leaderboard":"加载给定排行榜中参与的玩家","Load player entry from leaderboard _PARAM0_. Set rank in _PARAM1_, score in _PARAM2_ (extra data if any in _PARAM3_ and error in _PARAM4_)":"从排行榜_PARAM0_加载参与玩家。在_PARAM1_中设置排行,以_PARAM2_ 为分数(如果在_PARAM3_中存在任何额外数据,则在_PARAM4_中设置错误)","Leaderboard name (e.g: \"PlayersBestTimes\")":"排行榜名称(如\"玩家最佳时间\")","Variable where to store the player rank (of -1 if not ranked)":"存放玩家排名的变量(如果没有排名为 -1 )","Variable where to store the player score (of -1 if no score)":"存放玩家排名的变量(如果没有排名为 -1 )","Variable where to store extra data (if any)":"存储额外数据的变量(如果有)","Check if ads are supported":"检查是否支持广告","Check if showing ads is supported on this device (only mobile phones can show ads)":"检查是否在此设备上支持显示广告 (只有手机可以显示广告)","Ads can be shown on this device":"广告可以在此设备上显示","Is the interstitial ad ready":"插件是否已准备好","Check if the interstitial ad requested from Facebook is loaded and ready to be shown.":"检查是否从 Facebook 请求的插件已加载并准备显示。","The interstitial ad is loaded and ready to be shown":"插件已加载并准备显示","Load and prepare an interstitial ad":"加载并准备插广告","Request and load an interstitial ad from Facebook, so that it is ready to be shown.":"从Facebook请求并加载插广告,以便准备好显示。","Request and load an interstitial ad from Facebook (ad placement id: _PARAM0_, error in _PARAM1_)":"请求并从Facebook加载插贴(广告位置id: _PARAM0_, 错误在 _PARAM1_)","The Ad Placement id (can be found while setting up the ad on Facebook)":"广告位置ID (在设置广告到Facebook时可以找到)","Show the loaded interstitial ad":"显示加载插的广告","Show the interstitial ad previously loaded in memory. This won't work if you did not load the interstitial before.":"显示之前加载的插件广告。如果你以前没有加载插件,这将无法工作。","Show the interstitial ad previously loaded in memory (if any error, store it in _PARAM0_)":"在内存中显示以前加载的插件(如果有任何错误,请在 _PARAM0_)","Is the rewarded video ready":"奖励的视频已准备好","Check if the rewarded video requested from Facebook is loaded and ready to be shown.":"检查是否从 Facebook 请求的奖励视频已加载并准备显示。","The rewarded video is loaded and ready to be shown":"奖励的视频已加载并准备显示","Load and prepare a rewarded video":"加载并准备奖励的视频","Request and load a rewarded video from Facebook, so that it is ready to be shown.":"从Facebook请求并加载奖励视频,以便准备好播放。","Request and load a rewarded video from Facebook (ad placement id: _PARAM0_, error in _PARAM1_)":"从 Facebook 请求并加载奖励视频 (广告位置: _PARAM0_, 错误在 _PARAM1_)","Show the loaded rewarded video":"显示加载的奖励视频","Show the rewarded video previously loaded in memory. This won't work if you did not load the video before.":"在内存中显示以前加载过的奖励视频。如果您以前没有加载视频,这将无法使用。","Show the rewarded video previously loaded in memory (if any error, store it in _PARAM0_)":"在内存中显示之前加载的奖励视频(如果有任何错误,请在 _PARAM0_)","Player identifier":"玩家ID","Get the player unique identifier":"获取玩家的唯一标识符","Player name":"玩家名称","Get the player name":"获取玩家名称","3D physics engine":"3D 物理引擎","If enabled, the object won't rotate and will stay at the same angle.":"如果启用,对象将不会旋转并保持相同的角度。例如,对于角色很有用。","Capsule":"胶囊","Sphere":"球体","Cylinder":"圆柱","Mesh (works for Static only)":"Mesh(仅适用于静态)","Simplified 3D model (leave empty to use object's one)":"简化的 3D 模型(留空以使用对象的模型)","Mass override":"质量覆盖","Leave at 0 to use the density.":"设置为 0 以使用密度。","Linear damping reduces an object's movement speed over time, making its motion slow down smoothly.":"线性阻尼随着时间的推移降低物体的运动速度,使其运动平滑减慢。","Angular damping reduces an object's rotational speed over time, making its spins slow down smoothly.":"角阻尼随着时间的推移降低物体的旋转速度,使其旋转平滑减慢。","Gravity Scale multiplies the world's gravity for a specific body, making it experience stronger or weaker gravitational force than normal.":"重力比例乘以特定物体的世界重力,使其体验比正常更强或更弱的重力。","Simulate realistic 3D physics for this object including gravity, forces, collisions, etc.":"为该对象模拟真实的三维物理效果,包括重力、力和碰撞等。","Gravity (in Newton)":"重力 (牛顿)","World gravity on Z axis":"Z 轴上的世界重力","the world gravity on Z axis":"Z 轴上的世界重力","Enable or disable an object fixed rotation. If enabled the object won't be able to rotate. This action has no effect on characters.":"启用或禁用对象固定旋转。如果启用,对象将无法旋转。此操作对角色没有影响。","Modify an object shape scale. It affects custom shape dimensions. If custom dimensions are not set, the body will be scaled automatically to the object size.":"修改对象形状比例。它影响自定义形状尺寸。如果未设置自定义尺寸,主体将自动缩放到对象大小。","the object density. The body's density and volume determine its mass.":"物体密度。物体的密度和体积决定了它的质量。","Shape offset X":"形状偏移 X","the object shape offset on X.":"对象形状在 X 轴上的偏移。","the shape offset on X":"形状在 X 轴上的偏移","Shape offset Y":"形状偏移 Y","the object shape offset on Y.":"对象形状在 Y 轴上的偏移。","the shape offset on Y":"Y轴形状偏移","Shape offset Z":"形状偏移 Z","the object shape offset on Z.":"对象形状在 Z 轴上的偏移。","the shape offset on Z":"形状在 Z 轴上的偏移","the object friction. How much energy is lost from the movement of one object over another. The combined friction from two bodies is calculated as 'sqrt(bodyA.friction * bodyB.friction)'.":"物体摩擦力。一个物体在另一个物体上的运动损失了多少能量。两个物体的合并摩擦力计算为 'sqrt(bodyA.friction * bodyB.friction)'。","the object restitution. Energy conservation on collision. The combined restitution from two bodies is calculated as 'max(bodyA.restitution, bodyB.restitution)'.":"物体恢复。碰撞时的能量守恒。两个物体的组合恢复计算为“ max(bodyA.restitution, bodyB.restitution)”。","the object linear damping. How much movement speed is lost across the time.":"物体的线性阻尼。随着时间推移,运动速度会损失多少。","the object angular damping. How much angular speed is lost across the time.":"物体的角阻尼。随着时间推移,角速度损失了多少。","the object gravity scale. The gravity applied to an object is the world gravity multiplied by the object gravity scale.":"物体重力标度。应用于对象的重力是世界重力乘以对象重力比例。","Layer (1 - 8)":"图层 (1-8)","Mask (1 - 8)":"遮罩 (1-8)","the object linear velocity on X":"物体在 X 轴上的线速度","the object linear velocity on Y":"物体在 Y 轴上的线速度","Linear velocity Z":"线性速度 Z","the object linear velocity on Z":"物体在 Z 轴上的线速度","the linear velocity on Z":"Z 上的线性速度","the object linear velocity length":"对象线性速度长度","Angular velocity X":"角速度 X","the object angular velocity around X":"物体在 X 轴上的角速度","the angular velocity around X":"X 周围的角速度","Angular velocity Y":"角速度 Y","the object angular velocity around Y":"物体在 Y 轴上的角速度","the angular velocity around Y":"Y 周围的角速度","Angular velocity Z":"角速度 Z","the object angular velocity around Z":"物体在 Z 轴上的角速度","the angular velocity around Z":"Z 周围的角速度","Apply force (at a point)":"施加力量 (在某一点)","Apply a force of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ at _PARAM5_ ; _PARAM6_ ; _PARAM7_":"在 _PARAM5_;_PARAM6_;_PARAM7_ 处对 _PARAM0_ 施加 _PARAM2_;_PARAM3_;_PARAM4_ 的力","Z component (N)":"Z 组件 (N)","Application point on Z axis":"Z 轴上的应用点","Use `MassCenterX`, `MassCenterY` and `MassCenterZ` expressions to avoid any rotation.":"使用“MassCenterX”、“MassCenterY”和“MassCenterZ”表达式来避免任何旋转。","Apply force (at center)":"施加力量 (在中心)","Apply a force of _PARAM2_ ; _PARAM3_ ; _PARAM4_ at the center of _PARAM0_":"在 _PARAM0_ 的中心施加 _PARAM2_ ; _PARAM3_ ; _PARAM4_ 的力","Apply to _PARAM0_ a force of length _PARAM2_ towards _PARAM3_ ; _PARAM4_ ; _PARAM5_":"对 _PARAM0_ 施加长度为 _PARAM2_ 的力,朝向 _PARAM3_;_PARAM4_;_PARAM5_","Apply impulse (at a point)":"应用冲量 (在某一点)","Apply an impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ at _PARAM5_ ; _PARAM6_ ; _PARAM7_":"在 _PARAM5_;_PARAM6_;_PARAM7_ 处向 _PARAM0_ 施加 _PARAM2_;_PARAM3_;_PARAM4_ 冲量","Z component (N·s or kg·m·s⁻¹)":"Z 组件 (N·s or kg·m·s⁻¹)","Apply impulse (at center)":"应用冲量 (在中心)","Apply an impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ at the center of _PARAM0_":"在 _PARAM0_ 的中心施加 _PARAM2_ ; _PARAM3_ ; _PARAM4_ 的冲量","Apply to _PARAM0_ an impulse of length _PARAM2_ towards _PARAM3_ ; _PARAM4_ ; _PARAM5_":"对 _PARAM0_ 施加长度为 _PARAM2_ 的冲量,朝向 _PARAM3_;_PARAM4_;_PARAM5_","Apply a torque of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ an":"对 _PARAM0_ 施加 _PARAM2_ ; _PARAM3_ ; _PARAM4_ 的扭矩","Torque around X (N·m)":"X 方向扭矩 (N·m)","Torque around Y (N·m)":"Y 方向扭矩 (N·m)","Torque around Z (N·m)":"Z 方向扭矩 (N·m)","Apply angular impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ an":"将 _PARAM2_ ; _PARAM3_ ; _PARAM4_ 的角冲量施加到 _PARAM0_","Angular impulse around X (N·m·s)":"绕 X 轴的角冲量 (N·m·s)","Angular impulse around Y (N·m·s)":"绕 Y 轴的角冲量 (N·m·s)","Angular impulse around Z (N·m·s)":"绕 Z 轴的角冲量 (N·m·s)","Inertia around X":"X 轴周围的惯性","Return the inertia around X axis of the object (in kilograms · meters²) when for its default rotation is (0°; 0°; 0°)":"返回物体默认旋转角度为 (0°; 0°; 0°) 时绕 X 轴的惯性 (单位为千克·米²)","Inertia around Y":"Y 轴周围的惯性","Return the inertia around Y axis of the object (in kilograms · meters²) when for its default rotation is (0°; 0°; 0°)":"返回物体默认旋转角度为 (0°; 0°; 0°) 时绕 Y 轴的惯性 (单位为千克·米²)","Inertia around Z":"Z 轴周围的惯性","Return the inertia around Z axis of the object (in kilograms · meters²) when for its default rotation is (0°; 0°; 0°)":"返回物体默认旋转角度为 (0°; 0°; 0°) 时绕 Z 轴的惯性 (单位为千克·米²)","Mass center Z":"质量中心 Z","Jump height":"跳跃高度","Forward acceleration":"前进加速度","Forward deceleration":"前进减速","Max. forward speed":"最大前进速度","Sideways acceleration":"侧向加速度","Sideways deceleration":"侧向减速","Max. sideways speed":"最大侧向速度","3D physics character":"3D 物理角色","Allow an object to jump and run on platforms that have the 3D physics behavior(and which are generally set to \"Static\" as type, unless the platform is animated/moved in events).\n\nThis behavior is usually used with one or more \"mapper\" behavior to let the player move it.":"允许一个对象在具有3D物理行为的平面上跳跃和奔跑(除非平面在事件中动画/移动,通常其类型设置为“静态”)。\n\n此行为通常与一个或多个“映射器”行为一起使用,以让玩家移动它。","Simulate move forward key press":"模拟按下前进键","Simulate a press of the move forward key.":"模拟按下前进键。","Simulate pressing Forward key for _PARAM0_":"模拟按下 _PARAM0_ 的前进键","Character controls":"角色控制","Simulate move backward key press":"模拟按下后退键","Simulate a press of the move backward key.":"模拟按下后退键。","Simulate pressing Backward key for _PARAM0_":"模拟按下 _PARAM0_ 的后退键","Simulate move right key press":"模拟按下右移动键","Simulate a press of the move right key.":"模拟按下右移动键。","Simulate pressing Right key for _PARAM0_":"模拟按下 _PARAM0_ 的右键","Simulate move left key press":"模拟按下左移键","Simulate a press of the move left key.":"模拟按下左移键。","Simulate pressing Left key for _PARAM0_":"模拟按下 _PARAM0_ 的左键","A stick angle for a 3D Physics character of 0° means the object will move to the right, 90° backward and -90° (or 270°) forward.":"对于 3D 物理角色的 0° 固定角度意味着物体将向右移动,90° 向后移动,以及 -90°(或 270°)向前移动。","Simulating a stick control is usually used for connecting gamepads. For NPCs, it's usually better to rotate them toward target & simulate forward key instead.":"模拟杆控制通常用于连接游戏手柄。对于 NPC,通常还是更好地让它们朝目标旋转并模拟向前按键。","When this action is executed, the object is able to jump again, even if it is in the air: this can be useful to allow a double jump for example. This is not a permanent effect: you must call again this action every time you want to allow the object to jump (apart if it's on the floor).":"执行此操作后,即使对象在空中,它也能再次跳跃:例如,这对于允许双跳很有用。这不是永久效果:每次想要允许对象跳跃时都必须再次调用此操作 (如果对象在地板上则另当别论)。","Character state":"角色状态","Should bind object and forward angle":"该绑定对象和前进角度","Check if the object angle and forward angle should be kept the same.":"检查物体角度和前进角度是否应保持不变。","Keep _PARAM0_ angle and forward angle the same":"保持 _PARAM0_ 角度和前进角度相同","Character configuration":"角色配置","Enable or disable keeping the object angle and forward angle the same.":"启用或禁用保持目标角度和前进角度相同。","Should bind _PARAM0_ angle and forward angle: _PARAM2_":"应绑定 _PARAM0_ 角度和前进角度:_PARAM2_","Keep object angle and forward direction the same":"保持物体角度和前进方向相同","Forward angle":"向前角度","Compare the angle used by the character to go forward.":"比较角色前进所使用的角度。","Forward angle of _PARAM0_ is _PARAM2_ ± _PARAM3_°":"_PARAM0_ 的前方角度为 _PARAM2_ ± _PARAM3_°","Change the angle used by the character to go forward.":"改变角色前进的角度。","the forward angle":"向前角度","Forward angle of the character":"角色的前向角度","Return the angle used by the character to go forward.":"返回角色前进所使用的角度。","Current forward speed":"当前前进速度","the current forward speed of the object. The object moves backward with negative values and forward with positive ones":"物体的当前前进速度。对象以负值向后移动,以正值向前移动","the current forward speed":"当前前进速度","the forward acceleration of an object":"物体前进的加速度","the forward acceleration":"前进加速度","the forward deceleration of an object":"物体前进的减速度","the forward deceleration":"前进减速","Forward max speed":"前进最大速度","the forward max speed of the object":"物体前进的最大速度","the forward max speed":"前进最大速度","Current sideways speed":"当前侧向速度","the current sideways speed of the object. The object moves to the left with negative values and to the right with positive ones":"物体当前的侧向速度。负值表示物体向左移动,正值表示物体向右移动","the current sideways speed":"当前侧向速度","the sideways acceleration of an object":"物体的侧向加速度","the sideways acceleration":"侧向加速度","the sideways deceleration of an object":"物体的侧向减速度","the sideways deceleration":"侧向减速","Sideways max speed":"侧向最大速度","the sideways max speed of the object":"物体的侧向最大速度","the sideways max speed":"侧向最大速度","the current falling speed of the object. Its value is always positive.":"物体当前的下降速度,它的值总是正数。","the current jump speed of the object. Its value is always positive.":"物体当前的跳跃速度,它的值总是正数。","the jump speed of an object. Its value is always positive":"物体的跳跃速度。其值始终为正","the jump sustain time of an object. This is the time during which keeping the jump button held allow the initial jump speed to be maintained":"物体跳跃的持续时间。这是按住跳跃按钮以保持初始跳跃速度的时间。","the gravity applied on an object":"作用在物体上的重力","the maximum falling speed of an object":"物体的最大下落速度","Max steer angle":"最大转向角度","Steering":"转向","Beginning steer speed":"初始转向速度","End steer speed":"最终转向速","Max engine torque":"最大发动机扭矩","Allow cars to climb steep slopes and push heavy obstacles.":"允许汽车攀登陡坡并推动重型障碍物。","Max engine speed":"最大发动机速度","Engine inertia":"发动机惯性","Slow down car acceleration.":"减慢汽车加速度。","Reverse gear ratio":"倒档齿轮比","1st gear ratio":"1 档齿轮比","2nd gear ratio":"2 档齿轮比","3rd gear ratio":"3 档齿轮比","4th gear ratio":"4 档齿轮比","5th gear ratio":"5 档齿轮比","6th gear ratio":"6 档齿轮比","Wheel radius":"轮子半径","Wheels":"轮子","Wheel width":"轮子宽度","Back wheel offset X":"后轮偏移 X","Positive values move wheels outside.":"正值使车轮向外移动。","Front wheel offset X":"前轮偏移 X","Wheel offset Y":"轮子偏移 Y","Wheel offset Z":"轮子偏移 Z","Brake max torque":"最大制动扭矩","Brakes":"刹车","Hand brake max torque":"手动制动器最大扭矩","Back wheel drive":"后轮驱动","Front wheel drive":"前轮驱动","Pitch and roll max angle":"俯仰和滚动最大角度","3D physics car":"3D 物理汽车","Simulate a realistic car using the 3D physics engine. This is mostly useful for the car controlled by the player (it's usually too complex for other cars in a game).\n\nThis behavior is usually used with one or more \"mapper\" behavior to let the player move it.":"使用3D物理引擎模拟真实的汽车。这对玩家控制的汽车特别有用(通常对于游戏中的其他汽车来说过于复杂)。\n\n此行为通常与一个或多个\"映射器\"行为一起使用,以便让玩家移动它。","Car controls":"汽车控制","Simulate hand brake key press":"模拟手刹按键按下","Simulate a press of the hand brake key.":"模拟按下手刹键。","Simulate pressing hand brake key for _PARAM0_":"模拟按下手刹键 _PARAM0_","Simulate accelerator stick control":"模拟操纵杆控制","Simulate an accelerator stick control.":"模拟操纵杆控制。","Simulate an accelerator stick control for _PARAM0_ with a _PARAM2_ force":"模拟一个用于 _PARAM0_ 的加速杆控制,施加 _PARAM2_ 力","Stick force (between -1 and 1)":"粘附力 (范围在-1到1之间)","Simulate steering stick control":"模拟方向盘控制","Simulate a steering stick control.":"模拟方向盘控制。","Simulate a steering stick control for _PARAM0_ with a _PARAM2_ force":"模拟一个用于 _PARAM0_ 的转向杆控制,施加 _PARAM2_ 力","Steer angle":"转向角度","the current steer angle (in degree). The value is negative when cars turn left":"当前的转向角度 (以度为单位)。当汽车左转时,该值为负数。","the steer angle":"转向角度","Car state":"汽车状态","Steer angle (in degree)":"转向角度 (以度为单位)","Engine speed":"发动机速度","the current engine speed (RPM)":"当前发动机转速 (RPM)","the engine speed":"发动机速度","Engine speed (RPM)":"发动机速度 (RPM)","Current gear":"当前档位","the current gear (-1 = reverse, 0 = neutral, 1 = 1st gear)":"当前档位 (-1 = 倒档,0 = 空挡,1 = 1档)","the current gear":"当前档位","Check if any wheel is in contact with the ground.":"检查是否有轮子接触地面。","Engine max torque":"发动机最大扭矩","the engine max torque (N·m). It allows cars to climb steep slopes and push heavy obstacles":"\n发动机最大扭矩 (N·m)。它使汽车能够攀登陡坡并推动重型障碍物。","the engine max torque":"发动机最大扭矩","Car configuration":"汽车配置","Engine max torque (N·m)":"发动机最大扭矩 (N·m)","Engine max speed":"发动机最大速度","the engine max speed (RPM)":"发动机最大转速 (RPM)","the engine max speed":"发动机最大速度","Engine max speed (RPM)":"发动机最大速度 (RPM)","the engine inertia (kg·m²). It slows down car acceleration":"发动机惯性 (kg·m²)。它会减缓汽车加速度","the engine inertia":"发动机惯性","Engine inertia (kg·m²)":"发动机惯性 (kg·m²)","Check if a 3D physics character is on a given platform.":"检查 3D 物理角色是否在给定的平台上。","Adjustment":"调整","Adjust gamma, contrast, saturation, brightness, alpha or color-channel shift.":"调整伽玛、对比度、饱和度、亮度、透明或颜色通道转移。","Gamma (between 0 and 5)":"伽玛(0到5)","Saturation (between 0 and 5)":"饱和度(介于 0 和 5)","Contrast (between 0 and 5)":"对比度(介于 0 和 5)","Brightness (between 0 and 5)":"亮度(介于 0 和 5)","Red (between 0 and 5)":"红色(0到5)","Green (between 0 and 5)":"绿色(0到5)","Blue (between 0 and 5)":"蓝色(0到5)","Alpha (between 0 and 1, 0 is transparent)":"Alpha (介于 0 到 1 之间, 0 是透明)","Advanced bloom":"高级光晕","Applies a bloom effect.":"应用光晕效果。","Threshold (between 0 and 1)":"阈值(0-1之间)","Bloom Scale (between 0 and 2)":"血量比例 (0到2)","Brightness (between 0 and 2)":"亮度(介于 0 和 2)","Blur (between 0 and 20)":"模糊(介于 0 和 20 之间)","Quality (between 0 and 20)":"质量 (介于 0 和 20 之间)","Padding for the visual effect area":"视觉效果区域的填充","ASCII":"ASCII","Render the image with ASCII characters only.":"只渲染带有ASCII字符的图像。","Size (between 2 and 20)":"大小 (2至20之间)","Beveled edges":"斜边","Add beveled edges around the rendered image.":"在渲染图像周围添加斜边。","Rotation (between 0 and 360)":"旋转 (0-360)","Outer strength (between 0 and 5)":"外部强度(0至5之间)","Distance (between 10 and 20)":"距离(10至20之间)","Light alpha (between 0 and 1)":"浅色透明(介于 0 和 1) 之间","Light color (color of the outline)":"浅色(外观颜色)","Shadow color (color of the outline)":"阴影颜色 (外观的颜色)","Shadow alpha (between 0 and 1)":"阴影透明(介于 0 和 1) 之间","Black and White":"黑白的","Alter the colors to make the image black and white":"更改颜色,使图像变为黑白。","Opacity (between 0 and 1)":"不透明度 (在 0 和 1)","Blending mode":"混合模式","Alter the rendered image with the specified blend mode.":"用指定的混合模式更改呈现的图像。","Mode (0: Normal, 1: Add, 2: Multiply, 3: Screen)":"模式 (0: 正常, 1:加法, 2:乘法, 3:屏幕)","Blur (Gaussian, slow - prefer to use Kawase blur)":"模糊(高斯模糊,慢速-喜欢用Kawase模糊)","Blur the rendered image. This is slow, so prefer to use Kawase blur in most cases.":"模糊渲染的图像。这是缓慢的,所以在大多数情况下更喜欢使用 Kawase 模糊。","Blur intensity":"模糊强度","Number of render passes. An high value will cause lags/poor performance.":"渲染通过次数。高值会导致延迟/性能差。","Resolution":"分辨率","Kernel size (one of these values: 5, 7, 9, 11, 13, 15)":"内核大小(这些值之一:5、7、9、11、13、15)","Brightness":"亮度","Make the image brighter.":"使图像更加亮。","Brightness (between 0 and 1)":"亮度(介于 0 和 1)","Bulge Pinch":"凹凸","Bulges or pinches the image in a circle.":"将图像凸起或挤压成圆形。","Center X (between 0 and 1, 0.5 is image middle)":"居中 X (介于 0 到 1, 0.5 之间的图像中间值)","Center Y (between 0 and 1, 0.5 is image middle)":"居中 Y (介于 0 和 1 之间,0.5 为图像中间值)","strength (between -1 and 1)":"强度(介于-1和1之间)","-1 is strong pinch, 0 is no effect, 1 is strong bulge":"-1为强挤压,0为无效,1为强凸","Color Map":"彩色地图","Change the color rendered on screen.":"更改屏幕上呈现的颜色。","Color map texture for the effect":"特效的颜色贴图纹理","You can change colors of pixels by modifying a reference color image, containing each colors, called the *Color Map Texture*. To get started, **download** [a default color map texture here](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).":"您可以通过修改包含每种颜色的参考彩色图像来更改像素的颜色,称为*颜色贴图纹理*。要开始使用,请**下载** [此处的默认颜色贴图纹理](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects)。","Disable anti-aliasing (\"nearest\" pixel rounding)":"禁用反锯齿(\"最近\"像素舍入)","Mix":"混合","Mix value of the effect on the layer (in percent)":"图层效果的混合值 (百分比)","Color Replace":"颜色替换","Effect replacing a color (or similar) by another.":"特效替换颜色(或类似颜色)。","Original Color":"原始颜色","New Color":"新颜色","Epsilon (between 0 and 1)":"Epsilon (介于 0 到 1)","Tolerance/sensitivity of the floating-point comparison between colors (lower = more exact, higher = more inclusive)":"颜色间浮点比较的公差/灵敏度 (较低=较精确,较高=较高)","CRT":"CRT","Apply an effect resembling old CRT monitors.":"应用一个类似旧的 CRT 监视器的效果。","Line width (between 0 and 5)":"线条宽度 (介于 0 至 5)","Line contrast (between 0 and 1)":"线条对比度 (0 和 1)","Noise (between 0 and 1)":"噪音 (介于 0 和 1) 之间","Curvature (between 0 and 10)":"曲率(0到10之间)","Show vertical lines":"显示垂直线","Noise size (between 0 and 10)":"噪音大小(0到10之间)","Vignetting (between 0 and 1)":"渐晕 (在 0 和 1)","Vignetting alpha (between 0 and 1)":"渐晕alpha(介于0和1之间)","Vignetting blur (between 0 and 1)":"渐晕模糊(介于0和1之间)","Interlaced Lines Speed":"隔行扫描线速度","0: Pause, 0.5: Half speed, 1: Normal speed, 2: Double speed, etc...":"0: 暂停, 0.5: 半速, 1: 正常速度, 2: 双速, 等...","Noise Frequency":"噪声频率","Displacement":"位移","Uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object.":"使用指定纹理中的像素值 (称为置换图) 来执行对象的移动。","Displacement map texture":"置换贴图纹理","Displacement map texture for the effect. To get started, **download** [a default displacement map texture here](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).":"位移贴图纹理的效果。开始时,**下载**[此处为默认置换贴图纹理](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).","Dot":"点","Applies a dotscreen effect making objects appear to be made out of black and white halftone dots like an old printer.":"应用点屏效果,使对象看起来像旧打印机一样由黑白半色调网点组成。","Scale (between 0.3 and 1)":"缩放 (介于 0.3 和 1)","Angle (between 0 and 5)":"角度(介于 0 和 5)","Drop shadow":"投下阴影","Add a shadow around the rendered image.":"在渲染图像周围添加阴影。","Quality (between 1 and 20)":"质量 (1至20之间)","Alpha (between 0 and 1)":"Alpha (介于 0 和 1) 之间","Distance (between 0 and 50)":"距离 (介于 0 和 50 之间)","Color of the shadow":"阴影颜色","Shadow only (shows only the shadow when enabled)":"仅显示阴影(启用时仅显示阴影)","Glitch":"玻璃","Applies a glitch effect to an object.":"将玻璃特效应用于对象。","Slices (between 2 and infinite)":"切片(2到无限之间)","Offset (between -400 and 400)":"偏移(-400至400之间)","Direction (between -180 and 180)":"方向(-180至180之间)","Fill Mode (between 0 and 4)":"填充模式 (0到4)","The fill mode of the space after the offset.(0: TRANSPARENT, 1: ORIGINAL, 2: LOOP, 3: CLAMP, 4: MIRROR)":"偏移后空间的填充模式。(0:透明,1:原始,2:循环,3:钳位,4:镜像)","Average":"平均值","Min Size":"最小尺寸","Sample Size":"示例大小","Animation Frequency":"动画频率","Red X offset (between -50 and 50)":"红色X偏移量(-50至50)","Red Y offset (between -50 and 50)":"红色Y偏移量(-50至50)","Green X offset (between -50 and 50)":"绿色X偏移量(-50至50)","Green Y offset (between -50 and 50)":"绿色Y偏移量(-50至50)","Blue X offset (between -50 and 50)":"蓝色X偏移量(-50至50)","Blue Y offset (between -50 and 50)":"蓝色Y偏移量(-50至50)","Glow":"发光","Add a glow effect around the rendered image.":"在渲染图像周围添加发光效果。","Inner strength (between 0 and 20)":"内部强度(介于 0 和 20 之间)","Outer strength (between 0 and 20)":"外部强度(0至20之间)","Color (color of the outline)":"颜色(轮廓的颜色)","Godray":"Godray","Apply and animate atmospheric light rays.":"应用并设置大气光线的动画。","Parallel (parallel rays)":"平行(平行射线)","Animation Speed":"动画速度","Lacunarity (between 0 and 5)":"空隙(介于 0 到 5)","Angle (between -60 and 60)":"角度(-60到60之间)","Gain (between 0 and 1)":"增益(在 0 和 1)","Light (between 0 and 60)":"亮度(0到60之间)","Center X (between 100 and 1000)":"居中 X (100到1000之间)","Center Y (between -1000 and 100)":"居中 Y (-1000至100)","HSL Adjustment":"HSL 调整","Adjust hue, saturation and lightness.":"调整色调、饱和度和亮度。","Hue in degrees (between -180 and 180)":"色调的度数 (介于-180和180之间)","Saturation (between -1 and 1)":"饱和度 (介于 -1和1之间)","Lightness (between -1 and 1)":"亮度 (介于 -1和1之间)","Colorize from the grayscale image":"从灰度图像着色","Blur (Kawase, fast)":"模糊(Kawase,快速)","Blur the rendered image, with much better performance than Gaussian blur.":"模糊渲染图像,具有比高斯模糊更好的性能。","Pixelize X (between 0 and 10)":"像素化 X (在 0 和 10 之间)","Pixelize Y (between 0 and 10)":"像素化 Y (0到10之间)","Light Night":"明亮的夜晚","Alter the colors to simulate night.":"更改颜色以模拟夜间。","Motion Blur":"运动模糊","Blur the rendered image to give a feeling of speed.":"模糊渲染图像以给人一种速度的感觉。","Velocity on X axis":"X 轴上的速度","Velocity on Y axis":"Y 轴上的速度","Kernel size (odd number between 3 and 25)":"内核大小 (3到25之间的奇数)","Quality of the blur.":"模糊的质量。","Offset":"偏移","Dark Night":"深色之夜:","Alter the colors to simulate a dark night.":"更改颜色以模拟黑夜。","Intensity (between 0 and 1)":"强度(介于 0 和 1)","Noise":"噪音","Add some noise on the rendered image.":"在渲染图像上添加一些噪音。","Noise intensity (between 0 and 1)":"噪音强度(介于 0 和 1)","Old Film":"旧电影","Add a Old film effect around the rendered image.":"在渲染图像周围添加旧影片效果。","Sepia (between 0 and 1)":"棕褐色 (介于 0 和 1) 之间","The amount of saturation of sepia effect, a value of 1 is more saturation and closer to 0 is less, and a value of 0 produces no sepia effect":"棕褐色效果的饱和度,值为1表示更大的饱和度,接近0表示较小,值为0则不产生棕褐色效果","Noise Size (between 0 and 10)":"噪音大小(0到10之间)","Scratch (between -1 and 1)":"划痕 (介于 -1 和 1)","Scratch Density (between 0 and 1)":"划痕密度(介于 0 和 1)","Scratch Width (between 1 and 20)":"划痕宽度 (1至20之间)","Vignetting Alpha (between 0 and 1)":"渐晕透明(介于 0 和 1) 之间)","Vignetting Blur (between 0 and 1)":"渐晕模糊(介于0和1之间)","Draws an outline around the rendered image.":"在渲染图像周围绘制轮廓。","Thickness (between 0 and 20)":"厚度(介于 0 和 20 之间)","Color of the outline":"轮廓颜色","Pixelate":"像素化","Applies a pixelate effect, making display objects appear 'blocky'.":"应用像素效果,使显示对象显得“块状”。","Size of the pixels (10 pixels by default)":"像素大小(默认为10像素)","Radial Blur":"径向模糊","Applies a Motion blur to an object.":"将动作模糊应用于对象。","The maximum size of the blur radius, -1 is infinite":"模糊半径的最大尺寸-1是无限的","Angle (between -180 and 180)":"角度(-180至180之间)","The angle in degree of the motion for blur effect":"模糊效果的运动角度","Kernel Size (between 3 and 25)":"内核大小(3到25之间)","The kernel size of the blur filter (Odd number)":"模糊滤镜内核大小 (奇数)","Reflection":"反射","Applies a reflection effect to simulate the reflection on water with waves.":"应用反射效果模拟波浪在水上的反射。","Reflect the image on the waves":"在波浪上反射图像","Vertical position of the reflection point":"反射点的垂直位置","Default is 50% (middle). Smaller numbers produce a larger reflection, larger numbers produce a smaller reflection.":"默认值为50%(中间值)。较小的数字产生较大的反射,较大的数字产生较小的反射。","Amplitude start":"振幅开始","Starting amplitude of waves (0 by default)":"开始波浪的振幅(默认为0)","Amplitude ending":"振幅结束","Ending amplitude of waves (20 by default)":"结束波浪振动 (默认20)","Wave length start":"波长开始","Starting wave length (30 by default)":"起始波长 (默认30)","Wave length ending":"波长结束","Ending wave length (100 by default)":"结束波浪长度 (默认100)","Alpha start":"Alpha 开始","Starting alpha (1 by default)":"正在启动 Alpha (默认为1)","Alpha ending":"Alpha 结束","Ending alpha (1 by default)":"正在结束Alpha (默认为1)","RGB split (chromatic aberration)":"RGB 拆分(色差)","Applies a RGB split effect also known as chromatic aberration.":"应用一个 RGB 拆分效果,也叫做色差。","Red X offset (between -20 and 20)":"红色X偏移量(-20至20之间)","Red Y offset (between -20 and 20)":"红色 Y 偏移(-20 and 20)","Green X offset (between -20 and 20)":"绿色 X 偏移量(-20 和 20)","Green Y offset (between -20 and 20)":"绿色 Y 偏移量(-20至20之间)","Blue X offset (between -20 and 20)":"蓝色 X 偏移量(-20至20之间)","Blue Y offset (between -20 and 20)":"蓝色 Y 偏移量(-20至20之间)","Sepia":"棕褐色","Alter the colors to sepia.":"改变颜色为棕褐色。","Shockwave":"冲击波","Deform the image the way a drop deforms a water surface.":"像水滴使水面变形一样使图像变形。","Elapsed time":"经过时间","Spreading speed (in pixels per second)":"扩展速度 (以像素每秒为单位)","Amplitude":"振幅","Wavelength":"波长","Maximum radius (0 for infinity)":"最大半径 (0表示无限)","Center on X axis":"以 X 轴为中心","Center on Y axis":"以 Y 轴为中心","Tilt shift":"倾斜偏移","Render a tilt-shift-like camera effect.":"渲染一个类似倾斜移位的相机效果。","Blur (between 0 and 200)":"模糊(介于 0 到 200之间)","Gradient blur (between 0 and 2000)":"渐变模糊(介于 0 至 2000之间)","Twist":"扭曲的","Applies a twist effect making objects appear twisted in the given direction.":"应用扭曲效果使对象在给定的方向上出现扭曲。","The radius of the twist":"旋转半径","Angle (between -10 and 10)":"角度(-10 和 10之间)","The angle in degree of the twist":"旋转时的角度","Offset X (between 0 and 1, 0.5 is image middle)":"偏移 X (介于 0 和 1 之间,0.5 为图像中间值)","Offset Y (between 0 and 1, 0.5 is image middle)":"偏移 Y (0-1, 0.5为图像中间值)","Zoom blur":"缩放模糊度","Applies a Zoom blur.":"应用缩放模糊性。","Inner radius":"内半径","strength (between 0 and 5)":"强度(介于 0 到 5)","Device vibration":"设备振动","Vibrate":"振动","Vibrate (Duration in ms).":"振动(毫秒时长)。","Start vibration for _PARAM0_ ms":"启动_PARAM0_ 毫秒的振动","Vibrate by pattern":"按模式振动","Vibrate (Duration in ms). You can add multiple comma-separated values where every second value determines the period of silence between two vibrations. This is a string value so use quotes.":"振动(以毫秒为单位的持续时间)。您可以添加多个逗号分隔的值,其中每个第二个值确定两次振动之间的静音时间。这是一个字符串值,因此请使用引号。","Intervals (for example \"500,100,200\"":"间隔(例如“500 100 200”)","Stop vibration":"停止振动","Stop the vibration":"停止振动","Save State (experimental)":"保存状态(实验性)","Allows to save and load the full state of a game, usually on the device storage. A Save State, by default, contains the full state of the game (objects, variables, sounds, music, effects etc.). Using the \"Save Configuration\" behavior, you can customize which objects should not be saved in a Save State. You can also use the \"Change the save configuration of a variable\" action to change the save configuration of a variable. Finally, both objects, variables and scene/game data can be given a profile name: in this case, when saving or loading with one or more profile names specified, only the object/variables/data belonging to one of the specified profiles will be saved or loaded.":"允许保存和加载游戏的完整状态,通常保存在设备存储中。保存状态默认包含游戏的完整状态(对象、变量、声音、音乐、效果等)。使用“保存配置”行为,您可以自定义哪些对象不应保存在保存状态中。您还可以使用“更改变量的保存配置”操作来更改变量的保存配置。最后,对象、变量和场景/游戏数据都可以被赋予一个配置文件名称:在这种情况下,当指定一个或多个配置文件名称进行保存或加载时,仅属于指定配置文件的对象/变量/数据将被保存或加载。","Save game to a variable":"将游戏保存到变量中","Create a Save State and save it to a variable. This is for advanced usage, prefer to use \"Save game to device storage\" in most cases.":"创建保存状态并将其保存到变量中。这是高级用法,在大多数情况下更建议使用“保存游戏到设备存储”。","Save game in variable _PARAM1_ (profile(s): _PARAM2_)":"在变量中保存游戏 _PARAM1_(配置文件:_PARAM2_)","Variable to store the save to":"用于存储保存的变量","Profile(s) to save":"要保存的配置文件","Comma-separated list of profile names that must be saved. Only objects tagged with at least one of these profiles will be saved. If no profile names are specified, all objects will be saved (unless they have a \"Save Configuration\" behavior set to \"Do not save\").":"必须保存的以逗号分隔的配置文件名称列表。 只有标记有这些配置文件之一的对象才会被保存。 如果未指定配置文件名称,则所有对象将被保存(除非它们的\"保存配置\"行为设置为\"不保存\")。","Save game to device storage":"将游戏保存到设备存储","Create a Save State and save it to device storage.":"创建一个保存状态并将其保存到设备存储中。","Save game to device storage named _PARAM1_ (profile(s): _PARAM2_)":"将游戏保存到设备存储,命名为_PARAM1_(配置文件:_PARAM2_)","Storage key to save to":"保存的存储键为","Load game from variable":"从变量加载游戏","Restore the game from a Save State stored in the specified variable. This is for advanced usage, prefer to use \"Load game from device storage\" in most cases.":"从指定变量中恢复保存的游戏状态。这是高级用法,通常应优先使用\"从设备存储加载游戏\"。","Load game from variable _PARAM1_ (profile(s): _PARAM2_, stop and restart all the scenes currently played: _PARAM3_)":"从变量_PARAM1_加载游戏(配置文件:_PARAM2_,停止并重新启动当前播放的所有场景:_PARAM3_)","Load":"加载","Variable to load the game from":"用于加载游戏的变量","Profile(s) to load":"要加载的配置文件","Comma-separated list of profile names that must be loaded. Only objects tagged with at least one of these profiles will be loaded - others will be left alone. If no profile names are specified, all objects will be loaded (unless they have a \"Save Configuration\" behavior set to \"Do not save\").":"必须加载的以逗号分隔的配置文件名称列表。 只有标记有这些配置文件之一的对象才会被加载 - 其他对象将保持不变。 如果未指定配置文件名称,则所有对象将被加载(除非它们的\"保存配置\"行为设置为\"不保存\")。","Stop and restart all the scenes currently played?":"停止并重新启动当前播放的所有场景吗?","Load game from device storage":"从设备存储加载游戏","Restore the game from a Save State stored on the device.":"从存储在设备上的保存状态恢复游戏。","Load game from device storage named _PARAM1_ (profile(s): _PARAM2_, stop and restart all the scenes currently played: _PARAM3_)":"从设备存储加载游戏,命名为_PARAM1_(配置文件:_PARAM2_,停止并重新启动当前播放的所有场景:_PARAM3_)","Storage name to load the game from":"要从中加载游戏的存储名称","Comma-separated list of profile names that must be loaded. Only objects tagged with at least one of these profiles will be loaded - others will be left alone. If no profile names are specified, all objects will be loaded.":"必须加载的以逗号分隔的配置文件名称列表。 只有标记有这些配置文件之一的对象才会被加载 - 其他对象将保持不变。 如果未指定配置文件名称,则所有对象将被加载。","Time since last save":"自上次保存以来的时间","Time since the last save, in seconds. Returns -1 if no save happened, and a positive number otherwise.":"自上次保存以来的时间(以秒为单位)。如果没有保存发生,则返回 -1,否则返回一个正数。","Time since the last save":"自上次保存以来的时间","Time since last load":"自上次加载以来的时间","Time since the last load, in seconds. Returns -1 if no load happened, and a positive number otherwise.":"自上次加载以来的时间(以秒为单位)。如果没有发生加载,则返回 -1,否则返回一个正数。","Time since the last load":"自上次加载以来的时间","Save just succeeded":"保存刚刚成功","The last save attempt just succeeded.":"上次保存尝试已成功。","Save just failed":"保存刚刚失败","The last save attempt just failed.":"上次保存尝试失败。","Load just succeeded":"加载刚刚成功","The last load attempt just succeeded.":"上次加载尝试已成功。","Load just failed":"加载刚刚失败","The last load attempt just failed.":"上次加载尝试失败。","Change the save configuration of a variable":"更改变量的保存配置","Set if a scene or global variable should be saved in the default save state. Also allow to specify one or more profiles in which the variable should be saved.":"设置场景或全局变量是否应保存在默认保存状态中。 还允许指定一个或多个配置文件,以便在其中保存该变量。","Change save configuration of _PARAM1_: save it in the default save states: _PARAM2_ and in profiles: _PARAM3_":"更改_PARAM1_的保存配置:将其保存在默认保存状态中:_PARAM2_ 和配置文件中:_PARAM3_","Advanced configuration":"高级配置","Variable for which configuration should be changed":"需要更改配置的变量","Persist in default save states":"在默认保存状态中保持","Profiles in which the variable should be saved":"应在其中保存变量的配置文件","Comma-separated list of profile names in which the variable will be saved. When a save state is created with one or more profile names specified, the variable will be saved only if it matches one of these profiles.":"以逗号分隔的配置文件名称列表,其中将保存变量。 当使用一个或多个指定的配置文件名称创建保存状态时,只有在与这些配置文件之一匹配时,变量才能被保存。","Change the save configuration of the global game data":"更改全局游戏数据的保存配置","Set if the global game data (audio & global variables) should be saved in the default save state. Also allow to specify one or more profiles in which the global game data should be saved.":"设置全局游戏数据(音频和全局变量)是否应保存在默认保存状态中。 还允许指定一个或多个配置文件,以便在其中保存全局游戏数据。","Change save configuration of global game data: save them in the default save states: _PARAM1_ and in profiles: _PARAM2_":"更改全局游戏数据的保存配置:将其保存在默认保存状态中:_PARAM1_ 和配置文件中:_PARAM2_","Profiles in which the global game data should be saved":"应在其中保存全局游戏数据的配置文件","Comma-separated list of profile names in which the global game data will be saved. When a save state is created with one or more profile names specified, the global game data will be saved only if it matches one of these profiles.":"以逗号分隔的配置文件名称列表,其中将保存全局游戏数据。 当使用一个或多个指定的配置文件名称创建保存状态时,只有在与这些配置文件之一匹配时,全局游戏数据才能被保存。","Change the save configuration of a scene data":"更改场景数据的保存配置","Set if the data of the specified scene (scene variables, timers, trigger once, wait actions, layers, etc.) should be saved in the default save state. Also allow to specify one or more profiles in which the scene data should be saved. Note: objects are always saved separately from the scene data (use the \"Save Configuration\" behavior to customize the configuration of objects).":"设置指定场景的数据(场景变量、计时器、一次性触发、等待动作、层等)是否应保存在默认保存状态中。 还允许指定一个或多个配置文件,以便在其中保存场景数据。 注意:对象始终与场景数据分开保存(使用\"保存配置\"行为来自定义对象的配置)。","Change save configuration of scene _PARAM1_: save it in the default save states: _PARAM2_ and in profiles: _PARAM3_":"更改场景_PARAM1_的保存配置:将其保存在默认保存状态中:_PARAM2_ 和配置文件中:_PARAM3_","Scene name for which configuration should be changed":"需要更改配置的场景名称","Profiles in which the scene data should be saved":"应在其中保存场景数据的配置文件","Comma-separated list of profile names in which the scene data will be saved. When a save state is created with one or more profile names specified, the scene data will be saved only if it matches one of these profiles.":"以逗号分隔的配置文件名称列表,其中将保存场景数据。 当使用一个或多个指定的配置文件名称创建保存状态时,只有在与这些配置文件之一匹配时,场景数据才能被保存。","Persistence mode":"持久性模式","Include in save states (default)":"包含在保存状态中(默认)","Do not save":"不保存","Save profile names":"保存配置文件名称","Comma-separated list of profile names in which the object is saved. When a save state is created with one or more profile names specified, the object will be saved only if it matches one of these profiles.":"以逗号分隔的配置文件名称列表,其中对象被保存。 当使用一个或多个指定的配置文件名称创建保存状态时,只有在与这些配置文件之一匹配时,对象才能被保存。","Save state configuration":"保存状态配置","Allow the customize how the object is persisted in a save state.":"允许自定义对象在保存状态中如何持久化。","Advanced window management":"高级窗口管理","Provides advanced features related to the game window positioning and interaction with the operating system.":"提供与游戏窗口定位和操作系统交互相关的高级功能。","Window focus":"窗口焦点","Make the window gain or lose focus.":"使窗口获得或失去焦点。","Focus the window: _PARAM0_":"焦点窗口:_PARAM0_","Windows, Linux, macOS":"Windows, Linux, macOS","Focus the window?":"聚焦窗口?","Window focused":"窗口聚焦","Checks if the window is focused.":"检查窗口是否对准。","The window is focused":"窗口被聚焦","Window visibility":"窗口可见性","Make the window visible or invisible.":"使窗口可见或不可见。","Window visible: _PARAM0_":"窗口可见:_PARAM0_","Show window?":"显示窗口?","Window visible":"窗口可见","Checks if the window is visible.":"检查窗口是否可见。","The window is visible":"窗口可见","Maximize the window":"最大化窗口","Maximize or unmaximize the window.":"最大化或取消窗口最大化。","Maximize window: _PARAM0_":"最大化窗口:_PARAM0_","Maximize window?":"最大化窗口?","Window maximized":"窗口最大化","Checks if the window is maximized.":"检查窗口是否最大化。","The window is maximized":"窗口最大化","Minimize the window":"最小化窗口","Minimize or unminimize the window.":"最小化或取消最小化窗口。","Minimize window: _PARAM0_":"最小化窗口:_PARAM0_","Minimize window?":"最小化窗口?","Window minimized":"窗口最小化","Checks if the window is minimized.":"检查是否最小化窗口。","The window is minimized":"窗口最小化","Enable the window":"启用窗口","Enables or disables the window.":"启用或禁用窗口。","Enable window: _PARAM0_":"启用窗口:_PARAM0_","Enable window?":"启用窗口?","Window enabled":"窗口已启用","Checks if the window is enabled.":"检查窗口是否启用。","The window is enabled":"窗口已启用","Allow resizing":"允许调整大小","Enables or disables resizing of the window by the user.":"启用或禁用用户调整窗口大小。","Enable window resizing: _PARAM0_":"启用窗口大小调整: _PARAM0_","Allow resizing?":"允许调整大小?","Window resizable":"可调整窗口大小","Checks if the window can be resized.":"检查窗口是否可以调整大小。","The window can be resized":"窗口大小可以调整","Allow moving":"允许移动","Enables or disables moving of the window by the user.":"启用或禁用用户移动窗口。","Enable window moving: _PARAM0_":"启用窗口移动:_PARAM0_","Allow moving?":"是否允许移动?","Window movable":"窗口可移动","Checks if the window can be moved.":"检查窗口是否可以移动。","The window can be moved":"窗口可以移动","Allow maximizing":"允许最大化","Enables or disables maximizing of the window by the user.":"启用或禁用用户最大化窗口。","Enable window maximizing: _PARAM0_":"启用窗口最大化: _PARAM0_","Allow maximizing?":"是否允许最大化?","Window maximizable":"窗口最大化","Checks if the window can be maximized.":"检查是否可以最大化窗口。","The window can be maximized":"窗口可以被最大化","Allow minimizing":"允许最小化","Enables or disables minimizing of the window by the user.":"启用或禁用用户最小化窗口。","Enable window minimizing: _PARAM0_":"启用窗口最小化:_PARAM0_","Allow minimizing?":"是否允许最小化?","Window minimizable":"窗口最小化","Checks if the window can be minimized.":"检查是否可以最小化窗口。","The window can be minimized":"窗口可以最小化","Allow full-screening":"允许全屏显示","Enables or disables full-screening of the window by the user.":"启用或禁用用户对窗口的全屏显示。","Enable window full-screening: _PARAM0_":"启用窗口全屏:_PARAM0_","Allow full-screening?":"允许全屏?","Window full-screenable":"窗口全屏启用","Checks if the window can be full-screened.":"检查窗口是否可以全屏。","The window can be set in fullscreen":"窗口可以全屏设置","Allow closing":"允许关闭","Enables or disables closing of the window by the user.":"启用或禁用用户关闭窗口。","Enable window closing: _PARAM0_":"启用窗口关闭: _PARAM0_","Allow closing?":"是否允许关闭?","Window closable":"窗口可关闭","Checks if the window can be closed.":"检查是否可以关闭窗口。","The window can be closed":"窗口可以关闭","Make the window always on top":"使窗口始终置于顶端","Puts the window constantly above all other windows.":"将窗口始终置于所有其他窗口之上。","Make window always on top: _PARAM0_, level: _PARAM1_":"使窗口始终位于顶部: _PARAM0_, 级别: _PARAM1_","Enable always on top?":"总是在顶部启用?","Level":"Level","Window always on top":"窗口总是在顶端","Checks if the window is always on top.":"检查窗口是否总是在顶部。","The window is always on top":"窗口总是在顶部","Enable kiosk mode":"启用 kiosk 模式","Puts the window in kiosk mode. This prevents the user from exiting fullscreen.":"将窗口置于kiosk模式。这将防止用户退出全屏。","Enable kiosk mode: _PARAM0_":"启用kiosk模式:_PARAM0_","Enable kiosk mode?":"启用kiosk模式?","Kiosk mode":"Kiosk 模式","Checks if the window is currently in kiosk mode.":"检查窗口是否目前处于kiosk模式。","The window is in kiosk mode":"窗口处于kiosk模式","Enable window shadow":"启用窗口阴影","Enables or disables the window shadow.":"启用或禁用窗口阴影。","Enable window shadow: _PARAM0_":"启用窗口阴影: _PARAM0_","Enable shadow?":"启用阴影?","Checks if the window currently has it's shadow enabled.":"检查窗口当前是否启用了阴影。","The window has a shadow":"窗口有阴影","Enable content protection":"启用内容保护","Enables or disables the content protection mode. This should prevent screenshots of the game from being taken.":"启用或禁用内容保护模式。这将防止游戏屏幕截图。","Enable content protection: _PARAM0_":"启用内容保护:_PARAM0_","Enable content protection?":"启用内容保护?","Allow focusing":"允许聚焦","Allow or disallow the user to focus the window.":"允许或不允许用户关注窗口。","Allow to focus the window: _PARAM0_":"允许焦点窗口:_PARAM0_","Allow focus?":"允许聚焦?","Flash the window":"闪烁窗口","Make the window flash or end flashing.":"使窗口闪烁或结束闪烁。","Make the window flash: _PARAM0_":"弹出窗口: _PARAM0_","Flash the window?":"闪烁窗口?","Window opacity":"窗口不透明度","Changes the window opacity.":"更改窗口不透明度。","Set the window opacity to _PARAM0_":"将窗口不透明度设置为 _PARAM0_","New opacity":"新的不透明度","Window position":"窗口位置","Changes the window position.":"更改窗口位置。","Set the window position to _PARAM0_;_PARAM1_":"将窗口位置设置为 _PARAM0_; _PARAM1_","Window X position":"窗口 X 位置","Returns the current window X position.":"返回当前窗口 X 位置。","Window Y position":"窗口 Y 位置","Returns the current window Y position.":"返回当前窗口 Y 位置。","Returns the current window opacity (a number from 0 to 1, 1 being fully opaque).":"返回当前窗口不透明度(一个数字从 0 到 1, 1 是完全不透明度)。","Firebase":"Firebase","Use Google Firebase services (database, functions, storage...) in your game.":"在您的游戏中使用 Google Firebase服务 (数据库、功能、存储...)。","Firebase configuration string":"Firebase配置字符串","Enable analytics":"启用分析","Enables Analytics for that project.":"启用该项目的分析。","Log an Event":"记录事件","Triggers an Event/Conversion for the current user on the Analytics.Can also pass additional data to the Analytics":"在分析上触发当前用户的事件/转化。还可以将其他数据传递到分析","Trigger Event _PARAM0_ with argument _PARAM1_":"触发事件_PARAM0_ 带参数 _PARAM1_","Event Name":"事件名称","Additional Data":"附加数据","User UID":"用户 UID","Changes the current user's analytics identifier. This is what let Analytics differentiate user, so it should always be unique for each user. For advanced usage only.":"更改当前用户的分析标识符。这就是让 Analytics 区分用户的原因,因此它对于每个用户都应该始终是唯一的。仅供高级使用。","Set current user's ID to _PARAM0_":"设置当前用户ID为 _PARAM0_","New Unique ID":"新建唯一ID","Set a user's property":"设置用户属性","Sets an user's properties.Can be used to classify user in Analytics.":"设置用户属性。用于在分析中对用户进行分类。","Set property _PARAM0_ of the current user to _PARAM1_":"将当前用户的属性_PARAM0_ 设置为 _PARAM1_","Property Name":"属性名称","Property Data":"属性数据","Get Remote setting as String":"获取远程设置为字符串","Get a setting from Firebase Remote Config as a string.":"从 Firebase远程配置获取一个字符串设置。","Remote Config":"远程配置","Setting Name":"设置名称","Get Remote setting as Number":"获取远程设置为数字","Get a setting from Firebase Remote Config as Number.":"从 Firebase远程配置获取一个设置作为数字。","Set Remote Config Auto Update Interval":"设置远程配置自动更新间隔","Sets Remote Config Auto Update Interval.":"设置远程配置自动更新间隔。","Set Remote Config Auto Update Interval to _PARAM0_":"设置远程配置自动更新间隔为 _PARAM0_","Update Interval in ms":"以毫秒为单位更新间隔","Set the default configuration":"设置默认配置","As the Remote Config is stored online, you need to set default values or the Remote Config expressions to return while there is no internet or the config is still loading.":"由于远程配置在线存储。 当没有互联网或配置仍在加载时,您需要设置默认值或远程配置表达式以返回。","Set default config to _PARAM0_":"设置默认配置为 _PARAM0_","Structure with defaults":"默认结构","Force sync the configuration":"强制同步配置","Use this to sync the Remote Config with the client at any time.":"使用此选项可以随时同步远程配置到客户端。","Synchronize Remote Config":"同步远程配置","Create account with email":"用电子邮件创建帐户","Create an account with email and password as credentials.":"创建一个包含电子邮件和密码的帐户作为凭据。","Create account with email _PARAM0_ and password _PARAM1_ (store result in _PARAM2_)":"使用电子邮件 _PARAM0_ 和密码 _PARAM1_ 创建帐户(将结果存储在 _PARAM2_ 中)","Authentication":"验证","Callback variable with state (ok or error)":"具有状态的回调变量(确定或错误)","Sign into an account with email":"用电子邮件登录帐户","Sign into an account with email and password as credentials. ":"用电子邮件和密码登录帐号作为凭据。 ","Connect to account with email _PARAM0_ and password _PARAM1_ (store result in _PARAM2_)":"使用电子邮件 _PARAM0_ 和密码 _PARAM1_ 连接到帐户(将结果存储在 _PARAM2_ 中)","Log out of the account":"注销帐户","Logs out of the current account. ":"注销当前帐户。 ","Log out from the account":"从帐户注销","Sign into an account via an external provider":"通过外部提供商登录帐户","Signs into an account using an external provider's system. The available providers are: \"google\", \"facebook\", \"github\" and \"twitter\".\nProvider authentication only works in the browser! Not on previews or pc/mobile exports.":"使用外部提供商的系统登录帐户。可用的提供商是:“google”、“facebook”、“github”和“twitter”。\n提供商身份验证仅适用于浏览器!不适用于预览或 pc/mobile 导出。","Connect to account via provider _PARAM0_ (store result in _PARAM1_)":"通过提供商 _PARAM0_ 连接到帐户(将结果存储在 _PARAM1_ 中)","Provider":"供应商","Sign In as an anonymous guest":"以匿名访客身份登录","Sign into a temporary anonymous account.":"登录一个临时匿名帐户。","Authenticate anonymously (store result in _PARAM0_)":"匿名身份验证 (将结果存储在 _PARAM0_ 中)","Is the user signed in?":"用户是否登录?","Checks if the user is signed in. \nYou should always use this before actions requiring authentications.":"检查用户是否已登录。 \n您应该始终使用此操作才需要身份验证。","Check for authentication":"检查身份认证","User authentication token":"用户身份验证令牌","Get the user authentication token. The token is the proof of authentication.":"获取用户身份验证令牌。令牌是身份验证的证明。","Is the user email address verified":"用户电子邮件地址已验证","Checks if the email address of the user got verified.":"检查用户的电子邮件地址是否已被验证。","The email of the user is verified":"用户的电子邮件已验证","Authentication ❯ User Management":"身份验证 ❯ 用户管理","User email address":"用户电子邮件地址","Return the user email address.":"返回用户的电子邮件地址。","Accounts creation time":"账户创建时间","Return the accounts creation time.":"返回帐户创建时间。","User last login time":"用户上次登录时间","Return the user last login time.":"返回用户上次登录时间。","User display name":"用户显示名称","Return the user display name.":"返回用户显示名称。","User phone number":"用户电话号码","Return the user phone number.":"返回用户电话号码。","Return the user Unique IDentifier. Use that to link data to an user instead of the name or email.":"返回用户唯一标识符。使用它将数据链接到用户而不是姓名或电子邮件。","User tenant ID":"用户租户ID","Return the user tenant ID. For advanced usage only.":"返回用户租户 ID。仅供高级使用。","User refresh token":"用户刷新令牌","Return the user refresh token. For advanced usage only.":"返回用户刷新令牌。仅供高级使用。","Profile picture URL":"个人资料图片 URL","Gets an URL to the user profile picture.":"获取用户个人资料图片的 URL。","Send a password reset email":"发送密码重置电子邮件","Send a password reset link per email.":"每封电子邮件发送一个密码重置链接。","Email of the user whose password must be reset":"必须重置密码的用户的电子邮件","Send a verification email":"发送验证电子邮件","Send a link per email to verify the user email.":"每封邮件发送链接以验证用户电子邮件。","Display name":"显示名称","Sets the user display name.":"设置用户显示名称。","Set the user's display name to _PARAM0_":"将用户的显示名称设置为 _PARAM0_","New display name":"新显示名称","Profile picture":"个人资料图片","Change the user profile picture URL to a new one.":"将用户个人资料图片 URL 更改为新的。","Change the user's profile picture URL to _PARAM0_":"将用户的个人资料图片 URL 更改为 _PARAM0_","New profile picture URL":"新建个人资料图片 URL","User email":"用户电子邮件","This action is dangerous so it requires reauthentication.\nChanges the user's email address.":"此操作是危险的,因此需要重新验证,\n更改用户的电子邮件地址。","Change the user's email to _PARAM0_ and store result in _PARAM4_ (send verification email: _PARAM3_)":"将用户的电子邮件更改为 _PARAM0_ 并在 _PARAM4_ 中存储结果 (发送验证电子邮件: _PARAM3_)","Authentication ❯ User Management ❯ Advanced":"身份验证 ❯ 用户管理 ❯ 高级","Old email":"旧电子邮件","New email":"新邮件","Send a verification email before doing the change?":"在进行更改之前发送验证邮件?","User email (Provider)":"用户电子邮件 (提供者)","This action is dangerous so it requires reauthentication.\nChanges the user's email address.\nThis is the same as Change the user email but reauthenticates via an external provider.":"此操作是危险的,因此需要重新验证,\n更改用户的电子邮件地址。\n这与更改用户电子邮件相同,但通过外部提供商重新认证。","Change the user's email to _PARAM0_ and store result in _PARAM2_ (send verification email: _PARAM1_)":"将用户的电子邮件更改为 _PARAM0_ 并在 _PARAM2_ 中存储结果 (发送验证电子邮件: _PARAM1_)","User password":"用户密码","This action is dangerous so it requires reauthentication.\nChanges the user password.":"此操作是危险的,因此需要重新验证,\n更改用户密码。","Change the user password to _PARAM2_ and store result in _PARAM4_ (send verification email: _PARAM3_)":"更改用户密码为 _PARAM2_ 并在 _PARAM4_ 中存储结果 (发送验证电子邮件: _PARAM3_)","Old password":"旧密码","New password":"新密码","User password (Provider)":"用户密码 (提供者)","This action is dangerous so it requires reauthentication.\nChanges the user password.\nThis is the same as \"Change the user password\" but reauthenticates via an external provider.":"此操作是危险的,因此需要重新验证,\n更改用户密码。\n这与“更改用户密码”相同,但通过外部提供商重新验证。","Change the user password to _PARAM0_ and store result in _PARAM2_ (send verification email: _PARAM1_)":"更改用户密码为 _PARAM0_ 并在 _PARAM2_ 中存储结果 (发送验证电子邮件: _PARAM1_)","New Password":"新密码","Delete the user account":"删除用户帐户","This action is dangerous so it requires reauthentication.\nDeletes the user account.":"此操作是危险的,因此需要重新验证,\n删除用户帐户。","Delete the user account and store result in _PARAM2_":"删除用户帐户并在 _PARAM2_ 中存储结果","Delete the user account (Provider)":"删除用户帐户(提供者)","This action is dangerous so it requires reauthentication.\nDeletes the user account.\nThis is the same as \"Delete the user account\" but reauthenticates via an external provider.":"此操作是危险的,因此需要重新验证,\n删除用户帐户。\n这与“删除用户帐户”相同,但通过外部提供商重新验证。","Delete the user account and store result in _PARAM0_":"删除用户帐户并在 _PARAM0_ 中存储结果","Enable performance measuring":"启用性能分析","Enables performance measuring.":"启用性能分析","Performance Measuring":"性能测量","Create a custom performance tracker":"创建自定义性能跟踪器","Creates a new custom performance tracker (If it doesn't already exists). They are used to measure performance of custom events.":"创建一个新的自定义性能跟踪器 (如果它不存在的话)。它们用于测量自定义事件的性能。","Create performance tracker: _PARAM0_":"创建性能跟踪: _PARAM0_","Tracker Name":"追踪器名称","Start a tracer":"启动追踪器","Start measuring performance for that tracer":"开始测量该追踪器的性能。","Start performance measuring on tracer _PARAM0_":"在跟踪器_PARAM0_上开始性能测量","Stop a tracer":"停止追踪器","Stop measuring performance for that tracer":"停止测量该追踪器的性能。","Stop performance measuring on tracer _PARAM0_":"停止在追踪器 _PARAM0_ 上的性能计量","Record performance":"记录性能","Record performance for a delimited period of time. Use this if you want to measure the performance for a specified duration.":"记录一段时间内的性能。如果您想要在指定的时间内测量性能,请使用它。","Record performance for _PARAM1_ms with a delay of _PARAM2_ms (store in tracker _PARAM0_)":"将_PARAM1_ms的性能记录到延迟_PARAM2_ms (存储在Tracker _PARAM0_)","Delay before measuring start (in ms)":"测量开始前的延迟(毫秒)","Measuring duration (in ms)":"测量持续时间(毫秒)","Call a HTTP function":"调用 HTTP 函数","Calls a HTTP function by name, and store the result in a variable.":"通过名称调用 HTTP 函数,并将结果存储在一个变量中。","Call HTTP Function _PARAM0_ with parameter(s) _PARAM1_ (Callback variables: Value: _PARAM2_ State: _PARAM3_)":"调用 HTTP 函数 _PARAM0_ 具有参数(s) _PARAM1_ (Callback 变量: 值: _PARAM2_ 状态: _PARAM3_)","HTTP Function Name":"HTTP 函数名称","Parameter(s) as JSON or string.":"参数作为JSON或字符串。","Callback variable with returned value":"返回值的回调变量","Get server timestamp":"获取服务器时间戳","Set a field to the timestamp on the server when the request arrives there":"当请求到达服务器时,将字段设置为服务器上的时间戳","Cloud Firestore Database":"Cloud Firestore 数据库","Start a query":"开始查询","Start a query on a collection. A query allows to get a filtered and ordered list of documents in a collection.":"在收藏上开始查询。查询允许在收藏中获得过滤和排序的文档列表。","Create a query named _PARAM0_ for collection _PARAM1_":"为收藏 _PARAM1_ 创建一个名为 _PARAM0_ 的查询","Cloud Firestore Database/Queries/Create":"Cloud Firestore 数据库/查询/创建","Query name":"查询名称","Collection":"集合","Start a query from another query":"从另一个查询开始查询","Start a query with the same collection and filters as another one.":"开始一个与另一个收藏和过滤器相同的查询。","Create a query named _PARAM0_ from query _PARAM1_":"从查询 _PARAM1_ 创建名为 _PARAM0_ 的查询","Source query name":"源查询名称","Filter by field value":"按字段值筛选","Only match the documents that have a field passing a check.":"只匹配有字段通过检查的文档。","Filter query _PARAM0_ to only keep documents whose field _PARAM1__PARAM2__PARAM3_":"过滤查询 _PARAM0_ 以仅保留字段为 _PARAM1_ _PARAM2_ _PARAM3_ 的文档","Cloud Firestore Database/Queries/Filters":"Cloud Firestore 数据库/查询/过滤器","Field to check":"要检查的字段","Check type":"检查类型","Value to check":"要检查的值","Filter by field text":"按字段文本过滤","Filter query _PARAM0_ to remove documents whose field _PARAM1_ is not _PARAM2__PARAM3_":"过滤查询 _PARAM0_ 来删除其字段 _PARAM1_ 不是 _PARAM2__PARAM3_ 的文档","Text to check":"要检查的文本","Order by field value":"按字段值排序","Orders all documents in the query by a the value of a field.":"按字段的值排序查询中的所有文档。","Order query _PARAM0_ by field _PARAM1_ (direction: _PARAM2_)":"按字段 _PARAM1_ 排序查询_PARAM0_ (方向: _PARAM2_)","Field to order by":"按字段排序","Direction (ascending or descending)":"方向(升序或降序)","Limit amount of documents":"限制文件数量","Limits the amount of documents returned by the query. Can only be used after an order filter.":"限制查询返回的文档数量,只能在订单过滤后使用。","Limit query _PARAM0_ to _PARAM1_ documents (begin from the end: _PARAM2_)":"将查询 _PARAM0_ 限制为 _PARAM1_ 文档 (从末尾开始:_PARAM2_)","Amount to limit by":"限制金额","Begin from the end":"从末尾开始","Skip some documents":"跳过一些文档","Removes documents before or after a certain value on the field ordered by in a query. Can only be used after an order filter.":"删除查询中按顺序排序的字段的某个值之前或之后的文档。只能在订单过滤之后使用。","Skip documents with fields (before: _PARAM2_) value _PARAM1_ in query _PARAM0_ (include documents at that value: _PARAM3_)":"跳过带字段的文档 (之前: _PARAM2_) 在查询 _PARAM0_ 中_PARAM1_ (包含该值的文档: _PARAM3_)","The value of the field ordered by to skip after":"要在后面跳过的字段的值","Skip documents before?":"先跳过文档吗?","Include documents which field value equals the value to skip after?":"包括哪些字段值等于要跳过的值之后的文档?","Run a query once":"运行一次查询","Runs the query once and store results in a scene variable.":"运行一次查询并将结果存储在场景变量中。","Run query _PARAM0_ and store results into _PARAM1_ (store result state in _PARAM2_)":"运行查询 _PARAM0_ 并将结果存储到 _PARAM1_ (将结果状态存储在 _PARAM2_)","Cloud Firestore Database/Queries/Run":"Cloud Firestore 数据库/查询/运行","Callback variable where to load the results":"加载结果的回调变量","Callback variable with state (ok or error message)":"具有状态的回调变量(确定或错误消息)","Continuously run (watch) a query":"连续运行 (观察) 查询","Runs a query continuously, so that every time a new documents starts or stops matching the query, or a document that matches the query has been changed, the variables will be filled with the new results.":"连续运行查询,以便每次新文档开始或停止匹配查询,或者匹配查询的文档已更改时,变量将填充新结果。","Run query _PARAM0_ continuously and store results into _PARAM1_ each time documents matching the query are changed (store result state in _PARAM2_)":"连续运行查询 _PARAM0_ 并将结果存储到 _PARAM1_ 每次匹配查询的文档发生更改时(将结果状态存储在 _PARAM2_ 中)","Enable persistence":"启用持久化","When persistence is enabled, all data that is fetched from the database is being automatically stored to allow to continue accessing the data if cut off from the network, instead of waiting for reconnection.\nThis needs to be called before any other firestore operation, otherwise it will fail.":"启用持久性时, 所有从数据库获取的数据都被自动储存,在断开网络后仍能够继续访问,而无需等待重新连接。\n这需要在任何其他 Firestore 操作之前调用,否则将失败。","Disable persistence":"禁用持久化","Disables the storing of fetched data and clear all the data that has been stored.\nThis needs to be called before any other firestore operation, otherwise it will fail.":"禁用数据获取自动存储并清除已存储的所有数据。\n必须在任何其他 Firestore 操作前调用,否则将失败。","Re-enable network":"重新启用网络","Re-enables the connection to the database after disabling it.":"禁用数据库后重新启用连接到数据库。","Disable network":"禁用网络","Disables the connection to the database.\nWhile the network is disabled, any read operations will return results from cache, and any write operations will be queued until the network is restored.":"禁用连接到数据库。\n当网络被禁用时,任何读取操作都会从缓存返回结果,任何写入操作都将排队直到网络恢复为止。","Write a document to firestore":"写文件到firestore","Writes a document (variable) to cloud firestore.":"将文档(变量)写入Cloud Firestore。","Write _PARAM2_ to firestore in document _PARAM1_ of collection _PARAM0_ (store result state in _PARAM3_)":"将_PARAM2_写入集合_PARAM0_的文档_PARAM1_的Firestore中(将结果状态存储在_PARAM3_中)","Cloud Firestore Database/Documents":"Cloud Firestore 数据库/文档","Document":"文件","Variable to write":"写入变量","Add a document to firestore":"将文档添加到FireStore","Adds a document (variable) to cloud firestore with a unique name.":"将文档(变量) 添加到云fireestore,具有唯一的名称。","Add _PARAM1_ to firestore collection _PARAM0_ (store result state in _PARAM2_)":"将_param1_添加到Firestore Collection _param0_(在_param2_中存储结果状态)","Write a field in firestore":"在Firestore中写一个字段","Writes a field of a firestore document.":"写入 firesting 文档的字段。","Write _PARAM3_ to firestore in field _PARAM2_ of document _PARAM1_ in collection _PARAM0_ (store result state in _PARAM4_, merge instead of overwriting: _PARAM5_)":"将 _PARAM3_ 写入集合 _PARAM0_ 中文档 _PARAM1_ 的字段 _PARAM2_ 中的 firestore (将结果状态存储在 _PARAM4_ 中,合并而不是覆盖: _PARAM5_)","Cloud Firestore Database/Fields":"Cloud Firestore 数据库/字段","Field to write":"要写入的字段","Value to write":"要写入的值","If the document already exists, merge them instead of replacing the old one?":"如果文档已经存在,是否合并它们而不是替换旧文档?","Update a document in firestore":"在Firestore中更新文件","Updates a firestore document (variable).":"更新Firestore文档(变量)。","Update firestore document _PARAM1_ in collection _PARAM0_ with _PARAM2_ (store result state in _PARAM3_)":"通过 _PARAM2_ 在集合 _PARAM0_ 更新纤维恢复文档 _PARAM1_ (在 _PARAM3_中存储结果状态)","Variable to update with":"要更新的变量","Update a field of a document":"更新文档字段","Updates a field of a firestore document.":"更新Firestore文档的字段。","Update field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ with _PARAM3_ (store result state in _PARAM4_)":"在集合 _PARAM0_ 和 _PARAM3_ 中更新纤维还原文档 _PARAM1_ 的 _PARAM2_ (存储结果状态在 _PARAM4_)","Field to update":"要更新的字段","Delete a document in firestore":"在Firestore中删除文档","Deletes a firestore document (variable).":"删除Firestore文档(变量)。","Delete firestore document _PARAM1_ in collection _PARAM0_ (store result state in _PARAM2_)":"删除集合 _PARAM0_ 中的 firecovery 文档 _PARAM1_ (存储结果状态在 _PARAM2_)","Delete a field of a document":"删除文档字段","Deletes a field of a firestore document.":"删除Firestore文档的字段。","Delete field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ with (store result state in _PARAM3_)":"在集合 _PARAM0_ 中删除 firecovery 文档 _PARAM1_ 的 _PARAM2_ 字段与(存储结果状态在 _PARAM3_)","Field to delete":"要删除的字段","Get a document from firestore":"从Firestore取得文件","Gets a firestore document and store it in a variable.":"获取Firestore文档并将其存储在变量中。","Load firestore document _PARAM1_ from collection _PARAM0_ into _PARAM2_ (store result state in _PARAM3_)":"将集合_PARAM0_中的Firestore文档_PARAM1_加载到_PARAM2_中(将结果状态存储在_PARAM3_中)","Callback variable where to load the document":"要加载文档的回调变量","Get a field of a document":"获取文档字段","Return the value of a field in a firestore document.":"返回 firestore 文档中字段的值。","Load field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ into _PARAM3_ (store result state in _PARAM4_)":"在集合 _PARAM0_ 中加载 _PARAM2_ 的 firecovery 文档 _PARAM1_ 到 _PARAM3_ (存储结果状态在 _PARAM4_)","Field to get":"要获取的字段","Callback variable where to store the field's value":"回调变量存储字段的值","Check for a document's existence":"检查文档是否存在","Checks for the existence of a document. Sets the result variable to true if it exists else to false.":"检查文档是否存在。如果结果变量存在,则将其设置为 true,否则设置为 false。","Check for existence of _PARAM1_ in collection _PARAM0_ and store result in _PARAM2_ (store result state in _PARAM3_)":"检查在集合 _PARAM0_ 中是否存在_PARAM1_ 并将结果存储在 _PARAM2_ (存储结果状态在 _PARAM3_)","Callback variable where to store the result":"存储结果的回调变量","Check for existence of a document's field":"检查文档字段是否存在","Checks for the existence of a field in a document. Sets the result variable to 1 if it exists else to 2.":"检查文档中字段的存在。如果结果变量存在则设置为 1,则设置为 2。","Check for existence of _PARAM2_ in document _PARAM1_ of collection _PARAM0_ and store result in _PARAM3_ (store result state in _PARAM4_)":"检查是否存在集合_PARAM0_ 的文档 _PARAM1_ 中的_PARAM2_ 并将结果存储在 _PARAM3_ (存储结果状态在 _PARAM4_)","Callback Variable where to store the result":"回调变量存储结果","List all documents of a collection":"列出集合的所有文档","Generates a list of all document names in a collection, and stores it as a structure.":"在集合中生成所有文档名称列表,并将其存储为结构。","List all documents in _PARAM0_ and store result in _PARAM1_ (store result state in _PARAM2_)":"在 _PARAM0_ 中列出所有文档并存储结果在 _PARAM1_ (存储结果状态在 _PARAM2_)","Upload a file":"上传文件","Upload a file to firebase Storage.":"将文件上传到Firebase存储。","Save _PARAM0_ in location _PARAM1_ to Firebase storage and store access URL in _PARAM3_ (Format: _PARAM2_, Store result state in _PARAM4_)":"将_PARAM1_中的_PARAM0_保存到Firebase存储中,并将访问URL存储在_PARAM3_中(格式:_PARAM2_,将结果状态存储在_PARAM4_中)","Storage":"存储","Upload ID":"上传 ID","File content":"文件内容","Storage path":"存放路径","File content format":"文件内容格式","Callback variable with the url to the uploaded file":"使用网址回调变量到上传文件","Get Download URL":"获取下载网址","Get a unique download URL for a file.":"获取文件的唯一下载 URL。","Get a download url for _PARAM0_ and store it in _PARAM1_ (store result state in _PARAM2_)":"获取 _PARAM0_ 的下载URL,并将其存储在 _PARAM1_ (存储结果状态在 _PARAM2_)","Storage path to the file":"文件的存储路径","Write a variable to Database":"将变量写入数据库","Writes a variable to Database.":"将一个变量写入数据库。","Write _PARAM1_ to Database in _PARAM0_ (store result state in _PARAM2_)":"将 _PARAM1_ 写入数据库 _PARAM0_ (存储结果状态在 _PARAM2_)","Realtime Database":"实时数据库","Write a field in Database":"将字段写入数据库","Writes a field of a Database document.":"写入数据库文档字段。","Write _PARAM2_ in field _PARAM1_ of _PARAM0_ (store result state in _PARAM3_)":"在 _PARAM0_ 的 _PARAM1_ 中写入 _PARAM2_ (存储结果状态在 _PARAM3_)","Update a document in Database":"在数据库中更新文档","Updates a variable on the database.":"更新数据库中的变量。","Update variable _PARAM0_ with _PARAM1_ (store result state in _PARAM2_)":"使用 _PARAM1_ 更新变量 _PARAM0_ (将结果状态存储在_PARAM2_中)","Updates a field of a Database document.":"更新数据库文档的字段。","Update field _PARAM1_ of _PARAM0_ with _PARAM2_ (store result state in _PARAM3_)":"通过 _PARAM2_ 更新_PARAM0_ 的 _PARAM1_ (存储结果状态在 _PARAM3_)","Delete a database variable":"删除数据库变量","Deletes a variable from the database.":"从数据库中删除一个变量。","Delete variable _PARAM0_ from database (store result state in _PARAM1_)":"从数据库中删除变量 _PARAM0_ (存储结果状态在 _PARAM1_)","Delete a field of a variable":"删除变量的字段","Deletes a field of a variable on the database.":"删除数据库中变量的字段。","Delete field _PARAM1_ of variable _PARAM0_ on the database (store result state in _PARAM2_)":"删除数据库中变量 _PARAM0_ 的 _PARAM1_ 字段 (存储结果状态在 _PARAM2_)","Get a variable from the database":"从数据库获取一个变量","Gets a variable from the database and store it in a Scene variable.":"从数据库获取变量并将其存储在场景变量。","Load database variable _PARAM0_ into _PARAM1_ (store result state in _PARAM2_)":"加载数据库变量 _PARAM0_ 到 _PARAM1_ (存储结果状态在 _PARAM2_)","Callback variable where to store the data":"存储数据的回调变量","Get a field of a variable":"获取变量字段","Return the value of a field in a variable from the database and store it in a scene variable.":"从数据库中返回一个变量中的字段的值,并将其存储在场景变量中。","Load field _PARAM1_ of database variable _PARAM0_ into _PARAM2_ (store result state in _PARAM3_)":"将数据库变量 _PARAM0_ 的 _PARAM1_ 加载到 _PARAM2_ (存储结果状态在 _PARAM3_)","Check for a variable's existence":"检查变量是否存在","Checks for the existence of a variable. Sets the result variable to 1 if it exists else to 2.":"检查变量是否存在。如果存在结果变量,则将结果变量设置为 1。","Check for existence of _PARAM0_ and store result in _PARAM1_ (store result state in _PARAM2_)":"检查是否存在_PARAM0_并在 _PARAM1_ 中存储结果(存储结果状态在 _PARAM2_)","Check for existence of a variable's field":"检查变量字段是否存在","Checks for the existence of a field in a variable. Sets the result variable to 1 if it exists else to 2.":"检查一个字段在变量中是否存在,将结果变量设为1,如果它存在,则设为2。","Check for existence of _PARAM1_ in database variable _PARAM0_ and store result in _PARAM2_ (store result state in _PARAM3_)":"检查数据库变量 _PARAM0_ 是否存在_PARAM1_ 并将结果存储在 _PARAM2_ (存储结果状态在 _PARAM3_)","3D":"3D","Support for 3D in GDevelop: this provides 3D objects and the common features for all 3D objects.":"GDevelop 中的 3D 支持:这提供了 3D 对象以及适用于所有3D对象的通用功能。","Common features for all 3D objects: position in 3D space (including the Z axis, in addition to X and Y), size (including depth, in addition to width and height), rotation (on X and Y axis, in addition to the Z axis), scale (including Z axis, in addition to X and Y), flipping (on Z axis, in addition to horizontal (Y)/vertical (X) flipping).":"所有 3D 对象的常见特征:在 3D 空间中的位置 (包括 Z 轴,除了 X 轴和 Y 轴),大小 (包括深度,除了宽度和高度),旋转 (在 X 轴和 Y 轴上,除了 Z 轴),缩放 (包括 Z 轴,除了 X 轴和 Y 轴),翻转 (在 Z 轴上,除了水平 (Y) / 垂直 (X) 翻转)。","Z (elevation)":"Z (高度)","the Z position (the \"elevation\")":"Z 位置 (“高度”)","the Z position":"Z 位置","Center Z position":"中心 Z 位置","the Z position of the center of rotation":"旋转中心的 Z 位置","the Z position of the center":"中心的 Z 位置","Position ❯ Center":"位置 ❯ 中心","Depth (size on Z axis)":"深度 (Z轴上的大小)","the depth (size on Z axis)":"深度 (Z轴上的大小)","the depth":"深度","Scale on Z axis":"在 Z 轴上缩放","the scale on Z axis of an object (default scale is 1)":"对象 Z 轴上的缩放比例 (默认比例为 1)","the scale on Z axis scale":"Z 轴缩放比例","Flip the object on Z":"在 Z 上翻转对象","Flip the object on Z axis":"在 Z 轴上翻转对象","Flip on Z axis _PARAM0_: _PARAM2_":"在 Z 轴上翻转 _PARAM0_: _PARAM2_","Flipped on Z":"在 Z 上翻转","Check if the object is flipped on Z axis":"检查对象是否在 Z 轴上翻转","_PARAM0_ is flipped on Z axis":"_PARAM0_ 在 Z 轴上翻转","Rotation on X axis":"X 轴旋转","the rotation on X axis":"X 轴上的旋转","Rotation on Y axis":"Y 轴旋转","the rotation on Y axis":"Y 轴上的旋转","Turn around X axis":"绕 X 轴旋转","Turn the object around X axis. This axis doesn't move with the object rotation.":"围绕 X 轴转动物体。该轴不随对象旋转而移动。","Turn _PARAM0_ from _PARAM2_° around X axis":"围绕 X 轴从 _PARAM2_° 转动 _PARAM0_","Angle to add (in degrees)":"添加的角度(度)","Turn around Y axis":"绕 Y 轴旋转","Turn the object around Y axis. This axis doesn't move with the object rotation.":"围绕 Y 轴转动物体。该轴不随对象旋转而移动。","Turn _PARAM0_ from _PARAM2_° around Y axis":"围绕 Y 轴从 _PARAM2_° 转动 _PARAM0_","Turn around Z axis":"绕 Z 轴旋转","Turn the object around Z axis. This axis doesn't move with the object rotation.":"围绕 Z 轴转动物体。该轴不随对象旋转而移动。","Turn _PARAM0_ from _PARAM2_° around Z axis":"围绕 Z 轴从 _PARAM2_° 转动 _PARAM0_","Forward vector X component":"前向量 X 组件","Return the object forward vector X component.":"返回对象前向量 X 组件。","Object basis":"对象基","Forward vector Y component":"前向量 Y 组件","Return the object forward vector Y component.":"返回对象的前向向量 Y 分量。","Forward vector Z component":"前向向量 Z 分量","Return the object forward vector Z component.":"返回对象的前向向量 Z 分量。","Up vector X component":"向上向量 X 分量","Return the object up vector X component.":"返回对象的向上向量 X 分量。","Up vector Y component":"向上向量 Y 分量","Return the object up vector Y component.":"返回对象的向上向量 Y 分量。","Up vector Z component":"向上向量 Z 分量","Return the object up vector Z component.":"返回对象的向上向量 Z 分量。","Right vector X component":"向右向量 X 分量","Return the object right vector X component.":"返回对象的向右向量 X 分量。","Right vector Y component":"向右向量 Y 分量","Return the object right vector Y component.":"返回对象的向右向量 Y 分量。","Right vector Z component":"向右向量 Z 分量","Return the object right vector Z component.":"返回对象的向右向量 Z 分量。","3D Model":"3D 模型","An animated 3D model, useful for most elements of a 3D game.":"一个动画3D模型,可用于3D游戏的大多数元素。","Compare the width of an object.":"比较对象的宽度。","Compare the height of an object.":"比较对象的高度。","the depth's scale of an object":"对象的深度比例","the depth's scale":"深度的比例","Flip on Z axis _PARAM0_: _PARAM1_":"在 Z 轴上翻转 _PARAM0_:_PARAM1_","Turn _PARAM0_ from _PARAM1_° around X axis":"将 _PARAM0_ 从 _PARAM1_° 绕 X 轴转动","Turn _PARAM0_ from _PARAM1_° around Y axis":"将 _PARAM0_ 从 _PARAM1_° 绕 Y 轴转动","Turn _PARAM0_ from _PARAM1_° around Z axis":"将 _PARAM0_ 从 _PARAM1_° 绕 Z 轴转动","Animation (by number)":"动画 (按编号)","the number of the animation played by the object (the number from the animations list)":"对象播放的动画编号 (动画列表中的编号)","the number of the animation":"动画的编号","Animation (by name)":"动画 (按名称)","the animation played by the object":"对象播放的动画","the animation":"动画","Animation name":"动画已暂停","Pause the animation":"暂停动画","Pause the animation of the object":"暂停对象的动画","Pause the animation of _PARAM0_":"暂停 _PARAM0_ 的动画","Resume the animation":"恢复动画","Resume the animation of the object":"恢复对象的动画","Resume the animation of _PARAM0_":"恢复 _PARAM0_ 的动画","the animation speed scale (1 = the default speed, >1 = faster and <1 = slower)":"动画速度比例 (1 = 默认速度, >1 = 更快, <1 = 更慢)","Speed scale":"速度缩放","Animation paused":"动画已暂停","Check if the animation of an object is paused.":"检查对象是否已暂停动画。","The animation of _PARAM0_ is paused":"_PARAM0_ 的动画是暂停的","Animation finished":"动画播放完毕","Check if the animation being played by the Sprite object is finished.":"检查精灵对象播放的动画是否完成。","The animation of _PARAM0_ is finished":"_PARAM0_ 的动画播放完毕","Set crossfade duration":"设置淡入淡出持续时间","Set the crossfade duration when switching to a new animation.":"设置切换到新动画时的淡入淡出持续时间。","Set crossfade duration of _PARAM0_ to _PARAM1_ seconds":"将 _PARAM0_ 的淡入淡出持续时间设置为 _PARAM1_ 秒","Crossfade duration (in seconds)":"交叉淡入淡出持续时间 (以秒为单位)","Enable texture transparency":"启用纹理透明度","Enabling texture transparency has an impact on rendering performance.":"启用纹理透明度会对渲染性能产生影响。","Texture settings":"纹理设置","Faces orientation":"面部朝向","The top of each image can touch the **top face** (Y) or the **front face** (Z).":"每个图像的顶部可以接触到 **顶面** (Y) 或 **正面** (Z)。","Face orientation":"面部方向","Textures":"纹理","Back face orientation":"背面方向","The top of the image can touch the **top face** (Y) or the **bottom face** (X).":"图像的顶部可以接触到 **顶面** (Y) 或 **底面** (X)。","Tile":"瓦片","Tile scale":"平铺比例","The scale applied to tiled textures. A value of 1 displays them at the same size as in 2D.":"应用于平铺纹理的比例。值为 1 时以与 2D 中相同的大小显示。","Face visibility":"面部可见度","Material type":"材料类型","3D Box":"3D 盒子","A box with images for each face":"每个面都有图像的盒子","3D cube":"3D 立方体","a face should be visible":"一个面应该是可见","having its _PARAM1_ face visible":"其 _PARAM1_ 面可见","Face":"面","Visible?":"可见的?","Rotation angle":"旋转角度","Face image":"面部图像","Change the image of the face.":"更改面部的图像。","Change the image of _PARAM1_ face of _PARAM0_ to _PARAM2_":"将 _PARAM0_ 的 _PARAM1_ 面部图像更改为 _PARAM2_","Change the tint of the cube.":"更改立方体的色调。","Change the tint of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的色调更改为 _PARAM1_","3D Cube":"3D 立方体","Camera Z position":"相机 Z 位置","the camera position on Z axis":"Z 轴上的相机位置","the camera position on Z axis (layer: _PARAM3_)":"Z 轴上的相机位置 (层: _PARAM3_)","Camera number (default : 0)":"镜头编号 (默认 ︰ 0)","Camera X rotation":"相机 X 旋转","the camera rotation on X axis":"相机在 X 轴上的旋转","the camera rotation on X axis (layer: _PARAM3_)":"相机在 X 轴上的旋转 (层: _PARAM3_)","Camera Y rotation":"相机 Y 旋转","the camera rotation on Y axis":"相机在 Y 轴上的旋转","the camera rotation on Y axis (layer: _PARAM3_)":"相机在 Y 轴上的旋转 (层: _PARAM3_)","Camera forward vector X component":"相机前向向量 X 分量","Return the camera forward vector X component.":"返回相机前向向量 X 分量。","Camera basis":"相机基准","Camera forward vector Y component":"相机前向向量 Y 分量","Return the camera forward vector Y component.":"返回相机前向向量 Y 分量。","Camera forward vector Z component":"相机前向向量 Z 分量","Return the camera forward vector Z component.":"返回相机前向向量 Z 分量。","Camera up vector X component":"相机向上向量 X 分量","Return the camera up vector X component.":"返回相机向上向量 X 分量。","Camera up vector Y component":"相机向上向量 Y 分量","Return the camera up vector Y component.":"返回相机向上向量 Y 分量。","Camera up vector Z component":"相机向上向量 Z 分量","Return the camera up vector Z component.":"返回相机向上向量 Z 分量。","Camera right vector X component":"相机向右向量 X 分量","Return the camera right vector X component.":"返回相机向右向量 X 分量。","Camera right vector Y component":"相机向右向量 Y 分量","Return the camera right vector Y component.":"返回相机向右向量 Y 分量。","Camera right vector Z component":"相机向右向量 Z 分量","Return the camera right vector Z component.":"返回相机向右向量 Z 分量。","Look at an object":"看向一个物体","Change the camera rotation to look at an object. The camera top always face the screen.":"更改相机旋转以查看对象。相机顶部始终面向屏幕。","Change the camera rotation of _PARAM2_ to look at _PARAM1_":"更改 _PARAM2_ 的相机旋转以查看 _PARAM1_","Layers and cameras":"图层和镜头","Stand on Y instead of Z":"在 Y 上而不是 Z 上","Look at a position":"看向一个位置","Change the camera rotation to look at a position. The camera top always face the screen.":"更改相机旋转以查看位置。相机顶部始终面向屏幕。","Change the camera rotation of _PARAM4_ to look at _PARAM1_; _PARAM2_; _PARAM3_":"更改 _PARAM4_ 的相机旋转来查看 _PARAM1_; _PARAM2_; _PARAM3_","Camera near plane":"近平面的相机","the camera near plane distance":"相机近平面距离","Distance (> 0)":"距离 (> 0)","Camera far plane":"相机远平面","the camera far plane distance":"相机远平面距离","Camera field of view (fov)":"相机视野 (fov)","the camera field of view":"相机视野","Field of view in degrees (between 0° and 180°)":"视野角度 (0 ° 至180 °之间)","Fog (linear)":"雾 (线性)","Linear fog for 3D objects.":"3D 对象的线性雾。","Fog color":"雾的颜色","Distance where the fog starts":"雾开始的距离","Distance where the fog is fully opaque":"雾完全不透明的距离","Fog (exponential)":"雾 (指数)","Exponential fog for 3D objects.":"3D 对象的指数雾。","Density of the fog. Usual values are between 0.0005 (far away) and 0.005 (very thick fog).":"雾的密度。通常的值在0.0005(远处)和0.005(非常浓的雾)之间。","Ambient light":"环境光","A light that illuminates all objects from every direction. Often used along with a Directional light (though a Hemisphere light can be used instead of an Ambient light).":"从每个方向照亮所有物体的光源。通常与方向光一起使用(虽然半球光可以替代环境光)。","Intensity":"强度","Directional light":"平行光","A very far light source like the sun. This is the light to use for casting shadows for 3D objects (other lights won't emit shadows). Often used along with a Hemisphere light.":"像太阳一样非常远的光源。这是用于为3D物体投射阴影的光源(其他光源不会产生阴影)。通常与半球光一起使用。","3D world top":"3D 世界顶部","Elevation":"Z (高度)","Maximal elevation is reached at 90°.":"最大仰角达到 90°。","Shadows":"阴影","Shadow quality":"阴影质量","Shadow bias":"阴影偏差","Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 1.25 for medium quality and 2 for low quality.":"使用此选项以避免因深度缓冲器精度导致的\"阴影痤疮\"。选择一个足够小的值,例如 0.001,以避免阴影与物体之间产生距离,但又不能太小,以避免在低/中等质量上产生阴影故障。此值用于高质量,并在中等质量上乘以 1.25,在低质量上乘以 2。","Shadow frustum size":"阴影视锥体大小","Distance from layer's camera":"距离层的相机","Hemisphere light":"半球光","A light that illuminates objects from every direction with a gradient. Often used along with a Directional light.":"从每个方向照亮物体并带有渐变的光源。通常与方向光一起使用。","Sky color":"天空颜色","Ground color":"地面颜色","Skybox":"天空盒","Display a background on a cube surrounding the scene.":"在包围场景的立方体上显示背景。","Right face (X+)":"右面 (X+)","Left face (X-)":"左面 (X-)","Bottom face (Y+)":"底面 (Y+)","Top face (Y-)":"顶面 (Y-)","Front face (Z+)":"正面图像","Back face (Z-)":"背面图像","Hue and saturation":"色调和饱和度","Adjust hue and saturation.":"调整色调和饱和度。","Hue":"色调","Between -180° and 180°":"角度(-180至180之间)","Saturation":"饱和度","Between -1 and 1":"(在 0 和 1 之间)","Exposure":"曝光","Adjust exposure.":"调整曝光。","Positive value":"正值","Bloom":"光晕","Apply a bloom effect.":"应用光晕效果。","Strength":"强度","Between 0 and 3":"(在 0 和 3 之间)","Between 0 and 1":"(在 0 和 1 之间)","Threshold":"阈值","Brightness and contrast.":"亮度和对比度。","Adjust brightness and contrast.":"调整亮度和对比度。","Contrast":"对比度","A text must start with a double quote (\").":"文本必须以双引号 (\")开头。","A text must end with a double quote (\"). Add a double quote to terminate the text.":"文本必须以双引号(\")结尾。添加双引号以终止文本。","A number was expected. You must enter a number here.":"需要一个数字。您必须在此输入一个数字。","You need to specify the name of the child variable to access. For example: `MyVariable.child`.":"您需要指定要访问的子变量的名称。例如:`MyVariable.child`。","You need to specify the name of the child variable to access. For example: `MyVariable[0]`.":"您需要指定要访问的子变量的名称。例如:“MyVariable[0]”。","An object variable or expression should be entered.":"应输入对象变量或表达式。","This variable does not exist on this object or group.":"此变量在此对象或组中不存在。","This variable only exists on some objects of the group. It must be declared for all objects.":"此变量只存在于组的某些对象上。必须为所有对象声明它。","This group is empty. Add an object to this group first.":"此组为空。请先向此组添加一个对象。","No child variable with this name found.":"未找到具有此名称的子变量。","Accessing a child variable of a property is not possible - just write the property name.":"无法访问属性的子变量 - 只需写入属性名称。","Behaviors can't be used as a value in expressions.":"Behaviors can't be used as a value in expressions.","Accessing a child variable of a parameter is not possible - just write the parameter name.":"无法访问参数的子变量 - 只需写入参数名称。","This parameter is not a string, number or boolean - it can't be used in an expression.":"此参数不是字符串、数字或布尔值 - 它不能在表达式中使用。","This object doesn't exist.":"此对象不存在。","This behavior is not attached to this object.":"此行为未附加到此对象。","Enter the name of the function to call.":"输入要调用的函数的名称。","Cannot find an expression with this name: ":"找不到具有此名称的表达式: ","Double check that you've not made any typo in the name.":"请仔细检查您未在名称中输入任何类型。","This expression is deprecated.":"该表达式已被弃用。","You tried to use an expression that returns a number, but a string is expected. Use `ToString` if you need to convert a number to a string.":"你试图使用一个返回数字的表达式,但是需要一个字符串。 如果您需要将数字转换为字符串,请使用“ToString”。","You tried to use an expression that returns a number, but another type is expected:":"你试图使用一个返回数字的表达式,但需要另一种类型:","You tried to use an expression that returns a string, but a number is expected. Use `ToNumber` if you need to convert a string to a number.":"你试图使用一个返回字符串的表达式,但需要一个数字。 如果您需要将字符串转换为数字,请使用“ToNumber”。","You tried to use an expression that returns a string, but another type is expected:":"你试图使用一个返回字符串的表达式,但需要另一种类型:","You tried to use an expression with the wrong return type:":"您尝试使用错误返回类型的表达式:","The number of parameters must be exactly ":"参数数量必须是准确的 ","The number of parameters must be: ":"参数数量必须是: ","You have not entered enough parameters for the expression.":"您没有为表达式输入足够的参数。","This parameter was not expected by this expression. Remove it or verify that you've entered the proper expression name.":"此表达式不需要此参数。删除它或确认您输入了正确表达式名称。","A variable name was expected but something else was written. Enter just the name of the variable for this parameter.":"需要一个变量名,但需要写入其他内容。请输入此参数的变量名。","An object name was expected but something else was written. Enter just the name of the object for this parameter.":"对象名称是预期的但其他东西是写入的。只需输入此参数的对象名称。","This function is improperly set up. Reach out to the extension developer or a GDevelop maintainer to fix this issue":"此功能设置不当。联系扩展开发者或GDevelop 维护者解决此问题","Called ComputeChangesetForVariablesContainer on variables containers that are different - they can't be compared.":"在不同的变量容器上调用 ComputeChangesetForVariablesContainer - 它们无法进行比较。","Unable to copy \"":"无法复制\"","\" to \"":"\" 到 \"","\".":"\".","Return .":"返回 。","Compare .":"比较 。","Check if .":"检查是否 。","Set (or unset) if .":"设置 (或取消设置) 如果是 。","Change .":"更改 。","Actions/conditions to change the current scene (or pause it and launch another one, or go back to the previous one), check if a scene or the game has just started/resumed, preload assets of a scene, get the current scene name or loading progress, quit the game, set background color, or disable input when focus is lost.":"用于更改当前场景(或暂停并启动另一个场景,或返回之前的场景)、检查场景或游戏是否刚刚开始/恢复、预加载场景的资产、获取当前场景名称或加载进度、退出游戏、设置背景颜色或在失去焦点时禁用输入的操作/条件。","Current scene name":"当前场景名称","Name of the current scene":"当前场景名称","At the beginning of the scene":"场景开始时","Is true only when scene just begins.":"只有当场景开始时为true","Scene just resumed":"场景刚刚恢复","The scene has just resumed after being paused.":"场景在暂停后刚刚恢复。","Does scene exist":"场景是否存在","Check if a scene exists.":"检查场景是否存在。","Scene _PARAM1_ exists":"场景 _PARAM1_ 存在","Name of the scene to check":"要检查的场景名称","Change the scene":"更改场景","Stop this scene and start the specified one instead.":"停止这个场景然后开始用指定的代替。","Change to scene _PARAM1_":"更改场景为 _PARAM1_","Name of the new scene":"新场景名称","Stop any other paused scenes?":"停止其他已暂停的场景?","Pause and start a new scene":"暂停并开始新场景","Pause this scene and start the specified one.\nLater, you can use the \"Stop and go back to previous scene\" action to go back to this scene.":"暂停此场景并启动指定的场景。\n稍后,您可以使用“停止并返回上一场景”动作返回到此场景。","Pause the scene and start _PARAM1_":"暂停场景然后开始场景 _PARAM1_","Stop and go back to previous scene":"停止并返回到之前的场景","Stop this scene and go back to the previous paused one.\nTo pause a scene, use the \"Pause and start a new scene\" action.":"停止此场景并返回到上一个已暂停的场景。\n要暂停场景,请使用“暂停并开始新场景”操作。","Stop the scene and go back to the previous paused one":"停止场景然后返回到之前暂停的一个场景","Quit the game":"退出游戏","Change the background color of the scene.":"更改场景的背景颜色","Set background color to _PARAM1_":"设置背景颜色为 _PARAM1_","Disable input when focus is lost":"当失去焦点时禁用输入","mouse buttons must be taken into account even\nif the window is not active.":"即使该窗口未处于活动状态,也必须考虑使用鼠标按钮。","Disable input when focus is lost: _PARAM1_":"当失去焦点时禁用输入: _PARAM1_","Deactivate input when focus is lost":"失去焦点時停用输入","Game has just resumed":"游戏刚刚重新开始","Check if the game has just resumed from being hidden. It happens when the game tab is selected, a minimized window is restored or the application is put back on front.":"检查游戏是否刚刚从隐藏状态恢复。当游戏选项卡被选中,最小化窗口被恢复,或者应用程序被放回到前面时,就会发生这种情况。","Preload scene":"预加载场景","Preload a scene resources as soon as possible in background.":"在后台尽快预加载一个场景资源。","Preload scene _PARAM1_ in background":"在后台预加载场景 _PARAM1_","Scene loading progress":"场景加载进度","The progress of resources loading in background for a scene (between 0 and 1).":"在后台为场景加载资源的进度 (介于0和1之间)。","_PARAM1_ loading progress":"_PARAM1_ 加载进度","Scene preloaded":"场景已预加载","Check if scene resources have finished to load in background.":"检查场景资源是否已完成后台加载。","Scene _PARAM1_ was preloaded in background":"场景 _PARAM1_ 已在后台预加载","Preload object":"预加载对象","Preload an object resources in background.":"在后台预加载对象资源。","Preload object _PARAM1_ in background (scene: _PARAM2_)":"在后台预加载对象 _PARAM1_(场景: _PARAM2_)","Object scene":"对象场景","Unload object":"卸载对象","Unload an object resources. The \"resource preloading\" property must be set to \"preload with an action\" for this action to actually unload resources.":"卸载对象资源。\"资源预加载\"属性必须设置为\"以操作进行预加载\",才能实际卸载资源。","Unload object _PARAM1_ (scene: _PARAM2_)":"卸载对象 _PARAM1_(场景: _PARAM2_)","Object preloaded":"对象已预加载","Check if object resources have finished to load in background.":"检查对象资源是否已完成后台加载。","Object _PARAM1_ was preloaded in background (scene: _PARAM2_)":"对象 _PARAM1_ 已在后台预加载 (场景: _PARAM2_)","Actions to send web requests, communicate with external \"APIs\" and other network related tasks. Also contains an action to open a URL on the device browser.":"发送网页请求、与外部“API”通信和其他网络相关任务的操作。还包含在设备浏览器中打开URL的操作。","Send a request to a web page":"将一个请求发送到网页","Send an asynchronous request to the specified web page.\n\nPlease note that for the web games, the game must be hosted on the same host as specified below, except if the server is configured to answer to all requests (cross-domain requests).":"发送异步请求到指定的网页。\n\n请注意,对于网页游戏,游戏必须在下面指定的同一个主机上托管。 除非服务器配置为响应所有请求(跨域请求)。","Send a _PARAM2_ request to _PARAM0_ with body: _PARAM1_, and store the result in _PARAM4_ (or in _PARAM5_ in case of error)":"发送一个 _PARAM2_ 请求给_PARAM0_ 与正文: _PARAM1_, 并将结果保存在_PARAM4_ (如果发生错误则在 _PARAM5_ 中)","URL (API or web-page address)":"URL (API或网页地址)","Example: \"https://example.com/user/123\". Using *https* is highly recommended.":"示例:“https://example.com/user/123”。强烈建议使用 *https://cample.com/user/123。","Request body content":"请求正文内容","Request method":"请求方法","If empty, \"GET\" will be used.":"如果为空,将使用“GET”。","Content type":"内容类型","If empty, \"application/x-www-form-urlencoded\" will be used.":"如果为空,将使用“application/x-www-form-urlenccoed”。","Variable where to store the response":"存储响应的变量","The response of the server will be stored, as a string, in this variable. If the server returns *JSON*, you may want to use the action \"Convert JSON to a scene variable\" afterwards, to explore the results with a *structure variable*.":"服务器的响应将作为字符串存储在此变量中。 如果服务器返回 *JSON*,你可能想要在其后使用动作\"转换JSON到场景变量\"。 使用 *结构变量*来探索结果。","Variable where to store the error message":"存储错误消息的变量","Optional, only used if an error occurs. This will contain the [\"status code\"](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) if the server returns a status >= 400. If the request was not sent at all (e.g. no internet or CORS issues), the variable will be set to \"REQUEST_NOT_SENT\".":"可选,仅在发生错误时使用。如果服务器返回状态 >= 400,它将包含 [\"Status code\"](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。 如果请求根本没有发送(例如没有互联网或CORS 问题),变量将设置为“REQUEST_NOT_SENT”。","Open a URL (web page) or a file":"打开一个 URL (网页) 或一个文件","This action launches the specified file or URL, in a browser (or in a new tab if the game is using the Web platform and is launched inside a browser).":"此操作会在浏览器中启动指定的文件或URL(如果游戏正在使用Web平台并在浏览器中启动,则在新选项卡中)。","Open URL _PARAM0_ in a browser (or new tab)":"在浏览器中打开 URL _PARAM0_ (或新标签)","URL (or filename)":"URL ( 或文件名 )","Download a file":"下载文件","Download a file from a web site":"从 web 站点下载文件","Download file _PARAM1_ from _PARAM0_ under the name of _PARAM2_":"从_PARAM0_下载文件_PARAM1_,名称为_PARAM2_","Host (for example : http://www.website.com)":"主机(例如:http://www.website.com)","Path to file (for example : /folder/file.txt)":"文件路径(例如: /folder/file.txt)","Save as":"另存为","Enable (or disable) metrics collection":"启用(或禁用) 计量集合","Enable, or disable, the sending of anonymous data used to compute the number of sessions and other metrics from your game players.\nBe sure to only send metrics if in accordance with the terms of service of your game and if they player gave their consent, depending on how your game/company handles this.":"启用或禁用发送匿名数据,用于计算您的游戏玩家的会话次数和其他计数。\n如果按照你的游戏服务条款并且玩家表示同意,请确保只发送计数。 取决于您的游戏/公司如何处理这个问题。","Enable analytics metrics: _PARAM1_":"启用分析指标: _PARAM1_","Enable the metrics?":"启用计量?","Camera center X position":"镜头中心的X坐标","the X position of the center of a camera":"相机中心的 X 位置","the X position of camera _PARAM4_ (layer: _PARAM3_)":"相机_PARAM4_的 X 位置(图层:_PARAM3_)","Camera center Y position":"镜头中心的Y坐标","the Y position of the center of a camera":"相机中心的 Y 位置","the Y position of camera _PARAM4_ (layer: _PARAM3_)":"相机_PARAM4_的 Y 位置(图层:_PARAM3_)","Width of a camera":"镜头的宽度","the width of a camera of a layer":"图层相机的宽度","the width of camera _PARAM2_ of layer _PARAM1_":"图层 _PARAM1_ 的 _PARAM2_ 的相机 _PARAM2_ 宽度","Camera number":"镜头编号","Height of a camera":"镜头高度","the height of a camera of a layer":"图层相机的高度","the height of camera _PARAM2_ of layer _PARAM1_":"图层 _PARAM1_ 的 _PARAM2_ 的相机高度","Camera left border position":"相机左边框位置","the position of the left border of a camera":"相机左边框的位置","the position of the left border of camera _PARAM2_ of layer _PARAM1_":"相机的左边框的位置 _PARAM2_ 的层 _PARAM1_","Camera right border position":"相机右边边框位置","the position of the right border of a camera":"相机右边框的位置","the position of the right border of camera _PARAM2_ of layer _PARAM1_":"相机的右边框的位置 _PARAM2_ 的层 _PARAM1_","Camera top border position":"相机顶部边框位置","the position of the top border of a camera":"相机顶部边框的位置","the position of the top border of camera _PARAM2_ of layer _PARAM1_":"相机的顶部边框的位置 _PARAM2_ 的层 _PARAM1_","Camera bottom border position":"相机底部边框位置","the position of the bottom border of a camera":"相机底部边框的位置","the position of the bottom border of camera _PARAM2_ of layer _PARAM1_":"相机的底部边框的位置 _PARAM2_ 的层 _PARAM1_","Angle of a camera of a layer":"图层镜头的角度","the angle of rotation of a camera (in degrees)":"相机的旋转角度 (以度为单位)","the angle of camera (layer: _PARAM3_, camera: _PARAM4_)":"相机角度 (层: _PARAM3_, 相机: _PARAM4_)","Add a camera to a layer":"添加镜头到图层","This action adds a camera to a layer":"此操作将一个摄像机添加到一个层中。","Add a camera to layer _PARAM1_":"将相机添加到图层 _PARAM1_","Render zone: Top left side: X Position (between 0 and 1)":"渲染区域:左上方:X位置(介于0和1之间)","Render zone: Top left side: Y Position (between 0 and 1)":"渲染区域:左上方:Y位置(介于0和1之间)","Render zone: Bottom right side: X Position (between 0 and 1)":"渲染区域:左上方:X位置(介于0和1之间)","Render zone: Bottom right side: Y Position (between 0 and 1)":"渲染区域:左上方:Y位置(介于0和1之间)","Delete a camera of a layer":"删除图层的一个镜头","Remove the specified camera from a layer":"移除图层的指定镜头","Delete camera _PARAM2_ from layer _PARAM1_":"从图层 _PARAM1_ 删除相机 _PARAM2_","Modify the size of a camera":"改变镜头的尺寸","This action modifies the size of a camera of the specified layer. The zoom will be reset.":"该相机的动作修改指定大小的层。该变焦镜头将被重置。","Change the size of camera _PARAM2_ of _PARAM1_ to _PARAM3_*_PARAM4_":"更改 _PARAM1_ 的 _PARAM2_ 的相机大小为 _PARAM3_*_PARAM4_","Modify the render zone of a camera":"变更镜头的渲染区域","This action modifies the render zone of a camera of the specified layer.":"此操作将修改指定图层中相机的角度。","Set the render zone of camera _PARAM2_ from layer _PARAM1_ to _PARAM3_;_PARAM4_ _PARAM5_;_PARAM6_":"从图层 _PARAM1_ 的相机渲染区域设置为 _PARAM3_;_PARAM4_ _PARAM5_;_PARAM6_","Camera zoom":"相机缩放","Change camera zoom.":"更改相机缩放。","Change camera zoom to _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"将相机缩放更改为 _PARAM1_ (图层: _PARAM2_, 相机: _PARAM3_)","Value (1:Initial zoom, 2:Zoom x2, 0.5:Unzoom x2...)":"值(1:初始缩放,2:放大一倍,0.5:缩小一半)","Compare the zoom of a camera of a layer.":"比较图层相机的缩放。","Zoom of camera _PARAM2_ of layer _PARAM1_":"图层 _PARAM1_ 的相机 _PARAM2_ 的缩放","Zoom":"缩放","Center the camera on an object within limits":"在限定的范围内居中镜头在对象上","Center the camera on the specified object, without leaving the specified limits.":"居中镜头在对象上,不离开指定范围","Center the camera on _PARAM1_ (limit : from _PARAM2_;_PARAM3_ to _PARAM4_;_PARAM5_) (layer: _PARAM7_, camera: _PARAM8_)":"将相机居中 _PARAM1_ (限制:从_PARAM2_;_PARAM3_ 到_PARAM4_;_PARAM5_) (图层: _PARAM7_, 相机: _PARAM8_)","Top left side of the boundary: X Position":"边界左上角:X位置","Top left side of the boundary: Y Position":"边界左上角:Y位置","Bottom right side of the boundary: X Position":"边界左底部角:X位置","Bottom right side of the boundary: Y Position":"边界右边底部角:X位置","Anticipate the movement of the object (yes by default)":"预测对象的移动(默认是)","Enforce camera boundaries":"强制使用相机边界","Enforce camera boundaries by moving the camera back inside specified boundaries.":"通过将相机移动到指定的边界内来强制使用相机边界。","Enforce camera boundaries (left: _PARAM1_, top: _PARAM2_ right: _PARAM3_, bottom: _PARAM4_, layer: _PARAM5_)":"强制使用相机边界(左: _PARAM1_, 顶: _PARAM2_ 右: _PARAM3_, 底: _PARAM4_, 图层: _PARAM5_)","Left bound X Position":"左边界 X 位置","Top bound Y Position":"顶部边界 Y 位置","Right bound X Position":"右边界 X 位置","Bottom bound Y Position":"底部边界 Y 位置","Center the camera on an object":"将相机置于对象的中心","Center the camera on the specified object.":"在指定的对象上居中镜头","Center camera on _PARAM1_ (layer: _PARAM3_)":"在 _PARAM1_ 居中摄像机 (层: _PARAM3_)","Show a layer":"显示图层","Show a layer.":"显示图层。","Show layer _PARAM1_":"显示图层 _PARAM1_","Hide a layer":"隐藏图层","Hide a layer.":"隐藏图层。","Hide layer _PARAM1_":"隐藏图层 _PARAM1_","Visibility of a layer":"图层的可见性","Test if a layer is set as visible.":"测试是否将图层设置为可见。","Layer _PARAM1_ is visible":"图层 _PARAM1_ 是可视的","Effect property (number)":"效果属性 (数字)","Change the value of a property of an effect.":"更改效果的属性值。","You can find the property names (and change the effect names) in the effects window.":"您可以在效果窗口中找到属性名称 (并更改效果名称)。","Set _PARAM3_ to _PARAM4_ for effect _PARAM2_ of layer _PARAM1_":"对图层 _PARAM1_ 的效果 _PARAM2_,设置 _PARAM3_ 为 _PARAM4_","Effect property (string)":"效果属性 (字符串)","Change the value (string) of a property of an effect.":"更改效果属性的值 (字符串)。","Effect property (enable or disable)":"效果属性 (启用或禁用)","Enable or disable a property of an effect.":"启用或禁用效果的属性。","Enable _PARAM3_ for effect _PARAM2_ of layer _PARAM1_: _PARAM4_":"启用 _PARAM3_ 以显示图层 _PARAM1_ 的 _PARAM2_ 效果: _PARAM4_","Enable this property":"启用此属性","Layer effect is enabled":"图层效果已启用","The effect on a layer is enabled":"对图层的效果已启用","Effect _PARAM2_ on layer _PARAM1_ is enabled":"启用图层 _PARAM1_ 上的效果 _PARAM2_","Enable layer effect":"启用图层效果","Enable an effect on a layer":"对图层启用特效","Enable effect _PARAM2_ on layer _PARAM1_: _PARAM3_":"在图层 _PARAM1_: _PARAM3_ 上启用_PARAM2_","Layer time scale":"更改时间比例","Compare the time scale applied to the objects of the layer.":"比较应用于图层对象的时间比例。","the time scale of layer _PARAM1_":"图层 _PARAM1_ 的时间尺度","Change the time scale applied to the objects of the layer.":"比较应用于图层对象的时间比例。","Set the time scale of layer _PARAM1_ to _PARAM2_":"设置图层 _PARAM1_ 的时间比例为 _PARAM2_","Scale (1: Default, 2: 2x faster, 0.5: 2x slower...)":"比例 (1: 默认值, 2: 2x 更快, 0.5: 2x 慢...)","Layer default Z order":"图层默认 Z 顺序","Compare the default Z order set to objects when they are created on a layer.":"在图层上创建对象时,比较默认的 Z 顺序。","the default Z order of objects created on _PARAM1_":"在 _PARAM1_ 上创建对象的默认Z顺序","Change the default Z order set to objects when they are created on a layer.":"当对象在图层上创建时,更改默认的 Z 顺序。","Set the default Z order of objects created on _PARAM1_ to _PARAM2_":"设置在 _PARAM1_ 上创建的对象的 Z 默认顺序为 _PARAM2_","New default Z order":"新建默认 Z 顺序","Set the ambient light color of the lighting layer in format \"R;G;B\" string.":"以\"R;G;B\"字符串的格式设置照明图层的环境亮度颜色。","Set the ambient color of the lighting layer _PARAM1_ to _PARAM2_":"设置照明图层 _PARAM1_ 的环境颜色到 _PARAM2_","X position of the top left side point of a render zone":"渲染区域左上侧点的 X 位置","Y position of the top left side point of a render zone":"渲染区域左上侧点的 Y 位置","X position of the bottom right side point of a render zone":"渲染区域左上侧点的 X 位置","Y position of the bottom right side point of a render zone":"渲染区域左上侧点的 Y 位置","Zoom of a camera of a layer":"放大图层的摄像头","Returns the time scale of the specified layer.":"返回指定层的时间比例。","Default Z Order for a layer":"图层默认的 Z 顺序","Scalable objects":"可扩展对象","Actions/conditions/expression to change or check the scale of an object (default: 1).":"用于改变或检查对象的缩放的操作/条件/表达式(默认:1)。","the scale of the object (default scale is 1)":"对象的比例 (默认比例为1)","the scale on X axis of the object (default scale is 1)":"对象 X 轴上的比例 (默认比例为1)","the scale on X axis":"X 轴上的比例","the scale on Y axis of the object (default scale is 1)":"对象 Y 轴上的比例 (默认比例为1)","the scale on Y axis":"Y 轴上的比例","Objects with opacity":"带透明度的对象","Action/condition/expression to change or check the opacity of an object (0-255).":"更改或检查对象的不透明度的操作/条件/表达式(0-255)。","Resizable objects":"可调整大小的对象","Change or compare the size (width/height) of an object which can be resized (i.e: most objects).":"更改或比较可以调整大小的对象的尺寸(宽度/高度)(即:大多数对象)。","Change the width of the object.":"更改对象的宽度。","Compare the width of the object.":"比较对象的宽度。","Change the height of the object.":"更改对象的高度。","Compare the height of the object.":"比较对象的高度","Change the size of an object.":"更改对象的大小。","Change the size of _PARAM0_: set to _PARAM2_ x _PARAM3_":"更改 _PARAM0_ 的大小: 设置为 _PARAM2_ x _PARAM3_","Objects with effects":"带特效的对象","Actions/conditions to enable/disable and change parameters of visual effects applied on objects.":"启用/禁用和更改应用于对象的视觉效果参数的操作/条件。","Enable an object effect":"启用对象特效","Enable an effect on the object":"启用对对象的效果","Enable effect _PARAM2_ on _PARAM0_: _PARAM3_":"在 _PARAM0_ 上启用效果_PARAM2_: _PARAM3_","Set _PARAM3_ to _PARAM4_ for effect _PARAM2_ of _PARAM0_":"将 _PARAM0_ 的效果 _PARAM2_ 设置为 _PARAM3_ 至 _PARAM4_","Enable _PARAM3_ for effect _PARAM2_ of _PARAM0_: _PARAM4_":"为 _PARAM0_ 的效果 _PARAM2_ 启用 _PARAM3_: _PARAM4_","Effect is enabled":"效果已启用","Check if the effect on an object is enabled.":"检查是否启用对对象的效果。","Effect _PARAM2_ of _PARAM0_ is enabled":"已启用 _PARAM0_ 的效果 _PARAM2_","Objects containing a text":"包含文本的对象","Allows an object to contain a text, usually shown on screen, that can be modified.":"允许一个对象包含一段文本,通常显示在屏幕上,并且可以进行修改。","Flippable objects":"可翻转对象","Actions/conditions for objects which can be flipped horizontally or vertically.":"可以水平或垂直翻转对象的操作/条件。","Flip horizontally _PARAM0_: _PARAM2_":"水平翻转_PARAM0_: _PARAM2_","Flip vertically _PARAM0_: _PARAM2_":"垂直翻转_PARAM0_: _PARAM2_","Objects with animations":"带动画的对象","Actions and conditions for objects having animations (sprite, 3D models...).":"包含动画(精灵、3D模型等)的对象的操作和条件。","Actions and conditions for objects having animations (sprite, 3D models...)..":"包含动画(精灵、3D模型等)的对象的操作和条件。","the animation played by the object using the animation number (from the animations list)":"对象使用动画编号播放的动画 (来自动画列表)","Animation index":"动画索引","the animation played by the object using the name of the animation":"对象使用动画名称播放的动画","Pause the animation of the object.":"暂停对象的动画。","Resume the animation of the object.":"恢复对象的动画。","Animation elapsed time":"动画经过时间","the elapsed time from the beginning of the animation (in seconds)":"从动画开始已过时间(秒)","the animation elapsed time":"当前动画已过时间","Elapsed time (in seconds)":"已用时间(秒)","Animation duration":"动画持续时间","Return the current animation duration (in seconds).":"返回当前动画持续时间(秒)。","Sounds and music":"声音和音乐","GDevelop provides several conditions and actions to play audio files. They can be either long music or short sound effects.":"GDevelop提供了几个播放音频文件的条件和操作。它们可以是长音乐或短音效。","Sounds on channels":"通道上的声音","Play a sound on a channel":"在通道里播放声音","Play a sound (small audio file) on a specific channel,\nso you'll be able to manipulate it.":"播放声音(小的音频文件)在一个特定的通道,\n所以你可以操纵它。","Play the sound _PARAM1_ on the channel _PARAM2_, vol.: _PARAM4_, loop: _PARAM3_":"在通道 _PARAM2_ 上播放声音 _PARAM1_,音量:_PARAM4_,循环:_PARAM3_","Audio file (or audio resource name)":"音频文件(或音频资源名)","Channel identifier":"通道id","Repeat the sound":"重复声音","From 0 to 100, 100 by default.":"从0到100,默认100。","Pitch (speed)":"音调(速度)","1 by default.":"默认值为 1。","Stop the sound of a channel":"停止某通道的声音","Stop the sound on the specified channel.":"停止指定通道里的声音","Stop the sound of channel _PARAM1_":"停止通道 _PARAM1_ 的声音","Pause the sound of a channel":"暂停某通道的声音","Pause the sound played on the specified channel.":"暂停指定通道的声音","Pause the sound of channel _PARAM1_":"暂停通道 _PARAM1_ 的声音","Resume playing a sound on a channel":"继续在通道上播放声音","Resume playing a sound on a channel that was paused.":"在已暂停的通道上恢复播放声音。","Resume the sound of channel _PARAM1_":"恢复 _PARAM1_ 通道的声音","Play a music file on a channel":"在频道上播放音乐文件","Play a music file on a specific channel,\nso you'll be able to interact with it later.":"在特定频道上播放音乐文件,\n您可以稍后与之互动。","Play the music _PARAM1_ on channel _PARAM2_, vol.: _PARAM4_, loop: _PARAM3_":"在通道 _PARAM2_ 上播放音乐 _PARAM1_,音量:_PARAM4_,循环:_PARAM3_","Music on channels":"通道上的音乐","Stop the music on a channel":"停止某通道的音乐","Stop the music on the specified channel":"停止指定通道里的音乐","Stop the music of channel _PARAM1_":"停止通道 _PARAM1_ 的音乐","Pause the music of a channel":"暂停某通道的音乐","Pause the music on the specified channel.":"暂停指定通道里的音乐","Pause the music of channel _PARAM1_":"暂停通道 _PARAM1_ 的音乐","Resume playing a music on a channel":"继续在通道播放音乐","Resume playing a music on a channel that was paused.":"恢复在暂停的通道上播放音乐。","Resume the music of channel _PARAM1_":"恢复通道 _PARAM1_ 的音乐","Volume of the sound on a channel":"某通道上声音的音量","This action modifies the volume of the sound on the specified channel.":"此操作更改指定通道上声音的音量。","the volume of the sound on channel _PARAM1_":"声道_PARAM1_ 上声音的音量","Volume of the music on a channel":"通道里音乐的音量","This action modifies the volume of the music on the specified channel.":"此操作更改指定通道上音乐的音量。","the volume of the music on channel _PARAM1_":"频道_PARAM1_ 上音乐的音量","Game global volume":"游戏全局音量","This action modifies the global volume of the game.":"这个动作修改游戏的全局音量。","the global sound level":"全局声音级别","Pitch of the sound of a channel":"通道里声音的音调","This action modifies the pitch (speed) of the sound on a channel.":"这个动作修改了声音在通道上的音高(速度)。","the pitch of the sound on channel _PARAM1_":"声道_PARAM1_ 上声音的音调","Pitch (1 by default)":"音量(默认为1)","Pitch of the music on a channel":"通道里音乐的音调","This action modifies the pitch of the music on the specified channel.":"此操作更改指定通道上音乐的音量。","the pitch of the music on channel _PARAM1_":"声道_PARAM1_ 上音乐的音调","Playing offset of the sound on a channel":"通道上声音的播放位置","This action modifies the playing offset of the sound on a channel":"此操作修改通道上声音的播放偏移量","the playing offset of the sound on channel _PARAM1_":"声道_PARAM1_ 播放声音的偏移量","Playing offset of the music on a channel":"通道上音乐的播放位置","This action modifies the playing offset of the music on the specified channel":"此操作修改指定频道上音乐的播放偏移量。","the playing offset of the music on channel _PARAM1_":"_PARAM1_ 通道上音乐的播放偏移量","Play a sound":"播放声音","Play a sound.":"播放声音","Play the sound _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_":"播放声音 _PARAM1_, vol.: _PARAM3_, 循环: _PARAM2_","Play a music file":"播放音乐文件","Play a music file.":"播放音乐文件。","Play the music _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_":"播放音乐 _PARAM1_,音量:_PARAM3_,循环:_PARAM2_","Preload a music file":"预加载音乐文件","Preload a music file in memory.":"将音乐文件预加载到内存中","Preload the music file _PARAM1_":"预加载音乐文件 _PARAM1_","Preload a sound file":"预加载声音文件","Preload a sound file in memory.":"将声音文件预加载到内存中","Preload the sound file _PARAM1_":"预加载声音文件 _PARAM1_","Sound file (or sound resource name)":"声音文件 (或声音资源名称)","Unload a music file":"卸载音乐文件","Unload a music file from memory. Unloading a music file will cause any music playing it to stop.":"从内存中卸载音乐文件。卸载音乐文件将导致停止播放任何音乐。","Unload the music file _PARAM1_":"卸载音乐文件 _PARAM1_","Unload a sound file":"卸载声音文件","Unload a sound file from memory. Unloading a sound file will cause any sounds playing it to stop.":"从内存中卸载声音文件。卸载声音文件会导致播放声音的声音停止。","Unload the sound file _PARAM1_":"卸载声音文件 _PARAM1_","Unload all audio":"卸载所有音频","Unload all the audio in memory. This will cause every sound and music of the game to stop.":"卸载内存中的所有音频。这将导致游戏的所有声音和音乐停止。","Unload all audio files":"卸载所有音频文件","Fade the volume of a sound played on a channel.":"衰减在频道上播放的声音的音量。","Fade the volume of a sound played on a channel to the specified volume within the specified duration.":"在指定的持续时间内,将频道上播放的声音音量衰减到指定的音量。","Fade the sound on channel _PARAM1_ to volume _PARAM2_ within _PARAM3_ seconds":"在_PARAM3_秒内将声道_PARAM1_ 衰减到音量 _PARAM2_","Final volume (0-100)":"最终音量 (0-100)","Fading time in seconds":"以秒为单位的衰减时间","Fade the volume of a music played on a channel.":"淡出某通道上播放的音乐的音量。","Fade the volume of a music played on a channel to the specified volume within the specified duration.":"在指定的持续时间内,将频道上播放的音乐音量衰减到指定的音量。","Fade the music on channel _PARAM1_ to volume _PARAM2_ within _PARAM3_ seconds":"在 _PARAM1_ 频道上淡入音量_PARAM2_ 在 _PARAM3_ 秒内","A music file is being played":"正在播放一个音乐文件。","Test if the music on a channel is being played":"检测某通道上的音乐是否正在播放","Music on channel _PARAM1_ is being played":"通道 _PARAM1_ 里的音乐正在播放","A music file is paused":"音乐文件暂停","Test if the music on the specified channel is paused.":"检测指定通道里的音乐是否暂停","Music on channel _PARAM1_ is paused":"通道 _PARAM1_ 里的音乐已暂停","A music file is stopped":"音乐文件停止","Test if the music on the specified channel is stopped.":"检测指定通道里的音乐是否停止","Music on channel _PARAM1_ is stopped":"通道 _PARAM1_ 里的音乐已停止","A sound is being played":"声音正在播放","Test if the sound on a channel is being played.":"检测某通道里的声音是否正在播放","Sound on channel _PARAM1_ is being played":"通道 _PARAM1_ 里的声音正在播放","A sound is paused":"声音是暂停的","Test if the sound on the specified channel is paused.":"检测某通道里的声音是否已暂停","Sound on channel _PARAM1_ is paused":"通道 _PARAM1_ 里的声音已暂停","A sound is stopped":"声音已停止","Test if the sound on the specified channel is stopped.":"检测某通道里的声音是否已停止","Sound on channel _PARAM1_ is stopped":"通道 _PARAM1_ 里的声音已停止","Test the volume of the sound on the specified channel.":"测试指定通道上声音的音量。","Test the volume of the music on a specified channel. The volume is between 0 and 100.":"在指定的频道上测试音乐的音量。音量在0到100之间。","Global volume":"全局音量","Test the global sound level. The volume is between 0 and 100.":"检测全局声音级别,值在0到100之间。","the global game volume":"全局游戏音量","Test the pitch of the sound on the specified channel. 1 is the default pitch.":"测试指定通道上声音的音高。 1是默认音高。","Pitch to compare to (1 by default)":"要比较的音高(默认为1)","Test the pitch (speed) of the music on a specified channel.":"测试指定通道上音乐的音调(速度)。","Test the playing offset of the sound on the specified channel.":"测试声音在指定频道上的播放偏移量。","Position to compare to (in seconds)":"要比较的位置(以秒为单位)","Test the playing offset of the music on the specified channel.":"测试指定通道上音乐的播放偏移量。","Sound playing offset":"声音播放位置","Sounds":"声音","Music playing offset":"音乐播放位置","Sound volume":"声音的音量","Music volume":"音乐音量","Sound's pitch":"声音的音调","Music's pitch":"音乐的音调","Global volume value":"全局音量","Sound level":"音量 ","Create objects from an external layout":"从外部图层创建对象","Create objects from an external layout.":"从外部图层创建对象。","Create objects from the external layout named _PARAM1_ at position _PARAM2_;_PARAM3_;_PARAM4_":"从外部布局 _PARAM1_ 在位置 _PARAM2_; _PARAM3_; _PARAM4_ 创建对象","X position of the origin":"原点的X坐标","Y position of the origin":"原点的Y坐标","Z position of the origin":"原点的 Z 位置","Conditions to check keys pressed on a keyboard. Note that this does not work with on-screen keyboard on touch devices: use instead mouse/touch conditions when making a game for mobile/touchscreen devices or when making a new game from scratch.":"检查键盘上按下的键的条件。注意,这在触摸设备上与屏幕键盘无效:在为移动/触摸屏设备制作游戏时,请使用鼠标/触摸条件或从头开始制作新游戏。","Key pressed":"键按下","Check if a key is pressed":"检查是否按下了一个键","_PARAM1_ key is pressed":"键盘 _PARAM1_ 键按下","Key to check":"要检查的键","Key released":"键弹起","Check if a key was just released":"检查键是否刚刚被释放","_PARAM1_ key is released":"键盘 _PARAM1_ 键弹起","Check if a key is pressed. This stays true as long as the key is held down. To check if a key was pressed during the frame, use \"Key just pressed\" instead.":"检查一个键是否被按下。只要键被按住,这个值就保持为真。要检查一个键在帧期间是否被按下,请使用 \"刚刚按下的键\"。","Key just pressed":"刚刚按下的键","Check if a key was just pressed.":"检查一个键是否刚刚被按下。","_PARAM1_ key was just pressed":"_PARAM1_ 键刚刚被按下","Check if a key was just released.":"检查一个键是否刚刚被释放。","Any key pressed":"任意键按下","Check if any key is pressed":"检查是否按下了任何键","Any key is pressed":"任意键按下","Any key released":"任意键释放","Check if any key is released":"检查是否有任何键被释放","Any key is released":"释放任意键","Last pressed key":"最后按下的键","Get the name of the latest key pressed on the keyboard":"获取键盘上按下的最新键的名称","Mathematical tools":"数学工具","Random integer":"随机整数","Maximum value":"最大值","Random integer in range":"范围内的随机整数","Minimum value":"最小值","Random float":"随机浮点数","Random float in range":"随机浮点数","Random value in steps":"分步随机值","Step":"步长","Normalize a value between `min` and `max` to a value between 0 and 1.":"将 `min` 和 `max` 之间的值正常化为 0 和 1 之间。","Remap a value between 0 and 1.":"重映射值介于 0 和 1 之间的值。","Min":"最小值","Max":"最大值","Clamp (restrict a value to a given range)":"Clamp (限定值为给定范围)","Restrict a value to a given range":"将值限制在给定范围内","Difference between two angles":"两个角之间的差异","First angle, in degrees":"第一个角度,以度为单位","Second angle, in degrees":"第二个角度,以度为单位","Angle between two positions":"两个位置之间的角度","Compute the angle between two positions (in degrees).":"计算两个位置之间的角度(以度为单位)。","First point X position":"第一点X位置","First point Y position":"第一点 Y 位置","Second point X position":"第二点X位置","Second point Y position":"第二点Y位置","Distance between two positions":"两个位置之间的距离","Compute the distance between two positions.":"计算两个位置之间的距离。","Modulo":"求模","Compute \"x mod y\". GDevelop does NOT support the % operator. Use this mod(x, y) function instead.":"计算 \"x mod y\"。GDevelop 不支持 % 运算符。请使用 mod(x, y) 函数代替。","x (as in x mod y)":"x (x mod y)","y (as in x mod y)":"y (x mod y)","Minimum of two numbers":"两个数中取最小","First expression":"首个表达式","Second expression":"第二个表达式","Maximum of two numbers":"两个数中取最大","Absolute value":"绝对值","Return the non-negative value by removing the sign. The absolute value of -8 is 8.":"通过删除符号返回非负值。 -8 的绝对值是 8。","Arccosine":"反余弦","Arccosine, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"反余弦,返回角度(以弧度为单位)。`ToDeg` 允许将其转换为度。","Hyperbolic arccosine":"双曲线余弦","Arcsine":"反正弦","Arcsine, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"反正弦,返回角度(以弧度为单位)。`ToDeg` 允许将其转换为度。","Arctangent":"反正切","Arctangent, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"反正切,返回一个角度(以弧度为单位)。`ToDeg` 允许将其转换为度。","2 argument arctangent":"2个参数反正切","2 argument arctangent (atan2)":"2个参数反正切(atan2)","Hyperbolic arctangent":"双曲线反正切","Cube root":"立方根","Ceil (round up)":"Ceil (向上取整)","Round number up to an integer":"向上取整","Ceil (round up) to a decimal point":"Ceil (向上) 到小数点","Round number up to the Nth decimal place":"将数字向上至小数点后第n位","Floor (round down)":"Floor (向下取整)","Round number down to an integer":"向下取整","Floor (round down) to a decimal point":"地板(朝下)到小数点","Round number down to the Nth decimal place":"将数字向下至小数点后第n位","Cosine":"余弦","Cosine of an angle (in radian). If you want to use degrees, use`ToRad`: `sin(ToRad(45))`.":"角度的余弦(以弧度为单位)。如果要使用度,请使用`ToRad`:`sin(ToRad(45))`。","Hyperbolic cosine":"双曲线余弦","Cotangent":"余切","Cotangent of a number":"对一个数求余切","Cosecant":"余割","Cosecant of a number":"对一个数求余割","Round":"取整","Round a number":"对一个数取整","Round to a decimal point":"四舍五入到小数点","Round a number to the Nth decimal place":"将数字四舍五入到小数点后第n位","Number to Round":"四舍五入的数字","Decimal Places":"小数位数","Exponential":"指数","Exponential of a number":"一个数的指数","Logarithm":"对数","Base-2 logarithm":"以2为底的对数","Base 2 Logarithm":"基数2对数","Base-10 logarithm":"以10为底的对数","Nth root":"第N根","Nth root of a number":"数字的第N个根","N":"N","Power":"强度:","Raise a number to power n":"提高一个数字权力n","The exponent (n in x^n)":"指数(n 在 x^n中)","Secant":"正割","Sign of a number":"对一个数求余弦","Return the sign of a number (1,-1 or 0)":"返回数字的符号(1, -1或0)","Sine":"正弦","Sine of an angle (in radian). If you want to use degrees, use`ToRad`: `sin(ToRad(45))`.":"角度的正弦(以弧度为单位)。如果要使用度,请使用`ToRad`:`sin(ToRad(45))`。","Hyperbolic sine":"双曲正弦","Square root":"平方根","Square root of a number":"数字的平方根","Tangent":"切线","Tangent of an angle (in radian). If you want to use degrees, use`ToRad`: `tan(ToRad(45))`.":"角度的切线(以弧度为单位)。如果要使用度,请使用`ToRad`:`tan(ToRad(45))`。","Hyperbolic tangent":"双曲正切","Truncation":"截断","Truncate a number":"截断一个数字","Lerp (Linear interpolation)":"Lerp(线性插值)","Linearly interpolate a to b by x":"用 X 线性插入a到b","a (in a+(b-a)*x)":"a (in a+(b-a)*x)","b (in a+(b-a)*x)":"b (in a+(b-a)*x)","x (in a+(b-a)*x)":"x (in a+(b-a)*x)","X position from angle and distance":"指定角度和距离的 X 位置","Compute the X position when given an angle and distance relative to the origin (0;0). This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"当给定一个相对于原点(0;0)的角度和距离时,计算X位置。这也被称为得到一个2D向量的笛卡尔坐标,使用极坐标。","Y position from angle and distance":"指定角度和距离的 Y 位置","Compute the Y position when given an angle and distance relative to the origin (0;0). This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"当给定一个相对于原点(0;0)的角度和距离时,计算Y位置。这也被称为得到一个2D向量的笛卡尔坐标,使用极坐标。","Number Pi (3.1415...)":"数字 Pi (3.1415...)","The number Pi (3.1415...)":"数字 Pi (3.1415...)","Lerp (Linear interpolation) between two angles":"两个角度之间的Lerp (线性插值)","Linearly interpolates between two angles (in degrees) by taking the shortest direction around the circle.":"通过取围绕圆的最短方向在两个角度(以度为单位)之间进行线性插值。","Starting angle, in degrees":"起始角度(度)","Destination angle, in degrees":"目标角度(度)","Interpolation value between 0 and 1.":"介于 0 和 1 之间的插值。","Asynchronous functions":"异步函数","Functions that defer the execution of the events after it.":"延迟事件之后执行的函数。","Async event":"异步事件","Internal event for asynchronous actions":"异步动作的内部事件","End asynchronous function":"结束异步函数","Mark an asynchronous function as finished. This will allow the actions and subevents following it to be run.":"将异步函数标记为已完成。这将允许运行其后的操作和子事件。","Mouse and touch":"鼠标与触摸","Multitouch":"多点触控","The mouse wheel is scrolling up":"鼠标滚轮向上滚动","Check if the mouse wheel is scrolling up. Use MouseWheelDelta expression if you want to know the amount that was scrolled.":"检查鼠标滚轮是否向上滚动。如果您想知道滚动量,请使用MouseWheelDelta表达式。","The mouse wheel is scrolling down":"鼠标滚轮向下滚动","Check if the mouse wheel is scrolling down. Use MouseWheelDelta expression if you want to know the amount that was scrolled.":"检查鼠标滚轮是否向下滚动。如果您想知道滚动量,请使用MouseWheelDelta表达式。","De/activate moving the mouse cursor with touches":"通过触摸移动鼠标光标","When activated, any touch made on a touchscreen will also move the mouse cursor. When deactivated, mouse and touch positions will be completely independent.\nBy default, this is activated so that you can simply use the mouse conditions to also support touchscreens. If you want to have multitouch and differentiate mouse movement and touches, just deactivate it with this action.":"激活时,触摸屏上的任何触摸也会移动鼠标光标。 取消激活时,鼠标和触摸位置将完全独立。\n默认情况下,此功能被激活,以便您可以简单地使用鼠标条件来支持触摸屏。 如果您想要多点触控并区分鼠标移动并触摸,请使用此操作将其停用。","Move mouse cursor when touching screen: _PARAM1_":"触摸屏时移动鼠标光标:_PARAM1_","Activate (yes by default when game is launched)":"激活(游戏启动时是默认)","Center cursor horizontally":"水平居中光标","Put the cursor in the middle of the screen horizontally.":"水平居中光标","Center cursor vertically":"垂直居中光标","Put the cursor in the middle of the screen vertically.":"垂直居中光标","Hide the cursor":"隐藏鼠标","Hide the cursor.":"隐藏鼠标。","Show the cursor":"显示光标","Show the cursor.":"显示光标.","Position the cursor of the mouse":"鼠标光标位置","Position the cursor at the given coordinates.":"光标位置在指定位置","Position cursor at _PARAM1_;_PARAM2_":"光标位置在 _PARAM1_;_PARAM2_","Center the cursor":"居中光标","Center the cursor on the screen.":"在屏幕里居中光标","Cursor X position":"光标X坐标","the X position of the cursor or of a touch":"光标或触摸的 X 位置","the cursor (or touch) X position":"光标(或触摸) X 位置","Cursor Y position":"光标Y坐标","the Y position of the cursor or of a touch":"光标或触摸的 Y 位置","the cursor (or touch) Y position":"光标(或触摸) Y 位置","Mouse cursor X position":"鼠标光标 X 位置","the X position of the mouse cursor":"鼠标光标的 X 位置","the mouse cursor X position":"鼠标光标 X 位置","Mouse cursor Y position":"鼠标光标 Y 位置","the Y position of the mouse cursor":"鼠标光标的 Y 位置","the mouse cursor Y position":"鼠标光标 Y 位置","Mouse cursor is inside the window":"鼠标光标在窗口内","Check if the mouse cursor is inside the window.":"检查鼠标光标是否在窗口内。","The mouse cursor is inside the window":"鼠标光标在窗口内","Mouse button pressed or touch held":"鼠标按钮被按下或触摸","Check if the specified mouse button is pressed or if a touch is in contact with the screen.":"检查是否按下了指定的鼠标按钮或触摸屏。","Touch or _PARAM1_ mouse button is down":"鼠标 _PARAM1_键或触摸按下","Button to check":"按钮检查","Mouse button released":"鼠标键弹起","Check if the specified mouse button was released.":"检查是否释放了指定的鼠标按钮。","Touch or _PARAM1_ mouse button is released":"触摸或 _PARAM1_ 鼠标按钮被释放","Touch X position":"触摸X坐标","the X position of a specific touch":"特定触摸的 X 位置","the touch #_PARAM1_ X position":"触摸#_PARAM1_ X 位置","Touch identifier":"触摸id","Touch Y position":"触摸Y坐标","the Y position of a specific touch":"特定触摸的 Y 位置","the touch #_PARAM1_ Y position":"触摸#_PARAM1_ Y 位置","A new touch has started":"新的触摸已经开始","Check if a touch has started. The touch identifier can be accessed using LastTouchId().\nAs more than one touch can be started, this condition is only true once for each touch: the next time you use it, it will be for a new touch, or it will return false if no more touches have just started.":"检查是否已开始触摸。可以使用LastTouchId()访问该触摸标识符。 n由于可以启动多个触摸,所以此条件仅对每个触摸一次,即:下一次使用该条件时,将用于新触摸,否则它将返回如果没有更多的接触才开始,则返回false","A touch has ended":"触摸已结束","Check if a touch has ended. The touch identifier can be accessed using LastEndedTouchId().\nAs more than one touch can be ended, this condition is only true once for each touch: the next time you use it, it will be for a new touch, or it will return false if no more touches have just ended.":"检查触摸是否结束。可以使用LastEndedTouchId()访问该触摸标识符。 n由于可以终止多个触摸,所以此条件仅对每次触摸一次为真:下次使用时,将是新触摸,否则将返回如果没有更多的接触刚刚结束,则返回false。","Check if a touch has just started on this frame. The touch identifiers can be accessed using StartedTouchId() and StartedTouchCount().":"检查此框架上是否刚刚开始触摸。可以使用StartedTouchId()和StartedTouchCount()访问触摸标识符。","Started touch count":"开始触摸计数","The number of touches that have just started on this frame. The touch identifiers can be accessed using StartedTouchId().":"刚刚在此框架上启动的触摸次数。可以使用spectTouchID()访问触摸标识符。","Started touch identifier":"开始触摸标识符","The identifier of the touch that has just started on this frame. The number of touches can be accessed using StartedTouchCount().":"刚刚在此帧上开始的触摸的标识符。可以使用 StartedTouchCount() 访问触摸次数。","Touch index":"触摸索引","Check if a touch has just started or the mouse left button has been pressed on this frame. The touch identifiers can be accessed using StartedTouchOrMouseId() and StartedTouchOrMouseCount().":"检查是否刚刚开始触摸或在此帧上按下鼠标左键。可以使用 StartedTouchOrMouseId() 和 StartedTouchOrMouseCount() 访问触摸标识符。","The number of touches (including the mouse) that have just started on this frame. The touch identifiers can be accessed using StartedTouchOrMouseId().":"在此帧上刚刚开始的触摸次数(包括鼠标)。可以使用 StartedTouchOrMouseId() 访问触摸标识符。","The identifier of the touch or mouse that has just started on this frame. The number of touches can be accessed using StartedTouchOrMouseCount().":"刚刚在此帧上开始的触摸或鼠标的标识符。可以使用 StartedTouchOrMouseCount() 访问触摸次数。","Check if a touch has ended or a mouse left button has been released.":"检查触摸是否结束或鼠标左键是否已释放。","The touch with identifier _PARAM1_ has ended":"使用标识符_PARAM1_ 的触摸已结束","Mouse wheel: Displacement":"鼠标滚轮: 滚动","Mouse wheel displacement":"鼠标滚轮滚动","Identifier of the last touch":"最后触摸的id","Identifier of the last ended touch":"最后一次触摸的标识符","Text manipulation":"文本操作","Insert a new line":"插入新行","Get character from code point":"从代码点获取字符","Code point":"代码点","Uppercase a text":"文本字母大写","Lowercase a text":"文本字母小写","Get a portion of a text":"获取文本的一部分","Start position of the portion (the first letter is at position 0)":"部分的开始位置(首字母位置在0)","Length of the portion":"部分的宽度","Get a character from a text":"从文本文件获取一个字符","Position of the character (the first letter is at position 0)":"字符的位置(首字母位置在0)","Repeat a text":"读取文本","Text to repeat":"文字重复","Repetition count":"子重现计数","Length of a text":"文本的长度","Search in a text":"在文本文件中搜索","Search in a text (return the position of the result or -1 if not found)":"文本内搜索(结果返回位置,未找到返回-1)","Text to search for":"要搜索的文本","Search the last occurrence in a text":"搜索文本中的最后一次匹配项","Search the last occurrence in a string (return the position of the result, from the beginning of the string, or -1 if not found)":"搜索字符串中的最后一个匹配项(返回结果的位置,从字符串的开头开始,如果未找到,则返回-1)","Search in a text, starting from a position":"在文本中,从一个位置中开始搜索","Search in a text, starting from a position (return the position of the result or -1 if not found)":"在文本中搜索,从一个位置开始(返回结果的位置,否则返回-1)","Position of the first character in the string to be considered in the search":"在搜索中要考虑的字符串中第一个字符的位置","Search the last occurrence in a text, starting from a position":"从某个位置开始搜索文本中的最后一个匹配项","Search in a text the last occurrence, starting from a position (return the position of the result, from the beginning of the string, or -1 if not found)":"在文本中搜索最后一次出现的位置,从一个位置开始(返回结果的位置,从字符串的开头开始,如果没有找到则返回 -1)","Position of the last character in the string to be considered in the search":"在搜索中要考虑的字符串中最后一个字符的位置","Replace the first occurrence of a text by another.":"用另一个文本替换第一次出现的文本。","Text in which the replacement must be done":"必须进行替换的文本","Text to find inside the first text":"在第一个文本中查找的文本","Replacement to put instead of the text to find":"替换要放置的文本,而不是要查找的文本","Replace all occurrences of a text by another.":"用另一个文本替换所有出现的文本。","Text in which the replacement(s) must be done":"文本的替换(s)必须完成","Event functions":"事件函数","Advanced control features for functions made with events.":"用于事件函数的高级控制功能。","Set number return value":"设置数字返回值","Set the return value of the events function to the specified number (to be used with \"Expression\" functions).":"将事件函数的返回值设定到指定的数字 (使用“表达式”函数)。","Set return value to number _PARAM0_":"将返回值设置为数字 _PARAM0_","The number to be returned":"要返回的数字","Set text return value":"设置文本返回值","Set the return value of the events function to the specified text (to be used with \"String Expression\" functions).":"将事件函数的返回值设定到指定的文本 (使用 \"字符串表达式\" 函数)。","Set return value to text _PARAM0_":"将返回值设置为文本 _PARAM0_","The text to be returned":"要返回的文本","Set condition return value":"设置条件返回值","Set the return value of the Condition events function to either true (condition will pass) or false.":"设定条件事件函数返回值为 true (条件将通过) 或 false。","Set return value of the condition to _PARAM0_":"将条件的返回值设置为 _PARAM0_","Should the condition be true or false?":"条件应该是真还是假?","Copy function parameter to variable":"将函数参数复制到变量","Copy a function parameter (also called \"argument\") to a variable. The parameter type must be a variable.":"将函数参数(也称“参数”)复制到一个变量。参数类型必须是变量。","Copy the parameter _PARAM0_ into the variable _PARAM1_":"将参数 _PARAM0_ 复制到变量 _PARAM1_","Copy variable to function parameter":"复制变量到函数参数","Copy a variable to function parameter (also called \"argument\"). The parameter type must be a variable.":"将变量复制到函数参数(也称为“参数”)。参数类型必须是变量。","Copy the variable _PARAM1_ into the parameter _PARAM0_":"将变量 _PARAM1_ 复制到参数 _PARAM0_","Check if a function parameter is set to true (or yes)":"检查函数参数是否设置为 true (或是)","Check if the specified function parameter (also called \"argument\") is set to True or Yes. If the argument is a string, an empty string is considered as \"false\". If it's a number, 0 is considered as \"false\".":"检查指定函数参数(也称“参数”)是否设置为 True 或 。 如果参数是字符串,则空字符串被视为“false”。如果是一个数字,则0被视为“false”。","Parameter _PARAM0_ is true":"参数 _PARAM0_ 为 true","Get function parameter value":"获取函数参数值","Get function parameter (also called \"argument\") value. You don't need this most of the time as you can simply write the parameter name in an expression.":"获取函数参数 (也称为“参数”) 值。在大多数情况下,您不需要这样做,因为您可以简单地在表达式中写入参数名称。","Get function parameter text":"获取函数参数文本","Get function parameter (also called \"argument\") text. You don't need this most of the time as you can simply write the parameter name in an expression.":"获取函数参数 (也称为“参数”) 文本。在大多数情况下,您不需要这样做,因为您可以简单地在表达式中写入参数名称。","Compare function parameter value":"比较函数参数值","Compare function parameter (also called \"argument\") value.":"比较函数参数(也称为“参数”) 值。","Parameter _PARAM0_":"参数 _PARAM0_","Compare function parameter text":"比较函数参数文本","Compare function parameter (also called \"argument\") text.":"比较函数参数(也称为“参数”) 文本。","Events and control flow":"事件和控制流程","This condition always returns true (or always false, if the condition is inverted).":"这个条件总是返回true(或者如果条件反转,则总是为是错的)。","Or":"或","Checks if at least one sub-condition is true. If no sub-condition is specified, it will always be false. This is rarely used — multiple events and sub-events are usually a better approach.":"检查至少一个子条件是否为真。如果没有指定子条件,它将始终为假。这很少使用——通常使用多个事件和子事件是更好的方法。","If one of these conditions is true:":"如果其中一个条件为真 ︰","And":"与","Checks if all sub-conditions are true. If no sub-condition is specified, it will always be false. This is rarely needed, as events already check all conditions before running actions.":"检查所有子条件是否为真。如果没有指定任何子条件,则结果始终为假。这种情况很少需要,因为事件在执行动作之前已经检查了所有条件。","If all of these conditions are true:":"如果这些条件都为真 :","Not":"非","Returns the opposite of the sub-condition(s) result. This is rarely needed, as most conditions can be inverted or expressed more simply.":"返回子条件 (s) 结果的相反值。这种情况很少需要,因为大多数条件都可以通过反转或更简单地表达来实现。","Invert the logical result of these conditions:":"颠倒这些条件的逻辑结果:","Trigger once while true":"当 true 时触发一次","Run the actions once when the previous conditions are true. If they become false and later true again, the actions will run again.\nThis condition is always last in the list.\n\nNote: internally, this uses a global trigger state; it's not tracked per object instance. Be careful if you use this in a loop or For Each event (consider using object variables instead if needed).":"当前条件为真时运行操作。如果它们变为假然后再次变为真,操作将再次运行。\n此条件在列表中始终位于最后。\n\n注意:在内部,这使用全局触发状态;它不根据对象实例进行跟踪。如果在循环或每个事件中使用此项,请小心(如有需要,请考虑使用对象变量)。","Trigger once":"触发一次","Compare two numbers":"比较两个数字","Compare the two numbers.":"比较两个数字。","_PARAM0_ _PARAM1_ _PARAM2_":"_PARAM0_ _PARAM1_ _PARAM2_","Compare two strings":"比较两个字符串","Compare the two strings.":"比较两个字符串。","First string expression":"第一个字符串表达式","Second string expression":"第二个字符串表达式","Standard event":"标准事件","Standard event: Actions are run if conditions are fulfilled.":"标准事件: 如果满足条件, 则运行操作。","Else event: Actions are run if previous events in the chain were not fulfilled.":"如果链中的先前事件未完成,则执行其他事件:执行操作。","Link external events":"链接外部事件","Link to external events.":"链接到外部事件。","Event displaying a text in the events editor.":"事件在事件编辑器中显示文本。","While":"条件循环","Repeat the event while the conditions are true.":"在条件为真时重复该事件。","Repeat":"重复","Repeat the event for a specified number of times.":"将事件重复指定次数。","For each object":"对于每个对象","Repeat the event for each specified object.":"为每个指定的对象重复事件","For each child variable (of a structure or array)":"对于每个子变量 (结构或数组)","Repeat the event for each child variable of a structure or array.":"对结构或数组中的每个子变量重复事件。","Event group":"事件分组","Group containing events.":"包含事件的群组。","Variable value":"变量值","Compare the number value of a variable.":"比较变量的数值。","The variable _PARAM0_":"变量 _PARAM0_","Compare the text (string) of a variable.":"比较变量的文本 (字符串)。","Compare the boolean value of a variable.":"比较变量的布尔值。","The variable _PARAM0_ is _PARAM1_":"变量 _PARAM0_ 是 _PARAM1_","Check if the value is":"检查值是否为","Change variable value":"更改变量值","Modify the number value of a variable.":"修改变量的数值。","the variable _PARAM0_":"变量 _PARAM0_","Modify the text (string) of a variable.":"修改变量的文本 (字符串)。","Modify the boolean value of a variable.":"修改变量的布尔值。","Change the variable _PARAM0_: _PARAM1_":"更改变量 _PARAM0_:_PARAM1_","Number of children":"子项数量","Compare the number of children in an array variable.":"比较数组变量中的子级数量。","The number of children in the array variable _PARAM0_":"数组变量 _PARAM0_ 中的子级数","Arrays and structures":"数组和结构","Array variable":"数组变量","Child existence":"子存在","Check if the specified child of the structure variable exists.":"检查结构变量的指定子级是否存在。","Child _PARAM1_ of variable _PARAM0_ exists":"变量 _PARAM0_ 的子 _PARAM1_ 存在","Name of the child":"子的名字","Remove a child":"删除子","Remove a child from a structure variable.":"从结构变量中删除子项。","Remove child _PARAM1_ from structure variable _PARAM0_":"从结构变量 _PARAM0_ 中删除子 _PARAM1_","Structure variable":"结构变量","Child's name":"子名称","Clear children":"清除子项","Remove all the children from the structure or array variable.":"从结构或数组变量中删除所有子项。","Clear children from variable _PARAM0_":"从变量 _PARAM0_ 清除子项","Structure or array variable":"结构或数组变量","Add existing variable":"添加现有变量","Adds an existing variable at the end of an array variable.":"在数组变量的末尾添加现有变量。","Add variable _PARAM1_ to array variable _PARAM0_":"将变量 _PARAM1_ 添加到数组变量 _PARAM0_","Variable with the content to add":"要添加内容的变量","The content of the variable will *be copied* and added at the end of the array.":"变量的内容将*被复制*并添加到数组的末尾。","Add value to array variable":"向数组变量添加值","Adds a text (string) at the end of a array variable.":"在数组变量的末尾添加文本 (字符串)。","Add the value _PARAM1_ to array variable _PARAM0_":"将值 _PARAM1_ 添加到数组变量 _PARAM0_","Text to add":"要添加的文本","Adds a number at the end of an array variable.":"在数组变量的末尾添加一个数字。","Number to add":"要添加的号码","Adds a boolean at the end of an array variable.":"在数组变量的末尾添加一个布尔值。","Boolean to add":"要添加的布尔值","Remove variable by index":"按索引删除变量","Removes a variable at the specified index of an array variable.":"删除数组变量指定索引处的变量。","Remove variable at index _PARAM1_ from array variable _PARAM0_":"从数组变量 _PARAM0_ 中删除索引 _PARAM1_ 处的变量","Index to remove":"要删除的索引","First text child":"第一个文本子项","Get the value of the first element of an array variable, if it is a text (string).":"获取数组变量的第一个元素的值,如果它是文本(字符串)。","First number child":"第一个数字子项","Get the value of the first element of an array variable, if it is a number.":"获取数组变量的第一个元素的值,如果它是一个数字。","Last text child":"最后文本子项","Get the value of the last element of an array variable, if it is a text (string).":"获取数组变量最后一个元素的值,如果它是文本(字符串)。","Last number child":"最后一个数字子项","Get the value of the last element of an array variable, if it is a number.":"获取数组变量的最后一个元素的值,如果它是一个数字。","Number variable":"数字变量","Compare the number value of a scene variable.":"比较场景变量的数值。","The number of scene variable _PARAM0_":"场景变量的数量 _PARAM0_","External variables ❯ Scene variables":"外部变量 ❯ 场景变量","Text variable":"文本变量","Compare the text (string) of a scene variable.":"比较场景变量的文本 (字符串)。","The text of scene variable _PARAM0_":"场景变量_PARAM0_ 的文本","Boolean variable":"布尔变量","Compare the boolean value of a scene variable.":"比较场景变量的布尔值。","The boolean value of scene variable _PARAM0_ is _PARAM1_":"场景变量 _PARAM0_ 的布尔值是 _PARAM1_","Check if the specified child of the scene structure variable exists.":"检查场景结构变量的指定子项是否存在。","Child _PARAM1_ of scene variable _PARAM0_ exists":"场景变量 _PARAM0_ 的子级 _PARAM1_ 存在","External variables ❯ Scene variables ❯ Arrays and structures":"外部变量 ❯ 场景变量 ❯ 数组和结构","Check if the specified child of the global structure variable exists.":"检查全局结构变量的指定子项是否存在。","Child _PARAM1_ of global variable _PARAM0_ exists":"全局变量 _PARAM0_ 的子 _PARAM1_ 存在","External variables ❯ Global variables ❯ Arrays and structures":"外部变量 ❯ 全局变量 ❯ 数组和结构","Compare the number value of a global variable.":"比较一个全局变量的数值。","the global variable _PARAM0_":"全局变量 _PARAM0_","External variables ❯ Global variables":"外部变量 ❯ 全局变量","Compare the text (string) of a global variable.":"比较全局变量的文本 (字符串)。","the text of the global variable _PARAM0_":"全局变量 _PARAM0_ 的文本","Compare the boolean value of a global variable.":"比较一个全局变量的布尔值。","The boolean value of global variable _PARAM0_ is _PARAM1_":"全局变量 _PARAM0_ 的布尔值是 _PARAM1_","Change number variable":"更改数字变量","Modify the number value of a scene variable.":"修改场景变量的数值。","the scene variable _PARAM0_":"场景变量 _PARAM0_","Change text variable":"更改文本变量","Modify the text (string) of a scene variable.":"修改场景变量的文本(字符串)。","the text of scene variable _PARAM0_":"场景变量_PARAM0_ 的文本","Change boolean variable":"更改布尔变量","Modify the boolean value of a scene variable.":"修改场景变量的布尔值。","Set the boolean value of scene variable _PARAM0_ to _PARAM1_":"设置场景变量 _PARAM0_ 的布尔值为 _PARAM1_","New Value:":"新值:","Toggle boolean variable":"切换布尔变量","Toggle the boolean value of a scene variable.":"切换场景变量的布尔值。","If it was true, it will become false, and if it was false it will become true.":"如果为真,它就会变为假,如果为假,它就会变为真。","Toggle the boolean value of scene variable _PARAM0_":"切换场景变量 _PARAM0_ 的布尔值","Modify the number value of a global variable.":"修改全局变量的数值。","Modify the text (string) of a global variable.":"修改全局变量的文本 (字符串)。","the text of global variable _PARAM0_":"全局变量 _PARAM0_ 的文本","Modify the boolean value of a global variable.":"修改全局变量的布尔值。","Set the boolean value of global variable _PARAM0_ to _PARAM1_":"设置全局变量 _PARAM0_ 的布尔值为 _PARAM1_","Toggle the boolean value of a global variable.":"切换全局变量的布尔值。","Toggle the boolean value of global variable _PARAM0_":"切换全局变量 _PARAM0_ 的布尔值","Remove a child from a scene structure variable.":"从场景结构变量中删除一个子变量。","Remove child _PARAM1_ from scene structure variable _PARAM0_":"从场景结构变量 _PARAM0_ 中删除子项 _PARAM1_","Remove a child from a global structure variable.":"从全局结构变量中删除一个子项。","Remove child _PARAM1_ from global structure variable _PARAM0_":"从全局结构变量 _PARAM0_ 中删除子项 _PARAM1_","Remove all the children from the scene structure or array variable.":"从场景结构或数组变量中删除所有子项。","Clear children from scene variable _PARAM0_":"清除场景变量 _PARAM0_ 中的子级","Remove all the children from the global structure or array variable.":"从全局结构或数组变量中删除所有子项。","Clear children from global variable _PARAM0_":"清除全局变量_PARAM0_中的子项","Adds an existing variable at the end of a scene array variable.":"在场景数组变量的末尾添加一个现有变量。","Scene variable with the content to add":"要添加内容的场景变量","Add text variable":"添加文本变量","Adds a text (string) at the end of a scene array variable.":"在场景数组变量的末尾添加文本 (字符串)。","Add text _PARAM1_ to array variable _PARAM0_":"将文本 _PARAM1_ 添加到数组变量 _PARAM0_","Add number variable":"添加数字变量","Adds a number at the end of a scene array variable.":"在场景数组变量的末尾添加一个数字。","Add number _PARAM1_ to array variable _PARAM0_":"将数字 _PARAM1_ 添加到数组变量 _PARAM0_","Add boolean variable":"添加布尔变量","Adds a boolean at the end of a scene array variable.":"在场景数组变量的末尾添加一个布尔值。","Add boolean _PARAM1_ to array variable _PARAM0_":"将布尔值 _PARAM1_ 添加到数组变量 _PARAM0_","Removes a variable at the specified index of a scene array variable.":"在场景数组变量的指定索引处删除变量。","Remove variable at index _PARAM1_ from scene array variable _PARAM0_":"从场景数组变量 _PARAM0_ 中删除索引 _PARAM1_ 处的变量","Compare the number of children in a scene array variable.":"比较场景数组变量中的子对象数。","Get the value of the first element of a scene array variable, if it is a text (string).":"获取场景数组变量的第一个元素的值,如果它是文本(字符串)。","Get the value of the first element of a scene array variable, if it is a number.":"获取场景数组变量的第一个元素的值,如果它是一个数字。","Get the value of the last element of a scene array variable, if it is a text (string).":"获取场景数组变量的最后一个元素的值,如果它是文本(字符串)。","Get the value of the last element of a scene array variable, if it is a number.":"获取场景数组变量的最后一个元素的值,如果它是一个数字。","Adds an existing variable at the end of a global array variable.":"在全局数组变量的末尾添加一个现有变量。","Removes a variable at the specified index of a global array variable.":"移除全局数组变量的指定索引处的变量。","Remove variable at index _PARAM1_ from global array variable _PARAM0_":"从全局数组变量 _PARAM0_ 中删除索引 _PARAM1_ 的变量","Adds a text (string) at the end of a global array variable.":"在全局数组变量的末尾添加一个文本 (字符串)。","Adds a number at the end of a global array variable.":"在全局数组变量的末尾添加一个数字。","Adds a boolean at the end of a global array variable.":"在全局数组变量的末尾添加一个布尔值。","Compare the number of children in a global array variable.":"比较全局数组变量中的子项数。","The number of children of the array variable _PARAM0_":"数组变量_PARAM0_ 的子项数","Value of the first element of a global array variable, if it is a text (string) variable.":"全局数组变量的第一个元素的值,如果它是文本(字符串) 变量。","Value of the first element of a global array variable, if it is a number variable":"全局数组变量的第一个元素的值,如果它是一个数字变量","Value of the last element of a global array variable, if it is a text (string) variable.":"全局数组变量的最后一个元素的值,如果它是文本(字符串) 变量。","Value of the last element of a global array variable, if it is a number variable":"全局数组变量的最后一个元素的值,如果它是一个数字变量","Number of children in a global array or structure variable":"全局数组或结构变量中的子级数","Array or structure variable":"数组或结构变量","Number of children in a scene array or structure variable":"场景数组或结构变量中的子级数","Number value of a scene variable":"场景变量的数值","Text of a scene variable":"场景变量的文本","Number value of a global variable":"全局变量的数值","Name of the global variable":"全局变量的名称","Text of a global variable":"全局变量的文本","Sprite are animated objects which can be used for most elements of a 2D game.":"精灵是动画对象,可以用于大多数2D游戏元素。","Animated object which can be used for most elements of a 2D game.":"可用于大多数2D游戏元素的动画对象。","Sprite opacity":"精灵不透明度","Change the opacity of a Sprite. 0 is fully transparent, 255 is opaque (default).":"更改精灵的不透明度。0 是完全透明的,255 是不透明的(默认)。","Change the animation":"更改动画","Change the animation of the object, using the animation number in the animations list.":"使用动画列表中的动画编号更改对象的动画。","Change the animation (by name)":"更改动画(按名称)","Change the animation of the object, using the name of the animation.":"使用动画的名称更改对象的动画。","Set animation of _PARAM0_ to _PARAM1_":"将 _PARAM0_ 的动画设置为 _PARAM1_","Change the direction":"更改方向","Change the direction of the object.\nIf the object is set to automatically rotate, the direction is its angle.\nIf the object is in 8 directions mode, the valid directions are 0..7":"改变对象的方向。\n如果对象被设置为自动旋转,则方向是其角度。\n如果对象处于8方向模式,则有效方向为0..7","the direction":"方向","Current frame":"当前帧","Modify the current frame of the object":"变更对象的当前帧","the animation frame":"动画帧","Play the animation":"播放动画","Play the animation of the object":"播放对象的动画","Play the animation of _PARAM0_":"播放_PARAM0_ 的动画","Modify the animation speed scale (1 = the default speed, >1 = faster and <1 = slower).":"更改动画速度比例(1=默认速度,>1 =更快 ,<1 =更慢)","Object to be rotated":"对象被旋转","Angular speed (degrees per second)":"角速度 ( 单位为度每秒 )","Modify the scale of the width of an object.":"修改对象的宽度的比例","Modify the scale of the height of an object.":"修改对象的高度的比例","Change the width of a Sprite object.":"更改精灵对象的宽度。","Compare the width of a Sprite object.":"比较Sprite 对象的宽度。","Change the height of a Sprite object.":"更改精灵对象的高度。","Compare the height of a Sprite object.":"比较Sprite 对象的高度","Current animation":"当前动画","Compare the number of the animation played by the object.":"比较对象所播放动画的数量。","Current animation name":"当前动画名称","Check the animation played by the object.":"检查对象播放的动画。","The animation of _PARAM0_ is _PARAM1_":"_PARAM0_ 的动画是 _PARAM1_","Current direction":"当前方向","Compare the direction of the object. If 8 direction mode is activated for the sprite, the value taken for direction will be from 0 to 7. Otherwise, the direction is in degrees.":"比较对象的方向。如果精灵的8方向模式已激活,方向的值为0到7 . 否则,方向是度.","Compare the index of the current frame in the animation displayed by the specified object. The first frame in an animation starts at index 0.":"比较指定对象显示的动画中当前帧的索引。动画中的第一帧始于索引0。","Compare the scale of the width of an object.":"比较对象的宽度的比例","Compare the scale of the height of an object.":"比较对象的高度的比例","Compare the opacity of a Sprite, between 0 (fully transparent) to 255 (opaque).":"比较精灵的不透明度,介于 0 (完全透明) 到 255 (不透明)。","Blend mode":"混合模式","Compare the number of the blend mode currently used by an object":"比较对象当前使用的混合模式","the number of the current blend mode":"当前混合模式的编号","Change the tint of an object. The default color is white.":"更改对象的颜色。默认颜色为白色。","Change the number of the blend mode of an object.\nThe default blend mode is 0 (Normal).":"更改对象混合模式的编号。\n默认混合模式为0(正常)。","Change Blend mode of _PARAM0_ to _PARAM1_":"_PARAM0_ 改变混合模式为 _PARAM1_","X position of a point":"点的X坐标","Name of the point":"点的名称","Y position of a point":"点的Y坐标","Direction of the object":"对象的方向","Animation of the object":"对象的动画","Name of the animation of the object":"暂停对象的当前动画","Current frame of the animation of the object":"对象动画的当前帧","Number of frames":"帧数","Number of frames in the current animation of the object":"对象当前动画中的帧数","Scale of the width of an object":"对象的宽度的比值","Scale of the height of an object":"对象的高度的比值","Collision (Pixel perfect)":"碰撞 (像素完美)","The condition is true if there is a collision between the two objects.\nThe test is pixel-perfect.":"如果有两个物体之间的碰撞条件为真. \n测试是完美的。","_PARAM0_ is in collision with _PARAM1_ (pixel perfect)":"_PARAM0_ 与 _PARAM1_ 碰撞(像素完美)","Game window and resolution":"游戏窗口和分辨率","De/activate fullscreen":"禁/激活 全屏","This action activates or deactivates fullscreen.":"这一行动启动或关闭全屏。","Activate fullscreen: _PARAM1_ (keep aspect ratio: _PARAM2_)":"激活全屏 ︰ _PARAM1_ (保持纵横比 ︰ _PARAM2_)","Activate fullscreen":"激活全屏","Keep aspect ratio (HTML5 games only, yes by default)":"保持纵横比 (仅HTML5 游戏,yes为默认)","Fullscreen activated?":"全屏已激活?","Check if the game is currently in fullscreen.":"检查游戏是否当前全屏。","The game is in fullscreen":"游戏在全屏中","Window's margins":"窗口的边距","This action changes the margins, in pixels, between the game frame and the window borders.":"这个动作会改变游戏框架和窗口边界之间的像素间距。","Set margins of game window to _PARAM1_;_PARAM2_;_PARAM3_;_PARAM4_":"设置游戏窗口的边距 _ PARAM1_;_PARAM2_;_PARAM3_;_PARAM4 _","Game resolution":"游戏分辨率","Changes the resolution of the game, effectively changing the game area size. This won't change the size of the window in which the game is running.":"更改游戏的分辨率,有效改变游戏区域大小。 这不会改变游戏运行的窗口的大小。","Set game resolution to _PARAM1_x_PARAM2_":"将游戏分辨率设置为 _PARAM1_x_PARAM2_","Game window size":"游戏窗口大小","Changes the size of the game window. Note that this will only work on platform supporting this operation: games running in browsers or on mobile phones can not update their window size. Game resolution can still be updated.":"更改游戏窗口的大小。 请注意,这只能在支持此操作的平台上运行:在浏览器或手机上运行的游戏无法更新其窗口大小。 游戏分辨率仍然可以更新。","Set game window size to _PARAM1_x_PARAM2_ (also update game resolution: _PARAM3_)":"设置游戏窗口大小为 _PARAM1_x_PARAM2_ (也更新游戏分辨率:_PARAM3_)","Also update the game resolution? If not, the game will be stretched or reduced to fit in the window.":"也更新游戏分辨率?如果没有,游戏将被拉伸或缩小到适合窗口。","Center the game window on the screen":"在屏幕上居中游戏窗口","This action centers the game window on the screen. This only works on Windows, macOS and Linux (not when the game is executed in a web-browser or on iOS/Android).":"此操作将游戏窗口置于屏幕中间。 这只适用于Windows、 macOS 和 Linux(不是当游戏在网页浏览器或在 iOS/ Android中执行)。","Center the game window":"居中游戏窗口","Game resolution resize mode":"游戏分辨率调整大小模式","Set if the width or the height of the game resolution should be changed to fit the game window - or if the game resolution should not be updated automatically.":"如果游戏分辨率的宽度或高度被更改以适合游戏窗口 - 或者如果游戏分辨率不应自动更新,则设定。","Set game resolution resize mode to _PARAM1_":"设置游戏分辨率调整模式为 _PARAM1_","Resize mode":"调整大小模式","Empty to disable resizing. \"adaptWidth\" will update the game width to fit in the window or screen. \"adaptHeight\" will do the same but with the game height.":"为空以禁用调整大小。 “ adaptWidth”将更新游戏宽度以适合窗口或屏幕。 “ adaptHeight”将与游戏高度相同。","Automatically adapt the game resolution":"自动调整游戏分辨率","Set if the game resolution should be automatically adapted when the game window or screen size change. This will only be the case if the game resolution resize mode is configured to adapt the width or the height of the game.":"设置当游戏窗口或屏幕大小改变时是否自动调整游戏分辨率。 只有当游戏分辨率调整模式被配置为适应游戏的宽度或高度时才会出现这种情况。","Automatically adapt the game resolution: _PARAM1_":"自动调整游戏分辨率:_PARAM1_","Update resolution during the game to fit the screen or window size?":"在游戏中更新分辨率以适应屏幕或窗口大小?","Window's icon":"Windows图标","This action changes the icon of the game's window.":"此操作将更改游戏窗口的图标。","Use _PARAM1_ as the icon for the game's window.":"使用 _ PARAM1 尽可能游戏窗口的图标。","Name of the image to be used as the icon":"用作图标的图像的名称","Window's title":"窗口的标题","This action changes the title of the game's window.":"此操作更改游戏窗口的标题。","Change window title to _PARAM1_":"将窗口标题更改为 _PARAM1_","New title":"新标题","Width of the scene window":"场景窗口的宽度","Width of the scene window (or scene canvas for HTML5 games)":"场景窗口的宽度 (或 HTML5 游戏的场景画布)","Height of the scene window":"场景窗口的高度","Height of the scene window (or scene canvas for HTML5 games)":"场景窗口的高度(或HTML5游戏的场景画布)","Width of the screen/page":"屏幕/页面的宽度","Width of the screen (or the page for HTML5 games in browser)":"屏幕宽度(或浏览器中的HTML5游戏页面)","Height of the screen/page":"屏幕/页面的高度","Height of the screen (or the page for HTML5 games in browser)":"屏幕高度(或浏览器中的HTML5游戏页面)","Color depth":"颜色深度","Timers and time":"计时器与时间","Value of a scene timer":"场景计时器的值","Test the elapsed time of a scene timer.":"测试场景计时器经过的时间。","The timer _PARAM2_ is greater than _PARAM1_ seconds":"计时器 _PARAM2_ 大于 _PARAM1_ 秒","Time in seconds":"以秒为单位的时间","Timer's name":"计时器的名称","Compare the elapsed time of a scene timer. This condition doesn't start the timer and will always be false if the timer was not started previously (whatever the comparison being made).":"比较场景计时器的经过时间。此条件不会启动计时器,如果计时器之前未启动(无论进行何种比较),该条件始终为假。","The timer _PARAM1_ _PARAM2_ _PARAM3_ seconds":"定时器 _PARAM1_ _PARAM2_ _PARAM3_ 秒","Time scale":"时间比例","Compare the time scale of the scene.":"比较场景的时间比例。","the time scale of the scene":"场景的时间比例","Scene timer paused":"场景计时器暂停","Test if the specified scene timer is paused.":"测试指定场景计时器是否已暂停。","The timer _PARAM1_ is paused":"计时器 _PARAM1_ 已暂停","Start (or reset) a scene timer":"启动(或重置) 场景定时器","Reset the specified scene timer, if the timer doesn't exist it's created and started.":"重置指定的场景计时器,如果计时器不存在,它已创建并启动。","Start (or reset) the timer _PARAM1_":"启动(或重置) 计时器 _PARAM1_","Pause a scene timer":"暂停场景计时器","Pause a scene timer.":"暂停场景计时器。","Pause timer _PARAM1_":"暂停计时器 _PARAM1_","Unpause a scene timer":"取消暂停场景计时器","Unpause a scene timer.":"取消暂停场景计时器。","Unpause timer _PARAM1_":"取消暂停计时器 _PARAM1_","Delete a scene timer":"删除场景计时器","Delete a scene timer from memory.":"从内存中删除场景计时器。","Delete timer _PARAM1_ from memory":"从内存中删除计时器 _PARAM1_","Change the time scale of the scene.":"更改场景的时间比例。","Set the time scale of the scene to _PARAM1_":"将场景的时间比例设置为 _PARAM1_","Wait X seconds":"等待 X 秒","Waits a number of seconds before running the next actions (and sub-events).":"在运行下一个动作(和子活动)之前等待几秒钟。","Wait _PARAM0_ seconds":"等待 _PARAM0_ 秒","Time to wait in seconds":"等待时间(秒)","Time elapsed since the last frame":"上一帧结束后经过的时间","Time elapsed since the last frame rendered on screen":"屏幕上最后一帧渲染后经过的时间","Scene timer value":"场景计时器值","Value of a scene timer (in seconds)":"场景计时器的值(以秒为单位)","Time elapsed since the beginning of the scene (in seconds).":"自场景开始以来经过的时间(以秒为单位)。","Returns the time scale of the scene.":"返回场景的时间比例。","Gives the current time":"获取当前时间。","- Hour of the day: \"hour\"\n- Minutes: \"min\"\n- Seconds: \"sec\"\n- Day of month: \"mday\"\n- Months since January: \"mon\"\n- Year since 1900: \"year\"\n- Days since Sunday: \"wday\"\n- Days since Jan 1st: \"yday\"\n- Timestamp (ms): \"timestamp\"":"- 一天中的小时:\"hour\"\n- 分钟:\"min\"\n- 秒:\"sec\"\n- 月中的日期:\"mday\"\n- 自一月以来的月份:\"mon\"\n- 自1900年以来的年份:\"year\"\n- 自星期日以来的天数:\"wday\"\n- 自1月1日起的天数:\"yday\"\n- 时间戳(毫秒):\"timestamp\"","Existence of a group":"存在的组","Check if an element (example : PlayerState/CurrentLevel) exists in the stored data.\nSpaces are forbidden in element names.":"检查是否在存储的数据中存在元素 (例如: PlayerState/CurrentLevel) 。\n元素名中禁用空格。","_PARAM1_ exists in storage _PARAM0_":"_PARAM1_ 存在于存储 _PARAM0_ 中","Storage name":"存储名称","Group":"组","Manually preload a storage in memory":"手动预加载内存中的存储","Forces the specified storage to be loaded and kept in memory, allowing faster reads/writes. However, it requires manual management: if you use this action, you *must* also unload the storage manually when it's no longer needed to ensure data is persisted.\n\nUnless you have a specific performance need, avoid using this action. The system already handles loading/unloading automatically.":"强制指定的存储被加载并保留在内存中,从而允许更快的读写。但是,这需要手动管理:如果使用此操作,则*必须*在不再需要时手动卸载存储以确保数据被持久化。\n\n除非您有特定的性能需求,否则请避免使用此操作。系统已经自动处理加载/卸载。","Load data storage _PARAM0_ in memory":"在内存中加载数据存储 _PARAM0_","Manually unload and persist a storage":"手动卸载并持久化存储","Close the specified storage previously loaded in memory, saving all changes made.":"关闭先前加载到内存中的指定存储,保存所有所做的更改。","Unload and persist data storage _PARAM0_":"卸载并持久化数据存储 _PARAM0_","Save a value":"保存一个值","Save the result of the expression in the stored data, in the specified element.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"将表达式的结果保存在存储数据的指定元素中。\n使用/(示例:Root/Level/Current)指定通向元素的结构\n元素名称中禁止使用空格。","Save value _PARAM2_ in _PARAM1_ of storage _PARAM0_":"将 _PARAM2_ 保存在存储 _PARAM0_ 的 _PARAM1_ 中","Save a text":"保存文本","Save the text in the specified storage, in the specified element.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"将文本保存在指定的存储中的指定元素中。\n使用/(例如:Root/Level/Current)指定指向元素的结构\n元素名称中禁止使用空格。","Save text _PARAM2_ in _PARAM1_ of storage _PARAM0_":"将 _PARAM2_ 保存在存储 _PARAM0_ 的 _PARAM1_ 中","Load a value":"加载一个值","Load the value saved in the specified element and store it in a scene variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"加载保存在指定元素中的值,并将其存储在场景变量中。\n使用/(示例:Root/Level/Current)指定通向元素的结构\n元素名称中禁止使用空格。","Load _PARAM1_ from storage _PARAM0_ and store value in _PARAM3_":"从存储器 _PARAM0_ 加载 _PARAM1_ 并将值存储在 _PARAM3_ 中","Load the value saved in the specified element and store it in a variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"加载指定元素中保存的值并将其存储在变量中。\n使用 / 指定通向该元素的结构 (例如:Root/Level/Current)\n元素名称中禁止使用空格。","Load a text":"加载文本","Load the text saved in the specified element and store it in a scene variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"加载保存在指定元素中的文本,并将其存储在一个场景变量中。\n使用/(示例:Root/Level/Current)指定通向元素的结构\n元素名称中禁止使用空格。","Load _PARAM1_ from storage _PARAM0_ and store as text in _PARAM3_":"从存储器 _PARAM0_ 加载 _PARAM1_ 并将其作为文本存储在 _PARAM3_ 中","Load the text saved in the specified element and store it in a variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"加载保存在指定元素中的文本并将其存储在变量中。\n使用 / 指定通向该元素的结构 (例如:根/级别/当前)\n元素名称中禁止使用空格。","Delete an element":"删除元素","This action deletes the specified element from the specified storage.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"此动作将从指定存储中删除指定的元素。\n指定导致元素的结构使用 / (例如: Root/Level/Current)\n元素名中禁止空格。","Delete _PARAM1_ from storage _PARAM0_":"从存储 _PARAM0_ 删除 _PARAM1_","Clear a storage":"清除存储","Clear the specified storage, removing all data saved in it.":"清除指定的存储,移除保存的所有数据。","Delete storage _PARAM0_":"删除存储 _PARAM0_","A storage exists":"存储已存在","Test if the specified storage exists.":"测试指定存储是否存在。","Storage _PARAM0_ exists":"存储 _PARAM0_ 存在","Execute a command":"执行命令","This action executes the specified command.":"这个动作执行指定的命令。","Execute _PARAM0_":"执行 _PARAM0_","Command":"命令","Conversion":"转换","Text > Number":"文字 > 数字","Convert the text to a number":"将文本转换为数字","Text to convert to a number":"要转换成数字的文本","Number > Text":"数字 > 文字","Convert the result of the expression to text":"转换表达式的结果至文本","Expression to be converted to text":"要转换为文本的表达式","Number > Text (without scientific notation)":"数字 > 文本(没有科学记数法)","Convert the result of the expression to text, without using the scientific notation":"将表达式的结果转换为文本,而不使用科学记数法","Degrees > Radians":"度 >> 弧度","Converts the angle, expressed in degrees, into radians":"将角度(以度表示)转换为弧度","Radians > Degrees":"弧度 > 度","Converts the angle, expressed in radians, into degrees":"将以弧度表示的角度转换为度数","Angle, in radians":"以弧度为单位的角度","Convert variable to JSON":"将变量转换为 JSON","Convert a variable to JSON":"将变量转换为 JSON","JSON":"JSON","The variable to be stringified":"要字符串化的变量","Convert global variable to JSON":"将全局变量转换为JSON","Convert a global variable to JSON":"将全局变量转换为JSON","The global variable to be stringified":"全局变量被字符串化","Convert object variable to JSON":"将对象变量转换为JSON","Convert an object variable to JSON":"将对象变量转换为JSON","The object with the variable":"与变量的对象","The object variable to be stringified":"要被字符串化的对象变量","Convert JSON to a scene variable":"转换 JSON 为场景变量","Parse a JSON object and store it into a scene variable":"解析 JSON 对象并将其存储到场景变量中","Convert JSON string _PARAM0_ and store it into variable _PARAM1_":"转换 JSON 字符串 _PARAM0_ 并存储到变量 _PARAM1_","JSON string":"JSON 字符串","Variable where store the JSON object":"存储JSON对象的变量","Convert JSON to global variable":"将JSON转换为全局变量","Parse a JSON object and store it into a global variable":"解析一个JSON对象并将其存储到一个全局变量中","Convert JSON string _PARAM0_ and store it into global variable _PARAM1_":"转换 JSON 字符串 _PARAM0_ 并存储到全局变量 _PARAM1_","Global variable where store the JSON object":"存储JSON对象的全局变量","Convert JSON to a variable":"将 JSON 转换为变量","Parse a JSON object and store it into a variable":"解析一个 JSON 对象并将其存储到一个变量中","Variable where to store the JSON object":"存储 JSON 对象的变量","Convert JSON to object variable":"将JSON转换为对象变量","Parse a JSON object and store it into an object variable":"解析JSON对象并将其存储到对象变量中","Parse JSON string _PARAM0_ and store it into variable _PARAM2_ of _PARAM1_":"解析JSON字符串_PARAM0_并将其存储到_PARAM1_的变量_PARAM2_中","Object variable where store the JSON object":"存储JSON对象的对象变量","Common features that can be used for all objects in GDevelop.":"可用于 GDevelop 中所有对象的共同特征。","Movement using forces":"使用力移动","Base object":"基对象","Compare the X position of the object.":"比较对象的 X 位置。","the X position":"X 位置","Change the X position of an object.":"更改对象的 X 位置。","Compare the Y position of an object.":"比较对象的 Y 位置","the Y position":"Y 位置","Change the Y position of an object.":"更改对象的 Y 位置。","Change the position of an object.":"更改对象的位置。","Change the position of _PARAM0_: _PARAM1_ _PARAM2_ (x axis), _PARAM3_ _PARAM4_ (y axis)":"更改_PARAM0_的位置: _PARAM1_ _PARAM2_ (x 轴), _PARAM3_ _PARAM4_ (y 轴)","Modification's sign":"修改符号","Center position":"中心位置","Change the position of an object, using its center.":"以对象的中心位置更改其位置。","Change the position of the center of _PARAM0_: _PARAM1_ _PARAM2_ (x axis), _PARAM3_ _PARAM4_ (y axis)":"更改_PARAM0_的中心位置: _PARAM1_ _PARAM2_ (x 轴), _PARAM3_ _PARAM4_ (y 轴)","Center X position":"中心 X 位置","the X position of the center of rotation":"旋转中心的 X 位置","the X position of the center":"中心的 X 位置","Center Y position":"中心 Y 位置","the Y position of the center of rotation":"旋转中心的 Y 位置","the Y position of the center":"中心的 Y 位置","Bounding box left position":"边框左侧位置","the bounding box (the area encapsulating the object) left position":"边界框(封装物体的区域)左位置","the bounding box left position":"边界框左侧位置","Position ❯ Bounding Box":"位置 ❯ 边框","Bounding box top position":"边界框顶部位置","the bounding box (the area encapsulating the object) top position":"边界框(封装物体的区域)顶位置","the bounding box top position":"边界框顶部位置","Bounding box right position":"边界框右侧位置","the bounding box (the area encapsulating the object) right position":"边界框(封装物体的区域)右位置","the bounding box right position":"边界框右侧位置","Bounding box bottom position":"边界框底部位置","the bounding box (the area encapsulating the object) bottom position":"边框(对象封装区域)底部位置","the bounding box bottom position":"边界框底部位置","Bounding box center X position":"边界框中心 X 位置","the bounding box (the area encapsulating the object) center X position":"边界框 (对象封装区域) 中心 X 位置","the bounding box center X position":"边界框中心 X 位置","Bounding box center Y position":"边界框中心 Y 位置","the bounding box (the area encapsulating the object) center Y position":"边界框(封装物体的区域)中心Y位置","the bounding box center Y position":"边界框中心Y位置","Put around a position":"放在某位置附近","Position the center of the given object around a position, using the specified angle and distance.":"使用指定的角度和距离,将给定对象的中心围绕一个位置定位。","Put _PARAM0_ around _PARAM1_;_PARAM2_, with an angle of _PARAM4_ degrees and _PARAM3_ pixels distance.":"把 _PARAM0_ 围繞 _PARAM1_ ; _PARAM2_ ,以 _PARAM4_ 角度和 _PARAM3_ 像素距离。","Change the angle of rotation of an object (in degrees). For 3D objects, this is the rotation around the Z axis.":"更改对象的旋转角度(以度为单位)。对于 3D 对象,这是围绕 Z 轴的旋转。","Rotate":"旋转","Rotate an object, clockwise if the speed is positive, counterclockwise otherwise. For 3D objects, this is the rotation around the Z axis.":"旋转对象,当速度为正时顺时针旋转,反之则逆时针旋转。对于 3D 对象,这是围绕 Z 轴的旋转。","Rotate _PARAM0_ at speed _PARAM1_ deg/second":"以 _PARAM1_deg/秒的速度旋转 _PARAM0_","Rotate toward angle":"向角旋转","Rotate an object towards an angle with the specified speed.":"以指定速度向一角度旋转对象。","Rotate _PARAM0_ towards _PARAM1_ at speed _PARAM2_ deg/second":"以 _PARAM2_deg/秒的速度旋转 _PARAM0_ 朝_PARAM1_","Angle to rotate towards (in degrees)":"要向住旋转的角度 ( 以度为单位 )","Enter 0 for an immediate rotation.":"输入 0 表示立即旋转.","Rotate toward position":"向一位置旋转","Rotate an object towards a position, with the specified speed.":"旋转物体朝向一个位置,用指定的速度。","Rotate _PARAM0_ towards _PARAM1_;_PARAM2_ at speed _PARAM3_ deg/second":"旋转 _PARAM0_ 朝着_PARAM1_; _PARAM2_ 以速度 _PARAM3_ deg/秒","Rotate toward another object":"朝另一个对象旋转","Rotate an object towards another object, with the specified speed. Note that if multiple instances of the target object are picked, only the first one will be used. Use a For Each event or actions like \"Pick nearest object\", \"Pick a random object\" to refine the choice of the target object.":"以指定的速度将物体旋转朝向另一个物体。请注意,如果选择了目标物体的多个实例,则只会使用第一个。使用“循环遍历”事件或“选择最近的物体”、“选择随机物体”等操作来细化目标物体的选择。","Target object":"目标对象","Add a force":"添加力","Add a force to an object. The object will move according to all of the forces it has.":"向对象添加一个力。物体将根据它所拥有的所有力移动。","Add to _PARAM0_ _PARAM3_ force of _PARAM1_ p/s on X axis and _PARAM2_ p/s on Y axis":"添加 _PARAM0_ _PARAM3_ 力在 _PARAM1_ p/s X 轴上 和 _PARAM2_ p/s Y 轴上","Speed on X axis (in pixels per second)":"X轴上的速度(像素每秒)","Speed on Y axis (in pixels per second)":"Y轴上的速度(像素每秒)","Force multiplier":"力量倍增","Add a force (angle)":"添加一个力 (角)","Add a force to an object. The object will move according to all of the forces it has. This action creates the force using the specified angle and length.":"向对象添加一个力。物体将根据它所拥有的所有力移动。此动作使用指定的角度和长度创建力。","Add to _PARAM0_ _PARAM3_ force, angle: _PARAM1_ degrees and length: _PARAM2_ pixels":"添加到 _PARAM0_ _PARAM3_ 力, 角度: _PARAM1_ 度和长度: _PARAM2_ 像素","Add a force to move toward a position":"添加一个力走向某位置","Add a force to an object to make it move toward a position.":"添加一个力使对象走向某个位置","Move _PARAM0_ toward _PARAM1_;_PARAM2_ with _PARAM4_ force of _PARAM3_ pixels":"将 _PARAM0_ 移动到 _PARAM1_; _PARAM2_ 和 _PARAM4_ 力的 _PARAM3_ 像素","Stop the object":"停止对象","Stop the object by deleting all of its forces.":"通过删除所有的力来停止对象。","Stop _PARAM0_ (remove all forces)":"停止 _PARAM0_ (移除所有力量)","Delete the object":"删除此对象","Delete the specified object.":"删除指定的对象。","Delete _PARAM0_":"删除 _PARAM0_","Z order":"Z 顺序","Modify the Z-order of an object":"修改对象的 Z 顺序","the z-order":"z-顺序","Move the object to a different layer.":"将其移至不同的列表。","Put _PARAM0_ on the layer _PARAM1_":"把 _PARAM0_ 放在图层 _PARAM1_","Move it to this layer":"将其移动到此层","Change object variable value":"更改对象变量的值","Modify the number value of an object variable.":"修改对象变量的数值。","the variable _PARAM1_":"变量 _PARAM1_","Modify the text of an object variable.":"修改对象变量的文本。","Modify the boolean value of an object variable.":"修改对象变量的布尔值。","Change the variable _PARAM1_ of _PARAM0_: _PARAM2_":"更改 _PARAM0_ 的变量 _PARAM1_:_PARAM2_","Object variable value":"对象变量值","Compare the number value of an object variable.":"比较对象变量的数值。","Compare the text of an object variable.":"比较对象变量的文本。","Compare the boolean value of an object variable.":"比较对象变量的布尔值。","The variable _PARAM1_ of _PARAM0_ is _PARAM2_":"_PARAM0_ 的变量 _PARAM1_ 是 _PARAM2_","the text of variable _PARAM1_":"变量 _PARAM1_ 的文本","Set the boolean value of variable _PARAM1_ of _PARAM0_ to _PARAM2_":"将 _PARAM0_ 的变量 _PARAM1_ 的布尔值设置为 _PARAM2_","Toggles the boolean value of an object variable.":"切换对象变量的布尔值。","Toggle the boolean value of variable _PARAM1_ of _PARAM0_":"切换_PARAM0_变量_PARAM1_ 的布尔值","Check if the specified child of the object structure variable exists.":"检查对象结构变量的指定子项是否存在。","Child _PARAM2_ of variable _PARAM1_ of _PARAM0_ exists":"_PARAM0_ 的变量 _PARAM1_ 的子 _PARAM2_ 存在","Variables ❯ Arrays and structures":"变量 ❯ 数组和结构","Remove a child from an object structure variable.":"从对象结构变量中删除一个子项。","Remove child _PARAM2_ from variable _PARAM1_ of _PARAM0_":"从 _PARAM0_ 的变量 _PARAM1_ 中删除子 _PARAM2_","Remove all the children from the object array or structure variable.":"从对象数组或结构变量中删除所有子项。","Clear children from variable _PARAM1_ of _PARAM0_":"从 _PARAM0_ 的变量 _PARAM1_ 中删除子 _PARAM2_","Hide":"隐藏","Hide the specified object.":"隐藏指定对象。","Hide _PARAM0_":"隐藏 _PARAM0_","Show the specified object.":"显示指定的对象。","Show _PARAM0_":"显示 _PARAM0_","Compare the angle, in degrees, of the specified object. For 3D objects, this is the angle around the Z axis.":"比较指定对象的角度(以度为单位)。对于 3D 对象,这是围绕 Z 轴的角度。","the angle (in degrees)":"角度(以度为单位)","Z-order":"Z 顺序","Compare the Z-order of the specified object.":"比较指定对象的 Z-顺序。","the Z-order":"Z 顺序","Current layer":"当前层","Check if the object is on the specified layer.":"检查对象是否在指定的层上。","_PARAM0_ is on layer _PARAM1_":"_PARAM0_ 位于层 _PARAM1_","Check if an object is visible.":"检查一个对象是否可见。","_PARAM0_ is visible (not marked as hidden)":"_PARAM0_ 是可见的(未标记为隐藏)","Object is stopped (no forces applied on it)":"对象已停止 (没有适用于它的力)","Check if an object is not moving":"检查一个对象是否在移动","_PARAM0_ is stopped":"_PARAM0_ 已停止","Speed (from forces)":"速度(来自力)","Compare the overall speed of an object":"比较对象整体的速度","the overall speed":"总速度","Angle of movement (using forces)":"移动角度 (使用力)","Compare the angle of movement of an object according to the forces applied on it.":"根据施加在物体上的力来比较物体的运动角度。","Angle of movement of _PARAM0_ is _PARAM1_ (tolerance: _PARAM2_ degrees)":"_PARAM0_ 的移动角度是 _PARAM1_ (公差: _PARAM2_ 度)","Angle of movement of _PARAM0_ is _PARAM1_ ± _PARAM2_°":"_PARAM0_ 的移动角度为 _PARAM1_ ± _PARAM2_°","The boolean value of variable _PARAM1_ of object _PARAM0_ is _PARAM2_":"对象 _PARAM0_ 的变量 _PARAM1_ 的布尔值是 _PARAM2_","Add value to object array variable":"向对象数组变量添加值","Adds a text (string) to the end of an object array variable.":"在对象数组变量的末尾添加文本 (字符串)。","Add value _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"将值 _PARAM2_ 添加到 _PARAM0_ 的数组变量 _PARAM1_","Adds a number to the end of an object array variable.":"将一个数字添加到对象数组变量的末尾。","Adds a boolean to the end of an object array variable.":"在对象数组变量的末尾添加布尔值。","Adds an existing variable to the end of an object array variable.":"将现有变量添加到对象数组变量的结尾。","Add variable _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"将变量 _PARAM2_ 添加到 _PARAM0_ 的数组变量 _PARAM1_","The content of the object variable will *be copied* and added at the end of the array.":"对象变量的内容将*被复制*并添加到数组的末尾。","Add text _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"将文本 _PARAM2_ 添加到 _PARAM0_ 的数组变量 _PARAM1_","Add number _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"将数字 _PARAM2_ 添加到 _PARAM0_ 的数组变量 _PARAM1_","Add boolean _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"将布尔值 _PARAM2_ 添加到 _PARAM0_ 的数组变量 _PARAM1_","Removes a variable at the specified index of an object array variable.":"在对象数组变量的指定索引处删除变量","Remove variable at index _PARAM2_ from array variable _PARAM1_ of _PARAM0_":"从 _PARAM0_ 的数组变量 _PARAM1_ 移除索引 _PARAM2_ 的变量","Compare the number of children in an object array variable.":"比较对象数组变量中子项的数量。","The number of children in the array variable _PARAM1_":"数组变量 _PARAM1_ 中的子级数","Get the value of the first element of an object array variable, if it is a text (string) variable.":"获取对象数组变量的第一个元素的值,如果它是文本(字符串) 变量。","Get the value of the first element of an object array variable, if it is a number variable.":"获取对象数组变量的第一个元素的值,如果它是一个数字变量。","Get the value of the last element of an object array variable, if it is a text (string) variable.":"获取对象数组变量的最后一个元素的值,如果它是文本(字符串) 变量。","Get the value of the last element of an object array variable, if it is a number variable.":"获取对象数组变量的最后一个元素的值,如果它是一个数字变量。","Behavior activated":"行为是激活的","Check if the behavior is activated for the object.":"检查对象的行为是否被激活。","Behavior _PARAM1_ of _PARAM0_ is activated":"_PARAM0_ 的行为 _PARAM1_ 是激活的","De/activate a behavior":"禁/激活 一个行为","De/activate the behavior for the object.":"禁/激活 对象的行为","Activate behavior _PARAM1_ of _PARAM0_: _PARAM2_":"激活 _PARAM0_ 的行为 _PARAM1_ : _PARAM2_","Activate?":"激活的?","Add a force to move toward an object":"添加一个力移动向某对象","Add a force to an object to make it move toward another.":"添加力到一个对象使其移动向另一个对象","Move _PARAM0_ toward _PARAM1_ with _PARAM3_ force of _PARAM2_ pixels":"将 _PARAM0_ 移动到 _PARAM1_ 和 _PARAM3_ 力的 _PARAM2_ 像素","Target Object":"目标对象","Add a force to move around an object":"添加一个力移动到某对象附近","Add a force to an object to make it rotate around another.\nNote that the movement is not precise, especially if the speed is high.\nTo position an object around a position more precisely, use the actions in category \"Position\".":"给物体增加一个力量使其围绕另一个物体旋转。\n请注意,移动速度并不精确,特别是在速度很高的情况下。\n要更精确地将物体置于某个位置周围,请使用“位置”类别中的动作。","Rotate _PARAM0_ around _PARAM1_ at _PARAM2_ deg/sec and _PARAM3_ pixels away":"旋转 _PARAM0_ 到 _PARAM1_ 的 _PARAM3_ 附近,速度 _PARAM2_","Rotate around this object":"围绕旋转到此对象","Speed (in degrees per second)":"速度(度每秒)","Distance (in pixels)":"距离 ( 以像素为单位 )","Put the object around another":"将该对象放在另一个对象附近","Position an object around another, with the specified angle and distance. The center of the objects are used for positioning them.":"将对象放置在另一个对象周围,指定角度和距离。对象的中心被用来定位它们。","Put _PARAM0_ around _PARAM1_, with an angle of _PARAM3_ degrees and _PARAM2_ pixels distance.":"将 _PARAM0_ 放在 _PARAM1_ 周围,角度为 _PARAM3_ 度,距离为 _PARAM2_ 像素。","\"Center\" Object":"「中心」对象","Separate objects":"远离对象","Move an object away from another using their collision masks.\nBe sure to call this action on a reasonable number of objects\nto avoid slowing down the game.":"使用物体的碰撞遮罩确保二者不重叠,适用于障碍物、墙壁、地面等。\n确保在合理的物体上调用这个动作\n以避免放慢游戏速度。","Move _PARAM0_ away from _PARAM1_ (only _PARAM0_ will move)":"移动 _PARAM0_ 远离 _PARAM1_ (仅 _PARAM0_ 被移动)","Objects (won't move)":"对象(不会移动)","Ignore objects that are touching each other on their edges, but are not overlapping (default: no)":"忽略在其边缘相互触摸但不重叠的对象 (默认:否)","Point inside object":"对象内点","Test if a point is inside the object collision masks.":"测试某点是否在对象碰撞遮罩内。","_PARAM1_;_PARAM2_ is inside _PARAM0_":"_PARAM1_; _PARAM2_ 在 _PARAM0_ 内部","X position of the point":"点的 X 位置","Y position of the point":"点的 Y 位置","The cursor/touch is on an object":"光标/触摸在对象上","Test if the cursor is over an object, or if the object is being touched.":"测试游标是否超过对象,或对象是否被触摸。","The cursor/touch is on _PARAM0_":"光标/触摸在 _PARAM0_ 上","Accurate test (yes by default)":"精确检测(默认yes)","Value of an object timer":"对象计时器的值","Test the elapsed time of an object timer.":"测试对象计时器经过的时间。","The timer _PARAM1_ of _PARAM0_ is greater than _PARAM2_ seconds":"_PARAM0_ 的计时器 _PARAM1_ 大于_PARAM2_ 秒","Compare the elapsed time of an object timer. This condition doesn't start the timer.":"比较对象计时器的运行时间。此条件不启动计时器。","The timer _PARAM1_ of _PARAM0_ _PARAM2_ _PARAM3_ seconds":"_PARAM0_ _PARAM2_ _PARAM3_ 秒的计时器 _PARAM1_","Object timer paused":"对象计时器已暂停","Test if specified object timer is paused.":"测试是否暂停指定对象计时器。","The timer _PARAM1_ of _PARAM0_ is paused":"_PARAM0_ 的计时器 _PARAM1_ 已暂停","Start (or reset) an object timer":"开始(或重置) 对象计时器","Reset the specified object timer, if the timer doesn't exist it's created and started.":"重置指定的对象计时器,如果计时器不存在,则创建并启动它。","Start (or reset) the timer _PARAM1_ of _PARAM0_":"开始 (或重置) _PARAM0_ 的计时器 _PARAM1_","Pause an object timer":"暂停对象计时器","Pause an object timer.":"暂停对象计时器。","Pause timer _PARAM1_ of _PARAM0_":"暂停_PARAM0_的计时器 _PARAM1_","Unpause an object timer":"取消暂停对象计时器","Unpause an object timer.":"取消暂停对象计时器。","Unpause timer _PARAM1_ of _PARAM0_":"取消暂停_PARAM0_的计时器_PARAM1_","Delete an object timer":"删除对象计时器","Delete an object timer from memory.":"从内存中删除对象计时器。","Delete timer _PARAM1_ of _PARAM0_ from memory":"从内存中删除_PARAM0_的计时器 _PARAM1_","X position of the object":"对象的 X 位置","Y position of the object":"对象的 Y 位置","Current angle, in degrees, of the object. For 3D objects, this is the angle around the Z axis.":"对象的当前角度(以度为单位)。对于 3D 对象,这是围绕 Z 轴的角度。","X coordinate of the sum of forces":"力之和的X 坐标","Y coordinate of the sum of forces":"力之和的Y坐标","Angle of the sum of forces":"力之和的角度","Angle of the sum of forces (in degrees)":"力总和的角度(以度为单位)","Length of the sum of forces":"力之和的长度","Width of the object":"对象的宽度","Height of the object":"对象的高度","Z-order of an object":"对象的 Z 顺序","Distance between two objects":"两个物体之间的距离","Square distance between two objects":"两个对象之间的平方距离","Distance between an object and a position":"对象和位置之间的距离","Square distance between an object and a position":"对象和位置之间的平方距离","Number value of an object variable":"对象变量的数值","Number of children in an object array or structure variable":"对象数组或结构变量中的子项数","Text of an object variable":"对象变量的文本","Object timer value":"对象计时器值","Angle between two objects":"两个对象之间的角度","Compute the angle between two objects (in degrees). If you need the angle to an arbitrary position, use AngleToPosition.":"计算两个物体之间的角度(以度为单位)。如果你需要一个任意位置的角度,使用 AngleToposition。","Compute the X position when given an angle and distance relative to the starting object. This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"给定相对于起始对象的角度和距离,计算 X 位置。也被称为将 2D 矢量从极坐标转化为直角坐标。","Compute the Y position when given an angle and distance relative to the starting object. This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"给定相对于起始对象的角度和距离,计算 Y 位置。也被称为将 2D 矢量从极坐标转化为直角坐标。","Angle between an object and a position":"对象和位置之间的角度","Compute the angle between the object center and a \"target\" position (in degrees). If you need the angle between two objects, use AngleToObject.":"计算物体中心和“目标”位置之间的角度(以度为单位)。如果需要两个对象之间的角度,请使用 AngleToObject。","Enable effect _PARAM1_ on _PARAM0_: _PARAM2_":"在_PARAM0_上启用_PARAM1_ 效果: _PARAM2_","Set _PARAM2_ to _PARAM3_ for effect _PARAM1_ of _PARAM0_":"将 _PARAM2_ 设置为 _PARAM3_ 以获取_PARAM0_ 的 _PARAM1_ 效果","Enable _PARAM2_ for effect _PARAM1_ of _PARAM0_: _PARAM3_":"启用 _PARAM2_ 对_PARAM0_ 的 _PARAM1_ 效果: _PARAM3_","Effect _PARAM1_ of _PARAM0_ is enabled":"_PARAM0_ 的特效 _PARAM1_ 已启用","Include in parent collision mask":"包含在父碰撞遮罩中","Include or exclude a child from its parent collision mask.":"在其父级碰撞遮罩中包含或排除子级。","Include _PARAM0_ in parent object collision mask: _PARAM1_":"在父对象碰撞遮罩中包含 _PARAM0_:_PARAM1_","Create an object":"创建一个对象","Create an instance of the object at the specified position.The created object instance will be available for the next actions and sub-events.":"在指定位置创建对象实例。创建的对象实例将在接下来的操作和子事件中可用。","Create object _PARAM1_ at position _PARAM2_;_PARAM3_ (layer: _PARAM4_)":"在位置_PARAM2_;_PARAM3_ 创建对象 _PARAM1_ (图层: _PARAM4_)","Object to create":"要创建的对象","Create an object from its name":"从对象的名字创建一个对象","Among the objects of the specified group, this action will create the object with the specified name.":"在指定组的对象中,此操作将创建具有指定名称的对象。","Among objects _PARAM1_, create object named _PARAM2_ at position _PARAM3_;_PARAM4_ (layer: _PARAM5_)":"在对象_PARAM1_中, 在位置_PARAM3_;_PARAM4_ (层: _PARAM5_)","Group of potential objects":"潜在对象组","Group containing objects that can be created by the action.":"包含可以通过该动作创建的对象组.","Name of the object to create":"要创建的对象名称","Text representing the name of the object to create. If no objects with this name are found in the group, no object will be created.":"代表要创建的对象名称的文本。如果没有在组中找到具有此名称的对象,将不会创建对象。","Pick all object instances":"选择所有物体实例","Pick all instances of the specified object(s). When you pick all instances, the next conditions and actions of this event work on all of them.":"选择指定对象的所有实例。当您选择所有实例时,此事件的下一个条件和动作都适用于它们。","Pick all instances of _PARAM1_":"选择 _PARAM1_ 的所有实例","Pick a random object":"挑选一个随机对象","Pick one instance from all the specified objects. When an instance is picked, the next conditions and actions of this event work only on that object instance.":"从所有指定物体中选择一个实例。当选择一个实例时,此事件的下一个条件和操作仅适用于该物体实例。","Pick a random _PARAM1_":"挑选一个随机 _PARAM1_","Pick nearest object":"挑选最近的对象","Pick the instance of this object that is nearest to the specified position.":"选择与指定位置最近的此对象实例。","Pick the _PARAM0_ that is nearest to _PARAM1_;_PARAM2_":"选择 _PARAM0_ 距离_PARAM1_;_PARAM2_","Apply movement to all objects":"将移动应用于所有对象","Moves all objects according to the forces they have. GDevelop calls this action at the end of the events by default.":"根据所拥有的力量移动所有对象。 GDevelop默认在事件结束时调用这个动作。","An object is moving toward another (using forces)":"一个对象正在向另一个对象移动(使用力)","Check if an object moves toward another.\nThe first object must move.":"检测一个对象是否朝向另一个对象移动.\n第一个对象必须移动.","_PARAM0_ is moving toward _PARAM1_":"_PARAM0_ 向 _PARAM1_ 移动","Compare the distance between two objects.\nIf condition is inverted, only objects that have a distance greater than specified to any other object will be picked.":"比较两个对象之间的距离.\n如果条件反转,仅拥有距离比另一个大的对象会被挑选","_PARAM0_ distance to _PARAM1_ is below _PARAM2_ pixels":"_PARAM0_ 到 _PARAM1_ 的距离低于 _PARAM2_ 像素","Pick the instance of this object that is nearest to the specified position. If the condition is inverted, the instance farthest from the specified position is picked instead.":"选择与指定位置最近的此对象实例。如果条件被反转,则选择离指定位置最远的实例。","Number of objects":"对象数目","Count how many of the specified objects are currently picked, and compare that number to a value. If previous conditions on the objects have not been used, this condition counts how many of these objects exist in the current scene.":"计算当前选取的指定对象的数量,并将该数量与一个值进行比较。 如果对象上先前的条件未被使用,此条件计算当前场景中存在的这些对象的数量。","the number of _PARAM0_ objects":"_PARAM0_ 对象的数量","Number of object instances on the scene":"场景中的对象实例数","the number of instances of the specified objects living on the scene":"场景中指定对象的实例数","the number of _PARAM1_ living on the scene":"出现在场景上的 _PARAM1_ 的数量","Number of object instances currently picked":"当前选择的对象实例数","the number of instances picked by the previous conditions (or actions)":"被先前条件 (或动作) 选择的实例数量","the number of _PARAM0_ currently picked":"当前选择的 _PARAM0_ 的数量","Test the collision between two objects using their collision masks.":"使用碰撞遮罩测试两个对象之间的碰撞。","_PARAM0_ is in collision with _PARAM1_":"_PARAM0_ 与 _PARAM1_ 碰撞","An object is turned toward another":"一个对象转向另一个","Check if an object is turned toward another":"检查对象是否已转向另一个对象。","_PARAM0_ is rotated towards _PARAM1_":"_PARAM0_ 转向到 _PARAM1_","Name of the object":"对象的名称","Name of the second object":"第二个对象的名称","Angle of tolerance, in degrees (0: minimum tolerance)":"公差角度,度(0:最小公差)","_PARAM0_ is turned toward _PARAM1_ ± _PARAM2_°":"_PARAM0_ 朝向 _PARAM1_ ± _PARAM2_°","Raycast":"射线广播","Sends a ray from the given source position and angle, intersecting the closest object.\nThe intersected object will become the only one taken into account.\nIf the condition is inverted, the object to be intersected will be the farthest one within the ray radius.":"从给定的源位置和角度发送一条射线,与最近的对象相交。\n相交的对象将成为唯一考虑的对象。\n如果条件反转,要相交的对象将是射线半径内最远的对象.","Cast a ray from _PARAM1_;_PARAM2_, angle: _PARAM3_ and max distance: _PARAM4_px, against _PARAM0_, and save the result in _PARAM5_, _PARAM6_":"从 _PARAM1_; _PARAM2_, 角度: _PARAM3_ 和最大距离: _PARAM4_px, 到 _PARAM0_, 并将结果保存到 _PARAM5_, _PARAM6_","Objects to test against the ray":"要对射线测试的对象","Ray source X position":"射线源 X 位置","Ray source Y position":"射线源 Y 位置","Ray angle (in degrees)":"发射角度(度)","Ray maximum distance (in pixels)":"射线最大距离(像素)","Result X position scene variable":"结果 X 位置场景变量","Scene variable where to store the X position of the intersection. If no intersection is found, the variable won't be changed.":"场景变量存储交叉路由的 X 位置。如果找不到交点,则变量不会被更改。","Result Y position scene variable":"结果 Y 位置场景变量","Scene variable where to store the Y position of the intersection. If no intersection is found, the variable won't be changed.":"场景变量存储交叉路由的 Y 位置。如果找不到交点,则变量不会被更改。","Raycast to position":"光线投射到位置","Sends a ray from the given source position to the final point, intersecting the closest object.\nThe intersected object will become the only one taken into account.\nIf the condition is inverted, the object to be intersected will be the farthest one within the ray radius.":"从给定的源位置向最终点发送一条射线,与最近的对象相交。\n相交的对象将成为唯一考虑的对象。\n如果条件反转,要相交的对象将是范围内最远的对象射线半径。","Cast a ray from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ against _PARAM0_, and save the result in _PARAM5_, _PARAM6_":"从 _PARAM1_; _PARAM2_ 到 _PARAM3_; _PARAM4_ 和 _PARAM0_ 施放射线,并将结果保存在_PARAM5_, _PARAM6_","Ray target X position":"射线目标 X 位置","Ray target Y position":"射线目标 Y 位置","Count the number of the specified objects being currently picked in the event":"计数当前在事件中选择的对象的数量","Return the name of the object":"返回对象的名称","Object layer":"对象图层","Return the name of the layer the object is on":"返回对象所在图层的名称","Set _PARAM0_ as : ":"设置 _PARAM0_ 为 : ","Change : ":"更改 : ","Change of _PARAM0_: ":"更改_PARAM0_的 : ","Change : ":"更改 : ","_PARAM0_ is ":"_PARAM0_ 是 ","":"","Value to compare":"比较数值"," of _PARAM0_ ":" of _PARAM0_ "," ":" ","Smooth the image":"平滑图像","Preload as sound":"预加载为声音","Loads the fully decoded file into cache, so it can be played right away as Sound with no further delays.":"将完全解码的文件加载到缓存中,这样就可以立即将其作为声音播放,而不会有进一步的延迟。","Preload as music":"预加载为音乐","Prepares the file for immediate streaming as Music (does not wait for complete download).":"将文件准备为即时流媒体播放音乐(不要等待完整下载)。","Preload in cache":"在缓存中预加载","Loads the complete file into cache, but does not decode it into memory until requested.":"将完整的文件加载到缓存中,但在请求之前不会将其解码到内存中。","Disable preloading at game startup":"在游戏启动时禁用预加载","The expression has extra character at the end that should be removed (or completed if your expression is not finished).":"该表达式在结尾有额外的字符,应删除(或如果您的表达式未完成则完成)。","Missing a closing parenthesis. Add a closing parenthesis for each opening parenthesis.":"缺少一个封闭括号。为每个开头括号添加一个封闭括号。","Missing a closing bracket. Add a closing bracket for each opening bracket.":"缺少一个结尾括号。为每个开头括号添加一个结尾括号。","A name should be entered after the dot.":"应该在点后面输入一个名称。","A dot or bracket was expected here.":"这里需要一个点或括号。","An opening parenthesis was expected here to call a function.":"预期这里有一个开头括号来调用函数。","The list of parameters is not terminated. Add a closing parenthesis to end the parameters.":"参数列表未终止。添加一个闭合括号以结束参数。","You've used an operator that is not supported. Operator should be either +, -, / or *.":"您已经使用了不受支持的运算符。操作员应该是 +, -, / 或 *。","You've used an \"unary\" operator that is not supported. Operator should be either + or -.":"您使用了不受支持的“一元”运算符。运算符应为+或-。","You've used an operator that is not supported. Only + can be used to concatenate texts.":"您已经使用了不支持的运算符。只有+ 可以用来连接文本。","Operators (+, -, /, *) can't be used with an object name. Remove the operator.":"运算符 (+, -, /, *) 不能使用对象名称。删除操作者。","Operators (+, -, /, *) can't be used in variable names. Remove the operator from the variable name.":"运算符 (+, -, /, *) 不能用在变量名称中。从变量名称中删除操作员。","You've used an operator that is not supported. Only + can be used to concatenate texts, and must be placed between two texts (or expressions).":"您已经使用了不受支持的运算符。只有+ 可以用来合并文本,且必须放在两个文本之间(或表达式)。","Operators (+, -) can't be used with an object name. Remove the operator.":"运算符(+, -) 不能使用对象名称。删除操作者。","Operators (+, -) can't be used in variable names. Remove the operator from the variable name.":"运算符 (+, -) 不能用在变量名称中。从变量名称中删除运算符。","You entered a number, but a text was expected (in quotes).":"您输入了一个数字,但需要一个文本(引号)。","You entered a number, but this type was expected:":"您输入了一个数字,但需要这个类型:","You entered a text, but a number was expected.":"您输入了一个文本,但预计会有一个数字。","You entered a text, but this type was expected:":"您输入了一个文本,但需要这个类型:","No object, variable or property with this name found.":"未找到具有此名称的对象、变量或属性。","You entered a variable, but this type was expected:":"您输入了一个变量,但这种类型是预期的:","You can't use the brackets to access an object variable. Use a dot followed by the variable name, like this: `MyObject.MyVariable`.":"不能使用方括号访问对象变量。在变量名后面加一个点,例如: ‘ MyObject.Myvariable’。","You must wrap your text inside double quotes (example: \"Hello world\").":"您必须把您的文本装在半角双引号内(例如:\"Hello world\")。","You must enter a number.":"您必须输入一个数字。","You must enter a number or a text, wrapped inside double quotes (example: \"Hello world\"), or a variable name.":"您必须输入一个数字或文本,包装在双引号 (例如:\"Hello world\"),或者输入一个变量名称。","You've entered a name, but this type was expected:":"您输入了一个名字,但是需要这个类型:","You must enter a number or a valid expression call.":"您必须输入一个数字或有效的表达式调用。","You must enter a text (between quotes) or a valid expression call.":"您必须输入文本(在引用内) 或有效的表达式调用。","You must enter a variable name.":"请输入变量名称。","You must enter a valid object name.":"请输入有效对象名称。","You must enter a valid expression.":"请输入有效的表达式。","This variable has the same name as a property. Consider renaming one or the other.":"此变量与属性同名。请考虑重命名其中一个或另一个。","This variable has the same name as a parameter. Consider renaming one or the other.":"此变量与参数同名。请考虑重命名其中一个或另一个。","No variable with this name found.":"未找到具有此名称的变量。","Undefined":"未定义","Dimensionless":"无尺寸","degree":"度","second":"秒","pixel":"像素","pixel per second":"像素每秒","How much distance is covered per second.":"每秒经过多少距离。","pixel per second, per second":"像素每秒,每秒","How much speed is gained (or lost) per second.":"每秒增加(或减少)多少速度。","Force (in Newton)":"力(牛顿)","meter kilogram per second, per second":"米千克每秒,每秒","A unit to measure forces.":"测量力的单位。","Angular speed":"角速度","degree per second":"每秒度数","How much angle is covered per second.":"每秒覆盖多少角度。","Some extensions could not be loaded. Expected {0} JS extension modules, got {1}. Please check the console for more details.":function(a){return["部分扩展无法加载。预期 ",a("0")," 个 JS 扩展模块,实际加载 ",a("1")," 个。请查看控制台了解更多详情。"]},"Desktop window options":"桌面窗口选项","Transparent native window":"透明原生窗口","Creates the Electron window with native transparency enabled.":"创建启用原生透明效果的 Electron 窗口。","Frameless window":"无边框窗口","Transparent game background":"透明游戏背景","Disable window shadow":"禁用窗口阴影","Disable hardware acceleration":"禁用硬件加速","Use only as a compatibility option for transparent windows.":"仅作为透明窗口的兼容性选项使用。","Add keyframe":"添加关键帧","Add keyframe (K)":"添加关键帧 (K)","Add keyframe (K/S)":"添加关键帧 (K/S)","Add keyframes for all tracks":"写入全部轨道帧","Add keyframes for changed tracks":"写入已变化轨道帧","Add keyframes for all tracks (N)":"写入全部轨道帧 (N)","Add keyframes for changed tracks (M)":"写入已变化轨道帧 (M)","Delete selected keyframe":"删除选中的关键帧","Auto edit":"自动编辑","Calculating...":"计算中...","Off":"关闭","On":"开启","The AI tried to use a function of the editor that is unknown.":"AI 尝试使用一个未知的编辑器功能。","Timeline Sequencer":"时间轴序列器","Play Construct-style timeline animations for scene objects with keyframes, easing, markers, looping and event controls.":"为场景对象播放类似 Construct 的时间轴动画,支持关键帧、缓动、标记、循环和事件控制。","Create and play keyframed timelines without replacing Sprite animations.":"创建并播放关键帧时间轴动画,而不会替换精灵动画。","timeline, animation, keyframes, sequencer":"时间轴, 动画, 关键帧, 序列器","Timelines":"时间轴","Serialized project timelines used by the editor.":"编辑器使用的项目时间轴序列化数据。","Register timelines from JSON":"从 JSON 注册时间轴","Register one or more timelines from a JSON string.":"从 JSON 字符串注册一个或多个时间轴。","Register timelines from _PARAM1_":"从 _PARAM1_ 注册时间轴","Timeline JSON":"时间轴 JSON","Play a timeline":"播放时间轴","Play a timeline from its current beginning.":"从当前起点播放时间轴。","Play timeline _PARAM1_":"播放时间轴 _PARAM1_","Timeline name":"时间轴名称","Play a timeline from time":"从指定时间播放时间轴","Play a timeline from a given time in seconds.":"从给定秒数开始播放时间轴。","Play timeline _PARAM1_ from _PARAM2_ seconds":"从 _PARAM2_ 秒播放时间轴 _PARAM1_","Pause a timeline":"暂停时间轴","Pause a timeline that is currently playing.":"暂停当前正在播放的时间轴。","Pause timeline _PARAM1_":"暂停时间轴 _PARAM1_","Resume a timeline":"继续时间轴","Resume a paused timeline.":"继续已暂停的时间轴。","Resume timeline _PARAM1_":"继续时间轴 _PARAM1_","Stop a timeline":"停止时间轴","Stop a timeline and keep objects at their current values.":"停止时间轴,并让对象保持当前数值。","Stop timeline _PARAM1_":"停止时间轴 _PARAM1_","Set timeline time":"设置时间轴时间","Move a timeline to a given time in seconds and apply its values.":"将时间轴移动到给定秒数,并应用该时间点的数值。","Set timeline _PARAM1_ time to _PARAM2_ seconds":"将时间轴 _PARAM1_ 的时间设置为 _PARAM2_ 秒","Set timeline speed":"设置时间轴速度","Change the playback speed of a timeline.":"修改时间轴的播放速度。","Set timeline _PARAM1_ speed to _PARAM2_":"将时间轴 _PARAM1_ 的速度设置为 _PARAM2_","Set timeline looping":"设置时间轴循环","Enable or disable looping for a timeline.":"启用或禁用时间轴循环。","Set timeline _PARAM1_ looping: _PARAM2_":"设置时间轴 _PARAM1_ 循环:_PARAM2_","Bind objects to a timeline target":"将对象绑定到时间轴目标","Bind picked objects to a runtime target name used by timelines.":"将选中的对象绑定到时间轴使用的运行时目标名称。","Bind _PARAM2_ to timeline target _PARAM1_":"将 _PARAM2_ 绑定到时间轴目标 _PARAM1_","Binding name":"绑定名称","Timeline is playing":"时间轴正在播放","Check if a timeline is currently playing.":"检查时间轴当前是否正在播放。","Timeline _PARAM1_ is playing":"时间轴 _PARAM1_ 正在播放","Timeline is paused":"时间轴已暂停","Check if a timeline is paused.":"检查时间轴是否已暂停。","Timeline _PARAM1_ is paused":"时间轴 _PARAM1_ 已暂停","Timeline has finished":"时间轴已结束","Check if a timeline has finished playing.":"检查时间轴是否已经播放结束。","Timeline _PARAM1_ has finished":"时间轴 _PARAM1_ 已结束","Timeline reached marker":"时间轴到达标记","Check if a timeline reached a marker during this frame.":"检查时间轴是否在这一帧到达了标记。","Timeline _PARAM1_ reached marker _PARAM2_":"时间轴 _PARAM1_ 到达标记 _PARAM2_","Marker name":"标记名称","Timeline time is greater than":"时间轴时间大于","Compare the current timeline time, in seconds.":"比较当前时间轴时间(秒)。","Timeline _PARAM1_ time is greater than _PARAM2_ seconds":"时间轴 _PARAM1_ 的时间大于 _PARAM2_ 秒","Timeline progress is greater than":"时间轴进度大于","Compare the timeline progress from 0 to 1.":"比较 0 到 1 之间的时间轴进度。","Timeline _PARAM1_ progress is greater than _PARAM2_":"时间轴 _PARAM1_ 的进度大于 _PARAM2_","Timeline time":"时间轴时间","Return the current timeline time in seconds.":"返回当前时间轴时间(秒)。","Timeline duration":"时间轴持续时间","Return the timeline duration in seconds.":"返回时间轴持续时间(秒)。","Timeline progress":"时间轴进度","Return the timeline progress from 0 to 1.":"返回 0 到 1 之间的时间轴进度。","Timeline speed":"时间轴速度","Return the timeline playback speed.":"返回时间轴播放速度。","Choose a timeline":"选择时间轴","Choose a timeline target":"选择时间轴目标"}}; diff --git a/newIDE/app/src/locales/zh_TW/extension-messages.js b/newIDE/app/src/locales/zh_TW/extension-messages.js index 657afd50dbb8..f2daccdb33ff 100644 --- a/newIDE/app/src/locales/zh_TW/extension-messages.js +++ b/newIDE/app/src/locales/zh_TW/extension-messages.js @@ -1 +1 @@ -/* eslint-disable */module.exports={languageData:{"plurals":function(n,ord){if(ord)return"other";return"other"}},messages:{"Advanced HTTP":"\u9032\u968E HTTP","An extension to create HTTP requests with more advanced settings than the built-in \"Network request\" action, like specifying headers or bypassing CORS.":"\u4E00\u500B\u64F4\u5C55\uFF0C\u7528\u65BC\u5275\u5EFAHTTP\u8ACB\u6C42\uFF0C\u5176\u8A2D\u7F6E\u6BD4\u5167\u7F6E\u7684\"\u7DB2\u7D61\u8ACB\u6C42\"\u64CD\u4F5C\u66F4\u9032\u968E\uFF0C\u4F8B\u5982\u6307\u5B9A\u6A19\u982D\u6216\u7E5E\u904ECORS\u3002","Network":"\u7DB2\u8DEF","Creates a template for your request. All requests must be made from a request template.":"\u5EFA\u7ACB\u4E00\u500B\u60A8\u7684\u8ACB\u6C42\u6A21\u677F\u3002\u6240\u6709\u8ACB\u6C42\u5FC5\u9808\u5F9E\u8ACB\u6C42\u6A21\u677F\u767C\u9001\u3002","Create a new request template":"\u5EFA\u7ACB\u65B0\u7684\u8ACB\u6C42\u6A21\u677F","Create request template _PARAM1_ with URL _PARAM2_":"\u4F7F\u7528URL\u70BA_PARAM2_\u5EFA\u7ACB\u8ACB\u6C42\u6A21\u677F_PARAM1_","New request template name":"\u65B0\u7684\u8ACB\u6C42\u6A21\u677F\u540D\u7A31","URL the request will be sent to":"\u8ACB\u6C42\u5C07\u88AB\u767C\u9001\u5230\u7684URL","Creates a new request template with all the attributes from an existing one.":"\u5F9E\u73FE\u6709\u7684\u6A21\u677F\u5275\u5EFA\u4E00\u500B\u65B0\u7684\u8ACB\u6C42\u6A21\u677F\uFF0C\u5305\u542B\u6240\u6709\u5C6C\u6027\u3002","Copy a request template":"\u8907\u88FD\u8ACB\u6C42\u6A21\u677F","Create request _PARAM1_ from template _PARAM2_":"\u5F9E\u6A21\u677F_PARAM2_\u5275\u5EFA\u8ACB\u6C42_PARAM1_","Request to copy":"\u8981\u8907\u88FD\u7684\u8ACB\u6C42","The HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"\u8ACB\u6C42\u7684HTTP\u65B9\u6CD5\u3002\u5982\u679C\u4E0D\u78BA\u5B9A\u61C9\u8A72\u9078\u64C7\u54EA\u500B\uFF0C\u5247GET\u662F\u9ED8\u8A8D\u503C\uFF0C\u60A8\u61C9\u8A72\u4F7F\u7528\u5B83\u3002\u5C0D\u65BCREST API\u7AEF\u9EDE\u7684\u8ACB\u6C42\uFF0C\u6839\u64DA\u65B9\u6CD5\u4E0D\u540C\u53EF\u80FD\u6703\u7522\u751F\u4E0D\u540C\u7684\u6548\u679C - \u8ACB\u53C3\u8003\u60A8\u8ABF\u7528\u7684API\u7684\u6587\u6A94\uFF0C\u4EE5\u4E86\u89E3\u61C9\u4F7F\u7528\u7684\u9069\u7576\u65B9\u6CD5\u3002","HTTP Method (Verb)":"HTTP\u65B9\u6CD5\uFF08\u52D5\u8A5E\uFF09","Set HTTP method of request _PARAM1_ to _PARAM2_":"\u5C07\u8ACB\u6C42_PARAM1_\u7684HTTP\u65B9\u6CD5\u8A2D\u7F6E\u70BA_PARAM2_","Request template name":"\u8ACB\u6C42\u6A21\u677F\u540D\u7A31","HTTP Method":"HTTP\u65B9\u6CD5","the HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"\u8ACB\u6C42\u7684HTTP\u65B9\u6CD5\u3002\u5982\u679C\u4E0D\u78BA\u5B9A\u61C9\u8A72\u9078\u64C7\u54EA\u500B\uFF0C\u5247GET\u662F\u9ED8\u8A8D\u503C\uFF0C\u60A8\u61C9\u8A72\u4F7F\u7528\u5B83\u3002\u5C0D\u65BCREST API\u7AEF\u9EDE\u7684\u8ACB\u6C42\uFF0C\u6839\u64DA\u65B9\u6CD5\u4E0D\u540C\u53EF\u80FD\u6703\u7522\u751F\u4E0D\u540C\u7684\u6548\u679C - \u8ACB\u53C3\u8003\u60A8\u8ABF\u7528\u7684API\u7684\u6587\u6A94\uFF0C\u4EE5\u4E86\u89E3\u61C9\u4F7F\u7528\u7684\u9069\u7576\u65B9\u6CD5\u3002","HTTP method of request _PARAM1_":"\u8ACB\u6C42_PARAM1_\u7684HTTP\u65B9\u6CD5","Defines to what extent the results of the request is can/must be cached. When cached, instead of sending a request to the server, the browser will avoid making a real request to the server and will use a previous response given by the server for the same request.\nThe server also has a say in this via the Cache-Control header.":"\u5B9A\u7FA9\u8ACB\u6C42\u7D50\u679C\u53EF\u4EE5/\u5FC5\u9808\u7DE9\u5B58\u7684\u7A0B\u5EA6\u3002\u7576\u7DE9\u5B58\u6642\uFF0C\u700F\u89BD\u5668\u5C07\u907F\u514D\u5411\u4F3A\u670D\u5668\u767C\u9001\u8ACB\u6C42\uFF0C\u4E26\u5C07\u4F7F\u7528\u4F3A\u670D\u5668\u70BA\u76F8\u540C\u8ACB\u6C42\u7D66\u51FA\u7684\u5148\u524D\u97FF\u61C9\uFF0C\u800C\u4E0D\u662F\u5411\u4F3A\u670D\u5668\u767C\u51FA\u771F\u6B63\u7684\u8ACB\u6C42\u3002\u4F3A\u670D\u5668\u9084\u53EF\u4EE5\u901A\u904ECache-Control\u6A19\u982D\u8AAA\u660E\u9019\u4E00\u9EDE\u3002","HTTP Caching strategy":"HTTP\u7DE9\u5B58\u7B56\u7565","Set HTTP caching strategy of request _PARAM1_ to _PARAM2_":"\u5C07\u8ACB\u6C42_PARAM1_\u7684HTTP\u7DE9\u5B58\u7B56\u7565\u8A2D\u7F6E\u70BA_PARAM2_","Learn more about what each caching strategy does [on the MDN page for cache](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache).":"\u4E86\u89E3\u6BCF\u7A2E\u7DE9\u5B58\u7B56\u7565\u7684\u66F4\u591A\u4FE1\u606F [\u5728MDN\u7DE9\u5B58\u9801\u9762\u4E0A](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache)\u3002","HTTP Caching":"HTTP\u7DE9\u5B58","HTTP caching strategy of request _PARAM1_":"\u8ACB\u6C42_PARAM1_\u7684HTTP\u7DE9\u5B58\u7B56\u7565","Sets the body of an HTTP request to a JSON representation of a structure variable.":"\u5C07HTTP\u8ACB\u6C42\u7684\u4E3B\u9AD4\u8A2D\u7F6E\u70BA\u7D50\u69CB\u8B8A\u91CF\u7684JSON\u8868\u793A\u3002","Body as JSON":"\u61C9\u5C0D\u4E3B\u9AD4\u7684JSON","Set body of request _PARAM1_ to contents of _PARAM2_ as JSON":"\u5C07\u8ACB\u6C42_PARAM1_\u7684\u4E3B\u9AD4\u8A2D\u7F6E\u70BA_PARAM2_\u7684\u5167\u5BB9\uFF0C\u4F5C\u70BAJSON","Variable with body contents":"\u5305\u542B\u4E3B\u9AD4\u5167\u5BB9\u7684\u8B8A\u6578","Sets the body of an HTTP request to a form data representation of a structure variable.":"\u5C07HTTP\u8ACB\u6C42\u7684\u4E3B\u9AD4\u8A2D\u7F6E\u70BA\u7D50\u69CB\u8B8A\u91CF\u7684\u8868\u55AE\u6578\u64DA\u8868\u793A\u3002","Body as form data":"\u61C9\u5C0D\u4E3B\u9AD4\u7684\u8868\u55AE\u6578\u64DA","Set body of request _PARAM1_ to contents of _PARAM2_ as form data":"\u5C07\u8ACB\u6C42\u7684\u4E3B\u9AD4_PARAM1_\u8A2D\u7F6E\u70BA_PARAM2_\u7684\u5167\u5BB9\u4F5C\u70BA\u8868\u55AE\u6578\u64DA","the body of the HTTP request. Contains data to send to the server, ususally in plain text, JSON or FormData format. This cannot be set for GET requests.":"HTTP\u8ACB\u6C42\u7684\u4E3B\u9AD4\u3002\u5305\u542B\u8981\u767C\u9001\u5230\u670D\u52D9\u5668\u7684\u6578\u64DA\uFF0C\u901A\u5E38\u662F\u7D14\u6587\u672C\u3001JSON\u6216FormData\u683C\u5F0F\u3002\u4E0D\u80FD\u70BAGET\u8ACB\u6C42\u8A2D\u7F6E\u3002","Body":"\u4E3B\u9AD4","body of request _PARAM1_":"\u8ACB\u6C42_PARAM1_\u7684\u4E3B\u9AD4","an HTTP header to be sent with the request.":"\u8981\u8207\u8ACB\u6C42\u4E00\u8D77\u767C\u9001\u7684HTTP\u6A19\u982D\u3002","Header":"\u6A19\u982D","HTTP header _PARAM2_ of request _PARAM1_":"\u8ACB\u6C42_PARAM1_\u7684HTTP\u6A19\u982D_PARAM2_","HTTP header name":"HTTP\u6A19\u982D\u540D\u7A31","the request template's target URL.":"\u8ACB\u6C42\u6A21\u677F\u7684\u76EE\u6A19URL\u3002","URL":"URL","the URL of request template _PARAM1_":"\u8ACB\u6C42\u6A21\u677F_PARAM1_\u7684URL","CORS prevents most external websites from being queried with the browser's HTTP client, since the browser may be authenticated on that website and as such another website would be able to impersonate the player on that other website.\nWhen the CORS Bypass is enabled, the request will be made from a server that is not authenticated anywhere and as such is not blocked by CORS, and it will share the response with your game. Note that as such, authentication cookies are ignored! If you own the REST API you are requesting, add CORS headers to your server instead of using this CORS Bypass.":"CORS\u9632\u6B62\u901A\u5E38\u4F7F\u7528\u700F\u89BD\u5668\u7684HTTP\u5BA2\u6236\u7AEF\u67E5\u8A62\u5927\u591A\u6578\u5916\u90E8\u7DB2\u7AD9\uFF0C\u56E0\u70BA\u700F\u89BD\u5668\u53EF\u80FD\u5728\u8A72\u7DB2\u7AD9\u4E0A\u9032\u884C\u8EAB\u4EFD\u9A57\u8B49\uFF0C\u56E0\u6B64\u53E6\u4E00\u500B\u7DB2\u7AD9\u80FD\u5920\u5192\u5145\u8A72\u7DB2\u7AD9\u4E0A\u7684\u73A9\u5BB6\u3002\n\u555F\u7528CORS Bypass\u5F8C\uFF0C\u8ACB\u6C42\u5C07\u5F9E\u672A\u5728\u4EFB\u4F55\u5730\u65B9\u9032\u884C\u8EAB\u4EFD\u9A57\u8B49\u7684\u670D\u52D9\u5668\u9032\u884C\uFF0C\u56E0\u6B64\u4E0D\u6703\u88ABCORS\u963B\u64CB\uFF0C\u4E26\u4E14\u5C07\u8207\u4F60\u7684\u904A\u6232\u5171\u4EAB\u97FF\u61C9\u3002\u8ACB\u6CE8\u610F\uFF0C\u8EAB\u4EFD\u9A57\u8B49cookies\u5C07\u88AB\u5FFD\u7565\uFF01\u5982\u679C\u4F60\u64C1\u6709\u6B63\u5728\u8ACB\u6C42\u7684REST API\uFF0C\u8ACB\u5728\u670D\u52D9\u5668\u4E0A\u6DFB\u52A0CORS\u6A19\u982D\uFF0C\u800C\u4E0D\u662F\u4F7F\u7528\u6B64CORS Bypass\u3002","Enable CORS Bypass":"\u555F\u7528CORS Bypass","Enable CORS Bypass for request _PARAM1_: _PARAM2_":"\u70BA\u8ACB\u6C42_PARAM1_\u555F\u7528CORS Bypass\uFF1A_PARAM2_","Enable the CORS Bypass?":"\u555F\u7528CORS Bypass\uFF1F","The CORS Bypass server is offered for free by [arthuro555](https://twitter.com/arthuro555). Consider making a [donation](https://ko-fi.com/arthuro555) to help keep the CORS Bypass server running.":"\u514D\u8CBB\u63D0\u4F9BCORS Bypass\u670D\u52D9\u5668\u7684\u662F[arthuro555](https://twitter.com/arthuro555)\u3002\u8003\u616E\u6350\u8D08(https://ko-fi.com/arthuro555)\u4EE5\u5E6B\u52A9\u4FDD\u6301CORS Bypass\u670D\u52D9\u5668\u904B\u884C\u3002","Checks whether or not CORS Bypass has been enabled for the request template.":"\u6AA2\u67E5CORS Bypass\u662F\u5426\u5DF2\u70BA\u8ACB\u6C42\u6A21\u677F\u555F\u7528\u3002","CORS Bypass enabled":"\u5DF2\u555F\u7528CORS Bypass","CORS Bypass is enabled for request _PARAM1_":"\u70BA\u8ACB\u6C42_PARAM1_\u555F\u7528\u4E86CORS Bypass","Executes the request defined by a request template.":"\u57F7\u884C\u7531\u8ACB\u6C42\u6A21\u677F\u5B9A\u7FA9\u7684\u8ACB\u6C42\u3002","Execute the request":"\u57F7\u884C\u8ACB\u6C42","Execute request _PARAM1_ and store results in _PARAM2_":"\u57F7\u884C\u8ACB\u6C42_PARAM1_\u4E26\u5C07\u7D50\u679C\u5B58\u5132\u5728_PARAM2_\u4E2D","Request to execute":"\u57F7\u884C\u8981\u6C42","Variable where to store the response to the request":"\u5B58\u5132\u8ACB\u6C42\u97FF\u61C9\u7684\u8B8A\u91CF","Checks whether the server marked the response as a success (status code 1XX/2XX), not as a failure (status code 4XX/5XX).":"\u6AA2\u67E5\u670D\u52D9\u5668\u662F\u5426\u5C07\u97FF\u61C9\u6A19\u8A18\u70BA\u6210\u529F(\u72C0\u614B\u78BC1XX/2XX)\uFF0C\u800C\u4E0D\u662F\u5931\u6557(\u72C0\u614B\u78BC4XX/5XX)\u3002","Success":"\u6210\u529F","Response _PARAM1_ indicates a success":"\u97FF\u61C9_PARAM1_\u8868\u660E\u6210\u529F","Variable containing the response":"\u5305\u542B\u97FF\u61C9\u7684\u8B8A\u91CF","the status code of the HTTP request (e.g. 200 if succeeded, 404 if not found, etc).":"HTTP \u8ACB\u6C42\u7684\u72C0\u614B\u78BC\uFF08\u4F8B\u5982\uFF0C\u6210\u529F\u70BA 200\uFF0C\u672A\u627E\u5230\u70BA 404 \u7B49\uFF09\u3002","Status code":"\u72C0\u614B\u78BC","Status code of response _PARAM1_":"\u56DE\u61C9 _PARAM1_ \u7684\u72C0\u614B\u78BC","Gets the status text for a response. For example, for a response with the status code 404, the status text will be \"Not Found\".":"\u53D6\u5F97\u56DE\u61C9\u7684\u72C0\u614B\u6587\u5B57\u3002\u4F8B\u5982\uFF0C\u5C0D\u65BC\u72C0\u614B\u78BC 404 \u7684\u56DE\u61C9\uFF0C\u72C0\u614B\u6587\u5B57\u5C07\u662F \"\u672A\u627E\u5230\"\u3002","Status text":"\u72C0\u614B\u6587\u5B57","one of the HTTP headers included in the server's response.":"\u4F3A\u670D\u5668\u56DE\u61C9\u4E2D\u5305\u542B\u7684 HTTP \u6A19\u982D\u4E4B\u4E00\u3002","Header _PARAM2_ of response _PARAM1_":"\u56DE\u61C9 _PARAM1_ \u7684\u6A19\u982D _PARAM2_","Reads the body sent by the server, and store it as a string in a variable.":"\u8B80\u53D6\u4F3A\u670D\u5668\u767C\u9001\u7684\u4E3B\u9AD4\uFF0C\u4E26\u5C07\u5176\u4F5C\u70BA\u5B57\u4E32\u5B58\u5132\u5728\u8B8A\u91CF\u4E2D\u3002","Get response body (text)":"\u7372\u53D6\u56DE\u61C9\u4E3B\u9AD4\uFF08\u6587\u5B57\uFF09","Read body of response _PARAM1_ into _PARAM2_ as text":"\u5C07\u56DE\u61C9 _PARAM1_ \u7684\u4E3B\u9AD4\u8B80\u53D6\u70BA\u6587\u5B57\uFF0C\u4E26\u5C07\u5176\u5B58\u5132\u5230 _PARAM2_ \u4E2D","Variable where to write the body contents into":"\u5C07\u4E3B\u9AD4\u5167\u5BB9\u5BEB\u5165\u7684\u8B8A\u91CF","Reads the body sent by the server, parses it as JSON and stores the resulting structure in a variable.":"\u8B80\u53D6\u4F3A\u670D\u5668\u767C\u9001\u7684\u4E3B\u9AD4\uFF0C\u5C07\u5176\u89E3\u6790\u70BA JSON\uFF0C\u4E26\u5C07\u7D50\u679C\u7D50\u69CB\u5B58\u5132\u5728\u8B8A\u91CF\u4E2D\u3002","Get response body (JSON)":"\u7372\u53D6\u56DE\u61C9\u4E3B\u9AD4\uFF08JSON\uFF09","Read body of response _PARAM1_ into _PARAM2_ as JSON":"\u5C07\u56DE\u61C9 _PARAM1_ \u7684\u4E3B\u9AD4\u8B80\u53D6\u70BA JSON\uFF0C\u4E26\u5C07\u5176\u5B58\u5132\u5230 _PARAM2_ \u4E2D","Advanced platformer movements":"\u9AD8\u7D1A\u5E73\u53F0\u904A\u6232\u8005\u52D5\u4F5C","Let platformer characters: air jump, wall jump wall sliding, coyote time and dashing.":"\u8B93\u5E73\u53F0\u904A\u6232\u8005\uFF1A\u5728\u7A7A\u4E2D\u8DF3\u8E8D\u3001\u58C1\u8DF3\u3001\u8CBC\u7246\u6ED1\u884C\u3001coyote time\u548C\u885D\u523A\u3002","Movement":"\u79FB\u52D5","Let platformer characters jump shortly after leaving a platform and also jump in mid-air.":"\u8B93\u5E73\u53F0\u904A\u6232\u89D2\u8272\u5728\u96E2\u958B\u5E73\u53F0\u5F8C\u4E0D\u4E45\u8DF3\u8E8D\uFF0C\u4E5F\u53EF\u4EE5\u5728\u7A7A\u4E2D\u8DF3\u8E8D\u3002","Coyote time and air jump":"\u88DC\u72D7\u6642\u9593\u548C\u7A7A\u4E2D\u8DF3\u8E8D","Platformer character behavior":"\u5E73\u53F0\u904A\u6232\u89D2\u8272\u884C\u70BA","Coyote time duration":"Coyote \u6642\u9593\u6301\u7E8C\u6642\u9593","Coyote time":"Coyote \u6642\u9593","Can coyote jump":"\u80FD\u5426\u4F7F\u7528\u5047\u9CF6\u8DF3","Was in the air":"\u6B63\u5728\u7A7A\u4E2D","Number of air jumps":"\u7A7A\u4E2D\u8DF3\u8E8D\u6B21\u6578","Air jump":"\u7A7A\u4E2D\u8DF3\u8E8D","Floor jumps count as air jumps":"\u5730\u677F\u8DF3\u8E8D\u8A08\u7B97\u70BA\u7A7A\u4E2D\u8DF3\u8E8D","Object":"\u5C0D\u8C61","Behavior":"\u884C\u70BA","Change the coyote time duration of an object (in seconds).":"\u66F4\u6539\u5C0D\u8C61\u7684\u72D7\u72D0\u6642\u9593\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09\u3002","Coyote timeframe":"\u72D7\u72D0\u6642\u9593\u6846\u67B6","Change coyote time of _PARAM0_: _PARAM2_ seconds":"\u4FEE\u6539 _PARAM0_ \u7684\u72D0\u72F8\u6642\u9593\uFF1A_PARAM2_ \u79D2","Duration":"\u6301\u7E8C\u6642\u9593","Coyote time duration in seconds.":"\u72D0\u72F8\u6642\u9593\u9577\u5EA6\uFF08\u79D2\uFF09\u3002","Check if a coyote jump can currently happen.":"\u6AA2\u67E5\u662F\u5426\u53EF\u4EE5\u57F7\u884C\u72D0\u72F8\u8DF3\u8E8D\u3002","_PARAM0_ can coyote jump":"_PARAM0_ \u53EF\u4EE5\u9032\u884C\u72D0\u72F8\u8DF3\u8E8D\u3002","Update WasInTheAir":"\u66F4\u65B0 WasInTheAir","Update WasInTheAir property of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684 WasInTheAir \u5C6C\u6027","Number of jumps in mid-air that are allowed.":"\u5141\u8A31\u5728\u7A7A\u4E2D\u9032\u884C\u7684\u8DF3\u8E8D\u6B21\u6578\u3002","Maximal jump number":"\u6700\u5927\u8DF3\u8E8D\u6B21\u6578","Number of jumps in mid-air that are still allowed.":"\u4ECD\u7136\u5141\u8A31\u5728\u7A7A\u4E2D\u9032\u884C\u7684\u8DF3\u8E8D\u6B21\u6578\u3002","Remaining jump":"\u5269\u9918\u8DF3\u8E8D\u6B21\u6578","Change the number of times the character can jump in mid-air.":"\u66F4\u6539\u89D2\u8272\u5728\u7A7A\u4E2D\u53EF\u4EE5\u8DF3\u8E8D\u7684\u6B21\u6578\u3002","Air jumps":"\u7A7A\u4E2D\u8DF3\u8E8D","Change the number of times _PARAM0_ can jump in mid-air: _PARAM2_":"\u66F4\u6539 _PARAM0_ \u53EF\u4EE5\u5728\u7A7A\u4E2D\u8DF3\u8E8D\u7684\u6B21\u6578\uFF1A_PARAM2_","Remove one of the remaining air jumps of a character.":"\u79FB\u9664\u89D2\u8272\u7684\u4E00\u6B21\u5269\u9918\u7A7A\u4E2D\u8DF3\u8E8D\u3002","Remove a remaining air jump":"\u79FB\u9664\u4E00\u6B21\u5269\u9918\u7684\u7A7A\u4E2D\u8DF3\u8E8D","Remove one of the remaining air jumps of _PARAM0_":"\u79FB\u9664\u4E00\u6B21 _PARAM0_ \u7684\u5269\u9918\u7A7A\u4E2D\u8DF3\u8E8D","Allow back all air jumps of a character.":"\u5141\u8A31\u6062\u5FA9\u89D2\u8272\u7684\u6240\u6709\u7A7A\u4E2D\u8DF3\u8E8D\u3002","Reset air jumps":"\u91CD\u7F6E\u7A7A\u4E2D\u8DF3\u8E8D","Allow back all air jumps of _PARAM0_":"\u5141\u8A31\u6062\u5FA9 _PARAM0_ \u7684\u6240\u6709\u7A7A\u4E2D\u8DF3\u8E8D","Check if floor jumps are counted as air jumps for an object.":"\u6AA2\u67E5\u5730\u677F\u8DF3\u8E8D\u662F\u5426\u88AB\u8A08\u70BA\u7269\u9AD4\u7684\u7A7A\u4E2D\u8DF3\u8E8D\u3002","Floor jumps count as air jumps for _PARAM0_":"\u5730\u677F\u8DF3\u8E8D\u8A08\u70BA _PARAM0_ \u7684\u7A7A\u4E2D\u8DF3\u8E8D\u3002","Let platformer characters jump and slide against walls.":"\u8B93\u5E73\u53F0\u904A\u6232\u89D2\u8272\u8DF3\u8E8D\u4E26\u8CBC\u8457\u7246\u58C1\u6ED1\u884C\u3002","Wall jump":"\u7246\u58C1\u8DF3\u8E8D","Platformer character configuration stack":"\u5E73\u53F0\u904A\u6232\u89D2\u8272\u914D\u7F6E\u5806\u758A","Jump detection time frame":"\u8DF3\u8E8D\u5075\u6E2C\u6642\u9593\u6846","Side speed":"\u5074\u9762\u901F\u5EA6","Side acceleration":"\u5074\u9762\u52A0\u901F\u5EA6","Side speed sustain time":"\u5074\u9762\u901F\u5EA6\u6301\u7E8C\u6642\u9593","Gravity":"\u91CD\u529B","Wall sliding":"\u58C1\u9762\u6ED1\u884C","Maximum falling speed":"\u6700\u5927\u4E0B\u843D\u901F\u5EA6","Impact speed absorption":"\u885D\u64CA\u901F\u5EA6\u5438\u6536","Minimal falling speed":"\u6700\u5C0F\u4E0B\u843D\u901F\u5EA6","Keep sliding without holding a key":"\u5728\u4E0D\u6309\u4F4F\u6309\u9375\u7684\u60C5\u51B5\u4E0B\u7E7C\u7E8C\u6ED1\u884C","Check if the object has just wall jumped.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u525B\u525B\u8DF3\u8E8D\u81EA\u7246\u3002","Has just wall jumped":"_PARAM0_ \u525B\u525B\u5F9E\u7246\u4E0A\u8DF3\u8E8D","_PARAM0_ has just jumped from a wall":"_PARAM0_ \u525B\u5F9E\u7246\u8DF3","Check if the object is wall jumping.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u6B63\u5728\u7246\u58C1\u8DF3\u8E8D\u3002","Is wall jumping":"\u662F\u5426\u7246\u58C1\u8DF3\u8E8D","_PARAM0_ jumped from a wall":"_PARAM0_\u5F9E\u7246\u58C1\u8DF3\u4E0B","Check if the object is against a wall.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u9760\u5728\u7246\u58C1\u4E0A\u3002","Against a wall":"\u9760\u5728\u7246\u58C1\u4E0A","_PARAM0_ is against a wall":"_PARAM0_\u9760\u5728\u7246\u4E0A","Remember that the character was against a wall.":"\u8A18\u4F4F\u89D2\u8272\u66FE\u7D93\u9760\u5728\u7246\u4E0A\u3002","Remember is against wall":"\u8A18\u4F4F\u9760\u5728\u7246\u4E0A","_PARAM0_ remembers having been against a wall":"_PARAM0_\u8A18\u5F97\u66FE\u7D93\u9760\u5728\u7246\u4E0A","Forget that the character was against a wall.":"\u5FD8\u8A18\u89D2\u8272\u66FE\u7D93\u9760\u5728\u7246\u4E0A\u3002","Forget is against wall":"\u5FD8\u8A18\u9760\u5728\u7246\u4E0A","_PARAM0_ forgets to had been against a wall":"_PARAM0_\u5FD8\u8A18\u66FE\u7D93\u9760\u5728\u7246\u4E0A","Remember that the character was against a wall within the time frame.":"\u8A18\u4F4F\u89D2\u8272\u66FE\u7D93\u5728\u6642\u9593\u7BC4\u570D\u5167\u9760\u5728\u7246\u4E0A\u3002","Was against wall":"\u5728\u7246\u4E0A","_PARAM0_ remembers to had been against a wall within _PARAM2_ seconds":"_PARAM0_\u8A18\u5F97\u5728_PARAM2_\u79D2\u5167\u66FE\u7D93\u9760\u5728\u7246\u4E0A","Time frame":"\u6642\u9593\u7BC4\u570D","The time frame in seconds.":"\u4EE5\u79D2\u8868\u793A\u6642\u9593\u7BC4\u570D\u3002","Remember that the jump key was pressed.":"\u8A18\u4F4F\u8DF3\u8E8D\u9375\u88AB\u6309\u4E0B\u3002","Remember key pressed":"\u8A18\u4F4F\u6309\u4E0B\u7684\u9375","_PARAM0_ remembers the _PARAM2_ key was pressed":"_PARAM0_\u8A18\u5F97_PARAM2_\u9375\u88AB\u6309\u4E0B","Key":"\u9375","Forget that the jump key was pressed.":"\u5FD8\u8A18\u8DF3\u8E8D\u9375\u88AB\u6309\u4E0B\u3002","Forget key pressed":"\u5FD8\u8A18\u6309\u4E0B\u7684\u9375","_PARAM0_ forgets the _PARAM2_ key was pressed":"_PARAM0_\u5FD8\u8A18_PARAM2_\u9375\u88AB\u6309\u4E0B","Check if the key was pressed within the time frame.":"\u6AA2\u67E5\u5728\u6642\u9593\u7BC4\u570D\u5167\u9375\u662F\u5426\u88AB\u6309\u4E0B\u3002","_PARAM0_ remembers _PARAM3_ key was pressed within _PARAM2_ seconds":"_PARAM0_\u8A18\u5F97_PARAM3_\u9375\u5728_PARAM2_\u79D2\u5167\u88AB\u6309\u4E0B","Enable side speed.":"\u555F\u7528\u5074\u908A\u901F\u5EA6\u3002","Toggle side speed":"\u5207\u63DB\u5074\u908A\u901F\u5EA6","Enable side speed for _PARAM0_: _PARAM2_":"\u70BA_PARAM0_\u555F\u7528\u5074\u908A\u901F\u5EA6\uFF1A_PARAM2_","Enable side speed":"\u555F\u7528\u5074\u908A\u901F\u5EA6","Enable wall sliding.":"\u555F\u7528\u7246\u58C1\u6ED1\u884C\u3002","Slide on wall":"\u5728\u7246\u4E0A\u6ED1\u52D5","Enable wall sliding for _PARAM0_: _PARAM2_":"\u70BA_PARAM0_\u555F\u7528\u7246\u58C1\u6ED1\u884C\uFF1A_PARAM2_","Enable wall sliding":"\u555F\u7528\u7246\u58C1\u6ED1\u884C","Absorb falling speed of an object.":"\u5438\u6536\u7269\u9AD4\u7684\u4E0B\u964D\u901F\u5EA6\u3002","Absorb falling speed":"\u5438\u6536\u4E0B\u964D\u901F\u5EA6","Absorb falling speed of _PARAM0_: _PARAM2_":"\u5438\u6536_PARAM0_\u7684\u4E0B\u964D\u901F\u5EA6\uFF1A_PARAM2_","Speed absorption (in pixels per second)":"\u6BCF\u79D2\u5438\u6536\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","The wall jump detection time frame of an object (in seconds).":"\u5C0D\u8C61\u7684\u7246\u8DF3\u6AA2\u6E2C\u6642\u9593\u7BC4\u570D\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Jump time frame":"\u8DF3\u8E8D\u6642\u9593\u7BC4\u570D","Change the wall jump detection time frame of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u7246\u8DF3\u6AA2\u6E2C\u6642\u9593\u7BC4\u570D\uFF1A_PARAM2_","Change the wall jump detection time frame of an object (in seconds).":"\u66F4\u6539\u5C0D\u8C61\u7684\u7246\u8DF3\u6AA2\u6E2C\u6642\u9593\u7BC4\u570D\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Jump detection time frame (in seconds)":"\u8DF3\u8E8D\u6AA2\u6E2C\u6642\u9593\u7BC4\u570D\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","The side speed of wall jumps of an object (in pixels per second).":"\u5C0D\u8C61\u7246\u8DF3\u7684\u5074\u5411\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002","Change the side speed of wall jumps of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u7246\u8DF3\u5074\u5411\u901F\u5EA6\uFF1A_PARAM2_","Change the side speed of wall jumps of an object (in pixels per second).":"\u66F4\u6539\u5C0D\u8C61\u7684\u7246\u8DF3\u5074\u5411\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002","The side acceleration of wall jumps of an object (in pixels per second per second).":"\u5C0D\u8C61\u7684\u7246\u8DF3\u5074\u5411\u52A0\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\u6BCF\u79D2\u6BCF\u79D2\uFF09\u3002","Change the side acceleration of wall jumps of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u7246\u8DF3\u5074\u5411\u52A0\u901F\u5EA6\uFF1A_PARAM2_","Change the side acceleration of wall jumps of an object (in pixels per second per second).":"\u66F4\u6539\u5C0D\u8C61\u7684\u7246\u8DF3\u5074\u5411\u52A0\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u6BCF\u79D2\u6BCF\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","The wall sliding gravity of an object (in pixels per second per second).":"\u5C0D\u8C61\u7684\u7246\u58C1\u6ED1\u884C\u91CD\u529B\uFF08\u4EE5\u50CF\u7D20\u6BCF\u79D2\u6BCF\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Change the wall sliding gravity of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u7246\u58C1\u6ED1\u884C\u91CD\u529B\uFF1A_PARAM2_","Change the wall sliding gravity of an object (in pixels per second per second).":"\u66F4\u6539\u5C0D\u8C61\u7684\u7246\u58C1\u6ED1\u884C\u91CD\u529B\uFF08\u4EE5\u50CF\u7D20\u6BCF\u79D2\u6BCF\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","The wall sliding maximum falling speed of an object (in pixels per second).":"\u5C0D\u8C61\u7684\u7246\u58C1\u6ED1\u884C\u6700\u5927\u4E0B\u964D\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u6BCF\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Change the wall sliding maximum falling speed of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u7246\u58C1\u6ED1\u884C\u6700\u5927\u4E0B\u964D\u901F\u5EA6\uFF1A_PARAM2_","Change the wall sliding maximum falling speed of an object (in pixels per second).":"\u66F4\u6539\u5C0D\u8C61\u7684\u7246\u58C1\u6ED1\u884C\u6700\u5927\u4E0B\u964D\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u6BCF\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Change the impact speed absorption of an object.":"\u66F4\u6539\u5C0D\u8C61\u7684\u885D\u64CA\u901F\u5EA6\u5438\u6536\u3002","Change the impact speed absorption of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u885D\u64CA\u901F\u5EA6\u5438\u6536\uFF1A_PARAM2_","Make platformer characters dash toward the floor.":"\u4F7F\u5E73\u53F0\u904A\u6232\u89D2\u8272\u671D\u5730\u677F\u885D\u523A\u3002","Dive dash":"\u6F5B\u6C34\u885D\u523A","Initial falling speed":"\u521D\u59CB\u4E0B\u843D\u901F\u5EA6","Simulate a press of dive key to make the object dives to the floor if it can dive.":"\u6A21\u64EC\u6309\u4E0B\u6F5B\u6C34\u9375\uFF0C\u4F7F\u5C0D\u8C61\u6F5B\u5165\u5730\u677F\uFF08\u5982\u679C\u53EF\u4EE5\u6F5B\u6C34\uFF09\u3002","Simulate dive key":"\u6A21\u64EC\u6F5B\u6C34\u9375","Simulate pressing dive key for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B_PARAM0_\u7684\u6F5B\u6C34\u9375","Check if the object can dive.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u53EF\u4EE5\u6F5B\u6C34\u3002","Can dive":"\u53EF\u4EE5\u6F5B\u6C34","_PARAM0_ can dive":"_PARAM0_\u53EF\u4EE5\u6F5B\u6C34","Check if the object is diving.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u6F5B\u6C34\u3002","Is diving":"\u6B63\u5728\u6F5B\u6C34","_PARAM0_ is diving":"_PARAM0_\u6B63\u5728\u6F5B\u6C34","Make platformer characters dash horizontally.":"\u4F7F\u5E73\u53F0\u904A\u6232\u89D2\u8272\u6C34\u5E73\u885D\u523A\u3002","Horizontal dash":"\u6C34\u5E73\u885D\u523A","Platformer charcacter configuration stack":"\u5E73\u53F0\u904A\u6232\u89D2\u8272\u914D\u7F6E\u5806\u758A","Initial speed":"\u521D\u59CB\u901F\u5EA6","Sustain minimum duration":"\u6700\u5C0F\u6301\u7E8C\u6642\u9593","Sustain":"\u6301\u7E8C","Sustain maxiumum duration":"\u6700\u5927\u6301\u7E8C\u6642\u9593","Sustain acceleration":"\u6301\u7E8C\u52A0\u901F\u5EA6","Sustain maxiumum speed":"\u6301\u7E8C\u6700\u5927\u901F\u5EA6","Sustain gravity":"\u6301\u7E8C\u91CD\u529B","Decceleration":"\u6E1B\u901F","Cool down duration":"\u51B7\u537B\u6642\u9593","Update the last direction used by the character.":"\u66F4\u65B0\u89D2\u8272\u4F7F\u7528\u7684\u6700\u5F8C\u65B9\u5411\u3002","Update last direction":"\u66F4\u65B0\u6700\u5F8C\u65B9\u5411","Update last direction used by _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u4F7F\u7528\u7684\u6700\u5F8C\u65B9\u5411","Simulate a press of dash key.":"\u6A21\u64EC\u6309\u4E0B\u885D\u523A\u9375\u3002","Simulate dash key":"\u6A21\u64EC\u885D\u523A\u9375","Simulate pressing dash key for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B\u7834\u6298\u865F\u9375\u70BA_PARAM0_","Check if the object is dashing.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u5728\u7834\u6298\u865F\u72C0\u614B\u3002","Is dashing":"\u662F\u5426\u5728\u7834\u6298\u865F\u72C0\u614B","_PARAM0_ is dashing":"_PARAM0_ \u73FE\u5728\u5728\u7834\u6298\u865F\u72C0\u614B","Abort the current dash and set the object to its usual horizontal speed.":"\u7D42\u6B62\u7576\u524D\u7834\u6298\u865F\u4E26\u5C07\u5C0D\u8C61\u8A2D\u5B9A\u70BA\u5176\u901A\u5E38\u7684\u6C34\u5E73\u901F\u5EA6\u3002","Abort dash":"\u4E2D\u6B62\u7834\u6298\u865F","Abort the current dash of _PARAM0_":"\u4E2D\u6B62_PARAM0_\u7684\u7576\u524D\u7834\u6298\u865F","Resolve conflict between platformer character configuration changes.":"\u89E3\u6C7A\u5E73\u53F0\u904A\u6232\u89D2\u8272\u914D\u7F6E\u66F4\u6539\u4E4B\u9593\u7684\u885D\u7A81\u3002","Revert configuration changes for one identifier and update the character configuration to use the most recent ones.":"\u64A4\u6D88\u4E00\u500B\u6A19\u8B58\u7B26\u7684\u914D\u7F6E\u66F4\u6539\u4E26\u66F4\u65B0\u89D2\u8272\u914D\u7F6E\u4EE5\u4F7F\u7528\u6700\u8FD1\u7684\u66F4\u6539\u3002","Revert configuration":"\u6062\u5FA9\u914D\u7F6E","Revert configuration changes: _PARAM2_ on _PARAM0_":"\u56DE\u5FA9\u914D\u7F6E\u66F4\u6539\uFF1A_PARAM2_ \u5728 _PARAM0_ \u4E0A","Configuration identifier":"\u914D\u7F6E\u6A19\u8B58\u7B26","Return the character property value when no change applies on it.":"\u7576\u6C92\u6709\u8B8A\u5316\u6642\u8FD4\u56DE\u89D2\u8272\u5C6C\u6027\u503C\u3002","Setting":"\u8A2D\u5B9A","Configure the _PARAM2_ of _PARAM0_: _PARAM3_ with the identifier: _PARAM4_":"\u70BA_PARAM0_\u914D\u7F6E_PARAM2_\uFF1A_PARAM3_\uFF0C\u4F7F\u7528\u6A19\u8B58\u7B26\uFF1A_PARAM4_","Return the usual maximum horizontal speed when no configuration change applies on it.":"\u7576\u6C92\u6709\u914D\u7F6E\u8B8A\u5316\u9069\u7528\u65BC\u5176\u6642\u8FD4\u56DE\u901A\u5E38\u7684\u6700\u5927\u6C34\u5E73\u901F\u5EA6\u3002","Usual maximum horizontal speed":"\u901A\u5E38\u7684\u6700\u5927\u6C34\u5E73\u901F\u5EA6","Configure the maximum horizontal speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u70BA_PARAM0_\u914D\u7F6E\u6700\u5927\u6C34\u5E73\u901F\u5EA6\uFF1A_PARAM2_\uFF0C\u4F7F\u7528\u6A19\u8B58\u7B26\uFF1A_PARAM3_","Configure a character property for a given configuration layer and move this layer on top.":"\u70BA\u7D66\u5B9A\u7684\u914D\u7F6E\u5C64\u914D\u7F6E\u89D2\u8272\u5C6C\u6027\u4E26\u5C07\u6B64\u5C64\u79FB\u5230\u9802\u90E8\u3002","Configure setting":"\u914D\u7F6E\u8A2D\u7F6E","Setting value":"\u8A2D\u7F6E\u503C","Configure character gravity for a given configuration layer and move this layer on top.":"\u70BA\u7D66\u5B9A\u7684\u914D\u7F6E\u5C64\u914D\u7F6E\u89D2\u8272\u91CD\u529B\u4E26\u5C07\u6B64\u5C64\u79FB\u5230\u9802\u90E8\u3002","Configure gravity":"\u914D\u7F6E\u91CD\u529B","Configure the gravity of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u70BA_PARAM0_\u914D\u7F6E\u91CD\u529B\uFF1A_PARAM2_\uFF0C\u4F7F\u7528\u6A19\u8B58\u7B26\uFF1A_PARAM3_","Configure character deceleration for a given configuration layer and move this layer on top.":"\u70BA\u7D66\u5B9A\u7684\u914D\u7F6E\u5C64\u914D\u7F6E\u89D2\u8272\u6E1B\u901F\u4E26\u5C07\u6B64\u5C64\u79FB\u5230\u9802\u90E8\u3002","Configure horizontal deceleration":"\u914D\u7F6E\u6C34\u5E73\u6E1B\u901F","Configure the horizontal deceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u70BA_PARAM0_\u914D\u7F6E\u6C34\u5E73\u6E1B\u901F\uFF1A_PARAM2_\uFF0C\u4F7F\u7528\u6A19\u8B58\u7B26\uFF1A_PARAM3_","Acceleration":"\u52A0\u901F\u5EA6","Configure character maximum speed for a given configuration layer and move this layer on top.":"\u70BA\u7D66\u5B9A\u7684\u914D\u7F6E\u5C64\u914D\u7F6E\u89D2\u8272\u6700\u5927\u901F\u5EA6\u4E26\u5C07\u6B64\u5C64\u79FB\u5230\u9802\u90E8\u3002","Configure maximum horizontal speed":"\u914D\u7F6E\u6700\u5927\u6C34\u5E73\u901F\u5EA6","Maximum horizontal speed":"\u6700\u5927\u6C34\u5E73\u901F\u5EA6","Configure character acceleration for a given configuration layer and move this layer on top.":"\u70BA\u7D66\u5B9A\u7684\u914D\u7F6E\u5C64\u914D\u7F6E\u89D2\u8272\u52A0\u901F\u5EA6\u4E26\u5C07\u6B64\u5C64\u79FB\u5230\u9802\u90E8\u3002","Configure horizontal acceleration":"\u914D\u7F6E\u6C34\u5E73\u52A0\u901F\u5EA6","Configure the horizontal acceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u70BA_PARAM0_\u914D\u7F6E\u6C34\u5E73\u52A0\u901F\u5EA6\uFF1A_PARAM2_\uFF0C\u4F7F\u7528\u6A19\u8B58\u7B26\uFF1A_PARAM3_","Configure character maximum falling speed for a given configuration layer and move this layer on top.":"\u70BA\u7279\u5B9A\u914D\u7F6E\u5C64\u914D\u7F6E\u89D2\u8272\u6700\u5927\u4E0B\u843D\u901F\u5EA6\u4E26\u5C07\u6B64\u5C64\u79FB\u5230\u9802\u90E8\u3002","Configure maximum falling speed":"\u914D\u7F6E\u6700\u5927\u4E0B\u843D\u901F\u5EA6","Configure the maximum falling speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"\u914D\u7F6E_PARAM0_\u7684\u6700\u5927\u4E0B\u843D\u901F\u5EA6\uFF1A_PARAM2_\uFF0C\u8B58\u5225\u7B26\uFF1A_PARAM3_","Advanced movements for 3D physics characters":"3D\u7269\u7406\u89D2\u8272\u7684\u9AD8\u7EA7\u52A8\u4F5C","Let 3D physics characters: air jump, wall jump wall sliding, coyote time and dashing.":"\u8B933D\u7269\u7406\u89D2\u8272\uFF1A\u5728\u7A7A\u4E2D\u8DF3\u8E8D\u3001\u58C1\u8DF3\u3001\u8CBC\u7246\u6ED1\u884C\u3001coyote time\u548C\u885D\u523A\u3002","Let 3D physics characters jump shortly after leaving a platform and also jump in mid-air.":"\u8B933D\u7269\u7406\u89D2\u8272\u5728\u96E2\u958B\u5E73\u53F0\u5F8C\u77ED\u66AB\u8DF3\u8E8D\uFF0C\u4E26\u5728\u7A7A\u4E2D\u8DF3\u8E8D\u3002","Coyote time and air jump for 3D":"3D\u7684Coyote\u6642\u9593\u548C\u7A7A\u4E2D\u8DF3\u8E8D\u3002","3D physics character":"3D\u7269\u7406\u89D2\u8272","A Jump control was applied from a default control or simulated by an action.":"\u5F9E\u9ED8\u8A8D\u63A7\u5236\u61C9\u7528\u4E86\u8DF3\u8E8D\u63A7\u5236\u6216\u901A\u904E\u64CD\u4F5C\u6A21\u64EC\u4E86\u8DF3\u8E8D\u3002","Jump pressed or simulated":"\u8DF3\u8E8D\u6309\u4E0B\u6216\u6A21\u64EC","_PARAM0_ has the Jump key pressed or simulated":"_PARAM0_\u6309\u4E0B\u6216\u6A21\u64EC\u4E86\u8DF3\u8E8D\u9375","Advanced p2p event handling":"\u9AD8\u7EA7P2P\u4E8B\u4EF6\u5904\u7406","Allows handling all received P2P events at once instead of one per frame. It is more complex but also potentially more performant.":"\u5141\u8A31\u4E00\u6B21\u8655\u7406\u6240\u6709\u63A5\u6536\u5230\u7684P2P\u4E8B\u4EF6\uFF0C\u800C\u4E0D\u662F\u6BCF\u5E40\u8655\u7406\u4E00\u500B\u3002\u5B83\u66F4\u8907\u96DC\uFF0C\u4F46\u4E5F\u6709\u6F5B\u5728\u7684\u66F4\u9AD8\u6027\u80FD\u3002","Marks the event as handled, to go on to the next.":"\u5C07\u4E8B\u4EF6\u6A19\u8A18\u70BA\u5DF2\u8655\u7406\uFF0C\u4EE5\u7E7C\u7E8C\u4E0B\u4E00\u500B\u3002","Dismiss event":"\u62D2\u7D55\u4E8B\u4EF6","Dismiss event _PARAM1_ as handled":"\u5C07\u4E8B\u4EF6_PARAM1_\u6A19\u8A18\u70BA\u5DF2\u8655\u7406","The event to dismiss":"\u8981\u62D2\u7D55\u7684\u4E8B\u4EF6","Advanced projectile":"\u9AD8\u7D1A\u5F48\u9053","Control how a projectile moves including speed, acceleration, distance, and lifetime.":"\u63A7\u5236\u5F48\u9053\u79FB\u52D5\uFF0C\u5305\u62EC\u901F\u5EA6\uFF0C\u52A0\u901F\u5EA6\uFF0C\u8DDD\u96E2\u548C\u58FD\u547D\u3002","Control how a projectile object moves including lifetime, distance, speed, and acceleration.":"\u63A7\u5236\u6295\u5C04\u7269\u9AD4\u7684\u904B\u52D5\u65B9\u5F0F\uFF0C\u5305\u62EC\u58FD\u547D\u3001\u8DDD\u96E2\u3001\u901F\u5EA6\u548C\u52A0\u901F\u5EA6\u3002","Lifetime":"\u58FD\u547D","Use \"0\" to ignore this property.":"\u4F7F\u7528\u201C0\u201D\u4F86\u5FFD\u7565\u6B64\u5C6C\u6027\u3002","Max distance from starting position":"\u8DDD\u96E2\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u96E2","Max speed":"\u6700\u5927\u901F\u5EA6","Speed from object forces will not exceed this value. Use \"0\" to ignore this property.":"\u4F86\u81EA\u5C0D\u8C61\u529B\u91CF\u7684\u901F\u5EA6\u4E0D\u6703\u8D85\u904E\u6B64\u503C\u3002 \u4F7F\u7528 \"0\" \u5FFD\u7565\u6B64\u5C6C\u6027\u3002","Speed from object forces will not go below this value. Use \"0\" to ignore this property.":"\u4F86\u81EA\u5C0D\u8C61\u529B\u91CF\u7684\u901F\u5EA6\u4E0D\u6703\u4F4E\u65BC\u6B64\u503C\u3002 \u4F7F\u7528 \"0\" \u5FFD\u7565\u6B64\u5C6C\u6027\u3002","Negative acceleration can be used to stop a projectile.":"\u8CA0\u52A0\u901F\u5EA6\u53EF\u7528\u65BC\u505C\u6B62\u5F48\u4E38\u3002","Starting speed":"\u8D77\u59CB\u901F\u5EA6","Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"\u5275\u5EFA\u5C0D\u8C61\u6642\uFF0C\u5C0D\u8C61\u5C07\u671D\u5411\u7684\u65B9\u5411\u79FB\u52D5\u3002 \u4F7F\u7528 \"0\" \u5FFD\u7565\u6B64\u5C6C\u6027\u3002","Delete when lifetime is exceeded":"\u7576\u8D85\u51FA\u58FD\u547D\u6642\u9032\u884C\u522A\u9664","Delete when distance from starting position is exceeded":"\u7576\u8D85\u51FA\u8D77\u59CB\u4F4D\u7F6E\u7684\u8DDD\u96E2\u6642\u9032\u884C\u522A\u9664","Check if max distance from starting position has been exceeded (object will be deleted next frame).":"\u6AA2\u67E5\u662F\u5426\u8D85\u904E\u4E86\u5F9E\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u96E2\uFF08\u5C0D\u8C61\u5C07\u5728\u4E0B\u4E00\u5E40\u522A\u9664\uFF09\u3002","Max distance from starting position has been exceeded":"\u5F9E\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u96E2\u5DF2\u8D85\u904E","Max distance from starting position of _PARAM0_ has been exceeded":"\u5DF2\u8D85\u51FA_PARAM0_\u7684\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u96E2","Check if lifetime has been exceeded (object will be deleted next frame).":"\u6AA2\u67E5\u662F\u5426\u8D85\u904E\u4E86\u751F\u547D\u9031\u671F\uFF08\u5C0D\u8C61\u5C07\u5728\u4E0B\u4E00\u5E40\u522A\u9664\uFF09\u3002","Lifetime has been exceeded":"\u5DF2\u8D85\u904E\u751F\u547D\u9031\u671F","Lifetime of _PARAM0_ has been exceeded":"_PARAM0_\u7684\u751F\u547D\u9031\u671F\u5DF2\u8D85\u904E","the lifetime of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"\u5C0D\u8C61\u7684\u751F\u547D\u9031\u671F\u3002\u5C6C\u6027\u8D85\u51FA\u5F8C\u5C07\u522A\u9664\u5C0D\u8C61\u3002\u4F7F\u7528\u201C0\u201D\u5FFD\u7565\u6B64\u5C6C\u6027\u3002","the lifetime":"\u751F\u547D\u9031\u671F","Restart lifetime timer of object.":"\u91CD\u8A2D\u5C0D\u8C61\u7684\u751F\u547D\u9031\u671F\u8A08\u6642\u5668\u3002","Restart lifetime timer":"\u91CD\u8A2D\u751F\u547D\u9031\u671F\u8A08\u6642\u5668","Restart lifetime timer of _PARAM0_":"\u91CD\u8A2D_PARAM0_\u7684\u751F\u547D\u9031\u671F\u8A08\u6642\u5668","the max distance from starting position of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"\u5C0D\u8C61\u7684\u6700\u5927\u8DDD\u96E2\u5F9E\u8D77\u59CB\u4F4D\u7F6E\u3002\u5C6C\u6027\u8D85\u51FA\u5F8C\u5C07\u522A\u9664\u5C0D\u8C61\u3002\u4F7F\u7528\u201C0\u201D\u5FFD\u7565\u6B64\u5C6C\u6027\u3002","the max distance from starting position":"\u5F9E\u8D77\u59CB\u4F4D\u7F6E\u7684\u6700\u5927\u8DDD\u96E2","Change the starting position of object to it's current position.":"\u5C07\u5C0D\u8C61\u7684\u8D77\u59CB\u4F4D\u7F6E\u66F4\u6539\u70BA\u7576\u524D\u4F4D\u7F6E\u3002","Change starting position to the current position":"\u5C07\u8D77\u59CB\u4F4D\u7F6E\u66F4\u6539\u70BA\u7576\u524D\u4F4D\u7F6E","Change the starting position of _PARAM0_ to it's current position":"\u5C07_PARAM0_\u7684\u8D77\u59CB\u4F4D\u7F6E\u66F4\u6539\u70BA\u7576\u524D\u4F4D\u7F6E","the max speed of the object. Object forces cannot exceed this value. Use \"0\" to ignore this property.":"\u5C0D\u8C61\u7684\u6700\u5927\u901F\u5EA6\u3002\u5C0D\u8C61\u529B\u4E0D\u80FD\u8D85\u51FA\u6B64\u503C\u3002\u4F7F\u7528\u201C0\u201D\u5FFD\u7565\u6B64\u5C6C\u6027\u3002","the max speed":"\u6700\u5927\u901F\u5EA6","the minSpeed of the object. Object forces cannot go below this value. Use \"0\" to ignore this property.":"\u5C0D\u8C61\u7684\u6700\u5C0F\u901F\u5EA6\u3002\u5C0D\u8C61\u529B\u4E0D\u80FD\u4F4E\u65BC\u6B64\u503C\u3002\u4F7F\u7528\u201C0\u201D\u5FFD\u7565\u6B64\u5C6C\u6027\u3002","MinSpeed":"\u6700\u5C0F\u901F\u5EA6","the minSpeed":"\u6700\u5C0F\u901F\u5EA6","the acceleration of the object. Use a negative number to slow down.":"\u5C0D\u8C61\u7684\u52A0\u901F\u5EA6\u3002\u4F7F\u7528\u8CA0\u6578\u6E1B\u901F\u3002","the acceleration":"\u52A0\u901F\u5EA6","the starting speed of the object. Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"\u5C0D\u8C61\u7684\u521D\u59CB\u901F\u5EA6\u3002\u5275\u5EFA\u6642\uFF0C\u5C0D\u8C61\u6703\u6CBF\u8457\u5176\u9762\u5C0D\u7684\u65B9\u5411\u79FB\u52D5\u3002\u4F7F\u7528\u201C0\u201D\u5FFD\u7565\u6B64\u5C6C\u6027\u3002","the starting speed":"\u521D\u59CB\u901F\u5EA6","Check if automatic deletion is enabled when lifetime is exceeded.":"\u6AA2\u67E5\u662F\u5426\u5728\u8D85\u904E\u58FD\u547D\u6642\u555F\u7528\u81EA\u52D5\u522A\u9664\u3002","Automatic deletion is enabled when lifetime is exceeded":"\u7576\u58FD\u547D\u8017\u76E1\u6642\uFF0C\u5DF2\u555F\u7528\u81EA\u52D5\u522A\u9664\u3002","Automatic deletion is enabled when lifetime is exceeded on _PARAM0_":"\u7576\u58FD\u547D\u8017\u76E1\u6642\uFF0C\u5DF2\u5C0D_PARAM0_\u555F\u7528\u81EA\u52D5\u522A\u9664\u3002","Change automatic deletion of object when lifetime is exceeded.":"\u66F4\u6539\u8D85\u904E\u58FD\u547D\u6642\u5C0D\u8C61\u7684\u81EA\u52D5\u522A\u9664\u3002","Change automatic deletion when lifetime is exceeded":"\u66F4\u6539\u7576\u58FD\u547D\u904E\u671F\u6642\u7684\u81EA\u52D5\u522A\u9664\u3002","Enable automatic deletion of _PARAM0_ when lifetime is exceeded: _PARAM2_":"\u7576\u58FD\u547D\u8017\u76E1\u6642\uFF0C\u5DF2\u555F\u7528\u5C0D_PARAM0_\u7684\u81EA\u52D5\u522A\u9664\uFF1A_PARAM2_","DeleteWhenLifetimeExceeded":"\u58FD\u547D\u8017\u76E1\u6642\u522A\u9664","Check if automatic deletion is enabled when distance from starting position is exceeded.":"\u7576\u8D85\u904E\u8D77\u59CB\u4F4D\u7F6E\u8DDD\u96E2\u6642\uFF0C\u6AA2\u67E5\u81EA\u52D5\u522A\u9664\u662F\u5426\u5DF2\u555F\u7528\u3002","Automatic deletion is enabled when distance from starting position is exceeded":"\u7576\u8D85\u904E\u8D77\u59CB\u4F4D\u7F6E\u8DDD\u96E2\u6642\uFF0C\u5DF2\u555F\u7528\u81EA\u52D5\u522A\u9664\u3002","Automatic deletion is enabled when distance from starting position is exceeded on _PARAM0_":"\u7576\u8D85\u904E\u8D77\u59CB\u4F4D\u7F6E\u8DDD\u96E2\u6642\uFF0C\u5DF2\u5C0D_PARAM0_\u555F\u7528\u81EA\u52D5\u522A\u9664\u3002","Change automatic deletion when distance from starting position is exceeded.":"\u66F4\u6539\u8D77\u59CB\u4F4D\u7F6E\u8DDD\u96E2\u8D85\u904E\u6642\u7684\u81EA\u52D5\u522A\u9664\u3002","Change automatic deletion when distance from starting position is exceeded":"\u66F4\u6539\u8D85\u904E\u8D77\u59CB\u4F4D\u7F6E\u8DDD\u96E2\u6642\u7684\u81EA\u52D5\u522A\u9664\u3002","Enable automatic deletion of _PARAM0_ when distance from starting position is exceeded: _PARAM2_":"\u7576\u8D85\u904E\u8D77\u59CB\u4F4D\u7F6E\u8DDD\u96E2\u6642\uFF0C\u5DF2\u555F\u7528\u5C0D_PARAM0_\u7684\u81EA\u52D5\u522A\u9664\uFF1A_PARAM2_","DeleteWhenDistanceExceeded":"\u8D77\u59CB\u4F4D\u7F6E\u8DDD\u96E2\u904E\u671F\u6642\u522A\u9664","Animated Back and Forth Movement":"\u4F86\u56DE\u52D5\u756B\u904B\u52D5","Make the object go on the left, then when some distance is reached, flip and go back to the right. Make sure that your object has two animations called \"GoLeft\" and \"TurnLeft\".":"\u4F7F\u5C0D\u8C61\u5411\u5DE6\u79FB\u52D5\uFF0C\u7136\u5F8C\u7576\u9054\u5230\u4E00\u5B9A\u8DDD\u96E2\u6642\uFF0C\u7FFB\u8F49\u4E26\u5411\u53F3\u79FB\u52D5\u3002\u78BA\u4FDD\u60A8\u7684\u5C0D\u8C61\u6709\u5169\u500B\u540D\u70BA\u201CGoLeft\u201D\u548C\u201CTurnLeft\u201D\u7684\u52D5\u756B\u3002","Animated Back and Forth (mirrored) Movement":"\u52D5\u756B\u4F86\u56DE\uFF08\u93E1\u50CF\uFF09\u904B\u52D5","Animatable capability":"\u53EF\u52D5\u756B\u5316\u7684\u80FD\u529B","Flippable capability":"\u53EF\u7FFB\u8F49\u7684\u80FD\u529B","Speed on X axis, in pixels per second":"X\u8EF8\u4E0A\u7684\u901F\u5EA6\uFF0C\u4EE5\u6BCF\u79D2\u50CF\u7D20\u70BA\u55AE\u4F4D","Distance traveled on X axis, in pixels":"X\u8EF8\u4E0A\u7684\u884C\u9032\u8DDD\u96E2\uFF0C\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D","Array tools":"\u6578\u7D44\u5DE5\u5177","A collection of utilities and tools for working with arrays.":"\u4E00\u7D44\u7528\u65BC\u8655\u7406\u6578\u7D44\u7684\u5DE5\u5177\u548C\u5DE5\u5177\u3002","General":"\u4E00\u822C","The index of the first variable that equals to a specific number in an array.":"\u6578\u7D44\u4E2D\u8207\u7279\u5B9A\u6578\u5B57\u76F8\u7B49\u7684\u7B2C\u4E00\u500B\u8B8A\u6578\u7684\u7D22\u5F15\u3002","Index of number":"\u6578\u5B57\u7684\u7D22\u5F15","The first index where _PARAM2_ can be found in _PARAM1_":"\u5728 _PARAM1_ \u4E2D\u627E\u5230 _PARAM2_ \u7684\u7B2C\u4E00\u500B\u7D22\u5F15","Array to search the value in":"\u8981\u5728\u5176\u4E2D\u641C\u7D22\u503C\u7684\u6578\u7D44","Number to search in the array":"\u8981\u5728\u6578\u7D44\u4E2D\u641C\u7D22\u7684\u6578\u5B57","The index of the first variable that equals to a specific text in an array.":"\u6578\u7D44\u4E2D\u8207\u7279\u5B9A\u6587\u672C\u76F8\u7B49\u7684\u7B2C\u4E00\u500B\u8B8A\u91CF\u7684\u7D22\u5F15\u3002","Index of text":"\u6587\u672C\u7684\u7D22\u5F15","String to search in the array":"\u5728\u6578\u7D44\u4E2D\u641C\u7D22\u7684\u6587\u672C","The index of the last variable that equals to a specific number in an array.":"\u6578\u7D44\u4E2D\u8207\u7279\u5B9A\u6578\u5B57\u76F8\u7B49\u7684\u6700\u5F8C\u4E00\u500B\u8B8A\u6578\u7684\u7D22\u5F15\u3002","Last index of number":"\u6578\u5B57\u7684\u6700\u5F8C\u4E00\u500B\u7D22\u5F15","The last index where _PARAM2_ can be found in _PARAM1_":"\u5728 _PARAM1_ \u4E2D\u627E\u5230 _PARAM2_ \u7684\u6700\u5F8C\u4E00\u500B\u7D22\u5F15","The index of the last variable that equals to a specific text in an array.":"\u6578\u7D44\u4E2D\u8207\u7279\u5B9A\u6587\u672C\u76F8\u7B49\u7684\u6700\u5F8C\u4E00\u500B\u8B8A\u91CF\u7684\u7D22\u5F15\u3002","Last index of text":"\u6587\u672C\u7684\u6700\u5F8C\u4E00\u500B\u7D22\u5F15","Returns a random number of an array of numbers.":"\u8FD4\u56DE\u6578\u7D44\u6578\u5B57\u7684\u96A8\u6A5F\u6578\u3002","Random number in array":"\u9663\u5217\u4E2D\u7684\u96A8\u6A5F\u6578","A randomly picked number of _PARAM1_":"\u96A8\u6A5F\u9078\u64C7\u4E86 _PARAM1_ \u500B\u6578\u5B57","Array to get a number from":"\u5F9E\u9663\u5217\u4E2D\u7372\u53D6\u6578\u5B57","a random string of an array of strings.":"\u6578\u7D44\u4E2D\u7684\u5B57\u7B26\u4E32\u96A8\u6A5F\u5B57\u7B26\u3002","Random string in array":"\u9663\u5217\u4E2D\u7684\u96A8\u6A5F\u5B57\u7B26\u4E32","A randomly picked string of _PARAM1_":"\u96A8\u6A5F\u9078\u64C7\u4E86 _PARAM1_ \u5B57\u7B26\u4E32","Array to get a string from":"\u5F9E\u9663\u5217\u4E2D\u7372\u53D6\u5B57\u7B26\u4E32","Removes the last array child of an array, and return it as a number.":"\u522A\u9664\u6578\u7D44\u7684\u6700\u5F8C\u4E00\u500B\u5B50\u5143\u7D20\uFF0C\u4E26\u5C07\u5176\u4F5C\u70BA\u6578\u5B57\u8FD4\u56DE\u3002","Get and remove last variable from array (as number)":"\u5F9E\u6578\u7D44\u4E2D\u7372\u53D6\u4E26\u522A\u9664\u6700\u5F8C\u4E00\u500B\u8B8A\u91CF\uFF08\u4F5C\u70BA\u6578\u5B57\uFF09","Remove last child of _PARAM1_ and store it in _PARAM2_":"\u522A\u9664 _PARAM1_ \u7684\u6700\u5F8C\u4E00\u500B\u5B50\u5143\u7D20\u4E26\u5C07\u5176\u5132\u5B58\u5230 _PARAM2_ \u4E2D","Array to pop a child from":"\u5F9E\u9663\u5217\u4E2D\u5F48\u51FA\u4E00\u500B\u5B50\u5143\u7D20","Removes the last array child of an array, and return it as a string.":"\u522A\u9664\u6578\u7D44\u7684\u6700\u5F8C\u4E00\u500B\u5B50\u5143\u7D20\uFF0C\u4E26\u5C07\u5176\u4F5C\u70BA\u5B57\u7B26\u4E32\u8FD4\u56DE\u3002","Pop string from array":"\u5F9E\u6578\u7D44\u4E2D\u5F48\u51FA\u5B57\u7B26\u4E32","Removes the first array child of an array, and return it as a number.":"\u522A\u9664\u6578\u7D44\u7684\u7B2C\u4E00\u500B\u5B50\u5143\u7D20\uFF0C\u4E26\u5C07\u5176\u4F5C\u70BA\u6578\u5B57\u8FD4\u56DE\u3002","Shift number from array":"\u5F9E\u6578\u7D44\u4E2D\u79FB\u9664\u6578\u5B57","Array to shift a child from":"\u5F9E\u6578\u7D44\u4E2D\u79FB\u9664\u4E00\u500B\u5B50\u5143\u7D20","Removes the first array child of an array, and return it as a string.":"\u522A\u9664\u6578\u7D44\u7684\u7B2C\u4E00\u500B\u5B50\u5143\u7D20\uFF0C\u4E26\u5C07\u5176\u4F5C\u70BA\u5B57\u7B26\u4E32\u8FD4\u56DE\u3002","Shift string from array":"\u5F9E\u6578\u7D44\u4E2D\u79FB\u9664\u5B57\u7B26\u4E32","Checks if an array contains a specific number.":"\u6AA2\u67E5\u9663\u5217\u662F\u5426\u5305\u542B\u7279\u5B9A\u6578\u5B57\u3002","Array has number":"\u6578\u7D44\u5177\u6709\u6578\u5B57","Array _PARAM1_ has number _PARAM2_":"\u6578\u7D44 _PARAM1_ \u5177\u6709\u6578\u5B57 _PARAM2_","The number to search":"\u641C\u7D22\u7684\u6578\u5B57","Checks if an array contains a specific string.":"\u6AA2\u67E5\u9663\u5217\u662F\u5426\u5305\u542B\u7279\u5B9A\u5B57\u7B26\u4E32\u3002","Array has string":"\u6578\u7D44\u5177\u6709\u5B57\u7B26\u4E32","Array _PARAM1_ has string _PARAM2_":"\u6578\u7D44 _PARAM1_ \u5177\u6709\u5B57\u7B26\u4E32 _PARAM2_","The text to search":"\u641C\u7D22\u7684\u5B57\u7B26\u4E32","Copies a portion of a scene array variable into a new scene array variable.":"\u5C07\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u4E00\u90E8\u5206\u8907\u88FD\u5230\u65B0\u7684\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u4E2D\u3002","Slice an array":"\u5207\u7247\u6578\u7D44","Slice array _PARAM1_ from indices _PARAM3_ to _PARAM4_ into _PARAM2_":"\u5C07 _PARAM1_ \u6578\u7D44\u5F9E\u7D22\u5F15 _PARAM3_ \u5230 _PARAM4_ \u5207\u7247\u5230 _PARAM2_ \u4E2D","The array to take a slice from":"\u5F9E\u4E2D\u53D6\u4E00\u90E8\u5206\u5207\u7247\u7684\u9663\u5217","The array to store the slice into":"\u5132\u5B58\u5207\u7247\u7684\u9663\u5217","The index to start the slice from":"\u5207\u7247\u958B\u59CB\u7684\u7D22\u5F15","The index to end the slice at":"\u5207\u7247\u7D50\u675F\u7684\u7D22\u5F15","Set to 0 to copy all of the array. If you use a negative value, the index will be selected beginning from the end. \nFor example, slicing an array with 5 elements from 0 to -1 would take only elements from indices 0 to 3.":"\u5C07\u8A2D\u7F6E\u70BA 0 \u4EE5\u5FA9\u88FD\u6574\u500B\u6578\u7D44\u3002\u5982\u679C\u4F7F\u7528\u8CA0\u503C\uFF0C\u7D22\u5F15\u5C07\u5F9E\u7D50\u5C3E\u958B\u59CB\u9078\u64C7\u3002\n\u4F8B\u5982\uFF0C\u5C0D\u5305\u542B 5 \u500B\u5143\u7D20\u7684\u6578\u7D44\u9032\u884C\u5207\u7247\uFF0C\u5F9E 0 \u5230 -1 \u5C07\u50C5\u53D6\u5F9E\u7D22\u5F15 0 \u5230 3 \u7684\u5143\u7D20\u3002","Cuts a portion of an array off.":"\u5207\u4E0B\u6578\u7D44\u7684\u4E00\u90E8\u5206\u3002","Splice an array":"\u5207\u7247\u4E00\u500B\u6578\u7D44","Remove _PARAM3_ items from array _PARAM1_ starting from index _PARAM2_":"\u5F9E\u7D22\u5F15 _PARAM2_ \u958B\u59CB\uFF0C\u5F9E\u6578\u7D44 _PARAM1_ \u4E2D\u522A\u9664 _PARAM3_ \u500B\u9805\u76EE","The array to remove items from":"\u5F9E\u4E2D\u522A\u9664\u9805\u76EE\u7684\u6578\u7D44","The index to start removing from":"\u958B\u59CB\u522A\u9664\u7684\u7D22\u5F15","If you use a negative value, the index will be selected beginning from the end.":"\u5982\u679C\u4F7F\u7528\u8CA0\u503C\uFF0C\u7D22\u5F15\u5C07\u5F9E\u7D50\u5C3E\u958B\u59CB\u9078\u64C7\u3002","The amount of elements to remove":"\u8981\u522A\u9664\u7684\u5143\u7D20\u6578\u91CF","Set to 0 to remove until the end of the array.":"\u8A2D\u7F6E\u70BA 0 \u4EE5\u522A\u9664\u76F4\u5230\u6578\u7D44\u7684\u672B\u5C3E\u3002","Combines all elements of 2 scene arrays into one new scene array.":"\u5C07 2 \u500B\u5834\u666F\u6578\u7D44\u7684\u6240\u6709\u5143\u7D20\u5408\u4F75\u6210\u4E00\u500B\u65B0\u7684\u5834\u666F\u6578\u7D44\u3002","Combine 2 arrays":"\u5408\u4F75 2 \u500B\u6578\u7D44","Combine array _PARAM1_ and _PARAM2_ into _PARAM3_":"\u5C07\u6578\u7D44 _PARAM1_ \u548C _PARAM2_ \u5408\u4F75\u6210 _PARAM3_","The first array":"\u7B2C\u4E00\u500B\u6578\u7D44","The second array":"\u7B2C\u4E8C\u500B\u6578\u7D44","The variable to store the new array in":"\u5C07\u65B0\u6578\u7D44\u5B58\u5132\u5728\u7684\u8B8A\u6578","Appends a copy of all variables of one array to another array.":"\u5C07\u4E00\u500B\u6578\u7D44\u7684\u6240\u6709\u8B8A\u91CF\u7684\u526F\u672C\u9644\u52A0\u5230\u53E6\u4E00\u500B\u6578\u7D44\u3002","Append all variable to another array":"\u5C07\u6240\u6709\u8B8A\u91CF\u9644\u52A0\u5230\u53E6\u4E00\u500B\u6578\u7D44","Append all elements from array _PARAM1_ into _PARAM2_":"\u5C07\u6578\u7D44 _PARAM1_ \u7684\u6240\u6709\u5143\u7D20\u9644\u52A0\u5230 _PARAM2_ \u4E2D","The array to get the variables from":"\u5F9E\u4E2D\u7372\u53D6\u8B8A\u91CF\u7684\u6578\u7D44","The variable to append the variables in":"\u5C07\u8B8A\u91CF\u9644\u52A0\u5230\u7684\u8B8A\u91CF","Reverses children of an array. The first array child becomes the last, and the last array child becomes the first.":"\u53CD\u8F49\u6578\u7D44\u7684\u5B50\u4EE3\u3002\u7B2C\u4E00\u500B\u6578\u7D44\u5B50\u4EE3\u8B8A\u70BA\u6700\u5F8C\u4E00\u500B\uFF0C\u6700\u5F8C\u4E00\u500B\u6578\u7D44\u5B50\u4EE3\u8B8A\u70BA\u7B2C\u4E00\u500B\u3002","Reverse an array":"\u53CD\u8F49\u4E00\u500B\u6578\u7D44","Reverse array _PARAM1_":"\u53CD\u8F49\u6578\u7D44 _PARAM1_","The array to reverse":"\u8981\u53CD\u8F49\u7684\u6578\u7D44","Fill an element with a number.":"\u4F7F\u7528\u4E00\u500B\u6578\u5B57\u586B\u5145\u4E00\u500B\u5143\u7D20\u3002","Fill array with number":"\u4F7F\u7528\u6578\u5B57\u586B\u5145\u6578\u7D44","Fill array _PARAM1_ with _PARAM2_ from index _PARAM3_ to index _PARAM4_":"\u5F9E\u7D22\u5F15 _PARAM3_ \u5230\u7D22\u5F15 _PARAM4_ \u4F7F\u7528 _PARAM2_ \u586B\u5145\u6578\u7D44 _PARAM1_","The array to fill":"\u586B\u5145\u7684\u6578\u7D44","The number to fill":"\u586B\u5145\u7684\u6578\u5B57","The index to start filling from":"\u958B\u59CB\u586B\u5145\u7684\u7D22\u5F15","The index to stop filling at":"\u505C\u6B62\u586B\u5145\u7684\u7D22\u5F15","Set to 0 to fill until the end of the array.":"\u8A2D\u7F6E\u70BA 0 \u4EE5\u586B\u5145\u5230\u6578\u7D44\u7684\u672B\u5C3E\u3002","Shuffles all children of an array.":"\u5C0D\u6578\u7D44\u7684\u6240\u6709\u5B50\u5143\u7D20\u9032\u884C\u6D17\u724C\u3002","Shuffle array":"\u6D17\u724C\u6578\u7D44","Shuffle array _PARAM1_":"\u6D17\u724C\u6578\u7D44 _PARAM1_","The array to shuffle":"\u8981\u6D17\u724C\u7684\u6578\u7D44","Replaces all arrays inside of an array with their children. For example, [[1,2], [3,4]] becomes [1,2,3,4].":"\u5C07\u6578\u7D44\u5167\u6240\u6709\u7684\u6578\u7D44\u66FF\u63DB\u70BA\u5176\u5B50\u5143\u7D20\u3002\u4F8B\u5982\uFF0C[[1,2], [3,4]] \u8B8A\u6210 [1,2,3,4]\u3002","Flatten array":"\u5C55\u958B\u6578\u7D44","Flatten array _PARAM1_ (Deeply flatten: _PARAM2_)":"\u5C55\u958B\u6578\u7D44 _PARAM1_\uFF08\u6DF1\u5EA6\u5C55\u958B\uFF1A_PARAM2_\uFF09","The array to flatten":"\u8981\u5C55\u958B\u7684\u6578\u7D44","Deeply flatten":"\u6DF1\u5EA6\u5C55\u958B","If yes, will continue flattening until there is no arrays in the array anymore.":"\u5982\u679C\u662F\uFF0C\u5C07\u7E7C\u7E8C\u5C55\u958B\u76F4\u5230\u6578\u7D44\u4E2D\u4E0D\u518D\u6709\u6578\u7D44\u70BA\u6B62\u3002","Removes the last array child of an array, and stores it in another variable.":"\u522A\u9664\u6578\u7D44\u7684\u6700\u5F8C\u4E00\u500B\u5B50\u5143\u7D20\uFF0C\u4E26\u5C07\u5176\u5B58\u5132\u5728\u53E6\u4E00\u500B\u8B8A\u91CF\u4E2D\u3002","Pop array child":"\u5F48\u51FA\u6578\u7D44\u5B50\u5143\u7D20","The array to pop a child from":"\u8981\u5F9E\u5F48\u51FA\u5B50\u5143\u7D20\u7684\u6578\u7D44","The variable to store the popped value into":"\u5C07\u5F48\u51FA\u7684\u503C\u5B58\u5132\u5230\u7684\u8B8A\u91CF","Removes the first array child of an array, and stores it in another variable.":"\u522A\u9664\u6578\u7D44\u7684\u7B2C\u4E00\u500B\u5B50\u5143\u7D20\uFF0C\u4E26\u5C07\u5176\u5B58\u5132\u5728\u53E6\u4E00\u500B\u8B8A\u91CF\u4E2D\u3002","Shift array child":"\u79FB\u5230\u6578\u7D44\u5B50\u5143\u7D20","Remove first child of _PARAM1_ and store it in _PARAM2_":"\u5F9E _PARAM1_ \u4E2D\u522A\u9664\u7B2C\u4E00\u500B\u5B50\u5143\u7D20\u4E26\u5C07\u5176\u5B58\u5132\u5728 _PARAM2_ \u4E2D","The array to shift a child from":"\u5F9E\u4E2D\u79FB\u52D5\u5B50\u5143\u7D20\u7684\u6578\u7D44","The variable to store the shifted value into":"\u5C07\u79FB\u52D5\u7684\u503C\u5B58\u5132\u5230\u8B8A\u6578\u4E2D","Insert a variable at a specific index of an array.":"\u5728\u6578\u7D44\u7684\u7279\u5B9A\u7D22\u5F15\u4E2D\u63D2\u5165\u8B8A\u91CF\u3002","Insert variable at":"\u63D2\u5165\u8B8A\u91CF\u5728","Insert variable _PARAM3_ in _PARAM1_ at index _PARAM2_":"\u5728 _PARAM1_ \u7684\u7D22\u5F15 _PARAM2_ \u4E2D\u63D2\u5165\u8B8A\u91CF _PARAM3_","The array to insert a variable in":"\u8981\u5728\u5176\u4E2D\u63D2\u5165\u8B8A\u91CF\u7684\u6578\u7D44","The index to insert the variable at":"\u8981\u5728\u5176\u4E2D\u63D2\u5165\u8B8A\u91CF\u7684\u7D22\u5F15","The name of the variable to insert":"\u8981\u63D2\u5165\u7684\u8B8A\u91CF\u7684\u540D\u7A31","Split a string into an array of strings via a separator.":"\u901A\u904E\u5206\u9694\u7B26\u5C07\u5B57\u7B26\u4E32\u5206\u5272\u70BA\u5B57\u7B26\u4E32\u6578\u7D44\u3002","Split string into array":"\u5C07\u5B57\u7B26\u4E32\u5206\u5272\u70BA\u6578\u7D44","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM3_":"\u901A\u904E\u5206\u9694\u7B26 _PARAM2_ \u5C07\u5B57\u7B26\u4E32 _PARAM1_ \u5206\u5272\u70BA\u6578\u7D44 _PARAM3_","The string to split":"\u8981\u5206\u5272\u7684\u5B57\u7B26\u4E32","The separator to use to split the string":"\u7528\u65BC\u62C6\u5206\u5B57\u7B26\u4E32\u7684\u5206\u9694\u7B26","For example, if you have a string \"Hello World\", and the separator is a space (\" \"), the resulting array would be [\"Hello\", \"World\"]. If the separator is an empty string (\"\"), it will make an element per character ([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]).":"\u4F8B\u5982\uFF0C\u5982\u679C\u60A8\u6709\u4E00\u500B\u5B57\u7B26\u4E32\"Hello World\"\uFF0C\u4E26\u4E14\u5206\u9694\u7B26\u662F\u7A7A\u683C(\" \")\uFF0C\u5247\u7522\u751F\u7684\u6578\u7D44\u5C07\u662F[\"Hello\", \"World\"]\u3002\u5982\u679C\u5206\u9694\u7B26\u662F\u7A7A\u5B57\u7B26\u4E32(\" \")\uFF0C\u5B83\u5C07\u4F7F\u6BCF\u500B\u5B57\u7B26\u6210\u70BA\u4E00\u500B\u5143\u7D20([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"])\u3002","Array where to store the results":"\u5B58\u5132\u7D50\u679C\u7684\u6578\u7D44","Returns a string made from all strings in an array.":"\u7531\u6578\u7D44\u4E2D\u6240\u6709\u5B57\u7B26\u4E32\u7D44\u6210\u7684\u5B57\u7B26\u4E32","Join all elements of an array together into a string":"\u5C07\u6578\u7D44\u4E2D\u7684\u6240\u6709\u5143\u7D20\u9023\u63A5\u6210\u4E00\u500B\u5B57\u7B26\u4E32","The name of the array to join into a string":"\u8981\u9023\u63A5\u70BA\u5B57\u7B26\u4E32\u7684\u6578\u7D44\u7684\u540D\u7A31","Optional separator text between each element":"\u6BCF\u500B\u5143\u7D20\u4E4B\u9593\u7684\u53EF\u9078\u5206\u9694\u7B26\u6587\u672C","Get the sum of all numbers in an array.":"\u7372\u53D6\u6578\u7D44\u4E2D\u6240\u6709\u6578\u5B57\u7684\u7E3D\u548C","Sum of array children":"\u6578\u7D44\u5B50\u9805\u7684\u7E3D\u548C","The array":"\u8A72\u6578\u7D44","Gets the smallest number in an array.":"\u7372\u53D6\u6578\u7D44\u4E2D\u6700\u5C0F\u7684\u6578\u5B57","Smallest value":"\u6700\u5C0F\u503C","Gets the biggest number in an array.":"\u7372\u53D6\u6578\u7D44\u4E2D\u6700\u5927\u7684\u6578\u5B57","Biggest value":"\u6700\u5927\u503C","Gets the average number in an array.":"\u7372\u53D6\u6578\u7D44\u4E2D\u7684\u5E73\u5747\u6578","Average value":"\u5E73\u5747\u503C","Gets the median number in an array.":"\u7372\u53D6\u6578\u7D44\u4E2D\u7684\u4E2D\u9593\u6578","Median value":"\u4E2D\u9593\u503C","Sort an array of number from smallest to biggest.":"\u5F9E\u6700\u5C0F\u5230\u6700\u5927\u6392\u5E8F\u6578\u7D44\u4E2D\u7684\u6578\u5B57","Sort an array":"\u6392\u5E8F\u6578\u7D44","Sort array _PARAM1_":"\u6392\u5E8F\u6578\u7D44_PARAM1_","The array to sort":"\u8981\u6392\u5E8F\u7684\u6578\u7D44","The first index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"\u5728_PARAM1_\u7684_PARAM2_\u4E2D\u627E\u5230_PARAM3_\u7684\u7B2C\u4E00\u500B\u7D22\u5F15","The object the variable is from":"\u8B8A\u91CF\u4F86\u81EA\u7684\u5C0D\u8C61","The last index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"\u5728_PARAM1_\u7684_PARAM2_\u4E2D\u627E\u5230_PARAM3_\u7684\u6700\u5F8C\u4E00\u500B\u7D22\u5F15","A randomly picked number of _PARAM2_ of _PARAM1_":"\u5F9E_PARAM1_\u7684_PARAM2_\u4E2D\u96A8\u6A5F\u9078\u64C7\u6578\u5B57","A randomly picked string of _PARAM2_ of _PARAM1_":"\u5F9E_PARAM1_\u7684_PARAM2_\u4E2D\u96A8\u6A5F\u9078\u64C7\u5B57\u7B26\u4E32","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM3_":"\u522A\u9664_PARAM1_\u7684_PARAM2_\u7684\u6700\u5F8C\u4E00\u500B\u5B50\u5143\u7D20\u4E26\u5C07\u5176\u5B58\u5132\u5728_PARAM3_\u4E2D","Array _PARAM2_ of _PARAM1_ has number _PARAM3_":"_PARAM1_\u7684_PARAM2_\u5728_PARAM3_\u4E2D\u5177\u6709\u6578\u5B57","Array _PARAM2_ of _PARAM1_ has string _PARAM3_":"_PARAM1_\u7684_PARAM2_\u5728_PARAM3_\u4E2D\u5177\u6709\u5B57\u7B26\u4E32","Slice array _PARAM2_ of _PARAM1_ from indices _PARAM5_ to _PARAM6_ into _PARAM4_ of _PARAM3_":"\u5F9E\u7D22\u5F15\u70BA_PARAM5_\u5230_PARAM6_\u7684_PARAM1_\u6578\u7D44\u5207\u7247\u70BA_PARAM4_\u7684_PARAM3_","Remove _PARAM4_ items from array _PARAM2_ of _PARAM1_ starting from index _PARAM3_":"\u5F9E\u7D22\u5F15\u70BA_PARAM3_\u958B\u59CB\uFF0C\u79FB\u9664_PARAM4_\u7684_PARAM1_\u6578\u7D44\u4E2D\u7684\u9805\u76EE","Combine array _PARAM2_ of _PARAM1_ and _PARAM4_ of _PARAM3_ into _PARAM6_ of _PARAM5_":"\u5C07_PARAM1_\u548C_PARAM3_\u7684_PARAM4_\u6578\u7D44\u7D50\u5408\u70BA_PARAM5_\u7684_PARAM6_","Append all elements from array _PARAM2_ of _PARAM1_ into _PARAM4_ of _PARAM3_":"\u5C07_PARAM2_\u7684_PARAM1_\u6578\u7D44\u7684\u6240\u6709\u5143\u7D20\u9644\u52A0\u5230_PARAM3_\u7684_PARAM4_\u4E2D","Reverse array _PARAM2_ of _PARAM1_":"\u53CD\u8F49_PARAM1_\u7684_PARAM2_\u6578\u7D44","Fill array _PARAM2_ of _PARAM1_ with _PARAM3_ from index _PARAM4_ to index _PARAM5_":"\u5F9E\u7D22\u5F15_PARAM4_\u5230\u7D22\u5F15_PARAM5_\u7528_PARAM3_\u586B\u5145_PARAM1_\u6578\u7D44","Shuffle array _PARAM2_ of _PARAM1_":"\u5C07_PARAM1_\u7684_PARAM2_\u6578\u7D44\u6D17\u724C","Flatten array _PARAM2_ of _PARAM1_ (Deeply flatten: _PARAM3_)":"\u5C07_PARAM1_\u7684_PARAM2_\u6578\u7D44\u5C55\u5E73\uFF08\u6DF1\u5C64\u5C55\u5E73\uFF1A_PARAM3_\uFF09","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"\u5F9E_PARAM1_\u7684_PARAM2_\u6578\u7D44\u4E2D\u79FB\u9664\u6700\u5F8C\u4E00\u500B\u5B50\u5143\u7D20\u4E26\u5C07\u5176\u5B58\u5132\u5728_PARAM3_\u7684_PARAM4_\u4E2D","Remove first child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"\u5F9E_PARAM1_\u7684_PARAM2_\u6578\u7D44\u4E2D\u79FB\u9664\u7B2C\u4E00\u500B\u5B50\u5143\u7D20\u4E26\u5C07\u5176\u5B58\u5132\u5728_PARAM3_\u7684_PARAM4_\u4E2D","Insert variable _PARAM5_ of _PARAM4_ in _PARAM2_ of _PARAM1_ at index _PARAM3_":"\u5728_PARAM1_\u7684_PARAM2_\u6578\u7D44\u4E2D\u7684\u7D22\u5F15_PARAM3_\u63D2\u5165_PARAM4_\u7684_PARAM5_\u8B8A\u91CF","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM4_ of _PARAM3_":"\u901A\u904E\u5206\u9694\u7B26_PARAM2_\u5C07_PARAM1_\u5B57\u7B26\u4E32\u5206\u5272\u70BA_PARAM3_\u7684_PARAM4_\u6578\u7D44","Sort array _PARAM2_ of _PARAM1_":"\u5C0D_PARAM1_\u7684_PARAM2_\u6578\u7D44\u9032\u884C\u6392\u5E8F","Platforms Validation":"\u5E73\u53F0\u9A57\u8B49","Checks if the game is currently executed on an allowed platform (for web).":"\u6AA2\u67E5\u904A\u6232\u7576\u524D\u662F\u5426\u5728\u5141\u8A31\u7684\u5E73\u53F0\u4E0A\u57F7\u884C\uFF08\u7528\u65BCWeb\uFF09\u3002","Checks if the game is executed on an authorized platform (preferably, run this only once at beginning of the game).":"\u6AA2\u67E5\u904A\u6232\u662F\u5426\u5728\u6388\u6B0A\u7684\u5E73\u53F0\u4E0A\u904B\u884C\uFF08\u6700\u597D\u53EA\u5728\u904A\u6232\u958B\u59CB\u6642\u57F7\u884C\u4E00\u6B21\uFF09\u3002","Is the game running on an authorized platform":"\u904A\u6232\u662F\u5426\u5728\u6388\u6B0A\u7684\u5E73\u53F0\u4E0A\u904B\u884C","The game is running on a authorized platform":"\u904A\u6232\u6B63\u5728\u6388\u6B0A\u7684\u5E73\u53F0\u4E0A\u904B\u884C","Get the referrer's location (the domain of the website that hosts your game).":"\u7372\u53D6\u5F15\u85A6\u8005\u7684\u4F4D\u7F6E\uFF08\u4E3B\u6A5F\u6E38\u6232\u7684\u7DB2\u7AD9\u57DF\u540D\uFF09\u3002","Get referrer location":"\u7372\u53D6\u5F15\u85A6\u8005\u4F4D\u7F6E","Adds a new valid platform (domain name where the game is expected to be played, for example, gd.games).":"\u6DFB\u52A0\u65B0\u7684\u6709\u6548\u5E73\u53F0\uFF08\u9810\u8A08\u904A\u6232\u5728\u5176\u4E2D\u904B\u884C\u7684\u57DF\u540D\uFF0C\u4F8B\u5982\uFF0Cgd.games\uFF09\u3002","Add a valid platform":"\u6DFB\u52A0\u6709\u6548\u5E73\u53F0","Add _PARAM1_ as valid platform":"\u6DFB\u52A0_PARAM1_\u70BA\u6709\u6548\u5E73\u53F0","Domain name (e.g : gd.games)":"\u57DF\u540D\uFF08\u4F8B\u5982\uFF1Agd.games\uFF09","Check if a domain is contained in the authorized list array.":"\u6AA2\u67E5\u57DF\u540D\u662F\u5426\u5305\u542B\u5728\u6388\u6B0A\u5217\u8868\u6578\u7D44\u4E2D\u3002","Check if a domain is contained in the authorized list":"\u6AA2\u67E5\u57DF\u540D\u662F\u5426\u5305\u542B\u5728\u6388\u6B0A\u5217\u8868\u4E2D","Check if _PARAM1_ is in the list of authorized platforms":"\u6AA2\u67E5_PARAM1_\u662F\u5426\u5728\u6388\u6B0A\u5E73\u53F0\u5217\u8868\u4E2D","Domain to check":"\u8981\u6AA2\u67E5\u7684\u57DF\u540D","Auto typing animation for text (\"typewriter\" effect)":"\u6587\u672C\u7684\u81EA\u52D5\u6253\u5B57\u52D5\u756B\uFF08\u201C\u6253\u5B57\u6A5F\u201D\u6548\u679C\uFF09","Reveal a text one letter after the other.":"\u4E00\u6B21\u986F\u793A\u4E00\u500B\u5B57\u6BCD\u7684\u6587\u672C\u3002","User interface":"\u4F7F\u7528\u8005\u4ECB\u9762","Auto typing text":"\u81EA\u52D5\u8F38\u5165\u6587\u672C","Text capability":"\u6587\u672C\u529F\u80FD","Time between characters":"\u5B57\u7B26\u4E4B\u9593\u7684\u6642\u9593","Detect if a new text character was just displayed":"\u6AA2\u6E2C\u662F\u5426\u525B\u525B\u986F\u793A\u4E86\u4E00\u500B\u65B0\u7684\u6587\u672C\u5B57\u7B26","Is next word wrapped":"\u4E0B\u4E00\u500B\u8A5E\u662F\u5426\u88AB\u63DB\u884C","_PARAM0_ next word is wrapped":"_PARAM0_\u4E0B\u4E00\u500B\u8A5E\u88AB\u63DB\u884C","Clear forced line breaks":"\u6E05\u9664\u5F37\u5236\u63DB\u884C","Clear forced line breaks in _PARAM0_":"\u6E05\u9664_PARAM0_\u4E2D\u7684\u5F37\u5236\u63DB\u884C","Check if the full text has been typed.":"\u6AA2\u67E5\u5B8C\u6574\u6587\u672C\u662F\u5426\u5DF2\u8F38\u5165\u3002","Finished typing":"\u8F38\u5165\u5B8C\u6210","_PARAM0_ finished typing":"_PARAM0_\u8F38\u5165\u5B8C\u6210","Check if a character has just been typed. Useful for triggering sound effects.":"\u6AA2\u67E5\u662F\u5426\u525B\u525B\u8F38\u5165\u5B57\u7B26\u3002\u53EF\u7528\u65BC\u89F8\u767C\u97F3\u6548\u3002","Has just typed":"\u525B\u525B\u8F38\u5165","_PARAM0_ has just typed a character":"_PARAM0_\u525B\u525B\u8F38\u5165\u5B57\u7B26","Restart typing from the beginning of text. The autotyping also start automatically when a new text is set for the object.":"\u5F9E\u6587\u672C\u958B\u59CB\u91CD\u65B0\u8F38\u5165\u3002\u7576\u70BA\u5C0D\u8C61\u8A2D\u7F6E\u65B0\u6587\u672C\u6642\uFF0C\u81EA\u52D5\u555F\u52D5\u81EA\u52D5\u8F38\u5165\u3002","Restart typing from the beginning":"\u5F9E\u958B\u59CB\u91CD\u65B0\u8F38\u5165","Restart typing from the beginning on _PARAM0_":"\u5F9E_PARAM0_\u958B\u59CB\u91CD\u65B0\u8F38\u5165","Jump to a specific position in the text. Positions start at \"0\" and increase by one for every character.":"\u8DF3\u5230\u6587\u672C\u4E2D\u7279\u5B9A\u4F4D\u7F6E\u3002\u4F4D\u7F6E\u5F9E\u201C0\u201D\u958B\u59CB\uFF0C\u6BCF\u500B\u5B57\u7B26\u589E\u52A0\u4E00\u500B\u3002","Show Nth first characters":"\u986F\u793A\u524DN\u500B\u5B57\u7B26","Show _PARAM2_ first characters on _PARAM0_":"\u5728_PARAM0_\u4E0A\u986F\u793A_PARAM2_\u500B\u7B2C\u4E00\u500B\u5B57\u7B26","Character position":"\u5B57\u7B26\u4F4D\u7F6E","Show the full text.":"\u986F\u793A\u5B8C\u6574\u6587\u672C\u3002","Show the full text":"\u986F\u793A\u5B8C\u6574\u6587\u672C","Show the full text on _PARAM0_":"\u986F\u793A\u5B8C\u6574\u6587\u672C_PARAM0_","the time between characters beign typed.":"\u6B63\u5728\u6253\u5B57\u5B57\u7B26\u4E4B\u9593\u7684\u6642\u9593\u3002","the time between characters":"\u5B57\u7B26\u4E4B\u9593\u7684\u6642\u9593","Android back button":"Android \u8FD4\u56DE\u6309\u9215","Allow to customize the behavior of the Android back button.":"\u5141\u8A31\u81EA\u5B9A\u7FA9 Android \u8FD4\u56DE\u6309\u9215\u7684\u884C\u70BA\u3002","Input":"\u8F38\u5165","Triggers whenever the player presses the back button.":"\u6BCF\u7576\u73A9\u5BB6\u6309\u4E0B\u8FD4\u56DE\u6309\u9215\u6642\u89F8\u767C\u3002","Back button is pressed":"\u6309\u4E0B\u8FD4\u56DE\u6309\u9215","This simulates the normal action of the back button. \nThis action will quit the app when in a mobile app, and go back to the previous page when in a web browser.":"\u9019\u6A21\u64EC\u4E86\u8FD4\u56DE\u6309\u9215\u7684\u6B63\u5E38\u52D5\u4F5C\u3002\n\u7576\u5728\u79FB\u52D5\u61C9\u7528\u7A0B\u5E8F\u4E2D\u6642\uFF0C\u6B64\u64CD\u4F5C\u5C07\u9000\u51FA\u61C9\u7528\u7A0B\u5E8F\uFF1B\u5728Web\u700F\u89BD\u5668\u4E2D\u6642\uFF0C\u6B64\u64CD\u4F5C\u5C07\u8FD4\u56DE\u5230\u4E0A\u4E00\u500B\u9801\u9762\u3002","Trigger back button":"\u89F8\u767C\u8FD4\u56DE\u6309\u9215","Simulate back button press":"\u6A21\u64EC\u8FD4\u56DE\u6309\u9215\u58D3\u4E0B","Base conversion":"\u9032\u4F4D\u8F49\u63DB","Provides conversion expressions for numbers in different bases.":"\u63D0\u4F9B\u5C07\u6578\u5B57\u8F49\u63DB\u70BA\u4E0D\u540C\u9032\u5236\u7684\u8868\u9054\u5F0F\u3002","Advanced":"\u9032\u968E","Converts a string representing a number in a different base to a decimal number.":"\u5C07\u4EE5\u4E0D\u540C\u9032\u5236\u8868\u793A\u7684\u5B57\u7B26\u4E32\u8F49\u63DB\u70BA\u5341\u9032\u5236\u6578\u3002","Convert to decimal":"\u8F49\u63DB\u70BA\u5341\u9032\u5236","String representing a number":"\u8868\u793A\u6578\u5B57\u7684\u5B57\u7B26\u4E32","The base the number in the string is in":"\u5B57\u7B26\u4E32\u4E2D\u7684\u6578\u5B57\u6240\u5728\u7684\u57FA\u6578","Converts a number to a trsing representing it in another base.":"\u5C07\u6578\u5B57\u66F4\u63DB\u70BA\u53E6\u4E00\u500B\u9032\u5236\u4E2D\u8868\u793A\u5B83\u7684\u5B57\u7B26\u4E32\u3002","Convert to different base":"\u8F49\u63DB\u70BA\u4E0D\u540C\u9032\u5236","Number to convert":"\u8981\u8F49\u63DB\u7684\u6578\u5B57","The base to convert the number to":"\u8981\u8F49\u63DB\u70BA\u7684\u57FA\u6578","Platformer and top-down remapper":"\u5E73\u53F0\u904A\u6232\u548C\u4FEF\u8996\u91CD\u6620\u5C04","Quickly remap keyboard controls.":"\u5FEB\u901F\u91CD\u6620\u5C04\u9375\u76E4\u63A7\u5236\u3002","Remap keyboard controls of the top-down movement.":"\u91CD\u6620\u5C04\u9802\u90E8\u904B\u52D5\u7684\u9375\u76E4\u63A7\u5236\u3002","Top-down keyboard remapper":"\u4FEF\u8996\u9375\u76E4\u91CD\u6620\u5C04","Up key":"\u5411\u4E0A\u9375","Left key":"\u5DE6\u9375","Right key":"\u53F3\u9375","Down key":"\u4E0B\u9375","Remaps Top-Down behavior controls to a custom control scheme.":"\u5C07\u4E0A\u4E0B\u884C\u70BA\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u70BA\u81EA\u5B9A\u7FA9\u63A7\u5236\u65B9\u6848\u3002","Remap Top-Down controls to a custom scheme":"\u5C07\u4E0A\u4E0B\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u70BA\u81EA\u5B9A\u7FA9\u65B9\u6848","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_":"\u91CD\u65B0\u6620\u5C04_PARAM0_\u7684\u63A7\u4EF6\uFF1A\u4E0A\uFF1A_PARAM2_\uFF0C\u5DE6\uFF1A_PARAM3_\uFF0C\u4E0B\uFF1A_PARAM4_\uFF0C\u53F3\uFF1A_PARAM5_","Remaps Top-Down behavior controls to a preset control scheme.":"\u5C07\u4E0A\u4E0B\u884C\u70BA\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u70BA\u9810\u8A2D\u63A7\u5236\u65B9\u6848\u3002","Remap Top-Down controls to a preset":"\u5C07\u4E0A\u4E0B\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u70BA\u9810\u8A2D","Remap controls of _PARAM0_ to preset _PARAM2_":"\u5C07_PARAM0_\u7684\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u5230\u9810\u8A2D_PARAM2_","Preset name":"\u9810\u8A2D\u540D\u7A31","Remap keyboard controls of the platformer character movement.":"\u91CD\u6620\u5C04\u5E73\u53F0\u904A\u6232\u89D2\u8272\u904B\u52D5\u7684\u9375\u76E4\u63A7\u5236\u3002","Platformer keyboard mapper":"\u5E73\u53F0\u904A\u6232\u9375\u76E4\u6620\u5C04\u5668","Jump key":"\u8DF3\u8E8D\u9375","Remaps Platformer behavior controls to a custom control scheme.":"\u5C07\u5E73\u53F0\u52D5\u4F5C\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u70BA\u81EA\u5B9A\u7FA9\u63A7\u5236\u65B9\u6848\u3002","Remap Platformer controls to a custom scheme":"\u5C07\u5E73\u53F0\u52D5\u4F5C\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u70BA\u81EA\u5B9A\u7FA9\u65B9\u6848","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_, Jump: _PARAM6_":"\u91CD\u65B0\u6620\u5C04_PARAM0_\u7684\u63A7\u4EF6\uFF1A\u4E0A\uFF1A_PARAM2_\uFF0C\u5DE6\uFF1A_PARAM3_\uFF0C\u4E0B\uFF1A_PARAM4_\uFF0C\u53F3\uFF1A_PARAM5_\uFF0C\u8DF3\u8E8D\uFF1A_PARAM6_","Remaps Platformer behavior controls to a preset control scheme.":"\u5C07\u5E73\u53F0\u52D5\u4F5C\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u70BA\u9810\u8A2D\u63A7\u5236\u65B9\u6848\u3002","Remap Platformer controls to a preset":"\u5C07\u5E73\u53F0\u63A7\u4EF6\u91CD\u65B0\u6620\u5C04\u70BA\u9810\u8A2D","3D Billboard":"3D \u5EE3\u544A\u724C","Rotate 3D objects to appear like 2D sprites.":"\u65CB\u8F49 3D \u7269\u9AD4\uFF0C\u4F7F\u5176\u770B\u8D77\u4F86\u50CF 2D \u7CBE\u9748\u3002","Visual effect":"\u8996\u89BA\u6548\u679C","Rotate to always face the camera (only the front face of the cube should be enabled).":"\u59CB\u7D42\u9762\u5411\u651D\u50CF\u6A5F\u65CB\u8F49\uFF08\u61C9\u50C5\u555F\u7528\u65B9\u584A\u7684\u524D\u9762\uFF09\u3002","Billboard":"\u5EE3\u544A\u724C","3D capability":"3D capability","Should rotate on X axis":"\u61C9\u5728X\u8EF8\u4E0A\u65CB\u8F49","Should rotate on Y axis":"\u61C9\u8A72\u5728Y\u8EF8\u65CB\u8F49","Should rotate on Z axis":"\u61C9\u8A72\u5728Z\u8EF8\u65CB\u8F49","Offset position":"\u504F\u79FB\u4F4D\u7F6E","Rotate the object to the camera. This is also done automatically at the end of the scene events.":"\u5C07\u5C0D\u8C61\u65CB\u8F49\u5230\u76F8\u6A5F\u3002\u9019\u4E5F\u6703\u5728\u5834\u666F\u4E8B\u4EF6\u7D50\u675F\u6642\u81EA\u52D5\u5B8C\u6210\u3002","Rotate to face the camera":"\u65CB\u8F49\u9762\u5411\u76F8\u6A5F","Rotate _PARAM0_ to the camera":"\u5C07_PARAM0_\u65CB\u8F49\u5230\u76F8\u6A5F","Check if the object should rotate on X axis.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u61C9\u8A72\u5728X\u8EF8\u4E0A\u65CB\u8F49\u3002","_PARAM0_ should rotate on X axis":"_PARAM0_\u61C9\u8A72\u5728X\u8EF8\u4E0A\u65CB\u8F49","Change if the object should rotate on X axis.":"\u66F4\u6539\u5C0D\u8C61\u662F\u5426\u61C9\u8A72\u5728X\u8EF8\u4E0A\u65CB\u8F49\u3002","_PARAM0_ should rotate on X axis: _PARAM2_":"_PARAM0_\u61C9\u5728X\u8EF8\u4E0A\u65CB\u8F49\uFF1A_PARAM2_","ShouldRotateX":"\u61C9\u8A72\u5728X\u8EF8\u4E0A\u65CB\u8F49","Check if the object should rotate on Y axis.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u61C9\u8A72\u5728Y\u8EF8\u4E0A\u65CB\u8F49\u3002","_PARAM0_ should rotate on Y axis":"_PARAM0_\u61C9\u8A72\u5728Y\u8EF8\u4E0A\u65CB\u8F49","Change if the object should rotate on Y axis.":"\u66F4\u6539\u5C0D\u8C61\u662F\u5426\u61C9\u5728Y\u8EF8\u4E0A\u65CB\u8F49\u3002","_PARAM0_ should rotate on Y axis: _PARAM2_":"_PARAM0_\u61C9\u5728Y\u8EF8\u4E0A\u65CB\u8F49\uFF1A_PARAM2_","ShouldRotateY":"\u61C9\u8A72\u5728Y\u8EF8\u4E0A\u65CB\u8F49","Check if the object should rotate on Z axis.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u61C9\u8A72\u5728Z\u8EF8\u4E0A\u65CB\u8F49\u3002","_PARAM0_ should rotate on Z axis":"_PARAM0_\u61C9\u8A72\u5728Z\u8EF8\u4E0A\u65CB\u8F49","Change if the object should rotate on Z axis.":"\u66F4\u6539\u5C0D\u8C61\u662F\u5426\u61C9\u8A72\u5728Z\u8EF8\u4E0A\u65CB\u8F49\u3002","_PARAM0_ should rotate on Z axis: _PARAM2_":"_PARAM0_ \u61C9\u8A72\u7E5E Z \u8EF8\u65CB\u8F49\uFF1A_PARAM2_","ShouldRotateZ":"ShouldRotateZ","Enable texture transparency of the front face.":"\u555F\u7528\u5C0D\u6B63\u9762\u6750\u8CEA\u7684\u900F\u660E\u5EA6\u3002","Enable texture transparency":"\u555F\u7528\u6750\u8CEA\u900F\u660E\u5EA6","Enable texture transparency of _PARAM0_":"\u555F\u7528 _PARAM0_ \u7684\u6750\u8CEA\u900F\u660E\u5EA6","Boids movement":"Boids \u904B\u52D5","Simulates flocks movement.":"\u6A21\u64EC\u7FA4\u9AD4\u904B\u52D5\u3002","Define helper classes JavaScript code.":"\u5B9A\u7FA9\u8F14\u52A9\u985E\u5225JavaScript\u4EE3\u78BC\u3002","Define helper classes":"\u5B9A\u7FA9\u8F14\u52A9\u985E\u5225","Define helper classes JavaScript code":"\u5B9A\u7FA9\u8F14\u52A9\u985E\u5225JavaScript\u4EE3\u78BC","Move as part of a flock.":"\u4F5C\u70BA\u4E00\u500B\u7FA4\u7684\u4E00\u90E8\u5206\u79FB\u52D5\u3002","Boids Movement":"Boids\u904B\u52D5","Maximum speed":"\u6700\u5927\u901F\u5EA6","Maximum acceleration":"\u6700\u5927\u52A0\u901F\u5EA6","Rotate object":"\u65CB\u8F49\u7269\u9AD4","Cohesion sight radius":"\u51DD\u805A\u8996\u91CE\u534A\u5F91","Sight":"\u8996\u7DDA","Alignement sight radius":"\u6392\u5217\u8996\u91CE\u534A\u5F91","Separation sight radius":"\u5206\u96E2\u8996\u91CE\u534A\u5F91","Cohesion decision weight":"\u51DD\u805A\u6C7A\u7B56\u6B0A\u91CD","Decision":"\u6C7A\u7B56","Alignment decision weight":"\u6392\u5217\u6C7A\u7B56\u6B0A\u91CD","Separation decision weight":"\u5206\u96E2\u6C7A\u7B56\u6B0A\u91CD","Collision layer":"\u78B0\u649E\u5C64","Intend to move in a given direction.":"\u6253\u7B97\u671D\u7279\u5B9A\u65B9\u5411\u79FB\u52D5\u3002","Move in a direction":"\u671D\u7279\u5B9A\u65B9\u5411\u79FB\u52D5","_PARAM0_ intent to move in the direction _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ \u6253\u7B97\u5F80\u65B9\u5411 _PARAM2_ \u79FB\u52D5\uFF1B_PARAM3_\uFF08\u6C7A\u7B56\u6B0A\u91CD\uFF1A_PARAM4_\uFF09","Direction X":"X \u65B9\u5411","Direction Y":"Y \u65B9\u5411","Decision weight":"\u6C7A\u7B56\u6B0A\u91CD","Intend to move toward a position.":"\u6253\u7B97\u671D\u4E00\u500B\u4F4D\u7F6E\u79FB\u52D5\u3002","Move toward a position":"\u671D\u4E00\u500B\u4F4D\u7F6E\u79FB\u52D5","_PARAM0_ intend to move toward _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ \u6253\u7B97\u671D _PARAM2_ \u79FB\u52D5\uFF1B_PARAM3_\uFF08\u6C7A\u7B56\u6B0A\u91CD\uFF1A_PARAM4_\uFF09","Target X":"\u76EE\u6807 X","Target Y":"\u76EE\u6807 Y","Intend to move toward an object.":"\u6253\u7B97\u671D\u4E00\u500B\u7269\u9AD4\u79FB\u52D5\u3002","Move toward an object":"\u671D\u4E00\u500B\u7269\u9AD4\u79FB\u52D5","_PARAM0_ intend to move toward _PARAM2_ (decision weight: _PARAM3_)":"_PARAM0_ \u6253\u7B97\u671D _PARAM2_ \u79FB\u52D5\uFF08\u6C7A\u7B56\u6B0A\u91CD\uFF1A_PARAM3_\uFF09","Targeted object":"\u76EE\u6A19\u7269\u9AD4","Intend to avoid an area with a given center and radius.":"\u6253\u7B97\u907F\u514D\u5728\u7D66\u5B9A\u4E2D\u5FC3\u548C\u534A\u5F91\u7684\u5340\u57DF\u5167\u3002","Avoid a position":"\u907F\u514D\u4E00\u500B\u4F4D\u7F6E","_PARAM0_ intend to avoid a radius of _PARAM4_ around _PARAM2_; _PARAM3_ (decision weight: _PARAM5_)":"_PARAM0_ \u6253\u7B97\u907F\u514D _PARAM2_ \u5468\u570D _PARAM4_ \u7684\u534A\u5F91\uFF1B_PARAM3_\uFF08\u6C7A\u7B56\u6B0A\u91CD\uFF1A_PARAM5_\uFF09","Center X":"\u4E2D\u5FC3 X","Center Y":"\u4E2D\u5FC3 Y","Radius":"\u534A\u5F91","Intend to avoid an area from an object center and a given radius.":"\u6253\u7B97\u907F\u514D\u5F9E\u7269\u9AD4\u4E2D\u5FC3\u548C\u7D66\u5B9A\u534A\u5F91\u7684\u5340\u57DF","Avoid an object":"\u907F\u514D\u4E00\u500B\u7269\u9AD4","_PARAM0_ intend to avoid a radius of _PARAM3_ around _PARAM2_ (decision weight: _PARAM4_)":"_PARAM0_ \u6253\u7B97\u907F\u514D _PARAM2_ \u5468\u570D _PARAM3_ \u7684\u534A\u5F91\uFF08\u6C7A\u7B56\u6B0A\u91CD\uFF1A_PARAM4_\uFF09","Avoided object":"\u88AB\u907F\u514D\u7684\u7269\u9AD4","Return the current speed.":"\u8FD4\u56DE\u7576\u524D\u901F\u5EA6\u3002","Speed":"\u901F\u5EA6","Return the current horizontal speed.":"\u8FD4\u56DE\u7576\u524D\u6C34\u5E73\u901F\u5EA6\u3002","Velocity X":"\u901F\u5EA6 X","Return the current vertical speed.":"\u8FD4\u56DE\u7576\u524D\u5782\u76F4\u901F\u5EA6\u3002","Velocity Y":"\u901F\u5EA6 Y","Check if the object is rotated while moving on its path.":"\u6AA2\u67E5\u7269\u9AD4\u5728\u79FB\u52D5\u8DEF\u5F91\u4E0A\u662F\u5426\u65CB\u8F49\u3002","Object Rotated":"\u7269\u9AD4\u5DF2\u65CB\u8F49","_PARAM0_ is rotated when moving":"_PARAM0_ \u79FB\u52D5\u6642\u6703\u65CB\u8F49","Return the maximum speed.":"\u8FD4\u56DE\u6700\u5927\u901F\u5EA6\u3002","Change the maximum speed of the object.":"\u66F4\u6539\u7269\u9AD4\u7684\u6700\u5927\u901F\u5EA6\u3002","Change the maximum speed of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u6700\u5927\u901F\u5EA6\u70BA _PARAM2_","Max Speed":"\u6700\u5927\u901F\u5EA6","Return the maximum acceleration.":"\u8FD4\u56DE\u6700\u5927\u52A0\u901F\u5EA6\u3002","Change the maximum acceleration of the object.":"\u66F4\u6539\u7269\u9AD4\u7684\u6700\u5927\u52A0\u901F\u5EA6\u3002","Change the maximum acceleration of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u6700\u5927\u52A0\u901F\u5EA6\u70BA _PARAM2_","Steering Force":"\u8F49\u5411\u529B","Return the cohesion sight radius.":"\u8FD4\u56DE\u76F8 cohesion \u901A\u534A\u5F91\u3002","Change the cohesion sight radius.":"\u66F4\u6539 cohesionsight\u534A\u5F91\u3002","Change the cohesion sight radius of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u51DD\u805A\u8996\u91CE\u534A\u5F91\u70BA _PARAM2_","Value":"\u6570\u503C","Return the alignment sight radius.":"\u8FD4\u56DE outline sight \u534A\u5F91\u3002","Alignment sight radius":"Alignment sight \u534A\u5F91","Change the alignment sight radius of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u5C0D\u9F4A\u8996\u91CE\u534A\u5F91\u70BA _PARAM2_","Return the separation sight radius.":"\u8FD4\u56DE outline sight \u534A\u5F91\u3002","Change the separation sight radius of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u5206\u96E2\u8996\u91CE\u534A\u5F91\u70BA _PARAM2_","Return which weight the cohesion takes in the chosen direction.":"\u8FD4\u56DE cohesions \u7684\u6B0A\u91CD\u3002","Cohesion weight":"\u9023\u63A5\u6B0A\u91CD","Change the weight the cohesion takes in the chosen direction.":"\u66F4\u6539 cohesions \u6B0A\u91CD\u3002","Change the cohesion weight of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u51DD\u805A\u6B0A\u91CD\u70BA _PARAM2_","Return which weight the alignment takes in the chosen direction.":"\u8FD4\u56DE alignment \u7684\u6B0A\u91CD\u3002","Alignment weight":"\u6392\u5E8F\u6B0A\u91CD","Change the weight the alignment takes in the chosen direction.":"\u66F4\u6539 alignment \u6B0A\u91CD\u3002","Change the alignment weight of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u5C0D\u9F4A\u6B0A\u91CD\u70BA _PARAM2_","Return which weight the separation takes in the chosen direction.":"\u8FD4\u56DE\u5206\u96E2\u7684\u6B0A\u91CD\u3002","Separation weight":"\u5206\u96E2\u6B0A\u91CD","Change the weight the separation takes in the chosen direction.":"\u66F4\u6539\u5206\u96E2\u7684\u6B0A\u91CD\u3002","Change the separation weight of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u5206\u96E2\u6B0A\u91CD\u70BA _PARAM2_","Boomerang":"\u56DE\u98DB\u6A19","Throw an object that returns to the thrower like a boomerang.":"\u4E1F\u51FA\u7269\u9AD4\uFF0C\u4F7F\u5176\u50CF\u56DE\u98DB\u6A19\u4E00\u6A23\u8FD4\u56DE\u7D66\u4E1F\u51FA\u8005\u3002","Throw speed (pixels per second)":"\u6295\u64F2\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\uFF09","Time before changing directions (seconds)":"\u6539\u8B8A\u65B9\u5411\u4E4B\u524D\u7684\u6642\u9593\uFF08\u79D2\uFF09","Rotation (degrees per second)":"\u65CB\u8F49\uFF08\u6BCF\u79D2\u5EA6\uFF09","Thrower X position":"\u6295\u64F2\u8005X\u4F4D\u7F6E","Thrower Y position":"\u6295\u64F2\u8005Y\u4F4D\u7F6E","Boomerang is returning":"\u8FD4\u56DE\u56DE\u98DB\u68D2","Throw boomerang toward an angle.":"\u629B\u51FA\u56DE\u98DB\u5411\u89D2\u5EA6\u7684\u56DE\u529B\u6A19\u3002","Throw boomerang toward an angle":"\u4EE5\u89D2\u5EA6\u5411\u524D\u629B\u56DE\u529B\u6A19","Throw boomerang _PARAM0_ toward angle _PARAM2_ degrees, speed of _PARAM3_ pixels per second, rotating _PARAM5_ degrees per second, and send boomerang back after of _PARAM4_ seconds":"\u5411\u89D2\u5EA6 _PARAM2_ \u5EA6\u629B\u51FA _PARAM0_ \uFF0C\u6BCF\u79D2\u901F\u5EA6\u70BA _PARAM3_ \u50CF\u7D20\uFF0C\u6BCF\u79D2\u65CB\u8F49 _PARAM5_ \u5EA6\uFF0C\u4E26\u5728 _PARAM4_ \u79D2\u5F8C\u767C\u9001\u56DE\u529B\u6A19","Angle (degrees)":"\u89D2\u5EA6\uFF08\u5EA6\uFF09","Throw boomerang toward a position.":"\u5411\u67D0\u4E00\u4F4D\u7F6E\u6295\u64F2\u8FF4\u65CB\u93E2\u3002","Throw boomerang toward a position":"\u5411\u67D0\u4E00\u4F4D\u7F6E\u6295\u64F2\u8FF4\u65CB\u93E2","Throw boomerang _PARAM0_ toward _PARAM2_;_PARAM3_ at a speed of _PARAM4_ pixels per second, rotating _PARAM6_ degrees per second, and send boomerang back after of _PARAM5_ seconds":"\u5C07 boomerang _PARAM0_ \u671D\u5411 _PARAM2_ \u6295\u64F2\uFF1B\u4EE5 _PARAM4_ \u50CF\u7D20\u6BCF\u79D2\u7684\u901F\u5EA6\u65CB\u8F49 _PARAM6_ \u5EA6\uFF0C\u6295\u64F2 _PARAM3_ \uFF0C_PARAM5_ \u79D2\u5F8C\u5C07 boomerang \u9001\u56DE","Target X position":"\u76EE\u6A19X\u4F4D\u7F6E","Target Y position":"\u76EE\u6A19Y\u4F4D\u7F6E","Send boomerang back to thrower.":"\u5C07 boomerang \u9001\u56DE\u81F3\u6295\u64F2\u8005\u3002","Send boomerang back to thrower":"\u5C07\u8FF4\u65CB\u93E2\u9001\u56DE\u6295\u64F2\u8005","Send boomerang _PARAM0_ back to thrower":"\u5C07 boomerang _PARAM0_ \u9001\u56DE\u81F3\u6295\u64F2\u8005","Set amount of time before boomerang changes directions (seconds).":"\u8A2D\u5B9A boomerang \u6539\u8B8A\u65B9\u5411\u4E4B\u524D\u7684\u6642\u9593\u91CF\uFF08\u79D2\uFF09\u3002","Set amount of time before boomerang changes directions":"\u5728\u8FF4\u65CB\u93E2\u6539\u8B8A\u65B9\u5411\u524D\u8A2D\u5B9A\u7684\u6642\u9593\u9593\u9694","Set amount of time before _PARAM0_ changes directions to _PARAM2_ (seconds)":"\u8A2D\u5B9A\u5728 boomerang \u6539\u8B8A\u65B9\u5411\u70BA _PARAM2_ \u524D\u7684\u6642\u9593\u91CF\uFF08\u79D2\uFF09","Time before boomerange changes direction (seconds)":"\u8FF4\u65CB\u93E2\u6539\u8B8A\u65B9\u5411\u524D\u7684\u6642\u9593\uFF08\u79D2\uFF09","Track position of boomerang thrower.":"\u8FFD\u8E2A boomerang \u6295\u64F2\u8005\u7684\u4F4D\u7F6E\u3002","Track position of boomerang thrower":"\u8FFD\u8E64\u8FF4\u65CB\u93E2\u6295\u64F2\u8005\u7684\u4F4D\u7F6E","Track position of thrower _PARAM2_ who threw boomerang _PARAM0_":"\u8FFD\u8E2A\u6295\u64F2\u4E86 boomerang _PARAM0_ \u7684\u6295\u64F2\u8005 _PARAM2_ \u7684\u4F4D\u7F6E","Thrower":"\u6295\u64F2\u8005","Boomerang is returning to thrower.":"boomerang \u6B63\u5728\u8FD4\u56DE\u81F3\u6295\u64F2\u8005\u3002","Boomerang is returning to thrower":"\u8FF4\u65CB\u93E2\u6B63\u5728\u8FD4\u56DE\u6295\u64F2\u8005","Boomerang _PARAM0_ is returning to thrower":"boomerang _PARAM0_ \u6B63\u5728\u8FD4\u56DE\u81F3\u6295\u64F2\u8005","Bounce (using forces)":"\u53CD\u5F48\uFF08\u4F7F\u7528\u529B\u91CF\uFF09","Bounce the object off another object it just touched.":"\u4F7F\u7269\u4EF6\u53CD\u5F48\u958B\u5176\u4ED6\u7269\u4EF6\u3002","Provides an action to make the object bounce from another object it just touched. Add a permanent force to the object and, when in collision with another one, use the action to make it bounce realistically.":"\u63D0\u4F9B\u4E00\u500B\u52D5\u4F5C\uFF0C\u8B93\u7269\u9AD4\u5F9E\u525B\u89F8\u78B0\u5230\u7684\u5176\u4ED6\u7269\u9AD4\u5F48\u8DF3\u3002\u7D66\u7269\u9AD4\u6DFB\u52A0\u4E00\u500B\u6C38\u4E45\u529B\uFF0C\u4E26\u5728\u8207\u53E6\u4E00\u500B\u7269\u9AD4\u78B0\u649E\u6642\uFF0C\u4F7F\u7528\u8A72\u52D5\u4F5C\u4F7F\u7269\u9AD4\u5BE6\u73FE\u903C\u771F\u7684\u5F48\u8DF3\u3002","Bounce":"\u5F48\u8DF3","Bounce count":"\u5F48\u8DF3\u8A08\u6578","Number of times this object has bounced off another object":"\u6B64\u5C0D\u8C61\u53CD\u5F48\u6B21\u6578","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"\u5C07\u7269\u9AD4\u4EE5\u65BD\u52A0\u65BC\u8A72\u7269\u9AD4\u7684\u89D2\u5EA6\u548C\u529B\u91CF\u901F\u5EA6\u63A8\u96E2\u5176\u7576\u524D\u767C\u751F\u78B0\u649E\u7684\u53E6\u4E00\u7269\u9AD4\u3002\n\u8ACB\u78BA\u4FDD\u5728\u57F7\u884C\u6B64\u64CD\u4F5C\u524D\u6AA2\u6E2C\u5169\u500B\u7269\u9AD4\u4E4B\u9593\u7684\u78B0\u649E\u3002\u6240\u6709\u7684\u529B\u91CF\u5C07\u5F9E\u7269\u9AD4\u4E2D\u79FB\u9664\uFF0C\u4E26\u6DFB\u52A0\u4E00\u500B\u65B0\u7684\u6C38\u4E45\u529B\u4EE5\u63A8\u52D5\u7269\u9AD4\u5F48\u8DF3\u3002","Bounce off another object":"\u5F9E\u53E6\u4E00\u7269\u9AD4\u53CD\u5F48","Bounce _PARAM0_ off _PARAM2_":"\u5F9E_PARAM0_\u53CD\u5F48_PARAM2_","The objects to bounce on":"\u5F48\u8DF3\u7269\u9AD4","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be calculated *to go toward the specified angle (the \"normal angle\")*. For example, if the object is arriving at this exact angle, it will bounce in the opposite direction.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"\u6839\u64DA\u65BD\u52A0\u5728\u7269\u9AD4\u4E0A\u7684\u89D2\u5EA6\u548C\u901F\u5EA6\u7684\u529B\u91CF\uFF0C\u5C07\u7269\u9AD4\u4EE5\u76EE\u524D\u8207\u4E4B\u767C\u751F\u78B0\u649E\u7684\u53E6\u4E00\u7269\u9AD4\u53CD\u5F48\u3002\n\u5F48\u8DF3\u5C07\u59CB\u7D42\u6839\u64DA *\u671D\u5411\u6307\u5B9A\u89D2\u5EA6\uFF08\u201C\u6CD5\u5411\u89D2\u5EA6\u201D\uFF09* \u9032\u884C\u8A08\u7B97\u3002\u4F8B\u5982\uFF0C\u5982\u679C\u7269\u9AD4\u6B63\u4EE5\u6B64\u7CBE\u78BA\u89D2\u5EA6\u5230\u9054\uFF0C\u5C07\u6703\u4EE5\u76F8\u53CD\u65B9\u5411\u5F48\u8DF3\u3002\n\u8ACB\u78BA\u4FDD\u5728\u57F7\u884C\u6B64\u64CD\u4F5C\u524D\u6AA2\u6E2C\u5169\u500B\u7269\u9AD4\u4E4B\u9593\u7684\u78B0\u649E\u3002\u6240\u6709\u7684\u529B\u91CF\u5C07\u5F9E\u7269\u9AD4\u4E2D\u79FB\u9664\uFF0C\u4E26\u6DFB\u52A0\u4E00\u500B\u65B0\u7684\u6C38\u4E45\u529B\u4EE5\u4F7F\u7269\u9AD4\u5F48\u8DF3\u3002","Bounce off another object toward a specified angle":"\u671D\u7279\u5B9A\u89D2\u5EA6\u7684\u53E6\u4E00\u7269\u9AD4\u5F48\u8DF3","Bounce _PARAM0_ off _PARAM2_ assuming a normal angle of _PARAM3_":"\u6309\u7167\u6B63\u5E38\u89D2\u5EA6\u5C07 _PARAM0_ \u5F9E _PARAM2_ \u5F48\u958B\uFF0C\u5047\u8A2D\u6B63\u5E38\u89D2\u5EA6\u70BA _PARAM3_","The \"normal\" angle, in degrees, to bounce against":"\u53CD\u5F48\u7684\u300C\u6B63\u5E38\u300D\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09","This can be understood at the direction that the bounce must go toward.":"\u53EF\u4EE5\u7406\u89E3\u70BA\u53CD\u5F48\u5FC5\u9808\u671D\u5411\u7684\u65B9\u5411\u3002","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be vertical, like if the object is *colliding a perfectly horizontal obstacle* (like the top/bottom of the screen in a pong game). For example, if the object is arriving with an angle of exactly 90 degrees, it will bounce in the opposite direction: -90 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"\u6839\u64DA\u5C0D\u8C61\u4E0A\u65BD\u52A0\u7684\u89D2\u5EA6\u548C\u529B\u7684\u901F\u5EA6\uFF0C\u4F7F\u8A72\u5C0D\u8C61\u6839\u64DA\u89D2\u5EA6\u548C\u529B\u7684\u901F\u5EA6\u53CD\u5F48\u5230\u7576\u524D\u6B63\u5728\u78B0\u649E\u7684\u53E6\u4E00\u500B\u5C0D\u8C61\u3002\n\u53CD\u5F48\u5C07\u59CB\u7D42\u662F\u5782\u76F4\u7684\uFF0C\u5C31\u597D\u50CF\u8A72\u5C0D\u8C61\u6B63\u5728*\u78B0\u649E\u4E00\u500B\u5B8C\u5168\u6C34\u5E73\u7684\u969C\u7919\u7269*\uFF08\u6BD4\u5982\u4E52\u4E53\u904A\u6232\u4E2D\u5C4F\u5E55\u7684\u4E0A/\u4E0B\u7AEF\uFF09\u3002\u4F8B\u5982\uFF0C\u5982\u679C\u8A72\u5C0D\u8C61\u7684\u89D2\u5EA6\u6070\u597D\u70BA90\u5EA6\uFF0C\u5B83\u5C07\u6703\u5411\u76F8\u53CD\u7684\u65B9\u5411\u53CD\u5F48\uFF1A-90\u5EA6\u3002\n\u5728\u555F\u52D5\u6B64\u64CD\u4F5C\u4E4B\u524D\uFF0C\u8ACB\u78BA\u4FDD\u5169\u500B\u5C0D\u8C61\u4E4B\u9593\u78B0\u649E\u3002\u6240\u6709\u7684\u529B\u90FD\u6703\u5F9E\u5C0D\u8C61\u4E2D\u79FB\u9664\uFF0C\u4E26\u589E\u52A0\u4E00\u500B\u65B0\u7684\u6C38\u4E45\u6027\u529B\u4EE5\u4F7F\u5C0D\u8C61\u53CD\u5F48\u3002","Bounce vertically":"\u5782\u76F4\u53CD\u5F48","Bounce _PARAM0_ off _PARAM2_ - always vertically":"\u5C07 _PARAM0_ \u4EE5\u5782\u76F4\u65B9\u5F0F\u5F9E _PARAM2_ \u5F48\u958B - \u59CB\u7D42\u5782\u76F4","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be horizontal, like if the object is *colliding a perfectly vertical obstacle* (like paddles in a pong game). For example, if the object is arriving with an angle of exactly 0 degrees, it will bounce in the opposite direction: 180 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"\u6839\u64DA\u5C0D\u8C61\u4E0A\u65BD\u52A0\u7684\u89D2\u5EA6\u548C\u529B\u7684\u901F\u5EA6\uFF0C\u4F7F\u8A72\u5C0D\u8C61\u6839\u64DA\u89D2\u5EA6\u548C\u529B\u7684\u901F\u5EA6\u53CD\u5F48\u5230\u7576\u524D\u6B63\u5728\u78B0\u649E\u7684\u53E6\u4E00\u500B\u5C0D\u8C61\u3002\n\u53CD\u5F48\u5C07\u59CB\u7D42\u662F\u6C34\u5E73\u7684\uFF0C\u5C31\u597D\u50CF\u8A72\u5C0D\u8C61\u6B63\u5728*\u78B0\u649E\u4E00\u500B\u5B8C\u5168\u5782\u76F4\u7684\u969C\u7919\u7269*\uFF08\u6BD4\u5982\u4E52\u4E53\u904A\u6232\u4E2D\u7684\u64CA\u7403\u677F\uFF09\u3002\u4F8B\u5982\uFF0C\u5982\u679C\u8A72\u5C0D\u8C61\u7684\u89D2\u5EA6\u6070\u597D\u70BA0\u5EA6\uFF0C\u5B83\u6703\u5411\u76F8\u53CD\u7684\u65B9\u5411\u53CD\u5F48\uFF1A180\u5EA6\u3002\n\u5728\u555F\u52D5\u6B64\u64CD\u4F5C\u4E4B\u524D\uFF0C\u8ACB\u78BA\u4FDD\u5169\u500B\u5C0D\u8C61\u4E4B\u9593\u78B0\u649E\u3002\u6240\u6709\u7684\u529B\u90FD\u6703\u5F9E\u5C0D\u8C61\u4E2D\u79FB\u9664\uFF0C\u4E26\u589E\u52A0\u4E00\u500B\u65B0\u7684\u6C38\u4E45\u6027\u529B\u4EE5\u4F7F\u5C0D\u8C61\u53CD\u5F48\u3002","Bounce horizontally":"\u6C34\u5E73\u53CD\u5F48","Bounce _PARAM0_ off _PARAM2_ - always horizontally":"\u5C07 _PARAM0_ \u4EE5\u6C34\u5E73\u65B9\u5F0F\u5F9E _PARAM2_ \u5F48\u958B - \u59CB\u7D42\u6C34\u5E73","the number of times this object has bounced off another object.":"\u9019\u500B\u5C0D\u8C61\u5DF2\u7D93\u5F9E\u53E6\u4E00\u500B\u5C0D\u8C61\u53CD\u5F48\u4E86\u5E7E\u6B21\u3002","the bounce count":"\u53CD\u5F48\u6B21\u6578","Button states and effects":"\u6309\u9215\u72C0\u614B\u548C\u6548\u679C","Use any object as a button and change appearance according to user interactions.":"\u4F7F\u7528\u4EFB\u4F55\u7269\u4EF6\u4F5C\u70BA\u6309\u9215\u4E26\u6839\u64DA\u7528\u6236\u4E92\u52D5\u66F4\u6539\u5916\u89C0\u3002","Use objects as buttons.":"\u4F7F\u7528\u5C0D\u8C61\u4F5C\u70BA\u6309\u9215\u3002","Button states":"\u6309\u9215\u72C0\u614B","Should check hovering":"\u61C9\u6AA2\u67E5\u61F8\u505C","State":"\u72C0\u614B","Touch id":"\u89F8\u78B0 id","Touch is inside":"\u89F8\u78B0\u5728\u5167\u90E8","Mouse is inside":"\u6ED1\u9F20\u5728\u5167\u90E8","Reset the state of the button.":"\u91CD\u7F6E\u6309\u9215\u7684\u72C0\u614B\u3002","Reset state":"\u91CD\u7F6E\u72C0\u614B","Reset the button state of _PARAM0_":"\u91CD\u7F6E _PARAM0_ \u7684\u6309\u9215\u72C0\u614B","Check if the button is not used.":"\u6AA2\u67E5\u6309\u9215\u662F\u5426\u672A\u4F7F\u7528\u3002","Is idle":"\u9592\u7F6E","_PARAM0_ is idle":"_PARAM0_ \u9592\u7F6E","Check if the button was just clicked.":"\u6AA2\u67E5\u6309\u9215\u662F\u5426\u525B\u525B\u9EDE\u64CA\u3002","Is clicked":"\u5DF2\u9EDE\u64CA","_PARAM0_ is clicked":"_PARAM0_ \u9EDE\u64CA","Check if the cursor is hovered over the button.":"\u6AA2\u67E5\u5149\u6A19\u662F\u5426\u61F8\u505C\u5728\u6309\u9215\u4E0A\u3002","Is hovered":"\u6B63\u5728\u61F8\u505C","_PARAM0_ is hovered":"_PARAM0_ \u6ED1\u9F20\u505C\u7559","Check if the button is either hovered or pressed but not hovered.":"\u6AA2\u67E5\u6309\u9215\u662F\u5426\u61F8\u505C\u6216\u88AB\u6309\u4E0B\u4F46\u6C92\u6709\u61F8\u505C\u3002","Is focused":"\u5DF2\u805A\u7126","_PARAM0_ is focused":"_PARAM0_ \u805A\u7126","Check if the button is currently being pressed with mouse or touch.":"\u6AA2\u67E5\u6309\u9215\u662F\u5426\u6B63\u5728\u88AB\u6ED1\u9F20\u6216\u89F8\u63A7\u9EDE\u6309\u4E0B\u3002","Is pressed":"\u5DF2\u6309\u4E0B","_PARAM0_ is pressed":"_PARAM0_ \u88AB\u6309\u4E0B","Check if the button is currently being pressed outside with mouse or touch.":"\u6AA2\u67E5\u6309\u9215\u662F\u5426\u6B63\u5728\u5916\u90E8\u88AB\u6ED1\u9F20\u6216\u89F8\u63A7\u9EDE\u6309\u4E0B\u3002","Is held outside":"\u5728\u5916\u9762\u88AB\u4FDD\u6301","_PARAM0_ is held outside":"_PARAM0_ \u5728\u5916\u88AB\u6309\u4F4F","the touch id that is using the button or 0 if none.":"\u6B63\u5728\u4F7F\u7528\u6309\u9215\u7684\u89F8\u63A7\u9EDE id\uFF0C\u5982\u679C\u6C92\u6709\u5247\u8FD4\u56DE0\u3002","the touch id":"\u89F8\u63A7\u9EDE id","Enable effects on buttons based on their state.":"\u57FA\u65BC\u5176\u72C0\u614B\u5728\u6309\u9215\u4E0A\u555F\u7528\u6548\u679C\u3002","Button object effects":"\u6309\u9215\u5C0D\u8C61\u6548\u679C","Effect capability":"\u6548\u679C\u80FD\u529B","Idle state effect":"\u9591\u7F6E\u72C0\u614B\u6548\u679C","Effects":"\u6548\u679C","Focused state effect":"\u7126\u9EDE\u72C0\u614B\u6548\u679C","The state is Focused when the button is hovered or held outside.":"\u7576\u6309\u9215\u5728\u5916\u90E8\u61F8\u505C\u6216\u6309\u4F4F\u6642\uFF0C\u72C0\u614B\u70BA\u7126\u9EDE\u3002","Pressed state effect":"\u6309\u4E0B\u72C0\u614B\u6548\u679C","the idle state effect of the object.":"\u7269\u4EF6\u7684\u9592\u7F6E\u72C0\u614B\u6548\u679C\u3002","the idle state effect":"\u9592\u7F6E\u72C0\u614B\u6548\u679C","the focused state effect of the object. The state is Focused when the button is hovered or held outside.":"\u7269\u4EF6\u7684\u805A\u7126\u72C0\u614B\u6548\u679C\u3002\u6309\u9215\u61F8\u505C\u6216\u5916\u90E8\u6309\u4F4F\u6642\uFF0C\u72C0\u614B\u70BA\u805A\u7126\u3002","the focused state effect":"\u805A\u7126\u72C0\u614B\u6548\u679C","the pressed state effect of the object.":"\u5C0D\u8C61\u7684\u6309\u4E0B\u72C0\u614B\u6548\u679C\u3002","the pressed state effect":"\u6309\u4E0B\u72C0\u614B\u6548\u679C","Change the animation of buttons according to their state.":"\u6839\u64DA\u5176\u72C0\u614B\u8B8A\u66F4\u6309\u9215\u7684\u52D5\u756B\u3002","Button animation":"\u6309\u9215\u52D5\u756B","Idle state animation name":"\u9591\u7F6E\u72C0\u614B\u52D5\u756B\u540D\u7A31","Animation":"\u52D5\u756B","Focused state animation name":"\u7126\u9EDE\u72C0\u614B\u52D5\u756B\u540D\u7A31","Pressed state animation name":"\u6309\u4E0B\u72C0\u614B\u52D5\u756B\u540D\u7A31","the idle state animation name of the object.":"\u5C0D\u8C61\u7684\u5F85\u6A5F\u72C0\u614B\u52D5\u756B\u540D\u7A31\u3002","the idle state animation name":"\u5F85\u6A5F\u72C0\u614B\u52D5\u756B\u540D\u7A31","the focused state animation name of the object. The state is Focused when the button is hovered or held outside.":"\u5C0D\u8C61\u7684\u805A\u7126\u72C0\u614B\u52D5\u756B\u540D\u7A31\u3002\u7576\u6309\u9215\u88AB\u61F8\u505C\u6216\u5728\u5916\u9762\u88AB\u4FDD\u6301\u6642\uFF0C\u72C0\u614B\u70BA\u805A\u7126\u3002","the focused state animation name":"\u805A\u7126\u72C0\u614B\u52D5\u756B\u540D\u7A31","the pressed state animation name of the object.":"\u5C0D\u8C61\u7684\u6309\u4E0B\u72C0\u614B\u52D5\u756B\u540D\u7A31\u3002","the pressed state animation name":"\u6309\u4E0B\u72C0\u614B\u52D5\u756B\u540D\u7A31","Smoothly change an effect on buttons according to their state.":"\u6839\u64DA\u5176\u72C0\u614B\u5E73\u6ED1\u5730\u6539\u8B8A\u6309\u9215\u4E0A\u7684\u6548\u679C\u3002","Button object effect tween":"\u6309\u9215\u5C0D\u8C61\u6548\u679C\u7DE9\u52D5","Effect name":"\u6548\u679C\u540D\u7A31","Effect":"\u6548\u679C","Effect parameter":"\u6548\u679C\u53C3\u6578","The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"\u6548\u679C\u53C3\u6578\u540D\u7A31\u53EF\u4EE5\u5728\u6548\u679C\u9078\u9805\u5361\u4E2D\u7684\u4E0B\u62C9\u83DC\u55AE\u201C\u986F\u793A\u53C3\u6578\u540D\u7A31\u201D\u64CD\u4F5C\u4E2D\u627E\u5230\u3002","Idle effect parameter value":"\u9591\u7F6E\u6548\u679C\u53C3\u6578\u503C","Focused effect parameter value":"Focused effect parameter value","Pressed effect parameter value":"Pressed effect parameter value","Fade-in easing":"\u6DE1\u5165\u7DE9\u548C","Fade-out easing":"\u6DE1\u51FA\u7DE9\u548C","Fade-in duration":"\u6DE1\u5165\u6301\u7E8C\u6642\u9593","Fade-out duration":"\u6DE1\u51FA\u6301\u7E8C\u6642\u9593","Disable the effect in idle state":"\u5728\u9592\u7F6E\u72C0\u614B\u4E0B\u7981\u7528\u6548\u679C","Time delta":"\u6642\u9593\u589E\u91CF","Fade in":"\u6DE1\u5165","_PARAM0_ fade in to _PARAM2_":"_PARAM0_ \u4EE5 _PARAM2_ \u6DE1\u5165","Fade out":"\u6DE1\u51FA","_PARAM0_ fade out to _PARAM2_":"_PARAM0_ \u4EE5 _PARAM2_ \u6DE1\u51FA","Play tween":"\u64AD\u653E\u52D5\u756B","Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing":"\u5C0D\u8C61 _PARAM0_ \u7684\u6548\u679C\u5C6C\u6027\u5728 _PARAM2_ \u79D2\u5167\u4EE5 _PARAM3_ \u7DE9\u548C","Duration (in seconds)":"\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Easing":"\u7DE9\u52D5","the effect name of the object.":"\u5C0D\u8C61\u7684\u6548\u679C\u540D\u7A31\u3002","the effect name":"\u6548\u679C\u7684\u540D\u7A31","the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"\u5C0D\u8C61\u7684\u6548\u679C\u53C3\u6578\u3002\u6548\u679C\u53C3\u6578\u540D\u7A31\u53EF\u4EE5\u5728\u6548\u679C\u9078\u9805\u5361\u627E\u5230\uFF0C\u5F9E\u4E0B\u62C9\u9078\u55AE\u7684\u300C\u986F\u793A\u53C3\u6578\u540D\u7A31\u300D\u64CD\u4F5C\u4E2D\u627E\u5230\u3002","the effect parameter":"\u6548\u679C\u7684\u53C3\u6578","Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"\u66F4\u6539\u5C0D\u8C61\u7684\u6548\u679C\u53C3\u6578\u3002\u6548\u679C\u53C3\u6578\u540D\u7A31\u53EF\u4EE5\u5728\u6548\u679C\u9078\u9805\u5361\u627E\u5230\uFF0C\u5F9E\u4E0B\u62C9\u9078\u55AE\u7684\u300C\u986F\u793A\u53C3\u6578\u540D\u7A31\u300D\u64CD\u4F5C\u4E2D\u627E\u5230\u3002","Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_":"\u66F4\u6539\u5C0D\u8C61 _PARAM0_ \u7684\u7DE9\u548C\u6548\u679C\u70BA _PARAM2_\uFF0C\u4E26\u4F7F\u7528\u53C3\u6578 _PARAM3_","Parameter name":"\u53C3\u6578\u540D\u7A31","the idle effect parameter value of the object.":"\u7269\u4EF6\u7684\u9592\u7F6E\u6548\u679C\u53C3\u6578\u503C\u3002","the idle effect parameter value":"\u7269\u4EF6\u7684\u9592\u7F6E\u6548\u679C\u53C3\u6578\u503C","the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.":"\u7269\u4EF6\u7684\u805A\u7126\u6548\u679C\u53C3\u6578\u503C\u3002\u7576\u6309\u9215\u5728\u61F8\u505C\u6216\u8005\u5728\u5916\u90E8\u6309\u4F4F\u6642\uFF0C\u72C0\u614B\u662F\u805A\u7126\u3002","the focused effect parameter value":"\u7269\u4EF6\u7684\u805A\u7126\u6548\u679C\u53C3\u6578\u503C","the pressed effect parameter value of the object.":"\u7269\u4EF6\u7684\u6309\u58D3\u6548\u679C\u53C3\u6578\u503C","the pressed effect parameter value":"\u6309\u4E0B\u6548\u679C\u53C3\u6578\u503C","the fade-in easing of the object.":"\u5C0D\u8C61\u7684\u6DE1\u5165\u7DE9\u52D5\u3002","the fade-in easing":"\u6DE1\u5165\u7DE9\u52D5","the fade-out easing of the object.":"\u5C0D\u8C61\u7684\u6DE1\u51FA\u7DE9\u52D5\u3002","the fade-out easing":"\u6DE1\u51FA\u7DE9\u52D5","the fade-in duration of the object.":"\u5C0D\u8C61\u7684\u6DE1\u5165\u6301\u7E8C\u6642\u9593\u3002","the fade-in duration":"\u6DE1\u5165\u6301\u7E8C\u6642\u9593","the fade-out duration of the object.":"\u5C0D\u8C61\u7684\u6DE1\u51FA\u6301\u7E8C\u6642\u9593\u3002","the fade-out duration":"\u6DE1\u51FA\u6301\u7E8C\u6642\u9593","Smoothly resize buttons according to their state.":"\u6839\u64DA\u5B83\u5011\u7684\u72C0\u614B\u5E73\u6ED1\u5730\u8ABF\u6574\u6309\u9215\u7684\u5927\u5C0F\u3002","Button scale tween":"\u6309\u9215\u7E2E\u653ETween","Scalable capability":"\u53EF\u4F38\u7E2E\u80FD\u529B","Button states behavior (required)":"\u6309\u9215\u72C0\u614B\u884C\u70BA\uFF08\u5FC5\u9808\uFF09","Tween behavior (required)":"Tween\u884C\u70BA\uFF08\u5FC5\u9808\uFF09","Idle state size scale":"\u7A7A\u9592\u72C0\u614B\u5927\u5C0F\u7E2E\u653E","Size":"\u5927\u5C0F","Focused state size scale":"\u5C08\u6CE8\u72C0\u614B\u5927\u5C0F\u7E2E\u653E","Pressed state size scale":"\u6309\u4E0B\u72C0\u614B\u5927\u5C0F\u7E2E\u653E","the idle state size scale of the object.":"\u5C0D\u8C61\u7684\u9592\u7F6E\u72C0\u614B\u5927\u5C0F\u6BD4\u4F8B\u3002","the idle state size scale":"\u9592\u7F6E\u72C0\u614B\u5927\u5C0F\u6BD4\u4F8B","the focused state size scale of the object. The state is Focused when the button is hovered or held outside.":"\u5C0D\u8C61\u7684\u805A\u7126\u72C0\u614B\u5927\u5C0F\u6BD4\u4F8B\u3002\u6309\u4E0B\u6216\u61F8\u505C\u6642\uFF0C\u8A72\u6309\u9215\u8655\u65BC\u805A\u7126\u72C0\u614B\u3002","the focused state size scale":"\u805A\u7126\u72C0\u614B\u5927\u5C0F\u6BD4\u4F8B","the pressed state size scale of the object.":"\u5C0D\u8C61\u7684\u6309\u4E0B\u72C0\u614B\u5927\u5C0F\u6BD4\u4F8B\u3002","the pressed state size scale":"\u6309\u4E0B\u72C0\u614B\u5927\u5C0F\u6BD4\u4F8B","Smoothly change the color tint of buttons according to their state.":"\u6839\u64DA\u5B83\u5011\u7684\u72C0\u614B\u5E73\u6ED1\u5730\u6539\u8B8A\u6309\u9215\u7684\u984F\u8272\u8272\u8ABF\u3002","Button color tint tween":"\u6309\u9215\u984F\u8272\u8272\u8ABFTween","Tween":"Tween","Idle state color tint":"\u7A7A\u9592\u72C0\u614B\u984F\u8272\u8272\u8ABF","Color":"\u984F\u8272","Focused state color tint":"\u5C08\u6CE8\u72C0\u614B\u984F\u8272\u8272\u8ABF","Pressed state color tint":"\u6309\u4E0B\u72C0\u614B\u984F\u8272\u8272\u8ABF","the idle state color tint of the object.":"\u5C0D\u8C61\u7684\u9592\u7F6E\u72C0\u614B\u984F\u8272\u8272\u8ABF\u3002","the idle state color tint":"\u9592\u7F6E\u72C0\u614B\u984F\u8272\u8272\u8ABF","the focused state color tint of the object. The state is Focused when the button is hovered or held outside.":"\u5C0D\u8C61\u7684\u805A\u7126\u72C0\u614B\u984F\u8272\u8272\u8ABF\u3002\u61F8\u505C\u6216\u6309\u4F4F\u6642\uFF0C\u8A72\u6309\u9215\u8655\u65BC\u805A\u7126\u72C0\u614B\u3002","the focused state color tint":"\u805A\u7126\u72C0\u614B\u984F\u8272\u8272\u8ABF","the pressed state color tint of the object.":"\u5C0D\u8C61\u7684\u6309\u4E0B\u72C0\u614B\u984F\u8272\u8272\u8ABF\u3002","the pressed state color tint":"\u6309\u4E0B\u72C0\u614B\u984F\u8272\u8272\u8ABF","Camera impulse":"\u76F8\u6A5F\u8108\u885D","Move the camera following an impulse trajectory.":"\u6839\u64DA\u8108\u885D\u8ECC\u8DE1\u79FB\u52D5\u76F8\u6A5F\u3002","Camera":"\u76F8\u6A5F","Add an impulse to the camera position.":"\u5C0D\u76F8\u6A5F\u4F4D\u7F6E\u6DFB\u52A0\u4E00\u500B\u8108\u885D\u3002","Add a camera impulse":"\u6DFB\u52A0\u76F8\u6A5F\u8108\u885D","Add an impulse _PARAM1_ to the camera from layer _PARAM2_ with an amplitude of _PARAM3_ and an angle of _PARAM4_, going away in _PARAM5_ seconds with _PARAM6_ easing, staying _PARAM7_ seconds, going back in _PARAM8_ seconds with _PARAM9_ easing":"\u5F9E\u5716\u5C64_PARAM2_\u5C0D\u76F8\u6A5F\u6DFB\u52A0\u4E00\u500B\u885D\u52D5_PARAM1_\uFF0C\u632F\u5E45\u70BA_PARAM3_\uFF0C\u89D2\u5EA6\u70BA_PARAM4_\uFF0C\u5728_PARAM5_\u79D2\u5167\u96E2\u958B\uFF0C\u4F7F\u7528_PARAM6_\u7DE9\u548C\uFF0C\u505C\u7559_PARAM7_\u79D2\uFF0C\u5728_PARAM8_\u79D2\u5167\u8FD4\u56DE\uFF0C\u4F7F\u7528_PARAM9_\u7DE9\u548C","Identifier":"\u8B58\u5225\u78BC","Layer":"\u5716\u5C64","Displacement X":"\u4F4D\u79FBX","Displacement Y":"\u4F4D\u79FBY","Get away duration (in seconds)":"\u96E2\u958B\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Get away easing":"\u96E2\u958B\u7DE9\u548C","Stay duration (in seconds)":"\u505C\u7559\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Get back duration (in seconds)":"\u8FD4\u56DE\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Get back easing":"\u8FD4\u56DE\u7DE9\u548C","Add a camera impulse (angle)":"\u6DFB\u52A0\u76F8\u6A5F\u885D\u52D5\uFF08\u89D2\u5EA6\uFF09","Amplitude":"\u632F\u5E45","Angle (in degree)":"\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09","Check if a camera impulse is playing.":"\u6AA2\u67E5\u76F8\u6A5F\u662F\u5426\u6B63\u5728\u885D\u52D5\u3002","Camera impulse is playing":"\u76F8\u6A5F\u885D\u52D5\u6B63\u5728\u64AD\u653E","Camera impulse _PARAM1_ is playing":"\u76F8\u6A5F\u885D\u52D5_PARAM1_\u6B63\u5728\u64AD\u653E","Camera shake":"\u76F8\u6A5F\u6296\u52D5","Shake layer cameras.":"\u6416\u52D5\u5716\u5C64\u76F8\u6A5F\u3002","Shake the camera on layers chosen with configuration actions.":"\u6416\u52D5\u9078\u5B9A\u5716\u5C64\u4E0A\u7684\u76F8\u6A5F\u8207\u914D\u7F6E\u52D5\u4F5C\u3002","Shake camera":"\u6416\u52D5\u76F8\u6A5F","Shake camera for _PARAM1_ seconds with _PARAM2_ seconds of easing to start and _PARAM3_ seconds to stop":"\u4F7F\u7528_PARAM2_\u79D2\u7684\u7DE9\u548C\u6458\u8981\u76F8\u6A5F_PARAM1_\u79D2\uFF0C\u7528_PARAM3_\u79D2\u505C\u6B62","Ease duration to start (in seconds)":"\u958B\u59CB\u7DE9\u548C\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Ease duration to stop (in seconds)":"\u505C\u6B62\u7DE9\u548C\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Shake the camera on the specified layer, using one or more ways to shake (position, angle, zoom). This action is deprecated. Please use the other one with the same name.":"\u5728\u6307\u5B9A\u5716\u5C64\u4E0A\u6416\u52D5\u76F8\u6A5F\uFF0C\u4F7F\u7528\u4E00\u7A2E\u6216\u591A\u7A2E\u6416\u52D5\u65B9\u5F0F\uFF08\u4F4D\u7F6E\u3001\u89D2\u5EA6\u3001\u7E2E\u653E\uFF09\u3002 \u6B64\u64CD\u4F5C\u5DF2\u904E\u6642\u3002 \u8ACB\u4F7F\u7528\u76F8\u540C\u540D\u7A31\u7684\u53E6\u4E00\u500B\u64CD\u4F5C\u3002","Shake camera (deprecated)":"\u6416\u52D5\u76F8\u6A5F\uFF08\u5DF2\u904E\u6642\uFF09","Shake camera on _PARAM3_ layer for _PARAM5_ seconds. Use an amplitude of _PARAM1_px on X axis and _PARAM2_px on Y axis, angle rotation amplitude _PARAM6_ degrees, and zoom amplitude _PARAM7_ percent. Wait _PARAM8_ seconds between shakes. Keep shaking until stopped: _PARAM9_":"\u5728_PARAM3_\u5C64\u4E0A\u6416\u52D5\u76F8\u6A5F_PARAM5_\u79D2\u3002 \u4F7F\u7528_PARAM1_px\u632F\u5E45\u5728X\u8EF8\u4E0A\u548C_PARAM2_px\u5728Y\u8EF8\u4E0A\uFF0C\u89D2\u5EA6\u65CB\u8F49\u5E45\u5EA6_PARAM6_\u5EA6\uFF0C\u7E2E\u653E\u5E45\u5EA6_PARAM7_%\uFF0C\u5728\u6416\u6643\u4E4B\u9593\u7B49\u5F85_PARAM8_\u79D2\u3002\u4E00\u76F4\u6416\u6643\u76F4\u5230\u505C\u6B62\uFF1A_PARAM9_","Amplitude of shaking on the X axis (in pixels)":"X\u8EF8\u7684\u6643\u52D5\u5E45\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Amplitude of shaking on the Y axis (in pixels)":"Y\u8EF8\u7684\u6643\u52D5\u5E45\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Layer (base layer if empty)":"\u5716\u5C64\uFF08\u5982\u679C\u70BA\u7A7A\u5247\u70BA\u57FA\u672C\u5716\u5C64\uFF09","Camera index (Default: 0)":"\u76F8\u6A5F\u7D22\u5F15\uFF08\u9ED8\u8A8D\u503C\uFF1A0\uFF09","Duration (in seconds) (Default: 0.5)":"\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\uFF08\u9ED8\u8A8D\u503C\uFF1A0.5\uFF09","Angle rotation amplitude (in degrees) (For example: 2)":"\u89D2\u5EA6\u65CB\u8F49\u632F\u5E45\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09\uFF08\u4F8B\u5982\uFF1A2\uFF09","Zoom factor amplitude":"\u7E2E\u653E\u56E0\u5B50\u632F\u5E45","Period between shakes (in seconds) (Default: 0.08)":"\u9707\u52D5\u9593\u671F\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\uFF08\u9ED8\u8A8D\u503C\uFF1A0.08\uFF09","Keep shaking until stopped":"\u6301\u7E8C\u6643\u52D5\u76F4\u5230\u505C\u6B62","Duration value will be ignored":"\u6301\u7E8C\u503C\u5C07\u88AB\u5FFD\u7565","Start shaking the camera indefinitely.":"\u7121\u9650\u671F\u5730\u958B\u59CB\u6643\u52D5\u76F8\u6A5F\u3002","Start camera shaking":"\u958B\u59CB\u76F8\u6A5F\u6643\u52D5","Start shaking the camera with _PARAM1_ seconds of easing":"\u4EE5_PARAM1_\u79D2\u7684\u7DE9\u548C\u65B9\u5F0F\u958B\u59CB\u6416\u6643\u76F8\u6A5F","Ease duration (in seconds)":"\u7DE9\u548C\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Stop shaking the camera.":"\u505C\u6B62\u76F8\u6A5F\u6643\u52D5\u3002","Stop camera shaking":"\u505C\u6B62\u76F8\u6A5F\u6643\u52D5","Stop shaking the camera with _PARAM1_ seconds of easing":"\u4EE5_PARAM1_\u79D2\u7684\u7DE9\u548C\u65B9\u5F0F\u505C\u6B62\u6416\u6643\u76F8\u6A5F","Mark a layer as shakable.":"\u5C07\u5716\u5C64\u6A19\u8A18\u70BA\u53EF\u6643\u52D5\u3002","Shakable layer":"\u53EF\u6643\u52D5\u7684\u5716\u5C64","Mark the layer: _PARAM2_ as shakable: _PARAM1_":"\u5C07\u5716\u5C64\uFF1A_PARAM2_ \u6A19\u8A18\u70BA\u53EF\u6416\u52D5\uFF1A_PARAM1_","Shakable":"\u53EF\u6643\u52D5","Check if the camera is shaking.":"\u6AA2\u67E5\u76F8\u6A5F\u662F\u5426\u5728\u6643\u52D5\u3002","Camera is shaking":"\u76F8\u6A5F\u6B63\u5728\u6643\u52D5","Change the translation amplitude of the shaking (in pixels).":"\u66F4\u6539\u6643\u52D5\u7684\u4F4D\u79FB\u632F\u5E45\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002","Layer translation amplitude":"\u5716\u5C64\u4F4D\u79FB\u632F\u5E45","Change the translation amplitude of the shaking to _PARAM1_; _PARAM2_ (layer: _PARAM3_)":"\u5C07\u6416\u52D5\u4F4D\u79FB\u7684\u632F\u5E45\u66F4\u6539\u70BA_PARAM1_; _PARAM2_\uFF08\u5716\u5C64\uFF1A_PARAM3_\uFF09","Change the rotation amplitude of the shaking (in degrees).":"\u66F4\u6539\u6416\u52D5\u7684\u65CB\u8F49\u632F\u5E45\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09\u3002","Layer rotation amplitude":"\u5716\u5C64\u65CB\u8F49\u632F\u5E45","Change the rotation amplitude of the shaking to _PARAM1_ degrees (layer: _PARAM2_)":"\u5C07\u6416\u52D5\u7684\u65CB\u8F49\u632F\u5E45\u66F4\u6539\u70BA_PARAM1_\u5EA6\uFF08\u5716\u5C64\uFF1A_PARAM2_\uFF09","NewLayerName":"\u65B0\u5716\u5C64\u540D","Change the zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"\u66F4\u6539\u6643\u52D5\u7684\u7E2E\u653E\u56E0\u5B50\u632F\u5E45\u3002 \u6643\u52D5\u5C07\u6309\u6B64\u56E0\u5B50\u9032\u884C\u7E2E\u653E\u548C\u53D6\u6D88\u7E2E\u653E\uFF08\u4F8B\u59821.0625\u662F\u6709\u6548\u503C\uFF09\u3002","Layer zoom amplitude":"\u5716\u5C64\u7E2E\u653E\u632F\u5E45","Change the zoom factor amplitude of the shaking to _PARAM1_ (layer: _PARAM2_)":"\u5C07\u6643\u52D5\u7684\u7E2E\u653E\u56E0\u5B50\u632F\u5E45\u66F4\u6539\u70BA_PARAM1_\uFF08\u5716\u5C64\uFF1A_PARAM2_\uFF09","Zoom factor":"\u7E2E\u653E\u56E0\u5B50","Change the number of back and forth per seconds.":"\u6BCF\u79D2\u4F86\u56DE\u6B21\u6578\u8B8A\u5316\u3002","Layer shaking frequency":"\u5C64\u9707\u52D5\u983B\u7387","Change the shaking frequency to _PARAM1_ (layer: _PARAM2_)":"\u66F4\u6539\u9707\u52D5\u983B\u7387\u70BA_PARAM1_\uFF08\u5716\u5C64\uFF1A_PARAM2_\uFF09","Frequency":"\u983B\u7387","Change the default translation amplitude of the shaking (in pixels).":"\u66F4\u6539\u9707\u52D5\u7684\u9810\u8A2D\u5E73\u79FB\u632F\u5E45\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002","Default translation amplitude":"\u9810\u8A2D\u5E73\u79FB\u632F\u5E45","Change the default translation amplitude of the shaking to _PARAM1_; _PARAM2_":"\u66F4\u6539\u9707\u52D5\u7684\u9810\u8A2D\u632F\u5E45\u70BA_PARAM1_; _PARAM2_","Change the default rotation amplitude of the shaking (in degrees).":"\u66F4\u6539\u9707\u52D5\u7684\u9810\u8A2D\u65CB\u8F49\u632F\u5E45\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09\u3002","Default rotation amplitude":"\u9810\u8A2D\u65CB\u8F49\u632F\u5E45","Change the default rotation amplitude of the shaking to _PARAM1_ degrees":"\u66F4\u6539\u9707\u52D5\u7684\u9810\u8A2D\u65CB\u8F49\u632F\u5E45\u70BA_PARAM1_\u5EA6","Change the default zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"\u66F4\u6539\u9707\u52D5\u7684\u9810\u8A2D\u7E2E\u653E\u56E0\u5B50\u632F\u5E45\u3002 \u9707\u52D5\u5C07\u6309\u6B64\u56E0\u5B50\u9032\u884C\u7E2E\u653E\u548C\u89E3\u9664\u7E2E\u653E\uFF08\u4F8B\u5982 1.0625 \u662F\u6709\u6548\u503C\uFF09\u3002","Default zoom amplitude":"\u9810\u8A2D\u7E2E\u653E\u632F\u5E45","Change the default zoom factor amplitude of the shaking to _PARAM1_":"\u66F4\u6539\u9707\u52D5\u7684\u9810\u8A2D\u7E2E\u653E\u632F\u5E45\u70BA_PARAM1_","Change the default number of back and forth per seconds.":"\u66F4\u6539\u5E73\u5747\u6BCF\u79D2\u4F86\u56DE\u6B21\u6578\u3002","Default shaking frequency":"\u9810\u8A2D\u9707\u52D5\u983B\u7387","Change the default shaking frequency to _PARAM1_":"\u66F4\u6539\u9810\u8A2D\u9707\u52D5\u983B\u7387\u70BA_PARAM1_","Generate a number from 2 dimensional simplex noise.":"\u5F9E 2 \u7DAD\u7C21\u55AE\u566A\u97F3\u4E2D\u7522\u751F\u4E00\u500B\u6578\u5B57\u3002","2D noise":"2 \u7DAD\u566A\u97F3","Generator name":"\u751F\u6210\u5668\u540D\u7A31","X coordinate":"X \u5EA7\u6A19","Y coordinate":"Y \u5EA7\u6A19","Generate a number from 3 dimensional simplex noise.":"\u5F9E 3 \u7DAD\u7C21\u55AE\u566A\u97F3\u4E2D\u7522\u751F\u4E00\u500B\u6578\u5B57\u3002","3D noise":"3 \u7DAD\u566A\u97F3","Z coordinate":"Z \u5EA7\u6A19","Generate a number from 4 dimensional simplex noise.":"\u5F9E 4 \u7DAD\u7C21\u55AE\u566A\u97F3\u4E2D\u7522\u751F\u4E00\u500B\u6578\u5B57\u3002","4D noise":"4 \u7DAD\u566A\u97F3","W coordinate":"W \u5EA7\u6A19","Create a noise generator with default settings (frequency = 1, octaves = 1, persistence = 0.5, lacunarity = 2).":"\u4F7F\u7528\u9ED8\u8A8D\u8A2D\u7F6E\u5275\u5EFA\u4E00\u500B\u566A\u97F3\u751F\u6210\u5668\uFF08\u983B\u7387=1\uFF0C\u516B\u5EA6=1\uFF0C\u6301\u7E8C\u6027=0.5\uFF0C\u504F\u5DEE=2\uFF09\u3002","Create a noise generator":"\u5275\u5EFA\u4E00\u500B\u566A\u97F3\u751F\u6210\u5668","Create a noise generator named _PARAM1_":"\u5EFA\u7ACB\u540D\u70BA_PARAM1_\u7684\u566A\u97F3\u751F\u6210\u5668","Delete a noise generator and loose its settings.":"\u522A\u9664\u4E00\u500B\u566A\u97F3\u751F\u6210\u5668\u4E26\u4E1F\u5931\u5176\u8A2D\u7F6E\u3002","Delete a noise generator":"\u522A\u9664\u4E00\u500B\u566A\u97F3\u751F\u6210\u5668","Delete _PARAM1_ noise generator":"\u522A\u9664_PARAM1_\u566A\u97F3\u751F\u6210\u5668","Delete all noise generators and loose their settings.":"\u522A\u9664\u6240\u6709\u566A\u97F3\u751F\u6210\u5668\u4E26\u4E1F\u5931\u5176\u8A2D\u7F6E\u3002","Delete all noise generators":"\u522A\u9664\u6240\u6709\u566A\u97F3\u751F\u6210\u5668","The seed is a number used to generate the random noise. Setting the same seed will result in the same random noise generation. It's for example useful to generate the same world, by saving this seed value and reusing it later to generate again a world.":"\u7A2E\u5B50\u662F\u7528\u65BC\u751F\u6210\u96A8\u6A5F\u566A\u97F3\u7684\u6578\u5B57\u3002\u8A2D\u7F6E\u76F8\u540C\u7684\u7A2E\u5B50\u5C07\u5C0E\u81F4\u76F8\u540C\u7684\u96A8\u6A5F\u566A\u97F3\u751F\u6210\u3002\u4F8B\u5982\uFF0C\u901A\u904E\u4FDD\u5B58\u6B64\u7A2E\u5B50\u503C\u4E26\u5728\u7A0D\u5F8C\u91CD\u8907\u4F7F\u7528\u5B83\u4EE5\u518D\u6B21\u751F\u6210\u4E16\u754C\uFF0C\u53EF\u4EE5\u751F\u6210\u76F8\u540C\u7684\u4E16\u754C\u3002","Noise seed":"\u566A\u97F3\u7A2E\u5B50","Change the noise seed to _PARAM1_":"\u5C07\u566A\u97F3\u7A2E\u5B50\u66F4\u6539\u70BA_PARAM1_","Seed":"\u7A2E\u5B50","15 digits numbers maximum":"\u6700\u591A15\u4F4D\u6578","Change the looping period on X used for noise generation. The noise will wrap-around on X.":"\u66F4\u6539\u7528\u65BC\u566A\u97F3\u751F\u6210\u7684X\u8EF8\u8FF4\u5708\u9031\u671F\u3002\u566A\u97F3\u5C07\u5728X\u8EF8\u4E0A\u74B0\u7E5E\u3002","Noise looping period on X":"\u566A\u97F3X\u8EF8\u8FF4\u5708\u9031\u671F","Change the looping period on X of _PARAM2_: _PARAM1_":"\u66F4\u6539_PARAM2_\u7684X\u8EF8\u4E0A\u8FF4\u5708\u9031\u671F\uFF1A_PARAM1_","Looping period on X":"X\u8EF8\u4E0A\u7684\u8FF4\u5708\u9031\u671F","Change the looping period on Y used for noise generation. The noise will wrap-around on Y.":"\u66F4\u6539\u5728Y\u8EF8\u4E0A\u7528\u65BC\u566A\u97F3\u751F\u6210\u7684\u5FAA\u74B0\u5468\u671F\u3002\u566A\u97F3\u5C07\u5728Y\u8EF8\u4E0A\u5FAA\u74B0\u3002","Noise looping period on Y":"Y\u8EF8\u4E0A\u7684\u566A\u97F3\u5FAA\u74B0\u5468\u671F","Change the looping period on Y of _PARAM2_: _PARAM1_":"\u66F4\u6539_PARAM2_\u7684Y\u8EF8\u4E0A\u7684\u5FAA\u74B0\u5468\u671F\uFF1A_PARAM1_","Looping period on Y":"Y\u8EF8\u4E0A\u7684\u5FAA\u74B0\u5468\u671F","Change the base frequency used for noise generation. A lower frequency will zoom in the noise.":"\u66F4\u6539\u7528\u65BC\u566A\u97F3\u751F\u6210\u7684\u57FA\u983B\u3002\u8F03\u4F4E\u7684\u983B\u7387\u6703\u653E\u5927\u566A\u97F3\u3002","Noise base frequency":"\u566A\u97F3\u57FA\u983B","Change the noise frequency of _PARAM2_: _PARAM1_":"\u66F4\u6539_PARAM2_\u7684\u566A\u97F3\u983B\u7387\uFF1A_PARAM1_","Change the number of octaves used for noise generation. It can be seen as layers of noise with different zoom.":"\u66F4\u6539\u7528\u65BC\u566A\u97F3\u751F\u6210\u7684\u632F\u5E45\u5C64\u6578\u3002\u5B83\u53EF\u4EE5\u88AB\u8996\u70BA\u5177\u6709\u4E0D\u540C\u7E2E\u653E\u7684\u566A\u97F3\u5C64\u3002","Noise octaves":"\u566A\u97F3\u632F\u5E45\u5C64\u6578","Change the number of noise octaves of _PARAM2_: _PARAM1_":"\u66F4\u6539_PARAM2_\u7684\u566A\u97F3\u5C64\u6578\uFF1A_PARAM1_","Octaves":"\u566A\u97F3\u5C64\u6578","Change the persistence used for noise generation. At its default value \"0.5\", it halves the noise amplitude at each octave.":"\u66F4\u6539\u7528\u65BC\u566A\u97F3\u751F\u6210\u7684\u6301\u4E45\u5EA6\u3002\u5728\u5176\u9ED8\u8A8D\u503C\u201C0.5\u201D\u8655\uFF0C\u5B83\u4F7F\u6BCF\u500B\u5C64\u6578\u7684\u566A\u97F3\u632F\u5E45\u6E1B\u534A\u3002","Noise persistence":"\u566A\u97F3\u6301\u4E45\u5EA6","Change the noise persistence of _PARAM2_: _PARAM1_":"\u66F4\u6539_PARAM2_\u7684\u566A\u97F3\u6301\u4E45\u5EA6\uFF1A_PARAM1_","Persistence":"\u6301\u4E45\u5EA6","Change the lacunarity used for noise generation. At its default value \"2\", it doubles the frequency at each octave.":"\u66F4\u6539\u7528\u65BC\u566A\u97F3\u751F\u6210\u7684\u6E4D\u6D41\u5EA6\u3002\u5728\u5176\u9ED8\u8A8D\u503C\u201C2\u201D\u8655\uFF0C\u5B83\u4F7F\u6BCF\u500B\u5C64\u6578\u7684\u983B\u7387\u52A0\u500D\u3002","Noise lacunarity":"\u566A\u97F3\u6E4D\u6D41\u5EA6","Change the noise lacunarity of _PARAM2_: _PARAM1_":"\u66F4\u6539_PARAM2_\u7684\u566A\u97F3\u6E4D\u6D41\u5EA6\uFF1A_PARAM1_","Lacunarity":"\u5206\u5F62\u7EF4\u5EA6","The seed used for noise generation.":"\u7528\u65BC\u751F\u6210\u566A\u97F3\u7684\u7A2E\u5B50\u3002","The base frequency used for noise generation.":"\u7528\u65BC\u751F\u6210\u566A\u8072\u7684\u57FA\u672C\u983B\u7387\u3002","The number of octaves used for noise generation.":"\u7528\u65BC\u751F\u6210\u566A\u97F3\u7684\u500D\u983B\u6578\u91CF\u3002","Noise octaves number":"\u566A\u97F3\u500D\u983B\u6578\u91CF","The persistence used for noise generation.":"\u7528\u65BC\u751F\u6210\u566A\u97F3\u7684\u6301\u7E8C\u5EA6\u3002","The lacunarity used for noise generation.":"\u7528\u65BC\u751F\u6210\u566A\u97F3\u7684\u5206\u5F62\u7DAD\u5EA6\u3002","Camera Zoom":"\u76F8\u6A5F\u8B8A\u7126","Allows to zoom camera on a layer with a speed (factor per second).":"\u5141\u8A31\u4EE5\u4E00\u5B9A\u901F\u5EA6\uFF08\u6BCF\u79D2\u7684\u500D\u7387\uFF09\u5728\u5716\u5C64\u4E0A\u7E2E\u653E\u76F8\u6A5F\u3002","Change the camera zoom at a given speed (in factor per second).":"\u4EE5\u7D66\u5B9A\u901F\u5EA6\u6539\u8B8A\u651D\u50CF\u6A5F\u7E2E\u653E\uFF08\u6BCF\u79D2\u56E0\u6578\uFF09\u3002","Zoom camera with speed":"\u6839\u64DA\u901F\u5EA6\u7E2E\u653E\u651D\u50CF\u6A5F","Zoom camera with speed: _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"\u4F7F\u7528\u901F\u5EA6\u7E2E\u653E\u651D\u50CF\u6A5F\uFF1A_PARAM1_\uFF08\u5716\u5C64\uFF1A_PARAM2_\uFF0C\u651D\u50CF\u6A5F\uFF1A_PARAM3_\uFF09","Zoom speed":"\u7E2E\u653E\u901F\u5EA6","Zoom by a factor per second. 1: no effect, 2: zoom in x2 every second, 0.5: zoom out x2 every second.":"\u6BCF\u79D2\u6309\u6BD4\u4F8B\u7E2E\u653E\u30021\uFF1A\u7121\u6548\u679C\uFF0C2\uFF1A\u6BCF\u79D2x2\u653E\u5927\uFF0C0.5\uFF1A\u6BCF\u79D2x2\u7E2E\u5C0F\u3002","Camera number (default: 0)":"\u651D\u50CF\u6A5F\u7DE8\u865F\uFF08\u9ED8\u8A8D\uFF1A0\uFF09","Change the camera zoom and keep an anchor point fixed on screen (instead of the center).":"\u66F4\u6539\u651D\u50CF\u6A5F\u7E2E\u653E\u4E26\u4FDD\u6301\u5C4F\u5E55\u4E0A\u7684\u9328\u9EDE\u56FA\u5B9A\uFF08\u800C\u4E0D\u662F\u5C45\u4E2D\uFF09\u3002","Zoom with anchor":"\u4F7F\u7528\u9328\u9EDE\u7E2E\u653E","Change camera zoom to: _PARAM1_ with an anchor at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"\u5C07\u76F8\u6A5F\u7E2E\u653E\u66F4\u6539\u70BA\uFF1A_PARAM1_\uFF0C\u4E26\u5728\uFF1A_PARAM4_\uFF1B _PARAM5_\u4E0A\u4FDD\u6301\u9328\u9EDE\uFF08\u5716\u5C64\uFF1A_PARAM2_\uFF0C\u651D\u50CF\u6A5F\uFF1A_PARAM3_\uFF09","Zoom":"\u7E2E\u653E","1: Initial zoom, 2: zoom in x2, 0.5: zoom out x2...":"1\uFF1A\u521D\u59CB\u7E2E\u653E\uFF0C2\uFF1A\u6BCF\u79D2\u653E\u5927x2\uFF0C0.5\uFF1A\u6BCF\u79D2\u7E2E\u5C0Fx2\u2026\u2026","Anchor X":"\u9328\u9EDEX","Anchor Y":"\u9328\u9EDEY","Change the camera zoom at a given speed (in factor per second) and keep an anchor point fixed on screen (instead of the center).":"\u4EE5\u7D66\u5B9A\u901F\u5EA6\uFF08\u6BCF\u79D2\u7684\u56E0\u6578\uFF09\u6539\u8B8A\u651D\u50CF\u6A5F\u7E2E\u653E\u4E26\u4FDD\u6301\u5C4F\u5E55\u4E0A\u7684\u9328\u9EDE\u56FA\u5B9A\uFF08\u800C\u4E0D\u662F\u5C45\u4E2D\uFF09\u3002","Zoom camera with speed and anchor":"\u4EE5\u7D66\u5B9A\u901F\u5EA6\u548C\u9328\u9EDE\u7E2E\u653E\u651D\u50CF\u6A5F","Zoom camera with speed: _PARAM1_ and an anchror at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"\u4F7F\u7528\u901F\u5EA6\uFF1A_PARAM1_\u548C\u56FA\u5B9A\u9328\u9EDE\uFF1A_PARAM4_\u7E2E\u653E\u651D\u50CF\u6A5F\uFF1B _PARAM5_\uFF08\u5716\u5C64\uFF1A_PARAM2_\uFF0C\u651D\u50CF\u6A5F\uFF1A_PARAM3_\uFF09","Cancellable draggable object":"\u53EF\u53D6\u6D88\u7684\u53EF\u62D6\u66F3\u7269\u4EF6","Allow to cancel the drag of an object (having the Draggable behavior) and return it smoothly to its previous position.":"\u5141\u8A31\u53D6\u6D88\u7269\u4EF6\u7684\u62D6\u66F3\uFF08\u5177\u6709 Dragable \u884C\u70BA\uFF09\u4E26\u4F7F\u5176\u5E73\u7A69\u8FD4\u56DE\u5230\u5148\u524D\u4F4D\u7F6E\u3002","Allow to cancel the drag of an object and make it smoothly return to its original position (with a tween).":"\u5141\u8A31\u53D6\u6D88\u5C0D\u8C61\u7684\u62D6\u52D5\u4E26\u4F7F\u5176\u9806\u5229\u8FD4\u56DE\u539F\u59CB\u4F4D\u7F6E\uFF08\u5E36\u6709\u904E\u6E21\uFF09\u3002","Cancellable Draggable object":"\u53EF\u53D6\u6D88\u62D6\u52D5\u5C0D\u8C61","Draggable behavior":"\u53EF\u62D6\u66F3\u884C\u70BA","Tween behavior":"Tween \u884C\u70BA","Original X":"\u539F\u59CB X","Original Y":"\u539F\u59CB Y","Cancel last drag.":"\u53D6\u6D88\u6700\u5F8C\u7684\u62D6\u52D5\u3002","Cancel drag (deprecated)":"\u53D6\u6D88\u62D6\u52D5\uFF08\u5DF2\u5EE2\u68C4\uFF09","Cancel last dragging of _PARAM0_ in _PARAM2_ ms with easing _PARAM3_":"\u5728_PARAM2_\u6BEB\u79D2\u5167\u4F7F\u7528_PARAM3_\u8F15\u9B06\u53D6\u6D88\u6700\u5F8C\u4E00\u6B21_PARAM0_\u7684\u62D6\u52D5","Duration in milliseconds":"\u6BEB\u79D2\u5167\u7684\u6301\u7E8C\u6642\u9593","Cancel drag":"\u53D6\u6D88\u62D6\u52D5","Cancel last dragging of _PARAM0_ with easing _PARAM3_ in _PARAM2_ seconds":"\u5728_PARAM2_\u79D2\u5167\u4F7F\u7528_PARAM3_\u8F15\u9B06\u53D6\u6D88\u6700\u5F8C\u4E00\u6B21_PARAM0_\u7684\u62D6\u52D5","Duration in seconds":"\u79D2\u5167\u7684\u6301\u7E8C\u6642\u9593","Dragging is cancelled, the object is returning to its original position.":"\u62D6\u52D5\u88AB\u53D6\u6D88\uFF0C\u5C0D\u8C61\u6B63\u5728\u8FD4\u56DE\u521D\u59CB\u4F4D\u7F6E\u3002","Dragging is cancelled":"\u62D6\u52D5\u88AB\u53D6\u6D88","_PARAM0_ dragging is cancelled":"_PARAM0_\u7684\u62D6\u52D5\u5DF2\u53D6\u6D88","Checkbox (for Shape Painter)":"\u8907\u9078\u6846\uFF08\u5C0D\u5F62\u72C0\u7E6A\u88FD\u5668\uFF09","Checkbox that can be toggled by a left-click or touch.":"\u53EF\u4EE5\u900F\u904E\u5DE6\u9375\u9EDE\u64CA\u6216\u89F8\u63A7\u5207\u63DB\u7684\u8907\u9078\u6846\u3002","Checkbox":"\u52FE\u9078\u65B9\u584A","Checked":"\u5DF2\u52FE\u9078","Checkbox state":"\u65B9\u584A\u72C0\u614B","Halo size (hover). If blank, this is set to \"SideLength\".":"\u5149\u6688\u5927\u5C0F\uFF08\u61F8\u505C\uFF09\u3002\u5982\u679C\u70BA\u7A7A\uFF0C\u5247\u8A2D\u7F6E\u70BA\"SideLength\"\u3002","Checkbox appearance":"\u65B9\u584A\u5916\u89C0","Halo opacity (hover)":"\u5149\u6688\u4E0D\u900F\u660E\u5EA6\uFF08\u61F8\u505C\uFF09","Halo opacity (pressed)":"\u5149\u6688\u4E0D\u900F\u660E\u5EA6\uFF08\u6309\u4E0B\uFF09","Enable interactions":"\u555F\u7528\u4E92\u52D5","State of the checkbox has changed. (Used in \"ToggleChecked\" function)":"\u52FE\u9078\u6846\u7684\u72C0\u614B\u5DF2\u66F4\u6539\u3002\uFF08\u7528\u65BC\u201CToggleChecked\u201D\u529F\u80FD\uFF09","Primary color of checkbox. (Example: 24;119;211) Fill color when box is checked.":"\u65B9\u584A\u7684\u4E3B\u8981\u984F\u8272\u3002\uFF08\u793A\u4F8B\uFF1A24;119;211\uFF09\u5728\u65B9\u584A\u52FE\u9078\u6642\u7684\u586B\u5145\u984F\u8272\u3002","Secondary color of checkbox. (Example: 255;255;255) Color of checkmark when box is checked.":"\u65B9\u584A\u7684\u6B21\u8981\u984F\u8272\u3002\uFF08\u793A\u4F8B\uFF1A255;255;255\uFF09\u65B9\u584A\u52FE\u9078\u6642\u7684\u6838\u53D6\u6A19\u8A18\u984F\u8272\u3002","Length of each side (px) Minimum: 10":"\u6BCF\u500B\u908A\u7684\u9577\u5EA6\uFF08px\uFF09\u6700\u5C0F\u503C\uFF1A10","Line width of checkmark (px) (Min: 1, Max: 1/4 * SideLength)":"\u5C0D\u52FE\u7684\u7DDA\u5BEC\uFF08px\uFF09\uFF08\u6700\u5C0F\uFF1A1\uFF0C\u6700\u5927\uFF1A1/4 * \u908A\u9577\uFF09","Border thickness (px) This border is only visible when the checkbox is unchecked.":"\u908A\u6846\u539A\u5EA6\uFF08px\uFF09\u6B64\u908A\u6846\u50C5\u5728\u672A\u9078\u4E2D\u6838\u53D6\u65B9\u584A\u6642\u53EF\u898B\u3002","Halo size (pressed). If blank, this is set to \"HaloRadiusHover * 1.1\"":"\u5149\u6688\u5927\u5C0F\uFF08\u6309\u4E0B\uFF09\u3002\u5982\u679C\u70BA\u7A7A\uFF0C\u5247\u8A2D\u7F6E\u70BA\u201CHaloRadiusHover * 1.1\u201D","Check (or uncheck) the checkbox.":"\u9078\u4E2D\uFF08\u6216\u53D6\u6D88\u9078\u4E2D\uFF09\u6838\u53D6\u65B9\u584A\u3002","Check (or uncheck) the checkbox":"\u9078\u4E2D\uFF08\u6216\u53D6\u6D88\u9078\u4E2D\uFF09\u6838\u53D6\u65B9\u584A","Add checkmark to _PARAM0_: _PARAM2_":"\u70BA_PARAM0_\u589E\u52A0\u6838\u53D6\u8A18\u865F\uFF1A_PARAM2_","Check the checkbox?":"\u9078\u4E2D\u6838\u53D6\u65B9\u584A\uFF1F","Enable or disable interactions with the checkbox. Users cannot interact while it is disabled.":"\u555F\u7528\u6216\u7981\u7528\u8207\u6838\u53D6\u65B9\u584A\u7684\u4E92\u52D5\u3002\u7576\u7981\u7528\u6642\uFF0C\u4F7F\u7528\u8005\u7121\u6CD5\u9032\u884C\u4E92\u52D5\u3002","Enable interactions with checkbox":"\u555F\u7528\u8207\u6838\u53D6\u65B9\u584A\u7684\u4E92\u52D5","Enable interactions of _PARAM0_: _PARAM2_":"\u555F\u7528_PARAM0_\u7684\u4E92\u52D5\uFF1A_PARAM2_","Enable":"\u555F\u7528","If checked, change to unchecked. If unchecked, change to checked.":"\u5982\u679C\u88AB\u52FE\u9078\uFF0C\u5247\u8B8A\u6210\u53D6\u6D88\u52FE\u9078\u3002\u5982\u679C\u672A\u88AB\u52FE\u9078\uFF0C\u5247\u8B8A\u6210\u5DF2\u52FE\u9078\u3002","Toggle checkmark":"\u5207\u63DB\u52FE\u9078\u6A19\u8A8C","Toggle checkmark on _PARAM0_":"\u5207\u63DB_PARAM0_\u7684\u52FE\u9078\u6A19\u8A8C","Change the primary color of checkbox.":"\u66F4\u6539\u6838\u53D6\u65B9\u584A\u7684\u4E3B\u984F\u8272\u3002","Primary color of checkbox":"\u6838\u53D6\u65B9\u584A\u7684\u4E3B\u984F\u8272","Change the primary color of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u4E3B\u984F\u8272\uFF1A_PARAM2_","Primary color":"\u4E3B\u984F\u8272","Change the secondary color of checkbox.":"\u66F4\u6539\u6838\u53D6\u65B9\u584A\u7684\u6B21\u984F\u8272\u3002","Secondary color of checkbox":"\u6838\u53D6\u65B9\u584A\u7684\u6B21\u984F\u8272","Change the secondary color of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u6B21\u984F\u8272\uFF1A_PARAM2_","Secondary color":"\u6B21\u984F\u8272","Change the halo opacity when pressed.":"\u7576\u6309\u4E0B\u6642\uFF0C\u8B8A\u66F4\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u3002","Halo opacity when pressed":"\u6309\u4E0B\u6642\u7684\u5149\u6688\u4E0D\u900F\u660E\u5EA6","Change the halo opacity of _PARAM0_ when pressed: _PARAM2_":"\u66F4\u6539_PARAM0_\u6309\u4E0B\u6642\u7684\u5149\u6688\u4E0D\u900F\u660E\u5EA6\uFF1A_PARAM2_","Halo opacity":"\u5149\u6688\u4E0D\u900F\u660E\u5EA6","Change the halo opacity when hovered.":"\u7576\u61F8\u505C\u6642\uFF0C\u8B8A\u66F4\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u3002","Halo opacity when hovered":"\u61F8\u505C\u6642\u7684\u5149\u6688\u4E0D\u900F\u660E\u5EA6","Change the halo opacity of _PARAM0_ when hovered: _PARAM2_":"\u66F4\u6539_PARAM0_\u61F8\u505C\u6642\u7684\u5149\u6688\u4E0D\u900F\u660E\u5EA6\uFF1A_PARAM2_","Change the halo radius when pressed.":"\u7576\u6309\u4E0B\u6642\uFF0C\u8B8A\u66F4\u5149\u6688\u534A\u5F91\u3002","Halo radius when pressed":"\u6309\u4E0B\u6642\u7684\u5149\u6688\u534A\u5F91","Change the halo radius of _PARAM0_ when pressed: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u6309\u4E0B\u6642\u7684\u5149\u6688\u534A\u5F91\uFF1A_PARAM2_ \u50CF\u7D20","Halo radius":"\u5149\u6688\u534A\u5F91","Change the halo radius when hovered. This size is also used to detect interaction with the checkbox.":"\u61F8\u505C\u6642\uFF0C\u8B8A\u66F4\u5149\u6688\u534A\u5F91\u3002\u6B64\u5927\u5C0F\u4E5F\u7528\u65BC\u6AA2\u6E2C\u6838\u53D6\u65B9\u584A\u7684\u4E92\u52D5\u3002","Halo radius when hovered":"\u61F8\u505C\u6642\u7684\u5149\u6688\u534A\u5F91","Change the halo radius of _PARAM0_ when hovered: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u61F8\u505C\u6642\u7684\u5149\u6688\u534A\u5F91\uFF1A_PARAM2_ \u50CF\u7D20","Change the border thickness of checkbox.":"\u66F4\u6539\u6838\u53D6\u65B9\u584A\u7684\u908A\u6846\u539A\u5EA6\u3002","Border thickness of checkbox":"\u6838\u53D6\u65B9\u584A\u7684\u908A\u6846\u539A\u5EA6","Change the border thickness of _PARAM0_: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u7684\u908A\u6846\u539A\u5EA6\uFF1A_PARAM2_ \u50CF\u7D20","Track thickness":"\u8ECC\u9053\u539A\u5EA6","Change the side length of checkbox.":"\u66F4\u6539\u6838\u53D6\u65B9\u584A\u7684\u908A\u9577\u3002","Side length of checkbox":"\u6838\u53D6\u65B9\u584A\u7684\u908A\u9577","Change the side length of _PARAM0_: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u7684\u908A\u9577\uFF1A_PARAM2_px","Track width (px)":"\u8ECC\u9053\u5BEC\u5EA6\uFF08px\uFF09","Change the line width of checkmark.":"\u66F4\u6539\u52FE\u9078\u9EDE\u7684\u7DDA\u5BEC\u3002","Line width of checkmark":"\u52FE\u9078\u9EDE\u7684\u7DDA\u5BEC","Change the line width of _PARAM0_: _PARAM2_ px":"\u66F4\u6539_PARAM0_\u7684\u7DDA\u5BEC\uFF1A_PARAM2_px","Line width (px)":"\u7DDA\u5BEC\uFF08px\uFF09","Check if the checkbox is checked.":"\u6AA2\u67E5\u5FA9\u9078\u6846\u662F\u5426\u5DF2\u52FE\u9078\u3002","Is checked":"\u5DF2\u6AA2\u67E5","_PARAM0_ is checked":"_PARAM0_\u5DF2\u52FE\u9078","Check if the checkbox interations are enabled.":"\u6AA2\u67E5\u5FA9\u9078\u6846\u662F\u5426\u555F\u7528\u4E92\u52D5\u3002","Interactions enabled":"\u4E92\u52D5\u5DF2\u555F\u7528","Interactions of _PARAM0_ are enabled":"_PARAM0_\u7684\u4E92\u52D5\u5DF2\u555F\u7528","Return the color used to draw the outline of the checkbox (when unchecked) and the fill color (when checked).":"\u8FD4\u56DE\u7528\u4F86\u7E6A\u88FD\u5FA9\u9078\u6846\u8F2A\u5ED3\uFF08\u672A\u52FE\u9078\u6642\uFF09\u548C\u586B\u5145\u984F\u8272\uFF08\u5DF2\u52FE\u9078\u6642\uFF09\u7684\u984F\u8272\u3002","Change the maximum value of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u6700\u5927\u503C\uFF1A_PARAM2_","Return the color used to fill the checkbox (when unchecked) and to draw the checkmark (when checked).":"\u8FD4\u56DE\u7528\u4F86\u586B\u5145\u5FA9\u9078\u6846\uFF08\u672A\u52FE\u9078\u6642\uFF09\u548C\u7E6A\u88FD\u52FE\u9078\u9EDE\uFF08\u5DF2\u52FE\u9078\u6642\uFF09\u7684\u984F\u8272\u3002","Return the radius of the halo while the checkbox is touched or clicked.":"\u8FD4\u56DE\u9EDE\u64CA\u6216\u89F8\u6478\u5FA9\u9078\u6846\u6642\u7684\u5149\u74B0\u534A\u5F91\u3002","Halo radius while touched or clicked":"\u9EDE\u64CA\u6642\u7684\u5149\u74B0\u534A\u5F91","Return the opacity of the halo while the checkbox is touched or clicked.":"\u8FD4\u56DE\u9EDE\u64CA\u6216\u89F8\u6478\u5FA9\u9078\u6846\u6642\u5149\u74B0\u7684\u900F\u660E\u5EA6\u3002","Halo opacity (while touched or clicked)":"\u5149\u74B0\u900F\u660E\u5EA6\uFF08\u9EDE\u64CA\u6216\u89F8\u6478\u6642\uFF09","Return the radius of the halo when the mouse is hovering near the checkbox.":"\u8FD4\u56DE\u6ED1\u9F20\u9760\u8FD1\u5FA9\u9078\u6846\u6642\u5149\u74B0\u7684\u534A\u5F91\u3002","Halo radius (during hover)":"\u5149\u74B0\u534A\u5F91\uFF08\u6ED1\u9F20\u61F8\u505C\u6642\uFF09","Return the opacity of the halo when the mouse is hovering near the checkbox.":"\u8FD4\u56DE\u6ED1\u9F20\u9760\u8FD1\u5FA9\u9078\u6846\u6642\u5149\u74B0\u7684\u900F\u660E\u5EA6\u3002","Halo opacity (during hover)":"\u5149\u74B0\u900F\u660E\u5EA6\uFF08\u61F8\u505C\u6642\uFF09","Return the line width of checkmark (pixels).":"\u8FD4\u56DE\u52FE\u9078\u9EDE\u7684\u7DDA\u5BEC\uFF08\u50CF\u7D20\uFF09\u3002","Line width":"\u7DDA\u5BEC","Return the side length of checkbox (pixels).":"\u8FD4\u56DE\u5FA9\u9078\u6846\u7684\u908A\u9577\uFF08\u50CF\u7D20\uFF09\u3002","Side length":"\u908A\u9577","Return the border thickness of checkbox (pixels).":"\u8FD4\u56DE\u5FA9\u9078\u6846\u7684\u908A\u6846\u539A\u5EA6\uFF08\u50CF\u7D20\uFF09\u3002","Border thickness":"\u908A\u6846\u539A\u5EA6","Check if the checkbox is being pressed by mouse or touch.":"\u6AA2\u67E5\u5FA9\u9078\u6846\u662F\u5426\u88AB\u6ED1\u9F20\u6216\u89F8\u6478\u6309\u4E0B\u3002","Checkbox is being pressed":"\u5FA9\u9078\u6846\u88AB\u6309\u4E0B","_PARAM0_ is being pressed by mouse or touch":"_PARAM0_\u88AB\u6ED1\u9F20\u6216\u89F8\u6478\u6309\u4E0B","Update the hitbox.":"\u66F4\u65B0\u89F8\u63A7\u5340\u3002","Update hitbox":"\u66F4\u65B0\u78B0\u649E\u7BB1","Update the hitbox of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u78B0\u649E\u7BB1","Checkpoints":"\u6AA2\u67E5\u9EDE","Respawn objects at checkpoints.":"\u5728\u6AA2\u67E5\u9EDE\u91CD\u65B0\u751F\u6210\u7269\u4EF6\u3002","Game mechanic":"\u904A\u6232\u6A5F\u5236","Update a checkpoint of an object.":"\u66F4\u65B0\u7269\u4EF6\u7684\u6AA2\u67E5\u9EDE\u3002","Save checkpoint":"\u5132\u5B58\u6AA2\u67E5\u9EDE","Save checkpoint _PARAM4_ of _PARAM1_ to _PARAM2_ (x-axis), _PARAM3_ (y-axis)":"\u5C07_PARAM1_\u7684\u6AA2\u67E5\u9EDE_PARAM4_\u5132\u5B58\u5230_PARAM2_\uFF08x\u8EF8\uFF09\uFF0C_PARAM3_\uFF08y\u8EF8\uFF09","Save checkpoint of object":"\u5132\u5B58\u7269\u4EF6\u7684\u6AA2\u67E5\u9EDE","X position":"X \u4F4D\u7F6E","Y position":"Y \u4F4D\u7F6E","Checkpoint name":"\u6AA2\u67E5\u9EDE\u540D\u7A31","Change the position of the object to the saved checkpoint.":"\u5C07\u7269\u4EF6\u7684\u4F4D\u7F6E\u66F4\u6539\u70BA\u5DF2\u5132\u5B58\u7684\u6AA2\u67E5\u9EDE\u3002","Load checkpoint":"\u8F09\u5165\u6AA2\u67E5\u9EDE","Move _PARAM2_ to checkpoint _PARAM3_ of _PARAM1_":"\u79FB\u52D5_PARAM2_\u5230\u6AA2\u67E5\u9EDE_PARAM3_\u7684_PARAM1_","Load checkpoint from object":"\u5F9E\u7269\u4EF6\u8F09\u5165\u6AA2\u67E5\u9EDE","Change position of object":"\u66F4\u6539\u7269\u4EF6\u4F4D\u7F6E","Ignore (possibly) empty checkpoints":"\u5FFD\u7565\uFF08\u53EF\u80FD\uFF09\u7A7A\u7684\u6AA2\u67E5\u9EDE","Loading not yet saved checkpoints will (by default) set the position to the coordinate 0;0. Select \"yes\" to completely ignore non-existant checkpoints. To define an alternative checkpoint for it, create a new event and use the \"Checkpoint exists\" condition, save the wanted checkpoint as the action.":"\u5C1A\u672A\u4FDD\u5B58\u7684\u6AA2\u67E5\u9EDE\u7684\u52A0\u8F09\u5C07\uFF08\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF09\u5C07\u4F4D\u7F6E\u8A2D\u7F6E\u70BA\u5750\u6A19 0;0\u3002\u9078\u64C7\u201C\u662F\u201D\u5C07\u5B8C\u5168\u5FFD\u7565\u4E0D\u5B58\u5728\u7684\u6AA2\u67E5\u9EDE\u3002\u8981\u70BA\u5176\u5B9A\u7FA9\u66FF\u4EE3\u6AA2\u67E5\u9EDE\uFF0C\u5275\u5EFA\u4E00\u500B\u65B0\u4E8B\u4EF6\u4E26\u4F7F\u7528\u201C\u6AA2\u67E5\u9EDE\u5B58\u5728\u201D\u689D\u4EF6\uFF0C\u5C07\u6240\u9700\u7684\u6AA2\u67E5\u9EDE\u4FDD\u5B58\u70BA\u64CD\u4F5C\u3002","Check if a checkpoint has a position saved / does exist.":"\u6AA2\u67E5\u9EDE\u662F\u5426\u5177\u6709\u4FDD\u5B58\u7684\u4F4D\u7F6E/\u5B58\u5728\u3002","Checkpoint exists":"\u6AA2\u67E5\u9EDE\u5B58\u5728","Checkpoint _PARAM2_ of _PARAM1_ exists":"_PARAM1_\u7684\u6AA2\u67E5\u9EDE_PARAM2_\u5B58\u5728","Check checkpoint from object":"\u6AA2\u67E5\u5C0D\u8C61\u7684\u6AA2\u67E5\u9EDE","Clipboard":"\u526A\u8CBC\u7C3F","Read and write the clipboard.":"\u8B80\u5BEB\u526A\u8CBC\u7C3F\u3002","Read the text from the clipboard asynchronously. \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"\u7570\u6B65\u5F9E\u526A\u8CBC\u7C3F\u8B80\u53D6\u6587\u672C\u3002\n\u9084\u8981\u6CE8\u610F\uFF0C\u5728Web\u700F\u89BD\u5668\u4E0A\uFF0C\u7528\u6236\u53EF\u80FD\u6703\u88AB\u8981\u6C42\u5141\u8A31\u5F9E\u526A\u8CBC\u7C3F\u8B80\u53D6\u3002","Get text from the clipboard":"\u5F9E\u526A\u8CBC\u7C3F\u7372\u53D6\u6587\u672C","Read clipboard and store text in _PARAM1_":"\u8B80\u53D6\u526A\u8CBC\u7C3F\u4E26\u5C07\u6587\u672C\u5B58\u5132\u5728_PARAM1_\u4E2D","Callback variable where to store the clipboard contents":"\u56DE\u8ABF\u8B8A\u91CF\uFF0C\u7528\u65BC\u5B58\u5132\u526A\u8CBC\u7C3F\u5167\u5BB9","Write the text in the clipboard.":"\u5C07\u6587\u672C\u5BEB\u5165\u526A\u8CBC\u7C3F\u3002","Write text to the clipboard":"\u5C07\u6587\u672C\u5BEB\u5165\u526A\u8CBC\u7C3F","Write _PARAM1_ to clipboard":"\u5C07_PARAM1_\u5BEB\u5165\u526A\u8CBC\u7C3F","Text to write to clipboard":"\u8981\u5BEB\u5165\u526A\u8CBC\u7C3F\u7684\u6587\u672C","Read the text from the clipboard asynchronously. As this is \"asynchronous\", the variable won't be immediately filled with the text from the clipboard. You will have to wait a few frames before it will be. If you want your subsequent actions and subevents to automatically wait for the read to finish, use the waiting version of this action instead (recomended). \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"\u7570\u6B65\u5F9E\u526A\u8CBC\u7C3F\u8B80\u53D6\u6587\u672C\u3002\u7531\u65BC\u9019\u662F\u201C\u7570\u6B65\u201D\u7684\uFF0C\u8B8A\u91CF\u4E0D\u6703\u7ACB\u5373\u586B\u6EFF\u4F86\u81EA\u526A\u8CBC\u7C3F\u7684\u6587\u672C\u3002\u4F60\u5C07\u4E0D\u5F97\u4E0D\u7B49\u5E7E\u5E40\uFF0C\u7136\u5F8C\u624D\u80FD\u8B80\u5230\u3002\u5982\u679C\u60A8\u5E0C\u671B\u96A8\u5F8C\u7684\u64CD\u4F5C\u548C\u5B50\u4E8B\u4EF6\u81EA\u52D5\u7B49\u5F85\u8B80\u53D6\u5B8C\u6210\uFF0C\u8ACB\u6539\u7528\u6B64\u64CD\u4F5C\u7684\u7B49\u5F85\u7248\u672C\uFF08\u63A8\u85A6\uFF09\u3002\u9084\u8981\u6CE8\u610F\uFF0C\u5728Web\u700F\u89BD\u5668\u4E0A\uFF0C\u53EF\u80FD\u6703\u8981\u6C42\u7528\u6236\u5141\u8A31\u5F9E\u526A\u8CBC\u7C3F\u8B80\u53D6\u3002","(No waiting) Get text from the clipboard":"\uFF08\u4E0D\u7B49\u5F85\uFF09\u5F9E\u526A\u8CBC\u7C3F\u7372\u53D6\u6587\u672C","Callback variable where to store the result":"\u56DE\u8ABF\u8B8A\u91CF\uFF0C\u7528\u65BC\u5B58\u5132\u7D50\u679C","[DEPRECATED] Read the text from the clipboard (Windows, macOS, Linux only)":"[\u5DF2\u68C4\u7528]\u5F9E\u526A\u8CBC\u7C3F\u8B80\u53D6\u6587\u672C\uFF08\u50C5\u9650Windows\uFF0CmacOS\uFF0CLinux\uFF09","[DEPRECATED] Get text from the clipboard (Windows, macOS, Linux)":"[\u5DF2\u68C4\u7528]\u5F9E\u526A\u8CBC\u7C3F\u7372\u53D6\u6587\u672C\uFF08\u50C5\u9650Windows\uFF0CmacOS\uFF0CLinux\uFF09","Volume settings":"\u97F3\u91CF\u8A2D\u7F6E","A collapsible volume setting menu.":"\u53EF\u6298\u758A\u97F3\u91CF\u8A2D\u7F6E\u83DC\u55AE\u3002","Check if the events are running for the editor.":"\u6AA2\u67E5\u4E8B\u4EF6\u662F\u5426\u6B63\u5728\u70BA\u7DE8\u8F2F\u5668\u904B\u884C\u3002","Editor is running":"\u7DE8\u8F2F\u5668\u6B63\u5728\u904B\u884C","Events are running for the editor":"\u4E8B\u4EF6\u6B63\u5728\u70BA\u7DE8\u8F2F\u5668\u904B\u884C","Collapsible volume setting menu.":"\u53EF\u6298\u758A\u97F3\u91CF\u8A2D\u7F6E\u83DC\u55AE\u3002","Show the volum controls.":"\u986F\u793A\u97F3\u91CF\u63A7\u5236\u3002","Open volum controls":"\u6253\u958B\u97F3\u91CF\u63A7\u5236","Open _PARAM0_ volum controls":"\u6253\u958B _PARAM0_ \u97F3\u91CF\u63A7\u5236","Hide the volum controls.":"\u96B1\u85CF\u97F3\u91CF\u63A7\u5236\u3002","Close volum controls":"\u95DC\u9589\u97F3\u91CF\u63A7\u5236","Close _PARAM0_ volum controls":"\u95DC\u9589 _PARAM0_ \u97F3\u91CF\u63A7\u5236","Color Conversion":"\u984F\u8272\u8F49\u63DB","Expressions to convert color values between various formats (RGB, HSV, HSL, named colors), calculate luminance according to WCAG 2.0 standards, and to blend two colors.":"\u8868\u9054\u5F0F\uFF0C\u7528\u65BC\u5728\u5404\u7A2E\u683C\u5F0F\u4E4B\u9593\u8F49\u63DB\u984F\u8272\u503C\uFF08RGB\u3001HSV\u3001HSL\u3001\u547D\u540D\u984F\u8272\uFF09\uFF0C\u6839\u64DAWCAG 2.0\u6A19\u6E96\u8A08\u7B97\u4EAE\u5EA6\uFF0C\u4E26\u6DF7\u5408\u5169\u7A2E\u984F\u8272\u3002","Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".":"\u5C07\u5341\u516D\u9032\u5236\u5B57\u7B26\u4E32\u8F49\u63DB\u70BARGB\u5B57\u7B26\u4E32\u3002 \u4F8B\u5B50\u8F38\u5165\uFF1A\u201C0459AF\u201D\u3002","Hexadecimal to RGB":"\u5341\u516D\u9032\u5236\u8F49RGB","Hex value":"\u5341\u516D\u9032\u5236\u503C","Calculate luminance of a RGB color. Example input: \"0;128;255\".":"\u8A08\u7B97RGB\u984F\u8272\u7684\u4EAE\u5EA6\u3002 \u4F8B\u5B50\u8F38\u5165\uFF1A\u201C0;128\uFF1B255\u201D\u3002","Luminance from RGB":"RGB\u7684\u4EAE\u5EA6","RGB color":"RGB\u984F\u8272","Calculate luminance of a hexadecimal color. Example input: \"0459AF\".":"\u8A08\u7B97\u5341\u516D\u9032\u5236\u984F\u8272\u7684\u4EAE\u5EA6\u3002 \u4F8B\u5B50\u8F38\u5165\uFF1A\u201C0459AF\u201D\u3002","Luminance from hexadecimal":"\u5F9E\u5341\u516D\u9032\u5236\u8A08\u7B97\u4EAE\u5EA6","Blend two RGB colors by applying a weighted mean.":"\u901A\u904E\u52A0\u6B0A\u5E73\u5747\u6DF7\u5408\u5169\u500B RGB \u984F\u8272\u3002","Blend RGB colors":"\u6DF7\u5408 RGB \u984F\u8272","First RGB color":"\u7B2C\u4E00\u500B RGB \u984F\u8272","Second RGB color":"\u7B2C\u4E8C\u500B RGB \u984F\u8272","Ratio":"\u6BD4\u4F8B","Range: 0 to 1, where 0 gives the first color and 1 gives the second color":"\u7BC4\u570D\uFF1A0 \u5230 1\uFF0C\u5176\u4E2D 0 \u7D66\u51FA\u7B2C\u4E00\u7A2E\u984F\u8272\uFF0C1 \u7D66\u51FA\u7B2C\u4E8C\u7A2E\u984F\u8272","Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".":"\u5C07 RGB \u5B57\u7B26\u4E32\u8F49\u63DB\u70BA\u5341\u516D\u9032\u5236\u5B57\u7B26\u4E32\u3002 \u793A\u4F8B\u8F38\u5165\uFF1A\u201C0;128;255\u201D\u3002","RGB to hexadecimal":"RGB \u8F49\u5341\u516D\u9032\u5236","RGB value":"RGB \u503C","Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".":"\u5C07 RGB \u5B57\u7B26\u4E32\u8F49\u63DB\u70BA HSL \u5B57\u7B26\u4E32\u3002 \u793A\u4F8B\u8F38\u5165\uFF1A\u201C0;128;255\u201D\u201C\u3002","RGB to HSL":"RGB \u8F49 HSL","Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).":"\u5C07 HSV \u984F\u8272\u503C\u8F49\u63DB\u70BA RGB \u5B57\u7B26\u4E32\u3002 \u6709\u6548\u8F38\u5165\u7BC4\u570D\uFF1AH\uFF080 \u5230 360\uFF09\uFF0CS\uFF080 \u5230 100\uFF09\uFF0CV\uFF080 \u5230 100\uFF09\u3002","HSV to RGB":"HSV \u8F49 RGB","Hue 0-360":"\u8272\u76F8 0-360","Saturation 0-100":"\u98FD\u548C\u5EA6 0-100","Value 0-100":"\u503C 0-100","Converts a RGB string into a HSV string. Example input: \"0;128;255\".":"\u5C07 RGB \u5B57\u7B26\u4E32\u8F49\u63DB\u70BA HSV \u5B57\u7B26\u4E32\u3002 \u793A\u4F8B\u8F38\u5165\uFF1A\u201C0;128;255\u201D\u3002","RGB to HSV":"RGB \u8F49 HSV","Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.":"\u5C07\u984F\u8272\u540D\u7A31\u8F49\u63DB\u70BA RGB \u5B57\u7B26\u4E32\u3002 \uFF08\u793A\u4F8B\uFF1A\u9ED1\u8272\u3001\u7070\u8272\u3001\u767D\u8272\u3001\u7D05\u8272\u3001\u7D2B\u8272\u3001\u7DA0\u8272\u3001\u9EC3\u8272\u3001\u85CD\u8272\uFF09 \n\u53EF\u7528\u984F\u8272\u7684\u5B8C\u6574\u5217\u8868\uFF1Ahttps://www.w3schools.com/colors/colors_names.asp\u3002","Color name to RGB":"\u984F\u8272\u540D\u7A31\u8F49 RGB","Name of a color":"\u984F\u8272\u540D\u7A31","Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).":"\u5C07 HSL \u984F\u8272\u503C\u8F49\u63DB\u70BA RGB \u5B57\u7B26\u4E32\u3002 \u6709\u6548\u8F38\u5165\u7BC4\u570D\uFF1AH\uFF080 \u5230 360\uFF09\uFF0CS\uFF080 \u5230 100\uFF09\uFF0CL\uFF080 \u5230 100\uFF09\u3002","HSL to RGB":"HSL \u8F49 RGB","Lightness 0-100":"\u660E\u5EA6 0-100","Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.":"\u5C07\u8272\u76F8\uFF08\u7BC4\u570D\uFF1A0 \u5230 360\uFF09\u8F49\u63DB\u70BA 100% \u98FD\u548C\u5EA6\u548C 50% \u660E\u5EA6\u7684 RGB \u984F\u8272\u5B57\u7B26\u4E32\u3002","Hue to RGB":"\u8272\u76F8\u8F49 RGB","Compressor":"\u58D3\u7E2E\u5668","Compress and decompress strings.":"\u58D3\u7E2E\u548C\u89E3\u58D3\u5B57\u7B26\u4E32\u3002","Decompress a string.":"\u89E3\u58D3\u7E2E\u5B57\u7B26\u4E32\u3002","Decompress String":"\u89E3\u58D3\u7E2E\u5B57\u7B26\u4E32","String to decompress":"\u89E3\u58D3\u7E2E\u5B57\u4E32","Compress a string.":"\u58D3\u7E2E\u5B57\u4E32\u3002","Compress String":"\u58D3\u7E2E\u5B57\u4E32","String to compress":"\u58D3\u7E2E\u7684\u5B57\u4E32","Copy camera settings":"\u8907\u88FD\u651D\u50CF\u6A5F\u8A2D\u7F6E","Copy the camera settings of a layer and apply them to another layer.":"\u8907\u88FD\u5C64\u7684\u651D\u50CF\u6A5F\u8A2D\u7F6E\u4E26\u61C9\u7528\u5230\u53E6\u4E00\u500B\u5C64\u3002","Copy camera settings of a layer and apply them to another layer.":"\u8907\u88FD\u5716\u5C64\u7684\u651D\u5F71\u6A5F\u8A2D\u7F6E\u4E26\u61C9\u7528\u5230\u53E6\u4E00\u500B\u5716\u5C64\u3002","Copy camera settings of _PARAM1_ layer and apply them to _PARAM3_ layer (X position: _PARAM5_, Y position: _PARAM6_, Zoom: _PARAM7_, Angle: _PARAM8_)":"\u8907\u88FD _PARAM1_ \u5716\u5C64\u7684\u651D\u5F71\u6A5F\u8A2D\u7F6E\u4E26\u61C9\u7528\u5230 _PARAM3_ \u5716\u5C64\uFF08X \u4F4D\u7F6E\uFF1A_PARAM5_\uFF0CY \u4F4D\u7F6E\uFF1A_PARAM6_\uFF0C\u7E2E\u653E\uFF1A_PARAM7_\uFF0C\u89D2\u5EA6\uFF1A_PARAM8_\uFF09","Source layer":"\u6E90\u5716\u5C64","Source camera":"\u6E90\u651D\u5F71\u6A5F","Destination layer":"\u76EE\u6A19\u5716\u5C64","Destination camera":"\u76EE\u6A19\u651D\u5F71\u6A5F","Clone X position":"\u8907\u88FD X \u4F4D\u7F6E","Clone Y position":"\u8907\u88FD Y \u4F4D\u7F6E","Clone zoom":"\u8907\u88FD\u7E2E\u653E","Clone angle":"\u8907\u88FD\u89D2\u5EA6","CrazyGames SDK v3":"CrazyGames SDK v3","Allow games to be hosted on CrazyGames website, display ads and interact with CrazyGames user accounts.":"\u5141\u8A31\u5728CrazyGames\u7DB2\u7AD9\u4E0A\u6258\u7BA1\u904A\u6232\uFF0C\u986F\u793A\u5EE3\u544A\u4E26\u8207CrazyGames\u7528\u6236\u5E33\u6236\u4EA4\u4E92\u3002","Third-party":"\u7B2C\u4E09\u65B9","Get link account response.":"\u7372\u53D6\u5E33\u6236\u9023\u7D50\u56DE\u61C9\u3002","Link account response":"\u5E33\u6236\u9023\u7D50\u56DE\u61C9","the last error from the CrazyGames API.":"CrazyGames API \u7684\u6700\u5F8C\u932F\u8AA4\u3002","Get last error":"\u7372\u53D6\u6700\u5F8C\u4E00\u6B21\u932F\u8AA4","CrazyGames API last error is":"CrazyGames API \u7684\u6700\u5F8C\u932F\u8AA4\u662F","Check if an user is signed into CrazyGames. If signed in, retrieves username and profile picture.":"\u6AA2\u67E5\u7528\u6236\u662F\u5426\u5DF2\u767B\u9304 CrazyGames\u3002\u5982\u679C\u5DF2\u7C3D\u7F72\uFF0C\u7372\u53D6\u7528\u6236\u540D\u548C\u982D\u50CF\u3002","Check and load if an user is signed in CrazyGames":"\u6AA2\u67E5\u4E26\u52A0\u8F09\u662F\u5426\u6709\u7528\u6236\u5728 CrazyGames \u4E2D\u5DF2\u7C3D\u7F72","Check if user is signed in CrazyGames":"\u6AA2\u67E5\u7528\u6236\u662F\u5426\u5DF2\u5728 CrazyGames \u4E2D\u7C3D\u7F72","Check if the user is signed in.":"\u6AA2\u67E5\u7528\u6236\u662F\u5426\u5DF2\u7C3D\u7F72\u3002","User is signed in":"\u7528\u6236\u5DF2\u7C3D\u7F72","Return an invite link.":"\u8FD4\u56DE\u9080\u8ACB\u9023\u7D50\u3002","Invite link":"\u9080\u8ACB\u9023\u7D50","Room id":"\u623F\u9593 ID","Display an invite button.":"\u986F\u793A\u9080\u8ACB\u6309\u9215\u3002","Display invite button":"\u986F\u793A\u9080\u8ACB\u6309\u9215","Display an invite button for the room id: _PARAM1_":"\u986F\u793A\u623F\u9593 ID\uFF1A_PARAM1_ \u7684\u9080\u8ACB\u6309\u9215","Load CrazyGames SDK.":"\u52A0\u8F09 CrazyGames SDK\u3002","Load SDK":"\u8F09\u5165 SDK","Load CrazyGames SDK":"\u8F09\u5165 CrazyGames SDK","Check if the CrazyGames SDK is ready to be used.":"\u6AA2\u67E5 CrazyGames SDK \u662F\u5426\u6E96\u5099\u597D\u4F7F\u7528\u3002","CrazyGames SDK is ready":"CrazyGames SDK \u5099\u59A5","Let CrazyGames know gameplay started.":"\u8B93CrazyGames\u77E5\u9053\u904A\u6232\u5DF2\u7D93\u958B\u59CB\u3002","Gameplay started":"\u904A\u6232\u5DF2\u7D93\u958B\u59CB","Let CrazyGames know gameplay started":"\u8B93CrazyGames\u77E5\u9053\u904A\u6232\u5DF2\u7D93\u958B\u59CB","Let CrazyGames know gameplay stopped.":"\u8B93CrazyGames\u77E5\u9053\u904A\u6232\u5DF2\u7D93\u505C\u6B62\u3002","Gameplay stopped":"\u904A\u6232\u5DF2\u7D93\u505C\u6B62","Let CrazyGames know gameplay stopped":"\u8B93CrazyGames\u77E5\u9053\u904A\u6232\u5DF2\u7D93\u505C\u6B62","Let CrazyGames know loading started.":"\u8B93CrazyGames\u77E5\u9053\u904A\u6232\u5DF2\u7D93\u958B\u59CB\u52A0\u8F09\u3002","Loading started":"\u904A\u6232\u52A0\u8F09\u5DF2\u7D93\u958B\u59CB","Let CrazyGames know loading started":"\u8B93CrazyGames\u77E5\u9053\u904A\u6232\u52A0\u8F09\u5DF2\u7D93\u958B\u59CB","Let CrazyGames know loading stopped.":"\u8B93CrazyGames\u77E5\u9053\u904A\u6232\u52A0\u8F09\u5DF2\u7D93\u505C\u6B62\u3002","Loading stopped":"\u904A\u6232\u52A0\u8F09\u5DF2\u7D93\u505C\u6B62","Let CrazyGames know loading stopped":"\u8B93CrazyGames\u77E5\u9053\u904A\u6232\u52A0\u8F09\u5DF2\u7D93\u505C\u6B62","Display a video ad. The game is automatically muted while the video is playing.":"\u64AD\u653E\u4E00\u500B\u8996\u983B\u5EE3\u544A\u3002\u904A\u6232\u5C07\u5728\u8996\u983B\u64AD\u653E\u6642\u81EA\u52D5\u975C\u97F3\u3002","Display video ad":"\u64AD\u653E\u8996\u983B\u5EE3\u544A","Display _PARAM1_ video ad":"\u986F\u793A_PARAM1_\u8996\u983B\u5EE3\u544A","Ad Type":"\u5EE3\u544A\u985E\u578B","Checks if a video ad just finished playing successfully.":"\u6AA2\u67E5\u8996\u983B\u5EE3\u544A\u662F\u5426\u6210\u529F\u64AD\u653E\u5B8C\u7562\u3002","Video ad just finished playing":"\u8996\u983B\u5EE3\u544A\u525B\u525B\u6210\u529F\u64AD\u653E\u5B8C\u7562","Checks if a video ad is playing.":"\u6AA2\u67E5\u8996\u983B\u5EE3\u544A\u662F\u5426\u6B63\u5728\u64AD\u653E\u3002","Video ad is playing":"\u8996\u983B\u5EE3\u544A\u6B63\u5728\u64AD\u653E","Check if the user changed.":"\u6AA2\u67E5\u7528\u6236\u662F\u5426\u66F4\u6539\u3002","User changed":"\u7528\u6236\u66F4\u6539","Check if a video ad had an error.":"\u6AA2\u67E5\u8996\u983B\u5EE3\u544A\u662F\u5426\u6709\u932F\u8AA4\u3002","Video ad had an error":"\u8996\u983B\u5EE3\u544A\u51FA\u73FE\u932F\u8AA4","Generate an invite link to invite friends to join your game sessions. This URL can be added to the clipboard or displayed in the game to let the user select it.":"\u751F\u6210\u4E00\u500B\u9080\u8ACB\u93C8\u63A5\uFF0C\u9080\u8ACB\u670B\u53CB\u52A0\u5165\u60A8\u7684\u904A\u6232\u6703\u8A71\u3002\u53EF\u4EE5\u5C07\u6B64URL\u6DFB\u52A0\u5230\u526A\u8CBC\u677F\u6216\u5728\u904A\u6232\u4E2D\u986F\u793A\u4EE5\u4F9B\u7528\u6236\u9078\u64C7\u3002","Generate an invite link":"\u751F\u6210\u4E00\u500B\u9080\u8ACB\u93C8\u63A5","Generate an invite link for _PARAM1_":"\u70BA_PARAM1_\u751F\u6210\u9080\u8ACB\u93C8\u63A5","Display an happy time by emitting sparkling confetti. The celebration should remain a special moment.":"\u901A\u904E\u767C\u5C04\u7DBB\u653E\u7684\u5F69\u5E36\u4F86\u5C55\u793A\u4E00\u500B\u5FEB\u6A02\u7684\u6642\u523B\u3002\u9019\u7A2E\u6176\u795D\u61C9\u8A72\u59CB\u7D42\u662F\u4E00\u500B\u7279\u6B8A\u7684\u6642\u523B\u3002","Display happy time":"\u5C55\u793A\u5FEB\u6A02\u6642\u5149","Scan for ad blockers.":"\u6383\u63CF\u5EE3\u544A\u5C01\u9396\u7A0B\u5F0F\u3002","Scan for ad blockers":"\u6383\u63CF\u5EE3\u544A\u5C01\u9396\u7A0B\u5F0F","Check if user is using an ad blocker. This condition is always false before the \"Scan for ad blockers\" is called.":"\u6AA2\u67E5\u7528\u6236\u662F\u5426\u4F7F\u7528\u5EE3\u544A\u5C01\u9396\u7A0B\u5F0F\u3002\u5728\u201C\u6383\u63CF\u5EE3\u544A\u5C01\u9396\u7A0B\u5F0F\u201D\u8ABF\u7528\u4E4B\u524D\uFF0C\u6B64\u689D\u4EF6\u59CB\u7D42\u70BA\u507D\u3002","Ad blocker is detected":"\u5075\u6E2C\u5230\u5EE3\u544A\u5C01\u9396\u7A0B\u5F0F","Display a banner that can be called once per 60 seconds.":"\u986F\u793A\u4E00\u500B\u6A6B\u5E45\uFF0C\u6BCF60\u79D2\u53EF\u8ABF\u7528\u4E00\u6B21\u3002","Display a banner":"\u986F\u793A\u6A6B\u5E45","Display a banner: _PARAM1_ at position _PARAM3_ ; _PARAM4_ with size _PARAM2_":"\u986F\u793A\u6A6B\u5E45\uFF1A_PARAM1_ \u5728\u4F4D\u7F6E_PARAM3_\uFF1B_PARAM4_\uFF0C\u5E36\u6709\u5C3A\u5BF8_PARAM2_","Banner name":"\u6A6B\u5E45\u540D\u7A31","Ad size":"\u5EE3\u544A\u5C3A\u5BF8","Position X":"\u4F4D\u7F6EX","Position Y":"\u4F4D\u7F6EY","Hide a banner.":"\u96B1\u85CF\u6A6B\u5E45\u3002","Hide a banner":"\u96B1\u85CF\u6A6B\u5E45","Hide the banner: _PARAM1_":"\u96B1\u85CF\u6A6B\u5E45\uFF1A_PARAM1_","Hide all banners.":"\u96B1\u85CF\u6240\u6709\u6A6B\u5E45\u3002","Hide all banners":"\u96B1\u85CF\u6240\u6709\u6A6B\u5E45","Hide all the banners":"\u96B1\u85CF\u6240\u6709\u6A6B\u5E45","Hide the invite button.":"\u96B1\u85CF\u9080\u8ACB\u6309\u9215\u3002","Hide invite button":"\u96B1\u85CF\u9080\u8ACB\u6309\u9215","Get the environment.":"\u7372\u53D6\u74B0\u5883\u3002","Get the environment":"\u7372\u53D6\u74B0\u5883","display environment into _PARAM1_":"\u5C07\u74B0\u5883\u986F\u793A\u70BA_PARAM1_","Retrieve user data.":"\u6AA2\u7D22\u7528\u6236\u6578\u64DA\u3002","Retrieve user data":"\u6AA2\u7D22\u7528\u6236\u6578\u64DA","Show CrazyGames login window.":"\u986F\u793ACrazyGames\u767B\u9304\u8996\u7A97\u3002","Show CrazyGames login window":"\u986F\u793ACrazyGames\u767B\u9304\u8996\u7A97","Show account link prompt.":"\u986F\u793A\u5E33\u6236\u93C8\u63A5\u63D0\u793A\u3002","Show account link prompt":"\u986F\u793A\u5E33\u6236\u93C8\u63A5\u63D0\u793A","the username.":"\u7528\u6236\u540D\u3002","Username":"\u7528\u6236\u540D","Username is":"\u7528\u6236\u540D\u70BA","the CrazyGames User ID.":"CrazyGames\u7528\u6236ID\u3002","CrazyGames User ID":"CrazyGames\u7528\u6236ID","CrazyGames user ID is":"CrazyGames\u7528\u6236ID\u70BA","Gets the signed-in user's profile picture URL.":"Gets the signed-in user's profile picture URL.","Gets the signed-in user's profile picture URL":"Gets the signed-in user's profile picture URL","Return true when the user prefers to instantly join a lobby.":"\u7576\u4F7F\u7528\u8005\u504F\u597D\u7ACB\u5373\u52A0\u5165\u5927\u5EF3\u6642\u8FD4\u56DE true\u3002","Is instantly joining a lobby":"\u7ACB\u5373\u52A0\u5165\u5927\u5EF3","Return true if the user prefers the chat disabled.":"\u7576\u4F7F\u7528\u8005\u504F\u597D\u505C\u7528\u804A\u5929\u6642\u8FD4\u56DE true\u3002","Is the user chat disabled":"\u4F7F\u7528\u8005\u5DF2\u505C\u7528\u804A\u5929","Retrieves user system info, browser, version and device.":"\u64F7\u53D6\u4F7F\u7528\u8005\u7CFB\u7D71\u8CC7\u8A0A\u3001\u700F\u89BD\u5668\u3001\u7248\u672C\u548C\u8A2D\u5099\u3002","Retrieves user system info":"\u64F7\u53D6\u4F7F\u7528\u8005\u7CFB\u7D71\u8CC7\u8A0A","Get invite parameters if user is invited to this game.":"\u5982\u679C\u4F7F\u7528\u8005\u88AB\u9080\u8ACB\u53C3\u52A0\u6B64\u904A\u6232\uFF0C\u7372\u53D6\u9080\u8ACB\u53C3\u6578\u3002","Get invite parameters":"\u7372\u53D6\u9080\u8ACB\u53C3\u6578","Param":"\u53C3\u6578","Save the session data.":"\u5132\u5B58\u6703\u8A71\u8CC7\u6599\u3002","Save session data":"\u5132\u5B58\u6703\u8A71\u8CC7\u6599","Save session data, with the id: _PARAM1_ to: _PARAM2_":"\u4F7F\u7528 id: _PARAM1_ \u5132\u5B58\u6703\u8A71\u8CC7\u6599\u5230: _PARAM2_","Id":"Id","Get user session data, if there is no saved data, \"null\" will be returned.":"\u7372\u53D6\u4F7F\u7528\u8005\u6703\u8A71\u8CC7\u6599\uFF0C\u5982\u679C\u6C92\u6709\u5132\u5B58\u7684\u8CC7\u6599\uFF0C\u5C07\u8FD4\u56DE \"null\"\u3002","Get user session data":"\u7372\u53D6\u4F7F\u7528\u8005\u6703\u8A71\u8CC7\u6599","the availability of the user's account.":"\u4F7F\u7528\u8005\u5E33\u6236\u7684\u53EF\u7528\u6027\u3002","Is user account available":"\u4F7F\u7528\u8005\u5E33\u6236\u53EF\u7528","The CrazyGames user account is available":"CrazyGames \u4F7F\u7528\u8005\u5E33\u6236\u53EF\u7528","Retrieve the user's session token for authentication.":"\u6AA2\u7D22\u4F7F\u7528\u8005\u7684\u6703\u8A71\u4EE4\u724C\u4EE5\u9032\u884C\u8EAB\u5206\u9A57\u8B49\u3002","Get User Token":"\u7372\u53D6\u4F7F\u7528\u8005\u4EE4\u724C","Retrieve the authentication token from Xsolla.":"\u5F9E Xsolla \u64F7\u53D6\u9A57\u8B49\u4EE4\u724C\u3002","Get Xsolla Token":"\u7372\u53D6 Xsolla \u4EE4\u724C","Generate Xsolla token.":"\u7522\u751F Xsolla \u4EE4\u724C\u3002","Generate Xsolla token":"\u7522\u751F Xsolla \u4EE4\u724C","Cursor movement conditions":"\u6E38\u6A19\u79FB\u52D5\u689D\u4EF6","Conditions to check the cursor movement (still or moving).":"\u6AA2\u67E5\u6E38\u6A19\u79FB\u52D5\uFF08\u975C\u6B62\u6216\u79FB\u52D5\uFF09\u7684\u689D\u4EF6\u3002","Check if the cursor has stayed still for the specified time on the default layer.":"\u6AA2\u67E5\u9F20\u6A19\u6E38\u6A19\u662F\u5426\u5728\u9810\u8A2D\u5C64\u4E0A\u6307\u5B9A\u7684\u6642\u9593\u5167\u4FDD\u6301\u975C\u6B62\u3002","Cursor stays still":"\u6E38\u6A19\u4FDD\u6301\u975C\u6B62","Cursor has stayed still for _PARAM1_ seconds":"\u9F20\u6A19\u5728\u9810\u8A2D\u5C64\u4E0A\u5DF2\u4FDD\u6301\u975C\u6B62_PARAM1_\u79D2","Check if the cursor is moving on the default layer.":"\u6AA2\u67E5\u9F20\u6A19\u5728\u9810\u8A2D\u5C64\u4E0A\u662F\u5426\u79FB\u52D5\u3002","Cursor is moving":"\u9F20\u6A19\u6B63\u5728\u79FB\u52D5","Cursor type":"\u6E38\u6A19\u985E\u578B","Provides an action to change the type of the cursor, and a behavior to change the cursor when an object is hovered.":"\u63D0\u4F9B\u66F4\u6539\u6E38\u6A19\u985E\u578B\u7684\u64CD\u4F5C\uFF0C\u4EE5\u53CA\u5728\u5C07\u9F20\u6A19\u61F8\u505C\u5728\u5C0D\u8C61\u4E0A\u6642\u66F4\u6539\u9F20\u6A19\u7684\u884C\u70BA\u3002","Change the type of the cursor.":"\u66F4\u6539\u6E38\u6A19\u985E\u578B\u3002","Change the cursor to _PARAM1_":"\u5C07\u6E38\u6A19\u66F4\u6539\u70BA_PARAM1_","The new cursor type":"\u65B0\u6E38\u6A19\u985E\u578B","List of available cursors on https://developer.mozilla.org/en-US/docs/Web/CSS/cursor":"\u5728 https://developer.mozilla.org/en-US/docs/Web/CSS/cursor \u4E0A\u63D0\u4F9B\u7684\u53EF\u7528\u6E38\u6A19\u6E05\u55AE","Do change the type of the cursor.":"\u66F4\u6539\u5149\u6807\u7C7B\u578B\u3002","Do change cursor type":"\u66F4\u6539\u5149\u6807\u7C7B\u578B","Do change the cursor to _PARAM1_":"\u66F4\u6539\u5149\u6807\u70BA_PARAM1_","Change the cursor appearence when the object is hovered (on Windows, macOS or Linux).":"\u7576\u5C0D\u8C61\u61F8\u505C\u6642\u66F4\u6539\u5149\u6A19\u5916\u89C0\uFF08\u5728Windows\u3001macOS\u6216Linux\u4E0A\uFF09\u3002","Custom cursor when hovered":"\u61F8\u505C\u6642\u81EA\u5B9A\u7FA9\u5149\u6A19","The cursor type":"\u5149\u6A19\u985E\u578B","See https://developer.mozilla.org/en-US/docs/Web/CSS/cursor for a list of possible cursors.":"\u53C3\u898Bhttps://developer.mozilla.org/zh-CN/docs/Web/CSS/cursor \uFF0C\u7372\u53D6\u53EF\u80FD\u5149\u6A19\u7684\u5217\u8868\u3002","Curved movement":"\u66F2\u7DDA\u904B\u52D5","Move objects on curved paths.":"\u5728\u66F2\u7DDA\u4E0A\u79FB\u52D5\u7269\u4EF6\u3002","Append a cubic Bezier curve at the end of the path.":"\u5728\u8DEF\u5F91\u672B\u7AEF\u6DFB\u52A0\u4E00\u500B\u7ACB\u65B9Bezier\u66F2\u7DDA\u3002","Append a curve":"\u6DFB\u52A0\u4E00\u500B\u66F2\u7DDA","Append a curve to the path _PARAM1_ relatively to the end: _PARAM8_, first control point: _PARAM2_ ; _PARAM3_, second control point: _PARAM4_ ; _PARAM5_, destination: _PARAM6_ ; _PARAM7_":"\u76F8\u5C0D\u65BC\u8DEF\u5F91_PARAM1_\u672B\u7AEF\u6DFB\u52A0\u4E00\u689D_String_\u66F2\u7DDA\uFF1B\u7B2C\u4E00\u63A7\u5236\u9EDE\uFF1A_PARAM2_;_PARAM3_\uFF0C\u7B2C\u4E8C\u63A7\u5236\u9EDE\uFF1A_PARAM4_;_PARAM5_\u76EE\u7684\u5730:_PARAM6_;_PARAM7_","Path name":"\u8DEF\u5F91\u540D","First control point X":"\u7B2C\u4E00\u63A7\u5236\u9EDEX","First control point Y":"\u7B2C\u4E00\u63A7\u5236\u9EDEY","Second Control point X":"\u7B2C\u4E8C\u63A7\u5236\u9EDEX","Second Control point Y":"\u7B2C\u4E8C\u63A7\u5236\u9EDEY","Destination point X":"\u76EE\u7684\u5730\u9EDEX","Destination point Y":"\u76EE\u7684\u5730\u9EDEY","Relative":"\u76F8\u5C0D","Append a cubic Bezier curve to the end of an object's path. The first control point is symmetrical to the last control point of the path.":"\u5728\u7269\u4EF6\u8DEF\u5F91\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u7ACB\u65B9Bezier\u66F2\u7DDA\u3002\u7B2C\u4E00\u63A7\u5236\u9EDE\u8207\u8DEF\u5F91\u6700\u5F8C\u4E00\u500B\u63A7\u5236\u9EDE\u5C0D\u7A31\u3002","Append a smooth curve":"\u6DFB\u52A0\u4E00\u689D\u5E73\u6ED1\u66F2\u7DDA","Append a smooth curve to the path _PARAM1_ relatively to the end: _PARAM6_, second control point: _PARAM2_ ; _PARAM3_, destination: _PARAM4_ ; _PARAM5_":"\u5C0D\u8DEF\u5F91_PARAM1_\u672B\u7AEF\u6DFB\u52A0\u4E00\u689D\u5E73\u6ED1\u66F2\u7DDA\uFF1B\u7B2C\u4E8C\u63A7\u5236\u9EDE\uFF1A_PARAM2_;_PARAM3_\uFF0C\u76EE\u7684\u5730:_PARAM4_;_PARAM5_","Append a line at the end of the path.":"\u5728\u8DEF\u5F91\u672B\u5C3E\u6DFB\u52A0\u4E00\u689D\u76F4\u7DDA\u3002","Append a line":"\u6DFB\u52A0\u4E00\u689D\u76F4\u7DDA","Append a line to the path _PARAM1_ relatively to the end: _PARAM4_, destination: _PARAM2_ ; _PARAM3_":"\u76F8\u5C0D\u65BC\u8DEF\u5F91_PARAM1_\u589E\u52A0\u4E00\u689D\u7DDA\uFF1A_PARAM4_\uFF0C\u76EE\u6A19:_PARAM2_;_PARAM3_","Append a line to close the path.":"\u6DFB\u52A0\u4E00\u689D\u7DDA\u4EE5\u9589\u5408\u8DEF\u5F91\u3002","Close a path":"\u9589\u5408\u8DEF\u5F91","Close the path _PARAM1_":"\u95DC\u9589\u8DEF\u5F91_PARAM1_","Create a path from SVG commands, for instance \"M 0,0 C 55,0 100,45 100,100\". Commands are: M = Move, C = Curve, S = Smooth, L = Line. Lower case is for relative positions. The preferred way to build the commands is to use an external SVG editor like Inkscape.":"\u4F7F\u7528SVG\u547D\u4EE4\u5275\u5EFA\u4E00\u689D\u8DEF\u5F91\uFF0C\u4F8B\u5982\u201CM 0,0 C 55,0 100,45 100,100\u201D\u3002\u5176\u4E2D\u547D\u4EE4\u6709\uFF1AM = \u79FB\u52D5\uFF0CC = \u66F2\u7DDA\uFF0CS = \u5E73\u6ED1\uFF0CL = \u76F4\u7DDA\u3002\u5C0F\u5BEB\u7528\u65BC\u76F8\u5C0D\u4F4D\u7F6E\u3002\u69CB\u5EFA\u547D\u4EE4\u7684\u9996\u9078\u65B9\u5F0F\u662F\u4F7F\u7528\u5916\u90E8SVG\u7DE8\u8F2F\u5668\uFF0C\u5982Inkscape\u3002","Create a path from SVG":"\u5F9ESVG\u5275\u5EFA\u8DEF\u5F91","Create the path _PARAM1_ from the SVG path commands _PARAM2_":"\u5F9ESVG\u8DEF\u5F91\u6307\u4EE4_PARAM2_\u5275\u5EFA\u8DEF\u5F91_PARAM1_","SVG commands":"SVG\u547D\u4EE4","Return the SVG commands of a path.":"\u8FD4\u56DE\u8DEF\u5F91\u7684SVG\u547D\u4EE4\u3002","SVG path commands":"SVG\u8DEF\u5F91\u547D\u4EE4","Delete a path from the memory.":"\u5F9E\u5167\u5B58\u4E2D\u522A\u9664\u8DEF\u5F91\u3002","Delete a path":"\u522A\u9664\u8DEF\u5F91","Delete the path: _PARAM1_":"\u522A\u9664\u8DEF\u5F91\uFF1A _PARAM1_","Append a path to another path.":"\u5C07\u4E00\u500B\u8DEF\u5F91\u9644\u52A0\u5230\u53E6\u4E00\u500B\u8DEF\u5F91\u3002","Append a path":"\u6DFB\u52A0\u8DEF\u5F91","Append the path _PARAM2_ to the path _PARAM1_":"\u5C07\u8DEF\u5F91_PARAM2_\u9644\u52A0\u5230\u8DEF\u5F91_PARAM1_","Name of the path to modify":"\u8981\u4FEE\u6539\u7684\u8DEF\u5F91\u7684\u540D\u7A31","Name of the path to add to the first one":"\u8981\u6DFB\u52A0\u5230\u7B2C\u4E00\u500B\u7684\u8DEF\u5F91\u7684\u540D\u7A31","Duplicate a path.":"\u5FA9\u5236\u4E00\u500B\u8DEF\u5F91\u3002","Duplicate a path":"\u5FA9\u5236\u4E00\u500B\u8DEF\u5F91","Create path _PARAM1_ as a duplicate of path _PARAM2_":"\u5275\u5EFA\u8DEF\u5F91_PARAM1_\u4F5C\u70BA\u8DEF\u5F91_PARAM2_\u7684\u526F\u672C","Name of the path to create":"\u8981\u5275\u5EFA\u7684\u8DEF\u5F91\u7684\u540D\u7A31","Name of the source path":"\u6E90\u8DEF\u5F91\u7684\u540D\u7A31","Append a path to another path. The appended path is rotated to have a smooth junction.":"\u5C07\u4E00\u500B\u8DEF\u5F91\u9644\u52A0\u5230\u53E6\u4E00\u500B\u8DEF\u5F91\u3002 \u9644\u52A0\u7684\u8DEF\u5F91\u65CB\u8F49\u5F8C\u6703\u5177\u6709\u5E73\u6ED1\u7684\u9023\u63A5\u3002","Append a rotated path":"\u9644\u52A0\u4E00\u500B\u65CB\u8F49\u5F8C\u7684\u8DEF\u5F91","Append the path _PARAM2_ rotated to connect to the path _PARAM1_ flip: _PARAM3_":"\u9644\u52A0\u8DEF\u5F91_PARAM2_\u65CB\u8F49\u4EE5\u9023\u63A5\u5230\u8DEF\u5F91_PARAM1_\u53CD\u8F49\uFF1A_PARAM3_","Flip the appended path":"\u7FFB\u8F49\u9644\u52A0\u8DEF\u5F91","Return the speed scale on Y axis. This is used to change the view point of a path (top-dwon or isometry).":"\u8FD4\u56DEY\u8EF8\u4E0A\u7684\u901F\u5EA6\u6BD4\u4F8B\u3002 \u9019\u7528\u65BC\u66F4\u6539\u8DEF\u5F91\u7684\u8996\u89D2\uFF08\u5F9E\u4E0A\u5230\u4E0B\u6216\u7B49\u89D2\uFF09\u3002","Speed scale Y":"\u901F\u5EA6\u6BD4\u4F8BY","Change the speed scale on Y axis. This allows to change the view point of a path (top-dwon or isometry).":"\u66F4\u6539Y\u8EF8\u4E0A\u7684\u901F\u5EA6\u6BD4\u4F8B\u3002 \u9019\u5141\u8A31\u66F4\u6539\u8DEF\u5F91\u7684\u8996\u89D2\uFF08\u5F9E\u4E0A\u5230\u4E0B\u6216\u7B49\u89D2\uFF09\u3002","Change the speed scale Y of the path _PARAM1_ to _PARAM2_":"\u5C07\u8DEF\u5F91_PARAM1_\u7684Y\u901F\u5EA6\u6BD4\u4F8B\u66F4\u6539\u70BA_PARAM2_","Speed scale on Y axis (0.5 for pixel isometry)":"Y\u8EF8\u4E0A\u7684\u901F\u5EA6\u6BD4\u4F8B\uFF080.5\u4EE3\u8868\u50CF\u7D20\u7B49\u89D2\uFF09","Invert a path, the end becomes the beginning.":"\u7FFB\u8F49\u4E00\u500B\u8DEF\u5F91\uFF0C\u7D50\u5C3E\u8B8A\u6210\u958B\u982D\u3002","Invert a path":"\u7FFB\u8F49\u4E00\u500B\u8DEF\u5F91","Invert the path _PARAM1_":"\u7FFB\u8F49\u8DEF\u5F91_PARAM1_","Flip a path.":"\u7FFB\u8F49\u8DEF\u5F91\u3002","Flip a path":"\u7FFB\u8F49\u4E00\u500B\u8DEF\u5F91","Flip the path _PARAM1_":"\u7FFB\u8F49\u8DEF\u5F91_PARAM1_","Flip a path horizontally.":"\u6C34\u5E73\u7FFB\u8F49\u4E00\u500B\u8DEF\u5F91\u3002","Flip a path horizontally":"\u6C34\u5E73\u7FFB\u8F49\u4E00\u500B\u8DEF\u5F91","Flip the path _PARAM1_ horizontally":"\u6C34\u5E73\u7FFB\u8F49\u8DEF\u5F91_PARAM1_","Flip a path vertically.":"\u5782\u76F4\u7FFB\u8F49\u8DEF\u5F91\u3002","Flip a path vertically":"\u5782\u76F4\u7FFB\u8F49\u8DEF\u5F91","Flip the path _PARAM1_ vertically":"\u5782\u76F4\u7FFB\u8F49\u8DEF\u5F91_PARAM1_","Scale a path.":"\u7E2E\u653E\u8DEF\u5F91\u3002","Scale a path":"\u7E2E\u653E\u8DEF\u5F91","Scale the path _PARAM1_ by _PARAM2_ ; _PARAM3_":"\u6309_PARAM2_ ; _PARAM3_\u7E2E\u653E\u8DEF\u5F91_PARAM1_","Scale on X axis":"X\u8EF8\u4E0A\u7684\u7E2E\u653E","Scale on Y axis":"Y\u8EF8\u4E0A\u7684\u7E2E\u653E","Rotate a path.":"\u65CB\u8F49\u8DEF\u5F91\u3002","Rotate a path":"\u65CB\u8F49\u8DEF\u5F91","Rotate _PARAM2_\xB0 the path _PARAM1_":"\u65CB\u8F49\u8DEF\u5F91_PARAM1__PARAM2_\xB0","Rotation angle":"\u65CB\u8F49\u89D2\u5EA6","Check if a path is closed.":"\u6AA2\u67E5\u8DEF\u5F91\u662F\u5426\u9589\u5408\u3002","Is closed":"\u662F\u5C01\u9589\u7684","The path _PARAM1_ is closed":"\u8DEF\u5F91_PARAM1_\u5C01\u9589","Return the position on X axis of the path for a given length.":"\u8FD4\u56DE\u7D66\u5B9A\u9577\u5EA6\u5C0D\u61C9\u7684\u8DEF\u5F91X\u8EF8\u4E0A\u7684\u4F4D\u7F6E\u3002","Path X":"\u8DEF\u5F91X","Length on the path":"\u8DEF\u5F91\u7684\u9577\u5EA6","Return the position on Y axis of the path for a given length.":"\u8FD4\u56DE\u7D66\u5B9A\u9577\u5EA6\u5C0D\u61C9\u7684\u8DEF\u5F91Y\u8EF8\u4E0A\u7684\u4F4D\u7F6E\u3002","Path Y":"\u8DEF\u5F91Y","Return the direction angle of the path for a given length (in degree).":"\u8FD4\u56DE\u7D66\u5B9A\u9577\u5EA6\u7684\u8DEF\u5F91\u65B9\u5411\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09\u3002","Path angle":"\u8DEF\u5F91\u89D2\u5EA6","Return the length of the path.":"\u8FD4\u56DE\u8DEF\u5F91\u7684\u9577\u5EA6\u3002","Path length":"\u8DEF\u5F91\u7684\u9577\u5EA6","Return the displacement on X axis of the path end.":"\u8FD4\u56DE\u8DEF\u5F91\u7D50\u675FX\u8EF8\u7684\u4F4D\u79FB\u3002","Path end X":"\u8DEF\u5F91\u7D50\u675FX","Return the displacement on Y axis of the path end.":"\u8FD4\u56DE\u8DEF\u5F91\u7D50\u675FY\u8EF8\u7684\u4F4D\u79FB\u3002","Path end Y":"\u8DEF\u5F91\u7D50\u675FY","Return the number of lines or curves that make the path.":"\u8FD4\u56DE\u7D44\u6210\u8DEF\u5F91\u7684\u7DDA\u689D\u6216\u66F2\u7DDA\u6578\u91CF\u3002","Path element count":"\u8DEF\u5F91\u5143\u7D20\u8A08\u6578","Return the origin position on X axis of a curve.":"\u8FD4\u56DE\u66F2\u7DDAX\u8EF8\u4E0A\u7684\u8D77\u59CB\u4F4D\u7F6E\u3002","Origin X":"\u539F\u70B9 X","Curve index":"\u66F2\u7EBF\u7D22\u5F15","Return the origin position on Y axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A Y \u8F74\u7684\u539F\u70B9\u4F4D\u7F6E\u3002","Origin Y":"\u539F\u70B9 Y","Return the first control point position on X axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A X \u8F74\u7684\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9\u4F4D\u7F6E\u3002","First control X":"\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9 X","Return the first control point position on Y axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A Y \u8F74\u7684\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9\u4F4D\u7F6E\u3002","First control Y":"\u7B2C\u4E00\u4E2A\u63A7\u5236\u70B9 Y","Return the second control point position on X axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A X \u8F74\u7684\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9\u4F4D\u7F6E\u3002","Second control X":"\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9 X","Return the second control point position on Y axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A Y \u8F74\u7684\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9\u4F4D\u7F6E\u3002","Second control Y":"\u7B2C\u4E8C\u4E2A\u63A7\u5236\u70B9 Y","Return the target position on X axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A X \u8F74\u7684\u76EE\u6807\u4F4D\u7F6E\u3002","Return the target position on Y axis of a curve.":"\u8FD4\u56DE\u66F2\u7EBF\u4E0A Y \u8F74\u7684\u76EE\u6807\u4F4D\u7F6E\u3002","Path exists.":"\u8DEF\u5F84\u5B58\u5728\u3002","Path exists":"\u8DEF\u5F84\u5B58\u5728","Path _PARAM1_ exists":"\u8DEF\u5F91 _PARAM1_ \u5B58\u5728","Move objects on curved paths in a given duration and tween easing function.":"\u5728\u7ED9\u5B9A\u7684\u6301\u7EED\u65F6\u95F4\u548C\u7F13\u52A8\u7F13\u548C\u529F\u80FD\u4E2D\u5728\u66F2\u7EBF\u8DEF\u5F84\u4E0A\u79FB\u52A8\u5BF9\u8C61\u3002","Movement on a curve (duration-based)":"\u66F2\u7EBF\u4E0A\u7684\u79FB\u52A8\uFF08\u57FA\u4E8E\u6301\u7EED\u65F6\u95F4\uFF09","Rotation offset":"\u65CB\u8F6C\u504F\u79FB","Flip on X to go back":"\u5728 X \u8F74\u4E0A\u7FFB\u8F6C\u4EE5\u8FD4\u56DE","Flip on Y to go back":"\u5728 Y \u8F74\u4E0A\u7FFB\u8F6C\u4EE5\u8FD4\u56DE","Speed scale":"\u901F\u5EA6\u6BD4\u4F8B","Pause duration before going back":"\u8FD4\u56DE\u4E4B\u524D\u8FD4\u56DE\u7684\u6682\u505C\u6301\u7EED\u65F6\u95F4","Viewpoint":"\u89C6\u70B9","Set the the object on the path according to the current length.":"\u6839\u64DA\u7576\u524D\u9577\u5EA6\u8A2D\u7F6E\u8DEF\u5F91\u4E0A\u7684\u7269\u9AD4\u3002","Update position":"\u66F4\u65B0\u4F4D\u7F6E","Update the position of _PARAM0_ on the path":"\u5728\u8DEF\u5F91\u4E0A\u66F4\u65B0_PARAM0_\u7684\u4F4D\u7F6E","Move the object to a position by following a path.":"\u6309\u7167\u8DEF\u5F91\u5C07\u7269\u9AD4\u79FB\u52D5\u5230\u4E00\u500B\u4F4D\u7F6E\u3002","Move on path to a position":"\u5728\u8DEF\u5F91\u4E0A\u79FB\u52D5\u5230\u4E00\u500B\u4F4D\u7F6E","Move _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"\u5C07_PARAM0_\u79FB\u52D5\u5230_PARAM6_\uFF1B_PARAM7_\u5728\u8DEF\u5F91\u4E0A\uFF1A_PARAM2_\u91CD\u8907_PARAM3_\u6B21\u5728_PARAM4_\u79D2\u5167_PARAM5_\u79D2\u9069\u61C9","The path can be define with the \"Append curve\" action.":"\u8DEF\u5F91\u53EF\u4EE5\u7528\u201C\u9644\u52A0\u66F2\u7DDA\u201D\u64CD\u4F5C\u4F86\u5B9A\u7FA9\u3002","Number of repetitions":"\u91CD\u8907\u6B21\u6578","Destination X":"\u76EE\u7684\u5730 X","Destination Y":"\u76EE\u7684\u5730 Y","Move the object to a position by following a path and go back.":"\u6309\u7167\u8DEF\u5F91\u5C07\u7269\u9AD4\u79FB\u52D5\u5230\u4E00\u500B\u4F4D\u7F6E\u7136\u5F8C\u8FD4\u56DE\u3002","Move back and forth to a position":"\u4F86\u56DE\u79FB\u52D5\u5230\u4E00\u500B\u4F4D\u7F6E","Move back and forth _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM8_ seconds before going back and loop: _PARAM9_":"\u4F86\u56DE_PARAM0_\u5230_PARAM6_\uFF1B_PARAM7_\u5728\u8DEF\u5F91\u4E0A\uFF1A_PARAM2_\u91CD\u8907_PARAM3_\u6B21\u5728_PARAM4_\u79D2\u5167_PARAM5_\u79D2\u9069\u61C9\uFF0C\u7B49\u5F85_PARAM8_\u79D2\u518D\u8FD4\u56DE\u548C\u5FAA\u74B0_PARAM9_","Duration to wait before going back":"\u8FD4\u56DE\u4E4B\u524D\u7B49\u5F85\u7684\u6642\u9593","Loop":"\u5FAA\u74B0","Move the object by following a path.":"\u6309\u7167\u8DEF\u5F91\u79FB\u52D5\u7269\u9AD4\u3002","Move on path":"\u6309\u7167\u8DEF\u5F91\u79FB\u52D5","Move _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"\u6309\u7167\u8DEF\u5F91\u5728_PARAM4_\u79D2\u5167_PARAM3_\u6B21\u91CD\u8907_PARAM0_\u79FB\u52D5\uFF0C\u4E26\u5448\u73FE_PARAM5_\u901F\u5EA6\u8B8A\u5316","Move the object by following a path and go back.":"\u6309\u7167\u8DEF\u5F91\u79FB\u52D5\u7269\u9AD4\u7136\u5F8C\u8FD4\u56DE\u3002","Move back and forth":"\u4F86\u56DE\u79FB\u52D5","Move back and forth _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM6_ seconds before going back and loop: _PARAM7_":"\u4F86\u56DE_PARAM6_\u5230_PARAM0_\u5728\u8DEF\u5F91\u4E0A\uFF1A_PARAM2_\u91CD\u8907_PARAM3_\u6B21\u5728_PARAM4_\u79D2\u5167_PARAM5_\u79D2\u9069\u61C9\uFF0C\u7B49\u5F85_PARAM6_\u79D2\u518D\u8FD4\u56DE\u548C\u5FAA\u74B0_PARAM7_","Check if the object has reached one of the 2 ends of the path.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5DF2\u5230\u9054\u8DEF\u5F91\u76842\u7AEF\u4E4B\u4E00\u3002","Reached an end":"\u5DF2\u9054\u7D50\u675F\u9EDE","_PARAM0_ reached an end of the path":"_PARAM0_\u5DF2\u5230\u9054\u8DEF\u5F91\u7D50\u675F\u9EDE","Check if the object has finished to move on the path.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5DF2\u5B8C\u6210\u5728\u8DEF\u5F91\u4E0A\u7684\u79FB\u52D5\u3002","Finished to move":"\u5DF2\u5B8C\u6210\u79FB\u52D5","_PARAM0_ has finished to move":"_PARAM0_\u5DF2\u5B8C\u6210\u79FB\u52D5","Return the angle of movement on its path.":"\u8FD4\u56DE\u5176\u8DEF\u5F91\u4E0A\u7684\u79FB\u52D5\u89D2\u5EA6\u3002","Movement angle":"\u79FB\u52D5\u89D2\u5EA6","Draw the object trajectory.":"\u7E6A\u88FD\u7269\u9AD4\u8ECC\u8DE1\u3002","Draw the trajectory":"\u7E6A\u88FD\u8ECC\u8DE1","Draw trajectory of _PARAM0_ on _PARAM2_":"\u5728 _PARAM2_ \u4E0A\u7E6A\u88FD _PARAM0_ \u7684\u8ECC\u8DE1","Shape painter":"\u5F62\u72C0\u7E6A\u88FD\u5668","Change the transformation to apply to the path.":"\u66F4\u6539\u61C9\u7528\u65BC\u8DEF\u5F91\u7684\u8F49\u63DB\u3002","Path transformation":"\u8DEF\u5F91\u8F49\u63DB","Change the path trasformation of _PARAM0_ to origin _PARAM2_; _PARAM3_ scale by _PARAM4_ and a rotation of _PARAM5_\xB0":"\u5C07 _PARAM0_ \u7684\u8DEF\u5F91\u8B8A\u63DB\u70BA\u539F\u9EDE _PARAM2_\uFF1B _PARAM3_ \u6BD4\u4F8B\u70BA _PARAM4_ \u53CA\u65CB\u8F49 _PARAM5_\xB0","Scale":"\u898F\u6A21","Angle":"\u89D2\u5EA6","Initialize the movement state.":"\u521D\u59CB\u5316\u904B\u52D5\u72C0\u614B\u3002","Initialize the movement":"\u521D\u59CB\u5316\u904B\u52D5","Initialize the movement of _PARAM0_":"\u521D\u59CB\u5316 _PARAM0_ \u7684\u904B\u52D5","Return the number of repetitions between the current position and the origin.":"\u8FD4\u56DE\u7576\u524D\u4F4D\u7F6E\u548C\u539F\u9EDE\u4E4B\u9593\u7684\u91CD\u8907\u6B21\u6578\u3002","Repetition done":"\u91CD\u8907\u5B8C\u6210","Return the position on one repeated path.":"\u8FD4\u56DE\u4E00\u500B\u91CD\u8907\u8DEF\u5F91\u4E0A\u7684\u4F4D\u7F6E\u3002","Path position":"\u8DEF\u5F91\u4F4D\u7F6E","Return the progress on the full path from 0 to 1, where 0 means the origin and 1 the end.":"\u8FD4\u56DE\u5728\u5B8C\u6574\u8DEF\u5F91\u4E0A\u7684\u9032\u5EA6\uFF0C\u5F9E0\u52301\uFF0C\u5176\u4E2D0\u8868\u793A\u539F\u9EDE\uFF0C1\u8868\u793A\u7D50\u675F\u3002","Progress":"\u9032\u5EA6","Return the length of the path (one repetition only).":"\u8FD4\u56DE\u8DEF\u5F91\u7684\u9577\u5EA6\uFF08\u50C5\u9650\u4E00\u500B\u91CD\u8907\uFF09\u3002","Return the speed scale on Y axis of the path.":"\u8FD4\u56DE\u8DEF\u5F91\u4E0AY\u8EF8\u7684\u901F\u5EA6\u7E2E\u653E\u3002","Path speed scale Y":"\u8DEF\u5F91\u901F\u5EA6\u7E2E\u653EY","Return the angle to use when the object is going back or not.":"\u7576\u7269\u9AD4\u56DE\u5230\u539F\u4F4D\u6642\u4F7F\u7528\u7684\u89D2\u5EA6\u3002","Back or forth angle":"\u524D\u9032\u6216\u5F8C\u9000\u89D2\u5EA6","Move objects on curved paths at a given speed.":"\u4EE5\u7ED9\u5B9A\u7684\u901F\u5EA6\u5728\u66F2\u7EBF\u8DEF\u5F84\u4E0A\u79FB\u52A8\u5BF9\u8C61\u3002","Movement on a curve (speed-based)":"\u66F2\u7EBF\u4E0A\u7684\u79FB\u52A8\uFF08\u57FA\u4E8E\u901F\u5EA6\uFF09","Rotation":"\u65CB\u8F6C","Change the path followed by an object.":"\u66F4\u6539\u7269\u4EF6\u9075\u5FAA\u7684\u8DEF\u5F91\u3002","Follow a path":"\u9075\u5FAA\u8DEF\u5F91","_PARAM0_ follow the path: _PARAM2_ repeated _PARAM3_ times and loop: _PARAM4_":"_PARAM0_ \u9075\u5FAA\u8DEF\u5F91\uFF1A_PARAM2_ \u91CD\u8907 _PARAM3_ \u6B21\u4E26\u5FAA\u74B0\uFF1A_PARAM4_","Change the path followed by an object to reach a position.":"\u66F4\u6539\u5C07\u7269\u4EF6\u9075\u5FAA\u7684\u8DEF\u5F91\u4EE5\u5230\u9054\u4F4D\u7F6E\u3002","Follow a path to a position":"\u9075\u5FAA\u8DEF\u5F91\u5230\u4F4D\u7F6E","_PARAM0_ follow the path _PARAM2_ repeated _PARAM3_ times to reach _PARAM5_ ; _PARAM6_ and loop: _PARAM4_":"_PARAM0_ \u9075\u5FAA\u8DEF\u5F91 _PARAM2_ \u91CD\u8907 _PARAM3_ \u6B21\u4EE5\u5230\u9054 _PARAM5_\uFF1B _PARAM6_ \u548C\u5FAA\u74B0\uFF1A_PARAM4_","the length between the trajectory origin and the current position without counting the loops.":"\u5F91\u5411\u539F\u9EDE\u548C\u7576\u524D\u4F4D\u7F6E\u4E4B\u9593\u7684\u957F\u5EA6\u4E0D\u5305\u62EC\u8FF4\u5708\u3002","Position on the loop":"\u8FF4\u5708\u4F4D\u7F6E","the length from the trajectory origin in the current loop":"\u8FF4\u5708\u4E2D\u8DDD\u96E2\u5F91\u5411\u539F\u9EDE\u7684\u9577\u5EA6","the number time the object loop the trajectory.":"\u7269\u4EF6\u8FF4\u5708\u5F91\u8DE1\u7684\u6B21\u6578\u3002","Current loop":"\u7576\u524D\u8FF4\u8DEF","the current loop":"\u7576\u524D\u8FF4\u8DEF","the length between the trajectory origin and the current position counting the loops.":"\u5F9E\u8ECC\u8DE1\u539F\u9EDE\u5230\u7576\u524D\u4F4D\u7F6E\u7684\u9577\u5EA6\uFF0C\u8A08\u7B97\u8FF4\u5708\u6578\u3002","Position on the path":"\u8DEF\u5F91\u4E0A\u7684\u4F4D\u7F6E","the length from the trajectory origin counting the loops":"\u5F9E\u8ECC\u8DE1\u539F\u9EDE\u8A08\u6578\u8FF4\u5708\u7684\u9577\u5EA6","Change the position of the object on the path.":"\u66F4\u6539\u5728\u8DEF\u5F91\u4E0A\u7269\u4EF6\u7684\u4F4D\u7F6E\u3002","Change the position of _PARAM0_ on the path at the length _PARAM2_":"\u5728\u8DEF\u5F91\u4E0A\u5728\u9577\u5EA6\u70BA_PARAM2_ \u6539\u8B8A _PARAM0_ \u7684\u4F4D\u7F6E","Length":"\u9577\u5EA6","Check if the length from the trajectory origin is lesser than a value.":"\u6AA2\u67E5\u662F\u5426\u5F9E\u8ECC\u8DE1\u539F\u9EDE\u7684\u9577\u5EA6\u5C0F\u65BC\u67D0\u500B\u503C\u3002","Current length":"\u7576\u524D\u9577\u5EA6","_PARAM0_ is less than _PARAM2_ pixels away from the trajectory origin":"_PARAM0_ \u96E2\u8ECC\u8DE1\u539F\u9EDE\u7684\u50CF\u7D20\u8DDD\u96E2\u5C0F\u65BC _PARAM2_","Length from the trajectory origin (in pixels)":"\u8DDD\u96E2\u8ECC\u8DE1\u539F\u9EDE\u7684\u8DDD\u96E2\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Check if the object has reached the origin position of the path.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5DF2\u5230\u9054\u8DEF\u5F91\u7684\u539F\u59CB\u4F4D\u7F6E\u3002","Reached path origin":"\u5230\u9054\u8DEF\u5F91\u539F\u9EDE","_PARAM0_ reached the path beginning":"_PARAM0_ \u5230\u9054\u8DEF\u5F91\u8D77\u9EDE","Check if the object has reached the target position of the path.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5DF2\u5230\u9054\u8DEF\u5F91\u7684\u76EE\u6A19\u4F4D\u7F6E\u3002","Reached path target":"\u5230\u9054\u8DEF\u5F91\u76EE\u6A19","_PARAM0_ reached the path target":"_PARAM0_ \u5230\u9054\u8DEF\u5F91\u76EE\u6A19","Reach an end":"\u5230\u9054\u7D42\u9EDE","Check if the object can still move in the current direction.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u4ECD\u7136\u53EF\u4EE5\u6CBF\u8457\u76EE\u524D\u65B9\u5411\u79FB\u52D5\u3002","Can move further":"\u53EF\u4EE5\u9032\u4E00\u6B65\u79FB\u52D5","_PARAM0_ can move further on its path":"_PARAM0_ \u53EF\u4EE5\u5728\u5176\u8DEF\u5F91\u4E0A\u9032\u4E00\u6B65\u79FB\u52D5","the speed of the object.":"\u7269\u4EF6\u7684\u901F\u5EA6\u3002","the speed":"\u901F\u5EA6","Change the current speed of the object.":"\u6539\u8B8A\u7269\u4EF6\u7684\u7576\u524D\u901F\u5EA6\u3002","Change the speed of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u901F\u5EA6\u70BA _PARAM2_","Speed (in pixels per second)":"\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Make an object accelerate until it reaches a given speed.":"\u4F7F\u4E00\u500B\u7269\u4EF6\u52A0\u901F\u76F4\u5230\u9054\u5230\u7D66\u5B9A\u901F\u5EA6\u3002","Accelerate":"\u52A0\u901F","_PARAM0_ accelerate at _PARAM3_ to reach the speed of _PARAM2_":"_PARAM0_ \u5728 _PARAM3_ \u52A0\u901F\u4EE5\u9054\u5230 _PARAM2_ \u7684\u901F\u5EA6","Targeted speed (in pixels per second)":"\u76EE\u6A19\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Acceleration (in pixels per second per second)":"\u52A0\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u5E73\u65B9\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Make an object accelerate to reaches a speed in a given amount of time.":"\u4F7F\u7269\u4EF6\u5728\u4E00\u5B9A\u6642\u9593\u5167\u52A0\u901F\u5230\u9054\u4E00\u5B9A\u901F\u5EA6\u3002","Accelerate during":"\u52A0\u901F\u6642\u9593\u70BA","_PARAM0_ accelerate during _PARAM3_ seconds to reach the speed of _PARAM2_":"_PARAM0_ \u5728 _PARAM3_ \u79D2\u5167\u52A0\u901F\u5230 _PARAM2_ \u7684\u901F\u5EA6","Repeated path position":"\u91CD\u8907\u8DEF\u5F91\u4F4D\u7F6E","Return the length of the complete trajectory (without looping).":"\u8FD4\u56DE\u5B8C\u6574\u8ECC\u8DE1\u7684\u9577\u5EA6\uFF08\u4E0D\u5305\u62EC\u5FAA\u74B0\uFF09\u3002","Total length":"\u7E3D\u9577\u5EA6","Return the path origin on X axis of the object.":"\u8FD4\u56DE\u5C0D\u8C61\u5728X\u8EF8\u4E0A\u7684\u8DEF\u5F91\u8D77\u9EDE\u3002","Path origin X":"\u8DEF\u5F91\u8D77\u9EDEX","the path origin on X axis":"\u5C0D\u8C61\u5728X\u8EF8\u4E0A\u7684\u8DEF\u5F91\u8D77\u9EDE","Return the path origin on Y axis of the object.":"\u8FD4\u56DE\u5C0D\u8C61\u5728Y\u8EF8\u4E0A\u7684\u8DEF\u5F91\u8D77\u9EDE\u3002","Path origin Y":"\u8DEF\u5F91\u8D77\u9EDEY","the path origin on Y axis":"\u5C0D\u8C61\u5728Y\u8EF8\u4E0A\u7684\u8DEF\u5F91\u8D77\u9EDE","Depth effect":"\u6DF1\u5EA6\u6548\u679C","Change scale based on Y position to simulate depth of field.":"\u6839\u64DA Y \u8EF8\u4F4D\u7F6E\u66F4\u6539\u6BD4\u4F8B\u4EE5\u6A21\u64EC\u666F\u6DF1\u3002","The scale of the object decreases the closer it is to the horizon, giving the illusion that the object is travelling away from the viewer.":"\u5F53\u7269\u4F53\u9760\u8FD1\u5730\u5E73\u7EBF\u65F6\uFF0C\u7269\u4F53\u7684\u5C3A\u5BF8\u7F29\u5C0F\uFF0C\u7ED9\u89C2\u770B\u8005\u4E00\u79CD\u7269\u4F53\u8FDC\u79BB\u89C2\u770B\u8005\u7684\u9519\u89C9\u3002","Max scale when the object is at the bottom of the screen (Default: 1)":"\u5F53\u7269\u4F53\u5728\u5C4F\u5E55\u5E95\u90E8\u65F6\u7684\u6700\u5927\u6BD4\u4F8B\uFF08\u9ED8\u8BA4\uFF1A1\uFF09","Y position that represents a horizon where objects appear infinitely small (Default: 0)":"\u4EE3\u8868\u7269\u4F53\u5448\u73B0\u65E0\u9650\u5C0F\u7684\u5730\u5E73\u7EBF\u4F4D\u7F6E\u7684 Y \u5750\u6807\uFF08\u9ED8\u8BA4\uFF1A0\uFF09","Exponential rate of change (Default: 2)":"\u6307\u6570\u53D8\u5316\u901F\u7387\uFF08\u9ED8\u8BA4\uFF1A2\uFF09","Percent away from the horizon":"\u8DDD\u96E2\u5730\u5E73\u7DDA\u7684\u767E\u5206\u6BD4","Percent away from the horizon. This is \"0\" at the horizon, and \"1\" at the bottom of the screen.":"\u8DDD\u96E2\u5730\u5E73\u7DDA\u7684\u767E\u5206\u6BD4\u3002\u9019\u662F\u5730\u5E73\u7DDA\u4E0A\u7684\"0\"\uFF0C\u5C4F\u5E55\u5E95\u90E8\u7684\"1\"\u3002","Percent away from horizon":"\u96E2\u5730\u5E73\u7DDA\u7684\u767E\u5206\u6BD4","Exponential rate of change, based on Y position.":"\u57FA\u65BCY\u8EF8\u4F4D\u7F6E\u7684\u6307\u6578\u8B8A\u5316\u7387\u3002","Exponential rate of change":"\u6307\u6578\u8B8A\u5316\u7387","Max scale when the object is at the bottom of the screen.":"\u7576\u5C0D\u8C61\u4F4D\u65BC\u5C4F\u5E55\u5E95\u90E8\u6642\u7684\u6700\u5927\u6BD4\u4F8B\u3002","Max scale":"\u6700\u5927\u6BD4\u4F8B","Y value of horizon.":"\u5730\u5E73\u7DDA\u7684Y\u503C\u3002","Y value of horizon":"\u5730\u5E73\u7DDA\u7684Y\u503C","Set max scale when the object is at the bottom of the screen (Default: 2).":"\u8A2D\u7F6E\u7576\u5C0D\u8C61\u4F4D\u65BC\u5C4F\u5E55\u5E95\u90E8\u6642\u7684\u6700\u5927\u6BD4\u4F8B\uFF08\u9ED8\u8A8D\uFF1A2\uFF09\u3002","Set max scale":"\u8A2D\u7F6E\u6700\u5927\u6BD4\u4F8B","Set max scale of _PARAM0_ to _PARAM2_":"\u8A2D\u7F6E _PARAM0_ \u7684\u6700\u5927\u6BD4\u4F8B\u70BA _PARAM2_","Y Exponent":"Y\u6307\u6578","Set Y exponential rate of change (Default: 2).":"\u8A2D\u7F6EY\u8EF8\u6307\u6578\u8B8A\u5316\u7387\uFF08\u9ED8\u8A8D\uFF1A2\uFF09\u3002","Set exponential rate of change":"\u8A2D\u7F6E\u6307\u6578\u8B8A\u5316\u7387","Set Y exponential rate of change of _PARAM0_ to _PARAM2_":"\u8A2D\u7F6E _PARAM0_ \u7684Y\u8EF8\u6307\u6578\u8B8A\u5316\u7387\u70BA _PARAM2_","Set Y position of the horizon, where objects are infinitely small (Default: 0).":"\u8A2D\u7F6E\u5730\u5E73\u7DDA\u7684Y\u4F4D\u7F6E\uFF0C\u5176\u4E2D\u5C0D\u8C61\u88AB\u7121\u9650\u5C0F\uFF08\u9ED8\u8A8D\uFF1A0\uFF09\u3002","Set Y position of horizon":"\u8A2D\u7F6E\u5730\u5E73\u7DDA\u7684Y\u4F4D\u7F6E","Set horizon of _PARAM0_ to Y position _PARAM2_":"\u5C07 _PARAM0_ \u7684\u5730\u5E73\u7DDA\u8A2D\u7F6E\u70BAY\u4F4D\u7F6E _PARAM2_","Horizon Y":"\u5730\u5E73\u7DDAY","Discord rich presence (Windows, Mac, Linux)":"Discord \u5177\u8C50\u5BCC\u8868\u73FE\uFF08Windows\u3001Mac\u3001Linux\uFF09","Adds discord rich presence to your games.":"\u70BA\u904A\u6232\u6DFB\u52A0 Discord \u5177\u8C50\u5BCC\u8868\u73FE\u3002","Attempts to connect to discord if it is installed, and initialize rich presence.":"\u5617\u8A66\u9023\u63A5\u5230 Discord\uFF08\u5982\u679C\u5DF2\u5B89\u88DD\uFF09\uFF0C\u4E26\u521D\u59CB\u5316\u8C50\u5BCC\u72C0\u614B\u3002","Initialize rich presence":"\u521D\u59CB\u5316\u8C50\u5BCC\u72C0\u614B","Initialize rich presence with ID _PARAM1_":"\u4F7F\u7528 ID _PARAM1_ \u521D\u59CB\u5316\u8C50\u5BCC\u72C0\u614B","The discord client ID":"Discord \u5BA2\u6236\u7AEF ID","Update the data in the rich presence. See the discord documentation for more info on each field. Each field except state is optional.":"\u66F4\u65B0\u8C50\u5BCC\u72C0\u614B\u4E2D\u7684\u6578\u64DA\u3002\u6709\u95DC\u6BCF\u500B\u5B57\u6BB5\u7684\u66F4\u591A\u4FE1\u606F\uFF0C\u8ACB\u53C3\u95B1 Discord \u6587\u6A94\u3002\u9664\u72C0\u614B\u4E4B\u5916\u7684\u6BCF\u500B\u5B57\u6BB5\u90FD\u662F\u53EF\u9078\u7684\u3002","Update rich presence":"\u66F4\u65B0\u8C50\u5BCC\u72C0\u614B","Update rich presence to state _PARAM1_, details _PARAM2_, begin timestamp _PARAM3_, end timestamp _PARAM4_, large image _PARAM5_ with text _PARAM6_ and small image _PARAM7_ with text _PARAM8_":"\u66F4\u65B0\u8C50\u5BCC\u72C0\u614B\u4EE5\u986F\u793A\u72C0\u614B _PARAM1_\u3001\u8A73\u7D30\u8CC7\u8A0A _PARAM2_\u3001\u958B\u59CB\u6642\u9593\u6233 _PARAM3_\u3001\u7D50\u675F\u6642\u9593\u6233 _PARAM4_\u3001\u5927\u5716\u7247 _PARAM5_\uFF08\u9644\u5E36\u6587\u5B57 _PARAM6_\uFF09\u548C\u5C0F\u5716\u7247 _PARAM7_\uFF08\u9644\u5E36\u6587\u5B57 _PARAM8_\uFF09","The current state":"\u7576\u524D\u72C0\u614B","The details of the current state":"\u7576\u524D\u72C0\u614B\u7684\u8A73\u7D30\u8CC7\u8A0A","The timstamp of the start of the match":"\u6BD4\u8CFD\u958B\u59CB\u7684\u6642\u9593\u6233","If this is filled, discord will show the time elapsed since the start.":"\u5982\u679C\u586B\u5BEB\u6B64\u9805\uFF0CDiscord \u5C07\u986F\u793A\u81EA\u6BD4\u8CFD\u958B\u59CB\u4EE5\u4F86\u7D93\u904E\u7684\u6642\u9593\u3002","The timestamp of the end of the match":"\u6BD4\u8CFD\u7D50\u675F\u7684\u6642\u9593\u6233","If this is filled, discord will display the remaining time.":"\u5982\u679C\u586B\u5BEB\u6B64\u9805\uFF0CDiscord \u5C07\u986F\u793A\u5269\u9918\u6642\u9593\u3002","The name of the big image":"\u5927\u5716\u7247\u7684\u540D\u7A31","The text of the large image":"\u5927\u5716\u7247\u7684\u6587\u5B57","The name of the small image":"\u5C0F\u5716\u7247\u7684\u540D\u7A31","The text of the small image":"\u5C0F\u5716\u7247\u7684\u6587\u5B57","Double-click and tap":"\u96D9\u64CA\u548C\u8F15\u89F8","Check for a double-click or a tap.":"\u6AA2\u67E5\u662F\u5426\u96D9\u64CA\u6216\u8F15\u89F8\u3002","Check if the specified mouse button is clicked twice in a short amount of time.":"\u6AA2\u67E5\u6307\u5B9A\u7684\u6ED1\u9F20\u6309\u9215\u5728\u77ED\u6642\u9593\u5167\u662F\u5426\u88AB\u9EDE\u64CA\u4E86\u5169\u6B21\u3002","Double-clicked (or double-tapped)":"\u96D9\u64CA\uFF08\u6216\u5169\u6B21\u9EDE\u64CA\uFF09","_PARAM1_ mouse button is double-clicked":"_PARAM1_ \u6ED1\u9F20\u6309\u9215\u88AB\u96D9\u64CA","Mouse button to track":"\u8981\u76E3\u8996\u7684\u6ED1\u9F20\u6309\u9215","As touch devices do not have middle/right tap equivalents, you will need to account for this within your events if you're not using the left mouse button and building for touch devices.":"\u7531\u65BC\u89F8\u6478\u8A2D\u5099\u6C92\u6709\u4E2D\u9593/\u53F3\u908A\u7684\u7B49\u6548\u6309\u58D3\uFF0C\u5982\u679C\u4F60\u4E0D\u4F7F\u7528\u5DE6\u6ED1\u9F20\u6309\u9215\u4E26\u4E14\u9762\u5411\u89F8\u6478\u8A2D\u5099\u5275\u5EFA\uFF0C\u4F60\u5C07\u9700\u8981\u5728\u4E8B\u4EF6\u4E2D\u8003\u616E\u9019\u4E00\u9EDE\u3002","Check if the specified mouse button is clicked.":"\u6AA2\u67E5\u6307\u5B9A\u7684\u6ED1\u9F20\u6309\u9215\u662F\u5426\u88AB\u9EDE\u64CA\u3002","Clicked (or tapped)":"\u9EDE\u64CA\uFF08\u6216\u8F15\u89F8\uFF09","_PARAM1_ mouse button is clicked":"_PARAM1_\u6309\u4E0B\u6ED1\u9F20\u6309\u9215","_PARAM1_ mouse button is clicked _PARAM2_ times":"_PARAM1_\u6309\u4E0B\u6ED1\u9F20\u6309\u9215_PARAM2_\u6B21","Click count":"\u9EDE\u64CA\u6B21\u6578","Drag camera with the mouse (or touchscreen)":"\u7528\u6ED1\u9F20\uFF08\u6216\u89F8\u6478\u5C4F\uFF09\u62D6\u52D5\u76F8\u6A5F","Move a camera by dragging the mouse (or touchscreen).":"\u901A\u904E\u62D6\u52D5\u6ED1\u9F20\uFF08\u6216\u89F8\u6478\u5C4F\uFF09\u4F86\u79FB\u52D5\u76F8\u6A5F\u3002","Drag camera with the mouse":"\u4F7F\u7528\u6ED1\u9F20\u62D6\u52D5\u76F8\u6A5F","Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button":"\u4F7F\u7528 _PARAM4_ \u6ED1\u9F20\u6309\u9215\u5728 _PARAM3_ \u65B9\u5411\u4E0A\u5728 _PARAM2_ \u5716\u5C64\u4E0A\u62D6\u52D5\u76F8\u6A5F","Camera layer (default: \"\")":"\u76F8\u6A5F\u5716\u5C64\uFF08\u9ED8\u8A8D\u70BA \"\"\uFF09","Directions that the camera can move (horizontal, vertical, both)":"\u76F8\u6A5F\u53EF\u4EE5\u79FB\u52D5\u7684\u65B9\u5411\uFF08\u6C34\u5E73\uFF0C\u5782\u76F4\uFF0C\u5169\u8005\uFF09","Mouse button (use \"Left\" for touchscreen)":"\u6ED1\u9F20\u6309\u9215\uFF08\u5728\u89F8\u63A7\u87A2\u5E55\u4E0A\u4F7F\u7528\u201C\u5DE6\u201D\uFF09","Draggable (for physics objects)":"\u53EF\u62D6\u52D5\uFF08\u9069\u7528\u65BC\u7269\u7406\u5C0D\u8C61\uFF09","Drag a physics object with the mouse (or touch).":"\u7528\u6ED1\u9F20\uFF08\u6216\u89F8\u6478\uFF09\u62D6\u52D5\u7269\u7406\u7269\u9AD4\u3002","Physics behavior":"\u7269\u7406\u884C\u70BA","Mouse button":"\u6ED1\u9F20\u6309\u9215","Maximum force":"\u6700\u5927\u529B","Frequency (Hz)":"\u983B\u7387\uFF08Hz\uFF09","Damping ratio (Range: 0 to 1)":"\u963B\u5C3C\u6BD4\uFF08\u7BC4\u570D\uFF1A0 \u5230 1\uFF09","Enable automatic dragging":"\u555F\u7528\u81EA\u52D5\u62D6\u66F3","If automatic dragging is disabled, use the \"Start drag\" and \"Release drag\" actions.":"\u5982\u679C\u7981\u7528\u81EA\u52D5\u62D6\u66F3\uFF0C\u8ACB\u4F7F\u7528\u201C\u555F\u52D5\u62D6\u66F3\u201D\u548C\u201C\u91CB\u653E\u62D6\u66F3\u201D\u64CD\u4F5C\u3002","Start dragging object.":"\u958B\u59CB\u62D6\u52D5\u5C0D\u8C61\u3002","Start dragging object":"\u958B\u59CB\u62D6\u52D5\u5C0D\u8C61","Start dragging (physics) _PARAM0_":"\u958B\u59CB\u62D6\u52D5\uFF08\u7269\u7406\uFF09_PARAM0_","Release dragged object.":"\u91CB\u653E\u62D6\u52D5\u7684\u5C0D\u8C61\u3002","Release dragged object":"\u91CB\u653E\u62D6\u52D5\u7684\u5C0D\u8C61","Release _PARAM0_ from being dragged (physics)":"\u5F9E\u88AB\u62D6\u52D5\uFF08\u7269\u7406\uFF09\u91CB\u653E _PARAM0_","Check if object is being dragged.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u6B63\u5728\u88AB\u62D6\u52D5\u3002","Is being dragged":"\u6B63\u5728\u88AB\u62D6\u52D5","_PARAM0_ is being dragged (physics)":"_PARAM0_\u6B63\u5728\u88AB\u62D6\u52D5\uFF08\u7269\u7406\uFF09","the mouse button used to move the object.":"\u7528\u65BC\u79FB\u52D5\u5C0D\u8C61\u7684\u6ED1\u9F20\u6309\u9215\u3002","the dragging mouse button":"\u62D6\u62FD\u6ED1\u9F20\u6309\u9215","the maximum joint force (in Newtons) of the object.":"\u5C0D\u8C61\u7684\u6700\u5927\u95DC\u7BC0\u529B\uFF08\u725B\u9813\uFF09\u3002","the maximum force":"\u6700\u5927\u529B","the joint frequency (per second) of the object.":"\u5C0D\u8C61\u7684\u95DC\u7BC0\u983B\u7387\uFF08\u6BCF\u79D2\uFF09\u3002","the frequency":"\u983B\u7387","the joint damping ratio (range: 0 to 1) of the object.":"\u5C0D\u8C61\u7684\u95DC\u7BC0\u963B\u5C3C\u6BD4\uFF08\u7BC4\u570D\uFF1A0\u81F31\uFF09\u3002","Damping ratio":"\u963B\u5C3C\u6BD4","the damping ratio (range: 0 to 1)":"\u963B\u5C3C\u6BD4\uFF08\u7BC4\u570D\uFF1A0\u81F31\uFF09","Check if automatic dragging is enabled.":"\u6AA2\u67E5\u81EA\u52D5\u62D6\u66F3\u662F\u5426\u5DF2\u555F\u7528\u3002","Automatic dragging":"\u81EA\u52D5\u62D6\u66F3","Automatic dragging is enabled on _PARAM0_":"\u5DF2\u5728_PARAM0_\u555F\u7528\u81EA\u52D5\u62D6\u66F3","Enable (or disable) automatic dragging with the mouse or touch.":"\u4F7F\u7528\u6ED1\u9F20\u6216\u89F8\u78B0\u555F\u7528\uFF08\u6216\u505C\u7528\uFF09\u81EA\u52D5\u62D6\u66F3\u3002","Enable (or disable) automatic dragging":"\u4F7F\u7528\u6ED1\u9F20\u6216\u89F8\u78B0\u555F\u7528\uFF08\u6216\u505C\u7528\uFF09\u81EA\u52D5\u62D6\u66F3","Enable automatic dragging on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u555F\u7528\u81EA\u52D5\u62D6\u66F3\uFF1A_PARAM2_","EnableAutomaticDragging":"EnableAutomaticDragging","Draggable slider (for Shape Painter)":"\u53EF\u62D6\u52D5\u6ED1\u584A\uFF08\u9069\u7528\u65BC\u5F62\u72C0\u7E6A\u88FD\u5668\uFF09","A draggable slider that users can move to select a numerical value.":"\u7528\u6236\u53EF\u4EE5\u79FB\u52D5\u7684\u53EF\u62D6\u52D5\u6ED1\u584A\u4EE5\u9078\u64C7\u6578\u503C\u3002","Let users select a numerical value by dragging a slider.":"\u8B93\u7528\u6236\u901A\u904E\u62D6\u52D5\u6ED1\u584A\u9078\u64C7\u6578\u503C\u3002","Draggable slider":"\u53EF\u62D6\u66F3\u6ED1\u584A","Minimum value":"\u6700\u5C0F\u503C","Maximum value":"\u6700\u5927\u503C","Tick spacing":"\u6A19\u8A3B\u9593\u8DDD","Thumb shape":"\u6ED1\u584A\u5F62\u72C0","Thumb":"\u6ED1\u584A","Thumb width":"\u6ED1\u584A\u5BEC\u5EA6","Thumb height":"\u6ED1\u584A\u9AD8\u5EA6","Thumb Color":"\u6ED1\u584A\u984F\u8272","Thumb opacity":"\u6ED1\u584A\u4E0D\u900F\u660E\u5EA6","Track length":"\u8ECC\u9053\u9577\u5EA6","Track":"\u8ECC\u9053","Inactive track color (thumb color by default)":"\u975E\u555F\u52D5\u8ECC\u9053\u984F\u8272\uFF08\u9ED8\u8A8D\u70BA\u6ED1\u584A\u984F\u8272\uFF09","Inactive track opacity":"\u975E\u555F\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6","Active track color (thumb color by default)":"\u555F\u52D5\u8ECC\u9053\u984F\u8272\uFF08\u9ED8\u8A8D\u70BA\u6ED1\u584A\u984F\u8272\uFF09","Active track opacity":"\u555F\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6","Halo size (hover)":"\u5E87\u8B77\u5927\u5C0F\uFF08\u61F8\u505C\uFF09","Rounded track ends":"\u5713\u6F64\u8ECC\u9053\u672B\u7AEF","Check if the slider is being dragged.":"\u6AA2\u67E5\u6ED1\u584A\u662F\u5426\u6B63\u5728\u88AB\u62D6\u66F3\u3002","Being dragged":"\u6B63\u5728\u88AB\u62D6\u66F3","_PARAM0_ is being dragged":"_PARAM0_\u6B63\u5728\u88AB\u62D6\u66F3","Check if the slider interations are enabled.":"\u6AA2\u67E5\u6ED1\u584A\u4E92\u52D5\u662F\u5426\u5DF2\u555F\u7528\u3002","Enable or disable the slider. Users cannot interact while it is disabled.":"\u555F\u7528\u6216\u505C\u7528\u6ED1\u584A\u3002\u7528\u6236\u5728\u7981\u7528\u6642\u7121\u6CD5\u4E92\u52D5\u3002","The value of the slider (based on position of the thumb).":"\u6ED1\u584A\u7684\u503C\uFF08\u57FA\u65BC\u62C7\u6307\u4F4D\u7F6E\uFF09\u3002","Slider value":"\u6ED1\u584A\u503C","Change the value of a slider (this will move the thumb to the correct position).":"\u66F4\u6539\u6ED1\u584A\u7684\u503C\uFF08\u9019\u5C07\u79FB\u52D5\u62C7\u6307\u5230\u6B63\u78BA\u4F4D\u7F6E\uFF09\u3002","Change the value of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u503C\uFF1A_PARAM2_","The minimum value of a slider.":"\u6ED1\u584A\u7684\u6700\u5C0F\u503C\u3002","Slider minimum value":"\u6ED1\u584A\u6700\u5C0F\u503C","Change the minimum value of a slider.":"\u66F4\u6539\u6ED1\u584A\u7684\u6700\u5C0F\u503C\u3002","Change the minimum value of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u6700\u5C0F\u503C\uFF1A_PARAM2_","The maximum value of a slider.":"\u6ED1\u584A\u7684\u6700\u5927\u503C\u3002","Slider maximum value":"\u6ED1\u584A\u6700\u5927\u503C","Thickness of track.":"\u8ECC\u9053\u7684\u539A\u5EA6\u3002","Slider track thickness":"\u6ED1\u584A\u8ECC\u9053\u539A\u5EA6","Length of track.":"\u8ECC\u9053\u7684\u9577\u5EA6\u3002","Slider track length":"\u6ED1\u584A\u8ECC\u9053\u9577\u5EA6","Height of thumb.":"\u6ED1\u584A\u7684\u9AD8\u5EA6\u3002","Slider thumb height":"\u6ED1\u584A\u62C7\u6307\u9AD8\u5EA6","Change the maximum value of a slider.":"\u66F4\u6539\u6ED1\u584A\u7684\u6700\u5927\u503C\u3002","The tick spacing of a slider.":"\u6ED1\u584A\u7684\u523B\u5EA6\u9593\u8DDD\u3002","Change the tick spacing of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u523B\u5EA6\u9593\u8DDD\uFF1A_PARAM2_","Change the tick spacing of a slider.":"\u66F4\u6539\u6ED1\u584A\u7684\u523B\u5EA6\u9593\u8DDD\u3002","Change length of track.":"\u66F4\u6539\u8ECC\u9053\u9577\u5EA6\u3002","Change track length of _PARAM0_ to _PARAM2_ px":"\u5C07_PARAM0_\u7684\u8ECC\u9053\u9577\u5EA6\u66F4\u6539\u70BA_PARAM2_\u50CF\u7D20","Track width":"\u8ECC\u9053\u5BEC\u5EA6","Change thickness of track.":"\u66F4\u6539\u8ECC\u9053\u539A\u5EA6\u3002","Change track thickness of _PARAM0_ to _PARAM2_ px":"\u5C07\u8ECC\u9053\u7684_PARAM0_\u8B8A\u66F4\u70BA_PARAM2_\u50CF\u7D20\u7684\u539A\u5EA6","Change width of thumb.":"\u66F4\u6539\u62C7\u6307\u5BEC\u5EA6\u3002","Change thumb width of _PARAM0_ to _PARAM2_ px":"\u5C07\u62C7\u6307\u5BEC\u5EA6\u7684_PARAM0_\u8B8A\u66F4\u70BA_PARAM2_\u50CF\u7D20","Change height of thumb.":"\u66F4\u6539\u62C7\u6307\u9AD8\u5EA6\u3002","Change thumb height of _PARAM0_ to _PARAM2_ px":"\u5C07\u62C7\u6307\u9AD8\u5EA6\u7684_PARAM0_\u8B8A\u66F4\u70BA_PARAM2_\u50CF\u7D20","Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.":"\u66F4\u6539\u62C7\u6307\u5468\u570D\u5149\u6688\u7684\u534A\u5F91\u3002\u6B64\u5C3A\u5BF8\u4E5F\u7528\u65BC\u6AA2\u6E2C\u8207\u6ED1\u584A\u7684\u4EA4\u4E92\u3002","Change halo radius of _PARAM0_ to _PARAM2_ px":"\u5C07\u5149\u6688\u534A\u5F91\u7684_PARAM0_\u8B8A\u66F4\u70BA_PARAM2_\u50CF\u7D20","Change the halo opacity when the thumb is hovered.":"\u7576\u61F8\u505C\u5728\u62C7\u6307\u4E0A\u6642\u66F4\u6539\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u3002","Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px":"\u7576\u61F8\u505C\u6642\uFF0C\u5C07_PARAM0_\u7684\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u8B8A\u66F4\u70BA_PARAM2_\u50CF\u7D20","Change opacity of halo when pressed.":"\u7576\u6309\u58D3\u6642\u66F4\u6539\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u3002","Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px":"\u7576\u6309\u4E0B\u6642\uFF0C\u5C07_PARAM0_\u7684\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u8B8A\u66F4\u70BA_PARAM2_\u50CF\u7D20","Change shape of thumb (circle or rectangle).":"\u66F4\u6539\u62C7\u6307\u5F62\u72C0\uFF08\u5713\u5F62\u6216\u77E9\u5F62\uFF09\u3002","Change shape of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u5F62\u72C0\u8B8A\u66F4\u70BA_PARAM2_","New thumb shape":"\u65B0\u62C7\u6307\u5F62\u72C0","Make track use rounded ends.":"\u4F7F\u8ECC\u9053\u4F7F\u7528\u5713\u89D2\u7AEF\u3002","Draw _PARAM0_ with a rounded track: _PARAM2_":"\u4F7F\u7528\u5713\u89D2\u8ECC\u9053\u7E6A\u88FD_PARAM0_\uFF1A_PARAM2_","Rounded track":"\u5713\u89D2\u8ECC\u9053","Change opacity of thumb.":"\u66F4\u6539\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u3002","Change thumb opacity of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u8B8A\u66F4\u70BA_PARAM2_","Change opacity of inactive track.":"\u66F4\u6539\u975E\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u3002","Change inactive track opacity of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u975E\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u8B8A\u66F4\u70BA_PARAM2_","Change opacity of active track.":"\u66F4\u6539\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u3002","Change active track opacity of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u8B8A\u66F4\u70BA_PARAM2_","Change the color of the track that is LEFT of the thumb.":"\u66F4\u6539\u62C7\u6307\u5DE6\u5074\u7684\u8ECC\u9053\u984F\u8272\u3002","Active track color":"\u6D3B\u52D5\u8ECC\u9053\u984F\u8272","Change active track color of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u6D3B\u52D5\u8ECC\u9053\u984F\u8272\u8B8A\u66F4\u70BA_PARAM2_","Change the color of the track that is RIGHT of the thumb.":"\u66F4\u6539\u62C7\u6307\u53F3\u5074\u7684\u8ECC\u9053\u984F\u8272\u3002","Inactive track color":"\u975E\u6D3B\u52D5\u8ECC\u9053\u984F\u8272","Change inactive track color of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u975E\u6D3B\u52D5\u8ECC\u9053\u984F\u8272\u8B8A\u66F4\u70BA_PARAM2_","Change the thumb color to a specific value.":"\u5C07\u62C7\u6307\u984F\u8272\u66F4\u6539\u70BA\u7279\u5B9A\u503C\u3002","Thumb color":"\u62C7\u6307\u984F\u8272","Change thumb color of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u62C7\u6307\u984F\u8272\u66F4\u6539\u70BA_PARAM2_","Pathfinding painter":"\u5C0B\u8DEF\u7E6A\u88FD\u5668","Draw the pathfinding of an object using a shape painter.":"\u4F7F\u7528\u5F62\u72C0\u7E6A\u88FD\u5668\u7E6A\u88FD\u5C0D\u8C61\u7684\u5C0B\u8DEF\u3002","Draw the path followed by the object using a shape painter.":"\u4F7F\u7528\u5F62\u72C0\u7E6A\u88FD\u5668\u7E6A\u88FD\u5C0D\u8C61\u6240\u8DDF\u96A8\u7684\u8DEF\u5F91\u3002","LoopIndex":"\u904D\u6B77\u7D22\u5F15","Draw the path followed by the object using a shape painter. It automatically creates an instance of the shape painter object if there is none.":"\u4F7F\u7528\u5F62\u72C0\u7E6A\u88FD\u5668\u7E6A\u88FD\u5C0D\u8C61\u6240\u8DDF\u96A8\u7684\u8DEF\u5F91\u3002 \u5982\u679C\u6C92\u6709\uFF0C\u5B83\u5C07\u81EA\u52D5\u5275\u5EFA\u5F62\u72C0\u7E6A\u88FD\u5668\u5C0D\u8C61\u7684\u5BE6\u4F8B\u3002","Draw pathfinding":"\u7E6A\u88FD\u5C0B\u8DEF","Draw the path followed by _PARAM0_ using _PARAM3_":"\u4F7F\u7528_PARAM3_\u7E6A\u88FD_PARAM0_\u7684\u8DEF\u5F91","Pathfinding behavior":"\u5C0B\u8DEF\u884C\u70BA","Shape painter used to draw the path":"\u7528\u65BC\u7E6A\u88FD\u8DEF\u5F91\u7684\u5F62\u72C0\u7E6A\u88FD\u5668","Edge scroll camera":"\u908A\u7DE3\u6EFE\u52D5\u651D\u50CF\u6A5F","Scroll camera when cursor is near edge of screen.":"\u7576\u5149\u6A19\u9760\u8FD1\u5C4F\u5E55\u908A\u7DE3\u6642\u6EFE\u52D5\u651D\u50CF\u6A5F\u3002","Enable (or disable) camera edge scrolling . Use \"Configure camera edge scrolling\" to adjust settings.":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u76F8\u6A5F\u908A\u7DE3\u6EFE\u52D5\u3002 \u4F7F\u7528\u201C\u914D\u7F6E\u76F8\u6A5F\u908A\u7DE3\u6EFE\u52D5\u201D\u4F86\u8ABF\u6574\u8A2D\u7F6E\u3002","Enable (or disable) camera edge scrolling":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u76F8\u6A5F\u908A\u7DE3\u6EFE\u52D5","Enable camera edge scrolling: _PARAM1_":"\u555F\u7528\u76F8\u6A5F\u908A\u7DE3\u6EFE\u52D5\uFF1A _PARAM1_","Enable camera edge scrolling":"\u555F\u7528\u76F8\u6A5F\u908A\u7DE3\u6EFE\u52D5","Configure camera edge scrolling that moves when mouse is near an edge of the screen.":"\u914D\u7F6E\u7576\u6ED1\u9F20\u9760\u8FD1\u5C4F\u5E55\u908A\u7DE3\u6642\u79FB\u52D5\u7684\u76F8\u6A5F\u908A\u7DE3\u6EFE\u52D5\u3002","Configure camera edge scrolling":"\u914D\u7F6E\u76F8\u6A5F\u908A\u7DE3\u6EFE\u52D5","Configure camera edge scrolling (layer: _PARAM3_, screen margin: _PARAM1_, scroll speed: _PARAM2_, style: _PARAM5_)":"\u914D\u7F6E\u76F8\u6A5F\u908A\u7DE3\u6EFE\u52D5\uFF08\u5C64\uFF1A_PARAM3_\uFF0C\u5C4F\u5E55\u908A\u8DDD\uFF1A_PARAM1_\uFF0C\u6EFE\u52D5\u901F\u5EA6\uFF1A_PARAM2_\uFF0C\u6A23\u5F0F\uFF1A_PARAM5_\uFF09","Screen margin (pixels)":"\u5C4F\u5E55\u908A\u8DDD\uFF08\u50CF\u7D20\uFF09","Scroll speed (in pixels per second)":"\u6EFE\u52D5\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20\u6BCF\u79D2\u70BA\u55AE\u4F4D\uFF09","Scroll style":"\u6EFE\u52D5\u6A23\u5F0F","Check if the camera is scrolling.":"\u6AA2\u67E5\u76F8\u6A5F\u662F\u5426\u6EFE\u52D5\u3002","Camera is scrolling":"\u76F8\u6A5F\u6B63\u5728\u6EFE\u52D5","Check if the camera is scrolling up.":"\u6AA2\u67E5\u76F8\u6A5F\u662F\u5426\u5411\u4E0A\u6EFE\u52D5\u3002","Camera is scrolling up":"\u76F8\u6A5F\u6B63\u5728\u5411\u4E0A\u6EFE\u52D5","Check if the camera is scrolling down.":"\u6AA2\u67E5\u76F8\u6A5F\u662F\u5426\u5411\u4E0B\u6EFE\u52D5\u3002","Camera is scrolling down":"\u76F8\u6A5F\u6B63\u5728\u5411\u4E0B\u6EFE\u52D5","Check if the camera is scrolling left.":"\u6AA2\u67E5\u76F8\u6A5F\u662F\u5426\u5411\u5DE6\u6EFE\u52D5\u3002","Camera is scrolling left":"\u76F8\u6A5F\u6B63\u5728\u5411\u5DE6\u6EFE\u52D5","Check if the camera is scrolling right.":"\u6AA2\u67E5\u76F8\u6A5F\u662F\u5426\u5411\u53F3\u6EFE\u52D5\u3002","Camera is scrolling right":"\u76F8\u6A5F\u6B63\u5728\u5411\u53F3\u6EFE\u52D5","Draw a rectangle that shows where edge scrolling will be triggered.":"\u7E6A\u88FD\u4E00\u500B\u77E9\u5F62\u4EE5\u986F\u793A\u89F8\u767C\u908A\u7DE3\u6EFE\u52D5\u7684\u4F4D\u7F6E\u3002","Draw edge scrolling screen margin":"\u7E6A\u88FD\u908A\u7DE3\u6EFE\u52D5\u5C4F\u5E55\u908A\u8DDD","Draw edge scrolling screen margin with _PARAM1_":"\u4F7F\u7528_PARAM1_\u7E6A\u88FD\u908A\u7DE3\u6EFE\u52D5\u5C4F\u5E55\u908A\u8DDD","Return the speed the camera is currently scrolling in horizontal direction (in pixels per second).":"\u8FD4\u56DE\u76F8\u6A5F\u7576\u524D\u6C34\u5E73\u65B9\u5411\u6EFE\u52D5\u7684\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09\u3002","Horizontal edge scroll speed":"\u6C34\u5E73\u908A\u6EFE\u52D5\u901F\u5EA6","Return the speed the camera is currently scrolling in vertical direction (in pixels per second).":"\u8FD4\u56DE\u76F8\u6A5F\u7576\u524D\u5782\u76F4\u65B9\u5411\u6EFE\u52D5\u7684\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09\u3002","Vertical edge scroll speed":"\u5782\u76F4\u908A\u6EFE\u52D5\u901F\u5EA6","Return the absolute scroll speed according to the mouse distance from the border.":"\u6839\u64DA\u6ED1\u9F20\u8DDD\u96E2\u908A\u7DE3\u7684\u8DDD\u96E2\u8FD4\u56DE\u7D55\u5C0D\u6EFE\u52D5\u901F\u5EA6\u3002","Absolute scroll speed":"\u7D55\u5C0D\u6EFE\u52D5\u901F\u5EA6","Border distance":"\u908A\u754C\u8DDD\u96E2","Ellipse movement":"\u6A62\u5713\u904B\u52D5","Move objects on ellipses or smoothly back and forth in one direction.":"\u5728\u6A62\u5713\u4E0A\u79FB\u52D5\u7269\u9AD4\uFF0C\u6216\u6CBF\u4E00\u500B\u65B9\u5411\u5E73\u7A69\u4F86\u56DE\u79FB\u52D5\u3002","Radius of the movement on X axis":"X\u8EF8\u79FB\u52D5\u7684\u534A\u5F91","Ellipse":"\u6A62\u5713","Radius of the movement on Y axis":"Y\u8EF8\u79FB\u52D5\u7684\u534A\u5F91","Loop duration":"\u5FAA\u74B0\u6301\u7E8C\u6642\u9593","Turn left":"\u5411\u5DE6\u8F49","Initial direction":"\u521D\u59CB\u65B9\u5411","Rotate":"\u65CB\u8F49","Change the turning direction (left or right).":"\u66F4\u6539\u8F49\u5F4E\u65B9\u5411\uFF08\u5DE6\u9084\u662F\u53F3\uFF09\u3002","Turn the other way":"\u63DB\u5F4E\u53E6\u4E00\u908A","_PARAM0_ turn the other way":"_PARAM0_\u63DB\u5F4E\u53E6\u4E00\u908A","Change the in which side the object is turning (left or right).":"\u66F4\u6539\u5728\u7269\u9AD4\u8F49\u5F4E\u7684\u54EA\u4E00\u5074\uFF08\u5DE6\u9084\u662F\u53F3\uFF09\u3002","Turn left or right":"\u5DE6\u6216\u53F3\u8F49\u5F4E","_PARAM0_ turn left: _PARAM2_":"_PARAM0_\u5DE6\u8F49\uFF1A_PARAM2_","Check if the object is turning left.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5411\u5DE6\u8F49\u5F4E\u3002","Is turning left":"\u662F\u5426\u5411\u5DE6\u8F49\u5F4E","_PARAM0_ is turning left":"_PARAM0_\u662F\u5426\u6B63\u5728\u5411\u5DE6\u8F49\u5F4E","Return the movement angle of the object.":"\u8FD4\u56DE\u7269\u9AD4\u7684\u904B\u52D5\u89D2\u5EA6\u3002","Set initial Y of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u521D\u59CBY\u8A2D\u5B9A\u70BA_PARAM2_","Return the loop duration (in seconds).":"\u8FD4\u56DE\u8FF4\u5708\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Return the ellipse radius on X axis.":"\u8FD4\u56DEX\u8EF8\u4E0A\u7684\u6A62\u5713\u534A\u5F91\u3002","Radius X":"\u534A\u5F91X","Radius Y":"\u534A\u5F91Y","Return the movement center position on X axis.":"\u8FD4\u56DEX\u8EF8\u4E0A\u7684\u904B\u52D5\u4E2D\u5FC3\u4F4D\u7F6E\u3002","Movement center X":"\u904B\u52D5\u4E2D\u5FC3X","Return the movement center position on Y axis.":"\u8FD4\u56DEY\u8EF8\u4E0A\u7684\u904B\u52D5\u4E2D\u5FC3\u4F4D\u7F6E\u3002","Movement center Y":"\u904B\u52D5\u4E2D\u5FC3Y","Change the radius on X axis of the movement.":"\u66F4\u6539\u904B\u52D5\u7684X\u8EF8\u534A\u5F91\u3002","Change the radius on X axis of the movement of _PARAM0_ to _PARAM2_":"\u66F4\u6539\u79FB\u52D5\u7684 X \u8EF8\u7684\u534A\u5F91\u5230 _PARAM2_ \u7684\u4F4D\u7F6E","Change the radius on Y axis of the movement.":"\u66F4\u6539\u79FB\u52D5\u7684 Y \u8EF8\u7684\u534A\u5F91\u3002","Change the radius on Y axis of the movement of _PARAM0_ to _PARAM2_":"\u66F4\u6539\u79FB\u52D5\u7684 Y \u8EF8\u7684\u534A\u5F91\u5230 _PARAM2_ \u7684\u4F4D\u7F6E","Change the loop duration.":"\u66F4\u6539\u5FAA\u74B0\u6301\u7E8C\u6642\u9593\u3002","Change the loop duration of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u5FAA\u74B0\u6301\u7E8C\u6642\u9593\u5230 _PARAM2_ \u7684\u4F4D\u7F6E","Speed (in degrees per second)":"\u901F\u5EA6\uFF08\u4EE5\u5EA6\uFF0F\u6BCF\u79D2\u8A08\uFF09","Change the movement angle. The object is teleported according to the angle.":"\u66F4\u6539\u79FB\u52D5\u89D2\u5EA6\u3002\u5C0D\u8C61\u6309\u7167\u89D2\u5EA6\u9032\u884C\u50B3\u9001\u3002","Teleport at an angle":"\u4EE5\u4E00\u500B\u89D2\u5EA6\u9032\u884C\u50B3\u9001","Teleport _PARAM0_ on the ellipse at _PARAM2_\xB0":"\u5728 _PARAM0_ \u4E0A\u6A62\u5713\u4E0A\u4EE5 _PARAM2_\xB0 \u7684\u4F4D\u7F6E\u9032\u884C\u50B3\u9001","Delta X":"Delta X","Delta Y":"Delta Y","Direction angle":"\u65B9\u5411\u89D2\u5EA6","Emojis":"\u8868\u60C5\u7B26\u865F","Display emoji characters in text objects and store them in strings.":"\u5728\u6587\u672C\u5C0D\u8C61\u4E2D\u986F\u793A\u8868\u60C5\u7B26\u865F\u4E26\u5C07\u5B83\u5011\u5B58\u5132\u5728\u5B57\u7B26\u4E32\u4E2D\u3002","Returns the specified emoji, from the provided name.":"\u5F9E\u63D0\u4F9B\u7684\u540D\u7A31\u8FD4\u56DE\u6307\u5B9A\u7684\u8868\u60C5\u7B26\u865F\u3002","Returns the specified emoji (name)":"\u8FD4\u56DE\u6307\u5B9A\u7684\u8868\u60C5\u7B26\u865F\uFF08\u540D\u7A31\uFF09","Name of emoji":"\u8868\u60C5\u7B26\u865F\u7684\u540D\u7A31","Full list of emojis: [https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)":"\u5B8C\u6574\u7684\u8868\u60C5\u7B26\u865F\u5217\u8868\uFF1A[https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)","Returns the specified emoji, from a hexadecimal value.":"\u5F9E\u5341\u516D\u9032\u4F4D\u503C\u8FD4\u56DE\u6307\u5B9A\u7684\u8868\u60C5\u7B26\u865F\u3002","Returns the specified emoji (hex)":"\u8FD4\u56DE\u6307\u5B9A\u7684\u8868\u60C5\u7B26\u865F\uFF08\u5341\u516D\u9032\u4F4D\uFF09","Hexadecimal code":"\u5341\u516D\u9032\u4F4D\u4EE3\u78BC","Full list of hexadecimal code: [https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)":"\u5B8C\u6574\u7684\u5341\u516D\u9032\u4F4D\u78BC\u5217\u8868\uFF1A[https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)","Explosion force":"\u7206\u70B8\u529B","Simulate an explosion with physics forces on target objects.":"\u6A21\u64EC\u5C0D\u76EE\u6A19\u5C0D\u8C61\u65BD\u52A0\u7206\u70B8\u529B\u5B78\u529B\u3002","Simulate explosion with physics forces":"\u4F7F\u7528\u7269\u7406\u529B\u6A21\u64EC\u7206\u70B8","Simulate an explosion that affects _PARAM1_ within explosion radius: _PARAM6_ (pixels), Explosion center: _PARAM3_, _PARAM4_. Max force: _PARAM5_":"\u6A21\u64EC\u5728\u7206\u70B8\u534A\u5F91\u5167\u5F71\u97FF_PARAM1_ \u7684\u7206\u70B8\uFF0C\u7206\u70B8\u4E2D\u5FC3: _PARAM3_, _PARAM4_\u3002\u6700\u5927\u529B: _PARAM5_","Target Object":"\u76EE\u6A19\u7269\u4EF6","Physics Behavior (required)":"\u7269\u7406\u884C\u70BA\uFF08\u5FC5\u586B\uFF09","Explosion center (X)":"\u7206\u70B8\u4E2D\u5FC3\uFF08X\uFF09","Explosion center (Y)":"\u7206\u70B8\u4E2D\u5FC3\uFF08Y\uFF09","Max force (of explosion)":"\u6700\u5927\u7206\u70B8\u529B","Force decreases the farther an object is from the explosion center.":"\u8DDD\u96E2\u7206\u70B8\u4E2D\u5FC3\u7269\u9AD4\u8D8A\u9060\u529B\u91CF\u8D8A\u5C0F\u3002","Max distance (from center of explosion) (pixels)":"\u7206\u70B8\u4E2D\u5FC3\u7684\u6700\u5927\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","Objects less than this distance will be affected by the explosion.":"\u8DDD\u96E2\u5C0F\u65BC\u9019\u500B\u8DDD\u96E2\u7684\u7269\u9AD4\u6703\u53D7\u5230\u7206\u70B8\u7684\u5F71\u97FF\u3002","Extended math support":"\u64F4\u5C55\u6578\u5B78\u652F\u6301","Additional math functions and constants as expressions and conditions.":"\u9644\u52A0\u6578\u5B78\u51FD\u6578\u548C\u5E38\u6578\u4F5C\u70BA\u8868\u9054\u5F0F\u548C\u689D\u4EF6\u3002","Returns a term from the Fibonacci sequence.":"\u5F9E\u6590\u6CE2\u90A3\u5951\u6578\u5217\u4E2D\u8FD4\u56DE\u4E00\u500B\u8853\u8A9E\u3002","Fibonacci numbers":"\u6590\u6CE2\u90A3\u5951\u6578","The desired term in the sequence":"\u6578\u5217\u4E2D\u7684\u6240\u9700\u8853\u8A9E","Calculates the steepness of a line between two points.":"\u8A08\u7B97\u5169\u500B\u9EDE\u4E4B\u9593\u7DDA\u7684\u659C\u7387\u3002","Slope":"\u5761\u5EA6","X value of the first point":"\u7B2C\u4E00\u500B\u9EDE\u7684X\u503C","Y value of the first point":"\u7B2C\u4E00\u500B\u9EDE\u7684Y\u503C","X value of the second point":"\u7B2C\u4E8C\u500B\u9EDE\u7684X\u503C","Y value of the second point":"\u7B2C\u4E8C\u500B\u9EDE\u7684Y\u503C","Converts a number of one range e.g. 0-1 to another 0-255.":"\u5C07\u4E00\u500B\u7BC4\u570D\u5167\u7684\u6578\u5B57\uFF08\u4F8B\u59820-1\uFF09\u8F49\u63DB\u70BA\u53E6\u4E00\u500B\u7BC4\u570D\uFF080-255\uFF09\u3002","Map":"\u6620\u5C04","The value to convert":"\u8981\u8F49\u63DB\u7684\u503C","The lowest value of the first range":"\u7B2C\u4E00\u500B\u7BC4\u570D\u7684\u6700\u5C0F\u503C","The highest value of the first range":"\u7B2C\u4E00\u500B\u7BC4\u570D\u7684\u6700\u5927\u503C","The lowest value of the second range":"\u7B2C\u4E8C\u500B\u7BC4\u570D\u7684\u6700\u5C0F\u503C","The highest value of the second range":"\u7B2C\u4E8C\u500B\u7BC4\u570D\u7684\u6700\u5927\u503C","Returns the value of the length of the hypotenuse.":"\u8FD4\u56DE\u76F4\u89D2\u4E09\u89D2\u5F62\u7684\u659C\u908A\u9577\u5EA6\u503C\u3002","Hypotenuse length":"\u659C\u908A\u9577\u5EA6","First side of the triangle":"\u4E09\u89D2\u5F62\u7684\u7B2C\u4E00\u689D\u908A","Second side of the triangle":"\u4E09\u89D2\u5F62\u7684\u7B2C\u4E8C\u689D\u908A","Returns the greatest common factor of two numbers.":"\u8FD4\u56DE\u5169\u6578\u7684\u6700\u5927\u516C\u56E0\u6578\u3002","Greatest common factor (gcf)":"\u6700\u5927\u516C\u56E0\u6578\uFF08gcf\uFF09","Any integer":"\u4EFB\u4F55\u6574\u6578","Returns the lowest common multiple of two numbers.":"\u8FD4\u56DE\u5169\u6578\u7684\u6700\u5C0F\u516C\u500D\u6578\u3002","Lowest common multiple (lcm)":"\u6700\u5C0F\u516C\u500D\u6578\uFF08lcm\uFF09","Returns the input multiplied by all the previous whole numbers.":"\u8FD4\u56DE\u8F38\u5165\u8207\u524D\u5E7E\u500B\u6574\u6578\u76F8\u4E58\u7684\u7D50\u679C\u3002","Factorial":"\u968E\u4E58","Any positive integer":"\u4EFB\u4F55\u6B63\u6574\u6578","Converts a polar coordinate into the Cartesian x value.":"\u5C07\u6975\u5750\u6A19\u8F49\u63DB\u70BA\u7B1B\u5361\u723EX\u503C\u3002","Polar coordinate to Cartesian X value":"\u6975\u5750\u6A19\u8F49\u70BA\u7B1B\u5361\u723EX\u503C","Angle or theta in radians":"\u89D2\u5EA6\u6216\u5F27\u5EA6\u03B8","Converts a polar coordinate into the Cartesian y value.":"\u5C07\u6975\u5750\u6A19\u8F49\u63DB\u70BA\u7B1B\u5361\u723EY\u503C\u3002","Polar coordinate to Cartesian Y value":"\u6975\u5750\u6A19\u8F49\u70BA\u7B1B\u5361\u723EY\u503C","Converts a isometric coordinate into the Cartesian x value.":"\u5C07\u7B49\u8DDD\u5750\u6A19\u8F49\u63DB\u70BACartesian x\u503C\u3002","Isometric coordinate to Cartesian X value":"\u7B49\u8DDD\u5750\u6A19\u5230Cartesian X\u503C","Position on the x axis":"x\u8EF8\u4E0A\u7684\u4F4D\u7F6E","Position on the y axis":"y\u8EF8\u4E0A\u7684\u4F4D\u7F6E","Converts a isometric coordinate into the Cartesian y value.":"\u5C07\u7B49\u8DDD\u5750\u6A19\u8F49\u63DB\u70BACartesian y\u503C\u3002","Isometric coordinate to Cartesian Y value":"\u7B49\u8DDD\u5750\u6A19\u5230Cartesian Y\u503C","Returns the golden ratio.":"\u8FD4\u56DE\u9EC3\u91D1\u6BD4\u4F8B\u3002","Golden ratio":"\u9EC3\u91D1\u6BD4\u4F8B","Returns Pi (\u03C0).":"\u8FD4\u56DEPi\uFF08\u03C0\uFF09\u3002","Pi (\u03C0)":"Pi\uFF08\u03C0\uFF09","Returns half Pi.":"\u8FD4\u56DE\u4E00\u534A\u7684Pi\u3002","Half Pi":"\u4E00\u534A\u7684Pi","Returns the natural logarithm of e. (Euler's number).":"\u8FD4\u56DEe\u7684\u81EA\u7136\u5C0D\u6578\u3002\uFF08\u6B50\u62C9\u6578\uFF09\u3002","Natural logarithm of e":"e\u7684\u81EA\u7136\u5C0D\u6578","Returns the natural logarithm of 2.":"\u8FD4\u56DE2\u7684\u81EA\u7136\u5C0D\u6578\u3002","Natural logarithm of 2":"2\u7684\u81EA\u7136\u5C0D\u6578","Returns the natural logarithm of 10.":"\u8FD4\u56DE10\u7684\u81EA\u7136\u5C0D\u6578\u3002","Natural logarithm of 10":"10\u7684\u81EA\u7136\u5C0D\u6578","Returns the base 2 logarithm of e. (Euler's number).":"\u8FD4\u56DEe\u7684\u5E95\u65782\u5C0D\u6578\u3002\uFF08\u6B50\u62C9\u6578\uFF09\u3002","Base 2 logarithm of e":"e\u7684\u5E95\u65782\u5C0D\u6578","Returns the base 10 logarithm of e. (Euler's number).":"\u8FD4\u56DEe\u7684\u5E95\u657810\u5C0D\u6578\u3002\uFF08\u6B50\u62C9\u6578\uFF09\u3002","Base 10 logarithm of e":"e\u7684\u5E95\u657810\u5C0D\u6578","Returns square root of 2.":"\u8FD4\u56DE2\u7684\u5E73\u65B9\u6839\u3002","Square root of 2":"2\u7684\u5E73\u65B9\u6839","Returns square root of 1/2.":"\u8FD4\u56DE1/2\u7684\u5E73\u65B9\u6839\u3002","Square root of 1/2":"1/2\u7684\u5E73\u65B9\u6839","Returns quarter Pi.":"\u8FD4\u56DE\u56DB\u5206\u4E4B\u4E00\u7684Pi\u3002","Quarter Pi":"\u56DB\u5206\u4E4B\u4E00\u7684Pi","Formats a number to use the specified number of decimal places (Deprecated).":"\u5C07\u6578\u5B57\u683C\u5F0F\u5316\u70BA\u6307\u5B9A\u5C0F\u6578\u4F4D\u6578\uFF08\u5DF2\u68C4\u7528\uFF09\u3002","ToFixed":"ToFixed","The value to be rounded":"\u8981\u56DB\u6368\u4E94\u5165\u7684\u503C","Number of decimal places":"\u5C0F\u6578\u4F4D\u6578","Formats a number to a string with the specified number of decimal places.":"\u5C07\u6578\u5B57\u683C\u5F0F\u5316\u70BA\u6307\u5B9A\u5C0F\u6578\u4F4D\u6578\u7684\u5B57\u7B26\u4E32\u3002","Check if the number is even (divisible by 2). To check for odd numbers, invert this condition.":"\u6AA2\u67E5\u6578\u5B57\u662F\u5426\u70BA\u5076\u6578\uFF08\u53EF\u88AB2\u6574\u9664\uFF09\u3002\u8981\u6AA2\u67E5\u5947\u6578\uFF0C\u8ACB\u53CD\u8F49\u6B64\u689D\u4EF6\u3002","Is even?":"\u662F\u5076\u6578\uFF1F","_PARAM1_ is even":"_PARAM1_\u662F\u5076\u6578","Extended variables support":"\u64F4\u5C55\u8B8A\u91CF\u652F\u6301","Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.":"\u6DFB\u52A0\u689D\u4EF6\u3001\u52D5\u4F5C\u548C\u8868\u9054\u5F0F\u4F86\u6AA2\u67E5\u8B8A\u91CF\u7684\u5B58\u5728\uFF0C\u5F9E\u5167\u5B58\u4E2D\u5FA9\u5236\u8B8A\u91CF\uFF0C\u522A\u9664\u73FE\u6709\u7684\u8B8A\u91CF\u4E26\u5275\u5EFA\u52D5\u614B\u8B8A\u91CF\u3002","Check if a global variable exists.":"\u6AA2\u67E5\u5168\u57DF\u8B8A\u6578\u662F\u5426\u5B58\u5728\u3002","Global variable exists":"\u5168\u57DF\u8B8A\u6578\u5B58\u5728","If the global variable _PARAM1_ exist":"\u5982\u679C\u5168\u57DF\u8B8A\u6578_PARAM1_\u5B58\u5728","Name of the global variable":"\u5168\u57DF\u8B8A\u6578\u7684\u540D\u7A31","Check if the global variable exists.":"\u6AA2\u67E5\u5168\u57DF\u8B8A\u6578\u662F\u5426\u5B58\u5728\u3002","Check if a scene variable exists.":"\u6AA2\u67E5\u5834\u666F\u8B8A\u6578\u662F\u5426\u5B58\u5728\u3002","Scene variable exists":"\u5834\u666F\u8B8A\u6578\u5B58\u5728","If the scene variable _PARAM1_ exist":"\u5982\u679C\u5834\u666F\u8B8A\u6578_PARAM1_\u5B58\u5728","Name of the scene variable":"\u5834\u666F\u8B8A\u6578\u7684\u540D\u7A31","Check if the scene variable exists.":"\u6AA2\u67E5\u5834\u666F\u8B8A\u6578\u662F\u5426\u5B58\u5728\u3002","Check if an object variable exists.":"\u6AA2\u67E5\u7269\u4EF6\u8B8A\u6578\u662F\u5426\u5B58\u5728\u3002","Object variable exists":"\u7269\u4EF6\u8B8A\u6578\u5B58\u5728","Object _PARAM1_ has object variable _PARAM2_":"\u7269\u4EF6_PARAM1_\u5177\u6709\u7269\u4EF6\u8B8A\u6578_PARAM2_","Name of object variable":"\u7269\u4EF6\u8B8A\u6578\u7684\u540D\u7A31","Delete a global variable, removing it from memory.":"\u522A\u9664\u5168\u57DF\u8B8A\u6578\uFF0C\u5F9E\u8A18\u61B6\u9AD4\u4E2D\u5C07\u5B83\u79FB\u9664\u3002","Delete global variable":"\u522A\u9664\u5168\u57DF\u8B8A\u6578","Delete global variable _PARAM1_":"\u522A\u9664\u5168\u57DF\u8B8A\u6578_PARAM1_","Name of the global variable to delete":"\u8981\u522A\u9664\u7684\u5168\u57DF\u8B8A\u6578\u540D\u7A31","Delete the global variable, removing it from memory.":"\u522A\u9664\u5168\u57DF\u8B8A\u6578\uFF0C\u5F9E\u8A18\u61B6\u9AD4\u4E2D\u5C07\u5B83\u79FB\u9664\u3002","Delete the global variable _PARAM1_ from memory":"\u5F9E\u8A18\u61B6\u9AD4\u4E2D\u522A\u9664\u5168\u57DF\u8B8A\u6578_PARAM1_","Modify the text of a scene variable.":"\u4FEE\u6539\u5834\u666F\u8B8A\u6578\u7684\u6587\u672C\u3002","String of a scene variable":"\u5834\u666F\u8B8A\u6578\u7684\u5B57\u4E32","Change the text of scene variable _PARAM1_ to _PARAM2_":"\u66F4\u6539\u5834\u666F\u8B8A\u6578_PARAM1_\u7684\u6587\u672C\u70BA_PARAM2_","Modify the text of a global variable.":"\u4FEE\u6539\u5168\u57DF\u8B8A\u6578\u7684\u6587\u672C\u3002","String of a global variable":"\u5168\u57DF\u8B8A\u6578\u7684\u5B57\u4E32","Change the text of global variable _PARAM1_ to _PARAM2_":"\u5C07\u5168\u57DF\u8B8A\u6578_PARAM1_\u7684\u6587\u672C\u66F4\u6539\u70BA_PARAM2_","Modify the value of a global variable.":"\u4FEE\u6539\u5168\u57DF\u8B8A\u6578\u7684\u503C\u3002","Value of a global variable":"\u5168\u57DF\u8B8A\u6578\u7684\u503C","Change the global variable _PARAM1_ with value: _PARAM2_":"\u4F7F\u7528\u503C_PARAM2_\u66F4\u6539\u5168\u57DF\u8B8A\u6578_PARAM1_","Modify the value of a scene variable.":"\u4FEE\u6539\u5834\u666F\u8B8A\u6578\u7684\u503C\u3002","Value of a scene variable":"\u5834\u666F\u8B8A\u6578\u7684\u503C","Change the scene variable _PARAM1_ with value: _PARAM2_":"\u4F7F\u7528\u503C_PARAM2_\u66F4\u6539\u5834\u666F\u8B8A\u6578_PARAM1_","Delete scene variable, the variable will be deleted from the memory.":"\u522A\u9664\u5834\u666F\u8B8A\u6578\uFF0C\u8A72\u8B8A\u6578\u5C07\u5F9E\u8A18\u61B6\u9AD4\u4E2D\u522A\u9664\u3002","Delete scene variable":"\u522A\u9664\u5834\u666F\u8B8A\u6578","Delete the scene variable _PARAM1_":"\u522A\u9664\u5834\u666F\u8B8A\u6578_PARAM1_","Name of the scene variable to delete":"\u8981\u522A\u9664\u7684\u5834\u666F\u8B8A\u6578\u540D\u7A31","Delete the scene variable, the variable will be deleted from the memory.":"\u522A\u9664\u5834\u666F\u8B8A\u6578\uFF0C\u8B8A\u6578\u5C07\u5F9E\u8A18\u61B6\u9AD4\u4E2D\u522A\u9664\u3002","Delete the scene variable _PARAM1_ from memory":"\u5F9E\u8A18\u61B6\u9AD4\u4E2D\u522A\u9664\u5834\u666F\u8B8A\u6578 _PARAM1_","Copy an object variable from one object to another.":"\u5F9E\u4E00\u500B\u5C0D\u8C61\u8907\u88FD\u4E00\u500B\u5C0D\u8C61\u8B8A\u6578\u5230\u53E6\u4E00\u500B\u5C0D\u8C61\u3002","Copy an object variable":"\u8907\u88FD\u4E00\u500B\u5C0D\u8C61\u8B8A\u6578","Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_":"\u8907\u88FD _PARAM1_ \u7684\u8B8A\u6578 _PARAM2_ \u5230 _PARAM4_ \u7684\u8B8A\u6578 _PARAM3_","Source object":"\u6E90\u5C0D\u8C61","Variable to copy":"\u8981\u8907\u88FD\u7684\u8B8A\u6578","Destination object":"\u76EE\u6A19\u5C0D\u8C61","To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.":"\u8981\u5728\u540C\u4E00\u500B\u5C0D\u8C61\u76842\u500B\u5BE6\u4F8B\u4E4B\u9593\u8907\u88FD\u8B8A\u6578\uFF0C\u8B8A\u6578\u5FC5\u9808\u9996\u5148\u5FA9\u88FD\u5230\u53E6\u4E00\u500B\u5C0D\u8C61\u3002","Destination variable":"\u76EE\u6A19\u8B8A\u6578","Copy the object variable from one object to another.":"\u5C07\u7269\u4EF6\u8B8A\u6578\u5F9E\u4E00\u500B\u7269\u4EF6\u8907\u88FD\u5230\u53E6\u4E00\u500B\u7269\u4EF6\u3002","Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)":"\u5C07_PARAM1_\u7684\u8B8A\u6578_PARAM2_\u8907\u88FD\u5230\u8B8A\u6578_PARAM3_\u7684\u8B8A\u6578_PARAM4_\uFF08\u6E05\u7A7A\u76EE\u7684\u5730\uFF1A_PARAM5_\uFF09","Clear the destination variable before copying":"\u5728\u8907\u88FD\u4E4B\u524D\u6E05\u7A7A\u76EE\u7684\u5730\u8B8A\u6578","Copy all object variables from one object to another.":"\u5C07\u4E00\u500B\u7269\u4EF6\u7684\u6240\u6709\u8B8A\u6578\u5F9E\u4E00\u500B\u7269\u4EF6\u8907\u88FD\u5230\u53E6\u4E00\u500B\u7269\u4EF6\u3002","Copy all object variables":"\u8907\u88FD\u6240\u6709\u7269\u4EF6\u8B8A\u6578","Copy all variables from _PARAM1_ to _PARAM2_":"\u5F9E_PARAM1_\u8907\u88FD\u6240\u6709\u8B8A\u6578\u5230_PARAM2_","Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)":"\u5F9E\u7269\u4EF6_PARAM1_\u8907\u88FD\u6240\u6709\u8B8A\u6578\u5230\u7269\u4EF6_PARAM2_\uFF08\u6E05\u7A7A\u76EE\u7684\u5730\uFF1A_PARAM3_\uFF09","Delete an object variable, removing it from memory.":"\u522A\u9664\u4E00\u500B\u7269\u4EF6\u8B8A\u6578\uFF0C\u5F9E\u5167\u5B58\u4E2D\u5C07\u5176\u79FB\u9664\u3002","Delete object variable":"\u522A\u9664\u7269\u4EF6\u8B8A\u6578","Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory":"\u5F9E\u5167\u5B58\u4E2D\u522A\u9664\u7269\u4EF6_PARAM1_\u7684\u7269\u4EF6\u8B8A\u6578_PARAM2_","Return the text of a global variable.":"\u8FD4\u56DE\u5168\u5C40\u8B8A\u6578\u7684\u6587\u672C\u3002","Text of a global variable":"\u5168\u5C40\u8B8A\u6578\u7684\u6587\u672C","Return the text of a scene variable.":"\u8FD4\u56DE\u5834\u666F\u8B8A\u6578\u7684\u6587\u672C\u3002","Text of a scene variable":"\u5834\u666F\u8B8A\u6578\u7684\u6587\u672C","Return the value of a global variable.":"\u8FD4\u56DE\u5168\u5C40\u8B8A\u6578\u7684\u503C\u3002","Return the value of a scene variable.":"\u8FD4\u56DE\u5834\u666F\u8B8A\u6578\u7684\u503C\u3002","Copy the global variable to scene. This copy everything from the types to the values.":"\u5C07\u5168\u5C40\u8B8A\u6578\u5FA9\u5236\u5230\u5834\u666F\u3002\u9019\u6703\u5C07\u6240\u6709\u5167\u5BB9\u5F9E\u985E\u578B\u5230\u503C\u90FD\u8907\u88FD\u3002","Copy a global variable to scene":"\u5C07\u5168\u5C40\u8B8A\u6578\u8907\u88FD\u5230\u5834\u666F","Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)":"\u5C07\u5168\u5C40\u8B8A\u6578:_PARAM1_\u8907\u88FD\u5230\u5834\u666F\u8B8A\u6578:_PARAM2_\uFF08\u6E05\u7A7A\u76EE\u7684\u5730\uFF1A_PARAM3_\uFF09","Global variable to copy":"\u8981\u8907\u88FD\u7684\u5168\u5C40\u8B8A\u6578","Scene variable destination":"\u5834\u666F\u8B8A\u6578\u76EE\u7684\u5730","Copy the scene variable to global. This copy everything from the types to the values.":"\u5C07\u5834\u666F\u8B8A\u6578\u5FA9\u5236\u5230\u5168\u5C40\u3002\u9019\u6703\u5C07\u6240\u6709\u5167\u5BB9\u5F9E\u985E\u578B\u5230\u503C\u90FD\u8907\u88FD\u3002","Copy a scene variable to global":"\u5C07\u5834\u666F\u8B8A\u6578\u8907\u88FD\u5230\u5168\u5C40","Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)":"\u5C07\u5834\u666F\u8B8A\u6578:_PARAM1_\u8907\u88FD\u5230\u5168\u5C40\u8B8A\u6578:_PARAM2_\uFF08\u6E05\u7A7A\u76EE\u7684\u5730\uFF1A_PARAM3_\uFF09","Scene variable to copy":"\u8981\u8907\u88FD\u7684\u5834\u666F\u8B8A\u6578","Global variable destination":"\u5168\u5C40\u8B8A\u6578\u76EE\u7684\u5730","Frames per second (FPS)":"\u6BCF\u79D2\u5E40\u6578\uFF08FPS\uFF09","Calculate and display the frames per second (FPS) of the game.":"\u8A08\u7B97\u4E26\u986F\u793A\u904A\u6232\u7684\u5E40\u901F\u7387\uFF08FPS\uFF09\u3002","Frames per second (FPS) during the last second.":"\u4E0A\u4E00\u79D2\u7684\u6BCF\u79D2\u5E40\u6578\uFF08FPS\uFF09\u3002","Frames Per Second (FPS)":"\u6BCF\u79D2\u5E40\u6578\uFF08FPS\uFF09","Frames per second (FPS) during the last second. [Deprecated]":"\u4E0A\u4E00\u79D2\u7684\u6BCF\u79D2\u5E40\u6578\uFF08FPS\uFF09\u3002[\u5DF2\u68C4\u7528]","Frames Per Second (FPS) [Deprecated]":"\u6BCF\u79D2\u5E40\u6578\uFF08FPS\uFF09[\u5DF2\u68C4\u7528]","The accuracy of the FPS":"FPS\u7684\u6E96\u78BA\u6027","This tells how many numbers after the period should be shown.":"\u9019\u500B\u5B57\u6BB5\u986F\u793A\u5C0F\u6578\u9EDE\u5F8C\u61C9\u986F\u793A\u7684\u6578\u5B57\u6578\u3002","Makes a text object display the current FPS.":"\u4F7F\u6587\u672C\u5C0D\u8C61\u986F\u793A\u7576\u524DFPS\u3002","FPS Displayer":"FPS Displayer","FPS counter prefix":"FPS\u8A08\u6578\u5668\u524D\u7DB4","Number of decimal digits":"\u5C0F\u6578\u4F4D\u6578","Face Forward":"\u6B63\u9762","Face object towards the direction of movement.":"\u5C07\u5C0D\u8C61\u671D\u5411\u904B\u52D5\u65B9\u5411\u3002","Face forward":"\u5411\u524D\u770B","Rotation speed (degrees per second)":"\u65CB\u8F49\u901F\u5EA6\uFF08\u6BCF\u79D2\u7684\u5EA6\u6578\uFF09","Use \"0\" for immediate turning.":"\u4F7F\u7528\u201C0\u201D\u9032\u884C\u7ACB\u5373\u8F49\u5411\u3002","Offset angle":"\u504F\u79FB\u89D2\u5EA6","Can be used when the image of the object is not facing to the right.":"\u7576\u5C0D\u8C61\u7684\u5716\u50CF\u672A\u9762\u5411\u53F3\u908A\u6642\u53EF\u4EE5\u4F7F\u7528\u3002","Previous X position":"\u4E0A\u4E00\u500BX\u4F4D\u7F6E","Previous Y position":"\u4E0A\u4E00\u500BY\u4F4D\u7F6E","Direction the object is moving (in degrees)":"\u5C0D\u8C61\u7684\u79FB\u52D5\u65B9\u5411\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09","Set rotation speed (degrees per second). Use \"0\" for immediate turning.":"\u8A2D\u7F6E\u65CB\u8F49\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\u6578\uFF09\u3002 \u4F7F\u7528\"0\"\u9032\u884C\u7ACB\u5373\u8F49\u5411\u3002","Set rotation speed":"\u8A2D\u7F6E\u65CB\u8F49\u901F\u5EA6","Set rotation speed of _PARAM0_ to _PARAM2_":"\u5C07 _PARAM0_ \u7684\u65CB\u8F49\u901F\u5EA6\u8A2D\u7F6E\u70BA _PARAM2_","Rotation Speed":"\u65CB\u8F49\u901F\u5EA6","Set offset angle.":"\u8A2D\u7F6E\u504F\u79FB\u89D2\u5EA6\u3002","Set offset angle":"\u8A2D\u7F6E\u504F\u79FB\u89D2\u5EA6","Set offset angle of _PARAM0_ to _PARAM2_":"\u5C07 _PARAM0_ \u7684\u504F\u79FB\u89D2\u5EA6\u8A2D\u7F6E\u70BA _PARAM2_","Rotation speed (in degrees per second).":"\u65CB\u8F49\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\u6578\uFF09\u3002","Rotation speed":"\u65CB\u8F49\u901F\u5EA6","Rotation speed of _PARAM0_":"_PARAM0_ \u7684\u65CB\u8F49\u901F\u5EA6","Offset angle.":"\u504F\u79FB\u89D2\u5EA6\u3002","Direction the object is moving (in degrees).":"\u5C0D\u8C61\u79FB\u52D5\u7684\u65B9\u5411\uFF08\u4EE5\u5EA6\u8A08\uFF09\u3002","Movement direction":"\u79FB\u52D5\u65B9\u5411","Fire bullets":"\u767C\u5C04\u5B50\u5F48","Fire bullets, manage ammo, reloading and overheating.":"\u767C\u5C04\u5B50\u5F48\uFF0C\u7BA1\u7406\u5F48\u85E5\uFF0C\u91CD\u65B0\u88DD\u586B\u548C\u904E\u71B1\u3002","Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).":"\u767C\u5C04\u5177\u6709\u5167\u5EFA\u51B7\u537B\u3001\u5F48\u85E5\u3001\u91CD\u65B0\u88DD\u586B\u548C\u904E\u71B1\u529F\u80FD\u7684\u5B50\u5F48\u3002\u4E00\u65E6\u88AB\u6DFB\u52A0\u5230\u5FC5\u9808\u767C\u5C04\u7684\u7269\u9AD4\u4E2D\uFF0C\u4F7F\u7528\u884C\u70BA\u52D5\u4F5C\u767C\u5C04\u53E6\u4E00\u500B\u4F5C\u70BA\u5B50\u5F48\u7684\u7269\u9AD4\u3002\u9019\u4E9B\u52D5\u4F5C\u6703\u5728\u5167\u90E8\u6AA2\u67E5\u6240\u6709\u7D04\u675F\uFF08\u53EF\u4EE5\u5728\u6C92\u6709\u689D\u4EF6\u7684\u60C5\u6CC1\u4E0B\u8ABF\u7528\uFF0C\u5B83\u5011\u50C5\u5728\u6E96\u5099\u597D\u6642\u767C\u5C04\uFF09\u4E26\u4F7F\u5B50\u5F48\u79FB\u52D5\uFF08\u4F7F\u7528\u6301\u4E45\u6027\u529B\u91CF\uFF09\u3002","Firing cooldown":"\u5C04\u64CA\u51B7\u537B\u6642\u9593","Objects cannot shoot while firing cooldown is active.":"\u5728\u5C04\u64CA\u51B7\u537B\u6642\u9593\u6D3B\u52D5\u6642\uFF0C\u7269\u9AD4\u7121\u6CD5\u767C\u5C04\u5B50\u5F48\u3002","Rotate bullets to match their trajectory":"\u5C07\u5B50\u5F48\u65CB\u8F49\u4EE5\u5339\u914D\u5B83\u5011\u7684\u8ECC\u8DE1","Firing arc":"\u5C04\u64CA\u5F27","Multi-Fire bullets will be evenly spaced inside the firing arc":"\u591A\u767C\u5C04\u5B50\u5F48\u5C07\u5747\u52FB\u9593\u9694\u5728\u5C04\u64CA\u5F27\u5167","Multi-Fire":"\u591A\u5C04\u64CA","Number of bullets created at once":"\u4E00\u6B21\u5275\u5EFA\u7684\u5B50\u5F48\u6578\u91CF","Angle variance":"\u89D2\u5EA6\u8B8A\u7570","Make imperfect aim (between 0 and 180 degrees).":"\u88FD\u9020\u4E0D\u5B8C\u7F8E\u7684\u7784\u6E96\uFF080\u81F3180\u5EA6\u4E4B\u9593\uFF09\u3002","Firing variance":"\u5C04\u64CA\u8B8A\u7570","Bullet speed variance":"\u5B50\u5F48\u901F\u5EA6\u8B8A\u7570","Bullet speed will be adjusted by a random value within this range.":"\u5B50\u5F48\u901F\u5EA6\u5C07\u5728\u6B64\u7BC4\u570D\u5167\u8ABF\u6574\u3002","Ammo quantity (current)":"\u5F48\u85E5\u6578\u91CF\uFF08\u76EE\u524D\uFF09","Shots per reload":"\u6BCF\u6B21\u91CD\u65B0\u52A0\u8F09\u7684\u5C04\u64CA\u6578","Use 0 to disable reloading.":"\u4F7F\u75280\u7981\u7528\u91CD\u65B0\u52A0\u8F09\u3002","Reload":"\u91CD\u65B0\u52A0\u8F09","Reloading duration":"\u91CD\u65B0\u52A0\u8F09\u6301\u7E8C\u6642\u9593","Objects cannot shoot while reloading is in progress.":"\u5728\u91CD\u65B0\u52A0\u8F09\u9032\u884C\u6642\uFF0C\u7269\u9AD4\u7121\u6CD5\u767C\u5C04\u5B50\u5F48\u3002","Max ammo":"\u6700\u5927\u5F48\u85E5","Ammo":"\u5F48\u85E5","Shots before next reload":"\u4E0B\u6B21\u91CD\u65B0\u52A0\u8F09\u524D\u7684\u5C04\u64CA\u6B21\u6578","Total shots fired":"\u7E3D\u5C04\u64CA\u6B21\u6578","Regardless of how many bullets are created, only 1 shot will be counted per frame":"\u7121\u8AD6\u5275\u5EFA\u4E86\u591A\u5C11\u5B50\u5F48\uFF0C\u6BCF\u5E40\u53EA\u8A08\u7B971\u767C","Total bullets created":"\u5275\u5EFA\u7684\u7E3D\u5B50\u5F48\u6578","Starting ammo":"\u521D\u59CB\u5F48\u85E5","Total reloads completed":"\u5B8C\u6210\u7E3D\u91CD\u65B0\u52A0\u8F09","Unlimited ammo":"\u7121\u9650\u5F48\u85E5","Heat increase per shot (between 0 and 1)":"\u6BCF\u6B21\u5C04\u64CA\u7684\u71B1\u91CF\u589E\u52A0\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593\uFF09","Object is overheated when Heat reaches 1.":"\u7576\u71B1\u91CF\u9054\u52301\u6642\uFF0C\u7269\u9AD4\u904E\u71B1\u3002","Overheat":"\u904E\u71B1","Heat level (Range: 0 to 1)":"\u71B1\u91CF\u6C34\u5E73\uFF08\u7BC4\u570D\uFF1A0\u81F31\uFF09","Reload automatically":"\u81EA\u52D5\u91CD\u65B0\u52A0\u8F09","Overheat duration":"\u904E\u71B1\u6301\u7E8C\u6642\u9593","Object cannot shoot while overheat duration is active.":"\u7576\u904E\u71B1\u6301\u7E8C\u6642\u9593\u6709\u6548\u6642\uFF0C\u7269\u9AD4\u7121\u6CD5\u5C04\u64CA\u3002","Linear cooling rate (per second)":"\u7DDA\u6027\u51B7\u537B\u901F\u7387\uFF08\u6BCF\u79D2\uFF09","Exponential cooling rate (per second)":"\u6307\u6578\u51B7\u537B\u901F\u7387\uFF08\u6BCF\u79D2\uFF09","Happens faster when heat is high and slower when heat is low.":"\u7576\u71B1\u91CF\u9AD8\u6642\u767C\u751F\u5F97\u66F4\u5FEB\uFF0C\u71B1\u91CF\u4F4E\u6642\u767C\u751F\u5F97\u66F4\u6162\u3002","Layer the bullets are created on":"\u5275\u5EFA\u5B50\u5F48\u7684\u5C64","Base layer by default.":"\u9ED8\u8A8D\u70BA\u57FA\u790E\u5C64\u3002","Shooting configuration":"\u5C04\u64CA\u914D\u7F6E","Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"\u4EE5\u6307\u5B9A\u901F\u5EA6\u5411\u7269\u9AD4\u767C\u5C04\u5B50\u5F48\u3002\u6301\u7E8C\u8ABF\u7528\u6B64\u52D5\u4F5C\uFF0C\u52D5\u4F5C\u5728\u5167\u90E8\u6AA2\u67E5\u6E96\u5099\u60C5\u6CC1\u2014\u2014\u7121\u9700\u984D\u5916\u7684\u8A08\u6642\u5668\u6216\u6AA2\u67E5\u3002","Fire bullets toward an object":"\u5411\u5C0D\u8C61\u958B\u706B","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s":"\u5F9E _PARAM0_ \u767C\u5C04 _PARAM4_\uFF08\u5982\u679C\u6E96\u5099\u597D\uFF09\uFF0C\u5728\u4F4D\u7F6E _PARAM2_\uFF1B_PARAM3_\uFF0C\u5411 _PARAM5_ \u4EE5\u901F\u5EA6 _PARAM6_ \u50CF\u7D20/\u79D2\u3002","X position, where to create the bullet":"\u8981\u5275\u5EFA\u5B50\u5F48\u7684X\u4F4D\u7F6E","Y position, where to create the bullet":"\u8981\u5275\u5EFA\u5B50\u5F48\u7684Y\u4F4D\u7F6E","The bullet object":"\u5B50\u5F39\u5BF9\u8C61","Target object":"\u76EE\u6A19\u5C0D\u8C61","Speed of the bullet, in pixels per second":"\u5B50\u5F39\u7684\u901F\u5EA6\uFF0C\u4EE5\u50CF\u7D20\u6BCF\u79D2\u8BA1","Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"\u4EE5\u6307\u5B9A\u901F\u5EA6\u5411\u67D0\u500B\u4F4D\u7F6E\u767C\u5C04\u5B50\u5F48\u3002\u6301\u7E8C\u8ABF\u7528\u6B64\u52D5\u4F5C\uFF0C\u52D5\u4F5C\u5728\u5167\u90E8\u6AA2\u67E5\u6E96\u5099\u60C5\u6CC1\u2014\u2014\u7121\u9700\u984D\u5916\u7684\u8A08\u6642\u5668\u6216\u6AA2\u67E5\u3002","Fire bullets toward a position":"\u5411\u67D0\u4E00\u4F4D\u7F6E\u53D1\u5C04\u5B50\u5F39","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s":"\u5F9E _PARAM0_ \u767C\u5C04 _PARAM4_\uFF08\u5982\u679C\u6E96\u5099\u597D\uFF09\uFF0C\u5728\u4F4D\u7F6E _PARAM2_\uFF1B_PARAM3_\uFF0C\u5411\u4F4D\u7F6E _PARAM5_\uFF1B_PARAM6_ \u4EE5\u901F\u5EA6 _PARAM7_ \u50CF\u7D20/\u79D2\u3002","Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally \u2014 no extra timer or check needed.":"\u4EE5\u6307\u5B9A\u7684\u901F\u5EA6\u5411\u7279\u5B9A\u89D2\u5EA6\u767C\u5C04\u5B50\u5F48\u3002\u6301\u7E8C\u8ABF\u7528\u6B64\u64CD\u4F5C\uFF0C\u8A72\u64CD\u4F5C\u6703\u5167\u90E8\u6AA2\u67E5\u6E96\u5099\u72C0\u614B\u2014\u4E0D\u9700\u8981\u984D\u5916\u7684\u8A08\u6642\u5668\u6216\u6AA2\u67E5\u3002","Fire bullets toward an angle":"\u671D\u7279\u5B9A\u89D2\u5EA6\u53D1\u5C04\u5B50\u5F39","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s":"\u5F9E _PARAM0_ \u767C\u5C04 _PARAM4_\uFF08\u5982\u679C\u5DF2\u6E96\u5099\u597D\uFF09\uFF0C\u5728\u4F4D\u7F6E _PARAM2_\uFF1B_PARAM3_\uFF0C\u671D\u5411\u89D2\u5EA6 _PARAM5_ \u548C\u901F\u5EA6 _PARAM6_ px/s","Angle of the bullet, in degrees":"\u5B50\u5F39\u7684\u89D2\u5EA6\uFF0C\u4EE5\u5EA6\u4E3A\u5355\u4F4D","Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.":"\u53D1\u5C04\u5355\u9897\u5B50\u5F39\u3002\u8FD9\u53EA\u80FD\u5728\u201C\u53D1\u5C04\u5B50\u5F39\u201D\u52A8\u4F5C\u5185\u4F7F\u7528\u3002","Fire a single bullet":"\u53D1\u5C04\u5355\u9897\u5B50\u5F39","Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s":"\u5F9E_PARAM0_\u4F4D\u7F6E\uFF0C\u4EE5\u4F4D\u7F6E_PARAM2_\u767C\u5C04\u55AE\u9846\u98DB\u884C\u5668\uFF1B_PARAM3_\uFF0C\u5E36\u6709\u89D2\u5EA6_PARAM5_\u548C\u901F\u5EA6_PARAM6_ px/s","Reload ammo.":"\u91CD\u65B0\u88DD\u586B\u5F48\u85E5\u3002","Reload ammo":"\u91CD\u65B0\u88C5\u586B\u5F39\u836F","Reload ammo on _PARAM0_":"\u91CD\u65B0\u88DD\u586B_PARAM0_\u7684\u5F48\u85E5","Check if the object has just fired something.":"\u68C0\u67E5\u5BF9\u8C61\u662F\u5426\u521A\u521A\u53D1\u5C04\u4E86\u67D0\u7269\u3002","Has just fired":"\u521A\u521A\u53D1\u5C04\u4E86","_PARAM0_ has just fired":"_PARAM0_\u525B\u525B\u767C\u5C04\u4E86","Check if bullet rotates to match trajectory.":"\u68C0\u67E5\u5B50\u5F39\u662F\u5426\u65CB\u8F6C\u4EE5\u5339\u914D\u5F39\u9053\u3002","Is bullet rotation enabled":"\u542F\u7528\u5B50\u5F39\u65CB\u8F6C","Bullet rotation enabled on _PARAM0_":"_PARAM0_\u7684\u5B50\u5F48\u65CB\u8F49\u5DF2\u555F\u7528","the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.":"\u5B50\u5F39\u53D1\u5C04\u7684\u5F27\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u3002\u5B50\u5F39\u5728\u53D1\u5C04\u5F27\u7EBF\u5185\u5747\u5300\u5206\u5E03\u3002","the firing arc":"\u53D1\u5C04\u5F27\u5EA6","Firing arc (degrees) Range: 0 to 360":"\u53D1\u5C04\u5F27\u5EA6\uFF08\u89D2\u5EA6\uFF09\u8303\u56F4\uFF1A0\u81F3360","Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.":"\u66F4\u6539\u5B50\u5F39\u53D1\u5C04\u7684\u5F27\u5EA6\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u3002\u5B50\u5F39\u5C06\u5728\u53D1\u5C04\u5F27\u5185\u5747\u5300\u5206\u5E03\u3002","Set firing arc (deprecated)":"\u8BBE\u7F6E\u53D1\u5C04\u5F27\u5EA6\uFF08\u5DF2\u5F03\u7528\uFF09","Set firing arc of _PARAM0_ to _PARAM2_ degrees":"\u5C07_PARAM0_\u7684\u767C\u5C04\u5F27\u5EA6\u8A2D\u7F6E\u70BA_PARAM2_\u5EA6","the angle variance (in degrees) applied to each bullet.":"\u5E94\u7528\u4E8E\u6BCF\u9897\u5B50\u5F39\u7684\u89D2\u5EA6\u5DEE\u5F02\uFF08\u4EE5\u5EA6\u4E3A\u5355\u4F4D\uFF09\u3002","the angle variance":"\u89D2\u5EA6\u5DEE\u5F02","Angle variance (degrees) Range: 0 to 180":"\u89D2\u5EA6\u5DEE\u5F02\uFF08\u5EA6\uFF09\u8303\u56F4\uFF1A0\u81F3180","Change the angle variance (in degrees) applied to each bullet.":"\u66F4\u6539\u61C9\u7528\u65BC\u6BCF\u9846\u5B50\u5F48\u7684\u89D2\u5EA6\u5DEE\u7570\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09","Set angle variance (deprecated)":"\u8BBE\u7F6E\u89D2\u5EA6\u5DEE\u5F02\uFF08\u5DF2\u5F03\u7528\uFF09","Set angle variance of _PARAM0_ to _PARAM2_ degrees":"\u5C07\u89D2\u5EA6\u5DEE\u7570\u8A2D\u7F6E\u70BA_PARAM2_\u5EA6","the bullet speed variance (pixels per second) applied to each bullet.":"\u61C9\u7528\u65BC\u6BCF\u9846\u5B50\u5F48\u7684\u5B50\u5F48\u901F\u5EA6\u5DEE\u7570\uFF08\u6BCF\u79D2\u50CF\u7D20\uFF09\u3002","the bullet speed variance":"\u5B50\u5F48\u901F\u5EA6\u5DEE\u7570","Change the speed variance (pixels per second) applied to each bullet.":"\u66F4\u6539\u61C9\u7528\u65BC\u6BCF\u9846\u5B50\u5F48\u7684\u901F\u5EA6\u5DEE\u7570\uFF08\u6BCF\u79D2\u50CF\u7D20\uFF09\u3002","Set bullet speed variance (deprecated)":"\u8A2D\u7F6E\u5B50\u5F48\u901F\u5EA6\u5DEE\u7570\uFF08\u5DF2\u68C4\u7528\uFF09","Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second":"\u5C07\u5B50\u5F48\u901F\u5EA6\u5DEE\u7570\u8A2D\u7F6E\u70BA_PARAM2_\u50CF\u7D20\u6BCF\u79D2","the number of bullets shot every time the \"fire bullet\" action is used.":"\u6BCF\u6B21\u4F7F\u7528\u201C\u767C\u5C04\u5B50\u5F48\u201D\u52D5\u4F5C\u5C04\u64CA\u7684\u5B50\u5F48\u6578\u3002","Bullets per shot":"\u6BCF\u6B21\u5C04\u64CA\u7684\u5B50\u5F48\u6578","the number of bullets per shot":"\u6BCF\u6B21\u5C04\u64CA\u7684\u5B50\u5F48\u6578","Bullets":"\u5B50\u5F48","Change the number of bullets shot every time the \"fire bullet\" action is used.":"\u66F4\u6539\u6BCF\u6B21\u4F7F\u7528\u201C\u767C\u5C04\u5B50\u5F48\u201D\u52D5\u4F5C\u5C04\u64CA\u7684\u5B50\u5F48\u6578\u3002","Set number of bullets per shot (deprecated)":"\u8A2D\u7F6E\u6BCF\u6B21\u5C04\u64CA\u7684\u5B50\u5F48\u6578\uFF08\u5DF2\u68C4\u7528\uFF09","Set number of bullets per shot of _PARAM0_ to _PARAM2_":"\u5C07\u6BCF\u6B21\u5C04\u64CA\u7684\u5B50\u5F48\u6578\u8A2D\u7F6E\u70BA_PARAM2_","Change the layer that bullets are created on.":"\u66F4\u6539\u5275\u5EFA\u5B50\u5F48\u7684\u5716\u5C64\u3002","Set bullet layer":"\u8A2D\u7F6E\u5B50\u5F48\u5716\u5C64","Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_":"\u5C07\u7528\u65BC\u5275\u5EFA\u7531_PARAM0_\u767C\u5C04\u7684\u5B50\u5F48\u7684\u5716\u5C64\u8A2D\u7F6E\u70BA_PARAM2_","Enable bullet rotation.":"\u555F\u7528\u5B50\u5F48\u65CB\u8F49\u3002","Enable (or disable) bullet rotation":"\u555F\u7528\uFF08\u6216\u505C\u7528\uFF09\u5B50\u5F48\u65CB\u8F49","Enable bullet rotation on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u4E0A\u555F\u7528\u5B50\u5F48\u65CB\u8F49\uFF1A _PARAM2_","Rotate bullet to match trajetory":"\u65CB\u8F49\u5B50\u5F48\u4EE5\u5339\u914D\u8ECC\u8DE1","Enable unlimited ammo.":"\u555F\u7528\u7121\u9650\u5B50\u5F48\u3002","Enable (or disable) unlimited ammo":"\u555F\u7528\uFF08\u6216\u505C\u7528\uFF09\u7121\u9650\u5B50\u5F48","Enable unlimited ammo on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u4E0A\u555F\u7528\u7121\u9650\u5B50\u5F48\uFF1A _PARAM2_","the firing cooldown (in seconds) also known as rate of fire.":"\u5C04\u64CA\u51B7\u537B\u6642\u9593\uFF08\u79D2\uFF09\uFF0C\u4E5F\u7A31\u70BA\u5C04\u901F\u3002","the firing cooldown":"\u5C04\u64CA\u51B7\u537B\u6642\u9593","Cooldown in seconds":"\u51B7\u537B\u6642\u9593\uFF08\u79D2\uFF09","Change the firing cooldown, which changes the rate of fire.":"\u66F4\u6539\u5C04\u64CA\u51B7\u537B\u6642\u9593\uFF0C\u9019\u5C07\u6539\u8B8A\u5C04\u901F\u3002","Set firing cooldown (deprecated)":"\u8A2D\u7F6E\u5C04\u64CA\u51B7\u537B\u6642\u9593\uFF08\u5DF2\u68C4\u7528\uFF09","Set the fire rate of _PARAM0_ to _PARAM2_ seconds":"\u5C07\u5C04\u901F\u8A2D\u7F6E\u70BA_PARAM2_\u79D2","the reload duration (in seconds).":"\u91CD\u65B0\u88DD\u586B\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09\u3002","Reload duration":"\u91CD\u65B0\u88DD\u586B\u6301\u7E8C\u6642\u9593","the reload duration":"\u91CD\u65B0\u88DD\u586B\u6301\u7E8C\u6642\u9593","Reload duration (seconds)":"\u91CD\u65B0\u88DD\u586B\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09","Change the duration to reload ammo.":"\u66F4\u6539\u88DD\u586B\u5F48\u85E5\u7684\u6301\u7E8C\u6642\u9593\u3002","Set reload duration (deprecated)":"\u8A2D\u7F6E\u91CD\u65B0\u52A0\u8F09\u6301\u7E8C\u6642\u9593\uFF08\u5DF2\u68C4\u7528\uFF09","Set the reload duration of _PARAM0_ to _PARAM2_ seconds":"\u5C07_PARAM0_\u7684\u91CD\u65B0\u52A0\u8F09\u6301\u7E8C\u6642\u9593\u8A2D\u7F6E\u70BA_PARAM2_\u79D2","the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.":"\u904E\u71B1\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002\u7576\u5C0D\u8C61\u904E\u71B1\u6642\uFF0C\u5B83\u5728\u9019\u6BB5\u6642\u9593\u5167\u7121\u6CD5\u9032\u884C\u5C04\u64CA\u3002","the overheat duration":"\u904E\u71B1\u6301\u7E8C\u6642\u9593","Overheat duration (seconds)":"\u904E\u71B1\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09","Change the duration after becoming overheated.":"\u6539\u8B8A\u904E\u71B1\u5F8C\u7684\u6301\u7E8C\u6642\u9593\u3002","Set overheat duration (deprecated)":"\u8A2D\u7F6E\u904E\u71B1\u6301\u7E8C\u6642\u9593\uFF08\u5DF2\u68C4\u7528\uFF09","Set the overheat duration of _PARAM0_ to _PARAM2_ seconds":"\u5C07_PARAM0_\u7684\u904E\u71B1\u6301\u7E8C\u6642\u9593\u8A2D\u7F6E\u70BA_PARAM2_\u79D2","the ammo quantity.":"\u5F48\u85E5\u6578\u91CF\u3002","Ammo quantity":"\u5F48\u85E5\u6578\u91CF","the ammo quantity":"\u5F48\u85E5\u6578\u91CF","Change the quantity of ammo.":"\u66F4\u6539\u5F48\u85E5\u6578\u91CF\u3002","Set ammo quantity (deprecated)":"\u8A2D\u7F6E\u5F48\u85E5\u6578\u91CF\uFF08\u5DF2\u68C4\u7528\uFF09","Set the ammo quantity of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u5F48\u85E5\u6578\u91CF\u8A2D\u7F6E\u70BA_PARAM2_","the heat increase per shot.":"\u6BCF\u6B21\u5C04\u64CA\u7684\u71B1\u91CF\u589E\u52A0\u3002","Heat increase per shot":"\u6BCF\u6B21\u5C04\u64CA\u7684\u71B1\u91CF\u589E\u52A0","the heat increase per shot":"\u6BCF\u6B21\u5C04\u64CA\u7684\u71B1\u91CF\u589E\u52A0","Heat increase per shot (Range: 0 to 1)":"\u6BCF\u6B21\u5C04\u64CA\u7684\u71B1\u91CF\u589E\u52A0\uFF08\u7BC4\u570D\uFF1A0\u81F31\uFF09","Change the heat increase per shot.":"\u66F4\u6539\u6BCF\u6B21\u5C04\u64CA\u7684\u71B1\u91CF\u589E\u52A0\u3002","Set heat increase per shot (deprecated)":"\u8A2D\u7F6E\u6BCF\u6B21\u5C04\u64CA\u7684\u71B1\u91CF\u589E\u52A0\uFF08\u5DF2\u68C4\u7528\uFF09","Set the heat increase of _PARAM0_ to _PARAM2_ per shot":"\u5C07_PARAM0_\u7684\u71B1\u91CF\u589E\u52A0\u8A2D\u7F6E\u70BA\u6BCF\u6B21\u5C04\u64CA_PARAM2_","the max ammo.":"\u6700\u5927\u5F48\u85E5\u3002","the max ammo":"\u6700\u5927\u5F48\u85E5","Change the max ammo.":"\u66F4\u6539\u6700\u5927\u5F48\u85E5\u3002","Set max ammo (deprecated)":"\u8A2D\u7F6E\u6700\u5927\u5F48\u85E5\uFF08\u5DF2\u68C4\u7528\uFF09","Set the max ammo of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u6700\u5927\u5F48\u85E5\u8A2D\u7F6E\u70BA_PARAM2_","Reset total shots fired.":"\u91CD\u7F6E\u767C\u5C04\u7684\u7E3D\u6B21\u6578\u3002","Reset total shots fired":"\u91CD\u7F6E\u767C\u5C04\u7684\u7E3D\u6B21\u6578","Reset total shots fired by _PARAM0_":"\u91CD\u7F6E_PARAM0_\u767C\u5C04\u7684\u7E3D\u6B21\u6578","Reset total bullets created.":"\u91CD\u7F6E\u7684\u7E3D\u5B50\u5F48\u6578\u3002","Reset total bullets created":"\u91CD\u7F6E\u7684\u7E3D\u5B50\u5F48\u6578","Reset total bullets created by _PARAM0_":"\u91CD\u7F6E_PARAM0_\u5275\u5EFA\u7684\u7E3D\u5B50\u5F48\u6578","Reset total reloads completed.":"\u91CD\u7F6E\u5B8C\u6210\u7684\u7E3D\u91CD\u65B0\u52A0\u8F09\u6B21\u6578\u3002","Reset total reloads completed":"\u91CD\u7F6E\u5B8C\u6210\u7684\u7E3D\u91CD\u65B0\u52A0\u8F09\u6B21\u6578","Reset total reloads completed by _PARAM0_":"\u91CD\u7F6E_PARAM0_\u5B8C\u6210\u7684\u7E3D\u91CD\u65B0\u52A0\u8F09\u6B21\u6578","the number of shots per reload.":"\u6BCF\u6B21\u91CD\u65B0\u52A0\u8F09\u7684\u5B50\u5F48\u6578\u3002","the shots per reload":"\u6BCF\u6B21\u88DD\u5F48\u7684\u5C04\u64CA\u6578","Change the number of shots per reload.":"\u66F4\u6539\u6BCF\u6B21\u88DD\u5F48\u7684\u5C04\u64CA\u6578\u3002","Set shots per reload (deprecated)":"\u8A2D\u7F6E\u6BCF\u6B21\u88DD\u5F48\u7684\u5C04\u64CA\u6578\uFF08\u5DF2\u68C4\u7528\uFF09","Set the shots per reload of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u6BCF\u6B21\u88DD\u5F48\u5C04\u64CA\u6578\u8A2D\u7F6E\u70BA_PARAM2_","Enable (or disable) automatic reloading.":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52D5\u88DD\u5F48\u3002","Enable (or disable) automatic reloading":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52D5\u88DD\u5F48","Enable automatic reloading on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u4E0A\u555F\u7528\u81EA\u52D5\u88DD\u5F48\uFF1A_PARAM2_","Enable automatic reloading":"\u555F\u7528\u81EA\u52D5\u88DD\u5F48","the linear cooling rate (per second).":"\u6BCF\u79D2\u7684\u7DDA\u6027\u51B7\u537B\u901F\u5EA6\u3002","Linear cooling rate":"\u7DDA\u6027\u51B7\u537B\u901F\u7387","the linear cooling rate":"\u7DDA\u6027\u51B7\u537B\u901F\u5EA6","Heat cooling rate (per second)":"\u71B1\u51B7\u537B\u901F\u7387\uFF08\u6BCF\u79D2\uFF09","Change the linear rate of cooling.":"\u66F4\u6539\u7DDA\u6027\u51B7\u537B\u901F\u7387\u3002","Set linear cooling rate (deprecated)":"\u8A2D\u7F6E\u7DDA\u6027\u51B7\u537B\u901F\u7387\uFF08\u5DF2\u68C4\u7528\uFF09","Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second":"\u8A2D\u5B9A_PARAM0_\u7684\u7DDA\u6027\u51B7\u537B\u901F\u5EA6\u70BA\u6BCF\u79D2_PARAM2_","the exponential cooling rate, per second.":"\u6BCF\u79D2\u7684\u6307\u6578\u51B7\u537B\u901F\u7387\u3002","Exponential cooling rate":"\u6307\u6578\u51B7\u537B\u901F\u7387","the exponential cooling rate":"\u6307\u6578\u51B7\u537B\u901F\u7387","Change the exponential rate of cooling.":"\u4FEE\u6539\u6307\u6578\u51B7\u537B\u901F\u7387\u3002","Set exponential cooling rate (deprecated)":"\u8A2D\u7F6E\u6307\u6578\u51B7\u537B\u901F\u7387\uFF08\u5DF2\u68C4\u7528\uFF09","Set the exponential cooling rate of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u6307\u6578\u51B7\u537B\u901F\u7387\u8A2D\u7F6E\u70BA_PARAM2_","Increase ammo quantity.":"\u589E\u52A0\u5F48\u85E5\u6578\u91CF\u3002","Increase ammo":"\u589E\u52A0\u5F48\u85E5","Increase ammo of _PARAM0_ by _PARAM2_ shots":"_PARAM0_\u7684\u5F48\u85E5\u589E\u52A0_PARAM2_\u767C\u5B50\u5F48","Ammo gained":"\u7372\u5F97\u5F48\u85E5","Layer that bullets are created on.":"\u5B50\u5F48\u5275\u5EFA\u7684\u5C64\u3002","Bullet layer":"\u5B50\u5F48\u5C64","the heat level (range: 0 to 1).":"\u71B1\u91CF\u6C34\u5E73\uFF08\u7BC4\u570D\uFF1A0\u81F31\uFF09\u3002","Heat level":"\u71B1\u91CF\u6C34\u5E73","the heat level":"\u71B1\u91CF\u6C34\u5E73","Total shots fired (multi-bullet shots are considered one shot).":"\u7E3D\u767C\u5C04\u6578\uFF08\u591A\u5B50\u5F48\u767C\u5C04\u88AB\u8996\u70BA\u4E00\u767C\uFF09\u3002","Shots fired":"\u5DF2\u767C\u5C04\u7684\u5B50\u5F48","Total bullets created.":"\u5DF2\u88FD\u4F5C\u7684\u7E3D\u5B50\u5F48\u3002","Bullets created":"\u5DF2\u5275\u5EFA\u5B50\u5F48","Reloads completed.":"\u91CD\u65B0\u88DD\u586B\u5B8C\u6210\u3002","Reloads completed":"\u91CD\u65B0\u88DD\u586B\u5B8C\u6210","the remaining shots before the next reload is required.":"\u5728\u4E0B\u4E00\u6B21\u91CD\u65B0\u88DD\u586B\u6240\u9700\u4E4B\u524D\u7684\u5269\u9918\u5C04\u64CA\u6578\u3002","the remaining shots (before the next reload)":"\uFF08\u4E0B\u4E00\u6B21\u91CD\u65B0\u88DD\u586B\u4E4B\u524D\u7684\u5269\u9918\u5C04\u64CA\u6578\uFF09","the remaining duration before the cooldown will permit a bullet to be fired, in seconds.":"\u5728\u51B7\u537B\u671F\u9593\u5141\u8A31\u5C04\u64CA\u7684\u5269\u9918\u6642\u9593\uFF0C\u4EE5\u79D2\u70BA\u55AE\u4F4D\u3002","Duration before cooldown end":"\u51B7\u537B\u7D50\u675F\u524D\u7684\u6301\u7E8C\u6642\u9593","the remaining duration before the cooldown end":"\u5728\u51B7\u537B\u7D50\u675F\u4E4B\u524D\u7684\u5269\u9918\u6642\u9593","the remaining duration before the overheat penalty ends, in seconds.":"\u5728\u904E\u71B1\u61F2\u7F70\u7D50\u675F\u4E4B\u524D\u7684\u5269\u9918\u6642\u9593\uFF0C\u4EE5\u79D2\u70BA\u55AE\u4F4D\u3002","Duration before overheat end":"\u904E\u71B1\u7D50\u675F\u524D\u7684\u6301\u7E8C\u6642\u9593","the remaining duration before the overheat end":"\u5728\u904E\u71B1\u7D50\u675F\u4E4B\u524D\u7684\u5269\u9918\u6642\u9593","the remaining duration before the reload finishes, in seconds.":"\u5728\u91CD\u65B0\u88DD\u586B\u5B8C\u6210\u4E4B\u524D\u7684\u5269\u9918\u6642\u9593\uFF0C\u4EE5\u79D2\u70BA\u55AE\u4F4D\u3002","Duration before the reload finishes":"\u91CD\u65B0\u88DD\u586B\u5B8C\u6210\u524D\u7684\u6301\u7E8C\u6642\u9593","the remaining duration before the reload finishes":"\u5728\u91CD\u65B0\u88DD\u586B\u5B8C\u6210\u4E4B\u524D\u7684\u5269\u9918\u6642\u9593","Check if object is currently performing an ammo reload.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u6B63\u5728\u9032\u884C\u5F48\u85E5\u91CD\u65B0\u88DD\u586B\u3002","Is ammo reloading in progress":"\u5F48\u85E5\u91CD\u65B0\u88DD\u586B\u662F\u5426\u6B63\u5728\u9032\u884C","_PARAM0_ is reloading ammo":"_PARAM0_ \u6B63\u5728\u91CD\u65B0\u88DD\u586B\u5F48\u85E5","Check if object is ready to shoot.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u6E96\u5099\u597D\u5C04\u64CA\u3002","Is ready to shoot":"\u6E96\u5099\u597D\u5C04\u64CA","_PARAM0_ is ready to shoot":"_PARAM0_ \u5DF2\u6E96\u5099\u597D\u5C04\u64CA","Check if automatic reloading is enabled.":"\u6AA2\u67E5\u662F\u5426\u555F\u7528\u4E86\u81EA\u52D5\u91CD\u65B0\u88DD\u586B\u3002","Is automatic reloading enabled":"\u81EA\u52D5\u91CD\u65B0\u88DD\u586B\u662F\u5426\u5DF2\u555F\u7528","Automatic reloading is enabled on_PARAM0_":"\u81EA\u52D5\u91CD\u65B0\u88DD\u586B\u5DF2\u555F\u7528\u65BC_PARAM0_","Check if ammo is unlimited.":"\u6AA2\u67E5\u5F48\u85E5\u662F\u5426\u70BA\u7121\u9650\u3002","Is ammo unlimited":"\u5F48\u85E5\u662F\u5426\u70BA\u7121\u9650","_PARAM0_ has unlimited ammo":"_PARAM0_ \u5177\u6709\u7121\u9650\u5F48\u85E5","Check if object has no ammo available.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u6C92\u6709\u53EF\u7528\u5F48\u85E5\u3002","Is out of ammo":"\u6C92\u6709\u5F48\u85E5","_PARAM0_ is out of ammo":"_PARAM0_ \u6C92\u6709\u5F48\u85E5","Check if object needs to reload ammo.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u9700\u8981\u91CD\u65B0\u88DD\u586B\u5F48\u85E5\u3002","Is a reload needed":"\u662F\u5426\u9700\u8981\u91CD\u65B0\u88DD\u586B","_PARAM0_ needs to reload ammo":"_PARAM0_ \u9700\u8981\u91CD\u65B0\u88DD\u586B\u5F48\u85E5","Check if object is overheated.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u904E\u71B1\u3002","Is overheated":"\u662F\u5426\u904E\u71B1","_PARAM0_ is overheated":"_PARAM0_ \u904E\u71B1\u4E86","Check if firing cooldown is active.":"\u6AA2\u67E5\u662F\u5426\u6709\u958B\u706B\u51B7\u537B\u6642\u9593\u3002","Is firing cooldown active":"\u958B\u706B\u51B7\u537B\u662F\u5426\u6709\u6548","Firing cooldown is active on _PARAM0_":"\u5728_PARAM0_ \u4E0A\u958B\u706B\u51B7\u537B\u6709\u6548","First person 3D camera":"\u7B2C\u4E00\u4EBA\u7A313D\u76F8\u6A5F","Move the camera to look though objects eyes.":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u5230\u51DD\u8996\u7269\u9AD4\u7684\u4F4D\u7F6E\u3002","Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","Look through object eyes":"\u67E5\u770B\u7269\u9AD4\u7684\u8996\u89D2","Move the camera of _PARAM2_ to look though _PARAM1_ eyes":"\u5C07_PARAM2_\u7684\u76F8\u6A5F\u79FB\u52D5\u5230_PARAM1_\u7684\u4F4D\u7F6E","Move the camera of _PARAM3_ to look though _PARAM1_ eyes":"Move the camera of _PARAM3_ to look though _PARAM1_ eyes","3D Object":"3D Object","Flash object":"\u9583\u5149\u7269\u9AD4","Make an object flash visibility (blink), color tint, object effect, or opacity (fade).":"\u4F7F\u4E00\u500B\u7269\u9AD4\u9583\u720D\u53EF\u898B\u6027\uFF08\u9583\u720D\uFF09\u3001\u984F\u8272\u8272\u8ABF\u3001\u7269\u9AD4\u6548\u679C\u6216\u4E0D\u900F\u660E\u5EA6\uFF08\u6DE1\u5165\uFF09\u3002","Color tint applied to an object.":"\u61C9\u7528\u65BC\u7269\u9AD4\u7684\u984F\u8272\u8272\u8ABF\u3002","Color tint applied to an object":"\u61C9\u7528\u65BC\u7269\u9AD4\u7684\u984F\u8272\u8272\u8ABF","Color tint applied to _PARAM1_":"_PARAM1_\u7684\u984F\u8272\u8272\u8ABF","Check if a color tint is applied to an object.":"\u6AA2\u67E5\u662F\u5426\u61C9\u7528\u984F\u8272\u8272\u8ABF\u65BC\u4E00\u500B\u7269\u9AD4\u3002","Is a color tint applied to an object":"\u662F\u5426\u61C9\u7528\u984F\u8272\u8272\u8ABF\u65BC\u4E00\u500B\u7269\u9AD4","_PARAM1_ is color tinted":"_PARAM1_\u88AB\u5857\u4E0A\u984F\u8272\u8272\u8ABF","Toggle color tint between the starting tint and a given value.":"\u5728\u521D\u59CB\u8272\u8ABF\u548C\u7D66\u5B9A\u503C\u4E4B\u9593\u5207\u63DB\u984F\u8272\u8272\u8ABF\u3002","Toggle a color tint":"\u5207\u63DB\u984F\u8272\u8272\u8ABF","Toggle color tint _PARAM2_ on _PARAM1_":"\u5728_PARAM1_\u4E0A\u5207\u63DB\u984F\u8272\u8272\u8ABF_PARAM2_","Color tint":"\u984F\u8272\u8272\u8ABF","Toggle object visibility.":"\u5207\u63DB\u7269\u9AD4\u53EF\u898B\u6027\u3002","Toggle object visibility":"\u5207\u63DB\u7269\u9AD4\u53EF\u898B\u6027","Toggle visibility of _PARAM1_":"\u5207\u63DB_PARAM1_\u7684\u53EF\u898B\u6027","Make the object flash (blink) for a period of time so it alternates between visible and invisible.":"\u4F7F\u7269\u9AD4\u9583\u720D\uFF08\u9583\u720D\uFF09\uFF0C\u5728\u4E00\u6BB5\u6642\u9593\u5167\u4EA4\u66FF\u53EF\u898B\u548C\u4E0D\u53EF\u898B\u3002","Flash visibility (blink)":"\u9583\u720D\u53EF\u898B\u6027\uFF08\u9583\u720D\uFF09","Half period":"\u534A\u5468\u671F","Time that the object is invisible":"\u7269\u9AD4\u4E0D\u53EF\u898B\u7684\u6642\u9593","Flash duration":"\u9583\u720D\u6301\u7E8C\u6642\u9593","Use \"0\" to keep flashing until stopped":"\u4F7F\u7528 \"0\" \u7E7C\u7E8C\u9583\u720D\uFF0C\u76F4\u5230\u505C\u6B62","Make an object flash (blink) visibility for a period of time.":"\u4F7F\u7269\u4EF6\u9583\u720D\uFF08\u9583\u5149\uFF09\u53EF\u898B\u4E00\u6BB5\u6642\u9593\u3002","Make _PARAM0_ flash (blink) for _PARAM2_ seconds":"\u4F7F_PARAM0_ \u9583\u720D\uFF08\u9583\u5149\uFF09\u6301\u7E8C_PARAM2_ \u79D2","Duration of the flashing, in seconds":"\u9583\u720D\u7684\u6301\u7E8C\u6642\u9593\uFF0C\u4EE5\u79D2\u70BA\u55AE\u4F4D","Use \"0\" to keep flashing until stopped.":"\u4F7F\u7528 \"0\" \u4F7F\u5176\u9583\u720D\u76F4\u5230\u505C\u6B62\u3002","Check if an object is flashing visibility.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728\u9583\u720D\u53EF\u898B\u6027\u3002","Is object flashing visibility":"\u7269\u4EF6\u662F\u5426\u5728\u9583\u720D\u53EF\u898B\u6027","_PARAM0_ is flashing":"_PARAM0_ \u5728\u9583\u720D","Stop flashing visibility (blink) of an object.":"\u505C\u6B62\u7269\u4EF6\u7684\u9583\u720D\u53EF\u898B\u6027\uFF08\u9583\u5149\uFF09\u3002","Stop flashing visibility (blink)":"\u505C\u6B62\u9583\u720D\u53EF\u898B\u6027\uFF08\u9583\u5149\uFF09","Stop flashing visibility of _PARAM0_":"\u505C\u6B62_PARAM0_ \u7684\u9583\u720D\u53EF\u898B\u6027","the half period of the object (time the object is invisible).":"\u7269\u4EF6\u7684\u534A\u9031\u671F\uFF08\u7269\u4EF6\u4E0D\u53EF\u898B\u7684\u6642\u9593\uFF09\u3002","the half period (time the object is invisible)":"\u534A\u9031\u671F\uFF08\u7269\u4EF6\u4E0D\u53EF\u898B\u7684\u6642\u9593\uFF09","Make an object flash a color tint for a period of time.":"\u4F7F\u5C0D\u8C61\u9583\u720D\u4E00\u6BB5\u6642\u9593\u7684\u984F\u8272\u8272\u8ABF\u3002","Flash color tint":"\u9583\u720D\u984F\u8272\u8272\u8ABF","Time between flashes":"\u9583\u720D\u9593\u9694\u6642\u9593","Tint color":"\u8272\u8ABF\u984F\u8272","Flash a color tint":"\u9583\u720D\u984F\u8272\u6FFE\u8272","Make _PARAM0_ flash the color tint _PARAM3_ for _PARAM2_ seconds":"\u4F7F_PARAM0_ \u5728_PARAM2_ \u79D2\u5167\u9583\u720D\u984F\u8272\u6FFE\u8272_PARAM3_","Check if an object is flashing a color tint.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728\u9583\u720D\u984F\u8272\u6FFE\u8272\u3002","Is object flashing a color tint":"\u7269\u4EF6\u662F\u5426\u5728\u9583\u720D\u984F\u8272\u6FFE\u8272","_PARAM0_ is flashing a color tint":"_PARAM0_ \u5728\u9583\u720D\u984F\u8272\u6FFE\u8272","Stop flashing a color tint on an object.":"\u505C\u6B62\u7269\u4EF6\u7684\u9583\u720D\u984F\u8272\u6FFE\u8272\u3002","Stop flashing color tint":"\u505C\u6B62\u9583\u720D\u984F\u8272\u6FFE\u8272","Stop flashing color tint _PARAM0_":"\u505C\u6B62\u9583\u720D\u984F\u8272\u6FFE\u8272_PARAM0_","the half period (time between flashes) of the object.":"\u7269\u4EF6\u7684\u534A\u9031\u671F\uFF08\u9583\u720D\u4E4B\u9593\u7684\u6642\u9593\uFF09\u3002","the half period (time between flashes)":"\u534A\u9031\u671F\uFF08\u9583\u720D\u4E4B\u9593\u7684\u6642\u9593\uFF09","Flash opacity smoothly (fade) in a repeating loop.":"\u5E73\u6ED1\u9583\u720D\u4E0D\u900F\u660E\u5EA6\uFF08\u6DE1\u5165\u6DE1\u51FA\uFF09\u91CD\u8907\u5FAA\u74B0\u3002","Flash opacity smothly (fade)":"\u5E73\u6ED1\u9583\u720D\u4E0D\u900F\u660E\u5EA6\uFF08\u6DE1\u5165\u6DE1\u51FA\uFF09","Opacity capability":"\u4E0D\u900F\u660E\u5EA6\u80FD\u529B","Tween Behavior (required)":"\u7DE9\u52D5\u884C\u70BA\uFF08\u5FC5\u9700\uFF09","Target opacity (Range: 0 - 255)":"\u76EE\u6A19\u4E0D\u900F\u660E\u5EA6\uFF08\u7BC4\u570D\uFF1A0 - 255\uFF09","Opacity will fade between the starting value and a target value":"\u4E0D\u900F\u660E\u5EA6\u5C07\u5728\u8D77\u59CB\u503C\u548C\u76EE\u6A19\u503C\u4E4B\u9593\u6DE1\u5165\u6DE1\u51FA","Starting opacity":"\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6","Make an object flash opacity smoothly (fade) in a repeating loop.":"\u4F7F\u7269\u4EF6\u9583\u720D\u4E0D\u900F\u660E\u5EA6\u5E73\u6ED1\uFF08\u6DE1\u5165\u6DE1\u51FA\uFF09\u5728\u5FAA\u74B0\u4E2D\u3002","Flash the opacity (fade)":"\u9583\u720D\u4E0D\u900F\u660E\u5EA6\uFF08\u6DE1\u5165\u6DE1\u51FA\uFF09","Make _PARAM0_ flash opacity smoothly to _PARAM4_ in a loop for _PARAM3_ seconds":"\u4F7F_PARAM0_ \u5728\u5FAA\u74B0\u4E2D\u5E73\u6ED1\u9583\u720D\u4E0D\u900F\u660E\u5EA6\u81F3_PARAM4_ \u5728_PARAM3_ \u79D2\u5167","Target opacity":"\u76EE\u6A19\u4E0D\u900F\u660E\u5EA6","Check if an object is flashing opacity.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728\u9583\u720D\u4E0D\u900F\u660E\u5EA6\u3002","Is object flashing opacity":"\u7269\u4EF6\u662F\u5426\u5728\u9583\u720D\u4E0D\u900F\u660E\u5EA6","_PARAM0_ is flashing opacity":"_PARAM0_ \u5728\u9583\u720D\u4E0D\u900F\u660E\u5EA6","Stop flashing opacity of an object.":"\u505C\u6B62\u7269\u4EF6\u7684\u9583\u720D\u4E0D\u900F\u660E\u5EA6\u3002","Stop flashing opacity":"\u505C\u6B62\u9583\u720D\u4E0D\u900F\u660E\u5EA6","Stop flashing opacity of _PARAM0_":"\u505C\u6B62_PARAM0_ \u7684\u9583\u720D\u4E0D\u900F\u660E\u5EA6","Make the object flash an effect for a period of time.":"\u4F7F\u5C0D\u8C61\u9583\u720D\u4E00\u6BB5\u6642\u9593\u7684\u6548\u679C\u3002","Flash effect":"\u9583\u720D\u6548\u679C","Name of effect":"\u6548\u679C\u540D\u7A31","Make an object flash an effect for a period of time.":"\u4F7F\u7269\u4EF6\u9583\u720D\u4E00\u500B\u6548\u679C\u4E00\u6BB5\u6642\u9593\u3002","Flash an effect":"\u9583\u720D\u4E00\u500B\u6548\u679C","Make _PARAM0_ flash the effect _PARAM3_ for _PARAM2_ seconds":"\u4F7F_PARAM0_ \u5728_PARAM2_ \u79D2\u5167\u9583\u720D\u6548\u679C_PARAM3_","Check if an object is flashing an effect.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728\u9583\u720D\u4E00\u500B\u6548\u679C\u3002","Is object flashing an effect":"\u7269\u4EF6\u662F\u5426\u5728\u9583\u720D\u4E00\u500B\u6548\u679C","_PARAM0_ is flashing an effect":"_PARAM0_ \u5728\u9583\u720D\u4E00\u500B\u6548\u679C","Stop flashing an effect of an object.":"\u505C\u6B62\u7269\u4EF6\u7684\u9583\u720D\u6548\u679C\u3002","Stop flashing an effect":"\u505C\u6B62\u9583\u720D\u6548\u679C","Stop flashing an effect on _PARAM0_":"\u505C\u6B62_PARAM0_ \u7684\u9583\u720D\u6548\u679C","Toggle an object effect.":"\u5207\u63DB\u7269\u4EF6\u6548\u679C\u3002","Toggle an object effect":"\u5207\u63DB\u7269\u4EF6\u6548\u679C","Toggle effect _PARAM2_ on _PARAM0_":"\u5728_PARAM0_ \u4E0A\u5207\u63DB\u6548\u679C_PARAM2_","Effect name to toggle":"\u5207\u63DB\u7684\u6548\u679C\u540D\u7A31","Flash layer":"\u9583\u5149\u5C64","Make a layer visible for a specified duration, and then hide the layer.":"\u4F7F\u4E00\u500B\u5716\u5C64\u53EF\u898B\u4E00\u6BB5\u6307\u5B9A\u7684\u6642\u9593\uFF0C\u7136\u5F8C\u96B1\u85CF\u8A72\u5716\u5C64\u3002","Make layer _PARAM1_ visible for _PARAM2_ seconds":"\u4F7F\u5716\u5C64 _PARAM1_ \u5728 _PARAM2_ \u79D2\u5167\u53EF\u898B","Flash and transition painter":"\u9583\u5149\u548C\u904E\u6E21\u7E6A\u5716\u5668","Paint transition effects with a plain color.":"\u4F7F\u7528\u7D14\u8272\u7E6A\u88FD\u904E\u6E21\u6548\u679C\u3002","Paint all over the screen a color for a period of time.":"\u5728\u4E00\u6BB5\u6642\u9593\u5167\u5728\u5C4F\u5E55\u4E0A\u5857\u62B9\u984F\u8272\u3002","Type of effect":"\u6548\u679C\u985E\u578B","Direction of transition":"\u904E\u6E21\u65B9\u5411","The maximum of the opacity only for flash":"\u50C5\u7528\u65BC\u9583\u720D\u7684\u4E0D\u900F\u660E\u5EA6\u6700\u5927\u503C","Paint Effect.":"\u756B\u6548\u679C\u3002","Paint Effect":"\u756B\u6548\u679C","Paint effect type _PARAM4_ of _PARAM0_ with direction _PARAM5_ and color _PARAM2_ for _PARAM3_ seconds":"\u4EE5\u65B9\u5411_PARAM5_ \u548C\u984F\u8272_PARAM2_ \u756B\u6548\u679C\u985E\u578B_PARAM4_ \u7684_PARAM0_\uFF0C\u6301\u7E8C\u6642\u9593\u70BA_PARAM3_ \u79D2","Direction transition":"\u65B9\u5411\u8F49\u8B8A","End opacity":"\u7D50\u675F\u4E0D\u900F\u660E\u5EA6","Paint effect ended.":"\u756B\u6548\u679C\u5DF2\u7D50\u675F\u3002","Paint effect ended":"\u756B\u6548\u679C\u5DF2\u7D50\u675F","When paint effect of _PARAM0_ ends":"\u7576\u7269\u4EF6_PARAM0_ \u7684\u756B\u6548\u679C\u7D50\u675F\u6642","Follow multiple 2D objects with the camera":"\u7528\u651D\u5F71\u6A5F\u8DDF\u96A8\u591A\u500B 2D \u7269\u4EF6","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen.":"\u66F4\u6539\u76F8\u6A5F\u7684\u7E2E\u653E\u548C\u4F4D\u7F6E\uFF0C\u4EE5\u4F7F\u5C0D\u8C61\uFF08\u6216\u5C0D\u8C61\u7D44\uFF09\u7684\u6240\u6709\u5BE6\u4F8B\u90FD\u986F\u793A\u5728\u5C4F\u5E55\u4E0A\u3002","Follow multiple objects with camera":"\u7528\u76F8\u6A5F\u8DDF\u96A8\u591A\u500B\u5C0D\u8C61","Move camera to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Max zoom: _PARAM4_. Move the camera at a speed of _PARAM5_":"\u79FB\u52D5\u76F8\u6A5F\u4EE5\u4F7F _PARAM1_ \u7684\u5BE6\u4F8B\u5728\u5C4F\u5E55\u4E0A\u3002\u6C34\u5E73\u548C\u5782\u76F4\u5404\u4F7F\u7528 _PARAM2_px_Margin\u3002\u6700\u5927\u7E2E\u653E\uFF1A_PARAM4_\u3002\u76F8\u673A\u4EE5 _PARAM5_ \u7684\u901F\u5EA6\u79FB\u52D5","Object (or Object group)":"\u5C0D\u8C61\uFF08\u6216\u5C0D\u8C61\u7D44\uFF09","Extra space on sides of screen":"\u5C4F\u5E55\u5169\u5074\u7684\u984D\u5916\u7A7A\u9593","Each side will include this buffer":"\u6BCF\u5074\u5C07\u5305\u542B\u6B64\u7DE9\u885D","Extra space on top and bottom of screen":"\u5C4F\u5E55\u4E0A\u4E0B\u7684\u984D\u5916\u7A7A\u9593","Maximum zoom level (Default: 1)":"\u6700\u5927\u7E2E\u653E\u7D1A\u5225\uFF08\u9ED8\u8A8D\u503C\uFF1A1\uFF09","Limit how far the camera will zoom in":"\u9650\u5236\u76F8\u673A\u7E2E\u653E\u7684\u7BC4\u570D","Camera move speed (Range: 0 to 1) (Default: 0.05)":"\u76F8\u6A5F\u79FB\u52D5\u901F\u5EA6\uFF08\u7BC4\u570D\uFF1A0 \u5230 1\uFF09\uFF08\u9ED8\u8A8D\uFF1A0.05\uFF09","Percent of distance to destination that will be travelled each frame (used by lerp function)":"\u76EE\u7684\u5730\u8DDD\u96E2\u7684\u767E\u5206\u6BD4\uFF0C\u6BCF\u5E40\u5C07\u88AB\u79FB\u52D5\uFF08\u7531lerp\u51FD\u6578\u4F7F\u7528\uFF09","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen. (Deprecated)":"\u66F4\u6539\u76F8\u6A5F\u7684\u7E2E\u653E\u548C\u4F4D\u7F6E\uFF0C\u4EE5\u4F7F\u5C0D\u8C61\uFF08\u6216\u5C0D\u8C61\u7D44\uFF09\u7684\u6240\u6709\u5BE6\u4F8B\u90FD\u5728\u5C4F\u5E55\u4E0A\u3002 \uFF08\u5DF2\u68C4\u7528\uFF09","Follow multiple objects with camera (Deprecated)":"\u4F7F\u7528\u76F8\u673A\u8DDF\u96A8\u591A\u500B\u5C0D\u8C61\uFF08\u5DF2\u68C4\u7528\uFF09","Move camera on layer _PARAM6_ to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Use a zoom between _PARAM4_ and _PARAM5_. Move the camera at a speed of _PARAM8_":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u5230\u5716\u5C64_PARAM6_\uFF0C\u4EE5\u4FBF\u4FDD\u6301\u5C4F\u5E55\u4E0A\u7684_PARAM1_\u5BE6\u4F8B\u3002\u6C34\u5E73\u548C\u5782\u76F4\u7684\u908A\u8DDD\u5206\u5225\u70BA_PARAM2_px\u548C_PARAM3_px\u3002\u4F7F\u7528_PARAM4_\u548C_PARAM5_\u4E4B\u9593\u7684\u7E2E\u653E\u3002\u4EE5_PARAM8_\u7684\u901F\u5EA6\u79FB\u52D5\u76F8\u6A5F\u3002","Minimum zoom level":"\u6700\u5C0F\u7E2E\u653E\u7D1A\u5225","Limit how far the camera will zoom OUT":"\u9650\u5236\u76F8\u6A5F\u7684\u6700\u5927\u7E2E\u653E","Limit how far the camera will zoom IN":"\u9650\u5236\u76F8\u6A5F\u7684\u6700\u5C0F\u7E2E\u653E","Use \"\" for base layer":"\u5C0D\u57FA\u672C\u5716\u5C64\u4F7F\u7528\"\"","Gamepads (controllers)":"\u904A\u6232\u624B\u67C4\uFF08\u63A7\u5236\u5668\uFF09","Add support for gamepads (or other controllers) to your game, giving access to information such as button presses, axis positions, trigger pressure, etc...":"\u70BA\u60A8\u7684\u904A\u6232\u6DFB\u52A0\u5C0D\u904A\u6232\u624B\u67C4\uFF08\u6216\u5176\u4ED6\u63A7\u5236\u5668\uFF09\u7684\u652F\u6301\uFF0C\u5F9E\u800C\u7372\u5F97\u6309\u9215\u6309\u4E0B\u3001\u8EF8\u4F4D\u7F6E\u3001\u6273\u6A5F\u58D3\u529B\u7B49\u4FE1\u606F\u2026\u2026","Accelerated speed":"\u52A0\u901F\u901F\u5EA6","Current speed":"\u7576\u524D\u901F\u5EA6","Targeted speed":"\u76EE\u6A19\u901F\u5EA6","Deceleration":"\u6E1B\u901F","Get the value of the pressure on a gamepad trigger.":"\u7372\u53D6\u904A\u6232\u624B\u67C4\u6273\u6A5F\u4E0A\u7684\u58D3\u529B\u503C\u3002","Pressure on a gamepad trigger":"\u904A\u6232\u624B\u67C4\u6273\u6A5F\u4E0A\u7684\u58D3\u529B\u503C","Player _PARAM1_ push axis _PARAM2_ to _PARAM3_":"\u73A9\u5BB6_PARAM1_\u6309\u8EF8_PARAM2_\u5230_PARAM3_","The gamepad identifier: 1, 2, 3 or 4":"\u624B\u67C4\u8B58\u5225\u865F\uFF1A1\u30012\u30013\u62164","Trigger button":"\u89F8\u767C\u6309\u9215","the force of gamepad stick (from 0 to 1).":"\u904A\u6232\u624B\u67C4\u6416\u687F\u7684\u529B\u91CF\uFF08\u5F9E0\u52301\uFF09\u3002","Stick force":"\u6416\u687F\u529B\u91CF","the gamepad _PARAM1_ _PARAM2_ stick force":"Gamepad _PARAM1_\u7684_PARAM2_\u6416\u687F\u529B\u91CF","Stick: \"Left\" or \"Right\"":"\u6416\u687F\uFF1A\u201C\u5DE6\u201D\u6216\u201C\u53F3\u201D","Get the rotation value of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"\u7372\u53D6\u904A\u6232\u624B\u67C4\u6416\u687F\u7684\u65CB\u8F49\u503C\u3002\n\u5982\u679C\u6B7B\u5340\u503C\u5F88\u9AD8\uFF0C\u89D2\u5EA6\u503C\u5C07\u88AB\u56DB\u6368\u4E94\u5165\u5230\u4E3B\u8EF8\uFF1A\u5DE6\uFF0C\u5DE6\uFF0C\u4E0A\u4E0B\u3002\n\u96F6\u6B7B\u5340\u503C\u5C07\u4F7F\u89D2\u5EA6\u503C\u5B8C\u5168\u81EA\u7531\u3002","Value of a stick rotation (deprecated)":"\u6416\u687F\u65CB\u8F49\u503C\uFF08\u4E0D\u5EFA\u8B70\u4F7F\u7528\uFF09","Return the angle of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"\u8FD4\u56DE\u904A\u6232\u624B\u67C4\u6416\u687F\u7684\u89D2\u5EA6\u503C\u3002\n\u5982\u679C\u6B7B\u5340\u503C\u5F88\u9AD8\uFF0C\u89D2\u5EA6\u503C\u5C07\u88AB\u56DB\u6368\u4E94\u5165\u5230\u4E3B\u8EF8\uFF1A\u5DE6\uFF0C\u5DE6\uFF0C\u4E0A\u4E0B\u3002\n\u96F6\u6B7B\u5340\u503C\u5C07\u4F7F\u89D2\u5EA6\u503C\u5B8C\u5168\u81EA\u7531\u3002","Stick angle":"\u6416\u687F\u89D2\u5EA6","Get the value of axis of a gamepad stick.":"\u7372\u53D6\u904A\u6232\u624B\u67C4\u6416\u687F\u7684X\u8EF8\u503C\u3002","Value of a gamepad axis (deprecated)":"\u904A\u6232\u624B\u67C4\u8EF8\u7684\u503C\uFF08\u4E0D\u5EFA\u8B70\u4F7F\u7528\uFF09","Direction":"\u65B9\u5411","Return the gamepad stick force on X axis (from -1 at the left to 1 at the right).":"\u8FD4\u56DE\u904A\u6232\u624B\u67C4\u6416\u687FX\u8EF8\u529B\u91CF\uFF08\u5F9E-1\u52301\uFF09\u3002","Stick X force":"X \u529B\u9053","Return the gamepad stick force on Y axis (from -1 at the top to 1 at the bottom).":"\u5728 Y \u8EF8\u4E0A\u8FD4\u56DE\u904A\u6232\u624B\u67C4\u6416\u687F\u529B\u91CF\uFF08\u5F9E\u9802\u90E8\u7684 -1 \u5230\u5E95\u90E8\u7684 1\uFF09\u3002","Stick Y force":"Y \u529B\u9053","Test if a button is released on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"\u6E2C\u8A66\u5728\u904A\u6232\u624B\u67C4\u4E0A\u6309\u9215\u662F\u5426\u91CB\u653E\u3002\u6309\u9215\u53EF\u4EE5\u662F\uFF1A\n* Xbox\uFF1A\"A\"\uFF0C\"B\"\uFF0C\"X\"\uFF0C\"Y\"\uFF0C\"LB\"\uFF0C\"RB\"\uFF0C\"LT\"\uFF0C\"RT\"\uFF0C\"BACK\"\uFF0C\"START\"\uFF0C\n* PS4\uFF1A\"CROSS\"\uFF0C\"SQUARE\"\uFF0C\"CIRCLE\"\uFF0C\"TRIANGLE\"\uFF0C\"L1\"\uFF0C\"L2\"\uFF0C\"R1\"\uFF0C\"R2\"\uFF0C\"SHARE\"\uFF0C\"OPTIONS\"\uFF0C\"PS_BUTTON\"\uFF0C\"CLICK_TOUCHPAD\"\uFF0C\n* \u5176\u4ED6\uFF1A\"UP\"\uFF0C\"DOWN\"\uFF0C\"LEFT\"\uFF0C\"RIGHT\"\uFF0C\"CLICK_STICK_LEFT\"\uFF0C\"CLICK_STICK_RIGHT\"\u3002","Gamepad button released":"\u904A\u6232\u624B\u67C4\u6309\u9215\u91CB\u653E","Button _PARAM2_ of gamepad _PARAM1_ is released":"_PARAM1_ \u7684\u904A\u6232\u624B\u67C4\u6309\u9215 _PARAM2_ \u5DF2\u91CB\u653E","Name of the button":"\u6309\u9215\u7684\u540D\u7A31","Check if a button was just pressed on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"\u6AA2\u67E5\u904A\u6232\u624B\u628A\u662F\u5426\u525B\u6309\u4E0B\u4E86\u4E00\u500B\u6309\u9215\u3002\u6309\u9215\u53EF\u4EE5\u662F\uFF1A\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* \u5176\u4ED6: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button just pressed":"\u904A\u6232\u624B\u628A\u6309\u9215\u525B\u88AB\u6309\u4E0B","Button _PARAM2_ of gamepad _PARAM1_ was just pressed":"\u904A\u6232\u624B\u628A _PARAM1_ \u7684\u6309\u9215 _PARAM2_ \u525B\u88AB\u6309\u4E0B","Return the index of the last pressed button of a gamepad.":"\u8FD4\u56DE\u904A\u6232\u624B\u67C4\u7684\u6700\u5F8C\u58D3\u4E0B\u6309\u9215\u7684\u7D22\u5F15\u3002","Last pressed button (id)":"\u6700\u5F8C\u6309\u58D3\u7684\u6309\u9215\uFF08ID\uFF09","Check if any button is pressed on a gamepad.":"\u6AA2\u67E5\u904A\u6232\u624B\u67C4\u4E0A\u662F\u5426\u6709\u6309\u9215\u88AB\u6309\u4E0B\u3002","Any gamepad button pressed":"\u4EFB\u4F55\u904A\u6232\u624B\u67C4\u6309\u9215\u88AB\u6309\u4E0B","Any button of gamepad _PARAM1_ is pressed":"\u88AB\u6309\u4E0B\u7684 _PARAM1_ \u904A\u6232\u624B\u67C4\u6309\u9215","Return the last button pressed. \nButtons for Xbox and PS4 can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Both: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"\u8FD4\u56DE\u6700\u5F8C\u6309\u58D3\u7684\u6309\u9215\u3002\nXbox \u548C PS4 \u4E0A\u7684\u6309\u9215\u53EF\u4EE5\u662F\uFF1A\n* Xbox\uFF1A\"A\"\uFF0C\"B\"\uFF0C\"X\"\uFF0C\"Y\"\uFF0C\"LB\"\uFF0C\"RB\"\uFF0C\"LT\"\uFF0C\"RT\"\uFF0C\"BACK\"\uFF0C\"START\"\uFF0C\n* PS4\uFF1A\"CROSS\"\uFF0C\"SQUARE\"\uFF0C\"CIRCLE\"\uFF0C\"TRIANGLE\"\uFF0C\"L1\"\uFF0C\"L2\"\uFF0C\"R1\"\uFF0C\"R2\"\uFF0C\"SHARE\"\uFF0C\"OPTIONS\"\uFF0C\"PS_BUTTON\"\uFF0C\"CLICK_TOUCHPAD\"\uFF0C\n* \u4E8C\u8005\u90FD\u6709\uFF1A\"UP\"\uFF0C\"DOWN\"\uFF0C\"LEFT\"\uFF0C\"RIGHT\"\uFF0C\"CLICK_STICK_LEFT\"\uFF0C\"CLICK_STICK_RIGHT\"","Last pressed button (string)":"\u6700\u5F8C\u58D3\u4E0B\u7684\u6309\u9215\uFF08\u5B57\u7B26\u4E32\uFF09","Button _PARAM2_ of gamepad _PARAM1_ is pressed":"_PARAM1_ \u7684\u6309\u9215 _PARAM2_ \u88AB\u6309\u4E0B","Controller type":"\u63A7\u5236\u5668\u985E\u578B","Return the number of gamepads.":"\u8FD4\u56DE\u904A\u6232\u624B\u67C4\u7684\u6578\u91CF\u3002","Gamepad count":"\u904A\u6232\u624B\u67C4\u6578\u91CF","Check if a button is pressed on a gamepad. \nButtons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"\u6AA2\u67E5\u904A\u6232\u624B\u67C4\u4E0A\u7684\u6309\u9215\u662F\u5426\u88AB\u6309\u4E0B\u3002\n\u6309\u9215\u53EF\u4EE5\u662F\uFF1A\n* Xbox\uFF1A\"A\"\uFF0C\"B\"\uFF0C\"X\"\uFF0C\"Y\"\uFF0C\"LB\"\uFF0C\"RB\"\uFF0C\"LT\"\uFF0C\"RT\"\uFF0C\"BACK\"\uFF0C\"START\"\uFF0C\n* PS4\uFF1A\"CROSS\"\uFF0C\"SQUARE\"\uFF0C\"CIRCLE\"\uFF0C\"TRIANGLE\"\uFF0C\"L1\"\uFF0C\"L2\"\uFF0C\"R1\"\uFF0C\"R2\"\uFF0C\"SHARE\"\uFF0C\"OPTIONS\"\uFF0C\"PS_BUTTON\"\uFF0C\"CLICK_TOUCHPAD\"\uFF0C\n* \u5176\u4ED6\uFF1A\"UP\"\uFF0C\"DOWN\"\uFF0C\"LEFT\"\uFF0C\"RIGHT\"\uFF0C\"CLICK_STICK_LEFT\"\uFF0C\"CLICK_STICK_RIGHT\"","Gamepad button pressed":"\u904A\u6232\u624B\u67C4\u6309\u9215\u88AB\u6309\u4E0B","Return the value of the deadzone applied to a gamepad sticks, between 0 and 1.":"\u8FD4\u56DE\u61C9\u7528\u5230\u904A\u6232\u624B\u67C4\u6416\u687F\u7684\u6B7B\u5340\u503C\uFF0C\u4ECB\u65BC 0 \u548C 1 \u4E4B\u9593\u3002","Gamepad deadzone for sticks":"\u904A\u6232\u624B\u628A\u6416\u687F\u6B7B\u5340","Set the deadzone for sticks of the gamepad. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved). Deadzone is between 0 and 1, and is by default 0.2.":"\u8A2D\u7F6E\u904A\u6232\u624B\u628A\u6416\u687F\u7684\u6B7B\u5340\u3002 \u6B7B\u5340\u662F\u4E00\u500B\u5340\u57DF\uFF0C\u5728\u9019\u500B\u5340\u57DF\u5167\u6416\u687F\u7684\u904B\u52D5\u4E0D\u6703\u88AB\u8003\u616E\u5728\u5167\uFF08\u76F8\u53CD\uFF0C\u6416\u687F\u5C07\u88AB\u8996\u70BA\u672A\u79FB\u52D5\uFF09\u3002 \u6B7B\u5340\u7684\u7BC4\u570D\u5728\u201C0\u201D\u548C\u201C1\u201D\u4E4B\u9593\uFF0C\u9ED8\u8A8D\u70BA\u201C0.2\u201D\u3002","Set gamepad deadzone for sticks":"\u8A2D\u7F6E\u904A\u6232\u624B\u628A\u6416\u687F\u7684\u6B7B\u5340","Set deadzone for sticks on gamepad: _PARAM1_ to _PARAM2_":"\u8A2D\u7F6E\u624B\u67C4\u4E0A\u6416\u687F\u7684\u6B7B\u5340\uFF1A\u5F9E_PARAM1_\u5230_PARAM2_","Deadzone for sticks, 0.2 by default (0 to 1)":"\u6416\u687F\u6B7B\u5340\uFF0C\u9ED8\u8A8D\u70BA0.2\uFF080\u52301\uFF09","Check if a stick of a gamepad is pushed in a given direction.":"\u6AA2\u67E5\u904A\u6232\u624B\u628A\u7684\u6416\u687F\u662F\u5426\u5411\u7279\u5B9A\u65B9\u5411\u63A8\u52D5\u3002","Gamepad stick pushed (axis)":"\u904A\u6232\u624B\u628A\u6416\u687F\u88AB\u6309\u4E0B\uFF08\u8EF8\uFF09","_PARAM2_ stick of gamepad _PARAM1_ is pushed in direction _PARAM3_":"_PARAM2_\u624B\u67C4\u7684_PARAM1_\u6416\u687F\u671D\u5411_PARAM3_\u88AB\u6309\u4E0B","Return the number of connected gamepads.":"\u8FD4\u56DE\u9023\u63A5\u7684\u904A\u6232\u624B\u67C4\u6578\u91CF\u3002","Connected gamepads count":"\u5DF2\u9023\u63A5\u7684\u904A\u6232\u624B\u628A\u6578\u91CF","Return a string containing informations about the specified gamepad.":"\u8FD4\u56DE\u5305\u542B\u6709\u95DC\u6307\u5B9A\u904A\u6232\u624B\u67C4\u7684\u4FE1\u606F\u7684\u5B57\u7B26\u4E32\u3002","Gamepad type":"\u904A\u6232\u624B\u628A\u985E\u578B","Player _PARAM1_ use _PARAM2_ controller":"\u73A9\u5BB6_PARAM1_\u4F7F\u7528_PARAM2_\u63A7\u5236\u5668","Check if the specified gamepad has the specified information in its description. Useful to know if the gamepad is a Xbox or PS4 controller.":"\u6AA2\u67E5\u6307\u5B9A\u7684\u904A\u6232\u624B\u628A\u662F\u5426\u5177\u6709\u5176\u63CF\u8FF0\u4E2D\u7684\u6307\u5B9A\u4FE1\u606F\u3002 \u6709\u52A9\u65BC\u77E5\u9053\u904A\u6232\u624B\u67C4\u662F\u5426\u662FXbox\u6216PS4\u63A7\u5236\u5668\u3002","Gamepad _PARAM1_ is a _PARAM2_ controller":"\u904A\u6232\u624B\u628A_PARAM1_\u662F\u4E00\u500B_PARAM2_\u63A7\u5236\u5668","Type: \"Xbox\", \"PS4\", \"Steam\" or \"PS3\" (among other)":"\u985E\u578B\uFF1A\u201CXbox\u201D\uFF0C\u201CPS4\u201D\uFF0C\u201CSteam\u201D\u6216\u201CPS3\u201D\uFF08\u9084\u6709\u5176\u4ED6\uFF09","Check if a gamepad is connected.":"\u6AA2\u67E5\u904A\u6232\u624B\u628A\u662F\u5426\u5DF2\u9023\u63A5\u3002","Gamepad connected":"\u904A\u6232\u624B\u628A\u5DF2\u9023\u63A5","Gamepad _PARAM1_ is plugged and connected":"\u904A\u6232\u624B\u628A_PARAM1_\u5DF2\u63D2\u4E0A\u4E26\u9023\u63A5","Generate a vibration on the specified controller. Might only work if the game is running in a recent web browser.":"\u5728\u6307\u5B9A\u7684\u63A7\u5236\u5668\u4E0A\u751F\u6210\u632F\u52D5\u3002 \u53EA\u6709\u5728\u904A\u6232\u904B\u884C\u5728\u6700\u65B0\u7684\u7DB2\u7D61\u700F\u89BD\u5668\u4E2D\u6642\u53EF\u80FD\u6709\u6548\u3002","Gamepad vibration":"\u904A\u6232\u624B\u628A\u9707\u52D5","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds":"\u4F7F\u904A\u6232\u624B\u628A_PARAM1_\u9707\u52D5_PARAM2_\u79D2","Time of the vibration, in seconds (optional, default value is 1)":"\u632F\u52D5\u6642\u9593\uFF0C\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF08\u53EF\u9078\uFF0C\u9ED8\u8A8D\u503C\u70BA1\uFF09","Generate an advanced vibration on the specified controller. Incompatible with Firefox.":"\u5728\u6307\u5B9A\u7684\u63A7\u5236\u5668\u4E0A\u751F\u6210\u9AD8\u7D1A\u632F\u52D5\u3002 \u8207Firefox\u4E0D\u517C\u5BB9\u3002","Advanced gamepad vibration":"\u9AD8\u7D1A\u904A\u6232\u624B\u628A\u9707\u52D5","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds with the vibration magnitude of _PARAM3_ and _PARAM4_":"\u4F7F\u904A\u6232\u624B\u628A_PARAM1_\u9707\u52D5_PARAM2_\u79D2\uFF0C\u632F\u5E45\u70BA_PARAM3_\u548C_PARAM4_","Strong rumble magnitude (from 0 to 1)":"\u5F37\u9707\u5E45\uFF080\u52301\uFF09","Weak rumble magnitude (from 0 to 1)":"\u5F31\u9707\u5E45\uFF080\u52301\uFF09","Change a vibration on the specified controller. Incompatible with Firefox.":"\u66F4\u6539\u6307\u5B9A\u63A7\u5236\u5668\u4E0A\u7684\u632F\u52D5\u3002 \u4E0EFirefox\u4E0D\u517C\u5BB9\u3002","Change gamepad active vibration":"\u66F4\u6539\u904A\u6232\u624B\u67C4\u7684\u4E3B\u52D5\u632F\u52D5","Change the vibration magnitude of _PARAM2_ & _PARAM3_ on gamepad _PARAM1_":"\u66F4\u6539\u624B\u67C4_PARAM1_\u4E0A_PARAM2_\u548C_PARAM3_\u7684\u632F\u52D5\u5E45\u5EA6","Check if any button is released on a gamepad.":"\u6AA2\u67E5\u904A\u6232\u624B\u67C4\u4E0A\u662F\u5426\u91CB\u653E\u4E86\u4EFB\u4F55\u6309\u9215\u3002","Any gamepad button released":"\u91CB\u653E\u4E86\u4EFB\u4F55\u904A\u6232\u624B\u67C4\u6309\u9215","Any button of gamepad _PARAM1_ is released":"\u624B\u67C4_PARAM1_\u7684\u4EFB\u4F55\u6309\u9215\u662F\u5426\u91CB\u653E","Return the strength of the weak vibration motor on the gamepad of a player.":"\u8FD4\u56DE\u73A9\u5BB6\u904A\u6232\u624B\u67C4\u4E0A\u5F31\u632F\u52D5\u99AC\u9054\u7684\u5F37\u5EA6\u3002","Weak rumble magnitude":"\u5FAE\u5F31\u9707\u52D5\u5E45\u5EA6","Return the strength of the strong vibration motor on the gamepad of a player.":"\u8FD4\u56DE\u73A9\u5BB6\u904A\u6232\u624B\u67C4\u4E0A\u5F37\u632F\u52D5\u99AC\u9054\u7684\u5F37\u5EA6\u3002","Strong rumble magnitude":"\u5F37\u9707\u52D5\u5E45\u5EA6","Control a platformer character with a gamepad.":"\u7528\u904A\u6232\u624B\u67C4\u63A7\u5236\u5E73\u53F0\u904A\u6232\u89D2\u8272\u3002","Platformer gamepad mapper":"\u5E73\u53F0\u904A\u6232\u624B\u67C4\u6620\u5C04","Gamepad identifier (1, 2, 3 or 4)":"\u624B\u67C4\u6A19\u8B58\u7B26\uFF081\u30012\u30013\u62164\uFF09","Use directional pad":"\u4F7F\u7528\u65B9\u5411\u9375","Controls":"\u63A7\u5236","Use left stick":"\u4F7F\u7528\u5DE6\u6416\u687F","Use right stick":"\u4F7F\u7528\u53F3\u6416\u687F","Jump button":"\u8DF3\u8E8D\u6309\u9215","Control a 3D physics character with a gamepad.":"\u4F7F\u7528\u904A\u6232\u624B\u67C4\u63A7\u52363D\u7269\u7406\u89D2\u8272\u3002","3D platformer gamepad mapper":"3D\u5E73\u53F0\u904A\u6232\u624B\u67C4\u6620\u5C04","Walk joystick":"\u6B65\u884C\u6416\u687F","3D shooter gamepad mapper":"3D\u5C04\u64CA\u904A\u6232\u624B\u67C4\u6620\u5C04","Camera joystick":"\u651D\u50CF\u6A5F\u6416\u687F","Control camera rotations with a gamepad.":"\u4F7F\u7528\u904A\u6232\u624B\u67C4\u63A7\u5236\u651D\u50CF\u6A5F\u65CB\u8F49\u3002","First person camera gamepad mapper":"\u7B2C\u4E00\u4EBA\u7A31\u651D\u50CF\u6A5F\u904A\u6232\u624B\u67C4\u6620\u5C04","Maximum rotation speed":"\u6700\u5927\u65CB\u8F49\u901F\u5EA6","Horizontal rotation":"\u6C34\u5E73\u65CB\u8F49","Rotation acceleration":"\u65CB\u8F49\u52A0\u901F\u5EA6","Rotation deceleration":"\u65CB\u8F49\u6E1B\u901F\u5EA6","Vertical rotation":"\u5782\u76F4\u65CB\u8F49","Minimum angle":"\u6700\u5C0F\u89D2\u5EA6","Maximum angle":"\u6700\u5927\u89D2\u5EA6","Z position offset":"Z\u4F4D\u7F6E\u504F\u79FB","Position":"\u4F4D\u7F6E","Current rotation speed Z":"\u7576\u524D\u65CB\u8F49\u901F\u5EA6Z","Current rotation speed Y":"\u7576\u524D\u65CB\u8F49\u901F\u5EA6Y","Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u5230_PARAM1_\u7684\u4F4D\u7F6E\u3002\u7576\u6240\u6709\u89D2\u5EA6\u70BA0\u6642\uFF0C\u7269\u9AD4\u5FC5\u9808\u5411\u53F3\u770B\uFF0C\u4E26\u4E14\u982D\u90E8\u7684\u9802\u90E8\u671D\u5411Z+\u3002","Move the camera to look though _PARAM0_ eyes":"\u79FB\u52D5\u76F8\u6A5F\uFF0C\u8B93\u5B83\u900F\u904E_PARAM0_ \u7684\u773C\u775B\u67E5\u770B","the maximum horizontal rotation speed of the object.":"\u7269\u4EF6\u7684\u6700\u5927\u6C34\u5E73\u65CB\u8F49\u901F\u5EA6\u3002","Maximum horizontal rotation speed":"\u6700\u5927\u6C34\u5E73\u65CB\u8F49\u901F\u5EA6","the maximum horizontal rotation speed":"\u7269\u4EF6\u7684\u6700\u5927\u6C34\u5E73\u65CB\u8F49\u901F\u5EA6","the horizontal rotation acceleration of the object.":"\u7269\u4EF6\u7684\u6C34\u5E73\u65CB\u8F49\u52A0\u901F\u5EA6\u3002","Horizontal rotation acceleration":"\u6C34\u5E73\u65CB\u8F49\u52A0\u901F\u5EA6","the horizontal rotation acceleration":"\u7269\u4EF6\u7684\u6C34\u5E73\u65CB\u8F49\u52A0\u901F\u5EA6","the horizontal rotation deceleration of the object.":"\u7269\u4EF6\u7684\u6C34\u5E73\u65CB\u8F49\u6E1B\u901F\u5EA6\u3002","Horizontal rotation deceleration":"\u6C34\u5E73\u65CB\u8F49\u6E1B\u901F\u5EA6","the horizontal rotation deceleration":"\u7269\u4EF6\u7684\u6C34\u5E73\u65CB\u8F49\u6E1B\u901F\u5EA6","the maximum vertical rotation speed of the object.":"\u7269\u4EF6\u7684\u6700\u5927\u5782\u76F4\u65CB\u8F49\u901F\u5EA6\u3002","Maximum vertical rotation speed":"\u6700\u5927\u5782\u76F4\u65CB\u8F49\u901F\u5EA6","the maximum vertical rotation speed":"\u7269\u4EF6\u7684\u6700\u5927\u5782\u76F4\u65CB\u8F49\u901F\u5EA6","the vertical rotation acceleration of the object.":"\u7269\u4EF6\u7684\u5782\u76F4\u65CB\u8F49\u52A0\u901F\u5EA6\u3002","Vertical rotation acceleration":"\u5782\u76F4\u65CB\u8F49\u52A0\u901F\u5EA6","the vertical rotation acceleration":"\u7269\u4EF6\u7684\u5782\u76F4\u65CB\u8F49\u52A0\u901F\u5EA6","the vertical rotation deceleration of the object.":"\u7269\u4EF6\u7684\u5782\u76F4\u65CB\u8F49\u6E1B\u901F\u5EA6\u3002","Vertical rotation deceleration":"\u5782\u76F4\u65CB\u8F49\u6E1B\u901F\u5EA6","the vertical rotation deceleration":"\u7269\u4EF6\u7684\u5782\u76F4\u65CB\u8F49\u6E1B\u901F\u5EA6","the minimum vertical camera angle of the object.":"\u7269\u4EF6\u7684\u6700\u5C0F\u5782\u76F4\u76F8\u6A5F\u89D2\u5EA6\u3002","Minimum vertical camera angle":"\u6700\u5C0F\u5782\u76F4\u76F8\u6A5F\u89D2\u5EA6","the minimum vertical camera angle":"\u6700\u5C0F\u5782\u76F4\u76F8\u6A5F\u89D2\u5EA6","the maximum vertical camera angle of the object.":"\u7269\u4EF6\u7684\u6700\u5927\u5782\u76F4\u76F8\u6A5F\u89D2\u5EA6\u3002","Maximum vertical camera angle":"\u6700\u5927\u5782\u76F4\u76F8\u6A5F\u89D2\u5EA6","the maximum vertical camera angle":"\u6700\u5927\u5782\u76F4\u76F8\u6A5F\u89D2\u5EA6","the z position offset of the object.":"\u7269\u4EF6\u7684z\u4F4D\u7F6E\u504F\u79FB\u3002","the z position offset":"z\u4F4D\u7F6E\u504F\u79FB","Control a 3D physics car with a gamepad.":"Control a 3D physics car with a gamepad.","3D car gamepad mapper":"3D car gamepad mapper","3D physics car":"3D physics car","Hand brake button":"Hand brake button","Control a top-down character with a gamepad.":"\u4F7F\u7528\u6416\u687F\u63A7\u5236\u4E00\u500B\u81EA\u4E0A\u800C\u4E0B\u7684\u89D2\u8272\u3002","Top-down gamepad mapper":"\u81EA\u4E0A\u800C\u4E0B\u6416\u687F\u6620\u5C04","Top-down movement behavior":"\u81EA\u4E0A\u800C\u4E0B\u79FB\u52D5\u884C\u70BA","Stick mode":"\u6416\u687F\u6A21\u5F0F","Hash":"\u54C8\u5E0C","Hash with MD5 or SHA256.":"\u4F7F\u7528MD5\u6216SHA256\u7684\u54C8\u5E0C\u3002","Returns a Hash a MD5 based on a string.":"\u8FD4\u56DE\u57FA\u65BC\u5B57\u7B26\u4E32\u7684MD5\u54C8\u5E0C\u3002","Hash a String with MD5":"\u4F7F\u7528MD5\u5C0D\u5B57\u7B26\u4E32\u9032\u884C\u54C8\u5E0C","String to be hashed":"\u8981\u9032\u884C\u54C8\u5E0C\u7684\u5B57\u7B26\u4E32","Returns a Hash a SHA256 based on a string.":"\u8FD4\u56DE\u57FA\u65BC\u5B57\u7B26\u4E32\u7684SHA256\u54C8\u5E0C\u3002","Hash a String with SHA256":"\u4F7F\u7528SHA256\u5C0D\u5B57\u7B26\u4E32\u9032\u884C\u54C8\u5E0C","Health points and damage":"\u751F\u547D\u503C\u548C\u50B7\u5BB3","Manage health (life) points, shield and armor.":"\u7BA1\u7406\u751F\u547D\uFF08\u751F\u547D\uFF09\u503C\uFF0C\u8B77\u76FE\u548C\u8B77\u7532\u3002","Health":"\u5065\u5EB7","Starting health":"\u521D\u59CB\u8840\u91CF","Current health (life) points":"\u7576\u524D\u8840\u91CF\uFF08\u751F\u547D\uFF09","Maximum health":"\u6700\u5927\u8840\u91CF","Use 0 for no maximum.":"\u4F7F\u75280\u8868\u793A\u7121\u4E0A\u9650\u3002","Damage cooldown":"\u53D7\u640D\u51B7\u537B","Allow heals to increase health above max health (regen will never exceed max health)":"\u5141\u8A31\u6CBB\u7642\u4F7F\u8840\u91CF\u8D85\u904E\u6700\u5927\u8840\u91CF\uFF08\u518D\u751F\u6C38\u9060\u4E0D\u6703\u8D85\u904E\u6700\u5927\u8840\u91CF\uFF09","Damage to health from the previous incoming damage":"\u4F86\u81EA\u5148\u524D\u53D7\u5230\u7684\u50B7\u5BB3\u7684\u5C0D\u5065\u5EB7\u7684\u640D\u50B7","Chance to dodge incoming damage (between 0 and 1)":"\u9583\u907F\u63A5\u53D7\u7684\u50B7\u5BB3\u7684\u6A5F\u6703\uFF08\u57280\u548C1\u4E4B\u9593\uFF09","When a damage is dodged, no damage is applied.":"\u7576\u4E00\u500B\u50B7\u5BB3\u88AB\u9583\u907F\u6642\uFF0C\u4E0D\u6703\u6709\u4EFB\u4F55\u50B7\u5BB3\u88AB\u61C9\u7528\u3002","Health points gained from the previous heal":"\u4F86\u81EA\u5148\u524D\u6CBB\u7642\u7372\u5F97\u7684\u5065\u5EB7\u9EDE\u6578","Rate of health regeneration (points per second)":"\u5065\u5EB7\u518D\u751F\u901F\u7387\uFF08\u6BCF\u79D2\u5E7E\u9EDE\uFF09","Health regeneration":"\u5065\u5EB7\u518D\u751F","Health regeneration delay":"\u5065\u5EB7\u518D\u751F\u5EF6\u9072","Delay before health regeneration starts after a hit.":"\u88AB\u64CA\u4E2D\u5F8C\u5065\u5EB7\u518D\u751F\u958B\u59CB\u524D\u7684\u5EF6\u9072\u3002","Current shield points":"\u7576\u524D\u8B77\u76FE\u9EDE\u6578","Shield":"\u8B77\u76FE","Maximum shield":"\u6700\u5927\u8B77\u76FE","Leave 0 for unlimited.":"\u7559\u4E0B0\u8868\u793A\u7121\u9650\u5236\u3002","Duration of shield":"\u8B77\u76FE\u7684\u6301\u7E8C\u6642\u9593","Use 0 to make the shield permanent.":"\u4F7F\u75280\u4F7F\u8B77\u76FE\u6C38\u4E45\u5B58\u5728\u3002","Rate of shield regeneration (points per second)":"\u8B77\u76FE\u518D\u751F\u901F\u7387\uFF08\u6BCF\u79D2\u5E7E\u9EDE\uFF09","Shield regeneration":"\u8B77\u76FE\u518D\u751F","Block excess damage when shield is broken":"\u8B77\u76FE\u7834\u58DE\u6642\u963B\u64CB\u591A\u9918\u7684\u50B7\u5BB3","Shield regeneration delay":"\u8B77\u76FE\u518D\u751F\u5EF6\u9072","Delay before shield regeneration starts after a hit.":"\u53D7\u5230\u653B\u64CA\u5F8C\u8B77\u76FE\u518D\u751F\u5EF6\u9072\u3002","Damage to shield from the previous incoming damage":"\u4E0A\u4E00\u6B21\u53D7\u5230\u7684\u50B7\u5BB3\u5C0D\u8B77\u76FE\u7684\u640D\u50B7","Flat damage reduction from armor":"\u5F9E\u8B77\u7532\u7372\u5F97\u7684\u56FA\u5B9A\u50B7\u5BB3\u6E1B\u514D","Incoming damages are reduced by this value.":"\u53D7\u5230\u50B7\u5BB3\u6703\u4F9D\u7167\u9019\u500B\u6578\u503C\u9032\u884C\u6E1B\u50B7\u3002","Armor":"\u8B77\u7532","Percentage damage reduction from armor (between 0 and 1)":"\u4F86\u81EA\u8B77\u7532\u7684\u767E\u5206\u6BD4\u50B7\u5BB3\u6E1B\u514D\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593\uFF09","Apply damage to the object. Shield and armor can reduce this damage if enabled.":"\u5C0D\u7269\u4EF6\u9020\u6210\u50B7\u5BB3\u3002\u5982\u679C\u555F\u7528\uFF0C\u8B77\u76FE\u548C\u76D4\u7532\u53EF\u4EE5\u6E1B\u5C11\u6B64\u50B7\u5BB3\u3002","Apply damage to an object":"\u5C0D\u7269\u4EF6\u9020\u6210\u50B7\u5BB3","Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)":"\u5C0D_PARAM0_\u9020\u6210_PARAM2_\u9EDE\u50B7\u5BB3\uFF08\u8B77\u76FE\uFF1A_PARAM3_\uFF0C\u76D4\u7532\uFF1A_PARAM4_\u53EF\u4EE5\u6E1B\u5C11\u50B7\u5BB3\uFF09","Points of damage":"\u50B7\u5BB3\u9EDE\u6578","Shield can reduce damage taken":"\u8B77\u76FE\u53EF\u4EE5\u6E1B\u5C11\u6240\u53D7\u7684\u50B7\u5BB3","Armor can reduce damage taken":"\u76D4\u7532\u53EF\u4EE5\u6E1B\u5C11\u6240\u53D7\u7684\u50B7\u5BB3","current health points of the object.":"\u7269\u4EF6\u7684\u7576\u524D\u5065\u5EB7\u9EDE\u6578\u3002","Health points":"\u5065\u5EB7\u9EDE\u6578","health points":"\u5065\u5EB7\u9EDE\u6578","Change the health points of the object. Will not trigger damage cooldown.":"\u66F4\u6539\u7269\u4EF6\u7684\u5065\u5EB7\u9EDE\u6578\u3002\u5C07\u4E0D\u6703\u89F8\u767C\u50B7\u5BB3\u51B7\u537B\u6642\u9593\u3002","Change health points":"\u66F4\u6539\u5065\u5EB7\u9EDE\u6578","Change the health of _PARAM0_ to _PARAM2_ points":"\u5C07_PARAM0_\u7684\u5065\u5EB7\u66F4\u6539\u70BA_PARAM2_\u9EDE","New health value":"\u65B0\u7684\u5065\u5EB7\u503C","Change health points (deprecated)":"\u66F4\u6539\u5065\u5EB7\u9EDE\u6578\uFF08\u4E0D\u63A8\u85A6\u4F7F\u7528\uFF09","Heal the object by increasing its health points.":"\u901A\u904E\u589E\u52A0\u5065\u5EB7\u9EDE\u6578\u4F86\u6CBB\u7642\u7269\u9AD4\u3002","Heal object":"\u6CBB\u7642\u7269\u9AD4","Heal _PARAM0_ with _PARAM2_ health points":"\u7528 _PARAM2_ \u9EDE\u6578\u6CBB\u7642 _PARAM0_","Points to heal (will be added to object health)":"\u8981\u6CBB\u7642\u7684\u9EDE\u6578\uFF08\u6703\u6DFB\u52A0\u5230\u7269\u9AD4\u5065\u5EB7\u4E2D\uFF09","the maximum health points of the object.":"\u7269\u9AD4\u7684\u6700\u5927\u5065\u5EB7\u9EDE\u6578\u3002","Maximum health points":"\u6700\u5927\u5065\u5EB7\u9EDE\u6578","the maximum health points":"\u6700\u5927\u5065\u5EB7\u9EDE\u6578","Change the object maximum health points.":"\u66F4\u6539\u7269\u9AD4\u7684\u6700\u5927\u5065\u5EB7\u9EDE\u6578\u3002","Maximum health points (deprecated)":"\u6700\u5927\u5065\u5EB7\u9EDE\u6578\uFF08\u5DF2\u68C4\u7528\uFF09","Change the maximum health of _PARAM0_ to _PARAM2_ points":"\u5C07 _PARAM0_ \u7684\u6700\u5927\u751F\u547D\u503C\u66F4\u6539\u70BA _PARAM2_ \u9EDE","the rate of health regeneration (points per second).":"\u751F\u547D\u518D\u751F\u7684\u901F\u5EA6\uFF08\u6BCF\u79D2\u9EDE\u6578\uFF09\u3002","Rate of health regeneration":"\u751F\u547D\u518D\u751F\u7684\u901F\u7387","the rate of health regeneration":"\u751F\u547D\u518D\u751F\u7684\u901F\u7387","Rate of regen":"\u518D\u751F\u901F\u5EA6","Change the rate of health regeneration.":"\u66F4\u6539\u751F\u547D\u518D\u751F\u7684\u901F\u7387\u3002","Rate of health regeneration (deprecated)":"\u751F\u547D\u518D\u751F\u7684\u901F\u7387\uFF08\u5DF2\u68C4\u7528\uFF09","Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second":"\u5C07 _PARAM0_ \u7684\u751F\u547D\u518D\u751F\u901F\u7387\u66F4\u6539\u70BA\u6BCF\u79D2 _PARAM2_ \u9EDE\u6578","the duration of damage cooldown (seconds).":"\u50B7\u5BB3\u51B7\u537B\u7684\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09\u3002","the duration of damage cooldown":"\u50B7\u5BB3\u51B7\u537B\u7684\u6301\u7E8C\u6642\u9593","Duration of damage cooldown (seconds)":"\u50B7\u5BB3\u51B7\u537B\u7684\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09","Change the duration of damage cooldown (seconds).":"\u66F4\u6539\u50B7\u5BB3\u51B7\u537B\u7684\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09\u3002","Damage cooldown (deprecated)":"\u50B7\u5BB3\u51B7\u537B\uFF08\u5DF2\u68C4\u7528\uFF09","Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds":"\u5C07 _PARAM0_ \u7684\u50B7\u5BB3\u51B7\u537B\u6301\u7E8C\u6642\u9593\u66F4\u6539\u70BA _PARAM2_ \u79D2","the delay before health regeneration starts after last being hit (seconds).":"\u6700\u5F8C\u53D7\u5230\u50B7\u5BB3\u5F8C\u518D\u751F\u958B\u59CB\u4E4B\u524D\u7684\u5EF6\u9072\uFF08\u79D2\uFF09\u3002","the health regeneration delay":"\u5065\u5EB7\u518D\u751F\u5EF6\u9072","Delay (seconds)":"\u5EF6\u9072\uFF08\u79D2\uFF09","Change the delay before health regeneration starts after being hit.":"\u66F4\u6539\u53D7\u5230\u50B7\u5BB3\u5F8C\u958B\u59CB\u5065\u5EB7\u518D\u751F\u7684\u5EF6\u9072\u3002","Health regeneration delay (deprecated)":"\u5065\u5EB7\u518D\u751F\u5EF6\u9072\uFF08\u5DF2\u68C4\u7528\uFF09","Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds":"\u5C07 _PARAM0_ \u7684\u5065\u5EB7\u518D\u751F\u5EF6\u9072\u66F4\u6539\u70BA _PARAM2_ \u79D2","the chance to dodge incoming damage (range: 0 to 1).":"\u9583\u907F\u5373\u5C07\u4F86\u81E8\u7684\u50B7\u5BB3\u7684\u6A5F\u6703\uFF08\u7BC4\u570D\uFF1A0\u52301\uFF09\u3002","Dodge chance":"\u9583\u907F\u6A5F\u7387","the chance to dodge incoming damage":"\u9583\u907F\u5373\u5C07\u4F86\u81E8\u7684\u50B7\u5BB3\u7684\u6A5F\u6703","Chance to dodge (Range: 0 to 1)":"\u9583\u907F\u6A5F\u7387\uFF08\u7BC4\u570D\uFF1A0\u52301\uFF09","Change the chance to dodge incoming damage.":"\u66F4\u6539\u9583\u907F\u5373\u5C07\u4F86\u81E8\u7684\u50B7\u5BB3\u7684\u6A5F\u7387\u3002","Chance to dodge incoming damage (deprecated)":"\u9583\u907F\u5373\u5C07\u4F86\u81E8\u7684\u50B7\u5BB3\u7684\u6A5F\u7387\uFF08\u5DF2\u68C4\u7528\uFF09","Change the chance to dodge on _PARAM0_ to _PARAM2_":"\u5C07 _PARAM0_ \u7684\u9583\u907F\u6A5F\u7387\u66F4\u6539\u70BA _PARAM2_","the flat damage reduction from the armor. Incoming damage is reduced by this value.":"\u8B77\u7532\u7684\u5E73\u5766\u50B7\u5BB3\u6E1B\u5C11\u3002\u4F86\u81EA\u8B77\u7532\u7684\u5165\u4FB5\u50B7\u5BB3\u6703\u6E1B\u5C11\u9019\u500B\u503C\u3002","Armor flat damage reduction":"\u8B77\u7532\u5E73\u5766\u50B7\u5BB3\u6E1B\u5C11","the armor flat damage reduction":"\u8B77\u7532\u5E73\u5766\u50B7\u5BB3\u6E1B\u5C11","Flat reduction from armor":"\u8B77\u7532\u7684\u5E73\u5766\u6E1B\u5C11","Change the flat damage reduction from armor. Incoming damage is reduced by this value.":"\u66F4\u6539\u8B77\u7532\u7684\u5E73\u5766\u50B7\u5BB3\u6E1B\u5C11\u3002\u4F86\u81EA\u8B77\u7532\u7684\u5165\u4FB5\u50B7\u5BB3\u6703\u6E1B\u5C11\u9019\u500B\u503C\u3002","Flat damage reduction from armor (deprecated)":"\u8B77\u7532\u7684\u5E73\u5766\u6E1B\u5C11\uFF08\u5DF2\u68C4\u7528\uFF09","Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points":"\u5C07 _PARAM0_ \u7684\u8B77\u7532\u5E73\u5766\u6E1B\u5C11\u6539\u70BA _PARAM2_ \u9EDE","the percent damage reduction from armor (range: 0 to 1).":"\u8B77\u7532\u7684\u767E\u5206\u6BD4\u50B7\u5BB3\u6E1B\u5C11\uFF08\u7BC4\u570D\uFF1A0\u52301\uFF09\u3002","Armor percent damage reduction":"\u8B77\u7532\u767E\u5206\u6BD4\u50B7\u5BB3\u6E1B\u5C11","the armor percent damage reduction":"\u8B77\u7532\u767E\u5206\u6BD4\u50B7\u5BB3\u6E1B\u5C11","Percent damage reduction from armor":"\u8B77\u7532\u7684\u767E\u5206\u6BD4\u50B7\u5BB3\u6E1B\u5C11","Change the percent damage reduction from armor. Range: 0 to 1.":"\u66F4\u6539\u8B77\u7532\u7684\u767E\u5206\u6BD4\u50B7\u5BB3\u6E1B\u5C11\u3002\u7BC4\u570D\uFF1A0\u52301\u3002","Percent damage reduction from armor (deprecated)":"\u8B77\u7532\u7684\u767E\u5206\u6BD4\u50B7\u5BB3\u6E1B\u5C11\uFF08\u5DF2\u68C4\u7528\uFF09","Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_":"\u5C07 _PARAM0_ \u7684\u8B77\u7532\u767E\u5206\u6BD4\u50B7\u5BB3\u6E1B\u5C11\u6539\u70BA _PARAM2_","Allow heals to increase health above max health. Regeneration will not exceed max health.":"\u5141\u8A31\u6CBB\u7642\u8D85\u904E\u6700\u5927\u5065\u5EB7\u3002\u518D\u751F\u4E0D\u6703\u8D85\u904E\u6700\u5927\u5065\u5EB7\u3002","Allow over-healing":"\u5141\u8A31\u904E\u5EA6\u6CBB\u7642","Allow over-healing on _PARAM0_: _PARAM2_":"\u5141\u8A31 _PARAM0_ \u7684\u904E\u5EA6\u6CBB\u7642\uFF1A_PARAM2_","Mark object as hit at least once.":"\u6A19\u8A18\u7269\u9AD4\u81F3\u5C11\u53D7\u5230\u4E00\u6B21\u653B\u64CA\u3002","Mark object as hit at least once":"\u6A19\u8A18\u7269\u9AD4\u81F3\u5C11\u53D7\u5230\u4E00\u6B21\u653B\u64CA","Mark _PARAM0_ as hit at least once: _PARAM2_":"\u6A19\u8A18 _PARAM0_ \u81F3\u5C11\u53D7\u5230\u4E00\u6B21\u653B\u64CA\uFF1A_PARAM2_","Hit at least once":"\u81F3\u5C11\u88AB\u64CA\u4E2D\u4E00\u6B21","Mark object as just damaged.":"\u6A19\u8A18\u7269\u9AD4\u525B\u525B\u53D7\u5230\u50B7\u5BB3\u3002","Mark object as just damaged":"\u6A19\u8A18\u7269\u9AD4\u525B\u525B\u53D7\u5230\u50B7\u5BB3","Mark _PARAM0_ as just damaged: _PARAM2_":"\u6A19\u8A18 _PARAM0_ \u525B\u525B\u53D7\u5230\u50B7\u5BB3\uFF1A_PARAM2_","Just damaged":"\u525B\u53D7\u640D","Trigger damage cooldown.":"\u89F8\u767C\u50B7\u5BB3\u51B7\u537B\u3002","Trigger damage cooldown":"\u89F8\u767C\u50B7\u5BB3\u51B7\u537B","Trigger the damage cooldown on _PARAM0_":"\u89F8\u767C _PARAM0_ \u7684\u50B7\u5BB3\u51B7\u537B","Check if the object has been hit at least once.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u81F3\u5C11\u53D7\u5230\u4E00\u6B21\u653B\u64CA\u3002","Object has been hit at least once":"\u7269\u9AD4\u81F3\u5C11\u88AB\u64CA\u4E2D\u4E00\u6B21","_PARAM0_ has been hit at least once":"_PARAM0_ \u81F3\u5C11\u53D7\u5230\u4E00\u6B21\u653B\u64CA","Check if health was just damaged previously in the events.":"\u6AA2\u67E5\u751F\u547D\u662F\u5426\u5728\u4E8B\u4EF6\u4E2D\u525B\u525B\u53D7\u640D\u3002","Is health just damaged":"\u751F\u547D\u525B\u525B\u53D7\u640D","Health has just been damaged on _PARAM0_":"_PARAM0_ \u7684\u751F\u547D\u525B\u525B\u53D7\u640D","Check if the object was just healed previously in the events.":"\u6AA2\u67E5\u7269\u9AD4\u5728\u4E8B\u4EF6\u4E2D\u662F\u5426\u525B\u525B\u88AB\u6CBB\u7642\u3002","Is just healed":"\u525B\u525B\u88AB\u6CBB\u7642","_PARAM0_ has just been healed":"_PARAM0_ \u525B\u525B\u88AB\u6CBB\u7642","Check if damage cooldown is active. Object and shield cannot be damaged while this is active.":"\u6AA2\u67E5\u50B7\u5BB3\u51B7\u537B\u662F\u5426\u5728\u6D3B\u52D5\u4E2D\u3002\u7576\u6B64\u529F\u80FD\u555F\u7528\u6642\uFF0C\u7269\u9AD4\u548C\u8B77\u76FE\u4E0D\u80FD\u53D7\u50B7\u3002","Is damage cooldown active":"\u50B7\u5BB3\u51B7\u537B\u662F\u5426\u8655\u65BC\u6D3B\u52D5\u72C0\u614B","Damage cooldown on _PARAM0_ is active":"_PARAM0_ \u7684\u50B7\u5BB3\u51B7\u537B\u662F\u6D3B\u52D5\u7684","the time before damage cooldown ends (seconds).":"\u50B7\u5BB3\u51B7\u537B\u7D50\u675F\u524D\u7684\u6642\u9593\uFF08\u79D2\uFF09\u3002","Time remaining in damage cooldown":"\u50B7\u5BB3\u51B7\u537B\u7684\u5269\u9918\u6642\u9593","the time before damage cooldown end":"\u50B7\u5BB3\u51B7\u537B\u7D50\u675F\u4E4B\u524D\u7684\u6642\u9593","Check if the object is considered dead (no health points).":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u88AB\u8A8D\u70BA\u662F\u6B7B\u8005\uFF08\u6C92\u6709\u5065\u5EB7\u9EDE\uFF09\u3002","Is dead":"\u662F\u5426\u5DF2\u6B7B\u4EA1","_PARAM0_ is dead":"_PARAM0_ \u5DF2\u6B7B","the time since last taken hit (seconds).":"\u6700\u5F8C\u53D7\u5230\u50B7\u5BB3\u7684\u6642\u9593\uFF08\u79D2\uFF09\u3002","Time since last hit":"\u81EA\u6700\u5F8C\u4E00\u6B21\u64CA\u4E2D\u4EE5\u4F86\u7684\u6642\u9593","the time since last taken hit on health":"\u81EA\u6700\u5F8C\u4E00\u6B21\u5728\u5065\u5EB7\u4E0A\u53D7\u5230\u50B7\u5BB3\u7684\u6642\u9593","the health damage taken from most recent hit.":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u50B7\u5BB3\u7684\u5065\u5EB7\u91CF\u3002","Health damage taken from most recent hit":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u5065\u5EB7\u640D\u50B7","the health damage taken from most recent hit":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u5065\u5EB7\u640D\u50B7","the maximum shield points of the object.":"\u7269\u9AD4\u7684\u6700\u5927\u8B77\u76FE\u9EDE\u6578\u3002","Maximum shield points":"\u6700\u5927\u8B77\u76FE\u9EDE\u6578","the maximum shield points":"\u6700\u5927\u8B77\u76FE\u9EDE\u6578","Change the maximum shield points of the object.":"\u66F4\u6539\u7269\u9AD4\u7684\u6700\u5927\u8B77\u76FE\u9EDE\u6578\u3002","Maximum shield points (deprecated)":"\u6700\u5927\u8B77\u76FE\u9EDE\u6578\uFF08\u5DF2\u68C4\u7528\uFF09","Change the maximum shield of _PARAM0_ to _PARAM2_ points":"\u5C07 _PARAM0_ \u7684\u6700\u5927\u8B77\u76FE\u66F4\u6539\u70BA _PARAM2_ \u9EDE","Change maximum shield points.":"\u66F4\u6539\u6700\u5927\u8B77\u76FE\u9EDE\u6578\u3002","Max shield points (deprecated)":"\u6700\u5927\u8B77\u76FE\u9EDE\u6578\uFF08\u5DF2\u68C4\u7528\uFF09","Change the maximum shield points on _PARAM0_ to _PARAM2_ points":"\u5C07 _PARAM0_ \u7684\u6700\u5927\u8B77\u76FE\u9EDE\u6578\u66F4\u6539\u70BA _PARAM2_ \u9EDE","Shield points":"\u8B77\u76FE\u9EDE\u6578","the current shield points of the object.":"\u7269\u9AD4\u7684\u7576\u524D\u8B77\u76FE\u9EDE\u6578\u3002","the shield points":"\u8B77\u76FE\u9EDE\u6578","Change current shield points. Will not trigger damage cooldown.":"\u66F4\u6539\u7576\u524D\u8B77\u76FE\u9EDE\u6578\u3002\u4E0D\u6703\u89F8\u767C\u50B7\u5BB3\u51B7\u537B\u3002","Shield points (deprecated)":"\u8B77\u76FE\u9EDE\u6578\uFF08\u5DF2\u68C4\u7528\uFF09","Change current shield points on _PARAM0_ to _PARAM2_ points":"\u5C07 _PARAM0_ \u7684\u7576\u524D\u8B77\u76FE\u9EDE\u6578\u66F4\u6539\u70BA _PARAM2_ \u9EDE","the rate of shield regeneration (points per second).":"\u8B77\u76FE\u518D\u751F\u7684\u901F\u7387\uFF08\u6BCF\u79D2\u9EDE\u6578\uFF09\u3002","Rate of shield regeneration":"\u8B77\u76FE\u518D\u751F\u7684\u901F\u7387","the rate of shield regeneration":"\u8B77\u76FE\u518D\u751F\u7684\u901F\u7387","Regeneration rate (points per second)":"\u518D\u751F\u901F\u7387\uFF08\u6BCF\u79D2\u9EDE\u6578\uFF09","Change rate of shield regeneration.":"\u66F4\u6539\u8B77\u76FE\u518D\u751F\u7684\u901F\u7387\u3002","Shield regeneration rate (deprecated)":"\u8B77\u76FE\u518D\u751F\u901F\u7387\uFF08\u5DF2\u68C4\u7528\uFF09","Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second":"\u5C07 _PARAM0_ \u7684\u8B77\u76FE\u518D\u751F\u901F\u7387\u6539\u70BA\u6BCF\u79D2 _PARAM2_ \u9EDE","the delay before shield regeneration starts after being hit (seconds).":"\u53D7\u5230\u50B7\u5BB3\u5F8C\u958B\u59CB\u8B77\u76FE\u518D\u751F\u4E4B\u524D\u7684\u5EF6\u9072\uFF08\u79D2\uFF09\u3002","the shield regeneration delay":"\u8B77\u76FE\u518D\u751F\u5EF6\u9072","Regeneration delay (seconds)":"\u518D\u751F\u5EF6\u9072\uFF08\u79D2\uFF09","Change delay before shield regeneration starts after being hit.":"\u66F4\u6539\u53D7\u5230\u50B7\u5BB3\u5F8C\u958B\u59CB\u8B77\u76FE\u518D\u751F\u7684\u5EF6\u9072\u3002","Shield regeneration delay (deprecated)":"\u8B77\u76FE\u518D\u751F\u5EF6\u9072\uFF08\u5DF2\u68C4\u7528\uFF09","Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds":"\u5C07 _PARAM0_ \u7684\u8B77\u76FE\u518D\u751F\u5EF6\u9072\u66F4\u6539\u70BA _PARAM2_ \u79D2","the duration of the shield (seconds). A value of \"0\" means the shield is permanent.":"\u8B77\u76FE\u7684\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09\u3002\u503C\u70BA\"0\"\u8868\u793A\u8B77\u76FE\u662F\u6C38\u4E45\u7684\u3002","the duration of the shield":"\u8B77\u76FE\u7684\u6301\u7E8C\u6642\u9593","Shield duration (seconds)":"\u8B77\u76FE\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09","Change duration of shield. Use \"0\" to make shield permanent.":"\u66F4\u6539\u8B77\u76FE\u7684\u6301\u7E8C\u6642\u9593\u3002\u4F7F\u7528\"0\"\u4F7F\u8B77\u76FE\u6C38\u4E45\u3002","Duration of shield (deprecated)":"\u8B77\u76FE\u7684\u6301\u7E8C\u6642\u9593\uFF08\u5DF2\u68C4\u7528\uFF09","Change the duration of shield on _PARAM0_ to _PARAM2_ seconds":"\u5C07 _PARAM0_ \u7684\u8B77\u76FE\u6301\u7E8C\u6642\u9593\u66F4\u6539\u70BA _PARAM2_ \u79D2","Renew shield duration to it's full value.":"\u5C07\u8B77\u76FE\u6301\u7E8C\u6642\u9593\u7E8C\u671F\u81F3\u5176\u5B8C\u6574\u503C\u3002","Renew shield duration":"\u7E8C\u671F\u8B77\u76FE\u6301\u7E8C\u6642\u9593","Renew the shield duration on _PARAM0_":"\u7E8C\u671F _PARAM0_ \u7684\u8B77\u76FE\u6301\u7E8C\u6642\u9593","Activate the shield by setting the shield points and renewing the shield duration (optional).":"\u901A\u904E\u8A2D\u7F6E\u8B77\u76FE\u9EDE\u6578\u548C\u7E8C\u671F\u8B77\u76FE\u7684\u6301\u7E8C\u6642\u9593\uFF08\u53EF\u9078\uFF09\u4F86\u555F\u7528\u8B77\u76FE\u3002","Activate shield":"\u555F\u7528\u8B77\u76FE","Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)":"\u4EE5 _PARAM2_ \u9EDE\u555F\u7528 _PARAM0_ \u4E0A\u7684\u8B77\u76FE\uFF08\u7E8C\u671F\u8B77\u76FE\u6301\u7E8C\u6642\u9593\uFF1A_PARAM3_\uFF09","Enable (or disable) blocking excess damage when shield breaks.":"\u555F\u7528\uFF08\u6216\u505C\u7528\uFF09\u7576\u8B77\u76FE\u7834\u58DE\u6642\u963B\u6B62\u904E\u91CF\u50B7\u5BB3\u3002","Block excess damage when shield breaks":"\u7576\u8B77\u76FE\u7834\u58DE\u6642\u963B\u6B62\u904E\u91CF\u50B7\u5BB3","Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_":"_PARAM0_ \u4E0A\u7684\u8B77\u76FE\u5728\u7834\u58DE\u6642\u963B\u6B62\u904E\u91CF\u50B7\u5BB3\uFF1A_PARAM2_","Block excess damage":"\u963B\u6B62\u904E\u91CF\u50B7\u5BB3","Check if the shield was just damaged previously in the events.":"\u6AA2\u67E5\u8B77\u76FE\u5728\u4E8B\u4EF6\u4E2D\u662F\u5426\u525B\u525B\u53D7\u5230\u50B7\u5BB3\u3002","Is shield just damaged":"\u8B77\u76FE\u525B\u525B\u53D7\u640D","Shield on _PARAM0_ has just been damaged":"_PARAM0_ \u4E0A\u7684\u8B77\u76FE\u525B\u525B\u53D7\u5230\u50B7\u5BB3","Check if incoming damage was just dodged.":"\u6AA2\u67E5\u9032\u4F86\u7684\u50B7\u5BB3\u662F\u5426\u525B\u525B\u88AB\u9583\u907F\u3002","Damage was just dodged":"\u50B7\u5BB3\u525B\u525B\u88AB\u9583\u907F","_PARAM0_ just dodged incoming damage":"_PARAM0_ \u525B\u525B\u9583\u907F\u5373\u5C07\u4F86\u81E8\u7684\u50B7\u5BB3","Check if the shield is active (based on shield points and duration).":"\u6AA2\u67E5\u8B77\u76FE\u662F\u5426\u6D3B\u8E8D\uFF08\u57FA\u65BC\u8B77\u76FE\u9EDE\u6578\u548C\u6301\u7E8C\u6642\u9593\uFF09\u3002","Is shield active":"\u8B77\u76FE\u662F\u5426\u555F\u7528","Shield on _PARAM0_ is active":"_PARAM0_ \u7684\u8B77\u76FE\u5DF2\u555F\u7528","the time before the shield duration ends (seconds).":"\u8B77\u76FE\u6301\u7E8C\u6642\u9593\u7D50\u675F\u524D\u7684\u6642\u9593\uFF08\u79D2\uFF09\u3002","Time before shield duration ends":"\u8B77\u76FE\u6301\u7E8C\u6642\u9593\u7D50\u675F\u524D\u7684\u6642\u9593","the time before the shield duration end":"\u8B77\u76FE\u6301\u7E8C\u6642\u9593\u7D50\u675F\u524D\u7684\u6642\u9593","the shield damage taken from most recent hit.":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u8B77\u76FE\u50B7\u5BB3\u3002","Shield damage taken from most recent hit":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u8B77\u76FE\u50B7\u5BB3","the shield damage taken from most recent hit":"\u6700\u8FD1\u4E00\u6B21\u53D7\u5230\u7684\u8B77\u76FE\u50B7\u5BB3","the health points gained from previous heal.":"\u5F9E\u4E0A\u4E00\u6B21\u6CBB\u7642\u4E2D\u7372\u5F97\u7684\u751F\u547D\u503C\u3002","Health points gained from previous heal":"\u5F9E\u4E0A\u4E00\u6B21\u6CBB\u7642\u4E2D\u7372\u5F97\u7684\u751F\u547D\u503C","the health points gained from previous heal":"\u5F9E\u4E0A\u4E00\u6B21\u6CBB\u7642\u4E2D\u7372\u5F97\u7684\u751F\u547D\u503C","Hexagonal 2D grid":"\u516D\u89D2\u5F62 2D \u7DB2\u683C","Snap objects to an hexagonal grid.":"\u5C07\u5C0D\u8C61\u6355\u6349\u5230\u516D\u89D2\u7DB2\u683C\u4E2D\u3002","Snap object to a virtual pointy topped hexagonal grid (this is not the grid used in the editor).":"\u5C07\u7269\u4EF6\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u5C16\u9802\u516D\u89D2\u683C\u5B50\u7DB2\u683C\uFF08\u9019\u4E0D\u662F\u7DE8\u8F2F\u5668\u4E2D\u4F7F\u7528\u7684\u7DB2\u683C\uFF09\u3002","Snap objects to a virtual pointy topped hexagonal grid":"\u5C07\u7269\u4EF6\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u5C16\u9802\u516D\u89D2\u683C\u5B50\u7DB2\u683C","Snap _PARAM1_ to a virtual pointy topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"\u4F7F\u7528\u5BEC\u5EA6\u70BA_PARAM2_px\uFF0C\u9AD8\u5EA6_PARAM3_px\u7684\u5132\u5B58\u683C\u8207\u504F\u79FB\u4F4D\u7F6E\uFF08_PARAM4_; _PARAM5_\uFF09\u5C07_PARAM1_\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u5C16\u9802\u516D\u89D2\u683C\u5B50\u7DB2\u683C\u3002","Objects to snap to the virtual grid":"\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u7DB2\u683C\u7684\u7269\u4EF6","Width of a cell of the virtual grid (in pixels)":"\u865B\u64EC\u7DB2\u683C\u4E2D\u7684\u55AE\u5143\u683C\u5BEC\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Height of a cell of the virtual grid (in pixels)":"\u865B\u64EC\u7DB2\u683C\u4E2D\u7684\u55AE\u5143\u683C\u9AD8\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","The actual row height will be 3/4 of this.":"\u5BE6\u969B\u7684\u884C\u9AD8\u5C07\u70BA\u6B64\u503C\u76843/4\u3002","Offset on the X axis of the virtual grid (in pixels)":"\u865B\u64EC\u7DB2\u683C\u4E2DX\u8EF8\u7684\u504F\u79FB\u91CF\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Offset on the Y axis of the virtual grid (in pixels)":"\u865B\u64EC\u7DB2\u683C\u4E2DY\u8EF8\u7684\u504F\u79FB\u91CF\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Odd rows are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"\u5947\u6578\u5217\u5F9E\u534A\u500B\u5132\u5B58\u683C\u7684\u4F4D\u7F6E\u958B\u59CB\uFF0C\u4F7F\u7528\u300C\u5132\u5B58\u683C\u9AD8\u5EA6*3/4\u300D\u7684\u504F\u79FB\u91CF\u53EF\u4EE5\u4F7F\u5176\u76F8\u53CD\u3002","Snap object to a virtual flat topped hexagonal grid (this is not the grid used in the editor).":"\u5C07\u7269\u4EF6\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u6241\u9802\u516D\u89D2\u683C\u5B50\u7DB2\u683C\uFF08\u9019\u4E0D\u662F\u7DE8\u8F2F\u5668\u4E2D\u4F7F\u7528\u7684\u7DB2\u683C\uFF09\u3002","Snap objects to a virtual flat topped hexagonal grid":"\u5C07\u7269\u4EF6\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u6241\u9802\u516D\u89D2\u683C\u5B50\u7DB2\u683C","Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"\u4F7F\u7528\u5BEC\u5EA6\u70BA_PARAM2_px\uFF0C\u9AD8\u5EA6_PARAM3_px\u7684\u5132\u5B58\u683C\u8207\u504F\u79FB\u4F4D\u7F6E\uFF08_PARAM4_; _PARAM5_\uFF09\u5C07_PARAM1_\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u6241\u9802\u516D\u89D2\u683C\u5B50\u7DB2\u683C\u3002","The actual column width will be 3/4 of this.":"\u5BE6\u969B\u7684\u5217\u5BEC\u5C07\u70BA\u6B64\u503C\u76843/4\u3002","Odd columns are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"\u5947\u6578\u6B04\u4F4D\u5F9E\u534A\u500B\u5132\u5B58\u683C\u7684\u4F4D\u7F6E\u958B\u59CB\uFF0C\u4F7F\u7528\u300C\u5132\u5B58\u683C\u9AD8\u5EA6*3/4\u300D\u7684\u504F\u79FB\u91CF\u53EF\u4EE5\u4F7F\u5176\u76F8\u53CD\u3002","Snap object to a virtual bubble grid (this is not the grid used in the editor).":"\u5C07\u7269\u4EF6\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u6C23\u6CE1\u683C\u5B50\u7DB2\u683C\uFF08\u9019\u4E0D\u662F\u7DE8\u8F2F\u5668\u4E2D\u4F7F\u7528\u7684\u7DB2\u683C\uFF09\u3002","Snap objects to a virtual bubble grid":"\u5C07\u7269\u4EF6\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u6C23\u6CE1\u683C\u5B50\u7DB2\u683C","Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"\u4F7F\u7528\u5BEC\u5EA6\u70BA_PARAM2_px\uFF0C\u9AD8\u5EA6_PARAM3_px\u7684\u5132\u5B58\u683C\u8207\u504F\u79FB\u4F4D\u7F6E\uFF08_PARAM4_; _PARAM5_\uFF09\u5C07_PARAM1_\u5C0D\u9F4A\u81F3\u865B\u64EC\u7684\u6C23\u6CE1\u683C\u5B50\u7DB2\u683C\u3002","The actual row height will be 7/8 of this.":"\u5BE6\u969B\u7684\u884C\u9AD8\u5C07\u70BA\u6B64\u7684 7/8\u3002","Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way":"\u5947\u6578\u884C\u5F9E\u534A\u500B\u55AE\u5143\u683C\u504F\u79FB\uFF0C\u4F7F\u7528 \"CellHeight * 7/8\" \u7684\u504F\u79FB\u91CF\u3002","Homing projectile":"\u8FFD\u8E64\u5C0E\u5F48","Make a projectile object move towards a target object.":"\u4F7F\u5C0E\u5F48\u5C0D\u8C61\u671D\u5411\u76EE\u6A19\u5C0D\u8C61\u79FB\u52D5\u3002","Lock projectile object to target object. (This is required for \"Move projectile towards target\").":"\u5C07\u6295\u5C04\u7269\u5C0D\u8C61\u9396\u5B9A\u5230\u76EE\u6A19\u5C0D\u8C61\u3002\uFF08\u9019\u662F\u201C\u5C07\u6295\u5C04\u7269\u9032\u884C\u79FB\u52D5\u5230\u76EE\u6A19\u201D\u6240\u9700\u7684\uFF09\u3002","Lock projectile to target":"\u9396\u5B9A\u6295\u5C04\u7269\u5230\u76EE\u6A19","Lock projectile _PARAM1_ to target _PARAM2_":"\u5C07\u6295\u5C04\u7269 _PARAM1_ \u9396\u5B9A\u5230\u76EE\u6A19 _PARAM2_","Projectile object":"\u6295\u5C04\u7269\u5C0D\u8C61","Move physics projectile towards the object that it has been locked to. This action must be run every frame.":"\u5C07\u7269\u7406\u6295\u5C04\u7269\u671D\u8457\u5B83\u88AB\u9396\u5B9A\u7684\u5C0D\u8C61\u79FB\u52D5\u3002\u6B64\u52D5\u4F5C\u5FC5\u9808\u5728\u6BCF\u5E40\u904B\u884C\u3002","Move physics projectile towards target":"\u5C07\u7269\u7406\u6295\u5C04\u7269\u671D\u8457\u76EE\u6A19\u79FB\u52D5","Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"\u5C07\u7269\u7406\u6295\u5C04\u7269 _PARAM1_ \u671D\u8457\u76EE\u6A19 _PARAM3_\u3002\u65CB\u8F49\u901F\u5EA6\uFF1A_PARAM4_ \u521D\u59CB\u901F\u5EA6\uFF1A_PARAM5_ \u52A0\u901F\u5EA6\uFF1A_PARAM6_ \u6700\u5927\u58FD\u547D\uFF1A_PARAM7_ \u78B0\u649E\u5F8C\u522A\u9664\uFF1A_PARAM8_","Physics Behavior":"\u7269\u7406\u884C\u70BA","Initial speed (pixels per second)":"\u521D\u59CB\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\uFF09","Acceleration (speed increase per second)":"\u52A0\u901F\u5EA6\uFF08\u6BCF\u79D2\u901F\u5EA6\u589E\u52A0\uFF09","Max lifetime (seconds)":"\u6700\u5927\u58FD\u547D\uFF08\u79D2\uFF09","Projectile will be deleted after this value is reached.":"\u7576\u9054\u5230\u6B64\u503C\u6642\uFF0C\u6295\u5C04\u7269\u5C07\u88AB\u522A\u9664\u3002","Delete Projectile if it collides with Target:":"\u5982\u679C\u8207\u76EE\u6A19\u767C\u751F\u78B0\u649E\uFF0C\u5247\u522A\u9664\u6295\u5C04\u7269\uFF1A","Move projectile towards the object that it has been locked to. This action must be run every frame.":"\u5C07\u6295\u5C04\u7269\u671D\u8457\u5B83\u88AB\u9396\u5B9A\u7684\u5C0D\u8C61\u79FB\u52D5\u3002\u6B64\u52D5\u4F5C\u5FC5\u9808\u5728\u6BCF\u5E40\u904B\u884C\u3002","Move projectile towards target":"\u5C07\u6295\u5C04\u7269\u671D\u8457\u76EE\u6A19\u79FB\u52D5","Move projectile _PARAM1_ towards target _PARAM2_. Rotate speed: _PARAM3_ Initial speed: _PARAM4_ Acceleration: _PARAM5_ Max speed: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"\u5C07\u6295\u5C04\u7269 _PARAM1_ \u671D\u8457\u76EE\u6A19 _PARAM2_\u3002\u65CB\u8F49\u901F\u5EA6\uFF1A_PARAM3_ \u521D\u59CB\u901F\u5EA6\uFF1A_PARAM4_ \u52A0\u901F\u5EA6\uFF1A_PARAM5_ \u6700\u5927\u901F\u5EA6\uFF1A_PARAM6_ \u6700\u5927\u58FD\u547D\uFF1A_PARAM7_ \u78B0\u649E\u5F8C\u522A\u9664\uFF1A_PARAM8_","Idle object tracker":"\u9592\u7F6E\u7269\u4EF6\u8FFD\u8E64\u5668","Check if an object has not moved (with some, customizable, tolerance) for a certain duration (1 second by default).":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728\u4E00\u5B9A\u6642\u9593\u5167\uFF08\u9ED8\u8A8D\u70BA1\u79D2\uFF09\u6C92\u6709\u79FB\u52D5\uFF08\u5E36\u6709\u4E00\u5B9A\u7684\u53EF\u5B9A\u5236\u5BB9\u932F\u5EA6\uFF09\u3002","Check if an object has not moved (with some tolerance, 20 pixels by default) for a certain duration (1 second by default).":"\u6AA2\u67E5\u5C0D\u8C61\u5728\u4E00\u5B9A\u6642\u9593\u5167\uFF08\u9ED8\u8A8D\u70BA1\u79D2\uFF09\u662F\u5426\u6C92\u6709\u79FB\u52D5\uFF08\u9ED8\u8A8D\u5141\u8A3120\u50CF\u7D20\u7684\u5BB9\u5DEE\uFF09\u3002","Idle tracker":"\u7A7A\u9592\u8FFD\u8E2A\u5668","Time, in seconds, before considering the object as idle":"\u5728\u5C07\u5C0D\u8C61\u8996\u70BA\u7A7A\u9592\u4E4B\u524D\u7684\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Distance, in pixels, allowed for the object to travel and still be considered idle":"\u50CF\u7D20\u8DDD\u96E2\uFF0C\u5141\u8A31\u5C0D\u8C61\u79FB\u52D5\u4E26\u4E14\u4ECD\u7136\u88AB\u8A8D\u70BA\u662F\u7A7A\u9592\u7684","Check if the object has just moved from its last position (using the tolerance configured in the behavior).":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u525B\u5F9E\u5176\u6700\u5F8C\u4F4D\u7F6E\u79FB\u52D5\uFF08\u4F7F\u7528\u884C\u70BA\u4E2D\u914D\u7F6E\u7684\u5BB9\u5DEE\uFF09\u3002","Has just moved from last position":"\u525B\u5F9E\u6700\u5F8C\u4F4D\u7F6E\u79FB\u52D5","_PARAM0_ has moved from its last position":"_PARAM0_ \u5DF2\u5F9E\u5176\u6700\u5F8C\u4F4D\u7F6E\u79FB\u52D5","Check if the object is idle: it has not moved from its last position (or within the tolerance) for the time configured in the behavior.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u7A7A\u9592\uFF1A\u5B83\u81EA\u6700\u5F8C\u4F4D\u7F6E\u672A\u79FB\u52D5\uFF08\u6216\u5728\u5BB9\u5DEE\u7BC4\u570D\u5167\uFF09\u9054\u5230\u884C\u70BA\u4E2D\u914D\u7F6E\u7684\u6642\u9593\u3002","Is idle (since enough time)":"\u7A7A\u9592\u4E2D\uFF08\u81EA\u8DB3\u5920\u6642\u9593\uFF09","Iframe":"\u5167\u5D4C\u6846\u67B6","Create or delete an iframe to embed websites.":"\u5275\u5EFA\u6216\u522A\u9664\u5167\u5D4C\u6846\u67B6\u4EE5\u5D4C\u5165\u7DB2\u7AD9\u3002","Create a new Iframe to embed a website inside the game.":"\u5275\u5EFA\u4E00\u500B\u65B0\u7684iframe\uFF0C\u5C07\u7DB2\u7AD9\u5D4C\u5165\u904A\u6232\u5167\u3002","Create an Iframe":"\u5275\u5EFAiframe","Create Iframe _PARAM1_ at position _PARAM5_:_PARAM6_, width: _PARAM3_, height: _PARAM4_, url: _PARAM2_":"\u5728\u4F4D\u7F6E_PARAM5_:_PARAM6_\u5275\u5EFAiframe _PARAM1_\uFF0C\u5BEC\u5EA6\uFF1A_PARAM3_\uFF0C\u9AD8\u5EA6\uFF1A_PARAM4_\uFF0Curl\uFF1A_PARAM2_","Name (DOM id)":"\u540D\u7A31\uFF08DOM id\uFF09","Width":"\u5BEC\u5EA6","Height":"\u9AD8\u5EA6","Show scrollbar":"\u986F\u793A\u6EFE\u52D5\u689D","Show border":"\u986F\u793A\u908A\u6846","Extra CSS styles (optional)":"\u9644\u52A0CSS\u6A23\u5F0F\uFF08\u9078\u586B\uFF09","e.g: `\"border: 10px #f00 solid;\"`":"\u4F8B\u5982\uFF1A`\"\u908A\u6846\uFF1A10px\uFF03f00\u5BE6\u5FC3\uFF1B\"`","Delete the specified Iframe.":"\u522A\u9664\u6307\u5B9A\u7684Iframe\u3002","Delete an Iframe":"\u522A\u9664\u4E00\u500BIframe","Delete Iframe _PARAM1_":"\u522A\u9664Iframe _PARAM1_","Mobile In-App Purchase (experimental)":"\u79FB\u52D5\u61C9\u7528\u5167\u8CFC\u8CB7\uFF08\u5BE6\u9A57\u6027\uFF09","Add products to buy directly in your game (\"In-App Purchase\"), for games published on Android or iOS.":"\u5728\u60A8\u7684\u904A\u6232\u4E2D\u76F4\u63A5\u6DFB\u52A0\u8981\u8CFC\u8CB7\u7684\u7522\u54C1\uFF08\u201C\u61C9\u7528\u5167\u8CFC\u8CB7\u201D\uFF09\uFF0C\u7528\u65BC\u5728Android\u6216iOS\u4E0A\u767C\u5E03\u7684\u904A\u6232\u3002","Ads":"\u5EE3\u544A","Register a Product of your store. This is required to do for all products you want to display or order from the app. \nMake sure you register them all and finalize registration before ordering a product.":"\u8A3B\u518A\u5546\u5E97\u4E2D\u7684\u7522\u54C1\u3002\u9019\u662F\u60A8\u60F3\u8981\u5F9E\u61C9\u7528\u7A0B\u5E8F\u4E2D\u986F\u793A\u6216\u8A02\u8CFC\u7684\u6240\u6709\u7522\u54C1\u90FD\u5FC5\u9808\u9032\u884C\u7684\u8A3B\u518A\u3002\u78BA\u4FDD\u60A8\u8A3B\u518A\u5B83\u5011\u4E26\u5728\u8A02\u8CFC\u7522\u54C1\u4E4B\u524D\u5B8C\u6210\u8A3B\u518A\u3002","Register a Product":"\u8A3B\u518A\u7522\u54C1","Register product _PARAM1_ as a _PARAM2_ (platform: _PARAM3_)":"\u5C07\u7522\u54C1_PARAM1_\u8A3B\u518A\u70BA_PARAM2_\uFF08\u5E73\u53F0\uFF1A_PARAM3_\uFF09","The internal ID of the product":"\u7522\u54C1\u7684\u5167\u90E8ID","Use the ID of the product you entered on the IAP provider (Google play, Apple store...)":"\u4F7F\u7528\u60A8\u5728IAP\u63D0\u4F9B\u5546\uFF08Google play\u3001Apple store...\uFF09\u4E0A\u8F38\u5165\u7684\u7522\u54C1ID","The type of product":"\u7522\u54C1\u985E\u578B","Which platform you're registering the product to":"\u60A8\u8981\u5C07\u7522\u54C1\u8A3B\u518A\u5230\u54EA\u500B\u5E73\u53F0","Finalize store registration. Do this after registering every product and before ordering or getting information about a product.":"\u5B8C\u6210\u5546\u5E97\u8A3B\u518A\u3002\u5728\u8A3B\u518A\u6BCF\u500B\u7522\u54C1\u4E4B\u5F8C\uFF0C\u4E26\u5728\u8A02\u8CFC\u6216\u7372\u53D6\u6709\u95DC\u7522\u54C1\u7684\u4FE1\u606F\u4E4B\u524D\uFF0C\u8ACB\u57F7\u884C\u6B64\u64CD\u4F5C\u3002","Finalize registration":"\u5B8C\u6210\u8A3B\u518A","Finalize store registration":"\u5B8C\u6210\u5546\u5E97\u8A3B\u518A","Opens the purchase menu to let the user buy a product.\nEnsure you use the condition to check if the store is ready and that the product ID has been registered and finalized before calling this action.":"\u6253\u958B\u8CFC\u8CB7\u9078\u55AE\u4EE5\u8B93\u7528\u6236\u8CFC\u8CB7\u7522\u54C1\u3002\u8ACB\u78BA\u4FDD\u5728\u8ABF\u7528\u6B64\u64CD\u4F5C\u4E4B\u524D\u4F7F\u7528\u689D\u4EF6\u6AA2\u67E5\u5546\u5E97\u662F\u5426\u5C31\u7DD2\uFF0C\u4E26\u4E14\u7522\u54C1ID\u5DF2\u8A3B\u518A\u4E26\u5B8C\u6210\u8A3B\u518A\u3002","Order a product":"\u8A02\u8CFC\u7522\u54C1","Order product _PARAM1_":"\u8A02\u8CFC\u7522\u54C1_PARAM1_","The id of the product to buy":"\u8981\u8CFC\u8CB7\u7684\u7522\u54C1ID","Get all the data about a product from the IAP provider and store it into a structure variable.\nCheck [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) for the exhaustive list of what can be retrieved from the product.":"\u5F9EIAP\u63D0\u4F9B\u5546\u7372\u53D6\u6709\u95DC\u7522\u54C1\u7684\u6240\u6709\u6578\u64DA\u4E26\u5C07\u5176\u5B58\u5132\u5230\u7D50\u69CB\u8B8A\u91CF\u4E2D\u3002\u67E5\u770B[\u6B64\u9801](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md)\u4EE5\u7372\u53D6\u53EF\u4EE5\u5F9E\u7522\u54C1\u6AA2\u7D22\u7684\u8A73\u76E1\u5217\u8868\u3002","Load product data in a variable":"\u5728\u8B8A\u91CF\u4E2D\u52A0\u8F09\u7522\u54C1\u6578\u64DA","Store data of _PARAM1_ in scene variable named _PARAM2_":"\u5C07_PARAM1_\u7684\u6578\u64DA\u5B58\u5132\u5728\u540D\u70BA_PARAM2_\u7684\u5834\u666F\u8B8A\u91CF\u4E2D","The id or alias of the product to get info about":"\u8981\u7372\u53D6\u4FE1\u606F\u7684\u7522\u54C1\u7684ID\u6216\u5225\u540D","The name of the scene variable to store the product data in":"\u5B58\u5132\u7522\u54C1\u6578\u64DA\u7684\u5834\u666F\u8B8A\u91CF\u7684\u540D\u7A31","The variable will be a structure, see [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) to know what child variables are accessible.":"\u8A72\u8B8A\u91CF\u5C07\u662F\u4E00\u500B\u7D50\u69CB\uFF0C\u53C3\u898B[\u6B64\u9801](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) \u4EE5\u4E86\u89E3\u53EF\u4EE5\u8A2A\u554F\u54EA\u4E9B\u5B50\u8B8A\u91CF\u3002","When an event is triggered for a product (approved or finished), this sets a scene variable to true. \nYou can then compare the value of the variable in a condition, and have actions launched to react to the changes.\nUse with Trigger Once to avoid registering multiple watchers unnecessarily.\nApproved is triggered after the purchase is complete.\nFinished is triggered after you have marked the purchased as delivered (less useful).":"\u7576\u7522\u54C1\u89F8\u767C\u4E8B\u4EF6\uFF08\u5DF2\u6279\u51C6\u6216\u5B8C\u6210\uFF09\uFF0C\u9019\u5C07\u4F7F\u5834\u666F\u8B8A\u91CF\u8A2D\u70BA true\u3002\n\u7136\u5F8C\u60A8\u53EF\u4EE5\u5C0D\u8B8A\u91CF\u7684\u503C\u9032\u884C\u6BD4\u8F03\uFF0C\u4E26\u61C9\u7528\u64CD\u4F5C\u4F86\u97FF\u61C9\u8B8A\u5316\u3002\n\u8207\u4E00\u6B21\u89F8\u767C\u4E00\u8D77\u4F7F\u7528\uFF0C\u4EE5\u907F\u514D\u4E0D\u5FC5\u8981\u5730\u8A3B\u518A\u591A\u500B\u76E3\u807D\u5668\u3002\n\u5DF2\u6279\u51C6\u5728\u8CFC\u8CB7\u5B8C\u6210\u5F8C\u89F8\u767C\u3002\n\u5B8C\u6210\u5728\u60A8\u6A19\u8A18\u8CFC\u8CB7\u5DF2\u4EA4\u4ED8\u5F8C\u89F8\u767C\uFF08\u4E0D\u592A\u6709\u7528\uFF09\u3002","Update a variable when a product event is triggered":"\u7576\u7522\u54C1\u4E8B\u4EF6\u89F8\u767C\u6642\u66F4\u65B0\u8B8A\u91CF","Watch the event _PARAM3_ for product _PARAM1_ and set scene variable named _PARAM2_ to true when it happens":"\u76E3\u8996\u7522\u54C1_PARAM1_\u7684\u4E8B\u4EF6_PARAM3_\uFF0C\u7576\u5B83\u767C\u751F\u6642\u5C07\u5834\u666F\u8B8A\u91CF\u547D\u540D\u70BA_PARAM2_\u8A2D\u7F6E\u70BA true","The id of the product to watch":"\u8981\u76E3\u8996\u7684\u7522\u54C1\u7684ID","The name of the scene variable to set to \"true\" when the event happens":"\u7576\u4E8B\u4EF6\u767C\u751F\u6642\uFF0C\u8A2D\u7F6E\u70BA\u201Ctrue\u201D\u7684\u5834\u666F\u8B8A\u91CF\u7684\u540D\u7A31","The event to listen to":"\u8981\u76E3\u807D\u7684\u4E8B\u4EF6","Mark a purchase as delivered, after you delivered the rewards the user has paid for and saved it somewhere. If you don't do so, the user will get the money refunded as the purchase will be considered as incomplete, with the rewards not given.":"\u5728\u60A8\u4EA4\u4ED8\u4E86\u7528\u6236\u652F\u4ED8\u4E26\u4FDD\u5B58\u7684\u734E\u52F5\u5F8C\uFF0C\u5C07\u8CFC\u8CB7\u6A19\u8A18\u70BA\u5DF2\u4EA4\u4ED8\u3002\u5982\u679C\u4E0D\u9019\u6A23\u505A\uFF0C\u5C07\u6703\u88AB\u8996\u70BA\u672A\u5B8C\u6210\u7684\u8CFC\u8CB7\uFF0C\u672A\u7D66\u734E\u52F5\u7684\u60C5\u6CC1\u4E0B\uFF0C\u7528\u6236\u5C07\u7372\u5F97\u9322\u7684\u9000\u6B3E\u3002","Finalize a purchase":"\u5B8C\u6210\u8CFC\u8CB7","Mark purchase of _PARAM1_ as delivered":"\u6A19\u8A18_PARAM1_\u7684\u8CFC\u8CB7\u70BA\u5DF2\u4EA4\u4ED8","The id or alias of the product to finalize":"\u8981\u5B8C\u6210\u7684\u7522\u54C1\u7684ID\u6216\u5225\u540D","Triggers after finalizing the registration. Products can then be retrieved and purchased (you can get data of a product like the price, you can use the action to order a product...).":"\u8A3B\u518A\u5B8C\u6210\u5F8C\u89F8\u767C\u3002\u7136\u5F8C\u53EF\u4EE5\u6AA2\u7D22\u4E26\u8CFC\u8CB7\u7522\u54C1\uFF08\u53EF\u4EE5\u7372\u53D6\u7522\u54C1\u7684\u6578\u64DA\uFF0C\u6BD4\u5982\u50F9\u683C\uFF0C\u9084\u53EF\u4EE5\u4F7F\u7528\u52D5\u4F5C\u4F86\u8A02\u8CFC\u7522\u54C1...\uFF09\u3002","Store is ready":"\u5546\u5E97\u6E96\u5099\u5C31\u7DD2","Input Validation":"\u8F38\u5165\u9A57\u8B49","Conditions and expressions to check, sanitize and manipulate strings.":"\u689D\u4EF6\u548C\u8868\u9054\u5F0F\u7528\u65BC\u6AA2\u67E5\uFF0C\u6E05\u7406\u548C\u64CD\u4F5C\u5B57\u7B26\u4E32\u3002","Check if the string is a valid phone number.":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684\u96FB\u8A71\u865F\u78BC\u3002","Check if a string is a valid phone number":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684\u96FB\u8A71\u865F\u78BC","_PARAM1_ is a valid phone number":"_PARAM1_ \u662F\u4E00\u500B\u6709\u6548\u7684\u96FB\u8A71\u865F\u78BC","Phone number":"\u96FB\u8A71\u865F\u78BC","Check if the string is a valid URL.":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684URL\u3002","Check if a string is a valid URL":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684URL","_PARAM1_ is a valid URL":"_PARAM1_ \u662F\u4E00\u500B\u6709\u6548\u7684URL","Check if the string is a valid email.":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684\u96FB\u5B50\u90F5\u4EF6\u3002","Check if a string is a valid email":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u662F\u6709\u6548\u7684\u96FB\u5B50\u90F5\u4EF6","_PARAM1_ is a valid email":"_PARAM1_ \u662F\u4E00\u500B\u6709\u6548\u7684\u96FB\u5B50\u90F5\u4EF6","Email":"\u96FB\u5B50\u90F5\u4EF6","Check if the string represents a number (potentially with a minus sign and potentially with a decimal point).":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u8868\u793A\u4E00\u500B\u6578\u5B57\uFF08\u6709\u53EF\u80FD\u5E36\u6709\u8CA0\u865F\u4E26\u6709\u53EF\u80FD\u5E36\u6709\u5C0F\u6578\u9EDE\uFF09\u3002","Check if a string represents a number":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u8868\u793A\u4E00\u500B\u6578\u5B57","_PARAM1_ represents a number":"_PARAM1_ \u8868\u793A\u4E00\u500B\u6578\u5B57","Number":"\u6578\u5B57","Check if the string has only latin alphabet letters.":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u53EA\u5305\u542B\u62C9\u4E01\u5B57\u6BCD\u3002","Check if a string has only latin alphabet letters":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u50C5\u5305\u542B\u62C9\u4E01\u5B57\u6BCD","_PARAM1_ has only latin alphabet letters":"_PARAM1_\u50C5\u5305\u542B\u62C9\u4E01\u5B57\u6BCD","Letters":"\u5B57\u6BCD","Returns the string without the first line.":"\u8FD4\u56DE\u4E0D\u5305\u62EC\u7B2C\u4E00\u884C\u7684\u5B57\u7B26\u4E32","Remove the first line":"\u522A\u9664\u7B2C\u4E00\u884C","String to remove the first line from":"\u5F9E\u4E2D\u522A\u9664\u7B2C\u4E00\u884C\u7684\u5B57\u7B26\u4E32","Count the number of lines in a string.":"\u8A08\u7B97\u5B57\u7B26\u4E32\u4E2D\u7684\u884C\u6578","Count lines":"\u8A08\u7B97\u884C\u6578","The text to count lines from":"\u8A08\u7B97\u884C\u6578\u7684\u6587\u672C","Replaces every new line character with a space.":"\u5C07\u6BCF\u500B\u65B0\u884C\u5B57\u7B26\u66FF\u63DB\u70BA\u7A7A\u683C","Replace new lines by a space":"\u5C07\u65B0\u884C\u66FF\u63DB\u70BA\u7A7A\u683C","The text to remove new lines from":"\u8981\u5F9E\u4E2D\u522A\u9664\u65B0\u884C\u7684\u6587\u672C","Remove any non-numerical and non A-Z characters.":"\u522A\u9664\u4EFB\u4F55\u975E\u6578\u5B57\u548C\u975E A-Z \u5B57\u7B26","Remove any non-numerical and non A-Z characters":"\u522A\u9664\u4EFB\u4F55\u975E\u6578\u5B57\u548C\u975E A-Z \u5B57\u7B26","The text to sanitize":"\u8981\u9032\u884C\u6D88\u6BD2\u7684\u6587\u672C","Internet Connectivity":"Internet Connectivity","Checks if the device running the game is connected to the internet.":"\u6AA2\u67E5\u904B\u884C\u904A\u6232\u7684\u8A2D\u5099\u662F\u5426\u9023\u63A5\u5230\u4E92\u806F\u7DB2\u3002","Checks if the device is connected to the internet.":"\u6AA2\u67E5\u8A2D\u5099\u662F\u5426\u9023\u63A5\u5230\u4E92\u806F\u7DB2","Is the device online?":"\u8A2D\u5099\u662F\u5426\u5728\u7DDA\uFF1F","The device is online":"\u8A2D\u5099\u5728\u7DDA","Simple inventories":"\u7C21\u55AE\u5EAB\u5B58","Manage inventory items.":"\u7BA1\u7406\u5EAB\u5B58\u7269\u54C1\u3002","Add an item in an inventory.":"\u5728\u5EAB\u4E2D\u6DFB\u52A0\u4E00\u500B\u9805\u76EE","Add an item":"\u6DFB\u52A0\u9805\u76EE","Add a _PARAM2_ to inventory _PARAM1_":"\u5411\u5EAB\u5B58_PARAM1_\u6DFB\u52A0_PARAM2_","Inventory name":"\u5EAB\u5B58\u540D\u7A31","Item name":"\u9805\u76EE\u540D\u7A31","Remove an item from an inventory.":"\u5F9E\u5EAB\u5B58\u4E2D\u79FB\u9664\u4E00\u500B\u9805\u76EE","Remove an item":"\u79FB\u9664\u4E00\u500B\u9805\u76EE","Remove a _PARAM2_ from inventory _PARAM1_":"\u5F9E\u5EAB\u5B58_PARAM1_\u4E2D\u79FB\u9664_PARAM2_","the number of an item in an inventory.":"\u5EAB\u5B58\u4E2D\u4E00\u500B\u9805\u76EE\u7684\u6578\u91CF\u3002","Item count":"\u9805\u76EE\u6578\u91CF","the count of _PARAM2_ in _PARAM1_":"_PARAM1_\u4E2D\u7684_PARAM2_\u6578\u91CF","Check if at least one of the specified items is in the inventory.":"\u6AA2\u67E5\u5EAB\u5B58\u4E2D\u662F\u5426\u81F3\u5C11\u6709\u4E00\u500B\u6307\u5B9A\u7684\u9805\u76EE\u3002","Has an item":"\u6709\u4E00\u500B\u9805\u76EE","Inventory _PARAM1_ contains a _PARAM2_":"\u5EAB\u5B58_PARAM1_\u5305\u542B_PARAM2_","the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"\u53EF\u4EE5\u5728\u5EAB\u5B58\u4E2D\u6DFB\u52A0\u6307\u5B9A\u9805\u76EE\u7684\u6700\u5927\u6578\u91CF\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u6BCF\u500B\u9805\u76EE\u7684\u5141\u8A31\u6578\u91CF\u70BA\u7121\u9650\u3002","Item capacity":"\u9805\u76EE\u5BB9\u91CF","_PARAM2_ capacity in inventory _PARAM1_":"\u5EAB\u5B58_PARAM1_\u4E2D\u7684_PARAM2_\u5BB9\u91CF","Check if a limited amount of an object is allowed by the inventory. Item capacity is unlimited by default.":"\u6AA2\u67E5\u5EAB\u5B58\u662F\u5426\u5141\u8A31\u5C0D\u8C61\u7684\u6709\u9650\u91CF\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u9805\u76EE\u5BB9\u91CF\u70BA\u7121\u9650\u3002","Limited item capacity":"\u5177\u6709\u9650\u7684\u7269\u54C1\u5BB9\u91CF","Allow a limited count of _PARAM2_ in inventory _PARAM1_":"\u5728\u5EAB\u5B58_PARAM1_\u4E2D\u5141\u8A31_PARAM2_\u7684\u6709\u9650\u8A08\u6578","Allow a limited amount of an object to be in an inventory. Item capacity is unlimited by default.":"\u5141\u8A31\u7269\u54C1\u7684\u6709\u9650\u6578\u91CF\u5B58\u5728\u65BC\u5EAB\u5B58\u4E2D\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u7269\u54C1\u5BB9\u91CF\u662F\u7121\u9650\u7684\u3002","Limit item capacity":"\u9650\u5236\u7269\u54C1\u5BB9\u91CF","Allow a limited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"\u5728\u5EAB\u5B58_PARAM1_\u4E2D\u5141\u8A31_PARAM2_\u7684\u6709\u9650\u8A08\u6578\uFF1A_PARAM3_","Limit the item capacity":"\u9650\u5236\u7269\u54C1\u5BB9\u91CF","Check if an item has reached its maximum number allowed in the inventory.":"\u6AA2\u67E5\u7269\u54C1\u662F\u5426\u5DF2\u9054\u5230\u5728\u5EAB\u5B58\u4E2D\u5141\u8A31\u7684\u6700\u5927\u6578\u91CF\u3002","Item full":"\u7269\u54C1\u5DF2\u6EFF","Inventory _PARAM1_ is full of _PARAM2_":"\u5EAB\u5B58_PARAM1_\u5DF2\u6EFF_PARAM2_","Check if an item is equipped.":"\u6AA2\u67E5\u7269\u54C1\u662F\u5426\u5DF2\u88DD\u5099\u3002","Item equipped":"\u5DF2\u88DD\u5099\u7269\u54C1","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM1_\u5728\u5EAB\u5B58_PARAM2_\u4E2D\u5DF2\u88DD\u5099","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"\u5C07\u7269\u54C1\u6A19\u8A18\u70BA\u5DF2\u88DD\u5099\u3002\u5982\u679C\u7269\u54C1\u6578\u91CF\u70BA0\uFF0C\u5B83\u5C07\u4E0D\u6703\u88AB\u6A19\u8A18\u70BA\u5DF2\u88DD\u5099\u3002","Equip an item":"\u88DD\u5099\u7269\u54C1","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"\u5C07_PARAM2_\u5728\u5EAB\u5B58_PARAM1_\u4E2D\u8A2D\u70BA\u5DF2\u88DD\u5099\uFF1A_PARAM3_","Equip":"\u88DD\u5099","Save all the items of the inventory in a scene variable, so that it can be restored later.":"\u5C07\u5EAB\u5B58\u7684\u6240\u6709\u7269\u54C1\u4FDD\u5B58\u5728\u5834\u666F\u8B8A\u91CF\u4E2D\uFF0C\u4EE5\u4FBF\u7A0D\u5F8C\u53EF\u4EE5\u6062\u5FA9\u3002","Save an inventory in a scene variable":"\u5728\u5834\u666F\u8B8A\u91CF\u4E2D\u4FDD\u5B58\u5EAB\u5B58","Save inventory _PARAM1_ in variable _PARAM2_":"\u5728\u8B8A\u91CF_PARAM2_\u4E2D\u4FDD\u5B58\u5EAB\u5B58_PARAM1_","Scene variable":"\u5834\u666F\u8B8A\u91CF","Load the content of the inventory from a scene variable.":"\u5F9E\u5834\u666F\u8B8A\u91CF\u4E2D\u52A0\u8F09\u5EAB\u5B58\u7684\u5167\u5BB9\u3002","Load an inventory from a scene variable":"\u5F9E\u5834\u666F\u8B8A\u91CF\u4E2D\u52A0\u8F09\u5EAB\u5B58","Load inventory _PARAM1_ from variable _PARAM2_":"\u5F9E\u8B8A\u91CF_PARAM2_\u4E2D\u52A0\u8F09\u5EAB\u5B58_PARAM1_","Object \"Is On Screen\" Detection":"\u5C0D\u8C61\"\u5728\u87A2\u5E55\u4E0A\"\u6AA2\u6E2C","This adds a condition to detect if an object is on screen based off its current layer.":"\u6B64\u689D\u4EF6\u6DFB\u52A0\u4E86\u4E00\u500B\u689D\u4EF6\uFF0C\u7528\u65BC\u6AA2\u6E2C\u5C0D\u8C61\u662F\u5426\u57FA\u65BC\u5176\u7576\u524D\u5716\u5C64\u5728\u5C4F\u5E55\u4E0A\u3002","This behavior provides a condition to check if the object is located within the visible portion of its layer's camera. The condition also allows for specifying padding to the virtual screen border.\nNote that object visibility, such as being hidden or 0 opacity, is not considered (but you can use those existing conditions in addition to this behavior).":"\u6B64\u884C\u70BA\u63D0\u4F9B\u4E00\u500B\u689D\u4EF6\uFF0C\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u4F4D\u65BC\u5176\u5716\u5C64\u76F8\u6A5F\u7684\u53EF\u898B\u90E8\u5206\u5167\u3002\u689D\u4EF6\u9084\u5141\u8A31\u6307\u5B9A\u5230\u865B\u64EC\u5C4F\u5E55\u908A\u754C\u7684\u586B\u5145\u3002\n\u8ACB\u6CE8\u610F\uFF0C\u4E0D\u8003\u616E\u7269\u4EF6\u53EF\u898B\u6027\uFF0C\u4F8B\u5982\u88AB\u96B1\u85CF\u62160\u4E0D\u900F\u660E\u5EA6\uFF0C\uFF08\u4F46\u60A8\u53EF\u4EE5\u5728\u6B64\u884C\u70BA\u4E4B\u5916\u540C\u6642\u4F7F\u7528\u73FE\u6709\u7684\u689D\u4EF6\uFF09\u3002","Is on screen":"\u662F\u5426\u5728\u87A2\u5E55\u4E0A","Checks if an object position is within the viewport of its layer.":"\u6AA2\u67E5\u7269\u4EF6\u4F4D\u7F6E\u662F\u5426\u5728\u5176\u5C64\u7684\u8996\u53E3\u5167\u3002","_PARAM0_ is on screen (padded by _PARAM2_ pixels)":"_PARAM0_ \u5728\u87A2\u5E55\u4E0A\uFF08\u908A\u754C\u64F4\u5927 _PARAM2_ \u50CF\u7D20\uFF09","Padding (in pixels)":"\u908A\u754C\u586B\u5145\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Number of pixels to pad the screen border. Zero by default. A negative value goes inside the screen, a positive value go outside.":"\u5C4F\u5E55\u908A\u754C\u7684\u586B\u5145\u50CF\u7D20\u6578\u91CF\u3002\u9ED8\u8A8D\u70BA\u96F6\u3002\u8CA0\u503C\u5411\u5167\uFF0C\u6B63\u503C\u5411\u5916\u3002","Konami Code":"\u5EAB\u7D0D\u7C73\u4EE3\u78BC","Allows to input the classic Konami Code (\"Up, Up, Down, Down, Left, Right, Left, Right, B, A\") into a scene for cheats and easter eggs.":"\u5141\u8A31\u5728\u5834\u666F\u4E2D\u8F38\u5165\u7D93\u5178\u5EAB\u7D0D\u7C73\u4EE3\u78BC\uFF08\"\u4E0A\uFF0C\u4E0A\uFF0C\u4E0B\uFF0C\u4E0B\uFF0C\u5DE6\uFF0C\u53F3\uFF0C\u5DE6\uFF0C\u53F3\uFF0CB\uFF0CA\"\uFF09\u4EE5\u9032\u884C\u4F5C\u5F0A\u548C\u5F69\u86CB\u3002","Checks if the Konami Code is correctly inputted.":"\u6AA2\u67E5Konami\u78BC\u662F\u5426\u6B63\u78BA\u8F38\u5165\u3002","Is Inputted":"\u5DF2\u8F38\u5165","Konami Code is inputted with _PARAM0_":"\u4F7F\u7528 _PARAM0_ \u8F38\u5165Konami\u78BC","Language":"\u8A9E\u8A00","Get the preferred language of the user, set on their browser or device.":"\u7372\u53D6\u7528\u6236\u7684\u9996\u9078\u8A9E\u8A00\uFF0C\u8A2D\u7F6E\u5728\u4ED6\u5011\u7684\u700F\u89BD\u5668\u6216\u8A2D\u5099\u4E0A\u3002","Returns a string representing the preferred language of the user.\nThe format represents the language first, and usually the country where it's used. For example: \"en\" (English), \"en-US\" (English as used in the United States), \"en-GB\" (United Kingdom English), \"es\" (Spanish), \"zh-CN\" (Chinese as used in China), etc.":"\u8FD4\u56DE\u8868\u793A\u7528\u6236\u9996\u9078\u8A9E\u8A00\u7684\u5B57\u7B26\u4E32\u3002\n\u683C\u5F0F\u9996\u5148\u8868\u793A\u8A9E\u8A00\uFF0C\u901A\u5E38\u662F\u4F7F\u7528\u8A72\u8A9E\u8A00\u7684\u570B\u5BB6\u3002\u4F8B\u5982\uFF1A\u201Cen\u201D\uFF08\u82F1\u8A9E\uFF09\uFF0C\u201Cen-US\u201D\uFF08\u7F8E\u570B\u4F7F\u7528\u7684\u82F1\u8A9E\uFF09\uFF0C\u201Cen-GB\u201D\uFF08\u82F1\u570B\u82F1\u8A9E\uFF09\uFF0C\u201Ces\u201D\uFF08\u897F\u73ED\u7259\u8A9E\uFF09\uFF0C\u201Czh-CN\u201D\uFF08\u4E2D\u570B\u4F7F\u7528\u7684\u4E2D\u6587\uFF09\u7B49\u3002","Game over dialog":"\u904A\u6232\u7D50\u675F\u5C0D\u8A71\u6846","Display the score and let players choose what to do next.":"\u986F\u793A\u5206\u6578\u4E26\u8B93\u73A9\u5BB6\u9078\u64C7\u63A5\u4E0B\u4F86\u7684\u64CD\u4F5C\u3002","Return a formated time for a given timestamp":"\u8FD4\u56DE\u7D66\u5B9A\u6642\u9593\u6233\u7684\u683C\u5F0F\u5316\u6642\u9593","Format time":"\u683C\u5F0F\u5316\u6642\u9593","Time":"\u6642\u9593","Format":"\u683C\u5F0F","To fixed":"\u56FA\u5B9A","Pad start":"\u586B\u5145\u958B\u59CB","Text":"\u6587\u5B57","Target length":"\u76EE\u6A19\u9577\u5EA6","Pad string":"\u586B\u5145\u5B57\u4E32","Default player name":"\u9810\u8A2D\u73A9\u5BB6\u540D\u7A31","Leaderboard":"\u6392\u884C\u699C","Best score":"\u6700\u4F73\u5206\u6578","Score format":"\u5206\u6578\u683C\u5F0F","Prefix":"\u524D\u7DB4","Suffix":"\u5F8C\u7DB4","Round to decimal point":"\u56DB\u6368\u4E94\u5165\u81F3\u5C0F\u6578\u9EDE","Score label":"\u5206\u6578\u6A19\u7C64","Best score label":"\u6700\u4F73\u5206\u6578\u6A19\u7C64","the score.":"\u5206\u6578\u3002","Score":"\u5206\u6578","the score":"\u5206\u6578","the best score of the object.":"\u8A72\u7269\u4EF6\u7684\u6700\u4F73\u5206\u6578\u3002","the best score":"\u6700\u4F73\u5206\u6578","Return the formated score.":"\u8FD4\u56DE\u683C\u5F0F\u5316\u7684\u5206\u6578\u3002","Format score":"\u683C\u5F0F\u5316\u5206\u6578","the default player name.":"\u9810\u8A2D\u73A9\u5BB6\u540D\u7A31\u3002","the default player name":"\u9810\u8A2D\u73A9\u5BB6\u540D\u7A31","the player name.":"\u73A9\u5BB6\u540D\u7A31\u3002","Player name":"\u73A9\u5BB6\u540D\u7A31","the player name":"\u73A9\u5BB6\u540D\u7A31","Check if the restart button of the dialog is clicked.":"\u6AA2\u67E5\u5C0D\u8A71\u6846\u7684\u91CD\u65B0\u958B\u59CB\u6309\u9215\u662F\u5426\u88AB\u9EDE\u64CA\u3002","Restart button clicked":"\u91CD\u65B0\u958B\u59CB\u6309\u9215\u5DF2\u9EDE\u64CA","Restart button of _PARAM0_ is clicked":"_PARAM0_ \u7684\u91CD\u65B0\u958B\u59CB\u6309\u9215\u88AB\u9EDE\u64CA","Check if the next button of the dialog is clicked.":"\u6AA2\u67E5\u5C0D\u8A71\u6846\u7684\u4E0B\u4E00\u6B65\u6309\u9215\u662F\u5426\u88AB\u9EDE\u64CA\u3002","Next button clicked":"\u4E0B\u4E00\u6B65\u6309\u9215\u5DF2\u9EDE\u64CA","Next button of _PARAM0_ is clicked":"_PARAM0_ \u7684\u4E0B\u4E00\u6B65\u6309\u9215\u88AB\u9EDE\u64CA","Check if the back button of the dialog is clicked.":"\u6AA2\u67E5\u5C0D\u8A71\u6846\u7684\u8FD4\u56DE\u6309\u9215\u662F\u5426\u88AB\u9EDE\u64CA\u3002","Back button clicked":"\u8FD4\u56DE\u6309\u9215\u5DF2\u9EDE\u64CA","Back button of _PARAM0_ is clicked":"_PARAM0_ \u7684\u8FD4\u56DE\u6309\u9215\u88AB\u9EDE\u64CA","Check if the score has been sucessfully submitted by the dialog.":"\u6AA2\u67E5\u5206\u6578\u662F\u5426\u5DF2\u901A\u904E\u5C0D\u8A71\u6846\u6210\u529F\u63D0\u4EA4\u3002","Score is submitted":"\u5206\u6578\u5DF2\u63D0\u4EA4","_PARAM0_ submitted a score":"_PARAM0_ \u63D0\u4EA4\u4E86\u4E00\u500B\u5206\u6578","the leaderboard of the object.":"\u8A72\u7269\u4EF6\u7684\u6392\u884C\u699C\u3002","the leaderboard":"\u6392\u884C\u699C","the title of the object.":"\u8A72\u7269\u4EF6\u7684\u6A19\u984C\u3002","Title":"\u6A19\u984C","the title":"\u8A72\u6A19\u984C","Fade in the decoration objects of the dialog.":"\u6DE1\u5165\u5C0D\u8A71\u6846\u7684\u88DD\u98FE\u7269\u4EF6\u3002","Fade in decorations":"\u6DE1\u5165\u88DD\u98FE","Fade in the decorations of _PARAM0_":"\u6DE1\u5165 _PARAM0_ \u7684\u88DD\u98FE","Fade out the decoration objects of the dialog.":"\u6DE1\u51FA\u5C0D\u8A71\u6846\u7684\u88DD\u98FE\u7269\u4EF6\u3002","Fade out decorations":"\u6DE1\u51FA\u88DD\u98FE","Fade out the decorations of _PARAM0_":"\u6DE1\u51FA _PARAM0_ \u7684\u88DD\u98FE","Check if the fade in animation of the decorations is finished.":"\u6AA2\u67E5\u88DD\u98FE\u7684\u6DE1\u5165\u52D5\u756B\u662F\u5426\u5B8C\u6210\u3002","Decorations are faded in":"\u88DD\u98FE\u5DF2\u6DE1\u5165","Fade in animation of _PARAM0_ is finished":"_PARAM0_ \u7684\u6DE1\u5165\u52D5\u756B\u5DF2\u5B8C\u6210","Check if the fade out animation of the decorations is finished.":"\u6AA2\u67E5\u88DD\u98FE\u7684\u6DE1\u51FA\u52D5\u756B\u662F\u5426\u5B8C\u6210\u3002","Decorations are faded out":"\u88DD\u98FE\u5DF2\u6DE1\u51FA","Fade out animation of _PARAM0_ is finished":"_PARAM0_ \u7684\u6DE1\u51FA\u52D5\u756B\u5DF2\u5B8C\u6210","Linear Movement":"\u7DDA\u6027\u904B\u52D5","Move objects on a straight line.":"\u6CBF\u76F4\u7DDA\u79FB\u52D5\u7269\u9AD4\u3002","Linear movement":"\u7DDA\u6027\u904B\u52D5","Speed on X axis":"X\u8EF8\u901F\u5EA6","Speed on Y axis":"Y\u8EF8\u901F\u5EA6","the speed on X axis of the object.":"\u7269\u9AD4\u5728 X \u8EF8\u4E0A\u7684\u901F\u5EA6\u3002","the speed on X axis":"X \u8EF8\u4E0A\u7684\u901F\u5EA6","the speed on Y axis of the object.":"\u7269\u9AD4\u5728 Y \u8EF8\u4E0A\u7684\u901F\u5EA6\u3002","the speed on Y axis":"Y \u8EF8\u4E0A\u7684\u901F\u5EA6","Move objects ahead according to their angle.":"\u6839\u64DA\u5176\u89D2\u5EA6\u79FB\u52D5\u7269\u9AD4\u3002","Linear movement by angle":"\u6839\u64DA\u89D2\u5EA6\u7684\u7DDA\u6027\u904B\u52D5","Linked Objects Tools":"\u95DC\u806F\u5C0D\u8C61\u5DE5\u5177","Conditions to use Linked Objects as a graph and a path finding movement behavior.":"\u689D\u4EF6\u4F7F\u7528\u95DC\u806F\u5C0D\u8C61\u4F5C\u70BA\u5716\u5F62\u548C\u8DEF\u5F91\u67E5\u627E\u904B\u52D5\u884C\u70BA\u3002","Link to neighbors on a rectangular grid.":"\u93C8\u63A5\u5230\u77E9\u5F62\u7DB2\u683C\u4E0A\u7684\u9130\u5C45\u3002","Link to neighbors on a rectangular grid":"\u93C8\u63A5\u5230\u77E9\u5F62\u7DB2\u683C\u4E0A\u7684\u9130\u5C45","Link _PARAM1_ and its neighbors _PARAM2_ on a rectangular grid with cell dimensions: _PARAM3_; _PARAM4_":"\u5728\u77E9\u5F62\u7DB2\u683C\u4E0A\u4FF1\u6A02\u90E8\u92B7_ PARAM1 _\u53CA\u5176\u9130\u5C45_ PARAM2 _\uFF0C\u55AE\u5143\u683C\u5C3A\u5BF8\uFF1A_ PARAM3 _;_ PARAM4_","Neighbor":"\u9130\u5C45","The 2 objects can't be the same.":"\u9019\u5169\u500B\u5C0D\u8C61\u4E0D\u80FD\u76F8\u540C\u3002","Cell width":"\u55AE\u5143\u683C\u5BEC\u5EA6","Cell height":"\u7D30\u80DE\u9AD8\u5EA6","Allows diagonals":"\u5141\u8A31\u5C0D\u89D2\u7DDA","Link to neighbors on a hexagonal grid.":"\u93C8\u63A5\u5230\u516D\u89D2\u5F62\u7DB2\u683C\u4E0A\u7684\u9130\u5C45\u3002","Link to neighbors on a hexagonal grid":"\u5728\u516D\u89D2\u5F62\u7DB2\u683C\u4E0A\u93C8\u63A5\u9130\u5C45","Link _PARAM1_ and its neighbors _PARAM2_ on a hexagonal grid with cell dimensions: _PARAM3_; _PARAM4_":"\u5728\u516D\u89D2\u5F62\u7DB2\u683C\u4E0A\u4FF1\u6A02\u90E8\u92B7_ PARAM1 _\u53CA\u5176\u9130\u5C45_ PARAM2 _\uFF0C\u55AE\u5143\u683C\u5C3A\u5BF8\uFF1A_ PARAM3 _;_ PARAM4_","Link to neighbors on an isometric grid.":"\u5728\u7B49\u8EF8\u7DB2\u683C\u4E0A\u93C8\u63A5\u9130\u5C45","Link to neighbors on an isometric grid":"\u5728\u7B49\u8EF8\u7DB2\u683C\u4E0A\u93C8\u63A5\u9130\u5C45","Link _PARAM1_ and its neighbors _PARAM2_ on an isometric grid with cell dimensions: _PARAM3_; _PARAM4_":"\u5728\u7B49\u8EF8\u7DB2\u683C\u4E0A\u4FF1\u6A02\u90E8\u92B7_PARAM1_\u53CA\u5176\u9130\u5C45_PARAM2_\uFF0C\u55AE\u5143\u683C\u5C3A\u5BF8\uFF1A_PARAM3_;_PARAM4_","Can reach through a given cost sum.":"\u53EF\u4EE5\u901A\u904E\u7D66\u5B9A\u7684\u6210\u672C\u7E3D\u548C\u5230\u9054\u3002","Can reach with links limited by cost":"\u53EF\u4EE5\u9650\u5236\u6210\u672C\u7684\u93C8\u63A5\u3002","Take into account all \"_PARAM1_\" that can reach _PARAM2_ with initial value from the variable _PARAM3_ through at most a cost of: _PARAM4_ according to cost class: _PARAM5_ and at most _PARAM6_ links depth":"\u6839\u64DA\u6210\u672C\u985E\u5225\uFF1A_PARAM5_\u4EE5\u53CA\u6700\u591A_PARAM6_\u500B\u93C8\u63A5\u6DF1\u5EA6\uFF0C\u8003\u616E\u6240\u6709\u53EF\u4EE5\u901A\u904E\u8B8A\u91CF_PARAM3_\u7684\u521D\u59CB\u503C\u5230\u9054_PARAM2_\u7684\u6240\u6709\"_PARAM1_\"\uFF0C\u6700\u591A\u82B1\u8CBB\uFF1A_PARAM4_","Pick these objects...":"\u9078\u64C7\u9019\u4E9B\u5C0D\u8C61...","if they can reach this object":"\u5982\u679C\u4ED6\u5011\u53EF\u4EE5\u5230\u9054\u9019\u500B\u5C0D\u8C61","Initial length variable":"\u521D\u59CB\u9577\u5EA6\u8B8A\u91CF","Start to 0 if left empty":"\u5982\u679C\u7559\u7A7A\u5247\u70BA0","Maximum cost":"\u6700\u5927\u6210\u672C","Cost class":"\u6210\u672C\u985E\u5225","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost must be positive.":"\u7559\u7A7A\u4EE5\u4F7F\u4E00\u5207\u90FD\u53EF\u4EE5\u901A\u904E\uFF0C\u6210\u672C=1\u3002\u67E5\u770Blinktools_Cost\u7684\u8B8A\u91CF\u5B50\uFF0C\u6C92\u6709\u5B50\u4EE3\u8868\u4E0D\u53EF\u901A\u904E\uFF0C\u6210\u672C\u5FC5\u9808\u662F\u6B63\u6578\u3002","Maximum depth":"\u6700\u5927\u6DF1\u5EA6","Ignore first node cost":"\u7121\u8996\u7B2C\u4E00\u7BC0\u9EDE\u6210\u672C","Can reach through a given number of links.":"\u53EF\u4EE5\u901A\u904E\u7D66\u5B9A\u6578\u91CF\u7684\u93C8\u63A5\u5230\u9054\u3002","Can reach with links limited by length":"\u53EF\u4EE5\u901A\u904E\u9577\u5EA6\u9650\u5236\u7684\u93C8\u63A5\u5230\u9054","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through at most _PARAM3_ links according to cost class: _PARAM4_":"\u91DD\u5C0D\u901A\u904E\u6700\u591A_PARAM3_\u689D\u93C8\u8DEF\u5230\u9054_PARAM2_\u7684\u6240\u6709\"_PARAM1_\"\u9032\u884C\u8003\u616E\uFF0C\u6839\u64DA\u6210\u672C\u985E\u5225\uFF1A_PARAM4_","Maximum link length":"\u6700\u5927\u93C8\u8DEF\u9577\u5EA6","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost can be 0 or 1.":"\u7559\u7A7A\u4EE5\u4F7F\u6210\u672C=1\u7684\u6240\u6709\u4E8B\u7269\u90FD\u53EF\u901A\u904E\u3002\u5B83\u67E5\u627Elinktools_Cost\u7684\u8B8A\u91CFchildren\u3002\u6C92\u6709\u5B50\u7D1A\u8868\u793A\u4E0D\u53EF\u901A\u904E\uFF0C\u6210\u672C\u53EF\u4EE5\u662F0\u62161\u3002","Can reach through links.":"\u901A\u904E\u93C8\u8DEF\u5230\u9054\u3002","Can reach":"\u53EF\u4EE5\u5230\u9054","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through links":"\u8003\u616E\u6240\u6709\u900F\u904E\u93C8\u8DEF\u53EF\u5230\u9054_PARAM2_\u7684\u6240\u6709\"_PARAM1_\"","Cost sum.":"\u6210\u672C\u7E3D\u548C\u3002","Cost sum":"\u6210\u672C\u7E3D\u548C","The object will move from one object instance to another according to how they are linked to one another to reach a targeted object.":"\u7269\u4EF6\u5C07\u6839\u64DA\u5B83\u5011\u76F8\u4E92\u93C8\u63A5\u4EE5\u5230\u9054\u76EE\u6A19\u7269\u4EF6\u7684\u65B9\u5F0F\u5F9E\u4E00\u500B\u5C0D\u8C61\u5BE6\u4F8B\u79FB\u52D5\u5230\u53E6\u4E00\u500B\u5C0D\u8C61\u5BE6\u4F8B\u3002","Link path finding":"\u93C8\u8DEF\u8DEF\u5F91\u67E5\u627E","Angle offset":"\u89D2\u5EA6\u504F\u79FB","Is following a path":"\u6B63\u5728\u8DDF\u8E64\u8DEF\u5F91","Next node index":"\u4E0B\u4E00\u7BC0\u9EDE\u7D22\u5F15","Next node X":"\u4E0B\u4E00\u7BC0\u9EDEX","Next node Y":"\u4E0B\u4E00\u500B\u7BC0\u9EDE Y","Is at a node":"\u5728\u7BC0\u9EDE","Next node angle":"\u4E0B\u4E00\u500B\u7BC0\u9EDE\u89D2\u5EA6","Move the object to a position.":"\u5C07\u7269\u4EF6\u79FB\u52D5\u5230\u4E00\u500B\u4F4D\u7F6E\u3002","Move to a position":"\u79FB\u52D5\u5230\u4E00\u500B\u4F4D\u7F6E","Move _PARAM0_ to _PARAM3_ passing by _PARAM2_ using cost class _PARAM4_":"\u5C07 _PARAM0_ \u79FB\u52D5\u5230 _PARAM3_ \u7D93\u904E _PARAM2_ \u4F7F\u7528\u6210\u672C\u985E\u5225 _PARAM4_","Crossable objects":"\u53EF\u7A7F\u8D8A\u7269\u9AD4","Destination objects":"\u76EE\u7684\u5730\u7269\u9AD4","Check if the object position is the on a path node.":"\u6AA2\u67E5\u7269\u4EF6\u4F4D\u7F6E\u662F\u5426\u5728\u8DEF\u5F91\u7BC0\u9EDE\u4E0A\u3002","_PARAM0_ is at a node":"_PARAM0_ \u5728\u7BC0\u9EDE\u4E0A","Forget the path.":"\u5FD8\u8A18\u8DEF\u5F91\u3002","Forget the path":"\u5FD8\u8A18\u8DEF\u5F91","_PARAM0_ forgets the path":"_PARAM0_ \u5FD8\u8A18\u8DEF\u5F91","Set next node index":"\u8A2D\u5B9A\u4E0B\u4E00\u500B\u7BC0\u9EDE\u7D22\u5F15","Set next node index of _PARAM0_ to _PARAM2_":"\u5C07 _PARAM0_ \u7684\u4E0B\u4E00\u500B\u7BC0\u9EDE\u7D22\u5F15\u8A2D\u7F6E\u70BA _PARAM2_","Node index":"\u7BC0\u9EDE\u7D22\u5F15","Check if the object is moving.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u6B63\u5728\u79FB\u52D5\u3002","Is moving":"\u6B63\u5728\u79FB\u52D5","_PARAM0_ is moving":"_PARAM0_ \u6B63\u5728\u79FB\u52D5","Check if a path has been found.":"\u6AA2\u67E5\u662F\u5426\u5DF2\u627E\u5230\u8DEF\u5F91\u3002","Path found":"\u8DEF\u5F91\u5DF2\u627E\u5230","A path has been found for _PARAM0_":"\u70BA _PARAM0_ \u627E\u5230\u4E86\u8DEF\u5F91","Check if the destination was reached.":"\u6AA2\u67E5\u76EE\u7684\u5730\u662F\u5426\u5DF2\u9054\u3002","Destination reached":"\u76EE\u7684\u5730\u5DF2\u9054","_PARAM0_ reached its destination":"_PARAM0_ \u5DF2\u5230\u9054\u5176\u76EE\u7684\u5730","Speed of the object on the path.":"\u7269\u4EF6\u5728\u8DEF\u5F91\u4E0A\u7684\u901F\u5EA6\u3002","Get the number of waypoints on the path.":"\u7372\u53D6\u8DEF\u5F91\u4E0A\u7684\u8DEF\u5F91\u9EDE\u6578\u91CF\u3002","Node count":"\u7BC0\u9EDE\u6578\u91CF","Waypoint X position.":"\u8DEF\u5F91\u9EDEX\u4F4D\u7F6E\u3002","Node X":"\u7BC0\u9EDEX","Waypoint index":"\u8DEF\u5F91\u9EDE\u7D22\u5F15","Node Y":"\u7BC0\u9EDEY","Next waypoint index.":"\u4E0B\u4E00\u500B\u8DEF\u5F91\u9EDE\u7D22\u5F15\u3002","Next waypoint X position.":"\u4E0B\u4E00\u500B\u8DEF\u5F91\u9EDEX\u4F4D\u7F6E\u3002","Next waypoint Y position.":"\u4E0B\u4E00\u500B\u8DEF\u5F91\u9EDEY\u4F4D\u7F6E\u3002","Destination X position.":"\u76EE\u7684\u5730X\u4F4D\u7F6E\u3002","Destination Y position.":"\u76EE\u7684\u5730Y\u4F4D\u7F6E\u3002","the acceleration of the object.":"\u7269\u4EF6\u7684\u52A0\u901F\u5EA6\u3002","the maximum speed of the object.":"\u7269\u4EF6\u7684\u6700\u5927\u901F\u5EA6\u3002","the maximum speed":"\u6700\u5927\u901F\u5EA6","the rotation speed of the object.":"\u7269\u4EF6\u7684\u65CB\u8F49\u901F\u5EA6\u3002","the rotation speed":"\u65CB\u8F49\u901F\u5EA6","the rotation offset applied when moving the object.":"\u79FB\u52D5\u7269\u4EF6\u6642\u61C9\u7528\u7684\u65CB\u8F49\u504F\u79FB\u3002","the rotation angle offset on the path":"\u8DEF\u5F91\u4E0A\u7684\u65CB\u8F49\u89D2\u5EA6\u504F\u79FB","Check if the object is rotated when traveling on its path.":"\u6AA2\u67E5\u7269\u4EF6\u5728\u6CBF\u5176\u8DEF\u5F91\u79FB\u52D5\u6642\u662F\u5426\u5DF2\u65CB\u8F49\u3002","Object rotated":"\u7269\u4EF6\u5DF2\u65CB\u8F49","_PARAM0_ is rotated when traveling on its path":"_PARAM0_ \u5728\u6CBF\u5176\u8DEF\u5F91\u65C5\u884C\u6642\u5DF2\u65CB\u8F49","Enable or disable rotation of the object on the path.":"\u555F\u7528\u6216\u7981\u7528\u7269\u4EF6\u5728\u8DEF\u5F91\u4E0A\u7684\u65CB\u8F49\u3002","Rotate the object":"\u65CB\u8F49\u7269\u9AD4","Enable rotation of _PARAM0_ on the path: _PARAM2_":"\u555F\u7528 _PARAM0_ \u5728\u8DEF\u5F91\u4E0A\u7684\u65CB\u8F49\uFF1A _PARAM2_","MQTT Client (advanced)":"MQTT \u5BA2\u6236\u7AEF\uFF08\u9AD8\u7D1A\uFF09","An MQTT client for GDevelop: allow connections to a MQTT server and send/receive messages.":"GDevelop \u7684 MQTT \u5BA2\u6236\u7AEF\uFF1A\u5141\u8A31\u9023\u63A5\u5230 MQTT \u670D\u52D9\u5668\u4E26\u767C\u9001/\u63A5\u6536\u6D88\u606F\u3002","Triggers if the client is connected to an MQTT broker server.":"\u5982\u679C\u5BA2\u6236\u7AEF\u9023\u63A5\u5230 MQTT \u4EE3\u7406\u4F3A\u670D\u5668\uFF0C\u5247\u89F8\u767C\u3002","Is connected to a broker?":"\u9023\u63A5\u5230\u4EE3\u7406\u55CE\uFF1F","Client connected to a broker":"\u5BA2\u6236\u7AEF\u9023\u63A5\u5230\u4EE3\u7406","Connects to an MQTT broker.":"\u9023\u63A5\u5230 MQTT \u4EE3\u7406\u3002","Connect to a broker":"\u9023\u63A5\u5230\u4EE3\u7406","Connect to MQTT broker _PARAM1_ with parameters _PARAM2_ (secure connection: _PARAM3_)":"\u4F7F\u7528 _PARAM2_ \u53C3\u6578\u9023\u63A5\u5230 MQTT \u4EE3\u7406 _PARAM1_\uFF08\u5B89\u5168\u9023\u7DDA\uFF1A_PARAM3_\uFF09","Host port":"\u4E3B\u6A5F\u9023\u63A5\u57E0","Settings as JSON":"\u8A2D\u5B9A\u70BA JSON","You can find the list of settings at [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client). \nAn example of valid configuration would be `\" \"clientId \": \"myUserName \" \"`.":"\u60A8\u53EF\u4EE5\u5728 [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client) \u627E\u5230\u8A2D\u5B9A\u6E05\u55AE\u3002 \n\u4E00\u500B\u6709\u6548\u8A2D\u5B9A\u7BC4\u4F8B\u70BA `\" \"clientId \": \"myUserName \" `\u3002","Use secure WebSockets?":"\u4F7F\u7528\u5B89\u5168 WebSockets\uFF1F","Disconnects from the current MQTT broker.":"\u8207\u7576\u524D MQTT \u4EE3\u7406\u65B7\u958B\u9023\u63A5\u3002","Disconnect from broker":"\u8207\u4EE3\u7406\u65B7\u958B\u9023\u63A5","Disconnect from MQTT broker (force: _PARAM1_)":"\u5F9E MQTT \u4EE3\u7406\u65B7\u958B\u9023\u63A5\uFF08\u5F37\u5236\uFF1A_PARAM1_\uFF09","Force end the connection?":"\u5F37\u5236\u7D50\u675F\u9023\u63A5\uFF1F","By default, MQTT waits for pending messages or messages in the process of being sent to finish being sent before ending the connection. Use this to cancel any request and immediately shutdown the connection.":"\u9810\u8A2D\u60C5\u6CC1\u4E0B\uFF0CMQTT \u7B49\u5019\u5F85\u8655\u7406\u7684\u8A0A\u606F\u6216\u6B63\u5728\u50B3\u9001\u8A0A\u606F\u5B8C\u6210\u50B3\u9001\u5F8C\u624D\u6703\u7D50\u675F\u9023\u63A5\u3002\u4F7F\u7528\u6B64\u4F86\u53D6\u6D88\u4EFB\u4F55\u8ACB\u6C42\u4E26\u7ACB\u5373\u95DC\u9589\u9023\u63A5\u3002","Publishes a message on a topic.":"\u5728\u4E3B\u984C\u4E0A\u767C\u5E03\u8A0A\u606F\u3002","Publish message":"\u767C\u5E03\u8A0A\u606F","Publish variable _PARAM1_ on topic _PARAM2_ (QoS: _PARAM3_)":"\u5728\u4E3B\u984C _PARAM2_ \u4E0A\u767C\u5E03\u8B8A\u6578 _PARAM1_\uFF08QoS\uFF1A_PARAM3_\uFF09","Text to publish":"\u8981\u767C\u5E03\u7684\u6587\u5B57","Topic to publish to":"\u8981\u767C\u5E03\u81F3\u7684\u4E3B\u984C","The QoS":"\u670D\u52D9\u54C1\u8CEA\uFF08QoS\uFF09","See [this](https://github.com/mqttjs/MQTT.js#qos) for more details.":"\u66F4\u591A\u8A73\u60C5\u8ACB\u53C3\u95B1 [\u6B64](https://github.com/mqttjs/MQTT.js#qos)\u3002","Should the message be retained?":"\u8A0A\u606F\u662F\u5426\u61C9\u4FDD\u7559\uFF1F","When a message is retained, it will be sent to every client that subscribe to the topic. Only one message can be retained per topic, if another retained message is sent it will overwrite the previous one. \nRead more [here](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages).":"\u7576\u8A0A\u606F\u88AB\u4FDD\u7559\u6642\uFF0C\u5C07\u767C\u9001\u7D66\u8A02\u95B1\u8A72\u4E3B\u984C\u7684\u6240\u6709\u5BA2\u6236\u7AEF\u3002\u6BCF\u500B\u4E3B\u984C\u53EA\u80FD\u4FDD\u7559\u4E00\u689D\u8A0A\u606F\uFF0C\u5982\u679C\u767C\u9001\u53E6\u4E00\u689D\u4FDD\u7559\u7684\u8A0A\u606F\uFF0C\u5C07\u8986\u84CB\u5148\u524D\u7684\u8A0A\u606F\u3002 \n\u5728\u6B64[\u9801\u9762](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages)\u95B1\u8B80\u66F4\u591A\u3002","Subcribe to a topic. All messages published on that topic will be received.":"\u8A02\u95B1\u4E00\u500B\u4E3B\u984C\u3002\u5C07\u6536\u5230\u8A72\u4E3B\u984C\u4E0A\u767C\u5E03\u7684\u6240\u6709\u8A0A\u606F\u3002","Subscribe to a topic":"\u8A02\u95B1\u4E00\u500B\u4E3B\u984C","Subscribe to topic _PARAM1_ with QoS at _PARAM2_ and dataloss _PARAM3_":"\u4EE5_QoS_\u548C\u6578\u64DA\u4E1F\u5931_PARAM3_\u8A02\u95B1\u4E3B\u984C_PARAM1_","The topic to subscribe to":"\u8A02\u95B1\u7684\u4E3B\u984C","See https://github.com/mqttjs/MQTT.js#qos for more details":"\u53C3\u898Bhttps://github.com/mqttjs/MQTT.js#qos \u4EE5\u7372\u53D6\u66F4\u591A\u7D30\u7BC0","Is dataloss allowed?":"\u5141\u8A31\u6578\u64DA\u4E1F\u5931\u55CE\uFF1F","See https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode for more details":"\u53C3\u898Bhttps://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode \u4EE5\u7372\u53D6\u66F4\u591A\u7D30\u7BC0","Unsubcribe from a topic. No more messages from this topic will be received.":"\u53D6\u6D88\u8A02\u95B1\u4E00\u500B\u4E3B\u984C\u3002\u5C07\u4E0D\u518D\u63A5\u6536\u6B64\u4E3B\u984C\u7684\u4EFB\u4F55\u6D88\u606F\u3002","Unsubscribe from a topic":"\u53D6\u6D88\u8A02\u95B1\u4E00\u500B\u4E3B\u984C","Unsubscribe from topic _PARAM1_":"\u53D6\u6D88\u8A02\u95B1\u4E3B\u984C_PARAM1_","Triggers whenever a message was received. Note that you first need to subcribe to a topic in order to get messages from it.":"\u6BCF\u7576\u6536\u5230\u6D88\u606F\u6642\u89F8\u767C\u3002\u8ACB\u6CE8\u610F\uFF0C\u60A8\u9700\u8981\u9996\u5148\u8A02\u95B1\u4E3B\u984C\u624D\u80FD\u6536\u5230\u4F86\u81EA\u5B83\u7684\u6D88\u606F\u3002","On message":"\u6536\u5230\u6D88\u606F\u6642","Message received from topic _PARAM1_":"\u4F86\u81EA\u4E3B\u984C_PARAM1_\u7684\u6D88\u606F\u5DF2\u6536\u5230","The topic to listen to":"\u8981\u76E3\u807D\u7684\u4E3B\u984C","Get the last received message of a topic.":"\u7372\u53D6\u4E3B\u984C\u7684\u6700\u5F8C\u63A5\u6536\u6D88\u606F\u3002","Get last message":"\u7372\u53D6\u6700\u5F8C\u6D88\u606F","The topic to get the message from":"\u8981\u5F9E\u4E2D\u7372\u5F97\u6D88\u606F\u7684\u4E3B\u984C","Gets the last error. Returns an empty string if there was no errors.":"\u7372\u53D6\u6700\u5F8C\u932F\u8AA4\u3002\u5982\u679C\u6C92\u6709\u932F\u8AA4\uFF0C\u5247\u8FD4\u56DE\u7A7A\u5B57\u7B26\u4E32\u3002","Get the last error":"\u7372\u53D6\u6700\u5F8C\u4E00\u500B\u932F\u8AA4","Marching Squares (experimental)":"Marching Squares\uFF08\u5BE6\u9A57\u6027\uFF09","Allow to build a \"scalar field\" and draw contour lines of it: useful for fog of wars, liquid effects, paint the ground, etc...":"\u5141\u8A31\u69CB\u5EFA\u201C\u6A19\u91CF\u5834\u201D\u4E26\u7E6A\u88FD\u5176\u7B49\u9AD8\u7DDA\uFF1A\u7528\u65BC\u8FF7\u9727\u6548\u679C\u3001\u6DB2\u9AD4\u6548\u679C\u3001\u5730\u9762\u7E6A\u88FD\u7B49\u975E\u5E38\u6709\u7528\u3002","Define the scalar field painter library JavaScript code.":"\u5B9A\u7FA9\u7D14\u91CF\u5834\u7E6A\u88FD\u5EAB\u7684JavaScript\u4EE3\u78BC\u3002","Define scalar field painter library":"\u5B9A\u7FA9\u7D14\u91CF\u5834\u7E6A\u88FD\u5EAB","Define the scalar field painter library JavaScript code":"\u5B9A\u7FA9\u7D14\u91CF\u5834\u7E6A\u88FD\u5EAB\u7684JavaScript\u4EE3\u78BC","Add to a Shape painter object and use the actions to draw a field. Useful for fog of wars, liquid effects (water, lava, blobs...).":"\u6DFB\u52A0\u5230\u5F62\u72C0\u7E6A\u88FD\u5668\u5C0D\u8C61\u4E26\u4F7F\u7528\u64CD\u4F5C\u4F86\u7E6A\u88FD\u4E00\u500B\u5B57\u6BB5\u3002\u7528\u65BC\u8FF7\u9727, \u6DB2\u9AD4\u6548\u679C(\u6C34, \u7194\u5CA9, \u6591\u9EDE\u2026)\u3002","Marching squares painter":"\u884C\u9032\u65B9\u683C\u7E6A\u88FD\u5668","Area left bound":"\u5340\u57DF\u5DE6\u754C","Area top bound":"\u5340\u57DF\u4E0A\u754C","Area right bound":"\u5340\u57DF\u53F3\u754C","Area bottom bound":"\u5340\u57DF\u4E0B\u754C","Fill outside":"\u586B\u5145\u5230\u5916\u90E8","Contour threshold":"\u7B49\u9AD8\u7DDA\u95BE\u503C","Must only draw what is on the screen":"\u5FC5\u9808\u53EA\u7E6A\u88FD\u5728\u87A2\u5E55\u4E0A\u7684\u5167\u5BB9","Extend behavior class":"\u64F4\u5C55\u884C\u70BA\u985E\u5225","Extend object instance prototype.":"\u64F4\u5C55\u7269\u4EF6\u5BE6\u4F8B\u539F\u578B\u3002","Extend object instance prototype":"\u64F4\u5C55\u7269\u4EF6\u5BE6\u4F8B\u539F\u578B","Extend _PARAM0_ prototype":"\u64F4\u5C55 _PARAM0_ \u539F\u578B","Clear the field by setting every values to 0.":"\u901A\u904E\u5C07\u6240\u6709\u503C\u8A2D\u7F6E\u70BA0\u4F86\u6E05\u9664\u5B57\u6BB5\u3002","Clear the field":"\u6E05\u9664\u5B57\u6BB5","Clear the field of _PARAM0_":"\u6E05\u9664 _PARAM0_ \u7684\u5B57\u6BB5","Unfill an area of the field from a given location until a given height is reached.":"\u5F9E\u7D66\u5B9A\u4F4D\u7F6E, \u76F4\u5230\u9054\u5230\u7D66\u5B9A\u9AD8\u5EA6, \u6E05\u7A7A\u4E00\u500B\u5340\u57DF\u3002","Unfill area":"\u6E05\u7A7A\u5340\u57DF","Unfill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a minimum of _PARAM4_ with thickness: _PARAM5_":"\u5F9E x: _PARAM2_, y: _PARAM3_ \u958B\u59CB\uFF0C\u5C07 _PARAM0_ \u7684\u5B57\u6BB5\u6E05\u7A7A\u5230\u4E0D\u4F4E\u65BC _PARAM4_ \u7684\u503C\uFF0C\u539A\u5EA6\u70BA: _PARAM5_","Minimum height":"\u6700\u5C0F\u9AD8\u5EA6","Contour thickness":"\u8F2A\u5ED3\u539A\u5EA6","Capping radius ratio":"\u5C01\u9589\u534A\u5F91\u6BD4","Small values allow quicker process, but can result to tearing. Try values around 8.":"\u5C0F\u503C\u5141\u8A31\u66F4\u5FEB\u7684\u8655\u7406\uFF0C\u4F46\u53EF\u80FD\u5C0E\u81F4\u6495\u88C2\u3002\u8A66\u8A66\u503C\u7D048\u3002","Fill an area of the field from a given location until a given height is reached.":"\u5F9E\u7D66\u5B9A\u4F4D\u7F6E\u586B\u5145\u4E00\u500B\u5340\u57DF\uFF0C\u76F4\u5230\u9054\u5230\u7D66\u5B9A\u9AD8\u5EA6\u3002","Fill area":"\u586B\u5145\u5340\u57DF","Fill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a maximum of _PARAM4_ with thickness: _PARAM5_":"\u5F9E x: _PARAM2_, y: _PARAM3_ \u958B\u59CB\uFF0C\u5C07 _PARAM0_ \u7684\u5B57\u6BB5\u586B\u5145\u5230\u4E0D\u9AD8\u65BC _PARAM4_ \u7684\u503C\uFF0C\u539A\u5EA6\u70BA: _PARAM5_","Maximum height":"\u6700\u5927\u9AD8\u5EA6","Cap every value of the field to a range.":"\u9650\u5236\u5B57\u6BB5\u7684\u6BCF\u500B\u503C\u5728\u4E00\u5B9A\u7BC4\u570D\u5167\u3002","Clamp the field":"\u9650\u5236\u5B57\u6BB5","Clamp the field of _PARAM0_ from: _PARAM2_ to: _PARAM3_":"\u5C07 _PARAM0_ \u7684\u5B57\u6BB5\u9650\u5236\u5728: _PARAM2_ \u5230: _PARAM3_","Minimum":"\u6700\u5C0F\u503C","Maximum":"\u6700\u5927\u503C","Apply an affine on the field values.":"\u5728\u5B57\u6BB5\u503C\u4E0A\u61C9\u7528\u4EFF\u5C04\u8B8A\u63DB\u3002","Transform the field":"\u8F49\u63DB\u5B57\u6BB5","Transform the field of _PARAM0_ with a coefficient: _PARAM2_ and an offset: _PARAM3_":"\u7528\u4FC2\u6578: _PARAM2_ \u548C\u504F\u79FB: _PARAM3_ \u8F49\u63DB _PARAM0_ \u7684\u5B57\u6BB5","Coefficient":"\u4FC2\u6578","Offset":"\u504F\u79FB","Add a hill to the field.":"\u5411\u5B57\u6BB5\u6DFB\u52A0\u4E00\u500B\u5C71\u4E18\u3002","Add a hill":"\u6DFB\u52A0\u5C71\u4E18","Add a hill to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, _PARAM4_, radius: _PARAM5_, opacity: _PARAM6_ using: _PARAM8_":"\u5C07\u5C71\u4E18\u6DFB\u52A0\u5230 _PARAM0_ \u7684\u5B57\u6BB5\uFF0C\u4E2D\u5FC3: _PARAM2_, _PARAM3_, _PARAM4_, \u534A\u5F91: _PARAM5_, \u4E0D\u900F\u660E\u5EA6: _PARAM6_ \u4F7F\u7528: _PARAM8_","The hill height at the center, a value of 1 or less means a flat hill.":"\u4E2D\u5FC3\u7684\u5C71\u4E18\u9AD8\u5EA6\uFF0C\u503C\u70BA1\u6216\u66F4\u5C11\u8868\u793A\u5E73\u5766\u5C71\u4E18\u3002","The hill height is 1 at this radius.":"\u6B64\u534A\u5F91\u5167\u7684\u5C71\u4E18\u9AD8\u5EA6\u70BA1\u3002","Opacity":"\u4E0D\u900F\u660E\u5EA6","Set to 1 to apply the hill instantly or repeat this action with a lower value to make is progressive.":"\u8A2D\u7F6E\u70BA1\u4EE5\u7ACB\u5373\u61C9\u7528\u5C71\u4E18\uFF0C\u6216\u4F7F\u7528\u8F03\u4F4E\u7684\u503C\u91CD\u8907\u6B64\u64CD\u4F5C\u4EE5\u4F7F\u5176\u6F38\u9032\u3002","Operation":"\u64CD\u4F5C","Add a disk to the field.":"\u5411\u5B57\u6BB5\u6DFB\u52A0\u4E00\u500B\u5713\u76E4\u3002","Add a disk":"\u6DFB\u52A0\u5713\u76E4","Add a disk to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_ using: _PARAM6_":"\u5C07\u5713\u76E4\u6DFB\u52A0\u5230 _PARAM0_ \u7684\u5B57\u6BB5\uFF0C\u4E2D\u5FC3: _PARAM2_, _PARAM3_, \u534A\u5F91: _PARAM4_ \u4F7F\u7528: _PARAM6_","The spike height is 1 at this radius.":"\u6B64\u534A\u5F91\u5167\u7684\u5C16\u5CF0\u9AD8\u5EA6\u70BA1\u3002","Mask a disk to the field.":"\u5C0D\u5B57\u6BB5\u9032\u884C\u906E\u7F69\u3002","Mask a disk":"\u906E\u7F69\u5713\u76E4","Mask a disk on the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_":"\u5C0D _PARAM0_ \u7684\u5B57\u6BB5\u9032\u884C\u5713\u76E4\u906E\u7F69\uFF0C\u4E2D\u5FC3: _PARAM2_, _PARAM3_, \u534A\u5F91: _PARAM4_","Add a line to the field.":"\u5411\u5B57\u6BB5\u6DFB\u52A0\u4E00\u689D\u7DDA\u3002","Add a line":"\u6DFB\u52A0\u7DDA","Add a line to the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_ using: _PARAM8_":"\u5F9E _PARAM2_ ; _PARAM3_ \u5230 _PARAM4_ ; _PARAM5_\uFF0C\u4EE5\u539A\u5EA6: _PARAM6_ \u4F7F\u7528: _PARAM8_ \u5411 _PARAM0_ \u7684\u5B57\u6BB5\u6DFB\u52A0\u4E00\u689D\u7DDA","X position of the start":"\u8D77\u59CB\u7684X\u4F4D\u7F6E","Y position of the start":"\u8D77\u59CB\u7684Y\u4F4D\u7F6E","X position of the end":"\u7D50\u675F\u7684X\u4F4D\u7F6E","Y position of the end":"\u7D50\u675F\u7684Y\u4F4D\u7F6E","Thickness":"\u539A\u5EA6","Mask a line to the field.":"\u5C0D\u5B57\u6BB5\u9032\u884C\u906E\u7F69\u3002","Mask a line":"\u906E\u7F69\u7DDA","Mask a line on the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_":"\u5C0D _PARAM0_ \u7684\u5B57\u6BB5\u9032\u884C\u7DDA\u906E\u7F69\uFF0C\u5F9E _PARAM2_ ; _PARAM3_ \u5230 _PARAM4_ ; _PARAM5_\uFF0C\u4F7F\u7528\u539A\u5EA6: _PARAM6_","Apply a given operation on every value of the field using the value from the other field at the same position.":"\u5C0D\u5B57\u6BB5\u7684\u6BCF\u500B\u503C\u61C9\u7528\u7D66\u5B9A\u64CD\u4F5C\uFF0C\u4F7F\u7528\u4F86\u81EA\u540C\u4E00\u4F4D\u7F6E\u7684\u53E6\u4E00\u5B57\u6BB5\u7684\u503C\u3002","Merge a field":"\u5408\u4F75\u4E00\u500B\u5B57\u6BB5","Merge _PARAM0_ with the field of _PARAM2_ using: _PARAM4_":"\u5C07 _PARAM0_ \u8207 _PARAM2_ \u7684\u5B57\u6BB5\u5408\u4F75\uFF0C\u4F7F\u7528: _PARAM4_","Field object":"\u5B57\u6BB5\u7269\u4EF6","Field behavior":"\u5B57\u6BB5\u884C\u70BA","Update the field hitboxes.":"\u66F4\u65B0\u5B57\u6BB5\u7684\u78B0\u649E\u6846\u3002","Update hitboxes":"\u66F4\u65B0\u78B0\u649E\u6846","Update the field hitboxes of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u5B57\u6BB5\u78B0\u649E\u6846","Draw the field contours.":"\u7E6A\u88FD\u5B57\u6BB5\u7684\u8F2A\u5ED3\u3002","Draw the contours":"\u7E6A\u88FD\u8F2A\u5ED3","Draw the field contours of _PARAM0_":"\u7E6A\u88FD _PARAM0_ \u7684\u5834\u57DF\u8F2A\u5ED3","Change the width of the field cells.":"\u66F4\u6539\u5834\u57DF\u55AE\u5143\u683C\u7684\u5BEC\u5EA6\u3002","Width of the cells":"\u55AE\u5143\u683C\u7684\u5BEC\u5EA6","Change the width of the field cells of _PARAM0_: _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u5834\u57DF\u55AE\u5143\u683C\u5BEC\u5EA6\uFF1A_PARAM2_","Change the height of the field cells.":"\u66F4\u6539\u5834\u57DF\u55AE\u5143\u683C\u7684\u9AD8\u5EA6\u3002","Height of the cells":"\u55AE\u5143\u683C\u7684\u9AD8\u5EA6","Change the height of the field cells of _PARAM0_: _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u5834\u57DF\u55AE\u5143\u683C\u9AD8\u5EA6\uFF1A_PARAM2_","Rebuild the field with the new dimensions.":"\u4F7F\u7528\u65B0\u5C3A\u5BF8\u91CD\u5EFA\u5834\u57DF\u3002","Rebuild the field":"\u91CD\u5EFA\u5834\u57DF","Rebuild the field _PARAM0_":"\u91CD\u5EFA\u5834\u57DF _PARAM0_","Fill outside or inside of the contours.":"\u586B\u5145\u8F2A\u5ED3\u7684\u5916\u90E8\u6216\u5167\u90E8\u3002","Fill outside of the contours of _PARAM0_: _PARAM2_":"\u586B\u5145 _PARAM0_ \u7684\u8F2A\u5ED3\u5916\u90E8\uFF1A_PARAM2_","Fill outside?":"\u586B\u5145\u5916\u90E8\uFF1F","Change the contour threshold.":"\u66F4\u6539\u8F2A\u5ED3\u95BE\u503C\u3002","Change the contour threshold of _PARAM0_: _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u8F2A\u5ED3\u95BE\u503C\uFF1A_PARAM2_","Change the field area bounds.":"\u66F4\u6539\u5834\u57DF\u5340\u57DF\u908A\u754C\u3002","Area bounds":"\u5340\u57DF\u908A\u754C","Change the field area bounds of _PARAM0_ left: _PARAM2_ top: _PARAM3_ right: _PARAM4_ bottom: _PARAM5_":"\u66F4\u6539 _PARAM0_ \u7684\u5834\u57DF\u5340\u57DF\u908A\u754C \u5DE6\uFF1A_PARAM2_ \u4E0A\uFF1A_PARAM3_ \u53F3\uFF1A_PARAM4_ \u4E0B\uFF1A_PARAM5_","Left bound":"\u5DE6\u908A\u754C","Top bound":"\u4E0A\u908A\u754C","Right bound":"\u53F3\u908A\u754C","Bottom bound":"\u4E0B\u908A\u754C","Area left bound of the field.":"\u5834\u57DF\u7684\u5340\u57DF\u5DE6\u908A\u754C\u3002","Area left":"\u5340\u57DF\u5DE6\u908A","Area top bound of the field.":"\u5834\u57DF\u7684\u5340\u57DF\u4E0A\u908A\u754C\u3002","Area top":"\u5340\u57DF\u4E0A\u908A","Area right bound of the field.":"\u5834\u57DF\u7684\u5340\u57DF\u53F3\u908A\u754C\u3002","Area right":"\u5340\u57DF\u53F3\u908A","Area bottom bound of the field.":"\u5834\u57DF\u7684\u5340\u57DF\u4E0B\u908A\u754C\u3002","Area bottom":"\u5340\u57DF\u4E0B\u908A","Width of the field cells.":"\u5834\u57DF\u55AE\u5143\u683C\u7684\u5BEC\u5EA6\u3002","Width of a cell":"\u55AE\u5143\u683C\u7684\u5BEC\u5EA6","Height of the field cells.":"\u5834\u57DF\u55AE\u5143\u683C\u7684\u9AD8\u5EA6\u3002","Height of a cell":"\u55AE\u5143\u683C\u7684\u9AD8\u5EA6","The number of cells on the x axis.":"x \u8EF8\u4E0A\u7684\u55AE\u5143\u683C\u6578\u91CF\u3002","Dimension X":"\u7DAD\u5EA6 X","At _PARAM2_; _PARAM3_ the field value of _PARAM0_ is greater than _PARAM4_":"\u5728 _PARAM2_; _PARAM3_ \u7684\u4F4D\u7F6E\uFF0C_PARAM0_ \u7684\u5834\u57DF\u503C\u5927\u65BC _PARAM4_","The number of cells on the y axis.":"y \u8EF8\u4E0A\u7684\u55AE\u5143\u683C\u6578\u91CF\u3002","Dimension Y":"\u7DAD\u5EA6 Y","The contour threshold.":"\u8F2A\u5ED3\u95BE\u503C\u3002","The normal X coordinate at a given location.":"\u5728\u7D66\u5B9A\u4F4D\u7F6E\u7684\u5E38\u614B X \u5750\u6A19\u3002","Normal X":"\u5E38\u614B X","X position of the point":"\u8A72\u9EDE\u7684 X \u4F4D\u7F6E","Y position of the point":"\u8A72\u9EDE\u7684 Y \u4F4D\u7F6E","The normal Y coordinate at a given location.":"\u5728\u7D66\u5B9A\u4F4D\u7F6E\u7684\u5E38\u614B Y \u5750\u6A19\u3002","Normal Y":"\u5E38\u614B Y","The normal Z coordinate at a given location.":"\u5728\u7D66\u5B9A\u4F4D\u7F6E\u7684\u5E38\u614B Z \u5750\u6A19\u3002","Normal Z":"\u5E38\u614B Z","Change the field value at a grid point.":"\u5728\u7DB2\u683C\u9EDE\u66F4\u6539\u5834\u57DF\u503C\u3002","Grid value":"\u7DB2\u683C\u503C","Change the field value of _PARAM0_ at the grid point _PARAM2_; _PARAM3_ to _PARAM4_":"\u5728\u7DB2\u683C\u9EDE _PARAM2_; _PARAM3_ \u66F4\u6539 _PARAM0_ \u7684\u5834\u57DF\u503C\u70BA _PARAM4_","X grid index":"X \u7DB2\u683C\u7D22\u5F15","Y grid index":"Y \u7DB2\u683C\u7D22\u5F15","Field value":"\u5834\u57DF\u503C","The field value at a grid point.":"\u5728\u7DB2\u683C\u9EDE\u7684\u5834\u57DF\u503C\u3002","The field value at a given location.":"\u5728\u7D66\u5B9A\u4F4D\u7F6E\u7684\u5834\u57DF\u503C\u3002","Check if the contours are filled outside.":"\u6AA2\u67E5\u8F2A\u5ED3\u662F\u5426\u586B\u5145\u5728\u5916\u90E8\u3002","The contours of _PARAM0_ are filled outside":"_PARAM0_ \u7684\u8F2A\u5ED3\u5DF2\u586B\u5145\u5728\u5916\u90E8","Check if a field is greater than a given value.":"\u6AA2\u67E5\u5834\u57DF\u662F\u5426\u5927\u65BC\u7D66\u5B9A\u503C\u3002","Check if a point is inside the contour.":"\u6AA2\u67E5\u67D0\u9EDE\u662F\u5426\u5728\u8F2A\u5ED3\u5167\u90E8\u3002","Point is inside":"\u9EDE\u5728\u5167\u90E8","_PARAM2_; _PARAM3_ is inside _PARAM0_":"_PARAM2_; _PARAM3_ \u5728 _PARAM0_ \u5167\u90E8","Cursor object":"\u6E38\u6A19\u5C0D\u8C61","Turn any object into a cursor.":"\u5C07\u4EFB\u4F55\u5C0D\u8C61\u8F49\u63DB\u70BA\u6E38\u6A19\u3002","Turn any object into a mouse cursor.":"\u5C07\u4EFB\u4F55\u5C0D\u8C61\u8F49\u63DB\u70BA\u6ED1\u9F20\u6307\u6A19\u3002","Cursor":"\u6E38\u6A19","Mouse Pointer Lock":"\u6ED1\u9F20\u6307\u91DD\u9396\u5B9A","This behavior removes the limit on the distance the mouse can move and hides the cursor.":"\u6B64\u884C\u70BA\u6D88\u9664\u4E86\u6ED1\u9F20\u79FB\u52D5\u8DDD\u96E2\u7684\u9650\u5236\u4E26\u96B1\u85CF\u4E86\u6E38\u6A19\u3002","Lock the mouse pointer to hide it.":"\u9396\u5B9A\u6ED1\u9F20\u6307\u6A19\u4EE5\u96B1\u85CF\u5B83\u3002","Request Pointer Lock":"\u8ACB\u6C42\u6307\u6A19\u9396\u5B9A","Unlocks the mouse pointer and show it.":"\u89E3\u9396\u6ED1\u9F20\u6307\u6A19\u4E26\u986F\u793A\u5B83\u3002","Exit pointer lock":"\u9000\u51FA\u6307\u6A19\u9396\u5B9A","Check if the mouse pointer is locked.":"\u6AA2\u67E5\u6ED1\u9F20\u6307\u6A19\u662F\u5426\u88AB\u9396\u5B9A\u3002","Pointer is locked":"\u6307\u6A19\u5DF2\u9396\u5B9A","The mouse pointer is locked":"\u6ED1\u9F20\u6307\u6A19\u5DF2\u9396\u5B9A","Check if the mouse pointer is actually locked.":"\u6AA2\u67E5\u6ED1\u9F20\u6307\u6A19\u662F\u5426\u5BE6\u969B\u88AB\u9396\u5B9A\u3002","Pointer is actually locked":"\u6307\u6A19\u5BE6\u969B\u4E0A\u662F\u5DF2\u9396\u5B9A\u7684","The mouse pointer actually is locked":"\u6ED1\u9F20\u6307\u6A19\u5BE6\u969B\u4E0A\u662F\u5DF2\u9396\u5B9A\u7684","Check if the mouse pointer lock is emulated.":"\u6AA2\u67E5\u6ED1\u9F20\u6307\u6A19\u9396\u5B9A\u662F\u5426\u88AB\u6A21\u64EC\u3002","Pointer lock is emulated":"\u6307\u6A19\u9396\u5B9A\u88AB\u6A21\u64EC","The mouse pointer lock is emulated":"\u6ED1\u9F20\u6307\u6A19\u9396\u5B9A\u88AB\u6A21\u64EC","Check if the locked pointer is moving.":"\u6AA2\u67E5\u88AB\u9396\u5B9A\u7684\u6307\u6A19\u662F\u5426\u79FB\u52D5\u3002","Locked pointer is moving":"\u88AB\u9396\u5B9A\u7684\u6307\u6A19\u6B63\u5728\u79FB\u52D5","the movement of the locked pointer on the X axis.":"\u88AB\u9396\u5B9A\u7684\u6307\u6A19\u5728X\u8EF8\u4E0A\u7684\u904B\u52D5\u3002","Pointer X movement":"\u6307\u6A19X\u8EF8\u904B\u52D5","the movement of the locked pointer on the X axis":"\u88AB\u9396\u5B9A\u6307\u6A19\u5728X\u8EF8\u4E0A\u7684\u904B\u52D5","the movement of the pointer on the Y axis.":"\u6307\u6A19\u5728Y\u8EF8\u4E0A\u7684\u904B\u52D5\u3002","Pointer Y movement":"\u6307\u6A19Y\u8EF8\u904B\u52D5","the movement of the pointer on the Y axis":"\u6307\u6A19\u5728Y\u8EF8\u4E0A\u7684\u904B\u52D5","Return the X position of a specific touch":"\u8FD4\u56DE\u7279\u5B9A\u89F8\u6478\u7684X\u5EA7\u6A19","Touch X position":"\u89F8\u6478X\u5EA7\u6A19","Touch identifier":"\u89F8\u6478\u8B58\u5225\u7B26","Return the Y position of a specific touch":"\u8FD4\u56DE\u7279\u5B9A\u89F8\u6478\u7684Y\u5EA7\u6A19","Touch Y position":"\u89F8\u6478Y\u5EA7\u6A19","the speed factor for touch movement.":"\u89F8\u6478\u79FB\u52D5\u7684\u901F\u5EA6\u56E0\u5B50\u3002","Speed factor for touch movement":"\u89F8\u6478\u79FB\u52D5\u901F\u5EA6\u56E0\u5B50","the speed factor for touch movement":"\u89F8\u6478\u79FB\u52D5\u7684\u901F\u5EA6\u56E0\u5B50","Control camera rotations with a mouse.":"\u4F7F\u7528\u9F20\u6A19\u63A7\u5236\u76F8\u6A5F\u65CB\u8F49\u3002","First person camera mouse mapper":"\u7B2C\u4E00\u4EBA\u7A31\u76F8\u6A5F\u9F20\u6A19\u6620\u5C04\u5668","Horizontal rotation speed factor":"\u6C34\u5E73\u65CB\u8F49\u901F\u5EA6\u56E0\u5B50","Vertical rotation speed factor":"\u5782\u76F4\u65CB\u8F49\u901F\u5EA6\u56E0\u5B50","Lock the pointer on click":"\u9EDE\u64CA\u6642\u9396\u5B9A\u6307\u91DD","the horizontal rotation speed factor of the object.":"\u8A72\u7269\u4EF6\u7684\u6C34\u5E73\u65CB\u8F49\u901F\u5EA6\u56E0\u5B50\u3002","the horizontal rotation speed factor":"\u6C34\u5E73\u65CB\u8F49\u901F\u5EA6\u56E0\u5B50","the vertical rotation speed factor of the object.":"\u8A72\u7269\u4EF6\u7684\u5782\u76F4\u65CB\u8F49\u901F\u5EA6\u56E0\u5B50\u3002","the vertical rotation speed factor":"\u5782\u76F4\u65CB\u8F49\u901F\u5EA6\u56E0\u5B50","Multiplayer custom lobbies":"\u591A\u73A9\u5BB6\u81EA\u8A02\u5927\u5EF3","Custom lobbies for built-in multiplayer.":"\u5167\u5EFA\u591A\u73A9\u5BB6\u7684\u81EA\u8A02\u5927\u5EF3\u3002","Return project identifier.":"\u8FD4\u56DE\u5C08\u6848\u8B58\u5225\u78BC\u3002","Project identifier":"\u5C08\u6848\u8B58\u5225\u78BC","Return game version.":"\u8FD4\u56DE\u904A\u6232\u7248\u672C\u3002","Game version":"\u904A\u6232\u7248\u672C","Return true if game run in preview.":"\u5982\u679C\u904A\u6232\u6B63\u5728\u9810\u89BD\u4E2D\u5247\u8FD4\u56DE\u771F\u3002","Preview":"\u9810\u89BD","Define a shape painter as a mask of an object.":"\u5C07\u5F62\u72C0\u7E6A\u88FD\u5668\u5B9A\u7FA9\u70BA\u7269\u9AD4\u7684\u906E\u7F69\u3002","Mask an object with a shape painter":"\u4F7F\u7528\u5F62\u72C0\u7E6A\u88FD\u5668\u906E\u7F69\u7269\u9AD4","Mask _PARAM1_ with mask _PARAM2_":"\u4F7F\u7528\u906E\u7F69_PARAM2_\u906E\u7F69_PARAM1_","Object to mask":"\u906E\u7F69\u7269\u9AD4","Shape painter to use as a mask":"\u7528\u4F5C\u906E\u7F69\u7684\u5F62\u72C0\u7E6A\u88FD\u5668","Loading.":"\u8F09\u5165\u4E2D\u3002","Loading":"\u8F09\u5165\u4E2D","Customize the interface of multiplayer lobbies.\nJoining will only work if the \"join after game starts\" setting is enabled, as the game automatically starts after joining a lobby.":"\u81EA\u8A02\u591A\u4EBA\u904A\u6232\u5927\u5EF3\u7684\u4ECB\u9762\u3002\n\u53EA\u6709\u5728\u555F\u7528\u300C\u904A\u6232\u958B\u59CB\u5F8C\u52A0\u5165\u300D\u8A2D\u7F6E\u7684\u60C5\u6CC1\u4E0B\uFF0C\u52A0\u5165\u624D\u6703\u6709\u6548\uFF0C\u56E0\u70BA\u904A\u6232\u5728\u52A0\u5165\u5927\u5EF3\u5F8C\u6703\u81EA\u52D5\u958B\u59CB\u3002","Update lobbies.":"\u66F4\u65B0\u5927\u5EF3\u3002","Update lobbies":"\u66F4\u65B0\u5927\u5EF3","Update lobbies _PARAM0_":"\u66F4\u65B0\u5927\u5EF3 _PARAM0_","Return last error.":"\u8FD4\u56DE\u6700\u5F8C\u4E00\u500B\u932F\u8AA4\u3002","Last error":"\u6700\u5F8C\u932F\u8AA4","Custom lobby.":"\u81EA\u8A02\u5927\u5EF3\u3002","Custom lobby":"\u81EA\u8A02\u5927\u5EF3","Set lobby name.":"\u8A2D\u7F6E\u5927\u5EF3\u540D\u7A31\u3002","Set lobby name":"\u8A2D\u7F6E\u5927\u5EF3\u540D\u7A31","Set lobby name _PARAM0_: _PARAM1_":"\u8A2D\u7F6E\u5927\u5EF3\u540D\u7A31 _PARAM0_: _PARAM1_","Lobby name":"\u5927\u5EF3\u540D\u7A31","Set players in lobby count.":"\u8A2D\u7F6E\u5927\u5EF3\u5167\u73A9\u5BB6\u6578\u91CF\u3002","Set players in lobby count":"\u8A2D\u7F6E\u5927\u5EF3\u5167\u73A9\u5BB6\u6578\u91CF","Set players in lobby count _PARAM0_, players in lobby: _PARAM1_, max players _PARAM2_":"\u8A2D\u7F6E\u5927\u5EF3\u5167\u73A9\u5BB6\u6578 _PARAM0_\uFF0C\u5927\u5EF3\u5167\u73A9\u5BB6: _PARAM1_\uFF0C\u6700\u5927\u73A9\u5BB6 _PARAM2_","Players count in lobby":"\u5927\u5EF3\u5167\u73A9\u5BB6\u6578","Maxum count players in lobby":"\u5927\u5EF3\u5167\u6700\u5927\u73A9\u5BB6\u6578","Set lobby ID.":"\u8A2D\u7F6E\u5927\u5EF3 ID\u3002","Set lobby ID":"\u8A2D\u7F6E\u5927\u5EF3 ID","Set lobby ID _PARAM0_: _PARAM1_":"\u8A2D\u7F6E\u5927\u5EF3 ID _PARAM0_: _PARAM1_","Lobby ID":"\u5927\u5EF3 ID","Return true if lobby is full.":"\u5982\u679C\u5927\u5EF3\u6EFF\u4E86\u5247\u8FD4\u56DE\u771F\u3002","Is full":"\u5DF2\u6EFF","Lobby _PARAM0_ is full":"\u5927\u5EF3 _PARAM0_ \u5DF2\u6EFF","Activate interactions.":"\u555F\u7528\u4E92\u52D5\u3002","Activate interactions":"\u555F\u7528\u4E92\u52D5","Activate interactions of _PARAM0_: _PARAM1_":"\u555F\u7528 _PARAM0_ \u7684\u4E92\u52D5: _PARAM1_","Yes or no":"\u662F\u6216\u5426","Noise generator":"\u566A\u8072\u751F\u6210\u5668","Generate noise values for procedural generation.":"\u70BA\u7A0B\u5E8F\u751F\u6210\u751F\u6210\u566A\u8072\u503C\u3002","Generate a number between -1 and 1 from 1 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"\u5F9E 1 \u7DAD simple \u566A\u97F3\u4E2D\u751F\u6210 -1 \u5230 1 \u4E4B\u9593\u7684\u6578\u5B57\u3002\u5F9E\u64F4\u5C55\u6578\u5B78\u64F4\u5C55\u4E2D\u7684\u201C\u6620\u5C04\u201D\u8868\u9054\u5F0F\u53EF\u4EE5\u7528\u65BC\u5C07\u503C\u6620\u5C04\u5230\u4EFB\u4F55\u9078\u5B9A\u7684\u7BC4\u570D\u3002","1D noise":"1D \u566A\u97F3","Generate a number between -1 and 1 from 2 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"\u5F9E 2 \u7DAD simple \u566A\u97F3\u4E2D\u751F\u6210 -1 \u5230 1 \u4E4B\u9593\u7684\u6578\u5B57\u3002\u5F9E\u64F4\u5C55\u6578\u5B78\u64F4\u5C55\u4E2D\u7684\u201C\u6620\u5C04\u201D\u8868\u9054\u5F0F\u53EF\u4EE5\u7528\u65BC\u5C07\u503C\u6620\u5C04\u5230\u4EFB\u4F55\u9078\u5B9A\u7684\u7BC4\u570D\u3002","Generate a number between -1 and 1 from 3 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"\u5F9E 3 \u7DAD simple \u566A\u97F3\u4E2D\u751F\u6210 -1 \u5230 1 \u4E4B\u9593\u7684\u6578\u5B57\u3002\u5F9E\u64F4\u5C55\u6578\u5B78\u64F4\u5C55\u4E2D\u7684\u201C\u6620\u5C04\u201D\u8868\u9054\u5F0F\u53EF\u4EE5\u7528\u65BC\u5C07\u503C\u6620\u5C04\u5230\u4EFB\u4F55\u9078\u5B9A\u7684\u7BC4\u570D\u3002","Generate a number between -1 and 1 from 4 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"\u5F9E 4 \u7DAD simple \u566A\u97F3\u4E2D\u751F\u6210 -1 \u5230 1 \u4E4B\u9593\u7684\u6578\u5B57\u3002\u5F9E\u64F4\u5C55\u6578\u5B78\u64F4\u5C55\u4E2D\u7684\u201C\u6620\u5C04\u201D\u8868\u9054\u5F0F\u53EF\u4EE5\u7528\u65BC\u5C07\u503C\u6620\u5C04\u5230\u4EFB\u4F55\u9078\u5B9A\u7684\u7BC4\u570D\u3002","Delete a noise generators and loose its settings.":"\u522A\u9664\u566A\u8072\u767C\u751F\u5668\u4E26\u4E1F\u5931\u5176\u8A2D\u7F6E\u3002","2 dimensional Perlin noise (depecated, use Noise2d instead).":"2 \u7DAD Perlin \u566A\u97F3\uFF08\u5DF2\u4F5C\u5EE2\uFF0C\u8ACB\u6539\u7528 Noise2d\uFF09\u3002","Perlin 2D noise":"Perlin 2D \u566A\u97F3","x value":"x\u503C","y value":"y\u503C","3 dimensional Perlin noise (depecated, use Noise3d instead).":"3 \u7DAD Perlin \u566A\u97F3\uFF08\u5DF2\u4F5C\u5EE2\uFF0C\u8ACB\u6539\u7528 Noise3d\uFF09\u3002","Perlin 3D noise":"Perlin 3D \u566A\u97F3","z value":"z\u503C","2 dimensional simplex noise (depecated, use Noise2d instead).":"2 \u7DAD simplex \u566A\u97F3\uFF08\u5DF2\u4F5C\u5EE2\uFF0C\u8ACB\u6539\u7528 Noise2d\uFF09\u3002","Simplex 2D noise":"Simplex 2D \u566A\u97F3","3 dimensional simplex noise (depecated, use Noise3d instead).":"3 \u7DAD simplex \u566A\u97F3\uFF08\u5DF2\u4F5C\u5EE2\uFF0C\u8ACB\u6539\u7528 Noise3d\uFF09\u3002","Simplex 3D noise":"Simplex 3D \u566A\u97F3","Object picking tools":"\u5BF9\u8C61\u9009\u62E9\u5DE5\u5177","Adds various object picking related tools.":"\u589E\u52A0\u4E86\u5404\u79CD\u76F8\u5173\u5BF9\u8C61\u7684\u9009\u53D6\u5DE5\u5177\u3002","Unpicks all instances of an object.":"\u53D6\u6D88\u9078\u53D6\u6240\u6709\u7269\u4EF6\u5BE6\u4F8B\u3002","Unpick all instances":"\u53D6\u6D88\u9078\u53D6\u6240\u6709\u5BE6\u4F8B","Unpick all instances of _PARAM1_":"\u53D6\u6D88\u9078\u53D6\u6240\u6709_PARAM1_","The object to unpick all instances from":"\u53D6\u6D88\u9078\u53D6\u6240\u6709\u5BE6\u4F8B\u7684\u7269\u4EF6","Pick object instances that have the lowest Z-order.":"\u9078\u64C7\u6700\u4F4EZ-\u9806\u5E8F\u7684\u7269\u4EF6\u5BE6\u4F8B\u3002","Pick objects with lowest Z-order":"\u9078\u64C7\u6700\u4F4EZ-\u9806\u5E8F\u7684\u7269\u4EF6","Pick _PARAM1_ with the lowest Z-order":"\u9078\u64C7\u64C1\u6709\u6700\u4F4EZ\u5E8F\u7684_PARAM1_","Object to select instances from":"\u5F9E\u4E2D\u9078\u53D6\u7269\u4EF6\u5BE6\u4F8B","Pick object instances that have the highest Z-order.":"\u9078\u64C7\u6700\u9AD8Z-\u9806\u5E8F\u7684\u7269\u4EF6\u5BE6\u4F8B\u3002","Pick objects with highest Z-order":"\u9078\u64C7\u6700\u9AD8Z-\u9806\u5E8F\u7684\u7269\u4EF6","Pick _PARAM1_ with the highest Z-order":"\u9078\u64C7\u64C1\u6709\u6700\u9AD8Z\u5E8F\u7684_PARAM1_","Pick object instances that have the lowest value of an object variable.":"\u9078\u53D6\u7269\u4EF6\u5BE6\u4F8B\u7684\u7269\u4EF6\u8B8A\u6578\u503C\u6700\u4F4E\u8005\u3002","Pick objects with lowest variable value":"\u9078\u53D6\u5177\u6709\u6700\u4F4E\u8B8A\u6578\u503C\u7684\u7269\u4EF6","Pick _PARAM1_ with the lowest value of variable _PARAM2_":"\u9078\u53D6\u8B8A\u6578_PARAM2_\u7684\u503C\u6700\u4F4E\u7684_PARAM1_","Object variable name":"\u7269\u4EF6\u8B8A\u6578\u540D\u7A31","Pick object instances that have the highest value of an object variable.":"\u9078\u53D6\u7269\u4EF6\u5BE6\u4F8B\u7684\u7269\u4EF6\u8B8A\u6578\u503C\u6700\u9AD8\u8005\u3002","Pick objects with highest variable value":"\u9078\u53D6\u5177\u6709\u6700\u9AD8\u8B8A\u6578\u503C\u7684\u7269\u4EF6","Pick _PARAM1_ with the highest value of variable _PARAM2_":"\u9078\u53D6\u8B8A\u6578_PARAM2_\u7684\u503C\u6700\u9AD8\u7684_PARAM1_","Picks the first instance out of a list of objects.":"\u9078\u64C7\u7269\u4EF6\u6E05\u55AE\u4E2D\u7684\u7B2C\u4E00\u500B\u5BE6\u4F8B\u3002","Pick the first object (deprecated)":"\u9078\u64C7\u7B2C\u4E00\u500B\u7269\u4EF6\uFF08\u5DF2\u68C4\u7528\uFF09","Pick the first _PARAM1_":"\u9078\u64C7\u7B2C\u4E00\u500B_PARAM1_","The object to select an instances from":"\u5F9E\u4E2D\u9078\u53D6\u7269\u4EF6\u5BE6\u4F8B\u7684\u7269\u4EF6","Picks the last instance out of a list of objects.":"\u9078\u64C7\u7269\u4EF6\u6E05\u55AE\u4E2D\u7684\u6700\u5F8C\u4E00\u500B\u5BE6\u4F8B\u3002","Pick the last object (deprecated)":"\u9078\u64C7\u6700\u5F8C\u4E00\u500B\u7269\u4EF6\uFF08\u5DF2\u68C4\u7528\uFF09","Pick the last _PARAM1_":"\u9078\u64C7\u6700\u5F8C\u4E00\u500B_PARAM1_","Picks the Nth instance out of a list of objects.":"\u5F9E\u4E2D\u9078\u53D6\u7269\u4EF6\u6E05\u55AE\u7684\u7B2CN\u500B\u5BE6\u4F8B\u3002","Pick the Nth object (deprecated)":"\u9078\u64C7\u7B2CN\u500B\u7269\u4EF6\uFF08\u5DF2\u68C4\u7528\uFF09","Pick the _PARAM2_th _PARAM1_":"\u9078\u53D6\u7B2C_PARAM2_\u500B_PARAM1_","The place in the objects lists an instance has to have to be picked":"\u9078\u53D6\u5BE6\u4F8B\u5FC5\u9808\u5177\u6709\u7684\u7269\u4EF6\u6E05\u55AE\u4E2D\u7684\u4F4D\u7F6E","Slice a 2D object into pieces":"\u5C07 2D \u7269\u4EF6\u5207\u6210\u788E\u7247","Slice an object into smaller pieces that match the color of original object.":"\u5C06\u5BF9\u8C61\u5207\u6210\u4E0E\u539F\u59CB\u5BF9\u8C61\u989C\u8272\u76F8\u5339\u914D\u7684\u5C0F\u7247\u3002","Slice an object into smaller pieces that match color of the original object. The new object should be a solid white color.":"\u5C07\u4E00\u500B\u7269\u4EF6\u5207\u6210\u8207\u539F\u7269\u4EF6\u984F\u8272\u76F8\u7B26\u7684\u5C0F\u584A\u3002\u65B0\u7269\u4EF6\u61C9\u70BA\u7D14\u767D\u8272\u3002","Slice object into smaller pieces":"\u5C07\u7269\u4EF6\u5207\u6210\u8F03\u5C0F\u7684\u584A","Cut _PARAM1_ into _PARAM3_ vertical strips and _PARAM4_ horizontal strips using _PARAM2_ for the new objects. Delete original object: _PARAM5_":"\u5C07_PARAM1_\u5207\u6210_VERTICAL_\u5782\u76F4\u689D\u548C_HORIZONTAL_\u6C34\u5E73\u689D\uFF0C\u4F7F\u7528_PARAM2_\u4F5C\u70BA\u65B0\u7269\u4EF6\u3002\u522A\u9664\u539F\u59CB\u7269\u4EF6\uFF1A_PARAM5_","Object to be sliced":"\u6E96\u5099\u5207\u7247\u7684\u7269\u4EF6","Object used for sliced pieces":"\u7528\u65BC\u5207\u7247\u7684\u7269\u4EF6","Recommended: Use a sprite that is a single white pixel":"\u5EFA\u8B70\u4F7F\u7528\u55AE\u500B\u767D\u50CF\u7D20\u7684\u7CBE\u9748","Vertical slices":"\u5782\u76F4\u5207\u7247","Horizontal slices":"\u6C34\u5E73\u5207\u7247","Delete original object":"\u522A\u9664\u539F\u59CB\u7269\u4EF6","Return the blue component of the pixel at the specified position.":"\u8FD4\u56DE\u6307\u5B9A\u4F4D\u7F6E\u50CF\u7D20\u7684\u85CD\u8272\u5143\u4EF6\u3002","Read pixel blue":"\u8B80\u53D6\u50CF\u7D20\u85CD\u8272","Return the green component of the pixel at the specified position.":"\u8FD4\u56DE\u6307\u5B9A\u4F4D\u7F6E\u50CF\u7D20\u7684\u7DA0\u8272\u5143\u4EF6\u3002","Read pixel green":"\u8B80\u53D6\u50CF\u7D20\u7DA0\u8272","Return the red component of the pixel at the specified position.":"\u8FD4\u56DE\u6307\u5B9A\u4F4D\u7F6E\u50CF\u7D20\u7684\u7D05\u8272\u5143\u4EF6\u3002","Read pixel red":"\u8B80\u53D6\u50CF\u7D20\u7D05\u8272","Object spawner 2D area":"2D \u7269\u4EF6\u751F\u6210\u5340\u57DF","Spawn (create) objects periodically.":"\u5B9A\u671F\u751F\u6210\uFF08\u521B\u5EFA\uFF09\u5BF9\u8C61\u3002","Object spawner":"\u7269\u4EF6\u751F\u6210\u5668","Spawn period":"\u751F\u6210\u5468\u671F","Offset X (relative to position of spawner)":"X\u504F\u79FB\uFF08\u76F8\u5C0D\u65BC\u751F\u6210\u9EDE\u4F4D\u7F6E\uFF09","Offset Y (relative to position of spawner)":"Y\u504F\u79FB\uFF08\u76F8\u5C0D\u65BC\u751F\u6210\u9EDE\u4F4D\u7F6E\uFF09","Max objects in the scene (per spawner)":"\u5834\u666F\u4E2D\u7684\u6700\u5927\u7269\u4EF6\u6578\uFF08\u6BCF\u500B\u751F\u6210\u9EDE\uFF09","Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"\u9650\u5236\u7531\u6B64\u751F\u6210\u9EDE\u5275\u5EFA\u7684\u5834\u666F\u4E2D\u7269\u4EF6\u6578\u91CF\u3002\u5C07\u5176\u8A2D\u7F6E\u70BA0\u4EE5\u53D6\u6D88\u9650\u5236\u3002","Spawner capacity":"\u751F\u6210\u9EDE\u5BB9\u91CF","Number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"\u53EF\u4EE5\u7531\u6B64\u751F\u6210\u9EDE\u5275\u5EFA\u7684\u7269\u4EF6\u6578\u91CF\u3002\u6BCF\u6B21\u751F\u6210\u7269\u4EF6\u6642\u9019\u5C07\u6703\u6E1B\u5C11\u3002","Unlimited capacity":"\u7121\u9650\u5BB9\u91CF","Use random positions":"\u4F7F\u7528\u96A8\u6A5F\u4F4D\u7F6E","Objects will be created at a random position inside the spawner. Useful for making large spawner areas.":"\u7269\u4EF6\u5C07\u5728\u751F\u6210\u9EDE\u7BC4\u570D\u5167\u7684\u96A8\u6A5F\u4F4D\u7F6E\u5275\u5EFA\u3002\u9069\u7528\u65BC\u88FD\u4F5C\u5927\u578B\u751F\u6210\u9EDE\u5340\u57DF\u3002","Spawn (create) objects periodically. This action must be run every frame to work. When the max quantity is reached and an instance is deleted, the spawner waits the duration of the spawn period before creating another instance. Spawned objects are automatically linked to the spawner.":"\u5B9A\u671F\u751F\u6210\uFF08\u5275\u5EFA\uFF09\u7269\u4EF6\u3002\u6B64\u64CD\u4F5C\u5FC5\u9808\u5728\u6BCF\u5E40\u4E2D\u904B\u884C\u624D\u80FD\u6B63\u5E38\u5DE5\u4F5C\u3002\u7576\u9054\u5230\u6700\u5927\u6578\u91CF\u4E26\u522A\u9664\u4E00\u500B\u5BE6\u4F8B\u6642\uFF0C\u751F\u6210\u5668\u9700\u5728\u751F\u6210\u6301\u7E8C\u6642\u9593\u5F8C\u7B49\u5F85\u624D\u80FD\u5275\u5EFA\u53E6\u4E00\u500B\u5BE6\u4F8B\u3002\u751F\u6210\u7684\u7269\u4EF6\u6703\u81EA\u52D5\u9023\u7D50\u81F3\u751F\u6210\u5668\u3002","Spawn objects periodically":"\u5B9A\u671F\u751F\u6210\u7269\u4EF6","Periodically spawn (create) a _PARAM2_ located at spawner _PARAM0_":"\u5B9A\u671F\u751F\u6210\u4F4D\u65BC\u751F\u6210\u5668 _PARAM0_ \u7684 _PARAM2_","Object that will be created":"\u5C07\u88AB\u5275\u5EFA\u7684\u7269\u4EF6","Change the offset X relative to the center of spawner (in pixels).":"\u66F4\u6539\u76F8\u5C0D\u65BC\u751F\u6210\u5668\u4E2D\u5FC3\u7684 X \u504F\u79FB\uFF08\u4EE5\u50CF\u7D20\u8A08\u7B97\uFF09\u3002","Offset on X axis (deprecated)":"X \u8EF8\u504F\u79FB\uFF08\u4E0D\u5EFA\u8B70\u4F7F\u7528\uFF09","Change the offset X of _PARAM0_ to _PARAM2_ pixels":"\u5C07 _PARAM0_ \u7684 X \u504F\u79FB\u66F4\u6539\u70BA _PARAM2_ \u50CF\u7D20","Change the offset Y relative to the center of spawner (in pixels).":"\u66F4\u6539\u76F8\u5C0D\u65BC\u751F\u6210\u5668\u4E2D\u5FC3\u7684 Y \u504F\u79FB\uFF08\u4EE5\u50CF\u7D20\u8A08\u7B97\uFF09\u3002","Offset on Y axis (deprecated)":"Y \u8EF8\u504F\u79FB\uFF08\u4E0D\u5EFA\u8B70\u4F7F\u7528\uFF09","Change the offset Y of _PARAM0_ to _PARAM2_ pixels":"\u5C07 _PARAM0_ \u7684 Y \u504F\u79FB\u66F4\u6539\u70BA _PARAM2_ \u50CF\u7D20","Change the spawn period (in seconds).":"\u66F4\u6539\u751F\u6210\u9031\u671F\uFF08\u4EE5\u79D2\u8A08\uFF09\u3002","Change the spawn period of _PARAM0_ to _PARAM2_ seconds":"\u5C07 _PARAM0_ \u7684\u751F\u6210\u9031\u671F\u66F4\u6539\u70BA _PARAM2_ \u79D2","Return the offset X relative to the center of spawner (in pixels).":"\u8FD4\u56DE\u76F8\u5C0D\u65BC\u751F\u6210\u5668\u4E2D\u5FC3\u7684 X \u504F\u79FB\uFF08\u4EE5\u50CF\u7D20\u8A08\u7B97\uFF09\u3002","Offset X (deprecated)":"X \u504F\u79FB\uFF08\u4E0D\u5EFA\u8B70\u4F7F\u7528\uFF09","Return the offset Y relative to the center of spawner (in pixels).":"\u8FD4\u56DE\u76F8\u5C0D\u65BC\u751F\u6210\u5668\u4E2D\u5FC3\u7684 Y \u504F\u79FB\uFF08\u4EE5\u50CF\u7D20\u8A08\u7B97\uFF09\u3002","Offset Y (deprecated)":"Y \u504F\u79FB\uFF08\u4E0D\u5EFA\u8B70\u4F7F\u7528\uFF09","Return the spawn period (in seconds).":"\u8FD4\u56DE\u751F\u6210\u9031\u671F\uFF08\u4EE5\u79D2\u8A08\uFF09\u3002","Restart the cooldown of a spawner.":"\u91CD\u65B0\u555F\u52D5\u751F\u6210\u5668\u7684\u51B7\u537B\u6642\u9593\u3002","Restart spawning cooldown":"\u91CD\u65B0\u555F\u52D5\u751F\u6210\u51B7\u537B\u6642\u9593","Restart the cooldown of _PARAM0_":"\u91CD\u65B0\u555F\u52D5 _PARAM0_ \u7684\u51B7\u537B\u6642\u9593","Return the remaining time before the next spawn (in seconds). Useful for triggering visual and sound effects.":"\u8FD4\u56DE\u4E0B\u4E00\u6B21\u751F\u6210\u524D\u7684\u5269\u9918\u6642\u9593\uFF08\u4EE5\u79D2\u8A08\uFF09\u3002\u5C0D\u65BC\u89F8\u767C\u8996\u89BA\u548C\u97F3\u6548\u6548\u679C\u975E\u5E38\u6709\u7528\u3002","Time before the next spawn":"\u4E0B\u4E00\u6B21\u751F\u6210\u524D\u7684\u6642\u9593","_PARAM0_ just spawned an object":"_PARAM0_ \u525B\u525B\u751F\u6210\u4E86\u4E00\u500B\u7269\u4EF6","Check if an object has just been created by this spawner. Useful for triggering visual and sound effects.":"\u6AA2\u67E5\u6B64\u751F\u6210\u5668\u662F\u5426\u525B\u525B\u5275\u5EFA\u4E86\u4E00\u500B\u7269\u4EF6\u3002\u5C0D\u65BC\u89F8\u767C\u8996\u89BA\u548C\u97F3\u6548\u6548\u679C\u975E\u5E38\u6709\u7528\u3002","Object was just spawned":"\u7269\u4EF6\u525B\u525B\u88AB\u751F\u6210","the max objects in the scene (per spawner) of the object. Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"\u5834\u666F\u4E2D\u7269\u4EF6\u7684\u6700\u5927\u6578\u91CF\uFF08\u6BCF\u500B\u751F\u6210\u5668\uFF09\u3002\u9650\u5236\u7531\u6B64\u751F\u6210\u5668\u5275\u5EFA\u7684\u5834\u666F\u4E2D\u7269\u4EF6\u7684\u6578\u91CF\u3002\u5C07\u6B64\u8A2D\u7F6E\u70BA 0 \u4EE5\u4E0D\u9650\u5236\u3002","the max objects in the scene (per spawner)":"\u5834\u666F\u4E2D\u7684\u6700\u5927\u7269\u4EF6\u6578\u91CF\uFF08\u6BCF\u500B\u751F\u6210\u5668\uFF09","Check if spawner has unlimited capacity.":"\u6AA2\u67E5\u751F\u6210\u5668\u662F\u5426\u5177\u6709\u7121\u9650\u5BB9\u91CF\u3002","_PARAM0_ has unlimited capacity":"_PARAM0_ \u5177\u6709\u7121\u9650\u7684\u5BB9\u91CF","Change unlimited capacity of spawner.":"\u66F4\u6539\u751F\u6210\u5668\u7684\u7121\u9650\u5BB9\u91CF\u3002","Unlimited object capacity":"\u7121\u9650\u7269\u4EF6\u5BB9\u91CF","_PARAM0_ unlimited capacity: _PARAM2_":"_PARAM0_ \u7684\u7121\u9650\u5BB9\u91CF\uFF1A_PARAM2_","UnlimitedObjectCapacity":"UnlimitedObjectCapacity","the number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"\u9019\u500B\u7522\u751F\u5668\u53EF\u4EE5\u5275\u5EFA\u7684\u7269\u4EF6\u6578\u91CF\u3002\u6BCF\u6B21\u751F\u6210\u7269\u4EF6\u6642\u90FD\u6703\u6E1B\u5C11\u3002","the spawner capacity":"\u7522\u751F\u5668\u5BB9\u91CF","Check if using random positions. Useful for making large spawner areas.":"\u6AA2\u67E5\u662F\u5426\u4F7F\u7528\u96A8\u6A5F\u4F4D\u7F6E\u3002\u7528\u65BC\u5275\u5EFA\u5927\u578B\u751F\u6210\u5340\u57DF\u3002","Use random positions inside _PARAM0_":"\u5728_PARAM0_\u5167\u4F7F\u7528\u96A8\u6A5F\u4F4D\u7F6E","Enable (or disable) random positions. Useful for making large spawner areas.":"\u555F\u7528\uFF08\u6216\u505C\u7528\uFF09\u96A8\u6A5F\u4F4D\u7F6E\u3002\u7528\u65BC\u5275\u5EFA\u5927\u578B\u751F\u6210\u5340\u57DF\u3002","Use random positions inside _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u5167\u4F7F\u7528\u96A8\u6A5F\u4F4D\u7F6E\uFF1A_PARAM2_","RandomPosition":"\u96A8\u6A5F\u4F4D\u7F6E","Object Stack":"\u5BF9\u8C61\u5806\u6808","An ordered list of objects and a shuffle action.":"\u5BF9\u8C61\u7684\u6709\u5E8F\u5217\u8868\u548C\u6DF7\u6D17\u64CD\u4F5C\u3002","Check if the stack contains the object between a range. The lower and upper bounds are included.":"\u6AA2\u67E5\u5806\u758A\u662F\u5426\u5305\u542B\u4ECB\u65BC\u7BC4\u570D\u5167\u7684\u7269\u4EF6\u3002\u5305\u62EC\u4E0B\u9650\u548C\u4E0A\u9650\u3002","Contain between a range":"\u7BC4\u570D\u5167\u5305\u542B","_PARAM3_ is into the stack of _PARAM1_ between _PARAM4_ and _PARAM5_":"_PARAM3_\u5728_PARAM1_\u7684\u5806\u758A\u4E4B\u9593_PARAM4_\u548C_PARAM5_\u4E2D","Stack":"\u5806\u758A","Stack behavior":"\u5806\u758A\u884C\u70BA","Element":"\u5143\u7D20","Lower bound":"\u4E0B\u9650","Upper bound":"\u4E0A\u9650","Check if the stack contains the object at a height.":"\u6AA2\u67E5\u5806\u758A\u662F\u5426\u5305\u542B\u7279\u5B9A\u9AD8\u5EA6\u7684\u7269\u4EF6\u3002","Contain at":"\u5305\u542B\u9AD8\u5EA6","_PARAM3_ is into the stack of _PARAM1_ at _PARAM4_":"_PARAM3_ \u5728 _PARAM4_ \u6642\u5806\u758A\u5230 _PARAM1_ \u7684\u5806\u758A\u4E2D","Check if an object is on the stack top.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u5728\u5806\u758A\u9802\u90E8\u3002","Stack top":"\u5806\u758A\u9802\u90E8","_PARAM3_ is on top of the stack of _PARAM1_":"_PARAM3_ \u5728 _PARAM1_ \u7684\u5806\u758A\u9802\u90E8","Check if the stack contains the object.":"\u6AA2\u67E5\u5806\u758A\u662F\u5426\u5305\u542B\u5C0D\u8C61\u3002","Contain":"\u5305\u542B","_PARAM3_ is into the stack of _PARAM1_":"_PARAM3_ \u88AB\u653E\u5165 _PARAM1_ \u7684\u5806\u758A\u4E2D","Hold an ordered list of objects.":"\u4FDD\u5B58\u4E00\u500B\u5C0D\u8C61\u7684\u6709\u5E8F\u5217\u8868\u3002","Add the object on the top of the stack.":"\u5C07\u7269\u4EF6\u6DFB\u52A0\u5230\u5806\u758A\u7684\u9802\u90E8\u3002","Add on top":"\u5728\u9802\u90E8\u6DFB\u52A0","Add _PARAM2_ on top of the stack of _PARAM0_":"\u5728_PARAM0_\u7684\u5806\u758A\u9802\u90E8\u6DFB\u52A0_PARAM2_","Insert the object into the stack.":"\u5C07\u7269\u4EF6\u63D2\u5165\u5806\u758A\u4E2D\u3002","Insert into the stack":"\u63D2\u5165\u5806\u758A","Insert _PARAM2_ into the stack of _PARAM0_ at height: _PARAM3_":"\u5728_PARAM0_\u7684\u5806\u758A\u4E2D\u5C07_PARAM2_\u63D2\u5165\u9AD8\u5EA6\uFF1A_PARAM3_","Remove the object from the stack.":"\u5F9E\u5806\u758A\u4E2D\u522A\u9664\u7269\u4EF6\u3002","Remove from the stack":"\u5F9E\u5806\u758A\u4E2D\u79FB\u9664","Remove _PARAM2_ from the stack of _PARAM0_":"\u5F9E_PARAM0_\u7684\u5806\u758A\u4E2D\u522A\u9664_PARAM2_","Remove any object from the stack.":"\u5F9E\u5806\u758A\u4E2D\u522A\u9664\u4EFB\u4F55\u7269\u4EF6\u3002","Clear":"\u6E05\u9664","Remove every object of the stack of _PARAM0_":"\u5F9E_PARAM0_\u7684\u5806\u758A\u4E2D\u522A\u9664\u6240\u6709\u7269\u4EF6\u3002","Move the objects from a stack into another.":"\u5C07\u7269\u4EF6\u5F9E\u4E00\u500B\u5806\u758A\u79FB\u52D5\u5230\u53E6\u4E00\u500B\u3002","Move into the stack":"\u79FB\u52D5\u5230\u5806\u758A","Move the objects of the stack of _PARAM3_ from:_PARAM5_ to:_PARAM6_ into the stack of _PARAM0_ at height: _PARAM2_":"\u5C07_PARAM3_\u5806\u758A\u4E2D\u7684_PARAM5_\u81F3_PARAM6_\u7684\u7269\u4EF6\u79FB\u52D5\u5230_PARAM0_\u7684\u5806\u758A\u4E2D\u9AD8\u5EA6\uFF1A_PARAM2_","Move all the object from a stack into another.":"\u5C07\u6240\u6709\u7269\u4EF6\u5F9E\u4E00\u500B\u5806\u758A\u79FB\u52D5\u5230\u53E6\u4E00\u500B\u3002","Move all into the stack":"\u5168\u90E8\u79FB\u52D5\u5230\u5806\u758A","Move all the objects of the stack of _PARAM3_ into the stack of _PARAM0_ at height: _PARAM2_":"\u5C07_PARAM3_\u7684\u5806\u758A\u4E2D\u7684\u6240\u6709\u7269\u4EF6\u79FB\u52D5\u5230_PARAM0_\u7684\u5806\u758A\u4E2D\u9AD8\u5EA6\uFF1A_PARAM2_","Move all the object from a stack into another one at the top.":"\u5C07\u4E00\u5806\u758A\u4E2D\u7684\u6240\u6709\u7269\u4EF6\u79FB\u52D5\u5230\u53E6\u4E00\u500B\u5806\u758A\u7684\u9802\u90E8\u3002","Move all on top of the stack":"\u5168\u90E8\u79FB\u52D5\u5230\u5806\u758A\u7684\u9802\u90E8","Move all the objects of the stack of _PARAM2_ on the top of the stack of _PARAM0_":"\u5C07_PARAM2_\u7684\u5806\u758A\u4E2D\u7684\u6240\u6709\u7269\u4EF6\u79FB\u52D5\u5230_PARAM0_\u7684\u5806\u758A\u7684\u9802\u90E8\u3002","Shuffle the stack.":"\u5C0D\u5806\u758A\u9032\u884C\u6D17\u724C\u3002","Shuffle":"\u6D17\u724C","Shuffle the stack of _PARAM0_":"\u5C0D_PARAM0_\u7684\u5806\u758A\u9032\u884C\u6D17\u724C\u3002","The height of an element in the stack.":"\u5806\u758A\u4E2D\u5143\u7D20\u7684\u9AD8\u5EA6\u3002","Height of a stack element":"\u5806\u758A\u5143\u7D20\u7684\u9AD8\u5EA6","the number of objects in the stack.":"\u5806\u758A\u4E2D\u5C0D\u8C61\u7684\u6578\u91CF\u3002","Stack height":"\u5806\u758A\u9AD8\u5EA6","the number of objects in the stack":"\u5806\u758A\u4E2D\u5C0D\u8C61\u7684\u6578\u91CF","Compare the number of objects in the stack.":"\u6BD4\u8F03\u5806\u758A\u4E2D\u5C0D\u8C61\u7684\u6578\u91CF\u3002","Stack height (deprecated)":"\u5806\u758A\u9AD8\u5EA6\uFF08\u5DF2\u505C\u7528\uFF09","_PARAM0_ has _PARAM2_ objects in its stack":"_PARAM0_ \u7684\u5806\u758A\u4E2D\u6709 _PARAM2_ \u500B\u5C0D\u8C61","Check if the stack is empty.":"\u6AA2\u67E5\u5806\u758A\u662F\u5426\u70BA\u7A7A\u3002","Is empty":"\u70BA\u7A7A","The stack of _PARAM0_ is empty":"_PARAM0_ \u7684\u5806\u758A\u70BA\u7A7A","Make objects orbit around a center object":"\u4F7F\u7269\u9AD4\u7E5E\u8457\u4E00\u500B\u4E2D\u5FC3\u7269\u9AD4\u8ECC\u9053\u904B\u884C","Make objects orbit around a center object in a circular or elliptical shape.":"\u4F7F\u7269\u9AD4\u570D\u7E5E\u4E2D\u5FC3\u7269\u9AD4\u4EE5\u5713\u5F62\u6216\u6A62\u5713\u5F62\u8ECC\u9053\u904B\u884C\u3002","Move objects in orbit around a center object.":"\u5C07\u5C0D\u8C61\u7E5E\u8457\u4E2D\u5FC3\u5C0D\u8C61\u79FB\u52D5\u3002","Move objects in orbit around a center object":"\u7E5E\u8457\u4E2D\u5FC3\u5C0D\u8C61\u79FB\u52D5\u7684\u5C0D\u8C61","Animate _PARAM3_ copies of _PARAM2_ that orbit around _PARAM1_ at a distance of _PARAM5_ with orbit speed of _PARAM4_ degrees per second. Rotate orbiting objects at _PARAM6_ degrees per second. Start objects with an angle offset of _PARAM9_ degrees. Create objects on layer _PARAM7_ with Z value _PARAM8_. Reset locations of orbiting objects after quantity is reduced: _PARAM10_":"\u52D5\u756B_PARAM2_\u7684_PARAM3_\u500B\u526F\u672C\u570D\u7E5E_PARAM1_\u5728\u8DDD\u96E2_PARAM5_\u4EE5_PARAM4_\u5EA6\u6BCF\u79D2\u7684\u8ECC\u9053\u901F\u5EA6\u3002\u4EE5\u6BCF\u79D2_PARAM6_\u5EA6\u65CB\u8F49\u7E5E\u884C\u5C0D\u8C61\u3002\u4EE5_PARAM9_\u5EA6\u7684\u89D2\u5EA6\u504F\u79FB\u555F\u52D5\u5C0D\u8C61\u3002\u5728\u5716\u5C64_PARAM7_\u4E0A\u5275\u5EFA\u5C0D\u8C61\uFF0CZ\u503C\u70BA_PARAM8_\u3002\u6E1B\u5C11\u6578\u91CF\u5F8C\u91CD\u7F6E\u7E5E\u884C\u5C0D\u8C61\u7684\u4F4D\u7F6E: _PARAM10_","Center object":"\u4E2D\u5FC3\u5C0D\u8C61","Orbiting object":"\u74B0\u7E5E\u5C0D\u8C61","Cannot be the same object used for the Center object":"\u4E0D\u80FD\u662F\u7528\u65BC\u4E2D\u5FC3\u5C0D\u8C61\u7684\u76F8\u540C\u5C0D\u8C61","Quantity of orbiting objects":"\u74B0\u7E5E\u5C0D\u8C61\u7684\u6578\u91CF","Orbit speed (in degrees per second)":"\u8ECC\u9053\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\u6578\uFF09","Use negative numbers to orbit counter-clockwise":"\u4F7F\u7528\u8CA0\u6578\u9032\u884C\u9006\u6642\u91DD\u8ECC\u9053","Distance from the center object (in pixels)":"\u8DDD\u96E2\u4E2D\u5FC3\u5C0D\u8C61\u7684\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","Angular speed (in degrees per second)":"\u89D2\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\u6578\uFF09","Use negative numbers to rotate counter-clockwise":"\u4F7F\u7528\u8CA0\u6578\u9032\u884C\u9006\u6642\u91DD\u65CB\u8F49","Layer that orbiting objects will be created on (base layer if empty)":"\u5C07\u7522\u751F\u74B0\u7E5E\u5C0D\u8C61\u7684\u5716\u5C64\uFF08\u5982\u679C\u7A7A\uFF0C\u5247\u70BA\u57FA\u672C\u5716\u5C64\uFF09","Z order of orbiting objects":"\u74B0\u7E5E\u5C0D\u8C61\u7684Z\u8EF8\u503C","Starting angle offset (in degrees)":"\u958B\u59CB\u89D2\u5EA6\u504F\u79FB\uFF08\u5EA6\uFF09","Reset locations of orbiting objects after quantity is reduced":"\u5728\u6578\u91CF\u6E1B\u5C11\u5F8C\u91CD\u7F6E\u74B0\u7E5E\u5C0D\u8C61\u7684\u4F4D\u7F6E","Move objects in elliptical orbit around a center object. Z-order is changed to make 3D effect.":"\u7E5E\u8457\u4E2D\u5FC3\u5C0D\u8C61\u7684\u6A62\u5713\u8ECC\u9053\u79FB\u52D5\u7684\u5C0D\u8C61\u3002\u70BA\u4E86\u7522\u751F3D\u6548\u679C\uFF0CZ\u8EF8\u9806\u5E8F\u88AB\u66F4\u6539\u3002","Move objects in elliptical orbit around a center object":"\u5C07\u5C0D\u8C61\u7E5E\u8457\u4E2D\u5FC3\u5C0D\u8C61\u7684\u6A62\u5713\u8ECC\u9053\u79FB\u52D5","Animate _PARAM3_ copies of _PARAM2_ in elliptical orbit around _PARAM1_ with vertical radius of _PARAM5_, horizontal radius of _PARAM9_ and an orbit speed of _PARAM4_ degrees per second. Foreground side is _PARAM10_. Rotate orbiting objects at _PARAM6_ degrees per second":"\u4EE5\u5782\u76F4\u534A\u5F91_PARAM5_\uFF0C\u6C34\u5E73\u534A\u5F91_PARAM9_\u548C\u8ECC\u9053\u901F\u5EA6_PARAM4_\u5EA6/\u6BCF\u79D2\u5728_PARAM1_\u7684\u6A62\u5713\u8ECC\u9053\u4E0A\u52D5\u756B_PARAM2_\u7684_PARAM3_\u500B\u526F\u672C\u3002\u524D\u666F\u5074\u662F_PARAM10_\u3002\u4EE5_PARAM6_\u5EA6/\u6BCF\u79D2\u65CB\u8F49\u7E5E\u884C\u5C0D\u8C61\u3002","Vertical distance from the center object (pixels)":"\u8DDD\u96E2\u4E2D\u5FC3\u5C0D\u8C61\u7684\u5782\u76F4\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","Horizontal distance from the center object (pixels)":"\u5F9E\u4E2D\u5FC3\u7269\u4EF6\u7684\u6C34\u5E73\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","Foreground Side":"\u524D\u666F\u5074","Delete orbiting objects that are linked to a center object.":"\u522A\u9664\u8207\u4E2D\u5FC3\u7269\u4EF6\u76F8\u95DC\u806F\u7684\u904B\u884C\u4E2D\u7269\u4EF6\u3002","Delete orbiting objects that are linked to a center object":"\u522A\u9664\u8207\u4E2D\u5FC3\u7269\u4EF6\u76F8\u95DC\u806F\u7684\u904B\u884C\u4E2D\u7269\u4EF6","Delete all _PARAM2_ that are linked to _PARAM1_":"\u522A\u9664\u6240\u6709\u8207_PARAM1_\u76F8\u95DC\u806F\u7684_PARAM2_","Cannot be the same object that was used for the Center object":"\u4E0D\u80FD\u662F\u7528\u65BC\u4E2D\u5FC3\u7269\u4EF6\u7684\u76F8\u540C\u7269\u4EF6","Labeled button":"\u6A19\u7C64\u6309\u9215","A button with a label.":"\u5E36\u6A19\u7C64\u7684\u6309\u9215\u3002","The finite state machine used internally by the button object.":"\u6309\u9215\u7269\u4EF6\u5167\u90E8\u4F7F\u7528\u7684\u6709\u9650\u72C0\u614B\u6A5F\u3002","Button finite state machine":"\u6309\u9215\u6709\u9650\u72C0\u614B\u6A5F","Change the text style when the button is hovered.":"\u7576\u6ED1\u9F20\u61F8\u505C\u5728\u6309\u9215\u4E0A\u6642\u6539\u8B8A\u6587\u5B57\u6A23\u5F0F\u3002","Hover text style":"\u6ED1\u9F20\u61F8\u505C\u6587\u5B57\u6A23\u5F0F","Outline on hover":"\u61F8\u505C\u6642\u7684\u8F2A\u5ED3","Hover color":"\u61F8\u505C\u984F\u8272","Enable shadow on hover":"\u61F8\u505C\u6642\u555F\u7528\u9670\u5F71","Hover font size":"\u61F8\u505C\u5B57\u9AD4\u5927\u5C0F","Idle font size":"\u9592\u7F6E\u5B57\u9AD4\u5927\u5C0F","Idle color":"\u9592\u7F6E\u984F\u8272","Check if isHovered.":"\u6AA2\u67E5\u662F\u5426\u61F8\u505C\u3002","IsHovered":"IsHovered","_PARAM0_ isHovered":"_PARAM0_ \u662F\u61F8\u505C","Change if isHovered.":"\u66F4\u6539\u662F\u5426\u61F8\u505C\u3002","_PARAM0_ isHovered: _PARAM2_":"_PARAM0_ \u662F\u61F8\u505C: _PARAM2_","Return the text color":"\u8FD4\u56DE\u6587\u672C\u984F\u8272","Text color":"\u6587\u672C\u984F\u8272","Hover bitmap text style":"\u61F8\u505C\u4F4D\u5716\u6587\u672C\u6A23\u5F0F","Hover prefix":"\u61F8\u505C\u524D\u7DB4","Hover suffix":"\u61F8\u505C\u5F8C\u7DB4","Idle text":"\u9592\u7F6E\u6587\u672C","Button with a label.":"\u5E36\u6A19\u7C64\u7684\u6309\u9215\u3002","Label":"\u6A19\u7C64","Hovered fade out duration":"\u61F8\u505C\u6DE1\u51FA\u6301\u7E8C\u6642\u9593","States":"\u72C0\u614B","Label offset on Y axis when pressed":"\u6309\u4E0B\u6642Y\u8EF8\u4E0A\u7684\u6A19\u7C64\u504F\u79FB","Change the text of the button label.":"\u66F4\u6539\u6309\u9215\u6A19\u7C64\u7684\u6587\u5B57\u3002","Label text":"\u6A19\u7C64\u6587\u5B57","Change the text of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u6587\u5B57\u66F4\u6539\u70BA _PARAM1_","the label text.":"\u6A19\u7C64\u6587\u5B57\u3002","the label text":"\u6A19\u7C64\u6587\u5B57","De/activate interactions with the button.":"\u555F\u7528/\u505C\u7528\u8207\u6309\u9215\u7684\u4E92\u52D5\u3002","De/activate interactions":"\u555F\u7528/\u505C\u7528\u4E92\u52D5","Activate interactions with _PARAM0_: _PARAM1_":"\u555F\u7528 _PARAM0_ \u7684\u4E92\u52D5\uFF1A_PARAM1_","Activate":"\u555F\u7528","Check if interactions are activated on the button.":"\u6AA2\u67E5\u6309\u9215\u4E0A\u7684\u4E92\u52D5\u662F\u5426\u555F\u7528\u3002","Interactions activated":"\u4E92\u52D5\u5DF2\u555F\u7528","Interactions on _PARAM0_ are activated":"_PARAM0_ \u7684\u4E92\u52D5\u5DF2\u555F\u7528","the labelOffset of the object.":"\u7269\u4EF6\u7684\u6A19\u7C64\u504F\u79FB\u3002","LabelOffset":"\u6A19\u7C64\u504F\u79FB","the labelOffset":"\u6A19\u7C64\u504F\u79FB","Resource bar (continuous)":"\u5728\u904A\u6232\u4E2D\u4EE3\u8868\u8CC7\u6E90\u7684\u689D\uFF08\u751F\u547D\u503C\u3001\u6CD5\u529B\u3001\u5F48\u85E5\u7B49\uFF09\u3002","A bar that represents a resource in the game (health, mana, ammo, etc).":"\u5728\u8CC7\u7522\u5546\u5E97\u4E2D\u6709\u53EF\u4F7F\u7528\u7684\u8CC7\u6E90\u689D\u5305 [resource bars pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=resource-bars-resource-bars)\u3002","Resource bar":"\u8CC7\u6E90\u689D","Previous high value":"\u4E0A\u4E00\u500B\u9AD8\u503C","Previous high value conservation duration (in seconds)":"\u4E0A\u4E00\u500B\u9AD8\u503C\u4FDD\u5B58\u6642\u9593\uFF08\u79D2\uFF09","the value of the object.":"\u5C0D\u8C61\u7684\u503C\u3002","the value":"\u503C","the maximum value of the object.":"\u5C0D\u8C61\u7684\u6700\u5927\u503C\u3002","the maximum value":"\u6700\u5927\u503C","Check if the bar is empty.":"\u6AA2\u67E5\u689D\u662F\u5426\u70BA\u7A7A\u3002","Empty":"\u7A7A\u7684","_PARAM0_ bar is empty":"_PARAM0_ \u689D\u70BA\u7A7A","Check if the bar is full.":"\u6AA2\u67E5\u689D\u662F\u5426\u70BA\u6EFF\u3002","Full":"\u6EFF\u7684","_PARAM0_ bar is full":"_PARAM0_ \u689D\u70BA\u6EFF","the previous high value of the resource bar before the current change.":"\u5728\u7576\u524D\u8B8A\u5316\u4E4B\u524D\u8CC7\u6E90\u689D\u7684\u524D\u9AD8\u503C\u3002","the previous high value":"\u524D\u9AD8\u503C","Force the previous resource value to update to the current one.":"\u5F37\u5236\u524D\u8CC7\u6E90\u503C\u66F4\u65B0\u70BA\u7576\u524D\u503C\u3002","Update previous value":"\u66F4\u65B0\u524D\u503C","Update the previous resource value of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u524D\u8CC7\u6E90\u503C","the previous high value conservation duration (in seconds) of the object.":"\u7269\u4EF6\u7684\u524D\u9AD8\u503C\u4FDD\u5B58\u6642\u9577\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Previous high value conservation duration":"\u524D\u9AD8\u503C\u4FDD\u5B58\u6642\u9577","the previous high value conservation duration":"\u524D\u9AD8\u503C\u4FDD\u5B58\u6642\u9577","Check if the resource value is changing.":"\u6AA2\u67E5\u8CC7\u6E90\u503C\u662F\u5426\u5728\u8B8A\u5316\u3002","Value is changing":"\u503C\u5728\u8B8A\u5316","_PARAM0_ value is changing":"_PARAM0_ \u7684\u503C\u5728\u8B8A\u5316","Initial value":"\u521D\u59CB\u503C","It's used to detect a change at hot reload.":"\u5B83\u7528\u65BC\u6AA2\u6E2C\u71B1\u91CD\u65B0\u8F09\u6642\u7684\u66F4\u6539\u3002","Easing duration":"\u7DE9\u548C\u6301\u7E8C\u6642\u9593","Show the label":"\u986F\u793A\u6A19\u7C64","Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.":"\u6839\u64DA\u6309\u9215\u914D\u7F6E\u5C45\u4E2D\u689D\u3002\u5728\u8ABF\u6574\u6309\u9215\u5927\u5C0F\u6642\uFF0C\u9019\u689D\u7528\u65BC doStepPostEvents \u4E2D\u3002","Update layout":"\u66F4\u65B0\u4F48\u5C40","Update layout of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u4F48\u5C40","_PARAM0_ is empty":"_PARAM0_ \u70BA\u7A7A","_PARAM0_ is full":"_PARAM0_ \u70BA\u6EFF","the previous value conservation duration (in seconds) of the object.":"\u7269\u4EF6\u7684\u524D\u503C\u4FDD\u5B58\u6642\u9577\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Previous value conservation duration":"\u524D\u503C\u4FDD\u5B58\u6642\u9577","the previous value conservation duration":"\u4EE5\u524D\u7684\u503C\u4FDD\u5B58\u6642\u9593","Value width":"\u503C\u7684\u5BEC\u5EA6","Check if the label is shown.":"\u6AA2\u67E5\u6A19\u7C64\u662F\u5426\u986F\u793A\u3002","Label is shown":"\u6A19\u7C64\u5DF2\u986F\u793A","_PARAM0_ label is shown":" ","Show (or hide) the label on the bar.":"\u5728\u689D\u4E0A\u986F\u793A\uFF08\u6216\u96B1\u85CF\uFF09\u6A19\u7C64\u3002","Show label":"\u986F\u793A\u6A19\u7C64","Show the label of _PARAM0_: _PARAM1_":"\u986F\u793A _PARAM0_ \u7684\u6A19\u7C64\uFF1A_PARAM1_","Update the text that display the current value and maximum value.":"\u66F4\u65B0\u986F\u793A\u76EE\u524D\u503C\u548C\u6700\u5927\u503C\u7684\u6587\u5B57\u3002","Update label":"\u66F4\u65B0\u6A19\u7C64","Update label of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u6A19\u7C64","Slider":"\u6ED1\u584A","Represent a value on a slider.":"\u5728\u6ED1\u584A\u4E0A\u8868\u793A\u503C\u3002","Step size":"\u6B65\u9032\u5927\u5C0F","the minimum value of the object.":"\u5C0D\u8C61\u7684\u6700\u5C0F\u503C\u3002","the minimum value":"\u6700\u5C0F\u503C","the bar value bounds size.":"\u689D\u7684\u503C\u7BC4\u570D\u5C3A\u5BF8\u3002","the bar value bounds size":"\u689D\u7684\u503C\u7BC4\u570D\u5C3A\u5BF8","the step size of the object.":"\u5C0D\u8C61\u7684\u6B65\u9032\u5927\u5C0F\u3002","the step size":"\u6B65\u9032\u5927\u5C0F","Bar left margin":"\u689D\u5DE6\u908A\u908A\u8DDD","Bar":"\u689D","Bar top margin":"\u689D\u9802\u90E8\u908A\u8DDD","Bar right margin":"\u53F3\u908A\u689D","Bar bottom margin":"\u5E95\u90E8\u689D","Show the label when the value is changed":"\u7576\u503C\u6539\u8B8A\u6642\u986F\u793A\u6A19\u7C64","Label margin":"\u6A19\u7C64\u908A\u7DE3","Only used by the scene editor.":"\u50C5\u4F9B\u5834\u666F\u7DE8\u8F2F\u5668\u4F7F\u7528\u3002","the value of the slider.":"\u6ED1\u687F\u7684\u503C\u3002","the minimum value of the slider.":"\u6ED1\u687F\u7684\u6700\u5C0F\u503C\u3002","the maximum value of the slider.":"\u6ED1\u687F\u7684\u6700\u5927\u503C\u3002","the step size of the slider.":"\u6ED1\u687F\u7684\u6B65\u9032\u5927\u5C0F\u3002","Update the thumb position according to the slider value.":"\u6839\u64DA\u6ED1\u687F\u503C\u66F4\u65B0\u6ED1\u584A\u4F4D\u7F6E\u3002","Update thumb position":"\u66F4\u65B0\u6ED1\u9F20\u4F4D\u7F6E","Update the thumb position of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u6ED1\u9F20\u4F4D\u7F6E","Update the slider configuration.":"\u66F4\u65B0\u6ED1\u9F20\u7684\u8A2D\u5B9A\u3002","Update slider configuration":"\u66F4\u65B0\u6ED1\u9F20\u8A2D\u5B9A","Update the slider configuration of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u6ED1\u9F20\u8A2D\u5B9A","Check if the slider allows interactions.":"\u6AA2\u67E5\u6ED1\u9F20\u662F\u5426\u5141\u8A31\u4E92\u52D5\u3002","Parallax for Tiled Sprite":"\u5E73\u79FB\u7528\u4E8E\u5E73\u94FA\u7CBE\u7075","Behaviors to animate Tiled Sprite objects in the background, following the camera with a parallax effect.":"\u5728\u80CC\u666F\u4E2D\u7528\u4E8E\u5E73\u94FA\u7CBE\u7075\u7269\u4F53\u7684\u884C\u4E3A\uFF0C\u6309\u6BD4\u4F8B\u6548\u679C\u8DDF\u968F\u76F8\u673A\u79FB\u52A8\u3002","Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"\u79FB\u52D5\u5E73\u92EA\u7CBE\u9748\u7684\u5716\u50CF\uFF0C\u4F7F\u5176\u96A8\u8457\u76F8\u6A5F\u7684\u6C34\u5E73\u79FB\u52D5\u5177\u6709\u8996\u5DEE\u6548\u61C9\u3002\u5C07\u6B64\u6DFB\u52A0\u5230\u5C0D\u8C61\u5F8C\uFF0C\u5C07\u5C0D\u8C61\u653E\u5728\u4E00\u500B\u4E0D\u52D5\u7684\u5C64\u4E0A\uFF0C\u7F6E\u65BC\u88AB\u95DC\u6CE8\u7684\u5C64\u7684\u5F8C\u9762\uFF08\u4F8B\u5982\uFF0C\u4E00\u500B\u540D\u70BA\u201C\u80CC\u666F\u201D\u7684\u5C64\uFF09\u3002","Horizontal Parallax for a Tiled Sprite":"\u5E73\u92EA\u6548\u61C9\u7528\u65BC\u5E73\u92EA\u7CBE\u9748\u7684\u6C34\u5E73\u8996\u5DEE","Parallax factor (speed for the parallax, usually between 0 and 1)":"\u8996\u5DEE\u56E0\u5B50\uFF08\u8996\u5DEE\u7684\u901F\u5EA6\uFF0C\u901A\u5E38\u4ECB\u65BC0\u548C1\u4E4B\u9593\uFF09","Layer to be followed (leave empty for the base layer)":"\u8981\u8DDF\u96A8\u7684\u5716\u5C64\uFF08\u7559\u7A7A\u70BA\u57FA\u790E\u5716\u5C64\uFF09","Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"\u79FB\u52D5\u5E73\u92EA\u7CBE\u9748\u7684\u5716\u50CF\uFF0C\u4F7F\u5176\u96A8\u8457\u76F8\u6A5F\u7684\u5782\u76F4\u79FB\u52D5\u5177\u6709\u8996\u5DEE\u6548\u61C9\u3002\u5C07\u6B64\u6DFB\u52A0\u5230\u5C0D\u8C61\u5F8C\uFF0C\u5C07\u5C0D\u8C61\u653E\u5728\u4E00\u500B\u4E0D\u52D5\u7684\u5C64\u4E0A\uFF0C\u7F6E\u65BC\u88AB\u95DC\u6CE8\u7684\u5C64\u7684\u5F8C\u9762\uFF08\u4F8B\u5982\uFF0C\u4E00\u500B\u540D\u70BA\u201C\u80CC\u666F\u201D\u7684\u5C64\uFF09\u3002","Vertical Parallax for a Tiled Sprite":"\u5E73\u92EA\u6548\u61C9\u7528\u65BC\u5E73\u92EA\u7CBE\u9748\u7684\u5782\u76F4\u8996\u5DEE","Offset on Y axis":"Y\u8EF8\u504F\u79FB","3D particle emitter":"3D\u7C92\u5B50\u767C\u5C04\u5668","Display a large number of particles in 3D to create visual effects in a 3D game.":"\u57283D\u4E2D\u986F\u793A\u5927\u91CF\u7C92\u5B50\u4EE5\u5275\u5EFA3D\u904A\u6232\u4E2D\u7684\u8996\u89BA\u6548\u679C\u3002","Display a large number of particles to create visual effects.":"\u663E\u793A\u5927\u91CF\u7C92\u5B50\u4EE5\u521B\u5EFA\u89C6\u89C9\u6548\u679C\u3002","Start color":"\u8D77\u59CB\u984F\u8272","End color":"\u7D50\u675F\u984F\u8272","Start opacity":"\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6","Flow of particles (particles per second)":"\u7C92\u5B50\u6D41\u52D5\uFF08\u6BCF\u79D2\u7C92\u5B50\u6578\uFF09","Start min size":"\u8D77\u59CB\u6700\u5C0F\u5C3A\u5BF8","Start max size":"\u8D77\u59CB\u6700\u5927\u5C3A\u5BF8","End scale":"\u7D50\u675F\u6BD4\u4F8B","Start min speed":"\u8D77\u59CB\u6700\u5C0F\u901F\u5EA6","Start max speed":"\u8D77\u59CB\u6700\u5927\u901F\u5EA6","Min lifespan":"\u6700\u77ED\u58FD\u547D","Max lifespan":"\u6700\u9577\u58FD\u547D","Emission duration":"\u767C\u5C04\u6301\u7E8C\u6642\u9593","Particles move with the emitter":"\u7C92\u5B50\u96A8\u767C\u5C04\u5668\u79FB\u52D5","Spay cone angle":"\u5674\u5C04\u9310\u89D2\u5EA6","Blending":"\u6DF7\u5408","Gravity top":"\u9802\u90E8\u91CD\u529B","Delete when emission ends":"\u7576\u767C\u5C04\u7D50\u675F\u6642\u522A\u9664","Z (elevation)":"Z\uFF08\u9AD8\u5EA6\uFF09","Deprecated":"\u5DF2\u68C4\u7528","Rotation on X axis":"X\u8EF8\u65CB\u8F49","Rotation on Y axis":"Y\u8EF8\u65CB\u8F49","Start min length":"\u958B\u59CB\u6700\u5C0F\u9577\u5EA6","Trail":"\u62D6\u5C3E","Start max length":"\u958B\u59CB\u6700\u5927\u9577\u5EA6","Render mode":"\u6E32\u67D3\u6A21\u5F0F","Follow the object":"\u8DDF\u96A8\u5C0D\u8C61","Tail end width ratio":"\u5C3E\u7AEF\u5BEC\u5EA6\u6BD4\u4F8B","Update from properties.":"\u5F9E\u5C6C\u6027\u66F4\u65B0\u3002","Update from properties":"\u5F9E\u5C6C\u6027\u66F4\u65B0","Update from properties of _PARAM0_":"\u5F9E _PARAM0_ \u7684\u5C6C\u6027\u66F4\u65B0","Update helper":"\u66F4\u65B0\u52A9\u624B","Update graphical helper of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u5716\u5F62\u52A9\u624B","Update particle image":"\u66F4\u65B0\u7C92\u5B50\u5716\u50CF","Update particle image of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u7C92\u5B50\u5716\u50CF","Register in layer":"\u5728\u5716\u5C64\u4E2D\u8A3B\u518A","Register _PARAM0_ in layer":"\u5728\u5716\u5C64\u4E2D\u8A3B\u518A _PARAM0_","Delete itself":"\u522A\u9664\u81EA\u8EAB","Delete _PARAM0_":"\u522A\u9664 _PARAM0_","Check that emission has ended and no particle is alive anymore.":"\u6AA2\u67E5\u767C\u5C04\u662F\u5426\u5DF2\u7D50\u675F\uFF0C\u4E26\u4E14\u6C92\u6709\u4EFB\u4F55\u7C92\u5B50\u662F\u6D3B\u8457\u7684\u3002","Emission has ended":"\u767C\u5C04\u5DF2\u7D50\u675F","Emission from _PARAM0_ has ended":"_PARAM0_ \u7684\u767C\u5C04\u5DF2\u7D50\u675F","Restart particule emission from the beginning.":"\u5F9E\u982D\u91CD\u65B0\u958B\u59CB\u7C92\u5B50\u7684\u767C\u5C04\u3002","Restart":"\u91CD\u65B0\u555F\u52D5","Restart particule emission from _PARAM0_":"\u5F9E _PARAM0_ \u91CD\u65B0\u958B\u59CB\u7C92\u5B50\u7684\u767C\u5C04","the Z position of the emitter.":"\u767C\u5C04\u5668\u7684 Z \u4F4D\u7F6E\u3002","Z elevaltion (deprecated)":"Z \u9AD8\u5EA6\uFF08\u5DF2\u68C4\u7528\uFF09","the Z position":"Z \u4F4D\u7F6E","the rotation on X axis of the emitter.":"\u767C\u5C04\u5668 X \u8EF8\u7684\u65CB\u8F49\u3002","Rotation on X axis (deprecated)":"X \u8EF8\u7684\u65CB\u8F49\uFF08\u5DF2\u68C4\u7528\uFF09","the rotation on X axis":"X \u8EF8\u7684\u65CB\u8F49","the rotation on Y axis of the emitter.":"\u767C\u5C04\u5668 Y \u8EF8\u7684\u65CB\u8F49\u3002","Rotation on Y axis (deprecated)":"Y \u8EF8\u7684\u65CB\u8F49\uFF08\u5DF2\u68C4\u7528\uFF09","the rotation on Y axis":"Y \u8EF8\u7684\u65CB\u8F49","the start color of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u984F\u8272\u3002","the start color":"\u8D77\u59CB\u984F\u8272","the end color of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u984F\u8272\u3002","the end color":"\u7D50\u675F\u984F\u8272","the start opacity of the object.":"\u7269\u4EF6\u7684\u958B\u59CB\u4E0D\u900F\u660E\u5EA6\u3002","the start opacity":"\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6","the end opacity of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u4E0D\u900F\u660E\u5EA6\u3002","the end opacity":"\u7D50\u675F\u4E0D\u900F\u660E\u5EA6","the flow of particles of the object (particles per second).":"\u7269\u4EF6\u7684\u7C92\u5B50\u6D41\uFF08\u6BCF\u79D2\u7684\u7C92\u5B50\u6578\uFF09\u3002","Flow of particles":"\u7C92\u5B50\u6D41","the flow of particles":"\u7269\u4EF6\u7684\u7C92\u5B50\u6D41","the start min size of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u6700\u5C0F\u5C3A\u5BF8\u3002","the start min size":"\u8D77\u59CB\u6700\u5C0F\u5C3A\u5BF8","the start max size of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u6700\u5927\u5C3A\u5BF8\u3002","the start max size":"\u8D77\u59CB\u6700\u5927\u5C3A\u5BF8","the end scale of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u7E2E\u653E\u3002","the end scale":"\u7D50\u675F\u7E2E\u653E","the min start speed of the object.":"\u7269\u9AD4\u7684\u6700\u5C0F\u8D77\u59CB\u901F\u5EA6\u3002","Min start speed":"\u6700\u5C0F\u8D77\u59CB\u901F\u5EA6","the min start speed":"\u7269\u9AD4\u7684\u6700\u5C0F\u8D77\u59CB\u901F\u5EA6","the max start speed of the object.":"\u7269\u9AD4\u7684\u6700\u5927\u8D77\u59CB\u901F\u5EA6\u3002","Max start speed":"\u6700\u5927\u8D77\u59CB\u901F\u5EA6","the max start speed":"\u7269\u9AD4\u7684\u6700\u5927\u8D77\u59CB\u901F\u5EA6","the min lifespan of the object.":"\u7269\u9AD4\u7684\u6700\u5C0F\u58FD\u547D\u3002","the min lifespan":"\u7269\u9AD4\u7684\u6700\u5C0F\u58FD\u547D","the max lifespan of the object.":"\u7269\u9AD4\u7684\u6700\u5927\u58FD\u547D\u3002","the max lifespan":"\u7269\u9AD4\u7684\u6700\u5927\u58FD\u547D","the emission duration of the object.":"\u7269\u9AD4\u7684\u767C\u5C04\u6301\u7E8C\u6642\u9593\u3002","the emission duration":"\u7269\u9AD4\u7684\u767C\u5C04\u6301\u7E8C\u6642\u9593","Check if particles move with the emitter.":"\u6AA2\u67E5\u7C92\u5B50\u662F\u5426\u96A8\u8457\u767C\u5C04\u5668\u79FB\u52D5\u3002","_PARAM0_ particles move with the emitter":"_PARAM0_\u7C92\u5B50\u96A8\u8457\u767C\u5C04\u5668\u79FB\u52D5","Change if particles move with the emitter.":"\u66F4\u6539\u7C92\u5B50\u662F\u5426\u96A8\u8457\u767C\u5C04\u5668\u79FB\u52D5\u3002","_PARAM0_ particles move with the emitter: _PARAM1_":"_PARAM0_\u7C92\u5B50\u96A8\u8457\u767C\u5C04\u5668\u79FB\u52D5: _PARAM1_","AreParticlesRelative":"AreParticlesRelative","the spay cone angle of the object.":"\u7269\u9AD4\u7684\u5674\u5C04\u9310\u89D2\u3002","the spay cone angle":"\u7269\u9AD4\u7684\u5674\u5C04\u9310\u89D2","the blending of the object.":"\u7269\u9AD4\u7684\u6DF7\u5408\u3002","the blending":"\u7269\u9AD4\u7684\u6DF7\u5408","the gravity top of the object.":"\u7269\u9AD4\u7684\u9802\u90E8\u91CD\u529B\u3002","the gravity top":"\u7269\u9AD4\u7684\u9802\u90E8\u91CD\u529B","the gravity of the object.":"\u7269\u9AD4\u7684\u91CD\u529B\u3002","the gravity":"\u7269\u9AD4\u7684\u91CD\u529B","Check if delete when emission ends.":"\u6AA2\u67E5\u662F\u5426\u5728\u767C\u5C04\u7D50\u675F\u6642\u522A\u9664\u7C92\u5B50\u3002","_PARAM0_ delete when emission ends":"_PARAM0_\u767C\u5C04\u7D50\u675F\u6642\u522A\u9664\u7C92\u5B50","Change if delete when emission ends.":"\u66F4\u6539\u662F\u5426\u5728\u767C\u5C04\u7D50\u675F\u6642\u522A\u9664\u7C92\u5B50\u3002","_PARAM0_ delete when emission ends: _PARAM1_":"_PARAM0_\u767C\u5C04\u7D50\u675F\u6642\u522A\u9664\u7C92\u5B50: _PARAM1_","ShouldAutodestruct":"\u61C9\u8A72\u81EA\u6211\u6BC0\u6EC5","the start min trail length of the object.":"\u5C0D\u8C61\u7684\u8D77\u59CB\u6700\u5C0F\u8ECC\u8DE1\u9577\u5EA6\u3002","Start min trail length":"\u8D77\u59CB\u6700\u5C0F\u8ECC\u8DE1\u9577\u5EA6","the start min trail length":"\u8D77\u59CB\u6700\u5C0F\u8ECC\u8DE1\u9577\u5EA6","the start max trail length of the object.":"\u5C0D\u8C61\u7684\u8D77\u59CB\u6700\u5927\u8ECC\u8DE1\u9577\u5EA6\u3002","Start max trail length":"\u8D77\u59CB\u6700\u5927\u8ECC\u8DE1\u9577\u5EA6","the start max trail length":"\u8D77\u59CB\u6700\u5927\u8ECC\u8DE1\u9577\u5EA6","Check if the trail should follow the object.":"\u6AA2\u67E5\u8ECC\u8DE1\u662F\u5426\u61C9\u8DDF\u96A8\u5C0D\u8C61\u3002","Trail following the object":"\u8DDF\u96A8\u5C0D\u8C61\u7684\u8ECC\u8DE1","The trail is following _PARAM0_":"\u8ECC\u8DE1\u6B63\u5728\u8DDF\u96A8 _PARAM0_","Change if the trail should follow the object or not.":"\u66F4\u6539\u8ECC\u8DE1\u662F\u5426\u61C9\u8DDF\u96A8\u5C0D\u8C61\u3002","Make the trail follow":"\u4F7F\u8ECC\u8DE1\u8DDF\u96A8","Make the trail follow _PARAM0_: _PARAM1_":"\u4F7F\u8ECC\u8DE1\u8DDF\u96A8 _PARAM0_: _PARAM1_","IsTrailFollowingLocalOrigin":"IsTrailFollowingLocalOrigin","the tail end width ratio of the object.":"\u5C0D\u8C61\u7684\u5C3E\u7AEF\u5BEC\u5EA6\u6BD4\u4F8B\u3002","the tail end width ratio":"\u5C3E\u7AEF\u5BEC\u5EA6\u6BD4\u4F8B","the render mode of the object.":"\u5C0D\u8C61\u7684\u6E32\u67D3\u6A21\u5F0F\u3002","the render mode":"\u6E32\u67D3\u6A21\u5F0F","2D Top-Down Physics Car":"2D \u4FEF\u8996\u7269\u7406\u8ECA","Simulate top-down car motion with drifting.":"\u6A21\u64EC\u5E36\u6F02\u79FB\u7684\u4FEF\u8996\u8ECA\u8F1B\u904B\u52D5\u3002","Simulate 2D car motion, from a top-down view.":"\u5F9E\u4FEF\u8996\u89D2\u5EA6\u6A21\u64EC 2D \u8ECA\u8F1B\u904B\u52D5\u3002","Physics car":"\u7269\u7406\u6C7D\u8ECA","Physics Engine 2.0":"\u7269\u7406\u5F15\u64CE2.0","Wheel grip ratio (from 0 to 1)":"\u8F2A\u80CE\u6293\u5730\u6BD4\uFF08\u5F9E0\u52301\uFF09","A ratio of 0 is like driving on ice.":"\u6BD4\u503C\u70BA0\u5C31\u50CF\u5728\u51B0\u4E0A\u884C\u99DB\u3002","Steering":"\u8F49\u5411","Steering speed":"\u8F49\u5411\u901F\u5EA6","Sterring speed when turning back":"\u56DE\u8F49\u6642\u7684\u8F49\u5411\u901F\u5EA6","Maximum steering angle":"\u6700\u5927\u8F49\u5411\u89D2\u5EA6","Steering angle":"\u8F49\u5411\u89D2\u5EA6","Front wheels position":"\u524D\u8F2A\u4F4D\u7F6E","0 means at the center, 1 means at the front":"0\u8868\u793A\u5728\u4E2D\u5FC3\uFF0C1\u8868\u793A\u5728\u524D\u65B9","Wheels":"\u8F2A\u5B50","Rear wheels position":"\u5F8C\u8F2A\u4F4D\u7F6E","0 means at the center, 1 means at the back":"0\u8868\u793A\u5728\u4E2D\u5FC3\uFF0C1\u8868\u793A\u5728\u5F8C\u65B9","Simulate a press of the right key.":"\u6A21\u64EC\u6309\u4E0B\u53F3\u9375\u3002","Simulate right key press":"\u6A21\u64EC\u6309\u4E0B\u53F3\u9375","Simulate pressing right for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B\u53F3\u9375\uFF0C\u6309_PARAM0_","Simulate a press of the left key.":"\u6A21\u64EC\u6309\u4E0B\u5DE6\u9375\u3002","Simulate left key press":"\u6A21\u64EC\u6309\u4E0B\u5DE6\u9375","Simulate pressing left for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B\u5DE6\u9375\uFF0C\u6309_PARAM0_","Simulate a press of the up key.":"\u6A21\u64EC\u6309\u4E0B\u4E0A\u9375\u3002","Simulate up key press":"\u6A21\u64EC\u6309\u4E0B\u4E0A\u9375","Simulate pressing up for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B\u4E0A\u9375\uFF0C\u6309_PARAM0_","Simulate a press of the down key.":"\u6A21\u64EC\u6309\u4E0B\u4E0B\u9375\u3002","Simulate down key press":"\u6A21\u64EC\u6309\u4E0B\u4E0B\u9375","Simulate pressing down for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B\u4E0B\u9375\uFF0C\u6309_PARAM0_","Simulate a steering stick for a given axis force.":"\u6A21\u64EC\u7D66\u5B9A\u8EF8\u529B\u7684\u65B9\u5411\u76E4\u3002","Simulate steering stick":"\u6A21\u64EC\u65B9\u5411\u76E4","Simulate a steering stick for _PARAM0_ with a force of _PARAM2_":"\u6A21\u64EC_PARAM0_\u7684\u65B9\u5411\u76E4\uFF0C\u529B\u70BA_PARAM2_","Simulate an acceleration stick for a given axis force.":"\u6A21\u64EC\u7D66\u5B9A\u8EF8\u529B\u7684\u52A0\u901F\u68D2\u3002","Simulate acceleration stick":"\u6A21\u64EC\u52A0\u901F\u68D2","Simulate an acceleration stick for _PARAM0_ with a force of _PARAM2_":"\u6A21\u64EC_PARAM0_\u7684\u52A0\u901F\u68D2\uFF0C\u529B\u70BA_PARAM2_","Apply wheel forces":"\u61C9\u7528\u8F2A\u5B50\u529B","Apply forces on the wheel at _PARAM2_ ; _PARAM3_ and _PARAM4_\xB0 of _PARAM0_":"\u5728_PARAM2_ ; _PARAM3_\u548C_PARAM4_\xB0\u7684_PARAM0_\u8F2A\u4E0A\u61C9\u7528\u529B","Wheel X":"\u8F2A\u5B50X","Wheel Y":"\u8F2A\u5B50Y","Wheel angle":"\u8F2A\u5B50\u89D2\u5EA6","Return the momentum of inertia (in kg \u22C5 pixel\xB2)":"\u8FD4\u56DE\u60EF\u6027\u77E9\uFF08\u4EE5 kg \u22C5 \u50CF\u7D20\xB2 \u8868\u793A\uFF09","Momentum of inertia":"\u60EF\u6027\u77E9","Apply a polar force":"\u61C9\u7528\u6975\u5750\u6807\u529B","Length (in kg \u22C5 pixels \u22C5 s^\u22122)":"\u957F\u5EA6\uFF08\u4EE5 kg \u22C5 \u50CF\u7D20 \u22C5 s^\u22122 \u8868\u793A\uFF09","Draw forces applying on the car for debug purpose.":"\u7ED8\u5236\u5BF9\u8F66\u8F86\u65BD\u52A0\u7684\u529B\uFF0C\u4EE5\u8FDB\u884C\u8C03\u8BD5\u4E3A\u76EE\u7684\u3002","Draw forces for debug":"\u4EE5\u8C03\u8BD5\u76EE\u7684\u7ED8\u5236\u529B","Draw forces of car _PARAM0_ on _PARAM2_":"\u7ED8\u5236_PARAM0_\u7684_PARAM2_\u7684\u6C7D\u8F66\u529B","the steering angle of the object.":"\u7269\u4F53\u7684\u8F6C\u5411\u89D2\u5EA6\u3002","the steering angle":"\u8F6C\u5411\u89D2\u5EA6","the wheel grip ratio of the object (from 0 to 1). A ratio of 0 is like driving on ice.":"\u7269\u4F53\u7684\u8F66\u8F6E\u6293\u5730\u6BD4\uFF08\u4ECE0\u52301\uFF09\u3002\u6BD4\u7387\u4E3A0\u65F6\uFF0C\u5C31\u50CF\u5728\u51B0\u4E0A\u5F00\u8F66\u3002","Wheel grip ratio":"\u8F2A\u80CE\u6293\u5730\u6BD4\u7387","the wheel grip ratio":"\u8ECA\u8F2A\u6293\u5730\u6BD4\u7387","the maximum steering angle of the object.":"\u7269\u4EF6\u7684\u6700\u5927\u8F49\u5411\u89D2\u5EA6\u3002","the maximum steering angle":"\u6700\u5927\u8F49\u5411\u89D2\u5EA6","the steering speed of the object.":"\u7269\u4EF6\u7684\u8F49\u5411\u901F\u5EA6\u3002","the steering speed":"\u8F49\u5411\u901F\u5EA6","the sterring speed when turning back of the object.":"\u7269\u4EF6\u56DE\u8F49\u6642\u7684\u8F49\u5411\u901F\u5EA6\u3002","Sterring back speed":"\u56DE\u8F49\u901F\u5EA6","the sterring speed when turning back":"\u56DE\u8F49\u6642\u7684\u8F49\u5411\u901F\u5EA6","3D car keyboard mapper":"3D car keyboard mapper","3D car keyboard controls.":"3D car keyboard controls.","Control a 3D physics car with a keyboard.":"Control a 3D physics car with a keyboard.","Hand brake key":"Hand brake key","3D physics character animator":"3D\u7269\u7406\u89D2\u8272\u52D5\u756B\u88FD\u4F5C\u8005","Change animations of a 3D physics character automatically.":"\u81EA\u52D5\u66F4\u65393D\u7269\u7406\u89D2\u8272\u7684\u52D5\u756B\u3002","Animatable capacity":"\u53EF\u52D5\u756B\u5BB9\u91CF","\"Idle\" animation name":"\"\u9592\u7F6E\"\u52D5\u756B\u540D\u7A31","Animation names":"\u52D5\u756B\u540D\u7A31","\"Run\" animation name":"\"\u5954\u8DD1\"\u52D5\u756B\u540D\u7A31","\"Jump\" animation name":"\"\u8DF3\u8E8D\"\u52D5\u756B\u540D\u7A31","\"Fall\" animation name":"\"\u589C\u843D\"\u52D5\u756B\u540D\u7A31","3D character keyboard mapper":"3D\u89D2\u8272\u9375\u76E4\u6620\u5C04\u5668","3D platformer and 3D shooter keyboard controls.":"3D\u5E73\u53F0\u904A\u6232\u548C3D\u5C04\u64CA\u904A\u6232\u7684\u9375\u76E4\u63A7\u5236\u3002","Control a 3D physics character with a keyboard for a platformer or a top-down game.":"\u4F7F\u7528\u9375\u76E4\u63A7\u52363D\u7269\u7406\u89D2\u8272\u9032\u884C\u5E73\u53F0\u904A\u6232\u6216\u81EA\u4E0A\u800C\u4E0B\u7684\u904A\u6232\u3002","3D platformer keyboard mapper":"3D\u5E73\u53F0\u904A\u6232\u9375\u76E4\u6620\u5C04\u5668","Camera is locked for the frame":"\u76F8\u6A5F\u5728\u8A72\u5E40\u4E0A\u9396\u5B9A","Check if camera is locked for the frame.":"\u6AA2\u67E5\u76F8\u6A5F\u662F\u5426\u9396\u5B9A\u756B\u9762\u3002","Camera is locked":"\u76F8\u673A\u5DF2\u9501\u5B9A","_PARAM0_ camera is locked for the frame":"_PARAM0_ \u76F8\u6A5F\u5DF2\u9396\u5B9A\u756B\u9762","Change if camera is locked for the frame.":"\u66F4\u6539\u76F8\u6A5F\u662F\u5426\u9396\u5B9A\u756B\u9762\u3002","Lock the camera":"\u9501\u5B9A\u76F8\u673A","_PARAM0_ camera is locked for the frame: _PARAM2_":"_PARAM0_ \u76F8\u6A5F\u5DF2\u9396\u5B9A\u756B\u9762\uFF1A _PARAM2_","Control a 3D physics character with a keyboard for a first or third person shooter.":"\u4F7F\u7528\u9375\u76E4\u63A7\u52363D\u7269\u7406\u89D2\u8272\u9032\u884C\u7B2C\u4E00\u6216\u7B2C\u4E09\u4EBA\u7A31\u5C04\u64CA\u904A\u6232\u3002","3D shooter keyboard mapper":"3D\u5C04\u64CA\u904A\u6232\u9375\u76E4\u6620\u5C04\u5668","3D ellipse movement":"3D\u6A62\u5713\u904B\u52D5","3D physics engine":"3D\u7269\u7406\u5F15\u64CE","Ellipse width":"\u6A62\u5713\u5BEC\u5EA6","Ellipse height":"\u6A62\u5713\u9AD8\u5EA6","the ellipse width of the object.":"\u7269\u4EF6\u7684\u6A62\u5713\u5BEC\u5EA6\u3002","the ellipse width":"\u6A62\u5713\u5BEC\u5EA6","the ellipse height of the object.":"\u7269\u4EF6\u7684\u6A62\u5713\u9AD8\u5EA6\u3002","the ellipse height":"\u6A62\u5713\u9AD8\u5EA6","the loop duration (in seconds).":"\u5FAA\u74B0\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09\u3002","the loop duration":"\u5FAA\u74B0\u6301\u7E8C\u6642\u9593","Pinching gesture":"\u634F\u53D6\u624B\u52E2","Move the camera or objects with pinching gestures.":"\u7528\u634F\u53D6\u624B\u52E2\u79FB\u52D5\u76F8\u6A5F\u6216\u7269\u9AD4\u3002","Enable or disable camera pinch.":"\u555F\u7528\u6216\u7981\u7528\u76F8\u6A5F\u634F\u3002","Enable or disable camera pinch":"\u555F\u7528\u6216\u7981\u7528\u76F8\u6A5F\u634F","Enable camera pinch: _PARAM1_":"\u555F\u7528\u76F8\u6A5F\u634F\uFF1A_PARAM1_","Enable camera pinch":"\u555F\u7528\u76F8\u6A5F\u634F","Check if camera pinch is enabled.":"\u6AA2\u67E5\u76F8\u6A5F\u634F\u662F\u5426\u5DF2\u555F\u7528\u3002","Camera pinch is enabled":"\u76F8\u6A5F\u634F\u5408\u5DF2\u555F\u7528","Choose the layer to move with pinch gestures.":"\u9078\u64C7\u5716\u5C64\u4EE5\u79FB\u52D5\u4F7F\u7528\u634F\u5408\u624B\u52E2\u3002","Camera pinch layer":"\u76F8\u6A5F\u634F\u5408\u5716\u5C64","Choose the layer _PARAM1_ to move with pinch gestures":"\u9078\u64C7\u5716\u5C64_PARAM1_\u4EE5\u79FB\u52D5\u4F7F\u7528\u634F\u5408\u624B\u52E2","Change the camera pinch constraint.":"\u66F4\u6539\u76F8\u6A5F\u634F\u5408\u7D04\u675F\u3002","Camera pinch constraints":"\u76F8\u6A5F\u634F\u5408\u7D04\u675F","Change the camera pinch constraint to _PARAM1_":"\u5C07\u76F8\u6A5F\u634F\u5408\u7D04\u675F\u66F4\u6539\u70BA_PARAM1_","Constraint":"\u7D04\u675F","Pinch the camera of a layer.":"\u634F\u5408\u5716\u5C64\u7684\u76F8\u6A5F\u3002","Pinch camera":"\u634F\u5408\u76F8\u6A5F","Pinch the camera of layer: _PARAM1_ with constraint: _PARAM2_":"\u4F7F\u7528\u7D04\u675F_PARAM2_\u634F\u5408\u5716\u5C64_PARAM1_\u7684\u76F8\u6A5F\u3002","Check if a touch is pinching, if 2 touches are pressed.":"\u6AA2\u67E5\u662F\u5426\u89F8\u78B0\u634F\u5408\uFF0C\u5982\u679C\u6309\u4E0B2\u500B\u89F8\u78B0\u3002","Touch is pinching":"\u89F8\u78B0\u6B63\u5728\u634F\u5408","Return the scaling of the pinch gesture from its beginning.":"\u5F9E\u958B\u59CB\u6642\u8FD4\u56DE\u634F\u5408\u624B\u52E2\u7684\u7E2E\u653E\u3002","Pinch scaling":"\u634F\u5408\u7E2E\u653E","Return the rotation of the pinch gesture from its beginning (in degrees).":"\u5F9E\u958B\u59CB\u6642\u8FD4\u56DE\u634F\u5408\u624B\u52E2\u7684\u65CB\u8F49\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09\u3002","Pinch rotation":"\u634F\u5408\u65CB\u8F49","Return the X position of the pinch center at the beginning of the gesture.":"\u8FD4\u56DE\u624B\u52E2\u958B\u59CB\u6642\u7684\u634F\u5408\u4E2D\u5FC3\u7684X\u4F4D\u7F6E\u3002","Pinch beginning center X":"\u634F\u5408\u958B\u59CB\u4E2D\u5FC3X","Return the Y position of the pinch center at the beginning of the gesture.":"\u8FD4\u56DE\u624B\u52E2\u958B\u59CB\u6642\u7684\u634F\u5408\u4E2D\u5FC3\u7684Y\u4F4D\u7F6E\u3002","Pinch beginning center Y":"\u634F\u5408\u958B\u59CB\u4E2D\u5FC3Y","Return the X position of the pinch center.":"\u8FD4\u56DE\u634F\u5408\u4E2D\u5FC3\u7684X\u4F4D\u7F6E\u3002","Pinch center X":"\u634F\u5408\u4E2D\u5FC3X","Return the Y position of the pinch center.":"\u8FD4\u56DE\u634F\u5408\u4E2D\u5FC3\u7684Y\u4F4D\u7F6E\u3002","Pinch center Y":"\u634F\u5408\u4E2D\u5FC3Y","Return the horizontal translation of the pinch gesture from its beginning.":"\u5F9E\u958B\u59CB\u6642\u8FD4\u56DE\u634F\u5408\u624B\u52E2\u7684\u6C34\u5E73\u4F4D\u79FB\u3002","Pinch translation X":"\u634F\u5408\u5E73\u79FBX","Return the vertical translation of the pinch gesture from its beginning.":"\u5F9E\u958B\u59CB\u6642\u8FD4\u56DE\u634F\u5408\u624B\u52E2\u7684\u5782\u76F4\u4F4D\u79FB\u3002","Pinch translation Y":"\u634F\u5408\u5E73\u79FBY","Return the new X position of a point after the pinch gesture.":"\u8FD4\u56DE\u634F\u5408\u624B\u52E2\u5F8C\u9EDE\u7684\u65B0X\u4F4D\u7F6E\u3002","Transform X position":"\u8F49\u63DBX\u4F4D\u7F6E","Position X before the pinch":"\u634F\u5408\u4E4B\u524D\u7684X\u4F4D\u7F6E","Position Y before the pinch":"\u634F\u5408\u4E4B\u524D\u7684Y\u4F4D\u7F6E","Return the new Y position of a point after the pinch gesture.":"\u8FD4\u56DE\u634F\u5408\u624B\u52E2\u5F8C\u9EDE\u7684\u65B0Y\u4F4D\u7F6E\u3002","Transform Y position":"\u8F49\u63DBY\u4F4D\u7F6E","Return the original X position of a point before the pinch gesture.":"\u8FD4\u56DE\u634F\u5408\u624B\u52E2\u4E4B\u524D\u9EDE\u7684\u539F\u59CBX\u4F4D\u7F6E\u3002","Inversed transform X position":"\u53CD\u8F49\u8B8A\u63DB X \u4F4D\u7F6E","Position X after the pinch":"\u634F\u5408\u624B\u52E2\u5F8C\u7684 X \u4F4D\u7F6E","Position Y after the pinch":"\u634F\u5408\u624B\u52E2\u5F8C\u7684 Y \u4F4D\u7F6E","Return the new position on the Y axis of a point after the pinch gesture.":"\u5728\u634F\u5408\u624B\u52E2\u5F8C\uFF0C\u8FD4\u56DE\u9EDE\u7684 Y \u8EF8\u65B0\u4F4D\u7F6E\u3002","Inversed transform Y position":"\u53CD\u8F49\u8B8A\u63DB Y \u4F4D\u7F6E","Return the X coordinate of a position transformed from the scene to the canvas according to a layer.":"\u5F9E\u5834\u666F\u5230\u756B\u5E03\u8F49\u63DB\u7684\u4F4D\u7F6E\u7684 X \u5EA7\u6A19\u3002","Transform X to canvas":"\u5C07 X \u8F49\u63DB\u5230\u756B\u5E03","Return the Y coordinate of a position transformed from the scene to the canvas according to a layer.":"\u5F9E\u5834\u666F\u5230\u756B\u5E03\u8F49\u63DB\u7684\u4F4D\u7F6E\u7684 Y \u5EA7\u6A19\u3002","Transform Y to canvas":"\u5C07 Y \u8F49\u63DB\u5230\u756B\u5E03","Return the X coordinate of a position transformed from the canvas to the scene according to a layer.":"\u5F9E\u756B\u5E03\u5230\u5834\u666F\u8F49\u63DB\u7684\u4F4D\u7F6E\u7684 X \u5EA7\u6A19\u3002","Transform X to scene":"\u5C07 X \u8F49\u63DB\u5230\u5834\u666F","Return the Y coordinate of a position transformed from the canvas to the scene according to a layer.":"\u5F9E\u756B\u5E03\u5230\u5834\u666F\u8F49\u63DB\u7684\u4F4D\u7F6E\u7684 Y \u5EA7\u6A19\u3002","Transform Y to scene":"\u5C07 Y \u8F49\u63DB\u5230\u5834\u666F","Return the touch X on the canvas.":"\u5728\u756B\u5E03\u4E0A\u8FD4\u56DE\u89F8\u78B0\u7684 X \u5EA7\u6A19\u3002","Touch X on canvas":"\u5728\u756B\u5E03\u4E0A\u7684 X \u89F8\u78B0","Return the touch Y on the canvas.":"\u5728\u756B\u5E03\u4E0A\u8FD4\u56DE\u89F8\u78B0\u7684 Y \u5EA7\u6A19\u3002","Touch Y on canvas":"\u5728\u756B\u5E03\u4E0A\u7684 Y \u89F8\u78B0","Return the X coordinate of a vector after a rotation":"\u65CB\u8F49\u5F8C\u5411\u91CF\u7684 X \u5EA7\u6A19","Rotated vector X":"\u65CB\u8F49\u5411\u91CF X","Vector X":"\u5411\u91CF X","Vector Y":"\u5411\u91CF Y","Angle (in degrees)":"\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09","Return the Y coordinate of a vector after a rotation":"\u65CB\u8F49\u5F8C\u5411\u91CF\u7684 Y \u5EA7\u6A19","Rotated vector Y":"\u65CB\u8F49\u5411\u91CF Y","Move objects by holding 2 touches on them.":"\u901A\u904E\u5728\u7269\u9AD4\u4E0A\u6309\u4F4F 2 \u6B21\u89F8\u78B0\u4F86\u79FB\u52D5\u7269\u9AD4\u3002","Pinchable object":"\u53EF\u634F\u5408\u7684\u5C0D\u8C61","Resizable capability":"\u53EF\u8ABF\u6574\u5927\u5C0F\u7684\u80FD\u529B","Lock object size":"\u9396\u5B9A\u7269\u9AD4\u5927\u5C0F","Check if the object is being pinched.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u88AB\u634F\u5408\u3002","Is being pinched":"\u88AB\u634F\u5408","_PARAM0_ is being pinched":"_PARAM0_ \u6B63\u5728\u88AB\u634F\u5408","Abort the pinching of this object.":"\u4E2D\u6B62\u8A72\u7269\u4EF6\u7684\u634F\u5408\u3002","Abort pinching":"\u4E2D\u6B62\u634F\u5408","Abort the pinching of _PARAM0_":"\u4E2D\u6B62_PARAM0_\u7684\u634F\u5408\u3002","Pixel perfect movement":"\u50CF\u7D20\u5B8C\u7F8E\u904B\u52D5","Grid-based or pixel perfect platformer and top-down movements.":"\u57FA\u65BC\u7DB2\u683C\u6216\u50CF\u7D20\u5B8C\u7F8E\u7684\u5E73\u53F0\u904A\u6232\u548C\u81EA\u9802\u5411\u4E0B\u7684\u904B\u52D5\u3002","Return the speed necessary to cover a distance according to the deceleration.":"\u8FD4\u56DE\u6839\u64DA\u6E1B\u901F\u898F\u5247\u8986\u84CB\u4E00\u500B\u8DDD\u96E2\u6240\u9700\u7684\u901F\u5EA6\u3002","Speed to reach":"\u9054\u5230\u7684\u901F\u5EA6","Braking distance from an initial speed: _PARAM2_ and a deceleration: _PARAM3_ is less than _PARAM1_":"\u5F9E\u521D\u59CB\u901F\u5EA6: _PARAM2_ \u548C\u6E1B\u901F: _PARAM3_ \u7684\u60C5\u6CC1\u4E0B\u524E\u8ECA\u8DDD\u96E2\u5C0F\u65BC _PARAM1_\u3002","Distance":"\u8DDD\u96E2","Return the braking distance according to an initial speed and a deceleration.":"\u8FD4\u56DE\u6839\u64DA\u521D\u59CB\u901F\u5EA6\u548C\u6E1B\u901F\u898F\u5247\u8FD4\u56DE\u524E\u8ECA\u8DDD\u96E2\u3002","Braking distance":"\u524E\u8ECA\u8DDD\u96E2","Define JavaScript classes for top-down.":"\u81EA\u4E0A\u800C\u4E0B\u5B9A\u7FA9JavaScript\u985E\u5225\u3002","Define JavaScript classes for top-down":"\u81EA\u4E0A\u800C\u4E0B\u5B9A\u7FA9JavaScript\u985E\u5225","Define JavaScript classes for top-down":"\u81EA\u4E0A\u800C\u4E0B\u5B9A\u7FA9JavaScript\u985E\u5225","Seamlessly align big pixels using a top-down movement.":"\u7121\u7E2B\u5C0D\u9F4A\u5927\u50CF\u7D20\uFF0C\u4F7F\u7528\u81EA\u4E0A\u800C\u4E0B\u7684\u79FB\u52D5\u3002","Pixel perfect top-down movement":"\u50CF\u7D20\u5B8C\u7F8E\u7684\u81EA\u4E0A\u800C\u4E0B\u904B\u52D5","Pixel size":"\u50CF\u7D20\u5927\u5C0F","Pixel grid offset X":"\u50CF\u7D20\u7DB2\u683C\u504F\u79FBX","Pixel grid offset Y":"\u50CF\u7D20\u7DB2\u683C\u504F\u79FBY","Seamlessly align big pixels using a 2D platformer character movement.":"\u7121\u7E2B\u5C0D\u9F4A\u5927\u50CF\u7D20\uFF0C\u4F7F\u7528 2D \u5E73\u53F0\u89D2\u8272\u79FB\u52D5\u3002","Pixel perfect platformer character":"\u50CF\u7D20\u5B8C\u7F8E\u7684\u5E73\u53F0\u89D2\u8272","Platformer character animator":"\u5E73\u53F0\u89D2\u8272\u52D5\u756B\u5E2B","Change animations and horizontal flipping of a platformer character automatically.":"\u81EA\u52D5\u66F4\u6539\u5E73\u53F0\u89D2\u8272\u7684\u52D5\u756B\u548C\u6C34\u5E73\u7FFB\u8F49\u3002","Enable animation changes":"\u555F\u7528\u52D5\u756B\u8B8A\u5316","Enable horizontal flipping":"\u555F\u7528\u6C34\u5E73\u7FFB\u8F49","\"Climb\" animation name":"\"\u6500\u722C\"\u52D5\u756B\u540D\u7A31","Platformer character":"\u5E73\u53F0\u89D2\u8272","Flippable capacity":"\u53EF\u7FFB\u8F49\u80FD\u529B","Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u5E73\u53F0\u89D2\u8272\u7684\u81EA\u52D5\u52D5\u756B\u66F4\u6539\u3002\u7981\u7528\u52D5\u756B\u66F4\u6539\u53EF\u7528\u65BC\u64AD\u653E\u81EA\u5B9A\u7FA9\u52D5\u756B\u3002","Enable (or disable) automated animation changes":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52D5\u52D5\u756B\u66F4\u6539","Enable automated animation changes on _PARAM0_: _PARAM2_":"_PARAM0_\u4E0A\u555F\u7528\u81EA\u52D5\u52D5\u756B\u66F4\u6539\uFF1A _PARAM2_","Change animations automatically":"\u81EA\u52D5\u66F4\u6539\u52D5\u756B","Enable (or disable) automated horizontal flipping of a platform character.":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u5E73\u53F0\u89D2\u8272\u7684\u81EA\u52D5\u6C34\u5E73\u7FFB\u8F49\u3002","Enable (or disable) automated horizontal flipping":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u81EA\u52D5\u6C34\u5E73\u7FFB\u8F49","Enable automated horizontal flipping on _PARAM0_: _PARAM2_":"_PARAM0_\u4E0A\u555F\u7528\u81EA\u52D5\u6C34\u5E73\u7FFB\u8F49\uFF1A _PARAM2_","Set the \"Idle\" animation name. Do not use quotation marks.":"\u8A2D\u7F6E\u201CIdle\u201D\u52D5\u756B\u540D\u7A31\u3002\u4E0D\u8981\u4F7F\u7528\u5F15\u865F\u3002","Set \"Idle\" animation of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\"\u7A7A\u9592\"\u52D5\u756B\u8A2D\u7F6E\u70BA_PARAM2_","Animation name":"\u52D5\u756B\u540D\u7A31","Set the \"Move\" animation name. Do not use quotation marks.":"\u8A2D\u7F6E\"\u79FB\u52D5\"\u52D5\u756B\u540D\u7A31\u3002\u8ACB\u52FF\u4F7F\u7528\u5F15\u865F\u3002","\"Move\" animation name":"\"\u79FB\u52D5\"\u52D5\u756B\u540D\u7A31","Set \"Move\" animation of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\"\u79FB\u52D5\"\u52D5\u756B\u8A2D\u7F6E\u70BA_PARAM2_","Set the \"Jump\" animation name. Do not use quotation marks.":"\u8A2D\u7F6E\"\u8DF3\u8E8D\"\u52D5\u756B\u540D\u7A31\u3002\u8ACB\u52FF\u4F7F\u7528\u5F15\u865F\u3002","Set \"Jump\" animation of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\"\u8DF3\u8E8D\"\u52D5\u756B\u8A2D\u7F6E\u70BA_PARAM2_","Set the \"Fall\" animation name. Do not use quotation marks.":"\u8A2D\u7F6E\"\u4E0B\u843D\"\u52D5\u756B\u540D\u7A31\u3002\u8ACB\u52FF\u4F7F\u7528\u5F15\u865F\u3002","Set \"Fall\" animation of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\"\u4E0B\u843D\"\u52D5\u756B\u8A2D\u7F6E\u70BA_PARAM2_","Set the \"Climb\" animation name. Do not use quotation marks.":"\u8A2D\u7F6E\"\u6500\u722C\"\u52D5\u756B\u540D\u7A31\u3002\u8ACB\u52FF\u4F7F\u7528\u5F15\u865F\u3002","Set \"Climb\" animation of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\"\u6500\u722C\"\u52D5\u756B\u8A2D\u7F6E\u70BA_PARAM2_","Platformer trajectory":"\u5E73\u53F0\u8ECC\u8DE1","Platformer character jump easy configuration and platformer AI tools.":"\u5E73\u53F0\u89D2\u8272\u8DF3\u8E8D\u6613\u914D\u7F6E\u548C\u5E73\u53F0\u4EBA\u5DE5\u667A\u80FD\u5DE5\u5177\u3002","Configure the height of a jump and evaluate the jump trajectory.":"\u914D\u7F6E\u8DF3\u8E8D\u7684\u9AD8\u5EA6\u4E26\u8A55\u4F30\u8DF3\u8E8D\u8ECC\u8DE1\u3002","Platformer trajectory evaluator":"\u5E73\u53F0\u8ECC\u8DE1\u8A55\u4F30\u5668","Jump height":"\u8DF3\u8E8D\u9AD8\u5EA6","Change the jump speed to reach a given height.":"\u66F4\u6539\u8DF3\u8E8D\u901F\u5EA6\u4EE5\u9054\u5230\u7D66\u5B9A\u7684\u9AD8\u5EA6\u3002","Change the jump height of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u8DF3\u8E8D\u9AD8\u5EA6\u66F4\u6539\u70BA_PARAM2_","Draw the jump trajectories from no sustain to full sustain.":"\u5F9E\u7121\u505C\u7559\u5230\u5B8C\u5168\u505C\u7559\u7E6A\u88FD\u8DF3\u8E8D\u8ECC\u8DE1\u3002","Draw jump":"\u7E6A\u88FD\u8DF3\u8E8D","Draw the jump trajectory of _PARAM0_ on _PARAM2_":"\u5728_PARAM2_\u4E0A\u7E6A\u88FD_PARAM0_\u7684\u8DF3\u8E8D\u8ECC\u8DE1","The jump Y displacement at a given time from the start of the jump.":"\u5F9E\u8DF3\u8E8D\u958B\u59CB\u6642\u5230\u7279\u5B9A\u6642\u9593\u7684\u8DF3\u8E8DY\u4F4D\u79FB\u3002","Jump Y":"\u8DF3\u8E8DY","Jump sustaining duration":"\u8DF3\u8E8D\u7DAD\u6301\u6642\u9593","The maximum Y displacement.":"\u6700\u5927Y\u4F4D\u79FB\u3002","Peak Y":"\u5CF0\u503CY","The time from the start of the jump when it reaches the maximum Y displacement.":"\u5F9E\u8DF3\u8E8D\u958B\u59CB\u6642\u5230\u9054\u6700\u5927Y\u4F4D\u79FB\u7684\u6642\u9593\u3002","Peak time":"\u5CF0\u503C\u6642\u9593","The time from the start of the jump when it reaches a given Y displacement moving upward.":"\u5F9E\u8DF3\u8E8D\u958B\u59CB\u6642\u9054\u5230\u7D66\u5B9AY\u4F4D\u79FB\u7684\u6642\u9593\u5411\u4E0A\u79FB\u52D5\u3002","Jump up time":"\u8DF3\u8E8D\u5411\u4E0A\u6642\u9593","The time from the start of the jump when it reaches a given Y displacement moving downward.":"\u5F9E\u8DF3\u8E8D\u958B\u59CB\u6642\u9054\u5230\u7D66\u5B9AY\u4F4D\u79FB\u7684\u6642\u9593\u5411\u4E0B\u79FB\u52D5\u3002","Jump down time":"\u8DF3\u8E8D\u5411\u4E0B\u6642\u9593","The X displacement before the character stops (always positive).":"\u89D2\u8272\u505C\u6B62\u524D\u7684X\u4F4D\u79FB\uFF08\u59CB\u7D42\u70BA\u6B63\u6578\uFF09\u3002","Stop distance":"\u505C\u6B62\u8DDD\u96E2","The X displacement at a given time from now if decelerating (always positive).":"\u76F8\u5C0D\u65BC\u6E1B\u901F\u6642\u7684\u7D66\u5B9A\u6642\u9593\u7684X\u4F4D\u79FB\uFF08\u59CB\u7D42\u70BA\u6B63\u6578\uFF09\u3002","Stopping X":"\u6E1B\u901FX","The X displacement at a given time from now if accelerating (always positive).":"\u6839\u64DA\u76EE\u524D\u7684\u72C0\u6CC1\u4F86\u770B\uFF0C\u7269\u9AD4\u5728X\u8EF8\u4E0A\u7684\u504F\u79FB\u91CF\uFF08\u59CB\u7D42\u70BA\u6B63\uFF09\u3002","Moving X":"\u79FB\u52D5X","Player avatar":"\u73A9\u5BB6\u982D\u50CF","Display player avatars according to their GDevelop account.":"\u6839\u64DA\u4ED6\u5011\u7684 GDevelop \u5E33\u6236\u986F\u793A\u73A9\u5BB6\u982D\u50CF\u3002","Return the UserID from a lobby player number.":"\u5F9E\u5927\u5EF3\u73A9\u5BB6\u7DE8\u865F\u8FD4\u56DE\u4F7F\u7528\u8005ID\u3002","UserID":"\u4F7F\u7528\u8005ID","Lobby player number":"\u5927\u5EF3\u73A9\u5BB6\u7DE8\u865F","Display a player avatar according to their GDevelop account.":"\u6839\u64DA\u5176GDevelop\u5E33\u6236\u986F\u793A\u73A9\u5BB6\u982D\u50CF\u3002","Multiplayer Avatar":"\u591A\u4EBA\u904A\u6232\u982D\u50CF","Border enabled":"\u555F\u7528\u908A\u6846","Enable the border on the avatar.":"\u5728\u982D\u50CF\u4E0A\u555F\u7528\u908A\u6846\u3002","Player unique ID":"\u73A9\u5BB6\u552F\u4E00ID","the player unique ID of the avatar.":"\u73A9\u5BB6\u982D\u50CF\u7684\u552F\u4E00ID\u3002","the player unique ID":"\u73A9\u5BB6\u7684\u552F\u4E00ID","Playgama Bridge":"Playgama \u6A4B\u63A5\u5668","One SDK for cross-platform publishing HTML5 games.":"\u8DE8\u5E73\u53F0\u767C\u5E03 HTML5 \u904A\u6232\u7684\u901A\u7528 SDK\u3002","Add Action Parameter.":"\u6DFB\u52A0\u52D5\u4F5C\u53C3\u6578\u3002","Add Action Parameter":"\u6DFB\u52A0\u52D5\u4F5C\u53C3\u6578","Add Action Parameter _PARAM1_ : _PARAM2_":"\u6DFB\u52A0\u52D5\u4F5C\u53C3\u6578_PARAM1_\uFF1A_PARAM2_","Path":"\u8DEF\u5F91","Add Bool Action Parameter.":"\u6DFB\u52A0\u5E03\u723E\u52D5\u4F5C\u53C3\u6578\u3002","Add Bool Action Parameter":"\u6DFB\u52A0\u5E03\u723E\u52D5\u4F5C\u53C3\u6578","Is Initialized.":"\u5DF2\u521D\u59CB\u5316\u3002","Is Initialized":"\u5DF2\u521D\u59CB\u5316","Platform Id.":"\u5E73\u53F0ID\u3002","Platform Id":"\u5E73\u53F0ID","Platform Language.":"\u5E73\u53F0\u8A9E\u8A00\u3002","Platform Language":"\u5E73\u53F0\u8A9E\u8A00","Platform Payload.":"\u5E73\u53F0\u8F09\u8377\u3002","Platform Payload":"\u5E73\u53F0\u8F09\u8377","Platform Tld.":"\u5E73\u53F0\u9802\u7D1A\u7DB2\u57DF\u3002","Platform Tld":"\u5E73\u53F0\u9802\u7D1A\u7DB2\u57DF","Platform Is Audio Enabled.":"\u5E73\u53F0\u5DF2\u555F\u7528\u97F3\u8A0A\u3002","Platform Is Audio Enabled":"\u5E73\u53F0\u5DF2\u555F\u7528\u97F3\u8A0A","Platform Is Paused.":"\u5E73\u53F0\u5DF2\u66AB\u505C\u3002","Platform Is Paused":"\u5E73\u53F0\u5DF2\u66AB\u505C","Is Get All Games Supported.":"Is Get All Games Supported.","Is Get All Games Supported":"Is Get All Games Supported","Is Get Game By Id Supported.":"Is Get Game By Id Supported.","Is Get Game By Id Supported":"Is Get Game By Id Supported","On Get All Games Completed.":"On Get All Games Completed.","On Get All Games Completed":"On Get All Games Completed","On Get Game By Id Completed.":"On Get Game By Id Completed.","On Get Game By Id Completed":"On Get Game By Id Completed","Platform Get All Games.":"Platform Get All Games.","Platform Get All Games":"Platform Get All Games","Platform Get Game By Id.":"Platform Get Game By Id.","Platform Get Game By Id":"Platform Get Game By Id","Platform All Games Count.":"Platform All Games Count.","Platform All Games Count":"Platform All Games Count","Platform All Game Properties Count.":"Platform All Game Properties Count.","Platform All Game Properties Count":"Platform All Game Properties Count","Platform All Games Property Name.":"Platform All Games Property Name.","Platform All Games Property Name":"Platform All Games Property Name","Property Index":"\u5C6C\u6027\u7D22\u5F15","Platform All Games Property Value.":"Platform All Games Property Value.","Platform All Games Property Value":"Platform All Games Property Value","Game Index":"Game Index","Property":"\u5C6C\u6027","Platform Game By Id Property Value.":"Platform Game By Id Property Value.","Platform Game By Id Property Value":"Platform Game By Id Property Value","Platform On Audio State Changed.":"\u5E73\u53F0\u97F3\u983B\u72C0\u614B\u5DF2\u66F4\u6539\u3002","Platform On Audio State Changed":"\u5E73\u53F0\u97F3\u8A0A\u72C0\u614B\u5DF2\u66F4\u6539","Platform On Pause State Changed.":"\u5E73\u53F0\u66AB\u505C\u72C0\u614B\u5DF2\u66F4\u6539\u3002","Platform On Pause State Changed":"\u5E73\u53F0\u66AB\u505C\u72C0\u614B\u5DF2\u66F4\u6539","Device Type.":"\u8A2D\u5099\u985E\u578B\u3002","Device Type":"\u8A2D\u5099\u985E\u578B","Is Mobile.":"\u662F\u624B\u6A5F\u3002","Is Mobile":"\u662F\u624B\u6A5F","Is Tablet.":"\u662F\u5E73\u677F\u96FB\u8166\u3002","Is Tablet":"\u662F\u5E73\u677F\u96FB\u8166","Is Desktop.":"\u662F\u684C\u9762\u96FB\u8166\u3002","Is Desktop":"\u662F\u684C\u9762\u96FB\u8166","Is Tv.":"\u662F\u96FB\u8996\u3002","Is Tv":"\u662F\u96FB\u8996","Player Id.":"\u73A9\u5BB6ID\u3002","Player Id":"\u73A9\u5BB6ID","Player Name.":"\u73A9\u5BB6\u59D3\u540D\u3002","Player Name":"\u73A9\u5BB6\u59D3\u540D","Player Extra Properties Count.":"\u73A9\u5BB6\u984D\u5916\u5C6C\u6027\u8A08\u6578\u3002","Player Extra Properties Count":"\u73A9\u5BB6\u984D\u5916\u5C6C\u6027\u8A08\u6578","Player Extra Property Name.":"\u73A9\u5BB6\u984D\u5916\u5C6C\u6027\u540D\u7A31\u3002","Player Extra Property Name":"\u73A9\u5BB6\u984D\u5916\u5C6C\u6027\u540D\u7A31","Player Extra Property Value.":"\u73A9\u5BB6\u984D\u5916\u5C6C\u6027\u503C\u3002","Player Extra Property Value":"\u73A9\u5BB6\u984D\u5916\u5C6C\u6027\u503C","Player Photos Count.":"\u73A9\u5BB6\u7167\u7247\u6578\u3002","Player Photos Count":"\u73A9\u5BB6\u7167\u7247\u6578","Player Photo # _PARAM1_.":"\u73A9\u5BB6\u7167\u7247 # _PARAM1_\u3002","Player Photo":"\u73A9\u5BB6\u7167\u7247","Index":"\u7D22\u5F15","Visibility State.":"\u53EF\u898B\u72C0\u614B\u3002","Visibility State":"\u53EF\u898B\u72C0\u614B","On Visibility State Changed.":"\u5728\u53EF\u898B\u72C0\u614B\u8B8A\u66F4\u6642\u3002","On Visibility State Changed":"\u5728\u53EF\u898B\u72C0\u614B\u8B8A\u66F4\u6642","Default Storage Type.":"\u9ED8\u8A8D\u5B58\u5132\u985E\u578B\u3002","Default Storage Type":"\u9ED8\u8A8D\u5B58\u5132\u985E\u578B","Storage Data.":"\u5132\u5B58\u6578\u64DA\u3002","Storage Data":"\u5132\u5B58\u6578\u64DA","Storage Data As JSON.":"\u5C07\u6578\u64DA\u5B58\u5132\u70BA JSON\u3002","Storage Data As JSON":"\u5C07\u6578\u64DA\u5B58\u5132\u70BA JSON","Append Parameter to Storage Data Get Request.":"\u9644\u52A0\u53C3\u6578\u5230\u5B58\u5132\u6578\u64DA\u7372\u53D6\u8ACB\u6C42\u3002","Append Parameter to Storage Data Get Request":"\u9644\u52A0\u53C3\u6578\u5230\u5B58\u5132\u6578\u64DA\u7372\u53D6\u8ACB\u6C42","Append Parameter _PARAM1_ to Storage Data Get Request":"\u9644\u52A0\u53C3\u6578 _PARAM1_ \u5230\u5B58\u5132\u6578\u64DA\u7372\u53D6\u8ACB\u6C42","Append Parameter to Storage Data Set Request.":"\u9644\u52A0\u53C3\u6578\u5230\u5B58\u5132\u6578\u64DA\u8A2D\u7F6E\u8ACB\u6C42\u3002","Append Parameter to Storage Data Set Request":"\u9644\u52A0\u53C3\u6578\u5230\u5B58\u5132\u6578\u64DA\u8A2D\u7F6E\u8ACB\u6C42","Append Parameter _PARAM1_ : _PARAM2_ to Storage Data Set Request":"\u9644\u52A0\u53C3\u6578 _PARAM1_\uFF1A_PARAM2_ \u5230\u5B58\u5132\u8CC7\u6599\u96C6\u8ACB\u6C42","Append Parameter to Storage Data Delete Request.":"\u9644\u52A0\u53C3\u6578\u5230\u5B58\u5132\u6578\u64DA\u522A\u9664\u8ACB\u6C42\u3002","Append Parameter to Storage Data Delete Request":"\u9644\u52A0\u53C3\u6578\u5230\u5B58\u5132\u6578\u64DA\u522A\u9664\u8ACB\u6C42","Append Parameter _PARAM1_ to Storage Data Delete Request":"\u9644\u52A0\u53C3\u6578 _PARAM1_\u5230\u5B58\u5132\u6578\u64DA\u522A\u9664\u8ACB\u6C42","Is Last Action Completed Successfully.":"\u4E0A\u4E00\u500B\u52D5\u4F5C\u662F\u5426\u6210\u529F\u5B8C\u6210\u3002","Is Last Action Completed Successfully":"\u4E0A\u4E00\u500B\u52D5\u4F5C\u662F\u5426\u6210\u529F\u5B8C\u6210","Send Storage Data Get Request.":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u7372\u53D6\u8ACB\u6C42\u3002","Send Storage Data Get Request":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u7372\u53D6\u8ACB\u6C42","Send Storage Data Get Request _PARAM1_":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u7372\u53D6\u8ACB\u6C42 _PARAM1_","Storage Type":"\u5B58\u5132\u985E\u578B","Send Storage Data Set Request.":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u8A2D\u7F6E\u8ACB\u6C42\u3002","Send Storage Data Set Request":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u8A2D\u7F6E\u8ACB\u6C42","Send Storage Data Set Request _PARAM1_":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u8A2D\u7F6E\u8ACB\u6C42 _PARAM1_","Send Storage Data Delete Request.":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u522A\u9664\u8ACB\u6C42\u3002","Send Storage Data Delete Request":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u522A\u9664\u8ACB\u6C42","Send Storage Data Delete Request _PARAM1_":"\u767C\u9001\u5B58\u5132\u6578\u64DA\u522A\u9664\u8ACB\u6C42 _PARAM1_","On Storage Data Get Request Completed.":"\u5728\u5B58\u5132\u6578\u64DA\u7372\u53D6\u8ACB\u6C42\u5B8C\u6210\u6642\u3002","On Storage Data Get Request Completed":"\u5728\u5B58\u5132\u6578\u64DA\u7372\u53D6\u8ACB\u6C42\u5B8C\u6210","On Storage Data Set Request Completed.":"\u5728\u5B58\u5132\u6578\u64DA\u8A2D\u7F6E\u8ACB\u6C42\u5B8C\u6210\u3002","On Storage Data Set Request Completed":"\u5728\u5B58\u5132\u6578\u64DA\u8A2D\u7F6E\u8ACB\u6C42\u5B8C\u6210","On Storage Data Delete Request Completed.":"\u5728\u5B58\u5132\u6578\u64DA\u522A\u9664\u8ACB\u6C42\u5B8C\u6210\u3002","On Storage Data Delete Request Completed":"\u5728\u5B58\u5132\u6578\u64DA\u522A\u9664\u8ACB\u6C42\u5B8C\u6210","Has Storage Data.":"\u5177\u6709\u5B58\u5132\u6578\u64DA\u3002","Has Storage Data":"\u5177\u6709\u5B58\u5132\u6578\u64DA","Has _PARAM1_ in Storage Data":"\u5B58\u5132\u6578\u64DA\u4E2D\u5177\u6709 _PARAM1_","Is Storage Supported.":"\u5B58\u5132\u662F\u5426\u53D7\u652F\u6301\u3002","Is Storage Supported":"\u5B58\u5132\u662F\u5426\u53D7\u652F\u6301","Is Storage Supported _PARAM1_":"\u5B58\u5132\u662F\u5426\u53D7\u652F\u6301 _PARAM1_","Is Storage Available.":"\u5B58\u5132\u662F\u5426\u53EF\u7528\u3002","Is Storage Available":"\u5B58\u5132\u662F\u5426\u53EF\u7528","Is Storage Available _PARAM1_":"\u5B58\u5132\u662F\u5426\u53EF\u7528 _PARAM1_","Set Minimum Delay Between Interstitial.":"\u8A2D\u7F6E\u63D2\u64AD\u9593\u7684\u6700\u5C0F\u5EF6\u9072\u3002","Set Minimum Delay Between Interstitial":"\u8A2D\u7F6E\u63D2\u64AD\u9593\u7684\u6700\u5C0F\u5EF6\u9072","Set Minimum Delay Between Interstitial _PARAM1_":"\u8A2D\u7F6E\u63D2\u64AD\u9593\u7684\u6700\u5C0F\u5EF6\u9072 _PARAM1_","Seconds":"\u79D2","Show Banner.":"\u986F\u793A\u6A6B\u5E45\u3002","Show Banner":"\u986F\u793A\u6A6B\u5E45","Show Banner on _PARAM1_ with placement _PARAM2_":"\u5728 _PARAM1_ \u4E0A\u986F\u793A\u6A6B\u5E45\uFF0C\u4F4D\u7F6E\u70BA _PARAM2_","Placement (optional)":"\u4F4D\u7F6E\uFF08\u53EF\u9078\uFF09","Hide Banner.":"\u96B1\u85CF\u6A6B\u5E45\u3002","Hide Banner":"\u96B1\u85CF\u6A6B\u5E45","Show Interstitial.":"\u986F\u793A\u63D2\u9801\u5EE3\u544A\u3002","Show Interstitial":"\u986F\u793A\u63D2\u9801\u5EE3\u544A","Show Interstitial with placement _PARAM1_":"\u986F\u793A\u63D2\u9801\u5EE3\u544A\uFF0C\u4F4D\u7F6E\u70BA _PARAM1_","Show Rewarded.":"\u986F\u793A\u734E\u52F5\u3002","Show Rewarded":"\u986F\u793A\u734E\u52F5","Show Rewarded with placement _PARAM1_":"\u986F\u793A\u734E\u52F5\u5EE3\u544A\uFF0C\u4F4D\u7F6E\u70BA _PARAM1_","Check AdBlock.":"\u6AA2\u67E5\u5EE3\u544A\u5C01\u9396\u3002","Check AdBlock":"\u6AA2\u67E5\u5EE3\u544A\u5C01\u9396","Minimum Delay Between Interstitial.":"\u63D2\u9801\u5EE3\u544A\u9593\u7684\u6700\u5C0F\u5EF6\u9072\u3002","Minimum Delay Between Interstitial":"\u63D2\u9801\u5EE3\u544A\u9593\u7684\u6700\u5C0F\u5EF6\u9072","Banner State.":"\u6A6B\u5E45\u72C0\u614B\u3002","Banner State":"\u6A6B\u5E45\u72C0\u614B","Interstitial State.":"\u63D2\u9801\u5EE3\u544A\u72C0\u614B\u3002","Interstitial State":"\u63D2\u9801\u72C0\u614B","Rewarded State.":"\u734E\u52F5\u72C0\u614B\u3002","Rewarded State":"\u734E\u52F5\u72C0\u614B","Rewarded Placement.":"\u734E\u52F5\u4F4D\u7F6E\u3002","Rewarded Placement":"\u734E\u52F5\u4F4D\u7F6E","Is Banner Supported.":"\u6A6B\u5E45\u662F\u5426\u652F\u6301\u3002","Is Banner Supported":"\u6A6B\u5E45\u662F\u5426\u652F\u6301","Is Interstitial Supported.":"\u652F\u6301\u63D2\u9801\u5EE3\u544A\u3002","Is Interstitial Supported":"\u652F\u6301\u63D2\u9801\u5EE3\u544A","Is Rewarded Supported.":"\u652F\u6301\u734E\u52F5\u5EE3\u544A\u3002","Is Rewarded Supported":"\u652F\u6301\u734E\u52F5\u5EE3\u544A","On Banner State Changed.":"\u6A6B\u5E45\u72C0\u614B\u5DF2\u66F4\u6539\u3002","On Banner State Changed":"\u6A6B\u5E45\u72C0\u614B\u5DF2\u66F4\u6539","On Banner Loading.":"\u6A6B\u5E45\u8F09\u5165\u4E2D\u3002","On Banner Loading":"\u6A6B\u5E45\u8F09\u5165\u4E2D","On Banner Shown.":"\u6A6B\u5E45\u986F\u793A\u3002","On Banner Shown":"\u6A6B\u5E45\u986F\u793A","On Banner Hidden.":"\u6A6B\u5E45\u96B1\u85CF\u3002","On Banner Hidden":"\u6A6B\u5E45\u96B1\u85CF","On Banner Failed.":"\u6A6B\u5E45\u5931\u6557\u3002","On Banner Failed":"\u6A6B\u5E45\u5931\u6557","On Interstitial State Changed.":"\u63D2\u9801\u72C0\u614B\u5DF2\u66F4\u6539\u3002","On Interstitial State Changed":"\u63D2\u9801\u72C0\u614B\u5DF2\u66F4\u6539","On Interstitial Loading.":"\u63D2\u9801\u8F09\u5165\u4E2D\u3002","On Interstitial Loading":"\u63D2\u9801\u8F09\u5165\u4E2D","On Interstitial Opened.":"\u63D2\u9801\u5DF2\u958B\u555F\u3002","On Interstitial Opened":"\u63D2\u9801\u5DF2\u958B\u555F","On Interstitial Closed.":"\u63D2\u9801\u5DF2\u95DC\u9589\u3002","On Interstitial Closed":"\u63D2\u9801\u5DF2\u95DC\u9589","On Interstitial Failed.":"\u63D2\u9801\u5931\u6557\u3002","On Interstitial Failed":"\u63D2\u9801\u5931\u6557","On Rewarded State Changed.":"\u734E\u52F5\u72C0\u614B\u5DF2\u66F4\u6539\u3002","On Rewarded State Changed":"\u734E\u52F5\u72C0\u614B\u5DF2\u66F4\u6539","On Rewarded Loading.":"\u734E\u52F5\u8F09\u5165\u4E2D\u3002","On Rewarded Loading":"\u734E\u52F5\u8F09\u5165\u4E2D","On Rewarded Opened.":"\u734E\u52F5\u5DF2\u958B\u555F\u3002","On Rewarded Opened":"\u734E\u52F5\u5DF2\u958B\u555F","On Rewarded Closed.":"\u734E\u52F5\u5DF2\u95DC\u9589\u3002","On Rewarded Closed":"\u734E\u52F5\u5DF2\u95DC\u9589","On Rewarded Rewarded.":"\u734E\u52F5\u5DF2\u7372\u5F97\u3002","On Rewarded Rewarded":"\u734E\u52F5\u5DF2\u7372\u5F97","On Rewarded Failed.":"\u734E\u52F5\u5931\u6557\u3002","On Rewarded Failed":"\u734E\u52F5\u5931\u6557","On Check AdBlock Completed.":"\u6AA2\u67E5\u5EE3\u544A\u6514\u622A\u5B8C\u6210\u3002","On Check AdBlock Completed":"On Check AdBlock Completed","Send Message.":"\u767C\u9001\u6D88\u606F\u3002","Send Message":"\u767C\u9001\u6D88\u606F","Send Message _PARAM1_":"\u767C\u9001\u6D88\u606F_PARAM1_","Message":"\u6D88\u606F","Get Server Time.":"\u7372\u53D6\u670D\u52D9\u5668\u6642\u9593\u3002","Get Server Time":"\u7372\u53D6\u670D\u52D9\u5668\u6642\u9593","Server Time.":"\u670D\u52D9\u5668\u6642\u9593\u3002","Server Time":"\u670D\u52D9\u5668\u6642\u9593","On Get Server Time Completed.":"\u7576\u7372\u53D6\u670D\u52D9\u5668\u6642\u9593\u5B8C\u6210\u3002","On Get Server Time Completed":"\u7576\u7372\u53D6\u670D\u52D9\u5668\u6642\u9593\u5B8C\u6210","Has Server Time.":"\u6709\u670D\u52D9\u5668\u6642\u9593\u3002","Has Server Time":"\u6709\u670D\u52D9\u5668\u6642\u9593","Authorize Player.":"\u6388\u6B0A\u73A9\u5BB6\u3002","Authorize Player":"\u6388\u6B0A\u73A9\u5BB6","Is Player Authorization Supported.":"\u73A9\u5BB6\u6388\u6B0A\u662F\u5426\u652F\u6301\u3002","Is Player Authorization Supported":"\u73A9\u5BB6\u6388\u6B0A\u662F\u5426\u652F\u6301","Is Player Authorized.":"\u73A9\u5BB6\u662F\u5426\u5DF2\u6388\u6B0A\u3002","Is Player Authorized":"\u73A9\u5BB6\u662F\u5426\u5DF2\u6388\u6B0A","On Authorize Player Completed.":"\u7576\u6388\u6B0A\u73A9\u5BB6\u5B8C\u6210\u3002","On Authorize Player Completed":"\u7576\u6388\u6B0A\u73A9\u5BB6\u5B8C\u6210","Does Player Have Name.":"\u73A9\u5BB6\u662F\u5426\u6709\u540D\u7A31\u3002","Does Player Have Name":"\u73A9\u5BB6\u662F\u5426\u6709\u540D\u7A31","Does Player Have Photo.":"\u73A9\u5BB6\u662F\u5426\u6709\u7167\u7247\u3002","Does Player Have Photo":"\u73A9\u5BB6\u662F\u5426\u6709\u7167\u7247","Does Player Have Photo # _PARAM1_":"\u73A9\u5BB6\u662F\u5426\u6709\u7167\u7247_PARAM1_","Share.":"\u5206\u4EAB\u3002","Share":"\u5206\u4EAB","Invite Friends.":"\u9080\u8ACB\u597D\u53CB\u3002","Invite Friends":"\u9080\u8ACB\u597D\u53CB","Join Community.":"\u52A0\u5165\u793E\u7FA4\u3002","Join Community":"\u52A0\u5165\u793E\u7FA4","Create Post.":"\u5EFA\u7ACB\u90F5\u4EF6\u3002","Create Post":"\u5EFA\u7ACB\u90F5\u4EF6","Add To Home Screen.":"\u65B0\u589E\u81F3\u4E3B\u756B\u9762\u3002","Add To Home Screen":"\u65B0\u589E\u81F3\u4E3B\u756B\u9762","Add To Favorites.":"\u65B0\u589E\u81F3\u6700\u611B\u3002","Add To Favorites":"\u65B0\u589E\u81F3\u6700\u611B","Rate.":"\u8A55\u5206\u3002","Rate":"\u8A55\u5206","Is Share Supported.":"\u662F\u5426\u652F\u63F4\u5206\u4EAB\u3002","Is Share Supported":"\u662F\u5426\u652F\u63F4\u5206\u4EAB","On Share Completed.":"\u5728\u5206\u4EAB\u5B8C\u6210\u6642\u3002","On Share Completed":"\u5728\u5206\u4EAB\u5B8C\u6210\u6642","Is Invite Friends Supported.":"\u662F\u5426\u652F\u63F4\u9080\u8ACB\u597D\u53CB\u3002","Is Invite Friends Supported":"\u662F\u5426\u652F\u63F4\u9080\u8ACB\u597D\u53CB","On Invite Friends Completed.":"\u5728\u9080\u8ACB\u597D\u53CB\u5B8C\u6210\u6642\u3002","On Invite Friends Completed":"\u5728\u9080\u8ACB\u597D\u53CB\u5B8C\u6210\u6642","Is Join Community Supported.":"\u662F\u5426\u652F\u63F4\u52A0\u5165\u793E\u7FA4\u3002","Is Join Community Supported":"\u662F\u5426\u652F\u63F4\u52A0\u5165\u793E\u7FA4","On Join Community Completed.":"\u5728\u52A0\u5165\u793E\u7FA4\u5B8C\u6210\u6642\u3002","On Join Community Completed":"\u5728\u52A0\u5165\u793E\u7FA4\u5B8C\u6210\u6642","Is Create Post Supported.":"\u662F\u5426\u652F\u63F4\u767C\u8868\u6587\u7AE0\u3002","Is Create Post Supported":"\u662F\u5426\u652F\u63F4\u767C\u8868\u6587\u7AE0","On Create Post Completed.":"\u5728\u767C\u8868\u6587\u7AE0\u5B8C\u6210\u6642\u3002","On Create Post Completed":"\u5728\u767C\u8868\u6587\u7AE0\u5B8C\u6210\u6642","Is Add To Home Screen Supported.":"\u662F\u5426\u652F\u63F4\u52A0\u5165\u4E3B\u756B\u9762\u3002","Is Add To Home Screen Supported":"\u662F\u5426\u652F\u63F4\u52A0\u5165\u4E3B\u756B\u9762","On Add To Home Screen Completed.":"\u5728\u52A0\u5165\u4E3B\u756B\u9762\u5B8C\u6210\u6642\u3002","On Add To Home Screen Completed":"\u5728\u52A0\u5165\u4E3B\u756B\u9762\u5B8C\u6210\u6642","Is Add To Favorites Supported.":"\u662F\u5426\u652F\u63F4\u52A0\u5165\u6536\u85CF\u3002","Is Add To Favorites Supported":"\u662F\u5426\u652F\u63F4\u52A0\u5165\u6536\u85CF","On Add To Favorites Completed.":"\u5728\u52A0\u5165\u6536\u85CF\u5B8C\u6210\u6642\u3002","On Add To Favorites Completed":"\u5728\u52A0\u5165\u6536\u85CF\u5B8C\u6210\u6642","Is Rate Supported.":"\u662F\u5426\u652F\u63F4\u8A55\u5206\u3002","Is Rate Supported":"\u662F\u5426\u652F\u63F4\u8A55\u5206","On Rate Completed.":"\u5728\u8A55\u5206\u5B8C\u6210\u6642\u3002","On Rate Completed":"\u5728\u8A55\u5206\u5B8C\u6210\u6642","Is External Links Allowed.":"\u662F\u5426\u5141\u8A31\u5916\u90E8\u9023\u7D50\u3002","Is External Links Allowed":"\u662F\u5426\u5141\u8A31\u5916\u90E8\u9023\u7D50","Leaderboards Set Score.":"\u6392\u884C\u699C\u8A2D\u5B9A\u5206\u6578\u3002","Leaderboards Set Score":"\u6392\u884C\u699C\u8A2D\u5B9A\u5206\u6578","Leaderboards Set Score - Id: _PARAM1_, Score: _PARAM2_":"\u6392\u884C\u699C\u8A2D\u5B9A\u5206\u6578 - Id: _PARAM1_, \u5206\u6578: _PARAM2_","Leaderboards Get Entries.":"\u6392\u884C\u699C\u7372\u53D6\u689D\u76EE\u3002","Leaderboards Get Entries":"\u6392\u884C\u699C\u7372\u53D6\u689D\u76EE","Leaderboards Get Entries - Id: _PARAM1_":"\u6392\u884C\u699C\u7372\u53D6\u689D\u76EE - Id: _PARAM1_","Leaderboards Show Native Popup.":"\u6392\u884C\u699C\u986F\u793A\u672C\u5730\u5F48\u51FA\u8996\u7A97\u3002","Leaderboards Show Native Popup":"\u6392\u884C\u699C\u986F\u793A\u672C\u5730\u5F48\u51FA\u8996\u7A97","Leaderboards Show Native Popup - Id: _PARAM1_":"\u6392\u884C\u699C\u986F\u793A\u672C\u5730\u5F48\u51FA\u8996\u7A97 - Id: _PARAM1_","Leaderboards Type.":"\u6392\u884C\u699C\u985E\u578B\u3002","Leaderboards Type":"\u6392\u884C\u699C\u985E\u578B","Is Leaderboard Supported":"\u662F\u5426\u652F\u6301\u6392\u884C\u699C","The leaderboard is of type Not Available.":"\u6392\u884C\u699C\u985E\u578B\u70BA\u4E0D\u53EF\u7528\u3002","The leaderboard is of type Not Available":"\u6392\u884C\u699C\u985E\u578B\u70BA\u4E0D\u53EF\u7528","The leaderboard is of type In Game.":"\u6392\u884C\u699C\u985E\u578B\u70BA\u904A\u6232\u5167\u3002","The leaderboard is of type In Game":"\u6392\u884C\u699C\u985E\u578B\u70BA\u904A\u6232\u5167","The leaderboard is of type Native.":"\u6392\u884C\u699C\u985E\u578B\u70BA\u672C\u5730\u3002","The leaderboard is of type Native":"\u6392\u884C\u699C\u985E\u578B\u70BA\u672C\u5730","The leaderboard is of type Native Popup.":"\u6392\u884C\u699C\u7684\u985E\u578B\u70BA\u672C\u5730\u5F48\u51FA\u8996\u7A97\u3002","The leaderboard is of type Native Popup":"\u6392\u884C\u699C\u7684\u985E\u578B\u70BA\u672C\u5730\u5F48\u51FA\u8996\u7A97","On Leaderboards Set Score Completed.":"\u5DF2\u5B8C\u6210\u6392\u884C\u699C\u8A2D\u5B9A\u5206\u6578\u3002","On Leaderboards Set Score Completed":"\u5DF2\u5B8C\u6210\u6392\u884C\u699C\u8A2D\u5B9A\u5206\u6578","On Leaderboards Get Entries Completed.":"\u5DF2\u5B8C\u6210\u6392\u884C\u699C\u7372\u53D6\u689D\u76EE\u3002","On Leaderboards Get Entries Completed":"\u5DF2\u5B8C\u6210\u6392\u884C\u699C\u7372\u53D6\u689D\u76EE","On Leaderboards Show Native Popup Completed.":"\u6392\u884C\u699C\u986F\u793A\u672C\u5730\u5F48\u51FA\u8996\u7A97\u5DF2\u5B8C\u6210\u3002","On Leaderboards Show Native Popup Completed":"\u6392\u884C\u699C\u986F\u793A\u672C\u5730\u5F48\u51FA\u8996\u7A97\u5DF2\u5B8C\u6210","Leaderboard Entries Count.":"\u6392\u884C\u699C\u689D\u76EE\u6578\u91CF\u3002","Leaderboard Entries Count":"\u6392\u884C\u699C\u689D\u76EE\u6578\u91CF","Leaderboard Entry Id.":"\u6392\u884C\u699C\u689D\u76EE Id\u3002","Leaderboard Entry Id":"\u6392\u884C\u699C\u689D\u76EE Id","Entry Index":"\u689D\u76EE\u7D22\u5F15","Leaderboard Entry Name.":"\u6392\u884C\u699C\u689D\u76EE\u540D\u7A31\u3002","Leaderboard Entry Name":"\u6392\u884C\u699C\u689D\u76EE\u540D\u7A31","Leaderboard Entry Photo.":"\u6392\u884C\u699C\u689D\u76EE\u7167\u7247\u3002","Leaderboard Entry Photo":"\u6392\u884C\u699C\u689D\u76EE\u7167\u7247","Leaderboard Entry Rank.":"\u6392\u884C\u699C\u689D\u76EE\u6392\u540D\u3002","Leaderboard Entry Rank":"\u6392\u884C\u699C\u689D\u76EE\u6392\u540D","Leaderboard Entry Score.":"\u6392\u884C\u699C\u689D\u76EE\u5206\u6578\u3002","Leaderboard Entry Score":"\u6392\u884C\u699C\u689D\u76EE\u5206\u6578","Payments Purchase.":"\u652F\u4ED8\u8CFC\u8CB7\u3002","Payments Purchase":"\u652F\u4ED8\u8CFC\u8CB7","Payments Purchase - Id: _PARAM1_":"\u652F\u4ED8\u8CFC\u8CB7 - Id: _PARAM1_","Payments Get Purchases.":"\u652F\u4ED8\u7372\u53D6\u8CFC\u8CB7\u3002","Payments Get Purchases":"\u652F\u4ED8\u7372\u53D6\u8CFC\u8CB7","Payments Get Catalog.":"\u652F\u4ED8\u7372\u53D6\u76EE\u9304\u3002","Payments Get Catalog":"\u652F\u4ED8\u7372\u53D6\u76EE\u9304","Payments Consume Purchase.":"\u652F\u4ED8\u6D88\u8017\u8CFC\u8CB7\u3002","Payments Consume Purchase":"\u652F\u4ED8\u6D88\u8017\u8CFC\u8CB7","Payments Consume Purchase - Id: _PARAM1_":"\u652F\u4ED8\u6D88\u8017\u8CFC\u8CB7 - Id: _PARAM1_","Is Payments Supported.":"\u652F\u4ED8\u662F\u5426\u652F\u6301\u3002","Is Payments Supported":"\u652F\u4ED8\u662F\u5426\u652F\u6301","On Payments Purchase Completed.":"\u652F\u4ED8\u8CFC\u8CB7\u5B8C\u6210\u4E4B\u5F8C\u3002","On Payments Purchase Completed":"\u652F\u4ED8\u8CFC\u8CB7\u5B8C\u6210\u4E4B\u5F8C","On Payments Get Purchases Completed.":"\u652F\u4ED8\u7372\u53D6\u8CFC\u8CB7\u5B8C\u6210\u4E4B\u5F8C\u3002","On Payments Get Purchases Completed":"\u652F\u4ED8\u7372\u53D6\u8CFC\u8CB7\u5B8C\u6210\u4E4B\u5F8C","On Payments Get Catalog Completed.":"\u652F\u4ED8\u7372\u53D6\u76EE\u9304\u5B8C\u6210\u4E4B\u5F8C\u3002","On Payments Get Catalog Completed":"\u652F\u4ED8\u7372\u53D6\u76EE\u9304\u5B8C\u6210\u4E4B\u5F8C","On Payments Consume Purchase Completed.":"\u652F\u4ED8\u6D88\u8017\u8CFC\u8CB7\u5B8C\u6210\u4E4B\u5F8C\u3002","On Payments Consume Purchase Completed":"\u652F\u4ED8\u6D88\u8017\u8CFC\u8CB7\u5B8C\u6210\u4E4B\u5F8C","Payments Last Purchase Properties Count.":"\u652F\u4ED8\u6700\u5F8C\u8CFC\u8CB7\u5C6C\u6027\u6578\u91CF\u3002","Payments Last Purchase Properties Count":"\u652F\u4ED8\u6700\u5F8C\u8CFC\u8CB7\u5C6C\u6027\u6578\u91CF","Payments Last Purchase Property Name.":"\u652F\u4ED8\u6700\u5F8C\u8CFC\u8CB7\u5C6C\u6027\u540D\u7A31\u3002","Payments Last Purchase Property Name":"\u652F\u4ED8\u6700\u5F8C\u8CFC\u8CB7\u5C6C\u6027\u540D\u7A31","Payments Last Purchase Property Value.":"\u652F\u4ED8\u6700\u5F8C\u8CFC\u8CB7\u5C6C\u6027\u503C\u3002","Payments Last Purchase Property Value":"\u652F\u4ED8\u6700\u5F8C\u8CFC\u8CB7\u5C6C\u6027\u503C","Payments Purchases Count.":"\u652F\u4ED8\u8CFC\u8CB7\u6578\u91CF\u3002","Payments Purchases Count":"\u652F\u4ED8\u8CFC\u8CB7\u6578\u91CF","Payments Purchase Properties Count.":"\u652F\u4ED8\u8CFC\u8CB7\u5C6C\u6027\u6578\u91CF\u3002","Payments Purchase Properties Count":"\u652F\u4ED8\u8CFC\u8CB7\u5C6C\u6027\u6578\u91CF","Payments Purchase Property Name.":"\u652F\u4ED8\u8CFC\u8CB7\u5C6C\u6027\u540D\u7A31\u3002","Payments Purchase Property Name":"\u652F\u4ED8\u8CFC\u8CB7\u5C6C\u6027\u540D\u7A31","Purchase Index":"\u8CFC\u8CB7\u7D22\u5F15","Payments Catalog Items Count.":"\u652F\u4ED8\u76EE\u9304\u9805\u76EE\u6578\u91CF\u3002","Payments Catalog Items Count":"\u652F\u4ED8\u76EE\u9304\u9805\u76EE\u6578\u91CF","Payments Catalog Item Properties Count.":"\u652F\u4ED8\u76EE\u9304\u9805\u76EE\u5C6C\u6027\u6578\u91CF\u3002","Payments Catalog Item Properties Count":"\u652F\u4ED8\u76EE\u9304\u9805\u76EE\u5C6C\u6027\u6578\u91CF","Payments Catalog Item Property Name.":"\u652F\u4ED8\u76EE\u9304\u9805\u76EE\u5C6C\u6027\u540D\u7A31\u3002","Payments Catalog Item Property Name":"\u652F\u4ED8\u76EE\u9304\u9805\u76EE\u5C6C\u6027\u540D\u7A31","Payments Catalog Item Property Value.":"Payments Catalog Item Property Value.","Payments Catalog Item Property Value":"Payments Catalog Item Property Value","Product Index":"\u7522\u54C1\u7D22\u5F15","Payments First Catalog Item Property Value.":"Payments First Catalog Item Property Value.","Payments First Catalog Item Property Value":"Payments First Catalog Item Property Value","Filter Property":"Filter Property","Filter Property Value":"Filter Property Value","Is Achievements Supported.":"\u652F\u63F4\u6210\u5C31\u3002","Is Achievements Supported":"\u662F\u5426\u652F\u63F4\u6210\u5C31","Is Achievements Get List Supported.":"\u652F\u63F4\u6210\u5C31\u5217\u8868\u3002","Is Achievements Get List Supported":"\u662F\u5426\u652F\u63F4\u6210\u5C31\u5217\u8868","Is Achievements Native Popup Supported.":"\u652F\u63F4\u6210\u5C31\u5F48\u51FA\u8996\u7A97\u3002","Is Achievements Native Popup Supported":"\u662F\u5426\u652F\u63F4\u6210\u5C31\u5F48\u51FA\u8996\u7A97","On Achievements Unlock Completed.":"\u6210\u5C31\u5DF2\u89E3\u9396\u3002","On Achievements Unlock Completed":"\u7576\u6210\u5C31\u89E3\u9396\u5B8C\u6210","On Achievements Get List Completed.":"\u6210\u5C31\u5217\u8868\u5DF2\u53D6\u5F97\u3002","On Achievements Get List Completed":"\u7576\u6210\u5C31\u5217\u8868\u53D6\u5F97\u5B8C\u6210","On Achievements Show Native Popup Completed.":"\u6210\u5C31\u5F48\u51FA\u8996\u7A97\u5DF2\u986F\u793A\u3002","On Achievements Show Native Popup Completed":"\u7576\u6210\u5C31\u5F48\u51FA\u8996\u7A97\u986F\u793A\u5B8C\u6210","Achievements Count.":"\u6210\u5C31\u8A08\u6578\u3002","Achievements Count":"\u6210\u5C31\u8A08\u6578","Achievement Properties Count.":"\u6210\u5C31\u5C6C\u6027\u8A08\u6578\u3002","Achievement Properties Count":"\u6210\u5C31\u5C6C\u6027\u8A08\u6578","Achievement Property Name.":"\u6210\u5C31\u5C6C\u6027\u540D\u7A31\u3002","Achievement Property Name":"\u6210\u5C31\u5C6C\u6027\u540D\u7A31","Achievement Property Value.":"\u6210\u5C31\u5C6C\u6027\u503C\u3002","Achievement Property Value":"\u6210\u5C31\u5C6C\u6027\u503C","Achievement Index":"\u6210\u5C31\u7D22\u5F15","Achievements Unlock.":"\u89E3\u9396\u6210\u5C31","Achievements Unlock":"\u89E3\u9396\u6210\u5C31","Achievements Get List.":"\u53D6\u5F97\u6210\u5C31\u5217\u8868","Achievements Get List":"\u53D6\u5F97\u6210\u5C31\u5217\u8868","Achievements Show Native Popup.":"\u986F\u793A\u539F\u751F\u6210\u5C31\u5F48\u51FA\u8996\u7A97","Achievements Show Native Popup":"\u986F\u793A\u539F\u751F\u6210\u5C31\u5F48\u51FA\u8996\u7A97","Is Remote Config Supported.":"\u652F\u63F4\u9060\u7AEF\u8A2D\u5B9A\u3002","Is Remote Config Supported":"\u652F\u63F4\u9060\u7AEF\u8A2D\u5B9A","On Remote Config Got Completed.":"\u7576\u9060\u7AEF\u8A2D\u5B9A\u53D6\u5F97\u5B8C\u6210","On Remote Config Got Completed":"\u5DF2\u53D6\u5F97\u9060\u7AEF\u8A2D\u5B9A","Has Remote Config Value.":"\u6709\u9060\u7AEF\u8A2D\u5B9A\u503C","Has Remote Config Value":"\u6709\u9060\u7AEF\u8A2D\u5B9A\u503C","Has _PARAM1_ in Remote Config":"\u5728\u9060\u7AEF\u8A2D\u5B9A\u4E2D\u6709_PARAM1_","Remote Config Value.":"\u9060\u7AEF\u8A2D\u5B9A\u503C","Remote Config Value":"\u9060\u7AEF\u8A2D\u5B9A\u503C","Send Remote Config Get Request.":"\u767C\u9001\u9060\u7AEF\u8A2D\u5B9A\u53D6\u5F97\u8ACB\u6C42","Send Remote Config Get Request":"\u767C\u9001\u9060\u7AEF\u8A2D\u5B9A\u53D6\u5F97\u8ACB\u6C42","Is Ad Block Detected.":"\u5075\u6E2C\u5230\u5EE3\u544A\u5C01\u9396\u5668\u3002","Is Ad Block Detected":"\u5075\u6E2C\u5230\u5EE3\u544A\u5C01\u9396\u5668","Poki Games SDK":"Poki Games SDK","Allow games to be hosted on Poki website and display ads.":"\u5141\u8A31\u904A\u6232\u5728Poki\u7DB2\u7AD9\u4E0A\u904B\u884C\u4E26\u986F\u793A\u5EE3\u544A\u3002","Load Poki SDK.":"\u8F09\u5165 Poki SDK\u3002","Load Poki SDK":"\u8F09\u5165 Poki SDK","Check if the Poki SDK is ready to be used.":"\u6AA2\u67E5 Poki SDK \u662F\u5426\u6E96\u5099\u597D\u4F7F\u7528\u3002","Poki SDK is ready":"Poki SDK \u5DF2\u6E96\u5099\u5C31\u7DD2","Inform Poki game finished loading.":"\u901A\u77E5 Poki \u904A\u6232\u8F09\u5165\u5B8C\u7562\u3002","Game loading finished":"\u904A\u6232\u8F09\u5165\u5B8C\u7562","Inform Poki game finished loading":"\u901A\u77E5 Poki \u904A\u6232\u8F09\u5165\u5B8C\u7562","Inform Poki gameplay started.":"\u901A\u77E5 Poki \u904A\u6232\u73A9\u6CD5\u958B\u59CB\u3002","Inform Poki gameplay started":"\u901A\u77E5 Poki \u904A\u6232\u73A9\u6CD5\u958B\u59CB","Inform Poki gameplay stopped.":"\u901A\u77E5 Poki \u904A\u6232\u73A9\u6CD5\u7D50\u675F\u3002","Inform Poki gameplay stopped":"\u901A\u77E5 Poki \u904A\u6232\u73A9\u6CD5\u7D50\u675F","Request commercial break.":"\u8ACB\u6C42\u5546\u696D\u4E2D\u65B7\u3002","Commercial break":"\u5546\u696D\u4E2D\u65B7","Request commercial break":"\u8ACB\u6C42\u5546\u696D\u4E2D\u65B7","Request rewarded break.":"\u8ACB\u6C42\u734E\u52F5\u4E2D\u65B7\u3002","Rewarded break":"\u734E\u52F5\u4E2D\u65B7","Request rewarded break":"\u8ACB\u6C42\u734E\u52F5\u4E2D\u65B7","Create a shareable URL from parameters stored in a variable structure.":"\u5F9E\u5B58\u5132\u5728\u8B8A\u91CF\u7D50\u69CB\u4E2D\u7684\u53C3\u6578\u5275\u5EFA\u53EF\u5171\u4EAB\u7684 URL\u3002","Create shareable URL":"\u5275\u5EFA\u53EF\u5171\u4EAB\u7684 URL","Create shareable URL from parameters _PARAM0_":"\u5F9E\u53C3\u6578 _PARAM0_ \u5275\u5EFA\u53EF\u5171\u4EAB\u7684 URL","Variable structure with URL parameters (example children: id, type)":"\u5177\u6709 URL \u53C3\u6578\u7684\u8B8A\u91CF\u7D50\u69CB\uFF08\u793A\u4F8B\u5B50\u9805\uFF1Aid\u3001type\uFF09","Get the last shareable URL generated by Create shareable URL.":"\u7372\u53D6\u7531\u5275\u5EFA\u53EF\u5171\u4EAB\u7684 URL \u751F\u6210\u7684\u6700\u5F8C\u4E00\u500B\u53EF\u5171\u4EAB URL\u3002","Last shareable URL":"\u6700\u5F8C\u53EF\u5206\u4EAB\u7684 URL","Read a URL parameter from Poki URL or the current URL.":"\u5F9E Poki URL \u6216\u7576\u524D URL \u8B80\u53D6 URL \u53C3\u6578\u3002","Get URL parameter":"\u7372\u53D6 URL \u53C3\u6578","Parameter name (without the gd prefix)":"\u53C3\u6578\u540D\u7A31\uFF08\u4E0D\u5305\u542B gd \u524D\u7DB4\uFF09","Open an external URL via Poki SDK.":"\u901A\u904E Poki SDK \u6253\u958B\u5916\u90E8 URL\u3002","Open external link":"\u6253\u958B\u5916\u90E8\u93C8\u63A5","Open external link _PARAM0_":"\u6253\u958B\u5916\u90E8\u93C8\u63A5 _PARAM0_","URL to open":"\u8981\u6253\u958B\u7684 URL","Move the Poki Pill on mobile.":"\u5728\u79FB\u52D5\u8A2D\u5099\u4E0A\u79FB\u52D5 Poki Pill\u3002","Move Poki Pill":"\u79FB\u52D5 Poki Pill","Move Poki Pill to _PARAM0_ percent from top with _PARAM1_ px offset":"\u5C07 Poki Pill \u79FB\u52D5\u5230\u8DDD\u9802\u90E8 _PARAM0_ \u767E\u5206\u6BD4\uFF0C\u504F\u79FB _PARAM1_ px","Top percent (0-50)":"\u9802\u90E8\u767E\u5206\u6BD4\uFF080-50\uFF09","Additional pixel offset":"\u984D\u5916\u7684\u50CF\u7D20\u504F\u79FB\u91CF","Measure an event for analytics.":"\u6E2C\u91CF\u4E8B\u4EF6\u4EE5\u9032\u884C\u5206\u6790\u3002","Measure event":"\u6E2C\u91CF\u4E8B\u4EF6","Measure category _PARAM0_ what _PARAM1_ action _PARAM2_":"\u6E2C\u91CF\u985E\u5225 _PARAM0_ \u7684 _PARAM1_ \u884C\u52D5 _PARAM2_","Category (for example: level, tutorial, drawing)":"\u985E\u5225\uFF08\u4F8B\u5982\uFF1A\u95DC\u5361\u3001\u6559\u7A0B\u3001\u7E6A\u5716\uFF09","What is measured (for example: 1, de_dust, skip-level)":"\u6E2C\u91CF\u5167\u5BB9\uFF08\u4F8B\u5982\uFF1A1\uFF0Cde_dust\uFF0C\u8DF3\u904E\u95DC\u5361\uFF09","Action (for example: start, complete, fail)":"\u884C\u52D5\uFF08\u4F8B\u5982\uFF1A\u958B\u59CB\u3001\u5B8C\u6210\u3001\u5931\u6557\uFF09","Checks if a commercial break is playing.":"\u6AA2\u67E5\u662F\u5426\u6B63\u5728\u64AD\u653E\u5546\u696D\u4E2D\u65B7\u3002","Commercial break is playing":"\u6B63\u5728\u64AD\u653E\u5546\u696D\u4E2D\u65B7","Checks if a rewarded break is playing.":"\u6AA2\u67E5\u662F\u5426\u6B63\u5728\u64AD\u653E\u734E\u52F5\u4E2D\u65B7\u3002","Rewarded break is playing":"\u6B63\u5728\u64AD\u653E\u734E\u52F5\u4E2D\u65B7","Checks if a commercial break just finished playing.":"\u6AA2\u67E5\u5546\u696D\u4E2D\u65B7\u662F\u5426\u525B\u525B\u64AD\u653E\u5B8C\u7562\u3002","Commercial break just finished playing":"\u5546\u696D\u4E2D\u65B7\u525B\u525B\u64AD\u653E\u5B8C\u7562","Checks if a rewarded break just finished playing.":"\u6AA2\u67E5\u734E\u52F5\u4E2D\u65B7\u662F\u5426\u525B\u525B\u64AD\u653E\u5B8C\u7562\u3002","Rewarded break just finished playing":"\u734E\u52F5\u4E2D\u65B7\u525B\u525B\u64AD\u653E\u5B8C\u7562","Checks if player should be rewarded after a rewarded break finished playing.":"\u6AA2\u67E5\u73A9\u5BB6\u5728\u734E\u52F5\u4E2D\u65B7\u7D50\u675F\u5F8C\u61C9\u8A72\u6709\u734E\u52F5\u3002","Should reward player":"\u61C9\u8A72\u7D66\u4E88\u73A9\u5BB6\u734E\u52F5","Pop-up":"\u5F48\u51FA","Display pop-ups to alert, ask confirmation, and let user type a response in text box.":"\u986F\u793A\u5F48\u51FA\u8996\u7A97\u4EE5\u8B66\u544A\u3001\u8981\u6C42\u78BA\u8A8D\u4EE5\u53CA\u8B93\u7528\u6236\u5728\u6587\u672C\u6846\u4E2D\u8F38\u5165\u56DE\u61C9\u3002","The response to a pop-up message is filled.":"\u586B\u5BEB\u5F48\u51FA\u6D88\u606F\u7684\u56DE\u61C9\u3002","Existing prompt response":"\u73FE\u6709\u63D0\u793A\u56DE\u61C9","Response from the pop-up prompt is filled":"\u586B\u5BEB\u5F48\u51FA\u63D0\u793A\u7684\u56DE\u61C9","Return the text response by user to prompt.":"\u8FD4\u56DE\u7528\u6236\u5C0D\u63D0\u793A\u7684\u6587\u5B57\u56DE\u61C9\u3002","Response to prompt":"\u56DE\u61C9\u63D0\u793A","Open prompt with message : _PARAM1_ with ID: _PARAM2_":"\u4F7F\u7528\u4FE1\u606F_PARAM1_\u548C ID\uFF1A_PARAM2_\u6253\u958B\u63D0\u793A\u3002","Displays a prompt in a pop-up that prompts the user for input. This action return the text input or the false boolean if canceled.":"\u5728\u5F48\u51FA\u7A97\u53E3\u4E2D\u986F\u793A\u63D0\u793A\uFF0C\u63D0\u793A\u7528\u6236\u8F38\u5165\u3002\u6B64\u64CD\u4F5C\u8FD4\u56DE\u7528\u6236\u7684\u6587\u5B57\u8F38\u5165\u6216\u5982\u679C\u53D6\u6D88\u5247\u8FD4\u56DE false \u5E03\u723E\u503C\u3002","Prompt":"\u63D0\u793A","Open a prompt pop-up box with message: _PARAM1_ (placeholder: _PARAM2_)":"\u6253\u958B\u4E00\u500B\u63D0\u793A\u5F48\u51FA\u6846\uFF0C\u986F\u793A\u6D88\u606F\uFF1A_PARAM1_\uFF08\u4F54\u4F4D\u7B26\uFF1A_PARAM2_\uFF09","Prompt message":"\u63D0\u793A\u6D88\u606F","Input placeholder":"\u8F38\u5165\u5360\u4F4D\u7B26","Ask confirmation of user with a message in a dialog box with an OK button, and a Cancel button.":"\u4EE5\u5C0D\u8A71\u6846\u986F\u793A\u4E00\u5247\u6D88\u606F\uFF0C\u8981\u6C42\u7528\u6236\u9032\u884C\u78BA\u8A8D\uFF0C\u4E26\u5305\u542B\u300C\u78BA\u5B9A\u300D\u548C\u300C\u53D6\u6D88\u300D\u6309\u9215\u3002","Confirm":"\u78BA\u8A8D","Open a confirmation pop-up box with message: _PARAM1_":"\u6253\u958B\u4E00\u500B\u78BA\u8A8D\u5F48\u51FA\u6846\uFF0C\u986F\u793A\u6D88\u606F\uFF1A_PARAM1_","Confirmation message":"\u78BA\u8A8D\u6D88\u606F","The text to display in the confirm box.":"\u5728\u78BA\u8A8D\u6846\u4E2D\u986F\u793A\u7684\u6587\u672C\u3002","Check if a confirmation was accepted.":"\u6AA2\u67E5\u78BA\u8A8D\u662F\u5426\u5DF2\u63A5\u53D7\u3002","Pop-up message confirmed":"\u5F48\u51FA\u6D88\u606F\u5DF2\u78BA\u8A8D","Pop-up message is confirmed":"\u5F48\u51FA\u6D88\u606F\u5DF2\u7D93\u78BA\u8A8D","Displays an alert box with a message and an OK button in a pop-up window.":"\u5728\u5F48\u51FA\u7A97\u53E3\u4E2D\u986F\u793A\u5E36\u6709\u6D88\u606F\u548C\u300C\u78BA\u5B9A\u300D\u6309\u9215\u7684\u8B66\u544A\u6846\u3002","Alert":"\u8B66\u544A","Open an alert pop-up box with message: _PARAM1_":"\u6253\u958B\u4E00\u500B\u8B66\u544A\u5F48\u51FA\u6846\uFF0C\u986F\u793A\u6D88\u606F\uFF1A_PARAM1_","Alert message":"\u8B66\u544A\u6D88\u606F","RTS-like unit selection":"RTS\u98A8\u683C\u7684\u55AE\u4F4D\u9078\u64C7","Allow player to select units by clicking on them or dragging a selection box.":"\u5141\u8A31\u73A9\u5BB6\u901A\u904E\u9EDE\u64CA\u6216\u62D6\u52D5\u9032\u884C\u55AE\u4F4D\u9078\u64C7\u3002","Allow player to select units by clicking on them or dragging a selection box":"\u5141\u8A31\u73A9\u5BB6\u901A\u904E\u9EDE\u64CA\u6216\u62D6\u52D5\u9078\u64C7\u6846\u4F86\u9078\u64C7\u55AE\u4F4D\u3002","Allow player to select _PARAM1_ with _PARAM7_ mouse button (or touch). Draw a selection box using _PARAM2_ on Layer: _PARAM3_ with Z order: _PARAM4_. Hold _PARAM5_ to add units and _PARAM6_ to remove units":"\u5141\u8A31\u73A9\u5BB6\u4F7F\u7528 _PARAM7_ \u9F20\u6A19\u6309\u9215\uFF08\u6216\u89F8\u6478\uFF09\u9078\u64C7 _PARAM1_\u3002\u5728\u5716\u5C64 _PARAM3_ \u4E0A\u4F7F\u7528 _PARAM2_ \u7E6A\u88FD\u9078\u64C7\u6846\uFF0C\u4E26\u8A2D\u7F6E Z \u8EF8\u6392\u5E8F\u70BA _PARAM4_\u3002\u6309\u4F4F _PARAM5_ \u6DFB\u52A0\u55AE\u4F4D\uFF0C\u6309\u4F4F _PARAM6_ \u79FB\u9664\u55AE\u4F4D","Units":"\u55AE\u4F4D","Object (or object group) that can be Selected":"\u53EF\u9078\u64C7\u7684\u5C0D\u8C61\uFF08\u6216\u5C0D\u8C61\u7D44\uFF09","Selection box":"\u9078\u64C7\u6846","Edit shape painter properties to change the appearance of this selection box":"\u7DE8\u8F2F\u5F62\u72C0\u7E6A\u88FD\u5668\u5C6C\u6027\u4EE5\u66F4\u6539\u9078\u64C7\u6846\u7684\u5916\u89C0","Layer (of selection box)":"\uFF08\u9078\u64C7\u6846\u7684\uFF09\u5716\u5C64","Must be the same layer as the units being selected":"\u5FC5\u9808\u8207\u6B63\u5728\u9078\u64C7\u7684\u55AE\u4F4D\u6240\u5728\u7684\u5716\u5C64\u76F8\u540C","Z order (of selection box)":"\uFF08\u9078\u64C7\u6846\u7684\uFF09Z \u8EF8\u6392\u5E8F","Z order of the selection box":"\u9078\u64C7\u6846\u7684 Z \u8EF8\u6392\u5E8F","Additive select key":"\u9644\u52A0\u9078\u64C7\u9375","Hold this key to add units to selection":"\u6309\u4F4F\u6B64\u9375\u4EE5\u5C07\u55AE\u4F4D\u6DFB\u52A0\u5230\u9078\u64C7\u4E2D","Subtractive select key":"\u6E1B\u53BB\u9078\u64C7\u9375","Hold this key to remove units from selection":"\u6309\u4F4F\u6B64\u9375\u4EE5\u5F9E\u9078\u64C7\u4E2D\u79FB\u9664\u55AE\u4F4D","Mouse button used to select units":"\u7528\u65BC\u9078\u64C7\u55AE\u4F4D\u7684\u9F20\u6A19\u6309\u9215","Check if the unit is \"Preselected\".":"\u6AA2\u67E5\u55AE\u4F4D\u662F\u5426\"\u9810\u9078\"\u3002","Is unit \"Preselected\"":"\u55AE\u4F4D\u662F\u5426\"\u9810\u9078\"","_PARAM1_ is \"Preselected\"":"_PARAM1_ is u201cPreselected u201d","Check if the unit is \"Selected\".":"\u6AA2\u67E5\u55AE\u4F4D\u662F\u5426\"\u5DF2\u9078\u64C7\"\u3002","Is unit \"Selected\"":"\u55AE\u4F4D\u662F\u5426\"\u5DF2\u9078\u64C7\"","_PARAM1_ is \"Selected\"":"_PARAM1_ is u201cSelected u201d","Set unit as \"Preselected\".":"\u5C07\u55AE\u4F4D\u8A2D\u5B9A\u70BA\"\u9810\u9078\"\u3002","Set unit as \"Preselected\"":"\u5C07\u55AE\u4F4D\u8A2D\u5B9A\u70BA\"\u9810\u9078\"","Set _PARAM1_ as \"Preselected\": _PARAM2_":"Set _PARAM1_ as u201cPreselected u201d: _PARAM2_","Set unit as \"Selected\".":"\u5C07\u55AE\u4F4D\u8A2D\u5B9A\u70BA\"\u5DF2\u9078\u64C7\"\u3002","Set unit as \"Selected\"":"\u5C07\u55AE\u4F4D\u8A2D\u5B9A\u70BA\"\u5DF2\u9078\u64C7\"","Set _PARAM1_ as \"Selected\": _PARAM2_":"Set _PARAM1_ as u201cSelected u201d: _PARAM2_","Assign a unique ID to each \"Selected\" unit. This should be ran every time there is a change in the number of \"Selected\" units.":"\u70BA\u6BCF\u500B\"\u5DF2\u9078\u64C7\"\u55AE\u4F4D\u5206\u914D\u552F\u4E00\u7684ID\u3002 \u6BCF\u6B21\"\u5DF2\u9078\u64C7\"\u55AE\u4F4D\u6578\u91CF\u8B8A\u5316\u6642\u90FD\u61C9\u904B\u884C\u6B64\u64CD\u4F5C\u3002","Assign a unique ID to each \"Selected\" unit":"\u70BA\u6BCF\u500B\"\u5DF2\u9078\u64C7\"\u55AE\u4F4D\u5206\u914D\u552F\u4E00\u7684ID","Assign a unique ID to _PARAM1_ that are \"Selected\"":"Assign a unique ID to _PARAM1_ that are u201cSelected u201d","Provides the total number of _PARAM1_ that are currently \"Selected\".":"Provides the total number of _PARAM1_ that are currently u201cSelected u201d.","Total number of \"Selected\" units":"\u5DF2\u9078\u64C7\u7684\u55AE\u4F4D\u7E3D\u6578","Unit":"\u55AE\u4F4D","Enable control groups using default controls.":"\u4F7F\u7528\u9ED8\u8A8D\u63A7\u4EF6\u555F\u7528\u63A7\u5236\u7D44\u3002","Enable control groups using default controls":"\u4F7F\u7528\u9ED8\u8A8D\u63A7\u4EF6\u555F\u7528\u63A7\u5236\u7D44","Assign _PARAM1_ to control groups using default controls (Ctrl + number)":"Assign _PARAM1_ to control groups using default controls (Ctrl + number)","Object (or object group) that will be assigned to a control group":"\u5206\u914D\u7D66\u63A7\u5236\u7D44\u7684\u5C0D\u8C61\uFF08\u6216\u5C0D\u8C61\u7D44\uFF09","Control group this unit is assigned to.":"\u9019\u500B\u55AE\u5143\u6240\u5206\u914D\u7684\u63A7\u5236\u7D44\u3002","Control group this unit is assigned to":"\u5206\u914D\u5230\u7684\u63A7\u5236\u7D44","Check if a unit is assigned to a control group.":"\u6AA2\u67E5\u4E00\u500B\u55AE\u5143\u662F\u5426\u88AB\u5206\u914D\u5230\u4E00\u500B\u63A7\u5236\u7D44\u3002","Check if a unit is assigned to a control group":"\u6AA2\u67E5\u4E00\u500B\u55AE\u5143\u662F\u5426\u88AB\u5206\u914D\u5230\u4E00\u500B\u63A7\u5236\u7D44","_PARAM1_ is assigned to control group _PARAM2_":"_PARAM1_ \u88AB\u5206\u914D\u5230\u63A7\u5236\u7D44 _PARAM2_","Control group ID":"\u63A7\u5236\u7D44 ID","Assign unit to a control group.":"\u5206\u914D\u55AE\u5143\u5230\u63A7\u5236\u7D44\u3002","Assign unit to a control group":"\u5206\u914D\u55AE\u5143\u5230\u63A7\u5236\u7D44","Assign _PARAM1_ to control group _PARAM2_":"\u5206\u914D _PARAM1_ \u5230\u63A7\u5236\u7D44 _PARAM2_","Unit ID of a selected unit.":"\u6240\u9078\u55AE\u5143\u7684\u55AE\u5143 ID\u3002","Unit ID of a selected unit":"\u6240\u9078\u55AE\u5143\u7684\u55AE\u5143 ID","Read pixels":"\u8B80\u53D6\u50CF\u7D20","Read the values of pixels on the screen.":"\u8B80\u53D6\u5C4F\u5E55\u4E0A\u7684\u50CF\u7D20\u503C\u3002","Return the alpha component of the pixel at the specified position.":"\u8FD4\u56DE\u6307\u5B9A\u4F4D\u7F6E\u50CF\u7D20\u7684\u900F\u660E\u901A\u9053\u6210\u5206\u3002","Read pixel alpha":"\u8B80\u53D6\u50CF\u7D20\u900F\u660E\u5EA6","Record":"\u8A18\u9304","Actions to record the game and players download the clips. Works on desktop, and in the browser.":"\u8A18\u9304\u904A\u6232\u7684\u52D5\u4F5C\uFF0C\u4E26\u8B93\u73A9\u5BB6\u4E0B\u8F09\u7247\u6BB5\u3002\u5728\u684C\u9762\u548C\u700F\u89BD\u5668\u4E2D\u5747\u53EF\u4F7F\u7528\u3002","Start the recording.":"\u958B\u59CB\u9304\u88FD\u3002","Start recording":"\u958B\u59CB\u9304\u88FD","End the recording.":"\u7D50\u675F\u9304\u88FD\u3002","Stop recording":"\u505C\u6B62\u9304\u88FD","Stop the recording":"\u505C\u6B62\u9304\u88FD","Pause recording.":"\u66AB\u505C\u9304\u88FD\u3002","Pause recording":"\u66AB\u505C\u9304\u88FD","Resume recording.":"\u6062\u5FA9\u9304\u88FD\u3002","Resume recording":"\u6062\u5FA9\u9304\u88FD","Save recording to the file system on destop, or to the downloads folder for web. Always ask for permission to save a file.":"\u5C07\u9304\u88FD\u4FDD\u5B58\u5230\u684C\u9762\u4E0A\u7684\u6587\u4EF6\u7CFB\u7D71\uFF0C\u6216\u8005\u4FDD\u5B58\u5230 Web \u7684\u4E0B\u8F09\u6587\u4EF6\u593E\u3002\u4E00\u5F8B\u8ACB\u6C42\u4FDD\u5B58\u6587\u4EF6\u6642\u8ACB\u6C42\u6B0A\u9650\u3002","Save recording":"\u4FDD\u5B58\u9304\u88FD","Save recording to _PARAM1_ as _PARAM2_":"\u5C07\u9304\u88FD\u4FDD\u5B58\u5230 _PARAM1_ \u4F5C\u70BA _PARAM2_","File location, set using a FileSystem path e.g. FileSystem::DesktopPath() (only used for desktop saves)":"\u6A94\u6848\u4F4D\u7F6E\uFF0C\u4F7F\u7528\u6587\u4EF6\u7CFB\u7D71\u8DEF\u5F91\u8A2D\u7F6E\uFF0C\u4F8B\u5982 FileSystem::DesktopPath()\uFF08\u50C5\u7528\u65BC\u684C\u9762\u4FDD\u5B58\uFF09","Name to save file as":"\u8981\u4FDD\u5B58\u7684\u6A94\u6848\u540D\u7A31","Returns the current status of the reccorder: inactive (not recording), recording, or paused.":"\u8FD4\u56DE\u9304\u88FD\u5668\u7684\u7576\u524D\u72C0\u614B\uFF1A\u7121\u6548\uFF08\u672A\u9304\u88FD\uFF09\u3001\u9304\u88FD\u6216\u66AB\u505C\u3002","Get current state":"\u7372\u53D6\u7576\u524D\u72C0\u614B","Get the current framerate.":"\u7372\u53D6\u7576\u524D\u5E40\u6578\u3002","Get frame rate":"\u7372\u53D6\u5E40\u7387","Set frame rate to _PARAM1_":"\u8A2D\u7F6E\u5E40\u7387\u70BA_PARAM1_","Set the frame rate, must be set before starting a recording. Defaults to the min FPS set in the game properties.":"\u8A2D\u7F6E\u5E40\u7387\uFF0C\u5FC5\u9808\u5728\u958B\u59CB\u9304\u88FD\u4E4B\u524D\u8A2D\u7F6E\u3002\u9ED8\u8A8D\u503C\u70BA\u904A\u6232\u5C6C\u6027\u4E2D\u8A2D\u7F6E\u7684\u6700\u4F4E FPS\u3002","Set frame rate":"\u8A2D\u7F6E\u5E40\u7387","Recommended fps for video: 25, 30, 60, for GIFs use 5, 10, 20":"\u5EFA\u8B70\u7684\u8996\u983B\u5E40\u7387\uFF1A25\u300130\u300160\uFF0CGIF \u4F7F\u7528 5\u300110\u300120\u3002","Returns the current video bit rate per second.":"\u8FD4\u56DE\u6BCF\u79D2\u7576\u524D\u7684\u8996\u983B\u6BD4\u7279\u7387\u3002","Get video bit rate per second":"\u7372\u53D6\u6BCF\u79D2\u8996\u983B\u6BD4\u7279\u7387","Set the video bit rate, must be set before starting a recording. Defaults to 2500000.":"\u8A2D\u7F6E\u8996\u983B\u4F4D\u901F\uFF0C\u5FC5\u9808\u5728\u958B\u59CB\u9304\u88FD\u4E4B\u524D\u8A2D\u7F6E\u3002\u9ED8\u8A8D\u503C\u70BA 2500000\u3002","Set video bit rate":"\u8A2D\u7F6E\u8996\u983B\u6BD4\u7279\u7387","Set the video bit rate to _PARAM1_":"\u8A2D\u7F6E\u8996\u983B\u4F4D\u901F\u70BA_PARAM1_","video bits per second":"\u6BCF\u79D2\u8996\u983B\u6BD4\u7279","Returns the audio bit rate per second. Defaults to 128000 if not set.":"\u8FD4\u56DE\u6BCF\u79D2\u97F3\u983B\u4F4D\u901F\u3002\u82E5\u672A\u8A2D\u7F6E\uFF0C\u9ED8\u8A8D\u70BA 128000\u3002","Set audio bit rate":"\u8A2D\u7F6E\u97F3\u983B\u6BD4\u7279\u7387","Set the audio bit rate to _PARAM1_":"\u8A2D\u7F6E\u97F3\u983B\u4F4D\u901F\u70BA_PARAM1_","audio bits per second":"\u97F3\u983B\u6BCF\u79D2\u6BD4\u7279","Returns the audio bit rate per second.":"\u8FD4\u56DE\u97F3\u983B\u6BCF\u79D2\u6BD4\u7279\u7387\u3002","Get audio bit rate per second":"\u7372\u53D6\u6BCF\u79D2\u97F3\u983B\u6BD4\u7279\u7387","Set the file format, if a selected file format is unsupported on the users platform a supported one will be picked by deafult.":"\u8A2D\u7F6E\u6587\u4EF6\u683C\u5F0F\uFF0C\u82E5\u6240\u9078\u6587\u4EF6\u683C\u5F0F\u5728\u7528\u6236\u5E73\u53F0\u4E0A\u4E0D\u53D7\u652F\u6301\uFF0C\u5247\u9ED8\u8A8D\u9078\u64C7\u652F\u6301\u7684\u6587\u4EF6\u683C\u5F0F\u3002","Set file format":"\u8A2D\u7F6E\u6587\u4EF6\u683C\u5F0F","Set file format to _PARAM1_":"\u8A2D\u7F6E\u6587\u4EF6\u683C\u5F0F\u70BA_PARAM1_","Recording format":"\u9304\u88FD\u683C\u5F0F","Returns the current video format.":"\u8FD4\u56DE\u7576\u524D\u7684\u8996\u983B\u683C\u5F0F\u3002","Get codec":"\u7372\u53D6\u7DE8\u89E3\u78BC\u5668","Set the video codec, if a selected codec is unsupported on the users platform a supported one will be picked by deafult.":"\u8A2D\u7F6E\u8996\u983B\u7DE8\u89E3\u78BC\u5668\uFF0C\u82E5\u6240\u9078\u7DE8\u89E3\u78BC\u5668\u5728\u7528\u6236\u5E73\u53F0\u4E0A\u4E0D\u53D7\u652F\u6301\uFF0C\u5247\u9ED8\u8A8D\u9078\u64C7\u652F\u6301\u7684\u7DE8\u89E3\u78BC\u5668\u3002","Set codec":"\u8A2D\u7F6E\u7DE8\u89E3\u78BC\u5668","Set video codec _PARAM1_":"\u8A2D\u7F6E\u8996\u983B\u7DE8\u89E3\u78BC\u5668\u70BA_PARAM1_","codec":"\u7DE8\u89E3\u78BC\u5668","Returns the current video codec.":"\u8FD4\u56DE\u7576\u524D\u7684\u8996\u983B\u7DE8\u89E3\u78BC\u5668\u3002","Get video codec":"\u7372\u53D6\u8996\u983B\u7DE8\u89E3\u78BC\u5668","When an error occurs this method will return what type of error it is.":"\u7576\u932F\u8AA4\u767C\u751F\u6642\uFF0C\u6B64\u65B9\u6CD5\u5C07\u8FD4\u56DE\u932F\u8AA4\u985E\u578B\u3002","Error type":"\u932F\u8AA4\u985E\u578B","Check if an error has occurred.":"\u6AA2\u67E5\u662F\u5426\u767C\u751F\u932F\u8AA4\u3002","When an errror has occurred":"\u7576\u767C\u751F\u932F\u8AA4\u6642","When an error has occurred":"\u7576\u932F\u8AA4\u767C\u751F\u6642","Check if a recording has just been paused.":"\u6AA2\u67E5\u9304\u88FD\u662F\u5426\u525B\u525B\u66AB\u505C\u3002","When recording has paused":"\u7576\u9304\u88FD\u66AB\u505C\u6642","Check if a recording has just been resumed.":"\u6AA2\u67E5\u9304\u88FD\u662F\u5426\u525B\u525B\u6062\u5FA9\u3002","When recording has resumed":"\u7576\u9304\u88FD\u6062\u5FA9\u6642","Check if recording has just started.":"\u6AA2\u67E5\u9304\u88FD\u662F\u5426\u525B\u958B\u59CB\u3002","When recording has started":"\u7576\u9304\u88FD\u958B\u59CB\u6642","Check if recording has just stopped.":"\u6AA2\u67E5\u9304\u88FD\u662F\u5426\u525B\u525B\u505C\u6B62\u3002","When recording has stopped":"\u7576\u9304\u88FD\u505C\u6B62\u6642","Check if recording has just been saved.":"\u6AA2\u67E5\u9304\u88FD\u662F\u5426\u525B\u525B\u4FDD\u5B58\u3002","When recording has saved":"\u7576\u9304\u88FD\u4FDD\u5B58\u6642","When recording has been saved":"\u7576\u9304\u88FD\u5DF2\u4FDD\u5B58","Check if the specified format is available on the users device. To avoid unsupported formats pick commons ones like MP4 or WebM.":"\u6AA2\u67E5\u8A2D\u5099\u4E0A\u662F\u5426\u652F\u6301\u6307\u5B9A\u683C\u5F0F\u3002\u70BA\u4E86\u907F\u514D\u4E0D\u652F\u6301\u7684\u683C\u5F0F\uFF0C\u8ACB\u9078\u64C7\u5E38\u7528\u7684\u683C\u5F0F\uFF0C\u5982MP4\u6216WebM\u3002","Is format supported on user device":"\u683C\u5F0F\u662F\u5426\u5728\u7528\u6236\u8A2D\u5099\u4E0A\u53D7\u652F\u6301","Check if _PARAM1_ is available on the users device":"\u6AA2\u67E5\u7528\u6236\u8A2D\u5099\u4E0A\u662F\u5426\u6709_PARAM1_","Select a common format for the best results":"\u9078\u64C7\u4E00\u500B\u5E38\u7528\u683C\u5F0F\u4EE5\u7372\u5F97\u6700\u4F73\u7D50\u679C","Get the current GIF quality.":"\u7372\u53D6\u7576\u524D GIF \u54C1\u8CEA\u3002","Set the GIF quality, must be set before starting a recording. Defaults to 10.":"\u8A2D\u7F6E GIF \u54C1\u8CEA\uFF0C\u9700\u8981\u5728\u958B\u59CB\u9304\u88FD\u4E4B\u524D\u8A2D\u7F6E\u3002\u9ED8\u8A8D\u503C\u70BA 10\u3002","Set GIF quality":"\u8A2D\u7F6E GIF \u54C1\u8CEA","Set the GIF quality to _PARAM1_":"\u5C07 GIF \u54C1\u8CEA\u8A2D\u7F6E\u70BA_PARAM1_","Quality":"\u54C1\u8CEA","Returns whether or not dithering is enabled for GIFs.":"\u8FD4\u56DE GIF \u662F\u5426\u555F\u7528\u6296\u52D5\u3002","Enable dithering in GIF, must be set before starting a recording. Defaults to false.":"\u555F\u7528 GIF \u6296\u52D5\uFF0C\u9700\u8981\u5728\u958B\u59CB\u9304\u88FD\u4E4B\u524D\u8A2D\u7F6E\u3002\u9ED8\u8A8D\u70BA false\u3002","Set GIF Dithering":"\u8A2D\u7F6E GIF \u6296\u52D5","Enable dithering _PARAM1_":"\u555F\u7528\u6296\u52D5_PARAM1_","Dithering":"\u6296\u52D5","Rectangular movement":"\u77E9\u5F62\u79FB\u52D5","Move objects in a rectangular pattern.":"\u5728\u77E9\u5F62\u6A21\u5F0F\u4E2D\u79FB\u52D5\u7269\u4EF6\u3002","Distance from an object to the closest edge of a second object.":"\u5C0D\u8C61\u5230\u7B2C\u4E8C\u500B\u5C0D\u8C61\u7684\u6700\u8FD1\u908A\u7DE3\u7684\u8DDD\u96E2\u3002","Distance from an object to the closest edge of a second object":"\u5C0D\u8C61\u5230\u7B2C\u4E8C\u500B\u5C0D\u8C61\u7684\u6700\u8FD1\u908A\u7DE3\u7684\u8DDD\u96E2","Distance from _PARAM1_ to the closest edge of _PARAM2_":"\u5F9E_PARAM1_\u5230_PARAM2_\u7684\u6700\u8FD1\u908A\u7DE3\u7684\u8DDD\u96E2","Moving object":"\u79FB\u52D5\u5C0D\u8C61","Update rectangular movement to follow the border of an object. Run once, or every time the center object moves.":"\u66F4\u65B0\u77E9\u5F62\u904B\u52D5\u4EE5\u8DDF\u96A8\u5C0D\u8C61\u7684\u908A\u6846\u3002\u904B\u884C\u4E00\u6B21\u6216\u6BCF\u6B21\u4E2D\u5FC3\u5C0D\u8C61\u79FB\u52D5\u6642\u3002","Update rectangular movement to follow the border of an object":"\u66F4\u65B0\u77E9\u5F62\u904B\u52D5\u4EE5\u8DDF\u96A8\u5C0D\u8C61\u7684\u908A\u6846","Update rectangular movement of _PARAM1_ to follow the border of _PARAM3_. Position on border: _PARAM4_":"\u66F4\u65B0_PARAM1_\u7684\u77E9\u5F62\u904B\u52D5\u4EE5\u8DDF\u96A8_PARAM3_\u7684\u908A\u6846\u3002\u5728\u908A\u754C\u4E0A\u7684\u4F4D\u7F6E\uFF1A_PARAM4_","Rectangle Movement (required)":"\u77E9\u5F62\u904B\u52D5\uFF08\u5FC5\u9700\uFF09","Position on border":"\u5728\u908A\u754C\u4E0A\u7684\u4F4D\u7F6E","Move to the nearest corner of the center object.":"\u79FB\u52D5\u5230\u4E2D\u5FC3\u5C0D\u8C61\u7684\u6700\u8FD1\u89D2\u843D\u3002","Move to the nearest corner of the center object":"\u79FB\u52D5\u5230\u4E2D\u5FC3\u5C0D\u8C61\u7684\u6700\u8FD1\u89D2\u843D","Move _PARAM1_ to the nearest corner of _PARAM3_":"\u5C07_PARAM1_\u79FB\u52D5\u5230_PARAM3_\u7684\u6700\u8FD1\u89D2\u843D","Dimension":"\u5C3A\u5BF8","Clockwise":"\u9806\u6642\u91DD","Horizontal edge duration":"\u6C34\u5E73\u908A\u7DE3\u6301\u7E8C\u6642\u9593","Vertical edge duration":"\u5782\u76F4\u908A\u7DE3\u6301\u7E8C\u6642\u9593","Initial position":"\u521D\u59CB\u4F4D\u7F6E","Teleport the object to a corner of the movement rectangle.":"\u5C07\u7269\u9AD4\u50B3\u9001\u5230\u904B\u52D5\u77E9\u5F62\u7684\u4E00\u500B\u89D2\u843D\u3002","Teleport at a corner":"\u50B3\u9001\u5230\u4E00\u500B\u89D2\u843D","Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop":"\u8ABF\u6574_Param0_\u7684\u4F4D\u7F6E\u5230\u77E9\u5F62\u5FAA\u74B0\u7684_Param2_\u3002","Corner":"\u89D2\u843D","Return the perimeter of the movement rectangle.":"\u8FD4\u56DE\u904B\u52D5\u77E9\u5F62\u7684\u5468\u9577\u3002","Perimeter":"\u5468\u9577","Return the time the object takes to go through the whole rectangle (in seconds).":"\u8FD4\u56DE\u7269\u9AD4\u7A7F\u8D8A\u6574\u500B\u77E9\u5F62\u6240\u9700\u7684\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Return the time the object takes to go through a horizontal edge (in seconds).":"\u8FD4\u56DE\u7269\u9AD4\u7A7F\u8D8A\u6C34\u5E73\u908A\u7DE3\u6240\u9700\u7684\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Return the time the object takes to go through a vertical edge (in seconds).":"\u8FD4\u56DE\u7269\u9AD4\u7A7F\u8D8A\u5782\u76F4\u908A\u7DE3\u6240\u9700\u7684\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Return the rectangle width.":"\u8FD4\u56DE\u77E9\u5F62\u7684\u5BEC\u5EA6\u3002","Return the rectangle height.":"\u8FD4\u56DE\u77E9\u5F62\u7684\u9AD8\u5EA6\u3002","Return the left bound of the movement.":"\u8FD4\u56DE\u904B\u52D5\u7684\u5DE6\u908A\u754C\u3002","Return the top bound of the movement.":"\u8FD4\u56DE\u904B\u52D5\u7684\u4E0A\u908A\u754C\u3002","Return the right bound of the movement.":"\u8FD4\u56DE\u904B\u52D5\u7684\u53F3\u908A\u754C\u3002","Return the bottom bound of the movement.":"\u8FD4\u56DE\u904B\u52D5\u7684\u4E0B\u908A\u754C\u3002","Change the left bound of the rectangular movement.":"\u66F4\u6539\u77E9\u5F62\u904B\u52D5\u7684\u5DE6\u908A\u754C\u3002","Change the movement left bound of _PARAM0_ to _PARAM2_":"\u5C07_Param0_\u7684\u904B\u52D5\u5DE6\u908A\u754C\u4FEE\u6539\u70BA_Param2_\u3002","Change the top bound of the rectangular movement.":"\u66F4\u6539\u77E9\u5F62\u904B\u52D5\u7684\u4E0A\u908A\u754C\u3002","Change the movement top bound of _PARAM0_ to _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u79FB\u52D5\u5340\u9593\u9802\u90E8\u5230_PARAM2_","Change the right bound of the rectangular movement.":"\u66F4\u6539\u77E9\u5F62\u79FB\u52D5\u7684\u53F3\u908A\u754C\u3002","Change the movement right bound of _PARAM0_ to _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u79FB\u52D5\u5340\u9593\u53F3\u908A\u754C\u5230_PARAM2_","Change the bottom bound of the rectangular movement.":"\u66F4\u6539\u77E9\u5F62\u79FB\u52D5\u7684\u5E95\u90E8\u908A\u754C\u3002","Change the movement bottom bound of _PARAM0_ to _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u79FB\u52D5\u5340\u9593\u5E95\u90E8\u5230_PARAM2_","Change the time the object takes to go through a horizontal edge (in seconds).":"\u66F4\u6539\u7269\u4EF6\u901A\u904E\u6C34\u5E73\u908A\u7DE3\u7684\u6642\u9593\uFF08\u79D2\uFF09\u3002","Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_":"\u66F4\u6539\u6642\u9593_PARAM0_\u901A\u904E\u6C34\u5E73\u908A\u7DE3\u5230_PARAM2_","Change the time the object takes to go through a vertical edge (in seconds).":"\u66F4\u6539\u7269\u4EF6\u901A\u904E\u5782\u76F4\u908A\u7DE3\u7684\u6642\u9593\uFF08\u79D2\uFF09\u3002","Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_":"\u66F4\u6539\u6642\u9593_PARAM0_\u901A\u904E\u5782\u76F4\u908A\u7DE3\u5230_PARAM2_","Change the direction to clockwise or counter-clockwise.":"\u5C07\u65B9\u5411\u66F4\u6539\u70BA\u9806\u6642\u91DD\u6216\u9006\u6642\u91DD\u3002","Use clockwise direction for _PARAM0_: _PARAM2_":"\u4F7F\u7528\u9806\u6642\u91DD\u65B9\u5411\u4EE3\u66FF_PARAM0_\uFF1A_PARAM2_","Change the easing function of the movement.":"\u66F4\u6539\u79FB\u52D5\u7684\u7DE9\u52D5\u529F\u80FD\u3002","Change the easing of _PARAM0_ to _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u7DE9\u52D5\u70BA_PARAM2_","Toggle the direction to clockwise or counter-clockwise.":"\u5207\u63DB\u65B9\u5411\u70BA\u9806\u6642\u91DD\u6216\u9006\u6642\u91DD\u3002","Toggle direction":"\u5207\u63DB\u65B9\u5411","Toogle the direction of _PARAM0_":"\u5207\u63DB_PARAM0_\u7684\u65B9\u5411","Check if the object is moving clockwise.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u9806\u6642\u91DD\u79FB\u52D5\u3002","Is moving clockwise":"\u6B63\u5728\u9806\u6642\u91DD\u79FB\u52D5","_PARAM0_ is moving clockwise":"_PARAM0_\u6B63\u5728\u9806\u6642\u91DD\u79FB\u52D5","Check if the object is moving to the left.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5411\u5DE6\u79FB\u52D5\u3002","Is moving left":"\u6B63\u5728\u5411\u5DE6\u79FB\u52D5","_PARAM0_ is moving to the left":"_PARAM0_\u6B63\u5728\u5411\u5DE6\u79FB\u52D5","Check if the object is moving up.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5411\u4E0A\u79FB\u52D5\u3002","Is moving up":"\u6B63\u5728\u5411\u4E0A\u79FB\u52D5","_PARAM0_ is moving up":"_PARAM0_\u6B63\u5728\u5411\u4E0A\u79FB\u52D5","Object is moving to the right.":"\u7269\u4EF6\u6B63\u5728\u5411\u53F3\u79FB\u52D5\u3002","Is moving right":"\u6B63\u5728\u5411\u53F3\u79FB\u52D5","_PARAM0_ is moving to the right":"_PARAM0_\u6B63\u5728\u5411\u53F3\u79FB\u52D5","Check if the object is moving down.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5411\u4E0B\u79FB\u52D5\u3002","Is moving down":"\u6B63\u5728\u5411\u4E0B\u79FB\u52D5","_PARAM0_ is moving down":"_PARAM0_\u6B63\u5728\u5411\u4E0B\u79FB\u52D5","Object is on the left side of the rectangle.":"\u7269\u4EF6\u5728\u77E9\u5F62\u7684\u5DE6\u5074\u3002","Is on left":"\u5728\u5DE6\u5074","_PARAM0_ is on the left side":"_PARAM0_\u5728\u5DE6\u5074","Object is on the top side of the rectangle.":"\u9577\u65B9\u5F62\u7684\u4E0A\u5074\u6709\u7269\u9AD4\u3002","Is on top":"\u5728\u4E0A\u5074","_PARAM0_ is on the top side":"_PARAM0_ \u5728\u4E0A\u5074","Object is on the right side of the rectangle.":"\u9577\u65B9\u5F62\u7684\u53F3\u5074\u6709\u7269\u9AD4\u3002","Is on right":"\u5728\u53F3\u5074","_PARAM0_ is on the right side":"_PARAM0_ \u5728\u53F3\u5074","Object is on the bottom side of the rectangle.":"\u9577\u65B9\u5F62\u7684\u4E0B\u5074\u6709\u7269\u9AD4\u3002","Is on bottom":"\u5728\u4E0B\u5074","_PARAM0_ is on the bottom side":"_PARAM0_ \u5728\u4E0B\u5074","Return the duration between the top-left vertex and the top-right one.":"\u8FD4\u56DE\u5DE6\u4E0A\u9802\u9EDE\u5230\u53F3\u4E0A\u9802\u9EDE\u7684\u6301\u7E8C\u6642\u9593\u3002","Duration to top right":"\u5230\u53F3\u4E0A\u7684\u6301\u7E8C\u6642\u9593","Return the duration between the top-left vertex and the bottom-right one.":"\u8FD4\u56DE\u5DE6\u4E0A\u9802\u9EDE\u5230\u53F3\u4E0B\u9802\u9EDE\u7684\u6301\u7E8C\u6642\u9593\u3002","Duration to bottom right":"\u5230\u53F3\u4E0B\u7684\u6301\u7E8C\u6642\u9593","Return the duration between the top-left vertex and the bottom-left one.":"\u8FD4\u56DE\u5DE6\u4E0A\u9802\u9EDE\u5230\u5DE6\u4E0B\u9802\u9EDE\u7684\u6301\u7E8C\u6642\u9593\u3002","Duration to bottom left":"\u5230\u5DE6\u4E0B\u7684\u6301\u7E8C\u6642\u9593","Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).":"\u8FD4\u56DE\u5F9E\u6700\u5F8C\u4E00\u500B\u9802\u9EDE\u5230\u908A\u7DE3\u9577\u5EA6\u7684\u5DF2\u8986\u84CB\u8DDD\u96E2\u4E4B\u6BD4\uFF08\u4ECB\u65BC0\u548C1\u4E4B\u9593\uFF09\u3002","Progress on edge":"\u908A\u7DE3\u4E0A\u7684\u9032\u5EA6","Return the X position of the current edge origin.":"\u8FD4\u56DE\u7576\u524D\u908A\u7DE3\u8D77\u9EDE\u7684X\u4F4D\u7F6E\u3002","Edge origin X":"\u908A\u7DE3\u8D77\u9EDE\u7684X","Return the Y position of the current edge origin.":"\u8FD4\u56DE\u7576\u524D\u908A\u7DE3\u8D77\u9EDE\u7684Y\u4F4D\u7F6E\u3002","Edge origin Y":"\u908A\u7DE3\u8D77\u9EDE\u7684Y","Return the X position of the current edge target.":"\u8FD4\u56DE\u7576\u524D\u908A\u7DE3\u76EE\u6A19\u7684X\u4F4D\u7F6E\u3002","Edge target X":"\u908A\u7DE3\u76EE\u6A19\u7684X","Return the Y position of the current edge target.":"\u8FD4\u56DE\u7576\u524D\u908A\u7DE3\u76EE\u6A19\u7684Y\u4F4D\u7F6E\u3002","Edge target Y":"\u908A\u7DE3\u76EE\u6A19\u7684Y","Return the time from the top-left vertex.":"\u8FD4\u56DE\u5F9E\u5DE6\u4E0A\u9802\u9EDE\u7684\u6642\u9593\u3002","Current time":"\u76EE\u524D\u6642\u9593","Return the covered length from the top-left vertex or the bottom-right one.":"\u8FD4\u56DE\u5F9E\u5DE6\u4E0A\u9802\u9EDE\u6216\u53F3\u4E0B\u9802\u9EDE\u7684\u8986\u84CB\u9577\u5EA6\u3002","Half Current length":"\u4E00\u534A\u76EE\u524D\u7684\u9577\u5EA6","Return the displacement on the X axis from the top-left vertex.":"\u8FD4\u56DE\u5F9E\u5DE6\u4E0A\u9802\u9EDE\u7684X\u8EF8\u4F4D\u79FB\u3002","Return the displacement on the Y axis from the top-left vertex.":"\u8FD4\u56DE\u5F9E\u5DE6\u4E0A\u9802\u9EDE\u7684Y\u8EF8\u4F4D\u79FB\u3002","Rectangular flood fill":"\u77E9\u5F62\u586B\u5145","Create objects as a grid to cover a rectangular area or an other object.":"\u5275\u5EFA\u7DB2\u683C\u7269\u4EF6\u4EE5\u8986\u84CB\u77E9\u5F62\u5340\u57DF\u6216\u5176\u4ED6\u7269\u4EF6\u3002","Create fill objects that cover the rectangular area of target objects.":"\u5275\u5EFA\u586B\u5145\u5C0D\u8C61\uFF0C\u8986\u84CB\u76EE\u6A19\u5C0D\u8C61\u7684\u77E9\u5F62\u5340\u57DF\u3002","Create objects to flood fill other objects":"\u5275\u5EFA\u5C0D\u8C61\u4F86\u6CDB\u6FEB\u586B\u5145\u5176\u4ED6\u5C0D\u8C61","Create _PARAM2_ to cover _PARAM1_ with _PARAM3_ pixels between columns and _PARAM4_ pixels between rows on layer: _PARAM5_ at Z-order: _PARAM6_":"\u4F7F\u7528_PARAM3_\u50CF\u7D20\u4E4B\u9593\u7684\u5217\u548C_PARAM4_\u50CF\u7D20\u4E4B\u9593\u7684\u884C\uFF0C\u5275\u5EFA_PARAM2_\u4EE5\u8986\u84CB_PARAM1_\u5728\u5C64\uFF1A_PARAM5_\u7684\u77E9\u5F62\u586B\u5145\u5C0D\u8C61\uFF0CZ-\u6392\u5E8F\u70BA\uFF1A_PARAM6_","Rectangular area that will be covered by fill objects":"\u5C07\u88AB\u586B\u5145\u7269\u4EF6\u8986\u84CB\u7684\u77E9\u5F62\u5340\u57DF","Fill object":"\u586B\u5145\u7269\u4EF6","Object that is created to cover the rectangular area of target objects":"\u5275\u5EFA\u4EE5\u8986\u84CB\u76EE\u6A19\u7269\u4EF6\u77E9\u5F62\u5340\u57DF\u7684\u7269\u4EF6","Space between columns (pixels)":"\u5217\u4E4B\u9593\u7684\u7A7A\u9593\uFF08\u50CF\u7D20\uFF09","Space between rows (pixels)":"\u884C\u4E4B\u9593\u7684\u7A7A\u9593\uFF08\u50CF\u7D20\uFF09","Z order":"Z\u9806\u5E8F","Create multiple copies of an object.":"\u5EFA\u7ACB\u7269\u4EF6\u7684\u591A\u91CD\u526F\u672C","Create objects to flood fill a rectanglular area":"\u5EFA\u7ACB\u7269\u4EF6\u4EE5\u586B\u6EFF\u77E9\u5F62\u5340\u57DF","Create _PARAM2_ columns and _PARAM3_ rows of _PARAM1_ with top-left corner at _PARAM4_ ; _PARAM5_ and _PARAM6_ pixels between columns and _PARAM7_ pixels between rows on layer: _PARAM8_ at Z-order: _PARAM9_":"\u5728\u5716\u5C64[_PARAM8_]\u7684Z\u9806\u5E8F:_PARAM9_\uFF0C\u5728top-left\u7684\u89D2\u843D\u5275\u5EFA_PARAM2_\u5217\u548C_PARAM3_\u884C\u7684_PARAM1_\uFF0C\u5217\u4E4B\u9593\u6709_PARAM5_\u500B\u50CF\u7D20\u884C\u4E4B\u9593\u6709_PARAM7_\u500B\u50CF\u7D20\u3002","Number of columns (default: 1)":"\u5217\u6578\uFF08\u9810\u8A2D\uFF1A1\uFF09","Number of rows (default: 1)":"\u884C\u6578\uFF08\u9810\u8A2D\uFF1A1\uFF09","Top-left starting position (X) (default: 0)":"top-left\u958B\u59CB\u4F4D\u7F6E\uFF08X\uFF09\uFF08\u9810\u8A2D\uFF1A0\uFF09","Top-left starting position (Y) (default: 0)":"top-left\u958B\u59CB\u4F4D\u7F6E\uFF08Y\uFF09\uFF08\u9810\u8A2D\uFF1A0\uFF09","Amount of space between columns (default: 0)":"\u5217\u4E4B\u9593\u7684\u7A7A\u9593\u6578\uFF08\u9810\u8A2D\uFF1A0\uFF09","Amount of space between rows (default: 0)":"\u884C\u4E4B\u9593\u7684\u7A7A\u9593\u6578\uFF08\u9810\u8A2D\uFF1A0\uFF09","Regular Expressions":"\u6B63\u5247\u8868\u9054\u5F0F","Functions for using regular expressions to manipulate strings.":"\u4F7F\u7528\u6B63\u5247\u8868\u9054\u5F0F\u64CD\u7E31\u5B57\u7B26\u4E32\u7684\u51FD\u6578\u3002","Checks if a string matches a regex pattern.":"\u6AA2\u67E5\u5B57\u7B26\u4E32\u662F\u5426\u8207\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u5339\u914D\u3002","String matches regex pattern":"\u5B57\u7B26\u4E32\u5339\u914D\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F","_PARAM3_ matches pattern _PARAM1_ (flags: _PARAM2_)":"_PARAM3_\u8207\u6A21\u5F0F_PARAM1_\u5339\u914D\uFF08\u6A19\u5FD7\uFF1A_PARAM2_\uFF09","The pattern to check for":"\u8981\u6AA2\u67E5\u7684\u6A21\u5F0F","RegEx flags":"\u6B63\u5247\u8868\u9054\u5F0F\u6A19\u8A8C","The string to check for a pattern":"\u8981\u6AA2\u67E5\u6A21\u5F0F\u7684\u5B57\u7B26\u4E32","Split a string by each part of it that matches a regex pattern and stores each part into an array.":"\u6309\u7167\u8207\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u5339\u914D\u7684\u5B57\u7B26\u4E32\u62C6\u5206\u5B57\u7B26\u4E32\u4E26\u5C07\u6BCF\u500B\u90E8\u5206\u5B58\u5132\u5230\u6578\u7D44\u4E2D\u3002","Split a string into an array":"\u5C07\u5B57\u7B26\u4E32\u62C6\u5206\u70BA\u6578\u7D44","Split string _PARAM3_ into array _PARAM4_ by pattern _PARAM1_ (flags: _PARAM2_)":"\u6309\u7167_PATTERN1_\uFF08\u6A19\u8A8C\uFF1A_PARAM2_\uFF09\u5C07\u5B57\u7B26\u4E32_PARAM3_\u62C6\u5206\u70BA\u6578\u7D44_PARAM4_","The pattern to split by":"\u5206\u9694\u6A21\u5F0F","The string to split by the pattern":"\u6309\u7167\u6A21\u5F0F\u62C6\u5206\u7684\u5B57\u7B26\u4E32","The name of the variable to store the result in":"\u5C07\u6240\u6709\u8207\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u5339\u914D\u7684\u5339\u914D\u9805\u69CB\u5EFA\u70BA\u6578\u7D44\u3002","Builds an array containing all matches for a regex pattern.":"\u67E5\u627E\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u7684\u6240\u6709\u5339\u914D\u9805","Find all matches for a regex pattern":"\u5C07_PATTERN1_\u8207\u6A21\u5F0F_PARAM1_\u7684\u6240\u6709\u5339\u914D\u9805\u5B58\u5132\u5728_PARAM4_\u4E2D\uFF08\u6A19\u5FD7\uFF1A_PARAM2_\uFF09","Store all matches of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"\u4F7F\u7528\u6A21\u5F0F_PARAM1_\u4E2D\u7684\u6240\u6709\u5339\u914D\u9805\u5B58\u5132\u5728_PARAM4_\u4E2D\uFF08\u6A19\u8A8C\uFF1A_PARAM2_\uFF09","Pattern":"\u6A21\u5F0F","String":"\u5B57\u7B26\u4E32","Builds an array containing the first match for a regex pattern followed by the regex groups.":"\u5EFA\u7ACB\u4E00\u500B\u5305\u542B\u7B2C\u4E00\u500B\u5339\u914D\u7684\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u53CA\u5176\u6B63\u5247\u8868\u9054\u5F0F\u7D44\u7684\u6578\u7D44\u3002","Find first match with groups for a regex pattern":"\u5C0B\u627E\u7B2C\u4E00\u500B\u5E36\u6709\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u7D44\u7684\u5339\u914D","Store first match and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"\u4F7F\u7528\u6A21\u5F0F_PARAM1_\u4E2D\u7684\u7B2C\u4E00\u500B\u5339\u914D\u53CA\u5176\u7D44_PARAM3_ (_PARAM3_\u7684\u6A19\u5FD7:_PARAM2_)\u5B58\u5132\u65BC_PARAM4_\u4E2D\u3002","Flags":"\u6A19\u5FD7","Variable name":"\u8B8A\u91CF\u540D\u7A31","Builds an array containing for each regex pattern match an array with the match followed by its regex groups.":"\u5EFA\u7ACB\u4E00\u500B\u5305\u542B\u6BCF\u500B\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u5339\u914D\u7684\u6578\u7D44\uFF0C\u6578\u7D44\u4E2D\u5305\u542B\u5339\u914D\u53CA\u5176\u6B63\u5247\u8868\u9054\u5F0F\u7D44\u3002","Find all matches with their groups for a regex pattern":"\u627E\u5230\u5E36\u6709\u5176\u7D44\u7684\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u7684\u6240\u6709\u5339\u914D","Store all matches and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"\u5B58\u5132_PARAM3_\u4E2D\u7684\u7B2C\u4E00\u500B\u5339\u914D\u53CA\u5176\u7D44_PARAM1_ (_PARAM3_\u7684\u6A19\u5FD7:_PARAM2_)\u5728_PARAM4_\u4E2D\u3002","Replaces a part of a string that matches a regex pattern with another string.":"\u5C07\u8207\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\u5339\u914D\u7684\u5B57\u7B26\u4E32\u90E8\u5206\u66FF\u63DB\u70BA\u53E6\u4E00\u500B\u5B57\u7B26\u4E32\u3002","Replace pattern matches with a string":"\u7528\u5B57\u7B26\u4E32\u66FF\u63DB\u6A21\u5F0F\u5339\u914D","Execute _PARAM1_ with the following _PARAM2_ for a match in _PARAM3_, and store the result in _PARAM4_":"\u5728_PARAM3_\u4E2D\u7684\u5339\u914D\u4E2D\u4F7F\u7528_PARAM1_\uFF0C\u4E26\u4F7F\u7528\u4EE5\u4E0B_PARAM2_\u5C07\u7D50\u679C\u5B58\u5132\u5728_PARAM4_\u4E2D\u3002","The string to search for pattern matches in":"\u8981\u5728\u5176\u4E2D\u641C\u7D22\u6A21\u5F0F\u5339\u914D\u7684\u5B57\u7B26\u4E32","The string to replace the matching patterns with":"\u7528\u65BC\u66FF\u63DB\u5339\u914D\u6A21\u5F0F\u7684\u5B57\u7B26\u4E32","Finds a regex pattern in a string, and returns the index of the position of the match, or -1 if it doesn't match the pattern.":"\u67E5\u627E\u5B57\u7B26\u4E32\u4E2D\u7684\u6B63\u5247\u8868\u9054\u5F0F\u6A21\u5F0F\uFF0C\u4E26\u8FD4\u56DE\u5339\u914D\u4F4D\u7F6E\u7684\u7D22\u5F15\uFF0C\u5982\u679C\u4E0D\u5339\u914D\u5247\u8FD4\u56DE-1\u3002","Find a pattern":"\u67E5\u627E\u4E00\u500B\u6A21\u5F0F","Sprite Snapshot":"\u7CBE\u9748\u5FEB\u7167","Renders an object, layer, scene or an area of a scene and puts the resulting image into a sprite.":"\u6E32\u67D3\u5C0D\u8C61\uFF0C\u5716\u5C64\uFF0C\u5834\u666F\u6216\u5834\u666F\u5340\u57DF\uFF0C\u4E26\u5C07\u751F\u6210\u7684\u5716\u50CF\u653E\u5165\u7CBE\u9748\u4E2D\u3002","Renders an object and puts the rendered image into a sprite object.":"\u6E32\u67D3\u4E00\u4E2A\u5BF9\u8C61\uFF0C\u5E76\u5C06\u6E32\u67D3\u540E\u7684\u56FE\u50CF\u653E\u5165\u7CBE\u7075\u5BF9\u8C61\u4E2D\u3002","Render an object into a sprite":"\u5C07\u5C0D\u8C61\u6E32\u67D3\u6210\u7CBE\u9748","Render _PARAM1_ into sprite _PARAM2_":"\u5C07_PARAM1_\u6E32\u67D3\u70BA\u7CBE\u9748_PARAM2_","The object to render":"\u8981\u88AB\u6E32\u67D3\u7684\u5C0D\u8C61","The sprite to render to":"\u8981\u6E32\u67D3\u7684\u7CBE\u9748","Renders a layer and puts the rendered image into a sprite object.":"\u6E32\u67D3\u4E00\u4E2A\u5C42\uFF0C\u5E76\u5C06\u6E32\u67D3\u540E\u7684\u56FE\u50CF\u653E\u5165\u7CBE\u7075\u5BF9\u8C61\u4E2D\u3002","Render a layer into a sprite":"\u5C07\u4E00\u500B\u5716\u5C64\u6E32\u67D3\u5230\u7CBE\u9748","Render layer _PARAM1_ into sprite _PARAM2_":"\u5C07\u5716\u5C64_PARAM1_\u6E32\u67D3\u5230\u7CBE\u9748_PARAM2_","The layer to render":"\u8981\u6E32\u67D3\u7684\u5716\u5C64","Renders a scene and puts the rendered image into a sprite object.":"\u5C07\u4E00\u500B\u5834\u666F\u6E32\u67D3\u5230\u7CBE\u9748","Render a scene into a sprite":"\u5C07\u7576\u524D\u5834\u666F\u6E32\u67D3\u5230\u7CBE\u9748_PARAM1_","Render the current scene into sprite _PARAM1_":"\u5C07\u5834\u666F\u7684\u6307\u5B9A\u5340\u57DF\u6E32\u67D3\u5230\u7CBE\u9748","Renders a defined area of a scene and puts the rendered image into a sprite object.":"\u6E32\u67D3\u5834\u666F\u4E2D\u7684\u4E00\u500B\u6307\u5B9A\u5340\u57DF\u4E26\u5C07\u6E32\u67D3\u7684\u5716\u50CF\u653E\u5165\u7CBE\u9748\u5C0D\u8C61\u3002","Render an area of a scene into a sprite":"\u5728\u7CBE\u9748\u4E2D\u6E32\u67D3\u5834\u666F\u7684\u5340\u57DF","Render the area of a current scene into Sprite: _PARAM1_, from OriginX: _PARAM2_, OriginY: _PARAM3_, with Width: _PARAM4_, Height: _PARAM5_":"\u5C07\u7576\u524D\u5834\u666F\u7684\u5340\u57DF\u6E32\u67D3\u5230\u7CBE\u9748\uFF1A_PARAM1_\uFF0C\u5F9EOriginX\uFF1A_PARAM2_\uFF0COriginY\uFF1A_PARAM3_\uFF0C\u5BEC\u5EA6\uFF1A_PARAM4_\uFF0C\u9AD8\u5EA6\uFF1A_PARAM5_","Origin X position of the render area":"\u6E32\u67D3\u5340\u57DF\u7684\u539F\u9EDEX\u4F4D\u7F6E","Origin Y Position of the render area":"\u6E32\u67D3\u5340\u57DF\u7684\u539F\u9EDEY\u4F4D\u7F6E","Width of the are to render":"\u8981\u6E32\u67D3\u7684\u5340\u57DF\u5BEC\u5EA6","Height of the area to render":"\u8981\u6E32\u67D3\u7684\u5340\u57DF\u9AD8\u5EA6","Repeat every X seconds":"\u6BCFX\u79D2\u91CD\u8907\u4E00\u6B21","Trigger an event every X seconds.":"\u6BCFX\u79D2\u89F8\u767C\u4E00\u500B\u4E8B\u4EF6\u3002","Triggers every X seconds.":"\u6BCF\u9694X\u79D2\u89F8\u767C\u4E00\u6B21\u3002","Repeat with a scene timer":"\u4F7F\u7528\u5834\u666F\u8A08\u6642\u5668\u91CD\u8907","Repeat every _PARAM2_ seconds using timer _PARAM1_":"\u4F7F\u7528\u8A08\u6642\u5668_PARAM1_\u6BCF\u9694_PARAM2_\u79D2\u91CD\u8907\u3002","Timer name used to loop":"\u7528\u65BC\u5FAA\u74B0\u7684\u8A08\u6642\u5668\u540D\u7A31","Duration in seconds between each repetition":"\u6BCF\u6B21\u91CD\u8907\u9593\u9694\u7684\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09","the number of times the timer has repeated.":"\u8A08\u6642\u5668\u91CD\u8907\u7684\u6B21\u6578\u3002","Repetition number of a scene timer":"\u5834\u666F\u8A08\u6642\u5668\u91CD\u8907\u6B21\u6578","Repetition number of timer _PARAM1_":"\u8A08\u6642\u5668_PARAM1_\u7684\u91CD\u8907\u6B21\u6578","Triggers every X seconds X amount of times.":"\u6BCF\u9694X\u79D2\u89F8\u767CX\u6B21\u3002","Repeat with a scene timer X times":"\u4F7F\u7528\u5834\u666F\u8A08\u6642\u5668\u91CD\u8907X\u6B21","Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_":"\u4F7F\u7528\u8A08\u6642\u5668_PARAM1_\u6BCF\u9694_PARAM2_\u79D2\u91CD\u8907_PARAM3_\u6B21","The limit of loops":"\u5FAA\u74B0\u9650\u5236","Maximum nuber of repetition (-1 to repeat forever).":"\u91CD\u8907\u6B21\u6578\u4E0A\u9650\uFF08-1\u70BA\u7121\u9650\u91CD\u8907\uFF09","Reset repetition count of a scene timer.":"\u91CD\u7F6E\u5834\u666F\u8A08\u6642\u5668\u7684\u91CD\u8907\u6B21\u6578","Reset repetition count of a scene timer":"\u91CD\u7F6E\u5834\u666F\u8A08\u6642\u5668\u7684\u91CD\u8907\u6B21\u6578","Reset repetition count for timer _PARAM1_":"\u91CD\u7F6E\u8A08\u6642\u5668_PARAM1_\u7684\u91CD\u8907\u6B21\u6578","Allows to repeat an object timer every X seconds.":"\u5141\u8A31\u6BCF\u9694X\u79D2\u91CD\u8907\u4E00\u500B\u7269\u4EF6\u8A08\u6642\u5668","The name of the timer to repeat":"\u91CD\u8907\u7684\u8A08\u6642\u5668\u540D\u7A31","The time between each trigger (in seconds)":"\u6BCF\u6B21\u89F8\u767C\u4E4B\u9593\u7684\u6642\u9593\uFF08\u79D2\uFF09","How many times should the timer trigger? -1 for forever.":"\u8A08\u6642\u5668\u61C9\u8A72\u89F8\u767C\u591A\u5C11\u6B21\uFF1F-1\u8868\u793A\u7121\u9650\u6B21\u3002","An internal counter":"\u5167\u90E8\u8A08\u6578\u5668","Repeat with an object timer":"\u4F7F\u7528\u7269\u9AD4\u8A08\u6642\u5668\u91CD\u8907","Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_":"\u4F7F\u7528 _PARAM0_ \u7684\u8A08\u6642\u5668 _PARAM2_ \u6BCF\u9694 _PARAM3_ \u79D2\u91CD\u8907","Repetition number of an object timer":"\u7269\u9AD4\u8A08\u6642\u5668\u7684\u91CD\u8907\u6B21\u6578","Repetition number of timer _PARAM2_":"\u8A08\u6642\u5668 _PARAM2_ \u7684\u91CD\u8907\u6B21\u6578","Repeat with an object timer X times":"\u4F7F\u7528\u7269\u9AD4\u8A08\u6642\u5668\u91CD\u8907X\u6B21","Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_":"\u4F7F\u7528\u8A08\u6642\u5668_PARAM2_ of _PARAM0_ \u6BCF_PARAM3_\u79D2\u91CD\u8907_PARAM4_\u6B21","Reset repetition count of an object timer.":"\u91CD\u7F6E\u7269\u9AD4\u8A08\u6642\u5668\u7684\u91CD\u8907\u6B21\u6578\u3002","Reset repetition count of an object timer":"\u91CD\u7F6E\u7269\u9AD4\u8A08\u6642\u5668\u7684\u91CD\u8907\u6B21\u6578","Reset repetition count for timer _PARAM2_ of _PARAM0_":"\u91CD\u7F6E_PARAM0_\u7684\u8A08\u6642\u5668_PARAM2_\u7684\u91CD\u8907\u6B21\u6578","Triggers every X seconds, where X is defined in the behavior properties.":"\u6BCFX\u79D2\u89F8\u767C\u4E00\u6B21\uFF0C\u5176\u4E2DX\u662F\u5728\u884C\u70BA\u5C6C\u6027\u4E2D\u5B9A\u7FA9\u7684\u3002","Repeat every X seconds (deprecated)":"\u6BCFX\u79D2\u91CD\u8907\uFF08\u5DF2\u68C4\u7528\uFF09","Recurring timer _PARAM1_ of _PARAM0_ has triggered":"\u5DF2\u89F8\u767C_PARAM0_\u7684\u5FAA\u74B0\u8A08\u6642\u5668_PARAM1_","Pauses a recurring timer.":"\u66AB\u505C\u5FAA\u74B0\u8A08\u6642\u5668\u3002","Pause a recurring timer (deprecated)":"\u66AB\u505C\u5FAA\u74B0\u8A08\u6642\u5668\uFF08\u5DF2\u68C4\u7528\uFF09","Pause recurring timer _PARAM1_ of _PARAM0_":"\u66AB\u505C_PARAM0_\u7684\u5FAA\u74B0\u8A08\u6642\u5668_PARAM1_","Resumes a paused recurring timer.":"\u6062\u5FA9\u66AB\u505C\u7684\u5FAA\u74B0\u8A08\u6642\u5668\u3002","Resume a recurring timer (deprecated)":"\u6062\u5FA9\u5FAA\u74B0\u8A08\u6642\u5668\uFF08\u5DF2\u68C4\u7528\uFF09","Resume recurring timer _PARAM1_ of _PARAM0_":"\u6062\u5FA9_PARAM0_\u7684\u5FAA\u74B0\u8A08\u6642\u5668_PARAM1_","Allows to trigger the recurring timer X times again.":"\u5141\u8A31\u518D\u6B21\u89F8\u767C\u5FAA\u74B0\u8A08\u6642\u5668X\u6B21\u3002","Reset the limit (deprecated)":"\u91CD\u7F6E\u4E0A\u9650\uFF08\u5DF2\u68C4\u7528\uFF09","Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again":"\u5141\u8A31\u518D\u6B21\u89F8\u767C_PARAM1_\u7684\u5FAA\u74B0\u8A08\u6642\u5668_PARAM0_X\u6B21\u3002","Rolling counter":"\u6EFE\u52D5\u8A08\u6578\u5668","Smoothly change a counter value in a text object.":"\u5E73\u6ED1\u5730\u66F4\u6539\u6587\u672C\u5C0D\u8C61\u4E2D\u7684\u8A08\u6578\u5668\u503C\u3002","Smoothly changes a counter value in a text object.":"\u5728\u6587\u672C\u5C0D\u8C61\u4E2D\u5E73\u6ED1\u66F4\u6539\u8A08\u6578\u5668\u503C\u3002","Animation duration":"\u52D5\u756B\u6301\u7E8C\u6642\u9593","Increment":"\u589E\u91CF","the value of the counter.":"\u8A08\u6578\u5668\u7684\u6578\u503C\u3002","Counter value":"\u8A08\u6578\u5668\u6578\u503C","the counter value":"\u8A08\u6578\u5668\u6578\u503C","Directly display the counter value without playing the animation.":"\u76F4\u63A5\u986F\u793A\u8A08\u6578\u5668\u6578\u503C\uFF0C\u800C\u4E0D\u64AD\u653E\u52D5\u756B\u3002","Jump to the counter animation end":"\u8DF3\u8F49\u5230\u8A08\u6578\u5668\u52D5\u756B\u7D50\u675F","Jump to the counter animation end of _PARAM0_":"\u8DF3\u8F49\u5230 _PARAM0_ \u7684\u8A08\u6578\u5668\u52D5\u756B\u7D50\u675F","Room-based camera movement":"\u57FA\u65BC\u623F\u9593\u7684\u651D\u50CF\u6A5F\u904B\u52D5","Move and zoom camera to the room object that contains the trigger object (usually the player).":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u4E26\u7E2E\u653E\u5230\u5305\u542B\u89F8\u767C\u5C0D\u8C61\uFF08\u901A\u5E38\u662F\u73A9\u5BB6\uFF09\u7684\u623F\u9593\u5C0D\u8C61\u3002","Move and zoom camera to the room object that contains the trigger object (player)":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u4E26\u7E2E\u653E\u5230\u5305\u542B\u89F8\u767C\u5C0D\u8C61\uFF08\u73A9\u5BB6\uFF09\u7684\u623F\u9593\u5C0D\u8C61\u4E2D","Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)":"\u5C07\u651D\u5F71\u6A5F\u79FB\u52D5\u5230\u5305\u542B\u89F8\u767C\u5668\u7269\u4EF6_PARAM2_\u7684\u623F\u9593\u7269\u4EF6_PARAM1_\uFF08\u5C64\uFF1A_PARAM3_\uFF0C\u63D2\u503C\u901F\u5EA6\uFF1A_PARAM4_\uFF0C\u6700\u5927\u7E2E\u653E\uFF1A_PARAM5_\uFF0C\u6700\u5C0F\u7E2E\u653E\uFF1A_PARAM6_\uFF0C\u908A\u754C\u7DE9\u885D\uFF1A_PARAM7_px\uFF09","Room object":"\u623F\u9593\u5C0D\u8C61","Room objects are used to mark areas that should be seen by the camera.":"\u623F\u9593\u7269\u4EF6\u7528\u65BC\u6A19\u8A18\u651D\u5F71\u6A5F\u61C9\u8A72\u770B\u5230\u7684\u5340\u57DF\u3002","Trigger object (player)":"\u89F8\u767C\u5668\u7269\u4EF6\uFF08\u73A9\u5BB6\uFF09","When the Trigger Object touches a new Room Object, the camera will move to the new room":"\u7576\u89F8\u767C\u5668\u7269\u4EF6\u89F8\u6478\u5230\u65B0\u7684\u623F\u9593\u7269\u4EF6\u6642\uFF0C\u651D\u5F71\u6A5F\u5C07\u79FB\u52D5\u5230\u65B0\u7684\u623F\u9593\u3002","Lerp speed":"\u63D2\u503C\u901F\u5EA6","Range: 0 to 1":"\u7BC4\u570D\uFF1A0\u81F31","Maximum zoom":"\u6700\u5927\u7E2E\u653E","Minimum zoom":"\u6700\u5C0F\u7E2E\u653E","Outside buffer (pixels)":"\u5916\u90E8\u7DE9\u885D\uFF08\u50CF\u7D20\uFF09","Minimum extra space displayed around each side the room":"\u5728\u6BCF\u500B\u623F\u9593\u7684\u6BCF\u4E00\u5074\u986F\u793A\u7684\u6700\u5C0F\u984D\u5916\u7A7A\u9593","Check if trigger object (usually the player) has entered a new room on this frame.":"\u6AA2\u67E5\u89F8\u767C\u5668\u7269\u4EF6\uFF08\u901A\u5E38\u662F\u73A9\u5BB6\uFF09\u662F\u5426\u5728\u6B64\u5E40\u4E2D\u9032\u5165\u4E86\u65B0\u7684\u623F\u9593\u3002","Check if trigger object (player) has entered a new room":"\u6AA2\u67E5\u89F8\u767C\u5668\u7269\u4EF6\uFF08\u73A9\u5BB6\uFF09\u662F\u5426\u9032\u5165\u4E86\u65B0\u7684\u623F\u9593","_PARAM1_ has just entered a new room":"_PARAM1_\u525B\u9032\u5165\u4E86\u65B0\u7684\u623F\u9593","Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).":"\u6AA2\u67E5\u651D\u5F71\u6A5F\u662F\u5426\u6B63\u5728\u7E2E\u653E\uFF08\u9700\u8981\u5728\u6B64\u64F4\u5C55\u4E2D\u4F7F\u7528\"\u79FB\u52D5\u548C\u7E2E\u653E\u651D\u5F71\u6A5F\"\u64CD\u4F5C\uFF09\u3002","Check if camera is zooming":"\u6AA2\u67E5\u651D\u5F71\u6A5F\u662F\u5426\u6B63\u5728\u7E2E\u653E","Camera is zooming":"\u651D\u5F71\u6A5F\u6B63\u5728\u7E2E\u653E","Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).":"\u6AA2\u67E5\u651D\u5F71\u6A5F\u662F\u5426\u6B63\u5728\u79FB\u52D5\uFF08\u9700\u8981\u5728\u6B64\u64F4\u5C55\u4E2D\u4F7F\u7528\"\u79FB\u52D5\u548C\u7E2E\u653E\u651D\u5F71\u6A5F\"\u64CD\u4F5C\uFF09\u3002","Check if camera is moving":"\u6AA2\u67E5\u651D\u5F71\u6A5F\u662F\u5426\u6B63\u5728\u79FB\u52D5","Camera is moving":"\u651D\u5F71\u6A5F\u6B63\u5728\u79FB\u52D5","Animated Score Counter":"\u5E36\u6709\u52D5\u756B\u7684\u5206\u6578\u8A08\u6578\u5668","An animated score counter with an icon and a customisable font.":"\u5177\u6709\u5716\u6A19\u548C\u53EF\u81EA\u5B9A\u7FA9\u5B57\u9AD4\u7684\u5E36\u6709\u52D5\u756B\u7684\u5206\u6578\u8A08\u6578\u5668\u3002","Shake objects with translation, rotation and scale.":"\u5177\u6709\u5E73\u79FB\uFF0C\u65CB\u8F49\u548C\u6BD4\u4F8B\u7684\u6416\u52D5\u7269\u4EF6\u3002","Shake object (position, angle, scale)":"\u6416\u52D5\u7269\u4EF6\uFF08\u4F4D\u7F6E\uFF0C\u65CB\u8F49\uFF0C\u6BD4\u4F8B\uFF09","Shake an object, using one or more ways to shake (position, angle, scale). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"\u9707\u52D5\u7269\u9AD4\uFF0C\u4F7F\u7528\u4E00\u7A2E\u6216\u591A\u7A2E\u65B9\u5F0F\u9032\u884C\u9707\u52D5\uFF08\u4F4D\u7F6E\u3001\u89D2\u5EA6\u3001\u6BD4\u4F8B\uFF09\u3002\u78BA\u4FDD\u5728\u958B\u59CB\u65B0\u7684\u9707\u52D5\u524D\u201C\u505C\u6B62\u9707\u52D5\u201D\uFF0C\u5982\u679C\u5B83\u4F7F\u7528\u4E0D\u540C\u7684\u53C3\u6578\u3002","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_":"\u7269\u9AD4 _PARAM0_ \u9707\u52D5 _PARAM2_ \u79D2\u3002\u4FEE\u6539X\u8EF8\u4E0A\u7684\u4F4D\u7F6E\u632F\u5E45 _PARAM3_\uFF0CY\u8EF8\u4E0A\u7684\u4F4D\u7F6E\u632F\u5E45 _PARAM4_\uFF0C\u89D2\u5EA6\u65CB\u8F49\u632F\u5E45 _PARAM5_\uFF0C\u6BD4\u4F8B\u632F\u5E45 _PARAM6_\u3002\u9707\u52D5\u9593\u9593\u9694 _PARAM7_ \u79D2\u3002\u6301\u7E8C\u9707\u52D5\u76F4\u5230\u505C\u6B62\uFF1A_PARAM8_","Duration of shake (in seconds) (Default: 0.5)":"\u9707\u52D5\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09\uFF08\u9ED8\u8A8D\u503C\uFF1A0.5\uFF09","Amplitude of postion shake in X direction (in pixels) (For example: 5)":"X\u65B9\u5411\u4F4D\u7F6E\u9707\u52D5\u632F\u5E45\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\uFF08\u4F8B\u5982\uFF1A5\uFF09","Amplitude of position shake in Y direction (in pixels) (For example: 5)":"Y\u65B9\u5411\u4F4D\u7F6E\u9707\u52D5\u632F\u5E45\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\uFF08\u4F8B\u5982\uFF1A5\uFF09","Use a negative number to make the single-shake move in the opposite direction.":"\u4F7F\u7528\u8CA0\u6578\u4F7F\u55AE\u6B21\u9707\u52D5\u5411\u76F8\u53CD\u65B9\u5411\u79FB\u52D5\u3002","Amplitude of angle rotation shake (in degrees) (For example: 5)":"\u89D2\u5EA6\u65CB\u8F49\u9707\u52D5\u632F\u5E45\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09\uFF08\u4F8B\u5982\uFF1A5\uFF09","Amplitude of scale shake (in percent change) (For example: 5)":"\u6BD4\u4F8B\u9707\u52D5\u632F\u5E45\uFF08\u4EE5\u767E\u5206\u6BD4\u8B8A\u5316\uFF09\uFF08\u4F8B\u5982\uFF1A5\uFF09","Amount of time between shakes (in seconds) (Default: 0.08)":"\u9707\u52D5\u9593\u9593\u9694\u6642\u9593\uFF08\u79D2\uFF09\uFF08\u9ED8\u8A8D\uFF1A0.08\uFF09","For a single-shake effect, set it to the same value as \"Duration\".":"\u5C0D\u65BC\u55AE\u6B21\u9707\u52D5\u6548\u679C\uFF0C\u5C07\u5176\u8A2D\u7F6E\u70BA\u201C\u6301\u7E8C\u6642\u9593\u201D\u7684\u76F8\u540C\u503C\u3002","Stop shaking an object.":"\u505C\u6B62\u9707\u52D5\u7269\u9AD4\u3002","Stop shaking an object":"\u505C\u6B62\u9707\u52D5\u7269\u9AD4","Stop shaking _PARAM0_":"\u505C\u6B62\u6416\u52D5 _PARAM0_","Check if an object is shaking.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5728\u6416\u52D5\u3002","Check if an object is shaking":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5728\u6416\u52D5","_PARAM0_ is shaking":"_PARAM0_ \u6B63\u5728\u6416\u52D5","Default score":"\u9ED8\u8A8D\u5206\u6578","Increasing score sound":"\u589E\u52A0\u5206\u6578\u8072\u97F3","Sound":"\u8072\u97F3","Min baseline pitch":"\u6700\u5C0F\u57FA\u6E96\u97F3\u9AD8","Max baseline pitch":"\u6700\u5927\u57FA\u6E96\u97F3\u9AD8","Pitch factor":"\u97F3\u8ABF\u56E0\u5B50","Pitch reset timeout":"\u97F3\u8ABF\u91CD\u7F6E\u8D85\u6642","Current pitch":"\u7576\u524D\u97F3\u8ABF","the score of the object.":"\u7269\u9AD4\u7684\u5206\u6578\u3002","Reset the pitch to the baseline value.":"\u5C07\u97F3\u8ABF\u91CD\u7F6E\u70BA\u57FA\u7DDA\u503C\u3002","Reset pitch":"\u91CD\u7F6E\u97F3\u8ABF","Reset the pitch of _PARAM0_":"\u91CD\u7F6E_PARAM0_\u7684\u97F3\u8ABF","Screen wrap":"\u5C4F\u5E55\u5305\u88F9","Teleport object when it moves off the screen and immediately appear on the opposite side while maintaining speed and trajectory.":"\u7269\u9AD4\u5728\u756B\u9762\u5916\u79FB\u52D5\u6642\u9032\u884C\u50B3\u9001\uFF0C\u4E26\u7ACB\u5373\u51FA\u73FE\u5728\u5C0D\u9762\uFF0C\u540C\u6642\u4FDD\u6301\u901F\u5EA6\u548C\u8ECC\u8DE1\u3002","Teleport the object when leaving one side of the screen so that it immediately reappears on the opposite side, maintaining speed and trajectory.":"\u96E2\u958B\u5C4F\u5E55\u4E00\u5074\u6642\u7ACB\u5373\u5728\u5C0D\u7ACB\u5074\u91CD\u65B0\u51FA\u73FE\u7269\u4EF6\uFF0C\u4FDD\u6301\u901F\u5EA6\u548C\u8ECC\u8DE1\u3002","Screen Wrap":"\u756B\u9762\u7FFB\u8F49","Horizontal wrapping":"\u6C34\u5E73\u7FFB\u8F49","Vertical wrapping":"\u5782\u76F4\u7FFB\u8F49","Top border of wrapped area (Y)":"\u5305\u88F9\u5340\u57DF\u7684\u9802\u90E8\u908A\u754C\uFF08Y\uFF09","Left border of wrapped area (X)":"\u5305\u88F9\u5340\u57DF\u7684\u5DE6\u908A\u754C\uFF08X\uFF09","Right border of wrapped area (X)":"\u5305\u88F9\u5340\u57DF\u7684\u53F3\u908A\u754C\uFF08X\uFF09","If blank, the value will be the scene width.":"\u5982\u679C\u70BA\u7A7A\uFF0C\u5247\u503C\u5C07\u662F\u5834\u666F\u5BEC\u5EA6\u3002","Bottom border of wrapped area (Y)":"\u5305\u88F9\u5340\u57DF\u5E95\u90E8\uFF08Y\uFF09\u7684\u5E95\u90E8\u908A\u7DDA","If blank, the value will be scene height.":"\u5982\u679C\u70BA\u7A7A\uFF0C\u503C\u5C07\u662F\u5834\u666F\u9AD8\u5EA6\u3002","Number of pixels past the center where the object teleports and appears":"\u7269\u9AD4\u50B3\u9001\u548C\u51FA\u73FE\u6642\u8D85\u51FA\u4E2D\u5FC3\u7684\u50CF\u7D20\u6578","Check if the object is wrapping on the left and right borders.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5728\u5DE6\u53F3\u908A\u754C\u4E0A\u6A19\u8A18\u3002","Is horizontal wrapping":"\u662F\u5426\u6C34\u5E73\u6A19\u8A18","_PARAM0_ is horizontal wrapping":"_PARAM0_ \u5728\u6C34\u5E73\u6A19\u8A18","Check if the object is wrapping on the top and bottom borders.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5728\u4E0A\u4E0B\u908A\u754C\u4E0A\u6A19\u8A18\u3002","Is vertical wrapping":"\u662F\u5426\u5782\u76F4\u6A19\u8A18","_PARAM0_ is vertical wrapping":"_PARAM0_ \u5728\u5782\u76F4\u6A19\u8A18","Enable wrapping on the left and right borders.":"\u555F\u7528\u5DE6\u53F3\u908A\u754C\u4E0A\u7684\u6A19\u8A18\u3002","Enable horizontal wrapping":"\u555F\u7528\u6C34\u5E73\u6A19\u8A18","Enable _PARAM0_ horizontal wrapping: _PARAM2_":"\u555F\u7528 _PARAM0_ \u6C34\u5E73\u6A19\u8A18\uFF1A_PARAM2_","Enable wrapping on the top and bottom borders.":"\u555F\u7528\u4E0A\u4E0B\u908A\u754C\u4E0A\u7684\u6A19\u8A18\u3002","Enable vertical wrapping":"\u555F\u7528\u5782\u76F4\u6A19\u8A18","Enable _PARAM0_ vertical wrapping: _PARAM2_":"\u555F\u7528_PARAM0_\u5782\u76F4\u6A19\u8A18\uFF1A_PARAM2_","Top border (Y position).":"\u4E0A\u908A\u754C\uFF08Y\u4F4D\u7F6E\uFF09\u3002","Top border":"\u4E0A\u908A\u754C","Left border (X position).":"\u5DE6\u908A\u754C\uFF08X\u4F4D\u7F6E\uFF09\u3002","Left border":"\u5DE6\u908A\u754C","Right border (X position).":"\u53F3\u908A\u754C\uFF08X\u4F4D\u7F6E\uFF09\u3002","Right border":"\u53F3\u908A\u754C","Bottom border (Y position).":"\u4E0B\u908A\u754C\uFF08Y\u4F4D\u7F6E\uFF09\u3002","Bottom border":"\u4E0B\u908A\u754C","Number of pixels past the center where the object teleports and appears.":"\u7269\u9AD4\u50B3\u9001\u548C\u51FA\u73FE\u7684\u4E2D\u5FC3\u904E\u53BB\u7684\u50CF\u7D20\u6578\u3002","Trigger offset":"\u89F8\u767C\u504F\u79FB","Set top border (Y position).":"\u8A2D\u7F6E\u4E0A\u908A\u754C\uFF08Y\u4F4D\u7F6E\uFF09\u3002","Set top border":"\u8A2D\u7F6E\u4E0A\u908A\u754C","Set _PARAM0_ top border to _PARAM2_":"\u8A2D\u7F6E_PARAM0_\u4E0A\u908A\u754C\u70BA_PARAM2_","Top border value":"\u4E0A\u908A\u754C\u503C","Set left border (X position).":"\u8A2D\u7F6E\u5DE6\u908A\u754C\uFF08X\u4F4D\u7F6E\uFF09\u3002","Set left border":"\u8A2D\u7F6E\u5DE6\u908A\u754C","Set _PARAM0_ left border to _PARAM2_":"\u5C07_PARAM0_\u7684\u5DE6\u908A\u6846\u8A2D\u7F6E\u70BA_PARAM2_","Left border value":"\u5DE6\u908A\u754C\u503C","Set bottom border (Y position).":"\u8A2D\u7F6E\u5E95\u90E8\u908A\u754C\uFF08Y\u4F4D\u7F6E\uFF09\u3002","Set bottom border":"\u8A2D\u7F6E\u5E95\u90E8\u908A\u754C","Set _PARAM0_ bottom border to _PARAM2_":"\u5C07_PARAM0_\u7684\u5E95\u90E8\u908A\u754C\u8A2D\u7F6E\u70BA_PARAM2_","Bottom border value":"\u5E95\u90E8\u908A\u754C\u503C","Set right border (X position).":"\u8A2D\u7F6E\u53F3\u908A\u754C\uFF08X\u4F4D\u7F6E\uFF09\u3002","Set right border":"\u8A2D\u7F6E\u53F3\u908A\u754C","Set _PARAM0_ right border to _PARAM2_":"\u5C07_PARAM0_\u7684\u53F3\u908A\u754C\u8A2D\u7F6E\u70BA_PARAM2_","Right border value":"\u53F3\u908A\u754C\u503C","Set trigger offset (pixels).":"\u8A2D\u7F6E\u89F8\u767C\u504F\u79FB\uFF08\u50CF\u7D20\uFF09\u3002","Set trigger offset":"\u8A2D\u7F6E\u89F8\u767C\u504F\u79FB","Set _PARAM0_ trigger offset to _PARAM2_ pixels":"\u8A2D\u7F6E_PARAM0_\u89F8\u767C\u504F\u79FB\u70BA_PARAM2_\u50CF\u7D20","SetScreen Offset Leaving Value":"\u8A2D\u7F6E\u87A2\u5E55\u504F\u79FB\u96E2\u958B\u503C","Screen Wrap (physics objects)":"\u5C4F\u5E55\u5305\u88F9\uFF08\u7269\u7406\u7269\u9AD4\uFF09","Angular Velocity":"\u89D2\u901F\u5EA6","Linear Velocity X":"\u7DDA\u6027\u901F\u5EA6 X","Linear Velocity Y":"\u7DDA\u6027\u901F\u5EA6 Y","Save current velocity values.":"\u4FDD\u5B58\u7576\u524D\u901F\u5EA6\u503C\u3002","Save current velocity values":"\u4FDD\u5B58\u7576\u524D\u901F\u5EA6\u503C","Save current velocity values of _PARAM0_":"\u4FDD\u5B58_PARAM0_\u7684\u7576\u524D\u901F\u5EA6\u503C","Apply saved velocity values.":"\u61C9\u7528\u4FDD\u5B58\u7684\u901F\u5EA6\u503C\u3002","Apply saved velocity values":"\u61C9\u7528\u4FDD\u5B58\u7684\u901F\u5EA6\u503C","Apply saved velocity values of _PARAM0_":"\u61C9\u7528_PARAM0_\u7684\u4FDD\u5B58\u901F\u5EA6\u503C","Animate Shadow Clones":"\u52D5\u756B\u5F71\u5B50\u514B\u9686","Create and animate shadow clones that follow the path of a primary object.":"\u5275\u5EFA\u4E26\u52D5\u756B\u5F71\u5B50\u514B\u9686\uFF0C\u5176\u5C07\u6CBF\u8457\u4E3B\u8981\u7269\u9AD4\u7684\u8DEF\u5F91\u79FB\u52D5\u3002","Select the primary object, the shadow clone object, the number of shadow clones, the number of frames between shadow clones, the rate that shadow clones will fade away (if desired), the Z-value of the shadow clones, and the layer the shadow clones will be created on.":"\u9078\u64C7\u4E3B\u8981\u7269\u9AD4\u3001\u9670\u5F71\u514B\u9686\u7269\u9AD4\u3001\u9670\u5F71\u514B\u9686\u7684\u6578\u91CF\u3001\u9670\u5F71\u514B\u9686\u4E4B\u9593\u7684\u5E40\u6578\u3001\u5F71\u5B50\u514B\u9686\u6D88\u5931\u7684\u901F\u7387\uFF08\u5982\u679C\u9700\u8981\uFF09\u3001\u5F71\u5B50\u514B\u9686\u7684 Z \u503C\u548C\u5C07\u5275\u5EFA\u5F71\u5B50\u514B\u9686\u7684\u5716\u5C64\u3002","Animate shadow clones that follow the path of a primary object":"\u52D5\u756B\u986F\u793A\u8DDF\u96A8\u4E3B\u8981\u7269\u9AD4\u8DEF\u5F91\u7684\u5F71\u5B50\u514B\u9686","Create and animate _PARAM3_ copies of _PARAM2_ that follow the position of _PARAM1_, with _PARAM4_ empty frames between shadow clones, and fading the opacity of shadow clones by _PARAM5_ per clone. Shrink scale of shadow clones by _PARAM6_ per clone. Shadow clones will be created on _PARAM7_ layer with a Z-value of _PARAM8_. Match X scale: _PARAM9_ Match Y scale: _PARAM10_ Match angle: _PARAM11_ Match animation: _PARAM12_ Match animation frame: _PARAM13_ Match vertical flip: _PARAM14_ Match horizontal flip: _PARAM15_":"\u5275\u5EFA\u548C\u52D5\u756B_PARAM3_\u500B_PARAM2_\u7684\u526F\u672C\uFF0C\u8DDF\u96A8_PARAM1_\u7684\u4F4D\u7F6E\uFF0C\u9670\u5F71\u514B\u9686\u4E4B\u9593\u6709_PARAM4_\u500B\u7A7A\u5E40\uFF0C\u4E26\u4E14\u5C07\u9670\u5F71\u514B\u9686\u7684\u4E0D\u900F\u660E\u5EA6\u6BCF\u500B\u514B\u9686\u964D\u4F4E_PARAM5_\u3002\u6BCF\u500B\u514B\u9686\u7684\u7E2E\u5C0F\u6BD4\u4F8B\u70BA_PARAM6_\u3002\u9670\u5F71\u514B\u9686\u5C07\u5728_PARAM7_\u5C64\u4E0A\u4EE5_PARAM8_\u7684Z\u503C\u5275\u5EFA\u3002 \u5339\u914DX\u8EF8\u6BD4\u4F8B\uFF1A_PARAM9_ \u5339\u914DY\u8EF8\u6BD4\u4F8B\uFF1A_PARAM10_ \u5339\u914D\u89D2\u5EA6\uFF1A_PARAM11_ \u5339\u914D\u52D5\u756B\uFF1A_PARAM12_ \u5339\u914D\u52D5\u756B\u5E40\uFF1A_PARAM13_ \u5339\u914D\u5782\u76F4\u7FFB\u8F49\uFF1A_PARAM14_ \u5339\u914D\u6C34\u5E73\u7FFB\u8F49\uFF1A_PARAM15_","Object that shadow clones will follow":"\u5F71\u5B50\u514B\u9686\u5C07\u8DDF\u96A8\u7684\u7269\u9AD4","Shadows clones will be made of this object (Cannot be the same object used for primary object)":"\u5F71\u5B50\u514B\u9686\u5C07\u7531\u6B64\u7269\u9AD4\u88FD\u6210\uFF08\u4E0D\u53EF\u8207\u4E3B\u8981\u7269\u9AD4\u76F8\u540C\uFF09","Number of shadow clones (Default: 1)":"\u5F71\u5B50\u514B\u9686\u7684\u6578\u91CF\uFF08\u9ED8\u8A8D\uFF1A1\uFF09","Number of empty frames between shadow clones (Default: 1)":"\u5F71\u5B50\u514B\u9686\u4E4B\u9593\u7684\u7A7A\u5E40\u6578\uFF08\u9ED8\u8A8D\uFF1A1\uFF09","Fade speed (Range: 0 to 255) (Default: 0)":"\u6DE1\u51FA\u901F\u5EA6\uFF08\u7BC4\u570D\uFF1A0\u81F3255\uFF09\uFF08\u9ED8\u8A8D\u503C\uFF1A0\uFF09","Decrease in opacity for each consecutive shadow clone":"\u6BCF\u500B\u9023\u7E8C\u9670\u5F71\u514B\u9686\u4E4B\u9593\u7684\u4E0D\u900F\u660E\u5EA6\u964D\u4F4E","Shrink speed (Range: 0 to 100) (Default: 0)":"\u7E2E\u5C0F\u901F\u5EA6\uFF08\u7BC4\u570D\uFF1A0\u81F3100\uFF09\uFF08\u9ED8\u8A8D\u503C\uFF1A0\uFF09","Decrease in scale for each consecutive shadow clone":"\u5C0D\u65BC\u6BCF\u500B\u9023\u7E8C\u9670\u5F71\u514B\u9686\u7684\u4E0D\u900F\u660E\u5EA6\u6E1B\u5C11","Shadow clones will be created on this layer. (Default: \"\") (Base Layer)":"\u9670\u5F71\u514B\u9686\u5C07\u5728\u6B64\u5C64\u4E0A\u5275\u5EFA\u3002\uFF08\u9ED8\u8A8D\u503C\uFF1A\u201C\u201D\uFF09\uFF08\u57FA\u672C\u5C64\uFF09","Z value for created shadow clones":"\u6BCF\u500B\u9023\u7E8C\u9670\u5F71\u514B\u9686\u7684\u6BD4\u4F8B\u6E1B\u5C11","Match X scale of primary object:":"\u4E3B\u8981\u5C0D\u8C61\u7684X\u8EF8\u6BD4\u4F8B\u5339\u914D:","Match Y scale of primary object:":"\u4E3B\u8981\u5C0D\u8C61\u7684Y\u8EF8\u6BD4\u4F8B\u5339\u914D:","Match angle of primary object:":"\u4E3B\u8981\u7269\u9AD4\u7684X\u6BD4\u4F8B\u5339\u914D\uFF1A","Match animation of primary object:":"\u4E3B\u8981\u7269\u9AD4\u7684Y\u6BD4\u4F8B\u5339\u914D\uFF1A","Match animation frame of primary object:":"\u4E3B\u8981\u7269\u9AD4\u7684\u89D2\u5EA6\u5339\u914D\uFF1A","Match the vertical flip of primary object:":"\u4E3B\u8981\u7269\u9AD4\u7684\u52D5\u756B\u5339\u914D\uFF1A","Match the horizontal flip of primary object:":"\u4E3B\u8981\u7269\u9AD4\u7684\u52D5\u756B\u5E40\u5339\u914D\uFF1A","Delete shadow clone objects that are linked to a primary object.":"\u522A\u9664\u8207\u4E3B\u7269\u4EF6\u93C8\u63A5\u7684\u5F71\u5B50\u514B\u9686\u7269\u4EF6\u3002","Delete shadow clone objects that are linked to a primary object":"\u522A\u9664\u8207\u4E3B\u7269\u4EF6\u93C8\u63A5\u7684\u5F71\u5B50\u514B\u9686\u7269\u4EF6","Primary object":"\u4E3B\u7269\u4EF6","Shadow clones":"\u5F71\u5B50\u514B\u9686","Shake object":"\u6416\u52D5\u5C0D\u8C61","Shake an object.":"\u6416\u52D5\u4E00\u500B\u5C0D\u8C61\u3002","Shake objects with translation and rotation.":"\u4EE5\u5E73\u79FB\u548C\u65CB\u8F49\u4F7F\u7269\u9AD4\u6296\u52D5\u3002","Shake object (position, angle)":"\u6296\u52D5\u7269\u9AD4\uFF08\u4F4D\u7F6E\u3001\u89D2\u5EA6\uFF09","Shake an object, using one or more ways to shake (position, angle). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"\u4F7F\u7528\u4E00\u7A2E\u6216\u591A\u7A2E\u65B9\u5F0F\u4F86\u6416\u52D5\u4E00\u500B\u5C0D\u8C61\uFF08\u4F4D\u7F6E\uFF0C\u89D2\u5EA6\uFF09\u3002\u8ACB\u78BA\u4FDD\u5728\u4F7F\u7528\u4E0D\u540C\u53C3\u6578\u6416\u52D5\u6642\u5728\u958B\u59CB\u65B0\u7684\u6416\u52D5\u4E4B\u524D\"\u505C\u6B62\u6416\u52D5\"\u3002","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_":"\u6416\u52D5_PARAM0_\uFF0C\u6301\u7E8C_PARAM2_\u79D2\u3002\u4FEE\u6539\u4F4D\u7F6E\u632F\u5E45_PARAM3_\u5728X\u8EF8\u4E0A\u548C_PARAM4_\u5728Y\u8EF8\u4E0A\uFF0C\u89D2\u5EA6\u65CB\u8F49\u632F\u5E45_PARAM5_\u3002 \u7B49\u5F85_PARAM6_\u79D2\u5F8C\u518D\u6416\u52D5\u3002\u6301\u7E8C\u6416\u52D5\u76F4\u5230\u505C\u6B62\uFF1A_PARAM7_","Stop any shaking of object that was initiated by the Shake Object extension.":"\u505C\u6B62Shake Object\u64F4\u5C55\u5F15\u767C\u7684\u5C0D\u8C61\u7684\u4EFB\u4F55\u6416\u52D5\u3002","Stop shaking the object":"\u505C\u6B62\u6416\u52D5\u5C0D\u8C61","3D object shake":"3D \u7269\u9AD4\u6416\u6643","Shake 3D objects.":"\u6416\u52D5 3D \u7269\u9AD4\u3002","Shake 3D objects with translation and rotation.":"\u4EE5\u5E73\u79FB\u548C\u65CB\u8F49\u4F7F 3D \u7269\u9AD4\u6296\u52D5\u3002","3D shake":"3D \u6296\u52D5","Translation amplitude on X axis":"X \u8EF8\u4E0A\u7684\u5E73\u79FB\u5E45\u5EA6","Translation amplitude on Y axis":"Y \u8EF8\u4E0A\u7684\u5E73\u79FB\u5E45\u5EA6","Translation amplitude on Z axis":"Z \u8EF8\u4E0A\u7684\u5E73\u79FB\u5E45\u5EA6","Rotation amplitude around X axis":"X \u8EF8\u5468\u570D\u7684\u65CB\u8F49\u5E45\u5EA6","Rotation amplitude around Y axis":"Y \u8EF8\u5468\u570D\u7684\u65CB\u8F49\u5E45\u5EA6","Rotation amplitude around Z axis":"Z \u8EF8\u5468\u570D\u7684\u65CB\u8F49\u5E45\u5EA6","Start to shake at the object creation":"\u5728\u7269\u9AD4\u5275\u5EFA\u6642\u958B\u59CB\u6296\u52D5","Shake the object with a linear easing at the start and the end.":"\u4EE5\u7DDA\u6027\u7DE9\u548C\u65B9\u5F0F\u6416\u52D5\u5C0D\u8C61\u7684\u958B\u59CB\u548C\u7D50\u5C3E\u3002","Shake":"\u6416\u52D5","Shake _PARAM0_ for _PARAM2_ seconds with _PARAM3_ seconds of easing to start and _PARAM4_ seconds to stop":"\u4F7F\u7528_PARAM0_\u6416\u52D5_PARAM2_\u79D2\uFF0C\u4F7F\u7528_PARAM3_\u79D2\u7684\u7DE9\u548C\u958B\u59CB\u548C_PARAM4_\u79D2\u505C\u6B62","Shake the object with a linear easing at the start and keep shaking until the stop action is used.":"\u4EE5\u7DDA\u6027\u7DE9\u548C\u65B9\u5F0F\u6416\u52D5\u5C0D\u8C61\u7684\u958B\u59CB\u4E26\u6301\u7E8C\u6416\u52D5\u76F4\u5230\u4F7F\u7528\u505C\u6B62\u64CD\u4F5C\u3002","Start shaking":"\u958B\u59CB\u6416\u52D5","Start shaking _PARAM0_ with _PARAM2_ seconds of easing":"\u4EE5_PARAM2_\u79D2\u7684\u7DE9\u548C\u958B\u59CB\u958B\u59CB\u6416\u52D5_PARAM0_","Stop shaking the object with a linear easing.":"\u4F7F\u7528\u7DDA\u6027\u7DE9\u548C\u505C\u6B62\u6416\u52D5\u5C0D\u8C61\u3002","Stop shaking":"\u505C\u6B62\u6416\u52D5","Stop shaking _PARAM0_ with _PARAM2_ seconds of easing":"\u4F7F\u7528_PARAM2_\u79D2\u7684\u7DE9\u548C\u65B9\u5F0F\u505C\u6B62\u6416\u52D5_PARAM0_","Check if the object is shaking.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5728\u6416\u52D5\u3002","Is shaking":"\u5728\u6416\u52D5","Check if the object is stopping to shake.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u505C\u6B62\u6416\u52D5\u3002","Is stopping to shake":"\u505C\u6B62\u6416\u52D5","_PARAM0_ is stopping to shake":"_PARAM0_\u6B63\u5728\u505C\u6B62\u6416\u52D5","the shaking frequency of the object.":"\u7269\u9AD4\u7684\u6416\u52D5\u983B\u7387\u3002","Shaking frequency":"\u6416\u52D5\u983B\u7387","the shaking frequency":"\u6416\u52D5\u983B\u7387","Return the easing factor according to start properties.":"\u6839\u64DA\u8D77\u59CB\u5C6C\u6027\u8FD4\u56DE\u7DE9\u548C\u56E0\u5B50\u3002","Start easing factor":"\u958B\u59CB\u7DE9\u548C\u56E0\u5B50","Return the easing factor according to stop properties.":"\u6839\u64DA\u505C\u6B62\u5C6C\u6027\u8FD4\u56DE\u7DE9\u548C\u56E0\u5B50\u3002","Stop easing factor":"\u505C\u6B62\u7DE9\u548C\u56E0\u5B50","stop easing factor":"\u505C\u6B62\u7DE9\u548C\u56E0\u5B50","Share dialog and sharing options":"\u5171\u4EAB\u5C0D\u8A71\u6846\u548C\u5171\u4EAB\u9078\u9805","Allows to share content via the system share dialog. Works only on mobile (browser or mobile app).":"\u5141\u8A31\u901A\u904E\u7CFB\u7D71\u5171\u4EAB\u5C0D\u8A71\u6846\u5171\u4EAB\u5167\u5BB9\u3002\u50C5\u5728\u79FB\u52D5\u8A2D\u5099\u4E0A\uFF08\u700F\u89BD\u5668\u6216\u79FB\u52D5\u61C9\u7528\u7A0B\u5E8F\uFF09\u624D\u80FD\u5DE5\u4F5C\u3002","Share a link or text via another app using the system share dialog.":"\u4F7F\u7528\u7CFB\u7D71\u5171\u4EAB\u5C0D\u8A71\u6846\u901A\u904E\u53E6\u4E00\u500B\u61C9\u7528\u7A0B\u5E8F\u5206\u4EAB\u93C8\u63A5\u6216\u6587\u672C\u3002","Share text: _PARAM1_ and url: _PARAM2_ with title _PARAM3_":"\u901A\u904E\u6A19\u984C _PARAM3_ \u7684\u5171\u4EAB\u6587\u672C\uFF1A_PARAM1_ \u548C url\uFF1A_PARAM2_","Text to share":"\u8981\u5171\u4EAB\u7684\u6587\u672C","Url to share":"\u8981\u5171\u4EAB\u7684 URL","Title to show in the Share dialog":"\u5728\u5171\u4EAB\u5C0D\u8A71\u6846\u4E2D\u986F\u793A\u7684\u6A19\u984C","Check if the browser/operating system of the device supports sharing. Sharing is typically not supported on desktop browsers or desktop apps.":"\u6AA2\u67E5\u8A2D\u5099\u7684\u700F\u89BD\u5668\uFF0F\u4F5C\u696D\u7CFB\u7D71\u662F\u5426\u652F\u63F4\u5206\u4EAB\u3002\u5728\u684C\u9762\u700F\u89BD\u5668\u6216\u684C\u9762\u61C9\u7528\u901A\u5E38\u4E0D\u652F\u63F4\u5206\u4EAB\u3002","Sharing is supported":"\u652F\u63F4\u5206\u4EAB","The browser or system supports sharing":"\u700F\u89BD\u5668\u6216\u7CFB\u7D71\u652F\u63F4\u5206\u4EAB","the result of the last share dialog.":"\u4E0A\u4E00\u6B21\u5206\u4EAB\u5C0D\u8A71\u65B9\u584A\u7684\u7D50\u679C\u3002","Result of the last share dialog":"\u4E0A\u4E00\u6B21\u5206\u4EAB\u5C0D\u8A71\u65B9\u584A\u7684\u7D50\u679C","the result of the last share dialog":"\u4E0A\u4E00\u6B21\u5206\u4EAB\u5C0D\u8A71\u65B9\u584A\u7684\u7D50\u679C","Shock wave effect":"Shock wave effect","Draw shock wave.":"\u7E6A\u88FD\u9707\u6CE2\u3002","Draw ellipse shock waves.":"\u756B\u6A62\u5713\u5F62\u885D\u64CA\u6CE2\u3002","Ellipse shock wave":"\u6A62\u5713\u5F62\u885D\u64CA\u6CE2","Start width":"\u8D77\u59CB\u5BEC\u5EA6","Start height":"\u8D77\u59CB\u9AD8\u5EA6","Start outline thickness":"\u8D77\u59CB\u8F2A\u5ED3\u539A\u5EA6","Outline":"\u8F2A\u5ED3","Start angle":"\u8D77\u59CB\u89D2\u5EA6","End width":"\u7D50\u675F\u5BEC\u5EA6","End height":"\u7D50\u675F\u9AD8\u5EA6","End outline thickness":"\u7D50\u675F\u8F2A\u5ED3\u539A\u5EA6","End angle":"\u7D50\u675F\u89D2\u5EA6","Timing":"\u5B9A\u6642","Fill the shape":"\u586B\u6EFF\u5F62\u72C0","the start width of the object.":"\u7269\u9AD4\u7684\u8D77\u59CB\u5BEC\u5EA6\u3002","the start width":"\u7269\u4EF6\u7684\u8D77\u59CB\u5BEC\u5EA6","the start height of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u9AD8\u5EA6\u3002","the start height":"\u7269\u4EF6\u7684\u8D77\u59CB\u9AD8\u5EA6","the start outline of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u8F2A\u5ED3\u3002","the start outline":"\u7269\u4EF6\u7684\u8D77\u59CB\u8F2A\u5ED3","the start angle of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u89D2\u5EA6\u3002","the start angle":"\u7269\u4EF6\u7684\u8D77\u59CB\u89D2\u5EA6","the end width of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u5BEC\u5EA6\u3002","the end width":"\u7269\u4EF6\u7684\u7D50\u675F\u5BEC\u5EA6","the end height of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u9AD8\u5EA6\u3002","the end height":"\u7269\u4EF6\u7684\u7D50\u675F\u9AD8\u5EA6","the end outline thickness of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u8F2A\u5ED3\u539A\u5EA6\u3002","the end outline thickness":"\u7269\u4EF6\u7684\u7D50\u675F\u8F2A\u5ED3\u539A\u5EA6","the end Color of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u984F\u8272\u3002","End Color":"\u7D50\u675F\u984F\u8272","the end Color":"\u7269\u4EF6\u7684\u7D50\u675F\u984F\u8272","the end Opacity of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u4E0D\u900F\u660E\u5EA6\u3002","End Opacity":"\u7D50\u675F\u4E0D\u900F\u660E\u5EA6","the end Opacity":"\u7269\u4EF6\u7684\u7D50\u675F\u4E0D\u900F\u660E\u5EA6","the end angle of the object.":"\u7269\u4EF6\u7684\u7D50\u675F\u89D2\u5EA6\u3002","the end angle":"\u7269\u4EF6\u7684\u7D50\u675F\u89D2\u5EA6","the duration of the animation.":"\u52D5\u756B\u7684\u6301\u7E8C\u6642\u9593\u3002","the duration":"\u52D5\u756B\u7684\u6301\u7E8C\u6642\u9593","the easing of the animation.":"\u52D5\u756B\u7684\u7DE9\u548C\u3002","the easing":"\u52D5\u756B\u7684\u7DE9\u548C","Check if the shape is filled.":"\u6AA2\u67E5\u5F62\u72C0\u662F\u5426\u586B\u6EFF\u3002","Shape filled":"\u586B\u6EFF\u7684\u5F62\u72C0","The shape of _PARAM0_ is filled":"\u586B\u5145\u4E86_PARAM0_\u7684\u5F62\u72C0","Enable or disable the filling of the shape.":"\u555F\u7528\u6216\u505C\u7528\u5F62\u72C0\u7684\u586B\u5145\u3002","Enable filling":"\u555F\u7528\u586B\u5145","Enable filling of _PARAM0_ : _PARAM2_":"\u555F\u7528\u586B\u5145_PARAM0_\uFF1A_PARAM2_","IsFilled":"\u5DF2\u586B\u5145","Draw star shock waves.":"\u756B\u661F\u5F62\u885D\u64CA\u6CE2\u3002","Star shock waves":"\u661F\u5F62\u885D\u64CA\u6CE2","Start radius":"\u8D77\u59CB\u534A\u5F91","Start Inner radius":"\u8D77\u59CB\u5167\u90E8\u534A\u5F91","Shape":"\u5F62\u72C0","End radius":"\u7D50\u675F\u534A\u5F91","End inner radius":"\u7D50\u675F\u5167\u90E8\u534A\u5F91","Number of points":"\u9EDE\u7684\u6578\u91CF","the start radius of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u534A\u5F91\u3002","the start radius":"\u7269\u4EF6\u7684\u8D77\u59CB\u534A\u5F91","the start inner radius of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u5167\u534A\u5F91\u3002","Start inner radius":"\u8D77\u59CB\u5167\u534A\u5F91","the start inner radius":"\u7269\u4EF6\u7684\u8D77\u59CB\u5167\u534A\u5F91","the start outline thickness of the object.":"\u7269\u4EF6\u7684\u8D77\u59CB\u8F2A\u5ED3\u539A\u5EA6\u3002","the start outline thickness":"\u7269\u4EF6\u7684\u8D77\u59CB\u8F2A\u5ED3\u539A\u5EA6","the end radius of the object.":"\u7269\u9AD4\u7684\u7D50\u675F\u534A\u5F91\u3002","the end radius":"\u7D50\u675F\u534A\u5F91","the end inner radius of the object.":"\u7269\u9AD4\u7684\u7D50\u675F\u5167\u534A\u5F91\u3002","the end inner radius":"\u7D50\u675F\u5167\u534A\u5F91","IsFilling":"\u586B\u5145","the number of points of the star.":"\u661F\u661F\u7684\u9EDE\u6578\u3002","the number of points":"\u9EDE\u7684\u6578\u91CF","Smooth Camera":"\u5E73\u6ED1\u76F8\u6A5F","Smoothly scroll to follow an object.":"\u5E73\u6ED1\u5730\u6EFE\u52D5\u4EE5\u8DDF\u96A8\u4E00\u500B\u5C0D\u8C61\u3002","Leftward catch-up speed (in ratio per second)":"\u5411\u5DE6\u8FFD\u8D95\u901F\u5EA6\uFF08\u6BD4\u7387\u6BCF\u79D2\uFF09","Catch-up speed":"\u8FFD\u8D95\u901F\u5EA6","Rightward catch-up speed (in ratio per second)":"\u5411\u53F3\u8FFD\u8D95\u901F\u5EA6\uFF08\u6BD4\u7387\u6BCF\u79D2\uFF09","Upward catch-up speed (in ratio per second)":"\u5411\u4E0A\u8FFD\u8D95\u901F\u5EA6\uFF08\u6BD4\u7387\u6BCF\u79D2\uFF09","Downward catch-up speed (in ratio per second)":"\u5411\u4E0B\u8FFD\u8D95\u901F\u5EA6\uFF08\u6BD4\u7387\u6BCF\u79D2\uFF09","Follow on X axis":"\u5728X\u8EF8\u4E0A\u8DDF\u96A8","Follow on Y axis":"\u5728Y\u8EF8\u4E0A\u8DDF\u96A8","Follow free area left border":"\u9075\u5FAA\u81EA\u7531\u5340\u57DF\u5DE6\u908A\u754C","Follow free area right border":"\u9075\u5FAA\u81EA\u7531\u5340\u57DF\u53F3\u908A\u754C","Follow free area top border":"\u9075\u5FAA\u81EA\u7531\u5340\u57DF\u4E0A\u908A\u754C","Follow free area bottom border":"\u8DDF\u96A8\u514D\u8CBB\u5340\u5E95\u90E8\u908A\u6846","Camera offset X":"\u651D\u5F71\u6A5F\u504F\u79FBX","Camera offset Y":"\u651D\u5F71\u6A5F\u504F\u79FBY","Camera delay":"\u651D\u5F71\u6A5F\u5EF6\u9072","Forecast time":"\u9810\u6E2C\u6642\u9593","Forecast history duration":"\u9810\u6E2C\u6B77\u53F2\u6301\u7E8C\u6642\u9593","Index (local variable)":"\u7D22\u5F15\uFF08\u672C\u5730\u8B8A\u6578\uFF09","Leftward maximum speed":"\u5411\u5DE6\u7684\u6700\u5927\u901F\u5EA6","Rightward maximum speed":"\u5411\u53F3\u7684\u6700\u5927\u901F\u5EA6","Upward maximum speed":"\u5411\u4E0A\u7684\u6700\u5927\u901F\u5EA6","Downward maximum speed":"\u5411\u4E0B\u7684\u6700\u5927\u901F\u5EA6","OldX (local variable)":"OldX\uFF08\u672C\u5730\u8B8A\u6578\uFF09","OldY (local variable)":"OldY\uFF08\u672C\u5730\u8B8A\u6578\uFF09","Move the camera closer to the object. This action must be called after the object has moved for the frame.":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u5230\u7269\u9AD4\u9644\u8FD1\u3002\u6B64\u64CD\u4F5C\u5FC5\u9808\u5728\u7269\u9AD4\u79FB\u52D5\u4E86\u4E00\u5E40\u4E4B\u5F8C\u8ABF\u7528\u3002","Move the camera closer":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u66F4\u63A5\u8FD1","Move the camera closer to _PARAM0_":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u66F4\u63A5\u8FD1\u81F3_PARAM0_","Move the camera closer to the object.":"\u5C07\u76F8\u6A5F\u79FB\u52D5\u66F4\u63A5\u8FD1\u7269\u9AD4\u3002","Do move the camera closer":"\u4E0D\u8981\u5C07\u76F8\u6A5F\u79FB\u5F97\u66F4\u63A5\u8FD1","Do move the camera closer _PARAM0_":"\u4E0D\u8981\u79FB\u52D5\u76F8\u6A5F\u66F4\u63A5\u8FD1_PARAM0_","Delay the camera according to a maximum speed and catch up the delay.":"\u6839\u64DA\u6700\u5927\u901F\u5EA6\u5EF6\u9072\u76F8\u6A5F\u4E26\u8FFD\u4E0A\u5EF6\u9072\u3002","Wait and catch up":"\u7B49\u5F85\u4E26\u8FFD\u8D95","Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds":"\u5728_PARAM2_\u79D2\u5167\u6839\u64DA\u6700\u5927\u901F\u5EA6_PARAM3_\u5EF6\u9072\u76F8\u6A5F;_PARAM4_\u79D2\u4E26\u5728_PARAM5_\u79D2\u5167\u8FFD\u8D95\u76F8\u6A5F","Waiting duration (in seconds)":"\u7B49\u5F85\u6642\u9593\uFF08\u79D2\uFF09","Waiting maximum camera target speed X":"\u7B49\u5F85\u6700\u5927\u76F8\u6A5F\u76EE\u6A19\u901F\u5EA6 X","Waiting maximum camera target speed Y":"\u7B49\u5F85\u6700\u5927\u76F8\u6A5F\u76EE\u6A19\u901F\u5EA6 Y","Catch up duration (in seconds)":"\u8D95\u4E0A\u6642\u9593\uFF08\u79D2\uFF09","Draw the targeted and actual camera position.":"\u7E6A\u88FD\u76EE\u6A19\u548C\u5BE6\u969B\u76F8\u6A5F\u4F4D\u7F6E\u3002","Draw debug":"\u7E6A\u88FD\u5075\u932F","Draw targeted and actual camera position for _PARAM0_ on _PARAM2_":"\u70BA_PARAM0_\u5728_PARAM2_\u4E0A\u7E6A\u88FD\u76EE\u6A19\u548C\u5BE6\u969B\u76F8\u6A5F\u4F4D\u7F6E","Enable or disable the following on X axis.":"\u5728 X \u8EF8\u4E0A\u555F\u7528\u6216\u7981\u7528\u4EE5\u4E0B\u5167\u5BB9\u3002","Follow on X":"\u5728 X \u8EF8\u4E0A\u8DDF\u96A8","The camera follows _PARAM0_ on X axis: _PARAM2_":"\u76F8\u6A5F\u5728 X \u8EF8\u4E0A\u8DDF\u96A8_PARAM0_\uFF1A_PARAM2_","Enable or disable the following on Y axis.":"\u5728 Y \u8EF8\u4E0A\u555F\u7528\u6216\u7981\u7528\u4EE5\u4E0B\u5167\u5BB9\u3002","Follow on Y":"\u5728 Y \u8EF8\u4E0A\u8DDF\u96A8","The camera follows _PARAM0_ on Y axis: _PARAM2_":"\u76F8\u6A5F\u5728 Y \u8EF8\u4E0A\u8DDF\u96A8_PARAM0_\uFF1A_PARAM2_","Change the camera follow free area right border.":"\u66F4\u6539\u76F8\u6A5F\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u53F3\u908A\u754C\u3002","Change the camera follow free area right border of _PARAM0_: _PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u76F8\u6A5F\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u53F3\u908A\u754C\uFF1A_PARAM2_","Change the camera follow free area left border.":"\u66F4\u6539\u76F8\u6A5F\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u5DE6\u908A\u754C\u3002","Change the camera follow free area left border of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u5DE6\u908A\u754C\u7684_PARAM0_\uFF1A_PARAM2_","Change the camera follow free area top border.":"\u66F4\u6539\u76F8\u6A5F\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u4E0A\u908A\u754C\u3002","Change the camera follow free area top border of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u4E0A\u908A\u754C\u7684_PARAM0_\uFF1A_PARAM2_","Change the camera follow free area bottom border.":"\u66F4\u6539\u76F8\u6A5F\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u4E0B\u908A\u754C\u3002","Change the camera follow free area bottom border of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u4E0B\u908A\u754C\u7684_PARAM0_\uFF1A_PARAM2_","Change the camera leftward maximum speed (in pixels per second).":"\u66F4\u6539\u76F8\u6A5F\u5411\u5DE6\u7684\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09\u3002","Change the camera leftward maximum speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u5411\u5DE6\u7684\u6700\u5927\u901F\u5EA6\u70BA_PARAM0_\uFF1A_PARAM2_","Leftward maximum speed (in pixels per second)":"\u5411\u5DE6\u6700\u5927\u901F\u5EA6\uFF08\u4EE5\u6BCF\u79D2\u50CF\u7D20\u8A08\uFF09","Change the camera rightward maximum speed (in pixels per second).":"\u66F4\u6539\u76F8\u6A5F\u5411\u53F3\u7684\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09\u3002","Change the camera rightward maximum speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u5411\u53F3\u7684\u6700\u5927\u901F\u5EA6\u70BA_PARAM0_\uFF1A_PARAM2_","Rightward maximum speed (in pixels per second)":"\u5411\u53F3\u7684\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09","Change the camera upward maximum speed (in pixels per second).":"\u66F4\u6539\u76F8\u6A5F\u5411\u4E0A\u7684\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09\u3002","Change the camera upward maximum speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u5411\u4E0A\u7684\u6700\u5927\u901F\u5EA6\u70BA_PARAM0_\uFF1A_PARAM2_","Upward maximum speed (in pixels per second)":"\u5411\u4E0A\u7684\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09","Change the camera downward maximum speed (in pixels per second).":"\u66F4\u6539\u76F8\u6A5F\u5411\u4E0B\u7684\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09\u3002","Change the camera downward maximum speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u5411\u4E0B\u7684\u6700\u5927\u901F\u5EA6\u70BA_PARAM0_\uFF1A_PARAM2_","Downward maximum speed (in pixels per second)":"\u5411\u4E0B\u7684\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\u6578\uFF09","Change the camera leftward catch-up speed (in ratio per second).":"\u66F4\u6539\u76F8\u6A5F\u5411\u5DE6\u7684\u8FFD\u8D95\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09\u3002","Leftward catch-up speed":"\u5411\u5DE6\u7684\u8FFD\u8D95\u901F\u5EA6","Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u5411\u5DE6\u7684\u8FFD\u8D95\u901F\u5EA6\u70BA_PARAM0_\uFF1A_PARAM2_","Change the camera rightward catch-up speed (in ratio per second).":"\u66F4\u6539\u76F8\u6A5F\u5411\u53F3\u7684\u8FFD\u8D95\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09\u3002","Rightward catch-up speed":"\u5411\u53F3\u7684\u8FFD\u8D95\u901F\u5EA6","Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u5411\u53F3\u7684\u8FFD\u8D95\u901F\u5EA6\u70BA_PARAM0_\uFF1A_PARAM2_","Change the camera downward catch-up speed (in ratio per second).":"\u66F4\u6539\u76F8\u6A5F\u5411\u4E0B\u7684\u8FFD\u8D95\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09\u3002","Downward catch-up speed":"\u5411\u4E0B\u7684\u8FFD\u8D95\u901F\u5EA6","Change the camera downward catch-up speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u5411\u4E0B\u7684\u8FFD\u8D95\u901F\u5EA6\u70BA_PARAM0_\uFF1A_PARAM2_","Change the camera upward catch-up speed (in ratio per second).":"\u66F4\u6539\u76F8\u6A5F\u5411\u4E0A\u7684\u8FFD\u8D95\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09\u3002","Upward catch-up speed":"\u5411\u4E0A\u7684\u8FFD\u8D95\u901F\u5EA6","Change the camera upward catch-up speed of _PARAM0_: _PARAM2_":"\u66F4\u6539\u76F8\u6A5F\u5411\u4E0A\u7684\u8FFD\u8D95\u901F\u5EA6\u70BA_PARAM0_\uFF1A_PARAM2_","the camera offset on X axis of the object. This is not the current difference between the object and the camera position.":"\u7269\u9AD4 X \u8EF8\u7684\u76F8\u6A5F\u504F\u79FB\u3002\u9019\u4E26\u975E\u7269\u9AD4\u8207\u76F8\u6A5F\u4F4D\u7F6E\u4E4B\u9593\u7684\u7576\u524D\u5DEE\u7570\u3002","the camera offset on X axis":"\u76F8\u6A5F\u65BC X \u8EF8\u7684\u504F\u79FB","Change the camera offset on X axis of an object.":"\u4FEE\u6539\u7269\u9AD4 X \u8EF8\u7684\u76F8\u6A5F\u504F\u79FB\u3002","Camera Offset X":"\u76F8\u6A5F\u504F\u79FB X","Change the camera offset on X axis of _PARAM0_: _PARAM2_":"\u4FEE\u6539\u7269\u9AD4 _PARAM0_ \u7684\u76F8\u6A5F X \u8EF8\u504F\u79FB\uFF1A_PARAM2_","the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.":"\u7269\u9AD4 Y \u8EF8\u7684\u76F8\u6A5F\u504F\u79FB\u3002\u9019\u4E26\u975E\u7269\u9AD4\u8207\u76F8\u6A5F\u4F4D\u7F6E\u4E4B\u9593\u7684\u7576\u524D\u5DEE\u7570\u3002","the camera offset on Y axis":"\u76F8\u6A5F\u65BC Y \u8EF8\u7684\u504F\u79FB","Change the camera offset on Y axis of an object.":"\u4FEE\u6539\u7269\u9AD4 Y \u8EF8\u7684\u76F8\u6A5F\u504F\u79FB\u3002","Camera Offset Y":"\u76F8\u6A5F\u504F\u79FB Y","Change the camera offset on Y axis of _PARAM0_: _PARAM2_":"\u4FEE\u6539\u7269\u9AD4 _PARAM0_ \u7684\u76F8\u6A5F Y \u8EF8\u504F\u79FB\uFF1A_PARAM2_","Change the camera forecast time (in seconds).":"\u4FEE\u6539\u76F8\u6A5F\u9810\u6E2C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Change the camera forecast time of _PARAM0_: _PARAM2_":"\u4FEE\u6539 _PARAM0_ \u7684\u76F8\u6A5F\u9810\u6E2C\u6642\u9593\uFF1A_PARAM2_","Change the camera delay (in seconds).":"\u4FEE\u6539\u76F8\u6A5F\u5EF6\u9072\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Change the camera delay of _PARAM0_: _PARAM2_":"\u4FEE\u6539 _PARAM0_ \u7684\u76F8\u6A5F\u5EF6\u9072\u6642\u9593\uFF1A_PARAM2_","Return follow free area left border X.":"\u8FD4\u56DE\u8DDF\u96A8\u7A7A\u767D\u5340\u57DF\u5DE6\u908A\u754C\u7684 X \u8EF8\u3002","Free area left":"\u7A7A\u767D\u5340\u57DF\u5DE6\u908A","Return follow free area right border X.":"\u8FD4\u56DE\u8DDF\u96A8\u7A7A\u767D\u5340\u57DF\u53F3\u908A\u754C\u7684 X \u8EF8\u3002","Free area right":"\u7A7A\u767D\u5340\u57DF\u53F3\u908A","Return follow free area bottom border Y.":"\u8FD4\u56DE\u8DDF\u96A8\u7A7A\u767D\u5340\u57DF\u5E95\u90E8\u908A\u754C\u7684 Y \u8EF8\u3002","Free area bottom":"\u7A7A\u767D\u5340\u57DF\u5E95\u90E8","Return follow free area top border Y.":"\u8FD4\u56DE\u8DDF\u96A8\u7A7A\u767D\u5340\u57DF\u9802\u90E8\u908A\u754C\u7684 Y \u8EF8\u3002","Free area top":"\u7A7A\u767D\u5340\u57DF\u9802\u90E8","Update delayed position and delayed history. This is called in doStepPreEvents.":"\u66F4\u65B0\u5EF6\u9072\u4F4D\u7F6E\u548C\u5EF6\u9072\u6B77\u53F2\u3002\u6B64\u64CD\u4F5C\u5728\u57F7\u884C\u524D\u4E8B\u4EF6\u4E2D\u8ABF\u7528\u3002","Update delayed position":"\u66F4\u65B0\u5EF6\u9072\u4F4D\u7F6E","Update delayed position and delayed history of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u5EF6\u9072\u4F4D\u7F6E\u548C\u5EF6\u9072\u6B77\u53F2","Check if the camera following target is delayed from the object.":"\u6AA2\u67E5\u76F8\u6A5F\u8DDF\u96A8\u76EE\u6A19\u662F\u5426\u5EF6\u9072\u65BC\u7269\u9AD4\u3002","Camera is delayed":"\u76F8\u6A5F\u5DF2\u5EF6\u9072","The camera of _PARAM0_ is delayed":"_PARAM0_ \u7684\u76F8\u6A5F\u5DF2\u5EF6\u9072","Return the current camera delay.":"\u8FD4\u56DE\u7576\u524D\u76F8\u6A5F\u5EF6\u9072\u6642\u9593\u3002","Current delay":"\u7576\u524D\u5EF6\u9072\u6642\u9593","Check if the camera following is waiting at a reduced speed.":"\u6AA2\u67E5\u76F8\u6A5F\u8DDF\u96A8\u662F\u5426\u4EE5\u8F03\u4F4E\u901F\u5EA6\u7B49\u5F85\u3002","Camera is waiting":"\u76F8\u6A5F\u6B63\u5728\u7B49\u5F85","The camera of _PARAM0_ is waiting":"_PARAM0_ \u7684\u76F8\u6A5F\u6B63\u5728\u7B49\u5F85","Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.":"\u70BA\u9810\u6E2C\u6DFB\u52A0\u4F4D\u7F6E\u5230\u6B77\u53F2\u3002\u6B64\u64CD\u4F5C\u5728 UpadteDelayedPosition \u4E2D\u8ABF\u7528 2 \u6B21\u3002","Add forecast history position":"\u65B0\u589E\u9810\u6E2C\u6B77\u53F2\u4F4D\u7F6E","Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_":"\u5728 _PARAM0_ \u7684\u9810\u6E2C\u6B77\u53F2\u4E2D\u65B0\u589E\u6642\u9593\uFF1A_PARAM2_ \u548C\u4F4D\u7F6E\uFF1A _PARAM3_; _PARAM4_","Object X":"\u7269\u4EF6 X","Object Y":"\u7269\u4EF6 Y","Update forecasted position. This is called in doStepPreEvents.":"\u66F4\u65B0\u9810\u6E2C\u4F4D\u7F6E\u3002\u9019\u5728 doStepPreEvents \u4E2D\u547C\u53EB\u3002","Update forecasted position":"\u66F4\u65B0\u9810\u6E2C\u4F4D\u7F6E","Update forecasted position of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u9810\u6E2C\u4F4D\u7F6E","Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.":"\u5C07\u9805\u76EE\u6B77\u53F2\u7D50\u675F\u4F4D\u7F6E\u6295\u5F71\u5230\u5F9E\u7DDA\u6027\u56DE\u6B78\u7684\u76F4\u7DDA\u4E0A\u7684\u5411\u91CF\u3002\u6B64\u51FD\u5F0F\u53EA\u7531 UpdateForecastedPosition \u547C\u53EB\u3002","Project history ends":"\u9805\u76EE\u6B77\u53F2\u7D50\u675F","Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_":"_PARAM0_ \u7684\u6B77\u53F2\u6700\u8001\u4F4D\u7F6E\uFF1A_PARAM2_;_PARAM3_ \u548C\u6700\u65B0\u4F4D\u7F6E\uFF1A_PARAM4_;_PARAM5_","OldestX":"\u6700\u8001\u7684 X","OldestY":"\u6700\u8001\u7684 Y","Newest X":"\u6700\u65B0\u7684 X","Newest Y":"\u6700\u65B0\u7684 Y","Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.":"\u56DE\u50B3\u9810\u6E2C\u6642\u9593\u548C\u6B77\u53F2\u6301\u7E8C\u6642\u9593\u4E4B\u9593\u7684\u6BD4\u7387\u3002\u6B64\u51FD\u5F0F\u53EA\u7531 UpdateForecastedPosition \u547C\u53EB\u3002","Forecast time ratio":"\u9810\u6E2C\u6642\u9593\u6BD4\u7387","Smoothly scroll to follow a character and stabilize the camera when jumping.":"\u5E73\u7A69\u5730\u6EFE\u52D5\u4EE5\u8DDF\u96A8\u89D2\u8272\u4E26\u7A69\u5B9A\u76F8\u6A5F\u8DF3\u8E8D\u6642\u3002","Smooth platformer camera":"\u5E73\u6574\u5E73\u53F0\u651D\u5F71\u6A5F","Smooth camera behavior":"\u5E73\u6ED1\u76F8\u6A5F\u884C\u70BA","Follow free area top in the air":"\u7A7A\u4E2D\u8FFD\u8E64\u81EA\u7531\u5340\u9802\u90E8","Follow free area bottom in the air":"\u7A7A\u4E2D\u8FFD\u8E64\u81EA\u7531\u5340\u5E95\u90E8","Follow free area top on the floor":"\u5730\u677F\u4E0A\u81EA\u7531\u5340\u9802\u90E8\u8FFD\u8E64","Follow free area bottom on the floor":"\u5730\u677F\u4E0A\u81EA\u7531\u5340\u5E95\u90E8\u8FFD\u8E64","Upward speed in the air (in ratio per second)":"\u7A7A\u4E2D\u5411\u4E0A\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09","Downward speed in the air (in ratio per second)":"\u7A7A\u4E2D\u5411\u4E0B\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09","Upward speed on the floor (in ratio per second)":"\u5730\u677F\u4E0A\u5411\u4E0A\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09","Downward speed on the floor (in ratio per second)":"\u5730\u677F\u4E0A\u5411\u4E0B\u901F\u5EA6\uFF08\u6BCF\u79D2\u6BD4\u7387\uFF09","Upward maximum speed in the air":"\u7A7A\u4E2D\u5411\u4E0A\u6700\u5927\u901F\u5EA6","Downward maximum speed in the air":"\u7A7A\u4E2D\u5411\u4E0B\u6700\u5927\u901F\u5EA6","Upward maximum speed on the floor":"\u5730\u677F\u4E0A\u5411\u4E0A\u6700\u5927\u901F\u5EA6","Downward maximum speed on the floor":"\u5730\u677F\u4E0A\u5411\u4E0B\u6700\u5927\u901F\u5EA6","Rectangular 2D grid":"\u77E9\u5F62 2D \u7DB2\u683C","Snap objects on a virtual grid.":"\u5728\u865B\u64EC\u7DB2\u683C\u4E0A\u6355\u6349\u5C0D\u8C61\u3002","Snap object to a virtual grid (i.e: this is not the grid used in the editor).":"\u5C07\u5C0D\u8C61\u6355\u6349\u5230\u865B\u64EC\u7DB2\u683C\uFF08\u5373\uFF1A\u4E0D\u662F\u7DE8\u8F2F\u5668\u4E2D\u4F7F\u7528\u7684\u7DB2\u683C\uFF09\u3002","Snap objects to a virtual grid":"\u5C07\u5C0D\u8C61\u6355\u6349\u5230\u865B\u64EC\u7DB2\u683C","Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","Speed restrictions":"\u901F\u5EA6\u9650\u5236","Limit the maximum movement and rotation speed of an object from forces or the 2D Physics behavior.":"\u9650\u5236\u7269\u9AD4\u6700\u5927\u79FB\u52D5\u548C\u65CB\u8F49\u901F\u5EA6\uFF0C\u4F86\u81EA\u65BC\u529B\u6216 2D \u7269\u7406\u884C\u70BA\u3002","Limit the maximum speed an object will move from (non-physics) forces.":"Limit the maximum speed an object will move from (non-physics) forces.","Enforce max movement speed":"\u5F37\u5236\u6700\u5927\u904B\u52D5\u901F\u5EA6","Maximum speed (pixels/second)":"\u6700\u5927\u901F\u5EA6\uFF08\u6BCF\u79D2\u50CF\u7D20\uFF09","Limit the maximum speed an object will move from physics forces.":"\u9650\u5236\u7269\u9AD4\u5C07\u5F9E\u7269\u7406\u529B\u79FB\u52D5\u7684\u6700\u5927\u901F\u5EA6\u3002","Enforce max movement speed (physics)":"\u57F7\u884C\u6700\u5927\u79FB\u52D5\u901F\u5EA6\uFF08\u7269\u7406\uFF09","Limit the maximum rotation speed of an object from physics forces.":"\u9650\u5236\u7269\u9AD4\u7684\u6700\u5927\u65CB\u8F49\u901F\u5EA6\u4F86\u81EA\u7269\u7406\u529B\u3002","Enforce max rotation speed (physics)":"\u57F7\u884C\u6700\u5927\u65CB\u8F49\u901F\u5EA6\uFF08\u7269\u7406\uFF09","Maximum rotation speed (degrees/second)":"\u6700\u5927\u65CB\u8F49\u901F\u5EA6\uFF08\u5EA6/\u79D2\uFF09","Object Masking":"\u5C0D\u8C61\u906E\u7F69","Use a sprite or a shape painter to mask another object.":"\u4F7F\u7528\u7CBE\u9748\u6216\u5F62\u72C0\u7E6A\u88FD\u5668\u4F86\u906E\u7F69\u53E6\u4E00\u500B\u5C0D\u8C61\u3002","Define a sprite as a mask of an object.":"\u5C07\u4E00\u500B\u7CBE\u9748\u5B9A\u7FA9\u70BA\u7269\u9AD4\u7684\u906E\u7F69\u3002","Mask an object with a sprite":"\u4F7F\u7528\u7CBE\u9748\u7684\u906E\u7F69\u7269\u9AD4","Sprite object to use as a mask":"\u7528\u4F5C\u906E\u7F69\u7684\u7CBE\u9748\u7269\u9AD4","Remove the mask of the specified object.":"\u522A\u9664\u6307\u5B9A\u7269\u9AD4\u7684\u906E\u7F69\u3002","Remove the mask":"\u79FB\u9664\u906E\u7F69","Remove the mask of _PARAM1_":"\u79FB\u9664_PARAM1_\u7684\u906E\u7F69","Object with a mask to remove":"\u5177\u6709\u8981\u79FB\u9664\u906E\u7F69\u7684\u7269\u9AD4","Multitouch joystick and buttons (sprite)":"\u591A\u9EDE\u89F8\u63A7\u6416\u687F\u548C\u6309\u9215\uFF08\u7CBE\u9748\uFF09","Joysticks or buttons for touchscreens.":"\u89F8\u5C4F\u7684\u6416\u687F\u6216\u6309\u9215\u3002","Check if a button was just pressed on a multitouch controller.":"\u6AA2\u67E5\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u4E0A\u662F\u5426\u525B\u525B\u6309\u4E0B\u4E86\u4E00\u500B\u6309\u9215\u3002","Multitouch controller button just pressed":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6309\u9215\u525B\u525B\u88AB\u6309\u4E0B","Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668 _PARAM1_ \u7684\u6309\u9215 _PARAM2_ \u525B\u525B\u88AB\u6309\u4E0B","Multitouch controller identifier (1, 2, 3, 4...)":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u8B58\u5225\u7B26\uFF081, 2, 3, 4...\uFF09","Button name":"\u6309\u9215\u540D\u7A31","Check if a button is pressed on a multitouch controller.":"\u6AA2\u67E5\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u4E0A\u662F\u5426\u6309\u4E0B\u4E86\u4E00\u500B\u6309\u9215\u3002","Multitouch controller button pressed":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6309\u9215\u5DF2\u6309\u4E0B","Button _PARAM2_ of multitouch controller _PARAM1_ is pressed":"_PARAM1_\u7684\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6309\u9215_PARAM2_\u5DF2\u6309\u4E0B","Check if a button is released on a multitouch controller.":"\u6AA2\u67E5\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u4E0A\u7684\u6309\u9215\u662F\u5426\u88AB\u91CB\u653E\u3002","Multitouch controller button released":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6309\u9215\u5DF2\u91CB\u653E","Button _PARAM2_ of multitouch controller _PARAM1_ is released":"_PARAM1_\u7684\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6309\u9215_PARAM2_\u5DF2\u91CB\u653E","Change a button state for a multitouch controller.":"\u66F4\u6539\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u7684\u6309\u9215\u72C0\u614B\u3002","Button state":"\u6309\u9215\u72C0\u614B","Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_":"\u5C07\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u7684\u6309\u9215_PARAM2_\u6A19\u8A18\u70BA\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668_PARAM1\u7684_PARAM3_","Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"\u66F4\u6539\u6416\u687F\u7684\u6B7B\u5340\u534A\u5F91\u3002\u6B7B\u5340\u662F\u4E00\u500B\u5340\u57DF\uFF0C\u6416\u6746\u7684\u79FB\u52D5\u4E0D\u6703\u88AB\u8A08\u5165\uFF08\u4EE3\u4E4B\u4EE5\u6416\u687F\u8996\u70BA\u672A\u79FB\u52D5\uFF09\u3002","Dead zone radius":"\u6B7B\u5340\u534A\u5F91","Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"\u5C07\u591A\u9EDE\u89F8\u63A7\u6416\u687F_PARAM2_\u7684\u6B7B\u5340\u66F4\u6539\u70BA\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668_PARAM1\u7684_PARAM3_","Joystick name":"\u6416\u687F\u540D\u7A31","Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"\u8FD4\u56DE\u6416\u687F\u7684\u6B7B\u5340\u534A\u5F91\u3002 \u6B7B\u5340\u662F\u4E00\u500B\u5340\u57DF\uFF0C\u6416\u687F\u7684\u79FB\u52D5\u4E0D\u6703\u88AB\u8003\u616E\u5728\u5167\uFF08\u76F8\u53CD\uFF0C\u6416\u687F\u5C07\u88AB\u8996\u70BA\u672A\u79FB\u52D5\uFF09\u3002","Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_":"\u66F4\u6539\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668 _PARAM1_ \u7684\u591A\u9EDE\u89F8\u63A7\u6416\u687F _PARAM2_ \u6B7B\u5340\u70BA _PARAM3_","the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).":"\u89D2\u5EA6\u7684\u65B9\u5411\u7D22\u5F15\uFF08\u5DE6=1\uFF0C\u4E0B=1\uFF0C\u53F3=2\uFF0C\u4E0A=3\uFF09\u3002","Angle to 4-way index":"\u89D2\u5EA6\u52304\u65B9\u4F4D\u7D22\u5F15","The angle _PARAM1_ 4-way index":"_PARAM1_ \u7684\u89D2\u5EA64\u65B9\u4F4D\u7D22\u5F15","the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).":"\u89D2\u5EA6\u7684\u65B9\u5411\u7D22\u5F15\uFF08\u5DE6=1\uFF0C\u5DE6\u4E0B=1... \u5DE6\u4E0A=7\uFF09","Angle to 8-way index":"\u89D2\u5EA6\u52308\u65B9\u4F4D\u7D22\u5F15","The angle _PARAM1_ 8-way index":"_PARAM1_ \u7684\u89D2\u5EA68\u65B9\u4F4D\u7D22\u5F15","Check if angle is in a given direction.":"\u6AA2\u67E5\u89D2\u5EA6\u662F\u5426\u662F\u7D66\u5B9A\u65B9\u5411\u3002","Angle 4-way direction":"\u89D2\u5EA64\u65B9\u5411","The angle _PARAM1_ is the 4-way direction _PARAM2_":"_PARAM1_\u7684\u89D2\u5EA6\u662F4\u65B9\u5411_PARAM2_","Angle 8-way direction":"\u89D2\u5EA68\u65B9\u5411","The angle _PARAM1_ is the 8-way direction _PARAM2_":"_PARAM1_\u7684\u89D2\u5EA6\u662F8\u65B9\u5411_PARAM2_","Check if joystick is pushed in a given direction.":"\u6AA2\u67E5\u6416\u687F\u662F\u5426\u5411\u6307\u5B9A\u65B9\u5411\u63A8\u52D5\u3002","Joystick pushed in a direction (4-way)":"\u6416\u687F\u5411\u65B9\u5411\u63A8\u52D5\uFF084\u65B9\u5411\uFF09","Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u6416\u687F_PARAM2_\u5411\u6307\u5B9A\u65B9\u5411_PARAM3_\u63A8\u52D5","Joystick pushed in a direction (8-way)":"\u6416\u687F\u5411\u65B9\u5411\u63A8\u52D5\uFF088\u65B9\u5411\uFF09","the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"\u62C7\u6307\u5F9E\u6416\u687F\u4E2D\u5FC3\u62C9\u958B\u7684\u767E\u5206\u6BD4\uFF08\u7BC4\u570D\uFF1A0\u52301\uFF09\u3002","Joystick force (deprecated)":"\u6416\u687F\u529B\uFF08\u5DF2\u68C4\u7528\uFF09","Joystick _PARAM2_ of multitouch controller _PARAM1_ force":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668_PARAM1__PARAM2__\u6416\u687F\u529B","the force of multitouch contoller stick (from 0 to 1).":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6416\u687F\u529B\uFF08\u7BC4\u570D\uFF1A0\u52301\uFF09\u3002","multitouch controller _PARAM1_ _PARAM2_ stick force":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668 _PARAM1__PARAM2_ \u6416\u687F\u529B","Stick name":"\u6416\u687F\u540D\u7A31","Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"\u66F4\u6539\u62C7\u6307\u5DF2\u5F9E\u6416\u687F\u4E2D\u5FC3\u62C9\u958B\u7684\u767E\u5206\u6BD4\uFF08\u7BC4\u570D\uFF1A0\u52301\uFF09\u3002","Joystick force":"\u6416\u687F\u529B","Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"\u66F4\u6539\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u64CD\u7E31\u6746_PARAM2_\u7684\u529B\u91CF\u70BA_PARAM3_","Return the angle the joystick is pointing towards (Range: -180 to 180).":"\u8FD4\u56DE\u64CD\u7E31\u6746\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u7BC4\u570D\uFF1A-180\u81F3180\uFF09\u3002","Joystick angle (deprecated)":"\u64CD\u7E31\u6746\u89D2\u5EA6\uFF08\u5DF2\u68C4\u7528\uFF09","Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).":"\u8FD4\u56DE\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u64CD\u7E31\u6746\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u7BC4\u570D\uFF1A-180\u81F3180\uFF09\u3002","Change the angle the joystick is pointing towards (Range: -180 to 180).":"\u66F4\u6539\u64CD\u7E31\u6746\u6307\u5411\u7684\u89D2\u5EA6\u70BA\uFF08\u7BC4\u570D\uFF1A-180\u81F3180\uFF09\u3002","Joystick angle":"\u64CD\u7E31\u6746\u89D2\u5EA6","Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"\u66F4\u6539\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668_PARAM1_\u7684\u64CD\u7E31\u6746_PARAM2_\u7684\u89D2\u5EA6\u70BA_PARAM3_","Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).":"\u8FD4\u56DE\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u64CD\u7EB5\u6746\u5728X\u8F74\u4E0A\u7684\u529B\u91CF\uFF08\u4ECE\u6700\u5DE6\u7AEF\u7684-1\u5230\u6700\u53F3\u7AEF\u76841\uFF09\u3002","Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).":"\u8FD4\u56DE\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u64CD\u7EB5\u6746\u5728Y\u8F74\u4E0A\u7684\u529B\u91CF\uFF08\u4ECE\u9876\u90E8\u7684-1\u5230\u5E95\u90E8\u76841\uFF09\u3002","Check if a new touch has started on the right or left side of the screen.":"\u6AA2\u67E5\u65B0\u89F8\u63A7\u662F\u5426\u5728\u87A2\u5E55\u7684\u53F3\u5074\u6216\u5DE6\u5074\u958B\u59CB\u3002","New touch on a screen side":"\u87A2\u5E55\u908A\u7DE3\u7684\u65B0\u89F8\u63A7","A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer":"\u87A2\u5E55 _PARAM1_ \u7684\u5716\u5C64\u4E0A\u7684 _PARAM2_ \u908A\u6709\u4E00\u500B\u65B0\u7684\u89F8\u63A7\u958B\u59CB","Multitouch joystick":"\u591A\u9EDE\u89F8\u63A7\u64CD\u7E31\u6746","Screen side":"\u87A2\u5E55\u908A\u7DE3","Joystick that can be controlled by interacting with a touchscreen.":"\u64CD\u7E31\u6746\u53EF\u901A\u904E\u89F8\u63A7\u64CD\u4F5C\u4F86\u63A7\u5236\u7684\u64CD\u7E31\u6746\u3002","Multitouch Joystick":"\u591A\u9EDE\u89F8\u63A7\u64CD\u7E31\u6746","Dead zone radius (range: 0 to 1)":"\u6B7B\u5340\u534A\u5F91\uFF08\u7BC4\u570D\uFF1A0\u81F31\uFF09","The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)":"\u6B7B\u5340\u662F\u4E0D\u8A08\u5165\u64CD\u7E31\u6746\u79FB\u52D5\u7684\u5340\u57DF\uFF08\u800C\u662F\u5C07\u64CD\u7E31\u6746\u8996\u70BA\u672A\u79FB\u52D5\uFF09","Joystick angle (range: -180 to 180)":"\u64CD\u7E31\u6746\u89D2\u5EA6\uFF08\u7BC4\u570D\uFF1A-180\u81F3180\uFF09","Joystick force (range: 0 to 1)":"\u64CD\u7E31\u6746\u529B\u91CF\uFF08\u7BC4\u570D\uFF1A0\u81F31\uFF09","the joystick force (from 0 to 1).":"\u6416\u687F\u529B\u9053\uFF08\u5F9E 0 \u5230 1\uFF09\u3002","the joystick force":"\u6416\u687F\u529B\u9053","Change the joystick angle of _PARAM0_ to _PARAM2_":"\u5C07 _PARAM0_ \u7684\u6416\u687F\u89D2\u5EA6\u66F4\u6539\u70BA _PARAM2_","Return the stick force on X axis (from -1 at the left to 1 at the right).":"\u8FD4\u56DE X \u8EF8\u4E0A\u7684\u6416\u687F\u529B\u91CF\uFF08\u5F9E\u5DE6\u908A\u7684 -1 \u5230\u53F3\u908A\u7684 1\uFF09\u3002","Return the stick force on Y axis (from -1 at the top to 1 at the bottom).":"\u8FD4\u56DE Y \u8EF8\u4E0A\u7684\u6416\u687F\u529B\u91CF\uFF08\u5F9E\u9802\u90E8\u7684 -1 \u5230\u5E95\u90E8\u7684 1\uFF09\u3002","Joystick pushed in a direction (4-way movement)":"\u6416\u687F\u5728\u67D0\u500B\u65B9\u5411\u88AB\u6309\u4E0B\uFF08\u56DB\u65B9\u4F4D\u79FB\u52D5\uFF09","_PARAM0_ is pushed in direction _PARAM2_":"_PARAM0_ \u5728\u65B9\u5411 _PARAM2_ \u88AB\u6309\u4E0B","Joystick pushed in a direction (8-way movement)":"\u6416\u687F\u5728\u67D0\u500B\u65B9\u5411\u88AB\u6309\u4E0B\uFF08\u516B\u65B9\u4F4D\u79FB\u52D5\uFF09","Check if a joystick is pressed.":"\u6AA2\u67E5\u662F\u5426\u6709\u6416\u687F\u88AB\u6309\u4E0B\u3002","Joystick pressed":"\u6416\u687F\u88AB\u6309\u4E0B","Joystick _PARAM0_ is pressed":"_PARAM0_ \u7684\u6416\u687F\u88AB\u6309\u4E0B","Reset the joystick values (except for angle, which stays the same)":"\u91CD\u8A2D\u6416\u687F\u503C\uFF08\u9664\u89D2\u5EA6\u5916\u4FDD\u6301\u4E0D\u8B8A\uFF09","Reset":"\u91CD\u8A2D","Reset the joystick of _PARAM0_":"\u91CD\u8A2D _PARAM0_ \u7684\u6416\u687F","the multitouch controller identifier.":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u8B58\u5225\u78BC\u3002","Multitouch controller identifier":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u8B58\u5225\u78BC","the multitouch controller identifier":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u8B58\u5225\u7B26","the joystick name.":"\u6416\u687F\u540D\u7A31\u3002","the joystick name":"\u6416\u687F\u540D\u7A31","the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"\u6416\u687F\u7684\u6B7B\u5340\u534A\u5F91\uFF08\u7BC4\u570D\uFF1A0\u52301\uFF09\u3002\u6B7B\u5340\u662F\u6416\u687F\u4E0A\u7684\u904B\u52D5\u4E0D\u6703\u88AB\u8003\u616E\u7684\u5340\u57DF\uFF08\u76F8\u53CD\uFF0C\u6416\u687F\u6703\u88AB\u8996\u70BA\u672A\u79FB\u52D5\uFF09\u3002","the dead zone radius":"\u6B7B\u5340\u534A\u5F91","Force the joystick into the pressing state.":"\u5F37\u5236\u6416\u687F\u9032\u5165\u6309\u58D3\u72C0\u614B\u3002","Force start pressing":"\u5F37\u5236\u958B\u59CB\u6309\u58D3","Force start pressing _PARAM0_ with touch identifier: _PARAM2_":"\u4F7F\u7528\u89F8\u63A7\u8B58\u5225\u7B26_PARAM2_\uFF0C\u5F37\u5236\u6309\u58D3_PARAM0_","Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.":"\u6AA2\u6E2C\u5C0D\u7269\u4EF6\u89F8\u63A7\u87A2\u5E55\u7684\u6309\u58D3\uFF0C\u4F7F\u5176\u5982\u540C\u6309\u9215\u4E00\u822C\u904B\u4F5C\uFF0C\u4E26\u81EA\u52D5\u89F8\u767C\u64C1\u6709\u76F8\u540C\u8B58\u5225\u78BC\u7684\u6309\u9215\u4EE5\u7B26\u5408\u5C0D\u61C9\u7684\u884C\u70BA\u3002","Multitouch button":"\u591A\u9EDE\u89F8\u63A7\u6309\u9215","Button identifier":"\u6309\u9215\u6A19\u8B58","TouchID":"TouchID","Button released":"\u6309\u9215\u91CB\u653E","Button just pressed":"\u6309\u9215\u525B\u525B\u88AB\u6309\u4E0B","Triggering circle radius":"\u89F8\u767C\u5713\u534A\u5F91","This circle adds up to the object collision mask.":"\u6B64\u5713\u6DFB\u52A0 \u5230\u7269\u9AD4\u78B0\u649E\u906E\u7F69\u3002","Check if the button was just pressed.":"\u6AA2\u67E5\u6309\u9215\u662F\u5426\u525B\u525B\u88AB\u6309\u4E0B\u3002","Button _PARAM0_ was just pressed":"\u6309\u9215 _PARAM0_ \u525B\u525B\u88AB\u6309\u4E0B","Check if the button is pressed.":"\u6AA2\u67E5\u6309\u9215\u662F\u5426\u88AB\u6309\u4E0B\u3002","Button pressed":"\u6309\u9215\u88AB\u6309\u4E0B","Button _PARAM0_ is pressed":"\u6309\u9215_PARAM0_\u5DF2\u6309\u4E0B","Check if the button is released.":"\u6AA2\u67E5\u6309\u9215\u662F\u5426\u88AB\u91CB\u653E\u3002","Button _PARAM0_ is released":"\u6309\u9215 _PARAM0_ \u5DF2\u91CB\u653E","Mark the button _PARAM0_ as _PARAM2_":"\u5C07\u6309\u9215_PARAM0_\u6A19\u8A18\u70BA_PARAM2_","Control a platformer character with a multitouch controller.":"\u4F7F\u7528\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u63A7\u5236\u5E73\u53F0\u904A\u6232\u89D2\u8272\u3002","Platformer multitouch controller mapper":"\u5E73\u53F0\u904A\u6232\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6620\u5C04\u5668","Platform character behavior":"\u5E73\u53F0\u89D2\u8272\u884C\u70BA","Controller identifier (1, 2, 3, 4...)":"\u63A7\u5236\u5668\u8B58\u5225\u7B26\uFF081, 2, 3, 4...\uFF09","Jump button name":"\u8DF3\u8E8D\u6309\u9215\u540D\u7A31","Control a 3D physics character with a multitouch controller.":"\u4F7F\u7528\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u63A7\u52363D\u7269\u7406\u89D2\u8272\u3002","3D platformer multitouch controller mapper":"3D\u5E73\u53F0\u904A\u6232\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6620\u5C04","3D shooter multitouch controller mapper":"3D\u5C04\u64CA\u904A\u6232\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6620\u5C04","Control camera rotations with a multitouch controller.":"\u4F7F\u7528\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u63A7\u5236\u651D\u50CF\u982D\u65CB\u8F49\u3002","First person camera multitouch controller mapper":"\u7B2C\u4E00\u4EBA\u7A31\u651D\u5F71\u6A5F\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6620\u5C04","Control a 3D physics car with a multitouch controller.":"Control a 3D physics car with a multitouch controller.","3D car multitouch controller mapper":"3D car multitouch controller mapper","Steer joystick":"Steer joystick","Speed joystick":"Speed joystick","Hand brake button name":"Hand brake button name","Control a top-down character with a multitouch controller.":"\u4F7F\u7528\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u63A7\u5236\u4FEF\u8996\u89D2\u8272\u3002","Top-down multitouch controller mapper":"\u4FEF\u8996\u904A\u6232\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6620\u5C04","Joystick for touchscreens.":"\u89F8\u63A7\u5C4F\u5E55\u6416\u687F\u3002","Pass the object property values to the behavior.":"\u5C07\u5C0D\u8C61\u5C6C\u6027\u503C\u50B3\u905E\u7D66\u884C\u70BA\u3002","Update configuration":"\u66F4\u65B0\u914D\u7F6E","Update the configuration of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u914D\u7F6E","Show the joystick until it is released.":"\u986F\u793A\u6416\u687F\u76F4\u5230\u91CB\u653E\u3002","Show and start pressing":"\u986F\u793A\u4E26\u958B\u59CB\u6309\u58D3","Show _PARAM0_ at the cursor position and start pressing":"\u5728\u5149\u6A19\u4F4D\u7F6E\u986F\u793A_PARAM0_\u4E26\u958B\u59CB\u6309\u58D3","Return the X position of a specified touch":"\u8FD4\u56DE\u6307\u5B9A\u89F8\u6478\u7684X\u4F4D\u7F6E","Touch X position (on parent)":"\u89F8\u63A7X\u4F4D\u7F6E\uFF08\u5728\u7236\u8996\u7A97\u4E0A\uFF09","De/activate control of the joystick.":"\u555F\u7528/\u505C\u7528\u6416\u687F\u63A7\u5236\u3002","De/activate control":"\u555F\u7528/\u505C\u7528\u63A7\u5236","Activate control of _PARAM0_: _PARAM1_":"\u555F\u7528_PARAM0_\u7684\u63A7\u5236\uFF1A_PARAM1_","Check if a stick is pressed.":"\u6AA2\u67E5\u6416\u687F\u662F\u5426\u88AB\u6309\u4E0B\u3002","Stick pressed":"\u6416\u687F\u5DF2\u88AB\u6309\u4E0B","Stick _PARAM0_ is pressed":"\u6416\u687F_PARAM0_\u5DF2\u88AB\u6309\u4E0B","the strick force (from 0 to 1).":"\u6416\u687F\u529B\uFF08\u5F9E0\u52301\uFF09\u3002","the stick force":"\u6416\u687F\u529B","the stick force on X axis (from -1 at the left to 1 at the right).":"\u64FA\u687FX\u8EF8\u7684\u6416\u687F\u529B\uFF08\u7BC4\u570D\u5F9E-1\u52301\uFF0C\u5728\u5DE6\u5074-1\u5230\u53F3\u50741\uFF09\u3002","the stick X force":"\u6416\u687FX\u6416\u687F\u529B","the stick force on Y axis (from -1 at the top to 1 at the bottom).":"Y\u8EF8\u4E0A\u7684\u64CD\u7E31\u687F\u529B\u91CF\uFF08\u5F9E\u9802\u90E8\u7684-1\u5230\u5E95\u90E8\u76841\uFF09\u3002","the stick Y force":"\u64CD\u7E31\u687FY\u8EF8\u529B\u91CF","Return the angle the joystick is pointing towards (from -180 to 180).":"\u8FD4\u56DE\u64CD\u7E31\u687F\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u5F9E-180\u5230180\uFF09\u3002","Return the angle the stick is pointing towards (from -180 to 180).":"\u8FD4\u56DE\u64CD\u7E31\u687F\u6307\u5411\u7684\u89D2\u5EA6\uFF08\u5F9E-180\u5230180\uFF09\u3002","_PARAM0_ is pushed in direction _PARAM1_":"_PARAM0_\u4EE5_DIRECTION _PARAM1_\u88AB\u63A8\u52D5\u3002","the multitouch controller identifier (1, 2, 3, 4...).":"\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u8B58\u5225\u7B26\uFF081, 2, 3, 4...\uFF09\u3002","the joystick name of the object.":"\u7269\u4EF6\u7684\u64CD\u7E31\u687F\u540D\u7A31\u3002","the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"\u64CD\u7E31\u687F\u7684\u6B7B\u5340\u534A\u5F91\uFF08\u7BC4\u570D\uFF1A0\u52301\uFF09\u3002\u6B7B\u5340\u662F\u5728\u8A72\u5340\u57DF\u5167\u79FB\u52D5\u64CD\u7E31\u687F\u4E0D\u6703\u88AB\u8003\u616E\uFF08\u76F8\u53CD\uFF0C\u64CD\u7E31\u687F\u88AB\u8996\u70BA\u672A\u79FB\u52D5\uFF09\u3002","Sprite Sheet Animations":"\u7CBE\u9748\u8868\u52D5\u756B","Animate a tiled sprite from a sprite sheet.":"\u5F9E\u7CBE\u9748\u8868\u52D5\u756B\u4E2D\u52D5\u756B\u5E73\u92EA\u7684\u7CBE\u9748\u3002","Animates a sprite sheet using JSON (see extension description).":"\u4F7F\u7528JSON\u64AD\u653E\u7CBE\u9748\u5716\u7247\u8868\uFF08\u8ACB\u53C3\u898B\u64F4\u5C55\u63CF\u8FF0\uFF09\u3002","JSON sprite sheet animator":"\u4F7F\u7528JSON\u7CBE\u9748\u8868\u52D5\u756B","JSON formatted text describing the sprite sheet":"\u63CF\u8FF0\u7CBE\u9748\u8868\u7684JSON\u683C\u5F0F\u6587\u672C","Current animation":"\u7576\u524D\u52D5\u756B","Current frame of the animation":"\u7576\u524D\u52D5\u756B\u7684\u756B\u9762","Currently displayed frame name":"\u7576\u524D\u986F\u793A\u7684\u756B\u9762\u540D\u7A31","Speed of the animation (in seconds)":"\u52D5\u756B\u901F\u5EA6\uFF08\u79D2\uFF09","Loads the JSON data into the behavior":"\u5C07JSON\u6578\u64DA\u52A0\u8F09\u5230\u884C\u70BA\u4E2D","Load the JSON":"\u52A0\u8F09JSON","Load the JSON of _PARAM0_":"\u52A0\u8F09_PARAM0_\u7684JSON","Update the object attached to the behavior using the latest properties values.":"\u4F7F\u7528\u6700\u65B0\u7684\u5C6C\u6027\u503C\u66F4\u65B0\u9644\u52A0\u5230\u884C\u70BA\u7684\u5C0D\u8C61\u3002","Update the object":"\u66F4\u65B0\u5C0D\u8C61","Update object _PARAM0_ with properties of _PARAM1_":"\u4F7F\u7528_PARAM1_\u7684\u5C6C\u6027\u66F4\u65B0_PARAM0_\u5C0D\u8C61","Updates the animation frame.":"\u66F4\u65B0\u52D5\u756B\u5E40\u3002","Update the animation frame":"\u66F4\u65B0\u52D5\u756B\u5E40","Update the current animation frame of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u7576\u524D\u52D5\u756B\u5E40\u66F4\u65B0\u70BA_PARAM2_","The frame to set to":"\u8981\u8A2D\u7F6E\u7684\u5E40","Loads a new JSON spritesheet data into the behavior.":"\u5C07\u65B0\u7684JSON\u7CBE\u9748\u8868\u6578\u64DA\u52A0\u8F09\u5230\u884C\u70BA\u4E2D\u3002","Load data from a JSON resource":"\u5F9EJSON\u8CC7\u6E90\u52A0\u8F09\u6578\u64DA","Load JSON spritesheet data for _PARAM0_ from _PARAM2_":"\u5F9E_PARAM2_\u70BA_PARAM0_\u52A0\u8F09JSON\u7CBE\u9748\u8868\u6578\u64DA","The JSON to load":"\u8981\u52A0\u8F09\u7684JSON","Display one frame without animating the object.":"\u986F\u793A\u4E00\u500B\u5E40\u800C\u4E0D\u57F7\u884C\u5C0D\u8C61\u7684\u52D5\u756B\u3002","Display a frame":"\u986F\u793A\u4E00\u500B\u5E40","Display frame _PARAM2_ of _PARAM0_":"\u986F\u793A_PARAM0_\u7684\u5E40_PARAM2_","The frame to display":"\u8981\u986F\u793A\u7684\u5E40","Play an animation from the sprite sheet.":"\u5F9E\u7CBE\u9748\u8868\u4E2D\u64AD\u653E\u52D5\u756B\u3002","Play Animation":"\u64AD\u653E\u52D5\u756B","Play animation _PARAM2_ of _PARAM0_":"\u64AD\u653E_PARAM2_\u7684_PARAM0_\u52D5\u756B","The name of the animation":"\u52D5\u756B\u7684\u540D\u7A31","The name of the current animation. __null if no animation is playing.":"\u7576\u524D\u52D5\u756B\u7684\u540D\u7A31\u3002\u5982\u679C\u6C92\u6709\u6B63\u5728\u64AD\u653E\u7684\u52D5\u756B\uFF0C\u5247\u70BAnull\u3002","If Current Frame of _PARAM0_ = _PARAM2_":"\u5982\u679C_PARAM0_\u7684\u7576\u524D\u5E40=_PARAM2_\u3002","The name of the currently displayed frame.":"\u7576\u524D\u986F\u793A\u7684\u5E40\u540D\u7A31\u3002","Current frame":"\u7576\u524D\u5E40","Pause the animation of a sprite sheet.":"\u66AB\u505C\u7CBE\u9748\u8868\u52D5\u756B\u3002","Pause animation":"\u66AB\u505C\u52D5\u756B","Pause the current animation of _PARAM0_":"\u66AB\u505C_PARAM0_\u7684\u7576\u524D\u52D5\u756B","Resume a paused animation of a sprite sheet.":"\u6062\u5FA9\u7CBE\u9748\u8868\u52D5\u756B\u7684\u66AB\u505C\u3002","Resume animation":"\u6062\u5FA9\u52D5\u756B","Resume the current animation of _PARAM0_":"\u6062\u5FA9_PARAM0_\u7684\u7576\u524D\u52D5\u756B\u3002","Animates a vertical (top to bottom) sprite sheet.":"\u64AD\u653E\u5782\u76F4\uFF08\u81EA\u4E0A\u800C\u4E0B\uFF09\u7CBE\u9748\u8868\u3002","Vertical sprite sheet animator":"\u5782\u76F4\u7CBE\u9748\u8868\u52D5\u756B","Horizontal width of sprite (in pixels)":"\u7CBE\u9748\u7684\u6C34\u5E73\u5BEC\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Vertical height of sprite (in pixels)":"\u7CBE\u9748\u7684\u5782\u76F4\u9AD8\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Empty space between each sprite (in pixels)":"\u6BCF\u500B\u7CBE\u9748\u4E4B\u9593\u7684\u7A7A\u767D\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Column of the animation":"\u52D5\u756B\u7684\u5217","First Frame of the animation":"\u52D5\u756B\u7684\u7B2C\u4E00\u5E40","Last Frame of the animation":"\u52D5\u756B\u7684\u6700\u5F8C\u4E00\u5E40","Current Frame of the animation":"\u7576\u524D\u52D5\u756B\u5E40","Set the animation frame.":"\u8A2D\u7F6E\u52D5\u756B\u5E40\u3002","Set the animation frame":"\u8A2D\u7F6E\u52D5\u756B\u5E40","Set the current frame of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u7576\u524D\u5E40\u8A2D\u7F6E\u70BA_PARAM2_\u3002","The frame":"\u7576\u524D\u5E40","Play animation":"\u64AD\u653E\u52D5\u756B","Play animation of _PARAM0_ on column _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"\u4EE5\u901F\u5EA6_PARAM4_\u64AD\u653E_PARAM0_\u7684_PARAM5_\u5F9E\u5E40_PARAM2_\u5230\u5E40_PARAM3_\u7684\u52D5\u756B","First frame of the animation":"\u52D5\u756B\u7684\u7B2C\u4E00\u5E40","Last frame of the animation":"\u52D5\u756B\u7684\u6700\u5F8C\u4E00\u5E40","Duration for each frame (seconds)":"\u6BCF\u5E40\u7684\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09","The column containing the animation":"\u5305\u542B\u52D5\u756B\u7684\u5217","The current frame of the current animation.":"\u7576\u524D\u52D5\u756B\u7684\u7576\u524D\u5E40\u3002","Pause the animation of _PARAM0_":"\u66AB\u505C_PARAM0_\u7684\u52D5\u756B","Animates a horizontal (left to right) sprite sheet.":"\u64AD\u653E\u6C34\u5E73\uFF08\u5F9E\u5DE6\u5230\u53F3\uFF09\u7CBE\u9748\u8868\u3002","Horizontal sprite sheet animator":"\u6C34\u5E73\u7CBE\u9748\u8868\u52D5\u756B","Row of the animation":"\u52D5\u756B\u7684\u884C","Play animation of _PARAM0_ on row _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"\u4EE5_SPEED4_\u901F\u5EA6\u5728\u5217_PARAM5_\u4E0A_PARAM2_\u5230_PARAM3_\u5E40\u64AD\u653E_PARAM0_\u7684\u52D5\u756B","Last Frame of animation":"\u52D5\u756B\u7684\u6700\u5F8C\u4E00\u5E40","What row is the animation in":"\u52D5\u756B\u5728\u54EA\u4E00\u884C","Toggle switch":"\u5207\u63DB\u958B\u95DC","Toggle switch that users can click or touch.":"\u7528\u6236\u53EF\u4EE5\u55AE\u64CA\u6216\u89F8\u6478\u7684\u5207\u63DB\u958B\u95DC\u3002","The finite state machine used internally by the switch object.":"\u958B\u95DC\u7269\u4EF6\u5167\u90E8\u4F7F\u7528\u7684\u6709\u9650\u72C0\u614B\u6A5F\u3002","Switch finite state machine":"\u958B\u95DC\u6709\u9650\u72C0\u614B\u6A5F","Check if the toggle switch is checked.":"\u6AA2\u67E5\u5207\u63DB\u958B\u95DC\u662F\u5426\u5DF2\u9078\u64C7\u3002","Check if the toggle switch was checked in the current frame.":"\u6AA2\u67E5\u5728\u7576\u524D\u5E40\u5207\u63DB\u958B\u95DC\u662F\u5426\u5DF2\u9078\u64C7\u3002","Has just been checked":"\u525B\u525B\u88AB\u9078\u4E2D","_PARAM0_ has just been checked":"_PARAM0_\u525B\u525B\u88AB\u9078\u4E2D","Check if the toggle switch was unchecked in the current frame.":"\u6AA2\u67E5\u5728\u7576\u524D\u5E40\u5207\u63DB\u958B\u95DC\u662F\u5426\u5DF2\u53D6\u6D88\u9078\u64C7\u3002","Has just been unchecked":"\u525B\u525B\u88AB\u53D6\u6D88\u9078\u4E2D","_PARAM0_ has just been unchecked":"_PARAM0_\u525B\u525B\u88AB\u53D6\u6D88\u9078\u4E2D","Check if the toggle switch was toggled in the current frame.":"\u6AA2\u67E5\u5728\u7576\u524D\u5E40\u5207\u63DB\u958B\u95DC\u662F\u5426\u5DF2\u5207\u63DB\u3002","Has just been toggled":"\u525B\u525B\u88AB\u5207\u63DB","_PARAM0_ has just been toggled":"_PARAM0_\u525B\u525B\u88AB\u5207\u63DB","Check (or uncheck) the toggle switch.":"\u6AA2\u67E5\uFF08\u6216\u53D6\u6D88\u9078\u4E2D\uFF09\u5207\u63DB\u958B\u95DC\u3002","Check (or uncheck)":"\u6AA2\u67E5\uFF08\u6216\u53D6\u6D88\u52FE\u9078\uFF09","Check _PARAM0_: _PARAM2_":"\u6AA2\u67E5_PARAM0_\uFF1A_PARAM2_","IsChecked":"\u5DF2\u52FE\u9078","Toggle the switch.":"\u5207\u63DB\u958B\u95DC\u3002","Toggle":"\u5207\u63DB","Toggle _PARAM0_":"\u5207\u63DB_PARAM0_","A toggle switch that users can click or touch.":"\u7528\u6236\u53EF\u4EE5\u9EDE\u64CA\u6216\u89F8\u6478\u7684\u958B\u95DC\u3002","Check if the toggle switch was checked or unchecked in the current frame.":"\u5728\u7576\u524D\u5E40\u4E2D\u6AA2\u67E5\u5207\u63DB\u958B\u95DC\u662F\u5426\u5DF2\u88AB\u52FE\u9078\u6216\u53D6\u6D88\u52FE\u9078\u3002","Check _PARAM0_: _PARAM1_":"\u6AA2\u67E5_PARAM0_\uFF1A_PARAM1_","Update the state animation.":"\u66F4\u65B0\u72C0\u614B\u52D5\u756B\u3002","Update state animation":"\u66F4\u65B0\u72C0\u614B\u52D5\u756B","Update the state animation of _PARAM0_":"\u66F4\u65B0_PARAM0_\u7684\u72C0\u614B\u52D5\u756B","Star Rating Bar":"\u661F\u7D1A\u8A55\u5206\u689D","An animated bar to rate out of 5.":"\u4E00\u500B\u7528\u65BC\u5C0D\u5176\u9032\u884C5\u5206\u8A55\u5206\u7684\u52D5\u756B\u689D\u3002","Default rate":"\u9ED8\u8A8D\u7387","Shake the stars on value changes":"\u7576\u503C\u8B8A\u66F4\u6642\u6416\u52D5\u661F\u661F","Disable the rating":"\u7981\u7528\u8A55\u5206","the rate of the object.":"\u7269\u4EF6\u7684\u901F\u7387\u3002","the rate":"\u901F\u7387","Check if the object is disabled.":"\u6AA2\u67E5\u8A72\u7269\u4EF6\u662F\u5426\u5DF2\u505C\u7528\u3002","_PARAM0_ is disabled":"_PARAM0_\u5DF2\u505C\u7528","Enable or disable the object.":"\u555F\u7528\u6216\u505C\u7528\u8A72\u7269\u4EF6\u3002","_PARAM0_ is disabled: _PARAM1_":"_PARAM0_\u5DF2\u505C\u7528\uFF1A_PARAM1_","Disable":"\u505C\u7528","Stay On Screen (2D)":"\u4FDD\u6301\u5728\u87A2\u5E55\u4E0A (2D)","Move the object to keep it visible on the screen.":"\u79FB\u52D5\u7269\u4EF6\u4EE5\u4F7F\u5176\u5728\u87A2\u5E55\u4E0A\u53EF\u898B\u3002","Force the object to stay visible on the screen by setting back its 2D position inside the viewport of the camera.":"\u901A\u904E\u8A2D\u5B9A\u7269\u9AD4\u5728\u651D\u5F71\u6A5F\u8996\u7A97\u5167\u7684 2D \u4F4D\u7F6E\uFF0C\u5F37\u5236\u7269\u9AD4\u4FDD\u6301\u5728\u87A2\u5E55\u4E0A\u53EF\u898B\u3002","Stay on Screen":"\u7559\u5728\u5C4F\u5E55\u4E0A","Top margin":"\u9802\u90E8\u908A\u8DDD","Bottom margin":"\u5E95\u90E8\u908A\u8DDD","Left margin":"\u5DE6\u908A\u8DDD","Right margin":"\u53F3\u908A\u8DDD","the top margin (in pixels) to leave between the object and the screen border.":"\u7269\u4EF6\u8207\u87A2\u5E55\u908A\u754C\u4E4B\u9593\u7684\u4E0A\u908A\u8DDD\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002","Screen top margin":"\u87A2\u5E55\u4E0A\u908A\u8DDD","the top margin":"\u4E0A\u908A\u8DDD","the bottom margin (in pixels) to leave between the object and the screen border.":"\u7269\u4EF6\u8207\u87A2\u5E55\u908A\u754C\u4E4B\u9593\u7684\u4E0B\u908A\u8DDD\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002","Screen bottom margin":"\u87A2\u5E55\u4E0B\u908A\u8DDD","the bottom margin":"\u4E0B\u908A\u8DDD","the left margin (in pixels) to leave between the object and the screen border.":"\u7269\u4EF6\u8207\u87A2\u5E55\u908A\u754C\u4E4B\u9593\u7684\u5DE6\u908A\u8DDD\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002","Screen left margin":"\u87A2\u5E55\u5DE6\u908A\u8DDD","the left margin":"\u5DE6\u908A\u8DDD","the right margin (in pixels) to leave between the object and the screen border.":"\u7269\u4EF6\u8207\u87A2\u5E55\u908A\u754C\u4E4B\u9593\u7684\u53F3\u908A\u8DDD\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002","Screen right margin":"\u87A2\u5E55\u53F3\u908A\u8DDD","the right margin":"\u53F3\u908A\u8DDD","Stick objects to others":"\u9ECF\u5411\u5176\u4ED6\u7269\u4EF6","Make objects follow the position and rotation of the object they are stuck to.":"\u4F7F\u7269\u4EF6\u8DDF\u96A8\u6240\u9ECF\u9644\u7269\u4EF6\u7684\u4F4D\u7F6E\u548C\u65CB\u8F49\u3002","Check if the object is stuck to another object.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u9ECF\u5408\u53E6\u4E00\u500B\u7269\u9AD4\u3002","Is stuck to another object":"\u9ECF\u5728\u53E6\u4E00\u500B\u7269\u9AD4\u4E0A","_PARAM1_ is stuck to _PARAM3_":"_PARAM1_ \u7C98\u5728 _PARAM3_ \u4E0A","Sticker":"\u8CBC\u7D19","Sticker behavior":"\u8CBC\u7D19\u884C\u70BA","Basis":"\u57FA\u790E","Stick the object to another. Use the action to stick the object, or unstick it later.":"\u5C07\u8A72\u5C0D\u8C61\u56FA\u5B9A\u5230\u53E6\u4E00\u5C0D\u8C61\u3002\u4F7F\u7528\u52D5\u4F5C\u4F86\u56FA\u5B9A\u5C0D\u8C61\uFF0C\u6216\u7A0D\u5F8C\u89E3\u958B\u5B83\u3002","Only follow the position":"\u50C5\u8DDF\u96A8\u4F4D\u7F6E","Destroy when the object it's stuck on is destroyed":"\u7576\u8CBC\u5728\u7684\u5C0D\u8C61\u88AB\u92B7\u6BC0\u6642\uFF0C\u92B7\u6BC0\u5B83","Stick on another object.":"\u8CBC\u5728\u53E6\u4E00\u7269\u4EF6\u4E0A\u3002","Stick":"\u8CBC","Stick _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u8CBC\u5230_PARAM2_","Object to stick to":"\u8981\u8CBC\u5230\u7684\u7269\u4EF6","Unstick from the object it was stuck to.":"\u53D6\u6D88\u5F9E\u5176\u8CBC\u5230\u7684\u7269\u4EF6\u5378\u4E0B\u3002","Unstick":"\u5378\u4E0B","Unstick _PARAM0_":"\u5378\u4E0B_PARAM0_","Sway":"\u64FA\u52D5","Sway objects like grass in the wind.":"\u50CF\u98A8\u4E2D\u7684\u8349\u4E00\u6A23\u64FA\u52D5\u7269\u4EF6\u3002","Sway multiple instances of an object at different times - useful for random grass swaying.":"\u5728\u4E0D\u540C\u7684\u6642\u5019\u6416\u6643\u5C0D\u8C61\u7684\u591A\u500B\u5BE6\u4F8B-\u7528\u65BC\u96A8\u6A5F\u8349\u6416\u64FA\u3002","Sway uses the tween behavior":"\u6416\u6643\u4F7F\u7528Tween\u884C\u70BA","Maximum angle to the left (in degrees) - Use a negative number":"\u6700\u5927\u5411\u5DE6\u7684\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09-\u4F7F\u7528\u8CA0\u6578","Maximum angle to the right (in degrees) - Use a positive number":"\u6700\u5927\u5411\u53F3\u7684\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09-\u4F7F\u7528\u6B63\u6578","Mininum value for random tween time range for angle (seconds)":"\u89D2\u5EA6\u7684\u96A8\u6A5FTween\u6642\u9593\u7BC4\u570D\u7684\u6700\u5C0F\u503C\uFF08\u79D2\uFF09","Maximum value for random tween time range for angle (seconds)":"\u89D2\u5EA6\u7684\u96A8\u6A5FTween\u6642\u9593\u7BC4\u570D\u7684\u6700\u5927\u503C\uFF08\u79D2\uFF09","Minimum Y scale amount":"Y\u8EF8\u7E2E\u653E\u7684\u6700\u5C0F\u503C","Y scale":"Y\u8EF8\u7E2E\u653E","Maximum Y scale amount":"Y\u8EF8\u7E2E\u653E\u7684\u6700\u5927\u503C","Mininum value for random tween time range for Y scale (seconds)":"Y\u8EF8\u7E2E\u653E\u7684\u96A8\u6A5FTween\u6642\u9593\u7BC4\u570D\u7684\u6700\u5C0F\u503C\uFF08\u79D2\uFF09","Maximum value for random tween time range for Y scale (seconds)":"Y\u8EF8\u7E2E\u653E\u7684\u96A8\u6A5FTween\u6642\u9593\u7BC4\u570D\u7684\u6700\u5927\u503C\uFF08\u79D2\uFF09","Set sway angle left and right.":"\u8A2D\u7F6E\u5DE6\u53F3\u6416\u64FA\u89D2\u5EA6\u3002","Set sway angle left and right":"\u8A2D\u7F6E\u5DE6\u53F3\u6416\u64FA\u89D2\u5EA6","Sway the angle of _PARAM0_ to _PARAM2_\xB0 to the left and to _PARAM3_\xB0 to the right":"\u5C07 _PARAM0_ \u7684\u89D2\u5EA6\u6416\u81F3\u5DE6\u5074 _PARAM2_\xB0\uFF0C\u518D\u6416\u81F3\u53F3\u5074 _PARAM3_\xB0","Angle to the left (degrees) - Use negative number":"\u5411\u5DE6\u7684\u89D2\u5EA6\uFF08\u5EA6\uFF09- \u4F7F\u7528\u8CA0\u6578","Angle to the right (degrees) - Use positive number":"\u5411\u53F3\u7684\u89D2\u5EA6\uFF08\u5EA6\uFF09- \u4F7F\u7528\u6B63\u6578","Set sway angle time range.":"\u8A2D\u7F6E\u6416\u64FA\u89D2\u5EA6\u6642\u9593\u7BC4\u570D\u3002","Set sway angle time range":"\u8A2D\u7F6E\u6416\u64FA\u89D2\u5EA6\u6642\u9593\u7BC4\u570D","Tween angle time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"\u70BA _PARAM0_ \u7684\u89D2\u5EA6\u6642\u9593\u7BC4\u570D\u9032\u884C\u5E73\u6ED1\uFF0C\u5C07\u6700\u5C0F\u8A2D\u5B9A\u70BA _PARAM2_ \u79D2\uFF0C\u6700\u5927\u8A2D\u5B9A\u70BA _PARAM3_ \u79D2","Angle tween time minimum (seconds)":"\u89D2\u5EA6\u7E2E\u653E\u6642\u9593\u6700\u5C0F\u503C\uFF08\u79D2\uFF09","Angle tween time maximum (seconds)":"\u89D2\u5EA6\u7E2E\u653E\u6642\u9593\u6700\u5927\u503C\uFF08\u79D2\uFF09","Set sway Y scale mininum and maximum.":"\u8A2D\u7F6E\u5DE6\u53F3\u6416\u64FAY\u8EF8\u7E2E\u653E\u6700\u5C0F\u503C\u548C\u6700\u5927\u503C\u3002","Set sway Y scale mininum and maximum":"\u8A2D\u7F6E\u5DE6\u53F3\u6416\u64FAY\u8EF8\u7E2E\u653E\u6700\u5C0F\u503C\u548C\u6700\u5927\u503C","Sway the Y scale of _PARAM0_ from _PARAM2_ to _PARAM3_":"\u6416\u64FA _PARAM0_ \u7684Y\u8EF8\u6BD4\u4F8B\uFF0C\u5F9E _PARAM2_ \u5230 _PARAM3_","Minimum Y scale":"\u6700\u5C0FY\u8EF8\u7E2E\u653E","Maximum Y scale":"\u6700\u5927Y\u8EF8\u7E2E\u653E","Set Y scale time range.":"\u8A2D\u7F6EY\u8EF8\u7E2E\u653E\u6642\u9593\u7BC4\u570D\u3002","Set sway Y scale time range":"\u8A2D\u7F6E\u6416\u64FAY\u8EF8\u7E2E\u653E\u6642\u9593\u7BC4\u570D","Tween Y scale time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"\u70BA _PARAM0_ \u7684Y\u8EF8\u6BD4\u4F8B\u6642\u9593\u7BC4\u570D\u9032\u884C\u5E73\u6ED1\uFF0C\u5C07\u6700\u5C0F\u8A2D\u5B9A\u70BA _PARAM2_ \u79D2\uFF0C\u6700\u5927\u8A2D\u5B9A\u70BA _PARAM3_ \u79D2","Y scale tween time minimum (seconds)":"Y\u8EF8\u7E2E\u653E\u6642\u9593\u6700\u5C0F\u503C\uFF08\u79D2\uFF09","Y scale tween time maximum (seconds)":"Y\u8EF8\u7E2E\u653E\u6642\u9593\u6700\u5927\u503C\uFF08\u79D2\uFF09","Swipe Gesture":"\u6ED1\u52A8\u624B\u52BF","Detect swipe gestures based on their distance and duration.":"\u6839\u636E\u5B83\u4EEC\u7684\u8DDD\u79BB\u548C\u6301\u7EED\u65F6\u95F4\u68C0\u6D4B\u6ED1\u52A8\u624B\u52BF\u3002","Enable (or disable) swipe gesture detection.":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u6ED1\u52D5\u624B\u52E2\u6AA2\u6E2C\u3002","Enable (or disable) swipe gesture detection":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u6ED1\u52D5\u624B\u52E2\u6AA2\u6E2C","Enable swipe detection: _PARAM1_":"\u555F\u7528\u6ED1\u52D5\u6AA2\u6E2C\uFF1A_PARAM1_","Enable swipe detection":"\u555F\u7528\u6ED1\u52D5\u6AA2\u6E2C","Draw a line that indicates the current swipe gesture. Edit \"Outline Size\" of the shape painter to adjust the thickness of the line.":"\u7E6A\u88FD\u4E00\u689D\u6307\u793A\u7576\u524D\u6ED1\u52D5\u624B\u52E2\u7684\u7DDA\u3002\u7DE8\u8F2F\u5F62\u72C0\u7E6A\u88FD\u5668\u7684\u201C\u8F2A\u5ED3\u5927\u5C0F\u201D\u4EE5\u8ABF\u6574\u7DDA\u7684\u539A\u5EA6\u3002","Draw swipe gesture":"\u7E6A\u88FD\u6ED1\u52D5\u624B\u52E2","Draw a line with _PARAM1_ that shows the current swipe":"\u4F7F\u7528 _PARAM1_ \u7E6A\u88FD\u4E00\u689D\u7DDA\uFF0C\u986F\u793A\u7576\u524D\u7684\u6ED1\u52D5","Shape painter used to draw swipe":"\u7528\u4F86\u7E6A\u88FD\u6ED1\u52D5\u7684\u5F62\u72C0\u7E6A\u88FD\u6A5F","Change the layer used to detect swipe gestures.":"\u66F4\u6539\u7528\u65BC\u6AA2\u6E2C\u6ED1\u52D5\u624B\u52E2\u7684\u5716\u5C64\u3002","Layer used to detect swipe gestures":"\u7528\u65BC\u6AA2\u6E2C\u6ED1\u52D5\u624B\u52E2\u7684\u5716\u5C64","Use layer _PARAM1_ to detect swipe gestures":"\u4F7F\u7528\u5716\u5C64_PARAM1_\u4F86\u6AA2\u6E2C\u6ED1\u52D5\u624B\u52E2","the Layer used to detect swipe gestures.":"\u7528\u4F86\u6AA2\u6E2C\u6ED1\u52D5\u624B\u52E2\u7684\u5716\u5C64\u3002","the Layer used to detect swipe gestures":"\u7528\u4F86\u6AA2\u6E2C\u6ED1\u52D5\u624B\u52E2\u7684\u5716\u5C64","Swipe angle (degrees).":"\u6ED1\u52D5\u89D2\u5EA6\uFF08\u5EA6\uFF09\u3002","Swipe angle (degrees)":"\u6ED1\u52D5\u89D2\u5EA6\uFF08\u5EA6\uFF09","the swipe angle (degrees)":"\u6ED1\u52D5\u89D2\u5EA6\uFF08\u5EA6\uFF09","Swipe distance (pixels).":"\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09\u3002","Swipe distance (pixels)":"\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","the swipe distance (pixels)":"\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","Swipe distance in horizontal direction (pixels).":"\u6C34\u5E73\u65B9\u5411\u4E0A\u7684\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09\u3002","Swipe distance in horizontal direction (pixels)":"\u6C34\u5E73\u65B9\u5411\u4E0A\u7684\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","the swipe distance in horizontal direction (pixels)":"\u6C34\u5E73\u65B9\u5411\u4E0A\u7684\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","Swipe distance in vertical direction (pixels).":"\u5782\u76F4\u65B9\u5411\u4E0A\u7684\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09\u3002","Swipe distance in vertical direction (pixels)":"\u5782\u76F4\u65B9\u5411\u4E0A\u7684\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","the swipe distance in vertical direction (pixels)":"\u5782\u76F4\u65B9\u5411\u4E0A\u7684\u6ED1\u52D5\u8DDD\u96E2\uFF08\u50CF\u7D20\uFF09","Start point of the swipe X position.":"\u6ED1\u52D5\u958B\u59CB\u9EDE\u7684X\u5EA7\u6A19\u3002","Start point of the swipe X position":"\u6ED1\u52D5\u958B\u59CB\u9EDE\u7684X\u5EA7\u6A19","the start point of the swipe X position":"\u6ED1\u52D5\u958B\u59CB\u9EDE\u7684X\u5EA7\u6A19","Start point of the swipe Y position.":"\u6ED1\u52D5\u958B\u59CB\u9EDE\u7684Y\u5EA7\u6A19\u3002","Start point of the swipe Y position":"\u6ED1\u52D5\u958B\u59CB\u9EDE\u7684Y\u5EA7\u6A19","the start point of the swipe Y position":"\u6ED1\u52D5\u958B\u59CB\u9EDE\u7684Y\u5EA7\u6A19","End point of the swipe X position.":"\u6ED1\u52D5\u7D50\u675F\u9EDE\u7684X\u5EA7\u6A19\u3002","End point of the swipe X position":"\u6ED1\u52D5\u7D50\u675F\u9EDE\u7684X\u5EA7\u6A19","the end point of the swipe X position":"\u6ED1\u52D5\u7D50\u675F\u9EDE\u7684X\u5EA7\u6A19","End point of the swipe Y position.":"\u6ED1\u52D5\u7D50\u675F\u9EDE\u7684Y\u5EA7\u6A19\u3002","End point of the swipe Y position":"\u6ED1\u52D5\u7D50\u675F\u9EDE\u7684Y\u5EA7\u6A19","the end point of the swipe Y position":"\u6ED1\u52D5\u7D50\u675F\u9EDE\u7684Y\u5EA7\u6A19","Swipe duration (seconds).":"\u6ED1\u52D5\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09\u3002","Swipe duration (seconds)":"\u6ED1\u52D5\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09","swipe duration (seconds)":"\u6ED1\u52D5\u6301\u7E8C\u6642\u9593\uFF08\u79D2\uFF09","Check if a swipe is currently in progress.":"\u6AA2\u67E5\u662F\u5426\u7576\u524D\u6B63\u5728\u9032\u884C\u6ED1\u52D5\u3002","Swipe is in progress":"\u6ED1\u52D5\u6B63\u5728\u9032\u884C\u4E2D","Check if swipe detection is enabled.":"\u6AA2\u67E5\u662F\u5426\u555F\u7528\u6ED1\u52D5\u6AA2\u6E2C\u3002","Is swipe detection enabled":"\u6ED1\u52D5\u6AA2\u6E2C\u662F\u5426\u5DF2\u555F\u7528","Swipe detection is enabled":"\u555F\u7528\u6ED1\u52D5\u5075\u6E2C","Check if the swipe has just ended.":"\u6AA2\u67E5\u6ED1\u52D5\u662F\u5426\u525B\u525B\u7D50\u675F\u3002","Swipe just ended":"\u525B\u525B\u7D50\u675F\u7684\u6ED1\u52D5","Swipe has just ended":"\u6ED1\u52D5\u525B\u525B\u7D50\u675F","Check if swipe moved in a given direction.":"\u6AA2\u67E5\u6ED1\u52D5\u662F\u5426\u671D\u6307\u5B9A\u65B9\u5411\u79FB\u52D5\u3002","Swipe moved in a direction (4-way movement)":"\u5728\u67D0\u500B\u65B9\u5411\u6ED1\u52D5\uFF08\u56DB\u65B9\u4F4D\u79FB\u52D5\uFF09","Swipe moved in direction _PARAM1_":"\u5728\u67D0\u500B\u65B9\u5411\u6ED1\u52D5 _PARAM1_","Swipe moved in a direction (8-way movement)":"\u5728\u67D0\u500B\u65B9\u5411\u6ED1\u52D5\uFF088\u65B9\u4F4D\u79FB\u52D5\uFF09","Text-to-Speech":"\u6587\u5B57\u8F6C\u8BED\u97F3","An extension to enable the use of Text-to-Speech features.":"\u542F\u7528\u6587\u5B57\u8F6C\u8BED\u97F3\u529F\u80FD\u7684\u6269\u5C55\u3002","Audio":"\u97F3\u9891","Speaks a text message aloud through the system text-to-speech.":"\u900F\u904E\u7CFB\u7D71\u7684\u6587\u5B57\u8F49\u8A9E\u97F3\u8B80\u51FA\u6587\u5B57\u8A0A\u606F\u3002","Speak out a message":"\u8B80\u51FA\u8A0A\u606F","Say _PARAM1_ with voice _PARAM2_, volume _PARAM3_%, rate _PARAM4_% and pitch _PARAM5_%":"\u4EE5_VOICE2_\u767C\u8072\uFF0C\u97F3\u91CF_VOLUME3%\uFF0C\u901F\u7387_RATE4%\u548C\u97F3\u8ABF_PITCH5%\u8AAA_PARAM1_","The message to be spoken":"\u8981\u8FF0\u8AAA\u7684\u8A0A\u606F","The voice to be used":"\u8981\u4F7F\u7528\u7684\u8072\u97F3","Voices vary depending on the operating system. \nHere is a list of windows voice names: https://bit.ly/windows-voices \nAnd here is a list of voice names for MacOS: https://bit.ly/mac-voices":"\u8072\u97F3\u56E0\u4F5C\u696D\u7CFB\u7D71\u800C\u7570\u3002\u9019\u662F Windows \u8072\u97F3\u540D\u7A31\u6E05\u55AE\uFF1Ahttps://bit.ly/windows-voices\u9019\u662F MacOS \u7684\u8072\u97F3\u540D\u7A31\u6E05\u55AE\uFF1Ahttps://bit.ly/mac-voices","Volume between 0% and 100%":"\u97F3\u91CF\u4ECB\u65BC0%\u548C100%\u4E4B\u9593","Speed between 10% and 1000%":"\u901F\u5EA6\u4ECB\u65BC10%\u548C1000%\u4E4B\u9593","Pitch between 0% and 200%":"\u97F3\u8ABF\u4ECB\u65BC0%\u548C200%\u4E4B\u9593","Forces all Text-to-Speech to be stopped.":"\u5F37\u5236\u505C\u6B62\u6240\u6709\u7684\u6587\u5B57\u8F49\u8A9E\u97F3\u3002","Force stop speaking":"\u5F37\u5236\u505C\u6B62\u6717\u8B80","Third person camera":"\u7B2C\u4E09\u4EBA\u79F0\u89C6\u89D2\u6444\u50CF\u673A","Move the camera to look at an object from a given distance.":"\u5C06\u6444\u50CF\u673A\u79FB\u52A8\u5230\u8DDD\u79BB\u7ED9\u5B9A\u5BF9\u8C61\u4E00\u5B9A\u8DDD\u79BB\u3002","Move the camera to look at a position from a distance.":"\u5C07\u651D\u5F71\u6A5F\u79FB\u52D5\u5230\u9060\u8655\u7684\u4F4D\u7F6E\u770B\u8457\u4E00\u500B\u4F4D\u7F6E\u3002","Look at a position from a distance (deprecated)":"\u9060\u8655\u770B\u8457\u4E00\u500B\u4F4D\u7F6E\uFF08\u5DF2\u904E\u6642\uFF09","Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_\xB0 and an elevation of _PARAM5_\xB0":"\u5C07_PARAM6_\u7684\u76F8\u6A5F\u79FB\u52D5\u5230\u770B\u5411_PARAM1_; _PARAM2_\u5F9E_PARAM3_\u50CF\u7D20\u8655\u65CB\u8F49_PARAM4\xB0\u4E26\u6709_PARAM5\xB0\u7684\u4EF0\u89D2","Position on X axis":"X\u8EF8\u4E0A\u4F4D\u7F6E","Position on Y axis":"Y\u8EF8\u4E0A\u4F4D\u7F6E","Rotation angle (around Z axis)":"\u65CB\u8F49\u89D2\u5EA6\uFF08\u7E5EZ\u8EF8\uFF09","Elevation angle (around Y axis)":"\u4EF0\u89D2\uFF08\u7E5EY\u8EF8\uFF09","Move the camera to look at an object from a distance.":"\u5C07\u651D\u5F71\u6A5F\u79FB\u52D5\u5230\u9060\u8655\u770B\u8457\u4E00\u500B\u7269\u4EF6\u3002","Look at an object from a distance (deprecated)":"\u9060\u8655\u770B\u8457\u4E00\u500B\u7269\u4EF6\uFF08\u5DF2\u904E\u6642\uFF09","Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_\xB0 and an elevation of _PARAM4_\xB0":"\u5C07_PARAM5_\u7684\u76F8\u6A5F\u79FB\u52D5\u5230\u5F9E_PARAM2_\u50CF\u7D20\u8655\u770B_PARAM1_\uFF0C\u65CB\u8F49_PARAM3\xB0\u4E26\u6709_PARAM4\xB0\u7684\u4EF0\u89D2","Look at a position from a distance":"\u9060\u8655\u770B\u8457\u4E00\u500B\u4F4D\u7F6E","Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_\xB0 and an elevation of _PARAM6_\xB0":"\u5C07_PARAM7_\u7684\u76F8\u6A5F\u79FB\u52D5\u81F3_PARAM1_; _PARAM2_; _PARAM3_\u4F86\u81EA_PARAM4_\u50CF\u7D20\u7684\u65CB\u8F49\u89D2\u70BA_PARAM5_\xB0\u548C\u4EF0\u89D2_PARAM6_\xB0","Position on Z axis":"Z\u8EF8\u4E0A\u7684\u4F4D\u7F6E","Look at an object from a distance":"\u5F9E\u9060\u8655\u89C0\u770B\u4E00\u500B\u7269\u9AD4","Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_\xB0 and an elevation of _PARAM5_\xB0":"\u5C07_PARAM6_\u7684\u76F8\u6A5F\u79FB\u52D5\u81F3_PARAM1_\u4F86\u81EA_PARAM3_\u50CF\u7D20\u7684\u65CB\u8F49\u89D2\u70BA_PARAM4_\xB0\u548C\u4EF0\u89D2_PARAM5_\xB0","Smoothly follow an object at a distance.":"\u5E73\u6ED1\u5730\u8DDF\u96A8\u4E00\u500B\u7269\u9AD4\u5728\u9060\u8655\u3002","Halfway time for rotation":"\u65CB\u8F49\u7684\u4E00\u534A\u6642\u9593","Halfway time for elevation rotation":"\u9AD8\u5EA6\u65CB\u8F49\u7684\u4E2D\u9014\u6642\u9593","Only used by Z and ZY rotation modes":"\u50C5\u4F9B Z \u548C ZY \u65CB\u8F49\u6A21\u5F0F\u4F7F\u7528","Halfway time on Z axis":"Z\u8EF8\u4E0A\u7684\u4E00\u534A\u6642\u9593","Camera distance":"\u76F8\u6A5F\u8DDD\u96E2","Lateral distance offset":"\u6A6B\u5411\u8DDD\u96E2\u504F\u79FB","Ahead distance offset":"\u524D\u65B9\u8DDD\u96E2\u504F\u79FB","Z offset":"Z\u504F\u79FB","Rotation angle offset":"\u65CB\u8F49\u89D2\u5EA6\u504F\u79FB","Elevation angle offset":"\u4EF0\u89D2\u504F\u79FB","Follow free area top border on Z axis":"Z\u8EF8\u4E0A\u7684\u81EA\u7531\u5340\u57DF\u9802\u90E8\u908A\u754C\u8DDF\u96A8","Follow free area bottom border on Z axis":"Z\u8EF8\u4E0A\u7684\u81EA\u7531\u5340\u57DF\u5E95\u90E8\u908A\u754C\u8DDF\u96A8","Automatically rotate the camera with the object":"\u8207\u7269\u9AD4\u81EA\u52D5\u65CB\u8F49\u76F8\u6A5F","Automatically rotate the camera with the object (elevation)":"Automatically rotate the camera with the object (elevation)","Best left unchecked, use the rotation mode instead":"\u6700\u597D\u4FDD\u6301\u672A\u9078\u4E2D\uFF0C\u8ACB\u6539\u7528\u65CB\u8F49\u6A21\u5F0F","Rotation mode":"\u65CB\u8F49\u6A21\u5F0F","Targeted camera rotation angle":"\u76EE\u6A19\u76F8\u6A5F\u65CB\u8F49\u89D2","Forward X":"\u5411\u524D X","Forward Y":"\u5411\u524D Y","Forward Z":"\u524D\u9032Z","Lerp camera":"\u7DDA\u6027\u63D2\u503C\u76F8\u6A5F","Lerp the camera rotation to _PARAM0_ with a ratio of _PARAM2_ with rotation offset _PARAM3_\xB0 and elevation offset _PARAM4_\xB0":"\u5C07\u76F8\u6A5F\u65CB\u8F49\u7DDA\u6027\u63D2\u503C\u5230 _PARAM0_\uFF0C\u6BD4\u4F8B\u70BA _PARAM2_\uFF0C\u65CB\u8F49\u504F\u79FB\u70BA _PARAM3_\xB0\uFF0C\u63D0\u5347\u504F\u79FB\u70BA _PARAM4_\xB0","Move to object":"\u79FB\u52D5\u5230\u7269\u4EF6","Change the camera position to _PARAM0_ with offset _PARAM2_, _PARAM3_, _PARAM4_":"\u5C07\u76F8\u6A5F\u4F4D\u7F6E\u66F4\u6539\u70BA _PARAM0_\uFF0C\u504F\u79FB\u91CF\u70BA _PARAM2_\u3001_PARAM3_\u3001_PARAM4_","X offset":"X \u504F\u79FB\u91CF","Y offset":"Y \u504F\u79FB\u91CF","Update local basis":"\u66F4\u65B0\u672C\u5730\u57FA\u6E96","Update local basis of _PARAM0_ and the camera":"\u66F4\u65B0 _PARAM0_ \u548C\u76F8\u6A5F\u7684\u672C\u5730\u57FA\u6E96","Rotate the camera all the way to the targeted angle.":"\u5C07\u76F8\u6A5F\u65CB\u8F49\u81F3\u76EE\u6A19\u89D2\u5EA6\u3002","Rotate the camera all the way":"\u5C07\u76F8\u6A5F\u65CB\u8F49\u5B8C\u5168","Rotate the camera all the way to the targeted angle of _PARAM0_":"\u5C07\u76F8\u6A5F\u65CB\u8F49\u81F3\u76EE\u6A19\u89D2\u5EA6 _PARAM0_","the camera rotation.":"\u76F8\u6A5F\u65CB\u8F49\u3002","Camera rotation":"\u76F8\u6A5F\u65CB\u8F49","the camera rotation":"\u76F8\u6A5F\u65CB\u8F49","the halfway time for rotation of the object.":"\u5C0D\u8C61\u65CB\u8F49\u7684\u4E00\u534A\u6642\u9593\u3002","the halfway time for rotation":"\u65CB\u8F49\u7684\u4E00\u534A\u6642\u9593","the halfway time for elevation rotation of the object.":"the halfway time for elevation rotation of the object.","Halfway time for elevation rotation":"Halfway time for elevation rotation","the halfway time for elevation rotation":"the halfway time for elevation rotation","the halfway time on Z axis of the object.":"\u5C0D\u8C61Z\u8EF8\u65CB\u8F49\u7684\u4E00\u534A\u6642\u9593\u3002","the halfway time on Z axis":"\u5728Z\u8EF8\u4E0A\u7684\u4E00\u534A\u6642\u9593","Return follow free area bottom border Z.":"\u8FD4\u56DE\u8DDF\u96A8\u81EA\u7531\u5340\u5E95\u90E8\u908A\u754CZ\u8EF8\u3002","Free area Z min":"\u81EA\u7531\u5340Z\u8EF8\u6700\u5C0F\u503C","Return follow free area top border Z.":"\u8FD4\u56DE\u8DDF\u96A8\u81EA\u7531\u5340\u9802\u90E8\u908A\u754CZ\u8EF8\u3002","Free area Z max":"\u6700\u5927\u7684\u81EA\u7531\u5340\u57DF Z","the follow free area top border on Z axis of the object.":"\u5C0D\u8C61 Z \u8EF8\u4E0A\u7684\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u9802\u90E8\u908A\u754C\u3002","the follow free area top border on Z axis":"\u5728 Z \u8EF8\u4E0A\u7684\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u9802\u90E8\u908A\u754C","the follow free area bottom border on Z axis of the object.":"\u5C0D\u8C61 Z \u8EF8\u4E0A\u7684\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u5E95\u90E8\u908A\u754C\u3002","the follow free area bottom border on Z axis":"\u5728 Z \u8EF8\u4E0A\u7684\u8DDF\u96A8\u81EA\u7531\u5340\u57DF\u5E95\u90E8\u908A\u754C","the camera distance of the object.":"\u5C0D\u8C61\u7684\u651D\u5F71\u6A5F\u8DDD\u96E2\u3002","the camera distance":"\u651D\u5F71\u6A5F\u8DDD\u96E2","the lateral distance offset of the object.":"\u5C0D\u8C61\u7684\u6A6B\u5411\u8DDD\u96E2\u504F\u79FB\u3002","the lateral distance offset":"\u6A6B\u5411\u8DDD\u96E2\u504F\u79FB","the ahead distance offset of the object.":"\u5C0D\u8C61\u7684\u5411\u524D\u8DDD\u96E2\u504F\u79FB\u3002","the ahead distance offset":"\u5411\u524D\u8DDD\u96E2\u504F\u79FB","the z offset of the object.":"\u5C0D\u8C61\u7684 Z \u8EF8\u504F\u79FB\u3002","the z offset":"Z \u8EF8\u504F\u79FB","the rotation angle offset of the object.":"\u5C0D\u8C61\u7684\u65CB\u8F49\u89D2\u5EA6\u504F\u79FB\u3002","the rotation angle offset":"\u65CB\u8F49\u89D2\u5EA6\u504F\u79FB","the elevation angle offset of the object.":"\u5C0D\u8C61\u7684\u4FEF\u4EF0\u89D2\u5EA6\u504F\u79FB\u3002","the elevation angle offset":"\u4FEF\u4EF0\u89D2\u5EA6\u504F\u79FB","the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.":"\u5C0D\u8C61\u7684\u76EE\u6A19\u651D\u5F71\u6A5F\u65CB\u8F49\u89D2\u5EA6\u3002\u7576\u8A2D\u5B9A\u9019\u500B\u89D2\u5EA6\u6642\uFF0C\u651D\u5F71\u6A5F\u8DDF\u96A8\u6B64\u503C\u800C\u4E0D\u662F\u5C0D\u8C61\u89D2\u5EA6\u3002","Targeted rotation angle":"\u76EE\u6A19\u65CB\u8F49\u89D2\u5EA6","the targeted camera rotation angle":"\u76EE\u6A19\u651D\u5F71\u6A5F\u65CB\u8F49\u89D2\u5EA6","3D-like Flip for 2D Sprites":"2D \u7CBE\u9748\u7684 3D \u985E\u7FFB\u8F49","Flip sprites with a 3D-like rotation effect.":"\u7528 3D \u985E\u65CB\u8F49\u6548\u679C\u7FFB\u8F49\u7CBE\u9748\u3002","Flip a Sprite with a 3D effect.":"\u4EE53D\u6548\u679C\u7FFB\u8F49\u4E00\u500B\u7CBE\u9748\u3002","3D Flip":"3D\u7FFB\u8F49","Flipping method":"\u7FFB\u8F49\u65B9\u6CD5","Front animation name":"\u524D\u65B9\u52D5\u756B\u540D\u7A31","Animation method":"\u52D5\u756B\u65B9\u6CD5","Back animation name":"\u5F8C\u65B9\u52D5\u756B\u540D\u7A31","Start a flipping animation on the object.":"\u5728\u5C0D\u8C61\u4E0A\u958B\u59CB\u4E00\u500B\u7FFB\u8F49\u52D5\u756B\u3002","Flip the object (deprecated)":"\u7FFB\u8F49\u5C0D\u8C61\uFF08\u5DF2\u68C4\u7528\uFF09","Flip _PARAM0_ over _PARAM2_ms":"\u7FFB\u8F49 _PARAM0_ \u5728 _PARAM2_ms \u7684\u6642\u9593\u5167","Duration (in milliseconds)":"\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u6BEB\u79D2\u70BA\u55AE\u4F4D\uFF09","Start a flipping animation on the object. The X origin point must be set at the object center.":"\u5728\u5C0D\u8C61\u4E0A\u958B\u59CB\u4E00\u500B\u7FFB\u8F49\u52D5\u756B\u3002X \u539F\u9EDE\u5FC5\u9808\u8A2D\u7F6E\u5728\u5C0D\u8C61\u4E2D\u5FC3\u3002","Flip the object":"\u7FFB\u8F49\u5C0D\u8C61","Flip _PARAM0_ over _PARAM2_ seconds":"\u7FFB\u8F49 _PARAM0_ \u5728 _PARAM2_ \u79D2\u5167","Jump to the end of the flipping animation.":"\u8DF3\u5230\u7FFB\u8F49\u52D5\u756B\u7684\u7D50\u5C3E\u3002","Jump to flipping end":"\u8DF3\u5230\u7FFB\u8F49\u7D50\u5C3E","Jump to the end of _PARAM0_ flipping":"\u8DF3\u5230 _PARAM0_ \u7FFB\u8F49\u7684\u7D50\u5C3E","Checks if a flipping animation is currently playing.":"\u6AA2\u67E5\u662F\u5426\u7576\u524D\u6B63\u5728\u64AD\u653E\u7FFB\u8F49\u52D5\u756B\u3002","Flipping is playing":"\u6B63\u5728\u64AD\u653E\u7FFB\u8F49\u52D5\u756B","_PARAM0_ is flipping":"_PARAM0_ \u6B63\u5728\u7FFB\u8F49","Checks if the object is flipped or will be flipped.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u7FFB\u8F49\u6216\u5C07\u88AB\u7FFB\u8F49\u3002","Is flipped":"\u88AB\u7FFB\u8F49\u4E86","_PARAM0_ is flipped":"_PARAM0_\u88AB\u7FFB\u8F49","Flips the object to one specific side.":"\u5C07\u5C0D\u8C61\u7FFB\u8F49\u5230\u6307\u5B9A\u7684\u4E00\u5074\u3002","Flip to a side (deprecated)":"\u7FFB\u8F49\u5230\u4E00\u5074\uFF08\u5DF2\u68C4\u7528\uFF09","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ms":"\u7FFB\u8F49_PARAM0_\u5230\u53CD\u9762: _PARAM2_\u8D85\u904E_PARAM3_ms","Reverse side":"\u53CD\u9762","Flips the object to one specific side. The X origin point must be set at the object center.":"\u5C07\u5C0D\u8C61\u7FFB\u8F49\u5230\u6307\u5B9A\u7684\u4E00\u5074\u3002X\u8D77\u9EDE\u5FC5\u9808\u8A2D\u7F6E\u5728\u5C0D\u8C61\u4E2D\u5FC3\u3002","Flip to a side":"\u7FFB\u8F49\u5230\u4E00\u5074","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ seconds":"\u7FFB\u8F49_PARAM0_\u5230\u53CD\u9762: _PARAM2_\u8D85\u904E_PARAM3_\u79D2","Visually flipped":"\u8996\u89BA\u7FFB\u8F49","_PARAM0_ is visually flipped":"_PARAM0_\u88AB\u8996\u89BA\u7FFB\u8F49","Flip visually":"\u8996\u89BA\u7FFB\u8F49","Flip visually _PARAM0_: _PARAM2_":"\u8996\u89BA\u7FFB\u8F49_PARAM0_: _PARAM2_","Flipped":"\u7FFB\u8F49","Resource bar (separated units)":"\u8CC7\u6E90\u6B04 (\u5206\u96E2\u55AE\u4F4D)","left anchor":"\u5DE6\u5074\u9328\u9EDE","Left anchor":"\u5DE6\u9328\u9EDE","Left anchor of _PARAM1_":"_PARAM1_ \u7684\u5DE6\u9328\u9EDE","Anchor":"\u9328\u9EDE","Right anchor":"\u53F3\u5074\u9328\u9EDE","Right anchor of _PARAM1_":"_PARAM1_ \u7684\u53F3\u5074\u9328\u9EDE","Unit width":"\u55AE\u4F4D\u5BEC\u5EA6","How much pixels to show for a value of 1.":"\u5C0D\u65BC\u503C\u70BA1\uFF0C\u8981\u986F\u793A\u591A\u5C11\u50CF\u7D20\u3002","the unit width of the object. How much pixels to show for a value of 1.":"\u7269\u4EF6\u7684\u55AE\u4F4D\u5BEC\u5EA6\u3002\u986F\u793A\u503C 1 \u9700\u8981\u591A\u5C11\u50CF\u7D20\u3002","the unit width":"\u55AE\u4F4D\u5BEC\u5EA6","Update the bar width.":"\u66F4\u65B0\u689D\u5BEC\u5EA6\u3002","Bar width":"\u689D\u5BEC\u5EA6","Update the bar width of _PARAM0_":"\u66F4\u65B0 _PARAM0_ \u7684\u689D\u5F62\u5BEC\u5EA6","Time formatting":"\u6642\u9593\u683C\u5F0F\u5316","Converts seconds into standard time formats, such as HH:MM:SS.":"Converts seconds into standard time formats, such as HH:MM:SS.","Format time in seconds to HH:MM:SS.":"\u5C07\u6642\u9593\u683C\u5F0F\u5316\u70BAHH:MM:SS\u3002","Format time in seconds to HH:MM:SS":"\u5C07\u6642\u9593\u683C\u5F0F\u5316\u70BAHH:MM:SS","Format time _PARAM1_ to HH:MM:SS in _PARAM2_":"\u5C07_PARAM1_\u7684\u6642\u9593\u683C\u5F0F\u5316\u70BAPARAM2_\u7684HH:MM:SS\u3002","Time, in seconds":"\u6642\u9593\uFF0C\u4EE5\u79D2\u70BA\u55AE\u4F4D","Format time in seconds to HH:MM:SS.000, including milliseconds.":"\u5C07\u6642\u9593\u683C\u5F0F\u5316\u70BAHH:MM:SS.000\uFF0C\u5305\u62EC\u6BEB\u79D2\u3002","Format time in seconds to HH:MM:SS.000":"\u5C07\u6642\u9593\u683C\u5F0F\u5316\u70BAHH:MM:SS.000","Timed Back and Forth Movement":"\u5B9A\u6642\u4F86\u56DE\u904B\u52D5","This behavior moves objects back and forth for a chosen time or distance, vertically or horizontally.":"\u6B64\u884C\u70BA\u6703\u8B93\u7269\u4EF6\u5728\u9078\u5B9A\u7684\u6642\u9593\u6216\u8DDD\u96E2\u5167\u5782\u76F4\u6216\u6C34\u5E73\u4F86\u56DE\u79FB\u52D5\u3002","Move an object (e.g. enemy) for a chosen time or distance, then flip it and start over.":"\u5728\u9078\u5B9A\u7684\u6642\u9593\u6216\u8DDD\u96E2\u5167\u79FB\u52D5\u4E00\u500B\u7269\u9AD4\uFF08\u4F8B\u5982\u6575\u4EBA\uFF09\uFF0C\u7136\u5F8C\u7FFB\u8F49\u4E26\u91CD\u65B0\u958B\u59CB\u3002","Move the object vertically (instead of horizontally)":"\u5782\u76F4\u79FB\u52D5\u7269\u9AD4\uFF08\u800C\u4E0D\u662F\u6C34\u5E73\u79FB\u52D5\uFF09","Moving speed (in pixel/s)":"\u79FB\u52D5\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20/\u79D2\u8A08\uFF09","Moving distance (in pixels)":"\u79FB\u52D5\u8DDD\u96E2\uFF08\u4EE5\u50CF\u7D20\u8A08\uFF09","Moving maximum time (in seconds)":"\u79FB\u52D5\u7684\u6700\u5927\u6642\u9593\uFF08\u4EE5\u79D2\u8A08\uFF09","Distance start point":"\u8DDD\u96E2\u8D77\u59CB\u9EDE","position of the sprite at the previous frame":"\u7CBE\u9748\u5728\u4E0A\u4E00\u5E40\u7684\u4F4D\u7F6E","check that time has elapsed":"\u6AA2\u67E5\u6642\u9593\u662F\u5426\u5DF2\u7D93\u904E","Toggle switch (for Shape Painter)":"\u5207\u63DB\u958B\u95DC\uFF08\u9069\u7528\u65BC\u5716\u5F62\u7E6A\u88FD\u5668\uFF09","Use a shape-painter object to draw a toggle switch that users can click or touch.":"\u4F7F\u7528\u5F62\u72C0\u7E6A\u88FD\u7269\u4EF6\u4F86\u7E6A\u88FD\u4E00\u500B\u5207\u63DB\u958B\u95DC\uFF0C\u7528\u6236\u53EF\u4EE5\u9EDE\u64CA\u6216\u89F8\u6478\u3002","Radius of the thumb (px) Example: 10":"\u6307\u5C16\u7684\u534A\u5F91\uFF08\u50CF\u7D20\uFF09\u793A\u4F8B\uFF1A10","Active thumb color string. Example: 24;119;211":"\u6D3B\u52D5\u6307\u5C16\u984F\u8272\u5B57\u7B26\u4E32\u3002 \u793A\u4F8B\uFF1A24;119;211","Opacity of the thumb. Example: 255":"\u6307\u5C16\u7684\u4E0D\u900F\u660E\u5EA6\u3002 \u793A\u4F8B\uFF1A255","Width of the track (pixels) Example: 20":"\u8ECC\u9053\u5BEC\u5EA6\uFF08\u50CF\u7D20\uFF09\u793A\u4F8B\uFF1A20","Height of the track (pixels) Example: 14":"\u8ECC\u9053\u9AD8\u5EA6\uFF08\u50CF\u7D20\uFF09\u793A\u4F8B\uFF1A14","Color string for the track that is RIGHT of the thumb. Example: 150;150;150 (Leave blank to use thumb color)":"\u53F3\u908A\u6307\u5C16\u8ECC\u9053\u7684\u984F\u8272\u5B57\u7B26\u4E32\u3002 \u793A\u4F8B\uFF1A150;150;150\uFF08\u7559\u7A7A\u4EE5\u4F7F\u7528\u6307\u5C16\u984F\u8272\uFF09","Opacity of the track that is RIGHT of the thumb. Example: 255":"\u53F3\u908A\u6307\u5C16\u8ECC\u9053\u7684\u4E0D\u900F\u660E\u5EA6\u3002 \u793A\u4F8B\uFF1A255","Color string for the track that is LEFT of the thumb. Example: 24;119;211 (Leave blank to use thumb color)":"\u5DE6\u908A\u6307\u5C16\u8ECC\u9053\u7684\u984F\u8272\u5B57\u7B26\u4E32\u3002 \u793A\u4F8B\uFF1A24;119;211\uFF08\u7559\u7A7A\u4EE5\u4F7F\u7528\u6307\u5C16\u984F\u8272\uFF09","Opacity of the track that is LEFT of the thumb. Example: 128":"\u5DE6\u908A\u6307\u5C16\u8ECC\u9053\u7684\u4E0D\u900F\u660E\u5EA6\u3002 \u793A\u4F8B\uFF1A128","Size of halo when the mouse hovers and clicks on the thumb. Example: 24":"\u7576\u6ED1\u9F20\u61F8\u505C\u548C\u9EDE\u64CA\u6307\u5C16\u6642\u7684\u5149\u6688\u5927\u5C0F\u3002 \u793A\u4F8B\uFF1A24","Opacity of halo when the mouse hovers on the thumb. Example: 32":"\u7576\u6ED1\u9F20\u61F8\u505C\u5728\u6307\u5C16\u4E0A\u6642\u7684\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u3002 \u793A\u4F8B\uFF1A32","Opacity of the halo that appears when the toggle switch is pressed. Example: 64":"\u5207\u63DB\u958B\u95DC\u88AB\u6309\u4E0B\u6642\u51FA\u73FE\u7684\u5149\u6688\u7684\u4E0D\u900F\u660E\u5EA6\u3002 \u793A\u4F8B\uFF1A64","Number of pixels the thumb is from the left side of the track.":"\u6307\u5C16\u8DDD\u5DE6\u5074\u8ECC\u9053\u7684\u50CF\u7D20\u6578\u3002","Disabled":"\u7981\u7528","State has been changed (used in ToggleChecked function)":"\u72C0\u614B\u5DF2\u66F4\u6539\uFF08\u5728ToggleChecked\u529F\u80FD\u4E2D\u4F7F\u7528\uFF09","Inactive thumb color string. Example: 255;255;255":"\u975E\u6D3B\u52D5\u6307\u5C16\u984F\u8272\u5B57\u7B26\u4E32\u3002 \u793A\u4F8B\uFF1A255;255;255","Click or press has started on toggle switch":"\u9EDE\u64CA\u6216\u6309\u58D3\u5728\u5207\u63DB\u958B\u95DC\u4E0A\u958B\u59CB","Offset (Y) of shadow on thumb. Positive numbers move shadow down, negative numbers move shadow up. Example: 4":"\u6307\u5C16\u9670\u5F71\u7684Y\u504F\u79FB\u3002 \u6B63\u6578\u5411\u4E0B\u79FB\u52D5\u9670\u5F71\uFF0C\u8CA0\u6578\u5411\u4E0A\u79FB\u52D5\u9670\u5F71\u3002 \u793A\u4F8B\uFF1A4","Offset (X) of shadow on thumb. Positive numbers move shadow right, negative numbers move shadow left. Example: 0":"\u6307\u5C16\u4E0A\u7684\u9670\u5F71\u7684X\u504F\u79FB\u3002 \u6B63\u6578\u5411\u53F3\u79FB\u52D5\u9670\u5F71\uFF0C\u8CA0\u6578\u5411\u5DE6\u79FB\u52D5\u9670\u5F71\u3002 \u793A\u4F8B\uFF1A0","Opacity of shadow on thumb. Example: 32":"\u6307\u5C16\u4E0A\u7684\u9670\u5F71\u7684\u4E0D\u900F\u660E\u5EA6\u3002 \u793A\u4F8B\uFF1A32","Need redraw":"\u9700\u8981\u91CD\u65B0\u7E6A\u88FD","Was hovered":"\u904E\u53BB\u66FE\u61F8\u505C","Change the track width.":"\u66F4\u6539\u8ECC\u9053\u5BEC\u5EA6\u3002","Change the track width of _PARAM0_ to _PARAM2_ pixels":"\u5C07_PARAM0_\u7684\u8ECC\u9053\u5BEC\u5EA6\u6539\u70BA_PARAM2_\u50CF\u7D20","Change the track height.":"\u66F4\u6539\u8ECC\u9053\u9AD8\u5EA6\u3002","Track height":"\u8ECC\u9053\u9AD8\u5EA6","Change the track height of _PARAM0_ to _PARAM2_ pixels":"\u5C07_PARAM0_\u7684\u8ECC\u9053\u9AD8\u5EA6\u6539\u70BA_PARAM2_\u50CF\u7D20","Change the thumb opacity.":"\u66F4\u6539\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u3002","Change the thumb opacity of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u6539\u70BA_PARAM2_","Change the inactive track opacity.":"\u66F4\u6539\u975E\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u3002","Change the inactive track opacity of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u975E\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u6539\u70BA_PARAM2_","Change the active track opacity.":"\u66F4\u6539\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u3002","Change the active track opacity of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u6539\u70BA_PARAM2_","Change the halo opacity when the thumb is pressed.":"\u6309\u4E0B\u62C7\u6307\u6642\u66F4\u6539\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u3002","Change the halo opacity of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u6539\u70BA_PARAM2_","Change opacity of the halo when the thumb is hovered.":"\u62C7\u6307\u61F8\u505C\u6642\u66F4\u6539\u5149\u6688\u4E0D\u900F\u660E\u5EA6\u3002","Change the offset on Y axis of the thumb shadow.":"\u66F4\u6539\u62C7\u6307\u9670\u5F71\u5728Y\u8EF8\u4E0A\u7684\u504F\u79FB\u91CF\u3002","Thumb shadow offset on Y axis":"\u62C7\u6307\u9670\u5F71\u5728Y\u8EF8\u4E0A\u7684\u504F\u79FB\u91CF","Change the offset on Y axis of the thumb shadow of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u62C7\u6307\u9670\u5F71\u5728Y\u8EF8\u4E0A\u7684\u504F\u79FB\u91CF\u6539\u70BA_PARAM2_","Y offset (pixels)":"Y\u8EF8\u504F\u79FB\u91CF\uFF08\u50CF\u7D20\uFF09","Change the offset on X axis of the thumb shadow.":"\u66F4\u6539\u62C7\u6307\u9670\u5F71\u5728X\u8EF8\u4E0A\u7684\u504F\u79FB\u91CF\u3002","Thumb shadow offset on X axis":"X\u8EF8\u7684\u6307\u793A\u71C8\u9670\u5F71\u504F\u79FB","Change the offset on X axis of the thumb shadow of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684X\u8EF8\u6307\u793A\u71C8\u9670\u5F71\u504F\u79FB\u70BA _PARAM2_","X offset (pixels)":"X\u8EF8\u504F\u79FB\uFF08\u50CF\u7D20\uFF09","Change the thumb shadow opacity.":"\u66F4\u6539\u6307\u793A\u71C8\u9670\u5F71\u7684\u4E0D\u900F\u660E\u5EA6","Thumb shadow opacity":"\u6307\u793A\u71C8\u9670\u5F71\u4E0D\u900F\u660E\u5EA6","Change the thumb shadow opacity of _PARAM0_ to _PARAM2_":"\u66F4\u6539 _PARAM0_\u7684\u6307\u793A\u71C8\u9670\u5F71\u4E0D\u900F\u660E\u5EA6\u70BA_PARAM2_","Opacity of shadow on thumb":"\u6307\u793A\u71C8\u4E0A\u7684\u9670\u5F71\u4E0D\u900F\u660E\u5EA6","Change the thumb radius.":"\u66F4\u6539\u6307\u793A\u71C8\u534A\u5F91","Thumb radius":"\u6307\u793A\u71C8\u534A\u5F91","Change the thumb radius of _PARAM0_ to _PARAM2_ pixels":"\u5C07_PARAM0_\u7684\u6307\u793A\u71C8\u534A\u5F91\u66F4\u6539\u70BA_PARAM2_\u50CF\u7D20","Change the halo radius.":"\u66F4\u6539\u5149\u6688\u534A\u5F91","Change the halo radius of _PARAM0_ to _PARAM2_ pixels":"\u5C07_PARAM0_\u7684\u5149\u6688\u534A\u5F91\u66F4\u6539\u70BA_PARAM2_\u50CF\u7D20","Change the active track color (the part on the thumb left).":"\u66F4\u6539\u6D3B\u52D5\u8ECC\u9053\u984F\u8272\uFF08\u6307\u793A\u71C8\u5DE6\u5074\u7684\u90E8\u5206\uFF09","Change the active track color of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u6D3B\u52D5\u8ECC\u9053\u984F\u8272\u66F4\u6539\u70BA_PARAM2_","Color of active track":"\u6D3B\u52D5\u8ECC\u9053\u984F\u8272","Change the inactive track color (the part on the thumb right).":"\u66F4\u6539\u975E\u6D3B\u52D5\u8ECC\u9053\u984F\u8272\uFF08\u6307\u793A\u71C8\u53F3\u5074\u7684\u90E8\u5206\uFF09","Change the inactive track color of _PARAM0_ to _PARAM2_":"\u5C07_PARAM0_\u7684\u975E\u6D3B\u52D5\u8ECC\u9053\u984F\u8272\u66F4\u6539\u70BA_PARAM2_","Color of inactive track":"\u975E\u6D3B\u52D5\u8ECC\u9053\u984F\u8272","Change the thumb color (when unchecked).":"\u66F4\u6539\u6307\u793A\u71C8\u984F\u8272\uFF08\u672A\u9078\u4E2D\u6642\uFF09","Thumb color (when unchecked)":"\u6307\u793A\u71C8\u984F\u8272\uFF08\u672A\u9078\u4E2D\u6642\uFF09","Change the thumb color of _PARAM0_ (when unchecked) to _PARAM2_":"\u5C07_PARAM0_\u7684\u6307\u793A\u71C8\u984F\u8272\uFF08\u672A\u9078\u4E2D\u6642\uFF09\u66F4\u6539\u70BA_PARAM2_","Change the thumb color (when checked).":"\u66F4\u6539\u6307\u793A\u71C8\u984F\u8272\uFF08\u9078\u4E2D\u6642\uFF09","Thumb color (when checked)":"\u6307\u793A\u71C8\u984F\u8272\uFF08\u9078\u4E2D\u6642\uFF09","Change the thumb color of _PARAM0_ (when checked) to _PARAM2_":"\u5C07_PARAM0_\u7684\u6307\u793A\u71C8\u984F\u8272\uFF08\u9078\u4E2D\u6642\uFF09\u66F4\u6539\u70BA_PARAM2_","If checked, change to unchecked. If unchecked, change to checked.":"\u5982\u679C\u9078\u4E2D\uFF0C\u5247\u66F4\u6539\u70BA\u672A\u9078\u4E2D\u3002\u5982\u679C\u672A\u9078\u4E2D\uFF0C\u5247\u66F4\u6539\u70BA\u9078\u4E2D\u3002","Toggle the switch":"\u5207\u63DB\u958B\u95DC","Change _PARAM0_ to opposite state (checked/unchecked)":"\u5C07_PARAM0_\u66F4\u6539\u70BA\u76F8\u53CD\u72C0\u614B\uFF08\u9078\u4E2D/\u672A\u9078\u4E2D\uFF09","Disable (or enable) the toggle switch.":"\u7981\u7528\uFF08\u6216\u555F\u7528\uFF09\u5207\u63DB\u958B\u95DC","Disable (or enable) the toggle switch":"\u7981\u7528\uFF08\u6216\u555F\u7528\uFF09\u5207\u63DB\u958B\u95DC","Disable _PARAM0_: _PARAM2_":"\u7981\u7528_PARAM0_: _PARAM2_","Check (or uncheck) the toggle switch":"\u9078\u4E2D\uFF08\u6216\u53D6\u6D88\u9078\u4E2D\uFF09\u5207\u63DB\u958B\u95DC","Set _PARAM0_ to checked: _PARAM2_":"\u5C07_PARAM0_\u8A2D\u7F6E\u70BA\u5DF2\u9078\u4E2D: _PARAM2_","Check if mouse is hovering over toggle switch.":"\u6AA2\u67E5\u6ED1\u9F20\u662F\u5426\u61F8\u505C\u5728\u5207\u63DB\u958B\u95DC\u4E0A\u3002","Is mouse hovered over toggle switch?":"\u6ED1\u9F20\u662F\u5426\u61F8\u505C\u5728\u5207\u63DB\u958B\u95DC\u4E0A\uFF1F","Mouse is hovering over _PARAM0_":"\u6ED1\u9F20\u6B63\u5728\u61F8\u505C\u5728_PARAM0_\u4E0A","Track width.":"\u8ECC\u9053\u5BEC\u5EA6\u3002","Track height.":"\u8ECC\u9053\u9AD8\u5EA6\u3002","Offset (Y) of shadow on thumb.":"\u62C7\u6307\u4E0A\u7684\u9670\u5F71\u504F\u79FB\uFF08Y\uFF09\u3002","Offset (Y) of shadow on thumb":"\u62C7\u6307\u4E0A\u7684\u9670\u5F71\u504F\u79FB\uFF08Y\uFF09","Offset (X) of shadow on thumb.":"\u62C7\u6307\u4E0A\u7684\u9670\u5F71\u504F\u79FB\uFF08X\uFF09\u3002","Offset (X) of shadow on thumb":"\u62C7\u6307\u4E0A\u7684\u9670\u5F71\u504F\u79FB\uFF08X\uFF09","Opacity of shadow on thumb.":"\u62C7\u6307\u4E0A\u7684\u9670\u5F71\u4E0D\u900F\u660E\u5EA6\u3002","Thumb opacity.":"\u62C7\u6307\u4E0D\u900F\u660E\u5EA6\u3002","Active track opacity.":"\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u3002","Inactive track opacity.":"\u975E\u6D3B\u52D5\u8ECC\u9053\u4E0D\u900F\u660E\u5EA6\u3002","Halo opacity (pressed).":"\u5149\u6688\u4E0D\u900F\u660E\u5EA6\uFF08\u6309\u4E0B\u6642\uFF09\u3002","Halo opacity (hover).":"\u5149\u6688\u4E0D\u900F\u660E\u5EA6\uFF08\u61F8\u505C\u6642\uFF09\u3002","Halo radius (pixels).":"\u5149\u6688\u534A\u5F91\uFF08\u50CF\u7D20\uFF09\u3002","Active track color.":"\u6D3B\u52D5\u8ECC\u9053\u984F\u8272\u3002","Inactive track color.":"\u975E\u6D3B\u52D5\u8ECC\u9053\u984F\u8272\u3002","Active thumb color.":"\u6D3B\u52D5\u62C7\u6307\u984F\u8272\u3002","Active thumb color":"\u6D3B\u52D5\u62C7\u6307\u984F\u8272","Check if the toggle switch is disabled.":"\u6AA2\u67E5\u5207\u63DB\u958B\u95DC\u662F\u5426\u5DF2\u7981\u7528\u3002","Is disabled":"\u5DF2\u7981\u7528","Inactive thumb color.":"\u975E\u6D3B\u52D5\u62C7\u6307\u984F\u8272\u3002","Inactive thumb color":"\u975E\u6D3B\u52D5\u62C7\u6307\u984F\u8272","Top-down movement animator":"Top-down movement animator","Change the animation according to the movement direction.":"Change the animation according to the movement direction.","Top-down movement":"Top-down movement","Scale animations according to speed":"Scale animations according to speed","Pause animations when objects stop":"Pause animations when objects stop","Animations must be called \"Walk0\", \"Walk1\"... for left, down...":"Animations must be called \"Walk0\", \"Walk1\"... for left, down...","Number of directions":"Number of directions","Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.":"Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.","Set to 90\xB0, \"Walk0\" becomes the animation for down.":"Set to 90\xB0, \"Walk0\" becomes the animation for down.","Update the animation according to the object direction.":"Update the animation according to the object direction.","Update animation":"Update animation","Update the animation of _PARAM0_":"Update the animation of _PARAM0_","the animation name of the object.":"the animation name of the object.","the animation name":"the animation name","Check if animations are paused when objects stop.":"Check if animations are paused when objects stop.","_PARAM0_ animations are paused when objects stop":"_PARAM0_ animations are paused when objects stop","Change whether animations are paused when objects stop.":"Change whether animations are paused when objects stop.","Pause animations of _PARAM0_ when stopped: _PARAM2_":"Pause animations of _PARAM0_ when stopped: _PARAM2_","IsPausingAnimation":"IsPausingAnimation","Check if animations are scaled according to speed.":"Check if animations are scaled according to speed.","_PARAM0_ animations are scaled according to speed":"_PARAM0_ animations are scaled according to speed","Change whether animations are scaled according to speed or not.":"Change whether animations are scaled according to speed or not.","Scale animations of _PARAM0_ according to speed: _PARAM2_":"Scale animations of _PARAM0_ according to speed: _PARAM2_","IsScalingAnimation":"IsScalingAnimation","Change the animation speed scale according to the object speed.":"Change the animation speed scale according to the object speed.","Animation speed scale":"Animation speed scale","Change the animation speed scale according to _PARAM0_ speed":"Change the animation speed scale according to _PARAM0_ speed","Pause the animation according to the object speed.":"Pause the animation according to the object speed.","Animation pause":"Animation pause","Pause the animation according to _PARAM0_ speed":"Pause the animation according to _PARAM0_ speed","Return the object movement direction.":"Return the object movement direction.","Return the difference between 2 directions.":"Return the difference between 2 directions.","Direction dirrerence":"Direction dirrerence","Other direction":"Other direction","Update the animation direction of the object.":"Update the animation direction of the object.","Update animation direction":"Update animation direction","Update the animation direction of _PARAM0_":"Update the animation direction of _PARAM0_","Update the animation name.":"Update the animation name.","Update animation name":"Update animation name","Update the animation name of _PARAM0_":"Update the animation name of _PARAM0_","Make object travel to random positions":"\u4F7F\u7269\u4EF6\u524D\u5F80\u96A8\u6A5F\u4F4D\u7F6E","Make object travel to random positions (with the pathfinding behavior).":"\u4F7F\u7269\u4EF6\u524D\u5F80\u96A8\u6A5F\u4F4D\u7F6E\uFF08\u4F7F\u7528\u5C0B\u8DEF\u884C\u70BA\uFF09\u3002","Make object travel to a random position around the object current position. The movement is initiated only when the object is not moving already (its Pathfinding behavior speed is 0). Move towards a specified angle, if desired.":"\u4F7F\u7269\u9AD4\u79FB\u52D5\u5230\u7269\u9AD4\u7576\u524D\u4F4D\u7F6E\u5468\u570D\u7684\u96A8\u6A5F\u4F4D\u7F6E\u3002\u53EA\u6709\u5728\u7269\u9AD4\u5C1A\u672A\u79FB\u52D5\u6642\u624D\u6703\u555F\u52D5\u79FB\u52D5\uFF08\u5176\u5C0B\u8DEF\u884C\u70BA\u901F\u5EA6\u70BA0\uFF09\u3002\u6839\u64DA\u9700\u8981\uFF0C\u5411\u6307\u5B9A\u7684\u89D2\u5EA6\u79FB\u52D5\u3002","Make object travel to a random position, with optional direction":"\u4F7F\u7269\u9AD4\u79FB\u52D5\u5230\u96A8\u6A5F\u4F4D\u7F6E\uFF0C\u65B9\u5411\u53EF\u9078","Move _PARAM1_ to random positions, where each stop is at least _PARAM3_px and at most _PARAM4_px from the current position. Move towards angle _PARAM5_ with a bias of _PARAM6_":"\u5C07_PARAM1_\u79FB\u52D5\u5230\u96A8\u6A5F\u4F4D\u7F6E\uFF0C\u5176\u4E2D\u6BCF\u500B\u505C\u6B62\u9EDE\u81F3\u5C11\u8DDD\u96E2\u7576\u524D\u4F4D\u7F6E_PARAM3_px\uFF0C\u6700\u591A\u8DDD\u96E2_PARAM4_px\u3002\u5E36\u6709\u504F\u5411\u89D2\u5EA6_PARAM5_\uFF0C\u504F\u5411\u503C\u70BA_PARAM6_","Object that will be travelling (must have Pathfinding behavior)":"\u5C07\u9032\u884C\u79FB\u52D5\u7684\u7269\u9AD4\uFF08\u5FC5\u9808\u5177\u6709\u5C0B\u8DEF\u884C\u70BA\uFF09","Pathfinding Behavior (required)":"\u5C0B\u8DEF\u884C\u70BA\uFF08\u5FC5\u586B\uFF09","Minimum distance between each position (Default: 100px)":"\u6BCF\u500B\u4F4D\u7F6E\u4E4B\u9593\u7684\u6700\u5C0F\u8DDD\u96E2\uFF08\u9ED8\u8A8D\u503C\uFF1A100px\uFF09","Maximum distance between each position (Default: 200px)":"\u6BCF\u500B\u4F4D\u7F6E\u4E4B\u9593\u7684\u6700\u5927\u8DDD\u96E2\uFF08\u9ED8\u8A8D\u503C\uFF1A200px\uFF09","Direction (in degrees) the object will move towards (Range: 0-360)":"\u7269\u9AD4\u5C07\u79FB\u52D5\u7684\u65B9\u5411\uFF08\u7BC4\u570D\uFF1A0-360\u5EA6\uFF09","Direction bias (Range: 0-1)":"\u65B9\u5411\u504F\u5411\uFF08\u7BC4\u570D\uFF1A0-1\uFF09","For example: \"0\" picks a completely random direction, \"0.5\" will select a direction within the half-circle that faces the specified direction, and \"1\" simply uses the specified direction.":"\u4F8B\u5982\uFF1A\u201C0\u201D\u9078\u64C7\u5B8C\u5168\u96A8\u6A5F\u7684\u65B9\u5411\uFF0C\u201C0.5\u201D\u5C07\u5728\u9762\u5C0D\u6307\u5B9A\u65B9\u5411\u7684\u534A\u5713\u4E2D\u9078\u64C7\u4E00\u500B\u65B9\u5411\uFF0C\u201C1\u201D\u50C5\u4F7F\u7528\u6307\u5B9A\u65B9\u5411\u3002","Turret 2D movement":"\u70AE\u5854\u76842D\u79FB\u52D5","A turret movement with customizable speed, acceleration and stop angles.":"\u5177\u6709\u53EF\u81EA\u8A02\u901F\u5EA6\u3001\u52A0\u901F\u5EA6\u548C\u505C\u6B62\u89D2\u5EA6\u7684\u7832\u5854\u904B\u52D5\u3002","Turret movement":"\u7832\u5854\u904B\u52D5","Maximum rotation speed (in degrees per second)":"\u6700\u5927\u65CB\u8F49\u901F\u5EA6\uFF08\u6BCF\u79D2\u5EA6\uFF09","Maximum angle (use the same value for min and max to set no constraint)":"\u6700\u5927\u89D2\u5EA6\uFF08\u4F7F\u7528\u76F8\u540C\u7684\u503C\u8A2D\u7F6E\u6700\u5927\u548C\u6700\u5C0F\u4EE5\u4E0D\u8A2D\u7F6E\u9650\u5236\uFF09","Minimum angle (use the same value for min and max to set no constraint)":"\u6700\u5C0F\u89D2\u5EA6\uFF08\u4F7F\u7528\u76F8\u540C\u7684\u503C\u8A2D\u7F6E\u6700\u5C0F\u548C\u6700\u5927\u4EE5\u4E0D\u8A2D\u7F6E\u9650\u5236\uFF09","Aiming angle property":"\u7784\u6E96\u89D2\u5EA6\u5C6C\u6027","Must move clockwise":"\u5FC5\u9808\u9806\u6642\u91DD\u79FB\u52D5","Must move counter-clockwise":"\u5FC5\u9808\u9006\u6642\u91DD\u79FB\u52D5","Has moved":"\u5DF2\u79FB\u52D5","Target angle (MoveToward)":"\u76EE\u6A19\u89D2\u5EA6\uFF08MoveToward\uFF09","Origin angle: the farest angle from AngleMin and AngleMax":"\u8D77\u59CB\u89D2\u5EA6\uFF1A\u96E2AngleMin\u548CAngleMax\u6700\u9060\u7684\u89D2\u5EA6","Check if the turret is moving.":"\u6AA2\u67E5\u7832\u5854\u662F\u5426\u5728\u79FB\u52D5\u3002","Move clockwise.":"\u9806\u6642\u91DD\u79FB\u52D5\u3002","Move clockwise":"\u9806\u6642\u91DD\u79FB\u52D5","Move _PARAM0_ clockwise":"\u5C07_PARAM0_\u9806\u6642\u91DD\u79FB\u52D5","Move counter-clockwise.":"\u9006\u6642\u91DD\u79FB\u52D5\u3002","Move counter-clockwise":"\u9006\u6642\u91DD\u79FB\u52D5","Move _PARAM0_ counter-clockwise":"\u5C07_PARAM0_\u9006\u6642\u91DD\u79FB\u52D5","Set angle toward a position.":"\u8A2D\u5B9A\u89D2\u5EA6\u671D\u5411\u4E00\u500B\u4F4D\u7F6E\u3002","Set aiming angle toward a position":"\u8A2D\u5B9A\u671D\u5411\u4E00\u500B\u4F4D\u7F6E\u7684\u7784\u6E96\u89D2\u5EA6","Set the aiming angle of _PARAM0_ toward _PARAM2_;_PARAM3_":"\u5C07_PARAM0_\u7684\u7784\u6E96\u89D2\u5EA6\u671D\u5411_PARAM2_;_PARAM3_","Move toward a position.":"\u79FB\u52D5\u5230\u4E00\u500B\u4F4D\u7F6E\u3002","Move _PARAM0_ toward _PARAM2_; _PARAM3_ within a _PARAM4_\xB0 margin":"\u5C07_PARAM0_\u79FB\u52D5\u5230_PARAM2_; _PARAM3_\uFF0C\u5728_PARAM4_\xB0\u908A\u754C\u5167","Angle margin":"\u89D2\u5EA6\u908A\u754C","Change the aiming angle.":"\u8B8A\u66F4\u7784\u6E96\u89D2\u5EA6\u3002","Aiming angle":"\u7784\u6E96\u89D2\u5EA6","Change the aiming angle of _PARAM0_ to _PARAM2_\xB0":"\u66F4\u6539 _PARAM0_ \u7684\u7784\u6E96\u89D2\u5EA6\u70BA _PARAM2_\xB0","Aiming angle (between 0\xB0 and 360\xB0 if no stop angle are set).":"\u7784\u51C6\u89D2\u5EA6\uFF08\u5982\u679C\u672A\u8BBE\u7F6E\u505C\u6B62\u89D2\u5EA6\uFF0C\u5219\u5728 0\xB0 \u548C 360\xB0 \u4E4B\u95F4\uFF09\u3002","Tween into view":"\u7DE9\u52D5\u5230\u8996\u5716","Tween objects into position from off screen.":"\u5C07\u7269\u4EF6\u5F9E\u5C4F\u5E55\u5916\u7684\u4F4D\u7F6E\u7DE9\u52D5\u5230\u76EE\u6A19\u4F4D\u7F6E\u3002","Motion":"\u904B\u52D5","Leave this value at 0 to move the object in from outside of the screen.":"\u5C07\u6B64\u503C\u8A2D\u70BA0\u4EE5\u5F9E\u5C4F\u5E55\u4E4B\u5916\u79FB\u52D5\u7269\u4EF6\u3002","Tween in the object at creation":"\u5728\u5275\u5EFA\u6642\u9032\u884C\u7269\u4EF6\u7684\u7DE9\u52D5","Moving in easing":"\u79FB\u52D5\u9032\u5165\u7684\u7DE9\u52D5","Moving out easing":"\u79FB\u52D5\u51FA\u53BB\u7684\u7DE9\u52D5","Delete the object when the \"tween out of view\" action has finished":"\u5728\u300C\u7DE9\u52D5\u51FA\u8996\u5716\u300D\u64CD\u4F5C\u5B8C\u6210\u5F8C\u522A\u9664\u7269\u4EF6","Fade in/out the object":"\u6DE1\u5165/\u6DE1\u51FA\u7269\u4EF6","The X position at the end of fade in":"\u6DE1\u5165\u7D50\u675F\u6642\u7684 X \u4F4D\u7F6E","The Y position at the end of fade in":"\u6DE1\u5165\u7D50\u675F\u6642\u7684 Y \u4F4D\u7F6E","Objects with opacity":"\u5177\u6709\u4E0D\u900F\u660E\u5EA6\u7684\u7269\u4EF6","Move the object":"\u79FB\u52D5\u7269\u4EF6","Delay":"\u5EF6\u9072","Fade in easing":"\u6DE1\u5165\u7DE9\u52D5","Fade out easing":"\u6DE1\u51FA\u7DE9\u52D5","The X position at the beginning of fade in":"\u6DE1\u5165\u958B\u59CB\u6642\u7684 X \u4F4D\u7F6E","The Y position at the beginning of fade in":"\u6DE1\u5165\u958B\u59CB\u6642\u7684 Y \u4F4D\u7F6E","Return the X position at the beginning of the fade-in.":"\u8FD4\u56DE\u6DE1\u5165\u958B\u59CB\u6642\u7684 X \u4F4D\u7F6E\u3002","Return the Y position at the beginning of the fade-in.":"\u8FD4\u56DE\u6DE1\u5165\u958B\u59CB\u6642\u7684 Y \u4F4D\u7F6E\u3002","Tween the object to its set starting position.":"\u5C07\u7269\u4EF6\u7DE9\u52D5\u5230\u5176\u8A2D\u7F6E\u7684\u8D77\u59CB\u4F4D\u7F6E\u3002","Tween _PARAM0_ into view":"\u5C07 _PARAM0_ \u7DE9\u52D5\u5230\u8996\u5716","Tween the object to its off screen position.":"\u5C07\u7269\u4EF6\u7DE9\u52D5\u5230\u5176\u5C4F\u5E55\u5916\u7684\u4F4D\u7F6E\u3002","Tween out of view":"\u7DE9\u52D5\u51FA\u8996\u5716","Tween _PARAM0_ out of view":"\u5C07 _PARAM0_ \u7DE9\u52D5\u51FA\u8996\u5716","Check if the object finished tweening into view.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5B8C\u6210\u7DE9\u52D5\u9032\u5165\u8996\u5716\u3002","Tweened into view":"\u5DF2\u7DE9\u52D5\u5230\u8996\u5716","_PARAM0_ finished tweening into view":"_PARAM0_ \u5DF2\u5B8C\u6210\u7DE9\u52D5\u9032\u5165\u8996\u5716","Check if the object finished tweened out of view.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5B8C\u6210\u7DE9\u52D5\u51FA\u8996\u5716\u3002","Tweened out of view":"\u5DF2\u7DE9\u52D5\u51FA\u8996\u5716","_PARAM0_ finished tweening out of view":"_PARAM0_ \u5DF2\u5B8C\u6210\u7DE9\u52D5\u51FA\u8996\u5716","Set whether to delete the object when the \"tween out of view\" action has finished.":"\u8A2D\u7F6E\u662F\u5426\u5728\u300C\u7DE9\u52D5\u51FA\u8996\u5716\u300D\u64CD\u4F5C\u5B8C\u6210\u5F8C\u522A\u9664\u7269\u4EF6\u3002","Delete after tween out":"\u7DE9\u52D5\u5F8C\u522A\u9664","Should delete _PARAM0_ when the \"tween out of view\" action has finished: _PARAM2_":"\u662F\u5426\u5728\u300C\u7DE9\u52D5\u51FA\u8996\u5716\u300D\u64CD\u4F5C\u5B8C\u6210\u5F8C\u522A\u9664 _PARAM0_: _PARAM2_","Should delete the object when the \"tween out of view\" action has finished":"\u5728\u300C\u7DE9\u52D5\u51FA\u8996\u5716\u300D\u64CD\u4F5C\u5B8C\u6210\u5F8C\u662F\u5426\u522A\u9664\u7269\u4EF6","Two choices dialog boxes":"\u5169\u500B\u9078\u64C7\u7684\u5C0D\u8A71\u6846","A dialog box with buttons to let users make a choice.":"\u5E36\u6709\u6309\u9215\u7684\u5C0D\u8A71\u6846\uFF0C\u8B93\u4F7F\u7528\u8005\u9032\u884C\u9078\u64C7\u3002","A dialog box showing two options.":"\u986F\u793A\u5169\u500B\u9078\u9805\u7684\u5C0D\u8A71\u6846","Two choices dialog box":"\u5169\u500B\u9078\u9805\u5C0D\u8A71\u6846","Cancel with Escape key":"\u4F7F\u7528Esc\u9375\u53D6\u6D88","Enable or disable the escape key to close the dialog.":"\u555F\u7528\u6216\u7981\u7528Esc\u9375\u4EE5\u95DC\u9589\u5C0D\u8A71\u6846\u3002","Label for the \"Yes\" button":"\"\u662F\"\u6309\u9215\u7684\u6A19\u7C64","This is the button with identifier 0.":"\u9019\u662F\u6A19\u8B58\u7B26\u70BA0\u7684\u6309\u9215\u3002","Label for the \"No\" button":"\u201C\u5426\u201D\u6309\u94AE\u7684\u6807\u7B7E","This is the button with identifier 1.":"\u9019\u662F\u5E36\u6709\u8B58\u5225\u7B261\u7684\u6309\u9215\u3002","Sound at hovering":"\u61F8\u6D6E\u6642\u7684\u97F3\u6548","Check if the \"Yes\" button of the dialog was selected.":"\u68C0\u67E5\u5BF9\u8BDD\u6846\u4E2D\u7684\u201C\u662F\u201D\u6309\u94AE\u662F\u5426\u5DF2\u9009\u62E9\u3002","\"Yes\" button is clicked":"\u5DF2\u70B9\u51FB\u201C\u662F\u201D\u6309\u94AE","\"Yes\" button of _PARAM0_ is clicked":"\u201C\u662F\u201D\u6309\u9215\u5DF2\u9EDE\u64CA _PARAM0_","Check if the \"No\" button of the dialog was selected.":"\u68C0\u67E5\u5BF9\u8BDD\u6846\u4E2D\u7684\u201C\u5426\u201D\u6309\u94AE\u662F\u5426\u5DF2\u9009\u62E9\u3002","\"No\" button is clicked":"\u5DF2\u70B9\u51FB\u201C\u5426\u201D\u6309\u94AE","\"No\" button of _PARAM0_ is clicked":"\u201C\u5426\u201D\u6309\u9215\u5DF2\u9EDE\u64CA _PARAM0_","the highlighted button.":"\u7A81\u51FA\u663E\u793A\u7684\u6309\u94AE\u3002","Highlighted button":"\u7A81\u51FA\u663E\u793A\u7684\u6309\u94AE","the highlighted button":"\u7A81\u51FA\u663E\u793A\u7684\u6309\u94AE","the text shown by the dialog.":"\u5BF9\u8BDD\u6846\u663E\u793A\u7684\u6587\u672C\u3002","Text message":"\u6587\u672C\u6D88\u606F","the text":"\u6587\u672C","Webpage URL tools (Web browser)":"\u7DB2\u9801 URL \u5DE5\u5177\uFF08Web \u700F\u89BD\u5668\uFF09","Allows to read URL where a web-game is hosted and manipulate URL strings.":"\u5141\u8A31\u8B80\u53D6\u7DB2\u8DEF\u904A\u6232\u6240\u6258\u7BA1\u7684URL\u4E26\u64CD\u4F5CURL\u5B57\u4E32\u3002","Gets the URL of the current game page.":"\u53D6\u5F97\u76EE\u524D\u904A\u6232\u9801\u9762\u7684URL\u3002","Get the URL of the web page":"\u53D6\u5F97\u7DB2\u9801\u9801\u9762\u7684URL","Reloads the current web page.":"\u91CD\u65B0\u8F09\u5165\u76EE\u524D\u7684\u7DB2\u9801\u9801\u9762\u3002","Reload the web page":"\u91CD\u65B0\u8F09\u5165\u7DB2\u9801\u9801\u9762","Reload the current page":"\u91CD\u65B0\u8F09\u5165\u76EE\u524D\u7684\u9801\u9762","Loads another page in place of the current one.":"\u8F09\u5165\u53E6\u4E00\u500B\u7DB2\u9801\u4EE5\u53D6\u4EE3\u76EE\u524D\u7684\u7DB2\u9801\u3002","Redirect to another page":"\u91CD\u5B9A\u5411\u5230\u53E6\u4E00\u500B\u9801\u9762","Redirect to _PARAM1_":"\u91CD\u5B9A\u5411\u5230_PARAM1_","URL to redirect to":"\u91CD\u5B9A\u5411\u5230\u7684URL","Get an attribute from a URL.":"\u5F9EURL\u4E2D\u53D6\u5F97\u5C6C\u6027\u3002","Get URL attribute":"\u53D6\u5F97URL\u5C6C\u6027","The URL to get the attribute from":"\u8981\u5F9E\u4E2D\u53D6\u5F97\u5C6C\u6027\u7684URL","The attribute to get":"\u8981\u53D6\u5F97\u7684\u5C6C\u6027","Gets a parameter of a URL query string.":"\u53D6\u5F97URL\u67E5\u8A62\u5B57\u4E32\u7684\u53C3\u6578\u3002","Get a parameter of a URL query string":"\u53D6\u5F97URL\u67E5\u8A62\u5B57\u4E32\u7684\u53C3\u6578","The URL to get a query string parameter from":"\u8981\u5F9E\u4E2D\u53D6\u5F97\u67E5\u8A62\u5B57\u4E32\u53C3\u6578\u7684URL","The query string parameter to get":"\u8981\u53D6\u5F97\u7684\u67E5\u8A62\u5B57\u4E32\u53C3\u6578","Updates a specific part of a URL.":"\u66F4\u65B0URL\u7684\u7279\u5B9A\u90E8\u5206\u3002","Update a URL attribute":"\u66F4\u65B0URL\u5C6C\u6027","The URL to change":"\u8981\u66F4\u6539\u7684URL","The attribute to update":"\u8981\u66F4\u65B0\u7684\u5C6C\u6027","The new value of this attribute":"\u6B64\u5C6C\u6027\u7684\u65B0\u503C","Sets or replaces a query string parameter of a URL.":"\u8A2D\u5B9A\u6216\u66FF\u63DBURL\u7684\u67E5\u8A62\u5B57\u4E32\u53C3\u6578\u3002","Change a get parameter of a URL":"\u66F4\u6539URL\u7684\u53C3\u6578","The query string parameter to update":"\u8981\u66F4\u65B0\u7684\u67E5\u8A62\u5B57\u4E32\u53C3\u6578","The new value of the query string parameter":"\u67E5\u8A62\u5B57\u4E32\u53C3\u6578\u7684\u65B0\u503C","Removes a query string parameter from an URL.":"\u5F9EURL\u4E2D\u522A\u9664\u67E5\u8A62\u5B57\u4E32\u53C3\u6578\u3002","Remove a get parameter of an URL":"\u522A\u9664URL\u7684\u67E5\u8A62\u5B57\u4E32\u53C3\u6578","The query string parameter to remove":"\u8981\u522A\u9664\u7684\u67E5\u8A62\u5B57\u4E32\u53C3\u6578","Unique Identifiers":"\u552F\u4E00\u8B58\u5225\u7B26","A collection of UID generation expressions.":"\u4E00\u7D44 UID \u751F\u6210\u8868\u9054\u5F0F\u3002","Generates a unique identifier with the UUIDv4 pattern.":"\u4EE5UUIDv4\u6A21\u5F0F\u751F\u6210\u552F\u4E00\u6A19\u8B58\u7B26\u3002","Generate a UUIDv4":"\u7522\u751FUUIDv4","Generates a unique identifier with the incremented integer pattern.":"\u4EE5\u905E\u589E\u6574\u6578\u6A21\u5F0F\u751F\u6210\u552F\u4E00\u6A19\u8B58\u7B26\u3002","Generate an incremented integer UID":"\u7522\u751F\u905E\u589E\u6574\u6578UID","Unicode":"Unicode","Provides conversion tools for Ascii and Unicode characters.":"\u63D0\u4F9B Ascii \u548C Unicode \u5B57\u5143\u7684\u8F49\u63DB\u5DE5\u5177\u3002","Reverses the unicode of a string with a base.":"\u53CD\u8F49\u5E36\u6709\u57FA\u6578\u7684\u5B57\u4E32\u7684Unicode\u3002","Reverse the unicode of a string":"\u53CD\u8F49\u5B57\u4E32\u7684Unicode","String to reverse":"\u8981\u53CD\u8F49\u7684\u5B57\u4E32","Base of the reverse (Default: 2)":"\u53CD\u8F49\u7684\u57FA\u6578\uFF08\u9810\u8A2D: 2\uFF09","Range of unicode characters (Put 16 here to support the most characters if you put 2 in the base)":"Unicode \u5B57\u5143\u7BC4\u570D\uFF08\u5C07 16 \u653E\u5728\u9019\u88E1\u4EE5\u652F\u63F4\u6700\u591A\u5B57\u5143\uFF0C\u5982\u679C\u5728\u57FA\u6578\u4E2D\u653E\u5165 2\uFF09","Converts a unicode representation into String with a base.":"\u5C07 Unicode \u8868\u793A\u8F49\u63DB\u70BA\u5177\u6709\u57FA\u6578\u7684\u5B57\u7B26\u4E32\u3002","Unicode to string":"Unicode \u8F49\u70BA\u5B57\u7B26\u4E32","The unicode to convert to String":"\u8981\u8F49\u63DB\u70BA\u5B57\u7B26\u4E32\u7684 Unicode","Base":"\u57FA\u6578","Seperator text (Optional)":"\u5206\u9694\u6587\u672C\uFF08\u53EF\u9078\uFF09","Converts a string into unicode representation with a base.":"\u5C07\u5B57\u7B26\u4E32\u8F49\u63DB\u70BA\u5177\u6709\u57FA\u6578\u7684 Unicode \u8868\u793A\u3002","String to unicode conversion":"\u5B57\u7B26\u4E32\u5230 Unicode \u8F49\u63DB","The string to convert to unicode":"\u8981\u8F49\u63DB\u70BA Unicode \u7684\u5B57\u7B26\u4E32","Values of multiple objects":"\u591A\u500B\u5C0D\u8C61\u7684\u503C","Values of picked object instances (including position, size, force and angle).":"\u9078\u53D6\u7684\u7269\u4EF6\u5BE6\u4F8B\u7684\u503C\uFF08\u5305\u62EC\u4F4D\u7F6E\u3001\u5927\u5C0F\u3001\u529B\u91CF\u548C\u89D2\u5EA6\uFF09\u3002","Minimum X position of picked object instances (using AABB of objects).":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F X \u4F4D\u7F6E\uFF08\u4F7F\u7528\u5C0D\u8C61\u7684 AABB\uFF09\u3002","Minimum X position of picked object instances":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F X \u4F4D\u7F6E","objects":"\u5C0D\u8C61","Maximum X position of picked object instances (using AABB of objects).":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927 X \u4F4D\u7F6E\uFF08\u4F7F\u7528\u5C0D\u8C61\u7684 AABB\uFF09\u3002","Maximum X position of picked object instances":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927 X \u4F4D\u7F6E","Minimum Y position of picked object instances (using AABB of objects).":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F Y \u4F4D\u7F6E\uFF08\u4F7F\u7528\u5C0D\u8C61\u7684 AABB\uFF09\u3002","Minimum Y position of picked object instances":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F Y \u4F4D\u7F6E","Maximum Y position of picked object instances (using AABB of objects).":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927 Y \u4F4D\u7F6E\uFF08\u4F7F\u7528\u5C0D\u8C61\u7684 AABB\uFF09\u3002","Maximum Y position of picked object instances":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927 Y \u4F4D\u7F6E","Minimum Z order of picked object instances.":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F Z \u5E8F\u3002","Minimum Z order of picked object instances":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F Z \u5E8F","Maximum Z order of picked object instances.":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927 Z \u5E8F\u3002","Maximum Z order of picked object instances":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927 Z \u5E8F","Average Z order of picked object instances.":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747 Z \u5E8F\u3002","Average Z order of picked object instances":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747 Z \u5E8F","X center point (absolute) of picked object instances.":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684 X \u4E2D\u5FC3\u9EDE\uFF08\u7D55\u5C0D\u503C\uFF09\u3002","X center point (absolute) of picked object instances":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684 X \u4E2D\u5FC3\u9EDE\uFF08\u7D55\u5C0D\u503C\uFF09","Objects":"\u5C0D\u8C61","Objects that will be used to calculate their center point":"\u5C07\u7528\u65BC\u8A08\u7B97\u5176\u4E2D\u5FC3\u9EDE\u7684\u5C0D\u8C61","Y center point (absolute) of picked object instances.":"\u9078\u53D6\u5C0D\u8C61\u5BE6\u4F8B\u7684 Y \u4E2D\u5FC3\u9EDE\uFF08\u7D55\u5C0D\u503C\uFF09\u3002","Y center point (absolute) of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684Y\u4E2D\u5FC3\u9EDE\uFF08\u7D55\u5C0D\uFF09","X center point (average) of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684X\u4E2D\u5FC3\u9EDE\uFF08\u5E73\u5747\uFF09\u3002","X center point (average) of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684X\u4E2D\u5FC3\u9EDE\uFF08\u5E73\u5747\uFF09","Y center point (average) of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684Y\u4E2D\u5FC3\u9EDE\uFF08\u5E73\u5747\uFF09\u3002","Y center point (average) of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684Y\u4E2D\u5FC3\u9EDE\uFF08\u5E73\u5747\uFF09","Min object height of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F\u5C0D\u8C61\u9AD8\u5EA6\u3002","Min object height of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F\u5C0D\u8C61\u9AD8\u5EA6","Max object height of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927\u5C0D\u8C61\u9AD8\u5EA6\u3002","Max object height of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927\u5C0D\u8C61\u9AD8\u5EA6","Average height of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u9AD8\u5EA6\u3002","Average height of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u9AD8\u5EA6","Min object width of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F\u5C0D\u8C61\u5BEC\u5EA6\u3002","Min object width of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5C0F\u5C0D\u8C61\u5BEC\u5EA6","Max object width of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927\u5C0D\u8C61\u5BEC\u5EA6\u3002","Max object width of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u6700\u5927\u5C0D\u8C61\u5BEC\u5EA6","Average width of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u5BEC\u5EA6\u3002","Average width of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u5BEC\u5EA6","Average horizontal force (X) of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u6C34\u5E73\u529B\uFF08X\uFF09\u3002","Average horizontal force (X) of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u6C34\u5E73\u529B\uFF08X\uFF09","Average vertical force (Y) of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u5782\u76F4\u529B\uFF08Y\uFF09\u3002","Average vertical force (Y) of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u5782\u76F4\u529B\uFF08Y\uFF09","Average angle of rotation of picked object instances.":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u65CB\u8F49\u89D2\u5EA6\u3002","Average angle of rotation of picked object instances":"\u6311\u9078\u7684\u5C0D\u8C61\u5BE6\u4F8B\u7684\u5E73\u5747\u65CB\u8F49\u89D2\u5EA6","WebSocket client":"WebSocket \u5BA2\u6236\u7AEF","A WebSocket client for fast client-server networking.":"\u5FEB\u901F\u5BA2\u6236\u7AEF-\u670D\u52D9\u5668\u7DB2\u7D61\u7684 WebSocket \u5BA2\u6236\u7AEF\u3002","Triggers if the client is currently connecting to the WebSocket server.":"\u5982\u679C\u5BA2\u6236\u7AEF\u76EE\u524D\u6B63\u5728\u9023\u63A5WebSocket\u4F3A\u670D\u5668\uFF0C\u5247\u89F8\u767C\u3002","Connecting to a server":"\u9023\u63A5\u5230\u4F3A\u670D\u5668","Connecting to the server":"\u9023\u63A5\u5230\u4F3A\u670D\u5668","Triggers if the client is connected to a WebSocket server.":"\u5982\u679C\u5BA2\u6236\u7AEF\u9023\u63A5\u5230WebSocket\u4F3A\u670D\u5668\uFF0C\u5247\u89F8\u767C\u3002","Connected to a server":"\u9023\u63A5\u5230\u4F3A\u670D\u5668","Connected to the server":"\u9023\u63A5\u5230\u4F3A\u670D\u5668","Triggers if the connection to a WebSocket server was closed.":"\u5982\u679C\u9023\u63A5\u5230WebSocket\u4F3A\u670D\u5668\u5DF2\u95DC\u9589\uFF0C\u5247\u89F8\u767C\u3002","Connection to a server was closed":"\u9023\u63A5\u5230\u4F3A\u670D\u5668\u7684\u9023\u63A5\u5DF2\u95DC\u9589","Connection to the server closed":"\u4F3A\u670D\u5668\u9023\u63A5\u5DF2\u95DC\u9589","Connects to a WebSocket server.":"\u9023\u63A5\u5230WebSocket\u4F3A\u670D\u5668\u3002","Connect to server":"\u9023\u63A5\u5230\u4F3A\u670D\u5668","Connect to WebSocket server at _PARAM1_":"\u5728 _PARAM1_ \u4E0A\u9023\u63A5\u81F3 WebSocket \u4F3A\u670D\u5668","The server address":"\u4F3A\u670D\u5668\u4F4D\u5740","Disconnects from the current WebSocket server.":"\u5F9E\u76EE\u524D\u7684 WebSocket \u4F3A\u670D\u5668\u4E2D\u65B7\u9023\u7DDA\u3002","Disconnect from server":"\u5F9E\u4F3A\u670D\u5668\u4E2D\u65B7\u9023\u7DDA","Disconnect from server (reason: _PARAM1_)":"\u5F9E\u4F3A\u670D\u5668\u65B7\u958B\u9023\u7DDA (\u539F\u56E0: _PARAM1_)","The reason for disconnection":"\u4E2D\u65B7\u9023\u7DDA\u539F\u56E0","Triggers when the server has sent the client some data.":"\u7576\u4F3A\u670D\u5668\u767C\u9001\u8CC7\u6599\u7D66\u7528\u6236\u7AEF\u6642\u89F8\u767C\u3002","An event was received":"\u5DF2\u63A5\u6536\u4E8B\u4EF6","Data received from server":"\u4F86\u81EA\u4F3A\u670D\u5668\u7684\u8CC7\u6599\u63A5\u6536","Returns the piece of data from the server that is currently being processed.":"\u56DE\u50B3\u6B63\u5728\u8655\u7406\u7684\u4F3A\u670D\u5668\u8CC7\u6599\u7247\u6BB5\u3002","Data from server":"\u4F86\u81EA\u4F3A\u670D\u5668\u7684\u8CC7\u6599","Dismisses an event after processing it to allow processing the next one without waiting for the next frame.":"\u8655\u7406\u5B8C\u7562\u4E00\u500B\u4E8B\u4EF6\u5F8C\uFF0C\u8B93\u4E0B\u4E00\u500B\u4E8B\u4EF6\u53EF\u7ACB\u5373\u8655\u7406\uFF0C\u800C\u975E\u7B49\u5F85\u4E0B\u4E00\u500B\u756B\u9762\u3002","Mark as processed":"\u6A19\u8A18\u70BA\u8655\u7406\u5B8C\u6210","Mark current event as completed":"\u6A19\u8A18\u76EE\u524D\u7684\u4E8B\u4EF6\u70BA\u5DF2\u5B8C\u6210","Sends a string to the server.":"\u50B3\u9001\u5B57\u4E32\u81F3\u4F3A\u670D\u5668\u3002","Send data to the server":"\u50B3\u9001\u8CC7\u6599\u81F3\u4F3A\u670D\u5668","Send _PARAM1_ to the server":"\u5C07 _PARAM1_ \u50B3\u9001\u81F3\u4F3A\u670D\u5668","The data to send to the server":"\u50B3\u9001\u81F3\u4F3A\u670D\u5668\u7684\u8CC7\u6599","Triggers when a WebSocket error has occurred.":"\u7576 WebSocket \u767C\u751F\u932F\u8AA4\u6642\u89F8\u767C\u3002","An error occurred":"\u767C\u751F\u932F\u8AA4","WebSocket error has occurred":"WebSocket \u767C\u751F\u932F\u8AA4","Gets the last error that occurred.":"\u53D6\u5F97\u6700\u8FD1\u767C\u751F\u7684\u932F\u8AA4\u3002","YSort":"YSort","Create an illusion of depth by setting the Z-order based on the Y position of the object. Useful for isometric games, 2D games with a \"Top-Down\" view, RPG...":"\u901A\u904E\u6839\u64DA\u5C0D\u8C61\u7684 Y \u4F4D\u7F6E\u8A2D\u7F6E Z \u5E8F\uFF0C\u5275\u5EFA\u6DF1\u5EA6\u7684\u5E7B\u8C61\u3002\u9069\u7528\u65BC\u7B49\u89D2\u904A\u6232\u3001\u5177\u6709\u201C\u4FEF\u8996\u201D\u8996\u5716\u7684 2D \u904A\u6232\u3001RPG\u2026","Set the depth (Z-order) of the instance to the value of its Y position in the scene, creating an illusion of depth. The origin point of the object is used to determine the Z-order.":"\u5C07\u6B64\u793A\u4F8B\u7684\u6DF1\u5EA6 (Z \u8EF8\u9806\u5E8F) \u8A2D\u7F6E\u70BA\u5176\u5728\u5834\u666F\u4E2D\u7684 Y \u4F4D\u7F6E\u7684\u503C\uFF0C\u5275\u5EFA\u6DF1\u5EA6\u7684\u5E7B\u89BA\u3002 \u7528\u65BC\u78BA\u5B9A Z \u8EF8\u9806\u5E8F\u7684\u662F\u7269\u4EF6\u7684\u539F\u9EDE\u3002"}}; \ No newline at end of file +/* eslint-disable */module.exports={"languageData":{"plurals":function(n,ord){if(ord)return"other";return"other"}},"messages":{"Advanced HTTP":"進階 HTTP","An extension to create HTTP requests with more advanced settings than the built-in \"Network request\" action, like specifying headers or bypassing CORS.":"一個擴展,用於創建HTTP請求,其設置比內置的\"網絡請求\"操作更進階,例如指定標頭或繞過CORS。","Network":"網路","Creates a template for your request. All requests must be made from a request template.":"建立一個您的請求模板。所有請求必須從請求模板發送。","Create a new request template":"建立新的請求模板","Create request template _PARAM1_ with URL _PARAM2_":"使用URL為_PARAM2_建立請求模板_PARAM1_","New request template name":"新的請求模板名稱","URL the request will be sent to":"請求將被發送到的URL","Creates a new request template with all the attributes from an existing one.":"從現有的模板創建一個新的請求模板,包含所有屬性。","Copy a request template":"複製請求模板","Create request _PARAM1_ from template _PARAM2_":"從模板_PARAM2_創建請求_PARAM1_","Request to copy":"要複製的請求","The HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"請求的HTTP方法。如果不確定應該選擇哪個,則GET是默認值,您應該使用它。對於REST API端點的請求,根據方法不同可能會產生不同的效果 - 請參考您調用的API的文檔,以了解應使用的適當方法。","HTTP Method (Verb)":"HTTP方法(動詞)","Set HTTP method of request _PARAM1_ to _PARAM2_":"將請求_PARAM1_的HTTP方法設置為_PARAM2_","Request template name":"請求模板名稱","HTTP Method":"HTTP方法","the HTTP method of the request. GET is the default and what you should use if you are unsure which to pick. A request to a REST API endpoint may have a different effect depending on the method - refer to the documentation of the API you are calling to learn about the appropriate method to use.":"請求的HTTP方法。如果不確定應該選擇哪個,則GET是默認值,您應該使用它。對於REST API端點的請求,根據方法不同可能會產生不同的效果 - 請參考您調用的API的文檔,以了解應使用的適當方法。","HTTP method of request _PARAM1_":"請求_PARAM1_的HTTP方法","Defines to what extent the results of the request is can/must be cached. When cached, instead of sending a request to the server, the browser will avoid making a real request to the server and will use a previous response given by the server for the same request.\nThe server also has a say in this via the Cache-Control header.":"定義請求結果可以/必須緩存的程度。當緩存時,瀏覽器將避免向伺服器發送請求,並將使用伺服器為相同請求給出的先前響應,而不是向伺服器發出真正的請求。伺服器還可以通過Cache-Control標頭說明這一點。","HTTP Caching strategy":"HTTP緩存策略","Set HTTP caching strategy of request _PARAM1_ to _PARAM2_":"將請求_PARAM1_的HTTP緩存策略設置為_PARAM2_","Learn more about what each caching strategy does [on the MDN page for cache](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache).":"了解每種緩存策略的更多信息 [在MDN緩存頁面上](https://developer.mozilla.org/en-US/docs/Web/API/Request/cache)。","HTTP Caching":"HTTP緩存","HTTP caching strategy of request _PARAM1_":"請求_PARAM1_的HTTP緩存策略","Sets the body of an HTTP request to a JSON representation of a structure variable.":"將HTTP請求的主體設置為結構變量的JSON表示。","Body as JSON":"應對主體的JSON","Set body of request _PARAM1_ to contents of _PARAM2_ as JSON":"將請求_PARAM1_的主體設置為_PARAM2_的內容,作為JSON","Variable with body contents":"包含主體內容的變數","Sets the body of an HTTP request to a form data representation of a structure variable.":"將HTTP請求的主體設置為結構變量的表單數據表示。","Body as form data":"應對主體的表單數據","Set body of request _PARAM1_ to contents of _PARAM2_ as form data":"將請求的主體_PARAM1_設置為_PARAM2_的內容作為表單數據","the body of the HTTP request. Contains data to send to the server, ususally in plain text, JSON or FormData format. This cannot be set for GET requests.":"HTTP請求的主體。包含要發送到服務器的數據,通常是純文本、JSON或FormData格式。不能為GET請求設置。","Body":"主體","body of request _PARAM1_":"請求_PARAM1_的主體","an HTTP header to be sent with the request.":"要與請求一起發送的HTTP標頭。","Header":"標頭","HTTP header _PARAM2_ of request _PARAM1_":"請求_PARAM1_的HTTP標頭_PARAM2_","HTTP header name":"HTTP標頭名稱","the request template's target URL.":"請求模板的目標URL。","URL":"URL","the URL of request template _PARAM1_":"請求模板_PARAM1_的URL","CORS prevents most external websites from being queried with the browser's HTTP client, since the browser may be authenticated on that website and as such another website would be able to impersonate the player on that other website.\nWhen the CORS Bypass is enabled, the request will be made from a server that is not authenticated anywhere and as such is not blocked by CORS, and it will share the response with your game. Note that as such, authentication cookies are ignored! If you own the REST API you are requesting, add CORS headers to your server instead of using this CORS Bypass.":"CORS防止通常使用瀏覽器的HTTP客戶端查詢大多數外部網站,因為瀏覽器可能在該網站上進行身份驗證,因此另一個網站能夠冒充該網站上的玩家。\n啟用CORS Bypass後,請求將從未在任何地方進行身份驗證的服務器進行,因此不會被CORS阻擋,並且將與你的遊戲共享響應。請注意,身份驗證cookies將被忽略!如果你擁有正在請求的REST API,請在服務器上添加CORS標頭,而不是使用此CORS Bypass。","Enable CORS Bypass":"啟用CORS Bypass","Enable CORS Bypass for request _PARAM1_: _PARAM2_":"為請求_PARAM1_啟用CORS Bypass:_PARAM2_","Enable the CORS Bypass?":"啟用CORS Bypass?","The CORS Bypass server is offered for free by [arthuro555](https://twitter.com/arthuro555). Consider making a [donation](https://ko-fi.com/arthuro555) to help keep the CORS Bypass server running.":"免費提供CORS Bypass服務器的是[arthuro555](https://twitter.com/arthuro555)。考慮捐贈(https://ko-fi.com/arthuro555)以幫助保持CORS Bypass服務器運行。","Checks whether or not CORS Bypass has been enabled for the request template.":"檢查CORS Bypass是否已為請求模板啟用。","CORS Bypass enabled":"已啟用CORS Bypass","CORS Bypass is enabled for request _PARAM1_":"為請求_PARAM1_啟用了CORS Bypass","Executes the request defined by a request template.":"執行由請求模板定義的請求。","Execute the request":"執行請求","Execute request _PARAM1_ and store results in _PARAM2_":"執行請求_PARAM1_並將結果存儲在_PARAM2_中","Request to execute":"執行要求","Variable where to store the response to the request":"存儲請求響應的變量","Checks whether the server marked the response as a success (status code 1XX/2XX), not as a failure (status code 4XX/5XX).":"檢查服務器是否將響應標記為成功(狀態碼1XX/2XX),而不是失敗(狀態碼4XX/5XX)。","Success":"成功","Response _PARAM1_ indicates a success":"響應_PARAM1_表明成功","Variable containing the response":"包含響應的變量","the status code of the HTTP request (e.g. 200 if succeeded, 404 if not found, etc).":"HTTP 請求的狀態碼(例如,成功為 200,未找到為 404 等)。","Status code":"狀態碼","Status code of response _PARAM1_":"回應 _PARAM1_ 的狀態碼","Gets the status text for a response. For example, for a response with the status code 404, the status text will be \"Not Found\".":"取得回應的狀態文字。例如,對於狀態碼 404 的回應,狀態文字將是 \"未找到\"。","Status text":"狀態文字","one of the HTTP headers included in the server's response.":"伺服器回應中包含的 HTTP 標頭之一。","Header _PARAM2_ of response _PARAM1_":"回應 _PARAM1_ 的標頭 _PARAM2_","Reads the body sent by the server, and store it as a string in a variable.":"讀取伺服器發送的主體,並將其作為字串存儲在變量中。","Get response body (text)":"獲取回應主體(文字)","Read body of response _PARAM1_ into _PARAM2_ as text":"將回應 _PARAM1_ 的主體讀取為文字,並將其存儲到 _PARAM2_ 中","Variable where to write the body contents into":"將主體內容寫入的變量","Reads the body sent by the server, parses it as JSON and stores the resulting structure in a variable.":"讀取伺服器發送的主體,將其解析為 JSON,並將結果結構存儲在變量中。","Get response body (JSON)":"獲取回應主體(JSON)","Read body of response _PARAM1_ into _PARAM2_ as JSON":"將回應 _PARAM1_ 的主體讀取為 JSON,並將其存儲到 _PARAM2_ 中","Advanced platformer movements":"高級平台遊戲者動作","Let platformer characters: air jump, wall jump wall sliding, coyote time and dashing.":"讓平台遊戲者:在空中跳躍、壁跳、貼牆滑行、coyote time和衝刺。","Movement":"移動","Let platformer characters jump shortly after leaving a platform and also jump in mid-air.":"讓平台遊戲角色在離開平台後不久跳躍,也可以在空中跳躍。","Coyote time and air jump":"補狗時間和空中跳躍","Platformer character behavior":"平台遊戲角色行為","Coyote time duration":"Coyote 時間持續時間","Coyote time":"Coyote 時間","Can coyote jump":"能否使用假鳶跳","Was in the air":"正在空中","Number of air jumps":"空中跳躍次數","Air jump":"空中跳躍","Floor jumps count as air jumps":"地板跳躍計算為空中跳躍","Object":"對象","Behavior":"行為","Change the coyote time duration of an object (in seconds).":"更改對象的狗狐時間持續時間(秒)。","Coyote timeframe":"狗狐時間框架","Change coyote time of _PARAM0_: _PARAM2_ seconds":"修改 _PARAM0_ 的狐狸時間:_PARAM2_ 秒","Duration":"持續時間","Coyote time duration in seconds.":"狐狸時間長度(秒)。","Check if a coyote jump can currently happen.":"檢查是否可以執行狐狸跳躍。","_PARAM0_ can coyote jump":"_PARAM0_ 可以進行狐狸跳躍。","Update WasInTheAir":"更新 WasInTheAir","Update WasInTheAir property of _PARAM0_":"更新 _PARAM0_ 的 WasInTheAir 屬性","Number of jumps in mid-air that are allowed.":"允許在空中進行的跳躍次數。","Maximal jump number":"最大跳躍次數","Number of jumps in mid-air that are still allowed.":"仍然允許在空中進行的跳躍次數。","Remaining jump":"剩餘跳躍次數","Change the number of times the character can jump in mid-air.":"更改角色在空中可以跳躍的次數。","Air jumps":"空中跳躍","Change the number of times _PARAM0_ can jump in mid-air: _PARAM2_":"更改 _PARAM0_ 可以在空中跳躍的次數:_PARAM2_","Remove one of the remaining air jumps of a character.":"移除角色的一次剩餘空中跳躍。","Remove a remaining air jump":"移除一次剩餘的空中跳躍","Remove one of the remaining air jumps of _PARAM0_":"移除一次 _PARAM0_ 的剩餘空中跳躍","Allow back all air jumps of a character.":"允許恢復角色的所有空中跳躍。","Reset air jumps":"重置空中跳躍","Allow back all air jumps of _PARAM0_":"允許恢復 _PARAM0_ 的所有空中跳躍","Check if floor jumps are counted as air jumps for an object.":"檢查地板跳躍是否被計為物體的空中跳躍。","Floor jumps count as air jumps for _PARAM0_":"地板跳躍計為 _PARAM0_ 的空中跳躍。","Let platformer characters jump and slide against walls.":"讓平台遊戲角色跳躍並貼著牆壁滑行。","Wall jump":"牆壁跳躍","Platformer character configuration stack":"平台遊戲角色配置堆疊","Jump detection time frame":"跳躍偵測時間框","Side speed":"側面速度","Side acceleration":"側面加速度","Side speed sustain time":"側面速度持續時間","Gravity":"重力","Wall sliding":"壁面滑行","Maximum falling speed":"最大下落速度","Impact speed absorption":"衝擊速度吸收","Minimal falling speed":"最小下落速度","Keep sliding without holding a key":"在不按住按鍵的情况下繼續滑行","Check if the object has just wall jumped.":"檢查物體是否剛剛跳躍自牆。","Has just wall jumped":"_PARAM0_ 剛剛從牆上跳躍","_PARAM0_ has just jumped from a wall":"_PARAM0_ 剛從牆跳","Check if the object is wall jumping.":"檢查對象是否正在牆壁跳躍。","Is wall jumping":"是否牆壁跳躍","_PARAM0_ jumped from a wall":"_PARAM0_從牆壁跳下","Check if the object is against a wall.":"檢查對象是否靠在牆壁上。","Against a wall":"靠在牆壁上","_PARAM0_ is against a wall":"_PARAM0_靠在牆上","Remember that the character was against a wall.":"記住角色曾經靠在牆上。","Remember is against wall":"記住靠在牆上","_PARAM0_ remembers having been against a wall":"_PARAM0_記得曾經靠在牆上","Forget that the character was against a wall.":"忘記角色曾經靠在牆上。","Forget is against wall":"忘記靠在牆上","_PARAM0_ forgets to had been against a wall":"_PARAM0_忘記曾經靠在牆上","Remember that the character was against a wall within the time frame.":"記住角色曾經在時間範圍內靠在牆上。","Was against wall":"在牆上","_PARAM0_ remembers to had been against a wall within _PARAM2_ seconds":"_PARAM0_記得在_PARAM2_秒內曾經靠在牆上","Time frame":"時間範圍","The time frame in seconds.":"以秒表示時間範圍。","Remember that the jump key was pressed.":"記住跳躍鍵被按下。","Remember key pressed":"記住按下的鍵","_PARAM0_ remembers the _PARAM2_ key was pressed":"_PARAM0_記得_PARAM2_鍵被按下","Key":"鍵","Forget that the jump key was pressed.":"忘記跳躍鍵被按下。","Forget key pressed":"忘記按下的鍵","_PARAM0_ forgets the _PARAM2_ key was pressed":"_PARAM0_忘記_PARAM2_鍵被按下","Check if the key was pressed within the time frame.":"檢查在時間範圍內鍵是否被按下。","_PARAM0_ remembers _PARAM3_ key was pressed within _PARAM2_ seconds":"_PARAM0_記得_PARAM3_鍵在_PARAM2_秒內被按下","Enable side speed.":"啟用側邊速度。","Toggle side speed":"切換側邊速度","Enable side speed for _PARAM0_: _PARAM2_":"為_PARAM0_啟用側邊速度:_PARAM2_","Enable side speed":"啟用側邊速度","Enable wall sliding.":"啟用牆壁滑行。","Slide on wall":"在牆上滑動","Enable wall sliding for _PARAM0_: _PARAM2_":"為_PARAM0_啟用牆壁滑行:_PARAM2_","Enable wall sliding":"啟用牆壁滑行","Absorb falling speed of an object.":"吸收物體的下降速度。","Absorb falling speed":"吸收下降速度","Absorb falling speed of _PARAM0_: _PARAM2_":"吸收_PARAM0_的下降速度:_PARAM2_","Speed absorption (in pixels per second)":"每秒吸收速度(以像素為單位)","The wall jump detection time frame of an object (in seconds).":"對象的牆跳檢測時間範圍(以秒為單位)。","Jump time frame":"跳躍時間範圍","Change the wall jump detection time frame of _PARAM0_: _PARAM2_":"更改_PARAM0_的牆跳檢測時間範圍:_PARAM2_","Change the wall jump detection time frame of an object (in seconds).":"更改對象的牆跳檢測時間範圍(以秒為單位)。","Jump detection time frame (in seconds)":"跳躍檢測時間範圍(以秒為單位)","The side speed of wall jumps of an object (in pixels per second).":"對象牆跳的側向速度(以像素為單位)。","Change the side speed of wall jumps of _PARAM0_: _PARAM2_":"更改_PARAM0_的牆跳側向速度:_PARAM2_","Change the side speed of wall jumps of an object (in pixels per second).":"更改對象的牆跳側向速度(以像素為單位)。","The side acceleration of wall jumps of an object (in pixels per second per second).":"對象的牆跳側向加速度(以像素為單位每秒每秒)。","Change the side acceleration of wall jumps of _PARAM0_: _PARAM2_":"更改_PARAM0_的牆跳側向加速度:_PARAM2_","Change the side acceleration of wall jumps of an object (in pixels per second per second).":"更改對象的牆跳側向加速度(以像素每秒每秒為單位)。","The wall sliding gravity of an object (in pixels per second per second).":"對象的牆壁滑行重力(以像素每秒每秒為單位)。","Change the wall sliding gravity of _PARAM0_: _PARAM2_":"更改_PARAM0_的牆壁滑行重力:_PARAM2_","Change the wall sliding gravity of an object (in pixels per second per second).":"更改對象的牆壁滑行重力(以像素每秒每秒為單位)。","The wall sliding maximum falling speed of an object (in pixels per second).":"對象的牆壁滑行最大下降速度(以像素每秒為單位)。","Change the wall sliding maximum falling speed of _PARAM0_: _PARAM2_":"更改_PARAM0_的牆壁滑行最大下降速度:_PARAM2_","Change the wall sliding maximum falling speed of an object (in pixels per second).":"更改對象的牆壁滑行最大下降速度(以像素每秒為單位)。","Change the impact speed absorption of an object.":"更改對象的衝擊速度吸收。","Change the impact speed absorption of _PARAM0_: _PARAM2_":"更改_PARAM0_的衝擊速度吸收:_PARAM2_","Make platformer characters dash toward the floor.":"使平台遊戲角色朝地板衝刺。","Dive dash":"潛水衝刺","Initial falling speed":"初始下落速度","Simulate a press of dive key to make the object dives to the floor if it can dive.":"模擬按下潛水鍵,使對象潛入地板(如果可以潛水)。","Simulate dive key":"模擬潛水鍵","Simulate pressing dive key for _PARAM0_":"模擬按下_PARAM0_的潛水鍵","Check if the object can dive.":"檢查對象是否可以潛水。","Can dive":"可以潛水","_PARAM0_ can dive":"_PARAM0_可以潛水","Check if the object is diving.":"檢查對象是否潛水。","Is diving":"正在潛水","_PARAM0_ is diving":"_PARAM0_正在潛水","Make platformer characters dash horizontally.":"使平台遊戲角色水平衝刺。","Horizontal dash":"水平衝刺","Platformer charcacter configuration stack":"平台遊戲角色配置堆疊","Initial speed":"初始速度","Sustain minimum duration":"最小持續時間","Sustain":"持續","Sustain maxiumum duration":"最大持續時間","Sustain acceleration":"持續加速度","Sustain maxiumum speed":"持續最大速度","Sustain gravity":"持續重力","Decceleration":"減速","Cool down duration":"冷卻時間","Update the last direction used by the character.":"更新角色使用的最後方向。","Update last direction":"更新最後方向","Update last direction used by _PARAM0_":"更新 _PARAM0_ 使用的最後方向","Simulate a press of dash key.":"模擬按下衝刺鍵。","Simulate dash key":"模擬衝刺鍵","Simulate pressing dash key for _PARAM0_":"模擬按下破折號鍵為_PARAM0_","Check if the object is dashing.":"檢查對象是否在破折號狀態。","Is dashing":"是否在破折號狀態","_PARAM0_ is dashing":"_PARAM0_ 現在在破折號狀態","Abort the current dash and set the object to its usual horizontal speed.":"終止當前破折號並將對象設定為其通常的水平速度。","Abort dash":"中止破折號","Abort the current dash of _PARAM0_":"中止_PARAM0_的當前破折號","Resolve conflict between platformer character configuration changes.":"解決平台遊戲角色配置更改之間的衝突。","Revert configuration changes for one identifier and update the character configuration to use the most recent ones.":"撤消一個標識符的配置更改並更新角色配置以使用最近的更改。","Revert configuration":"恢復配置","Revert configuration changes: _PARAM2_ on _PARAM0_":"回復配置更改:_PARAM2_ 在 _PARAM0_ 上","Configuration identifier":"配置標識符","Return the character property value when no change applies on it.":"當沒有變化時返回角色屬性值。","Setting":"設定","Configure the _PARAM2_ of _PARAM0_: _PARAM3_ with the identifier: _PARAM4_":"為_PARAM0_配置_PARAM2_:_PARAM3_,使用標識符:_PARAM4_","Return the usual maximum horizontal speed when no configuration change applies on it.":"當沒有配置變化適用於其時返回通常的最大水平速度。","Usual maximum horizontal speed":"通常的最大水平速度","Configure the maximum horizontal speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"為_PARAM0_配置最大水平速度:_PARAM2_,使用標識符:_PARAM3_","Configure a character property for a given configuration layer and move this layer on top.":"為給定的配置層配置角色屬性並將此層移到頂部。","Configure setting":"配置設置","Setting value":"設置值","Configure character gravity for a given configuration layer and move this layer on top.":"為給定的配置層配置角色重力並將此層移到頂部。","Configure gravity":"配置重力","Configure the gravity of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"為_PARAM0_配置重力:_PARAM2_,使用標識符:_PARAM3_","Configure character deceleration for a given configuration layer and move this layer on top.":"為給定的配置層配置角色減速並將此層移到頂部。","Configure horizontal deceleration":"配置水平減速","Configure the horizontal deceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"為_PARAM0_配置水平減速:_PARAM2_,使用標識符:_PARAM3_","Acceleration":"加速度","Configure character maximum speed for a given configuration layer and move this layer on top.":"為給定的配置層配置角色最大速度並將此層移到頂部。","Configure maximum horizontal speed":"配置最大水平速度","Maximum horizontal speed":"最大水平速度","Configure character acceleration for a given configuration layer and move this layer on top.":"為給定的配置層配置角色加速度並將此層移到頂部。","Configure horizontal acceleration":"配置水平加速度","Configure the horizontal acceleration of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"為_PARAM0_配置水平加速度:_PARAM2_,使用標識符:_PARAM3_","Configure character maximum falling speed for a given configuration layer and move this layer on top.":"為特定配置層配置角色最大下落速度並將此層移到頂部。","Configure maximum falling speed":"配置最大下落速度","Configure the maximum falling speed of _PARAM0_: _PARAM2_ with the identifier: _PARAM3_":"配置_PARAM0_的最大下落速度:_PARAM2_,識別符:_PARAM3_","Advanced movements for 3D physics characters":"3D物理角色的高级动作","Let 3D physics characters: air jump, wall jump wall sliding, coyote time and dashing.":"讓3D物理角色:在空中跳躍、壁跳、貼牆滑行、coyote time和衝刺。","Let 3D physics characters jump shortly after leaving a platform and also jump in mid-air.":"讓3D物理角色在離開平台後短暫跳躍,並在空中跳躍。","Coyote time and air jump for 3D":"3D的Coyote時間和空中跳躍。","3D physics character":"3D物理角色","A Jump control was applied from a default control or simulated by an action.":"從默認控制應用了跳躍控制或通過操作模擬了跳躍。","Jump pressed or simulated":"跳躍按下或模擬","_PARAM0_ has the Jump key pressed or simulated":"_PARAM0_按下或模擬了跳躍鍵","Advanced p2p event handling":"高级P2P事件处理","Allows handling all received P2P events at once instead of one per frame. It is more complex but also potentially more performant.":"允許一次處理所有接收到的P2P事件,而不是每幀處理一個。它更複雜,但也有潛在的更高性能。","Marks the event as handled, to go on to the next.":"將事件標記為已處理,以繼續下一個。","Dismiss event":"拒絕事件","Dismiss event _PARAM1_ as handled":"將事件_PARAM1_標記為已處理","The event to dismiss":"要拒絕的事件","Advanced projectile":"高級彈道","Control how a projectile moves including speed, acceleration, distance, and lifetime.":"控制彈道移動,包括速度,加速度,距離和壽命。","Control how a projectile object moves including lifetime, distance, speed, and acceleration.":"控制投射物體的運動方式,包括壽命、距離、速度和加速度。","Lifetime":"壽命","Use \"0\" to ignore this property.":"使用“0”來忽略此屬性。","Max distance from starting position":"距離起始位置的最大距離","Max speed":"最大速度","Speed from object forces will not exceed this value. Use \"0\" to ignore this property.":"來自對象力量的速度不會超過此值。 使用 \"0\" 忽略此屬性。","Speed from object forces will not go below this value. Use \"0\" to ignore this property.":"來自對象力量的速度不會低於此值。 使用 \"0\" 忽略此屬性。","Negative acceleration can be used to stop a projectile.":"負加速度可用於停止彈丸。","Starting speed":"起始速度","Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"創建對象時,對象將朝向的方向移動。 使用 \"0\" 忽略此屬性。","Delete when lifetime is exceeded":"當超出壽命時進行刪除","Delete when distance from starting position is exceeded":"當超出起始位置的距離時進行刪除","Check if max distance from starting position has been exceeded (object will be deleted next frame).":"檢查是否超過了從起始位置的最大距離(對象將在下一幀刪除)。","Max distance from starting position has been exceeded":"從起始位置的最大距離已超過","Max distance from starting position of _PARAM0_ has been exceeded":"已超出_PARAM0_的起始位置的最大距離","Check if lifetime has been exceeded (object will be deleted next frame).":"檢查是否超過了生命週期(對象將在下一幀刪除)。","Lifetime has been exceeded":"已超過生命週期","Lifetime of _PARAM0_ has been exceeded":"_PARAM0_的生命週期已超過","the lifetime of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"對象的生命週期。屬性超出後將刪除對象。使用“0”忽略此屬性。","the lifetime":"生命週期","Restart lifetime timer of object.":"重設對象的生命週期計時器。","Restart lifetime timer":"重設生命週期計時器","Restart lifetime timer of _PARAM0_":"重設_PARAM0_的生命週期計時器","the max distance from starting position of the object. Object is deleted after property has been exceeded. Use \"0\" to ignore this property.":"對象的最大距離從起始位置。屬性超出後將刪除對象。使用“0”忽略此屬性。","the max distance from starting position":"從起始位置的最大距離","Change the starting position of object to it's current position.":"將對象的起始位置更改為當前位置。","Change starting position to the current position":"將起始位置更改為當前位置","Change the starting position of _PARAM0_ to it's current position":"將_PARAM0_的起始位置更改為當前位置","the max speed of the object. Object forces cannot exceed this value. Use \"0\" to ignore this property.":"對象的最大速度。對象力不能超出此值。使用“0”忽略此屬性。","the max speed":"最大速度","the minSpeed of the object. Object forces cannot go below this value. Use \"0\" to ignore this property.":"對象的最小速度。對象力不能低於此值。使用“0”忽略此屬性。","MinSpeed":"最小速度","the minSpeed":"最小速度","the acceleration of the object. Use a negative number to slow down.":"對象的加速度。使用負數減速。","the acceleration":"加速度","the starting speed of the object. Object will move in the direction it is facing when it is created. Use \"0\" to ignore this property.":"對象的初始速度。創建時,對象會沿著其面對的方向移動。使用“0”忽略此屬性。","the starting speed":"初始速度","Check if automatic deletion is enabled when lifetime is exceeded.":"檢查是否在超過壽命時啟用自動刪除。","Automatic deletion is enabled when lifetime is exceeded":"當壽命耗盡時,已啟用自動刪除。","Automatic deletion is enabled when lifetime is exceeded on _PARAM0_":"當壽命耗盡時,已對_PARAM0_啟用自動刪除。","Change automatic deletion of object when lifetime is exceeded.":"更改超過壽命時對象的自動刪除。","Change automatic deletion when lifetime is exceeded":"更改當壽命過期時的自動刪除。","Enable automatic deletion of _PARAM0_ when lifetime is exceeded: _PARAM2_":"當壽命耗盡時,已啟用對_PARAM0_的自動刪除:_PARAM2_","DeleteWhenLifetimeExceeded":"壽命耗盡時刪除","Check if automatic deletion is enabled when distance from starting position is exceeded.":"當超過起始位置距離時,檢查自動刪除是否已啟用。","Automatic deletion is enabled when distance from starting position is exceeded":"當超過起始位置距離時,已啟用自動刪除。","Automatic deletion is enabled when distance from starting position is exceeded on _PARAM0_":"當超過起始位置距離時,已對_PARAM0_啟用自動刪除。","Change automatic deletion when distance from starting position is exceeded.":"更改起始位置距離超過時的自動刪除。","Change automatic deletion when distance from starting position is exceeded":"更改超過起始位置距離時的自動刪除。","Enable automatic deletion of _PARAM0_ when distance from starting position is exceeded: _PARAM2_":"當超過起始位置距離時,已啟用對_PARAM0_的自動刪除:_PARAM2_","DeleteWhenDistanceExceeded":"起始位置距離過期時刪除","Animated Back and Forth Movement":"來回動畫運動","Make the object go on the left, then when some distance is reached, flip and go back to the right. Make sure that your object has two animations called \"GoLeft\" and \"TurnLeft\".":"使對象向左移動,然後當達到一定距離時,翻轉並向右移動。確保您的對象有兩個名為“GoLeft”和“TurnLeft”的動畫。","Animated Back and Forth (mirrored) Movement":"動畫來回(鏡像)運動","Animatable capability":"可動畫化的能力","Flippable capability":"可翻轉的能力","Speed on X axis, in pixels per second":"X軸上的速度,以每秒像素為單位","Distance traveled on X axis, in pixels":"X軸上的行進距離,以像素為單位","Array tools":"數組工具","A collection of utilities and tools for working with arrays.":"一組用於處理數組的工具和工具。","General":"一般","The index of the first variable that equals to a specific number in an array.":"數組中與特定數字相等的第一個變數的索引。","Index of number":"數字的索引","The first index where _PARAM2_ can be found in _PARAM1_":"在 _PARAM1_ 中找到 _PARAM2_ 的第一個索引","Array to search the value in":"要在其中搜索值的數組","Number to search in the array":"要在數組中搜索的數字","The index of the first variable that equals to a specific text in an array.":"數組中與特定文本相等的第一個變量的索引。","Index of text":"文本的索引","String to search in the array":"在數組中搜索的文本","The index of the last variable that equals to a specific number in an array.":"數組中與特定數字相等的最後一個變數的索引。","Last index of number":"數字的最後一個索引","The last index where _PARAM2_ can be found in _PARAM1_":"在 _PARAM1_ 中找到 _PARAM2_ 的最後一個索引","The index of the last variable that equals to a specific text in an array.":"數組中與特定文本相等的最後一個變量的索引。","Last index of text":"文本的最後一個索引","Returns a random number of an array of numbers.":"返回數組數字的隨機數。","Random number in array":"陣列中的隨機數","A randomly picked number of _PARAM1_":"隨機選擇了 _PARAM1_ 個數字","Array to get a number from":"從陣列中獲取數字","a random string of an array of strings.":"數組中的字符串隨機字符。","Random string in array":"陣列中的隨機字符串","A randomly picked string of _PARAM1_":"隨機選擇了 _PARAM1_ 字符串","Array to get a string from":"從陣列中獲取字符串","Removes the last array child of an array, and return it as a number.":"刪除數組的最後一個子元素,並將其作為數字返回。","Get and remove last variable from array (as number)":"從數組中獲取並刪除最後一個變量(作為數字)","Remove last child of _PARAM1_ and store it in _PARAM2_":"刪除 _PARAM1_ 的最後一個子元素並將其儲存到 _PARAM2_ 中","Array to pop a child from":"從陣列中彈出一個子元素","Removes the last array child of an array, and return it as a string.":"刪除數組的最後一個子元素,並將其作為字符串返回。","Pop string from array":"從數組中彈出字符串","Removes the first array child of an array, and return it as a number.":"刪除數組的第一個子元素,並將其作為數字返回。","Shift number from array":"從數組中移除數字","Array to shift a child from":"從數組中移除一個子元素","Removes the first array child of an array, and return it as a string.":"刪除數組的第一個子元素,並將其作為字符串返回。","Shift string from array":"從數組中移除字符串","Checks if an array contains a specific number.":"檢查陣列是否包含特定數字。","Array has number":"數組具有數字","Array _PARAM1_ has number _PARAM2_":"數組 _PARAM1_ 具有數字 _PARAM2_","The number to search":"搜索的數字","Checks if an array contains a specific string.":"檢查陣列是否包含特定字符串。","Array has string":"數組具有字符串","Array _PARAM1_ has string _PARAM2_":"數組 _PARAM1_ 具有字符串 _PARAM2_","The text to search":"搜索的字符串","Copies a portion of a scene array variable into a new scene array variable.":"將場景數組變量的一部分複製到新的場景數組變量中。","Slice an array":"切片數組","Slice array _PARAM1_ from indices _PARAM3_ to _PARAM4_ into _PARAM2_":"將 _PARAM1_ 數組從索引 _PARAM3_ 到 _PARAM4_ 切片到 _PARAM2_ 中","The array to take a slice from":"從中取一部分切片的陣列","The array to store the slice into":"儲存切片的陣列","The index to start the slice from":"切片開始的索引","The index to end the slice at":"切片結束的索引","Set to 0 to copy all of the array. If you use a negative value, the index will be selected beginning from the end. \nFor example, slicing an array with 5 elements from 0 to -1 would take only elements from indices 0 to 3.":"將設置為 0 以復製整個數組。如果使用負值,索引將從結尾開始選擇。\n例如,對包含 5 個元素的數組進行切片,從 0 到 -1 將僅取從索引 0 到 3 的元素。","Cuts a portion of an array off.":"切下數組的一部分。","Splice an array":"切片一個數組","Remove _PARAM3_ items from array _PARAM1_ starting from index _PARAM2_":"從索引 _PARAM2_ 開始,從數組 _PARAM1_ 中刪除 _PARAM3_ 個項目","The array to remove items from":"從中刪除項目的數組","The index to start removing from":"開始刪除的索引","If you use a negative value, the index will be selected beginning from the end.":"如果使用負值,索引將從結尾開始選擇。","The amount of elements to remove":"要刪除的元素數量","Set to 0 to remove until the end of the array.":"設置為 0 以刪除直到數組的末尾。","Combines all elements of 2 scene arrays into one new scene array.":"將 2 個場景數組的所有元素合併成一個新的場景數組。","Combine 2 arrays":"合併 2 個數組","Combine array _PARAM1_ and _PARAM2_ into _PARAM3_":"將數組 _PARAM1_ 和 _PARAM2_ 合併成 _PARAM3_","The first array":"第一個數組","The second array":"第二個數組","The variable to store the new array in":"將新數組存儲在的變數","Appends a copy of all variables of one array to another array.":"將一個數組的所有變量的副本附加到另一個數組。","Append all variable to another array":"將所有變量附加到另一個數組","Append all elements from array _PARAM1_ into _PARAM2_":"將數組 _PARAM1_ 的所有元素附加到 _PARAM2_ 中","The array to get the variables from":"從中獲取變量的數組","The variable to append the variables in":"將變量附加到的變量","Reverses children of an array. The first array child becomes the last, and the last array child becomes the first.":"反轉數組的子代。第一個數組子代變為最後一個,最後一個數組子代變為第一個。","Reverse an array":"反轉一個數組","Reverse array _PARAM1_":"反轉數組 _PARAM1_","The array to reverse":"要反轉的數組","Fill an element with a number.":"使用一個數字填充一個元素。","Fill array with number":"使用數字填充數組","Fill array _PARAM1_ with _PARAM2_ from index _PARAM3_ to index _PARAM4_":"從索引 _PARAM3_ 到索引 _PARAM4_ 使用 _PARAM2_ 填充數組 _PARAM1_","The array to fill":"填充的數組","The number to fill":"填充的數字","The index to start filling from":"開始填充的索引","The index to stop filling at":"停止填充的索引","Set to 0 to fill until the end of the array.":"設置為 0 以填充到數組的末尾。","Shuffles all children of an array.":"對數組的所有子元素進行洗牌。","Shuffle array":"洗牌數組","Shuffle array _PARAM1_":"洗牌數組 _PARAM1_","The array to shuffle":"要洗牌的數組","Replaces all arrays inside of an array with their children. For example, [[1,2], [3,4]] becomes [1,2,3,4].":"將數組內所有的數組替換為其子元素。例如,[[1,2], [3,4]] 變成 [1,2,3,4]。","Flatten array":"展開數組","Flatten array _PARAM1_ (Deeply flatten: _PARAM2_)":"展開數組 _PARAM1_(深度展開:_PARAM2_)","The array to flatten":"要展開的數組","Deeply flatten":"深度展開","If yes, will continue flattening until there is no arrays in the array anymore.":"如果是,將繼續展開直到數組中不再有數組為止。","Removes the last array child of an array, and stores it in another variable.":"刪除數組的最後一個子元素,並將其存儲在另一個變量中。","Pop array child":"彈出數組子元素","The array to pop a child from":"要從彈出子元素的數組","The variable to store the popped value into":"將彈出的值存儲到的變量","Removes the first array child of an array, and stores it in another variable.":"刪除數組的第一個子元素,並將其存儲在另一個變量中。","Shift array child":"移到數組子元素","Remove first child of _PARAM1_ and store it in _PARAM2_":"從 _PARAM1_ 中刪除第一個子元素並將其存儲在 _PARAM2_ 中","The array to shift a child from":"從中移動子元素的數組","The variable to store the shifted value into":"將移動的值存儲到變數中","Insert a variable at a specific index of an array.":"在數組的特定索引中插入變量。","Insert variable at":"插入變量在","Insert variable _PARAM3_ in _PARAM1_ at index _PARAM2_":"在 _PARAM1_ 的索引 _PARAM2_ 中插入變量 _PARAM3_","The array to insert a variable in":"要在其中插入變量的數組","The index to insert the variable at":"要在其中插入變量的索引","The name of the variable to insert":"要插入的變量的名稱","Split a string into an array of strings via a separator.":"通過分隔符將字符串分割為字符串數組。","Split string into array":"將字符串分割為數組","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM3_":"通過分隔符 _PARAM2_ 將字符串 _PARAM1_ 分割為數組 _PARAM3_","The string to split":"要分割的字符串","The separator to use to split the string":"用於拆分字符串的分隔符","For example, if you have a string \"Hello World\", and the separator is a space (\" \"), the resulting array would be [\"Hello\", \"World\"]. If the separator is an empty string (\"\"), it will make an element per character ([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"]).":"例如,如果您有一個字符串\"Hello World\",並且分隔符是空格(\" \"),則產生的數組將是[\"Hello\", \"World\"]。如果分隔符是空字符串(\" \"),它將使每個字符成為一個元素([\"H\", \"e\", \"l\", \"l\", \"o\", \" \", \"W\", \"o\", \"r\", \"l\", \"d\"])。","Array where to store the results":"存儲結果的數組","Returns a string made from all strings in an array.":"由數組中所有字符串組成的字符串","Join all elements of an array together into a string":"將數組中的所有元素連接成一個字符串","The name of the array to join into a string":"要連接為字符串的數組的名稱","Optional separator text between each element":"每個元素之間的可選分隔符文本","Get the sum of all numbers in an array.":"獲取數組中所有數字的總和","Sum of array children":"數組子項的總和","The array":"該數組","Gets the smallest number in an array.":"獲取數組中最小的數字","Smallest value":"最小值","Gets the biggest number in an array.":"獲取數組中最大的數字","Biggest value":"最大值","Gets the average number in an array.":"獲取數組中的平均數","Average value":"平均值","Gets the median number in an array.":"獲取數組中的中間數","Median value":"中間值","Sort an array of number from smallest to biggest.":"從最小到最大排序數組中的數字","Sort an array":"排序數組","Sort array _PARAM1_":"排序數組_PARAM1_","The array to sort":"要排序的數組","The first index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"在_PARAM1_的_PARAM2_中找到_PARAM3_的第一個索引","The object the variable is from":"變量來自的對象","The last index where _PARAM3_ can be found in _PARAM2_ of _PARAM1_":"在_PARAM1_的_PARAM2_中找到_PARAM3_的最後一個索引","A randomly picked number of _PARAM2_ of _PARAM1_":"從_PARAM1_的_PARAM2_中隨機選擇數字","A randomly picked string of _PARAM2_ of _PARAM1_":"從_PARAM1_的_PARAM2_中隨機選擇字符串","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM3_":"刪除_PARAM1_的_PARAM2_的最後一個子元素並將其存儲在_PARAM3_中","Array _PARAM2_ of _PARAM1_ has number _PARAM3_":"_PARAM1_的_PARAM2_在_PARAM3_中具有數字","Array _PARAM2_ of _PARAM1_ has string _PARAM3_":"_PARAM1_的_PARAM2_在_PARAM3_中具有字符串","Slice array _PARAM2_ of _PARAM1_ from indices _PARAM5_ to _PARAM6_ into _PARAM4_ of _PARAM3_":"從索引為_PARAM5_到_PARAM6_的_PARAM1_數組切片為_PARAM4_的_PARAM3_","Remove _PARAM4_ items from array _PARAM2_ of _PARAM1_ starting from index _PARAM3_":"從索引為_PARAM3_開始,移除_PARAM4_的_PARAM1_數組中的項目","Combine array _PARAM2_ of _PARAM1_ and _PARAM4_ of _PARAM3_ into _PARAM6_ of _PARAM5_":"將_PARAM1_和_PARAM3_的_PARAM4_數組結合為_PARAM5_的_PARAM6_","Append all elements from array _PARAM2_ of _PARAM1_ into _PARAM4_ of _PARAM3_":"將_PARAM2_的_PARAM1_數組的所有元素附加到_PARAM3_的_PARAM4_中","Reverse array _PARAM2_ of _PARAM1_":"反轉_PARAM1_的_PARAM2_數組","Fill array _PARAM2_ of _PARAM1_ with _PARAM3_ from index _PARAM4_ to index _PARAM5_":"從索引_PARAM4_到索引_PARAM5_用_PARAM3_填充_PARAM1_數組","Shuffle array _PARAM2_ of _PARAM1_":"將_PARAM1_的_PARAM2_數組洗牌","Flatten array _PARAM2_ of _PARAM1_ (Deeply flatten: _PARAM3_)":"將_PARAM1_的_PARAM2_數組展平(深層展平:_PARAM3_)","Remove last child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"從_PARAM1_的_PARAM2_數組中移除最後一個子元素並將其存儲在_PARAM3_的_PARAM4_中","Remove first child of _PARAM2_ of _PARAM1_ and store it in _PARAM4_ of _PARAM3_":"從_PARAM1_的_PARAM2_數組中移除第一個子元素並將其存儲在_PARAM3_的_PARAM4_中","Insert variable _PARAM5_ of _PARAM4_ in _PARAM2_ of _PARAM1_ at index _PARAM3_":"在_PARAM1_的_PARAM2_數組中的索引_PARAM3_插入_PARAM4_的_PARAM5_變量","Split string _PARAM1_ via separator _PARAM2_ into array _PARAM4_ of _PARAM3_":"通過分隔符_PARAM2_將_PARAM1_字符串分割為_PARAM3_的_PARAM4_數組","Sort array _PARAM2_ of _PARAM1_":"對_PARAM1_的_PARAM2_數組進行排序","Platforms Validation":"平台驗證","Checks if the game is currently executed on an allowed platform (for web).":"檢查遊戲當前是否在允許的平台上執行(用於Web)。","Checks if the game is executed on an authorized platform (preferably, run this only once at beginning of the game).":"檢查遊戲是否在授權的平台上運行(最好只在遊戲開始時執行一次)。","Is the game running on an authorized platform":"遊戲是否在授權的平台上運行","The game is running on a authorized platform":"遊戲正在授權的平台上運行","Get the referrer's location (the domain of the website that hosts your game).":"獲取引薦者的位置(主機游戲的網站域名)。","Get referrer location":"獲取引薦者位置","Adds a new valid platform (domain name where the game is expected to be played, for example, gd.games).":"添加新的有效平台(預計遊戲在其中運行的域名,例如,gd.games)。","Add a valid platform":"添加有效平台","Add _PARAM1_ as valid platform":"添加_PARAM1_為有效平台","Domain name (e.g : gd.games)":"域名(例如:gd.games)","Check if a domain is contained in the authorized list array.":"檢查域名是否包含在授權列表數組中。","Check if a domain is contained in the authorized list":"檢查域名是否包含在授權列表中","Check if _PARAM1_ is in the list of authorized platforms":"檢查_PARAM1_是否在授權平台列表中","Domain to check":"要檢查的域名","Auto typing animation for text (\"typewriter\" effect)":"文本的自動打字動畫(“打字機”效果)","Reveal a text one letter after the other.":"一次顯示一個字母的文本。","User interface":"使用者介面","Auto typing text":"自動輸入文本","Text capability":"文本功能","Time between characters":"字符之間的時間","Detect if a new text character was just displayed":"檢測是否剛剛顯示了一個新的文本字符","Is next word wrapped":"下一個詞是否被換行","_PARAM0_ next word is wrapped":"_PARAM0_下一個詞被換行","Clear forced line breaks":"清除強制換行","Clear forced line breaks in _PARAM0_":"清除_PARAM0_中的強制換行","Check if the full text has been typed.":"檢查完整文本是否已輸入。","Finished typing":"輸入完成","_PARAM0_ finished typing":"_PARAM0_輸入完成","Check if a character has just been typed. Useful for triggering sound effects.":"檢查是否剛剛輸入字符。可用於觸發音效。","Has just typed":"剛剛輸入","_PARAM0_ has just typed a character":"_PARAM0_剛剛輸入字符","Restart typing from the beginning of text. The autotyping also start automatically when a new text is set for the object.":"從文本開始重新輸入。當為對象設置新文本時,自動啟動自動輸入。","Restart typing from the beginning":"從開始重新輸入","Restart typing from the beginning on _PARAM0_":"從_PARAM0_開始重新輸入","Jump to a specific position in the text. Positions start at \"0\" and increase by one for every character.":"跳到文本中特定位置。位置從“0”開始,每個字符增加一個。","Show Nth first characters":"顯示前N個字符","Show _PARAM2_ first characters on _PARAM0_":"在_PARAM0_上顯示_PARAM2_個第一個字符","Character position":"字符位置","Show the full text.":"顯示完整文本。","Show the full text":"顯示完整文本","Show the full text on _PARAM0_":"顯示完整文本_PARAM0_","the time between characters beign typed.":"正在打字字符之間的時間。","the time between characters":"字符之間的時間","Android back button":"Android 返回按鈕","Allow to customize the behavior of the Android back button.":"允許自定義 Android 返回按鈕的行為。","Input":"輸入","Triggers whenever the player presses the back button.":"每當玩家按下返回按鈕時觸發。","Back button is pressed":"按下返回按鈕","This simulates the normal action of the back button. \nThis action will quit the app when in a mobile app, and go back to the previous page when in a web browser.":"這模擬了返回按鈕的正常動作。\n當在移動應用程序中時,此操作將退出應用程序;在Web瀏覽器中時,此操作將返回到上一個頁面。","Trigger back button":"觸發返回按鈕","Simulate back button press":"模擬返回按鈕壓下","Base conversion":"進位轉換","Provides conversion expressions for numbers in different bases.":"提供將數字轉換為不同進制的表達式。","Advanced":"進階","Converts a string representing a number in a different base to a decimal number.":"將以不同進制表示的字符串轉換為十進制數。","Convert to decimal":"轉換為十進制","String representing a number":"表示數字的字符串","The base the number in the string is in":"字符串中的數字所在的基數","Converts a number to a trsing representing it in another base.":"將數字更換為另一個進制中表示它的字符串。","Convert to different base":"轉換為不同進制","Number to convert":"要轉換的數字","The base to convert the number to":"要轉換為的基數","Platformer and top-down remapper":"平台遊戲和俯視重映射","Quickly remap keyboard controls.":"快速重映射鍵盤控制。","Remap keyboard controls of the top-down movement.":"重映射頂部運動的鍵盤控制。","Top-down keyboard remapper":"俯視鍵盤重映射","Up key":"向上鍵","Left key":"左鍵","Right key":"右鍵","Down key":"下鍵","Remaps Top-Down behavior controls to a custom control scheme.":"將上下行為控件重新映射為自定義控制方案。","Remap Top-Down controls to a custom scheme":"將上下控件重新映射為自定義方案","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_":"重新映射_PARAM0_的控件:上:_PARAM2_,左:_PARAM3_,下:_PARAM4_,右:_PARAM5_","Remaps Top-Down behavior controls to a preset control scheme.":"將上下行為控件重新映射為預設控制方案。","Remap Top-Down controls to a preset":"將上下控件重新映射為預設","Remap controls of _PARAM0_ to preset _PARAM2_":"將_PARAM0_的控件重新映射到預設_PARAM2_","Preset name":"預設名稱","Remap keyboard controls of the platformer character movement.":"重映射平台遊戲角色運動的鍵盤控制。","Platformer keyboard mapper":"平台遊戲鍵盤映射器","Jump key":"跳躍鍵","Remaps Platformer behavior controls to a custom control scheme.":"將平台動作控件重新映射為自定義控制方案。","Remap Platformer controls to a custom scheme":"將平台動作控件重新映射為自定義方案","Remap controls of _PARAM0_: Up: _PARAM2_, Left: _PARAM3_, Down: _PARAM4_, Right: _PARAM5_, Jump: _PARAM6_":"重新映射_PARAM0_的控件:上:_PARAM2_,左:_PARAM3_,下:_PARAM4_,右:_PARAM5_,跳躍:_PARAM6_","Remaps Platformer behavior controls to a preset control scheme.":"將平台動作控件重新映射為預設控制方案。","Remap Platformer controls to a preset":"將平台控件重新映射為預設","3D Billboard":"3D 廣告牌","Rotate 3D objects to appear like 2D sprites.":"旋轉 3D 物體,使其看起來像 2D 精靈。","Visual effect":"視覺效果","Rotate to always face the camera (only the front face of the cube should be enabled).":"始終面向攝像機旋轉(應僅啟用方塊的前面)。","Billboard":"廣告牌","3D capability":"3D capability","Should rotate on X axis":"應在X軸上旋轉","Should rotate on Y axis":"應該在Y軸旋轉","Should rotate on Z axis":"應該在Z軸旋轉","Offset position":"偏移位置","Rotate the object to the camera. This is also done automatically at the end of the scene events.":"將對象旋轉到相機。這也會在場景事件結束時自動完成。","Rotate to face the camera":"旋轉面向相機","Rotate _PARAM0_ to the camera":"將_PARAM0_旋轉到相機","Check if the object should rotate on X axis.":"檢查對象是否應該在X軸上旋轉。","_PARAM0_ should rotate on X axis":"_PARAM0_應該在X軸上旋轉","Change if the object should rotate on X axis.":"更改對象是否應該在X軸上旋轉。","_PARAM0_ should rotate on X axis: _PARAM2_":"_PARAM0_應在X軸上旋轉:_PARAM2_","ShouldRotateX":"應該在X軸上旋轉","Check if the object should rotate on Y axis.":"檢查對象是否應該在Y軸上旋轉。","_PARAM0_ should rotate on Y axis":"_PARAM0_應該在Y軸上旋轉","Change if the object should rotate on Y axis.":"更改對象是否應在Y軸上旋轉。","_PARAM0_ should rotate on Y axis: _PARAM2_":"_PARAM0_應在Y軸上旋轉:_PARAM2_","ShouldRotateY":"應該在Y軸上旋轉","Check if the object should rotate on Z axis.":"檢查對象是否應該在Z軸上旋轉。","_PARAM0_ should rotate on Z axis":"_PARAM0_應該在Z軸上旋轉","Change if the object should rotate on Z axis.":"更改對象是否應該在Z軸上旋轉。","_PARAM0_ should rotate on Z axis: _PARAM2_":"_PARAM0_ 應該繞 Z 軸旋轉:_PARAM2_","ShouldRotateZ":"ShouldRotateZ","Enable texture transparency of the front face.":"啟用對正面材質的透明度。","Enable texture transparency":"啟用材質透明度","Enable texture transparency of _PARAM0_":"啟用 _PARAM0_ 的材質透明度","Boids movement":"Boids 運動","Simulates flocks movement.":"模擬群體運動。","Define helper classes JavaScript code.":"定義輔助類別JavaScript代碼。","Define helper classes":"定義輔助類別","Define helper classes JavaScript code":"定義輔助類別JavaScript代碼","Move as part of a flock.":"作為一個群的一部分移動。","Boids Movement":"Boids運動","Maximum speed":"最大速度","Maximum acceleration":"最大加速度","Rotate object":"旋轉物體","Cohesion sight radius":"凝聚視野半徑","Sight":"視線","Alignement sight radius":"排列視野半徑","Separation sight radius":"分離視野半徑","Cohesion decision weight":"凝聚決策權重","Decision":"決策","Alignment decision weight":"排列決策權重","Separation decision weight":"分離決策權重","Collision layer":"碰撞層","Intend to move in a given direction.":"打算朝特定方向移動。","Move in a direction":"朝特定方向移動","_PARAM0_ intent to move in the direction _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ 打算往方向 _PARAM2_ 移動;_PARAM3_(決策權重:_PARAM4_)","Direction X":"X 方向","Direction Y":"Y 方向","Decision weight":"決策權重","Intend to move toward a position.":"打算朝一個位置移動。","Move toward a position":"朝一個位置移動","_PARAM0_ intend to move toward _PARAM2_; _PARAM3_ (decision weight: _PARAM4_)":"_PARAM0_ 打算朝 _PARAM2_ 移動;_PARAM3_(決策權重:_PARAM4_)","Target X":"目标 X","Target Y":"目标 Y","Intend to move toward an object.":"打算朝一個物體移動。","Move toward an object":"朝一個物體移動","_PARAM0_ intend to move toward _PARAM2_ (decision weight: _PARAM3_)":"_PARAM0_ 打算朝 _PARAM2_ 移動(決策權重:_PARAM3_)","Targeted object":"目標物體","Intend to avoid an area with a given center and radius.":"打算避免在給定中心和半徑的區域內。","Avoid a position":"避免一個位置","_PARAM0_ intend to avoid a radius of _PARAM4_ around _PARAM2_; _PARAM3_ (decision weight: _PARAM5_)":"_PARAM0_ 打算避免 _PARAM2_ 周圍 _PARAM4_ 的半徑;_PARAM3_(決策權重:_PARAM5_)","Center X":"中心 X","Center Y":"中心 Y","Radius":"半徑","Intend to avoid an area from an object center and a given radius.":"打算避免從物體中心和給定半徑的區域","Avoid an object":"避免一個物體","_PARAM0_ intend to avoid a radius of _PARAM3_ around _PARAM2_ (decision weight: _PARAM4_)":"_PARAM0_ 打算避免 _PARAM2_ 周圍 _PARAM3_ 的半徑(決策權重:_PARAM4_)","Avoided object":"被避免的物體","Return the current speed.":"返回當前速度。","Speed":"速度","Return the current horizontal speed.":"返回當前水平速度。","Velocity X":"速度 X","Return the current vertical speed.":"返回當前垂直速度。","Velocity Y":"速度 Y","Check if the object is rotated while moving on its path.":"檢查物體在移動路徑上是否旋轉。","Object Rotated":"物體已旋轉","_PARAM0_ is rotated when moving":"_PARAM0_ 移動時會旋轉","Return the maximum speed.":"返回最大速度。","Change the maximum speed of the object.":"更改物體的最大速度。","Change the maximum speed of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的最大速度為 _PARAM2_","Max Speed":"最大速度","Return the maximum acceleration.":"返回最大加速度。","Change the maximum acceleration of the object.":"更改物體的最大加速度。","Change the maximum acceleration of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的最大加速度為 _PARAM2_","Steering Force":"轉向力","Return the cohesion sight radius.":"返回相 cohesion 通半徑。","Change the cohesion sight radius.":"更改 cohesionsight半徑。","Change the cohesion sight radius of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的凝聚視野半徑為 _PARAM2_","Value":"数值","Return the alignment sight radius.":"返回 outline sight 半徑。","Alignment sight radius":"Alignment sight 半徑","Change the alignment sight radius of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的對齊視野半徑為 _PARAM2_","Return the separation sight radius.":"返回 outline sight 半徑。","Change the separation sight radius of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的分離視野半徑為 _PARAM2_","Return which weight the cohesion takes in the chosen direction.":"返回 cohesions 的權重。","Cohesion weight":"連接權重","Change the weight the cohesion takes in the chosen direction.":"更改 cohesions 權重。","Change the cohesion weight of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的凝聚權重為 _PARAM2_","Return which weight the alignment takes in the chosen direction.":"返回 alignment 的權重。","Alignment weight":"排序權重","Change the weight the alignment takes in the chosen direction.":"更改 alignment 權重。","Change the alignment weight of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的對齊權重為 _PARAM2_","Return which weight the separation takes in the chosen direction.":"返回分離的權重。","Separation weight":"分離權重","Change the weight the separation takes in the chosen direction.":"更改分離的權重。","Change the separation weight of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的分離權重為 _PARAM2_","Boomerang":"回飛標","Throw an object that returns to the thrower like a boomerang.":"丟出物體,使其像回飛標一樣返回給丟出者。","Throw speed (pixels per second)":"投擲速度(每秒像素)","Time before changing directions (seconds)":"改變方向之前的時間(秒)","Rotation (degrees per second)":"旋轉(每秒度)","Thrower X position":"投擲者X位置","Thrower Y position":"投擲者Y位置","Boomerang is returning":"返回回飛棒","Throw boomerang toward an angle.":"抛出回飛向角度的回力標。","Throw boomerang toward an angle":"以角度向前抛回力標","Throw boomerang _PARAM0_ toward angle _PARAM2_ degrees, speed of _PARAM3_ pixels per second, rotating _PARAM5_ degrees per second, and send boomerang back after of _PARAM4_ seconds":"向角度 _PARAM2_ 度抛出 _PARAM0_ ,每秒速度為 _PARAM3_ 像素,每秒旋轉 _PARAM5_ 度,並在 _PARAM4_ 秒後發送回力標","Angle (degrees)":"角度(度)","Throw boomerang toward a position.":"向某一位置投擲迴旋鏢。","Throw boomerang toward a position":"向某一位置投擲迴旋鏢","Throw boomerang _PARAM0_ toward _PARAM2_;_PARAM3_ at a speed of _PARAM4_ pixels per second, rotating _PARAM6_ degrees per second, and send boomerang back after of _PARAM5_ seconds":"將 boomerang _PARAM0_ 朝向 _PARAM2_ 投擲;以 _PARAM4_ 像素每秒的速度旋轉 _PARAM6_ 度,投擲 _PARAM3_ ,_PARAM5_ 秒後將 boomerang 送回","Target X position":"目標X位置","Target Y position":"目標Y位置","Send boomerang back to thrower.":"將 boomerang 送回至投擲者。","Send boomerang back to thrower":"將迴旋鏢送回投擲者","Send boomerang _PARAM0_ back to thrower":"將 boomerang _PARAM0_ 送回至投擲者","Set amount of time before boomerang changes directions (seconds).":"設定 boomerang 改變方向之前的時間量(秒)。","Set amount of time before boomerang changes directions":"在迴旋鏢改變方向前設定的時間間隔","Set amount of time before _PARAM0_ changes directions to _PARAM2_ (seconds)":"設定在 boomerang 改變方向為 _PARAM2_ 前的時間量(秒)","Time before boomerange changes direction (seconds)":"迴旋鏢改變方向前的時間(秒)","Track position of boomerang thrower.":"追踪 boomerang 投擲者的位置。","Track position of boomerang thrower":"追蹤迴旋鏢投擲者的位置","Track position of thrower _PARAM2_ who threw boomerang _PARAM0_":"追踪投擲了 boomerang _PARAM0_ 的投擲者 _PARAM2_ 的位置","Thrower":"投擲者","Boomerang is returning to thrower.":"boomerang 正在返回至投擲者。","Boomerang is returning to thrower":"迴旋鏢正在返回投擲者","Boomerang _PARAM0_ is returning to thrower":"boomerang _PARAM0_ 正在返回至投擲者","Bounce (using forces)":"反彈(使用力量)","Bounce the object off another object it just touched.":"使物件反彈開其他物件。","Provides an action to make the object bounce from another object it just touched. Add a permanent force to the object and, when in collision with another one, use the action to make it bounce realistically.":"提供一個動作,讓物體從剛觸碰到的其他物體彈跳。給物體添加一個永久力,並在與另一個物體碰撞時,使用該動作使物體實現逼真的彈跳。","Bounce":"彈跳","Bounce count":"彈跳計數","Number of times this object has bounced off another object":"此對象反彈次數","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"將物體以施加於該物體的角度和力量速度推離其當前發生碰撞的另一物體。\n請確保在執行此操作前檢測兩個物體之間的碰撞。所有的力量將從物體中移除,並添加一個新的永久力以推動物體彈跳。","Bounce off another object":"從另一物體反彈","Bounce _PARAM0_ off _PARAM2_":"從_PARAM0_反彈_PARAM2_","The objects to bounce on":"彈跳物體","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be calculated *to go toward the specified angle (the \"normal angle\")*. For example, if the object is arriving at this exact angle, it will bounce in the opposite direction.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"根據施加在物體上的角度和速度的力量,將物體以目前與之發生碰撞的另一物體反彈。\n彈跳將始終根據 *朝向指定角度(“法向角度”)* 進行計算。例如,如果物體正以此精確角度到達,將會以相反方向彈跳。\n請確保在執行此操作前檢測兩個物體之間的碰撞。所有的力量將從物體中移除,並添加一個新的永久力以使物體彈跳。","Bounce off another object toward a specified angle":"朝特定角度的另一物體彈跳","Bounce _PARAM0_ off _PARAM2_ assuming a normal angle of _PARAM3_":"按照正常角度將 _PARAM0_ 從 _PARAM2_ 彈開,假設正常角度為 _PARAM3_","The \"normal\" angle, in degrees, to bounce against":"反彈的「正常」角度(以度為單位)","This can be understood at the direction that the bounce must go toward.":"可以理解為反彈必須朝向的方向。","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be vertical, like if the object is *colliding a perfectly horizontal obstacle* (like the top/bottom of the screen in a pong game). For example, if the object is arriving with an angle of exactly 90 degrees, it will bounce in the opposite direction: -90 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"根據對象上施加的角度和力的速度,使該對象根據角度和力的速度反彈到當前正在碰撞的另一個對象。\n反彈將始終是垂直的,就好像該對象正在*碰撞一個完全水平的障礙物*(比如乒乓遊戲中屏幕的上/下端)。例如,如果該對象的角度恰好為90度,它將會向相反的方向反彈:-90度。\n在啟動此操作之前,請確保兩個對象之間碰撞。所有的力都會從對象中移除,並增加一個新的永久性力以使對象反彈。","Bounce vertically":"垂直反彈","Bounce _PARAM0_ off _PARAM2_ - always vertically":"將 _PARAM0_ 以垂直方式從 _PARAM2_ 彈開 - 始終垂直","Bounce the object off another object it is currently colliding with, according to the angle and the speed of forces applied on the object.\nThe bounce will always be horizontal, like if the object is *colliding a perfectly vertical obstacle* (like paddles in a pong game). For example, if the object is arriving with an angle of exactly 0 degrees, it will bounce in the opposite direction: 180 degrees.\nMake sure to test for a collision between the two objects before launching this action. All the forces will be removed from the object, and a new permanent force will be added to make the object bounce.":"根據對象上施加的角度和力的速度,使該對象根據角度和力的速度反彈到當前正在碰撞的另一個對象。\n反彈將始終是水平的,就好像該對象正在*碰撞一個完全垂直的障礙物*(比如乒乓遊戲中的擊球板)。例如,如果該對象的角度恰好為0度,它會向相反的方向反彈:180度。\n在啟動此操作之前,請確保兩個對象之間碰撞。所有的力都會從對象中移除,並增加一個新的永久性力以使對象反彈。","Bounce horizontally":"水平反彈","Bounce _PARAM0_ off _PARAM2_ - always horizontally":"將 _PARAM0_ 以水平方式從 _PARAM2_ 彈開 - 始終水平","the number of times this object has bounced off another object.":"這個對象已經從另一個對象反彈了幾次。","the bounce count":"反彈次數","Button states and effects":"按鈕狀態和效果","Use any object as a button and change appearance according to user interactions.":"使用任何物件作為按鈕並根據用戶互動更改外觀。","Use objects as buttons.":"使用對象作為按鈕。","Button states":"按鈕狀態","Should check hovering":"應檢查懸停","State":"狀態","Touch id":"觸碰 id","Touch is inside":"觸碰在內部","Mouse is inside":"滑鼠在內部","Reset the state of the button.":"重置按鈕的狀態。","Reset state":"重置狀態","Reset the button state of _PARAM0_":"重置 _PARAM0_ 的按鈕狀態","Check if the button is not used.":"檢查按鈕是否未使用。","Is idle":"閒置","_PARAM0_ is idle":"_PARAM0_ 閒置","Check if the button was just clicked.":"檢查按鈕是否剛剛點擊。","Is clicked":"已點擊","_PARAM0_ is clicked":"_PARAM0_ 點擊","Check if the cursor is hovered over the button.":"檢查光標是否懸停在按鈕上。","Is hovered":"正在懸停","_PARAM0_ is hovered":"_PARAM0_ 滑鼠停留","Check if the button is either hovered or pressed but not hovered.":"檢查按鈕是否懸停或被按下但沒有懸停。","Is focused":"已聚焦","_PARAM0_ is focused":"_PARAM0_ 聚焦","Check if the button is currently being pressed with mouse or touch.":"檢查按鈕是否正在被滑鼠或觸控點按下。","Is pressed":"已按下","_PARAM0_ is pressed":"_PARAM0_ 被按下","Check if the button is currently being pressed outside with mouse or touch.":"檢查按鈕是否正在外部被滑鼠或觸控點按下。","Is held outside":"在外面被保持","_PARAM0_ is held outside":"_PARAM0_ 在外被按住","the touch id that is using the button or 0 if none.":"正在使用按鈕的觸控點 id,如果沒有則返回0。","the touch id":"觸控點 id","Enable effects on buttons based on their state.":"基於其狀態在按鈕上啟用效果。","Button object effects":"按鈕對象效果","Effect capability":"效果能力","Idle state effect":"閑置狀態效果","Effects":"效果","Focused state effect":"焦點狀態效果","The state is Focused when the button is hovered or held outside.":"當按鈕在外部懸停或按住時,狀態為焦點。","Pressed state effect":"按下狀態效果","the idle state effect of the object.":"物件的閒置狀態效果。","the idle state effect":"閒置狀態效果","the focused state effect of the object. The state is Focused when the button is hovered or held outside.":"物件的聚焦狀態效果。按鈕懸停或外部按住時,狀態為聚焦。","the focused state effect":"聚焦狀態效果","the pressed state effect of the object.":"對象的按下狀態效果。","the pressed state effect":"按下狀態效果","Change the animation of buttons according to their state.":"根據其狀態變更按鈕的動畫。","Button animation":"按鈕動畫","Idle state animation name":"閑置狀態動畫名稱","Animation":"動畫","Focused state animation name":"焦點狀態動畫名稱","Pressed state animation name":"按下狀態動畫名稱","the idle state animation name of the object.":"對象的待機狀態動畫名稱。","the idle state animation name":"待機狀態動畫名稱","the focused state animation name of the object. The state is Focused when the button is hovered or held outside.":"對象的聚焦狀態動畫名稱。當按鈕被懸停或在外面被保持時,狀態為聚焦。","the focused state animation name":"聚焦狀態動畫名稱","the pressed state animation name of the object.":"對象的按下狀態動畫名稱。","the pressed state animation name":"按下狀態動畫名稱","Smoothly change an effect on buttons according to their state.":"根據其狀態平滑地改變按鈕上的效果。","Button object effect tween":"按鈕對象效果緩動","Effect name":"效果名稱","Effect":"效果","Effect parameter":"效果參數","The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"效果參數名稱可以在效果選項卡中的下拉菜單“顯示參數名稱”操作中找到。","Idle effect parameter value":"閑置效果參數值","Focused effect parameter value":"Focused effect parameter value","Pressed effect parameter value":"Pressed effect parameter value","Fade-in easing":"淡入緩和","Fade-out easing":"淡出緩和","Fade-in duration":"淡入持續時間","Fade-out duration":"淡出持續時間","Disable the effect in idle state":"在閒置狀態下禁用效果","Time delta":"時間增量","Fade in":"淡入","_PARAM0_ fade in to _PARAM2_":"_PARAM0_ 以 _PARAM2_ 淡入","Fade out":"淡出","_PARAM0_ fade out to _PARAM2_":"_PARAM0_ 以 _PARAM2_ 淡出","Play tween":"播放動畫","Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing":"對象 _PARAM0_ 的效果屬性在 _PARAM2_ 秒內以 _PARAM3_ 緩和","Duration (in seconds)":"持續時間(以秒為單位)","Easing":"緩動","the effect name of the object.":"對象的效果名稱。","the effect name":"效果的名稱","the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"對象的效果參數。效果參數名稱可以在效果選項卡找到,從下拉選單的「顯示參數名稱」操作中找到。","the effect parameter":"效果的參數","Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.":"更改對象的效果參數。效果參數名稱可以在效果選項卡找到,從下拉選單的「顯示參數名稱」操作中找到。","Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_":"更改對象 _PARAM0_ 的緩和效果為 _PARAM2_,並使用參數 _PARAM3_","Parameter name":"參數名稱","the idle effect parameter value of the object.":"物件的閒置效果參數值。","the idle effect parameter value":"物件的閒置效果參數值","the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.":"物件的聚焦效果參數值。當按鈕在懸停或者在外部按住時,狀態是聚焦。","the focused effect parameter value":"物件的聚焦效果參數值","the pressed effect parameter value of the object.":"物件的按壓效果參數值","the pressed effect parameter value":"按下效果參數值","the fade-in easing of the object.":"對象的淡入緩動。","the fade-in easing":"淡入緩動","the fade-out easing of the object.":"對象的淡出緩動。","the fade-out easing":"淡出緩動","the fade-in duration of the object.":"對象的淡入持續時間。","the fade-in duration":"淡入持續時間","the fade-out duration of the object.":"對象的淡出持續時間。","the fade-out duration":"淡出持續時間","Smoothly resize buttons according to their state.":"根據它們的狀態平滑地調整按鈕的大小。","Button scale tween":"按鈕縮放Tween","Scalable capability":"可伸縮能力","Button states behavior (required)":"按鈕狀態行為(必須)","Tween behavior (required)":"Tween行為(必須)","Idle state size scale":"空閒狀態大小縮放","Size":"大小","Focused state size scale":"專注狀態大小縮放","Pressed state size scale":"按下狀態大小縮放","the idle state size scale of the object.":"對象的閒置狀態大小比例。","the idle state size scale":"閒置狀態大小比例","the focused state size scale of the object. The state is Focused when the button is hovered or held outside.":"對象的聚焦狀態大小比例。按下或懸停時,該按鈕處於聚焦狀態。","the focused state size scale":"聚焦狀態大小比例","the pressed state size scale of the object.":"對象的按下狀態大小比例。","the pressed state size scale":"按下狀態大小比例","Smoothly change the color tint of buttons according to their state.":"根據它們的狀態平滑地改變按鈕的顏色色調。","Button color tint tween":"按鈕顏色色調Tween","Tween":"Tween","Idle state color tint":"空閒狀態顏色色調","Color":"顏色","Focused state color tint":"專注狀態顏色色調","Pressed state color tint":"按下狀態顏色色調","the idle state color tint of the object.":"對象的閒置狀態顏色色調。","the idle state color tint":"閒置狀態顏色色調","the focused state color tint of the object. The state is Focused when the button is hovered or held outside.":"對象的聚焦狀態顏色色調。懸停或按住時,該按鈕處於聚焦狀態。","the focused state color tint":"聚焦狀態顏色色調","the pressed state color tint of the object.":"對象的按下狀態顏色色調。","the pressed state color tint":"按下狀態顏色色調","Camera impulse":"相機脈衝","Move the camera following an impulse trajectory.":"根據脈衝軌跡移動相機。","Camera":"相機","Add an impulse to the camera position.":"對相機位置添加一個脈衝。","Add a camera impulse":"添加相機脈衝","Add an impulse _PARAM1_ to the camera from layer _PARAM2_ with an amplitude of _PARAM3_ and an angle of _PARAM4_, going away in _PARAM5_ seconds with _PARAM6_ easing, staying _PARAM7_ seconds, going back in _PARAM8_ seconds with _PARAM9_ easing":"從圖層_PARAM2_對相機添加一個衝動_PARAM1_,振幅為_PARAM3_,角度為_PARAM4_,在_PARAM5_秒內離開,使用_PARAM6_緩和,停留_PARAM7_秒,在_PARAM8_秒內返回,使用_PARAM9_緩和","Identifier":"識別碼","Layer":"圖層","Displacement X":"位移X","Displacement Y":"位移Y","Get away duration (in seconds)":"離開持續時間(以秒為單位)","Get away easing":"離開緩和","Stay duration (in seconds)":"停留持續時間(以秒為單位)","Get back duration (in seconds)":"返回持續時間(以秒為單位)","Get back easing":"返回緩和","Add a camera impulse (angle)":"添加相機衝動(角度)","Amplitude":"振幅","Angle (in degree)":"角度(以度為單位)","Check if a camera impulse is playing.":"檢查相機是否正在衝動。","Camera impulse is playing":"相機衝動正在播放","Camera impulse _PARAM1_ is playing":"相機衝動_PARAM1_正在播放","Camera shake":"相機抖動","Shake layer cameras.":"搖動圖層相機。","Shake the camera on layers chosen with configuration actions.":"搖動選定圖層上的相機與配置動作。","Shake camera":"搖動相機","Shake camera for _PARAM1_ seconds with _PARAM2_ seconds of easing to start and _PARAM3_ seconds to stop":"使用_PARAM2_秒的緩和摘要相機_PARAM1_秒,用_PARAM3_秒停止","Ease duration to start (in seconds)":"開始緩和持續時間(以秒為單位)","Ease duration to stop (in seconds)":"停止緩和持續時間(以秒為單位)","Shake the camera on the specified layer, using one or more ways to shake (position, angle, zoom). This action is deprecated. Please use the other one with the same name.":"在指定圖層上搖動相機,使用一種或多種搖動方式(位置、角度、縮放)。 此操作已過時。 請使用相同名稱的另一個操作。","Shake camera (deprecated)":"搖動相機(已過時)","Shake camera on _PARAM3_ layer for _PARAM5_ seconds. Use an amplitude of _PARAM1_px on X axis and _PARAM2_px on Y axis, angle rotation amplitude _PARAM6_ degrees, and zoom amplitude _PARAM7_ percent. Wait _PARAM8_ seconds between shakes. Keep shaking until stopped: _PARAM9_":"在_PARAM3_層上搖動相機_PARAM5_秒。 使用_PARAM1_px振幅在X軸上和_PARAM2_px在Y軸上,角度旋轉幅度_PARAM6_度,縮放幅度_PARAM7_%,在搖晃之間等待_PARAM8_秒。一直搖晃直到停止:_PARAM9_","Amplitude of shaking on the X axis (in pixels)":"X軸的晃動幅度(以像素為單位)","Amplitude of shaking on the Y axis (in pixels)":"Y軸的晃動幅度(以像素為單位)","Layer (base layer if empty)":"圖層(如果為空則為基本圖層)","Camera index (Default: 0)":"相機索引(默認值:0)","Duration (in seconds) (Default: 0.5)":"持續時間(以秒為單位)(默認值:0.5)","Angle rotation amplitude (in degrees) (For example: 2)":"角度旋轉振幅(以度為單位)(例如:2)","Zoom factor amplitude":"縮放因子振幅","Period between shakes (in seconds) (Default: 0.08)":"震動間期(以秒為單位)(默認值:0.08)","Keep shaking until stopped":"持續晃動直到停止","Duration value will be ignored":"持續值將被忽略","Start shaking the camera indefinitely.":"無限期地開始晃動相機。","Start camera shaking":"開始相機晃動","Start shaking the camera with _PARAM1_ seconds of easing":"以_PARAM1_秒的緩和方式開始搖晃相機","Ease duration (in seconds)":"緩和持續時間(以秒為單位)","Stop shaking the camera.":"停止相機晃動。","Stop camera shaking":"停止相機晃動","Stop shaking the camera with _PARAM1_ seconds of easing":"以_PARAM1_秒的緩和方式停止搖晃相機","Mark a layer as shakable.":"將圖層標記為可晃動。","Shakable layer":"可晃動的圖層","Mark the layer: _PARAM2_ as shakable: _PARAM1_":"將圖層:_PARAM2_ 標記為可搖動:_PARAM1_","Shakable":"可晃動","Check if the camera is shaking.":"檢查相機是否在晃動。","Camera is shaking":"相機正在晃動","Change the translation amplitude of the shaking (in pixels).":"更改晃動的位移振幅(以像素為單位)。","Layer translation amplitude":"圖層位移振幅","Change the translation amplitude of the shaking to _PARAM1_; _PARAM2_ (layer: _PARAM3_)":"將搖動位移的振幅更改為_PARAM1_; _PARAM2_(圖層:_PARAM3_)","Change the rotation amplitude of the shaking (in degrees).":"更改搖動的旋轉振幅(以度為單位)。","Layer rotation amplitude":"圖層旋轉振幅","Change the rotation amplitude of the shaking to _PARAM1_ degrees (layer: _PARAM2_)":"將搖動的旋轉振幅更改為_PARAM1_度(圖層:_PARAM2_)","NewLayerName":"新圖層名","Change the zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"更改晃動的縮放因子振幅。 晃動將按此因子進行縮放和取消縮放(例如1.0625是有效值)。","Layer zoom amplitude":"圖層縮放振幅","Change the zoom factor amplitude of the shaking to _PARAM1_ (layer: _PARAM2_)":"將晃動的縮放因子振幅更改為_PARAM1_(圖層:_PARAM2_)","Zoom factor":"縮放因子","Change the number of back and forth per seconds.":"每秒來回次數變化。","Layer shaking frequency":"層震動頻率","Change the shaking frequency to _PARAM1_ (layer: _PARAM2_)":"更改震動頻率為_PARAM1_(圖層:_PARAM2_)","Frequency":"頻率","Change the default translation amplitude of the shaking (in pixels).":"更改震動的預設平移振幅(以像素為單位)。","Default translation amplitude":"預設平移振幅","Change the default translation amplitude of the shaking to _PARAM1_; _PARAM2_":"更改震動的預設振幅為_PARAM1_; _PARAM2_","Change the default rotation amplitude of the shaking (in degrees).":"更改震動的預設旋轉振幅(以度為單位)。","Default rotation amplitude":"預設旋轉振幅","Change the default rotation amplitude of the shaking to _PARAM1_ degrees":"更改震動的預設旋轉振幅為_PARAM1_度","Change the default zoom factor amplitude of the shaking. The shaking will zoom and unzoom by this factor (for instance 1.0625 is a valid value).":"更改震動的預設縮放因子振幅。 震動將按此因子進行縮放和解除縮放(例如 1.0625 是有效值)。","Default zoom amplitude":"預設縮放振幅","Change the default zoom factor amplitude of the shaking to _PARAM1_":"更改震動的預設縮放振幅為_PARAM1_","Change the default number of back and forth per seconds.":"更改平均每秒來回次數。","Default shaking frequency":"預設震動頻率","Change the default shaking frequency to _PARAM1_":"更改預設震動頻率為_PARAM1_","Generate a number from 2 dimensional simplex noise.":"從 2 維簡單噪音中產生一個數字。","2D noise":"2 維噪音","Generator name":"生成器名稱","X coordinate":"X 座標","Y coordinate":"Y 座標","Generate a number from 3 dimensional simplex noise.":"從 3 維簡單噪音中產生一個數字。","3D noise":"3 維噪音","Z coordinate":"Z 座標","Generate a number from 4 dimensional simplex noise.":"從 4 維簡單噪音中產生一個數字。","4D noise":"4 維噪音","W coordinate":"W 座標","Create a noise generator with default settings (frequency = 1, octaves = 1, persistence = 0.5, lacunarity = 2).":"使用默認設置創建一個噪音生成器(頻率=1,八度=1,持續性=0.5,偏差=2)。","Create a noise generator":"創建一個噪音生成器","Create a noise generator named _PARAM1_":"建立名為_PARAM1_的噪音生成器","Delete a noise generator and loose its settings.":"刪除一個噪音生成器並丟失其設置。","Delete a noise generator":"刪除一個噪音生成器","Delete _PARAM1_ noise generator":"刪除_PARAM1_噪音生成器","Delete all noise generators and loose their settings.":"刪除所有噪音生成器並丟失其設置。","Delete all noise generators":"刪除所有噪音生成器","The seed is a number used to generate the random noise. Setting the same seed will result in the same random noise generation. It's for example useful to generate the same world, by saving this seed value and reusing it later to generate again a world.":"種子是用於生成隨機噪音的數字。設置相同的種子將導致相同的隨機噪音生成。例如,通過保存此種子值並在稍後重複使用它以再次生成世界,可以生成相同的世界。","Noise seed":"噪音種子","Change the noise seed to _PARAM1_":"將噪音種子更改為_PARAM1_","Seed":"種子","15 digits numbers maximum":"最多15位數","Change the looping period on X used for noise generation. The noise will wrap-around on X.":"更改用於噪音生成的X軸迴圈週期。噪音將在X軸上環繞。","Noise looping period on X":"噪音X軸迴圈週期","Change the looping period on X of _PARAM2_: _PARAM1_":"更改_PARAM2_的X軸上迴圈週期:_PARAM1_","Looping period on X":"X軸上的迴圈週期","Change the looping period on Y used for noise generation. The noise will wrap-around on Y.":"更改在Y軸上用於噪音生成的循環周期。噪音將在Y軸上循環。","Noise looping period on Y":"Y軸上的噪音循環周期","Change the looping period on Y of _PARAM2_: _PARAM1_":"更改_PARAM2_的Y軸上的循環周期:_PARAM1_","Looping period on Y":"Y軸上的循環周期","Change the base frequency used for noise generation. A lower frequency will zoom in the noise.":"更改用於噪音生成的基頻。較低的頻率會放大噪音。","Noise base frequency":"噪音基頻","Change the noise frequency of _PARAM2_: _PARAM1_":"更改_PARAM2_的噪音頻率:_PARAM1_","Change the number of octaves used for noise generation. It can be seen as layers of noise with different zoom.":"更改用於噪音生成的振幅層數。它可以被視為具有不同縮放的噪音層。","Noise octaves":"噪音振幅層數","Change the number of noise octaves of _PARAM2_: _PARAM1_":"更改_PARAM2_的噪音層數:_PARAM1_","Octaves":"噪音層數","Change the persistence used for noise generation. At its default value \"0.5\", it halves the noise amplitude at each octave.":"更改用於噪音生成的持久度。在其默認值“0.5”處,它使每個層數的噪音振幅減半。","Noise persistence":"噪音持久度","Change the noise persistence of _PARAM2_: _PARAM1_":"更改_PARAM2_的噪音持久度:_PARAM1_","Persistence":"持久度","Change the lacunarity used for noise generation. At its default value \"2\", it doubles the frequency at each octave.":"更改用於噪音生成的湍流度。在其默認值“2”處,它使每個層數的頻率加倍。","Noise lacunarity":"噪音湍流度","Change the noise lacunarity of _PARAM2_: _PARAM1_":"更改_PARAM2_的噪音湍流度:_PARAM1_","Lacunarity":"分形维度","The seed used for noise generation.":"用於生成噪音的種子。","The base frequency used for noise generation.":"用於生成噪聲的基本頻率。","The number of octaves used for noise generation.":"用於生成噪音的倍頻數量。","Noise octaves number":"噪音倍頻數量","The persistence used for noise generation.":"用於生成噪音的持續度。","The lacunarity used for noise generation.":"用於生成噪音的分形維度。","Camera Zoom":"相機變焦","Allows to zoom camera on a layer with a speed (factor per second).":"允許以一定速度(每秒的倍率)在圖層上縮放相機。","Change the camera zoom at a given speed (in factor per second).":"以給定速度改變攝像機縮放(每秒因數)。","Zoom camera with speed":"根據速度縮放攝像機","Zoom camera with speed: _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"使用速度縮放攝像機:_PARAM1_(圖層:_PARAM2_,攝像機:_PARAM3_)","Zoom speed":"縮放速度","Zoom by a factor per second. 1: no effect, 2: zoom in x2 every second, 0.5: zoom out x2 every second.":"每秒按比例縮放。1:無效果,2:每秒x2放大,0.5:每秒x2縮小。","Camera number (default: 0)":"攝像機編號(默認:0)","Change the camera zoom and keep an anchor point fixed on screen (instead of the center).":"更改攝像機縮放並保持屏幕上的錨點固定(而不是居中)。","Zoom with anchor":"使用錨點縮放","Change camera zoom to: _PARAM1_ with an anchor at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"將相機縮放更改為:_PARAM1_,並在:_PARAM4_; _PARAM5_上保持錨點(圖層:_PARAM2_,攝像機:_PARAM3_)","Zoom":"縮放","1: Initial zoom, 2: zoom in x2, 0.5: zoom out x2...":"1:初始縮放,2:每秒放大x2,0.5:每秒縮小x2……","Anchor X":"錨點X","Anchor Y":"錨點Y","Change the camera zoom at a given speed (in factor per second) and keep an anchor point fixed on screen (instead of the center).":"以給定速度(每秒的因數)改變攝像機縮放並保持屏幕上的錨點固定(而不是居中)。","Zoom camera with speed and anchor":"以給定速度和錨點縮放攝像機","Zoom camera with speed: _PARAM1_ and an anchror at: _PARAM4_; _PARAM5_ (layer: _PARAM2_, camera: _PARAM3_)":"使用速度:_PARAM1_和固定錨點:_PARAM4_縮放攝像機; _PARAM5_(圖層:_PARAM2_,攝像機:_PARAM3_)","Cancellable draggable object":"可取消的可拖曳物件","Allow to cancel the drag of an object (having the Draggable behavior) and return it smoothly to its previous position.":"允許取消物件的拖曳(具有 Dragable 行為)並使其平穩返回到先前位置。","Allow to cancel the drag of an object and make it smoothly return to its original position (with a tween).":"允許取消對象的拖動並使其順利返回原始位置(帶有過渡)。","Cancellable Draggable object":"可取消拖動對象","Draggable behavior":"可拖曳行為","Tween behavior":"Tween 行為","Original X":"原始 X","Original Y":"原始 Y","Cancel last drag.":"取消最後的拖動。","Cancel drag (deprecated)":"取消拖動(已廢棄)","Cancel last dragging of _PARAM0_ in _PARAM2_ ms with easing _PARAM3_":"在_PARAM2_毫秒內使用_PARAM3_輕鬆取消最後一次_PARAM0_的拖動","Duration in milliseconds":"毫秒內的持續時間","Cancel drag":"取消拖動","Cancel last dragging of _PARAM0_ with easing _PARAM3_ in _PARAM2_ seconds":"在_PARAM2_秒內使用_PARAM3_輕鬆取消最後一次_PARAM0_的拖動","Duration in seconds":"秒內的持續時間","Dragging is cancelled, the object is returning to its original position.":"拖動被取消,對象正在返回初始位置。","Dragging is cancelled":"拖動被取消","_PARAM0_ dragging is cancelled":"_PARAM0_的拖動已取消","Checkbox (for Shape Painter)":"複選框(對形狀繪製器)","Checkbox that can be toggled by a left-click or touch.":"可以透過左鍵點擊或觸控切換的複選框。","Checkbox":"勾選方塊","Checked":"已勾選","Checkbox state":"方塊狀態","Halo size (hover). If blank, this is set to \"SideLength\".":"光暈大小(懸停)。如果為空,則設置為\"SideLength\"。","Checkbox appearance":"方塊外觀","Halo opacity (hover)":"光暈不透明度(懸停)","Halo opacity (pressed)":"光暈不透明度(按下)","Enable interactions":"啟用互動","State of the checkbox has changed. (Used in \"ToggleChecked\" function)":"勾選框的狀態已更改。(用於“ToggleChecked”功能)","Primary color of checkbox. (Example: 24;119;211) Fill color when box is checked.":"方塊的主要顏色。(示例:24;119;211)在方塊勾選時的填充顏色。","Secondary color of checkbox. (Example: 255;255;255) Color of checkmark when box is checked.":"方塊的次要顏色。(示例:255;255;255)方塊勾選時的核取標記顏色。","Length of each side (px) Minimum: 10":"每個邊的長度(px)最小值:10","Line width of checkmark (px) (Min: 1, Max: 1/4 * SideLength)":"對勾的線寬(px)(最小:1,最大:1/4 * 邊長)","Border thickness (px) This border is only visible when the checkbox is unchecked.":"邊框厚度(px)此邊框僅在未選中核取方塊時可見。","Halo size (pressed). If blank, this is set to \"HaloRadiusHover * 1.1\"":"光暈大小(按下)。如果為空,則設置為“HaloRadiusHover * 1.1”","Check (or uncheck) the checkbox.":"選中(或取消選中)核取方塊。","Check (or uncheck) the checkbox":"選中(或取消選中)核取方塊","Add checkmark to _PARAM0_: _PARAM2_":"為_PARAM0_增加核取記號:_PARAM2_","Check the checkbox?":"選中核取方塊?","Enable or disable interactions with the checkbox. Users cannot interact while it is disabled.":"啟用或禁用與核取方塊的互動。當禁用時,使用者無法進行互動。","Enable interactions with checkbox":"啟用與核取方塊的互動","Enable interactions of _PARAM0_: _PARAM2_":"啟用_PARAM0_的互動:_PARAM2_","Enable":"啟用","If checked, change to unchecked. If unchecked, change to checked.":"如果被勾選,則變成取消勾選。如果未被勾選,則變成已勾選。","Toggle checkmark":"切換勾選標誌","Toggle checkmark on _PARAM0_":"切換_PARAM0_的勾選標誌","Change the primary color of checkbox.":"更改核取方塊的主顏色。","Primary color of checkbox":"核取方塊的主顏色","Change the primary color of _PARAM0_: _PARAM2_":"更改_PARAM0_的主顏色:_PARAM2_","Primary color":"主顏色","Change the secondary color of checkbox.":"更改核取方塊的次顏色。","Secondary color of checkbox":"核取方塊的次顏色","Change the secondary color of _PARAM0_: _PARAM2_":"更改_PARAM0_的次顏色:_PARAM2_","Secondary color":"次顏色","Change the halo opacity when pressed.":"當按下時,變更光暈不透明度。","Halo opacity when pressed":"按下時的光暈不透明度","Change the halo opacity of _PARAM0_ when pressed: _PARAM2_":"更改_PARAM0_按下時的光暈不透明度:_PARAM2_","Halo opacity":"光暈不透明度","Change the halo opacity when hovered.":"當懸停時,變更光暈不透明度。","Halo opacity when hovered":"懸停時的光暈不透明度","Change the halo opacity of _PARAM0_ when hovered: _PARAM2_":"更改_PARAM0_懸停時的光暈不透明度:_PARAM2_","Change the halo radius when pressed.":"當按下時,變更光暈半徑。","Halo radius when pressed":"按下時的光暈半徑","Change the halo radius of _PARAM0_ when pressed: _PARAM2_ px":"更改_PARAM0_按下時的光暈半徑:_PARAM2_ 像素","Halo radius":"光暈半徑","Change the halo radius when hovered. This size is also used to detect interaction with the checkbox.":"懸停時,變更光暈半徑。此大小也用於檢測核取方塊的互動。","Halo radius when hovered":"懸停時的光暈半徑","Change the halo radius of _PARAM0_ when hovered: _PARAM2_ px":"更改_PARAM0_懸停時的光暈半徑:_PARAM2_ 像素","Change the border thickness of checkbox.":"更改核取方塊的邊框厚度。","Border thickness of checkbox":"核取方塊的邊框厚度","Change the border thickness of _PARAM0_: _PARAM2_ px":"更改_PARAM0_的邊框厚度:_PARAM2_ 像素","Track thickness":"軌道厚度","Change the side length of checkbox.":"更改核取方塊的邊長。","Side length of checkbox":"核取方塊的邊長","Change the side length of _PARAM0_: _PARAM2_ px":"更改_PARAM0_的邊長:_PARAM2_px","Track width (px)":"軌道寬度(px)","Change the line width of checkmark.":"更改勾選點的線寬。","Line width of checkmark":"勾選點的線寬","Change the line width of _PARAM0_: _PARAM2_ px":"更改_PARAM0_的線寬:_PARAM2_px","Line width (px)":"線寬(px)","Check if the checkbox is checked.":"檢查復選框是否已勾選。","Is checked":"已檢查","_PARAM0_ is checked":"_PARAM0_已勾選","Check if the checkbox interations are enabled.":"檢查復選框是否啟用互動。","Interactions enabled":"互動已啟用","Interactions of _PARAM0_ are enabled":"_PARAM0_的互動已啟用","Return the color used to draw the outline of the checkbox (when unchecked) and the fill color (when checked).":"返回用來繪製復選框輪廓(未勾選時)和填充顏色(已勾選時)的顏色。","Change the maximum value of _PARAM0_: _PARAM2_":"更改_PARAM0_的最大值:_PARAM2_","Return the color used to fill the checkbox (when unchecked) and to draw the checkmark (when checked).":"返回用來填充復選框(未勾選時)和繪製勾選點(已勾選時)的顏色。","Return the radius of the halo while the checkbox is touched or clicked.":"返回點擊或觸摸復選框時的光環半徑。","Halo radius while touched or clicked":"點擊時的光環半徑","Return the opacity of the halo while the checkbox is touched or clicked.":"返回點擊或觸摸復選框時光環的透明度。","Halo opacity (while touched or clicked)":"光環透明度(點擊或觸摸時)","Return the radius of the halo when the mouse is hovering near the checkbox.":"返回滑鼠靠近復選框時光環的半徑。","Halo radius (during hover)":"光環半徑(滑鼠懸停時)","Return the opacity of the halo when the mouse is hovering near the checkbox.":"返回滑鼠靠近復選框時光環的透明度。","Halo opacity (during hover)":"光環透明度(懸停時)","Return the line width of checkmark (pixels).":"返回勾選點的線寬(像素)。","Line width":"線寬","Return the side length of checkbox (pixels).":"返回復選框的邊長(像素)。","Side length":"邊長","Return the border thickness of checkbox (pixels).":"返回復選框的邊框厚度(像素)。","Border thickness":"邊框厚度","Check if the checkbox is being pressed by mouse or touch.":"檢查復選框是否被滑鼠或觸摸按下。","Checkbox is being pressed":"復選框被按下","_PARAM0_ is being pressed by mouse or touch":"_PARAM0_被滑鼠或觸摸按下","Update the hitbox.":"更新觸控區。","Update hitbox":"更新碰撞箱","Update the hitbox of _PARAM0_":"更新_PARAM0_的碰撞箱","Checkpoints":"檢查點","Respawn objects at checkpoints.":"在檢查點重新生成物件。","Game mechanic":"遊戲機制","Update a checkpoint of an object.":"更新物件的檢查點。","Save checkpoint":"儲存檢查點","Save checkpoint _PARAM4_ of _PARAM1_ to _PARAM2_ (x-axis), _PARAM3_ (y-axis)":"將_PARAM1_的檢查點_PARAM4_儲存到_PARAM2_(x軸),_PARAM3_(y軸)","Save checkpoint of object":"儲存物件的檢查點","X position":"X 位置","Y position":"Y 位置","Checkpoint name":"檢查點名稱","Change the position of the object to the saved checkpoint.":"將物件的位置更改為已儲存的檢查點。","Load checkpoint":"載入檢查點","Move _PARAM2_ to checkpoint _PARAM3_ of _PARAM1_":"移動_PARAM2_到檢查點_PARAM3_的_PARAM1_","Load checkpoint from object":"從物件載入檢查點","Change position of object":"更改物件位置","Ignore (possibly) empty checkpoints":"忽略(可能)空的檢查點","Loading not yet saved checkpoints will (by default) set the position to the coordinate 0;0. Select \"yes\" to completely ignore non-existant checkpoints. To define an alternative checkpoint for it, create a new event and use the \"Checkpoint exists\" condition, save the wanted checkpoint as the action.":"尚未保存的檢查點的加載將(默認情況下)將位置設置為坐標 0;0。選擇“是”將完全忽略不存在的檢查點。要為其定義替代檢查點,創建一個新事件並使用“檢查點存在”條件,將所需的檢查點保存為操作。","Check if a checkpoint has a position saved / does exist.":"檢查點是否具有保存的位置/存在。","Checkpoint exists":"檢查點存在","Checkpoint _PARAM2_ of _PARAM1_ exists":"_PARAM1_的檢查點_PARAM2_存在","Check checkpoint from object":"檢查對象的檢查點","Clipboard":"剪貼簿","Read and write the clipboard.":"讀寫剪貼簿。","Read the text from the clipboard asynchronously. \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"異步從剪貼簿讀取文本。\n還要注意,在Web瀏覽器上,用戶可能會被要求允許從剪貼簿讀取。","Get text from the clipboard":"從剪貼簿獲取文本","Read clipboard and store text in _PARAM1_":"讀取剪貼簿並將文本存儲在_PARAM1_中","Callback variable where to store the clipboard contents":"回調變量,用於存儲剪貼簿內容","Write the text in the clipboard.":"將文本寫入剪貼簿。","Write text to the clipboard":"將文本寫入剪貼簿","Write _PARAM1_ to clipboard":"將_PARAM1_寫入剪貼簿","Text to write to clipboard":"要寫入剪貼簿的文本","Read the text from the clipboard asynchronously. As this is \"asynchronous\", the variable won't be immediately filled with the text from the clipboard. You will have to wait a few frames before it will be. If you want your subsequent actions and subevents to automatically wait for the read to finish, use the waiting version of this action instead (recomended). \nNote also that on web browsers, the user might be asked for permissions to read from the clipboard.":"異步從剪貼簿讀取文本。由於這是“異步”的,變量不會立即填滿來自剪貼簿的文本。你將不得不等幾幀,然後才能讀到。如果您希望隨後的操作和子事件自動等待讀取完成,請改用此操作的等待版本(推薦)。還要注意,在Web瀏覽器上,可能會要求用戶允許從剪貼簿讀取。","(No waiting) Get text from the clipboard":"(不等待)從剪貼簿獲取文本","Callback variable where to store the result":"回調變量,用於存儲結果","[DEPRECATED] Read the text from the clipboard (Windows, macOS, Linux only)":"[已棄用]從剪貼簿讀取文本(僅限Windows,macOS,Linux)","[DEPRECATED] Get text from the clipboard (Windows, macOS, Linux)":"[已棄用]從剪貼簿獲取文本(僅限Windows,macOS,Linux)","Volume settings":"音量設置","A collapsible volume setting menu.":"可折疊音量設置菜單。","Check if the events are running for the editor.":"檢查事件是否正在為編輯器運行。","Editor is running":"編輯器正在運行","Events are running for the editor":"事件正在為編輯器運行","Collapsible volume setting menu.":"可折疊音量設置菜單。","Show the volum controls.":"顯示音量控制。","Open volum controls":"打開音量控制","Open _PARAM0_ volum controls":"打開 _PARAM0_ 音量控制","Hide the volum controls.":"隱藏音量控制。","Close volum controls":"關閉音量控制","Close _PARAM0_ volum controls":"關閉 _PARAM0_ 音量控制","Color Conversion":"顏色轉換","Expressions to convert color values between various formats (RGB, HSV, HSL, named colors), calculate luminance according to WCAG 2.0 standards, and to blend two colors.":"表達式,用於在各種格式之間轉換顏色值(RGB、HSV、HSL、命名顏色),根據WCAG 2.0標準計算亮度,並混合兩種顏色。","Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".":"將十六進制字符串轉換為RGB字符串。 例子輸入:“0459AF”。","Hexadecimal to RGB":"十六進制轉RGB","Hex value":"十六進制值","Calculate luminance of a RGB color. Example input: \"0;128;255\".":"計算RGB顏色的亮度。 例子輸入:“0;128;255”。","Luminance from RGB":"RGB的亮度","RGB color":"RGB顏色","Calculate luminance of a hexadecimal color. Example input: \"0459AF\".":"計算十六進制顏色的亮度。 例子輸入:“0459AF”。","Luminance from hexadecimal":"從十六進制計算亮度","Blend two RGB colors by applying a weighted mean.":"通過加權平均混合兩個 RGB 顏色。","Blend RGB colors":"混合 RGB 顏色","First RGB color":"第一個 RGB 顏色","Second RGB color":"第二個 RGB 顏色","Ratio":"比例","Range: 0 to 1, where 0 gives the first color and 1 gives the second color":"範圍:0 到 1,其中 0 給出第一種顏色,1 給出第二種顏色","Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".":"將 RGB 字符串轉換為十六進制字符串。 示例輸入:“0;128;255”。","RGB to hexadecimal":"RGB 轉十六進制","RGB value":"RGB 值","Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".":"將 RGB 字符串轉換為 HSL 字符串。 示例輸入:“0;128;255”“。","RGB to HSL":"RGB 轉 HSL","Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).":"將 HSV 顏色值轉換為 RGB 字符串。 有效輸入範圍:H(0 到 360),S(0 到 100),V(0 到 100)。","HSV to RGB":"HSV 轉 RGB","Hue 0-360":"色相 0-360","Saturation 0-100":"飽和度 0-100","Value 0-100":"值 0-100","Converts a RGB string into a HSV string. Example input: \"0;128;255\".":"將 RGB 字符串轉換為 HSV 字符串。 示例輸入:“0;128;255”。","RGB to HSV":"RGB 轉 HSV","Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.":"將顏色名稱轉換為 RGB 字符串。 (示例:黑色、灰色、白色、紅色、紫色、綠色、黃色、藍色) \n可用顏色的完整列表:https://www.w3schools.com/colors/colors_names.asp。","Color name to RGB":"顏色名稱轉 RGB","Name of a color":"顏色名稱","Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).":"將 HSL 顏色值轉換為 RGB 字符串。 有效輸入範圍:H(0 到 360),S(0 到 100),L(0 到 100)。","HSL to RGB":"HSL 轉 RGB","Lightness 0-100":"明度 0-100","Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.":"將色相(範圍:0 到 360)轉換為 100% 飽和度和 50% 明度的 RGB 顏色字符串。","Hue to RGB":"色相轉 RGB","Compressor":"壓縮器","Compress and decompress strings.":"壓縮和解壓字符串。","Decompress a string.":"解壓縮字符串。","Decompress String":"解壓縮字符串","String to decompress":"解壓縮字串","Compress a string.":"壓縮字串。","Compress String":"壓縮字串","String to compress":"壓縮的字串","Copy camera settings":"複製攝像機設置","Copy the camera settings of a layer and apply them to another layer.":"複製層的攝像機設置並應用到另一個層。","Copy camera settings of a layer and apply them to another layer.":"複製圖層的攝影機設置並應用到另一個圖層。","Copy camera settings of _PARAM1_ layer and apply them to _PARAM3_ layer (X position: _PARAM5_, Y position: _PARAM6_, Zoom: _PARAM7_, Angle: _PARAM8_)":"複製 _PARAM1_ 圖層的攝影機設置並應用到 _PARAM3_ 圖層(X 位置:_PARAM5_,Y 位置:_PARAM6_,縮放:_PARAM7_,角度:_PARAM8_)","Source layer":"源圖層","Source camera":"源攝影機","Destination layer":"目標圖層","Destination camera":"目標攝影機","Clone X position":"複製 X 位置","Clone Y position":"複製 Y 位置","Clone zoom":"複製縮放","Clone angle":"複製角度","CrazyGames SDK v3":"CrazyGames SDK v3","Allow games to be hosted on CrazyGames website, display ads and interact with CrazyGames user accounts.":"允許在CrazyGames網站上托管遊戲,顯示廣告並與CrazyGames用戶帳戶交互。","Third-party":"第三方","Get link account response.":"獲取帳戶連結回應。","Link account response":"帳戶連結回應","the last error from the CrazyGames API.":"CrazyGames API 的最後錯誤。","Get last error":"獲取最後一次錯誤","CrazyGames API last error is":"CrazyGames API 的最後錯誤是","Check if an user is signed into CrazyGames. If signed in, retrieves username and profile picture.":"檢查用戶是否已登錄 CrazyGames。如果已簽署,獲取用戶名和頭像。","Check and load if an user is signed in CrazyGames":"檢查並加載是否有用戶在 CrazyGames 中已簽署","Check if user is signed in CrazyGames":"檢查用戶是否已在 CrazyGames 中簽署","Check if the user is signed in.":"檢查用戶是否已簽署。","User is signed in":"用戶已簽署","Return an invite link.":"返回邀請連結。","Invite link":"邀請連結","Room id":"房間 ID","Display an invite button.":"顯示邀請按鈕。","Display invite button":"顯示邀請按鈕","Display an invite button for the room id: _PARAM1_":"顯示房間 ID:_PARAM1_ 的邀請按鈕","Load CrazyGames SDK.":"加載 CrazyGames SDK。","Load SDK":"載入 SDK","Load CrazyGames SDK":"載入 CrazyGames SDK","Check if the CrazyGames SDK is ready to be used.":"檢查 CrazyGames SDK 是否準備好使用。","CrazyGames SDK is ready":"CrazyGames SDK 備妥","Let CrazyGames know gameplay started.":"讓CrazyGames知道遊戲已經開始。","Gameplay started":"遊戲已經開始","Let CrazyGames know gameplay started":"讓CrazyGames知道遊戲已經開始","Let CrazyGames know gameplay stopped.":"讓CrazyGames知道遊戲已經停止。","Gameplay stopped":"遊戲已經停止","Let CrazyGames know gameplay stopped":"讓CrazyGames知道遊戲已經停止","Let CrazyGames know loading started.":"讓CrazyGames知道遊戲已經開始加載。","Loading started":"遊戲加載已經開始","Let CrazyGames know loading started":"讓CrazyGames知道遊戲加載已經開始","Let CrazyGames know loading stopped.":"讓CrazyGames知道遊戲加載已經停止。","Loading stopped":"遊戲加載已經停止","Let CrazyGames know loading stopped":"讓CrazyGames知道遊戲加載已經停止","Display a video ad. The game is automatically muted while the video is playing.":"播放一個視頻廣告。遊戲將在視頻播放時自動靜音。","Display video ad":"播放視頻廣告","Display _PARAM1_ video ad":"顯示_PARAM1_視頻廣告","Ad Type":"廣告類型","Checks if a video ad just finished playing successfully.":"檢查視頻廣告是否成功播放完畢。","Video ad just finished playing":"視頻廣告剛剛成功播放完畢","Checks if a video ad is playing.":"檢查視頻廣告是否正在播放。","Video ad is playing":"視頻廣告正在播放","Check if the user changed.":"檢查用戶是否更改。","User changed":"用戶更改","Check if a video ad had an error.":"檢查視頻廣告是否有錯誤。","Video ad had an error":"視頻廣告出現錯誤","Generate an invite link to invite friends to join your game sessions. This URL can be added to the clipboard or displayed in the game to let the user select it.":"生成一個邀請鏈接,邀請朋友加入您的遊戲會話。可以將此URL添加到剪貼板或在遊戲中顯示以供用戶選擇。","Generate an invite link":"生成一個邀請鏈接","Generate an invite link for _PARAM1_":"為_PARAM1_生成邀請鏈接","Display an happy time by emitting sparkling confetti. The celebration should remain a special moment.":"通過發射綻放的彩帶來展示一個快樂的時刻。這種慶祝應該始終是一個特殊的時刻。","Display happy time":"展示快樂時光","Scan for ad blockers.":"掃描廣告封鎖程式。","Scan for ad blockers":"掃描廣告封鎖程式","Check if user is using an ad blocker. This condition is always false before the \"Scan for ad blockers\" is called.":"檢查用戶是否使用廣告封鎖程式。在“掃描廣告封鎖程式”調用之前,此條件始終為偽。","Ad blocker is detected":"偵測到廣告封鎖程式","Display a banner that can be called once per 60 seconds.":"顯示一個橫幅,每60秒可調用一次。","Display a banner":"顯示橫幅","Display a banner: _PARAM1_ at position _PARAM3_ ; _PARAM4_ with size _PARAM2_":"顯示橫幅:_PARAM1_ 在位置_PARAM3_;_PARAM4_,帶有尺寸_PARAM2_","Banner name":"橫幅名稱","Ad size":"廣告尺寸","Position X":"位置X","Position Y":"位置Y","Hide a banner.":"隱藏橫幅。","Hide a banner":"隱藏橫幅","Hide the banner: _PARAM1_":"隱藏橫幅:_PARAM1_","Hide all banners.":"隱藏所有橫幅。","Hide all banners":"隱藏所有橫幅","Hide all the banners":"隱藏所有橫幅","Hide the invite button.":"隱藏邀請按鈕。","Hide invite button":"隱藏邀請按鈕","Get the environment.":"獲取環境。","Get the environment":"獲取環境","display environment into _PARAM1_":"將環境顯示為_PARAM1_","Retrieve user data.":"檢索用戶數據。","Retrieve user data":"檢索用戶數據","Show CrazyGames login window.":"顯示CrazyGames登錄視窗。","Show CrazyGames login window":"顯示CrazyGames登錄視窗","Show account link prompt.":"顯示帳戶鏈接提示。","Show account link prompt":"顯示帳戶鏈接提示","the username.":"用戶名。","Username":"用戶名","Username is":"用戶名為","the CrazyGames User ID.":"CrazyGames用戶ID。","CrazyGames User ID":"CrazyGames用戶ID","CrazyGames user ID is":"CrazyGames用戶ID為","Gets the signed-in user's profile picture URL.":"Gets the signed-in user's profile picture URL.","Gets the signed-in user's profile picture URL":"Gets the signed-in user's profile picture URL","Return true when the user prefers to instantly join a lobby.":"當使用者偏好立即加入大廳時返回 true。","Is instantly joining a lobby":"立即加入大廳","Return true if the user prefers the chat disabled.":"當使用者偏好停用聊天時返回 true。","Is the user chat disabled":"使用者已停用聊天","Retrieves user system info, browser, version and device.":"擷取使用者系統資訊、瀏覽器、版本和設備。","Retrieves user system info":"擷取使用者系統資訊","Get invite parameters if user is invited to this game.":"如果使用者被邀請參加此遊戲,獲取邀請參數。","Get invite parameters":"獲取邀請參數","Param":"參數","Save the session data.":"儲存會話資料。","Save session data":"儲存會話資料","Save session data, with the id: _PARAM1_ to: _PARAM2_":"使用 id: _PARAM1_ 儲存會話資料到: _PARAM2_","Id":"Id","Get user session data, if there is no saved data, \"null\" will be returned.":"獲取使用者會話資料,如果沒有儲存的資料,將返回 \"null\"。","Get user session data":"獲取使用者會話資料","the availability of the user's account.":"使用者帳戶的可用性。","Is user account available":"使用者帳戶可用","The CrazyGames user account is available":"CrazyGames 使用者帳戶可用","Retrieve the user's session token for authentication.":"檢索使用者的會話令牌以進行身分驗證。","Get User Token":"獲取使用者令牌","Retrieve the authentication token from Xsolla.":"從 Xsolla 擷取驗證令牌。","Get Xsolla Token":"獲取 Xsolla 令牌","Generate Xsolla token.":"產生 Xsolla 令牌。","Generate Xsolla token":"產生 Xsolla 令牌","Cursor movement conditions":"游標移動條件","Conditions to check the cursor movement (still or moving).":"檢查游標移動(靜止或移動)的條件。","Check if the cursor has stayed still for the specified time on the default layer.":"檢查鼠標游標是否在預設層上指定的時間內保持靜止。","Cursor stays still":"游標保持靜止","Cursor has stayed still for _PARAM1_ seconds":"鼠標在預設層上已保持靜止_PARAM1_秒","Check if the cursor is moving on the default layer.":"檢查鼠標在預設層上是否移動。","Cursor is moving":"鼠標正在移動","Cursor type":"游標類型","Provides an action to change the type of the cursor, and a behavior to change the cursor when an object is hovered.":"提供更改游標類型的操作,以及在將鼠標懸停在對象上時更改鼠標的行為。","Change the type of the cursor.":"更改游標類型。","Change the cursor to _PARAM1_":"將游標更改為_PARAM1_","The new cursor type":"新游標類型","List of available cursors on https://developer.mozilla.org/en-US/docs/Web/CSS/cursor":"在 https://developer.mozilla.org/en-US/docs/Web/CSS/cursor 上提供的可用游標清單","Do change the type of the cursor.":"更改光标类型。","Do change cursor type":"更改光标类型","Do change the cursor to _PARAM1_":"更改光标為_PARAM1_","Change the cursor appearence when the object is hovered (on Windows, macOS or Linux).":"當對象懸停時更改光標外觀(在Windows、macOS或Linux上)。","Custom cursor when hovered":"懸停時自定義光標","The cursor type":"光標類型","See https://developer.mozilla.org/en-US/docs/Web/CSS/cursor for a list of possible cursors.":"參見https://developer.mozilla.org/zh-CN/docs/Web/CSS/cursor ,獲取可能光標的列表。","Curved movement":"曲線運動","Move objects on curved paths.":"在曲線上移動物件。","Append a cubic Bezier curve at the end of the path.":"在路徑末端添加一個立方Bezier曲線。","Append a curve":"添加一個曲線","Append a curve to the path _PARAM1_ relatively to the end: _PARAM8_, first control point: _PARAM2_ ; _PARAM3_, second control point: _PARAM4_ ; _PARAM5_, destination: _PARAM6_ ; _PARAM7_":"相對於路徑_PARAM1_末端添加一條_String_曲線;第一控制點:_PARAM2_;_PARAM3_,第二控制點:_PARAM4_;_PARAM5_目的地:_PARAM6_;_PARAM7_","Path name":"路徑名","First control point X":"第一控制點X","First control point Y":"第一控制點Y","Second Control point X":"第二控制點X","Second Control point Y":"第二控制點Y","Destination point X":"目的地點X","Destination point Y":"目的地點Y","Relative":"相對","Append a cubic Bezier curve to the end of an object's path. The first control point is symmetrical to the last control point of the path.":"在物件路徑末尾添加一個立方Bezier曲線。第一控制點與路徑最後一個控制點對稱。","Append a smooth curve":"添加一條平滑曲線","Append a smooth curve to the path _PARAM1_ relatively to the end: _PARAM6_, second control point: _PARAM2_ ; _PARAM3_, destination: _PARAM4_ ; _PARAM5_":"對路徑_PARAM1_末端添加一條平滑曲線;第二控制點:_PARAM2_;_PARAM3_,目的地:_PARAM4_;_PARAM5_","Append a line at the end of the path.":"在路徑末尾添加一條直線。","Append a line":"添加一條直線","Append a line to the path _PARAM1_ relatively to the end: _PARAM4_, destination: _PARAM2_ ; _PARAM3_":"相對於路徑_PARAM1_增加一條線:_PARAM4_,目標:_PARAM2_;_PARAM3_","Append a line to close the path.":"添加一條線以閉合路徑。","Close a path":"閉合路徑","Close the path _PARAM1_":"關閉路徑_PARAM1_","Create a path from SVG commands, for instance \"M 0,0 C 55,0 100,45 100,100\". Commands are: M = Move, C = Curve, S = Smooth, L = Line. Lower case is for relative positions. The preferred way to build the commands is to use an external SVG editor like Inkscape.":"使用SVG命令創建一條路徑,例如“M 0,0 C 55,0 100,45 100,100”。其中命令有:M = 移動,C = 曲線,S = 平滑,L = 直線。小寫用於相對位置。構建命令的首選方式是使用外部SVG編輯器,如Inkscape。","Create a path from SVG":"從SVG創建路徑","Create the path _PARAM1_ from the SVG path commands _PARAM2_":"從SVG路徑指令_PARAM2_創建路徑_PARAM1_","SVG commands":"SVG命令","Return the SVG commands of a path.":"返回路徑的SVG命令。","SVG path commands":"SVG路徑命令","Delete a path from the memory.":"從內存中刪除路徑。","Delete a path":"刪除路徑","Delete the path: _PARAM1_":"刪除路徑: _PARAM1_","Append a path to another path.":"將一個路徑附加到另一個路徑。","Append a path":"添加路徑","Append the path _PARAM2_ to the path _PARAM1_":"將路徑_PARAM2_附加到路徑_PARAM1_","Name of the path to modify":"要修改的路徑的名稱","Name of the path to add to the first one":"要添加到第一個的路徑的名稱","Duplicate a path.":"復制一個路徑。","Duplicate a path":"復制一個路徑","Create path _PARAM1_ as a duplicate of path _PARAM2_":"創建路徑_PARAM1_作為路徑_PARAM2_的副本","Name of the path to create":"要創建的路徑的名稱","Name of the source path":"源路徑的名稱","Append a path to another path. The appended path is rotated to have a smooth junction.":"將一個路徑附加到另一個路徑。 附加的路徑旋轉後會具有平滑的連接。","Append a rotated path":"附加一個旋轉後的路徑","Append the path _PARAM2_ rotated to connect to the path _PARAM1_ flip: _PARAM3_":"附加路徑_PARAM2_旋轉以連接到路徑_PARAM1_反轉:_PARAM3_","Flip the appended path":"翻轉附加路徑","Return the speed scale on Y axis. This is used to change the view point of a path (top-dwon or isometry).":"返回Y軸上的速度比例。 這用於更改路徑的視角(從上到下或等角)。","Speed scale Y":"速度比例Y","Change the speed scale on Y axis. This allows to change the view point of a path (top-dwon or isometry).":"更改Y軸上的速度比例。 這允許更改路徑的視角(從上到下或等角)。","Change the speed scale Y of the path _PARAM1_ to _PARAM2_":"將路徑_PARAM1_的Y速度比例更改為_PARAM2_","Speed scale on Y axis (0.5 for pixel isometry)":"Y軸上的速度比例(0.5代表像素等角)","Invert a path, the end becomes the beginning.":"翻轉一個路徑,結尾變成開頭。","Invert a path":"翻轉一個路徑","Invert the path _PARAM1_":"翻轉路徑_PARAM1_","Flip a path.":"翻轉路徑。","Flip a path":"翻轉一個路徑","Flip the path _PARAM1_":"翻轉路徑_PARAM1_","Flip a path horizontally.":"水平翻轉一個路徑。","Flip a path horizontally":"水平翻轉一個路徑","Flip the path _PARAM1_ horizontally":"水平翻轉路徑_PARAM1_","Flip a path vertically.":"垂直翻轉路徑。","Flip a path vertically":"垂直翻轉路徑","Flip the path _PARAM1_ vertically":"垂直翻轉路徑_PARAM1_","Scale a path.":"縮放路徑。","Scale a path":"縮放路徑","Scale the path _PARAM1_ by _PARAM2_ ; _PARAM3_":"按_PARAM2_ ; _PARAM3_縮放路徑_PARAM1_","Scale on X axis":"X軸上的縮放","Scale on Y axis":"Y軸上的縮放","Rotate a path.":"旋轉路徑。","Rotate a path":"旋轉路徑","Rotate _PARAM2_° the path _PARAM1_":"旋轉路徑_PARAM1__PARAM2_°","Rotation angle":"旋轉角度","Check if a path is closed.":"檢查路徑是否閉合。","Is closed":"是封閉的","The path _PARAM1_ is closed":"路徑_PARAM1_封閉","Return the position on X axis of the path for a given length.":"返回給定長度對應的路徑X軸上的位置。","Path X":"路徑X","Length on the path":"路徑的長度","Return the position on Y axis of the path for a given length.":"返回給定長度對應的路徑Y軸上的位置。","Path Y":"路徑Y","Return the direction angle of the path for a given length (in degree).":"返回給定長度的路徑方向角度(以度為單位)。","Path angle":"路徑角度","Return the length of the path.":"返回路徑的長度。","Path length":"路徑的長度","Return the displacement on X axis of the path end.":"返回路徑結束X軸的位移。","Path end X":"路徑結束X","Return the displacement on Y axis of the path end.":"返回路徑結束Y軸的位移。","Path end Y":"路徑結束Y","Return the number of lines or curves that make the path.":"返回組成路徑的線條或曲線數量。","Path element count":"路徑元素計數","Return the origin position on X axis of a curve.":"返回曲線X軸上的起始位置。","Origin X":"原点 X","Curve index":"曲线索引","Return the origin position on Y axis of a curve.":"返回曲线上 Y 轴的原点位置。","Origin Y":"原点 Y","Return the first control point position on X axis of a curve.":"返回曲线上 X 轴的第一个控制点位置。","First control X":"第一个控制点 X","Return the first control point position on Y axis of a curve.":"返回曲线上 Y 轴的第一个控制点位置。","First control Y":"第一个控制点 Y","Return the second control point position on X axis of a curve.":"返回曲线上 X 轴的第二个控制点位置。","Second control X":"第二个控制点 X","Return the second control point position on Y axis of a curve.":"返回曲线上 Y 轴的第二个控制点位置。","Second control Y":"第二个控制点 Y","Return the target position on X axis of a curve.":"返回曲线上 X 轴的目标位置。","Return the target position on Y axis of a curve.":"返回曲线上 Y 轴的目标位置。","Path exists.":"路径存在。","Path exists":"路径存在","Path _PARAM1_ exists":"路徑 _PARAM1_ 存在","Move objects on curved paths in a given duration and tween easing function.":"在给定的持续时间和缓动缓和功能中在曲线路径上移动对象。","Movement on a curve (duration-based)":"曲线上的移动(基于持续时间)","Rotation offset":"旋转偏移","Flip on X to go back":"在 X 轴上翻转以返回","Flip on Y to go back":"在 Y 轴上翻转以返回","Speed scale":"速度比例","Pause duration before going back":"返回之前返回的暂停持续时间","Viewpoint":"视点","Set the the object on the path according to the current length.":"根據當前長度設置路徑上的物體。","Update position":"更新位置","Update the position of _PARAM0_ on the path":"在路徑上更新_PARAM0_的位置","Move the object to a position by following a path.":"按照路徑將物體移動到一個位置。","Move on path to a position":"在路徑上移動到一個位置","Move _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"將_PARAM0_移動到_PARAM6_;_PARAM7_在路徑上:_PARAM2_重複_PARAM3_次在_PARAM4_秒內_PARAM5_秒適應","The path can be define with the \"Append curve\" action.":"路徑可以用“附加曲線”操作來定義。","Number of repetitions":"重複次數","Destination X":"目的地 X","Destination Y":"目的地 Y","Move the object to a position by following a path and go back.":"按照路徑將物體移動到一個位置然後返回。","Move back and forth to a position":"來回移動到一個位置","Move back and forth _PARAM0_ to _PARAM6_ ; _PARAM7_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM8_ seconds before going back and loop: _PARAM9_":"來回_PARAM0_到_PARAM6_;_PARAM7_在路徑上:_PARAM2_重複_PARAM3_次在_PARAM4_秒內_PARAM5_秒適應,等待_PARAM8_秒再返回和循環_PARAM9_","Duration to wait before going back":"返回之前等待的時間","Loop":"循環","Move the object by following a path.":"按照路徑移動物體。","Move on path":"按照路徑移動","Move _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing":"按照路徑在_PARAM4_秒內_PARAM3_次重複_PARAM0_移動,並呈現_PARAM5_速度變化","Move the object by following a path and go back.":"按照路徑移動物體然後返回。","Move back and forth":"來回移動","Move back and forth _PARAM0_ on the path: _PARAM2_ repeated _PARAM3_ times in _PARAM4_ seconds with _PARAM5_ easing, wait _PARAM6_ seconds before going back and loop: _PARAM7_":"來回_PARAM6_到_PARAM0_在路徑上:_PARAM2_重複_PARAM3_次在_PARAM4_秒內_PARAM5_秒適應,等待_PARAM6_秒再返回和循環_PARAM7_","Check if the object has reached one of the 2 ends of the path.":"檢查物體是否已到達路徑的2端之一。","Reached an end":"已達結束點","_PARAM0_ reached an end of the path":"_PARAM0_已到達路徑結束點","Check if the object has finished to move on the path.":"檢查物體是否已完成在路徑上的移動。","Finished to move":"已完成移動","_PARAM0_ has finished to move":"_PARAM0_已完成移動","Return the angle of movement on its path.":"返回其路徑上的移動角度。","Movement angle":"移動角度","Draw the object trajectory.":"繪製物體軌跡。","Draw the trajectory":"繪製軌跡","Draw trajectory of _PARAM0_ on _PARAM2_":"在 _PARAM2_ 上繪製 _PARAM0_ 的軌跡","Shape painter":"形狀繪製器","Change the transformation to apply to the path.":"更改應用於路徑的轉換。","Path transformation":"路徑轉換","Change the path trasformation of _PARAM0_ to origin _PARAM2_; _PARAM3_ scale by _PARAM4_ and a rotation of _PARAM5_°":"將 _PARAM0_ 的路徑變換為原點 _PARAM2_; _PARAM3_ 比例為 _PARAM4_ 及旋轉 _PARAM5_°","Scale":"規模","Angle":"角度","Initialize the movement state.":"初始化運動狀態。","Initialize the movement":"初始化運動","Initialize the movement of _PARAM0_":"初始化 _PARAM0_ 的運動","Return the number of repetitions between the current position and the origin.":"返回當前位置和原點之間的重複次數。","Repetition done":"重複完成","Return the position on one repeated path.":"返回一個重複路徑上的位置。","Path position":"路徑位置","Return the progress on the full path from 0 to 1, where 0 means the origin and 1 the end.":"返回在完整路徑上的進度,從0到1,其中0表示原點,1表示結束。","Progress":"進度","Return the length of the path (one repetition only).":"返回路徑的長度(僅限一個重複)。","Return the speed scale on Y axis of the path.":"返回路徑上Y軸的速度縮放。","Path speed scale Y":"路徑速度縮放Y","Return the angle to use when the object is going back or not.":"當物體回到原位時使用的角度。","Back or forth angle":"前進或後退角度","Move objects on curved paths at a given speed.":"以给定的速度在曲线路径上移动对象。","Movement on a curve (speed-based)":"曲线上的移动(基于速度)","Rotation":"旋转","Change the path followed by an object.":"更改物件遵循的路徑。","Follow a path":"遵循路徑","_PARAM0_ follow the path: _PARAM2_ repeated _PARAM3_ times and loop: _PARAM4_":"_PARAM0_ 遵循路徑:_PARAM2_ 重複 _PARAM3_ 次並循環:_PARAM4_","Change the path followed by an object to reach a position.":"更改將物件遵循的路徑以到達位置。","Follow a path to a position":"遵循路徑到位置","_PARAM0_ follow the path _PARAM2_ repeated _PARAM3_ times to reach _PARAM5_ ; _PARAM6_ and loop: _PARAM4_":"_PARAM0_ 遵循路徑 _PARAM2_ 重複 _PARAM3_ 次以到達 _PARAM5_; _PARAM6_ 和循環:_PARAM4_","the length between the trajectory origin and the current position without counting the loops.":"徑向原點和當前位置之間的长度不包括迴圈。","Position on the loop":"迴圈位置","the length from the trajectory origin in the current loop":"迴圈中距離徑向原點的長度","the number time the object loop the trajectory.":"物件迴圈徑跡的次數。","Current loop":"當前迴路","the current loop":"當前迴路","the length between the trajectory origin and the current position counting the loops.":"從軌跡原點到當前位置的長度,計算迴圈數。","Position on the path":"路徑上的位置","the length from the trajectory origin counting the loops":"從軌跡原點計數迴圈的長度","Change the position of the object on the path.":"更改在路徑上物件的位置。","Change the position of _PARAM0_ on the path at the length _PARAM2_":"在路徑上在長度為_PARAM2_ 改變 _PARAM0_ 的位置","Length":"長度","Check if the length from the trajectory origin is lesser than a value.":"檢查是否從軌跡原點的長度小於某個值。","Current length":"當前長度","_PARAM0_ is less than _PARAM2_ pixels away from the trajectory origin":"_PARAM0_ 離軌跡原點的像素距離小於 _PARAM2_","Length from the trajectory origin (in pixels)":"距離軌跡原點的距離(以像素為單位)","Check if the object has reached the origin position of the path.":"檢查物件是否已到達路徑的原始位置。","Reached path origin":"到達路徑原點","_PARAM0_ reached the path beginning":"_PARAM0_ 到達路徑起點","Check if the object has reached the target position of the path.":"檢查物件是否已到達路徑的目標位置。","Reached path target":"到達路徑目標","_PARAM0_ reached the path target":"_PARAM0_ 到達路徑目標","Reach an end":"到達終點","Check if the object can still move in the current direction.":"檢查物件是否仍然可以沿著目前方向移動。","Can move further":"可以進一步移動","_PARAM0_ can move further on its path":"_PARAM0_ 可以在其路徑上進一步移動","the speed of the object.":"物件的速度。","the speed":"速度","Change the current speed of the object.":"改變物件的當前速度。","Change the speed of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的速度為 _PARAM2_","Speed (in pixels per second)":"速度(以每秒像素為單位)","Make an object accelerate until it reaches a given speed.":"使一個物件加速直到達到給定速度。","Accelerate":"加速","_PARAM0_ accelerate at _PARAM3_ to reach the speed of _PARAM2_":"_PARAM0_ 在 _PARAM3_ 加速以達到 _PARAM2_ 的速度","Targeted speed (in pixels per second)":"目標速度(以每秒像素為單位)","Acceleration (in pixels per second per second)":"加速度(以每秒平方像素為單位)","Make an object accelerate to reaches a speed in a given amount of time.":"使物件在一定時間內加速到達一定速度。","Accelerate during":"加速時間為","_PARAM0_ accelerate during _PARAM3_ seconds to reach the speed of _PARAM2_":"_PARAM0_ 在 _PARAM3_ 秒內加速到 _PARAM2_ 的速度","Repeated path position":"重複路徑位置","Return the length of the complete trajectory (without looping).":"返回完整軌跡的長度(不包括循環)。","Total length":"總長度","Return the path origin on X axis of the object.":"返回對象在X軸上的路徑起點。","Path origin X":"路徑起點X","the path origin on X axis":"對象在X軸上的路徑起點","Return the path origin on Y axis of the object.":"返回對象在Y軸上的路徑起點。","Path origin Y":"路徑起點Y","the path origin on Y axis":"對象在Y軸上的路徑起點","Depth effect":"深度效果","Change scale based on Y position to simulate depth of field.":"根據 Y 軸位置更改比例以模擬景深。","The scale of the object decreases the closer it is to the horizon, giving the illusion that the object is travelling away from the viewer.":"当物体靠近地平线时,物体的尺寸缩小,给观看者一种物体远离观看者的错觉。","Max scale when the object is at the bottom of the screen (Default: 1)":"当物体在屏幕底部时的最大比例(默认:1)","Y position that represents a horizon where objects appear infinitely small (Default: 0)":"代表物体呈现无限小的地平线位置的 Y 坐标(默认:0)","Exponential rate of change (Default: 2)":"指数变化速率(默认:2)","Percent away from the horizon":"距離地平線的百分比","Percent away from the horizon. This is \"0\" at the horizon, and \"1\" at the bottom of the screen.":"距離地平線的百分比。這是地平線上的\"0\",屏幕底部的\"1\"。","Percent away from horizon":"離地平線的百分比","Exponential rate of change, based on Y position.":"基於Y軸位置的指數變化率。","Exponential rate of change":"指數變化率","Max scale when the object is at the bottom of the screen.":"當對象位於屏幕底部時的最大比例。","Max scale":"最大比例","Y value of horizon.":"地平線的Y值。","Y value of horizon":"地平線的Y值","Set max scale when the object is at the bottom of the screen (Default: 2).":"設置當對象位於屏幕底部時的最大比例(默認:2)。","Set max scale":"設置最大比例","Set max scale of _PARAM0_ to _PARAM2_":"設置 _PARAM0_ 的最大比例為 _PARAM2_","Y Exponent":"Y指數","Set Y exponential rate of change (Default: 2).":"設置Y軸指數變化率(默認:2)。","Set exponential rate of change":"設置指數變化率","Set Y exponential rate of change of _PARAM0_ to _PARAM2_":"設置 _PARAM0_ 的Y軸指數變化率為 _PARAM2_","Set Y position of the horizon, where objects are infinitely small (Default: 0).":"設置地平線的Y位置,其中對象被無限小(默認:0)。","Set Y position of horizon":"設置地平線的Y位置","Set horizon of _PARAM0_ to Y position _PARAM2_":"將 _PARAM0_ 的地平線設置為Y位置 _PARAM2_","Horizon Y":"地平線Y","Discord rich presence (Windows, Mac, Linux)":"Discord 具豐富表現(Windows、Mac、Linux)","Adds discord rich presence to your games.":"為遊戲添加 Discord 具豐富表現。","Attempts to connect to discord if it is installed, and initialize rich presence.":"嘗試連接到 Discord(如果已安裝),並初始化豐富狀態。","Initialize rich presence":"初始化豐富狀態","Initialize rich presence with ID _PARAM1_":"使用 ID _PARAM1_ 初始化豐富狀態","The discord client ID":"Discord 客戶端 ID","Update the data in the rich presence. See the discord documentation for more info on each field. Each field except state is optional.":"更新豐富狀態中的數據。有關每個字段的更多信息,請參閱 Discord 文檔。除狀態之外的每個字段都是可選的。","Update rich presence":"更新豐富狀態","Update rich presence to state _PARAM1_, details _PARAM2_, begin timestamp _PARAM3_, end timestamp _PARAM4_, large image _PARAM5_ with text _PARAM6_ and small image _PARAM7_ with text _PARAM8_":"更新豐富狀態以顯示狀態 _PARAM1_、詳細資訊 _PARAM2_、開始時間戳 _PARAM3_、結束時間戳 _PARAM4_、大圖片 _PARAM5_(附帶文字 _PARAM6_)和小圖片 _PARAM7_(附帶文字 _PARAM8_)","The current state":"當前狀態","The details of the current state":"當前狀態的詳細資訊","The timstamp of the start of the match":"比賽開始的時間戳","If this is filled, discord will show the time elapsed since the start.":"如果填寫此項,Discord 將顯示自比賽開始以來經過的時間。","The timestamp of the end of the match":"比賽結束的時間戳","If this is filled, discord will display the remaining time.":"如果填寫此項,Discord 將顯示剩餘時間。","The name of the big image":"大圖片的名稱","The text of the large image":"大圖片的文字","The name of the small image":"小圖片的名稱","The text of the small image":"小圖片的文字","Double-click and tap":"雙擊和輕觸","Check for a double-click or a tap.":"檢查是否雙擊或輕觸。","Check if the specified mouse button is clicked twice in a short amount of time.":"檢查指定的滑鼠按鈕在短時間內是否被點擊了兩次。","Double-clicked (or double-tapped)":"雙擊(或兩次點擊)","_PARAM1_ mouse button is double-clicked":"_PARAM1_ 滑鼠按鈕被雙擊","Mouse button to track":"要監視的滑鼠按鈕","As touch devices do not have middle/right tap equivalents, you will need to account for this within your events if you're not using the left mouse button and building for touch devices.":"由於觸摸設備沒有中間/右邊的等效按壓,如果你不使用左滑鼠按鈕並且面向觸摸設備創建,你將需要在事件中考慮這一點。","Check if the specified mouse button is clicked.":"檢查指定的滑鼠按鈕是否被點擊。","Clicked (or tapped)":"點擊(或輕觸)","_PARAM1_ mouse button is clicked":"_PARAM1_按下滑鼠按鈕","_PARAM1_ mouse button is clicked _PARAM2_ times":"_PARAM1_按下滑鼠按鈕_PARAM2_次","Click count":"點擊次數","Drag camera with the mouse (or touchscreen)":"用滑鼠(或觸摸屏)拖動相機","Move a camera by dragging the mouse (or touchscreen).":"通過拖動滑鼠(或觸摸屏)來移動相機。","Drag camera with the mouse":"使用滑鼠拖動相機","Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button":"使用 _PARAM4_ 滑鼠按鈕在 _PARAM3_ 方向上在 _PARAM2_ 圖層上拖動相機","Camera layer (default: \"\")":"相機圖層(默認為 \"\")","Directions that the camera can move (horizontal, vertical, both)":"相機可以移動的方向(水平,垂直,兩者)","Mouse button (use \"Left\" for touchscreen)":"滑鼠按鈕(在觸控螢幕上使用“左”)","Draggable (for physics objects)":"可拖動(適用於物理對象)","Drag a physics object with the mouse (or touch).":"用滑鼠(或觸摸)拖動物理物體。","Physics behavior":"物理行為","Mouse button":"滑鼠按鈕","Maximum force":"最大力","Frequency (Hz)":"頻率(Hz)","Damping ratio (Range: 0 to 1)":"阻尼比(範圍:0 到 1)","Enable automatic dragging":"啟用自動拖曳","If automatic dragging is disabled, use the \"Start drag\" and \"Release drag\" actions.":"如果禁用自動拖曳,請使用“啟動拖曳”和“釋放拖曳”操作。","Start dragging object.":"開始拖動對象。","Start dragging object":"開始拖動對象","Start dragging (physics) _PARAM0_":"開始拖動(物理)_PARAM0_","Release dragged object.":"釋放拖動的對象。","Release dragged object":"釋放拖動的對象","Release _PARAM0_ from being dragged (physics)":"從被拖動(物理)釋放 _PARAM0_","Check if object is being dragged.":"檢查對象是否正在被拖動。","Is being dragged":"正在被拖動","_PARAM0_ is being dragged (physics)":"_PARAM0_正在被拖動(物理)","the mouse button used to move the object.":"用於移動對象的滑鼠按鈕。","the dragging mouse button":"拖拽滑鼠按鈕","the maximum joint force (in Newtons) of the object.":"對象的最大關節力(牛頓)。","the maximum force":"最大力","the joint frequency (per second) of the object.":"對象的關節頻率(每秒)。","the frequency":"頻率","the joint damping ratio (range: 0 to 1) of the object.":"對象的關節阻尼比(範圍:0至1)。","Damping ratio":"阻尼比","the damping ratio (range: 0 to 1)":"阻尼比(範圍:0至1)","Check if automatic dragging is enabled.":"檢查自動拖曳是否已啟用。","Automatic dragging":"自動拖曳","Automatic dragging is enabled on _PARAM0_":"已在_PARAM0_啟用自動拖曳","Enable (or disable) automatic dragging with the mouse or touch.":"使用滑鼠或觸碰啟用(或停用)自動拖曳。","Enable (or disable) automatic dragging":"使用滑鼠或觸碰啟用(或停用)自動拖曳","Enable automatic dragging on _PARAM0_: _PARAM2_":"在_PARAM0_啟用自動拖曳:_PARAM2_","EnableAutomaticDragging":"EnableAutomaticDragging","Draggable slider (for Shape Painter)":"可拖動滑塊(適用於形狀繪製器)","A draggable slider that users can move to select a numerical value.":"用戶可以移動的可拖動滑塊以選擇數值。","Let users select a numerical value by dragging a slider.":"讓用戶通過拖動滑塊選擇數值。","Draggable slider":"可拖曳滑塊","Minimum value":"最小值","Maximum value":"最大值","Tick spacing":"標註間距","Thumb shape":"滑塊形狀","Thumb":"滑塊","Thumb width":"滑塊寬度","Thumb height":"滑塊高度","Thumb Color":"滑塊顏色","Thumb opacity":"滑塊不透明度","Track length":"軌道長度","Track":"軌道","Inactive track color (thumb color by default)":"非啟動軌道顏色(默認為滑塊顏色)","Inactive track opacity":"非啟動軌道不透明度","Active track color (thumb color by default)":"啟動軌道顏色(默認為滑塊顏色)","Active track opacity":"啟動軌道不透明度","Halo size (hover)":"庇護大小(懸停)","Rounded track ends":"圓潤軌道末端","Check if the slider is being dragged.":"檢查滑塊是否正在被拖曳。","Being dragged":"正在被拖曳","_PARAM0_ is being dragged":"_PARAM0_正在被拖曳","Check if the slider interations are enabled.":"檢查滑塊互動是否已啟用。","Enable or disable the slider. Users cannot interact while it is disabled.":"啟用或停用滑塊。用戶在禁用時無法互動。","The value of the slider (based on position of the thumb).":"滑塊的值(基於拇指位置)。","Slider value":"滑塊值","Change the value of a slider (this will move the thumb to the correct position).":"更改滑塊的值(這將移動拇指到正確位置)。","Change the value of _PARAM0_: _PARAM2_":"更改_PARAM0_的值:_PARAM2_","The minimum value of a slider.":"滑塊的最小值。","Slider minimum value":"滑塊最小值","Change the minimum value of a slider.":"更改滑塊的最小值。","Change the minimum value of _PARAM0_: _PARAM2_":"更改_PARAM0_的最小值:_PARAM2_","The maximum value of a slider.":"滑塊的最大值。","Slider maximum value":"滑塊最大值","Thickness of track.":"軌道的厚度。","Slider track thickness":"滑塊軌道厚度","Length of track.":"軌道的長度。","Slider track length":"滑塊軌道長度","Height of thumb.":"滑塊的高度。","Slider thumb height":"滑塊拇指高度","Change the maximum value of a slider.":"更改滑塊的最大值。","The tick spacing of a slider.":"滑塊的刻度間距。","Change the tick spacing of _PARAM0_: _PARAM2_":"更改_PARAM0_的刻度間距:_PARAM2_","Change the tick spacing of a slider.":"更改滑塊的刻度間距。","Change length of track.":"更改軌道長度。","Change track length of _PARAM0_ to _PARAM2_ px":"將_PARAM0_的軌道長度更改為_PARAM2_像素","Track width":"軌道寬度","Change thickness of track.":"更改軌道厚度。","Change track thickness of _PARAM0_ to _PARAM2_ px":"將軌道的_PARAM0_變更為_PARAM2_像素的厚度","Change width of thumb.":"更改拇指寬度。","Change thumb width of _PARAM0_ to _PARAM2_ px":"將拇指寬度的_PARAM0_變更為_PARAM2_像素","Change height of thumb.":"更改拇指高度。","Change thumb height of _PARAM0_ to _PARAM2_ px":"將拇指高度的_PARAM0_變更為_PARAM2_像素","Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.":"更改拇指周圍光暈的半徑。此尺寸也用於檢測與滑塊的交互。","Change halo radius of _PARAM0_ to _PARAM2_ px":"將光暈半徑的_PARAM0_變更為_PARAM2_像素","Change the halo opacity when the thumb is hovered.":"當懸停在拇指上時更改光暈不透明度。","Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px":"當懸停時,將_PARAM0_的光暈不透明度變更為_PARAM2_像素","Change opacity of halo when pressed.":"當按壓時更改光暈不透明度。","Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px":"當按下時,將_PARAM0_的光暈不透明度變更為_PARAM2_像素","Change shape of thumb (circle or rectangle).":"更改拇指形狀(圓形或矩形)。","Change shape of _PARAM0_ to _PARAM2_":"將_PARAM0_的形狀變更為_PARAM2_","New thumb shape":"新拇指形狀","Make track use rounded ends.":"使軌道使用圓角端。","Draw _PARAM0_ with a rounded track: _PARAM2_":"使用圓角軌道繪製_PARAM0_:_PARAM2_","Rounded track":"圓角軌道","Change opacity of thumb.":"更改拇指不透明度。","Change thumb opacity of _PARAM0_ to _PARAM2_":"將_PARAM0_的拇指不透明度變更為_PARAM2_","Change opacity of inactive track.":"更改非活動軌道不透明度。","Change inactive track opacity of _PARAM0_ to _PARAM2_":"將_PARAM0_的非活動軌道不透明度變更為_PARAM2_","Change opacity of active track.":"更改活動軌道不透明度。","Change active track opacity of _PARAM0_ to _PARAM2_":"將_PARAM0_的活動軌道不透明度變更為_PARAM2_","Change the color of the track that is LEFT of the thumb.":"更改拇指左側的軌道顏色。","Active track color":"活動軌道顏色","Change active track color of _PARAM0_ to _PARAM2_":"將_PARAM0_的活動軌道顏色變更為_PARAM2_","Change the color of the track that is RIGHT of the thumb.":"更改拇指右側的軌道顏色。","Inactive track color":"非活動軌道顏色","Change inactive track color of _PARAM0_ to _PARAM2_":"將_PARAM0_的非活動軌道顏色變更為_PARAM2_","Change the thumb color to a specific value.":"將拇指顏色更改為特定值。","Thumb color":"拇指顏色","Change thumb color of _PARAM0_ to _PARAM2_":"將_PARAM0_的拇指顏色更改為_PARAM2_","Pathfinding painter":"尋路繪製器","Draw the pathfinding of an object using a shape painter.":"使用形狀繪製器繪製對象的尋路。","Draw the path followed by the object using a shape painter.":"使用形狀繪製器繪製對象所跟隨的路徑。","LoopIndex":"遍歷索引","Draw the path followed by the object using a shape painter. It automatically creates an instance of the shape painter object if there is none.":"使用形狀繪製器繪製對象所跟隨的路徑。 如果沒有,它將自動創建形狀繪製器對象的實例。","Draw pathfinding":"繪製尋路","Draw the path followed by _PARAM0_ using _PARAM3_":"使用_PARAM3_繪製_PARAM0_的路徑","Pathfinding behavior":"尋路行為","Shape painter used to draw the path":"用於繪製路徑的形狀繪製器","Edge scroll camera":"邊緣滾動攝像機","Scroll camera when cursor is near edge of screen.":"當光標靠近屏幕邊緣時滾動攝像機。","Enable (or disable) camera edge scrolling . Use \"Configure camera edge scrolling\" to adjust settings.":"啟用(或禁用)相機邊緣滾動。 使用“配置相機邊緣滾動”來調整設置。","Enable (or disable) camera edge scrolling":"啟用(或禁用)相機邊緣滾動","Enable camera edge scrolling: _PARAM1_":"啟用相機邊緣滾動: _PARAM1_","Enable camera edge scrolling":"啟用相機邊緣滾動","Configure camera edge scrolling that moves when mouse is near an edge of the screen.":"配置當滑鼠靠近屏幕邊緣時移動的相機邊緣滾動。","Configure camera edge scrolling":"配置相機邊緣滾動","Configure camera edge scrolling (layer: _PARAM3_, screen margin: _PARAM1_, scroll speed: _PARAM2_, style: _PARAM5_)":"配置相機邊緣滾動(層:_PARAM3_,屏幕邊距:_PARAM1_,滾動速度:_PARAM2_,樣式:_PARAM5_)","Screen margin (pixels)":"屏幕邊距(像素)","Scroll speed (in pixels per second)":"滾動速度(以像素每秒為單位)","Scroll style":"滾動樣式","Check if the camera is scrolling.":"檢查相機是否滾動。","Camera is scrolling":"相機正在滾動","Check if the camera is scrolling up.":"檢查相機是否向上滾動。","Camera is scrolling up":"相機正在向上滾動","Check if the camera is scrolling down.":"檢查相機是否向下滾動。","Camera is scrolling down":"相機正在向下滾動","Check if the camera is scrolling left.":"檢查相機是否向左滾動。","Camera is scrolling left":"相機正在向左滾動","Check if the camera is scrolling right.":"檢查相機是否向右滾動。","Camera is scrolling right":"相機正在向右滾動","Draw a rectangle that shows where edge scrolling will be triggered.":"繪製一個矩形以顯示觸發邊緣滾動的位置。","Draw edge scrolling screen margin":"繪製邊緣滾動屏幕邊距","Draw edge scrolling screen margin with _PARAM1_":"使用_PARAM1_繪製邊緣滾動屏幕邊距","Return the speed the camera is currently scrolling in horizontal direction (in pixels per second).":"返回相機當前水平方向滾動的速度(每秒像素數)。","Horizontal edge scroll speed":"水平邊滾動速度","Return the speed the camera is currently scrolling in vertical direction (in pixels per second).":"返回相機當前垂直方向滾動的速度(每秒像素數)。","Vertical edge scroll speed":"垂直邊滾動速度","Return the absolute scroll speed according to the mouse distance from the border.":"根據滑鼠距離邊緣的距離返回絕對滾動速度。","Absolute scroll speed":"絕對滾動速度","Border distance":"邊界距離","Ellipse movement":"橢圓運動","Move objects on ellipses or smoothly back and forth in one direction.":"在橢圓上移動物體,或沿一個方向平穩來回移動。","Radius of the movement on X axis":"X軸移動的半徑","Ellipse":"橢圓","Radius of the movement on Y axis":"Y軸移動的半徑","Loop duration":"循環持續時間","Turn left":"向左轉","Initial direction":"初始方向","Rotate":"旋轉","Change the turning direction (left or right).":"更改轉彎方向(左還是右)。","Turn the other way":"換彎另一邊","_PARAM0_ turn the other way":"_PARAM0_換彎另一邊","Change the in which side the object is turning (left or right).":"更改在物體轉彎的哪一側(左還是右)。","Turn left or right":"左或右轉彎","_PARAM0_ turn left: _PARAM2_":"_PARAM0_左轉:_PARAM2_","Check if the object is turning left.":"檢查物體是否向左轉彎。","Is turning left":"是否向左轉彎","_PARAM0_ is turning left":"_PARAM0_是否正在向左轉彎","Return the movement angle of the object.":"返回物體的運動角度。","Set initial Y of _PARAM0_ to _PARAM2_":"將_PARAM0_的初始Y設定為_PARAM2_","Return the loop duration (in seconds).":"返回迴圈持續時間(以秒為單位)。","Return the ellipse radius on X axis.":"返回X軸上的橢圓半徑。","Radius X":"半徑X","Radius Y":"半徑Y","Return the movement center position on X axis.":"返回X軸上的運動中心位置。","Movement center X":"運動中心X","Return the movement center position on Y axis.":"返回Y軸上的運動中心位置。","Movement center Y":"運動中心Y","Change the radius on X axis of the movement.":"更改運動的X軸半徑。","Change the radius on X axis of the movement of _PARAM0_ to _PARAM2_":"更改移動的 X 軸的半徑到 _PARAM2_ 的位置","Change the radius on Y axis of the movement.":"更改移動的 Y 軸的半徑。","Change the radius on Y axis of the movement of _PARAM0_ to _PARAM2_":"更改移動的 Y 軸的半徑到 _PARAM2_ 的位置","Change the loop duration.":"更改循環持續時間。","Change the loop duration of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的循環持續時間到 _PARAM2_ 的位置","Speed (in degrees per second)":"速度(以度/每秒計)","Change the movement angle. The object is teleported according to the angle.":"更改移動角度。對象按照角度進行傳送。","Teleport at an angle":"以一個角度進行傳送","Teleport _PARAM0_ on the ellipse at _PARAM2_°":"在 _PARAM0_ 上橢圓上以 _PARAM2_° 的位置進行傳送","Delta X":"Delta X","Delta Y":"Delta Y","Direction angle":"方向角度","Emojis":"表情符號","Display emoji characters in text objects and store them in strings.":"在文本對象中顯示表情符號並將它們存儲在字符串中。","Returns the specified emoji, from the provided name.":"從提供的名稱返回指定的表情符號。","Returns the specified emoji (name)":"返回指定的表情符號(名稱)","Name of emoji":"表情符號的名稱","Full list of emojis: [https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)":"完整的表情符號列表:[https://gist.github.com/rxaviers/7360908](https://gist.github.com/rxaviers/7360908)","Returns the specified emoji, from a hexadecimal value.":"從十六進位值返回指定的表情符號。","Returns the specified emoji (hex)":"返回指定的表情符號(十六進位)","Hexadecimal code":"十六進位代碼","Full list of hexadecimal code: [https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)":"完整的十六進位碼列表:[https://www.w3schools.com/charsets/ref_emoji.asp](https://www.w3schools.com/charsets/ref_emoji.asp)","Explosion force":"爆炸力","Simulate an explosion with physics forces on target objects.":"模擬對目標對象施加爆炸力學力。","Simulate explosion with physics forces":"使用物理力模擬爆炸","Simulate an explosion that affects _PARAM1_ within explosion radius: _PARAM6_ (pixels), Explosion center: _PARAM3_, _PARAM4_. Max force: _PARAM5_":"模擬在爆炸半徑內影響_PARAM1_ 的爆炸,爆炸中心: _PARAM3_, _PARAM4_。最大力: _PARAM5_","Target Object":"目標物件","Physics Behavior (required)":"物理行為(必填)","Explosion center (X)":"爆炸中心(X)","Explosion center (Y)":"爆炸中心(Y)","Max force (of explosion)":"最大爆炸力","Force decreases the farther an object is from the explosion center.":"距離爆炸中心物體越遠力量越小。","Max distance (from center of explosion) (pixels)":"爆炸中心的最大距離(像素)","Objects less than this distance will be affected by the explosion.":"距離小於這個距離的物體會受到爆炸的影響。","Extended math support":"擴展數學支持","Additional math functions and constants as expressions and conditions.":"附加數學函數和常數作為表達式和條件。","Returns a term from the Fibonacci sequence.":"從斐波那契數列中返回一個術語。","Fibonacci numbers":"斐波那契數","The desired term in the sequence":"數列中的所需術語","Calculates the steepness of a line between two points.":"計算兩個點之間線的斜率。","Slope":"坡度","X value of the first point":"第一個點的X值","Y value of the first point":"第一個點的Y值","X value of the second point":"第二個點的X值","Y value of the second point":"第二個點的Y值","Converts a number of one range e.g. 0-1 to another 0-255.":"將一個範圍內的數字(例如0-1)轉換為另一個範圍(0-255)。","Map":"映射","The value to convert":"要轉換的值","The lowest value of the first range":"第一個範圍的最小值","The highest value of the first range":"第一個範圍的最大值","The lowest value of the second range":"第二個範圍的最小值","The highest value of the second range":"第二個範圍的最大值","Returns the value of the length of the hypotenuse.":"返回直角三角形的斜邊長度值。","Hypotenuse length":"斜邊長度","First side of the triangle":"三角形的第一條邊","Second side of the triangle":"三角形的第二條邊","Returns the greatest common factor of two numbers.":"返回兩數的最大公因數。","Greatest common factor (gcf)":"最大公因數(gcf)","Any integer":"任何整數","Returns the lowest common multiple of two numbers.":"返回兩數的最小公倍數。","Lowest common multiple (lcm)":"最小公倍數(lcm)","Returns the input multiplied by all the previous whole numbers.":"返回輸入與前幾個整數相乘的結果。","Factorial":"階乘","Any positive integer":"任何正整數","Converts a polar coordinate into the Cartesian x value.":"將極坐標轉換為笛卡爾X值。","Polar coordinate to Cartesian X value":"極坐標轉為笛卡爾X值","Angle or theta in radians":"角度或弧度θ","Converts a polar coordinate into the Cartesian y value.":"將極坐標轉換為笛卡爾Y值。","Polar coordinate to Cartesian Y value":"極坐標轉為笛卡爾Y值","Converts a isometric coordinate into the Cartesian x value.":"將等距坐標轉換為Cartesian x值。","Isometric coordinate to Cartesian X value":"等距坐標到Cartesian X值","Position on the x axis":"x軸上的位置","Position on the y axis":"y軸上的位置","Converts a isometric coordinate into the Cartesian y value.":"將等距坐標轉換為Cartesian y值。","Isometric coordinate to Cartesian Y value":"等距坐標到Cartesian Y值","Returns the golden ratio.":"返回黃金比例。","Golden ratio":"黃金比例","Returns Pi (π).":"返回Pi(π)。","Pi (π)":"Pi(π)","Returns half Pi.":"返回一半的Pi。","Half Pi":"一半的Pi","Returns the natural logarithm of e. (Euler's number).":"返回e的自然對數。(歐拉數)。","Natural logarithm of e":"e的自然對數","Returns the natural logarithm of 2.":"返回2的自然對數。","Natural logarithm of 2":"2的自然對數","Returns the natural logarithm of 10.":"返回10的自然對數。","Natural logarithm of 10":"10的自然對數","Returns the base 2 logarithm of e. (Euler's number).":"返回e的底數2對數。(歐拉數)。","Base 2 logarithm of e":"e的底數2對數","Returns the base 10 logarithm of e. (Euler's number).":"返回e的底數10對數。(歐拉數)。","Base 10 logarithm of e":"e的底數10對數","Returns square root of 2.":"返回2的平方根。","Square root of 2":"2的平方根","Returns square root of 1/2.":"返回1/2的平方根。","Square root of 1/2":"1/2的平方根","Returns quarter Pi.":"返回四分之一的Pi。","Quarter Pi":"四分之一的Pi","Formats a number to use the specified number of decimal places (Deprecated).":"將數字格式化為指定小數位數(已棄用)。","ToFixed":"ToFixed","The value to be rounded":"要四捨五入的值","Number of decimal places":"小數位數","Formats a number to a string with the specified number of decimal places.":"將數字格式化為指定小數位數的字符串。","Check if the number is even (divisible by 2). To check for odd numbers, invert this condition.":"檢查數字是否為偶數(可被2整除)。要檢查奇數,請反轉此條件。","Is even?":"是偶數?","_PARAM1_ is even":"_PARAM1_是偶數","Extended variables support":"擴展變量支持","Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.":"添加條件、動作和表達式來檢查變量的存在,從內存中復制變量,刪除現有的變量並創建動態變量。","Check if a global variable exists.":"檢查全域變數是否存在。","Global variable exists":"全域變數存在","If the global variable _PARAM1_ exist":"如果全域變數_PARAM1_存在","Name of the global variable":"全域變數的名稱","Check if the global variable exists.":"檢查全域變數是否存在。","Check if a scene variable exists.":"檢查場景變數是否存在。","Scene variable exists":"場景變數存在","If the scene variable _PARAM1_ exist":"如果場景變數_PARAM1_存在","Name of the scene variable":"場景變數的名稱","Check if the scene variable exists.":"檢查場景變數是否存在。","Check if an object variable exists.":"檢查物件變數是否存在。","Object variable exists":"物件變數存在","Object _PARAM1_ has object variable _PARAM2_":"物件_PARAM1_具有物件變數_PARAM2_","Name of object variable":"物件變數的名稱","Delete a global variable, removing it from memory.":"刪除全域變數,從記憶體中將它移除。","Delete global variable":"刪除全域變數","Delete global variable _PARAM1_":"刪除全域變數_PARAM1_","Name of the global variable to delete":"要刪除的全域變數名稱","Delete the global variable, removing it from memory.":"刪除全域變數,從記憶體中將它移除。","Delete the global variable _PARAM1_ from memory":"從記憶體中刪除全域變數_PARAM1_","Modify the text of a scene variable.":"修改場景變數的文本。","String of a scene variable":"場景變數的字串","Change the text of scene variable _PARAM1_ to _PARAM2_":"更改場景變數_PARAM1_的文本為_PARAM2_","Modify the text of a global variable.":"修改全域變數的文本。","String of a global variable":"全域變數的字串","Change the text of global variable _PARAM1_ to _PARAM2_":"將全域變數_PARAM1_的文本更改為_PARAM2_","Modify the value of a global variable.":"修改全域變數的值。","Value of a global variable":"全域變數的值","Change the global variable _PARAM1_ with value: _PARAM2_":"使用值_PARAM2_更改全域變數_PARAM1_","Modify the value of a scene variable.":"修改場景變數的值。","Value of a scene variable":"場景變數的值","Change the scene variable _PARAM1_ with value: _PARAM2_":"使用值_PARAM2_更改場景變數_PARAM1_","Delete scene variable, the variable will be deleted from the memory.":"刪除場景變數,該變數將從記憶體中刪除。","Delete scene variable":"刪除場景變數","Delete the scene variable _PARAM1_":"刪除場景變數_PARAM1_","Name of the scene variable to delete":"要刪除的場景變數名稱","Delete the scene variable, the variable will be deleted from the memory.":"刪除場景變數,變數將從記憶體中刪除。","Delete the scene variable _PARAM1_ from memory":"從記憶體中刪除場景變數 _PARAM1_","Copy an object variable from one object to another.":"從一個對象複製一個對象變數到另一個對象。","Copy an object variable":"複製一個對象變數","Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_":"複製 _PARAM1_ 的變數 _PARAM2_ 到 _PARAM4_ 的變數 _PARAM3_","Source object":"源對象","Variable to copy":"要複製的變數","Destination object":"目標對象","To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.":"要在同一個對象的2個實例之間複製變數,變數必須首先復製到另一個對象。","Destination variable":"目標變數","Copy the object variable from one object to another.":"將物件變數從一個物件複製到另一個物件。","Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)":"將_PARAM1_的變數_PARAM2_複製到變數_PARAM3_的變數_PARAM4_(清空目的地:_PARAM5_)","Clear the destination variable before copying":"在複製之前清空目的地變數","Copy all object variables from one object to another.":"將一個物件的所有變數從一個物件複製到另一個物件。","Copy all object variables":"複製所有物件變數","Copy all variables from _PARAM1_ to _PARAM2_":"從_PARAM1_複製所有變數到_PARAM2_","Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)":"從物件_PARAM1_複製所有變數到物件_PARAM2_(清空目的地:_PARAM3_)","Delete an object variable, removing it from memory.":"刪除一個物件變數,從內存中將其移除。","Delete object variable":"刪除物件變數","Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory":"從內存中刪除物件_PARAM1_的物件變數_PARAM2_","Return the text of a global variable.":"返回全局變數的文本。","Text of a global variable":"全局變數的文本","Return the text of a scene variable.":"返回場景變數的文本。","Text of a scene variable":"場景變數的文本","Return the value of a global variable.":"返回全局變數的值。","Return the value of a scene variable.":"返回場景變數的值。","Copy the global variable to scene. This copy everything from the types to the values.":"將全局變數復制到場景。這會將所有內容從類型到值都複製。","Copy a global variable to scene":"將全局變數複製到場景","Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)":"將全局變數:_PARAM1_複製到場景變數:_PARAM2_(清空目的地:_PARAM3_)","Global variable to copy":"要複製的全局變數","Scene variable destination":"場景變數目的地","Copy the scene variable to global. This copy everything from the types to the values.":"將場景變數復制到全局。這會將所有內容從類型到值都複製。","Copy a scene variable to global":"將場景變數複製到全局","Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)":"將場景變數:_PARAM1_複製到全局變數:_PARAM2_(清空目的地:_PARAM3_)","Scene variable to copy":"要複製的場景變數","Global variable destination":"全局變數目的地","Frames per second (FPS)":"每秒幀數(FPS)","Calculate and display the frames per second (FPS) of the game.":"計算並顯示遊戲的幀速率(FPS)。","Frames per second (FPS) during the last second.":"上一秒的每秒幀數(FPS)。","Frames Per Second (FPS)":"每秒幀數(FPS)","Frames per second (FPS) during the last second. [Deprecated]":"上一秒的每秒幀數(FPS)。[已棄用]","Frames Per Second (FPS) [Deprecated]":"每秒幀數(FPS)[已棄用]","The accuracy of the FPS":"FPS的準確性","This tells how many numbers after the period should be shown.":"這個字段顯示小數點後應顯示的數字數。","Makes a text object display the current FPS.":"使文本對象顯示當前FPS。","FPS Displayer":"FPS Displayer","FPS counter prefix":"FPS計數器前綴","Number of decimal digits":"小數位數","Face Forward":"正面","Face object towards the direction of movement.":"將對象朝向運動方向。","Face forward":"向前看","Rotation speed (degrees per second)":"旋轉速度(每秒的度數)","Use \"0\" for immediate turning.":"使用“0”進行立即轉向。","Offset angle":"偏移角度","Can be used when the image of the object is not facing to the right.":"當對象的圖像未面向右邊時可以使用。","Previous X position":"上一個X位置","Previous Y position":"上一個Y位置","Direction the object is moving (in degrees)":"對象的移動方向(以度為單位)","Set rotation speed (degrees per second). Use \"0\" for immediate turning.":"設置旋轉速度(每秒度數)。 使用\"0\"進行立即轉向。","Set rotation speed":"設置旋轉速度","Set rotation speed of _PARAM0_ to _PARAM2_":"將 _PARAM0_ 的旋轉速度設置為 _PARAM2_","Rotation Speed":"旋轉速度","Set offset angle.":"設置偏移角度。","Set offset angle":"設置偏移角度","Set offset angle of _PARAM0_ to _PARAM2_":"將 _PARAM0_ 的偏移角度設置為 _PARAM2_","Rotation speed (in degrees per second).":"旋轉速度(每秒度數)。","Rotation speed":"旋轉速度","Rotation speed of _PARAM0_":"_PARAM0_ 的旋轉速度","Offset angle.":"偏移角度。","Direction the object is moving (in degrees).":"對象移動的方向(以度計)。","Movement direction":"移動方向","Fire bullets":"發射子彈","Fire bullets, manage ammo, reloading and overheating.":"發射子彈,管理彈藥,重新裝填和過熱。","Fire bullets with built-in cooldown, ammo, reloading, and overheating. Once added to your object that must shoot, use the behavior actions to fire another object as a bullet. These actions check all constraints internally (can be called without conditions, they will only fire when ready) and will make the bullet move (using a permanent force).":"發射具有內建冷卻、彈藥、重新裝填和過熱功能的子彈。一旦被添加到必須發射的物體中,使用行為動作發射另一個作為子彈的物體。這些動作會在內部檢查所有約束(可以在沒有條件的情況下調用,它們僅在準備好時發射)並使子彈移動(使用持久性力量)。","Firing cooldown":"射擊冷卻時間","Objects cannot shoot while firing cooldown is active.":"在射擊冷卻時間活動時,物體無法發射子彈。","Rotate bullets to match their trajectory":"將子彈旋轉以匹配它們的軌跡","Firing arc":"射擊弧","Multi-Fire bullets will be evenly spaced inside the firing arc":"多發射子彈將均勻間隔在射擊弧內","Multi-Fire":"多射擊","Number of bullets created at once":"一次創建的子彈數量","Angle variance":"角度變異","Make imperfect aim (between 0 and 180 degrees).":"製造不完美的瞄準(0至180度之間)。","Firing variance":"射擊變異","Bullet speed variance":"子彈速度變異","Bullet speed will be adjusted by a random value within this range.":"子彈速度將在此範圍內調整。","Ammo quantity (current)":"彈藥數量(目前)","Shots per reload":"每次重新加載的射擊數","Use 0 to disable reloading.":"使用0禁用重新加載。","Reload":"重新加載","Reloading duration":"重新加載持續時間","Objects cannot shoot while reloading is in progress.":"在重新加載進行時,物體無法發射子彈。","Max ammo":"最大彈藥","Ammo":"彈藥","Shots before next reload":"下次重新加載前的射擊次數","Total shots fired":"總射擊次數","Regardless of how many bullets are created, only 1 shot will be counted per frame":"無論創建了多少子彈,每幀只計算1發","Total bullets created":"創建的總子彈數","Starting ammo":"初始彈藥","Total reloads completed":"完成總重新加載","Unlimited ammo":"無限彈藥","Heat increase per shot (between 0 and 1)":"每次射擊的熱量增加(介於0和1之間)","Object is overheated when Heat reaches 1.":"當熱量達到1時,物體過熱。","Overheat":"過熱","Heat level (Range: 0 to 1)":"熱量水平(範圍:0至1)","Reload automatically":"自動重新加載","Overheat duration":"過熱持續時間","Object cannot shoot while overheat duration is active.":"當過熱持續時間有效時,物體無法射擊。","Linear cooling rate (per second)":"線性冷卻速率(每秒)","Exponential cooling rate (per second)":"指數冷卻速率(每秒)","Happens faster when heat is high and slower when heat is low.":"當熱量高時發生得更快,熱量低時發生得更慢。","Layer the bullets are created on":"創建子彈的層","Base layer by default.":"默認為基礎層。","Shooting configuration":"射擊配置","Fire bullets toward an object at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"以指定速度向物體發射子彈。持續調用此動作,動作在內部檢查準備情況——無需額外的計時器或檢查。","Fire bullets toward an object":"向對象開火","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward _PARAM5_ with speed _PARAM6_ px/s":"從 _PARAM0_ 發射 _PARAM4_(如果準備好),在位置 _PARAM2_;_PARAM3_,向 _PARAM5_ 以速度 _PARAM6_ 像素/秒。","X position, where to create the bullet":"要創建子彈的X位置","Y position, where to create the bullet":"要創建子彈的Y位置","The bullet object":"子弹对象","Target object":"目標對象","Speed of the bullet, in pixels per second":"子弹的速度,以像素每秒计","Fire bullets toward a position at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"以指定速度向某個位置發射子彈。持續調用此動作,動作在內部檢查準備情況——無需額外的計時器或檢查。","Fire bullets toward a position":"向某一位置发射子弹","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s":"從 _PARAM0_ 發射 _PARAM4_(如果準備好),在位置 _PARAM2_;_PARAM3_,向位置 _PARAM5_;_PARAM6_ 以速度 _PARAM7_ 像素/秒。","Fire bullets in the direction of a given angle at a specified speed. Call this continuously, the action checks readiness internally — no extra timer or check needed.":"以指定的速度向特定角度發射子彈。持續調用此操作,該操作會內部檢查準備狀態—不需要額外的計時器或檢查。","Fire bullets toward an angle":"朝特定角度发射子弹","Fire _PARAM4_ from _PARAM0_ (if ready), at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s":"從 _PARAM0_ 發射 _PARAM4_(如果已準備好),在位置 _PARAM2_;_PARAM3_,朝向角度 _PARAM5_ 和速度 _PARAM6_ px/s","Angle of the bullet, in degrees":"子弹的角度,以度为单位","Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.":"发射单颗子弹。这只能在“发射子弹”动作内使用。","Fire a single bullet":"发射单颗子弹","Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s":"從_PARAM0_位置,以位置_PARAM2_發射單顆飛行器;_PARAM3_,帶有角度_PARAM5_和速度_PARAM6_ px/s","Reload ammo.":"重新裝填彈藥。","Reload ammo":"重新装填弹药","Reload ammo on _PARAM0_":"重新裝填_PARAM0_的彈藥","Check if the object has just fired something.":"检查对象是否刚刚发射了某物。","Has just fired":"刚刚发射了","_PARAM0_ has just fired":"_PARAM0_剛剛發射了","Check if bullet rotates to match trajectory.":"检查子弹是否旋转以匹配弹道。","Is bullet rotation enabled":"启用子弹旋转","Bullet rotation enabled on _PARAM0_":"_PARAM0_的子彈旋轉已啟用","the firing arc (in degrees) where bullets are shot. Bullets are evenly spaced out inside the firing arc.":"子弹发射的弧度(以度为单位)。子弹在发射弧线内均匀分布。","the firing arc":"发射弧度","Firing arc (degrees) Range: 0 to 360":"发射弧度(角度)范围:0至360","Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.":"更改子弹发射的弧度(以度为单位)。子弹将在发射弧内均匀分布。","Set firing arc (deprecated)":"设置发射弧度(已弃用)","Set firing arc of _PARAM0_ to _PARAM2_ degrees":"將_PARAM0_的發射弧度設置為_PARAM2_度","the angle variance (in degrees) applied to each bullet.":"应用于每颗子弹的角度差异(以度为单位)。","the angle variance":"角度差异","Angle variance (degrees) Range: 0 to 180":"角度差异(度)范围:0至180","Change the angle variance (in degrees) applied to each bullet.":"更改應用於每顆子彈的角度差異(以度為單位)","Set angle variance (deprecated)":"设置角度差异(已弃用)","Set angle variance of _PARAM0_ to _PARAM2_ degrees":"將角度差異設置為_PARAM2_度","the bullet speed variance (pixels per second) applied to each bullet.":"應用於每顆子彈的子彈速度差異(每秒像素)。","the bullet speed variance":"子彈速度差異","Change the speed variance (pixels per second) applied to each bullet.":"更改應用於每顆子彈的速度差異(每秒像素)。","Set bullet speed variance (deprecated)":"設置子彈速度差異(已棄用)","Set bullet speed variance of _PARAM0_ to _PARAM2_ pixels per second":"將子彈速度差異設置為_PARAM2_像素每秒","the number of bullets shot every time the \"fire bullet\" action is used.":"每次使用“發射子彈”動作射擊的子彈數。","Bullets per shot":"每次射擊的子彈數","the number of bullets per shot":"每次射擊的子彈數","Bullets":"子彈","Change the number of bullets shot every time the \"fire bullet\" action is used.":"更改每次使用“發射子彈”動作射擊的子彈數。","Set number of bullets per shot (deprecated)":"設置每次射擊的子彈數(已棄用)","Set number of bullets per shot of _PARAM0_ to _PARAM2_":"將每次射擊的子彈數設置為_PARAM2_","Change the layer that bullets are created on.":"更改創建子彈的圖層。","Set bullet layer":"設置子彈圖層","Set the layer used to create bullets fired by _PARAM0_ to _PARAM2_":"將用於創建由_PARAM0_發射的子彈的圖層設置為_PARAM2_","Enable bullet rotation.":"啟用子彈旋轉。","Enable (or disable) bullet rotation":"啟用(或停用)子彈旋轉","Enable bullet rotation on _PARAM0_: _PARAM2_":"在_PARAM0_上啟用子彈旋轉: _PARAM2_","Rotate bullet to match trajetory":"旋轉子彈以匹配軌跡","Enable unlimited ammo.":"啟用無限子彈。","Enable (or disable) unlimited ammo":"啟用(或停用)無限子彈","Enable unlimited ammo on _PARAM0_: _PARAM2_":"在_PARAM0_上啟用無限子彈: _PARAM2_","the firing cooldown (in seconds) also known as rate of fire.":"射擊冷卻時間(秒),也稱為射速。","the firing cooldown":"射擊冷卻時間","Cooldown in seconds":"冷卻時間(秒)","Change the firing cooldown, which changes the rate of fire.":"更改射擊冷卻時間,這將改變射速。","Set firing cooldown (deprecated)":"設置射擊冷卻時間(已棄用)","Set the fire rate of _PARAM0_ to _PARAM2_ seconds":"將射速設置為_PARAM2_秒","the reload duration (in seconds).":"重新裝填持續時間(秒)。","Reload duration":"重新裝填持續時間","the reload duration":"重新裝填持續時間","Reload duration (seconds)":"重新裝填持續時間(秒)","Change the duration to reload ammo.":"更改裝填彈藥的持續時間。","Set reload duration (deprecated)":"設置重新加載持續時間(已棄用)","Set the reload duration of _PARAM0_ to _PARAM2_ seconds":"將_PARAM0_的重新加載持續時間設置為_PARAM2_秒","the overheat duration (in seconds). When an object is overheated, it can't fire for this duration.":"過熱持續時間(以秒為單位)。當對象過熱時,它在這段時間內無法進行射擊。","the overheat duration":"過熱持續時間","Overheat duration (seconds)":"過熱持續時間(秒)","Change the duration after becoming overheated.":"改變過熱後的持續時間。","Set overheat duration (deprecated)":"設置過熱持續時間(已棄用)","Set the overheat duration of _PARAM0_ to _PARAM2_ seconds":"將_PARAM0_的過熱持續時間設置為_PARAM2_秒","the ammo quantity.":"彈藥數量。","Ammo quantity":"彈藥數量","the ammo quantity":"彈藥數量","Change the quantity of ammo.":"更改彈藥數量。","Set ammo quantity (deprecated)":"設置彈藥數量(已棄用)","Set the ammo quantity of _PARAM0_ to _PARAM2_":"將_PARAM0_的彈藥數量設置為_PARAM2_","the heat increase per shot.":"每次射擊的熱量增加。","Heat increase per shot":"每次射擊的熱量增加","the heat increase per shot":"每次射擊的熱量增加","Heat increase per shot (Range: 0 to 1)":"每次射擊的熱量增加(範圍:0至1)","Change the heat increase per shot.":"更改每次射擊的熱量增加。","Set heat increase per shot (deprecated)":"設置每次射擊的熱量增加(已棄用)","Set the heat increase of _PARAM0_ to _PARAM2_ per shot":"將_PARAM0_的熱量增加設置為每次射擊_PARAM2_","the max ammo.":"最大彈藥。","the max ammo":"最大彈藥","Change the max ammo.":"更改最大彈藥。","Set max ammo (deprecated)":"設置最大彈藥(已棄用)","Set the max ammo of _PARAM0_ to _PARAM2_":"將_PARAM0_的最大彈藥設置為_PARAM2_","Reset total shots fired.":"重置發射的總次數。","Reset total shots fired":"重置發射的總次數","Reset total shots fired by _PARAM0_":"重置_PARAM0_發射的總次數","Reset total bullets created.":"重置的總子彈數。","Reset total bullets created":"重置的總子彈數","Reset total bullets created by _PARAM0_":"重置_PARAM0_創建的總子彈數","Reset total reloads completed.":"重置完成的總重新加載次數。","Reset total reloads completed":"重置完成的總重新加載次數","Reset total reloads completed by _PARAM0_":"重置_PARAM0_完成的總重新加載次數","the number of shots per reload.":"每次重新加載的子彈數。","the shots per reload":"每次裝彈的射擊數","Change the number of shots per reload.":"更改每次裝彈的射擊數。","Set shots per reload (deprecated)":"設置每次裝彈的射擊數(已棄用)","Set the shots per reload of _PARAM0_ to _PARAM2_":"將_PARAM0_的每次裝彈射擊數設置為_PARAM2_","Enable (or disable) automatic reloading.":"啟用(或禁用)自動裝彈。","Enable (or disable) automatic reloading":"啟用(或禁用)自動裝彈","Enable automatic reloading on _PARAM0_: _PARAM2_":"在_PARAM0_上啟用自動裝彈:_PARAM2_","Enable automatic reloading":"啟用自動裝彈","the linear cooling rate (per second).":"每秒的線性冷卻速度。","Linear cooling rate":"線性冷卻速率","the linear cooling rate":"線性冷卻速度","Heat cooling rate (per second)":"熱冷卻速率(每秒)","Change the linear rate of cooling.":"更改線性冷卻速率。","Set linear cooling rate (deprecated)":"設置線性冷卻速率(已棄用)","Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second":"設定_PARAM0_的線性冷卻速度為每秒_PARAM2_","the exponential cooling rate, per second.":"每秒的指數冷卻速率。","Exponential cooling rate":"指數冷卻速率","the exponential cooling rate":"指數冷卻速率","Change the exponential rate of cooling.":"修改指數冷卻速率。","Set exponential cooling rate (deprecated)":"設置指數冷卻速率(已棄用)","Set the exponential cooling rate of _PARAM0_ to _PARAM2_":"將_PARAM0_的指數冷卻速率設置為_PARAM2_","Increase ammo quantity.":"增加彈藥數量。","Increase ammo":"增加彈藥","Increase ammo of _PARAM0_ by _PARAM2_ shots":"_PARAM0_的彈藥增加_PARAM2_發子彈","Ammo gained":"獲得彈藥","Layer that bullets are created on.":"子彈創建的層。","Bullet layer":"子彈層","the heat level (range: 0 to 1).":"熱量水平(範圍:0至1)。","Heat level":"熱量水平","the heat level":"熱量水平","Total shots fired (multi-bullet shots are considered one shot).":"總發射數(多子彈發射被視為一發)。","Shots fired":"已發射的子彈","Total bullets created.":"已製作的總子彈。","Bullets created":"已創建子彈","Reloads completed.":"重新裝填完成。","Reloads completed":"重新裝填完成","the remaining shots before the next reload is required.":"在下一次重新裝填所需之前的剩餘射擊數。","the remaining shots (before the next reload)":"(下一次重新裝填之前的剩餘射擊數)","the remaining duration before the cooldown will permit a bullet to be fired, in seconds.":"在冷卻期間允許射擊的剩餘時間,以秒為單位。","Duration before cooldown end":"冷卻結束前的持續時間","the remaining duration before the cooldown end":"在冷卻結束之前的剩餘時間","the remaining duration before the overheat penalty ends, in seconds.":"在過熱懲罰結束之前的剩餘時間,以秒為單位。","Duration before overheat end":"過熱結束前的持續時間","the remaining duration before the overheat end":"在過熱結束之前的剩餘時間","the remaining duration before the reload finishes, in seconds.":"在重新裝填完成之前的剩餘時間,以秒為單位。","Duration before the reload finishes":"重新裝填完成前的持續時間","the remaining duration before the reload finishes":"在重新裝填完成之前的剩餘時間","Check if object is currently performing an ammo reload.":"檢查物件是否正在進行彈藥重新裝填。","Is ammo reloading in progress":"彈藥重新裝填是否正在進行","_PARAM0_ is reloading ammo":"_PARAM0_ 正在重新裝填彈藥","Check if object is ready to shoot.":"檢查物件是否準備好射擊。","Is ready to shoot":"準備好射擊","_PARAM0_ is ready to shoot":"_PARAM0_ 已準備好射擊","Check if automatic reloading is enabled.":"檢查是否啟用了自動重新裝填。","Is automatic reloading enabled":"自動重新裝填是否已啟用","Automatic reloading is enabled on_PARAM0_":"自動重新裝填已啟用於_PARAM0_","Check if ammo is unlimited.":"檢查彈藥是否為無限。","Is ammo unlimited":"彈藥是否為無限","_PARAM0_ has unlimited ammo":"_PARAM0_ 具有無限彈藥","Check if object has no ammo available.":"檢查物件是否沒有可用彈藥。","Is out of ammo":"沒有彈藥","_PARAM0_ is out of ammo":"_PARAM0_ 沒有彈藥","Check if object needs to reload ammo.":"檢查物件是否需要重新裝填彈藥。","Is a reload needed":"是否需要重新裝填","_PARAM0_ needs to reload ammo":"_PARAM0_ 需要重新裝填彈藥","Check if object is overheated.":"檢查物件是否過熱。","Is overheated":"是否過熱","_PARAM0_ is overheated":"_PARAM0_ 過熱了","Check if firing cooldown is active.":"檢查是否有開火冷卻時間。","Is firing cooldown active":"開火冷卻是否有效","Firing cooldown is active on _PARAM0_":"在_PARAM0_ 上開火冷卻有效","First person 3D camera":"第一人稱3D相機","Move the camera to look though objects eyes.":"將相機移動到凝視物體的位置。","Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"Move the camera to look though the object eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","Look through object eyes":"查看物體的視角","Move the camera of _PARAM2_ to look though _PARAM1_ eyes":"將_PARAM2_的相機移動到_PARAM1_的位置","Move the camera of _PARAM3_ to look though _PARAM1_ eyes":"Move the camera of _PARAM3_ to look though _PARAM1_ eyes","3D Object":"3D Object","Flash object":"閃光物體","Make an object flash visibility (blink), color tint, object effect, or opacity (fade).":"使一個物體閃爍可見性(閃爍)、顏色色調、物體效果或不透明度(淡入)。","Color tint applied to an object.":"應用於物體的顏色色調。","Color tint applied to an object":"應用於物體的顏色色調","Color tint applied to _PARAM1_":"_PARAM1_的顏色色調","Check if a color tint is applied to an object.":"檢查是否應用顏色色調於一個物體。","Is a color tint applied to an object":"是否應用顏色色調於一個物體","_PARAM1_ is color tinted":"_PARAM1_被塗上顏色色調","Toggle color tint between the starting tint and a given value.":"在初始色調和給定值之間切換顏色色調。","Toggle a color tint":"切換顏色色調","Toggle color tint _PARAM2_ on _PARAM1_":"在_PARAM1_上切換顏色色調_PARAM2_","Color tint":"顏色色調","Toggle object visibility.":"切換物體可見性。","Toggle object visibility":"切換物體可見性","Toggle visibility of _PARAM1_":"切換_PARAM1_的可見性","Make the object flash (blink) for a period of time so it alternates between visible and invisible.":"使物體閃爍(閃爍),在一段時間內交替可見和不可見。","Flash visibility (blink)":"閃爍可見性(閃爍)","Half period":"半周期","Time that the object is invisible":"物體不可見的時間","Flash duration":"閃爍持續時間","Use \"0\" to keep flashing until stopped":"使用 \"0\" 繼續閃爍,直到停止","Make an object flash (blink) visibility for a period of time.":"使物件閃爍(閃光)可見一段時間。","Make _PARAM0_ flash (blink) for _PARAM2_ seconds":"使_PARAM0_ 閃爍(閃光)持續_PARAM2_ 秒","Duration of the flashing, in seconds":"閃爍的持續時間,以秒為單位","Use \"0\" to keep flashing until stopped.":"使用 \"0\" 使其閃爍直到停止。","Check if an object is flashing visibility.":"檢查物件是否在閃爍可見性。","Is object flashing visibility":"物件是否在閃爍可見性","_PARAM0_ is flashing":"_PARAM0_ 在閃爍","Stop flashing visibility (blink) of an object.":"停止物件的閃爍可見性(閃光)。","Stop flashing visibility (blink)":"停止閃爍可見性(閃光)","Stop flashing visibility of _PARAM0_":"停止_PARAM0_ 的閃爍可見性","the half period of the object (time the object is invisible).":"物件的半週期(物件不可見的時間)。","the half period (time the object is invisible)":"半週期(物件不可見的時間)","Make an object flash a color tint for a period of time.":"使對象閃爍一段時間的顏色色調。","Flash color tint":"閃爍顏色色調","Time between flashes":"閃爍間隔時間","Tint color":"色調顏色","Flash a color tint":"閃爍顏色濾色","Make _PARAM0_ flash the color tint _PARAM3_ for _PARAM2_ seconds":"使_PARAM0_ 在_PARAM2_ 秒內閃爍顏色濾色_PARAM3_","Check if an object is flashing a color tint.":"檢查物件是否在閃爍顏色濾色。","Is object flashing a color tint":"物件是否在閃爍顏色濾色","_PARAM0_ is flashing a color tint":"_PARAM0_ 在閃爍顏色濾色","Stop flashing a color tint on an object.":"停止物件的閃爍顏色濾色。","Stop flashing color tint":"停止閃爍顏色濾色","Stop flashing color tint _PARAM0_":"停止閃爍顏色濾色_PARAM0_","the half period (time between flashes) of the object.":"物件的半週期(閃爍之間的時間)。","the half period (time between flashes)":"半週期(閃爍之間的時間)","Flash opacity smoothly (fade) in a repeating loop.":"平滑閃爍不透明度(淡入淡出)重複循環。","Flash opacity smothly (fade)":"平滑閃爍不透明度(淡入淡出)","Opacity capability":"不透明度能力","Tween Behavior (required)":"緩動行為(必需)","Target opacity (Range: 0 - 255)":"目標不透明度(範圍:0 - 255)","Opacity will fade between the starting value and a target value":"不透明度將在起始值和目標值之間淡入淡出","Starting opacity":"起始不透明度","Make an object flash opacity smoothly (fade) in a repeating loop.":"使物件閃爍不透明度平滑(淡入淡出)在循環中。","Flash the opacity (fade)":"閃爍不透明度(淡入淡出)","Make _PARAM0_ flash opacity smoothly to _PARAM4_ in a loop for _PARAM3_ seconds":"使_PARAM0_ 在循環中平滑閃爍不透明度至_PARAM4_ 在_PARAM3_ 秒內","Target opacity":"目標不透明度","Check if an object is flashing opacity.":"檢查物件是否在閃爍不透明度。","Is object flashing opacity":"物件是否在閃爍不透明度","_PARAM0_ is flashing opacity":"_PARAM0_ 在閃爍不透明度","Stop flashing opacity of an object.":"停止物件的閃爍不透明度。","Stop flashing opacity":"停止閃爍不透明度","Stop flashing opacity of _PARAM0_":"停止_PARAM0_ 的閃爍不透明度","Make the object flash an effect for a period of time.":"使對象閃爍一段時間的效果。","Flash effect":"閃爍效果","Name of effect":"效果名稱","Make an object flash an effect for a period of time.":"使物件閃爍一個效果一段時間。","Flash an effect":"閃爍一個效果","Make _PARAM0_ flash the effect _PARAM3_ for _PARAM2_ seconds":"使_PARAM0_ 在_PARAM2_ 秒內閃爍效果_PARAM3_","Check if an object is flashing an effect.":"檢查物件是否在閃爍一個效果。","Is object flashing an effect":"物件是否在閃爍一個效果","_PARAM0_ is flashing an effect":"_PARAM0_ 在閃爍一個效果","Stop flashing an effect of an object.":"停止物件的閃爍效果。","Stop flashing an effect":"停止閃爍效果","Stop flashing an effect on _PARAM0_":"停止_PARAM0_ 的閃爍效果","Toggle an object effect.":"切換物件效果。","Toggle an object effect":"切換物件效果","Toggle effect _PARAM2_ on _PARAM0_":"在_PARAM0_ 上切換效果_PARAM2_","Effect name to toggle":"切換的效果名稱","Flash layer":"閃光層","Make a layer visible for a specified duration, and then hide the layer.":"使一個圖層可見一段指定的時間,然後隱藏該圖層。","Make layer _PARAM1_ visible for _PARAM2_ seconds":"使圖層 _PARAM1_ 在 _PARAM2_ 秒內可見","Flash and transition painter":"閃光和過渡繪圖器","Paint transition effects with a plain color.":"使用純色繪製過渡效果。","Paint all over the screen a color for a period of time.":"在一段時間內在屏幕上塗抹顏色。","Type of effect":"效果類型","Direction of transition":"過渡方向","The maximum of the opacity only for flash":"僅用於閃爍的不透明度最大值","Paint Effect.":"畫效果。","Paint Effect":"畫效果","Paint effect type _PARAM4_ of _PARAM0_ with direction _PARAM5_ and color _PARAM2_ for _PARAM3_ seconds":"以方向_PARAM5_ 和顏色_PARAM2_ 畫效果類型_PARAM4_ 的_PARAM0_,持續時間為_PARAM3_ 秒","Direction transition":"方向轉變","End opacity":"結束不透明度","Paint effect ended.":"畫效果已結束。","Paint effect ended":"畫效果已結束","When paint effect of _PARAM0_ ends":"當物件_PARAM0_ 的畫效果結束時","Follow multiple 2D objects with the camera":"用攝影機跟隨多個 2D 物件","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen.":"更改相機的縮放和位置,以使對象(或對象組)的所有實例都顯示在屏幕上。","Follow multiple objects with camera":"用相機跟隨多個對象","Move camera to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Max zoom: _PARAM4_. Move the camera at a speed of _PARAM5_":"移動相機以使 _PARAM1_ 的實例在屏幕上。水平和垂直各使用 _PARAM2_px_Margin。最大縮放:_PARAM4_。相机以 _PARAM5_ 的速度移動","Object (or Object group)":"對象(或對象組)","Extra space on sides of screen":"屏幕兩側的額外空間","Each side will include this buffer":"每側將包含此緩衝","Extra space on top and bottom of screen":"屏幕上下的額外空間","Maximum zoom level (Default: 1)":"最大縮放級別(默認值:1)","Limit how far the camera will zoom in":"限制相机縮放的範圍","Camera move speed (Range: 0 to 1) (Default: 0.05)":"相機移動速度(範圍:0 到 1)(默認:0.05)","Percent of distance to destination that will be travelled each frame (used by lerp function)":"目的地距離的百分比,每幀將被移動(由lerp函數使用)","Change the zoom and position of the camera to keep all instances of an object (or object group) on the screen. (Deprecated)":"更改相機的縮放和位置,以使對象(或對象組)的所有實例都在屏幕上。 (已棄用)","Follow multiple objects with camera (Deprecated)":"使用相机跟隨多個對象(已棄用)","Move camera on layer _PARAM6_ to keep instances of _PARAM1_ on the screen. Use a margin of _PARAM2_px horizontally and _PARAM3_px vertically. Use a zoom between _PARAM4_ and _PARAM5_. Move the camera at a speed of _PARAM8_":"將相機移動到圖層_PARAM6_,以便保持屏幕上的_PARAM1_實例。水平和垂直的邊距分別為_PARAM2_px和_PARAM3_px。使用_PARAM4_和_PARAM5_之間的縮放。以_PARAM8_的速度移動相機。","Minimum zoom level":"最小縮放級別","Limit how far the camera will zoom OUT":"限制相機的最大縮放","Limit how far the camera will zoom IN":"限制相機的最小縮放","Use \"\" for base layer":"對基本圖層使用\"\"","Gamepads (controllers)":"遊戲手柄(控制器)","Add support for gamepads (or other controllers) to your game, giving access to information such as button presses, axis positions, trigger pressure, etc...":"為您的遊戲添加對遊戲手柄(或其他控制器)的支持,從而獲得按鈕按下、軸位置、扳機壓力等信息……","Accelerated speed":"加速速度","Current speed":"當前速度","Targeted speed":"目標速度","Deceleration":"減速","Get the value of the pressure on a gamepad trigger.":"獲取遊戲手柄扳機上的壓力值。","Pressure on a gamepad trigger":"遊戲手柄扳機上的壓力值","Player _PARAM1_ push axis _PARAM2_ to _PARAM3_":"玩家_PARAM1_按軸_PARAM2_到_PARAM3_","The gamepad identifier: 1, 2, 3 or 4":"手柄識別號:1、2、3或4","Trigger button":"觸發按鈕","the force of gamepad stick (from 0 to 1).":"遊戲手柄搖桿的力量(從0到1)。","Stick force":"搖桿力量","the gamepad _PARAM1_ _PARAM2_ stick force":"Gamepad _PARAM1_的_PARAM2_搖桿力量","Stick: \"Left\" or \"Right\"":"搖桿:“左”或“右”","Get the rotation value of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"獲取遊戲手柄搖桿的旋轉值。\n如果死區值很高,角度值將被四捨五入到主軸:左,左,上下。\n零死區值將使角度值完全自由。","Value of a stick rotation (deprecated)":"搖桿旋轉值(不建議使用)","Return the angle of a gamepad stick.\nIf the deadzone value is high, the angle value is rounded to main axes, left, left, up, down.\nAn zero deadzone value give a total freedom on the angle value.":"返回遊戲手柄搖桿的角度值。\n如果死區值很高,角度值將被四捨五入到主軸:左,左,上下。\n零死區值將使角度值完全自由。","Stick angle":"搖桿角度","Get the value of axis of a gamepad stick.":"獲取遊戲手柄搖桿的X軸值。","Value of a gamepad axis (deprecated)":"遊戲手柄軸的值(不建議使用)","Direction":"方向","Return the gamepad stick force on X axis (from -1 at the left to 1 at the right).":"返回遊戲手柄搖桿X軸力量(從-1到1)。","Stick X force":"X 力道","Return the gamepad stick force on Y axis (from -1 at the top to 1 at the bottom).":"在 Y 軸上返回遊戲手柄搖桿力量(從頂部的 -1 到底部的 1)。","Stick Y force":"Y 力道","Test if a button is released on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"測試在遊戲手柄上按鈕是否釋放。按鈕可以是:\n* Xbox:\"A\",\"B\",\"X\",\"Y\",\"LB\",\"RB\",\"LT\",\"RT\",\"BACK\",\"START\",\n* PS4:\"CROSS\",\"SQUARE\",\"CIRCLE\",\"TRIANGLE\",\"L1\",\"L2\",\"R1\",\"R2\",\"SHARE\",\"OPTIONS\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\",\n* 其他:\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\"。","Gamepad button released":"遊戲手柄按鈕釋放","Button _PARAM2_ of gamepad _PARAM1_ is released":"_PARAM1_ 的遊戲手柄按鈕 _PARAM2_ 已釋放","Name of the button":"按鈕的名稱","Check if a button was just pressed on a gamepad. Buttons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"檢查遊戲手把是否剛按下了一個按鈕。按鈕可以是:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* 其他: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".","Gamepad button just pressed":"遊戲手把按鈕剛被按下","Button _PARAM2_ of gamepad _PARAM1_ was just pressed":"遊戲手把 _PARAM1_ 的按鈕 _PARAM2_ 剛被按下","Return the index of the last pressed button of a gamepad.":"返回遊戲手柄的最後壓下按鈕的索引。","Last pressed button (id)":"最後按壓的按鈕(ID)","Check if any button is pressed on a gamepad.":"檢查遊戲手柄上是否有按鈕被按下。","Any gamepad button pressed":"任何遊戲手柄按鈕被按下","Any button of gamepad _PARAM1_ is pressed":"被按下的 _PARAM1_ 遊戲手柄按鈕","Return the last button pressed. \nButtons for Xbox and PS4 can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Both: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"返回最後按壓的按鈕。\nXbox 和 PS4 上的按鈕可以是:\n* Xbox:\"A\",\"B\",\"X\",\"Y\",\"LB\",\"RB\",\"LT\",\"RT\",\"BACK\",\"START\",\n* PS4:\"CROSS\",\"SQUARE\",\"CIRCLE\",\"TRIANGLE\",\"L1\",\"L2\",\"R1\",\"R2\",\"SHARE\",\"OPTIONS\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\",\n* 二者都有:\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\"","Last pressed button (string)":"最後壓下的按鈕(字符串)","Button _PARAM2_ of gamepad _PARAM1_ is pressed":"_PARAM1_ 的按鈕 _PARAM2_ 被按下","Controller type":"控制器類型","Return the number of gamepads.":"返回遊戲手柄的數量。","Gamepad count":"遊戲手柄數量","Check if a button is pressed on a gamepad. \nButtons can be:\n* Xbox: \"A\", \"B\", \"X\", \"Y\", \"LB\", \"RB\", \"LT\", \"RT\", \"BACK\", \"START\",\n* PS4: \"CROSS\", \"SQUARE\", \"CIRCLE\", \"TRIANGLE\", \"L1\", \"L2\", \"R1\", \"R2\", \"SHARE\", \"OPTIONS\", \"PS_BUTTON\", \"CLICK_TOUCHPAD\",\n* Other: \"UP\", \"DOWN\", \"LEFT\", \"RIGHT\", \"CLICK_STICK_LEFT\", \"CLICK_STICK_RIGHT\".":"檢查遊戲手柄上的按鈕是否被按下。\n按鈕可以是:\n* Xbox:\"A\",\"B\",\"X\",\"Y\",\"LB\",\"RB\",\"LT\",\"RT\",\"BACK\",\"START\",\n* PS4:\"CROSS\",\"SQUARE\",\"CIRCLE\",\"TRIANGLE\",\"L1\",\"L2\",\"R1\",\"R2\",\"SHARE\",\"OPTIONS\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\",\n* 其他:\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\"","Gamepad button pressed":"遊戲手柄按鈕被按下","Return the value of the deadzone applied to a gamepad sticks, between 0 and 1.":"返回應用到遊戲手柄搖桿的死區值,介於 0 和 1 之間。","Gamepad deadzone for sticks":"遊戲手把搖桿死區","Set the deadzone for sticks of the gamepad. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved). Deadzone is between 0 and 1, and is by default 0.2.":"設置遊戲手把搖桿的死區。 死區是一個區域,在這個區域內搖桿的運動不會被考慮在內(相反,搖桿將被視為未移動)。 死區的範圍在“0”和“1”之間,默認為“0.2”。","Set gamepad deadzone for sticks":"設置遊戲手把搖桿的死區","Set deadzone for sticks on gamepad: _PARAM1_ to _PARAM2_":"設置手柄上搖桿的死區:從_PARAM1_到_PARAM2_","Deadzone for sticks, 0.2 by default (0 to 1)":"搖桿死區,默認為0.2(0到1)","Check if a stick of a gamepad is pushed in a given direction.":"檢查遊戲手把的搖桿是否向特定方向推動。","Gamepad stick pushed (axis)":"遊戲手把搖桿被按下(軸)","_PARAM2_ stick of gamepad _PARAM1_ is pushed in direction _PARAM3_":"_PARAM2_手柄的_PARAM1_搖桿朝向_PARAM3_被按下","Return the number of connected gamepads.":"返回連接的遊戲手柄數量。","Connected gamepads count":"已連接的遊戲手把數量","Return a string containing informations about the specified gamepad.":"返回包含有關指定遊戲手柄的信息的字符串。","Gamepad type":"遊戲手把類型","Player _PARAM1_ use _PARAM2_ controller":"玩家_PARAM1_使用_PARAM2_控制器","Check if the specified gamepad has the specified information in its description. Useful to know if the gamepad is a Xbox or PS4 controller.":"檢查指定的遊戲手把是否具有其描述中的指定信息。 有助於知道遊戲手柄是否是Xbox或PS4控制器。","Gamepad _PARAM1_ is a _PARAM2_ controller":"遊戲手把_PARAM1_是一個_PARAM2_控制器","Type: \"Xbox\", \"PS4\", \"Steam\" or \"PS3\" (among other)":"類型:“Xbox”,“PS4”,“Steam”或“PS3”(還有其他)","Check if a gamepad is connected.":"檢查遊戲手把是否已連接。","Gamepad connected":"遊戲手把已連接","Gamepad _PARAM1_ is plugged and connected":"遊戲手把_PARAM1_已插上並連接","Generate a vibration on the specified controller. Might only work if the game is running in a recent web browser.":"在指定的控制器上生成振動。 只有在遊戲運行在最新的網絡瀏覽器中時可能有效。","Gamepad vibration":"遊戲手把震動","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds":"使遊戲手把_PARAM1_震動_PARAM2_秒","Time of the vibration, in seconds (optional, default value is 1)":"振動時間,以秒為單位(可選,默認值為1)","Generate an advanced vibration on the specified controller. Incompatible with Firefox.":"在指定的控制器上生成高級振動。 與Firefox不兼容。","Advanced gamepad vibration":"高級遊戲手把震動","Make gamepad _PARAM1_ vibrate for _PARAM2_ seconds with the vibration magnitude of _PARAM3_ and _PARAM4_":"使遊戲手把_PARAM1_震動_PARAM2_秒,振幅為_PARAM3_和_PARAM4_","Strong rumble magnitude (from 0 to 1)":"強震幅(0到1)","Weak rumble magnitude (from 0 to 1)":"弱震幅(0到1)","Change a vibration on the specified controller. Incompatible with Firefox.":"更改指定控制器上的振動。 与Firefox不兼容。","Change gamepad active vibration":"更改遊戲手柄的主動振動","Change the vibration magnitude of _PARAM2_ & _PARAM3_ on gamepad _PARAM1_":"更改手柄_PARAM1_上_PARAM2_和_PARAM3_的振動幅度","Check if any button is released on a gamepad.":"檢查遊戲手柄上是否釋放了任何按鈕。","Any gamepad button released":"釋放了任何遊戲手柄按鈕","Any button of gamepad _PARAM1_ is released":"手柄_PARAM1_的任何按鈕是否釋放","Return the strength of the weak vibration motor on the gamepad of a player.":"返回玩家遊戲手柄上弱振動馬達的強度。","Weak rumble magnitude":"微弱震動幅度","Return the strength of the strong vibration motor on the gamepad of a player.":"返回玩家遊戲手柄上強振動馬達的強度。","Strong rumble magnitude":"強震動幅度","Control a platformer character with a gamepad.":"用遊戲手柄控制平台遊戲角色。","Platformer gamepad mapper":"平台遊戲手柄映射","Gamepad identifier (1, 2, 3 or 4)":"手柄標識符(1、2、3或4)","Use directional pad":"使用方向鍵","Controls":"控制","Use left stick":"使用左搖桿","Use right stick":"使用右搖桿","Jump button":"跳躍按鈕","Control a 3D physics character with a gamepad.":"使用遊戲手柄控制3D物理角色。","3D platformer gamepad mapper":"3D平台遊戲手柄映射","Walk joystick":"步行搖桿","3D shooter gamepad mapper":"3D射擊遊戲手柄映射","Camera joystick":"攝像機搖桿","Control camera rotations with a gamepad.":"使用遊戲手柄控制攝像機旋轉。","First person camera gamepad mapper":"第一人稱攝像機遊戲手柄映射","Maximum rotation speed":"最大旋轉速度","Horizontal rotation":"水平旋轉","Rotation acceleration":"旋轉加速度","Rotation deceleration":"旋轉減速度","Vertical rotation":"垂直旋轉","Minimum angle":"最小角度","Maximum angle":"最大角度","Z position offset":"Z位置偏移","Position":"位置","Current rotation speed Z":"當前旋轉速度Z","Current rotation speed Y":"當前旋轉速度Y","Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.":"將相機移動到_PARAM1_的位置。當所有角度為0時,物體必須向右看,並且頭部的頂部朝向Z+。","Move the camera to look though _PARAM0_ eyes":"移動相機,讓它透過_PARAM0_ 的眼睛查看","the maximum horizontal rotation speed of the object.":"物件的最大水平旋轉速度。","Maximum horizontal rotation speed":"最大水平旋轉速度","the maximum horizontal rotation speed":"物件的最大水平旋轉速度","the horizontal rotation acceleration of the object.":"物件的水平旋轉加速度。","Horizontal rotation acceleration":"水平旋轉加速度","the horizontal rotation acceleration":"物件的水平旋轉加速度","the horizontal rotation deceleration of the object.":"物件的水平旋轉減速度。","Horizontal rotation deceleration":"水平旋轉減速度","the horizontal rotation deceleration":"物件的水平旋轉減速度","the maximum vertical rotation speed of the object.":"物件的最大垂直旋轉速度。","Maximum vertical rotation speed":"最大垂直旋轉速度","the maximum vertical rotation speed":"物件的最大垂直旋轉速度","the vertical rotation acceleration of the object.":"物件的垂直旋轉加速度。","Vertical rotation acceleration":"垂直旋轉加速度","the vertical rotation acceleration":"物件的垂直旋轉加速度","the vertical rotation deceleration of the object.":"物件的垂直旋轉減速度。","Vertical rotation deceleration":"垂直旋轉減速度","the vertical rotation deceleration":"物件的垂直旋轉減速度","the minimum vertical camera angle of the object.":"物件的最小垂直相機角度。","Minimum vertical camera angle":"最小垂直相機角度","the minimum vertical camera angle":"最小垂直相機角度","the maximum vertical camera angle of the object.":"物件的最大垂直相機角度。","Maximum vertical camera angle":"最大垂直相機角度","the maximum vertical camera angle":"最大垂直相機角度","the z position offset of the object.":"物件的z位置偏移。","the z position offset":"z位置偏移","Control a 3D physics car with a gamepad.":"Control a 3D physics car with a gamepad.","3D car gamepad mapper":"3D car gamepad mapper","3D physics car":"3D physics car","Hand brake button":"Hand brake button","Control a top-down character with a gamepad.":"使用搖桿控制一個自上而下的角色。","Top-down gamepad mapper":"自上而下搖桿映射","Top-down movement behavior":"自上而下移動行為","Stick mode":"搖桿模式","Hash":"哈希","Hash with MD5 or SHA256.":"使用MD5或SHA256的哈希。","Returns a Hash a MD5 based on a string.":"返回基於字符串的MD5哈希。","Hash a String with MD5":"使用MD5對字符串進行哈希","String to be hashed":"要進行哈希的字符串","Returns a Hash a SHA256 based on a string.":"返回基於字符串的SHA256哈希。","Hash a String with SHA256":"使用SHA256對字符串進行哈希","Health points and damage":"生命值和傷害","Manage health (life) points, shield and armor.":"管理生命(生命)值,護盾和護甲。","Health":"健康","Starting health":"初始血量","Current health (life) points":"當前血量(生命)","Maximum health":"最大血量","Use 0 for no maximum.":"使用0表示無上限。","Damage cooldown":"受損冷卻","Allow heals to increase health above max health (regen will never exceed max health)":"允許治療使血量超過最大血量(再生永遠不會超過最大血量)","Damage to health from the previous incoming damage":"來自先前受到的傷害的對健康的損傷","Chance to dodge incoming damage (between 0 and 1)":"閃避接受的傷害的機會(在0和1之間)","When a damage is dodged, no damage is applied.":"當一個傷害被閃避時,不會有任何傷害被應用。","Health points gained from the previous heal":"來自先前治療獲得的健康點數","Rate of health regeneration (points per second)":"健康再生速率(每秒幾點)","Health regeneration":"健康再生","Health regeneration delay":"健康再生延遲","Delay before health regeneration starts after a hit.":"被擊中後健康再生開始前的延遲。","Current shield points":"當前護盾點數","Shield":"護盾","Maximum shield":"最大護盾","Leave 0 for unlimited.":"留下0表示無限制。","Duration of shield":"護盾的持續時間","Use 0 to make the shield permanent.":"使用0使護盾永久存在。","Rate of shield regeneration (points per second)":"護盾再生速率(每秒幾點)","Shield regeneration":"護盾再生","Block excess damage when shield is broken":"護盾破壞時阻擋多餘的傷害","Shield regeneration delay":"護盾再生延遲","Delay before shield regeneration starts after a hit.":"受到攻擊後護盾再生延遲。","Damage to shield from the previous incoming damage":"上一次受到的傷害對護盾的損傷","Flat damage reduction from armor":"從護甲獲得的固定傷害減免","Incoming damages are reduced by this value.":"受到傷害會依照這個數值進行減傷。","Armor":"護甲","Percentage damage reduction from armor (between 0 and 1)":"來自護甲的百分比傷害減免(介於0和1之間)","Apply damage to the object. Shield and armor can reduce this damage if enabled.":"對物件造成傷害。如果啟用,護盾和盔甲可以減少此傷害。","Apply damage to an object":"對物件造成傷害","Apply _PARAM2_ points of damage to _PARAM0_ (Damage can be reduced by Shield: _PARAM3_, Armor: _PARAM4_)":"對_PARAM0_造成_PARAM2_點傷害(護盾:_PARAM3_,盔甲:_PARAM4_可以減少傷害)","Points of damage":"傷害點數","Shield can reduce damage taken":"護盾可以減少所受的傷害","Armor can reduce damage taken":"盔甲可以減少所受的傷害","current health points of the object.":"物件的當前健康點數。","Health points":"健康點數","health points":"健康點數","Change the health points of the object. Will not trigger damage cooldown.":"更改物件的健康點數。將不會觸發傷害冷卻時間。","Change health points":"更改健康點數","Change the health of _PARAM0_ to _PARAM2_ points":"將_PARAM0_的健康更改為_PARAM2_點","New health value":"新的健康值","Change health points (deprecated)":"更改健康點數(不推薦使用)","Heal the object by increasing its health points.":"通過增加健康點數來治療物體。","Heal object":"治療物體","Heal _PARAM0_ with _PARAM2_ health points":"用 _PARAM2_ 點數治療 _PARAM0_","Points to heal (will be added to object health)":"要治療的點數(會添加到物體健康中)","the maximum health points of the object.":"物體的最大健康點數。","Maximum health points":"最大健康點數","the maximum health points":"最大健康點數","Change the object maximum health points.":"更改物體的最大健康點數。","Maximum health points (deprecated)":"最大健康點數(已棄用)","Change the maximum health of _PARAM0_ to _PARAM2_ points":"將 _PARAM0_ 的最大生命值更改為 _PARAM2_ 點","the rate of health regeneration (points per second).":"生命再生的速度(每秒點數)。","Rate of health regeneration":"生命再生的速率","the rate of health regeneration":"生命再生的速率","Rate of regen":"再生速度","Change the rate of health regeneration.":"更改生命再生的速率。","Rate of health regeneration (deprecated)":"生命再生的速率(已棄用)","Change the rate of health regen of _PARAM0_ to _PARAM2_ points per second":"將 _PARAM0_ 的生命再生速率更改為每秒 _PARAM2_ 點數","the duration of damage cooldown (seconds).":"傷害冷卻的持續時間(秒)。","the duration of damage cooldown":"傷害冷卻的持續時間","Duration of damage cooldown (seconds)":"傷害冷卻的持續時間(秒)","Change the duration of damage cooldown (seconds).":"更改傷害冷卻的持續時間(秒)。","Damage cooldown (deprecated)":"傷害冷卻(已棄用)","Change the duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds":"將 _PARAM0_ 的傷害冷卻持續時間更改為 _PARAM2_ 秒","the delay before health regeneration starts after last being hit (seconds).":"最後受到傷害後再生開始之前的延遲(秒)。","the health regeneration delay":"健康再生延遲","Delay (seconds)":"延遲(秒)","Change the delay before health regeneration starts after being hit.":"更改受到傷害後開始健康再生的延遲。","Health regeneration delay (deprecated)":"健康再生延遲(已棄用)","Change the health regeneration delay on _PARAM0_ to _PARAM2_ seconds":"將 _PARAM0_ 的健康再生延遲更改為 _PARAM2_ 秒","the chance to dodge incoming damage (range: 0 to 1).":"閃避即將來臨的傷害的機會(範圍:0到1)。","Dodge chance":"閃避機率","the chance to dodge incoming damage":"閃避即將來臨的傷害的機會","Chance to dodge (Range: 0 to 1)":"閃避機率(範圍:0到1)","Change the chance to dodge incoming damage.":"更改閃避即將來臨的傷害的機率。","Chance to dodge incoming damage (deprecated)":"閃避即將來臨的傷害的機率(已棄用)","Change the chance to dodge on _PARAM0_ to _PARAM2_":"將 _PARAM0_ 的閃避機率更改為 _PARAM2_","the flat damage reduction from the armor. Incoming damage is reduced by this value.":"護甲的平坦傷害減少。來自護甲的入侵傷害會減少這個值。","Armor flat damage reduction":"護甲平坦傷害減少","the armor flat damage reduction":"護甲平坦傷害減少","Flat reduction from armor":"護甲的平坦減少","Change the flat damage reduction from armor. Incoming damage is reduced by this value.":"更改護甲的平坦傷害減少。來自護甲的入侵傷害會減少這個值。","Flat damage reduction from armor (deprecated)":"護甲的平坦減少(已棄用)","Change the flat damage reduction from armor on _PARAM0_ to _PARAM2_ points":"將 _PARAM0_ 的護甲平坦減少改為 _PARAM2_ 點","the percent damage reduction from armor (range: 0 to 1).":"護甲的百分比傷害減少(範圍:0到1)。","Armor percent damage reduction":"護甲百分比傷害減少","the armor percent damage reduction":"護甲百分比傷害減少","Percent damage reduction from armor":"護甲的百分比傷害減少","Change the percent damage reduction from armor. Range: 0 to 1.":"更改護甲的百分比傷害減少。範圍:0到1。","Percent damage reduction from armor (deprecated)":"護甲的百分比傷害減少(已棄用)","Change the percent damage reduction from armor on _PARAM0_ to _PARAM2_":"將 _PARAM0_ 的護甲百分比傷害減少改為 _PARAM2_","Allow heals to increase health above max health. Regeneration will not exceed max health.":"允許治療超過最大健康。再生不會超過最大健康。","Allow over-healing":"允許過度治療","Allow over-healing on _PARAM0_: _PARAM2_":"允許 _PARAM0_ 的過度治療:_PARAM2_","Mark object as hit at least once.":"標記物體至少受到一次攻擊。","Mark object as hit at least once":"標記物體至少受到一次攻擊","Mark _PARAM0_ as hit at least once: _PARAM2_":"標記 _PARAM0_ 至少受到一次攻擊:_PARAM2_","Hit at least once":"至少被擊中一次","Mark object as just damaged.":"標記物體剛剛受到傷害。","Mark object as just damaged":"標記物體剛剛受到傷害","Mark _PARAM0_ as just damaged: _PARAM2_":"標記 _PARAM0_ 剛剛受到傷害:_PARAM2_","Just damaged":"剛受損","Trigger damage cooldown.":"觸發傷害冷卻。","Trigger damage cooldown":"觸發傷害冷卻","Trigger the damage cooldown on _PARAM0_":"觸發 _PARAM0_ 的傷害冷卻","Check if the object has been hit at least once.":"檢查物體是否至少受到一次攻擊。","Object has been hit at least once":"物體至少被擊中一次","_PARAM0_ has been hit at least once":"_PARAM0_ 至少受到一次攻擊","Check if health was just damaged previously in the events.":"檢查生命是否在事件中剛剛受損。","Is health just damaged":"生命剛剛受損","Health has just been damaged on _PARAM0_":"_PARAM0_ 的生命剛剛受損","Check if the object was just healed previously in the events.":"檢查物體在事件中是否剛剛被治療。","Is just healed":"剛剛被治療","_PARAM0_ has just been healed":"_PARAM0_ 剛剛被治療","Check if damage cooldown is active. Object and shield cannot be damaged while this is active.":"檢查傷害冷卻是否在活動中。當此功能啟用時,物體和護盾不能受傷。","Is damage cooldown active":"傷害冷卻是否處於活動狀態","Damage cooldown on _PARAM0_ is active":"_PARAM0_ 的傷害冷卻是活動的","the time before damage cooldown ends (seconds).":"傷害冷卻結束前的時間(秒)。","Time remaining in damage cooldown":"傷害冷卻的剩餘時間","the time before damage cooldown end":"傷害冷卻結束之前的時間","Check if the object is considered dead (no health points).":"檢查物體是否被認為是死者(沒有健康點)。","Is dead":"是否已死亡","_PARAM0_ is dead":"_PARAM0_ 已死","the time since last taken hit (seconds).":"最後受到傷害的時間(秒)。","Time since last hit":"自最後一次擊中以來的時間","the time since last taken hit on health":"自最後一次在健康上受到傷害的時間","the health damage taken from most recent hit.":"最近一次受到的傷害的健康量。","Health damage taken from most recent hit":"最近一次受到的健康損傷","the health damage taken from most recent hit":"最近一次受到的健康損傷","the maximum shield points of the object.":"物體的最大護盾點數。","Maximum shield points":"最大護盾點數","the maximum shield points":"最大護盾點數","Change the maximum shield points of the object.":"更改物體的最大護盾點數。","Maximum shield points (deprecated)":"最大護盾點數(已棄用)","Change the maximum shield of _PARAM0_ to _PARAM2_ points":"將 _PARAM0_ 的最大護盾更改為 _PARAM2_ 點","Change maximum shield points.":"更改最大護盾點數。","Max shield points (deprecated)":"最大護盾點數(已棄用)","Change the maximum shield points on _PARAM0_ to _PARAM2_ points":"將 _PARAM0_ 的最大護盾點數更改為 _PARAM2_ 點","Shield points":"護盾點數","the current shield points of the object.":"物體的當前護盾點數。","the shield points":"護盾點數","Change current shield points. Will not trigger damage cooldown.":"更改當前護盾點數。不會觸發傷害冷卻。","Shield points (deprecated)":"護盾點數(已棄用)","Change current shield points on _PARAM0_ to _PARAM2_ points":"將 _PARAM0_ 的當前護盾點數更改為 _PARAM2_ 點","the rate of shield regeneration (points per second).":"護盾再生的速率(每秒點數)。","Rate of shield regeneration":"護盾再生的速率","the rate of shield regeneration":"護盾再生的速率","Regeneration rate (points per second)":"再生速率(每秒點數)","Change rate of shield regeneration.":"更改護盾再生的速率。","Shield regeneration rate (deprecated)":"護盾再生速率(已棄用)","Change the shield regeneration rate of _PARAM0_ to _PARAM2_ points per second":"將 _PARAM0_ 的護盾再生速率改為每秒 _PARAM2_ 點","the delay before shield regeneration starts after being hit (seconds).":"受到傷害後開始護盾再生之前的延遲(秒)。","the shield regeneration delay":"護盾再生延遲","Regeneration delay (seconds)":"再生延遲(秒)","Change delay before shield regeneration starts after being hit.":"更改受到傷害後開始護盾再生的延遲。","Shield regeneration delay (deprecated)":"護盾再生延遲(已棄用)","Change the shield regeneration delay on _PARAM0_ to _PARAM2_ seconds":"將 _PARAM0_ 的護盾再生延遲更改為 _PARAM2_ 秒","the duration of the shield (seconds). A value of \"0\" means the shield is permanent.":"護盾的持續時間(秒)。值為\"0\"表示護盾是永久的。","the duration of the shield":"護盾的持續時間","Shield duration (seconds)":"護盾持續時間(秒)","Change duration of shield. Use \"0\" to make shield permanent.":"更改護盾的持續時間。使用\"0\"使護盾永久。","Duration of shield (deprecated)":"護盾的持續時間(已棄用)","Change the duration of shield on _PARAM0_ to _PARAM2_ seconds":"將 _PARAM0_ 的護盾持續時間更改為 _PARAM2_ 秒","Renew shield duration to it's full value.":"將護盾持續時間續期至其完整值。","Renew shield duration":"續期護盾持續時間","Renew the shield duration on _PARAM0_":"續期 _PARAM0_ 的護盾持續時間","Activate the shield by setting the shield points and renewing the shield duration (optional).":"通過設置護盾點數和續期護盾的持續時間(可選)來啟用護盾。","Activate shield":"啟用護盾","Activate the shield on _PARAM0_ with _PARAM2_ points (Renew shield duration: _PARAM3_)":"以 _PARAM2_ 點啟用 _PARAM0_ 上的護盾(續期護盾持續時間:_PARAM3_)","Enable (or disable) blocking excess damage when shield breaks.":"啟用(或停用)當護盾破壞時阻止過量傷害。","Block excess damage when shield breaks":"當護盾破壞時阻止過量傷害","Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_":"_PARAM0_ 上的護盾在破壞時阻止過量傷害:_PARAM2_","Block excess damage":"阻止過量傷害","Check if the shield was just damaged previously in the events.":"檢查護盾在事件中是否剛剛受到傷害。","Is shield just damaged":"護盾剛剛受損","Shield on _PARAM0_ has just been damaged":"_PARAM0_ 上的護盾剛剛受到傷害","Check if incoming damage was just dodged.":"檢查進來的傷害是否剛剛被閃避。","Damage was just dodged":"傷害剛剛被閃避","_PARAM0_ just dodged incoming damage":"_PARAM0_ 剛剛閃避即將來臨的傷害","Check if the shield is active (based on shield points and duration).":"檢查護盾是否活躍(基於護盾點數和持續時間)。","Is shield active":"護盾是否啟用","Shield on _PARAM0_ is active":"_PARAM0_ 的護盾已啟用","the time before the shield duration ends (seconds).":"護盾持續時間結束前的時間(秒)。","Time before shield duration ends":"護盾持續時間結束前的時間","the time before the shield duration end":"護盾持續時間結束前的時間","the shield damage taken from most recent hit.":"最近一次受到的護盾傷害。","Shield damage taken from most recent hit":"最近一次受到的護盾傷害","the shield damage taken from most recent hit":"最近一次受到的護盾傷害","the health points gained from previous heal.":"從上一次治療中獲得的生命值。","Health points gained from previous heal":"從上一次治療中獲得的生命值","the health points gained from previous heal":"從上一次治療中獲得的生命值","Hexagonal 2D grid":"六角形 2D 網格","Snap objects to an hexagonal grid.":"將對象捕捉到六角網格中。","Snap object to a virtual pointy topped hexagonal grid (this is not the grid used in the editor).":"將物件對齊至虛擬的尖頂六角格子網格(這不是編輯器中使用的網格)。","Snap objects to a virtual pointy topped hexagonal grid":"將物件對齊至虛擬的尖頂六角格子網格","Snap _PARAM1_ to a virtual pointy topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"使用寬度為_PARAM2_px,高度_PARAM3_px的儲存格與偏移位置(_PARAM4_; _PARAM5_)將_PARAM1_對齊至虛擬的尖頂六角格子網格。","Objects to snap to the virtual grid":"對齊至虛擬的網格的物件","Width of a cell of the virtual grid (in pixels)":"虛擬網格中的單元格寬度(以像素為單位)","Height of a cell of the virtual grid (in pixels)":"虛擬網格中的單元格高度(以像素為單位)","The actual row height will be 3/4 of this.":"實際的行高將為此值的3/4。","Offset on the X axis of the virtual grid (in pixels)":"虛擬網格中X軸的偏移量(以像素為單位)","Offset on the Y axis of the virtual grid (in pixels)":"虛擬網格中Y軸的偏移量(以像素為單位)","Odd rows are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"奇數列從半個儲存格的位置開始,使用「儲存格高度*3/4」的偏移量可以使其相反。","Snap object to a virtual flat topped hexagonal grid (this is not the grid used in the editor).":"將物件對齊至虛擬的扁頂六角格子網格(這不是編輯器中使用的網格)。","Snap objects to a virtual flat topped hexagonal grid":"將物件對齊至虛擬的扁頂六角格子網格","Snap _PARAM1_ to a virtual flat topped hexagonal grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"使用寬度為_PARAM2_px,高度_PARAM3_px的儲存格與偏移位置(_PARAM4_; _PARAM5_)將_PARAM1_對齊至虛擬的扁頂六角格子網格。","The actual column width will be 3/4 of this.":"實際的列寬將為此值的3/4。","Odd columns are shifted from half a cell, use a \"CellHeight * 3/4\" offset to make it the other way.":"奇數欄位從半個儲存格的位置開始,使用「儲存格高度*3/4」的偏移量可以使其相反。","Snap object to a virtual bubble grid (this is not the grid used in the editor).":"將物件對齊至虛擬的氣泡格子網格(這不是編輯器中使用的網格)。","Snap objects to a virtual bubble grid":"將物件對齊至虛擬的氣泡格子網格","Snap _PARAM1_ to a virtual bubble grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"使用寬度為_PARAM2_px,高度_PARAM3_px的儲存格與偏移位置(_PARAM4_; _PARAM5_)將_PARAM1_對齊至虛擬的氣泡格子網格。","The actual row height will be 7/8 of this.":"實際的行高將為此的 7/8。","Odd rows are shifted from half a cell, use a \"CellHeight * 7/8\" offset to make it the other way":"奇數行從半個單元格偏移,使用 \"CellHeight * 7/8\" 的偏移量。","Homing projectile":"追蹤導彈","Make a projectile object move towards a target object.":"使導彈對象朝向目標對象移動。","Lock projectile object to target object. (This is required for \"Move projectile towards target\").":"將投射物對象鎖定到目標對象。(這是“將投射物進行移動到目標”所需的)。","Lock projectile to target":"鎖定投射物到目標","Lock projectile _PARAM1_ to target _PARAM2_":"將投射物 _PARAM1_ 鎖定到目標 _PARAM2_","Projectile object":"投射物對象","Move physics projectile towards the object that it has been locked to. This action must be run every frame.":"將物理投射物朝著它被鎖定的對象移動。此動作必須在每幀運行。","Move physics projectile towards target":"將物理投射物朝著目標移動","Move physics projectile _PARAM1_ towards target _PARAM3_. Rotate speed: _PARAM4_ Initial speed: _PARAM5_ Acceleration: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"將物理投射物 _PARAM1_ 朝著目標 _PARAM3_。旋轉速度:_PARAM4_ 初始速度:_PARAM5_ 加速度:_PARAM6_ 最大壽命:_PARAM7_ 碰撞後刪除:_PARAM8_","Physics Behavior":"物理行為","Initial speed (pixels per second)":"初始速度(每秒像素)","Acceleration (speed increase per second)":"加速度(每秒速度增加)","Max lifetime (seconds)":"最大壽命(秒)","Projectile will be deleted after this value is reached.":"當達到此值時,投射物將被刪除。","Delete Projectile if it collides with Target:":"如果與目標發生碰撞,則刪除投射物:","Move projectile towards the object that it has been locked to. This action must be run every frame.":"將投射物朝著它被鎖定的對象移動。此動作必須在每幀運行。","Move projectile towards target":"將投射物朝著目標移動","Move projectile _PARAM1_ towards target _PARAM2_. Rotate speed: _PARAM3_ Initial speed: _PARAM4_ Acceleration: _PARAM5_ Max speed: _PARAM6_ Max Lifetime: _PARAM7_ Delete on collision: _PARAM8_":"將投射物 _PARAM1_ 朝著目標 _PARAM2_。旋轉速度:_PARAM3_ 初始速度:_PARAM4_ 加速度:_PARAM5_ 最大速度:_PARAM6_ 最大壽命:_PARAM7_ 碰撞後刪除:_PARAM8_","Idle object tracker":"閒置物件追蹤器","Check if an object has not moved (with some, customizable, tolerance) for a certain duration (1 second by default).":"檢查物件是否在一定時間內(默認為1秒)沒有移動(帶有一定的可定制容錯度)。","Check if an object has not moved (with some tolerance, 20 pixels by default) for a certain duration (1 second by default).":"檢查對象在一定時間內(默認為1秒)是否沒有移動(默認允許20像素的容差)。","Idle tracker":"空閒追踪器","Time, in seconds, before considering the object as idle":"在將對象視為空閒之前的時間(以秒為單位)","Distance, in pixels, allowed for the object to travel and still be considered idle":"像素距離,允許對象移動並且仍然被認為是空閒的","Check if the object has just moved from its last position (using the tolerance configured in the behavior).":"檢查物件是否剛從其最後位置移動(使用行為中配置的容差)。","Has just moved from last position":"剛從最後位置移動","_PARAM0_ has moved from its last position":"_PARAM0_ 已從其最後位置移動","Check if the object is idle: it has not moved from its last position (or within the tolerance) for the time configured in the behavior.":"檢查物件是否空閒:它自最後位置未移動(或在容差範圍內)達到行為中配置的時間。","Is idle (since enough time)":"空閒中(自足夠時間)","Iframe":"內嵌框架","Create or delete an iframe to embed websites.":"創建或刪除內嵌框架以嵌入網站。","Create a new Iframe to embed a website inside the game.":"創建一個新的iframe,將網站嵌入遊戲內。","Create an Iframe":"創建iframe","Create Iframe _PARAM1_ at position _PARAM5_:_PARAM6_, width: _PARAM3_, height: _PARAM4_, url: _PARAM2_":"在位置_PARAM5_:_PARAM6_創建iframe _PARAM1_,寬度:_PARAM3_,高度:_PARAM4_,url:_PARAM2_","Name (DOM id)":"名稱(DOM id)","Width":"寬度","Height":"高度","Show scrollbar":"顯示滾動條","Show border":"顯示邊框","Extra CSS styles (optional)":"附加CSS樣式(選填)","e.g: `\"border: 10px #f00 solid;\"`":"例如:`\"邊框:10px#f00實心;\"`","Delete the specified Iframe.":"刪除指定的Iframe。","Delete an Iframe":"刪除一個Iframe","Delete Iframe _PARAM1_":"刪除Iframe _PARAM1_","Mobile In-App Purchase (experimental)":"移動應用內購買(實驗性)","Add products to buy directly in your game (\"In-App Purchase\"), for games published on Android or iOS.":"在您的遊戲中直接添加要購買的產品(“應用內購買”),用於在Android或iOS上發布的遊戲。","Ads":"廣告","Register a Product of your store. This is required to do for all products you want to display or order from the app. \nMake sure you register them all and finalize registration before ordering a product.":"註冊商店中的產品。這是您想要從應用程序中顯示或訂購的所有產品都必須進行的註冊。確保您註冊它們並在訂購產品之前完成註冊。","Register a Product":"註冊產品","Register product _PARAM1_ as a _PARAM2_ (platform: _PARAM3_)":"將產品_PARAM1_註冊為_PARAM2_(平台:_PARAM3_)","The internal ID of the product":"產品的內部ID","Use the ID of the product you entered on the IAP provider (Google play, Apple store...)":"使用您在IAP提供商(Google play、Apple store...)上輸入的產品ID","The type of product":"產品類型","Which platform you're registering the product to":"您要將產品註冊到哪個平台","Finalize store registration. Do this after registering every product and before ordering or getting information about a product.":"完成商店註冊。在註冊每個產品之後,並在訂購或獲取有關產品的信息之前,請執行此操作。","Finalize registration":"完成註冊","Finalize store registration":"完成商店註冊","Opens the purchase menu to let the user buy a product.\nEnsure you use the condition to check if the store is ready and that the product ID has been registered and finalized before calling this action.":"打開購買選單以讓用戶購買產品。請確保在調用此操作之前使用條件檢查商店是否就緒,並且產品ID已註冊並完成註冊。","Order a product":"訂購產品","Order product _PARAM1_":"訂購產品_PARAM1_","The id of the product to buy":"要購買的產品ID","Get all the data about a product from the IAP provider and store it into a structure variable.\nCheck [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) for the exhaustive list of what can be retrieved from the product.":"從IAP提供商獲取有關產品的所有數據並將其存儲到結構變量中。查看[此頁](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md)以獲取可以從產品檢索的詳盡列表。","Load product data in a variable":"在變量中加載產品數據","Store data of _PARAM1_ in scene variable named _PARAM2_":"將_PARAM1_的數據存儲在名為_PARAM2_的場景變量中","The id or alias of the product to get info about":"要獲取信息的產品的ID或別名","The name of the scene variable to store the product data in":"存儲產品數據的場景變量的名稱","The variable will be a structure, see [this page](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) to know what child variables are accessible.":"該變量將是一個結構,參見[此頁](https://github.com/j3k0/cordova-plugin-purchase/blob/master/api/classes/CdvPurchase.Product.md) 以了解可以訪問哪些子變量。","When an event is triggered for a product (approved or finished), this sets a scene variable to true. \nYou can then compare the value of the variable in a condition, and have actions launched to react to the changes.\nUse with Trigger Once to avoid registering multiple watchers unnecessarily.\nApproved is triggered after the purchase is complete.\nFinished is triggered after you have marked the purchased as delivered (less useful).":"當產品觸發事件(已批准或完成),這將使場景變量設為 true。\n然後您可以對變量的值進行比較,並應用操作來響應變化。\n與一次觸發一起使用,以避免不必要地註冊多個監聽器。\n已批准在購買完成後觸發。\n完成在您標記購買已交付後觸發(不太有用)。","Update a variable when a product event is triggered":"當產品事件觸發時更新變量","Watch the event _PARAM3_ for product _PARAM1_ and set scene variable named _PARAM2_ to true when it happens":"監視產品_PARAM1_的事件_PARAM3_,當它發生時將場景變量命名為_PARAM2_設置為 true","The id of the product to watch":"要監視的產品的ID","The name of the scene variable to set to \"true\" when the event happens":"當事件發生時,設置為“true”的場景變量的名稱","The event to listen to":"要監聽的事件","Mark a purchase as delivered, after you delivered the rewards the user has paid for and saved it somewhere. If you don't do so, the user will get the money refunded as the purchase will be considered as incomplete, with the rewards not given.":"在您交付了用戶支付並保存的獎勵後,將購買標記為已交付。如果不這樣做,將會被視為未完成的購買,未給獎勵的情況下,用戶將獲得錢的退款。","Finalize a purchase":"完成購買","Mark purchase of _PARAM1_ as delivered":"標記_PARAM1_的購買為已交付","The id or alias of the product to finalize":"要完成的產品的ID或別名","Triggers after finalizing the registration. Products can then be retrieved and purchased (you can get data of a product like the price, you can use the action to order a product...).":"註冊完成後觸發。然後可以檢索並購買產品(可以獲取產品的數據,比如價格,還可以使用動作來訂購產品...)。","Store is ready":"商店準備就緒","Input Validation":"輸入驗證","Conditions and expressions to check, sanitize and manipulate strings.":"條件和表達式用於檢查,清理和操作字符串。","Check if the string is a valid phone number.":"檢查字符串是否是有效的電話號碼。","Check if a string is a valid phone number":"檢查字符串是否是有效的電話號碼","_PARAM1_ is a valid phone number":"_PARAM1_ 是一個有效的電話號碼","Phone number":"電話號碼","Check if the string is a valid URL.":"檢查字符串是否是有效的URL。","Check if a string is a valid URL":"檢查字符串是否是有效的URL","_PARAM1_ is a valid URL":"_PARAM1_ 是一個有效的URL","Check if the string is a valid email.":"檢查字符串是否是有效的電子郵件。","Check if a string is a valid email":"檢查字符串是否是有效的電子郵件","_PARAM1_ is a valid email":"_PARAM1_ 是一個有效的電子郵件","Email":"電子郵件","Check if the string represents a number (potentially with a minus sign and potentially with a decimal point).":"檢查字符串是否表示一個數字(有可能帶有負號並有可能帶有小數點)。","Check if a string represents a number":"檢查字符串是否表示一個數字","_PARAM1_ represents a number":"_PARAM1_ 表示一個數字","Number":"數字","Check if the string has only latin alphabet letters.":"檢查字符串是否只包含拉丁字母。","Check if a string has only latin alphabet letters":"檢查字符串是否僅包含拉丁字母","_PARAM1_ has only latin alphabet letters":"_PARAM1_僅包含拉丁字母","Letters":"字母","Returns the string without the first line.":"返回不包括第一行的字符串","Remove the first line":"刪除第一行","String to remove the first line from":"從中刪除第一行的字符串","Count the number of lines in a string.":"計算字符串中的行數","Count lines":"計算行數","The text to count lines from":"計算行數的文本","Replaces every new line character with a space.":"將每個新行字符替換為空格","Replace new lines by a space":"將新行替換為空格","The text to remove new lines from":"要從中刪除新行的文本","Remove any non-numerical and non A-Z characters.":"刪除任何非數字和非 A-Z 字符","Remove any non-numerical and non A-Z characters":"刪除任何非數字和非 A-Z 字符","The text to sanitize":"要進行消毒的文本","Internet Connectivity":"Internet Connectivity","Checks if the device running the game is connected to the internet.":"檢查運行遊戲的設備是否連接到互聯網。","Checks if the device is connected to the internet.":"檢查設備是否連接到互聯網","Is the device online?":"設備是否在線?","The device is online":"設備在線","Simple inventories":"簡單庫存","Manage inventory items.":"管理庫存物品。","Add an item in an inventory.":"在庫中添加一個項目","Add an item":"添加項目","Add a _PARAM2_ to inventory _PARAM1_":"向庫存_PARAM1_添加_PARAM2_","Inventory name":"庫存名稱","Item name":"項目名稱","Remove an item from an inventory.":"從庫存中移除一個項目","Remove an item":"移除一個項目","Remove a _PARAM2_ from inventory _PARAM1_":"從庫存_PARAM1_中移除_PARAM2_","the number of an item in an inventory.":"庫存中一個項目的數量。","Item count":"項目數量","the count of _PARAM2_ in _PARAM1_":"_PARAM1_中的_PARAM2_數量","Check if at least one of the specified items is in the inventory.":"檢查庫存中是否至少有一個指定的項目。","Has an item":"有一個項目","Inventory _PARAM1_ contains a _PARAM2_":"庫存_PARAM1_包含_PARAM2_","the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"可以在庫存中添加指定項目的最大數量。默認情況下,每個項目的允許數量為無限。","Item capacity":"項目容量","_PARAM2_ capacity in inventory _PARAM1_":"庫存_PARAM1_中的_PARAM2_容量","Check if a limited amount of an object is allowed by the inventory. Item capacity is unlimited by default.":"檢查庫存是否允許對象的有限量。默認情況下,項目容量為無限。","Limited item capacity":"具有限的物品容量","Allow a limited count of _PARAM2_ in inventory _PARAM1_":"在庫存_PARAM1_中允許_PARAM2_的有限計數","Allow a limited amount of an object to be in an inventory. Item capacity is unlimited by default.":"允許物品的有限數量存在於庫存中。默認情況下,物品容量是無限的。","Limit item capacity":"限制物品容量","Allow a limited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"在庫存_PARAM1_中允許_PARAM2_的有限計數:_PARAM3_","Limit the item capacity":"限制物品容量","Check if an item has reached its maximum number allowed in the inventory.":"檢查物品是否已達到在庫存中允許的最大數量。","Item full":"物品已滿","Inventory _PARAM1_ is full of _PARAM2_":"庫存_PARAM1_已滿_PARAM2_","Check if an item is equipped.":"檢查物品是否已裝備。","Item equipped":"已裝備物品","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM1_在庫存_PARAM2_中已裝備","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"將物品標記為已裝備。如果物品數量為0,它將不會被標記為已裝備。","Equip an item":"裝備物品","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"將_PARAM2_在庫存_PARAM1_中設為已裝備:_PARAM3_","Equip":"裝備","Save all the items of the inventory in a scene variable, so that it can be restored later.":"將庫存的所有物品保存在場景變量中,以便稍後可以恢復。","Save an inventory in a scene variable":"在場景變量中保存庫存","Save inventory _PARAM1_ in variable _PARAM2_":"在變量_PARAM2_中保存庫存_PARAM1_","Scene variable":"場景變量","Load the content of the inventory from a scene variable.":"從場景變量中加載庫存的內容。","Load an inventory from a scene variable":"從場景變量中加載庫存","Load inventory _PARAM1_ from variable _PARAM2_":"從變量_PARAM2_中加載庫存_PARAM1_","Object \"Is On Screen\" Detection":"對象\"在螢幕上\"檢測","This adds a condition to detect if an object is on screen based off its current layer.":"此條件添加了一個條件,用於檢測對象是否基於其當前圖層在屏幕上。","This behavior provides a condition to check if the object is located within the visible portion of its layer's camera. The condition also allows for specifying padding to the virtual screen border.\nNote that object visibility, such as being hidden or 0 opacity, is not considered (but you can use those existing conditions in addition to this behavior).":"此行為提供一個條件,檢查對象是否位於其圖層相機的可見部分內。條件還允許指定到虛擬屏幕邊界的填充。\n請注意,不考慮物件可見性,例如被隱藏或0不透明度,(但您可以在此行為之外同時使用現有的條件)。","Is on screen":"是否在螢幕上","Checks if an object position is within the viewport of its layer.":"檢查物件位置是否在其層的視口內。","_PARAM0_ is on screen (padded by _PARAM2_ pixels)":"_PARAM0_ 在螢幕上(邊界擴大 _PARAM2_ 像素)","Padding (in pixels)":"邊界填充(以像素為單位)","Number of pixels to pad the screen border. Zero by default. A negative value goes inside the screen, a positive value go outside.":"屏幕邊界的填充像素數量。默認為零。負值向內,正值向外。","Konami Code":"庫納米代碼","Allows to input the classic Konami Code (\"Up, Up, Down, Down, Left, Right, Left, Right, B, A\") into a scene for cheats and easter eggs.":"允許在場景中輸入經典庫納米代碼(\"上,上,下,下,左,右,左,右,B,A\")以進行作弊和彩蛋。","Checks if the Konami Code is correctly inputted.":"檢查Konami碼是否正確輸入。","Is Inputted":"已輸入","Konami Code is inputted with _PARAM0_":"使用 _PARAM0_ 輸入Konami碼","Language":"語言","Get the preferred language of the user, set on their browser or device.":"獲取用戶的首選語言,設置在他們的瀏覽器或設備上。","Returns a string representing the preferred language of the user.\nThe format represents the language first, and usually the country where it's used. For example: \"en\" (English), \"en-US\" (English as used in the United States), \"en-GB\" (United Kingdom English), \"es\" (Spanish), \"zh-CN\" (Chinese as used in China), etc.":"返回表示用戶首選語言的字符串。\n格式首先表示語言,通常是使用該語言的國家。例如:“en”(英語),“en-US”(美國使用的英語),“en-GB”(英國英語),“es”(西班牙語),“zh-CN”(中國使用的中文)等。","Game over dialog":"遊戲結束對話框","Display the score and let players choose what to do next.":"顯示分數並讓玩家選擇接下來的操作。","Return a formated time for a given timestamp":"返回給定時間戳的格式化時間","Format time":"格式化時間","Time":"時間","Format":"格式","To fixed":"固定","Pad start":"填充開始","Text":"文字","Target length":"目標長度","Pad string":"填充字串","Default player name":"預設玩家名稱","Leaderboard":"排行榜","Best score":"最佳分數","Score format":"分數格式","Prefix":"前綴","Suffix":"後綴","Round to decimal point":"四捨五入至小數點","Score label":"分數標籤","Best score label":"最佳分數標籤","the score.":"分數。","Score":"分數","the score":"分數","the best score of the object.":"該物件的最佳分數。","the best score":"最佳分數","Return the formated score.":"返回格式化的分數。","Format score":"格式化分數","the default player name.":"預設玩家名稱。","the default player name":"預設玩家名稱","the player name.":"玩家名稱。","Player name":"玩家名稱","the player name":"玩家名稱","Check if the restart button of the dialog is clicked.":"檢查對話框的重新開始按鈕是否被點擊。","Restart button clicked":"重新開始按鈕已點擊","Restart button of _PARAM0_ is clicked":"_PARAM0_ 的重新開始按鈕被點擊","Check if the next button of the dialog is clicked.":"檢查對話框的下一步按鈕是否被點擊。","Next button clicked":"下一步按鈕已點擊","Next button of _PARAM0_ is clicked":"_PARAM0_ 的下一步按鈕被點擊","Check if the back button of the dialog is clicked.":"檢查對話框的返回按鈕是否被點擊。","Back button clicked":"返回按鈕已點擊","Back button of _PARAM0_ is clicked":"_PARAM0_ 的返回按鈕被點擊","Check if the score has been sucessfully submitted by the dialog.":"檢查分數是否已通過對話框成功提交。","Score is submitted":"分數已提交","_PARAM0_ submitted a score":"_PARAM0_ 提交了一個分數","the leaderboard of the object.":"該物件的排行榜。","the leaderboard":"排行榜","the title of the object.":"該物件的標題。","Title":"標題","the title":"該標題","Fade in the decoration objects of the dialog.":"淡入對話框的裝飾物件。","Fade in decorations":"淡入裝飾","Fade in the decorations of _PARAM0_":"淡入 _PARAM0_ 的裝飾","Fade out the decoration objects of the dialog.":"淡出對話框的裝飾物件。","Fade out decorations":"淡出裝飾","Fade out the decorations of _PARAM0_":"淡出 _PARAM0_ 的裝飾","Check if the fade in animation of the decorations is finished.":"檢查裝飾的淡入動畫是否完成。","Decorations are faded in":"裝飾已淡入","Fade in animation of _PARAM0_ is finished":"_PARAM0_ 的淡入動畫已完成","Check if the fade out animation of the decorations is finished.":"檢查裝飾的淡出動畫是否完成。","Decorations are faded out":"裝飾已淡出","Fade out animation of _PARAM0_ is finished":"_PARAM0_ 的淡出動畫已完成","Linear Movement":"線性運動","Move objects on a straight line.":"沿直線移動物體。","Linear movement":"線性運動","Speed on X axis":"X軸速度","Speed on Y axis":"Y軸速度","the speed on X axis of the object.":"物體在 X 軸上的速度。","the speed on X axis":"X 軸上的速度","the speed on Y axis of the object.":"物體在 Y 軸上的速度。","the speed on Y axis":"Y 軸上的速度","Move objects ahead according to their angle.":"根據其角度移動物體。","Linear movement by angle":"根據角度的線性運動","Linked Objects Tools":"關聯對象工具","Conditions to use Linked Objects as a graph and a path finding movement behavior.":"條件使用關聯對象作為圖形和路徑查找運動行為。","Link to neighbors on a rectangular grid.":"鏈接到矩形網格上的鄰居。","Link to neighbors on a rectangular grid":"鏈接到矩形網格上的鄰居","Link _PARAM1_ and its neighbors _PARAM2_ on a rectangular grid with cell dimensions: _PARAM3_; _PARAM4_":"在矩形網格上俱樂部銷_ PARAM1 _及其鄰居_ PARAM2 _,單元格尺寸:_ PARAM3 _;_ PARAM4_","Neighbor":"鄰居","The 2 objects can't be the same.":"這兩個對象不能相同。","Cell width":"單元格寬度","Cell height":"細胞高度","Allows diagonals":"允許對角線","Link to neighbors on a hexagonal grid.":"鏈接到六角形網格上的鄰居。","Link to neighbors on a hexagonal grid":"在六角形網格上鏈接鄰居","Link _PARAM1_ and its neighbors _PARAM2_ on a hexagonal grid with cell dimensions: _PARAM3_; _PARAM4_":"在六角形網格上俱樂部銷_ PARAM1 _及其鄰居_ PARAM2 _,單元格尺寸:_ PARAM3 _;_ PARAM4_","Link to neighbors on an isometric grid.":"在等軸網格上鏈接鄰居","Link to neighbors on an isometric grid":"在等軸網格上鏈接鄰居","Link _PARAM1_ and its neighbors _PARAM2_ on an isometric grid with cell dimensions: _PARAM3_; _PARAM4_":"在等軸網格上俱樂部銷_PARAM1_及其鄰居_PARAM2_,單元格尺寸:_PARAM3_;_PARAM4_","Can reach through a given cost sum.":"可以通過給定的成本總和到達。","Can reach with links limited by cost":"可以限制成本的鏈接。","Take into account all \"_PARAM1_\" that can reach _PARAM2_ with initial value from the variable _PARAM3_ through at most a cost of: _PARAM4_ according to cost class: _PARAM5_ and at most _PARAM6_ links depth":"根據成本類別:_PARAM5_以及最多_PARAM6_個鏈接深度,考慮所有可以通過變量_PARAM3_的初始值到達_PARAM2_的所有\"_PARAM1_\",最多花費:_PARAM4_","Pick these objects...":"選擇這些對象...","if they can reach this object":"如果他們可以到達這個對象","Initial length variable":"初始長度變量","Start to 0 if left empty":"如果留空則為0","Maximum cost":"最大成本","Cost class":"成本類別","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost must be positive.":"留空以使一切都可以通過,成本=1。查看linktools_Cost的變量子,沒有子代表不可通過,成本必須是正數。","Maximum depth":"最大深度","Ignore first node cost":"無視第一節點成本","Can reach through a given number of links.":"可以通過給定數量的鏈接到達。","Can reach with links limited by length":"可以通過長度限制的鏈接到達","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through at most _PARAM3_ links according to cost class: _PARAM4_":"針對通過最多_PARAM3_條鏈路到達_PARAM2_的所有\"_PARAM1_\"進行考慮,根據成本類別:_PARAM4_","Maximum link length":"最大鏈路長度","Leave empty to make everything crossable with cost = 1. It looks in the variable children of linktools_Cost. No child means not crossable, the cost can be 0 or 1.":"留空以使成本=1的所有事物都可通過。它查找linktools_Cost的變量children。沒有子級表示不可通過,成本可以是0或1。","Can reach through links.":"通過鏈路到達。","Can reach":"可以到達","Take into account all \"_PARAM1_\" that can reach _PARAM2_ through links":"考慮所有透過鏈路可到達_PARAM2_的所有\"_PARAM1_\"","Cost sum.":"成本總和。","Cost sum":"成本總和","The object will move from one object instance to another according to how they are linked to one another to reach a targeted object.":"物件將根據它們相互鏈接以到達目標物件的方式從一個對象實例移動到另一個對象實例。","Link path finding":"鏈路路徑查找","Angle offset":"角度偏移","Is following a path":"正在跟蹤路徑","Next node index":"下一節點索引","Next node X":"下一節點X","Next node Y":"下一個節點 Y","Is at a node":"在節點","Next node angle":"下一個節點角度","Move the object to a position.":"將物件移動到一個位置。","Move to a position":"移動到一個位置","Move _PARAM0_ to _PARAM3_ passing by _PARAM2_ using cost class _PARAM4_":"將 _PARAM0_ 移動到 _PARAM3_ 經過 _PARAM2_ 使用成本類別 _PARAM4_","Crossable objects":"可穿越物體","Destination objects":"目的地物體","Check if the object position is the on a path node.":"檢查物件位置是否在路徑節點上。","_PARAM0_ is at a node":"_PARAM0_ 在節點上","Forget the path.":"忘記路徑。","Forget the path":"忘記路徑","_PARAM0_ forgets the path":"_PARAM0_ 忘記路徑","Set next node index":"設定下一個節點索引","Set next node index of _PARAM0_ to _PARAM2_":"將 _PARAM0_ 的下一個節點索引設置為 _PARAM2_","Node index":"節點索引","Check if the object is moving.":"檢查物件是否正在移動。","Is moving":"正在移動","_PARAM0_ is moving":"_PARAM0_ 正在移動","Check if a path has been found.":"檢查是否已找到路徑。","Path found":"路徑已找到","A path has been found for _PARAM0_":"為 _PARAM0_ 找到了路徑","Check if the destination was reached.":"檢查目的地是否已達。","Destination reached":"目的地已達","_PARAM0_ reached its destination":"_PARAM0_ 已到達其目的地","Speed of the object on the path.":"物件在路徑上的速度。","Get the number of waypoints on the path.":"獲取路徑上的路徑點數量。","Node count":"節點數量","Waypoint X position.":"路徑點X位置。","Node X":"節點X","Waypoint index":"路徑點索引","Node Y":"節點Y","Next waypoint index.":"下一個路徑點索引。","Next waypoint X position.":"下一個路徑點X位置。","Next waypoint Y position.":"下一個路徑點Y位置。","Destination X position.":"目的地X位置。","Destination Y position.":"目的地Y位置。","the acceleration of the object.":"物件的加速度。","the maximum speed of the object.":"物件的最大速度。","the maximum speed":"最大速度","the rotation speed of the object.":"物件的旋轉速度。","the rotation speed":"旋轉速度","the rotation offset applied when moving the object.":"移動物件時應用的旋轉偏移。","the rotation angle offset on the path":"路徑上的旋轉角度偏移","Check if the object is rotated when traveling on its path.":"檢查物件在沿其路徑移動時是否已旋轉。","Object rotated":"物件已旋轉","_PARAM0_ is rotated when traveling on its path":"_PARAM0_ 在沿其路徑旅行時已旋轉","Enable or disable rotation of the object on the path.":"啟用或禁用物件在路徑上的旋轉。","Rotate the object":"旋轉物體","Enable rotation of _PARAM0_ on the path: _PARAM2_":"啟用 _PARAM0_ 在路徑上的旋轉: _PARAM2_","MQTT Client (advanced)":"MQTT 客戶端(高級)","An MQTT client for GDevelop: allow connections to a MQTT server and send/receive messages.":"GDevelop 的 MQTT 客戶端:允許連接到 MQTT 服務器並發送/接收消息。","Triggers if the client is connected to an MQTT broker server.":"如果客戶端連接到 MQTT 代理伺服器,則觸發。","Is connected to a broker?":"連接到代理嗎?","Client connected to a broker":"客戶端連接到代理","Connects to an MQTT broker.":"連接到 MQTT 代理。","Connect to a broker":"連接到代理","Connect to MQTT broker _PARAM1_ with parameters _PARAM2_ (secure connection: _PARAM3_)":"使用 _PARAM2_ 參數連接到 MQTT 代理 _PARAM1_(安全連線:_PARAM3_)","Host port":"主機連接埠","Settings as JSON":"設定為 JSON","You can find the list of settings at [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client). \nAn example of valid configuration would be `\" \"clientId \": \"myUserName \" \"`.":"您可以在 [the MQTT.js docs](https://github.com/mqttjs/MQTT.js/#client) 找到設定清單。 \n一個有效設定範例為 `\" \"clientId \": \"myUserName \" `。","Use secure WebSockets?":"使用安全 WebSockets?","Disconnects from the current MQTT broker.":"與當前 MQTT 代理斷開連接。","Disconnect from broker":"與代理斷開連接","Disconnect from MQTT broker (force: _PARAM1_)":"從 MQTT 代理斷開連接(強制:_PARAM1_)","Force end the connection?":"強制結束連接?","By default, MQTT waits for pending messages or messages in the process of being sent to finish being sent before ending the connection. Use this to cancel any request and immediately shutdown the connection.":"預設情況下,MQTT 等候待處理的訊息或正在傳送訊息完成傳送後才會結束連接。使用此來取消任何請求並立即關閉連接。","Publishes a message on a topic.":"在主題上發布訊息。","Publish message":"發布訊息","Publish variable _PARAM1_ on topic _PARAM2_ (QoS: _PARAM3_)":"在主題 _PARAM2_ 上發布變數 _PARAM1_(QoS:_PARAM3_)","Text to publish":"要發布的文字","Topic to publish to":"要發布至的主題","The QoS":"服務品質(QoS)","See [this](https://github.com/mqttjs/MQTT.js#qos) for more details.":"更多詳情請參閱 [此](https://github.com/mqttjs/MQTT.js#qos)。","Should the message be retained?":"訊息是否應保留?","When a message is retained, it will be sent to every client that subscribe to the topic. Only one message can be retained per topic, if another retained message is sent it will overwrite the previous one. \nRead more [here](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages).":"當訊息被保留時,將發送給訂閱該主題的所有客戶端。每個主題只能保留一條訊息,如果發送另一條保留的訊息,將覆蓋先前的訊息。 \n在此[頁面](https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages/#retained-messages)閱讀更多。","Subcribe to a topic. All messages published on that topic will be received.":"訂閱一個主題。將收到該主題上發布的所有訊息。","Subscribe to a topic":"訂閱一個主題","Subscribe to topic _PARAM1_ with QoS at _PARAM2_ and dataloss _PARAM3_":"以_QoS_和數據丟失_PARAM3_訂閱主題_PARAM1_","The topic to subscribe to":"訂閱的主題","See https://github.com/mqttjs/MQTT.js#qos for more details":"參見https://github.com/mqttjs/MQTT.js#qos 以獲取更多細節","Is dataloss allowed?":"允許數據丟失嗎?","See https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode for more details":"參見https://wiki.gdevelop.io/gdevelop5/all-features/p2p#choosing_if_you_want_to_activate_data_loss_mode 以獲取更多細節","Unsubcribe from a topic. No more messages from this topic will be received.":"取消訂閱一個主題。將不再接收此主題的任何消息。","Unsubscribe from a topic":"取消訂閱一個主題","Unsubscribe from topic _PARAM1_":"取消訂閱主題_PARAM1_","Triggers whenever a message was received. Note that you first need to subcribe to a topic in order to get messages from it.":"每當收到消息時觸發。請注意,您需要首先訂閱主題才能收到來自它的消息。","On message":"收到消息時","Message received from topic _PARAM1_":"來自主題_PARAM1_的消息已收到","The topic to listen to":"要監聽的主題","Get the last received message of a topic.":"獲取主題的最後接收消息。","Get last message":"獲取最後消息","The topic to get the message from":"要從中獲得消息的主題","Gets the last error. Returns an empty string if there was no errors.":"獲取最後錯誤。如果沒有錯誤,則返回空字符串。","Get the last error":"獲取最後一個錯誤","Marching Squares (experimental)":"Marching Squares(實驗性)","Allow to build a \"scalar field\" and draw contour lines of it: useful for fog of wars, liquid effects, paint the ground, etc...":"允許構建“標量場”並繪製其等高線:用於迷霧效果、液體效果、地面繪製等非常有用。","Define the scalar field painter library JavaScript code.":"定義純量場繪製庫的JavaScript代碼。","Define scalar field painter library":"定義純量場繪製庫","Define the scalar field painter library JavaScript code":"定義純量場繪製庫的JavaScript代碼","Add to a Shape painter object and use the actions to draw a field. Useful for fog of wars, liquid effects (water, lava, blobs...).":"添加到形狀繪製器對象並使用操作來繪製一個字段。用於迷霧, 液體效果(水, 熔岩, 斑點…)。","Marching squares painter":"行進方格繪製器","Area left bound":"區域左界","Area top bound":"區域上界","Area right bound":"區域右界","Area bottom bound":"區域下界","Fill outside":"填充到外部","Contour threshold":"等高線閾值","Must only draw what is on the screen":"必須只繪製在螢幕上的內容","Extend behavior class":"擴展行為類別","Extend object instance prototype.":"擴展物件實例原型。","Extend object instance prototype":"擴展物件實例原型","Extend _PARAM0_ prototype":"擴展 _PARAM0_ 原型","Clear the field by setting every values to 0.":"通過將所有值設置為0來清除字段。","Clear the field":"清除字段","Clear the field of _PARAM0_":"清除 _PARAM0_ 的字段","Unfill an area of the field from a given location until a given height is reached.":"從給定位置, 直到達到給定高度, 清空一個區域。","Unfill area":"清空區域","Unfill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a minimum of _PARAM4_ with thickness: _PARAM5_":"從 x: _PARAM2_, y: _PARAM3_ 開始,將 _PARAM0_ 的字段清空到不低於 _PARAM4_ 的值,厚度為: _PARAM5_","Minimum height":"最小高度","Contour thickness":"輪廓厚度","Capping radius ratio":"封閉半徑比","Small values allow quicker process, but can result to tearing. Try values around 8.":"小值允許更快的處理,但可能導致撕裂。試試值約8。","Fill an area of the field from a given location until a given height is reached.":"從給定位置填充一個區域,直到達到給定高度。","Fill area":"填充區域","Fill the field of _PARAM0_ from x: _PARAM2_, y: _PARAM3_, to a maximum of _PARAM4_ with thickness: _PARAM5_":"從 x: _PARAM2_, y: _PARAM3_ 開始,將 _PARAM0_ 的字段填充到不高於 _PARAM4_ 的值,厚度為: _PARAM5_","Maximum height":"最大高度","Cap every value of the field to a range.":"限制字段的每個值在一定範圍內。","Clamp the field":"限制字段","Clamp the field of _PARAM0_ from: _PARAM2_ to: _PARAM3_":"將 _PARAM0_ 的字段限制在: _PARAM2_ 到: _PARAM3_","Minimum":"最小值","Maximum":"最大值","Apply an affine on the field values.":"在字段值上應用仿射變換。","Transform the field":"轉換字段","Transform the field of _PARAM0_ with a coefficient: _PARAM2_ and an offset: _PARAM3_":"用係數: _PARAM2_ 和偏移: _PARAM3_ 轉換 _PARAM0_ 的字段","Coefficient":"係數","Offset":"偏移","Add a hill to the field.":"向字段添加一個山丘。","Add a hill":"添加山丘","Add a hill to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, _PARAM4_, radius: _PARAM5_, opacity: _PARAM6_ using: _PARAM8_":"將山丘添加到 _PARAM0_ 的字段,中心: _PARAM2_, _PARAM3_, _PARAM4_, 半徑: _PARAM5_, 不透明度: _PARAM6_ 使用: _PARAM8_","The hill height at the center, a value of 1 or less means a flat hill.":"中心的山丘高度,值為1或更少表示平坦山丘。","The hill height is 1 at this radius.":"此半徑內的山丘高度為1。","Opacity":"不透明度","Set to 1 to apply the hill instantly or repeat this action with a lower value to make is progressive.":"設置為1以立即應用山丘,或使用較低的值重複此操作以使其漸進。","Operation":"操作","Add a disk to the field.":"向字段添加一個圓盤。","Add a disk":"添加圓盤","Add a disk to the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_ using: _PARAM6_":"將圓盤添加到 _PARAM0_ 的字段,中心: _PARAM2_, _PARAM3_, 半徑: _PARAM4_ 使用: _PARAM6_","The spike height is 1 at this radius.":"此半徑內的尖峰高度為1。","Mask a disk to the field.":"對字段進行遮罩。","Mask a disk":"遮罩圓盤","Mask a disk on the field of _PARAM0_ with center: _PARAM2_, _PARAM3_, radius: _PARAM4_":"對 _PARAM0_ 的字段進行圓盤遮罩,中心: _PARAM2_, _PARAM3_, 半徑: _PARAM4_","Add a line to the field.":"向字段添加一條線。","Add a line":"添加線","Add a line to the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_ using: _PARAM8_":"從 _PARAM2_ ; _PARAM3_ 到 _PARAM4_ ; _PARAM5_,以厚度: _PARAM6_ 使用: _PARAM8_ 向 _PARAM0_ 的字段添加一條線","X position of the start":"起始的X位置","Y position of the start":"起始的Y位置","X position of the end":"結束的X位置","Y position of the end":"結束的Y位置","Thickness":"厚度","Mask a line to the field.":"對字段進行遮罩。","Mask a line":"遮罩線","Mask a line on the field of _PARAM0_ from _PARAM2_ ; _PARAM3_ to _PARAM4_ ; _PARAM5_ with thickness: _PARAM6_":"對 _PARAM0_ 的字段進行線遮罩,從 _PARAM2_ ; _PARAM3_ 到 _PARAM4_ ; _PARAM5_,使用厚度: _PARAM6_","Apply a given operation on every value of the field using the value from the other field at the same position.":"對字段的每個值應用給定操作,使用來自同一位置的另一字段的值。","Merge a field":"合併一個字段","Merge _PARAM0_ with the field of _PARAM2_ using: _PARAM4_":"將 _PARAM0_ 與 _PARAM2_ 的字段合併,使用: _PARAM4_","Field object":"字段物件","Field behavior":"字段行為","Update the field hitboxes.":"更新字段的碰撞框。","Update hitboxes":"更新碰撞框","Update the field hitboxes of _PARAM0_":"更新 _PARAM0_ 的字段碰撞框","Draw the field contours.":"繪製字段的輪廓。","Draw the contours":"繪製輪廓","Draw the field contours of _PARAM0_":"繪製 _PARAM0_ 的場域輪廓","Change the width of the field cells.":"更改場域單元格的寬度。","Width of the cells":"單元格的寬度","Change the width of the field cells of _PARAM0_: _PARAM2_":"更改 _PARAM0_ 的場域單元格寬度:_PARAM2_","Change the height of the field cells.":"更改場域單元格的高度。","Height of the cells":"單元格的高度","Change the height of the field cells of _PARAM0_: _PARAM2_":"更改 _PARAM0_ 的場域單元格高度:_PARAM2_","Rebuild the field with the new dimensions.":"使用新尺寸重建場域。","Rebuild the field":"重建場域","Rebuild the field _PARAM0_":"重建場域 _PARAM0_","Fill outside or inside of the contours.":"填充輪廓的外部或內部。","Fill outside of the contours of _PARAM0_: _PARAM2_":"填充 _PARAM0_ 的輪廓外部:_PARAM2_","Fill outside?":"填充外部?","Change the contour threshold.":"更改輪廓閾值。","Change the contour threshold of _PARAM0_: _PARAM2_":"更改 _PARAM0_ 的輪廓閾值:_PARAM2_","Change the field area bounds.":"更改場域區域邊界。","Area bounds":"區域邊界","Change the field area bounds of _PARAM0_ left: _PARAM2_ top: _PARAM3_ right: _PARAM4_ bottom: _PARAM5_":"更改 _PARAM0_ 的場域區域邊界 左:_PARAM2_ 上:_PARAM3_ 右:_PARAM4_ 下:_PARAM5_","Left bound":"左邊界","Top bound":"上邊界","Right bound":"右邊界","Bottom bound":"下邊界","Area left bound of the field.":"場域的區域左邊界。","Area left":"區域左邊","Area top bound of the field.":"場域的區域上邊界。","Area top":"區域上邊","Area right bound of the field.":"場域的區域右邊界。","Area right":"區域右邊","Area bottom bound of the field.":"場域的區域下邊界。","Area bottom":"區域下邊","Width of the field cells.":"場域單元格的寬度。","Width of a cell":"單元格的寬度","Height of the field cells.":"場域單元格的高度。","Height of a cell":"單元格的高度","The number of cells on the x axis.":"x 軸上的單元格數量。","Dimension X":"維度 X","At _PARAM2_; _PARAM3_ the field value of _PARAM0_ is greater than _PARAM4_":"在 _PARAM2_; _PARAM3_ 的位置,_PARAM0_ 的場域值大於 _PARAM4_","The number of cells on the y axis.":"y 軸上的單元格數量。","Dimension Y":"維度 Y","The contour threshold.":"輪廓閾值。","The normal X coordinate at a given location.":"在給定位置的常態 X 坐標。","Normal X":"常態 X","X position of the point":"該點的 X 位置","Y position of the point":"該點的 Y 位置","The normal Y coordinate at a given location.":"在給定位置的常態 Y 坐標。","Normal Y":"常態 Y","The normal Z coordinate at a given location.":"在給定位置的常態 Z 坐標。","Normal Z":"常態 Z","Change the field value at a grid point.":"在網格點更改場域值。","Grid value":"網格值","Change the field value of _PARAM0_ at the grid point _PARAM2_; _PARAM3_ to _PARAM4_":"在網格點 _PARAM2_; _PARAM3_ 更改 _PARAM0_ 的場域值為 _PARAM4_","X grid index":"X 網格索引","Y grid index":"Y 網格索引","Field value":"場域值","The field value at a grid point.":"在網格點的場域值。","The field value at a given location.":"在給定位置的場域值。","Check if the contours are filled outside.":"檢查輪廓是否填充在外部。","The contours of _PARAM0_ are filled outside":"_PARAM0_ 的輪廓已填充在外部","Check if a field is greater than a given value.":"檢查場域是否大於給定值。","Check if a point is inside the contour.":"檢查某點是否在輪廓內部。","Point is inside":"點在內部","_PARAM2_; _PARAM3_ is inside _PARAM0_":"_PARAM2_; _PARAM3_ 在 _PARAM0_ 內部","Cursor object":"游標對象","Turn any object into a cursor.":"將任何對象轉換為游標。","Turn any object into a mouse cursor.":"將任何對象轉換為滑鼠指標。","Cursor":"游標","Mouse Pointer Lock":"滑鼠指針鎖定","This behavior removes the limit on the distance the mouse can move and hides the cursor.":"此行為消除了滑鼠移動距離的限制並隱藏了游標。","Lock the mouse pointer to hide it.":"鎖定滑鼠指標以隱藏它。","Request Pointer Lock":"請求指標鎖定","Unlocks the mouse pointer and show it.":"解鎖滑鼠指標並顯示它。","Exit pointer lock":"退出指標鎖定","Check if the mouse pointer is locked.":"檢查滑鼠指標是否被鎖定。","Pointer is locked":"指標已鎖定","The mouse pointer is locked":"滑鼠指標已鎖定","Check if the mouse pointer is actually locked.":"檢查滑鼠指標是否實際被鎖定。","Pointer is actually locked":"指標實際上是已鎖定的","The mouse pointer actually is locked":"滑鼠指標實際上是已鎖定的","Check if the mouse pointer lock is emulated.":"檢查滑鼠指標鎖定是否被模擬。","Pointer lock is emulated":"指標鎖定被模擬","The mouse pointer lock is emulated":"滑鼠指標鎖定被模擬","Check if the locked pointer is moving.":"檢查被鎖定的指標是否移動。","Locked pointer is moving":"被鎖定的指標正在移動","the movement of the locked pointer on the X axis.":"被鎖定的指標在X軸上的運動。","Pointer X movement":"指標X軸運動","the movement of the locked pointer on the X axis":"被鎖定指標在X軸上的運動","the movement of the pointer on the Y axis.":"指標在Y軸上的運動。","Pointer Y movement":"指標Y軸運動","the movement of the pointer on the Y axis":"指標在Y軸上的運動","Return the X position of a specific touch":"返回特定觸摸的X座標","Touch X position":"觸摸X座標","Touch identifier":"觸摸識別符","Return the Y position of a specific touch":"返回特定觸摸的Y座標","Touch Y position":"觸摸Y座標","the speed factor for touch movement.":"觸摸移動的速度因子。","Speed factor for touch movement":"觸摸移動速度因子","the speed factor for touch movement":"觸摸移動的速度因子","Control camera rotations with a mouse.":"使用鼠標控制相機旋轉。","First person camera mouse mapper":"第一人稱相機鼠標映射器","Horizontal rotation speed factor":"水平旋轉速度因子","Vertical rotation speed factor":"垂直旋轉速度因子","Lock the pointer on click":"點擊時鎖定指針","the horizontal rotation speed factor of the object.":"該物件的水平旋轉速度因子。","the horizontal rotation speed factor":"水平旋轉速度因子","the vertical rotation speed factor of the object.":"該物件的垂直旋轉速度因子。","the vertical rotation speed factor":"垂直旋轉速度因子","Multiplayer custom lobbies":"多玩家自訂大廳","Custom lobbies for built-in multiplayer.":"內建多玩家的自訂大廳。","Return project identifier.":"返回專案識別碼。","Project identifier":"專案識別碼","Return game version.":"返回遊戲版本。","Game version":"遊戲版本","Return true if game run in preview.":"如果遊戲正在預覽中則返回真。","Preview":"預覽","Define a shape painter as a mask of an object.":"將形狀繪製器定義為物體的遮罩。","Mask an object with a shape painter":"使用形狀繪製器遮罩物體","Mask _PARAM1_ with mask _PARAM2_":"使用遮罩_PARAM2_遮罩_PARAM1_","Object to mask":"遮罩物體","Shape painter to use as a mask":"用作遮罩的形狀繪製器","Loading.":"載入中。","Loading":"載入中","Customize the interface of multiplayer lobbies.\nJoining will only work if the \"join after game starts\" setting is enabled, as the game automatically starts after joining a lobby.":"自訂多人遊戲大廳的介面。\n只有在啟用「遊戲開始後加入」設置的情況下,加入才會有效,因為遊戲在加入大廳後會自動開始。","Update lobbies.":"更新大廳。","Update lobbies":"更新大廳","Update lobbies _PARAM0_":"更新大廳 _PARAM0_","Return last error.":"返回最後一個錯誤。","Last error":"最後錯誤","Custom lobby.":"自訂大廳。","Custom lobby":"自訂大廳","Set lobby name.":"設置大廳名稱。","Set lobby name":"設置大廳名稱","Set lobby name _PARAM0_: _PARAM1_":"設置大廳名稱 _PARAM0_: _PARAM1_","Lobby name":"大廳名稱","Set players in lobby count.":"設置大廳內玩家數量。","Set players in lobby count":"設置大廳內玩家數量","Set players in lobby count _PARAM0_, players in lobby: _PARAM1_, max players _PARAM2_":"設置大廳內玩家數 _PARAM0_,大廳內玩家: _PARAM1_,最大玩家 _PARAM2_","Players count in lobby":"大廳內玩家數","Maxum count players in lobby":"大廳內最大玩家數","Set lobby ID.":"設置大廳 ID。","Set lobby ID":"設置大廳 ID","Set lobby ID _PARAM0_: _PARAM1_":"設置大廳 ID _PARAM0_: _PARAM1_","Lobby ID":"大廳 ID","Return true if lobby is full.":"如果大廳滿了則返回真。","Is full":"已滿","Lobby _PARAM0_ is full":"大廳 _PARAM0_ 已滿","Activate interactions.":"啟用互動。","Activate interactions":"啟用互動","Activate interactions of _PARAM0_: _PARAM1_":"啟用 _PARAM0_ 的互動: _PARAM1_","Yes or no":"是或否","Noise generator":"噪聲生成器","Generate noise values for procedural generation.":"為程序生成生成噪聲值。","Generate a number between -1 and 1 from 1 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"從 1 維 simple 噪音中生成 -1 到 1 之間的數字。從擴展數學擴展中的“映射”表達式可以用於將值映射到任何選定的範圍。","1D noise":"1D 噪音","Generate a number between -1 and 1 from 2 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"從 2 維 simple 噪音中生成 -1 到 1 之間的數字。從擴展數學擴展中的“映射”表達式可以用於將值映射到任何選定的範圍。","Generate a number between -1 and 1 from 3 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"從 3 維 simple 噪音中生成 -1 到 1 之間的數字。從擴展數學擴展中的“映射”表達式可以用於將值映射到任何選定的範圍。","Generate a number between -1 and 1 from 4 dimensional simplex noise. The \"Map\" expression from Extended Math extension can be used to map values to any chosen bounds.":"從 4 維 simple 噪音中生成 -1 到 1 之間的數字。從擴展數學擴展中的“映射”表達式可以用於將值映射到任何選定的範圍。","Delete a noise generators and loose its settings.":"刪除噪聲發生器並丟失其設置。","2 dimensional Perlin noise (depecated, use Noise2d instead).":"2 維 Perlin 噪音(已作廢,請改用 Noise2d)。","Perlin 2D noise":"Perlin 2D 噪音","x value":"x值","y value":"y值","3 dimensional Perlin noise (depecated, use Noise3d instead).":"3 維 Perlin 噪音(已作廢,請改用 Noise3d)。","Perlin 3D noise":"Perlin 3D 噪音","z value":"z值","2 dimensional simplex noise (depecated, use Noise2d instead).":"2 維 simplex 噪音(已作廢,請改用 Noise2d)。","Simplex 2D noise":"Simplex 2D 噪音","3 dimensional simplex noise (depecated, use Noise3d instead).":"3 維 simplex 噪音(已作廢,請改用 Noise3d)。","Simplex 3D noise":"Simplex 3D 噪音","Object picking tools":"对象选择工具","Adds various object picking related tools.":"增加了各种相关对象的选取工具。","Unpicks all instances of an object.":"取消選取所有物件實例。","Unpick all instances":"取消選取所有實例","Unpick all instances of _PARAM1_":"取消選取所有_PARAM1_","The object to unpick all instances from":"取消選取所有實例的物件","Pick object instances that have the lowest Z-order.":"選擇最低Z-順序的物件實例。","Pick objects with lowest Z-order":"選擇最低Z-順序的物件","Pick _PARAM1_ with the lowest Z-order":"選擇擁有最低Z序的_PARAM1_","Object to select instances from":"從中選取物件實例","Pick object instances that have the highest Z-order.":"選擇最高Z-順序的物件實例。","Pick objects with highest Z-order":"選擇最高Z-順序的物件","Pick _PARAM1_ with the highest Z-order":"選擇擁有最高Z序的_PARAM1_","Pick object instances that have the lowest value of an object variable.":"選取物件實例的物件變數值最低者。","Pick objects with lowest variable value":"選取具有最低變數值的物件","Pick _PARAM1_ with the lowest value of variable _PARAM2_":"選取變數_PARAM2_的值最低的_PARAM1_","Object variable name":"物件變數名稱","Pick object instances that have the highest value of an object variable.":"選取物件實例的物件變數值最高者。","Pick objects with highest variable value":"選取具有最高變數值的物件","Pick _PARAM1_ with the highest value of variable _PARAM2_":"選取變數_PARAM2_的值最高的_PARAM1_","Picks the first instance out of a list of objects.":"選擇物件清單中的第一個實例。","Pick the first object (deprecated)":"選擇第一個物件(已棄用)","Pick the first _PARAM1_":"選擇第一個_PARAM1_","The object to select an instances from":"從中選取物件實例的物件","Picks the last instance out of a list of objects.":"選擇物件清單中的最後一個實例。","Pick the last object (deprecated)":"選擇最後一個物件(已棄用)","Pick the last _PARAM1_":"選擇最後一個_PARAM1_","Picks the Nth instance out of a list of objects.":"從中選取物件清單的第N個實例。","Pick the Nth object (deprecated)":"選擇第N個物件(已棄用)","Pick the _PARAM2_th _PARAM1_":"選取第_PARAM2_個_PARAM1_","The place in the objects lists an instance has to have to be picked":"選取實例必須具有的物件清單中的位置","Slice a 2D object into pieces":"將 2D 物件切成碎片","Slice an object into smaller pieces that match the color of original object.":"将对象切成与原始对象颜色相匹配的小片。","Slice an object into smaller pieces that match color of the original object. The new object should be a solid white color.":"將一個物件切成與原物件顏色相符的小塊。新物件應為純白色。","Slice object into smaller pieces":"將物件切成較小的塊","Cut _PARAM1_ into _PARAM3_ vertical strips and _PARAM4_ horizontal strips using _PARAM2_ for the new objects. Delete original object: _PARAM5_":"將_PARAM1_切成_VERTICAL_垂直條和_HORIZONTAL_水平條,使用_PARAM2_作為新物件。刪除原始物件:_PARAM5_","Object to be sliced":"準備切片的物件","Object used for sliced pieces":"用於切片的物件","Recommended: Use a sprite that is a single white pixel":"建議使用單個白像素的精靈","Vertical slices":"垂直切片","Horizontal slices":"水平切片","Delete original object":"刪除原始物件","Return the blue component of the pixel at the specified position.":"返回指定位置像素的藍色元件。","Read pixel blue":"讀取像素藍色","Return the green component of the pixel at the specified position.":"返回指定位置像素的綠色元件。","Read pixel green":"讀取像素綠色","Return the red component of the pixel at the specified position.":"返回指定位置像素的紅色元件。","Read pixel red":"讀取像素紅色","Object spawner 2D area":"2D 物件生成區域","Spawn (create) objects periodically.":"定期生成(创建)对象。","Object spawner":"物件生成器","Spawn period":"生成周期","Offset X (relative to position of spawner)":"X偏移(相對於生成點位置)","Offset Y (relative to position of spawner)":"Y偏移(相對於生成點位置)","Max objects in the scene (per spawner)":"場景中的最大物件數(每個生成點)","Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"限制由此生成點創建的場景中物件數量。將其設置為0以取消限制。","Spawner capacity":"生成點容量","Number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"可以由此生成點創建的物件數量。每次生成物件時這將會減少。","Unlimited capacity":"無限容量","Use random positions":"使用隨機位置","Objects will be created at a random position inside the spawner. Useful for making large spawner areas.":"物件將在生成點範圍內的隨機位置創建。適用於製作大型生成點區域。","Spawn (create) objects periodically. This action must be run every frame to work. When the max quantity is reached and an instance is deleted, the spawner waits the duration of the spawn period before creating another instance. Spawned objects are automatically linked to the spawner.":"定期生成(創建)物件。此操作必須在每幀中運行才能正常工作。當達到最大數量並刪除一個實例時,生成器需在生成持續時間後等待才能創建另一個實例。生成的物件會自動連結至生成器。","Spawn objects periodically":"定期生成物件","Periodically spawn (create) a _PARAM2_ located at spawner _PARAM0_":"定期生成位於生成器 _PARAM0_ 的 _PARAM2_","Object that will be created":"將被創建的物件","Change the offset X relative to the center of spawner (in pixels).":"更改相對於生成器中心的 X 偏移(以像素計算)。","Offset on X axis (deprecated)":"X 軸偏移(不建議使用)","Change the offset X of _PARAM0_ to _PARAM2_ pixels":"將 _PARAM0_ 的 X 偏移更改為 _PARAM2_ 像素","Change the offset Y relative to the center of spawner (in pixels).":"更改相對於生成器中心的 Y 偏移(以像素計算)。","Offset on Y axis (deprecated)":"Y 軸偏移(不建議使用)","Change the offset Y of _PARAM0_ to _PARAM2_ pixels":"將 _PARAM0_ 的 Y 偏移更改為 _PARAM2_ 像素","Change the spawn period (in seconds).":"更改生成週期(以秒計)。","Change the spawn period of _PARAM0_ to _PARAM2_ seconds":"將 _PARAM0_ 的生成週期更改為 _PARAM2_ 秒","Return the offset X relative to the center of spawner (in pixels).":"返回相對於生成器中心的 X 偏移(以像素計算)。","Offset X (deprecated)":"X 偏移(不建議使用)","Return the offset Y relative to the center of spawner (in pixels).":"返回相對於生成器中心的 Y 偏移(以像素計算)。","Offset Y (deprecated)":"Y 偏移(不建議使用)","Return the spawn period (in seconds).":"返回生成週期(以秒計)。","Restart the cooldown of a spawner.":"重新啟動生成器的冷卻時間。","Restart spawning cooldown":"重新啟動生成冷卻時間","Restart the cooldown of _PARAM0_":"重新啟動 _PARAM0_ 的冷卻時間","Return the remaining time before the next spawn (in seconds). Useful for triggering visual and sound effects.":"返回下一次生成前的剩餘時間(以秒計)。對於觸發視覺和音效效果非常有用。","Time before the next spawn":"下一次生成前的時間","_PARAM0_ just spawned an object":"_PARAM0_ 剛剛生成了一個物件","Check if an object has just been created by this spawner. Useful for triggering visual and sound effects.":"檢查此生成器是否剛剛創建了一個物件。對於觸發視覺和音效效果非常有用。","Object was just spawned":"物件剛剛被生成","the max objects in the scene (per spawner) of the object. Limits the number of objects in the scene that were created by this spawner. Set this to 0 for no limit.":"場景中物件的最大數量(每個生成器)。限制由此生成器創建的場景中物件的數量。將此設置為 0 以不限制。","the max objects in the scene (per spawner)":"場景中的最大物件數量(每個生成器)","Check if spawner has unlimited capacity.":"檢查生成器是否具有無限容量。","_PARAM0_ has unlimited capacity":"_PARAM0_ 具有無限的容量","Change unlimited capacity of spawner.":"更改生成器的無限容量。","Unlimited object capacity":"無限物件容量","_PARAM0_ unlimited capacity: _PARAM2_":"_PARAM0_ 的無限容量:_PARAM2_","UnlimitedObjectCapacity":"UnlimitedObjectCapacity","the number of objects that can be created by this spawner. This is reduced everytime an objects is spawned.":"這個產生器可以創建的物件數量。每次生成物件時都會減少。","the spawner capacity":"產生器容量","Check if using random positions. Useful for making large spawner areas.":"檢查是否使用隨機位置。用於創建大型生成區域。","Use random positions inside _PARAM0_":"在_PARAM0_內使用隨機位置","Enable (or disable) random positions. Useful for making large spawner areas.":"啟用(或停用)隨機位置。用於創建大型生成區域。","Use random positions inside _PARAM0_: _PARAM2_":"在_PARAM0_內使用隨機位置:_PARAM2_","RandomPosition":"隨機位置","Object Stack":"对象堆栈","An ordered list of objects and a shuffle action.":"对象的有序列表和混洗操作。","Check if the stack contains the object between a range. The lower and upper bounds are included.":"檢查堆疊是否包含介於範圍內的物件。包括下限和上限。","Contain between a range":"範圍內包含","_PARAM3_ is into the stack of _PARAM1_ between _PARAM4_ and _PARAM5_":"_PARAM3_在_PARAM1_的堆疊之間_PARAM4_和_PARAM5_中","Stack":"堆疊","Stack behavior":"堆疊行為","Element":"元素","Lower bound":"下限","Upper bound":"上限","Check if the stack contains the object at a height.":"檢查堆疊是否包含特定高度的物件。","Contain at":"包含高度","_PARAM3_ is into the stack of _PARAM1_ at _PARAM4_":"_PARAM3_ 在 _PARAM4_ 時堆疊到 _PARAM1_ 的堆疊中","Check if an object is on the stack top.":"檢查對象是否在堆疊頂部。","Stack top":"堆疊頂部","_PARAM3_ is on top of the stack of _PARAM1_":"_PARAM3_ 在 _PARAM1_ 的堆疊頂部","Check if the stack contains the object.":"檢查堆疊是否包含對象。","Contain":"包含","_PARAM3_ is into the stack of _PARAM1_":"_PARAM3_ 被放入 _PARAM1_ 的堆疊中","Hold an ordered list of objects.":"保存一個對象的有序列表。","Add the object on the top of the stack.":"將物件添加到堆疊的頂部。","Add on top":"在頂部添加","Add _PARAM2_ on top of the stack of _PARAM0_":"在_PARAM0_的堆疊頂部添加_PARAM2_","Insert the object into the stack.":"將物件插入堆疊中。","Insert into the stack":"插入堆疊","Insert _PARAM2_ into the stack of _PARAM0_ at height: _PARAM3_":"在_PARAM0_的堆疊中將_PARAM2_插入高度:_PARAM3_","Remove the object from the stack.":"從堆疊中刪除物件。","Remove from the stack":"從堆疊中移除","Remove _PARAM2_ from the stack of _PARAM0_":"從_PARAM0_的堆疊中刪除_PARAM2_","Remove any object from the stack.":"從堆疊中刪除任何物件。","Clear":"清除","Remove every object of the stack of _PARAM0_":"從_PARAM0_的堆疊中刪除所有物件。","Move the objects from a stack into another.":"將物件從一個堆疊移動到另一個。","Move into the stack":"移動到堆疊","Move the objects of the stack of _PARAM3_ from:_PARAM5_ to:_PARAM6_ into the stack of _PARAM0_ at height: _PARAM2_":"將_PARAM3_堆疊中的_PARAM5_至_PARAM6_的物件移動到_PARAM0_的堆疊中高度:_PARAM2_","Move all the object from a stack into another.":"將所有物件從一個堆疊移動到另一個。","Move all into the stack":"全部移動到堆疊","Move all the objects of the stack of _PARAM3_ into the stack of _PARAM0_ at height: _PARAM2_":"將_PARAM3_的堆疊中的所有物件移動到_PARAM0_的堆疊中高度:_PARAM2_","Move all the object from a stack into another one at the top.":"將一堆疊中的所有物件移動到另一個堆疊的頂部。","Move all on top of the stack":"全部移動到堆疊的頂部","Move all the objects of the stack of _PARAM2_ on the top of the stack of _PARAM0_":"將_PARAM2_的堆疊中的所有物件移動到_PARAM0_的堆疊的頂部。","Shuffle the stack.":"對堆疊進行洗牌。","Shuffle":"洗牌","Shuffle the stack of _PARAM0_":"對_PARAM0_的堆疊進行洗牌。","The height of an element in the stack.":"堆疊中元素的高度。","Height of a stack element":"堆疊元素的高度","the number of objects in the stack.":"堆疊中對象的數量。","Stack height":"堆疊高度","the number of objects in the stack":"堆疊中對象的數量","Compare the number of objects in the stack.":"比較堆疊中對象的數量。","Stack height (deprecated)":"堆疊高度(已停用)","_PARAM0_ has _PARAM2_ objects in its stack":"_PARAM0_ 的堆疊中有 _PARAM2_ 個對象","Check if the stack is empty.":"檢查堆疊是否為空。","Is empty":"為空","The stack of _PARAM0_ is empty":"_PARAM0_ 的堆疊為空","Make objects orbit around a center object":"使物體繞著一個中心物體軌道運行","Make objects orbit around a center object in a circular or elliptical shape.":"使物體圍繞中心物體以圓形或橢圓形軌道運行。","Move objects in orbit around a center object.":"將對象繞著中心對象移動。","Move objects in orbit around a center object":"繞著中心對象移動的對象","Animate _PARAM3_ copies of _PARAM2_ that orbit around _PARAM1_ at a distance of _PARAM5_ with orbit speed of _PARAM4_ degrees per second. Rotate orbiting objects at _PARAM6_ degrees per second. Start objects with an angle offset of _PARAM9_ degrees. Create objects on layer _PARAM7_ with Z value _PARAM8_. Reset locations of orbiting objects after quantity is reduced: _PARAM10_":"動畫_PARAM2_的_PARAM3_個副本圍繞_PARAM1_在距離_PARAM5_以_PARAM4_度每秒的軌道速度。以每秒_PARAM6_度旋轉繞行對象。以_PARAM9_度的角度偏移啟動對象。在圖層_PARAM7_上創建對象,Z值為_PARAM8_。減少數量後重置繞行對象的位置: _PARAM10_","Center object":"中心對象","Orbiting object":"環繞對象","Cannot be the same object used for the Center object":"不能是用於中心對象的相同對象","Quantity of orbiting objects":"環繞對象的數量","Orbit speed (in degrees per second)":"軌道速度(每秒度數)","Use negative numbers to orbit counter-clockwise":"使用負數進行逆時針軌道","Distance from the center object (in pixels)":"距離中心對象的距離(像素)","Angular speed (in degrees per second)":"角速度(每秒度數)","Use negative numbers to rotate counter-clockwise":"使用負數進行逆時針旋轉","Layer that orbiting objects will be created on (base layer if empty)":"將產生環繞對象的圖層(如果空,則為基本圖層)","Z order of orbiting objects":"環繞對象的Z軸值","Starting angle offset (in degrees)":"開始角度偏移(度)","Reset locations of orbiting objects after quantity is reduced":"在數量減少後重置環繞對象的位置","Move objects in elliptical orbit around a center object. Z-order is changed to make 3D effect.":"繞著中心對象的橢圓軌道移動的對象。為了產生3D效果,Z軸順序被更改。","Move objects in elliptical orbit around a center object":"將對象繞著中心對象的橢圓軌道移動","Animate _PARAM3_ copies of _PARAM2_ in elliptical orbit around _PARAM1_ with vertical radius of _PARAM5_, horizontal radius of _PARAM9_ and an orbit speed of _PARAM4_ degrees per second. Foreground side is _PARAM10_. Rotate orbiting objects at _PARAM6_ degrees per second":"以垂直半徑_PARAM5_,水平半徑_PARAM9_和軌道速度_PARAM4_度/每秒在_PARAM1_的橢圓軌道上動畫_PARAM2_的_PARAM3_個副本。前景側是_PARAM10_。以_PARAM6_度/每秒旋轉繞行對象。","Vertical distance from the center object (pixels)":"距離中心對象的垂直距離(像素)","Horizontal distance from the center object (pixels)":"從中心物件的水平距離(像素)","Foreground Side":"前景側","Delete orbiting objects that are linked to a center object.":"刪除與中心物件相關聯的運行中物件。","Delete orbiting objects that are linked to a center object":"刪除與中心物件相關聯的運行中物件","Delete all _PARAM2_ that are linked to _PARAM1_":"刪除所有與_PARAM1_相關聯的_PARAM2_","Cannot be the same object that was used for the Center object":"不能是用於中心物件的相同物件","Labeled button":"標籤按鈕","A button with a label.":"帶標籤的按鈕。","The finite state machine used internally by the button object.":"按鈕物件內部使用的有限狀態機。","Button finite state machine":"按鈕有限狀態機","Change the text style when the button is hovered.":"當滑鼠懸停在按鈕上時改變文字樣式。","Hover text style":"滑鼠懸停文字樣式","Outline on hover":"懸停時的輪廓","Hover color":"懸停顏色","Enable shadow on hover":"懸停時啟用陰影","Hover font size":"懸停字體大小","Idle font size":"閒置字體大小","Idle color":"閒置顏色","Check if isHovered.":"檢查是否懸停。","IsHovered":"IsHovered","_PARAM0_ isHovered":"_PARAM0_ 是懸停","Change if isHovered.":"更改是否懸停。","_PARAM0_ isHovered: _PARAM2_":"_PARAM0_ 是懸停: _PARAM2_","Return the text color":"返回文本顏色","Text color":"文本顏色","Hover bitmap text style":"懸停位圖文本樣式","Hover prefix":"懸停前綴","Hover suffix":"懸停後綴","Idle text":"閒置文本","Button with a label.":"帶標籤的按鈕。","Label":"標籤","Hovered fade out duration":"懸停淡出持續時間","States":"狀態","Label offset on Y axis when pressed":"按下時Y軸上的標籤偏移","Change the text of the button label.":"更改按鈕標籤的文字。","Label text":"標籤文字","Change the text of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的文字更改為 _PARAM1_","the label text.":"標籤文字。","the label text":"標籤文字","De/activate interactions with the button.":"啟用/停用與按鈕的互動。","De/activate interactions":"啟用/停用互動","Activate interactions with _PARAM0_: _PARAM1_":"啟用 _PARAM0_ 的互動:_PARAM1_","Activate":"啟用","Check if interactions are activated on the button.":"檢查按鈕上的互動是否啟用。","Interactions activated":"互動已啟用","Interactions on _PARAM0_ are activated":"_PARAM0_ 的互動已啟用","the labelOffset of the object.":"物件的標籤偏移。","LabelOffset":"標籤偏移","the labelOffset":"標籤偏移","Resource bar (continuous)":"在遊戲中代表資源的條(生命值、法力、彈藥等)。","A bar that represents a resource in the game (health, mana, ammo, etc).":"在資產商店中有可使用的資源條包 [resource bars pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=resource-bars-resource-bars)。","Resource bar":"資源條","Previous high value":"上一個高值","Previous high value conservation duration (in seconds)":"上一個高值保存時間(秒)","the value of the object.":"對象的值。","the value":"值","the maximum value of the object.":"對象的最大值。","the maximum value":"最大值","Check if the bar is empty.":"檢查條是否為空。","Empty":"空的","_PARAM0_ bar is empty":"_PARAM0_ 條為空","Check if the bar is full.":"檢查條是否為滿。","Full":"滿的","_PARAM0_ bar is full":"_PARAM0_ 條為滿","the previous high value of the resource bar before the current change.":"在當前變化之前資源條的前高值。","the previous high value":"前高值","Force the previous resource value to update to the current one.":"強制前資源值更新為當前值。","Update previous value":"更新前值","Update the previous resource value of _PARAM0_":"更新 _PARAM0_ 的前資源值","the previous high value conservation duration (in seconds) of the object.":"物件的前高值保存時長(以秒為單位)。","Previous high value conservation duration":"前高值保存時長","the previous high value conservation duration":"前高值保存時長","Check if the resource value is changing.":"檢查資源值是否在變化。","Value is changing":"值在變化","_PARAM0_ value is changing":"_PARAM0_ 的值在變化","Initial value":"初始值","It's used to detect a change at hot reload.":"它用於檢測熱重新載時的更改。","Easing duration":"緩和持續時間","Show the label":"顯示標籤","Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.":"根據按鈕配置居中條。在調整按鈕大小時,這條用於 doStepPostEvents 中。","Update layout":"更新佈局","Update layout of _PARAM0_":"更新 _PARAM0_ 的佈局","_PARAM0_ is empty":"_PARAM0_ 為空","_PARAM0_ is full":"_PARAM0_ 為滿","the previous value conservation duration (in seconds) of the object.":"物件的前值保存時長(以秒為單位)。","Previous value conservation duration":"前值保存時長","the previous value conservation duration":"以前的值保存時間","Value width":"值的寬度","Check if the label is shown.":"檢查標籤是否顯示。","Label is shown":"標籤已顯示","_PARAM0_ label is shown":" ","Show (or hide) the label on the bar.":"在條上顯示(或隱藏)標籤。","Show label":"顯示標籤","Show the label of _PARAM0_: _PARAM1_":"顯示 _PARAM0_ 的標籤:_PARAM1_","Update the text that display the current value and maximum value.":"更新顯示目前值和最大值的文字。","Update label":"更新標籤","Update label of _PARAM0_":"更新 _PARAM0_ 的標籤","Slider":"滑塊","Represent a value on a slider.":"在滑塊上表示值。","Step size":"步進大小","the minimum value of the object.":"對象的最小值。","the minimum value":"最小值","the bar value bounds size.":"條的值範圍尺寸。","the bar value bounds size":"條的值範圍尺寸","the step size of the object.":"對象的步進大小。","the step size":"步進大小","Bar left margin":"條左邊邊距","Bar":"條","Bar top margin":"條頂部邊距","Bar right margin":"右邊條","Bar bottom margin":"底部條","Show the label when the value is changed":"當值改變時顯示標籤","Label margin":"標籤邊緣","Only used by the scene editor.":"僅供場景編輯器使用。","the value of the slider.":"滑桿的值。","the minimum value of the slider.":"滑桿的最小值。","the maximum value of the slider.":"滑桿的最大值。","the step size of the slider.":"滑桿的步進大小。","Update the thumb position according to the slider value.":"根據滑桿值更新滑塊位置。","Update thumb position":"更新滑鼠位置","Update the thumb position of _PARAM0_":"更新 _PARAM0_ 的滑鼠位置","Update the slider configuration.":"更新滑鼠的設定。","Update slider configuration":"更新滑鼠設定","Update the slider configuration of _PARAM0_":"更新 _PARAM0_ 的滑鼠設定","Check if the slider allows interactions.":"檢查滑鼠是否允許互動。","Parallax for Tiled Sprite":"平移用于平铺精灵","Behaviors to animate Tiled Sprite objects in the background, following the camera with a parallax effect.":"在背景中用于平铺精灵物体的行为,按比例效果跟随相机移动。","Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"移動平鋪精靈的圖像,使其隨著相機的水平移動具有視差效應。將此添加到對象後,將對象放在一個不動的層上,置於被關注的層的後面(例如,一個名為“背景”的層)。","Horizontal Parallax for a Tiled Sprite":"平鋪效應用於平鋪精靈的水平視差","Parallax factor (speed for the parallax, usually between 0 and 1)":"視差因子(視差的速度,通常介於0和1之間)","Layer to be followed (leave empty for the base layer)":"要跟隨的圖層(留空為基礎圖層)","Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").":"移動平鋪精靈的圖像,使其隨著相機的垂直移動具有視差效應。將此添加到對象後,將對象放在一個不動的層上,置於被關注的層的後面(例如,一個名為“背景”的層)。","Vertical Parallax for a Tiled Sprite":"平鋪效應用於平鋪精靈的垂直視差","Offset on Y axis":"Y軸偏移","3D particle emitter":"3D粒子發射器","Display a large number of particles in 3D to create visual effects in a 3D game.":"在3D中顯示大量粒子以創建3D遊戲中的視覺效果。","Display a large number of particles to create visual effects.":"显示大量粒子以创建视觉效果。","Start color":"起始顏色","End color":"結束顏色","Start opacity":"起始不透明度","Flow of particles (particles per second)":"粒子流動(每秒粒子數)","Start min size":"起始最小尺寸","Start max size":"起始最大尺寸","End scale":"結束比例","Start min speed":"起始最小速度","Start max speed":"起始最大速度","Min lifespan":"最短壽命","Max lifespan":"最長壽命","Emission duration":"發射持續時間","Particles move with the emitter":"粒子隨發射器移動","Spay cone angle":"噴射錐角度","Blending":"混合","Gravity top":"頂部重力","Delete when emission ends":"當發射結束時刪除","Z (elevation)":"Z(高度)","Deprecated":"已棄用","Rotation on X axis":"X軸旋轉","Rotation on Y axis":"Y軸旋轉","Start min length":"開始最小長度","Trail":"拖尾","Start max length":"開始最大長度","Render mode":"渲染模式","Follow the object":"跟隨對象","Tail end width ratio":"尾端寬度比例","Update from properties.":"從屬性更新。","Update from properties":"從屬性更新","Update from properties of _PARAM0_":"從 _PARAM0_ 的屬性更新","Update helper":"更新助手","Update graphical helper of _PARAM0_":"更新 _PARAM0_ 的圖形助手","Update particle image":"更新粒子圖像","Update particle image of _PARAM0_":"更新 _PARAM0_ 的粒子圖像","Register in layer":"在圖層中註冊","Register _PARAM0_ in layer":"在圖層中註冊 _PARAM0_","Delete itself":"刪除自身","Delete _PARAM0_":"刪除 _PARAM0_","Check that emission has ended and no particle is alive anymore.":"檢查發射是否已結束,並且沒有任何粒子是活著的。","Emission has ended":"發射已結束","Emission from _PARAM0_ has ended":"_PARAM0_ 的發射已結束","Restart particule emission from the beginning.":"從頭重新開始粒子的發射。","Restart":"重新啟動","Restart particule emission from _PARAM0_":"從 _PARAM0_ 重新開始粒子的發射","the Z position of the emitter.":"發射器的 Z 位置。","Z elevaltion (deprecated)":"Z 高度(已棄用)","the Z position":"Z 位置","the rotation on X axis of the emitter.":"發射器 X 軸的旋轉。","Rotation on X axis (deprecated)":"X 軸的旋轉(已棄用)","the rotation on X axis":"X 軸的旋轉","the rotation on Y axis of the emitter.":"發射器 Y 軸的旋轉。","Rotation on Y axis (deprecated)":"Y 軸的旋轉(已棄用)","the rotation on Y axis":"Y 軸的旋轉","the start color of the object.":"物件的起始顏色。","the start color":"起始顏色","the end color of the object.":"物件的結束顏色。","the end color":"結束顏色","the start opacity of the object.":"物件的開始不透明度。","the start opacity":"起始不透明度","the end opacity of the object.":"物件的結束不透明度。","the end opacity":"結束不透明度","the flow of particles of the object (particles per second).":"物件的粒子流(每秒的粒子數)。","Flow of particles":"粒子流","the flow of particles":"物件的粒子流","the start min size of the object.":"物件的起始最小尺寸。","the start min size":"起始最小尺寸","the start max size of the object.":"物件的起始最大尺寸。","the start max size":"起始最大尺寸","the end scale of the object.":"物件的結束縮放。","the end scale":"結束縮放","the min start speed of the object.":"物體的最小起始速度。","Min start speed":"最小起始速度","the min start speed":"物體的最小起始速度","the max start speed of the object.":"物體的最大起始速度。","Max start speed":"最大起始速度","the max start speed":"物體的最大起始速度","the min lifespan of the object.":"物體的最小壽命。","the min lifespan":"物體的最小壽命","the max lifespan of the object.":"物體的最大壽命。","the max lifespan":"物體的最大壽命","the emission duration of the object.":"物體的發射持續時間。","the emission duration":"物體的發射持續時間","Check if particles move with the emitter.":"檢查粒子是否隨著發射器移動。","_PARAM0_ particles move with the emitter":"_PARAM0_粒子隨著發射器移動","Change if particles move with the emitter.":"更改粒子是否隨著發射器移動。","_PARAM0_ particles move with the emitter: _PARAM1_":"_PARAM0_粒子隨著發射器移動: _PARAM1_","AreParticlesRelative":"AreParticlesRelative","the spay cone angle of the object.":"物體的噴射錐角。","the spay cone angle":"物體的噴射錐角","the blending of the object.":"物體的混合。","the blending":"物體的混合","the gravity top of the object.":"物體的頂部重力。","the gravity top":"物體的頂部重力","the gravity of the object.":"物體的重力。","the gravity":"物體的重力","Check if delete when emission ends.":"檢查是否在發射結束時刪除粒子。","_PARAM0_ delete when emission ends":"_PARAM0_發射結束時刪除粒子","Change if delete when emission ends.":"更改是否在發射結束時刪除粒子。","_PARAM0_ delete when emission ends: _PARAM1_":"_PARAM0_發射結束時刪除粒子: _PARAM1_","ShouldAutodestruct":"應該自我毀滅","the start min trail length of the object.":"對象的起始最小軌跡長度。","Start min trail length":"起始最小軌跡長度","the start min trail length":"起始最小軌跡長度","the start max trail length of the object.":"對象的起始最大軌跡長度。","Start max trail length":"起始最大軌跡長度","the start max trail length":"起始最大軌跡長度","Check if the trail should follow the object.":"檢查軌跡是否應跟隨對象。","Trail following the object":"跟隨對象的軌跡","The trail is following _PARAM0_":"軌跡正在跟隨 _PARAM0_","Change if the trail should follow the object or not.":"更改軌跡是否應跟隨對象。","Make the trail follow":"使軌跡跟隨","Make the trail follow _PARAM0_: _PARAM1_":"使軌跡跟隨 _PARAM0_: _PARAM1_","IsTrailFollowingLocalOrigin":"IsTrailFollowingLocalOrigin","the tail end width ratio of the object.":"對象的尾端寬度比例。","the tail end width ratio":"尾端寬度比例","the render mode of the object.":"對象的渲染模式。","the render mode":"渲染模式","2D Top-Down Physics Car":"2D 俯視物理車","Simulate top-down car motion with drifting.":"模擬帶漂移的俯視車輛運動。","Simulate 2D car motion, from a top-down view.":"從俯視角度模擬 2D 車輛運動。","Physics car":"物理汽車","Physics Engine 2.0":"物理引擎2.0","Wheel grip ratio (from 0 to 1)":"輪胎抓地比(從0到1)","A ratio of 0 is like driving on ice.":"比值為0就像在冰上行駛。","Steering":"轉向","Steering speed":"轉向速度","Sterring speed when turning back":"回轉時的轉向速度","Maximum steering angle":"最大轉向角度","Steering angle":"轉向角度","Front wheels position":"前輪位置","0 means at the center, 1 means at the front":"0表示在中心,1表示在前方","Wheels":"輪子","Rear wheels position":"後輪位置","0 means at the center, 1 means at the back":"0表示在中心,1表示在後方","Simulate a press of the right key.":"模擬按下右鍵。","Simulate right key press":"模擬按下右鍵","Simulate pressing right for _PARAM0_":"模擬按下右鍵,按_PARAM0_","Simulate a press of the left key.":"模擬按下左鍵。","Simulate left key press":"模擬按下左鍵","Simulate pressing left for _PARAM0_":"模擬按下左鍵,按_PARAM0_","Simulate a press of the up key.":"模擬按下上鍵。","Simulate up key press":"模擬按下上鍵","Simulate pressing up for _PARAM0_":"模擬按下上鍵,按_PARAM0_","Simulate a press of the down key.":"模擬按下下鍵。","Simulate down key press":"模擬按下下鍵","Simulate pressing down for _PARAM0_":"模擬按下下鍵,按_PARAM0_","Simulate a steering stick for a given axis force.":"模擬給定軸力的方向盤。","Simulate steering stick":"模擬方向盤","Simulate a steering stick for _PARAM0_ with a force of _PARAM2_":"模擬_PARAM0_的方向盤,力為_PARAM2_","Simulate an acceleration stick for a given axis force.":"模擬給定軸力的加速棒。","Simulate acceleration stick":"模擬加速棒","Simulate an acceleration stick for _PARAM0_ with a force of _PARAM2_":"模擬_PARAM0_的加速棒,力為_PARAM2_","Apply wheel forces":"應用輪子力","Apply forces on the wheel at _PARAM2_ ; _PARAM3_ and _PARAM4_° of _PARAM0_":"在_PARAM2_ ; _PARAM3_和_PARAM4_°的_PARAM0_輪上應用力","Wheel X":"輪子X","Wheel Y":"輪子Y","Wheel angle":"輪子角度","Return the momentum of inertia (in kg ⋅ pixel²)":"返回惯性矩(以 kg ⋅ 像素² 表示)","Momentum of inertia":"惯性矩","Apply a polar force":"應用極坐标力","Length (in kg ⋅ pixels ⋅ s^−2)":"长度(以 kg ⋅ 像素 ⋅ s^−2 表示)","Draw forces applying on the car for debug purpose.":"绘制对车辆施加的力,以进行调试为目的。","Draw forces for debug":"以调试目的绘制力","Draw forces of car _PARAM0_ on _PARAM2_":"绘制_PARAM0_的_PARAM2_的汽车力","the steering angle of the object.":"物体的转向角度。","the steering angle":"转向角度","the wheel grip ratio of the object (from 0 to 1). A ratio of 0 is like driving on ice.":"物体的车轮抓地比(从0到1)。比率为0时,就像在冰上开车。","Wheel grip ratio":"輪胎抓地比率","the wheel grip ratio":"車輪抓地比率","the maximum steering angle of the object.":"物件的最大轉向角度。","the maximum steering angle":"最大轉向角度","the steering speed of the object.":"物件的轉向速度。","the steering speed":"轉向速度","the sterring speed when turning back of the object.":"物件回轉時的轉向速度。","Sterring back speed":"回轉速度","the sterring speed when turning back":"回轉時的轉向速度","3D car keyboard mapper":"3D car keyboard mapper","3D car keyboard controls.":"3D car keyboard controls.","Control a 3D physics car with a keyboard.":"Control a 3D physics car with a keyboard.","Hand brake key":"Hand brake key","3D physics character animator":"3D物理角色動畫製作者","Change animations of a 3D physics character automatically.":"自動更改3D物理角色的動畫。","Animatable capacity":"可動畫容量","\"Idle\" animation name":"\"閒置\"動畫名稱","Animation names":"動畫名稱","\"Run\" animation name":"\"奔跑\"動畫名稱","\"Jump\" animation name":"\"跳躍\"動畫名稱","\"Fall\" animation name":"\"墜落\"動畫名稱","3D character keyboard mapper":"3D角色鍵盤映射器","3D platformer and 3D shooter keyboard controls.":"3D平台遊戲和3D射擊遊戲的鍵盤控制。","Control a 3D physics character with a keyboard for a platformer or a top-down game.":"使用鍵盤控制3D物理角色進行平台遊戲或自上而下的遊戲。","3D platformer keyboard mapper":"3D平台遊戲鍵盤映射器","Camera is locked for the frame":"相機在該幀上鎖定","Check if camera is locked for the frame.":"檢查相機是否鎖定畫面。","Camera is locked":"相机已锁定","_PARAM0_ camera is locked for the frame":"_PARAM0_ 相機已鎖定畫面","Change if camera is locked for the frame.":"更改相機是否鎖定畫面。","Lock the camera":"锁定相机","_PARAM0_ camera is locked for the frame: _PARAM2_":"_PARAM0_ 相機已鎖定畫面: _PARAM2_","Control a 3D physics character with a keyboard for a first or third person shooter.":"使用鍵盤控制3D物理角色進行第一或第三人稱射擊遊戲。","3D shooter keyboard mapper":"3D射擊遊戲鍵盤映射器","3D ellipse movement":"3D橢圓運動","3D physics engine":"3D物理引擎","Ellipse width":"橢圓寬度","Ellipse height":"橢圓高度","the ellipse width of the object.":"物件的橢圓寬度。","the ellipse width":"橢圓寬度","the ellipse height of the object.":"物件的橢圓高度。","the ellipse height":"橢圓高度","the loop duration (in seconds).":"循環持續時間(秒)。","the loop duration":"循環持續時間","Pinching gesture":"捏取手勢","Move the camera or objects with pinching gestures.":"用捏取手勢移動相機或物體。","Enable or disable camera pinch.":"啟用或禁用相機捏。","Enable or disable camera pinch":"啟用或禁用相機捏","Enable camera pinch: _PARAM1_":"啟用相機捏:_PARAM1_","Enable camera pinch":"啟用相機捏","Check if camera pinch is enabled.":"檢查相機捏是否已啟用。","Camera pinch is enabled":"相機捏合已啟用","Choose the layer to move with pinch gestures.":"選擇圖層以移動使用捏合手勢。","Camera pinch layer":"相機捏合圖層","Choose the layer _PARAM1_ to move with pinch gestures":"選擇圖層_PARAM1_以移動使用捏合手勢","Change the camera pinch constraint.":"更改相機捏合約束。","Camera pinch constraints":"相機捏合約束","Change the camera pinch constraint to _PARAM1_":"將相機捏合約束更改為_PARAM1_","Constraint":"約束","Pinch the camera of a layer.":"捏合圖層的相機。","Pinch camera":"捏合相機","Pinch the camera of layer: _PARAM1_ with constraint: _PARAM2_":"使用約束_PARAM2_捏合圖層_PARAM1_的相機。","Check if a touch is pinching, if 2 touches are pressed.":"檢查是否觸碰捏合,如果按下2個觸碰。","Touch is pinching":"觸碰正在捏合","Return the scaling of the pinch gesture from its beginning.":"從開始時返回捏合手勢的縮放。","Pinch scaling":"捏合縮放","Return the rotation of the pinch gesture from its beginning (in degrees).":"從開始時返回捏合手勢的旋轉(以度為單位)。","Pinch rotation":"捏合旋轉","Return the X position of the pinch center at the beginning of the gesture.":"返回手勢開始時的捏合中心的X位置。","Pinch beginning center X":"捏合開始中心X","Return the Y position of the pinch center at the beginning of the gesture.":"返回手勢開始時的捏合中心的Y位置。","Pinch beginning center Y":"捏合開始中心Y","Return the X position of the pinch center.":"返回捏合中心的X位置。","Pinch center X":"捏合中心X","Return the Y position of the pinch center.":"返回捏合中心的Y位置。","Pinch center Y":"捏合中心Y","Return the horizontal translation of the pinch gesture from its beginning.":"從開始時返回捏合手勢的水平位移。","Pinch translation X":"捏合平移X","Return the vertical translation of the pinch gesture from its beginning.":"從開始時返回捏合手勢的垂直位移。","Pinch translation Y":"捏合平移Y","Return the new X position of a point after the pinch gesture.":"返回捏合手勢後點的新X位置。","Transform X position":"轉換X位置","Position X before the pinch":"捏合之前的X位置","Position Y before the pinch":"捏合之前的Y位置","Return the new Y position of a point after the pinch gesture.":"返回捏合手勢後點的新Y位置。","Transform Y position":"轉換Y位置","Return the original X position of a point before the pinch gesture.":"返回捏合手勢之前點的原始X位置。","Inversed transform X position":"反轉變換 X 位置","Position X after the pinch":"捏合手勢後的 X 位置","Position Y after the pinch":"捏合手勢後的 Y 位置","Return the new position on the Y axis of a point after the pinch gesture.":"在捏合手勢後,返回點的 Y 軸新位置。","Inversed transform Y position":"反轉變換 Y 位置","Return the X coordinate of a position transformed from the scene to the canvas according to a layer.":"從場景到畫布轉換的位置的 X 座標。","Transform X to canvas":"將 X 轉換到畫布","Return the Y coordinate of a position transformed from the scene to the canvas according to a layer.":"從場景到畫布轉換的位置的 Y 座標。","Transform Y to canvas":"將 Y 轉換到畫布","Return the X coordinate of a position transformed from the canvas to the scene according to a layer.":"從畫布到場景轉換的位置的 X 座標。","Transform X to scene":"將 X 轉換到場景","Return the Y coordinate of a position transformed from the canvas to the scene according to a layer.":"從畫布到場景轉換的位置的 Y 座標。","Transform Y to scene":"將 Y 轉換到場景","Return the touch X on the canvas.":"在畫布上返回觸碰的 X 座標。","Touch X on canvas":"在畫布上的 X 觸碰","Return the touch Y on the canvas.":"在畫布上返回觸碰的 Y 座標。","Touch Y on canvas":"在畫布上的 Y 觸碰","Return the X coordinate of a vector after a rotation":"旋轉後向量的 X 座標","Rotated vector X":"旋轉向量 X","Vector X":"向量 X","Vector Y":"向量 Y","Angle (in degrees)":"角度(以度為單位)","Return the Y coordinate of a vector after a rotation":"旋轉後向量的 Y 座標","Rotated vector Y":"旋轉向量 Y","Move objects by holding 2 touches on them.":"通過在物體上按住 2 次觸碰來移動物體。","Pinchable object":"可捏合的對象","Resizable capability":"可調整大小的能力","Lock object size":"鎖定物體大小","Check if the object is being pinched.":"檢查物件是否被捏合。","Is being pinched":"被捏合","_PARAM0_ is being pinched":"_PARAM0_ 正在被捏合","Abort the pinching of this object.":"中止該物件的捏合。","Abort pinching":"中止捏合","Abort the pinching of _PARAM0_":"中止_PARAM0_的捏合。","Pixel perfect movement":"像素完美運動","Grid-based or pixel perfect platformer and top-down movements.":"基於網格或像素完美的平台遊戲和自頂向下的運動。","Return the speed necessary to cover a distance according to the deceleration.":"返回根據減速規則覆蓋一個距離所需的速度。","Speed to reach":"達到的速度","Braking distance from an initial speed: _PARAM2_ and a deceleration: _PARAM3_ is less than _PARAM1_":"從初始速度: _PARAM2_ 和減速: _PARAM3_ 的情況下剎車距離小於 _PARAM1_。","Distance":"距離","Return the braking distance according to an initial speed and a deceleration.":"返回根據初始速度和減速規則返回剎車距離。","Braking distance":"剎車距離","Define JavaScript classes for top-down.":"自上而下定義JavaScript類別。","Define JavaScript classes for top-down":"自上而下定義JavaScript類別","Define JavaScript classes for top-down":"自上而下定義JavaScript類別","Seamlessly align big pixels using a top-down movement.":"無縫對齊大像素,使用自上而下的移動。","Pixel perfect top-down movement":"像素完美的自上而下運動","Pixel size":"像素大小","Pixel grid offset X":"像素網格偏移X","Pixel grid offset Y":"像素網格偏移Y","Seamlessly align big pixels using a 2D platformer character movement.":"無縫對齊大像素,使用 2D 平台角色移動。","Pixel perfect platformer character":"像素完美的平台角色","Platformer character animator":"平台角色動畫師","Change animations and horizontal flipping of a platformer character automatically.":"自動更改平台角色的動畫和水平翻轉。","Enable animation changes":"啟用動畫變化","Enable horizontal flipping":"啟用水平翻轉","\"Climb\" animation name":"\"攀爬\"動畫名稱","Platformer character":"平台角色","Flippable capacity":"可翻轉能力","Enable (or disable) automated animation changes a platformer character. Disabling animation changes is useful to play custom animations.":"啟用(或禁用)平台角色的自動動畫更改。禁用動畫更改可用於播放自定義動畫。","Enable (or disable) automated animation changes":"啟用(或禁用)自動動畫更改","Enable automated animation changes on _PARAM0_: _PARAM2_":"_PARAM0_上啟用自動動畫更改: _PARAM2_","Change animations automatically":"自動更改動畫","Enable (or disable) automated horizontal flipping of a platform character.":"啟用(或禁用)平台角色的自動水平翻轉。","Enable (or disable) automated horizontal flipping":"啟用(或禁用)自動水平翻轉","Enable automated horizontal flipping on _PARAM0_: _PARAM2_":"_PARAM0_上啟用自動水平翻轉: _PARAM2_","Set the \"Idle\" animation name. Do not use quotation marks.":"設置“Idle”動畫名稱。不要使用引號。","Set \"Idle\" animation of _PARAM0_ to _PARAM2_":"將_PARAM0_的\"空閒\"動畫設置為_PARAM2_","Animation name":"動畫名稱","Set the \"Move\" animation name. Do not use quotation marks.":"設置\"移動\"動畫名稱。請勿使用引號。","\"Move\" animation name":"\"移動\"動畫名稱","Set \"Move\" animation of _PARAM0_ to _PARAM2_":"將_PARAM0_的\"移動\"動畫設置為_PARAM2_","Set the \"Jump\" animation name. Do not use quotation marks.":"設置\"跳躍\"動畫名稱。請勿使用引號。","Set \"Jump\" animation of _PARAM0_ to _PARAM2_":"將_PARAM0_的\"跳躍\"動畫設置為_PARAM2_","Set the \"Fall\" animation name. Do not use quotation marks.":"設置\"下落\"動畫名稱。請勿使用引號。","Set \"Fall\" animation of _PARAM0_ to _PARAM2_":"將_PARAM0_的\"下落\"動畫設置為_PARAM2_","Set the \"Climb\" animation name. Do not use quotation marks.":"設置\"攀爬\"動畫名稱。請勿使用引號。","Set \"Climb\" animation of _PARAM0_ to _PARAM2_":"將_PARAM0_的\"攀爬\"動畫設置為_PARAM2_","Platformer trajectory":"平台軌跡","Platformer character jump easy configuration and platformer AI tools.":"平台角色跳躍易配置和平台人工智能工具。","Configure the height of a jump and evaluate the jump trajectory.":"配置跳躍的高度並評估跳躍軌跡。","Platformer trajectory evaluator":"平台軌跡評估器","Jump height":"跳躍高度","Change the jump speed to reach a given height.":"更改跳躍速度以達到給定的高度。","Change the jump height of _PARAM0_ to _PARAM2_":"將_PARAM0_的跳躍高度更改為_PARAM2_","Draw the jump trajectories from no sustain to full sustain.":"從無停留到完全停留繪製跳躍軌跡。","Draw jump":"繪製跳躍","Draw the jump trajectory of _PARAM0_ on _PARAM2_":"在_PARAM2_上繪製_PARAM0_的跳躍軌跡","The jump Y displacement at a given time from the start of the jump.":"從跳躍開始時到特定時間的跳躍Y位移。","Jump Y":"跳躍Y","Jump sustaining duration":"跳躍維持時間","The maximum Y displacement.":"最大Y位移。","Peak Y":"峰值Y","The time from the start of the jump when it reaches the maximum Y displacement.":"從跳躍開始時到達最大Y位移的時間。","Peak time":"峰值時間","The time from the start of the jump when it reaches a given Y displacement moving upward.":"從跳躍開始時達到給定Y位移的時間向上移動。","Jump up time":"跳躍向上時間","The time from the start of the jump when it reaches a given Y displacement moving downward.":"從跳躍開始時達到給定Y位移的時間向下移動。","Jump down time":"跳躍向下時間","The X displacement before the character stops (always positive).":"角色停止前的X位移(始終為正數)。","Stop distance":"停止距離","The X displacement at a given time from now if decelerating (always positive).":"相對於減速時的給定時間的X位移(始終為正數)。","Stopping X":"減速X","The X displacement at a given time from now if accelerating (always positive).":"根據目前的狀況來看,物體在X軸上的偏移量(始終為正)。","Moving X":"移動X","Player avatar":"玩家頭像","Display player avatars according to their GDevelop account.":"根據他們的 GDevelop 帳戶顯示玩家頭像。","Return the UserID from a lobby player number.":"從大廳玩家編號返回使用者ID。","UserID":"使用者ID","Lobby player number":"大廳玩家編號","Display a player avatar according to their GDevelop account.":"根據其GDevelop帳戶顯示玩家頭像。","Multiplayer Avatar":"多人遊戲頭像","Border enabled":"啟用邊框","Enable the border on the avatar.":"在頭像上啟用邊框。","Player unique ID":"玩家唯一ID","the player unique ID of the avatar.":"玩家頭像的唯一ID。","the player unique ID":"玩家的唯一ID","Playgama Bridge":"Playgama 橋接器","One SDK for cross-platform publishing HTML5 games.":"跨平台發布 HTML5 遊戲的通用 SDK。","Add Action Parameter.":"添加動作參數。","Add Action Parameter":"添加動作參數","Add Action Parameter _PARAM1_ : _PARAM2_":"添加動作參數_PARAM1_:_PARAM2_","Path":"路徑","Add Bool Action Parameter.":"添加布爾動作參數。","Add Bool Action Parameter":"添加布爾動作參數","Is Initialized.":"已初始化。","Is Initialized":"已初始化","Platform Id.":"平台ID。","Platform Id":"平台ID","Platform Language.":"平台語言。","Platform Language":"平台語言","Platform Payload.":"平台載荷。","Platform Payload":"平台載荷","Platform Tld.":"平台頂級網域。","Platform Tld":"平台頂級網域","Platform Is Audio Enabled.":"平台已啟用音訊。","Platform Is Audio Enabled":"平台已啟用音訊","Platform Is Paused.":"平台已暫停。","Platform Is Paused":"平台已暫停","Is Get All Games Supported.":"Is Get All Games Supported.","Is Get All Games Supported":"Is Get All Games Supported","Is Get Game By Id Supported.":"Is Get Game By Id Supported.","Is Get Game By Id Supported":"Is Get Game By Id Supported","On Get All Games Completed.":"On Get All Games Completed.","On Get All Games Completed":"On Get All Games Completed","On Get Game By Id Completed.":"On Get Game By Id Completed.","On Get Game By Id Completed":"On Get Game By Id Completed","Platform Get All Games.":"Platform Get All Games.","Platform Get All Games":"Platform Get All Games","Platform Get Game By Id.":"Platform Get Game By Id.","Platform Get Game By Id":"Platform Get Game By Id","Platform All Games Count.":"Platform All Games Count.","Platform All Games Count":"Platform All Games Count","Platform All Game Properties Count.":"Platform All Game Properties Count.","Platform All Game Properties Count":"Platform All Game Properties Count","Platform All Games Property Name.":"Platform All Games Property Name.","Platform All Games Property Name":"Platform All Games Property Name","Property Index":"屬性索引","Platform All Games Property Value.":"Platform All Games Property Value.","Platform All Games Property Value":"Platform All Games Property Value","Game Index":"Game Index","Property":"屬性","Platform Game By Id Property Value.":"Platform Game By Id Property Value.","Platform Game By Id Property Value":"Platform Game By Id Property Value","Platform On Audio State Changed.":"平台音頻狀態已更改。","Platform On Audio State Changed":"平台音訊狀態已更改","Platform On Pause State Changed.":"平台暫停狀態已更改。","Platform On Pause State Changed":"平台暫停狀態已更改","Device Type.":"設備類型。","Device Type":"設備類型","Is Mobile.":"是手機。","Is Mobile":"是手機","Is Tablet.":"是平板電腦。","Is Tablet":"是平板電腦","Is Desktop.":"是桌面電腦。","Is Desktop":"是桌面電腦","Is Tv.":"是電視。","Is Tv":"是電視","Player Id.":"玩家ID。","Player Id":"玩家ID","Player Name.":"玩家姓名。","Player Name":"玩家姓名","Player Extra Properties Count.":"玩家額外屬性計數。","Player Extra Properties Count":"玩家額外屬性計數","Player Extra Property Name.":"玩家額外屬性名稱。","Player Extra Property Name":"玩家額外屬性名稱","Player Extra Property Value.":"玩家額外屬性值。","Player Extra Property Value":"玩家額外屬性值","Player Photos Count.":"玩家照片數。","Player Photos Count":"玩家照片數","Player Photo # _PARAM1_.":"玩家照片 # _PARAM1_。","Player Photo":"玩家照片","Index":"索引","Visibility State.":"可見狀態。","Visibility State":"可見狀態","On Visibility State Changed.":"在可見狀態變更時。","On Visibility State Changed":"在可見狀態變更時","Default Storage Type.":"默認存儲類型。","Default Storage Type":"默認存儲類型","Storage Data.":"儲存數據。","Storage Data":"儲存數據","Storage Data As JSON.":"將數據存儲為 JSON。","Storage Data As JSON":"將數據存儲為 JSON","Append Parameter to Storage Data Get Request.":"附加參數到存儲數據獲取請求。","Append Parameter to Storage Data Get Request":"附加參數到存儲數據獲取請求","Append Parameter _PARAM1_ to Storage Data Get Request":"附加參數 _PARAM1_ 到存儲數據獲取請求","Append Parameter to Storage Data Set Request.":"附加參數到存儲數據設置請求。","Append Parameter to Storage Data Set Request":"附加參數到存儲數據設置請求","Append Parameter _PARAM1_ : _PARAM2_ to Storage Data Set Request":"附加參數 _PARAM1_:_PARAM2_ 到存儲資料集請求","Append Parameter to Storage Data Delete Request.":"附加參數到存儲數據刪除請求。","Append Parameter to Storage Data Delete Request":"附加參數到存儲數據刪除請求","Append Parameter _PARAM1_ to Storage Data Delete Request":"附加參數 _PARAM1_到存儲數據刪除請求","Is Last Action Completed Successfully.":"上一個動作是否成功完成。","Is Last Action Completed Successfully":"上一個動作是否成功完成","Send Storage Data Get Request.":"發送存儲數據獲取請求。","Send Storage Data Get Request":"發送存儲數據獲取請求","Send Storage Data Get Request _PARAM1_":"發送存儲數據獲取請求 _PARAM1_","Storage Type":"存儲類型","Send Storage Data Set Request.":"發送存儲數據設置請求。","Send Storage Data Set Request":"發送存儲數據設置請求","Send Storage Data Set Request _PARAM1_":"發送存儲數據設置請求 _PARAM1_","Send Storage Data Delete Request.":"發送存儲數據刪除請求。","Send Storage Data Delete Request":"發送存儲數據刪除請求","Send Storage Data Delete Request _PARAM1_":"發送存儲數據刪除請求 _PARAM1_","On Storage Data Get Request Completed.":"在存儲數據獲取請求完成時。","On Storage Data Get Request Completed":"在存儲數據獲取請求完成","On Storage Data Set Request Completed.":"在存儲數據設置請求完成。","On Storage Data Set Request Completed":"在存儲數據設置請求完成","On Storage Data Delete Request Completed.":"在存儲數據刪除請求完成。","On Storage Data Delete Request Completed":"在存儲數據刪除請求完成","Has Storage Data.":"具有存儲數據。","Has Storage Data":"具有存儲數據","Has _PARAM1_ in Storage Data":"存儲數據中具有 _PARAM1_","Is Storage Supported.":"存儲是否受支持。","Is Storage Supported":"存儲是否受支持","Is Storage Supported _PARAM1_":"存儲是否受支持 _PARAM1_","Is Storage Available.":"存儲是否可用。","Is Storage Available":"存儲是否可用","Is Storage Available _PARAM1_":"存儲是否可用 _PARAM1_","Set Minimum Delay Between Interstitial.":"設置插播間的最小延遲。","Set Minimum Delay Between Interstitial":"設置插播間的最小延遲","Set Minimum Delay Between Interstitial _PARAM1_":"設置插播間的最小延遲 _PARAM1_","Seconds":"秒","Show Banner.":"顯示橫幅。","Show Banner":"顯示橫幅","Show Banner on _PARAM1_ with placement _PARAM2_":"在 _PARAM1_ 上顯示橫幅,位置為 _PARAM2_","Placement (optional)":"位置(可選)","Hide Banner.":"隱藏橫幅。","Hide Banner":"隱藏橫幅","Show Interstitial.":"顯示插頁廣告。","Show Interstitial":"顯示插頁廣告","Show Interstitial with placement _PARAM1_":"顯示插頁廣告,位置為 _PARAM1_","Show Rewarded.":"顯示獎勵。","Show Rewarded":"顯示獎勵","Show Rewarded with placement _PARAM1_":"顯示獎勵廣告,位置為 _PARAM1_","Check AdBlock.":"檢查廣告封鎖。","Check AdBlock":"檢查廣告封鎖","Minimum Delay Between Interstitial.":"插頁廣告間的最小延遲。","Minimum Delay Between Interstitial":"插頁廣告間的最小延遲","Banner State.":"橫幅狀態。","Banner State":"橫幅狀態","Interstitial State.":"插頁廣告狀態。","Interstitial State":"插頁狀態","Rewarded State.":"獎勵狀態。","Rewarded State":"獎勵狀態","Rewarded Placement.":"獎勵位置。","Rewarded Placement":"獎勵位置","Is Banner Supported.":"橫幅是否支持。","Is Banner Supported":"橫幅是否支持","Is Interstitial Supported.":"支持插頁廣告。","Is Interstitial Supported":"支持插頁廣告","Is Rewarded Supported.":"支持獎勵廣告。","Is Rewarded Supported":"支持獎勵廣告","On Banner State Changed.":"橫幅狀態已更改。","On Banner State Changed":"橫幅狀態已更改","On Banner Loading.":"橫幅載入中。","On Banner Loading":"橫幅載入中","On Banner Shown.":"橫幅顯示。","On Banner Shown":"橫幅顯示","On Banner Hidden.":"橫幅隱藏。","On Banner Hidden":"橫幅隱藏","On Banner Failed.":"橫幅失敗。","On Banner Failed":"橫幅失敗","On Interstitial State Changed.":"插頁狀態已更改。","On Interstitial State Changed":"插頁狀態已更改","On Interstitial Loading.":"插頁載入中。","On Interstitial Loading":"插頁載入中","On Interstitial Opened.":"插頁已開啟。","On Interstitial Opened":"插頁已開啟","On Interstitial Closed.":"插頁已關閉。","On Interstitial Closed":"插頁已關閉","On Interstitial Failed.":"插頁失敗。","On Interstitial Failed":"插頁失敗","On Rewarded State Changed.":"獎勵狀態已更改。","On Rewarded State Changed":"獎勵狀態已更改","On Rewarded Loading.":"獎勵載入中。","On Rewarded Loading":"獎勵載入中","On Rewarded Opened.":"獎勵已開啟。","On Rewarded Opened":"獎勵已開啟","On Rewarded Closed.":"獎勵已關閉。","On Rewarded Closed":"獎勵已關閉","On Rewarded Rewarded.":"獎勵已獲得。","On Rewarded Rewarded":"獎勵已獲得","On Rewarded Failed.":"獎勵失敗。","On Rewarded Failed":"獎勵失敗","On Check AdBlock Completed.":"檢查廣告攔截完成。","On Check AdBlock Completed":"On Check AdBlock Completed","Send Message.":"發送消息。","Send Message":"發送消息","Send Message _PARAM1_":"發送消息_PARAM1_","Message":"消息","Get Server Time.":"獲取服務器時間。","Get Server Time":"獲取服務器時間","Server Time.":"服務器時間。","Server Time":"服務器時間","On Get Server Time Completed.":"當獲取服務器時間完成。","On Get Server Time Completed":"當獲取服務器時間完成","Has Server Time.":"有服務器時間。","Has Server Time":"有服務器時間","Authorize Player.":"授權玩家。","Authorize Player":"授權玩家","Is Player Authorization Supported.":"玩家授權是否支持。","Is Player Authorization Supported":"玩家授權是否支持","Is Player Authorized.":"玩家是否已授權。","Is Player Authorized":"玩家是否已授權","On Authorize Player Completed.":"當授權玩家完成。","On Authorize Player Completed":"當授權玩家完成","Does Player Have Name.":"玩家是否有名稱。","Does Player Have Name":"玩家是否有名稱","Does Player Have Photo.":"玩家是否有照片。","Does Player Have Photo":"玩家是否有照片","Does Player Have Photo # _PARAM1_":"玩家是否有照片_PARAM1_","Share.":"分享。","Share":"分享","Invite Friends.":"邀請好友。","Invite Friends":"邀請好友","Join Community.":"加入社群。","Join Community":"加入社群","Create Post.":"建立郵件。","Create Post":"建立郵件","Add To Home Screen.":"新增至主畫面。","Add To Home Screen":"新增至主畫面","Add To Favorites.":"新增至最愛。","Add To Favorites":"新增至最愛","Rate.":"評分。","Rate":"評分","Is Share Supported.":"是否支援分享。","Is Share Supported":"是否支援分享","On Share Completed.":"在分享完成時。","On Share Completed":"在分享完成時","Is Invite Friends Supported.":"是否支援邀請好友。","Is Invite Friends Supported":"是否支援邀請好友","On Invite Friends Completed.":"在邀請好友完成時。","On Invite Friends Completed":"在邀請好友完成時","Is Join Community Supported.":"是否支援加入社群。","Is Join Community Supported":"是否支援加入社群","On Join Community Completed.":"在加入社群完成時。","On Join Community Completed":"在加入社群完成時","Is Create Post Supported.":"是否支援發表文章。","Is Create Post Supported":"是否支援發表文章","On Create Post Completed.":"在發表文章完成時。","On Create Post Completed":"在發表文章完成時","Is Add To Home Screen Supported.":"是否支援加入主畫面。","Is Add To Home Screen Supported":"是否支援加入主畫面","On Add To Home Screen Completed.":"在加入主畫面完成時。","On Add To Home Screen Completed":"在加入主畫面完成時","Is Add To Favorites Supported.":"是否支援加入收藏。","Is Add To Favorites Supported":"是否支援加入收藏","On Add To Favorites Completed.":"在加入收藏完成時。","On Add To Favorites Completed":"在加入收藏完成時","Is Rate Supported.":"是否支援評分。","Is Rate Supported":"是否支援評分","On Rate Completed.":"在評分完成時。","On Rate Completed":"在評分完成時","Is External Links Allowed.":"是否允許外部連結。","Is External Links Allowed":"是否允許外部連結","Leaderboards Set Score.":"排行榜設定分數。","Leaderboards Set Score":"排行榜設定分數","Leaderboards Set Score - Id: _PARAM1_, Score: _PARAM2_":"排行榜設定分數 - Id: _PARAM1_, 分數: _PARAM2_","Leaderboards Get Entries.":"排行榜獲取條目。","Leaderboards Get Entries":"排行榜獲取條目","Leaderboards Get Entries - Id: _PARAM1_":"排行榜獲取條目 - Id: _PARAM1_","Leaderboards Show Native Popup.":"排行榜顯示本地彈出視窗。","Leaderboards Show Native Popup":"排行榜顯示本地彈出視窗","Leaderboards Show Native Popup - Id: _PARAM1_":"排行榜顯示本地彈出視窗 - Id: _PARAM1_","Leaderboards Type.":"排行榜類型。","Leaderboards Type":"排行榜類型","Is Leaderboard Supported":"是否支持排行榜","The leaderboard is of type Not Available.":"排行榜類型為不可用。","The leaderboard is of type Not Available":"排行榜類型為不可用","The leaderboard is of type In Game.":"排行榜類型為遊戲內。","The leaderboard is of type In Game":"排行榜類型為遊戲內","The leaderboard is of type Native.":"排行榜類型為本地。","The leaderboard is of type Native":"排行榜類型為本地","The leaderboard is of type Native Popup.":"排行榜的類型為本地彈出視窗。","The leaderboard is of type Native Popup":"排行榜的類型為本地彈出視窗","On Leaderboards Set Score Completed.":"已完成排行榜設定分數。","On Leaderboards Set Score Completed":"已完成排行榜設定分數","On Leaderboards Get Entries Completed.":"已完成排行榜獲取條目。","On Leaderboards Get Entries Completed":"已完成排行榜獲取條目","On Leaderboards Show Native Popup Completed.":"排行榜顯示本地彈出視窗已完成。","On Leaderboards Show Native Popup Completed":"排行榜顯示本地彈出視窗已完成","Leaderboard Entries Count.":"排行榜條目數量。","Leaderboard Entries Count":"排行榜條目數量","Leaderboard Entry Id.":"排行榜條目 Id。","Leaderboard Entry Id":"排行榜條目 Id","Entry Index":"條目索引","Leaderboard Entry Name.":"排行榜條目名稱。","Leaderboard Entry Name":"排行榜條目名稱","Leaderboard Entry Photo.":"排行榜條目照片。","Leaderboard Entry Photo":"排行榜條目照片","Leaderboard Entry Rank.":"排行榜條目排名。","Leaderboard Entry Rank":"排行榜條目排名","Leaderboard Entry Score.":"排行榜條目分數。","Leaderboard Entry Score":"排行榜條目分數","Payments Purchase.":"支付購買。","Payments Purchase":"支付購買","Payments Purchase - Id: _PARAM1_":"支付購買 - Id: _PARAM1_","Payments Get Purchases.":"支付獲取購買。","Payments Get Purchases":"支付獲取購買","Payments Get Catalog.":"支付獲取目錄。","Payments Get Catalog":"支付獲取目錄","Payments Consume Purchase.":"支付消耗購買。","Payments Consume Purchase":"支付消耗購買","Payments Consume Purchase - Id: _PARAM1_":"支付消耗購買 - Id: _PARAM1_","Is Payments Supported.":"支付是否支持。","Is Payments Supported":"支付是否支持","On Payments Purchase Completed.":"支付購買完成之後。","On Payments Purchase Completed":"支付購買完成之後","On Payments Get Purchases Completed.":"支付獲取購買完成之後。","On Payments Get Purchases Completed":"支付獲取購買完成之後","On Payments Get Catalog Completed.":"支付獲取目錄完成之後。","On Payments Get Catalog Completed":"支付獲取目錄完成之後","On Payments Consume Purchase Completed.":"支付消耗購買完成之後。","On Payments Consume Purchase Completed":"支付消耗購買完成之後","Payments Last Purchase Properties Count.":"支付最後購買屬性數量。","Payments Last Purchase Properties Count":"支付最後購買屬性數量","Payments Last Purchase Property Name.":"支付最後購買屬性名稱。","Payments Last Purchase Property Name":"支付最後購買屬性名稱","Payments Last Purchase Property Value.":"支付最後購買屬性值。","Payments Last Purchase Property Value":"支付最後購買屬性值","Payments Purchases Count.":"支付購買數量。","Payments Purchases Count":"支付購買數量","Payments Purchase Properties Count.":"支付購買屬性數量。","Payments Purchase Properties Count":"支付購買屬性數量","Payments Purchase Property Name.":"支付購買屬性名稱。","Payments Purchase Property Name":"支付購買屬性名稱","Purchase Index":"購買索引","Payments Catalog Items Count.":"支付目錄項目數量。","Payments Catalog Items Count":"支付目錄項目數量","Payments Catalog Item Properties Count.":"支付目錄項目屬性數量。","Payments Catalog Item Properties Count":"支付目錄項目屬性數量","Payments Catalog Item Property Name.":"支付目錄項目屬性名稱。","Payments Catalog Item Property Name":"支付目錄項目屬性名稱","Payments Catalog Item Property Value.":"Payments Catalog Item Property Value.","Payments Catalog Item Property Value":"Payments Catalog Item Property Value","Product Index":"產品索引","Payments First Catalog Item Property Value.":"Payments First Catalog Item Property Value.","Payments First Catalog Item Property Value":"Payments First Catalog Item Property Value","Filter Property":"Filter Property","Filter Property Value":"Filter Property Value","Is Achievements Supported.":"支援成就。","Is Achievements Supported":"是否支援成就","Is Achievements Get List Supported.":"支援成就列表。","Is Achievements Get List Supported":"是否支援成就列表","Is Achievements Native Popup Supported.":"支援成就彈出視窗。","Is Achievements Native Popup Supported":"是否支援成就彈出視窗","On Achievements Unlock Completed.":"成就已解鎖。","On Achievements Unlock Completed":"當成就解鎖完成","On Achievements Get List Completed.":"成就列表已取得。","On Achievements Get List Completed":"當成就列表取得完成","On Achievements Show Native Popup Completed.":"成就彈出視窗已顯示。","On Achievements Show Native Popup Completed":"當成就彈出視窗顯示完成","Achievements Count.":"成就計數。","Achievements Count":"成就計數","Achievement Properties Count.":"成就屬性計數。","Achievement Properties Count":"成就屬性計數","Achievement Property Name.":"成就屬性名稱。","Achievement Property Name":"成就屬性名稱","Achievement Property Value.":"成就屬性值。","Achievement Property Value":"成就屬性值","Achievement Index":"成就索引","Achievements Unlock.":"解鎖成就","Achievements Unlock":"解鎖成就","Achievements Get List.":"取得成就列表","Achievements Get List":"取得成就列表","Achievements Show Native Popup.":"顯示原生成就彈出視窗","Achievements Show Native Popup":"顯示原生成就彈出視窗","Is Remote Config Supported.":"支援遠端設定。","Is Remote Config Supported":"支援遠端設定","On Remote Config Got Completed.":"當遠端設定取得完成","On Remote Config Got Completed":"已取得遠端設定","Has Remote Config Value.":"有遠端設定值","Has Remote Config Value":"有遠端設定值","Has _PARAM1_ in Remote Config":"在遠端設定中有_PARAM1_","Remote Config Value.":"遠端設定值","Remote Config Value":"遠端設定值","Send Remote Config Get Request.":"發送遠端設定取得請求","Send Remote Config Get Request":"發送遠端設定取得請求","Is Ad Block Detected.":"偵測到廣告封鎖器。","Is Ad Block Detected":"偵測到廣告封鎖器","Poki Games SDK":"Poki Games SDK","Allow games to be hosted on Poki website and display ads.":"允許遊戲在Poki網站上運行並顯示廣告。","Load Poki SDK.":"載入 Poki SDK。","Load Poki SDK":"載入 Poki SDK","Check if the Poki SDK is ready to be used.":"檢查 Poki SDK 是否準備好使用。","Poki SDK is ready":"Poki SDK 已準備就緒","Inform Poki game finished loading.":"通知 Poki 遊戲載入完畢。","Game loading finished":"遊戲載入完畢","Inform Poki game finished loading":"通知 Poki 遊戲載入完畢","Inform Poki gameplay started.":"通知 Poki 遊戲玩法開始。","Inform Poki gameplay started":"通知 Poki 遊戲玩法開始","Inform Poki gameplay stopped.":"通知 Poki 遊戲玩法結束。","Inform Poki gameplay stopped":"通知 Poki 遊戲玩法結束","Request commercial break.":"請求商業中斷。","Commercial break":"商業中斷","Request commercial break":"請求商業中斷","Request rewarded break.":"請求獎勵中斷。","Rewarded break":"獎勵中斷","Request rewarded break":"請求獎勵中斷","Create a shareable URL from parameters stored in a variable structure.":"從存儲在變量結構中的參數創建可共享的 URL。","Create shareable URL":"創建可共享的 URL","Create shareable URL from parameters _PARAM0_":"從參數 _PARAM0_ 創建可共享的 URL","Variable structure with URL parameters (example children: id, type)":"具有 URL 參數的變量結構(示例子項:id、type)","Get the last shareable URL generated by Create shareable URL.":"獲取由創建可共享的 URL 生成的最後一個可共享 URL。","Last shareable URL":"最後可分享的 URL","Read a URL parameter from Poki URL or the current URL.":"從 Poki URL 或當前 URL 讀取 URL 參數。","Get URL parameter":"獲取 URL 參數","Parameter name (without the gd prefix)":"參數名稱(不包含 gd 前綴)","Open an external URL via Poki SDK.":"通過 Poki SDK 打開外部 URL。","Open external link":"打開外部鏈接","Open external link _PARAM0_":"打開外部鏈接 _PARAM0_","URL to open":"要打開的 URL","Move the Poki Pill on mobile.":"在移動設備上移動 Poki Pill。","Move Poki Pill":"移動 Poki Pill","Move Poki Pill to _PARAM0_ percent from top with _PARAM1_ px offset":"將 Poki Pill 移動到距頂部 _PARAM0_ 百分比,偏移 _PARAM1_ px","Top percent (0-50)":"頂部百分比(0-50)","Additional pixel offset":"額外的像素偏移量","Measure an event for analytics.":"測量事件以進行分析。","Measure event":"測量事件","Measure category _PARAM0_ what _PARAM1_ action _PARAM2_":"測量類別 _PARAM0_ 的 _PARAM1_ 行動 _PARAM2_","Category (for example: level, tutorial, drawing)":"類別(例如:關卡、教程、繪圖)","What is measured (for example: 1, de_dust, skip-level)":"測量內容(例如:1,de_dust,跳過關卡)","Action (for example: start, complete, fail)":"行動(例如:開始、完成、失敗)","Checks if a commercial break is playing.":"檢查是否正在播放商業中斷。","Commercial break is playing":"正在播放商業中斷","Checks if a rewarded break is playing.":"檢查是否正在播放獎勵中斷。","Rewarded break is playing":"正在播放獎勵中斷","Checks if a commercial break just finished playing.":"檢查商業中斷是否剛剛播放完畢。","Commercial break just finished playing":"商業中斷剛剛播放完畢","Checks if a rewarded break just finished playing.":"檢查獎勵中斷是否剛剛播放完畢。","Rewarded break just finished playing":"獎勵中斷剛剛播放完畢","Checks if player should be rewarded after a rewarded break finished playing.":"檢查玩家在獎勵中斷結束後應該有獎勵。","Should reward player":"應該給予玩家獎勵","Pop-up":"彈出","Display pop-ups to alert, ask confirmation, and let user type a response in text box.":"顯示彈出視窗以警告、要求確認以及讓用戶在文本框中輸入回應。","The response to a pop-up message is filled.":"填寫彈出消息的回應。","Existing prompt response":"現有提示回應","Response from the pop-up prompt is filled":"填寫彈出提示的回應","Return the text response by user to prompt.":"返回用戶對提示的文字回應。","Response to prompt":"回應提示","Open prompt with message : _PARAM1_ with ID: _PARAM2_":"使用信息_PARAM1_和 ID:_PARAM2_打開提示。","Displays a prompt in a pop-up that prompts the user for input. This action return the text input or the false boolean if canceled.":"在彈出窗口中顯示提示,提示用戶輸入。此操作返回用戶的文字輸入或如果取消則返回 false 布爾值。","Prompt":"提示","Open a prompt pop-up box with message: _PARAM1_ (placeholder: _PARAM2_)":"打開一個提示彈出框,顯示消息:_PARAM1_(佔位符:_PARAM2_)","Prompt message":"提示消息","Input placeholder":"輸入占位符","Ask confirmation of user with a message in a dialog box with an OK button, and a Cancel button.":"以對話框顯示一則消息,要求用戶進行確認,並包含「確定」和「取消」按鈕。","Confirm":"確認","Open a confirmation pop-up box with message: _PARAM1_":"打開一個確認彈出框,顯示消息:_PARAM1_","Confirmation message":"確認消息","The text to display in the confirm box.":"在確認框中顯示的文本。","Check if a confirmation was accepted.":"檢查確認是否已接受。","Pop-up message confirmed":"彈出消息已確認","Pop-up message is confirmed":"彈出消息已經確認","Displays an alert box with a message and an OK button in a pop-up window.":"在彈出窗口中顯示帶有消息和「確定」按鈕的警告框。","Alert":"警告","Open an alert pop-up box with message: _PARAM1_":"打開一個警告彈出框,顯示消息:_PARAM1_","Alert message":"警告消息","RTS-like unit selection":"RTS風格的單位選擇","Allow player to select units by clicking on them or dragging a selection box.":"允許玩家通過點擊或拖動進行單位選擇。","Allow player to select units by clicking on them or dragging a selection box":"允許玩家通過點擊或拖動選擇框來選擇單位。","Allow player to select _PARAM1_ with _PARAM7_ mouse button (or touch). Draw a selection box using _PARAM2_ on Layer: _PARAM3_ with Z order: _PARAM4_. Hold _PARAM5_ to add units and _PARAM6_ to remove units":"允許玩家使用 _PARAM7_ 鼠標按鈕(或觸摸)選擇 _PARAM1_。在圖層 _PARAM3_ 上使用 _PARAM2_ 繪製選擇框,並設置 Z 軸排序為 _PARAM4_。按住 _PARAM5_ 添加單位,按住 _PARAM6_ 移除單位","Units":"單位","Object (or object group) that can be Selected":"可選擇的對象(或對象組)","Selection box":"選擇框","Edit shape painter properties to change the appearance of this selection box":"編輯形狀繪製器屬性以更改選擇框的外觀","Layer (of selection box)":"(選擇框的)圖層","Must be the same layer as the units being selected":"必須與正在選擇的單位所在的圖層相同","Z order (of selection box)":"(選擇框的)Z 軸排序","Z order of the selection box":"選擇框的 Z 軸排序","Additive select key":"附加選擇鍵","Hold this key to add units to selection":"按住此鍵以將單位添加到選擇中","Subtractive select key":"減去選擇鍵","Hold this key to remove units from selection":"按住此鍵以從選擇中移除單位","Mouse button used to select units":"用於選擇單位的鼠標按鈕","Check if the unit is \"Preselected\".":"檢查單位是否\"預選\"。","Is unit \"Preselected\"":"單位是否\"預選\"","_PARAM1_ is \"Preselected\"":"_PARAM1_ is u201cPreselected u201d","Check if the unit is \"Selected\".":"檢查單位是否\"已選擇\"。","Is unit \"Selected\"":"單位是否\"已選擇\"","_PARAM1_ is \"Selected\"":"_PARAM1_ is u201cSelected u201d","Set unit as \"Preselected\".":"將單位設定為\"預選\"。","Set unit as \"Preselected\"":"將單位設定為\"預選\"","Set _PARAM1_ as \"Preselected\": _PARAM2_":"Set _PARAM1_ as u201cPreselected u201d: _PARAM2_","Set unit as \"Selected\".":"將單位設定為\"已選擇\"。","Set unit as \"Selected\"":"將單位設定為\"已選擇\"","Set _PARAM1_ as \"Selected\": _PARAM2_":"Set _PARAM1_ as u201cSelected u201d: _PARAM2_","Assign a unique ID to each \"Selected\" unit. This should be ran every time there is a change in the number of \"Selected\" units.":"為每個\"已選擇\"單位分配唯一的ID。 每次\"已選擇\"單位數量變化時都應運行此操作。","Assign a unique ID to each \"Selected\" unit":"為每個\"已選擇\"單位分配唯一的ID","Assign a unique ID to _PARAM1_ that are \"Selected\"":"Assign a unique ID to _PARAM1_ that are u201cSelected u201d","Provides the total number of _PARAM1_ that are currently \"Selected\".":"Provides the total number of _PARAM1_ that are currently u201cSelected u201d.","Total number of \"Selected\" units":"已選擇的單位總數","Unit":"單位","Enable control groups using default controls.":"使用默認控件啟用控制組。","Enable control groups using default controls":"使用默認控件啟用控制組","Assign _PARAM1_ to control groups using default controls (Ctrl + number)":"Assign _PARAM1_ to control groups using default controls (Ctrl + number)","Object (or object group) that will be assigned to a control group":"分配給控制組的對象(或對象組)","Control group this unit is assigned to.":"這個單元所分配的控制組。","Control group this unit is assigned to":"分配到的控制組","Check if a unit is assigned to a control group.":"檢查一個單元是否被分配到一個控制組。","Check if a unit is assigned to a control group":"檢查一個單元是否被分配到一個控制組","_PARAM1_ is assigned to control group _PARAM2_":"_PARAM1_ 被分配到控制組 _PARAM2_","Control group ID":"控制組 ID","Assign unit to a control group.":"分配單元到控制組。","Assign unit to a control group":"分配單元到控制組","Assign _PARAM1_ to control group _PARAM2_":"分配 _PARAM1_ 到控制組 _PARAM2_","Unit ID of a selected unit.":"所選單元的單元 ID。","Unit ID of a selected unit":"所選單元的單元 ID","Read pixels":"讀取像素","Read the values of pixels on the screen.":"讀取屏幕上的像素值。","Return the alpha component of the pixel at the specified position.":"返回指定位置像素的透明通道成分。","Read pixel alpha":"讀取像素透明度","Record":"記錄","Actions to record the game and players download the clips. Works on desktop, and in the browser.":"記錄遊戲的動作,並讓玩家下載片段。在桌面和瀏覽器中均可使用。","Start the recording.":"開始錄製。","Start recording":"開始錄製","End the recording.":"結束錄製。","Stop recording":"停止錄製","Stop the recording":"停止錄製","Pause recording.":"暫停錄製。","Pause recording":"暫停錄製","Resume recording.":"恢復錄製。","Resume recording":"恢復錄製","Save recording to the file system on destop, or to the downloads folder for web. Always ask for permission to save a file.":"將錄製保存到桌面上的文件系統,或者保存到 Web 的下載文件夾。一律請求保存文件時請求權限。","Save recording":"保存錄製","Save recording to _PARAM1_ as _PARAM2_":"將錄製保存到 _PARAM1_ 作為 _PARAM2_","File location, set using a FileSystem path e.g. FileSystem::DesktopPath() (only used for desktop saves)":"檔案位置,使用文件系統路徑設置,例如 FileSystem::DesktopPath()(僅用於桌面保存)","Name to save file as":"要保存的檔案名稱","Returns the current status of the reccorder: inactive (not recording), recording, or paused.":"返回錄製器的當前狀態:無效(未錄製)、錄製或暫停。","Get current state":"獲取當前狀態","Get the current framerate.":"獲取當前幀數。","Get frame rate":"獲取幀率","Set frame rate to _PARAM1_":"設置幀率為_PARAM1_","Set the frame rate, must be set before starting a recording. Defaults to the min FPS set in the game properties.":"設置幀率,必須在開始錄製之前設置。默認值為遊戲屬性中設置的最低 FPS。","Set frame rate":"設置幀率","Recommended fps for video: 25, 30, 60, for GIFs use 5, 10, 20":"建議的視頻幀率:25、30、60,GIF 使用 5、10、20。","Returns the current video bit rate per second.":"返回每秒當前的視頻比特率。","Get video bit rate per second":"獲取每秒視頻比特率","Set the video bit rate, must be set before starting a recording. Defaults to 2500000.":"設置視頻位速,必須在開始錄製之前設置。默認值為 2500000。","Set video bit rate":"設置視頻比特率","Set the video bit rate to _PARAM1_":"設置視頻位速為_PARAM1_","video bits per second":"每秒視頻比特","Returns the audio bit rate per second. Defaults to 128000 if not set.":"返回每秒音頻位速。若未設置,默認為 128000。","Set audio bit rate":"設置音頻比特率","Set the audio bit rate to _PARAM1_":"設置音頻位速為_PARAM1_","audio bits per second":"音頻每秒比特","Returns the audio bit rate per second.":"返回音頻每秒比特率。","Get audio bit rate per second":"獲取每秒音頻比特率","Set the file format, if a selected file format is unsupported on the users platform a supported one will be picked by deafult.":"設置文件格式,若所選文件格式在用戶平台上不受支持,則默認選擇支持的文件格式。","Set file format":"設置文件格式","Set file format to _PARAM1_":"設置文件格式為_PARAM1_","Recording format":"錄製格式","Returns the current video format.":"返回當前的視頻格式。","Get codec":"獲取編解碼器","Set the video codec, if a selected codec is unsupported on the users platform a supported one will be picked by deafult.":"設置視頻編解碼器,若所選編解碼器在用戶平台上不受支持,則默認選擇支持的編解碼器。","Set codec":"設置編解碼器","Set video codec _PARAM1_":"設置視頻編解碼器為_PARAM1_","codec":"編解碼器","Returns the current video codec.":"返回當前的視頻編解碼器。","Get video codec":"獲取視頻編解碼器","When an error occurs this method will return what type of error it is.":"當錯誤發生時,此方法將返回錯誤類型。","Error type":"錯誤類型","Check if an error has occurred.":"檢查是否發生錯誤。","When an errror has occurred":"當發生錯誤時","When an error has occurred":"當錯誤發生時","Check if a recording has just been paused.":"檢查錄製是否剛剛暫停。","When recording has paused":"當錄製暫停時","Check if a recording has just been resumed.":"檢查錄製是否剛剛恢復。","When recording has resumed":"當錄製恢復時","Check if recording has just started.":"檢查錄製是否剛開始。","When recording has started":"當錄製開始時","Check if recording has just stopped.":"檢查錄製是否剛剛停止。","When recording has stopped":"當錄製停止時","Check if recording has just been saved.":"檢查錄製是否剛剛保存。","When recording has saved":"當錄製保存時","When recording has been saved":"當錄製已保存","Check if the specified format is available on the users device. To avoid unsupported formats pick commons ones like MP4 or WebM.":"檢查設備上是否支持指定格式。為了避免不支持的格式,請選擇常用的格式,如MP4或WebM。","Is format supported on user device":"格式是否在用戶設備上受支持","Check if _PARAM1_ is available on the users device":"檢查用戶設備上是否有_PARAM1_","Select a common format for the best results":"選擇一個常用格式以獲得最佳結果","Get the current GIF quality.":"獲取當前 GIF 品質。","Set the GIF quality, must be set before starting a recording. Defaults to 10.":"設置 GIF 品質,需要在開始錄製之前設置。默認值為 10。","Set GIF quality":"設置 GIF 品質","Set the GIF quality to _PARAM1_":"將 GIF 品質設置為_PARAM1_","Quality":"品質","Returns whether or not dithering is enabled for GIFs.":"返回 GIF 是否啟用抖動。","Enable dithering in GIF, must be set before starting a recording. Defaults to false.":"啟用 GIF 抖動,需要在開始錄製之前設置。默認為 false。","Set GIF Dithering":"設置 GIF 抖動","Enable dithering _PARAM1_":"啟用抖動_PARAM1_","Dithering":"抖動","Rectangular movement":"矩形移動","Move objects in a rectangular pattern.":"在矩形模式中移動物件。","Distance from an object to the closest edge of a second object.":"對象到第二個對象的最近邊緣的距離。","Distance from an object to the closest edge of a second object":"對象到第二個對象的最近邊緣的距離","Distance from _PARAM1_ to the closest edge of _PARAM2_":"從_PARAM1_到_PARAM2_的最近邊緣的距離","Moving object":"移動對象","Update rectangular movement to follow the border of an object. Run once, or every time the center object moves.":"更新矩形運動以跟隨對象的邊框。運行一次或每次中心對象移動時。","Update rectangular movement to follow the border of an object":"更新矩形運動以跟隨對象的邊框","Update rectangular movement of _PARAM1_ to follow the border of _PARAM3_. Position on border: _PARAM4_":"更新_PARAM1_的矩形運動以跟隨_PARAM3_的邊框。在邊界上的位置:_PARAM4_","Rectangle Movement (required)":"矩形運動(必需)","Position on border":"在邊界上的位置","Move to the nearest corner of the center object.":"移動到中心對象的最近角落。","Move to the nearest corner of the center object":"移動到中心對象的最近角落","Move _PARAM1_ to the nearest corner of _PARAM3_":"將_PARAM1_移動到_PARAM3_的最近角落","Dimension":"尺寸","Clockwise":"順時針","Horizontal edge duration":"水平邊緣持續時間","Vertical edge duration":"垂直邊緣持續時間","Initial position":"初始位置","Teleport the object to a corner of the movement rectangle.":"將物體傳送到運動矩形的一個角落。","Teleport at a corner":"傳送到一個角落","Set the position of _PARAM0_ at the _PARAM2_ of the rectangle loop":"調整_Param0_的位置到矩形循環的_Param2_。","Corner":"角落","Return the perimeter of the movement rectangle.":"返回運動矩形的周長。","Perimeter":"周長","Return the time the object takes to go through the whole rectangle (in seconds).":"返回物體穿越整個矩形所需的時間(以秒為單位)。","Return the time the object takes to go through a horizontal edge (in seconds).":"返回物體穿越水平邊緣所需的時間(以秒為單位)。","Return the time the object takes to go through a vertical edge (in seconds).":"返回物體穿越垂直邊緣所需的時間(以秒為單位)。","Return the rectangle width.":"返回矩形的寬度。","Return the rectangle height.":"返回矩形的高度。","Return the left bound of the movement.":"返回運動的左邊界。","Return the top bound of the movement.":"返回運動的上邊界。","Return the right bound of the movement.":"返回運動的右邊界。","Return the bottom bound of the movement.":"返回運動的下邊界。","Change the left bound of the rectangular movement.":"更改矩形運動的左邊界。","Change the movement left bound of _PARAM0_ to _PARAM2_":"將_Param0_的運動左邊界修改為_Param2_。","Change the top bound of the rectangular movement.":"更改矩形運動的上邊界。","Change the movement top bound of _PARAM0_ to _PARAM2_":"更改_PARAM0_的移動區間頂部到_PARAM2_","Change the right bound of the rectangular movement.":"更改矩形移動的右邊界。","Change the movement right bound of _PARAM0_ to _PARAM2_":"更改_PARAM0_的移動區間右邊界到_PARAM2_","Change the bottom bound of the rectangular movement.":"更改矩形移動的底部邊界。","Change the movement bottom bound of _PARAM0_ to _PARAM2_":"更改_PARAM0_的移動區間底部到_PARAM2_","Change the time the object takes to go through a horizontal edge (in seconds).":"更改物件通過水平邊緣的時間(秒)。","Change the time _PARAM0_ takes to go through a horizontal edge to _PARAM2_":"更改時間_PARAM0_通過水平邊緣到_PARAM2_","Change the time the object takes to go through a vertical edge (in seconds).":"更改物件通過垂直邊緣的時間(秒)。","Change the time _PARAM0_ takes to go through a vertical edge to _PARAM2_":"更改時間_PARAM0_通過垂直邊緣到_PARAM2_","Change the direction to clockwise or counter-clockwise.":"將方向更改為順時針或逆時針。","Use clockwise direction for _PARAM0_: _PARAM2_":"使用順時針方向代替_PARAM0_:_PARAM2_","Change the easing function of the movement.":"更改移動的緩動功能。","Change the easing of _PARAM0_ to _PARAM2_":"更改_PARAM0_的緩動為_PARAM2_","Toggle the direction to clockwise or counter-clockwise.":"切換方向為順時針或逆時針。","Toggle direction":"切換方向","Toogle the direction of _PARAM0_":"切換_PARAM0_的方向","Check if the object is moving clockwise.":"檢查物件是否順時針移動。","Is moving clockwise":"正在順時針移動","_PARAM0_ is moving clockwise":"_PARAM0_正在順時針移動","Check if the object is moving to the left.":"檢查物件是否向左移動。","Is moving left":"正在向左移動","_PARAM0_ is moving to the left":"_PARAM0_正在向左移動","Check if the object is moving up.":"檢查物件是否向上移動。","Is moving up":"正在向上移動","_PARAM0_ is moving up":"_PARAM0_正在向上移動","Object is moving to the right.":"物件正在向右移動。","Is moving right":"正在向右移動","_PARAM0_ is moving to the right":"_PARAM0_正在向右移動","Check if the object is moving down.":"檢查物件是否向下移動。","Is moving down":"正在向下移動","_PARAM0_ is moving down":"_PARAM0_正在向下移動","Object is on the left side of the rectangle.":"物件在矩形的左側。","Is on left":"在左側","_PARAM0_ is on the left side":"_PARAM0_在左側","Object is on the top side of the rectangle.":"長方形的上側有物體。","Is on top":"在上側","_PARAM0_ is on the top side":"_PARAM0_ 在上側","Object is on the right side of the rectangle.":"長方形的右側有物體。","Is on right":"在右側","_PARAM0_ is on the right side":"_PARAM0_ 在右側","Object is on the bottom side of the rectangle.":"長方形的下側有物體。","Is on bottom":"在下側","_PARAM0_ is on the bottom side":"_PARAM0_ 在下側","Return the duration between the top-left vertex and the top-right one.":"返回左上頂點到右上頂點的持續時間。","Duration to top right":"到右上的持續時間","Return the duration between the top-left vertex and the bottom-right one.":"返回左上頂點到右下頂點的持續時間。","Duration to bottom right":"到右下的持續時間","Return the duration between the top-left vertex and the bottom-left one.":"返回左上頂點到左下頂點的持續時間。","Duration to bottom left":"到左下的持續時間","Return the ratio between the covered distance from the last vertex and the edge length (between 0 and 1).":"返回從最後一個頂點到邊緣長度的已覆蓋距離之比(介於0和1之間)。","Progress on edge":"邊緣上的進度","Return the X position of the current edge origin.":"返回當前邊緣起點的X位置。","Edge origin X":"邊緣起點的X","Return the Y position of the current edge origin.":"返回當前邊緣起點的Y位置。","Edge origin Y":"邊緣起點的Y","Return the X position of the current edge target.":"返回當前邊緣目標的X位置。","Edge target X":"邊緣目標的X","Return the Y position of the current edge target.":"返回當前邊緣目標的Y位置。","Edge target Y":"邊緣目標的Y","Return the time from the top-left vertex.":"返回從左上頂點的時間。","Current time":"目前時間","Return the covered length from the top-left vertex or the bottom-right one.":"返回從左上頂點或右下頂點的覆蓋長度。","Half Current length":"一半目前的長度","Return the displacement on the X axis from the top-left vertex.":"返回從左上頂點的X軸位移。","Return the displacement on the Y axis from the top-left vertex.":"返回從左上頂點的Y軸位移。","Rectangular flood fill":"矩形填充","Create objects as a grid to cover a rectangular area or an other object.":"創建網格物件以覆蓋矩形區域或其他物件。","Create fill objects that cover the rectangular area of target objects.":"創建填充對象,覆蓋目標對象的矩形區域。","Create objects to flood fill other objects":"創建對象來泛濫填充其他對象","Create _PARAM2_ to cover _PARAM1_ with _PARAM3_ pixels between columns and _PARAM4_ pixels between rows on layer: _PARAM5_ at Z-order: _PARAM6_":"使用_PARAM3_像素之間的列和_PARAM4_像素之間的行,創建_PARAM2_以覆蓋_PARAM1_在層:_PARAM5_的矩形填充對象,Z-排序為:_PARAM6_","Rectangular area that will be covered by fill objects":"將被填充物件覆蓋的矩形區域","Fill object":"填充物件","Object that is created to cover the rectangular area of target objects":"創建以覆蓋目標物件矩形區域的物件","Space between columns (pixels)":"列之間的空間(像素)","Space between rows (pixels)":"行之間的空間(像素)","Z order":"Z順序","Create multiple copies of an object.":"建立物件的多重副本","Create objects to flood fill a rectanglular area":"建立物件以填滿矩形區域","Create _PARAM2_ columns and _PARAM3_ rows of _PARAM1_ with top-left corner at _PARAM4_ ; _PARAM5_ and _PARAM6_ pixels between columns and _PARAM7_ pixels between rows on layer: _PARAM8_ at Z-order: _PARAM9_":"在圖層[_PARAM8_]的Z順序:_PARAM9_,在top-left的角落創建_PARAM2_列和_PARAM3_行的_PARAM1_,列之間有_PARAM5_個像素行之間有_PARAM7_個像素。","Number of columns (default: 1)":"列數(預設:1)","Number of rows (default: 1)":"行數(預設:1)","Top-left starting position (X) (default: 0)":"top-left開始位置(X)(預設:0)","Top-left starting position (Y) (default: 0)":"top-left開始位置(Y)(預設:0)","Amount of space between columns (default: 0)":"列之間的空間數(預設:0)","Amount of space between rows (default: 0)":"行之間的空間數(預設:0)","Regular Expressions":"正則表達式","Functions for using regular expressions to manipulate strings.":"使用正則表達式操縱字符串的函數。","Checks if a string matches a regex pattern.":"檢查字符串是否與正則表達式模式匹配。","String matches regex pattern":"字符串匹配正則表達式模式","_PARAM3_ matches pattern _PARAM1_ (flags: _PARAM2_)":"_PARAM3_與模式_PARAM1_匹配(標志:_PARAM2_)","The pattern to check for":"要檢查的模式","RegEx flags":"正則表達式標誌","The string to check for a pattern":"要檢查模式的字符串","Split a string by each part of it that matches a regex pattern and stores each part into an array.":"按照與正則表達式模式匹配的字符串拆分字符串並將每個部分存儲到數組中。","Split a string into an array":"將字符串拆分為數組","Split string _PARAM3_ into array _PARAM4_ by pattern _PARAM1_ (flags: _PARAM2_)":"按照_PATTERN1_(標誌:_PARAM2_)將字符串_PARAM3_拆分為數組_PARAM4_","The pattern to split by":"分隔模式","The string to split by the pattern":"按照模式拆分的字符串","The name of the variable to store the result in":"將所有與正則表達式模式匹配的匹配項構建為數組。","Builds an array containing all matches for a regex pattern.":"查找正則表達式模式的所有匹配項","Find all matches for a regex pattern":"將_PATTERN1_與模式_PARAM1_的所有匹配項存儲在_PARAM4_中(標志:_PARAM2_)","Store all matches of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"使用模式_PARAM1_中的所有匹配項存儲在_PARAM4_中(標誌:_PARAM2_)","Pattern":"模式","String":"字符串","Builds an array containing the first match for a regex pattern followed by the regex groups.":"建立一個包含第一個匹配的正則表達式模式及其正則表達式組的數組。","Find first match with groups for a regex pattern":"尋找第一個帶有正則表達式模式組的匹配","Store first match and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"使用模式_PARAM1_中的第一個匹配及其組_PARAM3_ (_PARAM3_的標志:_PARAM2_)存儲於_PARAM4_中。","Flags":"標志","Variable name":"變量名稱","Builds an array containing for each regex pattern match an array with the match followed by its regex groups.":"建立一個包含每個正則表達式模式匹配的數組,數組中包含匹配及其正則表達式組。","Find all matches with their groups for a regex pattern":"找到帶有其組的正則表達式模式的所有匹配","Store all matches and groups of _PARAM3_ with pattern _PARAM1_ in _PARAM4_ (flags: _PARAM2_)":"存儲_PARAM3_中的第一個匹配及其組_PARAM1_ (_PARAM3_的標志:_PARAM2_)在_PARAM4_中。","Replaces a part of a string that matches a regex pattern with another string.":"將與正則表達式模式匹配的字符串部分替換為另一個字符串。","Replace pattern matches with a string":"用字符串替換模式匹配","Execute _PARAM1_ with the following _PARAM2_ for a match in _PARAM3_, and store the result in _PARAM4_":"在_PARAM3_中的匹配中使用_PARAM1_,並使用以下_PARAM2_將結果存儲在_PARAM4_中。","The string to search for pattern matches in":"要在其中搜索模式匹配的字符串","The string to replace the matching patterns with":"用於替換匹配模式的字符串","Finds a regex pattern in a string, and returns the index of the position of the match, or -1 if it doesn't match the pattern.":"查找字符串中的正則表達式模式,並返回匹配位置的索引,如果不匹配則返回-1。","Find a pattern":"查找一個模式","Sprite Snapshot":"精靈快照","Renders an object, layer, scene or an area of a scene and puts the resulting image into a sprite.":"渲染對象,圖層,場景或場景區域,並將生成的圖像放入精靈中。","Renders an object and puts the rendered image into a sprite object.":"渲染一个对象,并将渲染后的图像放入精灵对象中。","Render an object into a sprite":"將對象渲染成精靈","Render _PARAM1_ into sprite _PARAM2_":"將_PARAM1_渲染為精靈_PARAM2_","The object to render":"要被渲染的對象","The sprite to render to":"要渲染的精靈","Renders a layer and puts the rendered image into a sprite object.":"渲染一个层,并将渲染后的图像放入精灵对象中。","Render a layer into a sprite":"將一個圖層渲染到精靈","Render layer _PARAM1_ into sprite _PARAM2_":"將圖層_PARAM1_渲染到精靈_PARAM2_","The layer to render":"要渲染的圖層","Renders a scene and puts the rendered image into a sprite object.":"將一個場景渲染到精靈","Render a scene into a sprite":"將當前場景渲染到精靈_PARAM1_","Render the current scene into sprite _PARAM1_":"將場景的指定區域渲染到精靈","Renders a defined area of a scene and puts the rendered image into a sprite object.":"渲染場景中的一個指定區域並將渲染的圖像放入精靈對象。","Render an area of a scene into a sprite":"在精靈中渲染場景的區域","Render the area of a current scene into Sprite: _PARAM1_, from OriginX: _PARAM2_, OriginY: _PARAM3_, with Width: _PARAM4_, Height: _PARAM5_":"將當前場景的區域渲染到精靈:_PARAM1_,從OriginX:_PARAM2_,OriginY:_PARAM3_,寬度:_PARAM4_,高度:_PARAM5_","Origin X position of the render area":"渲染區域的原點X位置","Origin Y Position of the render area":"渲染區域的原點Y位置","Width of the are to render":"要渲染的區域寬度","Height of the area to render":"要渲染的區域高度","Repeat every X seconds":"每X秒重複一次","Trigger an event every X seconds.":"每X秒觸發一個事件。","Triggers every X seconds.":"每隔X秒觸發一次。","Repeat with a scene timer":"使用場景計時器重複","Repeat every _PARAM2_ seconds using timer _PARAM1_":"使用計時器_PARAM1_每隔_PARAM2_秒重複。","Timer name used to loop":"用於循環的計時器名稱","Duration in seconds between each repetition":"每次重複間隔的持續時間(秒)","the number of times the timer has repeated.":"計時器重複的次數。","Repetition number of a scene timer":"場景計時器重複次數","Repetition number of timer _PARAM1_":"計時器_PARAM1_的重複次數","Triggers every X seconds X amount of times.":"每隔X秒觸發X次。","Repeat with a scene timer X times":"使用場景計時器重複X次","Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_":"使用計時器_PARAM1_每隔_PARAM2_秒重複_PARAM3_次","The limit of loops":"循環限制","Maximum nuber of repetition (-1 to repeat forever).":"重複次數上限(-1為無限重複)","Reset repetition count of a scene timer.":"重置場景計時器的重複次數","Reset repetition count of a scene timer":"重置場景計時器的重複次數","Reset repetition count for timer _PARAM1_":"重置計時器_PARAM1_的重複次數","Allows to repeat an object timer every X seconds.":"允許每隔X秒重複一個物件計時器","The name of the timer to repeat":"重複的計時器名稱","The time between each trigger (in seconds)":"每次觸發之間的時間(秒)","How many times should the timer trigger? -1 for forever.":"計時器應該觸發多少次?-1表示無限次。","An internal counter":"內部計數器","Repeat with an object timer":"使用物體計時器重複","Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_":"使用 _PARAM0_ 的計時器 _PARAM2_ 每隔 _PARAM3_ 秒重複","Repetition number of an object timer":"物體計時器的重複次數","Repetition number of timer _PARAM2_":"計時器 _PARAM2_ 的重複次數","Repeat with an object timer X times":"使用物體計時器重複X次","Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_":"使用計時器_PARAM2_ of _PARAM0_ 每_PARAM3_秒重複_PARAM4_次","Reset repetition count of an object timer.":"重置物體計時器的重複次數。","Reset repetition count of an object timer":"重置物體計時器的重複次數","Reset repetition count for timer _PARAM2_ of _PARAM0_":"重置_PARAM0_的計時器_PARAM2_的重複次數","Triggers every X seconds, where X is defined in the behavior properties.":"每X秒觸發一次,其中X是在行為屬性中定義的。","Repeat every X seconds (deprecated)":"每X秒重複(已棄用)","Recurring timer _PARAM1_ of _PARAM0_ has triggered":"已觸發_PARAM0_的循環計時器_PARAM1_","Pauses a recurring timer.":"暫停循環計時器。","Pause a recurring timer (deprecated)":"暫停循環計時器(已棄用)","Pause recurring timer _PARAM1_ of _PARAM0_":"暫停_PARAM0_的循環計時器_PARAM1_","Resumes a paused recurring timer.":"恢復暫停的循環計時器。","Resume a recurring timer (deprecated)":"恢復循環計時器(已棄用)","Resume recurring timer _PARAM1_ of _PARAM0_":"恢復_PARAM0_的循環計時器_PARAM1_","Allows to trigger the recurring timer X times again.":"允許再次觸發循環計時器X次。","Reset the limit (deprecated)":"重置上限(已棄用)","Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again":"允許再次觸發_PARAM1_的循環計時器_PARAM0_X次。","Rolling counter":"滾動計數器","Smoothly change a counter value in a text object.":"平滑地更改文本對象中的計數器值。","Smoothly changes a counter value in a text object.":"在文本對象中平滑更改計數器值。","Animation duration":"動畫持續時間","Increment":"增量","the value of the counter.":"計數器的數值。","Counter value":"計數器數值","the counter value":"計數器數值","Directly display the counter value without playing the animation.":"直接顯示計數器數值,而不播放動畫。","Jump to the counter animation end":"跳轉到計數器動畫結束","Jump to the counter animation end of _PARAM0_":"跳轉到 _PARAM0_ 的計數器動畫結束","Room-based camera movement":"基於房間的攝像機運動","Move and zoom camera to the room object that contains the trigger object (usually the player).":"將相機移動並縮放到包含觸發對象(通常是玩家)的房間對象。","Move and zoom camera to the room object that contains the trigger object (player)":"將相機移動並縮放到包含觸發對象(玩家)的房間對象中","Move camera to room object _PARAM1_ that contains trigger object _PARAM2_ (Layer: _PARAM3_, Lerp speed: _PARAM4_, Max zoom: _PARAM5_, Min zoom: _PARAM6_, Border buffer: _PARAM7_px)":"將攝影機移動到包含觸發器物件_PARAM2_的房間物件_PARAM1_(層:_PARAM3_,插值速度:_PARAM4_,最大縮放:_PARAM5_,最小縮放:_PARAM6_,邊界緩衝:_PARAM7_px)","Room object":"房間對象","Room objects are used to mark areas that should be seen by the camera.":"房間物件用於標記攝影機應該看到的區域。","Trigger object (player)":"觸發器物件(玩家)","When the Trigger Object touches a new Room Object, the camera will move to the new room":"當觸發器物件觸摸到新的房間物件時,攝影機將移動到新的房間。","Lerp speed":"插值速度","Range: 0 to 1":"範圍:0至1","Maximum zoom":"最大縮放","Minimum zoom":"最小縮放","Outside buffer (pixels)":"外部緩衝(像素)","Minimum extra space displayed around each side the room":"在每個房間的每一側顯示的最小額外空間","Check if trigger object (usually the player) has entered a new room on this frame.":"檢查觸發器物件(通常是玩家)是否在此幀中進入了新的房間。","Check if trigger object (player) has entered a new room":"檢查觸發器物件(玩家)是否進入了新的房間","_PARAM1_ has just entered a new room":"_PARAM1_剛進入了新的房間","Check if camera is zooming (requires the use of \"Move and zoom camera\" action in this extension).":"檢查攝影機是否正在縮放(需要在此擴展中使用\"移動和縮放攝影機\"操作)。","Check if camera is zooming":"檢查攝影機是否正在縮放","Camera is zooming":"攝影機正在縮放","Check if camera is moving (requires the use of \"Move and zoom camera\" action in this extension).":"檢查攝影機是否正在移動(需要在此擴展中使用\"移動和縮放攝影機\"操作)。","Check if camera is moving":"檢查攝影機是否正在移動","Camera is moving":"攝影機正在移動","Animated Score Counter":"帶有動畫的分數計數器","An animated score counter with an icon and a customisable font.":"具有圖標和可自定義字體的帶有動畫的分數計數器。","Shake objects with translation, rotation and scale.":"具有平移,旋轉和比例的搖動物件。","Shake object (position, angle, scale)":"搖動物件(位置,旋轉,比例)","Shake an object, using one or more ways to shake (position, angle, scale). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"震動物體,使用一種或多種方式進行震動(位置、角度、比例)。確保在開始新的震動前“停止震動”,如果它使用不同的參數。","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_":"物體 _PARAM0_ 震動 _PARAM2_ 秒。修改X軸上的位置振幅 _PARAM3_,Y軸上的位置振幅 _PARAM4_,角度旋轉振幅 _PARAM5_,比例振幅 _PARAM6_。震動間間隔 _PARAM7_ 秒。持續震動直到停止:_PARAM8_","Duration of shake (in seconds) (Default: 0.5)":"震動持續時間(秒)(默認值:0.5)","Amplitude of postion shake in X direction (in pixels) (For example: 5)":"X方向位置震動振幅(以像素為單位)(例如:5)","Amplitude of position shake in Y direction (in pixels) (For example: 5)":"Y方向位置震動振幅(以像素為單位)(例如:5)","Use a negative number to make the single-shake move in the opposite direction.":"使用負數使單次震動向相反方向移動。","Amplitude of angle rotation shake (in degrees) (For example: 5)":"角度旋轉震動振幅(以度為單位)(例如:5)","Amplitude of scale shake (in percent change) (For example: 5)":"比例震動振幅(以百分比變化)(例如:5)","Amount of time between shakes (in seconds) (Default: 0.08)":"震動間間隔時間(秒)(默認:0.08)","For a single-shake effect, set it to the same value as \"Duration\".":"對於單次震動效果,將其設置為“持續時間”的相同值。","Stop shaking an object.":"停止震動物體。","Stop shaking an object":"停止震動物體","Stop shaking _PARAM0_":"停止搖動 _PARAM0_","Check if an object is shaking.":"檢查物體是否在搖動。","Check if an object is shaking":"檢查物體是否在搖動","_PARAM0_ is shaking":"_PARAM0_ 正在搖動","Default score":"默認分數","Increasing score sound":"增加分數聲音","Sound":"聲音","Min baseline pitch":"最小基準音高","Max baseline pitch":"最大基準音高","Pitch factor":"音調因子","Pitch reset timeout":"音調重置超時","Current pitch":"當前音調","the score of the object.":"物體的分數。","Reset the pitch to the baseline value.":"將音調重置為基線值。","Reset pitch":"重置音調","Reset the pitch of _PARAM0_":"重置_PARAM0_的音調","Screen wrap":"屏幕包裹","Teleport object when it moves off the screen and immediately appear on the opposite side while maintaining speed and trajectory.":"物體在畫面外移動時進行傳送,並立即出現在對面,同時保持速度和軌跡。","Teleport the object when leaving one side of the screen so that it immediately reappears on the opposite side, maintaining speed and trajectory.":"離開屏幕一側時立即在對立側重新出現物件,保持速度和軌跡。","Screen Wrap":"畫面翻轉","Horizontal wrapping":"水平翻轉","Vertical wrapping":"垂直翻轉","Top border of wrapped area (Y)":"包裹區域的頂部邊界(Y)","Left border of wrapped area (X)":"包裹區域的左邊界(X)","Right border of wrapped area (X)":"包裹區域的右邊界(X)","If blank, the value will be the scene width.":"如果為空,則值將是場景寬度。","Bottom border of wrapped area (Y)":"包裹區域底部(Y)的底部邊線","If blank, the value will be scene height.":"如果為空,值將是場景高度。","Number of pixels past the center where the object teleports and appears":"物體傳送和出現時超出中心的像素數","Check if the object is wrapping on the left and right borders.":"檢查物體是否在左右邊界上標記。","Is horizontal wrapping":"是否水平標記","_PARAM0_ is horizontal wrapping":"_PARAM0_ 在水平標記","Check if the object is wrapping on the top and bottom borders.":"檢查物體是否在上下邊界上標記。","Is vertical wrapping":"是否垂直標記","_PARAM0_ is vertical wrapping":"_PARAM0_ 在垂直標記","Enable wrapping on the left and right borders.":"啟用左右邊界上的標記。","Enable horizontal wrapping":"啟用水平標記","Enable _PARAM0_ horizontal wrapping: _PARAM2_":"啟用 _PARAM0_ 水平標記:_PARAM2_","Enable wrapping on the top and bottom borders.":"啟用上下邊界上的標記。","Enable vertical wrapping":"啟用垂直標記","Enable _PARAM0_ vertical wrapping: _PARAM2_":"啟用_PARAM0_垂直標記:_PARAM2_","Top border (Y position).":"上邊界(Y位置)。","Top border":"上邊界","Left border (X position).":"左邊界(X位置)。","Left border":"左邊界","Right border (X position).":"右邊界(X位置)。","Right border":"右邊界","Bottom border (Y position).":"下邊界(Y位置)。","Bottom border":"下邊界","Number of pixels past the center where the object teleports and appears.":"物體傳送和出現的中心過去的像素數。","Trigger offset":"觸發偏移","Set top border (Y position).":"設置上邊界(Y位置)。","Set top border":"設置上邊界","Set _PARAM0_ top border to _PARAM2_":"設置_PARAM0_上邊界為_PARAM2_","Top border value":"上邊界值","Set left border (X position).":"設置左邊界(X位置)。","Set left border":"設置左邊界","Set _PARAM0_ left border to _PARAM2_":"將_PARAM0_的左邊框設置為_PARAM2_","Left border value":"左邊界值","Set bottom border (Y position).":"設置底部邊界(Y位置)。","Set bottom border":"設置底部邊界","Set _PARAM0_ bottom border to _PARAM2_":"將_PARAM0_的底部邊界設置為_PARAM2_","Bottom border value":"底部邊界值","Set right border (X position).":"設置右邊界(X位置)。","Set right border":"設置右邊界","Set _PARAM0_ right border to _PARAM2_":"將_PARAM0_的右邊界設置為_PARAM2_","Right border value":"右邊界值","Set trigger offset (pixels).":"設置觸發偏移(像素)。","Set trigger offset":"設置觸發偏移","Set _PARAM0_ trigger offset to _PARAM2_ pixels":"設置_PARAM0_觸發偏移為_PARAM2_像素","SetScreen Offset Leaving Value":"設置螢幕偏移離開值","Screen Wrap (physics objects)":"屏幕包裹(物理物體)","Angular Velocity":"角速度","Linear Velocity X":"線性速度 X","Linear Velocity Y":"線性速度 Y","Save current velocity values.":"保存當前速度值。","Save current velocity values":"保存當前速度值","Save current velocity values of _PARAM0_":"保存_PARAM0_的當前速度值","Apply saved velocity values.":"應用保存的速度值。","Apply saved velocity values":"應用保存的速度值","Apply saved velocity values of _PARAM0_":"應用_PARAM0_的保存速度值","Animate Shadow Clones":"動畫影子克隆","Create and animate shadow clones that follow the path of a primary object.":"創建並動畫影子克隆,其將沿著主要物體的路徑移動。","Select the primary object, the shadow clone object, the number of shadow clones, the number of frames between shadow clones, the rate that shadow clones will fade away (if desired), the Z-value of the shadow clones, and the layer the shadow clones will be created on.":"選擇主要物體、陰影克隆物體、陰影克隆的數量、陰影克隆之間的幀數、影子克隆消失的速率(如果需要)、影子克隆的 Z 值和將創建影子克隆的圖層。","Animate shadow clones that follow the path of a primary object":"動畫顯示跟隨主要物體路徑的影子克隆","Create and animate _PARAM3_ copies of _PARAM2_ that follow the position of _PARAM1_, with _PARAM4_ empty frames between shadow clones, and fading the opacity of shadow clones by _PARAM5_ per clone. Shrink scale of shadow clones by _PARAM6_ per clone. Shadow clones will be created on _PARAM7_ layer with a Z-value of _PARAM8_. Match X scale: _PARAM9_ Match Y scale: _PARAM10_ Match angle: _PARAM11_ Match animation: _PARAM12_ Match animation frame: _PARAM13_ Match vertical flip: _PARAM14_ Match horizontal flip: _PARAM15_":"創建和動畫_PARAM3_個_PARAM2_的副本,跟隨_PARAM1_的位置,陰影克隆之間有_PARAM4_個空幀,並且將陰影克隆的不透明度每個克隆降低_PARAM5_。每個克隆的縮小比例為_PARAM6_。陰影克隆將在_PARAM7_層上以_PARAM8_的Z值創建。 匹配X軸比例:_PARAM9_ 匹配Y軸比例:_PARAM10_ 匹配角度:_PARAM11_ 匹配動畫:_PARAM12_ 匹配動畫幀:_PARAM13_ 匹配垂直翻轉:_PARAM14_ 匹配水平翻轉:_PARAM15_","Object that shadow clones will follow":"影子克隆將跟隨的物體","Shadows clones will be made of this object (Cannot be the same object used for primary object)":"影子克隆將由此物體製成(不可與主要物體相同)","Number of shadow clones (Default: 1)":"影子克隆的數量(默認:1)","Number of empty frames between shadow clones (Default: 1)":"影子克隆之間的空幀數(默認:1)","Fade speed (Range: 0 to 255) (Default: 0)":"淡出速度(範圍:0至255)(默認值:0)","Decrease in opacity for each consecutive shadow clone":"每個連續陰影克隆之間的不透明度降低","Shrink speed (Range: 0 to 100) (Default: 0)":"縮小速度(範圍:0至100)(默認值:0)","Decrease in scale for each consecutive shadow clone":"對於每個連續陰影克隆的不透明度減少","Shadow clones will be created on this layer. (Default: \"\") (Base Layer)":"陰影克隆將在此層上創建。(默認值:“”)(基本層)","Z value for created shadow clones":"每個連續陰影克隆的比例減少","Match X scale of primary object:":"主要對象的X軸比例匹配:","Match Y scale of primary object:":"主要對象的Y軸比例匹配:","Match angle of primary object:":"主要物體的X比例匹配:","Match animation of primary object:":"主要物體的Y比例匹配:","Match animation frame of primary object:":"主要物體的角度匹配:","Match the vertical flip of primary object:":"主要物體的動畫匹配:","Match the horizontal flip of primary object:":"主要物體的動畫幀匹配:","Delete shadow clone objects that are linked to a primary object.":"刪除與主物件鏈接的影子克隆物件。","Delete shadow clone objects that are linked to a primary object":"刪除與主物件鏈接的影子克隆物件","Primary object":"主物件","Shadow clones":"影子克隆","Shake object":"搖動對象","Shake an object.":"搖動一個對象。","Shake objects with translation and rotation.":"以平移和旋轉使物體抖動。","Shake object (position, angle)":"抖動物體(位置、角度)","Shake an object, using one or more ways to shake (position, angle). Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters.":"使用一種或多種方式來搖動一個對象(位置,角度)。請確保在使用不同參數搖動時在開始新的搖動之前\"停止搖動\"。","Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_":"搖動_PARAM0_,持續_PARAM2_秒。修改位置振幅_PARAM3_在X軸上和_PARAM4_在Y軸上,角度旋轉振幅_PARAM5_。 等待_PARAM6_秒後再搖動。持續搖動直到停止:_PARAM7_","Stop any shaking of object that was initiated by the Shake Object extension.":"停止Shake Object擴展引發的對象的任何搖動。","Stop shaking the object":"停止搖動對象","3D object shake":"3D 物體搖晃","Shake 3D objects.":"搖動 3D 物體。","Shake 3D objects with translation and rotation.":"以平移和旋轉使 3D 物體抖動。","3D shake":"3D 抖動","Translation amplitude on X axis":"X 軸上的平移幅度","Translation amplitude on Y axis":"Y 軸上的平移幅度","Translation amplitude on Z axis":"Z 軸上的平移幅度","Rotation amplitude around X axis":"X 軸周圍的旋轉幅度","Rotation amplitude around Y axis":"Y 軸周圍的旋轉幅度","Rotation amplitude around Z axis":"Z 軸周圍的旋轉幅度","Start to shake at the object creation":"在物體創建時開始抖動","Shake the object with a linear easing at the start and the end.":"以線性緩和方式搖動對象的開始和結尾。","Shake":"搖動","Shake _PARAM0_ for _PARAM2_ seconds with _PARAM3_ seconds of easing to start and _PARAM4_ seconds to stop":"使用_PARAM0_搖動_PARAM2_秒,使用_PARAM3_秒的緩和開始和_PARAM4_秒停止","Shake the object with a linear easing at the start and keep shaking until the stop action is used.":"以線性緩和方式搖動對象的開始並持續搖動直到使用停止操作。","Start shaking":"開始搖動","Start shaking _PARAM0_ with _PARAM2_ seconds of easing":"以_PARAM2_秒的緩和開始開始搖動_PARAM0_","Stop shaking the object with a linear easing.":"使用線性緩和停止搖動對象。","Stop shaking":"停止搖動","Stop shaking _PARAM0_ with _PARAM2_ seconds of easing":"使用_PARAM2_秒的緩和方式停止搖動_PARAM0_","Check if the object is shaking.":"檢查物體是否在搖動。","Is shaking":"在搖動","Check if the object is stopping to shake.":"檢查物體是否停止搖動。","Is stopping to shake":"停止搖動","_PARAM0_ is stopping to shake":"_PARAM0_正在停止搖動","the shaking frequency of the object.":"物體的搖動頻率。","Shaking frequency":"搖動頻率","the shaking frequency":"搖動頻率","Return the easing factor according to start properties.":"根據起始屬性返回緩和因子。","Start easing factor":"開始緩和因子","Return the easing factor according to stop properties.":"根據停止屬性返回緩和因子。","Stop easing factor":"停止緩和因子","stop easing factor":"停止緩和因子","Share dialog and sharing options":"共享對話框和共享選項","Allows to share content via the system share dialog. Works only on mobile (browser or mobile app).":"允許通過系統共享對話框共享內容。僅在移動設備上(瀏覽器或移動應用程序)才能工作。","Share a link or text via another app using the system share dialog.":"使用系統共享對話框通過另一個應用程序分享鏈接或文本。","Share text: _PARAM1_ and url: _PARAM2_ with title _PARAM3_":"通過標題 _PARAM3_ 的共享文本:_PARAM1_ 和 url:_PARAM2_","Text to share":"要共享的文本","Url to share":"要共享的 URL","Title to show in the Share dialog":"在共享對話框中顯示的標題","Check if the browser/operating system of the device supports sharing. Sharing is typically not supported on desktop browsers or desktop apps.":"檢查設備的瀏覽器/作業系統是否支援分享。在桌面瀏覽器或桌面應用通常不支援分享。","Sharing is supported":"支援分享","The browser or system supports sharing":"瀏覽器或系統支援分享","the result of the last share dialog.":"上一次分享對話方塊的結果。","Result of the last share dialog":"上一次分享對話方塊的結果","the result of the last share dialog":"上一次分享對話方塊的結果","Shock wave effect":"Shock wave effect","Draw shock wave.":"繪製震波。","Draw ellipse shock waves.":"畫橢圓形衝擊波。","Ellipse shock wave":"橢圓形衝擊波","Start width":"起始寬度","Start height":"起始高度","Start outline thickness":"起始輪廓厚度","Outline":"輪廓","Start angle":"起始角度","End width":"結束寬度","End height":"結束高度","End outline thickness":"結束輪廓厚度","End angle":"結束角度","Timing":"定時","Fill the shape":"填滿形狀","the start width of the object.":"物體的起始寬度。","the start width":"物件的起始寬度","the start height of the object.":"物件的起始高度。","the start height":"物件的起始高度","the start outline of the object.":"物件的起始輪廓。","the start outline":"物件的起始輪廓","the start angle of the object.":"物件的起始角度。","the start angle":"物件的起始角度","the end width of the object.":"物件的結束寬度。","the end width":"物件的結束寬度","the end height of the object.":"物件的結束高度。","the end height":"物件的結束高度","the end outline thickness of the object.":"物件的結束輪廓厚度。","the end outline thickness":"物件的結束輪廓厚度","the end Color of the object.":"物件的結束顏色。","End Color":"結束顏色","the end Color":"物件的結束顏色","the end Opacity of the object.":"物件的結束不透明度。","End Opacity":"結束不透明度","the end Opacity":"物件的結束不透明度","the end angle of the object.":"物件的結束角度。","the end angle":"物件的結束角度","the duration of the animation.":"動畫的持續時間。","the duration":"動畫的持續時間","the easing of the animation.":"動畫的緩和。","the easing":"動畫的緩和","Check if the shape is filled.":"檢查形狀是否填滿。","Shape filled":"填滿的形狀","The shape of _PARAM0_ is filled":"填充了_PARAM0_的形狀","Enable or disable the filling of the shape.":"啟用或停用形狀的填充。","Enable filling":"啟用填充","Enable filling of _PARAM0_ : _PARAM2_":"啟用填充_PARAM0_:_PARAM2_","IsFilled":"已填充","Draw star shock waves.":"畫星形衝擊波。","Star shock waves":"星形衝擊波","Start radius":"起始半徑","Start Inner radius":"起始內部半徑","Shape":"形狀","End radius":"結束半徑","End inner radius":"結束內部半徑","Number of points":"點的數量","the start radius of the object.":"物件的起始半徑。","the start radius":"物件的起始半徑","the start inner radius of the object.":"物件的起始內半徑。","Start inner radius":"起始內半徑","the start inner radius":"物件的起始內半徑","the start outline thickness of the object.":"物件的起始輪廓厚度。","the start outline thickness":"物件的起始輪廓厚度","the end radius of the object.":"物體的結束半徑。","the end radius":"結束半徑","the end inner radius of the object.":"物體的結束內半徑。","the end inner radius":"結束內半徑","IsFilling":"填充","the number of points of the star.":"星星的點數。","the number of points":"點的數量","Smooth Camera":"平滑相機","Smoothly scroll to follow an object.":"平滑地滾動以跟隨一個對象。","Leftward catch-up speed (in ratio per second)":"向左追趕速度(比率每秒)","Catch-up speed":"追趕速度","Rightward catch-up speed (in ratio per second)":"向右追趕速度(比率每秒)","Upward catch-up speed (in ratio per second)":"向上追趕速度(比率每秒)","Downward catch-up speed (in ratio per second)":"向下追趕速度(比率每秒)","Follow on X axis":"在X軸上跟隨","Follow on Y axis":"在Y軸上跟隨","Follow free area left border":"遵循自由區域左邊界","Follow free area right border":"遵循自由區域右邊界","Follow free area top border":"遵循自由區域上邊界","Follow free area bottom border":"跟隨免費區底部邊框","Camera offset X":"攝影機偏移X","Camera offset Y":"攝影機偏移Y","Camera delay":"攝影機延遲","Forecast time":"預測時間","Forecast history duration":"預測歷史持續時間","Index (local variable)":"索引(本地變數)","Leftward maximum speed":"向左的最大速度","Rightward maximum speed":"向右的最大速度","Upward maximum speed":"向上的最大速度","Downward maximum speed":"向下的最大速度","OldX (local variable)":"OldX(本地變數)","OldY (local variable)":"OldY(本地變數)","Move the camera closer to the object. This action must be called after the object has moved for the frame.":"將相機移動到物體附近。此操作必須在物體移動了一幀之後調用。","Move the camera closer":"將相機移動更接近","Move the camera closer to _PARAM0_":"將相機移動更接近至_PARAM0_","Move the camera closer to the object.":"將相機移動更接近物體。","Do move the camera closer":"不要將相機移得更接近","Do move the camera closer _PARAM0_":"不要移動相機更接近_PARAM0_","Delay the camera according to a maximum speed and catch up the delay.":"根據最大速度延遲相機並追上延遲。","Wait and catch up":"等待並追趕","Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds":"在_PARAM2_秒內根據最大速度_PARAM3_延遲相機;_PARAM4_秒並在_PARAM5_秒內追趕相機","Waiting duration (in seconds)":"等待時間(秒)","Waiting maximum camera target speed X":"等待最大相機目標速度 X","Waiting maximum camera target speed Y":"等待最大相機目標速度 Y","Catch up duration (in seconds)":"趕上時間(秒)","Draw the targeted and actual camera position.":"繪製目標和實際相機位置。","Draw debug":"繪製偵錯","Draw targeted and actual camera position for _PARAM0_ on _PARAM2_":"為_PARAM0_在_PARAM2_上繪製目標和實際相機位置","Enable or disable the following on X axis.":"在 X 軸上啟用或禁用以下內容。","Follow on X":"在 X 軸上跟隨","The camera follows _PARAM0_ on X axis: _PARAM2_":"相機在 X 軸上跟隨_PARAM0_:_PARAM2_","Enable or disable the following on Y axis.":"在 Y 軸上啟用或禁用以下內容。","Follow on Y":"在 Y 軸上跟隨","The camera follows _PARAM0_ on Y axis: _PARAM2_":"相機在 Y 軸上跟隨_PARAM0_:_PARAM2_","Change the camera follow free area right border.":"更改相機跟隨自由區域右邊界。","Change the camera follow free area right border of _PARAM0_: _PARAM2_":"更改_PARAM0_的相機跟隨自由區域右邊界:_PARAM2_","Change the camera follow free area left border.":"更改相機跟隨自由區域左邊界。","Change the camera follow free area left border of _PARAM0_: _PARAM2_":"更改相機跟隨自由區域左邊界的_PARAM0_:_PARAM2_","Change the camera follow free area top border.":"更改相機跟隨自由區域上邊界。","Change the camera follow free area top border of _PARAM0_: _PARAM2_":"更改相機跟隨自由區域上邊界的_PARAM0_:_PARAM2_","Change the camera follow free area bottom border.":"更改相機跟隨自由區域下邊界。","Change the camera follow free area bottom border of _PARAM0_: _PARAM2_":"更改相機跟隨自由區域下邊界的_PARAM0_:_PARAM2_","Change the camera leftward maximum speed (in pixels per second).":"更改相機向左的最大速度(每秒像素數)。","Change the camera leftward maximum speed of _PARAM0_: _PARAM2_":"更改相機向左的最大速度為_PARAM0_:_PARAM2_","Leftward maximum speed (in pixels per second)":"向左最大速度(以每秒像素計)","Change the camera rightward maximum speed (in pixels per second).":"更改相機向右的最大速度(每秒像素數)。","Change the camera rightward maximum speed of _PARAM0_: _PARAM2_":"更改相機向右的最大速度為_PARAM0_:_PARAM2_","Rightward maximum speed (in pixels per second)":"向右的最大速度(每秒像素數)","Change the camera upward maximum speed (in pixels per second).":"更改相機向上的最大速度(每秒像素數)。","Change the camera upward maximum speed of _PARAM0_: _PARAM2_":"更改相機向上的最大速度為_PARAM0_:_PARAM2_","Upward maximum speed (in pixels per second)":"向上的最大速度(每秒像素數)","Change the camera downward maximum speed (in pixels per second).":"更改相機向下的最大速度(每秒像素數)。","Change the camera downward maximum speed of _PARAM0_: _PARAM2_":"更改相機向下的最大速度為_PARAM0_:_PARAM2_","Downward maximum speed (in pixels per second)":"向下的最大速度(每秒像素數)","Change the camera leftward catch-up speed (in ratio per second).":"更改相機向左的追趕速度(每秒比率)。","Leftward catch-up speed":"向左的追趕速度","Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_":"更改相機向左的追趕速度為_PARAM0_:_PARAM2_","Change the camera rightward catch-up speed (in ratio per second).":"更改相機向右的追趕速度(每秒比率)。","Rightward catch-up speed":"向右的追趕速度","Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_":"更改相機向右的追趕速度為_PARAM0_:_PARAM2_","Change the camera downward catch-up speed (in ratio per second).":"更改相機向下的追趕速度(每秒比率)。","Downward catch-up speed":"向下的追趕速度","Change the camera downward catch-up speed of _PARAM0_: _PARAM2_":"更改相機向下的追趕速度為_PARAM0_:_PARAM2_","Change the camera upward catch-up speed (in ratio per second).":"更改相機向上的追趕速度(每秒比率)。","Upward catch-up speed":"向上的追趕速度","Change the camera upward catch-up speed of _PARAM0_: _PARAM2_":"更改相機向上的追趕速度為_PARAM0_:_PARAM2_","the camera offset on X axis of the object. This is not the current difference between the object and the camera position.":"物體 X 軸的相機偏移。這並非物體與相機位置之間的當前差異。","the camera offset on X axis":"相機於 X 軸的偏移","Change the camera offset on X axis of an object.":"修改物體 X 軸的相機偏移。","Camera Offset X":"相機偏移 X","Change the camera offset on X axis of _PARAM0_: _PARAM2_":"修改物體 _PARAM0_ 的相機 X 軸偏移:_PARAM2_","the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.":"物體 Y 軸的相機偏移。這並非物體與相機位置之間的當前差異。","the camera offset on Y axis":"相機於 Y 軸的偏移","Change the camera offset on Y axis of an object.":"修改物體 Y 軸的相機偏移。","Camera Offset Y":"相機偏移 Y","Change the camera offset on Y axis of _PARAM0_: _PARAM2_":"修改物體 _PARAM0_ 的相機 Y 軸偏移:_PARAM2_","Change the camera forecast time (in seconds).":"修改相機預測時間(以秒為單位)。","Change the camera forecast time of _PARAM0_: _PARAM2_":"修改 _PARAM0_ 的相機預測時間:_PARAM2_","Change the camera delay (in seconds).":"修改相機延遲時間(以秒為單位)。","Change the camera delay of _PARAM0_: _PARAM2_":"修改 _PARAM0_ 的相機延遲時間:_PARAM2_","Return follow free area left border X.":"返回跟隨空白區域左邊界的 X 軸。","Free area left":"空白區域左邊","Return follow free area right border X.":"返回跟隨空白區域右邊界的 X 軸。","Free area right":"空白區域右邊","Return follow free area bottom border Y.":"返回跟隨空白區域底部邊界的 Y 軸。","Free area bottom":"空白區域底部","Return follow free area top border Y.":"返回跟隨空白區域頂部邊界的 Y 軸。","Free area top":"空白區域頂部","Update delayed position and delayed history. This is called in doStepPreEvents.":"更新延遲位置和延遲歷史。此操作在執行前事件中調用。","Update delayed position":"更新延遲位置","Update delayed position and delayed history of _PARAM0_":"更新 _PARAM0_ 的延遲位置和延遲歷史","Check if the camera following target is delayed from the object.":"檢查相機跟隨目標是否延遲於物體。","Camera is delayed":"相機已延遲","The camera of _PARAM0_ is delayed":"_PARAM0_ 的相機已延遲","Return the current camera delay.":"返回當前相機延遲時間。","Current delay":"當前延遲時間","Check if the camera following is waiting at a reduced speed.":"檢查相機跟隨是否以較低速度等待。","Camera is waiting":"相機正在等待","The camera of _PARAM0_ is waiting":"_PARAM0_ 的相機正在等待","Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.":"為預測添加位置到歷史。此操作在 UpadteDelayedPosition 中調用 2 次。","Add forecast history position":"新增預測歷史位置","Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_":"在 _PARAM0_ 的預測歷史中新增時間:_PARAM2_ 和位置: _PARAM3_; _PARAM4_","Object X":"物件 X","Object Y":"物件 Y","Update forecasted position. This is called in doStepPreEvents.":"更新預測位置。這在 doStepPreEvents 中呼叫。","Update forecasted position":"更新預測位置","Update forecasted position of _PARAM0_":"更新 _PARAM0_ 的預測位置","Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.":"將項目歷史結束位置投影到從線性回歸的直線上的向量。此函式只由 UpdateForecastedPosition 呼叫。","Project history ends":"項目歷史結束","Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_":"_PARAM0_ 的歷史最老位置:_PARAM2_;_PARAM3_ 和最新位置:_PARAM4_;_PARAM5_","OldestX":"最老的 X","OldestY":"最老的 Y","Newest X":"最新的 X","Newest Y":"最新的 Y","Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.":"回傳預測時間和歷史持續時間之間的比率。此函式只由 UpdateForecastedPosition 呼叫。","Forecast time ratio":"預測時間比率","Smoothly scroll to follow a character and stabilize the camera when jumping.":"平穩地滾動以跟隨角色並穩定相機跳躍時。","Smooth platformer camera":"平整平台攝影機","Smooth camera behavior":"平滑相機行為","Follow free area top in the air":"空中追蹤自由區頂部","Follow free area bottom in the air":"空中追蹤自由區底部","Follow free area top on the floor":"地板上自由區頂部追蹤","Follow free area bottom on the floor":"地板上自由區底部追蹤","Upward speed in the air (in ratio per second)":"空中向上速度(每秒比率)","Downward speed in the air (in ratio per second)":"空中向下速度(每秒比率)","Upward speed on the floor (in ratio per second)":"地板上向上速度(每秒比率)","Downward speed on the floor (in ratio per second)":"地板上向下速度(每秒比率)","Upward maximum speed in the air":"空中向上最大速度","Downward maximum speed in the air":"空中向下最大速度","Upward maximum speed on the floor":"地板上向上最大速度","Downward maximum speed on the floor":"地板上向下最大速度","Rectangular 2D grid":"矩形 2D 網格","Snap objects on a virtual grid.":"在虛擬網格上捕捉對象。","Snap object to a virtual grid (i.e: this is not the grid used in the editor).":"將對象捕捉到虛擬網格(即:不是編輯器中使用的網格)。","Snap objects to a virtual grid":"將對象捕捉到虛擬網格","Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)":"Snap _PARAM1_ to a virtual grid using cells with width: _PARAM2_px, height _PARAM3_px and an offset position (_PARAM4_; _PARAM5_)","Speed restrictions":"速度限制","Limit the maximum movement and rotation speed of an object from forces or the 2D Physics behavior.":"限制物體最大移動和旋轉速度,來自於力或 2D 物理行為。","Limit the maximum speed an object will move from (non-physics) forces.":"Limit the maximum speed an object will move from (non-physics) forces.","Enforce max movement speed":"強制最大運動速度","Maximum speed (pixels/second)":"最大速度(每秒像素)","Limit the maximum speed an object will move from physics forces.":"限制物體將從物理力移動的最大速度。","Enforce max movement speed (physics)":"執行最大移動速度(物理)","Limit the maximum rotation speed of an object from physics forces.":"限制物體的最大旋轉速度來自物理力。","Enforce max rotation speed (physics)":"執行最大旋轉速度(物理)","Maximum rotation speed (degrees/second)":"最大旋轉速度(度/秒)","Object Masking":"對象遮罩","Use a sprite or a shape painter to mask another object.":"使用精靈或形狀繪製器來遮罩另一個對象。","Define a sprite as a mask of an object.":"將一個精靈定義為物體的遮罩。","Mask an object with a sprite":"使用精靈的遮罩物體","Sprite object to use as a mask":"用作遮罩的精靈物體","Remove the mask of the specified object.":"刪除指定物體的遮罩。","Remove the mask":"移除遮罩","Remove the mask of _PARAM1_":"移除_PARAM1_的遮罩","Object with a mask to remove":"具有要移除遮罩的物體","Multitouch joystick and buttons (sprite)":"多點觸控搖桿和按鈕(精靈)","Joysticks or buttons for touchscreens.":"觸屏的搖桿或按鈕。","Check if a button was just pressed on a multitouch controller.":"檢查多點觸控控制器上是否剛剛按下了一個按鈕。","Multitouch controller button just pressed":"多點觸控控制器按鈕剛剛被按下","Button _PARAM2_ of multitouch controller _PARAM1_ was just pressed":"多點觸控控制器 _PARAM1_ 的按鈕 _PARAM2_ 剛剛被按下","Multitouch controller identifier (1, 2, 3, 4...)":"多點觸控控制器識別符(1, 2, 3, 4...)","Button name":"按鈕名稱","Check if a button is pressed on a multitouch controller.":"檢查多點觸控控制器上是否按下了一個按鈕。","Multitouch controller button pressed":"多點觸控控制器按鈕已按下","Button _PARAM2_ of multitouch controller _PARAM1_ is pressed":"_PARAM1_的多點觸控控制器按鈕_PARAM2_已按下","Check if a button is released on a multitouch controller.":"檢查多點觸控控制器上的按鈕是否被釋放。","Multitouch controller button released":"多點觸控控制器按鈕已釋放","Button _PARAM2_ of multitouch controller _PARAM1_ is released":"_PARAM1_的多點觸控控制器按鈕_PARAM2_已釋放","Change a button state for a multitouch controller.":"更改多點觸控控制器的按鈕狀態。","Button state":"按鈕狀態","Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_":"將多點觸控控制器的按鈕_PARAM2_標記為多點觸控控制器_PARAM1的_PARAM3_","Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"更改搖桿的死區半徑。死區是一個區域,搖杆的移動不會被計入(代之以搖桿視為未移動)。","Dead zone radius":"死區半徑","Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"將多點觸控搖桿_PARAM2_的死區更改為多點觸控控制器_PARAM1的_PARAM3_","Joystick name":"搖桿名稱","Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"返回搖桿的死區半徑。 死區是一個區域,搖桿的移動不會被考慮在內(相反,搖桿將被視為未移動)。","Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_":"更改多點觸控控制器 _PARAM1_ 的多點觸控搖桿 _PARAM2_ 死區為 _PARAM3_","the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).":"角度的方向索引(左=1,下=1,右=2,上=3)。","Angle to 4-way index":"角度到4方位索引","The angle _PARAM1_ 4-way index":"_PARAM1_ 的角度4方位索引","the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).":"角度的方向索引(左=1,左下=1... 左上=7)","Angle to 8-way index":"角度到8方位索引","The angle _PARAM1_ 8-way index":"_PARAM1_ 的角度8方位索引","Check if angle is in a given direction.":"檢查角度是否是給定方向。","Angle 4-way direction":"角度4方向","The angle _PARAM1_ is the 4-way direction _PARAM2_":"_PARAM1_的角度是4方向_PARAM2_","Angle 8-way direction":"角度8方向","The angle _PARAM1_ is the 8-way direction _PARAM2_":"_PARAM1_的角度是8方向_PARAM2_","Check if joystick is pushed in a given direction.":"檢查搖桿是否向指定方向推動。","Joystick pushed in a direction (4-way)":"搖桿向方向推動(4方向)","Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_":"多點觸控控制器_PARAM1_的搖桿_PARAM2_向指定方向_PARAM3_推動","Joystick pushed in a direction (8-way)":"搖桿向方向推動(8方向)","the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"拇指從搖桿中心拉開的百分比(範圍:0到1)。","Joystick force (deprecated)":"搖桿力(已棄用)","Joystick _PARAM2_ of multitouch controller _PARAM1_ force":"多點觸控控制器_PARAM1__PARAM2__搖桿力","the force of multitouch contoller stick (from 0 to 1).":"多點觸控控制器搖桿力(範圍:0到1)。","multitouch controller _PARAM1_ _PARAM2_ stick force":"多點觸控控制器 _PARAM1__PARAM2_ 搖桿力","Stick name":"搖桿名稱","Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).":"更改拇指已從搖桿中心拉開的百分比(範圍:0到1)。","Joystick force":"搖桿力","Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"更改多點觸控控制器_PARAM1_的操縱杆_PARAM2_的力量為_PARAM3_","Return the angle the joystick is pointing towards (Range: -180 to 180).":"返回操縱杆指向的角度(範圍:-180至180)。","Joystick angle (deprecated)":"操縱杆角度(已棄用)","Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).":"返回多點觸控控制器操縱杆指向的角度(範圍:-180至180)。","Change the angle the joystick is pointing towards (Range: -180 to 180).":"更改操縱杆指向的角度為(範圍:-180至180)。","Joystick angle":"操縱杆角度","Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_":"更改多點觸控控制器_PARAM1_的操縱杆_PARAM2_的角度為_PARAM3_","Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).":"返回多點觸控控制器操纵杆在X轴上的力量(从最左端的-1到最右端的1)。","Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).":"返回多點觸控控制器操纵杆在Y轴上的力量(从顶部的-1到底部的1)。","Check if a new touch has started on the right or left side of the screen.":"檢查新觸控是否在螢幕的右側或左側開始。","New touch on a screen side":"螢幕邊緣的新觸控","A new touch has started on the _PARAM2_ side of the screen on _PARAM1_'s layer":"螢幕 _PARAM1_ 的圖層上的 _PARAM2_ 邊有一個新的觸控開始","Multitouch joystick":"多點觸控操縱杆","Screen side":"螢幕邊緣","Joystick that can be controlled by interacting with a touchscreen.":"操縱杆可通過觸控操作來控制的操縱杆。","Multitouch Joystick":"多點觸控操縱杆","Dead zone radius (range: 0 to 1)":"死區半徑(範圍:0至1)","The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)":"死區是不計入操縱杆移動的區域(而是將操縱杆視為未移動)","Joystick angle (range: -180 to 180)":"操縱杆角度(範圍:-180至180)","Joystick force (range: 0 to 1)":"操縱杆力量(範圍:0至1)","the joystick force (from 0 to 1).":"搖桿力道(從 0 到 1)。","the joystick force":"搖桿力道","Change the joystick angle of _PARAM0_ to _PARAM2_":"將 _PARAM0_ 的搖桿角度更改為 _PARAM2_","Return the stick force on X axis (from -1 at the left to 1 at the right).":"返回 X 軸上的搖桿力量(從左邊的 -1 到右邊的 1)。","Return the stick force on Y axis (from -1 at the top to 1 at the bottom).":"返回 Y 軸上的搖桿力量(從頂部的 -1 到底部的 1)。","Joystick pushed in a direction (4-way movement)":"搖桿在某個方向被按下(四方位移動)","_PARAM0_ is pushed in direction _PARAM2_":"_PARAM0_ 在方向 _PARAM2_ 被按下","Joystick pushed in a direction (8-way movement)":"搖桿在某個方向被按下(八方位移動)","Check if a joystick is pressed.":"檢查是否有搖桿被按下。","Joystick pressed":"搖桿被按下","Joystick _PARAM0_ is pressed":"_PARAM0_ 的搖桿被按下","Reset the joystick values (except for angle, which stays the same)":"重設搖桿值(除角度外保持不變)","Reset":"重設","Reset the joystick of _PARAM0_":"重設 _PARAM0_ 的搖桿","the multitouch controller identifier.":"多點觸控控制器識別碼。","Multitouch controller identifier":"多點觸控控制器識別碼","the multitouch controller identifier":"多點觸控控制器識別符","the joystick name.":"搖桿名稱。","the joystick name":"搖桿名稱","the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"搖桿的死區半徑(範圍:0到1)。死區是搖桿上的運動不會被考慮的區域(相反,搖桿會被視為未移動)。","the dead zone radius":"死區半徑","Force the joystick into the pressing state.":"強制搖桿進入按壓狀態。","Force start pressing":"強制開始按壓","Force start pressing _PARAM0_ with touch identifier: _PARAM2_":"使用觸控識別符_PARAM2_,強制按壓_PARAM0_","Detect presses made on a touchscreen on the object so it acts like a button and automatically trigger the button having the same identifier for the mapper behaviors.":"檢測對物件觸控螢幕的按壓,使其如同按鈕一般運作,並自動觸發擁有相同識別碼的按鈕以符合對應的行為。","Multitouch button":"多點觸控按鈕","Button identifier":"按鈕標識","TouchID":"TouchID","Button released":"按鈕釋放","Button just pressed":"按鈕剛剛被按下","Triggering circle radius":"觸發圓半徑","This circle adds up to the object collision mask.":"此圓添加 到物體碰撞遮罩。","Check if the button was just pressed.":"檢查按鈕是否剛剛被按下。","Button _PARAM0_ was just pressed":"按鈕 _PARAM0_ 剛剛被按下","Check if the button is pressed.":"檢查按鈕是否被按下。","Button pressed":"按鈕被按下","Button _PARAM0_ is pressed":"按鈕_PARAM0_已按下","Check if the button is released.":"檢查按鈕是否被釋放。","Button _PARAM0_ is released":"按鈕 _PARAM0_ 已釋放","Mark the button _PARAM0_ as _PARAM2_":"將按鈕_PARAM0_標記為_PARAM2_","Control a platformer character with a multitouch controller.":"使用多點觸控控制器控制平台遊戲角色。","Platformer multitouch controller mapper":"平台遊戲多點觸控控制器映射器","Platform character behavior":"平台角色行為","Controller identifier (1, 2, 3, 4...)":"控制器識別符(1, 2, 3, 4...)","Jump button name":"跳躍按鈕名稱","Control a 3D physics character with a multitouch controller.":"使用多點觸控控制器控制3D物理角色。","3D platformer multitouch controller mapper":"3D平台遊戲多點觸控控制器映射","3D shooter multitouch controller mapper":"3D射擊遊戲多點觸控控制器映射","Control camera rotations with a multitouch controller.":"使用多點觸控控制器控制攝像頭旋轉。","First person camera multitouch controller mapper":"第一人稱攝影機多點觸控控制器映射","Control a 3D physics car with a multitouch controller.":"Control a 3D physics car with a multitouch controller.","3D car multitouch controller mapper":"3D car multitouch controller mapper","Steer joystick":"Steer joystick","Speed joystick":"Speed joystick","Hand brake button name":"Hand brake button name","Control a top-down character with a multitouch controller.":"使用多點觸控控制器控制俯視角色。","Top-down multitouch controller mapper":"俯視遊戲多點觸控控制器映射","Joystick for touchscreens.":"觸控屏幕搖桿。","Pass the object property values to the behavior.":"將對象屬性值傳遞給行為。","Update configuration":"更新配置","Update the configuration of _PARAM0_":"更新_PARAM0_的配置","Show the joystick until it is released.":"顯示搖桿直到釋放。","Show and start pressing":"顯示並開始按壓","Show _PARAM0_ at the cursor position and start pressing":"在光標位置顯示_PARAM0_並開始按壓","Return the X position of a specified touch":"返回指定觸摸的X位置","Touch X position (on parent)":"觸控X位置(在父視窗上)","De/activate control of the joystick.":"啟用/停用搖桿控制。","De/activate control":"啟用/停用控制","Activate control of _PARAM0_: _PARAM1_":"啟用_PARAM0_的控制:_PARAM1_","Check if a stick is pressed.":"檢查搖桿是否被按下。","Stick pressed":"搖桿已被按下","Stick _PARAM0_ is pressed":"搖桿_PARAM0_已被按下","the strick force (from 0 to 1).":"搖桿力(從0到1)。","the stick force":"搖桿力","the stick force on X axis (from -1 at the left to 1 at the right).":"擺桿X軸的搖桿力(範圍從-1到1,在左側-1到右側1)。","the stick X force":"搖桿X搖桿力","the stick force on Y axis (from -1 at the top to 1 at the bottom).":"Y軸上的操縱桿力量(從頂部的-1到底部的1)。","the stick Y force":"操縱桿Y軸力量","Return the angle the joystick is pointing towards (from -180 to 180).":"返回操縱桿指向的角度(從-180到180)。","Return the angle the stick is pointing towards (from -180 to 180).":"返回操縱桿指向的角度(從-180到180)。","_PARAM0_ is pushed in direction _PARAM1_":"_PARAM0_以_DIRECTION _PARAM1_被推動。","the multitouch controller identifier (1, 2, 3, 4...).":"多點觸控控制器識別符(1, 2, 3, 4...)。","the joystick name of the object.":"物件的操縱桿名稱。","the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).":"操縱桿的死區半徑(範圍:0到1)。死區是在該區域內移動操縱桿不會被考慮(相反,操縱桿被視為未移動)。","Sprite Sheet Animations":"精靈表動畫","Animate a tiled sprite from a sprite sheet.":"從精靈表動畫中動畫平鋪的精靈。","Animates a sprite sheet using JSON (see extension description).":"使用JSON播放精靈圖片表(請參見擴展描述)。","JSON sprite sheet animator":"使用JSON精靈表動畫","JSON formatted text describing the sprite sheet":"描述精靈表的JSON格式文本","Current animation":"當前動畫","Current frame of the animation":"當前動畫的畫面","Currently displayed frame name":"當前顯示的畫面名稱","Speed of the animation (in seconds)":"動畫速度(秒)","Loads the JSON data into the behavior":"將JSON數據加載到行為中","Load the JSON":"加載JSON","Load the JSON of _PARAM0_":"加載_PARAM0_的JSON","Update the object attached to the behavior using the latest properties values.":"使用最新的屬性值更新附加到行為的對象。","Update the object":"更新對象","Update object _PARAM0_ with properties of _PARAM1_":"使用_PARAM1_的屬性更新_PARAM0_對象","Updates the animation frame.":"更新動畫幀。","Update the animation frame":"更新動畫幀","Update the current animation frame of _PARAM0_ to _PARAM2_":"將_PARAM0_的當前動畫幀更新為_PARAM2_","The frame to set to":"要設置的幀","Loads a new JSON spritesheet data into the behavior.":"將新的JSON精靈表數據加載到行為中。","Load data from a JSON resource":"從JSON資源加載數據","Load JSON spritesheet data for _PARAM0_ from _PARAM2_":"從_PARAM2_為_PARAM0_加載JSON精靈表數據","The JSON to load":"要加載的JSON","Display one frame without animating the object.":"顯示一個幀而不執行對象的動畫。","Display a frame":"顯示一個幀","Display frame _PARAM2_ of _PARAM0_":"顯示_PARAM0_的幀_PARAM2_","The frame to display":"要顯示的幀","Play an animation from the sprite sheet.":"從精靈表中播放動畫。","Play Animation":"播放動畫","Play animation _PARAM2_ of _PARAM0_":"播放_PARAM2_的_PARAM0_動畫","The name of the animation":"動畫的名稱","The name of the current animation. __null if no animation is playing.":"當前動畫的名稱。如果沒有正在播放的動畫,則為null。","If Current Frame of _PARAM0_ = _PARAM2_":"如果_PARAM0_的當前幀=_PARAM2_。","The name of the currently displayed frame.":"當前顯示的幀名稱。","Current frame":"當前幀","Pause the animation of a sprite sheet.":"暫停精靈表動畫。","Pause animation":"暫停動畫","Pause the current animation of _PARAM0_":"暫停_PARAM0_的當前動畫","Resume a paused animation of a sprite sheet.":"恢復精靈表動畫的暫停。","Resume animation":"恢復動畫","Resume the current animation of _PARAM0_":"恢復_PARAM0_的當前動畫。","Animates a vertical (top to bottom) sprite sheet.":"播放垂直(自上而下)精靈表。","Vertical sprite sheet animator":"垂直精靈表動畫","Horizontal width of sprite (in pixels)":"精靈的水平寬度(以像素為單位)","Vertical height of sprite (in pixels)":"精靈的垂直高度(以像素為單位)","Empty space between each sprite (in pixels)":"每個精靈之間的空白(以像素為單位)","Column of the animation":"動畫的列","First Frame of the animation":"動畫的第一幀","Last Frame of the animation":"動畫的最後一幀","Current Frame of the animation":"當前動畫幀","Set the animation frame.":"設置動畫幀。","Set the animation frame":"設置動畫幀","Set the current frame of _PARAM0_ to _PARAM2_":"將_PARAM0_的當前幀設置為_PARAM2_。","The frame":"當前幀","Play animation":"播放動畫","Play animation of _PARAM0_ on column _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"以速度_PARAM4_播放_PARAM0_的_PARAM5_從幀_PARAM2_到幀_PARAM3_的動畫","First frame of the animation":"動畫的第一幀","Last frame of the animation":"動畫的最後一幀","Duration for each frame (seconds)":"每幀的持續時間(秒)","The column containing the animation":"包含動畫的列","The current frame of the current animation.":"當前動畫的當前幀。","Pause the animation of _PARAM0_":"暫停_PARAM0_的動畫","Animates a horizontal (left to right) sprite sheet.":"播放水平(從左到右)精靈表。","Horizontal sprite sheet animator":"水平精靈表動畫","Row of the animation":"動畫的行","Play animation of _PARAM0_ on row _PARAM5_ from frames _PARAM2_ to _PARAM3_ at speed _PARAM4_":"以_SPEED4_速度在列_PARAM5_上_PARAM2_到_PARAM3_幀播放_PARAM0_的動畫","Last Frame of animation":"動畫的最後一幀","What row is the animation in":"動畫在哪一行","Toggle switch":"切換開關","Toggle switch that users can click or touch.":"用戶可以單擊或觸摸的切換開關。","The finite state machine used internally by the switch object.":"開關物件內部使用的有限狀態機。","Switch finite state machine":"開關有限狀態機","Check if the toggle switch is checked.":"檢查切換開關是否已選擇。","Check if the toggle switch was checked in the current frame.":"檢查在當前幀切換開關是否已選擇。","Has just been checked":"剛剛被選中","_PARAM0_ has just been checked":"_PARAM0_剛剛被選中","Check if the toggle switch was unchecked in the current frame.":"檢查在當前幀切換開關是否已取消選擇。","Has just been unchecked":"剛剛被取消選中","_PARAM0_ has just been unchecked":"_PARAM0_剛剛被取消選中","Check if the toggle switch was toggled in the current frame.":"檢查在當前幀切換開關是否已切換。","Has just been toggled":"剛剛被切換","_PARAM0_ has just been toggled":"_PARAM0_剛剛被切換","Check (or uncheck) the toggle switch.":"檢查(或取消選中)切換開關。","Check (or uncheck)":"檢查(或取消勾選)","Check _PARAM0_: _PARAM2_":"檢查_PARAM0_:_PARAM2_","IsChecked":"已勾選","Toggle the switch.":"切換開關。","Toggle":"切換","Toggle _PARAM0_":"切換_PARAM0_","A toggle switch that users can click or touch.":"用戶可以點擊或觸摸的開關。","Check if the toggle switch was checked or unchecked in the current frame.":"在當前幀中檢查切換開關是否已被勾選或取消勾選。","Check _PARAM0_: _PARAM1_":"檢查_PARAM0_:_PARAM1_","Update the state animation.":"更新狀態動畫。","Update state animation":"更新狀態動畫","Update the state animation of _PARAM0_":"更新_PARAM0_的狀態動畫","Star Rating Bar":"星級評分條","An animated bar to rate out of 5.":"一個用於對其進行5分評分的動畫條。","Default rate":"默認率","Shake the stars on value changes":"當值變更時搖動星星","Disable the rating":"禁用評分","the rate of the object.":"物件的速率。","the rate":"速率","Check if the object is disabled.":"檢查該物件是否已停用。","_PARAM0_ is disabled":"_PARAM0_已停用","Enable or disable the object.":"啟用或停用該物件。","_PARAM0_ is disabled: _PARAM1_":"_PARAM0_已停用:_PARAM1_","Disable":"停用","Stay On Screen (2D)":"保持在螢幕上 (2D)","Move the object to keep it visible on the screen.":"移動物件以使其在螢幕上可見。","Force the object to stay visible on the screen by setting back its 2D position inside the viewport of the camera.":"通過設定物體在攝影機視窗內的 2D 位置,強制物體保持在螢幕上可見。","Stay on Screen":"留在屏幕上","Top margin":"頂部邊距","Bottom margin":"底部邊距","Left margin":"左邊距","Right margin":"右邊距","the top margin (in pixels) to leave between the object and the screen border.":"物件與螢幕邊界之間的上邊距(以像素為單位)。","Screen top margin":"螢幕上邊距","the top margin":"上邊距","the bottom margin (in pixels) to leave between the object and the screen border.":"物件與螢幕邊界之間的下邊距(以像素為單位)。","Screen bottom margin":"螢幕下邊距","the bottom margin":"下邊距","the left margin (in pixels) to leave between the object and the screen border.":"物件與螢幕邊界之間的左邊距(以像素為單位)。","Screen left margin":"螢幕左邊距","the left margin":"左邊距","the right margin (in pixels) to leave between the object and the screen border.":"物件與螢幕邊界之間的右邊距(以像素為單位)。","Screen right margin":"螢幕右邊距","the right margin":"右邊距","Stick objects to others":"黏向其他物件","Make objects follow the position and rotation of the object they are stuck to.":"使物件跟隨所黏附物件的位置和旋轉。","Check if the object is stuck to another object.":"檢查物體是否黏合另一個物體。","Is stuck to another object":"黏在另一個物體上","_PARAM1_ is stuck to _PARAM3_":"_PARAM1_ 粘在 _PARAM3_ 上","Sticker":"貼紙","Sticker behavior":"貼紙行為","Basis":"基礎","Stick the object to another. Use the action to stick the object, or unstick it later.":"將該對象固定到另一對象。使用動作來固定對象,或稍後解開它。","Only follow the position":"僅跟隨位置","Destroy when the object it's stuck on is destroyed":"當貼在的對象被銷毀時,銷毀它","Stick on another object.":"貼在另一物件上。","Stick":"貼","Stick _PARAM0_ to _PARAM2_":"將_PARAM0_貼到_PARAM2_","Object to stick to":"要貼到的物件","Unstick from the object it was stuck to.":"取消從其貼到的物件卸下。","Unstick":"卸下","Unstick _PARAM0_":"卸下_PARAM0_","Sway":"擺動","Sway objects like grass in the wind.":"像風中的草一樣擺動物件。","Sway multiple instances of an object at different times - useful for random grass swaying.":"在不同的時候搖晃對象的多個實例-用於隨機草搖擺。","Sway uses the tween behavior":"搖晃使用Tween行為","Maximum angle to the left (in degrees) - Use a negative number":"最大向左的角度(以度為單位)-使用負數","Maximum angle to the right (in degrees) - Use a positive number":"最大向右的角度(以度為單位)-使用正數","Mininum value for random tween time range for angle (seconds)":"角度的隨機Tween時間範圍的最小值(秒)","Maximum value for random tween time range for angle (seconds)":"角度的隨機Tween時間範圍的最大值(秒)","Minimum Y scale amount":"Y軸縮放的最小值","Y scale":"Y軸縮放","Maximum Y scale amount":"Y軸縮放的最大值","Mininum value for random tween time range for Y scale (seconds)":"Y軸縮放的隨機Tween時間範圍的最小值(秒)","Maximum value for random tween time range for Y scale (seconds)":"Y軸縮放的隨機Tween時間範圍的最大值(秒)","Set sway angle left and right.":"設置左右搖擺角度。","Set sway angle left and right":"設置左右搖擺角度","Sway the angle of _PARAM0_ to _PARAM2_° to the left and to _PARAM3_° to the right":"將 _PARAM0_ 的角度搖至左側 _PARAM2_°,再搖至右側 _PARAM3_°","Angle to the left (degrees) - Use negative number":"向左的角度(度)- 使用負數","Angle to the right (degrees) - Use positive number":"向右的角度(度)- 使用正數","Set sway angle time range.":"設置搖擺角度時間範圍。","Set sway angle time range":"設置搖擺角度時間範圍","Tween angle time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"為 _PARAM0_ 的角度時間範圍進行平滑,將最小設定為 _PARAM2_ 秒,最大設定為 _PARAM3_ 秒","Angle tween time minimum (seconds)":"角度縮放時間最小值(秒)","Angle tween time maximum (seconds)":"角度縮放時間最大值(秒)","Set sway Y scale mininum and maximum.":"設置左右搖擺Y軸縮放最小值和最大值。","Set sway Y scale mininum and maximum":"設置左右搖擺Y軸縮放最小值和最大值","Sway the Y scale of _PARAM0_ from _PARAM2_ to _PARAM3_":"搖擺 _PARAM0_ 的Y軸比例,從 _PARAM2_ 到 _PARAM3_","Minimum Y scale":"最小Y軸縮放","Maximum Y scale":"最大Y軸縮放","Set Y scale time range.":"設置Y軸縮放時間範圍。","Set sway Y scale time range":"設置搖擺Y軸縮放時間範圍","Tween Y scale time range for _PARAM0_, set minimum to _PARAM2_ seconds and maximum to _PARAM3_ seconds":"為 _PARAM0_ 的Y軸比例時間範圍進行平滑,將最小設定為 _PARAM2_ 秒,最大設定為 _PARAM3_ 秒","Y scale tween time minimum (seconds)":"Y軸縮放時間最小值(秒)","Y scale tween time maximum (seconds)":"Y軸縮放時間最大值(秒)","Swipe Gesture":"滑动手势","Detect swipe gestures based on their distance and duration.":"根据它们的距离和持续时间检测滑动手势。","Enable (or disable) swipe gesture detection.":"啟用(或禁用)滑動手勢檢測。","Enable (or disable) swipe gesture detection":"啟用(或禁用)滑動手勢檢測","Enable swipe detection: _PARAM1_":"啟用滑動檢測:_PARAM1_","Enable swipe detection":"啟用滑動檢測","Draw a line that indicates the current swipe gesture. Edit \"Outline Size\" of the shape painter to adjust the thickness of the line.":"繪製一條指示當前滑動手勢的線。編輯形狀繪製器的“輪廓大小”以調整線的厚度。","Draw swipe gesture":"繪製滑動手勢","Draw a line with _PARAM1_ that shows the current swipe":"使用 _PARAM1_ 繪製一條線,顯示當前的滑動","Shape painter used to draw swipe":"用來繪製滑動的形狀繪製機","Change the layer used to detect swipe gestures.":"更改用於檢測滑動手勢的圖層。","Layer used to detect swipe gestures":"用於檢測滑動手勢的圖層","Use layer _PARAM1_ to detect swipe gestures":"使用圖層_PARAM1_來檢測滑動手勢","the Layer used to detect swipe gestures.":"用來檢測滑動手勢的圖層。","the Layer used to detect swipe gestures":"用來檢測滑動手勢的圖層","Swipe angle (degrees).":"滑動角度(度)。","Swipe angle (degrees)":"滑動角度(度)","the swipe angle (degrees)":"滑動角度(度)","Swipe distance (pixels).":"滑動距離(像素)。","Swipe distance (pixels)":"滑動距離(像素)","the swipe distance (pixels)":"滑動距離(像素)","Swipe distance in horizontal direction (pixels).":"水平方向上的滑動距離(像素)。","Swipe distance in horizontal direction (pixels)":"水平方向上的滑動距離(像素)","the swipe distance in horizontal direction (pixels)":"水平方向上的滑動距離(像素)","Swipe distance in vertical direction (pixels).":"垂直方向上的滑動距離(像素)。","Swipe distance in vertical direction (pixels)":"垂直方向上的滑動距離(像素)","the swipe distance in vertical direction (pixels)":"垂直方向上的滑動距離(像素)","Start point of the swipe X position.":"滑動開始點的X座標。","Start point of the swipe X position":"滑動開始點的X座標","the start point of the swipe X position":"滑動開始點的X座標","Start point of the swipe Y position.":"滑動開始點的Y座標。","Start point of the swipe Y position":"滑動開始點的Y座標","the start point of the swipe Y position":"滑動開始點的Y座標","End point of the swipe X position.":"滑動結束點的X座標。","End point of the swipe X position":"滑動結束點的X座標","the end point of the swipe X position":"滑動結束點的X座標","End point of the swipe Y position.":"滑動結束點的Y座標。","End point of the swipe Y position":"滑動結束點的Y座標","the end point of the swipe Y position":"滑動結束點的Y座標","Swipe duration (seconds).":"滑動持續時間(秒)。","Swipe duration (seconds)":"滑動持續時間(秒)","swipe duration (seconds)":"滑動持續時間(秒)","Check if a swipe is currently in progress.":"檢查是否當前正在進行滑動。","Swipe is in progress":"滑動正在進行中","Check if swipe detection is enabled.":"檢查是否啟用滑動檢測。","Is swipe detection enabled":"滑動檢測是否已啟用","Swipe detection is enabled":"啟用滑動偵測","Check if the swipe has just ended.":"檢查滑動是否剛剛結束。","Swipe just ended":"剛剛結束的滑動","Swipe has just ended":"滑動剛剛結束","Check if swipe moved in a given direction.":"檢查滑動是否朝指定方向移動。","Swipe moved in a direction (4-way movement)":"在某個方向滑動(四方位移動)","Swipe moved in direction _PARAM1_":"在某個方向滑動 _PARAM1_","Swipe moved in a direction (8-way movement)":"在某個方向滑動(8方位移動)","Text-to-Speech":"文字转语音","An extension to enable the use of Text-to-Speech features.":"启用文字转语音功能的扩展。","Audio":"音频","Speaks a text message aloud through the system text-to-speech.":"透過系統的文字轉語音讀出文字訊息。","Speak out a message":"讀出訊息","Say _PARAM1_ with voice _PARAM2_, volume _PARAM3_%, rate _PARAM4_% and pitch _PARAM5_%":"以_VOICE2_發聲,音量_VOLUME3%,速率_RATE4%和音調_PITCH5%說_PARAM1_","The message to be spoken":"要述說的訊息","The voice to be used":"要使用的聲音","Voices vary depending on the operating system. \nHere is a list of windows voice names: https://bit.ly/windows-voices \nAnd here is a list of voice names for MacOS: https://bit.ly/mac-voices":"聲音因作業系統而異。這是 Windows 聲音名稱清單:https://bit.ly/windows-voices這是 MacOS 的聲音名稱清單:https://bit.ly/mac-voices","Volume between 0% and 100%":"音量介於0%和100%之間","Speed between 10% and 1000%":"速度介於10%和1000%之間","Pitch between 0% and 200%":"音調介於0%和200%之間","Forces all Text-to-Speech to be stopped.":"強制停止所有的文字轉語音。","Force stop speaking":"強制停止朗讀","Third person camera":"第三人称视角摄像机","Move the camera to look at an object from a given distance.":"将摄像机移动到距离给定对象一定距离。","Move the camera to look at a position from a distance.":"將攝影機移動到遠處的位置看著一個位置。","Look at a position from a distance (deprecated)":"遠處看著一個位置(已過時)","Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°":"將_PARAM6_的相機移動到看向_PARAM1_; _PARAM2_從_PARAM3_像素處旋轉_PARAM4°並有_PARAM5°的仰角","Position on X axis":"X軸上位置","Position on Y axis":"Y軸上位置","Rotation angle (around Z axis)":"旋轉角度(繞Z軸)","Elevation angle (around Y axis)":"仰角(繞Y軸)","Move the camera to look at an object from a distance.":"將攝影機移動到遠處看著一個物件。","Look at an object from a distance (deprecated)":"遠處看著一個物件(已過時)","Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_° and an elevation of _PARAM4_°":"將_PARAM5_的相機移動到從_PARAM2_像素處看_PARAM1_,旋轉_PARAM3°並有_PARAM4°的仰角","Look at a position from a distance":"遠處看著一個位置","Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_° and an elevation of _PARAM6_°":"將_PARAM7_的相機移動至_PARAM1_; _PARAM2_; _PARAM3_來自_PARAM4_像素的旋轉角為_PARAM5_°和仰角_PARAM6_°","Position on Z axis":"Z軸上的位置","Look at an object from a distance":"從遠處觀看一個物體","Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°":"將_PARAM6_的相機移動至_PARAM1_來自_PARAM3_像素的旋轉角為_PARAM4_°和仰角_PARAM5_°","Smoothly follow an object at a distance.":"平滑地跟隨一個物體在遠處。","Halfway time for rotation":"旋轉的一半時間","Halfway time for elevation rotation":"高度旋轉的中途時間","Only used by Z and ZY rotation modes":"僅供 Z 和 ZY 旋轉模式使用","Halfway time on Z axis":"Z軸上的一半時間","Camera distance":"相機距離","Lateral distance offset":"橫向距離偏移","Ahead distance offset":"前方距離偏移","Z offset":"Z偏移","Rotation angle offset":"旋轉角度偏移","Elevation angle offset":"仰角偏移","Follow free area top border on Z axis":"Z軸上的自由區域頂部邊界跟隨","Follow free area bottom border on Z axis":"Z軸上的自由區域底部邊界跟隨","Automatically rotate the camera with the object":"與物體自動旋轉相機","Automatically rotate the camera with the object (elevation)":"Automatically rotate the camera with the object (elevation)","Best left unchecked, use the rotation mode instead":"最好保持未選中,請改用旋轉模式","Rotation mode":"旋轉模式","Targeted camera rotation angle":"目標相機旋轉角","Forward X":"向前 X","Forward Y":"向前 Y","Forward Z":"前進Z","Lerp camera":"線性插值相機","Lerp the camera rotation to _PARAM0_ with a ratio of _PARAM2_ with rotation offset _PARAM3_° and elevation offset _PARAM4_°":"將相機旋轉線性插值到 _PARAM0_,比例為 _PARAM2_,旋轉偏移為 _PARAM3_°,提升偏移為 _PARAM4_°","Move to object":"移動到物件","Change the camera position to _PARAM0_ with offset _PARAM2_, _PARAM3_, _PARAM4_":"將相機位置更改為 _PARAM0_,偏移量為 _PARAM2_、_PARAM3_、_PARAM4_","X offset":"X 偏移量","Y offset":"Y 偏移量","Update local basis":"更新本地基準","Update local basis of _PARAM0_ and the camera":"更新 _PARAM0_ 和相機的本地基準","Rotate the camera all the way to the targeted angle.":"將相機旋轉至目標角度。","Rotate the camera all the way":"將相機旋轉完全","Rotate the camera all the way to the targeted angle of _PARAM0_":"將相機旋轉至目標角度 _PARAM0_","the camera rotation.":"相機旋轉。","Camera rotation":"相機旋轉","the camera rotation":"相機旋轉","the halfway time for rotation of the object.":"對象旋轉的一半時間。","the halfway time for rotation":"旋轉的一半時間","the halfway time for elevation rotation of the object.":"the halfway time for elevation rotation of the object.","Halfway time for elevation rotation":"Halfway time for elevation rotation","the halfway time for elevation rotation":"the halfway time for elevation rotation","the halfway time on Z axis of the object.":"對象Z軸旋轉的一半時間。","the halfway time on Z axis":"在Z軸上的一半時間","Return follow free area bottom border Z.":"返回跟隨自由區底部邊界Z軸。","Free area Z min":"自由區Z軸最小值","Return follow free area top border Z.":"返回跟隨自由區頂部邊界Z軸。","Free area Z max":"最大的自由區域 Z","the follow free area top border on Z axis of the object.":"對象 Z 軸上的跟隨自由區域頂部邊界。","the follow free area top border on Z axis":"在 Z 軸上的跟隨自由區域頂部邊界","the follow free area bottom border on Z axis of the object.":"對象 Z 軸上的跟隨自由區域底部邊界。","the follow free area bottom border on Z axis":"在 Z 軸上的跟隨自由區域底部邊界","the camera distance of the object.":"對象的攝影機距離。","the camera distance":"攝影機距離","the lateral distance offset of the object.":"對象的橫向距離偏移。","the lateral distance offset":"橫向距離偏移","the ahead distance offset of the object.":"對象的向前距離偏移。","the ahead distance offset":"向前距離偏移","the z offset of the object.":"對象的 Z 軸偏移。","the z offset":"Z 軸偏移","the rotation angle offset of the object.":"對象的旋轉角度偏移。","the rotation angle offset":"旋轉角度偏移","the elevation angle offset of the object.":"對象的俯仰角度偏移。","the elevation angle offset":"俯仰角度偏移","the targeted camera rotation angle of the object. When this angle is set, the camera follow this value instead of the object angle.":"對象的目標攝影機旋轉角度。當設定這個角度時,攝影機跟隨此值而不是對象角度。","Targeted rotation angle":"目標旋轉角度","the targeted camera rotation angle":"目標攝影機旋轉角度","3D-like Flip for 2D Sprites":"2D 精靈的 3D 類翻轉","Flip sprites with a 3D-like rotation effect.":"用 3D 類旋轉效果翻轉精靈。","Flip a Sprite with a 3D effect.":"以3D效果翻轉一個精靈。","3D Flip":"3D翻轉","Flipping method":"翻轉方法","Front animation name":"前方動畫名稱","Animation method":"動畫方法","Back animation name":"後方動畫名稱","Start a flipping animation on the object.":"在對象上開始一個翻轉動畫。","Flip the object (deprecated)":"翻轉對象(已棄用)","Flip _PARAM0_ over _PARAM2_ms":"翻轉 _PARAM0_ 在 _PARAM2_ms 的時間內","Duration (in milliseconds)":"持續時間(以毫秒為單位)","Start a flipping animation on the object. The X origin point must be set at the object center.":"在對象上開始一個翻轉動畫。X 原點必須設置在對象中心。","Flip the object":"翻轉對象","Flip _PARAM0_ over _PARAM2_ seconds":"翻轉 _PARAM0_ 在 _PARAM2_ 秒內","Jump to the end of the flipping animation.":"跳到翻轉動畫的結尾。","Jump to flipping end":"跳到翻轉結尾","Jump to the end of _PARAM0_ flipping":"跳到 _PARAM0_ 翻轉的結尾","Checks if a flipping animation is currently playing.":"檢查是否當前正在播放翻轉動畫。","Flipping is playing":"正在播放翻轉動畫","_PARAM0_ is flipping":"_PARAM0_ 正在翻轉","Checks if the object is flipped or will be flipped.":"檢查對象是否翻轉或將被翻轉。","Is flipped":"被翻轉了","_PARAM0_ is flipped":"_PARAM0_被翻轉","Flips the object to one specific side.":"將對象翻轉到指定的一側。","Flip to a side (deprecated)":"翻轉到一側(已棄用)","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ms":"翻轉_PARAM0_到反面: _PARAM2_超過_PARAM3_ms","Reverse side":"反面","Flips the object to one specific side. The X origin point must be set at the object center.":"將對象翻轉到指定的一側。X起點必須設置在對象中心。","Flip to a side":"翻轉到一側","Flip _PARAM0_ to the reverse side: _PARAM2_ over _PARAM3_ seconds":"翻轉_PARAM0_到反面: _PARAM2_超過_PARAM3_秒","Visually flipped":"視覺翻轉","_PARAM0_ is visually flipped":"_PARAM0_被視覺翻轉","Flip visually":"視覺翻轉","Flip visually _PARAM0_: _PARAM2_":"視覺翻轉_PARAM0_: _PARAM2_","Flipped":"翻轉","Resource bar (separated units)":"資源欄 (分離單位)","left anchor":"左側錨點","Left anchor":"左錨點","Left anchor of _PARAM1_":"_PARAM1_ 的左錨點","Anchor":"錨點","Right anchor":"右側錨點","Right anchor of _PARAM1_":"_PARAM1_ 的右側錨點","Unit width":"單位寬度","How much pixels to show for a value of 1.":"對於值為1,要顯示多少像素。","the unit width of the object. How much pixels to show for a value of 1.":"物件的單位寬度。顯示值 1 需要多少像素。","the unit width":"單位寬度","Update the bar width.":"更新條寬度。","Bar width":"條寬度","Update the bar width of _PARAM0_":"更新 _PARAM0_ 的條形寬度","Time formatting":"時間格式化","Converts seconds into standard time formats, such as HH:MM:SS.":"Converts seconds into standard time formats, such as HH:MM:SS.","Format time in seconds to HH:MM:SS.":"將時間格式化為HH:MM:SS。","Format time in seconds to HH:MM:SS":"將時間格式化為HH:MM:SS","Format time _PARAM1_ to HH:MM:SS in _PARAM2_":"將_PARAM1_的時間格式化為PARAM2_的HH:MM:SS。","Time, in seconds":"時間,以秒為單位","Format time in seconds to HH:MM:SS.000, including milliseconds.":"將時間格式化為HH:MM:SS.000,包括毫秒。","Format time in seconds to HH:MM:SS.000":"將時間格式化為HH:MM:SS.000","Timed Back and Forth Movement":"定時來回運動","This behavior moves objects back and forth for a chosen time or distance, vertically or horizontally.":"此行為會讓物件在選定的時間或距離內垂直或水平來回移動。","Move an object (e.g. enemy) for a chosen time or distance, then flip it and start over.":"在選定的時間或距離內移動一個物體(例如敵人),然後翻轉並重新開始。","Move the object vertically (instead of horizontally)":"垂直移動物體(而不是水平移動)","Moving speed (in pixel/s)":"移動速度(以像素/秒計)","Moving distance (in pixels)":"移動距離(以像素計)","Moving maximum time (in seconds)":"移動的最大時間(以秒計)","Distance start point":"距離起始點","position of the sprite at the previous frame":"精靈在上一幀的位置","check that time has elapsed":"檢查時間是否已經過","Toggle switch (for Shape Painter)":"切換開關(適用於圖形繪製器)","Use a shape-painter object to draw a toggle switch that users can click or touch.":"使用形狀繪製物件來繪製一個切換開關,用戶可以點擊或觸摸。","Radius of the thumb (px) Example: 10":"指尖的半徑(像素)示例:10","Active thumb color string. Example: 24;119;211":"活動指尖顏色字符串。 示例:24;119;211","Opacity of the thumb. Example: 255":"指尖的不透明度。 示例:255","Width of the track (pixels) Example: 20":"軌道寬度(像素)示例:20","Height of the track (pixels) Example: 14":"軌道高度(像素)示例:14","Color string for the track that is RIGHT of the thumb. Example: 150;150;150 (Leave blank to use thumb color)":"右邊指尖軌道的顏色字符串。 示例:150;150;150(留空以使用指尖顏色)","Opacity of the track that is RIGHT of the thumb. Example: 255":"右邊指尖軌道的不透明度。 示例:255","Color string for the track that is LEFT of the thumb. Example: 24;119;211 (Leave blank to use thumb color)":"左邊指尖軌道的顏色字符串。 示例:24;119;211(留空以使用指尖顏色)","Opacity of the track that is LEFT of the thumb. Example: 128":"左邊指尖軌道的不透明度。 示例:128","Size of halo when the mouse hovers and clicks on the thumb. Example: 24":"當滑鼠懸停和點擊指尖時的光暈大小。 示例:24","Opacity of halo when the mouse hovers on the thumb. Example: 32":"當滑鼠懸停在指尖上時的光暈不透明度。 示例:32","Opacity of the halo that appears when the toggle switch is pressed. Example: 64":"切換開關被按下時出現的光暈的不透明度。 示例:64","Number of pixels the thumb is from the left side of the track.":"指尖距左側軌道的像素數。","Disabled":"禁用","State has been changed (used in ToggleChecked function)":"狀態已更改(在ToggleChecked功能中使用)","Inactive thumb color string. Example: 255;255;255":"非活動指尖顏色字符串。 示例:255;255;255","Click or press has started on toggle switch":"點擊或按壓在切換開關上開始","Offset (Y) of shadow on thumb. Positive numbers move shadow down, negative numbers move shadow up. Example: 4":"指尖陰影的Y偏移。 正數向下移動陰影,負數向上移動陰影。 示例:4","Offset (X) of shadow on thumb. Positive numbers move shadow right, negative numbers move shadow left. Example: 0":"指尖上的陰影的X偏移。 正數向右移動陰影,負數向左移動陰影。 示例:0","Opacity of shadow on thumb. Example: 32":"指尖上的陰影的不透明度。 示例:32","Need redraw":"需要重新繪製","Was hovered":"過去曾懸停","Change the track width.":"更改軌道寬度。","Change the track width of _PARAM0_ to _PARAM2_ pixels":"將_PARAM0_的軌道寬度改為_PARAM2_像素","Change the track height.":"更改軌道高度。","Track height":"軌道高度","Change the track height of _PARAM0_ to _PARAM2_ pixels":"將_PARAM0_的軌道高度改為_PARAM2_像素","Change the thumb opacity.":"更改拇指不透明度。","Change the thumb opacity of _PARAM0_ to _PARAM2_":"將_PARAM0_的拇指不透明度改為_PARAM2_","Change the inactive track opacity.":"更改非活動軌道不透明度。","Change the inactive track opacity of _PARAM0_ to _PARAM2_":"將_PARAM0_的非活動軌道不透明度改為_PARAM2_","Change the active track opacity.":"更改活動軌道不透明度。","Change the active track opacity of _PARAM0_ to _PARAM2_":"將_PARAM0_的活動軌道不透明度改為_PARAM2_","Change the halo opacity when the thumb is pressed.":"按下拇指時更改光暈不透明度。","Change the halo opacity of _PARAM0_ to _PARAM2_":"將_PARAM0_的光暈不透明度改為_PARAM2_","Change opacity of the halo when the thumb is hovered.":"拇指懸停時更改光暈不透明度。","Change the offset on Y axis of the thumb shadow.":"更改拇指陰影在Y軸上的偏移量。","Thumb shadow offset on Y axis":"拇指陰影在Y軸上的偏移量","Change the offset on Y axis of the thumb shadow of _PARAM0_ to _PARAM2_":"將_PARAM0_的拇指陰影在Y軸上的偏移量改為_PARAM2_","Y offset (pixels)":"Y軸偏移量(像素)","Change the offset on X axis of the thumb shadow.":"更改拇指陰影在X軸上的偏移量。","Thumb shadow offset on X axis":"X軸的指示燈陰影偏移","Change the offset on X axis of the thumb shadow of _PARAM0_ to _PARAM2_":"更改 _PARAM0_ 的X軸指示燈陰影偏移為 _PARAM2_","X offset (pixels)":"X軸偏移(像素)","Change the thumb shadow opacity.":"更改指示燈陰影的不透明度","Thumb shadow opacity":"指示燈陰影不透明度","Change the thumb shadow opacity of _PARAM0_ to _PARAM2_":"更改 _PARAM0_的指示燈陰影不透明度為_PARAM2_","Opacity of shadow on thumb":"指示燈上的陰影不透明度","Change the thumb radius.":"更改指示燈半徑","Thumb radius":"指示燈半徑","Change the thumb radius of _PARAM0_ to _PARAM2_ pixels":"將_PARAM0_的指示燈半徑更改為_PARAM2_像素","Change the halo radius.":"更改光暈半徑","Change the halo radius of _PARAM0_ to _PARAM2_ pixels":"將_PARAM0_的光暈半徑更改為_PARAM2_像素","Change the active track color (the part on the thumb left).":"更改活動軌道顏色(指示燈左側的部分)","Change the active track color of _PARAM0_ to _PARAM2_":"將_PARAM0_的活動軌道顏色更改為_PARAM2_","Color of active track":"活動軌道顏色","Change the inactive track color (the part on the thumb right).":"更改非活動軌道顏色(指示燈右側的部分)","Change the inactive track color of _PARAM0_ to _PARAM2_":"將_PARAM0_的非活動軌道顏色更改為_PARAM2_","Color of inactive track":"非活動軌道顏色","Change the thumb color (when unchecked).":"更改指示燈顏色(未選中時)","Thumb color (when unchecked)":"指示燈顏色(未選中時)","Change the thumb color of _PARAM0_ (when unchecked) to _PARAM2_":"將_PARAM0_的指示燈顏色(未選中時)更改為_PARAM2_","Change the thumb color (when checked).":"更改指示燈顏色(選中時)","Thumb color (when checked)":"指示燈顏色(選中時)","Change the thumb color of _PARAM0_ (when checked) to _PARAM2_":"將_PARAM0_的指示燈顏色(選中時)更改為_PARAM2_","If checked, change to unchecked. If unchecked, change to checked.":"如果選中,則更改為未選中。如果未選中,則更改為選中。","Toggle the switch":"切換開關","Change _PARAM0_ to opposite state (checked/unchecked)":"將_PARAM0_更改為相反狀態(選中/未選中)","Disable (or enable) the toggle switch.":"禁用(或啟用)切換開關","Disable (or enable) the toggle switch":"禁用(或啟用)切換開關","Disable _PARAM0_: _PARAM2_":"禁用_PARAM0_: _PARAM2_","Check (or uncheck) the toggle switch":"選中(或取消選中)切換開關","Set _PARAM0_ to checked: _PARAM2_":"將_PARAM0_設置為已選中: _PARAM2_","Check if mouse is hovering over toggle switch.":"檢查滑鼠是否懸停在切換開關上。","Is mouse hovered over toggle switch?":"滑鼠是否懸停在切換開關上?","Mouse is hovering over _PARAM0_":"滑鼠正在懸停在_PARAM0_上","Track width.":"軌道寬度。","Track height.":"軌道高度。","Offset (Y) of shadow on thumb.":"拇指上的陰影偏移(Y)。","Offset (Y) of shadow on thumb":"拇指上的陰影偏移(Y)","Offset (X) of shadow on thumb.":"拇指上的陰影偏移(X)。","Offset (X) of shadow on thumb":"拇指上的陰影偏移(X)","Opacity of shadow on thumb.":"拇指上的陰影不透明度。","Thumb opacity.":"拇指不透明度。","Active track opacity.":"活動軌道不透明度。","Inactive track opacity.":"非活動軌道不透明度。","Halo opacity (pressed).":"光暈不透明度(按下時)。","Halo opacity (hover).":"光暈不透明度(懸停時)。","Halo radius (pixels).":"光暈半徑(像素)。","Active track color.":"活動軌道顏色。","Inactive track color.":"非活動軌道顏色。","Active thumb color.":"活動拇指顏色。","Active thumb color":"活動拇指顏色","Check if the toggle switch is disabled.":"檢查切換開關是否已禁用。","Is disabled":"已禁用","Inactive thumb color.":"非活動拇指顏色。","Inactive thumb color":"非活動拇指顏色","Top-down movement animator":"Top-down movement animator","Change the animation according to the movement direction.":"Change the animation according to the movement direction.","Top-down movement":"Top-down movement","Scale animations according to speed":"Scale animations according to speed","Pause animations when objects stop":"Pause animations when objects stop","Animations must be called \"Walk0\", \"Walk1\"... for left, down...":"Animations must be called \"Walk0\", \"Walk1\"... for left, down...","Number of directions":"Number of directions","Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.":"Leave to 0 to automatically use 8 when diagonals are allowed and 4 otherwise.","Set to 90°, \"Walk0\" becomes the animation for down.":"Set to 90°, \"Walk0\" becomes the animation for down.","Update the animation according to the object direction.":"Update the animation according to the object direction.","Update animation":"Update animation","Update the animation of _PARAM0_":"Update the animation of _PARAM0_","the animation name of the object.":"the animation name of the object.","the animation name":"the animation name","Check if animations are paused when objects stop.":"Check if animations are paused when objects stop.","_PARAM0_ animations are paused when objects stop":"_PARAM0_ animations are paused when objects stop","Change whether animations are paused when objects stop.":"Change whether animations are paused when objects stop.","Pause animations of _PARAM0_ when stopped: _PARAM2_":"Pause animations of _PARAM0_ when stopped: _PARAM2_","IsPausingAnimation":"IsPausingAnimation","Check if animations are scaled according to speed.":"Check if animations are scaled according to speed.","_PARAM0_ animations are scaled according to speed":"_PARAM0_ animations are scaled according to speed","Change whether animations are scaled according to speed or not.":"Change whether animations are scaled according to speed or not.","Scale animations of _PARAM0_ according to speed: _PARAM2_":"Scale animations of _PARAM0_ according to speed: _PARAM2_","IsScalingAnimation":"IsScalingAnimation","Change the animation speed scale according to the object speed.":"Change the animation speed scale according to the object speed.","Animation speed scale":"Animation speed scale","Change the animation speed scale according to _PARAM0_ speed":"Change the animation speed scale according to _PARAM0_ speed","Pause the animation according to the object speed.":"Pause the animation according to the object speed.","Animation pause":"Animation pause","Pause the animation according to _PARAM0_ speed":"Pause the animation according to _PARAM0_ speed","Return the object movement direction.":"Return the object movement direction.","Return the difference between 2 directions.":"Return the difference between 2 directions.","Direction dirrerence":"Direction dirrerence","Other direction":"Other direction","Update the animation direction of the object.":"Update the animation direction of the object.","Update animation direction":"Update animation direction","Update the animation direction of _PARAM0_":"Update the animation direction of _PARAM0_","Update the animation name.":"Update the animation name.","Update animation name":"Update animation name","Update the animation name of _PARAM0_":"Update the animation name of _PARAM0_","Make object travel to random positions":"使物件前往隨機位置","Make object travel to random positions (with the pathfinding behavior).":"使物件前往隨機位置(使用尋路行為)。","Make object travel to a random position around the object current position. The movement is initiated only when the object is not moving already (its Pathfinding behavior speed is 0). Move towards a specified angle, if desired.":"使物體移動到物體當前位置周圍的隨機位置。只有在物體尚未移動時才會啟動移動(其尋路行為速度為0)。根據需要,向指定的角度移動。","Make object travel to a random position, with optional direction":"使物體移動到隨機位置,方向可選","Move _PARAM1_ to random positions, where each stop is at least _PARAM3_px and at most _PARAM4_px from the current position. Move towards angle _PARAM5_ with a bias of _PARAM6_":"將_PARAM1_移動到隨機位置,其中每個停止點至少距離當前位置_PARAM3_px,最多距離_PARAM4_px。帶有偏向角度_PARAM5_,偏向值為_PARAM6_","Object that will be travelling (must have Pathfinding behavior)":"將進行移動的物體(必須具有尋路行為)","Pathfinding Behavior (required)":"尋路行為(必填)","Minimum distance between each position (Default: 100px)":"每個位置之間的最小距離(默認值:100px)","Maximum distance between each position (Default: 200px)":"每個位置之間的最大距離(默認值:200px)","Direction (in degrees) the object will move towards (Range: 0-360)":"物體將移動的方向(範圍:0-360度)","Direction bias (Range: 0-1)":"方向偏向(範圍:0-1)","For example: \"0\" picks a completely random direction, \"0.5\" will select a direction within the half-circle that faces the specified direction, and \"1\" simply uses the specified direction.":"例如:“0”選擇完全隨機的方向,“0.5”將在面對指定方向的半圓中選擇一個方向,“1”僅使用指定方向。","Turret 2D movement":"炮塔的2D移動","A turret movement with customizable speed, acceleration and stop angles.":"具有可自訂速度、加速度和停止角度的砲塔運動。","Turret movement":"砲塔運動","Maximum rotation speed (in degrees per second)":"最大旋轉速度(每秒度)","Maximum angle (use the same value for min and max to set no constraint)":"最大角度(使用相同的值設置最大和最小以不設置限制)","Minimum angle (use the same value for min and max to set no constraint)":"最小角度(使用相同的值設置最小和最大以不設置限制)","Aiming angle property":"瞄準角度屬性","Must move clockwise":"必須順時針移動","Must move counter-clockwise":"必須逆時針移動","Has moved":"已移動","Target angle (MoveToward)":"目標角度(MoveToward)","Origin angle: the farest angle from AngleMin and AngleMax":"起始角度:離AngleMin和AngleMax最遠的角度","Check if the turret is moving.":"檢查砲塔是否在移動。","Move clockwise.":"順時針移動。","Move clockwise":"順時針移動","Move _PARAM0_ clockwise":"將_PARAM0_順時針移動","Move counter-clockwise.":"逆時針移動。","Move counter-clockwise":"逆時針移動","Move _PARAM0_ counter-clockwise":"將_PARAM0_逆時針移動","Set angle toward a position.":"設定角度朝向一個位置。","Set aiming angle toward a position":"設定朝向一個位置的瞄準角度","Set the aiming angle of _PARAM0_ toward _PARAM2_;_PARAM3_":"將_PARAM0_的瞄準角度朝向_PARAM2_;_PARAM3_","Move toward a position.":"移動到一個位置。","Move _PARAM0_ toward _PARAM2_; _PARAM3_ within a _PARAM4_° margin":"將_PARAM0_移動到_PARAM2_; _PARAM3_,在_PARAM4_°邊界內","Angle margin":"角度邊界","Change the aiming angle.":"變更瞄準角度。","Aiming angle":"瞄準角度","Change the aiming angle of _PARAM0_ to _PARAM2_°":"更改 _PARAM0_ 的瞄準角度為 _PARAM2_°","Aiming angle (between 0° and 360° if no stop angle are set).":"瞄准角度(如果未设置停止角度,则在 0° 和 360° 之间)。","Tween into view":"緩動到視圖","Tween objects into position from off screen.":"將物件從屏幕外的位置緩動到目標位置。","Motion":"運動","Leave this value at 0 to move the object in from outside of the screen.":"將此值設為0以從屏幕之外移動物件。","Tween in the object at creation":"在創建時進行物件的緩動","Moving in easing":"移動進入的緩動","Moving out easing":"移動出去的緩動","Delete the object when the \"tween out of view\" action has finished":"在「緩動出視圖」操作完成後刪除物件","Fade in/out the object":"淡入/淡出物件","The X position at the end of fade in":"淡入結束時的 X 位置","The Y position at the end of fade in":"淡入結束時的 Y 位置","Objects with opacity":"具有不透明度的物件","Move the object":"移動物件","Delay":"延遲","Fade in easing":"淡入緩動","Fade out easing":"淡出緩動","The X position at the beginning of fade in":"淡入開始時的 X 位置","The Y position at the beginning of fade in":"淡入開始時的 Y 位置","Return the X position at the beginning of the fade-in.":"返回淡入開始時的 X 位置。","Return the Y position at the beginning of the fade-in.":"返回淡入開始時的 Y 位置。","Tween the object to its set starting position.":"將物件緩動到其設置的起始位置。","Tween _PARAM0_ into view":"將 _PARAM0_ 緩動到視圖","Tween the object to its off screen position.":"將物件緩動到其屏幕外的位置。","Tween out of view":"緩動出視圖","Tween _PARAM0_ out of view":"將 _PARAM0_ 緩動出視圖","Check if the object finished tweening into view.":"檢查物件是否完成緩動進入視圖。","Tweened into view":"已緩動到視圖","_PARAM0_ finished tweening into view":"_PARAM0_ 已完成緩動進入視圖","Check if the object finished tweened out of view.":"檢查物件是否完成緩動出視圖。","Tweened out of view":"已緩動出視圖","_PARAM0_ finished tweening out of view":"_PARAM0_ 已完成緩動出視圖","Set whether to delete the object when the \"tween out of view\" action has finished.":"設置是否在「緩動出視圖」操作完成後刪除物件。","Delete after tween out":"緩動後刪除","Should delete _PARAM0_ when the \"tween out of view\" action has finished: _PARAM2_":"是否在「緩動出視圖」操作完成後刪除 _PARAM0_: _PARAM2_","Should delete the object when the \"tween out of view\" action has finished":"在「緩動出視圖」操作完成後是否刪除物件","Two choices dialog boxes":"兩個選擇的對話框","A dialog box with buttons to let users make a choice.":"帶有按鈕的對話框,讓使用者進行選擇。","A dialog box showing two options.":"顯示兩個選項的對話框","Two choices dialog box":"兩個選項對話框","Cancel with Escape key":"使用Esc鍵取消","Enable or disable the escape key to close the dialog.":"啟用或禁用Esc鍵以關閉對話框。","Label for the \"Yes\" button":"\"是\"按鈕的標籤","This is the button with identifier 0.":"這是標識符為0的按鈕。","Label for the \"No\" button":"“否”按钮的标签","This is the button with identifier 1.":"這是帶有識別符1的按鈕。","Sound at hovering":"懸浮時的音效","Check if the \"Yes\" button of the dialog was selected.":"检查对话框中的“是”按钮是否已选择。","\"Yes\" button is clicked":"已点击“是”按钮","\"Yes\" button of _PARAM0_ is clicked":"“是”按鈕已點擊 _PARAM0_","Check if the \"No\" button of the dialog was selected.":"检查对话框中的“否”按钮是否已选择。","\"No\" button is clicked":"已点击“否”按钮","\"No\" button of _PARAM0_ is clicked":"“否”按鈕已點擊 _PARAM0_","the highlighted button.":"突出显示的按钮。","Highlighted button":"突出显示的按钮","the highlighted button":"突出显示的按钮","the text shown by the dialog.":"对话框显示的文本。","Text message":"文本消息","the text":"文本","Webpage URL tools (Web browser)":"網頁 URL 工具(Web 瀏覽器)","Allows to read URL where a web-game is hosted and manipulate URL strings.":"允許讀取網路遊戲所托管的URL並操作URL字串。","Gets the URL of the current game page.":"取得目前遊戲頁面的URL。","Get the URL of the web page":"取得網頁頁面的URL","Reloads the current web page.":"重新載入目前的網頁頁面。","Reload the web page":"重新載入網頁頁面","Reload the current page":"重新載入目前的頁面","Loads another page in place of the current one.":"載入另一個網頁以取代目前的網頁。","Redirect to another page":"重定向到另一個頁面","Redirect to _PARAM1_":"重定向到_PARAM1_","URL to redirect to":"重定向到的URL","Get an attribute from a URL.":"從URL中取得屬性。","Get URL attribute":"取得URL屬性","The URL to get the attribute from":"要從中取得屬性的URL","The attribute to get":"要取得的屬性","Gets a parameter of a URL query string.":"取得URL查詢字串的參數。","Get a parameter of a URL query string":"取得URL查詢字串的參數","The URL to get a query string parameter from":"要從中取得查詢字串參數的URL","The query string parameter to get":"要取得的查詢字串參數","Updates a specific part of a URL.":"更新URL的特定部分。","Update a URL attribute":"更新URL屬性","The URL to change":"要更改的URL","The attribute to update":"要更新的屬性","The new value of this attribute":"此屬性的新值","Sets or replaces a query string parameter of a URL.":"設定或替換URL的查詢字串參數。","Change a get parameter of a URL":"更改URL的參數","The query string parameter to update":"要更新的查詢字串參數","The new value of the query string parameter":"查詢字串參數的新值","Removes a query string parameter from an URL.":"從URL中刪除查詢字串參數。","Remove a get parameter of an URL":"刪除URL的查詢字串參數","The query string parameter to remove":"要刪除的查詢字串參數","Unique Identifiers":"唯一識別符","A collection of UID generation expressions.":"一組 UID 生成表達式。","Generates a unique identifier with the UUIDv4 pattern.":"以UUIDv4模式生成唯一標識符。","Generate a UUIDv4":"產生UUIDv4","Generates a unique identifier with the incremented integer pattern.":"以遞增整數模式生成唯一標識符。","Generate an incremented integer UID":"產生遞增整數UID","Unicode":"Unicode","Provides conversion tools for Ascii and Unicode characters.":"提供 Ascii 和 Unicode 字元的轉換工具。","Reverses the unicode of a string with a base.":"反轉帶有基數的字串的Unicode。","Reverse the unicode of a string":"反轉字串的Unicode","String to reverse":"要反轉的字串","Base of the reverse (Default: 2)":"反轉的基數(預設: 2)","Range of unicode characters (Put 16 here to support the most characters if you put 2 in the base)":"Unicode 字元範圍(將 16 放在這裡以支援最多字元,如果在基數中放入 2)","Converts a unicode representation into String with a base.":"將 Unicode 表示轉換為具有基數的字符串。","Unicode to string":"Unicode 轉為字符串","The unicode to convert to String":"要轉換為字符串的 Unicode","Base":"基數","Seperator text (Optional)":"分隔文本(可選)","Converts a string into unicode representation with a base.":"將字符串轉換為具有基數的 Unicode 表示。","String to unicode conversion":"字符串到 Unicode 轉換","The string to convert to unicode":"要轉換為 Unicode 的字符串","Values of multiple objects":"多個對象的值","Values of picked object instances (including position, size, force and angle).":"選取的物件實例的值(包括位置、大小、力量和角度)。","Minimum X position of picked object instances (using AABB of objects).":"選取對象實例的最小 X 位置(使用對象的 AABB)。","Minimum X position of picked object instances":"選取對象實例的最小 X 位置","objects":"對象","Maximum X position of picked object instances (using AABB of objects).":"選取對象實例的最大 X 位置(使用對象的 AABB)。","Maximum X position of picked object instances":"選取對象實例的最大 X 位置","Minimum Y position of picked object instances (using AABB of objects).":"選取對象實例的最小 Y 位置(使用對象的 AABB)。","Minimum Y position of picked object instances":"選取對象實例的最小 Y 位置","Maximum Y position of picked object instances (using AABB of objects).":"選取對象實例的最大 Y 位置(使用對象的 AABB)。","Maximum Y position of picked object instances":"選取對象實例的最大 Y 位置","Minimum Z order of picked object instances.":"選取對象實例的最小 Z 序。","Minimum Z order of picked object instances":"選取對象實例的最小 Z 序","Maximum Z order of picked object instances.":"選取對象實例的最大 Z 序。","Maximum Z order of picked object instances":"選取對象實例的最大 Z 序","Average Z order of picked object instances.":"選取對象實例的平均 Z 序。","Average Z order of picked object instances":"選取對象實例的平均 Z 序","X center point (absolute) of picked object instances.":"選取對象實例的 X 中心點(絕對值)。","X center point (absolute) of picked object instances":"選取對象實例的 X 中心點(絕對值)","Objects":"對象","Objects that will be used to calculate their center point":"將用於計算其中心點的對象","Y center point (absolute) of picked object instances.":"選取對象實例的 Y 中心點(絕對值)。","Y center point (absolute) of picked object instances":"挑選的對象實例的Y中心點(絕對)","X center point (average) of picked object instances.":"挑選的對象實例的X中心點(平均)。","X center point (average) of picked object instances":"挑選的對象實例的X中心點(平均)","Y center point (average) of picked object instances.":"挑選的對象實例的Y中心點(平均)。","Y center point (average) of picked object instances":"挑選的對象實例的Y中心點(平均)","Min object height of picked object instances.":"挑選的對象實例的最小對象高度。","Min object height of picked object instances":"挑選的對象實例的最小對象高度","Max object height of picked object instances.":"挑選的對象實例的最大對象高度。","Max object height of picked object instances":"挑選的對象實例的最大對象高度","Average height of picked object instances.":"挑選的對象實例的平均高度。","Average height of picked object instances":"挑選的對象實例的平均高度","Min object width of picked object instances.":"挑選的對象實例的最小對象寬度。","Min object width of picked object instances":"挑選的對象實例的最小對象寬度","Max object width of picked object instances.":"挑選的對象實例的最大對象寬度。","Max object width of picked object instances":"挑選的對象實例的最大對象寬度","Average width of picked object instances.":"挑選的對象實例的平均寬度。","Average width of picked object instances":"挑選的對象實例的平均寬度","Average horizontal force (X) of picked object instances.":"挑選的對象實例的平均水平力(X)。","Average horizontal force (X) of picked object instances":"挑選的對象實例的平均水平力(X)","Average vertical force (Y) of picked object instances.":"挑選的對象實例的平均垂直力(Y)。","Average vertical force (Y) of picked object instances":"挑選的對象實例的平均垂直力(Y)","Average angle of rotation of picked object instances.":"挑選的對象實例的平均旋轉角度。","Average angle of rotation of picked object instances":"挑選的對象實例的平均旋轉角度","WebSocket client":"WebSocket 客戶端","A WebSocket client for fast client-server networking.":"快速客戶端-服務器網絡的 WebSocket 客戶端。","Triggers if the client is currently connecting to the WebSocket server.":"如果客戶端目前正在連接WebSocket伺服器,則觸發。","Connecting to a server":"連接到伺服器","Connecting to the server":"連接到伺服器","Triggers if the client is connected to a WebSocket server.":"如果客戶端連接到WebSocket伺服器,則觸發。","Connected to a server":"連接到伺服器","Connected to the server":"連接到伺服器","Triggers if the connection to a WebSocket server was closed.":"如果連接到WebSocket伺服器已關閉,則觸發。","Connection to a server was closed":"連接到伺服器的連接已關閉","Connection to the server closed":"伺服器連接已關閉","Connects to a WebSocket server.":"連接到WebSocket伺服器。","Connect to server":"連接到伺服器","Connect to WebSocket server at _PARAM1_":"在 _PARAM1_ 上連接至 WebSocket 伺服器","The server address":"伺服器位址","Disconnects from the current WebSocket server.":"從目前的 WebSocket 伺服器中斷連線。","Disconnect from server":"從伺服器中斷連線","Disconnect from server (reason: _PARAM1_)":"從伺服器斷開連線 (原因: _PARAM1_)","The reason for disconnection":"中斷連線原因","Triggers when the server has sent the client some data.":"當伺服器發送資料給用戶端時觸發。","An event was received":"已接收事件","Data received from server":"來自伺服器的資料接收","Returns the piece of data from the server that is currently being processed.":"回傳正在處理的伺服器資料片段。","Data from server":"來自伺服器的資料","Dismisses an event after processing it to allow processing the next one without waiting for the next frame.":"處理完畢一個事件後,讓下一個事件可立即處理,而非等待下一個畫面。","Mark as processed":"標記為處理完成","Mark current event as completed":"標記目前的事件為已完成","Sends a string to the server.":"傳送字串至伺服器。","Send data to the server":"傳送資料至伺服器","Send _PARAM1_ to the server":"將 _PARAM1_ 傳送至伺服器","The data to send to the server":"傳送至伺服器的資料","Triggers when a WebSocket error has occurred.":"當 WebSocket 發生錯誤時觸發。","An error occurred":"發生錯誤","WebSocket error has occurred":"WebSocket 發生錯誤","Gets the last error that occurred.":"取得最近發生的錯誤。","YSort":"YSort","Create an illusion of depth by setting the Z-order based on the Y position of the object. Useful for isometric games, 2D games with a \"Top-Down\" view, RPG...":"通過根據對象的 Y 位置設置 Z 序,創建深度的幻象。適用於等角遊戲、具有“俯視”視圖的 2D 遊戲、RPG…","Set the depth (Z-order) of the instance to the value of its Y position in the scene, creating an illusion of depth. The origin point of the object is used to determine the Z-order.":"將此示例的深度 (Z 軸順序) 設置為其在場景中的 Y 位置的值,創建深度的幻覺。 用於確定 Z 軸順序的是物件的原點。","Window focus, position, size, always-on-top, minimize/maximize, desktop pet controls, content protection. Desktop only.":"視窗焦點、位置、大小、置頂、最小化/最大化、桌寵控制、內容保護。僅桌面版。","Show in taskbar":"在工作列中顯示","Shows or hides the window in the operating system taskbar.":"在作業系統工作列中顯示或隱藏視窗。","Show window in taskbar: _PARAM0_":"在工作列中顯示視窗:_PARAM0_","Show in taskbar?":"在工作列中顯示?","Ignore mouse events":"忽略滑鼠事件","Makes the window ignore mouse events so clicks can go through to windows behind it.":"讓視窗忽略滑鼠事件,使點擊可以穿透到後方視窗。","Ignore mouse events: _PARAM0_, forward mouse movement: _PARAM1_":"忽略滑鼠事件:_PARAM0_,轉發滑鼠移動:_PARAM1_","Ignore mouse events?":"忽略滑鼠事件?","Forward mouse movement events to the game?":"將滑鼠移動事件轉發給遊戲?","Window background color":"視窗背景顏色","Changes the native window background color. Use #00000000 for a transparent window background.":"變更原生視窗背景顏色。使用 #00000000 可得到透明視窗背景。","Set the native window background color to _PARAM0_":"將原生視窗背景顏色設定為 _PARAM0_","Background color":"背景顏色","Show menu bar":"顯示選單列","Shows or hides the native menu bar of the window.":"顯示或隱藏視窗的原生選單列。","Show window menu bar: _PARAM0_":"顯示視窗選單列:_PARAM0_","Show menu bar?":"顯示選單列?","Dock window to screen work area":"將視窗停靠到螢幕工作區","Moves the window to a corner, the center, or custom coordinates on the current screen work area.":"將視窗移動到目前螢幕工作區的角落、中心或自訂座標。","Dock the window to _PARAM0_ with offset _PARAM1_;_PARAM2_ and custom position _PARAM3_;_PARAM4_":"將視窗停靠到 _PARAM0_,偏移 _PARAM1_;_PARAM2_,自訂位置 _PARAM3_;_PARAM4_","Dock position":"停靠位置","Corner X offset":"角落 X 偏移","Corner Y offset":"角落 Y 偏移","Custom X position":"自訂 X 位置","Custom Y position":"自訂 Y 位置","Apply desktop pet window mode":"套用桌寵視窗模式","Applies common desktop pet window settings: transparent native background, no shadow, optional always-on-top, taskbar hiding, mouse click-through, menu bar hiding, and docking.":"套用常見桌寵視窗設定:透明原生背景、無陰影、可選置頂、隱藏工作列、滑鼠點擊穿透、隱藏選單列和停靠。","Apply desktop pet window mode at _PARAM0_ with offset _PARAM1_;_PARAM2_, custom position _PARAM3_;_PARAM4_, always on top: _PARAM5_, show in taskbar: _PARAM6_, click-through: _PARAM7_, show menu bar: _PARAM8_":"在 _PARAM0_ 套用桌寵視窗模式,偏移 _PARAM1_;_PARAM2_,自訂位置 _PARAM3_;_PARAM4_,置頂:_PARAM5_,工作列顯示:_PARAM6_,點擊穿透:_PARAM7_,顯示選單列:_PARAM8_","Always on top?":"置頂?","Click-through?":"點擊穿透?","Screen work area X position":"螢幕工作區 X 位置","Returns the X position of the current screen work area.":"返回目前螢幕工作區的 X 位置。","Screen work area Y position":"螢幕工作區 Y 位置","Returns the Y position of the current screen work area.":"返回目前螢幕工作區的 Y 位置。","Screen work area width":"螢幕工作區寬度","Returns the width of the current screen work area.":"返回目前螢幕工作區的寬度。","Screen work area height":"螢幕工作區高度","Returns the height of the current screen work area.":"返回目前螢幕工作區的高度。","A number between 0 (fully transparent) and 1 (fully opaque).":"0(完全透明)到 1(完全不透明)之間的數字。","The level is like a layer for operating system windows instead of a layer in GDevelop. The later the position in the list, the higher the window level. When always-on-top is turned off, the level will be set to normal. From floating to status (included), the window will be below the macOS Dock and below the Windows taskbar. From pop-up-menu and higher, the window will be shown above the macOS Dock and the Windows taskbar. Linux ignores this parameter.":"該層級類似 GDevelop 中的圖層,但作用於作業系統視窗。清單越靠後,視窗層級越高。停用置頂時,層級會設為 normal。從 floating 到 status(含)會讓視窗位於 macOS Dock 下方、Windows 工作列下方。從 pop-up-menu 開始,視窗會顯示在 macOS Dock 和 Windows 工作列上方。Linux 會忽略此參數。","Bottom right":"右下角","Top right":"右上角","Bottom left":"左下角","Top left":"左上角","Center":"置中","Custom":"自訂","Normal":"一般","Floating":"浮動","Torn-off menu":"分離選單","Modal panel":"模態面板","Main menu":"主選單","Status":"狀態","Pop-up menu":"彈出式選單","Screen saver":"螢幕保護","The level is like a layer in GDevelop but for the OS. The further down the list, the higher it will be. When disabling always on top, the level will be set to normal. From \"floating\" to \"status\" included, the window is placed below the Dock on macOS and below the taskbar on Windows. Starting from \"pop-up-menu\", it is shown above the Dock on macOS and above the taskbar on Windows. This parameter is ignored on linux.":"該層級類似 GDevelop 中的圖層,但作用於作業系統視窗。清單越靠後,視窗層級越高。停用置頂時,層級會設為 normal。從 floating 到 status(含)會讓視窗位於 macOS Dock 下方、Windows 工作列下方。從 pop-up-menu 開始,視窗會顯示在 macOS Dock 和 Windows 工作列上方。Linux 會忽略此參數。","Frameless preview window":"無邊框預覽視窗","Requests the local preview window to be created without the native window frame.":"要求本機預覽視窗在建立時不使用原生視窗邊框。","Enable frameless preview window: _PARAM0_":"啟用無邊框預覽視窗:_PARAM0_","Enable frameless preview window?":"啟用無邊框預覽視窗?","Frameless game window":"無邊框遊戲視窗","Requests the preview and exported desktop game windows to be created without the native window frame.":"要求預覽和匯出的桌面遊戲視窗在建立時不使用原生視窗邊框。","Enable frameless game window: _PARAM0_":"啟用無邊框遊戲視窗:_PARAM0_","Enable frameless game window?":"啟用無邊框遊戲視窗?"}}; \ No newline at end of file diff --git a/newIDE/app/src/locales/zh_TW/messages.js b/newIDE/app/src/locales/zh_TW/messages.js index 527af1cd6aa1..95c89c7709bc 100644 --- a/newIDE/app/src/locales/zh_TW/messages.js +++ b/newIDE/app/src/locales/zh_TW/messages.js @@ -1 +1 @@ -/* eslint-disable */module.exports={languageData:{"plurals":function(n,ord){if(ord)return"other";return"other"}},messages:{"\"{0}\" will be the new build of this game published on gd.games. Continue?":function(a){return["\u201C",a("0"),"\u201D\u5C07\u662F\u6B64\u6E38\u6232\u5728 gd.games \u4E0A\u767C\u5E03\u7684\u65B0\u7248\u672C\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F"]},"\"{0}\" will be unpublished on gd.games. Continue?":function(a){return[a("0"),"\u5C07\u5728 gd.games\u4E0A\u53D6\u6D88\u767C\u5E03\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F"]},"% of parent":"\u5360\u7E3D\u9AD4\u7684\u767E\u5206\u6BD4","% of total":"\u5360\u7E3D\u91CF\u7684\u767E\u5206\u6BD4","(Events)":"\uFF08\u4E8B\u4EF6\uFF09","(Object)":"(nigger)","(already installed in the project)":"\uFF08\u5DF2\u5728\u9805\u76EE\u4E2D\u5B89\u88DD\uFF09","(default order)":"(\u9810\u8A2D\u9806\u5E8F)","(deleted)":"(\u5DF2\u522A\u9664)","(install it from the Project Manager)":"\uFF08\u5F9E\u9805\u76EE\u7BA1\u7406\u5668\u5B89\u88DD\uFF09","(or paste actions)":"(\u6216\u7C98\u8CBC\u52D5\u4F5C)","(or paste conditions)":"(\u6216\u7C98\u8CBC\u689D\u4EF6)","(yet!)":"(\u5C1A\u672A\uFF01)","* (multiply by)":"* ( \u4E58\u4EE5 )","+ (add)":"+\uFF08\u52A0\u4E0A\uFF09","+ {0} tag(s)":function(a){return["+ ",a("0")," \u6A19\u7C3D(s)"]},", objects /*{parameterObjects}*/":function(a){return[", \u5C0D\u8C61 /*",a("parameterObjects"),"*/"]},"- (subtract)":"- (\u6E1B\u53BB\uFF09 ","/ (divide by)":"/ (\u9664\u4EE5)","/* Click here to choose objects to pass to JavaScript */":"/* \u9EDE\u64CA\u9019\u91CC\u9078\u64C7\u8981\u50B3\u905E\u5230 JavaScript \u7684\u5C0D\u8C61*/","0,date":"0,\u65E5\u671F","0,date,date0":"0,date,date0","0,number,number0":"0,\u6578\u5B57,\u6578\u5B570","1 child":"1 \u500B\u884D\u751F\u7BC0\u9EDE","1 day ago":"1 \u5929\u524D","1 hour ago":"1 \u5C0F\u6642\u524D","1 match":"1 \u5834\u6BD4\u8CFD","1 minute":"1 \u5206\u9418","1 month":"\u6BCF\u6708","1 new feedback":"\u4E00\u500B\u65B0\u56DE\u994B","1 review":"\u4E00\u500B\u89C0\u770B\u6B21\u6578","1) Create a Certificate Signing Request and a Certificate":"1) \u5275\u5EFA\u8B49\u66F8\u7C3D\u540D\u8ACB\u6C42\u548C\u8B49\u66F8","100% (Default)":"100% (\u9810\u8A2D)","100+ exports created":"\u8D85\u904E100\u500B\u5C0E\u51FA\u5B58\u64CB\u5275\u9020\u4E86","10th":"\u7B2C\u5341","1st":"\u7B2C\u4E00","2 previews in 2 windows":"\u4E8C\u6B21\u89C0\u770B\u5728\u4E8C\u500B\u8996","2) Upload the Certificate generated by Apple":"2) \u4E0A\u50B3Apple\u751F\u6210\u7684\u8B49\u66F8","200%":"200%","2D effects":"\u4E8C\u7DAD\u6548\u679C","2D object":"\u4E8C\u7DAD\u7269\u4EF6","2D objects can't be edited when in 3D mode":"\u7576\u5728 3D \u6A21\u5F0F\u4E0B\u6642\uFF0C2D \u7269\u4EF6\u7121\u6CD5\u7DE8\u8F2F","2nd":"\u7B2C\u4E8C","3 previews in 3 windows":"\u5728\u4E09\u500B\u8996\u7A97\u4E2D\u6709\u4E09\u6B21\u89C0\u770B","3) Upload one or more Mobile Provisioning Profiles":"3) \u4E0A\u50B3\u4E00\u500B\u6216\u591A\u500B\u79FB\u52D5\u914D\u7F6E\u6587\u4EF6","3-part tutorial to creating and publishing a game from scratch.":"\u5F9E\u96F6\u958B\u59CB\u5275\u5EFA\u548C\u767C\u5E03\u6E38\u6232\u76843\u90E8\u66F2\u6559\u7A0B\u3002","300%":"300%","3D effects":"\u4E09\u7DAD\u6548\u679C","3D model":"\u4E09\u7DAD\u6A21\u578B","3D models":"\u4E09\u7DAD\u6A21\u578B","3D object":"\u4E09\u7DAD\u7269\u4EF6","3D platforms":"\u4E09\u7DAD\u5E73\u53F0","3D settings":"\u4E09\u7DAD\u8A2D\u7F6E","3D, real-time editor (new)":"3D\u3001\u5373\u6642\u7DE8\u8F2F\u5668\uFF08\u65B0\uFF09","3rd":"\u7B2C\u4E09","4 previews in 4 windows":"\u5728\u56DB\u500B\u8996\u7A97\u4E2D\u6709\u56DB\u6B21\u89C0\u770B","400%":"400%","4th":"\u7B2C\u56DB","500%":"500%","5th":"\u7B2C\u4E94","600%":"600%","6th":"\u7B2C\u516D","700%":"700%","7th":"\u7B2C\u4E03","800%":"800%","8th":"\u7B2C\u516B","9th":"\u7B2C\u4E5D",":":"\uFF1A","< (less than)":"<\uFF08\u5C0F\u4E8E\uFF09","<0>For every child in<1><2/>{0}, store the child in variable<3><4/>{1}, the child name in<5><6/>{2}and do:":function(a){return["<0>\u5C0D\u4E8E<1><2/>",a("0"),"\u4E2D\u7684\u6BCF\u500B\u5B69\u5B50\uFF0C\u5C07\u5B69\u5B50\u5B58\u5132\u5728\u8B8A\u91CF\u4E2D<3><4/>",a("1"),"\uFF0C\u5B69\u5B50\u7684\u540D\u5B57\u5728<5><6/>",a("2"),"\u5E76\u4E14\u505A\uFF1A"]},"<0>Share your game and start collecting data from your players to better understand them.":"\u5206\u4EAB\u4F60\u7684\u904A\u6232<0>\u6B21 \u548C \u4F60\u7684\u73A9\u5BB6\u6536\u96C6\u6578\u64DA<0>\u6B21\u4F86\u66F4\u597D\u5730\u4E86\u89E3\u5B83\u5011","<0>{0} set to {1}.":function(a){return["<0>",a("0")," \u8A2D\u5B9A\u70BA ",a("1"),"\u3002"]},"":"<\u5275\u5EFA\u65B0\u7684\u64F4\u5C55\u540D>","":"<\u8F38\u5165\u7D44\u540D\u7A31>","":"< \u8F38\u5165\u5916\u90E8\u4E8B\u4EF6\u7684\u540D\u7A31 >"," (optional)":"":"<\u9078\u64C7\u4E00\u500B\u7269\u4EF6>","= (equal to)":"= (\u7B49\u4E8E)","= (set to)":"= (\u8A2D\u70BA)","> (greater than)":"> (\u5927\u4E8E)","A condition that can be used in other events sheet. You can define the condition parameters: objects, texts, numbers, layers, etc...":"\u53EF\u4EE5\u5728\u5176\u4ED6\u4E8B\u4EF6\u8868\u4E2D\u4F7F\u7528\u7684\u689D\u4EF6\u3002\u60A8\u53EF\u4EE5\u5B9A\u7FA9\u689D\u4EF6\u53C3\u6578\uFF1A\u5C0D\u8C61\uFF0C\u6587\u672C\uFF0C\u6578\u5B57\uFF0C\u5716\u5C64\u7B49......","A condition that can be used on objects with the behavior. You can define the condition parameters: objects, texts, numbers, layers, etc...":"\u53EF\u4EE5\u5728\u5177\u6709\u884C\u70BA\u7684\u5C0D\u8C61\u4E0A\u4F7F\u7528\u7684\u689D\u4EF6\u3002\u60A8\u53EF\u4EE5\u5B9A\u7FA9\u689D\u4EF6\u53C3\u6578\uFF1A\u5C0D\u8C61\uFF0C\u6587\u672C\uFF0C\u6578\u5B57\uFF0C\u5716\u5C64\u7B49......","A condition that can be used on the object. You can define the condition parameters: objects, texts, numbers, layers, etc...":"\u53EF\u4EE5\u5728\u5C0D\u8C61\u4E0A\u4F7F\u7528\u7684\u689D\u4EF6\u3002\u60A8\u53EF\u4EE5\u5B9A\u7FA9\u689D\u4EF6\u53C3\u6578\uFF1A\u5C0D\u8C61\u3001\u6587\u672C\u3001\u6578\u5B57\u3001\u5716\u5C64\u7B49...","A critical error occurred in the {componentTitle}.":function(a){return[a("componentTitle")," \u4E2D\u767C\u751F\u56B4\u91CD\u932F\u8AA4\u3002"]},"A functioning save has been found!":"\u5DF2\u627E\u5230\u4E00\u500B\u6709\u6548\u7684\u5B58\u6A94\uFF01","A game to publish":"\u8981\u767C\u5E03\u7684\u6E38\u6232","A global object with this name already exists. Please change the group name before setting it as a global group":"\u5177\u6709\u6B64\u540D\u7A31\u7684\u5168\u5C40\u5C0D\u8C61\u5DF2\u7D93\u5B58\u5728\u3002\u8ACB\u5728\u5C07\u5176\u8A2D\u7F6E\u70BA\u5168\u5C40\u7D44\u4E4B\u524D\u66F4\u6539\u7D44\u540D\u7A31\u3002","A global object with this name already exists. Please change the object name before setting it as a global object":"\u6B64\u540D\u7A31\u7684\u5168\u5C40\u5C0D\u8C61\u5DF2\u7D93\u5B58\u5728\u3002\u8ACB\u5728\u5C07\u5176\u8A2D\u7F6E\u70BA\u5168\u5C40\u5C0D\u8C61\u4E4B\u524D\u66F4\u6539\u5C0D\u8C61\u540D\u7A31","A lighting layer was created. Lights will be placed on it automatically. You can change the ambient light color in the properties of this layer":"\u5DF2\u5275\u5EFA\u4E00\u500B\u7167\u660E\u5716\u5C64\u3002\u71C8\u5149\u5C07\u81EA\u52D5\u653E\u7F6E\u5728\u5B83\u4E0A\u3002\u60A8\u53EF\u4EE5\u5728\u6B64\u5716\u5C64\u5C6C\u6027\u4E2D\u66F4\u6539\u74B0\u5883\u5149\u3002","A link or file will be created but the game will not be registered.":"\u4E00\u500B\u93C8\u63A5\u6216\u6587\u4EF6\u5C07\u88AB\u5275\u5EFA\uFF0C\u4F46\u6E38\u6232\u5C07\u4E0D\u6703\u88AB\u6CE8\u518A\u3002","A new physics engine (Physics Engine 2.0) is now available. You should prefer using it for new game. For existing games, note that the two behaviors are not compatible, so you should only use one of them with your objects.":"\u73FE\u5728\u53EF\u4EE5\u4F7F\u7528\u4E00\u500B\u65B0\u7684\u7269\u7406\u5F15\u64CE\uFF08\u7269\u7406\u5F15\u64CE2.0\uFF09\u3002\u60A8\u61C9\u8A72\u66F4\u559C\u6B61\u4F7F\u7528\u5B83\u4F86\u505A\u65B0\u7684\u6E38\u6232\u3002\u5C0D\u4E8E\u73FE\u6709\u6E38\u6232\uFF0C\u8ACB\u6CE8\u610F\u9019\u5169\u500B\u884C\u70BA\u662F\u4E0D\u517C\u5BB9\u7684\uFF0C\u56E0\u6B64\u60A8\u53EA\u80FD\u70BA\u60A8\u7684\u5C0D\u8C61\u4F7F\u7528\u5176\u4E2D\u4E00\u500B\u884C\u70BA\u3002","A new secure window will open to complete the purchase.":"\u4E00\u500B\u65B0\u7684\u5B89\u5168\u7A97\u53E3\u5C07\u6253\u958B\u4EE5\u5B8C\u6210\u8CFC\u8CB7\u3002","A new update is available!":"\u4E00\u500B\u66F4\u65B0\u80FD\u5920\u904B\u884C","A new update is being downloaded...":"\u4E00\u500B\u66F4\u65B0\u6B63\u5728\u8F09\u5165","A new update will be installed after you quit and relaunch GDevelop":"\u7576\u4F60\u96E2\u958B\u548C\u91CD\u8F09GDevelop\uFF0C \u4E00\u500B\u66F4\u65B0\u624D\u80FD\u5920\u88AB\u8F09\u5165","A new window":"\u4E00\u500B\u65B0\u7684\u8996\u7A97","A scale under 1 on a Bitmap text object can downgrade the quality text, prefer to remake a bitmap font smaller in the external bmFont editor.":"\u5728\u4F4D\u5716\u6587\u672C\u5C0D\u8C61\u4E0A\uFF0C\u4F4E\u4E8E 1 \u7684\u7E2E\u653E\u5C3A\u5EA6\u6703\u964D\u4F4E\u6587\u672C\u7684\u8CEA\u91CF\u3002\u8ACB\u6700\u597D\u5728\u5982 bmFont \u7684\u5916\u90E8\u7DE8\u8F2F\u5668\u4E2D\u628A\u4F4D\u5716\u5B57\u9AD4\u91CD\u65B0\u5236\u4F5C\u5F97\u5C0F\u4E00\u4E9B\u3002","A student account cannot be an admin of your team.":"\u4E00\u500B\u5B78\u751F\u6236\u53E3\u4E0D\u80FD\u6210\u70BA\u4F60\u5718\u968A\u7684\u7BA1\u7406\u8005","A temporary image to help you visualize the shape/polygon":"\u4E00\u5F35\u6709\u52A9\u4E8E\u4F60\u7406\u89E3\u5F62\u72C0\u6216\u591A\u908A\u5F62\u7684\u5716\u7247","AI Chat History":"AI \u804A\u5929\u6B77\u53F2","API Issuer ID: {0}":function(a){return["API \u9812\u767C\u8005 ID\uFF1A",a("0")]},"API Issuer given by Apple":"Apple \u63D0\u4F9B\u7684 API \u767C\u884C\u8005","API key given by Apple":"Apple \u63D0\u4F9B\u7684 API \u5BC6\u9470","API key: {0}":function(a){return["API \u5BC6\u9470\uFF1A",a("0")]},"APK (for testing on device or sharing outside Google Play)":"APK (\u7528\u4E8E\u5728\u8A2D\u5099\u4E0A\u6E2C\u8A66\u6216\u5728\u8C37\u6B4C\u64AD\u653E\u5916\u9762\u5206\u4EAB)","Abandon":"\u68C4\u7528","Abort":"\u653E\u68C4","About GDevelop":"\u95DC\u4E8EGDevelop","About dialog":"\u5C0D\u8A71\u6846\u201C\u95DC\u4E8E\u201D","About education plan":"\u95DC\u4E8E\u6559\u80B2\u8A08\u5283","Accept":"\u63A5\u53D7","Access GDevelop\u2019s resources for teaching game development and promote careers in technology.":"\u8A2A\u554F GDevelop \u7684\u8CC7\u6E90\u4F86\u6559\u6388\u6E38\u6232\u958B\u767C\u548C\u4FC3\u9032\u6280\u8853\u8077\u696D\u3002","Access project history, name saves, restore older versions.<0/>Get a subscription to enable this feature.":"\u8A2A\u554F\u9805\u76EE\u6B77\u53F2\u8A18\u9304\u3001\u540D\u7A31\u4FDD\u5B58\u3001\u9084\u539F\u820A\u7248\u672C\u3002<0/>\u7372\u53D6\u8A02\u95B1\u4EE5\u555F\u7528\u6B64\u529F\u80FD\u3002","Access public profile":"\u8A2A\u554F\u516C\u5171\u914D\u7F6E\u6587\u4EF6","Achievements":"\u6210\u5C31","Action":"\u57F7\u884C","Action with operator":"\u64CD\u4F5C\u54E1\u64CD\u4F5C","Actions":"\u52D5\u4F5C","Activate":"\u555F\u52D5","Activate Later":"\u7A0D\u5F8C\u555F\u7528","Activate Now":"\u7ACB\u5373\u555F\u7528","Activate my subscription":"\u555F\u7528\u6211\u7684\u8A02\u95B1","Activate your subscription code":"\u555F\u7528\u60A8\u7684\u8A02\u95B1\u4EE3\u78BC","Activate {productName}":function(a){return["\u555F\u52D5 ",a("productName")]},"Activated":"\u6FC0\u6D3B","Activating...":"\u555F\u52D5\u4E2D...","Active":"\u5DF2\u555F\u7528","Active until {0}":function(a){return["\u6709\u6548\u76F4\u81F3 ",a("0")]},"Active, we will get in touch to get the campaign up!":"\u7A4D\u6975\u4E3B\u52D5\uFF0C\u6211\u5011\u5C07\u8207\u60A8\u806F\u7CFB\u4EE5\u958B\u5C55\u6D3B\u52D5\uFF01","Ad revenue sharing off":"\u5EE3\u544A\u56DE\u994B\u5206\u6210\uD863\uDDB9\u9589","Ad revenue sharing on":"\u5EE3\u544A\u56DE\u994B\u5206\u6210\u958B\u555F","Adapt automatically":"\u81EA\u52D5\u9069\u61C9","Adapt collision mask?":"\u9069\u61C9\u78B0\u649E\u906E\u7F69\uFF1F","Adapt events in scene <0>{scene_name} (\"{placementHint}\").":function(a){return["\u5728\u5834\u666F <0>",a("scene_name")," \u4E2D\u8ABF\u6574\u4E8B\u4EF6\uFF08\"",a("placementHint"),"\"\uFF09\u3002"]},"Add":"\u6DFB\u52A0","Add 2D lighting layer":"\u6DFB\u52A0\u7167\u660E\u5716\u5C64","Add <0>{object_name} to scene <1>{scene_name}.":function(a){return["\u5C07 <0>",a("object_name")," \u6DFB\u52A0\u5230\u5834\u666F <1>",a("scene_name")," \u4E2D\u3002"]},"Add Ordering":"\u65B0\u589E\u6392\u5E8F","Add a 2D effect":"\u6DFB\u52A0 2D \u6548\u679C","Add a 3D effect":"\u6DFB\u52A0 3D \u6548\u679C","Add a Long Description":"\u6DFB\u52A0\u4E00\u500B\u9577\u63CF\u8FF0","Add a New Extension":"\u6DFB\u52A0\u4E00\u500B\u65B0\u7684\u64F4\u5C55","Add a behavior":"\u6DFB\u52A0\u4E00\u500B\u884C\u70BA","Add a certificate/profile first":"\u9996\u5148\u6DFB\u52A0\u8B49\u66F8/\u914D\u7F6E\u6587\u4EF6","Add a collaborator":"\u5275\u9020","Add a comment":"\u6DFB\u52A0\u4E00\u689D\u8A55\u8AD6","Add a folder":"\u5275\u9020\u4E00\u500B\u6A94\u6848","Add a function":"\u6DFB\u52A0\u4E00\u500B\u51FD\u6578","Add a health bar for handle damage.":"\u6DFB\u52A0\u5065\u5EB7\u689D\u4F86\u8655\u7406\u50B7\u5BB3\u3002","Add a health bar to this jumping character, losing health when hitting spikes.":"\u5411\u9019\u500B\u89D2\u8272\u52A0\u5165\u4E00\u500B\u8840\u91CF\u689D\uFF0C\u5B83\u78B0\u5230\u5C16\u523A\u6703\u6389\u8840","Add a layer":"\u6DFB\u52A0\u5716\u5C64","Add a link to your donation page. It will be displayed on your gd.games profile and game pages.":"\u6DFB\u52A0\u6307\u5411\u60A8\u7684\u6350\u8D08\u9801\u9762\u7684\u93C8\u63A5\u3002\u5B83\u5C07\u986F\u793A\u5728\u60A8\u7684 gd.games \u500B\u4EBA\u8CC7\u6599\u548C\u6E38\u6232\u9801\u9762\u4E0A\u3002","Add a local variable":"\u52A0\u5165\u516C\u773E\u8B8A\u6578\uFF0C\u6240\u6709\u89D2\u8272","Add a local variable to the selected event":"\u5C07\u5C40\u90E8\u8B8A\u91CF\u6DFB\u52A0\u5230\u6240\u9078\u4E8B\u4EF6","Add a new behavior to the object":"\u6DFB\u52A0\u4E00\u9805\u65B0\u884C\u70BA\u5230\u5C0D\u8C61","Add a new empty event":"\u6DFB\u52A0\u65B0\u7684\u7A7A\u4E8B\u4EF6","Add a new event":"\u6DFB\u52A0\u4E00\u500B\u65B0\u4E8B\u4EF6","Add a new folder":"\u6DFB\u52A0\u65B0\u6587\u4EF6\u593E","Add a new function":"\u65B0\u589E\u51FD\u5F0F","Add a new group":"\u6DFB\u52A0\u4E00\u500B\u65B0\u7D44","Add a new group...":"\u6DFB\u52A0\u65B0\u7D44...","Add a new object":"\u6DFB\u52A0\u4E00\u500B\u65B0\u5C0D\u8C61","Add a new option":" \u6DFB\u52A0\u65B0\u9078\u9805","Add a new property":"\u6DFB\u52A0\u65B0\u5C6C\u6027","Add a parameter":"\u6DFB\u52A0\u53C3\u6578","Add a parameter below":"\u5728\u4E0B\u9762\u6DFB\u52A0\u4E00\u500B\u53C3\u6578","Add a point":"\u6DFB\u52A0\u9EDE","Add a property":"\u6DFB\u52A0\u5C6C\u6027","Add a scene":"\u6DFB\u52A0\u4E00\u500B\u5834\u666F","Add a score and display it on the screen":"\u6DFB\u52A0\u5206\u6578\u4E26\u5728\u87A2\u5E55\u4E0A\u986F\u793A","Add a sprite":"\u6DFB\u52A0\u7CBE\u9748","Add a sub-condition":"\u6DFB\u52A0\u5B50\u689D\u4EF6","Add a sub-event to the selected event":"\u70BA\u9078\u5B9A\u4E8B\u4EF6\u6DFB\u52A0\u5B50\u4E8B\u4EF6","Add a time attack mode, where you have to reach the end as fast as possible.":"\u52A0\u4E0A\u6642\u9593\u653B\u64CA\u6A21\u5F0F\uFF0C\u4F60\u5FC5\u9808\u76E1\u5FEB\u5230\u9054\u7D42\u9EDE\u3002","Add a time attack mode.":"\u6DFB\u52A0\u6642\u9593\u653B\u64CA\u6A21\u5F0F\u3002","Add a variable":"\u6DFB\u52A0\u4E00\u500B\u8B8A\u91CF","Add a vertex":"\u6DFB\u52A0\u9802\u9EDE","Add action":"\u6DFB\u52A0\u64CD\u4F5C","Add again":"\u518D\u6B21\u6DFB\u52A0","Add an Auth Key first":"\u9996\u5148\u6DFB\u52A0\u8A8D\u8B49\u5BC6\u9470","Add an animation":"\u6DFB\u52A0\u52D5\u756B","Add an event":"\u6DFB\u52A0\u4E8B\u4EF6","Add an external layout":"\u6DFB\u52A0\u5916\u90E8\u5E03\u5C40","Add an object":"\u6DFB\u52A0\u5C0D\u8C61","Add any object variable to the group":"Add any object variable to the group","Add asset":"\u65B0\u589E\u8CC7\u7522","Add characters and objects to the scene.":"\u5C07\u89D2\u8272\u548C\u7269\u9AD4\u6DFB\u52A0\u5230\u5834\u666F\u3002","Add child":"\u6DFB\u52A0\u5B50\u9805","Add collaborator":"\u6DFB\u52A0\u5408\u4F5C\u4EBA","Add collision mask":"\u6DFB\u52A0\u78B0\u649E\u906E\u7F69","Add condition":"\u6DFB\u52A0\u689D\u4EF6","Add external events":"\u6DFB\u52A0\u5916\u90E8\u4E8B\u4EF6","Add instance to the scene":"\u6DFB\u52A0\u5BE6\u4F8B\u5230\u5834\u666F\u4E2D","Add leaderboards to your online Game":"\u7D66\u4F60\u7684\u5728\u7DDA\u6E38\u6232\u6DFB\u52A0\u6392\u884C\u699C","Add new":"\u6DFB\u52A0\u65B0\u5167\u5BB9","Add object":"\u65B0\u589E\u5C0D\u8C61","Add or edit":"\u65B0\u589E\u6216\u7DE8\u8F2F","Add parameter...":"\u6DFB\u52A0\u53C3\u6578...","Add personality and publish your game.":"\u6DFB\u52A0\u500B\u6027\u5316\u4E26\u767C\u5E03\u60A8\u7684\u904A\u6232\u3002","Add personality to your game and publish it online.":"\u70BA\u60A8\u7684\u6E38\u6232\u6DFB\u52A0\u500B\u6027\uFF0C\u5E76\u5728\u7DDA\u767C\u5E03\u3002","Add player logins and a leaderboard.":"\u6DFB\u52A0\u73A9\u5BB6\u767B\u9304\u548C\u6392\u884C\u699C\u3002","Add player logins to your game and add a leaderboard.":"\u5C07\u73A9\u5BB6\u767B\u9304\u6DFB\u52A0\u5230\u60A8\u7684\u6E38\u6232\u5E76\u6DFB\u52A0\u6392\u884C\u699C\u3002","Add solid rocks that falls from the sky at a random position around the player every 0.5 seconds":"\u6BCF 0.5 \u79D2\u5728\u73A9\u5BB6\u5468\u570D\u7684\u96A8\u6A5F\u4F4D\u7F6E\u6DFB\u52A0\u5F9E\u5929\u4E0A\u6389\u843D\u7684\u5BE6\u5FC3\u5CA9\u77F3","Add the assets":"\u6DFB\u52A0\u7D20\u6750","Add these assets to my scene":"\u5C07\u9019\u4E9B\u8CC7\u7522\u6DFB\u52A0\u5230\u6211\u7684\u5834\u666F\u4E2D","Add these assets to the project":"\u5C07\u9019\u4E9B\u7D20\u6750\u6DFB\u52A0\u5230\u9805\u76EE","Add this asset to my scene":"\u5C07\u6B64\u8CC7\u7522\u6DFB\u52A0\u5230\u6211\u7684\u5834\u666F\u4E2D","Add this asset to the project":"\u5C07\u6B64\u7D20\u6750\u6DFB\u52A0\u5230\u9805\u76EE","Add to project":"\u52A0\u5165\u81F3\u5C08\u6848","Add to the scene":"\u6DFB\u52A0\u5230\u5834\u666F","Add variable":"\u6DFB\u52A0\u8B8A\u91CF","Add variable...":"\u6DFB\u52A0\u8B8A\u91CF...","Add your Discord username to get a role on the GDevelop Discord or access to a dedicated channel if you have a Gold or Pro subscription! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"\u5982\u679C\u60A8\u6709 Gold \u6216 Pro \u8A02\u95B1\uFF0C\u6DFB\u52A0\u60A8\u7684 Discord \u7528\u6236\u540D\u5373\u53EF\u5728 GDevelop Discord \u7372\u5F97\u89D2\u8272\u6216\u8A2A\u554F\u5C08\u7528\u983B\u9053\uFF01\u52A0\u5165 [GDevelop Discord](https://discord.gg/gdevelop)\u3002","Add your Discord username to get a special role on the GDevelop Discord! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"\u6DFB\u52A0\u60A8\u7684 Discord \u7528\u6236\u540D\u5373\u53EF\u5728 GDevelop Discord \u7372\u5F97\u7279\u5225\u89D2\u8272\uFF01\u52A0\u5165 [GDevelop Discord](https://discord.gg/gdevelop)\u3002","Add your Discord username to get access to a dedicated channel! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"\u6DFB\u52A0\u60A8\u7684 Discord \u7528\u6236\u540D\u5373\u53EF\u8A2A\u554F\u5C08\u7528\u983B\u9053\uFF01\u52A0\u5165 [GDevelop Discord](https://discord.gg/gdevelop)\u3002","Add your first animation":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u52D5\u756B","Add your first behavior":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u884C\u70BA","Add your first characters to the scene and throw your first objects.":"\u5C07\u60A8\u7684\u7B2C\u4E00\u500B\u89D2\u8272\u6DFB\u52A0\u5230\u5834\u666F\u4E2D\uFF0C\u5E76\u6295\u64F2\u60A8\u7684\u7B2C\u4E00\u500B\u5C0D\u8C61\u3002","Add your first effect":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u7279\u6548","Add your first event":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u4E8B\u4EF6","Add your first global variable":"\u6DFB\u52A0\u60A8\u7684\u9996\u500B\u5168\u5C40\u8B8A\u91CF","Add your first instance variable":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u5BE6\u4F8B\u8B8A\u91CF","Add your first object group variable":"\u5728\u7B2C\u4E00\u500B\u7269\u4EF6\u7D44\u52A0\u5165\u8B8A\u6578","Add your first object variable":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u5C0D\u8C61\u8B8A\u91CF","Add your first parameter":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u53C3\u6578","Add your first property":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u5C6C\u6027","Add your first scene variable":"\u6DFB\u52A0\u60A8\u7684\u7B2C\u4E00\u500B\u5834\u666F\u8B8A\u91CF","Add {behaviorName} (<0>{behaviorTypeLabel}) behavior to <1>{object_name} in scene <2>{scene_name}.":function(a){return["\u5C07 ",a("behaviorName")," (<0>",a("behaviorTypeLabel"),") \u884C\u70BA\u6DFB\u52A0\u5230 <1>",a("object_name")," \u5728\u5834\u666F <2>",a("scene_name")," \u4E2D\u3002"]},"Add...":"\u6DFB\u52A0...","Adding...":"\u6DFB\u52A0\u4E2D...","Additional properties will appear here when you add behaviors to objects, such as the 2D or 3D Physics Engine.":"\u7576\u60A8\u5C07\u884C\u70BA\u6DFB\u52A0\u5230\u5C0D\u8C61\u6642\uFF0C\u984D\u5916\u5C6C\u6027\u5C07\u5728\u6B64\u8655\u986F\u793A\uFF0C\u4F8B\u5982 2D \u6216 3D \u7269\u7406\u5F15\u64CE\u3002","Additive rendering":"\u9644\u52A0\u6E32\u67D3","Adjust height to fill screen (extend or crop)":"\u8ABF\u6574\u9AD8\u5EA6\u4EE5\u586B\u6EFF\u87A2\u5E55\uFF08\u5EF6\u5C55\u6216\u88C1\u526A)","Adjust width to fill screen (extend or crop)":"\u8ABF\u6574\u5BEC\u5EA6\u4EE5\u586B\u6EFF\u87A2\u5E55\uFF08\u5EF6\u5C55\u6216\u88C1\u526A)","Ads":"\u5EE3\u544A","Advanced":"\u9AD8\u7D1A","Advanced course":"\u9AD8\u7D1A\u8AB2\u7A0B","Advanced options":"\u9AD8\u7D1A\u9078\u9805","Advanced properties":"\u9AD8\u7D1A\u5C6C\u6027","Advanced settings":"\u9AD8\u7D1A\u8A2D\u7F6E","Adventure":"\u5192\u96AA","After watching the video, use this template to complete the following tasks.":"\u89C0\u770B\u5B8C\u5F71\u7247\u5F8C\uFF0C\u4F7F\u7528\u9019\u500B\u7BC4\u672C\u4F86\u5B8C\u6210\u4EE5\u4E0B\u4EFB\u52D9\u3002","Alive":"\u6D3B\u8457","All":"\u5168\u90E8","All asset packs":"\u6240\u6709\u8CC7\u7522\u5305","All behaviors being directly referenced in the events:":"\u4E8B\u4EF6\u4E2D\u76F4\u63A5\u5F15\u7528\u7684\u6240\u6709\u884C\u70BA\uFF1A","All builds":"\u6240\u6709\u7248\u672C","All categories":"\u6240\u6709\u985E\u5225","All current entries will be deleted, are you sure you want to reset this leaderboard? This can't be undone.":"\u6240\u6709\u7576\u524D\u4F5C\u54C1\u90FD\u5C07\u88AB\u522A\u9664\uFF0C\u60A8\u78BA\u5B9A\u8981\u91CD\u7F6E\u6B64\u6392\u884C\u699C\u55CE\uFF1F\u9019\u4E0D\u80FD\u64A4\u6D88\u3002","All entries":"\u6240\u6709\u4F5C\u54C1","All entries are displayed.":"\u986F\u793A\u6240\u6709\u4F5C\u54C1\u3002","All exports":"\u5C0E\u51FA\u5168\u90E8","All feedbacks processed":"\u6240\u6709\u610F\u898B","All game templates":"\u6240\u6709\u6E38\u6232\u6A21\u677F","All objects potentially used in events: {0}":function(a){return["\u4E8B\u4EF6\u4E2D\u53EF\u80FD\u4F7F\u7528\u7684\u6240\u6709\u5C0D\u8C61: ",a("0")]},"All the entries of {0} will be deleted too. This can't be undone.":function(a){return["\u6240\u6709",a("0"),"\u7684\u9805\u76EE\u4E5F\u6703\u88AB\u522A\u9664 \uFF0C \u9019\u4E0D\u80FD\u88AB\u53D6\u6D88"]},"All your changes will be lost. Are you sure you want to cancel?":"\u60A8\u6240\u505A\u7684\u6240\u6709\u66F4\u6539\u90FD\u5C07\u4E1F\u5931\u3002\u4F60\u78BA\u5B9A\u8981\u53D6\u6D88\uFF1F","All your games were played more than {0} times in total!":function(a){return["\u60A8\u6240\u6709\u7684\u6E38\u6232\u7E3D\u5171\u73A9\u4E86\u8D85\u904E ",a("0")," \u6B21\uFF01"]},"Allow players to join after the game has started":"\u5141\u8A31\u73A9\u5BB6\u5728\u904A\u6232\u958B\u59CB\u5F8C\u52A0\u5165","Allow this project to run npm scripts?":"\u5141\u8A31\u6B64\u5C08\u6848\u904B\u884C npm \u8173\u672C\u55CE\uFF1F","Allow to display advertisements on the game page on gd.games.":"\u5141\u8A31\u5728 gd.games \u7684\u6E38\u6232\u9801\u9762\u4E0A\u986F\u793A\u5EE3\u544A\u3002","Alpha":"\u900F\u660E\u5EA6","Alphabet":"\u5B57\u6BCD","Already a member?":"\u5DF2\u7D93\u662F\u6703\u54E1\u4E86\u55CE\uFF1F","Already added":"\u5DF2\u6DFB\u52A0","Already cancelled":"\u5DF2\u53D6\u6D88","Already in project":"\u5DF2\u7D93\u5728\u9805\u76EE\u4E2D","Already installed":"\u5DF2\u5B89\u88DD","Alright, here's my approach:":"\u597D\u7684\uFF0C\u9019\u662F\u6211\u7684\u65B9\u6CD5\uFF1A","Always":"\u7E3D\u662F","Always display the preview window on top of the editor":"\u7E3D\u662F\u5728\u7DE8\u8F2F\u5668\u9802\u90E8\u986F\u793A\u9810\u89BD\u7A97\u53E3","Always preload at startup":"\u5728\u555F\u52D5\u6642\u59CB\u7D42\u9810\u52A0\u8F09","Always visible":"\u9577\u671F\u53EF\u898B","Ambient light color":"\u74B0\u5883\u5149\u984F\u8272","An action that can be used in other events sheet. You can define the action parameters: objects, texts, numbers, layers, etc...":"\u4E00\u500B\u53EF\u4EE5\u5728\u5176\u4ED6\u4E8B\u4EF6\u8868\u4E2D\u4F7F\u7528\u7684\u52D5\u4F5C\u3002\u60A8\u53EF\u4EE5\u5B9A\u7FA9\u52D5\u4F5C\u53C3\u6578\uFF1A\u5C0D\u8C61\u3001\u6587\u672C\u3001\u6578\u5B57\u3001\u5716\u5C64\u7B49...","An action that can be used on objects with the behavior. You can define the action parameters: objects, texts, numbers, layers, etc...":"\u53EF\u4EE5\u5728\u5177\u6709\u884C\u70BA\u7684\u5C0D\u8C61\u4E0A\u4F7F\u7528\u7684\u64CD\u4F5C\u3002\u60A8\u53EF\u4EE5\u5B9A\u7FA9\u64CD\u4F5C\u53C3\u6578\uFF1A\u5C0D\u8C61\uFF0C\u6587\u672C\uFF0C\u6578\u5B57\uFF0C\u5716\u5C64\u7B49......","An action that can be used on the object. You can define the action parameters: objects, texts, numbers, layers, etc...":"\u53EF\u4EE5\u5728\u5C0D\u8C61\u4E0A\u4F7F\u7528\u7684\u52D5\u4F5C\u3002\u60A8\u53EF\u4EE5\u5B9A\u7FA9\u52D5\u4F5C\u53C3\u6578\uFF1A\u5C0D\u8C61\u3001\u6587\u672C\u3001\u6578\u5B57\u3001\u5716\u5C64\u7B49...","An error happened":"\u767C\u751F\u932F\u8AA4","An error happened when retrieving the game's configuration. Please check your internet connection or try again later.":"\u8B80\u53D6\u904A\u6232\u8A2D\u5B9A\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u7DB2\u8DEF\u9023\u7DDA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002","An error happened when sending your request, please try again.":"\u767C\u9001\u8ACB\u6C42\u6642\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21\u3002","An error happened while cashing out. Verify your internet connection or try again later.":"\u4ED8\u6B3E\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u7DB2\u8DEF\u9023\u7DDA\u6216\u7A0D\u5F8C\u518D\u8A66\u3002","An error happened while loading the certificates.":"\u52A0\u8F09\u8B49\u66F8\u6642\u51FA\u932F\u3002","An error happened while loading this extension. Please check that it is a proper extension file and compatible with this version of GDevelop":"\u52A0\u8F09\u6B64\u64F4\u5C55\u6642\u51FA\u932F\u3002\u8ACB\u6AA2\u67E5\u5B83\u662F\u5426\u662F\u4E00\u500B\u6B63\u78BA\u7684\u64F4\u5C55\u6587\u4EF6\uFF0C\u4E14\u9069\u7528\u4E8E\u6B64\u7248\u672C\u7684 GDevelop","An error happened while purchasing this product. Verify your internet connection or try again later.":"\u8CFC\u8CB7\u6B64\u7522\u54C1\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","An error happened while registering the game. Verify your internet connection or retry later.":"\u6CE8\u518A\u6E38\u6232\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","An error happened while removing the collaborator. Verify your internet connection or retry later.":"\u522A\u9664\u5408\u4F5C\u8005\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","An error happened while transferring your credits. Verify your internet connection or try again later.":"\u5728\u8F49\u79FB\u60A8\u7684\u7A4D\u5206\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u5F8C\u518D\u8A66\u3002","An error happened while unregistering the game. Verify your internet connection or retry later.":"\u53D6\u6D88\u8A3B\u518A\u904A\u6232\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u5F8C\u91CD\u8A66\u3002","An error has occurred during functions generation. If GDevelop is installed, verify that nothing is preventing GDevelop from writing on disk. If you're running GDevelop online, verify your internet connection and refresh functions from the Project Manager.":"\u51FD\u6578\u751F\u6210\u671F\u9593\u767C\u751F\u932F\u8AA4\u3002\u5982\u679C\u5B89\u88DD\u4E86 GDevelop\uFF0C\u8ACB\u78BA\u8A8D\u6C92\u6709\u4EFB\u4F55\u6771\u897F\u963B\u6B62 GDevelop \u5BEB\u5165\u78C1\u76E4\u3002\u5982\u679C\u60A8\u5728\u7DDA\u904B\u884C GDevelop\uFF0C\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u5E76\u5F9E\u9805\u76EE\u7BA1\u7406\u5668\u4E2D\u5237\u65B0\u529F\u80FD\u3002","An error has occurred in functions. Click to reload them.":"\u51FD\u6578\u4E2D\u767C\u751F\u932F\u8AA4\u3002\u9EDE\u64CA\u91CD\u65B0\u52A0\u8F09\u5B83\u5011\u3002","An error occured while storing the auth key.":"\u5B58\u5132\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470\u6642\u767C\u751F\u932F\u8AA4\u3002","An error occured while storing the provisioning profile.":"\u5B58\u5132\u914D\u7F6E\u6587\u4EF6\u6642\u767C\u751F\u932F\u8AA4\u3002","An error occurred in the {componentTitle}.":function(a){return[a("componentTitle")," \u4E2D\u767C\u751F\u932F\u8AA4\u3002"]},"An error occurred when creating a new leaderboard, please close the dialog, come back and try again.":"\u5275\u5EFA\u65B0\u7684\u6392\u884C\u699C\u6642\u51FA\u932F\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u5E76\u91CD\u8A66\u3002","An error occurred when deleting the entry, please try again.":"\u522A\u9664\u53C3\u8CFD\u4F5C\u54C1\u6642\u51FA\u932F\uFF0C\u8ACB\u91CD\u8A66\u3002","An error occurred when deleting the leaderboard, please close the dialog, come back and try again.":"\u522A\u9664\u6392\u884C\u699C\u6642\u51FA\u932F\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u5E76\u91CD\u8A66\u3002","An error occurred when deleting the project. Please try again later.":"\u522A\u9664\u9805\u76EE\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u7A0D\u5F8C\u91CD\u8A66\u3002","An error occurred when downloading the tutorials.":"\u4E0B\u8F09\u6559\u7A0B\u6642\u51FA\u932F\u3002","An error occurred when fetching the entries of the leaderboard, please try again.":"\u7372\u53D6\u6392\u884C\u699C\u689D\u6642\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u91CD\u8A66\u3002","An error occurred when fetching the leaderboards, please close the dialog and reopen it.":"\u7372\u53D6\u6392\u884C\u699C\u6642\u51FA\u932F\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\u5E76\u91CD\u65B0\u6253\u958B\u5B83\u3002","An error occurred when fetching the store content. Please try again later.":"\u7372\u53D6\u5546\u5E97\u5167\u5BB9\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","An error occurred when opening or saving the project. Try again later or choose another location to save the project to.":"\u6253\u958B\u6216\u4FDD\u5B58\u9805\u76EE\u6642\u51FA\u932F\u3002\u7A0D\u540E\u91CD\u8A66\u6216\u9078\u64C7\u53E6\u4E00\u500B\u4F4D\u7F6E\u4F86\u4FDD\u5B58\u9805\u76EE\u3002","An error occurred when opening the project. Check that your internet connection is working and that your browser allows the use of cookies.":"\u6253\u958B\u9805\u76EE\u6642\u767C\u751F\u932F\u8AA4\u3002\u6AA2\u67E5\u60A8\u7684Internet\u9023\u63A5\u662F\u5426\u6B63\u5E38\u5DE5\u4F5C\uFF0C\u5E76\u5141\u8A31\u700F\u89BD\u5668\u4F7F\u7528Cookie\u3002","An error occurred when resetting the leaderboard, please close the dialog, come back and try again.":"\u91CD\u7F6E\u6392\u884C\u699C\u6642\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u5E76\u91CD\u8A66\u3002","An error occurred when retrieving leaderboards, please try again later.":"\u7372\u53D6\u6392\u884C\u699C\u6642\u51FA\u932F\uFF0C\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","An error occurred when saving the project, please verify your internet connection or try again later.":"\u4FDD\u5B58\u9805\u76EE\u6642\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u9A57\u8B49\u60A8\u7684Internet\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","An error occurred when saving the project. Please try again by choosing another location.":"\u4FDD\u5B58\u9805\u76EE\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u9078\u64C7\u5176\u4ED6\u4F4D\u7F6E\u518D\u8A66\u4E00\u6B21\u3002","An error occurred when saving the project. Please try again later.":"\u4FDD\u5B58\u9805\u76EE\u6642\u51FA\u932F\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","An error occurred when sending the form, please verify your internet connection and try again later.":"\u767C\u9001\u8868\u55AE\u6642\u51FA\u932F\uFF0C\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\uFF0C\u7136\u540E\u91CD\u8A66\u3002","An error occurred when setting the leaderboard as default, please close the dialog, come back and try again.":"\u8A2D\u7F6E\u6392\u884C\u699C\u70BA\u9ED8\u8A8D\u6642\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u540E\u91CD\u8A66\u3002","An error occurred when updating the appearance of the leaderboard, please close the dialog, come back and try again.":"\u66F4\u65B0\u6392\u884C\u699C\u5916\u89C0\u6642\u51FA\u932F\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u540E\u91CD\u8A66\u3002","An error occurred when updating the display choice of the leaderboard, please close the dialog, come back and try again.":"\u66F4\u65B0\u6392\u884C\u699C\u986F\u793A\u9078\u9805\u6642\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u5E76\u91CD\u8A66\u3002","An error occurred when updating the name of the leaderboard, please close the dialog, come back and try again.":"\u66F4\u65B0\u6392\u884C\u699C\u540D\u7A31\u6642\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u5E76\u91CD\u8A66\u3002","An error occurred when updating the sort direction of the leaderboard, please close the dialog, come back and try again.":"\u66F4\u65B0\u6392\u5E8F\u65B9\u5F0F\u6642\u51FA\u932F\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u540E\u91CD\u8A66\u3002","An error occurred when updating the visibility of the leaderboard, please close the dialog, come back and try again.":"\u66F4\u65B0\u6392\u884C\u699C\u53EF\u898B\u6027\u6642\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u8FD4\u56DE\u5E76\u91CD\u8A66\u3002","An error occurred while accepting the invitation. Please try again later.":"\u63A5\u53D7\u9080\u8ACB\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","An error occurred while activating your purchase. Please contact support if the problem persists.":"\u5728\u555F\u52D5\u60A8\u7684\u8CFC\u8CB7\u6642\u767C\u751F\u932F\u8AA4\u3002\u5982\u679C\u554F\u984C\u6301\u7E8C\u5B58\u5728\uFF0C\u8ACB\u806F\u7E6B\u652F\u6301\u3002","An error occurred while changing the password. Please try again later.":"\u66F4\u6539\u5BC6\u78BC\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","An error occurred while creating the accounts.":"\u5275\u5EFA\u5E33\u6236\u6642\u767C\u751F\u932F\u8AA4\u3002","An error occurred while creating the group. Please try again later.":"\u5275\u5EFA\u7D44\u6642\u51FA\u932F\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","An error occurred while editing the student. Please try again.":"\u7DE8\u8F2F\u5B78\u751F\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u91CD\u8A66\u3002","An error occurred while exporting your game. Verify your internet connection and try again.":"\u5C0E\u51FA\u60A8\u7684\u904A\u6232\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u4E26\u91CD\u8A66\u3002","An error occurred while fetching the project version, try again later.":"\u767C\u751F\u932F\u8AA4\uFF0C\u7121\u6CD5\u7372\u53D6\u9805\u76EE\u7248\u672C\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66\u3002","An error occurred while generating some icons. Verify that the image is valid and try again.":"\u751F\u6210\u67D0\u4E9B\u5716\u6A19\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u5716\u7247\u662F\u5426\u6709\u6548\u4E26\u91CD\u8A66\u3002","An error occurred while generating the certificate.":"\u751F\u6210\u8B49\u66F8\u6642\u767C\u751F\u932F\u8AA4\u3002","An error occurred while loading audio resources.":"\u52A0\u8F09\u97F3\u983B\u8CC7\u6E90\u6642\u767C\u751F\u932F\u8AA4\u3002","An error occurred while loading fonts.":"\u52A0\u8F09\u5B57\u9AD4\u6642\u767C\u751F\u932F\u8AA4\u3002","An error occurred while loading your AI requests.":"\u52A0\u8F09\u4F60\u7684 AI \u8ACB\u6C42\u6642\u767C\u751F\u932F\u8AA4\u3002","An error occurred while loading your builds. Verify your internet connection and try again.":"\u52A0\u8F09\u69CB\u5EFA\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\uFF0C\u7136\u540E\u91CD\u8A66\u3002","An error occurred while renaming the group name. Please try again later.":"\u91CD\u547D\u540D\u7D44\u540D\u7A31\u6642\u51FA\u932F\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","An error occurred while restoring the project version: {0}":function(a){return["\u6062\u5FA9\u9805\u76EE\u7248\u672C\u6642\u767C\u751F\u932F\u8AA4\uFF1A",a("0")]},"An error occurred while retrieving feedbacks for this game.":"\u6AA2\u7D22\u6B64\u6E38\u6232\u7684\u53CD\u994B\u6642\u51FA\u932F\u3002","An error occurred while trying to recover your project last versions. Please try again later.":"\u8A66\u5716\u6062\u5FA9\u9805\u76EE\u4E0A\u4E00\u7248\u672C\u6642\u51FA\u932F\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","An error occurred, please try again later.":"\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","An error occurred.":"\u767C\u751F\u932F\u8AA4\u3002","An error occurred. Please try again.":"\u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","An expression that can be used in formulas. Can either return a number or a string, and take some parameters.":"\u4E00\u500B\u53EF\u4EE5\u7528\u5728\u516C\u5F0F\u4E2D\u7684\u8868\u9054\u5F0F\u3002\u53EF\u4EE5\u8FD4\u56DE\u4E00\u500B\u6578\u5B57\u6216\u5B57\u7B26\u4E32\uFF0C\u5E76\u4E14\u4F7F\u7528\u4E00\u4E9B\u53C3\u6578\u3002","An expression that can be used on objects with the behavior. Can either return a number or a string, and take some parameters.":"\u53EF\u4EE5\u5728\u5177\u6709\u884C\u70BA\u7684\u5C0D\u8C61\u4E0A\u4F7F\u7528\u7684\u8868\u9054\u5F0F\u3002\u53EF\u4EE5\u8FD4\u56DE\u4E00\u500B\u6578\u5B57\u6216\u5B57\u7B26\u4E32\uFF0C\u5E76\u5360\u7528\u4E00\u4E9B\u53C3\u6578\u3002","An expression that can be used on the object. Can either return a number or a string, and take some parameters.":"\u53EF\u4EE5\u5728\u5C0D\u8C61\u4E0A\u4F7F\u7528\u7684\u8868\u9054\u5F0F\u3002\u53EF\u4EE5\u8FD4\u56DE\u4E00\u500B\u6578\u5B57\u6216\u5B57\u7B26\u4E32\uFF0C\u5E76\u4E14\u63A5\u6536\u4E00\u4E9B\u53C3\u6578\u3002","An extension with this name already exists in the project. Importing this extension will replace it.":"\u9019\u500B\u540D\u7A31\u7684\u64F4\u5C55\u5DF2\u5B58\u5728\u4E8E\u9805\u76EE\u4E2D\u3002\u5C0E\u5165\u6B64\u64F4\u5C55\u5C07\u6703\u66FF\u63DB\u5B83\u3002","An external editor is opened.":"\u6253\u958B\u5916\u90E8\u7DE8\u8F2F\u5668\u3002","An internet connection is required to administrate your game's leaderboards.":"\u7BA1\u7406\u60A8\u7684\u6E38\u6232\u6392\u884C\u699C\u9700\u8981\u4E92\u806F\u7DB2\u9023\u63A5\u3002","An object that can be moved, rotated and scaled in 2D.":"\u4E00\u500B\u53EF\u4EE5\u5728 2D \u4E2D\u79FB\u52D5\u3001\u65CB\u8F49\u548C\u7E2E\u653E\u7684\u7269\u9AD4\u3002","An object that can be moved, rotated and scaled in 3D.":"\u4E00\u500B\u53EF\u4EE5\u5728 3D \u4E2D\u79FB\u52D5\u3001\u65CB\u8F49\u548C\u7E2E\u653E\u7684\u7269\u9AD4\u3002","An unexpected error happened. Please contact us for more details.":"\u767C\u751F\u4E86\u610F\u5916\u932F\u8AA4\u3002\u8ACB\u806F\u7E6B\u6211\u5011\u4EE5\u7372\u53D6\u66F4\u591A\u8A73\u7D30\u4FE1\u606F\u3002","An unexpected error happened. Verify your internet connection or try again later.":"\u767C\u751F\u610F\u5916\u932F\u8AA4\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","An unexpected error occurred. The list has been refreshed.":"\u767C\u751F\u610F\u5916\u932F\u8AA4\u3002\u5217\u8868\u5DF2\u5237\u65B0\u3002","An unknown error happened, ensure your password is entered correctly.":"\u767C\u751F\u672A\u77E5\u932F\u8AA4\uFF0C\u8ACB\u78BA\u4FDD\u60A8\u7684\u5BC6\u78BC\u6B63\u78BA\u8F38\u5165\u3002","An unknown error happened.":"\u767C\u751F\u4E86\u672A\u77E5\u932F\u8AA4\u3002","An update is installing.":"\u6B63\u5728\u5B89\u88DD\u4E00\u500B\u66F4\u65B0\u3002","An update is ready to be installed. Close ALL GDevelop apps or tabs in your browser, then open it again.":"\u5DF2\u6E96\u5099\u597D\u5B89\u88DD\u4E00\u500B\u66F4\u65B0\u3002\u8ACB\u5148\u95DC\u9589\u700F\u89BD\u5668\u4E2D\u7684\u6240\u6709GDevelop \u61C9\u7528\u6216\u6A19\u7C3D\uFF0C\u7136\u540E\u91CD\u65B0\u6253\u958B\u9019\u500B\u66F4\u65B0\u3002","Analytics":"\u5206\u6790","Analyze Objects Used in this Event":"\u5206\u6790\u5728\u6B64\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u7684\u5C0D\u8C61","Analyzing the object properties":"\u5206\u6790\u7269\u4EF6\u5C6C\u6027","Analyzing the project":"\u5206\u6790\u5C08\u6848","And others...":"\u4EE5\u53CA\u5176\u4ED6...","And {remainingResultsCount} more results.":function(a){return["\u9084\u6709 ",a("remainingResultsCount")," \u500B\u7D50\u679C\u3002"]},"Android":"\u5B89\u5353","Android App Bundle (for publishing on Google Play)":"Android \u61C9\u7528\u7A0B\u5E8F\u5305 (\u5728Google Play\u4E0A\u767C\u5E03)","Android Build":"\u5B89\u5353\u7248\u672C(Android Build)","Android builds":"\u5B89\u5353\u69CB\u5EFA","Android icons and Android 12+ splashscreen":"Android \u5716\u6A19\u548C Android 12+ \u555F\u52D5\u756B\u9762","Android mobile devices (Google Play, Amazon)":"Android \u79FB\u52D5\u8A2D\u5099 (Google Play, Amazon)","Angle":"\u89D2\u5EA6","Animation":"\u52D5\u756B","Animation #{animationIndex}":function(a){return["\u52D5\u756B #",a("animationIndex")]},"Animation #{i} {0}":function(a){return["\u52D5\u756B #",a("i")," ",a("0")]},"Animations":"\u52D5\u756B","Animations are a sequence of images.":"\u52D5\u756B\u662F\u4E00\u7CFB\u5217\u5716\u50CF\u3002","Anonymous":"\u533F\u540D\u7684","Anonymous players":"\u533F\u540D\u73A9\u5BB6","Another personal website, newgrounds.com page, etc.":"\u53E6\u4E00\u500B\u500B\u4EBA\u7DB2\u7AD9\uFF0Cnewgrounds.com \u7DB2\u9801\u7B49\u3002","Answer":"\u56DE\u7B54","Answer a 1-minute survey to personalize your suggested content.":"\u56DE\u7B54 1 \u5206\u9418\u7684\u8ABF\u67E5\u4F86\u500B\u6027\u5316\u60A8\u7684\u5EFA\u8B70\u5167\u5BB9\u3002","Answers video":"\u56DE\u7B54\u8996\u983B","Anti-aliasing":"\u6297\u92F8\u9F52","Antialising for 3D":"3D \u6297\u92F8\u9F52","Any object":"\u4EFB\u4F55\u5C0D\u8C61","Any submitted score that is higher than the set value will not be saved in the leaderboard.":"\u4EFB\u4F55\u5DF2\u63D0\u4EA4\u7684\u5F97\u5206\u9AD8\u4E8E\u8A2D\u5B9A\u503C\u90FD\u4E0D\u6703\u4FDD\u5B58\u5728\u6392\u884C\u699C\u4E2D\u3002","Any submitted score that is lower than the set value will not be saved in the leaderboard.":"\u4EFB\u4F55\u63D0\u4EA4\u7684\u5F97\u5206\u4F4E\u4E8E\u8A2D\u5B9A\u503C\u90FD\u4E0D\u6703\u4FDD\u5B58\u5728\u6392\u884C\u699C\u4E2D\u3002","Any unsaved changes in the project will be lost.":"\u9805\u76EE\u4E2D\u4EFB\u4F55\u672A\u4FDD\u5B58\u7684\u66F4\u6539\u90FD\u5C07\u4E1F\u5931\u3002","Anyone can access it.":"\u4EFB\u4F55\u4EBA\u90FD\u53EF\u4EE5\u8A2A\u554F\u5B83\u3002","Anyone with the link can see it, but it is not listed in your game's leaderboards.":"\u4EFB\u4F55\u5E36\u6709\u93C8\u63A5\u7684\u4EBA\u90FD\u53EF\u4EE5\u770B\u5230\u5B83\uFF0C\u4F46\u5B83\u6C92\u6709\u5728\u6E38\u6232\u6392\u884C\u699C\u4E2D\u5217\u51FA\u3002","App or tool":"\u61C9\u7528\u7A0B\u5E8F\u6216\u5DE5\u5177","Appearance":"\u5916\u89C0","Apple":"\u860B\u679C","Apple App Store":"\u860B\u679C\u61C9\u7528\u5546\u5E97","Apple Certificates & Profiles":"\u860B\u679C\u8B49\u66F8\u548C\u914D\u7F6E\u6587\u4EF6","Apple mobile devices (App Store)":"\u860B\u679C\u79FB\u52D5\u8A2D\u5099 (App Store)","Apply":"\u61C9\u7528","Apply changes":"\u61C9\u7528\u66F4\u6539","Apply changes to preview":"\u61C9\u7528\u66F4\u6539\u5230\u9810\u89BD","Apply changes to the running preview":"\u5C07\u66F4\u6539\u61C9\u7528\u5230\u6B63\u5728\u904B\u884C\u7684\u9810\u89BD","Apply this change:":"\u61C9\u7528\u6B64\u66F4\u6539\uFF1A","Archive accounts":"\u6B78\u6A94\u5E33\u6236","Archive {0} accounts":function(a){return["\u6B78\u6A94 ",a("0")," \u500B\u5E33\u6236"]},"Archive {0} accounts?":function(a){return["\u662F\u5426\u8981\u6B78\u6A94 ",a("0")," \u500B\u5E33\u6236\uFF1F"]},"Archived accounts":"\u5DF2\u6B78\u6A94\u5E33\u6236","Are you sure you want to delete this entry? This can't be undone.":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u53C3\u8CFD\u4F5C\u54C1\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002","Are you sure you want to hide this hint? You won't see it again, unless you re-activate it from the preferences.":"\u60A8\u78BA\u5B9A\u8981\u96B1\u85CF\u6B64\u63D0\u793A\u55CE\uFF1F\u60A8\u4E0D\u6703\u518D\u770B\u5230\u5B83\uFF0C\u9664\u975E\u60A8\u5F9E\u9996\u9078\u9805\u4E2D\u91CD\u65B0\u958B\u555F\u5B83\u3002","Are you sure you want to quit GDevelop?":"\u60A8\u78BA\u5B9A\u8981\u9000\u51FAGDevelop\u55CE\uFF1F","Are you sure you want to remove these external events? This can't be undone.":"\u78BA\u5B9A\u8981\u522A\u9664\u9019\u4E9B\u5916\u90E8\u4E8B\u4EF6\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002","Are you sure you want to remove this animation?":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u52D5\u756B\u55CE\uFF1F","Are you sure you want to remove this animation? You will lose the custom collision mask you have set for this object.":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u52D5\u756B\u55CE\uFF1F\u60A8\u5C07\u4E1F\u5931\u60A8\u70BA\u6B64\u5C0D\u8C61\u8A2D\u7F6E\u7684\u81EA\u5B9A\u7FA9\u78B0\u649E\u906E\u7F69\u3002","Are you sure you want to remove this behavior? This can't be undone.":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u884C\u70BA\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002","Are you sure you want to remove this external layout? This can't be undone.":"\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u5916\u90E8\u5E03\u5C40\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002","Are you sure you want to remove this folder and all its content (objects {0})? This can't be undone.":function(a){return["\u78BA\u5BE6\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u53CA\u5176\u6240\u6709\u5167\u5BB9 (\u5C0D\u8C61",a("0"),") \u55CE? \u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and all its functions ({0})? This can't be undone.":function(a){return["\u78BA\u5BE6\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u53CA\u5176\u6240\u6709\u51FD\u5F0F (",a("0"),") \u55CE? \u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and all its properties ({0})? This can't be undone.":function(a){return["\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u53CA\u5176\u6240\u6709\u5C6C\u6027\uFF08",a("0"),"\uFF09\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and with it the function {0}? This can't be undone.":function(a){return["\u78BA\u5BE6\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u548C\u51FD\u5F0F ",a("0")," \u55CE? \u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and with it the object {0}? This can't be undone.":function(a){return["\u78BA\u5BE6\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u548C\u5C0D\u8C61 ",a("0")," \u55CE? \u7121\u6CD5\u64A4\u6D88\u6B64\u64CD\u4F5C\u3002"]},"Are you sure you want to remove this folder and with it the property {0}? This can't be undone.":function(a){return["\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u53CA\u5176\u5C6C\u6027 ",a("0")," \u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this function? This can't be undone.":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u51FD\u6578\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002","Are you sure you want to remove this group? This can't be undone.":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u7D44\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002","Are you sure you want to remove this object? This can't be undone.":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u5C0D\u8C61\uFF1F\u9019\u500B\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002","Are you sure you want to remove this resource? This can't be undone.":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u8CC7\u6E90\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002","Are you sure you want to remove this scene? This can't be undone.":"\u78BA\u5B9A\u8981\u79FB\u9664\u6B64\u5834\u666F\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002","Are you sure you want to remove this variant from your project? This can't be undone.":"\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u8B8A\u9AD4\u5F9E\u60A8\u7684\u5C08\u6848\u4E2D\u55CE\uFF1F\u9019\u500B\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002","Are you sure you want to reset all shortcuts to their default values?":"\u60A8\u78BA\u5B9A\u8981\u5C07\u6240\u6709\u5FEB\u6377\u65B9\u5F0F(shortcuts)\u91CD\u7F6E\u70BA\u9ED8\u8A8D\u503C\u55CE\uFF1F","Are you sure you want to restore the project to the state saved at this point in the AI conversation? This will overwrite the current project state.":"\u60A8\u78BA\u5B9A\u8981\u5C07\u9805\u76EE\u6062\u5FA9\u5230\u6B64\u6642\u5728AI\u5C0D\u8A71\u4E2D\u4FDD\u5B58\u7684\u72C0\u614B\u55CE\uFF1F\u9019\u5C07\u8986\u84CB\u7576\u524D\u9805\u76EE\u72C0\u614B\u3002","Are you sure you want to unregister this game?{0}If you haven't saved it, it will disappear from your games dashboard and you won't get access to player services, unless you register it again.":function(a){return["\u60A8\u78BA\u5B9A\u8981\u53D6\u6D88\u8A3B\u518A\u9019\u500B\u904A\u6232\u55CE\uFF1F",a("0"),"\u5982\u679C\u60A8\u5C1A\u672A\u4FDD\u5B58\uFF0C\u5B83\u5C07\u4ECE\u60A8\u7684\u6E38\u620F\u4FE1\u606F\u4E2D\u5FC3\u6D88\u5931\uFF0C\u5E76\u4E14\u60A8\u5C07\u7121\u6CD5\u8A2A\u554F\u73A9\u5BB6\u670D\u52D9\uFF0C\u9664\u975E\u60A8\u91CD\u65B0\u8A3B\u518A\u3002"]},"Are you teaching or learning game development?":"\u60A8\u6B63\u5728\u6559\u6388\u6216\u5B78\u7FD2\u6E38\u6232\u958B\u767C\u55CE\uFF1F","Around 1 or 2 months":"\u5927\u7D041\u62162\u500B\u6708","Around 3 to 5 months":"\u5927\u7D043\u52305\u500B\u6708","Array":"\u6578\u7D44","Art & Animation":"\u85DD\u8853\u8207\u52D5\u756B","As a percent of the game width.":"\u5360\u6E38\u6232\u5BEC\u5EA6\u7684\u767E\u5206\u6BD4\u3002","As a teacher, you will use one seat in the plan so make sure to include yourself!":"\u4F5C\u70BA\u4E00\u540D\u6559\u5E2B\uFF0C\u60A8\u5C07\u5728\u8A08\u5283\u4E2D\u4F7F\u7528\u4E00\u500B\u5EA7\u4F4D\uFF0C\u56E0\u6B64\u8ACB\u52D9\u5FC5\u5305\u62EC\u60A8\u81EA\u5DF1\uFF01","Ask AI":"\u8A62\u554F AI","Ask AI (AI agent and chatbot)":"\u8A62\u554F AI (AI \u4EE3\u7406\u8207\u804A\u5929\u6A5F\u5668\u4EBA)","Ask a follow up question":"\u63D0\u51FA\u5F8C\u7E8C\u554F\u984C","Ask every time":"\u6BCF\u6B21\u8A62\u554F","Ask the AI":"\u8A62\u554F AI","Ask your questions to the community":"\u5411\u793E\u5340\u8A62\u554F\u60A8\u7684\u554F\u984C","Asset Store":"\u8CC7\u7522\u5546\u5E97","Asset pack bundles":"\u8CC7\u6E90\u5305\u6346\u7D81\u5305","Asset pack not found":"\u672A\u627E\u5230\u8CC7\u7522\u5305","Asset pack not found - An error occurred, please try again later.":"\u8CC7\u6E90\u5305\u672A\u627E\u5230 - \u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","Asset packs will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this pack (or restore your existing purchase).":"\u8CC7\u6E90\u5305\u5C07\u93C8\u63A5\u5230\u60A8\u7684\u7528\u6236\u5E33\u6236\u5E76\u53EF\u7528\u4E8E\u60A8\u7684\u6240\u6709\u9805\u76EE\u3002\u767B\u9304\u6216\u6CE8\u518A\u4EE5\u8CFC\u8CB7\u6B64\u5305 (\u6216\u6062\u5FA9\u60A8\u73FE\u6709\u7684\u8CFC\u8CB7)\u3002","Asset store dialog":"\u8CC7\u7522\u5546\u5E97\u5C0D\u8A71\u6846","Asset store tag":"\u8CC7\u7522\u5546\u5E97\u6A19\u7C64","Assets":"\u7D20\u6750","Assets (coming soon!)":"\u8CC7\u7522(\u5373\u5C07\u5230\u4F86!)","Assets import can't be undone. Make sure to backup your project beforehand.":"\u8CC7\u7522\u5C0E\u5165\u7121\u6CD5\u64A4\u92B7\u3002\u8ACB\u78BA\u4FDD\u4E8B\u5148\u5099\u4EFD\u60A8\u7684\u5C08\u6848\u3002","Associated resource name":"\u95DC\u806F\u7684\u8CC7\u6E90\u540D\u7A31","Asynchronous":"\u7570\u6B65","At launch":"\u555F\u52D5\u6642","Atlas":"\u5716\u96C6","Atlas resource":"\u5716\u96C6\u8CC7\u6E90","Attached object":"\u9644\u52A0\u7269\u4EF6","Audio":"\u97F3\u983B","Audio & Sound":"\u97F3\u983B\u8207\u8072\u97F3","Audio resource":"\u97F3\u983B\u8CC7\u6E90","Audio type":"\u97F3\u8A0A\u985E\u578B","Auth Key (App Store upload)":"\u9A57\u8B49\u5BC6\u9470 (\u61C9\u7528\u5546\u5E97\u4E0A\u50B3)","Auth Key for upload to App Store Connect":"\u7528\u4E8E\u4E0A\u50B3\u5230 App Store Connect \u7684\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470","Authors":"\u4F5C\u8005","Auto download and install updates (recommended)":"\u81EA\u52D5\u4E0B\u8F09\u548C\u5B89\u88DD\u66F4\u65B0 (\u63A8\u85A6)","Auto-save project on preview":"\u9810\u89BD\u6642\u81EA\u52D5\u4FDD\u5B58\u9805\u76EE","Automated":"\u81EA\u52D5\u5316","Automatic collision mask activated. Click on the button to replace it with a custom one.":"\u81EA\u52D5\u78B0\u649E\u906E\u7F69\u5DF2\u6FC0\u6D3B\u3002\u55AE\u64CA\u6309\u9215\u5C07\u5176\u66FF\u63DB\u70BA\u81EA\u5B9A\u7FA9\u6309\u9215\u3002","Automatic creation of lighting layer":"\u81EA\u52D5\u5275\u5EFA\u7167\u660E\u5716\u5C64","Automatically follow the base layer.":"\u81EA\u52D5\u8DDF\u96A8\u57FA\u672C\u5C64(base layer)","Automatically log in as a player in preview":"\u5728\u9810\u89BD\u6642\u81EA\u52D5\u4EE5\u73A9\u5BB6\u8EAB\u4EFD\u767B\u9304","Automatically open the diagnostic report at preview":"\u5728\u9810\u89BD\u6642\u81EA\u52D5\u6253\u958B\u8A3A\u65B7\u5831\u544A","Automatically re-open the project edited during last session":"\u81EA\u52D5\u91CD\u65B0\u6253\u958B\u4E0A\u6B21\u6703\u8A71\u4E2D\u7DE8\u8F2F\u7684\u9805\u76EE","Automatically take a screenshot in game previews":"\u5728\u904A\u6232\u9810\u89BD\u4E2D\u81EA\u52D5\u622A\u53D6\u5C4F\u5E55\u5FEB\u7167","Automatically use GDevelop credits for AI requests when run out of AI credits":"\u81EA\u52D5\u4F7F\u7528 GDevelop \u865B\u64EC\u8CA8\u5E63\u7528\u65BC AI \u8ACB\u6C42\uFF0C\u7576 AI \u865B\u64EC\u8CA8\u5E63\u7528\u5B8C\u6642","Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.":"Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.","Average user feedback":"\u666E\u901A\u7528\u6236\u53CD\u994B","Back":"\u8FD4\u56DE","Back (Additional button, typically the Browser Back button)":"\u540E\u9000 (\u9644\u52A0\u6309\u9215\uFF0C\u901A\u5E38\u662F\u700F\u89BD\u5668\u540E\u9000\u6309\u9215)","Back face":"\u80CC\u9762","Back to discover":"\u8FD4\u56DE\u4EE5\u767C\u73FE","Back to {0}":function(a){return["\u8FD4\u56DE ",a("0")]},"Background":"\u80CC\u666F","Background and cameras":"\u80CC\u666F\u548C\u76F8\u6A5F","Background color":"\u80CC\u666F\u8272","Background color:":"\u80CC\u666F\u773C\u8272\uFF1B","Background fade in duration (in seconds)":"\u80CC\u666F\u6DE1\u5165\u6301\u7E8C\u6642\u9593(\u79D2)","Background image":"\u80CC\u666F\u5716\u50CF","Background preloading of scene resources":"\u5834\u666F\u8CC7\u6E90\u7684\u80CC\u666F\u9810\u52A0\u8F09","Backgrounds":"\u80CC\u666F","Base layer":"\u57FA\u790E\u5C64","Base layer properties":"\u57FA\u790E\u5716\u5C64\u5C6C\u6027","Be careful with this action, you may have problems exiting the preview if you don't add a way to toggle it back.":"\u8ACB\u8B39\u614E\u57F7\u884C\u6B64\u64CD\u4F5C\uFF0C\u5982\u679C\u4F60\u6C92\u6709\u6DFB\u52A0\u5207\u63DB\u56DE\u9810\u89BD\u7684\u65B9\u5F0F\uFF0C\u5247\u9000\u51FA\u9810\u89BD\u53EF\u80FD\u6703\u9047\u5230\u554F\u984C\u3002","Before installing this asset, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88DD\u6B64\u8CC7\u7522\u4E4B\u524D\uFF0C\u5F37\u70C8\u5EFA\u8B70\u66F4\u65B0\u9019\u4E9B\u64F4\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before installing this behavior, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88DD\u6B64\u884C\u70BA\u4E4B\u524D\uFF0C\u5F37\u70C8\u5EFA\u8B70\u66F4\u65B0\u9019\u4E9B\u64F4\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before installing this extension, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88DD\u6B64\u64F4\u5C55\u4E4B\u524D\uFF0C\u5F37\u70C8\u5EFA\u8B70\u66F4\u65B0\u9019\u4E9B\u64F4\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before you go, make sure that you've unpublished all your games on gd.games. Otherwise they will stay visible to the community. Are you sure you want to permanently delete your account? This action cannot be undone.":"\u5728\u60A8\u958B\u59CB\u4E4B\u524D\uFF0C\u8ACB\u78BA\u4FDD\u60A8\u5DF2\u53D6\u6D88\u5728 gd.games \u4E0A\u767C\u5E03\u6240\u6709\u6E38\u6232\u3002\u5426\u5247\uFF0C\u5B83\u5011\u5C07\u5C0D\u793E\u5340\u4FDD\u6301\u53EF\u898B\u3002\u60A8\u78BA\u5B9A\u8981\u6C38\u4E45\u522A\u9664\u60A8\u7684\u5E33\u6236\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002","Before you go...":"\u5728\u60A8\u96E2\u958B\u4E4B\u524D...","Begin a driving game with a controllable car":"\u958B\u59CB\u4E00\u500B\u53EF\u4EE5\u63A7\u5236\u7684\u6C7D\u8ECA\u99D5\u99DB\u904A\u6232","Begin a top-down adventure with one controllable character.":"\u958B\u59CB\u4E00\u500B\u5782\u76F4\u4FEF\u77B0\u7684\u5192\u96AA\uFF0C\u64C1\u6709\u4E00\u500B\u53EF\u63A7\u5236\u7684\u89D2\u8272\u3002","Beginner":"\u521D\u5B78\u8005","Beginner course":"\u521D\u7D1A\u8AB2\u7A0B","Behavior":"\u884C\u70BA","Behavior (for the previous object)":"\u884C\u70BA\uFF08\u5C0D\u4E8E\u4E0A\u4E00\u500B\u5C0D\u8C61\uFF09","Behavior Configuration":"\u884C\u70BA\u914D\u7F6E","Behavior name":"\u884C\u70BA\u540D\u7A31","Behavior properties":"\u884C\u70BA\u5C6C\u6027","Behavior type":"\u884C\u70BA\u985E\u578B","Behaviors":"\u884C\u70BA","Behaviors add features to objects in a matter of clicks.":"\u884C\u70BA\u5728\u9EDE\u64CA\u5C0D\u8C61\u4E2D\u6DFB\u52A0\u529F\u80FD\u3002","Behaviors are attached to objects and make them alive. The rules of the game can be created using behaviors and events.":"\u884C\u70BA\u96A8\u5C0D\u8C61\u9644\u52A0\uFF0C\u8B93\u5B83\u5011\u8B8A\u5F97\u751F\u52D5\u3002\u904A\u6232\u898F\u5247\u53EF\u4EE5\u900F\u904E\u884C\u70BA\u548C\u4E8B\u4EF6\u4F86\u5275\u5EFA\u3002","Behaviors of {objectOrGroupName}: {0} ;":function(a){return[a("objectOrGroupName")," \u7684\u884C\u70BA\uFF1A",a("0"),"\uFF1B"]},"Bio":"\u500B\u4EBA\u4FE1\u606F","Bitmap Font":"\u4F4D\u5716\u5B57\u9AD4","Bitmap font resource":"\u4F4D\u5716\u5B57\u9AD4\u8CC7\u6E90","Block preview and export when diagnostic errors are found":"\u7576\u627E\u5230\u8A3A\u65B7\u932F\u8AA4\u6642\uFF0C\u963B\u6B62\u9810\u89BD\u548C\u5C0E\u51FA","Blocked on GDevelop?":"\u5728 GDevelop \u4E0A\u88AB\u963B\u6B62\uFF1F","Blur radius":"\u6A21\u7CCA\u534A\u5F91","Bold":"\u7C97\u9AD4","Boolean":"\u5E03\u723E","Boolean (checkbox)":"\u5E03\u723E\u503C\uFF08\u5FA9\u9078\u6846\uFF09","Bottom":"\u5E95\u90E8","Bottom bound":"\u5E95\u90E8\u908A\u754C","Bottom bound should be greater than right bound":"\u5E95\u90E8\u908A\u754C\u61C9\u5927\u65BC\u53F3\u5074\u908A\u754C","Bottom face":"\u5E95\u9762","Bottom left corner":"\u5DE6\u4E0B\u89D2","Bottom margin":"\u5E95\u908A\u8DDD","Bottom right corner":"\u53F3\u4E0B\u89D2","Bounce rate":"\u8DF3\u51FA\u7387","Bounds":"\u908A\u754C","Branding":"\u54C1\u724C\u63A8\u5EE3","Branding and Loading screen":"\u54C1\u724C\u548C\u52A0\u8F09\u5C4F\u5E55","Break into the <0>booming industry of casual gaming. Sharpen your skills and become a professional. Start for free:":"\u9032\u5165<0>\u84EC\u52C3\u767C\u5C55\u7684\u7522\u696D\u4F11\u9592\u904A\u6232\u3002\u78E8\u7DF4\u60A8\u7684\u6280\u80FD\u4E26\u6210\u70BA\u5C08\u696D\u4EBA\u58EB\u3002\u514D\u8CBB\u958B\u59CB\uFF1A","Breaking changes":"\u91CD\u5927\u8B8A\u66F4","Bring to front":"\u7F6E\u4E8E\u524D\u7AEF","Browse":"\u700F\u89BD","Browse all templates":"\u700F\u89BD\u6240\u6709\u6A21\u677F","Browse assets":"\u700F\u89BD\u8CC7\u7522","Browse bundle":"\u700F\u89BD\u6346\u7D81\u5305","Browser":"\u700F\u89BD\u5668","Build and download":"\u751F\u6210\u5E76\u4E0B\u8F09","Build could not start or errored. Please check your internet connection or try again later.":"\u69CB\u5EFA\u7121\u6CD5\u958B\u59CB\u6216\u51FA\u73FE\u932F\u8AA4\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\uFF0C\u6216\u8005\u7A0D\u540E\u518D\u8A66\u3002","Build dynamic levels with tiles.":"\u4F7F\u7528\u74F7\u78DA\u69CB\u5EFA\u52D5\u614B\u95DC\u5361\u3002","Build is starting...":"\u69CB\u5EFA\u6B63\u5728\u555F\u52D5\u2026\u2026","Build open for feedbacks":"\u5EFA\u7ACB\u958B\u653E\u7684\u53CD\u994B","Build started!":"\u69CB\u5EFA\u5DF2\u958B\u59CB\uFF01","Building":"\u6B63\u5728\u751F\u6210","Bundle":"\u6346\u7D81\u5305","Bundle not found":"\u627E\u4E0D\u5230\u6346\u7D81\u5305","Bundle not found - An error occurred, please try again later.":"\u672A\u627E\u5230\u6346\u7D81\u5305 - \u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","Bundles and their content will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this bundle. (or restore your existing purchase).":"\u6346\u7D81\u5305\u53CA\u5176\u5167\u5BB9\u5C07\u88AB\u93C8\u63A5\u5230\u60A8\u7684\u7528\u6236\u5E33\u6236\u4E26\u53EF\u7528\u65BC\u6240\u6709\u9805\u76EE\u3002\u767B\u9304\u6216\u8A3B\u518A\u4EE5\u8CFC\u8CB7\u6B64\u6346\u7D81\u5305\u3002\uFF08\u6216\u6062\u5FA9\u60A8\u73FE\u6709\u7684\u8CFC\u8CB7\uFF09\u3002","Buy GDevelop goodies and swag":"\u8CFC\u8CB7 GDevelop \u79AE\u54C1\u548C\u8D08\u54C1","Buy for {0} credits":function(a){return["\u8CFC\u8CB7 ",a("0")," \u500B\u7A4D\u5206"]},"Buy for {formattedProductPriceText}":function(a){return["\u70BA ",a("formattedProductPriceText")," \u8CFC\u8CB7"]},"Buy now and save {0}":function(a){return["\u7ACB\u5373\u8CFC\u8CB7\u4E26\u7BC0\u7701 ",a("0")]},"By accepting, the team admin will be able to access your projects and may update your profile information such as your username.":"\u63A5\u53D7\u5F8C\uFF0C\u5718\u968A\u7BA1\u7406\u54E1\u5C07\u80FD\u5920\u8A2A\u554F\u60A8\u7684\u9805\u76EE\uFF0C\u4E26\u53EF\u4EE5\u66F4\u65B0\u60A8\u7684\u500B\u4EBA\u6A94\u6848\u4FE1\u606F\uFF0C\u4F8B\u5982\u60A8\u7684\u7528\u6236\u540D\u3002","By canceling your subscription, you will lose all your premium features at the end of the period you already paid for. Continue?":"\u901A\u904E\u53D6\u6D88\u8A02\u95B1\uFF0C\u60A8\u5C07\u5728\u5DF2\u4ED8\u8CBB\u7684\u671F\u9650\u7D50\u675F\u6642\u5931\u53BB\u6240\u6709\u9AD8\u7D1A\u529F\u80FD\u3002\u7E7C\u7E8C\uFF1F","By creating an account and using GDevelop, you agree to the [Terms and Conditions](https://gdevelop.io/page/terms-and-conditions).":"\u5275\u5EFA\u5E33\u6236\u5E76\u4F7F\u7528 GDevelop\uFF0C\u5373\u8868\u793A\u60A8\u540C\u610F[\u689D\u6B3E\u548C\u689D\u4EF6](https://gdevelop.io/page/terms-and-conditions)\u3002","Calibrating sensors":"\u6821\u6E96\u50B3\u611F\u5668","Camera":"\u76F8\u6A5F","Camera positioning":"\u76F8\u6A5F\u5B9A\u7FA9","Camera type":"\u76F8\u6A5F\u985E\u578B","Can't check if the game is registered online.":"\u7121\u6CD5\u6AA2\u67E5\u6E38\u6232\u662F\u5426\u5728\u7DDA\u6CE8\u518A\u3002","Can't load the announcements. Verify your internet connection or try again later.":"\u7121\u6CD5\u52A0\u8F09\u516C\u544A\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","Can't load the credits packages. Verify your internet connection or retry later.":"\u7121\u6CD5\u52A0\u8F09\u7A4D\u5206\u5305\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Can't load the extension registry. Verify your internet connection or try again later.":"\u7121\u6CD5\u52A0\u8F09\u64F4\u5C55\u5B58\u5132\u5EAB\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\uFF0C\u6216\u8005\u7A0D\u540E\u518D\u8A66\u3002","Can't load the games. Verify your internet connection or retry later.":"\u7121\u6CD5\u52A0\u8F09\u6E38\u6232\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Can't load the licenses. Verify your internet connection or try again later.":"\u7121\u6CD5\u52A0\u8F09\u8A31\u53EF\u8B49\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Can't load the profile. Verify your internet connection or try again later.":"\u7121\u6CD5\u52A0\u8F09\u914D\u7F6E\u6587\u4EF6\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Can't load the results. Verify your internet connection or retry later.":"\u7121\u6CD5\u52A0\u8F09\u7D50\u679C\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Can't load the tutorials. Verify your internet connection or retry later.":"\u7121\u6CD5\u52A0\u8F09\u6559\u7A0B\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Can't load your game earnings. Verify your internet connection or try again later.":"\u7121\u6CD5\u52A0\u8F09\u60A8\u7684\u904A\u6232\u6536\u5165\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u5F8C\u91CD\u8A66\u3002","Can't properly export the game.":"\u7121\u6CD5\u6B63\u78BA\u5C0E\u51FA\u6E38\u6232\u3002","Can't upload your game to the build service.":"\u7121\u6CD5\u5C07\u4F60\u7684\u6E38\u6232\u4E0A\u50B3\u5230\u69CB\u5EFA\u670D\u52D9\u4E0A\u3002","Cancel":"\u53D6\u6D88","Cancel and change my subscription":"\u53D6\u6D88\u4E26\u66F4\u6539\u6211\u7684\u8A02\u95B1","Cancel and close":"\u53D6\u6D88\u5E76\u95DC\u9589","Cancel anytime":"\u96A8\u6642\u53D6\u6D88","Cancel changes":"\u53D6\u6D88\u66F4\u6539","Cancel editing":"\u53D6\u6D88\u7DE8\u8F2F","Cancel edition":"\u53D6\u6D88\u7248\u672C","Cancel subscription":"\u53D6\u6D88\u8A02\u95B1","Cancel your changes?":"\u53D6\u6D88\u60A8\u7684\u66F4\u6539\uFF1F","Cancel your subscription":"\u53D6\u6D88\u8A02\u95B1","Cancel your subscription?":"\u53D6\u6D88\u60A8\u7684\u8A02\u95B1\u55CE\uFF1F","Cancelled":"\u5DF2\u53D6\u6D88","Cancelled - Your subscription will end at the end of the paid period.":"\u5DF2\u53D6\u6D88 - \u60A8\u7684\u8A02\u95B1\u5C07\u5728\u4ED8\u8CBB\u671F\u9593\u7D50\u675F\u6642\u7D50\u675F\u3002","Cannot access project save":"\u7121\u6CD5\u5B58\u53D6\u5C08\u6848\u5132\u5B58","Cannot filter on both asset packs and assets at the same time. Try clearing one of the filters!":"\u7121\u6CD5\u540C\u6642\u5C0D\u8CC7\u7522\u5305\u548C\u8CC7\u7522\u9032\u884C\u904E\u6FFE\u3002\u8ACB\u5617\u8A66\u6E05\u9664\u5176\u4E2D\u4E00\u500B\u904E\u6FFE\u5668\uFF01","Cannot restore project":"\u7121\u6CD5\u9084\u539F\u5C08\u6848","Cannot see the exports":"\u7121\u6CD5\u67E5\u770B\u5C0E\u51FA","Cannot update thumbnail":"\u7121\u6CD5\u66F4\u65B0\u7E2E\u7565\u5716","Cash out":"\u73FE\u91D1\u514C\u63DB","Category (shown in the editor)":"\u985E\u5225(\u5728\u7DE8\u8F2F\u5668\u4E2D\u986F\u793A)","Cell depth (in pixels)":"\u55AE\u5143\u683C\u6DF1\u5EA6 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Cell height (in pixels)":"\u55AE\u5143\u683C\u9AD8\u5EA6 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Cell width (in pixels)":"\u55AE\u5143\u683C\u5BEC\u5EA6 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Center":"\u4E2D\u5FC3","Certificate and provisioning profile":"\u8B49\u66F8\u548C\u914D\u7F6E\u6587\u4EF6","Certificate type: {0}":function(a){return["\u8B49\u66F8\u985E\u578B\uFF1A",a("0")]},"Change editor zoom":"\u66F4\u6539\u7DE8\u8F2F\u5668\u7E2E\u653E","Change my email":"\u66F4\u6539\u6211\u7684\u96FB\u5B50\u90F5\u4EF6","Change the name in the project properties.":"\u66F4\u6539\u9805\u76EE\u5C6C\u6027\u4E2D\u7684\u540D\u7A31\u3002","Change the package name in the game properties.":"\u5728\u6E38\u6232\u5C6C\u6027\u4E2D\u66F4\u6539\u5305\u540D\u7A31\u3002","Change thumbnail":"\u66F4\u6539\u7E2E\u7565\u5716","Change username or full name":"\u66F4\u6539\u7528\u6236\u540D\u6216\u5168\u540D","Change your email":"\u66F4\u6539\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6","Changes and answers may have mistakes: experiment and use it for learning.":"\u66F4\u6539\u548C\u7B54\u6848\u53EF\u80FD\u6709\u932F\u8AA4\uFF1A\u8ACB\u5BE6\u9A57\u4E26\u7528\u65BC\u5B78\u7FD2\u3002","Changes saved":"\u66F4\u6539\u5DF2\u4FDD\u5B58","Chapter":"\u7AE0\u7BC0","Chapter materials":"\u7AE0\u7BC0\u6750\u6599","Chapters":"\u7AE0\u7BC0","Characters":"\u89D2\u8272","Check again for new updates":"\u518D\u6B21\u6AA2\u67E5\u662F\u5426\u6709\u65B0\u66F4\u65B0","Check that the file exists, that this file is a proper game created with GDevelop and that you have the authorization to open it.":"\u6AA2\u67E5\u8A72\u6587\u4EF6\u662F\u5426\u5B58\u5728\uFF0C\u8A72\u6587\u4EF6\u662F\u5426\u662F\u4F7F\u7528GDevelop\u5275\u5EFA\u7684\u6B63\u78BA\u6E38\u6232\uFF0C\u4EE5\u53CA\u60A8\u662F\u5426\u6709\u6B0A\u6253\u958B\u5B83\u3002","Check the logs to see if there is an explanation about what went wrong, or try again later.":"\u6AA2\u67E5\u65E5\u5FD7\u4EE5\u67E5\u770B\u662F\u5426\u6709\u95DC\u4E8E\u554F\u984C\u51FA\u5728\u54EA\u91CC\u7684\u8AAA\u660E, \u6216\u8005\u7A0D\u540E\u518D\u8A66\u3002","Checking for update...":"\u6B63\u5728\u6AA2\u67E5\u66F4\u65B0\u2026\u2026","Checking tools":"\u6AA2\u67E5\u5DE5\u5177","Children configurations are deprecated. This [migration documentation](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) can help you use variants instead.":"\u5152\u7AE5\u914D\u7F6E\u5DF2\u88AB\u68C4\u7528\u3002\u9019\u4EFD[\u9077\u79FB\u6587\u6A94](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/)\u53EF\u4EE5\u5E6B\u52A9\u4F60\u6539\u7528\u8B8A\u9AD4\u3002","Choose":"\u9078\u64C7","Choose GDevelop language":"\u9078\u64C7GDevelop\u8A9E\u8A00","Choose a Auth Key":"\u9078\u64C7\u4E00\u500B\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470","Choose a file":"\u9078\u64C7\u6587\u4EF6","Choose a folder for the new game":"\u9078\u64C7\u65B0\u6E38\u6232\u7684\u6587\u4EF6\u593E","Choose a font":"\u9078\u64C7\u5B57\u9AD4","Choose a function, or a function of a behavior, to edit its events.":"\u9078\u64C7\u4E00\u500B\u51FD\u6578\u6216\u884C\u70BA\u51FD\u6578\u4F86\u7DE8\u8F2F\u5176\u4E8B\u4EF6\u3002","Choose a function, or a function of a behavior, to set the parameters that it accepts.":"\u9078\u64C7\u4E00\u500B\u51FD\u6578\uFF0C\u6216\u8005\u4E00\u500B\u884C\u70BA\u51FD\u6578\uFF0C\u4EE5\u8A2D\u7F6E\u5B83\u63A5\u53D7\u7684\u53C3\u6578\u3002","Choose a key":"\u9078\u64C7\u4E00\u500B\u6309\u9375","Choose a layer":"\u9078\u64C7\u5716\u5C64","Choose a leaderboard":"\u9078\u64C7\u4E00\u500B\u6392\u884C\u699C","Choose a leaderboard (optional)":"\u9078\u64C7\u4E00\u500B\u6392\u884C\u699C(\u53EF\u9078)","Choose a mouse button":"\u9078\u64C7\u9F20\u6A19\u6309\u9215","Choose a new behavior function (\"method\")":"\u9078\u64C7\u65B0\u7684\u884C\u70BA\u51FD\u6578 (\"\u65B9\u6CD5\")","Choose a new extension function":"\u9078\u64C7\u4E00\u500B\u65B0\u7684\u64F4\u5C55\u51FD\u6578","Choose a new object function (\"method\")":"\u9078\u64C7\u4E00\u500B\u65B0\u7684\u5C0D\u8C61\u51FD\u6578 (\"\u65B9\u6CD5\")","Choose a new object type":"\u9078\u64C7\u4E00\u500B\u65B0\u7684\u5C0D\u8C61\u985E\u578B","Choose a pack":"\u9078\u64C7\u4E00\u500B\u5305","Choose a parameter":"\u9078\u64C7\u4E00\u500B\u53C3\u6578","Choose a provisioning profile":"\u9078\u64C7\u914D\u7F6E\u6587\u4EF6","Choose a scene":"\u9078\u64C7\u4E00\u500B\u5834\u666F","Choose a skin":"\u9078\u64C7\u4E00\u500B\u76AE\u819A","Choose a subscription":"\u9078\u64C7\u4E00\u9805\u8A02\u95B1","Choose a subscription to enjoy the best of game creation.":"\u9078\u64C7\u4E00\u500B\u8A02\u95B1\u4EE5\u4EAB\u53D7\u6700\u4F73\u7684\u904A\u6232\u5275\u4F5C\u3002","Choose a value":"\u9078\u64C7\u4E00\u500B\u503C","Choose a workspace folder":"\u9078\u64C7\u4E00\u500B\u5DE5\u4F5C\u5340\u6587\u4EF6\u593E","Choose an animation":"\u9078\u64C7\u4E00\u500B\u52D5\u756B","Choose an animation and frame to edit the collision masks":"\u9078\u64C7\u52D5\u756B\u548C\u5E40\u4F86\u7DE8\u8F2F\u78B0\u649E\u8499\u677F","Choose an animation and frame to edit the points":"\u9078\u64C7\u52D5\u756B\u548C\u5E40\u4F86\u7DE8\u8F2F\u9EDE","Choose an effect":"\u9078\u64C7\u4E00\u7A2E\u6548\u679C","Choose an element to inspect in the list":"\u5728\u5217\u8868\u4E2D\u9078\u64C7\u8981\u6AA2\u67E5\u7684\u5143\u7D20","Choose an export folder":"\u9078\u64C7\u5C0E\u51FA\u6587\u4EF6\u593E","Choose an external layout":"\u9078\u64C7\u5916\u90E8\u5E03\u5C40","Choose an icon":"\u9078\u64C7\u4E00\u500B\u5716\u793A","Choose an object":"\u9078\u64C7\u5C0D\u8C61","Choose an object first or browse the list of actions.":"\u8ACB\u5148\u9078\u64C7\u4E00\u500B\u7269\u4EF6\u6216\u700F\u89BD\u884C\u52D5\u5217\u8868\u3002","Choose an object first or browse the list of conditions.":"\u8ACB\u5148\u9078\u64C7\u4E00\u500B\u7269\u4EF6\u6216\u700F\u89BD\u689D\u4EF6\u5217\u8868\u3002","Choose an object to add to the group":"\u9078\u64C7\u8981\u6DFB\u52A0\u5230\u7FA4\u7D44\u7684\u5C0D\u8C61","Choose an operator":"\u9078\u64C7\u4E00\u500B\u64CD\u4F5C\u7B26","Choose an option":"\u9078\u64C7\u4E00\u500B\u9078\u9805","Choose and add an event":"\u9078\u64C7\u5E76\u6DFB\u52A0\u4E8B\u4EF6","Choose and add an event...":"\u9078\u64C7\u5E76\u6DFB\u52A0\u4E8B\u4EF6...","Choose and enter a package name in the game properties.":"\u5728\u6E38\u6232\u5C6C\u6027\u4E2D\u9078\u64C7\u5E76\u8F38\u5165\u5305\u540D\u7A31\u3002","Choose another location":"\u9078\u64C7\u53E6\u4E00\u500B\u4F4D\u7F6E","Choose file":"\u9078\u64C7\u6587\u4EF6","Choose folder":"\u9078\u64C7\u76EE\u9304","Choose from asset store":"\u5F9E\u8CC7\u7522\u5546\u5E97\u9078\u64C7","Choose one or more files":"\u9078\u64C7\u4E00\u500B\u6216\u591A\u500B\u6587\u4EF6","Choose the 3D model file (.glb) to use":"\u9078\u64C7\u8981\u4F7F\u7528\u76843D\u6A21\u578B\u6587\u4EF6(.glb)","Choose the JSON/LDtk file to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684 JSON /LDtk \u6587\u4EF6","Choose the associated scene:":"\u9078\u64C7\u95DC\u806F\u7684\u5834\u666F\uFF1A","Choose the atlas file (.atlas) to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684\u5716\u96C6\u6587\u4EF6 (.atlas)","Choose the audio file to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684\u97F3\u983B\u6587\u4EF6","Choose the bitmap font file (.fnt, .xml) to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684\u4F4D\u5716\u5B57\u9AD4\u6587\u4EF6(.fnt, .xml)","Choose the effect to apply":"\u9078\u64C7\u8981\u61C9\u7528\u7684\u6548\u679C","Choose the font file to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684\u5B57\u9AD4\u6587\u4EF6","Choose the image file to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684\u5716\u50CF\u6587\u4EF6","Choose the json file to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684json\u6587\u4EF6","Choose the scene":"\u9078\u64C7\u5834\u666F","Choose the spine json file to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684 spine json \u6587\u4EF6","Choose the tileset to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684\u74F7\u78DA","Choose the upload key to use to identify your Android App Bundle. In most cases you don't need to change this. Use the \"Old upload key\" if you used to publish your game as an APK and you activated Play App Signing before switching to Android App Bundle.":"\u9078\u64C7\u7528\u4E8E\u8B58\u5225\u60A8\u7684 Android \u61C9\u7528\u7A0B\u5E8F\u5305\u7684\u4E0A\u50B3\u5BC6\u9470\u3002\u5728\u5927\u591A\u6578\u60C5\u6CC1\u4E0B\uFF0C\u60A8\u4E0D\u9700\u8981\u66F4\u6539\u5B83\u3002 \u5982\u679C\u60A8\u66FE\u7D93\u4EE5APK\u5F62\u5F0F\u767C\u5E03\u60A8\u7684\u6E38\u6232\uFF0C\u5E76\u5728\u5207\u63DB\u5230 Android \u61C9\u7528\u7A0B\u5E8F\u5305\u4E4B\u524D\u6FC0\u6D3B\u4E86Play App\u7C3D\u540D\uFF0C\u8ACB\u4F7F\u7528\u201C\u820A\u4E0A\u50B3\u5BC6\u9470\u201D\u3002","Choose the video file to use":"\u9078\u64C7\u8981\u4F7F\u7528\u7684\u8996\u983B\u6587\u4EF6","Choose this plan":"\u9078\u64C7\u6B64\u8A08\u5283","Choose where to add the assets:":"\u9078\u64C7\u6DFB\u52A0\u7D20\u6750\u7684\u76EE\u6A19\u9EDE\uFF1A","Choose where to create the game":"\u9078\u64C7\u5728\u54EA\u91CC\u5275\u5EFA\u6E38\u6232","Choose where to create your projects":"\u9078\u64C7\u8981\u5728\u54EA\u91CC\u5275\u5EFA\u60A8\u7684\u9805\u76EE","Choose where to export the game":"\u9078\u64C7\u5C0E\u51FA\u6E38\u6232\u7684\u4F4D\u7F6E","Choose where to load the project from":"\u9078\u64C7\u5F9E\u4F55\u8655\u52A0\u8F09\u9805\u76EE","Choose where to save the project to":"\u9078\u64C7\u5C07\u9805\u76EE\u4FDD\u5B58\u5230\u7684\u4F4D\u7F6E","Choose your game art":"\u9078\u64C7\u60A8\u7684\u904A\u6232\u85DD\u8853","Circle":"\u5713","Claim":"\u8981\u6C42","Claim credits":"\u7D22\u53D6\u5B78\u5206","Claim this pack":"\u9818\u53D6\u6B64\u5305","Class":"\u985E\u5225","Classrooms":"\u6559\u5BA4","Clear all filters":"\u6E05\u9664\u6240\u6709\u904E\u6FFE\u5668","Clear search":"\u6E05\u9664\u641C\u5C0B","Clear the rendered image between each frame":"\u6E05\u9664\u6BCF\u5E40\u4E4B\u9593\u6E32\u67D3\u7684\u5716\u50CF","Click here to test the link.":"\u9EDE\u64CA\u9019\u91CC\u6E2C\u8A66\u93C8\u63A5\u3002","Click on an instance on the canvas or an object in the list to display their properties.":"\u9EDE\u64CA\u756B\u5E03\u4E0A\u7684\u5BE6\u4F8B\u6216\u5217\u8868\u4E2D\u7684\u7269\u4EF6\u4EE5\u986F\u793A\u5B83\u5011\u7684\u5C6C\u6027\u3002","Click on the tilemap grid to activate or deactivate hit boxes.":"\u9EDE\u64CA\u78DA\u584A\u5730\u5716\u7DB2\u683C\u4EE5\u6FC0\u6D3B\u6216\u505C\u7528\u64CA\u4E2D\u6846\u3002","Click to restart and install the update now.":"\u9EDE\u64CA\u4EE5\u91CD\u65B0\u555F\u52D5\u4E26\u7ACB\u5373\u5B89\u88DD\u66F4\u65B0\u3002","Close":"\u95DC\u9589","Close GDevelop":"\u95DC\u9589 GDevelop","Close Instances List Panel":"\u95DC\u9589\u5BE6\u4F8B\u5217\u8868\u9762\u677F","Close Layers Panel":"\u95DC\u9589\u5716\u5C64\u9762\u677F","Close Object Groups Panel":"\u95DC\u9589\u5C0D\u8C61\u7D44\u9762\u677F","Close Objects Panel":"\u95DC\u9589\u5C0D\u8C61\u9762\u677F","Close Project":"\u95DC\u9589\u9805\u76EE","Close Properties Panel":"\u95DC\u9589\u5C6C\u6027\u9762\u677F","Close all":"\u95DC\u9589\u5168\u90E8","Close all tasks":"\u95DC\u9589\u6240\u6709\u4EFB\u52D9","Close and launch a new preview":"\u95DC\u9589\u5E76\u555F\u52D5\u65B0\u9810\u89BD","Close others":"\u95DC\u9589\u5176\u5B83","Close project":"\u95DC\u9589\u9805\u76EE","Close task":"\u95DC\u9589\u4EFB\u52D9","Close the AI chat?":"\u95DC\u9589 AI \u804A\u5929\u55CE\uFF1F","Close the project?":"\u95DC\u9589\u5C08\u6848\u55CE\uFF1F","Close the project? Any changes that have not been saved will be lost.":"\u95DC\u9589\u9805\u76EE\uFF1F\u4EFB\u4F55\u672A\u4FDD\u5B58\u7684\u66F4\u6539\u90FD\u5C07\u4E1F\u5931\u3002","Co-op Multiplayer":"\u5408\u4F5C\u591A\u4EBA","Code":"\u4EE3\u78BC","Code editor Theme":"\u4EE3\u78BC\u7DE8\u8F2F\u5668\u4E3B\u984C","Collaborators":"\u5408\u4F5C\u8005","Collapse All":"\u5168\u90E8\u6298\u758A","Collect at least {0} USD to cash out your earnings":function(a){return["\u6536\u96C6\u81F3\u5C11 ",a("0")," \u7F8E\u5143\u4F86\u63D0\u53D6\u60A8\u7684\u6536\u76CA"]},"Collect feedback from players":"\u6536\u96C6\u73A9\u5BB6\u7684\u53CD\u994B","Collect game feedback":"\u6536\u96C6\u904A\u6232\u53CD\u994B","Collisions handling with the Physics engine":"\u7269\u7406\u5F15\u64CE\u78B0\u649E\u8655\u7406","Color":"\u984F\u8272","Color (text)":"\u984F\u8272 (\u6587\u672C)","Color:":"\u8272\u5F69\uFF1A","Column title":"\u5C08\u6B04\u6A19\u984C","Come back to latest version":"\u56DE\u5230\u6700\u65B0\u7248\u672C","Coming in {0}":function(a){return["\u5C07\u5728 ",a("0")," \u4E2D\u63A8\u51FA"]},"Command palette keyboard shortcut":"\u547D\u4EE4\u9762\u677F\u5FEB\u6377\u65B9\u5F0F","Comment":"\u8A3B\u89E3","Commercial License":"\u5546\u696D\u8A31\u53EF\u8B49","Community Discord Chat":"\u793E\u5340Discord\u804A\u5929","Community Forums":"\u793E\u5340\u8AD6\u58C7","Community list":"\u793E\u7FA4\u5217\u8868","Companies, studios and agencies":"\u516C\u53F8\u3001\u5DE5\u4F5C\u5BA4\u548C\u6A5F\u69CB","Company name or full name":"\u516C\u53F8\u540D\u7A31\u6216\u5168\u540D","Compare all the advantages of the different plans in this <0>big feature comparison table.":"\u5728\u9019\u500B <0>\u5927\u529F\u80FD\u6BD4\u8F03\u8868 \u4E2D\u6BD4\u8F03\u4E0D\u540C\u8A08\u5283\u7684\u6240\u6709\u512A\u9EDE\u3002","Complete all tasks to claim your badge":"Complete all tasks to claim your badge","Complete your payment on the web browser":"\u5728 web \u700F\u89BD\u5668\u4E0A\u5B8C\u6210\u60A8\u7684\u4ED8\u6B3E","Complete your purchase with the app store.":"\u4F7F\u7528\u61C9\u7528\u5546\u5E97\u5B8C\u6210\u60A8\u7684\u8CFC\u8CB7\u3002","Completely alone":"\u5B8C\u5168\u7368\u81EA\u4E00\u4EBA","Compressing before upload...":"\u4E0A\u50B3\u524D\u58D3\u7E2E\u2026\u2026","Condition":"\u689D\u4EF6","Conditions":"\u689D\u4EF6","Configuration":"\u914D\u7F6E","Configure the external events":"\u914D\u7F6E\u5916\u90E8\u4E8B\u4EF6","Configure the external layout":"\u914D\u7F6E\u5916\u90E8\u5E03\u5C40","Configure tile\u2019s hit boxes":"\u914D\u7F6E\u5716\u584A\u7684\u547D\u4E2D\u6846","Confirm":"\u78BA\u8A8D","Confirm the opening":"\u78BA\u8A8D\u6253\u958B","Confirm your email":"\u78BA\u8A8D\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6","Confirming your subscription":"\u78BA\u8A8D\u60A8\u7684\u8A02\u95B1","Congrats on finishing this course!":"Congrats on finishing this course!","Congratulations! You've finished this tutorial!":"\u606D\u559C\uFF01\u60A8\u5DF2\u7D93\u5B8C\u6210\u4E86\u9019\u500B\u6559\u7A0B\uFF01","Connected players":"\u5DF2\u9023\u63A5\u7684\u73A9\u5BB6","Considering the best approach":"\u8003\u616E\u6700\u4F73\u65B9\u6CD5","Considering the possibilities":"\u8003\u616E\u53EF\u80FD\u6027","Console":"\u63A7\u5236\u81FA","Consoles":"\u63A7\u5236\u81FA","Contact us at education@gdevelop.io if you want to update your plan":"\u5982\u679C\u60A8\u60F3\u66F4\u65B0\u60A8\u7684\u8A08\u5283\uFF0C\u8ACB\u806F\u7E6B\u6211\u5011\uFF1Aeducation@gdevelop.io","Contact:":"\u806F\u7CFB\u4EBA\uFF1A","Contains text":"\u5305\u542B\u6587\u5B57","Content":"\u5167\u5BB9","Content for Teachers":"\u9069\u5408\u6559\u5E2B\u7684\u5167\u5BB9","Continue":"\u7E7C\u7E8C","Continue anyway":"\u4ECD\u7136\u7E7C\u7E8C","Continue editing":"\u7E7C\u7E8C\u7DE8\u8F2F","Continue with Apple":"\u7E7C\u7E8C\u4F7F\u7528 Apple","Continue with Github":"\u7E7C\u7E8C\u4F7F\u7528 Github","Continue with Google":"\u7E7C\u7E8C\u4F7F\u7528 Google","Continue with Human Intelligence":"\u7E7C\u7E8C\u4F7F\u7528\u4EBA\u985E\u667A\u6167","Continue working":"\u7E7C\u7E8C\u5DE5\u4F5C","Contribute to GDevelop":"\u53C3\u8207GDevelop\u958B\u767C","Contributions":"\u8CA2\u737B","Contributor options":"\u8CA2\u737B\u8005\u9078\u9805","Contributors":"\u8CA2\u737B\u8005","Contributors, in no particular order:":"\u8CA2\u737B\u8005\uFF0C\u6392\u540D\u4E0D\u5206\u5148\u540E\uFF1A","Control a spaceship with a joystick.":"\u901A\u904E\u6416\u687F\u63A7\u5236\u592A\u7A7A\u8239\u3002","Control your spaceship with a joystick, while avoiding asteroids.":"\u4F7F\u7528\u64CD\u7E31\u6746\u63A7\u5236\u30B9\u30DA\u30FC\u30B9\u8239\uFF0C\u540C\u6642\u907F\u958B\u5C0F\u884C\u661F\u3002","Convert":"\u8F49\u63DB","Copied to clipboard!":"\u5DF2\u5FA9\u5236\u5230\u526A\u8CBC\u677F\uFF01","Copy":"\u5FA9\u5236","Copy active credentials to CSV":"\u5C07\u6D3B\u52D5\u6191\u8B49\u8907\u88FD\u5230 CSV","Copy all":"\u5168\u90E8\u5FA9\u5236","Copy all behaviors":"\u5FA9\u5236\u6240\u6709\u884C\u70BA","Copy all effects":"\u5FA9\u5236\u6240\u6709\u6548\u679C","Copy build link":"\u5FA9\u5236\u69CB\u5EFA\u93C8\u63A5","Copy email address":"\u8907\u88FD\u96FB\u5B50\u90F5\u4EF6\u5730\u5740","Copy file path":"\u5FA9\u5236\u6587\u4EF6\u8DEF\u5F91","Copy them into the project folder":"\u5C07\u5B83\u5011\u5FA9\u5236\u5230\u9805\u76EE\u6587\u4EF6\u593E\u4E2D","Copy {0} credentials to CSV":function(a){return["\u5C07 ",a("0")," \u6191\u8B49\u8907\u88FD\u5230 CSV"]},"Cordova":"Cordova","Could not activate purchase":"\u7121\u6CD5\u555F\u7528\u8CFC\u8CB7","Could not cancel your subscription":"\u7121\u6CD5\u53D6\u6D88\u60A8\u7684\u8A02\u95B1","Could not cash out":"\u7121\u6CD5\u9032\u884C\u73FE\u91D1\u63D0\u53D6","Could not change subscription":"\u7121\u6CD5\u66F4\u6539\u8A02\u95B1","Could not create the object":"\u7121\u6CD5\u5275\u5EFA\u5C0D\u8C61","Could not delete the build. Verify your internet connection or try again later.":"\u7121\u6CD5\u522A\u9664\u69CB\u5EFA\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","Could not find any resources matching your search.":"Could not find any resources matching your search.","Could not install the asset":"\u7121\u6CD5\u5B89\u88DD\u8CC7\u7522","Could not install the extension":"\u7121\u6CD5\u5B89\u88DD\u64F4\u5C55","Could not launch the preview":"\u7121\u6CD5\u555F\u52D5\u9810\u89BD","Could not load the project versions. Verify your internet connection or try again later.":"\u7121\u6CD5\u52A0\u8F09\u9805\u76EE\u7248\u672C\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","Could not purchase this product":"\u7121\u6CD5\u8CFC\u8CB7\u8A72\u7522\u54C1","Could not remove invitation":"\u7121\u6CD5\u79FB\u9664\u9080\u8ACB","Could not swap asset":"\u7121\u6CD5\u4EA4\u63DB\u8CC7\u7522","Could not transfer your credits":"\u7121\u6CD5\u8F49\u79FB\u60A8\u7684\u7A4D\u5206","Could not update the build name. Verify your internet connection or try again later.":"\u7121\u6CD5\u66F4\u65B0\u69CB\u5EFA\u540D\u7A31\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","Counter of the loop":"\u8FF4\u5708\u8A08\u6578\u5668","Country name":"\u570B\u5BB6\u7684\u540D\u5B57","Courses will be linked to your user account and available indefinitely. Log in or sign up to purchase this course or restore a previous purchase.":"\u8AB2\u7A0B\u5C07\u8207\u60A8\u7684\u7528\u6236\u5E33\u6236\u93C8\u63A5\uFF0C\u4E26\u4E14\u53EF\u7121\u9650\u671F\u4F7F\u7528\u3002\u767B\u9304\u6216\u8A3B\u518A\u4EE5\u8CFC\u8CB7\u6B64\u8AB2\u7A0B\u6216\u6062\u5FA9\u4E4B\u524D\u7684\u8CFC\u8CB7\u3002","Create":"\u5275\u5EFA","Create Extensions for GDevelop":"\u70BAGDevelop\u5275\u5EFA\u64F4\u5C55","Create a 3D explosion when the player is hit":"\u7576\u73A9\u5BB6\u53D7\u5230\u653B\u64CA\u6642\u5275\u5EFA\u4E00\u500B3D\u7206\u70B8","Create a GDevelop account to save your changes and keep personalizing your game":"\u5275\u5EFA GDevelop \u5E33\u6236\u4EE5\u4FDD\u5B58\u66F4\u6539\u4E26\u7E7C\u7E8C\u81EA\u5B9A\u7FA9\u904A\u6232","Create a certificate signing request that will be asked by Apple to generate a full certificate.":"\u5275\u5EFA\u4E00\u500B\u8B49\u66F8\u7C3D\u540D\u8ACB\u6C42\uFF0CApple \u5C07\u8981\u6C42\u8A72\u8ACB\u6C42\u751F\u6210\u5B8C\u6574\u7684\u8B49\u66F8\u3002","Create a game":"\u5275\u5EFA\u904A\u6232","Create a leaderboard":"\u5275\u5EFA\u6392\u884C\u699C","Create a new extension":"\u5275\u5EFA\u4E00\u500B\u65B0\u7684\u64F4\u5C55","Create a new game":"\u5275\u5EFA\u65B0\u904A\u6232","Create a new group":"\u5275\u5EFA\u65B0\u7FA4\u7D44","Create a new instance on the scene (will be at position 0;0):":"\u5728\u5834\u666F\u4E2D\u5275\u5EFA\u4E00\u500B\u65B0\u5BE6\u4F8B (\u5C07\u4F4D\u4E8E\u4F4D\u7F6E 0;0):","Create a new project":"\u5275\u5EFA\u4E00\u500B\u65B0\u9805\u76EE","Create a new room":"\u5275\u5EFA\u4E00\u500B\u65B0\u623F\u9593","Create a new variant":"Create a new variant","Create a project first to add assets from the asset store":"\u9996\u5148\u5275\u5EFA\u4E00\u500B\u9805\u76EE\uFF0C\u5E76\u5F9E\u5546\u5E97\u6DFB\u52A0\u7D20\u6750","Create a project first to add this asset":"\u9996\u5148\u5275\u5EFA\u4E00\u500B\u9805\u76EE\u4F86\u6DFB\u52A0\u8A72\u8CC7\u7522","Create a room and drag and drop members in it.":"\u5275\u5EFA\u4E00\u500B\u623F\u9593\u5E76\u5C07\u6210\u54E1\u62D6\u653E\u5230\u5176\u4E2D\u3002","Create a signing request":"\u5275\u5EFA\u7C3D\u540D\u8ACB\u6C42","Create a simple flying game with obstacles to avoid":"\u5275\u5EFA\u4E00\u500B\u6709\u969C\u7919\u7269\u8981\u907F\u514D\u7684\u7C21\u55AE\u98DB\u884C\u904A\u6232","Create account":"\u5275\u5EFA\u5E33\u6236","Create accounts":"\u5275\u5EFA\u5E33\u6236","Create an API key on the [App Store Connect API page](https://appstoreconnect.apple.com/access/integrations/api). Give it a name and **administrator** rights. Download the \"Auth Key\" file and upload it here along with the required information you can find on the page.":"\u5728 [App Store Connect API \u9801\u9762](https://appstoreconnect.apple.com/access/integrations/api) \u4E0A\u5275\u5EFA API \u5BC6\u9470\u3002\u70BA\u5176\u6307\u5B9A\u540D\u7A31\u548C**\u7BA1\u7406\u54E1**\u6B0A\u9650\u3002\u4E0B\u8F09\u201C\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470\u201D\u6587\u4EF6\u5E76\u5C07\u5176\u8207\u9801\u9762\u4E0A\u627E\u5230\u7684\u6240\u9700\u4FE1\u606F\u4E00\u8D77\u4E0A\u50B3\u5230\u6B64\u8655\u3002","Create an Account":"\u5275\u5EFA\u4E00\u500B\u5E33\u6236","Create an account":"\u5275\u5EFA\u4E00\u500B\u5E33\u6236","Create an account or login first to export your game using online services.":"\u9996\u5148\u5275\u5EFA\u4E00\u500B\u5E33\u6236\u6216\u767B\u9304\u4EE5\u4F7F\u7528\u5728\u7DDA\u670D\u52D9\u5C0E\u51FA\u60A8\u7684\u6E38\u6232\u3002","Create an account to activate your purchase!":"\u5275\u5EFA\u4E00\u500B\u5E33\u6236\u4EE5\u555F\u7528\u60A8\u7684\u8CFC\u8CB7\uFF01","Create an account to register your games and to get access to metrics collected anonymously, like the number of daily players and retention of the players after a few days.":"\u5275\u5EFA\u4E00\u500B\u5E33\u6236\u4F86\u6CE8\u518A\u6E38\u6232\u5E76\u8A2A\u554F\u533F\u540D\u6536\u96C6\u7684\u6307\u6A19\uFF0C\u4F8B\u5982\u6BCF\u65E5\u73A9\u5BB6\u6578\u548C\u5E7E\u5929\u540E\u7684\u73A9\u5BB6\u7559\u5B58\u91CF\u3002","Create an account to store your project online.":"\u5275\u5EFA\u4E00\u500B\u5E33\u6236\u5728\u7DDA\u5B58\u5132\u60A8\u7684\u9805\u76EE\u3002","Create and Publish a Fling game":"\u5275\u5EFA\u5E76\u767C\u5E03 Fling \u6E38\u6232","Create iOS certificate":"\u5275\u5EFA iOS \u8B49\u66F8","Create installation file":"\u5275\u5EFA\u5B89\u88DD\u6587\u4EF6","Create my account":"\u5275\u5EFA\u6211\u7684\u5E33\u6236","Create new folder...":"\u5275\u5EFA\u65B0\u8CC7\u6599\u593E\u2026\u2026","Create new game":"\u5275\u5EFA\u65B0\u904A\u6232","Create new leaderboards now":"\u7ACB\u5373\u5275\u5EFA\u65B0\u7684\u6392\u884C\u699C","Create or search for new extensions":"\u5275\u5EFA\u6216\u641C\u7D22\u65B0\u64F4\u5C55","Create package for Android":"\u70BA Android \u5275\u5EFA\u8EDF\u4EF6\u5305","Create package for iOS":"\u70BA iOS \u5275\u5EFA\u8EDF\u4EF6\u5305","Create scene <0>{scene_name}. <1>Click to open it.":function(a){return["\u5EFA\u7ACB\u5834\u666F <0>",a("scene_name"),"\u3002 <1>\u9EDE\u64CA\u4EE5\u6253\u958B\u5B83\u3002"]},"Create section":"\u5275\u5EFA\u90E8\u5206","Create students":"\u5275\u5EFA\u5B78\u751F","Create with Jfxr":"\u4F7F\u7528 Jfxr \u5275\u5EFA","Create with Piskel":"\u7528 Piskel \u5275\u5EFA","Create with Yarn":"\u7528 Yarn \u5275\u5EFA","Create your Apple certificate for iOS":"\u5275\u5EFA\u9069\u7528\u4E8E iOS \u7684 Apple \u8B49\u66F8","Create your Auth Key to send your game to App Store Connect":"\u5275\u5EFA\u60A8\u7684\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470\u4EE5\u5C07\u60A8\u7684\u6E38\u6232\u767C\u9001\u5230 App Store Connect","Create your certificate and \"provisioning profile\" thanks to your Apple Developer account. We'll guide you with a step by step process.":"\u901A\u904E\u60A8\u7684 Apple \u958B\u767C\u8005\u5E33\u6236\u5275\u5EFA\u60A8\u7684\u8B49\u66F8\u548C\u201C\u914D\u7F6E\u6587\u4EF6\u201D\u3002\u6211\u5011\u5C07\u6307\u5C0E\u60A8\u9010\u6B65\u9032\u884C\u3002","Create your first project using one of our templates or start from scratch.":"\u4F7F\u7528\u6211\u5011\u7684\u6A21\u677F\u4E4B\u4E00\u5275\u5EFA\u60A8\u7684\u7B2C\u4E00\u500B\u9805\u76EE\u6216\u5F9E\u96F6\u958B\u59CB\u3002","Create your game's first leaderboard":"\u5275\u5EFA\u60A8\u7684\u6E38\u6232\u7684\u7B2C\u4E00\u500B\u6392\u884C\u699C","Created objects":"\u5275\u5EFA\u5C0D\u8C61","Created on {0}":function(a){return["\u5728 ",a("0")," \u4E0A\u5275\u5EFA"]},"Creator profile":"\u5275\u4F5C\u8005\u7C21\u4ECB","Credit out":"\u4FE1\u7528","Credits available: {0}":function(a){return["\u53EF\u7528\u7A4D\u5206: ",a("0")]},"Credits given":"\u7D66\u4E88\u7684\u5B78\u5206","Credits will be linked to your user account. Log-in or sign-up to purchase them!":"\u7A4D\u5206\u5C07\u93C8\u63A5\u5230\u60A8\u7684\u7528\u6236\u5E33\u6236\u3002\u767B\u9304\u6216\u6CE8\u518A\u5373\u53EF\u8CFC\u8CB7\uFF01","Current build online":"\u7576\u524D\u5728\u7DDA\u7248\u672C","Current plan":"\u7576\u524D\u8A08\u5283","Custom CSS":"\u81EA\u5B9A\u7FA9 CSS","Custom css value cannot exceed {LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH} characters.":function(a){return["\u81EA\u8A02css\u503C\u4E0D\u5F97\u8D85\u904E",a("LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH"),"\u500B\u5B57\u5143\u3002"]},"Custom display":"\u81EA\u5B9A\u7FA9\u986F\u793A","Custom object name":"\u81EA\u8A02\u7269\u4EF6\u540D\u7A31","Custom object variant":"\u81EA\u8A02\u7269\u4EF6\u8B8A\u9AD4","Custom object variant properties":"\u81EA\u8A02\u7269\u4EF6\u8B8A\u9AD4\u5C6C\u6027","Custom objects can't contain both 2D or 3D.<0/>Please select either 2D instances or 3D instances.":"\u81EA\u8A02\u7269\u4EF6\u4E0D\u80FD\u540C\u6642\u5305\u542B 2D \u548C 3D\u3002<0/>\u8ACB\u9078\u64C7 2D \u5BE6\u4F8B\u6216 3D \u5BE6\u4F8B\u3002","Custom size":"\u81EA\u5B9A\u7FA9\u5C3A\u5BF8","Custom upload key (not available yet)":"\u81EA\u5B9A\u7FA9\u4E0A\u50B3\u5BC6\u9470(\u5C1A\u4E0D\u53EF\u7528)","Cut":"\u526A\u5207","Dark (colored)":"\u6697\u8272(\u8457\u8272)","Dark (plain)":"\u6697\u8272(\u5E73\u539F)","Date":"\u65E5\u671F","Date from which entries are taken into account: {0}":function(a){return["\u53C3\u8CFD\u4F5C\u54C1\u88AB\u8003\u616E\u7684\u65E5\u671F\uFF1A ",a("0")]},"Days":"\u5929","Dead":"\u6B7B\u4EA1","Dealing with data integration from external sources":"\u8655\u7406\u4F86\u81EA\u5916\u90E8\u4F86\u6E90\u7684\u6578\u64DA\u96C6\u6210","Debugger":"\u8ABF\u8A66\u5668","Debugger is starting...":"\u8ABF\u8A66\u5668\u6B63\u5728\u555F\u52D5\u2026\u2026","Declare <0><1/>{variableName} as <2><3/>{0} with <4>{1}":function(a){return["\u5C07 <0><1/>",a("variableName")," \u8072\u660E\u70BA <2><3/>",a("0")," \u4F7F\u7528 <4>",a("1"),""]},"Declare your app on App Store Connect and then register a key so that your game can be automatically uploaded when built. It's perfect to try your game with testers on Apple TestFlight.":"\u5728 App Store Connect \u4E0A\u8072\u660E\u60A8\u7684\u61C9\u7528\u7A0B\u5E8F\uFF0C\u7136\u540E\u6CE8\u518A\u4E00\u500B\u5BC6\u9470\uFF0C\u4EE5\u4FBF\u60A8\u7684\u6E38\u6232\u5728\u69CB\u5EFA\u6642\u53EF\u4EE5\u81EA\u52D5\u4E0A\u50B3\u3002\u8207 Apple TestFlight \u4E0A\u7684\u6E2C\u8A66\u4EBA\u54E1\u4E00\u8D77\u5617\u8A66\u60A8\u7684\u6E38\u6232\u662F\u5B8C\u7F8E\u7684\u9078\u64C7\u3002","Default":"\u9ED8\u8A8D\u8A2D\u7F6E","Default (visible)":"\u9810\u8A2D\uFF08\u53EF\u898B\uFF09","Default camera behavior":"\u9810\u8A2D\u76F8\u6A5F\u884C\u70BA","Default height (in pixels)":"\u9ED8\u8A8D\u9AD8\u5EA6 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Default name for created objects":"\u5275\u5EFA\u5C0D\u8C61\u7684\u9ED8\u8A8D\u540D\u7A31","Default orientation":"\u9ED8\u8A8D\u65B9\u5411","Default size":"\u9ED8\u8A8D\u5927\u5C0F","Default skin":"\u9ED8\u8A8D\u76AE\u819A","Default upload key (recommended)":"\u9ED8\u8A8D\u4E0A\u50B3\u5BC6\u9470(\u63A8\u85A6)","Default value":"\u9ED8\u8A8D\u503C","Default value of string variables":"\u5B57\u4E32\u8B8A\u6578\u7684\u9810\u8A2D\u503C","Default visibility":"\u9810\u8A2D\u53EF\u898B\u6027","Default width (in pixels)":"\u9ED8\u8A8D\u5BEC\u5EA6 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Define custom password":"\u5B9A\u7FA9\u81EA\u8A02\u5BC6\u78BC","Delete":"\u522A\u9664","Delete Entry":"\u522A\u9664\u689D\u76EE","Delete Leaderboard":"\u522A\u9664\u6392\u884C\u699C","Delete account":"\u522A\u9664\u5E33\u6236","Delete build":"\u522A\u9664\u69CB\u5EFA","Delete collision mask":"\u522A\u9664\u78B0\u649E\u906E\u7F69","Delete game":"\u522A\u9664\u904A\u6232","Delete my account":"\u522A\u9664\u6211\u7684\u5E33\u6236","Delete object":"\u522A\u9664\u5C0D\u8C61","Delete option":"\u522A\u9664\u9078\u9805","Delete project":"\u522A\u9664\u9805\u76EE","Delete score {0} from {1}":function(a){return["\u5F9E ",a("1")," \u4E2D\u522A\u9664\u5F97\u5206 ",a("0")]},"Delete selection":"\u522A\u9664\u9078\u5340","Delete the selected event(s)":"\u522A\u9664\u6240\u9078\u4E8B\u4EF6","Delete the selected instances from the scene":"\u5F9E\u5834\u666F\u4E2D\u522A\u9664\u9078\u5B9A\u5BE6\u4F8B","Delete the selected resource":"\u522A\u9664\u6240\u9078\u8CC7\u6E90","Delete when out of particles":"\u7576\u7C92\u5B50\u6D88\u5931\u6642\u522A\u9664","Delete {gameName}":function(a){return["\u522A\u9664 ",a("gameName")]},"Dependencies":"\u4F9D\u8CF4\u95DC\u7CFB","Dependencies allow to add additional libraries in the exported games. NPM dependencies will be included for Electron builds (Windows, macOS, Linux) and Cordova dependencies will be included for Cordova builds (Android, iOS). Note that this is intended for usage in JavaScript events only. If you are only using standard events, you should not worry about this.":"\u4F9D\u8CF4\u95DC\u7CFB\u5141\u8A31\u5728\u5C0E\u51FA\u7684\u6E38\u6232\u4E2D\u6DFB\u52A0\u5176\u4ED6\u5EAB\u3002 NPM\u4F9D\u8CF4\u95DC\u7CFB\u5C07\u5305\u542B\u5728Electron\u7248\u672C(Windows\uFF0CmacOS\uFF0CLinux)\u4E2D\uFF0C\u800CCordova\u4F9D\u8CF4\u95DC\u7CFB\u5C07\u5305\u542B\u5728Cordova\u7248\u672C(Android\uFF0CiOS)\u4E2D\u3002\u8ACB\u6CE8\u610F\uFF0C\u9019\u50C5\u9069\u7528\u4E8EJavaScript\u4E8B\u4EF6\u3002\u5982\u679C\u50C5\u4F7F\u7528\u6A19\u6E96\u4E8B\u4EF6\uFF0C\u5247\u4E0D\u5FC5\u70BA\u6B64\u64D4\u5FC3\u3002","Dependency type":"\u4F9D\u8CF4\u985E\u578B","Deprecated":"\u5DF2\u68C4\u7528","Deprecated action":"\u5DF2\u68C4\u7528\u7684\u64CD\u4F5C","Deprecated actions and conditions warning":"\u5DF2\u68C4\u7528\u7684\u64CD\u4F5C\u548C\u689D\u4EF6\u8B66\u544A","Deprecated condition":"\u5DF2\u68C4\u7528\u7684\u689D\u4EF6","Deprecated:":"\u5DF2\u68C4\u7528\uFF1A","Deprecation notice":"\u68C4\u7528\u901A\u77E5","Depth":"\u6DF1\u5EA6","Description":"\u63CF\u8FF0","Description (markdown supported)":"\u63CF\u8FF0 (\u652F\u6301markdown)","Description (will be prefixed by \"Compare\" or \"Return\")":"\u63CF\u8FF0\uFF08\u5C07\u4EE5\u300C\u6BD4\u8F03\u300D\u6216\u300C\u8FD4\u56DE\u300D\u70BA\u524D\u7DB4\uFF09","Deselect All":"\u53D6\u6D88\u5168\u9078","Desktop":"\u684C\u9762","Desktop & Mobile landscape":"\u684C\u9762\u548C\u79FB\u52D5\u6A6B\u5C4F\u6A21\u5F0F","Desktop (Windows, macOS and Linux) icon":"\u684C\u9762 (Windows, macOS \u548C Linux) \u5716\u6A19","Desktop Full HD":"\u684C\u9762\u5168\u9AD8\u6E05\u6A21\u5F0F","Desktop builds":"\u684C\u9762\u7248\u672C","Details":"\u7D30\u7BC0","Developer options":"\u958B\u767C\u8005\u9078\u9805","Development (debugging & testing on a registered iPhone/iPad)":"\u958B\u767C (\u5728\u5DF2\u6CE8\u518A\u7684 iPhone/iPad \u4E0A\u8ABF\u8A66\u548C\u6E2C\u8A66)","Development tools required":"\u9700\u8981\u958B\u767C\u5DE5\u5177","Device orientation (for mobile)":"\u8A2D\u5099\u5B9A\u4F4D\uFF08\u9069\u7528\u4E8E\u79FB\u52D5\u8A2D\u5099\uFF09","Diagnostic errors found":"\u767C\u73FE\u8A3A\u65B7\u932F\u8AA4","Diagnostic report":"\u8A3A\u65B7\u5831\u544A","Dialog backdrop click behavior":"\u5C0D\u8A71\u6846\u80CC\u666F\u9EDE\u64CA\u884C\u70BA","Dialogs":"\u5C0D\u8A71\u6846","Did it work?":"\u9019\u6709\u6548\u55CE\uFF1F","Did you forget your password?":"\u60A8\u5FD8\u8A18\u4E86\u60A8\u7684\u5BC6\u78BC\u55CE\uFF1F","Different objects":"\u4E0D\u540C\u7684\u7269\u9AD4","Dimension":"\u7DAD\u5EA6","Direction":"\u65B9\u5411","Direction #{i}":function(a){return["\u65B9\u5411 #",a("i")]},"Disable GDevelop splash at startup":"\u555F\u52D5\u6642\u7981\u7528GDevelop splash","Disable effects/lighting in the editor":"\u5728\u7DE8\u8F2F\u5668\u4E2D\u7981\u7528\u6548\u679C/\u7167\u660E","Disable login buttons in leaderboard":"\u7981\u7528\u6392\u884C\u699C\u4E2D\u7684\u767B\u9304\u6309\u9215","Discard changes and open events":"\u653E\u68C4\u66F4\u6539\u5E76\u6253\u958B\u4E8B\u4EF6","Discard changes?":"\u653E\u68C4\u66F4\u6539\uFF1F","Discord":"Discord","Discord server, e.g: https://discord.gg/...":"Discord \u670D\u52D9\u5668\uFF0C\u4F8B\u5982: https://discord.gg/...","Discord user not found":"\u672A\u627E\u5230 Discord \u7528\u6236","Discord username":"Discord \u7528\u6236\u540D","Discord username sync failed":"Discord \u7528\u6236\u540D\u540C\u6B65\u5931\u6557","Discover this bundle":"\u67E5\u770B\u6B64\u5305","Display GDevelop logo at startup (in exported game)":"\u555F\u52D5\u6642\u986F\u793A GDevelop \u5FBD\u6A19(\u5C0E\u51FA\u6E38\u6232)","Display GDevelop watermark after the game is loaded (in exported game)":"\u6E38\u6232\u52A0\u8F09\u540E\u986F\u793A GDevelop \u6C34\u5370(\u5728\u5C0E\u51FA\u6E38\u6232\u4E2D)","Display What's New when a new version is launched (recommended)":"\u986F\u793A\u65B0\u7248\u672C\u555F\u52D5\u6642\u7684 \"\u65B0\u589E\u529F\u80FD\" (\u63A8\u85A6)","Display as time":"\u986F\u793A\u70BA\u6642\u9593","Display assignment operators in Events Sheets":"\u5728\u4E8B\u4EF6\u8868\u4E2D\u986F\u793A\u8CE6\u503C\u904B\u7B97\u7B26","Display both 2D and 3D objects (default)":"\u540C\u6642\u986F\u793A 2D \u548C 3D \u5C0D\u8C61 (\u9ED8\u8A8D)","Display effects/lighting in the editor":"\u5728\u7DE8\u8F2F\u5668\u4E2D\u986F\u793A\u6548\u679C/\u7167\u660E","Display object thumbnails in Events Sheets":"\u5728\u4E8B\u4EF6\u8868\u4E2D\u986F\u793A\u5C0D\u8C61\u7684\u7E2E\u7565\u5716","Display profiling information in scene editor":"\u5728\u5834\u666F\u7DE8\u8F2F\u5668\u4E2D\u986F\u793A\u5206\u6790\u4FE1\u606F","Display save reminder after significant changes in project":"\u5728\u9805\u76EE\u4E2D\u767C\u751F\u91CD\u5927\u8B8A\u66F4\u5F8C\u986F\u793A\u4FDD\u5B58\u63D0\u9192","Displayed score":"\u986F\u793A\u5206\u6578","Distance":"\u8DDD\u96E2","Do nothing":"\u4EC0\u4E48\u90FD\u4E0D\u505A","Do you have a Patreon? Ko-fi? Paypal?":"\u60A8\u6709\u4E00\u500BPatreon\u55CE\uFF1FKo-fi\uFF1FPaypal\uFF1F","Do you have game development experience?":"\u60A8\u6709\u6E38\u6232\u958B\u767C\u7D93\u9A57\u55CE\uFF1F","Do you need any help?":"\u60A8\u9700\u8981\u4EFB\u4F55\u5E6B\u52A9\u55CE\uFF1F","Do you really want to permanently delete your account?":"\u4F60\u771F\u7684\u60F3\u6C38\u4E45\u522A\u9664\u4F60\u7684\u5E33\u6236\u55CE\uFF1F","Do you want to continue?":"\u4F60\u60F3\u7E7C\u7E8C\u55CE\uFF1F","Do you want to quit the customization? All your changes will be lost.":"\u60A8\u60F3\u9000\u51FA\u81EA\u5B9A\u7FA9\u55CE\uFF1F\u60A8\u6240\u6709\u7684\u8B8A\u66F4\u5C07\u4E1F\u5931\u3002","Do you want to refactor your project?":"\u4F60\u60F3\u91CD\u69CB\u4F60\u7684\u9805\u76EE\u55CE\uFF1F","Do you wish to continue?":"\u4F60\u60F3\u7E7C\u7E8C\u55CE\uFF1F","Documentation":"\u6587\u6A94","Don't allow":"\u4E0D\u5141\u8A31","Don't have an account yet?":"\u9084\u6C92\u6709\u4E00\u500B\u5E33\u865F\uFF1F","Don't play the animation when the object is far from the camera or hidden (recommended for performance)":"\u7576\u5C0D\u8C61\u9060\u96E2\u76F8\u6A5F\u6216\u96B1\u85CF\u6642\u4E0D\u8981\u64AD\u653E\u52D5\u756B (\u6027\u80FD\u63D0\u5347\u63A8\u85A6)","Don't preload":"\u4E0D\u8981\u9810\u52A0\u8F09","Don't save this project now":"\u73FE\u5728\u4E0D\u4FDD\u5B58\u6B64\u9805\u76EE","Don't show this warning again":"\u4E0D\u8981\u518D\u986F\u793A\u6B64\u8B66\u544A","Donate link":"\u6350\u8D08\u93C8\u63A5","Done":"\u5B8C\u6210","Done!":"\u5B8C\u6210\uFF01","Download":"\u4E0B\u8F09","Download (APK)":"\u4E0B\u8F09 (APK)","Download (Android App Bundle)":"\u4E0B\u8F09 (Android App Bundle)","Download GDevelop desktop version":"\u4E0B\u8F09GDevelop\u684C\u9762\u7248\u672C","Download a copy":"\u4E0B\u8F09\u526F\u672C","Download log files":"\u4E0B\u8F09\u65E5\u5FD7\u6587\u4EF6","Download pack sounds":"\u4E0B\u8F09\u5305\u8072\u97F3","Download the Instant Game archive":"\u4E0B\u8F09\u5373\u6642\u6E38\u6232\u5B58\u6A94","Download the certificate file (.cer) generated by Apple and upload it here. GDevelop will keep it securely stored.":"\u4E0B\u8F09 Apple \u751F\u6210\u7684\u8B49\u66F8\u6587\u4EF6 (.cer) \u5E76\u5728\u6B64\u8655\u4E0A\u50B3\u3002GDevelop \u5C07\u5B89\u5168\u5730\u5B58\u5132\u5B83\u3002","Download the compressed game and resources":"\u4E0B\u8F09\u58D3\u7E2E\u6E38\u6232\u548C\u8CC7\u6E90","Download the exported game":"\u4E0B\u8F09\u5C0E\u51FA\u7684\u6E38\u6232","Download the latest version of GDevelop to check out this example!":"\u4E0B\u8F09 GDevelop \u7684\u6700\u65B0\u7248\u672C\u4EE5\u67E5\u770B\u6B64\u793A\u4F8B\uFF01","Download the request file":"\u4E0B\u8F09\u8ACB\u6C42\u6587\u4EF6","Downloading game resources...":"\u6B63\u5728\u4E0B\u8F09\u8CC7\u6E90","Draft created:":"\u8349\u7A3F\u5DF2\u5275\u5EFA\uFF1A","Drag here to add to the scene":"\u5728\u6B64\u62D6\u62FD\u4EE5\u6DFB\u52A0\u5230\u5834\u666F","Draw":"\u7E6A\u5236","Draw the shapes relative to the object position on the scene":"\u7E6A\u5236\u5834\u666F\u4E2D\u76F8\u5C0D\u4E8E\u5C0D\u8C61\u4F4D\u7F6E\u7684\u5F62\u72C0","Duplicate":"\u91CD\u5FA9","Duplicate <0>{duplicatedObjectName} as <1>{object_name} in scene <2>{scene_name}.":function(a){return["\u5728\u5834\u666F <2>",a("scene_name")," \u4E2D\u5C07 <0>",a("duplicatedObjectName")," \u8907\u88FD\u70BA <1>",a("object_name"),"\u3002"]},"Duplicate selection":"\u91CD\u5FA9\u9078\u64C7","Duration":"\u671F\u9650","Each character, player, obstacle, background, item, etc. is an object. Objects are the building blocks of your game.":"\u6BCF\u500B\u89D2\u8272\u3001\u73A9\u5BB6\u3001\u969C\u7919\u7269\u3001\u80CC\u666F\u3001\u7269\u54C1\u7B49\u90FD\u662F\u5C0D\u8C61\u3002\u5C0D\u8C61\u662F\u60A8\u904A\u6232\u7684\u57FA\u790E\u3002","Earn an exclusive badge":"\u7372\u5F97\u5C08\u5C6C\u5FBD\u7AE0","Earn {0}":function(a){return["\u7372\u5F97 ",a("0")]},"Ease of use":"\u6613\u4E8E\u4F7F\u7528","Easiest":"\u6700\u7C21\u55AE","Edit":"\u7DE8\u8F2F","Edit Grid Options":"\u7DE8\u8F2F\u7DB2\u683C\u9078\u9805","Edit Object Variables":"\u7DE8\u8F2F\u5C0D\u8C61\u8B8A\u91CF","Edit behaviors":"\u7DE8\u8F2F\u884C\u70BA","Edit build name":"\u7DE8\u8F2F\u69CB\u5EFA\u540D\u7A31","Edit children":"\u7DE8\u8F2F\u5B50\u9805","Edit collision masks":"\u7DE8\u8F2F\u78B0\u649E\u906E\u7F69","Edit comment":"\u7DE8\u8F2F\u8A55\u8AD6","Edit details":"\u7DE8\u8F2F\u8A73\u60C5","Edit effects":"\u7DE8\u8F2F\u7279\u6548","Edit global variables":"\u7DE8\u8F2F\u5168\u5C40\u8B8A\u91CF","Edit group":"\u7DE8\u8F2F\u7D44","Edit layer effects...":"\u7DE8\u8F2F\u5716\u5C64\u7279\u6548...","Edit layer...":"\u7DE8\u8F2F\u5716\u5C64...","Edit loading screen":"\u7DE8\u8F2F\u52A0\u8F09\u5C4F\u5E55","Edit my profile":"\u7DE8\u8F2F\u6211\u7684\u500B\u4EBA\u8CC7\u6599","Edit name":"\u7DE8\u8F2F\u540D\u7A31","Edit object":"\u7DE8\u8F2F\u5C0D\u8C61","Edit object behaviors...":"\u7DE8\u8F2F\u5C0D\u8C61\u884C\u70BA...","Edit object effects...":"\u7DE8\u8F2F\u5C0D\u8C61\u7279\u6548...","Edit object group...":"\u7DE8\u8F2F\u5C0D\u8C61\u7D44...","Edit object variables":"\u7DE8\u8F2F\u5C0D\u8C61\u8B8A\u91CF","Edit object variables...":"\u7DE8\u8F2F\u5C0D\u8C61\u8B8A\u91CF","Edit object {0}":function(a){return["\u7DE8\u8F2F\u5C0D\u8C61 ",a("0")]},"Edit object...":"\u7DE8\u8F2F\u5C0D\u8C61","Edit or add variables...":"\u7DE8\u8F2F\u6216\u65B0\u589E\u8B8A\u91CF...","Edit parameters...":"\u7DE8\u8F2F\u53C3\u6578...","Edit points":"\u7DE8\u8F2F\u9EDE","Edit scene properties":"\u7DE8\u8F2F\u5834\u666F\u5C6C\u6027","Edit scene variables":"\u7DE8\u8F2F\u5834\u666F\u8B8A\u91CF","Edit student":"\u7DE8\u8F2F\u5B78\u751F","Edit the default variant":"\u7DE8\u8F2F\u9810\u8A2D\u8B8A\u9AD4","Edit this action events":"\u7DE8\u8F2F\u6B64\u52D5\u4F5C\u4E8B\u4EF6","Edit this behavior":"\u7DE8\u8F2F\u6B64\u884C\u70BA","Edit this condition events":"\u7DE8\u8F2F\u6B64\u689D\u4EF6\u4E8B\u4EF6","Edit variables...":"\u7DE8\u8F2F\u8B8A\u91CF...","Edit with Jfxr":"\u4F7F\u7528 Jfxr \u7DE8\u8F2F","Edit with Piskel":"\u4F7F\u7528 Piskel \u7DE8\u8F2F","Edit with Yarn":"\u7528 Yarn \u7DE8\u8F2F","Edit your GDevelop profile":"\u7DE8\u8F2F\u60A8\u7684 GDevelop \u8CC7\u6599","Edit your profile and fill your discord username to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"\u7DE8\u8F2F\u60A8\u7684\u500B\u4EBA\u8CC7\u6599\u4E26\u586B\u5BEB\u60A8\u7684 Discord \u7528\u6236\u540D\u4EE5\u5728 [GDevelop Discord](https://discord.gg/gdevelop) \u4E0A\u7372\u5F97\u60A8\u7684\u89D2\u8272\u3002","Edit your profile to pick a username!":"\u7DE8\u8F2F\u60A8\u7684\u500B\u4EBA\u8CC7\u6599\uFF0C\u9078\u64C7\u4E00\u500B\u7528\u6236\u540D\uFF01","Edit {0}":function(a){return["\u7DE8\u8F2F ",a("0")]},"Edit {objectName}":function(a){return["\u7DE8\u8F2F ",a("objectName")]},"Editing the game.":"\u7DE8\u8F2F\u904A\u6232\u3002","Editor":"\u7DE8\u8F2F","Editor without transitions":"\u6C92\u6709\u5207\u63DB\u7684\u7DE8\u8F2F\u5668","Education curriculum and resources":"\u6559\u80B2\u8AB2\u7A0B\u548C\u8CC7\u6E90","Educational":"\u6559\u80B2","Effect name:":"\u6548\u679C\u540D\u7A31:","Effects":"\u7279\u6548","Effects cannot have empty names":"\u6548\u679C\u4E0D\u80FD\u6709\u7A7A\u540D\u7A31","Effects create visual changes to the object.":"\u7279\u6548\u6703\u5C0D\u5C0D\u8C61\u9032\u884C\u8996\u89BA\u66F4\u6539\u3002","Either this game is not registered or you are not its owner, so you cannot see its builds.":"\u8981\u4E48\u9019\u500B\u6E38\u6232\u6C92\u6709\u6CE8\u518A\uFF0C\u8981\u4E48\u4F60\u4E0D\u662F\u5B83\u7684\u6240\u6709\u8005\uFF0C\u6240\u4EE5\u4F60\u770B\u4E0D\u5230\u5B83\u7684\u69CB\u5EFA\u3002","Else":"\u5176\u4ED6","Else if":"\u5176\u4ED6\u5982\u679C","Email":"\u96FB\u5B50\u90F5\u4EF6","Email sent to {0}, waiting for validation...":function(a){return["\u96FB\u5B50\u90F5\u4EF6\u5DF2\u767C\u9001\u81F3 ",a("0"),"\uFF0C\u7B49\u5F85\u9A57\u8B49..."]},"Email verified":"\u96FB\u5B50\u90F5\u4EF6\u5DF2\u9A57\u8B49","Embedded file name":"\u5D4C\u5165\u6587\u4EF6\u540D","Embedded help and tutorials":"\u5D4C\u5165\u5F0F\u5E6B\u52A9\u548C\u6559\u7A0B","Empty free text":"\u7A7A\u7684\u81EA\u7531\u6587\u672C","Empty group":"Empty group","Empty project":"\u7A7A\u767D\u5C08\u6848","Enable \"Close project\" shortcut ({0}) to close preview window":function(a){return["\u555F\u7528\u300C\u95DC\u9589\u9805\u76EE\u300D\u5FEB\u6377\u9375 (",a("0"),") \u4EE5\u95DC\u9589\u9810\u89BD\u7A97\u53E3"]},"Enable ads and revenue sharing on the game page":"\u5728\u904A\u6232\u9801\u9762\u555F\u7528\u5EE3\u544A\u548C\u6536\u76CA\u5206\u4EAB","Enabled":"\u5DF2\u555F\u7528","End of jam":"jam \u7D50\u675F","End opacity (0-255)":"\u900F\u660E\u5EA6","Enforce only auto-generated player names":"\u50C5\u5F37\u5236\u57F7\u884C\u81EA\u52D5\u751F\u6210\u7684\u73A9\u5BB6\u540D\u7A31","Ensure that you are connected to internet and that the URL used is correct, then try again.":"\u8ACB\u78BA\u4FDD\u60A8\u5DF2\u9023\u63A5\u5230\u4E92\u806F\u7DB2\uFF0C\u5E76\u78BA\u4FDD\u6240\u4F7F\u7528\u7684 URL \u6B63\u78BA\uFF0C\u7136\u540E\u518D\u8A66\u4E00\u6B21\u3002","Ensure this scene has the same objects, behaviors and variables as the ones used in these events.":"\u78BA\u4FDD\u8A72\u5834\u666F\u5177\u6709\u8207\u9019\u4E9B\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u7684\u76F8\u540C\u7684\u5C0D\u8C61\u3001\u884C\u70BA\u548C\u8B8A\u91CF\u3002","Ensure you don't have any typo in your username and that you have joined the GDevelop Discord server.":"\u78BA\u4FDD\u60A8\u7684\u7528\u6236\u540D\u6C92\u6709\u4EFB\u4F55\u62FC\u5BEB\u932F\u8AA4\uFF0C\u5E76\u4E14\u60A8\u5DF2\u52A0\u5165 GDevelop Discord \u670D\u52D9\u5668\u3002","Enter a query and press Search to find matches across all event sheets in your project.":"\u8F38\u5165\u67E5\u8A62\u4E26\u6309\u4E0B\u641C\u5C0B\u4EE5\u5728\u60A8\u7684\u5C08\u6848\u4E2D\u7684\u6240\u6709\u4E8B\u4EF6\u8868\u4E2D\u67E5\u627E\u5339\u914D\u9805\u3002","Enter a version in the game properties.":"\u5728\u6E38\u6232\u5C6C\u6027\u4E2D\u8F38\u5165\u4E00\u500B\u7248\u672C\u3002","Enter the effect name":"\u8F38\u5165\u6548\u679C\u540D\u7A31","Enter the expression parameters":"\u8F38\u5165\u8868\u9054\u5F0F\u53C3\u6578","Enter the leaderboard id":"\u8F38\u5165\u6392\u884C\u699C ID","Enter the leaderboard id as a text or an expression":"\u8F38\u5165\u6392\u884C\u699CID\u4F5C\u70BA\u6587\u672C\u6216\u8868\u9054\u5F0F","Enter the name of an object.":"\u8F38\u5165\u4E00\u500B\u5C0D\u8C61\u7684\u540D\u7A31","Enter the name of the object":"\u8F38\u5165\u5C0D\u8C61\u7684\u540D\u7A31","Enter the parameter name (mandatory)":"\u8F38\u5165\u53C3\u6578\u540D\u7A31(\u5F37\u5236\u6027)","Enter the property name":"\u8F38\u5165\u5C6C\u6027\u540D","Enter the sentence that will be displayed in the events sheet":"\u8F38\u5165\u5C07\u6703\u5728\u4E8B\u4EF6\u8868\u4E2D\u88AB\u986F\u793A\u7684\u53E5\u5B50","Enter the text to be displayed":"\u8F38\u5165\u8981\u986F\u793A\u7684\u6587\u672C","Enter the text to be displayed by the object":"\u8F38\u5165\u8981\u7531\u5C0D\u8C61\u986F\u793A\u7684\u6587\u672C","Enter your Discord username":"\u8F38\u5165\u60A8\u7684 Discord \u7528\u6236\u540D","Enter your code here":"\u5728\u6B64\u8655\u8F38\u5165\u60A8\u7684\u4EE3\u78BC","Erase":"\u64E6\u9664","Erase {existingInstanceCount} instance(s) in scene {scene_name}.":function(a){return["\u5728\u5834\u666F",a("scene_name"),"\u4E2D\u522A\u9664",a("existingInstanceCount"),"\u500B\u5BE6\u4F8B\u3002"]},"Error":"\u932F\u8AA4","Error loading Auth Keys.":"\u52A0\u8F09\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470\u6642\u51FA\u932F\u3002","Error loading certificates.":"\u52A0\u8F09\u8B49\u66F8\u6642\u51FA\u932F\u3002","Error retrieving the examples":"\u7372\u53D6\u793A\u4F8B\u6642\u51FA\u932F","Error retrieving the extensions":"\u7372\u53D6\u64F4\u5C55\u6642\u51FA\u932F","Error when claiming asset pack":"\u9818\u53D6\u8CC7\u7522\u5305\u6642\u51FA\u932F","Error while building of the game. Check the logs of the build for more details.":"\u69CB\u5EFA\u6E38\u6232\u6642\u51FA\u932F\u3002\u6AA2\u67E5\u69CB\u5EFA\u65E5\u5FD7\u4EE5\u7372\u53D6\u66F4\u591A\u8A73\u7D30\u4FE1\u606F\u3002","Error while building the game. Check the logs of the build for more details.":"\u69CB\u5EFA\u6E38\u6232\u6642\u51FA\u932F\u3002\u6AA2\u67E5\u69CB\u5EFA\u65E5\u5FD7\u4EE5\u7372\u53D6\u66F4\u591A\u8A73\u7D30\u4FE1\u606F\u3002","Error while building the game. Try again later. Your internet connection may be slow or one of your resources may be corrupted.":"\u69CB\u5EFA\u6E38\u6232\u6642\u51FA\u932F\u3002\u7A0D\u540E\u518D\u8A66\u3002\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u901F\u5EA6\u53EF\u80FD\u5F88\u6162\uFF0C\u6216\u8005\u60A8\u7684\u8CC7\u6E90\u4E4B\u4E00\u53EF\u80FD\u5DF2\u640D\u58DE\u3002","Error while checking update":"\u6AA2\u67E5\u66F4\u65B0\u6642\u51FA\u932F","Error while compressing the game.":"\u58D3\u7E2E\u6E38\u6232\u6642\u51FA\u932F\u3002","Error while downloading the game resources. Check your internet connection and that all resources of the game are valid in the Resources editor.":"\u4E0B\u8F09\u6E38\u6232\u8CC7\u6E90\u6642\u51FA\u932F\u3002\u6AA2\u67E5\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\uFF0C\u78BA\u4FDD\u6E38\u6232\u7684\u6240\u6709\u8CC7\u6E90\u5728\u8CC7\u6E90\u7DE8\u8F2F\u5668\u4E2D\u5747\u6709\u6548\u3002","Error while exporting the game.":"\u5C0E\u51FA\u6E38\u6232\u6642\u51FA\u932F\u3002","Error while loading builds":"\u52A0\u8F09\u69CB\u5EFA\u6642\u51FA\u932F","Error while loading the Play section. Verify your internet connection or try again later.":"\u52A0\u8F09\u64AD\u653E\u90E8\u5206\u6642\u51FA\u932F\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u5F8C\u518D\u8A66\u3002","Error while loading the Spine Texture Atlas resource ( {0} ).":function(a){return["\u52A0\u8F09 Spine \u7D0B\u7406\u5716\u96C6\u8CC7\u6E90 ( ",a("0")," ) \u6642\u51FA\u932F\u3002"]},"Error while loading the Spine resource ( {0} ).":function(a){return["\u52A0\u8F09 Spine \u8CC7\u6E90 ( ",a("0")," ) \u6642\u51FA\u932F\u3002"]},"Error while loading the asset. Verify your internet connection or try again later.":"\u52A0\u8F09\u8CC7\u7522\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","Error while loading the collaborators. Verify your internet connection or try again later.":"\u52A0\u8F09\u5408\u4F5C\u8005\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","Error while loading the marketing plans. Verify your internet connection or try again later.":"\u52A0\u8F09\u71DF\u92B7\u8A08\u5283\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Error while uploading the game. Check your internet connection or try again later.":"\u4E0A\u50B3\u6E38\u6232\u6642\u51FA\u932F\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Escape key behavior when editing an parameter inline":"\u7DE8\u8F2F\u5167\u806F\u53C3\u6578\u6642\u8F49\u7FA9\u5BC6\u9470\u884C\u70BA","Evaluating the game logic":"\u8A55\u4F30\u904A\u6232\u908F\u8F2F","Event sentences":"\u4E8B\u4EF6\u53E5\u5B50","Events":"\u4E8B\u4EF6","Events Sheet":"\u6D3B\u52D5\u8868","Events analysis":"\u4E8B\u4EF6\u5206\u6790","Events define the rules of a game.":"\u4E8B\u4EF6\u5B9A\u7FA9\u4E86\u6E38\u6232\u898F\u5247\u3002","Events functions extension":"\u4E8B\u4EF6\u529F\u80FD\u64F4\u5C55","Events that will be run at every frame (roughly 60 times per second), after the events from the events sheet of the scene.":"\u5728\u5834\u666F\u4E8B\u4EF6\u8868\u4E2D\u7684\u4E8B\u4EF6\u4E4B\u540E\uFF0C\u5C07\u5728\u6BCF\u5E40 (\u6BCF\u79D2\u7D0460\u6B21) \u4E0A\u904B\u884C\u7684\u4E8B\u4EF6\u3002","Events that will be run at every frame (roughly 60 times per second), before the events from the events sheet of the scene.":"\u5728\u5834\u666F\u4E8B\u4EF6\u8868\u4E2D\u7684\u4E8B\u4EF6\u4E4B\u524D\uFF0C\u5C07\u5728\u6BCF\u5E40 (\u6BCF\u79D2\u5927\u7D0460\u6B21) \u4E0A\u904B\u884C\u4E8B\u4EF6\u3002","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, after the events from the events sheet.":"\u5728\u4E8B\u4EF6\u8868\u4E0A\u7684\u4E8B\u4EF6\u4E4B\u540E\uFF0C\u5C07\u6703\u5728\u6BCF\u4E00\u5E40\uFF08\u5927\u7D04\u6BCF\u79D260\u6B21\uFF09\u70BA\u6BCF\u500B\u6709\u6B64\u884C\u70BA\u9644\u8457\u7684\u5C0D\u8C61\u800C\u904B\u884C\u7684\u4E8B\u4EF6\u3002","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, before the events from the events sheet are launched.":"\u5728\u4E8B\u4EF6\u8868\u4E0A\u7684\u4E8B\u4EF6\u52A0\u8F09\u4E4B\u524D\uFF0C\u5C07\u6703\u5728\u6BCF\u4E00\u5E40\uFF08\u5927\u7D04\u6BCF\u79D260\u6B21\uFF09\u70BA\u6BCF\u500B\u6709\u6B64\u884C\u70BA\u9644\u8457\u7684\u5C0D\u8C61\u800C\u904B\u884C\u7684\u4E8B\u4EF6\u3002","Events that will be run at every frame (roughly 60 times per second), for every object, after the events from the events sheet.":"\u5728\u4E8B\u4EF6\u8868\u4E2D\u7684\u4E8B\u4EF6\u4E4B\u540E\uFF0C\u5C0D\u4E8E\u6BCF\u500B\u5C0D\u8C61\uFF0C\u5C07\u5728\u6BCF\u4E00\u5E40(\u5927\u7D04\u6BCF\u79D2 60 \u6B21)\u904B\u884C\u7684\u4E8B\u4EF6\u3002","Events that will be run once when a scene is about to be unloaded from memory. The previous scene that was paused will be resumed after this.":"\u7576\u4E00\u500B\u5834\u666F\u8981\u5F9E\u5167\u5B58\u4E2D\u88AB\u5378\u8F09\u6642\u5C07\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6\u3002 \u5728\u6B64\u4E4B\u524D\u88AB\u66AB\u505C\u7684\u5834\u666F\u5C07\u5728\u6B64\u4E4B\u540E\u6062\u5FA9\u3002","Events that will be run once when a scene is paused (another scene is run on top of it).":"\u7576\u4E00\u500B\u5834\u666F\u88AB\u66AB\u505C\u6642\u5C07\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6 ( \u53E6\u4E00\u500B\u5834\u666F\u5728\u6B64\u5834\u666F\u4E0A\u904B\u884C) \u3002","Events that will be run once when a scene is resumed (after it was previously paused).":"\u7576\u4E00\u500B\u5834\u666F\u88AB\u6062\u5FA9\u6642( \u4E4B\u524D\u88AB\u66AB\u505C\u540E) \u5C07\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6\u3002","Events that will be run once when a scene of the game is loaded, before the scene events.":"\u6B64\u4E8B\u4EF6\u5C07\u6703\u5728\u4E00\u500B\u6E38\u6232\u5834\u666F\u52A0\u8F09\u6642\u57F7\u884C\u4E00\u6B21\uFF0C\u5148\u4E8E\u8A72\u5834\u666F\u7684\u4E8B\u4EF6\u3002","Events that will be run once when the behavior is deactivated on an object (step events won't be run until the behavior is activated again).":"\u7576\u5728\u4E00\u500B\u5C0D\u8C61\u4E0A\u505C\u7528\u8A72\u884C\u70BA\u6642\uFF0C\u5C07\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6(\u5728\u518D\u6B21\u6FC0\u6D3B\u8A72\u884C\u70BA\u4E4B\u524D\uFF0C\u4E0D\u6703\u904B\u884C\u6B65\u9032\u4E8B\u4EF6) \u3002","Events that will be run once when the behavior is re-activated on an object (after it was previously deactivated).":"\u7576\u5728\u4E00\u500B\u5C0D\u8C61\u4E0A\u91CD\u65B0\u6FC0\u6D3B\u8A72\u884C\u70BA\u6642(\u4E4B\u524D\u5DF2\u88AB\u505C\u7528)\uFF0C\u5C07\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6\u3002","Events that will be run once when the first scene of the game is loaded, before any other events.":"\u5728\u52A0\u8F09\u6E38\u6232\u7684\u7B2C\u4E00\u500B\u5834\u666F\u6642\uFF0C\u5728\u4EFB\u4F55\u5176\u5B83\u4E8B\u4EF6\u4E4B\u524D\uFF0C\u5C07\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6\u3002","Events that will be run once, after the object is removed from the scene and before it is entirely removed from memory.":"\u5C0D\u8C61\u5F9E\u5834\u666F\u4E2D\u88AB\u79FB\u9664\u4E4B\u540E\uFF0C\u5E76\u5F9E\u5167\u5B58\u4E2D\u88AB\u5168\u90E8\u522A\u9664\u4E4B\u524D\uFF0C\u5C07\u6703\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6\u3002","Events that will be run once, when an object is created with this behavior being attached to it.":"\u7576\u4E00\u500B\u5C0D\u8C61\u6709\u6B64\u884C\u70BA\u9644\u8457\u800C\u88AB\u5275\u9020\u6642\uFF0C\u5C07\u6703\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6\u3002","Events that will be run once, when an object is created.":"\u5275\u5EFA\u5C0D\u8C61\u6642\u5C07\u904B\u884C\u4E00\u6B21\u7684\u4E8B\u4EF6\u3002","Events that will be run when the preview is being hot-reloaded.":"\u9810\u89BD\u71B1\u52A0\u8F09\u6642\u5C07\u904B\u884C\u7684\u4E8B\u4EF6\u3002","Every animation from the GLB file is already in the list.":"GLB \u6587\u4EF6\u4E2D\u7684\u6BCF\u500B\u52D5\u756B\u90FD\u5DF2\u5728\u5217\u8868\u4E2D\u3002","Every animation from the Spine file is already in the list.":"Spine \u6587\u4EF6\u4E2D\u7684\u6BCF\u500B\u52D5\u756B\u90FD\u5DF2\u5728\u5217\u8868\u4E2D\u3002","Every child of an array must be the same type.":"\u6BCF\u500B\u6578\u7D44\u7684\u5B50\u9805\u5FC5\u9808\u985E\u578B\u76F8\u540C\u3002","Ex: $":"\u4F8B\u5982\uFF1A$","Ex: coins":"\u4F8B\u5982\uFF1A\u786C\u5E63","Examining the behaviors":"\u6AA2\u67E5\u884C\u70BA","Example: Check if the object is flashing.":"\u793A\u4F8B\uFF1A\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u6B63\u5728\u9583\u720D\u3002","Example: Equipped shield name":"\u793A\u4F8B\uFF1A\u88DD\u5099\u7684\u8B77\u76FE\u540D\u7A31","Example: Flash the object":"\u793A\u4F8B\uFF1A\u8B93\u5C0D\u8C61\u9583\u720D","Example: Is flashing":"\u793A\u4F8B\uFF1A\u6B63\u5728\u9583\u720D","Example: Make the object flash for 5 seconds.":"\u793A\u4F8B\uFF1A\u4F7F\u5C0D\u8C61\u9583\u720D5\u79D2\u9418\u3002","Example: Remaining life":"\u793A\u4F8B\uFF1A\u5269\u4F59\u751F\u547D","Example: Return the name of the shield equipped by the player.":"\u793A\u4F8B\uFF1A\u8FD4\u56DE\u73A9\u5BB6\u88DD\u5099\u7684\u76FE\u724C\u540D\u7A31\u3002","Example: Return the number of remaining lives for the player.":"\u793A\u4F8B\uFF1A\u8FD4\u56DE\u73A9\u5BB6\u7684\u5269\u4F59\u751F\u547D\u6578\u3002","Example: Use \"New Action Name\" instead.":"\u7BC4\u4F8B\uFF1A\u4F7F\u7528 \"\u65B0\u64CD\u4F5C\u540D\u7A31\" \u66FF\u4EE3\u3002","Examples ({0})":function(a){return["\u793A\u4F8B (",a("0"),")"]},"Exchange your earnings with GDevelop credits, and use them on the GDevelop store":"\u5C07\u60A8\u7684\u6536\u5165\u514C\u63DB\u6210 GDevelop \u7A4D\u5206\uFF0C\u4E26\u5728 GDevelop \u5546\u5E97\u4E2D\u4F7F\u7528\u5B83\u5011","Exclude attribution requirements":"\u6392\u9664\u6B78\u56E0\u8981\u6C42","Existing behaviors":"\u73FE\u6709\u884C\u70BA","Existing effects":"\u73FE\u6709\u6548\u679C","Existing parameters":"\u73FE\u6709\u53C3\u6578","Existing properties":"\u73FE\u6709\u5C6C\u6027","Exit without saving":"\u4E0D\u4FDD\u5B58\u9000\u51FA","Expand All to Level":"\u5168\u90E8\u5C55\u958B\u5230\u7D1A\u5225","Expand all sub folders":"\u5C55\u958B\u6240\u6709\u5B50\u6587\u4EF6\u593E","Expand inner area with parent":"\u64F4\u5C55\u5167\u90E8\u5340\u57DF\u8207\u7236\u5C0D\u8C61","Expected parent event":"\u9810\u671F\u7684\u7236\u4E8B\u4EF6","Experiment with the leaderboard colors using the playground":"\u4F7F\u7528\u6E38\u6A02\u5834\u4E0A\u7684\u6392\u884C\u699C\u984F\u8272\u9032\u884C\u5BE6\u9A57","Experimental":"\u5BE6\u9A57\u6027","Experimental extension":"\u5BE6\u9A57\u6027\u64F4\u5C55","Expert":"\u5C08\u5BB6","Explain and give some examples of what can be achieved with this extension.":"\u89E3\u91CB\u5E76\u8209\u4F8B\u8AAA\u660E\u4F7F\u7528\u6B64\u64F4\u5C55\u53EF\u4EE5\u5BE6\u73FE\u4EC0\u4E48\u3002","Explain what the behavior is doing to the object. Start with a verb when possible.":"\u89E3\u91CB\u884C\u70BA\u5C0D\u5C0D\u8C61\u505A\u4E86\u4EC0\u4E48\u3002\u76E1\u53EF\u80FD\u4EE5\u52D5\u8A5E\u958B\u982D\u3002","Explanation after an object is installed from the store":"\u5F9E\u5546\u5E97\u5B89\u88DD\u5C0D\u8C61\u540E\u7684\u8AAA\u660E","Explore":"\u63A2\u7D22","Explore by category":"\u6309\u985E\u5225\u700F\u89BD","Exploring the game.":"\u63A2\u7D22\u904A\u6232\u3002","Export (web, iOS, Android)...":"\u5C0E\u51FA (\u7DB2\u7D61\u3001iOS\u3001Android)\u2026\u2026","Export HTML5 (external websites)":"\u532F\u51FA HTML5\uFF08\u5916\u90E8\u7DB2\u7AD9\uFF09","Export as a HTML5 game":"\u5C0E\u51FA\u70BA HTML5 \u6E38\u6232","Export as a pack":"\u5C0E\u51FA\u70BA\u5305","Export as assets":"\u5C0E\u51FA\u70BA\u8CC7\u7522","Export extension":"\u5C0E\u51FA\u64F4\u5C55","Export failed. Check that the output folder is accessible and that you have the necessary permissions.":"\u532F\u51FA\u5931\u6557\u3002\u8ACB\u6AA2\u67E5\u8F38\u51FA\u8CC7\u6599\u593E\u662F\u5426\u53EF\u8A2A\u554F\uFF0C\u4EE5\u53CA\u60A8\u662F\u5426\u64C1\u6709\u5FC5\u8981\u7684\u6B0A\u9650\u3002","Export game":"\u5C0E\u51FA\u6E38\u6232","Export in progress...":"\u6B63\u5728\u5C0E\u51FA\u2026\u2026","Export name":"\u5C0E\u51FA\u540D\u7A31","Export the scene objects to a file and learn more about the submission process in the documentation.":"\u5C07\u5834\u666F\u5C0D\u8C61\u5C0E\u51FA\u5230\u6587\u4EF6\u5E76\u5728\u6587\u6A94\u4E2D\u4E86\u89E3\u6709\u95DC\u63D0\u4EA4\u904E\u7A0B\u7684\u66F4\u591A\u4FE1\u606F\u3002","Export to a file":"\u5C0E\u51FA\u5230\u6587\u4EF6","Export your game":"\u5C0E\u51FA\u4F60\u7684\u6E38\u6232","Export {0} assets":function(a){return["\u5C0E\u51FA ",a("0")," \u8CC7\u7522"]},"Exporting...":"\u6B63\u5728\u5C0E\u51FA...","Exports":"\u5C0E\u51FA","Expression":"\u8868\u9054\u5F0F","Expression and condition":"\u8868\u9054\u5F0F\u548C\u689D\u4EF6","Expression used to sort instances before iterating. It will be evaluated for each instance.":"\u7528\u65BC\u6392\u5E8F\u5BE6\u4F8B\u7684\u8868\u9054\u5F0F\uFF0C\u5728\u8FED\u4EE3\u4E4B\u524D\u6703\u5C0D\u6BCF\u500B\u5BE6\u4F8B\u9032\u884C\u8A55\u4F30\u3002","Extend":"\u64F4\u5C55","Extend Featuring":"\u64F4\u5C55\u529F\u80FD","Extend width or height to fill screen (without cropping the game area)":"\u64F4\u5C55\u5BEC\u5EA6\u6216\u9AD8\u5EA6\u4EE5\u586B\u6EFF\u87A2\u5E55\uFF08\u4E0D\u88C1\u526A\u904A\u6232\u5340\u57DF\uFF09","Extension":"\u64F4\u5145","Extension (storing the custom object)":"\u64F4\u5C55\uFF08\u5B58\u5132\u81EA\u5B9A\u7FA9\u7269\u4EF6\uFF09","Extension containing the new function":"\u5305\u542B\u65B0\u51FD\u6578\u7684\u64F4\u5C55","Extension global variables":"\u64F4\u5C55\u5168\u5C40\u8B8A\u6578","Extension name":"Extension name","Extension scene variables":"\u64F4\u5C55\u5834\u666F\u8B8A\u6578","Extension update":"\u64F4\u5C55\u66F4\u65B0","Extension updates":"\u64F4\u5C55\u66F4\u65B0","Extension variables":"\u64F4\u5C55\u8B8A\u91CF","Extensions":"\u64F4\u5C55","Extensions ({0})":function(a){return["\u64F4\u5C55 (",a("0"),")"]},"Extensions search":"\u64F4\u5C55\u641C\u7D22","External events":"\u5916\u90E8\u4E8B\u4EF6","External layout":"\u5916\u90E8\u5E03\u5C40","External layout name":"\u5916\u90E8\u5E03\u5C40\u540D\u7A31","External layouts":"\u5916\u90E8\u5E03\u5C40","Extra source files (experimental)":"\u984D\u5916\u7684\u6E90\u6A94\u6848\uFF08\u5BE6\u9A57\uFF09","Extract":"\u63D0\u53D6","Extract Events to a Function":"\u63D0\u53D6\u4E8B\u4EF6\u7D66\u51FD\u6578","Extract as a custom object":"\u63D0\u53D6\u70BA\u81EA\u8A02\u7269\u4EF6","Extract as an external layout":"\u63D0\u53D6\u70BA\u5916\u90E8\u5E03\u5C40","Extract the events in a function":"\u5F9E\u51FD\u6578\u4E2D\u63D0\u53D6\u4E8B\u4EF6","Extreme score must be equal or higher than {extremeAllowedScoreMin}.":function(a){return["\u6975\u7AEF\u5206\u6578\u5FC5\u9808\u7B49\u4E8E\u6216\u5927\u4E8E ",a("extremeAllowedScoreMin"),"\u3002"]},"Extreme score must be lower than {extremeAllowedScoreMax}.":function(a){return["\u6975\u7AEF\u5206\u6578\u5FC5\u9808\u5C0F\u4E8E ",a("extremeAllowedScoreMax"),"\u3002"]},"FPS:":"\u5E40\u7387","Facebook":"\u81C9\u66F8","Facebook Games":"Facebook\u6E38\u6232","Facebook Instant Games":"Facebook \u5373\u6642\u6E38\u6232","False":"\u5426","False (not checked)":"\u5426\uFF08\u4E0D\u9078\u4E2D\uFF09","Far plane distance":"\u9060\u5E73\u9762\u8DDD\u96E2","Featuring already active":"\u529F\u80FD\u5DF2\u7D93\u6FC0\u6D3B","Feedbacks":"\u53CD\u994B","Field of view (in degrees)":"\u8996\u91CE (\u4EE5\u5EA6\u6578\u70BA\u55AE\u4F4D)","File":"\u6587\u4EF6","File history":"\u6587\u4EF6\u6B77\u53F2\u8A18\u9304","File name":"\u6587\u4EF6\u540D","File(s) from your device":"\u4F86\u81EA\u60A8\u8A2D\u5099\u7684\u6587\u4EF6 (s)","Fill":"\u586B\u5145","Fill automatically":"\u81EA\u52D5\u586B\u5145","Fill bucket":"\u586B\u6EFF\u6876\u5B50","Fill color":"\u586B\u5145\u984F\u8272","Fill opacity (0-255)":"\u586B\u5145\u4E0D\u900F\u660E\u5EA6 (0-255)","Fill proportionally":"\u6309\u6BD4\u4F8B\u586B\u5145","Filter the logs by group":"\u6309\u7D44\u7BE9\u9078\u65E5\u5FD7","Filters":"\u904E\u6FFE\u5668","Find how to implement the most common game mechanics and more":"\u67E5\u627E\u5982\u4F55\u5BE6\u65BD\u6700\u5E38\u898B\u7684\u6E38\u6232\u6A5F\u5236\u4EE5\u53CA\u66F4\u591A","Find the complete documentation on everything":"\u67E5\u627E\u6240\u6709\u5167\u5BB9\u7684\u5B8C\u6574\u6587\u6A94","Find the substitles in your language in the setting of each video.":"\u5728\u6BCF\u500B\u5F71\u7247\u7684\u8A2D\u5B9A\u4E2D\u5C0B\u627E\u60A8\u8A9E\u8A00\u7684\u5B57\u5E55\u3002","Find your finished game on the \u201CBuild\u201D section. Or restart the tutorial by clicking on the card.":"\u5728\u201C\u69CB\u5EFA\u201D\u90E8\u5206\u627E\u5230\u60A8\u5B8C\u6210\u7684\u6E38\u6232\u3002\u6216\u8005\u901A\u904E\u55AE\u64CA\u5361\u7247\u91CD\u65B0\u555F\u52D5\u6559\u7A0B\u3002","Finish and close":"\u5B8C\u6210\u4E26\u95DC\u9589","Finished":"\u5DF2\u5B8C\u6210","Fire a Bullet":"\u5C04\u51FA\u5B50\u5F48","Fire bullets in an Asteroids game.":"\u5728\u5C0F\u884C\u661F\u904A\u6232\u4E2D\u767C\u5C04\u5B50\u5F48\u3002","Fire bullets in this Asteroids game. Get ready for a Star Wars show.":"\u5728\u9019\u500B\u5C0F\u884C\u661F\u904A\u6232\u4E2D\u767C\u5C04\u5B50\u5F48\u3002\u6E96\u5099\u597D\u53C3\u52A0\u661F\u969B\u5927\u6230\u7684\u8868\u6F14\u3002","First (before other files)":"\u9996\u5148 (\u5728\u5176\u5B83\u6587\u4EF6\u4E4B\u524D)","First editor":"\u7B2C\u4E00\u500B\u7DE8\u8F2F\u5668","First name":"\u540D\u5B57","Fit content to window":"\u4F7F\u5167\u5BB9\u9069\u5408\u7A97\u53E3","Fit to content":"\u9069\u5408\u5167\u5BB9","Fix those issues to get the campaign up!":"\u89E3\u6C7A\u9019\u4E9B\u554F\u984C\u4EE5\u555F\u52D5\u6D3B\u52D5\uFF01","Flip along Z axis":"\u6CBF Z \u8EF8\u7FFB\u8F49","Flip horizontally":"\u6C34\u5E73\u7FFB\u8F49","Flip vertically":"\u5782\u76F4\u7FFB\u8F49","Flow of particles (particles/seconds)":"\u7C92\u5B50\u7684\u6D41\u52D5 (\u7C92\u5B50/\u79D2)","Folders":"\u6587\u4EF6\u593E","Follow":"\u8FFD\u96A8","Follow GDevelop on socials and check your profile to get some free credits!":"Follow GDevelop on socials and check your profile to get some free credits!","Follow a character with scrolling background.":"\u8DDF\u96A8\u5177\u6709\u6EFE\u52D5\u80CC\u666F\u7684\u89D2\u8272\u3002","Follow this Castlevania-type character with the camera, while the background scrolls.":"Follow this Castlevania-type character with the camera, while the background scrolls.","Font":"\u5B57\u9AD4","Font resource":"\u5B57\u9AD4\u8CC7\u6E90","For Education":"\u7528\u4E8E\u6559\u80B2","For Individuals":"\u7528\u4E8E\u500B\u4EBA","For Teams":"\u7528\u4E8E\u5718\u968A","For a given video resource, only one video will be played in memory and displayed. If you put this object multiple times on the scene, all the instances will be displaying the exact same video (with the same timing and paused/played/stopped state).":"\u4E00\u500B\u6307\u5B9A\u7684\u8996\u983B\u6E90\uFF0C\u53EA\u6709\u4E00\u500B\u8996\u983B\u6703\u5728\u5167\u5B58\u4E2D\u986F\u793A\u3002\u5982\u679C\u60A8\u591A\u6B21\u5728\u5834\u666F\u4E0A\u653E\u7F6E\uFF0C\u6240\u6709\u7684\u5BE6\u4F8B\u90FD\u6703\u7528\u540C\u6A23\u7684\u66AB\u505C\uFF0C\u64AD\u653E\uFF0C\u505C\u6B62\u72C0\u614B\u64AD\u653E","For a pixel type font, you must disable the Smooth checkbox related to your texture in the game resources to disable anti-aliasing.":"\u5C0D\u4E8E\u50CF\u7D20\u985E\u578B\u7684\u5B57\u9AD4\uFF0C\u60A8\u5FC5\u9808\u5728\u6E38\u6232\u8CC7\u6E90\u4E2D\u7981\u7528\u8207\u60A8\u7684\u7D0B\u7406\u76F8\u95DC\u7684\u5E73\u6ED1\u5FA9\u9078\u6846\uFF0C\u624D\u80FD\u7981\u7528\u6297\u92F8\u9F52\u3002","For most games, the default automatic loading of resources will be fine. This action should only be used when trying to avoid loading screens from appearing between scenes.":"\u5C0D\u4E8E\u5927\u591A\u6578\u6E38\u6232\u4F86\u8AAA\uFF0C\u9ED8\u8A8D\u81EA\u52D5\u52A0\u8F09\u8CC7\u6E90\u5C31\u53EF\u4EE5\u4E86\u3002\u50C5\u7576\u5617\u8A66\u907F\u514D\u5728\u5834\u666F\u4E4B\u9593\u51FA\u73FE\u52A0\u8F09\u5C4F\u5E55\u6642\u624D\u61C9\u4F7F\u7528\u6B64\u64CD\u4F5C\u3002","For teachers and educators having the GDevelop Education subscription. Ready to use resources for teaching.":"\u5C0D\u4E8E\u6709GDevelop \u6559\u80B2\u8A02\u95B1\u7684\u6559\u5E2B\u548C\u6559\u80B2\u5DE5\u4F5C\u8005\u4F86\u8AAA\uFF0C\u53EF\u4EE5\u6E96\u5099\u597D\u4F7F\u7528\u76F8\u95DC\u8CC7\u6E90\u9032\u884C\u6559\u5B78\u3002","For the 3D change to take effect, close and reopen all currently opened scenes.":"\u8981\u4F7F 3D \u66F4\u6539\u751F\u6548\uFF0C\u8ACB\u95DC\u9589\u5E76\u91CD\u65B0\u6253\u958B\u6240\u6709\u7576\u524D\u6253\u958B\u7684\u5834\u666F\u3002","For the lifecycle functions to be executed, you need the extension to be used in the game, either by having at least one action, condition or expression used, or a behavior of the extension added to an object. Otherwise, the extension won't be included in the game.":"\u5C0D\u4E8E\u8981\u57F7\u884C\u7684\u751F\u547D\u5468\u671F\u51FD\u6578\uFF0C\u4F60\u9700\u8981\u5728\u6E38\u6232\u4E2D\u4F7F\u7528\u8A72\u64F4\u5C55\uFF0C\u65B9\u6CD5\u662F\uFF1A\u5C0D\u52A0\u5230\u4E00\u500B\u5C0D\u8C61\u4E0A\u7684\u67D0\u500B\u64F4\u5C55\uFF0C\u81F3\u5C11\u4F7F\u7528\u4E00\u500B\u52D5\u4F5C\u3001\u689D\u4EF6\u3001\u8868\u9054\u5F0F\uFF0C\u6216\u8005\u4E00\u500B\u884C\u70BA\u3002\u5426\u5247\uFF0C\u8A72\u64F4\u5C55\u5C07\u4E0D\u6703\u88AB\u5305\u542B\u5230\u6E38\u6232\u4E2D\u3002","Force display both 2D and 3D objects":"\u5F37\u5236\u986F\u793A 2D \u548C 3D \u5C0D\u8C61","Force display only 2D objects":"\u5F37\u5236\u53EA\u986F\u793A2D\u5C0D\u8C61","Force display only 3D objects":"\u5F37\u5236\u53EA\u986F\u793A3D\u5C0D\u8C61","Forfeit my redeemed subscription and continue":"\u653E\u68C4\u6211\u7684\u5DF2\u514C\u63DB\u8A02\u95B1\u4E26\u7E7C\u7E8C","Form sent with success. You should receive an email in the next minutes.":"\u8868\u683C\u767C\u9001\u6210\u529F\u3002\u60A8\u61C9\u8A72\u6703\u5728\u63A5\u4E0B\u4F86\u7684\u5E7E\u5206\u9418\u5167\u6536\u5230\u4E00\u5C01\u96FB\u5B50\u90F5\u4EF6\u3002","Forum access":"\u8AD6\u58C7\u8A2A\u554F","Forum account not found":"\u627E\u4E0D\u5230\u8AD6\u58C7\u5E33\u865F","Forum sync failed":"\u8AD6\u58C7\u540C\u6B65\u5931\u6557","Forums":"\u8AD6\u58C7","Forward (Additional button, typically the Browser Forward button)":"\u524D\u9032 (\u9644\u52A0\u6309\u9215\uFF0C\u901A\u5E38\u662F\u700F\u89BD\u5668\u524D\u9032\u6309\u9215)","Found 1 match in 1 event sheet":"\u5728 1 \u500B\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230 1 \u500B\u5339\u914D\u9805","Found 1 match in {0} event sheets":function(a){return["\u5728 ",a("0")," \u500B\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230 1 \u500B\u5339\u914D\u9805"]},"Found {totalMatchCount} matches in 1 event sheet":function(a){return["\u5728 1 \u500B\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230 ",a("totalMatchCount")," \u500B\u5339\u914D\u9805"]},"Found {totalMatchCount} matches in {0} event sheets":function(a){return["\u5728 ",a("0")," \u500B\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230 ",a("totalMatchCount")," \u500B\u5339\u914D\u9805"]},"Frame":"\u5E40","Frame #{i}":function(a){return["\u5E40 #",a("i")]},"Free":"\u514D\u8CBB\u7684","Free in-app tutorials":"\u61C9\u7528\u5167\u514D\u8CBB\u6559\u7A0B","Free instance":"\u514D\u8CBB\u5BE6\u4F8B","Free!":"\u514D\u8CBB\uFF01","Freehand brush":"\u81EA\u7531\u624B\u5237","From the same author":"\u4F86\u81EA\u540C\u4E00\u4F5C\u8005","Front face":"\u6B63\u9762","Full Game Asset Packs":"\u5B8C\u6574\u6E38\u6232\u8CC7\u6E90\u5305","Full name":"\u5168\u540D","Full name displayed in editor":"\u7DE8\u8F2F\u5668\u4E2D\u986F\u793A\u7684\u5168\u540D","Fun":"\u6709\u8DA3\u7684","Function Configuration":"\u529F\u80FD\u914D\u7F6E","Function name":"\u51FD\u6578\u540D","Function type":"\u51FD\u6578\u985E\u578B\uFF1A","Functions":"\u51FD\u6578","GDevelop 5":"GDevelop","GDevelop Bundles":"GDevelop \u6346\u7D81\u5305","GDevelop Cloud":"GDevelop \u4E91","GDevelop Website":"GDevelop \u7DB2\u7AD9","GDevelop app":"GDevelop \u61C9\u7528\u7A0B\u5E8F","GDevelop auto-save":"GDevelop \u81EA\u52D5\u4FDD\u5B58","GDevelop automatically saved a newer version of this project on {0}. This new version might differ from the one that you manually saved. Which version would you like to open?":function(a){return["GDevelop \u5728 ",a("0")," \u4E0A\u81EA\u52D5\u4FDD\u5B58\u6B64\u9805\u76EE\u7684\u65B0\u7248\u672C\u3002 \u9019\u500B\u65B0\u7248\u672C\u53EF\u80FD\u4E0D\u540C\u4E8E\u4F60\u624B\u52D5\u4FDD\u5B58\u7684\u7248\u672C\u3002\u4F60\u60F3\u8981\u6253\u958B\u54EA\u500B\u7248\u672C\uFF1F"]},"GDevelop credits":"GDevelop \u7A4D\u5206","GDevelop games on gd.games":"gd.games \u4E0A\u7684 GDevelop \u6E38\u6232","GDevelop is a full-featured, open-source game engine. Build and publish games for any mobile, desktop or web game store. It's super fast, easy to learn and powered by a community making it better every day.":"GDevelop \u662F\u4E00\u500B\u5168\u529F\u80FD\u7684\u3001\u958B\u653E\u6E90\u78BC\u7684\u6E38\u6232\u5F15\u64CE\u3002\u5B83\u53EF\u4EE5\u70BA\u4EFB\u4F55\u79FB\u52D5\u3001\u684C\u9762\u6216\u7DB2\u4E0A\u6E38\u6232\u5546\u5E97\u5EFA\u7ACB\u548C\u767C\u5E03\u6E38\u6232\u3002 \u5B83\u662F\u8D85\u5FEB\u7684\u3001\u5BB9\u6613\u5B78\u7FD2\u7684\uFF0C\u4EE5\u53CA\u7531\u793E\u5340\u63D0\u4F9B\u52D5\u529B\u7684\uFF0C\u6BCF\u5929\u90FD\u5728\u8B8A\u5F97\u8D8A\u4F86\u8D8A\u597D\u3002","GDevelop logo style":"GDevelop \u5FBD\u6A19\u6A23\u5F0F","GDevelop update ready":"GDevelop \u66F4\u65B0\u5DF2\u6E96\u5099\u597D","GDevelop update ready ({version})":function(a){return["GDevelop \u66F4\u65B0\u5DF2\u6E96\u5099\u597D (",a("version"),")"]},"GDevelop was created by Florian \"4ian\" Rival.":"GDevelop\u7531Florian \"4ian\" Rival\u5275\u5EFA\u3002","GDevelop was upgraded to a new version! Check out the changes.":"GDevelop\u5DF2\u88AB\u5347\u7D1A\u5230\u65B0\u7248\u672C\uFF01\u8ACB\u67E5\u770B\u66F4\u6539\u3002","GDevelop watermark placement":"GDevelop \u6C34\u5370\u4F4D\u7F6E","GDevelop website":"GDevelop\u7DB2\u7AD9","GDevelop will save your progress, so you can take a break if you need.":"GDevelop \u5C07\u4FDD\u5B58\u60A8\u7684\u9032\u5EA6\uFF0C\u56E0\u6B64\u60A8\u53EF\u4EE5\u5728\u9700\u8981\u6642\u4F11\u606F\u4E00\u4E0B\u3002","GDevelop's installation is corrupted and can't be used":"GDevelop's installation is corrupted and can't be used","GLB animation name":"GLB \u52D5\u756B\u540D\u7A31","Game Dashboard":"\u6E38\u6232\u5100\u8868\u677F","Game Design":"\u904A\u6232\u8A2D\u8A08","Game Development":"\u904A\u6232\u958B\u767C","Game Info":"\u6E38\u6232\u4FE1\u606F","Game Scenes":"\u6E38\u6232\u5834\u666F","Game already registered":"\u6E38\u6232\u5DF2\u6CE8\u518A","Game background":"\u6E38\u6232\u80CC\u666F","Game configuration has been saved":"\u904A\u6232\u914D\u7F6E\u5DF2\u5132\u5B58","Game description":"\u6E38\u6232\u63CF\u8FF0","Game earnings":"\u904A\u6232\u6536\u5165","Game export":"\u6E38\u6232\u5C0E\u51FA","Game for teaching or learning":"\u7528\u4E8E\u6559\u5B78\u6216\u5B78\u7FD2\u7684\u6E38\u6232","Game leaderboards":"\u6E38\u6232\u6392\u884C\u699C","Game mechanic":"\u6E38\u6232\u6A5F\u5236","Game name":"\u6E38\u6232\u540D\u7A31","Game name in the game URL":"\u6E38\u6232URL\u4E2D\u7684\u6E38\u6232\u540D\u7A31","Game not found":"\u627E\u4E0D\u5230\u6E38\u6232","Game personalisation":"\u6E38\u6232\u500B\u6027\u5316","Game preview \"{id}\" ({0})":function(a){return["\u6E38\u6232\u9810\u89BD \"",a("id"),"\" (",a("0"),")"]},"Game properties":"\u6E38\u6232\u5C6C\u6027","Game resolution height":"\u6E38\u6232\u5206\u8FA8\u7387\u9AD8\u5EA6","Game resolution resize mode (fullscreen or window)":"\u6E38\u6232\u5206\u8FA8\u7387\u8ABF\u6574\u5927\u5C0F\u6A21\u5F0F(\u5168\u5C4F\u6216\u7A97\u53E3)","Game resolution width":"\u6E38\u6232\u5206\u8FA8\u7387\u5BEC\u5EA6","Game scene size":"\u6E38\u6232\u5834\u666F\u5927\u5C0F","Game settings":"\u6E38\u6232\u8A2D\u7F6E","Game template not found":"\u627E\u4E0D\u5230\u6E38\u6232\u6A21\u677F","Game template not found - An error occurred, please try again later.":"\u672A\u627E\u5230\u6E38\u6232\u6A21\u677F - \u767C\u751F\u932F\u8AA4\uFF0C\u8ACB\u7A0D\u540E\u91CD\u8A66\u3002","Game templates will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this game template. (or restore your existing purchase).":"\u6E38\u6232\u6A21\u677F\u5C07\u93C8\u63A5\u5230\u60A8\u7684\u7528\u6236\u5E33\u6236\u5E76\u53EF\u7528\u4E8E\u60A8\u7684\u6240\u6709\u9805\u76EE\u3002\u767B\u9304\u6216\u6CE8\u518A\u5373\u53EF\u8CFC\u8CB7\u6B64\u6E38\u6232\u6A21\u677F\u3002(\u6216\u6062\u5FA9\u60A8\u73FE\u6709\u7684\u8CFC\u8CB7)\u3002","Gamepad":"\u904A\u6232\u624B\u67C4","Games":"\u904A\u6232","Games to learn or teach something":"\u5B78\u7FD2\u6216\u6559\u6388\u6771\u897F\u7684\u6E38\u6232","Gaming portals (Itch.io, Poki, CrazyGames...)":"\u904A\u6232\u9580\u6236\u7DB2\u7AD9 (Itch.io\u3001Poki\u3001CrazyGames...)","General":"\u4E00\u822C","General:":"\u5E38\u898F","Generate a link":"\u751F\u6210\u93C8\u63A5","Generate a new link":"\u751F\u6210\u65B0\u93C8\u63A5","Generate a shareable link to your game.":"\u751F\u6210\u60A8\u7684\u6E38\u6232\u7684\u53EF\u5171\u4EAB\u93C8\u63A5\u3002","Generate all your icons from 1 file":"\u5F9E\u4E00\u500B\u6A94\u6848\u751F\u6210\u6240\u6709\u5716\u793A","Generate expression and action":"\u751F\u6210\u8868\u9054\u5F0F\u548C\u52D5\u4F5C","Generate random name":"\u751F\u6210\u96A8\u6A5F\u540D\u7A31","Generate report at each preview":"\u6BCF\u6B21\u9810\u89BD\u6642\u751F\u6210\u5831\u544A","Generating your student\u2019s accounts...":"\u6B63\u5728\u751F\u6210\u60A8\u5B78\u751F\u7684\u5E33\u6236\u2026\u2026","Generation hint":"\u751F\u6210\u63D0\u793A","Genres":"\u985E\u578B","Get Featuring":"\u7372\u5F97\u529F\u80FD","Get GDevelop Premium":"\u7372\u53D6 GDevelop Premium","Get Premium":"\u7372\u53D6\u9AD8\u7D1A\u7248","Get a GDevelop subscription to increase the limits.":"\u7372\u53D6 GDevelop \u8A02\u95B1\u4EE5\u589E\u52A0\u9650\u5236\u3002","Get a Gold or Pro subscription to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"\u7372\u53D6 Gold \u6216 Pro \u8A02\u95B1\u4EE5\u8072\u660E\u60A8\u5728 [GDevelop Discord](https://discord.gg/gdevelop) \u4E0A\u7684\u89D2\u8272\u3002","Get a Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"\u7372\u5F97 Premium \u8A02\u95B1\u4EE5\u64C1\u6709\u66F4\u591A AI \u8ACB\u6C42\u548C GDevelop \u786C\u5E63\uFF0C\u4EE5\u89E3\u9396\u5F15\u64CE\u7684\u984D\u5916\u597D\u8655\u3002","Get a Pro subscription to invite collaborators into your project.":"\u7372\u53D6\u5C08\u696D\u8A02\u95B1\u4EE5\u9080\u8ACB\u5408\u4F5C\u8005\u52A0\u5165\u60A8\u7684\u9805\u76EE\u3002","Get a Sub":"\u7372\u5F97\u4E00\u500B\u5B50\u9805","Get a pro subscription to get full leaderboard customization.":"\u7372\u53D6\u5C08\u696D\u7248\u8A02\u95B1\u4EE5\u7372\u5F97\u5B8C\u6574\u7684\u6392\u884C\u699C\u5B9A\u5236\u3002","Get a pro subscription to unlock custom CSS.":"\u7372\u53D6\u5C08\u696D\u8A02\u95B1\u4EE5\u89E3\u9396\u81EA\u5B9A\u7FA9 CSS\u3002","Get a sample in your email":"\u5728\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6\u4E2D\u7372\u5F97\u4E00\u4EFD\u6A23\u672C","Get a silver or gold subscription to disable GDevelop branding.":"\u7372\u5F97\u9280\u8272\u6216\u91D1\u8272\u8A02\u95B1\u4EE5\u7981\u7528 GDevelop \u54C1\u724C\u3002","Get a silver or gold subscription to unlock color customization.":"\u7372\u53D6\u9280\u8272\u6216\u91D1\u8272\u8A02\u95B1\u4EE5\u89E3\u9396\u984F\u8272\u5B9A\u5236\u3002","Get a subscription":"\u7372\u5F97\u8A02\u95B1","Get a subscription to keep building with AI.":"\u7372\u5F97\u8A02\u95B1\u4EE5\u7E7C\u7E8C\u8207 AI \u5EFA\u7ACB\u61C9\u7528\u7A0B\u5F0F\u3002","Get a subscription to unlock this packaging.":"\u7372\u53D6\u8A02\u95B1\u4EE5\u89E3\u9396\u6B64\u8EDF\u4EF6\u5305\u3002","Get access":"\u7372\u53D6\u8A2A\u554F","Get access to an exclusive channel on the [GDevelop Discord](https://discord.gg/gdevelop) by subscribing to a Gold, Pro or Education plan.":"\u901A\u904E\u8A02\u95B1 Gold\u3001Pro \u6216 Education \u8A08\u5283\u4F86\u7372\u5F97 [GDevelop Discord](https://discord.gg/gdevelop) \u4E0A\u7684\u7368\u5BB6\u983B\u9053\u8A2A\u554F\u6B0A\u9650\u3002","Get back online to browse the huge library of free and premium examples.":"\u91CD\u65B0\u5728\u7DDA\u4E0A\u4EE5\u700F\u89BD\u5927\u91CF\u514D\u8CBB\u548C\u512A\u8CEA\u6A23\u672C\u7684\u5EAB\u3002","Get credit packs":"\u7372\u53D6\u7A4D\u5206\u5305","Get lesson with Edu":"\u8207Edu\u4E00\u8D77\u4E0A\u8AB2","Get more GDevelop credits to keep building with AI.":"\u7372\u5F97\u66F4\u591A GDevelop \u7A4D\u5206\u4EE5\u7E7C\u7E8C\u8207 AI \u5EFA\u7ACB\u61C9\u7528\u7A0B\u5F0F\u3002","Get more credits":"\u7372\u5F97\u66F4\u591A\u7A4D\u5206","Get more leaderboards":"\u7372\u5F97\u66F4\u591A\u6392\u884C\u699C","Get more players":"\u7372\u5F97\u66F4\u591A\u73A9\u5BB6","Get more players on your game":"\u5728\u60A8\u7684\u904A\u6232\u4E2D\u7372\u5F97\u66F4\u591A\u73A9\u5BB6","Get our teaching resources":"\u7372\u53D6\u6211\u5011\u7684\u6559\u5B78\u8CC7\u6E90","Get perks and cloud benefits when getting closer to your game launch. <0>Learn more":"\u81E8\u8FD1\u6E38\u6232\u767C\u5E03\u6642\u7372\u53D6\u984D\u5916\u798F\u5229\u548C\u4E91\u512A\u52E2\u3002<0>\u4E86\u89E3\u66F4\u591A","Get premium":"\u7372\u53D6\u9AD8\u7D1A\u7248","Get subscription":"\u7372\u5F97\u8A02\u95B1","Get the app":"\u7372\u53D6\u61C9\u7528\u7A0B\u5E8F","Get {0}!":function(a){return["\u7372\u5F97 ",a("0"),"\uFF01"]},"Get {estimatedTotalPriceFormatted} worth of value for less!":function(a){return["\u4EE5\u66F4\u5C11\u7684\u50F9\u683C\u7372\u5F97 ",a("estimatedTotalPriceFormatted")," \u503C\u7684\u50F9\u503C\uFF01"]},"GitHub repository":"GitHub \u5132\u5B58\u5EAB","Github":"Github","Give feedback on a game!":"\u5C0D\u904A\u6232\u63D0\u4F9B\u53CD\u994B\uFF01","Global Groups":"\u5168\u5C40\u7D44","Global Objects":"\u5168\u5C40\u5C0D\u8C61","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?":"Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?":"Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?","Global groups":"\u5168\u5C40\u7D44","Global objects":"\u5168\u5C40\u5C0D\u8C61","Global objects in the project":"\u9805\u76EE\u4E2D\u7684\u5168\u5C40\u5C0D\u8C61","Global search":"\u5168\u5C40\u641C\u5C0B","Global search (search in project)":"\u5168\u5C40\u641C\u5C0B\uFF08\u5728\u5C08\u6848\u4E2D\u641C\u5C0B\uFF09","Global variable":"\u5168\u5C40\u8B8A\u91CF","Global variables":"\u5168\u5C40\u8B8A\u91CF","Go back":"\u8FD4\u56DE","Go back to {translatedExpectedEditor}{sceneMention} to keep creating your game.":function(a){return["\u8FD4\u56DE ",a("translatedExpectedEditor"),a("sceneMention")," \u7E7C\u7E8C\u5275\u5EFA\u60A8\u7684\u6E38\u6232\u3002"]},"Go to [Apple Developer Certificates list](https://developer.apple.com/account/resources/certificates/list) and click on the + button. Choose **Apple Distribution** (for app store) or **Apple Development** (for testing on device). When requested, upload the request file you downloaded.":"\u8F49\u5230 [Apple \u958B\u767C\u8005\u8B49\u66F8\u5217\u8868](https://developer.apple.com/account/resources/certificates/list) \u5E76\u55AE\u64CA + \u6309\u9215\u3002\u9078\u64C7 **Apple Distribution** (\u7528\u4E8E\u61C9\u7528\u7A0B\u5E8F\u5546\u5E97) \u6216 **Apple Development** (\u7528\u4E8E\u5728\u8A2D\u5099\u4E0A\u6E2C\u8A66)\u3002\u7576\u8ACB\u6C42\u6642\uFF0C\u4E0A\u50B3\u60A8\u4E0B\u8F09\u7684\u8ACB\u6C42\u6587\u4EF6\u3002","Go to [Apple Developer Profiles list](https://developer.apple.com/account/resources/profiles/list) and click on the + button. Choose **App Store Connect** or **iOS App Development**. Then, choose *Xcode iOS Wildcard App ID*, then the certificate you created earlier. For development, you can choose [the devices you registered](https://developer.apple.com/help/account/register-devices/register-a-single-device/). Finish by downloading the generated file and upload it here so it can be stored securely by GDevelop.":"\u8F49\u5230 [Apple \u958B\u767C\u8005\u914D\u7F6E\u6587\u4EF6\u5217\u8868](https://developer.apple.com/account/resources/profiles/list) \u5E76\u55AE\u64CA + \u6309\u9215\u3002\u9078\u64C7 **App Store Connect** \u6216 **iOS \u61C9\u7528\u7A0B\u5E8F\u958B\u767C**\u3002\u7136\u540E\uFF0C\u9078\u64C7 *Xcode iOS Wildcard App ID*\uFF0C\u7136\u540E\u9078\u64C7\u60A8\u4E4B\u524D\u5275\u5EFA\u7684\u8B49\u66F8\u3002\u5C0D\u4E8E\u958B\u767C\uFF0C\u60A8\u53EF\u4EE5\u9078\u64C7[\u60A8\u6CE8\u518A\u7684\u8A2D\u5099](https://developer.apple.com/help/account/register-devices/register-a-single-device/)\u3002\u4E0B\u8F09\u751F\u6210\u7684\u6587\u4EF6\u5E76\u5C07\u5176\u4E0A\u50B3\u5230\u6B64\u8655\uFF0C\u4EE5\u4FBF GDevelop \u5B89\u5168\u5730\u5B58\u5132\u5B83\u3002","Go to first page":"\u8F49\u5230\u7B2C\u4E00\u9801","Google":"Google","Google Play (or other stores)":"Google Play (\u6216\u5176\u4ED6\u5546\u5E97)","Got it":"\u660E\u767D\u4E86","Got it! I've put together a plan:":"\u660E\u767D\u4E86\uFF01\u6211\u5DF2\u7D93\u5236\u5B9A\u4E86\u4E00\u500B\u8A08\u5283\uFF1A","Gravity on particles on X axis":"X\u8EF8\u7C92\u5B50\u91CD\u529B","Gravity on particles on Y axis":"Y\u8EF8\u7C92\u5B50\u91CD\u529B","Group name":"\u7FA4\u7D44\u540D\u7A31","Group name cannot be empty.":"\u7D44\u540D\u4E0D\u80FD\u70BA\u7A7A\u3002","Group: {0}":function(a){return["\u7B2C",a("0")," \u7D44\uFF1A"]},"Groups":"\u7D44","HTML5":"HTML5","HTML5 (external websites)":"HTML5 (\u5916\u90E8\u7DB2\u7AD9)","Had no players in the last week":"\u904E\u53BB\u4E00\u5468\u6C92\u6709\u73A9\u5BB6","Had {countOfSessionsLastWeek} players in the last week":function(a){return["\u904E\u53BB\u4E00\u5468\u6709 ",a("countOfSessionsLastWeek")," \u540D\u73A9\u5BB6"]},"Has animations (JavaScript only)":"\u6709\u52D5\u756B\uFF08\u50C5\u9650 JavaScript\uFF09","Have you changed your usage of GDevelop?":"\u60A8\u662F\u5426\u6539\u8B8A\u4E86 GDevelop \u7684\u4F7F\u7528\u65B9\u5F0F\uFF1F","Having the same collision masks for all animations will erase and reset all the other animations collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the animations of the object?":"\u5C0D\u4E8E\u6240\u6709\u52D5\u756B\u5177\u6709\u76F8\u540C\u7684\u78B0\u649E\u906E\u7F69\u5C07\u64E6\u9664\u5E76\u91CD\u7F6E\u6240\u6709\u5176\u4ED6\u52D5\u756B\u7684\u78B0\u649E\u906E\u7F69\u3002\u9019\u662F\u7121\u6CD5\u64A4\u6D88\u7684\u3002\u662F\u5426\u78BA\u5BE6\u8981\u5728\u5C0D\u8C61\u7684\u6240\u6709\u52D5\u756B\u4E2D\u5171\u4EAB\u9019\u4E9B\u78B0\u649E\u906E\u7F69\uFF1F","Having the same collision masks for all frames will erase and reset all the other frames collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the frames of the animation?":"\u5C0D\u4E8E\u6240\u6709\u5E40\u5177\u6709\u76F8\u540C\u7684\u78B0\u649E\u63A9\u78BC\u5C07\u64E6\u9664\u5E76\u91CD\u7F6E\u6240\u6709\u5176\u4ED6\u5E40\u7684\u78B0\u649E\u63A9\u78BC\u3002\u9019\u662F\u7121\u6CD5\u64A4\u6D88\u7684\u3002\u662F\u5426\u78BA\u5BE6\u8981\u5728\u52D5\u756B\u7684\u6240\u6709\u5E40\u4E4B\u9593\u5171\u4EAB\u9019\u4E9B\u78B0\u649E\u906E\u7F69\uFF1F","Having the same points for all animations will erase and reset all the other animations points. This can't be undone. Are you sure you want to share these points amongst all the animations of the object?":"\u5C0D\u6240\u6709\u52D5\u756B\u5177\u6709\u76F8\u540C\u7684\u9EDE\u5C07\u64E6\u9664\u548C\u91CD\u7F6E\u6240\u6709\u5176\u4ED6\u52D5\u756B\u9EDE\u3002\u9019\u662F\u7121\u6CD5\u633D\u56DE\u7684\u3002\u60A8\u78BA\u5B9A\u8981\u5728\u5C0D\u8C61\u7684\u6240\u6709\u52D5\u756B\u4E2D\u5206\u4EAB\u9019\u4E9B\u9EDE\u55CE\uFF1F","Having the same points for all frames will erase and reset all the other frames points. This can't be undone. Are you sure you want to share these points amongst all the frames of the animation?":"\u5C0D\u6240\u6709\u5E40\u4F7F\u7528\u76F8\u540C\u7684\u9EDE\u5C07\u64E6\u9664\u5E76\u91CD\u7F6E\u6240\u6709\u5176\u4ED6\u5E40\u9EDE\u3002\u9019\u662F\u7121\u6CD5\u633D\u56DE\u7684\u3002\u60A8\u78BA\u5B9A\u8981\u5728\u52D5\u756B\u7684\u6240\u6709\u5E40\u4E4B\u9593\u5171\u4EAB\u9019\u4E9B\u9EDE\u55CE\uFF1F","Health bar":"\u751F\u547D\u689D","Height":"\u9AD8\u5EA6","Help":"\u5E6B\u52A9","Help for this action":"\u6B64\u64CD\u4F5C\u7684\u5E6B\u52A9","Help for this condition":"\u6B64\u689D\u4EF6\u7684\u5E6B\u52A9","Help page URL":"\u5E6B\u52A9\u9801\u9762URL","Help translate GDevelop":"Help translate GDevelop","Help us improve by telling us what could be improved:":"\u5E6B\u52A9\u6211\u5011\u6539\u9032\uFF0C\u544A\u8A34\u6211\u5011\u53EF\u4EE5\u6539\u9032\u7684\u5730\u65B9\uFF1A","Help us improve our learning content":"\u5E6B\u52A9\u6211\u5011\u6539\u5584\u5B78\u7FD2\u5167\u5BB9","Here are your redemption codes:":"\u9019\u662F\u60A8\u7684\u514C\u63DB\u78BC\uFF1A","Here's how I'll tackle this:":"\u9019\u662F\u6211\u5C07\u5982\u4F55\u8655\u7406\u6B64\u4E8B\u7684\u65B9\u5F0F\uFF1A","Hidden":"\u96B1\u85CF","Hidden on gd.games":"\u5728 gd.games \u4E0A\u96B1\u85CF","Hide deprecated behaviors (prefer not to use anymore)":"\u96B1\u85CF\u5EE2\u68C4\u7684\u884C\u70BA(\u4E0D\u518D\u4F7F\u7528)","Hide details":"\u96B1\u85CF\u8A73\u60C5","Hide effect":"\u96B1\u85CF\u7279\u6548","Hide experimental behaviors":"\u96B1\u85CF\u5BE6\u9A57\u6027\u884C\u70BA","Hide experimental extensions":"\u96B1\u85CF\u5BE6\u9A57\u6027\u64F4\u5C55","Hide experimental objects":"\u96B1\u85CF\u5BE6\u9A57\u6027\u7269\u4EF6","Hide lifecycle functions (advanced)":"\u96B1\u85CF\u751F\u547D\u5468\u671F\u51FD\u6578(\u9AD8\u7D1A)","Hide other lifecycle functions (advanced)":"\u96B1\u85CF\u5176\u4ED6\u751F\u547D\u5468\u671F\u51FD\u6578(\u9AD8\u7D1A)","Hide the AI assistant?":"\u96B1\u85CF AI \u52A9\u624B\uFF1F","Hide the layer":"\u96B1\u85CF\u5716\u5C64","Hide the leaderboard":"\u96B1\u85CF\u6392\u884C\u699C","Hide the menu bar in the preview window":"\u5728\u9810\u89BD\u7A97\u53E3\u4E2D\u96B1\u85CF\u83DC\u55AE\u6B04","Hide this hint?":"\u96B1\u85CF\u6B64\u63D0\u793A\uFF1F","High quality":"\u9AD8\u8CEA\u91CF","Higher is better":"\u8D8A\u9AD8\u8D8A\u597D","Higher is better (max: {formattedScore})":function(a){return["\u8D8A\u9AD8\u8D8A\u597D(\u6700\u5927: ",a("formattedScore"),")"]},"Highlight background color":"\u7A81\u51FA\u986F\u793A\u80CC\u666F\u984F\u8272","Highlight text color":"\u7A81\u51FA\u986F\u793A\u6587\u672C\u984F\u8272","Hobbyists and indie devs":"\u611B\u597D\u8005\u548C\u7368\u7ACB\u958B\u767C\u8005","Home page":"\u4E3B\u9801","Homepage":"\u9996\u9801","Horizontal anchor":"\u6C34\u5E73\u9328\u9EDE","Horizontal flip":"\u6C34\u5E73\u7FFB\u8F49","Horror":"\u6050\u6016","Hours":"\u5C0F\u6642","How are you learning game dev?":"\u4F60\u662F\u5982\u4F55\u5B78\u7FD2\u6E38\u6232\u958B\u767C\u7684\uFF1F","How are you working on your projects?":"\u60A8\u7684\u9805\u76EE\u9032\u5C55\u5982\u4F55\uFF1F","How many students do you want to create?":"\u60A8\u60F3\u5275\u5EFA\u591A\u5C11\u5B78\u751F\uFF1F","How to make my game more fun?":"\u5982\u4F55\u8B93\u6211\u7684\u904A\u6232\u66F4\u6709\u8DA3\uFF1F","How would you rate this chapter?":"\u60A8\u6703\u600E\u9EBC\u8A55\u50F9\u9019\u4E00\u7AE0\u7BC0\uFF1F","Huge":"\u5DE8\u5927","I am learning game development":"\u6211\u6B63\u5728\u5B78\u7FD2\u6E38\u6232\u958B\u767C","I am teaching game development":"\u6211\u6B63\u5728\u6559\u6388\u6E38\u6232\u958B\u767C","I don\u2019t have a specific deadline":"\u6211\u6C92\u6709\u5177\u9AD4\u7684\u622A\u6B62\u65E5\u671F","I have encountered bugs or performance problems":"\u6211\u9047\u5230\u4E86\u932F\u8AA4\u6216\u6027\u80FD\u554F\u984C","I trust this project":"\u6211\u4FE1\u4EFB\u6B64\u5C08\u6848","I want to add a leaderboard":"\u6211\u60F3\u65B0\u589E\u6392\u884C\u699C","I want to add an explosion when an enemy is destroyed":"\u6211\u60F3\u65B0\u589E\u4E00\u500B\u6575\u4EBA\u88AB\u6467\u6BC0\u6642\u7684\u7206\u70B8\u6548\u679C","I want to create a main menu for my game":"\u6211\u60F3\u70BA\u6211\u7684\u904A\u6232\u5275\u5EFA\u4E00\u500B\u4E3B\u9078\u55AE","I want to display the health of my player":"\u6211\u60F3\u986F\u793A\u6211\u7684\u73A9\u5BB6\u7684\u751F\u547D\u503C","I want to receive the GDevelop Newsletter":"\u6211\u60F3\u6536\u5230 GDevelop \u65B0\u805E\u901A\u8A0A","I want to receive weekly stats about my games":"\u6211\u60F3\u6536\u5230\u6211\u7684\u6E38\u6232\u7684\u6BCF\u5468\u7D71\u8A08\u6578\u64DA","I'll do it later":"\u6211\u7A0D\u540E\u518D\u8A66","I'm building a video game or app":"\u6211\u6B63\u5728\u5236\u4F5C\u4E00\u500B\u8996\u983B\u6E38\u6232\u6216\u61C9\u7528\u7A0B\u5E8F","I'm learning or teaching game development":"\u6211\u6B63\u5728\u5B78\u7FD2\u6216\u6559\u6388\u6E38\u6232\u958B\u767C","I'm struggling to create what I want":"\u6211\u6B63\u5728\u52AA\u529B\u5275\u9020\u6211\u60F3\u8981\u7684\u6771\u897F","I've broken this into steps \u2014 let me walk you through it:":"\u6211\u5DF2\u7D93\u5C07\u6B64\u4E8B\u62C6\u5206\u6210\u6B65\u9A5F - \u8B93\u6211\u5E36\u4F60\u4E00\u8D77\u5B8C\u6210\uFF1A","I've mapped out a plan \u2014 here's what I'll do:":"\u6211\u5DF2\u7D93\u898F\u5283\u4E86\u4E00\u500B\u8A08\u5283 - \u9019\u662F\u6211\u5C07\u505A\u7684\u4E8B\u60C5\uFF1A","I've stopped using GDevelop":"\u6211\u5DF2\u7D93\u505C\u6B62\u4F7F\u7528 GDevelop","I've thought this through \u2014 here's the plan:":"\u6211\u5DF2\u7D93\u8003\u91CF\u904E\u9019\u4E9B - \u9019\u662F\u8A08\u5283\uFF1A","IDE":"IDE(\u96C6\u6210\u958B\u767C\u74B0\u5883)","IPA for App Store":"\u61C9\u7528\u5546\u5E97\u7684 IPA","IPA for testing on registered devices":"\u7528\u4E8E\u5728\u6CE8\u518A\u8A2D\u5099\u4E0A\u9032\u884C\u6E2C\u8A66\u7684 IPA","Icon URL":"\u5716\u6A19 URL","Icon and [DEPRECATED] text":"\u5716\u793A\u548C[\u904E\u6642]\u6587\u672C","Icon only":"\u50C5\u5716\u793A","Icons":"\u5716\u793A","Identifier":"\u6A19\u8B58\u7B26","Identifier (text)":"\u6A19\u8B58\u7B26(\u6587\u672C)","Identifier name":"\u6A19\u8B58\u7B26\u540D\u7A31","If activated, players won't be able to log in and claim a score just sent without being already logged in to the game.":"\u5982\u679C\u6FC0\u6D3B\uFF0C\u73A9\u5BB6\u5728\u672A\u767B\u9304\u6E38\u6232\u7684\u60C5\u6CC1\u4E0B\u5C07\u7121\u6CD5\u767B\u9304\u5E76\u9818\u53D6\u525B\u525B\u767C\u9001\u7684\u5206\u6578\u3002","If checked, player names will always be auto-generated, even if the game sent a custom name. Helpful if you're having a leaderboard where you want full anonymity.":"\u5982\u679C\u9078\u4E2D\uFF0C\u5373\u4F7F\u6E38\u6232\u767C\u9001\u4E86\u81EA\u5B9A\u7FA9\u540D\u7A31\uFF0C\u73A9\u5BB6\u540D\u7A31\u4E5F\u5C07\u59CB\u7D42\u81EA\u52D5\u751F\u6210\u3002\u5982\u679C\u60A8\u60F3\u8981\u5B8C\u5168\u533F\u540D\u7684\u6392\u884C\u699C\uFF0C\u9019\u6703\u5F88\u6709\u5E6B\u52A9\u3002","If no previous condition or action used the specified object(s), the picked instances count will be 0.":"\u5982\u679C\u4E4B\u524D\u7684\u689D\u4EF6\u6216\u64CD\u4F5C\u672A\u4F7F\u7528\u6307\u5B9A\u7684\u5C0D\u8C61\uFF0C\u5247\u62FE\u53D6\u7684\u5BE6\u4F8B\u8A08\u6578\u5C07\u70BA0\u3002","If the parameter is a string or a number, you probably want to use the expressions \"GetArgumentAsString\" or \"GetArgumentAsNumber\", along with the conditions \"Compare two strings\" or \"Compare two numbers\".":"\u5982\u679C\u53C3\u6578\u662F\u5B57\u7B26\u4E32\u6216\u6578\u5B57\uFF0C\u5247\u53EF\u80FD\u8981\u4F7F\u7528\u8868\u9054\u5F0F\u201C \u4EE5\u5B57\u7B26\u4E32\u5F62\u5F0F\u7372\u53D6\u53C3\u6578\u201D\u6216\u201C \u7372\u53D6\u53C3\u6578\u4F5C\u70BA\u6578\u5B57\u201D\uFF0C\u4EE5\u53CA\u689D\u4EF6\u201C\u6BD4\u8F03\u5169\u500B\u5B57\u7B26\u4E32\u201D\u6216\u201C\u6BD4\u8F03\u5169\u500B\u6578\u5B57\u201D\u3002","If you are in a browser, ensure you close all GDevelop tabs or restart the browser.":"If you are in a browser, ensure you close all GDevelop tabs or restart the browser.","If you are on desktop, please re-install it by downloading the latest version from <0>the website":"If you are on desktop, please re-install it by downloading the latest version from <0>the website","If you close this window while the build is being done, you can see its progress and download the game later by clicking on See All My Builds below.":"\u5982\u679C\u4F60\u5728\u751F\u6210\u904E\u7A0B\u4E2D\u95DC\u9589\u6B64\u7A97\u53E3, \u53EF\u5728\u7A0D\u540E\u901A\u904E\u55AE\u64CA\u4E0B\u9762\u7684 \"\u67E5\u770B\u6240\u6709\u6211\u7684\u751F\u6210\" \u4F86\u67E5\u770B\u5176\u9032\u5EA6\u5E76\u4E0B\u8F09\u6E38\u6232\u3002","If you don't have access to it, restart GDevelop. If you still can't access it, please contact us.":"\u5982\u679C\u60A8\u7121\u6CD5\u8A2A\u554F\uFF0C\u8ACB\u91CD\u65B0\u555F\u52D5 GDevelop\u3002\u5982\u679C\u60A8\u4ECD\u7136\u7121\u6CD5\u8A2A\u554F\uFF0C\u8ACB\u8207\u6211\u5011\u806F\u7E6B\u3002","If you have a popup blocker interrupting the opening, allow the popups and try a second time to open the project.":"\u5982\u679C\u4F60\u6709\u4E00\u500B\u5F48\u51FA\u5C4F\u853D\u5668\u4E2D\u65B7\u4E86\u6253\u958B\uFF0C\u5141\u8A31\u5F48\u51FA\u7A97\u53E3\uFF0C\u5E76\u5617\u8A66\u7B2C\u4E8C\u6B21\u6253\u958B\u9805\u76EE\u3002","If you skip this step, you can still do it manually later from the leaderboards panel in your Games Dashboard.":"\u5982\u679C\u60A8\u8DF3\u904E\u9019\u4E00\u6B65\uFF0C\u60A8\u4ECD\u7136\u53EF\u4EE5\u5728\u6E38\u6232\u5100\u8868\u677F\u7684\u6392\u884C\u699C\u9762\u677F\u4E2D\u624B\u52D5\u9032\u884C\u64CD\u4F5C\u3002","Ignore":"\u5FFD\u7565","Ignore and continue":"\u5FFD\u7565\u4E26\u7E7C\u7E8C","Image":"\u5716\u50CF","Image resource":"\u5716\u50CF\u8CC7\u6E90","Implementation":"\u5BE6\u65BD","Implementation steps:":"\u5BE6\u65BD\u6B65\u9A5F\uFF1A","Implementing in-project monetization":"\u5BE6\u73FE\u9805\u76EE\u5167\u8CA8\u5E63\u5316","Import":"\u5C0E\u5165","Import assets":"\u5C0E\u5165\u8CC7\u7522","Import extension":"\u5C0E\u5165\u64F4\u5C55","Import images":"\u5C0E\u5165\u5716\u50CF","Import one or more animations that are available in this Spine file.":"\u5C0E\u5165\u6B64 Spine \u6587\u4EF6\u4E2D\u53EF\u7528\u7684\u4E00\u500B\u6216\u591A\u500B\u52D5\u756B\u3002","Importing project resources":"\u5C0E\u5165\u9805\u76EE\u8CC7\u6E90","Importing resources outside from the project folder":"\u5F9E\u9805\u76EE\u6587\u4EF6\u593E\u5916\u90E8\u5C0E\u5165\u8CC7\u6E90","Improve and publish your Game":"\u6539\u9032\u5E76\u767C\u5E03\u60A8\u7684\u6E38\u6232","In around a year":"\u4E00\u5E74\u5DE6\u53F3\u7684\u6642\u9593\u91CC","In order to purchase a marketing boost, log-in and select a game in your dashboard.":"\u8981\u8CFC\u8CB7\u71DF\u92B7\u63A8\u5EE3\uFF0C\u8ACB\u767B\u9304\u4E26\u5728\u5100\u8868\u677F\u4E2D\u9078\u64C7\u4E00\u6B3E\u904A\u6232\u3002","In order to see your objects in the scene, you need to add an action \"Create objects from external layout\" in your events sheet.":"\u70BA\u4E86\u5728\u5834\u666F\u4E2D\u770B\u5230\u4F60\u7684\u5C0D\u8C61\uFF0C\u4F60\u9700\u8981\u5728\u4E8B\u4EF6\u5217\u8868\u4E2D\u6DFB\u52A0\u4E00\u500B\u52D5\u4F5C\u201C\u5F9E\u5916\u90E8\u5E03\u5C40\u5275\u5EFA\u5C0D\u8C61\u201D\u3002","In order to use these external events, you still need to add a \"Link\" event in the events sheet of the corresponding scene":"\u70BA\u4E86\u4F7F\u7528\u9019\u4E9B\u5916\u90E8\u4E8B\u4EF6\uFF0C\u60A8\u4ECD\u7136\u9700\u8981\u5728\u76F8\u61C9\u5834\u666F\u7684\u4E8B\u4EF6\u8868\u4E2D\u6DFB\u52A0\u4E00\u500B\u201CLink\u201D\u4E8B\u4EF6","In pixels.":"\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\u3002","In pixels. 0 to ignore.":"\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\u30020\u8868\u793A\u5FFD\u7565\u3002","In this tutorial you will learn:":"\u5728\u9019\u500B\u6559\u7A0B\u4E2D\uFF0C\u60A8\u5C07\u5B78\u7FD2\uFF1A","In-app Tutorials":"\u61C9\u7528\u5167\u6559\u7A0B","In-game obstacles":"\u6E38\u6232\u4E2D\u7684\u969C\u7919","Include events from":"\u5F9E...\u63D2\u5165\u4E8B\u4EF6","Include store extensions":"\u5305\u542B\u5546\u5E97\u64F4\u5C55","Included":"\u5305\u62EC","Included in this bundle":"\u5305\u542B\u5728\u9019\u500B\u6346\u7D81\u5305\u4E2D","Included with GDevelop subscriptions":"\u5305\u542B\u5728 GDevelop \u8A02\u95B1\u4E2D","Incompatible with the object":"\u8207\u5C0D\u8C61\u4E0D\u517C\u5BB9","Increase seats":"\u589E\u52A0\u540D\u984D","Increase version number to {0}":function(a){return["\u5C07\u7248\u672C\u865F\u589E\u52A0\u5230 ",a("0")]},"Indent Scale in Events Sheet":"\u4E8B\u4EF6\u8868\u4E2D\u7684\u7E2E\u9032\u6BD4\u4F8B","Inferred type":"\u63A8\u65B7\u985E\u578B","Initial text of the variable":"\u8B8A\u91CF\u7684\u521D\u59CB\u6587\u672C","Initial text to display":"\u8981\u986F\u793A\u7684\u521D\u59CB\u6587\u672C","Input":"\u8F38\u5165","Insert new...":"\u63D2\u5165\u65B0\u7684...","Inspect the game structure.":"\u6AA2\u67E5\u904A\u6232\u7D50\u69CB\u3002","Inspectors":"\u6AA2\u67E5\u5668","Instagram":"Instagram","Install again":"\u518D\u6B21\u5B89\u88DD","Install all the assets":"\u5B89\u88DD\u6240\u6709\u8CC7\u7522","Install font":"\u5B89\u88DD\u5B57\u9AD4","Install in project":"\u5728\u9805\u76EE\u4E2D\u5B89\u88DD","Install the missing assets":"\u5B89\u88DD\u7F3A\u5931\u7684\u8CC7\u7522","Installed as an app. No updates available.":"\u5DF2\u4F5C\u70BA\u61C9\u7528\u7A0B\u5E8F\u5B89\u88DD\u3002\u6C92\u6709\u53EF\u7528\u7684\u66F4\u65B0\u3002","Installing assets...":"\u6B63\u5728\u5B89\u88DD\u8CC7\u7522...","Instance":"\u5BE6\u4F8B","Instance Variables":"\u5BE6\u4F8B\u8B8A\u91CF","Instance properties":"\u5BE6\u4F8B\u5C6C\u6027","Instance variables":"\u5BE6\u4F8B\u8B8A\u91CF","Instance variables overwrite the default values of the variables of the object.":"\u5BE6\u4F8B\u8B8A\u91CF\u8986\u84CB\u5C0D\u8C61\u8B8A\u91CF\u7684\u9ED8\u8A8D\u503C\u3002","Instance variables:":"\u5BE6\u4F8B\u8B8A\u91CF\uFF1A","Instances":"\u5BE6\u4F8B","Instances List":"\u5BE6\u4F8B\u5217\u8868","Instances editor":"\u5BE6\u4F8B\u7DE8\u8F2F\u5668","Instances editor rendering":"\u5BE6\u4F8B\u7DE8\u8F2F\u5668\u6E32\u67D3","Instances editor.":"\u5BE6\u4F8B\u7DE8\u8F2F\u5668\u3002","Instances list":"\u5BE6\u4F8B\u5217\u8868","Instant":"\u5373\u6642","Instant Games":"\u5373\u6642\u6E38\u6232","Instant or permanent force":"\u7ACB\u5373\u6216\u6C38\u4E45\u7684\u529B","Instead of <0>{0}":function(a){return["\u800C\u4E0D\u662F <0>",a("0"),""]},"Instruction":"\u6307\u4EE4","Instruction editor":"\u6307\u4EE4\u7DE8\u8F2F\u5668","Interaction Design":"\u4E92\u52D5\u8A2D\u8A08","Interactive content":"\u4E92\u52D5\u5167\u5BB9","Intermediate":"\u4E2D\u7D1A","Intermediate course":"\u4E2D\u7D1A\u8AB2\u7A0B","Internal Name":"\u5167\u90E8\u540D\u7A31","Internal instruction names":"\u5167\u90E8\u6307\u4EE4\u540D\u7A31","Invalid email address":"\u7121\u6548\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740","Invalid email address.":"\u7121\u6548\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u3002","Invalid file":"\u7121\u6548\u6587\u4EF6","Invalid name":"\u7121\u6548\u540D\u7A31","Invalid parameters in events ({invalidParametersCount})":function(a){return["\u4E8B\u4EF6\u4E2D\u7684\u7121\u6548\u53C3\u6578 (",a("invalidParametersCount"),")"]},"Invert Condition":"\u53CD\u8F49\u689D\u4EF6","Invert condition":"\u53CD\u8F49\u689D\u4EF6","Invitation already accepted":"\u9080\u8ACB\u5DF2\u88AB\u63A5\u53D7","Invitation sent to {lastInvitedEmail}.":function(a){return["\u9080\u8ACB\u5DF2\u767C\u9001\u81F3 ",a("lastInvitedEmail"),"\u3002"]},"Invite":"\u9080\u8ACB","Invite a student":"\u9080\u8ACB\u4E00\u4F4D\u5B78\u751F","Invite a teacher":"\u9080\u8ACB\u4E00\u4F4D\u8001\u5E2B","Invite collaborators":"\u9080\u8ACB\u5408\u4F5C\u8005","Invite students":"\u9080\u8ACB\u5B78\u751F","Invite teacher":"\u9080\u8ACB\u8001\u5E2B","Inviting a user will provide them admin capabilities over the student accounts, as well as all the subscription perks. Only accounts without an existing subscription can be invited.":"\u9080\u8ACB\u7528\u6236\u5C07\u8CE6\u4E88\u4ED6\u5011\u5C0D\u5B78\u751F\u5E33\u6236\u7684\u7BA1\u7406\u6B0A\u9650\uFF0C\u4EE5\u53CA\u6240\u6709\u7684\u8A02\u95B1\u798F\u5229\u3002\u53EA\u6709\u6C92\u6709\u73FE\u6709\u8A02\u95B1\u7684\u5E33\u6236\u624D\u80FD\u88AB\u9080\u8ACB\u3002","Is not published on gd.games":"\u672A\u5728 gd.games \u767C\u5E03","Is published on gd.games":"\u5DF2\u5728 gd.games \u767C\u5E03","Is the average time a player spends in the game.":"Is the average time a player spends in the game.","Is there anything that you struggle with while working on your projects?":"\u60A8\u5728\u505A\u9805\u76EE\u6642\u6709\u9047\u5230\u4EC0\u4E48\u56F0\u96E3\u55CE\uFF1F","Isometric":"\u7B49\u8EF8\u6E2C","It didn't do enough":"\u6C92\u6709\u505A\u5920","It didn't work at all":"\u6839\u672C\u6C92\u6709\u6548\u679C","It is already installed/available in the project.":"\u5B83\u5DF2\u7D93\u5728\u9805\u76EE\u4E2D\u5B89\u88DD/\u53EF\u7528\u3002","It is part of behavior <0/> from extension <1/>.":"\u9019\u662F\u64F4\u5C55 <0/> \u4E2D\u884C\u70BA <1/> \u7684\u4E00\u90E8\u5206\u3002","It is part of extension <0/> {0} .":function(a){return["\u9019\u662F\u64F4\u5145\u529F\u80FD <0/> ",a("0")," \u7684\u4E00\u90E8\u5206\u3002"]},"It is part of object <0/> from extension <1/>.":"\u9019\u662F\u64F4\u5C55 <1/> \u4E2D\u5C0D\u8C61 <0/> \u7684\u4E00\u90E8\u5206\u3002","It looks like the build has timed out, please try again.":"\u770B\u8D77\u4F86\u69CB\u5EFA\u5DF2\u8D85\u6642\uFF0C\u8ACB\u518D\u8A66\u4E00\u6B21\u3002","It seems you entered a name with a quote. Variable names should not be quoted.":"\u770B\u8D77\u4F86\u4F60\u8F38\u5165\u4E86\u4E00\u500B\u5E36\u5F15\u865F\u7684\u540D\u5B57\u3002\u8B8A\u91CF\u540D\u4E0D\u61C9\u8A72\u5E36\u5F15\u865F\u3002","It will be downloaded and installed automatically.":"\u5C07\u81EA\u52D5\u4E0B\u8F09\u4E26\u5B89\u88DD\u3002","It's missing a feature (please specify)":"\u5B83\u7F3A\u5C11\u4E00\u500B\u529F\u80FD (\u8ACB\u6CE8\u660E)","Italic":"\u659C\u9AD4","Itch.io, Poki, CrazyGames...":"Itch.io\u3001Poki\u3001CrazyGames...","JSON resource":"JSON \u8CC7\u6E90","JavaScript file":"JavaScript \u6587\u4EF6","JavaScript files are imported as is (no compilation and not available in JavaScript code block autocompletions). Make sure your extension is used by the game (at least one action/condition used in a scene), otherwise the files won't be imported.":"JavaScript \u6587\u4EF6\u6309\u539F\u6A23\u5C0E\u5165 (\u7121\u9700\u7DE8\u8B6F\u4E14\u5728 JavaScript \u4EE3\u78BC\u584A\u81EA\u52D5\u5B8C\u6210\u4E2D\u4E0D\u53EF\u7528)\u3002\u8ACB\u78BA\u4FDD\u60A8\u7684\u64F4\u5C55\u88AB\u904A\u6232\u4F7F\u7528\uFF08\u5834\u666F\u4E2D\u81F3\u5C11\u4F7F\u7528\u4E86\u4E00\u500B\u52D5\u4F5C/\u689D\u4EF6\uFF09\uFF0C\u5426\u5247\u9019\u4E9B\u6587\u4EF6\u5C07\u7121\u6CD5\u5C0E\u5165\u3002","JavaScript files must be imported by an extension - by choosing it the extension properties. Otherwise, it won't be loaded by the game.":"JavaScript \u6587\u4EF6\u5FC5\u9808\u7531\u64F4\u5C55\u9032\u884C\u5C0E\u5165- \u901A\u904E\u9078\u64C7\u5176\u64F4\u5C55\u5C6C\u6027\u4F86\u5BE6\u73FE\u3002\u5426\u5247\uFF0C\u5B83\u5C07\u7121\u6CD5\u88AB\u904A\u6232\u52A0\u8F09\u3002","Join the discussion":"\u52A0\u5165\u8A0E\u8AD6","Joystick controls":"\u64CD\u7E31\u687F\u63A7\u5236","Json":"Json","Jump forward in time on creation (in seconds)":"\u5728\u5275\u5EFA\u6642\u5411\u524D\u8DF3\u8F49(\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Just now":"\u73FE\u5728","Keep centered (best for game content)":"\u4FDD\u6301\u5C45\u4E2D\uFF08\u6700\u9069\u5408\u904A\u6232\u5167\u5BB9\uFF09","Keep learning":"\u7E7C\u7E8C\u5B78\u7FD2","Keep ratio":"\u4FDD\u6301\u6BD4\u7387","Keep subscription":"\u4FDD\u6301\u8A02\u95B1","Keep the new project linked to this game":"\u4FDD\u6301\u65B0\u9805\u76EE\u8207\u6B64\u904A\u6232\u7684\u93C8\u63A5","Keep their original location":"\u4FDD\u7559\u5176\u539F\u59CB\u4F4D\u7F6E","Keep top-left corner fixed (best for content that can extend)":"\u5C07\u5DE6\u4E0A\u89D2\u56FA\u5B9A\uFF08\u6700\u9069\u5408\u53EF\u5EF6\u4F38\u5167\u5BB9\uFF09","Keyboard":"\u9375\u76E4","Keyboard Key (deprecated)":"\u9375\u76E4\u9375\uFF08\u5DF2\u68C4\u7528\uFF09","Keyboard Key (text)":"\u9375\u76E4\u5BC6\u9470 (\u6587\u672C)","Keyboard Shortcuts":"\u9375\u76E4\u5FEB\u6377\u9375","Keyboard key":"\u9375\u76E4\u9375","Keyboard key (text)":"\u9375\u76E4\u5BC6\u9470 (\u6587\u672C)","Label":"\u6A19\u7C3D","Label displayed in editor":"\u7DE8\u8F2F\u5668\u4E2D\u986F\u793A\u7684\u540D\u7A31","Lack of Graphics & Animation":"\u7F3A\u4E4F\u5716\u5F62\u548C\u52D5\u756B","Lack of Marketing & Publicity":"\u7F3A\u4E4F\u71DF\u92B7\u548C\u5BA3\u50B3","Lack of Music & Sound":"\u7F3A\u4E4F\u97F3\u6A02\u548C\u8072\u97F3","Landscape":"\u6A6B\u5411\u986F\u793A","Language":"\u8A9E\u8A00","Last (after other files)":"\u6700\u5F8C (\u5728\u5176\u5B83\u6587\u4EF6\u4E4B\u5F8C)","Last edited":"\u4E0A\u6B21\u7DE8\u8F2F","Last edited:":"\u4E0A\u6B21\u7DE8\u8F2F\uFF1A","Last modified":"\u4E0A\u6B21\u4FEE\u6539","Last name":"\u59D3\u6C0F","Last run collected on {0} frames.":function(a){return["\u5728 ",a("0")," \u5E40\u4E0A\u6536\u96C6\u7684\u6700\u540E\u4E00\u6B21\u904B\u884C\u3002"]},"Latest save":"\u6700\u65B0\u4FDD\u5B58","Launch network preview over WiFi/LAN":"\u901A\u904E WiFi/LAN \u555F\u52D5\u7DB2\u7D61\u9810\u89BD","Launch new preview":"\u555F\u52D5\u65B0\u9810\u89BD","Launch preview in...":"\u5728...\u4E2D\u555F\u52D5\u9810\u89BD\u2026\u2026","Launch preview with debugger and profiler":"\u4F7F\u7528\u8ABF\u8A66\u5668(debugger)\u548C\u914D\u7F6E\u6587\u4EF6\u555F\u52D5\u9810\u89BD","Launch preview with diagnostic report":"\u555F\u52D5\u5E36\u6709\u8A3A\u65B7\u5831\u544A\u7684\u9810\u89BD","Layer":"\u5716\u5C64","Layer (text)":"\u5716\u5C64(\u6587\u672C)","Layer effect (text)":"\u5716\u5C64\u7279\u6548 (\u6587\u672C)","Layer effect name":"\u5716\u5C64\u6548\u679C\u540D\u7A31","Layer effect property (text)":"\u5716\u5C64\u6548\u679C\u5C6C\u6027 (\u6587\u672C)","Layer effect property name":"\u5716\u5C64\u6548\u679C\u5C6C\u6027\u540D\u7A31","Layer properties":"\u5716\u5C64\u5C6C\u6027","Layer where instances are added by default":"\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\u6DFB\u52A0\u5BE6\u4F8B\u7684\u5716\u5C64","Layers":"\u5716\u5C64","Layers list":"\u5716\u5C64\u5217\u8868","Layers:":"\u5716\u5C64\uFF1A","Layouts":"\u5E03\u5C40(layouts)","Leaderboard":"\u6392\u884C\u699C","Leaderboard (text)":"\u6392\u884C\u699C (\u6587\u672C)","Leaderboard appearance":"\u6392\u884C\u699C\u5916\u89C0","Leaderboard name":"\u6392\u884C\u699C\u540D\u7A31","Leaderboard options":"\u6392\u884C\u699C\u9078\u9805","Leaderboards":"\u6392\u884C\u699C","Leaderboards help retain your players":"\u6392\u884C\u699C\u5E6B\u52A9\u4FDD\u7559\u4F60\u7684\u73A9\u5BB6","Learn":"\u5B78\u7FD2","Learn about revenue on gd.games":"\u4E86\u89E3 gd.games \u4E0A\u7684\u6536\u5165","Learn all the game-building mechanics of GDevelop":"\u5B78\u7FD2GDevelop\u7684\u6240\u6709\u6E38\u6232\u69CB\u5EFA\u6A5F\u5236","Learn by dissecting ready-made games":"\u901A\u904E\u62C6\u89E3\u73FE\u6210\u904A\u6232\u4F86\u5B78\u7FD2","Learn how to make <0>multiplayer games with GDevelop.":"\u5B78\u7FD2\u5982\u4F55\u4F7F\u7528 GDevelop \u88FD\u4F5C<0>\u591A\u4EBA\u904A\u6232\u3002","Learn how to use <0>leaderboards on GDevelop.":"\u5B78\u7FD2\u5982\u4F55\u5728 GDevelop \u4E0A\u4F7F\u7528<0>\u6392\u884C\u699C\u3002","Learn more":"\u4E86\u89E3\u66F4\u591A","Learn more about Instant Games publication":"\u4E86\u89E3\u66F4\u591A\u95DC\u4E8E\u5373\u6642\u6E38\u6232\u767C\u5E03\u7684\u4FE1\u606F","Learn more about manual builds":"\u4E86\u89E3\u6709\u95DC\u624B\u52D5\u69CB\u5EFA\u7684\u66F4\u591A\u4FE1\u606F","Learn more about publishing to platforms":"\u4E86\u89E3\u6709\u95DC\u767C\u5E03\u5230\u5E73\u81FA\u7684\u66F4\u591A\u4FE1\u606F","Learn section":"\u5B78\u7FD2\u90E8\u5206","Learn the fundamental principles of GDevelop":"\u5B78\u7FD2GDevelop \u7684\u57FA\u672C\u539F\u7406","Leave":"\u96E2\u958B","Leave and lose all changes":"\u96E2\u958B\u4E26\u4E1F\u5931\u6240\u6709\u66F4\u6539","Leave the customization?":"\u8981\u96E2\u958B\u81EA\u8A02\u55CE\uFF1F","Leave the tutorial":"\u96E2\u958B\u6559\u7A0B","Left":"\u5DE6","Left (primary)":"\u5DE6 (\u4E3B\u8981)","Left bound":"\u5DE6\u908A\u754C","Left bound should be smaller than right bound":"\u5DE6\u908A\u754C\u61C9\u5C0F\u65BC\u53F3\u908A\u754C","Left face":"\u5DE6\u9762","Left margin":"\u5DE6\u908A\u8DDD","Length":"\u9577\u5EA6","Less than a month":"\u4E0D\u5230\u4E00\u500B\u6708","Let me lay out the steps:":"\u8B93\u6211\u5217\u51FA\u9019\u4E9B\u6B65\u9A5F\uFF1A","Let the user select":"\u8B93\u7528\u6236\u9078\u64C7","Let's finish your game, shall we?":"\u8B93\u6211\u5011\u5B8C\u6210\u4F60\u7684\u904A\u6232\uFF0C\u597D\u55CE\uFF1F","Let's go":"\u8B93\u6211\u5011\u4F86\u5427","Level {0}":function(a){return["\u7B49\u7D1A ",a("0")]},"License":"\u8A31\u53EF\u8B49","Licensing":"\u8A31\u53EF\u5354\u8B70","Lifecycle functions (advanced)":"\u751F\u547D\u5468\u671F\u51FD\u6578(\u9AD8\u7D1A)","Lifecycle functions only included when extension used":"\u751F\u547D\u5468\u671F\u51FD\u6578\u50C5\u7576\u4F7F\u7528\u64F4\u5C55\u6642\u624D\u6703\u88AB\u5305\u542B","Lifecycle methods":"\u751F\u547D\u5468\u671F\u65B9\u6CD5","Lifetime access":"\u7D42\u751F\u8A2A\u554F","Light (colored)":"\u6DFA\u8272(\u8457\u8272)","Light (plain)":"\u6DFA\u8272(\u5E73\u539F)","Light object automatically put in lighting layer":"\u5149\u7167\u7269\u4EF6\u81EA\u52D5\u653E\u5165\u7167\u660E\u5716\u5C64","Lighting settings":"\u7167\u660E\u8A2D\u7F6E","Limit cannot be empty, uncheck or fill a value between {extremeAllowedScoreMin} and {extremeAllowedScoreMax}.":function(a){return["\u6975\u9650\u4E0D\u80FD\u70BA\u7A7A\uFF0C\u53D6\u6D88\u9078\u4E2D\u6216\u586B\u5BEB\u5728 ",a("extremeAllowedScoreMin")," \u548C ",a("extremeAllowedScoreMax")," \u4E4B\u9593\u7684\u503C\u3002"]},"Limit scores":"\u9650\u5236\u5206\u6578","Limited time offer:":"\u9650\u6642\u512A\u60E0\uFF1A","Line":"\u7DDA","Line color":"\u7DDA\u689D\u984F\u8272","Line height":"\u884C\u9AD8","Linear (antialiased rendering, good for most games)":"\u7DDA\u6027 (\u6297\u92F8\u9F52\u6E32\u67D3, \u9069\u7528\u4E8E\u5927\u591A\u6578\u6E38\u6232)","Lines length":"\u7DDA\u689D\u9577\u5EA6","Lines thickness":"\u7DDA\u689D\u539A\u5EA6","Links can't be used outside of a scene.":"\u4E0D\u80FD\u5728\u5834\u666F\u5916\u4F7F\u7528\u93C8\u63A5\u3002","Linux (AppImage)":"Linux (AppImage)","Live Ops & Analytics":"\u5BE6\u6642\u904B\u71DF\u8207\u5206\u6790","Live preview (apply changes to the running preview)":"\u5BE6\u6642\u9810\u89BD(\u61C9\u7528\u66F4\u6539\u5230\u6B63\u5728\u904B\u884C\u7684\u9810\u89BD)","Load autosave":"\u52A0\u8F09\u81EA\u52D5\u4FDD\u5B58","Load local lesson":"\u8F09\u5165\u672C\u5730\u8AB2\u7A0B","Load more":"\u52A0\u8F09\u66F4\u591A","Load more...":"\u52A0\u8F09\u66F4\u591A...","Loading":"\u6B63\u5728\u52A0\u8F09","Loading Position":"\u52A0\u8F09\u4F4D\u7F6E","Loading course...":"\u6B63\u5728\u52A0\u8F09\u8AB2\u7A0B...","Loading preview...":"\u6B63\u5728\u52A0\u8F09\u9810\u89BD...","Loading screen":"\u52A0\u8F09\u5C4F\u5E55","Loading the game link...":"\u6B63\u5728\u52A0\u8F09\u904A\u6232\u93C8\u63A5\u2026\u2026","Loading the game...":"\u6B63\u5728\u52A0\u8F09\u60A8\u7684\u6E38\u6232\u2026\u2026","Loading your profile...":"\u6B63\u5728\u52A0\u8F09\u60A8\u7684\u500B\u4EBA\u8CC7\u6599...","Loading...":"\u6B63\u5728\u52A0\u8F09\u2026\u2026","Lobby":"\u5927\u5EF3","Lobby configuration":"\u5927\u5EF3\u914D\u7F6E","Local Variable":"\u5C40\u90E8\u8B8A\u6578","Local variables":"\u5C40\u90E8\u8B8A\u91CF","Locate file":"\u5B9A\u4F4D\u6587\u4EF6","Location":"\u4F4D\u7F6E","Lock position/angle in the editor":"\u9396\u5B9A\u7DE8\u8F2F\u5668\u4E2D\u7684\u4F4D\u7F6E/\u89D2\u5EA6","Locked":"\u5DF2\u9396\u5B9A","Log in":"\u767B\u9304","Log in to your account":"\u767B\u9304\u5230\u60A8\u7684\u5E33\u6236","Log in to your account to activate your purchase!":"\u767B\u9304\u60A8\u7684\u5E33\u6236\u4EE5\u555F\u7528\u60A8\u7684\u8CFC\u8CB7\uFF01","Log-in to purchase these credits":"\u767B\u9304\u4EE5\u8CFC\u8CB7\u9019\u4E9B\u7A4D\u5206","Log-in to purchase this course":"\u767B\u9304\u4EE5\u8CFC\u8CB7\u9019\u500B\u8AB2\u7A0B","Log-in to purchase this item":"\u767B\u9304\u4EE5\u8CFC\u8CB7\u6B64\u9805\u76EE","Login":"\u767B\u9304","Login now":"\u7ACB\u5373\u767B\u9304","Login with GDevelop":"\u4F7F\u7528 GDevelop \u767B\u9304","Logo and progress fade in delay (in seconds)":"\u6A19\u5FD7\u548C\u9032\u5EA6\u5EF6\u9072\u6DE1\u5165\u6DE1\u51FA(\u79D2)","Logo and progress fade in duration (in seconds)":"\u6A19\u5FD7\u548C\u9032\u5EA6\u6DE1\u5165\u6301\u7E8C\u6642\u9593(\u79D2)","Logout":"\u767B\u51FA","Long":"\u9577","Long description":"\u8A73\u7D30\u63CF\u8FF0","Long press for more events":"\u9577\u6309\u53EF\u67E5\u770B\u66F4\u591A\u4E8B\u4EF6","Long press for quick menu":"\u9577\u6309\u53EF\u7372\u53D6\u5FEB\u6377\u83DC\u55AE","Looks like your project isn't there!{0}Your project must be stored on your computer.":function(a){return["\u60A8\u7684\u9805\u76EE\u4F3C\u4E4E\u4E0D\u5728\u90A3\u88E1\uFF01",a("0"),"\u60A8\u7684\u9805\u76EE\u5FC5\u9808\u5132\u5B58\u5728\u60A8\u7684\u8A08\u7B97\u6A5F\u4E0A\u3002"]},"Loop":"\u5FAA\u74B0","Loop Counter Variable":"\u8FF4\u5708\u8A08\u6578\u5668\u8B8A\u6578","Low quality":"\u4F4E\u8CEA\u91CF","Lower is better":"\u4E0B\u65B9\u8F03\u597D","Lower is better (min: {formattedScore})":function(a){return["\u8D8A\u4F4E\u8D8A\u597D(\u6700\u5C0F\uFF1A ",a("formattedScore"),")"]},"Make a character move like in a retro Pokemon game.":"\u8B93\u89D2\u8272\u50CF\u5FA9\u53E4\u7684Pok\xE9mon\u904A\u6232\u4E00\u6A23\u79FB\u52D5\u3002","Make a knight jump and run in this platformer game.":"\u5728\u9019\u500B\u5E73\u53F0\u904A\u6232\u4E2D\u8B93\u9A0E\u58EB\u8DF3\u8E8D\u548C\u5954\u8DD1\u3002","Make a knight jump and run.":"\u8B93\u9A0E\u58EB\u8DF3\u8E8D\u4E26\u5954\u8DD1\u3002","Make a minimal 3D shooter":"\u88FD\u4F5C\u4E00\u500B\u6700\u7C21\u55AE\u7684 3D \u5C04\u64CA\u904A\u6232","Make an entire game":"\u88FD\u4F5C\u6574\u500B\u904A\u6232","Make asynchronous":"\u9032\u884C\u7570\u6B65\u64CD\u4F5C","Make complete games step by step":"\u9010\u6B65\u5B8C\u6210\u5B8C\u6574\u7684\u6E38\u6232","Make it a Else for the previous event":"\u70BA\u4E4B\u524D\u7684\u4E8B\u4EF6\u88FD\u4F5C ELSE","Make private":"\u79C1\u5BC6\u8A2D\u7F6E","Make public":"\u516C\u958B\u8A2D\u7F6E","Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.":"Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.","Make sure to verify all your events creating objects, and optionally add an action to set the Z order back to 0 if it's important for your game. Do you want to continue (recommended)?":"\u78BA\u4FDD\u9A57\u8B49\u6240\u6709\u5275\u5EFA\u5C0D\u8C61\u7684\u4E8B\u4EF6\uFF0C\u5982\u679C\u9019\u5C0D\u60A8\u7684\u6E38\u6232\u5F88\u91CD\u8981\uFF0C\u5247\u53EF\u4EE5\u9078\u64C7\u6DFB\u52A0\u4E00\u500B\u64CD\u4F5C\u5C07 Z \u9806\u5E8F\u8A2D\u7F6E\u56DE 0\u3002\u662F\u5426\u7E7C\u7E8C(\u63A8\u85A6)\uFF1F","Make sure to verify your events and variables that may rely on string variables defaulting to \"0\". Do you want to continue (recommended)?":"\u8ACB\u78BA\u4FDD\u9A57\u8B49\u60A8\u7684\u4E8B\u4EF6\u548C\u8B8A\u6578\uFF0C\u9019\u4E9B\u8B8A\u6578\u53EF\u80FD\u4F9D\u8CF4\u65BC\u9810\u8A2D\u70BA\"0\"\u7684\u5B57\u4E32\u8B8A\u6578\u3002\u60A8\u60F3\u8981\u7E7C\u7E8C\u55CE\uFF08\u5EFA\u8B70\uFF09\uFF1F","Make sure you create your GitHub account, star the repository called 4ian/GDevelop, enter your username here and try again.":"\u78BA\u4FDD\u60A8\u5275\u5EFA\u4E86\u60A8\u7684GitHub\u5E33\u6236\uFF0C\u5728\u540D\u70BA4ian/GDevelopup\u7684\u5B58\u5132\u5EAB\u4E2D\u6DFB\u52A0\u661F\u865F\uFF0C\u5728\u6B64\u8655\u8F38\u5165\u60A8\u7684\u7528\u6236\u540D\uFF0C\u7136\u540E\u91CD\u8A66\u3002","Make sure you follow the GDevelop account and try again.":"\u78BA\u4FDD\u60A8\u95DC\u6CE8 GDevelop \u5E33\u6236\u5E76\u91CD\u8A66\u3002","Make sure you have a proper internet connection or try again later.":"\u78BA\u4FDD\u60A8\u6709\u6B63\u78BA\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Make sure you star the repository called 4ian/GDevelop with your GitHub user and try again.":"\u8ACB\u78BA\u4FDD\u5C07\u540D\u70BA4ian/GDevelopup\u7684\u5B58\u5132\u5EAB\u8207\u60A8\u7684GitHub\u7528\u6236\u4E00\u8D77\u52A0\u5165\uFF0C\u7136\u540E\u91CD\u8A66\u3002","Make sure you subscribed to the GDevelop channel and try again.":"\u78BA\u4FDD\u60A8\u5DF2\u8A02\u95B1 GDevelop \u983B\u9053\u4E26\u91CD\u8A66\u3002","Make sure you're online, have a proper internet connection and try again. If you download and use GDevelop desktop application, you can also run previews without any internet connection.":"\u8ACB\u78BA\u4FDD\u60A8\u5728\u7DDA\uFF0C\u6709\u9069\u7576\u7684\u4E92\u806F\u7DB2\u9023\u63A5\uFF0C\u7136\u540E\u91CD\u8A66\u3002 \u5982\u679C\u60A8\u4E0B\u8F09\u5E76\u4F7F\u7528 GDevelop \u684C\u9762\u61C9\u7528\u7A0B\u5E8F\uFF0C\u60A8\u4E5F\u53EF\u4EE5\u5728\u6C92\u6709\u7DB2\u7D61\u9023\u63A5\u7684\u60C5\u6CC1\u4E0B\u904B\u884C\u9810\u89BD\u3002","Make sure your username is correct, follow the GDevelop account and try again.":"\u78BA\u4FDD\u60A8\u7684\u7528\u6236\u540D\u6B63\u78BA\uFF0C\u95DC\u6CE8 GDevelop \u5E33\u6236\u5E76\u91CD\u8A66\u3002","Make sure your username is correct, subscribe to the GDevelop channel and try again.":"\u78BA\u4FDD\u60A8\u7684\u7528\u6236\u540D\u6B63\u78BA\uFF0C\u8A02\u95B1 GDevelop \u983B\u9053\u4E26\u91CD\u8A66\u3002","Make synchronous":"\u540C\u6B65\u5316","Make the leaderboard public":"\u516C\u958B\u6392\u884C\u699C","Make the purpose of the property easy to understand":"\u4F7F\u8A72\u5C6C\u6027\u7684\u76EE\u7684\u6613\u4E8E\u4E86\u89E3","Make your game title":"\u88FD\u4F5C\u60A8\u7684\u904A\u6232\u6A19\u984C","Make your game visible to the GDevelop community and to the world with <0>Marketing Boosts.":"\u900F\u904E <0>\u71DF\u92B7\u63A8\u5EE3 \u8B93\u60A8\u7684\u904A\u6232\u5C0D GDevelop \u793E\u5340\u548C\u5168\u4E16\u754C\u53EF\u898B\u3002","Make your game visible to the GDevelop community and to the world with Marketing Boosts.":"\u8B93\u60A8\u7684\u904A\u6232\u901A\u904E\u71DF\u92B7\u63A8\u5EE3\u5728 GDevelop \u793E\u5340\u548C\u5168\u4E16\u754C\u53EF\u898B\u3002","Make your game visible to the GDevelop community and to the world with Marketing Boosts. <0>Read more about how they increase your views.":"\u8B93\u60A8\u7684\u904A\u6232\u901A\u904E\u71DF\u92B7\u63A8\u5EE3\u5728 GDevelop \u793E\u5340\u548C\u5168\u4E16\u754C\u53EF\u898B\u3002 <0>\u4E86\u89E3\u66F4\u591A \u95DC\u65BC\u5B83\u5011\u5982\u4F55\u589E\u52A0\u60A8\u7684\u700F\u89BD\u91CF\u3002","Making \"{objectOrGroupName}\" global would conflict with the following scenes that have a group or an object with the same name:{0}Continue only if you know what you're doing.":function(a){return["\u4F7F\u201C",a("objectOrGroupName"),"\u201D\u5168\u5C40\u5316\u5C07\u8207\u4E0B\u5217\u5177\u6709\u76F8\u540C\u540D\u7A31\u7684\u7D44\u6216\u5C0D\u8C61\u7684\u5834\u666F\u6C96\u7A81: ",a("0"),"\u53EA\u6709\u5728\u60A8\u77E5\u9053\u6B63\u5728\u505A\u4EC0\u4E48\u7684\u60C5\u6CC1\u4E0B\u624D\u7E7C\u7E8C\u3002"]},"Manage":"\u7BA1\u7406","Manage game online":"\u5728\u7DDA\u7BA1\u7406\u904A\u6232","Manage leaderboards":"\u7BA1\u7406\u6392\u884C\u699C","Manage payments":"\u7BA1\u7406\u4ED8\u6B3E","Manage seats":"\u7BA1\u7406\u5EA7\u4F4D","Manage subscription":"\u7BA1\u7406\u8A02\u95B1","Manual build":"\u624B\u52D5\u69CB\u5EFA","Mark all as read":"\u5168\u90E8\u6A19\u8A18\u70BA\u5DF2\u8B80","Mark all as solved":"\u5168\u90E8\u6A19\u8A18\u70BA\u5DF2\u89E3\u6C7A","Mark as read":"\u6A19\u8A18\u70BA\u5DF2\u8B80","Mark as unread":"\u6A19\u8A18\u70BA\u672A\u8B80","Mark this function as deprecated to discourage its use.":"\u5C07\u6B64\u529F\u80FD\u6A19\u8A18\u70BA\u904E\u6642\u4EE5\u963B\u6B62\u5176\u4F7F\u7528\u3002","Marketing":"\u5E02\u5834\u71DF\u92B7","Marketing campaigns":"\u71DF\u92B7\u6D3B\u52D5","Match case":"\u5339\u914D\u5927\u5C0F\u5BEB","Maximum 2D drawing distance":"\u6700\u5927 2D \u7E6A\u5716\u8DDD\u96E2","Maximum FPS (0 for unlimited)":"\u6700\u5927 FPS (0\uFF0C\u7121\u9650\u5236)","Maximum Fps is too low":"\u6700\u5927\u5E40\u7387\u592A\u4F4E","Maximum emitter force applied on particles":"\u65BD\u52A0\u5728\u7C92\u5B50\u4E0A\u7684\u6700\u5927\u767C\u5C04\u529B","Maximum number of particles displayed":"\u986F\u793A\u7684\u6700\u5927\u7C92\u5B50\u6578","Maximum number of players per lobby":"\u6BCF\u500B\u5927\u5EF3\u7684\u6700\u5927\u73A9\u5BB6\u6578\u91CF","Maximum score":"\u6700\u5927\u5206\u6578","Me":"\u6211","Mean played time":"\u5E73\u5747\u6E38\u6232\u6642\u9593","Measurement unit":"\u6E2C\u91CF\u55AE\u4F4D","Medium":"\u4E2D","Medium quality":"\u4E2D\u7B49\u8CEA\u91CF","Memory Tracker Registry":"\u8A18\u61B6\u8FFD\u8E64\u5668\u767B\u8A18\u7C3F","Menu":"\u83DC\u55AE","Mesh shapes are only supported for 3D model objects.":"\u53EA\u652F\u63F4 3D \u6A21\u578B\u7269\u4EF6\u7684\u7DB2\u683C\u5F62\u72C0\u3002","Message":"Message","Middle (Auxiliary button, usually the wheel button)":"\u4E2D\u9375 (\u8F14\u52A9\u6309\u9215\uFF0C\u901A\u5E38\u662F\u8F2A\u9375)","Minimize":"\u6700\u5C0F\u5316","Minimum FPS":"\u6700\u5C0FFPS","Minimum Fps is too low":"\u6700\u5C0F\u5E40\u592A\u4F4E","Minimum duration of the screen (in seconds)":"\u5C4F\u5E55\u6700\u5C0F\u6301\u7E8C\u6642\u9593(\u79D2)","Minimum emitter force applied on particles":"\u65BD\u52A0\u5728\u7C92\u5B50\u4E0A\u7684\u6700\u5C0F\u767C\u5C04\u529B","Minimum number of players to start the lobby":"\u5927\u5EF3\u7684\u6700\u4F4E\u73A9\u5BB6\u6578\u91CF","Minimum score":"\u6700\u5C0F\u5206\u6578","Minutes":"\u5206","Missing actions/conditions/expressions ( {missingInstructionsCount})":function(a){return["\u7F3A\u5C11\u52D5\u4F5C/\u689D\u4EF6/\u8868\u9054\u5F0F ( ",a("missingInstructionsCount"),")"]},"Missing behaviors for object \"{objectName}\"":function(a){return["\u5C0D\u8C61 \u201C",a("objectName"),"\u201D \u7F3A\u5C11\u884C\u70BA"]},"Missing instructions":"\u7F3A\u5C11\u6307\u4EE4","Missing objects":"\u7F3A\u5931\u7684\u7269\u4EF6","Missing scene variables":"\u7F3A\u5C11\u5834\u666F\u8B8A\u91CF","Missing some contributions? If you are the author, create a Pull Request on the corresponding GitHub repository after adding your username in the authors of the example or the extension - or directly ask the original author to add your username.":"\u7F3A\u5C11\u4E00\u4E9B\u8CA2\u737B\uFF1F \u5982\u679C\u4F60\u662F\u4F5C\u8005\uFF0C \u5728\u76F8\u61C9\u7684 GitHub \u5009\u5EAB\u6DFB\u52A0\u60A8\u7684\u7528\u6236\u540D\u6216\u64F4\u5C55\u7684\u4F5C\u8005\u540E\u5275\u5EFA\u5408\u5E76\u8ACB\u6C42 - \u6216\u76F4\u63A5\u8981\u6C42\u539F\u4F5C\u8005\u6DFB\u52A0\u60A8\u7684\u7528\u6236\u540D\u3002","Missing texture atlas name in the Spine file.":"Spine \u6587\u4EF6\u4E2D\u7F3A\u5C11\u7D0B\u7406\u5716\u96C6\u540D\u7A31\u3002","Missing texture for an atlas in the Spine file.":"Spine \u6587\u4EF6\u4E2D\u7F3A\u5C11\u5716\u96C6\u7684\u7D0B\u7406\u3002","Missing variables for object \"{objectName}\"":function(a){return["\u5C0D\u8C61 \u201C",a("objectName"),"\u201D \u7F3A\u5C11\u8B8A\u91CF"]},"Mixed":"\u6DF7\u5408","Mixed values":"\u6DF7\u5408\u503C","Mobile":"\u79FB\u52D5\u8A2D\u5099","Mobile portrait":"\u79FB\u52D5\u8C4E\u5C4F\u6A21\u5F0F","Modifying":"\u6B63\u5728\u4FEE\u6539","Month":"\u6708","Monthly, {0}":function(a){return["\u6BCF\u6708\uFF0C",a("0")]},"Monthly, {0} per seat":function(a){return["\u6BCF\u6708\uFF0C",a("0")," \u6BCF\u500B\u540D\u984D"]},"More details (optional)":"\u66F4\u591A\u7D30\u7BC0 (\u53EF\u9078)","More than 6 months":"\u8D85\u904E 6 \u500B\u6708","Most browsers will require the user to have interacted with your game before allowing any video to play. Make sure that the player click/touch the screen at the beginning of the game before starting any video.":"\u5927\u591A\u6578\u700F\u89BD\u5668\u5C07\u8981\u6C42\u7528\u6236\u5728\u5141\u8A31\u4EFB\u4F55\u8996\u983B\u64AD\u653E\u4E4B\u524D\u8207\u60A8\u7684\u6E38\u6232\u4E92\u52D5\u3002\u8ACB\u78BA\u4FDD\u73A9\u5BB6\u5728\u6E38\u6232\u958B\u59CB\u524D\u9EDE\u64CA/\u89F8\u6478\u5C4F\u5E55\u3002","Most monitors have a refresh rate of 60 FPS. Setting a maximum number of FPS under 60 will force the game to skip frames, and the real number of FPS will be way below 60, making the game laggy and impacting the gameplay negatively. Consider putting 60 or more for the maximum number or FPS, or disable it by setting 0.":"\u5927\u591A\u6578\u986F\u793A\u5C4F\u90FD\u670960\u5E40\u7684\u5237\u65B0\u7387\u3002\u628A\u6700\u9AD8\u5E40\u6578\u9650\u5236\u572860\u5E40\u4E00\u4E0B\u6703\u9020\u6210\u9583\u5E40\uFF0C\u8DF3\u5E40\uFF0C\u7522\u751F\u8CA0\u9762\u5F71\u97FF\uFF0C\u8ACB\u8B93\u6700\u9AD8\u5E40\u6578\u5927\u96E860\u5E40\u6216\u4E0D\u9650\u5236","Most sessions (all time)":"\u5927\u591A\u6578\u6703\u8A71\uFF08\u6240\u6709\u6642\u9593\uFF09","Most sessions (past 7 days)":"\u5927\u591A\u6578\u6703\u8B70\uFF08\u904E\u53BB 7 \u5929\uFF09","Mouse button":"\u9F20\u6A19\u6309\u9375","Mouse button (deprecated)":"\u9F20\u6A19\u6309\u9215\uFF08\u5DF2\u68C4\u7528\uFF09","Mouse button (text)":"\u9F20\u6A19\u6309\u9215 (\u6587\u672C)","Move Events into a Group":"\u5C07\u4E8B\u4EF6\u79FB\u52D5\u5230\u7D44","Move down":"\u5411\u4E0B\u79FB\u52D5","Move events into a new group":"\u5C07\u4E8B\u4EF6\u79FB\u52D5\u5230\u65B0\u7D44\u4E2D","Move instances":"\u79FB\u52D5\u5BE6\u4F8B","Move like in retro Pokemon games.":"\u50CF\u5728\u5FA9\u53E4\u7684\u5BF6\u53EF\u5922\u904A\u6232\u4E2D\u79FB\u52D5\u3002","Move objects":"\u79FB\u52D5\u5C0D\u8C61","Move objects from layer {0} to:":function(a){return["\u5C07\u5C0D\u8C61\u5F9E\u5716\u5C64 ",a("0")," \u79FB\u52D5\u5230\uFF1A"]},"Move to bottom":"\u79FB\u52D5\u5230\u5E95\u90E8","Move to folder":"\u79FB\u52D5\u5230\u6587\u4EF6\u593E","Move to position {index}":function(a){return["\u79FB\u52D5\u5230\u4F4D\u7F6E ",a("index")]},"Move to top":"\u79FB\u52D5\u5230\u9802\u90E8","Move up":"\u5411\u4E0A\u79FB\u52D5","Move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5C07 ",a("existingInstanceCount")," <0>",a("object_name")," \u5BE6\u4F8B\u79FB\u52D5\u5230 ",a("0"),"\uFF08\u5716\u5C64\uFF1A",a("1"),"\uFF09\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u3002"]},"Movement":"\u79FB\u52D5","Multiline":"\u591A\u884C","Multiline text":"\u591A\u884C\u6587\u672C","Multiplayer":"\u591A\u4EBA\u6E38\u6232","Multiplayer lobbies":"\u591A\u4EBA\u904A\u6232\u5927\u5EF3","Multiple files, saved in folder next to the main file":"\u591A\u500B\u6587\u4EF6\uFF0C\u4FDD\u5B58\u5728\u4E3B\u6587\u4EF6\u593E\u65C1\u908A\u7684\u6587\u4EF6\u593E","Multiple frames":"\u591A\u5E40","Multiple states":"\u591A\u500B\u72C0\u614B","Multiply scores with collectibles.":"\u7528\u6536\u96C6\u54C1\u4F86\u4E58\u4EE5\u5206\u6578\u3002","Music":"\u97F3\u6A02","Musics will only be played if the user has interacted with the game before (by clicking/touching it or pressing a key on the keyboard). This is due to browser limitations. Make sure to have the user interact with the game before using this action.":"\u53EA\u6709\u7576\u7528\u6236\u8207\u6E38\u6232\u4EA4\u4E92\u904E(\u901A\u904E\u9EDE\u64CA/\u89F8\u6478\u6216\u6309\u4E0B\u4E00\u500B\u9375\u76E4\u6309\u9375)\uFF0C\u624D\u80FD\u64AD\u653E\u97F3\u6A02\u3002\u9019\u662F\u700F\u89BD\u5668\u7684\u9650\u5236\u3002\u8ACB\u78BA\u4FDD\u4F7F\u7528\u8A72\u52D5\u4F5C\u524D\uFF0C\u5148\u8B93\u7528\u6236\u8207\u6E38\u6232\u9032\u884C\u4EA4\u4E92\u3002","My Profile":"\u6211\u7684\u500B\u4EBA\u8CC7\u6599","My manual save":"\u6211\u7684\u624B\u52D5\u4FDD\u5B58","My profile":"\u6211\u7684\u500B\u4EBA\u8CC7\u6599","MyObject":"\u6211\u7684\u7269\u4EF6","NPM":"NPM","Name":"\u540D\u7A31","Name (optional)":"\u540D\u7A31 (\u53EF\u9078)","Name displayed in editor":"\u7DE8\u8F2F\u5668\u4E2D\u986F\u793A\u7684\u540D\u7A31","Name of the external layout":"\u5916\u90E8\u5E03\u5C40\u540D\u7A31","Name version":"\u540D\u7A31\u7248\u672C","Narrative & Writing":"\u6558\u4E8B\u8207\u5BEB\u4F5C","Near plane distance":"\u8FD1\u5E73\u9762\u8DDD\u96E2","Nearest (no antialiasing, good for pixel perfect games)":"\u6700\u8FD1 (\u7121\u6297\u92F8\u9F52, \u9069\u5408\u9AD8\u50CF\u7D20\u6E38\u6232)","Need latest GDevelop version":"\u9700\u8981\u6700\u65B0\u7684 GDevelop \u7248\u672C","Need more?":"\u9700\u8981\u66F4\u591A\u55CE\uFF1F","Network":"\u7DB2\u7D61","Never":"\u5F9E\u4E0D","Never preload":"\u6C38\u9060\u4E0D\u9810\u52A0\u8F09","Never unload":"\u6C38\u9060\u4E0D\u5378\u8F09","Never unload (default)":"\u6C38\u9060\u4E0D\u5378\u8F09\uFF08\u9ED8\u8A8D\uFF09","New":"\u65B0\u7684","New 3D editor":"\u65B0 3D \u7DE8\u8F2F\u5668","New Apple Certificate/Profile":"\u65B0\u7684 Apple \u8B49\u66F8/\u914D\u7F6E\u6587\u4EF6","New Auth Key (App Store upload)":"\u65B0\u7684\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470 (\u61C9\u7528\u5546\u5E97\u4E0A\u50B3)","New Event Below":"\u5728\u4E0B\u65B9\u6DFB\u52A0\u65B0\u4E8B\u4EF6","New Object dialog":"\u65B0\u5EFA\u5C0D\u8C61\u5C0D\u8A71\u6846","New chat":"\u65B0\u7684\u5C0D\u8A71","New extension name":"\u65B0\u64F4\u5C55\u540D\u7A31","New group name":"\u65B0\u7D44\u540D","New interactive services for clients":"\u70BA\u5BA2\u6236\u63D0\u4F9B\u65B0\u7684\u4EA4\u4E92\u670D\u52D9","New lesson every month with the Education subscription":"\u6BCF\u6708\u64C1\u6709\u65B0\u8AB2\u7A0B\uFF0C\u9069\u7528\u65BC\u6559\u80B2\u8A02\u95B1","New object":"\u65B0\u5EFA\u5C0D\u8C61","New object from scratch":"\u5F9E\u96F6\u958B\u59CB\u5275\u5EFA\u65B0\u5C0D\u8C61","New resource":"\u65B0\u8CC7\u6E90","New variant":"New variant","Next":"\u4E0B\u4E00\u500B","Next actions (and sub-events) will wait for this action to be finished before running.":"\u4E0B\u4E00\u500B\u52D5\u4F5C(\u548C\u5B50\u4E8B\u4EF6)\u5C07\u7B49\u5F85\u6B64\u52D5\u4F5C\u5B8C\u6210\u540E\u624D\u80FD\u904B\u884C\u3002","Next page":"\u4E0B\u4E00\u9801","Next: Game logo":"\u4E0B\u4E00\u6B65\uFF1A\u904A\u6232\u6A19\u8A8C","Next: Tweak Gameplay":"\u4E0B\u4E00\u6B65\uFF1A\u8ABF\u6574\u904A\u6232\u73A9\u6CD5","No":"\u5426","No GDevelop user with this email can be found.":"\u627E\u4E0D\u5230\u5177\u6709\u8A72\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u7684 GDevelop \u7528\u6236\u3002","No access to project save":"\u7121\u6CD5\u5B58\u53D6\u5C08\u6848\u5132\u5B58","No atlas image configured.":"\u672A\u914D\u7F6E\u5716\u96C6\u5716\u50CF\u3002","No behavior":"No behavior","No bio defined.":"\u6C92\u6709\u5B9A\u7FA9bio\u3002","No changes to the game size":"\u6E38\u6232\u5927\u5C0F\u6C92\u6709\u8B8A\u5316","No children":"\u6C92\u6709\u5B50\u9805","No cycle":"\u7121\u5FAA\u74B0","No data to show yet. Share your game creator profile with more people to get more players!":"\u5C1A\u7121\u6578\u64DA\u53EF\u986F\u793A\u3002\u8207\u66F4\u591A\u4EBA\u5206\u4EAB\u60A8\u7684\u904A\u6232\u5275\u9020\u8005\u8CC7\u6599\u4EE5\u5438\u5F15\u66F4\u591A\u73A9\u5BB6\uFF01","No entries":"\u6C92\u6709\u53C3\u8CFD\u4F5C\u54C1","No experience at all":"\u5B8C\u5168\u6C92\u6709\u7D93\u9A57","No forum account was found with email {0}. Make sure you have created an account on the GDevelop forum with this email.":function(a){return["\u672A\u627E\u5230\u4F7F\u7528\u96FB\u5B50\u90F5\u4EF6 ",a("0")," \u7684\u8AD6\u58C7\u5E33\u865F\u3002\u8ACB\u78BA\u4FDD\u60A8\u5728 GDevelop \u8AD6\u58C7\u4E0A\u4F7F\u7528\u6B64\u96FB\u5B50\u90F5\u4EF6\u5275\u5EFA\u4E86\u5E33\u865F\u3002"]},"No game matching your search.":"\u6C92\u6709\u5339\u914D\u60A8\u641C\u7D22\u7684\u6E38\u6232\u3002","No information about available updates.":"\u6C92\u6709\u53EF\u7528\u66F4\u65B0\u7684\u4FE1\u606F\u3002","No inspector, choose another element in the list or toggle the raw data view.":"\u6C92\u6709\u6AA2\u67E5\u5668, \u8ACB\u5728\u5217\u8868\u4E2D\u9078\u64C7\u53E6\u4E00\u500B\u5143\u7D20\u6216\u5207\u63DB\u539F\u59CB\u6578\u64DA\u8996\u5716\u3002","No issues found in your project.":"\u60A8\u7684\u5C08\u6848\u4E2D\u672A\u767C\u73FE\u4EFB\u4F55\u554F\u984C\u3002","No leaderboard chosen":"\u6C92\u6709\u9078\u64C7\u6392\u884C\u699C","No leaderboards":"\u6C92\u6709\u6392\u884C\u699C","No lighting effect":"\u7121\u71C8\u5149\u6548\u679C","No link defined.":"\u672A\u5B9A\u7FA9\u93C8\u63A5\u3002","No matches found for \"{0}\".":function(a){return["\u672A\u627E\u5230 \"",a("0"),"\" \u7684\u5339\u914D\u9805\u3002"]},"No new animation":"\u6C92\u6709\u65B0\u52D5\u756B","No options":"\u6C92\u6709\u9078\u9805","No preview running. Run a preview and you will be able to inspect it with the debugger":"\u6C92\u6709\u9810\u89BD\u6B63\u5728\u904B\u884C\u3002\u904B\u884C\u9810\u89BD\uFF0C\u60A8\u5C07\u80FD\u5920\u4F7F\u7528\u8ABF\u8A66\u5668\u6AA2\u67E5\u5B83","No project save available":"\u6C92\u6709\u53EF\u7528\u7684\u5C08\u6848\u5132\u5B58","No project save is available for this request message.":"\u6B64\u8ACB\u6C42\u8A0A\u606F\u6C92\u6709\u6240\u9700\u7684\u5C08\u6848\u5132\u5B58\u3002","No project to open":"\u6C92\u6709\u9805\u76EE\u53EF\u6253\u958B","No projects found for this game. Open manually a local project to have it added to the game dashboard.":"\u672A\u627E\u5230\u6B64\u904A\u6232\u7684\u5C08\u6848\u3002\u8ACB\u624B\u52D5\u6253\u958B\u672C\u5730\u5C08\u6848\u4EE5\u5C07\u5176\u6DFB\u52A0\u81F3\u904A\u6232\u5100\u8868\u677F\u4E2D\u3002","No projects yet.":"\u5C1A\u7121\u9805\u76EE\u3002","No recent project":"\u6C92\u6709\u6700\u8FD1\u7684\u9805\u76EE","No result":"\u7121\u7D50\u679C","No results":"\u6C92\u6709\u7D50\u679C","No results returned for your search. Try something else or typing at least 2 characters.":"\u6C92\u6709\u8FD4\u56DE\u641C\u7D22\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u5176\u4ED6\u5167\u5BB9\u6216\u8F38\u5165\u81F3\u5C11 2 \u500B\u5B57\u7B26\u3002","No results returned for your search. Try something else!":"\u60A8\u7684\u641C\u7D22\u672A\u8FD4\u56DE\u4EFB\u4F55\u7D50\u679C\u3002\u8ACB\u5617\u8A66\u5176\u4ED6\u5167\u5BB9\uFF01","No results returned for your search. Try something else, browse the categories or create your object from scratch!":"\u6C92\u6709\u8FD4\u56DE\u641C\u7D22\u7D50\u679C\u3002\u5617\u8A66\u5176\u4ED6\u65B9\u6CD5\uFF0C\u700F\u89BD\u985E\u5225\u6216\u5F9E\u96F6\u958B\u59CB\u5275\u5EFA\u60A8\u7684\u5C0D\u8C61\uFF01","No shortcut":"\u7121\u5FEB\u6377\u65B9\u5F0F","No similar asset was found.":"\u672A\u767C\u73FE\u985E\u4F3C\u8CC7\u7522\u3002","No thumbnail":"\u6C92\u6709\u7E2E\u7565\u5716","No thumbnail for your game, you can update it in your Game Dashboard!":"\u60A8\u7684\u904A\u6232\u6C92\u6709\u7E2E\u7565\u5716\uFF0C\u60A8\u53EF\u4EE5\u5728\u904A\u6232\u5100\u8868\u677F\u4E2D\u66F4\u65B0\u5B83\uFF01","No update available. You're using the latest version!":"\u6C92\u6709\u53EF\u7528\u66F4\u65B0\u3002\u60A8\u6B63\u5728\u4F7F\u7528\u6700\u65B0\u7248\u672C\uFF01","No uses left":"\u6C92\u6709\u5269\u9918\u4F7F\u7528\u6B21\u6578","No variable":"No variable","No warning":"\u7121\u8B66\u544A","No, close project":"\u4E0D\uFF0C\u95DC\u9589\u9805\u76EE","None":"\u7121","Not applicable":"\u4E0D\u9069\u7528","Not applicable to this plan":"\u4E0D\u9069\u7528\u65BC\u6B64\u8A08\u5283","Not compatible":"\u4E0D\u517C\u5BB9","Not installed as an app. No updates available.":"\u672A\u4F5C\u70BA\u61C9\u7528\u7A0B\u5E8F\u5B89\u88DD\u3002\u6C92\u6709\u53EF\u7528\u7684\u66F4\u65B0\u3002","Not now, thanks!":"\u4E0D\u662F\u73FE\u5728\uFF0C\u8B1D\u8B1D\uFF01","Not on mobile":"\u4E0D\u5728\u79FB\u52D5\u8A2D\u5099\u4E0A","Not published":"\u672A\u767C\u5E03","Not set":"\u672A\u8A2D\u7F6E","Not stored":"\u672A\u5B58\u5132","Not sure how many credits you need? Check <0>this guide to help you decide.":"\u4E0D\u78BA\u5B9A\u60A8\u9700\u8981\u591A\u5C11\u7A4D\u5206\uFF1F\u8ACB\u6AA2\u67E5<0>\u672C\u6307\u5357\uFF0C\u4EE5\u5E6B\u52A9\u60A8\u6C7A\u5B9A\u3002","Not visible":"\u4E0D\u53EF\u898B","Note that the distinction between what is a mobile device and what is not is becoming blurry (with devices like iPad pro and other \"desktop-class\" tablets). If you use this for mobile controls, prefer to check if the device has touchscreen support.":"\u8ACB\u6CE8\u610F\uFF0C\u4EC0\u4E48\u662F\u79FB\u52D5\u8A2D\u5099\u8207\u4EC0\u4E48\u4E0D\u662F\u79FB\u52D5\u8A2D\u5099\u4E4B\u9593\u7684\u5340\u5225\u8B8A\u5F97\u8D8A\u4F86\u8D8A\u6A21\u7CCA(\u4F7F\u7528iPad Pro\u548C\u5176\u4ED6\u201C\u81FA\u5F0F\u6A5F\u201D\u5E73\u677F\u96FB\u8166\u9019\u6A23\u7684\u8A2D\u5099)\u3002\u5982\u679C\u5C07\u6B64\u7528\u4E8E\u79FB\u52D5\u63A7\u4EF6\uFF0C\u5247\u6700\u597D\u6AA2\u67E5\u8A2D\u5099\u662F\u5426\u652F\u6301\u89F8\u6478\u5C4F\u3002","Note that this option will only have an effect when saving your project on your computer's filesystem from the desktop app. Read about [using Git or GitHub with projects in multiple files](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/).":"\u8ACB\u6CE8\u610F\uFF0C\u53EA\u6709\u7576\u5F9E\u684C\u9762\u61C9\u7528\u7A0B\u5E8F\u5C07\u9805\u76EE\u4FDD\u5B58\u5230\u8A08\u7B97\u6A5F\u7684\u6587\u4EF6\u7CFB\u7D71\u4E0A\u6642\uFF0C\u6B64\u9078\u9805\u624D\u6703\u751F\u6548\u3002\u95B1\u8B80[\u5728\u591A\u500B\u6587\u4EF6\u4E2D\u4F7F\u7528Git\u6216GitHub\u9805\u76EE](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/)\u3002","Note: write _PARAMx_ for parameters, e.g: Flash _PARAM1_ for 5 seconds":"\u6CE8\u610F\uFF1A\u5BEB\u5165 _PARAMx_ \u53C3\u6578\uFF0C\u4F8B\u5982 Flash _PARAM1_ 5\u79D2","Nothing corresponding to your search":"\u6C92\u6709\u8207\u4F60\u7684\u641C\u5C0B\u76F8\u7B26\u7684\u5167\u5BB9","Nothing corresponding to your search. Try browsing the list instead.":"\u6C92\u6709\u627E\u5230\u60A8\u8981\u641C\u7D22\u7684\u5167\u5BB9\u3002\u60A8\u53EF\u4EE5\u5617\u8A66\u5148\u700F\u89BD\u4E0B\u5217\u8868\u3002","Nothing to configure for this behavior.":"\u6B64\u884C\u70BA\u7121\u9700\u914D\u7F6E\u3002","Nothing to configure for this effect.":"\u6B64\u6548\u679C\u7121\u9700\u914D\u7F6E\u3002","Notifications":"\u901A\u77E5","Number":"\u6578\u5B57","Number between 0 and 1":"0\u52301\u4E4B\u9593\u7684\u6578\u5B57","Number from a list of options (number)":"\u9078\u9805\u5217\u8868\u4E2D\u7684\u6578\u5B57 (\u6578\u5B57)","Number of entries to display":"\u8981\u986F\u793A\u7684\u689D\u76EE\u6578","Number of particles in tank (-1 for infinite)":"\u5766\u514B\u4E2D\u7684\u7C92\u5B50\u6578 (-1\u8868\u793A\u7121\u9650)","Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.":"Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.","Number of seats":"\u5EA7\u4F4D\u6578","Number of students":"\u5B78\u751F\u4EBA\u6578","OK":"\u78BA\u5B9A","OWNED":"\u64C1\u6709","Object":"\u5C0D\u8C61/\u7269\u9AD4","Object Configuration":"\u5C0D\u8C61\u914D\u7F6E","Object Groups":"\u5C0D\u8C61\u7D44","Object Name":"\u5C0D\u8C61\u540D\u7A31","Object Variables":"\u7269\u4EF6\u8B8A\u91CF","Object animation (text)":"\u5C0D\u8C61\u52D5\u756B (\u6587\u672C)","Object animation name":"\u5C0D\u8C61\u52D5\u756B\u540D\u7A31","Object editor":"\u5C0D\u8C61\u7DE8\u8F2F\u5668","Object effect (text)":"\u5C0D\u8C61\u6548\u679C (\u6587\u672C)","Object effect name":"\u5C0D\u8C61\u6548\u679C\u540D\u7A31","Object effect property (text)":"\u5C0D\u8C61\u6548\u679C\u5C6C\u6027 (\u6587\u672C)","Object effect property name":"\u5C0D\u8C61\u6548\u679C\u5C6C\u6027\u540D\u7A31","Object filters":"\u5C0D\u8C61\u904E\u6FFE\u5668","Object group":"\u5C0D\u8C61\u7D44","Object group properties":"\u7269\u4EF6\u7FA4\u7D44\u5C6C\u6027","Object groups":"\u5C0D\u8C61\u7D44","Object groups list":"\u5C0D\u8C61\u7D44\u5217\u8868","Object name":"\u5C0D\u8C61\u540D\u7A31","Object on which this behavior can be used":"\u6B64\u884C\u70BA\u53EF\u7528\u7684\u5C0D\u8C61","Object point (text)":"\u5C0D\u8C61\u9EDE(\u6587\u672C)","Object point name":"\u5C0D\u8C61\u9EDE\u540D\u7A31","Object properties":"\u7269\u4EF6\u5C6C\u6027","Object skin name":"\u5C0D\u8C61\u76AE\u819A\u540D\u7A31","Object type":"\u5C0D\u8C61\u985E\u578B","Object variable":"\u5C0D\u8C61\u8B8A\u91CF","Object's children":"\u5C0D\u8C61\u7684\u5B50\u9805","Object's children groups":"\u5C0D\u8C61\u7684\u5B50\u9805\u7D44","Object's groups":"\u5C0D\u8C61\u7684\u7D44","Objects":"\u5C0D\u8C61","Objects and characters":"\u5C0D\u8C61\u548C\u89D2\u8272","Objects created using events on this layer will be given a \"Z order\" of {0}, so that they appear in front of all objects of this layer. You can change this using the action to change an object Z order, after using an action to create it.":function(a){return["\u4F7F\u7528\u8A72\u5C64\u4E0A\u7684\u4E8B\u4EF6\u5275\u5EFA\u7684\u5C0D\u8C61\u5C07\u88AB\u8CE6\u4E88 ",a("0")," \u7684\u201CZ \u9806\u5E8F\u201D\uFF0C\u4EE5\u4FBF\u5B83\u5011\u51FA\u73FE\u5728\u8A72\u5C64\u6240\u6709\u5C0D\u8C61\u7684\u524D\u9762\u3002\u5728\u4F7F\u7528\u52D5\u4F5C\u5275\u5EFA\u5C0D\u8C61\u540E\uFF0C\u60A8\u53EF\u4EE5\u4F7F\u7528\u66F4\u6539\u5C0D\u8C61 Z \u9806\u5E8F\u7684\u52D5\u4F5C\u4F86\u66F4\u6539\u6B64\u8A2D\u7F6E\u3002"]},"Objects groups":"\u5C0D\u8C61\u7D44","Objects inside custom objects can't contain the following behaviors:":"\u81EA\u8A02\u7269\u4EF6\u5167\u90E8\u7684\u7269\u4EF6\u4E0D\u80FD\u5305\u542B\u4EE5\u4E0B\u884C\u70BA\uFF1A","Objects list":"\u5C0D\u8C61\u5217\u8868","Objects on {0}":function(a){return[a("0")," \u4E0A\u7684\u5C0D\u8C61"]},"Objects or groups being directly referenced in the events: {0}":function(a){return["\u4E8B\u4EF6\u4E2D\u76F4\u63A5\u5F15\u7528\u7684\u5C0D\u8C61\u6216\u7D44: ",a("0")]},"Objects used with wrong actions or conditions":"\u8207\u932F\u8AA4\u884C\u70BA\u6216\u689D\u4EF6\u4E00\u8D77\u4F7F\u7528\u7684\u7269\u4EF6","Official Game Dev courses":"\u5B98\u65B9\u904A\u6232\u958B\u767C\u8AB2\u7A0B","Oh no! Your subscription from the redemption code has expired. You can renew it by redeeming a new code or getting a new subscription.":"\u54E6\u4E0D\uFF01\u60A8\u901A\u904E\u514C\u63DB\u78BC\u8A02\u95B1\u5DF2\u904E\u671F\u3002\u60A8\u53EF\u4EE5\u901A\u904E\u514C\u63DB\u65B0\u4EE3\u78BC\u6216\u7372\u53D6\u65B0\u8A02\u95B1\u4F86\u7E8C\u8A02\u3002","Ok":"\u78BA\u5B9A","Ok, don't show me this again":"\u597D\u7684\uFF0C\u4E0D\u8981\u518D\u986F\u793A\u9019\u500B\u4E86","Old, legacy upload key (only if you used to publish your game as an APK and already activated Play App Signing)":"\u820A\u7684\u50B3\u7D71\u4E0A\u50B3\u5BC6\u9470(\u50C5\u7576\u60A8\u66FE\u5C07\u6E38\u6232\u767C\u5E03\u70BAAPK\u5E76\u5DF2\u6FC0\u6D3BPlay App\u7C3D\u540D\u6642)","Omit":"\u7701\u7565","On Itch and/or Newgrounds":"\u5728 Itch \u548C/\u6216 Newgrounds","On Poki and/or CrazyGames":"\u5728 Poki \u548C/\u6216 CrazyGames","On Steam and/or Epic Games":"\u5728 Steam \u548C/\u6216 Epic Games","On game page only":"\u50C5\u5728\u6E38\u6232\u9801\u9762\u4E0A","On my own":"\u7368\u81EA\u4E00\u4EBA","Once removed, you'll need to generate a new certificate. Provisioning profiles will also be removed.":"\u522A\u9664\u540E\uFF0C\u60A8\u9700\u8981\u751F\u6210\u65B0\u8B49\u66F8\u3002\u914D\u7F6E\u6587\u4EF6\u4E5F\u5C07\u88AB\u522A\u9664\u3002","Once you're done, come back to GDevelop and the assets will be added to your account automatically.":"\u5B8C\u6210\u540E\uFF0C\u8FD4\u56DEGDevelop\uFF0C\u8CC7\u7522\u5C07\u81EA\u52D5\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236\u4E2D\u3002","Once you're done, come back to GDevelop and the bundle will be added to your account automatically.":"\u5B8C\u6210\u5F8C\uFF0C\u8FD4\u56DE GDevelop\uFF0C\u6346\u7D81\u5305\u5C07\u81EA\u52D5\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236\u3002","Once you're done, come back to GDevelop and the credits will be added to your account automatically.":"\u5B8C\u6210\u540E\uFF0C\u8FD4\u56DE GDevelop\uFF0C\u7A4D\u5206\u5C07\u81EA\u52D5\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236\u4E2D\u3002","Once you're done, come back to GDevelop and the game template will be added to your account automatically.":"\u5B8C\u6210\u540E\uFF0C\u8FD4\u56DE GDevelop\uFF0C\u6E38\u6232\u6A21\u677F\u5C07\u81EA\u52D5\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236\u4E2D\u3002","Once you're done, come back to GDevelop and your account will be upgraded automatically, unlocking the extra exports and online services.":"\u4E00\u65E6\u5B8C\u6210\uFF0C\u8FD4\u56DE GDevelop\uFF0C\u60A8\u7684\u5E33\u6236\u5C07\u81EA\u52D5\u5347\u7D1A\uFF0C\u89E3\u9396\u984D\u5916\u7684\u5C0E\u51FA\u548C\u5728\u7DDA\u670D\u52D9\u3002","Once you're done, start adding some functions to the behavior. Then, test the behavior by adding it to an object in a scene.":"\u5B8C\u6210\u540E\uFF0C\u958B\u59CB\u5411\u884C\u70BA\u6DFB\u52A0\u4E00\u4E9B\u529F\u80FD\u3002\u7136\u540E\uFF0C\u901A\u904E\u5C07\u5176\u6DFB\u52A0\u5230\u5834\u666F\u4E2D\u7684\u5C0D\u8C61\u4F86\u6E2C\u8A66\u884C\u70BA\u3002","Once you're done, you will receive an email confirmation so that you can link the bundle to your account.":"\u5B8C\u6210\u5F8C\uFF0C\u60A8\u5C07\u6536\u5230\u4E00\u5C01\u96FB\u5B50\u90F5\u4EF6\u78BA\u8A8D\uFF0C\u4EE5\u4FBF\u5C07\u6B64\u5957\u4EF6\u93C8\u63A5\u5230\u60A8\u7684\u5E33\u6236\u3002","One project at a time \u2014 Upgrade for more":"\u4E00\u6B21\u4E00\u500B\u5C08\u6848 - \u5347\u7D1A\u4EE5\u7372\u5F97\u66F4\u591A","One-click packaging":"\u4E00\u9375\u6253\u5305","Only PNG, JPEG and WEBP files are supported.":"\u50C5\u652F\u6301 PNG\u3001JPEG \u548C WEBP \u6587\u4EF6\u3002","Only best entry":"\u50C5\u6700\u4F73\u53C3\u8CFD\u4F5C\u54C1","Only cloud projects can be displayed here. If the user has created local projects, they need to be saved as cloud projects to be visible.":"\u6B64\u8655\u53EA\u80FD\u986F\u793A\u4E91\u9805\u76EE\u3002\u5982\u679C\u7528\u6236\u5275\u5EFA\u4E86\u672C\u5730\u9805\u76EE\uFF0C\u5247\u9700\u8981\u5C07\u5176\u4FDD\u5B58\u70BA\u4E91\u9805\u76EE\u624D\u80FD\u53EF\u898B\u3002","Only player's best entries are displayed.":"\u53EA\u986F\u793A\u73A9\u5BB6\u7684\u6700\u4F73\u53C3\u8CFD\u4F5C\u54C1\u3002","Oops! Looks like this game has no logo set up, you can continue to the next step.":"\u54CE\u5440\uFF01\u770B\u4F86\u9019\u500B\u904A\u6232\u6C92\u6709\u8A2D\u5B9A\u6A19\u8A8C\uFF0C\u4F60\u53EF\u4EE5\u7E7C\u7E8C\u4E0B\u4E00\u6B65\u3002","Opacity":"\u900F\u660E\u5EA6","Opacity (0 - 255)":"\u4E0D\u900F\u660E\u5EA6 (0-255)","Open":"\u958B\u555F","Open About to download and install it.":"\u6253\u958B\u300C\u95DC\u65BC\u300D\u4EE5\u4E0B\u8F09\u4E26\u5B89\u88DD\u3002","Open Apple Developer":"\u6253\u958B\u860B\u679C\u958B\u767C\u8005","Open Debugger":"\u6253\u958B\u8ABF\u8A66\u5668","Open Game dashboard":"\u6253\u958B\u904A\u6232\u5100\u8868\u677F","Open Instances List Panel":"\u6253\u958B\u5BE6\u4F8B\u5217\u8868\u9762\u677F","Open Layers Panel":"\u6253\u958B\u5716\u5C64\u9762\u677F","Open My Profile":"\u6253\u958B\u6211\u7684\u500B\u4EBA\u8CC7\u6599","Open Object Groups Panel":"\u6253\u958B\u5C0D\u8C61\u7D44\u9762\u677F","Open Objects Panel":"\u6253\u958B\u5C0D\u8C61\u9762\u677F","Open Properties Panel":"\u6253\u958B\u5C6C\u6027\u9762\u677F","Open Recent":"\u6253\u958B\u6700\u8FD1\u7684","Open a new project? Any changes that have not been saved will be lost.":"\u6253\u958B\u65B0\u9805\u76EE\uFF1F\u4EFB\u4F55\u5C1A\u672A\u4FDD\u5B58\u7684\u66F4\u6539\u90FD\u5C07\u4E1F\u5931\u3002","Open a project":"\u6253\u958B\u4E00\u500B\u9805\u76EE","Open all tasks":"\u6253\u958B\u6240\u6709\u4EFB\u52D9","Open another chat?":"\u8981\u958B\u555F\u53E6\u4E00\u500B\u804A\u5929\u55CE\uFF1F","Open build link":"\u6253\u958B\u69CB\u5EFA\u93C8\u63A5","Open command palette":"\u6253\u958B\u547D\u4EE4\u9762\u677F","Open course":"\u6253\u958B\u8AB2\u7A0B","Open events sheet":"\u6253\u958B\u4E8B\u4EF6\u8868","Open exam":"\u6253\u958B\u8003\u8A66","Open extension settings":"\u6253\u958B\u64F4\u5C55\u8A2D\u7F6E","Open extension...":"\u6253\u958B\u64F4\u5C55...","Open external events...":"\u6253\u958B\u5916\u90E8\u4E8B\u4EF6(external events)...","Open external layout...":"\u6253\u958B\u5916\u90E8\u5E03\u5C40(external layout)...","Open file":"\u6253\u958B\u6587\u4EF6","Open folder":"\u6253\u958B\u6587\u4EF6\u593E","Open from computer with GDevelop desktop app":"\u5F9E\u96FB\u8166\u4F7F\u7528 GDevelop \u684C\u9762\u61C9\u7528\u7A0B\u5F0F\u6253\u958B","Open game for player feedback":"\u958B\u653E\u6E38\u6232\u5F81\u6C42\u73A9\u5BB6\u53CD\u994B","Open in Store":"\u5728\u5546\u5E97\u4E2D\u6253\u958B","Open in a larger editor":"\u5728\u8F03\u5927\u7684\u7DE8\u8F2F\u5668\u4E2D\u6253\u958B","Open in editor":"\u5728\u7DE8\u8F2F\u5668\u4E2D\u6253\u958B","Open layer editor":"\u6253\u958B\u5716\u5C64\u7DE8\u8F2F\u5668","Open lesson":"\u6253\u958B\u8AB2\u7A0B","Open memory tracker registry":"\u6253\u958B\u8A18\u61B6\u8FFD\u8E64\u5668\u767B\u8A18\u7C3F","Open more settings":"\u6253\u958B\u66F4\u591A\u8A2D\u7F6E","Open project":"\u6253\u958B\u9805\u76EE","Open project icons":"\u6253\u958B\u9805\u76EE\u5716\u6A19","Open project manager":"\u6253\u958B\u9805\u76EE\u7BA1\u7406\u5668","Open project properties":"\u6253\u958B\u9805\u76EE\u5C6C\u6027(properties)","Open project resources":"\u6253\u958B\u9805\u76EE\u8CC7\u6E90","Open quick customization":"\u6253\u958B\u5FEB\u901F\u81EA\u8A02","Open recent project...":"\u6253\u958B\u6700\u8FD1\u7684\u9805\u76EE...","Open report":"\u6253\u958B\u5831\u544A","Open resource in browser":"\u5728\u700F\u89BD\u5668\u4E2D\u6253\u958B\u8CC7\u6E90","Open scene editor":"\u6253\u958B\u5834\u666F\u7DE8\u8F2F\u5668","Open scene events":"\u6253\u958B\u5834\u666F\u4E8B\u4EF6","Open scene properties":"\u6253\u958B\u5834\u666F\u5C6C\u6027(Properties)","Open scene variables":"\u6253\u958B\u5834\u666F\u8B8A\u91CF","Open scene...":"\u6253\u958B\u5834\u666F...","Open settings":"\u6253\u958B\u8A2D\u7F6E","Open task":"Open task","Open template":"\u6253\u958B\u6A21\u677F","Open the console":"\u6253\u958B\u63A7\u5236\u81FA","Open the exported game folder":"\u6253\u958B\u5C0E\u51FA\u7684\u6E38\u6232\u6587\u4EF6\u593E","Open the performance profiler":"\u6253\u958B\u6027\u80FD\u5206\u6790\u5DE5\u5177","Open the project":"\u6253\u958B\u9805\u76EE","Open the project associated with this AI request to restore to this state.":"\u6253\u958B\u8207\u6B64 AI \u8ACB\u6C42\u76F8\u95DC\u7684\u5C08\u6848\u4EE5\u9084\u539F\u81F3\u6B64\u72C0\u614B\u3002","Open the project folder":"\u6253\u958B\u9805\u76EE\u6587\u4EF6\u593E","Open the properties panel":"\u6253\u958B\u201C\u5C6C\u6027\u201D\u9762\u677F","Open version":"\u6253\u958B\u7248\u672C","Open version history":"\u6253\u958B\u7248\u672C\u6B77\u53F2\u8A18\u9304","Open visual editor":"\u6253\u958B\u53EF\u8996\u5316\u7DE8\u8F2F\u5668","Open visual editor for the object":"\u6253\u958B\u5C0D\u8C61\u7684\u53EF\u8996\u5316\u7DE8\u8F2F\u5668","Open...":"\u6253\u958B...","Opening latest save...":"\u6B63\u5728\u6253\u958B\u6700\u65B0\u4FDD\u5B58...","Opening older version...":"\u6B63\u5728\u6253\u958B\u820A\u7248\u672C...","Opening portal":"\u6253\u958B\u9580\u6236\u7DB2\u7AD9","Operation not allowed":"\u4E0D\u5141\u8A31\u64CD\u4F5C","Operator":"\u904B\u7B97\u7B26(Operator)","Optimize for Pixel Art":"\u50CF\u7D20\u85DD\u8853\u512A\u5316","Optional animation name":"\u53EF\u9078\u52D5\u756B\u540D\u7A31","Optional. Enter a full URL (starting with https://) to a help page. A help icon will appear next to the action/condition/expression title in the editor, allowing users to quickly access documentation.":"\u53EF\u9078\u3002\u8F38\u5165\u5B8C\u6574\u7684URL\uFF08\u4EE5https://\u958B\u982D\uFF09\u6307\u5411\u5E6B\u52A9\u9801\u9762\u3002\u5E6B\u52A9\u5716\u793A\u5C07\u51FA\u73FE\u5728\u7DE8\u8F2F\u5668\u4E2D\u52D5\u4F5C/\u689D\u4EF6/\u8868\u9054\u5F0F\u6A19\u984C\u7684\u65C1\u908A\uFF0C\u8B93\u7528\u6236\u80FD\u5FEB\u901F\u8A2A\u554F\u6587\u6A94\u3002","Optionally, explain the purpose of the property in more details":"\u9084\u53EF\u4EE5\u66F4\u8A73\u7D30\u5730\u89E3\u91CB\u5C6C\u6027\u7684\u7528\u9014","Options":"\u9078\u9805","Or flash this QR code:":"\u6216\u8005\u5237\u9019\u500B\u4E8C\u7DAD\u78BC\uFF1A","Or start typing...":"Or start typing...","Ordering":"\u6392\u5E8F","Orthographic camera":"\u6B63\u4EA4\u76F8\u6A5F","Other":"\u5176\u4ED6","Other actions":"\u66F4\u591A\u64CD\u4F5C","Other conditions":"\u66F4\u591A\u689D\u4EF6","Other lifecycle methods":"\u5176\u4ED6\u751F\u547D\u5468\u671F\u65B9\u6CD5 ","Other reason":"Other reason","Other reason (please specify)":"\u5176\u4ED6\u539F\u56E0 (\u8ACB\u6CE8\u660E)","Outdated extension":"\u904E\u6642\u7684\u64F4\u5C55","Outline":"\u8F2A\u5ED3\u7DDA","Outline color":"\u8F2A\u5ED3\u984F\u8272","Outline opacity (0-255)":"\u8F2A\u5ED3\u4E0D\u900F\u660E\u5EA6 (0-255)","Outline size (in pixels)":"\u8F2A\u5ED3\u5C3A\u5BF8 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Overriding the ID may have unwanted consequences, such as blocking the ability to connect to any peer. Do not use this feature unless you really know what you are doing.":"\u8986\u84CB ID \u53EF\u80FD\u6703\u7522\u751F\u4E0D\u826F\u540E\u679C\uFF0C\u4F8B\u5982\u963B\u6B62\u9023\u63A5\u5230\u4EFB\u4F55\u5C0D\u7B49\u9EDE\u7684\u80FD\u529B\u3002\u9664\u975E\u60A8\u771F\u7684\u77E5\u9053\u81EA\u5DF1\u5728\u505A\u4EC0\u4E48\uFF0C\u5426\u5247\u4E0D\u8981\u4F7F\u7528\u6B64\u529F\u80FD\u3002","Overwrite":"\u8986\u84CB","Owned":"\u64C1\u6709","Owned by another scene":"\u5C6C\u4E8E\u53E6\u4E00\u500B\u5834\u666F","Owner":"\u6240\u6709\u8005","Owners":"\u6240\u6709\u8005","P2P is merely a peer-to-peer networking solution. It only handles the connection to another player, and the exchange of messages. Higher-level tasks, such as synchronizing the game state, are left to by implemented by you. Use the THNK Framework if you seek an easy, performant and flexible higher-level solution.":"P2P \u53EA\u662F\u4E00\u7A2E\u9EDE\u5C0D\u9EDE\u7DB2\u7D61\u89E3\u6C7A\u65B9\u6848\u3002\u5B83\u53EA\u8655\u7406\u8207\u53E6\u4E00\u500B\u73A9\u5BB6\u7684\u9023\u63A5\u4EE5\u53CA\u6D88\u606F\u4EA4\u63DB\u3002\u66F4\u9AD8\u7D1A\u5225\u7684\u4EFB\u52D9\uFF0C\u4F8B\u5982\u540C\u6B65\u6E38\u6232\u72C0\u614B\uFF0C\u5247\u7531\u60A8\u4F86\u5BE6\u73FE\u3002\u5982\u679C\u60A8\u5C0B\u6C42\u7C21\u55AE\u3001\u9AD8\u6027\u80FD\u4E14\u9748\u6D3B\u7684\u9AD8\u7D1A\u89E3\u6C7A\u65B9\u6848\uFF0C\u8ACB\u4F7F\u7528 THNK \u6846\u67B6\u3002","Pack sounds":"\u6253\u5305\u8072\u97F3","Pack type":"\u5305\u985E\u578B","Package game files":"\u6253\u5305\u6E38\u6232\u6587\u4EF6","Package name (for iOS and Android)":"\u8EDF\u4EF6\u5305\u540D\u7A31 (\u9069\u7528\u4E8EiOS\u548CAndroid)","Package the game for iOS, using your Apple Developer account.":"\u4F7F\u7528\u60A8\u7684 Apple \u958B\u767C\u8005\u5E33\u6236\u5C07\u6E38\u6232\u6253\u5305\u70BA iOS \u7248\u3002","Packaging":"\u6253\u5305","Packaging your game for Android will create an APK file that can be installed on Android phones or an Android App Bundle that can be published to Google Play.":"\u6253\u5305\u60A8\u7684 Android \u6E38\u6232\u5C07\u5275\u5EFA\u4E00\u500B APK \u6587\u4EF6\uFF0C\u53EF\u4EE5\u5B89\u88DD\u5728 Android \u624B\u6A5F\u4E0A\uFF0C\u6216\u8005\u53EF\u4EE5\u767C\u5E03\u5230 Google Play \u7684Android \u61C9\u7528\u7A0B\u5E8F\u5305\u3002","Packaging...":"\u6B63\u5728\u6253\u5305...","Paint a Level with Tiles":"\u4F7F\u7528\u78DA\u584A\u756B\u9762\u7E6A\u88FD\u4E00\u500B\u95DC\u5361","Panel sprite":"\u9762\u677F\u7CBE\u9748","Parameter #{0}":function(a){return["\u53C3\u6578 #",a("0")]},"Parameter name":"\u53C3\u6578\u540D\u7A31","Parameters":"\u53C3\u6578","Parameters allow function users to give data.":"\u53C3\u6578\u5141\u8A31\u51FD\u6578\u4F7F\u7528\u8005\u63D0\u4F9B\u6578\u64DA\u3002","Parameters can't have children.":"\u53C3\u6578\u4E0D\u80FD\u6709\u5B50\u9805\u3002","Particle end size (in percents)":"\u7C92\u5B50\u672B\u7AEF\u5927\u5C0F (\u4EE5\u767E\u5206\u6BD4\u70BA\u55AE\u4F4D)","Particle maximum lifetime (in seconds)":"\u7C92\u5B50\u6700\u9577\u58FD\u547D (\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Particle maximum rotation speed (degrees/second)":"\u7C92\u5B50\u6700\u5927\u65CB\u8F49\u901F\u5EA6 (\u5EA6/\u79D2)","Particle minimum lifetime (in seconds)":"\u7C92\u5B50\u6700\u77ED\u58FD\u547D (\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Particle minimum rotation speed (degrees/second)":"\u7C92\u5B50\u6700\u5C0F\u65CB\u8F49\u901F\u5EA6 (\u5EA6/\u79D2)","Particle start size (in percents)":"\u7C92\u5B50\u8D77\u59CB\u5927\u5C0F (\u4EE5\u767E\u5206\u6BD4\u70BA\u55AE\u4F4D\uFF09","Particle type":"\u7C92\u5B50\u985E\u578B","Particles end color":"\u7C92\u5B50\u672B\u7AEF\u984F\u8272","Particles start color":"\u7C92\u5B50\u8D77\u59CB\u984F\u8272","Particles start height":"\u7C92\u5B50\u8D77\u59CB\u9AD8\u5EA6","Particles start width":"\u7C92\u5B50\u8D77\u59CB\u5BEC\u5EA6","Password":"\u5BC6\u78BC","Password cannot be empty":"\u5BC6\u78BC\u4E0D\u80FD\u70BA\u7A7A","Paste":"\u7C98\u8CBC","Paste action(s)":"\u7C98\u8CBC\u52D5\u4F5C(s)","Paste and Match Style":"\u7C98\u8CBC\u548C\u5339\u914D\u6A23\u5F0F","Paste condition(s)":"\u7C98\u8CBC\u689D\u4EF6 (s)","Paste {clipboardObjectName}":function(a){return["\u7C98\u8CBC ",a("clipboardObjectName")]},"Paste {clipboardObjectName} as a Global Object":function(a){return["\u5C07 ",a("clipboardObjectName")," \u7C98\u8CBC\u70BA\u5168\u5C40\u5C0D\u8C61"]},"Paste {clipboardObjectName} as a Global Object inside folder":function(a){return["\u5C07 ",a("clipboardObjectName")," \u4F5C\u70BA\u5168\u5C40\u5C0D\u8C61\u7C98\u8CBC\u5230\u6587\u4EF6\u593E\u5167"]},"Paste {clipboardObjectName} inside folder":function(a){return["\u5C07 ",a("clipboardObjectName")," \u7C98\u8CBC\u5230\u6587\u4EF6\u593E\u5167"]},"Pause":"\u66AB\u505C","Pause the game (from the toolbar) or hit refresh (on the left) to inspect the game":"\u66AB\u505C\u6E38\u6232(\u5F9E\u5DE5\u5177\u6B04) \u6216\u9EDE\u64CA\u5237\u65B0(\u5728\u5DE6\u5074) \u4EE5\u6AA2\u67E5\u6E38\u6232","Paused":"\u5DF2\u66AB\u505C","Paypal secure":"Paypal \u5B89\u5168","Peer to peer IP address leak warning/THNK recommendation":"\u9EDE\u5C0D\u9EDE IP \u5730\u5740\u6CC4\u6F0F\u8B66\u544A/THNK \u63A8\u85A6","Peer to peer data-loss notice":"\u9EDE\u5C0D\u9EDE\u6578\u64DA\u4E1F\u5931\u901A\u77E5","Pending":"\u5F85\u8655\u7406","Pending invitations":"\u5F85\u8655\u7406\u9080\u8ACB","Percentage of people who leave before 60 seconds including loading screens.":"Percentage of people who leave before 60 seconds including loading screens.","Permanent":"\u6C38\u4E45\u7684","Permanently delete the leaderboard?":"\u60A8\u78BA\u5B9A\u8981\u6C38\u4E45\u522A\u9664\u6392\u884C\u699C\u55CE\uFF1F","Permanently delete the project?":"\u60A8\u78BA\u5B9A\u8981\u6C38\u4E45\u522A\u9664\u8A72\u5C08\u6848\u55CE\uFF1F","Personal license for claim with Gold or Pro subscription":"\u901A\u904E\u9EC3\u91D1\u6216\u5C08\u696D\u8A02\u95B1\u9032\u884C\u7D22\u8CE0\u7684\u500B\u4EBA\u8A31\u53EF\u8B49","Personal or company website":"\u500B\u4EBA\u6216\u516C\u53F8\u7DB2\u7AD9","Personal website, itch.io page, etc.":"\u500B\u4EBA\u7DB2\u7AD9\uFF0Citch.io\u9801\u9762\u7B49\u3002","Personalize your suggested content":"\u500B\u6027\u5316\u60A8\u7684\u5EFA\u8B70\u5167\u5BB9","Perspective camera":"\u900F\u8996\u76F8\u6A5F","Pixel size":"\u50CF\u7D20\u5927\u5C0F","Place 3D platforms in a 2D game.":"\u5728 2D \u904A\u6232\u4E2D\u653E\u7F6E 3D \u5E73\u53F0\u3002","Place 3D platforms in this 2D platformer, creating a path to the end.":"\u5728\u9019\u500B 2D \u5E73\u53F0\u904A\u6232\u4E2D\u653E\u7F6E 3D \u5E73\u53F0\uFF0C\u5275\u5EFA\u4E00\u689D\u901A\u5F80\u7D42\u9EDE\u7684\u8DEF\u5F91\u3002","Place {newInstancesCount} <0>{object_name} instance(s) at {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u5C07 ",a("newInstancesCount")," <0>",a("object_name")," \u5BE6\u4F8B\u653E\u7F6E\u65BC ",a("0"),"\uFF08\u5716\u5C64\uFF1A",a("1"),"\uFF09\u3002"]},"Place {newInstancesCount} and move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u653E\u7F6E ",a("newInstancesCount")," \u4E26\u5C07 ",a("existingInstanceCount")," <0>",a("object_name")," \u5BE6\u4F8B\u79FB\u81F3 ",a("0"),"\uFF08\u5716\u5C64\uFF1A",a("1"),"\uFF09\u3002"]},"Placement":"\u653E\u7F6E","Placement rationale":"\u653E\u7F6E\u539F\u5247","Platform default":"\u5E73\u81FA\u9ED8\u8A8D","Platformer":"\u5E73\u81FA","Play":"\u6E38\u73A9","Play a game":"\u73A9\u904A\u6232","Play game":"\u73A9\u904A\u6232","Play section":"\u6E38\u6232\u90E8\u5206","Played > 10 minutes":"\u73A9\u4E86 > 10 \u5206\u9418","Played > 15 minutes":"\u73A9\u4E86 > 15 \u5206\u9418","Played > 3 minutes":"\u73A9\u4E86 > 3 \u5206\u9418","Played > 5 minutes":"\u73A9\u4E86 > 5 \u5206\u9418","Played time":"\u6E38\u6232\u6642\u9593","Player":"\u73A9\u5BB6","Player best entry":"\u64AD\u653E\u5668\u6700\u4F73\u4F5C\u54C1","Player feedback off":"\u73A9\u5BB6\u53CD\u994B\u95DC\u9589","Player feedback on":"\u73A9\u5BB6\u53CD\u994B\u958B\u555F","Player name prefix (for auto-generated player names)":"\u73A9\u5BB6\u540D\u7A31\u524D\u7DB4 (\u7528\u4E8E\u81EA\u52D5\u751F\u6210\u7684\u73A9\u5BB6\u540D\u7A31)","Player services":"\u73A9\u5BB6\u670D\u52D9","Player {0} left a feedback message on {1}: \"{2}...\"":function(a){return["\u73A9\u5BB6 ",a("0")," \u5728 ",a("1")," \u7559\u4E0B\u4E86\u53CD\u994B\u4FE1\u606F\uFF1A\"",a("2"),"...\""]},"Players":"\u73A9\u5BB6","Playground":"\u6E38\u6A02\u5834","Playing":"\u6B63\u5728\u64AD\u653E","Please <0>backup your game file and save your game to ensure that you don't lose anything. You can try to reload this panel or restart GDevelop.":"\u8ACB<0>\u5099\u4EFD\u60A8\u7684\u6E38\u6232\u6587\u4EF6\u5E76\u4FDD\u5B58\u60A8\u7684\u6E38\u6232\uFF0C\u4EE5\u78BA\u4FDD\u60A8\u4E0D\u6703\u4E1F\u5931\u4EFB\u4F55\u6771\u897F\u3002\u60A8\u53EF\u4EE5\u5617\u8A66\u91CD\u65B0\u52A0\u8F09\u6B64\u9762\u677F\u6216\u91CD\u65B0\u555F\u52D5 GDevelop\u3002","Please check if popups are blocked in your browser settings.":"\u8ACB\u6AA2\u67E5\u60A8\u7684\u700F\u89BD\u5668\u8A2D\u7F6E\u4E2D\u5F48\u51FA\u7A97\u53E3\u662F\u5426\u88AB\u963B\u6B62\u3002","Please check your internet connection or try again later.":"\u8ACB\u6AA2\u67E5\u4F60\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u4E00\u6B21\u3002","Please double check online the changes to make sure that you are aware of anything new in this version that would require you to adapt your project.":"\u8ACB\u5728\u7DDA\u4ED4\u7D30\u6AA2\u67E5\u66F4\u6539\uFF0C\u4EE5\u78BA\u4FDD\u60A8\u77E5\u9053\u6B64\u7248\u672C\u4E2D\u7684\u4EFB\u4F55\u9700\u8981\u60A8\u8ABF\u6574\u9805\u76EE\u7684\u65B0\u5167\u5BB9\u3002","Please enter a name for your project.":"\u8ACB\u70BA\u60A8\u7684\u9805\u76EE\u8F38\u5165\u540D\u7A31\u3002","Please enter a name that is at least one character long and 50 at most.":"\u8ACB\u8F38\u5165\u81F3\u5C11\u4E00\u500B\u5B57\u7B26\u9577\uFF0C\u6700\u591A50\u500B\u5B57\u7B26\u7684\u540D\u7A31\u3002","Please enter a valid URL, starting with https://":"\u8ACB\u8F38\u5165\u4E00\u500B\u6709\u6548\u7684 URL\uFF0C\u958B\u59CB\u4E8E https://","Please enter a valid URL, starting with https://discord":"\u8ACB\u8F38\u5165\u4E00\u500B\u6709\u6548\u7684 URL\uFF0C\u5F9E https://discord \u958B\u59CB","Please enter an email address.":"\u8ACB\u8F38\u5165\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u3002","Please explain your use of GDevelop.":"\u8ACB\u89E3\u91CB\u4E00\u4E0B\u4F60\u4F7F\u7528 GDevelop \u7684\u539F\u56E0\u3002","Please fill out every field.":"\u8ACB\u586B\u5BEB\u6BCF\u500B\u5B57\u6BB5\u3002","Please get in touch with us to find a solution.":"\u8ACB\u8207\u6211\u5011\u806F\u7CFB\uFF0C\u4EE5\u4FBF\u627E\u5230\u89E3\u6C7A\u8FA6\u6CD5\u3002","Please log out and log in again to verify your identify, then change your email.":"\u8ACB\u6CE8\u92B7\u5E76\u91CD\u65B0\u767B\u9304\u4EE5\u9A57\u8B49\u60A8\u7684\u8EAB\u4EFD\uFF0C\u7136\u540E\u66F4\u6539\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6\u3002","Please login to access free samples of the Education plan resources.":"\u8ACB\u767B\u9304\u4EE5\u8A2A\u554F\u6559\u80B2\u8A08\u5283\u8CC7\u6E90\u7684\u514D\u8CBB\u6A23\u672C\u3002","Please note that your device should be connected on the same network as this computer.":"\u8ACB\u6CE8\u610F, \u4F60\u7684\u8A2D\u5099\u61C9\u8207\u6B64\u8A08\u7B97\u6A5F\u9023\u63A5\u5728\u540C\u4E00\u7DB2\u7D61\u4E0A\u3002","Please pick a short username with only alphanumeric characters as well as _ and -":"\u8ACB\u9078\u64C7\u50C5\u5305\u542B\u5B57\u6BCD\u6578\u5B57\u5B57\u7B26\u4EE5\u53CA _ \u548C - \u7684\u7C21\u77ED\u7528\u6236\u540D","Please prefer using the new action \"Enforce camera boundaries\" which is more flexible.":"\u8ACB\u4F7F\u7528\u66F4\u9748\u6D3B\u7684\u65B0\u52D5\u4F5C\u201C\u5F37\u5236\u651D\u5F71\u6A5F\u908A\u754C\u201D\u3002","Please tell us more":"\u8ACB\u544A\u8A34\u6211\u5011\u66F4\u591A\u4FE1\u606F","Please upgrade the editor to the latest version.":"\u8ACB\u5C07\u7DE8\u8F2F\u5668\u5347\u7D1A\u5230\u6700\u65B0\u7248\u672C\u3002","Please wait":"\u8ACB\u7B49\u5F85","Please wait while we scan your project to find a solution.":"\u8ACB\u7A0D\u5019\uFF0C\u6211\u5011\u6B63\u5728\u6383\u63CF\u60A8\u7684\u9805\u76EE\u4EE5\u5C0B\u627E\u89E3\u6C7A\u65B9\u6848\u3002","Please wait...":"\u8ACB\u7A0D\u5019...","Point name":"\u9EDE\u540D\u7A31","Points":"\u9EDE","Polygon is not convex!":"\u591A\u908A\u5F62\u4E0D\u662F\u51F8\u591A\u908A\u5F62\uFF01","Polygon with {verticesCount} vertices":function(a){return["\u5177\u6709 ",a("verticesCount")," \u500B\u9802\u9EDE\u7684\u591A\u908A\u5F62"]},"Pop back into main window":"\u8FD4\u56DE\u4E3B\u7A97\u53E3","Pop out in a separate window (beta)":"\u5F48\u51FA\u5230\u55AE\u7368\u7684\u7A97\u53E3\uFF08\u6E2C\u8A66\u7248\uFF09","Portrait":"\u7E31\u5411","Prefabs (Ready-to-use Objects)":"\u9810\u5236\u4EF6(\u5F85\u4F7F\u7528\u5C0D\u8C61)","Preferences":"\u504F\u597D\u8A2D\u7F6E","Prefix":"\u524D\u7DB4","Preload at startup (default)":"\u555F\u52D5\u6642\u9810\u52A0\u8F09\uFF08\u9ED8\u8A8D\uFF09","Preload with an action":"\u9810\u8F09\u5165\u4E00\u500B\u52D5\u4F5C","Preload with the scene":"\u9810\u8F09\u5165\u5834\u666F","Premium":"\u9AD8\u7D1A\u7248","Prepare your game for Facebook Instant Games so that it can be play on Facebook Messenger. GDevelop will create a compressed file that you can upload on your Facebook Developer account.":"\u70BAFacebook Instant Games\u6E96\u5099\u6E38\u6232\uFF0C\u4EE5\u4FBF\u53EF\u4EE5\u5728Facebook Messenger\u4E0A\u73A9\u3002 GDevelop\u5C07\u5275\u5EFA\u4E00\u500B\u58D3\u7E2E\u6587\u4EF6\uFF0C\u60A8\u53EF\u4EE5\u5C07\u5176\u4E0A\u50B3\u5230\u60A8\u7684Facebook Developer\u5E33\u6236\u3002","Preparing the leaderboard for your game...":"\u70BA\u60A8\u7684\u6E38\u6232\u6E96\u5099\u6392\u884C\u699C...","Press a shortcut combination...":"\u6309\u4E0B\u5FEB\u6377\u9375\u7D44\u5408...","Prevent selection in the editor":"\u9632\u6B62\u5728\u7DE8\u8F2F\u5668\u4E2D\u9032\u884C\u9078\u64C7","Preview":"\u9810\u89BD","Preview over wifi":"\u5728wifi\u4E0B\u9810\u89BD","Preview {animationName}":function(a){return["\u9810\u89BD ",a("animationName")]},"Previews":"\u9810\u89BD","Previous breaking changes (no longer relevant)":"\u5148\u524D\u7684\u91CD\u5927\u8B8A\u66F4\uFF08\u4E0D\u518D\u76F8\u95DC\uFF09","Previous page":"\u4E0A\u4E00\u9801","Private":"\u79C1\u6709","Production & Project Management":"\u88FD\u4F5C\u8207\u5C08\u6848\u7BA1\u7406","Profile":"\u500B\u4EBA\u4FE1\u606F","Profiler":"\u6027\u80FD\u5206\u6790\u5DE5\u5177","Programming & Scripting":"\u7A0B\u5F0F\u8A2D\u8A08\u8207\u8173\u672C","Progress bar":"\u9032\u5EA6\u689D","Progress bar color":"\u9032\u5EA6\u689D\u984F\u8272","Progress bar fade in delay and duration will be applied to GDevelop logo.":"\u9032\u5EA6\u689D\u6DE1\u5165\u6DE1\u51FA\u5EF6\u9072\u548C\u6301\u7E8C\u6642\u9593\u5C07\u61C9\u7528\u4E8E GDevelop \u6A19\u5FD7\u3002","Progress bar height":"\u9032\u5EA6\u689D\u9AD8\u5EA6","Progress bar maximum width":"\u9032\u5EA6\u689D\u6700\u5927\u5BEC\u5EA6","Progress bar minimum width":"\u9032\u5EA6\u689D\u6700\u5C0F\u5BEC\u5EA6","Progress bar width":"\u9032\u5EA6\u689D\u5BEC\u5EA6","Progress fade in delay (in seconds)":"\u9032\u5EA6\u6DE1\u5165\u5EF6\u9072(\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Progress fade in duration (in seconds)":"\u9032\u5EA6\u5728\u6301\u7E8C\u6642\u9593\u5167\u6DE1\u51FA(\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Project":"\u9805\u76EE","Project file list":"\u5C08\u6848\u6A94\u6848\u5217\u8868","Project file type":"\u9805\u76EE\u6587\u4EF6\u985E\u578B","Project files":"\u9805\u76EE\u6587\u4EF6","Project icons":"\u9805\u76EE\u5716\u6A19","Project is opened":"\u5C08\u6848\u5DF2\u958B\u555F","Project manager":"\u9805\u76EE\u7BA1\u7406\u5668","Project mismatch":"\u5C08\u6848\u4E0D\u5339\u914D","Project name":"\u9805\u76EE\u540D\u7A31","Project name cannot be empty.":"\u9805\u76EE\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A\u3002","Project name changed":"\u9805\u76EE\u540D\u7A31\u5DF2\u66F4\u6539","Project not found":"\u672A\u627E\u5230\u9805\u76EE","Project not saved":"\u5C08\u6848\u672A\u5132\u5B58","Project package names should not begin with com.example":"\u9805\u76EE\u5305\u540D\u7A31\u4E0D\u61C9\u4EE5 com.example \u958B\u982D\u3002","Project properly saved":"\u9805\u76EE\u5DF2\u6B63\u78BA\u4FDD\u5B58","Project properties":"\u9805\u76EE\u5C6C\u6027","Project resources":"Project resources","Project save cannot be opened":"\u5C08\u6848\u5132\u5B58\u7121\u6CD5\u958B\u555F","Project save not available":"\u5C08\u6848\u5132\u5B58\u4E0D\u53EF\u7528","Project save not found":"\u672A\u627E\u5230\u5C08\u6848\u5132\u5B58","Project saved":"\u9805\u76EE\u5DF2\u4FDD\u5B58","Project was modified":"\u9805\u76EE\u5DF2\u4FEE\u6539","Project {projectName} will be deleted. You will no longer be able to access it.":function(a){return["\u5C08\u6848 ",a("projectName")," \u5C07\u88AB\u522A\u9664\u3002\u60A8\u5C07\u7121\u6CD5\u518D\u8A2A\u554F\u3002"]},"Projects":"\u5C08\u6848","Projects in disabled accounts will not be deleted. All disabled accounts can be reactivated after 15 days.":"\u5728\u7981\u7528\u5E33\u6236\u4E2D\u7684\u9805\u76EE\u4E0D\u6703\u88AB\u522A\u9664\u3002\u6240\u6709\u7981\u7528\u5E33\u6236\u5747\u53EF\u5728 15 \u5929\u5F8C\u91CD\u65B0\u555F\u7528\u3002","Promoting your game to the community":"\u5411\u793E\u5340\u63A8\u5EE3\u60A8\u7684\u6E38\u6232","Promotions + Earn credits":"\u4FC3\u92B7 + \u8CFA\u53D6\u7A4D\u5206","Properties":"\u5C6C\u6027","Properties & Icons":"\u5C6C\u6027\u8207\u5716\u793A","Properties can't have children.":"\u5C6C\u6027\u4E0D\u80FD\u6709\u5B50\u9805\u3002","Properties store data inside behaviors.":"\u5C6C\u6027\u5C07\u6578\u64DA\u5B58\u5132\u5728\u884C\u70BA\u4E2D\u3002","Properties store data inside objects.":"\u5C6C\u6027\u5C07\u6578\u64DA\u5B58\u5132\u5728\u5C0D\u8C61\u5167\u90E8\u3002","Property list":"\u5C6C\u6027\u5217\u8868","Property list editor":"\u5C6C\u6027\u5217\u8868\u7DE8\u8F2F\u5668","Property name in events: `{parameterName}`":function(a){return["\u4E8B\u4EF6\u4E2D\u7684\u5C6C\u6027\u540D\u7A31: `",a("parameterName"),"`"]},"Props":"\u9053\u5177","Provisioning profiles":"\u914D\u7F6E\u6587\u4EF6","Public":"\u516C\u958B\u7684","Public on gd.games":"\u5728 gd.games \u4E0A\u516C\u958B","Public tutorials":"\u516C\u958B\u6559\u7A0B","Publish":"\u767C\u5E03","Publish game":"\u767C\u4F48\u904A\u6232","Publish game on gd.games":"\u5728 gd.games \u767C\u4F48\u904A\u6232","Publish new version":"\u767C\u4F48\u65B0\u7248\u672C","Publish on gd.games":"\u5728 gd.games \u767C\u4F48","Publish on gd.games to let players try your game":"\u5728 gd.games \u4E0A\u516C\u958B\u4EE5\u8B93\u73A9\u5BB6\u53EF\u4EE5\u8A66\u73A9\u60A8\u7684\u904A\u6232","Publish this build on gd.games":"\u5728 gd.games \u4E0A\u767C\u5E03\u6B64\u69CB\u5EFA","Publish to Android, iOS, unlock more cloud projects, leaderboards, collaboration features and more online services. <0>Learn more":"\u767C\u5E03\u5230 Android\u3001iOS\uFF0C\u89E3\u9396\u66F4\u591A\u4E91\u9805\u76EE\u3001\u6392\u884C\u699C\u3001\u5354\u4F5C\u529F\u80FD\u548C\u66F4\u591A\u5728\u7DDA\u670D\u52D9\u3002<0>\u4E86\u89E3\u66F4\u591A","Publisher name":"\u767C\u5E03\u8005\u59D3\u540D","Publishing on gd.games":"\u6B63\u5728 gd.games \u767C\u5E03\u4E2D","Publishing to gd.games, the GDevelop gaming platform. Games can be played from any device.":"\u767C\u4F48\u5230 gd.games\uFF0CGDevelop \u904A\u6232\u5E73\u53F0\u3002\u904A\u6232\u53EF\u4EE5\u5728\u4EFB\u4F55\u8A2D\u5099\u4E0A\u73A9\u3002","Purchase":"\u8CFC\u8CB7","Purchase Spine":"\u8CFC\u8CB7 Spine","Purchase credits":"\u8CFC\u8CB7\u7A4D\u5206","Purchase seats":"\u8CFC\u8CB7\u5EA7\u4F4D","Purchase the Education subscription":"\u8CFC\u8CB7\u6559\u80B2\u8A02\u95B1","Purchase with {usageCreditPrice} credits":function(a){return["\u4F7F\u7528 ",a("usageCreditPrice")," \u7A4D\u5206\u8CFC\u8CB7"]},"Purchase {0}":function(a){return["\u8CFC\u8CB7 ",a("0")]},"Purchase {translatedCourseTitle}":function(a){return["\u8CFC\u8CB7",a("translatedCourseTitle")]},"Puzzle":"\u8B0E\u984C","Quadrilateral":"\u56DB\u908A\u5F62","Quick Customization settings":"\u5FEB\u901F\u81EA\u8A02\u8A2D\u7F6E","Quick Customization: Behavior properties":"\u5FEB\u901F\u81EA\u8A02\uFF1A\u884C\u70BA\u5C6C\u6027","Quit tutorial":"\u9000\u51FA\u6559\u7A0B","R;G;B, like 100;200;180":"R; G; B\uFF0C\u6BD4\u5982 100; 200; 180","RPG":"RPG \u89D2\u8272\u626E\u6F14\u904A\u6232","Racing":"\u7AF6\u901F\u985E","Radius":"\u534A\u5F91","Radius of the emitter":"\u767C\u5C04\u5340\u534A\u5F91","Rank this comment as bad":"\u5C07\u6B64\u8A55\u8AD6\u8A55\u70BA\u5DEE\u8A55","Rank this comment as good":"\u5C07\u6B64\u8A55\u8AD6\u8A55\u70BA\u597D\u8A55","Rank this comment as great":"\u5C07\u6B64\u8A55\u8AD6\u8A55\u70BA\u512A\u79C0","Rate chapter":"\u8A55\u50F9\u7AE0\u7BC0","Raw error":"Raw error","Re-enable npm script security warning":"\u91CD\u65B0\u555F\u7528 npm \u8173\u672C\u5B89\u5168\u8B66\u544A","Re-install":"\u91CD\u65B0\u5B89\u88DD","React to lights":"\u5C0D\u71C8\u5149\u4F5C\u51FA\u53CD\u61C9","Read & Write":"\u8B80\u5BEB","Read <0>{behavior_name}'s settings on <1>{object_name} in scene {scene_name}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u8B80\u53D6 <0>",a("behavior_name")," \u7684\u8A2D\u7F6E\u65BC <1>",a("object_name"),"\u3002"]},"Read <0>{object_name}'s properties in scene <1>{scene_name}.":function(a){return["\u5728\u5834\u666F <1>",a("scene_name")," \u4E2D\u8B80\u53D6 <0>",a("object_name")," \u7684\u5C6C\u6027\u3002"]},"Read <0>{scene_name}'s scene settings.":function(a){return["\u8B80\u53D6 <0>",a("scene_name")," \u7684\u5834\u666F\u8A2D\u7F6E\u3002"]},"Read docs for {extension_names}.":function(a){return["\u8B80\u53D6 ",a("extension_names")," \u7684\u6587\u6A94\u3002"]},"Read events in scene <0>{scene_name}.":function(a){return["\u5728\u5834\u666F <0>",a("scene_name")," \u4E2D\u8B80\u53D6\u4E8B\u4EF6\u3002"]},"Read instances in scene <0>{scene_name}.":function(a){return["\u5728\u5834\u666F <0>",a("scene_name")," \u4E2D\u8B80\u53D6\u5BE6\u4F8B\u3002"]},"Read only":"\u53EA\u8B80","Read the doc":"\u95B1\u8B80\u6587\u6A94","Read the wiki page for more info about the dataloss mode.":"\u95B1\u8B80wiki\u9801\u9762\u4E86\u89E3\u66F4\u591A\u95DC\u4E8E\u6578\u64DA\u6A21\u5F0F\u7684\u4FE1\u606F\u3002","Read tutorial":"\u95B1\u8B80\u6559\u7A0B","Reading the documentation":"\u6B63\u5728\u95B1\u8B80\u6587\u4EF6","Reading through the events":"\u95B1\u8B80\u4E8B\u4EF6","Ready-made games":"\u73FE\u6210\u7684\u6E38\u6232","Reasoning level":"\u63A8\u7406\u7D1A\u5225","Reasoning level:":"\u63A8\u7406\u7D1A\u5225\uFF1A","Receive a copy of GDevelop\u2019s teaching resources:<0>Extract of our ready-to-teach Curriculum<1>Poster with GDevelop's core concepts to use in your classroom<2>\u201CGame Development as an Educational wonder\u201D PDF":"\u63A5\u6536 GDevelop \u6559\u5B78\u8CC7\u6E90\u7684\u526F\u672C\uFF1A<0>\u6211\u5011\u96A8\u6642\u53EF\u6559\u5B78\u8AB2\u7A0B\u7684\u6458\u8981<1>\u5E36\u6709 GDevelop \u6838\u5FC3\u6982\u5FF5\u7684\u6D77\u5831\uFF0C\u4F9B\u60A8\u5728\u8AB2\u5802\u4E2D\u4F7F\u7528<2>\u201C\u904A\u6232\u958B\u767C\u4F5C\u70BA\u6559\u80B2\u5947\u8DE1\u201D PDF","Receive weekly stats about your game by email":"\u901A\u904E\u96FB\u5B50\u90F5\u4EF6\u63A5\u6536\u6709\u95DC\u60A8\u6E38\u6232\u7684\u6BCF\u5468\u7D71\u8A08\u6578\u64DA","Recharge your account to purchase this item.":"\u70BA\u60A8\u7684\u5E33\u6236\u5145\u503C\u4EE5\u8CFC\u8CB7\u8A72\u5546\u54C1\u3002","Recommendations":"\u63A8\u85A6\u5167\u5BB9","Recommended":"\u63A8\u85A6","Recommended for you":"\u70BA\u60A8\u63A8\u85A6","Recovering older version...":"\u6B63\u5728\u6062\u5FA9\u820A\u7248\u672C...","Rectangle paint":"\u77E9\u5F62\u7E6A\u756B","Reddit":"Reddit","Redeem":"\u514C\u63DB","Redeem a code":"\u514C\u63DB\u4EE3\u78BC","Redeemed":"\u5DF2\u514C\u63DB","Redeemed code valid until {0} .":function(a){return["\u514C\u63DB\u4EE3\u78BC\u6709\u6548\u671F\u81F3 ",a("0")," \u3002"]},"Redemption Codes":"\u514C\u63DB\u78BC","Redemption or coupon code":"\u514C\u63DB\u6216\u512A\u60E0\u4EE3\u78BC","Redo":"\u91CD\u505A","Redo the last changes":"\u91CD\u505A\u4E0A\u6B21\u66F4\u6539","Redo the survey":"\u91CD\u505A\u8ABF\u67E5","Refine your search with more specific keywords.":"\u4F7F\u7528\u66F4\u5177\u9AD4\u7684\u95DC\u9375\u5B57\u4F86\u512A\u5316\u60A8\u7684\u641C\u7D22\u3002","Refresh":"\u5237\u65B0","Refresh dashboard":"\u5237\u65B0\u5100\u8868\u677F","Refresh games":"\u5237\u65B0\u904A\u6232","Register or publish your game first to see its exports.":"\u9996\u5148\u6CE8\u518A\u6216\u767C\u5E03\u60A8\u7684\u6E38\u6232\u4EE5\u67E5\u770B\u5176\u5C0E\u51FA\u3002","Register the project":"\u6CE8\u518A\u9805\u76EE","Related expression and condition":"\u76F8\u95DC\u8868\u9054\u5F0F\u548C\u689D\u4EF6","Related objects":"\u76F8\u95DC\u5C0D\u8C61","Relational operator":"\u95DC\u7CFB\u904B\u7B97\u7B26(Relation operator)","Relaunch the 3D editor":"\u91CD\u65B0\u555F\u52D5 3D \u7DE8\u8F2F\u5668","Reload project from disk/cloud (lose all changes)":"\u5F9E\u78C1\u789F/\u96F2\u7AEF\u91CD\u65B0\u8F09\u5165\u5C08\u6848\uFF08\u5C07\u4E1F\u5931\u6240\u6709\u66F4\u6539\uFF09","Reload the project? Any changes that have not been saved will be lost.":"\u662F\u5426\u8981\u91CD\u65B0\u8F09\u5165\u5C08\u6848\uFF1F\u4EFB\u4F55\u672A\u4FDD\u5B58\u7684\u66F4\u6539\u5C07\u6703\u4E1F\u5931\u3002","Remaining usage":"\u5269\u9918\u4F7F\u7528\u6B21\u6578","Remember that your access to this resource is exclusive to your account.":"\u5F88\u62B1\u6B49\uFF0C\u60A8\u7684\u8CEC\u6236\u6C92\u6709\u8DB3\u5920\u7684\u6B0A\u9650\u4F86\u8A2A\u554F\u9019\u500B\u8CC7\u6E90\u3002","Remix a game in 2 minutes":"\u5728 2 \u5206\u9418\u5167\u91CD\u65B0\u6DF7\u5408\u4E00\u500B\u904A\u6232","Remix an existing game":"\u91CD\u65B0\u6DF7\u5408\u73FE\u6709\u904A\u6232","Remove":"\u522A\u9664","Remove <0>{behavior_name} behavior from <1>{object_name} in scene {scene_name}.":function(a){return["\u5F9E\u5834\u666F ",a("scene_name")," \u4E2D\u79FB\u9664 <0>",a("behavior_name")," \u884C\u70BA\u65BC <1>",a("object_name"),"\u3002"]},"Remove Ordering":"\u522A\u9664\u6392\u5E8F","Remove behavior":"\u522A\u9664\u884C\u70BA","Remove certificate":"\u522A\u9664\u8B49\u66F8","Remove collaborator":"\u522A\u9664\u5408\u4F5C\u8005","Remove effect":"\u79FB\u9664\u6548\u679C","Remove entry":"\u522A\u9664\u689D\u76EE","Remove folder and function":"\u522A\u9664\u6587\u4EF6\u593E\u548C\u51FD\u6578","Remove folder and functions":"\u522A\u9664\u6587\u4EF6\u593E\u548C\u51FD\u6578","Remove folder and object":"\u522A\u9664\u6587\u4EF6\u593E\u548C\u5C0D\u8C61","Remove folder and objects":"\u522A\u9664\u6587\u4EF6\u593E\u548C\u5C0D\u8C61","Remove folder and properties":"\u522A\u9664\u6587\u4EF6\u593E\u53CA\u5C6C\u6027","Remove folder and property":"\u522A\u9664\u6587\u4EF6\u593E\u53CA\u5C6C\u6027","Remove from list":"\u5F9E\u5217\u8868\u4E2D\u522A\u9664","Remove from team":"\u5F9E\u5718\u968A\u79FB\u9664","Remove function":"\u522A\u9664\u51FD\u6578","Remove group":"\u79FB\u9664\u7D44","Remove invitation?":"\u8981\u79FB\u9664\u9080\u8ACB\u55CE\uFF1F","Remove object":"\u79FB\u9664\u5C0D\u8C61","Remove objects":"\u522A\u9664\u5C0D\u8C61","Remove objects from the scene list":"\u5F9E\u5834\u666F\u5217\u8868\u4E2D\u79FB\u9664\u7269\u4EF6","Remove project from list":"\u5F9E\u5217\u8868\u4E2D\u79FB\u9664\u5C08\u6848","Remove resource":"\u79FB\u9664\u8CC7\u6E90","Remove resources with invalid path":"\u522A\u9664\u5177\u6709\u7121\u6548\u8DEF\u5F91\u7684\u8CC7\u6E90","Remove scene <0>{scene_name}.":function(a){return["\u79FB\u9664\u5834\u666F <0>",a("scene_name"),"\u3002"]},"Remove shortcut":"\u522A\u9664\u5FEB\u6377\u9375","Remove student?":"\u8981\u79FB\u9664\u5B78\u751F\u55CE\uFF1F","Remove the Else":"\u522A\u9664 ELSE","Remove the Long Description":"\u522A\u9664\u9577\u63CF\u8FF0","Remove the Loop Counter Variable":"\u79FB\u9664\u8FF4\u5708\u8A08\u6578\u5668\u8B8A\u6578","Remove the animation":"\u522A\u9664\u52D5\u756B","Remove the extension":"\u79FB\u9664\u64F4\u5C55","Remove the sprite":"\u522A\u9664\u7CBE\u9748","Remove this Auth Key":"\u522A\u9664\u6B64\u8A8D\u8B49\u5BC6\u9470","Remove this certificate":"\u522A\u9664\u6B64\u8B49\u66F8","Remove this certificate?":"\u522A\u9664\u6B64\u8B49\u66F8\uFF1F","Remove this counter of the loop":"\u79FB\u9664\u8FF4\u5708\u7684\u9019\u500B\u8A08\u6578\u5668","Remove unlimited":"\u79FB\u9664\u7121\u9650\u5236","Remove unused...":"\u79FB\u9664\u672A\u4F7F\u7528...","Remove variant":"\u522A\u9664\u8B8A\u9AD4","Rename":"\u91CD\u547D\u540D","Rename <0>{object_name} to <1>{newValue} (in scene {scene_name}).":function(a){return["\u5C07 <0>",a("object_name")," \u91CD\u547D\u540D\u70BA <1>",a("newValue"),"\uFF08\u5728\u5834\u666F ",a("scene_name")," \u4E2D\uFF09\u3002"]},"Renamed object to {0}.":function(a){return["\u7269\u4EF6\u5DF2\u91CD\u65B0\u547D\u540D\u70BA ",a("0"),"\u3002"]},"Rendering type":"\u6E32\u67D3\u985E\u578B","Repeat <0>{0} times:":function(a){return["\u91CD\u8907<0>",a("0"),"\u6B21\uFF1A"]},"Repeat borders and center textures (instead of stretching them)":"\u91CD\u5FA9\u908A\u6846\u548C\u4E2D\u5FC3\u7D0B\u7406\uFF08\u800C\u4E0D\u662F\u62C9\u4F38\u5B83\u5011\uFF09","Repeat for each instance of<0>{0}":function(a){return["\u5C0D\u6BCF\u500B\u5BE6\u4F8B\u7684<0>",a("0"),"\u91CD\u8907"]},"Repeat these:":"\u91CD\u5FA9\u9019\u4E9B\uFF1A","Replace":"\u66FF\u63DB","Replace <0>{object_name} in scene <1>{scene_name}.":function(a){return["\u5728\u5834\u666F <1>",a("scene_name")," \u4E2D\u66FF\u63DB <0>",a("object_name"),"\u3002"]},"Replace existing extension":"\u66FF\u63DB\u73FE\u6709\u64F4\u5C55","Replay":"\u56DE\u653E","Report a wrong translation":"\u53CD\u994B\u932F\u8AA4\u7684\u7FFB\u8B6F","Report an issue":"\u5831\u544A\u4E00\u500B\u554F\u984C","Report anyway":"\u4ECD\u7136\u5831\u544A","Report this comment as abusive, harmful or spam":"\u8209\u5831\u6B64\u8A55\u8AD6\u70BA\u8FB1\u7F75\u6027\u8A55\u8AD6\u3001\u6709\u5BB3\u8A55\u8AD6\u6216\u5783\u573E\u8A55\u8AD6","Required behavior":"\u5FC5\u586B\u884C\u70BA","Reset":"\u91CD\u7F6E","Reset Debugger layout":"\u91CD\u7F6E\u8ABF\u8A66\u5668\u5E03\u5C40","Reset Extension Editor layout":"\u91CD\u7F6E\u64F4\u5C55\u7DE8\u8F2F\u5668\u5E03\u5C40","Reset Resource Editor layout":"\u91CD\u7F6E\u8CC7\u6E90\u7DE8\u8F2F\u5668\u5E03\u5C40","Reset Scene Editor layout":"\u91CD\u7F6E\u5834\u666F\u7DE8\u8F2F\u5668\u5E03\u5C40","Reset all shortcuts to default":"\u91CD\u7F6E\u6240\u6709\u5FEB\u6377\u9375","Reset and hide children configuration":"\u91CD\u7F6E\u4E26\u96B1\u85CF\u5B50\u9805\u914D\u7F6E","Reset hidden Ask AI text inputs":"\u91CD\u7F6E\u96B1\u85CF\u7684\u8A62\u554F AI \u6587\u672C\u8F38\u5165","Reset hidden announcements":"\u91CD\u7F6E\u96B1\u85CF\u7684\u516C\u544A","Reset hidden embedded explanations":"\u91CD\u7F6E\u96B1\u85CF\u7684\u5D4C\u5165\u5F0F\u89E3\u91CB","Reset hidden embedded tutorials":"\u91CD\u7F6E\u96B1\u85CF\u7684\u5D4C\u5165\u5F0F\u6559\u7A0B","Reset leaderboard":"\u91CD\u7F6E\u6392\u884C\u699C","Reset leaderboard {0}":function(a){return["\u91CD\u7F6E\u6392\u884C\u699C ",a("0")]},"Reset password":"\u91CD\u7F6E\u5BC6\u78BC","Reset requested the {0} . Please wait a few minutes...":function(a){return["\u91CD\u7F6E\u8ACB\u6C42",a("0"),"\u3002\u8ACB\u7B49\u5F85\u5E7E\u5206\u9418..."]},"Reset to automatic collision mask":"\u91CD\u7F6E\u70BA\u81EA\u52D5\u78B0\u649E\u906E\u7F69","Reset to default":"\u91CD\u7F6E\u70BA\u9ED8\u8A8D\u503C","Reset your password":"\u91CD\u7F6E\u60A8\u7684\u5BC6\u78BC","Resolution and rendering":"\u5206\u8FA8\u7387\u548C\u6E32\u67D3","Resource":"\u8CC7\u6E90","Resource URL":"\u8CC7\u6E90 URL","Resource file path copied to clipboard":"\u5FA9\u5236\u5230\u526A\u8CBC\u677F\u7684\u8CC7\u6E90\u6587\u4EF6\u8DEF\u5F91","Resource kind":"\u8CC7\u6E90\u985E\u578B","Resource name":"\u8CC7\u6E90\u540D\u7A31","Resource type":"\u8CC7\u6E90\u985E\u578B","Resource(s) URL(s) (one per line)":"\u8CC7\u6E90: URL(\u6BCF\u884C\u4E00\u500B)","Resources":"\u8CC7\u6E90","Resources (any kind)":"\u8CC7\u6E90 (\u4EFB\u4F55\u985E\u578B)","Resources added: {0}":function(a){return["\u8CC7\u6E90\u5DF2\u6DFB\u52A0: ",a("0")]},"Resources are automatically added to your project whenever you add an image, a font or a video to an object or when you choose an audio file in events. Choose a resource to display its properties.":"\u7576\u60A8\u6DFB\u52A0\u5716\u7247\u3001\u5B57\u9AD4\u6216\u8996\u983B\u5230\u5C0D\u8C61\u6216\u4E8B\u4EF6\u4E2D\u9078\u64C7\u97F3\u983B\u6587\u4EF6\u6642\uFF0C\u8CC7\u6E90\u81EA\u52D5\u6DFB\u52A0\u5230\u60A8\u7684\u9805\u76EE\u4E2D\u3002\u9078\u64C7\u8CC7\u6E90\u986F\u793A\u5C6C\u6027\u3002","Resources loading":"\u8CC7\u6E90\u52A0\u8F09\u4E2D","Resources preloading":"\u8CC7\u6E90\u9810\u52A0\u8F09\u4E2D","Resources unloading":"\u8CC7\u6E90\u5378\u8F09\u4E2D","Restart":"\u91CD\u65B0\u555F\u52D5","Restart 3D editor":"\u91CD\u65B0\u555F\u52D5 3D \u7DE8\u8F2F\u5668","Restart the Tutorial":"\u91CD\u555F\u6559\u7A0B","Restart tutorial":"\u91CD\u555F\u6559\u7A0B","Restarting the preview from scratch is required":"\u91CD\u65B0\u555F\u52D5\u9810\u89BD(from scratch is required)","Restore":"\u9084\u539F","Restore a previous purchase":"\u6062\u5FA9\u4E4B\u524D\u7684\u8CFC\u8CB7","Restore accounts":"\u6062\u5FA9\u5E33\u6236","Restore project before this message":"\u5728\u6B64\u8A0A\u606F\u4E4B\u524D\u9084\u539F\u5C08\u6848","Restore project to this state?":"\u8981\u5C07\u5C08\u6848\u9084\u539F\u81F3\u6B64\u72C0\u614B\uFF1F","Restore this version":"\u6062\u5FA9\u6B64\u7248\u672C","Restore version":"\u9084\u539F\u7248\u672C","Restored":"\u5DF2\u9084\u539F","Restoring...":"\u9084\u539F\u4E2D...","Results for:":"\u7D50\u679C\u70BA\uFF1A","Retry":"\u91CD\u8A66","Reviewing a starter game template.":"\u6B63\u5728\u6AA2\u67E5\u5165\u9580\u904A\u6232\u7BC4\u672C\u3002","Reviewing the current state":"\u6B63\u5728\u6AA2\u67E5\u7576\u524D\u72C0\u614B","Reviewing the game structure":"\u6B63\u5728\u6AA2\u67E5\u904A\u6232\u7D50\u69CB","Reviewing the scene data":"\u6B63\u5728\u6AA2\u67E5\u5834\u666F\u6578\u64DA","Reviewing the {templateName} starter template.":function(a){return["\u6B63\u5728\u6AA2\u67E5 ",a("templateName")," \u5165\u9580\u7BC4\u672C\u3002"]},"Rework the game":"\u91CD\u65B0\u88FD\u4F5C\u904A\u6232","Right":"\u53F3","Right (secondary)":"\u53F3 (\u6B21\u8981)","Right bound":"\u53F3\u908A\u754C","Right bound should be greater than left bound":"\u53F3\u908A\u754C\u61C9\u5927\u65BC\u5DE6\u908A\u754C","Right face":"\u53F3\u9762","Right margin":"\u53F3\u908A\u8DDD","Right-click for more events":"\u53F3\u9375\u9EDE\u64CA\u67E5\u770B\u66F4\u591A\u4E8B\u4EF6","Right-click for quick menu":"\u53F3\u9375\u9EDE\u64CA\u7372\u5F97\u5FEB\u6377\u83DC\u55AE","Room: {0}":function(a){return["\u623F\u9593\uFF1A",a("0")]},"Rooms":"\u623F\u9593","Root folder":"\u6839\u6587\u4EF6\u593E","Rotation":"\u65CB\u8F49","Rotation (X)":"\u65CB\u8F49 (X)","Rotation (Y)":"\u65CB\u8F49 (Y)","Rotation (Z)":"\u65CB\u8F49 (Z)","Round pixels when rendering, useful for pixel perfect games.":"\u6E32\u67D3\u6642\u65CB\u8F49\u50CF\u7D20\uFF0C\u5C0D\u50CF\u7D20\u5B8C\u7F8E\u6E38\u6232\u6709\u7528\u3002","Round to X decimal point":"\u56DB\u820D\u4E94\u5165\u5230X\u5C0F\u6578\u9EDE","Run a preview":"\u555F\u52D5\u9810\u89BD","Run a preview (with loading & branding)":"\u904B\u884C\u9810\u89BD(\u52A0\u8F09\u548C\u54C1\u724C)","Run a preview and you will be able to inspect it with the debugger.":"\u904B\u884C\u9810\u89BD\uFF0C\u4F60\u5C31\u53EF\u4EE5\u7528\u8ABF\u8A66\u5668\u4F86\u6AA2\u67E5\u5B83\u3002","Run on this computer":"\u5728\u6B64\u96FB\u8166\u4E0A\u904B\u884C","Save":"\u4FDD\u5B58","Save Project":"\u4FDD\u5B58\u9805\u76EE","Save and continue":"\u4FDD\u5B58\u5E76\u7E7C\u7E8C","Save as main version":"\u4FDD\u5B58\u70BA\u4E3B\u7248\u672C","Save as...":"\u53E6\u5B58\u70BA...","Save in the \"Downloads\" folder":"\u4FDD\u5B58\u5728\u201C\u4E0B\u8F09\u201D\u6587\u4EF6\u593E\u4E2D","Save on your computer: download GDevelop desktop app":"\u5728\u60A8\u7684\u96FB\u8166\u4E0A\u4FDD\u5B58\uFF1A\u4E0B\u8F09 GDevelop \u684C\u9762\u61C9\u7528\u7A0B\u5F0F","Save project":"\u4FDD\u5B58\u9805\u76EE","Save project as":"\u5C07\u9805\u76EE\u53E6\u5B58\u70BA","Save project as...":"\u9805\u76EE\u53E6\u5B58\u70BA...","Save to computer with GDevelop desktop app":"\u4F7F\u7528 GDevelop \u684C\u9762\u61C9\u7528\u7A0B\u5F0F\u4FDD\u5B58\u5230\u96FB\u8166","Save your changes or close the external editor to continue.":"\u4FDD\u5B58\u60A8\u7684\u66F4\u6539\u6216\u95DC\u9589\u5916\u90E8\u7DE8\u8F2F\u5668\u4EE5\u7E7C\u7E8C\u3002","Save your game":"\u4FDD\u5B58\u4F60\u7684\u904A\u6232","Save your project":"\u4FDD\u5B58\u9805\u76EE","Save your project before using the version history.":"\u5728\u4F7F\u7528\u7248\u672C\u6B77\u53F2\u8A18\u9304\u4E4B\u524D\u4FDD\u5B58\u60A8\u7684\u9805\u76EE\u3002","Saving project":"\u4FDD\u5B58\u9805\u76EE","Saving...":"\u5B58\u5132","Scale mode (also called \"Sampling\")":"\u7E2E\u653E\u6A21\u5F0F (\u4E5F\u7A31\u70BA\u201C\u53D6\u6A23\u201D)","Scaling factor":"\u6BD4\u4F8B\u56E0\u5B50","Scaling factor to apply to the default dimensions":"\u61C9\u7528\u65BC\u9ED8\u8A8D\u5C3A\u5BF8\u7684\u7E2E\u653E\u56E0\u5B50","Scan in the project folder for...":"\u6383\u63CF\u9805\u76EE\u6587\u4EF6\u593E...","Scan missing animations":"\u6383\u63CF\u7F3A\u5931\u7684\u52D5\u756B","Scene":"\u5834\u666F","Scene Groups":"\u5834\u666F\u7D44","Scene Objects":"\u5834\u666F\u5C0D\u8C61","Scene Variables":"\u5834\u666F\u8B8A\u91CF","Scene background color":"\u5834\u666F\u80CC\u666F\u8272","Scene editor":"\u5834\u666F\u7DE8\u8F2F\u5668","Scene events":"\u5834\u666F\u4E8B\u4EF6","Scene groups":"\u5834\u666F\u7D44","Scene name":"\u5834\u666F\u540D\u7A31","Scene name (text)":"\u5834\u666F\u540D\u7A31 (\u6587\u672C)","Scene objects":"\u5834\u666F\u5C0D\u8C61","Scene properties":"\u5834\u666F\u5C6C\u6027","Scene variable":"\u5834\u666F\u8B8A\u91CF","Scene variable (deprecated)":"\u5834\u666F\u8B8A\u6578 (\u5DF2\u5EE2\u68C4)","Scene variables":"\u5834\u666F\u8B8A\u91CF","Scenes":"\u5834\u666F","Scope":"\u8303\u570D","Score":"\u5206\u6578","Score column settings":"\u5206\u6578\u5217\u8A2D\u7F6E","Score display":"\u5206\u6578\u986F\u793A","Score multiplier":"\u5206\u6578\u4E58\u6578","Scores sort order":"\u5206\u6578\u6392\u5E8F\u9806\u5E8F","Scroll":"\u6EFE\u52D5","Search":"\u641C\u7D22","Search GDevelop documentation.":"\u641C\u5C0B GDevelop \u6587\u4EF6\u3002","Search and replace in parameters":"\u5728\u53C3\u6578\u4E2D\u641C\u7D22\u5E76\u66FF\u63DB","Search assets":"\u641C\u7D22\u8CC7\u7522","Search behaviors":"\u641C\u7D22\u884C\u70BA","Search by name":"\u6309\u540D\u7A31\u641C\u7D22","Search examples":"\u641C\u7D22\u793A\u4F8B","Search extensions":"\u641C\u7D22\u64F4\u5C55","Search filters":"\u641C\u7D22\u904E\u6FFE\u5668","Search for New Extensions":"\u641C\u7D22\u65B0\u7684\u64F4\u5C55","Search for new actions in extensions":"\u5728\u64F4\u5C55\u4E2D\u641C\u7D22\u65B0\u7684\u64CD\u4F5C","Search for new conditions in extensions":"\u5728\u64F4\u5C55\u4E2D\u641C\u7D22\u65B0\u7684\u689D\u4EF6","Search functions":"\u641C\u7D22\u529F\u80FD","Search in all event sheets...":"\u5728\u6240\u6709\u4E8B\u4EF6\u8868\u4E2D\u641C\u5C0B...","Search in event sentences":"\u641C\u7D22\u4E8B\u4EF6\u53E5\u5B50","Search in events":"\u5728\u4E8B\u4EF6\u4E2D\u641C\u7D22","Search in project":"\u5728\u9805\u76EE\u4E2D\u641C\u7D22","Search in properties":"\u5728\u5C6C\u6027\u4E2D\u641C\u7D22","Search instances":"\u641C\u7D22\u5BE6\u4F8B","Search object groups":"\u641C\u7D22\u5C0D\u8C61\u7D44","Search objects":"\u641C\u7D22\u5C0D\u8C61","Search objects or actions":"\u641C\u7D22\u5C0D\u8C61\u6216\u52D5\u4F5C","Search objects or conditions":"\u641C\u7D22\u5C0D\u8C61\u6216\u689D\u4EF6","Search panel":"\u641C\u7D22\u9762\u677F","Search resources":"\u641C\u7D22\u8CC7\u6E90","Search results":"\u641C\u7D22\u7D50\u679C","Search the shop":"\u641C\u5C0B\u5546\u5E97","Search variables":"\u641C\u7D22\u8B8A\u91CF","Search {searchPlaceholderObjectName} actions":function(a){return["\u641C\u7D22 ",a("searchPlaceholderObjectName")," \u52D5\u4F5C"]},"Search {searchPlaceholderObjectName} conditions":function(a){return["\u641C\u7D22 ",a("searchPlaceholderObjectName")," \u689D\u4EF6"]},"Search/import extensions":"\u641C\u7D22/\u5C0E\u5165\u64F4\u5C55","Searching the asset store.":"\u641C\u5C0B\u8CC7\u6E90\u5546\u5E97\u3002","Seats":"\u5EA7\u4F4D","Seats available:":"\u53EF\u7528\u5EA7\u4F4D\uFF1A","Seats left: {availableSeats}":function(a){return["\u5269\u9918\u540D\u984D\uFF1A",a("availableSeats")]},"Seconds":"\u79D2\u9418","Section name":"\u7AE0\u7BC0\u540D\u7A31","See Marketing Boosts":"\u67E5\u770B\u71DF\u92B7\u63A8\u5EE3","See all":"\u67E5\u770B\u5168\u90E8","See all exports":"\u67E5\u770B\u6240\u6709\u5C0E\u51FA","See all in the game dashboard":"\u5728\u904A\u6232\u5100\u8868\u677F\u67E5\u770B\u6240\u6709\u5167\u5BB9","See all projects":"\u67E5\u770B\u6240\u6709\u9805\u76EE","See all release notes":"\u67E5\u770B\u6240\u6709\u767C\u884C\u8AAA\u660E","See all the release notes":"\u67E5\u770B\u6240\u6709\u767C\u884C\u8AAA\u660E","See more":"\u67E5\u770B\u66F4\u591A","See my codes":"\u67E5\u770B\u6211\u7684\u4EE3\u78BC","See plans":"\u67E5\u770B\u8A08\u5283","See projects":"\u67E5\u770B\u9805\u76EE","See resources":"\u67E5\u770B\u8CC7\u6E90","See subscriptions":"\u67E5\u770B\u8A02\u95B1","See the releases notes online":"\u5728\u7DDA\u67E5\u770B\u767C\u884C\u8AAA\u660E","See this bundle":"\u67E5\u770B\u6B64\u5305","Select":"Select","Select All":"\u9078\u64C7\u6240\u6709","Select a behavior":"\u9078\u64C7\u884C\u70BA","Select a function...":"\u9078\u64C7\u529F\u80FD...","Select a game":"\u9078\u64C7\u904A\u6232","Select a genre":"\u9078\u64C7\u4E00\u7A2E\u985E\u578B","Select a thumbnail":"\u9078\u64C7\u7E2E\u7565\u5716","Select all active":"\u9078\u64C7\u6240\u6709\u6D3B\u52D5","Select an author":"\u9078\u64C7\u4E00\u4F4D\u4F5C\u8005","Select an extension":"\u9078\u64C7\u64F4\u5C55","Select an image":"\u9078\u64C7\u5716\u50CF","Select an owner":"\u9078\u64C7\u6240\u6709\u8005","Select instances on scene ({instanceCountOnScene})":function(a){return["\u9078\u64C7\u5834\u666F\u4E2D\u7684\u5BE6\u4F8B (",a("instanceCountOnScene"),")"]},"Select log groups to display":"\u9078\u64C7\u8981\u986F\u793A\u7684\u65E5\u5FD7\u7D44","Select resource":"Select resource","Select the controls that apply:":"\u9078\u64C7\u9069\u7528\u7684\u63A7\u5236\u9805\uFF1A","Select the leaderboard from a list":"\u5F9E\u5217\u8868\u4E2D\u9078\u64C7\u6392\u884C\u699C","Select the usernames of the authors of this project. They will be displayed in the selected order, if you publish this game as an example or in the community.":"\u9078\u64C7\u6B64\u9805\u76EE\u4F5C\u8005\u7684\u7528\u6236\u540D\u3002 \u5982\u679C\u60A8\u4EE5\u793A\u4F8B\u6216\u5728\u793E\u5340\u4E2D\u767C\u5E03\u6B64\u6E38\u6232\uFF0C\u4ED6\u5011\u5C07\u88AB\u986F\u793A\u5728\u9078\u5B9A\u7684\u9806\u5E8F\u4E2D\u3002","Select the usernames of the contributors to this extension. They will be displayed in the order selected. Do not see your name? Go to the Profile section and create an account!":"\u9078\u64C7\u6B64\u64F4\u5C55\u7684\u8CA2\u737B\u8005\u7684\u7528\u6236\u540D\u3002\u4ED6\u5011\u5C07\u986F\u793A\u5728\u9078\u64C7\u7684\u9806\u5E8F\u4E2D\u3002 \u4E0D\u8981\u770B\u5230\u60A8\u7684\u540D\u5B57\uFF1F\u8F49\u5230\u500B\u4EBA\u8CC7\u6599\u90E8\u5206\u5E76\u5275\u5EFA\u4E00\u500B\u5E33\u6236\uFF01","Select the usernames of the owners of this project to let them manage this game builds. Be aware that owners can revoke your ownership.":"\u9078\u64C7\u6B64\u9805\u76EE\u6240\u6709\u8005\u7684\u7528\u6236\u540D\uFF0C\u8B93\u4ED6\u5011\u7BA1\u7406\u6B64\u6E38\u6232\u7248\u672C\u3002\u8ACB\u6CE8\u610F\uFF0C\u6240\u6709\u8005\u53EF\u4EE5\u64A4\u92B7\u60A8\u7684\u6240\u6709\u6B0A\u3002","Select up to 3 genres for the game to be visible on gd.games's categories pages!":"\u9078\u64C7\u6700\u591A3\u7A2E\u985E\u578B\u7684\u6E38\u6232\u53EF\u898B\u4E8E gd.game \u7684\u5206\u985E\u9801\u9762\uFF01","Select {0} resources":function(a){return["Select ",a("0")," resources"]},"Selected instances will be moved to a new custom object.":"\u9078\u5B9A\u7684\u5BE6\u4F8B\u5C07\u79FB\u52D5\u5230\u65B0\u7684\u81EA\u8A02\u7269\u4EF6\u3002","Selected instances will be moved to a new external layout.":"\u9078\u5B9A\u7684\u5BE6\u4F8B\u5C07\u79FB\u52D5\u5230\u4E00\u500B\u65B0\u7684\u5916\u90E8\u5E03\u5C40\u3002","Send":"\u767C\u9001","Send a new form":"\u767C\u9001\u65B0\u8868\u683C","Send crash reports during previews to GDevelop":"\u5728\u9810\u89BD\u671F\u9593\u5C07\u5D29\u6F70\u5831\u544A\u767C\u9001\u7D66 GDevelop","Send feedback":"Send feedback","Send it again":"\u518D\u6B21\u767C\u9001","Send the Auth Key":"\u767C\u9001\u9A57\u8B49\u5BC6\u9470","Send to back":"\u7F6E\u4E8E\u540E\u9762","Sending...":"\u767C\u9001\u4E2D...","Sentence in Events Sheet":"\u4E8B\u4EF6\u8868\u4E2D\u7684\u8A9E\u53E5","Sentence in Events Sheet (automatically suffixed by \"of _PARAM0_\")":"\u4E8B\u4EF6\u8868\u4E2D\u7684\u53E5\u5B50(\u81EA\u52D5\u540E\u7DB4\u70BA\u201C_PARAM0_\u201D)","Serial: {0}":function(a){return["\u5E8F\u5217\u865F: ",a("0")]},"Service seems to be unavailable, please try again later.":"\u670D\u52D9\u4F3C\u4E4E\u7121\u6CD5\u4F7F\u7528\uFF0C\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","Sessions":"\u6703\u8A71","Set <0>{object_name}'s variable <1>{variable_name_or_path}.":function(a){return["\u8A2D\u7F6E <0>",a("object_name")," \u7684\u8B8A\u6578 <1>",a("variable_name_or_path"),"\u3002"]},"Set an icon to the extension first":"\u9996\u5148\u5C07\u5716\u793A\u8A2D\u5B9A\u70BA\u64F4\u5C55","Set as default":"\u8A2D\u7F6E\u70BA\u9ED8\u8A8D","Set as global":"\u8A2D\u7F6E\u70BA\u5168\u5C40","Set as global group":"\u8A2D\u7F6E\u70BA\u5168\u5C40\u7FA4\u7D44","Set as global object":"\u8A2D\u7F6E\u70BA\u5168\u5C40\u5C0D\u8C61","Set as start scene":"\u8A2D\u7F6E\u70BA\u958B\u59CB\u5834\u666F","Set by user":"\u7531\u7528\u6236\u8A2D\u7F6E","Set global variable <0>{variable_name_or_path}.":function(a){return["\u8A2D\u7F6E\u5168\u57DF\u8B8A\u6578 <0>",a("variable_name_or_path"),"\u3002"]},"Set scene variable <0>{variable_name_or_path} in scene {scene_name}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u8A2D\u7F6E\u5834\u666F\u8B8A\u6578 <0>",a("variable_name_or_path"),"\u3002"]},"Set shortcut":"\u8A2D\u7F6E\u5FEB\u6377\u9375","Set to false":"\u8A2D\u7F6E\u70BA false","Set to true":"\u8A2D\u7F6E\u70BA true","Set to unlimited":"\u8A2D\u5B9A\u70BA\u7121\u9650\u5236","Set up new leaderboards for this game":"\u70BA\u6B64\u6E38\u6232\u8A2D\u7F6E\u65B0\u7684\u6392\u884C\u699C","Set up the base for your project <0>{project_name}.":function(a){return["\u70BA\u4F60\u7684\u5C08\u6848 <0>",a("project_name")," \u8A2D\u7F6E\u57FA\u790E\u3002"]},"Set variable <0>{variable_name_or_path}.":function(a){return["\u8A2D\u7F6E\u8B8A\u6578 <0>",a("variable_name_or_path"),"\u3002"]},"Setting the minimum number of FPS below 20 will increase a lot the time that is allowed between the simulation of two frames of the game. If case of a sudden slowdown, or on slow computers, this can create buggy behaviors like objects passing beyond a wall. Consider setting 20 as the minimum FPS.":"\u8A2D\u7F6E FPS 20 \u4EE5\u4E0B\u7684\u6700\u4F4E\u6578\u91CF\u5C07\u6703\u589E\u52A0\u5728\u6A21\u64EC\u5169\u6846\u67B6\u6E38\u6232\u4E4B\u9593\u5141\u8A31\u7684\u6642\u9593\u3002\u5982\u679C\u7A81\u7136\u6E1B\u901F\u6216\u7DE9\u6162\u8A08\u7B97\u6A5F\u4E0A\uFF0C\u9019\u53EF\u80FD\u9020\u6210\u50CF\u7269\u9AD4\u8D8A\u904E\u9694\u96E2\u58BB\u4EE5\u5916\u7684bug \u884C\u70BA\u3002\u8003\u616E\u8A2D\u7F6E20\uFF0C\u4F5C\u70BA\u6700\u4F4EFPS\u3002","Settings":"\u8A2D\u7F6E","Setup grid":"\u8A2D\u7F6E\u7DB2\u683C","Shadow":"\u9670\u5F71","Share":"\u5206\u4EAB","Share dialog":"\u5206\u4EAB\u5C0D\u8A71\u6846","Share same collision masks for all animations":"\u70BA\u6240\u6709\u52D5\u756B\u5171\u4EAB\u76F8\u540C\u7684\u78B0\u649E\u8499\u7248","Share same collision masks for all sprites of this animation":"\u70BA\u8A72\u52D5\u756B\u7684\u6240\u6709\u7CBE\u9748\u5171\u4EAB\u76F8\u540C\u7684\u78B0\u649E\u8499\u7248","Share same points for all animations":"\u70BA\u6240\u6709\u52D5\u756B\u5171\u4EAB\u76F8\u540C\u7684\u9EDE","Share same points for all sprites of this animation":"\u70BA\u8A72\u52D5\u756B\u7684\u6240\u6709\u7CBE\u9748\u5171\u4EAB\u76F8\u540C\u7684\u9EDE","Share your game":"\u5206\u4EAB\u4F60\u7684\u6E38\u6232","Share your game on gd.games and collect players feedback about your game.":"\u5728 gd.games \u4E0A\u5206\u4EAB\u60A8\u7684\u904A\u6232\u4E26\u6536\u96C6\u73A9\u5BB6\u5C0D\u60A8\u7684\u904A\u6232\u7684\u53CD\u994B\u3002","Share your game with your friends or teammates.":"\u8207\u60A8\u7684\u670B\u53CB\u6216\u968A\u53CB\u5206\u4EAB\u60A8\u7684\u904A\u6232\u3002","Sharing online":"\u5728\u7DDA\u5206\u4EAB","Sharing the final file with the client":"\u8207\u5BA2\u6236\u7AEF\u5171\u4EAB\u6700\u7D42\u6587\u4EF6","Shooter":"\u5C04\u64CA","Shop":"\u5546\u5E97","Shop section":"\u5546\u5E97\u90E8\u5206","Short":"\u77ED","Short description":"\u7C21\u77ED\u63CF\u8FF0","Short label":"\u77ED\u6A19\u7C3D","Should finish soon.":"\u61C9\u8A72\u5F88\u5FEB\u5C31\u6703\u5B8C\u6210\u3002","Show":"\u986F\u793A","Show \"Ask AI\" button in the title bar":"\u5728\u6A19\u984C\u6B04\u4E2D\u986F\u793A\u300C\u8A62\u554F AI\u300D\u6309\u9215","Show Home":"\u986F\u793A\u4E3B\u9801","Show Mask":"\u986F\u793A\u8499\u677F","Show Project Manager":"\u6253\u958B\u9805\u76EE\u7BA1\u7406\u5668","Show Properties Names":"\u986F\u793A\u5C6C\u6027\u540D\u7A31","Show advanced import options":"\u986F\u793A\u9AD8\u7D1A\u5C0E\u5165\u9078\u9805","Show all feedbacks":"\u986F\u793A\u6240\u6709\u53CD\u994B","Show button to load guided lesson from file and test it":"\u986F\u793A\u6309\u9215\u4EE5\u5F9E\u6587\u4EF6\u52A0\u8F09\u5F15\u5C0E\u8AB2\u7A0B\u4E26\u9032\u884C\u6E2C\u8A66","Show deprecated behaviors (prefer not to use anymore)":"\u986F\u793A\u5DF2\u68C4\u7528\u7684\u884C\u70BA(\u4E0D\u518D\u4F7F\u7528)","Show deprecated options":"\u986F\u793A\u5DF2\u68C4\u7528\u7684\u9078\u9805","Show details":"\u986F\u793A\u8A73\u60C5","Show diagnostic report":"\u986F\u793A\u8A3A\u65B7\u5831\u544A","Show effect":"\u986F\u793A\u7279\u6548","Show experimental behaviors":"\u986F\u793A\u5BE6\u9A57\u6027\u884C\u70BA","Show experimental extensions":"\u986F\u793A\u5BE6\u9A57\u6027\u64F4\u5C55","Show experimental extensions in the list of extensions":"\u5728\u64F4\u5C55\u5217\u8868\u4E2D\u986F\u793A\u5BE6\u9A57\u6027\u64F4\u5C55","Show experimental objects":"\u986F\u793A\u5BE6\u9A57\u6027\u7269\u4EF6","Show grid":"\u986F\u793A\u7DB2\u683C","Show in local folder":"\u5728\u672C\u5730\u6587\u4EF6\u593E\u4E2D\u986F\u793A","Show internal":"\u986F\u793A\u5167\u90E8\u8A2D\u7F6E","Show less":"\u986F\u793A\u66F4\u5C11","Show lifecycle functions (advanced)":"\u986F\u793A\u751F\u547D\u5468\u671F\u51FD\u6578(\u9AD8\u7D1A)","Show live assets":"\u986F\u793A\u6D3B\u52D5\u7D20\u6750","Show more":"\u986F\u793A\u66F4\u591A","Show next assets":"\u986F\u793A\u4E0B\u4E00\u500B\u8CC7\u7522","Show objects in 3D in the scene editor":"\u5728\u5834\u666F\u7DE8\u8F2F\u5668\u4E2D\u4EE5 3D \u5F62\u5F0F\u986F\u793A\u5C0D\u8C61","Show older":"\u986F\u793A\u8F03\u820A\u7684","Show other lifecycle functions (advanced)":"\u986F\u793A\u5176\u4ED6\u751F\u547D\u5468\u671F\u51FD\u6578(\u9AD8\u7D1A)","Show previous assets":"\u986F\u793A\u4EE5\u524D\u7684\u8CC7\u7522","Show progress bar":"\u986F\u793A\u9032\u5EA6\u689D","Show staging assets":"\u986F\u793A\u66AB\u5B58\u7D20\u6750","Show the \"Create\" section by default when opening GDevelop":"\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\u6253\u958B GDevelop \u6642\u986F\u793A\u201C\u5275\u5EFA\u201D\u90E8\u5206","Show type errors in JavaScript events (needs a restart)":"\u5728 JavaScript \u4E8B\u4EF6\u4E2D\u986F\u793A\u985E\u578B\u932F\u8AA4\uFF08\u9700\u8981\u91CD\u65B0\u555F\u52D5\uFF09","Show unread feedback only":"\u50C5\u986F\u793A\u672A\u8B80\u53CD\u994B","Show version history":"\u986F\u793A\u7248\u672C\u6B77\u53F2\u8A18\u9304","Show/Hide instance properties":"\u986F\u793A/\u96B1\u85CF\u5BE6\u4F8B\u5C6C\u6027","Showing {0} of {resultsCount}":function(a){return["\u986F\u793A ",a("0")," / ",a("resultsCount")]},"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged \u2014 and when they drop off quickly.":"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged \u2014 and when they drop off quickly.","Side view":"\u5074\u908A\u8996\u5716","Sign up":"\u8A3B\u518A","Signing Credentials":"\u7C3D\u7F72\u8B49\u66F8","Signing options":"\u7C3D\u540D\u9078\u9805","Simple":"\u7C21\u55AE","Simulation":"\u6A21\u64EC","Single commercial use license for claim with Gold or Pro subscription":"\u901A\u904E\u9EC3\u91D1\u6216\u5C08\u696D\u8A02\u95B1\u7533\u8ACB\u7684\u55AE\u4E00\u5546\u696D\u4F7F\u7528\u8A31\u53EF\u8B49","Single file (default)":"\u55AE\u6587\u4EF6 (\u9ED8\u8A8D)","Size":"\u5927\u5C0F","Size:":"\u5927\u5C0F \uFE30","Skins":"\u76AE\u819A","Skip and create from scratch":"\u8DF3\u904E\u5E76\u5F9E\u982D\u958B\u59CB\u5275\u5EFA","Skip the update":"\u8DF3\u904E\u66F4\u65B0","Socials":"\u793E\u4EA4","Some code experience":"\u4E00\u4E9B\u4EE3\u78BC\u7D93\u9A57","Some extensions already exist in the project. Please select the ones you want to replace.":"\u9805\u76EE\u4E2D\u5DF2\u7D93\u5B58\u5728\u4E00\u4E9B\u64F4\u5C55\u3002\u8ACB\u9078\u64C7\u60A8\u60F3\u8981\u66FF\u63DB\u7684\u64F4\u5C55\u3002","Some icons could not be generated.":"\u6709\u4E9B\u5716\u793A\u7121\u6CD5\u751F\u6210\u3002","Some no-code experience":"\u4E00\u4E9B\u7121\u4EE3\u78BC\u7D93\u9A57","Some things in the answer don't exist in GDevelop":"Some things in the answer don't exist in GDevelop","Some variants already exist in the project. Please select the ones you want to replace.":"\u9805\u76EE\u4E2D\u5DF2\u7D93\u5B58\u5728\u4E00\u4E9B\u8B8A\u9AD4\u3002\u8ACB\u9078\u64C7\u60A8\u60F3\u8981\u66FF\u63DB\u7684\u8B8A\u9AD4\u3002","Something went wrong":"\u51FA\u4E86\u4E9B\u554F\u984C","Something went wrong while changing your subscription. Please try again.":"\u66F4\u6539\u8A02\u95B1\u6642\u51FA\u73FE\u554F\u984C\u3002\u8ACB\u518D\u8A66\u4E00\u6B21\u3002","Something went wrong while swapping the asset. Please try again.":"\u4EA4\u63DB\u8CC7\u7522\u6642\u51FA\u73FE\u932F\u8AA4\u3002\u8ACB\u91CD\u8A66\u3002","Something went wrong while syncing your Discord username. Please try again later.":"\u540C\u6B65\u60A8\u7684 Discord \u7528\u6236\u540D\u6642\u51FA\u73FE\u554F\u984C\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","Something went wrong while syncing your forum access. Please try again later.":"\u540C\u6B65\u60A8\u7684\u8AD6\u58C7\u8A2A\u554F\u6642\u51FA\u73FE\u554F\u984C\u3002\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","Something wrong happened :(":"\u51FA\u73FE\u4E86\u67D0\u4E9B\u932F\u8AA4","Something wrong happened when claiming the asset pack. Please check your internet connection or try again later.":"\u9818\u53D6\u8CC7\u7522\u5305\u6642\u767C\u751F\u932F\u8AA4\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Sorry":"\u5F88\u62B1\u6B49","Sort by most recent":"\u6309\u6700\u65B0\u6392\u5E8F","Sort order":"\u6392\u5E8F\u9806\u5E8F","Sound":"\u8072\u97F3","Sounds and musics":"\u8072\u97F3\u548C\u97F3\u6A02","Source file":"\u6E90\u6587\u4EF6","Specific game mechanics":"\u7279\u5B9A\u7684\u6E38\u6232\u6A5F\u5236","Specify something more to the AI to build":"\u5411 AI \u6307\u5B9A\u66F4\u591A\u69CB\u5EFA\u5167\u5BB9","Speech":"\u6F14\u793A","Spine Json":"Spine Json","Spine animation name":"Spine \u52D5\u756B\u540D\u7A31","Spine json resource":"Spine json \u8CC7\u6E90","Sport":"\u9AD4\u80B2\u904B\u52D5","Spray cone angle (in degrees)":"\u767C\u5C04\u89D2\u5EA6(\u5EA6)","Sprite":"\u7CBE\u9748","Standalone dialog":"\u7368\u7ACB\u5C0D\u8A71\u6846","Start Network Preview (Preview over WiFi/LAN)":"\u555F\u52D5\u7DDA\u4E0A\u9810\u89BD (\u901A\u904E WiFi/LAN\u9810\u89BD)","Start Preview and Debugger":"\u555F\u52D5\u9810\u89BD\u548C\u8ABF\u8A66\u5668","Start a game where a ball can bounce around the screen":"\u958B\u59CB\u4E00\u500B\u7403\u53EF\u4EE5\u5728\u5C4F\u5E55\u4E0A\u5F48\u8DF3\u7684\u904A\u6232","Start a new game from this project":"\u5F9E\u6B64\u9805\u76EE\u958B\u555F\u4E00\u500B\u65B0\u904A\u6232","Start a new game?":"\u958B\u59CB\u4E00\u500B\u65B0\u904A\u6232\u55CE\uFF1F","Start a preview to generate a thumbnail!":"\u958B\u59CB\u9810\u89BD\u4EE5\u751F\u6210\u7E2E\u7565\u5716\uFF01","Start a quizz game with a question and 4 answers":"\u958B\u59CB\u4E00\u500B\u6709\u554F\u984C\u548C 4 \u500B\u7B54\u6848\u7684\u6E2C\u9A57\u904A\u6232","Start a simple endless runner game":"\u958B\u59CB\u4E00\u500B\u7C21\u55AE\u7684\u7121\u76E1\u8DD1\u8005\u904A\u6232","Start a simple platformer with a player that can move and jump":"\u958B\u59CB\u4E00\u500B\u7C21\u55AE\u7684\u5E73\u53F0\u904A\u6232\uFF0C\u6709\u73A9\u5BB6\u53EF\u4EE5\u79FB\u52D5\u548C\u8DF3\u8E8D","Start all previews from external layout {0}":function(a){return["\u5F9E\u5916\u90E8\u5E03\u5C40\u958B\u59CB\u6240\u6709\u9810\u89BD ",a("0")]},"Start all previews from scene {0}":function(a){return["\u5F9E\u5834\u666F\u958B\u59CB\u6240\u6709\u9810\u89BD ",a("0")]},"Start build with credits":"\u958B\u59CB\u4F7F\u7528\u7A4D\u5206\u69CB\u5EFA","Start by adding a new behavior.":"\u9996\u5148\u6DFB\u52A0\u4E00\u500B\u65B0\u884C\u70BA\u3002","Start by adding a new external layout.":"\u9996\u5148\u6DFB\u52A0\u4E00\u500B\u65B0\u7684\u5916\u90E8\u5E03\u5C40\u3002","Start by adding a new function.":"\u9996\u5148\u6DFB\u52A0\u4E00\u500B\u65B0\u51FD\u6578\u3002","Start by adding a new group.":"\u9996\u5148\u6DFB\u52A0\u4E00\u500B\u65B0\u7D44\u3002","Start by adding a new object.":"\u9996\u5148\u6DFB\u52A0\u4E00\u500B\u65B0\u5C0D\u8C61\u3002","Start by adding a new property.":"\u8ACB\u5148\u6DFB\u52A0\u4E00\u500B\u65B0\u5C6C\u6027\u3002","Start by adding a new scene.":"\u9996\u5148\u6DFB\u52A0\u4E00\u500B\u65B0\u5834\u666F\u3002","Start by adding new external events.":"\u9996\u5148\u6DFB\u52A0\u65B0\u7684\u5916\u90E8\u4E8B\u4EF6\u3002","Start for free":"\u514D\u8CBB\u958B\u59CB","Start from a template":"\u5F9E\u4E00\u500B\u6A21\u677F\u958B\u59CB","Start learning":"\u958B\u59CB\u5B78\u7FD2","Start next chapter":"\u958B\u59CB\u4E0B\u4E00\u7AE0\u7BC0","Start opacity (0-255)":"\u958B\u59CB \u4E0D\u900F\u660E","Start preview with diagnostic report":"\u4F7F\u7528\u8A3A\u65B7\u5831\u544A\u958B\u59CB\u9810\u89BD","Start profiling":"\u958B\u59CB\u89E3\u6790","Start profiling and then stop it after a few seconds to see the results.":"\u958B\u59CB\u5206\u6790\uFF0C\u4E14\u5728\u6578\u79D2\u5167\u505C\u6B62\uFF0C\u986F\u793A\u7D50\u679C","Start the survey!":"\u958B\u59CB\u8ABF\u67E5\uFF01","Start typing a command...":"\u958B\u59CB\u8F38\u5165\u547D\u4EE4...","Start typing a username":"\u958B\u59CB\u8F38\u5165\u7528\u6236\u540D","Start your game":"\u958B\u59CB\u4F60\u7684\u6E38\u6232","Starting engine":"\u555F\u52D5\u5F15\u64CE","Stay there":"\u7559\u5728\u9019\u91CC","Stop":"\u505C\u6B62","Stop music and sounds at scene startup":"\u5728\u5834\u666F\u555F\u52D5\u6642\u505C\u6B62\u64AD\u653E\u97F3\u6A02\u548C\u8072\u97F3","Stop profiling":"\u505C\u6B62 \u89E3\u6790","Stop working":"\u505C\u6B62\u5DE5\u4F5C","Stopped. Ready when you are.":"\u5DF2\u505C\u6B62\u3002\u96A8\u6642\u6E96\u5099\u5C31\u7DD2\u3002","Store password":"\u5B58\u5132\u5BC6\u78BC","Story-Rich":"\u8C50\u5BCC\u7684\u6545\u4E8B","Strategy":"\u7B56\u7565","String":"\u5B57\u7B26\u4E32","String (text)":"\u5B57\u7B26\u4E32(\u6587\u672C)","String from a list of options (text)":"\u5F9E\u9078\u9805\u5217\u8868\u4E2D\u7684\u5B57\u7B26\u4E32 (\u6587\u672C)","String variables with no value set now default to an empty string (\"\") instead of \"0\". This game was created before this change, so GDevelop maintains the old behavior: unset string variables default to \"0\". It's recommended that you switch to the new behavior and update any variables or conditions relying on \"0\" as a default.":"\u672A\u8A2D\u7F6E\u503C\u7684\u5B57\u4E32\u8B8A\u6578\u73FE\u5728\u9810\u8A2D\u70BA\u7A7A\u5B57\u4E32\uFF08\"\"\uFF09\uFF0C\u800C\u975E\"0\"\u3002\u9019\u500B\u904A\u6232\u662F\u5728\u6B64\u66F4\u6539\u4E4B\u524D\u5275\u5EFA\u7684\uFF0C\u56E0\u6B64 GDevelop \u4FDD\u6301\u4E86\u820A\u7684\u884C\u70BA\uFF1A\u672A\u8A2D\u7F6E\u7684\u5B57\u4E32\u8B8A\u6578\u9810\u8A2D\u70BA\"0\"\u3002\u5EFA\u8B70\u60A8\u5207\u63DB\u5230\u65B0\u7684\u884C\u70BA\u4E26\u66F4\u65B0\u4EFB\u4F55\u4F9D\u8CF4\u65BC\"0\"\u4F5C\u70BA\u9810\u8A2D\u7684\u8B8A\u6578\u6216\u689D\u4EF6\u3002","Stripe secure":"Stripe \u5B89\u5168","Structure":"\u7D50\u69CB","Student":"\u5B78\u751F","Student accounts":"\u5B78\u751F\u5E33\u6236","Studying the event sheets":"\u7814\u7A76\u4E8B\u4EF6\u8868","Studying the object behaviors":"\u7814\u7A76\u7269\u4EF6\u884C\u70BA","Sub Event":"\u5B50\u4E8B\u4EF6","Submit a free pack":"\u63D0\u4EA4\u514D\u8CBB\u5305","Submit a paid pack":"\u63D0\u4EA4\u4ED8\u8CBB\u5305","Submit a tutorial":"\u63D0\u4EA4\u4E00\u4EFD\u6559\u7A0B","Submit a tutorial translated in your language":"\u63D0\u4EA4\u7528\u60A8\u7684\u8A9E\u8A00\u7FFB\u8B6F\u7684\u6559\u7A0B","Submit an example":"\u63D0\u4EA4\u4E00\u500B\u793A\u4F8B","Submit an update":"\u63D0\u4EA4\u66F4\u65B0","Submit and cancel":"\u63D0\u4EA4\u5E76\u53D6\u6D88","Submit to the community":"\u63D0\u4EA4\u7D66\u793E\u5340","Submit your project as an example":"\u4F5C\u70BA\u793A\u4F8B\u63D0\u4EA4\u60A8\u7684\u9805\u76EE","Subscribe":"\u8A02\u95B1","Subscribe to Edu":"\u8A02\u95B1 Edu","Subscription Plan":"\u8A02\u95B1\u8A08\u5283","Subscription outside the app store":"\u61C9\u7528\u7A0B\u5E8F\u5546\u5E97\u4E4B\u5916\u7684\u8A02\u95B1","Subscription with the Apple App store or Google Play store":"\u901A\u904E Apple App Store \u6216 Google Play \u5546\u5E97\u9032\u884C\u8A02\u95B1","Subscriptions":"\u8A02\u95B1","Suffix":"\u540E\u7DB4","Support What You Love":"\u652F\u6301\u60A8\u6240\u71B1\u611B\u7684\u4E8B\u7269","Supported files":"\u652F\u6301\u7684\u6587\u4EF6","Survival":"\u751F\u5B58","Swap":"\u4EA4\u63DB","Swap assets":"\u4EA4\u63DB\u8CC7\u7522","Swap {0} with another asset":function(a){return["\u7528\u53E6\u4E00\u500B\u8CC7\u7522\u66FF\u63DB ",a("0")]},"Switch to GDevelop Credits":"\u5207\u63DB\u5230 GDevelop \u7A4D\u5206","Switch to GDevelop credits or keep building with AI.":"\u5207\u63DB\u5230 GDevelop \u7A4D\u5206\u6216\u7E7C\u7E8C\u8207 AI \u5EFA\u7ACB\u61C9\u7528\u7A0B\u5F0F\u3002","Switch to create objects with the highest Z order of the layer":"\u5207\u63DB\u4EE5\u5275\u5EFA\u5177\u6709\u6700\u9AD8Z\u5C64\u9806\u5E8F\u7684\u5C0D\u8C61","Switch to empty string (\"\") as default for string variables":"\u5C07\u7A7A\u5B57\u4E32\uFF08\"\"\uFF09\u4F5C\u70BA\u5B57\u4E32\u8B8A\u6578\u7684\u9810\u8A2D\u503C","Switch to monthly pricing":"\u5207\u63DB\u5230\u6309\u6708\u5B9A\u50F9","Switch to yearly pricing":"\u5207\u63DB\u5230\u6309\u5E74\u5B9A\u50F9","Sync your role on GDevelop's Discord server":"\u5728 GDevelop \u7684 Discord \u670D\u52D9\u5668\u4E0A\u540C\u6B65\u60A8\u7684\u89D2\u8272","Sync your subscription level on GDevelop's forum":"\u5728 GDevelop \u8AD6\u58C7\u4E0A\u540C\u6B65\u60A8\u7684\u8A02\u95B1\u7D1A\u5225","Table settings":"\u8868\u683C\u8A2D\u7F6E","Tags (comma separated)":"\u6A19\u7C3D (\u4EE5\u9017\u865F\u5206\u9694)","Taking your game further":"\u8B93\u60A8\u7684\u6E38\u6232\u66F4\u9032\u4E00\u6B65","Target event":"\u76EE\u6A19\u4E8B\u4EF6","Tasks":"\u4EFB\u52D9","Teach":"\u6559\u5B78","Teacher accounts":"\u6559\u5E2B\u5E33\u6236","Teachers, courses and universities":"\u6559\u5E2B\u3001\u8AB2\u7A0B\u548C\u5927\u5B78","Team invitation":"\u5718\u968A\u9080\u8ACB","Team section":"\u5718\u968A\u90E8\u5206","Tell us more!...":"\u544A\u8A34\u6211\u5011\u66F4\u591A\uFF01...","Template":"\u6A21\u677F","Test it out!":"\u6E2C\u8A66\uFF01","Test value":"\u6E2C\u8A66\u503C","Test value (in second)":"\u6E2C\u8A66\u503C(\u79D2)","Text":"\u6587\u672C","Text color":"\u6587\u672C\u984F\u8272","Text color:":"\u6587\u672C\u984F\u8272\uFF1A","Text to replace in parameters":"\u5728\u53C3\u6578\u4E2D\u8981\u88AB\u66FF\u63DB\u7684\u6587\u5B57","Text to search in event sentences":"\u5728\u4E8B\u4EF6\u53E5\u5B50\u4E2D\u641C\u7D22\u7684\u6587\u672C","Text to search in parameters":"\u8981\u641C\u7D22\u53C3\u6578\u7684\u6587\u672C","Texts":"\u6587\u672C","Thank you for supporting GDevelop. Credits were added to your account as a thank you.":"\u611F\u8B1D\u60A8\u5C0D GDevelop \u7684\u652F\u6301\u3002\u4F5C\u70BA\u611F\u8B1D\uFF0C\u7A4D\u5206\u5DF2\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236\u4E2D\u3002","Thank you for supporting the GDevelop open-source community. Credits were added to your account as a thank you.":"\u611F\u8B1D\u60A8\u5C0D GDevelop \u958B\u6E90\u793E\u5340\u7684\u652F\u6301\u3002\u4F5C\u70BA\u611F\u8B1D\uFF0C\u7A4D\u5206\u5DF2\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236\u4E2D\u3002","Thank you for your feedback":"\u611F\u8B1D\u60A8\u7684\u53CD\u994B\u610F\u898B","Thanks for following GDevelop. We added credits to your account as a thank you gift.":"\u611F\u8B1D\u60A8\u95DC\u6CE8 GDevelop\u3002\u6211\u5011\u5DF2\u5C07\u7A4D\u5206\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236\u4E2D\u4F5C\u70BA\u7B54\u8B1D\u79AE\u7269\u3002","Thanks for getting a subscription and supporting GDevelop!":"\u611F\u8B1D\u60A8\u8A02\u95B1\u5E76\u652F\u6301 GDevelop \uFF01","Thanks for starring GDevelop repository. We added credits to your account as a thank you gift.":"\u611F\u8B1D\u60A8\u5C0D GDevelop \u5B58\u5132\u5EAB\u52A0\u661F\u6A19\u3002\u6211\u5011\u5DF2\u5C07\u7A4D\u5206\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236\u4E2D\u4F5C\u70BA\u7B54\u8B1D\u79AE\u7269\u3002","Thanks for trying GDevelop! Unlock more projects, AI usage, publishing, multiplayer, courses and much more by upgrading.":"\u611F\u8B1D\u60A8\u5617\u8A66 GDevelop\uFF01\u900F\u904E\u5347\u7D1A\uFF0C\u89E3\u9396\u66F4\u591A\u9805\u76EE\u3001AI \u4F7F\u7528\u3001\u767C\u4F48\u3001\u591A\u4EBA\u904A\u6232\u3001\u8AB2\u7A0B\u4EE5\u53CA\u66F4\u591A\u529F\u80FD\u3002","Thanks to all users of GDevelop! There must be missing tons of people, please send your name if you've contributed and you're not listed.":"\u611F\u8B1D\u6240\u6709GD\u7528\u6236\uFF01\u9019\u91CC\u6709\u4E00\u5806\u6C92\u6709\u5217\u51FA\u7684\u4EBA\uFF0C\u5982\u679C\u60A8\u6C92\u6709\u5217\u51FA\uFF0C\u8ACB\u806F\u7CFB\u6211\u5011","Thanks to the redemption code you've used, you have this subscription enabled until {0}.":function(a){return["\u611F\u8B1D\u60A8\u4F7F\u7528\u7684\u514C\u63DB\u4EE3\u78BC\uFF0C\u60A8\u53EF\u4EE5\u5728 ",a("0")," \u4E4B\u524D\u555F\u7528\u6B64\u8A02\u95B1\u3002"]},"That's a lot of unsuccessful login attempts! Wait a bit before trying again or reset your password.":"\u9019\u662F\u4E00\u500B\u4E0D\u6210\u529F\u7684\u767B\u9304\u5617\u8A66\uFF01\u8ACB\u7A0D\u7B49\uFF0C\u7136\u540E\u91CD\u8A66\u6216\u91CD\u7F6E\u60A8\u7684\u5BC6\u78BC\u3002","The \"{0}\" effect can only be applied once.":function(a){return["\"",a("0"),"\"\u6548\u679C\u53EA\u80FD\u61C9\u7528\u4E00\u6B21\u3002"]},"The 3D editor is new and may still have rough edges. It will continue to be improved in the near future. Read more about it on the [GDevelop blog](https://gdevelop.io/blog/3d-editor).":"3D \u7DE8\u8F2F\u5668\u662F\u65B0\u7684\uFF0C\u53EF\u80FD\u4ECD\u6709\u4E9B\u4E0D\u5B8C\u5584\u3002\u5B83\u5C07\u5728\u4E0D\u4E45\u7684\u5C07\u4F86\u6301\u7E8C\u6539\u9032\u3002\u60F3\u4E86\u89E3\u66F4\u591A\uFF0C\u8ACB\u67E5\u770B [GDevelop \u90E8\u843D\u683C](https://gdevelop.io/blog/3d-editor)\u3002","The 3D editor or the game crashed":"3D \u7DE8\u8F2F\u5668\u6216\u6E38\u6232\u5D29\u6F70\u4E86","The 3D editor, or some logic/code inside the game, has encountered an unhandled exception or error. It's necessary to restart the 3D editor.":"3D \u7DE8\u8F2F\u5668\u6216\u6E38\u6232\u5167\u67D0\u4E9B\u908F\u8F2F/\u4EE3\u78BC\u9047\u5230\u4E86\u672A\u8655\u7406\u7684\u7570\u5E38\u6216\u932F\u8AA4\u3002\u5FC5\u9808\u91CD\u65B0\u555F\u52D5 3D \u7DE8\u8F2F\u5668\u3002","The AI agent is in beta. Help us make it better by telling us what went wrong:":"AI \u4EE3\u7406\u6B63\u5728\u6E2C\u8A66\u7248\u4E2D\u3002\u901A\u904E\u544A\u8A34\u6211\u5011\u767C\u751F\u4E86\u4EC0\u9EBC\u932F\u8AA4\uFF0C\u5E6B\u52A9\u6211\u5011\u6539\u5584\u5B83\uFF1A","The AI encountered an error while handling your request - this request was not counted in your AI usage. Try again later.":"AI \u5728\u8655\u7406\u60A8\u7684\u8ACB\u6C42\u6642\u767C\u751F\u4E86\u932F\u8AA4 - \u672C\u8ACB\u6C42\u672A\u8A08\u5165\u60A8\u7684 AI \u4F7F\u7528\u6B21\u6578\u3002\u7A0D\u5F8C\u518D\u8A66\u3002","The AI is currently working on your project. Closing the project will stop it. Do you want to continue?":"AI \u76EE\u524D\u6B63\u5728\u60A8\u7684\u5C08\u6848\u4E0A\u5DE5\u4F5C\u3002\u95DC\u9589\u5C08\u6848\u5C07\u6703\u505C\u6B62\u5B83\u3002\u60A8\u60F3\u7E7C\u7E8C\u55CE\uFF1F","The AI is currently working on your project. Opening another chat will stop it. Do you want to continue?":"AI \u76EE\u524D\u6B63\u5728\u60A8\u7684\u5C08\u6848\u4E0A\u5DE5\u4F5C\u3002\u958B\u555F\u53E6\u4E00\u500B\u804A\u5929\u5C07\u6703\u505C\u6B62\u5B83\u3002\u60A8\u60F3\u7E7C\u7E8C\u55CE\uFF1F","The AI is currently working on your project. Should it continue working while the tab is closed?":"AI \u76EE\u524D\u6B63\u5728\u60A8\u7684\u5C08\u6848\u4E0A\u5DE5\u4F5C\u3002\u7576\u6A19\u7C64\u95DC\u9589\u6642\uFF0C\u5B83\u662F\u5426\u61C9\u8A72\u7E7C\u7E8C\u5DE5\u4F5C\uFF1F","The AI is experimental and still being improved. <0>It can inspect your game objects and events.":"AI \u662F\u5BE6\u9A57\u6027\u8CEA\u7684\uFF0C\u4ECD\u5728\u6539\u9032\u4E2D\u3002<0>\u5B83\u53EF\u4EE5\u6AA2\u67E5\u60A8\u7684\u904A\u6232\u7269\u4EF6\u548C\u4E8B\u4EF6\u3002","The Atlas embedded in the Spine fine can't be located.":"\u5D4C\u5165 Spine \u7D30\u90E8\u7684\u5716\u96C6\u7121\u6CD5\u5B9A\u4F4D\u3002","The Education subscription gives access to GDevelop's Game Development curriculum. Co-created with teachers and institutions, it\u2019s a ready-to-use, proven way to implement STEM in your classroom.":"\u6559\u80B2\u8A02\u95B1\u53EF\u8B93\u60A8\u8A2A\u554F GDevelop \u7684\u904A\u6232\u958B\u767C\u8AB2\u7A0B\u3002\u7531\u6559\u5E2B\u548C\u6A5F\u69CB\u5171\u540C\u5275\u5EFA\uFF0C\u9019\u662F\u4E00\u500B\u73FE\u6210\u7684\u3001\u7D93\u904E\u8B49\u660E\u7684\u53EF\u4EE5\u5728\u60A8\u7684\u6559\u5BA4\u5BE6\u65BD STEM \u7684\u65B9\u6CD5\u3002","The GDevelop project is open-source, powered by passion and community. Your membership helps the GDevelop company maintain servers, build new features, develop commercial offerings and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"GDevelop \u9805\u76EE\u662F\u958B\u6E90\u7684\uFF0C\u7531\u71B1\u60C5\u548C\u793E\u5340\u9A45\u52D5\u3002\u60A8\u7684\u6703\u54E1\u8CC7\u683C\u5E6B\u52A9 GDevelop \u516C\u53F8\u7DAD\u8B77\u4F3A\u670D\u5668\u3001\u69CB\u5EFA\u65B0\u529F\u80FD\u3001\u958B\u767C\u5546\u696D\u7522\u54C1\u4E26\u4FDD\u6301\u958B\u6E90\u9805\u76EE\u7684\u7E41\u69AE\u3002\u6211\u5011\u7684\u76EE\u6A19\uFF1A\u8B93\u904A\u6232\u958B\u767C\u5FEB\u901F\u3001\u6709\u8DA3\u4E14\u6613\u65BC\u6240\u6709\u4EBA\u4F7F\u7528\u3002","The URLs must be public and stay accessible while you work on this project - they won't be stored inside the project file. When exporting a game, the resources pointed by these URLs will be downloaded and stored inside the game.":"URL\u5FC5\u9808\u662F\u516C\u958B\u7684\uFF0C\u5E76\u4E14\u5728\u60A8\u5728\u6B64\u9805\u76EE\u5DE5\u4F5C\u6642\u4FDD\u6301\u8A2A\u554F - \u5B83\u5011\u4E0D\u6703\u5B58\u5132\u5728\u9805\u76EE\u6587\u4EF6\u4E2D\u3002\u5C0E\u51FA\u6E38\u6232\u6642\uFF0C\u5C07\u4E0B\u8F09\u5E76\u5B58\u5132\u5728\u6E38\u6232\u5167\u7684\u9019\u4E9BURL\u6307\u5411\u7684\u8CC7\u6E90\u3002","The animation name {newName} is already taken":function(a){return["\u52D5\u756B\u540D\u7A31 ",a("newName")," \u5DF2\u88AB\u4F7F\u7528"]},"The answer is entirely wrong":"The answer is entirely wrong","The answer is not as good as it could be":"The answer is not as good as it could be","The answer is not in my language":"The answer is not in my language","The answer is out of scope for GDevelop":"The answer is out of scope for GDevelop","The answer is too long":"The answer is too long","The answer is too short":"The answer is too short","The asset pack {0} is now available, go claim it in the shop!":function(a){return["\u8CC7\u6E90\u5305 ",a("0")," \u73FE\u5DF2\u4E0A\u7DDA\uFF0C\u5FEB\u53BB\u5546\u5E97\u9818\u53D6\u5427\uFF01"]},"The asset pack {0} will be linked to your account {1}.":function(a){return["\u7D20\u6750\u5305 ",a("0")," \u5C07\u88AB\u93C8\u63A5\u5230\u60A8\u7684\u5E33\u6236 ",a("1")]},"The atlas image is smaller than the tile size.":"\u5716\u96C6\u5716\u50CF\u5C0F\u65BC\u74E6\u7247\u5927\u5C0F\u3002","The auth key {lastUploadedApiKey} was properly stored. It can now be used to automatically upload your app to the app store - verify you've declared an app for it.":function(a){return["\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470 ",a("lastUploadedApiKey")," \u5DF2\u6B63\u78BA\u5B58\u5132\u3002\u73FE\u5728\u53EF\u4EE5\u4F7F\u7528\u5B83\u81EA\u52D5\u5C07\u60A8\u7684\u61C9\u7528\u7A0B\u5E8F\u4E0A\u50B3\u5230\u61C9\u7528\u7A0B\u5E8F\u5546\u5E97 - \u9A57\u8B49\u60A8\u5DF2\u70BA\u5176\u8072\u660E\u4E86\u4E00\u500B\u61C9\u7528\u7A0B\u5E8F\u3002"]},"The behavior is not attached to this object. Please select another object or add this behavior: {0}":function(a){return["\u8A72\u884C\u70BA\u672A\u95DC\u806F\u5230\u6B64\u5C0D\u8C61\uFF0C\u8ACB\u9078\u64C7\u53E6\u4E00\u500B\u5C0D\u8C61\u6216\u6DFB\u52A0\u6B64\u884C\u70BA: ",a("0")]},"The bounding box is an imaginary rectangle surrounding the object collision mask. Even if the object X and Y positions are not changed, this rectangle can change if the object is rotated or if an animation is being played. Usually you should use actions and conditions related to the object position or center, but the bounding box can be useful to deal with the area of the object.":"\u5305\u570D\u76D2\u662F\u5C0D\u8C61\u78B0\u649E\u906E\u7F69\u5468\u570D\u7684\u5047\u60F3\u77E9\u5F62\u3002\u5373\u4F7F\u5C0D\u8C61\u7684X\u548CY\u4F4D\u7F6E\u6C92\u6709\u6539\u8B8A\uFF0C\u9019\u500B\u77E9\u5F62\u4E5F\u53EF\u4EE5\u5728\u7269\u9AD4\u65CB\u8F49\u6216\u64AD\u653E\u52D5\u756B\u6642\u88AB\u4FEE\u6539\u3002\u901A\u5E38\u60A8\u61C9\u8A72\u4F7F\u7528\u8207\u5C0D\u8C61\u4F4D\u7F6E\u6216\u4E2D\u5FC3\u76F8\u95DC\u7684\u52D5\u4F5C\u548C\u689D\u4EF6\uFF0C\u4F46\u5305\u570D\u76D2\u53EF\u80FD\u6709\u52A9\u4E8E\u8655\u7406\u5C0D\u8C61\u7684\u5340\u57DF\u3002","The bundle you are trying to claim does not exist anymore. Please contact support if you think this is an error.":"\u60A8\u5617\u8A66\u7D22\u53D6\u7684\u5957\u4EF6\u4E0D\u518D\u5B58\u5728\u3002\u5982\u679C\u60A8\u8A8D\u70BA\u9019\u662F\u4E00\u500B\u932F\u8AA4\uFF0C\u8ACB\u806F\u7E6B\u5BA2\u670D\u3002","The bundle {0} will be linked to your account {1}.":function(a){return["\u6346\u7D81\u5305 ",a("0")," \u5C07\u88AB\u93C8\u63A5\u5230\u60A8\u7684\u5E33\u6236 ",a("1"),"\u3002"]},"The bundle {0} will be sent to the email address provided in the checkout.":function(a){return["\u5957\u4EF6 ",a("0")," \u5C07\u88AB\u767C\u9001\u5230\u7D50\u8CEC\u6642\u63D0\u4F9B\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u3002"]},"The certificate could not be found. Please verify it was properly uploaded and try again.":"\u627E\u4E0D\u5230\u8B49\u66F8\u3002\u8ACB\u78BA\u8A8D\u5B83\u5DF2\u6B63\u78BA\u4E0A\u50B3\uFF0C\u7136\u5F8C\u518D\u8A66\u4E00\u6B21\u3002","The certificate was properly generated. Don't forget to create and upload a provisioning profile associated to it.":"\u8B49\u66F8\u5DF2\u6B63\u78BA\u751F\u6210\u3002\u4E0D\u8981\u5FD8\u8A18\u5275\u5EFA\u5E76\u4E0A\u50B3\u8207\u5176\u95DC\u806F\u7684\u914D\u7F6E\u6587\u4EF6\u3002","The chat is becoming long - consider creating a new chat to ask other questions. The AI will better analyze your game and request in a new chat.":"\u804A\u5929\u5DF2\u8B8A\u9577 - \u8ACB\u8003\u616E\u5275\u5EFA\u65B0\u7684\u804A\u5929\u4EE5\u8A62\u554F\u5176\u4ED6\u554F\u984C\u3002AI \u5728\u65B0\u7684\u804A\u5929\u4E2D\u5C07\u66F4\u597D\u5730\u5206\u6790\u60A8\u7684\u904A\u6232\u548C\u8ACB\u6C42\u3002","The course {0} will be linked to your account {1}.":function(a){return["\u8AB2\u7A0B",a("0"),"\u5C07\u8207\u60A8\u7684\u5E33\u6236",a("1"),"\u93C8\u63A5\u3002"]},"The default variant is erased when the extension is updated.":"\u7576\u64F4\u5C55\u66F4\u65B0\u6642\uFF0C\u9810\u8A2D\u8B8A\u9AD4\u5C07\u88AB\u522A\u9664\u3002","The description of the object should explain what the object is doing, and, briefly, how to use it.":"\u5C0D\u76EE\u6A19\u7684\u63CF\u8FF0\u61C9\u89E3\u91CB\u76EE\u6A19\u6B63\u5728\u505A\u4E9B\u4EC0\u4E48\uFF0C\u5E76\u7C21\u8981\u89E3\u91CB\u5982\u4F55\u4F7F\u7528\u5B83\u3002","The editor was unable to display the operation ({0}) used by the AI.":function(a){return["\u7DE8\u8F2F\u5668\u7121\u6CD5\u986F\u793A AI \u4F7F\u7528\u7684\u64CD\u4F5C (",a("0"),")\u3002"]},"The effect name {newName} is already taken":function(a){return["\u6548\u679C\u540D\u7A31 ",a("newName")," \u5DF2\u7D93\u88AB\u4F7F\u7528"]},"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before adding them as a student in your team.":"\u60A8\u63D0\u4F9B\u7684\u96FB\u5B50\u90F5\u4EF6\u5DF2\u7D93\u5728 GDevelop \u4E2D\u6709\u8A02\u95B1\u3002\u8ACB\u8ACB\u4ED6\u5011\u5728\u5C07\u4ED6\u5011\u52A0\u5165\u60A8\u7684\u5718\u968A\u4F5C\u70BA\u5B78\u751F\u4E4B\u524D\u53D6\u6D88\u5B83\u3002","The email you provided already has a subscription with GDevelop. Please ask them to cancel it before defining them as teacher in your team.":"\u60A8\u63D0\u4F9B\u7684\u96FB\u5B50\u90F5\u4EF6\u5DF2\u7D93\u8207 GDevelop \u8A02\u95B1\u3002\u8ACB\u8981\u6C42\u4ED6\u5011\u5728\u5C07\u5176\u5B9A\u7FA9\u70BA\u5718\u968A\u4E2D\u7684\u6559\u5E2B\u4E4B\u524D\u5148\u53D6\u6D88\u8A02\u95B1\u3002","The email you provided could not be found.":"\u60A8\u63D0\u4F9B\u7684\u96FB\u5B50\u90F5\u4EF6\u7121\u6CD5\u627E\u5230\u3002","The email you provided is already a member of your team.":"\u60A8\u63D0\u4F9B\u7684\u96FB\u5B50\u90F5\u4EF6\u5DF2\u7D93\u662F\u60A8\u5718\u968A\u7684\u6210\u54E1\u3002","The email you provided is already an admin in your team.":"\u60A8\u63D0\u4F9B\u7684\u96FB\u5B50\u90F5\u4EF6\u5DF2\u7D93\u662F\u60A8\u5718\u968A\u4E2D\u7684\u7BA1\u7406\u54E1\u3002","The email you provided is not an admin in your team.":"\u60A8\u63D0\u4F9B\u7684\u96FB\u5B50\u90F5\u4EF6\u4E0D\u662F\u60A8\u5718\u968A\u4E2D\u7684\u7BA1\u7406\u54E1\u3002","The extension can't be imported because it has the same name as a built-in extension.":"\u8A72\u64F4\u5C55\u7121\u6CD5\u5C0E\u5165\uFF0C\u56E0\u70BA\u5B83\u8207\u5167\u5EFA\u64F4\u5C55\u540C\u540D\u3002","The extension installed in this project is not up to date. Consider upgrading it before reporting any issue.":"\u6B64\u9805\u76EE\u4E2D\u5B89\u88DD\u7684\u64F4\u5C55\u4E0D\u662F\u6700\u65B0\u7684\u3002\u5728\u5831\u544A\u4EFB\u4F55\u554F\u984C\u4E4B\u524D\u8003\u616E\u5347\u7D1A\u5B83\u3002","The extension was added to the project. You can now use it in the list of actions/conditions and, if it's a behavior, in the list of behaviors for an object.":"\u8A72\u64F4\u5C55\u5DF2\u6DFB\u52A0\u5230\u9805\u76EE\u4E2D\u3002 \u60A8\u73FE\u5728\u53EF\u4EE5\u5728\u64CD\u4F5C/\u689D\u4EF6\u5217\u8868\u4E2D\u4F7F\u7528\u5B83\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u7A2E\u884C\u70BA\uFF0C\u5247\u53EF\u4EE5\u5728\u5C0D\u8C61\u7684\u884C\u70BA\u5217\u8868\u4E2D\u4F7F\u7528\u3002","The far plane distance must be greater than the near plan distance.":"\u9060\u5E73\u9762\u8DDD\u96E2\u5FC5\u9808\u5927\u4E8E\u8FD1\u5E73\u9762\u8DDD\u96E2\u3002","The field of view cannot be lower than 0\xB0 or greater than 180\xB0.":"\u8996\u91CE\u4E0D\u80FD\u5C0F\u4E8E0\xB0\u6216\u5927\u4E8E180\xB0\u3002","The file {0} is invalid.":function(a){return["\u6587\u4EF6 ",a("0")," \u7121\u6548\u3002"]},"The file {0} is too large. Use files that are smaller for your game: each must be less than {1} MB.":function(a){return["\u6587\u4EF6 ",a("0")," \u592A\u5927\u3002\u70BA\u60A8\u7684\u6E38\u6232\u4F7F\u7528\u8F03\u5C0F\u7684\u6587\u4EF6\uFF1A\u6BCF\u500B\u6587\u4EF6\u5FC5\u9808\u5C0F\u4E8E ",a("1")," MB\u3002"]},"The following actions, conditions, or expressions no longer exist in their extensions. This can happen when an extension's API has changed or when functionality has been removed. Update or remove these instructions.":"\u4EE5\u4E0B\u7684\u52D5\u4F5C\u3001\u689D\u4EF6\u6216\u8868\u9054\u5F0F\u5728\u5176\u64F4\u5C55\u4E2D\u5DF2\u4E0D\u5B58\u5728\u3002\u9019\u53EF\u80FD\u767C\u751F\u5728\u64F4\u5C55\u7684API\u767C\u751F\u8B8A\u66F4\u6216\u529F\u80FD\u88AB\u79FB\u9664\u6642\u3002\u8ACB\u66F4\u65B0\u6216\u522A\u9664\u9019\u4E9B\u6307\u4EE4\u3002","The following events have invalid parameters (shown with red underline in the events sheet). Click a location to navigate there.":"\u4EE5\u4E0B\u4E8B\u4EF6\u6709\u7121\u6548\u7684\u53C3\u6578\uFF08\u5728\u4E8B\u4EF6\u8868\u4E2D\u986F\u793A\u70BA\u7D05\u8272\u5E95\u7DDA\uFF09\u3002\u9EDE\u64CA\u4F4D\u7F6E\u4EE5\u5C0E\u822A\u5230\u90A3\u88E1\u3002","The following file(s) cannot be used for this kind of object: {0}":function(a){return["\u4EE5\u4E0B\u6587\u4EF6 (s) \u4E0D\u80FD\u7528\u4E8E\u9019\u985E\u5C0D\u8C61: ",a("0")]},"The font size is stored directly inside the font. If you want to change it, export again your font using an external editor like bmFont. Click on the help button to learn more.":"\u5B57\u9AD4\u7684\u5927\u5C0F\u76F4\u63A5\u5B58\u5132\u5728\u5B57\u9AD4\u5167\u3002 \u5982\u679C\u60A8\u60F3\u8981\u66F4\u6539\u5176\u5927\u5C0F\uFF0C\u8ACB\u4F7F\u7528\u5982 bmFont \u7684\u5916\u90E8\u7DE8\u8F2F\u5668\u4FEE\u6539\u540E\u91CD\u65B0\u5C0E\u51FA\u5C0E\u5165\u60A8\u7684\u5B57\u9AD4\u3002\u9EDE\u64CA\u5E6B\u52A9\u6309\u9215\u4E86\u89E3\u66F4\u591A\u4FE1\u606F\u3002","The force will only push the object during the time of one frame. Typically used in an event with no conditions or with conditions that stay valid for a certain amount of time.":"\u529B\u53EA\u6703\u63A8\u9019\u500B\u7269\u9AD4\u4E00\u5E40\u3002\u901A\u5E38\u7528\u5728\u4E00\u500B\u6C92\u6709\u689D\u4EF6\u7684\u4E8B\u4EF6\u4E2D\uFF0C\u6216\u5728\u67D0\u6BB5\u4E8B\u4EF6\u985E\u6709\u6548\u7684\u4E8B\u4EF6","The force will push the object forever, unless you use the action \"Stop the object\". Typically used in an event with conditions that are only true once, or with a \"Trigger Once\" condition.":"\u9664\u975E\u60A8\u4F7F\u7528\u201C\u505C\u6B62\u5C0D\u8C61\u201D\u64CD\u4F5C\uFF0C\u5426\u5247\u8A72\u529B\u5C07\u6C38\u9060\u63A8\u52D5\u5C0D\u8C61\u3002\u901A\u5E38\u7528\u4E8E\u5E36\u6709\u50C5\u70BA\u4E00\u6B21\u771F\u7684\u689D\u4EF6\uFF0C\u6216\u5177\u6709\u201C\u89F8\u767C\u4E00\u6B21\u201D\u689D\u4EF6\u7684\u4E8B\u4EF6\u4E2D\u3002","The free version is enough for me":"\u514D\u8CBB\u7248\u672C\u5C0D\u6211\u4F86\u8AAA\u5DF2\u7D93\u8DB3\u5920\u4E86","The game template {0} will be linked to your account {1}.":function(a){return["\u6E38\u6232\u6A21\u677F ",a("0")," \u5C07\u93C8\u63A5\u5230\u60A8\u7684\u5E33\u6236 ",a("1"),"\u3002"]},"The game was properly exported. You can now use Electron Builder (you need Node.js installed and to use the command-line on your computer to run it) to create an executable.":"\u6E38\u6232\u5DF2\u6B63\u78BA\u5C0E\u51FA\u3002\u60A8\u73FE\u5728\u53EF\u4EE5\u4F7F\u7528 Electron Builder (\u60A8\u9700\u8981\u5B89\u88DD Node.js\uFF0C\u5E76\u4E14\u4F7F\u7528\u547D\u4EE4\u884C\u4F86\u904B\u884C\u5B83) \u4F86\u5275\u5EFA\u53EF\u57F7\u884C\u6587\u4EF6\u3002","The game you're trying to open is not registered online. Open the project file, then register it before continuing.":"\u60A8\u8A66\u5716\u6253\u958B\u7684\u6E38\u6232\u6C92\u6709\u5728\u7DDA\u6CE8\u518A\u3002\u6253\u958B\u9805\u76EE\u6587\u4EF6\uFF0C\u7136\u540E\u6CE8\u518A\u518D\u7E7C\u7E8C\u3002","The icing on the cake":"\u9326\u4E0A\u6DFB\u82B1","The image should be at least 864x864px, and the logo must fit [within a circle of 576px](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions). Transparent borders are automatically added when generated to help ensuring":"\u5716\u7247\u81F3\u5C11\u61C9\u70BA864x864\u50CF\u7D20\uFF0C\u5FBD\u6A19\u5FC5\u9808\u9069\u5408[\u5728576\u50CF\u7D20\u7684\u5713\u5708\u5167](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions)\u3002\u751F\u6210\u6642\u6703\u81EA\u52D5\u6DFB\u52A0\u900F\u660E\u908A\u6846\u4EE5\u5E6B\u52A9\u78BA\u4FDD\u9019\u4E00\u9EDE\u3002","The invitation sent to {email} will be cancelled.":function(a){return["\u767C\u9001\u81F3 ",a("email")," \u7684\u9080\u8ACB\u5C07\u88AB\u53D6\u6D88\u3002"]},"The latest save of \"{cloudProjectName}\" is corrupt and cannot be opened.":function(a){return[a("cloudProjectName"),"\u7684\u6700\u65B0\u4FDD\u5B58\u5DF2\u640D\u58DE\uFF0C\u7121\u6CD5\u6253\u958B\u3002"]},"The latest save of this project is corrupt and cannot be opened.":"\u6B64\u9805\u76EE\u7684\u6700\u65B0\u4FDD\u5B58\u5DF2\u640D\u58DE\uFF0C\u7121\u6CD5\u6253\u958B\u3002","The layer {0} does not contain any object instances. Continue?":function(a){return["\u5716\u5C64 ",a("0")," \u4E0D\u5305\u542B\u4EFB\u4F55\u5C0D\u8C61\u5BE6\u4F8B\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F"]},"The light object was automatically placed on the Lighting layer.":"\u5149\u7167\u7269\u4EF6\u81EA\u52D5\u653E\u7F6E\u5728\u7167\u660E\u5716\u5C64\u3002","The lighting layer renders an ambient light on the scene. All lights should be placed on this layer so that shadows are properly rendered. By default, the layer follows the base layer camera. Uncheck this if you want to manually move the camera using events.":"\u7167\u660E\u5716\u5C64\u6703\u5728\u5C4F\u5E55\u4E0A\u6E32\u67D3\u4E00\u500B\u74B0\u5883\u5149\u3002\u6240\u6709\u71C8\u5149\u90FD\u61C9\u653E\u5728\u9019\u500B\u7167\u660E\u5716\u5C64\u4E0A\uFF0C\u4EE5\u4F7F\u9670\u5F71\u5F97\u5230\u6B63\u78BA\u7684\u6E32\u67D3\u3002 \u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u5C07\u6839\u64DA\u57FA\u790E\u5716\u5C64\u76F8\u6A5F\u6E32\u67D3\u3002\u5982\u679C\u60A8\u60F3\u901A\u904E\u4E8B\u4EF6\u55AE\u7368\u63A7\u5236\u672C\u5716\u5C64\u76F8\u6A5F\uFF0C\u8ACB\u53D6\u6D88\u9078\u4E2D\u6B64\u9805\u3002","The link to the asset pack you've followed seems outdated. Why not take a look at the other packs in the asset store?":"\u60A8\u6240\u95DC\u6CE8\u7684\u8CC7\u7522\u5305\u7684\u93C8\u63A5\u4F3C\u4E4E\u5DF2\u904E\u6642\u3002\u70BA\u4EC0\u4E48\u4E0D\u770B\u770B\u8CC7\u7522\u5546\u5E97\u4E2D\u7684\u5176\u4ED6\u5305\u5462\uFF1F","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles in the store?":"\u60A8\u8DDF\u96A8\u7684\u6346\u7D81\u5305\u93C8\u63A5\u4F3C\u4E4E\u5DF2\u904E\u6642\u3002\u70BA\u4EC0\u9EBC\u4E0D\u770B\u770B\u5546\u5E97\u4E2D\u7684\u5176\u4ED6\u6346\u7D81\u5305\uFF1F","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles?":"\u60A8\u6240\u95DC\u6CE8\u7684\u5305\u7684\u93C8\u63A5\u4F3C\u4E4E\u5DF2\u904E\u6642\u3002\u70BA\u4EC0\u9EBC\u4E0D\u770B\u770B\u5176\u4ED6\u7684\u5305\u5462\uFF1F","The link to the game template you've followed seems outdated. Why not take a look at the other templates in the store?":"\u60A8\u6240\u95DC\u6CE8\u7684\u6E38\u6232\u6A21\u677F\u7684\u93C8\u63A5\u4F3C\u4E4E\u5DF2\u904E\u6642\u3002\u70BA\u4EC0\u4E48\u4E0D\u770B\u770B\u5546\u5E97\u4E2D\u7684\u5176\u4ED6\u6A21\u677F\u5462\uFF1F","The main account of the Education plan cannot be modified.":"\u6559\u80B2\u8A08\u5283\u7684\u4E3B\u8981\u5E33\u6236\u7121\u6CD5\u4FEE\u6539\u3002","The maximum 2D drawing distance must be strictly greater than 0.":"\u6700\u5927 2D \u7E6A\u5716\u8DDD\u96E2\u5FC5\u9808\u56B4\u683C\u5927\u65BC 0\u3002","The model has {meshShapeTrianglesCount} triangles. To keep good performance, consider making a simplified model with a modeling tool.":function(a){return["\u8A72\u6A21\u578B\u6709 ",a("meshShapeTrianglesCount")," \u689D\u4E09\u89D2\u5F62\u3002\u70BA\u4E86\u4FDD\u6301\u826F\u597D\u7684\u6027\u80FD\uFF0C\u8003\u616E\u4F7F\u7528\u5EFA\u6A21\u5DE5\u5177\u88FD\u4F5C\u7C21\u5316\u6A21\u578B\u3002"]},"The monthly free asset pack perk was not part of your plan at the time you got your subscription to GDevelop. To enjoy this perk, please purchase a new subscription.":"\u7576\u60A8\u8A02\u95B1 GDevelop \u6642\uFF0C\u6BCF\u6708\u514D\u8CBB\u8CC7\u7522\u5305\u798F\u5229\u5E76\u4E0D\u5C6C\u4E8E\u60A8\u7684\u8A08\u5283\u7684\u4E00\u90E8\u5206\u3002\u8981\u4EAB\u53D7\u6B64\u512A\u60E0\uFF0C\u8ACB\u8CFC\u8CB7\u65B0\u7684\u8A02\u95B1\u3002","The more descriptive you are, the better we can match the content we\u2019ll recommend.":"\u60A8\u7684\u63CF\u8FF0\u6027\u8D8A\u5F37\uFF0C\u6211\u5011\u5C31\u8D8A\u80FD\u5339\u914D\u6211\u5011\u63A8\u85A6\u7684\u5167\u5BB9\u3002","The name of your game is empty":"\u60A8\u7684\u904A\u6232\u540D\u7A31\u662F\u7A7A\u7684","The near plane distance must be strictly greater than 0 and lower than the far plan distance.":"\u8FD1\u5E73\u9762\u8DDD\u96E2\u5FC5\u9808\u56B4\u683C\u5927\u4E8E 0 \u4E14\u5C0F\u4E8E\u9060\u5E73\u9762\u8DDD\u96E2\u3002","The number of decimal places must be a whole value between {precisionMinValue} and {precisionMaxValue}":function(a){return["\u5C0F\u6578\u9EDE\u6578\u5FC5\u9808\u662F ",a("precisionMinValue")," \u548C ",a("precisionMaxValue")," \u4E4B\u9593\u7684\u6574\u6578\u503C"]},"The number of displayed entries must be a whole value between {displayedEntriesMinNumber} and {displayedEntriesMaxNumber}":function(a){return["\u986F\u793A\u7684\u689D\u76EE\u6578\u91CF\u5FC5\u9808\u662F\u4E00\u500B ",a("displayedEntriesMinNumber")," \u548C ",a("displayedEntriesMaxNumber")," \u4E4B\u9593\u7684\u6574\u6578\u503C"]},"The object does not exist or can't be used here.":"\u8A72\u5C0D\u8C61\u4E0D\u5B58\u5728\u6216\u4E0D\u80FD\u5728\u6B64\u8655\u4F7F\u7528\u3002","The package name begins with com.example, make sure you replace it with an unique one to be able to publish your game on app stores.":"\u8EDF\u4EF6\u5305\u540D\u7A31\u4EE5 com.example \u958B\u982D\uFF0C\u8ACB\u78BA\u4FDD\u5C07\u5176\u66FF\u63DB\u70BA\u552F\u4E00\u7684\u8EDF\u4EF6\u5305\uFF0C\u4EE5\u4FBF\u80FD\u5920\u5728\u61C9\u7528\u5546\u5E97\u4E0A\u767C\u5E03\u60A8\u7684\u6E38\u6232\u3002","The package name begins with com.example, make sure you replace it with an unique one, else installing your game might overwrite other games.":"\u8EDF\u4EF6\u5305\u540D\u7A31\u4EE5com.example\u958B\u59CB\uFF0C\u8ACB\u78BA\u4FDD\u5C07\u5176\u66FF\u63DB\u70BA\u552F\u4E00\u7684\u8EDF\u4EF6\u5305\uFF0C\u5426\u5247\u5B89\u88DD\u60A8\u7684\u6E38\u6232\u53EF\u80FD\u6703\u8986\u84CB\u5176\u4ED6\u6E38\u6232\u3002","The package name is containing invalid characters or not following the convention \"xxx.yyy.zzz\" (numbers allowed after a letter only).":"\u5305\u540D\u5305\u542B\u7121\u6548\u5B57\u7B26\uFF0C\u6216\u8005\u672A\u9075\u5FAA\u201Cxxx.yy.zz\u201D\u7684\u898F\u8303(\u50C5\u5141\u8A31\u6578\u5B57\u8DDF\u5728\u5B57\u6BCD\u540E\u9762)\u3002","The package name is empty.":"\u5305\u540D\u7A31\u70BA\u7A7A\u3002","The package name is too long.":"\u5305\u540D\u7A31\u592A\u9577\u3002","The password is invalid.":"\u5BC6\u78BC\u7121\u6548\u3002","The password you entered is incorrect. Please try again.":"\u60A8\u8F38\u5165\u5BC6\u78BC\u4E0D\u6B63\u78BA\u3002\u8ACB\u518D\u8A66\u4E00\u6B21\u3002","The polygon is not convex":"\u591A\u908A\u5F62\u4E0D\u662F\u51F8\u7684","The polygon is not convex. Ensure it is, otherwise the collision mask won't work.":"\u6B64\u591A\u908A\u5F62\u4E0D\u662F\u51F8\u591A\u908A\u5F62\u3002\u8ACB\u4FDD\u8B49\u662F\u51F8\u591A\u908A\u5F62\uFF0C\u5426\u5247\u78B0\u649E\u906E\u7F69\u7121\u6CD5\u5DE5\u4F5C\u3002","The preview could not be launched because an error happened: {0}.":function(a){return["\u7121\u6CD5\u555F\u52D5\u9810\u89BD\uFF0C\u56E0\u70BA\u767C\u751F\u932F\u8AA4\uFF1A ",a("0"),"\u3002"]},"The preview could not be launched because you're offline.":"\u7531\u4E8E\u60A8\u96E2\u7DDA\u7121\u6CD5\u555F\u52D5\u9810\u89BD\u3002","The project associated with this AI request does not match the current project. Open the correct project to restore to this state.":"\u8207\u6B64 AI \u8ACB\u6C42\u76F8\u95DC\u7684\u5C08\u6848\u8207\u7576\u524D\u5C08\u6848\u4E0D\u7B26\u3002\u8ACB\u6253\u958B\u6B63\u78BA\u7684\u5C08\u6848\u4EE5\u9084\u539F\u81F3\u6B64\u72C0\u614B\u3002","The project could not be saved. Please try again later.":"\u9805\u76EE\u7121\u6CD5\u4FDD\u5B58\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","The project currently opened is not registered online. Register it now to get access to leaderboards, player accounts, analytics and more!":"\u7576\u524D\u6253\u958B\u7684\u9805\u76EE\u672A\u5728\u7DDA\u6CE8\u518A\u3002\u7ACB\u5373\u6CE8\u518A\u4EE5\u8A2A\u554F\u6392\u884C\u699C\u3001\u73A9\u5BB6\u5E33\u6236\u3001\u5206\u6790\u7B49\uFF01","The project currently opened is registered online but you don't have access to it. A link or file will be created but the game will not be registered.":"\u7576\u524D\u6253\u958B\u7684\u9805\u76EE\u5DF2\u5728\u7DDA\u6CE8\u518A\uFF0C\u4F46\u60A8\u7121\u6CD5\u8A2A\u554F\u8A72\u9805\u76EE\u3002\u4E00\u500B\u93C8\u63A5\u6216\u6587\u4EF6\u5C07\u88AB\u5275\u5EFA\uFF0C\u4F46\u6E38\u6232\u5C07\u4E0D\u6703\u88AB\u6CE8\u518A\u3002","The project file appears to be corrupted, but an autosave file exists (backup made automatically by GDevelop on {0}). Would you like to try to load it instead?":function(a){return["\u9805\u76EE\u6587\u4EF6\u4F3C\u4E4E\u5DF2\u640D\u58DE\uFF0C\u4F46\u662F\u5B58\u5728\u81EA\u52D5\u4FDD\u5B58\u6587\u4EF6(\u7531 GDevelop \u5728 ",a("0")," \u81EA\u52D5\u5099\u4EFD)\u3002 \u4F60\u60F3\u8981\u52A0\u8F09\u5B83\u55CE\uFF1F"]},"The project save associated with this AI request message is no longer available due to your current plan's limit. Upgrade your subscription to access older project saves.":"\u6B64 AI \u8ACB\u6C42\u8A0A\u606F\u76F8\u95DC\u7684\u5C08\u6848\u5132\u5B58\u56E0\u60A8\u7576\u524D\u8A08\u756B\u7684\u9650\u5236\u800C\u7121\u6CD5\u4F7F\u7528\u3002\u8ACB\u5347\u7D1A\u60A8\u7684\u8A02\u95B1\u4EE5\u5B58\u53D6\u8F03\u820A\u7684\u5C08\u6848\u5132\u5B58\u3002","The project save associated with this AI request message was not found. It may have been deleted.":"\u672A\u627E\u5230\u6B64 AI \u8ACB\u6C42\u8A0A\u606F\u76F8\u95DC\u7684\u5C08\u6848\u5132\u5B58\u3002\u5B83\u53EF\u80FD\u5DF2\u88AB\u522A\u9664\u3002","The provisioning profile was properly stored ( {lastUploadedProvisioningProfileName}). If you properly uploaded the certificate before, it can now be used.":function(a){return["\u9810\u914D\u914D\u7F6E\u6587\u4EF6\u5DF2\u6B63\u78BA\u5B58\u5132 (",a("lastUploadedProvisioningProfileName"),")\u3002\u5982\u679C\u60A8\u4E4B\u524D\u6B63\u78BA\u4E0A\u50B3\u4E86\u8B49\u66F8\uFF0C\u73FE\u5728\u5C31\u53EF\u4EE5\u4F7F\u7528\u4E86\u3002"]},"The purchase will be linked to your account once done.":"\u8CFC\u8CB7\u5B8C\u6210\u540E\u5C07\u93C8\u63A5\u5230\u60A8\u7684\u5E33\u6236\u3002","The request could not be processed. Please verify you uploaded a valid certificate file (.cer) from Apple.":"\u8ACB\u78BA\u8A8D\u60A8\u4E0A\u50B3\u4E86\u4F86\u81EA\u860B\u679C\u7684\u6709\u6548\u8B49\u66F8\u6587\u4EF6 (.cer)\u3002","The request could not reach the servers, ensure you are connected to internet.":"\u8ACB\u6C42\u7121\u6CD5\u5230\u9054\u670D\u52D9\u5668\uFF0C\u78BA\u4FDD\u60A8\u5DF2\u9023\u63A5\u5230\u4E92\u806F\u7DB2\u3002","The resource has been downloaded":"\u8CC7\u6E90\u5DF2\u4E0B\u8F09","The result wasn't as good as it could have been":"\u7D50\u679C\u6C92\u6709\u9054\u5230\u61C9\u6709\u7684\u597D\u8655","The selected resource is not a proper Spine resource.":"\u6240\u9078\u8CC7\u6E90\u4E0D\u662F\u6B63\u78BA\u7684 Spine \u8CC7\u6E90\u3002","The sentence displays one or more wrongs parameters:":"\u8A72\u53E5\u5B50\u986F\u793A\u4E00\u500B\u6216\u591A\u500B\u932F\u8AA4\u53C3\u6578\uFF1A","The sentence is probably missing this/these parameter(s):":"\u8A72\u53E5\u53EF\u80FD\u4E1F\u5931\u4EE5\u4E0B\u53C3\u6578\uFF1A()","The server is currently unavailable. Please try again later.":"\u670D\u52D9\u76EE\u524D\u7121\u6CD5\u4F7F\u7528\u3002\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","The shape used in the Physics behavior is independent from the collision mask of the object. Be sure to use the \"Collision\" condition provided by the Physics behavior in the events. The usual \"Collision\" condition won't take into account the shape that you've set up here.":"\u7269\u7406\u884C\u70BA\u4E2D\u4F7F\u7528\u7684\u5F62\u72C0\u7368\u7ACB\u4E8E\u7269\u9AD4\u7684\u78B0\u649E\u906E\u7F69\u3002 \u8ACB\u52D9\u5FC5\u4F7F\u7528\u7531\u5728\u4E8B\u4EF6\u4E2D\u7684\u7269\u7406\u884C\u70BA\u63D0\u4F9B\u7684\u201C\u78B0\u649E\u201D\u689D\u4EF6\u3002\u901A\u5E38\u7684\u201C\u78B0\u649E\u201D\u689D\u4EF6\u4E0D\u6703\u8003\u616E\u60A8\u5728\u6B64\u8655\u8A2D\u7F6E\u7684\u5F62\u72C0\u3002","The specified external events do not exist in the game. Be sure that the name is correctly spelled or create them using the project manager.":"\u6307\u5B9A\u7684\u5916\u90E8\u4E8B\u4EF6\u4E0D\u5728\u6E38\u6232\u4E2D\u3002\u8ACB\u78BA\u8A8D\u540D\u7A31\u6B63\u78BA\uFF0C\u4E5F\u53EF\u4EE5\u4F7F\u7528\u9805\u76EE\u7BA1\u7406\u5668\u5275\u5EFA\u3002","The subscription of this account comes from outside the app store. Connect with your account on editor.gdevelop.io from your web-browser to manage it.":"\u8A72\u8CEC\u865F\u7684\u8A02\u95B1\u4F86\u81EA\u65BC\u61C9\u7528\u5546\u5E97\u4E4B\u5916\u3002\u5F9E\u60A8\u7684\u7DB2\u7D61\u700F\u89BD\u5668\u9023\u63A5\u5230\u60A8\u5728 editor.gdevelop.io \u4E0A\u7684\u5E33\u6236\u4EE5\u5C0D\u5176\u9032\u884C\u7BA1\u7406\u3002","The subscription of this account was done using Apple or Google Play. Connect on your account on your Apple or Google device to manage it.":"\u6B64\u5E33\u6236\u7684\u8A02\u95B1\u662F\u4F7F\u7528 Apple \u6216 Google Play \u5B8C\u6210\u7684\u3002\u5728\u60A8\u7684 Apple \u6216 Google \u8A2D\u5099\u4E0A\u9023\u63A5\u60A8\u7684\u5E33\u6236\u4EE5\u5C0D\u5176\u9032\u884C\u7BA1\u7406\u3002","The text input will be always shown on top of all other objects in the game - this is a limitation that can't be changed. According to the platform/device or browser running the game, the appearance can also slightly change.":"\u6587\u672C\u8F38\u5165\u5C07\u59CB\u7D42\u986F\u793A\u5728\u6E38\u6232\u4E2D\u6240\u6709\u5176\u4ED6\u5C0D\u8C61\u7684\u9802\u90E8\u2014\u2014\u9019\u662F\u4E00\u500B\u7121\u6CD5\u66F4\u6539\u7684\u9650\u5236\u3002\u6839\u64DA\u904B\u884C\u6E38\u6232\u7684\u5E73\u81FA/\u8A2D\u5099\u6216\u700F\u89BD\u5668\u7684\u4E0D\u540C\uFF0C\u6E38\u6232\u7684\u5916\u89C0\u4E5F\u6703\u7565\u6709\u8B8A\u5316\u3002","The tilemap must be designed in a separated program, Tiled, that can be downloaded on mapeditor.org. Save your map as a JSON file, then select here the Atlas image that you used and the Tile map JSON file.":"\u5FC5\u9808\u5728\u55AE\u7368\u7684\u7A0B\u5E8FTiled\u4E2D\u8A2D\u8A08tilemap\uFF0C\u53EF\u4EE5\u5728mapeditor.org\u4E0A\u4E0B\u8F09\u8A72\u7A0B\u5E8F\u3002\u5C07\u5730\u5716\u53E6\u5B58\u70BAJSON\u6587\u4EF6\uFF0C\u7136\u540E\u5728\u6B64\u8655\u9078\u64C7\u60A8\u4F7F\u7528\u7684Atlas\u5716\u50CF\u548CTile Map JSON\u6587\u4EF6\u3002","The token used to claim this purchase is invalid.":"\u7528\u65BC\u7D22\u53D6\u6B64\u8CFC\u8CB7\u7684\u4EE4\u724C\u7121\u6548\u3002","The uploaded certificate does not match the signing request that was generated. Please create a new signing request and generate a new certificate from Apple using it.":"\u4E0A\u50B3\u7684\u8B49\u66F8\u8207\u751F\u6210\u7684\u7C3D\u540D\u8ACB\u6C42\u4E0D\u5339\u914D\u3002\u8ACB\u5275\u5EFA\u65B0\u7684\u7C3D\u540D\u8ACB\u6C42\uFF0C\u4E26\u4F7F\u7528\u5B83\u5F9E\u860B\u679C\u751F\u6210\u65B0\u7684\u8B49\u66F8\u3002","The usage of a number or expression is deprecated. Please now use only \"Permanent\" or \"Instant\" for configuring forces.":"\u4F7F\u7528\u4E00\u500B\u6578\u5B57\u6216\u8868\u9054\u5F0F\u5DF2\u88AB\u5EE2\u68C4\u3002\u73FE\u5728\u53EA\u80FD\u7528\u201CPermanent\uFF08\u6C38\u4E45\uFF09\u201D\u6216\u201CInstan\uFF08\u5373\u6642\uFF09\u201D\u4F86\u914D\u7F6E\u529B\u3002","The variable name contains a space - this is not recommended. Prefer to use underscores or uppercase letters to separate words.":"\u8B8A\u91CF\u540D\u7A31\u5305\u542B\u4E00\u500B\u7A7A\u683C - \u4E0D\u63A8\u85A6\u4F7F\u7528\u9019\u500B\u7A7A\u683C\u3002\u66F4\u559C\u6B61\u4F7F\u7528\u4E0B\u5283\u7DDA\u6216\u5927\u5BEB\u5B57\u6BCD\u5206\u9694\u55AE\u8A5E\u3002","The variable name looks like you're building an expression or a formula. You can only use this for structure or arrays. For example: Score[3].":"\u8B8A\u91CF\u540D\u7A31\u770B\u8D77\u4F86\u50CF\u4F60\u6B63\u5728\u69CB\u5EFA\u4E00\u500B\u8868\u9054\u5F0F\u6216\u516C\u5F0F\u3002 \u60A8\u53EA\u80FD\u4F7F\u7528\u9019\u500B\u7D50\u69CB\u6216\u6578\u7D44\u3002\u4F8B\u5982\uFF1A\u5F97\u5206[3]\u3002","The version history is available for cloud projects only.":"\u7248\u672C\u6B77\u53F2\u8A18\u9304\u50C5\u9069\u7528\u4E8E\u4E91\u9805\u76EE\u3002","The version that you've set for the game is invalid.":"\u60A8\u70BA\u6E38\u6232\u8A2D\u7F6E\u7684\u7248\u672C\u7121\u6548\u3002","The {productType} {productName} will be linked to your account {0}":function(a){return["\u7522\u54C1\u985E\u578B ",a("productType")," \u7684 ",a("productName")," \u5C07\u8207\u60A8\u7684\u5E33\u6236 ",a("0")," \u93C8\u63A5\u3002"]},"There are currently no leaderboards created for this game. Open the leaderboards manager to create one.":"\u7576\u524D\u6C92\u6709\u70BA\u9019\u5834\u6E38\u6232\u5275\u5EFA\u6392\u884C\u699C\u3002\u6253\u958B\u6392\u884C\u699C\u7BA1\u7406\u5668\u5275\u5EFA\u4E00\u500B\u3002","There are no <0>2D effects on this layer.":"\u9019\u500B\u5716\u5C64\u4E0A\u6C92\u6709<0>2D \u7279\u6548\u3002","There are no <0>3D effects on this layer.":"\u9019\u500B\u5716\u5C64\u4E0A\u6C92\u6709<0>3D \u7279\u6548\u3002","There are no <0>behaviors on this object instance.":"\u9019\u500B\u7269\u4EF6\u5BE6\u4F8B\u4E0A\u6C92\u6709<0>\u884C\u70BA\u3002","There are no <0>behaviors on this object.":"\u9019\u500B\u7269\u4EF6\u4E0A\u6C92\u6709<0>\u884C\u70BA\u3002","There are no <0>effects on this object.":"\u9019\u500B\u7269\u4EF6\u4E0A\u6C92\u6709<0>\u6548\u679C\u3002","There are no <0>variables on this object.":"\u9019\u500B\u7269\u4EF6\u4E0A\u6C92\u6709<0>\u8B8A\u91CF\u3002","There are no <0>variables on this scene.":"\u9019\u500B\u5834\u666F\u4E0A\u6C92\u6709<0>\u8B8A\u6578\u3002","There are no common <0>variables on this group objects.":"\u9019\u4E9B\u7FA4\u7D44\u7269\u4EF6\u4E2D\u6C92\u6709\u5171\u540C\u7684<0>\u8B8A\u6578\u3002","There are no objects. Objects will appear if you add some as parameter or add children to the object.":"\u6C92\u6709\u5C0D\u8C61\u3002 \u5982\u679C\u60A8\u628A\u4E00\u4E9B\u5C0D\u8C61\u4F5C\u70BA\u53C3\u6578\u6DFB\u52A0\u6642\uFF0C\u5C0D\u8C61\u624D\u6703\u51FA\u73FE\u3002","There are no objects. Objects will appear if you add some as parameters.":"\u6C92\u6709\u5C0D\u8C61\u3002\u5982\u679C\u60A8\u628A\u4E00\u4E9B\u5C0D\u8C61\u4F5C\u70BA\u53C3\u6578\u6DFB\u52A0\u6642\uFF0C\u5C0D\u8C61\u624D\u6703\u51FA\u73FE\u3002","There are no provisioning profile created for this certificate. Create one in the Apple Developer interface and add it here.":"\u6C92\u6709\u70BA\u6B64\u8B49\u66F8\u5275\u5EFA\u914D\u7F6E\u6587\u4EF6\u3002\u5728 Apple Developer \u754C\u9762\u4E2D\u5275\u5EFA\u4E00\u500B\u5E76\u5C07\u5176\u6DFB\u52A0\u5230\u6B64\u8655\u3002","There are no variables on this instance.":"\u9019\u500B\u5BE6\u4F8B\u4E0A\u6C92\u6709\u8B8A\u6578\u3002","There are unsaved changes":"\u6709\u672A\u4FDD\u5B58\u7684\u66F4\u6539","There are variables used in events but not declared in this list: {0}.":function(a){return["\u5728\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u4E86\u8B8A\u91CF\uFF0C\u4F46\u5728\u6B64\u5217\u8868\u4E2D\u6C92\u6709\u8072\u660E: ",a("0"),"\u3002"]},"There are {instancesCountInLayout} object instances on this layer. Should they be moved to another layer?":function(a){return["\u6B64\u5C64\u4E0A\u6709 ",a("instancesCountInLayout")," \u5C0D\u8C61\u5BE6\u4F8B\u3002\u662F\u5426\u61C9\u8A72\u5C07\u5B83\u5011\u79FB\u52D5\u5230\u53E6\u4E00\u5C64\uFF1F"]},"There are {instancesCount} instances of objects on this layer.":function(a){return["\u6B64\u5716\u5C64\u4E0A\u6709 ",a("instancesCount")," \u500B\u5C0D\u8C61\u5BE6\u4F8B\u3002"]},"There is no <0>global object yet.":"\u9084\u6C92\u6709 <0> \u5168\u5C40\u5C0D\u8C61 \u3002","There is no behavior to set up for this object.":"There is no behavior to set up for this object.","There is no extension to update.":"\u6C92\u6709\u53EF\u66F4\u65B0\u7684\u64F4\u5C55\u3002","There is no global group yet.":"\u9084\u6C92\u6709\u5168\u5C40\u7D44\u3002","There is no object in your game or in this scene. Start by adding an new object in the scene editor, using the objects list.":"\u60A8\u7684\u6E38\u6232\u6216\u672C\u5834\u666F\u4E2D\u6C92\u6709\u5C0D\u8C61\u3002\u8ACB\u5728\u5834\u666F\u7DE8\u8F2F\u5668\u7684\u5C0D\u8C61\u5217\u8868\u4E2D\uFF0C\u6DFB\u52A0\u4E00\u500B\u65B0\u7684\u5C0D\u8C61\u3002","There is no variable to set up.":"There is no variable to set up.","There is no variant to update.":"\u6C92\u6709\u53EF\u66F4\u65B0\u7684\u8B8A\u9AD4\u3002","There is nothing to configure for this behavior. You can still use events to interact with the object and this behavior.":"\u6C92\u6709\u4EFB\u4F55\u53EF\u7528\u4F86\u914D\u7F6E\u6B64\u884C\u70BA\u3002\u60A8\u4ECD\u7136\u53EF\u4EE5\u4F7F\u7528\u4E8B\u4EF6\u4F86\u8207\u5C0D\u8C61\u548C\u9019\u7A2E\u884C\u70BA\u4E92\u52D5\u3002","There is nothing to configure for this effect.":"\u6C92\u6709\u4EFB\u4F55\u9700\u8981\u914D\u7F6E\u7684\u3002","There is nothing to configure for this object. You can still use events to interact with the object.":"\u6C92\u6709\u4EFB\u4F55\u53EF\u7528\u4F86\u914D\u7F6E\u6B64\u884C\u70BA\u3002\u60A8\u4ECD\u7136\u53EF\u4EE5\u4F7F\u7528\u4E8B\u4EF6\u4F86\u8207\u5C0D\u8C61\u548C\u9019\u7A2E\u884C\u70BA\u4E92\u52D5\u3002","There is nothing to configure.":"\u6C92\u6709\u4EC0\u4E48\u9700\u8981\u914D\u7F6E\u7684\u3002","There was a problem":"\u51FA\u73FE\u4E86\u4E00\u500B\u554F\u984C","There was an error verifying the URL(s). Please check they are correct.":"\u9A57\u8B49URL(s)\u6642\u51FA\u932F\u3002\u8ACB\u6AA2\u67E5\u5B83\u5011\u662F\u5426\u6B63\u78BA\u3002","There was an error while canceling your subscription. Verify your internet connection or try again later.":"\u53D6\u6D88\u8A02\u95B1\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","There was an error while creating the object \"{0}\". Verify your internet connection or try again later.":function(a){return["\u5275\u5EFA\u5C0D\u8C61\u201C",a("0"),"\u201D\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002"]},"There was an error while installing the asset \"{0}\". Verify your internet connection or try again later.":function(a){return["\u5B89\u88DD\u8CC7\u7522 \"",a("0"),"\" \u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002"]},"There was an error while making an auto-save of the project. Verify that you have permissions to write in the project folder.":"\u81EA\u52D5\u4FDD\u5B58\u9805\u76EE\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u662F\u5426\u6709\u5BEB\u5165\u9805\u76EE\u6587\u4EF6\u593E\u7684\u6B0A\u9650\u3002","There was an error while updating the game's thumbnail on gd.games. Verify your internet connection or try again later.":"\u5728 gd.games \u66F4\u65B0\u904A\u6232\u7684\u7E2E\u7565\u5716\u6642\u51FA\u932F\u3002\u8ACB\u6AA2\u67E5\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u5F8C\u518D\u8A66\u3002","There was an error while uploading some resources. Verify your internet connection or try again later.":"\u4E0A\u50B3\u67D0\u4E9B\u8CC7\u6E90\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","There was an issue getting the game analytics.":"\u7372\u53D6\u6E38\u6232\u5206\u6790\u6642\u51FA\u73FE\u554F\u984C\u3002","There was an unknown error when trying to apply the code. Double check the code, try again later or contact us if this persists.":"\u5617\u8A66\u61C9\u7528\u4EE3\u78BC\u6642\u51FA\u73FE\u672A\u77E5\u932F\u8AA4\u3002\u4ED4\u7D30\u6AA2\u67E5\u4EE3\u78BC\uFF0C\u7A0D\u540E\u518D\u8A66\uFF0C\u5982\u679C\u554F\u984C\u4ECD\u7136\u5B58\u5728\uFF0C\u8ACB\u806F\u7CFB\u6211\u5011\u3002","There were errors when importing resources for the project. You can retry (recommended) or continue despite the errors. In this case, the project might be missing some resources.":"\u5C0E\u5165\u5C08\u6848\u8CC7\u6E90\u6642\u51FA\u932F\u3002\u60A8\u53EF\u4EE5\u91CD\u8A66\uFF08\u63A8\u85A6\uFF09\u6216\u7E7C\u7E8C\uFF0C\u5118\u7BA1\u51FA\u73FE\u932F\u8AA4\u3002\u5728\u9019\u7A2E\u60C5\u6CC1\u4E0B\uFF0C\u5C08\u6848\u53EF\u80FD\u7F3A\u5C11\u4E00\u4E9B\u8CC7\u6E90\u3002","There were errors when loading extensions. You cannot continue using GDevelop.":"There were errors when loading extensions. You cannot continue using GDevelop.","There were errors when preparing new leaderboards for the project.":"\u5728\u70BA\u9805\u76EE\u6E96\u5099\u65B0\u7684\u6392\u884C\u699C\u6642\u767C\u751F\u932F\u8AA4\u3002","These are behaviors":"\u9019\u4E9B\u662F\u884C\u70BA","These are objects":"\u9019\u4E9B\u662F\u7269\u4EF6","These behaviors are already attached to the object:{0}Do you want to replace their property values?":function(a){return["\u9019\u4E9B\u884C\u70BA\u5DF2\u7D93\u9644\u52A0\u5230\u5C0D\u8C61: ",a("0"),"\u662F\u5426\u8981\u66FF\u63DB\u5B83\u5011\u7684\u5C6C\u6027\u503C\uFF1F"]},"These effects already exist:{0}Do you want to replace them?":function(a){return["\u9019\u4E9B\u6548\u679C\u5DF2\u7D93\u5B58\u5728:",a("0"),"\u4F60\u60F3\u8981\u66FF\u63DB\u5B83\u5011\u55CE\uFF1F"]},"These parameters already exist:{0}Do you want to replace them?":function(a){return["\u9019\u4E9B\u53C3\u6578\u5DF2\u5B58\u5728\uFF1A",a("0"),"\u60A8\u60F3\u66FF\u63DB\u5B83\u5011\u55CE\uFF1F"]},"These properties already exist:{0}Do you want to replace them?":function(a){return["\u9019\u4E9B\u5C6C\u6027\u5DF2\u7D93\u5B58\u5728\uFF1A",a("0"),"\u60A8\u60F3\u8981\u66FF\u63DB\u5B83\u5011\u55CE\uFF1F"]},"These variables hold additional information and are available on all objects of the group.":"\u9019\u4E9B\u8B8A\u91CF\u5305\u542B\u6709\u95DC\u5C0D\u8C61\u7684\u9644\u52A0\u4FE1\u606F\u3002","These variables hold additional information on a project.":"\u9019\u4E9B\u8B8A\u91CF\u5305\u542B\u9805\u76EE\u7684\u9644\u52A0\u4FE1\u606F\u3002","These variables hold additional information on a scene.":"\u9019\u4E9B\u8B8A\u91CF\u5305\u542B\u5834\u666F\u4E2D\u7684\u9644\u52A0\u4FE1\u606F\u3002","These variables hold additional information on an object.":"\u9019\u4E9B\u8B8A\u91CF\u5305\u542B\u6709\u95DC\u5C0D\u8C61\u7684\u9644\u52A0\u4FE1\u606F\u3002","Thickness":"\u539A\u5EA6","Thinking about your request...":"\u6B63\u5728\u601D\u8003\u60A8\u7684\u8ACB\u6C42\u2026\u2026","Thinking through the approach":"\u8003\u616E\u9019\u7A2E\u65B9\u6CD5","Thinking through the details":"\u8003\u616E\u9019\u4E9B\u7D30\u7BC0","Third editor":"\u7B2C\u4E09\u7DE8\u8F2F\u5668","Third-party":"\u7B2C\u4E09\u65B9","This Auth Key was not sent or is not ready to be used.":"\u6B64\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470\u5C1A\u672A\u767C\u9001\u6216\u5C1A\u672A\u6E96\u5099\u597D\u4F7F\u7528\u3002","This Else event is not preceded by a standard event (or another Else), so it will run normally, like an event without an Else.":"\u6B64\u5176\u4ED6\u4E8B\u4EF6\u524D\u9762\u6C92\u6709\u6A19\u6E96\u4E8B\u4EF6\uFF08\u6216\u5176\u4ED6\u5176\u4ED6\uFF09\uFF0C\u56E0\u6B64\u5B83\u5C07\u6B63\u5E38\u904B\u884C\uFF0C\u50CF\u6C92\u6709\u5176\u4ED6\u7684\u4E8B\u4EF6\u3002","This Else event will run if the previous event conditions are not met.":"\u5982\u679C\u524D\u4E00\u500B\u4E8B\u4EF6\u689D\u4EF6\u4E0D\u7B26\u5408\uFF0C\u5247\u6B64\u5176\u4ED6\u4E8B\u4EF6\u5C07\u904B\u884C\u3002","This Spine resource was exported with Spine {spineVersion}. The runtime requires data exported from Spine 4.2. Animations may not work correctly \u2014 please re-export from Spine 4.2.":function(a){return["\u6B64 Spine \u8CC7\u6E90\u5DF2\u4F7F\u7528 Spine ",a("spineVersion")," \u8F38\u51FA\u3002\u904B\u884C\u6642\u9700\u8981\u5F9E Spine 4.2 \u8F38\u51FA\u7684\u6578\u64DA\u3002\u52D5\u756B\u53EF\u80FD\u7121\u6CD5\u6B63\u78BA\u904B\u884C \u2014 \u8ACB\u91CD\u65B0\u5F9E Spine 4.2 \u5C0E\u51FA\u3002"]},"This account already owns this product, you cannot activate it again.":"\u6B64\u5E33\u6236\u5DF2\u64C1\u6709\u6B64\u7522\u54C1\uFF0C\u60A8\u7121\u6CD5\u518D\u6B21\u555F\u7528\u5B83\u3002","This account has been deactivated or deleted.":"\u6B64\u5E33\u6236\u5DF2\u88AB\u505C\u7528\u6216\u522A\u9664\u3002","This account is already a student in another team.":"\u6B64\u5E33\u6236\u5DF2\u7D93\u662F\u53E6\u4E00\u500B\u5718\u968A\u7684\u5B78\u751F\u3002","This action cannot be undone.":"\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002","This action is deprecated and should not be used anymore. Instead, use for all your objects the behavior called \"Physics2\" and the associated actions (in this case, all objects must be set up to use Physics2, you can't mix the behaviors).":"\u6B64\u64CD\u4F5C\u88AB\u5EE2\u68C4\uFF0C\u4E0D\u61C9\u518D\u4F7F\u7528\u3002\u76F8\u53CD\uFF0C\u73FE\u5728\u61C9\u8A72\u4F7F\u7528\u201C\u7269\u74062\u201D\u63D2\u4EF6\u7684\u6240\u6709\u5C0D\u8C61\uFF0C\u884C\u70BA\u548C\u76F8\u95DC\u52D5\u4F5C (\u5728\u9019\u7A2E\u60C5\u6CC1\u4E0B\uFF0C\u6240\u6709\u5C0D\u8C61\u90FD\u5FC5\u9808\u8A2D\u7F6E\u4F7F\u7528\u7269\u74062\u63D2\u4EF6\uFF0C\u60A8\u4E0D\u80FD\u6DF7\u5408\u884C\u70BA)","This action is deprecated and should not be used anymore. Instead, use the \"Text input\" object.":"\u6B64\u64CD\u4F5C\u5DF2\u904E\u6642\uFF0C\u4E0D\u61C9\u518D\u4F7F\u7528\u3002\u8ACB\u6539\u7528\u300C\u6587\u672C\u8F38\u5165\u300D\u5C0D\u8C61\u3002","This action is not automatic yet, we will get in touch to gather your bank details.":"\u6B64\u64CD\u4F5C\u5C1A\u672A\u81EA\u52D5\u5B8C\u6210\uFF0C\u6211\u5011\u5C07\u8207\u60A8\u806F\u7E6B\u4EE5\u6536\u96C6\u60A8\u7684\u9280\u884C\u8A73\u7D30\u4FE1\u606F\u3002","This action will create a new texture and re-render the text each time it is called, which is expensive and can reduce performance. Avoid changing the character size of text frequently.":"\u6B64\u64CD\u4F5C\u5C07\u5275\u5EFA\u4E00\u500B\u65B0\u7684\u7D0B\u7406\uFF0C\u6BCF\u7576\u5B83\u88AB\u8ABF\u7528\u6642\u90FD\u6703\u91CD\u65B0\u6E32\u67D3\u6587\u672C\uFF0C\u9019\u6703\u6D88\u8017\u5927\u91CF\u8CC7\u6E90\u4E26\u964D\u4F4E\u6027\u80FD\u3002\u907F\u514D\u983B\u7E41\u66F4\u6539\u6587\u672C\u7684\u5B57\u7B26\u5927\u5C0F\u3002","This asset requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u8CC7\u7522\u9700\u8981\u66F4\u65B0\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u64F4\u5C55",a("0"),"\u4F60\u60F3\u7ACB\u5373\u66F4\u65B0\u5B83\u5011\u55CE\uFF1F"]},"This behavior can be updated with new features and fixes.{0}Do you want to update it now ?":function(a){return["\u6B64\u884C\u70BA\u53EF\u4EE5\u901A\u904E\u65B0\u529F\u80FD\u548C\u4FEE\u5FA9\u9032\u884C\u66F4\u65B0\u3002",a("0"),"\u4F60\u60F3\u73FE\u5728\u66F4\u65B0\u5B83\u55CE\uFF1F"]},"This behavior can be updated. You may have to do some adaptations to make sure your game still works.{0}Do you want to update it now ?":function(a){return["\u6B64\u884C\u70BA\u53EF\u4EE5\u66F4\u65B0\u3002\u4F60\u53EF\u80FD\u9700\u8981\u505A\u4E00\u4E9B\u8ABF\u6574\uFF0C\u4EE5\u78BA\u4FDD\u4F60\u7684\u904A\u6232\u4ECD\u7136\u6709\u6548\u3002",a("0"),"\u4F60\u60F3\u73FE\u5728\u66F4\u65B0\u5B83\u55CE\uFF1F"]},"This behavior can't be setup per instance.":"\u9019\u500B\u884C\u70BA\u7121\u6CD5\u6839\u64DA\u5BE6\u4F8B\u8A2D\u5B9A\u3002","This behavior is being used by multiple types of objects. Thus, you can't restrict its usage to any particular object type. All the object types using this behavior are listed here: {0}":function(a){return["\u591A\u7A2E\u985E\u578B\u7684\u5C0D\u8C61\u6B63\u5728\u4F7F\u7528\u6B64\u884C\u70BA\uFF0C\u56E0\u6B64\u60A8\u4E0D\u80FD\u5C07\u5176\u7528\u6CD5\u9650\u5236\u70BA\u4EFB\u4F55\u7279\u5B9A\u7684\u5C0D\u8C61\u985E\u578B\u3002\u6B64\u8655\u5217\u51FA\u4E86\u4F7F\u7528\u6B64\u884C\u70BA\u7684\u6240\u6709\u5C0D\u8C61\u985E\u578B\uFF1A ",a("0")]},"This behavior is unknown. It might be a behavior that was defined in an extension and that was later removed. You should delete it.":"\u6B64\u884C\u70BA\u672A\u77E5\u3002\u5B83\u53EF\u80FD\u662F\u5728\u64F4\u5C55\u540D\u4E2D\u5B9A\u7FA9\u5E76\u96A8\u540E\u88AB\u522A\u9664\u7684\u884C\u70BA\u3002\u60A8\u61C9\u8A72\u522A\u9664\u5B83\u3002","This behavior requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u884C\u70BA\u9700\u8981\u66F4\u65B0\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u64F4\u5C55",a("0"),"\u4F60\u60F3\u7ACB\u5373\u66F4\u65B0\u5B83\u5011\u55CE\uFF1F"]},"This behavior will be visible in the scene and events editors.":"\u6B64\u884C\u70BA\u5C07\u5728\u5834\u666F\u548C\u4E8B\u4EF6\u7DE8\u8F2F\u5668\u4E2D\u53EF\u898B\u3002","This behavior won't be visible in the scene and events editors.":"\u6B64\u884C\u70BA\u5728\u5834\u666F\u548C\u4E8B\u4EF6\u7DE8\u8F2F\u5668\u4E2D\u4E0D\u53EF\u898B\u3002","This build is old and the generated games can't be downloaded anymore.":"\u9019\u500B\u69CB\u5EFA\u592A\u8001\u4E86\uFF0C\u751F\u6210\u7684\u6E38\u6232\u5DF2\u7D93\u4E0D\u53EF\u4E0B\u8F09","This bundle contains a subscription for {planName}. Do you want to activate your subscription right away?":function(a){return["\u8A72\u675F\u5305\u542B\u76AE\u8A02\u95B1 ",a("planName"),"\u3002\u4F60\u60F3\u7ACB\u5373\u555F\u52D5\u4F60\u7684\u8A02\u95B1\u55CE\uFF1F"]},"This bundle includes:":"\u6B64\u6346\u7D81\u5305\u5305\u62EC\uFF1A","This can be customized for each scene in the scene properties dialog.":"\u9019\u53EF\u4EE5\u5728\u5834\u666F\u5C6C\u6027\u5C0D\u8A71\u6846\u4E2D\u70BA\u6BCF\u500B\u5834\u666F\u9032\u884C\u81EA\u5B9A\u7FA9\u3002","This can either be a URL to a web page, or a path starting with a slash that will be opened in the GDevelop wiki. Leave empty if there is no help page, although it's recommended you eventually write one if you distribute the extension.":"\u5B83\u53EF\u4EE5\u662F\u7DB2\u9801\u7684URL\uFF0C\u4E5F\u53EF\u4EE5\u662F\u5C07\u5728GDevelop Wiki\u4E2D\u6253\u958B\u7684\u4EE5\u659C\u6760\u958B\u982D\u7684\u8DEF\u5F91\u3002\u5982\u679C\u6C92\u6709\u5E6B\u52A9\u9801\u9762\uFF0C\u8ACB\u4FDD\u7559\u70BA\u7A7A\uFF0C\u76E1\u7BA1\u5EFA\u8B70\u60A8\u5728\u5206\u767C\u64F4\u5C55\u6642\u6700\u7D42\u5BEB\u4E00\u500B\u5E6B\u52A9\u9801\u9762\u3002","This certificate has an unknown type and is probably unable to be used by GDevelop.":"\u8A72\u8B49\u66F8\u7684\u985E\u578B\u672A\u77E5\uFF0CGDevelop \u53EF\u80FD\u7121\u6CD5\u4F7F\u7528\u3002","This certificate type is unknown and might not work when building the app. Are you sure you want to continue?":"\u6B64\u8B49\u66F8\u985E\u578B\u672A\u77E5\uFF0C\u5E76\u4E14\u5728\u69CB\u5EFA\u61C9\u7528\u7A0B\u5E8F\u6642\u53EF\u80FD\u4E0D\u8D77\u4F5C\u7528\u3002\u4F60\u78BA\u5B9A\u4F60\u8981\u7E7C\u7E8C\u55CE\uFF1F","This certificate was not sent or is not ready to be used.":"\u8A72\u8B49\u66F8\u5C1A\u672A\u767C\u9001\u6216\u5C1A\u672A\u6E96\u5099\u597D\u4F7F\u7528\u3002","This code is a coupon code and can't be redeemed here. Start a purchase and enter it there to get a discount.":"\u6B64\u4EE3\u78BC\u70BA\u512A\u60E0\u5238\u4EE3\u78BC\uFF0C\u7121\u6CD5\u5728\u6B64\u514C\u63DB\u3002\u958B\u59CB\u8CFC\u8CB7\u4E26\u5728\u90A3\u88E1\u8F38\u5165\u4EE5\u7372\u5F97\u6298\u6263\u3002","This code is not valid - verify you've entered it properly.":"\u6B64\u4EE3\u78BC\u7121\u6548 - \u8ACB\u9A57\u8B49\u60A8\u8F38\u5165\u7684\u4EE3\u78BC\u662F\u5426\u6B63\u78BA\u3002","This code was valid but can't be redeemed anymore. If this is unexpected, contact us or the code provider.":"\u6B64\u4EE3\u78BC\u6709\u6548\u4F46\u7121\u6CD5\u518D\u514C\u63DB\u3002\u5982\u679C\u9019\u662F\u610F\u5916\uFF0C\u8ACB\u806F\u7CFB\u6211\u5011\u6216\u4EE3\u78BC\u63D0\u4F9B\u5546\u3002","This condition may have unexpected results when the object is on different floors at the same time, due to the fact that the engine only considers the first floor the object comes into contact with.":"\u7576\u5C0D\u8C61\u540C\u6642\u8655\u4E8E\u4E0D\u540C\u7684\u5730\u677F\u4E0A\uFF0C\u9019\u500B\u689D\u4EF6\u53EF\u80FD\u6703\u7522\u751F\u610F\u5916\u7684\u7D50\u679C\u3002 \u7531\u4E8E\u5F15\u64CE\u53EA\u8003\u616E\u5230\u4E00\u5C64\uFF0C\u5C0D\u8C61\u6703\u88AB\u78B0\u5230\u3002","This course is translated in multiple languages.":"\u672C\u8AB2\u7A0B\u5DF2\u7FFB\u8B6F\u6210\u591A\u7A2E\u8A9E\u8A00\u3002","This email is invalid.":"\u6B64\u96FB\u5B50\u90F5\u4EF6\u7121\u6548\u3002","This email was already used for another account.":"\u6B64\u96FB\u5B50\u90F5\u4EF6\u5DF2\u88AB\u7528\u4E8E\u53E6\u4E00\u500B\u5E33\u6236\u3002","This event will be repeated for all instances.":"\u6B64\u4E8B\u4EF6\u5C07\u5C0D\u6240\u6709\u5BE6\u4F8B\u91CD\u8907\u3002","This event will be repeated only for the first instances, up to this limit.":"\u6B64\u4E8B\u4EF6\u50C5\u5C0D\u524D\u9762\u7684\u5BE6\u4F8B\u91CD\u8907\uFF0C\u76F4\u5230\u6B64\u9650\u5236\u3002","This extension requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u64F4\u5C55\u9700\u8981\u66F4\u65B0\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u64F4\u5C55",a("0"),"\u4F60\u60F3\u7ACB\u5373\u66F4\u65B0\u5B83\u5011\u55CE\uFF1F"]},"This file is an extension file for GDevelop 5. You should instead import it, using the window to add a new extension to your project.":"\u6B64\u6587\u4EF6\u662FGDevelop 5\u7684\u64F4\u5C55\u6587\u4EF6\u3002\u60A8\u61C9\u8A72\u5C0E\u5165\u5B83\uFF0C\u4F7F\u7528\u7A97\u53E3\u5411\u9805\u76EE\u6DFB\u52A0\u65B0\u7684\u64F4\u5C55\u3002","This file is corrupt":"\u6B64\u6587\u4EF6\u5DF2\u640D\u58DE","This file is not recognized as a GDevelop 5 project. Be sure to open a file that was saved using GDevelop.":"\u6B64\u6587\u4EF6\u4E0D\u662F GDevelop 5 \u5DE5\u7A0B\u6587\u4EF6\u3002\u8ACB\u52D9\u5FC5\u6253\u958B\u4F7F\u7528 GDevelop \u4FDD\u5B58\u904E\u7684\u6587\u4EF6\u3002","This function calls itself (it is \"recursive\"). Ensure this is expected and there is a proper condition to stop it if necessary.":"\u8A72\u51FD\u6578\u8ABF\u7528\u81EA\u8EAB(\u5B83\u662F\u201C\u905E\u6B78\u7684\u201D)\u3002\u78BA\u4FDD\u9019\u662F\u9810\u671F\u7684\uFF0C\u5E76\u4E14\u6709\u9069\u7576\u7684\u689D\u4EF6\u53EF\u4EE5\u5728\u5FC5\u8981\u6642\u505C\u6B62\u5B83\u3002","This function is asynchronous - it will only allow subsequent events to run after calling the action \"End asynchronous task\" within the function.":"\u8A72\u51FD\u6578\u662F\u7570\u6B65\u7684 - \u5B83\u53EA\u5141\u8A31\u5728\u8ABF\u7528\u51FD\u6578\u5167\u7684\u201C\u7D50\u675F\u7570\u6B65\u4EFB\u52D9\u201D\u64CD\u4F5C\u540E\u904B\u884C\u540E\u7E8C\u4E8B\u4EF6\u3002","This function is marked as deprecated. It will be displayed with a warning in the events editor.":"\u6B64\u529F\u80FD\u5DF2\u6A19\u8A18\u70BA\u904E\u6642\u3002\u5B83\u5C07\u5728\u4E8B\u4EF6\u7DE8\u8F2F\u5668\u4E2D\u986F\u793A\u8B66\u544A\u3002","This function will be visible in the events editor.":"\u6B64\u51FD\u6578\u5C07\u5728\u4E8B\u4EF6\u7DE8\u8F2F\u5668\u4E2D\u53EF\u898B\u3002","This function will have a lot of parameters. Consider creating groups or functions for a smaller set of objects so that the function is easier to reuse.":"\u6B64\u51FD\u6578\u6703\u6709\u8A31\u591A\u53C3\u6578\u3002\u8003\u616E\u70BA\u8F03\u5C0F\u7684\u4E00\u7D44\u5C0D\u8C61\u5275\u5EFA\u7D44\u6216\u51FD\u6578\uFF0C\u4EE5\u4FBF\u4F7F\u51FD\u6578\u66F4\u5BB9\u6613\u518D\u4F7F\u7528\u3002","This function won't be visible in the events editor.":"\u6B64\u529F\u80FD\u5728\u4E8B\u4EF6\u7DE8\u8F2F\u5668\u4E2D\u4E0D\u53EF\u898B\u3002","This game is not registered online. Do you want to register it to access the online features?":"\u6B64\u904A\u6232\u5C1A\u672A\u5728\u7DDA\u8A3B\u518A\u3002\u60A8\u662F\u5426\u8981\u8A3B\u518A\u4EE5\u8A2A\u554F\u5728\u7DDA\u529F\u80FD\uFF1F","This game is registered online but you don't have access to it. Ask the owner of the game to add your account to the list of owners to be able to manage it.":"\u6B64\u904A\u6232\u5DF2\u5728\u7DDA\u8A3B\u518A\uFF0C\u4F46\u60A8\u7121\u6CD5\u8A2A\u554F\u5B83\u3002\u8ACB\u8981\u6C42\u904A\u6232\u7684\u6240\u6709\u8005\u5C07\u60A8\u7684\u5E33\u6236\u6DFB\u52A0\u5230\u64C1\u6709\u8005\u5217\u8868\u4E2D\u4EE5\u4FBF\u80FD\u5920\u7BA1\u7406\u5B83\u3002","This game is using leaderboards. GDevelop will create new leaderboards for this game in your account, so that the game is ready to be played and players can send their scores.":"\u6B64\u6E38\u6232\u4F7F\u7528\u6392\u884C\u699C\u3002GDevelop\u5C07\u5728\u60A8\u7684\u5E33\u6236\u4E2D\u70BA\u6B64\u6E38\u6232\u5275\u5EFA\u65B0\u7684\u6392\u884C\u699C\uFF0C\u4EE5\u4FBF\u6E38\u6232\u6E96\u5099\u5C31\u7DD2\uFF0C\u73A9\u5BB6\u53EF\u4EE5\u767C\u9001\u4ED6\u5011\u7684\u5206\u6578\u3002","This group contains objects of different kinds. You'll only be able to use actions and conditions common to all objects with this group.":"\u8A72\u7D44\u5305\u542B\u4E0D\u540C\u7A2E\u985E\u7684\u5C0D\u8C61\u3002\u60A8\u5C07\u53EA\u80FD\u4F7F\u7528\u8A72\u7D44\u4E2D\u6240\u6709\u5C0D\u8C61\u5171\u6709\u7684\u64CD\u4F5C\u548C\u689D\u4EF6\u3002","This group contains objects of the same kind ({type}). You can use actions and conditions related to this kind of objects in events with this group.":function(a){return["\u8A72\u7D44\u5305\u542B\u76F8\u540C\u985E\u578B (",a("type"),") \u7684\u5C0D\u8C61\u3002\u60A8\u53EF\u4EE5\u5728\u6B64\u7D44\u7684\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u8207\u6B64\u985E\u5C0D\u8C61\u76F8\u95DC\u7684\u64CD\u4F5C\u548C\u689D\u4EF6\u3002"]},"This invitation is no longer valid.":"\u8A72\u9080\u8ACB\u4E0D\u518D\u6709\u6548\u3002","This is a \"lifecycle function\". It will be called automatically by the game engine. It has no parameters.":"\u9019\u662F\u4E00\u7A2E\u201C\u751F\u547D\u5468\u671F\u51FD\u6578\u201D\u3002\u904A\u6232\u5F15\u64CE\u6703\u81EA\u52D5\u8ABF\u7528\u5B83\u3002\u5B83\u6C92\u6709\u53C3\u6578\u3002","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene having the behavior.":"\u9019\u662F\u4E00\u500B\u201C\u751F\u547D\u5468\u671F\u65B9\u6CD5\u201D\u3002\u5C0D\u4E8E\u5834\u666F\u4E2D\u64C1\u6709\u8A72\u884C\u70BA\u7684\u6BCF\u500B\u5BE6\u4F8B\uFF0C\u9019\u500B\u65B9\u6CD5\u90FD\u6703\u88AB\u6E38\u6232\u5F15\u64CE\u81EA\u52D5\u8ABF\u7528\u3002","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene.":"\u9019\u662F\u4E00\u7A2E\u201C\u751F\u547D\u5468\u671F\u65B9\u6CD5\u201D\u3002\u6E38\u6232\u5F15\u64CE\u6703\u70BA\u5834\u666F\u4E2D\u7684\u6BCF\u500B\u5BE6\u4F8B\u81EA\u52D5\u8ABF\u7528\u5B83\u3002","This is a behavior.":"\u9019\u662F\u4E00\u500B\u884C\u70BA\u3002","This is a condition.":"\u9019\u662F\u4E00\u500B\u689D\u4EF6\u3002","This is a multichapter tutorial. GDevelop will save your progress so you can take a break when you need it.":"\u9019\u662F\u4E00\u500B\u591A\u7AE0\u7BC0\u7684\u6559\u5B78\u3002\u5728\u9700\u8981\u6642\uFF0CGDevelop\u5C07\u4FDD\u5B58\u60A8\u7684\u9032\u5EA6\uFF0C\u4EE5\u4FBF\u60A8\u53EF\u4EE5\u4F11\u606F\u3002","This is a relative path that will open in the GDevelop wiki.":"\u9019\u662F\u5728 GDevelop wiki \u4E2D\u6253\u958B\u7684\u76F8\u5C0D\u8DEF\u5F91\u3002","This is all the feedback received on {0} coming from gd.games.":function(a){return["\u9019\u662F\u5728 ",a("0")," \u6536\u5230\u7684\u4F86\u81EA gd.games \u7684\u6240\u6709\u53CD\u994B\u3002"]},"This is an action.":"\u9019\u662F\u4E00\u500B\u52D5\u4F5C\u3002","This is an asynchronous action, meaning that the actions and sub-events following it will wait for it to end. You should use other async actions like \"wait\" to schedule your actions and don't forget to use the action \"End asynchronous function\" to mark the end of the action.":"\u9019\u662F\u4E00\u500B\u7570\u6B65\u52D5\u4F5C\uFF0C\u610F\u5473\u8457\u5B83\u540E\u9762\u7684\u52D5\u4F5C\u548C\u5B50\u4E8B\u4EF6\u5C07\u7B49\u5F85\u5B83\u7D50\u675F\u3002\u60A8\u61C9\u8A72\u4F7F\u7528\u5176\u4ED6\u7570\u6B65\u52D5\u4F5C\uFF0C\u5982\u201C\u7B49\u5F85\u201D\uFF0C\u4F86\u5B89\u6392\u60A8\u7684\u52D5\u4F5C\uFF0C\u4E26\u4E14\u4E0D\u8981\u5FD8\u8A18\u4F7F\u7528\u201C\u7D50\u675F\u7570\u6B65\u51FD\u6578\u201D\u52D5\u4F5C\u4F86\u6A19\u8A18\u52D5\u4F5C\u7684\u7D50\u675F\u3002","This is an event.":"\u9019\u662F\u4E00\u500B\u4E8B\u4EF6\u3002","This is an expression.":"\u9019\u662F\u4E00\u500B\u8868\u9054\u5F0F\u3002","This is an extension made by a community member and it only got through a light review by the GDevelop extension team. As such, we can't guarantee it meets all the quality standards of fully reviewed extensions.":"\u9019\u662F\u4E00\u500B\u7531\u793E\u5340\u6210\u54E1\u88FD\u4F5C\u7684\u64F4\u5C55\uFF0C\u50C5\u7D93\u904EGDevelop\u64F4\u5C55\u5718\u968A\u7684\u8F15\u5FAE\u5BE9\u67E5\u3002\u56E0\u6B64\uFF0C\u6211\u5011\u7121\u6CD5\u4FDD\u8B49\u5B83\u7B26\u5408\u6240\u6709\u5168\u9762\u5BE9\u67E5\u7684\u64F4\u5C55\u7684\u8CEA\u91CF\u6A19\u6E96\u3002","This is an extension.":"\u9019\u662F\u4E00\u500B\u64F4\u5C55\u3002","This is an object.":"\u9019\u662F\u4E00\u500B\u7269\u9AD4\u3002","This is link to a webpage.":"\u9019\u662F\u93C8\u63A5\u5230\u4E00\u500B\u7DB2\u9801\u3002","This is not a URL starting with \"http://\" or \"https://\".":"\u9019\u4E0D\u662F\u4EE5 \"http://\" \u6216 \"https://\" \u958B\u982D\u7684URL\u3002","This is recommended as this allows you to earn money from your games. If you disable this, your game will not show any advertisement.":"\u9019\u662F\u5EFA\u8B70\u7684\uFF0C\u56E0\u70BA\u9019\u80FD\u8B93\u60A8\u5F9E\u904A\u6232\u4E2D\u8CFA\u53D6\u91D1\u9322\u3002\u5982\u679C\u60A8\u7981\u7528\u6B64\u529F\u80FD\uFF0C\u60A8\u7684\u904A\u6232\u5C07\u4E0D\u6703\u986F\u793A\u4EFB\u4F55\u5EE3\u544A\u3002","This is the configuration of your behavior. Make sure to choose a proper internal name as it's hard to change it later. Enter a description explaining what the behavior is doing to the object.":"\u9019\u662F\u4F60\u7684\u884C\u70BA\u914D\u7F6E\u3002\u78BA\u4FDD\u9078\u64C7\u4E00\u500B\u5408\u9069\u7684\u5167\u90E8\u540D\u7A31\uFF0C\u56E0\u70BA\u4EE5\u540E\u5F88\u96E3\u66F4\u6539\u5B83\u3002\u8F38\u5165\u4E00\u500B\u63CF\u8FF0\uFF0C\u4EE5\u89E3\u91CB\u884C\u70BA\u5C0D\u5C0D\u8C61\u7684\u4F5C\u7528\u3002","This is the configuration of your object. Make sure to choose a proper internal name as it's hard to change it later.":"\u9019\u662F\u60A8\u5C0D\u8C61\u7684\u914D\u7F6E\u3002\u8ACB\u78BA\u4FDD\u9078\u64C7\u4E00\u500B\u5408\u9069\u7684\u5167\u90E8\u540D\u7A31\uFF0C\u56E0\u70BA\u4EE5\u5F8C\u5F88\u96E3\u66F4\u6539\u3002","This is the end of the version history.":"\u9019\u662F\u7248\u672C\u6B77\u53F2\u7684\u7D50\u675F\u3002","This is the list of builds that you've done for this game. <0/>Note that builds for mobile and desktop are available for 7 days, after which they are removed.":"\u9019\u662F\u4F60\u70BA\u9019\u500B\u6E38\u6232\u505A\u7684\u69CB\u5EFA\u5217\u8868\u3002<0/>\u6CE8\u610F\uFF0C\u624B\u6A5F\u548C\u684C\u9762\u7248\u672C\u53EF\u75287\u5929\uFF0C\u4E4B\u540E\u5C07\u88AB\u522A\u9664\u3002","This leaderboard is already resetting, please wait a bit, close the dialog, come back and try again.":"\u8A72\u6392\u884C\u699C\u5DF2\u7D93\u91CD\u7F6E\uFF0C\u8ACB\u7B49\u4E00\u4E0B\uFF0C\u95DC\u9589\u5C0D\u8A71\u6846\uFF0C\u56DE\u4F86\u7136\u540E\u91CD\u8A66\u3002","This link is private. You can share it with collaborators, friends or testers.<0/>When you're ready, go to the Game Dashboard and publish it on gd.games.":"\u6B64\u93C8\u63A5\u662F\u79C1\u6709\u7684\u3002\u60A8\u53EF\u4EE5\u8207\u5408\u4F5C\u8005\u3001\u670B\u53CB\u6216\u6E2C\u8A66\u4EBA\u54E1\u5206\u4EAB\u3002<0/>\u6E96\u5099\u597D\u540E\uFF0C\u524D\u5F80\u6E38\u6232\u5100\u8868\u677F\u4E26\u5728 gd.games \u4E0A\u767C\u5E03\u3002","This month":"\u672C\u6708","This needs improvement":"\u9019\u9700\u8981\u6539\u9032","This object can't be used here because it would create a circular dependency with the object being edited.":"\u9019\u500B\u7269\u4EF6\u7121\u6CD5\u5728\u9019\u88E1\u4F7F\u7528\uFF0C\u56E0\u70BA\u5B83\u6703\u8207\u6B63\u5728\u7DE8\u8F2F\u7684\u7269\u4EF6\u7522\u751F\u5FAA\u74B0\u4F9D\u8CF4\u3002","This object does not have any specific configuration. Add it on the scene and use events to interact with it.":"\u8A72\u5C0D\u8C61\u6C92\u6709\u4EFB\u4F55\u7279\u5B9A\u7684\u914D\u7F6E\u3002\u8ACB\u628A\u5B83\u6DFB\u52A0\u5230\u5834\u666F\u4E2D\uFF0C\u5E76\u901A\u904E\u4E8B\u4EF6\u8207\u5176\u4EA4\u4E92\u3002","This object exists, but can't be used here.":"\u6B64\u5C0D\u8C61\u5B58\u5728\uFF0C\u4F46\u7121\u6CD5\u5728\u6B64\u8655\u4F7F\u7528\u3002","This object group is empty and locked.":"This object group is empty and locked.","This object has no behaviors: please add a behavior to the object first.":"\u8A72\u5C0D\u8C61\u6C92\u6709\u884C\u70BA\uFF1A\u8ACB\u5148\u7D66\u8A72\u5C0D\u8C61\u6DFB\u52A0\u4E00\u500B\u884C\u70BA\u3002","This object has no properties.":"\u9019\u500B\u7269\u4EF6\u6C92\u6709\u5C6C\u6027\u3002","This object misses some behaviors: {0}":function(a){return["\u6B64\u5C0D\u8C61\u7F3A\u5C11\u67D0\u4E9B\u884C\u70BA: ",a("0")]},"This object will be visible in the scene and events editors.":"\u6B64\u7269\u4EF6\u5C07\u5728\u5834\u666F\u548C\u4E8B\u4EF6\u7DE8\u8F2F\u5668\u4E2D\u53EF\u898B\u3002","This object won't be visible in the scene and events editors.":"\u6B64\u7269\u4EF6\u5728\u5834\u666F\u548C\u4E8B\u4EF6\u7DE8\u8F2F\u5668\u4E2D\u4E0D\u53EF\u898B\u3002","This password is too weak: please use more letters and digits.":"\u5BC6\u78BC\u592A\u5F31\uFF1A\u8ACB\u4F7F\u7528\u66F4\u591A\u7684\u5B57\u6BCD\u548C\u6578\u5B57\u3002","This project cannot be opened":"\u7121\u6CD5\u6253\u958B\u6B64\u9805\u76EE","This project contains toolbar buttons that want to run npm scripts on your computer ({scriptNames}). Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["\u6B64\u5C08\u6848\u5305\u542B\u60F3\u5728\u60A8\u7684\u96FB\u8166\u4E0A\u904B\u884C npm \u8173\u672C\u7684\u5DE5\u5177\u5217\u6309\u9215\uFF08",a("scriptNames"),"\uFF09\u3002\u53EA\u6709\u5728\u60A8\u81EA\u5DF1\u5275\u5EFA package.json \u6216\u5F9E\u60A8\u4FE1\u4EFB\u7684\u4F86\u6E90\u7372\u5F97\u6642\u624D\u5141\u8A31\u9019\u6A23\u505A\u3002\u60E1\u610F\u8173\u672C\u53EF\u80FD\u6703\u640D\u5BB3\u60A8\u7684\u96FB\u8166\u6216\u7ACA\u53D6\u60A8\u7684\u6578\u64DA\u3002"]},"This project has an auto-saved version":"\u6B64\u9805\u76EE\u6709\u4E00\u500B\u81EA\u52D5\u4FDD\u5B58\u7684\u7248\u672C","This project has configured npm scripts ({scriptNames}) to run automatically when the \"{hookName}\" editor lifecycle hook fires. Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["\u6B64\u5C08\u6848\u5DF2\u914D\u7F6E npm \u8173\u672C (",a("scriptNames"),") \u4EE5\u4FBF\u7576 \"",a("hookName"),"\" \u7DE8\u8F2F\u5668\u751F\u547D\u9031\u671F\u9264\u5B50\u89F8\u767C\u6642\u81EA\u52D5\u904B\u884C\u3002\u53EA\u6709\u5728\u60A8\u81EA\u5DF1\u5275\u5EFA package.json \u6216\u5F9E\u60A8\u4FE1\u4EFB\u7684\u4F86\u6E90\u7372\u53D6\u6642\uFF0C\u624D\u53EF\u4EE5\u5141\u8A31\u9019\u6A23\u505A\u3002\u60E1\u610F\u8173\u672C\u53EF\u80FD\u6703\u640D\u5BB3\u60A8\u7684\u8A08\u7B97\u6A5F\u6216\u7ACA\u53D6\u60A8\u7684\u6578\u64DA\u3002"]},"This project was modified by someone else on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["\u6B64\u9805\u76EE\u5DF2\u7531\u5176\u4ED6\u4EBA\u5728 ",a("formattedDate")," \u7684 ",a("formattedTime")," \u4FEE\u6539\u3002\u662F\u5426\u8986\u84CB\u5176\u66F4\u6539\uFF1F"]},"This project was modified by {lastUsernameWhoModifiedProject} on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["\u6B64\u9805\u76EE\u7531 ",a("lastUsernameWhoModifiedProject")," \u4E8E ",a("formattedDate")," \u5728 ",a("formattedTime")," \u4FEE\u6539\u3002\u662F\u5426\u8986\u84CB\u5176\u66F4\u6539\uFF1F"]},"This property won't be visible in the editor.":"\u8A72\u5C6C\u6027\u5728\u7DE8\u8F2F\u5668\u4E2D\u4E0D\u53EF\u898B\u3002","This purchase cannot be claimed.":"\u6B64\u8CFC\u8CB7\u7121\u6CD5\u88AB\u7D22\u53D6\u3002","This purchase could not be found. Please contact support for more information.":"\u627E\u4E0D\u5230\u6B64\u8CFC\u8CB7\u3002\u8ACB\u806F\u7E6B\u5BA2\u670D\u4EE5\u7372\u53D6\u66F4\u591A\u8CC7\u8A0A\u3002","This purchase has already been activated.":"\u6B64\u8CFC\u8CB7\u5DF2\u7D93\u88AB\u555F\u7528\u3002","This request is for another project. <0>Start a new chat to build on a new project.":"\u6B64\u8ACB\u6C42\u662F\u70BA\u4E86\u53E6\u4E00\u500B\u5C08\u6848\u3002<0>\u958B\u59CB\u4E00\u500B\u65B0\u804A\u5929\u4EE5\u5EFA\u7ACB\u4E00\u500B\u65B0\u5C08\u6848\u3002","This resource does not exist in the game":"\u6B64\u8CC7\u6E90\u5728\u6E38\u6232\u4E2D\u4E0D\u5B58\u5728","This scene will be used as the start scene.":"\u6B64\u5834\u666F\u5C07\u88AB\u7528\u4F5C\u958B\u59CB\u5834\u666F\u3002","This setting changes the visibility of the entire layer. Objects on the layer will not be treated as \"hidden\" for event conditions or actions.":"\u6B64\u8A2D\u7F6E\u66F4\u6539\u6574\u500B\u5716\u5C64\u7684\u53EF\u898B\u6027\u3002\u5C0D\u4E8E\u4E8B\u4EF6\u689D\u4EF6\u6216\u52D5\u4F5C\uFF0C\u5716\u5C64\u4E0A\u7684\u5C0D\u8C61\u4E0D\u6703\u88AB\u8996\u70BA\"\u96B1\u85CF\"\u3002","This shortcut clashes with another action.":"\u9019\u500B\u5FEB\u6377\u9375\u8207\u53E6\u4E00\u500B\u6C96\u7A81\u3002","This sprite uses a rectangle that is as large as the sprite for its collision mask.":"\u8A72\u7CBE\u9748\u4F7F\u7528\u8207\u7CBE\u9748\u4E00\u6A23\u5927\u7684\u77E9\u5F62\u4F5C\u70BA\u5176\u78B0\u649E\u906E\u7F69\u3002","This tutorial must be unlocked to be accessed.":"\u6B64\u6559\u7A0B\u5FC5\u9808\u5148\u89E3\u9396\u624D\u80FD\u8A2A\u554F\u3002","This user does not have projects yet.":"\u6B64\u7528\u6236\u9084\u6C92\u6709\u9805\u76EE\u3002","This user is already a collaborator.":"\u6B64\u7528\u6236\u5DF2\u662F\u5408\u4F5C\u8005\u3002","This user was not found: have you created your account?":"\u627E\u4E0D\u5230\u6B64\u7528\u6236\uFF1A\u60A8\u662F\u5426\u5275\u5EFA\u4E86\u60A8\u7684\u5E33\u6236\uFF1F","This username is already used, please pick another one.":"\u6B64\u7528\u6236\u540D\u5DF2\u88AB\u4F7F\u7528\uFF0C\u8ACB\u9078\u64C7\u5176\u4ED6\u7528\u6236\u540D\u3002","This variable does not exist. <0>Click to add it.":"\u6B64\u8B8A\u6578\u4E0D\u5B58\u5728\u3002<0>\u9EDE\u64CA\u4EE5\u6DFB\u52A0\u3002","This variable has the same name as an object. Consider renaming one or the other.":"\u6B64\u8B8A\u91CF\u8207\u5C0D\u8C61\u540C\u540D\u3002\u8ACB\u8003\u616E\u91CD\u547D\u540D\u5176\u4E2D\u4E00\u500B\u6216\u53E6\u4E00\u4E2A\u3002","This variable is not declared. It's recommended to use the *variables editor* to add it.":"\u6B64\u8B8A\u91CF\u672A\u8072\u660E\u3002\u5EFA\u8B70\u4F7F\u7528 *\u8B8A\u91CF\u7DE8\u8F2F\u5668* \u4F86\u6DFB\u52A0\u5B83\u3002","This variant can't be modified directly. It must be duplicated first.":"\u6B64\u8B8A\u9AD4\u7121\u6CD5\u76F4\u63A5\u4FEE\u6539\u3002\u5FC5\u9808\u5148\u8907\u88FD\u5B83\u3002","This version of GDevelop is:":"\u7576\u524D GDevelop \u7684\u7248\u672C\u662F\uFF1A","This was helpful":"\u9019\u662F\u6709\u5E6B\u52A9\u7684","This week":"\u672C\u5468","This will be used when packaging and submitting your application to the stores.":"\u9019\u5C07\u5728\u6253\u5305\u61C9\u7528\u7A0B\u5E8F\u5E76\u5C07\u5176\u63D0\u4EA4\u5230\u61C9\u7528\u5546\u5E97\u6642\u4F7F\u7528\u3002","This will close your current project. Unsaved changes will be lost.":"\u9019\u5C07\u95DC\u9589\u60A8\u7576\u524D\u7684\u9805\u76EE\u3002\u672A\u4FDD\u5B58\u7684\u66F4\u6539\u5C07\u6703\u4E1F\u5931\u3002","This will export your game as a Cordova project. Cordova is a technology that enables HTML5 games to be packaged for iOS and Android.":"\u9019\u6703\u5C07\u60A8\u7684\u6E38\u6232\u5C0E\u51FA\u70BA Cordova \u9805\u76EE\u3002 Cordova \u662F\u4E00\u9805\u4F7F HTML5 \u6E38\u6232\u80FD\u5920\u6253\u5305\u7528\u4E8E iOS \u548C Android \u7684\u6280\u8853\u3002","This will export your game so that you can package it for Windows, macOS or Linux. You will need to install third-party tools (Node.js, Electron Builder) to package your game.":"\u9019\u5C07\u5C0E\u51FA\u60A8\u7684\u6E38\u6232\uFF0C\u4EE5\u4FBF\u60A8\u53EF\u4EE5\u5C07\u5176\u6253\u5305\u70BAWindows\uFF0CmacOS\u6216Linux\u3002 \u60A8\u9700\u8981\u5B89\u88DD\u7B2C\u4E09\u65B9\u5DE5\u5177(Node.js\uFF0CElectron Builder)\u4F86\u6253\u5305\u60A8\u7684\u6E38\u6232\u3002","This will export your game to a folder. You can then upload it on a website/game hosting service and share it on marketplaces and gaming portals like CrazyGames, Poki, Game Jolt, itch.io, Newgrounds...":"\u9019\u5C07\u5C0E\u51FA\u4F60\u7684\u6E38\u6232\u5230\u4E00\u500B\u6587\u4EF6\u593E\u3002 \u7136\u540E\u60A8\u53EF\u4EE5\u5728\u7DB2\u7AD9/\u6E38\u6232\u6258\u7BA1\u670D\u52D9\u4E0A\u4E0A\u50B3\u5B83\uFF0C\u5E76\u5728\u5E02\u5834\u548C\u6E38\u6232\u9580\u6236\u7DB2\u7AD9\u4E0A\u5206\u4EAB\u5B83\uFF0C\u5982CrazyGames\u3001Poki\u3001Game Jolt\u3001itch.io\u3001Newground...","This year":"\u4ECA\u5E74","This/these file(s) are outside the project folder. Would you like to make a copy of them in your project folder first (recommended)?":"\u6B64\u6587\u4EF6/\u9019\u4E9B\u6587\u4EF6\u4E0D\u5728\u9805\u76EE\u6587\u4EF6\u593E\u4E4B\u5167\u3002\u60A8\u60F3\u8981\u5148\u5C07\u9019\u4E9B\u6587\u4EF6\u5FA9\u5236\u5230\u60A8\u7684\u5DE5\u7A0B\u6587\u4EF6\u593E\u4E2D\u55CE(\u63A8\u85A6)\uFF1F","Through a teacher":"\u901A\u904E\u4E00\u500B\u8001\u5E2B","Throwing physics":"\u6295\u64F2\u7269\u7406","TikTok":"\u6296\u97F3","Tile Map":"\u74E6\u7247\u5730\u5716","Tile Set":"\u74E6\u584A\u96C6","Tile map resource":"\u74E6\u7247\u5730\u5716\u8CC7\u6E90","Tile picker":"\u74F7\u78DA\u9078\u64C7\u5668","Tile size":"\u5716\u584A\u5927\u5C0F","Tiled sprite":"\u5E73\u92EA\u8CBC\u5716","Tilemap":"\u78DA\u584A\u5730\u5716","Tilemap painter":"Tilemap \u756B\u5BB6","Time (ms)":"\u6642\u9593 (\u6BEB\u79D2)","Time between frames":"\u5E40\u4E4B\u9593\u7684\u6642\u9593","Time format":"\u6642\u9593\u683C\u5F0F","Time score":"\u6642\u9593\u6392\u540D","Timers":"\u8A08\u6642\u5668","Timers:":"\u8A08\u6642\u5668\uFF1A","Timestamp: {0}":function(a){return["\u6642\u9593\u6233: ",a("0")]},"Tiny":"\u6700\u5C0F","Title cannot be empty.":"\u6A19\u984C\u4E0D\u80FD\u70BA\u7A7A\u3002","To avoid flickering on objects followed by the camera, use sprites with even dimensions.":"\u70BA\u4E86\u907F\u514D\u5728\u76F8\u6A5F\u8DDF\u96A8\u7684\u5C0D\u8C61\u4E0A\u9583\u720D\uFF0C\u4F7F\u7528\u5076\u6578\u5C3A\u5BF8\u7684\u7CBE\u9748\u3002","To begin, open or create a new project.":"\u6253\u958B\u6216\u5275\u5EFA\u4E00\u500B\u65B0\u9805\u76EE\u4EE5\u958B\u59CB\u3002","To buy this new subscription, we need to stop your existing one before you can pay for the new one. This means the redemption code you're currently used won't be usable anymore.":"\u8981\u8CFC\u8CB7\u9019\u500B\u65B0\u8A02\u95B1\uFF0C\u6211\u5011\u9700\u8981\u5728\u60A8\u652F\u4ED8\u65B0\u8A02\u95B1\u4E4B\u524D\u505C\u6B62\u60A8\u73FE\u6709\u7684\u8A02\u95B1\u3002\u9019\u610F\u5473\u8457\u60A8\u76EE\u524D\u4F7F\u7528\u7684\u514C\u63DB\u4EE3\u78BC\u5C07\u4E0D\u518D\u53EF\u7528\u3002","To confirm, type \"{translatedConfirmText}\"":function(a){return["\u82E5\u8981\u78BA\u8A8D\uFF0C\u8ACB\u8F38\u5165 \"",a("translatedConfirmText"),"\""]},"To edit the external events, choose the scene in which it will be included":"\u8981\u7DE8\u8F2F\u5916\u90E8\u4E8B\u4EF6\uFF0C\u8ACB\u9078\u64C7\u5C07\u5305\u542B\u5B83\u7684\u5834\u666F","To edit the external layout, choose the scene in which it will be included":"\u8981\u7DE8\u8F2F\u5916\u90E8\u5E03\u5C40\uFF0C\u8ACB\u9078\u64C7\u5C07\u5305\u542B\u5B83\u7684\u5834\u666F","To get this new subscription, we need to stop your existing one before you can pay for the new one. This is immediate but your payment will NOT be pro-rated (you will pay the full price for the new subscription). You won't lose any project, game or other data.":"\u8981\u7372\u5F97\u9019\u4E00\u65B0\u8A02\u95B1\uFF0C\u6211\u5011\u9700\u8981\u5148\u505C\u6B62\u60A8\u73FE\u6709\u7684\u8A02\u95B1\uFF0C\u7136\u540E\u60A8\u624D\u80FD\u652F\u4ED8\u65B0\u8A02\u95B1\u7684\u8CBB\u7528\u3002\u9019\u662F\u5373\u6642\u7684\uFF0C\u4F46\u60A8\u7684\u4ED8\u6B3E\u4E0D\u6703\u6309\u6BD4\u4F8B\u8A08\u7B97 (\u60A8\u5C07\u70BA\u65B0\u8A02\u95B1\u652F\u4ED8\u5168\u50F9)\u3002\u60A8\u4E0D\u6703\u4E1F\u5931\u4EFB\u4F55\u9805\u76EE\u3001\u6E38\u6232\u6216\u5176\u4ED6\u6578\u64DA\u3002","To keep using GDevelop cloud, consider deleting old, unused projects.":"\u8981\u7E7C\u7E8C\u4F7F\u7528 GDevelop \u4E91\uFF0C\u8ACB\u8003\u616E\u522A\u9664\u820A\u3001\u672A\u4F7F\u7528\u7684\u9805\u76EE\u3002","To keep using GDevelop leaderboards, consider deleting old, unused leaderboards.":"\u8981\u7E7C\u7E8C\u4F7F\u7528 GDevelop \u6392\u884C\u699C\uFF0C\u8ACB\u8003\u616E\u522A\u9664\u820A\u7684\u3001\u672A\u4F7F\u7528\u7684\u6392\u884C\u699C\u3002","To obtain the best pixel-perfect effect possible, go in the resources editor and disable the Smoothing for all images of your game. It will be done automatically for new images added from now.":"\u8981\u7372\u5F97\u76E1\u53EF\u80FD\u6700\u597D\u7684\u50CF\u7D20\u5B8C\u7F8E\u6548\u679C\uFF0C\u8ACB\u9032\u5165\u8CC7\u6E90\u7DE8\u8F2F\u5668\u5E76\u7981\u7528\u6E38\u6232\u6240\u6709\u5716\u50CF\u7684\u5E73\u6ED1\u8655\u7406\u3002\u5B83\u5C07\u81EA\u52D5\u5B8C\u6210\u5F9E\u73FE\u5728\u958B\u59CB\u6DFB\u52A0\u7684\u65B0\u5716\u50CF\u3002","To preview the shape that the Physics engine will use for this object, choose first a temporary image to use for the preview.":"\u8981\u9810\u89BD\u7269\u7406\u5F15\u64CE\u5C07\u70BA\u6B64\u5C0D\u8C61\u4F7F\u7528\u7684\u5F62\u72C0\uFF0C\u9996\u5148\u9078\u64C7\u4E00\u500B\u81E8\u6642\u5716\u50CF\u7528\u4E8E\u9810\u89BD\u3002","To start a timer, don't forget to use the action \"Start (or reset) a scene timer\" in another event.":"\u8981\u555F\u52D5\u8A08\u6642\u5668\uFF0C\u4E0D\u8981\u5FD8\u8A18\u5728\u53E6\u4E00\u500B\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u201C\u958B\u59CB(\u6216\u91CD\u7F6E)\u5834\u666F\u8A08\u6642\u5668\u201D\u7684\u52D5\u4F5C\u3002","To start a timer, don't forget to use the action \"Start (or reset) an object timer\" in another event.":"\u8981\u555F\u52D5\u8A08\u6642\u5668\uFF0C\u4E0D\u8981\u5FD8\u8A18\u5728\u53E6\u4E00\u500B\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u201C\u958B\u59CB(\u6216\u91CD\u7F6E)\u5C0D\u8C61\u8A08\u6642\u5668\u201D\u7684\u52D5\u4F5C\u3002","To update your seats, contact us at education@gdevelop.io with the details of your current account and how many seats you would like.":"\u8981\u66F4\u65B0\u60A8\u7684\u540D\u984D\uFF0C\u8ACB\u806F\u7E6B\u6211\u5011\uFF0C\u90F5\u4EF6\u81F3 education@gdevelop.io\uFF0C\u4E26\u63D0\u4F9B\u60A8\u7576\u524D\u5E33\u6236\u7684\u8A73\u7D30\u4FE1\u606F\u53CA\u60A8\u5E0C\u671B\u7684\u540D\u984D\u3002","To use this formatting, you must send a score expressed in seconds":"\u8981\u4F7F\u7528\u6B64\u683C\u5F0F\uFF0C\u5FC5\u9808\u767C\u9001\u4EE5\u79D2\u70BA\u55AE\u4F4D\u7684\u5206\u6578","Today":"\u4ECA\u5929","Toggle Developer Tools":"\u5207\u63DB\u958B\u767C\u8005\u5DE5\u5177","Toggle Disabled":"\u5207\u63DB\u7981\u7528","Toggle Fullscreen":"\u5207\u63DB\u5168\u5C4F","Toggle Instances List Panel":"\u5207\u63DB\u5BE6\u4F8B\u5217\u8868\u9762\u677F","Toggle Layers Panel":"\u5207\u63DB\u5716\u5C64\u9762\u677F","Toggle Object Groups Panel":"\u5207\u63DB\u5C0D\u8C61\u7D44\u9762\u677F","Toggle Objects Panel":"\u5207\u63DB\u5C0D\u8C61\u9762\u677F","Toggle Properties Panel":"\u5207\u63DB\u5C6C\u6027\u9762\u677F","Toggle Wait the Action to End":"\u5207\u63DB\u7B49\u5F85\u52D5\u4F5C\u7D50\u675F","Toggle disabled event":"\u5207\u63DB\u7981\u7528\u4E8B\u4EF6","Toggle grid":"\u5207\u63DB\u7DB2\u683C","Toggle inverted condition":"\u5207\u63DB\u53CD\u5411\u689D\u4EF6","Toggle mask":"\u5207\u63DB\u906E\u7F69(mask)","Toggle/edit grid":"\u5207\u63DB/\u7DE8\u8F2F\u7DB2\u683C","Too many things were changed or broken":"\u592A\u591A\u4E8B\u60C5\u88AB\u66F4\u6539\u6216\u640D\u58DE\u4E86","Top":"\u9802\u7AEF","Top bound":"\u4E0A\u908A\u754C","Top bound should be smaller than bottom bound":"\u4E0A\u908A\u754C\u61C9\u5C0F\u65BC\u5E95\u90E8\u908A\u754C","Top face":"\u9802\u9762","Top left corner":"\u5DE6\u4E0A\u89D2","Top margin":"\u4E0A\u908A\u8DDD","Top right corner":"\u53F3\u4E0A\u89D2","Top-Down RPG Pixel Perfect":"\u81EA\u4E0A\u800C\u4E0B RPG \u50CF\u7D20\u5B8C\u7F8E","Top-down":"\u81EA\u4E0A\u800C\u4E0B","Top-down, classic editor":"\u81EA\u4E0A\u800C\u4E0B\u7684\u7D93\u5178\u7DE8\u8F2F\u5668","Total":"\u7E3D\u8A08","Touch (mobile)":"\u89F8\u63A7\uFF08\u79FB\u52D5\uFF09","Tracked C++ objects exposed to JavaScript. Counts refresh every second.":"\u88AB\u66B4\u9732\u7D66 JavaScript \u7684 C++ \u5C0D\u8C61\u3002\u8A08\u6578\u6BCF\u79D2\u5237\u65B0\u3002","Transform a game into a multiplayer experience.":"\u5C07\u904A\u6232\u8F49\u63DB\u70BA\u591A\u4EBA\u9AD4\u9A57\u3002","Transform this Plinko game with collectibles that multiply your score.":"\u4F7F\u7528\u53EF\u4EE5\u589E\u52A0\u60A8\u5206\u6578\u7684\u6536\u85CF\u54C1\u8B8A\u5F62\u9019\u500B Plinko \u904A\u6232\u3002","Transform this platformer into a co-op game, where two players can play together.":"\u5C07\u9019\u500B\u5E73\u53F0\u904A\u6232\u8F49\u8B8A\u70BA\u4E00\u500B\u5408\u4F5C\u904A\u6232\uFF0C\u8B93\u5169\u540D\u73A9\u5BB6\u53EF\u4EE5\u4E00\u8D77\u904A\u73A9\u3002","Triangle":"\u4E09\u89D2\u5F62","True":"\u662F","True (checked)":"True (\u9078\u4E2D)","True or False":"True \u6216 False","True or False (boolean)":"\u662F\u8207\u975E\uFF08\u5E03\u723E\u503C\uFF09","Try again":"\u518D\u8A66\u4E00\u6B21","Try different search terms or check your search options.":"\u5617\u8A66\u4E0D\u540C\u7684\u641C\u5C0B\u8A5E\u6216\u6AA2\u67E5\u60A8\u7684\u641C\u5C0B\u9078\u9805\u3002","Try installing it from the extension store.":"\u5617\u8A66\u5F9E\u64F4\u5C55\u5546\u5E97\u5B89\u88DD\u5B83\u3002","Try it online":"\u5728\u7DDA\u8A66\u7528","Try something else, browse the packs or create your object from scratch!":"\u5617\u8A66\u5176\u4ED6\u6771\u897F\uFF0C\u700F\u89BD\u5305\u6216\u5F9E\u96F6\u958B\u59CB\u5275\u5EFA\u60A8\u7684\u5C0D\u8C61\uFF01","Try your game":"\u8A66\u73A9\u60A8\u7684\u904A\u6232","Tutorial":"\u6559\u7A0B","Tweak gameplay":"\u8ABF\u6574\u904A\u6232\u73A9\u6CD5","Twitter":"\u63A8\u7279","Type":"\u985E\u578B","Type of License: <0>{0}":function(a){return["\u8A31\u53EF\u8B49\u985E\u578B\uFF1A <0>",a("0"),""]},"Type of License: {0}":function(a){return["\u8A31\u53EF\u8B49\u985E\u578B\uFF1A",a("0")]},"Type of objects":"\u5C0D\u8C61\u985E\u578B","Type your email address to delete your account:":"\u8F38\u5165\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u4EE5\u522A\u9664\u60A8\u7684\u5E33\u6236:","Type your email to confirm":"\u8F38\u5165\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6\u4EE5\u78BA\u8A8D","Type:":"\u985E\u578B\uFF1A","UI Theme":"\u754C\u9762\u4E3B\u984C","UI/Interface":"UI/\u754C\u9762","URL":"\u7DB2\u5740","Unable to change feedback for this game":"\u7121\u6CD5\u66F4\u6539\u6B64\u6E38\u6232\u7684\u53CD\u994B","Unable to change quality rating of feedback.":"\u7121\u6CD5\u66F4\u6539\u53CD\u994B\u7684\u8CEA\u91CF\u8A55\u7D1A\u3002","Unable to change read status of feedback.":"\u7121\u6CD5\u66F4\u6539\u53CD\u994B\u7684\u8B80\u53D6\u72C0\u614B\u3002","Unable to change your email preferences":"\u7121\u6CD5\u66F4\u6539\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6\u9996\u9078\u9805","Unable to create a new project for the course chapter. Try again later.":"\u7121\u6CD5\u70BA\u8AB2\u7A0B\u7AE0\u7BC0\u5275\u5EFA\u65B0\u9805\u76EE\u3002\u8ACB\u7A0D\u5F8C\u91CD\u8A66\u3002","Unable to create a new project for the tutorial. Try again later.":"\u7121\u6CD5\u70BA\u672C\u6559\u7A0B\u5275\u5EFA\u65B0\u9805\u76EE\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","Unable to create the project":"\u7121\u6CD5\u5275\u5EFA\u9805\u76EE","Unable to delete the project":"\u7121\u6CD5\u522A\u9664\u9805\u76EE","Unable to download and install the extension and its dependencies. Verify that your internet connection is working or try again later.":"\u7121\u6CD5\u4E0B\u8F09\u4E26\u5B89\u88DD\u64F4\u5C55\u53CA\u5176\u4F9D\u8CF4\u9805\u3002\u9A57\u8B49\u4F60\u7684\u7DB2\u7D61\u9023\u63A5\u662F\u5426\u5DE5\u4F5C\uFF0C\u6216\u8005\u7A0D\u5F8C\u518D\u8A66\u3002","Unable to download the icon. Verify your internet connection or try again later.":"\u7121\u6CD5\u4E0B\u8F09\u6B64\u5716\u6A19\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","Unable to fetch leaderboards as you are offline.":"\u7121\u6CD5\u53D6\u5F97\u6392\u884C\u699C\uFF0C\u56E0\u70BA\u60A8\u662F\u96E2\u7DDA\u72C0\u614B\u3002","Unable to fetch the example.":"\u7121\u6CD5\u7372\u53D6\u793A\u4F8B\u3002","Unable to find the price for this asset pack. Please try again later.":"\u7121\u6CD5\u627E\u5230\u6B64\u8CC7\u6E90\u5305\u7684\u50F9\u683C\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","Unable to find the price for this bundle. Please try again later.":"\u7121\u6CD5\u627E\u5230\u6B64\u6346\u7D81\u5305\u7684\u50F9\u683C\u3002\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","Unable to find the price for this course. Please try again later.":"\u7121\u6CD5\u627E\u5230\u6B64\u8AB2\u7A0B\u7684\u50F9\u683C\u3002\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","Unable to find the price for this game template. Please try again later.":"\u7121\u6CD5\u627E\u5230\u6B64\u6E38\u6232\u6A21\u677F\u7684\u50F9\u683C\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","Unable to get the checkout URL. Please try again later.":"\u7121\u6CD5\u7372\u53D6\u7D50\u5E33 URL\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\u3002","Unable to load the code editor":"\u7121\u6CD5\u52A0\u8F09\u4EE3\u78BC\u7DE8\u8F2F\u5668","Unable to load the image":"\u7121\u6CD5\u8F09\u5165\u5716\u50CF","Unable to load the information about the latest GDevelop releases. Verify your internet connection or retry later.":"\u7121\u6CD5\u52A0\u8F09\u6700\u65B0\u7684 GDevelop \u7248\u672C\u7684\u4FE1\u606F\u3002\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002","Unable to load the tutorial. Please try again later or contact us if the problem persists.":"\u7121\u6CD5\u52A0\u8F09\u6559\u7A0B\u3002\u8ACB\u7A0D\u540E\u518D\u8A66\uFF0C\u5982\u679C\u554F\u984C\u4ECD\u7136\u5B58\u5728\uFF0C\u8ACB\u806F\u7CFB\u6211\u5011\u3002","Unable to mark one of the feedback as read.":"\u7121\u6CD5\u5C07\u5176\u4E2D\u4E00\u500B\u53CD\u994B\u6A19\u8A18\u70BA\u5DF2\u8B80\u3002","Unable to open the project":"\u7121\u6CD5\u6253\u958B\u9805\u76EE","Unable to open the project because this provider is unknown: {storageProviderName}. Try to open the project again from another location.":function(a){return["\u7121\u6CD5\u6253\u958B\u9805\u76EE\uFF0C\u56E0\u70BA\u6B64\u63D0\u4F9B\u5546\u672A\u77E5\uFF1A ",a("storageProviderName"),"\u3002\u8ACB\u5617\u8A66\u5F9E\u53E6\u4E00\u500B\u4F4D\u7F6E\u91CD\u65B0\u6253\u958B\u9805\u76EE\u3002"]},"Unable to open the project.":"\u4E0D\u80FD\u6253\u958B\u9805\u76EE.","Unable to open this file.":"\u4E0D\u80FD\u6253\u958B\u9019\u500B\u6587\u4EF6.","Unable to open this window":"\u7121\u6CD5\u6253\u958B\u6B64\u7A97\u53E3","Unable to register the game":"\u7121\u6CD5\u6CE8\u518A\u6E38\u6232","Unable to remove collaborator":"\u7121\u6CD5\u522A\u9664\u5408\u4F5C\u8005","Unable to save the project":"\u7121\u6CD5\u4FDD\u5B58\u9805\u76EE","Unable to start the debugger server! Make sure that you are authorized to run servers on this computer.":"\u7121\u6CD5\u555F\u52D5\u8ABF\u8A66\u5668\u670D\u52D9\u5668\uFF01\u8ACB\u78BA\u4FDD\u60A8\u88AB\u6388\u6B0A\u5728\u9019\u81FA\u8A08\u7B97\u6A5F\u4E0A\u904B\u884C\u670D\u52D9\u5668\u3002","Unable to start the server for the preview! Make sure that you are authorized to run servers on this computer. Otherwise, use classic preview to test your game.":"\u7121\u6CD5\u555F\u52D5\u9810\u89BD\u670D\u52D9\u5668\uFF01\u8ACB\u78BA\u4FDD\u60A8\u88AB\u6388\u6B0A\u5728\u9019\u81FA\u8A08\u7B97\u6A5F\u4E0A\u904B\u884C\u670D\u52D9\u5668\u3002\u5426\u5247\uFF0C\u4F7F\u7528\u7D93\u5178\u9810\u89BD\u4F86\u6E2C\u8A66\u60A8\u7684\u6E38\u6232\u3002","Unable to unregister the game":"\u7121\u6CD5\u53D6\u6D88\u8A3B\u518A\u904A\u6232","Unable to update game.":"\u7121\u6CD5\u66F4\u65B0\u6E38\u6232\u3002","Unable to update the game details.":"\u7121\u6CD5\u66F4\u65B0\u6E38\u6232\u8A73\u7D30\u4FE1\u606F\u3002","Unable to update the game owners or authors. Have you removed yourself from the owners?":"\u7121\u6CD5\u66F4\u65B0\u6E38\u6232\u6240\u6709\u8005\u6216\u4F5C\u8005\u3002\u60A8\u662F\u5426\u5DF2\u5C07\u81EA\u5DF1\u5F9E\u6240\u6709\u8005\u4E2D\u522A\u9664\uFF1F","Unable to update the game slug. A slug must be 6 to 30 characters long and only contains letters, digits or dashes.":"\u7121\u6CD5\u66F4\u65B0\u6E38\u6232slug\u3002slug\u5FC5\u9808\u662F 6 \u5230 30 \u500B\u5B57\u7B26\uFF0C\u4E14\u53EA\u5305\u542B\u5B57\u6BCD\u3001\u6578\u5B57\u6216\u7834\u6298\u865F\u3002","Unable to verify URLs {0} . Please check they are correct.":function(a){return["\u7121\u6CD5\u9A57\u8B49 URL ",a("0")," \u3002\u8ACB\u6AA2\u67E5\u5B83\u5011\u662F\u5426\u6B63\u78BA\u3002"]},"Understanding the context":"\u7406\u89E3\u4E0A\u4E0B\u6587","Understood, I'll check my Apple or Google account":"\u660E\u767D\u4E86\uFF0C\u6211\u6703\u6AA2\u67E5\u6211\u7684 Apple \u6216 Google \u8CEC\u865F","Undo":"\u64A4\u6D88","Undo the last changes":"\u64A4\u6D88\u4E0A\u6B21\u66F4\u6539","Unfortunately, this extension requires a newer version of GDevelop to work. Update GDevelop to be able to use this extension in your project.":"\u4E0D\u5E78\u7684\u662F\uFF0C\u6B64\u64F4\u5C55\u9700\u8981\u66F4\u65B0\u7248\u672C\u7684 GDevelop \u624D\u80FD\u5DE5\u4F5C\u3002\u66F4\u65B0 GDevelop \u4EE5\u4FBF\u80FD\u5920\u5728\u60A8\u7684\u9805\u76EE\u4E2D\u4F7F\u7528\u6B64\u64F4\u5C55\u3002","Unknown behavior":"\u672A\u77E5\u884C\u70BA","Unknown bundle":"\u672A\u77E5\u7684\u5957\u4EF6","Unknown certificate type":"\u672A\u77E5\u8B49\u66F8\u985E\u578B","Unknown changes attempted for scene {scene_name}.":function(a){return["\u5617\u8A66\u9032\u884C\u672A\u77E5\u7684\u66F4\u6539\u65BC\u5834\u666F ",a("scene_name"),"\u3002"]},"Unknown game":"\u672A\u77E5\u7684\u904A\u6232","Unknown status":"\u672A\u77E5\u72C0\u614B","Unknown status.":"\u672A\u77E5\u72C0\u614B","Unlimited":"\u7121\u9650\u5236","Unlimited commercial use license for claim with Gold or Pro subscription":"\u901A\u904E\u9EC3\u91D1\u6216\u5C08\u696D\u8A02\u95B1\u5373\u53EF\u7372\u5F97\u7121\u9650\u5546\u696D\u4F7F\u7528\u8A31\u53EF","Unload at scene exit":"\u5728\u5834\u666F\u9000\u51FA\u6642\u5378\u8F09","Unloading of scene resources":"\u5834\u666F\u8CC7\u6E90\u7684\u5378\u8F09","Unlock full access to GDevelop to create without limits!":"\u89E3\u9396\u5C0D GDevelop \u7684\u5B8C\u5168\u8A2A\u554F\u6B0A\u9650\uFF0C\u7121\u9650\u5236\u5730\u9032\u884C\u5275\u4F5C\uFF01","Unlock the whole course":"\u89E3\u9396\u6574\u500B\u8AB2\u7A0B","Unlock this lesson to finish the course":"\u89E3\u9396\u6B64\u8AB2\u7A0B\u4EE5\u5B8C\u6210\u8AB2\u7A0B","Unlock with the full course":"\u7528\u5B8C\u6574\u8AB2\u7A0B\u89E3\u9396","Unnamed":"\u672A\u547D\u540D\u7684","Unregister game":"\u6CE8\u92B7\u6E38\u6232","Unsaved changes":"\u672A\u4FDD\u5B58\u7684\u66F4\u6539","Untitled external events":"\u672A\u547D\u540D\u7684\u5916\u90E8\u4E8B\u4EF6","Untitled external layout":"\u672A\u547D\u540D\u7684\u5916\u90E8\u5E03\u5C40","Untitled scene":"\u672A\u547D\u540D\u5834\u666F","UntitledExtension":"\u7121\u6A19\u984C\u64F4\u5C55\u540D","Update":"\u66F4\u65B0","Update (could break the project)":"\u66F4\u65B0(\u53EF\u80FD\u7834\u58DE\u9805\u76EE)","Update <0>{label} of <1>{object_name} (in scene {scene_name}) to <2>{newValue}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0 <0>",a("label")," \u7684 <1>",a("object_name"),"\uFF08\u65BC\u5834\u666F\uFF09\u81F3 <2>",a("newValue"),"\u3002"]},"Update <0>{label} of behavior {behavior_name} on object <1>{object_name} (in scene <2>{scene_name}) to <3>{newValue}.":function(a){return["\u66F4\u65B0\u7269\u4EF6 <1>",a("object_name")," \u4E4B\u884C\u70BA ",a("behavior_name")," \u5728\u5834\u666F <2>",a("scene_name")," \u4E2D\u7684 <0>",a("label")," \u81F3 <3>",a("newValue"),"\u3002"]},"Update GDevelop to latest version":"\u5C07 GDevelop \u66F4\u65B0\u5230\u6700\u65B0\u7248\u672C","Update events in scene <0>{scene_name}.":function(a){return["\u5728\u5834\u666F <0>",a("scene_name")," \u4E2D\u66F4\u65B0\u4E8B\u4EF6\u3002"]},"Update game page":"\u66F4\u65B0\u904A\u6232\u9801\u9762","Update resolution during the game to fit the screen or window size":"\u5728\u6E38\u6232\u904E\u7A0B\u4E2D\u66F4\u65B0\u5206\u8FA8\u7387\u4EE5\u9069\u5408\u5C4F\u5E55\u6216\u7A97\u53E3\u5927\u5C0F","Update some scene effects and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u6548\u679C\u548C\u7FA4\u7D44\u3002"]},"Update some scene effects and layers for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u6548\u679C\u548C\u5716\u5C64\u3002"]},"Update some scene effects for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u6548\u679C\u3002"]},"Update some scene effects, layers and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u6548\u679C\u3001\u5716\u5C64\u548C\u7FA4\u7D44\u3002"]},"Update some scene groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u7FA4\u7D44\u3002"]},"Update some scene layers and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5716\u5C64\u548C\u7FA4\u7D44\u3002"]},"Update some scene layers for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5716\u5C64\u3002"]},"Update some scene properties and effects for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u548C\u6548\u679C\u3002"]},"Update some scene properties and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u548C\u7FA4\u7D44\u3002"]},"Update some scene properties and layers for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u548C\u5716\u5C64\u3002"]},"Update some scene properties for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u3002"]},"Update some scene properties, effects and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u3001\u6548\u679C\u548C\u7FA4\u7D44\u3002"]},"Update some scene properties, layers and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u3001\u5716\u5C64\u548C\u7FA4\u7D44\u3002"]},"Update some scene properties, layers, effects and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u3001\u5716\u5C64\u3001\u6548\u679C\u548C\u7FA4\u7D44\u3002"]},"Update the extension":"\u66F4\u65B0\u64F4\u5C55","Update your seats":"\u66F4\u65B0\u60A8\u7684\u540D\u984D","Update your subscription":"\u66F4\u65B0\u60A8\u7684\u8A02\u95B1","Update {0} properties of <0>{object_name} (in scene {scene_name}).":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0 <0>",a("object_name")," \u7684 ",a("0")," \u5C6C\u6027\u3002"]},"Update {0} settings of behavior {behavior_name} on object {object_name} (in scene {scene_name}).":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u7269\u4EF6 ",a("object_name")," \u4E0A\u7684\u884C\u70BA ",a("behavior_name")," \u7684 ",a("0")," \u8A2D\u7F6E\u3002"]},"Updates":"\u66F4\u65B0","Updating...":"\u6B63\u5728\u66F4\u65B0\u2026\u2026","Upgrade":"\u5347\u7D1A","Upgrade for:":"\u5347\u7D1A\u4EE5\u4FBF\uFF1A","Upgrade subscription":"\u5347\u7D1A\u8A02\u95B1","Upgrade to GDevelop Premium":"\u5347\u7D1A\u81F3 GDevelop Premium","Upgrade to GDevelop Premium to get more leaderboards, storage, and one-click packagings!":"\u5347\u7D1A\u5230 GDevelop \u9AD8\u7D1A\u7248\u4EE5\u7372\u5F97\u66F4\u591A\u6392\u884C\u699C\u3001\u5B58\u5132\u7A7A\u9593\u548C\u4E00\u9375\u6253\u5305\uFF01","Upgrade to get more cloud projects, AI usage, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"\u5347\u7D1A\u4EE5\u5728\u6BCF\u500B\u6708\u7372\u5F97\u66F4\u591A\u7684\u96F2\u9805\u76EE\u3001\u4EBA\u5DE5\u667A\u80FD\u4F7F\u7528\u3001\u767C\u4F48\u3001\u591A\u4EBA\u904A\u6232\u3001\u8AB2\u7A0B\u548CGDevelop Premium\u7684\u9EDE\u6578\u3002","Upgrade to get more cloud projects, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"\u5347\u7D1A\u4EE5\u7372\u53D6\u66F4\u591A\u96F2\u7AEF\u9805\u76EE\u3001\u767C\u5E03\u3001\u591A\u4EBA\u904A\u6232\u3001\u8AB2\u7A0B\u548C\u6BCF\u6708\u7684\u7A4D\u5206\uFF0C\u4F7F\u7528 GDevelop Premium\u3002","Upgrade your GDevelop subscription to unlock this packaging.":"\u5347\u7D1A\u60A8\u7684 GDevelop \u8A02\u95B1\u5373\u53EF\u89E3\u9396\u6B64\u5305\u3002","Upgrade your Premium Plan":"\u5347\u7D1A\u60A8\u7684\u9AD8\u7D1A\u8A08\u756B","Upgrade your Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"\u5347\u7D1A\u60A8\u7684 Premium \u8A02\u95B1\u4EE5\u64C1\u6709\u66F4\u591A AI \u8ACB\u6C42\u548C GDevelop \u786C\u5E63\uFF0C\u4EE5\u89E3\u9396\u5F15\u64CE\u7684\u984D\u5916\u597D\u8655\u3002","Upgrade your subscription":"\u5347\u7D1A\u60A8\u7684\u8A02\u95B1","Upgrade your subscription to keep building with AI.":"\u5347\u7D1A\u60A8\u7684\u8A02\u95B1\u4EE5\u7E7C\u7E8C\u8207 AI \u5EFA\u7ACB\u61C9\u7528\u7A0B\u5F0F\u3002","Upload to build service":"\u4E0A\u50B3\u5230\u69CB\u5EFA\u670D\u52D9","Uploading your game...":"\u6B63\u5728\u4E0A\u50B3\u60A8\u7684\u6E38\u6232...","Use":"\u4F7F\u7528","Use 3D rendering":"\u4F7F\u7528 3D \u6E32\u67D3","Use <0><1/>{variableName} as the loop counter":function(a){return["\u4F7F\u7528 <0><1/>",a("variableName")," \u4F5C\u70BA\u8FF4\u5708\u8A08\u6578\u5668"]},"Use GDevelop Credits":"\u4F7F\u7528 GDevelop \u7A4D\u5206","Use GDevelop credits or get a subscription to increase the limits.":"\u4F7F\u7528 GDevelop \u7A4D\u5206\u6216\u8A02\u95B1\u4F86\u589E\u52A0\u9650\u5236\u3002","Use GDevelop credits or upgrade your subscription to increase the limits.":"\u4F7F\u7528 GDevelop \u7A4D\u5206\u6216\u5347\u7D1A\u60A8\u7684\u8A02\u95B1\u4F86\u589E\u52A0\u9650\u5236\u3002","Use GDevelop credits to start an export.":"\u4F7F\u7528 GDevelop \u7A4D\u5206\u958B\u59CB\u5C0E\u51FA\u3002","Use a Tilemap to build a level and change it dynamically during the game.":"\u4F7F\u7528\u78DA\u584A\u5730\u5716\u4F86\u69CB\u5EFA\u4E00\u500B\u95DC\u5361\uFF0C\u4E26\u5728\u904A\u6232\u4E2D\u52D5\u614B\u66F4\u6539\u5B83\u3002","Use a custom collision mask":"\u4F7F\u7528\u81EA\u5B9A\u7FA9\u78B0\u649E\u906E\u7F69","Use a public URL":"\u4F7F\u7528\u516C\u5171 URL","Use an expression":"\u4F7F\u7528\u8868\u9054\u5F0F","Use as...":"\u7528\u4F5C...","Use custom CSS for the leaderboard":"\u4F7F\u7528\u81EA\u5B9A\u7FA9 CSS \u5236\u4F5C\u6392\u884C\u699C","Use experimental background serializer for saving projects":"\u4F7F\u7528\u5BE6\u9A57\u6027\u80CC\u666F\u5E8F\u5217\u5316\u5DE5\u5177\u4F86\u4FDD\u5B58\u5C08\u6848","Use full image as collision mask":"\u4F7F\u7528\u5B8C\u6574\u5716\u50CF\u4F5C\u70BA\u78B0\u649E\u906E\u7F69","Use icon":"\u4F7F\u7528\u5716\u793A","Use legacy renderer":"\u4F7F\u7528\u820A\u7248\u6E32\u67D3\u5668","Use same collision mask":"\u4F7F\u7528\u76F8\u540C\u7684\u78B0\u649E\u906E\u7F69","Use same collision mask for all animations?":"\u5C0D\u6240\u6709\u52D5\u756B\u4F7F\u7528\u76F8\u540C\u7684\u78B0\u649E\u906E\u7F69\uFF1F","Use same collision mask for all frames?":"\u5C0D\u6240\u6709\u5E40\u4F7F\u7528\u76F8\u540C\u7684\u78B0\u649E\u906E\u7F69\uFF1F","Use same points":"\u4F7F\u7528\u76F8\u540C\u7684\u9EDE","Use same points for all animations?":"\u5C0D\u6240\u6709\u52D5\u756B\u4F7F\u7528\u76F8\u540C\u7684\u9EDE\uFF1F","Use same points for all frames?":"\u5C0D\u6240\u6709\u5E40\u4F7F\u7528\u76F8\u540C\u7684\u9EDE\uFF1F","Use the project setting":"\u4F7F\u7528\u9805\u76EE\u8A2D\u7F6E","Use this external layout inside this scene to start all previews":"\u4F7F\u7528\u6B64\u5834\u666F\u5167\u7684\u5916\u90E8\u5E03\u5C40\u4F86\u958B\u59CB\u6240\u6709\u9810\u89BD","Use this scene to start all previews":"\u4F7F\u7528\u6B64\u5834\u666F\u958B\u59CB\u6240\u6709\u9810\u89BD","Use your email":"\u4F7F\u7528\u4F60\u7684\u96FB\u5B50\u90F5\u4EF6","User interface":"\u7528\u6236\u754C\u9762","User name in the game URL":"\u6E38\u6232URL\u4E2D\u7684\u7528\u6236\u540D","Username":"\u7528\u6236\u540D","Usernames are required to choose a custom game URL.":"\u9700\u8981\u7528\u6236\u540D\u624D\u80FD\u9078\u64C7\u81EA\u5B9A\u7FA9\u6E38\u6232URL\u3002","Users can choose to see only players' best entries or not.":"\u7528\u6236\u53EF\u4EE5\u9078\u64C7\u53EA\u67E5\u770B\u73A9\u5BB6\u7684\u6700\u4F73\u4F5C\u54C1\u3002","Users will be created with an anonymous email. You can later define a full name, a username, or update the generated password if needed.":"\u7528\u6236\u5C07\u4F7F\u7528\u533F\u540D\u96FB\u5B50\u90F5\u4EF6\u5275\u5EFA\u3002\u60A8\u53EF\u4EE5\u7A0D\u5F8C\u5B9A\u7FA9\u5168\u540D\u3001\u7528\u6236\u540D\u6216\u5728\u9700\u8981\u6642\u66F4\u65B0\u751F\u6210\u7684\u5BC6\u78BC\u3002","Using GDevelop Credits":"\u4F7F\u7528 GDevelop \u7A4D\u5206\u4E2D","Using Nearest Scale Mode":"\u4F7F\u7528\u6700\u8FD1\u7684\u7E2E\u653E\u6A21\u5F0F","Using a lot of effects can have a severe negative impact on the rendering performance, especially on low-end or mobile devices. Consider using less effects if possible. You can also disable and re-enable effects as needed using events.":"\u4F7F\u7528\u592A\u591A\u7684\u6548\u679C\u6703\u5C0D\u6E32\u67D3\u6027\u80FD\u7522\u751F\u56B4\u91CD\u7684\u8CA0\u9762\u5F71\u97FF\uFF0C\u7279\u5225\u662F\u5C0D\u4F4E\u7AEF\u6216\u79FB\u52D5\u8A2D\u5099\u7684\u5F71\u97FF\u5F88\u5927\u3002 \u5982\u679C\u53EF\u80FD\uFF0C\u8ACB\u8003\u616E\u6E1B\u5C11\u7279\u6548\u3002\u60A8\u4E5F\u53EF\u4EE5\u7981\u7528\u548C\u91CD\u65B0\u555F\u7528\u7279\u6548\uFF0C\u8996\u9700\u8981\u4F7F\u7528\u4E8B\u4EF6\u3002","Using effects":"\u4F7F\u7528\u6548\u679C","Using empty events based behavior":"\u4F7F\u7528\u57FA\u4E8E\u4E8B\u4EF6\u7684\u7A7A\u884C\u70BA","Using empty events based object":"\u4F7F\u7528\u57FA\u4E8E\u7A7A\u4E8B\u4EF6\u7684\u5C0D\u8C61","Using events based behavior":"\u4F7F\u7528\u57FA\u4E8E\u4E8B\u4EF6\u7684\u884C\u70BA","Using events based object":"\u4F7F\u7528\u57FA\u4E8E\u4E8B\u4EF6\u7684\u5C0D\u8C61","Using function extractor":"\u4F7F\u7528\u51FD\u6578\u63D0\u53D6\u5668","Using lighting layer":"\u4F7F\u7528\u7167\u660E\u5716\u5C64","Using non smoothed textures":"\u4F7F\u7528\u975E\u5E73\u6ED1\u7D0B\u7406","Using pixel rounding":"\u4F7F\u7528\u50CF\u7D20\u820D\u5165","Using the resource properties panel":"\u4F7F\u7528\u8CC7\u6E90\u5C6C\u6027\u9762\u677F","Using too much effects":"\u4F7F\u7528\u904E\u591A\u6548\u679C","Validate these parameters":"\u9A57\u8B49\u9019\u4E9B\u53C3\u6578","Validating...":"\u9A57\u8B49\u4E2D...","Value":"\u503C","Variable":"\u8B8A\u91CF","Variables":"\u8B8A\u91CF","Variables declared in all objects of the group will be visible in event expressions.":"\u5728\u8A72\u7D44\u7684\u6240\u6709\u5C0D\u8C61\u4E2D\u8072\u660E\u7684\u8B8A\u91CF\u5C07\u5728\u4E8B\u4EF6\u8868\u9054\u5F0F\u4E2D\u53EF\u898B\u3002","Variables list":"\u8B8A\u91CF\u5217\u8868","Variant":"Variant","Variant name":"Variant name","Variant updates":"\u8B8A\u9AD4\u66F4\u65B0","Verify that you have the authorization for reading the file you're trying to access.":"\u9A57\u8B49\u60A8\u662F\u5426\u5DF2\u6388\u6B0A\u95B1\u8B80\u60A8\u8981\u8A2A\u554F\u7684\u6587\u4EF6\u3002","Verify your internet connection or try again later.":"\u9A57\u8B49\u60A8\u7684\u7DB2\u7D61\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","Version":"\u7248\u672C","Version number (X.Y.Z)":"\u7248\u672C\u865F (X.Y.Z)","Version {0}":function(a){return["\u7248\u672C ",a("0")]},"Version {0} ({1} available)":function(a){return["\u7248\u672C ",a("0")," (",a("1")," \u53EF\u7528)"]},"Version {version} is available and will be downloaded and installed automatically.":function(a){return["\u7248\u672C ",a("version")," \u53EF\u7528\uFF0C\u5C07\u81EA\u52D5\u4E0B\u8F09\u4E26\u5B89\u88DD\u3002"]},"Version {version} is available. Open About to download and install it.":function(a){return["\u7248\u672C ",a("version")," \u53EF\u7528\u3002\u6253\u958B\u300C\u95DC\u65BC\u300D\u4EE5\u4E0B\u8F09\u4E26\u5B89\u88DD\u3002"]},"Vertical anchor":"\u5782\u76F4\u9328\u9EDE","Vertical flip":"\u5782\u76F4\u7FFB\u8F49","Video":"\u8996\u983B","Video format supported can vary according to devices and browsers. For maximum compatibility, use H.264/mp4 file format (and AAC for audio).":"\u6839\u64DA\u4E0D\u540C\u8A2D\u5099\u548C\u700F\u89BD\u5668\u652F\u6301\u591A\u7A2E\u8996\u983B\u683C\u5F0F\u3002\u70BA\u9054\u5230\u6700\u5927\u517C\u5BB9\u6027\uFF0C\u8ACB\u4F7F\u7528 H.264/mp4 \u683C\u5F0F\u7684\u8996\u983B\u6587\u4EF6 (\u97F3\u983B\u8ACB\u4F7F\u7528AAC)\u3002","Video game":"\u96FB\u5B50\u6E38\u6232","Video resource":"\u8996\u983B\u8CC7\u6E90","View":"\u67E5\u770B","View history":"\u67E5\u770B\u6B77\u53F2\u8A18\u9304","View original chat":"\u67E5\u770B\u539F\u59CB\u804A\u5929","Viewers":"\u89C0\u773E","Viewpoint":"\u8996\u9EDE","Visibility":"\u53EF\u898B\u6027","Visibility and instances ordering":"\u53EF\u898B\u6027\u8207\u5BE6\u4F8B\u6392\u5E8F","Visibility in quick customization dialog":"\u5728\u5FEB\u901F\u81EA\u8A02\u5C0D\u8A71\u6846\u4E2D\u7684\u53EF\u898B\u6027","Visible":"\u53EF\u898B","Visible in editor":"\u7DE8\u8F2F\u5668\u4E2D\u53EF\u898B","Visible in the search and your profile":"\u5728\u641C\u7D22\u548C\u60A8\u7684\u500B\u4EBA\u6A94\u6848\u4E2D\u53EF\u898B","Visual Effects":"\u8996\u89BA\u6548\u679C","Visual appearance":"\u8996\u89BA\u5916\u89C0","Visual appearance (advanced)":"\u8996\u89BA\u5916\u89C0(\u9AD8\u7D1A)","Visual effect":"\u8996\u89BA\u6548\u679C","Visuals":"\u53EF\u898B\u6027","Wait for the action to end before executing the actions (and subevents) following it":"\u7B49\u5F85\u64CD\u4F5C\u7D50\u675F\uFF0C\u7136\u540E\u518D\u57F7\u884C\u5176\u540E\u7684\u64CD\u4F5C(\u548C\u5B50\u4E8B\u4EF6)","Waiting for the purchase confirmation...":"\u6B63\u5728\u7B49\u5F85\u8CFC\u8CB7\u78BA\u8A8D...","Waiting for the subscription confirmation...":"\u6B63\u5728\u7B49\u5F85\u8A02\u95B1\u78BA\u8A8D...","Wallet":"\u9322\u5305","Want to know more?":"\u60F3\u77E5\u9053\u66F4\u591A\u55CE\uFF1F","Warning":"\u8B66\u544A","Watch changes in game engine (GDJS) sources and auto import them (dev only)":"\u89C0\u770B\u6E38\u6232\u5F15\u64CE(GDJS) \u6E90\u4E2D\u7684\u66F4\u6539\u5E76\u81EA\u52D5\u5C0E\u5165(\u50C5\u9650\u958B\u767C\u4EBA\u54E1)","Watch the project folder for file changes in order to refresh the resources used in the editor (images, 3D models, fonts, etc.)":"\u67E5\u770B\u9805\u76EE\u6587\u4EF6\u593E\u4E2D\u7684\u6587\u4EF6\u66F4\u6539\uFF0C\u4EE5\u5237\u65B0\u7DE8\u8F2F\u5668\u4E2D\u4F7F\u7528\u7684\u8CC7\u6E90 (\u5716\u50CF\u30013D\u6A21\u578B\u3001\u5B57\u9AD4\u7B49)","Watch tutorial":"\u89C0\u770B\u6559\u7A0B","We could not check your follow":"\u6211\u5011\u7121\u6CD5\u6AA2\u67E5\u60A8\u7684\u95DC\u6CE8","We could not check your subscription":"\u6211\u5011\u7121\u6CD5\u6AA2\u67E5\u60A8\u7684\u8A02\u95B1","We could not find your GitHub star":"\u6211\u5011\u627E\u4E0D\u5230\u60A8\u7684 GitHub \u661F\u865F","We could not find your GitHub user and star":"\u6211\u5011\u627E\u4E0D\u5230\u60A8\u7684 GitHub \u7528\u6236\u548C\u661F\u865F","We could not find your user":"\u6211\u5011\u627E\u4E0D\u5230\u60A8\u7684\u7528\u6236","We couldn't find a version to go back to.":"\u6211\u5011\u627E\u4E0D\u5230\u8981\u8FD4\u56DE\u7684\u7248\u672C\u3002","We couldn't find your project.{0}If your project is stored on a different computer, launch GDevelop on that computer.{1}Otherwise, use the \"Open project\" button and find it in your filesystem.":function(a){return["\u6211\u5011\u627E\u4E0D\u5230\u60A8\u7684\u9805\u76EE\u3002",a("0"),"\u5982\u679C\u60A8\u7684\u9805\u76EE\u5B58\u5132\u5728\u5176\u4ED6\u8A08\u7B97\u6A5F\u4E0A\uFF0C\u8ACB\u5728\u8A72\u8A08\u7B97\u6A5F\u4E0A\u555F\u52D5 GDevelop\u3002",a("1"),"\u5426\u5247\uFF0C\u8ACB\u4F7F\u7528\u201C\u6253\u958B\u9805\u76EE\u201D\u6309\u9215\u4E26\u5728\u6587\u4EF6\u7CFB\u7D71\u4E2D\u627E\u5230\u5B83\u3002"]},"We couldn't load your cloud projects. Verify your internet connection or try again later.":"\u6211\u5011\u7121\u6CD5\u52A0\u8F09\u60A8\u7684\u4E91\u9805\u76EE\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002","We have found a non-corrupt save from {0} available for modification.":function(a){return["\u6211\u5011\u767C\u73FE\u4F86\u81EA ",a("0")," \u7684\u672A\u640D\u58DE\u5B58\u6A94\u53EF\u4F9B\u4FEE\u6539\u3002"]},"Web":"\u7DB2\u9801","Web Build":"Web \u7248\u672C","Web builds":"Web \u7248\u672C","Welcome back!":"\u6B61\u8FCE\u56DE\u4F86\uFF01","Welcome to GDevelop!":"\u6B61\u8FCE\u4F7F\u7528 GDevelop \uFF01","What are you using GDevelop for?":"\u4F60\u7528GDevelop\u505A\u4EC0\u4E48\uFF1F","What could be improved?":"What could be improved?","What do you want to make?":"\u4F60\u60F3\u505A\u4EC0\u9EBC\uFF1F","What is a good GDevelop feature I could use in my game?":"\u6211\u53EF\u4EE5\u5728\u6211\u7684\u904A\u6232\u4E2D\u4F7F\u7528\u7684\u597D GDevelop \u7279\u6027\u662F\u4EC0\u9EBC\uFF1F","What is your goal with GDevelop?":"\u60A8\u4F7F\u7528 GDevelop \u7684\u76EE\u6A19\u662F\u4EC0\u4E48\uFF1F","What kind of projects are you building?":"\u60A8\u6B63\u5728\u5EFA\u9020\u4EC0\u4E48\u985E\u578B\u7684\u9805\u76EE\uFF1F","What kind of projects do you want to build with GDevelop?":"\u60A8\u60F3\u4F7F\u7528 GDevelop \u69CB\u5EFA\u4EC0\u4E48\u6A23\u7684\u9805\u76EE\uFF1F","What should I do next?":"\u6211\u63A5\u4E0B\u4F86\u8A72\u505A\u4EC0\u9EBC\uFF1F","What went wrong?":"\u767C\u751F\u4E86\u4EC0\u9EBC\u932F\u8AA4\uFF1F","What would you add to my game?":"\u4F60\u6703\u70BA\u6211\u7684\u904A\u6232\u589E\u52A0\u4EC0\u9EBC\uFF1F","What would you like to create?":"\u4F60\u60F3\u5275\u5EFA\u4EC0\u9EBC\uFF1F","What would you like to do next?":"\u60A8\u63A5\u4E0B\u4F86\u60F3\u505A\u4EC0\u9EBC\uFF1F","What would you like to do with this uncorrupted version of your project?":"\u60A8\u5E0C\u671B\u5982\u4F55\u8655\u7406\u9019\u500B\u672A\u640D\u58DE\u7684\u9805\u76EE\u7248\u672C\uFF1F","What's included:":"\u5305\u542B\u5167\u5BB9\uFF1A","What's new in GDevelop?":"GDevelop \u4E2D\u7684\u65B0\u5167\u5BB9\uFF1F","What's new?":"\u66F4\u65B0\u65E5\u5FD7","When checked, will only display the best score of each player (only for the display below).":"\u9078\u4E2D\u6642\uFF0C\u5C07\u53EA\u986F\u793A\u6BCF\u500B\u73A9\u5BB6\u7684\u6700\u4F73\u5206\u6578(\u50C5\u7528\u4E8E\u4E0B\u9762\u7684\u986F\u793A)\u3002","When do you plan to finish or release your projects?":"\u60A8\u8A08\u5283\u4EC0\u4E48\u6642\u5019\u5B8C\u6210\u6216\u767C\u5E03\u60A8\u7684\u9805\u76EE\uFF1F","When previewing the game in the editor, this duration is ignored (the game preview starts as soon as possible).":"\u7576\u5728\u7DE8\u8F2F\u5668\u4E2D\u9810\u89BD\u6E38\u6232\u6642\uFF0C\u6B64\u6301\u7E8C\u6642\u9593\u5C07\u88AB\u5FFD\u7565(\u6E38\u6232\u9810\u89BD\u76E1\u5FEB\u958B\u59CB)\u3002","When you create an object using an action, GDevelop now sets the Z order of the object to the maximum value that was found when starting the scene for each layer. This allow to make sure that objects that you create are in front of others. This game was created before this change, so GDevelop maintains the old behavior: newly created objects Z order is set to 0. It's recommended that you switch to the new behavior by clicking the following button.":"\u7576\u60A8\u4F7F\u7528\u52D5\u4F5C\u5275\u5EFA\u5C0D\u8C61\u6642\uFF0CGDevelop\u73FE\u5728\u6703\u5C07\u5C0D\u8C61\u7684Z\u9806\u5E8F\u8A2D\u7F6E\u70BA\u958B\u59CB\u6BCF\u4E00\u5C64\u5834\u666F\u6642\u767C\u73FE\u7684\u6700\u5927\u503C\u3002\u9019\u6A23\u53EF\u4EE5\u78BA\u4FDD\u60A8\u5275\u5EFA\u7684\u5C0D\u8C61\u4F4D\u4E8E\u5176\u4ED6\u5C0D\u8C61\u7684\u524D\u9762\u3002\u8A72\u6E38\u6232\u662F\u5728\u6B64\u66F4\u6539\u4E4B\u524D\u5275\u5EFA\u7684\uFF0C\u56E0\u6B64GDevelop\u4FDD\u7559\u4E86\u820A\u7684\u884C\u70BA\uFF1A\u65B0\u5275\u5EFA\u7684\u5C0D\u8C61Z\u9806\u5E8F\u8A2D\u7F6E\u70BA0\u3002\u5EFA\u8B70\u60A8\u901A\u904E\u55AE\u64CA\u4EE5\u4E0B\u6309\u9215\u5207\u63DB\u5230\u65B0\u884C\u70BA\u3002","Where are you planing to publish your project(s)?":"\u60A8\u6253\u7B97\u5728\u54EA\u91CC\u767C\u5E03\u60A8\u7684\u9805\u76EE(s)\uFF1F","Where to store this project":"\u5B58\u5132\u6B64\u9805\u76EE\u7684\u4F4D\u7F6E","While these conditions are true:":"\u5982\u679C\u9019\u4E9B\u689D\u4EF6\u90FD\u70BA\u771F:","Width":"\u5BEC\u5EA6","Window":"\u7A97\u53E3","Window title":"\u7A97\u53E3\u6A19\u984C","Windows (auto-installer file)":"Windows (\u81EA\u52D5\u5B89\u88DD\u7A0B\u5E8F\u6587\u4EF6)","Windows (exe)":"Windows (exe)","Windows (zip file)":"Windows (zip \u6587\u4EF6)","Windows (zip)":"Windows (zip)","Windows, MacOS and Linux":"Windows\u3001 MacOS \u548C Linux","Windows, MacOS, Linux (Steam, MS Store...)":"Windows\u3001MacOS \u548C Linux (Steam\u3001MS Store...)","Windows, macOS & Linux":"Windows\u3001macOS \u548C Linux","Windows/macOS/Linux (manual)":"Windows/macOS/Linux (\u624B\u52D5)","Windows/macOS/Linux Build":"Windows/macOS/Linux \u7248\u672C","With an established team of people during the whole project":"\u5728\u6574\u500B\u9805\u76EE\u671F\u9593\u64C1\u6709\u4E00\u652F\u6210\u719F\u7684\u5718\u968A","With at least one other person":"\u81F3\u5C11\u548C\u53E6\u4E00\u500B\u4EBA","With placeholder":"\u4F7F\u7528\u4F54\u4F4D\u7B26","Working...":"\u5DE5\u4F5C\u4E2D\u2026\u2026","Would you like to describe your projects?":"\u60A8\u60F3\u63CF\u8FF0\u4E00\u4E0B\u60A8\u7684\u9805\u76EE\u55CE\uFF1F","Would you like to open the non-corrupt version instead?":"\u60A8\u60F3\u8981\u6253\u958B\u975E\u640D\u58DE\u7684\u7248\u672C\u55CE\uFF1F","Write events for scene <0>{scene_name}.":function(a){return["\u70BA\u5834\u666F <0>",a("scene_name")," \u5BEB\u5165\u4E8B\u4EF6\u3002"]},"X":"X\u8EF8","X offset (in pixels)":"X \u504F\u79FB (\u50CF\u7D20)","Y":"Y\u8EF8","Y offset (in pixels)":"Y \u504F\u79FB (\u50CF\u7D20)","Year":"\u5E74","Yearly, {0}":function(a){return["\u6BCF\u5E74\uFF0C",a("0")]},"Yearly, {0} per seat":function(a){return["\u6BCF\u5E74\uFF0C",a("0")," \u6BCF\u5EA7\u4F4D"]},"Yes":"\u662F","Yes or No":"\u662F\u6216\u5426","Yes or No (boolean)":"\u662F\u6216\u5426 \uFF08\u5E03\u723E\u503C\uFF09","Yes, and enable auto-edit":"\u662F\u7684\uFF0C\u4E26\u555F\u7528\u81EA\u52D5\u7DE8\u8F2F","Yes, discard my changes":"\u662F\u7684\uFF0C\u653E\u68C4\u6211\u7684\u66F4\u6539","Yes, just this change":"\u662F\u7684\uFF0C\u50C5\u6B64\u66F4\u6539","Yesterday":"\u6628\u5929","You already have an account for this email address with a different provider (Google, Apple or GitHub). Please try with one of those.":"\u60A8\u5DF2\u5728\u5176\u4ED6\u63D0\u4F9B\u5546 (Google\u3001Apple \u6216 GitHub) \u8655\u64C1\u6709\u6B64\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u7684\u5E33\u6236\u3002\u8ACB\u5617\u8A66\u5176\u4E2D\u4E4B\u4E00\u3002","You already have an active {translatedName} featuring for your game {0}. Check your emails or discord, we will get in touch with you to get the campaign up!":function(a){return["\u60A8\u5DF2\u7D93\u70BA\u60A8\u7684\u6E38\u6232 ",a("0")," \u63D0\u4F9B\u4E86\u4E00\u500B\u6709\u6548\u7684 ",a("translatedName"),"\u3002\u6AA2\u67E5\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6\u6216\u4E0D\u548C\u8AE7\uFF0C\u6211\u5011\u5C07\u8207\u60A8\u806F\u7CFB\u4EE5\u555F\u52D5\u6D3B\u52D5\uFF01"]},"You already have these {0} assets installed, do you want to add them again?":function(a){return["\u60A8\u5DF2\u7D93\u5B89\u88DD\u4E86 ",a("0")," \u500B\u8CC7\u7522\uFF0C\u60A8\u60F3\u8981\u518D\u6B21\u6DFB\u52A0\u5B83\u5011\u55CE\uFF1F"]},"You already have {0} asset(s) in your scene. Do you want to add the remaining {1} one(s)?":function(a){return["\u60A8\u7684\u5834\u666F\u4E2D\u5DF2\u7D93\u6709 ",a("0")," \u500B\u8CC7\u7522\u3002\u60A8\u60F3\u8981\u6DFB\u52A0\u5269\u4F59\u7684 ",a("1")," \u500B(s)\u55CE\uFF1F"]},"You already own this product":"\u60A8\u5DF2\u7D93\u64C1\u6709\u9019\u500B\u7522\u54C1","You already own {0}!":function(a){return["\u60A8\u5DF2\u7D93\u64C1\u6709 ",a("0"),"\uFF01"]},"You already used this code - you can't reuse a code multiple times.":"\u60A8\u5DF2\u7D93\u4F7F\u7528\u904E\u6B64\u4EE3\u78BC - \u60A8\u4E0D\u80FD\u591A\u6B21\u91CD\u5FA9\u4F7F\u7528\u4EE3\u78BC\u3002","You are about to delete an object":"\u60A8\u5C07\u8981\u522A\u9664\u4E00\u500B\u5C0D\u8C61","You are about to delete the project {projectName}, which is currently opened. If you proceed, the project will be closed and you will lose any unsaved changes. Do you want to proceed?":function(a){return["\u60A8\u5373\u5C07\u522A\u9664\u7576\u524D\u5DF2\u958B\u555F\u7684\u5C08\u6848 ",a("projectName"),"\u3002\u5982\u679C\u60A8\u7E7C\u7E8C\uFF0C\u5C08\u6848\u5C07\u88AB\u95DC\u9589\uFF0C\u4E14\u60A8\u5C07\u5931\u53BB\u6240\u6709\u672A\u4FDD\u5B58\u7684\u66F4\u6539\u3002\u60A8\u60F3\u8981\u7E7C\u7E8C\u55CE\uFF1F"]},"You are about to quit the tutorial.":"\u60A8\u5373\u5C07\u9000\u51FA\u8A72\u6559\u7A0B\u3002","You are about to remove \"{0}\" from the list of your projects.{1}It will not delete it from your disk and you can always re-open it later. Do you want to proceed?":function(a){return["\u60A8\u5373\u5C07\u5F9E\u9805\u76EE\u5217\u8868\u4E2D\u522A\u9664\u201C",a("0"),"\u201D\u3002",a("1"),"\u6B64\u64CD\u4F5C\u4E0D\u6703\u5C07\u5176\u5F9E\u78C1\u789F\u4E2D\u522A\u9664\uFF0C\u60A8\u53EF\u4EE5\u96A8\u6642\u7A0D\u5F8C\u91CD\u65B0\u6253\u958B\u5B83\u3002\u60A8\u8981\u7E7C\u7E8C\u55CE\uFF1F"]},"You are about to remove the last sprite of this object, which has a custom collision mask. The custom collision mask will be lost. Are you sure you want to continue?":"\u60A8\u5C07\u8981\u522A\u9664\u8A72\u5C0D\u8C61\u7684\u6700\u540E\u4E00\u500B\u7CBE\u9748\uFF0C\u8A72\u5C0D\u8C61\u5177\u6709\u81EA\u5B9A\u7FA9\u78B0\u649E\u906E\u7F69\u3002\u81EA\u5B9A\u7FA9\u78B0\u649E\u906E\u7F69\u5C07\u6703\u4E1F\u5931\u3002\u4F60\u78BA\u5B9A\u4F60\u8981\u7E7C\u7E8C\u55CE\uFF1F","You are about to remove {0}{1} from the list of collaborators. Are you sure?":function(a){return["\u60A8\u5C07\u5F9E\u5408\u4F5C\u8005\u5217\u8868\u4E2D\u522A\u9664 ",a("0"),a("1")," \u3002\u60A8\u78BA\u5B9A\u55CE\uFF1F"]},"You are about to use {assetPackCreditsAmount} credits to purchase the asset pack {0}. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("assetPackCreditsAmount")," \u7A4D\u5206\u4F86\u8CFC\u8CB7\u8CC7\u7522\u5305 ",a("0"),"\u3002\u7E7C\u7E8C\uFF1F"]},"You are about to use {creditsAmount} credits to purchase the course \"{translatedCourseTitle}\". Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528",a("creditsAmount"),"\u7A4D\u5206\u8CFC\u8CB7\u8AB2\u7A0B\u201C",a("translatedCourseTitle"),"\u201D\u3002\u7E7C\u7E8C\u55CE\uFF1F"]},"You are about to use {gameTemplateCreditsAmount} credits to purchase the game template {0}. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("gameTemplateCreditsAmount")," \u7A4D\u5206\u8CFC\u8CB7\u6E38\u6232\u6A21\u677F ",a("0"),"\u3002\u7E7C\u7E8C\uFF1F"]},"You are about to use {planCreditsAmount} credits to extend the game featuring {translatedName} for your game {0} and push it to the top of gd.games. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("planCreditsAmount")," \u7A4D\u5206\u4F86\u64F4\u5C55\u60A8\u7684\u6E38\u6232 ",a("0")," \u4E2D\u5305\u542B ",a("translatedName")," \u7684\u6E38\u6232\uFF0C\u5E76\u5C07\u5176\u63A8\u81F3 gd.games \u7684\u9802\u90E8\u3002\u7E7C\u7E8C\uFF1F"]},"You are about to use {planCreditsAmount} credits to purchase the game featuring {translatedName} for your game {0}. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("planCreditsAmount")," \u7A4D\u5206\u70BA\u60A8\u7684\u6E38\u6232 ",a("0")," \u8CFC\u8CB7\u5305\u542B ",a("translatedName")," \u7684\u6E38\u6232\u3002\u7E7C\u7E8C\uFF1F"]},"You are about to use {usageCreditPrice} credits to start this build. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("usageCreditPrice")," \u7A4D\u5206\u4F86\u958B\u59CB\u6B64\u69CB\u5EFA\u3002\u7E7C\u7E8C\uFF1F"]},"You are already a member of this team.":"\u60A8\u5DF2\u7D93\u662F\u6B64\u5718\u968A\u7684\u6210\u54E1\u3002","You are in raw mode. You can edit the fields, but be aware that this can lead to unexpected results or even crash the debugged game!":"\u60A8\u8655\u4E8E\u539F\u59CB\u6A21\u5F0F\u3002\u60A8\u53EF\u4EE5\u7DE8\u8F2F\u5B57\u6BB5\uFF0C\u4F46\u9019\u53EF\u80FD\u5C0E\u81F4\u610F\u5916\u7D50\u679C\u751A\u81F3\u5D29\u6F70\u8ABF\u8A66\u6E38\u6232\uFF01","You are missing out on asset store discounts and other benefits! Verify your email address. Didn't receive it?":"\u4F60\u932F\u904E\u4E86\u8CC7\u7522\u5546\u5E97\u7684\u6298\u6263\u548C\u5176\u4ED6\u597D\u8655! \u6838\u5BE6\u4F60\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u3002\u6C92\u6709\u6536\u5230\u55CE\uFF1F","You are not connected. Create an account to build your game for Android, Windows, macOS and Linux in one click, and get access to metrics for your game.":"\u60A8\u5C1A\u672A\u9023\u63A5\u3002\u5275\u5EFA\u4E00\u500B\u5E33\u6236\u5373\u53EF\u4E00\u9375\u69CB\u5EFA\u9069\u7528\u4E8EAndroid\uFF0CWindows\uFF0CmacOS\u548CLinux\u7684\u6E38\u6232\uFF0C\u5E76\u53EF\u4EE5\u8A2A\u554F\u6E38\u6232\u6307\u6A19\u3002","You are not owner of this project, so you cannot invite collaborators.":"\u60A8\u4E0D\u662F\u6B64\u9805\u76EE\u7684\u6240\u6709\u8005\uFF0C\u6240\u4EE5\u60A8\u4E0D\u80FD\u9080\u8ACB\u5408\u4F5C\u8005\u3002","You are not the owner of this game, ask the owner to add you as an owner to see its exports.":"\u60A8\u4E0D\u662F\u8A72\u6E38\u6232\u7684\u6240\u6709\u8005\uFF0C\u8ACB\u8981\u6C42\u6240\u6709\u8005\u5C07\u60A8\u6DFB\u52A0\u70BA\u6240\u6709\u8005\u4EE5\u67E5\u770B\u5176\u5C0E\u51FA\u3002","You can <0>help translate GDevelop into your language.":"You can <0>help translate GDevelop into your language.","You can add students who already have a GDevelop account. They will receive a notification to accept the invitation. If they don't have an account, they can create one with their student email.":"\u60A8\u53EF\u4EE5\u6DFB\u52A0\u5DF2\u7D93\u64C1\u6709 GDevelop \u5E33\u6236\u7684\u5B78\u751F\u3002\u4ED6\u5011\u5C07\u6536\u5230\u901A\u77E5\u4EE5\u63A5\u53D7\u9080\u8ACB\u3002\u5982\u679C\u4ED6\u5011\u6C92\u6709\u5E33\u6236\uFF0C\u4ED6\u5011\u53EF\u4EE5\u4F7F\u7528\u4ED6\u5011\u7684\u5B78\u751F\u96FB\u5B50\u90F5\u4EF6\u5275\u5EFA\u4E00\u500B\u3002","You can also launch a preview from this external layout, but remember that it will still create objects from the scene, as well as trigger its events. Make sure to disable any action loading the external layout before doing so to avoid having duplicate objects!":"\u60A8\u4E5F\u53EF\u4EE5\u5F9E\u9019\u500B\u5916\u90E8\u5E03\u5C40\u555F\u52D5\u4E00\u500B\u9810\u89BD\uFF0C\u4F46\u8ACB\u8A18\u4F4F\uFF0C\u5B83\u4ECD\u5C07\u5275\u5EFA\u5834\u666F\u4E2D\u7684\u5C0D\u8C61\uFF0C\u5E76\u89F8\u767C\u5176\u4E8B\u4EF6\u3002\u8ACB\u52D9\u5FC5\u7981\u7528\u4EFB\u4F55\u884C\u52D5\u8F09\u5165\u7684\u5916\u90E8\u5E03\u5C40\u4E4B\u524D\uFF0C\u9019\u6A23\u505A\uFF0C\u4EE5\u907F\u514D\u6709\u91CD\u5FA9\u7684\u5C0D\u8C61\uFF01","You can always do it later by redeeming a code on your profile.":"\u60A8\u53EF\u4EE5\u96A8\u6642\u900F\u904E\u5728\u60A8\u7684\u500B\u4EBA\u6A94\u6848\u4E2D\u514C\u63DB\u4EE3\u78BC\u4F86\u7A0D\u5F8C\u518D\u57F7\u884C\u6B64\u64CD\u4F5C\u3002","You can configure the following properties and they will be applied as soon as you share your game with an export to gd.games.":"\u60A8\u53EF\u4EE5\u914D\u7F6E\u4EE5\u4E0B\u5C6C\u6027\uFF0C\u9019\u4E9B\u5C6C\u6027\u5C07\u5728\u60A8\u8207 gd.games \u5171\u4EAB\u904A\u6232\u6642\u7ACB\u5373\u751F\u6548\u3002","You can contribute and <0>create your own themes.":"\u60A8\u53EF\u4EE5\u8CA2\u737B\u5E76\u4E14<0>\u5275\u5EFA\u81EA\u5DF1\u7684\u4E3B\u984C\u3002","You can download the file of your game to continue working on it using the full GDevelop version:":"\u60A8\u53EF\u4EE5\u4F7F\u7528\u5B8C\u6574\u7684 GDevelop \u7248\u672C\uFF0C\u4E0B\u8F09\u60A8\u7684\u6E38\u6232\u6587\u4EF6\uFF0C\u4EE5\u4FBF\u7E7C\u7E8C\u4F7F\u7528\u5B83\uFF1A","You can export the extension to a file to easily import it in another project. If your extension is providing useful and reusable functions or behaviors, consider sharing it with the GDevelop community!":"\u4F60\u53EF\u4EE5\u5C07\u64F4\u5C55\u540D\u5C0E\u51FA\u5230\u6587\u4EF6\uFF0C\u4EE5\u4FBF\u5728\u53E6\u4E00\u500B\u9805\u76EE\u4E2D\u8F15\u677E\u5C0E\u5165\u3002\u5982\u679C\u4F60\u7684\u64F4\u5C55\u540D\u63D0\u4F9B\u6709\u7528\u5E76\u53EF\u91CD\u5FA9\u4F7F\u7528\u7684\u51FD\u6578\u6216\u884C\u70BA\uFF0C\u8ACB\u8003\u616E\u8207GDevelop\u793E\u5340\u5206\u4EAB\u5B83\uFF01","You can find your cloud projects in the Create section of the homepage.":"\u60A8\u53EF\u4EE5\u5728\u4E3B\u9801\u7684\u5275\u5EFA\u90E8\u5206\u627E\u5230\u60A8\u7684\u96F2\u9805\u76EE\u3002","You can install it from the Project Manager.":"\u60A8\u53EF\u4EE5\u5F9E\u9805\u76EE\u7BA1\u7406\u5668\u5B89\u88DD\u5B83\u3002","You can now compile the game by yourself using Cordova command-line tool to iOS (XCode is required) or Android (Android SDK is required).":"\u60A8\u73FE\u5728\u53EF\u4EE5\u4F7F\u7528 Cordova command-line \u5DE5\u5177\u7DE8\u8B6F\u6E38\u6232\u5230 iOS (XCode \u662F\u5FC5\u9700\u7684) \u6216 Android SDK \u3002","You can now create a game on Facebook Instant Games, if not already done, and upload the generated archive.":"\u60A8\u73FE\u5728\u53EF\u4EE5\u5728 Facebook \u5373\u6642\u6E38\u6232\u4E0A\u5275\u5EFA\u6E38\u6232\uFF0C\u5982\u679C\u9084\u6C92\u6709\u5275\u5EFA\uFF0C\u7136\u540E\u4E0A\u50B3\u751F\u6210\u7684\u5B58\u6A94\u3002","You can now go back to the asset store to use the assets in your games.":"\u60A8\u73FE\u5728\u53EF\u4EE5\u8FD4\u56DE\u8CC7\u7522\u5546\u5E97\u4EE5\u5728\u6E38\u6232\u4E2D\u4F7F\u7528\u8CC7\u7522\u3002","You can now go back to the course.":"\u60A8\u73FE\u5728\u53EF\u4EE5\u8FD4\u56DE\u8AB2\u7A0B\u3002","You can now go back to the store to use your new game template.":"\u60A8\u73FE\u5728\u53EF\u4EE5\u8FD4\u56DE\u5546\u5E97\u4F7F\u7528\u60A8\u7684\u65B0\u6E38\u6232\u6A21\u677F\u3002","You can now go back to use your new bundle.":"\u60A8\u73FE\u5728\u53EF\u4EE5\u8FD4\u56DE\u4F7F\u7528\u60A8\u7684\u65B0\u6346\u7D81\u5305\u3002","You can now go back to use your new product.":"\u60A8\u73FE\u5728\u53EF\u4EE5\u8FD4\u56DE\u4F7F\u7528\u60A8\u7684\u65B0\u7522\u54C1\u3002","You can now upload the game to a web hosting service to play it.":"\u60A8\u73FE\u5728\u53EF\u4EE5\u5C07\u6E38\u6232\u4E0A\u50B3\u5230\u7DB2\u7D61\u6258\u7BA1\u670D\u52D9\u4F86\u73A9\u3002","You can now use them across the app!":"\u60A8\u73FE\u5728\u53EF\u4EE5\u5728\u6574\u500B\u61C9\u7528\u7A0B\u5E8F\u4E2D\u4F7F\u7528\u5B83\u5011\uFF01","You can only install up to {MAX_ASSETS_TO_INSTALL} assets at once. Try filtering the assets you would like to install, or install them one by one.":function(a){return["\u4E00\u6B21\u53EA\u80FD\u5B89\u88DD\u6700\u591A ",a("MAX_ASSETS_TO_INSTALL")," \u8CC7\u7522\u3002\u5617\u8A66\u7BE9\u9078\u60A8\u60F3\u8981\u5B89\u88DD\u7684\u8CC7\u7522\uFF0C\u6216\u8005\u4E00\u500B\u4E00\u500B\u5730\u5B89\u88DD\u5B83\u5011\u3002"]},"You can open the command palette by pressing {commandPaletteShortcut} or {commandPaletteSecondaryShortcut}.":function(a){return["\u60A8\u53EF\u4EE5\u6309\u4E0B ",a("commandPaletteShortcut")," \u6216 ",a("commandPaletteSecondaryShortcut")," \u4F86\u958B\u555F\u547D\u4EE4\u8ABF\u8272\u677F\u3002"]},"You can save your project to come back to it later. What do you want to do?":"\u60A8\u53EF\u4EE5\u4FDD\u5B58\u60A8\u7684\u9805\u76EE\uFF0C\u7A0D\u540E\u518D\u56DE\u5230\u5B83\u3002\u60A8\u60F3\u505A\u4EC0\u4E48\uFF1F","You can select more than one.":"\u60A8\u53EF\u4EE5\u9078\u64C7\u591A\u500B\u3002","You can switch to GDevelop credits.":"\u60A8\u53EF\u4EE5\u5207\u63DB\u5230 GDevelop \u7A4D\u5206\u3002","You can use credits to feature a game or purchase asset packs and game templates in the store!":"\u60A8\u53EF\u4EE5\u4F7F\u7528\u7A4D\u5206\u4F86\u63A8\u85A6\u6E38\u6232\u6216\u5728\u5546\u5E97\u4E2D\u8CFC\u8CB7\u8CC7\u7522\u5305\u548C\u6E38\u6232\u6A21\u677F\uFF01","You can't delete your account while you have an active subscription. Please cancel your subscription first.":"\u7576\u60A8\u7684\u8A02\u95B1\u6709\u6548\u6642\uFF0C\u60A8\u7121\u6CD5\u522A\u9664\u60A8\u7684\u5E33\u6236\u3002\u8ACB\u5148\u53D6\u6D88\u8A02\u95B1\u3002","You cannot add yourself as a collaborator.":"\u60A8\u4E0D\u80FD\u5C07\u81EA\u5DF1\u6DFB\u52A0\u70BA\u5408\u4F5C\u8005\u3002","You cannot do this.":"\u4F60\u4E0D\u80FD\u9019\u6A23\u505A\u3002","You cannot unregister a game that has active leaderboards. To delete them, access the player services, and delete them one by one.":"\u60A8\u4E0D\u80FD\u53D6\u6D88\u8A3B\u518A\u4E00\u500B\u6709\u6D3B\u8E8D\u6392\u884C\u699C\u7684\u904A\u6232\u3002\u8981\u522A\u9664\u5B83\u5011\uFF0C\u8ACB\u8A2A\u554F\u73A9\u5BB6\u670D\u52D9\uFF0C\u7136\u5F8C\u9010\u500B\u522A\u9664\u5B83\u5011\u3002","You currently have a subscription, applied thanks to a redemption code, valid until {0} . If you redeem another code, your existing subscription will be canceled and not redeemable anymore!":function(a){return["\u60A8\u76EE\u524D\u6709\u4E00\u500B\u8A02\u95B1\uFF0C\u901A\u904E\u514C\u63DB\u4EE3\u78BC\u61C9\u7528\uFF0C\u6709\u6548\u671F\u81F3 ",a("0")," \u3002\u5982\u679C\u60A8\u514C\u63DB\u53E6\u4E00\u500B\u4EE3\u78BC\uFF0C\u60A8\u73FE\u6709\u7684\u8A02\u95B1\u5C07\u88AB\u53D6\u6D88\u4E26\u4E14\u7121\u6CD5\u518D\u514C\u63DB\uFF01"]},"You currently have a subscription. If you redeem a code, the existing subscription will be cancelled and replaced by the one given by the code.":"\u60A8\u76EE\u524D\u6709\u4E00\u500B\u8A02\u95B1\u3002\u5982\u679C\u60A8\u514C\u63DB\u4EE3\u78BC\uFF0C\u73FE\u6709\u8A02\u95B1\u5C07\u88AB\u53D6\u6D88\u5E76\u7531\u4EE3\u78BC\u63D0\u4F9B\u7684\u8A02\u95B1\u53D6\u4EE3\u3002","You do not have access to project saves with your current subscription plan. Please upgrade your plan to access this feature.":"\u60A8\u5728\u7576\u524D\u8A02\u95B1\u8A08\u756B\u4E0B\u7121\u6CD5\u5B58\u53D6\u5C08\u6848\u5132\u5B58\u3002\u8ACB\u5347\u7D1A\u60A8\u7684\u8A08\u756B\u4EE5\u5B58\u53D6\u6B64\u529F\u80FD\u3002","You do not have permission to access the project save associated with this AI request message.":"\u60A8\u7121\u6B0A\u8A2A\u554F\u8207\u6B64 AI \u8ACB\u6C42\u8A0A\u606F\u76F8\u95DC\u7684\u5C08\u6848\u5132\u5B58\u3002","You don't have a thumbnail":"\u60A8\u6C92\u6709\u7E2E\u7565\u5716","You don't have any Android builds for this game.":"\u60A8\u6C92\u6709\u4EFB\u4F55\u9069\u7528\u4E8E\u6B64\u6E38\u6232\u7684\u5B89\u5353\u7248\u672C\u3002","You don't have any active students. Click on \"Manage seats\" to add students or teachers to your team.":"\u60A8\u6C92\u6709\u4EFB\u4F55\u6D3B\u8E8D\u7684\u5B78\u751F\u3002\u55AE\u64CA\u201C\u7BA1\u7406\u540D\u984D\u201D\u4EE5\u6DFB\u52A0\u5B78\u751F\u6216\u8001\u5E2B\u5230\u60A8\u7684\u5718\u968A\u3002","You don't have any builds for this game.":"\u60A8\u6C92\u6709\u6B64\u6E38\u6232\u7684\u4EFB\u4F55\u69CB\u5EFA\u3002","You don't have any credits available. You can purchase GDevelop credits to continue making AI requests.":"\u60A8\u6C92\u6709\u53EF\u7528\u7684\u7A4D\u5206\u3002\u60A8\u53EF\u4EE5\u8CFC\u8CB7 GDevelop \u7A4D\u5206\u4EE5\u7E7C\u7E8C\u9032\u884C AI \u8ACB\u6C42\u3002","You don't have any desktop builds for this game.":"\u4F60\u6C92\u6709\u6B64\u6E38\u6232\u7684\u4EFB\u4F55\u684C\u9762\u7248\u672C\u3002","You don't have any feedback for this export.":"\u60A8\u5C0D\u6B64\u5C0E\u51FA\u6C92\u6709\u4EFB\u4F55\u53CD\u994B\u3002","You don't have any feedback for this game.":"\u60A8\u5C0D\u6B64\u6E38\u6232\u6C92\u6709\u4EFB\u4F55\u53CD\u994B\u3002","You don't have any iOS builds for this game.":"\u60A8\u6C92\u6709\u6B64\u6E38\u6232\u7684\u4EFB\u4F55 iOS \u7248\u672C\u3002","You don't have any previous chat. Ask the AI your first question!":"\u60A8\u9084\u6C92\u6709\u4EFB\u4F55\u4E4B\u524D\u7684\u804A\u5929\u8A18\u9304\u3002\u5411 AI \u63D0\u51FA\u60A8\u7684\u7B2C\u4E00\u500B\u554F\u984C\u5427\uFF01","You don't have any unread feedback for this export.":"\u60A8\u5C0D\u6B64\u5C0E\u51FA\u6C92\u6709\u4EFB\u4F55\u672A\u8B80\u53CD\u994B\u3002","You don't have any unread feedback for this game.":"\u60A8\u5C0D\u6B64\u6E38\u6232\u6C92\u6709\u4EFB\u4F55\u672A\u8B80\u7684\u53CD\u994B\u3002","You don't have any web builds for this game.":"\u4F60\u6C92\u6709\u6B64\u6E38\u6232\u7684\u4EFB\u4F55web\u7248\u672C\u3002","You don't have enough AI credits to continue this conversation.":"\u60A8\u6C92\u6709\u8DB3\u5920\u7684 AI \u7A4D\u5206\u4F86\u7E7C\u7E8C\u6B64\u5C0D\u8A71\u3002","You don't have enough available seats to restore those accounts.":"\u60A8\u6C92\u6709\u8DB3\u5920\u7684\u53EF\u7528\u540D\u984D\u4F86\u6062\u5FA9\u9019\u4E9B\u5E33\u6236\u3002","You don't have enough rights to add a new admin.":"\u60A8\u6C92\u6709\u8DB3\u5920\u7684\u6B0A\u9650\u6DFB\u52A0\u65B0\u7BA1\u7406\u54E1\u3002","You don't have enough rights to invite a new student.":"\u60A8\u6C92\u6709\u8DB3\u5920\u7684\u6B0A\u9650\u9080\u8ACB\u65B0\u7684\u5B78\u751F\u3002","You don't have enough rights to manage those accounts.":"\u60A8\u6C92\u6709\u8DB3\u5920\u7684\u6B0A\u9650\u4F86\u7BA1\u7406\u9019\u4E9B\u5E33\u6236\u3002","You don't have permissions to add collaborators.":"\u60A8\u6C92\u6709\u6DFB\u52A0\u5408\u4F5C\u8005\u7684\u6B0A\u9650\u3002","You don't have permissions to delete this project.":"\u60A8\u6C92\u6709\u522A\u9664\u6B64\u9805\u76EE\u7684\u6B0A\u9650\u3002","You don't have permissions to save this project. Please choose another location.":"\u60A8\u6C92\u6709\u4FDD\u5B58\u6B64\u9805\u76EE\u7684\u6B0A\u9650\u3002\u8ACB\u9078\u64C7\u5176\u4ED6\u4F4D\u7F6E\u3002","You don't have the rights to access the version history of this project. Are you connected with the right account?":"\u60A8\u6C92\u6709\u6B0A\u9650\u8A2A\u554F\u6B64\u5C08\u6848\u7684\u7248\u672C\u6B77\u53F2\u3002\u60A8\u662F\u5426\u5DF2\u4F7F\u7528\u6B63\u78BA\u7684\u5E33\u6236\u767B\u9304\uFF1F","You don't need to add the @ in your username":"\u60A8\u4E0D\u9700\u8981\u5728\u60A8\u7684\u7528\u6236\u540D\u4E2D\u6DFB\u52A0 @","You don't own any pack yet!":"\u4F60\u9084\u6C92\u6709\u4EFB\u4F55\u5305\uFF01","You don\u2019t have any feedback about your game. Share your game and start collecting player feedback.":"\u60A8\u5C0D\u9019\u500B\u904A\u6232\u6C92\u6709\u4EFB\u4F55\u53CD\u994B\u3002\u5206\u4EAB\u60A8\u7684\u904A\u6232\u4E26\u958B\u59CB\u6536\u96C6\u73A9\u5BB6\u7684\u53CD\u994B\u3002","You have 0 notifications.":"\u60A8\u6709 0 \u689D\u901A\u77E5\u3002","You have <0>{remainingBuilds} build remaining \u2014 you have used {usageRatio} in the past 24h.":function(a){return["\u60A8\u9084\u5269\u4F59 <0>",a("remainingBuilds")," \u500B\u7248\u672C - \u60A8\u5728\u904E\u53BB 24 \u5C0F\u6642\u5167\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} build remaining \u2014 you have used {usageRatio} in the past 30 days.":function(a){return["\u60A8\u9084\u5269\u4F59 <0>",a("remainingBuilds")," \u500B\u7248\u672C - \u60A8\u5728\u904E\u53BB 30 \u5929\u5167\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} builds remaining \u2014 you have used {usageRatio} in the past 24h.":function(a){return["\u60A8\u9084\u5269\u4F59 <0>",a("remainingBuilds")," \u500B\u7248\u672C - \u60A8\u5728\u904E\u53BB 24 \u5C0F\u6642\u5167\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} builds remaining \u2014 you have used {usageRatio} in the past 30 days.":function(a){return["\u60A8\u9084\u5269\u4F59 <0>",a("remainingBuilds")," \u500B\u7248\u672C - \u60A8\u5728\u904E\u53BB 30 \u5929\u5167\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have a build currently running, you can see its progress via the exports button at the bottom of this dialog.":"\u60A8\u7576\u524D\u6B63\u5728\u904B\u884C\u4E00\u500B\u69CB\u5EFA\uFF0C\u60A8\u53EF\u4EE5\u901A\u904E\u6B64\u5C0D\u8A71\u6846\u5E95\u90E8\u7684\u5C0E\u51FA\u6309\u9215\u67E5\u770B\u5176\u9032\u5EA6\u3002","You have an active subscription":"\u60A8\u6709\u4E00\u500B\u6709\u6548\u7684\u8A02\u95B1","You have reached the maximum number of games you can register! You can unregister games in your Games Dashboard.":"\u60A8\u5DF2\u9054\u5230\u53EF\u6CE8\u518A\u6E38\u6232\u7684\u6700\u5927\u6578\u91CF\uFF01\u60A8\u53EF\u4EE5\u5728\u6E38\u6232\u5100\u8868\u677F\u4E2D\u6CE8\u92B7\u6E38\u6232\u3002","You have reached the maximum number of guest collaborators for your subscription. Ask this user to get a Pro subscription!":"\u60A8\u7684\u8A02\u95B1\u5DF2\u9054\u5230\u8A2A\u5BA2\u5408\u4F5C\u8005\u7684\u6700\u5927\u6578\u76EE\u3002\u8ACB\u6B64\u7528\u6236\u7372\u5F97\u5C08\u696D\u8A02\u95B1\uFF01","You have to wait {0} days before you can reactivate an archived account.":function(a){return["\u60A8\u5FC5\u9808\u7B49 ",a("0")," \u5929\u624D\u80FD\u91CD\u65B0\u6FC0\u6D3B\u5DF2\u5B58\u6A94\u7684\u5E33\u6236\u3002"]},"You have unlocked full access to GDevelop to create without limits!":"\u60A8\u5DF2\u89E3\u9396\u5C0D GDevelop \u7684\u5B8C\u5168\u8A2A\u554F\u6B0A\u9650\uFF0C\u53EF\u4EE5\u7121\u9650\u5236\u5730\u9032\u884C\u5275\u4F5C\uFF01","You have unsaved changes in your project.":"\u4F60\u7684\u9805\u76EE\u4E2D\u6709\u672A\u5132\u5B58\u7684\u8B8A\u66F4\u3002","You haven't contributed any examples":"\u60A8\u9084\u6C92\u6709\u8CA2\u737B\u4EFB\u4F55\u793A\u4F8B","You haven't contributed any extensions":"\u60A8\u9084\u6C92\u6709\u8CA2\u737B\u4EFB\u4F55\u64F4\u5C55","You just added an instance to a hidden layer (\"{0}\"). Open the layer panel to make it visible.":function(a){return["\u60A8\u525B\u525B\u5411\u96B1\u85CF\u5C64 (\"",a("0"),"\") \u6DFB\u52A0\u4E86\u4E00\u500B\u5BE6\u4F8B\u3002\u8ACB\u6253\u958B\u5716\u5C64\u9762\u677F\u4F7F\u5176\u53EF\u898B\u3002"]},"You might like":"\u4F60\u53EF\u80FD\u6703\u559C\u6B61","You modified this project on the {formattedDate} at {formattedTime}. Do you want to overwrite your changes?":function(a){return["\u60A8\u65BC ",a("formattedDate")," \u7684 ",a("formattedTime")," \u4FEE\u6539\u4E86\u6B64\u5C08\u6848\u3002\u60A8\u8981\u8986\u84CB\u60A8\u7684\u66F4\u6539\u55CE\uFF1F"]},"You must be connected to use online export services.":"\u60A8\u5FC5\u9808\u9023\u63A5\u624D\u80FD\u4F7F\u7528\u5728\u7DDA\u5C0E\u51FA\u670D\u52D9\u3002","You must be logged in to invite collaborators.":"\u60A8\u5FC5\u9808\u767B\u9304\u624D\u80FD\u9080\u8ACB\u5408\u4F5C\u8005\u3002","You must own a Spine license to publish a game with a Spine object.":"\u60A8\u5FC5\u9808\u64C1\u6709 Spine \u8A31\u53EF\u8B49\u624D\u80FD\u767C\u5E03\u5E36\u6709 Spine \u5C0D\u8C61\u7684\u6E38\u6232\u3002","You must re-open the project to continue this chat.":"\u60A8\u5FC5\u9808\u91CD\u65B0\u6253\u958B\u5C08\u6848\u4EE5\u7E7C\u7E8C\u6B64\u804A\u5929\u3002","You must select a key.":"\u60A8\u5FC5\u9808\u9078\u64C7\u4E00\u500B\u9375\u3002","You must select a valid key. \"{0}\" is not valid.":function(a){return["\u60A8\u5FC5\u9808\u9078\u64C7\u4E00\u500B\u6709\u6548\u7684\u9375\uFF0C \"",a("0"),"\" \u662F\u7121\u6548\u7684\u3002"]},"You must select a valid key. \"{value}\" is not valid.":function(a){return["\u60A8\u5FC5\u9808\u9078\u64C7\u4E00\u500B\u6709\u6548\u7684\u9375\uFF0C \"",a("value"),"\" \u662F\u7121\u6548\u7684\u3002"]},"You must select a valid value. \"{value}\" is not valid.":function(a){return["\u60A8\u5FC5\u9808\u9078\u64C7\u4E00\u500B\u6709\u6548\u7684\u503C\u3002\"",a("value"),"\" \u7121\u6548\u3002"]},"You must select a value.":"\u60A8\u5FC5\u9808\u9078\u64C7\u4E00\u500B\u503C\u3002","You must select at least one user to be the author of the game.":"\u60A8\u5FC5\u9808\u9078\u64C7\u81F3\u5C11\u4E00\u500B\u7528\u6236\u4F5C\u70BA\u904A\u6232\u7684\u4F5C\u8005\u3002","You must select at least one user to be the owner of the game.":"\u60A8\u5FC5\u9808\u9078\u64C7\u81F3\u5C11\u4E00\u500B\u7528\u6236\u4F5C\u70BA\u6E38\u6232\u7684\u6240\u6709\u8005\u3002","You need a Apple Developer account to create a certificate.":"\u60A8\u9700\u8981\u4E00\u500B Apple \u958B\u767C\u8005\u5E33\u6236\u4F86\u5275\u5EFA\u8B49\u66F8\u3002","You need a Apple Developer account to create an API key that will automatically publish your app.":"\u60A8\u9700\u8981\u4E00\u500B Apple \u958B\u767C\u8005\u5E33\u6236\u4F86\u5275\u5EFA\u5C07\u81EA\u52D5\u767C\u5E03\u60A8\u7684\u61C9\u7528\u7A0B\u5E8F\u7684 API \u5BC6\u9470\u3002","You need to cancel your current subscription before joining a team.":"\u60A8\u9700\u8981\u5728\u52A0\u5165\u5718\u968A\u4E4B\u524D\u53D6\u6D88\u7576\u524D\u7684\u8A02\u95B1\u3002","You need to first save your project to the cloud to invite collaborators.":"\u60A8\u9700\u8981\u9996\u5148\u5C07\u60A8\u7684\u9805\u76EE\u4FDD\u5B58\u5230\u4E91\u7AEF\u4F86\u9080\u8ACB\u5408\u4F5C\u8005\u3002","You need to login first to see your builds.":"\u60A8\u9700\u8981\u5148\u767B\u9304\u624D\u80FD\u770B\u5230\u60A8\u7684\u9805\u76EE\u3002","You need to login first to see your game feedbacks.":"\u4F60\u9700\u8981\u5148\u767B\u9304\u624D\u80FD\u770B\u5230\u4F60\u7684\u6E38\u6232\u53CD\u994B\u3002","You need to save this project as a cloud project to install premium assets. Please save your project and try again.":"\u60A8\u9700\u8981\u5C07\u6B64\u9805\u76EE\u4FDD\u5B58\u70BA\u4E91\u9805\u76EE\u4F86\u5B89\u88DD\u6B64\u9AD8\u7D1A\u7D20\u6750\u3002\u8ACB\u4FDD\u5B58\u60A8\u7684\u9805\u76EE\uFF0C\u7136\u540E\u91CD\u8A66\uFF01","You need to save this project as a cloud project to install this asset. Please save your project and try again.":"\u60A8\u9700\u8981\u5C07\u6B64\u9805\u76EE\u4FDD\u5B58\u70BA\u4E91\u9805\u76EE\u4F86\u5B89\u88DD\u6B64\u7D20\u6750\u3002\u8ACB\u4FDD\u5B58\u60A8\u7684\u9805\u76EE\uFF0C\u7136\u540E\u91CD\u8A66\uFF01","You received {0} credits thanks to your subscription":function(a){return["\u7531\u4E8E\u60A8\u7684\u8A02\u95B1\uFF0C\u60A8\u7372\u5F97\u4E86 ",a("0")," \u7A4D\u5206"]},"You should have received an email containing instructions to reset and set a new password. Once it's done, you can use your new password in GDevelop.":"\u60A8\u61C9\u8A72\u6536\u5230\u4E00\u5C01\u5305\u542B\u91CD\u7F6E\u5BC6\u78BC\u7684\u4FE1\u90F5\u4EF6\u3002\u5B8C\u6210\u540E\uFF0C\u60A8\u5C31\u53EF\u4EE5\u5728 GDevelop \u4E2D\u4F7F\u7528\u60A8\u7684\u65B0\u5BC6\u78BC\u4E86\u3002","You still have {availableCredits} credits you can use for AI requests.":function(a){return["\u60A8\u4ECD\u7136\u64C1\u6709 ",a("availableCredits")," \u7A4D\u5206\u53EF\u7528\u65BC AI \u8ACB\u6C42\u3002"]},"You still have {percentage}% left on this month's AI usage.":function(a){return["\u60A8\u672C\u6708\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002"]},"You still have {percentage}% left on this month's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u672C\u6708\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002\u5B83\u5C07\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You still have {percentage}% left on this week's AI usage.":function(a){return["\u60A8\u672C\u9031\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002"]},"You still have {percentage}% left on this week's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u672C\u9031\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002\u5B83\u5C07\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You still have {percentage}% left on today's AI usage.":function(a){return["\u60A8\u4ECA\u5929\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002"]},"You still have {percentage}% left on today's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u4ECA\u5929\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002\u5B83\u5C07\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You will get access to special discounts on the GDevelop asset store, as well as weekly stats about your games.":"\u4F60\u5C07\u7372\u5F97 GDevelopment \u8CC7\u7522\u5546\u5E97\u7684\u7279\u5225\u6298\u6263\uFF0C\u4EE5\u53CA\u95DC\u4E8E\u4F60\u7684\u6E38\u6232\u7684\u6BCF\u5468\u7D71\u8A08\u6578\u64DA\u3002","You will lose all custom collision masks. Do you want to continue?":"\u60A8\u5C07\u4E1F\u5931\u6240\u6709\u81EA\u5B9A\u7FA9\u78B0\u649E\u906E\u7F69\u3002\u662F\u5426\u8981\u7E7C\u7E8C\uFF1F","You will lose any progress made with the external editor. Do you wish to cancel?":"\u60A8\u5C07\u5931\u53BB\u4F7F\u7528\u5916\u90E8\u7DE8\u8F2F\u5668\u53D6\u5F97\u7684\u4EFB\u4F55\u9032\u5C55\u3002\u60A8\u60F3\u53D6\u6D88\u55CE\uFF1F","You won't see it here anymore, unless you re-activate it from the preferences.":"\u60A8\u5C07\u4E0D\u6703\u5728\u9019\u88E1\u770B\u5230\u5B83\uFF0C\u9664\u975E\u60A8\u5F9E\u504F\u597D\u8A2D\u7F6E\u4E2D\u91CD\u65B0\u555F\u7528\u5B83\u3002","You'll convert {0} USD to {1} credits.":function(a){return["\u60A8\u5C07\u628A ",a("0")," \u7F8E\u5143\u514C\u63DB\u70BA ",a("1")," \u7A4D\u5206\u3002"]},"You're about to add 1 asset.":"\u60A8\u5C07\u8981\u6DFB\u52A01\u500B\u8CC7\u7522\u3002","You're about to add {0} assets.":function(a){return["\u60A8\u5C07\u8981\u6DFB\u52A0 ",a("0")," \u500B\u7D20\u6750\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F"]},"You're about to cash out {0} USD.":function(a){return["\u60A8\u5373\u5C07\u63D0\u53D6 ",a("0")," \u7F8E\u5143\u3002"]},"You're about to open (or re-open) a project. Click on \"Open the Project\" to continue.":"\u60A8\u5373\u5C07\u6253\u958B(\u6216\u91CD\u65B0\u6253\u958B)\u4E00\u500B\u9805\u76EE\u3002\u9EDE\u64CA\u201C\u6253\u958B\u9805\u76EE\u201D\u7E7C\u7E8C\u3002","You're about to restart this multichapter guided lesson.":"\u60A8\u5373\u5C07\u91CD\u65B0\u958B\u59CB\u6B64\u591A\u7AE0\u7BC0\u7684\u6307\u5C0E\u8AB2\u7A0B\u3002","You're awesome!":"\u4F60\u592A\u68D2\u4E86\uFF01","You're deleting a game which:{0} - {1} {2} - {3} {4} If you continue, the game and this project will be deleted.{5} This action is irreversible. Do you want to continue?":function(a){return["\u60A8\u6B63\u5728\u522A\u9664\u7684\u662F\u4E00\u500B\u904A\u6232\uFF1A",a("0")," - ",a("1")," ",a("2")," - ",a("3")," ",a("4")," \u5982\u679C\u7E7C\u7E8C\uFF0C\u8A72\u904A\u6232\u548C\u8A72\u9805\u76EE\u5C07\u6703\u88AB\u522A\u9664\u3002",a("5")," \u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002\u60A8\u78BA\u5B9A\u8981\u7E7C\u7E8C\u55CE\uFF1F"]},"You're leaving the game tutorial":"\u4F60\u8981\u96E2\u958B\u6E38\u6232\u6559\u7A0B","You're now logged out":"\u60A8\u73FE\u5728\u5DF2\u9000\u51FA","You're trying to save changes made to a previous version of your project. If you continue, it will be used as the new latest version.":"\u60A8\u6B63\u5728\u5617\u8A66\u4FDD\u5B58\u5C0D\u9805\u76EE\u5148\u524D\u7248\u672C\u6240\u505A\u7684\u66F4\u6539\u3002\u5982\u679C\u7E7C\u7E8C\uFF0C\u5B83\u5C07\u7528\u4F5C\u65B0\u7684\u6700\u65B0\u7248\u672C\u3002","You're {missingCredits} credits short.":function(a){return["\u60A8\u9084\u7F3A ",a("missingCredits")," \u500B\u7A4D\u5206\u3002"]},"You've been invited to join a team by {inviterEmail}":function(a){return["\u60A8\u88AB ",a("inviterEmail")," \u9080\u8ACB\u52A0\u5165\u4E00\u500B\u5718\u968A\u3002"]},"You've made some changes here. Are you sure you want to discard them and open the behavior events?":"\u4F60\u5728\u9019\u91CC\u505A\u4E86\u4E00\u4E9B\u6539\u8B8A\u3002\u60A8\u78BA\u5B9A\u8981\u4E1F\u68C4\u5B83\u5011\u5E76\u6253\u958B\u884C\u70BA\u4E8B\u4EF6\u55CE\uFF1F","You've made some changes here. Are you sure you want to discard them and open the function?":"\u60A8\u5DF2\u7D93\u5728\u9019\u91CC\u9032\u884C\u4E86\u4E00\u4E9B\u4FEE\u6539\u3002\u60A8\u78BA\u5B9A\u8981\u653E\u68C4\u5B83\u5011\u5E76\u6253\u958B\u51FD\u6578\u55CE\uFF1F","You've ran out of GDevelop Credits.":"\u60A8\u5DF2\u7D93\u8017\u76E1\u4E86 GDevelop \u7A4D\u5206\u3002","You've ran out of GDevelop credits to continue this conversation.":"\u60A8\u5DF2\u7D93\u8017\u76E1\u4E86 GDevelop \u7A4D\u5206\u4EE5\u7E7C\u7E8C\u6B64\u5C0D\u8A71\u3002","You've ran out of free AI requests.":"\u60A8\u5DF2\u7D93\u8017\u76E1\u4E86\u514D\u8CBB\u7684 AI \u8ACB\u6C42\u3002","You've reached the limit of cloud projects you can have. Delete some existing cloud projects of yours before trying again.":"\u60A8\u5DF2\u7D93\u9054\u5230\u4E86\u60A8\u53EF\u4EE5\u4F7F\u7528\u7684\u4E91\u7AEF\u9805\u76EE\u7684\u6975\u9650\u3002\u5728\u518D\u6B21\u5617\u8A66\u4E4B\u524D\u5148\u522A\u9664\u4E00\u4E9B\u73FE\u6709\u7684\u4E91\u7AEF\u9805\u76EE\u3002","You've reached your maximum of {0} leaderboards for your game":function(a){return["\u4F60\u7684\u6E38\u6232\u5DF2\u7D93\u9054\u5230 ",a("0")," \u500B\u6392\u884C\u699C\u7684\u4E0A\u9650"]},"You've reached your maximum storage of {maximumCount} cloud projects":function(a){return["\u60A8\u5DF2\u9054\u5230 ",a("maximumCount")," \u96F2\u5C08\u6848\u7684\u6700\u5927\u5B58\u5132\u9650\u5EA6"]},"YouTube channel (tutorials and more)":"YouTube\u983B\u9053 (\u6559\u7A0B\u548C\u66F4\u591A)","Your Discord username":"\u60A8\u7684 Discord \u7528\u6236\u540D","Your account has been deleted!":"\u60A8\u7684\u5E33\u6236\u5DF2\u88AB\u522A\u9664\uFF01","Your account is upgraded, with the extra exports and online services. If you wish to change later, come back to your profile and choose another plan.":"\u60A8\u7684\u5E33\u6236\u5DF2\u5347\u7D1A\uFF0C\u5E36\u6709\u984D\u5916\u7684\u5C0E\u51FA\u548C\u5728\u7DDA\u670D\u52D9\u3002 \u5982\u679C\u60A8\u5E0C\u671B\u7A0D\u540E\u66F4\u6539\uFF0C\u8ACB\u56DE\u5230\u60A8\u7684\u500B\u4EBA\u8CC7\u6599\u5E76\u9078\u64C7\u53E6\u4E00\u500B\u8A08\u5283\u3002","Your browser will now open to enter your payment details.":"\u60A8\u7684\u700F\u89BD\u5668\u73FE\u5728\u5C07\u6253\u958B\u4EE5\u8F38\u5165\u60A8\u7684\u4ED8\u6B3E\u8A73\u7D30\u4FE1\u606F\u3002","Your computer":"\u60A8\u7684\u96FB\u8166","Your current subscription plan allows restoring versions from the last {historyRetentionDays} days.<0/>Get a higher plan to access older versions.":function(a){return["\u60A8\u7576\u524D\u7684\u8A02\u95B1\u8A08\u5283\u5141\u8A31\u5F9E\u904E\u53BB ",a("historyRetentionDays")," \u5929\u5167\u6062\u5FA9\u7248\u672C\u3002<0/>\u8ACB\u5347\u7D1A\u5230\u66F4\u9AD8\u7684\u8A08\u5283\u4EE5\u8A2A\u554F\u820A\u7248\u3002"]},"Your feedback is valuable to help us improve our premium services. Why are you canceling your subscription?":"\u60A8\u7684\u53CD\u994B\u5C0D\u4E8E\u5E6B\u52A9\u6211\u5011\u6539\u9032\u512A\u8CEA\u670D\u52D9\u975E\u5E38\u6709\u50F9\u503C\u3002\u70BA\u4EC0\u4E48\u8981\u53D6\u6D88\u8A02\u95B1\uFF1F","Your forum account with email {email} will reflect your subscription level. You can press the sync button to update it immediately.":function(a){return["\u60A8\u7684\u8AD6\u58C7\u5E33\u865F\uFF08\u96FB\u5B50\u90F5\u4EF6 ",a("email"),"\uFF09\u5C07\u53CD\u6620\u60A8\u7684\u8A02\u95B1\u7D1A\u5225\u3002\u60A8\u53EF\u4EE5\u6309\u4E0B\u540C\u6B65\u6309\u9215\u7ACB\u5373\u66F4\u65B0\u3002"]},"Your free trial will expire in {0} hours.":function(a){return["\u60A8\u7684\u514D\u8CBB\u8A66\u7528\u671F\u5C07\u5728 ",a("0")," \u5C0F\u6642\u5167\u5230\u671F\u3002"]},"Your game has some invalid elements, please fix these before continuing:":"\u60A8\u7684\u6E38\u6232\u6709\u4E00\u4E9B\u7121\u6548\u5143\u7D20\uFF0C\u8ACB\u5728\u7E7C\u7E8C\u4E4B\u524D\u4FEE\u5FA9\u9019\u4E9B\u5143\u7D20\uFF1A","Your game is hidden on gd.games":"\u60A8\u7684\u904A\u6232\u5728 gd.games \u4E0A\u88AB\u96B1\u85CF","Your game is in the \u201CBuild\u201D section or you can restart the tutorial.":"\u4F60\u7684\u904A\u6232\u5728\u300C\u5EFA\u7F6E\u300D\u90E8\u5206\uFF0C\u6216\u8005\u4F60\u53EF\u4EE5\u91CD\u65B0\u958B\u59CB\u6559\u7A0B\u3002","Your game is not published on gd.games":"\u60A8\u7684\u904A\u6232\u5C1A\u672A\u5728 gd.games \u4E0A\u767C\u5E03","Your game may not be registered, create one in the leaderboard manager.":"\u60A8\u7684\u904A\u6232\u53EF\u80FD\u5C1A\u672A\u8A3B\u518A\uFF0C\u8ACB\u5728\u6392\u884C\u699C\u7BA1\u7406\u5668\u4E2D\u5275\u5EFA\u4E00\u500B\u3002","Your game will be exported and packaged online as a stand-alone game for Windows, Linux and/or macOS.":"\u60A8\u7684\u6E38\u6232\u5C07\u88AB\u5C0E\u51FA\u548C\u6253\u5305\uFF0C\u4F5C\u70BAWindows\u3001Linux\u548C/\u6216macOS\u7684\u7368\u7ACB\u6E38\u6232\u3002","Your game won't work if you open the index.html file on your computer. You must upload it to a web hosting platform (Itch.io, Poki, CrazyGames etc...) or a web server to run it.":"\u5982\u679C\u60A8\u5728\u8A08\u7B97\u6A5F\u4E0A\u6253\u958B index.html \u6587\u4EF6\uFF0C\u60A8\u7684\u6E38\u6232\u5C07\u7121\u6CD5\u904B\u884C\u3002\u60A8\u5FC5\u9808\u5C07\u5176\u4E0A\u50B3\u5230\u7DB2\u7D61\u6258\u7BA1\u5E73\u81FA (Itch.io\u3001Poki\u3001CrazyGames \u7B49) \u6216\u7DB2\u7D61\u670D\u52D9\u5668\u624D\u80FD\u904B\u884C\u5B83\u3002","Your game {0} received a feedback message: \"{1}...\"":function(a){return["\u60A8\u7684\u6E38\u6232 ",a("0")," \u6536\u5230\u4E00\u689D\u53CD\u994B\u6D88\u606F\uFF1A\u201C",a("1"),"...\u201D"]},"Your game {0} received {1} feedback messages":function(a){return["\u60A8\u7684\u6E38\u6232 ",a("0")," \u6536\u5230\u4E86 ",a("1")," \u689D\u53CD\u994B\u6D88\u606F"]},"Your game {0} was played more than {1} times!":function(a){return["\u60A8\u7684\u6E38\u6232 ",a("0")," \u5DF2\u73A9\u8D85\u904E ",a("1")," \u6B21\uFF01"]},"Your latest changes could not be applied to the preview(s) being run. You should start a new preview instead to make sure that all your changes are reflected in the game.":"\u60A8\u7684\u6700\u65B0\u66F4\u6539\u7121\u6CD5\u61C9\u7528\u4E8E\u6B63\u5728\u904B\u884C\u7684\u9810\u89BD\u3002 \u60A8\u61C9\u8A72\u958B\u59CB\u4E00\u500B\u65B0\u7684\u9810\u89BD\uFF0C\u4EE5\u78BA\u4FDD\u60A8\u7684\u6240\u6709\u66F4\u6539\u90FD\u5DF2\u7D93\u53CD\u6620\u5728\u6E38\u6232\u4E2D\u3002","Your membership helps the GDevelop company maintain servers, build new features and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"\u60A8\u7684\u6703\u54E1\u5E6B\u52A9 GDevelop \u516C\u53F8\u7DAD\u8B77\u4F3A\u670D\u5668\u3001\u69CB\u5EFA\u65B0\u529F\u80FD\u4E26\u4FDD\u6301\u958B\u6E90\u9805\u76EE\u7684\u7E41\u69AE\u3002\u6211\u5011\u7684\u76EE\u6A19\uFF1A\u8B93\u904A\u6232\u958B\u767C\u5FEB\u901F\u3001\u6709\u8DA3\u4E14\u6613\u65BC\u6240\u6709\u4EBA\u4F7F\u7528\u3002","Your name":"\u60A8\u7684\u540D\u5B57\uFF1A","Your need to first create your account, or login, to upload your own resources.":"\u60A8\u9700\u8981\u9996\u5148\u5275\u5EFA\u60A8\u7684\u5E33\u6236\u6216\u767B\u9304\uFF0C\u4EE5\u4E0A\u50B3\u60A8\u81EA\u5DF1\u7684\u8CC7\u6E90\u3002","Your need to first save your game on GDevelop Cloud to upload your own resources.":"\u60A8\u9700\u8981\u5148\u5C07\u6E38\u6232\u4FDD\u5B58\u5728 GDevelop Cloud \u4E0A\u624D\u80FD\u4E0A\u50B3\u60A8\u81EA\u5DF1\u7684\u8CC7\u6E90\u3002","Your new plan is now activated.":"\u60A8\u7684\u65B0\u8A08\u5283\u5DF2\u88AB\u6FC0\u6D3B\u3002","Your password must be between 8 and 30 characters long.":"\u60A8\u7684\u5BC6\u78BC\u5FC5\u9808\u5728 8 \u5230 30 \u500B\u5B57\u7B26\u4E4B\u9593\u3002","Your plan:":"\u60A8\u7684\u8A08\u5283\uFF1A","Your preview is ready! On your mobile or tablet, open your browser and enter in the address bar:":"\u9810\u89BD\u8F38\u51FA\u5B8C\u6210\uFF01\u5728\u5176\u4ED6\u8A2D\u5099\u7684\u700F\u89BD\u5668\u4E0A\u8F38\u5165\u4EE5\u4E0B\u7DB2\u5740\uFF1A","Your project has {0} diagnostic error(s). Please fix them before exporting.":function(a){return["\u60A8\u7684\u5C08\u6848\u6709 ",a("0")," \u500B\u8A3A\u65B7\u932F\u8AA4\u3002\u8ACB\u5728\u5C0E\u51FA\u4E4B\u524D\u4FEE\u6B63\u5B83\u5011\u3002"]},"Your project has {0} diagnostic error(s). Please fix them before launching a preview.":function(a){return["\u60A8\u7684\u5C08\u6848\u6709 ",a("0")," \u500B\u8A3A\u65B7\u932F\u8AA4\u3002\u8ACB\u5728\u555F\u52D5\u9810\u89BD\u4E4B\u524D\u4FEE\u6B63\u5B83\u5011\u3002"]},"Your project is saved in the same folder as the application. This folder will be deleted when the application is updated. Please choose another location if you don't want to lose your project.":"\u9805\u76EE\u4FDD\u5B58\u5728\u8207\u61C9\u7528\u7A0B\u5E8F\u76F8\u540C\u7684\u6587\u4EF6\u593E\u4E2D\u3002\u66F4\u65B0\u61C9\u7528\u7A0B\u5E8F\u6642\u5C07\u522A\u9664\u6B64\u6587\u4EF6\u593E\u3002\u5982\u679C\u60A8\u4E0D\u60F3\u5931\u53BB\u60A8\u7684\u9805\u76EE\uFF0C\u8ACB\u9078\u64C7\u5176\u4ED6\u4F4D\u7F6E\u3002","Your project name has changed, this will also save the whole project, continue?":"\u60A8\u7684\u9805\u76EE\u540D\u7A31\u5DF2\u66F4\u6539\uFF0C\u9019\u4E5F\u5C07\u4FDD\u5B58\u6574\u500B\u9805\u76EE\uFF0C\u662F\u5426\u7E7C\u7E8C\uFF1F","Your purchase has been processed!":"\u60A8\u7684\u8CFC\u8CB7\u5DF2\u8655\u7406\u5B8C\u7562\uFF01","Your search and filters did not return any result.":"\u60A8\u7684\u641C\u7D22\u548C\u904E\u6FFE\u5668\u672A\u8FD4\u56DE\u4EFB\u4F55\u7D50\u679C\u3002","Your search and filters did not return any result.<0/>If you need support for a specific language, please contact us.":"\u60A8\u7684\u641C\u7D22\u548C\u904E\u6FFE\u5668\u672A\u8FD4\u56DE\u4EFB\u4F55\u7D50\u679C\u3002<0/>\u5982\u679C\u60A8\u9700\u8981\u7279\u5B9A\u8A9E\u8A00\u7684\u652F\u63F4\uFF0C\u8ACB\u806F\u7E6B\u6211\u5011\u3002","Your subscription has been canceled":"\u60A8\u7684\u8A02\u95B1\u5DF2\u88AB\u53D6\u6D88","Your subscription is set to be cancelled at the end of the current billing period. You will retain access to the plan benefits until then.":"\u60A8\u7684\u8A02\u95B1\u65BC\u7576\u524D\u8A08\u8CBB\u9031\u671F\u7D50\u675F\u6642\u5C07\u88AB\u53D6\u6D88\u3002\u5728\u6B64\u4E4B\u524D\uFF0C\u60A8\u4ECD\u53EF\u4EAB\u53D7\u8A08\u5283\u7684\u6240\u6709\u798F\u5229\u3002","Your team does not have enough seats for a new admin.":"\u60A8\u7684\u5718\u968A\u6C92\u6709\u8DB3\u5920\u7684\u540D\u984D\u4F86\u5BB9\u7D0D\u65B0\u7BA1\u7406\u54E1\u3002","Your team does not have enough seats for a new student.":"\u60A8\u7684\u5718\u968A\u6C92\u6709\u8DB3\u5920\u7684\u540D\u984D\u70BA\u65B0\u7684\u5B78\u751F\u3002","Your {productType} has been activated!":function(a){return["\u60A8\u7684 ",a("productType")," \u5DF2\u88AB\u555F\u7528\uFF01"]},"You\u2019re about to permanently delete your GDevelop account username@mail.com. You will no longer be able to log into the app with this email address.":"\u4F60\u5C07\u8981\u6C38\u4E45\u522A\u9664\u4F60\u7684GDevelop\u5E33\u6236 username@mail.com.\u60A8\u5C07\u7121\u6CD5\u518D\u4F7F\u7528\u6B64\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u767B\u9304\u61C9\u7528\u7A0B\u5E8F\u3002","You\u2019ve reached the maximum amount of available seats. Increase the number of seats on your subscription to invite more students and collaborators.":"\u60A8\u5DF2\u9054\u5230\u53EF\u7528\u540D\u984D\u7684\u6700\u5927\u6578\u91CF\u3002\u8ACB\u589E\u52A0\u60A8\u8A02\u95B1\u7684\u540D\u984D\u4EE5\u9080\u8ACB\u66F4\u591A\u5B78\u751F\u548C\u5408\u4F5C\u8005\u3002","Z":"Z \u8EF8","Z Order":"Z\u8EF8\uFF08\u524D\u540E\u95DC\u7CFB\uFF09","Z Order of objects created from events":"\u5F9E\u4E8B\u4EF6\u5275\u5EFA\u5C0D\u8C61\u7684Z \u9806\u5E8F","Z max":"Z \u6700\u5927","Z max bound":"Z \u6700\u5927\u908A\u754C","Z max bound should be greater than Z min bound":"Z \u6700\u5927\u908A\u754C\u61C9\u5927\u65BC Z \u6700\u5C0F\u908A\u754C","Z min":"Z \u6700\u5C0F","Z min bound":"Z \u6700\u5C0F\u908A\u754C","Z min bound should be smaller than Z max bound":"Z \u6700\u5C0F\u908A\u754C\u61C9\u5C0F\u65BC Z \u6700\u5927\u908A\u754C","Z offset (in pixels)":"Z \u504F\u79FB (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Zoom In":"\u653E\u5927","Zoom Out":"\u7E2E\u5C0F","Zoom in":"\u653E\u5927","Zoom in (you can also use Ctrl + Mouse wheel)":"\u653E\u5927 (\u60A8\u4E5F\u53EF\u4EE5\u4F7F\u7528 Ctrl + \u9F20\u6A19\u6EFE\u8F2A)","Zoom out":"\u7E2E\u5C0F","Zoom out (you can also use Ctrl + Mouse wheel)":"\u7E2E\u5C0F (\u60A8\u4E5F\u53EF\u4EE5\u4F7F\u7528 Ctrl + \u9F20\u6A19\u6EFE\u8F2A)","Zoom to fit content":"\u7E2E\u653E\u4EE5\u9069\u61C9\u5167\u5BB9","Zoom to fit selection":"\u7E2E\u653E\u4EE5\u9069\u5408\u9078\u64C7","Zoom to initial position":"\u7E2E\u653E\u5230\u521D\u59CB\u4F4D\u7F6E","[Follow GDevelop](https://tiktok.com/@gdevelop) and enter your TikTok username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u95DC\u6CE8 GDevelop](https://tiktok.com/@gdevelop) \u5E76\u5728\u6B64\u8655\u8F38\u5165\u60A8\u7684 TikTok \u7528\u6236\u540D\u5373\u53EF\u7372\u5F97 ",a("rewardValueInCredits")," \u514D\u8CBB\u7A4D\u5206\u4EE5\u793A\u611F\u8B1D\uFF01"]},"[Follow GDevelop](https://twitter.com/GDevelopApp) and enter your Twitter username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u95DC\u6CE8 GDevelop](https://twitter.com/GDevelopApp) \u5E76\u5728\u6B64\u8655\u8F38\u5165\u60A8\u7684 Twitter \u7528\u6236\u540D\u5373\u53EF\u7372\u5F97 ",a("rewardValueInCredits")," \u514D\u8CBB\u7A4D\u5206\u4EE5\u793A\u611F\u8B1D\uFF01"]},"[Star the GDevelop repository](https://github.com/4ian/GDevelop) and add your GitHub username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u70BA GDevelop \u5B58\u5132\u5EAB\u52A0\u6CE8\u661F\u6A19](https://github.com/4ian/GDevelop) \u5E76\u5728\u6B64\u8655\u6DFB\u52A0\u60A8\u7684 GitHub \u7528\u6236\u540D\uFF0C\u4EE5\u7372\u5F97 ",a("rewardValueInCredits")," \u514D\u8CBB\u7A4D\u5206\u4F5C\u70BA\u611F\u8B1D\uFF01"]},"[Subscribe to GDevelop](https://youtube.com/@gdevelopapp) and enter your YouTube username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u8A02\u95B1 GDevelop](https://youtube.com/@gdevelopapp) \u4E26\u5728\u6B64\u8F38\u5165\u60A8\u7684 YouTube \u7528\u6236\u540D\uFF0C\u5373\u53EF\u7372\u5F97 ",a("rewardValueInCredits")," \u514D\u8CBB\u7A4D\u5206\u4EE5\u793A\u611F\u8B1D\uFF01"]},"a permanent":"\u6C38\u4E45\u7684","add":"\u6DFB\u52A0","an instant":"\u77AC\u9593","ascending":"\u5347\u5E8F","audios":"\u97F3\u983B","bitmap fonts":"\u4F4D\u5716\u5B57\u9AD4","by":"\u901A\u904E","contains":"\u5305\u542B","date,date":"date,date","date,date,date0":"\u65E5\u671F,\u65E5\u671F,\u65E5\u671F0","day,date,date0":"\u65E5,\u65E5\u671F,\u65E5\u671F0","delete":"\u522A\u9664","descending":"\u964D\u5E8F","divide by":"\u9664\u4EE5","ends with":"\u7D50\u5C3E\u70BA","false":"\u5047","fonts":"\u5B57\u9AD4","gd.games":"gd.games","iOS":"iOS","iOS & Android (manual)":"iOS & Android (\u624B\u518A)","iOS (iPhone and iPad) icons":"iOS (iPhone \u548C iPad) \u5716\u6A19","iOS Build":"iOS \u69CB\u5EFA","iOS builds":"iOS \u69CB\u5EFA","in {elementsWithWords}":function(a){return["\u5728 ",a("elementsWithWords")]},"leaderboard.":"\u6392\u884C\u699C\u3002","leaderboards.":"\u6392\u884C\u699C\u3002","limit:":"\u9650\u5236\uFF1A","macOS (zip file)":"macOS (zip \u6587\u4EF6)","macOS (zip)":"macOS\uFF08zip\uFF09","min":"min","minutes":"\u5206","multiply by":"\u4E58","no":"\u5426","no limit":"\u7121\u9650\u5236","or":"\u6216\u8005","order by distance to another object":"\u6309\u8207\u53E6\u4E00\u500B\u7269\u9AD4\u7684\u8DDD\u96E2\u6392\u5E8F","order by highest ammo":"\u6309\u6700\u9AD8\u5F48\u85E5\u6392\u5E8F","order by highest health":"\u6309\u6700\u9AD8\u751F\u547D\u503C\u6392\u5E8F","order by highest variable":"\u6309\u6700\u9AD8\u8B8A\u6578\u6392\u5E8F","order by physics speed":"\u6309\u7269\u7406\u901F\u5EA6\u6392\u5E8F","ordered by":"\u6309\u6392\u5E8F","panel sprites":"\u9762\u677F\u7CBE\u9748","particle emitters":"\u7C92\u5B50\u767C\u5C04\u5668","redemptionCodeExpirationDate,date":"redemptionCodeExpirationDate,date","scene center":"\u5834\u666F\u4E2D\u5FC3","set to":"\u8A2D\u7F6E\u70BA","set to false":"\u8A2D\u7F6E\u70BA false","set to true":"\u8A2D\u7F6E\u70BA true","sprites":"\u7CBE\u9748","starts with":"\u958B\u982D\u70BA","subtract":"\u6E1B\u53BB","the events sheet":"\u4E8B\u4EF6\u8868","the home page":"\u4E3B\u9801","the scene editor":"\u5834\u666F\u7DE8\u8F2F\u5668","tile maps":"\u74E6\u7247\u5730\u5716","tiled sprites":"\u74E6\u584A\u7CBE\u9748","toggle":"\u5207\u63DB","true":"\u662F","username":"\u7528\u6236\u540D","yes":"\u662F","{0}":function(a){return[a("0")]},"{0} % of players with more than {1} minutes":function(a){return[a("0")," %\u7684\u73A9\u5BB6\u8D85\u904E ",a("1")," \u5206\u9418"]},"{0} (default)":function(a){return[a("0")," (\u9ED8\u8A8D)"]},"{0} ({1})":function(a){return[a("0")," (",a("1"),")"]},"{0} Asset pack":function(a){return[a("0")," \u8CC7\u7522\u5305"]},"{0} Asset packs":function(a){return[a("0")," \u8CC7\u7522\u5305"]},"{0} Assets":function(a){return[a("0")," \u8CC7\u7522"]},"{0} Course":function(a){return[a("0")," \u8AB2\u7A0B"]},"{0} Courses":function(a){return[a("0")," \u8AB2\u7A0B"]},"{0} Game template":function(a){return[a("0")," \u904A\u6232\u6A21\u677F"]},"{0} Game templates":function(a){return[a("0")," \u904A\u6232\u6A21\u677F"]},"{0} OFF":function(a){return[a("0")," OFF"]},"{0} builds":function(a){return[a("0")," \u7248\u672C"]},"{0} chapters":function(a){return[a("0")," \u7AE0\u7BC0"]},"{0} children":function(a){return[a("0")," \u500B\u5B50\u9805"]},"{0} credits":function(a){return[a("0")," \u500B\u7A4D\u5206"]},"{0} credits available":function(a){return[a("0")," \u9EDE\u6578\u53EF\u7528"]},"{0} exports created":function(a){return["\u5DF2\u5275\u5EFA ",a("0")," \u500B\u5C0E\u51FA"]},"{0} exports ongoing...":function(a){return[a("0")," \u500B\u5C0E\u51FA\u6B63\u5728\u9032\u884C\u4E2D\u2026\u2026"]},"{0} hours of material":function(a){return[a("0")," \u5C0F\u6642\u7684\u5167\u5BB9"]},"{0} invited you to join a team.":function(a){return[a("0")," \u9080\u8ACB\u60A8\u52A0\u5165\u4E00\u500B\u5718\u968A\u3002"]},"{0} is included in the bundle {1}.":function(a){return[a("0")," \u5305\u542B\u5728\u6346\u7D81\u5305 ",a("1")," \u4E2D\u3002"]},"{0} is included in this bundle for {1} !":function(a){return[a("0")," \u5305\u542B\u5728\u6B64\u6346\u7D81\u5305\u4E2D\uFF0C\u50F9\u683C\u70BA ",a("1")," !"]},"{0} minutes per player":function(a){return["\u6BCF\u4F4D\u73A9\u5BB6",a("0")," \u5206\u9418"]},"{0} new feedbacks":function(a){return[a("0")," \u500B\u65B0\u53CD\u994B"]},"{0} of {1} completed":function(a){return[a("0")," \u7684 ",a("1")," \u5DF2\u5B8C\u6210"]},"{0} of {1} subscription":function(a){return[a("0")," \u7684 ",a("1")," \u8A02\u95B1"]},"{0} options":function(a){return[a("0")," \u9078\u9805"]},"{0} part":function(a){return[a("0")," \u90E8\u5206"]},"{0} players with more than {1} minutes":function(a){return[a("0")," \u73A9\u5BB6\u8D85\u904E ",a("1")," \u5206\u9418"]},"{0} projects":function(a){return[a("0")," \u9805\u76EE"]},"{0} properties":function(a){return[a("0")," \u5C6C\u6027"]},"{0} reviews":function(a){return[a("0")," \u8A55\u8AD6"]},"{0} sessions":function(a){return[a("0")," \u500B\u6703\u8A71"]},"{0} subscription":function(a){return[a("0")," \u8A02\u95B1"]},"{0} use left":function(a){return["\u5269\u9918 ",a("0")," \u6B21\u4F7F\u7528"]},"{0} uses left":function(a){return["\u5269\u9918 ",a("0")," \u6B21\u4F7F\u7528"]},"{0} variables":function(a){return[a("0")," \u500B\u8B8A\u91CF"]},"{0} weeks":function(a){return[a("0")," \u9031"]},"{0} will be added to your account {1}.":function(a){return[a("0")," \u5C07\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236 ",a("1"),"\u3002"]},"{0}% bounce rate":function(a){return[a("0"),"% \u8DF3\u51FA\u7387"]},"{0}'s projects":function(a){return[a("0")," \u7684\u9805\u76EE"]},"{0}+ (Available with a subscription)":function(a){return[a("0"),"+ (\u53EF\u901A\u904E\u8A02\u95B1\u7372\u5F97)"]},"{0}/{1} achievements":function(a){return[a("0"),"/",a("1")," \u6210\u5C31"]},"{0}Are you sure you want to remove this extension? This can't be undone.":function(a){return[a("0"),"\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u64F4\u5C55\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002"]},"{daysAgo} days ago":function(a){return[a("daysAgo")," \u5929\u524D"]},"{durationInDays} days":function(a){return[a("durationInDays")," \u5929"]},"{durationInMinutes} min.":function(a){return[a("durationInMinutes")," \u5206\u9418\u3002"]},"{durationInMinutes} minutes":function(a){return[a("durationInMinutes")," \u5206\u9418"]},"{email} has already accepted the invitation and joined the team.":function(a){return[a("email")," \u5DF2\u7D93\u63A5\u53D7\u4E86\u9080\u8ACB\u4E26\u52A0\u5165\u4E86\u5718\u968A\u3002"]},"{email} will be removed from the team.":function(a){return[a("email")," \u5C07\u88AB\u79FB\u9664\u51FA\u5718\u968A\u3002"]},"{fullName} ({username})":function(a){return[a("fullName")," (",a("username"),")"]},"{functionNode} action from {extensionNode} extension is missing.":function(a){return["\u4F86\u81EA ",a("functionNode")," \u64F4\u5C55\u7684 ",a("extensionNode")," \u64CD\u4F5C\u4E1F\u5931\u3002"]},"{functionNode} action on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return[a("functionNode")," \u5C0D ",a("extensionNode")," \u64F4\u5C55\u7684 ",a("behaviorNode")," \u884C\u70BA\u64CD\u4F5C\u4E1F\u5931\u3002"]},"{functionNode} condition from {extensionNode} extension is missing.":function(a){return["\u4F86\u81EA ",a("extensionNode")," \u64F4\u5C55\u7684 ",a("functionNode")," \u689D\u4EF6\u7F3A\u5931\u3002"]},"{functionNode} condition on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return["\u5728 ",a("functionNode")," \u884C\u70BA ",a("behaviorNode")," \u4E0A\u7F3A\u5C11\u4F86\u81EA ",a("extensionNode")," \u64F4\u5C55\u7684\u689D\u4EF6\u3002"]},"{gameCount} of your games were played more than {0} times in total!":function(a){return["\u60A8\u7684 ",a("gameCount")," \u500B\u6E38\u6232\u7E3D\u5171\u73A9\u4E86\u8D85\u904E ",a("0")," \u6B21\uFF01"]},"{hoursAgo} hours ago":function(a){return[a("hoursAgo")," \u5C0F\u6642\u524D"]},"{includedCreditsAmount} credits":function(a){return[a("includedCreditsAmount")," \u7A4D\u5206"]},"{minutesAgo} minutes ago":function(a){return[a("minutesAgo")," \u5206\u9418\u524D"]},"{numberOfAssetPacks} Asset Pack":function(a){return[a("numberOfAssetPacks")," \u8CC7\u6E90\u5305"]},"{numberOfAssetPacks} Asset Packs":function(a){return[a("numberOfAssetPacks")," \u8CC7\u6E90\u5305"]},"{numberOfCourses} Course":function(a){return[a("numberOfCourses")," \u8AB2\u7A0B"]},"{numberOfCourses} Courses":function(a){return[a("numberOfCourses")," \u8AB2\u7A0B"]},"{numberOfGameTemplates} Game Template":function(a){return[a("numberOfGameTemplates")," \u904A\u6232\u6A21\u677F"]},"{numberOfGameTemplates} Game Templates":function(a){return[a("numberOfGameTemplates")," \u904A\u6232\u6A21\u677F"]},"{objectName} variables":function(a){return[a("objectName")," \u8B8A\u6578"]},"{percentage}% left":function(a){return[a("percentage"),"% \u5269\u9918"]},"{periodLabel}, <0>{0} <1>{1}":function(a){return[a("periodLabel"),"\uFF0C<0>",a("0")," <1>",a("1"),""]},"{periodLabel}, <0>{0} <1>{1} per seat":function(a){return[a("periodLabel"),"\uFF0C<0>",a("0")," <1>",a("1")," \u6BCF\u500B\u5EA7\u4F4D"]},"{periodLabel}, {0}":function(a){return[a("periodLabel"),"\uFF0C",a("0")]},"{periodLabel}, {0} per seat":function(a){return[a("periodLabel"),"\uFF0C",a("0")," \u6BCF\u500B\u5EA7\u4F4D"]},"{planCreditsAmount} credits":function(a){return[a("planCreditsAmount")," \u7A4D\u5206"]},"{price} every {0} months":function(a){return["\u6BCF ",a("0")," \u6708 ",a("price")]},"{price} every {0} weeks":function(a){return["\u6BCF ",a("0")," \u5468 ",a("price")]},"{price} every {0} years":function(a){return["\u6BCF ",a("0")," \u5E74 ",a("price")]},"{price} per month":function(a){return["\u6BCF\u6708 ",a("price")]},"{price} per seat, each month":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u6708"]},"{price} per seat, each week":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u5468"]},"{price} per seat, each year":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u5E74"]},"{price} per seat, every {0} months":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u6708"]},"{price} per seat, every {0} weeks":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u5468"]},"{price} per seat, every {0} years":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u5E74"]},"{price} per week":function(a){return["\u6BCF\u5468 ",a("price")]},"{price} per year":function(a){return["\u6BCF\u5E74 ",a("price")]},"{resultsCount} results":function(a){return[a("resultsCount")," \u500B\u7D50\u679C"]},"{roundedMonths} months":function(a){return[a("roundedMonths")," \u500B\u6708"]},"{smartObjectsCount} smart objects":function(a){return[a("smartObjectsCount")," \u500B\u667A\u80FD\u5C0D\u8C61"]},"{totalCredits} Credits":function(a){return[a("totalCredits")," \u7A4D\u5206"]},"{totalMatches} matches":function(a){return[a("totalMatches")," \u500B\u5339\u914D\u9805"]},"~{0} minutes.":function(a){return["\u5728 ",a("0")," \u5206\u9418\u5167."]},"\u201CPlayer feedback\u201D is off, turn it on to start collecting feedback on your game.":"\u201C\u73A9\u5BB6\u53CD\u994B\u201D\u5DF2\u95DC\u9589\uFF0C\u8ACB\u958B\u555F\u4EE5\u958B\u59CB\u6536\u96C6\u6709\u95DC\u60A8\u7684\u904A\u6232\u7684\u53CD\u994B\u3002","\u201CStart\u201D screen":"\u201C\u958B\u59CB\u201D\u5C4F\u5E55","\u201CYou win\u201D message":"\u201C\u4F60\u8D0F\u4E86\u201D\u7684\u4FE1\u606F","\u2260 (not equal to)":"\u2260 (\u4E0D\u7B49\u4E8E)","\u2264 (less or equal to)":"\u2264 (\u5C0F\u4E8E\u6216\u7B49\u4E8E)","\u2265 (greater or equal to)":"\u2265 (\u5927\u4E8E\u6216\u7B49\u4E8E)","\u274C Game configuration could not be saved, please try again later.":"\u9805\u76EE\u7121\u6CD5\u4FDD\u5B58\u3002\u8ACB\u7A0D\u5F8C\u518D\u8A66\u3002","\uD83C\uDF89 Congrats on getting the {translatedName} featuring for your game {0}!":function(a){return["\uD83C\uDF89 \u606D\u559C\u60A8\u7684\u6E38\u6232 ",a("0")," \u7372\u5F97\u4E86 ",a("translatedName")," \u7CBE\u9078\uFF01"]},"\uD83C\uDF89 You can now follow your new course!":"\uD83C\uDF89 \u60A8\u73FE\u5728\u53EF\u4EE5\u8DDF\u96A8\u60A8\u7684\u65B0\u8AB2\u7A0B\uFF01","\uD83C\uDF89 You can now use your assets!":"\uD83C\uDF89 \u60A8\u73FE\u5728\u53EF\u4EE5\u4F7F\u7528\u60A8\u7684\u8CC7\u7522\u4E86\uFF01","\uD83C\uDF89 You can now use your credits!":"\uD83C\uDF89 \u60A8\u73FE\u5728\u53EF\u4EE5\u4F7F\u7528\u60A8\u7684\u7A4D\u5206\u4E86\uFF01","\uD83C\uDF89 You can now use your template!":"\uD83C\uDF89 \u60A8\u73FE\u5728\u53EF\u4EE5\u4F7F\u7528\u60A8\u7684\u6A21\u677F\u4E86\uFF01","\uD83C\uDF89 Your request has been saved. Lay back, we'll contact you shortly.":"\uD83C\uDF89 \u60A8\u7684\u8ACB\u6C42\u5DF2\u4FDD\u5B58\u3002\u8ACB\u7A0D\u5019\uFF0C\u6211\u5011\u5C07\u5118\u5FEB\u8207\u60A8\u806F\u7E6B\u3002","\uD83D\uDC4B Good to see you {username}!":function(a){return["\uD83D\uDC4B \u5F88\u9AD8\u8208\u770B\u5230\u4F60 ",a("username"),"\uFF01"]},"\uD83D\uDC4B Good to see you!":"\uD83D\uDC4B \u5F88\u9AD8\u8208\u770B\u5230\u4F60 \uFF01","\uD83D\uDC4B Welcome to GDevelop {username}!":function(a){return["\uD83D\uDC4B \u6B61\u8FCE\u4F7F\u7528 GDevelop ",a("username"),"\uFF01"]},"\uD83D\uDC4B Welcome to GDevelop!":"\uD83D\uDC4B \u6B61\u8FCE\u4F7F\u7528 GDevelop \uFF01","Change the width of an object.":"\u6539\u8B8A\u7269\u4EF6\u5BEC\u5EA6","the width":"\u5BEC\u5EA6","Change the height of an object.":"\u8B8A\u66F4\u76EE\u6A19\u9AD8\u5EA6","the height":"\u9AD8\u5EA6","Scale":"\u7E2E\u653E","Modify the scale of the specified object.":"\u8B8A\u66F4\u6307\u5B9A\u76EE\u6A19\u6BD4\u4F8B","the scale":"\u7E2E\u653E\u6BD4\u4F8B","Scale on X axis":"\u5728X\u8EF8\u4E0A\u7684\u7E2E\u653E","the width's scale of an object":"\u7269\u9AD4\u5BEC\u5EA6\u6BD4\u4F8B","the width's scale":"\u5BEC\u5EA6\u6BD4\u4F8B","Scale on Y axis":"\u5728Y\u8EF8\u4E0A\u7684\u7E2E\u653E","the height's scale of an object":"\u7269\u9AD4\u9AD8\u5EA6\u6BD4\u4F8B","the height's scale":"\u9AD8\u5EA6\u6BD4\u4F8B","Flip the object horizontally":"\u4F7F\u7269\u4EF6\u6C34\u5E73\u7FFB\u8F49","Flip horizontally _PARAM0_: _PARAM1_":"\u6C34\u5E73\u7FFB\u8F49 _PARAM0_ : _PARAM1_","Activate flipping":"\u555F\u52D5\u7FFB\u8F49","Flip the object vertically":"\u5782\u76F4\u7FFB\u8F49\u7269\u4EF6","Flip vertically _PARAM0_: _PARAM1_":"\u5782\u76F4\u7FFB\u8F49 _PARAM0_ : _PARAM1_","Horizontally flipped":"\u6C34\u5E73\u7FFB\u8F49","Check if the object is horizontally flipped":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u6C34\u5E73\u7FFB\u8F49","_PARAM0_ is horizontally flipped":"_PARAM0_ \u662F\u6C34\u5E73\u7FFB\u8F49","Vertically flipped":"\u5782\u76F4\u7FFB\u8F49","Check if the object is vertically flipped":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5782\u76F4\u7FFB\u8F49","_PARAM0_ is vertically flipped":"_PARAM0_ \u662F\u5782\u76F4\u7FFB\u8F49","the opacity of an object, between 0 (fully transparent) to 255 (opaque)":"\u7269\u4EF6\u7684\u4E0D\u900F\u660E\u5EA6\uFF0C\u4ECB\u4E8E 0 (\u5B8C\u5168\u900F\u660E) \u5230 255 (\u4E0D\u900F\u660E) \u4E4B\u9593","the opacity":"\u4E0D\u900F\u660E\u5EA6","Change ":"\u66F4\u6539 ","Check the property value for .":"\u6AA2\u67E5 \u7684\u5C6C\u6027\u503C\u3002","Property of _PARAM0_ is true":"_PARAM0_ \u5C6C\u6027 \u70BA true","Update the property value for .":"Update the property value for .","Set property value for of _PARAM0_ to ":"\u5C07 _PARAM0_ \u7684 \u5C6C\u6027\u503C\u8A2D\u70BA ","New value to set":"\u8981\u8A2D\u5B9A\u7684\u65B0\u503C","Toggle":"\u5207\u63DB","Toggle the property value for .\nIf it was true, it will become false, and if it was false it will become true.":"\u5207\u63DB \u7684\u5C6C\u6027\u503C\u3002\n\u5982\u679C\u70BA\u771F\uFF0C\u5C07\u8B8A\u6210\u5047\uFF1B\u5982\u679C\u70BA\u5047\uFF0C\u5C07\u8B8A\u6210\u771F\u3002","Toggle property of _PARAM0_":"\u5207\u63DB\u5C6C\u6027 _PARAM0_","the property value for ":" \u7684\u5C6C\u6027\u503C"," property":" \u5C6C\u6027"," shared property":" \u5171\u4EAB\u5C6C\u6027","Center of rotation":"\u65CB\u8F49\u4E2D\u5FC3","Change the center of rotation of an object relatively to the object origin.":"\u76F8\u5C0D\u65BC\u7269\u9AD4\u539F\u9EDE\uFF0C\u6539\u8B8A\u7269\u9AD4\u65CB\u8F49\u4E2D\u5FC3\u3002","Change the center of rotation of _PARAM0_ to _PARAM1_ ; _PARAM2_ ; _PARAM3_":"\u5C07 _PARAM0_ \u7684\u65CB\u8F49\u4E2D\u5FC3\u66F4\u6539\u70BA _PARAM1_ ; _PARAM2_ ; _PARAM3_","X position":"X \u4F4D\u7F6E","Y position":"Y \u4F4D\u7F6E","Z position":"Z\u4F4D\u7F6E","Change the center of rotation of _PARAM0_ to _PARAM1_ ; _PARAM2_":"\u5C07 _PARAM0_ \u7684\u65CB\u8F49\u4E2D\u5FC3\u66F4\u6539\u70BA _PARAM1_ ; _PARAM2_","Error during exporting! Unable to export events:\n":"\u532F\u51FA\u6642\u767C\u751F\u932F\u8AA4\uFF01\u672A\u80FD\u532F\u51FA\u4E8B\u4EF6\uFF1A\n","Error during export:\n":"\u532F\u51FA\u6642\u767C\u751F\u932F\u8AA4\uFF1A\n","Unable to write ":"\u7121\u6CD5\u5BEB\u5165 ","Javascript code":"Javascript \u4EE3\u78BC","Insert some Javascript code into events":"\u5728\u4E8B\u4EF6\u4E2D\u63D2\u5165\u4E00\u4E9B Javascript \u4EE3\u78BC","Consider objects touching each other, but not overlapping, as in collision (default: no)":"\u5728\u78B0\u649E\u4E2D\u8003\u616E\u76F8\u4E92\u78B0\u649E\u4F46\u4E0D\u91CD\u758A\u7684\u7269\u4EF6 (\u9ED8\u8A8D\uFF1A\u5426)","HTML5 (Web and Android games)":"HTML5 ( \u7DB2\u9801\u548C\u5B89\u5353\u904A\u6232 )","HTML5 and javascript based games for web browsers.":"\u70BA web \u700F\u89BD\u5668\u800C\u8A2D\u7684\u57FA\u4E8E HTML5 \u548C javascript\u7684\u904A\u6232\u3002","Enables the creation of 2D games that can be played in web browsers. These can also be exported to Android with third-party tools.":"\u555F\u7528\u53EF\u5728 web \u700F\u89BD\u5668\u4E2D\u73A9\u76842D \u904A\u6232\u5275\u5EFA\uFF0C\u9019\u4E9B\u4E5F\u53EF\u4EE5\u7528\u7B2C\u4E09\u65B9\u5DE5\u5177\u532F\u51FA\u5230 Android \u3002","Gravity":"\u91CD\u529B","Jump":"\u8DF3\u8E8D","Jump speed":"\u5F48\u8DF3\u901F\u5EA6","Jump sustain time":"\u8DF3\u8E8D\u7DAD\u6301\u6642\u9593","Maximum time (in seconds) during which the jump strength is sustained if the jump key is held - allowing variable height jumps.":"\u5982\u679C\u6309\u4F4F\u8DF3\u8E8D\u9375\uFF0C\u5247\u53EF\u4EE5\u4FDD\u6301\u8DF3\u8E8D\u5F37\u5EA6\u7684\u6700\u9577\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09-\u5141\u8A31\u53EF\u8B8A\u9AD8\u5EA6\u7684\u8DF3\u8E8D\u3002","Max. falling speed":"\u6700\u5927\u4E0B\u843D\u7684\u901F\u5EA6","Ladder climbing speed":"\u722C\u68AF\u901F\u5EA6","Ladder":"\u68AF\u5B50","Acceleration":"\u52A0\u901F\u5EA6","Walk":"\u884C\u8D70","Deceleration":"\u6E1B\u901F","Max. speed":"\u6700\u5927\u901F\u5EA6","Disable default keyboard controls":"\u7981\u7528\u9810\u8A2D\u9375\u76E4\u63A7\u5236","Slope max. angle":"\u659C\u5761\u6700\u5927\u89D2\u5EA6","Can grab platform ledges":"\u53EF\u4EE5\u6293\u5E73\u81FA\u58C1\u67B6","Ledge":"\u5074\u908A","Automatically grab platform ledges without having to move horizontally":"\u81EA\u52D5\u6293\u4F4F\u5E73\u81FA\u58C1\u67B6\uFF0C\u800C\u7121\u9700\u6C34\u5E73\u79FB\u52D5","Grab offset on Y axis":"Y\u8EF8\u5916\u90E8\u504F\u79FB\u91CF","Grab tolerance on X axis":"\u6293\u53D6 X\u8EF8\u4E0A\u7684\u516C\u5DEE","Use frame rate dependent trajectories (deprecated \u2014 best left unchecked)":"\u4F7F\u7528\u8207\u5E40\u901F\u7387\u76F8\u95DC\u7684\u8ECC\u8DE1(\u5DF2\u68C4\u7528\uFF0C\u5EFA\u8B70\u4E0D\u8981\u9078\u4E2D\u6B64\u9078\u9805)","Deprecated options":"\u5DF2\u68C4\u7528\u7684\u9078\u9805","Allows repeated jumps while holding the jump key (deprecated \u2014 best left unchecked)":"\u5141\u8A31\u5728\u6309\u4F4F\u8DF3\u8E8D\u9375\u6642\u91CD\u8907\u8DF3\u8E8D(\u5DF2\u68C4\u7528\uFF0C\u5EFA\u8B70\u4E0D\u8981\u9078\u4E2D\u6B64\u9078\u9805)","Can go down from jumpthru platforms":"\u53EF\u4EE5\u5F9E\u8DF3\u8E8D\u5E73\u81FA\u5411\u4E0B\u79FB\u52D5","Platform":"\u5E73\u53F0","Jumpthru platform":"\u53EF\u7A7F\u8D8A\u5E73\u81FA","Ledges can be grabbed":"\u53EF\u4EE5\u6293\u4F4F\u908A\u89D2","Platform behavior":"\u5E73\u81FA\u884C\u70BA","Platformer character":"\u5E73\u81FA\u89D2\u8272","Jump and run on platforms.":"\u5728\u5E73\u81FA\u4E0A\u8DF3\u8E8D\u548C\u5954\u8DD1\u3002","Is moving":"\u79FB\u52D5\u4E2D","Check if the object is moving (whether it is on the floor or in the air).":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u79FB\u52D5\uFF08\u7121\u8AD6\u662F\u5728\u5730\u677F\u4E0A\u9084\u662F\u5728\u7A7A\u4E2D\uFF09\u3002","_PARAM0_ is moving":"_PARAM0_ \u6B63\u5728\u79FB\u52D5","Platformer state":"\u5E73\u81FA\u72C0\u614B","Is on floor":"\u5728\u5730\u677F\u4E0A","Check if the object is on a platform.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728\u5E73\u81FA\u4E0A\u3002","_PARAM0_ is on floor":"_PARAM0_ \u5728\u5730\u677F\u4E0A","Is on ladder":"\u662F\u5728\u68AF\u5B50\u4E0A","Check if the object is on a ladder.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728\u5E73\u81FA\u4E0A\u3002","_PARAM0_ is on ladder":"_PARAM0_ \u5728\u68AF\u5B50\u4E0A","Is jumping":"\u8DF3\u8D77\u4E2D","Check if the object is jumping.":"\u6AA2\u6E2C\u7269\u4EF6\u662F\u5426\u5728\u8DF3\u8D77","_PARAM0_ is jumping":"_PARAM0_ \u6B63\u5728\u8DF3\u8E8D","Is falling":"\u6B63\u5728\u4E0B\u843D","Check if the object is falling.\nNote that the object can be flagged as jumping and falling at the same time: at the end of a jump, the fall speed becomes higher than the jump speed.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u4E0B\u964D\u7684\uFF0C\n\u6CE8\u610F\uFF0C\u7269\u4EF6\u53EF\u4EE5\u88AB\u6A19\u8A18\u70BA\u8DF3\u843D\u5728\u540C\u4E00\u6642\u9593\uFF1A\u5728\u8DF3\u7D50\u675F\uFF0C\u4E0B\u964D\u901F\u5EA6\u9AD8\u4E8E\u8DF3\u901F\u5EA6\u3002","_PARAM0_ is falling":"_PARAM0_ \u6B63\u5728\u4E0B\u843D","Is grabbing platform ledge":"\u6293\u4F4F\u5E73\u81FA\u58C1\u67B6","Check if the object is grabbing a platform ledge.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u6293\u4F4F\u4E86\u5E73\u81FA\u3002","_PARAM0_ is grabbing a platform ledge":"_PARAM0_\u6293\u4F4F\u4E00\u500B\u5E73\u81FA","Compare the gravity applied on the object.":"\u6BD4\u8F03\u65BD\u52A0\u5728\u7269\u9AD4\u4E0A\u7684\u91CD\u529B\u3002","the gravity":"\u91CD\u529B","Platformer configuration":"\u5E73\u81FA\u914D\u7F6E","Gravity to compare to (in pixels per second per second)":"\u8981\u6BD4\u8F03\u7684\u91CD\u529B(\u4EE5\u6BCF\u79D2\u50CF\u7D20\u70BA\u55AE\u4F4D)","Change the gravity applied on an object.":"\u6539\u8B8A\u65BD\u52A0\u5728\u7269\u9AD4\u4E0A\u7684\u91CD\u529B\u3002","Gravity (in pixels per second per second)":"\u91CD\u529B(\u4EE5\u6BCF\u79D2\u50CF\u7D20\u70BA\u55AE\u4F4D)","Maximum falling speed":"\u6700\u5927\u7684\u4E0B\u843D\u901F\u5EA6","Compare the maximum falling speed of the object.":"\u6BD4\u8F03\u7269\u9AD4\u7684\u6700\u5927\u4E0B\u843D\u901F\u5EA6\u3002","the maximum falling speed":"\u6700\u5927\u964D\u843D\u901F\u5EA6","Max speed to compare to (in pixels per second)":"\u8207\u4E4B\u6BD4\u8F03\u7684\u6700\u5927\u901F\u5EA6(\u50CF\u7D20\u6BCF\u79D2)","Change the maximum falling speed of an object.":"\u6539\u8B8A\u7269\u9AD4\u7684\u6700\u5927\u4E0B\u843D\u901F\u5EA6\u3002","Max speed (in pixels per second)":"\u6700\u5927\u901F\u5EA6(\u50CF\u7D20\u6BCF\u79D2)","If jumping, try to preserve the current speed in the air":"\u5982\u679C\u662F\u8DF3\u8E8D\uFF0C\u76E1\u91CF\u4FDD\u6301\u7576\u524D\u7A7A\u4E2D\u7684\u901F\u5EA6","Compare the ladder climbing speed (in pixels per second).":"\u6BD4\u8F03\u722C\u68AF\u901F\u5EA6\uFF08\u4EE5\u50CF\u7D20/\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","the ladder climbing speed":"\u722C\u68AF\u901F\u5EA6","Speed to compare to (in pixels per second)":"\u8207\u4E4B\u6BD4\u8F03\u7684\u901F\u5EA6(\u50CF\u7D20\u6BCF\u79D2)","Change the ladder climbing speed.":"\u6539\u8B8A\u68AF\u5B50\u7684\u722C\u5347\u901F\u5EA6\u3002","Speed (in pixels per second)":"\uFF08\u55AE\u4F4D\u70BA\u50CF\u7D20\u6BCF\u79D2\uFF09 \u7684\u901F\u5EA6","Compare the horizontal acceleration of the object.":"\u6BD4\u8F03\u7269\u9AD4\u7684\u6C34\u5E73\u52A0\u901F\u5EA6\u3002","the horizontal acceleration":"\u6C34\u5E73\u52A0\u901F\u5EA6","Acceleration to compare to (in pixels per second per second)":"\u8207\u4E4B\u6BD4\u8F03\u7684\u52A0\u901F(\u50CF\u7D20/\u79D2)","Change the horizontal acceleration of an object.":"\u6539\u8B8A\u7269\u9AD4\u7684\u6C34\u5E73\u52A0\u901F\u5EA6\u3002","Acceleration (in pixels per second per second)":"\u52A0\u901F\u901F(\u50CF\u7D20\u6BCF\u79D2)","Compare the horizontal deceleration of the object.":"\u6BD4\u8F03\u7269\u9AD4\u7684\u6C34\u5E73\u6E1B\u901F\u5EA6\u3002","the horizontal deceleration":"\u6C34\u5E73\u6E1B\u901F","Deceleration to compare to (in pixels per second per second)":"\u8207\u4E4B\u6BD4\u8F03\u7684\u6E1B\u901F(\u50CF\u7D20/\u79D2)","Change the horizontal deceleration of an object.":"\u6539\u8B8A\u7269\u9AD4\u7684\u6C34\u5E73\u6E1B\u901F\u5EA6\u3002","Deceleration (in pixels per second per second)":"\u6E1B\u901F(\u50CF\u7D20\u6BCF\u79D2)","Maximum horizontal speed":"\u6700\u5927\u6C34\u5E73\u901F\u5EA6","Compare the maximum horizontal speed of the object.":"\u6BD4\u8F03\u7269\u9AD4\u7684\u6700\u5927\u6C34\u5E73\u901F\u5EA6\u3002","the maximum horizontal speed":"\u6700\u5927\u6C34\u5E73\u901F\u5EA6","Change the maximum horizontal speed of an object.":"\u66F4\u6539\u7269\u9AD4\u7684\u6700\u5927\u6C34\u5E73\u901F\u5EA6\u3002","Compare the jump speed of the object.Its value is always positive.":"\u6BD4\u8F03\u7269\u9AD4\u7684\u8DF3\u8E8D\u901F\u5EA6\u3002\u5B83\u7684\u503C\u7E3D\u662F\u6B63\u6578\u3002","the jump speed":"\u8DF3\u8E8D\u901F\u5EA6","Change the jump speed of an object. Its value is always positive.":"\u6539\u8B8A\u7269\u9AD4\u7684\u8DF3\u8E8D\u901F\u5EA6\u3002\u5B83\u7684\u503C\u7E3D\u662F\u6B63\u6578\u3002","Compare the jump sustain time of the object.This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"\u6BD4\u8F03\u7269\u9AD4\u7684\u8DF3\u8E8D\u7DAD\u6301\u6642\u9593\u3002\u9019\u662F\u4FDD\u6301\u6309\u4F4F\u8DF3\u8E8D\u6309\u9215\u5141\u8A31\u7DAD\u6301\u521D\u59CB\u8DF3\u8E8D\u901F\u5EA6\u7684\u6642\u9593\u3002","the jump sustain time":"\u8DF3\u8E8D\u7DAD\u6301\u6642\u9593","Duration to compare to (in seconds)":"\u6BD4\u8F03\u7684\u6301\u7E8C\u6642\u9593(\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Change the jump sustain time of an object.This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"\u66F4\u6539\u7269\u9AD4\u7684\u8DF3\u8E8D\u7DAD\u6301\u6642\u9593\u3002\u9019\u662F\u4FDD\u6301\u6309\u4F4F\u8DF3\u8E8D\u6309\u9215\u5141\u8A31\u7DAD\u6301\u521D\u59CB\u8DF3\u8E8D\u901F\u5EA6\u7684\u6642\u9593\u3002","Duration (in seconds)":"\u6301\u7E8C\u6642\u9593(\u79D2)","Allow jumping again":"\u662F\u5426\u5141\u8A31\u518D\u6B21\u8DF3\u8E8D","When this action is executed, the object is able to jump again, even if it is in the air: this can be useful to allow a double jump for example. This is not a permanent effect: you must call again this action everytime you want to allow the object to jump (apart if it's on the floor).":"\u7576\u57F7\u884C\u6B64\u64CD\u4F5C\u6642, \u7269\u4EF6\u80FD\u5920\u518D\u6B21\u8DF3\u8E8D. \u5373\u4F7F\u5B83\u5728\u7A7A\u4E2D; \u9019\u80FD\u6709\u52A9\u4E8E [\u5982\uFF1A\u96D9\u500D\u8DF3\u8E8D] , \u4F46\u9019\u4E0D\u662F\u6C38\u4E45\u6548\u679C. \u6BCF\u7576\u4F60\u60F3\u8981\u8B93\u7269\u4EF6\u8DF3\u8E8D\u6642\u4F60\u90FD\u5FC5\u9808\u518D\u6B21\u8ABF\u7528\u6B64\u52D5\u4F5C (\u5982\u679C\u5B83\u5728\u5730\u9762\u4E0A).","Allow _PARAM0_ to jump again":"\u5141\u8A31 _PARAM0_ \u518D\u8DF3\u4E00\u6B21","Forbid jumping again in the air":"\u7981\u6B62\u518D\u6B21\u5728\u7A7A\u4E2D\u8DF3\u8E8D","This revokes the effect of \"Allow jumping again\". The object is made unable to jump while in mid air. This has no effect if the object is not in the air.":"\u9019\u6703\u53D6\u6D88\u201C\u5141\u8A31\u518D\u6B21\u8DF3\u8E8D\u201D\u7684\u6548\u679C\u3002 \u7269\u9AD4\u5728\u534A\u7A7A\u4E2D\u7121\u6CD5\u8DF3\u8E8D\u3002 \u5982\u679C\u7269\u9AD4\u4E0D\u5728\u7A7A\u4E2D\uFF0C\u9019\u6C92\u6709\u4EFB\u4F55\u5F71\u97FF\u3002","Forbid _PARAM0_ to air jump":"\u7981\u6B62_PARAM0_\u7A7A\u4E2D\u8DF3\u8E8D","Abort jump":"\u4E2D\u6B62\u8DF3\u8E8D","Abort the current jump and stop the object vertically. This action doesn't have any effect when the character is not jumping.":"\u4E2D\u6B62\u7576\u524D\u8DF3\u8F49\u5E76\u5782\u76F4\u505C\u6B62\u7269\u4EF6\u3002\u7576\u89D2\u8272\u4E0D\u8DF3\u6642\uFF0C\u9019\u500B\u52D5\u4F5C\u4E0D\u6703\u6709\u4EFB\u4F55\u6548\u679C\u3002","Abort the current jump of _PARAM0_":"\u4E2D\u6B62\u7576\u524D_PARAM0_ \u7684\u8DF3\u8E8D","Can jump":"\u53EF\u4EE5\u8DF3","Check if the object can jump.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u53EF\u4EE5\u8DF3\u8E8D\u3002","_PARAM0_ can jump":"_PARAM0_ \u53EF\u4EE5\u8DF3","Simulate left key press":"\u6A21\u64EC\u5DE6\u9375\u6309\u4E0B","Simulate a press of the left key.":"\u6A21\u64EC\u5DE6\u9375\u7684\u6309\u4E0B\u3002","Simulate pressing Left for _PARAM0_":"\u6A21\u64EC _PARAM0_ \u5DE6\u9375\u6309\u4E0B","Platformer controls":"\u5E73\u81FA\u63A7\u5236","Simulate right key press":"\u6A21\u64EC\u53F3\u9375\u6309\u4E0B","Simulate a press of the right key.":"\u6A21\u64EC\u53F3\u9375\u7684\u6309\u4E0B\u3002","Simulate pressing Right for _PARAM0_":"\u6A21\u64EC _PARAM0_ \u53F3\u9375\u6309\u4E0B","Simulate up key press":"\u6A21\u64EC\u4E0A\u9375\u6309\u4E0B","Simulate a press of the up key (used when on a ladder).":"\u6A21\u64EC\u4E0A\u9375\u7684\u6309\u4E0B\uFF08\u5728\u68AF\u5B50\u4E0A\u6642\uFF09\u3002","Simulate pressing Up for _PARAM0_":"\u6A21\u64EC _PARAM0_ \u4E0A\u9375\u6309\u4E0B","Simulate down key press":"\u6A21\u64EC\u4E0B\u9375\u6309\u4E0B","Simulate a press of the down key (used when on a ladder).":"\u6A21\u64EC\u4E0B\u9375\u7684\u6309\u4E0B\uFF08\u5728\u68AF\u5B50\u4E0A\u6642\uFF09\u3002","Simulate pressing Down for _PARAM0_":"\u6A21\u64EC _PARAM0_ \u4E0B\u9375\u6309\u4E0B","Simulate ladder key press":"\u6A21\u64EC\u68AF\u9375\u6309\u4E0B","Simulate a press of the ladder key (used to grab a ladder).":"\u6A21\u64EC\u68AF\u9375\u6309\u4E0B\uFF08\u7528\u4E8E\u6293\u4F4F\u68AF\u5B50\uFF09\u3002","Simulate pressing Ladder key for _PARAM0_":"\u6A21\u64EC _PARAM0_ \u68AF\u9375\u6309\u4E0B","Simulate release ladder key press":"\u6A21\u64EC\u91CB\u653E\u68AF\u5F62\u6309\u9375","Simulate a press of the Release Ladder key (used to get off a ladder).":"\u6A21\u64EC\u6309\u4E0B\u91CB\u653E\u68AF\u5B50\u9375(\u7528\u4E8E\u96E2\u958B\u68AF\u5B50)\u3002","Simulate pressing Release Ladder key for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B_PARAM0_\u7684\u91CB\u653E\u68AF\u9375","Simulate jump key press":"\u6A21\u64EC\u8DF3\u8E8D\u9375\u6309\u4E0B","Simulate a press of the jump key.":"\u6A21\u64EC\u8DF3\u8E8D\u9375\u7684\u6309\u4E0B\u3002","Simulate pressing Jump key for _PARAM0_":"\u6A21\u64EC _PARAM0_ \u8DF3\u8E8D\u9375\u6309\u4E0B","Simulate release platform key press":"\u6A21\u64EC\u91CB\u653E\u5E73\u81FA\u6309\u9375","Simulate a press of the release platform key (used when grabbing a platform ledge).":"\u6A21\u64EC\u6309\u4E0B\u91CB\u653E\u5E73\u81FA\u9375(\u5728\u6293\u4F4F\u5E73\u81FA\u58C1\u67B6\u6642\u4F7F\u7528)\u3002","Simulate pressing Release Platform key for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B _PARAM0_ \u7684\u91CB\u653E\u5E73\u81FA\u9375","Simulate control":"\u985E\u6BD4\u63A7\u5236","Simulate a press of a key.\nValid keys are Left, Right, Jump, Ladder, Release Ladder, Up, Down.":"\u6A21\u64EC\u6309\u9375\u7684\u6309\u4E0B\u3002\n\u6709\u6548\u7684\u9375\u662F\u5411\u5DE6\u3001\u5411\u53F3\u3001\u8DF3\u8E8D\u3001\u68AF\u5B50\u3001\u91CB\u653E\u68AF\u5B50\u3001\u5411\u4E0A\u3001\u5411\u4E0B\u3002","Simulate pressing _PARAM2_ key for _PARAM0_":"\u6A21\u64EC _PARAM0_ _PARAM2_ \u9375\u6309\u4E0B","Key":"\u95DC\u9375","Control pressed or simulated":"\u6309\u4E0B\u6216\u6A21\u64EC\u63A7\u5236","A control was applied from a default control or simulated by an action.":"\u5F9E\u9ED8\u8A8D\u63A7\u5236\u6216\u901A\u904E\u52D5\u4F5C\u6A21\u64EC\u61C9\u7528\u63A7\u5236\u3002","_PARAM0_ has the _PARAM2_ key pressed or simulated":"_PARAM0_ \u6309\u4E0B\u6216\u6A21\u64EC\u7684 _PARAM2_ \u9375","Ignore default controls":"\u5FFD\u7565\u9ED8\u8A8D\u63A7\u5236","De/activate the use of default controls.\nIf deactivated, use the simulated actions to move the object.":"\u53D6\u6D88/\u6FC0\u6D3B\u9ED8\u8A8D\u63A7\u5236\u7684\u4F7F\u7528\u3002\n\u5982\u679C\u53D6\u6D88\u6FC0\u6D3B\uFF0C\u4F7F\u7528\u6A21\u64EC\u7684\u52D5\u4F5C\u79FB\u52D5\u7269\u4EF6\u3002","Ignore default controls for _PARAM0_: _PARAM2_":"\u5FFD\u7565_PARAM0_\u7684\u9ED8\u8A8D\u63A7\u4EF6\uFF1A_PARAM2_","Ignore controls":"\u5FFD\u7565\u63A7\u5236","Platform grabbing":"\u5E73\u81FA\u6293\u53D6","Enable (or disable) the ability of the object to grab platforms when falling near to one.":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u7269\u4EF6\u63A5\u8FD1\u5E73\u81FA\u6642\u6293\u4F4F\u5E73\u81FA\u7684\u80FD\u529B\u3002","Allow _PARAM0_ to grab platforms: _PARAM2_":"\u5141\u8A31 _PARAM0_ \u6293\u53D6\u5E73\u81FA\uFF1A_PARAM2_","Can grab platforms":"\u53EF\u4EE5\u6293\u53D6\u5E73\u81FA","Check if the object can grab the platforms.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u53EF\u4EE5\u6293\u53D6\u5E73\u81FA\u3002","_PARAM0_ can grab the platforms":"_PARAM0_ \u53EF\u4EE5\u6293\u53D6\u5E73\u81FA","Current falling speed":"\u7576\u524D\u4E0B\u843D\u901F\u5EA6","Compare the current falling speed of the object. Its value is always positive.":"\u6BD4\u8F03\u7269\u9AD4\u7576\u524D\u7684\u4E0B\u964D\u901F\u5EA6\uFF0C\u5B83\u7684\u503C\u7E3D\u662F\u6B63\u6578\u3002","the current falling speed":"\u7576\u524D\u4E0B\u964D\u901F\u5EA6","Change the current falling speed of the object. This action doesn't have any effect when the character is not falling or is in the first phase of a jump.":"\u6539\u8B8A\u7269\u9AD4\u7576\u524D\u7684\u4E0B\u843D\u901F\u5EA6\u3002\u7576\u89D2\u8272\u6C92\u6709\u4E0B\u843D\u6216\u8005\u8655\u4E8E\u8DF3\u8E8D\u7684\u7B2C\u4E00\u968E\u6BB5\u6642\uFF0C\u9019\u500B\u52D5\u4F5C\u6C92\u6709\u4EFB\u4F55\u6548\u679C\u3002","Current jump speed":"\u7576\u524D\u8DF3\u8E8D\u901F\u5EA6","Compare the current jump speed of the object. Its value is always positive.":"\u6BD4\u8F03\u7269\u9AD4\u7576\u524D\u7684\u8DF3\u8E8D\u901F\u5EA6\u3002\u5B83\u7684\u503C\u7E3D\u662F\u6B63\u6578\u3002","the current jump speed":"\u7576\u524D\u8DF3\u8E8D\u901F\u5EA6","Current horizontal speed":"\u7576\u524D\u6C34\u5E73\u901F\u5EA6","Change the current horizontal speed of the object. The object moves to the left with negative values and to the right with positive ones":"\u66F4\u6539\u7269\u4EF6\u7684\u7576\u524D\u6C34\u5E73\u901F\u5EA6\u3002\u7269\u4EF6\u5411\u5DE6\u79FB\u52D5\u70BA\u8CA0\u503C\uFF0C\u5411\u53F3\u79FB\u52D5\u70BA\u6B63\u503C","the current horizontal speed":"\u7576\u524D\u6C34\u5E73\u901F\u5EA6","Compare the current horizontal speed of the object. The object moves to the left with negative values and to the right with positive ones":"\u6BD4\u8F03\u7269\u9AD4\u7576\u524D\u7684\u6C34\u5E73\u901F\u5EA6\u3002\u7269\u4EF6\u5411\u5DE6\u79FB\u52D5\u70BA\u8CA0\u503C\uFF0C\u5411\u53F3\u79FB\u52D5\u70BA\u6B63\u503C","Return the gravity applied on the object (in pixels per second per second).":"\u8FD4\u56DE\u61C9\u7528\u4E8E\u7269\u4EF6\u7684\u91CD\u529B(\u6BCF\u79D2\u50CF\u7D20/\u79D2)\u3002","Return the maximum falling speed of the object (in pixels per second).":"\u8FD4\u56DE\u7269\u4EF6\u7684\u6700\u5927\u4E0B\u964D\u901F\u5EA6(\u6BCF\u79D2\u50CF\u7D20)\u3002","Return the ladder climbing speed of the object (in pixels per second).":"\u8FD4\u56DE\u7269\u4EF6\u7684\u722C\u68AF\u901F\u5EA6(\u6BCF\u79D2\u50CF\u7D20)\u3002","Return the horizontal acceleration of the object (in pixels per second per second).":"\u8FD4\u56DE\u7269\u4EF6\u7684\u6C34\u5E73\u52A0\u901F\u5EA6(\u6BCF\u79D2\u50CF\u7D20/\u79D2)\u3002","Return the horizontal deceleration of the object (in pixels per second per second).":"\u8FD4\u56DE\u7269\u4EF6\u7684\u6C34\u5E73\u6E1B\u901F(\u6BCF\u79D2\u50CF\u7D20/\u79D2)\u3002","Return the maximum horizontal speed of the object (in pixels per second).":"\u8FD4\u56DE\u7269\u4EF6\u7684\u6700\u5927\u6C34\u5E73\u901F\u5EA6(\u6BCF\u79D2\u50CF\u7D20)\u3002","Return the jump speed of the object (in pixels per second). Its value is always positive.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u8DF3\u8E8D\u901F\u5EA6(\u6BCF\u79D2\u50CF\u7D20)\u3002\u5176\u503C\u7E3D\u662F\u6B63\u6578\u3002","Return the jump sustain time of the object (in seconds).This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"\u8FD4\u56DE\u7269\u9AD4\u7684\u8DF3\u8F49\u7DAD\u6301\u6642\u9593(\u4EE5\u79D2\u70BA\u55AE\u4F4D)\u3002\u5728\u9019\u6BB5\u6642\u9593\u5167\uFF0C\u4FDD\u6301\u8DF3\u8E8D\u6309\u9215\u4E0D\u52D5\uFF0C\u53EF\u4EE5\u4FDD\u6301\u521D\u59CB\u8DF3\u8E8D\u901F\u5EA6\u3002","Current fall speed":"\u7576\u524D\u4E0B\u843D\u901F\u5EA6","Return the current fall speed of the object (in pixels per second). Its value is always positive.":"\u8FD4\u56DE\u7269\u4EF6\u7576\u524D\u7684\u4E0B\u964D\u901F\u5EA6(\u6BCF\u79D2\u50CF\u7D20)\u3002\u5176\u503C\u7E3D\u662F\u6B63\u6578\u3002","Return the current horizontal speed of the object (in pixels per second). The object moves to the left with negative values and to the right with positive ones":"\u8FD4\u56DE\u7269\u4EF6\u7576\u524D\u6C34\u5E73\u7684\u901F\u5EA6(\u6BCF\u79D2\u50CF\u7D20)\u3002 \u7269\u4EF6\u5E36\u8457\u8CA0\u503C\u5411\u5DE6\u79FB\u52D5\uFF0C\u5E36\u8457\u6B63\u503C\u5411\u53F3\u79FB\u52D5","Return the current jump speed of the object (in pixels per second). Its value is always positive.":"\u8FD4\u56DE\u7269\u4EF6\u7576\u524D\u7684\u8DF3\u8E8D\u901F\u5EA6(\u6BCF\u79D2\u50CF\u7D20)\u3002\u5176\u503C\u7E3D\u662F\u6B63\u6578\u3002","Flag objects as being platforms which characters can run on.":"\u5C07\u7269\u4EF6\u6A19\u8A18\u70BA\u89D2\u8272\u53EF\u4EE5\u5728\u5176\u4E0A\u904B\u884C\u7684\u5E73\u81FA\u3002","Platform type":"\u5E73\u81FA\u985E\u578B","Change the platform type of the object: Platform, Jump-Through, or Ladder.":"\u66F4\u6539\u5E73\u81FA\u7684\u5E73\u81FA\u985E\u578B\uFF1A\u5E73\u81FA\u3001\u8DF3\u8F49\u3001\u6216\u68AF\u5F62\u3002","Set platform type of _PARAM0_ to _PARAM2_":"\u8A2D\u5B9A _PARAM0_ \u7684\u5E73\u81FA\u985E\u578B\u70BA _PARAM2_","Character is on given platform":"\u89D2\u8272\u5728\u7D66\u5B9A\u5E73\u81FA\u4E0A","Check if a platformer character is on a given platform.":"\u6AA2\u67E5\u5E73\u81FA\u904A\u6232\u89D2\u8272\u662F\u5426\u5728\u7D66\u5B9A\u5E73\u81FA\u4E0A\u3002","_PARAM0_ is on platform _PARAM2_":"_PARAM0_ \u4F4D\u4E8E\u5E73\u81FA _PARAM2_ \u4E0A","Collision":"\u78B0\u649E","Platforms":"\u5E73\u81FA","Font size":"\u5B57\u9AD4\u5927\u5C0F","Alignment":"\u5C0D\u6E96","Alignment of the text when multiple lines are displayed":"\u7576\u986F\u793A\u591A\u884C\u6642\u6587\u672C\u7684\u5C0D\u9F4A\u65B9\u5F0F","Vertical alignment":"\u5782\u76F4\u5C0D\u9F4A","Show outline":"\u986F\u793A\u8F2A\u5ED3\u7DDA","Show shadow":"\u986F\u793A\u9670\u5F71","Text object":"\u6587\u5B57\u5C0D\u8C61","An object that can be used to display any text on the screen: remaining life counter, some indicators, menu buttons, dialogues...":"\u4E00\u500B\u53EF\u7528\u4E8E\u5728\u5C4F\u5E55\u4E0A\u986F\u793A\u4EFB\u4F55\u6587\u672C\u7684\u7269\u4EF6\uFF1A\u5269\u9918\u7684\u751F\u547D\u8A08\u6578\u5668\u3001\u4E00\u4E9B\u6307\u6A19\u3001\u83DC\u55AE\u6309\u9215\u3001\u5C0D\u8A71...","Displays a text on the screen.":"\u5728\u5C4F\u5E55\u4E0A\u986F\u793A\u6587\u672C\u3002","Change the font of the text.":"\u66F4\u6539\u6587\u672C\u5B57\u9AD4\u3002","Change font of _PARAM0_ to _PARAM1_":"\u628A _PARAM0_ \u7684\u5B57\u9AD4\u66F4\u6539\u70BA _PARAM1_","Font resource name":"\u5B57\u9AD4\u8CC7\u6E90\u540D\u7A31","Change the color of the text. The color is white by default.":"\u66F4\u6539\u6587\u672C\u7684\u984F\u8272\u3002\u9ED8\u8A8D\u984F\u8272\u662F\u767D\u8272\u3002","Change color of _PARAM0_ to _PARAM1_":"\u628A _PARAM0_ \u7684\u984F\u8272\u66F4\u6539\u70BA _PARAM1_","Gradient":"\u68AF\u5EA6","Change the gradient of the text.":"\u66F4\u6539\u6587\u672C\u7684\u6F38\u8B8A\u3002","Change gradient of _PARAM0_ to colors _PARAM2_ _PARAM3_ _PARAM4_ _PARAM5_, type _PARAM1_":"\u5C07 _PARAM0_ \u7684\u6F38\u8B8A\u66F4\u6539\u70BA\u984F\u8272 _PARAM2_ _PARAM3_ _PARAM4_ _PARAM5_\uFF0C\u8F38\u5165 _PARAM1_","Gradient type":"\u6F38\u8B8A\u985E\u578B","First Color":"\u7B2C\u4E00\u500B\u984F\u8272","Second Color":"\u7B2C\u4E8C\u500B\u984F\u8272","Third Color":"\u7B2C\u4E09\u500B\u984F\u8272","Fourth Color":"\u7B2C\u56DB\u500B\u984F\u8272","Change the outline of the text. A thickness of 0 disables the outline.":"\u66F4\u6539\u6587\u672C\u7684\u8F2A\u5ED3\u3002\u539A\u5EA60\u6703\u7981\u7528\u8F2A\u5ED3\u3002","Change outline of _PARAM0_ to color _PARAM1_ with thickness _PARAM2_":"\u5C07_PARAM0_\u7684\u8F2A\u5ED3\u66F4\u6539\u70BA\u984F\u8272_PARAM1_\uFF0C\u539A\u5EA6\u70BA_PARAM2_","Enable outline":"\u555F\u7528\u8F2A\u5ED3\u7DDA","Enable or disable the outline of the text.":"\u555F\u7528\u6216\u7981\u7528\u6587\u672C\u8F2A\u5ED3\u7DDA\u3002","Enable the outline of _PARAM0_: _PARAM1_":"\u555F\u7528_PARAM0_\u7684\u8F2A\u5ED3\u7DDA\uFF1A_PARAM1_","Outline enabled":"\u8F2A\u5ED3\u7DDA\u5DF2\u555F\u7528","Check if the text outline is enabled.":"\u6AA2\u67E5\u6587\u672C\u8F2A\u5ED3\u7DDA\u662F\u5426\u555F\u7528\u3002","The outline of _PARAM0_ is enabled":"_PARAM0_ \u7684\u8F2A\u5ED3\u7DDA\u5DF2\u555F\u7528","Change the outline color of the text.":"\u66F4\u6539\u6587\u672C\u7684\u8F2A\u5ED3\u7DDA\u984F\u8272\u3002","Change the text outline color of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u6587\u672C\u8F2A\u5ED3\u7DDA\u984F\u8272\u66F4\u6539\u70BA _PARAM1_","Outline thickness":"\u8F2A\u5ED3\u7DDA\u539A\u5EA6","the outline thickness of the text":"\u6587\u672C\u7684\u8F2A\u5ED3\u7DDA\u539A\u5EA6","the text outline thickness":"\u6587\u672C\u8F2A\u5ED3\u7DDA\u539A\u5EA6","Text shadow":"\u6587\u5B57\u9670\u5F71","Change the shadow of the text.":"\u66F4\u6539\u6587\u672C\u7684\u9670\u5F71\u3002","Change the shadow of _PARAM0_ to color _PARAM1_ distance _PARAM2_ blur _PARAM3_ angle _PARAM4_":"\u5C07_PARAM0_ \u7684\u9670\u5F71\u6539\u70BA\u984F\u8272 _PARAM1_ \u8DDD\u96E2_PARAM2_ \u6A21\u7CCA _PARAM3_ \u89D2\u5EA6 _PARAM4_","Blur":"\u6A21\u7CCA","Enable shadow":"\u555F\u7528\u9670\u5F71","Enable or disable the shadow of the text.":"\u555F\u7528\u6216\u7981\u7528\u6587\u672C\u7684\u9670\u5F71\u3002","Enable the shadow of _PARAM0_: _PARAM1_":"\u555F\u7528 _PARAM0_ \u7684\u9670\u5F71\uFF1A_PARAM1_","Show the shadow":"\u986F\u793A\u9670\u5F71","Shadow enabled":"\u9670\u5F71\u5DF2\u555F\u7528","Check if the text shadow is enabled.":"\u6AA2\u67E5\u6587\u5B57\u9670\u5F71\u662F\u5426\u5DF2\u555F\u7528\u3002","The shadow of _PARAM0_ is enabled":"_PARAM0_ \u7684\u9670\u5F71\u5DF2\u555F\u7528","Shadow color":"\u9670\u5F71\u984F\u8272","Change the shadow color of the text.":"\u66F4\u6539\u6587\u672C\u7684\u9670\u5F71\u984F\u8272\u3002","Change the shadow color of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u9670\u5F71\u984F\u8272\u66F4\u6539\u70BA _PARAM1_","Shadow opacity":"\u9670\u5F71\u4E0D\u900F\u660E\u5EA6","the shadow opacity of the text":"\u6587\u672C\u7684\u9670\u5F71\u4E0D\u900F\u660E\u5EA6","the shadow opacity ":"\u9670\u5F71\u4E0D\u900F\u660E\u5EA6 ","Shadow distance":"\u9670\u5F71\u8DDD\u96E2","the shadow distance of the text":"\u6587\u672C\u7684\u9670\u5F71\u8DDD\u96E2","the shadow distance ":"\u9670\u5F71\u8DDD\u96E2 ","Shadow angle":"\u9670\u5F71\u89D2\u5EA6","the shadow angle of the text":"\u6587\u672C\u7684\u9670\u5F71\u89D2\u5EA6","the shadow angle ":"\u9670\u5F71\u89D2\u5EA6 ","Angle (in degrees)":"\u89D2\u5EA6 (\u5EA6)\uFF1A","Shadow blur radius":"\u9670\u5F71\u6A21\u7CCA\u534A\u5F91","the shadow blur radius of the text":"\u6587\u672C\u7684\u9670\u5F71\u6A21\u7CCA\u534A\u5F91","the shadow blur radius ":"\u9670\u5F71\u6A21\u7CCA\u534A\u5F91 ","Smoothing":"\u5E73\u6ED1","Activate or deactivate text smoothing.":"\u6FC0\u6D3B\u6216\u53D6\u6D88\u6FC0\u6D3B\u6587\u672C\u5E73\u6ED1\u3002","Smooth _PARAM0_: _PARAM1_":"\u5E73\u6ED1 _PARAM0_\uFF1A _PARAM1_","Style":"\u6A23\u5F0F","Smooth the text":"\u5E73\u6ED1\u6587\u5B57","Check if an object is smoothed":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5E73\u6ED1","_PARAM0_ is smoothed":"_PARAM0_ \u5DF2\u5E73\u6ED1\u5316","De/activate bold":"\u4E0D/\u6FC0\u6D3B\u7C97\u9AD4","Set bold style of _PARAM0_ : _PARAM1_":"\u8A2D\u5B9A _PARAM0_ \u7684\u7C97\u9AD4\u6A23\u5F0F\uFF1A _PARAM1_","Set bold style":"\u8A2D\u5B9A\u7C97\u9AD4\u6A23\u5F0F","Check if the bold style is activated":"\u6E2C\u8A66\u7C97\u9AD4\u6A23\u5F0F\u662F\u5426\u88AB\u6FC0\u6D3B","_PARAM0_ bold style is set":"_PARAM0_ \u7684\u7C97\u9AD4\u6A23\u5F0F\u5DF2\u8A2D\u5B9A","De/activate italic.":"\u4E0D/\u6FC0\u6D3B\u659C\u9AD4\u3002","Set italic style for _PARAM0_ : _PARAM1_":"\u8A2D\u5B9A _PARAM0_ \u7684\u659C\u9AD4\u6A23\u5F0F\uFF1A _PARAM1_","Set italic":"\u8A2D\u5B9A\u659C\u9AD4","Check if the italic style is activated":"\u6AA2\u67E5\u659C\u9AD4\u6A23\u5F0F\u662F\u5426\u88AB\u6FC0\u6D3B","_PARAM0_ italic style is set":"_PARAM0_ \u7684\u659C\u9AD4\u6A23\u5F0F\u5DF2\u8A2D\u5B9A","Underlined":"\u4E0B\u5283\u7DDA","De/activate underlined style.":"\u4E0D/\u6FC0\u6D3B\u4E0B\u5283\u7DDA\u3002","Set underlined style of _PARAM0_: _PARAM1_":"\u8A2D\u5B9A_PARAM0_ \u7684\u4E0B\u5283\u7DDA\u6A23\u5F0F\uFF1A _PARAM1_","Underline":"\u4E0B\u5283\u7DDA","Check if the underlined style of an object is set.":"\u6AA2\u67E5\u7269\u4EF6\u7684\u4E0B\u5283\u7DDA\u6A23\u5F0F\u662F\u5426\u88AB\u6FC0\u6D3B","_PARAM0_ underlined style is activated":"_PARAM0_ \u7684\u4E0B\u5283\u7DDA\u5DF2\u6FC0\u6D3B","Padding":"\u586B\u5145","Compare the number of pixels around a text object. If the shadow or the outline around the text are getting cropped, raise this value.":"\u6BD4\u8F03\u6587\u672C\u7269\u4EF6\u5468\u570D\u7684\u50CF\u7D20\u6578\u3002 \u5982\u679C\u6587\u672C\u5468\u570D\u7684\u9670\u5F71\u6216\u8F2A\u5ED3\u88AB\u88C1\u526A\uFF0C\u8ACB\u63D0\u9AD8\u6B64\u503C\u3002","the padding":"\u586B\u5145","Set the number of pixels around a text object. If the shadow or the outline around the text are getting cropped, raise this value.":"\u8A2D\u5B9A\u6587\u672C\u7269\u4EF6\u5468\u570D\u7684\u50CF\u7D20\u6578\u3002 \u5982\u679C\u6587\u672C\u5468\u570D\u7684\u9670\u5F71\u6216\u8F2A\u5ED3\u88AB\u88C1\u526A\uFF0C\u8ACB\u63D0\u9AD8\u6B64\u503C\u3002","Change the text alignment of a multiline text object.":"Change the text alignment of a multiline text object.","Align _PARAM0_: _PARAM1_":"\u5C0D\u9F4A_PARAM0_\uFF1A_PARAM1_","Compare the text alignment of a multiline text object.":"\u6BD4\u8F03\u591A\u884C\u6587\u672C\u7269\u4EF6\u7684\u6587\u672C\u5C0D\u9F4A\u65B9\u5F0F\u3002","the alignment":"\u5C0D\u9F4A\u65B9\u5F0F","Word wrapping":"\u81EA\u52D5\u63DB\u884C","De/activate word wrapping. Note that word wrapping is a graphical option,\nyou can't get the number of lines displayed":"\u53D6\u6D88/\u6FC0\u6D3B\u81EA\u52D5\u63DB\u884C\u3002\u6CE8\u610F\uFF0C\u81EA\u52D5\u63DB\u884C\u662F\u4E00\u500B\u5716\u5F62\u9078\u9805\uFF0C\n\u60A8\u4E0D\u80FD\u7372\u5F97\u986F\u793A\u7684\u884C\u6578","Activate word wrapping of _PARAM0_: _PARAM1_":"Activate word wrapping of _PARAM0_: _PARAM1_","Wrapping":"\u81EA\u52D5\u63DB\u884C","Check if word wrapping is enabled.":"Check if word wrapping is enabled.","_PARAM0_ word wrapping is enabled":"_PARAM0_ word wrapping is enabled","Wrapping width":"\u81EA\u52D5\u63DB\u884C\u5BEC\u5EA6","Change the word wrapping width of a Text object.":"Change the word wrapping width of a Text object.","the wrapping width":"\u81EA\u52D5\u63DB\u884C\u5BEC\u5EA6","Compare the word wrapping width of a Text object.":"Compare the word wrapping width of a Text object.","the font size of a text object":"\u6587\u672C\u7269\u4EF6\u7684\u5B57\u9AD4\u5927\u5C0F","the font size":"\u5B57\u9AD4\u5927\u5C0F","the line height of a text object":"\u6587\u672C\u7269\u4EF6\u7684\u884C\u9AD8","the line height":"\u884C\u9AD8","Modify the angle of a Text object.":"\u4FEE\u6539\u6587\u5B57\u7269\u4EF6\u7684\u89D2\u5EA6\u3002","the angle":"\u89D2\u5EA6","Compare the value of the angle of a Text object.":"\u6E2C\u8A66\u6587\u672C\u7269\u4EF6\u7684\u89D2\u5EA6\u503C\u3002","Angle to compare to (in degrees)":"\u8207\u4E4B\u6BD4\u8F03\u7684\u89D2\u5EA6(\u5EA6)","Compare the scale of the text on the X axis":"\u6BD4\u8F03\u6587\u672C\u5728 X \u8EF8\u4E0A\u7684\u7E2E\u653E\u6BD4\u4F8B","the scale on the X axis":"x \u8EF8\u4E0A\u7684\u7E2E\u653E\u6BD4\u4F8B","Scale to compare to (1 by default)":"\u8981\u6BD4\u8F03\u7684\u6BD4\u4F8B(\u9ED8\u8A8D\u70BA1)","Modify the scale of the text on the X axis (default scale is 1)":"\u66F4\u6539\u6587\u5B57\u5728 X \u8EF8\u4E0A\u7684\u7E2E\u653E\u6BD4\u4F8B\uFF08\u9ED8\u8A8D\u6BD4\u4F8B\u70BA 1\uFF09","Scale (1 by default)":"\u7E2E\u653E ( \u9ED8\u8A8D1)","Compare the scale of the text on the Y axis":"\u6BD4\u8F03\u6587\u672C\u5728 Y \u8EF8\u4E0A\u7684\u7E2E\u653E\u6BD4\u4F8B","the scale on the Y axis":"y \u8EF8\u4E0A\u7684\u7E2E\u653E\u6BD4\u4F8B","Modify the scale of the text on the Y axis (default scale is 1)":"\u66F4\u6539\u6587\u5B57\u5728 Y \u8EF8\u4E0A\u7684\u7E2E\u653E\u6BD4\u4F8B\uFF08\u9ED8\u8A8D\u6BD4\u4F8B\u70BA 1\uFF09","Modify the scale of the specified object (default scale is 1)":"\u66F4\u6539\u7279\u5B9A\u7269\u4EF6\u7684\u7E2E\u653E\u6BD4\u4F8B\uFF08\u9ED8\u8A8D\u6BD4\u4F8B\u70BA 1\uFF09","X Scale of a Text object":"\u6587\u5B57\u7269\u4EF6\u7684X\u6BD4\u4F8B\u5C3A","Y Scale of a Text object":"\u6587\u5B57\u7269\u4EF6\u7684Y\u6BD4\u4F8B\u5C3A","Text opacity":"\u6587\u672C\u4E0D\u900F\u660E\u5EA6","Change the opacity of a Text. 0 is fully transparent, 255 is opaque (default).":"\u66F4\u6539\u6587\u672C\u7684\u4E0D\u900F\u660E\u5EA6\u30020\u662F\u5B8C\u5168\u900F\u660E\u7684, 255 \u662F\u4E0D\u900F\u660E\u7684 (\u9ED8\u8A8D\u503C)\u3002","Opacity (0-255)":"\u4E0D\u900F\u660E\u5EA6 (0-255)","Compare the opacity of a Text object, between 0 (fully transparent) to 255 (opaque).":"\u6BD4\u8F03\u7269\u4EF6\u7684\u4E0D\u900F\u660E\u5EA6\uFF0C0\uFF08\u5B8C\u5168\u900F\u660E\uFF09\u5230 255\uFF08\u4E0D\u900F\u660E\uFF09\u4E4B\u9593\u53D6\u503C","Opacity to compare to (0-255)":"\u7528\u4F86\u6BD4\u8F03\u7684\u900F\u660E\u5EA6 (0-255)","Opacity of a Text object":"\u6587\u672C\u7269\u4EF6\u7684\u4E0D\u900F\u660E\u5EA6","Modify the text":"\u4FEE\u6539\u6587\u672C","Modify the text of a Text object.":"\u4FEE\u6539\u6587\u5B57\u7269\u4EF6\u7684\u6587\u672C\u3002","the text":"\u6587\u672C","Compare the text":"\u6BD4\u8F03\u6587\u5B57","Compare the text of a Text object.":"\u6BD4\u8F03\u6587\u5B57\u7269\u4EF6\u7684\u6587\u672C\u3002","Text to compare to":"\u8981\u6BD4\u8F03\u7684\u6587\u672C","Texture":"\u7D0B\u7406","Tiled Sprite Object":"\u74E6\u584A\u7CBE\u9748\u7269\u4EF6","Tiled Sprite":"\u74E6\u584A\u7CBE\u9748","Displays an image repeated over an area.":"\u986F\u793A\u5728\u4E00\u500B\u5340\u57DF\u4E0A\u91CD\u5FA9\u7684\u5716\u50CF\u3002","Compare the opacity of a Tiled Sprite, between 0 (fully transparent) to 255 (opaque).":"\u6BD4\u8F03\u5E73\u92EA\u7CBE\u9748\u7684\u4E0D\u900F\u660E\u5EA6\uFF0C\u4ECB\u4E8E 0\uFF08\u5B8C\u5168\u900F\u660E\uFF09\u5230 255\uFF08\u4E0D\u900F\u660E\uFF09\u4E4B\u9593\u3002","Change Tiled Sprite opacity":"\u66F4\u6539\u5E73\u92EA\u7CBE\u9748\u7684\u4E0D\u900F\u660E\u5EA6","Change the opacity of a Tiled Sprite. 0 is fully transparent, 255 is opaque (default).":"\u66F4\u6539\u4E00\u500B\u5E73\u92EA\u7CBE\u9748\u7684\u4E0D\u900F\u660E\u5EA6\uFF0C 0\u70BA\u5B8C\u5168\u900F\u660E\uFF0C 255\u70BA\u4E0D\u900F\u660E\uFF08\u9ED8\u8A8D\u503C\uFF09\u3002","Tint color":"\u4E3B\u984C\u984F\u8272","Change the tint of a Tiled Sprite. The default color is white.":"\u66F4\u6539\u5E73\u92EA\u7CBE\u9748\u7684\u8272\u8ABF\u3002\u9ED8\u8A8D\u984F\u8272\u662F\u767D\u8272\u3002","Change tint of _PARAM0_ to _PARAM1_":"\u628A _PARAM0_ \u7684\u984F\u8272\u66F4\u6539\u70BA _PARAM1_","Tint":"\u8457\u8272","Modify the width of a Tiled Sprite.":"\u4FEE\u6539\u5E73\u92EA\u7684\u7CBE\u9748\u7684\u5BEC\u5EA6\u3002","Test the width of a Tiled Sprite.":"\u4FEE\u6539\u5E73\u92EA\u7684\u7CBE\u9748\u7684\u5BEC\u5EA6\u3002","Modify the height of a Tiled Sprite.":"\u4FEE\u6539\u5E73\u92EA Sprite \u7684\u9AD8\u5EA6\u3002","Test the height of a Tiled Sprite.":"\u6E2C\u8A66Panel Sprite\u7684\u9AD8\u5EA6\u3002","Modify the size of a Tiled Sprite.":"\u4FEE\u6539\u74F7\u78DA\u7CBE\u9748\u7684\u5927\u5C0F\u3002","Change the size of _PARAM0_: set to _PARAM1_x_PARAM2_":"\u66F4\u6539_PARAM0_\u7684\u5927\u5C0F\uFF1A\u8A2D\u5B9A\u70BA _PARAM1_x_PARAM2_","Modify the angle of a Tiled Sprite.":"\u4FEE\u6539Panel Sprite\u7684\u89D2\u5EA6\u3002","Image X Offset":"\u5716\u50CF X \u504F\u79FB","Modify the offset used on the X axis when displaying the image.":"\u4FEE\u6539\u5728 X \u8EF8\u4E0A\u986F\u793A\u5716\u50CF\u6642\u7684\u504F\u79FB\u91CF\u3002","the X offset":"X \u504F\u79FB\u91CF","Image offset":"\u5716\u50CF\u504F\u79FB","Test the offset used on the X axis when displaying the image.":"\u6E2C\u8A66\u5728 X \u8EF8\u4E0A\u986F\u793A\u5716\u50CF\u6642\u7684\u504F\u79FB\u91CF\u3002","Return the offset used on the X axis when displaying the image.":"\u8FD4\u56DE\u986F\u793A\u5716\u50CF\u6642\u5728 X \u8EF8\u4E0A\u4F7F\u7528\u7684\u504F\u79FB\u91CF\u3002","Image Y Offset":"\u5716\u50CF Y \u504F\u79FB","Modify the offset used on the Y axis when displaying the image.":"\u4FEE\u6539\u5728 Y \u8EF8\u4E0A\u986F\u793A\u5716\u50CF\u6642\u7684\u504F\u79FB\u91CF\u3002","the Y offset":"Y \u504F\u79FB\u91CF","Test the offset used on the Y axis when displaying the image.":"\u6E2C\u8A66\u5728 Y \u8EF8\u4E0A\u986F\u793A\u5716\u50CF\u6642\u7684\u504F\u79FB\u91CF\u3002","Return the offset used on the Y axis when displaying the image.":"\u8FD4\u56DE\u986F\u793A\u5716\u50CF\u6642\u5728 Y \u8EF8\u4E0A\u4F7F\u7528\u7684\u504F\u79FB\u91CF\u3002","Change the image of a Tiled Sprite.":"\u66F4\u6539\u5E73\u92EA\u7CBE\u9748\u7684\u5716\u50CF\u3002","Set image _PARAM1_ on _PARAM0_":"\u5728 _PARAM0_ \u4E0A\u8A2D\u5B9A\u5716\u50CF _PARAM1_","Allows diagonals":"\u5141\u8A31\u5C0D\u89D2\u7DDA","Path smoothing":"\u8DEF\u5F91\u5E73\u6ED1","Rotation speed":"\u65CB\u8F49\u901F\u5EA6","Rotate object":"\u65CB\u8F49\u7269\u4EF6","Angle offset":"\u89D2\u5EA6\u504F\u79FB","Cell width":"\u55AE\u5143\u683C\u5BEC\u5EA6","Virtual Grid":"\u865B\u64EC\u7DB2\u683C","Cell height":"\u55AE\u5143\u683C\u9AD8\u5EA6","X offset":"X \u504F\u79FB\u91CF","Y offset":"Y \u504F\u79FB\u91CF","Extra border size":"\u984D\u5916\u908A\u6846\u5927\u5C0F","Smoothing max cell gap":"\u5E73\u6ED1\u6700\u5927\u55AE\u5143\u9593\u9699","It's recommended to leave a max gap of 1 cell. Setting it to 0 disable the smoothing.":"\u5EFA\u8B70\u4FDD\u7559 1 \u500B\u55AE\u5143\u683C\u7684\u6700\u5927\u9593\u9699\u3002\u5C07\u5176\u8A2D\u5B9A\u70BA 0 \u7981\u7528\u5E73\u6ED1\u3002","Impassable obstacle":"\u4E0D\u53EF\u901A\u884C\u7684\u969C\u7919","Cost (if not impassable)":"\u640D\u5931(\u5982\u679C\u4E0D\u53EF\u901A\u884C)","Pathfinding behavior":"\u5C0B\u8DEF\u884C\u70BA","Pathfinding":"\u5C0B\u8DEF","Move objects to a target while avoiding all objects that are flagged as obstacles.":"\u5C07\u7269\u4EF6\u79FB\u52D5\u5230\u76EE\u6A19\uFF0C\u540C\u6642\u907F\u958B\u6A19\u8A18\u70BA\u969C\u7919\u7269\u7684\u6240\u6709\u7269\u4EF6\u3002","Move to a position":"\u79FB\u52D5\u5230\u67D0\u500B\u4F4D\u7F6E","Move the object to a position":"\u79FB\u52D5\u7269\u4EF6\u5230\u67D0\u500B\u4F4D\u7F6E","Move _PARAM0_ to _PARAM3_;_PARAM4_":"\u79FB\u52D5 _PARAM0_ \u5230 _PARAM3_;_PARAM4_","Movement on the path":"\u5728\u8DEF\u5F91\u4E0A\u79FB\u52D5","Destination X position":"\u76EE\u7684\u5730X\u5750\u6A19","Destination Y position":"\u76EE\u7684\u5730Y\u5750\u6A19","Path found":"\u8DEF\u5F91\u5C0B\u627E","Check if a path has been found.":"\u6AA2\u67E5\u662F\u5426\u627E\u5230\u8DEF\u5F91\u3002","A path has been found for _PARAM0_":"_PARAM0_ \u627E\u5230\u4E86\u8DEF\u5F91","Destination reached":"\u5230\u9054\u76EE\u7684\u5730","Check if the destination was reached.":"\u6AA2\u67E5\u662F\u5426\u5230\u9054\u76EE\u7684\u5730\u3002","_PARAM0_ reached its destination":"_ PARAM0 _reached \u5176\u76EE\u7684\u5730","Width of the cells":"\u55AE\u5143\u683C\u5BEC\u5EA6","Change the width of the cells of the virtual grid.":"\u66F4\u6539\u865B\u64EC\u7DB2\u683C\u7684\u55AE\u5143\u683C\u7684\u5BEC\u5EA6\u3002","the width of the virtual cells":"\u865B\u64EC\u55AE\u5143\u683C\u7684\u5BEC\u5EA6","Virtual grid":"\u865B\u64EC\u7DB2\u683C","Width of the virtual grid":"\u865B\u64EC\u7DB2\u683C\u7684\u5BEC\u5EA6","Compare the width of the cells of the virtual grid.":"\u6BD4\u8F03\u865B\u64EC\u7DB2\u683C\u55AE\u5143\u683C\u7684\u5BEC\u5EA6\u3002","Height of the cells":"\u55AE\u5143\u683C\u9AD8\u5EA6","Change the height of the cells of the virtual grid.":"\u66F4\u6539\u865B\u64EC\u7DB2\u683C\u7684\u55AE\u5143\u683C\u7684\u9AD8\u5EA6\u3002","the height of the virtual cells":"\u865B\u64EC\u55AE\u5143\u683C\u7684\u9AD8\u5EA6","Height of the virtual grid":"\u865B\u64EC\u7DB2\u683C\u7684\u9AD8\u5EA6","Compare the height of the cells of the virtual grid.":"\u6BD4\u8F03\u865B\u64EC\u7DB2\u683C\u7684\u55AE\u5143\u683C\u7684\u9AD8\u5EA6\u3002","Change the acceleration when moving the object":"\u79FB\u52D5\u7269\u4EF6\u6642\u66F4\u6539\u52A0\u901F","the acceleration on the path":"\u8DEF\u5F91\u4E0A\u7684\u52A0\u901F\u5EA6","Pathfinding configuration":"\u8DEF\u5F91\u5B9A\u4F4D\u914D\u7F6E","Compare the acceleration when moving the object":"\u5728\u79FB\u52D5\u7269\u4EF6\u6642\u6BD4\u8F03\u52A0\u901F\u5EA6","the acceleration":"\u52A0\u901F\u5EA6","Maximum speed":"\u6700\u5927\u901F\u5EA6","Change the maximum speed when moving the object":"\u79FB\u52D5\u7269\u4EF6\u6642\u66F4\u6539\u6700\u5927\u901F\u5EA6","the max. speed on the path":"\u8DEF\u5F91\u4E0A\u7684\u6700\u5927\u901F\u5EA6","Compare the maximum speed when moving the object":"\u6BD4\u8F03\u79FB\u52D5\u7269\u4EF6\u6642\u7684\u6700\u5927\u901F\u5EA6","the max. speed":"\u6700\u5927\u901F\u5EA6","Speed":"\u901F\u5EA6","Change the speed of the object on the path":"\u66F4\u6539\u8DEF\u5F91\u4E0A\u7269\u4EF6\u7684\u901F\u5EA6","the speed on the path":"\u8DEF\u5F91\u4E0A\u7684\u901F\u5EA6","Speed on its path":"\u8DEF\u5F91\u4E0A\u7684\u901F\u5EA6","Compare the speed of the object on its path.":"\u6BD4\u8F03\u7269\u9AD4\u5728\u5176\u8DEF\u5F91\u4E0A\u7684\u901F\u5EA6\u3002","the speed":"\u901F\u5EA6","Angle of movement on its path":"\u8DEF\u5F91\u4E0A\u7684\u79FB\u52D5\u89D2\u5EA6","Compare the angle of movement of an object on its path.":"\u6BD4\u8F03\u7269\u9AD4\u5728\u5176\u8DEF\u5F91\u4E0A\u7684\u904B\u52D5\u89D2\u5EA6\u3002","Angle of movement of _PARAM0_ is _PARAM2_ \xB1 _PARAM3_\xB0":"_PARAM0_ \u7684\u79FB\u52D5\u89D2\u5EA6\u70BA _PARAM2_ \xB1 _PARAM3_\xB0","Angle, in degrees":"\u89D2\u5EA6\uFF0C\u4EE5\u5EA6\u70BA\u55AE\u4F4D","Tolerance, in degrees":"\u516C\u5DEE\uFF08\u5EA6\uFF09","Angular maximum speed":"\u89D2\u7684\u6700\u5927\u901F\u5EA6","Change the maximum angular speed when moving the object":"\u79FB\u52D5\u7269\u4EF6\u6642\u66F4\u6539\u6700\u5927\u89D2\u901F\u5EA6","the max. angular speed on the path":"\u8DEF\u5F91\u4E0A\u7684\u6700\u5927\u89D2\u901F\u5EA6","Max angular speed (in degrees per second)":"\u6700\u5927\u89D2\u901F\u5EA6(\u5EA6/\u79D2)","Compare the maximum angular speed when moving the object":"\u6BD4\u8F03\u79FB\u52D5\u7269\u9AD4\u6642\u7684\u6700\u5927\u89D2\u901F\u5EA6","the max. angular speed":"\u6700\u5927\u89D2\u901F\u5EA6","Max angular speed to compare to (in degrees per second)":"\u8207\u4E4B\u6BD4\u8F03\u7684\u6700\u5927\u89D2\u901F\u5EA6(\u50CF\u7D20/\u79D2)","Rotation offset":"\u65CB\u8F49\u504F\u79FB\u91CF","Change the rotation offset applied when moving the object":"\u66F4\u6539\u79FB\u52D5\u7269\u4EF6\u6642\u61C9\u7528\u7684\u65CB\u8F49\u504F\u79FB\u91CF\u3002","the rotation offset on the path":"\u8DEF\u5F91\u4E0A\u7684\u65CB\u8F49\u504F\u79FB","Compare the rotation offset when moving the object":"\u6BD4\u8F03\u79FB\u52D5\u7269\u9AD4\u6642\u7684\u65CB\u8F49\u504F\u79FB\u91CF\u3002","the rotation offset":"\u65CB\u8F49\u504F\u79FB","Extra border":"\u984D\u5916\u908A\u6846","Change the size of the extra border applied to the object when planning a path":"\u5728\u898F\u5283\u8DEF\u5F91\u6642\u66F4\u6539\u61C9\u7528\u4E8E\u7269\u4EF6\u7684\u984D\u5916\u908A\u6846\u7684\u5927\u5C0F\u3002","the size of the extra border on the path":"\u8DEF\u5F91\u4E0A\u984D\u5916\u908A\u6846\u7684\u5927\u5C0F","Compare the size of the extra border applied to the object when planning a path":"\u5728\u898F\u5283\u8DEF\u5F91\u6642\u6BD4\u8F03\u61C9\u7528\u4E8E\u7269\u4EF6\u7684\u984D\u5916\u908A\u6846\u7684\u5927\u5C0F\u3002","Diagonal movement":"\u5C0D\u89D2\u79FB\u52D5","Allow or restrict diagonal movement on the path":"\u5141\u8A31\u6216\u9650\u5236\u8DEF\u5F91\u4E0A\u7684\u5C0D\u89D2\u7DDA\u79FB\u52D5\u3002","Allow diagonal movement for _PARAM0_ on the path: _PARAM2_":"\u5141\u8A31\u8DEF\u5F91\u4E0A_PARAM0_\u7684\u5C0D\u89D2\u7DDA\u79FB\u52D5\uFF1A_PARAM2_","Allow?":"\u662F\u5426\u5141\u8A31\uFF1F","Check if the object is allowed to move diagonally on the path":"\u6AA2\u67E5\u662F\u5426\u5141\u8A31\u7269\u4EF6\u5728\u8DEF\u5F91\u4E0A\u5C0D\u89D2\u79FB\u52D5","Diagonal moves allowed for _PARAM0_":"\u5141\u8A31 _ PARAM0 _ \u7684\u5C0D\u89D2\u7DDA\u79FB\u52D5","Rotate the object":"\u65CB\u8F49\u5C0D\u8C61","Enable or disable rotation of the object on the path":"\u555F\u7528\u6216\u7981\u7528\u8DEF\u5F91\u4E0A\u7269\u4EF6\u7684\u65CB\u8F49","Enable rotation of _PARAM0_ on the path: _PARAM2_":"\u555F\u7528 _ PARAM0 \u884C\u52D5\u7684\u65CB\u8F49\u8DEF\u5F91: _ PARAM2 _","Rotate object?":"\u65CB\u8F49\u7269\u9AD4?","Object rotated":"\u7269\u4EF6\u88AB\u65CB\u8F49","Check if the object is rotated when traveling on its path.":"\u6AA2\u67E5\u7269\u9AD4\u5728\u5176\u8DEF\u5F91\u4E0A\u884C\u99DB\u6642\u662F\u5426\u65CB\u8F49\u3002","_PARAM0_ is rotated when traveling on its path":"_ PARAM0 _is \u5728\u5176\u8DEF\u5F91\u4E0A\u79FB\u52D5\u6642\u65CB\u8F49","Get a waypoint X position":"\u53D6\u4E00\u500B\u8DEF\u5F91\u9EDE\u7684X\u5750\u6A19","Get next waypoint X position":"\u53D6\u4E0B\u4E00\u500B\u8DEF\u5F91\u9EDE\u7684X\u5750\u6A19","Node index (start at 0!)":"\u7BC0\u9EDE\u7D22\u5F15(0\u958B\u59CB)","Get a waypoint Y position":"\u53D6\u4E00\u500B\u8DEF\u5F91\u9EDE\u7684Y\u5750\u6A19","Get next waypoint Y position":"\u53D6\u4E0B\u4E00\u500B\u8DEF\u5F91\u9EDE\u7684Y\u5750\u6A19","Index of the next waypoint":"\u4E0B\u4E00\u500B\u8DEF\u5F91\u9EDE\u7684\u7D22\u5F15","Get the index of the next waypoint to reach":"\u5230\u4E0B\u4E00\u500B\u95DC\u9375\u9EDE\u6307\u6A19\u9054\u5230","Waypoint count":"\u8DEF\u5F91\u9EDE\u8A08\u6578","Get the number of waypoints on the path":"\u7372\u53D6\u8DEF\u5F91\u4E0A\u7684\u9EDE\u6578","Last waypoint X position":"\u6700\u540E\u822A\u9EDE X \u4F4D\u7F6E","Last waypoint Y position":"\u6700\u540E\u822A\u9EDE Y \u4F4D\u7F6E","Acceleration of the object on the path":"\u7269\u4EF6\u5728\u8DEF\u5F91\u4E0A\u7684\u52A0\u901F\u5EA6","Maximum speed of the object on the path":"\u8DEF\u5F91\u4E0A\u7269\u4EF6\u7684\u6700\u5927\u901F\u5EA6","Speed of the object on the path":"\u7269\u4EF6\u5728\u8DEF\u5F91\u4E0A\u7684\u901F\u5EA6","Angular maximum speed of the object on the path":"\u7269\u9AD4\u5728\u8DEF\u5F91\u4E0A\u7684\u89D2\u5EA6\u6700\u5927\u901F\u5EA6","Rotation offset applied the object on the path":"\u65CB\u8F49\u504F\u79FB\u61C9\u7528\u4E86\u8DEF\u5F91\u4E0A\u7684\u7269\u4EF6","Extra border applied the object on the path":"\u984D\u5916\u7684\u908A\u6846\u61C9\u7528\u8DEF\u5F91\u4E0A\u7684\u7269\u4EF6","Width of a cell":"\u55AE\u5143\u7684\u5BEC\u5EA6","Height of a cell":"\u55AE\u5143\u7684\u9AD8\u5EA6","Grid X offset":"\u7DB2\u683C X \u504F\u79FB\u91CF","X offset of the virtual grid":"\u865B\u64EC\u7DB2\u683C\u7684X\u504F\u79FB\u91CF","Grid Y offset":"\u7DB2\u683CY \u504F\u79FB","Y offset of the virtual grid":"\u865B\u64EC\u7DB2\u683C\u7684Y\u504F\u79FB\u91CF","Obstacle for pathfinding":"\u5C0B\u8DEF\u969C\u7919","Flag objects as being obstacles for pathfinding.":"\u6A19\u8A18\u7269\u4EF6\u70BA\u8DEF\u5F91\u969C\u7919\u7269\u3002","Cost":"\u958B\u92B7","Change the cost of going through the object.":"\u66F4\u6539\u901A\u904E\u7269\u4EF6\u7684\u6210\u672C\u3002","the cost":"\u4EE3\u50F9","Obstacles":"\u969C\u7919","Compare the cost of going through the object":"\u6BD4\u8F03\u901A\u904E\u7269\u4EF6\u7684\u6210\u672C","Should object be impassable":"\u5982\u679C\u7269\u9AD4\u7121\u6CD5\u901A\u904E","Decide if the object is an impassable obstacle.":"\u5224\u65B7\u8A72\u7269\u9AD4\u662F\u5426\u70BA\u7121\u6CD5\u901A\u904E\u7684\u969C\u7919\u7269\u3002","Set _PARAM0_ as an impassable obstacle: _PARAM2_":"\u5C07 _PARAM0_ \u8A2D\u5B9A\u70BA\u7121\u6CD5\u901A\u884C\u7684\u969C\u7919\uFF1A _PARAM2_","Impassable":"\u7121\u6CD5\u901A\u904E","Check if the obstacle is impassable.":"\u6AA2\u67E5\u969C\u7919\u7269\u662F\u5426\u7121\u6CD5\u901A\u904E\u3002","_PARAM0_ is impassable":"_PARAM0_ \u662F\u7121\u6CD5\u901A\u884C\u7684","Obstacle cost":"\u969C\u7919\u958B\u92B7","Margins":"\u908A\u754C","Panel Sprite (9-patch) Object":"Panel Sprite (\"9-patch\")\u7269\u4EF6","Panel Sprite (\"9-patch\")":"\u9762\u677F\u7CBE\u9748 (\"9-patch\")","An image with edges and corners that are stretched separately from the full image.":"\u908A\u7DE3\u548C\u89D2\u843D\u5206\u5225\u8207\u5B8C\u6574\u5716\u50CF\u5206\u958B\u7684\u5716\u50CF\u3002","Compare the opacity of a Panel Sprite, between 0 (fully transparent) to 255 (opaque).":"\u6BD4\u8F03\u9762\u677F\u7CBE\u9748\u7684\u4E0D\u900F\u660E\u5EA6\uFF0C\u4ECB\u4E8E0\uFF08\u5B8C\u5168\u900F\u660E\uFF09\u5230255\uFF08\u4E0D\u900F\u660E\uFF09\u4E4B\u9593\u3002","Change Panel Sprite opacity":"\u66F4\u6539\u9762\u677F\u7CBE\u9748\u7684\u4E0D\u900F\u660E\u5EA6","Change the opacity of a Panel Sprite. 0 is fully transparent, 255 is opaque (default).":"\u66F4\u6539\u9762\u677F\u7CBE\u9748\u7684\u4E0D\u900F\u660E\u5EA6\u3002 0\u662F\u5B8C\u5168\u900F\u660E\u7684\uFF0C255\u662F\u4E0D\u900F\u660E\u7684\uFF08\u9ED8\u8A8D\uFF09\u3002","Panel Sprite":"\u9762\u677F\u7CBE\u9748","Change the tint of a Panel Sprite. The default color is white.":"\u66F4\u6539\u9762\u677F\u7CBE\u9748\u7684\u8272\u8ABF\u3002\u9ED8\u8A8D\u984F\u8272\u70BA\u767D\u8272\u3002","Modify the width of a Panel Sprite.":"\u4FEE\u6539\u9762\u677F\u7CBE\u9748\u7684\u5BEC\u5EA6\u3002","Size and angle":"\u5927\u5C0F\u548C\u89D2\u5EA6","Check the width of a Panel Sprite.":"\u6AA2\u67E5\u9762\u677F\u7CBE\u9748\u7684\u5BEC\u5EA6\u3002","Modify the height of a Panel Sprite.":"\u4FEE\u6539 Panel Sprite \u7684\u9AD8\u5EA6\u3002","Check the height of a Panel Sprite.":"\u6AA2\u67E5 Panel Sprite \u7684\u9AD8\u5EA6\u3002","Image name (deprecated)":"\u5716\u50CF\u540D\u7A31 (\u5DF2\u5EE2\u68C4)","Change the image of a Panel Sprite.":"\u66F4\u6539\u9762\u677F\u7CBE\u9748\u7684\u5716\u50CF\u3002","Image name":"\u5716\u50CF\u540D\u7A31","Image file (or image resource name)":"\u5716\u50CF\u6587\u4EF6 (\u6216\u5716\u50CF\u8CC7\u6E90\u540D\u7A31)","Allow diagonals":"\u5141\u8A31\u5C0D\u89D2\u7DDA","Only use acceleration to turn back (deprecated \u2014 best left unchecked)":"\u50C5\u4F7F\u7528\u52A0\u901F\u4F86\u8F49\u56DE\uFF08\u5DF2\u68C4\u7528 - \u6700\u597D\u4FDD\u6301\u4E0D\u52FE\u9078\uFF09","Top-Down":"\u81EA\u4E0A\u800C\u4E0B","Isometry 2:1 (26.565\xB0)":"\u7B49\u8DDD 2:1 (26.565\xB0)","True Isometry (30\xB0)":"\u771F\u5BE6\u7B49\u8DDD (30\xB0)","Custom Isometry":"\u81EA\u5B9A\u7FA9\u5E7E\u4F55\u9AD4","Custom isometry angle (between 1deg and 44deg)":"\u81EA\u5B9A\u7FA9\u7B49\u8DDD\u89D2\u5EA6(\u57281\u5EA6\u548C44\u5EA6\u4E4B\u9593)","If you choose \"Custom Isometry\", this allows to specify the angle of your isometry projection.":"\u5982\u679C\u4F60\u9078\u64C7\u201C\u81EA\u5B9A\u7FA9\u7B49\u8DDD\u201D\uFF0C\u9019\u5141\u8A31\u6307\u5B9A\u4F60\u7684\u7B49\u8DDD\u6295\u5F71\u7684\u89D2\u5EA6","Movement angle offset":"\u79FB\u52D5\u89D2\u5EA6\u504F\u79FB","Usually 0, unless you choose an *Isometry* viewpoint in which case -45 is recommended.":"\u901A\u5E38\u70BA0\uFF0C\u9664\u975E\u60A8\u9078\u64C7\u4E00\u500B *Isometry* \u8996\u9EDE\uFF0C\u5728\u9019\u7A2E\u60C5\u6CC1\u4E0B\u63A8\u85A6-45","Top-down movement":"\u81EA\u4E0A\u800C\u4E0B\u7684\u904B\u52D5","Allows to move an object in either 4 or 8 directions, with the keyboard (default), a virtual stick (for this, also add the \"Top-down multitouch controller mapper\" behavior and a\"Multitouch Joystick\" object), gamepad or manually using events.":"\u5141\u8A31\u5C0D\u8C61\u5728\u56DB\u500B\u6216\u516B\u500B\u65B9\u5411\u4E2D\u79FB\u52D5\uFF0C\u4F7F\u7528\u9375\u76E4\uFF08\u9ED8\u8A8D\uFF09\uFF0C\u865B\u64EC\u6416\u687F\uFF08\u70BA\u6B64\uFF0C\u9084\u9700\u6DFB\u52A0\u300C\u81EA\u4E0A\u800C\u4E0B\u7684\u591A\u9EDE\u89F8\u63A7\u63A7\u5236\u5668\u6620\u5C04\u5668\u300D\u884C\u70BA\u548C\u300C\u591A\u9EDE\u89F8\u63A7\u6416\u687F\u300D\u5C0D\u8C61\uFF09\u3001\u904A\u6232\u624B\u67C4\u6216\u4F7F\u7528\u4E8B\u4EF6\u624B\u52D5\u3002","Top-down movement (4 or 8 directions)":"\u81EA\u4E0A\u800C\u4E0B\u7684\u904B\u52D5\uFF084\u62168\u500B\u65B9\u5411\uFF09","Move objects left, up, right, and down (and, optionally, diagonally).":"\u5411\u5DE6\u3001\u5411\u4E0A\u3001\u5411\u53F3\u548C\u5411\u4E0B\u79FB\u52D5\u7269\u4EF6(\u9084\u53EF\u4EE5\u9078\u64C7\u5C0D\u89D2\u7DDA\u65B9\u5411)\u3002","Simulate a press of left key.":"\u6A21\u64EC\u5DE6\u9375\u7684\u6309\u4E0B\u3002","Top-down controls":"\u81EA\u4E0A\u800C\u4E0B\u7684\u63A7\u5236","Simulate a press of right key.":"\u6A21\u64EC\u53F3\u9375\u7684\u6309\u4E0B\u3002","Simulate a press of up key.":"\u6A21\u64EC\u4E0A\u9375\u7684\u6309\u4E0B\u3002","Simulate a press of down key.":"\u6A21\u64EC\u6309\u4E0B\u9375\u6A21\u64EC\u3002","Simulate a press of a key.\nValid keys are Left, Right, Up, Down.":"\u6A21\u64EC\u6309\u4E0B\u4E00\u500B\u9375\u3002\n\u6709\u6548\u6309\u9375\u70BA\u5DE6\uFF0C\u53F3\uFF0C\u4E0A\uFF0C\u4E0B\u3002","Simulate stick control":"\u6A21\u64EC\u6416\u687F\u63A7\u5236","Simulate a stick control.":"\u6A21\u64EC\u6416\u687F\u63A7\u5236\u3002","Simulate a stick control for _PARAM0_ with a _PARAM2_ angle and a _PARAM3_ force":"\u4EE5 _PARAM2_ \u7684\u89D2\u5EA6\u548C _PARAM3_ \u7684\u529B\u5EA6\u6A21\u64EC _PARAM0_ \u7684\u6416\u687F\u63A7\u5236","Stick angle (in degrees)":"\u6416\u687F\u89D2\u5EA6(\u4EE5\u5EA6\u70BA\u55AE\u4F4D)","In top-down movement, a stick angle of 0\xB0 moves the object to the right. 90\xB0 moves it down, and -90\xB0 moves it up.":"\u5728\u81EA\u4E0A\u800C\u4E0B\u7684\u904B\u52D5\u4E2D\uFF0C\u6416\u687F\u89D2\u5EA6\u70BA0\xB0\u6642\uFF0C\u7269\u9AD4\u5411\u53F3\u79FB\u52D5\u300290\xB0\u6642\u5411\u4E0B\u79FB\u52D5\uFF0C\u800C-90\xB0\u6642\u5411\u4E0A\u79FB\u52D5\u3002","Stick force (between 0 and 1)":"\u6416\u687F\u529B\u5EA6(\u4ECB\u4E8E0\u548C1\u4E4B\u9593)","Top-down state":"\u81EA\u4E0A\u800C\u4E0B\u7684\u72C0\u614B","Stick angle":"\u7F6E\u9802\u89D2\u5EA6","Return the angle of the simulated stick input (in degrees)":"\u8FD4\u56DE\u6A21\u64EC\u687F\u8F38\u5165\u7684\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09","Check if the object is moving.":"\u6AA2\u6E2C\u7269\u4EF6\u662F\u5426\u6B63\u5728\u79FB\u52D5","Change the acceleration of the object":"\u8B8A\u66F4\u7269\u4EF6\u7684\u52A0\u901F\u5EA6","Top-down configuration":"\u81EA\u4E0A\u800C\u4E0B\u7684\u914D\u7F6E","Compare the acceleration of the object":"\u6BD4\u8F03\u7269\u4EF6\u7684\u52A0\u901F\u5EA6","Change the deceleration of the object":"\u6539\u8B8A\u7269\u4EF6\u7684\u6E1B\u901F\u5EA6","the deceleration":"\u6E1B\u901F","Compare the deceleration of the object":"\u6BD4\u8F03\u7269\u4EF6\u7684\u52A0\u901F\u5EA6","Change the maximum speed of the object":"\u6539\u8B8A\u7269\u9AD4\u7684\u6700\u5927\u89D2\u901F\u5EA6","Compare the maximum speed of the object":"\u6BD4\u8F03\u7269\u4EF6\u7684\u6700\u5927\u901F\u5EA6","Compare the speed of the object":"\u6BD4\u8F03\u7269\u4EF6\u7684\u901F\u5EA6","Change the maximum angular speed of the object":"\u6539\u8B8A\u7269\u9AD4\u7684\u6700\u5927\u89D2\u901F\u5EA6","Compare the maximum angular speed of the object":"\u6BD4\u8F03\u7269\u4EF6\u7684\u6700\u5927\u901F\u5EA6","Compare the rotation offset applied when moving the object":"\u66F4\u6539\u79FB\u52D5\u7269\u4EF6\u6642\u61C9\u7528\u7684\u65CB\u8F49\u504F\u79FB\u91CF\u3002","Angle of movement":"\u904B\u52D5\u7684\u89D2\u5EA6","Compare the angle of the top-down movement of the object.":"\u6BD4\u8F03\u7269\u4EF6\u81EA\u4E0A\u800C\u4E0B\u79FB\u52D5\u7684\u89D2\u5EA6\u3002","the angle of movement":"\u79FB\u52D5\u89D2\u5EA6","Tolerance (in degrees)":"\u516C\u5DEE(\u5EA6)","Speed on X axis":"X\u8EF8\u901F\u5EA6","Compare the velocity of the top-down movement of the object on the X axis.":"\u6BD4\u8F03\u7269\u4EF6\u5728X\u8EF8\u4E0A\u81EA\u4E0A\u800C\u4E0B\u79FB\u52D5\u7684\u901F\u5EA6\u3002","the speed of movement on X axis":"X\u8EF8\u4E0A\u7684\u79FB\u52D5\u901F\u5EA6","Speed on the X axis":"X\u8EF8\u901F\u5EA6","Change the speed on the X axis of the movement":"\u66F4\u6539\u79FB\u52D5\u7684 X \u8EF8\u4E0A\u7684\u901F\u5EA6","the speed on the X axis of the movement":"\u79FB\u52D5\u7684 X \u8EF8\u4E0A\u7684\u901F\u5EA6","Speed on Y axis":"Y\u8EF8\u901F\u5EA6","Compare the velocity of the top-down movement of the object on the Y axis.":"\u6BD4\u8F03\u7269\u4EF6\u5728 Y \u8EF8\u4E0A\u81EA\u4E0A\u800C\u4E0B\u79FB\u52D5\u7684\u901F\u5EA6\u3002","the speed of movement on Y axis":"Y \u8EF8\u4E0A\u7684\u79FB\u52D5\u901F\u5EA6","Speed on the Y axis":"Y\u8EF8\u901F\u5EA6","Change the speed on the Y axis of the movement":"\u66F4\u6539\u79FB\u52D5\u7684 Y \u8EF8\u4E0A\u7684\u901F\u5EA6","the speed on the Y axis of the movement":"\u79FB\u52D5\u7684 Y \u8EF8\u901F\u5EA6","Allow or restrict diagonal movement":"\u5141\u8A31\u6216\u9650\u5236\u5C0D\u89D2\u7DDA\u79FB\u52D5","Allow diagonal moves for _PARAM0_: _PARAM2_":"\u5C0D\u4E8E _PARAM0_\u5141\u8A31\u975E\u8EF8\u5411\u79FB\u52D5: _PARAM2_","Check if the object is allowed to move diagonally":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u88AB\u5141\u8A31\u6CBF\u5C0D\u89D2\u7DDA\u79FB\u52D5","Allow diagonal moves for _PARAM0_":"\u5141\u8A31 _PARAM0_ \u7684\u975E\u8EF8\u5411\u79FB\u52D5","Enable or disable rotation of the object":"\u555F\u7528\u6216\u7981\u7528\u8DEF\u5F91\u4E0A\u7269\u4EF6\u7684\u65CB\u8F49","Enable rotation of _PARAM0_: _PARAM2_":"\u5141\u8A31_PARAM0_\u65CB\u8F49\uFF1A _PARAM2_","Check if the object is rotated while traveling on its path.":"\u6AA2\u67E5\u7269\u9AD4\u5728\u5176\u8DEF\u5F91\u4E0A\u884C\u99DB\u6642\u662F\u5426\u65CB\u8F49\u3002","_PARAM0_ is rotated when moving":"_PARAM0_\u5728\u79FB\u52D5\u4E2D\u88AB\u65CB\u8F49","Acceleration of the object":"\u7269\u9AD4\u52A0\u901F\u5EA6","Deceleration of the object":"\u7269\u4EF6\u7684\u6E1B\u901F","Maximum speed of the object":"\u7269\u4EF6\u7684\u6700\u5927\u901F\u5EA6","Speed of the object":"\u7269\u9AD4\u7684\u901F\u5EA6","Angular maximum speed of the object":"\u7269\u9AD4\u7684\u89D2\u5EA6\u6700\u5927\u901F\u5EA6","Rotation offset applied to the object":"\u65CB\u8F49\u504F\u79FB\u61C9\u7528\u4E8E\u7269\u4EF6","Angle of the movement":"\u79FB\u52D5\u89D2\u5EA6","Angle, in degrees, of the movement":"\u79FB\u52D5\u89D2\u5EA6\uFF0C\u7A0B\u5EA6","Speed on the X axis of the movement":"\u79FB\u52D5X\u8EF8\u901F\u5EA6","Speed on the Y axis of the movement":"\u79FB\u52D5Y\u8EF8\u901F\u5EA6","the movement angle offset":"\u79FB\u52D5\u89D2\u5EA6\u504F\u79FB","Inventories":"\u80CC\u5305","Actions and conditions to store named inventories in memory, with items (indexed by their name), a count for each of them, a maximum count and an equipped state. Can be loaded/saved from/to a GDevelop variable.":"\u5728\u8A18\u61B6\u9AD4\u4E2D\u5B58\u5132\u5177\u540D\u5EAB\u5B58\u7684\u64CD\u4F5C\u548C\u689D\u4EF6\uFF0C\u5305\u542B\u6309\u540D\u7A31\u7DE8\u7D22\u5F15\u7684\u7269\u54C1\u3001\u6BCF\u500B\u7269\u54C1\u7684\u6578\u91CF\u3001\u6700\u5927\u6578\u91CF\u548C\u88DD\u5099\u72C0\u614B\u3002\u53EF\u4EE5\u5F9EGDevelop\u8B8A\u6578\u52A0\u8F09\u6216\u4FDD\u5B58\u3002","Add an item":"\u6DFB\u52A0\u7269\u54C1","Add an item in an inventory.":"\u5728\u80CC\u5305\u4E2D\u589E\u52A0\u4E00\u500B\u7269\u54C1","Add a _PARAM2_ to inventory _PARAM1_":"\u5411\u80CC\u5305 _PARAM1_\u4E2D\u6DFB\u52A0\u4E00\u500B _PARAM2_","Inventory name":"\u80CC\u5305\u540D","Item name":"\u7269\u54C1\u540D","Remove an item":"\u79FB\u9664\u4E00\u500B\u7269\u54C1","Remove an item from an inventory.":"\u5F9E\u4E00\u500B\u80CC\u5305\u4E2D\u79FB\u9664\u4E00\u500B\u7269\u54C1","Remove a _PARAM2_ from inventory _PARAM1_":"\u5F9E\u80CC\u5305_PARAM1_\u4E2D\u79FB\u9664\u4E00\u500B_PARAM2_","Item count":"\u7269\u54C1\u8A08\u6578","Compare the number of an item in an inventory.":"\u6BD4\u8F03\u4E00\u500B\u7269\u54C1\u5728\u4E00\u500B\u80CC\u5305\u4E2D\u7684\u7DE8\u865F","the count of _PARAM2_ in _PARAM1_":"_PARAM1_ \u4E2D _PARAM2_ \u7684\u500B\u6578","Has an item":"\u6709\u4E00\u500B\u7269\u54C1","Check if at least one of the specified items is in the inventory.":"\u6AA2\u67E5\u5728\u80CC\u5305\u4E2D\u662F\u5426\u542B\u6709\u81F3\u5C11\u4E00\u500B\u6307\u5B9A\u7269\u54C1","Inventory _PARAM1_ contains a _PARAM2_":"\u80CC\u5305_PARAM1_\u4E2D\u5305\u542B\u4E00\u500B_PARAM2_","Set a maximum count for an item":"\u8A2D\u5B9A\u4E00\u500B\u7269\u54C1\u7684\u6700\u5927\u6578\u91CF","Set the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"\u8A2D\u5B9A\u4E00\u500B\u80CC\u5305\u4E2D\u80FD\u5920\u4E00\u500B\u7269\u54C1\u6DFB\u52A0\u6307\u5B9A\u7269\u54C1\u7684\u6700\u5927\u6578\u91CF\u3002\u5728\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u6BCF\u500B\u7269\u54C1\u7684\u4E0A\u9650\u6578\u91CF\u662F\u7121\u9650\u7684\u3002","Set the maximum count for _PARAM2_ in inventory _PARAM1_ to _PARAM3_":"\u5C07\u5728\u80CC\u5305_PARAM1_\u4E2D_PARAM2_\u7684\u6700\u5927\u6578\u91CF\u8A2D\u5B9A\u6210_PARAM3_","Maximum count":"\u6700\u5927\u6578\u91CF","Set unlimited count for an item":"\u5C07\u4E00\u500B\u7269\u54C1\u7684\u6700\u5927\u6578\u91CF\u8A2D\u5B9A\u6210\u7121\u9650\u591A","Allow an unlimited amount of an object to be in an inventory. This is the case by default for each item.":"\u5141\u8A31\u80CC\u5305\u4E2D\u5B58\u5728\u6700\u5927\u6578\u91CF\u70BA\u7121\u9650\u591A\u7684\u4E00\u500B\u7269\u54C1(\u7269\u54C1\u6700\u5927\u6578\u91CF\u7684\u9ED8\u8A8D\u8A2D\u5B9A\u662F\u70BA\u7121\u9650\u591A)\u3002","Allow an unlimited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"\u5141\u8A31\u5728\u80CC\u5305_PARAM1: _PARAM3_\u4E2D\u6709\u4E0D\u9650\u6578\u91CF\u7684\u7269\u54C1_PARAM2_","Allow an unlimited amount?":"\u5141\u8A31\u4E0D\u9650\u6578\u91CF\uFF1F","Item full":"\u7269\u54C1\u5DF2\u6EFF","Check if an item has reached its maximum number allowed in the inventory.":"\u6AA2\u67E5\u7269\u6599\u662F\u5426\u5DF2\u9054\u5230\u5EAB\u5B58\u4E2D\u5141\u8A31\u7684\u6700\u5927\u6578\u91CF\u3002","Inventory _PARAM1_ is full of _PARAM2_":"\u80CC\u5305 _PARAM1_ is full of _PARAM2_","Equip an item":"\u88DD\u5099\u4E00\u500B\u7269\u54C1","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"\u5C07\u9805\u76EE\u6A19\u8A18\u70BA\u6B63\u5728\u88DD\u5099\u3002 \u5982\u679C\u9805\u76EE\u6578\u70BA0\uFF0C\u5247\u4E0D\u6703\u88AB\u6A19\u8A18\u70BA\u88DD\u5099\u3002","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"\u8A2D\u5B9A _PARAM2 \u76E1\u53EF\u80FD\u88DD\u5099\u5EAB\u5B58 _PARAM1_: _ Param3 _","Equip?":"\u88DD\u5099\u55CE\uFF1F","Item equipped":"\u88DD\u5099\u7684\u7269\u54C1","Check if an item is equipped.":"\u6AA2\u67E5\u662F\u5426\u88DD\u5099\u4E86\u7269\u54C1","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM2_\u5728\u80CC\u5305_PARAM1_\u4E2D\u88AB\u88DD\u5099","Save an inventory in a scene variable":"\u5728\u5834\u666F\u8B8A\u91CF\u4E2D\u4FDD\u5B58\u5EAB\u5B58","Save all the items of the inventory in a scene variable, so that it can be restored later.":"\u5C07\u5EAB\u5B58\u7684\u6240\u6709\u9805\u76EE\u4FDD\u5B58\u5728\u5834\u666F\u8B8A\u91CF\u4E2D\uFF0C\u4EE5\u4FBF\u4E4B\u540E\u53EF\u4EE5\u9084\u539F\u3002","Save inventory _PARAM1_ in variable _PARAM2_":"\u5C07\u5EAB\u5B58_PARAM1_\u4FDD\u5B58\u5728\u8B8A\u91CF_PARAM2_\u4E2D","Load an inventory from a scene variable":"\u5F9E\u5834\u666F\u8B8A\u91CF\u52A0\u8F09\u5EAB\u5B58","Load the content of the inventory from a scene variable.":"\u5F9E\u5834\u666F\u8B8A\u91CF\u52A0\u8F09\u5EAB\u5B58\u4E2D\u7684\u5167\u5BB9\u3002","Load inventory _PARAM1_ from variable _PARAM2_":"\u5F9E_PARAM2_\u4E2D\u8B80\u53D6\u80CC\u5305_PARAM1_","Get the number of an item in the inventory":"\u7372\u53D6\u4E00\u500B\u7269\u54C1\u5728\u6B64\u80CC\u5305\u4E2D\u7684\u7DE8\u865F","Item maximum":"\u9805\u76EE\u6700\u5927\u503C","Get the maximum of an item in the inventory, or 0 if it is unlimited":"\u7372\u53D6\u5EAB\u5B58\u4E2D\u7269\u54C1\u7684\u6700\u5927\u503C\uFF0C\u5982\u679C\u662F\u7121\u9650\u7684\uFF0C\u5247\u70BA0","Spine json":"Spine json","Skin":"\u76AE\u819A","System information":"\u7CFB\u7D71\u4FE1\u606F","Conditions to check if the device has a touchscreen, is a mobile, or if the game runs as a preview.":"\u6AA2\u67E5\u8A2D\u5099\u662F\u5426\u5177\u5099\u89F8\u63A7\u87A2\u5E55\u3001\u662F\u5426\u70BA\u884C\u52D5\u8A2D\u5099\uFF0C\u6216\u904A\u6232\u662F\u5426\u4EE5\u9810\u89BD\u6A21\u5F0F\u904B\u884C\u3002","Is a mobile device":"\u662F\u4E00\u500B\u79FB\u52D5\u8A2D\u5099","Check if the device running the game is a mobile device (phone or tablet on iOS, Android or other mobile devices). The game itself might be a web game or distributed as a native mobile app (to check this precisely, use other conditions).":"\u6AA2\u67E5\u904B\u884C\u904A\u6232\u7684\u8A2D\u5099\u662F\u5426\u662F\u79FB\u52D5\u8A2D\u5099(iOS\u3001 Android \u6216\u5176\u4ED6\u79FB\u52D5\u8A2D\u5099\u4E0A\u7684\u624B\u6A5F\u6216\u5E73\u677F\u96FB\u8166)\u3002\u904A\u6232\u672C\u8EAB\u53EF\u80FD\u662F\u4E00\u500B\u7DB2\u7D61\u904A\u6232\uFF0C\u6216\u8005\u4F5C\u70BA\u672C\u5730\u79FB\u52D5\u61C9\u7528\u7A0B\u5E8F\u767C\u5E03(\u70BA\u4E86\u7CBE\u78BA\u5730\u6AA2\u67E5\u9019\u4E00\u9EDE\uFF0C\u4F7F\u7528\u5176\u4ED6\u689D\u4EF6)\u3002","The device is a mobile device":"\u8A72\u8A2D\u5099\u662F\u4E00\u500B\u79FB\u52D5\u8A2D\u5099","Is a native mobile app":"\u662F\u4E00\u500B\u672C\u5730\u7684\u79FB\u52D5\u61C9\u7528\u7A0B\u5E8F","Check if the game is running as a native mobile app (iOS or Android app).":"\u6AA2\u67E5\u904A\u6232\u662F\u5426\u4F5C\u70BA\u672C\u5730\u79FB\u52D5\u61C9\u7528\u7A0B\u5E8F(iOS \u6216 Android \u61C9\u7528\u7A0B\u5E8F)\u904B\u884C\u3002","The game is running as a native mobile app":"\u9019\u500B\u904A\u6232\u662F\u4F5C\u70BA\u672C\u5730\u79FB\u52D5\u61C9\u7528\u7A0B\u5E8F\u904B\u884C\u7684","Is a native desktop app":"\u662F\u4E00\u500B\u672C\u5730\u684C\u9762\u61C9\u7528\u7A0B\u5E8F","Check if the game is running as a native desktop app.":"\u6AA2\u67E5\u904A\u6232\u662F\u5426\u4F5C\u70BA\u672C\u5730\u684C\u9762\u61C9\u7528\u7A0B\u5E8F\u904B\u884C\u3002","The game is running as a native desktop app":"\u9019\u500B\u904A\u6232\u662F\u4F5C\u70BA\u4E00\u500B\u672C\u5730\u684C\u9762\u61C9\u7528\u7A0B\u5E8F\u904B\u884C\u7684","Is WebGL supported":"\u662F\u5426\u652F\u6301 WebGL","Check if GPU accelerated WebGL is supported on the target device.":"\u6AA2\u67E5\u76EE\u6A19\u8A2D\u5099\u4E0A\u662F\u5426\u652F\u6301 GPU \u52A0\u901F\u7684 WebGL\u3002","WebGL is available":"WebGL \u53EF\u7528","Is the game running as a preview":"\u904A\u6232\u4F5C\u70BA\u9810\u89BD\u904B\u884C","Check if the game is currently being previewed in the editor. This can be used to enable a \"Debug mode\" or do some work only in previews.":"\u6AA2\u67E5\u7576\u524D\u662F\u5426\u6B63\u5728\u7DE8\u8F2F\u5668\u4E2D\u9810\u89BD\u904A\u6232\u3002\u9019\u53EF\u7528\u4E8E\u555F\u7528\u201C\u8ABF\u8A66\u6A21\u5F0F\u201D\u6216\u50C5\u5728\u9810\u89BD\u4E2D\u57F7\u884C\u67D0\u4E9B\u5DE5\u4F5C\u3002","The game is being previewed in the editor":"\u904A\u6232\u6B63\u5728\u7DE8\u8F2F\u5668\u4E2D\u9810\u89BD","Device has a touchscreen":"\u8A2D\u5099\u6709\u89F8\u6478\u5C4F\u5E55","Check if the device running the game has a touchscreen (typically Android phones, iPhones, iPads, but also some laptops).":"\u6AA2\u67E5\u904B\u884C\u904A\u6232\u7684\u8A2D\u5099\u662F\u5426\u6709\u89F8\u6478\u5C4F(\u5178\u578B\u7684\u5B89\u5353\u624B\u6A5F\u3001 iPhone\u3001 iPads \u4EE5\u53CA\u4E00\u4E9B\u7B46\u8A18\u672C\u96FB\u8166)\u3002","The device has a touchscreen":"\u8A2D\u5099\u6709\u89F8\u6478\u5C4F\u5E55","Box (rectangle)":"\u6846\u6846 (\u77E9\u5F62)","Custom polygon":"\u81EA\u5B9A\u7FA9\u591A\u908A\u5F62","Shape":"\u5F62\u72C0","Dynamic object":"\u975C\u614B\u7269\u4EF6","Fixed rotation":"\u56FA\u5B9A\u65CB\u8F49","Consider as bullet (better collision handling)":"\u8003\u616E\u4F5C\u70BA\u5B50\u5F48 (\u66F4\u597D\u7684\u78B0\u649E\u8655\u7406)","Mass density":"\u8CEA\u91CF\u5BC6\u5EA6","Friction":"\u6469\u64E6","Restitution (elasticity)":"\u6062\u5FA9\u539F\u72C0 (\u5F48\u6027):","Linear Damping":"\u7DDA\u6027\u963B\u5C3C","Angular Damping":"\u89D2\u963B\u5C3C","Gravity on X axis (in m/s\xB2)":"X \u8EF8\u4E0A\u7684\u91CD\u529B(m/s\u5E73\u65B9)","Gravity on Y axis (in m/s\xB2)":"Y \u8EF8\u4E0A\u7684\u91CD\u529B(m/s\u5E73\u65B9)","X Scale: number of pixels for 1 meter":"X \u7E2E\u653E\uFF1A1\u7C73\u50CF\u7D20\u6578","Y Scale: number of pixels for 1 meter":"Y \u7E2E\u653E\uFF1A1\u7C73\u50CF\u7D20\u6578","X scale: number of pixels for 1 meter":"Y \u7E2E\u653E\uFF1A1\u7C73\u50CF\u7D20\u6578","Y scale: number of pixels for 1 meter":"Y \u7E2E\u653E\uFF1A1\u7C73\u50CF\u7D20\u6578","Deletion margin":"\u522A\u9664\u908A\u754C","Margin before deleting the object, in pixels.":"\u522A\u9664\u7269\u4EF6\u4E4B\u524D\u7684\u908A\u8DDD\uFF0C\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D","Unseen object grace distance":"\u672A\u898B\u7269\u4EF6\u7684\u5408\u7406\u8DDD\u96E2","If the object hasn't been visible yet, don't delete it until it travels this far beyond the screen (in pixels). Useful to avoid objects being deleted before they are visible when they spawn.":"\u5982\u679C\u7269\u4EF6\u5C1A\u672A\u53EF\u898B\uFF0C\u5247\u5728\u5176\u5728\u87A2\u5E55\u4E0A\u8D85\u51FA\u9019\u500B\u8DDD\u96E2\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u4E4B\u524D\u4E0D\u8981\u522A\u9664\u5B83\u3002\u9019\u5C0D\u65BC\u907F\u514D\u7269\u4EF6\u5728\u51FA\u73FE\u4E4B\u524D\u88AB\u522A\u9664\u975E\u5E38\u6709\u7528\u3002","Destroy Outside Screen Behavior":"\u5C4F\u5E55\u5916\u92B7\u6BC0\u7684\u884C\u70BA","This behavior can be used to destroy objects when they go outside of the bounds of the 2D camera. Useful for 2D bullets or other short-lived objects. Don't use it for 3D objects in a FPS/TPS game or any game with a camera not being a top view (for 3D objects, prefer comparing the position, for example Z position to see if an object goes outside of the bound of the map). If the object appears outside of the screen, it's not removed unless it goes beyond the unseen object grace distance.":"\u9019\u7A2E\u884C\u70BA\u53EF\u4EE5\u7528\u4F86\u522A\u9664\u7576\u7269\u4EF6\u8D85\u51FA2D\u76F8\u6A5F\u7684\u908A\u754C\u6642\u7684\u7269\u4EF6\u3002\u5C0D\u65BC2D\u5B50\u5F48\u6216\u5176\u4ED6\u77ED\u66AB\u5B58\u5728\u7684\u7269\u4EF6\u975E\u5E38\u6709\u7528\u3002\u8ACB\u52FF\u5C07\u5176\u7528\u65BCFPS/TPS\u904A\u6232\u4E2D\u76843D\u7269\u4EF6\uFF0C\u6216\u5728\u4EFB\u4F55\u76F8\u6A5F\u4E0D\u662F\u4FEF\u8996\u7684\u904A\u6232\u4E2D\uFF08\u5C0D\u65BC3D\u7269\u4EF6\uFF0C\u5EFA\u8B70\u6BD4\u8F03\u4F4D\u7F6E\uFF0C\u4F8B\u5982Z\u4F4D\u7F6E\u4EE5\u67E5\u770B\u7269\u4EF6\u662F\u5426\u8D85\u51FA\u5730\u5716\u7684\u908A\u754C\uFF09\u3002\u5982\u679C\u7269\u4EF6\u51FA\u73FE\u5728\u87A2\u5E55\u5916\uFF0C\u5247\u9664\u975E\u5B83\u8D85\u904E\u672A\u898B\u7269\u4EF6\u7684\u5408\u7406\u8DDD\u96E2\uFF0C\u5426\u5247\u4E0D\u6703\u5C07\u5176\u522A\u9664\u3002","Destroy when outside of the screen":"\u5728\u5C4F\u5E55\u5916\u9762\u6D88\u5931","DestroyOutside":"\u51FA\u754C\u522A\u9664","Destroy objects automatically when they go outside of the 2D camera borders.":"\u7576\u7269\u4EF6\u8D85\u51FA 2D \u76F8\u6A5F\u908A\u754C\u6642\u81EA\u52D5\u92B7\u6BC0\u7269\u4EF6\u3002","Additional border (extra distance before deletion)":"\u984D\u5916\u908A\u754C\uFF08\u522A\u9664\u524D\u7684\u984D\u5916\u8DDD\u96E2\uFF09","the extra distance (in pixels) the object must travel beyond the screen before it gets deleted":"\u7269\u4EF6\u5FC5\u9808\u8D85\u904E\u87A2\u5E55\u7684\u984D\u5916\u8DDD\u96E2\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u624D\u80FD\u88AB\u522A\u9664","the additional border":"\u9644\u52A0\u908A\u6846","Destroy outside configuration":"\u92B7\u6BC0\u5916\u90E8\u914D\u7F6E","the grace distance (in pixels) before deleting the object if it has never been visible on the screen. Useful to avoid objects being deleted before they are visible when they spawn":"\u82E5\u7269\u4EF6\u5F9E\u672A\u5728\u87A2\u5E55\u4E0A\u986F\u793A\uFF0C\u5247\u5728\u522A\u9664\u7269\u4EF6\u4E4B\u524D\u7684\u512A\u96C5\u8DDD\u96E2\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\u3002\u9019\u5728\u7269\u4EF6\u751F\u6210\u6642\u907F\u514D\u7269\u4EF6\u5728\u986F\u793A\u4E4B\u524D\u88AB\u522A\u9664\u6642\u975E\u5E38\u6709\u7528","the unseen grace distance":"\u672A\u898B\u7684\u512A\u96C5\u8DDD\u96E2","relativeToOriginalWindowSize":"\u76F8\u5C0D\u539F\u59CB\u7A97\u53E3\u5927\u5C0F","Anchor relatively to original window size":"\u76F8\u5C0D\u65BC\u539F\u59CB\u7A97\u53E3\u5927\u5C0F\u7684\u9328\u9EDE","otherwise, objects are anchored according to the window size when the object is created.":"\u5426\u5247\uFF0C\u7269\u4EF6\u5C07\u6839\u64DA\u7269\u4EF6\u5275\u5EFA\u6642\u7684\u7A97\u53E3\u5927\u5C0F\u4F86\u56FA\u5B9A\u3002","No anchor":"\u7121\u9328\u9EDE","Window left":"\u7A97\u53E3\u5DE6\u5074","Window center":"\u7A97\u53E3\u4E2D\u5FC3","Window right":"\u7A97\u53E3\u53F3\u5074","Proportional":"\u6BD4\u4F8B","Left edge":"\u5DE6\u908A\u7DE3","Anchor the left edge of the object on X axis.":"\u5C07\u7269\u9AD4\u7684\u5DE6\u908A\u7DE3\u56FA\u5B9A\u5728X\u8EF8\u4E0A\u3002","Right edge":"\u53F3\u908A\u7DE3","Anchor the right edge of the object on X axis.":"\u5C07\u7269\u9AD4\u7684\u53F3\u908A\u7DE3\u56FA\u5B9A\u5728X\u8EF8\u4E0A\u3002","Window top":"\u7A97\u53E3\u9802\u90E8","Window bottom":"\u7A97\u53E3\u5E95\u90E8","Top edge":"\u4E0A\u908A\u7DE3","Anchor the top edge of the object on Y axis.":"\u5C07\u7269\u9AD4\u7684\u9802\u90E8\u908A\u7DE3\u56FA\u5B9A\u5728Y\u8EF8\u4E0A\u3002","Bottom edge":"\u4E0B\u908A\u7DE3","Anchor the bottom edge of the object on Y axis.":"\u5C07\u7269\u9AD4\u7684\u5E95\u90E8\u908A\u7DE3\u56FA\u5B9A\u5728Y\u8EF8\u4E0A\u3002","Stretch object when anchoring right or bottom edge (deprecated, it's recommended to leave this unchecked and anchor both sides if you want Sprite to stretch instead.)":"\u9328\u5B9A\u53F3\u5074\u6216\u5E95\u90E8\u908A\u7DE3\u6642\u62C9\u4F38\u7269\u4EF6(\u5DF2\u68C4\u7528\uFF0C\u5982\u679C\u60A8\u5E0C\u671B Sprite \u62C9\u4F38\uFF0C\u5EFA\u8B70\u4E0D\u8981\u9078\u4E2D\u6B64\u9078\u9805\u5E76\u9328\u5B9A\u5169\u5074\u3002)","Anchor":"\u9328\u9EDE","Anchor objects to the window's bounds.":"\u5C07\u7269\u4EF6\u9328\u5B9A\u5230\u7A97\u53E3\u7684\u908A\u754C\u3002","Shopify":"\u5546\u5E97","Interact with products and generate URLs for checkouts with your Shopify shop.":"\u8207\u7522\u54C1\u4E92\u52D5\uFF0C\u751F\u6210 URL\uFF0C\u4EE5\u4FBF\u8207\u60A8\u7684\u8CFC\u7269\u5E97\u9032\u884C\u6821\u9A57\u3002","Initialize a shop":"\u521D\u59CB\u5316\u5546\u5E97","Initialize a shop with your credentials. Call this action first, and then use the shop name in the other actions to interact with products.":"\u521D\u59CB\u5316\u4E00\u500B\u5E97\u92EA\uFF0C\u5E76\u64C1\u6709\u60A8\u7684\u8B49\u66F8\u3002\u5148\u8ABF\u7528\u6B64\u64CD\u4F5C\uFF0C\u7136\u540E\u5728\u5176\u4ED6\u884C\u52D5\u4E2D\u4F7F\u7528\u5546\u5E97\u540D\u7A31\u4F86\u8207\u7522\u54C1\u4E92\u52D5\u3002","Initialize shop _PARAM1_ (domain: _PARAM2_, appId: _PARAM3_)":"\u521D\u59CB\u5316\u5546\u5E97_PARAM1_ (\u57DF\u540D: _PARAM2_, appId: _PARAM3_)","Shop name":"\u5546\u5E97\u540D\u7A31","Domain (xxx.myshopify.com)":"\u57DF\u540D (xx.myShopify.com)","App Id":"\u61C9\u7528ID","Access Token":"\u8A2A\u554F\u4EE4\u724C","Get the URL for buying a product":"\u7372\u53D6\u8CFC\u8CB7\u7522\u54C1\u7684 URL","Get the URL for buying a product from a shop. The URL will be stored in the scene variable that you specify. You can then use the action to open an URL to redirect the player to the checkout.":"\u5F9E\u5546\u5E97\u8CFC\u8CB7\u7522\u54C1\u7684 URL\u3002URL \u5C07\u88AB\u5B58\u5132\u5728\u4F60\u6307\u5B9A\u7684\u8B8A\u91CF\u4E2D\u3002\u60A8\u53EF\u4EE5\u4F7F\u7528\u64CD\u4F5C\u6253\u958B URL \u4F86\u91CD\u5B9A\u5411\u73A9\u5BB6\u5230\u7D50\u5E33\u754C\u9762","Get the URL for product #_PARAM2_ (quantity: _PARAM3_, variant: _PARAM4_) from shop _PARAM1_, and store it in _PARAM5_ (or _PARAM6_ in case of error)":"\u5F9E\u5546\u5E97_PARAM1__ \u7372\u53D6\u7522\u54C1 #_PARAM2_ (\u6578\u91CF: _PARAM3_, \u8B8A\u91CF: _PARAM4_) \u7684 URL\uFF0C\u5E76\u5C07\u932F\u8AA4\u5132\u5B58\u5728 _PARAM5_ (\u6216 _PARAM6_ \u4E2D)","Shop name (initialized with \"Initialize a shop\" action)":"\u5546\u5E97\u540D\u7A31 (\u521D\u59CB\u5316 \"\u521D\u59CB\u5316\u5546\u5E97\" \u64CD\u4F5C)","Product id":"\u7522\u54C1ID","Quantity":"\u6578\u91CF","Variant (0 by default)":"\u8B8A\u91CF(0\u70BA\u9ED8\u8A8D)","Scene variable where the URL for checkout must be stored":"\u5FC5\u9808\u5B58\u5132\u8981\u6AA2\u67E5\u7684 URL \u8B8A\u91CF","Scene variable containing the error (if any)":"\u5132\u5B58\u932F\u8AA4\u7684\u8B8A\u91CF(\u6709\u7684\u8A71)","Emission minimal force":"\u6700\u5C11\u6392\u653E\u529B","Modify minimal emission force of particles.":"\u4FEE\u6539\u7C92\u5B50\u6700\u5C0F\u6392\u653E\u529B\u3002","the minimal emission force":"\u6700\u5C0F\u767C\u5C04\u529B\u5EA6","Common":"\u4E00\u822C","Emission maximal force":"\u6700\u5927\u6392\u653E\u529B","Modify maximal emission force of particles.":"\u4FEE\u6539\u7C92\u5B50\u6700\u5927\u6392\u653E\u529B\u3002","the maximal emission force":"\u6700\u5927\u767C\u5C04\u529B\u5EA6","Emission angle":"\u767C\u5C04\u89D2\u5EA6","Modify emission angle.":"\u4FEE\u6539\u767C\u5C04\u89D2\u5EA6\u3002","the emission angle":"\u767C\u5C04\u89D2\u5EA6","Test the value of emission angle of the emitter.":"\u6E2C\u8A66\u767C\u5C04\u5668\u767C\u5C04\u89D2\u5EA6\u7684\u503C\u3002","Emission angle 1":"\u767C\u5C04\u89D2\u5EA61","Change emission angle #1":"\u6539\u8B8A\u767C\u5C04\u89D2\u5EA6 #1","the 1st emission angle":"\u7B2C\u4E00\u500B\u767C\u5C04\u89D2\u5EA6","Test the value of emission 1st angle of the emitter":"\u6E2C\u8A66\u767C\u5C04\u5668\u767C\u5C04\u7B2C\u4E00\u89D2\u5EA6\u7684\u503C","Emission angle 2":"\u767C\u5C04\u89D2\u5EA62","Change emission angle #2":"\u6539\u8B8A\u767C\u5C04\u89D2\u5EA6 #2","the 2nd emission angle":"\u7B2C\u4E8C\u500B\u767C\u5C04\u89D2\u5EA6","Test the emission angle #2 of the emitter.":"\u6E2C\u8A66\u767C\u5C04\u5668\u7684\u767C\u5C04#2\u89D2\u5EA6\uFF032\u3002","Angle of the spray cone":"\u9310\u5F62\u5674\u5C04\u89D2\u89D2\u5EA6","Modify the angle of the spray cone.":"\u4FEE\u6539\u9310\u5F62\u5674\u5C04\u89D2\u7684\u89D2\u5EA6","the angle of the spray cone":"\u5674\u9727\u5713\u9310\u7684\u89D2\u5EA6","Test the angle of the spray cone of the emitter":"\u6E2C\u8A66\u767C\u5C04\u5668\u7684\u9310\u5F62\u5674\u5C04\u89D2\u89D2\u5EA6","Creation radius":"\u5275\u5EFA\u534A\u5F91","Modify creation radius of particles.\nParticles have to be recreated in order to take changes in account.":"\u4FEE\u6539\u7C92\u5B50\u7684\u5275\u5EFA\u534A\u5F91\u3002\n\u70BA\u4E86\u66F4\u6539\u5E33\u6236\uFF0C\u5FC5\u9808\u91CD\u65B0\u5275\u5EFA\u7C92\u5B50\u3002","the creation radius":"\u5275\u5EFA\u534A\u5F91","Test creation radius of particles.":"\u7C92\u5B50\u7684\u6E2C\u8A66\u751F\u6210\u534A\u5F91\u3002","Minimum lifetime":"\u6700\u77ED\u751F\u5B58\u671F","Modify particles minimum lifetime. Particles have to be recreated in order to take changes in account.":"\u4FEE\u6539\u7C92\u5B50\u7684\u6700\u5C0F\u58FD\u547D\u3002\u7C92\u5B50\u5FC5\u9808\u91CD\u65B0\u5275\u5EFA\uFF0C\u4EE5\u4FBF\u8003\u616E\u5230\u8B8A\u5316\u3002","the minimum lifetime of particles":"\u7C92\u5B50\u6700\u77ED\u751F\u5B58\u671F","Test minimum lifetime of particles.":"\u6E2C\u8A66\u7C92\u5B50\u7684\u6700\u5C0F\u58FD\u547D\u3002","Maximum lifetime":"\u6700\u5927\u751F\u5B58\u671F","Modify particles maximum lifetime.\nParticles have to be recreated in order to take changes in account.":"\u4FEE\u6539\u7C92\u5B50\u7684\u6700\u5927\u58FD\u547D\u3002\n\u7C92\u5B50\u5FC5\u9808\u91CD\u5EFA\u4EE5\u8CEC\u6236\u8B8A\u52D5\u3002","the maximum lifetime of particles":"\u7C92\u5B50\u6700\u9577\u751F\u5B58\u671F","Test maximum lifetime of particles.":"\u6E2C\u8A66\u7C92\u5B50\u7684\u6700\u5927\u58FD\u547D\u3002","Gravity value on X axis":"X\u8EF8\u91CD\u529B","Change value of the gravity on X axis.":"X \u8EF8\u4E0A\u7684\u91CD\u529B\u8B8A\u5316\u503C\u3002","the gravity on X axis":"x\u8EF8\u91CD\u529B","Compare value of the gravity on X axis.":"\u6BD4\u8F03X\u8EF8\u91CD\u529B\u7684\u503C\u3002","Gravity value on Y axis":"Y \u8EF8\u91CD\u529B\u503C","Change value of the gravity on Y axis.":"\u4FEE\u6539Y\u8EF8\u4E0A\u7684\u91CD\u529B\u65B9\u5411","the gravity on Y axis":"y\u8EF8\u91CD\u529B","Compare value of the gravity on Y axis.":"\u6BD4\u8F03Y\u8EF8\u91CD\u529B\u7684\u503C\u3002","Gravity angle":"\u91CD\u529B\u89D2\u5EA6","Change gravity angle":"\u66F4\u6539\u91CD\u529B\u89D2\u5EA6","the gravity angle":"\u91CD\u529B\u89D2\u5EA6","Test the gravity angle of the emitter":"\u6E2C\u8A66\u91CD\u529B\u89D2\u5EA6\u7684\u767C\u5C04\u5668","Change the gravity of the emitter.":"\u4FEE\u6539\u91CD\u529B\u89D2\u767C\u5C04\u5668","Test the gravity of the emitter.":"\u6E2C\u8A66\u767C\u5C04\u5668\u7684\u91CD\u529B","Start emission":"\u958B\u59CB\u767C\u9001","Refill tank (if not infinite) and start emission of the particles.":"\u91CD\u65B0\u586B\u5145\u7F50(\u5982\u679C\u4E0D\u662F\u7121\u9650)\u5E76\u958B\u59CB\u767C\u5C04\u7C92\u5B50\u3002","Start emission of _PARAM0_":"\u958B\u59CB\u767C\u5C04 _PARAM0_","Stop emission":"\u505C\u6B62\u767C\u5C04","Stop the emission of particles.":"\u505C\u6B62\u767C\u5C04\u7C92\u5B50\u3002","Stop emission of _PARAM0_":"\u505C\u6B62\u767C\u5C04 _PARAM0_","Start color":"\u8D77\u59CB\u984F\u8272","Modify start color of particles.":"\u4FEE\u6539\u7C92\u5B50\u7684\u8D77\u59CB\u984F\u8272\u3002","Change particles start color of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u7C92\u5B50\u958B\u59CB\u984F\u8272\u66F4\u6539\u70BA _PARAM1_","End color":"\u7D50\u675F\u984F\u8272","Modify end color of particles.":"\u4FEE\u6539\u7C92\u5B50\u7684\u7D50\u675F\u984F\u8272\u3002","Change particles end color of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u7C92\u5B50\u7D50\u675F\u984F\u8272\u66F4\u6539\u70BA _PARAM1_","Start color red component":"\u958B\u59CB\u984F\u8272\u7D05\u8272\u7D44\u4EF6","Modify the start color red component.":"\u4FEE\u6539\u958B\u59CB\u984F\u8272\u7D05\u8272\u7D44\u4EF6\u3002","the start color red component":"\u958B\u59CB\u984F\u8272\u70BA\u7D05\u8272\u7D44\u4EF6","Value (0-255)":"\u503C (0-255)","Compare the start color red component.":"\u6BD4\u8F03\u958B\u59CB\u984F\u8272\u7D05\u8272\u7D44\u4EF6\u3002","Value to compare to (0-255)":"\u8981\u6BD4\u8F03\u7684\u503C (0-255)","End color red component":"\u7D50\u675F\u7D05\u8272\u7D44\u4EF6","Modify the end color red component.":"\u4FEE\u6539\u7D50\u675F\u7684\u7D05\u8272\u7D44\u4EF6\u3002","the end color red component":"\u7D50\u675F\u984F\u8272\u70BA\u7D05\u8272","Compare the end color red component.":"\u6BD4\u8F03\u7D50\u675F\u7684\u7D05\u8272\u7D44\u4EF6\u3002","Start color blue component":"\u958B\u59CB\u984F\u8272\u85CD\u8272\u7D44\u4EF6","Modify the start color blue component.":"\u4FEE\u6539\u958B\u59CB\u984F\u8272\u70BA\u85CD\u8272\u7684\u7D44\u4EF6\u3002","the start color blue component":"\u958B\u59CB\u984F\u8272\u70BA\u85CD\u8272\u7D44\u4EF6","Compare the start color blue component.":"\u6BD4\u8F03\u958B\u59CB\u984F\u8272\u85CD\u8272\u7D44\u4EF6\u3002","End color blue component":"\u7D50\u675F\u984F\u8272\u85CD\u8272\u7D44\u4EF6","Modify the end color blue component.":"\u4FEE\u6539\u7D50\u675F\u984F\u8272\u85CD\u8272\u7D44\u4EF6\u3002","the end color blue component":"\u7D50\u675F\u984F\u8272\u70BA\u85CD\u8272","Compare the end color blue component.":"\u6BD4\u8F03\u7D50\u675F\u984F\u8272\u85CD\u8272\u7D44\u4EF6\u3002","Start color green component":"\u958B\u59CB\u984F\u8272\u7DA0\u8272\u7D44\u4EF6","Modify the start color green component.":"\u4FEE\u6539\u958B\u59CB\u984F\u8272\u7DA0\u8272\u7D44\u4EF6\u3002","the start color green component":"\u958B\u59CB\u984F\u8272\u70BA\u7DA0\u8272","Compare the start color green component.":"\u6BD4\u8F03\u958B\u59CB\u984F\u8272\u7DA0\u8272\u7D44\u4EF6\u3002","End color green component":"\u7D50\u675F\u984F\u8272\u7DA0\u8272\u7D44\u4EF6","Modify the end color green component.":"\u4FEE\u6539\u7D50\u675F\u984F\u8272\u7DA0\u8272\u7D44\u4EF6\u3002","the end color green component":"\u7D50\u675F\u984F\u8272\u70BA\u7DA0\u8272","Compare the end color green component.":"\u6BD4\u8F03\u7D50\u675F\u984F\u8272\u7DA0\u8272\u7D44\u4EF6\u3002","Start size":"\u8D77\u59CB\u5927\u5C0F","Modify the particle start size.":"\u4FEE\u6539\u7C92\u5B50\u8D77\u59CB\u5927\u5C0F\u3002","the start size":"\u8D77\u59CB\u5927\u5C0F","Compare the particle start size.":"\u6BD4\u8F03\u7C92\u5B50\u8D77\u59CB\u5927\u5C0F\u3002","End size":"\u7D50\u675F\u5927\u5C0F","Modify the particle end size.":"\u4FEE\u6539\u7C92\u5B50\u7D50\u675F\u5927\u5C0F\u3002","the end size":"\u7D50\u675F\u5927\u5C0F","Compare the particle end size.":"\u6BD4\u8F03\u7C92\u5B50\u7D50\u675F\u5927\u5C0F\u3002","Start opacity":"\u958B\u59CB\u4E0D\u900F\u660E\u5EA6","Modify the start opacity of particles.":"\u4FEE\u6539\u7C92\u5B50\u7684\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6\u3002","the start opacity":"\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6","Compare the start opacity of particles.":"\u6BD4\u8F03\u7C92\u5B50\u7684\u8D77\u59CB\u4E0D\u900F\u660E\u5EA6\u3002","End opacity":"\u7D50\u675F\u4E0D\u900F\u660E\u5EA6","Modify the end opacity of particles.":"\u4FEE\u6539\u7C92\u5B50\u7684\u7D50\u675F\u4E0D\u900F\u660E\u5EA6\u3002","the end opacity":"\u7D50\u675F\u4E0D\u900F\u660E\u5EA6","Compare the end opacity of particles.":"\u6BD4\u8F03\u7C92\u5B50\u7684\u7D50\u675F\u4E0D\u900F\u660E\u5EA6\u3002","No more particles":"\u6C92\u6709\u66F4\u591A\u7684\u7684\u7C92\u5B50","Check if the object does not emit particles any longer, so as to destroy it for example.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u4E0D\u518D\u91CB\u653E\u7C92\u5B50\uFF0C\u4EE5\u4FBF\u6467\u6BC0\u5B83\u3002","_PARAM0_ does not emit any longer":"_PARAM0_ \u4E0D\u518D\u767C\u5E03","Particle rotation min speed":"\u7C92\u5B50\u65CB\u8F49\u6700\u5C0F\u901F\u5EA6","the minimum rotation speed of the particles":"\u7C92\u5B50\u7684\u6700\u5C0F\u65CB\u8F49\u901F\u5EA6","the particles minimum rotation speed":"\u7C92\u5B50\u6700\u5C0F\u65CB\u8F49\u901F\u5EA6","Angular speed (in degrees per second)":"\u89D2\u901F\u5EA6 ( \u4EE5\u5EA6\u70BA\u55AE\u4F4D\u6BCF\u79D2 )","Particle rotation max speed":"\u7C92\u5B50\u65CB\u8F49\u6700\u5927\u901F\u5EA6","the maximum rotation speed of the particles":"\u7C92\u5B50\u7684\u6700\u5927\u65CB\u8F49\u901F\u5EA6","the particles maximum rotation speed":"\u7C92\u5B50\u6700\u5927\u65CB\u8F49\u901F\u5EA6","Number of displayed particles":"\u986F\u793A\u7684\u7C92\u5B50\u6578\u91CF","the maximum number of displayed particles":"\u986F\u793A\u7C92\u5B50\u7684\u6700\u5927\u6578\u91CF","Activate particles additive rendering":"\u6FC0\u6D3B\u7C92\u5B50\u9644\u52A0\u6E32\u67D3","the particles additive rendering is activated":"\u7C92\u5B50\u9644\u52A0\u6E32\u67D3\u88AB\u6FC0\u6D3B","displaying particles with additive rendering activated":"\u986F\u793A\u6FC0\u6D3B\u9644\u52A0\u6E32\u67D3\u7684\u7C92\u5B50","Recreate particles":"\u91CD\u65B0\u5275\u5EFA\u7C92\u5B50","Destroy and recreate particles, so as to take changes made to setup of the emitter in account.":"\u92B7\u6BC0\u548C\u91CD\u65B0\u5275\u5EFA\u7C92\u5B50\uFF0C\u4EE5\u4FBF\u5C0D\u767C\u5C04\u5668\u7684\u8A2D\u5B9A\u9032\u884C\u66F4\u6539\u3002","Recreate particles of _PARAM0_":"\u91CD\u65B0\u5275\u5EFA_PARAM0_\u7684\u7C92\u5B50","Setup":"\u8A2D\u5B9A","Rendering first parameter":"\u7E6A\u5236\u7B2C\u4E00\u500B\u53C3\u6578","Modify first parameter of rendering (Size/Length).\nParticles have to be recreated in order to take changes in account.":"\u4FEE\u6539\u6E32\u67D3\u7684\u7B2C\u4E00\u500B\u53C3\u6578\uFF08\u5927\u5C0F/\u9577\u5EA6\uFF09\u3002\u5FC5\u9808\u91CD\u65B0\u5275\u5EFA nparticles\u4EE5\u9032\u884C\u66F4\u6539\u3002","the rendering 1st parameter":"\u6E32\u67D3\u7B2C\u4E00\u500B\u53C3\u6578","Test the first parameter of rendering (Size/Length).":"\u6E2C\u8A66\u6E32\u67D3\u7684\u7B2C\u4E00\u500B\u53C3\u6578\uFF08\u5927\u5C0F/\u9577\u5EA6\uFF09\u3002","the 1st rendering parameter":"\u7B2C\u4E00\u500B\u6E32\u67D3\u53C3\u6578","Rendering second parameter":"\u5448\u73FE\u7B2C\u4E8C\u500B\u53C3\u6578","Modify the second parameter of rendering (Size/Length).\nParticles have to be recreated in order to take changes in account.":"\u4FEE\u6539\u6E32\u67D3\u7684\u7B2C\u4E8C\u500B\u53C3\u6578\uFF08\u5927\u5C0F/\u9577\u5EA6\uFF09\u3002\u5FC5\u9808\u91CD\u65B0\u5275\u5EFA n \u7C92\u5B50\u4EE5\u9032\u884C\u66F4\u6539\u3002","the rendering 2nd parameter":"\u6E32\u67D3\u7B2C\u4E8C\u500B\u53C3\u6578","Test the second parameter of rendering (Size/Length).":"\u6E2C\u8A66\u6E32\u67D3\u7684\u7B2C\u4E8C\u500B\u53C3\u6578\uFF08\u5927\u5C0F/\u9577\u5EA6\uFF09\u3002","the 2nd rendering parameter":"\u7B2C\u4E8C\u500B\u6E32\u67D3\u53C3\u6578","Capacity":"\u5BB9\u91CF","Change the capacity of the emitter.":"\u6539\u8B8A\u767C\u5C04\u5668\u7684\u5BB9\u91CF\u3002","the capacity":"\u5BB9\u91CF","Test the capacity of the emitter.":"\u6E2C\u8A66\u767C\u5C04\u5668\u7684\u91CD\u529B","Capacity to compare to":"\u5BB9\u91CF\u6BD4\u8F03","Flow":"\u6D41\u91CF","Change the flow of the emitter.":"\u6539\u8B8A\u767C\u5C04\u5668\u7684\u6D41\u91CF\u3002","the flow":"\u6D41","Flow (in particles per second)":"\u6D41\u91CF(\u6BCF\u79D2\u7C92\u5B50\u6578)","Test the flow of the emitter.":"\u6E2C\u8A66\u767C\u5C04\u5668\u7684\u6D41\u91CF\u3002","Flow to compare to (in particles per second)":"\u8981\u6BD4\u8F03\u7684\u6D41\u91CF(\u4EE5\u6BCF\u79D2\u7C92\u5B50\u6578\u70BA\u55AE\u4F4D)","Particle image (deprecated)":"\u7C92\u5B50\u5716\u50CF (\u5DF2\u5EE2\u68C4)","Change the image of particles (if displayed).":"\u66F4\u6539\u7C92\u5B50\u5716\u50CF(\u5982\u679C\u986F\u793A)\u3002","Change the image of particles of _PARAM0_ to _PARAM1_":"_PARAM0_ \u7684\u7C92\u5B50\u5716\u50CF\u66F4\u6539\u70BA _PARAM1_","Image to use":"\u8981\u4F7F\u7528\u7684\u5716\u50CF","Particle image":"\u7C92\u5B50\u5716\u50CF","Test the name of the image displayed by particles.":"\u6AA2\u67E5\u7C92\u5B50\u6240\u986F\u793A\u7684\u5716\u50CF\u7684\u540D\u7A31\u3002","the image displayed by particles":"\u7C92\u5B50\u986F\u793A\u7684\u5716\u50CF","Particles image":"\u7C92\u5B50\u5716\u50CF","Name of the image displayed by particles.":"\u7C92\u5B50\u986F\u793A\u7684\u5716\u50CF\u540D\u7A31\u3002","Particles":"\u9846\u7C92","Particles number":"\u7C92\u5B50\u6578","Particles count":"\u7C92\u5B50\u8A08\u6578","Number of particles currently displayed.":"\u7576\u524D\u986F\u793A\u7684\u7C92\u5B50\u6578\u91CF\u3002","Capacity of the particle tank.":"\u7C92\u5B50\u7BB1\u7684\u5BB9\u91CF\u3002","Flow of the particles (particles/second).":"\u7C92\u5B50\u6D41(\u7C92\u5B50/\u79D2)\u3002","The minimal emission force of the particles.":"\u5FAE\u7C92\u7684\u6700\u5C0F\u767C\u5C04\u529B\u3002","The maximal emission force of the particles.":"\u7C92\u5B50\u7684\u6700\u5927\u767C\u5C04\u529B\u3002","Emission angle of the particles.":"\u7C92\u5B50\u7684\u767C\u5C04\u89D2\u5EA6\u3002","Emission angle A":"\u767C\u5C04\u89D2A","Emission angle B":"\u767C\u5C04\u89D2B","Radius of emission zone":"\u767C\u5C04\u5340\u534A\u5F91","The radius of the emission zone.":"\u767C\u5C04\u5340\u534A\u5F91\u3002","X gravity":"X \u91CD\u529B","Gravity of particles applied on X-axis.":"X\u8EF8\u4E0A\u61C9\u7528\u7684\u7C92\u5B50\u91CD\u529B","Y gravity":"Y \u91CD\u529B","Gravity of particles applied on Y-axis.":"\u61C9\u7528\u5728Y\u8EF8\u4E0A\u7684\u7C92\u5B50\u91CD\u529B","Angle of gravity.":"\u91CD\u529B\u89D2\u5EA6\u3002","Value of gravity.":"\u91CD\u529B\u503C\u3002","Minimum lifetime of particles":"\u7C92\u5B50\u6700\u77ED\u751F\u5B58\u671F","Minimum lifetime of the particles.":"\u7C92\u5B50\u7684\u6700\u5C0F\u58FD\u547D\u3002","Maximum lifetime of particles":"\u7C92\u5B50\u6700\u9577\u751F\u5B58\u671F","Maximum lifetime of the particles.":"\u7C92\u5B50\u7684\u6700\u5927\u58FD\u547D\u3002","The start color red component of the particles.":"\u7C92\u5B50\u7684\u958B\u59CB\u984F\u8272\u70BA\u7D05\u8272\u3002","The end color red component of the particles.":"\u7C92\u5B50\u7684\u7D50\u675F\u984F\u8272\u70BA\u7D05\u8272\u3002","The start color blue component of the particles.":"\u7C92\u5B50\u7684\u958B\u59CB\u984F\u8272\u70BA\u85CD\u8272\u3002","The end color blue component of the particles.":"\u7C92\u5B50\u7684\u7D50\u675F\u984F\u8272\u70BA\u85CD\u8272\u3002","The start color green component of the particles.":"\u7C92\u5B50\u7684\u958B\u59CB\u984F\u8272\u70BA\u7DA0\u8272\u3002","The end color green component of the particles.":"\u7C92\u5B50\u7684\u7D50\u675F\u984F\u8272\u70BA\u7DA0\u8272\u3002","Start opacity of the particles.":"\u958B\u59CB\u7C92\u5B50\u7684\u4E0D\u900F\u660E\u5EA6\u3002","End opacity of the particles.":"\u7D50\u675F\u7C92\u5B50\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Start size of particles.":"\u958B\u59CB\u7C92\u5B50\u7684\u5927\u5C0F\u3002","End size of particles.":"\u7C92\u5B50\u7684\u6700\u7D42\u5927\u5C0F\u3002","Jump emitter forward in time":"\u53CA\u6642\u5411\u524D\u8DF3\u8E8D\u767C\u5C04\u5668","Simulate the passage of time for an emitter, including creating and moving particles":"\u6A21\u64EC\u767C\u5C04\u5668\u7684\u6642\u9593\u6D41\u901D\uFF0C\u5305\u62EC\u5275\u5EFA\u548C\u79FB\u52D5\u7C92\u5B50","Jump _PARAM0_ forward in time by _PARAM1_ seconds":"\u5C07 _PARAM0_ \u6642\u9593\u5411\u524D\u8DF3\u8F49 _PARAM1_ \u79D2","Seconds of time":"\u79D2\u7684\u6642\u9593","Particle system":"\u7C92\u5B50\u7CFB\u7D71","2D particles emitter":"2D \u7C92\u5B50\u767C\u5C04\u5668","2D effects like smoke, fire or sparks.":"\u50CF\u7159\u9727\u3001\u706B\u6216\u706B\u82B1\u76842D\u6548\u679C\u3002","Particles size":"\u7C92\u5B50\u5927\u5C0F","Start size (in percents)":"\u7C92\u5B50\u8D77\u59CB\u5927\u5C0F (\u4EE5\u767E\u5206\u6BD4\u70BA\u55AE\u4F4D\uFF09","End size (in percents)":"\u7C92\u5B50\u672B\u7AEF\u5927\u5C0F (\u4EE5\u767E\u5206\u6BD4\u70BA\u55AE\u4F4D)","Particles color":"\u7C92\u5B50\u984F\u8272","Particles flow":"\u7C92\u5B50\u6D41\u52D5","Max particles count":"\u6700\u5927\u7C92\u5B50\u6578\u91CF","Tank":"\u6CB9\u7BB1","Particles flow (particles/seconds)":"\u7C92\u5B50\u7684\u6D41\u52D5 (\u7C92\u5B50/\u79D2)","Emitter force min":"\u767C\u5C04\u5668\u529B\u7684\u6700\u5C0F\u503C","Particles movement":"\u7C92\u5B50\u904B\u52D5","Emitter force max":"\u767C\u5C04\u5668\u529B\u7684\u6700\u5927\u503C","Minimum rotation speed":"\u6700\u5C0F\u65CB\u8F49\u901F\u5EA6","Maximum rotation speed":"\u6700\u5927\u65CB\u8F49\u901F\u5EA6","Cone spray angle":"\u5713\u9310\u5674\u9727\u89D2","Emitter radius":"\u767C\u5C04\u5668\u534A\u5F91","Gravity X":"\u6C34\u5E73\u529B","Particles gravity":"\u7C92\u5B50\u91CD\u529B","Gravity Y":"Y\u8EF8\u529B","Particles life time":"\u7C92\u5B50\u58FD\u547D","Jump forward in time on creation":"\u5728\u5275\u5EFA\u6642\u5411\u524D\u8DF3\u8F49(\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Reduce initial dimensions to keep aspect ratio":"\u6E1B\u5C0F\u521D\u59CB\u5C3A\u5BF8\u4EE5\u4FDD\u6301\u5BEC\u9AD8\u6BD4","Rotation around X axis":"\u7E5E X \u8EF8\u65CB\u8F49","Default rotation":"\u9ED8\u8A8D\u65CB\u8F49","Rotation around Y axis":"\u7E5E Y \u8EF8\u65CB\u8F49","Rotation around Z axis":"\u7E5E Z \u8EF8\u65CB\u8F49","Basic (no lighting, no shadows)":"\u57FA\u672C (\u7121\u71C8\u5149\uFF0C\u7121\u9670\u5F71)","Standard (without metalness)":"\u6A19\u6E96 (\u7121\u91D1\u5C6C\u611F)","Keep original":"\u4FDD\u6301\u539F\u59CB","Material":"\u6750\u6599\u985E\u578B","Lighting":"\u71C8\u5149","Model origin":"\u6A21\u578B\u539F\u9EDE","Top left":"\u5DE6\u4E0A\u89D2","Object center":"\u5C0D\u8C61\u4E2D\u5FC3","Bottom center (Z)":"\u5E95\u90E8\u4E2D\u5FC3 (\u5728 Z \u8EF8\u4E0A)","Bottom center (Y)":"\u5E95\u90E8\u4E2D\u5FC3 (Y)","Origin point":"\u539F\u9EDE","Centered on Z only":"\u50C5\u5728 Z \u8EF8\u4E0A\u5C45\u4E2D","Center point":"\u4E2D\u5FC3\u9EDE","Crossfade duration":"\u4EA4\u53C9\u6DE1\u5165\u6DE1\u51FA\u6301\u7E8C\u6642\u9593","Shadow casting":"\u9670\u5F71\u6295\u5C04","Shadow receiving":"\u9670\u5F71\u63A5\u6536","Fill opacity":"\u586B\u5145\u4E0D\u900F\u660E\u5EA6","Outline opacity":"\u5916\u6846\u4E0D\u900F\u660E\u5EA6","Outline size":"\u5916\u6846\u5C3A\u5BF8","Use absolute coordinates":"\u4F7F\u7528\u7D55\u5C0D\u5750\u6A19","Drawing":"\u7E6A\u5236","Clear drawing at each frame":"\u6BCF\u4E00\u5E40\u90FD\u6E05\u9664\u7E6A\u5716","When activated, clear the previous render at each frame. Otherwise, shapes are staying on the screen until you clear manually the object in events.":"\u7576\u555F\u7528\u6642\uFF0C\u5728\u6BCF\u5E40\u6E05\u9664\u4E4B\u524D\u7684\u6E32\u67D3\u3002\u5426\u5247\uFF0C\u5F62\u72C0\u6703\u4FDD\u6301\u5728\u5C4F\u5E55\u4E0A\uFF0C\u76F4\u5230\u60A8\u5728\u4E8B\u4EF6\u4E2D\u624B\u52D5\u6E05\u9664\u5C0D\u8C61\u3002","Antialiasing":"\u6297\u92F8\u9F52","Antialiasing mode":"\u6297\u92F8\u9F52\u6A21\u5F0F","Shape painter":"\u5F62\u72C0\u7E6A\u756B","An object that can be used to draw arbitrary 2D shapes on the screen using events.":"\u9019\u63D0\u4F9B\u4E86\u4E00\u500B\u53EF\u7528\u4E8E\u4F7F\u7528\u4E8B\u4EF6\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u4EFB\u610F\u5F62\u72C0\u7684\u7269\u4EF6\u3002","Draw basic 2D shapes using events.":"\u4F7F\u7528\u4E8B\u4EF6\u7E6A\u88FD\u57FA\u672C\u7684 2D \u5F62\u72C0\u3002","Rectangle":"\u77E9\u5F62","Draw a rectangle on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u77E9\u5F62","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a rectangle with _PARAM0_":"\u5F9E_PARAM1 _; _ PARAM2_\u5230_PARAM3 _; _ PARAM4_\u7528_PARAM0_\u7E6A\u5236\u4E00\u500B\u77E9\u5F62","Shape Painter object":"\u5F62\u72C0\u7E6A\u756B\u7269\u4EF6","Left X position":"\u5DE6 X \u4F4D\u7F6E","Top Y position":"\u9802\u90E8 Y \u4F4D\u7F6E","Right X position":"\u53F3 X \u4F4D\u7F6E","Bottom Y position":"\u5E95\u90E8 Y \u4F4D\u7F6E","Draw a circle on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u4E00\u500B\u5713","Draw at _PARAM1_;_PARAM2_ a circle of radius _PARAM3_ with _PARAM0_":"\u5728_PARAM1_; _PARAM2_\u7E6A\u5236\u4E00\u500B\u534A\u5F91\u70BA_PARAM3_\u7684\u5713\uFF0C\u5E76\u5E36\u6709_PARAM0_","X position of center":"\u4E2D\u5FC3X\u5750\u6A19","Y position of center":"\u4E2D\u5FC3Y\u5750\u6A19","Radius (in pixels)":"\u534A\u5F91\uFF08\u50CF\u7D20\uFF09","X position of start point":"\u8D77\u59CB\u9EDE\u7684X\u5750\u6A19","Y position of start point":"\u8D77\u59CB\u9EDE\u7684Y\u5750\u6A19","X position of end point":"\u7D50\u675F\u9EDE\u7684X\u5750\u6A19","Y position of end point":"\u7D50\u675F\u9EDE\u7684Y\u5750\u6A19","Thickness (in pixels)":"\u7C97\u7D30\uFF08\u50CF\u7D20\uFF09","Draw a line on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u4E00\u884C","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a line (thickness: _PARAM5_) with _PARAM0_":"\u5F9E _PARAM1_; _PARAM2_ \u5230 _PARAM3_; _PARAM4_ \u7528 _PARAM0_ \u7E6A\u5236\u4E00\u689D\u7DDA(\u539A\u5EA6\u70BA: _PARAM5_)","Ellipse":"\u6A62\u5713","Draw an ellipse on screen":"\u5728\u5C4F\u5E55\u4E0A\u756B\u4E00\u500B\u6A62\u5713","Draw at _PARAM1_;_PARAM2_ an ellipse of width _PARAM3_ and height _PARAM4_ with _PARAM0_":"\u5728_PARAM1_;_PARAM2_ \u8655\u7528 _PARAM0_ \u4EE5\u5BEC\u5EA6_PARAM3_ \u548C\u9AD8\u5EA6 _PARAM4_ \u756B\u4E00\u500B\u6A62\u5713","The width of the ellipse":"\u6A62\u5713\u7684\u5BEC\u5EA6","The height of the ellipse":"\u6A62\u5713\u7684\u9AD8\u5EA6","Fillet Rectangle":"\u5713\u89D2\u77E9\u5F62","Draw a fillet rectangle on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u5713\u89D2\u77E9\u5F62","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a fillet rectangle (fillet: _PARAM5_)with _PARAM0_":"\u4F7F\u7528 _PARAM0_ \u5F9E _PARAM1_; _PARAM2_ \u5230 _PARAM3_; _PARAM4_ \u7E6A\u5236\u4E00\u500B\u5713\u89D2\u77E9\u5F62 (\u5713\u89D2\uFF1A_PARAM5_)","Fillet (in pixels)":"\u5713\u89D2 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Rounded rectangle":"\u5713\u89D2\u77E9\u5F62","Draw a rounded rectangle on screen":"\u5728\u5C4F\u5E55\u4E0A\u756B\u4E00\u500B\u5713\u89D2\u77E9\u5F62","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a rounded rectangle (radius: _PARAM5_) with _PARAM0_":"\u5F9E _PARAM1_;_PARAM2_ \u5230 _PARAM3_;_PARAM4_ \u7528 _PARAM0_ \u756B\u4E00\u500B\u5713\u89D2\u77E9\u5F62(\u534A\u5F91\u70BA: _PARAM5_)","Chamfer Rectangle":"\u5012\u89D2\u77E9\u5F62","Draw a chamfer rectangle on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u4E00\u500B\u5012\u89D2\u77E9\u5F62","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a chamfer rectangle (chamfer: _PARAM5_) with _PARAM0_":"\u4F7F\u7528 _PARAM0_ \u5F9E _PARAM1_;_PARAM2_ \u5230 _PARAM3_;_PARAM4_ \u7E6A\u5236\u4E00\u500B\u5012\u89D2\u77E9\u5F62 (\u5012\u89D2\uFF1A_PARAM5_)","Chamfer (in pixels)":"\u5012\u89D2 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Torus":"\u5713\u74B0","Draw a torus on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u4E00\u500B\u5713\u74B0","Draw at _PARAM1_;_PARAM2_ a torus with inner radius: _PARAM3_, outer radius: _PARAM4_ and with start arc angle: _PARAM5_\xB0, end angle: _PARAM6_\xB0 with _PARAM0_":"\u5728 _PARAM1_\uFF1B_PARAM2_ \u8655\u7E6A\u5236\u4E00\u500B\u5713\u74B0\uFF0C\u5176\u5167\u534A\u5F91\uFF1A_PARAM3_\uFF0C\u5916\u534A\u5F91\uFF1A_PARAM4_\uFF0C\u8D77\u59CB\u5713\u5F27\u89D2\u5EA6\uFF1A_PARAM5_\xB0\uFF0C\u7D50\u675F\u89D2\u5EA6\uFF1A_PARAM6_\xB0\uFF0C\u5E36 _PARAM0_","Inner Radius (in pixels)":"\u5167\u534A\u5F91 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Outer Radius (in pixels)":"\u5916\u534A\u5F91 (\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D)","Start Arc (in degrees)":"\u8D77\u59CB\u5713\u5F27 (\u4EE5\u5EA6\u70BA\u55AE\u4F4D)","End Arc (in degrees)":"\u7D50\u675F\u5713\u5F27 (\u4EE5\u5EA6\u70BA\u55AE\u4F4D)","Regular Polygon":"\u6B63\u591A\u908A\u5F62","Draw a regular polygon on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u4E00\u500B\u6B63\u591A\u908A\u5F62","Draw at _PARAM1_;_PARAM2_ a regular polygon with _PARAM3_ sides and radius: _PARAM4_ (rotation: _PARAM5_) with _PARAM0_":"\u5728 _PARAM1_;_PARAM2_ \u8655\u7E6A\u5236\u4E00\u500B\u6B63\u591A\u908A\u5F62\uFF0C\u5176\u908A\u9577\u70BA _PARAM3_\uFF0C\u534A\u5F91\u70BA\uFF1A_PARAM4_ (\u65CB\u8F49\uFF1A_PARAM5_)\uFF0C\u5E76\u5E36\u6709_PARAM0_","Number of sides of the polygon (minimum: 3)":"\u591A\u908A\u5F62\u7684\u908A\u6578 (\u6700\u5C0F: 3)","Rotation (in degrees)":"\u65CB\u8F49\uFF08\u89D2\u5EA6\uFF09","Star":"\u661F\u5F62","Draw a star on screen":"\u5728\u5C4F\u5E55\u4E0A\u756B\u4E00\u500B\u661F\u5F62","Draw at _PARAM1_;_PARAM2_ a star with _PARAM3_ points and radius: _PARAM4_ (inner radius: _PARAM5_, rotation: _PARAM6_) with _PARAM0_":"\u5728_PARAM1_;_PARAM2_ \u8655\u7528 _PARAM0_ \u756B\u4E00\u500B\u661F\u578B\uFF0C\u6709 _PARAM3_ \u500B\u9EDE\uFF0C\u534A\u5F91\u70BA _PARAM4_ (\u5167\u90E8\u534A\u5F91\u70BA\uFF1A _PARAM5_, \u65CB\u8F49\u70BA\uFF1A _PARAM6_)","Number of points of the star (minimum: 2)":"\u661F\u5F62\u7684\u9802\u9EDE\u6578\u91CF\uFF08\u6700\u5C0F\u70BA2\uFF09","Inner radius (in pixels, half radius by default)":"\u5167\u90E8\u534A\u5F91\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF0C\u9ED8\u8A8D\u70BA\u534A\u5F91\u7684\u4E00\u534A\uFF09","Arc":"\u5F27","Draw an arc on screen. If \"Close path\" is set to yes, a line will be drawn between the start and end point of the arc, closing the shape.":"\u5728\u5C4F\u5E55\u4E0A\u756B\u4E00\u689D\u5F27\u3002\u5982\u679C\u201C\u9078\u64C7\u8DEF\u5F91\u201D\u8A2D\u70BA\u662F\uFF0C\u90A3\u4E48\u5F27\u7684\u8D77\u9EDE\u548C\u7D42\u9EDE\u9593\u5C07\u6703\u756B\u4E00\u689D\u7DDA\uFF0C\u5F62\u6210\u4E00\u500B\u9589\u5408\u5716\u5F62\u3002","Draw at _PARAM1_;_PARAM2_ an arc with radius: _PARAM3_, start angle: _PARAM4_, end angle: _PARAM5_ (anticlockwise: _PARAM6_, close path: _PARAM7_) with _PARAM0_":"\u5728 _PARAM1_;_PARAM2_ \u8655\u7528 _PARAM0_ \u7E6A\u5236\u4E00\u500B\u534A\u5F91\u70BA _PARAM3_ \u7684\u5F27, \u8D77\u59CB\u89D2\u5EA6\u70BA\uFF1A _PARAM4_, \u7D50\u675F\u89D2\u5EA6\u70BA\uFF1A _PARAM5_ (\u9006\u6642\u91DD\u70BA: _PARAM6_, \u9589\u5408\u8DEF\u5F91\u70BA\uFF1A _PARAM7_)","Start angle of the arc (in degrees)":"\u5F27\u7684\u8D77\u59CB\u89D2\u5EA6\uFF08\u89D2\u5EA6\uFF09","End angle of the arc (in degrees)":"\u5F27\u7684\u7D42\u6B62\u89D2\u5EA6\uFF08\u89D2\u5EA6\uFF09","Anticlockwise":"\u9006\u6642\u91DD","Close path":"\u9589\u5408\u8DEF\u5F91","Bezier curve":"\u8C9D\u585E\u723E\u66F2\u7DDA","Draw a bezier curve on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u8C9D\u585E\u723E\u66F2\u7DDA","Draw from _PARAM1_;_PARAM2_ to _PARAM7_;_PARAM8_ a bezier curve (first control point: _PARAM3_;_PARAM4_, second control point: _PARAM5_;_PARAM6_) with _PARAM0_":"\u5F9E _PARAM1_;_PARAM2_ \u5230 _PARAM7_;_PARAM8_ \u7528 _PARAM0_ \u7E6A\u5236\u4E00\u689D\u8C9D\u585E\u723E\u66F2\u7DDA(\u7B2C\u4E00\u63A7\u5236\u9EDE\u70BA: _PARAM3_;_PARAM4_, \u7B2C\u4E8C\u63A7\u5236\u9EDE\u70BA: _PARAM5_;_PARAM6_)","First control point x":"\u7B2C\u4E00\u63A7\u5236\u9EDE\u7684x","First control point y":"\u7B2C\u4E00\u63A7\u5236\u9EDE\u7684y","Second Control point x":"\u7B2C\u4E8C\u63A7\u5236\u9EDE\u7684x","Second Control point y":"\u7B2C\u4E8C\u63A7\u5236\u9EDE\u7684y","Destination point x":"\u76EE\u7684\u9EDE\u7684x","Destination point y":"\u76EE\u7684\u9EDE\u7684y","Quadratic curve":"\u4E8C\u6B21\u66F2\u7DDA","Draw a quadratic curve on screen":"\u5728\u5C4F\u5E55\u4E0A\u7E6A\u5236\u4E8C\u6B21\u66F2\u7DDA","Draw from _PARAM1_;_PARAM2_ to _PARAM5_;_PARAM6_ a quadratic curve (control point: _PARAM3_;_PARAM4_) with _PARAM0_":"\u5F9E_PARAM1_;_PARAM2_ \u5230_PARAM5_;_PARAM6_ \u7528 _PARAM0_ \u7E6A\u5236\u4E00\u500B\u4E8C\u6B21\u66F2\u7DDA (\u63A7\u5236\u9EDE\uFF1A_PARAM3_;_PARAM4_)","Control point x":"\u63A7\u5236\u9EDE x","Control point y":"\u63A7\u5236\u9EDE Y","Begin fill path":"\u958B\u59CB\u586B\u5145\u8DEF\u5F91","Begin to draw a simple one-color fill. Subsequent actions, such as \"Path line\" (in the Advanced category) can be used to draw. Be sure to use \"End fill path\" action when you're done drawing the shape.":"\u958B\u59CB\u7E6A\u5236\u4E00\u500B\u7C21\u55AE\u7684\u55AE\u8272\u586B\u5145. \u96A8\u540E\u7684\u52D5\u4F5C, \u4F8B\u5982 \u201C\u8DEF\u5F91\u7DDA\u201D (\u5728\u9AD8\u7D1A\u985E\u5225\u4E2D) \u53EF\u4EE5\u7528\u4E8E\u7E6A\u5236. \u5728\u7E6A\u5236\u5F62\u72C0\u6642, \u8ACB\u52D9\u5FC5\u4F7F\u7528 \u201C\u7D50\u675F\u586B\u5145\u8DEF\u5F91\u201D \u64CD\u4F5C.","Begin drawing filling of an advanced path with _PARAM0_ (start: _PARAM1_;_PARAM2_)":"\u958B\u59CB\u4F7F\u7528_PARAM0_\u7E6A\u5236\u9AD8\u7D1A\u8DEF\u5F91\u7684\u5716\u5F62\u586B\u5145\uFF08\u958B\u59CB\uFF1A_PARAM1_; _PARAM2_)","Start drawing x":"\u958B\u59CB\u7E6A\u5236 x","Start drawing y":"\u958B\u59CB\u7E6A\u5236 y","End fill path":"\u7D50\u675F\u586B\u5145\u8DEF\u5F91","Finish the filling drawing in an advanced path":"\u5728\u9AD8\u7D1A\u8DEF\u5F91\u4E2D\u5B8C\u6210\u586B\u5145\u5716","Finish the filling drawing in an advanced path with _PARAM0_":"\u4EE5 _PARAM0_ \u5B8C\u6210\u9AD8\u7D1A\u8DEF\u5F91\u7684\u586B\u5145\u7E6A\u5716","Move path drawing position":"\u79FB\u52D5\u8DEF\u5F91\u7E6A\u5236\u4F4D\u7F6E","Move the drawing position for the current path":"\u79FB\u52D5\u7576\u524D\u8DEF\u5F91\u7684\u7E6A\u5716\u4F4D\u7F6E","Move the drawing position of the path to _PARAM1_;_PARAM2_ with _PARAM0_":"\u5C07\u8DEF\u5F91\u7684\u7E6A\u5716\u4F4D\u7F6E\u79FB\u52D5\u5230 _PARAM1_; _PARAM2_ \u548C _PARAM0_","Path line":"\u8DEF\u5F91\u7DDA","Add to a path a line to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"\u5728\u8DEF\u5F91\u4E2D\u6DFB\u52A0\u5230\u4F4D\u7F6E\u7684\u76F4\u7DDA\u3002\u539F\u9EDE\u4F86\u81EA\u4E0A\u4E00\u500B\u52D5\u4F5C\u6216\u201C\u958B\u59CB\u586B\u5145\u8DEF\u5F91\u201D\u6216\u201C\u79FB\u52D5\u8DEF\u5F91\u7E6A\u5716\u4F4D\u7F6E\u201D\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u958B\u59CB\u4F4D\u7F6E\u5C07\u662F\u7269\u4EF6\u7684\u4F4D\u7F6E\u3002","Add to a path a line to the position _PARAM1_;_PARAM2_ with _PARAM0_":"\u5C07\u8DEF\u5F91\u6DFB\u52A0\u5230\u4F4D\u7F6E_PARAM1_; _PARAM2_\u548C_PARAM0_","Path bezier curve":"\u8DEF\u5F91\u8C9D\u585E\u723E\u66F2\u7DDA","Add to a path a bezier curve to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"\u5C07\u8C9D\u585E\u723E\u66F2\u7DDA\u6DFB\u52A0\u5230\u8DEF\u5F91\u4E2D\u3002\u539F\u9EDE\u4F86\u81EA\u4E0A\u4E00\u500B\u52D5\u4F5C\u6216\u201C\u958B\u59CB\u586B\u5145\u8DEF\u5F91\u201D\u6216\u201C\u79FB\u52D5\u8DEF\u5F91\u7E6A\u5716\u4F4D\u7F6E\u201D\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u958B\u59CB\u4F4D\u7F6E\u5C07\u662F\u7269\u4EF6\u7684\u4F4D\u7F6E\u3002","Add to a path a bezier curve to the position _PARAM5_;_PARAM6_ (first control point: _PARAM1_;_PARAM2_, second control point: _PARAM3_;_PARAM4_) with _PARAM0_":"\u5C07\u4E00\u689D\u8C9D\u585E\u723E\u66F2\u7DDA\u6DFB\u52A0\u5230\u5177\u6709_PARAM0_\u7684\u4F4D\u7F6E_PARAM5 _; _ PARAM6_(\u7B2C\u4E00\u63A7\u5236\u9EDE\uFF1A_PARAM1_; _PARAM2_\uFF0C\u7B2C\u4E8C\u63A7\u5236\u9EDE\uFF1A_PARAM3_; _PARAM4_)","Path arc":"\u8DEF\u5F91\u5F27","Add to a path an arc to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"\u5C07\u5713\u5F27\u6DFB\u52A0\u5230\u4F4D\u7F6E\u3002\u539F\u9EDE\u4F86\u81EA\u4E0A\u4E00\u500B\u52D5\u4F5C\u6216\u201C\u958B\u59CB\u586B\u5145\u8DEF\u5F91\u201D\u6216\u201C\u79FB\u52D5\u8DEF\u5F91\u7E6A\u5716\u4F4D\u7F6E\u201D\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u958B\u59CB\u4F4D\u7F6E\u5C07\u662F\u7269\u4EF6\u7684\u4F4D\u7F6E\u3002","Add to a path an arc at the position _PARAM1_;_PARAM2_ (radius: _PARAM3_, start angle: _PARAM4_, end angle: _PARAM5_, anticlockwise: _PARAM6_) with _PARAM0_":"\u5728\u8DEF\u5F91_PARAM1 _; _ PARAM2_\uFF08\u534A\u5F91\uFF1A_PARAM3_\uFF0C\u8D77\u59CB\u89D2\u5EA6\uFF1A_PARAM4_\uFF0C\u7D50\u675F\u89D2\u5EA6\uFF1A_PARAM5_\uFF0C\u9006\u6642\u91DD\uFF1A_PARAM6_\uFF09\u4E0A\u6DFB\u52A0\u4E00\u689D\u5713\u5F27\uFF0C\u5E76\u5E36\u6709_PARAM0_","Center x of circle":"\u5713\u7684\u4E2D\u5FC3 X","Center y of circle":"\u5713\u5FC3\u7684y\u5750\u6A19","Start angle":"\u8D77\u59CB\u89D2\u5EA6","End angle":"\u7D50\u675F\u89D2\u5EA6","Path quadratic curve":"\u8DEF\u5F91\u4E8C\u6B21\u66F2\u7DDA","Add to a path a quadratic curve to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"\u5C07\u4E8C\u6B21\u66F2\u7DDA\u6DFB\u52A0\u5230\u67D0\u500B\u4F4D\u7F6E\u3002\u539F\u9EDE\u4F86\u81EA\u4E0A\u4E00\u500B\u52D5\u4F5C\u6216\u201C\u958B\u59CB\u586B\u5145\u8DEF\u5F91\u201D\u6216\u201C\u79FB\u52D5\u8DEF\u5F91\u7E6A\u5716\u4F4D\u7F6E\u201D\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u958B\u59CB\u4F4D\u7F6E\u5C07\u662F\u7269\u4EF6\u7684\u4F4D\u7F6E\u3002","Add to a path a quadratic curve to the position _PARAM3_;_PARAM4_ (control point: _PARAM1_;_PARAM2_) with _PARAM0_":"\u5C07\u4E00\u689D\u4E8C\u6B21\u66F2\u7DDA\u6DFB\u52A0\u5230\u5177\u6709_PARAM0_\u7684\u4F4D\u7F6E_PARAM3 _; _ PARAM4_\uFF08\u63A7\u5236\u9EDE\uFF1A_PARAM1 _; _ PARAM2_\uFF09","Close Path":"\u9589\u5408\u8DEF\u5F91","Close the path of the advanced shape. This closes the outline between the last and the first point.":"\u9589\u5408\u9AD8\u7D1A\u5F62\u72C0\u7684\u8DEF\u5F91, \u9019\u5C07\u7D50\u675F\u6700\u540E\u4E00\u9EDE\u548C\u7B2C\u4E00\u9EDE\u4E4B\u9593\u7684\u8F2A\u5ED3.","Close the path with _PARAM0_":"\u7528 _PARAM0_ \u95DC\u9589\u8DEF\u5F91","Clear shapes":"\u6E05\u9664\u5F62\u72C0","Clear the rendered shape(s). Useful if not set to be done automatically.":"\u6E05\u9664\u6E32\u67D3\u7684\u5F62\u72C0\u3002\u5982\u679C\u672A\u8A2D\u5B9A\u70BA\u81EA\u52D5\u5B8C\u6210\uFF0C\u5247\u975E\u5E38\u6709\u7528\u3002","Clear the rendered image of _PARAM0_":"\u6E05\u9664_PARAM0_\u7684\u6E32\u67D3\u5716\u50CF","Clear between frames":"\u5728\u5E40\u4E4B\u9593\u6E05\u9664","Activate (or deactivate) the clearing of the rendered shape at the beginning of each frame.":"\u5728\u6BCF\u5E40\u958B\u59CB\u6642\u6FC0\u6D3B\uFF08\u6216\u53D6\u6D88\u6FC0\u6D3B\uFF09\u6E32\u67D3\u5F62\u72C0\u7684\u6E05\u9664\u3002","Clear the rendered image of _PARAM0_ between each frame: _PARAM1_":"\u5728\u6BCF\u5E40\u4E4B\u9593\u6E05\u9664_PARAM0_\u7684\u6E32\u67D3\u5716\u50CF\uFF1A_PARAM1_","Clear between each frame":"\u5728\u6BCF\u500B\u5E40\u4E4B\u9593\u6E05\u9664","Check if the rendered image is cleared between frames.":"\u6AA2\u67E5\u6E32\u67D3\u7684\u5716\u50CF\u662F\u5426\u5728\u5E40\u4E4B\u9593\u88AB\u6E05\u9664\u3002","_PARAM0_ is clearing its rendered image between each frame":"_PARAM0_\u6B63\u5728\u6E05\u9664\u6BCF\u5E40\u4E4B\u9593\u7684\u6E32\u67D3\u5716\u50CF","Change the color used when filling":"\u6539\u8B8A\u586B\u5145\u6642\u4F7F\u7528\u7684\u984F\u8272","Change fill color of _PARAM0_ to _PARAM1_":" \u66F4\u6539\u586B\u5145\u984F\u8272 _PARAM0_ \u70BA _PARAM1_","Filing color red component":"\u6587\u4EF6\u984F\u8272\u70BA\u7D05\u8272\u7684\u7D44\u4EF6","Filing color green component":"\u6587\u4EF6\u984F\u8272\u70BA\u7DA0\u8272\u7684\u7D44\u4EF6","Filing color blue component":"\u6587\u4EF6\u984F\u8272\u70BA\u85CD\u8272\u7684\u7D44\u4EF6","Modify the color of the outline of future drawings.":"\u4FEE\u6539\u672A\u4F86\u5716\u7D19\u8F2A\u5ED3\u7684\u984F\u8272\u3002","Change outline color of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u8F2A\u5ED3\u984F\u8272\u66F4\u6539\u70BA _PARAM1_","Outline color red component":"\u8F2A\u5ED3\u984F\u8272\u7D05\u8272\u7D44\u4EF6","Outline color green component":"\u8F2A\u5ED3\u984F\u8272\u7DA0\u8272\u7D44\u4EF6","Outline color blue component":"\u8F2A\u5ED3\u984F\u8272\u85CD\u8272\u7D44\u4EF6","Modify the size of the outline of future drawings.":"\u4FEE\u6539\u672A\u4F86\u7E6A\u5716\u8F2A\u5ED3\u7684\u5927\u5C0F\u3002","the size of the outline":"\u6AA2\u6E2C\u5916\u6846\u7684\u5927\u5C0F","Test the size of the outline.":"\u6AA2\u6E2C\u5916\u6846\u7684\u5927\u5C0F","Modify the opacity level used when filling future drawings.":"\u4FEE\u6539\u586B\u5145\u672A\u4F86\u5716\u7D19\u6642\u4F7F\u7528\u7684\u4E0D\u900F\u660E\u5EA6\u7D1A\u5225\u3002","the opacity of filling":"\u586B\u5145\u7684\u4E0D\u900F\u660E\u5EA6","Test the value of the opacity level used when filling.":"\u6E2C\u8A66\u586B\u5145\u6642\u4F7F\u7528\u7684\u4E0D\u900F\u660E\u5EA6\u7684\u503C\u3002","Filling opacity":"\u586B\u5145\u4E0D\u900F\u660E\u5EA6","Modify the opacity of the outline of future drawings.":"\u4FEE\u6539\u672A\u4F86\u5716\u7D19\u8F2A\u5ED3\u7684\u4E0D\u900F\u660E\u5EA6\u3002","the opacity of the outline":"\u8F2A\u5ED3\u7684\u4E0D\u900F\u660E\u5EA6","Test the opacity of the outline.":"\u6E2C\u8A66\u8F2A\u5ED3\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Use relative coordinates":"\u4F7F\u7528\u76F8\u5C0D\u5750\u6A19","Set if the object should use relative coordinates (by default) or not. It's recommended to use relative coordinates.":"\u8A2D\u5B9A\u7269\u4EF6\u662F\u5426\u61C9\u4F7F\u7528\u76F8\u5C0D\u5750\u6A19(\u9ED8\u8A8D\u60C5\u6CC1\u4E0B)\u3002\u5EFA\u8B70\u4F7F\u7528\u76F8\u5C0D\u5750\u6A19\u3002","Use relative coordinates for _PARAM0_: _PARAM1_":"\u5C07\u76F8\u5C0D\u5750\u6A19\u7528\u4E8E_PARAM0_\uFF1A_PARAM1_","Use relative coordinates?":"\u4F7F\u7528\u76F8\u5C0D\u5750\u6A19\uFF1F","Relative coordinates":"\u76F8\u5C0D\u5750\u6A19","Check if the coordinates of the shape painter is relative.":"\u6AA2\u67E5\u5F62\u72C0\u7E6A\u5236\u5668\u7684\u5750\u6A19\u662F\u5426\u662F\u76F8\u5C0D\u7684\u3002","_PARAM0_ is using relative coordinates":"_PARAM0_ \u6B63\u5728\u4F7F\u7528\u76F8\u5C0D\u5750\u6A19","Change the center of rotation of _PARAM0_ to _PARAM1_, _PARAM2_":"\u5C07 _PARAM0_ \u7684\u65CB\u8F49\u4E2D\u5FC3\u66F4\u6539\u70BA _PARAM1_, _PARAM2_","Collision Mask":"\u78B0\u649E\u8499\u677F","Change the collision mask of an object to a rectangle relatively to the object origin.":"\u7269\u4EF6\u7684\u78B0\u649E\u906E\u7F69\u66F4\u6539\u70BA\u76F8\u5C0D\u65BC\u7269\u4EF6\u539F\u9EDE\u7684\u77E9\u5F62\u3002","Change the collision mask of _PARAM0_ to a rectangle from _PARAM1_; _PARAM2_ to _PARAM3_; _PARAM4_":"\u5C07 _PARAM0_ \u7684\u78B0\u649E\u906E\u7F69\u66F4\u6539\u70BA\u77E9\u5F62\uFF0C\u5F9E_PARAM1_; _PARAM2_ \u66F4\u6539\u70BA_PARAM3_; _PARAM4_","Position":"\u4F4D\u7F6E","X drawing coordinate of a point from the scene":"\u5C4F\u5E55\u4E0A\u67D0\u9EDE\u7684X\u7E6A\u5236\u5750\u6A19","X scene position":"X\u5834\u666F\u4F4D\u7F6E","Y scene position":"Y\u5834\u666F\u4F4D\u7F6E","Y drawing coordinate of a point from the scene":"\u5C4F\u5E55\u4E0A\u67D0\u9EDE\u7684Y\u7E6A\u5236\u5750\u6A19","X scene coordinate of a point from the drawing":"\u7E6A\u5716\u4E2D\u67D0\u9EDE\u7684 X \u5834\u666F\u5750\u6A19","X drawing position":"X\u7E6A\u5716\u4F4D\u7F6E","Y drawing position":"Y \u7E6A\u5716\u4F4D\u7F6E","Y scene coordinate of a point from the drawing":"\u7E6A\u5716\u4E2D\u67D0\u9EDE\u7684 Y \u5834\u666F\u5750\u6A19","Set anti-aliasing of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u6297\u92F8\u9F52\u8A2D\u5B9A\u70BA _PARAM1_","Anti-aliasing quality level":"\u6297\u92F8\u9F52\u8CEA\u91CF\u7B49\u7D1A","Anti-aliasing type":"\u6297\u92F8\u9F52\u985E\u578B","Checks the selected type of anti-aliasing":"\u6AA2\u67E5\u6240\u9078\u7684\u6297\u92F8\u9F52\u985E\u578B","The anti-aliasing of _PARAM0_ is set to _PARAM1_":"_PARAM0_ \u7684\u6297\u92F8\u9F52\u8A2D\u5B9A\u70BA _PARAM1_","Type of anti-aliasing to check the object against":"\u6AA2\u67E5\u7269\u4EF6\u7684\u6297\u92F8\u9F52\u985E\u578B","Type of anti-aliasing used by a shape painter":"\u5F62\u72C0\u7E6A\u5236\u5668\u4F7F\u7528\u7684\u6297\u92F8\u9F52\u985E\u578B","Returns the type of anti-aliasing in use: none, low, medium, or high.":"\u8FD4\u56DE\u6B63\u5728\u4F7F\u7528\u7684\u6297\u92F8\u9F52\u985E\u578B\uFF1A\u7121\u3001\u4F4E\u3001\u4E2D\u6216\u9AD8\u3002","Linked objects":"\u93C8\u63A5\u7269\u4EF6","Link two objects":"\u93C8\u63A5\u5169\u500B\u7269\u4EF6","Link two objects together, so as to be able to get one from the other.":"\u5C07\u5169\u500B\u7269\u4EF6\u93C8\u63A5\u5728\u4E00\u8D77\uFF0C\u4EE5\u4FBF\u80FD\u5920\u5F9E\u4E00\u500B\u5F97\u5230\u53E6\u4E00\u500B\u3002","Link _PARAM1_ and _PARAM2_":"\u93C8\u63A5 _PARAM1_ \u548C _PARAM2_","Object 1":"\u5C0D\u8C61 1","Object 2":"\u5C0D\u8C61 2","Unlink two objects":"\u53D6\u6D88\u93C8\u63A5\u5169\u500B\u5C0D\u8C61","Unlink two objects.":"\u53D6\u6D88\u93C8\u63A5\u5169\u500B\u7269\u4EF6\u3002","Unlink _PARAM1_ and _PARAM2_":"\u89E3\u9664 _PARAM1_ \u548C _PARAM2_ \u7684\u93C8\u63A5","Unlink all objects from an object":"\u5C07\u6240\u6709\u7269\u4EF6\u8207\u4E00\u500B\u7269\u4EF6\u53D6\u6D88\u93C8\u63A5","Unlink all objects from an object.":"\u5C07\u6240\u6709\u7269\u4EF6\u8207\u4E00\u500B\u7269\u4EF6\u53D6\u6D88\u93C8\u63A5\u3002","Unlink all objects from _PARAM1_":"\u5C07\u6240\u6709\u7269\u4EF6\u8207 _PARAM1_ \u53D6\u6D88\u93C8\u63A5","Take into account linked objects":"\u8003\u616E\u5230\u93C8\u63A5\u7269\u4EF6","Take some objects linked to the object into account for next conditions and actions.\nThe condition will return false if no object was taken into account.":"\u8003\u616E\u5230\u4E0B\u4E00\u500B\u689D\u4EF6\u548C\u52D5\u4F5C\uFF0C\u4E00\u4E9B\u8207\u7269\u4EF6\u76F8\u95DC\u806F\u7684\u7269\u4EF6\u3002\n\u5982\u679C\u4E0D\u8003\u616E\u7269\u4EF6\uFF0C\u689D\u4EF6\u5C07\u8FD4\u56DE false\u3002","Take into account all \"_PARAM1_\" linked to _PARAM2_":"\u8003\u616E\u6240\u6709 \"_PARAM1_\" \u93C8\u63A5\u5230 _PARAM2_","Pick these objects...":"\u9078\u64C7\u9019\u4E9B\u7269\u4EF6...","...if they are linked to this object":"...\u5982\u679C\u4ED6\u5011\u88AB\u93C8\u63A5\u5230\u6B64\u7269\u4EF6","Take objects linked to the object into account for next actions.":"\u5C07\u8207\u7269\u4EF6\u76F8\u95DC\u806F\u7684\u7269\u4EF6\u8A08\u5165\u4E0B\u4E00\u500B\u52D5\u4F5C\u3002","Precise check":"\u7CBE\u78BA\u6AA2\u67E5","Use the object (custom) collision mask instead of the bounding box, making the behavior more precise at the cost of reduced performance":"\u4F7F\u7528\u7269\u4EF6\uFF08\u81EA\u5B9A\u7FA9\uFF09\u78B0\u649E\u906E\u7F69\u800C\u4E0D\u662F\u908A\u754C\u6846\uFF0C\u4EE5\u964D\u4F4E\u6027\u80FD\u70BA\u4EE3\u50F9\u4F7F\u884C\u70BA\u66F4\u7CBE\u78BA","Draggable Behavior":"\u53EF\u62D6\u52D5\u884C\u70BA","Allows objects to be moved using the mouse (or touch). Add the behavior to an object to make it draggable. Use events to enable or disable the behavior when needed.":"\u5141\u8A31\u4F7F\u7528\u9F20\u6A19(\u6216\u89F8\u6478)\u79FB\u52D5\u7269\u4EF6\u3002\u5C07\u884C\u70BA\u6DFB\u52A0\u5230\u7269\u4EF6\u4EE5\u4F7F\u5176\u53EF\u62D6\u52D5\u3002\u5728\u9700\u8981\u6642\u4F7F\u7528\u4E8B\u4EF6\u4F86\u555F\u7528\u6216\u7981\u7528\u884C\u70BA\u3002","Draggable object":"\u53EF\u62D6\u52D5\u7269\u4EF6","Draggable":"\u53EF\u62D6\u52D5","Move objects by holding a mouse button (or touch).":"\u6309\u4F4F\u9F20\u6A19\u6309\u9215(\u6216\u89F8\u6478)\u79FB\u52D5\u7269\u9AD4\u3002","Being dragged":"\u6B63\u88AB\u62D6\u52D5","Check if the object is being dragged. This means the mouse button or touch is pressed on it. When the mouse button or touch is released, the object is no longer being considered dragged (use the condition \"Was just dropped\" to check when the dragging is ending).":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u6B63\u5728\u88AB\u62D6\u66F3\u3002\u9019\u610F\u5473\u8457\u6ED1\u9F20\u6309\u9215\u6216\u89F8\u63A7\u5728\u5176\u4E0A\u88AB\u6309\u4E0B\u3002\u7576\u6ED1\u9F20\u6309\u9215\u6216\u89F8\u63A7\u88AB\u91CB\u653E\u6642\uFF0C\u7269\u4EF6\u4E0D\u518D\u88AB\u8996\u70BA\u6B63\u5728\u88AB\u62D6\u66F3\uFF08\u4F7F\u7528\u689D\u4EF6\u300C\u525B\u88AB\u653E\u4E0B\u300D\u4F86\u6AA2\u67E5\u62D6\u66F3\u4F55\u6642\u7D50\u675F\uFF09\u3002","_PARAM0_ is being dragged":"_PARAM0_ \u6B63\u5728\u88AB\u62D6\u52D5","Was just dropped":"\u525B\u525B\u88AB\u653E\u4E0B","Check if the object was just dropped after being dragged (the mouse button or touch was just released this frame).":"\u6AA2\u67E5\u7269\u4EF6\u5728\u88AB\u62D6\u66F3\u5F8C\u662F\u5426\u525B\u88AB\u653E\u4E0B\uFF08\u6ED1\u9F20\u6309\u9215\u6216\u89F8\u63A7\u5728\u6B64\u5E40\u525B\u88AB\u91CB\u653E\uFF09\u3002","_PARAM0_ was just dropped":"_PARAM0_ \u525B\u525B\u88AB\u653E\u4E0B","Bitmap Text":"\u4F4D\u5716\u6587\u672C","Displays a text using a \"Bitmap Font\" (an image representing characters). This is more performant than a traditional Text object and it allows for complete control on the characters aesthetic.":"\u986F\u793A\u4F7F\u7528 \"\u4F4D\u5716\u5B57\u9AD4\" (\u4EE3\u8868\u5B57\u7B26\u7684\u5716\u50CF) \u7684\u6587\u672C\u3002 \u9019\u6BD4\u50B3\u7D71\u7684\u6587\u672C\u7269\u4EF6\u66F4\u80FD\u6027\u80FD\uFF0C\u5B83\u5141\u8A31\u5C0D\u5B57\u7B26\u7684\u5B8C\u5168\u63A7\u5236\u3002","Bitmap Atlas":"\u4F4D\u5716\u5716\u96C6","Text scale":"\u6587\u5B57\u5927\u5C0F","Font tint":"\u5B57\u9AD4\u8272\u8ABF","Image-based text.":"\u57FA\u65BC\u5F71\u50CF\u7684\u6587\u672C\u3002","Bitmap text":"\u4F4D\u5716\u6587\u672C","Return the text.":"\u8FD4\u56DE\u6587\u672C\u3002","the opacity, between 0 (fully transparent) and 255 (opaque)":"\u4E0D\u900F\u660E\u5EA6\uFF0C\u4ECB\u4E8E 0 (\u5B8C\u5168\u900F\u660E) \u548C 255 (\u4E0D\u900F\u660E) \u4E4B\u9593","the font size, defined in the Bitmap Font":"\u5B57\u9AD4\u5927\u5C0F\uFF0C\u5728\u4F4D\u5716\u5B57\u9AD4\u4E2D\u5B9A\u7FA9","the scale (1 by default)":"\u6587\u5B57\u7E2E\u653E\u5C3A\u5EA6\uFF08\u9ED8\u8A8D\u70BA 1\uFF09","Font name":"\u5B57\u9AD4\u540D\u7A31","the font name (defined in the Bitmap font)":"\u5B57\u9AD4\u540D\u7A31\uFF08\u4F4D\u5716\u5B57\u9AD4\u4E2D\u5B9A\u7FA9\uFF09","the font name":"\u5B57\u9AD4\u540D\u7A31","Set the tint of the Bitmap Text object.":"\u8A2D\u5B9A\u4F4D\u5716\u6587\u672C\u7269\u4EF6\u7684\u8272\u8ABF\u3002","Set tint of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u8272\u8ABF\u66F4\u6539\u70BA _PARAM1_","Bitmap files resources":"\u4F4D\u5716\u6587\u4EF6\u8CC7\u6E90","Change the Bitmap Font and/or the atlas image used by the object.":"\u66F4\u6539\u7269\u4EF6\u4F7F\u7528\u7684\u4F4D\u5716\u5B57\u9AD4\u548C/\u6216\u5716\u96C6\u5716\u50CF\u3002","Set the bitmap font of _PARAM0_ to _PARAM1_ and the atlas to _PARAM2_":"\u5C07 _PARAM0_ \u7684\u4F4D\u5716\u5B57\u9AD4\u8A2D\u70BA _PARAM1_ \uFF0C\u5716\u96C6\u8A2D\u70BA _PARAM2_","Bitmap font resource name":"\u4F4D\u5716\u5B57\u9AD4\u8CC7\u6E90\u540D\u7A31","Texture atlas resource name":"\u7D0B\u7406\u5716\u96C6\u8CC7\u6E90\u540D\u7A31","the text alignment":"\u6587\u5B57\u5C0D\u9F4A","Alignment (\"left\", \"right\" or \"center\")":"\u5C0D\u9F4A(\"\u5DE6\"\u3001\"\u53F3\"\u6216\"\u4E2D\u5FC3\")","Change the alignment of a Bitmap text object.":"\u4FEE\u6539\u4F4D\u5716\u6587\u672C\u7269\u4EF6\u7684\u5C0D\u9F4A\u3002","Set the alignment of _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A _PARAM0_ \u7684\u6587\u5B57\u5C0D\u9F4A\u70BA _PARAM1_","De/activate word wrapping.":"\u53D6\u6D88/\u6FC0\u6D3B\u81EA\u52D5\u63DB\u884C\u3002","Activate word wrapping":"Activate word wrapping","the width, in pixels, after which the text is wrapped on next line":"\u7576\u6587\u5B57\u63DB\u81F3\u4E0B\u4E00\u884C\u6642\uFF0C\u884C\u9996\u7684\u5BEC\u5EA6\uFF0C\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D","File system":"\u6587\u4EF6\u7CFB\u7D71","Access the filesystem of the operating system - only works on native, desktop games exported to Windows, Linux or macOS.":"\u8A2A\u554F\u64CD\u4F5C\u7CFB\u7D71\u7684\u6587\u4EF6\u7CFB\u7D71 - \u50C5\u9069\u7528\u65BC\u5C0E\u51FA\u81F3Windows\u3001Linux\u6216macOS\u7684\u539F\u751F\u684C\u9762\u904A\u6232\u3002","File or directory exists":"\u6587\u4EF6\u6216\u6587\u4EF6\u593E\u5B58\u5728\u6027","Check if the file or directory exists.":"\u6AA2\u67E5\u6587\u4EF6\u6216\u6587\u4EF6\u593E\u662F\u5426\u5B58\u5728\u3002","The path _PARAM0_ exists":"\u8DEF\u5F91_PARAM0_ \u5B58\u5728","Windows, Linux, MacOS":"Windows, Linux, macOS","Path to file or directory":"\u6587\u4EF6\u6216\u6587\u4EF6\u593E\u8DEF\u5F91","Create a directory":"\u5275\u5EFA\u6587\u4EF6\u593E","Create a new directory at the specified path.":"\u5728\u6307\u5B9A\u8DEF\u5F91\u5275\u5EFA\u65B0\u6587\u4EF6\u593E\u3002","Create directory _PARAM0_":"\u5275\u5EFA\u76EE\u9304_PARAM0_","Directory":"\u76EE\u9304","(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occurred.":"(\u53EF\u9078) \u7528\u4E8E\u5B58\u5132\u7D50\u679C\u7684\u8B8A\u91CF\u3002'ok'\uFF1A\u4EFB\u52D9\u6210\u529F\uFF0C'error'\uFF1A\u767C\u751F\u932F\u8AA4\u3002","Save a text into a file":"\u5C07\u6587\u672C\u4FDD\u5B58\u5230\u6587\u4EF6","Save a text into a file. Only use this on small files to avoid any lag or freeze during the game execution.":"\u5C07\u6587\u672C\u4FDD\u5B58\u5230\u6587\u4EF6\u4E2D\u3002\u50C5\u5728\u5C0F\u6587\u4EF6\u4E2D\u4F7F\u7528\u6B64\u9078\u9805\u4EE5\u907F\u514D\u904A\u6232\u57F7\u884C\u904E\u7A0B\u4E2D\u51FA\u73FE\u4EFB\u4F55\u5EF6\u9072\u6216\u51CD\u7D50\u3002","Save _PARAM0_ into file _PARAM1_":"\u4FDD\u5B58 _PARAM0_ \u5230\u6587\u4EF6 _PARAM1_","Save path":"\u4FDD\u5B58\u8DEF\u5F91","Save a text into a file (Async)":"\u5C07\u6587\u672C\u4FDD\u5B58\u5230\u6587\u4EF6\u4E2D\uFF08\u7570\u6B65\uFF09","Save a text into a file asynchronously. Use this for large files to avoid any lag or freeze during game execution. The 'result' variable gets updated when the operation has finished.":"\u5C07\u6587\u672C\u53E6\u5B58\u70BA\u7570\u6B65\u6587\u4EF6\u3002\u4F7F\u7528\u6B64\u9078\u9805\u4EE5\u907F\u514D\u904A\u6232\u57F7\u884C\u904E\u7A0B\u4E2D\u51FA\u73FE\u4EFB\u4F55\u5EF6\u9072\u6216\u51CD\u7D50\u3002 \u64CD\u4F5C\u5B8C\u6210\u540E\uFF0C'\u7D50\u679C'\u8B8A\u91CF\u5C07\u6703\u66F4\u65B0\u3002","Windows, Linux, MacOS/Asynchronous":"Windows\uFF0CLinux\uFF0CMacOS/Asynuous","Save a scene variable into a JSON file":"\u5C07\u5834\u666F\u8B8A\u91CF\u4FDD\u5B58\u5230 JSON \u6587\u4EF6","Save a scene variable (including, for structure, all the children) into a file in JSON format. Only use this on small files to avoid any lag or freeze during the game execution.":"\u5C07\u5834\u666F\u8B8A\u91CF\uFF08\u5C0D\u4E8E\u7D50\u69CB\uFF0C\u5305\u62EC\u6240\u6709\u5B50\u9805\uFF09\u4EE5JSON\u683C\u5F0F\u4FDD\u5B58\u5230\u6587\u4EF6\u4E2D\u3002\u50C5\u5728\u5C0F\u6587\u4EF6\u4E0A\u4F7F\u7528\u6B64\u9078\u9805\uFF0C\u4EE5\u907F\u514D\u5728\u904A\u6232\u57F7\u884C\u671F\u9593\u51FA\u73FE\u4EFB\u4F55\u5EF6\u9072\u6216\u51CD\u7D50\u3002","Save scene variable _PARAM0_ into file _PARAM1_ as JSON":"\u5C07\u5834\u666F\u8B8A\u91CF _PARAM0_ \u4FDD\u5B58\u70BA _PARAM1_ \u6587\u4EF6\u70BA JSON","Save a scene variable into a JSON file (Async)":"\u5C07\u5834\u666F\u8B8A\u91CF\u4FDD\u5B58\u5230 JSON \u6587\u4EF6 (\u7570\u6B65)","Save the scene variable (including, for structures, all the children) into a file in JSON format, asynchronously. Use this for large files to avoid any lag or freeze during game execution. The 'result' variable gets updated when the operation has finished.":"\u5C07\u5834\u666F\u8B8A\u91CF(\u5305\u62EC\u7D50\u69CB\u4E2D\u7684\u6240\u6709\u5B50\u5143\u7D20)\u4FDD\u5B58\u70BA\u4E00\u500B JSON \u683C\u5F0F\u7684\u6587\u4EF6\uFF0C\u7570\u6B65\u683C\u5F0F\u3002 \u7528\u4E8E\u5927\u578B\u6587\u4EF6\u4EE5\u907F\u514D\u904A\u6232\u57F7\u884C\u904E\u7A0B\u4E2D\u51FA\u73FE\u4EFB\u4F55\u5EF6\u9072\u6216\u51CD\u7D50\u3002\u64CD\u4F5C\u5B8C\u6210\u540E\u201C\u7D50\u679C\u201D\u8B8A\u91CF\u6703\u66F4\u65B0\u3002","Load a text from a file (Async)":"\u5F9E\u6587\u4EF6\u52A0\u8F09\u6587\u672C(\u7570\u6B65)","Load a text from a file, asynchronously. Use this for large files to avoid any lag or freeze during game execution. The content of the file will be available in the scene variable after a small delay (usually a few milliseconds). The 'result' variable gets updated when the operation has finished.":"\u5F9E\u6587\u4EF6\u52A0\u8F09\u6587\u672C\u7570\u6B65\u3002\u7528\u5B83\u4F86\u8655\u7406\u5927\u578B\u6587\u4EF6\uFF0C\u4EE5\u907F\u514D\u904A\u6232\u57F7\u884C\u904E\u7A0B\u4E2D\u51FA\u73FE\u4EFB\u4F55\u5EF6\u9072\u6216\u51CD\u7D50\u3002 \u6587\u4EF6\u7684\u5167\u5BB9\u5C07\u5728\u7A0D\u540E\u7684\u5834\u666F\u8B8A\u91CF\u4E2D\u53EF\u7528 (\u901A\u5E38\u662F\u5E7E\u6BEB\u79D2)\u3002 \u64CD\u4F5C\u5B8C\u6210\u540E\uFF0C'\u7D50\u679C'\u8B8A\u91CF\u5C07\u6703\u66F4\u65B0\u3002","Load text from _PARAM1_ into scene variable _PARAM0_ (Async)":"\u5F9E _PARAM1_ \u52A0\u8F09\u6587\u672C\u5230\u5834\u666F\u8B8A\u91CF _PARAM0_ (\u7570\u6B65)","Load path":"\u52A0\u8F09\u8DEF\u5F91","Normalize the file content (recommended)":"\u898F\u8303\u5316\u6587\u4EF6\u5167\u5BB9(\u63A8\u85A6)","This replaces Windows new lines characters (\"CRLF\") by a single new line character.":"\u9019\u6703\u5C07 Windows \u63DB\u884C\u7B26 (\"CRLF\") \u66FF\u63DB\u70BA\u55AE\u500B\u63DB\u884C\u7B26\u3002","Load a text from a file":"\u5F9E\u6587\u4EF6\u4E2D\u52A0\u8F09\u6587\u672C","Load a text from a file. Only use this on small files to avoid any lag or freeze during the game execution.":"\u5F9E\u6587\u4EF6\u4E2D\u52A0\u8F09\u6587\u672C\u3002\u50C5\u5728\u5C0F\u6587\u4EF6\u4E2D\u4F7F\u7528\u6B64\u9078\u9805\u4EE5\u907F\u514D\u904A\u6232\u57F7\u884C\u904E\u7A0B\u4E2D\u51FA\u73FE\u4EFB\u4F55\u5EF6\u9072\u6216\u51CD\u7D50\u3002","Load text from _PARAM1_ into scene variable _PARAM0_":"\u5F9E _PARAM1_ \u5C07\u6587\u672C\u52A0\u8F09\u5230\u5834\u666F\u8B8A\u91CF _PARAM0_","Load a scene variable from a JSON file":"\u5F9E JSON \u6587\u4EF6\u52A0\u8F09\u5834\u666F\u8B8A\u91CF","Load a JSON formatted text from a file and convert it to a scene variable (potentially a structure variable with children). Only use this on small files to avoid any lag or freeze during the game execution.":"\u5F9E\u6587\u4EF6\u4E2D\u52A0\u8F09 JSON \u683C\u5F0F\u7684\u6587\u672C\uFF0C\u5E76\u5C07\u5176\u8F49\u63DB\u70BA\u5834\u666F\u8B8A\u91CF(\u53EF\u80FD\u662F\u5E36\u6709\u5B50\u7BC0\u9EDE\u7684\u7D50\u69CB\u8B8A\u91CF)\u3002\u53EA\u6709\u5728\u5C0F\u6587\u4EF6\u4E0A\u4F7F\u7528\u9019\u500B\uFF0C\u4EE5\u907F\u514D\u4EFB\u4F55\u5EF6\u9072\u6216\u5728\u904A\u6232\u57F7\u884C\u671F\u9593\u51CD\u7D50\u3002","Load JSON from _PARAM1_ into scene variable _PARAM0_":"\u5F9E _PARAM1_ \u52A0\u8F09JSON \u5230\u5834\u666F\u8B8A\u91CF _PARAM0_","Load a scene variable from a JSON file (Async)":"\u5F9E JSON \u6587\u4EF6\u52A0\u8F09\u5834\u666F\u8B8A\u91CF(\u7570\u6B65)","Load a JSON formatted text from a file and convert it to a scene variable (potentially a structure variable with children), asynchronously. Use this for large files to avoid any lag or freeze during game execution. The content of the file will be available as a scene variable after a small delay (usually a few milliseconds). The 'result' variable gets updated when the operation has finished.":"\u5F9E\u6587\u4EF6\u52A0\u8F09JSON\u683C\u5F0F\u5316\u6587\u672C\u5E76\u5C07\u5176\u8F49\u63DB\u70BA\u5834\u666F\u8B8A\u91CF(\u53EF\u80FD\u662F\u4E00\u500B\u5E36\u5B50\u7684\u7D50\u69CB\u8B8A\u91CF)\uFF0C\u7570\u6B65\u7684\u3002 \u7528\u4E8E\u5927\u578B\u6587\u4EF6\uFF0C\u4EE5\u907F\u514D\u904A\u6232\u57F7\u884C\u904E\u7A0B\u4E2D\u51FA\u73FE\u4EFB\u4F55\u5EF6\u9072\u6216\u51CD\u7D50\u3002 \u6587\u4EF6\u7684\u5167\u5BB9\u5C07\u4F5C\u70BA\u5834\u666F\u8B8A\u91CF\u5728\u7A0D\u540E\u986F\u793A(\u901A\u5E38\u662F\u5E7E\u6BEB\u79D2)\u3002 \u64CD\u4F5C\u5B8C\u6210\u540E\uFF0C'\u7D50\u679C'\u8B8A\u91CF\u5C07\u6703\u66F4\u65B0\u3002","Delete a file":"\u522A\u9664\u6587\u4EF6","Delete a file from the filesystem.":"\u5F9E\u6587\u4EF6\u7CFB\u7D71\u4E2D\u522A\u9664\u6587\u4EF6\u3002","Delete the file _PARAM0_":"\u522A\u9664\u6587\u4EF6 _PARAM0_","File path":"\u6587\u4EF6\u8DEF\u5F91","Delete a file (Async)":"\u522A\u9664\u6587\u4EF6(\u7570\u6B65)","Delete a file from the filesystem asynchronously. The option result variable will be updated once the file is deleted.":"\u5F9E\u6587\u4EF6\u7CFB\u7D71\u4E2D\u522A\u9664\u7570\u6B65\u6587\u4EF6\u3002\u522A\u9664\u6587\u4EF6\u540E\uFF0C\u9078\u9805\u7D50\u679C\u8B8A\u91CF\u5C07\u6703\u66F4\u65B0\u3002","Read a directory":"\u8B80\u53D6\u76EE\u9304","Reads the contents of a directory (all files and sub-directories) and stores them in an array.":"\u8B80\u53D6\u76EE\u9304\u7684\u5167\u5BB9\uFF08\u6240\u6709\u6587\u4EF6\u548C\u5B50\u76EE\u9304\uFF09\u4E26\u5C07\u5176\u5B58\u5132\u5728\u6578\u7D44\u4E2D\u3002","Read the directory _PARAM0_ into _PARAM1_":"\u5C07\u76EE\u9304 _PARAM0_ \u8B80\u53D6\u5230 _PARAM1_ \u4E2D","Directory path":"\u76EE\u9304\u8DEF\u5F91","Variable to store the result":"\u5B58\u5132\u7D50\u679C\u7684\u8B8A\u91CF","Desktop folder":"\u684C\u9762\u6587\u4EF6\u593E","Get the path to the desktop folder.":"\u7372\u53D6\u684C\u9762\u6587\u4EF6\u593E\u7684\u8DEF\u5F91\u3002","Documents folder":"\u6587\u6A94\u6587\u4EF6\u593E","Get the path to the documents folder.":"\u7372\u53D6\u6587\u6A94\u6587\u4EF6\u593E\u7684\u8DEF\u5F91\u3002","Pictures folder":"\u5716\u7247\u6587\u4EF6\u593E","Get the path to the pictures folder.":"\u7372\u53D6\u5716\u7247\u6587\u4EF6\u593E\u7684\u8DEF\u5F91\u3002","Game executable file":"\u904A\u6232\u53EF\u57F7\u884C\u6587\u4EF6","Get the path to this game executable file.":"\u7372\u53D6\u6B64\u904A\u6232\u53EF\u57F7\u884C\u6587\u4EF6\u7684\u8DEF\u5F91\u3002","Game executable folder":"\u904A\u6232\u53EF\u57F7\u884C\u6587\u4EF6\u593E","Get the path to this game executable folder.":"\u7372\u53D6\u6B64\u904A\u6232\u53EF\u57F7\u884C\u6587\u4EF6\u593E\u7684\u8DEF\u5F91\u3002","Userdata folder (for application settings)":"\u7528\u6236\u8CC7\u6599\u6587\u4EF6\u593E (\u7528\u4E8E\u61C9\u7528\u7A0B\u5E8F\u8A2D\u5B9A)","Get the path to userdata folder (for application settings).":"\u7372\u53D6\u5230\u7528\u6236\u8CC7\u6599\u6587\u4EF6\u593E\u7684\u8DEF\u5F91(\u7528\u4E8E\u61C9\u7528\u7A0B\u5E8F\u8A2D\u5B9A)\u3002","User's Home folder":"\u7528\u6236\u7684\u4E3B\u6587\u4EF6\u593E","Get the path to the user home folder.":"\u7372\u53D6\u7528\u6236\u4E3B\u6587\u4EF6\u593E\u7684\u8DEF\u5F91\u3002","Temp folder":"\u81E8\u6642\u6587\u4EF6\u593E","Get the path to temp folder.":"\u7372\u53D6\u81E8\u6642\u6587\u4EF6\u593E\u7684\u8DEF\u5F91\u3002","Path delimiter":"\u8DEF\u5F91\u5206\u9694\u7B26","Get the operating system path delimiter.":"\u7372\u53D6\u64CD\u4F5C\u7CFB\u7D71\u8DEF\u5F91\u5206\u9694\u7B26\u3002","Get directory name from a path":"\u5F9E\u8DEF\u5F91\u7372\u53D6\u76EE\u9304\u540D\u7A31","Returns the portion of the path that represents the directories, without the ending file name.":"\u8FD4\u56DE\u4EE3\u8868\u76EE\u9304\u7684\u8DEF\u5F91\u90E8\u5206\uFF0C\u6C92\u6709\u7D50\u675F\u6587\u4EF6\u540D\u7A31\u3002","File or folder path":"\u6587\u4EF6\u6216\u6587\u4EF6\u593E\u8DEF\u5F91","Get file name from a path":"\u5F9E\u8DEF\u5F91\u7372\u53D6\u6587\u4EF6\u540D","Returns the name of the file with its extension, if any.":"\u5982\u679C\u6709\u64F4\u5C55\uFF0C\u5247\u8FD4\u56DE\u6587\u4EF6\u7684\u540D\u7A31\u3002","Get the extension from a file path":"\u5F9E\u6587\u4EF6\u8DEF\u5F91\u7372\u53D6\u64F4\u5C55","Returns the extension of the file designated by the given path, including the extension period. For example: \".txt\".":"\u8FD4\u56DE\u7D66\u5B9A\u8DEF\u5F91\u6307\u5B9A\u7684\u6587\u4EF6\u64F4\u5C55\u540D\uFF0C\u5305\u62EC\u64F4\u5C55\u6642\u9593\u3002\u4F8B\u5982\uFF1A\u201C.txt\u201D\u3002","Text Input":"\u6587\u672C\u8F38\u5165","A text field the player can type text into.":"\u73A9\u5BB6\u53EF\u4EE5\u5728\u5176\u4E2D\u8F38\u5165\u6587\u672C\u7684\u6587\u672C\u5B57\u6BB5\u3002","Initial value":"\u521D\u59CB\u503C","Placeholder":"\u5360\u4F4D\u7B26","Font size (px)":"\u5B57\u9AD4\u5927\u5C0F (px)","Text area":"\u6587\u672C\u5340\u57DF","Telephone number":"\u96FB\u8A71\u865F\u78BC","Input type":"\u8F38\u5165\u985E\u578B","By default, a \"text\" is single line. Choose \"text area\" to allow multiple lines to be entered.":"\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u201C\u6587\u672C\u201D\u662F\u55AE\u884C\u3002\u9078\u64C7\u201C\u6587\u672C\u5340\u57DF\u201D\u5141\u8A31\u8F38\u5165\u591A\u884C\u3002","Field":"\u5B57\u6BB5","Disabled":"\u5DF2\u7981\u7528","Enable spell check":"\u555F\u7528\u62FC\u5BEB\u6AA2\u67E5","Field appearance":"\u5B57\u6BB5\u5916\u89C0","Border appearance":"\u908A\u6846\u5916\u89C0","Padding (horizontal)":"\u586B\u5145\uFF08\u6C34\u5E73\uFF09","Padding (vertical)":"\u586B\u5145\uFF08\u5782\u76F4\uFF09","Max length":"\u6700\u5927\u9577\u5EA6","The maximum length of the input value (this property will be ignored if the input type is a number).":"\u8F38\u5165\u503C\u7684\u6700\u5927\u9577\u5EA6(\u5982\u679C\u8F38\u5165\u985E\u578B\u70BA\u6578\u5B57\uFF0C\u672C\u5C6C\u6027\u5C07\u88AB\u5FFD\u7565)\u3002","Text alignment":"\u6587\u672C\u5C0D\u9F4A","Text input":"\u6587\u672C\u8F38\u5165","the placeholder":"\u5360\u4F4D\u7B26","Set the font of the object.":"\u8A2D\u5B9A\u7269\u4EF6\u7684\u5B57\u9AD4\u3002","Set the font of _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A _PARAM0_ \u7684\u5B57\u9AD4\u70BA _PARAM1_","the input type":"\u8F38\u5165\u985E\u578B","Set the text color of the object.":"\u8A2D\u5B9A\u7269\u4EF6\u7684\u6587\u672C\u984F\u8272\u3002","Set the text color of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u6587\u672C\u984F\u8272\u8A2D\u70BA _PARAM1_","Set the fill color of the object.":"\u8A2D\u5B9A\u7269\u4EF6\u7684\u586B\u5145\u984F\u8272\u3002","Set the fill color of _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A _PARAM0_ \u7684\u586B\u5145\u984F\u8272\u70BA _PARAM1_","the fill opacity, between 0 (fully transparent) and 255 (opaque)":"\u586B\u5145\u4E0D\u900F\u660E\u5EA6, \u4ECB\u4E8E 0 (\u5B8C\u5168\u900F\u660E) \u548C 255 (\u4E0D\u900F\u660E)","the fill opacity":"\u586B\u5145\u4E0D\u900F\u660E\u5EA6","Border color":"\u908A\u6846\u984F\u8272","Set the border color of the object.":"\u8A2D\u5B9A\u7269\u4EF6\u7684\u908A\u6846\u984F\u8272\u3002","Set the border color of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u908A\u6846\u984F\u8272\u8A2D\u70BA _PARAM1_","Border opacity":"\u908A\u6846\u4E0D\u900F\u660E\u5EA6","the border opacity, between 0 (fully transparent) and 255 (opaque)":"\u908A\u6846\u4E0D\u900F\u660E\u5EA6, 0(\u5B8C\u5168\u900F\u660E) \u548C 255 (\u4E0D\u900F\u660E)","the border opacity":"\u908A\u754C\u4E0D\u900F\u660E\u5EA6","Border width":"\u908A\u6846\u5BEC\u5EA6","the border width":"\u908A\u754C\u5BEC\u5EA6","Read-only":"\u53EA\u8B80","the text input is read-only":"\u6587\u672C\u8F38\u5165\u70BA\u53EA\u8B80","read-only":"\u53EA\u8B80","Read-only?":"\u53EA\u8B80\uFF1F","the text input is disabled":"\u6587\u672C\u8F38\u5165\u5DF2\u7981\u7528","disabled":"\u5DF2\u7981\u7528","Spell check enabled":"\u62FC\u5BEB\u6AA2\u67E5\u5DF2\u555F\u7528","spell check is enabled":"\u62FC\u5BEB\u6AA2\u67E5\u5DF2\u555F\u7528","spell check enabled":"\u62FC\u5BEB\u6AA2\u67E5\u5DF2\u555F\u7528","Focused":"\u805A\u7126","Check if the text input is focused (the cursor is in the field and player can type text in).":"\u6AA2\u67E5\u6587\u672C\u8F38\u5165\u662F\u5426\u88AB\u805A\u7126(\u5149\u6A19\u5728\u5B57\u6BB5\u4E2D\uFF0C\u73A9\u5BB6\u53EF\u4EE5\u8F38\u5165\u6587\u672C)\u3002","_PARAM0_ is focused":"_PARAM0_ \u662F\u7126\u9EDE\u7684","Input is submitted":"\u8F38\u5165\u5DF2\u63D0\u4EA4","Check if the input is submitted, which usually happens when the Enter key is pressed on a keyboard, or a specific button on mobile virtual keyboards.":"\u6AA2\u67E5\u8F38\u5165\u662F\u5426\u5DF2\u63D0\u4EA4\uFF0C\u901A\u5E38\u5728\u9375\u76E4\u4E0A\u6309\u4E0BEnter\u9375\u6216\u79FB\u52D5\u865B\u64EC\u9375\u76E4\u4E0A\u7684\u7279\u5B9A\u6309\u9215\u6642\u767C\u751F\u3002","_PARAM0_ value was submitted":"_PARAM0_\u503C\u5DF2\u63D0\u4EA4","Focus":"\u7126\u9EDE","Focus the input so that text can be entered (like if it was touched/clicked).":"\u7126\u9EDE\u8F38\u5165\uFF0C\u4EE5\u4FBF\u53EF\u4EE5\u8F38\u5165\u6587\u672C(\u5C31\u50CF\u89F8\u6478/\u55AE\u64CA\u4E00\u6A23)\u3002","Focus _PARAM0_":"\u7126\u9EDE _PARAM0_","2D Physics Engine":"2D \u7269\u7406\u5F15\u64CE","Physics Engine 2.0":"\u7269\u7406\u5F15\u64CE 2.0","Static":"\u975C\u614B\u7269\u9AD4","Dynamic":"\u52D5\u614B","Kinematic":"\u904B\u52D5\u5B78","A static object won't move (perfect for obstacles). Dynamic objects can move. Kinematic will move according to forces applied to it only (useful for characters or specific mechanisms).":"\u975C\u614B\u5C0D\u8C61\u4E0D\u6703\u79FB\u52D5\uFF08\u975E\u5E38\u9069\u5408\u969C\u7919\u7269\uFF09\u3002\u52D5\u614B\u5C0D\u8C61\u53EF\u4EE5\u79FB\u52D5\u3002\u904B\u52D5\u5B78\u5C07\u6839\u64DA\u65BD\u52A0\u5728\u5176\u4E0A\u7684\u529B\u79FB\u52D5\uFF08\u5C0D\u89D2\u8272\u6216\u7279\u5B9A\u6A5F\u69CB\u6709\u7528\uFF09\u3002","Considered as a bullet":"\u88AB\u8996\u70BA\u5B50\u5F48","Useful for fast moving objects which requires a more accurate collision detection.":"\u5C0D\u65BC\u9700\u8981\u66F4\u7CBE\u78BA\u7684\u78B0\u649E\u6AA2\u6E2C\u7684\u5FEB\u901F\u79FB\u52D5\u7269\u9AD4\u5F88\u6709\u7528\u3002","Physics body advanced settings":"\u7269\u7406\u8EAB\u9AD4\u7684\u9032\u968E\u8A2D\u5B9A","If enabled, the object won't rotate and will stay at the same angle. Useful for characters for example.":"\u5982\u679C\u555F\u7528\uFF0C\u7269\u9AD4\u5C07\u4E0D\u6703\u65CB\u8F49\u4E26\u4FDD\u6301\u5728\u76F8\u540C\u7684\u89D2\u5EA6\u3002\u4F8B\u5982\uFF0C\u9019\u5C0D\u65BC\u89D2\u8272\u975E\u5E38\u6709\u7528\u3002","Can be put to sleep by the engine":"\u53EF\u4EE5\u88AB\u5F15\u64CE\u9032\u5165\u7761\u7720\u72C0\u614B","Allows the physics engine to stop computing interaction with the object when it's not touched. It's recommended to keep this on.":"\u5141\u8A31\u7269\u7406\u5F15\u64CE\u5728\u7269\u9AD4\u672A\u88AB\u89F8\u78B0\u6642\u505C\u6B62\u8A08\u7B97\u8207\u7269\u9AD4\u7684\u4EA4\u4E92\u3002\u5EFA\u8B70\u4FDD\u6301\u9019\u500B\u958B\u555F\u3002","Box":"\u6587\u672C\u6846","Edge":"\u908A\u7DE3","Polygon":"\u591A\u908A\u5F62","Origin":"\u8D77\u6E90","TopLeft":"\u5DE6\u4E0A","Density":"\u5BC6\u5EA6","Define the weight of the object, according to its size. The bigger the density, the heavier the object.":"\u6839\u64DA\u7269\u9AD4\u7684\u5927\u5C0F\u4F86\u5B9A\u7FA9\u7269\u9AD4\u7684\u91CD\u91CF\u3002\u5BC6\u5EA6\u8D8A\u5927\uFF0C\u7269\u9AD4\u8D8A\u91CD\u3002","The friction applied when touching other objects. The higher the value, the more friction.":"\u89F8\u6478\u5176\u4ED6\u7269\u9AD4\u6642\u61C9\u7528\u7684\u6469\u64E6\u529B\u3002\u503C\u8D8A\u9AD8\uFF0C\u6469\u64E6\u5C31\u8D8A\u5927\u3002","Restitution":"\u6062\u5FA9\u539F\u72C0","The \"bounciness\" of the object. The higher the value, the more other objects will bounce against it.":"\u7269\u9AD4\u7684\u201C\u5F48\u6027\u201D\u3002\u503C\u8D8A\u9AD8\uFF0C\u5176\u4ED6\u7269\u9AD4\u8207\u5176\u53CD\u5F48\u7684\u6B21\u6578\u8D8A\u591A\u3002","Simulate realistic 2D physics for the object including gravity, forces, collisions, and joints.":"\u70BA\u6B64\u7269\u4EF6\u6A21\u64EC\u771F\u5BE6\u7684 2D \u7269\u7406\u6548\u679C\uFF0C\u5305\u62EC\u91CD\u529B\u3001\u529B\u3001\u78B0\u649E\u548C\u95DC\u7BC0\u3002","Edit shape and advanced settings":"\u7DE8\u8F2F\u5F62\u72C0\u548C\u9AD8\u7D1A\u8A2D\u7F6E","World scale":"\u4E16\u754C\u6BD4\u4F8B","Return the world scale.":"\u8FD4\u56DE\u4E16\u754C\u6BD4\u4F8B\u3002","Global":"\u5168\u5C40","World gravity on X axis":"X\u8EF8\u4E0A\u7684\u4E16\u754C\u91CD\u529B","Compare the world gravity on X axis.":"\u6BD4\u8F03X\u8EF8\u4E0A\u7684\u4E16\u754C\u91CD\u529B\u3002","the world gravity on X axis":"X\u8EF8\u4E0A\u7684\u4E16\u754C\u91CD\u529B","World gravity on Y axis":"Y\u8EF8\u4E0A\u7684\u4E16\u754C\u91CD\u529B","Compare the world gravity on Y axis.":"\u6BD4\u8F03Y\u8EF8\u4E0A\u7684\u4E16\u754C\u91CD\u529B\u3002","the world gravity on Y axis":"Y\u8EF8\u4E0A\u7684\u4E16\u754C\u91CD\u529B","World gravity":"\u4E16\u754C\u91CD\u529B","Modify the world gravity.":"\u4FEE\u6539\u4E16\u754C\u91CD\u529B\u3002","While an object is needed, this will apply to all objects using the behavior.":"\u7576\u9700\u8981\u7269\u4EF6\u6642\uFF0C\u9019\u5C07\u9069\u7528\u4E8E\u6240\u6709\u4F7F\u7528\u8A72\u884C\u70BA\u7684\u7269\u4EF6\u3002","Set the world gravity of _PARAM0_ to _PARAM2_;_PARAM3_":"\u5C07 _PARAM0_ \u7684\u4E16\u754C\u91CD\u529B\u8A2D\u70BA _PARAM2_;_PARAM3_","World time scale":"\u4E16\u754C\u6642\u9593\u8303\u570D","Compare the world time scale.":"\u6BD4\u8F03\u4E16\u754C\u6642\u9593\u523B\u5EA6\u3002","the world time scale":"\u4E16\u754C\u6642\u9593\u8303\u570D","Time scale to compare to (1 by default)":"\u8981\u6BD4\u8F03\u7684\u6642\u9593\u5C3A\u5EA6(\u9ED8\u8A8D\u70BA 1)","Modify the world time scale.":"\u4FEE\u6539\u4E16\u754C\u6642\u9593\u5C3A\u5EA6\u3002","Set the world time scale of _PARAM0_ to _PARAM2_":"\u8A2D\u5B9A _PARAM0_ \u7684\u4E16\u754C\u6642\u9593\u5C3A\u5EA6\u70BA _PARAM2_","Time scale (1 by default)":"\u6642\u9593\u7E2E\u653E(\u9ED8\u8A8D\u70BA1)","Is dynamic":"\u662F\u52D5\u614B\u7684","Check if an object is dynamic.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u70BA\u52D5\u614B\u7269\u9AD4\u3002","_PARAM0_ is dynamic":"_PARAM0_ \u662F\u52D5\u614B\u7684","Dynamics":"\u52D5\u614B","Set as dynamic":"\u8A2D\u5B9A\u70BA\u52D5\u614B","Set an object as dynamic. Is affected by gravity, forces and velocities.":"\u5C07\u7269\u4EF6\u8A2D\u5B9A\u70BA\u52D5\u614B\u3002\u53D7\u5230\u91CD\u529B\u3001\u529B\u91CF\u548C\u901F\u5EA6\u7684\u5F71\u97FF\u3002","Set _PARAM0_ as dynamic":"\u8A2D\u5B9A _PARAM0_ \u70BA\u52D5\u614B","Is static":"\u975C\u614B\u7684","Check if an object is static.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u975C\u6B62\u72C0\u614B\u3002","_PARAM0_ is static":"_PARAM0_ \u662F\u975C\u614B\u7684","Set as static":"\u8A2D\u5B9A\u70BA\u975C\u614B\u7684","Set an object as static. Is not affected by gravity, and can't be moved by forces or velocities at all.":"\u5C07\u7269\u4EF6\u8A2D\u5B9A\u70BA\u975C\u614B\u3002\u4E0D\u53D7\u91CD\u529B\u5F71\u97FF\uFF0C\u4E0D\u80FD\u88AB\u529B\u91CF\u6216\u901F\u5EA6\u79FB\u52D5\u3002","Set _PARAM0_ as static":"\u8A2D\u5B9A _PARAM0_ \u70BA\u975C\u614B\u7684","Is kinematic":"\u662F\u904B\u52D5\u5B78\u7684","Check if an object is kinematic.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u904B\u52D5\u5B78\u7684\u3002","_PARAM0_ is kinematic":"_PARAM0_ \u662F\u904B\u52D5\u5B78\u7684","Set as kinematic":"\u8A2D\u70BA\u904B\u52D5\u5B78\u6A21\u5F0F","Set an object as kinematic. Is like a static body but can be moved through its velocity.":"\u5C07\u7269\u4EF6\u8A2D\u5B9A\u70BA\u904B\u52D5\u5B78\u7684\u3002\u5C31\u50CF\u4E00\u500B\u975C\u614B\u7269\u9AD4\uFF0C\u4F46\u53EF\u4EE5\u901A\u904E\u5B83\u7684\u901F\u5EA6\u79FB\u52D5\u3002","Set _PARAM0_ as kinematic":"\u5C07 _PARAM0_ \u8A2D\u5B9A\u904B\u52D5\u6A21\u5F0F","Is treated as a bullet":"\u4F5C\u70BA\u5B50\u5F48\u8655\u7406","Check if the object is being treated as a bullet.":"\u6E2C\u8A66\u7269\u4EF6\u662F\u5426\u88AB\u7576\u4F5C\u5B50\u5F48\u3002","_PARAM0_ is treated as a bullet":"_PARAM0_ \u88AB\u8996\u70BA\u5B50\u5F48","Treat as bullet":"\u4F5C\u70BA\u5B50\u5F48\u8655\u7406","Treat the object as a bullet. Better collision handling on high speeds at cost of some performance.":"\u5C07\u7269\u4EF6\u8996\u70BA\u5B50\u5F48\u3002\u66F4\u597D\u5730\u5FEB\u901F\u8655\u7406\u78B0\u649E\uFF0C\u4EE3\u50F9\u662F\u67D0\u4E9B\u6027\u80FD\u3002","Treat _PARAM0_ as bullet: _PARAM2_":"\u5C07 _PARAM0_ \u4F5C\u70BA\u5B50\u5F48\u8655\u7406: _PARAM2_","Has fixed rotation":"\u6709\u56FA\u5B9A\u65CB\u8F49","Check if an object has fixed rotation.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u5177\u6709\u56FA\u5B9A\u65CB\u8F49\u3002","_PARAM0_ has fixed rotation":"_PARAM0_ \u6709\u56FA\u5B9A\u65CB\u8F49","Enable or disable an object fixed rotation. If enabled the object won't be able to rotate.":"\u555F\u7528\u6216\u7981\u7528\u7269\u4EF6\u56FA\u5B9A\u65CB\u8F49\u3002\u5982\u679C\u555F\u7528\uFF0C\u7269\u4EF6\u5C07\u7121\u6CD5\u65CB\u8F49\u3002","Set _PARAM0_ fixed rotation: _PARAM2_":"\u8A2D\u5B9A _PARAM0_ \u56FA\u5B9A\u65CB\u8F49\uFF1A _PARAM2_","Is sleeping allowed":"\u5141\u8A31\u7761\u7720","Check if an object can sleep.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u53EF\u4EE5\u4F11\u7720\u3002","_PARAM0_ can sleep":"_PARAM0_ \u53EF\u4EE5\u7761\u7720","Sleeping allowed":"\u5141\u8A31\u7761\u7720","Allow or not an object to sleep. If enabled the object will be able to sleep, improving performance for non-currently-moving objects.":"\u5141\u8A31\u6216\u7981\u6B62\u7269\u9AD4\u7761\u7720\u3002\u5982\u679C\u555F\u7528\uFF0C\u5247\u8A72\u7269\u4EF6\u5C07\u80FD\u5920\u4F11\u7720\uFF0C\u5F9E\u800C\u63D0\u9AD8\u975E\u7576\u524D\u79FB\u52D5\u7269\u4EF6\u7684\u6027\u80FD\u3002","Allow _PARAM0_ to sleep: _PARAM2_":"\u5141\u8A31 _PARAM0_ \u4F11\u7720: _PARAM2_","Can sleep":"\u53EF\u4EE5\u7761\u7720\u55CE\uFF1F","Is sleeping":"\u6B63\u5728\u7761\u7720","Check if an object is sleeping.":"\u6AA2\u67E5\u7269\u9AD4\u662F\u5426\u6B63\u5728\u4F11\u7720\u3002","_PARAM0_ is sleeping":"_PARAM0_ \u6B63\u5728\u7761\u7720","Shape scale":"\u5F62\u72C0\u6BD4\u4F8B","Modify an object shape scale. It affects custom shape dimensions and shape offset. If custom dimensions are not set, the body will be scaled automatically to the object size.":"\u4FEE\u6539\u7269\u4EF6\u5F62\u72C0\u6BD4\u4F8B\u3002\u5B83\u5F71\u97FF\u81EA\u5B9A\u7FA9\u5F62\u72C0\u5C3A\u5BF8\u548C\u5F62\u72C0\u504F\u79FB\u3002\u5982\u679C\u81EA\u5B9A\u7FA9\u5C3A\u5BF8\u6C92\u6709\u8A2D\u5B9A\uFF0C\u7269\u9AD4\u5C07\u81EA\u52D5\u7E2E\u653E\u5230\u7269\u4EF6\u5C3A\u5BF8\u3002","the shape scale":"\u5F62\u72C0\u6BD4\u4F8B","Body settings":"\u8EAB\u9AD4\u8A2D\u5B9A","Test an object density.":"\u6E2C\u8A66\u7269\u4EF6\u5BC6\u5EA6\u3002","the _PARAM0_ density":"_PARAM0_ \u4EAE\u5EA6","Modify an object density. The body's density and volume determine its mass.":"\u4FEE\u6539\u7269\u4EF6\u5BC6\u5EA6\u3002\u8EAB\u9AD4\u7684\u5BC6\u5EA6\u548C\u9AD4\u7A4D\u6C7A\u5B9A\u5176\u8CEA\u91CF\u3002","the density":"\u5BC6\u5EA6","Density of the object":"\u7269\u9AD4\u5BC6\u5EA6","Get the density of an object.":"\u7372\u53D6\u7269\u4EF6\u7684\u5BC6\u5EA6\u3002","Test an object friction.":"\u6E2C\u8A66\u7269\u4EF6\u6469\u64E6\u3002","the _PARAM0_ friction":"_PARAM0_\u6469\u64E6\u529B","Modify an object friction. How much energy is lost from the movement of one object over another. The combined friction from two bodies is calculated as 'sqrt(bodyA.friction * bodyB.friction)'.":"\u6539\u8B8A\u7269\u9AD4\u6469\u64E6\u529B\u3002\u4E00\u500B\u7269\u9AD4\u79FB\u52D5\u5230\u53E6\u4E00\u500B\u7269\u9AD4\u4E0A\u6703\u907A\u5931\u591A\u5C11\u80FD\u91CF\u3002 \u5169\u500B\u7269\u9AD4\u7684\u5408\u5E76\u6469\u64E6\u662F\u201Csqrt(bodyA.friction * bodyB.friction)\u201D\u3002","the friction":"\u6469\u64E6\u529B","Friction of the object":"\u7269\u4EF6\u7684\u6469\u64E6\u529B","Get the friction of an object.":"\u7372\u53D6\u7269\u4EF6\u7684\u6469\u64E6\u529B\u3002","Test an object restitution.":"\u6E2C\u8A66\u7269\u4EF6\u9084\u539F\u3002","the _PARAM0_ restitution":"_PARAM0_ \u6062\u5FA9","Modify an object restitution. Energy conservation on collision. The combined restitution from two bodies is calculated as 'max(bodyA.restitution, bodyB.restitution)'.":"\u4FEE\u6539\u7269\u4EF6\u6062\u5FA9\u3002\u78B0\u649E\u6642\u7BC0\u80FD\u3002\u4F86\u81EA\u5169\u500B\u5BE6\u9AD4\u7684\u5408\u5E76\u88DC\u511F\u88AB\u8A08\u7B97\u70BA\u201C max\uFF08bodyA.restitution\uFF0CbodyB.restitution\uFF09\u201D\u3002","the restitution":"\u6062\u5FA9\u539F\u72C0","Restitution of the object":"\u6062\u5FA9\u7269\u4EF6","Get the restitution of an object.":"\u7372\u53D6\u7269\u54C1\u7684\u6062\u5FA9\u3002","Linear damping":"\u7DDA\u6027\u963B\u5C3C","Test an object linear damping.":"\u6E2C\u8A66\u7269\u4EF6\u7DDA\u6027\u963B\u5C3C\u3002","the _PARAM0_ linear damping":"_PARAM0_ \u7DDA\u6027\u963B\u5C3C","Modify an object linear damping. How much movement speed is lost across the time.":"\u4FEE\u6539\u7269\u4EF6\u7DDA\u6027\u963B\u5C3C\u3002\u55AE\u4F4D\u6642\u9593\u5167\u901F\u5EA6\u964D\u4F4E\u5927\u5C0F\u3002","the linear damping":"\u7DDA\u6027\u963B\u5C3C","Linear damping of the object":"\u7269\u4EF6\u7684\u7DDA\u6027\u963B\u5C3C","Get the linear damping of an object.":"\u7372\u53D6\u7269\u4EF6\u7684\u7DDA\u6027\u963B\u5C3C\u3002","Angular damping":"\u89D2\u963B\u5C3C","Test an object angular damping.":"\u6E2C\u8A66\u7269\u4EF6\u89D2\u963B\u5C3C\u3002","the _PARAM0_ angular damping":"_PARAM0_ \u89D2\u5EA6\u963B\u5C3C","Modify an object angular damping. How much angular speed is lost across the time.":"\u4FEE\u6539\u7269\u4EF6\u89D2\u5EA6\u963B\u5C3C\u3002\u6574\u500B\u6642\u9593\u640D\u5931\u4E86\u591A\u5C11\u89D2\u901F\u5EA6\u3002","the angular damping":"\u89D2\u963B\u5C3C","Angular damping of the object":"\u7269\u4EF6\u7684\u89D2\u963B\u5C3C\u91CF","Get the angular damping of an object.":"\u7372\u53D6\u7269\u4EF6\u7684\u89D2\u963B\u5C3C\u3002","Gravity scale":"\u91CD\u529B\u6BD4\u4F8B","Test an object gravity scale.":"\u6E2C\u8A66\u7269\u4EF6\u91CD\u529B\u6BD4\u4F8B\u3002","the _PARAM0_ gravity scale":"_PARAM0_ \u91CD\u529B\u6BD4\u4F8B","Modify an object gravity scale. The gravity applied to an object is the world gravity multiplied by the object gravity scale.":"\u4FEE\u6539\u7269\u4EF6\u91CD\u529B\u5C3A\u5BF8\u3002\u9069\u7528\u4E8E\u7269\u4EF6\u7684\u91CD\u529B\u5C3A\u5BF8\u662F\u4E16\u754C\u91CD\u529B\u4E58\u4EE5\u7269\u4EF6\u91CD\u529B\u6BD4\u4F8B\u3002","the gravity scale":"\u91CD\u529B\u6BD4\u4F8B","Gravity scale of the object":"\u7269\u4EF6\u7684\u91CD\u529B\u6BD4\u4F8B","Get the gravity scale of an object.":"\u7372\u53D6\u7269\u4EF6\u7684\u91CD\u529B\u6BD4\u4F8B\u3002","Layer enabled":"\u555F\u7528\u5716\u5C64","Check if an object has a specific layer enabled.":"\u6E2C\u8A66\u7269\u4EF6\u662F\u5426\u555F\u7528\u4E86\u7279\u5B9A\u5716\u5C64\u3002","_PARAM0_ has layer _PARAM2_ enabled":"_PARAM0_ \u5DF2\u555F\u7528\u5716\u5C64 _PARAM2_","Filtering":"\u904E\u6FFE","Layer (1 - 16)":"\u5716\u5C64(1-16)","Enable layer":"\u555F\u7528\u5716\u5C64","Enable or disable a layer for an object. Two objects collide if any layer of the first object matches any mask of the second one and vice versa.":"\u555F\u7528\u6216\u7981\u7528\u7269\u4EF6\u7684\u5716\u5C64\u3002\u5982\u679C\u7B2C\u4E00\u500B\u7269\u4EF6\u7684\u4EFB\u4F55\u5C64\u8207\u7B2C\u4E8C\u500B\u7269\u4EF6\u7684\u4EFB\u4F55\u8499\u7248\u5339\u914D\uFF0C\u5247\u5169\u500B\u7269\u4EF6\u767C\u751F\u78B0\u649E\uFF0C\u53CD\u4E4B\u4EA6\u7136\u3002","Enable layer _PARAM2_ for _PARAM0_: _PARAM3_":"\u70BA_PARAM0_: _PARAM3_ \u555F\u7528\u5716\u5C64 _PARAM2_","Enable":"\u555F\u7528","Mask enabled":"\u555F\u7528\u8499\u7248","Check if an object has a specific mask enabled.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u555F\u7528\u4E86\u7279\u5B9A\u7684\u906E\u7F69\u3002","_PARAM0_ has mask _PARAM2_ enabled":"_PARAM0_ \u5DF2\u555F\u7528\u63A9\u78BC _PARAM2_","Mask (1 - 16)":"\u906E\u7F69(1-16)","Enable mask":"\u555F\u7528\u8499\u7248","Enable or disable a mask for an object. Two objects collide if any layer of the first object matches any mask of the second one and vice versa.":"\u5C0D\u7269\u4EF6\u555F\u7528\u6216\u7981\u7528\u63A9\u78BC\u3002 \u5169\u500B\u7269\u4EF6\uFF0C\u5982\u679C\u7B2C\u4E00\u500B\u7269\u4EF6\u7684\u4EFB\u4F55\u4E00\u5C64\u8207\u7B2C\u4E8C\u500B\u7269\u4EF6\u7684\u4EFB\u4F55\u8499\u7248\u76F8\u649E\uFF0C\u53CD\u4E4B\u4EA6\u7136\u3002","Enable mask _PARAM2_ for _PARAM0_: _PARAM3_":"\u70BA _PARAM0_: _PARAM3_ \u555F\u7528\u63A9\u78BC _PARAM2_","Linear velocity X":"\u7DDA\u6027\u901F\u5EA6 X","Test an object linear velocity on X.":"\u5728 X \u4E0A\u6E2C\u8A66\u4E00\u500B\u7269\u9AD4\u7684\u7DDA\u6027\u901F\u5EA6\u3002","the linear velocity on X":"X\u4E0A\u7684\u7DDA\u6027\u901F\u5EA6","Velocity":"\u901F\u5EA6","Modify an object linear velocity on X.":"\u5728 X\u4E0A\u4FEE\u6539\u7269\u4EF6\u7DDA\u6027\u901F\u5EA6\u3002","Linear velocity on X axis":"X\u8EF8\u4E0A\u7684\u7DDA\u6027\u901F\u5EA6","Get the linear velocity of an object on X axis.":"\u5728 X \u8EF8\u4E0A\u7372\u53D6\u7269\u4EF6\u7684\u7DDA\u6027\u901F\u5EA6\u3002","Linear velocity Y":"\u7DDA\u6027\u901F\u5EA6 Y","Test an object linear velocity on Y.":"\u5728 Y \u4E0A\u6E2C\u8A66\u4E00\u500B\u7269\u9AD4\u7684\u7DDA\u6027\u901F\u5EA6\u3002","the linear velocity on Y":"Y\u7DDA\u6027\u901F\u5EA6","Modify an object linear velocity on Y.":"\u5728 Y\u4E0A\u4FEE\u6539\u7269\u4EF6\u7DDA\u6027\u901F\u5EA6\u3002","Linear velocity on Y axis":"Y\u8EF8\u4E0A\u7684\u7DDA\u6027\u901F\u5EA6","Get the linear velocity of an object on Y axis.":"\u5728 Y \u8EF8\u4E0A\u7372\u53D6\u7269\u4EF6\u7684\u7DDA\u6027\u901F\u5EA6\u3002","Linear velocity":"\u7DDA\u6027\u901F\u5EA6","Test an object linear velocity length.":"\u6E2C\u8A66\u7269\u4EF6\u7DDA\u6027\u901F\u5EA6\u9577\u5EA6\u3002","the linear velocity length":"\u7DDA\u6027\u901F\u5EA6\u9577\u5EA6","Get the linear velocity of an object.":"\u7372\u53D6\u7269\u4EF6\u7684\u7DDA\u6027\u901F\u5EA6\u3002","Linear velocity angle":"\u7DDA\u6027\u901F\u5EA6\u89D2\u5EA6","Test an object linear velocity angle.":"\u6E2C\u8A66\u7269\u4EF6\u7684\u7DDA\u6027\u901F\u5EA6\u89D2\u5EA6\u3002","the linear velocity angle":"\u7DDA\u6027\u901F\u5EA6\u89D2\u5EA6","Compare the linear velocity angle of the object.":"\u6BD4\u8F03\u7269\u4EF6\u7684\u7DDA\u6027\u901F\u5EA6\u89D2\u5EA6\u3002","Linear velocity towards an angle":"\u671D\u5411\u67D0\u4E00\u89D2\u5EA6\u7684\u7DDA\u901F\u5EA6","Set the linear velocity towards an angle.":"\u5C07\u7DDA\u901F\u5EA6\u8A2D\u5B9A\u70BA\u67D0\u500B\u89D2\u5EA6\u3002","Set the linear velocity of _PARAM0_ towards angle: _PARAM2_ degrees, speed: _PARAM3_ pixels per second":"\u8A2D\u5B9A _PARAM0_ \u7684\u7DDA\u901F\u5EA6\uFF0C\u89D2\u5EA6\uFF1A_PARAM2_ \u5EA6\uFF0C\u901F\u5EA6\uFF1A_PARAM3_ \u50CF\u7D20\u6BCF\u79D2","Get the linear velocity angle of an object.":"\u7372\u53D6\u7269\u4EF6\u7684\u7DDA\u6027\u901F\u5EA6\u89D2\u3002","Angular velocity":"\u89D2\u901F\u5EA6","Test an object angular velocity.":"\u6E2C\u8A66\u7269\u4EF6\u7684\u89D2\u901F\u5EA6\u3002","the angular velocity":"\u89D2\u901F\u5EA6","Angular speed to compare to (in degrees per second)":"\u6BD4\u8F03\u89D2\u901F\u5EA6(\u4EE5\u6BCF\u79D2\u5EA6\u6578\u70BA\u55AE\u4F4D)","Modify an object angular velocity.":"\u4FEE\u6539\u7269\u4EF6\u7684\u89D2\u5EA6\u901F\u5EA6\u3002","Get the angular velocity of an object.":"\u7372\u53D6\u7269\u4EF6\u7684\u89D2\u901F\u5EA6\u3002","Apply force":"\u61C9\u7528\u529B","Apply a force to the object over time. It \"accelerates\" an object and must be used every frame during a time period.":"\u96A8\u8457\u6642\u9593\u7684\u63A8\u79FB\u5411\u7269\u9AD4\u65BD\u52A0\u529B\u3002\u5B83\u201C\u52A0\u901F\u201D\u4E00\u500B\u7269\u4EF6\uFF0C\u5E76\u4E14\u5FC5\u9808\u5728\u4E00\u6BB5\u6642\u9593\u5167\u7684\u6BCF\u4E00\u5E40\u4F7F\u7528\u3002","Apply to _PARAM0_ a force of _PARAM2_;_PARAM3_":"\u61C9\u7528\u5230_PARAM0_\u7684\u529B\u91CF_PARAM2_;_PARAM3_","Forces & impulses":"\u529B\u91CF\u548C\u6C96\u58D3","X component (N)":"X \u7D44\u4EF6 (N)","Y component (N)":"Y \u7D44\u4EF6 (N)","A force is like an acceleration but depends on the mass.":"\u529B\u985E\u4F3C\u4E8E\u52A0\u901F\u5EA6\uFF0C\u4F46\u5B83\u53D6\u6C7A\u4E8E\u8CEA\u91CF\u3002","Application point on X axis":"X \u8EF8\u4E0A\u7684\u61C9\u7528\u9EDE","Application point on Y axis":"Y \u8EF8\u4E0A\u7684\u61C9\u7528\u9EDE","Use `MassCenterX` and `MassCenterY` expressions to avoid any rotation.":"\u4F7F\u7528 `MassCenterX` \u548C `MassCenterY` \u8868\u9054\u5F0F\u4F86\u907F\u514D\u4EFB\u4F55\u65CB\u8F49\u3002","Apply force (angle)":"\u61C9\u7528\u529B(\u89D2\u5EA6)","Apply a force to the object over time using polar coordinates. It \"accelerates\" an object and must be used every frame during a time period.":"\u4F7F\u7528\u6975\u5750\u6A19\u96A8\u6642\u9593\u5411\u7269\u4EF6\u65BD\u52A0\u529B\u3002\u5B83\u201C\u52A0\u901F\u201D\u4E00\u500B\u7269\u4EF6\uFF0C\u5E76\u4E14\u5FC5\u9808\u5728\u4E00\u6BB5\u6642\u9593\u5167\u7684\u6BCF\u4E00\u5E40\u4F7F\u7528\u3002","Apply to _PARAM0_ a force of angle _PARAM2_ and length _PARAM3_":"\u61C9\u7528\u5230 _PARAM0_ \u4E00\u500B\u89D2\u5EA6\u7684\u529B_PARAM2_ \u548C _PARAM3_","Length (N)":"\u9577\u5EA6(N)","Apply force toward position":"\u5C0D\u4F4D\u7F6E\u65BD\u52A0\u529B","Apply a force to the object over time to move it toward a position. It \"accelerates\" an object and must be used every frame during a time period.":"\u96A8\u8457\u6642\u9593\u7684\u63A8\u79FB\u5411\u7269\u4EF6\u65BD\u52A0\u529B\uFF0C\u5C07\u5176\u79FB\u5411\u67D0\u500B\u4F4D\u7F6E\u3002\u5B83\u201C\u52A0\u901F\u201D\u4E00\u500B\u7269\u4EF6\uFF0C\u5E76\u4E14\u5FC5\u9808\u5728\u4E00\u6BB5\u6642\u9593\u5167\u7684\u6BCF\u4E00\u5E40\u4F7F\u7528\u3002","Apply to _PARAM0_ a force of length _PARAM2_ towards _PARAM3_;_PARAM4_":"\u5C0D _PARAM0_ \u65BD\u52A0\u671D\u5411 _PARAM3_\uFF1B_PARAM4_ \u7684\u9577\u5EA6\u70BA _PARAM2_ \u7684\u529B","Apply impulse":"\u61C9\u7528\u6C96\u58D3","Apply an impulse to the object. It instantly changes the speed, to give an initial speed for instance.":"\u5411\u7269\u9AD4\u65BD\u52A0\u4E00\u500B\u6C96\u91CF\u3002\u5B83\u7ACB\u5373\u6539\u8B8A\u901F\u5EA6\uFF0C\u4F8B\u5982\u7D66\u51FA\u4E00\u500B\u521D\u59CB\u901F\u5EA6\u3002","Apply to _PARAM0_ an impulse of _PARAM2_;_PARAM3_":"\u5C0D _PARAM0_ \u65BD\u52A0 _PARAM2_\uFF1B_PARAM3_ \u7684\u6C96\u91CF","X component (N\xB7s or kg\xB7m\xB7s\u207B\xB9)":"X \u5206\u91CF (N\xB7s or kg\xB7m\xB7s\u207B\xB9)","Y component (N\xB7s or kg\xB7m\xB7s\u207B\xB9)":"Y \u5206\u91CF (N\xB7s or kg\xB7m\xB7s\u207B\xB9)","An impulse is like a speed addition but depends on the mass.":"\u6C96\u91CF\u5C31\u50CF\u901F\u5EA6\u52A0\u6CD5\uFF0C\u4F46\u53D6\u6C7A\u4E8E\u8CEA\u91CF\u3002","Apply impulse (angle)":"\u61C9\u7528\u6C96\u91CF(\u89D2\u5EA6)","Apply an impulse to the object using polar coordinates. It instantly changes the speed, to give an initial speed for instance.":"\u4F7F\u7528\u6975\u5750\u6A19\u5411\u7269\u4EF6\u65BD\u52A0\u6C96\u91CF\u3002\u5B83\u6703\u7ACB\u5373\u6539\u8B8A\u901F\u5EA6\uFF0C\u4F8B\u5982\u7D66\u51FA\u521D\u59CB\u901F\u5EA6\u3002","Apply to _PARAM0_ an impulse of angle _PARAM2_ and length _PARAM3_ (applied at _PARAM4_;_PARAM5_)":"\u5C07\u89D2\u5EA6 _PARAM2_ \u548C\u9577\u5EA6 _PARAM3_ \u7684\u6C96\u91CF\u61C9\u7528\u4E8E _PARAM0_ (\u61C9\u7528\u4E8E _PARAM4_\uFF1B_PARAM5_)","Length (N\xB7s or kg\xB7m\xB7s\u207B\xB9)":"\u9577\u5EA6 (N\xB7s or kg\xB7m\xB7s\u207B\xB9)","Apply impulse toward position":"\u5411\u4F4D\u7F6E\u65BD\u52A0\u6C96\u91CF","Apply an impulse to the object to move it toward a position. It instantly changes the speed, to give an initial speed for instance.":"\u5411\u7269\u4EF6\u65BD\u52A0\u6C96\u91CF\u4EE5\u5C07\u5176\u79FB\u5411\u67D0\u500B\u4F4D\u7F6E\u3002\u5B83\u6703\u7ACB\u5373\u6539\u8B8A\u901F\u5EA6\uFF0C\u4F8B\u5982\u7D66\u51FA\u521D\u59CB\u901F\u5EA6\u3002","Apply to _PARAM0_ an impulse of length _PARAM2_ towards _PARAM3_;_PARAM4_ (applied at _PARAM5_;_PARAM6_)":"\u5C07\u9577\u5EA6\u70BA _PARAM2_ \u7684\u6C96\u91CF\u61C9\u7528\u4E8E _PARAM0_\uFF0C\u671D\u5411 _PARAM3_\uFF1B_PARAM4_ (\u61C9\u7528\u4E8E _PARAM5_\uFF1B_PARAM6_)","Apply torque (rotational force)":"\u65BD\u52A0\u626D\u77E9 (\u65CB\u8F49\u529B)","Apply a torque (also called \"rotational force\") to the object. It \"accelerates\" an object rotation and must be used every frame during a time period.":"\u5411\u7269\u9AD4\u65BD\u52A0\u626D\u77E9 (\u4E5F\u7A31\u70BA\u201C\u65CB\u8F49\u529B\u201D)\u3002\u5B83\u201C\u52A0\u901F\u201D\u7269\u4EF6\u65CB\u8F49\uFF0C\u5E76\u4E14\u5FC5\u9808\u5728\u4E00\u6BB5\u6642\u9593\u5167\u7684\u6BCF\u4E00\u5E40\u4F7F\u7528\u3002","Apply to _PARAM0_ a torque of _PARAM2_":"\u61C9\u7528\u5230 _PARAM0_ \u4E00\u500B _PARAM2_ \u7684tortque","Torque (N\xB7m)":"\u626D\u77E9 (N\xB7m)","A torque is like a rotation acceleration but depends on the mass.":"\u626D\u77E9\u985E\u4F3C\u4E8E\u65CB\u8F49\u52A0\u901F\u5EA6\uFF0C\u4F46\u53D6\u6C7A\u4E8E\u8CEA\u91CF\u3002","Apply angular impulse (rotational impulse)":"\u65BD\u52A0\u89D2\u6C96\u91CF(\u65CB\u8F49\u6C96\u91CF)","Apply an angular impulse (also called a \"rotational impulse\") to the object. It instantly changes the rotation speed, to give an initial speed for instance.":"\u5C0D\u7269\u9AD4\u65BD\u52A0\u89D2\u6C96\u91CF (\u4E5F\u7A31\u70BA\u201C\u65CB\u8F49\u6C96\u91CF\u201D)\u3002\u5B83\u6703\u7ACB\u5373\u6539\u8B8A\u65CB\u8F49\u901F\u5EA6\uFF0C\u4F8B\u5982\u7D66\u51FA\u521D\u59CB\u901F\u5EA6\u3002","Apply to _PARAM0_ an angular impulse of _PARAM2_":"\u5C0D _PARAM0_ \u61C9\u7528 _PARAM2_ \u7684\u89D2\u6C96\u91CF","Angular impulse (N\xB7m\xB7s)":"\u89D2\u52D5\u91CF (N\xB7m\xB7s)","An impulse is like a rotation speed addition but depends on the mass.":"\u6C96\u91CF\u5C31\u50CF\u8F49\u901F\u7684\u52A0\u6CD5\uFF0C\u4F46\u53D6\u6C7A\u4E8E\u8CEA\u91CF\u3002","Mass":"\u8CEA\u91CF","Return the mass of the object (in kilograms)":"\u8FD4\u56DE\u7269\u9AD4\u7684\u8CEA\u91CF(\u4EE5\u5343\u514B\u70BA\u55AE\u4F4D)","Inertia":"\u6163\u6027","Return the rotational inertia of the object (in kilograms \xB7 meters\xB2)":"\u8FD4\u56DE\u7269\u9AD4\u7684\u8F49\u52D5\u6163\u91CF\uFF08\u55AE\u4F4D\uFF1A\u5343\u514B\xB7\u7C73\xB2\uFF09","Mass center X":"\u8CEA\u91CF\u4E2D\u5FC3 X","Mass center Y":"\u8CEA\u91CF\u4E2D\u5FC3 Y","Joint first object":"\u95DC\u7BC0\u7B2C\u4E00\u500B\u7269\u4EF6","Check if an object is the first object on a joint.":"\u6AA2\u67E5\u67D0\u500B\u7269\u9AD4\u662F\u5426\u662F\u95DC\u7BC0\u4E0A\u7684\u7B2C\u4E00\u500B\u7269\u9AD4\u3002","_PARAM0_ is the first object for joint _PARAM2_":"_PARAM0_ \u662F\u95DC\u7BC0_PARAM2_ \u7684\u7B2C\u4E00\u500B\u7269\u4EF6","Joints":"\u95DC\u7BC0","Joint ID":"\u95DC\u7BC0 ID","Joint second object":"\u95DC\u7BC0\u7B2C\u4E8C\u500B\u7269\u4EF6","Check if an object is the second object on a joint.":"\u6AA2\u67E5\u67D0\u500B\u7269\u9AD4\u662F\u5426\u662F\u95DC\u7BC0\u4E0A\u7684\u7B2C\u4E8C\u500B\u7269\u9AD4\u3002","_PARAM0_ is the second object for joint _PARAM2_":"_PARAM0_\u662F\u95DC\u7BC0_PARAM2_\u7684\u7B2C\u4E8C\u500B\u7269\u4EF6","Joint first anchor X":"\u9023\u63A5\u7B2C\u4E00\u500B\u9328\u9EDE X","Joint first anchor Y":"\u9023\u63A5\u7B2C\u4E00\u500B\u9328\u9EDE Y","Joint second anchor X":"\u9023\u63A5\u7B2C\u4E8C\u500B\u9328\u9EDE X","Joint second anchor Y":"\u9023\u63A5\u7B2C\u4E8C\u500B\u9328\u9EDE Y","Joint reaction force":"\u806F\u5408\u53CD\u4F5C\u7528\u529B","Test a joint reaction force.":"\u6E2C\u8A66\u95DC\u7BC0\u53CD\u4F5C\u7528\u529B\u3002","the joint _PARAM2_ reaction force":"\u806F\u5408_PARAM2_\u53CD\u4F5C\u7528\u529B","Joint reaction torque":"\u806F\u5408\u53CD\u4F5C\u7528\u626D\u77E9","Test a joint reaction torque.":"\u6E2C\u8A66\u95DC\u7BC0\u53CD\u4F5C\u7528\u626D\u77E9\u3002","the joint _PARAM2_ reaction torque":"\u95DC\u7BC0_PARAM2_\u53CD\u4F5C\u7528\u626D\u77E9","Remove joint":"\u522A\u9664\u7BC0\u9EDE","Remove a joint from the scene.":"\u5F9E\u5834\u666F\u4E2D\u522A\u9664\u7BC0\u9EDE","Remove joint _PARAM2_":"\u522A\u9664\u7BC0\u9EDE_PARAM2_","Add distance joint":"\u6DFB\u52A0\u8DDD\u96E2\u7BC0\u9EDE","Add a distance joint between two objects. The length is converted to meters using the world scale on X. The frequency and damping ratio are related to the joint speed of oscillation and how fast it stops.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u8DDD\u96E2\u7BC0\u9EDE\u3002\u9577\u5EA6\u88AB\u4E16\u754C\u6BD4\u4F8B\u8F49\u63DB\u70BA\u7C73\u3002\u983B\u7387\u548C\u963B\u5C3C\u7387\u8207\u7BC0\u9EDE\u7684\u9707\u8569\u901F\u5EA6\u53CA\u505C\u6B62\u901F\u5EA6\u76F8\u95DC\u3002","Add a distance joint between _PARAM0_ and _PARAM4_":"\u5728_PARAM0_\u548C_PARAM4_\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u8DDD\u96E2\u7BC0\u9EDE","Joints \u276F Distance":"\u7BC0\u9EDE \u276F \u8DDD\u96E2","First object":"\u7B2C\u4E00\u500B\u7269\u4EF6","Anchor X on first body":"\u7B2C\u4E00\u500B\u7269\u9AD4\u4E0A\u7684 X \u9328\u9EDE","Anchor Y on first body":"\u7B2C\u4E00\u500B\u7269\u9AD4\u4E0A\u7684 Y \u9328\u9EDE","Second object":"\u7B2C\u4E8C\u500B\u7269\u4EF6","Anchor X on second body":"\u7B2C\u4E8C\u500B\u7269\u9AD4\u4E0A\u7684 X \u9328\u9EDE","Anchor Y on second body":"\u7B2C\u4E8C\u500B\u7269\u9AD4\u4E0A\u7684 Y \u9328\u9EDE","Length (-1 to use current objects distance) (default: -1)":"\u9577\u5EA6 (-1 \u4F7F\u7528\u7576\u524D\u7269\u4EF6\u8DDD\u96E2) (\u9ED8\u8A8D\u503C\uFF1A-1)","Frequency (Hz) (non-negative) (default: 0)":"\u983B\u7387(Hz) (\u975E\u8CA0) (\u9ED8\u8A8D\uFF1A0)","Damping ratio (non-negative) (default: 1)":"\u963B\u5C3C\u6BD4\u7387(\u975E\u8CA0) (\u9ED8\u8A8D\u503C\uFF1A1)","Allow collision between connected bodies? (default: no)":"\u5141\u8A31\u5728\u5DF2\u9023\u63A5\u7684\u7269\u9AD4\u4E4B\u9593\u78B0\u649E? (\u9ED8\u8A8D: \u5426)","Variable where to store the joint ID (default: none)":"\u8B8A\u91CF\u5B58\u5132\u95DC\u7BC0ID\u7684\u4F4D\u7F6E\uFF08\u9ED8\u8A8D\u503C\uFF1A\u7121\uFF09","Distance joint length":"\u8DDD\u96E2\u95DC\u7BC0\u9577\u5EA6","Modify a distance joint length.":"\u4FEE\u6539\u8DDD\u96E2\u95DC\u7BC0\u9577\u5EA6\u3002","the length for distance joint _PARAM2_":"\u8DDD\u96E2 _PARAM2_ \u7684\u9577\u5EA6","Distance joint frequency":"\u8DDD\u96E2\u7BC0\u9EDE\u983B\u7387","Modify a distance joint frequency.":"\u4FEE\u6539\u8DDD\u96E2\u95DC\u7BC0\u983B\u7387\u3002","the frequency for distance joint _PARAM2_":"\u8DDD\u96E2 _PARAM2_ \u7684\u983B\u7387","Distance joint damping ratio":"\u8DDD\u96E2\u95DC\u7BC0\u963B\u5C3C\u6BD4","Modify a distance joint damping ratio.":"\u4FEE\u6539\u8DDD\u96E2\u95DC\u7BC0\u7684\u963B\u5C3C\u6BD4\u3002","the damping ratio for distance joint _PARAM2_":"\u8DDD\u96E2\u95DC\u7BC0_PARAM2_\u7684\u963B\u5C3C\u6BD4","Add revolute joint":"\u6DFB\u52A0\u65CB\u8F49\u95DC\u7BC0","Add a revolute joint to an object at a fixed point. The object is attached as the second object in the joint, so you can use this for gear joints.":"\u5728\u56FA\u5B9A\u9EDE\u5411\u7269\u4EF6\u6DFB\u52A0\u65CB\u8F49\u95DC\u7BC0\u3002\u8A72\u7269\u4EF6\u88AB\u9644\u52A0\u70BA\u95DC\u7BC0\u4E2D\u7684\u7B2C\u4E8C\u500B\u7269\u4EF6\uFF0C\u56E0\u6B64\u53EF\u4EE5\u5C07\u5176\u7528\u4E8E\u9F52\u8F2A\u95DC\u7BC0\u3002","Add a revolute joint to _PARAM0_ at _PARAM2_;_PARAM3_":"\u5728_PARAM2 _; _ PARAM3_\u4E0A\u5411_PARAM0_\u6DFB\u52A0\u65CB\u8F49\u95DC\u7BC0","Joints \u276F Revolute":"\u95DC\u7BC0 \u276F \u65CB\u8F49","X anchor":"X \u9328\u9EDE","Y anchor":"Y \u9328\u9EDE","Enable angle limits? (default: no)":"\u555F\u7528\u89D2\u5EA6\u9650\u5236? (\u9ED8\u8A8D: \u5426)","Reference angle (default: 0)":"\u53C3\u8003\u89D2\u5EA6 (\u9ED8\u8A8D\uFF1A0)","Minimum angle (default: 0)":"\u6700\u5C0F\u89D2\u5EA6 (\u9ED8\u8A8D\uFF1A0)","Maximum angle (default: 0)":"\u6700\u5927\u89D2\u5EA6 (\u9ED8\u8A8D\uFF1A0)","Enable motor? (default: no)":"\u555F\u7528\u52D5\u529B\uFF1F(\u9ED8\u8A8D\uFF1A\u5426)","Motor speed (default: 0)":"\u52D5\u529B\u901F\u5EA6 (\u9ED8\u8A8D\uFF1A0)","Motor maximum torque (default: 0)":"\u52D5\u529B\u6700\u5927\u626D\u77E9(\u9ED8\u8A8D\u503C\uFF1A0)","Add revolute joint between two bodies":"\u5728\u5169\u500B\u7269\u9AD4\u4E4B\u9593\u6DFB\u52A0\u65CB\u8F49\u95DC\u7BC0","Add a revolute joint between two objects. The reference angle determines what is considered as the base angle at the initial state.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u65CB\u8F49\u95DC\u7BC0\u3002\u53C3\u8003\u89D2\u78BA\u5B9A\u521D\u59CB\u72C0\u614B\u4E0B\u7684\u5E95\u89D2\u3002","Add a revolute joint between _PARAM0_ and _PARAM4_":"\u5728_PARAM0_\u548C_PARAM4_\u4E4B\u9593\u6DFB\u52A0\u65CB\u8F49\u95DC\u7BC0","Revolute joint reference angle":"\u65CB\u8F49\u95DC\u7BC0\u53C3\u8003\u89D2","Revolute joint current angle":"\u65CB\u8F49\u63A5\u982D\u7576\u524D\u89D2\u5EA6","Revolute joint angular speed":"\u65CB\u8F49\u95DC\u7BC0\u89D2\u901F\u5EA6","Revolute joint limits enabled":"\u555F\u7528\u65CB\u8F49\u95DC\u7BC0\u9650\u5236","Check if a revolute joint limits are enabled.":"\u6AA2\u67E5\u65CB\u8F49\u95DC\u7BC0\u9650\u5236\u662F\u5426\u555F\u7528\u3002","Limits for revolute joint _PARAM2_ are enabled":"\u555F\u7528\u65CB\u8F49\u95DC\u7BC0_PARAM2_\u7684\u9650\u5236","Enable revolute joint limits":"\u555F\u7528\u65CB\u8F49\u95DC\u7BC0\u9650\u5236","Enable or disable a revolute joint angle limits.":"\u555F\u7528\u6216\u7981\u7528\u65CB\u8F49\u95DC\u7BC0\u89D2\u5EA6\u9650\u5236\u3002","Enable limits for revolute joint _PARAM2_: _PARAM3_":"\u555F\u7528\u65CB\u8F49\u95DC\u7BC0_PARAM2_\u7684\u9650\u5236\uFF1A_PARAM3_","Revolute joint limits":"\u65CB\u8F49\u95DC\u7BC0\u6975\u9650","Modify a revolute joint angle limits.":"\u4FEE\u6539\u65CB\u8F49\u95DC\u7BC0\u89D2\u5EA6\u9650\u5236\u3002","Set the limits to _PARAM3_;_PARAM4_ for revolute joint _PARAM2_":"\u5C07\u65CB\u8F49\u95DC\u7BC0_PARAM2_\u7684\u9650\u5236\u8A2D\u5B9A\u70BA_PARAM3 _; _ PARAM4_","Minimum angle":"\u6700\u5C0F\u89D2\u5EA6","Maximum angle":"\u6700\u5927\u89D2\u5EA6","Revolute joint minimum angle":"\u65CB\u8F49\u95DC\u7BC0\u6700\u5C0F\u89D2\u5EA6","Revolute joint maximum angle":"\u65CB\u8F49\u95DC\u7BC0\u6700\u5927\u89D2\u5EA6","Revolute joint motor enabled":"\u65CB\u8F49\u95DC\u7BC0\u52D5\u529B\u5DF2\u555F\u7528","Check if a revolute joint motor is enabled.":"\u6AA2\u67E5\u65CB\u8F49\u95DC\u7BC0\u96FB\u6A5F\u662F\u5426\u555F\u7528\u3002","Motor of revolute joint _PARAM2_ is enabled":"\u65CB\u8F49\u95DC\u7BC0_PARAM2_\u7684\u52D5\u529B\u5DF2\u555F\u7528","Enable revolute joint motor":"\u555F\u7528\u65CB\u8F49\u95DC\u7BC0\u52D5\u529B","Enable or disable a revolute joint motor.":"\u555F\u7528\u6216\u7981\u7528\u65CB\u8F49\u95DC\u7BC0\u52D5\u529B\u3002","Enable motor for revolute joint _PARAM2_: _PARAM3_":"\u555F\u7528\u7528\u4E8E\u65CB\u8F49\u95DC\u7BC0_PARAM2_\u7684\u52D5\u529B\uFF1A_PARAM3_","Revolute joint motor speed":"\u65CB\u8F49\u95DC\u7BC0\u52D5\u529B\u8F49\u901F","Modify a revolute joint motor speed.":"\u4FEE\u6539\u65CB\u8F49\u95DC\u7BC0\u52D5\u529B\u901F\u5EA6\u3002","the motor speed for revolute joint _PARAM2_":"\u65CB\u8F49\u63A5\u982D_PARAM2_\u7684\u52D5\u529B\u901F\u5EA6","Revolute joint max motor torque":"\u65CB\u8F49\u95DC\u7BC0\u6700\u5927\u52D5\u529B\u626D\u77E9","Modify a revolute joint maximum motor torque.":"\u4FEE\u6539\u65CB\u8F49\u95DC\u7BC0\u6700\u5927\u52D5\u529B\u626D\u77E9\u3002","the maximum motor torque for revolute joint _PARAM2_":"\u65CB\u8F49\u63A5\u982D_PARAM2_\u7684\u6700\u5927\u52D5\u529B\u626D\u77E9","Revolute joint maximum motor torque":"\u65CB\u8F49\u95DC\u7BC0\u6700\u5927\u52D5\u529B\u626D\u77E9","Revolute joint motor torque":"\u65CB\u8F49\u95DC\u7BC0\u52D5\u529B\u626D\u77E9","Add prismatic joint":"\u6DFB\u52A0\u68F1\u67F1\u5F62\u63A5\u982D","Add a prismatic joint between two objects. The translation limits are converted to meters using the world scale on X.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u68F1\u67F1\u5F62\u95DC\u7BC0\u3002\u5E73\u79FB\u9650\u5236\u4F7F\u7528X\u4E0A\u7684\u4E16\u754C\u6A19\u5EA6\u8F49\u63DB\u70BA\u7C73\u3002","Add a prismatic joint between _PARAM0_ and _PARAM4_":"\u5728_PARAM0_\u548C_PARAM4_\u4E4B\u9593\u6DFB\u52A0\u68F1\u5F62\u95DC\u7BC0","Joints \u276F Prismatic":"\u95DC\u7BC0 \u276F \u68F1\u67F1","Axis angle":"\u8EF8\u89D2\u5EA6","Enable limits? (default: no)":"\u555F\u7528\u9650\u5236\u55CE\uFF1F(\u9ED8\u8A8D\uFF1A\u5426)","Minimum translation (default: 0)":"\u6700\u5C0F\u5E73\u79FB\u91CF(\u9ED8\u8A8D\uFF1A0)","Maximum translation (default: 0)":"\u6700\u5927\u5E73\u79FB\u91CF(\u9ED8\u8A8D\uFF1A0)","Motor maximum force (default: 0)":"\u6700\u5927\u52D5\u529B(\u9ED8\u8A8D\uFF1A0)","Prismatic joint axis angle":"\u68F1\u67F1\u95DC\u7BC0\u8EF8\u89D2\u5EA6","Prismatic joint reference angle":"\u68F1\u67F1\u95DC\u7BC0\u53C3\u8003\u89D2","Prismatic joint current translation":"\u68F1\u67F1\u5F62\u806F\u5408\u96FB\u6D41\u5E73\u79FB","Prismatic joint current speed":"\u68F1\u67F1\u95DC\u7BC0\u96FB\u6D41\u901F\u5EA6","Prismatic joint speed":"\u68F1\u67F1\u95DC\u7BC0\u901F\u5EA6","Prismatic joint limits enabled":"\u555F\u7528\u68F1\u67F1\u95DC\u7BC0\u9650\u5236","Check if a prismatic joint limits are enabled.":"\u6AA2\u67E5\u662F\u5426\u555F\u7528\u4E86\u68F1\u67F1\u95DC\u7BC0\u9650\u5236\u3002","Limits for prismatic joint _PARAM2_ are enabled":"\u555F\u7528\u56DB\u89D2\u5F62\u95DC\u7BC0_PARAM2_\u7684\u9650\u5236","Enable prismatic joint limits":"\u555F\u7528\u68F1\u67F1\u5F62\u95DC\u7BC0\u9650\u5236","Enable or disable a prismatic joint limits.":"\u555F\u7528\u6216\u7981\u7528\u68F1\u67F1\u95DC\u7BC0\u9650\u5236\u3002","Enable limits for prismatic joint _PARAM2_: _PARAM3_":"\u555F\u7528\u56DB\u89D2\u5F62\u95DC\u7BC0_PARAM2_\u7684\u9650\u5236\uFF1A_PARAM3_","Prismatic joint limits":"\u68F1\u67F1\u95DC\u7BC0\u9650\u5236","Modify a prismatic joint limits.":"\u4FEE\u6539\u68F1\u67F1\u95DC\u7BC0\u9650\u5236\u3002","Set the limits to _PARAM3_;_PARAM4_ for prismatic joint _PARAM2_":"\u5C07\u56DB\u89D2\u5F62\u95DC\u7BC0_PARAM2_\u7684\u9650\u5236\u8A2D\u5B9A\u70BA_PARAM3 _; _ PARAM4_","Minimum translation":"\u6700\u5C0F\u5E73\u79FB","Maximum translation":"\u6700\u5927\u5E73\u79FB","Prismatic joint minimum translation":"\u68F1\u67F1\u5F62\u806F\u5408\u6700\u5C0F\u5E73\u79FB","Prismatic joint maximum translation":"\u68F1\u67F1\u5F62\u806F\u5408\u6700\u5927\u5E73\u79FB","Prismatic joint motor enabled":"\u555F\u7528\u68F1\u93E1\u95DC\u7BC0\u52D5\u529B","Check if a prismatic joint motor is enabled.":"\u6AA2\u67E5\u68F1\u67F1\u95DC\u7BC0\u96FB\u6A5F\u662F\u5426\u555F\u7528\u3002","Motor for prismatic joint _PARAM2_ is enabled":"\u555F\u7528\u4E86\u7528\u4E8E\u56DB\u89D2\u95DC\u7BC0_PARAM2_\u7684\u52D5\u529B","Enable prismatic joint motor":"\u555F\u7528\u68F1\u67F1\u95DC\u7BC0\u52D5\u529B","Enable or disable a prismatic joint motor.":"\u555F\u7528\u6216\u7981\u7528\u68F1\u67F1\u95DC\u7BC0\u52D5\u529B\u3002","Enable motor for prismatic joint _PARAM2_: _PARAM3_":"\u555F\u7528\u7528\u4E8E\u65B9\u5F62\u95DC\u7BC0_PARAM2_\u7684\u52D5\u529B\uFF1A_PARAM3_","Prismatic joint motor speed":"\u68F1\u93E1\u95DC\u7BC0\u52D5\u529B\u8F49\u901F","Modify a prismatic joint motor speed.":"\u4FEE\u6539\u68F1\u67F1\u95DC\u7BC0\u52D5\u529B\u7684\u901F\u5EA6\u3002","the motor force for prismatic joint _PARAM2_":"\u68F1\u67F1\u95DC\u7BC0_PARAM2_\u7684\u52D5\u529B","Prismatic joint max motor force":"\u68F1\u67F1\u95DC\u7BC0\u6700\u5927\u52D5\u529B","Modify a prismatic joint maximum motor force.":"\u4FEE\u6539\u68F1\u67F1\u5F62\u63A5\u982D\u7684\u6700\u5927\u52D5\u529B\u3002","the maximum motor force for prismatic joint _PARAM2_":"\u68F1\u67F1\u95DC\u7BC0_PARAM2_\u7684\u52D5\u529B","Prismatic joint maximum motor force":"\u68F1\u67F1\u95DC\u7BC0\u6700\u5927\u52D5\u529B","Prismatic joint motor force":"\u68F1\u67F1\u95DC\u7BC0\u52D5\u529B","Add pulley joint":"\u6DFB\u52A0\u6ED1\u8F2A\u63A5\u982D","Add a pulley joint between two objects. Lengths are converted to meters using the world scale on X.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u6ED1\u8F2A\u95DC\u7BC0\u3002\u4F7F\u7528X\u4E0A\u7684\u4E16\u754C\u6BD4\u4F8B\u5C3A\u5C07\u9577\u5EA6\u8F49\u63DB\u70BA\u7C73\u3002","Add a pulley joint between _PARAM0_ and _PARAM4_":"\u5728_PARAM0_\u548C_PARAM4_\u4E4B\u9593\u6DFB\u52A0\u6ED1\u8F2A\u95DC\u7BC0","Joints \u276F Pulley":"\u95DC\u7BC0 \u276F \u6ED1\u8F2A","Ground anchor X for first object":"\u7B2C\u4E00\u500B\u7269\u4EF6\u7684\u5730\u9762\u9328\u9EDE X","Ground anchor Y for first object":"\u7B2C\u4E00\u500B\u7269\u4EF6\u7684\u5730\u9762\u9328\u9EDE Y","Ground anchor X for second object":"\u7B2C\u4E8C\u500B\u7269\u4EF6\u7684\u5730\u9762\u9328\u9EDE X","Ground anchor Y for second object":"\u7B2C\u4E8C\u500B\u7269\u4EF6\u7684\u5730\u9762\u9328\u9EDE Y","Length for first object (-1 to use anchor positions) (default: -1)":"\u7B2C\u4E00\u500B\u7269\u4EF6\u7684\u9577\u5EA6 (-1 \u4F7F\u7528\u9328\u9EDE\u4F4D\u7F6E) (\u9ED8\u8A8D\uFF1A -1)","Length for second object (-1 to use anchor positions) (default: -1)":"\u7B2C\u4E8C\u500B\u7269\u4EF6\u7684\u9577\u5EA6 (-1 \u4F7F\u7528\u9328\u9EDE\u4F4D\u7F6E) (\u9ED8\u8A8D\uFF1A -1)","Ratio (non-negative) (default: 1":"\u6BD4\u7387(\u975E\u8CA0) (\u9ED8\u8A8D: 1","Pulley joint first ground anchor X":"\u6ED1\u8F2A\u95DC\u7BC0\u7B2C\u4E00\u500B\u5730\u9762\u9328 X","Pulley joint first ground anchor Y":"\u6ED1\u8F2A\u95DC\u7BC0\u7B2C\u4E00\u500B\u5730\u9762\u9328 Y","Pulley joint second ground anchor X":"\u6ED1\u8F2A\u95DC\u7BC0\u7B2C\u4E8C\u5730\u9762\u9328 X","Pulley joint second ground anchor Y":"\u6ED1\u8F2A\u95DC\u7BC0\u7B2C\u4E8C\u5730\u9762\u9328 Y","Pulley joint first length":"\u6ED1\u8F2A\u95DC\u7BC0\u7B2C\u4E00\u9577\u5EA6","Pulley joint second length":"\u6ED1\u8F2A\u95DC\u7BC0\u7B2C\u4E8C\u9577\u5EA6","Pulley joint ratio":"\u6ED1\u8F2A\u95DC\u7BC0\u6BD4\u7387","Add gear joint":"\u6DFB\u52A0\u9F52\u8F2A\u95DC\u7BC0","Add a gear joint between two joints. Attention: Gear joints require the joints to be revolute or prismatic, and both of them to be attached to a static body as first object.":"\u5728\u5169\u500B\u95DC\u7BC0\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u9F52\u8F2A\u95DC\u7BC0\u3002\u6CE8\u610F\uFF1A\u9F52\u8F2A\u95DC\u7BC0\u8981\u6C42\u95DC\u7BC0\u662F\u65CB\u8F49\u7684\u6216\u68F1\u67F1\u5F62\u7684\uFF0C\u5E76\u4E14\u5169\u8005\u90FD\u5FC5\u9808\u4F5C\u70BA\u7B2C\u4E00\u500B\u7269\u4EF6\u9644\u8457\u5230\u975C\u614B\u7269\u9AD4\u4E0A\u3002","Add a gear joint between joints _PARAM2_ and _PARAM3_":"\u5728\u95DC\u7BC0_PARAM2_\u548C_PARAM3_\u4E4B\u9593\u6DFB\u52A0\u9F52\u8F2A\u95DC\u7BC0","Joints \u276F Gear":"\u95DC\u7BC0 \u276F \u9F52\u8F2A","First joint ID":"\u7B2C\u4E00\u500B\u95DC\u7BC0 ID","Second joint ID":"\u7B2C\u4E8C\u500B\u95DC\u7BC0 ID","Ratio (non-zero) (default: 1)":"\u6BD4\u7387(\u975E\u96F6) (\u9ED8\u8A8D\u503C\uFF1A1)","Gear joint first joint":"\u9F52\u8F2A\u95DC\u7BC0\u7B2C\u4E00\u500B\u95DC\u7BC0","Gear joint second joint":"\u9F52\u8F2A\u95DC\u7BC0\u7B2C\u4E8C\u500B\u95DC\u7BC0","Gear joint ratio":"\u9F52\u8F2A\u95DC\u7BC0\u6BD4\u4F8B","Modify a Gear joint ratio.":"\u4FEE\u6539\u9F52\u8F2A\u95DC\u7BC0\u6BD4\u4F8B\u3002","the ratio for gear joint _PARAM2_":"\u9F52\u8F2A\u95DC\u7BC0\u6BD4\u4F8B_PARAM2_","Add mouse joint":"\u6DFB\u52A0\u9F20\u6A19\u95DC\u7BC0","Add a mouse joint to an object (makes the object move towards a specific point).":"\u5411\u7269\u4EF6\u6DFB\u52A0\u9F20\u6A19\u95DC\u7BC0\uFF08\u4F7F\u7269\u4EF6\u79FB\u5411\u7279\u5B9A\u9EDE\uFF09\u3002","Add a mouse joint to _PARAM0_":"\u5C07\u9F20\u6A19\u95DC\u7BC0\u6DFB\u52A0\u5230_PARAM0_","Joints \u276F Mouse":"\u95DC\u7BC0 \u276F \u9F20\u6A19","Target X":"\u76EE\u6A19x","Target Y":"\u76EE\u6A19y","Maximum force (N) (non-negative) (default: 500)":"\u6700\u5927\u529B\u91CF(N) (\u975E\u8CA0) (\u9ED8\u8A8D\uFF1A500)","Frequency (Hz) (positive) (default: 10)":"\u983B\u7387(Hz) (\u6B63\u503C) (\u9ED8\u8A8D\uFF1A10)","Mouse joint target":"\u9F20\u6A19\u95DC\u7BC0\u76EE\u6A19","Set a mouse joint target.":"\u8A2D\u5B9A\u9F20\u6A19\u95DC\u7BC0\u76EE\u6A19\u3002","Set the target position of mouse joint _PARAM2_ of _PARAM0_ to _PARAM3_;_PARAM4_":"\u5C07_PARAM0_\u7684\u9F20\u6A19\u95DC\u7BC0_PARAM2_\u7684\u76EE\u6A19\u4F4D\u7F6E\u8A2D\u5B9A\u70BA_PARAM3 _; _ PARAM4_","Mouse joint target X":"\u9F20\u6A19\u95DC\u7BC0\u76EE\u6A19 X","Mouse joint target Y":"\u9F20\u6A19\u95DC\u7BC0\u76EE\u6A19 Y","Mouse joint max force":"\u9F20\u6A19\u95DC\u7BC0\u6700\u5927\u529B\u91CF","Set a mouse joint maximum force.":"\u8A2D\u5B9A\u9F20\u6A19\u95DC\u7BC0\u7684\u6700\u5927\u529B\u91CF\u3002","the maximum force for mouse joint _PARAM2_":"\u9F20\u6A19\u95DC\u7BC0_PARAM2_\u7684\u6700\u5927\u4F5C\u7528\u529B","Mouse joint maximum force":"\u9F20\u6A19\u95DC\u7BC0\u6700\u5927\u529B\u91CF","Mouse joint frequency":"\u9F20\u6A19\u95DC\u7BC0\u983B\u7387","Set a mouse joint frequency.":"\u8A2D\u5B9A\u9F20\u6A19\u95DC\u7BC0\u983B\u7387\u3002","the frequency for mouse joint _PARAM2_":"\u9F20\u6A19\u95DC\u7BC0 _PARAM2_ \u7684\u983B\u7387","Mouse joint damping ratio":"\u9F20\u6A19\u95DC\u7BC0\u963B\u5C3C\u6BD4","Set a mouse joint damping ratio.":"\u8A2D\u5B9A\u9F20\u6A19\u95DC\u7BC0\u963B\u5C3C\u6BD4\u3002","the damping ratio for mouse joint _PARAM2_":"\u9F20\u6A19\u95DC\u7BC0_PARAM2_ \u7684\u963B\u5C3C\u6BD4","Add wheel joint":"\u6DFB\u52A0\u8ECA\u8F2A\u95DC\u7BC0","Add a wheel joint between two objects. Higher frequencies means higher suspensions. Damping determines oscillations, critical damping of 1 means no oscillations.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u8ECA\u8F2A\u95DC\u7BC0\u3002\u8F03\u9AD8\u7684\u983B\u7387\u610F\u5473\u8457\u8F03\u9AD8\u7684\u61F8\u639B\u3002\u963B\u5C3C\u78BA\u5B9A\u632F\u8569\uFF0C\u81E8\u754C\u963B\u5C3C\u70BA1\u8868\u793A\u7121\u632F\u8569\u3002","Add a wheel joint between _PARAM0_ and _PARAM4_":"\u5728 _PARAM0_ \u548C _PARAM4_ \u4E4B\u9593\u6DFB\u52A0\u8ECA\u8F2A\u95DC\u7BC0","Joints \u276F Wheel":"\u95DC\u7BC0 \u276F \u8ECA\u8F2A","Frequency (Hz) (non-negative) (default: 10)":"\u983B\u7387(Hz) (\u975E\u8CA0) (\u9ED8\u8A8D\uFF1A10)","Wheel joint axis angle":"\u8ECA\u8F2A\u95DC\u7BC0\u8EF8\u89D2\u5EA6","Wheel joint current translation":"\u8ECA\u8F2A\u95DC\u7BC0\u7576\u524D\u5E73\u79FB","Wheel joint current speed":"\u8ECA\u8F2A\u95DC\u7BC0\u96FB\u6D41\u901F\u5EA6","Wheel joint speed":"\u8ECA\u8F2A\u95DC\u7BC0\u901F\u5EA6","Wheel joint motor enabled":"\u8ECA\u8F2A\u95DC\u7BC0\u52D5\u529B\u5DF2\u555F\u7528","Check if a wheel joint motor is enabled.":"\u6AA2\u67E5\u8ECA\u8F2A\u63A5\u982D\u96FB\u6A5F\u662F\u5426\u555F\u7528\u3002","Motor for wheel joint _PARAM2_ is enabled":"\u8ECA\u8F2A\u95DC\u7BC0\u52D5\u529B_PARAM2_ \u5DF2\u555F\u7528","Enable wheel joint motor":"\u555F\u7528\u8ECA\u8F2A\u95DC\u7BC0\u52D5\u529B","Enable or disable a wheel joint motor.":"\u555F\u7528\u6216\u7981\u7528\u8ECA\u8F2A\u95DC\u7BC0\u52D5\u529B\u3002","Enable motor for wheel joint _PARAM2_: _PARAM3_":"\u555F\u7528\u8ECA\u8F2A\u95DC\u7BC0_PARAM2_\u7684\u52D5\u529B\uFF1A _PARAM3_","Wheel joint motor speed":"\u8ECA\u8F2A\u95DC\u7BC0\u52D5\u529B\u901F\u5EA6","Modify a wheel joint motor speed.":"\u4FEE\u6539\u8ECA\u8F2A\u95DC\u7BC0\u52D5\u529B\u901F\u5EA6\u3002","the motor speed for wheel joint _PARAM2_":"\u8ECA\u8F2A\u95DC\u7BC0\u7684\u52D5\u529B\u901F\u5EA6 _PARAM2_","Wheel joint max motor torque":"\u8ECA\u8F2A\u95DC\u7BC0\u6700\u5927\u52D5\u529B\u626D\u77E9","Modify a wheel joint maximum motor torque.":"\u4FEE\u6539\u8ECA\u8F2A\u95DC\u7BC0\u6700\u5927\u52D5\u529B\u626D\u77E9\u3002","the maximum motor torque for wheel joint _PARAM2_":"\u8ECA\u8F2A\u95DC\u7BC0\u6700\u5927\u52D5\u529B\u626D\u77E9 _PARAM2_","Wheel joint maximum motor torque":"\u8ECA\u8F2A\u95DC\u7BC0\u6700\u5927\u52D5\u529B\u626D\u77E9","Wheel joint motor torque":"\u8ECA\u8F2A\u95DC\u7BC0\u52D5\u529B\u626D\u77E9","Wheel joint frequency":"\u8ECA\u8F2A\u95DC\u7BC0\u983B\u7387","Modify a wheel joint frequency.":"\u4FEE\u6539\u8ECA\u8F2A\u95DC\u7BC0\u52D5\u529B\u983B\u7387\u3002","the frequency for wheel joint _PARAM2_":"\u8ECA\u8F2A\u95DC\u7BC0\u7684\u983B\u7387 _PARAM2_","Wheel joint damping ratio":"\u8ECA\u8F2A\u95DC\u7BC0\u963B\u5C3C\u6BD4","Modify a wheel joint damping ratio.":"\u4FEE\u6539\u8ECA\u8F2A\u95DC\u7BC0\u963B\u5C3C\u6BD4","the damping ratio for wheel joint _PARAM2_":"\u8ECA\u8F2A\u95DC\u7BC0\u7684\u963B\u5C3C\u6BD4 _PARAM2_","Add weld joint":"\u6DFB\u52A0\u710A\u63A5\u95DC\u7BC0","Add a weld joint between two objects.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u710A\u63A5\u7684\u95DC\u7BC0\u3002","Add a weld joint between _PARAM0_ and _PARAM4_":"\u5728 _PARAM0_ \u548C _PARAM4_ \u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u710A\u63A5\u95DC\u7BC0","Joints \u276F Weld":"\u95DC\u7BC0 \u276F \u710A\u63A5","Weld joint reference angle":"\u710A\u63A5\u95DC\u7BC0\u53C3\u8003\u89D2\u5EA6","Weld joint frequency":"\u710A\u63A5\u95DC\u7BC0\u983B\u7387","Modify a weld joint frequency.":"\u4FEE\u6539\u710A\u63A5\u95DC\u7BC0\u983B\u7387\u3002","the frequency for weld joint _PARAM2_":"\u710A\u63A5\u95DC\u7BC0 _PARAM2_ \u7684\u983B\u7387","Weld joint damping ratio":"\u710A\u63A5\u95DC\u7BC0\u963B\u5C3C\u6BD4","Modify a weld joint damping ratio.":"\u4FEE\u6539\u710A\u63A5\u95DC\u7BC0\u963B\u5C3C\u6BD4\u3002","the damping ratio for weld joint _PARAM2_":"\u710A\u63A5\u95DC\u7BC0 _PARAM2_ \u7684\u963B\u5C3C\u6BD4","Add rope joint":"\u6DFB\u52A0\u7E69\u7D22\u95DC\u7BC0","Add a rope joint between two objects. The maximum length is converted to meters using the world scale on X.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u7E69\u7D22\u95DC\u7BC0\u3002\u6700\u5927\u9577\u5EA6\u4F7F\u7528X\u4E0A\u7684\u4E16\u754C\u6A19\u5EA6\u8F49\u63DB\u70BA\u7C73\u3002","Add a rope joint between _PARAM0_ and _PARAM4_":"\u5728_PARAM0_\u548C_PARAM4_\u4E4B\u9593\u6DFB\u52A0\u7E69\u7D22\u95DC\u7BC0","Joints \u276F Rope":"\u95DC\u7BC0 \u276F \u7E69\u5B50","Maximum length (-1 to use current objects distance) (default: -1)":"\u6700\u5927\u9577\u5EA6 (-1 \u4F7F\u7528\u7576\u524D\u7269\u4EF6\u8DDD\u96E2) (\u9ED8\u8A8D: -1)","Rope joint max length":"\u7E69\u7D22\u95DC\u7BC0\u6700\u5927\u9577\u5EA6","Modify a rope joint maximum length.":"\u4FEE\u6539\u7E69\u7D22\u95DC\u7BC0\u7684\u6700\u5927\u9577\u5EA6\u3002","the maximum length for rope joint _PARAM2_":"\u7E69\u7D22\u95DC\u7BC0_PARAM2_\u7684\u6700\u5927\u9577\u5EA6","Rope joint maximum length":"\u7E69\u7D22\u95DC\u7BC0\u6700\u5927\u9577\u5EA6","Add friction joint":"\u6DFB\u52A0\u6469\u64E6\u95DC\u7BC0","Add a friction joint between two objects.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u6469\u64E6\u95DC\u7BC0\u3002","Add a friction joint between _PARAM0_ and _PARAM4_":"\u5728_PARAM0_\u548C_PARAM4_\u4E4B\u9593\u6DFB\u52A0\u6469\u64E6\u95DC\u7BC0","Joints \u276F Friction":"\u95DC\u7BC0 \u276F \u6469\u64E6\u529B","Maximum force (non-negative)":"\u6700\u5927\u529B\u91CF(\u975E\u8CA0)","Maximum torque (non-negative)":"\u6700\u5927\u626D\u77E9(\u975E\u8CA0)","Friction joint max force":"\u6469\u64E6\u95DC\u7BC0\u6700\u5927\u529B\u91CF","Modify a friction joint maximum force.":"\u4FEE\u6539\u6469\u64E6\u95DC\u7BC0\u7684\u6700\u5927\u529B\u91CF\u3002","the maximum force for friction joint _PARAM2_":"\u6469\u64E6\u95DC\u7BC0_PARAM2_\u7684\u6700\u5927\u529B\u91CF","Friction joint maximum force":"\u6469\u64E6\u95DC\u7BC0\u6700\u5927\u529B\u91CF","Friction joint max torque":"\u6469\u64E6\u95DC\u7BC0\u6700\u5927\u626D\u77E9","Modify a friction joint maximum torque.":"\u4FEE\u6539\u6469\u64E6\u95DC\u7BC0\u7684\u6700\u5927\u626D\u77E9\u3002","the maximum torque for friction joint _PARAM2_":"\u6469\u64E6\u95DC\u7BC0_PARAM2_\u7684\u6700\u5927\u626D\u77E9","Friction joint maximum torque":"\u6469\u64E6\u95DC\u7BC0\u6700\u5927\u626D\u77E9","Add motor joint":"\u6DFB\u52A0\u52D5\u529B\u95DC\u7BC0","Add a motor joint between two objects. The position and angle offsets are relative to the first object.":"\u5728\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u6DFB\u52A0\u4E00\u500B\u52D5\u529B\u95DC\u7BC0\u3002\u4F4D\u7F6E\u548C\u89D2\u5EA6\u504F\u79FB\u662F\u76F8\u5C0D\u65BC\u7B2C\u4E00\u500B\u7269\u4EF6\u7684\u3002","Add a motor joint between _PARAM0_ and _PARAM2_":"\u5728_PARAM0_\u548C_PARAM2_\u4E4B\u9593\u6DFB\u52A0\u52D5\u529B\u95DC\u7BC0","Joints \u276F Motor":"\u95DC\u7BC0 \u276F \u52D5\u529B","Offset X position":"\u504F\u79FBX\u4F4D\u7F6E","Offset Y position":"\u504F\u79FB Y \u4F4D\u7F6E","Offset Angle":"\u504F\u79FB\u89D2\u5EA6","Correction factor (default: 1)":"\u6821\u6B63\u7CFB\u6578 (\u9ED8\u8A8D\uFF1A 1)","Motor joint offset":"\u52D5\u529B\u95DC\u7BC0\u504F\u79FB","Modify a motor joint offset.":"\u4FEE\u6539\u52D5\u529B\u95DC\u7BC0\u504F\u79FB\u3002","Set offset to _PARAM3_;_PARAM4_ for motor joint _PARAM2_":"\u5C07\u52D5\u529B\u95DC\u7BC0_PARAM2_\u7684\u504F\u79FB\u8A2D\u5B9A\u70BA_PARAM3 _; _ PARAM4_","Offset X":"\u504F\u79FB X","Offset Y":"\u504F\u79FBY","Motor joint offset X":"\u52D5\u529B\u95DC\u7BC0\u504F\u79FB X","Motor joint offset Y":"\u52D5\u529B\u95DC\u7BC0\u504F\u79FB Y","Motor joint angular offset":"\u52D5\u529B\u95DC\u7BC0\u89D2\u5EA6\u504F\u79FB","Modify a motor joint angular offset.":"\u4FEE\u6539\u52D5\u529B\u95DC\u7BC0\u89D2\u5EA6\u504F\u79FB\u3002","the angular offset for motor joint _PARAM2_":"\u52D5\u529B\u95DC\u7BC0_PARAM2_\u7684\u89D2\u5EA6\u504F\u79FB","Motor joint max force":"\u52D5\u529B\u95DC\u7BC0\u6700\u5927\u529B\u91CF","Modify a motor joint maximum force.":"\u4FEE\u6539\u52D5\u529B\u95DC\u7BC0\u7684\u6700\u5927\u529B\u91CF\u3002","the maximum force for motor joint _PARAM2_":"\u52D5\u529B\u95DC\u7BC0_PARAM2_\u7684\u6700\u5927\u529B\u91CF","Motor joint maximum force":"\u52D5\u529B\u95DC\u7BC0\u6700\u5927\u529B\u91CF","Motor joint max torque":"\u52D5\u529B\u95DC\u7BC0\u6700\u5927\u626D\u77E9","Modify a motor joint maximum torque.":"\u4FEE\u6539\u52D5\u529B\u95DC\u7BC0\u7684\u6700\u5927\u626D\u77E9\u3002","the maximum torque for motor joint _PARAM2_":"\u52D5\u529B\u95DC\u7BC0_PARAM2_\u7684\u6700\u5927\u626D\u77E9","Motor joint maximum torque":"\u52D5\u529B\u95DC\u7BC0\u6700\u5927\u626D\u77E9","Motor joint correction factor":"\u52D5\u529B\u95DC\u7BC0\u6821\u6B63\u7CFB\u6578","Modify a motor joint correction factor.":"\u4FEE\u6539\u52D5\u529B\u95DC\u7BC0\u6821\u6B63\u7CFB\u6578\u3002","the correction factor for motor joint _PARAM2_":"\u52D5\u529B\u95DC\u7BC0_PARAM2_\u7684\u6821\u6B63\u7CFB\u6578","Check if two objects collide.":"\u6AA2\u67E5\u5169\u500B\u7269\u4EF6\u662F\u5426\u76F8\u649E\u3002","_PARAM0_ is colliding with _PARAM2_":"_PARAM0_\u8207_PARAM2_\u767C\u751F\u6C96\u7A81","Collision started":"\u78B0\u649E\u958B\u59CB","Check if two objects just started colliding during this frame.":"\u6AA2\u67E5\u5169\u500B\u7269\u4EF6\u662F\u5426\u5728\u6B64\u5E40\u671F\u9593\u958B\u59CB\u78B0\u649E\u3002","_PARAM0_ started colliding with _PARAM2_":"_PARAM0_ \u958B\u59CB\u8207 _PARAM2_ \u78B0\u649E","Collision stopped":"\u78B0\u649E\u5DF2\u505C\u6B62","Check if two objects just stopped colliding at this frame.":"\u6AA2\u67E5\u5169\u500B\u7269\u4EF6\u662F\u5426\u5728\u6B64\u5E40\u8655\u505C\u6B62\u78B0\u649E","_PARAM0_ stopped colliding with _PARAM2_":"_PARAM0_ \u505C\u6B62\u8207 _PARAM2_ \u78B0\u649E","Allow your game to send scores to your leaderboards (anonymously or from the logged-in player) or display existing leaderboards to the player.":"\u5141\u8A31\u60A8\u7684\u904A\u6232\u5411\u60A8\u7684\u6392\u884C\u699C\u767C\u9001\u5206\u6578\uFF08\u533F\u540D\u6216\u5DF2\u767B\u9304\u7684\u73A9\u5BB6\uFF09\u6216\u5411\u73A9\u5BB6\u986F\u793A\u73FE\u6709\u6392\u884C\u699C\u3002","Save player score":"\u4FDD\u5B58\u73A9\u5BB6\u5206\u6578","Save the player's score to the given leaderboard. If the player is connected, the score will be attached to the connected player (unless disabled).":"\u5C07\u73A9\u5BB6\u7684\u5206\u6578\u4FDD\u5B58\u5230\u7D66\u5B9A\u7684\u6392\u884C\u699C\u4E2D\u3002\u5982\u679C\u73A9\u5BB6\u5DF2\u9023\u63A5\uFF0C\u5206\u6578\u5C07\u9644\u52A0\u5230\u5DF2\u9023\u63A5\u7684\u73A9\u5BB6 (\u9664\u975E\u7981\u7528)\u3002","Send to leaderboard _PARAM1_ the score _PARAM2_ with player name: _PARAM3_":"\u5C07\u5206\u6578 _PARAM2_ \u767C\u9001\u5230\u6392\u884C\u699C_PARAM1_\uFF0C\u73A9\u5BB6\u540D\u7A31\uFF1A_PARAM3_","Save score":"\u4FDD\u5B58\u5206\u6578","Score to register for the player":"\u8981\u6CE8\u518A\u73A9\u5BB6\u7684\u5F97\u5206","Name to register for the player":"\u8981\u6CE8\u518A\u73A9\u5BB6\u7684\u540D\u7A31","Leave this empty to let the leaderboard automatically generate a player name (e.g: \"Player23464\"). You can configure this in the leaderboard administration.":"\u5C07\u6B64\u5B57\u6BB5\u7559\u7A7A\uFF0C\u8B93\u6392\u884C\u699C\u81EA\u52D5\u751F\u6210\u73A9\u5BB6\u540D\u7A31(\u4F8B\u5982\uFF1A\u201CPlayer23464\u201D)\u3002\u60A8\u53EF\u4EE5\u5728\u6392\u884C\u699C\u7BA1\u7406\u4E2D\u9032\u884C\u914D\u7F6E\u3002","Save connected player score":"\u4FDD\u5B58\u5DF2\u9023\u63A5\u7684\u73A9\u5BB6\u5206\u6578","Save the connected player's score to the given leaderboard.":"\u5C07\u6240\u9023\u63A5\u7684\u73A9\u5BB6\u7684\u5F97\u5206\u4FDD\u5B58\u5230\u7D66\u5B9A\u7684\u6392\u884C\u699C\u3002","Send to leaderboard _PARAM1_ the score _PARAM2_ for the connected player":"\u5C07\u5DF2\u9023\u63A5\u73A9\u5BB6\u7684\u5206\u6578 _PARAM2_ \u767C\u9001\u5230\u6392\u884C\u699C_PARAM1_","Always attach scores to the connected player":"\u59CB\u7D42\u5C07\u5206\u6578\u9644\u52A0\u5230\u9023\u63A5\u7684\u73A9\u5BB6","Set if the score sent to a leaderboard is always attached to the connected player - if any. This is on by default.":"\u8A2D\u5B9A\u767C\u9001\u5230\u6392\u884C\u699C\u7684\u5206\u6578\u662F\u5426\u7E3D\u662F\u8207\u9023\u63A5\u7684\u73A9\u5BB6\u76F8\u95DC\u806F-\u5982\u679C\u6709\u7684\u8A71\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u9019\u662F\u958B\u555F\u7684\u3002","Always attach the score to the connected player: _PARAM1_":"\u59CB\u7D42\u5C07\u5206\u6578\u9644\u52A0\u5230\u9023\u63A5\u7684\u73A9\u5BB6\uFF1A_PARAM1_","Enable?":"\u555F\u7528\uFF1F","Last score save has errored":"\u4E0A\u6B21\u7684\u5206\u6578\u4FDD\u5B58\u5DF2\u7D93\u907A\u5931","Check if the last attempt to save a score has errored.":"\u6AA2\u67E5\u6700\u540E\u4E00\u6B21\u4FDD\u5B58\u5206\u6578\u7684\u5617\u8A66\u662F\u5426\u5DF2\u5931\u6548\u3002","Last score save in leaderboard _PARAM0_ has errored":"\u5728\u6392\u884C\u699C_PARAM0_ \u4FDD\u5B58\u7684\u6700\u540E\u5F97\u5206\u5DF2\u7D93\u907A\u5931","If no leaderboard is specified, will return the value related to the last leaderboard save action.":"\u5982\u679C\u6C92\u6709\u6307\u5B9A\u6392\u884C\u699C\uFF0C\u5C07\u8FD4\u56DE\u8207\u6700\u540E\u4E00\u500B\u6392\u884C\u699C\u76F8\u95DC\u7684\u503C\u4FDD\u5B58\u64CD\u4F5C\u3002","Last score save has succeeded":"\u4E0A\u6B21\u6210\u7E3E\u4FDD\u5B58\u6210\u529F","Check if the last attempt to save a score has succeeded.":"\u6AA2\u67E5\u6700\u540E\u4E00\u6B21\u8A66\u5716\u4FDD\u5B58\u5206\u6578\u662F\u5426\u6210\u529F\u3002","Last score save in leaderboard _PARAM0_ has succeeded":"\u5728\u6392\u884C\u699C_PARAM0_ \u4FDD\u5B58\u7684\u6700\u540E\u5206\u6578\u5DF2\u6210\u529F","If no leaderboard is specified, will return the value related to the last leaderboard save action that successfully ended.":"\u5982\u679C\u6C92\u6709\u6307\u5B9A\u6392\u884C\u699C\uFF0C\u5C07\u8FD4\u56DE\u8207\u6700\u540E\u4E00\u500B\u6392\u884C\u699C\u76F8\u95DC\u7684\u503C\uFF0C\u9019\u4E9B\u64CD\u4F5C\u5DF2\u6210\u529F\u7D50\u675F\u3002","Score is saving":"\u6B63\u5728\u4FDD\u5B58\u5F97\u5206","Check if a score is currently being saved in leaderboard.":"\u6AA2\u67E5\u662F\u5426\u6B63\u5728\u5C07\u5206\u6578\u4FDD\u5B58\u5728\u6392\u884C\u699C\u4E2D\u3002","Score is saving in leaderboard _PARAM0_":"\u5206\u6578\u4FDD\u5B58\u5230\u6392\u884C\u699C_PARAM0_","Closed by player":"\u7531\u73A9\u5BB6\u95DC\u9589","Check if the player has just closed the leaderboard view.":"\u6AA2\u67E5\u73A9\u5BB6\u662F\u5426\u525B\u525B\u95DC\u9589\u4E86\u6392\u884C\u699C\u8996\u5716\u3002","Player has just closed the leaderboard view":"\u73A9\u5BB6\u525B\u525B\u95DC\u9589\u4E86\u6392\u884C\u699C\u8996\u5716","Display leaderboard":"\u986F\u793A\u6392\u884C\u699C","Error of last save attempt":"\u6700\u540E\u4E00\u6B21\u4FDD\u5B58\u5617\u8A66\u51FA\u932F","Get the error of the last save attempt.":"\u7372\u53D6\u6700\u540E\u4E00\u6B21\u4FDD\u5B58\u5617\u8A66\u7684\u932F\u8AA4\u3002","Leaderboard display has errored":"\u6392\u884C\u699C\u986F\u793A\u5DF2\u64E6\u9664","Check if the display of the leaderboard errored.":"\u6AA2\u67E5\u6392\u884C\u699C\u986F\u793A\u662F\u5426\u5931\u6548\u3002","Leaderboard display has loaded":"\u6392\u884C\u699C\u986F\u793A\u5DF2\u52A0\u8F09","Check if the display of the leaderboard has finished loading and been displayed on screen.":"\u6AA2\u67E5\u6392\u884C\u699C\u986F\u793A\u662F\u5426\u5DF2\u5B8C\u6210\u52A0\u8F09\u5E76\u986F\u793A\u5728\u5C4F\u5E55\u4E0A\u3002","Leaderboard display has loaded and is displayed on screen":"\u6392\u884C\u699C\u986F\u793A\u5DF2\u52A0\u8F09\u5E76\u986F\u793A\u5728\u5C4F\u5E55\u4E0A","Leaderboard display is loading":"\u6392\u884C\u699C\u986F\u793A\u52A0\u8F09\u4E2D","Check if the display of the leaderboard is loading.":"\u6AA2\u67E5\u6392\u884C\u699C\u662F\u5426\u6B63\u5728\u52A0\u8F09\u986F\u793A\u3002","Format player name":"\u683C\u5F0F\u5316\u73A9\u5BB6\u540D\u7A31","Formats a name so that it can be submitted to a leaderboard.":"\u683C\u5F0F\u5316\u540D\u7A31\u4EE5\u4FBF\u53EF\u4EE5\u63D0\u4EA4\u7D66\u6392\u884C\u699C\u3002","Raw player name":"\u539F\u59CB\u73A9\u5BB6\u540D\u7A31","Display the specified leaderboard on top of the game. If a leaderboard was already displayed on top of the game, the new leaderboard will replace it.":"\u5728\u904A\u6232\u9802\u90E8\u986F\u793A\u6307\u5B9A\u7684\u6392\u884C\u699C\u3002 \u5982\u679C\u6392\u884C\u699C\u5DF2\u7D93\u986F\u793A\u5728\u904A\u6232\u9802\u7AEF\uFF0C\u65B0\u7684\u6392\u884C\u699C\u5C07\u66FF\u63DB\u5B83\u3002","Display leaderboard _PARAM1_ (display a loader: _PARAM2_)":"\u986F\u793A\u6392\u884C\u699C_PARAM1_ (\u986F\u793A\u52A0\u8F09\u5668: _PARAM2_)","Display loader while leaderboard is loading":"\u7576\u6392\u884C\u699C\u52A0\u8F09\u6642\u986F\u793A\u52A0\u8F09\u5668","Close current leaderboard":"\u95DC\u9589\u7576\u524D\u6392\u884C\u699C","Close the leaderboard currently displayed on top of the game.":"\u95DC\u9589\u7576\u524D\u904A\u6232\u9802\u90E8\u986F\u793A\u7684\u6392\u884C\u699C\u3002","Close current leaderboard displayed on top of the game":"\u95DC\u9589\u904A\u6232\u9802\u90E8\u986F\u793A\u7684\u7576\u524D\u6392\u884C\u699C","Device sensors":"\u8A2D\u5099\u50B3\u611F\u5668","Allow the game to access the sensors of a mobile device.":"\u5141\u8A31\u904A\u6232\u8A2A\u554F\u79FB\u52D5\u8A2D\u5099\u7684\u50B3\u611F\u5668\u3002","Sensor active":"\u50B3\u611F\u5668\u6FC0\u6D3B","The condition is true if the device orientation sensor is currently active":"\u5982\u679C\u8A2D\u5099\u65B9\u5411\u50B3\u611F\u5668\u7576\u524D\u8655\u4E8E\u6D3B\u52D5\u72C0\u614B\uFF0C\u5247\u689D\u4EF6\u70BA true","Orientation sensor is active":"\u65B9\u5411\u50B3\u611F\u5668\u5DF2\u6FC0\u6D3B","Orientation":"\u65B9\u5411","Compare the value of orientation alpha":"\u6BD4\u8F03\u65B9\u5411alpha\u7684\u503C","Compare the value of orientation alpha. (Range: 0 to 360\xB0)":"\u6BD4\u8F03\u65B9\u5411alpha\u7684\u503C\u3002 \uFF08\u8303\u570D\uFF1A0\u81F3360\xB0\uFF09","the orientation alpha":"\u65B9\u5411alpha","Sign of the test":"\u6E2C\u8A66\u7684\u7B26\u865F","Compare the value of orientation beta":"\u6BD4\u8F03\u65B9\u5411\u6E2C\u8A66\u7684\u503C","Compare the value of orientation beta. (Range: -180 to 180\xB0)":"\u6BD4\u8F03\u5B9A\u5411\u4F4D\u7684\u503C\u3002(\u8DDD\u96E2\uFF1A-180\u81F3180\u5EA6)","the orientation beta":"\u5B9A\u5411\u6E2C\u8A66\u7248","Compare the value of orientation gamma":"\u6BD4\u8F03\u5B9A\u5411\u4F3D\u746A\u7684\u503C","Compare the value of orientation gamma. (Range: -90 to 90\xB0)":"\u6BD4\u8F03\u5B9A\u5411\u4F3D\u746A\u7684\u503C(\u8DDD\u96E2: -90 \u5230 90\xB0)","the orientation gamma":"\u5B9A\u5411\u4F3D\u99AC","Activate orientation sensor":"\u6FC0\u6D3B\u65B9\u5411\u50B3\u611F\u5668\u3002","Activate the orientation sensor. (remember to turn it off again)":"\u6FC0\u6D3B\u65B9\u5411\u50B3\u611F\u5668(\u8ACB\u8A18\u4F4F\u518D\u6B21\u95DC\u9589\u5B83)","Activate the orientation sensor.":"\u6FC0\u6D3B\u65B9\u5411\u50B3\u611F\u5668\u3002","Deactivate orientation sensor":"\u505C\u7528\u65B9\u5411\u50B3\u611F\u5668","Deactivate the orientation sensor.":"\u505C\u7528\u65B9\u5411\u50B3\u611F\u5668\u3002","Is Absolute":"\u7D55\u5C0D","Get if the devices orientation is absolute and not relative":"\u7372\u53D6\u8A2D\u5099\u7684\u7D55\u5C0D\u65B9\u5411","Alpha value":"\u900F\u660E\u5EA6","Get the devices orientation Alpha (compass)":"\u7372\u53D6\u8A2D\u5099\u65B9\u5411Alpha (\u6307\u5357\u91DD)","Beta value":"\u6E2C\u8A66\u7248\u503C","Get the devices orientation Beta":"\u7372\u53D6\u8A2D\u5099\u65B9\u5411\u6E2C\u8A66\u7248","Gamma value":"\u4F3D\u746A\u503C","Get the devices orientation Gamma value":"\u7372\u53D6\u8A2D\u5099\u65B9\u5411\u4F3D\u746A\u503C","The condition is true if the device motion sensor is currently active":"\u5982\u679C\u8A2D\u5099\u79FB\u52D5\u50B3\u611F\u5668\u6B63\u5728\u6FC0\u6D3B\uFF0C\u689D\u4EF6\u70BA true","Motion sensor is active":"\u904B\u52D5\u50B3\u611F\u5668\u5DF2\u6FC0\u6D3B","Motion":"\u904B\u52D5","Compare the value of rotation alpha":"\u6BD4\u8F03\u65CB\u8F49alpha\u7684\u503C","Compare the value of rotation alpha. (Note: few devices support this sensor)":"\u6BD4\u8F03\u65CB\u8F49alpha\u7684\u503C\u3002 \uFF08\u6CE8\u610F\uFF1A\u5F88\u5C11\u6709\u8A2D\u5099\u652F\u6301\u6B64\u50B3\u611F\u5668\uFF09","the rotation alpha":"\u65CB\u8F49alpha","Value (m/s\xB2)":"\u503C (m/s2)","Compare the value of rotation beta":"\u6BD4\u8F03\u65CB\u8F49\u6E2C\u8A66\u7248\u7684\u503C","Compare the value of rotation beta. (Note: few devices support this sensor)":"\u6BD4\u8F03\u65CB\u8F49\u4F4D\u7684\u503C\u3002(\u6CE8\u610F\uFF1A\u652F\u6301\u6B64\u50B3\u611F\u5668\u7684\u8A2D\u5099\u4E0D\u591A)","the rotation beta":"\u65CB\u8F49\u6E2C\u8A66\u7248","Compare the value of rotation gamma":"\u6BD4\u8F03\u65CB\u8F49\u4F3D\u746A\u7684\u503C","Compare the value of rotation gamma. (Note: few devices support this sensor)":"\u6BD4\u8F03\u65CB\u8F49\u4F3D\u746A\u7684\u503C (\u6CE8\u610F\uFF1A\u652F\u6301\u6B64\u50B3\u611F\u5668\u7684\u8A2D\u5099\u4E0D\u591A)","the rotation gamma":"\u65CB\u8F49\u4F3D\u99AC","Compare the value of acceleration on X-axis":"\u6BD4\u8F03X\u8EF8\u4E0A\u52A0\u901F\u5EA6\u7684\u503C","Compare the value of acceleration on the X-axis (m/s\xB2).":"\u6BD4\u8F03X\u8EF8\u4E0A\u7684\u52A0\u901F\u5EA6\u503C (m/s2)\u3002","the acceleration X":"\u52A0\u901F\u5EA6 X","Compare the value of acceleration on Y-axis":"\u6BD4\u8F03Y-\u8EF8\u4E0A\u52A0\u901F\u5EA6\u7684\u503C","Compare the value of acceleration on the Y-axis (m/s\xB2).":"\u6BD4\u8F03Y-\u8EF8\u4E0A\u7684\u52A0\u901F\u5EA6\u503C (m/s2)\u3002","the acceleration Y":"\u52A0\u901F\u5EA6Y","Compare the value of acceleration on Z-axis":"\u6BD4\u8F03Z\u8EF8\u4E0A\u52A0\u901F\u5EA6\u7684\u503C","Compare the value of acceleration on the Z-axis (m/s\xB2).":"\u6BD4\u8F03Z\u8EF8\u4E0A\u7684\u52A0\u901F\u5EA6\u503C (m/s2)\u3002","the acceleration Z":"\u52A0\u901F\u5EA6Z","Activate motion sensor":"\u6FC0\u6D3B\u904B\u52D5\u50B3\u611F\u5668","Activate the motion sensor. (remember to turn it off again)":"\u6FC0\u6D3B\u904B\u52D5\u50B3\u611F\u5668(\u8ACB\u8A18\u4F4F\u518D\u6B21\u95DC\u9589\u5B83)","Activate the motion sensor.":"\u6FC0\u6D3B\u904B\u52D5\u50B3\u611F\u5668\u3002","Deactivate motion sensor":"\u505C\u7528\u904B\u52D5\u50B3\u611F\u5668","Deactivate the motion sensor.":"\u505C\u7528\u904B\u52D5\u50B3\u611F\u5668\u3002","Get the devices rotation Alpha":"\u7372\u53D6\u8A2D\u5099\u65CB\u8F49 Alpha","Get the devices rotation Beta":"\u7372\u53D6\u8A2D\u5099\u65CB\u8F49 Beta","Get the devices rotation Gamma":"\u7372\u53D6\u8A2D\u5099\u65CB\u8F49 Gamma","Acceleration X value":"\u52A0\u901F X \u503C","Get the devices acceleration on the X-axis (m/s\xB2)":"\u5728X\u8EF8\u4E0A\u52A0\u901F\u8A2D\u5099 (m/s2)","Acceleration Y value":"\u52A0\u901F Y \u503C","Get the devices acceleration on the Y-axis (m/s\xB2)":"\u7372\u53D6\u8A2D\u5099\u5728Y\u8EF8\u4E0A\u7684\u52A0\u901F\u5EA6\uFF08m /s\xB2\uFF09","Acceleration Z value":"\u52A0\u901F Z \u503C","Get the devices acceleration on the Z-axis (m/s\xB2)":"\u7372\u5F97\u8A2D\u5099\u5728Z\u8EF8\u4E0A\u7684\u52A0\u901F\u5EA6\uFF08m /s\xB2\uFF09","Dialogue Tree":"\u5C0D\u8A71\u6A39","Load dialogue tree from a scene variable":"\u5F9E\u5834\u666F\u8B8A\u91CF\u52A0\u8F09\u5C0D\u8A71\u6A39","Load a dialogue data object - Yarn JSON format, stored in a scene variable. Use this command to load all the Dialogue data at the beginning of the game.":"\u52A0\u8F09\u5C0D\u8A71\u8CC7\u6599\u7269\u4EF6 - Yarn json \u683C\u5F0F\uFF0C\u5B58\u5132\u5728\u5834\u666F\u8B8A\u91CF\u3002 \u4F7F\u7528\u6B64\u547D\u4EE4\u5728\u904A\u6232\u958B\u59CB\u6642\u52A0\u8F09\u6240\u6709\u5C0D\u8A71\u8CC7\u6599\u3002","Load dialogue data from scene variable _PARAM0_":"\u5F9E\u5834\u666F\u8B8A\u91CF _PARAM0_ \u52A0\u8F09\u5C0D\u8A71\u8CC7\u6599","Scene variable that holds the Yarn JSON data":"\u6301\u6709Yarn JSON\u8CC7\u6599\u7684\u5834\u666F\u8B8A\u91CF","Load dialogue tree from a JSON file":"\u5F9E Json \u6587\u4EF6\u8F09\u5165\u5C0D\u8A71\u6A39","Load a dialogue data object - Yarn JSON format, stored in a JSON file. Use this command to load all the Dialogue data at the beginning of the game.":"\u8F09\u5165\u5C0D\u8A71\u8CC7\u6599\u7269\u4EF6 - Yarn json \u683C\u5F0F\uFF0C\u5B58\u5132\u5728 Json \u6587\u4EF6\u4E2D\u3002 \u4F7F\u7528\u6B64\u547D\u4EE4\u5728\u904A\u6232\u958B\u59CB\u6642\u52A0\u8F09\u6240\u6709\u5C0D\u8A71\u8CC7\u6599\u3002","Load dialogue data from JSON file _PARAM1_":"\u5F9E json \u6587\u4EF6 _PARAM1_ \u8F09\u5165\u5C0D\u8A71\u8CC7\u6599","JSON file that holds the Yarn JSON data":"\u6301\u6709Yarn JSON\u8CC7\u6599\u7684 Json \u6587\u4EF6","Start dialogue from branch":"\u5F9E\u5206\u652F\u958B\u59CB\u5C0D\u8A71","Start dialogue from branch. Use this to initiate the dialogue from a specified branch.":"\u5F9E\u5206\u652F\u958B\u59CB\u5C0D\u8A71\u3002\u7528\u4F86\u555F\u52D5\u6307\u5B9A\u5206\u652F\u7684\u5C0D\u8A71\u3002","Start dialogue from branch _PARAM0_":"\u5F9E\u5206\u652F _PARAM0_ \u958B\u59CB\u5C0D\u8A71","Dialogue branch":"\u5C0D\u8A71\u5206\u652F","Stop running dialogue":"\u505C\u6B62\u57F7\u884C\u5C0D\u8A71","Stop the running dialogue. Use this to interrupt dialogue parsing.":"\u505C\u6B62\u6B63\u5728\u904B\u884C\u7684\u5C0D\u8A71\u3002\u7528\u5B83\u4F86\u4E2D\u65B7\u5C0D\u8A71\u89E3\u6790\u3002","Go to the next dialogue line":"\u8F49\u5230\u4E0B\u4E00\u500B\u5C0D\u8A71\u884C","Go to the next dialogue line. Use this to advance to the next dialogue line when the player presses a button.":"\u8F49\u5230\u4E0B\u4E00\u500B\u5C0D\u8A71\u7DDA\u3002\u7576\u73A9\u5BB6\u6309\u4E0B\u6309\u9215\u6642\uFF0C\u7528\u5B83\u4F86\u63A8\u9032\u5230\u4E0B\u4E00\u500B\u5C0D\u8A71\u7DDA\u3002","Confirm selected option":"\u78BA\u8A8D\u9078\u5B9A\u7684\u9078\u9805","Set the selected option as confirmed, which will validate it and go forward to the next node. Use other actions to select options (see \"select next option\" and \"Select previous option\").":"\u5C07\u9078\u4E2D\u7684\u9078\u9805\u8A2D\u5B9A\u70BA\u5DF2\u78BA\u8A8D\uFF0C\u5C07\u9A57\u8B49\u5B83\uFF0C\u5E76\u8F49\u5230\u4E0B\u4E00\u500B\u7BC0\u9EDE\u3002 \u4F7F\u7528\u5176\u4ED6\u52D5\u4F5C\u9078\u64C7\u9078\u9805(\u898B\"\u9078\u64C7\u4E0B\u4E00\u500B\u9078\u9805\"\u548C\"\u9078\u64C7\u4E0A\u4E00\u500B\u9078\u9805\")\u3002","Select next option":"\u9078\u64C7\u4E0B\u4E00\u500B\u9078\u9805","Select next option (add 1 to selected option number). Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"\u9078\u64C7\u4E0B\u4E00\u500B\u9078\u9805 (\u5C071\u6DFB\u52A0\u5230\u9078\u4E2D\u7684\u9078\u9805\u7DE8\u865F)\u3002 \u7576\u5C0D\u8A71\u884C\u70BA\u201C\u9078\u9805\u201D\u985E\u578B\u4E14\u64AD\u653E\u5668\u6309\u4E0B\u6309\u9215\u66F4\u6539\u9078\u4E2D\u7684\u9078\u9805\u6642\u4F7F\u7528\u6B64\u9805\u3002","Select previous option":"\u9078\u64C7\u4E0A\u4E00\u500B\u9078\u9805","Select previous option (subtract 1 from selected option number). Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"\u9078\u64C7\u4E0A\u4E00\u500B\u9078\u9805 (\u5F9E\u9078\u4E2D\u7684\u9078\u9805\u865F\u4E2D\u6E1B\u53BB1)\u3002 \u7576\u5C0D\u8A71\u884C\u70BA\u201C\u9078\u9805\u201D\u985E\u578B\u4E14\u64AD\u653E\u5668\u6309\u4E0B\u6309\u9215\u66F4\u6539\u9078\u4E2D\u7684\u9078\u9805\u6642\u4F7F\u7528\u6B64\u9805\u3002","Select option by number":"\u6309\u7DE8\u865F\u9078\u64C7\u9078\u9805","Select option by number. Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"\u6309\u6578\u5B57\u9078\u64C7\u9078\u9805\u3002\u7576\u5C0D\u8A71\u7DDA\u70BA\u201C\u9078\u9805\u201D\u985E\u578B\u4E14\u64AD\u653E\u5668\u6309\u4E0B\u6309\u9215\u4EE5\u66F4\u6539\u9078\u4E2D\u7684\u9078\u9805\u6642\uFF0C\u4F7F\u7528\u6B64\u9078\u9805\u3002","Select option at index _PARAM0_":"\u5728\u7D22\u5F15 _PARAM0_ \u9078\u64C7\u9078\u9805","Option index number":"\u9078\u9805\u7D22\u5F15\u865F","Scroll clipped text":"\u6EFE\u52D5\u526A\u5207\u6587\u672C","Scroll clipped text. Use this with a timer and \"get clipped text\" when you want to create a typewriter effect. Every time the action runs, a new character appears from the text.":"\u6EFE\u52D5\u526A\u5207\u7684\u6587\u672C\u3002\u7576\u60A8\u60F3\u8981\u5275\u5EFA\u6253\u5B57\u6A5F\u6548\u679C\u6642\uFF0C\u4F7F\u7528\u8A08\u6642\u5668\u548C\u201C\u7372\u53D6\u526A\u5207\u6587\u672C\u201D\u3002 \u6BCF\u6B21\u52D5\u4F5C\u904B\u884C\u6642\uFF0C\u6587\u672C\u4E2D\u90FD\u6703\u51FA\u73FE\u4E00\u500B\u65B0\u5B57\u7B26\u3002","Complete clipped text scrolling":"\u5B8C\u6210\u526A\u5207\u6587\u672C\u6EFE\u52D5","Complete the clipped text scrolling. Use this action whenever you want to skip scrolling.":"\u5B8C\u6210\u526A\u5207\u7684\u6587\u672C\u6EFE\u52D5\u3002\u7576\u60A8\u60F3\u8DF3\u904E\u6EFE\u52D5\u6642\u4F7F\u7528\u6B64\u52D5\u4F5C\u3002","Set dialogue state string variable":"\u8A2D\u5B9A\u5C0D\u8A71\u72C0\u614B\u5B57\u7B26\u4E32\u8B8A\u91CF","Set dialogue state string variable. Use this to set a variable that the dialogue data is using.":"\u8A2D\u5B9A\u5C0D\u8A71\u72C0\u614B\u5B57\u7B26\u4E32\u8B8A\u91CF\u3002\u4F7F\u7528\u6B64\u8A2D\u5B9A\u5C0D\u8A71\u8CC7\u6599\u4F7F\u7528\u7684\u8B8A\u91CF\u3002","Set dialogue state string variable _PARAM0_ to _PARAM1_":"\u5C07\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF_PARAM0_ \u8A2D\u5B9A\u70BA _PARAM1_","State variable name":"\u72C0\u614B\u8B8A\u91CF\u540D","New value":"\u65B0\u503C","Set dialogue state number variable":"\u8A2D\u5B9A\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF","Set dialogue state number variable. Use this to set a variable that the dialogue data is using.":"\u8A2D\u5B9A\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF\u3002\u4F7F\u7528\u6B64\u8A2D\u5B9A\u5C0D\u8A71\u8CC7\u6599\u4F7F\u7528\u7684\u8B8A\u91CF\u3002","Set dialogue state number variable _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF _PARAM0_ \u5230 _PARAM1_","Set dialogue state boolean variable":"\u8A2D\u5B9A\u5C0D\u8A71\u72C0\u614B\u5E03\u723E\u8B8A\u91CF","Set dialogue state boolean variable. Use this to set a variable that the dialogue data is using.":"\u8A2D\u5B9A\u5C0D\u8A71\u72C0\u614B\u5E03\u723E\u8B8A\u91CF\u3002\u4F7F\u7528\u6B64\u8A2D\u5B9A\u5C0D\u8A71\u8CC7\u6599\u4F7F\u7528\u7684\u8B8A\u91CF\u3002","Set dialogue state boolean variable _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A\u5C0D\u8A71\u72C0\u614B\u5E03\u723E\u8B8A\u91CF _PARAM0_ \u5230 _PARAM1_","Save dialogue state":"\u4FDD\u5B58\u5C0D\u8A71\u72C0\u614B","Save dialogue state. Use this to store the dialogue state into a variable, which can later be used for saving the game. That way player choices can become part of the game save.":"\u4FDD\u5B58\u5C0D\u8A71\u72C0\u614B\u3002\u7528\u5B83\u4F86\u5C07\u5C0D\u8A71\u72C0\u614B\u5B58\u5132\u70BA\u4E00\u500B\u8B8A\u91CF\uFF0C\u9019\u500B\u8B8A\u91CF\u4EE5\u540E\u53EF\u4EE5\u7528\u4E8E\u4FDD\u5B58\u904A\u6232\u3002 \u9019\u6A23\u73A9\u5BB6\u7684\u9078\u64C7\u5C31\u53EF\u4EE5\u6210\u70BA\u904A\u6232\u4FDD\u5B58\u7684\u4E00\u90E8\u5206\u3002","Save dialogue state to _PARAM0_":"\u5C07\u5C0D\u8A71\u72C0\u614B\u4FDD\u5B58\u5230 _PARAM0_","Global Variable":"\u5168\u5C40\u8B8A\u91CF","Load dialogue state":"\u52A0\u8F09\u5C0D\u8A71\u72C0\u614B","Load dialogue state. Use this to restore dialogue state, if you have stored in a variable before with the \"Save state\" action.":"\u52A0\u8F09\u5C0D\u8A71\u72C0\u614B\uFF0C\u5982\u679C\u60A8\u5728\u201C\u4FDD\u5B58\u72C0\u614B\u201D\u64CD\u4F5C\u4E4B\u524D\u5B58\u5132\u5728\u4E00\u500B\u8B8A\u91CF\u4E2D\uFF0C\u5247\u4F7F\u7528\u6B64\u6062\u5FA9\u5C0D\u8A71\u72C0\u614B\u3002","Load dialogue state from _PARAM0_":"\u5F9E _PARAM0_ \u52A0\u8F09\u5C0D\u8A71\u72C0\u614B","Clear dialogue state":"\u6E05\u9664\u5C0D\u8A71\u72C0\u614B","Clear dialogue state. This resets all dialogue state accumulated by the player choices. Useful when the player is starting a new game.":"\u6E05\u9664\u5C0D\u8A71\u72C0\u614B\u3002\u9019\u5C07\u91CD\u7F6E\u73A9\u5BB6\u9078\u64C7\u7684\u6240\u6709\u5C0D\u8A71\u72C0\u614B\u3002\u7576\u73A9\u5BB6\u958B\u59CB\u65B0\u904A\u6232\u6642\u6709\u7528\u3002","Get the current dialogue line text":"\u7372\u53D6\u7576\u524D\u5C0D\u8A71\u884C\u6587\u672C","Returns the current dialogue line text":"\u8FD4\u56DE\u7576\u524D\u5C0D\u8A71\u884C\u6587\u672C","Get the number of options in an options line type":"\u7372\u53D6\u9078\u9805\u884C\u985E\u578B\u4E2D\u9078\u9805\u7684\u6578\u91CF","Get the text of an option from an options line type":"\u5F9E\u9078\u9805\u884C\u985E\u578B\u7372\u53D6\u9078\u9805\u6587\u672C","Get the text of an option from an options line type, using the option's Number. The numbers start from 0.":"\u5F9E\u9078\u9805\u884C\u985E\u578B\u7372\u53D6\u9078\u9805\u7684\u6587\u672C\uFF0C\u4F7F\u7528\u9078\u9805\u7684\u6578\u5B57\u3002\u6578\u5B57\u5F9E0\u958B\u59CB\u3002","Option Index Number":"\u9078\u9805\u7D22\u5F15\u865F","Get a Horizontal list of options from the options line type":"\u5F9E\u9078\u9805\u884C\u985E\u578B\u7372\u53D6\u9078\u9805\u6C34\u5E73\u5217\u8868","Get the text of all available options from an options line type as a horizontal list. You can also pass the selected option's cursor string, which by default is ->":"\u5F9E\u9078\u9805\u884C\u985E\u578B\u7372\u53D6\u6240\u6709\u53EF\u7528\u9078\u9805\u7684\u6587\u672C\u4F5C\u70BA\u6C34\u5E73\u5217\u8868\u3002 \u60A8\u4E5F\u53EF\u4EE5\u901A\u904E\u6240\u9078\u9078\u9805\u7684\u5149\u6A19\u5B57\u7B26\u4E32\uFF0C\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\u5B83\u662F ->","Options Selection Cursor":"\u9078\u9805\u9078\u64C7\u5149\u6A19","Get a Vertical list of options from the options line type":"\u5F9E\u9078\u9805\u884C\u985E\u578B\u7372\u53D6\u9078\u9805\u7684\u5782\u76F4\u5217\u8868","Get the text of all available options from an options line type as a vertical list. You can also pass the selected option's cursor string, which by default is ->":"\u5F9E\u9078\u9805\u884C\u985E\u578B\u7372\u53D6\u6240\u6709\u53EF\u7528\u9078\u9805\u7684\u6587\u672C\u4F5C\u70BA\u5782\u76F4\u5217\u8868\u3002 \u60A8\u4E5F\u53EF\u4EE5\u901A\u904E\u6240\u9078\u9078\u9805\u7684\u5149\u6A19\u5B57\u7B26\u4E32\uFF0C\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\u5B83\u662F ->","Get the number of the currently selected option":"\u7372\u53D6\u7576\u524D\u9078\u4E2D\u9078\u9805\u7684\u6578\u91CF","Get the number of the currently selected option. Use this to help you render the option selection marker at the right place.":"\u7372\u53D6\u7576\u524D\u9078\u4E2D\u9078\u9805\u7684\u6578\u91CF\u3002\u4F7F\u7528\u6B64\u9078\u9805\u53EF\u4EE5\u5E6B\u52A9\u60A8\u5728\u6B63\u78BA\u7684\u5730\u65B9\u5448\u73FE\u9078\u9805\u7684\u9078\u64C7\u6A19\u8A18\u3002","Get dialogue line text clipped":"\u7372\u5F97\u526A\u5207\u7684\u5C0D\u8A71\u884C\u6587\u672C","Get dialogue line text clipped by the typewriter effect. Use the \"Scroll clipped text\" action to control the typewriter effect.":"\u7372\u53D6\u88AB\u6253\u5B57\u6A5F\u6548\u679C\u526A\u5207\u7684\u5C0D\u8A71\u884C\u6587\u672C\u3002\u4F7F\u7528\u201C\u6EFE\u52D5\u526A\u5207\u7684\u6587\u672C\u201D\u64CD\u4F5C\u4F86\u63A7\u5236\u6253\u5B57\u6A5F\u6548\u679C\u3002","Get the title of the current branch of the running dialogue":"\u7372\u53D6\u7576\u524D\u5C0D\u8A71\u5206\u652F\u7684\u6A19\u984C","Get the tags of the current branch of the running dialogue":"\u7372\u53D6\u7576\u524D\u5C0D\u8A71\u5206\u652F\u7684\u6A19\u7C3D","Get a tag of the current branch of the running dialogue via its index":"\u901A\u904E\u5176\u7D22\u5F15\u7372\u53D6\u7576\u524D\u5C0D\u8A71\u5206\u652F\u7684\u6A19\u7C3D","Tag Index Number":"\u6A19\u7C3D\u7D22\u5F15\u7DE8\u865F","Get the parameters of a command call":"\u7372\u53D6\u547D\u4EE4\u8ABF\u7528\u7684\u53C3\u6578","Get the parameters of a command call - <>":"\u7372\u53D6\u547D\u4EE4\u8ABF\u7528\u7684\u53C3\u6578 - <>","parameter Index Number":"\u53C3\u6578\u7D22\u5F15\u7DE8\u865F","Get the number of parameters in the currently passed command":"\u7372\u53D6\u7576\u524D\u50B3\u905E\u547D\u4EE4\u4E2D\u7684\u53C3\u6578\u6578","Get parameter from a Tag found by the branch contains tag condition":"\u5F9E\u5206\u652F\u4E2D\u627E\u5230\u7684\u6A19\u7C3D\u7372\u53D6\u53C3\u6578\u5305\u542B\u6A19\u7C3D\u689D\u4EF6","Get a list of all visited branches":"\u7372\u53D6\u6240\u6709\u5DF2\u8A2A\u554F\u5206\u652F\u7684\u5217\u8868","Get the full raw text of the current branch":"\u7372\u53D6\u7576\u524D\u5206\u652F\u7684\u539F\u59CB\u6587\u672C","Get the number stored in a dialogue state variable":"\u7372\u53D6\u5B58\u5132\u5728\u5C0D\u8A71\u72C0\u614B\u8B8A\u6578\u4E2D\u7684\u6578\u5B57","Dialogue state variable name":"\u5C0D\u8A71\u72C0\u614B\u8B8A\u6578\u540D\u7A31","Get the string stored in a dialogue state variable":"\u7372\u53D6\u5B58\u5132\u5728\u5C0D\u8A71\u72C0\u614B\u8B8A\u6578\u4E2D\u7684\u5B57\u7B26\u4E32","Command is called":"\u547D\u4EE4\u88AB\u8ABF\u7528","Check if a specific Command is called. If it is a <>, you can even get the parameter with the CommandParameter expression.":"\u6AA2\u67E5\u6307\u5B9A\u7684\u547D\u4EE4\u662F\u5426\u88AB\u8ABF\u7528\u3002\u5982\u679C\u5B83\u662F <>\uFF0C\u60A8\u751A\u81F3\u53EF\u4EE5\u4F7F\u7528\u547D\u4EE4\u53C3\u6578\u8868\u9054\u5F0F\u7372\u53D6\u53C3\u6578\u3002","Command <<_PARAM0_>> is called":"\u547D\u4EE4 <_PARAM0_>\u88AB\u8ABF\u7528","Command String":"\u547D\u4EE4\u5B57\u7B26\u4E32","Dialogue line type":"\u5C0D\u8A71\u7DDA\u985E\u578B","Check if the current dialogue line line is one of the three existing types. Use this to set what logic is executed for each type.\nThe three types are as follows:\n- text: when displaying dialogue text.\n- options: when displaying [[branching/options]] for dialogue choices.\n-command: when <> are triggered by the dialogue data.":"\u6AA2\u67E5\u7576\u524D\u5C0D\u8A71\u884C\u662F\u5426\u70BA\u73FE\u6709\u4E09\u7A2E\u985E\u578B\u4E4B\u4E00\u3002\u4F7F\u7528\u6B64\u8A2D\u5B9A\u6BCF\u7A2E\u985E\u578B\u57F7\u884C\u7684\u908F\u8F2F\u3002\n\u4E09\u7A2E\u985E\u578B\u5982\u4E0B\uFF1A\n- \u6587\u672C\uFF1A\u7576\u986F\u793A\u5C0D\u8A71\u6587\u672C\u6642\u3002\n- \u9078\u9805\uFF1A\u7576\u986F\u793A [[\u5206\u652F/\u9078\u9805]] \u5C0D\u8A71\u9078\u64C7\u6642\uFF0C\n-\u547D\u4EE4\uFF1A<> \u662F\u7531\u5C0D\u8A71\u8CC7\u6599\u89F8\u767C\u7684\u3002","The dialogue line is _PARAM0_":"\u5C0D\u8A71\u7DDA\u662F _PARAM0_","type":"\u985E\u578B","Dialogue is running":"\u5C0D\u8A71\u6B63\u5728\u904B\u884C","Check if the dialogue is running. Use this to for things like locking the player movement while speaking with a non player character.":"\u6AA2\u67E5\u5C0D\u8A71\u662F\u5426\u6B63\u5728\u904B\u884C\u3002\u7528\u5B83\u4F86\u9396\u5B9A\u73A9\u5BB6\u904B\u52D5\u7B49\u4E8B\u9805\u8207\u975E\u73A9\u5BB6\u89D2\u8272\u4EA4\u8AC7\u3002","Dialogue has branch":"\u5C0D\u8A71\u6709\u5206\u652F","Check if the dialogue has a branch with specified name. Use this to check if a dialogue branch exists in the loaded dialogue data.":"\u6AA2\u67E5\u5C0D\u8A71\u662F\u5426\u5177\u6709\u6307\u5B9A\u540D\u7A31\u7684\u5206\u652F\u3002\u4F7F\u7528\u6B64\u4F86\u6AA2\u67E5\u5C0D\u8A71\u5206\u652F\u662F\u5426\u5B58\u5728\u4E8E\u52A0\u8F09\u5C0D\u8A71\u8CC7\u6599\u4E2D\u3002","Dialogue has a branch named _PARAM0_":"\u5C0D\u8A71\u6709\u4E00\u500B\u5206\u652F\uFF0C\u540D\u7A31\u70BA _PARAM0_","Branch name":"\u5206\u652F\u540D\u7A31","Has selected option changed":"\u5DF2\u66F4\u6539\u6240\u9078\u9078\u9805","Check if a selected option has changed when the current dialogue line type is options. Use this to detect when the player has selected another option, so you can re-draw where the selection arrow is.":"\u6AA2\u67E5\u7576\u7576\u524D\u5C0D\u8A71\u884C\u985E\u578B\u70BA\u9078\u9805\u6642\u9078\u4E2D\u7684\u9078\u9805\u662F\u5426\u5DF2\u66F4\u6539\u3002 \u7576\u73A9\u5BB6\u9078\u64C7\u4E86\u53E6\u4E00\u500B\u9078\u9805\u6642\u4F7F\u7528\u6B64\u9078\u9805\u4F86\u6AA2\u6E2C\uFF0C\u6240\u4EE5\u60A8\u53EF\u4EE5\u91CD\u65B0\u7E6A\u5236\u9078\u4E2D\u7BAD\u982D\u7684\u4F4D\u7F6E\u3002","Selected option has changed":"\u6240\u9078\u9078\u9805\u5DF2\u66F4\u6539","Current dialogue branch title":"\u7576\u524D\u5C0D\u8A71\u8655\u6A19\u984C","Check if the current dialogue branch title is equal to a string. Use this to trigger game events when the player has visited a specific dialogue branch.":"\u6AA2\u67E5\u7576\u524D\u5C0D\u8A71\u5206\u652F\u6A19\u984C\u662F\u5426\u7B49\u4E8E\u5B57\u7B26\u4E32\u3002 \u7576\u73A9\u5BB6\u8A2A\u554F\u7279\u5B9A\u5C0D\u8A71\u5206\u652F\u6642\uFF0C\u7528\u5B83\u4F86\u89F8\u767C\u904A\u6232\u4E8B\u4EF6\u3002","The current dialogue branch title is _PARAM0_":"\u7576\u524D\u5C0D\u8A71\u5206\u652F\u6A19\u984C\u662F _PARAM0_","title name":"\u6A19\u984C\u540D\u7A31","Current dialogue branch contains a tag":"\u7576\u524D\u5C0D\u8A71\u8655\u5305\u542B\u4E00\u500B\u6A19\u7C3D","Check if the current dialogue branch contains a specific tag. Tags are an alternative useful way to <> to drive game logic with the dialogue data.":"\u6AA2\u67E5\u7576\u524D\u5C0D\u8A71\u5206\u652F\u662F\u5426\u5305\u542B\u4E00\u500B\u7279\u5B9A\u6A19\u7C3D\u3002 \u6A19\u7C3D\u662F\u7528\u5C0D\u8A71\u8CC7\u6599\u9A45\u52D5\u904A\u6232\u908F\u8F2F\u7684 <> \u7684\u53E6\u4E00\u7A2E\u6709\u7528\u65B9\u5F0F\u3002","The current dialogue branch contains a _PARAM0_ tag":"\u7576\u524D\u5C0D\u8A71\u5206\u652F\u5305\u542B _PARAM0_ \u6A19\u7C3D","tag name":"\u6A19\u7C3D\u540D\u7A31","Branch title has been visited":"\u5DF2\u8A2A\u554F\u5206\u652F\u6A19\u984C","Check if a branch has been visited":"\u6AA2\u67E5\u5206\u652F\u662F\u5426\u5DF2\u88AB\u8A2A\u554F","Branch title _PARAM0_ has been visited":"\u5206\u652F\u6A19\u984C _PARAM0_ \u5DF2\u88AB\u8A2A\u554F","branch title":"\u5206\u652F\u6A19\u984C","Compare dialogue state string variable":"\u6BD4\u8F03\u5C0D\u8A71\u72C0\u614B\u5B57\u7B26\u4E32\u8B8A\u91CF","Compare dialogue state string variable. Use this to trigger game events via dialogue variables.":"\u6BD4\u8F03\u5C0D\u8A71\u72C0\u614B\u5B57\u7B26\u4E32\u8B8A\u91CF\u3002\u901A\u904E\u5C0D\u8A71\u8B8A\u91CF\u4F86\u89F8\u767C\u904A\u6232\u4E8B\u4EF6\u3002","Dialogue state string variable _PARAM0_ is equal to _PARAM1_":"\u5C0D\u8A71\u72C0\u614B\u5B57\u7B26\u4E32\u8B8A\u91CF _PARAM0_ \u7B49\u4E8E _PARAM1_","State variable":"\u72C0\u614B\u8B8A\u91CF","Equal to":"\u7B49\u4E8E","Compare dialogue state number variable":"\u6BD4\u8F03\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF","Compare dialogue state number variable. Use this to trigger game events via dialogue variables.":"\u6BD4\u8F03\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF\u3002\u901A\u904E\u5C0D\u8A71\u8B8A\u91CF\u4F86\u89F8\u767C\u904A\u6232\u4E8B\u4EF6\u3002","Dialogue state number variable _PARAM0_ is equal to _PARAM1_":"\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF _PARAM0_ \u7B49\u4E8E _PARAM1_","Compare dialogue state boolean variable":"\u6BD4\u8F03\u5C0D\u8A71\u72C0\u614B\u5E03\u723E\u8B8A\u91CF","Compare dialogue state variable. Use this to trigger game events via dialogue variables.":"\u6BD4\u8F03\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF\u3002\u901A\u904E\u5C0D\u8A71\u8B8A\u91CF\u4F86\u89F8\u767C\u904A\u6232\u4E8B\u4EF6\u3002","Dialogue state boolean variable _PARAM0_ is equal to _PARAM1_":"\u5C0D\u8A71\u72C0\u614B\u8B8A\u91CF _PARAM0_ \u7B49\u4E8E _PARAM1_","Clipped text has completed scrolling":"\u7247\u6BB5\u6587\u672C\u5DF2\u5B8C\u6210\u6EFE\u52D5","Check if the clipped text scrolling has completed. Use this to prevent the player from going to the next dialogue line before the typing effect has revealed the entire text.":"\u6AA2\u67E5\u526A\u5207\u7684\u6587\u672C\u6EFE\u52D5\u662F\u5426\u5DF2\u5B8C\u6210\u3002 \u7528\u5B83\u4F86\u9632\u6B62\u73A9\u5BB6\u5728\u8F38\u5165\u6548\u679C\u986F\u793A\u6574\u500B\u6587\u672C\u4E4B\u524D\u524D\u5F80\u4E0B\u4E00\u500B\u5C0D\u8A71\u7DDA\u3002","P2P":"P2P","Event triggered by peer":"\u5C0D\u7B49\u9EDE\u89F8\u767C\u7684\u4E8B\u4EF6","Triggers once when a connected client sends the event":"\u7576\u4E00\u500B\u9023\u63A5\u7684\u5BA2\u6236\u7AEF\u767C\u9001\u4E8B\u4EF6\u6642\u89F8\u767C\u4E00\u6B21","Event _PARAM0_ received from other client (data loss: _PARAM1_)":"\u5F9E\u5176\u4ED6\u5BA2\u6236\u7AEF\u6536\u5230\u4E8B\u4EF6 _PARAM0_ (\u8CC7\u6599\u907A\u5931: _PARAM1_)","Event name":"\u4E8B\u4EF6\u540D\u7A31","Data loss allowed?":"\u5141\u8A31\u907A\u5931\u8CC7\u6599\uFF1F","Is P2P ready":"P2P \u5DF2\u6E96\u5099\u597D","True if the peer-to-peer extension initialized and is ready to use.":"\u5982\u679C\u5C0D\u7B49\u9EDE\u64F4\u5C55\u521D\u59CB\u5316\u5E76\u6E96\u5099\u4F7F\u7528\uFF0C\u5247\u70BA\u771F\u3002","Is P2P ready?":"P2P\u6E96\u5099\u597D\u4E86\u55CE\uFF1F","An error occurred":"\u767C\u751F\u932F\u8AA4","Triggers once when an error occurs. Use P2P::GetLastError() expression to get the content of the error if you want to analyse it or display it to the user.":"\u767C\u751F\u932F\u8AA4\u6642\u89F8\u767C\u4E00\u6B21\u3002 \u4F7F\u7528 P2P::GetLastError() \u8868\u9054\u5F0F\u4F86\u7372\u53D6\u932F\u8AA4\u7684\u5167\u5BB9\uFF0C\u5982\u679C\u60A8\u60F3\u8981\u5206\u6790\u5B83\u6216\u5411\u7528\u6236\u986F\u793A\u5B83\u3002","P2P error occurred":"\u767C\u751FP2P\u932F\u8AA4","Peer disconnected":"\u7BC0\u9EDE\u65B7\u958B\u9023\u63A5","Triggers once when a peer disconnects.":"\u7576\u5C0D\u7B49\u9EDE\u65B7\u958B\u9023\u63A5\u6642\u89F8\u767C\u4E00\u6B21\u3002","P2P peer disconnected":"P2P \u5C0D\u7B49\u9EDE\u65B7\u958B\u9023\u63A5","Peer Connected":"\u5C0D\u7B49\u9EDE\u5DF2\u9023\u63A5","Triggers once when a remote peer initiates a connection.":"\u7576\u9060\u7A0B\u5C0D\u65B9\u555F\u52D5\u9023\u63A5\u6642\u89F8\u767C\u4E00\u6B21\u3002","P2P peer connected":"\u5DF2\u9023\u63A5 P2P \u7BC0\u9EDE","Connect to another client":"\u9023\u63A5\u5230\u53E6\u4E00\u500B\u5BA2\u6236\u7AEF","Connects the current client to another client using its id.":"\u4F7F\u7528\u5176ID\u9023\u63A5\u7576\u524D\u5BA2\u6236\u7AEF\u5230\u53E6\u4E00\u500B\u5BA2\u6236\u7AEF\u3002","Connect to P2P client _PARAM0_":"\u9023\u63A5\u5230 P2P \u5BA2\u6236\u7AEF _PARAM0_","ID of the other client":"\u5176\u4ED6\u5BA2\u6236\u7AEF\u7684 ID","Connect to a broker server":"\u9023\u63A5\u5230\u4EE3\u7406\u670D\u52D9\u5668","Connects the extension to a broker server.":"\u5C07\u64F4\u5C55\u9023\u63A5\u5230\u4EE3\u7406\u670D\u52D9\u5668\u3002","Connect to the broker server at http://_PARAM0_:_PARAM1_/":"\u9023\u63A5\u5230\u4EE3\u7406\u670D\u52D9\u5668\uFF1Ahttp://_PARAM0_:_PARAM1_/","Host":"\u4E3B\u6A5F","Port":"\u7AEF\u53E3","Path":"\u8DEF\u5F91","SSl enabled?":"\u555F\u7528SSL\uFF1F","Use a custom ICE server":"\u4F7F\u7528\u81EA\u5B9A\u7FA9\u7684 ICE \u670D\u52D9\u5668","Disables the default ICE (STUN or TURN) servers list and use one of your own. Note that it is recommended to add at least 1 self-hosted STUN and TURN server for games that are not over LAN but over the internet. This action can be used multiple times to add multiple servers. This action needs to be called BEFORE connecting to the broker server.":"\u7981\u7528\u9ED8\u8A8DICE\uFF08STUN or TURN\uFF09\u670D\u52D9\u5668\u5217\u8868\uFF0C\u5E76\u4F7F\u7528\u60A8\u81EA\u5DF1\u7684\u670D\u52D9\u5668\u3002\u8ACB\u6CE8\u610F\uFF0C\u5C0D\u4E8E\u4E0D\u662F\u901A\u904ELAN\u800C\u662F\u901A\u904Einternet\u7684\u904A\u6232\uFF0C\u5EFA\u8B70\u81F3\u5C11\u6DFB\u52A0\u4E00\u500B\u81EA\u6258\u7BA1\u7684STUN\u548CTURN\u670D\u52D9\u5668\u3002\u6B64\u64CD\u4F5C\u53EF\u591A\u6B21\u7528\u4E8E\u6DFB\u52A0\u591A\u500B\u670D\u52D9\u5668\u3002\u5728\u9023\u63A5\u5230\u4EE3\u7406\u670D\u52D9\u5668\u4E4B\u524D\uFF0C\u9700\u8981\u8ABF\u7528\u6B64\u64CD\u4F5C\u3002","Use ICE server _PARAM0_ (username: _PARAM1_, password: _PARAM2_)":"\u4F7F\u7528 ICE \u670D\u52D9\u5668 _PARAM0_ (\u7528\u6236\u540D: _PARAM1_, \u5BC6\u78BC: _PARAM2_)","URL to the ICE server":"ICE \u670D\u52D9\u5668\u7684 URL","(Optional) Username":"(\u53EF\u9078) \u7528\u6236\u540D","(Optional) Password":"(\u53EF\u9078) \u5BC6\u78BC","Disable IP address sharing":"\u7981\u7528 IP \u5730\u5740\u5171\u4EAB","Disables the sharing of IP addresses with the other peers. This action needs to be called BEFORE connecting to the broker server.":"\u7981\u6B62\u8207\u5176\u4ED6\u5C0D\u7B49\u65B9\u5171\u4EAB IP \u5730\u5740\u3002\u9700\u8981\u5728\u9023\u63A5\u5230\u4EE3\u7406\u670D\u52D9\u5668\u4E4B\u524D\u8ABF\u7528\u6B64\u64CD\u4F5C\u3002","Disable IP sharing: _PARAM0_":"\u7981\u7528IP\u5171\u4EAB\uFF1A_PARAM0_","Disable sharing of IP addresses":"\u7981\u7528 IP \u5730\u5740\u5171\u4EAB","Connect to the default broker server":"\u9023\u63A5\u5230\u9ED8\u8A8D\u4EE3\u7406\u670D\u52D9\u5668","Connects to the default broker server.":"\u9023\u63A5\u5230\u9ED8\u8A8D\u4EE3\u7406\u670D\u52D9\u5668\u3002","Override the client ID":"\u8986\u84CB\u5BA2\u6236\u7AEF ID","Overrides the client ID of the current game instance with a specified ID. Must be called BEFORE connecting to a broker.":"\u4F7F\u7528\u7279\u5B9A ID \u8986\u84CB\u904A\u6232\u5BE6\u4F8B\u7684\u5BA2\u6236\u7AEF ID\u3002\u5FC5\u9808\u5728\u9023\u63A5\u81F3\u4EE3\u7406\u524D\u8ABF\u7528\u3002","Override the client ID with _PARAM0_":"\u4EE5 _PARAM0_ \u8986\u84CB\u5BA2\u6236\u7AEF ID","ID":"ID","Trigger event on all connected clients":"\u89F8\u767C\u6240\u6709\u5DF2\u9023\u63A5\u5BA2\u6236\u7AEF\u7684\u4E8B\u4EF6","Triggers an event on all connected clients":"\u5728\u6240\u6709\u5DF2\u9023\u63A5\u7684\u5BA2\u6236\u7AEF\u89F8\u767C\u4E8B\u4EF6","Trigger event _PARAM0_ on all connected clients (extra data: _PARAM1_)":"\u5728\u6240\u6709\u5DF2\u9023\u63A5\u5BA2\u6236\u7AEF\u4E0A\u89F8\u767C\u4E8B\u4EF6 _PARAM0_ (\u984D\u5916\u8CC7\u6599: _PARAM1_)","Extra data (optional)":"\u984D\u5916\u8CC7\u6599(\u53EF\u9078)","Trigger event on a specific client":"\u5C0D\u7279\u5B9A\u5BA2\u6236\u7AEF\u89F8\u767C\u4E8B\u4EF6","Triggers an event on a specific connected client":"\u5728\u7279\u5B9A\u9023\u63A5\u7684\u5BA2\u6236\u7AEF\u89F8\u767C\u4E8B\u4EF6","Trigger event _PARAM1_ on client _PARAM0_ (extra data: _PARAM2_)":"\u5728\u5BA2\u6236\u7AEF _PARAM0_ \u89F8\u767C\u4E8B\u4EF6 _PARAM1_ (\u984D\u5916\u8CC7\u6599: _PARAM2_)","Trigger event on all connected clients (variable)":"\u89F8\u767C\u6240\u6709\u5DF2\u9023\u63A5\u5BA2\u6236\u7AEF\u7684\u4E8B\u4EF6(\u8B8A\u91CF)","Variable containing the extra data":"\u5305\u542B\u984D\u5916\u8CC7\u6599\u7684\u8B8A\u91CF","Trigger event on a specific client (variable)":"\u89F8\u767C\u7279\u5B9A\u5BA2\u6236\u7AEF\u7684\u4E8B\u4EF6(\u8B8A\u91CF)","Get event data (variable)":"\u7372\u53D6\u4E8B\u4EF6\u8CC7\u6599(\u8B8A\u91CF)","Store the data of the specified event in a variable. Check in the conditions that the event was received using the \"Event received\" condition.":"\u5C07\u6307\u5B9A\u4E8B\u4EF6\u7684\u8CC7\u6599\u5B58\u5132\u5728\u4E00\u500B\u8B8A\u91CF\u4E2D\u3002\u8ACB\u6AA2\u67E5\u4E8B\u4EF6\u6536\u5230\u7684\u689D\u4EF6\u4F7F\u7528\"\u4E8B\u4EF6\u6536\u5230\"\u3002","Overwrite _PARAM1_ with variable sent with last trigger of _PARAM0_":"\u4EE5 _PARAM0_ \u6700\u540E\u4E00\u6B21\u89F8\u767C\u7684\u8B8A\u91CF\u8986\u84CB_PARAM1_","Variable where to store the received data":"\u5B58\u5132\u6536\u5230\u8CC7\u6599\u7684\u8B8A\u91CF","Disconnect from a peer":"\u65B7\u958B\u8207\u540C\u4F34\u7684\u9023\u63A5","Disconnects this client from another client.":"\u65B7\u958B\u6B64\u5BA2\u6236\u7AEF\u8207\u5176\u4ED6\u5BA2\u6236\u7AEF\u7684\u9023\u63A5\u3002","Disconnect from client _PARAM0_":"\u5F9E\u5BA2\u6236\u7AEF _PARAM0_ \u65B7\u958B\u9023\u63A5","Disconnect from all peers":"\u65B7\u958B\u8207\u6240\u6709\u540C\u4F34\u7684\u9023\u63A5","Disconnects this client from all other clients.":"\u65B7\u958B\u6B64\u5BA2\u6236\u7AEF\u8207\u6240\u6709\u5176\u4ED6\u5BA2\u6236\u7AEF\u7684\u9023\u63A5\u3002","Disconnect from all clients":"\u65B7\u958B\u6240\u6709\u5BA2\u6236\u7AEF\u7684\u9023\u63A5","Disconnect from broker":"\u65B7\u958B\u8207\u4EE3\u7406\u7684\u9023\u63A5","Disconnects the client from the broker server.":"\u65B7\u958B\u5BA2\u6236\u7AEF\u8207\u4EE3\u7406\u670D\u52D9\u5668\u7684\u9023\u63A5\u3002","Disconnect the client from the broker":"\u65B7\u958B\u5BA2\u6236\u7AEF\u8207\u4EE3\u7406\u7684\u9023\u63A5","Disconnect from all":"\u65B7\u958B\u6240\u6709\u9023\u63A5","Disconnects the client from the broker server and all other clients.":"\u65B7\u958B\u5BA2\u6236\u7AEF\u8207\u4EE3\u7406\u670D\u52D9\u5668\u548C\u6240\u6709\u5176\u4ED6\u5BA2\u6236\u7AEF\u7684\u9023\u63A5\u3002","Disconnect the client from the broker and other clients":"\u65B7\u958B\u5BA2\u6236\u7AEF\u8207\u4EE3\u7406\u548C\u5176\u4ED6\u5BA2\u6236\u7AEF\u7684\u9023\u63A5","Get event data":"\u7372\u53D6\u4E8B\u4EF6\u8CC7\u6599","Returns the data received when the specified event was last triggered":"\u8FD4\u56DE\u6307\u5B9A\u4E8B\u4EF6\u6700\u540E\u4E00\u6B21\u89F8\u767C\u6642\u6536\u5230\u7684\u8CC7\u6599","Get event sender":"\u7372\u53D6\u4E8B\u4EF6\u767C\u9001\u8005","Returns the id of the peer that triggered the event":"\u8FD4\u56DE\u89F8\u767C\u4E8B\u4EF6\u7684\u5C0D\u7B49\u65B9\u7684ID","Get client ID":"\u7372\u53D6\u5BA2\u6236\u7AEF ID","Gets the client ID of the current game instance":"\u7372\u53D6\u7576\u524D\u904A\u6232\u5BE6\u4F8B\u7684\u5BA2\u6236\u7AEF ID","Get last error":"\u5F97\u5230\u6700\u540E\u4E00\u500B\u932F\u8AA4","Gets the description of the last P2P error":"\u7372\u53D6\u6700\u540E\u4E00\u500B P2P \u932F\u8AA4\u7684\u63CF\u8FF0","Get last disconnected peer":"\u7372\u53D6\u6700\u540E\u4E00\u500B\u65B7\u958B\u7684\u5C0D\u7B49\u9EDE","Gets the ID of the latest peer that has disconnected.":"\u7372\u53D6\u5DF2\u65B7\u958B\u9023\u63A5\u7684\u6700\u65B0\u5C0D\u7B49\u9EDE\u7684 ID\u3002","Get ID of the connected peer":"\u7372\u53D6\u5DF2\u9023\u63A5\u5C0D\u7B49\u9EDE\u7684 ID","Gets the ID of the newly connected peer.":"\u7372\u53D6\u65B0\u9023\u63A5\u7684\u5C0D\u7B49\u9EDE\u7684 ID\u3002","Steamworks (Steam) (experimental)":"Steamworks (Steam) (\u5BE6\u9A57\u6027)","Adds integrations for Steam's Steamworks game development SDK.":"\u70BA Steam \u7684 Steamworks \u904A\u6232\u958B\u767C SDK \u6DFB\u52A0\u96C6\u6210\u3002","Steam App ID":"Steam \u61C9\u7528\u7A0B\u5E8F ID","Require Steam to launch the game":"\u8981\u6C42Steam\u555F\u52D5\u904A\u6232","Claim achievement":"\u8072\u7A31\u6210\u5C31","Marks a Steam achievement as obtained. Steam will pop-up a notification with the achievement's data defined on the Steamworks partner website.":"\u5C07 Steam \u6210\u5C31\u6A19\u8A18\u70BA\u5DF2\u7372\u5F97\u3002Steam \u5C07\u5F48\u51FA\u4E00\u689D\u901A\u77E5\uFF0C\u5176\u4E2D\u5305\u542B Steamworks \u5408\u4F5C\u4F19\u4F34\u7DB2\u7AD9\u4E0A\u5B9A\u7FA9\u7684\u6210\u5C31\u8CC7\u6599\u3002","Claim steam achievement _PARAM0_":"\u9818\u53D6 Steam \u6210\u5C31 _PARAM0_","Achievement ID":"\u6210\u5C31 ID","Unclaim achievement":"\u64A4\u92B7\u6210\u5C31","Removes a player's Steam achievement.":"\u522A\u9664\u73A9\u5BB6\u7684 Steam \u6210\u5C31\u3002","Unclaim Steam achievement _PARAM0_":"\u53D6\u6D88 Steam \u6210\u5C31 _PARAM0_","Has achievement":"\u6709\u6210\u5C31","Checks if a player owns one of this game's Steam achievement.":"\u6AA2\u67E5\u73A9\u5BB6\u662F\u5426\u64C1\u6709\u9019\u500B\u904A\u6232\u7684 Steam \u6210\u5C31\u4E4B\u4E00\u3002","Player has previously claimed the Steam achievement _PARAM0_":"\u73A9\u5BB6\u5148\u524D\u5DF2\u7D93\u8A8D\u9818\u904E Steam \u6210\u5C31 _PARAM0_","Steam ID":"Steam ID","The player's unique Steam ID number. Note that it is too big a number to load correctly as a traditional number (\"floating point number\"), and must be used as a string.":"\u73A9\u5BB6\u7684\u552F\u4E00 Steam ID \u865F\u3002\u8ACB\u6CE8\u610F\uFF0C\u8A72\u6578\u5B57\u592A\u5927\uFF0C\u7121\u6CD5\u4F5C\u70BA\u50B3\u7D71\u6578\u5B57(\u201C\u6D6E\u9EDE\u6578\u201D)\u6B63\u78BA\u52A0\u8F09\uFF0C\u5E76\u4E14\u5FC5\u9808\u7528\u4F5C\u5B57\u7B26\u4E32\u3002","The player's registered name on Steam.":"\u73A9\u5BB6\u5728 Steam \u4E0A\u7684\u6CE8\u518A\u540D\u7A31\u3002","Country code":"\u570B\u5BB6\u4EE3\u78BC","The player's country represented as its two-letter code.":"\u73A9\u5BB6\u6240\u5728\u7684\u570B\u5BB6/\u5730\u5340\u7528\u5169\u500B\u5B57\u6BCD\u7684\u4EE3\u78BC\u8868\u793A\u3002","Steam Level":"Steam \u7B49\u7D1A","Obtains the player's Steam level":"\u7372\u5F97\u73A9\u5BB6 Steam \u7B49\u7D1A","Steam rich presence":"Steam \u8C50\u5BCC\u5B58\u5728","Changes an attribute of Steam's rich presence. Allows other player to see exactly what the player's currently doing in the game.":"\u6539\u8B8A\u4E86 Steam \u8C50\u5BCC\u72C0\u614B\u7684\u4E00\u500B\u5C6C\u6027\u3002\u5141\u8A31\u5176\u4ED6\u73A9\u5BB6\u6E96\u78BA\u5730\u770B\u5230\u8A72\u73A9\u5BB6\u7576\u524D\u5728\u904A\u6232\u4E2D\u6B63\u5728\u505A\u4EC0\u4E48\u3002","Set steam rich presence attribute _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A\u84B8\u6C7D\u8C50\u5BCC\u72C0\u614B\u5C6C\u6027 _PARAM0_ \u5230 _PARAM1_","Rich presence":"\u8C50\u5BCC\u72C0\u614B","Is Steamworks Loaded":"Steamworks \u662F\u5426\u5DF2\u52A0\u8F09","Checks whether the Steamworks SDK could be properly loaded. If steam is not installed, the game is not running on PC, or for any other reason Steamworks features will not be able to function, this function will trigger allowing you to disable functionality that relies on Steamworks.":"\u6AA2\u67E5Steamworks SDK\u662F\u5426\u53EF\u4EE5\u6B63\u78BA\u52A0\u8F09\u3002\u5982\u679C\u672A\u5B89\u88DD steam\uFF0C\u904A\u6232\u672A\u5728 PC \u4E0A\u904B\u884C\uFF0C\u6216\u8005\u7531\u4E8E\u4EFB\u4F55\u5176\u4ED6\u539F\u56E0 Steamworks \u529F\u80FD\u5C07\u7121\u6CD5\u904B\u884C\uFF0C\u5247\u6B64\u529F\u80FD\u5C07\u89F8\u767C\uFF0C\u5141\u8A31\u60A8\u7981\u7528\u4F9D\u8CF4\u4E8E Steamworks \u7684\u529F\u80FD\u3002","Steamworks is properly loaded":"Steamworks \u5DF2\u6B63\u78BA\u52A0\u8F09","Utilities":"\u5BE6\u7528\u7A0B\u5E8F","Steam AppID":"Steam \u61C9\u7528\u7A0B\u5E8F ID","Obtains the game's Steam app ID, as declared in the games properties.":"\u7372\u53D6\u904A\u6232\u7684 Steam \u61C9\u7528\u7A0B\u5E8F ID\uFF0C\u5982\u904A\u6232\u5C6C\u6027\u4E2D\u8072\u660E\u7684\u90A3\u6A23\u3002","Current time (from the Steam servers)":"\u7576\u524D\u6642\u9593 (\u4F86\u81EASteam\u670D\u52D9\u5668)","Obtains the real current time from the Steam servers, which cannot be faked by changing the system time.":"\u5F9E Steam \u670D\u52D9\u5668\u7372\u53D6\u7576\u524D\u7684\u771F\u5BE6\u6642\u9593\uFF0C\u7121\u6CD5\u901A\u904E\u66F4\u6539\u7CFB\u7D71\u6642\u9593\u4F86\u507D\u9020\u3002","Is on Steam Deck":"\u5728 Steam Deck \u4E0A","Checks whether the game is currently running on a Steam Deck or not.":"\u6AA2\u67E5\u904A\u6232\u7576\u524D\u662F\u5426\u6B63\u5728 Steam Deck \u4E0A\u904B\u884C\u3002","Game is running on a Steam Deck":"\u904A\u6232\u6B63\u5728 Steam Deck \u4E0A\u904B\u884C","Create a lobby":"\u5275\u5EFA\u4E00\u500B\u5927\u5EF3","Creates a new steam lobby owned by the player, for other players to join.":"\u5275\u5EFA\u4E00\u500B\u7531\u73A9\u5BB6\u64C1\u6709\u7684\u65B0\u84B8\u6C7D\u5927\u5EF3\uFF0C\u4F9B\u5176\u4ED6\u73A9\u5BB6\u52A0\u5165\u3002","Create a lobby visible to _PARAM0_ with max. _PARAM1_ players (store results in _PARAM2_)":"\u5275\u5EFA\u4E00\u500B\u5C0D _PARAM0_ \u53EF\u898B\u7684\u5927\u5EF3\uFF0C\u6700\u591A _PARAM1_ \u73A9\u5BB6 (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM2_ \u4E2D)","Matchmaking":"\u5339\u914D","Get a list of lobbies":"\u7372\u53D6\u5927\u5EF3\u5217\u8868","Fills an array variable with a list of lobbies for the player to join.":"\u7528\u4F9B\u73A9\u5BB6\u8981\u52A0\u5165\u7684\u5927\u5EF3\u5217\u8868\u586B\u5145\u6578\u7D44\u8B8A\u91CF\u3002","Fill _PARAM0_ with a list of lobbies":"\u7528\u5927\u5EF3\u5217\u8868\u586B\u5145 _PARAM0_","Join a lobby (by ID)":"\u52A0\u5165\u4E00\u500B\u5927\u5EF3(\u901A\u904E ID)","Join a Steam lobby, using its lobby ID.":"\u4F7F\u7528\u5176\u5927\u5EF3 ID \u52A0\u5165 Steam \u5927\u5EF3\u3002","Join lobby _PARAM0_ (store result in _PARAM1_)":"\u52A0\u5165\u5927\u5EF3 _PARAM0_ (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM1_ \u4E2D)","Leave current lobby":"\u96E2\u958B\u7576\u524D\u5927\u5EF3","Marks the player as having left the current lobby.":"\u5C07\u73A9\u5BB6\u6A19\u8A18\u70BA\u5DF2\u96E2\u958B\u7576\u524D\u5927\u5EF3\u3002","Leave the current lobby":"\u96E2\u958B\u7576\u524D\u5927\u5EF3","Matchmaking \u276F Current lobby":"\u5339\u914D \u276F \u7576\u524D\u5927\u5EF3","Open invite dialogue":"\u6253\u958B\u9080\u8ACB\u5C0D\u8A71","Opens the steam invitation dialogue to let the player invite their Steam friends to the current lobby. Only works if the player is currently in a lobby.":"\u6253\u958B Steam \u9080\u8ACB\u5C0D\u8A71\u6846\uFF0C\u8B93\u73A9\u5BB6\u9080\u8ACB\u4ED6\u5011\u7684 Steam \u597D\u53CB\u5230\u7576\u524D\u5927\u5EF3\u3002\u50C5\u7576\u73A9\u5BB6\u7576\u524D\u4F4D\u4E8E\u5927\u5EF3\u6642\u624D\u6709\u6548\u3002","Open lobby invitation dialogue":"\u6253\u958B\u5927\u5EF3\u9080\u8ACB\u5C0D\u8A71","Set a lobby attribute":"\u8A2D\u5B9A\u5927\u5EF3\u5C6C\u6027","Sets an attribute of the current lobby. Attributes are readable to anyone that can see the lobby. They can contain public information about the lobby like a description, or for example a P2P ID for knowing where to connect to join this lobby.":"\u8A2D\u5B9A\u7576\u524D\u5927\u5EF3\u7684\u5C6C\u6027\u3002\u4EFB\u4F55\u53EF\u4EE5\u770B\u5230\u5927\u5EF3\u7684\u4EBA\u90FD\u53EF\u4EE5\u8B80\u53D6\u5C6C\u6027\u3002\u5B83\u5011\u53EF\u4EE5\u5305\u542B\u6709\u95DC\u5927\u5EF3\u7684\u516C\u5171\u4FE1\u606F\uFF0C\u4F8B\u5982\u63CF\u8FF0\uFF0C\u6216\u8005\u4F8B\u5982\u7528\u4E8E\u4E86\u89E3\u5F9E\u54EA\u91CC\u9023\u63A5\u4EE5\u52A0\u5165\u8A72\u5927\u5EF3\u7684 P2P ID\u3002","Set current lobby attribute _PARAM0_ to _PARAM1_ (store result in _PARAM2_)":"\u5C07\u7576\u524D\u5927\u5EF3\u5C6C\u6027 _PARAM0_ \u8A2D\u5B9A\u70BA _PARAM1_ (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM2_ \u4E2D)","Set the lobby joinability":"\u8A2D\u5B9A\u5927\u5EF3\u53EF\u9023\u63A5\u6027","Sets whether other users can join the current lobby or not.":"\u8A2D\u5B9A\u5176\u4ED6\u7528\u6236\u662F\u5426\u53EF\u4EE5\u52A0\u5165\u7576\u524D\u5927\u5EF3\u3002","Make current lobby joinable: _PARAM0_ (store result in _PARAM1_)":"\u4F7F\u7576\u524D\u5927\u5EF3\u53EF\u52A0\u5165: _PARAM0_ (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM1_ \u4E2D)","Get the lobby's members":"\u7372\u53D6\u5927\u5EF3\u7684\u6210\u54E1","Gets the Steam ID of all players in the current lobby.":"\u7372\u53D6\u7576\u524D\u5927\u5EF3\u4E2D\u6240\u6709\u73A9\u5BB6\u7684 Steam ID\u3002","Store the array of all players in _PARAM0_":"\u5C07\u6240\u6709\u73A9\u5BB6\u7684\u6578\u7D44\u5B58\u5132\u5728 _PARAM0_ \u4E2D","Get a lobby's members":"\u7372\u53D6\u5927\u5EF3\u7684\u6210\u54E1","Gets the Steam ID of all players in a lobby.":"\u7372\u53D6\u5927\u5EF3\u4E2D\u6240\u6709\u73A9\u5BB6\u7684 Steam ID\u3002","Store the array of all players of lobby _PARAM0_ in _PARAM1_":"\u5C07\u5927\u5EF3 _PARAM0_ \u7684\u6240\u6709\u73A9\u5BB6\u7684\u6578\u7D44\u5B58\u5132\u5728 _PARAM1_ \u4E2D","Current lobby's ID":"\u7576\u524D\u5927\u5EF3\u7684 ID","The ID of the current lobby, useful for letting other players join it.":"\u7576\u524D\u5927\u5EF3\u7684 ID\uFF0C\u7528\u4E8E\u8B93\u5176\u4ED6\u73A9\u5BB6\u52A0\u5165\u5B83\u3002","Attribute of the lobby":"\u5927\u5EF3\u7684\u5C6C\u6027","Obtains the value of one of the current lobby's attributes.":"\u7372\u53D6\u7576\u524D\u5927\u5EF3\u5C6C\u6027\u4E4B\u4E00\u7684\u503C\u3002","Member count of the lobby":"\u5927\u5EF3\u7684\u6210\u54E1\u6578","Obtains the current lobby's member count.":"\u7372\u53D6\u7576\u524D\u5927\u5EF3\u7684\u6210\u54E1\u6578\u3002","Member limit of the lobby":"\u5927\u5EF3\u7684\u6210\u54E1\u9650\u5236","Obtains the current lobby's maximum member limit.":"\u7372\u5F97\u7576\u524D\u5927\u5EF3\u7684\u6700\u5927\u6210\u54E1\u9650\u5236\u3002","Owner of the lobby":"\u5927\u5EF3\u7684\u4E3B\u4EBA","Obtains the Steam ID of the user that owns the current lobby.":"\u7372\u53D6\u64C1\u6709\u7576\u524D\u5927\u5EF3\u7684\u7528\u6236\u7684 Steam ID\u3002","Attribute of a lobby":"\u5927\u5EF3\u7684\u5C6C\u6027","Obtains the value of one of a lobby's attributes.":"\u7372\u53D6\u5927\u5EF3\u5C6C\u6027\u4E4B\u4E00\u7684\u503C\u3002","Member count of a lobby":"\u5927\u5EF3\u6210\u54E1\u6578\u91CF","Obtains a lobby's member count.":"\u7372\u53D6\u5927\u5EF3\u7684\u6210\u54E1\u6578\u91CF\u3002","Member limit of a lobby":"\u5927\u5EF3\u7684\u6210\u54E1\u9650\u5236","Obtains a lobby's maximum member limit.":"\u7372\u53D6\u5927\u5EF3\u7684\u6700\u5927\u6210\u54E1\u9650\u5236\u3002","Owner of a lobby":"\u5927\u5EF3\u7684\u4E3B\u4EBA","Obtains the Steam ID of the user that owns a lobby.":"\u7372\u53D6\u64C1\u6709\u5927\u5EF3\u7684\u7528\u6236\u7684 Steam ID\u3002","Player owns an application":"\u73A9\u5BB6\u64C1\u6709\u4E00\u500B\u61C9\u7528\u7A0B\u5E8F","Checks if the current user owns an application on Steam.":"\u6AA2\u67E5\u7576\u524D\u7528\u6236\u662F\u5426\u64C1\u6709 Steam \u4E0A\u7684\u61C9\u7528\u7A0B\u5E8F\u3002","App _PARAM0_ owned on Steam":"Steam \u4E0A\u64C1\u6709\u7684\u61C9\u7528\u7A0B\u5E8F _PARAM0_","Steam Apps":"Steam \u61C9\u7528\u7A0B\u5E8F","Player installed an application":"\u73A9\u5BB6\u5B89\u88DD\u4E86\u61C9\u7528\u7A0B\u5E8F","Checks if the current user has a Steam application currently installed.":"\u6AA2\u67E5\u7576\u524D\u7528\u6236\u7576\u524D\u662F\u5426\u5B89\u88DD\u4E86 Steam \u61C9\u7528\u7A0B\u5E8F\u3002","App _PARAM0_ installed from Steam":"\u5F9E Steam \u5B89\u88DD\u7684\u61C9\u7528\u7A0B\u5E8F _PARAM0_","Player installed DLC":"\u73A9\u5BB6\u5B89\u88DD\u7684 DLC","Checks if the current user has installed a piece of DLC.":"\u6AA2\u67E5\u7576\u524D\u7528\u6236\u662F\u5426\u5B89\u88DD\u4E86 DLC\u3002","DLC _PARAM0_ installed from Steam":"\u5F9E Steam \u5B89\u88DD DLC _PARAM0_","Get installed app path":"\u7372\u53D6\u5DF2\u5B89\u88DD\u7684\u61C9\u7528\u7A0B\u5E8F\u8DEF\u5F91","Gets the path to an installed Steam application.":"\u7372\u53D6\u5DF2\u5B89\u88DD\u7684 Steam \u61C9\u7528\u7A0B\u5E8F\u7684\u8DEF\u5F91\u3002","Player has a VAC ban":"\u73A9\u5BB6\u5DF2\u88AB VAC \u5C01\u7981","Checks if the current user has a VAC ban on their account.":"\u6AA2\u67E5\u7576\u524D\u7528\u6236\u7684\u5E33\u6236\u662F\u5426\u53D7\u5230 VAC \u7981\u4EE4\u3002","Player cannot be exposed to violence":"\u73A9\u5BB6\u4E0D\u80FD\u906D\u53D7\u66B4\u529B","Checks if the current user may only be exposed to low violence, due to e.g. their age and content restrictions in their country.":"\u6AA2\u67E5\u7576\u524D\u7528\u6236\u662F\u5426\u53EF\u80FD\u50C5\u56E0\u5E74\u9F61\u548C\u6240\u5728\u570B\u5BB6/\u5730\u5340\u7684\u5167\u5BB9\u9650\u5236\u800C\u906D\u53D7\u4F4E\u5EA6\u66B4\u529B\u3002","Player bought the game":"\u73A9\u5BB6\u8CFC\u8CB7\u4E86\u904A\u6232","Checks if the current user actually bought & owns the game. If the \"Require Steam\" checkbox has been checked in the game properties, this will always be true as Steam will not allow to launch the game if it is not owned. Can be used to display an anti-piracy message instead of straight up blocking the launch of the game.":"\u6AA2\u67E5\u7576\u524D\u7528\u6236\u662F\u5426\u78BA\u5BE6\u8CFC\u8CB7\u5E76\u64C1\u6709\u8A72\u904A\u6232\u3002\u5982\u679C\u5728\u904A\u6232\u5C6C\u6027\u4E2D\u9078\u4E2D\u4E86\u201C\u9700\u8981 Steam\u201D\u5FA9\u9078\u6846\uFF0C\u5247\u59CB\u7D42\u5982\u6B64\uFF0C\u56E0\u70BA\u5982\u679C\u904A\u6232\u4E0D\u88AB\u64C1\u6709\uFF0CSteam \u5C07\u4E0D\u5141\u8A31\u555F\u52D5\u8A72\u904A\u6232\u3002\u53EF\u7528\u4E8E\u986F\u793A\u53CD\u76DC\u7248\u6D88\u606F\uFF0C\u800C\u4E0D\u662F\u76F4\u63A5\u963B\u6B62\u904A\u6232\u7684\u555F\u52D5\u3002","Game language":"\u904A\u6232\u8A9E\u8A00","Gets the language the user set in the Steam game properties.":"\u7372\u53D6\u7528\u6236\u5728 Steam \u904A\u6232\u5C6C\u6027\u4E2D\u8A2D\u5B9A\u7684\u8A9E\u8A00\u3002","Current beta name":"\u7576\u524D\u6E2C\u8A66\u7248\u540D\u7A31","Gets the name of the beta the player enrolled to in the Steam game properties.":"\u7372\u53D6\u73A9\u5BB6\u5728 Steam \u904A\u6232\u5C6C\u6027\u4E2D\u6CE8\u518A\u7684\u6E2C\u8A66\u7248\u540D\u7A31\u3002","Current app build ID":"\u7576\u524D\u61C9\u7528\u7A0B\u5E8F\u69CB\u5EFA ID","Gets the ID of the current app build.":"\u7372\u53D6\u7576\u524D\u61C9\u7528\u7A0B\u5E8F\u69CB\u5EFA\u7684 ID\u3002","Digital action activated":"\u6578\u5B57\u52D5\u4F5C\u5DF2\u6FC0\u6D3B","Triggers when a digital action (a button that is either pressed or not) of a Steam Input controller has been triggered.":"\u7576 Steam \u8F38\u5165\u63A7\u5236\u5668\u7684\u6578\u5B57\u52D5\u4F5C (\u6309\u4E0B\u6216\u672A\u6309\u4E0B\u7684\u6309\u9215) \u88AB\u89F8\u767C\u6642\u89F8\u767C\u3002","Digital action _PARAM1_ of controller _PARAM0_ has been activated":"\u63A7\u5236\u5668 _PARAM0_ \u7684\u6578\u5B57\u52D5\u4F5C _PARAM1_ \u5DF2\u6FC0\u6D3B","Activate an action set":"\u6FC0\u6D3B\u52D5\u4F5C\u96C6","Activates a Steam Input action set of a Steam Input controller.":"\u6FC0\u6D3B Steam \u8F38\u5165\u63A7\u5236\u5668\u7684 Steam \u8F38\u5165\u52D5\u4F5C\u96C6\u3002","Activate action set _PARAM1_ of controller _PARAM0_":"\u6FC0\u6D3B\u63A7\u5236\u5668 _PARAM0_ \u7684\u52D5\u4F5C\u96C6 _PARAM1_","Controller count":"\u63A7\u5236\u5668\u8A08\u6578","The amount of connected Steam Input controllers.":"\u5DF2\u9023\u63A5\u7684 Steam \u8F38\u5165\u63A7\u5236\u5668\u7684\u6578\u91CF\u3002","Analog X-Action vector":"\u6A21\u64ECX-\u52D5\u4F5C\u5411\u91CF","The action vector of a Steam Input analog joystick on the X-axis, from 1 (all right) to -1 (all left).":"X \u8EF8\u4E0A Steam \u8F38\u5165\u6A21\u64EC\u64CD\u7E31\u687F\u7684\u52D5\u4F5C\u5411\u91CF\uFF0C\u5F9E 1 (\u5168\u90E8\u53F3\u5074) \u5230 -1 (\u5168\u90E8\u5DE6\u5074)\u3002","Analog Y-Action vector":"\u6A21\u64ECY-\u52D5\u4F5C\u5411\u91CF","The action vector of a Steam Input analog joystick on the Y-axis, from 1 (all up) to -1 (all down).":"Y \u8EF8\u4E0A Steam \u8F38\u5165\u6A21\u64EC\u64CD\u7E31\u687F\u7684\u52D5\u4F5C\u5411\u91CF\uFF0C\u5F9E 1 (\u5168\u90E8\u5411\u4E0A) \u5230 -1 (\u5168\u90E8\u5411\u4E0B)\u3002","Is Steam Cloud enabled?":"Steam \u4E91\u662F\u5426\u5DF2\u555F\u7528\uFF1F","Checks whether steam cloud has been enabled or not for this application.":"\u6AA2\u67E5\u8A72\u61C9\u7528\u7A0B\u5E8F\u662F\u5426\u5DF2\u555F\u7528 Steam \u4E91\u3002","Steam Cloud is enabled":"Steam \u4E91\u5DF2\u555F\u7528","Cloud Save":"\u4E91\u4FDD\u5B58","File exists":"\u6587\u4EF6\u5DF2\u5B58\u5728","Checks if a file exists on Steam Cloud.":"\u6AA2\u67E5 Steam \u4E91\u4E0A\u662F\u5426\u5B58\u5728\u6587\u4EF6\u3002","File _PARAM0_ exists on Steam Cloud":"\u6587\u4EF6 _PARAM0_ \u5B58\u5728\u4E8E Steam \u4E91\u4E0A","Write a file":"\u5BEB\u4E00\u500B\u6587\u4EF6","Writes a file onto the Steam Cloud.":"\u5C07\u6587\u4EF6\u5BEB\u5165 Steam \u4E91\u3002","Write _PARAM1_ into the file _PARAM0_ on Steam Cloud (store result in _PARAM2_)":"\u5C07 _PARAM1_ \u5BEB\u5165 Steam \u4E91\u4E0A\u7684\u6587\u4EF6 _PARAM0_ (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM2_ \u4E2D)","Deletes a file from the Steam Cloud.":"\u5F9E Steam \u4E91\u4E2D\u522A\u9664\u6587\u4EF6\u3002","Delete file _PARAM0_ from Steam Cloud (store result in _PARAM1_)":"\u5F9E Steam \u4E91\u522A\u9664\u6587\u4EF6 _PARAM0_ (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM1_ \u4E2D)","Read a file":"\u8B80\u53D6\u6587\u4EF6","Reads a file from Steam Cloud and returns its contents.":"\u5F9E Steam \u4E91\u8B80\u53D6\u6587\u4EF6\u5E76\u8FD4\u56DE\u5176\u5167\u5BB9\u3002","Create a Workshop item":"\u5275\u5EFA\u5275\u610F\u5DE5\u574A\u9805\u76EE","Creates an item owned by the current player on the Steam Workshop. This only assignes an ID to an item for the user - use the action \"Update workshop item\" to set the item data and upload the workshop file.":"\u5728 Steam \u5275\u610F\u5DE5\u574A\u4E0A\u5275\u5EFA\u7576\u524D\u73A9\u5BB6\u64C1\u6709\u7684\u7269\u54C1\u3002\u9019\u53EA\u6703\u70BA\u7528\u6236\u7684\u9805\u76EE\u5206\u914D\u4E00\u500B ID - \u4F7F\u7528\u201C\u66F4\u65B0\u5275\u610F\u5DE5\u574A\u9805\u76EE\u201D\u64CD\u4F5C\u4F86\u8A2D\u5B9A\u9805\u76EE\u8CC7\u6599\u5E76\u4E0A\u50B3\u5275\u610F\u5DE5\u574A\u6587\u4EF6\u3002","Create a Workshop item and store its ID in _PARAM0_":"\u5275\u5EFA\u4E00\u500B\u5275\u610F\u5DE5\u574A\u9805\u76EE\u5E76\u5C07\u5176 ID \u5B58\u5132\u5728 _PARAM0_ \u4E2D","Workshop":"\u5275\u610F\u5DE5\u574A","Update a Workshop item":"\u66F4\u65B0\u5275\u610F\u5DE5\u574A\u9805\u76EE","Releases an update to a Workshop item owned by the player. If you leave a field empty, it will be kept unmodified as it was before the update.":"\u767C\u5E03\u73A9\u5BB6\u64C1\u6709\u7684\u5275\u610F\u5DE5\u574A\u9805\u76EE\u7684\u66F4\u65B0\u3002\u5982\u679C\u60A8\u5C07\u67D0\u500B\u5B57\u6BB5\u7559\u7A7A\uFF0C\u5B83\u5C07\u4FDD\u6301\u66F4\u65B0\u524D\u7684\u72C0\u614B\u4E0D\u8B8A\u3002","Update the Workshop item _PARAM0_ with itemId title description changeNote previewPath contentPath tags visibility":"\u4F7F\u7528 itemId \u6A19\u984C\u63CF\u8FF0\u66F4\u6539\u5275\u610F\u5DE5\u574A\u9805\u76EE _PARAM0_ \u66F4\u6539\u6CE8\u91CB\u9810\u89BD\u8DEF\u5F91\u5167\u5BB9\u8DEF\u5F91\u6A19\u7C3D\u53EF\u898B\u6027","Workshop Item ID":"\u5275\u610F\u5DE5\u574A\u9805\u76EE ID","Title":"\u6A19\u984C","Changelog":"\u66F4\u65B0\u65E5\u5FD7","Path to the preview image file":"\u9810\u89BD\u5716\u50CF\u6587\u4EF6\u7684\u8DEF\u5F91","Path to the file with the item's file":"\u5305\u542B\u9805\u76EE\u6587\u4EF6\u7684\u6587\u4EF6\u8DEF\u5F91","Tags":"\u6A19\u7C3D","Subscribe to a Workshop item":"\u8A02\u95B1\u5275\u610F\u5DE5\u574A\u9805\u76EE","Makes the player subscribe to a workshop item. This will cause it to be downloaded and installed ASAP.":"\u4F7F\u73A9\u5BB6\u8A02\u95B1\u5275\u610F\u5DE5\u574A\u9805\u76EE\u3002\u9019\u5C07\u5C0E\u81F4\u5B83\u88AB\u76E1\u5FEB\u4E0B\u8F09\u5E76\u5B89\u88DD\u3002","Subscribe to Workshop item _PARAM0_ (store result in _PARAM1_)":"\u8A02\u95B1\u5275\u610F\u5DE5\u574A\u9805\u76EE _PARAM0_ (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM1_ \u4E2D)","Unsubscribe to a Workshop item":"\u53D6\u6D88\u8A02\u95B1\u5275\u610F\u5DE5\u574A\u9805\u76EE","Makes the player unsubscribe to a workshop item. This will cause it to removed after quitting the game.":"\u4F7F\u73A9\u5BB6\u53D6\u6D88\u8A02\u95B1\u5275\u610F\u5DE5\u574A\u9805\u76EE\u3002\u9019\u5C07\u5C0E\u81F4\u5B83\u5728\u9000\u51FA\u904A\u6232\u540E\u88AB\u522A\u9664\u3002","Unsubscribe to Workshop item _PARAM0_ (store result in _PARAM1_)":"\u53D6\u6D88\u8A02\u95B1\u5275\u610F\u5DE5\u574A\u9805\u76EE _PARAM0_ (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM1_ \u4E2D)","Download a Workshop item":"\u4E0B\u8F09\u5275\u610F\u5DE5\u574A\u9805\u76EE","Initiates the download of a Workshop item now.":"\u7ACB\u5373\u958B\u59CB\u4E0B\u8F09\u5275\u610F\u5DE5\u574A\u9805\u76EE\u3002","Start downloading workshop item _PARAM0_ now, pause other downloads: _PARAM1_":"\u7ACB\u5373\u958B\u59CB\u4E0B\u8F09\u5275\u610F\u5DE5\u574A\u9805\u76EE _PARAM0_ \uFF0C\u66AB\u505C\u5176\u4ED6\u4E0B\u8F09: _PARAM1_","Check workshop item state":"\u6AA2\u67E5\u5275\u610F\u5DE5\u574A\u9805\u76EE\u72C0\u614B","Check whether a state flag is set for a Workshop item.":"\u6AA2\u67E5\u662F\u5426\u70BA\u5275\u610F\u5DE5\u574A\u9805\u76EE\u8A2D\u5B9A\u4E86\u72C0\u614B\u6A19\u5FD7\u3002","Flag _PARAM1_ is set on Workshop item _PARAM0_":"\u5275\u610F\u5DE5\u574A\u9805\u76EE _PARAM0_ \u4E0A\u8A2D\u5B9A\u4E86\u6A19\u5FD7 _PARAM1_","Workshop item installation location":"\u5275\u610F\u5DE5\u574A\u9805\u76EE\u5B89\u88DD\u4F4D\u7F6E","The file path to the contents file of an installed workshop item.":"\u5DF2\u5B89\u88DD\u5275\u610F\u5DE5\u574A\u9805\u76EE\u7684\u5167\u5BB9\u6587\u4EF6\u7684\u6587\u4EF6\u8DEF\u5F91\u3002","Workshop item size":"\u5275\u610F\u5DE5\u574A\u9805\u76EE\u5927\u5C0F","The size on disk taken by the contents file of an installed workshop item.":"\u5DF2\u5B89\u88DD\u7684\u5275\u610F\u5DE5\u574A\u9805\u76EE\u7684\u5167\u5BB9\u6587\u4EF6\u5728\u78C1\u76E4\u4E0A\u5360\u7528\u7684\u5927\u5C0F\u3002","Workshop item installation time":"\u5275\u610F\u5DE5\u574A\u9805\u76EE\u5B89\u88DD\u6642\u9593","The timestamp of the last time the contents file of an installed workshop item was updated.":"\u4E0A\u6B21\u66F4\u65B0\u5DF2\u5B89\u88DD\u5275\u610F\u5DE5\u574A\u9805\u76EE\u7684\u5167\u5BB9\u6587\u4EF6\u7684\u6642\u9593\u6233\u3002","Workshop item download progress":"\u5275\u610F\u5DE5\u574A\u9805\u76EE\u4E0B\u8F09\u9032\u5EA6","The amount of data that has been downloaded by Steam for a currrently downloading item so far.":"\u76EE\u524D\u70BA\u6B62 Steam \u5DF2\u4E0B\u8F09\u7684\u7576\u524D\u4E0B\u8F09\u9805\u76EE\u7684\u8CC7\u6599\u91CF\u3002","Workshop \u276F Download":"\u5275\u610F\u5DE5\u574A \u276F \u4E0B\u8F09","Workshop item download total":"\u5275\u610F\u5DE5\u574A\u9805\u76EE\u4E0B\u8F09\u7E3D\u6578","The amount of data that needs to be downloaded in total by Steam for a currrently downloading item.":"\u5C0D\u4E8E\u7576\u524D\u4E0B\u8F09\u7684\u9805\u76EE\uFF0CSteam \u7E3D\u5171\u9700\u8981\u4E0B\u8F09\u7684\u8CC7\u6599\u91CF\u3002","BBCode Text Object":"BBCode \u6587\u672C\u7269\u4EF6","BBCode text":"BBCode \u6587\u672C","Base color":"\u57FA\u672C\u984F\u8272","Base size":"\u57FA\u672C\u5927\u5C0F","Base alignment":" v","Visible on start":"\u5F9E\u958B\u59CB\u6642\u53EF\u898B","BBText":"BBText","Formatted text allowing to mix styles using BBCode markup.":"\u683C\u5F0F\u5316\u7684\u6587\u672C\u5141\u8A31\u4F7F\u7528 BBCode \u6A19\u8A18\u6DF7\u5408\u6A23\u5F0F\u3002","Compare the value of the BBCode text.":"\u6BD4\u8F03BBCode\u6587\u672C\u7684\u503C\u3002","the BBCode text":"BBCode \u6587\u672C","Set BBCode text":"\u8A2D\u5B9A BBCode \u6587\u672C","Get BBCode text":"\u7372\u53D6 BBCode \u6587\u672C","Color (R;G;B)":"\u984F\u8272 (R;G;B)","Set base color":"\u8A2D\u5B9A\u57FA\u672C\u984F\u8272","Set base color of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u57FA\u672C\u984F\u8272\u8A2D\u5B9A\u70BA _PARAM1_","Compare the value of the base opacity of the text.":"\u6BD4\u8F03\u6587\u672C\u57FA\u790E\u4E0D\u900F\u660E\u5EA6\u7684\u503C\u3002","the base opacity":"\u57FA\u790E\u4E0D\u900F\u660E\u5EA6","Set base opacity":"\u8A2D\u5B9A\u57FA\u790E\u4E0D\u900F\u660E\u5EA6","Get the base opacity":"\u7372\u53D6\u57FA\u790E\u4E0D\u900F\u660E\u5EA6","Compare the base font size of the text.":"\u6BD4\u8F03\u6587\u672C\u7684\u57FA\u672C\u5B57\u9AD4\u5927\u5C0F\u3002","the base font size":"\u57FA\u672C\u5B57\u9AD4\u5927\u5C0F","Set base font size":"\u8A2D\u5B9A\u57FA\u672C\u5B57\u9AD4\u5927\u5C0F","Get the base font size":"\u7372\u53D6\u57FA\u672C\u5B57\u9AD4\u5927\u5C0F","Font family":"\u5B57\u9AD4\u7CFB\u5217","Compare the value of font family":"\u6BD4\u8F03\u5B57\u9AD4\u7D44\u7684\u503C","the base font family":"\u57FA\u672C\u5B57\u9AD4\u7CFB\u5217","Set font family":"\u8A2D\u5B9A\u5B57\u9AD4\u7CFB\u5217","Get the base font family":"\u7372\u53D6\u57FA\u672C\u5B57\u9AD4\u7CFB\u5217","Check the current text alignment.":"\u6AA2\u67E5\u7576\u524D\u6587\u672C\u7684\u5C0D\u9F4A\u65B9\u5F0F\u3002","The text alignment of _PARAM0_ is _PARAM1_":"_PARAM0_ \u7684\u6587\u672C\u5C0D\u9F4A\u662F _PARAM1_","Change the alignment of the text.":"\u66F4\u6539\u6587\u672C\u7684\u5C0D\u9F4A\u65B9\u5F0F\u3002","text alignment":"\u6587\u672C\u5C0D\u9F4A","Get the text alignment":"\u7372\u53D6\u6587\u672C\u5C0D\u9F4A","Compare the width, in pixels, after which the text is wrapped on next line.":"\u6BD4\u8F03\u5BEC\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\uFF0C\u7136\u540E\u5C07\u6587\u672C\u63DB\u884C\u5230\u4E0B\u4E00\u884C\u3002","Change the width, in pixels, after which the text is wrapped on next line.":"\u66F4\u6539\u5BEC\u5EA6\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09\uFF0C\u7136\u540E\u5C07\u6587\u672C\u63DB\u884C\u5230\u4E0B\u4E00\u884C\u3002","Get the wrapping width":"\u7372\u53D6\u5305\u88DD\u5BEC\u5EA6","Screenshot":"\u5C4F\u5E55\u5FEB\u7167","Take screenshot":"\u622A\u5716\u81F3PNG","Take a screenshot of the game, and save it to a png file (supported only when running on Windows/Linux/macOS).":"\u62CD\u651D\u904A\u6232\u7684\u5C4F\u5E55\u622A\u5716\u5E76\u5C07\u5176\u4FDD\u5B58\u5230 png \u6587\u4EF6(\u50C5\u652F\u6301 Windows/Linux/macOS \u5E73\u81FA)\u3002","Take a screenshot and save at _PARAM1_":"\u622A\u53D6\u5C4F\u5E55\u5E76\u5728 _PARAM1_ \u4FDD\u5B58","AdMob":"AdMob","Allow to display AdMob banners, app open, interstitials, rewarded interstitials and rewarded video ads.":"\u5141\u8A31\u986F\u793A AdMob \u6A6B\u5E45\u5EE3\u544A\u3001\u61C9\u7528\u6253\u958B\u5EE3\u544A\u3001\u63D2\u9801\u5F0F\u5EE3\u544A\u3001\u63D2\u9801\u5F0F\u734E\u52F5\u5EE3\u544A\u548C\u8996\u983B\u5EE3\u544A\u3002","AdMob Android App ID":"AdMob \u5B89\u5353\u61C9\u7528 ID","AdMob iOS App ID":"AdMob iOS \u61C9\u7528 ID","Enable test mode":"\u555F\u7528\u6E2C\u8A66\u6A21\u5F0F","Activate or deactivate the test mode (\"development\" mode).\nWhen activated, tests ads will be served instead of real ones.\n\nIt is important to enable test ads during development so that you can click on them without charging advertisers. If you click on too many ads without being in test mode, you risk your account being flagged for invalid activity.":"\u6FC0\u6D3B\u6216\u505C\u7528\u6E2C\u8A66\u6A21\u5F0F (\"\u958B\u767C\" \u6A21\u5F0F)\u3002\n\u6FC0\u6D3B\u540E\uFF0C\u5C07\u63D0\u4F9B\u6E2C\u8A66\u5EE3\u544A\u800C\u4E0D\u662F\u5BE6\u969B\u5EE3\u544A\u3002\n\n\u5728\u958B\u767C\u904E\u7A0B\u4E2D\u555F\u7528\u6E2C\u8A66\u5EE3\u544A\u975E\u5E38\u91CD\u8981\uFF0C\u9019\u6A23\u60A8\u5C31\u53EF\u4EE5\u5728\u6C92\u6709\u6536\u8CBB\u5EE3\u544A\u5546\u7684\u60C5\u6CC1\u4E0B\u9EDE\u64CA\u5B83\u5011\u3002 \u5982\u679C\u60A8\u9EDE\u64CA\u904E\u591A\u7684\u5EE3\u544A\u800C\u4E0D\u8655\u4E8E\u6E2C\u8A66\u6A21\u5F0F\uFF0C\u60A8\u5C31\u6709\u53EF\u80FD\u5C07\u60A8\u7684\u5E33\u6236\u6A19\u8A18\u70BA\u7121\u6548\u7684\u6D3B\u52D5\u3002","Enable test mode (serving test ads, for development): _PARAM0_":"\u555F\u7528\u6E2C\u8A66\u6A21\u5F0F(\u6295\u653E\u6E2C\u8A66\u5EE3\u544A\uFF0C\u4EE5\u4F9B\u958B\u767C)\uFF1A_PARAM0_","Enable test mode?":"\u555F\u7528\u6E2C\u8A66\u6A21\u5F0F\uFF1F","Prevent AdMob auto initialization":"\u9632\u6B62 AdMob \u81EA\u52D5\u521D\u59CB\u5316","Prevent AdMob from initializing automatically. You will need to call \"Initialize AdMob\" action manually.\nThis is useful if you want to control when the consent dialog will be shown (for example, after the user has accepted your game terms).":"\u9632\u6B62 AdMob \u81EA\u52D5\u521D\u59CB\u5316\u3002\u60A8\u9700\u8981\u624B\u52D5\u547C\u53EB \"\u521D\u59CB\u5316 AdMob\" \u64CD\u4F5C\u3002\n\u5982\u679C\u60A8\u5E0C\u671B\u63A7\u5236\u540C\u610F\u5C0D\u8A71\u6846\u986F\u793A\u7684\u6642\u6A5F\uFF08\u4F8B\u5982\uFF0C\u5728\u7528\u6236\u63A5\u53D7\u60A8\u7684\u904A\u6232\u689D\u6B3E\u5F8C\uFF09\uFF0C\u9019\u6703\u5F88\u6709\u7528\u3002","Initialize AdMob manually":"\u624B\u52D5\u521D\u59CB\u5316 AdMob","Initialize AdMob manually. This will trigger the consent dialog if needed, and then load the ads.\nUse this action if you have disabled the auto init and want to control when the consent dialog will be shown.":"\u624B\u52D5\u521D\u59CB\u5316 AdMob\u3002\u9019\u5C07\u5728\u9700\u8981\u6642\u89F8\u767C\u540C\u610F\u5C0D\u8A71\u6846\uFF0C\u7136\u5F8C\u52A0\u8F09\u5EE3\u544A\u3002\n\u5982\u679C\u60A8\u5DF2\u7981\u7528\u81EA\u52D5\u521D\u59CB\u5316\u4E26\u5E0C\u671B\u63A7\u5236\u4F55\u6642\u986F\u793A\u540C\u610F\u5C0D\u8A71\u6846\uFF0C\u8ACB\u4F7F\u7528\u6B64\u64CD\u4F5C\u3002","Initialize AdMob":"\u521D\u59CB\u5316 AdMob","AdMob initializing":"AdMob \u6B63\u5728\u521D\u59CB\u5316","Check if AdMob is initializing.":"\u6AA2\u67E5 AdMob \u662F\u5426\u6B63\u5728\u521D\u59CB\u5316\u3002","AdMob is initializing":"AdMob \u6B63\u5728\u521D\u59CB\u5316","AdMob initialized":"AdMob \u5DF2\u521D\u59CB\u5316","Check if AdMob has been initialized.":"\u6AA2\u67E5 AdMob \u662F\u5426\u5DF2\u521D\u59CB\u5316\u3002","AdMob has been initialized":"AdMob \u5DF2\u521D\u59CB\u5316","App open loading":"\u61C9\u7528\u7A0B\u5E8F\u6253\u958B\u52A0\u8F09","Check if an app open is currently loading.":"\u6AA2\u67E5\u6253\u958B\u7684\u61C9\u7528\u7A0B\u5E8F\u7576\u524D\u662F\u5426\u6B63\u5728\u52A0\u8F09\u3002","App open is loading":"\u6253\u958B\u7684\u61C9\u7528\u7A0B\u5E8F\u6B63\u5728\u52A0\u8F09","App open ready":"\u61C9\u7528\u7A0B\u5E8F\u6253\u958B\u5C31\u7DD2","Check if an app open is ready to be displayed.":"\u6AA2\u67E5\u6253\u958B\u7684\u61C9\u7528\u7A0B\u5E8F\u662F\u5426\u5DF2\u6E96\u5099\u597D\u986F\u793A\u3002","App open is ready":"\u61C9\u7528\u7A0B\u5E8F\u6253\u958B\u6E96\u5099\u5C31\u7DD2","App open showing":"\u61C9\u7528\u7A0B\u5E8F\u6253\u958B\u986F\u793A","Check if there is an app open being displayed.":"\u6AA2\u67E5\u662F\u5426\u6709\u6253\u958B\u7684\u61C9\u7528\u7A0B\u5E8F\u6B63\u5728\u986F\u793A\u3002","App open is showing":"\u61C9\u7528\u7A0B\u5E8F\u6253\u958B\u986F\u793A","App open errored":"\u61C9\u7528\u7A0B\u5E8F\u6253\u958B\u932F\u8AA4","Check if there was an error while loading the app open.":"\u6AA2\u67E5\u6253\u958B\u61C9\u7528\u7A0B\u5E8F\u52A0\u8F09\u6642\u662F\u5426\u6709\u932F\u8AA4\u3002","App open had an error":"\u61C9\u7528\u7A0B\u5E8F\u6253\u958B\u6642\u51FA\u932F","Load app open":"\u52A0\u8F09\u61C9\u7528\u7A0B\u5E8F\u6253\u958B","Start loading an app open (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test app open will be displayed.":"\u958B\u59CB\u52A0\u8F09\u4E00\u500B\u6253\u958B\u7684\u61C9\u7528\u7A0B\u5E8F(\u7576\u52A0\u8F09\u5B8C\u6210\u6642\u53EF\u4EE5\u81EA\u52D5\u986F\u793A)\u3002\u5982\u679C\u8A2D\u5B9A\u4E86\u6E2C\u8A66\u6A21\u5F0F\uFF0C\u5C07\u986F\u793A\u4E00\u500B\u6253\u958B\u7684\u6E2C\u8A66\u61C9\u7528\u7A0B\u5E8F\u3002","Load app open with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (landscape: _PARAM2_, display automatically when loaded: _PARAM3_)":"\u52A0\u8F09\u61C9\u7528\u6253\u958B\uFF0CAndroid \u5EE3\u544A\u55AE\u5143 ID\uFF1A_PARAM0_\uFF0CiOS \u5EE3\u544A\u55AE\u5143 ID\uFF1A_PARAM1_ (\u6A6B\u5411\uFF1A_PARAM2_\uFF0C\u52A0\u8F09\u6642\u81EA\u52D5\u986F\u793A\uFF1A_PARAM3_ )","Android app open ID":"Android \u61C9\u7528\u7A0B\u5E8F\u6253\u958B ID","iOS app open ID":"iOS \u61C9\u7528\u7A0B\u5E8F\u6253\u958B ID","Display in landscape? (portrait otherwise)":"\u6A6B\u5411\u986F\u793A\uFF1F(\u5426\u5247\u70BA\u7E31\u5411)","Displayed automatically when loading is finished?":"\u52A0\u8F09\u5B8C\u6210\u6642\u81EA\u52D5\u986F\u793A\uFF1F","Show app open":"\u986F\u793A\u61C9\u7528\u7A0B\u5E8F\u5DF2\u6253\u958B","Show the app open that was loaded. Will work only when the app open is fully loaded.":"\u986F\u793A\u5DF2\u52A0\u8F09\u7684\u6253\u958B\u7684\u61C9\u7528\u7A0B\u5E8F\u3002\u53EA\u6709\u7576\u61C9\u7528\u7A0B\u5E8F\u6253\u958B\u5B8C\u5168\u52A0\u8F09\u6642\u624D\u6703\u5DE5\u4F5C\u3002","Show the loaded app open":"\u986F\u793A\u52A0\u8F09\u7684\u61C9\u7528\u7A0B\u5E8F\u6253\u958B","Banner showing":"\u6A6B\u5E45\u986F\u793A","Check if there is a banner being displayed.":"\u6AA2\u67E5\u662F\u5426\u6709\u6A6B\u5E45\u6B63\u5728\u986F\u793A\u3002","Banner is showing":"\u6A6B\u5E45\u6B63\u5728\u986F\u793A","Banner configured":"\u6A6B\u5E45\u5DF2\u914D\u7F6E","Check if there is a banner correctly configured ready to be shown.":"\u6AA2\u67E5\u662F\u5426\u6709\u6B63\u78BA\u914D\u7F6E\u7684\u6A6B\u5E45\u53EF\u4EE5\u986F\u793A\u3002","Banner is configured":"\u6A6B\u5E45\u5DF2\u914D\u7F6E","Banner loaded":"\u6A6B\u5E45\u5DF2\u52A0\u8F09","Check if there is a banner correctly loaded ready to be shown.":"\u6AA2\u67E5\u662F\u5426\u5DF2\u6B63\u78BA\u52A0\u8F09\u6E96\u5099\u986F\u793A\u7684\u6A6B\u5E45\u3002","Banner is loaded":"\u6A6B\u5E45\u5DF2\u52A0\u8F09","Banner had an error":"\u6A6B\u5E45\u5EE3\u544A\u51FA\u73FE\u932F\u8AA4","Check if there was a error while displaying a banner.":"\u6AA2\u67E5\u986F\u793A\u6A6B\u5E45\u5EE3\u544A\u6642\u662F\u5426\u6709\u932F\u8AA4\u3002","Banner ad had an error":"\u6A6B\u5E45\u5EE3\u544A\u51FA\u73FE\u932F\u8AA4","Configure the banner":"\u914D\u7F6E\u6A6B\u5E45","Configure a banner, which can then be displayed.\nIf a banner is already displayed, it will be removed\nIf test mode is set, a test banner will be displayed.\n\nOnce a banner is positioned (at the top or bottom of the game), it can't be moved anymore.":"\u914D\u7F6E\u6A6B\u5E45\uFF0C\u7136\u540E\u53EF\u4EE5\u986F\u793A\u3002\n\u5982\u679C\u6A6B\u5E45\u5DF2\u7D93\u986F\u793A\uFF0C\u5B83\u5C07\u88AB\u522A\u9664\n\u5982\u679C\u8A2D\u5B9A\u4E86\u6E2C\u8A66\u6A21\u5F0F\uFF0C\u5C07\u986F\u793A\u6E2C\u8A66\u6A6B\u5E45\u3002\n\n\u4E00\u65E6\u6A6B\u5E45\u88AB\u5B9A\u4F4D(\u5728\u9802\u90E8\u6216\u5E95\u90E8\u904A\u6232)\uFF0C\u5B83\u4E0D\u80FD\u518D\u79FB\u52D5\u4E86\u3002","Configure the banner with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_, display at top: _PARAM2_":"\u70BA\u6A6B\u5E45\u914D\u7F6EAndroid\u5EE3\u544A\u55AE\u5143ID\uFF1A_PARAM0_\uFF0CiOS\u5EE3\u544A\u55AE\u5143ID\uFF1A_PARAM1_\uFF0C\u9802\u90E8\u986F\u793A\uFF1A_PARAM2_","Android banner ID":"\u5B89\u5353\u6A6B\u5E45ID","iOS banner ID":"iOS\u6A6B\u5E45ID","Display at top? (bottom otherwise)":"\u7F6E\u9802\u986F\u793A\uFF1F\uFF08\u5426\u5247\u7F6E\u5E95\uFF09","Show banner":"\u986F\u793A\u6A6B\u5E45\u5EE3\u544A","Show the banner that was previously set up.":"\u986F\u793A\u5148\u524D\u8A2D\u5B9A\u7684\u6A6B\u5E45\u3002","Hide banner":"\u96B1\u85CF\u6A6B\u5E45\u5EE3\u544A","Hide the banner. You can show it again with the corresponding action.":"\u96B1\u85CF\u6A6B\u5E45\u3002\u60A8\u53EF\u4EE5\u901A\u904E\u76F8\u61C9\u7684\u64CD\u4F5C\u518D\u6B21\u986F\u793A\u5B83\u3002","Interstitial loading":"\u63D2\u9801\u5F0F\u5EE3\u544A","Check if an interstitial is currently loading.":"\u6AA2\u67E5\u662F\u5426\u6B63\u5728\u52A0\u8F09\u63D2\u9801\u5F0F\u5EE3\u544A\u3002","Interstitial is loading":"\u63D2\u9801\u5F0F\u5EE3\u544A\u6B63\u5728\u52A0\u8F09","Interstitial ready":"\u63D2\u9801\u5F0F\u5EE3\u544A\u5C31\u7DD2","Check if an interstitial is ready to be displayed.":"\u6AA2\u67E5\u662F\u5426\u53EF\u4EE5\u986F\u793A\u63D2\u9801\u5F0F\u5EE3\u544A\u3002","Interstitial is ready":"\u63D2\u9801\u5F0F\u5EE3\u544A\u5DF2\u6E96\u5099\u5C31\u7DD2","Interstitial showing":"\u63D2\u9801\u5F0F\u5EE3\u544A","Check if there is an interstitial being displayed.":"\u6AA2\u67E5\u662F\u5426\u986F\u793A\u63D2\u9801\u5F0F\u5EE3\u544A\u3002","Interstitial is showing":"\u63D2\u9801\u5F0F\u5EE3\u544A\u986F\u793A","Interstitial had an error":"\u63D2\u9801\u5F0F\u5EE3\u544A\u6709\u932F\u8AA4","Check if there was a error while loading the interstitial.":"\u52A0\u8F09\u63D2\u9801\u5F0F\u5EE3\u544A\u6642\u6AA2\u67E5\u662F\u5426\u6709\u932F\u8AA4\u3002","Interstitial ad had an error":"\u63D2\u9801\u5F0F\u5EE3\u544A\u51FA\u932F","Load interstitial":"\u52A0\u8F09\u63D2\u9801\u5F0F\u5EE3\u544A","Start loading an interstitial (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test interstitial will be displayed.":"\u958B\u59CB\u52A0\u8F09\u63D2\u9801\u5F0F\u5EE3\u544A(\u52A0\u8F09\u5B8C\u6210\u540E\u6703\u81EA\u52D5\u986F\u793A)\u3002\n\u5982\u679C\u8A2D\u5B9A\u4E86\u6E2C\u8A66\u6A21\u5F0F\uFF0C\u5247\u6703\u986F\u793A\u6E2C\u8A66\u63D2\u9801\u5F0F\u5EE3\u544A\u3002","Load interstitial with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"\u4F7F\u7528Android\u5EE3\u544A\u55AE\u5143ID\uFF1A_PARAM0_\uFF0CiOS\u5EE3\u544A\u55AE\u5143ID\uFF1A_PARAM1_\u52A0\u8F09\u975E\u9801\u5167\u5EE3\u544A(\u52A0\u8F09\u540E\u81EA\u52D5\u986F\u793A\uFF1A_PARAM2_)","Android interstitial ID":"Android\u63D2\u9801\u5F0F\u5EE3\u544AID","iOS interstitial ID":"iOS\u63D2\u9801\u5F0F\u5EE3\u544AID","Show interstitial":"\u986F\u793A\u63D2\u9801\u5F0F\u5EE3\u544A","Show the interstitial that was loaded. Will work only when the interstitial is fully loaded.":"\u986F\u793A\u5DF2\u52A0\u8F09\u7684\u975E\u9801\u5167\u5EE3\u544A\u3002\u50C5\u5728\u63D2\u9801\u5F0F\u5EE3\u544A\u6EFF\u8F09\u540E\u624D\u80FD\u4F7F\u7528\u3002","Show the loaded interstitial":"\u986F\u793A\u5DF2\u52A0\u8F09\u7684\u975E\u9801\u5167\u5EE3\u544A","Rewarded interstitial loading":"\u734E\u52F5\u63D2\u9801\u5F0F\u52A0\u8F09","Check if a rewarded interstitial is currently loading.":"\u6AA2\u67E5\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u7576\u524D\u662F\u5426\u6B63\u5728\u52A0\u8F09\u3002","Rewarded interstitial is loading":"\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u6B63\u5728\u52A0\u8F09","Rewarded interstitial ready":"\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u5C31\u7DD2","Check if a rewarded interstitial is ready to be displayed.":"\u6AA2\u67E5\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u662F\u5426\u5DF2\u6E96\u5099\u597D\u986F\u793A\u3002","Rewarded interstitial is ready":"\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u5DF2\u6E96\u5099\u5C31\u7DD2","Rewarded interstitial showing":"\u734E\u52F5\u63D2\u9801\u5F0F\u5C55\u793A","Check if there is a rewarded interstitial being displayed.":"\u6AA2\u67E5\u662F\u5426\u986F\u793A\u4E86\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u3002","Rewarded interstitial is showing":"\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u6B63\u5728\u5C55\u793A","Rewarded interstitial had an error":"\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u6709\u932F\u8AA4","Check if there was a error while loading the rewarded interstitial.":"\u6AA2\u67E5\u52A0\u8F09\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u6642\u662F\u5426\u6709\u932F\u8AA4\u3002","Rewarded Interstitial had an error":"\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u6709\u932F\u8AA4","Rewarded Interstitial reward received":"\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u6536\u5230\u7684\u734E\u52F5","Check if the reward of the rewarded interstitial was given to the user.\nYou can mark this reward as cleared, so that the condition will be false and you can show later another rewarded interstitial.":"\u6AA2\u67E5\u662F\u5426\u5DF2\u5C07\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u7684\u734E\u52F5\u63D0\u4F9B\u7D66\u7528\u6236\u3002\n\u60A8\u53EF\u4EE5\u5C07\u6B64\u734E\u52F5\u6A19\u8A18\u70BA\u5DF2\u6E05\u9664\uFF0C\u9019\u6A23\u689D\u4EF6\u5C07\u70BA false\uFF0C\u7A0D\u540E\u60A8\u53EF\u4EE5\u986F\u793A\u53E6\u4E00\u500B\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u3002","User got the reward of the rewarded interstitial (and clear this reward: _PARAM0_)":"\u7528\u6236\u7372\u5F97\u4E86\u63D2\u5C4F\u734E\u52F5\u7684\u734E\u52F5 (\u5E76\u6E05\u9664\u6B64\u734E\u52F5\uFF1A_PARAM0_)","Clear the reward (needed to show another rewarded interstitial)":"\u6E05\u9664\u734E\u52F5 (\u9700\u8981\u986F\u793A\u53E6\u4E00\u500B\u734E\u52F5\u63D2\u9801)","Load rewarded interstitial":"\u52A0\u8F09\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A","Start loading a rewarded interstitial (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test rewarded interstitial will be displayed.\nThis is similar to a rewarded video, but can be displayed at any time, and the user can close it.":"\u958B\u59CB\u52A0\u8F09\u734E\u52F5\u63D2\u5C4F (\u52A0\u8F09\u5B8C\u6210\u540E\u53EF\u4EE5\u81EA\u52D5\u986F\u793A)\u3002\n\u5982\u679C\u8A2D\u5B9A\u4E86\u6E2C\u8A66\u6A21\u5F0F\uFF0C\u5C07\u986F\u793A\u6E2C\u8A66\u734E\u52F5\u63D2\u5C4F\u3002\n\u9019\u985E\u4F3C\u4E8E\u734E\u52F5\u8996\u983B\uFF0C\u4F46\u53EF\u4EE5\u96A8\u6642\u986F\u793A\uFF0C\u5E76\u4E14\u7528\u6236\u53EF\u4EE5\u95DC\u9589\u5B83\u3002","Load rewarded interstitial with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"\u4F7F\u7528 Android \u5EE3\u544A\u55AE\u5143 ID\uFF1A_PARAM0_\u3001iOS \u5EE3\u544A\u55AE\u5143 ID\uFF1A_PARAM1_ \u52A0\u8F09\u63D2\u5C4F\u734E\u52F5 (\u52A0\u8F09\u6642\u81EA\u52D5\u986F\u793A\uFF1A_PARAM2_)","Android rewarded interstitial ID":"Android \u734E\u52F5\u63D2\u9801\u5F0F ID","Show rewarded interstitial":"\u986F\u793A\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A","Show the rewarded interstitial that was loaded. Will work only when the rewarded interstitial is fully loaded.":"\u986F\u793A\u5DF2\u52A0\u8F09\u7684\u63D2\u9801\u5F0F\u734E\u52F5\u3002\u50C5\u7576\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A\u5DF2\u6EFF\u8F09\u6642\u624D\u6703\u5DE5\u4F5C\u3002","Show the loaded rewarded interstitial":"\u986F\u793A\u5DF2\u52A0\u8F09\u7684\u734E\u52F5\u63D2\u9801\u5F0F\u5EE3\u544A","Mark the reward of the rewarded interstitial as claimed":"\u5C07\u734E\u52F5\u63D2\u9801\u7684\u734E\u52F5\u6A19\u8A18\u70BA\u5DF2\u9818\u53D6","Mark the rewarded interstitial reward as claimed. Useful if you used the condition to check if the reward was given to the user without clearing the reward.":"\u5C07\u734E\u52F5\u7684\u63D2\u9801\u5F0F\u5EE3\u544A\u734E\u52F5\u6A19\u8A18\u70BA\u5DF2\u8072\u660E\u3002\u5982\u679C\u60A8\u4F7F\u7528\u689D\u4EF6\u6AA2\u67E5\u734E\u52F5\u662F\u5426\u5DF2\u63D0\u4F9B\u7D66\u7528\u6236\u800C\u4E0D\u6E05\u9664\u734E\u52F5\uFF0C\u5247\u5F88\u6709\u7528\u3002","Rewarded video loading":"\u734E\u52F5\u8996\u983B\u52A0\u8F09","Check if a rewarded video is currently loading.":"\u6AA2\u67E5\u734E\u52F5\u8996\u983B\u7576\u524D\u662F\u5426\u6B63\u5728\u52A0\u8F09\u3002","Rewarded video is loading":"\u734E\u52F5\u8996\u983B\u6B63\u5728\u52A0\u8F09","Rewarded video ready":"\u734E\u52F5\u8996\u983B\u6E96\u5099\u5C31\u7DD2","Check if a rewarded video is ready to be displayed.":"\u6AA2\u67E5\u734E\u52F5\u8996\u983B\u662F\u5426\u5DF2\u6E96\u5099\u597D\u986F\u793A\u3002","Rewarded video is ready":"\u734E\u52F5\u8996\u983B\u5DF2\u6E96\u5099\u5C31\u7DD2","Rewarded video showing":"\u734E\u52F5\u8996\u983B\u5C55\u793A","Check if there is a rewarded video being displayed.":"\u6AA2\u67E5\u662F\u5426\u6709\u734E\u52F5\u8996\u983B\u6B63\u5728\u986F\u793A\u3002","Rewarded video is showing":"\u734E\u52F5\u8996\u983B\u6B63\u5728\u986F\u793A","Rewarded video had an error":"\u734E\u52F5\u8996\u983B\u6709\u932F\u8AA4","Check if there was a error while loading the rewarded video.":"\u52A0\u8F09\u734E\u52F5\u8996\u983B\u6642\uFF0C\u6AA2\u67E5\u662F\u5426\u6709\u932F\u8AA4\u3002","Rewarded video ad had an error":"\u734E\u52F5\u8996\u983B\u5EE3\u544A\u51FA\u932F","Rewarded Video reward received":"\u5DF2\u6536\u5230\u734E\u52F5\u8996\u983B\u734E\u52F5","Check if the reward of the rewarded video was given to the user.\nYou can mark this reward as cleared, so that the condition will be false and you can show later another rewarded video.":"\u6AA2\u67E5\u734E\u52F5\u8996\u983B\u7684\u734E\u52F5\u662F\u5426\u7D66\u4E86\u7528\u6236\u3002\n\u60A8\u53EF\u4EE5\u5C07\u6B64\u734E\u52F5\u6A19\u8A18\u70BA\u5DF2\u6E05\u9664\uFF0C\u9019\u6A23\u689D\u4EF6\u5C07\u70BA false\uFF0C\u7A0D\u540E\u60A8\u53EF\u4EE5\u986F\u793A\u53E6\u4E00\u500B\u734E\u52F5\u8996\u983B\u3002","User got the reward of the rewarded video (and clear this reward: _PARAM0_)":"\u7528\u6236\u7372\u5F97\u734E\u52F5\u8996\u983B\u7684\u734E\u52F5 (\u5E76\u6E05\u9664\u6B64\u734E\u52F5\uFF1A_PARAM0_)","Clear the reward (needed to show another rewarded video)":"\u6E05\u9664\u734E\u52F5 (\u9700\u8981\u5C55\u793A\u53E6\u4E00\u500B\u734E\u52F5\u8996\u983B)","Load rewarded video":"\u52A0\u8F09\u734E\u52F5\u8996\u983B","Start loading a reward video (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test video will be displayed.":"\u958B\u59CB\u52A0\u8F09\u734E\u52F5\u8996\u983B(\u7576\u52A0\u8F09\u5B8C\u6210\u6642\u53EF\u4EE5\u81EA\u52D5\u986F\u793A)\u3002\n\u5982\u679C\u8A2D\u5B9A\u6E2C\u8A66\u6A21\u5F0F\uFF0C\u5C07\u986F\u793A\u6E2C\u8A66\u8996\u983B\u3002","Load reward video with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"\u52A0\u8F09\u5E36\u6709Android\u5EE3\u544A\u55AE\u5143ID _PARAM0_\uFF0CiOS\u5EE3\u544A\u55AE\u5143ID _PARAM1_\u7684\u734E\u52F5\u8996\u983B(\u52A0\u8F09\u540E\u81EA\u52D5\u986F\u793A\uFF1A_PARAM2_)","Android reward video ID":"Android \u734E\u52F5\u8996\u983B ID","iOS reward video ID":"iOS \u734E\u52F5\u8996\u983B ID","Show rewarded video":"\u986F\u793A\u734E\u52F5\u8996\u983B","Show the reward video that was loaded. Will work only when the video is fully loaded.":"\u986F\u793A\u5DF2\u52A0\u8F09\u7684\u734E\u52F5\u8996\u983B\u3002\u50C5\u5728\u8996\u983B\u5B8C\u5168\u52A0\u8F09\u540E\u624D\u80FD\u4F7F\u7528\u3002","Show the loaded reward video":"\u986F\u793A\u5DF2\u52A0\u8F09\u7684\u734E\u52F5\u8996\u983B","Mark the reward of the rewarded video as claimed":"\u5C07\u734E\u52F5\u8996\u983B\u7684\u734E\u52F5\u6A19\u8A18\u70BA\u5DF2\u9818\u53D6","Mark the rewarded video reward as claimed. Useful if you used the condition to check if the reward was given to the user without clearing the reward.":"\u5C07\u734E\u52F5\u8996\u983B\u734E\u52F5\u6A19\u8A18\u70BA\u5DF2\u9818\u53D6\u3002\u5982\u679C\u60A8\u4F7F\u7528\u689D\u4EF6\u6AA2\u67E5\u734E\u52F5\u662F\u5426\u5DF2\u63D0\u4F9B\u7D66\u7528\u6236\u800C\u4E0D\u6E05\u9664\u734E\u52F5\uFF0C\u5247\u5F88\u6709\u7528\u3002","Tilemap file (Tiled or LDtk)":"Tilemap \u6587\u4EF6(Tiled \u6216 LDtk)","This is the file that was saved or exported from Tiled or LDtk.":"\u9019\u662F\u5F9E Tiled \u6216 LDtk \u4FDD\u5B58\u6216\u532F\u51FA\u7684\u6587\u4EF6\u3002","LDtk or Tiled":"LDtk \u6216 Tiled","Tileset JSON file (optional)":"Tileset JSON \u6587\u4EF6(\u53EF\u9078)","Optional: specify this if you've saved the tileset in a different file as the Tiled tilemap.":"\u53EF\u9078\uFF1A\u5982\u679C\u60A8\u5C07 tileset \u4FDD\u5B58\u5728\u4E0D\u540C\u7684\u6587\u4EF6\u4E2D\u4F5C\u70BA Tiled tilemap\uFF0C\u8ACB\u6307\u5B9A\u6B64\u9805\u3002","Tiled only":"\u50C5 Tiled","Atlas image":"\u5716\u96C6\u5716\u50CF","The Atlas image containing the tileset.":"\u5305\u542B tileset \u7684\u5730\u5716\u96C6\u5716\u50CF\u3002","Visible layers":"\u53EF\u898B\u5716\u5C64","All layers":"\u6240\u6709\u5716\u5C64","Only the layer with the specified index":"\u53EA\u6709\u6307\u5B9A\u7D22\u5F15\u7684\u5716\u5C64","Display mode":"\u986F\u793A\u6A21\u5F0F","Layer index to display":"\u8981\u986F\u793A\u7684\u5716\u5C64\u7D22\u5F15","If \"index\" is selected as the display mode, this is the index of the layer to display.":"\u5982\u679C\u9078\u64C7\u201C\u7D22\u5F15\u201D\u4F5C\u70BA\u986F\u793A\u6A21\u5F0F\uFF0C\u5247\u9019\u662F\u8981\u986F\u793A\u7684\u5716\u5C64\u7684\u7D22\u5F15\u3002","Level index to display":"\u8981\u986F\u793A\u7684\u7D1A\u5225\u7D22\u5F15","Select which level to render via its index (LDtk)":"\u9078\u64C7\u8981\u901A\u904E\u5176\u7D22\u5F15\u5448\u73FE\u7684\u7D1A\u5225(LDtk)","Animation speed scale":"\u52D5\u756B\u901F\u5EA6\u6BD4\u503C","Animation FPS":"\u52D5\u756BFPS","External Tilemap (Tiled/LDtk)":"\u5916\u90E8 Tilemap (Tiled/LDtk)","Tilemap imported from external editors like LDtk or Tiled.":"\u5F9E\u5916\u90E8\u7DE8\u8F2F\u5668\uFF08\u5982 LDtk \u6216 Tiled\uFF09\u5C0E\u5165\u7684\u5730\u5716\u74E6\u7247\u3002","Check the tilemap file (Tiled or LDtk) being used.":"\u6AA2\u67E5\u6B63\u5728\u4F7F\u7528\u7684 tilemap \u6587\u4EF6(Tiled \u6216 LDtk)\u3002","The tilemap file of _PARAM0_ is _PARAM1_":"_PARAM0_ \u7684 tilemap \u6587\u4EF6\u662F _PARAM1_","Tile map":"\u74E6\u7247\u5730\u5716","Set the Tiled or LDtk file containing the Tilemap data to display. This is usually the main file exported from Tiled/LDtk.":"\u8A2D\u5B9A\u5305\u542B\u8981\u986F\u793A\u7684 Tilemap \u8CC7\u6599\u7684 Tiled \u6216 LDtk \u6587\u4EF6\u3002\u9019\u901A\u5E38\u662F\u5F9E Tiled/LDtk \u532F\u51FA\u7684\u4E3B\u6587\u4EF6\u3002","Set the tilemap file of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684 tilemap \u6587\u4EF6\u8A2D\u5B9A\u70BA _PARAM1_","Tileset JSON file":"Tileset JSON\u6587\u4EF6","Check the tileset JSON file being used.":"\u6AA2\u67E5\u6B63\u5728\u4F7F\u7528\u7684 pileset JSON \u6587\u4EF6\u3002","The tileset JSON file of _PARAM0_ is _PARAM1_":"_PARAM0_\u7684tileset JSON\u6587\u4EF6\u662F_PARAM1_","Set the JSON file with the tileset data (sometimes that is embedded in the Tilemap, so not needed)":"\u4F7F\u7528tileset\u8CC7\u6599\u8A2D\u5B9A JSON \u6587\u4EF6(\u6709\u6642\u9019\u4E9B\u8CC7\u6599\u5D4C\u5165\u5728 Tilemap \u4E2D\uFF0C\u6240\u4EE5\u4E0D\u9700\u8981)","Set the tileset JSON file of _PARAM0_ to _PARAM1_":"\u5C07_PARAM0_\u7684tileset JSON\u6587\u4EF6\u8A2D\u5B9A\u70BA_PARAM1_","Compare the value of the display mode.":"\u6BD4\u8F03\u986F\u793A\u6A21\u5F0F\u7684\u503C\u3002","The display mode of _PARAM0_ is _PARAM1_":"_PARAM0_ \u7684\u986F\u793A\u6A21\u5F0F\u662F _PARAM1_","Set the display mode":"\u8A2D\u5B9A\u986F\u793A\u6A21\u5F0F","Set the display mode of _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A _PARAM0_ \u7684\u986F\u793A\u6A21\u5F0F\u70BA _PARAM1_","Layer index":"\u5716\u5C64\u7D22\u5F15","Compare the value of the layer index.":"\u6BD4\u8F03\u5716\u5C64\u7D22\u5F15\u7684\u503C\u3002","the layer index":"\u5716\u5C64\u7D22\u5F15","Set the layer index of the Tilemap.":"\u8A2D\u5B9ATilemap\u7684\u5716\u5C64\u7D22\u5F15\u3002","Get the layer index being displayed":"\u7372\u53D6\u6B63\u5728\u986F\u793A\u7684\u5716\u5C64\u7D22\u5F15","Level index":"\u7D1A\u5225\u7D22\u5F15","the level index being displayed.":"\u6B63\u5728\u986F\u793A\u7684\u7D1A\u5225\u7D22\u5F15\u3002","the level index":"\u7D1A\u5225\u7D22\u5F15","Compare the animation speed scale.":"\u6BD4\u8F03\u52D5\u756B\u901F\u5EA6\u6BD4\u4F8B\u3002","the animation speed scale":"\u52D5\u756B\u901F\u5EA6\u6BD4\u4F8B","Speed scale to compare to (1 by default)":"\u8981\u6BD4\u8F03\u7684\u901F\u5EA6\u6BD4\u4F8B(\u9ED8\u8A8D\u70BA 1)","Set the animation speed scale of the Tilemap.":"\u8A2D\u5B9A Tilemap \u7684\u52D5\u756B\u901F\u5EA6\u6BD4\u4F8B\u3002","Speed scale (1 by default)":"\u901F\u5EA6\u6BD4\u4F8B (1 \u9ED8\u8A8D)","Get the Animation speed scale":"\u7372\u53D6\u52D5\u756B\u901F\u5EA6\u6BD4\u4F8B","Animation speed (FPS)":"\u52D5\u756B\u901F\u5EA6 (FPS)","Compare the animation speed.":"\u6BD4\u8F03\u52D5\u756B\u901F\u5EA6\u3002","the animation speed (FPS)":"\u52D5\u756B\u901F\u5EA6 (FPS)","Animation speed to compare to (in frames per second)":"\u8981\u6BD4\u8F03\u7684\u52D5\u756B\u901F\u5EA6(\u4EE5\u6BCF\u79D2\u5E40\u6578\u70BA\u55AE\u4F4D)","Set the animation speed of the Tilemap.":"\u8A2D\u5B9A Tilemap \u7684\u52D5\u756B\u901F\u5EA6\u3002","Animation speed (in frames per second)":"\u52D5\u756B\u901F\u5EA6(\u6BCF\u79D2\u5E40\u6578)","Get the animation speed (in frames per second)":"\u7372\u53D6\u52D5\u756B\u901F\u5EA6(\u4EE5\u6BCF\u79D2\u5E40\u6578\u70BA\u55AE\u4F4D)","Columns":"\u6B04","Number of columns.":"\u6B04\u7684\u6578\u91CF\u3002","Rows":"\u884C","Number of rows.":"\u884C\u7684\u6578\u91CF\u3002","Tile size in pixels.":"\u74E6\u7247\u5927\u5C0F\uFF08\u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D\uFF09","Tile ids with hit box":"\u5E36\u6709\u78B0\u649E\u7BB1\u7684\u74E6\u7247 ID","The list of tile ids with a hit box (separated by commas).":"\u5E36\u6709\u78B0\u649E\u7BB1\u7684\u74E6\u7247 ID \u5217\u8868\uFF08\u7528\u9017\u865F\u5206\u9694\uFF09","Grid-based map built from reusable tiles.":"\u57FA\u65BC\u7DB2\u683C\u7684\u5730\u5716\uFF0C\u5EFA\u7ACB\u5728\u53EF\u91CD\u7528\u7684\u74E6\u7247\u4E4B\u4E0A\u3002","Edit tileset and collisions":"\u7DE8\u8F2F\u5716\u584A\u96C6\u548C\u78B0\u649E","Tileset column count":"\u5716\u584A\u96C6\u5217\u6578","Get the number of columns in the tileset.":"\u7372\u53D6\u5716\u584A\u96C6\u4E2D\u7684\u5217\u6578\u3002","Tileset row count":"\u5716\u584A\u96C6\u884C\u6578","Get the number of rows in the tileset.":"\u7372\u53D6\u5716\u584A\u96C6\u4E2D\u7684\u884C\u6578\u3002","Scene X coordinate of tile":"\u74E6\u7247\u7684\u5834\u666F X \u5750\u6A19","Get the scene X position of the center of the tile.":"\u7372\u53D6\u74E6\u7247\u4E2D\u5FC3\u7684\u5834\u666F X \u4F4D\u7F6E\u3002","Grid X":"\u7DB2\u683C X","Grid Y":"\u7DB2\u683C Y","Scene Y coordinate of tile":"\u74E6\u7247\u7684\u5834\u666F Y \u5750\u6A19","Get the scene Y position of the center of the tile.":"\u7372\u53D6\u74E6\u7247\u4E2D\u5FC3\u7684\u5834\u666F Y \u4F4D\u7F6E\u3002","Tile map grid column coordinate":"\u74E6\u7247\u5730\u5716\u7DB2\u683C\u5217\u5750\u6A19","Get the grid column coordinates in the tile map corresponding to the scene coordinates.":"\u7372\u53D6\u8207\u5834\u666F\u5750\u6A19\u76F8\u5C0D\u61C9\u7684\u74E6\u7247\u5730\u5716\u4E2D\u7684\u7DB2\u683C\u5217\u5750\u6A19\u3002","Position X":"\u4F4D\u7F6E X","Position Y":"\u4F4D\u7F6E Y","Tile map grid row coordinate":"\u74E6\u7247\u5730\u5716\u7DB2\u683C\u884C\u5750\u6A19","Get the grid row coordinates in the tile map corresponding to the scene coordinates.":"\u7372\u53D6\u74E6\u7247\u5730\u5716\u4E2D\u8207\u5834\u666F\u5750\u6A19\u76F8\u5C0D\u61C9\u7684\u7DB2\u683C\u884C\u5750\u6A19\u3002","Tile (at position)":"\u74E6\u7247\uFF08\u5728\u7DB2\u683C\u4E0A\uFF09","the id of the tile at the scene coordinates":"\u5834\u666F\u5750\u6A19\u8655\u7684\u74E6\u7247 ID","the tile id in _PARAM0_ at scene coordinates _PARAM3_ ; _PARAM4_":"\u5834\u666F\u5750\u6A19 _PARAM3_ \u8655 _PARAM0_ \u4E2D\u7684\u5716\u584A id\uFF1B_PARAM4_","Flip tile vertically (at position)":"\u5782\u76F4\u7FFB\u8F49\u74E6\u7247\uFF08\u5728\u4F4D\u7F6E\u4E0A\uFF09","Flip tile vertically at scene coordinates.":"\u5728\u5834\u666F\u5750\u6A19\u8655\u5782\u76F4\u7FFB\u8F49\u74E6\u7247\u3002","Flip tile vertically in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"\u5728\u5834\u666F\u5750\u6A19 _PARAM1_ \u8655\u5782\u76F4\u7FFB\u8F49 _PARAM0_ \u4E2D\u7684\u5716\u584A\uFF1B_PARAM2_\uFF1A_PARAM3_","Flip tile horizontally (at position)":"\u6C34\u5E73\u7FFB\u8F49\u74E6\u7247\uFF08\u5728\u4F4D\u7F6E\u4E0A\uFF09","Flip tile horizontally at scene coordinates.":"\u5728\u5834\u666F\u5750\u6A19\u8655\u6C34\u5E73\u7FFB\u8F49\u74E6\u7247\u3002","Flip tile horizontally in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"\u5728\u5834\u666F\u5750\u6A19 _PARAM1_ \u8655\u6C34\u5E73\u7FFB\u8F49 _PARAM0_ \u4E2D\u7684\u5716\u584A\uFF1B_PARAM2_\uFF1A_PARAM3_","Remove tile (at position)":"\u79FB\u9664\u74E6\u7247\uFF08\u5728\u4F4D\u7F6E\u4E0A\uFF09","Remove the tile at the scene coordinates.":"\u79FB\u9664\u5834\u666F\u5750\u6A19\u8655\u7684\u74E6\u7247\u3002","Remove tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_":"\u79FB\u9664\u5834\u666F\u5750\u6A19 _PARAM1_ \u8655\u7684 _PARAM0_ \u4E2D\u7684\u5716\u584A\uFF1B_PARAM2_","Tile (on the grid)":"\u74E6\u7247\uFF08\u5728\u7DB2\u683C\u4E0A\uFF09","the id of the tile at the grid coordinates":"\u7DB2\u683C\u5750\u6A19\u8655\u7684\u74E6\u7247 ID","the tile id at grid coordinates _PARAM3_ ; _PARAM4_":"\u7DB2\u683C\u5750\u6A19 _PARAM3_ \u8655\u7684\u5716\u584A id; _PARAM4_","Flip tile vertically (on the grid)":"\u5782\u76F4\u7FFB\u8F49\u74E6\u7247\uFF08\u5728\u7DB2\u683C\u4E0A\uFF09","Flip tile vertically at grid coordinates.":"\u5728\u7DB2\u683C\u5750\u6A19\u8655\u5782\u76F4\u7FFB\u8F49\u74E6\u7247\u3002","Flip tile vertically in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"\u5728\u7DB2\u683C\u5750\u6A19 _PARAM1_ \u8655\u5782\u76F4\u7FFB\u8F49 _PARAM0_ \u4E2D\u7684\u5716\u584A\uFF1B_PARAM2_\uFF1A_PARAM3_","Flip tile horizontally (on the grid)":"\u6C34\u5E73\u7FFB\u8F49\u74E6\u7247\uFF08\u5728\u7DB2\u683C\u4E0A\uFF09","Flip tile horizontally at grid coordinates.":"\u5728\u7DB2\u683C\u5750\u6A19\u8655\u6C34\u5E73\u7FFB\u8F49\u5716\u584A\u3002","Flip tile horizontally in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"\u5728\u7DB2\u683C\u5750\u6A19 _PARAM1_ \u8655\u6C34\u5E73\u7FFB\u8F49 _PARAM0_ \u4E2D\u7684\u5716\u584A\uFF1B_PARAM2_\uFF1A_PARAM3_","Remove tile (on the grid)":"\u79FB\u9664\u5716\u584A\uFF08\u5728\u7DB2\u683C\u4E0A\uFF09","Remove the tile at the grid coordinates.":"\u79FB\u9664\u7DB2\u683C\u5750\u6A19\u8655\u7684\u5716\u584A\u3002","Remove tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_":"\u5728\u7DB2\u683C\u5750\u6A19 _PARAM1_ \u8655\u79FB\u9664 _PARAM0_ \u4E2D\u7684\u5716\u584A\uFF1B_PARAM2_","Tile flipped horizontally (at position)":"\u5716\u584A\u5728\u4F4D\u7F6E\u4E0A\u6C34\u5E73\u7FFB\u8F49","Check if tile at scene coordinates is flipped horizontally.":"\u6AA2\u67E5\u5834\u666F\u5750\u6A19\u8655\u7684\u5716\u584A\u662F\u5426\u6C34\u5E73\u7FFB\u8F49\u3002","The tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_ is flipped horizontally":"\u5834\u666F\u5750\u6A19 _PARAM1_ \u8655\u7684 _PARAM0_ \u4E2D\u7684\u5716\u584A\u88AB\u6C34\u5E73\u7FFB\u8F49","Tile flipped vertically (at position)":"\u5716\u584A\u5728\u4F4D\u7F6E\u4E0A\u5782\u76F4\u7FFB\u8F49","Check if tile at scene coordinates is flipped vertically.":"\u6AA2\u67E5\u5834\u666F\u5750\u6A19\u8655\u7684\u5716\u584A\u662F\u5426\u5782\u76F4\u7FFB\u8F49\u3002","The tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_ is flipped vertically":"\u5834\u666F\u5750\u6A19 _PARAM1_ \u8655\u7684 _PARAM0_ \u4E2D\u7684\u5716\u584A\u88AB\u5782\u76F4\u7FFB\u8F49","Tile flipped horizontally (on the grid)":"\u5716\u584A\u5728\u7DB2\u683C\u4E0A\u6C34\u5E73\u7FFB\u8F49","Check if tile at grid coordinates is flipped horizontally.":"\u6AA2\u67E5\u7DB2\u683C\u5750\u6A19\u8655\u7684\u5716\u584A\u662F\u5426\u6C34\u5E73\u7FFB\u8F49\u3002","The tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_ is flipped horizontally":"\u5728\u7DB2\u683C\u5750\u6A19 _PARAM1_ \u8655\u7684 _PARAM0_ \u4E2D\u7684\u5716\u584A\u88AB\u6C34\u5E73\u7FFB\u8F49","Tile flipped vertically (on the grid)":"\u5716\u584A\u5728\u7DB2\u683C\u4E0A\u5782\u76F4\u7FFB\u8F49","Check if tile at grid coordinates is flipped vertically.":"\u6AA2\u67E5\u7DB2\u683C\u5750\u6A19\u8655\u7684\u5716\u584A\u662F\u5426\u5782\u76F4\u7FFB\u8F49\u3002","The tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_ is flipped vertically":"\u5728\u7DB2\u683C\u5750\u6A19 _PARAM1_ \u8655\u7684 _PARAM0_ \u4E2D\u7684\u5716\u584A\u88AB\u5782\u76F4\u7FFB\u8F49","Grid row count":"\u7DB2\u683C\u884C\u6578","the grid row count in the tile map":"\u74E6\u7247\u5730\u5716\u4E2D\u7684\u7DB2\u683C\u884C\u6578","the grid row count":"\u7DB2\u683C\u884C\u6578","Grid column count":"\u7DB2\u683C\u5217\u6578","the grid column count in the tile map":"\u74E6\u7247\u5730\u5716\u4E2D\u7684\u7DB2\u683C\u5217\u6578","the grid column count":"\u7DB2\u683C\u5217\u6578","Tilemap JSON file":"TilemapJSON\u6587\u4EF6","This is the JSON file that was saved or exported from Tiled. LDtk is not supported yet for collisions.":"\u9019\u662F\u5F9E Tiled \u4FDD\u5B58\u6216\u532F\u51FA\u7684 JSON \u6587\u4EF6\u3002LDtk \u5C1A\u4E0D\u652F\u6301\u78B0\u649E\u3002","Optional, don't specify it if you've not saved the tileset in a different file.":"\u53EF\u9078\uFF0C\u5982\u679C\u4F60\u6C92\u6709\u5C07Tileset\u4FDD\u5B58\u5728\u53E6\u4E00\u500B\u6587\u4EF6\u4E2D\uFF0C\u5247\u4E0D\u8981\u6307\u5B9A\u5B83\u3002","Class filter":"\u985E\u904E\u6FFE\u5668","Only the tiles with the given class (set in Tiled 1.9+) will have hitboxes created.":"\u53EA\u6709\u5E36\u6709\u7D66\u5B9A\u985E\u7684\u74F7\u78DA(\u5728Tiled 1.9+\u4E2D\u8A2D\u5B9A)\u624D\u6703\u5275\u5EFAHITBOX\u3002","Use all layers":"\u4F7F\u7528\u6240\u6709\u5716\u5C64","Debug mode":"\u8ABF\u8A66\u6A21\u5F0F","When activated, it displays the hitboxes in the given color.":"\u6FC0\u6D3B\u540E\uFF0C\u5B83\u6703\u4EE5\u7D66\u5B9A\u7684\u984F\u8272\u986F\u793AHITBOX\u3002","External Tilemap (Tiled/LDtk) collision mask":"\u5916\u90E8 Tilemap\uFF08Tiled/LDtk\uFF09\u78B0\u649E\u906E\u7F69","Invisible object handling collisions with parts of a tilemap.":"\u4E0D\u53EF\u898B\u7269\u4EF6\u8655\u7406\u8207TileMap\u7684\u90E8\u5206\u78B0\u649E\u3002","Check the Tilemap JSON file being used.":"\u6AA2\u67E5\u6B63\u5728\u4F7F\u7528\u7684 Tilemap JSON \u6587\u4EF6\u3002","The Tilemap JSON file of _PARAM0_ is _PARAM1_":"_PARAM0_ \u7684 Tilemap JSON \u6587\u4EF6\u662F _PARAM1_","Tile map collision mask":"\u74E6\u7247\u5730\u5716\u78B0\u649E\u906E\u7F69","Set the JSON file containing the Tilemap data to display. This is usually the JSON file exported from Tiled.":"\u8A2D\u5B9A\u8981\u986F\u793A\u7684\u5305\u542BTilemap\u8CC7\u6599\u7684JSON\u6587\u4EF6\u3002\u9019\u901A\u5E38\u662F\u5F9ETiled\u532F\u51FA\u7684JSON\u6587\u4EF6\u3002","Set the Tilemap JSON file of _PARAM0_ to _PARAM1_":"\u5C07_PARAM0_\u7684Tilemap JSON\u6587\u4EF6\u8A2D\u5B9A\u70BA_PARAM1_","The Tilemap object can be used to display tile-based objects. It's a good way to create maps for RPG, strategy games or create objects by assembling tiles, useful for platformer, retro-looking games, etc... External tilemaps are also supported - but it's recommended to use the built-in, simple Tilemap object for most use cases.":"The Tilemap object can be used to display tile-based objects. It's a good way to create maps for RPG, strategy games or create objects by assembling tiles, useful for platformer, retro-looking games, etc... External tilemaps are also supported - but it's recommended to use the built-in, simple Tilemap object for most use cases.","Tweening":"\u88DC\u9593","Smoothly animate object properties over time \u2014 such as position, rotation scale, opacity, and more \u2014 as well as variables. Ideal for creating fluid transitions and UI animations. While you can use tweens to move objects, other behaviors (like platform, physics, ellipse movement...) or forces are often better suited for dynamic movement. Tween is best used for animating UI elements, static objects that need to move from one point to another, or other values like variables.":"\u5E73\u6ED1\u5730\u96A8\u6642\u9593\u52D5\u756B\u5C0D\u8C61\u5C6C\u6027\u2014\u2014\u4F8B\u5982\u4F4D\u7F6E\u3001\u65CB\u8F49\u6BD4\u4F8B\u3001\u4E0D\u900F\u660E\u5EA6\u7B49\u2014\u2014\u4EE5\u53CA\u8B8A\u6578\u3002\u7406\u60F3\u7528\u65BC\u5275\u5EFA\u6D41\u66A2\u8F49\u63DB\u548C\u7528\u6236\u754C\u9762\u52D5\u756B\u3002\u96D6\u7136\u53EF\u4EE5\u4F7F\u7528\u88DC\u9593\u4F86\u79FB\u52D5\u5C0D\u8C61\uFF0C\u4F46\u5176\u4ED6\u884C\u70BA\uFF08\u5982\u5E73\u53F0\u3001\u7269\u7406\u5B78\u3001\u6A62\u5713\u904B\u52D5\u2026\u2026\uFF09\u6216\u529B\u91CF\u901A\u5E38\u66F4\u9069\u5408\u52D5\u614B\u904B\u52D5\u3002\u88DC\u9593\u6700\u9069\u5408\u7528\u65BC\u52D5\u756B\u7528\u6236\u754C\u9762\u5143\u7D20\u3001\u9700\u8981\u5F9E\u4E00\u9EDE\u79FB\u52D5\u5230\u53E6\u4E00\u9EDE\u7684\u975C\u614B\u5C0D\u8C61\uFF0C\u6216\u5176\u4ED6\u503C\u5982\u8B8A\u6578\u3002","Ease":"\u7DE9\u89E3","Tween between 2 values according to an easing function.":"\u6839\u64DA\u7DE9\u548C\u51FD\u6578\uFF0C\u57282\u500B\u503C\u4E4B\u9593\u88DC\u9593\u3002","Easing":"\u7DE9\u548C","From value":"\u5F9E\u503C","To value":"\u5230\u503C","Weighting":"\u6B0A\u91CD","From 0 to 1.":"\u5F9E 0 \u5230 1\u3002","Tween a number in a scene variable":"\u5728\u5834\u666F\u8B8A\u91CF\u4E2D\u88DC\u9593\u4E00\u500B\u6578\u5B57","Tweens a scene variable's numeric value from one number to another.":"\u5C07\u5834\u666F\u8B8A\u91CF\u7684\u6578\u503C\u5F9E\u4E00\u500B\u6578\u5B57\u88DC\u9593\u70BA\u53E6\u4E00\u500B\u6578\u5B57\u3002","Tween variable _PARAM2_ from _PARAM3_ to _PARAM4_ over _PARAM5_ms with easing _PARAM6_ as _PARAM1_":"\u5C07\u88DC\u9593\u8B8A\u91CF _PARAM2_ \u5F9E _PARAM3_ \u8ABF\u6574\u70BA _PARAM4_ \u8D85\u904E _PARAM5_ ms\uFF0C\u5C07 _PARAM6_ \u7DE9\u548C\u70BA _PARAM1_","Scene Tweens":"\u5834\u666F\u88DC\u9593","Tween Identifier":"\u88DC\u9593\u6A19\u8B58\u7B26","The variable to tween":"\u8B8A\u91CF\u5230\u88DC\u9593","Final value":"\u6700\u7D42\u503C","Duration (in milliseconds)":"\u6301\u7E8C\u6642\u9593(\u6BEB\u79D2)","Tweens a scene variable's numeric value from its current value to a new one.":"\u5C07\u5834\u666F\u8B8A\u91CF\u7684\u6578\u503C\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u5230\u65B0\u503C\u3002","Tween variable _PARAM2_ to _PARAM3_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"\u5C07\u8B8A\u91CF _PARAM2_ \u8ABF\u6574\u70BA _PARAM3_ \u8D85\u904E _PARAM4_ ms\uFF0C\u5C07 _PARAM5_ \u7DE9\u548C\u70BA _PARAM1_","Tween variable _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"\u5C07\u8B8A\u91CF _PARAM2_ \u88DC\u9593\u5230 _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM1_","Tween a scene value":"\u88DC\u9593\u5834\u666F\u503C","Tweens a scene value that can be use with the expression Tween::Value.":"\u88DC\u9593\u53EF\u8207\u8868\u9054\u5F0F Tween::Value \u4E00\u8D77\u4F7F\u7528\u7684\u5834\u666F\u503C\u3002","Tween the value from _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"\u5C07\u503C\u5F9E _PARAM2_ \u88DC\u9593\u5230 _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM1_","Exponential interpolation":"\u6307\u6578\u63D2\u503C","Tween a layer value":"\u88DC\u9593\u5716\u5C64\u503C","Tweens a layer value that can be use with the expression Tween::Value.":"\u88DC\u9593\u53EF\u8207\u8868\u9054\u5F0F Tween::Value \u4E00\u8D77\u4F7F\u7528\u7684\u5716\u5C64\u503C\u3002","Tween the value of _PARAM7_ from _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"\u5C07 _PARAM7_ \u7684\u503C\u5F9E _PARAM2_ \u88DC\u9593\u5230 _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM1_","Tween the camera position":"\u88DC\u9593\u76F8\u6A5F\u4F4D\u7F6E","Tweens the camera position from the current one to a new one.":"\u5C07\u76F8\u6A5F\u4F4D\u7F6E\u5F9E\u7576\u524D\u4F4D\u7F6E\u8ABF\u6574\u5230\u65B0\u4F4D\u7F6E\u3002","Tween camera on layer _PARAM4_ to _PARAM2_;_PARAM3_ over _PARAM5_ms with easing _PARAM6_ as _PARAM1_":"\u5C07 _PARAM4_ \u5C64\u4E0A\u7684\u76F8\u6A5F\u88DC\u9593\u5230 _PARAM2_\uFF1B_PARAM3_ \u8D85\u904E _PARAM5_ms\uFF0C\u5C07 _PARAM6_ \u7DE9\u548C\u70BA _PARAM1_","Target X position":"\u76EE\u6A19 X \u4F4D\u7F6E","Target Y position":"\u76EE\u6A19 Y \u4F4D\u7F6E","Tween camera on layer _PARAM4_ to _PARAM2_;_PARAM3_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM1_":"\u5C07\u5716\u5C64 _PARAM4_ \u4E0A\u7684\u651D\u50CF\u6A5F\u88DC\u9593\u5230 _PARAM2_\uFF1B_PARAM3_\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u5C07 _PARAM5_ \u7DE9\u52D5\u70BA _PARAM1_","Tween the camera zoom":"\u76F8\u6A5F\u88DC\u9593\u7E2E\u653E","Tweens the camera zoom from the current zoom factor to a new one.":"\u5C07\u76F8\u6A5F\u7E2E\u653E\u5F9E\u7576\u524D\u7E2E\u653E\u56E0\u5B50\u8ABF\u6574\u70BA\u65B0\u7684\u7E2E\u653E\u56E0\u5B50\u3002","Tween the zoom of camera on layer _PARAM3_ to _PARAM2_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"\u5728 _PARAM4_ms \u4E0A\u5C07 _PARAM3_ \u5C64\u4E0A\u7684\u76F8\u6A5F\u7E2E\u653E\u88DC\u9593\u5230 _PARAM2_\uFF0C\u5E76\u5C07 _PARAM5_ \u7DE9\u548C\u70BA _PARAM1_","Target zoom":"\u76EE\u6A19\u7E2E\u653E","Tween the zoom of camera on layer _PARAM3_ to _PARAM2_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"\u5C07\u5C64 _PARAM3_ \u4E0A\u76F8\u6A5F\u7684\u7E2E\u653E\u88DC\u9593\u5230 _PARAM2_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM1_","Tween the camera rotation":"\u88DC\u9593\u76F8\u6A5F\u65CB\u8F49","Tweens the camera rotation from the current angle to a new one.":"\u5C07\u76F8\u6A5F\u65CB\u8F49\u5F9E\u7576\u524D\u89D2\u5EA6\u88DC\u9593\u5230\u65B0\u89D2\u5EA6\u3002","Tween the rotation of camera on layer _PARAM3_ to _PARAM2_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"\u5C07 _PARAM3_ \u5C64\u4E0A\u7684\u76F8\u6A5F\u65CB\u8F49\u88DC\u9593\u5230 _PARAM2_ \u8D85\u904E _PARAM4_ms\uFF0C\u5E76\u5C07 _PARAM5_ \u7DE9\u548C\u70BA _PARAM1_","Target rotation (in degrees)":"\u76EE\u6A19\u65CB\u8F49 (\u4EE5\u5EA6\u70BA\u55AE\u4F4D)","Tween the rotation of camera on layer _PARAM3_ to _PARAM2_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"\u5C07\u5C64 _PARAM3_ \u4E0A\u76F8\u6A5F\u7684\u65CB\u8F49\u88DC\u9593\u5230 _PARAM2_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM1_","Tween number effect property":"\u88DC\u9593\u6578\u5B57\u6548\u679C\u5C6C\u6027","Tweens a number effect property from its current value to a new one.":"\u5C07\u6578\u5B57\u6548\u679C\u5C6C\u6027\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u70BA\u65B0\u503C\u3002","Tween the property _PARAM5_ for effect _PARAM4_ of _PARAM3_ to _PARAM2_ with easing _PARAM6_ over _PARAM7_ seconds as _PARAM1_":"\u5C07 _PARAM3_ \u7684\u6548\u679C _PARAM4_ \u7684\u5C6C\u6027 _PARAM5_ \u88DC\u9593\u5230 _PARAM2_\uFF0C\u5E76\u5728 _PARAM7_ \u79D2\u5167\u7DE9\u52D5 _PARAM6_ \u4F5C\u70BA _PARAM1_","Effect name":"\u6548\u679C\u540D\u7A31","Property name":"\u5C6C\u6027\u540D\u7A31","Tween color effect property":"\u88DC\u9593\u984F\u8272\u6548\u679C\u5C6C\u6027","Tweens a color effect property from its current value to a new one.":"\u5C07\u984F\u8272\u6548\u679C\u5C6C\u6027\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u70BA\u65B0\u503C\u3002","Tween the color property _PARAM5_ for effect _PARAM4_ of _PARAM3_ to _PARAM2_ with easing _PARAM6_ over _PARAM7_ seconds as _PARAM1_":"\u5C07 _PARAM3_ \u7684\u6548\u679C _PARAM4_ \u7684\u984F\u8272\u5C6C\u6027 _PARAM5_ \u88DC\u9593\u5230 _PARAM2_\uFF0C\u5E76\u5728 _PARAM7_ \u79D2\u5167\u7DE9\u52D5 _PARAM6_ \u4F5C\u70BA _PARAM1_","To color":"\u8A2D\u5B9A\u984F\u8272","Scene tween exists":"\u5834\u666F\u88DC\u9593\u5DF2\u5B58\u5728","Check if the scene tween exists.":"\u6AA2\u67E5\u5834\u666F\u88DC\u9593\u662F\u5426\u5B58\u5728\u3002","Scene tween _PARAM1_ exists":"\u5834\u666F\u88DC\u9593 _PARAM1_ \u5B58\u5728","Scene tween is playing":"\u88DC\u9593\u6B63\u5728\u64AD\u653E\u7684\u5834\u666F","Check if the scene tween is currently playing.":"\u6AA2\u67E5\u5834\u666F\u88DC\u9593\u662F\u5426\u6B63\u5728\u64AD\u653E\u3002","Scene tween _PARAM1_ is playing":"\u5834\u666F\u88DC\u9593 _PARAM1_ \u6B63\u5728\u64AD\u653E","Scene tween finished playing":"\u5834\u666F\u88DC\u9593\u64AD\u653E\u5B8C\u7562","Check if the scene tween has finished playing.":"\u6AA2\u67E5\u5834\u666F\u88DC\u9593\u662F\u5426\u5DF2\u5B8C\u6210\u64AD\u653E\u3002","Scene tween _PARAM1_ has finished playing":"\u5834\u666F\u88DC\u9593 _PARAM1_ \u5DF2\u7D93\u5B8C\u6210\u64AD\u653E","Pause a scene tween":"\u66AB\u505C\u4E00\u500B\u5834\u666F\u88DC\u9593","Pause the running scene tween.":"\u66AB\u505C\u6B63\u5728\u904B\u884C\u7684\u5834\u666F\u88DC\u9593\u3002","Pause the scene tween _PARAM1_":"\u66AB\u505C\u5834\u666F\u88DC\u9593_PARAM1_","Stop a scene tween":"\u505C\u6B62\u5834\u666F\u88DC\u9593\uFF01","Stop the running scene tween.":"\u505C\u6B62\u904B\u884C\u5834\u666F\u88DC\u9593\u3002","Stop the scene tween _PARAM1_ (jump to the end: _PARAM2_)":"\u505C\u6B62\u5834\u666F\u88DC\u9593_PARAM1_ (\u8DF3\u5230\u7D50\u5C3E: _PARAM2_)","Jump to the end":"\u8DF3\u8F49\u5230\u672B\u7AEF","Resume a scene tween":"\u6062\u5FA9\u5834\u666F\u88DC\u9593","Resume the scene tween.":"\u6062\u5FA9\u88DC\u9593\u7684\u5834\u666F\u3002","Resume the scene tween _PARAM1_":"\u6062\u5FA9\u5834\u666F\u88DC\u9593_PARAM1_","Remove a scene tween":"\u522A\u9664\u5834\u666F\u88DC\u9593","Remove the scene tween. Call this when the tween is no longer needed to free memory.":"\u522A\u9664\u5834\u666F\u88DC\u9593\u3002\u7576\u4E0D\u518D\u9700\u8981\u88DC\u9593\u4EE5\u91CB\u653E\u5167\u5B58\u6642\uFF0C\u8ACB\u8ABF\u7528\u6B64\u9078\u9805\u3002","Remove the scene tween _PARAM1_":"\u522A\u9664\u5834\u666F\u88DC\u9593_PARAM1_","Tween progress":"\u88DC\u9593\u9032\u5EA6","the progress of a tween (between 0.0 and 1.0)":"\u88DC\u9593\u7684\u9032\u5EA6 (0.0 \u5230 1.0 \u4E4B\u9593)","the progress of the scene tween _PARAM1_":"\u5834\u666F\u88DC\u9593\u52D5\u756B\u9032\u5EA6 _PARAM1_","Tween value":"\u88DC\u9593\u503C","Return the value of a tween. It is always 0 for tweens with several values.":"\u8FD4\u56DE\u88DC\u9593\u7684\u503C\u3002\u5C0D\u4E8E\u5177\u6709\u591A\u500B\u503C\u7684\u88DC\u9593\uFF0C\u5B83\u59CB\u7D42\u70BA 0\u3002","Tween":"\u7DDA\u6027","Smoothly animate position, angle, scale and other properties of objects.":"\u5E73\u6ED1\u5730\u8A2D\u5B9A\u7269\u4EF6\u7684\u4F4D\u7F6E\u3001\u89D2\u5EA6\u3001\u7E2E\u653E\u548C\u5176\u4ED6\u5C6C\u6027\u7684\u52D5\u756B\u3002","Add object variable tween":"\u6DFB\u52A0\u7269\u4EF6\u8B8A\u91CF\u88DC\u9593","Add a tween animation for an object variable.":"\u70BA\u7269\u4EF6\u8B8A\u91CF\u6DFB\u52A0\u88DC\u9593\u52D5\u756B\u3002","Tween the variable _PARAM3_ of _PARAM0_ from _PARAM4_ to _PARAM5_ with easing _PARAM6_ over _PARAM7_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u8B8A\u91CF _PARAM3_ \u5F9E _PARAM4_ \u88DC\u9593\u70BA _PARAM5_\uFF0C\u5E76\u5728 _PARAM7_ms \u5167\u7DE9\u548C _PARAM6_ \u4F5C\u70BA _PARAM2_","Destroy this object when tween finishes":"\u88DC\u9593\u5B8C\u6210\u6642\u92B7\u6BC0\u8A72\u7269\u4EF6","Tween a number in an object variable":"\u88DC\u9593\u7269\u4EF6\u8B8A\u91CF\u4E2D\u7684\u6578\u5B57","Tweens an object variable's numeric value from its current value to a new one.":"\u5C07\u7269\u4EF6\u8B8A\u91CF\u7684\u6578\u503C\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u5230\u65B0\u503C\u3002","Tween the variable _PARAM3_ of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u8B8A\u91CF _PARAM3_ \u88DC\u9593\u70BA _PARAM4_ \u5E76\u5728 _PARAM6_ms \u5167\u7DE9\u548C _PARAM5_ \u4F5C\u70BA _PARAM2_","Tween the variable _PARAM3_ of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u8B8A\u91CF _PARAM3_ \u88DC\u9593\u70BA _PARAM4_\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u7DE9\u52D5 _PARAM5_ \u4F5C\u70BA _PARAM2_","Tween an object value":"\u88DC\u9593\u7269\u4EF6\u503C","Tweens an object value that can be use with the object expression Tween::Value.":"\u88DC\u9593\u7269\u4EF6\u503C\u53EF\u8207\u7269\u4EF6\u8868\u9054\u5F0F Tween::Value \u4E00\u8D77\u4F7F\u7528\u3002","Tween the value of _PARAM0_ from _PARAM3_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u503C\u5F9E _PARAM3_ \u88DC\u9593\u5230 _PARAM4_\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u7DE9\u52D5 _PARAM5_ \u4F5C\u70BA _PARAM2_","Tween object position":"\u88DC\u9593\u7269\u4EF6\u4F4D\u7F6E","Tweens an object position from its current position to a new one.":"\u5C07\u7269\u4EF6\u4F4D\u7F6E\u5F9E\u5176\u7576\u524D\u4F4D\u7F6E\u88DC\u9593\u5230\u65B0\u4F4D\u7F6E\u3002","Tween the position of _PARAM0_ to x: _PARAM3_, y: _PARAM4_ with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u4F4D\u7F6E\u88DC\u9593\u5230 x: _PARAM3_, y: _PARAM4_ \u5E76\u7DE9\u548C _PARAM5_ \u8D85\u904E _PARAM6_ms \u4F5C\u70BA _PARAM2_","To X":"\u5230 X","To Y":"\u5230 Y","Tween the position of _PARAM0_ to x: _PARAM3_, y: _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u4F4D\u7F6E\u88DC\u9593\u5230 x: _PARAM3_\u3001y: _PARAM4_\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u5C07 _PARAM5_ \u7DE9\u52D5\u70BA _PARAM2_","Tween object X position":"\u88DC\u9593\u7269\u4EF6 X \u4F4D\u7F6E","Tweens an object X position from its current X position to a new one.":"\u5C07\u7269\u4EF6\u7684 X \u4F4D\u7F6E\u5F9E\u7576\u524D\u7684 X \u4F4D\u7F6E\u88DC\u9593\u5230\u4E00\u500B\u65B0\u4F4D\u7F6E\u3002","Tween the X position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684 X \u4F4D\u7F6E\u88DC\u9593\u5230 _PARAM3_ \u5E76\u5728 _PARAM5_ms \u5167\u7DE9\u548C _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween the X position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684 X \u4F4D\u7F6E\u88DC\u9593\u5230 _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween object Z position":"\u88DC\u9593\u7269\u4EF6 Z \u4F4D\u7F6E","Tweens an object Z position (3D objects only) from its current Z position to a new one.":"\u5C07\u7269\u4EF6 Z \u4F4D\u7F6E (\u50C5\u9650 3D \u7269\u4EF6) \u5F9E\u5176\u7576\u524D Z \u4F4D\u7F6E\u88DC\u9593\u5230\u65B0\u4F4D\u7F6E\u3002","Tween the Z position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684 Z \u4F4D\u7F6E\u8ABF\u6574\u70BA _PARAM3_\uFF0C\u5C07 _PARAM4_ \u7DE9\u548C _PARAM5_ms \u4F5C\u70BA _PARAM2_","To Z":"\u5230 Z","Tween the Z position of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"\u5C07 _PARAM0_ \u7684 Z \u4F4D\u7F6E\u88DC\u9593\u5230 _PARAM4_\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u7DE9\u52D5 _PARAM5_ \u4F5C\u70BA _PARAM3_","3D capability":"3D\u529F\u80FD","Tween object width":"\u88DC\u9593\u7269\u4EF6\u5BEC\u5EA6","Tweens an object width from its current width to a new one.":"\u5C07\u7269\u4EF6\u5BEC\u5EA6\u5F9E\u5176\u7576\u524D\u5BEC\u5EA6\u88DC\u9593\u5230\u65B0\u5BEC\u5EA6\u3002","Tween the width of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u5BEC\u5EA6\u88DC\u9593\u70BA _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ms \u5167\u7DE9\u548C _PARAM4_ \u4F5C\u70BA _PARAM2_","To width":"\u5230\u5BEC\u5EA6","Tween the width of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u5BEC\u5EA6\u88DC\u9593\u70BA _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween object height":"\u88DC\u9593\u7269\u4EF6\u9AD8\u5EA6","Tweens an object height from its current height to a new one.":"\u88DC\u9593\u7269\u4EF6\u9AD8\u5EA6\u5C07\u7269\u4EF6\u9AD8\u5EA6\u5F9E\u5176\u7576\u524D\u9AD8\u5EA6\u88DC\u9593\u5230\u65B0\u9AD8\u5EA6\u3002","Tween the height of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u9AD8\u5EA6\u88DC\u9593\u70BA _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ms \u5167\u7DE9\u548C _PARAM4_ \u4F5C\u70BA _PARAM2_","To height":"\u5230\u9AD8\u5EA6","Tween the height of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u9AD8\u5EA6\u88DC\u9593\u70BA _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween object depth":"\u88DC\u9593\u7269\u4EF6\u6DF1\u5EA6","Tweens an object depth (suitable 3D objects only) from its current depth to a new one.":"\u5C07\u7269\u4EF6\u6DF1\u5EA6 (\u50C5\u9650\u9069\u7528\u7684 3D \u7269\u4EF6) \u5F9E\u7576\u524D\u6DF1\u5EA6\u88DC\u9593\u5230\u65B0\u6DF1\u5EA6\u3002","Tween the depth of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u6DF1\u5EA6\u8ABF\u6574\u70BA _PARAM3_\uFF0C\u5C07 _PARAM4_ \u7DE9\u548C _PARAM5_ms \u4F5C\u70BA _PARAM2_","To depth":"\u5230\u6DF1\u5EA6","Tween the depth of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"\u5C07 _PARAM0_ \u7684\u6DF1\u5EA6\u88DC\u9593\u70BA _PARAM4_\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u7DE9\u52D5 _PARAM5_ \u4F5C\u70BA _PARAM3_","Tween object Y position":"\u88DC\u9593\u7269\u4EF6 Y \u4F4D\u7F6E","Tweens an object Y position from its current Y position to a new one.":"\u5C07\u7269\u4EF6 Y \u4F4D\u7F6E\u5F9E\u5176\u7576\u524D Y \u4F4D\u7F6E\u88DC\u9593\u5230\u65B0\u4F4D\u7F6E\u3002","Tween the Y position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684 Y \u4F4D\u7F6E\u88DC\u9593\u5230 _PARAM3_ \u5E76\u5728 _PARAM5_ms \u5167\u7DE9\u548C _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween the Y position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684 Y \u4F4D\u7F6E\u88DC\u9593\u5230 _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween object angle":"\u88DC\u9593\u7269\u4EF6\u89D2\u5EA6","Tweens an object angle from its current angle to a new one.":"\u5C07\u7269\u4EF6\u89D2\u5EA6\u5F9E\u5176\u7576\u524D\u89D2\u5EA6\u88DC\u9593\u5230\u65B0\u89D2\u5EA6\u3002","Tween the angle of _PARAM0_ to _PARAM3_\xB0 with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u89D2\u5EA6\u88DC\u9593\u70BA _PARAM3_\xB0\uFF0C\u5C07 _PARAM4_ \u7DE9\u548C _PARAM5_ms \u4F5C\u70BA _PARAM2_","To angle (in degrees)":"\u89D2\u5EA6(\u89D2\u5EA6\u503C)\uFF1A","Tween the angle of _PARAM0_ to _PARAM3_\xB0 with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u89D2\u5EA6\u8ABF\u6574\u70BA _PARAM3_\xB0\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween object rotation on X axis":"X \u8EF8\u4E0A\u7684\u88DC\u9593\u7269\u4EF6\u65CB\u8F49","Tweens an object rotation on X axis from its current angle to a new one.":"\u5C07 X \u8EF8\u4E0A\u7684\u7269\u4EF6\u65CB\u8F49\u5F9E\u7576\u524D\u89D2\u5EA6\u88DC\u9593\u5230\u65B0\u89D2\u5EA6\u3002","Tween the rotation on X axis of _PARAM0_ to _PARAM4_\xB0 with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"\u5C07 _PARAM0_ \u7684 X \u8EF8\u65CB\u8F49\u88DC\u9593\u5230 _PARAM4_\xB0\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u7DE9\u52D5 _PARAM5_ \u4F5C\u70BA _PARAM3_","Tween object rotation on Y axis":"Y \u8EF8\u4E0A\u7684\u88DC\u9593\u7269\u4EF6\u65CB\u8F49","Tweens an object rotation on Y axis from its current angle to a new one.":"\u5C07 Y \u8EF8\u4E0A\u7684\u7269\u4EF6\u65CB\u8F49\u5F9E\u7576\u524D\u89D2\u5EA6\u88DC\u9593\u5230\u65B0\u89D2\u5EA6\u3002","Tween the rotation on Y axis of _PARAM0_ to _PARAM4_\xB0 with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"\u5C07 _PARAM0_ \u7684 Y \u8EF8\u65CB\u8F49\u88DC\u9593\u5230 _PARAM4_\xB0\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u7DE9\u52D5 _PARAM5_ \u4F5C\u70BA _PARAM3_","Tween object scale":"\u88DC\u9593\u7269\u4EF6\u6BD4\u4F8B","Tweens an object scale from its current scale to a new one (note: the scale can never be less than 0).":"\u5C07\u7269\u4EF6\u5F9E\u7576\u524D\u6BD4\u4F8B\u88DC\u9593\u70BA\u65B0\u6BD4\u4F8B(\u6CE8\u610F\uFF1A\u6BD4\u4F8B\u6C38\u9060\u4E0D\u80FD\u5C0F\u4E8E 0)\u3002","Tween the scale of _PARAM0_ to X-scale: _PARAM3_, Y-scale: _PARAM4_ (from center: _PARAM8_) with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"_PARAM0_\u5230X-scale: _PARAM3_, Y-scale: _PARAM4_ (\u5F9E\u4E2D\u5FC3: _PARAM8_) \u653E\u677E_PARAM5_ \u901A\u904E _PARAM6_ms \u653E\u5BEC\u70BA _PARAM2_","To scale X":"\u7E2E\u653E X","To scale Y":"\u7E2E\u653EY","Scale from center of object":"\u4EE5\u7269\u4EF6\u4E2D\u5FC3\u9EDE\u7E2E\u653E","Tweens an object scale from its current scale to a new one (note: the scale can never be 0 or less).":"\u5C07\u7269\u4EF6\u7E2E\u653E\u6BD4\u4F8B\u5F9E\u7576\u524D\u6BD4\u4F8B\u88DC\u9593\u5230\u65B0\u6BD4\u4F8B (\u6CE8\u610F\uFF1A\u6BD4\u4F8B\u6C38\u9060\u4E0D\u80FD\u70BA 0 \u6216\u66F4\u5C0F)\u3002","Tween the scale of _PARAM0_ to X-scale: _PARAM3_, Y-scale: _PARAM4_ (from center: _PARAM8_) with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u6BD4\u4F8B\u8ABF\u6574\u70BA X \u6BD4\u4F8B\uFF1A_PARAM3_\uFF0CY \u6BD4\u4F8B\uFF1A_PARAM4_ (\u5F9E\u4E2D\u5FC3\uFF1A_PARAM8_)\uFF0C\u5E76\u5728 _PARAM6_ \u79D2\u5167\u5C07 _PARAM5_ \u7DE9\u52D5\u70BA _PARAM2_","Tweens an object scale from its current value to a new one (note: the scale can never be 0 or less).":"\u5C07\u7269\u4EF6\u6BD4\u4F8B\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u70BA\u65B0\u503C (\u6CE8\u610F\uFF1A\u6BD4\u4F8B\u6C38\u9060\u4E0D\u80FD\u70BA 0 \u6216\u66F4\u5C0F)\u3002","Tween the scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u6BD4\u4F8B\u8ABF\u6574\u70BA _PARAM3_ (\u5F9E\u4E2D\u5FC3\uFF1A_PARAM7_)\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u5C07 _PARAM4_ \u7DE9\u52D5\u70BA _PARAM2_","To scale":"\u6309\u6BD4\u4F8B","Tween object X-scale":"\u88DC\u9593\u7269\u4EF6 X \u6BD4\u4F8B","Tweens an object X-scale from its current value to a new one (note: the scale can never be less than 0).":"\u5C07\u7269\u4EF6 X \u6BD4\u4F8B\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u5230\u65B0\u503C(\u6CE8\u610F\uFF1A\u6BD4\u4F8B\u6C38\u9060\u4E0D\u80FD\u5C0F\u4E8E 0)\u3002","Tween the X-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684 X \u6BD4\u4F8B\u88DC\u9593\u5230 _PARAM3_\uFF08\u5F9E\u4E2D\u5FC3\uFF1A_PARAM7_\uFF09\uFF0C\u7DE9\u548C _PARAM4_ \u8D85\u904E _PARAM5_ms \u4F5C\u70BA _PARAM2_","Tweens an object X-scale from its current value to a new one (note: the scale can never be 0 or less).":"\u5C07\u7269\u4EF6\u7684 X \u7E2E\u653E\u6BD4\u4F8B\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u70BA\u65B0\u503C (\u6CE8\u610F\uFF1A\u7E2E\u653E\u6BD4\u4F8B\u6C38\u9060\u4E0D\u80FD\u70BA 0 \u6216\u66F4\u5C0F)\u3002","Tween the X-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684 X \u6BD4\u4F8B\u88DC\u9593\u5230 _PARAM3_ (\u5F9E\u4E2D\u5FC3\uFF1A_PARAM7_)\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween object Y-scale":"\u88DC\u9593\u7269\u4EF6 Y \u6BD4\u4F8B","Tweens an object Y-scale from its current value to a new one (note: the scale can never be less than 0).":"\u5C07\u7269\u4EF6 Y \u6BD4\u4F8B\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u5230\u65B0\u503C(\u6CE8\u610F\uFF1A\u6BD4\u4F8B\u6C38\u9060\u4E0D\u80FD\u5C0F\u4E8E 0)\u3002","Tween the Y-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684 Y \u6BD4\u4F8B\u88DC\u9593\u5230 _PARAM3_\uFF08\u5F9E\u4E2D\u5FC3\uFF1A_PARAM7_\uFF09\uFF0C\u7DE9\u548C _PARAM4_ \u8D85\u904E _PARAM5_ms \u4F5C\u70BA _PARAM2_","Tweens an object Y-scale from its current value to a new one (note: the scale can never be 0 or less).":"\u5C07\u7269\u4EF6\u7684 Y \u7E2E\u653E\u6BD4\u4F8B\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u70BA\u65B0\u503C (\u6CE8\u610F\uFF1A\u7E2E\u653E\u6BD4\u4F8B\u6C38\u9060\u4E0D\u80FD\u70BA 0 \u6216\u66F4\u5C0F)\u3002","Tween the Y-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684 Y \u6BD4\u4F8B\u88DC\u9593\u5230 _PARAM3_ (\u5F9E\u4E2D\u5FC3\uFF1A_PARAM7_)\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween text size":"\u88DC\u9593\u6587\u672C\u5927\u5C0F","Tweens the text object character size from its current value to a new one (note: the size can never be less than 1).":"\u5C07\u6587\u672C\u7269\u4EF6\u5B57\u7B26\u5927\u5C0F\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u5230\u65B0\u503C(\u6CE8\u610F\uFF1A\u5927\u5C0F\u6C38\u9060\u4E0D\u80FD\u5C0F\u4E8E 1)\u3002","Tween the character size of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u5B57\u7B26\u5927\u5C0F\u88DC\u9593\u70BA _PARAM3_\uFF0C\u5C07 _PARAM4_ \u7DE9\u548C _PARAM5_ms \u4F5C\u70BA _PARAM2_","To character size":"\u5230\u5B57\u7B26\u5927\u5C0F","Tween the character size of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u5B57\u7B26\u5927\u5C0F\u88DC\u9593\u5230 _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween object opacity":"\u88DC\u9593\u7269\u4EF6\u4E0D\u900F\u660E\u5EA6","Tweens the object opacity from its current value to a new one (note: the value shall stay between 0 and 255).":"\u5C07\u7269\u4EF6\u4E0D\u900F\u660E\u5EA6\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u5230\u65B0\u503C(\u6CE8\u610F\uFF1A\u8A72\u503C\u61C9\u4FDD\u6301\u57280\u5230255\u4E4B\u9593)\u3002","Tween the opacity of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u4E0D\u900F\u660E\u5EA6\u88DC\u9593\u70BA _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ms \u5167\u7DE9\u548C _PARAM4_ \u4F5C\u70BA _PARAM2_","To opacity":"\u8A2D\u5B9A\u4E0D\u900F\u660E\u5EA6","Tween the opacity of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_ and destroy: _PARAM6_":"\u5C07 _PARAM0_ \u7684\u4E0D\u900F\u660E\u5EA6\u8ABF\u6574\u70BA _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_ \u5E76\u92B7\u6BC0\uFF1A_PARAM6_","Tween the property _PARAM6_ for effect _PARAM5_ of _PARAM0_ to _PARAM4_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM3_":"\u5C07 _PARAM0_ \u7684\u6548\u679C _PARAM5_ \u7684\u5C6C\u6027 _PARAM6_ \u88DC\u9593\u5230 _PARAM4_\uFF0C\u5E76\u5728 _PARAM8_ \u79D2\u5167\u7DE9\u52D5 _PARAM7_ \u4F5C\u70BA _PARAM3_","Effect capability":"\u6548\u679C\u529F\u80FD","Tween the color property _PARAM6_ for effect _PARAM5_ of _PARAM0_ to _PARAM4_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM3_":"\u5C07 _PARAM0_ \u7684\u6548\u679C _PARAM5_ \u7684\u984F\u8272\u5C6C\u6027 _PARAM6_ \u88DC\u9593\u5230 _PARAM4_\uFF0C\u5E76\u5728 _PARAM8_ \u79D2\u5167\u7DE9\u52D5 _PARAM7_ \u4F5C\u70BA _PARAM3_","Tween object color":"\u88DC\u9593\u7269\u4EF6\u984F\u8272","Tweens the object color from its current value to a new one. Format: \"128;200;255\" with values between 0 and 255 for red, green and blue":"\u5C07\u7269\u4EF6\u984F\u8272\u5F9E\u5176\u7576\u524D\u503C\u88DC\u9593\u5230\u65B0\u503C\u3002\u683C\u5F0F\uFF1A\u201C128;200;255\u201D\uFF0C\u7D05\u8272\u3001\u7DA0\u8272\u548C\u85CD\u8272\u7684\u503C\u5728 0 \u5230 255 \u4E4B\u9593","Tween the color of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u984F\u8272\u88DC\u9593\u70BA _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ms \u5167\u7DE9\u548C _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween on the Hue/Saturation/Lightness (HSL)":"\u8272\u8ABF/\u98FD\u548C\u5EA6/\u4EAE\u5EA6 (HSL)","Useful to have a more natural change between colors.":"\u5728\u984F\u8272\u4E4B\u9593\u6709\u66F4\u81EA\u7136\u7684\u8B8A\u5316\u975E\u5E38\u6709\u7528\u3002","Tween the color of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"\u5C07 _PARAM0_ \u7684\u984F\u8272\u88DC\u9593\u70BA _PARAM3_\uFF0C\u5E76\u5728 _PARAM5_ \u79D2\u5167\u7DE9\u52D5 _PARAM4_ \u4F5C\u70BA _PARAM2_","Tween object HSL color":"\u88DC\u9593\u7269\u4EF6 HSL \u984F\u8272","Tweens the object color using Hue/Saturation/Lightness. Hue is in degrees, Saturation and Lightness are between 0 and 100. Use -1 for Saturation and Lightness to let them unchanged.":"\u4F7F\u7528\u8272\u76F8/\u98FD\u548C\u5EA6/\u4EAE\u5EA6\u88DC\u9593\u7269\u4EF6\u984F\u8272\u3002\u8272\u8ABF\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF0C\u98FD\u548C\u5EA6\u548C\u4EAE\u5EA6\u5728 0 \u5230 100 \u4E4B\u9593\u3002\u98FD\u548C\u5EA6\u548C\u4EAE\u5EA6\u4F7F\u7528 -1 \u8B93\u5B83\u5011\u4FDD\u6301\u4E0D\u8B8A\u3002","Tween the color of _PARAM0_ using HSL to H: _PARAM3_ (_PARAM4_), S: _PARAM5_, L: _PARAM6_ with easing _PARAM7_ over _PARAM8_ms as _PARAM2_":"\u4F7F\u7528 HSL \u5C07 _PARAM0_ \u7684\u984F\u8272\u88DC\u9593\u70BA H\uFF1A_PARAM3_ (_PARAM4_)\uFF0CS\uFF1A_PARAM5_\uFF0CL\uFF1A_PARAM6_\uFF0C\u5E76\u5728 _PARAM8_ms \u4E0A\u7DE9\u548C _PARAM7_ \u4F5C\u70BA _PARAM2_","To Hue (in degrees)":"\u5230\u8272\u76F8 (\u4EE5\u5EA6\u70BA\u55AE\u4F4D)","Animate Hue":"\u52D5\u614B\u8272\u8ABF","To Saturation (0 to 100, -1 to ignore)":"\u81F3\u98FD\u548C\u5EA6(0\u81F3100, -1 \u53EF\u5FFD\u7565)","To Lightness (0 to 100, -1 to ignore)":"\u81F3\u4EAE\u5EA6(0\u5230100, -1 \u53EF\u5FFD\u7565)","Tween the color of _PARAM0_ using HSL to H: _PARAM3_ (_PARAM4_), S: _PARAM5_, L: _PARAM6_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM2_":"\u4F7F\u7528 HSL \u5C07 _PARAM0_ \u7684\u984F\u8272\u88DC\u9593\u70BA H: _PARAM3_ (_PARAM4_)\u3001S: _PARAM5_\u3001L: _PARAM6_\uFF0C\u5E76\u5728 _PARAM8_ \u79D2\u5167\u5C07 _PARAM7_ \u7DE9\u52D5\u70BA _PARAM2_","Tween exists":"\u88DC\u9593\u5DF2\u5B58\u5728","Check if the tween animation exists.":"\u6AA2\u67E5\u88DC\u9593\u52D5\u756B\u662F\u5426\u5B58\u5728\u3002","Tween _PARAM2_ on _PARAM0_ exists":"_PARAM0_\u4E0A\u7684\u88DC\u9593_PARAM2_\u5B58\u5728","Tween is playing":"Tween\u6B63\u5728\u64AD\u653E","Check if the tween animation is currently playing.":"\u6AA2\u67E5\u7576\u524D\u662F\u5426\u6B63\u5728\u64AD\u653E\u88DC\u9593\u52D5\u756B\u3002","Tween _PARAM2_ on _PARAM0_ is playing":"\u6B63\u5728\u64AD\u653E_PARAM0_\u4E0A\u7684\u88DC\u9593_PARAM2_","Tween finished playing":"\u88DC\u9593\u5B8C\u6210\u64AD\u653E","Check if the tween animation has finished playing.":"\u6AA2\u67E5\u88DC\u9593\u52D5\u756B\u662F\u5426\u5DF2\u5B8C\u6210\u64AD\u653E\u3002","Tween _PARAM2_ on _PARAM0_ has finished playing":"_PARAM0_\u4E0A\u7684\u88DC\u9593_PARAM2_\u5DF2\u64AD\u653E\u5B8C\u7562","Pause a tween":"\u66AB\u505C\u88DC\u9593","Pause the running tween animation.":"\u66AB\u505C\u6B63\u5728\u904B\u884C\u7684\u88DC\u9593\u52D5\u756B\u3002","Pause the tween _PARAM2_ on _PARAM0_":"\u66AB\u505C_PARAM0_\u4E0A\u7684\u88DC\u9593_PARAM2_","Stop a tween":"\u505C\u6B62\u88DC\u9593","Stop the running tween animation.":"\u505C\u6B62\u6B63\u5728\u904B\u884C\u7684\u88DC\u9593\u52D5\u756B\u3002","Stop the tween _PARAM2_ on _PARAM0_":"\u505C\u6B62_PARAM0_\u4E0A\u7684\u88DC\u9593_PARAM2_","Jump to end":"\u8DF3\u5230\u6700\u540E","Resume a tween":"\u6062\u5FA9\u88DC\u9593","Resume the tween animation.":"\u6062\u5FA9\u88DC\u9593\u52D5\u756B\u3002","Resume the tween _PARAM2_ on _PARAM0_":"\u5728_PARAM0_\u4E0A\u6062\u5FA9\u88DC\u9593_PARAM2_","Remove a tween":"\u522A\u9664\u88DC\u9593","Remove the tween animation from the object.":"\u5F9E\u7269\u4EF6\u4E2D\u522A\u9664\u88DC\u9593\u52D5\u756B\u3002","Remove the tween _PARAM2_ from _PARAM0_":"\u5F9E_PARAM0_\u79FB\u9664\u88DC\u9593_PARAM2_","the progress of the tween _PARAM2_":"\u88DC\u9593\u52D5\u756B\u9032\u5EA6 _PARAM1_","Spine (experimental)":"Spine (\u5BE6\u9A57\u6027)","Displays a Spine animation.":"\u986F\u793A Spine \u52D5\u756B\u3002","Spine":"\u810A\u690E","Display and smoothly animate a 2D object with skeletal animations made with Spine. Use files exported from Spine (json, atlas and image).":"\u4F7F\u7528 Spine \u5236\u4F5C\u7684\u9AA8\u9ABC\u52D5\u756B\u986F\u793A 2D \u7269\u4EF6\u5E76\u5C0D\u5176\u9032\u884C\u6D41\u66A2\u7684\u52D5\u756B\u8655\u7406\u3002\u4F7F\u7528\u5F9E Spine \u532F\u51FA\u7684\u6587\u4EF6 (json\u3001atlas \u548C image)\u3002","Edit animations":"\u7DE8\u8F2F\u52D5\u756B","Animation mixing duration":"\u52D5\u756B\u6DF7\u5408\u6301\u7E8C\u6642\u9593","the duration of the smooth transition between 2 animations (in second)":"\u5169\u500B\u52D5\u756B\u4E4B\u9593\u5E73\u6ED1\u904E\u6E21\u7684\u6301\u7E8C\u6642\u9593 (\u4EE5\u79D2\u70BA\u55AE\u4F4D)","the animation mixing duration":"\u52D5\u756B\u6DF7\u5408\u6301\u7E8C\u6642\u9593","Animations and images":"\u52D5\u756B\u548C\u5716\u50CF","Point attachment X position":"\u9EDE\u9644\u8457 X \u4F4D\u7F6E","x position of spine point attachment":"spine \u9EDE\u9644\u8457\u7684 x \u4F4D\u7F6E","x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ \u69FD\u7684 spine _PARAM1_ \u9EDE\u9644\u8457\u7684 x \u4F4D\u7F6E","Attachment name":"\u9644\u8457\u7269\u540D\u7A31","Slot name (use \"\" if names are the same)":"\u63D2\u69FD\u540D\u7A31\uFF08\u5982\u679C\u540D\u7A31\u76F8\u540C\u8ACB\u4F7F\u7528\"\"\uFF09","Point attachment Y position":"\u9EDE\u9644\u8457 Y \u4F4D\u7F6E","y position of spine point attachment":"spine \u9EDE\u9644\u8457\u7684 y \u4F4D\u7F6E","y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ \u69FD\u7684 spine _PARAM1_ \u9EDE\u9644\u8457\u7684 y \u4F4D\u7F6E","Point attachment scale world X position":"\u9644\u8457\u9EDE\u7E2E\u653E\u4E16\u754C X \u4F4D\u7F6E","world x position of spine point attachment scale":"\u810A\u690E\u9644\u8457\u9EDE\u7E2E\u653E\u7684\u4E16\u754C X \u4F4D\u7F6E","world x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"\u810A\u690E _PARAM1_ \u9644\u8457\u9EDE\u5C0D _PARAM2_ \u69FD\u7684\u4E16\u754C X \u4F4D\u7F6E","Point attachment scale local X position":"\u9644\u8457\u9EDE\u7E2E\u653E\u672C\u5730 X \u4F4D\u7F6E","local x position of spine point attachment scale":"\u810A\u690E\u9644\u8457\u9EDE\u7E2E\u653E\u7684\u672C\u5730 X \u4F4D\u7F6E","local x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"\u810A\u690E _PARAM1_ \u9644\u8457\u9EDE\u5C0D _PARAM2_ \u69FD\u7684\u672C\u5730 X \u4F4D\u7F6E","Point attachment scale world Y position":"\u9644\u8457\u9EDE\u7E2E\u653E\u4E16\u754C Y \u4F4D\u7F6E","world y position of spine point attachment scale":"\u810A\u690E\u9644\u8457\u9EDE\u7E2E\u653E\u7684\u4E16\u754C Y \u4F4D\u7F6E","world y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"\u810A\u690E _PARAM1_ \u9644\u8457\u9EDE\u5C0D _PARAM2_ \u69FD\u7684\u4E16\u754C Y \u4F4D\u7F6E","Point attachment scale local Y position":"\u9644\u8457\u9EDE\u7E2E\u653E\u672C\u5730 Y \u4F4D\u7F6E","local y position of spine point attachment scale":"\u810A\u690E\u9644\u8457\u9EDE\u7E2E\u653E\u7684\u672C\u5730 Y \u4F4D\u7F6E","local y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"\u810A\u690E _PARAM1_ \u9644\u8457\u9EDE\u5C0D _PARAM2_ \u69FD\u7684\u672C\u5730 Y \u4F4D\u7F6E","Point attachment world rotation":"\u9644\u8457\u9EDE\u4E16\u754C\u65CB\u8F49","world rotation of spine point attachment":"\u810A\u690E\u9644\u8457\u9EDE\u7684\u4E16\u754C\u65CB\u8F49","world rotation of spine _PARAM1_ point attachment for _PARAM2_ slot":"\u810A\u690E _PARAM1_ \u9644\u8457\u9EDE\u5C0D _PARAM2_ \u69FD\u7684\u4E16\u754C\u65CB\u8F49","Point attachment local rotation":"\u9644\u8457\u9EDE\u672C\u5730\u65CB\u8F49","local rotation of spine point attachment":"\u810A\u690E\u9644\u8457\u9EDE\u7684\u672C\u5730\u65CB\u8F49","local rotation of spine _PARAM1_ point attachment for _PARAM2_ slot":"\u810A\u690E _PARAM1_ \u9644\u8457\u9EDE\u5C0D _PARAM2_ \u69FD\u7684\u672C\u5730\u65CB\u8F49","Get skin name":"\u7372\u53D6\u76AE\u819A\u540D\u7A31","the skin of the object":"\u7269\u9AD4\u7684\u76AE\u819A","the skin":"\u76AE\u819A","Skin name":"\u76AE\u819A\u540D\u7A31","Set skin":"\u8A2D\u7F6E\u76AE\u819A","Set the skin of a Spine object.":"\u8A2D\u7F6E\u4E00\u500BSpine\u7269\u4EF6\u7684\u76AE\u819A\u3002","Set the skin of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u76AE\u819A\u8A2D\u7F6E\u70BA _PARAM1_","This allows players to join online lobbies and synchronize gameplay across devices without needing to manage servers or networking.\n\nUse the \"Open game lobbies\" action to let players join a game, and use conditions like \"Lobby game has just started\" to begin gameplay. Add the \"Multiplayer object\" behavior to game objects that should be synchronized, and assign or change their ownership using player numbers. Variables and game state (like scenes, scores, or timers) are automatically synced by the host, with options to change ownership or disable sync when needed. Common multiplayer logic \u2014like handling joins/leaves, collisions, and host migration\u2014 is supported out-of-the-box for up to 8 players per game.":"\u9019\u4F7F\u5F97\u73A9\u5BB6\u53EF\u4EE5\u52A0\u5165\u5728\u7DDA\u5927\u5EF3\uFF0C\u4E26\u5728\u7121\u9700\u7BA1\u7406\u4F3A\u670D\u5668\u6216\u7DB2\u7D61\u7684\u60C5\u6CC1\u4E0B\u5BE6\u73FE\u8DE8\u8A2D\u5099\u7684\u904A\u6232\u540C\u6B65\u3002\n\n\u4F7F\u7528\u300C\u958B\u653E\u904A\u6232\u5927\u5EF3\u300D\u64CD\u4F5C\u8B93\u73A9\u5BB6\u52A0\u5165\u904A\u6232\uFF0C\u4E26\u4F7F\u7528\u50CF\u300C\u5927\u5EF3\u904A\u6232\u525B\u958B\u59CB\u300D\u7684\u689D\u4EF6\u4F86\u958B\u59CB\u904A\u6232\u3002\u5C07\u300C\u591A\u73A9\u5BB6\u5C0D\u8C61\u300D\u884C\u70BA\u6DFB\u52A0\u5230\u9700\u8981\u540C\u6B65\u7684\u904A\u6232\u5C0D\u8C61\u4E2D\uFF0C\u4E26\u4F7F\u7528\u73A9\u5BB6\u7DE8\u865F\u5206\u914D\u6216\u66F4\u6539\u5B83\u5011\u7684\u64C1\u6709\u6B0A\u3002\u8B8A\u6578\u548C\u904A\u6232\u72C0\u614B\uFF08\u5982\u5834\u666F\u3001\u5206\u6578\u6216\u8A08\u6642\u5668\uFF09\u7531\u4E3B\u6A5F\u81EA\u52D5\u540C\u6B65\uFF0C\u4E26\u5728\u9700\u8981\u6642\u6709\u9078\u9805\u66F4\u6539\u64C1\u6709\u6B0A\u6216\u7981\u7528\u540C\u6B65\u3002\u901A\u7528\u7684\u591A\u73A9\u5BB6\u908F\u8F2F \u2014 \u5982\u8655\u7406\u52A0\u5165/\u96E2\u958B\u3001\u78B0\u649E\u548C\u4E3B\u6A5F\u9077\u79FB \u2014 \u53EF\u4EE5\u7121\u7E2B\u652F\u63F4\u6BCF\u500B\u904A\u6232\u6700\u591A8\u540D\u73A9\u5BB6\u3002","Current lobby ID":"\u7576\u524D\u5927\u5EF3\u7684 ID","Returns current lobby ID.":"\u8FD4\u56DE\u7576\u524D\u5927\u5EF3\u7684 ID\u3002","Lobbies":"\u5927\u5EF3","Join a specific lobby by its ID":"\u900F\u904E\u5176 ID \u52A0\u5165\u7279\u5B9A\u5927\u5EF3","Join a specific lobby. The player will join the game instantly if this is possible.":"\u52A0\u5165\u7279\u5B9A\u5927\u5EF3\u3002\u5982\u679C\u53EF\u80FD\uFF0C\u73A9\u5BB6\u5C07\u7ACB\u5373\u52A0\u5165\u904A\u6232\u3002","Join a specific lobby by its ID _PARAM1_":"\u900F\u904E\u5176 ID \u52A0\u5165\u7279\u5B9A\u5927\u5EF3 _PARAM1_","Lobby ID":"\u5927\u5EF3 ID","Display loader while joining a lobby.":"\u52A0\u5165\u5927\u5EF3\u6642\u986F\u793A\u52A0\u8F09\u4E2D\u756B\u9762\u3002","Display game lobbies if unable to join a specific one.":"\u5982\u679C\u7121\u6CD5\u52A0\u5165\u7279\u5B9A\u7684\u5927\u5EF3\uFF0C\u5247\u986F\u793A\u904A\u6232\u5927\u5EF3\u3002","Join the next available lobby":"\u52A0\u5165\u4E0B\u4E00\u500B\u53EF\u7528\u7684\u904A\u6232\u5927\u5EF3","Join the next available lobby. The player will join the game instantly if this is possible.":"\u52A0\u5165\u4E0B\u4E00\u500B\u53EF\u7528\u7684\u904A\u6232\u5927\u5EF3\u3002\u5982\u679C\u53EF\u80FD\uFF0C\u73A9\u5BB6\u5C07\u7ACB\u5373\u52A0\u5165\u904A\u6232\u3002","Display loader while searching for a lobby.":"\u641C\u7D22\u5927\u5EF3\u6642\u986F\u793A\u8F09\u5165\u5668\u3002","Display game lobbies if no lobby can be joined directly.":"\u5982\u679C\u4E0D\u80FD\u76F4\u63A5\u52A0\u5165\u4EFB\u4F55\u5927\u5EF3\uFF0C\u5247\u986F\u793A\u904A\u6232\u5927\u5EF3\u3002","Is searching for a lobby to join":"\u6B63\u5728\u5C0B\u627E\u53EF\u4EE5\u52A0\u5165\u7684\u904A\u6232\u5927\u5EF3","Is searching for a lobby to join.":"\u6B63\u5728\u5C0B\u627E\u53EF\u4EE5\u52A0\u5165\u7684\u904A\u6232\u5927\u5EF3\u3002","Quick join failed to join a lobby":"\u5FEB\u901F\u52A0\u5165\u672A\u80FD\u52A0\u5165\u5927\u5EF3","Quick join failed to join a lobby.":"\u5FEB\u901F\u52A0\u5165\u672A\u80FD\u52A0\u5165\u5927\u5EF3\u3002","Quick join action failure reason":"\u5FEB\u901F\u52A0\u5165\u884C\u52D5\u5931\u6557\u7684\u539F\u56E0","Returns the reason why the Quick join action failed. It can either be 'FULL' if all lobbies were occupied, 'NOT_ENOUGH_PLAYERS' if the lobby's configuration requires more than 1 player to start the game and no other players were available. It can also take the value 'UNKNOWN'.":"\u8FD4\u56DE\u5FEB\u901F\u52A0\u5165\u884C\u52D5\u5931\u6557\u7684\u539F\u56E0\u3002\u5982\u679C\u6240\u6709\u5927\u5EF3\u90FD\u6EFF\u4E86\uFF0C\u5B83\u53EF\u4EE5\u662F'FULL'\uFF1B\u5982\u679C\u5927\u5EF3\u7684\u914D\u7F6E\u9700\u8981\u8D85\u904E1\u540D\u73A9\u5BB6\u624D\u80FD\u958B\u59CB\u904A\u6232\u800C\u4E14\u6C92\u6709\u53EF\u7528\u7684\u73A9\u5BB6\uFF0C\u90A3\u9EBC\u5B83\u53EF\u4EE5\u662F'NOT_ENOUGH_PLAYERS'\u3002\u5B83\u4E5F\u53EF\u4EE5\u53D6\u503C'UNKNOWN'\u3002","Open Game Lobbies":"\u6253\u958B\u904A\u6232\u5927\u5EF3","Open the game lobbies window, where players can join lobbies or see the one they are in.":"\u6253\u958B\u904A\u6232\u5927\u5EF3\u7A97\u53E3\uFF0C\u73A9\u5BB6\u53EF\u4EE5\u5728\u5176\u4E2D\u52A0\u5165\u5927\u5EF3\u6216\u67E5\u770B\u4ED6\u5011\u6240\u5728\u7684\u5927\u5EF3\u3002","Open the game lobbies":"\u6253\u958B\u904A\u6232\u5927\u5EF3","Close Game Lobbies":"\u95DC\u9589\u904A\u6232\u5927\u5EF3","Close the game lobbies window. Using this action is usually not required because the window is automatically closed when the game of a lobby starts or if the user cancels.":"\u95DC\u9589\u904A\u6232\u5927\u5EF3\u7A97\u53E3\u3002\u4F7F\u7528\u6B64\u64CD\u4F5C\u901A\u5E38\u4E0D\u662F\u5FC5\u9700\u7684\uFF0C\u56E0\u70BA\u7576\u904A\u6232\u958B\u59CB\u6216\u7528\u6236\u53D6\u6D88\u6642\uFF0C\u7A97\u53E3\u6703\u81EA\u52D5\u95DC\u9589\u3002","Close the game lobbies":"\u95DC\u9589\u904A\u6232\u5927\u5EF3","Allow players to close the lobbies window":"\u5141\u8A31\u73A9\u5BB6\u95DC\u9589\u5927\u5EF3\u7A97\u53E3","Allow players to close the lobbies window. Allowed by default.":"\u5141\u8A31\u73A9\u5BB6\u95DC\u9589\u5927\u5EF3\u7A97\u53E3\u3002\u9ED8\u8A8D\u5141\u8A31\u3002","Allow players to close the lobbies window: _PARAM1_":"\u5141\u8A31\u73A9\u5BB6\u95DC\u9589\u5927\u5EF3\u7A97\u53E3: _PARAM1_","Show close button":"\u986F\u793A\u95DC\u9589\u6309\u9215","End Lobby Game":"\u7D50\u675F\u5927\u5EF3\u904A\u6232","End the lobby game. This will trigger the \"Lobby game has just ended\" condition.":"\u7D50\u675F\u5927\u5EF3\u904A\u6232\u3002\u9019\u5C07\u89F8\u767C\u201C\u5927\u5EF3\u904A\u6232\u525B\u525B\u7D50\u675F\u201D\u7684\u689D\u4EF6\u3002","End the lobby game":"\u7D50\u675F\u5927\u5EF3\u904A\u6232","Leave Game Lobby":"\u96E2\u958B\u904A\u6232\u5927\u5EF3","Leave the current game lobby. This will trigger the \"Player has left\" condition on the other players, and the \"Lobby game has ended\" condition on the player leaving.":"\u96E2\u958B\u7576\u524D\u904A\u6232\u5927\u5EF3\u3002\u9019\u5C07\u89F8\u767C\u5176\u4ED6\u73A9\u5BB6\u7684\u300C\u73A9\u5BB6\u5DF2\u96E2\u958B\u300D\u689D\u4EF6\uFF0C\u4EE5\u53CA\u96E2\u958B\u73A9\u5BB6\u7684\u300C\u5927\u5EF3\u904A\u6232\u5DF2\u7D50\u675F\u300D\u689D\u4EF6\u3002","Leave the game lobby":"\u96E2\u958B\u904A\u6232\u5927\u5EF3","Send custom message to other players":"\u5411\u5176\u4ED6\u73A9\u5BB6\u767C\u9001\u81EA\u5B9A\u7FA9\u6D88\u606F","Send a custom message to other players in the lobby, with an automatic retry system if it hasn't been received. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"\u5411\u5927\u5EF3\u4E2D\u7684\u5176\u4ED6\u73A9\u5BB6\u767C\u9001\u81EA\u5B9A\u7FA9\u6D88\u606F\uFF0C\u5982\u679C\u672A\u6536\u5230\u6D88\u606F\uFF0C\u5C07\u4F7F\u7528\u81EA\u52D5\u91CD\u8A66\u7CFB\u7D71\u3002\u8207\u689D\u4EF6\u201C\u6D88\u606F\u5DF2\u6536\u5230\u201D\u4E00\u8D77\u4F7F\u7528\uFF0C\u4EE5\u4E86\u89E3\u4E3B\u6A5F\u4F55\u6642\u6B63\u78BA\u8655\u7406\u6D88\u606F\u3002","Send message _PARAM0_ to other players with content _PARAM1_":"\u5411\u5176\u4ED6\u73A9\u5BB6\u767C\u9001\u6D88\u606F _PARAM0_\uFF0C\u5167\u5BB9\u70BA _PARAM1_","Message name":"\u6D88\u606F\u540D\u7A31","Message content":"\u6D88\u606F\u5167\u5BB9","Send custom message to other players with a variable":"\u4F7F\u7528\u8B8A\u91CF\u5411\u5176\u4ED6\u73A9\u5BB6\u767C\u9001\u81EA\u5B9A\u7FA9\u6D88\u606F","Send a custom message to other players in the lobby containing a variable, with an automatic retry system if it hasn't been received. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"\u5411\u5927\u5EF3\u4E2D\u7684\u5176\u4ED6\u73A9\u5BB6\u767C\u9001\u5305\u542B\u8B8A\u91CF\u7684\u81EA\u5B9A\u7FA9\u6D88\u606F\uFF0C\u82E5\u672A\u6536\u5230\u5247\u53EF\u81EA\u52D5\u91CD\u8A66\u3002\u4F7F\u7528\u689D\u4EF6\u300C\u6D88\u606F\u5DF2\u6536\u5230\u300D\u4F86\u6AA2\u67E5\u4E3B\u6A5F\u662F\u5426\u5DF2\u6B63\u78BA\u8655\u7406\u8A72\u6D88\u606F\u3002","Send message _PARAM0_ to other players with variable _PARAM1_":"\u4F7F\u7528\u8B8A\u91CF _PARAM1_ \u5411\u5176\u4ED6\u73A9\u5BB6\u767C\u9001\u6D88\u606F _PARAM0_","Get message variable":"\u7372\u53D6\u6D88\u606F\u8B8A\u91CF","Store the data of the specified message in a variable. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"\u5C07\u6307\u5B9A\u6D88\u606F\u7684\u6578\u64DA\u5B58\u5132\u5728\u8B8A\u91CF\u4E2D\u3002\u8207\u689D\u4EF6\u300E\u6D88\u606F\u5DF2\u88AB\u63A5\u6536\u300F\u4E00\u8D77\u4F7F\u7528\uFF0C\u4EE5\u78BA\u4FDD\u6D88\u606F\u5DF2\u6B63\u78BA\u8655\u7406\u3002","Save message _PARAM0_ data in _PARAM1_":"\u5C07\u6D88\u606F _PARAM0_ \u6578\u64DA\u4FDD\u5B58\u5728 _PARAM1_ \u4E2D","Lobbies window is open":"\u5927\u5EF3\u7A97\u53E3\u5DF2\u6253\u958B","Check if the lobbies window is open.":"\u6AA2\u67E5\u5927\u5EF3\u7A97\u53E3\u662F\u5426\u6253\u958B\u3002","Lobby game has just started":"\u5927\u5EF3\u904A\u6232\u525B\u525B\u958B\u59CB","Check if the lobby game has just started.":"\u6AA2\u67E5\u5927\u5EF3\u904A\u6232\u662F\u5426\u525B\u525B\u958B\u59CB\u3002","Lobby game has started":"\u5927\u5EF3\u904A\u6232\u5DF2\u958B\u59CB","Lobby game is running":"\u5927\u5EF3\u904A\u6232\u6B63\u5728\u904B\u884C","Check if the lobby game is running.":"\u6AA2\u67E5\u5927\u5EF3\u904A\u6232\u662F\u5426\u6B63\u5728\u904B\u884C\u3002","Lobby game has just ended":"\u5927\u5EF3\u904A\u6232\u525B\u525B\u7D50\u675F","Check if the lobby game has just ended.":"\u6AA2\u67E5\u5927\u5EF3\u904A\u6232\u662F\u5426\u525B\u525B\u7D50\u675F\u3002","Lobby game has ended":"\u5927\u5EF3\u904A\u6232\u5DF2\u7D50\u675F","Custom message has been received from another player":"\u5DF2\u6536\u5230\u4F86\u81EA\u53E6\u4E00\u73A9\u5BB6\u7684\u81EA\u5B9A\u7FA9\u6D88\u606F","Check if a custom message has been received from another player. Will be true only for one frame.":"\u6AA2\u67E5\u662F\u5426\u5DF2\u6536\u5230\u4F86\u81EA\u53E6\u4E00\u73A9\u5BB6\u7684\u81EA\u5B9A\u7FA9\u6D88\u606F\u3002\u50C5\u5C0D\u4E00\u5E40\u6709\u6548\u3002","Message _PARAM0_ has been received":"\u6D88\u606F _PARAM0_ \u5DF2\u88AB\u63A5\u6536","Objects synchronization rate":"\u7269\u4EF6\u540C\u6B65\u901F\u7387","objects synchronization rate (between 1 and 60, default is 30 times per second)":"\u7269\u4EF6\u540C\u6B65\u901F\u7387\uFF08\u4ECB\u65BC 1 \u548C 60 \u4E4B\u9593\uFF0C\u9ED8\u8A8D\u70BA\u6BCF\u79D2 30 \u6B21\uFF09","objects synchronization rate":"\u7269\u4EF6\u540C\u6B65\u901F\u7387","Sync rate":"\u540C\u6B65\u901F\u7387","Player is host":"\u73A9\u5BB6\u662F\u4E3B\u6A5F","Check if the player is the host. (Player 1 is the host)":"\u6AA2\u67E5\u73A9\u5BB6\u662F\u5426\u70BA\u4E3B\u6A5F\u3002(\u73A9\u5BB61\u70BA\u4E3B\u6A5F)","Any player has left":"\u4EFB\u610F\u73A9\u5BB6\u5DF2\u96E2\u958B","Check if any player has left the lobby game.":"\u6AA2\u67E5\u662F\u5426\u6709\u4EFB\u4F55\u73A9\u5BB6\u96E2\u958B\u5927\u5EF3\u904A\u6232\u3002","Player has left":"\u73A9\u5BB6\u5DF2\u96E2\u958B","Check if the player has left the lobby game.":"\u6AA2\u67E5\u73A9\u5BB6\u662F\u5426\u5DF2\u96E2\u958B\u5927\u5EF3\u904A\u6232\u3002","Player _PARAM0_ has left":"\u73A9\u5BB6 _PARAM0_ \u5DF2\u96E2\u958B","Player number":"\u73A9\u5BB6\u7DE8\u865F","Player number that just left":"\u525B\u525B\u96E2\u958B\u7684\u73A9\u5BB6\u865F\u78BC","Returns the player number of the player that has just left the lobby.":"\u8FD4\u56DE\u525B\u525B\u96E2\u958B\u5927\u5EF3\u7684\u73A9\u5BB6\u865F\u78BC\u3002","Any player has joined":"\u4EFB\u4F55\u73A9\u5BB6\u5DF2\u52A0\u5165","Check if any player has joined the lobby.":"\u6AA2\u67E5\u662F\u5426\u6709\u73A9\u5BB6\u5DF2\u52A0\u5165\u5927\u5EF3\u3002","Player has joined":"\u73A9\u5BB6\u5DF2\u52A0\u5165","Check if the player has joined the lobby.":"\u6AA2\u67E5\u73A9\u5BB6\u662F\u5426\u5DF2\u52A0\u5165\u5927\u5EF3\u3002","Player _PARAM0_ has joined":"\u73A9\u5BB6 _PARAM0_ \u5DF2\u52A0\u5165","Player number that just joined":"\u525B\u525B\u52A0\u5165\u7684\u73A9\u5BB6\u865F\u78BC","Returns the player number of the player that has just joined the lobby.":"\u8FD4\u56DE\u525B\u525B\u52A0\u5165\u5927\u5EF3\u7684\u73A9\u5BB6\u865F\u78BC\u3002","Host is migrating":"\u4E3B\u6A5F\u6B63\u5728\u9077\u79FB","Check if the host is migrating, in order to adapt the game state (like pausing the game).":"\u6AA2\u67E5\u4E3B\u6A5F\u662F\u5426\u6B63\u5728\u9077\u79FB\uFF0C\u4EE5\u8ABF\u6574\u904A\u6232\u72C0\u614B\uFF08\u5982\u66AB\u505C\u904A\u6232\uFF09\u3002","Configure lobby game to end when host leaves":"\u914D\u7F6E\u5927\u5EF3\u904A\u6232\u5728\u4E3B\u6A5F\u96E2\u958B\u6642\u7D50\u675F","Configure the lobby game to end when the host leaves. This will trigger the \"Lobby game has just ended\" condition. (Default behavior is to migrate the host)":"\u914D\u7F6E\u5927\u5EF3\u904A\u6232\u4EE5\u5728\u4E3B\u6A5F\u96E2\u958B\u6642\u7D50\u675F\u3002\u9019\u5C07\u89F8\u767C\u300C\u5927\u5EF3\u904A\u6232\u525B\u525B\u7D50\u675F\u300D\u7684\u689D\u4EF6\u3002\uFF08\u9810\u8A2D\u884C\u70BA\u662F\u9077\u79FB\u4E3B\u6A5F\uFF09","End lobby game when host leaves":"\u5728\u4E3B\u6A5F\u96E2\u958B\u6642\u7D50\u675F\u5927\u5EF3\u904A\u6232","Message data":"\u6D88\u606F\u6578\u64DA","Returns the data received when the specified message was received from another player.":"\u8FD4\u56DE\u5F9E\u53E6\u4E00\u4F4D\u73A9\u5BB6\u6536\u5230\u6307\u5B9A\u6D88\u606F\u6642\u63A5\u6536\u5230\u7684\u6578\u64DA\u3002","Message sender":"\u6D88\u606F\u767C\u9001\u8005","Returns the player number of the sender of the specified message.":"\u8FD4\u56DE\u6307\u5B9A\u6D88\u606F\u7684\u767C\u9001\u8005\u7684\u73A9\u5BB6\u7DE8\u865F\u3002","Number of players in lobby":"\u5927\u5EF3\u4E2D\u7684\u73A9\u5BB6\u4EBA\u6578","the number of players in the lobby":"\u5927\u5EF3\u4E2D\u7684\u73A9\u5BB6\u6578\u91CF","Player is connected":"\u73A9\u5BB6\u5DF2\u9023\u7DDA","Check if the specified player is connected to the lobby.":"\u6AA2\u67E5\u6307\u5B9A\u7684\u73A9\u5BB6\u662F\u5426\u5DF2\u9023\u7DDA\u5230\u5927\u5EF3\u3002","Player _PARAM0_ is connected":"\u73A9\u5BB6 _PARAM0_ \u5DF2\u9023\u7DDA","The position of the player in the lobby (1, 2, ...)":"\u73A9\u5BB6\u5728\u5927\u5EF3\u4E2D\u7684\u4F4D\u7F6E (1, 2, ...)","Current player number in lobby":"\u5927\u5EF3\u4E2D\u7576\u524D\u73A9\u5BB6\u7684\u7DE8\u865F","the current player number in the lobby (1, 2, ...)":"\u5927\u5EF3\u4E2D\u7576\u524D\u73A9\u5BB6\u7DE8\u865F (1, 2, ...)","the current player number in the lobby":"\u5927\u5EF3\u4E2D\u7576\u524D\u73A9\u5BB6\u7684\u7DE8\u865F","Player username in lobby":"\u5927\u5EF3\u4E2D\u7684\u73A9\u5BB6\u7528\u6236\u540D","Get the username of the player in the lobby.":"\u7372\u53D6\u5927\u5EF3\u4E2D\u73A9\u5BB6\u7684\u7528\u6236\u540D\u3002","Current player username in lobby":"\u7576\u524D\u73A9\u5BB6\u5728\u5927\u5EF3\u7684\u7528\u6236\u540D","Get the username of the current player in the lobby.":"\u7372\u53D6\u7576\u524D\u73A9\u5BB6\u5728\u5927\u5EF3\u4E2D\u7684\u7528\u6236\u540D\u3002","Player ping in lobby":"\u5927\u5EF3\u4E2D\u73A9\u5BB6\u7684\u5EF6\u9072","Get the ping of the player in the lobby.":"\u7372\u53D6\u5927\u5EF3\u4E2D\u73A9\u5BB6\u7684\u5EF6\u9072\u3002","Current player ping in lobby":"\u7576\u524D\u73A9\u5BB6\u5728\u5927\u5EF3\u4E2D\u7684 Ping","Get the ping of the current player in the lobby.":"\u7372\u53D6\u7576\u524D\u73A9\u5BB6\u5728\u5927\u5EF3\u4E2D\u7684 Ping\u3002","Player variable ownership":"\u73A9\u5BB6\u8B8A\u91CF\u6240\u6709\u6B0A","the player owning the variable":"\u64C1\u6709\u8B8A\u91CF\u7684\u73A9\u5BB6","the player owning the variable _PARAM1_":"\u64C1\u6709\u8B8A\u91CF _PARAM1_ \u7684\u73A9\u5BB6","Only root variables can change ownership. Arrays and structures children are synchronized with their parent.":"\u53EA\u6709\u6839\u8B8A\u91CF\u53EF\u4EE5\u6539\u8B8A\u6240\u6709\u6B0A\u3002\u6578\u7D44\u548C\u7D50\u69CB\u7684\u5B50\u9805\u8207\u5176\u7236\u9805\u540C\u6B65\u3002","Take ownership of variable":"\u7372\u53D6\u8B8A\u91CF\u7684\u6240\u6709\u6B0A","Take the ownership of the variable. It will then be synchronized to other players, with the current player as the owner.":"\u7372\u53D6\u8B8A\u91CF\u7684\u6240\u6709\u6B0A\u3002\u7136\u5F8C\u5B83\u5C07\u8207\u5176\u4ED6\u73A9\u5BB6\u540C\u6B65\uFF0C\u7576\u524D\u73A9\u5BB6\u70BA\u6240\u6709\u8005\u3002","Take ownership of _PARAM1_":"\u7372\u53D6 _PARAM1_ \u7684\u6240\u6709\u6B0A","Remove ownership of variable":"\u79FB\u9664\u8B8A\u91CF\u7684\u6240\u6709\u6B0A","Remove the ownership of the variable. It will still be synchronized to other players, but the host owns it.":"\u522A\u9664\u8B8A\u91CF\u7684\u6240\u6709\u6B0A\u3002\u5B83\u4ECD\u7136\u6703\u8207\u5176\u4ED6\u73A9\u5BB6\u540C\u6B65\uFF0C\u4F46\u4E3B\u6A5F\u64C1\u6709\u5B83\u3002","Remove ownership of _PARAM1_":"\u522A\u9664 _PARAM1_ \u7684\u6240\u6709\u6B0A","Disable variable synchronization":"\u7981\u7528\u8B8A\u91CF\u540C\u6B65","Disable synchronization of the variable over the network. It will not be sent to other players anymore.":"\u7981\u7528\u8B8A\u91CF\u5728\u7DB2\u7D61\u4E0A\u7684\u540C\u6B65\u3002\u5B83\u5C07\u4E0D\u518D\u767C\u9001\u7D66\u5176\u4ED6\u73A9\u5BB6\u3002","Disable synchronization of _PARAM1_":"\u7981\u7528 _PARAM1_ \u7684\u540C\u6B65","Player owning the object":"\u64C1\u6709\u8A72\u5C0D\u8C61\u7684\u73A9\u5BB6","Who is synchronizing the object to the players. If this is an object controlled by a player, then assign the player number. Otherwise just leave \"Host\" and the host of the game will synchronize the object to the players. (Note: you can change the ownership of the object during the game with corresponding actions).":"\u8AB0\u5728\u5C07\u5C0D\u8C61\u8207\u73A9\u5BB6\u540C\u6B65\u3002\u5982\u679C\u9019\u662F\u4E00\u500B\u7531\u73A9\u5BB6\u63A7\u5236\u7684\u5C0D\u8C61\uFF0C\u5247\u5206\u914D\u73A9\u5BB6\u7DE8\u865F\u3002\u5426\u5247\u53EA\u9700\u4FDD\u7559\u201C\u4E3B\u6A5F\u201D\uFF0C\u904A\u6232\u7684\u4E3B\u6A5F\u5C07\u5C0D\u8C61\u540C\u6B65\u5230\u73A9\u5BB6\u3002 \uFF08\u6CE8\u610F\uFF1A\u60A8\u53EF\u4EE5\u5728\u904A\u6232\u904E\u7A0B\u4E2D\u901A\u904E\u76F8\u61C9\u7684\u64CD\u4F5C\u66F4\u6539\u8A72\u5C0D\u8C61\u7684\u6240\u6709\u6B0A\uFF09\u3002","Action when player disconnects":"\u73A9\u5BB6\u65B7\u958B\u93C8\u63A5\u6642\u7684\u52D5\u4F5C","Multiplayer object":"\u591A\u4EBA\u904A\u6232\u5C0D\u8C61","Allow the object to be synchronized with other players in the lobby.":"\u5141\u8A31\u8A72\u5C0D\u8C61\u8207\u5927\u5EF3\u4E2D\u7684\u5176\u4ED6\u73A9\u5BB6\u540C\u6B65\u3002","Player object ownership":"\u73A9\u5BB6\u5C0D\u8C61\u6240\u6709\u6B0A","the player owning the object":"\u64C1\u6709\u8A72\u5C0D\u8C61\u7684\u73A9\u5BB6","the player owning the instance":"\u64C1\u6709\u5BE6\u4F8B\u7684\u73A9\u5BB6","Is object owned by current player":"\u8A72\u5C0D\u8C61\u662F\u5426\u5C6C\u65BC\u7576\u524D\u73A9\u5BB6","Check if the object is owned by the current player, as a player or the host.":"\u6AA2\u67E5\u5C0D\u8C61\u662F\u5426\u5C6C\u65BC\u7576\u524D\u73A9\u5BB6\uFF0C\u7121\u8AD6\u662F\u4F5C\u70BA\u73A9\u5BB6\u9084\u662F\u4E3B\u6A5F\u3002","Object _PARAM0_ is owned by current player":"\u5C0D\u8C61 _PARAM0_ \u7531\u7576\u524D\u73A9\u5BB6\u64C1\u6709","Take ownership of object":"\u7372\u53D6\u8A72\u5C0D\u8C61\u7684\u6240\u6709\u6B0A","Take the ownership of the object. It will then be synchronized to other players, with the current player as the owner.":"\u7372\u53D6\u8A72\u5C0D\u8C61\u7684\u6240\u6709\u6B0A\u3002\u7136\u5F8C\u5B83\u5C07\u8207\u5176\u4ED6\u73A9\u5BB6\u540C\u6B65\uFF0C\u7576\u524D\u73A9\u5BB6\u70BA\u6240\u6709\u8005\u3002","Take ownership of _PARAM0_":"\u7372\u53D6 _PARAM0_ \u7684\u6240\u6709\u6B0A","Remove object ownership":"\u79FB\u9664\u5C0D\u8C61\u6240\u6709\u6B0A","Remove the ownership of the object from the player. It will still be synchronized to other players, but the host owns it.":"\u5F9E\u73A9\u5BB6\u8EAB\u4E0A\u79FB\u9664\u8A72\u5C0D\u8C61\u7684\u6240\u6709\u6B0A\u3002\u5B83\u4ECD\u6703\u8207\u5176\u4ED6\u73A9\u5BB6\u540C\u6B65\uFF0C\u4F46\u8A72\u5C0D\u8C61\u64C1\u6709\u5B83\u7684\u4E3B\u6A5F\u3002","Remove ownership of _PARAM0_":"\u79FB\u9664 _PARAM0_ \u7684\u6240\u6709\u6B0A","Enable (or disable) the synchronization of a behavior":"\u555F\u7528\uFF08\u6216\u7981\u7528\uFF09\u884C\u70BA\u7684\u540C\u6B65","Enable or disable the synchronization of a behavior over the network. If disabled, the behavior's current state will not be sent to other players anymore.":"\u555F\u7528\u6216\u7981\u7528\u7DB2\u7D61\u4E0A\u884C\u70BA\u7684\u540C\u6B65\u3002\u5982\u679C\u7981\u7528\uFF0C\u8A72\u884C\u70BA\u7684\u7576\u524D\u72C0\u614B\u5C07\u4E0D\u518D\u767C\u9001\u7D66\u5176\u4ED6\u73A9\u5BB6\u3002","Enable synchronization of _PARAM2_ for _PARAM0_: _PARAM3_":"\u70BA _PARAM0_: _PARAM3_ \u555F\u7528 _PARAM2_ \u7684\u540C\u6B65","Multiplayer behavior":"\u591A\u73A9\u5BB6\u884C\u70BA","Object behavior":"\u5C0D\u8C61\u884C\u70BA","Enable synchronization":"\u555F\u7528\u540C\u6B65","Player Authentication":"\u73A9\u5BB6\u8A8D\u8B49","Allow your game to authenticate players.":"\u5141\u8A31\u60A8\u7684\u904A\u6232\u5C0D\u73A9\u5BB6\u9032\u884C\u8EAB\u4EFD\u9A57\u8B49\u3002","Display authentication banner":"\u986F\u793A\u8EAB\u4EFD\u9A57\u8B49\u6A6B\u5E45","Display an authentication banner at the top of the game screen, for the player to log in.":"\u5728\u904A\u6232\u756B\u9762\u9802\u90E8\u986F\u793A\u8A8D\u8B49\u6A6B\u5E45\uFF0C\u4F9B\u73A9\u5BB6\u767B\u9304\u3002","Display an authentication banner":"\u986F\u793A\u8EAB\u4EFD\u9A57\u8B49\u6A6B\u5E45","Hide authentication banner":"\u96B1\u85CF\u8EAB\u4EFD\u9A57\u8B49\u6A6B\u5E45","Hide the authentication banner from the top of the game screen.":"\u96B1\u85CF\u904A\u6232\u5C4F\u5E55\u9802\u90E8\u7684\u8EAB\u4EFD\u9A57\u8B49\u6A6B\u5E45\u3002","Hide the authentication banner":"\u96B1\u85CF\u8EAB\u4EFD\u9A57\u8B49\u6A6B\u5E45","Open authentication window":"\u6253\u958B\u8EAB\u4EFD\u9A57\u8B49\u7A97\u53E3","Open an authentication window for the player to log in.":"\u6253\u958B\u4E00\u500B\u9A57\u8B49\u7A97\u53E3\u4F9B\u73A9\u5BB6\u767B\u9304\u3002","Open an authentication window":"\u6253\u958B\u8EAB\u4EFD\u9A57\u8B49\u7A97\u53E3","Authentication window is open":"\u8EAB\u4EFD\u9A57\u8B49\u7A97\u53E3\u5DF2\u6253\u958B","Check if the authentication window is open.":"\u6AA2\u67E5\u8EAB\u4EFD\u9A57\u8B49\u7A97\u53E3\u662F\u5426\u6253\u958B\u3002","Log out the player":"\u6CE8\u92B7\u73A9\u5BB6","Log out the player.":"\u6CE8\u92B7\u73A9\u5BB6\u3002","Get the username of the authenticated player.":"\u7372\u53D6\u7D93\u904E\u8EAB\u4EFD\u9A57\u8B49\u7684\u73A9\u5BB6\u7684\u7528\u6236\u540D\u3002","User ID":"\u7528\u6236 ID","Get the unique user ID of the authenticated player.":"\u7372\u53D6\u7D93\u904E\u8EAB\u4EFD\u9A57\u8B49\u7684\u73A9\u5BB6\u7684\u552F\u4E00\u7528\u6236 ID\u3002","Player is authenticated":"\u73A9\u5BB6\u5DF2\u901A\u904E\u8EAB\u4EFD\u9A57\u8B49","Check if the player is authenticated.":"\u6AA2\u67E5\u73A9\u5BB6\u662F\u5426\u5DF2\u901A\u904E\u8EAB\u4EFD\u9A57\u8B49\u3002","Player has logged in":"\u73A9\u5BB6\u5DF2\u767B\u9304","Check if the player has just logged in.":"\u6AA2\u67E5\u73A9\u5BB6\u662F\u5426\u525B\u525B\u767B\u9304\u3002","Debugger Tools":"\u8ABF\u8A66\u5668\u5DE5\u5177","Allow to interact with the editor debugger from the game (notably: enable 2D debug draw, log a message in the debugger console).":"\u5141\u8A31\u5F9E\u904A\u6232\u4E2D\u8207\u7DE8\u8F2F\u5668\u8ABF\u8A66\u5668\u4E92\u52D5\uFF08\u7279\u5225\u662F\uFF1A\u555F\u7528 2D \u8ABF\u8A66\u7E6A\u5716\uFF0C\u5728\u8ABF\u8A66\u5668\u63A7\u5236\u53F0\u4E2D\u8A18\u9304\u6D88\u606F\uFF09\u3002","Pause game execution":"\u66AB\u505C\u904A\u6232\u57F7\u884C","This pauses the game, useful for inspecting the game state through the debugger. Note that events will be still executed until the end before the game is paused.":"\u66AB\u505C\u904A\u6232\uFF0C\u53EF\u4EE5\u901A\u904E\u8ABF\u8A66\u5668\u6AA2\u67E5\u904A\u6232\u72C0\u614B\u3002 \u8ACB\u6CE8\u610F\uFF0C\u5728\u904A\u6232\u66AB\u505C\u4E4B\u524D\u4E8B\u4EF6\u4ECD\u5C07\u88AB\u57F7\u884C\u3002","Draw collisions hitboxes and points":"\u7E6A\u5236\u78B0\u649E\u7BB1\u548C\u9EDE","This activates the display of rectangles and information on screen showing the objects bounding boxes (blue), the hitboxes (red) and some points of objects.":"\u9019\u5C07\u6FC0\u6D3B\u77E9\u5F62\u548C\u5728\u5C4F\u5E55\u4E0A\u986F\u793A\u7269\u9AD4\u908A\u754C\u6846(\u85CD\u8272)\u3001hitbox(\u7D05\u8272) \u548C\u7269\u9AD4\u7684\u4E00\u4E9B\u9EDE\u7684\u4FE1\u606F\u7684\u986F\u793A\u3002","Enable debugging view of bounding boxes/collision masks: _PARAM1_ (include invisible objects: _PARAM2_, point names: _PARAM3_, custom points: _PARAM4_)":"\u555F\u7528\u908A\u754C\u6846/\u78B0\u649E\u63A9\u78BC\u7684\u8ABF\u8A66\u8996\u5716: _PARAM1_ (\u5305\u62EC\u4E0D\u53EF\u898B\u7269\u4EF6: _PARAM2_, \u9EDE\u540D: _PARAM3_, \u81EA\u5B9A\u7FA9\u9EDE: _PARAM4_)","Enable debug draw":"\u555F\u7528\u8ABF\u8A66\u7E6A\u5716","Show collisions for hidden objects":"\u986F\u793A\u96B1\u85CF\u7269\u4EF6\u7684\u78B0\u649E","Show points names":"\u986F\u793A\u9EDE\u540D\u7A31","Show custom points":"\u986F\u793A\u81EA\u5B9A\u7FA9\u9EDE","Log a message to the console":"\u5C07\u6D88\u606F\u8A18\u9304\u5230\u63A7\u5236\u81FA","Logs a message to the debugger's console.":"\u5C07\u4E00\u689D\u6D88\u606F\u8A18\u9304\u5230\u8ABF\u8A66\u5668\u7684\u63A7\u5236\u81FA\u3002","Log message _PARAM0_ of type _PARAM1_ to the console in group _PARAM2_":"\u5C07\u985E\u578B\u70BA _PARAM1_ \u7684\u6D88\u606F_PARAM0_ \u8A18\u9304\u5230\u63A7\u5236\u81FA_PARAM2_\u7684\u7D44\u4E2D\u3002","Provides an object to display a video on the scene. The recommended file format is MPEG4, with H264 video codec and AAC audio codec, to maximize the support of the video on different platform and browsers.":"\u63D0\u4F9B\u4E00\u500B\u7269\u4EF6\u4EE5\u5728\u5834\u666F\u4E2D\u986F\u793A\u8996\u983B\u3002\u63A8\u85A6\u7684\u6587\u4EF6\u683C\u5F0F\u70BA MPEG4\uFF0C\u5177\u6709 H264 \u8996\u983B\u7DE8\u89E3\u78BC\u5668\u548C AAC \u97F3\u983B\u7DE8\u89E3\u78BC\u5668\uFF0C\u4EE5\u6700\u5927\u9650\u5EA6\u5730\u652F\u6301\u4E0D\u540C\u5E73\u81FA\u548C\u700F\u89BD\u5668\u4E0A\u7684\u8996\u983B\u3002","Loop the video":"\u5FAA\u74B0\u8996\u983B","Playback settings":"\u56DE\u653E\u8A2D\u5B9A","Video volume (0-100)":"\u8996\u983B\u97F3\u91CF (0-100)","Displays a video.":"\u986F\u793A\u8996\u983B\u3002","Play a video":"\u64AD\u653E\u8996\u983B","Play a video (recommended file format is MPEG4, with H264 video codec and AAC audio codec).":"\u64AD\u653E\u8996\u983B (\u5EFA\u8B70\u7684\u6587\u4EF6\u683C\u5F0F\u70BA MPEG4, \u6709H264 \u8996\u983B\u7DE8\u78BC\u548C AAC \u97F3\u983B\u7DE8\u89E3\u78BC\u5668)\u3002","Play the video of _PARAM0_":"\u64AD\u653E _PARAM0_ \u7684\u8996\u983B","Video object":"\u8996\u983B\u7269\u4EF6","Pause a video":"\u66AB\u505C\u8996\u983B","Pause the specified video.":"\u66AB\u505C\u6307\u5B9A\u7684\u8996\u983B\u3002","Pause video _PARAM0_":"\u66AB\u505C\u8996\u983B _PARAM0_","Loop a video":"\u5FAA\u74B0\u64AD\u653E\u8996\u983B","Loop the specified video.":"\u5FAA\u74B0\u6307\u5B9A\u7684\u8996\u983B\u3002","Loop video of _PARAM0_: _PARAM1_":"_PARAM0_\u5FAA\u74B0\u8996\u983B: _PARAM1_","Activate loop":"\u6FC0\u6D3B\u5FAA\u74B0","Mute a video":"\u975C\u97F3\u8996\u983B","Mute, or unmute, the specified video.":"\u975C\u97F3\u6216\u53D6\u6D88\u975C\u97F3\u6307\u5B9A\u7684\u8996\u983B\u3002","Mute video of _PARAM0_: _PARAM1_":"_PARAM0_\u8996\u983B\u7121\u8072: _PARAM1_","Activate mute":"\u6253\u958B\u8072\u97F3","Current time":"\u7576\u524D\u6642\u9593","Set the time of the video":"\u8A2D\u5B9A\u8996\u983B\u6642\u9593","the time":"\u6642\u9593","Position (in seconds)":"\u4F4D\u7F6E(\u79D2)","Volume":"\u97F3\u91CF","Set the volume of the video object.":"\u8A2D\u5B9A\u8996\u983B\u7269\u4EF6\u7684\u97F3\u91CF\u3002","the volume":"\u8A2D\u5B9A\u97F3\u91CF","Volume (0-100)":"\u97F3\u91CF (0-100)","Get the volume":"\u7372\u53D6\u97F3\u91CF","Get the volume of a video object, between 0 (muted) and 100 (maximum).":"\u7372\u53D6\u8996\u983B\u7269\u4EF6\u7684\u97F3\u91CF\uFF0C\u4ECB\u4E8E 0 (\u7121\u8072) \u548C 100 (\u6700\u5927)\u3002","Is played":"\u5DF2\u64AD\u653E","Check if a video is played.":"\u6AA2\u67E5\u8A72\u8996\u983B\u662F\u5426\u5DF2\u64AD\u653E","_PARAM0_ is played":"_PARAM0_ \u662F\u64AD\u653E","Is paused":"\u70BA\u66AB\u505C\u6642","Check if the video is paused.":"\u6AA2\u6E2C\u8996\u983B\u662F\u5426\u5DF2\u66AB\u505C","_PARAM0_ is paused":"_PARAM0_ \u5DF2\u66AB\u505C","Is looped":"\u662F\u5FAA\u74B0","Check if the video is looped.":"\u6AA2\u67E5\u8996\u983B\u662F\u5426\u5728\u5FAA\u74B0\u64AD\u653E","_PARAM0_ is looped":"_PARAM0_ \u662F\u5FAA\u74B0\u7684","Compare the current volume of a video object.":"\u6BD4\u8F03\u7576\u524D\u8996\u983B\u7269\u4EF6\u7684\u97F3\u91CF\u3002","Volume to compare to (0-100)":"\u8981\u6BD4\u8F03\u7684\u97F3\u91CF (0-100)","Is muted":"\u975C\u97F3","Check if a video is muted.":"\u6AA2\u67E5\u8996\u983B\u662F\u5426\u5DF2\u975C\u97F3","_PARAM0_ is muted":"_PARAM0_\u662F\u975C\u97F3\u7684","Get current time":"\u7372\u53D6\u7576\u524D\u6642\u9593","Return the current time of a video object (in seconds).":"\u8FD4\u56DE\u8996\u983B\u7269\u4EF6\u7684\u7576\u524D\u6642\u9593(\u79D2)\u3002","Get the duration":"\u7372\u53D6\u6642\u9577","Return the duration of a video object (in seconds).":"\u8FD4\u56DE\u8996\u983B\u7269\u4EF6\u7684\u6642\u9577(\u79D2)\u3002","Compare the duration of a video object":"\u6BD4\u8F03\u8996\u983B\u7269\u4EF6\u7684\u6301\u7E8C\u6642\u9593","the duration (in seconds)":"\u6301\u7E8C\u6642\u9593(\u79D2)","Compare the current time of a video object":"\u6BD4\u8F03\u8996\u983B\u7269\u4EF6\u7684\u7576\u524D\u6642\u9593","the current time (in seconds)":"\u7576\u524D\u6642\u9593(\u79D2)","Time to compare to (in seconds)":"\u6BD4\u8F03\u6642\u9593(\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Is ended":"\u5DF2\u7D50\u675F","Check if a video is ended":"\u6AA2\u67E5\u8996\u983B\u662F\u5426\u7D50\u675F","_PARAM0_ is ended":"_PARAM0_ \u5DF2\u7D50\u675F","Set opacity":"\u8A2D\u5B9A\u4E0D\u900F\u660E\u5EA6","Set opacity of the specified video object.":"\u8A2D\u5B9A\u6307\u5B9A\u8996\u983B\u7269\u4EF6\u7684\u4E0D\u900F\u660E\u5EA6\u3002","Compare the opacity of a video object":"\u6BD4\u8F03\u8996\u983B\u7269\u4EF6\u7684\u4E0D\u900F\u660E\u5EA6","Get current opacity":"\u7372\u53D6\u7576\u524D\u4E0D\u900F\u660E\u5EA6","Return the opacity of a video object":"\u8FD4\u56DE\u8996\u983B\u7269\u4EF6\u7684\u4E0D\u900F\u660E\u5EA6","Set playback speed":"\u8A2D\u5B9A\u56DE\u653E\u901F\u5EA6","Set playback speed of the specified video object, (1 = the default speed, >1 = faster and <1 = slower).":"\u8A2D\u5B9A\u6307\u5B9A\u8996\u983B\u7269\u4EF6\u7684\u64AD\u653E\u901F\u5EA6(1= \u9ED8\u8A8D\u901F\u5EA6, >1 = \u66F4\u5FEB, <1 = \u66F4\u6162).","the playback speed":"\u64AD\u653E\u901F\u5EA6","Playback speed (1 by default)":"\u64AD\u653E\u901F\u5EA6 (1 \u9ED8\u8A8D)","Playback speed ":"\u56DE\u653E\u901F\u5EA6 ","Compare the playback speed of a video object":"\u6BD4\u8F03\u8996\u983B\u7269\u4EF6\u7684\u64AD\u653E\u901F\u5EA6","Get current playback speed":"\u7372\u53D6\u7576\u524D\u64AD\u653E\u901F\u5EA6","Return the playback speed of a video object":"\u8FD4\u56DE\u8996\u983B\u7269\u4EF6\u7684\u64AD\u653E\u901F\u5EA6","Spatial sound":"\u7A7A\u9593\u8072\u97F3","Allow positioning sounds in a 3D space. The stereo system of the device is used to simulate the position of the sound and to give the impression that the sound is located somewhere around the player.":"\u5141\u8A31\u57283D\u7A7A\u9593\u5167\u653E\u7F6E\u8072\u97F3\u3002 \u8A2D\u5099\u7684\u7ACB\u9AD4\u7CFB\u7D71\u7528\u4E8E\u6A21\u64EC\u8072\u97F3\u7684\u4F4D\u7F6E\uFF0C\u5E76\u7D66\u4EBA\u7559\u4E0B\u8072\u97F3\u4F4D\u4E8E\u64AD\u653E\u5668\u5468\u570D\u67D0\u8655\u7684\u5370\u8C61\u3002","Set position of sound":"\u8A2D\u5B9A\u8072\u97F3\u4F4D\u7F6E","Sets the spatial position of a sound. When a sound is at a distance of 1 to the listener, it's heard at 100% volume. Then, it follows an *inverse distance model*. At a distance of 2, it's heard at 50%, and at a distance of 4 it's heard at 25%.":"\u8A2D\u5B9A\u8072\u97F3\u7684\u7A7A\u9593\u4F4D\u7F6E\u3002\u7576\u8072\u97F3\u8DDD\u96E2\u76E3\u807D\u56681\u6642\uFF0C\u5B83\u6703\u807D\u5230100%\u7684\u97F3\u91CF\u3002 \u7136\u540E\u6CBF\u7528*\u53CD\u5411\u8DDD\u96E2\u6A21\u578B*\u3002 \u8DDD\u96E22\u6642\uFF0C\u807D\u5230\u7684\u662F50%\uFF0C\u800C\u8DDD\u96E24\u6642\uFF0C\u807D\u5230\u7684\u662F25%\u3002","Set position of sound on channel _PARAM1_ to position _PARAM2_, _PARAM3_, _PARAM4_":"\u8A2D\u5B9A _PARAM1_ \u983B\u9053\u8072\u97F3\u7684\u4F4D\u7F6E\u70BA _PARAM2_, _PARAM3_, _PARAM4_","Channel":"\u901A\u9053","Listener position":"\u76E3\u807D\u5668\u4F4D\u7F6E","Change the spatial position of the listener/player.":"\u66F4\u6539\u76E3\u807D\u5668/\u64AD\u653E\u5668\u7684\u7A7A\u9593\u4F4D\u7F6E\u3002","Change the listener position to _PARAM0_, _PARAM1_, _PARAM2_":"\u5C07\u76E3\u807D\u5668\u4F4D\u7F6E\u66F4\u6539\u70BA _PARAM0_\u3001_PARAM1_\u3001_PARAM2_","Lights":"\u71C8\u5149","Light Obstacle Behavior":"\u5149\u7DDA\u969C\u7919\u884C\u70BA","Flag objects as being obstacles to 2D lights. The light emitted by light objects will be stopped by the object. This does not work on 3D objects and 3D games.":"\u5C07\u7269\u9AD4\u6A19\u8A18\u70BA2D\u71C8\u5149\u7684\u969C\u7919\u7269\u3002\u71C8\u5149\u7269\u4EF6\u767C\u51FA\u7684\u5149\u7DDA\u5C07\u88AB\u8A72\u7269\u9AD4\u963B\u6B62\u3002\u9019\u4E0D\u9069\u7528\u65BC3D\u7269\u4EF6\u548C3D\u904A\u6232\u3002","When activated, display the lines used to render the light - useful to understand how the light is rendered on screen.":"\u555F\u7528\u6642\uFF0C\u986F\u793A\u7528\u4E8E\u6E32\u67D3\u71C8\u7684\u7DDA\u689D - \u6709\u52A9\u4E8E\u7406\u89E3\u5C4F\u5E55\u4E0A\u71C8\u5149\u7684\u6E32\u67D3\u65B9\u5F0F\u3002","Light texture (optional)":"\u71C8\u5149\u7D0B\u7406(\u53EF\u9078)","A texture to be used to display the light. If you don't specify a texture, the light is rendered as fading from bright, in its center, to dark.":"\u7528\u4E8E\u986F\u793A\u71C8\u5149\u7684\u7D0B\u7406. \u5982\u679C\u60A8\u6C92\u6709\u6307\u5B9A\u7D0B\u7406\uFF0C\u5149\u7DDA\u5C07\u6703\u8B8A\u70BA\u5F9E\u4EAE\u9E97\u3001\u4E2D\u5FC3\u8B8A\u70BA\u9ED1\u6697\u3002","Light":"\u71C8\u5149","Displays a 2D light on the scene, with a customizable radius and color. Then add the Light Obstacle behavior to the objects that must act as obstacle to the lights.":"\u5728\u5834\u666F\u4E2D\u986F\u793A 2D \u5149\u6E90\uFF0C\u4E26\u5177\u6709\u53EF\u81EA\u5B9A\u7FA9\u7684\u534A\u5F91\u548C\u984F\u8272\u3002\u7136\u5F8C\u5C07\u5149\u7DDA\u969C\u7919\u884C\u70BA\u6DFB\u52A0\u5230\u5FC5\u9808\u4F5C\u70BA\u71C8\u5177\u969C\u7919\u7684\u7269\u4EF6\u4E2D\u3002","Light radius":"\u71C8\u5149\u534A\u5F91","Set the radius of light object":"\u8A2D\u5B9A\u71C8\u5149\u7269\u4EF6\u7684\u534A\u5F91","Set the radius of _PARAM0_ to: _PARAM1_":"\u5C07 _PARAM0_ \u7684\u534A\u5F91\u8A2D\u70BA\uFF1A_PARAM1_","Light color":"\u5149\u7684\u984F\u8272","Set the color of light object in format \"R;G;B\" string.":"\u4EE5\"R;G;B\"\u5B57\u7B26\u4E32\u7684\u683C\u5F0F\u8A2D\u5B9A\u71C8\u5149\u7269\u4EF6\u7684\u984F\u8272\u3002","Set the color of _PARAM0_ to: _PARAM1_":"\u8A2D\u5B9A _PARAM0_ \u7684\u984F\u8272\u81F3_PARAM1_","Allow your game to send scores and interact with the Facebook Instant Games platform.":"\u5141\u8A31\u60A8\u7684\u904A\u6232\u767C\u9001\u5206\u6578\u5E76\u8207 Facebook \u5373\u6642\u904A\u6232\u5E73\u81FA\u4EA4\u4E92\u3002","Save player data":"\u4FDD\u5B58\u73A9\u5BB6\u8CC7\u6599","Save the content of the given scene variable in the player data, stored on Facebook Instant Games servers":"\u5C07\u6307\u5B9A\u5834\u666F\u8B8A\u91CF\u7684\u5167\u5BB9\u4FDD\u5B58\u5230\u73A9\u5BB6\u8CC7\u6599\u4E2D\uFF0C\u5B58\u5132\u5728 Facebook \u5373\u6642\u904A\u6232\u670D\u52D9\u5668","Save the content of _PARAM1_ in key _PARAM0_ of player data (store success message in _PARAM2_ or error in _PARAM3_)":"\u5C07_PARAM1_ \u7684\u5167\u5BB9\u4FDD\u5B58\u5230\u73A9\u5BB6\u8CC7\u6599\u7684\u95DC\u9375_PARAM0_ (\u5B58\u5132\u6210\u529F\u6D88\u606F\u5728 _PARAM2_ \u4E2D\u6216\u932F\u8AA4\u5728 _PARAM3_)","Player data":"\u73A9\u5BB6\u8CC7\u6599","Variable where to store the success message (optional)":"\u8B8A\u91CF\u6210\u529F\u5B58\u5132\u5230\u4F55\u8655\u7684\u6D88\u606F(\u53EF\u9078)","Variable where to store the error message (optional, if an error occurs)":"\u5B58\u5132\u932F\u8AA4\u4FE1\u606F\u7684\u8B8A\u91CF(\u53EF\u9078\uFF0C\u5982\u679C\u767C\u751F\u932F\u8AA4)","Load player data":"\u52A0\u8F09\u73A9\u5BB6\u8CC7\u6599","Load the player data with the given key in a variable":"\u7528\u8B8A\u91CF\u4E2D\u7D66\u5B9A\u7684\u5BC6\u9470\u52A0\u8F09\u73A9\u5BB6\u8CC7\u6599","Load player data with key _PARAM0_ in _PARAM1_ (or error in _PARAM2_)":"\u5728 _PARAM1_ \u4E2D\u7528\u9375_PARAM0_ \u52A0\u8F09\u73A9\u5BB6\u8CC7\u6599(\u6216_PARAM2_\u4E2D\u7684\u932F\u8AA4)","Data key name (e.g: \"Lives\")":"\u8CC7\u6599\u5BC6\u9470\u540D\u7A31(\u5982\uFF1A\u201C\u751F\u547D\u201D)","Variable where to store loaded data":"\u5B58\u5132\u52A0\u8F09\u8CC7\u6599\u7684\u8B8A\u91CF","Save the score, and optionally the content of the given variable in the player score, for the given metadata.":"\u70BA\u7D66\u5B9A\u7684\u5143\u8CC7\u6599\u4FDD\u5B58\u5F97\u5206\uFF0C\u5E76\u53EF\u9078\u5730\u4FDD\u5B58\u73A9\u5BB6\u5206\u6578\u4E2D\u7D66\u5B9A\u7684\u8B8A\u91CF\u5167\u5BB9\u3002","In leaderboard _PARAM0_, save score _PARAM1_ for the player and extra data from _PARAM2_ (store success message in _PARAM3_ or error in _PARAM4_)":"\u5728\u6392\u884C\u699C_PARAM0_\u4E2D\uFF0C\u70BA\u73A9\u5BB6\u4FDD\u5B58\u5F97\u5206_PARAM1_\u4EE5\u53CA\u5F9E _PARAM2_ \u7684\u984D\u5916\u8CC7\u6599(\u5B58\u5132\u6210\u529F\u6D88\u606F\u5728 _PARAM3_ \u6216\u932F\u8AA4 _PARAM4_)","Optional variable with metadata to save":"\u5E36\u6709\u5143\u8CC7\u6599\u7684\u53EF\u9078\u8B8A\u91CF\u53EF\u4FDD\u5B58","Load player entry":"\u52A0\u8F09\u53C3\u8207\u7684\u73A9\u5BB6","Load the player entry in the given leaderboard":"\u52A0\u8F09\u7D66\u5B9A\u6392\u884C\u699C\u4E2D\u53C3\u8207\u7684\u73A9\u5BB6","Load player entry from leaderboard _PARAM0_. Set rank in _PARAM1_, score in _PARAM2_ (extra data if any in _PARAM3_ and error in _PARAM4_)":"\u5F9E\u6392\u884C\u699C_PARAM0_\u52A0\u8F09\u53C3\u8207\u73A9\u5BB6\u3002\u5728_PARAM1_\u4E2D\u8A2D\u5B9A\u6392\u884C\uFF0C\u4EE5_PARAM2_ \u70BA\u5206\u6578(\u5982\u679C\u5728_PARAM3_\u4E2D\u5B58\u5728\u4EFB\u4F55\u984D\u5916\u8CC7\u6599\uFF0C\u5247\u5728_PARAM4_\u4E2D\u8A2D\u5B9A\u932F\u8AA4)","Leaderboard name (e.g: \"PlayersBestTimes\")":"\u6392\u884C\u699C\u540D\u7A31(\u5982\"\u73A9\u5BB6\u6700\u4F73\u6642\u9593\")","Variable where to store the player rank (of -1 if not ranked)":"\u5B58\u653E\u73A9\u5BB6\u6392\u540D\u7684\u8B8A\u91CF(\u5982\u679C\u6C92\u6709\u6392\u540D\u70BA -1 )","Variable where to store the player score (of -1 if no score)":"\u5B58\u653E\u73A9\u5BB6\u6392\u540D\u7684\u8B8A\u91CF(\u5982\u679C\u6C92\u6709\u6392\u540D\u70BA -1 )","Variable where to store extra data (if any)":"\u5B58\u5132\u984D\u5916\u8CC7\u6599\u7684\u8B8A\u91CF(\u5982\u679C\u6709)","Check if ads are supported":"\u6AA2\u67E5\u662F\u5426\u652F\u6301\u5EE3\u544A","Check if showing ads is supported on this device (only mobile phones can show ads)":"\u6AA2\u67E5\u662F\u5426\u5728\u6B64\u8A2D\u5099\u4E0A\u652F\u6301\u986F\u793A\u5EE3\u544A (\u53EA\u6709\u624B\u6A5F\u53EF\u4EE5\u986F\u793A\u5EE3\u544A)","Ads can be shown on this device":"\u5EE3\u544A\u53EF\u4EE5\u5728\u6B64\u8A2D\u5099\u4E0A\u986F\u793A","Is the interstitial ad ready":"\u63D2\u4EF6\u662F\u5426\u5DF2\u6E96\u5099\u597D","Check if the interstitial ad requested from Facebook is loaded and ready to be shown.":"\u6AA2\u67E5\u662F\u5426\u5F9E Facebook \u8ACB\u6C42\u7684\u63D2\u4EF6\u5DF2\u52A0\u8F09\u5E76\u6E96\u5099\u986F\u793A\u3002","The interstitial ad is loaded and ready to be shown":"\u63D2\u4EF6\u5DF2\u52A0\u8F09\u5E76\u6E96\u5099\u986F\u793A","Load and prepare an interstitial ad":"\u52A0\u8F09\u5E76\u6E96\u5099\u63D2\u5EE3\u544A","Request and load an interstitial ad from Facebook, so that it is ready to be shown.":"\u5F9EFacebook\u8ACB\u6C42\u5E76\u52A0\u8F09\u63D2\u5EE3\u544A\uFF0C\u4EE5\u4FBF\u6E96\u5099\u597D\u986F\u793A\u3002","Request and load an interstitial ad from Facebook (ad placement id: _PARAM0_, error in _PARAM1_)":"\u8ACB\u6C42\u5E76\u5F9EFacebook\u52A0\u8F09\u63D2\u8CBC(\u5EE3\u544A\u4F4D\u7F6Eid: _PARAM0_, \u932F\u8AA4\u5728 _PARAM1_)","The Ad Placement id (can be found while setting up the ad on Facebook)":"\u5EE3\u544A\u4F4D\u7F6EID (\u5728\u8A2D\u5B9A\u5EE3\u544A\u5230Facebook\u6642\u53EF\u4EE5\u627E\u5230)","Show the loaded interstitial ad":"\u986F\u793A\u52A0\u8F09\u63D2\u7684\u5EE3\u544A","Show the interstitial ad previously loaded in memory. This won't work if you did not load the interstitial before.":"\u986F\u793A\u4E4B\u524D\u52A0\u8F09\u7684\u63D2\u4EF6\u5EE3\u544A\u3002\u5982\u679C\u4F60\u4EE5\u524D\u6C92\u6709\u52A0\u8F09\u63D2\u4EF6\uFF0C\u9019\u5C07\u7121\u6CD5\u5DE5\u4F5C\u3002","Show the interstitial ad previously loaded in memory (if any error, store it in _PARAM0_)":"\u5728\u5167\u5B58\u4E2D\u986F\u793A\u4EE5\u524D\u52A0\u8F09\u7684\u63D2\u4EF6(\u5982\u679C\u6709\u4EFB\u4F55\u932F\u8AA4\uFF0C\u8ACB\u5728 _PARAM0_)","Is the rewarded video ready":"\u734E\u52F5\u7684\u8996\u983B\u5DF2\u6E96\u5099\u597D","Check if the rewarded video requested from Facebook is loaded and ready to be shown.":"\u6AA2\u67E5\u662F\u5426\u5F9E Facebook \u8ACB\u6C42\u7684\u734E\u52F5\u8996\u983B\u5DF2\u52A0\u8F09\u5E76\u6E96\u5099\u986F\u793A\u3002","The rewarded video is loaded and ready to be shown":"\u734E\u52F5\u7684\u8996\u983B\u5DF2\u52A0\u8F09\u5E76\u6E96\u5099\u986F\u793A","Load and prepare a rewarded video":"\u52A0\u8F09\u5E76\u6E96\u5099\u734E\u52F5\u7684\u8996\u983B","Request and load a rewarded video from Facebook, so that it is ready to be shown.":"\u5F9EFacebook\u8ACB\u6C42\u5E76\u52A0\u8F09\u734E\u52F5\u8996\u983B\uFF0C\u4EE5\u4FBF\u6E96\u5099\u597D\u64AD\u653E\u3002","Request and load a rewarded video from Facebook (ad placement id: _PARAM0_, error in _PARAM1_)":"\u5F9E Facebook \u8ACB\u6C42\u5E76\u52A0\u8F09\u734E\u52F5\u8996\u983B (\u5EE3\u544A\u4F4D\u7F6E: _PARAM0_, \u932F\u8AA4\u5728 _PARAM1_)","Show the loaded rewarded video":"\u986F\u793A\u52A0\u8F09\u7684\u734E\u52F5\u8996\u983B","Show the rewarded video previously loaded in memory. This won't work if you did not load the video before.":"\u5728\u5167\u5B58\u4E2D\u986F\u793A\u4EE5\u524D\u52A0\u8F09\u904E\u7684\u734E\u52F5\u8996\u983B\u3002\u5982\u679C\u60A8\u4EE5\u524D\u6C92\u6709\u52A0\u8F09\u8996\u983B\uFF0C\u9019\u5C07\u7121\u6CD5\u4F7F\u7528\u3002","Show the rewarded video previously loaded in memory (if any error, store it in _PARAM0_)":"\u5728\u5167\u5B58\u4E2D\u986F\u793A\u4E4B\u524D\u52A0\u8F09\u7684\u734E\u52F5\u8996\u983B(\u5982\u679C\u6709\u4EFB\u4F55\u932F\u8AA4\uFF0C\u8ACB\u5728 _PARAM0_)","Player identifier":"\u73A9\u5BB6ID","Get the player unique identifier":"\u7372\u53D6\u73A9\u5BB6\u7684\u552F\u4E00\u6A19\u8B58\u7B26","Player name":"\u73A9\u5BB6\u540D\u7A31","Get the player name":"\u7372\u53D6\u73A9\u5BB6\u540D\u7A31","3D physics engine":"3D\u7269\u7406\u5F15\u64CE","If enabled, the object won't rotate and will stay at the same angle.":"\u5982\u679C\u555F\u7528\uFF0C\u7269\u4EF6\u5C07\u4E0D\u6703\u65CB\u8F49\u4E26\u5C07\u4FDD\u6301\u5728\u76F8\u540C\u7684\u89D2\u5EA6\u3002","Capsule":"\u81A0\u56CA","Sphere":"\u7403","Cylinder":"\u5713\u67F1","Mesh (works for Static only)":"Mesh (\u50C5\u9069\u7528\u65BC\u975C\u614B)","Simplified 3D model (leave empty to use object's one)":"\u7C21\u5316\u7684 3D \u6A21\u578B\uFF08\u7559\u7A7A\u4EE5\u4F7F\u7528\u7269\u9AD4\u7684\u6A21\u578B\uFF09","Mass override":"Mass override","Leave at 0 to use the density.":"Leave at 0 to use the density.","Linear damping reduces an object's movement speed over time, making its motion slow down smoothly.":"\u7DDA\u6027\u963B\u5C3C\u96A8\u8457\u6642\u9593\u63A8\u79FB\u6E1B\u5C11\u7269\u9AD4\u7684\u79FB\u52D5\u901F\u5EA6\uFF0C\u8B93\u5176\u904B\u52D5\u5E73\u7A69\u6E1B\u901F\u3002","Angular damping reduces an object's rotational speed over time, making its spins slow down smoothly.":"\u89D2\u963B\u5C3C\u96A8\u8457\u6642\u9593\u63A8\u79FB\u6E1B\u5C11\u7269\u9AD4\u7684\u65CB\u8F49\u901F\u5EA6\uFF0C\u8B93\u5176\u65CB\u8F49\u5E73\u7A69\u6E1B\u901F\u3002","Gravity Scale multiplies the world's gravity for a specific body, making it experience stronger or weaker gravitational force than normal.":"\u91CD\u529B\u7E2E\u653E\u5C07\u4E16\u754C\u7684\u91CD\u529B\u4E58\u4EE5\u7279\u5B9A\u7269\u9AD4\u7684\u503C\uFF0C\u4F7F\u5176\u7D93\u6B77\u6BD4\u6B63\u5E38\u66F4\u5F37\u6216\u66F4\u5F31\u7684\u91CD\u529B\u3002","Simulate realistic 3D physics for this object including gravity, forces, collisions, etc.":"\u70BA\u6B64\u7269\u4EF6\u6A21\u64EC\u771F\u5BE6\u7684 3D \u7269\u7406\u6548\u679C\uFF0C\u5305\u62EC\u91CD\u529B\u3001\u529B\u3001\u78B0\u649E\u7B49\u3002","Gravity (in Newton)":"\u91CD\u529B(\u725B\u9813)","World gravity on Z axis":"Z\u8EF8\u4E0A\u7684\u4E16\u754C\u91CD\u529B","the world gravity on Z axis":"Z\u8EF8\u4E0A\u7684\u4E16\u754C\u91CD\u529B","Enable or disable an object fixed rotation. If enabled the object won't be able to rotate. This action has no effect on characters.":"\u555F\u7528\u6216\u7981\u7528\u7269\u4EF6\u56FA\u5B9A\u65CB\u8F49\u3002\u5982\u679C\u555F\u7528\uFF0C\u7269\u4EF6\u5C07\u7121\u6CD5\u65CB\u8F49\u3002\u6B64\u64CD\u4F5C\u5C0D\u89D2\u8272\u6C92\u6709\u5F71\u97FF\u3002","Modify an object shape scale. It affects custom shape dimensions. If custom dimensions are not set, the body will be scaled automatically to the object size.":"\u4FEE\u6539\u7269\u4EF6\u5F62\u72C0\u6BD4\u4F8B\u3002\u5B83\u5F71\u97FF\u81EA\u5B9A\u7FA9\u5F62\u72C0\u5C3A\u5BF8\u3002\u5982\u679C\u81EA\u5B9A\u7FA9\u5C3A\u5BF8\u6C92\u6709\u8A2D\u5B9A\uFF0C\u7269\u9AD4\u5C07\u81EA\u52D5\u7E2E\u653E\u5230\u7269\u4EF6\u5C3A\u5BF8\u3002","the object density. The body's density and volume determine its mass.":"\u4FEE\u6539\u7269\u4EF6\u5BC6\u5EA6\u3002\u8EAB\u9AD4\u7684\u5BC6\u5EA6\u548C\u9AD4\u7A4D\u6C7A\u5B9A\u5176\u8CEA\u91CF\u3002","Shape offset X":"\u5F62\u72C0\u504F\u79FB X","the object shape offset on X.":"\u7269\u4EF6\u7684\u5F62\u72C0\u504F\u79FB\u5728 X\u3002","the shape offset on X":"\u5F62\u72C0\u504F\u79FB\u5728 X","Shape offset Y":"\u5F62\u72C0\u504F\u79FB Y","the object shape offset on Y.":"\u7269\u4EF6\u7684\u5F62\u72C0\u504F\u79FB\u5728 Y\u3002","the shape offset on Y":"Y\u8EF8\u5F62\u72C0\u504F\u79FB","Shape offset Z":"\u5F62\u72C0\u504F\u79FB Z","the object shape offset on Z.":"\u7269\u4EF6\u7684\u5F62\u72C0\u504F\u79FB\u5728 Z\u3002","the shape offset on Z":"\u5F62\u72C0\u504F\u79FB\u5728 Z","the object friction. How much energy is lost from the movement of one object over another. The combined friction from two bodies is calculated as 'sqrt(bodyA.friction * bodyB.friction)'.":"\u4FEE\u6539\u7269\u9AD4\u6469\u64E6\u529B\u3002\u4E00\u500B\u7269\u9AD4\u79FB\u52D5\u5230\u53E6\u4E00\u500B\u7269\u9AD4\u4E0A\u6703\u907A\u5931\u591A\u5C11\u80FD\u91CF\u3002 \u5169\u500B\u7269\u9AD4\u7684\u5408\u5E76\u6469\u64E6\u662F\u201Csqrt(bodyA.friction * bodyB.friction)\u201D\u3002","the object restitution. Energy conservation on collision. The combined restitution from two bodies is calculated as 'max(bodyA.restitution, bodyB.restitution)'.":"\u4FEE\u6539\u7269\u4EF6\u6062\u5FA9\u3002\u78B0\u649E\u6642\u7BC0\u80FD\u3002\u4F86\u81EA\u5169\u500B\u5BE6\u9AD4\u7684\u5408\u5E76\u88DC\u511F\u88AB\u8A08\u7B97\u70BA\u201C max\uFF08bodyA.restitution\uFF0CbodyB.restitution\uFF09\u201D\u3002","the object linear damping. How much movement speed is lost across the time.":"\u4FEE\u6539\u7269\u4EF6\u7DDA\u6027\u963B\u5C3C\u3002\u55AE\u4F4D\u6642\u9593\u5167\u901F\u5EA6\u964D\u4F4E\u5927\u5C0F\u3002","the object angular damping. How much angular speed is lost across the time.":"\u4FEE\u6539\u7269\u4EF6\u89D2\u5EA6\u963B\u5C3C\u3002\u6574\u500B\u6642\u9593\u640D\u5931\u4E86\u591A\u5C11\u89D2\u901F\u5EA6\u3002","the object gravity scale. The gravity applied to an object is the world gravity multiplied by the object gravity scale.":"\u4FEE\u6539\u7269\u4EF6\u91CD\u529B\u5C3A\u5BF8\u3002\u9069\u7528\u4E8E\u7269\u4EF6\u7684\u91CD\u529B\u5C3A\u5BF8\u662F\u4E16\u754C\u91CD\u529B\u4E58\u4EE5\u7269\u4EF6\u91CD\u529B\u6BD4\u4F8B\u3002","Layer (1 - 8)":"\u5716\u5C64(1 - 8)","Mask (1 - 8)":"\u906E\u7F69 (1 - 8)","the object linear velocity on X":"the object linear velocity on X","the object linear velocity on Y":"the object linear velocity on Y","Linear velocity Z":"\u7DDA\u6027\u901F\u5EA6 Z","the object linear velocity on Z":"the object linear velocity on Z","the linear velocity on Z":"Z\u4E0A\u7684\u7DDA\u6027\u901F\u5EA6","the object linear velocity length":"the object linear velocity length","Angular velocity X":"\u89D2\u901F\u5EA6 X","the object angular velocity around X":"the object angular velocity around X","the angular velocity around X":"\u7E5EX\u7684\u89D2\u901F\u5EA6","Angular velocity Y":"\u89D2\u901F\u5EA6 Y","the object angular velocity around Y":"the object angular velocity around Y","the angular velocity around Y":"\u7E5EY\u7684\u89D2\u901F\u5EA6","Angular velocity Z":"\u89D2\u901F\u5EA6 Z","the object angular velocity around Z":"the object angular velocity around Z","the angular velocity around Z":"\u7E5EZ\u7684\u89D2\u901F\u5EA6","Apply force (at a point)":"\u65BD\u52A0\u529B\u91CF (\u5728\u67D0\u4E00\u9EDE)","Apply a force of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ at _PARAM5_ ; _PARAM6_ ; _PARAM7_":"\u5C0D_PARAM0_\u65BD\u52A0\u9577\u5EA6\u70BA_PARAM2_\uFF1B_PARAM3_\uFF1B_PARAM4_\u7684\u529B\u65BC_PARAM5_\uFF1B_PARAM6_\uFF1B_PARAM7_","Z component (N)":"Z \u7D44\u4EF6 (N)","Application point on Z axis":"Z \u8EF8\u4E0A\u7684\u61C9\u7528\u9EDE","Use `MassCenterX`, `MassCenterY` and `MassCenterZ` expressions to avoid any rotation.":"\u4F7F\u7528 `MassCenterX`\u3001`MassCenterY` \u548C `MassCenterZ` \u8868\u9054\u5F0F\u4F86\u907F\u514D\u4EFB\u4F55\u65CB\u8F49\u3002","Apply force (at center)":"\u65BD\u52A0\u529B\u91CF (\u5728\u4E2D\u5FC3)","Apply a force of _PARAM2_ ; _PARAM3_ ; _PARAM4_ at the center of _PARAM0_":"\u5728_PARAM0_\u7684\u4E2D\u5FC3\u65BD\u52A0_PARAM2_\uFF1B_PARAM3_\uFF1B_PARAM4_\u7684\u529B","Apply to _PARAM0_ a force of length _PARAM2_ towards _PARAM3_ ; _PARAM4_ ; _PARAM5_":"\u5C0D_PARAM0_\u65BD\u52A0\u9577\u5EA6\u70BA_PARAM2_\u7684\u529B\uFF0C\u671D\u5411_PARAM3_\uFF1B_PARAM4_\uFF1B_PARAM5_","Apply impulse (at a point)":"\u65BD\u52A0\u6C96\u91CF (\u5728\u67D0\u4E00\u9EDE)","Apply an impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ at _PARAM5_ ; _PARAM6_ ; _PARAM7_":"\u5728_PARAM5_\uFF1B_PARAM6_\uFF1B_PARAM7_\u8655\u5C0D_PARAM0_\u65BD\u52A0_PARAM2_\uFF1B_PARAM3_\uFF1B_PARAM4_\u7684\u6C96\u91CF","Z component (N\xB7s or kg\xB7m\xB7s\u207B\xB9)":"Z \u7D44\u4EF6 (N\xB7s \u6216 kg\xB7m\xB7s\u207B\xB9)","Apply impulse (at center)":"\u65BD\u52A0\u6C96\u91CF (\u5728\u4E2D\u5FC3)","Apply an impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ at the center of _PARAM0_":"\u5728_PARAM0_\u7684\u4E2D\u5FC3\u65BD\u52A0_PARAM2_\uFF1B_PARAM3_\uFF1B_PARAM4_\u7684\u6C96\u91CF","Apply to _PARAM0_ an impulse of length _PARAM2_ towards _PARAM3_ ; _PARAM4_ ; _PARAM5_":"\u5C0D_PARAM0_\u65BD\u52A0\u9577\u5EA6\u70BA_PARAM2_\u7684\u6C96\u91CF\uFF0C\u671D\u5411_PARAM3_\uFF1B_PARAM4_\uFF1B_PARAM5_","Apply a torque of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ an":"\u5C0D_PARAM0_\u65BD\u52A0_PARAM2_\uFF1B_PARAM3_\uFF1B_PARAM4_\u7684\u626D\u77E9","Torque around X (N\xB7m)":"X \u65B9\u5411\u7684\u626D\u77E9 (N\xB7m)","Torque around Y (N\xB7m)":"Y \u65B9\u5411\u7684\u626D\u77E9 (N\xB7m)","Torque around Z (N\xB7m)":"Z \u65B9\u5411\u7684\u626D\u77E9 (N\xB7m)","Apply angular impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ an":"\u5C07_PARAM2_\uFF1B_PARAM3_\uFF1B_PARAM4_\u7684\u89D2\u6C96\u91CF\u65BD\u52A0\u5230_PARAM0_","Angular impulse around X (N\xB7m\xB7s)":"\u7E5E X \u8EF8\u7684\u89D2\u6C96\u91CF (N\xB7m\xB7s)","Angular impulse around Y (N\xB7m\xB7s)":"\u7E5E Y \u8EF8\u7684\u89D2\u6C96\u91CF (N\xB7m\xB7s)","Angular impulse around Z (N\xB7m\xB7s)":"\u7E5E Z \u8EF8\u7684\u89D2\u6C96\u91CF (N\xB7m\xB7s)","Inertia around X":"\u7E5E X \u7684\u6163\u6027","Return the inertia around X axis of the object (in kilograms \xB7 meters\xB2) when for its default rotation is (0\xB0; 0\xB0; 0\xB0)":"\u8FD4\u56DE\u7269\u9AD4\u5728 (0\xB0; 0\xB0; 0\xB0) \u7684\u9810\u8A2D\u65CB\u8F49\u4E0B\uFF0C\u7E5E X \u8EF8\u7684\u6163\u6027 (\u55AE\u4F4D\uFF1A\u5343\u514B\xB7\u7C73\xB2)","Inertia around Y":"\u7E5E Y \u7684\u6163\u6027","Return the inertia around Y axis of the object (in kilograms \xB7 meters\xB2) when for its default rotation is (0\xB0; 0\xB0; 0\xB0)":"\u8FD4\u56DE\u7269\u9AD4\u5728 (0\xB0; 0\xB0; 0\xB0) \u7684\u9810\u8A2D\u65CB\u8F49\u4E0B\uFF0C\u7E5E Y \u8EF8\u7684\u6163\u6027 (\u55AE\u4F4D\uFF1A\u5343\u514B\xB7\u7C73\xB2)","Inertia around Z":"\u7E5E Z \u7684\u6163\u6027","Return the inertia around Z axis of the object (in kilograms \xB7 meters\xB2) when for its default rotation is (0\xB0; 0\xB0; 0\xB0)":"\u5728\u7269\u9AD4\u7684\u9810\u8A2D\u65CB\u8F49\u89D2\u5EA6\u70BA (0\xB0; 0\xB0; 0\xB0) \u6642\uFF0C\u8FD4\u56DE\u7E5E Z \u8EF8\u7684\u6163\u6027 (\u5343\u514B\xB7\u7C73\xB2)","Mass center Z":"\u8CEA\u91CF\u4E2D\u5FC3 Z","Jump height":"\u8DF3\u8E8D\u9AD8\u5EA6","Forward acceleration":"\u5411\u524D\u52A0\u901F\u5EA6","Forward deceleration":"\u5411\u524D\u6E1B\u901F","Max. forward speed":"\u6700\u5927\u524D\u9032\u901F\u5EA6","Sideways acceleration":"\u5074\u5411\u52A0\u901F\u5EA6","Sideways deceleration":"\u5074\u5411\u6E1B\u901F","Max. sideways speed":"\u6700\u5927\u5074\u5411\u901F\u5EA6","3D physics character":"3D \u7269\u7406\u89D2\u8272","Allow an object to jump and run on platforms that have the 3D physics behavior(and which are generally set to \"Static\" as type, unless the platform is animated/moved in events).\n\nThis behavior is usually used with one or more \"mapper\" behavior to let the player move it.":"\u5141\u8A31\u7269\u4EF6\u5728\u5177\u67093D\u7269\u7406\u884C\u70BA\u7684\u5E73\u81FA\u4E0A\u8DF3\u8E8D\u548C\u904B\u884C\uFF08\u901A\u5E38\u5C07\u985E\u578B\u8A2D\u7F6E\u70BA\u201C\u975C\u614B\u201D\uFF0C\u9664\u975E\u5E73\u81FA\u5728\u4E8B\u4EF6\u4E2D\u88AB\u52D5\u756B\u5316/\u79FB\u52D5\uFF09\u3002\n\n\u6B64\u884C\u70BA\u901A\u5E38\u8207\u4E00\u500B\u6216\u591A\u500B\u201C\u6620\u5C04\u5668\u201D\u884C\u70BA\u4E00\u8D77\u4F7F\u7528\uFF0C\u4EE5\u4FBF\u8B93\u73A9\u5BB6\u79FB\u52D5\u5B83\u3002","Simulate move forward key press":"\u6A21\u64EC\u6309\u4E0B\u524D\u9032\u9375","Simulate a press of the move forward key.":"\u6A21\u64EC\u6309\u4E0B\u524D\u9032\u9375\u3002","Simulate pressing Forward key for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B _PARAM0_ \u7684\u524D\u9032\u9375","Character controls":"\u89D2\u8272\u63A7\u5236","Simulate move backward key press":"\u6A21\u64EC\u6309\u4E0B\u5F8C\u9000\u9375","Simulate a press of the move backward key.":"\u6A21\u64EC\u6309\u4E0B\u5F8C\u9000\u9375\u3002","Simulate pressing Backward key for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B _PARAM0_ \u7684\u5F8C\u9000\u9375","Simulate move right key press":"\u6A21\u64EC\u6309\u4E0B\u53F3\u79FB\u9375","Simulate a press of the move right key.":"\u6A21\u64EC\u6309\u4E0B\u53F3\u79FB\u9375\u3002","Simulate pressing Right key for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B _PARAM0_ \u7684\u53F3\u9375","Simulate move left key press":"\u6A21\u64EC\u6309\u4E0B\u5DE6\u79FB\u9375","Simulate a press of the move left key.":"\u6A21\u64EC\u6309\u4E0B\u5DE6\u79FB\u9375\u3002","Simulate pressing Left key for _PARAM0_":"\u6A21\u64EC\u6309\u4E0B _PARAM0_ \u7684\u5DE6\u9375","A stick angle for a 3D Physics character of 0\xB0 means the object will move to the right, 90\xB0 backward and -90\xB0 (or 270\xB0) forward.":"3D \u7269\u7406\u89D2\u8272\u7684 0\xB0 \u9215\u687F\u89D2\u5EA6\u610F\u5473\u8457\u7269\u9AD4\u5C07\u5411\u53F3\u79FB\u52D5\uFF0C90\xB0 \u5411\u5F8C\u548C -90\xB0\uFF08\u6216 270\xB0\uFF09\u5411\u524D\u3002","Simulating a stick control is usually used for connecting gamepads. For NPCs, it's usually better to rotate them toward target & simulate forward key instead.":"\u6A21\u64EC\u9215\u687F\u63A7\u5236\u901A\u5E38\u7528\u65BC\u9023\u63A5\u904A\u6232\u63A7\u5236\u5668\u3002\u5C0D\u65BC NPC\uFF0C\u901A\u5E38\u6700\u597D\u5C07\u5B83\u5011\u671D\u76EE\u6A19\u65CB\u8F49\u4E26\u6A21\u64EC\u524D\u9032\u6309\u9375\u3002","When this action is executed, the object is able to jump again, even if it is in the air: this can be useful to allow a double jump for example. This is not a permanent effect: you must call again this action every time you want to allow the object to jump (apart if it's on the floor).":"\u7576\u57F7\u884C\u6B64\u64CD\u4F5C\u6642, \u7269\u4EF6\u80FD\u5920\u518D\u6B21\u8DF3\u8E8D, \u5373\u4F7F\u5B83\u5728\u7A7A\u4E2D: \u9019\u80FD\u6709\u52A9\u4E8E\u4F8B\u5982\u5141\u8A31\u96D9\u500D\u8DF3\u8E8D\u3002\u9019\u4E0D\u662F\u6C38\u4E45\u6548\u679C: \u6BCF\u7576\u4F60\u60F3\u8981\u8B93\u7269\u4EF6\u8DF3\u8E8D\u6642\u4F60\u90FD\u5FC5\u9808\u518D\u6B21\u8ABF\u7528\u6B64\u52D5\u4F5C (\u5982\u679C\u5B83\u5728\u5730\u9762\u4E0A)\u3002","Character state":"\u89D2\u8272\u72C0\u614B","Should bind object and forward angle":"\u61C9\u8A72\u7D81\u5B9A\u7269\u4EF6\u548C\u524D\u9032\u89D2\u5EA6","Check if the object angle and forward angle should be kept the same.":"\u6AA2\u67E5\u7269\u4EF6\u7684\u89D2\u5EA6\u548C\u524D\u9032\u89D2\u5EA6\u662F\u5426\u61C9\u4FDD\u6301\u4E0D\u8B8A\u3002","Keep _PARAM0_ angle and forward angle the same":"\u4FDD\u6301 _PARAM0_ \u89D2\u5EA6\u548C\u524D\u9032\u89D2\u5EA6\u76F8\u540C","Character configuration":"\u89D2\u8272\u914D\u7F6E","Enable or disable keeping the object angle and forward angle the same.":"\u555F\u7528\u6216\u7981\u7528\u4FDD\u6301\u7269\u4EF6\u89D2\u5EA6\u548C\u524D\u9032\u89D2\u5EA6\u76F8\u540C\u3002","Should bind _PARAM0_ angle and forward angle: _PARAM2_":"\u61C9\u8A72\u7D81\u5B9A _PARAM0_ \u89D2\u5EA6\u548C\u524D\u9032\u89D2\u5EA6\uFF1A_PARAM2_","Keep object angle and forward direction the same":"\u4FDD\u6301\u7269\u4EF6\u89D2\u5EA6\u548C\u524D\u9032\u65B9\u5411\u76F8\u540C","Forward angle":"\u5411\u524D\u89D2\u5EA6","Compare the angle used by the character to go forward.":"\u6BD4\u8F03\u89D2\u8272\u524D\u9032\u6240\u4F7F\u7528\u7684\u89D2\u5EA6\u3002","Forward angle of _PARAM0_ is _PARAM2_ \xB1 _PARAM3_\xB0":"_PARAM0_ \u7684\u524D\u65B9\u89D2\u5EA6\u70BA _PARAM2_ \xB1 _PARAM3_\xB0","Change the angle used by the character to go forward.":"\u66F4\u6539\u89D2\u8272\u524D\u9032\u7684\u89D2\u5EA6\u3002","the forward angle":"\u5411\u524D\u89D2\u5EA6","Forward angle of the character":"\u89D2\u8272\u7684\u524D\u5411\u89D2\u5EA6","Return the angle used by the character to go forward.":"\u8FD4\u56DE\u89D2\u8272\u524D\u9032\u6240\u4F7F\u7528\u7684\u89D2\u5EA6\u3002","Current forward speed":"\u7576\u524D\u524D\u9032\u901F\u5EA6","the current forward speed of the object. The object moves backward with negative values and forward with positive ones":"\u7269\u9AD4\u7684\u7576\u524D\u524D\u9032\u901F\u5EA6\u3002\u7269\u9AD4\u4EE5\u8CA0\u503C\u5411\u5F8C\u79FB\u52D5\uFF0C\u4EE5\u6B63\u503C\u5411\u524D\u79FB\u52D5","the current forward speed":"\u7576\u524D\u524D\u9032\u901F\u5EA6","the forward acceleration of an object":"the forward acceleration of an object","the forward acceleration":"\u524D\u9032\u52A0\u901F\u5EA6","the forward deceleration of an object":"the forward deceleration of an object","the forward deceleration":"\u524D\u9032\u6E1B\u901F","Forward max speed":"\u524D\u9032\u6700\u5927\u901F\u5EA6","the forward max speed of the object":"the forward max speed of the object","the forward max speed":"\u524D\u9032\u6700\u5927\u901F\u5EA6","Current sideways speed":"\u7576\u524D\u5074\u5411\u901F\u5EA6","the current sideways speed of the object. The object moves to the left with negative values and to the right with positive ones":"\u7269\u9AD4\u7576\u524D\u7684\u5074\u5411\u901F\u5EA6\u3002\u8CA0\u503C\u8868\u793A\u7269\u9AD4\u5411\u5DE6\u79FB\u52D5\uFF0C\u6B63\u503C\u8868\u793A\u7269\u9AD4\u5411\u53F3\u79FB\u52D5","the current sideways speed":"\u7576\u524D\u5074\u5411\u901F\u5EA6","the sideways acceleration of an object":"the sideways acceleration of an object","the sideways acceleration":"\u5074\u5411\u52A0\u901F\u5EA6","the sideways deceleration of an object":"the sideways deceleration of an object","the sideways deceleration":"\u5074\u5411\u6E1B\u901F","Sideways max speed":"\u5074\u5411\u6700\u5927\u901F\u5EA6","the sideways max speed of the object":"the sideways max speed of the object","the sideways max speed":"\u5074\u5411\u6700\u5927\u901F\u5EA6","the current falling speed of the object. Its value is always positive.":"\u7269\u9AD4\u7576\u524D\u7684\u4E0B\u964D\u901F\u5EA6\uFF0C\u5176\u503C\u7E3D\u662F\u6B63\u6578\u3002","the current jump speed of the object. Its value is always positive.":"\u7269\u9AD4\u7576\u524D\u7684\u8DF3\u8E8D\u901F\u5EA6\uFF0C\u5176\u503C\u7E3D\u662F\u6B63\u6578\u3002","the jump speed of an object. Its value is always positive":"the jump speed of an object. Its value is always positive","the jump sustain time of an object. This is the time during which keeping the jump button held allow the initial jump speed to be maintained":"\u7269\u9AD4\u7684\u8DF3\u8E8D\u7DAD\u6301\u6642\u9593\u3002\u9019\u662F\u4FDD\u6301\u6309\u4F4F\u8DF3\u8E8D\u6309\u9215\u5141\u8A31\u7DAD\u6301\u521D\u59CB\u8DF3\u8E8D\u901F\u5EA6\u7684\u6642\u9593\u3002","the gravity applied on an object":"the gravity applied on an object","the maximum falling speed of an object":"the maximum falling speed of an object","Max steer angle":"Max steer angle","Steering":"Steering","Beginning steer speed":"Beginning steer speed","End steer speed":"End steer speed","Max engine torque":"Max engine torque","Allow cars to climb steep slopes and push heavy obstacles.":"Allow cars to climb steep slopes and push heavy obstacles.","Max engine speed":"Max engine speed","Engine inertia":"Engine inertia","Slow down car acceleration.":"Slow down car acceleration.","Reverse gear ratio":"Reverse gear ratio","1st gear ratio":"1st gear ratio","2nd gear ratio":"2nd gear ratio","3rd gear ratio":"3rd gear ratio","4th gear ratio":"4th gear ratio","5th gear ratio":"5th gear ratio","6th gear ratio":"6th gear ratio","Wheel radius":"Wheel radius","Wheels":"Wheels","Wheel width":"Wheel width","Back wheel offset X":"Back wheel offset X","Positive values move wheels outside.":"Positive values move wheels outside.","Front wheel offset X":"Front wheel offset X","Wheel offset Y":"Wheel offset Y","Wheel offset Z":"Wheel offset Z","Brake max torque":"Brake max torque","Brakes":"Brakes","Hand brake max torque":"Hand brake max torque","Back wheel drive":"Back wheel drive","Front wheel drive":"Front wheel drive","Pitch and roll max angle":"Pitch and roll max angle","3D physics car":"3D physics car","Simulate a realistic car using the 3D physics engine. This is mostly useful for the car controlled by the player (it's usually too complex for other cars in a game).\n\nThis behavior is usually used with one or more \"mapper\" behavior to let the player move it.":"\u4F7F\u75283D\u7269\u7406\u5F15\u64CE\u6A21\u64EC\u4E00\u8F1B\u73FE\u5BE6\u7684\u6C7D\u8ECA\u3002\u9019\u5C0D\u7531\u73A9\u5BB6\u63A7\u5236\u7684\u6C7D\u8ECA\u6700\u70BA\u6709\u7528\uFF08\u901A\u5E38\u5C0D\u65BC\u904A\u6232\u4E2D\u7684\u5176\u4ED6\u6C7D\u8ECA\u4F86\u8AAA\u904E\u65BC\u8907\u96DC\uFF09\u3002\n\n\u6B64\u884C\u70BA\u901A\u5E38\u8207\u4E00\u500B\u6216\u591A\u500B\u300C\u6620\u5C04\u5668\u300D\u884C\u70BA\u4E00\u8D77\u4F7F\u7528\uFF0C\u4EE5\u8B93\u73A9\u5BB6\u79FB\u52D5\u5B83\u3002","Car controls":"Car controls","Simulate hand brake key press":"Simulate hand brake key press","Simulate a press of the hand brake key.":"Simulate a press of the hand brake key.","Simulate pressing hand brake key for _PARAM0_":"Simulate pressing hand brake key for _PARAM0_","Simulate accelerator stick control":"Simulate accelerator stick control","Simulate an accelerator stick control.":"Simulate an accelerator stick control.","Simulate an accelerator stick control for _PARAM0_ with a _PARAM2_ force":"Simulate an accelerator stick control for _PARAM0_ with a _PARAM2_ force","Stick force (between -1 and 1)":"Stick force (between -1 and 1)","Simulate steering stick control":"Simulate steering stick control","Simulate a steering stick control.":"Simulate a steering stick control.","Simulate a steering stick control for _PARAM0_ with a _PARAM2_ force":"Simulate a steering stick control for _PARAM0_ with a _PARAM2_ force","Steer angle":"Steer angle","the current steer angle (in degree). The value is negative when cars turn left":"the current steer angle (in degree). The value is negative when cars turn left","the steer angle":"the steer angle","Car state":"Car state","Steer angle (in degree)":"Steer angle (in degree)","Engine speed":"Engine speed","the current engine speed (RPM)":"the current engine speed (RPM)","the engine speed":"the engine speed","Engine speed (RPM)":"Engine speed (RPM)","Current gear":"Current gear","the current gear (-1 = reverse, 0 = neutral, 1 = 1st gear)":"the current gear (-1 = reverse, 0 = neutral, 1 = 1st gear)","the current gear":"the current gear","Check if any wheel is in contact with the ground.":"Check if any wheel is in contact with the ground.","Engine max torque":"Engine max torque","the engine max torque (N\xB7m). It allows cars to climb steep slopes and push heavy obstacles":"the engine max torque (N\xB7m). It allows cars to climb steep slopes and push heavy obstacles","the engine max torque":"the engine max torque","Car configuration":"Car configuration","Engine max torque (N\xB7m)":"Engine max torque (N\xB7m)","Engine max speed":"Engine max speed","the engine max speed (RPM)":"the engine max speed (RPM)","the engine max speed":"the engine max speed","Engine max speed (RPM)":"Engine max speed (RPM)","the engine inertia (kg\xB7m\xB2). It slows down car acceleration":"the engine inertia (kg\xB7m\xB2). It slows down car acceleration","the engine inertia":"the engine inertia","Engine inertia (kg\xB7m\xB2)":"Engine inertia (kg\xB7m\xB2)","Check if a 3D physics character is on a given platform.":"\u6AA2\u67E53D\u7269\u7406\u89D2\u8272\u662F\u5426\u5728\u7D66\u5B9A\u7684\u5E73\u53F0\u4E0A\u3002","Adjustment":"\u8ABF\u6574","Adjust gamma, contrast, saturation, brightness, alpha or color-channel shift.":"\u8ABF\u6574\u4F3D\u746A\u3001\u5C0D\u6BD4\u5EA6\u3001\u98FD\u548C\u5EA6\u3001\u4EAE\u5EA6\u3001\u900F\u660E\u6216\u984F\u8272\u901A\u9053\u8F49\u79FB\u3002","Gamma (between 0 and 5)":"\u4F3D\u746A(0\u52305)","Saturation (between 0 and 5)":"\u98FD\u548C\u5EA6(\u4ECB\u4E8E 0 \u548C 5)","Contrast (between 0 and 5)":"\u5C0D\u6BD4\u5EA6(\u4ECB\u4E8E 0 \u548C 5)","Brightness (between 0 and 5)":"\u4EAE\u5EA6(\u4ECB\u4E8E 0 \u548C 5)","Red (between 0 and 5)":"\u7D05\u8272(0\u52305)","Green (between 0 and 5)":"\u7DA0\u8272(0\u52305)","Blue (between 0 and 5)":"\u85CD\u8272(0\u52305)","Alpha (between 0 and 1, 0 is transparent)":"Alpha (\u4ECB\u4E8E 0 \u5230 1 \u4E4B\u9593, 0 \u662F\u900F\u660E)","Advanced bloom":"\u9AD8\u7D1A\u5149\u6688","Applies a bloom effect.":"\u61C9\u7528\u5149\u6688\u6548\u679C\u3002","Threshold (between 0 and 1)":"\u95BE\u503C(0-1\u4E4B\u9593)","Bloom Scale (between 0 and 2)":"\u8840\u91CF\u6BD4\u4F8B (0\u52302)","Brightness (between 0 and 2)":"\u4EAE\u5EA6(\u4ECB\u4E8E 0 \u548C 2)","Blur (between 0 and 20)":"\u6A21\u7CCA(\u4ECB\u4E8E 0 \u548C 20 \u4E4B\u9593)","Quality (between 0 and 20)":"\u8CEA\u91CF (\u4ECB\u4E8E 0 \u548C 20 \u4E4B\u9593)","Padding for the visual effect area":"\u8996\u89BA\u6548\u679C\u5340\u57DF\u7684\u586B\u5145","ASCII":"ASCII","Render the image with ASCII characters only.":"\u53EA\u6E32\u67D3\u5E36\u6709ASCII\u5B57\u7B26\u7684\u5716\u50CF\u3002","Size (between 2 and 20)":"\u5927\u5C0F (2\u81F320\u4E4B\u9593)","Beveled edges":"\u659C\u908A","Add beveled edges around the rendered image.":"\u5728\u6E32\u67D3\u5716\u50CF\u5468\u570D\u6DFB\u52A0\u659C\u908A\u3002","Rotation (between 0 and 360)":"\u65CB\u8F49 (0-360)","Outer strength (between 0 and 5)":"\u5916\u90E8\u5F37\u5EA6(0\u81F35\u4E4B\u9593)","Distance (between 10 and 20)":"\u8DDD\u96E2(10\u81F320\u4E4B\u9593)","Light alpha (between 0 and 1)":"\u6DFA\u8272\u900F\u660E(\u4ECB\u4E8E 0 \u548C 1) \u4E4B\u9593","Light color (color of the outline)":"\u6DFA\u8272(\u5916\u89C0\u984F\u8272)","Shadow color (color of the outline)":"\u9670\u5F71\u984F\u8272 (\u5916\u89C0\u7684\u984F\u8272)","Shadow alpha (between 0 and 1)":"\u9670\u5F71\u900F\u660E(\u4ECB\u4E8E 0 \u548C 1) \u4E4B\u9593","Black and White":"\u9ED1\u767D\u7684","Alter the colors to make the image black and white":"\u66F4\u6539\u984F\u8272\uFF0C\u4F7F\u5716\u50CF\u8B8A\u70BA\u9ED1\u767D\u3002","Opacity (between 0 and 1)":"\u4E0D\u900F\u660E\u5EA6 (\u5728 0 \u548C 1)","Blending mode":"\u6DF7\u5408\u6A21\u5F0F","Alter the rendered image with the specified blend mode.":"\u7528\u6307\u5B9A\u7684\u6DF7\u5408\u6A21\u5F0F\u66F4\u6539\u5448\u73FE\u7684\u5716\u50CF\u3002","Mode (0: Normal, 1: Add, 2: Multiply, 3: Screen)":"\u6A21\u5F0F (0: \u6B63\u5E38, 1\uFF1A\u52A0\u6CD5, 2\uFF1A\u4E58\u6CD5, 3\uFF1A\u5C4F\u5E55)","Blur (Gaussian, slow - prefer to use Kawase blur)":"\u6A21\u7CCA(\u9AD8\u65AF\u6A21\u7CCA\uFF0C\u6162\u901F-\u559C\u6B61\u7528Kawase\u6A21\u7CCA)","Blur the rendered image. This is slow, so prefer to use Kawase blur in most cases.":"\u6A21\u7CCA\u6E32\u67D3\u7684\u5716\u50CF\u3002\u9019\u662F\u7DE9\u6162\u7684\uFF0C\u6240\u4EE5\u5728\u5927\u591A\u6578\u60C5\u6CC1\u4E0B\u66F4\u559C\u6B61\u4F7F\u7528 Kawase \u6A21\u7CCA\u3002","Blur intensity":"\u6A21\u7CCA\u5F37\u5EA6","Number of render passes. An high value will cause lags/poor performance.":"\u6E32\u67D3\u901A\u904E\u6B21\u6578\u3002\u9AD8\u503C\u6703\u5C0E\u81F4\u5EF6\u9072/\u6027\u80FD\u5DEE\u3002","Resolution":"\u5206\u8FA8\u7387","Kernel size (one of these values: 5, 7, 9, 11, 13, 15)":"\u5167\u6838\u5927\u5C0F(\u9019\u4E9B\u503C\u4E4B\u4E00\uFF1A5\u30017\u30019\u300111\u300113\u300115)","Brightness":"\u4EAE\u5EA6","Make the image brighter.":"\u4F7F\u5716\u50CF\u66F4\u52A0\u4EAE\u3002","Brightness (between 0 and 1)":"\u4EAE\u5EA6(\u4ECB\u4E8E 0 \u548C 1)","Bulge Pinch":"\u51F9\u51F8","Bulges or pinches the image in a circle.":"\u5C07\u5716\u50CF\u51F8\u8D77\u6216\u64E0\u58D3\u6210\u5713\u5F62\u3002","Center X (between 0 and 1, 0.5 is image middle)":"\u5C45\u4E2D X (\u4ECB\u4E8E 0 \u5230 1, 0.5 \u4E4B\u9593\u7684\u5716\u50CF\u4E2D\u9593\u503C)","Center Y (between 0 and 1, 0.5 is image middle)":"\u5C45\u4E2D Y (\u4ECB\u4E8E 0 \u548C 1 \u4E4B\u9593\uFF0C0.5 \u70BA\u5716\u50CF\u4E2D\u9593\u503C)","strength (between -1 and 1)":"\u5F37\u5EA6\uFF08\u4ECB\u4E8E-1\u548C1\u4E4B\u9593\uFF09","-1 is strong pinch, 0 is no effect, 1 is strong bulge":"-1\u70BA\u5F37\u64E0\u58D3\uFF0C0\u70BA\u7121\u6548\uFF0C1\u70BA\u5F37\u51F8","Color Map":"\u5F69\u8272\u5730\u5716","Change the color rendered on screen.":"\u66F4\u6539\u5C4F\u5E55\u4E0A\u5448\u73FE\u7684\u984F\u8272\u3002","Color map texture for the effect":"\u7279\u6548\u7684\u984F\u8272\u8CBC\u5716\u7D0B\u7406","You can change colors of pixels by modifying a reference color image, containing each colors, called the *Color Map Texture*. To get started, **download** [a default color map texture here](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).":"\u60A8\u53EF\u4EE5\u901A\u904E\u4FEE\u6539\u5305\u542B\u6BCF\u7A2E\u984F\u8272\u7684\u53C3\u8003\u5F69\u8272\u5716\u50CF\u4F86\u66F4\u6539\u50CF\u7D20\u7684\u984F\u8272\uFF0C\u7A31\u70BA*\u984F\u8272\u8CBC\u5716\u7D0B\u7406*\u3002\u8981\u958B\u59CB\u4F7F\u7528\uFF0C\u8ACB**\u4E0B\u8F09** [\u6B64\u8655\u7684\u9ED8\u8A8D\u984F\u8272\u8CBC\u5716\u7D0B\u7406](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects)\u3002","Disable anti-aliasing (\"nearest\" pixel rounding)":"\u7981\u7528\u53CD\u92F8\u9F52(\"\u6700\u8FD1\"\u50CF\u7D20\u820D\u5165)","Mix":"\u6DF7\u5408","Mix value of the effect on the layer (in percent)":"\u5716\u5C64\u6548\u679C\u7684\u6DF7\u5408\u503C (\u767E\u5206\u6BD4)","Color Replace":"\u984F\u8272\u66FF\u63DB","Effect replacing a color (or similar) by another.":"\u7279\u6548\u66FF\u63DB\u984F\u8272(\u6216\u985E\u4F3C\u984F\u8272)\u3002","Original Color":"\u539F\u59CB\u984F\u8272","New Color":"\u65B0\u984F\u8272","Epsilon (between 0 and 1)":"Epsilon (\u4ECB\u4E8E 0 \u5230 1)","Tolerance/sensitivity of the floating-point comparison between colors (lower = more exact, higher = more inclusive)":"\u984F\u8272\u9593\u6D6E\u9EDE\u6BD4\u8F03\u7684\u516C\u5DEE/\u9748\u654F\u5EA6 (\u8F03\u4F4E=\u8F03\u7CBE\u78BA\uFF0C\u8F03\u9AD8=\u8F03\u9AD8)","CRT":"CRT","Apply an effect resembling old CRT monitors.":"\u61C9\u7528\u4E00\u500B\u985E\u4F3C\u820A\u7684 CRT \u76E3\u8996\u5668\u7684\u6548\u679C\u3002","Line width (between 0 and 5)":"\u7DDA\u689D\u5BEC\u5EA6 (\u4ECB\u4E8E 0 \u81F3 5)","Line contrast (between 0 and 1)":"\u7DDA\u689D\u5C0D\u6BD4\u5EA6 (0 \u548C 1)","Noise (between 0 and 1)":"\u566A\u97F3 (\u4ECB\u4E8E 0 \u548C 1) \u4E4B\u9593","Curvature (between 0 and 10)":"\u66F2\u7387(0\u523010\u4E4B\u9593)","Show vertical lines":"\u986F\u793A\u5782\u76F4\u7DDA","Noise size (between 0 and 10)":"\u566A\u97F3\u5927\u5C0F(0\u523010\u4E4B\u9593)","Vignetting (between 0 and 1)":"\u6F38\u6688 (\u5728 0 \u548C 1)","Vignetting alpha (between 0 and 1)":"\u6F38\u6688alpha\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u9593\uFF09","Vignetting blur (between 0 and 1)":"\u6F38\u6688\u6A21\u7CCA\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u9593\uFF09","Interlaced Lines Speed":"\u9694\u884C\u6383\u63CF\u7DDA\u901F\u5EA6","0: Pause, 0.5: Half speed, 1: Normal speed, 2: Double speed, etc...":"0: \u66AB\u505C, 0.5: \u534A\u901F, 1: \u6B63\u5E38\u901F\u5EA6, 2: \u96D9\u901F, \u7B49...","Noise Frequency":"\u566A\u8072\u983B\u7387","Displacement":"\u4F4D\u79FB","Uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object.":"\u4F7F\u7528\u6307\u5B9A\u7D0B\u7406\u4E2D\u7684\u50CF\u7D20\u503C (\u7A31\u70BA\u7F6E\u63DB\u5716) \u4F86\u57F7\u884C\u7269\u4EF6\u7684\u79FB\u52D5\u3002","Displacement map texture":"\u7F6E\u63DB\u8CBC\u5716\u7D0B\u7406","Displacement map texture for the effect. To get started, **download** [a default displacement map texture here](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).":"\u4F4D\u79FB\u8CBC\u5716\u7D0B\u7406\u7684\u6548\u679C\u3002\u958B\u59CB\u6642\uFF0C**\u4E0B\u8F09**[\u6B64\u8655\u70BA\u9ED8\u8A8D\u7F6E\u63DB\u8CBC\u5716\u7D0B\u7406](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).","Dot":"\u9EDE","Applies a dotscreen effect making objects appear to be made out of black and white halftone dots like an old printer.":"\u61C9\u7528\u9EDE\u5C4F\u6548\u679C\uFF0C\u4F7F\u7269\u4EF6\u770B\u8D77\u4F86\u50CF\u820A\u6253\u5370\u6A5F\u4E00\u6A23\u7531\u9ED1\u767D\u534A\u8272\u8ABF\u7DB2\u9EDE\u7D44\u6210\u3002","Scale (between 0.3 and 1)":"\u7E2E\u653E (\u4ECB\u4E8E 0.3 \u548C 1)","Angle (between 0 and 5)":"\u89D2\u5EA6(\u4ECB\u4E8E 0 \u548C 5)","Drop shadow":"\u6295\u4E0B\u9670\u5F71","Add a shadow around the rendered image.":"\u5728\u6E32\u67D3\u5716\u50CF\u5468\u570D\u6DFB\u52A0\u9670\u5F71\u3002","Quality (between 1 and 20)":"\u8CEA\u91CF (1\u81F320\u4E4B\u9593)","Alpha (between 0 and 1)":"Alpha (\u4ECB\u4E8E 0 \u548C 1) \u4E4B\u9593","Distance (between 0 and 50)":"\u8DDD\u96E2 (\u4ECB\u4E8E 0 \u548C 50 \u4E4B\u9593)","Color of the shadow":"\u9670\u5F71\u984F\u8272","Shadow only (shows only the shadow when enabled)":"\u50C5\u986F\u793A\u9670\u5F71(\u555F\u7528\u6642\u50C5\u986F\u793A\u9670\u5F71)","Glitch":"\u73BB\u7483","Applies a glitch effect to an object.":"\u5C07\u73BB\u7483\u7279\u6548\u61C9\u7528\u4E8E\u7269\u4EF6\u3002","Slices (between 2 and infinite)":"\u5207\u7247(2\u5230\u7121\u9650\u4E4B\u9593)","Offset (between -400 and 400)":"\u504F\u79FB(-400\u81F3400\u4E4B\u9593)","Direction (between -180 and 180)":"\u65B9\u5411(-180\u81F3180\u4E4B\u9593)","Fill Mode (between 0 and 4)":"\u586B\u5145\u6A21\u5F0F (0\u52304)","The fill mode of the space after the offset.(0: TRANSPARENT, 1: ORIGINAL, 2: LOOP, 3: CLAMP, 4: MIRROR)":"\u504F\u79FB\u540E\u7A7A\u9593\u7684\u586B\u5145\u6A21\u5F0F\u3002\uFF080\uFF1A\u900F\u660E\uFF0C1\uFF1A\u539F\u59CB\uFF0C2\uFF1A\u5FAA\u74B0\uFF0C3\uFF1A\u9257\u4F4D\uFF0C4\uFF1A\u93E1\u50CF\uFF09","Average":"\u5E73\u5747\u503C","Min Size":"\u6700\u5C0F\u5C3A\u5BF8","Sample Size":"\u793A\u4F8B\u5927\u5C0F","Animation Frequency":"\u52D5\u756B\u983B\u7387","Red X offset (between -50 and 50)":"\u7D05\u8272X\u504F\u79FB\u91CF(-50\u81F350)","Red Y offset (between -50 and 50)":"\u7D05\u8272Y\u504F\u79FB\u91CF(-50\u81F350)","Green X offset (between -50 and 50)":"\u7DA0\u8272X\u504F\u79FB\u91CF(-50\u81F350)","Green Y offset (between -50 and 50)":"\u7DA0\u8272Y\u504F\u79FB\u91CF(-50\u81F350)","Blue X offset (between -50 and 50)":"\u85CD\u8272X\u504F\u79FB\u91CF(-50\u81F350)","Blue Y offset (between -50 and 50)":"\u85CD\u8272Y\u504F\u79FB\u91CF(-50\u81F350)","Glow":"\u767C\u5149","Add a glow effect around the rendered image.":"\u5728\u6E32\u67D3\u5716\u50CF\u5468\u570D\u6DFB\u52A0\u767C\u5149\u6548\u679C\u3002","Inner strength (between 0 and 20)":"\u5167\u90E8\u5F37\u5EA6(\u4ECB\u4E8E 0 \u548C 20 \u4E4B\u9593)","Outer strength (between 0 and 20)":"\u5916\u90E8\u5F37\u5EA6(0\u81F320\u4E4B\u9593)","Color (color of the outline)":"\u984F\u8272(\u8F2A\u5ED3\u7684\u984F\u8272)","Godray":"\u795E\u5149","Apply and animate atmospheric light rays.":"\u61C9\u7528\u5E76\u8A2D\u5B9A\u5927\u6C23\u5149\u7DDA\u7684\u52D5\u756B\u3002","Parallel (parallel rays)":"\u5E73\u884C(\u5E73\u884C\u5C04\u7DDA)","Animation Speed":"\u52D5\u756B\u901F\u5EA6","Lacunarity (between 0 and 5)":"\u7A7A\u9699(\u4ECB\u4E8E 0 \u5230 5)","Angle (between -60 and 60)":"\u89D2\u5EA6(-60\u523060\u4E4B\u9593)","Gain (between 0 and 1)":"\u589E\u76CA(\u5728 0 \u548C 1)","Light (between 0 and 60)":"\u4EAE\u5EA6(0\u523060\u4E4B\u9593)","Center X (between 100 and 1000)":"\u5C45\u4E2D X (100\u52301000\u4E4B\u9593)","Center Y (between -1000 and 100)":"\u5C45\u4E2D Y (-1000\u81F3100)","HSL Adjustment":"HSL \u8ABF\u6574","Adjust hue, saturation and lightness.":"\u8ABF\u6574\u8272\u8ABF\u3001\u98FD\u548C\u5EA6\u548C\u4EAE\u5EA6\u3002","Hue in degrees (between -180 and 180)":"\u8272\u8ABF\u7684\u5EA6\u6578 (\u4ECB\u4E8E-180\u548C180\u4E4B\u9593)","Saturation (between -1 and 1)":"\u98FD\u548C\u5EA6 (\u4ECB\u4E8E -1\u548C1\u4E4B\u9593)","Lightness (between -1 and 1)":"\u4EAE\u5EA6 (\u4ECB\u4E8E -1\u548C1\u4E4B\u9593)","Colorize from the grayscale image":"\u5F9E\u7070\u5EA6\u5716\u50CF\u8457\u8272","Blur (Kawase, fast)":"\u6A21\u7CCA(Kawase\uFF0C\u5FEB\u901F)","Blur the rendered image, with much better performance than Gaussian blur.":"\u6A21\u7CCA\u6E32\u67D3\u5716\u50CF\uFF0C\u5177\u6709\u6BD4\u9AD8\u65AF\u6A21\u7CCA\u66F4\u597D\u7684\u6027\u80FD\u3002","Pixelize X (between 0 and 10)":"\u50CF\u7D20\u5316 X (\u5728 0 \u548C 10 \u4E4B\u9593)","Pixelize Y (between 0 and 10)":"\u50CF\u7D20\u5316 Y (0\u523010\u4E4B\u9593)","Light Night":"\u660E\u4EAE\u7684\u591C\u665A","Alter the colors to simulate night.":"\u66F4\u6539\u984F\u8272\u4EE5\u6A21\u64EC\u591C\u9593\u3002","Motion Blur":"\u904B\u52D5\u6A21\u7CCA","Blur the rendered image to give a feeling of speed.":"\u6A21\u7CCA\u6E32\u67D3\u5716\u50CF\u4EE5\u7D66\u4EBA\u4E00\u7A2E\u901F\u5EA6\u7684\u611F\u89BA\u3002","Velocity on X axis":"X \u8EF8\u4E0A\u7684\u901F\u5EA6","Velocity on Y axis":"Y \u8EF8\u4E0A\u7684\u901F\u5EA6","Kernel size (odd number between 3 and 25)":"\u5167\u6838\u5927\u5C0F (3\u523025\u4E4B\u9593\u7684\u5947\u6578)","Quality of the blur.":"\u6A21\u7CCA\u7684\u8CEA\u91CF\u3002","Offset":"\u504F\u79FB","Dark Night":"\u6DF1\u8272\u4E4B\u591C\uFF1A","Alter the colors to simulate a dark night.":"\u66F4\u6539\u984F\u8272\u4EE5\u6A21\u64EC\u9ED1\u591C\u3002","Intensity (between 0 and 1)":"\u5F37\u5EA6(\u4ECB\u4E8E 0 \u548C 1)","Noise":"\u566A\u97F3","Add some noise on the rendered image.":"\u5728\u6E32\u67D3\u5716\u50CF\u4E0A\u6DFB\u52A0\u4E00\u4E9B\u566A\u97F3\u3002","Noise intensity (between 0 and 1)":"\u566A\u97F3\u5F37\u5EA6(\u4ECB\u4E8E 0 \u548C 1)","Old Film":"\u820A\u96FB\u5F71","Add a Old film effect around the rendered image.":"\u5728\u6E32\u67D3\u5716\u50CF\u5468\u570D\u6DFB\u52A0\u820A\u5F71\u7247\u6548\u679C\u3002","Sepia (between 0 and 1)":"\u68D5\u8910\u8272 (\u4ECB\u4E8E 0 \u548C 1) \u4E4B\u9593","The amount of saturation of sepia effect, a value of 1 is more saturation and closer to 0 is less, and a value of 0 produces no sepia effect":"\u68D5\u8910\u8272\u6548\u679C\u7684\u98FD\u548C\u5EA6\uFF0C\u503C\u70BA1\u8868\u793A\u66F4\u5927\u7684\u98FD\u548C\u5EA6\uFF0C\u63A5\u8FD10\u8868\u793A\u8F03\u5C0F\uFF0C\u503C\u70BA0\u5247\u4E0D\u7522\u751F\u68D5\u8910\u8272\u6548\u679C","Noise Size (between 0 and 10)":"\u566A\u97F3\u5927\u5C0F(0\u523010\u4E4B\u9593)","Scratch (between -1 and 1)":"\u5283\u75D5 (\u4ECB\u4E8E -1 \u548C 1)","Scratch Density (between 0 and 1)":"\u5283\u75D5\u5BC6\u5EA6(\u4ECB\u4E8E 0 \u548C 1)","Scratch Width (between 1 and 20)":"\u5283\u75D5\u5BEC\u5EA6 (1\u81F320\u4E4B\u9593)","Vignetting Alpha (between 0 and 1)":"\u6F38\u6688\u900F\u660E(\u4ECB\u4E8E 0 \u548C 1) \u4E4B\u9593)","Vignetting Blur (between 0 and 1)":"\u6F38\u6688\u6A21\u7CCA\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u9593\uFF09","Draws an outline around the rendered image.":"\u5728\u6E32\u67D3\u5716\u50CF\u5468\u570D\u7E6A\u5236\u8F2A\u5ED3\u3002","Thickness (between 0 and 20)":"\u539A\u5EA6(\u4ECB\u4E8E 0 \u548C 20 \u4E4B\u9593)","Color of the outline":"\u8F2A\u5ED3\u984F\u8272","Pixelate":"\u50CF\u7D20\u5316","Applies a pixelate effect, making display objects appear 'blocky'.":"\u61C9\u7528\u50CF\u7D20\u6548\u679C\uFF0C\u4F7F\u986F\u793A\u7269\u4EF6\u986F\u5F97\u201C\u584A\u72C0\u201D\u3002","Size of the pixels (10 pixels by default)":"\u50CF\u7D20\u5927\u5C0F(\u9ED8\u8A8D\u70BA10\u50CF\u7D20)","Radial Blur":"\u5F91\u5411\u6A21\u7CCA","Applies a Motion blur to an object.":"\u5C07\u52D5\u4F5C\u6A21\u7CCA\u61C9\u7528\u4E8E\u7269\u4EF6\u3002","The maximum size of the blur radius, -1 is infinite":"\u6A21\u7CCA\u534A\u5F91\u7684\u6700\u5927\u5C3A\u5BF8-1\u662F\u7121\u9650\u7684","Angle (between -180 and 180)":"\u89D2\u5EA6(-180\u81F3180\u4E4B\u9593)","The angle in degree of the motion for blur effect":"\u6A21\u7CCA\u6548\u679C\u7684\u904B\u52D5\u89D2\u5EA6","Kernel Size (between 3 and 25)":"\u5167\u6838\u5927\u5C0F(3\u523025\u4E4B\u9593)","The kernel size of the blur filter (Odd number)":"\u6A21\u7CCA\u6FFE\u93E1\u5167\u6838\u5927\u5C0F (\u5947\u6578)","Reflection":"\u53CD\u5C04","Applies a reflection effect to simulate the reflection on water with waves.":"\u61C9\u7528\u53CD\u5C04\u6548\u679C\u6A21\u64EC\u6CE2\u6D6A\u5728\u6C34\u4E0A\u7684\u53CD\u5C04\u3002","Reflect the image on the waves":"\u5728\u6CE2\u6D6A\u4E0A\u53CD\u5C04\u5716\u50CF","Vertical position of the reflection point":"\u53CD\u5C04\u9EDE\u7684\u5782\u76F4\u4F4D\u7F6E","Default is 50% (middle). Smaller numbers produce a larger reflection, larger numbers produce a smaller reflection.":"\u9ED8\u8A8D\u503C\u70BA50%(\u4E2D\u9593\u503C)\u3002\u8F03\u5C0F\u7684\u6578\u5B57\u7522\u751F\u8F03\u5927\u7684\u53CD\u5C04\uFF0C\u8F03\u5927\u7684\u6578\u5B57\u7522\u751F\u8F03\u5C0F\u7684\u53CD\u5C04\u3002","Amplitude start":"\u632F\u5E45\u958B\u59CB","Starting amplitude of waves (0 by default)":"\u958B\u59CB\u6CE2\u6D6A\u7684\u632F\u5E45(\u9ED8\u8A8D\u70BA0)","Amplitude ending":"\u632F\u5E45\u7D50\u675F","Ending amplitude of waves (20 by default)":"\u7D50\u675F\u6CE2\u6D6A\u632F\u52D5 (\u9ED8\u8A8D20)","Wave length start":"\u6CE2\u9577\u958B\u59CB","Starting wave length (30 by default)":"\u8D77\u59CB\u6CE2\u9577 (\u9ED8\u8A8D30)","Wave length ending":"\u6CE2\u9577\u7D50\u675F","Ending wave length (100 by default)":"\u7D50\u675F\u6CE2\u6D6A\u9577\u5EA6 (\u9ED8\u8A8D100)","Alpha start":"Alpha \u958B\u59CB","Starting alpha (1 by default)":"\u6B63\u5728\u555F\u52D5 Alpha (\u9ED8\u8A8D\u70BA1)","Alpha ending":"Alpha \u7D50\u675F","Ending alpha (1 by default)":"\u6B63\u5728\u7D50\u675FAlpha (\u9ED8\u8A8D\u70BA1)","RGB split (chromatic aberration)":"RGB \u62C6\u5206(\u8272\u5DEE)","Applies a RGB split effect also known as chromatic aberration.":"\u61C9\u7528\u4E00\u500B RGB \u62C6\u5206\u6548\u679C\uFF0C\u4E5F\u53EB\u505A\u8272\u5DEE\u3002","Red X offset (between -20 and 20)":"\u7D05\u8272X\u504F\u79FB\u91CF(-20\u81F320\u4E4B\u9593)","Red Y offset (between -20 and 20)":"\u7D05\u8272 Y \u504F\u79FB(-20 and 20)","Green X offset (between -20 and 20)":"\u7DA0\u8272 X \u504F\u79FB\u91CF(-20 \u548C 20)","Green Y offset (between -20 and 20)":"\u7DA0\u8272 Y \u504F\u79FB\u91CF(-20\u81F320\u4E4B\u9593)","Blue X offset (between -20 and 20)":"\u85CD\u8272 X \u504F\u79FB\u91CF(-20\u81F320\u4E4B\u9593)","Blue Y offset (between -20 and 20)":"\u85CD\u8272 Y \u504F\u79FB\u91CF(-20\u81F320\u4E4B\u9593)","Sepia":"\u68D5\u8910\u8272","Alter the colors to sepia.":"\u6539\u8B8A\u984F\u8272\u70BA\u68D5\u8910\u8272\u3002","Shockwave":"\u6C96\u64CA\u6CE2","Deform the image the way a drop deforms a water surface.":"\u50CF\u6C34\u6EF4\u4F7F\u6C34\u9762\u8B8A\u5F62\u4E00\u6A23\u4F7F\u5716\u50CF\u8B8A\u5F62\u3002","Elapsed time":"\u7D93\u904E\u6642\u9593","Spreading speed (in pixels per second)":"\u64F4\u5C55\u901F\u5EA6 (\u4EE5\u50CF\u7D20\u6BCF\u79D2\u70BA\u55AE\u4F4D)","Amplitude":"\u632F\u5E45","Wavelength":"\u6CE2\u9577","Maximum radius (0 for infinity)":"\u6700\u5927\u534A\u5F91 (0\u8868\u793A\u7121\u9650)","Center on X axis":"\u4EE5 X \u8EF8\u70BA\u4E2D\u5FC3","Center on Y axis":"\u4EE5 Y \u8EF8\u70BA\u4E2D\u5FC3","Tilt shift":"\u50BE\u659C\u504F\u79FB","Render a tilt-shift-like camera effect.":"\u6E32\u67D3\u4E00\u500B\u985E\u4F3C\u50BE\u659C\u79FB\u4F4D\u7684\u76F8\u6A5F\u6548\u679C\u3002","Blur (between 0 and 200)":"\u6A21\u7CCA(\u4ECB\u4E8E 0 \u5230 200\u4E4B\u9593)","Gradient blur (between 0 and 2000)":"\u6F38\u8B8A\u6A21\u7CCA(\u4ECB\u4E8E 0 \u81F3 2000\u4E4B\u9593)","Twist":"\u626D\u66F2\u7684","Applies a twist effect making objects appear twisted in the given direction.":"\u61C9\u7528\u626D\u66F2\u6548\u679C\u4F7F\u7269\u4EF6\u5728\u7D66\u5B9A\u7684\u65B9\u5411\u4E0A\u51FA\u73FE\u626D\u66F2\u3002","The radius of the twist":"\u65CB\u8F49\u534A\u5F91","Angle (between -10 and 10)":"\u89D2\u5EA6(-10 \u548C 10\u4E4B\u9593)","The angle in degree of the twist":"\u65CB\u8F49\u6642\u7684\u89D2\u5EA6","Offset X (between 0 and 1, 0.5 is image middle)":"\u504F\u79FB X (\u4ECB\u4E8E 0 \u548C 1 \u4E4B\u9593\uFF0C0.5 \u70BA\u5716\u50CF\u4E2D\u9593\u503C)","Offset Y (between 0 and 1, 0.5 is image middle)":"\u504F\u79FB Y (0-1, 0.5\u70BA\u5716\u50CF\u4E2D\u9593\u503C)","Zoom blur":"\u7E2E\u653E\u6A21\u7CCA\u5EA6","Applies a Zoom blur.":"\u61C9\u7528\u7E2E\u653E\u6A21\u7CCA\u6027\u3002","Inner radius":"\u5167\u534A\u5F91","strength (between 0 and 5)":"\u5F37\u5EA6(\u4ECB\u4E8E 0 \u5230 5)","Device vibration":"\u8A2D\u5099\u632F\u52D5","Vibrate":"\u632F\u52D5","Vibrate (Duration in ms).":"\u632F\u52D5(\u6BEB\u79D2\u6642\u9577)\u3002","Start vibration for _PARAM0_ ms":"\u555F\u52D5_PARAM0_ \u6BEB\u79D2\u7684\u632F\u52D5","Vibrate by pattern":"\u6309\u6A21\u5F0F\u632F\u52D5","Vibrate (Duration in ms). You can add multiple comma-separated values where every second value determines the period of silence between two vibrations. This is a string value so use quotes.":"\u632F\u52D5\uFF08\u4EE5\u6BEB\u79D2\u70BA\u55AE\u4F4D\u7684\u6301\u7E8C\u6642\u9593\uFF09\u3002\u60A8\u53EF\u4EE5\u6DFB\u52A0\u591A\u500B\u9017\u865F\u5206\u9694\u7684\u503C\uFF0C\u5176\u4E2D\u6BCF\u500B\u7B2C\u4E8C\u500B\u503C\u78BA\u5B9A\u5169\u6B21\u632F\u52D5\u4E4B\u9593\u7684\u975C\u97F3\u6642\u9593\u3002\u9019\u662F\u4E00\u500B\u5B57\u7B26\u4E32\u503C\uFF0C\u56E0\u6B64\u8ACB\u4F7F\u7528\u5F15\u865F\u3002","Intervals (for example \"500,100,200\"":"\u9593\u9694(\u4F8B\u5982\u201C500 100 200\u201D)","Stop vibration":"\u505C\u6B62\u632F\u52D5","Stop the vibration":"\u505C\u6B62\u632F\u52D5","Save State (experimental)":"\u4FDD\u5B58\u72C0\u614B\uFF08\u5BE6\u9A57\u6027\uFF09","Allows to save and load the full state of a game, usually on the device storage. A Save State, by default, contains the full state of the game (objects, variables, sounds, music, effects etc.). Using the \"Save Configuration\" behavior, you can customize which objects should not be saved in a Save State. You can also use the \"Change the save configuration of a variable\" action to change the save configuration of a variable. Finally, both objects, variables and scene/game data can be given a profile name: in this case, when saving or loading with one or more profile names specified, only the object/variables/data belonging to one of the specified profiles will be saved or loaded.":"\u5141\u8A31\u4FDD\u5B58\u548C\u52A0\u8F09\u904A\u6232\u7684\u5B8C\u6574\u72C0\u614B\uFF0C\u901A\u5E38\u5728\u8A2D\u5099\u5B58\u5132\u4E0A\u3002\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u4FDD\u5B58\u72C0\u614B\u5305\u542B\u904A\u6232\u7684\u5B8C\u6574\u72C0\u614B\uFF08\u5C0D\u8C61\u3001\u8B8A\u6578\u3001\u8072\u97F3\u3001\u97F3\u6A02\u3001\u7279\u6548\u7B49\uFF09\u3002\u4F7F\u7528\u300C\u4FDD\u5B58\u914D\u7F6E\u300D\u884C\u70BA\uFF0C\u60A8\u53EF\u4EE5\u81EA\u5B9A\u7FA9\u54EA\u4E9B\u5C0D\u8C61\u4E0D\u61C9\u4FDD\u5B58\u5230\u4FDD\u5B58\u72C0\u614B\u4E2D\u3002\u60A8\u9084\u53EF\u4EE5\u4F7F\u7528\u300C\u66F4\u6539\u8B8A\u6578\u7684\u4FDD\u5B58\u914D\u7F6E\u300D\u52D5\u4F5C\u4F86\u66F4\u6539\u8B8A\u6578\u7684\u4FDD\u5B58\u914D\u7F6E\u3002\u6700\u5F8C\uFF0C\u5C0D\u8C61\u3001\u8B8A\u6578\u548C\u5834\u666F/\u904A\u6232\u6578\u64DA\u90FD\u53EF\u4EE5\u8CE6\u4E88\u4E00\u500B\u6A94\u6848\u540D\u7A31\uFF1A\u5728\u9019\u7A2E\u60C5\u6CC1\u4E0B\uFF0C\u7576\u6307\u5B9A\u4E00\u500B\u6216\u591A\u500B\u6A94\u6848\u540D\u7A31\u9032\u884C\u4FDD\u5B58\u6216\u52A0\u8F09\u6642\uFF0C\u53EA\u6709\u5C6C\u65BC\u6307\u5B9A\u6A94\u6848\u4E4B\u4E00\u7684\u5C0D\u8C61/\u8B8A\u6578/\u6578\u64DA\u6703\u88AB\u4FDD\u5B58\u6216\u52A0\u8F09\u3002","Save game to a variable":"\u5C07\u904A\u6232\u4FDD\u5B58\u5230\u8B8A\u91CF\u4E2D","Create a Save State and save it to a variable. This is for advanced usage, prefer to use \"Save game to device storage\" in most cases.":"\u5275\u5EFA\u4E00\u500B\u4FDD\u5B58\u72C0\u614B\u4E26\u5C07\u5176\u4FDD\u5B58\u5230\u8B8A\u6578\u4E2D\u3002\u9019\u662F\u9AD8\u7D1A\u7528\u6CD5\uFF0C\u901A\u5E38\u60C5\u6CC1\u4E0B\u5EFA\u8B70\u4F7F\u7528\u300C\u4FDD\u5B58\u904A\u6232\u5230\u8A2D\u5099\u5B58\u5132\u300D\u3002","Save game in variable _PARAM1_ (profile(s): _PARAM2_)":"\u5C07\u904A\u6232\u4FDD\u5B58\u5230\u8B8A\u6578 _PARAM1_\uFF08\u6A94\u6848\uFF1A _PARAM2_\uFF09","Variable to store the save to":"\u7528\u65BC\u5B58\u5132\u4FDD\u5B58\u7684\u8B8A\u91CF","Profile(s) to save":"\u8981\u4FDD\u5B58\u7684\u6A94\u6848","Comma-separated list of profile names that must be saved. Only objects tagged with at least one of these profiles will be saved. If no profile names are specified, all objects will be saved (unless they have a \"Save Configuration\" behavior set to \"Do not save\").":"\u5FC5\u9808\u5132\u5B58\u7684\u4EE5\u9017\u865F\u5206\u9694\u7684\u914D\u7F6E\u540D\u7A31\u5217\u8868\u3002\u53EA\u6709\u6A19\u7C64\u70BA\u9019\u4E9B\u914D\u7F6E\u4E4B\u4E00\u7684\u7269\u4EF6\u6703\u88AB\u5132\u5B58\u3002\u5982\u679C\u672A\u6307\u5B9A\u914D\u7F6E\u540D\u7A31\uFF0C\u6240\u6709\u7269\u4EF6\u90FD\u5C07\u88AB\u5132\u5B58\uFF08\u9664\u975E\u5B83\u5011\u5177\u5099 \"\u5132\u5B58\u914D\u7F6E\" \u884C\u70BA\u8A2D\u7F6E\u70BA \"\u4E0D\u5132\u5B58\"\uFF09\u3002","Save game to device storage":"\u5C07\u904A\u6232\u5132\u5B58\u5230\u88DD\u7F6E\u5132\u5B58\u7A7A\u9593","Create a Save State and save it to device storage.":"\u5275\u5EFA\u4E00\u500B\u5132\u5B58\u72C0\u614B\u4E26\u5C07\u5176\u5132\u5B58\u5230\u8A2D\u5099\u5B58\u5132\u4E2D\u3002","Save game to device storage named _PARAM1_ (profile(s): _PARAM2_)":"\u5C07\u904A\u6232\u5132\u5B58\u5230\u540D\u70BA _PARAM1_ \u7684\u8A2D\u5099\u5B58\u5132\u4E2D\uFF08\u914D\u7F6E\uFF1A _PARAM2_\uFF09","Storage key to save to":"\u8981\u5132\u5B58\u5230\u7684\u5132\u5B58\u9470\u5319","Load game from variable":"\u5F9E\u8B8A\u91CF\u8F09\u5165\u904A\u6232","Restore the game from a Save State stored in the specified variable. This is for advanced usage, prefer to use \"Load game from device storage\" in most cases.":"\u5F9E\u6307\u5B9A\u8B8A\u6578\u4E2D\u6062\u5FA9\u904A\u6232\u7684\u5132\u5B58\u72C0\u614B\u3002\u9019\u662F\u4F9B\u9032\u968E\u4F7F\u7528\uFF0C\u901A\u5E38\u60C5\u6CC1\u4E0B\u5EFA\u8B70\u4F7F\u7528\"\u5F9E\u8A2D\u5099\u5132\u5B58\u4E2D\u8F09\u5165\u904A\u6232\"\u3002","Load game from variable _PARAM1_ (profile(s): _PARAM2_, stop and restart all the scenes currently played: _PARAM3_)":"\u5F9E\u8B8A\u6578 _PARAM1_ \u8F09\u5165\u904A\u6232\uFF08\u914D\u7F6E\uFF1A _PARAM2_\uFF0C\u505C\u6B62\u4E26\u91CD\u555F\u7576\u524D\u64AD\u653E\u7684\u6240\u6709\u5834\u666F\uFF1A _PARAM3_\uFF09","Load":"\u8F09\u5165","Variable to load the game from":"\u8981\u5F9E\u4E2D\u8F09\u5165\u904A\u6232\u7684\u8B8A\u91CF","Profile(s) to load":"\u8981\u8F09\u5165\u7684\u914D\u7F6E","Comma-separated list of profile names that must be loaded. Only objects tagged with at least one of these profiles will be loaded - others will be left alone. If no profile names are specified, all objects will be loaded (unless they have a \"Save Configuration\" behavior set to \"Do not save\").":"\u5FC5\u9808\u8F09\u5165\u7684\u4EE5\u9017\u865F\u5206\u9694\u7684\u914D\u7F6E\u540D\u7A31\u5217\u8868\u3002\u53EA\u6709\u6A19\u7C64\u70BA\u9019\u4E9B\u914D\u7F6E\u4E4B\u4E00\u7684\u7269\u4EF6\u6703\u88AB\u8F09\u5165 - \u5176\u4ED6\u7684\u5C07\u88AB\u5FFD\u7565\u3002\u5982\u679C\u672A\u6307\u5B9A\u914D\u7F6E\u540D\u7A31\uFF0C\u6240\u6709\u7269\u4EF6\u90FD\u5C07\u88AB\u8F09\u5165\uFF08\u9664\u975E\u5B83\u5011\u5177\u5099 \"\u5132\u5B58\u914D\u7F6E\" \u884C\u70BA\u8A2D\u7F6E\u70BA \"\u4E0D\u5132\u5B58\"\uFF09\u3002","Stop and restart all the scenes currently played?":"\u8981\u505C\u6B62\u4E26\u91CD\u555F\u7576\u524D\u64AD\u653E\u7684\u6240\u6709\u5834\u666F\uFF1F","Load game from device storage":"\u5F9E\u88DD\u7F6E\u5132\u5B58\u7A7A\u9593\u8F09\u5165\u904A\u6232","Restore the game from a Save State stored on the device.":"\u5F9E\u8A2D\u5099\u4E0A\u5132\u5B58\u7684\u5132\u5B58\u72C0\u614B\u4E2D\u6062\u5FA9\u904A\u6232\u3002","Load game from device storage named _PARAM1_ (profile(s): _PARAM2_, stop and restart all the scenes currently played: _PARAM3_)":"\u5F9E\u540D\u70BA _PARAM1_ \u7684\u8A2D\u5099\u5B58\u5132\u4E2D\u8F09\u5165\u904A\u6232\uFF08\u914D\u7F6E\uFF1A _PARAM2_\uFF0C\u505C\u6B62\u4E26\u91CD\u555F\u7576\u524D\u64AD\u653E\u7684\u6240\u6709\u5834\u666F\uFF1A _PARAM3_\uFF09","Storage name to load the game from":"\u8981\u8F09\u5165\u7684\u5132\u5B58\u540D\u7A31","Comma-separated list of profile names that must be loaded. Only objects tagged with at least one of these profiles will be loaded - others will be left alone. If no profile names are specified, all objects will be loaded.":"\u5FC5\u9808\u8F09\u5165\u7684\u4EE5\u9017\u865F\u5206\u9694\u7684\u914D\u7F6E\u540D\u7A31\u5217\u8868\u3002\u53EA\u6709\u6A19\u7C64\u70BA\u9019\u4E9B\u914D\u7F6E\u4E4B\u4E00\u7684\u7269\u4EF6\u6703\u88AB\u8F09\u5165 - \u5176\u4ED6\u7684\u5C07\u88AB\u5FFD\u7565\u3002\u5982\u679C\u672A\u6307\u5B9A\u914D\u7F6E\u540D\u7A31\uFF0C\u6240\u6709\u7269\u4EF6\u90FD\u5C07\u88AB\u8F09\u5165\u3002","Time since last save":"\u81EA\u4E0A\u6B21\u5132\u5B58\u4EE5\u4F86\u7684\u6642\u9593","Time since the last save, in seconds. Returns -1 if no save happened, and a positive number otherwise.":"\u81EA\u4E0A\u6B21\u5132\u5B58\u4EE5\u4F86\u7684\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002\u5982\u679C\u6C92\u6709\u767C\u751F\u5132\u5B58\uFF0C\u5247\u8FD4\u56DE -1\uFF0C\u5426\u5247\u8FD4\u56DE\u6B63\u6578\u3002","Time since the last save":"\u81EA\u4E0A\u6B21\u5132\u5B58\u4EE5\u4F86\u7684\u6642\u9593","Time since last load":"\u81EA\u4E0A\u6B21\u8F09\u5165\u4EE5\u4F86\u7684\u6642\u9593","Time since the last load, in seconds. Returns -1 if no load happened, and a positive number otherwise.":"\u81EA\u4E0A\u6B21\u8F09\u5165\u4EE5\u4F86\u7684\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002\u5982\u679C\u6C92\u6709\u767C\u751F\u8F09\u5165\uFF0C\u5247\u8FD4\u56DE -1\uFF0C\u5426\u5247\u8FD4\u56DE\u6B63\u6578\u3002","Time since the last load":"\u81EA\u4E0A\u6B21\u8F09\u5165\u4EE5\u4F86\u7684\u6642\u9593","Save just succeeded":"\u5132\u5B58\u525B\u525B\u6210\u529F","The last save attempt just succeeded.":"\u4E0A\u4E00\u6B21\u7684\u5132\u5B58\u5617\u8A66\u5DF2\u6210\u529F\u3002","Save just failed":"\u5132\u5B58\u525B\u525B\u5931\u6557","The last save attempt just failed.":"\u4E0A\u4E00\u6B21\u7684\u5132\u5B58\u5617\u8A66\u5931\u6557\u3002","Load just succeeded":"\u8F09\u5165\u525B\u525B\u6210\u529F","The last load attempt just succeeded.":"\u4E0A\u4E00\u6B21\u7684\u8F09\u5165\u5617\u8A66\u5DF2\u6210\u529F\u3002","Load just failed":"\u8F09\u5165\u525B\u525B\u5931\u6557","The last load attempt just failed.":"\u4E0A\u4E00\u6B21\u7684\u8F09\u5165\u5617\u8A66\u5931\u6557\u3002","Change the save configuration of a variable":"\u66F4\u6539\u8B8A\u6578\u7684\u5132\u5B58\u914D\u7F6E","Set if a scene or global variable should be saved in the default save state. Also allow to specify one or more profiles in which the variable should be saved.":"\u8A2D\u5B9A\u5834\u666F\u6216\u5168\u57DF\u8B8A\u6578\u662F\u5426\u61C9\u8A72\u5132\u5B58\u5728\u9810\u8A2D\u5132\u5B58\u72C0\u614B\u4E2D\u3002\u4E5F\u53EF\u4EE5\u6307\u5B9A\u4E00\u500B\u6216\u591A\u500B\u914D\u7F6E\uFF0C\u8A72\u8B8A\u6578\u61C9\u8A72\u5132\u5B58\u5728\u5176\u4E2D\u3002","Change save configuration of _PARAM1_: save it in the default save states: _PARAM2_ and in profiles: _PARAM3_":"\u66F4\u6539 _PARAM1_ \u7684\u5132\u5B58\u914D\u7F6E\uFF1A\u5C07\u5176\u5132\u5B58\u5728\u9810\u8A2D\u5132\u5B58\u72C0\u614B\u4E2D\uFF1A _PARAM2_ \u4E26\u5728\u914D\u7F6E\u4E2D\uFF1A _PARAM3_","Advanced configuration":"\u9032\u968E\u914D\u7F6E","Variable for which configuration should be changed":"\u61C9\u8A72\u66F4\u6539\u914D\u7F6E\u7684\u8B8A\u6578","Persist in default save states":"\u5728\u9810\u8A2D\u5132\u5B58\u72C0\u614B\u4E2D\u6301\u4E45\u5316","Profiles in which the variable should be saved":"\u8B8A\u6578\u8A72\u5132\u5B58\u5728\u5176\u4E2D\u7684\u914D\u7F6E","Comma-separated list of profile names in which the variable will be saved. When a save state is created with one or more profile names specified, the variable will be saved only if it matches one of these profiles.":"\u4EE5\u9017\u865F\u5206\u9694\u7684\u914D\u7F6E\u540D\u7A31\u5217\u8868\uFF0C\u8A72\u8B8A\u6578\u5C07\u5132\u5B58\u5728\u5176\u4E2D\u3002\u7576\u5275\u5EFA\u4E00\u500B\u5177\u6709\u4E00\u500B\u6216\u591A\u500B\u6307\u5B9A\u7684\u914D\u7F6E\u540D\u7A31\u7684\u5132\u5B58\u72C0\u614B\u6642\uFF0C\u8A72\u8B8A\u6578\u5C07\u50C5\u5728\u5339\u914D\u5176\u4E2D\u4E4B\u4E00\u6642\u5132\u5B58\u3002","Change the save configuration of the global game data":"\u66F4\u6539\u5168\u57DF\u904A\u6232\u6578\u64DA\u7684\u5132\u5B58\u914D\u7F6E","Set if the global game data (audio & global variables) should be saved in the default save state. Also allow to specify one or more profiles in which the global game data should be saved.":"\u8A2D\u5B9A\u5168\u57DF\u904A\u6232\u6578\u64DA\uFF08\u97F3\u983B\u548C\u5168\u57DF\u8B8A\u6578\uFF09\u662F\u5426\u61C9\u5132\u5B58\u5728\u9810\u8A2D\u5132\u5B58\u72C0\u614B\u4E2D\u3002\u540C\u6642\u5141\u8A31\u6307\u5B9A\u4E00\u500B\u6216\u591A\u500B\u914D\u7F6E\uFF0C\u5176\u4E2D\u5168\u57DF\u904A\u6232\u6578\u64DA\u61C9\u8A72\u88AB\u5132\u5B58\u3002","Change save configuration of global game data: save them in the default save states: _PARAM1_ and in profiles: _PARAM2_":"\u66F4\u6539\u5168\u57DF\u904A\u6232\u6578\u64DA\u7684\u5132\u5B58\u914D\u7F6E\uFF1A\u5C07\u5176\u5132\u5B58\u5728\u9810\u8A2D\u5132\u5B58\u72C0\u614B\u4E2D\uFF1A _PARAM1_ \u4E26\u5728\u914D\u7F6E\u4E2D\uFF1A _PARAM2_","Profiles in which the global game data should be saved":"\u61C9\u5132\u5B58\u5168\u57DF\u904A\u6232\u6578\u64DA\u7684\u914D\u7F6E","Comma-separated list of profile names in which the global game data will be saved. When a save state is created with one or more profile names specified, the global game data will be saved only if it matches one of these profiles.":"\u4EE5\u9017\u865F\u5206\u9694\u7684\u914D\u7F6E\u540D\u7A31\u5217\u8868\uFF0C\u8A72\u5168\u57DF\u904A\u6232\u6578\u64DA\u5C07\u5132\u5B58\u5728\u5176\u4E2D\u3002\u7576\u5275\u5EFA\u4E00\u500B\u5177\u6709\u4E00\u500B\u6216\u591A\u500B\u6307\u5B9A\u7684\u914D\u7F6E\u540D\u7A31\u7684\u5132\u5B58\u72C0\u614B\u6642\uFF0C\u8A72\u5168\u57DF\u904A\u6232\u6578\u64DA\u50C5\u5728\u5339\u914D\u5176\u4E2D\u4E4B\u4E00\u6642\u5132\u5B58\u3002","Change the save configuration of a scene data":"\u66F4\u6539\u5834\u666F\u6578\u64DA\u7684\u5132\u5B58\u914D\u7F6E","Set if the data of the specified scene (scene variables, timers, trigger once, wait actions, layers, etc.) should be saved in the default save state. Also allow to specify one or more profiles in which the scene data should be saved. Note: objects are always saved separately from the scene data (use the \"Save Configuration\" behavior to customize the configuration of objects).":"\u8A2D\u5B9A\u6307\u5B9A\u5834\u666F\u7684\u6578\u64DA\uFF08\u5834\u666F\u8B8A\u6578\u3001\u8A08\u6642\u5668\u3001\u89F8\u767C\u4E00\u6B21\u3001\u7B49\u5F85\u52D5\u4F5C\u3001\u5716\u5C64\u7B49\uFF09\u662F\u5426\u61C9\u5132\u5B58\u5728\u9810\u8A2D\u5132\u5B58\u72C0\u614B\u4E2D\u3002\u540C\u6642\u5141\u8A31\u6307\u5B9A\u4E00\u500B\u6216\u591A\u500B\u914D\u7F6E\uFF0C\u8A72\u5834\u666F\u6578\u64DA\u61C9\u5132\u5B58\u3002\u6CE8\u610F\uFF1A\u7269\u4EF6\u7E3D\u662F\u8207\u5834\u666F\u6578\u64DA\u5206\u958B\u5132\u5B58\uFF08\u4F7F\u7528\"\u5132\u5B58\u914D\u7F6E\"\u884C\u70BA\u4F86\u81EA\u5B9A\u7FA9\u7269\u4EF6\u7684\u914D\u7F6E\uFF09\u3002","Change save configuration of scene _PARAM1_: save it in the default save states: _PARAM2_ and in profiles: _PARAM3_":"\u66F4\u6539\u5834\u666F _PARAM1_ \u7684\u5132\u5B58\u914D\u7F6E\uFF1A\u5C07\u5176\u5132\u5B58\u5728\u9810\u8A2D\u5132\u5B58\u72C0\u614B\u4E2D\uFF1A _PARAM2_ \u4E26\u5728\u914D\u7F6E\u4E2D\uFF1A _PARAM3_","Scene name for which configuration should be changed":"\u61C9\u66F4\u6539\u914D\u7F6E\u7684\u5834\u666F\u540D\u7A31","Profiles in which the scene data should be saved":"\u61C9\u5132\u5B58\u5834\u666F\u6578\u64DA\u7684\u914D\u7F6E","Comma-separated list of profile names in which the scene data will be saved. When a save state is created with one or more profile names specified, the scene data will be saved only if it matches one of these profiles.":"\u4EE5\u9017\u865F\u5206\u9694\u7684\u914D\u7F6E\u540D\u7A31\u5217\u8868\uFF0C\u8A72\u5834\u666F\u6578\u64DA\u5C07\u5132\u5B58\u5728\u5176\u4E2D\u3002\u7576\u5275\u5EFA\u4E00\u500B\u5177\u6709\u4E00\u500B\u6216\u591A\u500B\u6307\u5B9A\u7684\u914D\u7F6E\u540D\u7A31\u7684\u5132\u5B58\u72C0\u614B\u6642\uFF0C\u8A72\u5834\u666F\u6578\u64DA\u50C5\u5728\u5339\u914D\u5176\u4E2D\u4E4B\u4E00\u6642\u5132\u5B58\u3002","Persistence mode":"\u6301\u4E45\u5316\u6A21\u5F0F","Include in save states (default)":"\u5305\u542B\u5728\u5132\u5B58\u72C0\u614B\u4E2D\uFF08\u9810\u8A2D\uFF09","Do not save":"\u4E0D\u5132\u5B58","Save profile names":"\u5132\u5B58\u914D\u7F6E\u540D\u7A31","Comma-separated list of profile names in which the object is saved. When a save state is created with one or more profile names specified, the object will be saved only if it matches one of these profiles.":"\u4EE5\u9017\u865F\u5206\u9694\u7684\u914D\u7F6E\u540D\u7A31\u5217\u8868\uFF0C\u8A72\u7269\u4EF6\u88AB\u5132\u5B58\u3002\u7576\u5275\u5EFA\u4E00\u500B\u5177\u6709\u4E00\u500B\u6216\u591A\u500B\u6307\u5B9A\u7684\u914D\u7F6E\u540D\u7A31\u7684\u5132\u5B58\u72C0\u614B\u6642\uFF0C\u8A72\u7269\u4EF6\u5C07\u50C5\u5728\u5339\u914D\u5176\u4E2D\u4E4B\u4E00\u6642\u5132\u5B58\u3002","Save state configuration":"\u5132\u5B58\u72C0\u614B\u914D\u7F6E","Allow the customize how the object is persisted in a save state.":"\u5141\u8A31\u81EA\u5B9A\u7FA9\u7269\u4EF6\u5728\u5132\u5B58\u72C0\u614B\u4E2D\u5982\u4F55\u6301\u4E45\u5316\u3002","Advanced window management":"\u9AD8\u7D1A\u7A97\u53E3\u7BA1\u7406","Provides advanced features related to the game window positioning and interaction with the operating system.":"\u63D0\u4F9B\u8207\u904A\u6232\u7A97\u53E3\u5B9A\u4F4D\u548C\u64CD\u4F5C\u7CFB\u7D71\u4EA4\u4E92\u76F8\u95DC\u7684\u9AD8\u7D1A\u529F\u80FD\u3002","Window focus":"\u7A97\u53E3\u7126\u9EDE","Make the window gain or lose focus.":"\u4F7F\u7A97\u53E3\u7372\u5F97\u6216\u5931\u53BB\u7126\u9EDE\u3002","Focus the window: _PARAM0_":"\u7126\u9EDE\u7A97\u53E3\uFF1A_PARAM0_","Windows, Linux, macOS":"Windows, Linux, macOS","Focus the window?":"\u805A\u7126\u7A97\u53E3\uFF1F","Window focused":"\u7A97\u53E3\u805A\u7126","Checks if the window is focused.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u5C0D\u6E96\u3002","The window is focused":"\u7A97\u53E3\u88AB\u805A\u7126","Window visibility":"\u7A97\u53E3\u53EF\u898B\u6027","Make the window visible or invisible.":"\u4F7F\u7A97\u53E3\u53EF\u898B\u6216\u4E0D\u53EF\u898B\u3002","Window visible: _PARAM0_":"\u7A97\u53E3\u53EF\u898B\uFF1A_PARAM0_","Show window?":"\u986F\u793A\u7A97\u53E3\uFF1F","Window visible":"\u7A97\u53E3\u53EF\u898B","Checks if the window is visible.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u53EF\u898B\u3002","The window is visible":"\u7A97\u53E3\u53EF\u898B","Maximize the window":"\u6700\u5927\u5316\u7A97\u53E3","Maximize or unmaximize the window.":"\u6700\u5927\u5316\u6216\u53D6\u6D88\u7A97\u53E3\u6700\u5927\u5316\u3002","Maximize window: _PARAM0_":"\u6700\u5927\u5316\u7A97\u53E3\uFF1A_PARAM0_","Maximize window?":"\u6700\u5927\u5316\u7A97\u53E3\uFF1F","Window maximized":"\u7A97\u53E3\u6700\u5927\u5316","Checks if the window is maximized.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u6700\u5927\u5316\u3002","The window is maximized":"\u7A97\u53E3\u6700\u5927\u5316","Minimize the window":"\u6700\u5C0F\u5316\u7A97\u53E3","Minimize or unminimize the window.":"\u6700\u5C0F\u5316\u6216\u53D6\u6D88\u6700\u5C0F\u5316\u7A97\u53E3\u3002","Minimize window: _PARAM0_":"\u6700\u5C0F\u5316\u7A97\u53E3\uFF1A_PARAM0_","Minimize window?":"\u6700\u5C0F\u5316\u7A97\u53E3\uFF1F","Window minimized":"\u7A97\u53E3\u6700\u5C0F\u5316","Checks if the window is minimized.":"\u6AA2\u67E5\u662F\u5426\u6700\u5C0F\u5316\u7A97\u53E3\u3002","The window is minimized":"\u7A97\u53E3\u6700\u5C0F\u5316","Enable the window":"\u555F\u7528\u7A97\u53E3","Enables or disables the window.":"\u555F\u7528\u6216\u7981\u7528\u7A97\u53E3\u3002","Enable window: _PARAM0_":"\u555F\u7528\u7A97\u53E3\uFF1A_PARAM0_","Enable window?":"\u555F\u7528\u7A97\u53E3\uFF1F","Window enabled":"\u7A97\u53E3\u5DF2\u555F\u7528","Checks if the window is enabled.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u555F\u7528\u3002","The window is enabled":"\u7A97\u53E3\u5DF2\u555F\u7528","Allow resizing":"\u5141\u8A31\u8ABF\u6574\u5927\u5C0F","Enables or disables resizing of the window by the user.":"\u555F\u7528\u6216\u7981\u7528\u7528\u6236\u8ABF\u6574\u7A97\u53E3\u5927\u5C0F\u3002","Enable window resizing: _PARAM0_":"\u555F\u7528\u7A97\u53E3\u5927\u5C0F\u8ABF\u6574: _PARAM0_","Allow resizing?":"\u5141\u8A31\u8ABF\u6574\u5927\u5C0F\uFF1F","Window resizable":"\u53EF\u8ABF\u6574\u7A97\u53E3\u5927\u5C0F","Checks if the window can be resized.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u53EF\u4EE5\u8ABF\u6574\u5927\u5C0F\u3002","The window can be resized":"\u7A97\u53E3\u5927\u5C0F\u53EF\u4EE5\u8ABF\u6574","Allow moving":"\u5141\u8A31\u79FB\u52D5","Enables or disables moving of the window by the user.":"\u555F\u7528\u6216\u7981\u7528\u7528\u6236\u79FB\u52D5\u7A97\u53E3\u3002","Enable window moving: _PARAM0_":"\u555F\u7528\u7A97\u53E3\u79FB\u52D5\uFF1A_PARAM0_","Allow moving?":"\u662F\u5426\u5141\u8A31\u79FB\u52D5\uFF1F","Window movable":"\u7A97\u53E3\u53EF\u79FB\u52D5","Checks if the window can be moved.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u53EF\u4EE5\u79FB\u52D5\u3002","The window can be moved":"\u7A97\u53E3\u53EF\u4EE5\u79FB\u52D5","Allow maximizing":"\u5141\u8A31\u6700\u5927\u5316","Enables or disables maximizing of the window by the user.":"\u555F\u7528\u6216\u7981\u7528\u7528\u6236\u6700\u5927\u5316\u7A97\u53E3\u3002","Enable window maximizing: _PARAM0_":"\u555F\u7528\u7A97\u53E3\u6700\u5927\u5316: _PARAM0_","Allow maximizing?":"\u662F\u5426\u5141\u8A31\u6700\u5927\u5316\uFF1F","Window maximizable":"\u7A97\u53E3\u6700\u5927\u5316","Checks if the window can be maximized.":"\u6AA2\u67E5\u662F\u5426\u53EF\u4EE5\u6700\u5927\u5316\u7A97\u53E3\u3002","The window can be maximized":"\u7A97\u53E3\u53EF\u4EE5\u88AB\u6700\u5927\u5316","Allow minimizing":"\u5141\u8A31\u6700\u5C0F\u5316","Enables or disables minimizing of the window by the user.":"\u555F\u7528\u6216\u7981\u7528\u7528\u6236\u6700\u5C0F\u5316\u7A97\u53E3\u3002","Enable window minimizing: _PARAM0_":"\u555F\u7528\u7A97\u53E3\u6700\u5C0F\u5316\uFF1A_PARAM0_","Allow minimizing?":"\u662F\u5426\u5141\u8A31\u6700\u5C0F\u5316\uFF1F","Window minimizable":"\u7A97\u53E3\u6700\u5C0F\u5316","Checks if the window can be minimized.":"\u6AA2\u67E5\u662F\u5426\u53EF\u4EE5\u6700\u5C0F\u5316\u7A97\u53E3\u3002","The window can be minimized":"\u7A97\u53E3\u53EF\u4EE5\u6700\u5C0F\u5316","Allow full-screening":"\u5141\u8A31\u5168\u5C4F\u986F\u793A","Enables or disables full-screening of the window by the user.":"\u555F\u7528\u6216\u7981\u7528\u7528\u6236\u5C0D\u7A97\u53E3\u7684\u5168\u5C4F\u986F\u793A\u3002","Enable window full-screening: _PARAM0_":"\u555F\u7528\u7A97\u53E3\u5168\u5C4F:_PARAM0_","Allow full-screening?":"\u5141\u8A31\u5168\u5C4F\uFF1F","Window full-screenable":"\u7A97\u53E3\u5168\u5C4F\u555F\u7528","Checks if the window can be full-screened.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u53EF\u4EE5\u5168\u5C4F\u3002","The window can be set in fullscreen":"\u7A97\u53E3\u53EF\u4EE5\u5168\u5C4F\u8A2D\u5B9A","Allow closing":"\u5141\u8A31\u95DC\u9589","Enables or disables closing of the window by the user.":"\u555F\u7528\u6216\u7981\u7528\u7528\u6236\u95DC\u9589\u7A97\u53E3\u3002","Enable window closing: _PARAM0_":"\u555F\u7528\u7A97\u53E3\u95DC\u9589\uFF1A _PARAM0_","Allow closing?":"\u662F\u5426\u5141\u8A31\u95DC\u9589\uFF1F","Window closable":"\u7A97\u53E3\u53EF\u95DC\u9589","Checks if the window can be closed.":"\u6AA2\u67E5\u662F\u5426\u53EF\u4EE5\u95DC\u9589\u7A97\u53E3\u3002","The window can be closed":"\u7A97\u53E3\u53EF\u4EE5\u95DC\u9589","Make the window always on top":"\u4F7F\u7A97\u53E3\u59CB\u7D42\u7F6E\u4E8E\u9802\u7AEF","Puts the window constantly above all other windows.":"\u5C07\u7A97\u53E3\u59CB\u7D42\u7F6E\u4E8E\u6240\u6709\u5176\u4ED6\u7A97\u53E3\u4E4B\u4E0A\u3002","Make window always on top: _PARAM0_, level: _PARAM1_":"\u4F7F\u7A97\u53E3\u59CB\u7D42\u4F4D\u4E8E\u9802\u90E8: _PARAM0_, \u7D1A\u5225: _PARAM1_","Enable always on top?":"\u7E3D\u662F\u5728\u9802\u90E8\u555F\u7528\uFF1F","Level":"\u7D1A\u5225","Window always on top":"\u7A97\u53E3\u7E3D\u662F\u5728\u9802\u7AEF","Checks if the window is always on top.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u7E3D\u662F\u5728\u9802\u90E8\u3002","The window is always on top":"\u7A97\u53E3\u7E3D\u662F\u5728\u9802\u90E8","Enable kiosk mode":"\u555F\u7528 kiosk \u6A21\u5F0F","Puts the window in kiosk mode. This prevents the user from exiting fullscreen.":"\u5C07\u7A97\u53E3\u7F6E\u4E8Ekiosk\u6A21\u5F0F\u3002\u9019\u5C07\u9632\u6B62\u7528\u6236\u9000\u51FA\u5168\u5C4F\u3002","Enable kiosk mode: _PARAM0_":"\u555F\u7528kiosk\u6A21\u5F0F\uFF1A_PARAM0_","Enable kiosk mode?":"\u555F\u7528kiosk\u6A21\u5F0F\uFF1F","Kiosk mode":"Kiosk \u6A21\u5F0F","Checks if the window is currently in kiosk mode.":"\u6AA2\u67E5\u7A97\u53E3\u662F\u5426\u76EE\u524D\u8655\u4E8Ekiosk\u6A21\u5F0F\u3002","The window is in kiosk mode":"\u7A97\u53E3\u8655\u4E8Ekiosk\u6A21\u5F0F","Enable window shadow":"\u555F\u7528\u7A97\u53E3\u9670\u5F71","Enables or disables the window shadow.":"\u555F\u7528\u6216\u7981\u7528\u7A97\u53E3\u9670\u5F71\u3002","Enable window shadow: _PARAM0_":"\u555F\u7528\u7A97\u53E3\u9670\u5F71\uFF1A _PARAM0_","Enable shadow?":"\u555F\u7528\u9670\u5F71\uFF1F","Checks if the window currently has it's shadow enabled.":"\u6AA2\u67E5\u7A97\u53E3\u7576\u524D\u662F\u5426\u555F\u7528\u4E86\u9670\u5F71\u3002","The window has a shadow":"\u7A97\u53E3\u6709\u9670\u5F71","Enable content protection":"\u555F\u7528\u5167\u5BB9\u4FDD\u8B77","Enables or disables the content protection mode. This should prevent screenshots of the game from being taken.":"\u555F\u7528\u6216\u7981\u7528\u5167\u5BB9\u4FDD\u8B77\u6A21\u5F0F\u3002\u9019\u5C07\u9632\u6B62\u904A\u6232\u5C4F\u5E55\u622A\u5716\u3002","Enable content protection: _PARAM0_":"\u555F\u7528\u5167\u5BB9\u4FDD\u8B77\uFF1A_PARAM0_","Enable content protection?":"\u555F\u7528\u5167\u5BB9\u4FDD\u8B77\uFF1F","Allow focusing":"\u5141\u8A31\u805A\u7126","Allow or disallow the user to focus the window.":"\u5141\u8A31\u6216\u4E0D\u5141\u8A31\u7528\u6236\u95DC\u6CE8\u7A97\u53E3\u3002","Allow to focus the window: _PARAM0_":"\u5141\u8A31\u7126\u9EDE\u7A97\u53E3\uFF1A_PARAM0_","Allow focus?":"\u5141\u8A31\u805A\u7126\uFF1F","Flash the window":"\u9583\u720D\u7A97\u53E3","Make the window flash or end flashing.":"\u4F7F\u7A97\u53E3\u9583\u720D\u6216\u7D50\u675F\u9583\u720D\u3002","Make the window flash: _PARAM0_":"\u5F48\u51FA\u7A97\u53E3: _PARAM0_","Flash the window?":"\u9583\u720D\u7A97\u53E3?","Window opacity":"\u7A97\u53E3\u4E0D\u900F\u660E\u5EA6","Changes the window opacity.":"\u66F4\u6539\u7A97\u53E3\u4E0D\u900F\u660E\u5EA6\u3002","Set the window opacity to _PARAM0_":"\u5C07\u7A97\u53E3\u4E0D\u900F\u660E\u5EA6\u8A2D\u5B9A\u70BA _PARAM0_","New opacity":"\u65B0\u7684\u4E0D\u900F\u660E\u5EA6","Window position":"\u7A97\u53E3\u4F4D\u7F6E","Changes the window position.":"\u66F4\u6539\u7A97\u53E3\u4F4D\u7F6E\u3002","Set the window position to _PARAM0_;_PARAM1_":"\u5C07\u7A97\u53E3\u4F4D\u7F6E\u8A2D\u5B9A\u70BA _PARAM0_; _PARAM1_","Window X position":"\u7A97\u53E3 X \u4F4D\u7F6E","Returns the current window X position.":"\u8FD4\u56DE\u7576\u524D\u7A97\u53E3 X \u4F4D\u7F6E\u3002","Window Y position":"\u7A97\u53E3 Y \u4F4D\u7F6E","Returns the current window Y position.":"\u8FD4\u56DE\u7576\u524D\u7A97\u53E3 Y \u4F4D\u7F6E\u3002","Returns the current window opacity (a number from 0 to 1, 1 being fully opaque).":"\u8FD4\u56DE\u7576\u524D\u7A97\u53E3\u4E0D\u900F\u660E\u5EA6(\u4E00\u500B\u6578\u5B57\u5F9E 0 \u5230 1, 1 \u662F\u5B8C\u5168\u4E0D\u900F\u660E\u5EA6)\u3002","Firebase":"Firebase","Use Google Firebase services (database, functions, storage...) in your game.":"\u5728\u60A8\u7684\u904A\u6232\u4E2D\u4F7F\u7528 Google Firebase\u670D\u52D9 (\u8CC7\u6599\u5EAB\u3001\u529F\u80FD\u3001\u5B58\u5132...)\u3002","Firebase configuration string":"Firebase\u914D\u7F6E\u5B57\u7B26\u4E32","Enable analytics":"\u555F\u7528\u5206\u6790","Enables Analytics for that project.":"\u555F\u7528\u8A72\u9805\u76EE\u7684\u5206\u6790\u3002","Log an Event":"\u8A18\u9304\u4E8B\u4EF6","Triggers an Event/Conversion for the current user on the Analytics.Can also pass additional data to the Analytics":"\u5728\u5206\u6790\u4E0A\u89F8\u767C\u7576\u524D\u7528\u6236\u7684\u4E8B\u4EF6/\u8F49\u5316\u3002\u9084\u53EF\u4EE5\u5C07\u5176\u4ED6\u8CC7\u6599\u50B3\u905E\u5230\u5206\u6790","Trigger Event _PARAM0_ with argument _PARAM1_":"\u89F8\u767C\u4E8B\u4EF6_PARAM0_ \u5E36\u53C3\u6578 _PARAM1_","Event Name":"\u4E8B\u4EF6\u540D\u7A31","Additional Data":"\u9644\u52A0\u8CC7\u6599","User UID":"\u7528\u6236 UID","Changes the current user's analytics identifier. This is what let Analytics differentiate user, so it should always be unique for each user. For advanced usage only.":"\u66F4\u6539\u7576\u524D\u7528\u6236\u7684\u5206\u6790\u6A19\u8B58\u7B26\u3002\u9019\u5C31\u662F\u8B93 Analytics \u5340\u5206\u7528\u6236\u7684\u539F\u56E0\uFF0C\u56E0\u6B64\u5B83\u5C0D\u4E8E\u6BCF\u500B\u7528\u6236\u90FD\u61C9\u8A72\u59CB\u7D42\u662F\u552F\u4E00\u7684\u3002\u50C5\u4F9B\u9AD8\u7D1A\u4F7F\u7528\u3002","Set current user's ID to _PARAM0_":"\u8A2D\u5B9A\u7576\u524D\u7528\u6236ID\u70BA _PARAM0_","New Unique ID":"\u65B0\u5EFA\u552F\u4E00ID","Set a user's property":"\u8A2D\u5B9A\u7528\u6236\u5C6C\u6027","Sets an user's properties.Can be used to classify user in Analytics.":"\u8A2D\u5B9A\u7528\u6236\u5C6C\u6027\u3002\u7528\u4E8E\u5728\u5206\u6790\u4E2D\u5C0D\u7528\u6236\u9032\u884C\u5206\u985E\u3002","Set property _PARAM0_ of the current user to _PARAM1_":"\u5C07\u7576\u524D\u7528\u6236\u7684\u5C6C\u6027_PARAM0_ \u8A2D\u5B9A\u70BA _PARAM1_","Property Name":"\u5C6C\u6027\u540D\u7A31","Property Data":"\u5C6C\u6027\u8CC7\u6599","Get Remote setting as String":"\u7372\u53D6\u9060\u7A0B\u8A2D\u5B9A\u70BA\u5B57\u7B26\u4E32","Get a setting from Firebase Remote Config as a string.":"\u5F9E Firebase\u9060\u7A0B\u914D\u7F6E\u7372\u53D6\u4E00\u500B\u5B57\u7B26\u4E32\u8A2D\u5B9A\u3002","Remote Config":"\u9060\u7A0B\u914D\u7F6E","Setting Name":"\u8A2D\u5B9A\u540D\u7A31","Get Remote setting as Number":"\u7372\u53D6\u9060\u7A0B\u8A2D\u5B9A\u70BA\u6578\u5B57","Get a setting from Firebase Remote Config as Number.":"\u5F9E Firebase\u9060\u7A0B\u914D\u7F6E\u7372\u53D6\u4E00\u500B\u8A2D\u5B9A\u4F5C\u70BA\u6578\u5B57\u3002","Set Remote Config Auto Update Interval":"\u8A2D\u5B9A\u9060\u7A0B\u914D\u7F6E\u81EA\u52D5\u66F4\u65B0\u9593\u9694","Sets Remote Config Auto Update Interval.":"\u8A2D\u5B9A\u9060\u7A0B\u914D\u7F6E\u81EA\u52D5\u66F4\u65B0\u9593\u9694\u3002","Set Remote Config Auto Update Interval to _PARAM0_":"\u8A2D\u5B9A\u9060\u7A0B\u914D\u7F6E\u81EA\u52D5\u66F4\u65B0\u9593\u9694\u70BA _PARAM0_","Update Interval in ms":"\u4EE5\u6BEB\u79D2\u70BA\u55AE\u4F4D\u66F4\u65B0\u9593\u9694","Set the default configuration":"\u8A2D\u5B9A\u9ED8\u8A8D\u914D\u7F6E","As the Remote Config is stored online, you need to set default values or the Remote Config expressions to return while there is no internet or the config is still loading.":"\u7531\u4E8E\u9060\u7A0B\u914D\u7F6E\u5728\u7DDA\u5B58\u5132\u3002 \u7576\u6C92\u6709\u4E92\u806F\u7DB2\u6216\u914D\u7F6E\u4ECD\u5728\u52A0\u8F09\u6642\uFF0C\u60A8\u9700\u8981\u8A2D\u5B9A\u9ED8\u8A8D\u503C\u6216\u9060\u7A0B\u914D\u7F6E\u8868\u9054\u5F0F\u4EE5\u8FD4\u56DE\u3002","Set default config to _PARAM0_":"\u8A2D\u5B9A\u9ED8\u8A8D\u914D\u7F6E\u70BA _PARAM0_","Structure with defaults":"\u9ED8\u8A8D\u7D50\u69CB","Force sync the configuration":"\u5F37\u5236\u540C\u6B65\u914D\u7F6E","Use this to sync the Remote Config with the client at any time.":"\u4F7F\u7528\u6B64\u9078\u9805\u53EF\u4EE5\u96A8\u6642\u540C\u6B65\u9060\u7A0B\u914D\u7F6E\u5230\u5BA2\u6236\u7AEF\u3002","Synchronize Remote Config":"\u540C\u6B65\u9060\u7A0B\u914D\u7F6E","Create account with email":"\u7528\u96FB\u5B50\u90F5\u4EF6\u5275\u5EFA\u5E33\u6236","Create an account with email and password as credentials.":"\u5275\u5EFA\u4E00\u500B\u5305\u542B\u96FB\u5B50\u90F5\u4EF6\u548C\u5BC6\u78BC\u7684\u5E33\u6236\u4F5C\u70BA\u6191\u64DA\u3002","Create account with email _PARAM0_ and password _PARAM1_ (store result in _PARAM2_)":"\u4F7F\u7528\u96FB\u5B50\u90F5\u4EF6 _PARAM0_ \u548C\u5BC6\u78BC _PARAM1_ \u5275\u5EFA\u5E33\u6236(\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM2_ \u4E2D)","Authentication":"\u9A57\u8B49","Callback variable with state (ok or error)":"\u5177\u6709\u72C0\u614B\u7684\u56DE\u8ABF\u8B8A\u91CF(\u78BA\u5B9A\u6216\u932F\u8AA4)","Sign into an account with email":"\u7528\u96FB\u5B50\u90F5\u4EF6\u767B\u9304\u5E33\u6236","Sign into an account with email and password as credentials. ":"\u7528\u96FB\u5B50\u90F5\u4EF6\u548C\u5BC6\u78BC\u767B\u9304\u5E33\u865F\u4F5C\u70BA\u6191\u64DA\u3002 ","Connect to account with email _PARAM0_ and password _PARAM1_ (store result in _PARAM2_)":"\u4F7F\u7528\u96FB\u5B50\u90F5\u4EF6 _PARAM0_ \u548C\u5BC6\u78BC _PARAM1_ \u9023\u63A5\u5230\u5E33\u6236(\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM2_ \u4E2D)","Log out of the account":"\u6CE8\u92B7\u5E33\u6236","Logs out of the current account. ":"\u6CE8\u92B7\u7576\u524D\u5E33\u6236\u3002 ","Log out from the account":"\u5F9E\u5E33\u6236\u6CE8\u92B7","Sign into an account via an external provider":"\u901A\u904E\u5916\u90E8\u63D0\u4F9B\u5546\u767B\u9304\u5E33\u6236","Signs into an account using an external provider's system. The available providers are: \"google\", \"facebook\", \"github\" and \"twitter\".\nProvider authentication only works in the browser! Not on previews or pc/mobile exports.":"\u4F7F\u7528\u5916\u90E8\u63D0\u4F9B\u5546\u7684\u7CFB\u7D71\u767B\u9304\u5E33\u6236\u3002\u53EF\u7528\u7684\u63D0\u4F9B\u5546\u662F\uFF1A\u201Cgoogle\u201D\u3001\u201Cfacebook\u201D\u3001\u201Cgithub\u201D\u548C\u201Ctwitter\u201D\u3002\n\u63D0\u4F9B\u5546\u8EAB\u4EFD\u9A57\u8B49\u50C5\u9069\u7528\u4E8E\u700F\u89BD\u5668\uFF01\u4E0D\u9069\u7528\u4E8E\u9810\u89BD\u6216 pc/mobile \u532F\u51FA\u3002","Connect to account via provider _PARAM0_ (store result in _PARAM1_)":"\u901A\u904E\u63D0\u4F9B\u5546 _PARAM0_ \u9023\u63A5\u5230\u5E33\u6236(\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM1_ \u4E2D)","Provider":"\u4F9B\u61C9\u5546","Sign In as an anonymous guest":"\u4EE5\u533F\u540D\u8A2A\u5BA2\u8EAB\u4EFD\u767B\u9304","Sign into a temporary anonymous account.":"\u767B\u9304\u4E00\u500B\u81E8\u6642\u533F\u540D\u5E33\u6236\u3002","Authenticate anonymously (store result in _PARAM0_)":"\u533F\u540D\u8EAB\u4EFD\u9A57\u8B49 (\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM0_ \u4E2D)","Is the user signed in?":"\u7528\u6236\u662F\u5426\u767B\u9304\uFF1F","Checks if the user is signed in. \nYou should always use this before actions requiring authentications.":"\u6AA2\u67E5\u7528\u6236\u662F\u5426\u5DF2\u767B\u9304\u3002 \n\u60A8\u61C9\u8A72\u59CB\u7D42\u4F7F\u7528\u6B64\u64CD\u4F5C\u624D\u9700\u8981\u8EAB\u4EFD\u9A57\u8B49\u3002","Check for authentication":"\u6AA2\u67E5\u8EAB\u4EFD\u8A8D\u8B49","User authentication token":"\u7528\u6236\u8EAB\u4EFD\u9A57\u8B49\u4EE4\u724C","Get the user authentication token. The token is the proof of authentication.":"\u7372\u53D6\u7528\u6236\u8EAB\u4EFD\u9A57\u8B49\u4EE4\u724C\u3002\u4EE4\u724C\u662F\u8EAB\u4EFD\u9A57\u8B49\u7684\u8B49\u660E\u3002","Is the user email address verified":"\u7528\u6236\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u5DF2\u9A57\u8B49","Checks if the email address of the user got verified.":"\u6AA2\u67E5\u7528\u6236\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u662F\u5426\u5DF2\u88AB\u9A57\u8B49\u3002","The email of the user is verified":"\u7528\u6236\u7684\u96FB\u5B50\u90F5\u4EF6\u5DF2\u9A57\u8B49","Authentication \u276F User Management":"\u8EAB\u4EFD\u9A57\u8B49 \u276F \u7528\u6236\u7BA1\u7406","User email address":"\u7528\u6236\u96FB\u5B50\u90F5\u4EF6\u5730\u5740","Return the user email address.":"\u8FD4\u56DE\u7528\u6236\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u3002","Accounts creation time":"\u8CEC\u6236\u5275\u5EFA\u6642\u9593","Return the accounts creation time.":"\u8FD4\u56DE\u5E33\u6236\u5275\u5EFA\u6642\u9593\u3002","User last login time":"\u7528\u6236\u4E0A\u6B21\u767B\u9304\u6642\u9593","Return the user last login time.":"\u8FD4\u56DE\u7528\u6236\u4E0A\u6B21\u767B\u9304\u6642\u9593\u3002","User display name":"\u7528\u6236\u986F\u793A\u540D\u7A31","Return the user display name.":"\u8FD4\u56DE\u7528\u6236\u986F\u793A\u540D\u7A31\u3002","User phone number":"\u7528\u6236\u96FB\u8A71\u865F\u78BC","Return the user phone number.":"\u8FD4\u56DE\u7528\u6236\u96FB\u8A71\u865F\u78BC\u3002","Return the user Unique IDentifier. Use that to link data to an user instead of the name or email.":"\u8FD4\u56DE\u7528\u6236\u552F\u4E00\u6A19\u8B58\u7B26\u3002\u4F7F\u7528\u5B83\u5C07\u8CC7\u6599\u93C8\u63A5\u5230\u7528\u6236\u800C\u4E0D\u662F\u59D3\u540D\u6216\u96FB\u5B50\u90F5\u4EF6\u3002","User tenant ID":"\u7528\u6236\u79DF\u6236ID","Return the user tenant ID. For advanced usage only.":"\u8FD4\u56DE\u7528\u6236\u79DF\u6236 ID\u3002\u50C5\u4F9B\u9AD8\u7D1A\u4F7F\u7528\u3002","User refresh token":"\u7528\u6236\u5237\u65B0\u4EE4\u724C","Return the user refresh token. For advanced usage only.":"\u8FD4\u56DE\u7528\u6236\u5237\u65B0\u4EE4\u724C\u3002\u50C5\u4F9B\u9AD8\u7D1A\u4F7F\u7528\u3002","Profile picture URL":"\u500B\u4EBA\u8CC7\u6599\u5716\u7247 URL","Gets an URL to the user profile picture.":"\u7372\u53D6\u7528\u6236\u500B\u4EBA\u8CC7\u6599\u5716\u7247\u7684 URL\u3002","Send a password reset email":"\u767C\u9001\u5BC6\u78BC\u91CD\u7F6E\u96FB\u5B50\u90F5\u4EF6","Send a password reset link per email.":"\u6BCF\u5C01\u96FB\u5B50\u90F5\u4EF6\u767C\u9001\u4E00\u500B\u5BC6\u78BC\u91CD\u7F6E\u93C8\u63A5\u3002","Email of the user whose password must be reset":"\u5FC5\u9808\u91CD\u7F6E\u5BC6\u78BC\u7684\u7528\u6236\u7684\u96FB\u5B50\u90F5\u4EF6","Send a verification email":"\u767C\u9001\u9A57\u8B49\u96FB\u5B50\u90F5\u4EF6","Send a link per email to verify the user email.":"\u6BCF\u5C01\u90F5\u4EF6\u767C\u9001\u93C8\u63A5\u4EE5\u9A57\u8B49\u7528\u6236\u96FB\u5B50\u90F5\u4EF6\u3002","Display name":"\u986F\u793A\u540D\u7A31","Sets the user display name.":"\u8A2D\u5B9A\u7528\u6236\u986F\u793A\u540D\u7A31\u3002","Set the user's display name to _PARAM0_":"\u5C07\u7528\u6236\u7684\u986F\u793A\u540D\u7A31\u8A2D\u5B9A\u70BA _PARAM0_","New display name":"\u65B0\u986F\u793A\u540D\u7A31","Profile picture":"\u500B\u4EBA\u8CC7\u6599\u5716\u7247","Change the user profile picture URL to a new one.":"\u5C07\u7528\u6236\u500B\u4EBA\u8CC7\u6599\u5716\u7247 URL \u66F4\u6539\u70BA\u65B0\u7684\u3002","Change the user's profile picture URL to _PARAM0_":"\u5C07\u7528\u6236\u7684\u500B\u4EBA\u8CC7\u6599\u5716\u7247 URL \u66F4\u6539\u70BA _PARAM0_","New profile picture URL":"\u65B0\u5EFA\u500B\u4EBA\u8CC7\u6599\u5716\u7247 URL","User email":"\u7528\u6236\u96FB\u5B50\u90F5\u4EF6","This action is dangerous so it requires reauthentication.\nChanges the user's email address.":"\u6B64\u64CD\u4F5C\u662F\u5371\u96AA\u7684\uFF0C\u56E0\u6B64\u9700\u8981\u91CD\u65B0\u9A57\u8B49\uFF0C\n\u66F4\u6539\u7528\u6236\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u3002","Change the user's email to _PARAM0_ and store result in _PARAM4_ (send verification email: _PARAM3_)":"\u5C07\u7528\u6236\u7684\u96FB\u5B50\u90F5\u4EF6\u66F4\u6539\u70BA _PARAM0_ \u5E76\u5728 _PARAM4_ \u4E2D\u5B58\u5132\u7D50\u679C (\u767C\u9001\u9A57\u8B49\u96FB\u5B50\u90F5\u4EF6: _PARAM3_)","Authentication \u276F User Management \u276F Advanced":"\u8EAB\u4EFD\u9A57\u8B49 \u276F \u7528\u6236\u7BA1\u7406 \u276F \u9AD8\u7D1A\u7BA1\u7406","Old email":"\u820A\u96FB\u5B50\u90F5\u4EF6","New email":"\u65B0\u90F5\u4EF6","Send a verification email before doing the change?":"\u5728\u9032\u884C\u66F4\u6539\u4E4B\u524D\u767C\u9001\u9A57\u8B49\u90F5\u4EF6\uFF1F","User email (Provider)":"\u7528\u6236\u96FB\u5B50\u90F5\u4EF6 (\u63D0\u4F9B\u8005)","This action is dangerous so it requires reauthentication.\nChanges the user's email address.\nThis is the same as Change the user email but reauthenticates via an external provider.":"\u6B64\u64CD\u4F5C\u662F\u5371\u96AA\u7684\uFF0C\u56E0\u6B64\u9700\u8981\u91CD\u65B0\u9A57\u8B49\uFF0C\n\u66F4\u6539\u7528\u6236\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u3002\n\u9019\u8207\u66F4\u6539\u7528\u6236\u96FB\u5B50\u90F5\u4EF6\u76F8\u540C\uFF0C\u4F46\u901A\u904E\u5916\u90E8\u63D0\u4F9B\u5546\u91CD\u65B0\u8A8D\u8B49\u3002","Change the user's email to _PARAM0_ and store result in _PARAM2_ (send verification email: _PARAM1_)":"\u5C07\u7528\u6236\u7684\u96FB\u5B50\u90F5\u4EF6\u66F4\u6539\u70BA _PARAM0_ \u5E76\u5728 _PARAM2_ \u4E2D\u5B58\u5132\u7D50\u679C (\u767C\u9001\u9A57\u8B49\u96FB\u5B50\u90F5\u4EF6: _PARAM1_)","User password":"\u7528\u6236\u5BC6\u78BC","This action is dangerous so it requires reauthentication.\nChanges the user password.":"\u6B64\u64CD\u4F5C\u662F\u5371\u96AA\u7684\uFF0C\u56E0\u6B64\u9700\u8981\u91CD\u65B0\u9A57\u8B49\uFF0C\n\u66F4\u6539\u7528\u6236\u5BC6\u78BC\u3002","Change the user password to _PARAM2_ and store result in _PARAM4_ (send verification email: _PARAM3_)":"\u66F4\u6539\u7528\u6236\u5BC6\u78BC\u70BA _PARAM2_ \u5E76\u5728 _PARAM4_ \u4E2D\u5B58\u5132\u7D50\u679C (\u767C\u9001\u9A57\u8B49\u96FB\u5B50\u90F5\u4EF6: _PARAM3_)","Old password":"\u820A\u5BC6\u78BC","New password":"\u65B0\u5BC6\u78BC","User password (Provider)":"\u7528\u6236\u5BC6\u78BC (\u63D0\u4F9B\u8005)","This action is dangerous so it requires reauthentication.\nChanges the user password.\nThis is the same as \"Change the user password\" but reauthenticates via an external provider.":"\u6B64\u64CD\u4F5C\u662F\u5371\u96AA\u7684\uFF0C\u56E0\u6B64\u9700\u8981\u91CD\u65B0\u9A57\u8B49\uFF0C\n\u66F4\u6539\u7528\u6236\u5BC6\u78BC\u3002\n\u9019\u8207\u201C\u66F4\u6539\u7528\u6236\u5BC6\u78BC\u201D\u76F8\u540C\uFF0C\u4F46\u901A\u904E\u5916\u90E8\u63D0\u4F9B\u5546\u91CD\u65B0\u9A57\u8B49\u3002","Change the user password to _PARAM0_ and store result in _PARAM2_ (send verification email: _PARAM1_)":"\u66F4\u6539\u7528\u6236\u5BC6\u78BC\u70BA _PARAM0_ \u5E76\u5728 _PARAM2_ \u4E2D\u5B58\u5132\u7D50\u679C (\u767C\u9001\u9A57\u8B49\u96FB\u5B50\u90F5\u4EF6: _PARAM1_)","New Password":"\u65B0\u5BC6\u78BC","Delete the user account":"\u522A\u9664\u7528\u6236\u5E33\u6236","This action is dangerous so it requires reauthentication.\nDeletes the user account.":"\u6B64\u64CD\u4F5C\u662F\u5371\u96AA\u7684\uFF0C\u56E0\u6B64\u9700\u8981\u91CD\u65B0\u9A57\u8B49\uFF0C\n\u522A\u9664\u7528\u6236\u5E33\u6236\u3002","Delete the user account and store result in _PARAM2_":"\u522A\u9664\u7528\u6236\u5E33\u6236\u5E76\u5728 _PARAM2_ \u4E2D\u5B58\u5132\u7D50\u679C","Delete the user account (Provider)":"\u522A\u9664\u7528\u6236\u5E33\u6236(\u63D0\u4F9B\u8005)","This action is dangerous so it requires reauthentication.\nDeletes the user account.\nThis is the same as \"Delete the user account\" but reauthenticates via an external provider.":"\u6B64\u64CD\u4F5C\u662F\u5371\u96AA\u7684\uFF0C\u56E0\u6B64\u9700\u8981\u91CD\u65B0\u9A57\u8B49\uFF0C\n\u522A\u9664\u7528\u6236\u5E33\u6236\u3002\n\u9019\u8207\u201C\u522A\u9664\u7528\u6236\u5E33\u6236\u201D\u76F8\u540C\uFF0C\u4F46\u901A\u904E\u5916\u90E8\u63D0\u4F9B\u5546\u91CD\u65B0\u9A57\u8B49\u3002","Delete the user account and store result in _PARAM0_":"\u522A\u9664\u7528\u6236\u5E33\u6236\u5E76\u5728 _PARAM0_ \u4E2D\u5B58\u5132\u7D50\u679C","Enable performance measuring":"\u555F\u7528\u6027\u80FD\u5206\u6790","Enables performance measuring.":"\u555F\u7528\u6027\u80FD\u5206\u6790","Performance Measuring":"\u6027\u80FD\u6E2C\u91CF","Create a custom performance tracker":"\u5275\u5EFA\u81EA\u5B9A\u7FA9\u6027\u80FD\u8DDF\u8E64\u5668","Creates a new custom performance tracker (If it doesn't already exists). They are used to measure performance of custom events.":"\u5275\u5EFA\u4E00\u500B\u65B0\u7684\u81EA\u5B9A\u7FA9\u6027\u80FD\u8DDF\u8E64\u5668 (\u5982\u679C\u5B83\u4E0D\u5B58\u5728\u7684\u8A71)\u3002\u5B83\u5011\u7528\u4E8E\u6E2C\u91CF\u81EA\u5B9A\u7FA9\u4E8B\u4EF6\u7684\u6027\u80FD\u3002","Create performance tracker: _PARAM0_":"\u5275\u5EFA\u6027\u80FD\u8DDF\u8E64: _PARAM0_","Tracker Name":"\u8FFD\u8E64\u5668\u540D\u7A31","Start a tracer":"\u555F\u52D5\u8FFD\u8E64\u5668","Start measuring performance for that tracer":"\u958B\u59CB\u6E2C\u91CF\u8A72\u8FFD\u8E64\u5668\u7684\u6027\u80FD\u3002","Start performance measuring on tracer _PARAM0_":"\u5728\u8DDF\u8E64\u5668_PARAM0_\u4E0A\u958B\u59CB\u6027\u80FD\u6E2C\u91CF","Stop a tracer":"\u505C\u6B62\u8FFD\u8E64\u5668","Stop measuring performance for that tracer":"\u505C\u6B62\u6E2C\u91CF\u8A72\u8FFD\u8E64\u5668\u7684\u6027\u80FD\u3002","Stop performance measuring on tracer _PARAM0_":"\u505C\u6B62\u5728\u8FFD\u8E64\u5668 _PARAM0_ \u4E0A\u7684\u6027\u80FD\u8A08\u91CF","Record performance":"\u8A18\u9304\u6027\u80FD","Record performance for a delimited period of time. Use this if you want to measure the performance for a specified duration.":"\u8A18\u9304\u4E00\u6BB5\u6642\u9593\u5167\u7684\u6027\u80FD\u3002\u5982\u679C\u60A8\u60F3\u8981\u5728\u6307\u5B9A\u7684\u6642\u9593\u5167\u6E2C\u91CF\u6027\u80FD\uFF0C\u8ACB\u4F7F\u7528\u5B83\u3002","Record performance for _PARAM1_ms with a delay of _PARAM2_ms (store in tracker _PARAM0_)":"\u5C07_PARAM1_ms\u7684\u6027\u80FD\u8A18\u9304\u5230\u5EF6\u9072_PARAM2_ms (\u5B58\u5132\u5728Tracker _PARAM0_)","Delay before measuring start (in ms)":"\u6E2C\u91CF\u958B\u59CB\u524D\u7684\u5EF6\u9072(\u6BEB\u79D2)","Measuring duration (in ms)":"\u6E2C\u91CF\u6301\u7E8C\u6642\u9593(\u6BEB\u79D2)","Call a HTTP function":"\u8ABF\u7528 HTTP \u51FD\u6578","Calls a HTTP function by name, and store the result in a variable.":"\u901A\u904E\u540D\u7A31\u8ABF\u7528 HTTP \u51FD\u6578\uFF0C\u5E76\u5C07\u7D50\u679C\u5B58\u5132\u5728\u4E00\u500B\u8B8A\u91CF\u4E2D\u3002","Call HTTP Function _PARAM0_ with parameter(s) _PARAM1_ (Callback variables: Value: _PARAM2_ State: _PARAM3_)":"\u8ABF\u7528 HTTP \u51FD\u6578 _PARAM0_ \u5177\u6709\u53C3\u6578(s) _PARAM1_ (Callback \u8B8A\u91CF: \u503C: _PARAM2_ \u72C0\u614B: _PARAM3_)","HTTP Function Name":"HTTP \u51FD\u6578\u540D\u7A31","Parameter(s) as JSON or string.":"\u53C3\u6578\u4F5C\u70BAJSON\u6216\u5B57\u7B26\u4E32\u3002","Callback variable with returned value":"\u8FD4\u56DE\u503C\u7684\u56DE\u8ABF\u8B8A\u91CF","Get server timestamp":"\u7372\u53D6\u670D\u52D9\u5668\u6642\u9593\u6233","Set a field to the timestamp on the server when the request arrives there":"\u7576\u8ACB\u6C42\u5230\u9054\u670D\u52D9\u5668\u6642\uFF0C\u5C07\u5B57\u6BB5\u8A2D\u5B9A\u70BA\u670D\u52D9\u5668\u4E0A\u7684\u6642\u9593\u6233","Cloud Firestore Database":"Cloud Firestore \u8CC7\u6599\u5EAB","Start a query":"\u958B\u59CB\u67E5\u8A62","Start a query on a collection. A query allows to get a filtered and ordered list of documents in a collection.":"\u5728\u6536\u85CF\u4E0A\u958B\u59CB\u67E5\u8A62\u3002\u67E5\u8A62\u5141\u8A31\u5728\u6536\u85CF\u4E2D\u7372\u5F97\u904E\u6FFE\u548C\u6392\u5E8F\u7684\u6587\u6A94\u5217\u8868\u3002","Create a query named _PARAM0_ for collection _PARAM1_":"\u70BA\u6536\u85CF _PARAM1_ \u5275\u5EFA\u4E00\u500B\u540D\u70BA _PARAM0_ \u7684\u67E5\u8A62","Cloud Firestore Database/Queries/Create":"Cloud Firestore \u8CC7\u6599\u5EAB/\u67E5\u8A62/\u5275\u5EFA","Query name":"\u67E5\u8A62\u540D\u7A31","Collection":"\u96C6\u5408","Start a query from another query":"\u5F9E\u53E6\u4E00\u500B\u67E5\u8A62\u958B\u59CB\u67E5\u8A62","Start a query with the same collection and filters as another one.":"\u958B\u59CB\u4E00\u500B\u8207\u53E6\u4E00\u500B\u6536\u85CF\u548C\u904E\u6FFE\u5668\u76F8\u540C\u7684\u67E5\u8A62\u3002","Create a query named _PARAM0_ from query _PARAM1_":"\u5F9E\u67E5\u8A62 _PARAM1_ \u5275\u5EFA\u540D\u70BA _PARAM0_ \u7684\u67E5\u8A62","Source query name":"\u6E90\u67E5\u8A62\u540D\u7A31","Filter by field value":"\u6309\u5B57\u6BB5\u503C\u7BE9\u9078","Only match the documents that have a field passing a check.":"\u53EA\u5339\u914D\u6709\u5B57\u6BB5\u901A\u904E\u6AA2\u67E5\u7684\u6587\u6A94\u3002","Filter query _PARAM0_ to only keep documents whose field _PARAM1__PARAM2__PARAM3_":"\u904E\u6FFE\u67E5\u8A62 _PARAM0_ \u4EE5\u50C5\u4FDD\u7559\u5B57\u6BB5\u70BA _PARAM1_ _PARAM2_ _PARAM3_ \u7684\u6587\u6A94","Cloud Firestore Database/Queries/Filters":"Cloud Firestore \u8CC7\u6599\u5EAB/\u67E5\u8A62/\u904E\u6FFE\u5668","Field to check":"\u8981\u6AA2\u67E5\u7684\u5B57\u6BB5","Check type":"\u6AA2\u67E5\u985E\u578B","Value to check":"\u8981\u6AA2\u67E5\u7684\u503C","Filter by field text":"\u6309\u5B57\u6BB5\u6587\u672C\u904E\u6FFE","Filter query _PARAM0_ to remove documents whose field _PARAM1_ is not _PARAM2__PARAM3_":"\u904E\u6FFE\u67E5\u8A62 _PARAM0_ \u4F86\u522A\u9664\u5176\u5B57\u6BB5 _PARAM1_ \u4E0D\u662F _PARAM2__PARAM3_ \u7684\u6587\u6A94","Text to check":"\u8981\u6AA2\u67E5\u7684\u6587\u672C","Order by field value":"\u6309\u5B57\u6BB5\u503C\u6392\u5E8F","Orders all documents in the query by a the value of a field.":"\u6309\u5B57\u6BB5\u7684\u503C\u6392\u5E8F\u67E5\u8A62\u4E2D\u7684\u6240\u6709\u6587\u6A94\u3002","Order query _PARAM0_ by field _PARAM1_ (direction: _PARAM2_)":"\u6309\u5B57\u6BB5 _PARAM1_ \u6392\u5E8F\u67E5\u8A62_PARAM0_ (\u65B9\u5411: _PARAM2_)","Field to order by":"\u6309\u5B57\u6BB5\u6392\u5E8F","Direction (ascending or descending)":"\u65B9\u5411(\u5347\u5E8F\u6216\u964D\u5E8F)","Limit amount of documents":"\u9650\u5236\u6587\u4EF6\u6578\u91CF","Limits the amount of documents returned by the query. Can only be used after an order filter.":"\u9650\u5236\u67E5\u8A62\u8FD4\u56DE\u7684\u6587\u6A94\u6578\u91CF\uFF0C\u53EA\u80FD\u5728\u8A02\u55AE\u904E\u6FFE\u540E\u4F7F\u7528\u3002","Limit query _PARAM0_ to _PARAM1_ documents (begin from the end: _PARAM2_)":"\u5C07\u67E5\u8A62 _PARAM0_ \u9650\u5236\u70BA _PARAM1_ \u6587\u6A94 (\u5F9E\u672B\u5C3E\u958B\u59CB\uFF1A_PARAM2_)","Amount to limit by":"\u9650\u5236\u91D1\u984D","Begin from the end":"\u5F9E\u672B\u5C3E\u958B\u59CB","Skip some documents":"\u8DF3\u904E\u4E00\u4E9B\u6587\u6A94","Removes documents before or after a certain value on the field ordered by in a query. Can only be used after an order filter.":"\u522A\u9664\u67E5\u8A62\u4E2D\u6309\u9806\u5E8F\u6392\u5E8F\u7684\u5B57\u6BB5\u7684\u67D0\u500B\u503C\u4E4B\u524D\u6216\u4E4B\u540E\u7684\u6587\u6A94\u3002\u53EA\u80FD\u5728\u8A02\u55AE\u904E\u6FFE\u4E4B\u540E\u4F7F\u7528\u3002","Skip documents with fields (before: _PARAM2_) value _PARAM1_ in query _PARAM0_ (include documents at that value: _PARAM3_)":"\u8DF3\u904E\u5E36\u5B57\u6BB5\u7684\u6587\u6A94 (\u4E4B\u524D: _PARAM2_) \u5728\u67E5\u8A62 _PARAM0_ \u4E2D_PARAM1_ (\u5305\u542B\u8A72\u503C\u7684\u6587\u6A94: _PARAM3_)","The value of the field ordered by to skip after":"\u8981\u5728\u540E\u9762\u8DF3\u904E\u7684\u5B57\u6BB5\u7684\u503C","Skip documents before?":"\u5148\u8DF3\u904E\u6587\u6A94\u55CE\uFF1F","Include documents which field value equals the value to skip after?":"\u5305\u62EC\u54EA\u4E9B\u5B57\u6BB5\u503C\u7B49\u4E8E\u8981\u8DF3\u904E\u7684\u503C\u4E4B\u540E\u7684\u6587\u6A94?","Run a query once":"\u904B\u884C\u4E00\u6B21\u67E5\u8A62","Runs the query once and store results in a scene variable.":"\u904B\u884C\u4E00\u6B21\u67E5\u8A62\u5E76\u5C07\u7D50\u679C\u5B58\u5132\u5728\u5834\u666F\u8B8A\u91CF\u4E2D\u3002","Run query _PARAM0_ and store results into _PARAM1_ (store result state in _PARAM2_)":"\u904B\u884C\u67E5\u8A62 _PARAM0_ \u5E76\u5C07\u7D50\u679C\u5B58\u5132\u5230 _PARAM1_ (\u5C07\u7D50\u679C\u72C0\u614B\u5B58\u5132\u5728 _PARAM2_)","Cloud Firestore Database/Queries/Run":"Cloud Firestore \u8CC7\u6599\u5EAB/\u67E5\u8A62/\u904B\u884C","Callback variable where to load the results":"\u52A0\u8F09\u7D50\u679C\u7684\u56DE\u8ABF\u8B8A\u91CF","Callback variable with state (ok or error message)":"\u5177\u6709\u72C0\u614B\u7684\u56DE\u8ABF\u8B8A\u91CF(\u78BA\u5B9A\u6216\u932F\u8AA4\u6D88\u606F)","Continuously run (watch) a query":"\u9023\u7E8C\u904B\u884C (\u89C0\u5BDF) \u67E5\u8A62","Runs a query continuously, so that every time a new documents starts or stops matching the query, or a document that matches the query has been changed, the variables will be filled with the new results.":"\u9023\u7E8C\u904B\u884C\u67E5\u8A62\uFF0C\u4EE5\u4FBF\u6BCF\u6B21\u65B0\u6587\u6A94\u958B\u59CB\u6216\u505C\u6B62\u5339\u914D\u67E5\u8A62\uFF0C\u6216\u8005\u5339\u914D\u67E5\u8A62\u7684\u6587\u6A94\u5DF2\u66F4\u6539\u6642\uFF0C\u8B8A\u91CF\u5C07\u586B\u5145\u65B0\u7D50\u679C\u3002","Run query _PARAM0_ continuously and store results into _PARAM1_ each time documents matching the query are changed (store result state in _PARAM2_)":"\u9023\u7E8C\u904B\u884C\u67E5\u8A62 _PARAM0_ \u5E76\u5C07\u7D50\u679C\u5B58\u5132\u5230 _PARAM1_ \u6BCF\u6B21\u5339\u914D\u67E5\u8A62\u7684\u6587\u6A94\u767C\u751F\u66F4\u6539\u6642(\u5C07\u7D50\u679C\u72C0\u614B\u5B58\u5132\u5728 _PARAM2_ \u4E2D)","Enable persistence":"\u555F\u7528\u6301\u4E45\u5316","When persistence is enabled, all data that is fetched from the database is being automatically stored to allow to continue accessing the data if cut off from the network, instead of waiting for reconnection.\nThis needs to be called before any other firestore operation, otherwise it will fail.":"\u555F\u7528\u6301\u4E45\u6027\u6642\uFF0C \u6240\u6709\u5F9E\u8CC7\u6599\u5EAB\u7372\u53D6\u7684\u8CC7\u6599\u90FD\u88AB\u81EA\u52D5\u5132\u5B58\uFF0C\u5728\u65B7\u958B\u7DB2\u7D61\u540E\u4ECD\u80FD\u5920\u7E7C\u7E8C\u8A2A\u554F\uFF0C\u800C\u7121\u9700\u7B49\u5F85\u91CD\u65B0\u9023\u63A5\u3002\n\u9019\u9700\u8981\u5728\u4EFB\u4F55\u5176\u4ED6 Firestore \u64CD\u4F5C\u4E4B\u524D\u8ABF\u7528\uFF0C\u5426\u5247\u5C07\u5931\u6557\u3002","Disable persistence":"\u7981\u7528\u6301\u4E45\u5316","Disables the storing of fetched data and clear all the data that has been stored.\nThis needs to be called before any other firestore operation, otherwise it will fail.":"\u7981\u7528\u8CC7\u6599\u7372\u53D6\u81EA\u52D5\u5B58\u5132\u5E76\u6E05\u9664\u5DF2\u5B58\u5132\u7684\u6240\u6709\u8CC7\u6599\u3002\n\u5FC5\u9808\u5728\u4EFB\u4F55\u5176\u4ED6 Firestore \u64CD\u4F5C\u524D\u8ABF\u7528\uFF0C\u5426\u5247\u5C07\u5931\u6557\u3002","Re-enable network":"\u91CD\u65B0\u555F\u7528\u7DB2\u7D61","Re-enables the connection to the database after disabling it.":"\u7981\u7528\u8CC7\u6599\u5EAB\u540E\u91CD\u65B0\u555F\u7528\u9023\u63A5\u5230\u8CC7\u6599\u5EAB\u3002","Disable network":"\u7981\u7528\u7DB2\u7D61","Disables the connection to the database.\nWhile the network is disabled, any read operations will return results from cache, and any write operations will be queued until the network is restored.":"\u7981\u7528\u9023\u63A5\u5230\u8CC7\u6599\u5EAB\u3002\n\u7576\u7DB2\u7D61\u88AB\u7981\u7528\u6642\uFF0C\u4EFB\u4F55\u8B80\u53D6\u64CD\u4F5C\u90FD\u6703\u5F9E\u7DE9\u5B58\u8FD4\u56DE\u7D50\u679C\uFF0C\u4EFB\u4F55\u5BEB\u5165\u64CD\u4F5C\u90FD\u5C07\u6392\u968A\u76F4\u5230\u7DB2\u7D61\u6062\u5FA9\u70BA\u6B62\u3002","Write a document to firestore":"\u5BEB\u6587\u4EF6\u5230firestore","Writes a document (variable) to cloud firestore.":"\u5C07\u6587\u6A94\uFF08\u8B8A\u91CF\uFF09\u5BEB\u5165Cloud Firestore\u3002","Write _PARAM2_ to firestore in document _PARAM1_ of collection _PARAM0_ (store result state in _PARAM3_)":"\u5C07_PARAM2_\u5BEB\u5165\u96C6\u5408_PARAM0_\u7684\u6587\u6A94_PARAM1_\u7684Firestore\u4E2D\uFF08\u5C07\u7D50\u679C\u72C0\u614B\u5B58\u5132\u5728_PARAM3_\u4E2D\uFF09","Cloud Firestore Database/Documents":"Cloud Firestore \u8CC7\u6599\u5EAB/\u6587\u6A94","Document":"\u6587\u4EF6","Variable to write":"\u5BEB\u5165\u8B8A\u91CF","Add a document to firestore":"\u5C07\u6587\u6A94\u6DFB\u52A0\u5230FireStore","Adds a document (variable) to cloud firestore with a unique name.":"\u5C07\u6587\u6A94(\u8B8A\u91CF) \u6DFB\u52A0\u5230\u4E91fireestore\uFF0C\u5177\u6709\u552F\u4E00\u7684\u540D\u7A31\u3002","Add _PARAM1_ to firestore collection _PARAM0_ (store result state in _PARAM2_)":"\u5C07_param1_\u6DFB\u52A0\u5230Firestore Collection _param0_(\u5728_param2_\u4E2D\u5B58\u5132\u7D50\u679C\u72C0\u614B)","Write a field in firestore":"\u5728Firestore\u4E2D\u5BEB\u4E00\u500B\u5B57\u6BB5","Writes a field of a firestore document.":"\u5BEB\u5165 firesting \u6587\u6A94\u7684\u5B57\u6BB5\u3002","Write _PARAM3_ to firestore in field _PARAM2_ of document _PARAM1_ in collection _PARAM0_ (store result state in _PARAM4_, merge instead of overwriting: _PARAM5_)":"\u5C07 _PARAM3_ \u5BEB\u5165\u96C6\u5408 _PARAM0_ \u4E2D\u6587\u6A94 _PARAM1_ \u7684\u5B57\u6BB5 _PARAM2_ \u4E2D\u7684 firestore (\u5C07\u7D50\u679C\u72C0\u614B\u5B58\u5132\u5728 _PARAM4_ \u4E2D\uFF0C\u5408\u5E76\u800C\u4E0D\u662F\u8986\u84CB: _PARAM5_)","Cloud Firestore Database/Fields":"Cloud Firestore \u8CC7\u6599\u5EAB/\u5B57\u6BB5","Field to write":"\u8981\u5BEB\u5165\u7684\u5B57\u6BB5","Value to write":"\u8981\u5BEB\u5165\u7684\u503C","If the document already exists, merge them instead of replacing the old one?":"\u5982\u679C\u6587\u6A94\u5DF2\u7D93\u5B58\u5728\uFF0C\u662F\u5426\u5408\u5E76\u5B83\u5011\u800C\u4E0D\u662F\u66FF\u63DB\u820A\u6587\u6A94\uFF1F","Update a document in firestore":"\u5728Firestore\u4E2D\u66F4\u65B0\u6587\u4EF6","Updates a firestore document (variable).":"\u66F4\u65B0Firestore\u6587\u6A94\uFF08\u8B8A\u91CF\uFF09\u3002","Update firestore document _PARAM1_ in collection _PARAM0_ with _PARAM2_ (store result state in _PARAM3_)":"\u901A\u904E _PARAM2_ \u5728\u96C6\u5408 _PARAM0_ \u66F4\u65B0\u7E96\u7DAD\u6062\u5FA9\u6587\u6A94 _PARAM1_ (\u5728 _PARAM3_\u4E2D\u5B58\u5132\u7D50\u679C\u72C0\u614B)","Variable to update with":"\u8981\u66F4\u65B0\u7684\u8B8A\u91CF","Update a field of a document":"\u66F4\u65B0\u6587\u6A94\u5B57\u6BB5","Updates a field of a firestore document.":"\u66F4\u65B0Firestore\u6587\u6A94\u7684\u5B57\u6BB5\u3002","Update field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ with _PARAM3_ (store result state in _PARAM4_)":"\u5728\u96C6\u5408 _PARAM0_ \u548C _PARAM3_ \u4E2D\u66F4\u65B0\u7E96\u7DAD\u9084\u539F\u6587\u6A94 _PARAM1_ \u7684 _PARAM2_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM4_)","Field to update":"\u8981\u66F4\u65B0\u7684\u5B57\u6BB5","Delete a document in firestore":"\u5728Firestore\u4E2D\u522A\u9664\u6587\u6A94","Deletes a firestore document (variable).":"\u522A\u9664Firestore\u6587\u6A94\uFF08\u8B8A\u91CF\uFF09\u3002","Delete firestore document _PARAM1_ in collection _PARAM0_ (store result state in _PARAM2_)":"\u522A\u9664\u96C6\u5408 _PARAM0_ \u4E2D\u7684 firecovery \u6587\u6A94 _PARAM1_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM2_)","Delete a field of a document":"\u522A\u9664\u6587\u6A94\u5B57\u6BB5","Deletes a field of a firestore document.":"\u522A\u9664Firestore\u6587\u6A94\u7684\u5B57\u6BB5\u3002","Delete field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ with (store result state in _PARAM3_)":"\u5728\u96C6\u5408 _PARAM0_ \u4E2D\u522A\u9664 firecovery \u6587\u6A94 _PARAM1_ \u7684 _PARAM2_ \u5B57\u6BB5\u8207(\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM3_)","Field to delete":"\u8981\u522A\u9664\u7684\u5B57\u6BB5","Get a document from firestore":"\u5F9EFirestore\u53D6\u5F97\u6587\u4EF6","Gets a firestore document and store it in a variable.":"\u7372\u53D6Firestore\u6587\u6A94\u5E76\u5C07\u5176\u5B58\u5132\u5728\u8B8A\u91CF\u4E2D\u3002","Load firestore document _PARAM1_ from collection _PARAM0_ into _PARAM2_ (store result state in _PARAM3_)":"\u5C07\u96C6\u5408_PARAM0_\u4E2D\u7684Firestore\u6587\u6A94_PARAM1_\u52A0\u8F09\u5230_PARAM2_\u4E2D\uFF08\u5C07\u7D50\u679C\u72C0\u614B\u5B58\u5132\u5728_PARAM3_\u4E2D\uFF09","Callback variable where to load the document":"\u8981\u52A0\u8F09\u6587\u6A94\u7684\u56DE\u8ABF\u8B8A\u91CF","Get a field of a document":"\u7372\u53D6\u6587\u6A94\u5B57\u6BB5","Return the value of a field in a firestore document.":"\u8FD4\u56DE firestore \u6587\u6A94\u4E2D\u5B57\u6BB5\u7684\u503C\u3002","Load field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ into _PARAM3_ (store result state in _PARAM4_)":"\u5728\u96C6\u5408 _PARAM0_ \u4E2D\u52A0\u8F09 _PARAM2_ \u7684 firecovery \u6587\u6A94 _PARAM1_ \u5230 _PARAM3_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM4_)","Field to get":"\u8981\u7372\u53D6\u7684\u5B57\u6BB5","Callback variable where to store the field's value":"\u56DE\u8ABF\u8B8A\u91CF\u5B58\u5132\u5B57\u6BB5\u7684\u503C","Check for a document's existence":"\u6AA2\u67E5\u6587\u6A94\u662F\u5426\u5B58\u5728","Checks for the existence of a document. Sets the result variable to true if it exists else to false.":"\u6AA2\u67E5\u6587\u6A94\u662F\u5426\u5B58\u5728\u3002\u5982\u679C\u7D50\u679C\u8B8A\u91CF\u5B58\u5728\uFF0C\u5247\u5C07\u5176\u8A2D\u5B9A\u70BA true\uFF0C\u5426\u5247\u8A2D\u5B9A\u70BA false\u3002","Check for existence of _PARAM1_ in collection _PARAM0_ and store result in _PARAM2_ (store result state in _PARAM3_)":"\u6AA2\u67E5\u5728\u96C6\u5408 _PARAM0_ \u4E2D\u662F\u5426\u5B58\u5728_PARAM1_ \u5E76\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM2_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM3_)","Callback variable where to store the result":"\u5B58\u5132\u7D50\u679C\u7684\u56DE\u8ABF\u8B8A\u91CF","Check for existence of a document's field":"\u6AA2\u67E5\u6587\u6A94\u5B57\u6BB5\u662F\u5426\u5B58\u5728","Checks for the existence of a field in a document. Sets the result variable to 1 if it exists else to 2.":"\u6AA2\u67E5\u6587\u6A94\u4E2D\u5B57\u6BB5\u7684\u5B58\u5728\u3002\u5982\u679C\u7D50\u679C\u8B8A\u91CF\u5B58\u5728\u5247\u8A2D\u5B9A\u70BA 1\uFF0C\u5247\u8A2D\u5B9A\u70BA 2\u3002","Check for existence of _PARAM2_ in document _PARAM1_ of collection _PARAM0_ and store result in _PARAM3_ (store result state in _PARAM4_)":"\u6AA2\u67E5\u662F\u5426\u5B58\u5728\u96C6\u5408_PARAM0_ \u7684\u6587\u6A94 _PARAM1_ \u4E2D\u7684_PARAM2_ \u5E76\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM3_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM4_)","Callback Variable where to store the result":"\u56DE\u8ABF\u8B8A\u91CF\u5B58\u5132\u7D50\u679C","List all documents of a collection":"\u5217\u51FA\u96C6\u5408\u7684\u6240\u6709\u6587\u6A94","Generates a list of all document names in a collection, and stores it as a structure.":"\u5728\u96C6\u5408\u4E2D\u751F\u6210\u6240\u6709\u6587\u6A94\u540D\u7A31\u5217\u8868\uFF0C\u5E76\u5C07\u5176\u5B58\u5132\u70BA\u7D50\u69CB\u3002","List all documents in _PARAM0_ and store result in _PARAM1_ (store result state in _PARAM2_)":"\u5728 _PARAM0_ \u4E2D\u5217\u51FA\u6240\u6709\u6587\u6A94\u5E76\u5B58\u5132\u7D50\u679C\u5728 _PARAM1_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM2_)","Upload a file":"\u4E0A\u50B3\u6587\u4EF6","Upload a file to firebase Storage.":"\u5C07\u6587\u4EF6\u4E0A\u50B3\u5230Firebase\u5B58\u5132\u3002","Save _PARAM0_ in location _PARAM1_ to Firebase storage and store access URL in _PARAM3_ (Format: _PARAM2_, Store result state in _PARAM4_)":"\u5C07_PARAM1_\u4E2D\u7684_PARAM0_\u4FDD\u5B58\u5230Firebase\u5B58\u5132\u4E2D\uFF0C\u5E76\u5C07\u8A2A\u554FURL\u5B58\u5132\u5728_PARAM3_\u4E2D\uFF08\u683C\u5F0F\uFF1A_PARAM2_\uFF0C\u5C07\u7D50\u679C\u72C0\u614B\u5B58\u5132\u5728_PARAM4_\u4E2D\uFF09","Storage":"\u5132\u5B58","Upload ID":"\u4E0A\u50B3 ID","File content":"\u6587\u4EF6\u5167\u5BB9","Storage path":"\u5B58\u653E\u8DEF\u5F91","File content format":"\u6587\u4EF6\u5167\u5BB9\u683C\u5F0F","Callback variable with the url to the uploaded file":"\u4F7F\u7528\u7DB2\u5740\u56DE\u8ABF\u8B8A\u91CF\u5230\u4E0A\u50B3\u6587\u4EF6","Get Download URL":"\u7372\u53D6\u4E0B\u8F09\u7DB2\u5740","Get a unique download URL for a file.":"\u7372\u53D6\u6587\u4EF6\u7684\u552F\u4E00\u4E0B\u8F09 URL\u3002","Get a download url for _PARAM0_ and store it in _PARAM1_ (store result state in _PARAM2_)":"\u7372\u53D6 _PARAM0_ \u7684\u4E0B\u8F09URL\uFF0C\u5E76\u5C07\u5176\u5B58\u5132\u5728 _PARAM1_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM2_)","Storage path to the file":"\u6587\u4EF6\u7684\u5B58\u5132\u8DEF\u5F91","Write a variable to Database":"\u5C07\u8B8A\u91CF\u5BEB\u5165\u8CC7\u6599\u5EAB","Writes a variable to Database.":"\u5C07\u4E00\u500B\u8B8A\u91CF\u5BEB\u5165\u8CC7\u6599\u5EAB\u3002","Write _PARAM1_ to Database in _PARAM0_ (store result state in _PARAM2_)":"\u5C07 _PARAM1_ \u5BEB\u5165\u8CC7\u6599\u5EAB _PARAM0_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM2_)","Realtime Database":"\u5BE6\u6642\u8CC7\u6599\u5EAB","Write a field in Database":"\u5C07\u5B57\u6BB5\u5BEB\u5165\u8CC7\u6599\u5EAB","Writes a field of a Database document.":"\u5BEB\u5165\u8CC7\u6599\u5EAB\u6587\u6A94\u5B57\u6BB5\u3002","Write _PARAM2_ in field _PARAM1_ of _PARAM0_ (store result state in _PARAM3_)":"\u5728 _PARAM0_ \u7684 _PARAM1_ \u4E2D\u5BEB\u5165 _PARAM2_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM3_)","Update a document in Database":"\u5728\u8CC7\u6599\u5EAB\u4E2D\u66F4\u65B0\u6587\u6A94","Updates a variable on the database.":"\u66F4\u65B0\u8CC7\u6599\u5EAB\u4E2D\u7684\u8B8A\u91CF\u3002","Update variable _PARAM0_ with _PARAM1_ (store result state in _PARAM2_)":"\u4F7F\u7528 _PARAM1_ \u66F4\u65B0\u8B8A\u91CF _PARAM0_ (\u5C07\u7D50\u679C\u72C0\u614B\u5B58\u5132\u5728_PARAM2_\u4E2D)","Updates a field of a Database document.":"\u66F4\u65B0\u8CC7\u6599\u5EAB\u6587\u6A94\u7684\u5B57\u6BB5\u3002","Update field _PARAM1_ of _PARAM0_ with _PARAM2_ (store result state in _PARAM3_)":"\u901A\u904E _PARAM2_ \u66F4\u65B0_PARAM0_ \u7684 _PARAM1_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM3_)","Delete a database variable":"\u522A\u9664\u8CC7\u6599\u5EAB\u8B8A\u91CF","Deletes a variable from the database.":"\u5F9E\u8CC7\u6599\u5EAB\u4E2D\u522A\u9664\u4E00\u500B\u8B8A\u91CF\u3002","Delete variable _PARAM0_ from database (store result state in _PARAM1_)":"\u5F9E\u8CC7\u6599\u5EAB\u4E2D\u522A\u9664\u8B8A\u91CF _PARAM0_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM1_)","Delete a field of a variable":"\u522A\u9664\u8B8A\u91CF\u7684\u5B57\u6BB5","Deletes a field of a variable on the database.":"\u522A\u9664\u8CC7\u6599\u5EAB\u4E2D\u8B8A\u91CF\u7684\u5B57\u6BB5\u3002","Delete field _PARAM1_ of variable _PARAM0_ on the database (store result state in _PARAM2_)":"\u522A\u9664\u8CC7\u6599\u5EAB\u4E2D\u8B8A\u91CF _PARAM0_ \u7684 _PARAM1_ \u5B57\u6BB5 (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM2_)","Get a variable from the database":"\u5F9E\u8CC7\u6599\u5EAB\u7372\u53D6\u4E00\u500B\u8B8A\u91CF","Gets a variable from the database and store it in a Scene variable.":"\u5F9E\u8CC7\u6599\u5EAB\u7372\u53D6\u8B8A\u91CF\u5E76\u5C07\u5176\u5B58\u5132\u5728\u5834\u666F\u8B8A\u91CF\u3002","Load database variable _PARAM0_ into _PARAM1_ (store result state in _PARAM2_)":"\u52A0\u8F09\u8CC7\u6599\u5EAB\u8B8A\u91CF _PARAM0_ \u5230 _PARAM1_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM2_)","Callback variable where to store the data":"\u5B58\u5132\u8CC7\u6599\u7684\u56DE\u8ABF\u8B8A\u91CF","Get a field of a variable":"\u7372\u53D6\u8B8A\u91CF\u5B57\u6BB5","Return the value of a field in a variable from the database and store it in a scene variable.":"\u5F9E\u8CC7\u6599\u5EAB\u4E2D\u8FD4\u56DE\u4E00\u500B\u8B8A\u91CF\u4E2D\u7684\u5B57\u6BB5\u7684\u503C\uFF0C\u5E76\u5C07\u5176\u5B58\u5132\u5728\u5834\u666F\u8B8A\u91CF\u4E2D\u3002","Load field _PARAM1_ of database variable _PARAM0_ into _PARAM2_ (store result state in _PARAM3_)":"\u5C07\u8CC7\u6599\u5EAB\u8B8A\u91CF _PARAM0_ \u7684 _PARAM1_ \u52A0\u8F09\u5230 _PARAM2_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM3_)","Check for a variable's existence":"\u6AA2\u67E5\u8B8A\u91CF\u662F\u5426\u5B58\u5728","Checks for the existence of a variable. Sets the result variable to 1 if it exists else to 2.":"\u6AA2\u67E5\u8B8A\u91CF\u662F\u5426\u5B58\u5728\u3002\u5982\u679C\u5B58\u5728\u7D50\u679C\u8B8A\u91CF\uFF0C\u5247\u5C07\u7D50\u679C\u8B8A\u91CF\u8A2D\u5B9A\u70BA 1\u3002","Check for existence of _PARAM0_ and store result in _PARAM1_ (store result state in _PARAM2_)":"\u6AA2\u67E5\u662F\u5426\u5B58\u5728_PARAM0_\u5E76\u5728 _PARAM1_ \u4E2D\u5B58\u5132\u7D50\u679C(\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM2_)","Check for existence of a variable's field":"\u6AA2\u67E5\u8B8A\u91CF\u5B57\u6BB5\u662F\u5426\u5B58\u5728","Checks for the existence of a field in a variable. Sets the result variable to 1 if it exists else to 2.":"\u6AA2\u67E5\u4E00\u500B\u5B57\u6BB5\u5728\u8B8A\u91CF\u4E2D\u662F\u5426\u5B58\u5728\uFF0C\u5C07\u7D50\u679C\u8B8A\u91CF\u8A2D\u70BA1\uFF0C\u5982\u679C\u5B83\u5B58\u5728\uFF0C\u5247\u8A2D\u70BA2\u3002","Check for existence of _PARAM1_ in database variable _PARAM0_ and store result in _PARAM2_ (store result state in _PARAM3_)":"\u6AA2\u67E5\u8CC7\u6599\u5EAB\u8B8A\u91CF _PARAM0_ \u662F\u5426\u5B58\u5728_PARAM1_ \u5E76\u5C07\u7D50\u679C\u5B58\u5132\u5728 _PARAM2_ (\u5B58\u5132\u7D50\u679C\u72C0\u614B\u5728 _PARAM3_)","3D":"3D \u7ACB\u9AD4","Support for 3D in GDevelop: this provides 3D objects and the common features for all 3D objects.":"Support for 3D in GDevelop: this provides 3D objects and the common features for all 3D objects.","Common features for all 3D objects: position in 3D space (including the Z axis, in addition to X and Y), size (including depth, in addition to width and height), rotation (on X and Y axis, in addition to the Z axis), scale (including Z axis, in addition to X and Y), flipping (on Z axis, in addition to horizontal (Y)/vertical (X) flipping).":"Common features for all 3D objects: position in 3D space (including the Z axis, in addition to X and Y), size (including depth, in addition to width and height), rotation (on X and Y axis, in addition to the Z axis), scale (including Z axis, in addition to X and Y), flipping (on Z axis, in addition to horizontal (Y)/vertical (X) flipping).","Z (elevation)":"Z (\u9AD8\u5EA6)","the Z position (the \"elevation\")":"Z \u4F4D\u7F6E (\u201C\u9AD8\u5EA6\u201D)","the Z position":"Z \u4F4D\u7F6E","Center Z position":"\u4E2D\u5FC3 Z \u4F4D\u7F6E","the Z position of the center of rotation":"\u65CB\u8F49\u4E2D\u5FC3\u7684 Z \u4F4D\u7F6E","the Z position of the center":"\u4E2D\u5FC3\u7684 Z \u4F4D\u7F6E","Position \u276F Center":"\u4F4D\u7F6E \u276F \u4E2D\u5FC3","Depth (size on Z axis)":"\u6DF1\u5EA6 (Z\u8EF8\u4E0A\u7684\u5927\u5C0F)","the depth (size on Z axis)":"\u6DF1\u5EA6 (Z\u8EF8\u4E0A\u7684\u5927\u5C0F)","the depth":"\u6DF1\u5EA6","Scale on Z axis":"\u5728 Z \u8EF8\u4E0A\u7E2E\u653E","the scale on Z axis of an object (default scale is 1)":"\u7269\u4EF6 Z \u8EF8\u4E0A\u7684\u7E2E\u653E\u6BD4\u4F8B (\u9ED8\u8A8D\u6BD4\u4F8B\u70BA 1)","the scale on Z axis scale":"Z \u8EF8\u7E2E\u653E\u6BD4\u4F8B","Flip the object on Z":"\u5728 Z \u4E0A\u7FFB\u8F49\u7269\u4EF6","Flip the object on Z axis":"\u5728 Z \u8EF8\u4E0A\u7FFB\u8F49\u7269\u4EF6","Flip on Z axis _PARAM0_: _PARAM2_":"\u5728 Z \u8EF8\u4E0A\u7FFB\u8F49 _PARAM0_: _PARAM2_","Flipped on Z":"\u5728 Z \u4E0A\u7FFB\u8F49","Check if the object is flipped on Z axis":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728 Z \u8EF8\u4E0A\u7FFB\u8F49","_PARAM0_ is flipped on Z axis":"_PARAM0_ \u5728 Z \u8EF8\u4E0A\u7FFB\u8F49","Rotation on X axis":"X \u8EF8\u65CB\u8F49","the rotation on X axis":"X \u8EF8\u4E0A\u7684\u65CB\u8F49","Rotation on Y axis":"Y \u8EF8\u65CB\u8F49","the rotation on Y axis":"Y \u8EF8\u4E0A\u7684\u65CB\u8F49","Turn around X axis":"\u7E5E X \u8EF8\u65CB\u8F49","Turn the object around X axis. This axis doesn't move with the object rotation.":"\u570D\u7E5E X \u8EF8\u8F49\u52D5\u7269\u9AD4\u3002\u8A72\u8EF8\u4E0D\u96A8\u7269\u4EF6\u65CB\u8F49\u800C\u79FB\u52D5\u3002","Turn _PARAM0_ from _PARAM2_\xB0 around X axis":"\u570D\u7E5E X \u8EF8\u5F9E _PARAM2_\xB0 \u8F49\u52D5 _PARAM0_","Angle to add (in degrees)":"\u89D2\u5EA6 (\u5EA6)\uFF1A","Turn around Y axis":"\u7E5E Y \u8EF8\u65CB\u8F49","Turn the object around Y axis. This axis doesn't move with the object rotation.":"\u570D\u7E5E Y \u8EF8\u8F49\u52D5\u7269\u9AD4\u3002\u8A72\u8EF8\u4E0D\u96A8\u7269\u4EF6\u65CB\u8F49\u800C\u79FB\u52D5\u3002","Turn _PARAM0_ from _PARAM2_\xB0 around Y axis":"\u570D\u7E5E Y \u8EF8\u5F9E _PARAM2_\xB0 \u8F49\u52D5 _PARAM0_","Turn around Z axis":"\u7E5E Z \u8EF8\u65CB\u8F49","Turn the object around Z axis. This axis doesn't move with the object rotation.":"\u570D\u7E5E Z \u8EF8\u8F49\u52D5\u7269\u9AD4\u3002\u8A72\u8EF8\u4E0D\u96A8\u7269\u4EF6\u65CB\u8F49\u800C\u79FB\u52D5\u3002","Turn _PARAM0_ from _PARAM2_\xB0 around Z axis":"\u570D\u7E5E Z \u8EF8\u5F9E _PARAM2_\xB0 \u8F49\u52D5 _PARAM0_","Forward vector X component":"\u524D\u5411\u5411\u91CF X \u5206\u91CF","Return the object forward vector X component.":"\u8FD4\u56DE\u7269\u9AD4\u524D\u5411\u5411\u91CF X \u5206\u91CF\u3002","Object basis":"\u7269\u9AD4\u57FA\u790E","Forward vector Y component":"\u524D\u5411\u5411\u91CF Y \u5206\u91CF","Return the object forward vector Y component.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u524D\u9032\u65B9\u5411\u5411\u91CF Y \u6210\u5206\u3002","Forward vector Z component":"\u524D\u9032\u65B9\u5411\u5411\u91CF Z \u6210\u5206","Return the object forward vector Z component.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u524D\u9032\u65B9\u5411\u5411\u91CF Z \u6210\u5206\u3002","Up vector X component":"\u5411\u4E0A\u5411\u91CF X \u6210\u5206","Return the object up vector X component.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u5411\u4E0A\u5411\u91CF X \u6210\u5206\u3002","Up vector Y component":"\u5411\u4E0A\u5411\u91CF Y \u6210\u5206","Return the object up vector Y component.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u5411\u4E0A\u5411\u91CF Y \u6210\u5206\u3002","Up vector Z component":"\u5411\u4E0A\u5411\u91CF Z \u6210\u5206","Return the object up vector Z component.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u5411\u4E0A\u5411\u91CF Z \u6210\u5206\u3002","Right vector X component":"\u5411\u53F3\u5411\u91CF X \u6210\u5206","Return the object right vector X component.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u5411\u53F3\u5411\u91CF X \u6210\u5206\u3002","Right vector Y component":"\u5411\u53F3\u5411\u91CF Y \u6210\u5206","Return the object right vector Y component.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u5411\u53F3\u5411\u91CF Y \u6210\u5206\u3002","Right vector Z component":"\u5411\u53F3\u5411\u91CF Z \u6210\u5206","Return the object right vector Z component.":"\u8FD4\u56DE\u7269\u4EF6\u7684\u5411\u53F3\u5411\u91CF Z \u6210\u5206\u3002","3D Model":"3D \u6A21\u578B","An animated 3D model, useful for most elements of a 3D game.":"\u4E00\u500B\u52D5\u756B\u76843D\u6A21\u578B\uFF0C\u5C0D\u65BC\u5927\u591A\u65783D\u904A\u6232\u5143\u7D20\u975E\u5E38\u6709\u7528\u3002","Compare the width of an object.":"\u6BD4\u8F03\u7269\u4EF6\u7684\u5BEC\u5EA6\u3002","Compare the height of an object.":"\u6BD4\u8F03\u7269\u4EF6\u7684\u9AD8\u5EA6\u3002","the depth's scale of an object":"\u7269\u4EF6\u7684\u6DF1\u5EA6\u6BD4\u4F8B","the depth's scale":"\u6DF1\u5EA6\u7684\u6BD4\u4F8B","Flip on Z axis _PARAM0_: _PARAM1_":"\u5728 Z \u8EF8\u4E0A\u7FFB\u8F49 _PARAM0_\uFF1A_PARAM1_","Turn _PARAM0_ from _PARAM1_\xB0 around X axis":"\u5C07 _PARAM0_ \u5F9E _PARAM1_\xB0 \u7E5E X \u8EF8\u8F49\u52D5","Turn _PARAM0_ from _PARAM1_\xB0 around Y axis":"\u5C07 _PARAM0_ \u5F9E _PARAM1_\xB0 \u7E5E Y \u8EF8\u8F49\u52D5","Turn _PARAM0_ from _PARAM1_\xB0 around Z axis":"\u5C07 _PARAM0_ \u5F9E _PARAM1_\xB0 \u7E5E Z \u8EF8\u8F49\u52D5","Animation (by number)":"\u52D5\u756B (\u6309\u7DE8\u865F)","the number of the animation played by the object (the number from the animations list)":"\u7269\u4EF6\u64AD\u653E\u7684\u52D5\u756B\u7DE8\u865F (\u52D5\u756B\u5217\u8868\u4E2D\u7684\u7DE8\u865F)","the number of the animation":"\u52D5\u756B\u7684\u7DE8\u865F","Animation (by name)":"\u52D5\u756B (\u6309\u540D\u7A31)","the animation played by the object":"\u7269\u4EF6\u64AD\u653E\u7684\u52D5\u756B","the animation":"\u52D5\u756B","Animation name":"\u52D5\u756B\u5DF2\u66AB\u505C","Pause the animation":"\u66AB\u505C\u52D5\u756B","Pause the animation of the object":"\u66AB\u505C\u7269\u4EF6\u7684\u52D5\u756B","Pause the animation of _PARAM0_":"\u66AB\u505C _PARAM0_ \u7684\u52D5\u756B","Resume the animation":"\u6062\u5FA9\u52D5\u756B","Resume the animation of the object":"\u6062\u5FA9\u7269\u4EF6\u7684\u52D5\u756B","Resume the animation of _PARAM0_":"\u6062\u5FA9 _PARAM0_ \u7684\u52D5\u756B","the animation speed scale (1 = the default speed, >1 = faster and <1 = slower)":"\u52D5\u756B\u901F\u5EA6\u6BD4\u4F8B (1 = \u9ED8\u8A8D\u901F\u5EA6\uFF0C >1 = \u66F4\u5FEB\uFF0C <1 = \u66F4\u6162)","Speed scale":"\u901F\u5EA6\u7E2E\u653E","Animation paused":"\u52D5\u756B\u5DF2\u66AB\u505C","Check if the animation of an object is paused.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5DF2\u66AB\u505C\u52D5\u756B\u3002","The animation of _PARAM0_ is paused":"_PARAM0_ \u7684\u52D5\u756B\u662F\u66AB\u505C\u7684","Animation finished":"\u52D5\u756B\u64AD\u653E\u5B8C\u7562","Check if the animation being played by the Sprite object is finished.":"\u6AA2\u67E5\u7CBE\u9748\u7269\u4EF6\u64AD\u653E\u7684\u52D5\u756B\u662F\u5426\u5B8C\u6210\u3002","The animation of _PARAM0_ is finished":"_PARAM0_ \u7684\u52D5\u756B\u64AD\u653E\u5B8C\u7562","Set crossfade duration":"\u8A2D\u7F6E\u4EA4\u53C9\u6DE1\u5165\u6DE1\u51FA\u6301\u7E8C\u6642\u9593","Set the crossfade duration when switching to a new animation.":"\u5728\u5207\u63DB\u5230\u65B0\u52D5\u756B\u6642\u8A2D\u7F6E\u4EA4\u53C9\u6DE1\u5165\u6DE1\u51FA\u6301\u7E8C\u6642\u9593\u3002","Set crossfade duration of _PARAM0_ to _PARAM1_ seconds":"\u5C07 _PARAM0_ \u7684\u4EA4\u53C9\u6DE1\u5165\u6DE1\u51FA\u6301\u7E8C\u6642\u9593\u8A2D\u5B9A\u70BA _PARAM1_ \u79D2","Crossfade duration (in seconds)":"\u4EA4\u53C9\u6DE1\u5165\u6DE1\u51FA\u6301\u7E8C\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Enable texture transparency":"\u555F\u7528\u7D0B\u7406\u900F\u660E\u5EA6","Enabling texture transparency has an impact on rendering performance.":"\u555F\u7528\u7D0B\u7406\u900F\u660E\u5EA6\u6703\u5C0D\u6E32\u67D3\u6027\u80FD\u7522\u751F\u5F71\u97FF\u3002","Texture settings":"\u7D0B\u7406\u8A2D\u5B9A","Faces orientation":"\u9762\u90E8\u671D\u5411","The top of each image can touch the **top face** (Y) or the **front face** (Z).":"\u6BCF\u500B\u5716\u50CF\u7684\u9802\u90E8\u53EF\u4EE5\u63A5\u89F8\u5230 **\u9802\u9762** (Y) \u6216 **\u6B63\u9762** (Z)\u3002","Face orientation":"\u9762\u90E8\u65B9\u5411","Textures":"\u7D0B\u7406","Back face orientation":"\u80CC\u9762\u65B9\u5411","The top of the image can touch the **top face** (Y) or the **bottom face** (X).":"\u5716\u50CF\u7684\u9802\u90E8\u53EF\u4EE5\u63A5\u89F8\u5230 **\u9802\u9762** (Y) \u6216 **\u5E95\u9762** (X)\u3002","Tile":"\u74E6\u7247","Tile scale":"\u74F7\u78DA\u6BD4\u4F8B","The scale applied to tiled textures. A value of 1 displays them at the same size as in 2D.":"\u61C9\u7528\u65BC\u74F7\u78DA\u6750\u8CEA\u7684\u6BD4\u4F8B\u3002\u503C\u70BA 1 \u6642\uFF0C\u986F\u793A\u7684\u5C3A\u5BF8\u8207 2D \u4E2D\u76F8\u540C\u3002","Face visibility":"\u9762\u90E8\u53EF\u898B\u5EA6","Material type":"\u6750\u6599\u985E\u578B","3D Box":"3D \u76D2\u5B50","A box with images for each face":"\u6BCF\u500B\u9762\u90FD\u6709\u5716\u50CF\u7684\u76D2\u5B50","3D cube":"3D \u7ACB\u65B9\u9AD4","a face should be visible":"\u4E00\u500B\u9762\u61C9\u8A72\u662F\u53EF\u898B","having its _PARAM1_ face visible":"\u5176 _PARAM1_ \u9762\u53EF\u898B","Face":"\u9762","Visible?":"\u53EF\u898B\u7684\uFF1F","Rotation angle":"\u65CB\u8F49\u89D2\u5EA6","Face image":"\u9762\u90E8\u5716\u50CF","Change the image of the face.":"\u66F4\u6539\u9762\u90E8\u7684\u5716\u50CF\u3002","Change the image of _PARAM1_ face of _PARAM0_ to _PARAM2_":"\u5C07 _PARAM0_ \u7684 _PARAM1_ \u9762\u90E8\u5716\u50CF\u66F4\u6539\u70BA _PARAM2_","Change the tint of the cube.":"\u66F4\u6539\u7ACB\u65B9\u9AD4\u7684\u8272\u8ABF\u3002","Change the tint of _PARAM0_ to _PARAM1_":"\u628A _PARAM0_ \u7684\u984F\u8272\u66F4\u6539\u70BA _PARAM1_","3D Cube":"3D \u7ACB\u65B9\u9AD4","Camera Z position":"\u76F8\u6A5F Z \u4F4D\u7F6E","the camera position on Z axis":"Z \u8EF8\u4E0A\u7684\u76F8\u6A5F\u4F4D\u7F6E","the camera position on Z axis (layer: _PARAM3_)":"Z \u8EF8\u4E0A\u7684\u76F8\u6A5F\u4F4D\u7F6E (\u5716\u5C64: _PARAM3_)","Camera number (default : 0)":"\u93E1\u982D\u7DE8\u865F (\u9ED8\u8A8D \uFE30 0)","Camera X rotation":"\u76F8\u6A5F X \u65CB\u8F49","the camera rotation on X axis":"\u76F8\u6A5F\u5728 X \u8EF8\u4E0A\u7684\u65CB\u8F49","the camera rotation on X axis (layer: _PARAM3_)":"\u76F8\u6A5F\u5728 X \u8EF8\u4E0A\u7684\u65CB\u8F49 (\u5716\u5C64: _PARAM3_)","Camera Y rotation":"\u76F8\u6A5F Y \u65CB\u8F49","the camera rotation on Y axis":"\u76F8\u6A5F\u5728 Y \u8EF8\u4E0A\u7684\u65CB\u8F49","the camera rotation on Y axis (layer: _PARAM3_)":"\u76F8\u6A5F\u5728 Y \u8EF8\u4E0A\u7684\u65CB\u8F49 (\u5716\u5C64: _PARAM3_)","Camera forward vector X component":"\u76F8\u6A5F\u524D\u9032\u65B9\u5411\u5411\u91CF X \u6210\u5206","Return the camera forward vector X component.":"\u8FD4\u56DE\u76F8\u6A5F\u524D\u9032\u65B9\u5411\u5411\u91CF X \u6210\u5206\u3002","Camera basis":"\u76F8\u6A5F\u57FA\u6E96","Camera forward vector Y component":"\u76F8\u6A5F\u524D\u9032\u65B9\u5411\u5411\u91CF Y \u6210\u5206","Return the camera forward vector Y component.":"\u8FD4\u56DE\u76F8\u6A5F\u524D\u9032\u65B9\u5411\u5411\u91CF Y \u6210\u5206\u3002","Camera forward vector Z component":"\u76F8\u6A5F\u524D\u9032\u65B9\u5411\u5411\u91CF Z \u6210\u5206","Return the camera forward vector Z component.":"\u8FD4\u56DE\u76F8\u6A5F\u524D\u9032\u65B9\u5411\u5411\u91CF Z \u6210\u5206\u3002","Camera up vector X component":"\u76F8\u6A5F\u5411\u4E0A\u5411\u91CF X \u6210\u5206","Return the camera up vector X component.":"\u8FD4\u56DE\u76F8\u6A5F\u5411\u4E0A\u5411\u91CF X \u6210\u5206\u3002","Camera up vector Y component":"\u76F8\u6A5F\u5411\u4E0A\u5411\u91CF Y \u6210\u5206","Return the camera up vector Y component.":"\u8FD4\u56DE\u76F8\u6A5F\u5411\u4E0A\u5411\u91CF Y \u6210\u5206\u3002","Camera up vector Z component":"\u76F8\u6A5F\u5411\u4E0A\u5411\u91CF Z \u6210\u5206","Return the camera up vector Z component.":"\u8FD4\u56DE\u76F8\u6A5F\u5411\u4E0A\u5411\u91CF Z \u6210\u5206\u3002","Camera right vector X component":"\u76F8\u6A5F\u5411\u53F3\u5411\u91CF X \u6210\u5206","Return the camera right vector X component.":"\u8FD4\u56DE\u76F8\u6A5F\u5411\u53F3\u5411\u91CF X \u6210\u5206\u3002","Camera right vector Y component":"\u76F8\u6A5F\u5411\u53F3\u5411\u91CF Y \u6210\u5206","Return the camera right vector Y component.":"\u8FD4\u56DE\u76F8\u6A5F\u5411\u53F3\u5411\u91CF Y \u6210\u5206\u3002","Camera right vector Z component":"\u76F8\u6A5F\u5411\u53F3\u5411\u91CF Z \u6210\u5206","Return the camera right vector Z component.":"\u8FD4\u56DE\u76F8\u6A5F\u5411\u53F3\u5411\u91CF Z \u6210\u5206\u3002","Look at an object":"\u770B\u5411\u4E00\u500B\u7269\u9AD4","Change the camera rotation to look at an object. The camera top always face the screen.":"\u66F4\u6539\u76F8\u6A5F\u65CB\u8F49\u4EE5\u67E5\u770B\u7269\u4EF6\u3002\u76F8\u6A5F\u9802\u90E8\u59CB\u7D42\u9762\u5411\u5C4F\u5E55\u3002","Change the camera rotation of _PARAM2_ to look at _PARAM1_":"\u66F4\u6539 _PARAM2_ \u7684\u76F8\u6A5F\u65CB\u8F49\u4EE5\u67E5\u770B _PARAM1_","Layers and cameras":"\u5716\u5C64\u548C\u93E1\u982D","Stand on Y instead of Z":"\u5728 Y \u4E0A\u800C\u4E0D\u662F Z \u4E0A","Look at a position":"\u770B\u5411\u4E00\u500B\u4F4D\u7F6E","Change the camera rotation to look at a position. The camera top always face the screen.":"\u66F4\u6539\u76F8\u6A5F\u65CB\u8F49\u4EE5\u67E5\u770B\u4F4D\u7F6E\u3002\u76F8\u6A5F\u9802\u90E8\u59CB\u7D42\u9762\u5411\u5C4F\u5E55\u3002","Change the camera rotation of _PARAM4_ to look at _PARAM1_; _PARAM2_; _PARAM3_":"\u66F4\u6539 _PARAM4_ \u7684\u76F8\u6A5F\u65CB\u8F49\u4F86\u67E5\u770B _PARAM1_; _PARAM2_; _PARAM3_","Camera near plane":"\u8FD1\u5E73\u9762\u7684\u76F8\u6A5F","the camera near plane distance":"\u76F8\u6A5F\u8FD1\u5E73\u9762\u8DDD\u96E2","Distance (> 0)":"\u8DDD\u96E2 (> 0)","Camera far plane":"\u76F8\u6A5F\u9060\u5E73\u9762","the camera far plane distance":"\u76F8\u6A5F\u9060\u5E73\u9762\u8DDD\u96E2","Camera field of view (fov)":"\u76F8\u6A5F\u8996\u91CE (fov)","the camera field of view":"\u76F8\u6A5F\u8996\u91CE","Field of view in degrees (between 0\xB0 and 180\xB0)":"\u8996\u91CE\u89D2\u5EA6 (0 \xB0 \u81F3180 \xB0\u4E4B\u9593)","Fog (linear)":"\u9727 (\u7DDA\u6027)","Linear fog for 3D objects.":"3D \u7269\u4EF6\u7684\u7DDA\u6027\u9727\u3002","Fog color":"\u9727\u7684\u984F\u8272","Distance where the fog starts":"\u9727\u958B\u59CB\u7684\u8DDD\u96E2","Distance where the fog is fully opaque":"\u9727\u5B8C\u5168\u4E0D\u900F\u660E\u7684\u8DDD\u96E2","Fog (exponential)":"\u9727 (\u6307\u6578)","Exponential fog for 3D objects.":"3D \u7269\u4EF6\u7684\u6307\u6578\u9727\u3002","Density of the fog. Usual values are between 0.0005 (far away) and 0.005 (very thick fog).":"\u9727\u7684\u5BC6\u5EA6\u3002\u901A\u5E38\u503C\u4ECB\u65BC 0.0005\uFF08\u9060\u8655\uFF09\u548C 0.005\uFF08\u975E\u5E38\u6FC3\u539A\u7684\u9727\uFF09\u4E4B\u9593\u3002","Ambient light":"\u74B0\u5883\u5149","A light that illuminates all objects from every direction. Often used along with a Directional light (though a Hemisphere light can be used instead of an Ambient light).":"\u4E00\u7A2E\u5F9E\u6BCF\u500B\u65B9\u5411\u7167\u4EAE\u6240\u6709\u7269\u9AD4\u7684\u5149\u6E90\u3002\u901A\u5E38\u8207\u65B9\u5411\u5149\u4E00\u8D77\u4F7F\u7528\uFF08\u96D6\u7136\u534A\u7403\u5149\u53EF\u4EE5\u66FF\u4EE3\u74B0\u5883\u5149\uFF09\u3002","Intensity":"\u5F37\u5EA6","Directional light":"\u5E73\u884C\u5149","A very far light source like the sun. This is the light to use for casting shadows for 3D objects (other lights won't emit shadows). Often used along with a Hemisphere light.":"\u4E00\u500B\u975E\u5E38\u9059\u9060\u7684\u5149\u6E90\u50CF\u592A\u967D\u4E00\u6A23\u3002\u9019\u662F\u7528\u65BC\u70BA3D\u7269\u9AD4\u6295\u5C04\u9670\u5F71\u7684\u5149\u6E90\uFF08\u5176\u4ED6\u5149\u6E90\u4E0D\u6703\u767C\u51FA\u9670\u5F71\uFF09\u3002\u901A\u5E38\u8207\u534A\u7403\u5149\u4E00\u8D77\u4F7F\u7528\u3002","3D world top":"3D \u4E16\u754C\u9802\u90E8","Elevation":"\u9AD8\u5EA6","Maximal elevation is reached at 90\xB0.":"\u6700\u5927\u4EF0\u89D2\u9054\u5230 90\xB0\u3002","Shadows":"\u9670\u5F71","Shadow quality":"\u9670\u5F71\u8CEA\u91CF","Shadow bias":"\u9670\u5F71\u504F\u5DEE","Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 1.25 for medium quality and 2 for low quality.":"\u4F7F\u7528\u6B64\u8A2D\u5B9A\u4F86\u907F\u514D\u7531\u65BC\u6DF1\u5EA6\u7DE9\u885D\u5340\u7CBE\u5EA6\u800C\u7522\u751F\u7684\u201C\u9670\u5F71\u75E4\u7621\u201D\u3002\u9078\u64C7\u4E00\u500B\u8DB3\u5920\u5C0F\u7684\u503C\uFF0C\u4F8B\u5982 0.001\uFF0C\u4EE5\u907F\u514D\u5728\u9670\u5F71\u548C\u7269\u9AD4\u4E4B\u9593\u7522\u751F\u8DDD\u96E2\uFF0C\u4F46\u53C8\u4E0D\u80FD\u592A\u5C0F\uFF0C\u4EE5\u514D\u5728\u4F4E/\u4E2D\u7B49\u8CEA\u91CF\u4E0B\u51FA\u73FE\u9670\u5F71\u6545\u969C\u3002\u6B64\u503C\u7528\u65BC\u9AD8\u8CEA\u91CF\uFF0C\u4E26\u5C0D\u4E2D\u7B49\u8CEA\u91CF\u4E58\u4EE5 1.25\uFF0C\u5C0D\u4F4E\u8CEA\u91CF\u4E58\u4EE5 2\u3002","Shadow frustum size":"\u9670\u5F71\u622A\u9310\u5927\u5C0F","Distance from layer's camera":"\u8DDD\u96E2\u5716\u5C64\u7684\u76F8\u6A5F","Hemisphere light":"\u534A\u7403\u5149","A light that illuminates objects from every direction with a gradient. Often used along with a Directional light.":"\u4E00\u7A2E\u5F9E\u6BCF\u500B\u65B9\u5411\u4EE5\u6F38\u8B8A\u65B9\u5F0F\u7167\u4EAE\u7269\u9AD4\u7684\u5149\u6E90\u3002\u901A\u5E38\u8207\u65B9\u5411\u5149\u4E00\u8D77\u4F7F\u7528\u3002","Sky color":"\u5929\u7A7A\u984F\u8272","Ground color":"\u5730\u9762\u984F\u8272","Skybox":"\u5929\u7A7A\u76D2","Display a background on a cube surrounding the scene.":"\u5728\u5468\u570D\u5834\u666F\u7684\u65B9\u584A\u4E0A\u986F\u793A\u80CC\u666F\u3002","Right face (X+)":"\u53F3\u9762 (X+)","Left face (X-)":"\u5DE6\u9762 (X-)","Bottom face (Y+)":"\u5E95\u9762 (Y+)","Top face (Y-)":"\u9802\u9762 (Y-)","Front face (Z+)":"\u6B63\u9762 (Z+)","Back face (Z-)":"\u80CC\u9762 (Z-)","Hue and saturation":"\u8272\u8ABF\u548C\u98FD\u548C\u5EA6","Adjust hue and saturation.":"\u8ABF\u6574\u8272\u8ABF\u548C\u98FD\u548C\u5EA6\u3002","Hue":"\u8272\u76F8","Between -180\xB0 and 180\xB0":"\u4ECB\u65BC -180\xB0 \u548C 180\xB0 \u4E4B\u9593","Saturation":"\u98FD\u548C\u5EA6","Between -1 and 1":"\u4ECB\u65BC -1 \u548C 1 \u4E4B\u9593","Exposure":"\u66DD\u5149","Adjust exposure.":"\u8ABF\u6574\u66DD\u5149\u3002","Positive value":"\u6B63\u503C","Bloom":"\u5149\u6688","Apply a bloom effect.":"\u61C9\u7528\u5149\u6688\u6548\u679C\u3002","Strength":"\u5F37\u5EA6","Between 0 and 3":"\u4ECB\u65BC 0 \u548C 3 \u4E4B\u9593","Between 0 and 1":"\u4ECB\u65BC 0 \u548C 1 \u4E4B\u9593","Threshold":"\u95BE\u503C","Brightness and contrast.":"\u4EAE\u5EA6\u548C\u5C0D\u6BD4\u5EA6\u3002","Adjust brightness and contrast.":"\u8ABF\u6574\u4EAE\u5EA6\u548C\u5C0D\u6BD4\u5EA6\u3002","Contrast":"\u5C0D\u6BD4\u5EA6","A text must start with a double quote (\").":"\u6587\u672C\u5FC5\u9808\u4EE5\u96D9\u5F15\u865F (\")\u958B\u982D\u3002","A text must end with a double quote (\"). Add a double quote to terminate the text.":"\u6587\u672C\u5FC5\u9808\u4EE5\u96D9\u5F15\u865F (\")\u7D50\u5C3E\u3002\u6DFB\u52A0\u96D9\u5F15\u865F\u4EE5\u7D42\u6B62\u6587\u672C\u3002","A number was expected. You must enter a number here.":"\u9700\u8981\u4E00\u500B\u6578\u5B57\u3002\u60A8\u5FC5\u9808\u5728\u6B64\u8F38\u5165\u4E00\u500B\u6578\u5B57\u3002","You need to specify the name of the child variable to access. For example: `MyVariable.child`.":"\u60A8\u9700\u8981\u6307\u5B9A\u8981\u8A2A\u554F\u7684\u5B50\u8B8A\u91CF\u7684\u540D\u7A31\u3002\u4F8B\u5982\uFF1A`MyVariable.child`\u3002","You need to specify the name of the child variable to access. For example: `MyVariable[0]`.":"\u60A8\u9700\u8981\u6307\u5B9A\u8981\u8A2A\u554F\u7684\u5B50\u8B8A\u91CF\u7684\u540D\u7A31\u3002\u4F8B\u5982\uFF1A\u201CMyVariable[0]\u201D\u3002","An object variable or expression should be entered.":"\u61C9\u8F38\u5165\u7269\u4EF6\u8B8A\u91CF\u6216\u8868\u9054\u5F0F\u3002","This variable does not exist on this object or group.":"\u6B64\u8B8A\u91CF\u5728\u6B64\u7269\u4EF6\u6216\u7D44\u4E2D\u4E0D\u5B58\u5728\u3002","This variable only exists on some objects of the group. It must be declared for all objects.":"\u6B64\u8B8A\u91CF\u53EA\u5B58\u5728\u4E8E\u7D44\u7684\u67D0\u4E9B\u7269\u4EF6\u4E0A\u3002\u5FC5\u9808\u70BA\u6240\u6709\u7269\u4EF6\u8072\u660E\u5B83\u3002","This group is empty. Add an object to this group first.":"\u6B64\u7D44\u70BA\u7A7A\u3002\u8ACB\u5148\u5411\u6B64\u7D44\u6DFB\u52A0\u4E00\u500B\u7269\u4EF6\u3002","No child variable with this name found.":"\u672A\u627E\u5230\u5177\u6709\u6B64\u540D\u7A31\u7684\u5B50\u8B8A\u91CF\u3002","Accessing a child variable of a property is not possible - just write the property name.":"\u7121\u6CD5\u8A2A\u554F\u5C6C\u6027\u7684\u5B50\u8B8A\u91CF - \u53EA\u9700\u5BEB\u5165\u5C6C\u6027\u540D\u7A31\u3002","Behaviors can't be used as a value in expressions.":"\u884C\u70BA\u4E0D\u80FD\u4F5C\u70BA\u8868\u9054\u5F0F\u4E2D\u7684\u503C\u3002","Accessing a child variable of a parameter is not possible - just write the parameter name.":"\u7121\u6CD5\u8A2A\u554F\u53C3\u6578\u7684\u5B50\u8B8A\u91CF - \u53EA\u9700\u5BEB\u5165\u53C3\u6578\u540D\u7A31\u3002","This parameter is not a string, number or boolean - it can't be used in an expression.":"\u6B64\u53C3\u6578\u4E0D\u662F\u5B57\u7B26\u4E32\u3001\u6578\u5B57\u6216\u5E03\u723E\u503C - \u5B83\u4E0D\u80FD\u5728\u8868\u9054\u5F0F\u4E2D\u4F7F\u7528\u3002","This object doesn't exist.":"\u6B64\u7269\u4EF6\u4E0D\u5B58\u5728\u3002","This behavior is not attached to this object.":"\u6B64\u884C\u70BA\u672A\u9644\u52A0\u5230\u6B64\u7269\u4EF6\u3002","Enter the name of the function to call.":"\u8F38\u5165\u8981\u8ABF\u7528\u7684\u51FD\u6578\u7684\u540D\u7A31\u3002","Cannot find an expression with this name: ":"\u627E\u4E0D\u5230\u5177\u6709\u6B64\u540D\u7A31\u7684\u8868\u9054\u5F0F\uFF1A ","Double check that you've not made any typo in the name.":"\u8ACB\u4ED4\u7D30\u6AA2\u67E5\u60A8\u672A\u5728\u540D\u7A31\u4E2D\u8F38\u5165\u4EFB\u4F55\u985E\u578B\u3002","This expression is deprecated.":"\u6B64\u8868\u9054\u5F0F\u5DF2\u4E0D\u63A8\u85A6\u4F7F\u7528\u3002","You tried to use an expression that returns a number, but a string is expected. Use `ToString` if you need to convert a number to a string.":"\u4F60\u8A66\u5716\u4F7F\u7528\u4E00\u500B\u8FD4\u56DE\u6578\u5B57\u7684\u8868\u9054\u5F0F\uFF0C\u4F46\u662F\u9700\u8981\u4E00\u500B\u5B57\u7B26\u4E32\u3002 \u5982\u679C\u60A8\u9700\u8981\u5C07\u6578\u5B57\u8F49\u63DB\u70BA\u5B57\u7B26\u4E32\uFF0C\u8ACB\u4F7F\u7528\u201CToString\u201D\u3002","You tried to use an expression that returns a number, but another type is expected:":"\u4F60\u8A66\u5716\u4F7F\u7528\u4E00\u500B\u8FD4\u56DE\u6578\u5B57\u7684\u8868\u9054\u5F0F\uFF0C\u4F46\u9700\u8981\u53E6\u4E00\u7A2E\u985E\u578B\uFF1A","You tried to use an expression that returns a string, but a number is expected. Use `ToNumber` if you need to convert a string to a number.":"\u4F60\u8A66\u5716\u4F7F\u7528\u4E00\u500B\u8FD4\u56DE\u5B57\u7B26\u4E32\u7684\u8868\u9054\u5F0F\uFF0C\u4F46\u9700\u8981\u4E00\u500B\u6578\u5B57\u3002 \u5982\u679C\u60A8\u9700\u8981\u5C07\u5B57\u7B26\u4E32\u8F49\u63DB\u70BA\u6578\u5B57\uFF0C\u8ACB\u4F7F\u7528\u201CToNumber\u201D\u3002","You tried to use an expression that returns a string, but another type is expected:":"\u4F60\u8A66\u5716\u4F7F\u7528\u4E00\u500B\u8FD4\u56DE\u5B57\u7B26\u4E32\u7684\u8868\u9054\u5F0F\uFF0C\u4F46\u9700\u8981\u53E6\u4E00\u7A2E\u985E\u578B\uFF1A","You tried to use an expression with the wrong return type:":"\u60A8\u5617\u8A66\u4F7F\u7528\u932F\u8AA4\u8FD4\u56DE\u985E\u578B\u7684\u8868\u9054\u5F0F\uFF1A","The number of parameters must be exactly ":"\u53C3\u6578\u6578\u91CF\u5FC5\u9808\u662F\u6E96\u78BA\u7684 ","The number of parameters must be: ":"\u53C3\u6578\u6578\u91CF\u5FC5\u9808\u662F\uFF1A ","You have not entered enough parameters for the expression.":"\u60A8\u6C92\u6709\u70BA\u8868\u9054\u5F0F\u8F38\u5165\u8DB3\u5920\u7684\u53C3\u6578\u3002","This parameter was not expected by this expression. Remove it or verify that you've entered the proper expression name.":"\u6B64\u8868\u9054\u5F0F\u4E0D\u9700\u8981\u6B64\u53C3\u6578\u3002\u522A\u9664\u5B83\u6216\u78BA\u8A8D\u60A8\u8F38\u5165\u4E86\u6B63\u78BA\u8868\u9054\u5F0F\u540D\u7A31\u3002","A variable name was expected but something else was written. Enter just the name of the variable for this parameter.":"\u9700\u8981\u4E00\u500B\u8B8A\u91CF\u540D\uFF0C\u4F46\u9700\u8981\u5BEB\u5165\u5176\u4ED6\u5167\u5BB9\u3002\u8ACB\u8F38\u5165\u6B64\u53C3\u6578\u7684\u8B8A\u91CF\u540D\u3002","An object name was expected but something else was written. Enter just the name of the object for this parameter.":"\u7269\u4EF6\u540D\u7A31\u662F\u9810\u671F\u7684\u4F46\u5176\u4ED6\u6771\u897F\u662F\u5BEB\u5165\u7684\u3002\u53EA\u9700\u8F38\u5165\u6B64\u53C3\u6578\u7684\u7269\u4EF6\u540D\u7A31\u3002","This function is improperly set up. Reach out to the extension developer or a GDevelop maintainer to fix this issue":"\u6B64\u529F\u80FD\u8A2D\u5B9A\u4E0D\u7576\u3002\u806F\u7CFB\u64F4\u5C55\u958B\u767C\u8005\u6216GDevelop \u7DAD\u8B77\u8005\u89E3\u6C7A\u6B64\u554F\u984C","Called ComputeChangesetForVariablesContainer on variables containers that are different - they can't be compared.":"\u5728\u4E0D\u540C\u7684\u8B8A\u91CF\u5BB9\u5668\u4E0A\u8ABF\u7528 ComputeChangesetForVariablesContainer - \u5B83\u5011\u7121\u6CD5\u9032\u884C\u6BD4\u8F03\u3002","Unable to copy \"":"\u7121\u6CD5\u8907\u88FD\"","\" to \"":"\" \u5230 \"","\".":"\"\u3002","Return .":"\u8FD4\u56DE \u3002","Compare .":"\u6BD4\u8F03 \u3002","Check if .":"\u6AA2\u67E5\u662F\u5426 \u3002","Set (or unset) if .":"\u8A2D\u5B9A (\u6216\u53D6\u6D88\u8A2D\u5B9A) \u5982\u679C\u662F \u3002","Change .":"\u66F4\u6539 \u3002","Actions/conditions to change the current scene (or pause it and launch another one, or go back to the previous one), check if a scene or the game has just started/resumed, preload assets of a scene, get the current scene name or loading progress, quit the game, set background color, or disable input when focus is lost.":"\u64CD\u4F5C\u548C\u689D\u4EF6\u4EE5\u6539\u8B8A\u7576\u524D\u5834\u666F\uFF08\u6216\u66AB\u505C\u5B83\u4E26\u555F\u52D5\u53E6\u4E00\u500B\uFF0C\u6216\u8005\u8FD4\u56DE\u5230\u4E0A\u4E00\u500B\uFF09\uFF0C\u6AA2\u67E5\u5834\u666F\u6216\u904A\u6232\u662F\u5426\u525B\u958B\u59CB/\u6062\u5FA9\uFF0C\u9810\u52A0\u8F09\u5834\u666F\u7684\u8CC7\u6E90\uFF0C\u7372\u53D6\u7576\u524D\u5834\u666F\u7684\u540D\u7A31\u6216\u52A0\u8F09\u9032\u5EA6\uFF0C\u9000\u51FA\u904A\u6232\uFF0C\u8A2D\u7F6E\u80CC\u666F\u984F\u8272\uFF0C\u6216\u5728\u5931\u53BB\u7126\u9EDE\u6642\u7981\u7528\u8F38\u5165\u3002","Current scene name":"\u7576\u524D\u5834\u666F\u540D\u7A31","Name of the current scene":"\u7576\u524D\u5834\u666F\u540D\u7A31","At the beginning of the scene":"\u5834\u666F\u958B\u59CB\u6642","Is true only when scene just begins.":"\u53EA\u6709\u7576\u5834\u666F\u958B\u59CB\u6642\u70BAtrue","Scene just resumed":"\u5834\u666F\u525B\u525B\u6062\u5FA9","The scene has just resumed after being paused.":"\u5834\u666F\u5728\u66AB\u505C\u540E\u525B\u525B\u6062\u5FA9\u3002","Does scene exist":"\u5834\u666F\u662F\u5426\u5B58\u5728","Check if a scene exists.":"\u6AA2\u67E5\u5834\u666F\u662F\u5426\u5B58\u5728\u3002","Scene _PARAM1_ exists":"\u5834\u666F _PARAM1_ \u5B58\u5728","Name of the scene to check":"\u8981\u6AA2\u67E5\u7684\u5834\u666F\u540D\u7A31","Change the scene":"\u66F4\u6539\u5834\u666F","Stop this scene and start the specified one instead.":"\u505C\u6B62\u9019\u500B\u5834\u666F\u7136\u540E\u958B\u59CB\u7528\u6307\u5B9A\u7684\u4EE3\u66FF\u3002","Change to scene _PARAM1_":"\u66F4\u6539\u5834\u666F\u70BA _PARAM1_","Name of the new scene":"\u65B0\u5834\u666F\u540D\u7A31","Stop any other paused scenes?":"\u505C\u6B62\u5176\u4ED6\u5DF2\u66AB\u505C\u7684\u5834\u666F\uFF1F","Pause and start a new scene":"\u66AB\u505C\u5E76\u958B\u59CB\u65B0\u5834\u666F","Pause this scene and start the specified one.\nLater, you can use the \"Stop and go back to previous scene\" action to go back to this scene.":"\u66AB\u505C\u6B64\u5834\u666F\u5E76\u555F\u52D5\u6307\u5B9A\u7684\u5834\u666F\u3002\n\u7A0D\u540E\uFF0C\u60A8\u53EF\u4EE5\u4F7F\u7528\u201C\u505C\u6B62\u5E76\u8FD4\u56DE\u4E0A\u4E00\u5834\u666F\u201D\u52D5\u4F5C\u8FD4\u56DE\u5230\u6B64\u5834\u666F\u3002","Pause the scene and start _PARAM1_":"\u66AB\u505C\u5834\u666F\u7136\u540E\u958B\u59CB\u5834\u666F _PARAM1_","Stop and go back to previous scene":"\u505C\u6B62\u5E76\u8FD4\u56DE\u5230\u4E4B\u524D\u7684\u5834\u666F","Stop this scene and go back to the previous paused one.\nTo pause a scene, use the \"Pause and start a new scene\" action.":"\u505C\u6B62\u6B64\u5834\u666F\u5E76\u8FD4\u56DE\u5230\u4E0A\u4E00\u500B\u5DF2\u66AB\u505C\u7684\u5834\u666F\u3002\n\u8981\u66AB\u505C\u5834\u666F\uFF0C\u8ACB\u4F7F\u7528\u201C\u66AB\u505C\u5E76\u958B\u59CB\u65B0\u5834\u666F\u201D\u64CD\u4F5C\u3002","Stop the scene and go back to the previous paused one":"\u505C\u6B62\u5834\u666F\u7136\u540E\u8FD4\u56DE\u5230\u4E4B\u524D\u66AB\u505C\u7684\u4E00\u500B\u5834\u666F","Quit the game":"\u9000\u51FA\u6E38\u6232","Change the background color of the scene.":"\u66F4\u6539\u5834\u666F\u7684\u80CC\u666F\u984F\u8272","Set background color to _PARAM1_":"\u8A2D\u5B9A\u80CC\u666F\u984F\u8272\u70BA _PARAM1_","Disable input when focus is lost":"\u7576\u5931\u53BB\u7126\u9EDE\u6642\u7981\u7528\u8F38\u5165","mouse buttons must be taken into account even\nif the window is not active.":"\u5373\u4F7F\u8A72\u7A97\u53E3\u672A\u8655\u4E8E\u6D3B\u52D5\u72C0\u614B\uFF0C\u4E5F\u5FC5\u9808\u8003\u616E\u4F7F\u7528\u9F20\u6A19\u6309\u9215\u3002","Disable input when focus is lost: _PARAM1_":"\u7576\u5931\u53BB\u7126\u9EDE\u6642\u7981\u7528\u8F38\u5165\uFF1A _PARAM1_","Deactivate input when focus is lost":"\u5931\u53BB\u7126\u9EDE\u6642\u505C\u7528\u8F38\u5165","Game has just resumed":"\u904A\u6232\u525B\u525B\u91CD\u65B0\u958B\u59CB","Check if the game has just resumed from being hidden. It happens when the game tab is selected, a minimized window is restored or the application is put back on front.":"\u6AA2\u67E5\u904A\u6232\u662F\u5426\u525B\u525B\u5F9E\u96B1\u85CF\u72C0\u614B\u6062\u5FA9\u3002\u7576\u904A\u6232\u9078\u9805\u5361\u88AB\u9078\u4E2D\uFF0C\u6700\u5C0F\u5316\u7A97\u53E3\u88AB\u6062\u5FA9\uFF0C\u6216\u8005\u61C9\u7528\u7A0B\u5E8F\u88AB\u653E\u56DE\u5230\u524D\u9762\u6642\uFF0C\u5C31\u6703\u767C\u751F\u9019\u7A2E\u60C5\u6CC1\u3002","Preload scene":"\u9810\u52A0\u8F09\u5834\u666F","Preload a scene resources as soon as possible in background.":"\u5728\u540E\u81FA\u76E1\u5FEB\u9810\u52A0\u8F09\u4E00\u500B\u5834\u666F\u8CC7\u6E90\u3002","Preload scene _PARAM1_ in background":"\u5728\u540E\u81FA\u9810\u52A0\u8F09\u5834\u666F _PARAM1_","Scene loading progress":"\u5834\u666F\u52A0\u8F09\u9032\u5EA6","The progress of resources loading in background for a scene (between 0 and 1).":"\u5728\u540E\u81FA\u70BA\u5834\u666F\u52A0\u8F09\u8CC7\u6E90\u7684\u9032\u5EA6 (\u4ECB\u4E8E0\u548C1\u4E4B\u9593)\u3002","_PARAM1_ loading progress":"_PARAM1_ loading progress","Scene preloaded":"\u5834\u666F\u5DF2\u9810\u52A0\u8F09","Check if scene resources have finished to load in background.":"\u6AA2\u67E5\u5834\u666F\u8CC7\u6E90\u662F\u5426\u5DF2\u5B8C\u6210\u540E\u81FA\u52A0\u8F09\u3002","Scene _PARAM1_ was preloaded in background":"\u5834\u666F _PARAM1_ \u5DF2\u5728\u540E\u81FA\u9810\u52A0\u8F09","Preload object":"\u9810\u52A0\u8F09\u7269\u4EF6","Preload an object resources in background.":"\u5728\u80CC\u666F\u4E2D\u9810\u52A0\u8F09\u7269\u4EF6\u8CC7\u6E90\u3002","Preload object _PARAM1_ in background (scene: _PARAM2_)":"\u5728\u80CC\u666F\u4E2D\u9810\u52A0\u8F09\u7269\u4EF6 _PARAM1_\uFF08\u5834\u666F\uFF1A _PARAM2_\uFF09","Object scene":"\u7269\u4EF6\u5834\u666F","Unload object":"\u5378\u8F09\u7269\u4EF6","Unload an object resources. The \"resource preloading\" property must be set to \"preload with an action\" for this action to actually unload resources.":"\u5378\u8F09\u7269\u4EF6\u8CC7\u6E90\u3002\u201C\u8CC7\u6E90\u9810\u52A0\u8F09\u201D\u5C6C\u6027\u5FC5\u9808\u8A2D\u7F6E\u70BA\u201C\u7528\u52D5\u4F5C\u9810\u52A0\u8F09\u201D\uFF0C\u4EE5\u4FBF\u9019\u500B\u52D5\u4F5C\u80FD\u5920\u5BE6\u969B\u5378\u8F09\u8CC7\u6E90\u3002","Unload object _PARAM1_ (scene: _PARAM2_)":"\u5378\u8F09\u7269\u4EF6 _PARAM1_\uFF08\u5834\u666F\uFF1A _PARAM2_\uFF09","Object preloaded":"\u7269\u4EF6\u5DF2\u9810\u52A0\u8F09","Check if object resources have finished to load in background.":"\u6AA2\u67E5\u7269\u4EF6\u8CC7\u6E90\u662F\u5426\u5DF2\u5B8C\u6210\u80CC\u666F\u52A0\u8F09\u3002","Object _PARAM1_ was preloaded in background (scene: _PARAM2_)":"\u7269\u4EF6 _PARAM1_ \u5DF2\u5728\u80CC\u666F\u4E2D\u9810\u52A0\u8F09\uFF08\u5834\u666F\uFF1A _PARAM2_\uFF09","Actions to send web requests, communicate with external \"APIs\" and other network related tasks. Also contains an action to open a URL on the device browser.":"\u767C\u9001Web\u8ACB\u6C42\u3001\u8207\u5916\u90E8\u300CAPI\u300D\u901A\u8A0A\u4EE5\u53CA\u5176\u4ED6\u7DB2\u7D61\u76F8\u95DC\u4EFB\u52D9\u7684\u64CD\u4F5C\u3002\u9084\u5305\u542B\u5728\u8A2D\u5099\u700F\u89BD\u5668\u4E0A\u6253\u958BURL\u7684\u64CD\u4F5C\u3002","Send a request to a web page":"\u5C07\u4E00\u500B\u8ACB\u6C42\u767C\u9001\u5230\u7DB2\u9801","Send an asynchronous request to the specified web page.\n\nPlease note that for the web games, the game must be hosted on the same host as specified below, except if the server is configured to answer to all requests (cross-domain requests).":"\u767C\u9001\u7570\u6B65\u8ACB\u6C42\u5230\u6307\u5B9A\u7684\u7DB2\u9801\u3002\n\n\u8ACB\u6CE8\u610F\uFF0C\u5C0D\u4E8E\u7DB2\u9801\u904A\u6232\uFF0C\u904A\u6232\u5FC5\u9808\u5728\u4E0B\u9762\u6307\u5B9A\u7684\u540C\u4E00\u500B\u4E3B\u6A5F\u4E0A\u6258\u7BA1\u3002 \u9664\u975E\u670D\u52D9\u5668\u914D\u7F6E\u70BA\u97FF\u61C9\u6240\u6709\u8ACB\u6C42(\u8DE8\u57DF\u8ACB\u6C42)\u3002","Send a _PARAM2_ request to _PARAM0_ with body: _PARAM1_, and store the result in _PARAM4_ (or in _PARAM5_ in case of error)":"\u767C\u9001\u4E00\u500B _PARAM2_ \u8ACB\u6C42\u7D66_PARAM0_ \u8207\u6B63\u6587: _PARAM1_, \u5E76\u5C07\u7D50\u679C\u4FDD\u5B58\u5728_PARAM4_ (\u5982\u679C\u767C\u751F\u932F\u8AA4\u5247\u5728 _PARAM5_ \u4E2D)","URL (API or web-page address)":"URL (API\u6216\u7DB2\u9801\u5730\u5740)","Example: \"https://example.com/user/123\". Using *https* is highly recommended.":"\u793A\u4F8B\uFF1A\u201Chttps://example.com/user/123\u201D\u3002\u5F37\u70C8\u5EFA\u8B70\u4F7F\u7528 *https://cample.com/user/123\u3002","Request body content":"\u8ACB\u6C42\u6B63\u6587\u5167\u5BB9","Request method":"\u8ACB\u6C42\u65B9\u6CD5","If empty, \"GET\" will be used.":"\u5982\u679C\u70BA\u7A7A\uFF0C\u5C07\u4F7F\u7528\u201CGET\u201D\u3002","Content type":"\u5167\u5BB9\u985E\u578B","If empty, \"application/x-www-form-urlencoded\" will be used.":"\u5982\u679C\u70BA\u7A7A\uFF0C\u5C07\u4F7F\u7528\u201Capplication/x-www-form-urlenccoed\u201D\u3002","Variable where to store the response":"\u5B58\u5132\u97FF\u61C9\u7684\u8B8A\u91CF","The response of the server will be stored, as a string, in this variable. If the server returns *JSON*, you may want to use the action \"Convert JSON to a scene variable\" afterwards, to explore the results with a *structure variable*.":"\u670D\u52D9\u5668\u7684\u97FF\u61C9\u5C07\u4F5C\u70BA\u5B57\u7B26\u4E32\u5B58\u5132\u5728\u6B64\u8B8A\u91CF\u4E2D\u3002 \u5982\u679C\u670D\u52D9\u5668\u8FD4\u56DE *JSON*\uFF0C\u4F60\u53EF\u80FD\u60F3\u8981\u5728\u5176\u540E\u4F7F\u7528\u52D5\u4F5C\"\u8F49\u63DBJSON\u5230\u5834\u666F\u8B8A\u91CF\"\u3002 \u4F7F\u7528 *\u7D50\u69CB\u8B8A\u91CF*\u4F86\u63A2\u7D22\u7D50\u679C\u3002","Variable where to store the error message":"\u5B58\u5132\u932F\u8AA4\u6D88\u606F\u7684\u8B8A\u91CF","Optional, only used if an error occurs. This will contain the [\"status code\"](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) if the server returns a status >= 400. If the request was not sent at all (e.g. no internet or CORS issues), the variable will be set to \"REQUEST_NOT_SENT\".":"\u53EF\u9078\uFF0C\u50C5\u5728\u767C\u751F\u932F\u8AA4\u6642\u4F7F\u7528\u3002\u5982\u679C\u670D\u52D9\u5668\u8FD4\u56DE\u72C0\u614B >= 400\uFF0C\u5B83\u5C07\u5305\u542B [\"Status code\"](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)\u3002 \u5982\u679C\u8ACB\u6C42\u6839\u672C\u6C92\u6709\u767C\u9001(\u4F8B\u5982\u6C92\u6709\u4E92\u806F\u7DB2\u6216CORS \u554F\u984C)\uFF0C\u8B8A\u91CF\u5C07\u8A2D\u5B9A\u70BA\u201CREQUEST_NOT_SENT\u201D\u3002","Open a URL (web page) or a file":"\u6253\u958B\u4E00\u500B URL (\u7DB2\u9801) \u6216\u4E00\u500B\u6587\u4EF6","This action launches the specified file or URL, in a browser (or in a new tab if the game is using the Web platform and is launched inside a browser).":"\u6B64\u64CD\u4F5C\u6703\u5728\u700F\u89BD\u5668\u4E2D\u555F\u52D5\u6307\u5B9A\u7684\u6587\u4EF6\u6216URL\uFF08\u5982\u679C\u904A\u6232\u6B63\u5728\u4F7F\u7528Web\u5E73\u81FA\u5E76\u5728\u700F\u89BD\u5668\u4E2D\u555F\u52D5\uFF0C\u5247\u5728\u65B0\u9078\u9805\u5361\u4E2D\uFF09\u3002","Open URL _PARAM0_ in a browser (or new tab)":"\u5728\u700F\u89BD\u5668\u4E2D\u6253\u958B URL _PARAM0_ (\u6216\u65B0\u6A19\u7C3D)","URL (or filename)":"URL ( \u6216\u6587\u4EF6\u540D )","Download a file":"\u4E0B\u8F09\u6587\u4EF6","Download a file from a web site":"\u5F9E web \u7AD9\u9EDE\u4E0B\u8F09\u6587\u4EF6","Download file _PARAM1_ from _PARAM0_ under the name of _PARAM2_":"\u5F9E_PARAM0_\u4E0B\u8F09\u6587\u4EF6_PARAM1_\uFF0C\u540D\u7A31\u70BA_PARAM2_","Host (for example : http://www.website.com)":"\u4E3B\u6A5F\uFF08\u4F8B\u5982\uFF1Ahttp://www.website.com\uFF09","Path to file (for example : /folder/file.txt)":"\u6587\u4EF6\u8DEF\u5F91\uFF08\u4F8B\u5982: /folder/file.txt\uFF09","Save as":"\u53E6\u5B58\u70BA","Enable (or disable) metrics collection":"\u555F\u7528(\u6216\u7981\u7528) \u8A08\u91CF\u96C6\u5408","Enable, or disable, the sending of anonymous data used to compute the number of sessions and other metrics from your game players.\nBe sure to only send metrics if in accordance with the terms of service of your game and if they player gave their consent, depending on how your game/company handles this.":"\u555F\u7528\u6216\u7981\u7528\u767C\u9001\u533F\u540D\u8CC7\u6599\uFF0C\u7528\u4E8E\u8A08\u7B97\u60A8\u7684\u904A\u6232\u73A9\u5BB6\u7684\u6703\u8A71\u6B21\u6578\u548C\u5176\u4ED6\u8A08\u6578\u3002\n\u5982\u679C\u6309\u7167\u4F60\u7684\u904A\u6232\u670D\u52D9\u689D\u6B3E\u5E76\u4E14\u73A9\u5BB6\u8868\u793A\u540C\u610F\uFF0C\u8ACB\u78BA\u4FDD\u53EA\u767C\u9001\u8A08\u6578\u3002 \u53D6\u6C7A\u4E8E\u60A8\u7684\u904A\u6232/\u516C\u53F8\u5982\u4F55\u8655\u7406\u9019\u500B\u554F\u984C\u3002","Enable analytics metrics: _PARAM1_":"\u555F\u7528\u5206\u6790\u6307\u6A19\uFF1A _PARAM1_","Enable the metrics?":"\u555F\u7528\u8A08\u91CF\uFF1F","Camera center X position":"\u93E1\u982D\u4E2D\u5FC3\u7684X\u5750\u6A19","the X position of the center of a camera":"\u76F8\u6A5F\u4E2D\u5FC3\u7684 X \u4F4D\u7F6E","the X position of camera _PARAM4_ (layer: _PARAM3_)":"\u76F8\u6A5F_PARAM4_\u7684 X \u4F4D\u7F6E(\u5716\u5C64:_PARAM3_)","Camera center Y position":"\u93E1\u982D\u4E2D\u5FC3\u7684Y\u5750\u6A19","the Y position of the center of a camera":"\u76F8\u6A5F\u4E2D\u5FC3\u7684 Y \u4F4D\u7F6E","the Y position of camera _PARAM4_ (layer: _PARAM3_)":"\u76F8\u6A5F_PARAM4_\u7684 Y \u4F4D\u7F6E(\u5716\u5C64:_PARAM3_)","Width of a camera":"\u93E1\u982D\u7684\u5BEC\u5EA6","the width of a camera of a layer":"\u5716\u5C64\u76F8\u6A5F\u7684\u5BEC\u5EA6","the width of camera _PARAM2_ of layer _PARAM1_":"\u5716\u5C64 _PARAM1_ \u7684 _PARAM2_ \u7684\u76F8\u6A5F _PARAM2_ \u5BEC\u5EA6","Camera number":"\u93E1\u982D\u7DE8\u865F","Height of a camera":"\u93E1\u982D\u9AD8\u5EA6","the height of a camera of a layer":"\u5716\u5C64\u76F8\u6A5F\u7684\u9AD8\u5EA6","the height of camera _PARAM2_ of layer _PARAM1_":"\u5716\u5C64 _PARAM1_ \u7684 _PARAM2_ \u7684\u76F8\u6A5F\u9AD8\u5EA6","Camera left border position":"\u76F8\u6A5F\u5DE6\u908A\u6846\u4F4D\u7F6E","the position of the left border of a camera":"\u76F8\u6A5F\u5DE6\u908A\u6846\u7684\u4F4D\u7F6E","the position of the left border of camera _PARAM2_ of layer _PARAM1_":"\u76F8\u6A5F\u7684\u5DE6\u908A\u6846\u7684\u4F4D\u7F6E _PARAM2_ \u7684\u5C64 _PARAM1_","Camera right border position":"\u76F8\u6A5F\u53F3\u908A\u908A\u6846\u4F4D\u7F6E","the position of the right border of a camera":"\u76F8\u6A5F\u53F3\u908A\u6846\u7684\u4F4D\u7F6E","the position of the right border of camera _PARAM2_ of layer _PARAM1_":"\u76F8\u6A5F\u7684\u53F3\u908A\u6846\u7684\u4F4D\u7F6E _PARAM2_ \u7684\u5C64 _PARAM1_","Camera top border position":"\u76F8\u6A5F\u9802\u90E8\u908A\u6846\u4F4D\u7F6E","the position of the top border of a camera":"\u76F8\u6A5F\u9802\u90E8\u908A\u6846\u7684\u4F4D\u7F6E","the position of the top border of camera _PARAM2_ of layer _PARAM1_":"\u76F8\u6A5F\u7684\u9802\u90E8\u908A\u6846\u7684\u4F4D\u7F6E _PARAM2_ \u7684\u5C64 _PARAM1_","Camera bottom border position":"\u76F8\u6A5F\u5E95\u90E8\u908A\u6846\u4F4D\u7F6E","the position of the bottom border of a camera":"\u76F8\u6A5F\u5E95\u90E8\u908A\u6846\u7684\u4F4D\u7F6E","the position of the bottom border of camera _PARAM2_ of layer _PARAM1_":"\u76F8\u6A5F\u7684\u5E95\u90E8\u908A\u6846\u7684\u4F4D\u7F6E _PARAM2_ \u7684\u5C64 _PARAM1_","Angle of a camera of a layer":"\u5716\u5C64\u93E1\u982D\u7684\u89D2\u5EA6","the angle of rotation of a camera (in degrees)":"\u76F8\u6A5F\u7684\u65CB\u8F49\u89D2\u5EA6 (\u4EE5\u5EA6\u70BA\u55AE\u4F4D)","the angle of camera (layer: _PARAM3_, camera: _PARAM4_)":"\u76F8\u6A5F\u89D2\u5EA6 (\u5C64: _PARAM3_, \u76F8\u6A5F: _PARAM4_)","Add a camera to a layer":"\u6DFB\u52A0\u93E1\u982D\u5230\u5716\u5C64","This action adds a camera to a layer":"\u6B64\u64CD\u4F5C\u5C07\u4E00\u500B\u651D\u50CF\u6A5F\u6DFB\u52A0\u5230\u4E00\u500B\u5C64\u4E2D\u3002","Add a camera to layer _PARAM1_":"\u5C07\u76F8\u6A5F\u6DFB\u52A0\u5230\u5716\u5C64 _PARAM1_","Render zone: Top left side: X Position (between 0 and 1)":"\u6E32\u67D3\u5340\u57DF\uFF1A\u5DE6\u4E0A\u65B9\uFF1AX\u4F4D\u7F6E\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u9593\uFF09","Render zone: Top left side: Y Position (between 0 and 1)":"\u6E32\u67D3\u5340\u57DF\uFF1A\u5DE6\u4E0A\u65B9\uFF1AY\u4F4D\u7F6E\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u9593\uFF09","Render zone: Bottom right side: X Position (between 0 and 1)":"\u6E32\u67D3\u5340\u57DF\uFF1A\u5DE6\u4E0A\u65B9\uFF1AX\u4F4D\u7F6E\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u9593\uFF09","Render zone: Bottom right side: Y Position (between 0 and 1)":"\u6E32\u67D3\u5340\u57DF\uFF1A\u5DE6\u4E0A\u65B9\uFF1AY\u4F4D\u7F6E\uFF08\u4ECB\u4E8E0\u548C1\u4E4B\u9593\uFF09","Delete a camera of a layer":"\u522A\u9664\u5716\u5C64\u7684\u4E00\u500B\u93E1\u982D","Remove the specified camera from a layer":"\u79FB\u9664\u5716\u5C64\u7684\u6307\u5B9A\u93E1\u982D","Delete camera _PARAM2_ from layer _PARAM1_":"\u5F9E\u5716\u5C64 _PARAM1_ \u522A\u9664\u76F8\u6A5F _PARAM2_","Modify the size of a camera":"\u6539\u8B8A\u93E1\u982D\u7684\u5C3A\u5BF8","This action modifies the size of a camera of the specified layer. The zoom will be reset.":"\u8A72\u76F8\u6A5F\u7684\u52D5\u4F5C\u4FEE\u6539\u6307\u5B9A\u5927\u5C0F\u7684\u5C64\u3002\u8A72\u8B8A\u7126\u93E1\u982D\u5C07\u88AB\u91CD\u7F6E\u3002","Change the size of camera _PARAM2_ of _PARAM1_ to _PARAM3_*_PARAM4_":"\u66F4\u6539 _PARAM1_ \u7684 _PARAM2_ \u7684\u76F8\u6A5F\u5927\u5C0F\u70BA _PARAM3_*_PARAM4_","Modify the render zone of a camera":"\u8B8A\u66F4\u93E1\u982D\u7684\u6E32\u67D3\u5340\u57DF","This action modifies the render zone of a camera of the specified layer.":"\u6B64\u64CD\u4F5C\u5C07\u4FEE\u6539\u6307\u5B9A\u5716\u5C64\u4E2D\u76F8\u6A5F\u7684\u89D2\u5EA6\u3002","Set the render zone of camera _PARAM2_ from layer _PARAM1_ to _PARAM3_;_PARAM4_ _PARAM5_;_PARAM6_":"\u5F9E\u5716\u5C64 _PARAM1_ \u7684\u76F8\u6A5F\u6E32\u67D3\u5340\u57DF\u8A2D\u5B9A\u70BA _PARAM3_;_PARAM4_ _PARAM5_;_PARAM6_","Camera zoom":"\u76F8\u6A5F\u7E2E\u653E","Change camera zoom.":"\u66F4\u6539\u76F8\u6A5F\u7E2E\u653E\u3002","Change camera zoom to _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"\u5C07\u76F8\u6A5F\u7E2E\u653E\u66F4\u6539\u70BA _PARAM1_ (\u5716\u5C64: _PARAM2_, \u76F8\u6A5F: _PARAM3_)","Value (1:Initial zoom, 2:Zoom x2, 0.5:Unzoom x2...)":"\u503C(1:\u521D\u59CB\u7E2E\u653E,2:\u653E\u5927\u4E00\u500D,0.5:\u7E2E\u5C0F\u4E00\u534A)","Compare the zoom of a camera of a layer.":"\u6BD4\u8F03\u5716\u5C64\u76F8\u6A5F\u7684\u7E2E\u653E\u3002","Zoom of camera _PARAM2_ of layer _PARAM1_":"\u5716\u5C64 _PARAM1_ \u7684\u76F8\u6A5F _PARAM2_ \u7684\u7E2E\u653E","Zoom":"\u7E2E\u653E","Center the camera on an object within limits":"\u5728\u9650\u5B9A\u7684\u8303\u570D\u5167\u5C45\u4E2D\u93E1\u982D\u5728\u7269\u4EF6\u4E0A","Center the camera on the specified object, without leaving the specified limits.":"\u5C45\u4E2D\u93E1\u982D\u5728\u7269\u4EF6\u4E0A\uFF0C\u4E0D\u96E2\u958B\u6307\u5B9A\u8303\u570D","Center the camera on _PARAM1_ (limit : from _PARAM2_;_PARAM3_ to _PARAM4_;_PARAM5_) (layer: _PARAM7_, camera: _PARAM8_)":"\u5C07\u76F8\u6A5F\u5C45\u4E2D _PARAM1_ (\u9650\u5236\uFF1A\u5F9E_PARAM2_;_PARAM3_ \u5230_PARAM4_;_PARAM5_) (\u5716\u5C64\uFF1A _PARAM7_, \u76F8\u6A5F\uFF1A _PARAM8_)","Top left side of the boundary: X Position":"\u908A\u754C\u5DE6\u4E0A\u89D2\uFF1AX\u4F4D\u7F6E","Top left side of the boundary: Y Position":"\u908A\u754C\u5DE6\u4E0A\u89D2\uFF1AY\u4F4D\u7F6E","Bottom right side of the boundary: X Position":"\u908A\u754C\u5DE6\u5E95\u90E8\u89D2\uFF1AX\u4F4D\u7F6E","Bottom right side of the boundary: Y Position":"\u908A\u754C\u53F3\u908A\u5E95\u90E8\u89D2\uFF1AX\u4F4D\u7F6E","Anticipate the movement of the object (yes by default)":"\u9810\u6E2C\u7269\u4EF6\u7684\u79FB\u52D5\uFF08\u9ED8\u8A8D\u662F\uFF09","Enforce camera boundaries":"\u5F37\u5236\u4F7F\u7528\u76F8\u6A5F\u908A\u754C","Enforce camera boundaries by moving the camera back inside specified boundaries.":"\u901A\u904E\u5C07\u76F8\u6A5F\u79FB\u52D5\u5230\u6307\u5B9A\u7684\u908A\u754C\u5167\u4F86\u5F37\u5236\u4F7F\u7528\u76F8\u6A5F\u908A\u754C\u3002","Enforce camera boundaries (left: _PARAM1_, top: _PARAM2_ right: _PARAM3_, bottom: _PARAM4_, layer: _PARAM5_)":"\u5F37\u5236\u4F7F\u7528\u76F8\u6A5F\u908A\u754C(\u5DE6: _PARAM1_, \u9802: _PARAM2_ \u53F3: _PARAM3_, \u5E95: _PARAM4_, \u5716\u5C64: _PARAM5_)","Left bound X Position":"\u5DE6\u908A\u754C X \u4F4D\u7F6E","Top bound Y Position":"\u9802\u90E8\u908A\u754C Y \u4F4D\u7F6E","Right bound X Position":"\u53F3\u908A\u754C X \u4F4D\u7F6E","Bottom bound Y Position":"\u5E95\u90E8\u908A\u754C Y \u4F4D\u7F6E","Center the camera on an object":"\u5C07\u76F8\u6A5F\u7F6E\u4E8E\u7269\u4EF6\u7684\u4E2D\u5FC3","Center the camera on the specified object.":"\u5728\u6307\u5B9A\u7684\u7269\u4EF6\u4E0A\u5C45\u4E2D\u93E1\u982D","Center camera on _PARAM1_ (layer: _PARAM3_)":"\u5728 _PARAM1_ \u5C45\u4E2D\u651D\u50CF\u6A5F (\u5C64: _PARAM3_)","Show a layer":"\u986F\u793A\u5716\u5C64","Show a layer.":"\u986F\u793A\u5716\u5C64\u3002","Show layer _PARAM1_":"\u986F\u793A\u5716\u5C64 _PARAM1_","Hide a layer":"\u96B1\u85CF\u5716\u5C64","Hide a layer.":"\u96B1\u85CF\u5716\u5C64\u3002","Hide layer _PARAM1_":"\u96B1\u85CF\u5716\u5C64 _PARAM1_","Visibility of a layer":"\u5716\u5C64\u7684\u53EF\u898B\u6027","Test if a layer is set as visible.":"\u6E2C\u8A66\u662F\u5426\u5C07\u5716\u5C64\u8A2D\u5B9A\u70BA\u53EF\u898B\u3002","Layer _PARAM1_ is visible":"\u5716\u5C64 _PARAM1_ \u662F\u53EF\u8996\u7684","Effect property (number)":"\u6548\u679C\u5C6C\u6027 (\u6578\u5B57)","Change the value of a property of an effect.":"\u66F4\u6539\u6548\u679C\u7684\u5C6C\u6027\u503C\u3002","You can find the property names (and change the effect names) in the effects window.":"\u60A8\u53EF\u4EE5\u5728\u6548\u679C\u7A97\u53E3\u4E2D\u627E\u5230\u5C6C\u6027\u540D\u7A31 (\u5E76\u66F4\u6539\u6548\u679C\u540D\u7A31)\u3002","Set _PARAM3_ to _PARAM4_ for effect _PARAM2_ of layer _PARAM1_":"\u5C0D\u5716\u5C64 _PARAM1_ \u7684\u6548\u679C _PARAM2_\uFF0C\u8A2D\u5B9A _PARAM3_ \u70BA _PARAM4_","Effect property (string)":"\u6548\u679C\u5C6C\u6027 (\u5B57\u7B26\u4E32)","Change the value (string) of a property of an effect.":"\u66F4\u6539\u6548\u679C\u5C6C\u6027\u7684\u503C (\u5B57\u7B26\u4E32)\u3002","Effect property (enable or disable)":"\u6548\u679C\u5C6C\u6027 (\u555F\u7528\u6216\u7981\u7528)","Enable or disable a property of an effect.":"\u555F\u7528\u6216\u7981\u7528\u6548\u679C\u7684\u5C6C\u6027\u3002","Enable _PARAM3_ for effect _PARAM2_ of layer _PARAM1_: _PARAM4_":"\u555F\u7528 _PARAM3_ \u4EE5\u986F\u793A\u5716\u5C64 _PARAM1_ \u7684 _PARAM2_ \u6548\u679C: _PARAM4_","Enable this property":"\u555F\u7528\u6B64\u5C6C\u6027","Layer effect is enabled":"\u5716\u5C64\u6548\u679C\u5DF2\u555F\u7528","The effect on a layer is enabled":"\u5C0D\u5716\u5C64\u7684\u6548\u679C\u5DF2\u555F\u7528","Effect _PARAM2_ on layer _PARAM1_ is enabled":"\u555F\u7528\u5716\u5C64 _PARAM1_ \u4E0A\u7684\u6548\u679C _PARAM2_","Enable layer effect":"\u555F\u7528\u5716\u5C64\u6548\u679C","Enable an effect on a layer":"\u5C0D\u5716\u5C64\u555F\u7528\u7279\u6548","Enable effect _PARAM2_ on layer _PARAM1_: _PARAM3_":"\u5728\u5716\u5C64 _PARAM1_: _PARAM3_ \u4E0A\u555F\u7528_PARAM2_","Layer time scale":"\u66F4\u6539\u6642\u9593\u6BD4\u4F8B","Compare the time scale applied to the objects of the layer.":"\u6BD4\u8F03\u61C9\u7528\u4E8E\u5716\u5C64\u7269\u4EF6\u7684\u6642\u9593\u6BD4\u4F8B\u3002","the time scale of layer _PARAM1_":"\u5716\u5C64 _PARAM1_ \u7684\u6642\u9593\u5C3A\u5EA6","Change the time scale applied to the objects of the layer.":"\u6BD4\u8F03\u61C9\u7528\u4E8E\u5716\u5C64\u7269\u4EF6\u7684\u6642\u9593\u6BD4\u4F8B\u3002","Set the time scale of layer _PARAM1_ to _PARAM2_":"\u8A2D\u5B9A\u5716\u5C64 _PARAM1_ \u7684\u6642\u9593\u6BD4\u4F8B\u70BA _PARAM2_","Scale (1: Default, 2: 2x faster, 0.5: 2x slower...)":"\u6BD4\u4F8B (1: \u9ED8\u8A8D\u503C, 2: 2x \u66F4\u5FEB, 0.5: 2x \u6162...)","Layer default Z order":"\u5716\u5C64\u9ED8\u8A8D Z \u9806\u5E8F","Compare the default Z order set to objects when they are created on a layer.":"\u5728\u5716\u5C64\u4E0A\u5275\u5EFA\u7269\u4EF6\u6642\uFF0C\u6BD4\u8F03\u9ED8\u8A8D\u7684 Z \u9806\u5E8F\u3002","the default Z order of objects created on _PARAM1_":"\u5728 _PARAM1_ \u4E0A\u5275\u5EFA\u7269\u4EF6\u7684\u9ED8\u8A8DZ\u9806\u5E8F","Change the default Z order set to objects when they are created on a layer.":"\u7576\u7269\u4EF6\u5728\u5716\u5C64\u4E0A\u5275\u5EFA\u6642\uFF0C\u66F4\u6539\u9ED8\u8A8D\u7684 Z \u9806\u5E8F\u3002","Set the default Z order of objects created on _PARAM1_ to _PARAM2_":"\u8A2D\u5B9A\u5728 _PARAM1_ \u4E0A\u5275\u5EFA\u7684\u7269\u4EF6\u7684 Z \u9ED8\u8A8D\u9806\u5E8F\u70BA _PARAM2_","New default Z order":"\u65B0\u5EFA\u9ED8\u8A8D Z \u9806\u5E8F","Set the ambient light color of the lighting layer in format \"R;G;B\" string.":"\u4EE5\"R;G;B\"\u5B57\u7B26\u4E32\u7684\u683C\u5F0F\u8A2D\u5B9A\u7167\u660E\u5716\u5C64\u7684\u74B0\u5883\u4EAE\u5EA6\u984F\u8272\u3002","Set the ambient color of the lighting layer _PARAM1_ to _PARAM2_":"\u8A2D\u5B9A\u7167\u660E\u5716\u5C64 _PARAM1_ \u7684\u74B0\u5883\u984F\u8272\u5230 _PARAM2_","X position of the top left side point of a render zone":"\u6E32\u67D3\u5340\u57DF\u5DE6\u4E0A\u5074\u9EDE\u7684 X \u4F4D\u7F6E","Y position of the top left side point of a render zone":"\u6E32\u67D3\u5340\u57DF\u5DE6\u4E0A\u5074\u9EDE\u7684 Y \u4F4D\u7F6E","X position of the bottom right side point of a render zone":"\u6E32\u67D3\u5340\u57DF\u5DE6\u4E0A\u5074\u9EDE\u7684 X \u4F4D\u7F6E","Y position of the bottom right side point of a render zone":"\u6E32\u67D3\u5340\u57DF\u5DE6\u4E0A\u5074\u9EDE\u7684 Y \u4F4D\u7F6E","Zoom of a camera of a layer":"\u653E\u5927\u5716\u5C64\u7684\u651D\u50CF\u982D","Returns the time scale of the specified layer.":"\u8FD4\u56DE\u6307\u5B9A\u5C64\u7684\u6642\u9593\u6BD4\u4F8B\u3002","Default Z Order for a layer":"\u5716\u5C64\u9ED8\u8A8D\u7684 Z \u9806\u5E8F","Scalable objects":"\u53EF\u64F4\u5145\u7684\u7269\u4EF6","Actions/conditions/expression to change or check the scale of an object (default: 1).":"\u64CD\u4F5C/\u689D\u4EF6/\u8868\u9054\u5F0F\u4EE5\u6539\u8B8A\u6216\u6AA2\u67E5\u5C0D\u8C61\u7684\u7E2E\u653E\uFF08\u9ED8\u8A8D\uFF1A1\uFF09\u3002","the scale of the object (default scale is 1)":"\u7269\u4EF6\u7684\u6BD4\u4F8B (\u9ED8\u8A8D\u6BD4\u4F8B\u70BA1)","the scale on X axis of the object (default scale is 1)":"\u7269\u4EF6 X \u8EF8\u4E0A\u7684\u6BD4\u4F8B (\u9ED8\u8A8D\u6BD4\u4F8B\u70BA1)","the scale on X axis":"X \u8EF8\u4E0A\u7684\u6BD4\u4F8B","the scale on Y axis of the object (default scale is 1)":"\u7269\u4EF6 Y \u8EF8\u4E0A\u7684\u6BD4\u4F8B (\u9ED8\u8A8D\u6BD4\u4F8B\u70BA1)","the scale on Y axis":"Y \u8EF8\u4E0A\u7684\u6BD4\u4F8B","Objects with opacity":"\u5177\u6709\u4E0D\u900F\u660E\u5EA6\u7684\u7269\u4EF6","Action/condition/expression to change or check the opacity of an object (0-255).":"\u64CD\u4F5C/\u689D\u4EF6/\u8868\u9054\u5F0F\u4EE5\u6539\u8B8A\u6216\u6AA2\u67E5\u5C0D\u8C61\u7684\u4E0D\u900F\u660E\u5EA6\uFF080-255\uFF09\u3002","Resizable objects":"\u53EF\u8ABF\u6574\u5927\u5C0F\u7684\u7269\u4EF6","Change or compare the size (width/height) of an object which can be resized (i.e: most objects).":"\u6539\u8B8A\u6216\u6BD4\u8F03\u80FD\u5920\u8ABF\u6574\u5927\u5C0F\u7684\u7269\u9AD4\uFF08\u5373\u5927\u591A\u6578\u7269\u9AD4\uFF09\u7684\u5C3A\u5BF8\uFF08\u5BEC\u5EA6/\u9AD8\u5EA6\uFF09\u3002","Change the width of the object.":"\u66F4\u6539\u7269\u4EF6\u7684\u5BEC\u5EA6\u3002","Compare the width of the object.":"\u6BD4\u8F03\u7269\u4EF6\u7684\u5BEC\u5EA6\u3002","Change the height of the object.":"\u66F4\u6539\u7269\u4EF6\u7684\u9AD8\u5EA6\u3002","Compare the height of the object.":"\u6BD4\u8F03\u7269\u4EF6\u7684\u9AD8\u5EA6","Change the size of an object.":"\u66F4\u6539\u7269\u4EF6\u7684\u5927\u5C0F\u3002","Change the size of _PARAM0_: set to _PARAM2_ x _PARAM3_":"\u66F4\u6539 _PARAM0_ \u7684\u5927\u5C0F: \u8A2D\u5B9A\u70BA _PARAM2_ x _PARAM3_","Objects with effects":"\u5177\u6709\u7279\u6548\u7684\u7269\u4EF6","Actions/conditions to enable/disable and change parameters of visual effects applied on objects.":"\u555F\u7528/\u7981\u7528\u4E26\u66F4\u6539\u65BD\u52A0\u65BC\u7269\u9AD4\u7684\u8996\u89BA\u6548\u679C\u53C3\u6578\u7684\u64CD\u4F5C\u548C\u689D\u4EF6\u3002","Enable an object effect":"\u555F\u7528\u7269\u4EF6\u7279\u6548","Enable an effect on the object":"\u555F\u7528\u5C0D\u7269\u4EF6\u7684\u6548\u679C","Enable effect _PARAM2_ on _PARAM0_: _PARAM3_":"\u5728 _PARAM0_ \u4E0A\u555F\u7528\u6548\u679C_PARAM2_: _PARAM3_","Set _PARAM3_ to _PARAM4_ for effect _PARAM2_ of _PARAM0_":"\u5C07 _PARAM0_ \u7684\u6548\u679C _PARAM2_ \u8A2D\u5B9A\u70BA _PARAM3_ \u81F3 _PARAM4_","Enable _PARAM3_ for effect _PARAM2_ of _PARAM0_: _PARAM4_":"\u70BA _PARAM0_ \u7684\u6548\u679C _PARAM2_ \u555F\u7528 _PARAM3_: _PARAM4_","Effect is enabled":"\u6548\u679C\u5DF2\u555F\u7528","Check if the effect on an object is enabled.":"\u6AA2\u67E5\u662F\u5426\u555F\u7528\u5C0D\u7269\u4EF6\u7684\u6548\u679C\u3002","Effect _PARAM2_ of _PARAM0_ is enabled":"\u5DF2\u555F\u7528 _PARAM0_ \u7684\u6548\u679C _PARAM2_","Objects containing a text":"\u5305\u542B\u6587\u5B57\u7684\u7269\u4EF6","Allows an object to contain a text, usually shown on screen, that can be modified.":"Allows an object to contain a text, usually shown on screen, that can be modified.","Flippable objects":"\u53EF\u7FFB\u8F49\u7684\u7269\u4EF6","Actions/conditions for objects which can be flipped horizontally or vertically.":"\u53EF\u4EE5\u6C34\u5E73\u6216\u5782\u76F4\u7FFB\u8F49\u7684\u7269\u9AD4\u7684\u64CD\u4F5C/\u689D\u4EF6\u3002","Flip horizontally _PARAM0_: _PARAM2_":"\u6C34\u5E73\u7FFB\u8F49_PARAM0_: _PARAM2_","Flip vertically _PARAM0_: _PARAM2_":"\u5782\u76F4\u7FFB\u8F49_PARAM0_: _PARAM2_","Objects with animations":"\u5177\u6709\u52D5\u756B\u7684\u7269\u4EF6","Actions and conditions for objects having animations (sprite, 3D models...).":"\u91DD\u5C0D\u5177\u6709\u52D5\u756B\u7684\u7269\u9AD4\uFF08\u7CBE\u9748\u30013D\u6A21\u578B\u7B49\uFF09\u7684\u64CD\u4F5C\u548C\u689D\u4EF6\u3002","Actions and conditions for objects having animations (sprite, 3D models...)..":"\u91DD\u5C0D\u5177\u6709\u52D5\u756B\u7684\u7269\u9AD4\uFF08\u7CBE\u9748\u30013D\u6A21\u578B\u7B49\uFF09\u7684\u64CD\u4F5C\u548C\u689D\u4EF6\u3002","the animation played by the object using the animation number (from the animations list)":"\u7269\u4EF6\u4F7F\u7528\u52D5\u756B\u7DE8\u865F\u64AD\u653E\u7684\u52D5\u756B (\u4F86\u81EA\u52D5\u756B\u5217\u8868)","Animation index":"\u52D5\u756B\u7D22\u5F15","the animation played by the object using the name of the animation":"\u7269\u4EF6\u4F7F\u7528\u52D5\u756B\u540D\u7A31\u64AD\u653E\u7684\u52D5\u756B","Pause the animation of the object.":"\u66AB\u505C\u7269\u4EF6\u7684\u52D5\u756B\u3002","Resume the animation of the object.":"\u6062\u5FA9\u7269\u4EF6\u7684\u52D5\u756B\u3002","Animation elapsed time":"\u52D5\u756B\u7D93\u904E\u6642\u9593","the elapsed time from the beginning of the animation (in seconds)":"\u5F9E\u52D5\u756B\u958B\u59CB\u5DF2\u904E\u6642\u9593(\u79D2)","the animation elapsed time":"\u7576\u524D\u52D5\u756B\u5DF2\u904E\u6642\u9593","Elapsed time (in seconds)":"\u5DF2\u7528\u6642\u9593(\u79D2)","Animation duration":"\u52D5\u756B\u6301\u7E8C\u6642\u9593","Return the current animation duration (in seconds).":"\u8FD4\u56DE\u7576\u524D\u52D5\u756B\u6301\u7E8C\u6642\u9593(\u79D2)\u3002","Sounds and music":"\u8072\u97F3\u548C\u97F3\u6A02","GDevelop provides several conditions and actions to play audio files. They can be either long music or short sound effects.":"GDevelop\u63D0\u4F9B\u4E86\u5E7E\u500B\u64AD\u653E\u97F3\u983B\u6587\u4EF6\u7684\u689D\u4EF6\u548C\u64CD\u4F5C\u3002\u5B83\u5011\u53EF\u4EE5\u662F\u9577\u97F3\u6A02\u6216\u77ED\u97F3\u6548\u3002","Sounds on channels":"\u901A\u9053\u4E0A\u7684\u8072\u97F3","Play a sound on a channel":"\u5728\u901A\u9053\u91CC\u64AD\u653E\u8072\u97F3","Play a sound (small audio file) on a specific channel,\nso you'll be able to manipulate it.":"\u64AD\u653E\u8072\u97F3\uFF08\u5C0F\u7684\u97F3\u983B\u6587\u4EF6\uFF09\u5728\u4E00\u500B\u7279\u5B9A\u7684\u901A\u9053\uFF0C\n\u6240\u4EE5\u4F60\u53EF\u4EE5\u64CD\u7E31\u5B83\u3002","Play the sound _PARAM1_ on the channel _PARAM2_, vol.: _PARAM4_, loop: _PARAM3_":"\u5728\u901A\u9053 _PARAM2_ \u4E0A\u64AD\u653E\u8072\u97F3 _PARAM1_\uFF0C\u97F3\u91CF\uFF1A_PARAM4_\uFF0C\u5FAA\u74B0\uFF1A_PARAM3_","Audio file (or audio resource name)":"\u97F3\u983B\u6587\u4EF6\uFF08\u6216\u97F3\u983B\u8CC7\u6E90\u540D\uFF09","Channel identifier":"\u901A\u9053id","Repeat the sound":"\u91CD\u5FA9\u8072\u97F3","From 0 to 100, 100 by default.":"\u5F9E0\u5230100\uFF0C\u9ED8\u8A8D100\u3002","Pitch (speed)":"\u97F3\u8ABF(\u901F\u5EA6)","1 by default.":"\u9ED8\u8A8D\u503C\u70BA 1\u3002","Stop the sound of a channel":"\u505C\u6B62\u67D0\u901A\u9053\u7684\u8072\u97F3","Stop the sound on the specified channel.":"\u505C\u6B62\u6307\u5B9A\u901A\u9053\u91CC\u7684\u8072\u97F3","Stop the sound of channel _PARAM1_":"\u505C\u6B62\u901A\u9053 _PARAM1_ \u7684\u8072\u97F3","Pause the sound of a channel":"\u66AB\u505C\u67D0\u901A\u9053\u7684\u8072\u97F3","Pause the sound played on the specified channel.":"\u66AB\u505C\u6307\u5B9A\u901A\u9053\u7684\u8072\u97F3","Pause the sound of channel _PARAM1_":"\u66AB\u505C\u901A\u9053 _PARAM1_ \u7684\u8072\u97F3","Resume playing a sound on a channel":"\u7E7C\u7E8C\u5728\u901A\u9053\u4E0A\u64AD\u653E\u8072\u97F3","Resume playing a sound on a channel that was paused.":"\u5728\u5DF2\u66AB\u505C\u7684\u901A\u9053\u4E0A\u6062\u5FA9\u64AD\u653E\u8072\u97F3\u3002","Resume the sound of channel _PARAM1_":"\u6062\u5FA9 _PARAM1_ \u901A\u9053\u7684\u8072\u97F3","Play a music file on a channel":"\u5728\u983B\u9053\u4E0A\u64AD\u653E\u97F3\u6A02\u6587\u4EF6","Play a music file on a specific channel,\nso you'll be able to interact with it later.":"\u5728\u7279\u5B9A\u983B\u9053\u4E0A\u64AD\u653E\u97F3\u6A02\u6587\u4EF6\uFF0C\n\u60A8\u53EF\u4EE5\u7A0D\u540E\u8207\u4E4B\u4E92\u52D5\u3002","Play the music _PARAM1_ on channel _PARAM2_, vol.: _PARAM4_, loop: _PARAM3_":"\u5728\u983B\u9053 _PARAM2_\u4E0A\u64AD\u653E\u97F3\u6A02_PARAM1_\uFF0C\u5377: _PARAM4_, \u5FAA\u74B0: _PARAM3_","Music on channels":"\u901A\u9053\u4E0A\u7684\u97F3\u6A02","Stop the music on a channel":"\u505C\u6B62\u67D0\u901A\u9053\u7684\u97F3\u6A02","Stop the music on the specified channel":"\u505C\u6B62\u6307\u5B9A\u901A\u9053\u91CC\u7684\u97F3\u6A02","Stop the music of channel _PARAM1_":"\u505C\u6B62\u901A\u9053 _PARAM1_ \u7684\u97F3\u6A02","Pause the music of a channel":"\u66AB\u505C\u67D0\u901A\u9053\u7684\u97F3\u6A02","Pause the music on the specified channel.":"\u66AB\u505C\u6307\u5B9A\u901A\u9053\u91CC\u7684\u97F3\u6A02","Pause the music of channel _PARAM1_":"\u66AB\u505C\u901A\u9053 _PARAM1_ \u7684\u97F3\u6A02","Resume playing a music on a channel":"\u7E7C\u7E8C\u5728\u901A\u9053\u64AD\u653E\u97F3\u6A02","Resume playing a music on a channel that was paused.":"\u6062\u5FA9\u5728\u66AB\u505C\u7684\u901A\u9053\u4E0A\u64AD\u653E\u97F3\u6A02\u3002","Resume the music of channel _PARAM1_":"\u6062\u5FA9\u901A\u9053 _PARAM1_ \u7684\u97F3\u6A02","Volume of the sound on a channel":"\u67D0\u901A\u9053\u4E0A\u8072\u97F3\u7684\u97F3\u91CF","This action modifies the volume of the sound on the specified channel.":"\u6B64\u64CD\u4F5C\u66F4\u6539\u6307\u5B9A\u901A\u9053\u4E0A\u8072\u97F3\u7684\u97F3\u91CF\u3002","the volume of the sound on channel _PARAM1_":"\u8072\u9053_PARAM1_ \u4E0A\u8072\u97F3\u7684\u97F3\u91CF","Volume of the music on a channel":"\u901A\u9053\u91CC\u97F3\u6A02\u7684\u97F3\u91CF","This action modifies the volume of the music on the specified channel.":"\u6B64\u64CD\u4F5C\u66F4\u6539\u6307\u5B9A\u901A\u9053\u4E0A\u97F3\u6A02\u7684\u97F3\u91CF\u3002","the volume of the music on channel _PARAM1_":"\u983B\u9053_PARAM1_ \u4E0A\u97F3\u6A02\u7684\u97F3\u91CF","Game global volume":"\u904A\u6232\u5168\u5C40\u97F3\u91CF","This action modifies the global volume of the game.":"\u9019\u500B\u52D5\u4F5C\u4FEE\u6539\u904A\u6232\u7684\u5168\u5C40\u97F3\u91CF\u3002","the global sound level":"\u5168\u5C40\u8072\u97F3\u7D1A\u5225","Pitch of the sound of a channel":"\u901A\u9053\u91CC\u8072\u97F3\u7684\u97F3\u8ABF","This action modifies the pitch (speed) of the sound on a channel.":"\u9019\u500B\u52D5\u4F5C\u4FEE\u6539\u4E86\u8072\u97F3\u5728\u901A\u9053\u4E0A\u7684\u97F3\u9AD8(\u901F\u5EA6)\u3002","the pitch of the sound on channel _PARAM1_":"\u8072\u9053_PARAM1_ \u4E0A\u8072\u97F3\u7684\u97F3\u8ABF","Pitch (1 by default)":"\u97F3\u91CF(\u9ED8\u8A8D\u70BA1)","Pitch of the music on a channel":"\u901A\u9053\u91CC\u97F3\u6A02\u7684\u97F3\u8ABF","This action modifies the pitch of the music on the specified channel.":"\u6B64\u64CD\u4F5C\u66F4\u6539\u6307\u5B9A\u901A\u9053\u4E0A\u97F3\u6A02\u7684\u97F3\u91CF\u3002","the pitch of the music on channel _PARAM1_":"\u8072\u9053_PARAM1_ \u4E0A\u97F3\u6A02\u7684\u97F3\u8ABF","Playing offset of the sound on a channel":"\u901A\u9053\u4E0A\u8072\u97F3\u7684\u64AD\u653E\u4F4D\u7F6E","This action modifies the playing offset of the sound on a channel":"\u6B64\u64CD\u4F5C\u4FEE\u6539\u901A\u9053\u4E0A\u8072\u97F3\u7684\u64AD\u653E\u504F\u79FB\u91CF","the playing offset of the sound on channel _PARAM1_":"\u8072\u9053_PARAM1_ \u64AD\u653E\u8072\u97F3\u7684\u504F\u79FB\u91CF","Playing offset of the music on a channel":"\u901A\u9053\u4E0A\u97F3\u6A02\u7684\u64AD\u653E\u4F4D\u7F6E","This action modifies the playing offset of the music on the specified channel":"\u6B64\u64CD\u4F5C\u4FEE\u6539\u6307\u5B9A\u983B\u9053\u4E0A\u97F3\u6A02\u7684\u64AD\u653E\u504F\u79FB\u91CF\u3002","the playing offset of the music on channel _PARAM1_":"_PARAM1_ \u901A\u9053\u4E0A\u97F3\u6A02\u7684\u64AD\u653E\u504F\u79FB\u91CF","Play a sound":"\u64AD\u653E\u8072\u97F3","Play a sound.":"\u64AD\u653E\u8072\u97F3","Play the sound _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_":"\u64AD\u653E\u8072\u97F3 _PARAM1_, vol.: _PARAM3_, \u5FAA\u74B0: _PARAM2_","Play a music file":"\u64AD\u653E\u97F3\u6A02\u6587\u4EF6","Play a music file.":"\u64AD\u653E\u97F3\u6A02\u6587\u4EF6\u3002","Play the music _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_":"\u64AD\u653E\u97F3\u6A02 _PARAM1_, vol.: _PARAM3_, \u5FAA\u74B0: _PARAM2_","Preload a music file":"\u9810\u52A0\u8F09\u97F3\u6A02\u6587\u4EF6","Preload a music file in memory.":"\u5C07\u97F3\u6A02\u6587\u4EF6\u9810\u52A0\u8F09\u5230\u5167\u5B58\u4E2D","Preload the music file _PARAM1_":"\u9810\u52A0\u8F09\u97F3\u6A02\u6587\u4EF6 _PARAM1_","Preload a sound file":"\u9810\u52A0\u8F09\u8072\u97F3\u6587\u4EF6","Preload a sound file in memory.":"\u5C07\u8072\u97F3\u6587\u4EF6\u9810\u52A0\u8F09\u5230\u5167\u5B58\u4E2D","Preload the sound file _PARAM1_":"\u9810\u52A0\u8F09\u8072\u97F3\u6587\u4EF6 _PARAM1_","Sound file (or sound resource name)":"\u8072\u97F3\u6587\u4EF6 (\u6216\u8072\u97F3\u8CC7\u6E90\u540D\u7A31)","Unload a music file":"\u5378\u8F09\u97F3\u6A02\u6587\u4EF6","Unload a music file from memory. Unloading a music file will cause any music playing it to stop.":"\u5F9E\u5167\u5B58\u4E2D\u5378\u8F09\u97F3\u6A02\u6587\u4EF6\u3002\u5378\u8F09\u97F3\u6A02\u6587\u4EF6\u5C07\u5C0E\u81F4\u505C\u6B62\u64AD\u653E\u4EFB\u4F55\u97F3\u6A02\u3002","Unload the music file _PARAM1_":"\u5378\u8F09\u97F3\u6A02\u6587\u4EF6 _PARAM1_","Unload a sound file":"\u5378\u8F09\u8072\u97F3\u6587\u4EF6","Unload a sound file from memory. Unloading a sound file will cause any sounds playing it to stop.":"\u5F9E\u5167\u5B58\u4E2D\u5378\u8F09\u8072\u97F3\u6587\u4EF6\u3002\u5378\u8F09\u8072\u97F3\u6587\u4EF6\u6703\u5C0E\u81F4\u64AD\u653E\u8072\u97F3\u7684\u8072\u97F3\u505C\u6B62\u3002","Unload the sound file _PARAM1_":"\u5378\u8F09\u8072\u97F3\u6587\u4EF6 _PARAM1_","Unload all audio":"\u5378\u8F09\u6240\u6709\u97F3\u983B","Unload all the audio in memory. This will cause every sound and music of the game to stop.":"\u5378\u8F09\u5167\u5B58\u4E2D\u7684\u6240\u6709\u97F3\u983B\u3002\u9019\u5C07\u5C0E\u81F4\u904A\u6232\u7684\u6240\u6709\u8072\u97F3\u548C\u97F3\u6A02\u505C\u6B62\u3002","Unload all audio files":"\u5378\u8F09\u6240\u6709\u97F3\u983B\u6587\u4EF6","Fade the volume of a sound played on a channel.":"\u8870\u6E1B\u5728\u983B\u9053\u4E0A\u64AD\u653E\u7684\u8072\u97F3\u7684\u97F3\u91CF\u3002","Fade the volume of a sound played on a channel to the specified volume within the specified duration.":"\u5728\u6307\u5B9A\u7684\u6301\u7E8C\u6642\u9593\u5167\uFF0C\u5C07\u983B\u9053\u4E0A\u64AD\u653E\u7684\u8072\u97F3\u97F3\u91CF\u8870\u6E1B\u5230\u6307\u5B9A\u7684\u97F3\u91CF\u3002","Fade the sound on channel _PARAM1_ to volume _PARAM2_ within _PARAM3_ seconds":"\u5728_PARAM3_\u79D2\u5167\u5C07\u8072\u9053_PARAM1_ \u8870\u6E1B\u5230\u97F3\u91CF _PARAM2_","Final volume (0-100)":"\u6700\u7D42\u97F3\u91CF (0-100)","Fading time in seconds":"\u4EE5\u79D2\u70BA\u55AE\u4F4D\u7684\u8870\u6E1B\u6642\u9593","Fade the volume of a music played on a channel.":"\u6DE1\u5165\u983B\u9053\u64AD\u653E\u7684\u97F3\u6A02\u97F3\u91CF\u3002","Fade the volume of a music played on a channel to the specified volume within the specified duration.":"\u5728\u6307\u5B9A\u7684\u6301\u7E8C\u6642\u9593\u5167\uFF0C\u5C07\u983B\u9053\u4E0A\u64AD\u653E\u7684\u97F3\u6A02\u97F3\u91CF\u8870\u6E1B\u5230\u6307\u5B9A\u7684\u97F3\u91CF\u3002","Fade the music on channel _PARAM1_ to volume _PARAM2_ within _PARAM3_ seconds":"\u5728 _PARAM1_ \u983B\u9053\u4E0A\u6DE1\u5165\u97F3\u91CF_PARAM2_ \u5728 _PARAM3_ \u79D2\u5167","A music file is being played":"\u6B63\u5728\u64AD\u653E\u4E00\u500B\u97F3\u6A02\u6587\u4EF6\u3002","Test if the music on a channel is being played":"\u6AA2\u6E2C\u67D0\u901A\u9053\u4E0A\u7684\u97F3\u6A02\u662F\u5426\u6B63\u5728\u64AD\u653E","Music on channel _PARAM1_ is being played":"\u901A\u9053 _PARAM1_ \u91CC\u7684\u97F3\u6A02\u6B63\u5728\u64AD\u653E","A music file is paused":"\u97F3\u6A02\u6587\u4EF6\u66AB\u505C","Test if the music on the specified channel is paused.":"\u6AA2\u6E2C\u6307\u5B9A\u901A\u9053\u91CC\u7684\u97F3\u6A02\u662F\u5426\u66AB\u505C","Music on channel _PARAM1_ is paused":"\u901A\u9053 _PARAM1_ \u91CC\u7684\u97F3\u6A02\u5DF2\u66AB\u505C","A music file is stopped":"\u97F3\u6A02\u6587\u4EF6\u505C\u6B62","Test if the music on the specified channel is stopped.":"\u6AA2\u6E2C\u6307\u5B9A\u901A\u9053\u91CC\u7684\u97F3\u6A02\u662F\u5426\u505C\u6B62","Music on channel _PARAM1_ is stopped":"\u901A\u9053 _PARAM1_ \u91CC\u7684\u97F3\u6A02\u5DF2\u505C\u6B62","A sound is being played":"\u8072\u97F3\u6B63\u5728\u64AD\u653E","Test if the sound on a channel is being played.":"\u6AA2\u6E2C\u67D0\u901A\u9053\u91CC\u7684\u8072\u97F3\u662F\u5426\u6B63\u5728\u64AD\u653E","Sound on channel _PARAM1_ is being played":"\u901A\u9053 _PARAM1_ \u91CC\u7684\u8072\u97F3\u6B63\u5728\u64AD\u653E","A sound is paused":"\u8072\u97F3\u662F\u66AB\u505C\u7684","Test if the sound on the specified channel is paused.":"\u6AA2\u6E2C\u67D0\u901A\u9053\u91CC\u7684\u8072\u97F3\u662F\u5426\u5DF2\u66AB\u505C","Sound on channel _PARAM1_ is paused":"\u901A\u9053 _PARAM1_ \u91CC\u7684\u8072\u97F3\u5DF2\u66AB\u505C","A sound is stopped":"\u8072\u97F3\u5DF2\u505C\u6B62","Test if the sound on the specified channel is stopped.":"\u6AA2\u6E2C\u67D0\u901A\u9053\u91CC\u7684\u8072\u97F3\u662F\u5426\u5DF2\u505C\u6B62","Sound on channel _PARAM1_ is stopped":"\u901A\u9053 _PARAM1_ \u91CC\u7684\u8072\u97F3\u5DF2\u505C\u6B62","Test the volume of the sound on the specified channel.":"\u6E2C\u8A66\u6307\u5B9A\u901A\u9053\u4E0A\u8072\u97F3\u7684\u97F3\u91CF\u3002","Test the volume of the music on a specified channel. The volume is between 0 and 100.":"\u5728\u6307\u5B9A\u7684\u983B\u9053\u4E0A\u6E2C\u8A66\u97F3\u6A02\u7684\u97F3\u91CF\u3002\u97F3\u91CF\u57280\u5230100\u4E4B\u9593\u3002","Global volume":"\u5168\u5C40\u97F3\u91CF","Test the global sound level. The volume is between 0 and 100.":"\u6AA2\u6E2C\u5168\u5C40\u8072\u97F3\u7D1A\u5225\uFF0C\u503C\u57280\u5230100\u4E4B\u9593\u3002","the global game volume":"\u5168\u5C40\u904A\u6232\u97F3\u91CF","Test the pitch of the sound on the specified channel. 1 is the default pitch.":"\u6E2C\u8A66\u6307\u5B9A\u901A\u9053\u4E0A\u8072\u97F3\u7684\u97F3\u9AD8\u3002 1\u662F\u9ED8\u8A8D\u97F3\u9AD8\u3002","Pitch to compare to (1 by default)":"\u8981\u6BD4\u8F03\u7684\u97F3\u9AD8(\u9ED8\u8A8D\u70BA1)","Test the pitch (speed) of the music on a specified channel.":"\u6E2C\u8A66\u6307\u5B9A\u901A\u9053\u4E0A\u97F3\u6A02\u7684\u97F3\u8ABF(\u901F\u5EA6)\u3002","Test the playing offset of the sound on the specified channel.":"\u6E2C\u8A66\u8072\u97F3\u5728\u6307\u5B9A\u983B\u9053\u4E0A\u7684\u64AD\u653E\u504F\u79FB\u91CF\u3002","Position to compare to (in seconds)":"\u8981\u6BD4\u8F03\u7684\u4F4D\u7F6E(\u4EE5\u79D2\u70BA\u55AE\u4F4D)","Test the playing offset of the music on the specified channel.":"\u6E2C\u8A66\u6307\u5B9A\u901A\u9053\u4E0A\u97F3\u6A02\u7684\u64AD\u653E\u504F\u79FB\u91CF\u3002","Sound playing offset":"\u8072\u97F3\u64AD\u653E\u4F4D\u7F6E","Sounds":"\u8072\u97F3","Music playing offset":"\u97F3\u6A02\u64AD\u653E\u4F4D\u7F6E","Sound volume":"\u8072\u97F3\u7684\u97F3\u91CF","Music volume":"\u97F3\u6A02\u97F3\u91CF","Sound's pitch":"\u8072\u97F3\u7684\u97F3\u8ABF","Music's pitch":"\u97F3\u6A02\u7684\u97F3\u8ABF","Global volume value":"\u5168\u5C40\u97F3\u91CF","Sound level":"\u97F3\u91CF ","Create objects from an external layout":"\u5F9E\u5916\u90E8\u5716\u5C64\u5275\u5EFA\u7269\u4EF6","Create objects from an external layout.":"\u5F9E\u5916\u90E8\u5716\u5C64\u5275\u5EFA\u7269\u4EF6\u3002","Create objects from the external layout named _PARAM1_ at position _PARAM2_;_PARAM3_;_PARAM4_":"\u5F9E\u5916\u90E8\u4F48\u5C40 _PARAM1_ \u5728\u4F4D\u7F6E _PARAM2_;_PARAM3_;_PARAM4_ \u5275\u5EFA\u5C0D\u8C61","X position of the origin":"\u539F\u9EDE\u7684X\u5750\u6A19","Y position of the origin":"\u539F\u9EDE\u7684Y\u5750\u6A19","Z position of the origin":"\u539F\u9EDE\u7684 Z \u4F4D\u7F6E","Conditions to check keys pressed on a keyboard. Note that this does not work with on-screen keyboard on touch devices: use instead mouse/touch conditions when making a game for mobile/touchscreen devices or when making a new game from scratch.":"\u6AA2\u67E5\u9375\u76E4\u4E0A\u6309\u4E0B\u7684\u9375\u3002\u8ACB\u6CE8\u610F\uFF0C\u9019\u4E0D\u9069\u7528\u65BC\u89F8\u6478\u8A2D\u5099\u4E0A\u7684\u87A2\u5E55\u9375\u76E4\uFF1A\u5728\u70BA\u884C\u52D5/\u89F8\u6478\u87A2\u5E55\u8A2D\u5099\u88FD\u4F5C\u904A\u6232\u6642\uFF0C\u8ACB\u6539\u7528\u8207\u6ED1\u9F20/\u89F8\u6478\u76F8\u95DC\u7684\u689D\u4EF6\u6216\u5F9E\u982D\u958B\u59CB\u88FD\u4F5C\u904A\u6232\u3002","Key pressed":"\u9375\u6309\u4E0B","Check if a key is pressed":"\u6AA2\u67E5\u662F\u5426\u6309\u4E0B\u4E86\u4E00\u500B\u9375","_PARAM1_ key is pressed":"\u9375\u76E4 _PARAM1_ \u9375\u6309\u4E0B","Key to check":"\u8981\u6AA2\u67E5\u7684\u9375","Key released":"\u9375\u5F48\u8D77","Check if a key was just released":"\u6AA2\u67E5\u9375\u662F\u5426\u525B\u525B\u88AB\u91CB\u653E","_PARAM1_ key is released":"\u9375\u76E4 _PARAM1_ \u9375\u5F48\u8D77","Check if a key is pressed. This stays true as long as the key is held down. To check if a key was pressed during the frame, use \"Key just pressed\" instead.":"\u6AA2\u67E5\u9375\u662F\u5426\u6309\u4E0B\u3002\u53EA\u8981\u6309\u4F4F\u9375\uFF0C\u9019\u500B\u6AA2\u67E5\u5C31\u70BA\u771F\u3002\u8981\u6AA2\u67E5\u5728\u6846\u67B6\u671F\u9593\u662F\u5426\u6309\u4E0B\u4E86\u9375\uFF0C\u8ACB\u4F7F\u7528\u300C\u9375\u525B\u525B\u6309\u4E0B\u300D\u53D6\u800C\u4EE3\u4E4B\u3002","Key just pressed":"\u9375\u525B\u525B\u6309\u4E0B","Check if a key was just pressed.":"\u6AA2\u67E5\u9375\u662F\u5426\u525B\u525B\u6309\u4E0B\u3002","_PARAM1_ key was just pressed":"_PARAM1_ \u9375\u525B\u525B\u6309\u4E0B","Check if a key was just released.":"\u6AA2\u67E5\u9375\u662F\u5426\u525B\u525B\u88AB\u91CB\u653E\u3002","Any key pressed":"\u4EFB\u610F\u9375\u6309\u4E0B","Check if any key is pressed":"\u6AA2\u67E5\u662F\u5426\u6309\u4E0B\u4E86\u4EFB\u4F55\u9375","Any key is pressed":"\u4EFB\u610F\u9375\u6309\u4E0B","Any key released":"\u4EFB\u610F\u9375\u91CB\u653E","Check if any key is released":"\u6AA2\u67E5\u662F\u5426\u6709\u4EFB\u4F55\u9375\u88AB\u91CB\u653E","Any key is released":"\u91CB\u653E\u4EFB\u610F\u9375","Last pressed key":"\u6700\u540E\u6309\u4E0B\u7684\u9375","Get the name of the latest key pressed on the keyboard":"\u7372\u53D6\u9375\u76E4\u4E0A\u6309\u4E0B\u7684\u6700\u65B0\u9375\u7684\u540D\u7A31","Mathematical tools":"\u6578\u5B78\u5DE5\u5177","Random integer":"\u96A8\u6A5F\u6574\u6578","Maximum value":"\u6700\u5927\u503C","Random integer in range":"\u8303\u570D\u5167\u7684\u96A8\u6A5F\u6574\u6578","Minimum value":"\u6700\u5C0F\u503C","Random float":"\u96A8\u6A5F\u6D6E\u9EDE\u6578","Random float in range":"\u96A8\u6A5F\u6D6E\u9EDE\u6578","Random value in steps":"\u5206\u6B65\u96A8\u6A5F\u503C","Step":"\u6B65\u9577","Normalize a value between `min` and `max` to a value between 0 and 1.":"\u5C07 `min` \u548C `max` \u4E4B\u9593\u7684\u503C\u6B63\u5E38\u5316\u70BA 0 \u548C 1 \u4E4B\u9593\u3002","Remap a value between 0 and 1.":"\u91CD\u6620\u5C04\u503C\u4ECB\u4E8E 0 \u548C 1 \u4E4B\u9593\u7684\u503C\u3002","Min":"\u6700\u5C0F\u503C","Max":"\u6700\u5927\u503C","Clamp (restrict a value to a given range)":"Clamp (\u9650\u5B9A\u503C\u70BA\u7D66\u5B9A\u8303\u570D)","Restrict a value to a given range":"\u5C07\u503C\u9650\u5236\u5728\u7D66\u5B9A\u8303\u570D\u5167","Difference between two angles":"\u5169\u500B\u89D2\u4E4B\u9593\u7684\u5DEE\u7570","First angle, in degrees":"\u7B2C\u4E00\u500B\u89D2\u5EA6\uFF0C\u4EE5\u5EA6\u70BA\u55AE\u4F4D","Second angle, in degrees":"\u7B2C\u4E8C\u500B\u89D2\u5EA6\uFF0C\u4EE5\u5EA6\u70BA\u55AE\u4F4D","Angle between two positions":"\u5169\u500B\u4F4D\u7F6E\u4E4B\u9593\u7684\u89D2\u5EA6","Compute the angle between two positions (in degrees).":"\u8A08\u7B97\u5169\u500B\u4F4D\u7F6E\u4E4B\u9593\u7684\u89D2\u5EA6(\u4EE5\u5EA6\u70BA\u55AE\u4F4D)\u3002","First point X position":"\u7B2C\u4E00\u9EDEX\u4F4D\u7F6E","First point Y position":"\u7B2C\u4E00\u9EDE Y \u4F4D\u7F6E","Second point X position":"\u7B2C\u4E8C\u9EDEX\u4F4D\u7F6E","Second point Y position":"\u7B2C\u4E8C\u9EDEY\u4F4D\u7F6E","Distance between two positions":"\u5169\u500B\u4F4D\u7F6E\u4E4B\u9593\u7684\u8DDD\u96E2","Compute the distance between two positions.":"\u8A08\u7B97\u5169\u500B\u4F4D\u7F6E\u4E4B\u9593\u7684\u8DDD\u96E2\u3002","Modulo":"\u6C42\u6A21","Compute \"x mod y\". GDevelop does NOT support the % operator. Use this mod(x, y) function instead.":"\u8A08\u7B97 \"x mod y\"\u3002GDevelop \u4E0D\u652F\u6301 % \u904B\u7B97\u7B26\u3002\u8ACB\u4F7F\u7528 mod(x, y) \u51FD\u6578\u4EE3\u66FF\u3002","x (as in x mod y)":"x (x mod y)","y (as in x mod y)":"y (x mod y)","Minimum of two numbers":"\u5169\u500B\u6578\u4E2D\u53D6\u6700\u5C0F","First expression":"\u9996\u500B\u8868\u9054\u5F0F","Second expression":"\u7B2C\u4E8C\u500B\u8868\u9054\u5F0F","Maximum of two numbers":"\u5169\u500B\u6578\u4E2D\u53D6\u6700\u5927","Absolute value":"\u7D55\u5C0D\u503C","Return the non-negative value by removing the sign. The absolute value of -8 is 8.":"\u901A\u904E\u522A\u9664\u7B26\u865F\u8FD4\u56DE\u975E\u8CA0\u503C\u3002-8 \u7684\u7D55\u5C0D\u503C\u662F 8\u3002","Arccosine":"\u53CD\u4F59\u5F26","Arccosine, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"\u53CD\u4F59\u5F26\uFF0C\u8FD4\u56DE\u89D2\u5EA6(\u4EE5\u5F27\u5EA6\u70BA\u55AE\u4F4D)\u3002`ToDeg` \u5141\u8A31\u5C07\u5176\u8F49\u63DB\u70BA\u5EA6\u3002","Hyperbolic arccosine":"\u96D9\u66F2\u7DDA\u4F59\u5F26","Arcsine":"\u53CD\u6B63\u5F26","Arcsine, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"\u53CD\u6B63\u5F26\uFF0C\u8FD4\u56DE\u89D2\u5EA6(\u4EE5\u5F27\u5EA6\u70BA\u55AE\u4F4D)\u3002`ToDeg` \u5141\u8A31\u5C07\u5176\u8F49\u63DB\u70BA\u5EA6\u3002","Arctangent":"\u53CD\u6B63\u5207","Arctangent, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"\u53CD\u6B63\u5207\uFF0C\u8FD4\u56DE\u4E00\u500B\u89D2\u5EA6(\u4EE5\u5F27\u5EA6\u70BA\u55AE\u4F4D)\u3002`ToDeg` \u5141\u8A31\u5C07\u5176\u8F49\u63DB\u70BA\u5EA6\u3002","2 argument arctangent":"2\u500B\u53C3\u6578\u53CD\u6B63\u5207","2 argument arctangent (atan2)":"2\u500B\u53C3\u6578\u53CD\u6B63\u5207(atan2)","Hyperbolic arctangent":"\u96D9\u66F2\u7DDA\u53CD\u6B63\u5207","Cube root":"\u7ACB\u65B9\u6839","Ceil (round up)":"Ceil (\u5411\u4E0A\u53D6\u6574)","Round number up to an integer":"\u5411\u4E0A\u53D6\u6574","Ceil (round up) to a decimal point":"Ceil (\u5411\u4E0A) \u5230\u5C0F\u6578\u9EDE","Round number up to the Nth decimal place":"\u5C07\u6578\u5B57\u5411\u4E0A\u81F3\u5C0F\u6578\u9EDE\u540E\u7B2Cn\u4F4D","Floor (round down)":"Floor (\u5411\u4E0B\u53D6\u6574)","Round number down to an integer":"\u5411\u4E0B\u53D6\u6574","Floor (round down) to a decimal point":"\u5730\u677F\uFF08\u671D\u4E0B\uFF09\u5230\u5C0F\u6578\u9EDE","Round number down to the Nth decimal place":"\u5C07\u6578\u5B57\u5411\u4E0B\u81F3\u5C0F\u6578\u9EDE\u540E\u7B2Cn\u4F4D","Cosine":"\u4F59\u5F26","Cosine of an angle (in radian). If you want to use degrees, use`ToRad`: `sin(ToRad(45))`.":"\u89D2\u5EA6\u7684\u4F59\u5F26(\u4EE5\u5F27\u5EA6\u70BA\u55AE\u4F4D)\u3002\u5982\u679C\u8981\u4F7F\u7528\u5EA6\uFF0C\u8ACB\u4F7F\u7528`ToRad`\uFF1A`sin(ToRad(45))`\u3002","Hyperbolic cosine":"\u96D9\u66F2\u7DDA\u4F59\u5F26","Cotangent":"\u4F59\u5207","Cotangent of a number":"\u5C0D\u4E00\u500B\u6578\u6C42\u4F59\u5207","Cosecant":"\u4F59\u5272","Cosecant of a number":"\u5C0D\u4E00\u500B\u6578\u6C42\u4F59\u5272","Round":"\u53D6\u6574","Round a number":"\u5C0D\u4E00\u500B\u6578\u53D6\u6574","Round to a decimal point":"\u56DB\u820D\u4E94\u5165\u5230\u5C0F\u6578\u9EDE","Round a number to the Nth decimal place":"\u5C07\u6578\u5B57\u56DB\u820D\u4E94\u5165\u5230\u5C0F\u6578\u9EDE\u540E\u7B2Cn\u4F4D","Number to Round":"\u9700\u8981\u56DB\u6368\u4E94\u5165\u7684\u6578\u5B57","Decimal Places":"\u5C0F\u6578\u4F4D\u6578","Exponential":"\u6307\u6578","Exponential of a number":"\u4E00\u500B\u6578\u7684\u6307\u6578","Logarithm":"\u5C0D\u6578","Base-2 logarithm":"\u4EE52\u70BA\u5E95\u7684\u5C0D\u6578","Base 2 Logarithm":"\u57FA\u65782\u5C0D\u6578","Base-10 logarithm":"\u4EE510\u70BA\u5E95\u7684\u5C0D\u6578","Nth root":"\u7B2CN\u6839","Nth root of a number":"\u6578\u5B57\u7684\u7B2CN\u500B\u6839","N":"N","Power":"\u5F37\u5EA6\uFF1A","Raise a number to power n":"\u63D0\u9AD8\u4E00\u500B\u6578\u5B57\u6B0A\u529Bn","The exponent (n in x^n)":"\u6307\u6578\uFF08n \u5728 x^n\u4E2D\uFF09","Secant":"\u6B63\u5272","Sign of a number":"\u5C0D\u4E00\u500B\u6578\u6C42\u4F59\u5F26","Return the sign of a number (1,-1 or 0)":"\u8FD4\u56DE\u6578\u5B57\u7684\u7B26\u865F\uFF081, -1\u62160\uFF09","Sine":"\u6B63\u5F26","Sine of an angle (in radian). If you want to use degrees, use`ToRad`: `sin(ToRad(45))`.":"\u89D2\u5EA6\u7684\u6B63\u5F26(\u4EE5\u5F27\u5EA6\u70BA\u55AE\u4F4D)\u3002\u5982\u679C\u8981\u4F7F\u7528\u5EA6\uFF0C\u8ACB\u4F7F\u7528`ToRad`\uFF1A`sin(ToRad(45))`\u3002","Hyperbolic sine":"\u96D9\u66F2\u6B63\u5F26","Square root":"\u5E73\u65B9\u6839","Square root of a number":"\u6578\u5B57\u7684\u5E73\u65B9\u6839","Tangent":"\u5207\u7DDA","Tangent of an angle (in radian). If you want to use degrees, use`ToRad`: `tan(ToRad(45))`.":"\u89D2\u5EA6\u7684\u5207\u7DDA(\u4EE5\u5F27\u5EA6\u70BA\u55AE\u4F4D)\u3002\u5982\u679C\u8981\u4F7F\u7528\u5EA6\uFF0C\u8ACB\u4F7F\u7528`ToRad`\uFF1A`tan(ToRad(45))`\u3002","Hyperbolic tangent":"\u96D9\u66F2\u6B63\u5207","Truncation":"\u622A\u65B7","Truncate a number":"\u622A\u65B7\u4E00\u500B\u6578\u5B57","Lerp (Linear interpolation)":"Lerp\uFF08\u7DDA\u6027\u63D2\u503C\uFF09","Linearly interpolate a to b by x":"\u7528 X \u7DDA\u6027\u63D2\u5165a\u5230b","a (in a+(b-a)*x)":"a (\u5728 a+(b-a)*x \u4E2D)","b (in a+(b-a)*x)":"b (\u5728 a+(b-a)*x \u4E2D)","x (in a+(b-a)*x)":"x (\u5728 a+(b-a)*x \u4E2D)","X position from angle and distance":"\u6307\u5B9A\u89D2\u5EA6\u548C\u8DDD\u96E2\u7684 X \u4F4D\u7F6E","Compute the X position when given an angle and distance relative to the origin (0;0). This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"\u7576\u7D66\u5B9A\u4E00\u500B\u76F8\u5C0D\u65BC\u539F\u9EDE(0;0)\u7684\u89D2\u5EA6\u548C\u8DDD\u96E2\u6642\uFF0C\u8A08\u7B97X\u4F4D\u7F6E\u3002\u9019\u4E5F\u88AB\u7A31\u70BA\u5F97\u5230\u4E00\u500B2D\u5411\u91CF\u7684\u7B1B\u5361\u723E\u5750\u6A19\uFF0C\u4F7F\u7528\u6975\u5750\u6A19\u3002","Y position from angle and distance":"\u6307\u5B9A\u89D2\u5EA6\u548C\u8DDD\u96E2\u7684 Y \u4F4D\u7F6E","Compute the Y position when given an angle and distance relative to the origin (0;0). This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"\u7576\u7D66\u5B9A\u4E00\u500B\u76F8\u5C0D\u65BC\u539F\u9EDE(0;0)\u7684\u89D2\u5EA6\u548C\u8DDD\u96E2\u6642\uFF0C\u8A08\u7B97Y\u4F4D\u7F6E\u3002\u9019\u4E5F\u88AB\u7A31\u70BA\u5F97\u5230\u4E00\u500B2D\u5411\u91CF\u7684\u7B1B\u5361\u723E\u5750\u6A19\uFF0C\u4F7F\u7528\u6975\u5750\u6A19\u3002","Number Pi (3.1415...)":"\u6578\u5B57 Pi (3.1415...)","The number Pi (3.1415...)":"\u6578\u5B57 Pi (3.1415...)","Lerp (Linear interpolation) between two angles":"\u5169\u500B\u89D2\u5EA6\u4E4B\u9593\u7684Lerp (\u7DDA\u6027\u63D2\u503C)","Linearly interpolates between two angles (in degrees) by taking the shortest direction around the circle.":"\u901A\u904E\u53D6\u570D\u7E5E\u5713\u7684\u6700\u77ED\u65B9\u5411\u5728\u5169\u500B\u89D2\u5EA6(\u4EE5\u5EA6\u70BA\u55AE\u4F4D)\u4E4B\u9593\u9032\u884C\u7DDA\u6027\u63D2\u503C\u3002","Starting angle, in degrees":"\u8D77\u59CB\u89D2\u5EA6\uFF08\u5EA6\uFF09","Destination angle, in degrees":"\u76EE\u6A19\u89D2\u5EA6\uFF08\u5EA6\uFF09","Interpolation value between 0 and 1.":"\u4ECB\u4E8E 0 \u548C 1 \u4E4B\u9593\u7684\u63D2\u503C\u3002","Asynchronous functions":"\u7570\u6B65\u51FD\u6578","Functions that defer the execution of the events after it.":"\u5EF6\u9072\u4E8B\u4EF6\u4E4B\u540E\u57F7\u884C\u7684\u51FD\u6578\u3002","Async event":"\u7570\u6B65\u4E8B\u4EF6","Internal event for asynchronous actions":"\u7570\u6B65\u52D5\u4F5C\u7684\u5167\u90E8\u4E8B\u4EF6","End asynchronous function":"\u7D50\u675F\u7570\u6B65\u51FD\u6578","Mark an asynchronous function as finished. This will allow the actions and subevents following it to be run.":"\u5C07\u7570\u6B65\u51FD\u6578\u6A19\u8A18\u70BA\u5DF2\u5B8C\u6210\u3002\u9019\u5C07\u5141\u8A31\u904B\u884C\u5176\u540E\u7684\u64CD\u4F5C\u548C\u5B50\u4E8B\u4EF6\u3002","Mouse and touch":"\u9F20\u6A19\u8207\u89F8\u6478","Multitouch":"\u591A\u9EDE\u89F8\u63A7","The mouse wheel is scrolling up":"\u9F20\u6A19\u6EFE\u8F2A\u5411\u4E0A\u6EFE\u52D5","Check if the mouse wheel is scrolling up. Use MouseWheelDelta expression if you want to know the amount that was scrolled.":"\u6AA2\u67E5\u9F20\u6A19\u6EFE\u8F2A\u662F\u5426\u5411\u4E0A\u6EFE\u52D5\u3002\u5982\u679C\u60A8\u60F3\u77E5\u9053\u6EFE\u52D5\u91CF\uFF0C\u8ACB\u4F7F\u7528MouseWheelDelta\u8868\u9054\u5F0F\u3002","The mouse wheel is scrolling down":"\u9F20\u6A19\u6EFE\u8F2A\u5411\u4E0B\u6EFE\u52D5","Check if the mouse wheel is scrolling down. Use MouseWheelDelta expression if you want to know the amount that was scrolled.":"\u6AA2\u67E5\u9F20\u6A19\u6EFE\u8F2A\u662F\u5426\u5411\u4E0B\u6EFE\u52D5\u3002\u5982\u679C\u60A8\u60F3\u77E5\u9053\u6EFE\u52D5\u91CF\uFF0C\u8ACB\u4F7F\u7528MouseWheelDelta\u8868\u9054\u5F0F\u3002","De/activate moving the mouse cursor with touches":"\u901A\u904E\u89F8\u6478\u79FB\u52D5\u9F20\u6A19\u5149\u6A19","When activated, any touch made on a touchscreen will also move the mouse cursor. When deactivated, mouse and touch positions will be completely independent.\nBy default, this is activated so that you can simply use the mouse conditions to also support touchscreens. If you want to have multitouch and differentiate mouse movement and touches, just deactivate it with this action.":"\u6FC0\u6D3B\u6642\uFF0C\u89F8\u6478\u5C4F\u4E0A\u7684\u4EFB\u4F55\u89F8\u6478\u4E5F\u6703\u79FB\u52D5\u9F20\u6A19\u5149\u6A19\u3002 \u53D6\u6D88\u6FC0\u6D3B\u6642\uFF0C\u9F20\u6A19\u548C\u89F8\u6478\u4F4D\u7F6E\u5C07\u5B8C\u5168\u7368\u7ACB\u3002\n\u9ED8\u8A8D\u60C5\u6CC1\u4E0B\uFF0C\u6B64\u529F\u80FD\u88AB\u6FC0\u6D3B\uFF0C\u4EE5\u4FBF\u60A8\u53EF\u4EE5\u7C21\u55AE\u5730\u4F7F\u7528\u9F20\u6A19\u689D\u4EF6\u4F86\u652F\u6301\u89F8\u6478\u5C4F\u3002 \u5982\u679C\u60A8\u60F3\u8981\u591A\u9EDE\u89F8\u63A7\u5E76\u5340\u5206\u9F20\u6A19\u79FB\u52D5\u5E76\u89F8\u6478\uFF0C\u8ACB\u4F7F\u7528\u6B64\u64CD\u4F5C\u5C07\u5176\u505C\u7528\u3002","Move mouse cursor when touching screen: _PARAM1_":"\u89F8\u6478\u5C4F\u6642\u79FB\u52D5\u9F20\u6A19\u5149\u6A19\uFF1A_PARAM1_","Activate (yes by default when game is launched)":"\u6FC0\u6D3B\uFF08\u904A\u6232\u555F\u52D5\u6642\u662F\u9ED8\u8A8D\uFF09","Center cursor horizontally":"\u6C34\u5E73\u5C45\u4E2D\u5149\u6A19","Put the cursor in the middle of the screen horizontally.":"\u6C34\u5E73\u5C45\u4E2D\u5149\u6A19","Center cursor vertically":"\u5782\u76F4\u5C45\u4E2D\u5149\u6A19","Put the cursor in the middle of the screen vertically.":"\u5782\u76F4\u5C45\u4E2D\u5149\u6A19","Hide the cursor":"\u96B1\u85CF\u9F20\u6A19","Hide the cursor.":"\u96B1\u85CF\u9F20\u6A19\u3002","Show the cursor":"\u986F\u793A\u5149\u6A19","Show the cursor.":"\u986F\u793A\u5149\u6A19.","Position the cursor of the mouse":"\u9F20\u6A19\u5149\u6A19\u4F4D\u7F6E","Position the cursor at the given coordinates.":"\u5149\u6A19\u4F4D\u7F6E\u5728\u6307\u5B9A\u4F4D\u7F6E","Position cursor at _PARAM1_;_PARAM2_":"\u5149\u6A19\u4F4D\u7F6E\u5728 _PARAM1_;_PARAM2_","Center the cursor":"\u5C45\u4E2D\u5149\u6A19","Center the cursor on the screen.":"\u5728\u5C4F\u5E55\u91CC\u5C45\u4E2D\u5149\u6A19","Cursor X position":"\u5149\u6A19X\u5750\u6A19","the X position of the cursor or of a touch":"\u5149\u6A19\u6216\u89F8\u6478\u7684 X \u4F4D\u7F6E","the cursor (or touch) X position":"\u5149\u6A19(\u6216\u89F8\u6478) X \u4F4D\u7F6E","Cursor Y position":"\u5149\u6A19Y\u5750\u6A19","the Y position of the cursor or of a touch":"\u5149\u6A19\u6216\u89F8\u6478\u7684 Y \u4F4D\u7F6E","the cursor (or touch) Y position":"\u5149\u6A19(\u6216\u89F8\u6478) Y \u4F4D\u7F6E","Mouse cursor X position":"\u9F20\u6A19\u5149\u6A19 X \u4F4D\u7F6E","the X position of the mouse cursor":"\u9F20\u6A19\u5149\u6A19\u7684 X \u4F4D\u7F6E","the mouse cursor X position":"\u9F20\u6A19\u5149\u6A19 X \u4F4D\u7F6E","Mouse cursor Y position":"\u9F20\u6A19\u5149\u6A19 Y \u4F4D\u7F6E","the Y position of the mouse cursor":"\u9F20\u6A19\u5149\u6A19\u7684 Y \u4F4D\u7F6E","the mouse cursor Y position":"\u9F20\u6A19\u5149\u6A19 Y \u4F4D\u7F6E","Mouse cursor is inside the window":"\u9F20\u6A19\u5149\u6A19\u5728\u7A97\u53E3\u5167","Check if the mouse cursor is inside the window.":"\u6AA2\u67E5\u9F20\u6A19\u5149\u6A19\u662F\u5426\u5728\u7A97\u53E3\u5167\u3002","The mouse cursor is inside the window":"\u9F20\u6A19\u5149\u6A19\u5728\u7A97\u53E3\u5167","Mouse button pressed or touch held":"\u9F20\u6A19\u6309\u9215\u88AB\u6309\u4E0B\u6216\u89F8\u6478","Check if the specified mouse button is pressed or if a touch is in contact with the screen.":"\u6AA2\u67E5\u662F\u5426\u6309\u4E0B\u4E86\u6307\u5B9A\u7684\u9F20\u6A19\u6309\u9215\u6216\u89F8\u6478\u5C4F\u3002","Touch or _PARAM1_ mouse button is down":"\u9F20\u6A19 _PARAM1_\u9375\u6216\u89F8\u6478\u6309\u4E0B","Button to check":"\u6309\u9215\u6AA2\u67E5","Mouse button released":"\u9F20\u6A19\u9375\u5F48\u8D77","Check if the specified mouse button was released.":"\u6AA2\u67E5\u662F\u5426\u91CB\u653E\u4E86\u6307\u5B9A\u7684\u9F20\u6A19\u6309\u9215\u3002","Touch or _PARAM1_ mouse button is released":"\u89F8\u6478\u6216 _PARAM1_ \u9F20\u6A19\u6309\u9215\u88AB\u91CB\u653E","Touch X position":"\u89F8\u6478X\u5750\u6A19","the X position of a specific touch":"\u7279\u5B9A\u89F8\u6478\u7684 X \u4F4D\u7F6E","the touch #_PARAM1_ X position":"\u89F8\u6478#_PARAM1_ X \u4F4D\u7F6E","Touch identifier":"\u89F8\u6478id","Touch Y position":"\u89F8\u6478Y\u5750\u6A19","the Y position of a specific touch":"\u7279\u5B9A\u89F8\u6478\u7684 Y \u4F4D\u7F6E","the touch #_PARAM1_ Y position":"\u89F8\u6478#_PARAM1_ Y \u4F4D\u7F6E","A new touch has started":"\u65B0\u7684\u89F8\u6478\u5DF2\u7D93\u958B\u59CB","Check if a touch has started. The touch identifier can be accessed using LastTouchId().\nAs more than one touch can be started, this condition is only true once for each touch: the next time you use it, it will be for a new touch, or it will return false if no more touches have just started.":"\u6AA2\u67E5\u662F\u5426\u5DF2\u958B\u59CB\u89F8\u6478\u3002\u53EF\u4EE5\u4F7F\u7528LastTouchId\uFF08\uFF09\u8A2A\u554F\u8A72\u89F8\u6478\u6A19\u8B58\u7B26\u3002 n\u7531\u4E8E\u53EF\u4EE5\u555F\u52D5\u591A\u500B\u89F8\u6478\uFF0C\u6240\u4EE5\u6B64\u689D\u4EF6\u50C5\u5C0D\u6BCF\u500B\u89F8\u6478\u4E00\u6B21\uFF0C\u5373\uFF1A\u4E0B\u4E00\u6B21\u4F7F\u7528\u8A72\u689D\u4EF6\u6642\uFF0C\u5C07\u7528\u4E8E\u65B0\u89F8\u6478\uFF0C\u5426\u5247\u5B83\u5C07\u8FD4\u56DE\u5982\u679C\u6C92\u6709\u66F4\u591A\u7684\u63A5\u89F8\u624D\u958B\u59CB\uFF0C\u5247\u8FD4\u56DEfalse","A touch has ended":"\u89F8\u6478\u5DF2\u7D50\u675F","Check if a touch has ended. The touch identifier can be accessed using LastEndedTouchId().\nAs more than one touch can be ended, this condition is only true once for each touch: the next time you use it, it will be for a new touch, or it will return false if no more touches have just ended.":"\u6AA2\u67E5\u89F8\u6478\u662F\u5426\u7D50\u675F\u3002\u53EF\u4EE5\u4F7F\u7528LastEndedTouchId\uFF08\uFF09\u8A2A\u554F\u8A72\u89F8\u6478\u6A19\u8B58\u7B26\u3002 n\u7531\u4E8E\u53EF\u4EE5\u7D42\u6B62\u591A\u500B\u89F8\u6478\uFF0C\u6240\u4EE5\u6B64\u689D\u4EF6\u50C5\u5C0D\u6BCF\u6B21\u89F8\u6478\u4E00\u6B21\u70BA\u771F\uFF1A\u4E0B\u6B21\u4F7F\u7528\u6642\uFF0C\u5C07\u662F\u65B0\u89F8\u6478\uFF0C\u5426\u5247\u5C07\u8FD4\u56DE\u5982\u679C\u6C92\u6709\u66F4\u591A\u7684\u63A5\u89F8\u525B\u525B\u7D50\u675F\uFF0C\u5247\u8FD4\u56DEfalse\u3002","Check if a touch has just started on this frame. The touch identifiers can be accessed using StartedTouchId() and StartedTouchCount().":"\u6AA2\u67E5\u6B64\u6846\u67B6\u4E0A\u662F\u5426\u525B\u525B\u958B\u59CB\u89F8\u6478\u3002\u53EF\u4EE5\u4F7F\u7528StartedTouchId()\u548CStartedTouchCount()\u8A2A\u554F\u89F8\u6478\u6A19\u8B58\u7B26\u3002","Started touch count":"\u958B\u59CB\u89F8\u6478\u8A08\u6578","The number of touches that have just started on this frame. The touch identifiers can be accessed using StartedTouchId().":"\u525B\u525B\u5728\u6B64\u6846\u67B6\u4E0A\u555F\u52D5\u7684\u89F8\u6478\u6B21\u6578\u3002\u53EF\u4EE5\u4F7F\u7528spectTouchID()\u8A2A\u554F\u89F8\u6478\u6A19\u8B58\u7B26\u3002","Started touch identifier":"\u958B\u59CB\u89F8\u6478\u6A19\u8B58\u7B26","The identifier of the touch that has just started on this frame. The number of touches can be accessed using StartedTouchCount().":"\u525B\u525B\u5728\u6B64\u5E40\u4E0A\u958B\u59CB\u7684\u89F8\u6478\u7684\u6A19\u8B58\u7B26\u3002\u53EF\u4EE5\u4F7F\u7528 StartedTouchCount() \u8A2A\u554F\u89F8\u6478\u6B21\u6578\u3002","Touch index":"\u89F8\u6478\u7D22\u5F15","Check if a touch has just started or the mouse left button has been pressed on this frame. The touch identifiers can be accessed using StartedTouchOrMouseId() and StartedTouchOrMouseCount().":"\u6AA2\u67E5\u662F\u5426\u525B\u525B\u958B\u59CB\u89F8\u6478\u6216\u5728\u6B64\u5E40\u4E0A\u6309\u4E0B\u9F20\u6A19\u5DE6\u9375\u3002\u53EF\u4EE5\u4F7F\u7528 StartedTouchOrMouseId() \u548C StartedTouchOrMouseCount() \u8A2A\u554F\u89F8\u6478\u6A19\u8B58\u7B26\u3002","The number of touches (including the mouse) that have just started on this frame. The touch identifiers can be accessed using StartedTouchOrMouseId().":"\u5728\u6B64\u5E40\u4E0A\u525B\u525B\u958B\u59CB\u7684\u89F8\u6478\u6B21\u6578(\u5305\u62EC\u9F20\u6A19)\u3002\u53EF\u4EE5\u4F7F\u7528 StartedTouchOrMouseId() \u8A2A\u554F\u89F8\u6478\u6A19\u8B58\u7B26\u3002","The identifier of the touch or mouse that has just started on this frame. The number of touches can be accessed using StartedTouchOrMouseCount().":"\u525B\u525B\u5728\u6B64\u5E40\u4E0A\u958B\u59CB\u7684\u89F8\u6478\u6216\u9F20\u6A19\u7684\u6A19\u8B58\u7B26\u3002\u53EF\u4EE5\u4F7F\u7528 StartedTouchOrMouseCount() \u8A2A\u554F\u89F8\u6478\u6B21\u6578\u3002","Check if a touch has ended or a mouse left button has been released.":"\u6AA2\u67E5\u89F8\u6478\u662F\u5426\u7D50\u675F\u6216\u9F20\u6A19\u5DE6\u9375\u662F\u5426\u5DF2\u91CB\u653E\u3002","The touch with identifier _PARAM1_ has ended":"\u4F7F\u7528\u6A19\u8B58\u7B26_PARAM1_ \u7684\u89F8\u6478\u5DF2\u7D50\u675F","Mouse wheel: Displacement":"\u9F20\u6A19\u6EFE\u8F2A: \u6EFE\u52D5","Mouse wheel displacement":"\u9F20\u6A19\u6EFE\u8F2A\u6EFE\u52D5","Identifier of the last touch":"\u6700\u540E\u89F8\u6478\u7684id","Identifier of the last ended touch":"\u6700\u540E\u4E00\u6B21\u89F8\u6478\u7684\u6A19\u8B58\u7B26","Text manipulation":"\u6587\u672C\u64CD\u4F5C","Insert a new line":"\u63D2\u5165\u65B0\u884C","Get character from code point":"\u5F9E\u4EE3\u78BC\u9EDE\u7372\u53D6\u5B57\u7B26","Code point":"\u4EE3\u78BC\u9EDE","Uppercase a text":"\u6587\u672C\u5B57\u6BCD\u5927\u5BEB","Lowercase a text":"\u6587\u672C\u5B57\u6BCD\u5C0F\u5BEB","Get a portion of a text":"\u7372\u53D6\u6587\u672C\u7684\u4E00\u90E8\u5206","Start position of the portion (the first letter is at position 0)":"\u90E8\u5206\u7684\u958B\u59CB\u4F4D\u7F6E(\u9996\u5B57\u6BCD\u4F4D\u7F6E\u57280)","Length of the portion":"\u90E8\u5206\u7684\u5BEC\u5EA6","Get a character from a text":"\u5F9E\u6587\u672C\u6587\u4EF6\u7372\u53D6\u4E00\u500B\u5B57\u7B26","Position of the character (the first letter is at position 0)":"\u5B57\u7B26\u7684\u4F4D\u7F6E(\u9996\u5B57\u6BCD\u4F4D\u7F6E\u57280)","Repeat a text":"\u8B80\u53D6\u6587\u672C","Text to repeat":"\u6587\u5B57\u91CD\u5FA9","Repetition count":"\u5B50\u91CD\u73FE\u8A08\u6578","Length of a text":"\u6587\u672C\u7684\u9577\u5EA6","Search in a text":"\u5728\u6587\u672C\u6587\u4EF6\u4E2D\u641C\u7D22","Search in a text (return the position of the result or -1 if not found)":"\u6587\u672C\u5167\u641C\u7D22(\u7D50\u679C\u8FD4\u56DE\u4F4D\u7F6E\uFF0C\u672A\u627E\u5230\u8FD4\u56DE-1)","Text to search for":"\u8981\u641C\u7D22\u7684\u6587\u672C","Search the last occurrence in a text":"\u641C\u7D22\u6587\u672C\u4E2D\u7684\u6700\u540E\u4E00\u6B21\u5339\u914D\u9805","Search the last occurrence in a string (return the position of the result, from the beginning of the string, or -1 if not found)":"\u641C\u7D22\u5B57\u7B26\u4E32\u4E2D\u7684\u6700\u540E\u4E00\u500B\u5339\u914D\u9805(\u8FD4\u56DE\u7D50\u679C\u7684\u4F4D\u7F6E\uFF0C\u5F9E\u5B57\u7B26\u4E32\u7684\u958B\u982D\u958B\u59CB\uFF0C\u5982\u679C\u672A\u627E\u5230\uFF0C\u5247\u8FD4\u56DE-1)","Search in a text, starting from a position":"\u5728\u6587\u672C\u4E2D\uFF0C\u5F9E\u4E00\u500B\u4F4D\u7F6E\u4E2D\u958B\u59CB\u641C\u7D22","Search in a text, starting from a position (return the position of the result or -1 if not found)":"\u5728\u6587\u672C\u4E2D\u641C\u7D22\uFF0C\u5F9E\u4E00\u500B\u4F4D\u7F6E\u958B\u59CB\uFF08\u8FD4\u56DE\u7D50\u679C\u7684\u4F4D\u7F6E\uFF0C\u5426\u5247\u8FD4\u56DE-1\uFF09","Position of the first character in the string to be considered in the search":"\u5728\u641C\u7D22\u4E2D\u8981\u8003\u616E\u7684\u5B57\u7B26\u4E32\u4E2D\u7B2C\u4E00\u500B\u5B57\u7B26\u7684\u4F4D\u7F6E","Search the last occurrence in a text, starting from a position":"\u5F9E\u67D0\u500B\u4F4D\u7F6E\u958B\u59CB\u641C\u7D22\u6587\u672C\u4E2D\u7684\u6700\u540E\u4E00\u500B\u5339\u914D\u9805","Search in a text the last occurrence, starting from a position (return the position of the result, from the beginning of the string, or -1 if not found)":"\u5728\u6587\u672C\u4E2D\u641C\u7D22\u6700\u540E\u4E00\u6B21\u51FA\u73FE\u7684\u4F4D\u7F6E\uFF0C\u5F9E\u4E00\u500B\u4F4D\u7F6E\u958B\u59CB(\u8FD4\u56DE\u7D50\u679C\u7684\u4F4D\u7F6E\uFF0C\u5F9E\u5B57\u7B26\u4E32\u7684\u958B\u982D\u958B\u59CB\uFF0C\u5982\u679C\u6C92\u6709\u627E\u5230\u5247\u8FD4\u56DE -1)","Position of the last character in the string to be considered in the search":"\u5728\u641C\u7D22\u4E2D\u8981\u8003\u616E\u7684\u5B57\u7B26\u4E32\u4E2D\u6700\u540E\u4E00\u500B\u5B57\u7B26\u7684\u4F4D\u7F6E","Replace the first occurrence of a text by another.":"\u7528\u53E6\u4E00\u500B\u6587\u672C\u66FF\u63DB\u7B2C\u4E00\u6B21\u51FA\u73FE\u7684\u6587\u672C\u3002","Text in which the replacement must be done":"\u5FC5\u9808\u9032\u884C\u66FF\u63DB\u7684\u6587\u672C","Text to find inside the first text":"\u5728\u7B2C\u4E00\u500B\u6587\u672C\u4E2D\u67E5\u627E\u7684\u6587\u672C","Replacement to put instead of the text to find":"\u66FF\u63DB\u8981\u653E\u7F6E\u7684\u6587\u672C\uFF0C\u800C\u4E0D\u662F\u8981\u67E5\u627E\u7684\u6587\u672C","Replace all occurrences of a text by another.":"\u7528\u53E6\u4E00\u500B\u6587\u672C\u66FF\u63DB\u6240\u6709\u51FA\u73FE\u7684\u6587\u672C\u3002","Text in which the replacement(s) must be done":"\u6587\u672C\u7684\u66FF\u63DB(s)\u5FC5\u9808\u5B8C\u6210","Event functions":"\u4E8B\u4EF6\u51FD\u6578","Advanced control features for functions made with events.":"\u7528\u4E8E\u4E8B\u4EF6\u51FD\u6578\u7684\u9AD8\u7D1A\u63A7\u5236\u529F\u80FD\u3002","Set number return value":"\u8A2D\u5B9A\u6578\u5B57\u8FD4\u56DE\u503C","Set the return value of the events function to the specified number (to be used with \"Expression\" functions).":"\u5C07\u4E8B\u4EF6\u51FD\u6578\u7684\u8FD4\u56DE\u503C\u8A2D\u5B9A\u5230\u6307\u5B9A\u7684\u6578\u5B57 (\u4F7F\u7528\u201C\u8868\u9054\u5F0F\u201D\u51FD\u6578)\u3002","Set return value to number _PARAM0_":"\u5C07\u8FD4\u56DE\u503C\u8A2D\u5B9A\u70BA\u6578\u5B57 _PARAM0_","The number to be returned":"\u8981\u8FD4\u56DE\u7684\u6578\u5B57","Set text return value":"\u8A2D\u5B9A\u6587\u672C\u8FD4\u56DE\u503C","Set the return value of the events function to the specified text (to be used with \"String Expression\" functions).":"\u5C07\u4E8B\u4EF6\u51FD\u6578\u7684\u8FD4\u56DE\u503C\u8A2D\u5B9A\u5230\u6307\u5B9A\u7684\u6587\u672C (\u4F7F\u7528 \"\u5B57\u7B26\u4E32\u8868\u9054\u5F0F\" \u51FD\u6578)\u3002","Set return value to text _PARAM0_":"\u5C07\u8FD4\u56DE\u503C\u8A2D\u5B9A\u70BA\u6587\u672C _PARAM0_","The text to be returned":"\u8981\u8FD4\u56DE\u7684\u6587\u672C","Set condition return value":"\u8A2D\u5B9A\u689D\u4EF6\u8FD4\u56DE\u503C","Set the return value of the Condition events function to either true (condition will pass) or false.":"\u8A2D\u5B9A\u689D\u4EF6\u4E8B\u4EF6\u51FD\u6578\u8FD4\u56DE\u503C\u70BA true (\u689D\u4EF6\u5C07\u901A\u904E) \u6216 false\u3002","Set return value of the condition to _PARAM0_":"\u5C07\u689D\u4EF6\u7684\u8FD4\u56DE\u503C\u8A2D\u5B9A\u70BA _PARAM0_","Should the condition be true or false?":"\u689D\u4EF6\u61C9\u8A72\u662F\u771F\u9084\u662F\u5047\uFF1F","Copy function parameter to variable":"\u5C07\u51FD\u6578\u53C3\u6578\u8907\u88FD\u5230\u8B8A\u91CF","Copy a function parameter (also called \"argument\") to a variable. The parameter type must be a variable.":"\u5C07\u51FD\u6578\u53C3\u6578(\u4E5F\u7A31\u201C\u53C3\u6578\u201D)\u8907\u88FD\u5230\u4E00\u500B\u8B8A\u91CF\u3002\u53C3\u6578\u985E\u578B\u5FC5\u9808\u662F\u8B8A\u91CF\u3002","Copy the parameter _PARAM0_ into the variable _PARAM1_":"\u5C07\u53C3\u6578 _PARAM0_ \u8907\u88FD\u5230\u8B8A\u91CF _PARAM1_","Copy variable to function parameter":"\u8907\u88FD\u8B8A\u91CF\u5230\u51FD\u6578\u53C3\u6578","Copy a variable to function parameter (also called \"argument\"). The parameter type must be a variable.":"\u5C07\u8B8A\u91CF\u8907\u88FD\u5230\u51FD\u6578\u53C3\u6578(\u4E5F\u7A31\u70BA\u201C\u53C3\u6578\u201D)\u3002\u53C3\u6578\u985E\u578B\u5FC5\u9808\u662F\u8B8A\u91CF\u3002","Copy the variable _PARAM1_ into the parameter _PARAM0_":"\u5C07\u8B8A\u91CF _PARAM1_ \u8907\u88FD\u5230\u53C3\u6578 _PARAM0_","Check if a function parameter is set to true (or yes)":"\u6AA2\u67E5\u51FD\u6578\u53C3\u6578\u662F\u5426\u8A2D\u5B9A\u70BA true (\u6216\u662F)","Check if the specified function parameter (also called \"argument\") is set to True or Yes. If the argument is a string, an empty string is considered as \"false\". If it's a number, 0 is considered as \"false\".":"\u6AA2\u67E5\u6307\u5B9A\u51FD\u6578\u53C3\u6578(\u4E5F\u7A31\u201C\u53C3\u6578\u201D)\u662F\u5426\u8A2D\u5B9A\u70BA True \u6216 \u3002 \u5982\u679C\u53C3\u6578\u662F\u5B57\u7B26\u4E32\uFF0C\u5247\u7A7A\u5B57\u7B26\u4E32\u88AB\u8996\u70BA\u201Cfalse\u201D\u3002\u5982\u679C\u662F\u4E00\u500B\u6578\u5B57\uFF0C\u52470\u88AB\u8996\u70BA\u201Cfalse\u201D\u3002","Parameter _PARAM0_ is true":"\u53C3\u6578 _PARAM0_ \u70BA true","Get function parameter value":"\u7372\u53D6\u51FD\u6578\u53C3\u6578\u503C","Get function parameter (also called \"argument\") value. You don't need this most of the time as you can simply write the parameter name in an expression.":"\u7372\u53D6\u51FD\u6578\u53C3\u6578 (\u4E5F\u7A31\u70BA\u201C\u53C3\u6578\u201D) \u503C\u3002\u5728\u5927\u591A\u6578\u60C5\u6CC1\u4E0B\uFF0C\u60A8\u4E0D\u9700\u8981\u9019\u6A23\u505A\uFF0C\u56E0\u70BA\u60A8\u53EF\u4EE5\u7C21\u55AE\u5730\u5728\u8868\u9054\u5F0F\u4E2D\u5BEB\u5165\u53C3\u6578\u540D\u7A31\u3002","Get function parameter text":"\u7372\u53D6\u51FD\u6578\u53C3\u6578\u6587\u672C","Get function parameter (also called \"argument\") text. You don't need this most of the time as you can simply write the parameter name in an expression.":"\u7372\u53D6\u51FD\u6578\u53C3\u6578 (\u4E5F\u7A31\u70BA\u201C\u53C3\u6578\u201D) \u6587\u672C\u3002\u5728\u5927\u591A\u6578\u60C5\u6CC1\u4E0B\uFF0C\u60A8\u4E0D\u9700\u8981\u9019\u6A23\u505A\uFF0C\u56E0\u70BA\u60A8\u53EF\u4EE5\u7C21\u55AE\u5730\u5728\u8868\u9054\u5F0F\u4E2D\u5BEB\u5165\u53C3\u6578\u540D\u7A31\u3002","Compare function parameter value":"\u6BD4\u8F03\u51FD\u6578\u53C3\u6578\u503C","Compare function parameter (also called \"argument\") value.":"\u6BD4\u8F03\u51FD\u6578\u53C3\u6578(\u4E5F\u7A31\u70BA\u201C\u53C3\u6578\u201D) \u503C\u3002","Parameter _PARAM0_":"\u53C3\u6578 _PARAM0_","Compare function parameter text":"\u6BD4\u8F03\u51FD\u6578\u53C3\u6578\u6587\u672C","Compare function parameter (also called \"argument\") text.":"\u6BD4\u8F03\u51FD\u6578\u53C3\u6578(\u4E5F\u7A31\u70BA\u201C\u53C3\u6578\u201D) \u6587\u672C\u3002","Events and control flow":"\u4E8B\u4EF6\u548C\u63A7\u5236\u6D41\u7A0B","This condition always returns true (or always false, if the condition is inverted).":"\u9019\u500B\u689D\u4EF6\u7E3D\u662F\u8FD4\u56DEtrue\uFF08\u6216\u8005\u5982\u679C\u689D\u4EF6\u53CD\u8F49\uFF0C\u5247\u7E3D\u662F\u70BA\u662F\u932F\u7684\uFF09\u3002","Or":"\u6216","Checks if at least one sub-condition is true. If no sub-condition is specified, it will always be false. This is rarely used \u2014 multiple events and sub-events are usually a better approach.":"Checks if at least one sub-condition is true. If no sub-condition is specified, it will always be false. This is rarely used \u2014 multiple events and sub-events are usually a better approach.","If one of these conditions is true:":"\u5982\u679C\u5176\u4E2D\u4E00\u500B\u689D\u4EF6\u70BA\u771F \uFE30","And":"\u8207","Checks if all sub-conditions are true. If no sub-condition is specified, it will always be false. This is rarely needed, as events already check all conditions before running actions.":"Checks if all sub-conditions are true. If no sub-condition is specified, it will always be false. This is rarely needed, as events already check all conditions before running actions.","If all of these conditions are true:":"\u5982\u679C\u9019\u4E9B\u689D\u4EF6\u90FD\u70BA\u771F :","Not":"\u975E","Returns the opposite of the sub-condition(s) result. This is rarely needed, as most conditions can be inverted or expressed more simply.":"Returns the opposite of the sub-condition(s) result. This is rarely needed, as most conditions can be inverted or expressed more simply.","Invert the logical result of these conditions:":"\u985B\u5012\u9019\u4E9B\u689D\u4EF6\u7684\u908F\u8F2F\u7D50\u679C\uFF1A","Trigger once while true":"\u7576 true \u6642\u89F8\u767C\u4E00\u6B21","Run the actions once when the previous conditions are true. If they become false and later true again, the actions will run again.\nThis condition is always last in the list.\n\nNote: internally, this uses a global trigger state; it's not tracked per object instance. Be careful if you use this in a loop or For Each event (consider using object variables instead if needed).":"\u7576\u5148\u524D\u7684\u689D\u4EF6\u70BA\u771F\u6642\u57F7\u884C\u52D5\u4F5C\u4E00\u6B21\u3002\u5982\u679C\u9019\u4E9B\u689D\u4EF6\u8B8A\u70BA\u5047\u4E26\u518D\u6B21\u8B8A\u70BA\u771F\uFF0C\u5247\u52D5\u4F5C\u5C07\u518D\u6B21\u57F7\u884C\u3002\n\u6B64\u689D\u4EF6\u5728\u5217\u8868\u4E2D\u59CB\u7D42\u662F\u6700\u5F8C\u4E00\u9805\u3002\n\n\u6CE8\u610F\uFF1A\u5728\u5167\u90E8\uFF0C\u9019\u662F\u4F7F\u7528\u5168\u5C40\u89F8\u767C\u72C0\u614B\uFF1B\u5B83\u4E0D\u662F\u6BCF\u500B\u7269\u4EF6\u5BE6\u4F8B\u7368\u7ACB\u8FFD\u8E64\u7684\u3002\u5982\u679C\u60A8\u5728\u5FAA\u74B0\u6216\u6BCF\u500B\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u9019\u500B\uFF0C\u8ACB\u5C0F\u5FC3\uFF08\u5982\u6709\u9700\u8981\uFF0C\u8003\u616E\u4F7F\u7528\u7269\u4EF6\u8B8A\u6578\uFF09\u3002","Trigger once":"\u89F8\u767C\u4E00\u6B21","Compare two numbers":"\u6BD4\u8F03\u5169\u500B\u6578\u5B57","Compare the two numbers.":"\u6BD4\u8F03\u5169\u500B\u6578\u5B57\u3002","_PARAM0_ _PARAM1_ _PARAM2_":"_PARAM0_ _PARAM1_ _PARAM2_","Compare two strings":"\u6BD4\u8F03\u5169\u500B\u5B57\u7B26\u4E32","Compare the two strings.":"\u6BD4\u8F03\u5169\u500B\u5B57\u7B26\u4E32\u3002","First string expression":"\u7B2C\u4E00\u500B\u5B57\u7B26\u4E32\u8868\u9054\u5F0F","Second string expression":"\u7B2C\u4E8C\u500B\u5B57\u7B26\u4E32\u8868\u9054\u5F0F","Standard event":"\u6A19\u6E96\u4E8B\u4EF6","Standard event: Actions are run if conditions are fulfilled.":"\u6A19\u6E96\u4E8B\u4EF6: \u5982\u679C\u6EFF\u8DB3\u689D\u4EF6, \u5247\u904B\u884C\u64CD\u4F5C\u3002","Else event: Actions are run if previous events in the chain were not fulfilled.":"\u5176\u4ED6\u4E8B\u4EF6\uFF1A\u5982\u679C\u93C8\u4E2D\u7684\u5148\u524D\u4E8B\u4EF6\u672A\u5B8C\u6210\uFF0C\u5247\u57F7\u884C\u64CD\u4F5C\u3002","Link external events":"\u93C8\u63A5\u5916\u90E8\u4E8B\u4EF6","Link to external events.":"\u93C8\u63A5\u5230\u5916\u90E8\u4E8B\u4EF6\u3002","Event displaying a text in the events editor.":"\u4E8B\u4EF6\u5728\u4E8B\u4EF6\u7DE8\u8F2F\u5668\u4E2D\u986F\u793A\u6587\u672C\u3002","While":"\u689D\u4EF6\u5FAA\u74B0","Repeat the event while the conditions are true.":"\u5728\u689D\u4EF6\u70BA\u771F\u6642\u91CD\u5FA9\u8A72\u4E8B\u4EF6\u3002","Repeat":"\u91CD\u5FA9","Repeat the event for a specified number of times.":"\u5C07\u4E8B\u4EF6\u91CD\u5FA9\u6307\u5B9A\u6B21\u6578\u3002","For each object":"\u5C0D\u4E8E\u6BCF\u500B\u7269\u4EF6","Repeat the event for each specified object.":"\u70BA\u6BCF\u500B\u6307\u5B9A\u7684\u7269\u4EF6\u91CD\u5FA9\u4E8B\u4EF6","For each child variable (of a structure or array)":"\u5C0D\u4E8E\u6BCF\u500B\u5B50\u8B8A\u91CF (\u7D50\u69CB\u6216\u6578\u7D44)","Repeat the event for each child variable of a structure or array.":"\u5C0D\u7D50\u69CB\u6216\u6578\u7D44\u4E2D\u7684\u6BCF\u500B\u5B50\u8B8A\u91CF\u91CD\u5FA9\u4E8B\u4EF6\u3002","Event group":"\u4E8B\u4EF6\u7D44","Group containing events.":"\u5305\u542B\u4E8B\u4EF6\u7684\u7FA4\u7D44\u3002","Variable value":"\u8B8A\u91CF\u503C","Compare the number value of a variable.":"\u6BD4\u8F03\u8B8A\u91CF\u7684\u6578\u503C\u3002","The variable _PARAM0_":"\u8B8A\u91CF _PARAM0_","Compare the text (string) of a variable.":"\u6BD4\u8F03\u8B8A\u91CF\u7684\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","Compare the boolean value of a variable.":"\u6BD4\u8F03\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","The variable _PARAM0_ is _PARAM1_":"\u8B8A\u91CF _PARAM0_ \u662F _PARAM1_","Check if the value is":"\u6AA2\u67E5\u503C\u662F\u5426\u70BA","Change variable value":"\u66F4\u6539\u8B8A\u91CF\u503C","Modify the number value of a variable.":"\u4FEE\u6539\u8B8A\u91CF\u7684\u6578\u503C\u3002","the variable _PARAM0_":"\u8B8A\u91CF _PARAM0_","Modify the text (string) of a variable.":"\u4FEE\u6539\u8B8A\u91CF\u7684\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","Modify the boolean value of a variable.":"\u4FEE\u6539\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","Change the variable _PARAM0_: _PARAM1_":"\u66F4\u6539\u8B8A\u91CF _PARAM0_\uFF1A_PARAM1_","Number of children":"\u5B50\u9805\u6578\u91CF","Compare the number of children in an array variable.":"\u6BD4\u8F03\u6578\u7D44\u8B8A\u91CF\u4E2D\u7684\u5B50\u7D1A\u6578\u91CF\u3002","The number of children in the array variable _PARAM0_":"\u6578\u7D44\u8B8A\u91CF _PARAM0_ \u4E2D\u7684\u5B50\u7D1A\u6578","Arrays and structures":"\u6578\u7D44\u548C\u7D50\u69CB","Array variable":"\u6578\u7D44\u8B8A\u91CF","Child existence":"\u5B50\u5B58\u5728","Check if the specified child of the structure variable exists.":"\u6AA2\u67E5\u7D50\u69CB\u8B8A\u91CF\u7684\u6307\u5B9A\u5B50\u7D1A\u662F\u5426\u5B58\u5728\u3002","Child _PARAM1_ of variable _PARAM0_ exists":"\u8B8A\u91CF _PARAM0_ \u7684\u5B50 _PARAM1_ \u5B58\u5728","Name of the child":"\u5B50\u7684\u540D\u5B57","Remove a child":"\u522A\u9664\u5B50","Remove a child from a structure variable.":"\u5F9E\u7D50\u69CB\u8B8A\u91CF\u4E2D\u522A\u9664\u5B50\u9805\u3002","Remove child _PARAM1_ from structure variable _PARAM0_":"\u5F9E\u7D50\u69CB\u8B8A\u91CF _PARAM0_ \u4E2D\u522A\u9664\u5B50 _PARAM1_","Structure variable":"\u7D50\u69CB\u8B8A\u91CF","Child's name":"\u5B50\u540D\u7A31","Clear children":"\u6E05\u9664\u5B50\u9805","Remove all the children from the structure or array variable.":"\u5F9E\u7D50\u69CB\u6216\u6578\u7D44\u8B8A\u91CF\u4E2D\u522A\u9664\u6240\u6709\u5B50\u9805\u3002","Clear children from variable _PARAM0_":"\u5F9E\u8B8A\u91CF _PARAM0_ \u6E05\u9664\u5B50\u9805","Structure or array variable":"\u7D50\u69CB\u6216\u6578\u7D44\u8B8A\u91CF","Add existing variable":"\u6DFB\u52A0\u73FE\u6709\u8B8A\u91CF","Adds an existing variable at the end of an array variable.":"\u5728\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u73FE\u6709\u8B8A\u91CF\u3002","Add variable _PARAM1_ to array variable _PARAM0_":"\u5C07\u8B8A\u91CF _PARAM1_ \u6DFB\u52A0\u5230\u6578\u7D44\u8B8A\u91CF _PARAM0_","Variable with the content to add":"\u8981\u6DFB\u52A0\u5167\u5BB9\u7684\u8B8A\u91CF","The content of the variable will *be copied* and added at the end of the array.":"\u8B8A\u91CF\u7684\u5167\u5BB9\u5C07*\u88AB\u8907\u88FD*\u5E76\u6DFB\u52A0\u5230\u6578\u7D44\u7684\u672B\u5C3E\u3002","Add value to array variable":"\u5411\u9663\u5217\u8B8A\u91CF\u6DFB\u52A0\u503C","Adds a text (string) at the end of a array variable.":"\u5728\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","Add the value _PARAM1_ to array variable _PARAM0_":"\u5C07\u503C _PARAM1_ \u6DFB\u52A0\u5230\u6578\u7D44\u8B8A\u91CF _PARAM0_","Text to add":"\u8981\u6DFB\u52A0\u7684\u6587\u672C","Adds a number at the end of an array variable.":"\u5728\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u6578\u5B57\u3002","Number to add":"\u8981\u6DFB\u52A0\u7684\u865F\u78BC","Adds a boolean at the end of an array variable.":"\u5728\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u5E03\u723E\u503C\u3002","Boolean to add":"\u8981\u6DFB\u52A0\u7684\u5E03\u723E\u503C","Remove variable by index":"\u6309\u7D22\u5F15\u522A\u9664\u8B8A\u91CF","Removes a variable at the specified index of an array variable.":"\u522A\u9664\u6578\u7D44\u8B8A\u91CF\u6307\u5B9A\u7D22\u5F15\u8655\u7684\u8B8A\u91CF\u3002","Remove variable at index _PARAM1_ from array variable _PARAM0_":"\u5F9E\u6578\u7D44\u8B8A\u91CF _PARAM0_ \u4E2D\u522A\u9664\u7D22\u5F15 _PARAM1_ \u8655\u7684\u8B8A\u91CF","Index to remove":"\u8981\u522A\u9664\u7684\u7D22\u5F15","First text child":"\u7B2C\u4E00\u500B\u6587\u672C\u5B50\u9805","Get the value of the first element of an array variable, if it is a text (string).":"\u7372\u53D6\u6578\u7D44\u8B8A\u91CF\u7684\u7B2C\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u6587\u672C(\u5B57\u7B26\u4E32)\u3002","First number child":"\u7B2C\u4E00\u500B\u6578\u5B57\u5B50\u9805","Get the value of the first element of an array variable, if it is a number.":"\u7372\u53D6\u6578\u7D44\u8B8A\u91CF\u7684\u7B2C\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u500B\u6578\u5B57\u3002","Last text child":"\u6700\u540E\u6587\u672C\u5B50\u9805","Get the value of the last element of an array variable, if it is a text (string).":"\u7372\u53D6\u6578\u7D44\u8B8A\u91CF\u6700\u540E\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u6587\u672C(\u5B57\u7B26\u4E32)\u3002","Last number child":"\u6700\u540E\u4E00\u500B\u6578\u5B57\u5B50\u9805","Get the value of the last element of an array variable, if it is a number.":"\u7372\u53D6\u6578\u7D44\u8B8A\u91CF\u7684\u6700\u540E\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u500B\u6578\u5B57\u3002","Number variable":"\u6578\u5B57\u8B8A\u91CF","Compare the number value of a scene variable.":"\u6BD4\u8F03\u5834\u666F\u8B8A\u91CF\u7684\u6578\u503C\u3002","The number of scene variable _PARAM0_":"\u5834\u666F\u8B8A\u91CF\u7684\u6578\u91CF _PARAM0_","External variables \u276F Scene variables":"\u5916\u90E8\u8B8A\u91CF \u276F \u5834\u666F\u8B8A\u91CF","Text variable":"\u6587\u672C\u8B8A\u91CF","Compare the text (string) of a scene variable.":"\u6BD4\u8F03\u5834\u666F\u8B8A\u91CF\u7684\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","The text of scene variable _PARAM0_":"\u5834\u666F\u8B8A\u91CF_PARAM0_ \u7684\u6587\u672C","Boolean variable":"\u5E03\u723E\u8B8A\u91CF","Compare the boolean value of a scene variable.":"\u6BD4\u8F03\u5834\u666F\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","The boolean value of scene variable _PARAM0_ is _PARAM1_":"\u5834\u666F\u8B8A\u91CF _PARAM0_ \u7684\u5E03\u723E\u503C\u662F _PARAM1_","Check if the specified child of the scene structure variable exists.":"\u6AA2\u67E5\u5834\u666F\u7D50\u69CB\u8B8A\u91CF\u7684\u6307\u5B9A\u5B50\u9805\u662F\u5426\u5B58\u5728\u3002","Child _PARAM1_ of scene variable _PARAM0_ exists":"\u5834\u666F\u8B8A\u91CF _PARAM0_ \u7684\u5B50\u7D1A _PARAM1_ \u5B58\u5728","External variables \u276F Scene variables \u276F Arrays and structures":"\u5916\u90E8\u8B8A\u91CF \u276F \u5834\u666F\u8B8A\u91CF \u276F \u6578\u7D44\u548C\u7D50\u69CB","Check if the specified child of the global structure variable exists.":"\u6AA2\u67E5\u5168\u5C40\u7D50\u69CB\u8B8A\u91CF\u7684\u6307\u5B9A\u5B50\u9805\u662F\u5426\u5B58\u5728\u3002","Child _PARAM1_ of global variable _PARAM0_ exists":"\u5168\u5C40\u8B8A\u91CF _PARAM0_ \u7684\u5B50 _PARAM1_ \u5B58\u5728","External variables \u276F Global variables \u276F Arrays and structures":"\u5916\u90E8\u8B8A\u91CF \u276F \u5168\u5C40\u8B8A\u91CF \u276F \u6578\u7D44\u548C\u7D50\u69CB","Compare the number value of a global variable.":"\u6BD4\u8F03\u4E00\u500B\u5168\u5C40\u8B8A\u91CF\u7684\u6578\u503C\u3002","the global variable _PARAM0_":"\u5168\u5C40\u8B8A\u91CF _PARAM0_","External variables \u276F Global variables":"\u5916\u90E8\u8B8A\u91CF \u276F \u5168\u5C40\u8B8A\u91CF","Compare the text (string) of a global variable.":"\u6BD4\u8F03\u5168\u5C40\u8B8A\u91CF\u7684\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","the text of the global variable _PARAM0_":"\u5168\u5C40\u8B8A\u91CF _PARAM0_ \u7684\u6587\u672C","Compare the boolean value of a global variable.":"\u6BD4\u8F03\u4E00\u500B\u5168\u5C40\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","The boolean value of global variable _PARAM0_ is _PARAM1_":"\u5168\u5C40\u8B8A\u91CF _PARAM0_ \u7684\u5E03\u723E\u503C\u662F _PARAM1_","Change number variable":"\u66F4\u6539\u6578\u5B57\u8B8A\u91CF","Modify the number value of a scene variable.":"\u4FEE\u6539\u5834\u666F\u8B8A\u91CF\u7684\u6578\u503C\u3002","the scene variable _PARAM0_":"\u5834\u666F\u8B8A\u91CF _PARAM0_","Change text variable":"\u66F4\u6539\u6587\u672C\u8B8A\u91CF","Modify the text (string) of a scene variable.":"\u4FEE\u6539\u5834\u666F\u8B8A\u91CF\u7684\u6587\u672C(\u5B57\u7B26\u4E32)\u3002","the text of scene variable _PARAM0_":"\u5834\u666F\u8B8A\u91CF_PARAM0_ \u7684\u6587\u672C","Change boolean variable":"\u66F4\u6539\u5E03\u723E\u8B8A\u91CF","Modify the boolean value of a scene variable.":"\u4FEE\u6539\u5834\u666F\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","Set the boolean value of scene variable _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A\u5834\u666F\u8B8A\u91CF _PARAM0_ \u7684\u5E03\u723E\u503C\u70BA _PARAM1_","New Value:":"\u65B0\u503C\uFF1A","Toggle boolean variable":"\u5207\u63DB\u5E03\u723E\u8B8A\u91CF","Toggle the boolean value of a scene variable.":"\u5207\u63DB\u5834\u666F\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","If it was true, it will become false, and if it was false it will become true.":"\u5982\u679C\u70BA\u771F\uFF0C\u5B83\u5C31\u6703\u8B8A\u70BA\u5047\uFF0C\u5982\u679C\u70BA\u5047\uFF0C\u5B83\u5C31\u6703\u8B8A\u70BA\u771F\u3002","Toggle the boolean value of scene variable _PARAM0_":"\u5207\u63DB\u5834\u666F\u8B8A\u91CF _PARAM0_ \u7684\u5E03\u723E\u503C","Modify the number value of a global variable.":"\u4FEE\u6539\u5168\u5C40\u8B8A\u91CF\u7684\u6578\u503C\u3002","Modify the text (string) of a global variable.":"\u4FEE\u6539\u5168\u5C40\u8B8A\u91CF\u7684\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","the text of global variable _PARAM0_":"\u5168\u5C40\u8B8A\u91CF _PARAM0_ \u7684\u6587\u672C","Modify the boolean value of a global variable.":"\u4FEE\u6539\u5168\u5C40\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","Set the boolean value of global variable _PARAM0_ to _PARAM1_":"\u8A2D\u5B9A\u5168\u5C40\u8B8A\u91CF _PARAM0_ \u7684\u5E03\u723E\u503C\u70BA _PARAM1_","Toggle the boolean value of a global variable.":"\u5207\u63DB\u5168\u5C40\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","Toggle the boolean value of global variable _PARAM0_":"\u5207\u63DB\u5168\u5C40\u8B8A\u91CF _PARAM0_ \u7684\u5E03\u723E\u503C","Remove a child from a scene structure variable.":"\u5F9E\u5834\u666F\u7D50\u69CB\u8B8A\u91CF\u4E2D\u522A\u9664\u4E00\u500B\u5B50\u8B8A\u91CF\u3002","Remove child _PARAM1_ from scene structure variable _PARAM0_":"\u5F9E\u5834\u666F\u7D50\u69CB\u8B8A\u91CF _PARAM0_ \u4E2D\u522A\u9664\u5B50\u9805 _PARAM1_","Remove a child from a global structure variable.":"\u5F9E\u5168\u5C40\u7D50\u69CB\u8B8A\u91CF\u4E2D\u522A\u9664\u4E00\u500B\u5B50\u9805\u3002","Remove child _PARAM1_ from global structure variable _PARAM0_":"\u5F9E\u5168\u5C40\u7D50\u69CB\u8B8A\u91CF _PARAM0_ \u4E2D\u522A\u9664\u5B50\u9805 _PARAM1_","Remove all the children from the scene structure or array variable.":"\u5F9E\u5834\u666F\u7D50\u69CB\u6216\u6578\u7D44\u8B8A\u91CF\u4E2D\u522A\u9664\u6240\u6709\u5B50\u9805\u3002","Clear children from scene variable _PARAM0_":"\u6E05\u9664\u5834\u666F\u8B8A\u91CF _PARAM0_ \u4E2D\u7684\u5B50\u7D1A","Remove all the children from the global structure or array variable.":"\u5F9E\u5168\u5C40\u7D50\u69CB\u6216\u6578\u7D44\u8B8A\u91CF\u4E2D\u522A\u9664\u6240\u6709\u5B50\u9805\u3002","Clear children from global variable _PARAM0_":"\u6E05\u9664\u5168\u5C40\u8B8A\u91CF_PARAM0_\u4E2D\u7684\u5B50\u9805","Adds an existing variable at the end of a scene array variable.":"\u5728\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u73FE\u6709\u8B8A\u91CF\u3002","Scene variable with the content to add":"\u8981\u6DFB\u52A0\u5167\u5BB9\u7684\u5834\u666F\u8B8A\u91CF","Add text variable":"\u6DFB\u52A0\u6587\u672C\u8B8A\u91CF","Adds a text (string) at the end of a scene array variable.":"\u5728\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","Add text _PARAM1_ to array variable _PARAM0_":"\u5C07\u6587\u672C _PARAM1_ \u6DFB\u52A0\u5230\u6578\u7D44\u8B8A\u91CF _PARAM0_","Add number variable":"\u6DFB\u52A0\u6578\u5B57\u8B8A\u91CF","Adds a number at the end of a scene array variable.":"\u5728\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u6578\u5B57\u3002","Add number _PARAM1_ to array variable _PARAM0_":"\u5C07\u6578\u5B57 _PARAM1_ \u6DFB\u52A0\u5230\u6578\u7D44\u8B8A\u91CF _PARAM0_","Add boolean variable":"\u6DFB\u52A0\u5E03\u723E\u8B8A\u91CF","Adds a boolean at the end of a scene array variable.":"\u5728\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u5E03\u723E\u503C\u3002","Add boolean _PARAM1_ to array variable _PARAM0_":"\u5C07\u5E03\u723E\u503C _PARAM1_ \u6DFB\u52A0\u5230\u6578\u7D44\u8B8A\u91CF _PARAM0_","Removes a variable at the specified index of a scene array variable.":"\u5728\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u6307\u5B9A\u7D22\u5F15\u8655\u522A\u9664\u8B8A\u91CF\u3002","Remove variable at index _PARAM1_ from scene array variable _PARAM0_":"\u5F9E\u5834\u666F\u6578\u7D44\u8B8A\u91CF _PARAM0_ \u4E2D\u522A\u9664\u7D22\u5F15 _PARAM1_ \u8655\u7684\u8B8A\u91CF","Compare the number of children in a scene array variable.":"\u6BD4\u8F03\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u4E2D\u7684\u5B50\u7269\u4EF6\u6578\u3002","Get the value of the first element of a scene array variable, if it is a text (string).":"\u7372\u53D6\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u7B2C\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u6587\u672C(\u5B57\u7B26\u4E32)\u3002","Get the value of the first element of a scene array variable, if it is a number.":"\u7372\u53D6\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u7B2C\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u500B\u6578\u5B57\u3002","Get the value of the last element of a scene array variable, if it is a text (string).":"\u7372\u53D6\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u6700\u540E\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u6587\u672C(\u5B57\u7B26\u4E32)\u3002","Get the value of the last element of a scene array variable, if it is a number.":"\u7372\u53D6\u5834\u666F\u6578\u7D44\u8B8A\u91CF\u7684\u6700\u540E\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u500B\u6578\u5B57\u3002","Adds an existing variable at the end of a global array variable.":"\u5728\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u73FE\u6709\u8B8A\u91CF\u3002","Removes a variable at the specified index of a global array variable.":"\u79FB\u9664\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u6307\u5B9A\u7D22\u5F15\u8655\u7684\u8B8A\u91CF\u3002","Remove variable at index _PARAM1_ from global array variable _PARAM0_":"\u5F9E\u5168\u5C40\u6578\u7D44\u8B8A\u91CF _PARAM0_ \u4E2D\u522A\u9664\u7D22\u5F15 _PARAM1_ \u7684\u8B8A\u91CF","Adds a text (string) at the end of a global array variable.":"\u5728\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","Adds a number at the end of a global array variable.":"\u5728\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u6578\u5B57\u3002","Adds a boolean at the end of a global array variable.":"\u5728\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u4E00\u500B\u5E03\u723E\u503C\u3002","Compare the number of children in a global array variable.":"\u6BD4\u8F03\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u4E2D\u7684\u5B50\u9805\u6578\u3002","The number of children of the array variable _PARAM0_":"\u6578\u7D44\u8B8A\u91CF_PARAM0_ \u7684\u5B50\u9805\u6578","Value of the first element of a global array variable, if it is a text (string) variable.":"\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u7B2C\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u6587\u672C(\u5B57\u7B26\u4E32) \u8B8A\u91CF\u3002","Value of the first element of a global array variable, if it is a number variable":"\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u7B2C\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u500B\u6578\u5B57\u8B8A\u91CF","Value of the last element of a global array variable, if it is a text (string) variable.":"\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u6700\u540E\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u6587\u672C(\u5B57\u7B26\u4E32) \u8B8A\u91CF\u3002","Value of the last element of a global array variable, if it is a number variable":"\u5168\u5C40\u6578\u7D44\u8B8A\u91CF\u7684\u6700\u540E\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u500B\u6578\u5B57\u8B8A\u91CF","Number of children in a global array or structure variable":"\u5168\u5C40\u6578\u7D44\u6216\u7D50\u69CB\u8B8A\u91CF\u4E2D\u7684\u5B50\u7D1A\u6578","Array or structure variable":"\u6578\u7D44\u6216\u7D50\u69CB\u8B8A\u91CF","Number of children in a scene array or structure variable":"\u5834\u666F\u6578\u7D44\u6216\u7D50\u69CB\u8B8A\u91CF\u4E2D\u7684\u5B50\u7D1A\u6578","Number value of a scene variable":"\u5834\u666F\u8B8A\u91CF\u7684\u6578\u503C","Text of a scene variable":"\u5834\u666F\u8B8A\u91CF\u7684\u6587\u672C","Number value of a global variable":"\u5168\u5C40\u8B8A\u91CF\u7684\u6578\u503C","Name of the global variable":"\u5168\u5C40\u8B8A\u91CF\u7684\u540D\u7A31","Text of a global variable":"\u5168\u5C40\u8B8A\u91CF\u7684\u6587\u672C","Sprite are animated objects which can be used for most elements of a 2D game.":"\u7CBE\u9748\u662F\u52D5\u756B\u7269\u4EF6\uFF0C\u53EF\u4EE5\u7528\u65BC\u904A\u6232\u7684\u5927\u591A\u6578\u5143\u7D20\u3002","Animated object which can be used for most elements of a 2D game.":"\u53EF\u7528\u65BC\u904A\u6232\u7684\u5927\u591A\u6578\u5143\u7D20\u7684\u52D5\u756B\u7269\u4EF6\u3002","Sprite opacity":"\u7CBE\u9748\u4E0D\u900F\u660E\u5EA6","Change the opacity of a Sprite. 0 is fully transparent, 255 is opaque (default).":"\u66F4\u6539\u7CBE\u9748\u7684\u4E0D\u900F\u660E\u5EA6\u30020 \u662F\u5B8C\u5168\u900F\u660E\u7684\uFF0C255 \u662F\u4E0D\u900F\u660E\u7684(\u9ED8\u8A8D)\u3002","Change the animation":"\u66F4\u6539\u52D5\u756B","Change the animation of the object, using the animation number in the animations list.":"\u4F7F\u7528\u52D5\u756B\u5217\u8868\u4E2D\u7684\u52D5\u756B\u7DE8\u865F\u66F4\u6539\u7269\u4EF6\u7684\u52D5\u756B\u3002","Change the animation (by name)":"\u66F4\u6539\u52D5\u756B\uFF08\u6309\u540D\u7A31\uFF09","Change the animation of the object, using the name of the animation.":"\u4F7F\u7528\u52D5\u756B\u7684\u540D\u7A31\u66F4\u6539\u7269\u4EF6\u7684\u52D5\u756B\u3002","Set animation of _PARAM0_ to _PARAM1_":"\u5C07 _PARAM0_ \u7684\u52D5\u756B\u8A2D\u5B9A\u70BA _PARAM1_","Change the direction":"\u66F4\u6539\u65B9\u5411","Change the direction of the object.\nIf the object is set to automatically rotate, the direction is its angle.\nIf the object is in 8 directions mode, the valid directions are 0..7":"\u6539\u8B8A\u7269\u4EF6\u7684\u65B9\u5411\u3002\n\u5982\u679C\u7269\u4EF6\u88AB\u8A2D\u5B9A\u70BA\u81EA\u52D5\u65CB\u8F49\uFF0C\u5247\u65B9\u5411\u662F\u5176\u89D2\u5EA6\u3002\n\u5982\u679C\u7269\u4EF6\u8655\u4E8E8\u65B9\u5411\u6A21\u5F0F\uFF0C\u5247\u6709\u6548\u65B9\u5411\u70BA0..7","the direction":"\u65B9\u5411","Current frame":"\u7576\u524D\u5E40","Modify the current frame of the object":"\u8B8A\u66F4\u7269\u4EF6\u7684\u7576\u524D\u5E40","the animation frame":"\u52D5\u756B\u5E40","Play the animation":"\u64AD\u653E\u52D5\u756B","Play the animation of the object":"\u64AD\u653E\u7269\u4EF6\u7684\u52D5\u756B","Play the animation of _PARAM0_":"\u64AD\u653E_PARAM0_ \u7684\u52D5\u756B","Modify the animation speed scale (1 = the default speed, >1 = faster and <1 = slower).":"\u66F4\u6539\u52D5\u756B\u901F\u5EA6\u6BD4\u4F8B\uFF081=\u9ED8\u8A8D\u901F\u5EA6\uFF0C>1 =\u66F4\u5FEB \uFF0C<1 =\u66F4\u6162\uFF09","Object to be rotated":"\u7269\u4EF6\u88AB\u65CB\u8F49","Angular speed (degrees per second)":"\u89D2\u901F\u5EA6 ( \u55AE\u4F4D\u70BA\u5EA6\u6BCF\u79D2 )","Modify the scale of the width of an object.":"\u4FEE\u6539\u7269\u4EF6\u7684\u5BEC\u5EA6\u7684\u6BD4\u4F8B","Modify the scale of the height of an object.":"\u4FEE\u6539\u7269\u4EF6\u7684\u9AD8\u5EA6\u7684\u6BD4\u4F8B","Change the width of a Sprite object.":"\u66F4\u6539\u7CBE\u9748\u7269\u4EF6\u7684\u5BEC\u5EA6\u3002","Compare the width of a Sprite object.":"\u6BD4\u8F03Sprite \u7269\u4EF6\u7684\u5BEC\u5EA6\u3002","Change the height of a Sprite object.":"\u66F4\u6539\u7CBE\u9748\u7269\u4EF6\u7684\u9AD8\u5EA6\u3002","Compare the height of a Sprite object.":"\u6BD4\u8F03Sprite \u7269\u4EF6\u7684\u9AD8\u5EA6","Current animation":"\u7576\u524D\u52D5\u756B","Compare the number of the animation played by the object.":"\u6BD4\u8F03\u7269\u4EF6\u6240\u64AD\u653E\u52D5\u756B\u7684\u6578\u91CF\u3002","Current animation name":"\u7576\u524D\u52D5\u756B\u540D\u7A31","Check the animation played by the object.":"\u6AA2\u67E5\u7269\u4EF6\u64AD\u653E\u7684\u52D5\u756B\u3002","The animation of _PARAM0_ is _PARAM1_":"_PARAM0_ \u7684\u52D5\u756B\u662F _PARAM1_","Current direction":"\u7576\u524D\u65B9\u5411","Compare the direction of the object. If 8 direction mode is activated for the sprite, the value taken for direction will be from 0 to 7. Otherwise, the direction is in degrees.":"\u6BD4\u8F03\u7269\u4EF6\u7684\u65B9\u5411\u3002\u5982\u679C\u7CBE\u9748\u76848\u65B9\u5411\u6A21\u5F0F\u5DF2\u6FC0\u6D3B\uFF0C\u65B9\u5411\u7684\u503C\u70BA0\u52307 . \u5426\u5247\uFF0C\u65B9\u5411\u662F\u5EA6.","Compare the index of the current frame in the animation displayed by the specified object. The first frame in an animation starts at index 0.":"\u6BD4\u8F03\u6307\u5B9A\u7269\u4EF6\u986F\u793A\u7684\u52D5\u756B\u4E2D\u7576\u524D\u5E40\u7684\u7D22\u5F15\u3002\u52D5\u756B\u4E2D\u7684\u7B2C\u4E00\u5E40\u59CB\u4E8E\u7D22\u5F150\u3002","Compare the scale of the width of an object.":"\u6BD4\u8F03\u7269\u4EF6\u7684\u5BEC\u5EA6\u7684\u6BD4\u4F8B","Compare the scale of the height of an object.":"\u6BD4\u8F03\u7269\u4EF6\u7684\u9AD8\u5EA6\u7684\u6BD4\u4F8B","Compare the opacity of a Sprite, between 0 (fully transparent) to 255 (opaque).":"\u6BD4\u8F03\u7CBE\u9748\u7684\u4E0D\u900F\u660E\u5EA6\uFF0C\u4ECB\u4E8E 0 (\u5B8C\u5168\u900F\u660E) \u5230 255 (\u4E0D\u900F\u660E)\u3002","Blend mode":"\u6DF7\u5408\u6A21\u5F0F","Compare the number of the blend mode currently used by an object":"\u6BD4\u8F03\u7269\u4EF6\u7576\u524D\u4F7F\u7528\u7684\u6DF7\u5408\u6A21\u5F0F","the number of the current blend mode":"\u7576\u524D\u6DF7\u5408\u6A21\u5F0F\u7684\u7DE8\u865F","Change the tint of an object. The default color is white.":"\u66F4\u6539\u7269\u4EF6\u7684\u984F\u8272\u3002\u9ED8\u8A8D\u984F\u8272\u70BA\u767D\u8272\u3002","Change the number of the blend mode of an object.\nThe default blend mode is 0 (Normal).":"\u66F4\u6539\u7269\u4EF6\u6DF7\u5408\u6A21\u5F0F\u7684\u7DE8\u865F\u3002\n\u9ED8\u8A8D\u6DF7\u5408\u6A21\u5F0F\u70BA0(\u6B63\u5E38)\u3002","Change Blend mode of _PARAM0_ to _PARAM1_":"_PARAM0_ \u6539\u8B8A\u6DF7\u5408\u6A21\u5F0F\u70BA _PARAM1_","X position of a point":"\u9EDE\u7684X\u5750\u6A19","Name of the point":"\u9EDE\u7684\u540D\u7A31","Y position of a point":"\u9EDE\u7684Y\u5750\u6A19","Direction of the object":"\u7269\u4EF6\u7684\u65B9\u5411","Animation of the object":"\u7269\u4EF6\u7684\u52D5\u756B","Name of the animation of the object":"\u66AB\u505C\u7269\u4EF6\u7684\u7576\u524D\u52D5\u756B","Current frame of the animation of the object":"\u7269\u4EF6\u52D5\u756B\u7684\u7576\u524D\u5E40","Number of frames":"\u5E40\u6578","Number of frames in the current animation of the object":"\u7269\u4EF6\u7576\u524D\u52D5\u756B\u4E2D\u7684\u5E40\u6578","Scale of the width of an object":"\u7269\u4EF6\u7684\u5BEC\u5EA6\u7684\u6BD4\u503C","Scale of the height of an object":"\u7269\u4EF6\u7684\u9AD8\u5EA6\u7684\u6BD4\u503C","Collision (Pixel perfect)":"\u78B0\u649E \uFF08\u50CF\u7D20\u5B8C\u7F8E\uFF09","The condition is true if there is a collision between the two objects.\nThe test is pixel-perfect.":"\u5982\u679C\u6709\u5169\u500B\u7269\u9AD4\u4E4B\u9593\u7684\u78B0\u649E\u689D\u4EF6\u70BA\u771F. \n\u6E2C\u8A66\u662F\u5B8C\u7F8E\u7684\u3002","_PARAM0_ is in collision with _PARAM1_ (pixel perfect)":"_PARAM0_ \u8207 _PARAM1_ \u78B0\u649E(\u50CF\u7D20\u5B8C\u7F8E)","Game window and resolution":"\u904A\u6232\u7A97\u53E3\u548C\u5206\u8FA8\u7387","De/activate fullscreen":"\u7981/\u6FC0\u6D3B \u5168\u5C4F","This action activates or deactivates fullscreen.":"\u9019\u4E00\u884C\u52D5\u555F\u52D5\u6216\u95DC\u9589\u5168\u5C4F\u3002","Activate fullscreen: _PARAM1_ (keep aspect ratio: _PARAM2_)":"\u6FC0\u6D3B\u5168\u5C4F \uFE30 _PARAM1_ (\u4FDD\u6301\u7E31\u6A6B\u6BD4 \uFE30 _PARAM2_)","Activate fullscreen":"\u6FC0\u6D3B\u5168\u5C4F","Keep aspect ratio (HTML5 games only, yes by default)":"\u4FDD\u6301\u7E31\u6A6B\u6BD4 \uFF08\u50C5HTML5 \u904A\u6232,yes\u70BA\u9ED8\u8A8D\uFF09","Fullscreen activated?":"\u5168\u5C4F\u5DF2\u6FC0\u6D3B\uFF1F","Check if the game is currently in fullscreen.":"\u6AA2\u67E5\u904A\u6232\u662F\u5426\u7576\u524D\u5168\u5C4F\u3002","The game is in fullscreen":"\u904A\u6232\u5728\u5168\u5C4F\u4E2D","Window's margins":"\u7A97\u53E3\u7684\u908A\u8DDD","This action changes the margins, in pixels, between the game frame and the window borders.":"\u9019\u500B\u52D5\u4F5C\u6703\u6539\u8B8A\u904A\u6232\u6846\u67B6\u548C\u7A97\u53E3\u908A\u754C\u4E4B\u9593\u7684\u50CF\u7D20\u9593\u8DDD\u3002","Set margins of game window to _PARAM1_;_PARAM2_;_PARAM3_;_PARAM4_":"\u8A2D\u5B9A\u904A\u6232\u7A97\u53E3\u7684\u908A\u8DDD _ PARAM1_;_PARAM2_;_PARAM3_;_PARAM4 _","Game resolution":"\u904A\u6232\u5206\u8FA8\u7387","Changes the resolution of the game, effectively changing the game area size. This won't change the size of the window in which the game is running.":"\u66F4\u6539\u904A\u6232\u7684\u5206\u8FA8\u7387\uFF0C\u6709\u6548\u6539\u8B8A\u904A\u6232\u5340\u57DF\u5927\u5C0F\u3002 \u9019\u4E0D\u6703\u6539\u8B8A\u904A\u6232\u904B\u884C\u7684\u7A97\u53E3\u7684\u5927\u5C0F\u3002","Set game resolution to _PARAM1_x_PARAM2_":"\u5C07\u904A\u6232\u5206\u8FA8\u7387\u8A2D\u5B9A\u70BA _PARAM1_x_PARAM2_","Game window size":"\u904A\u6232\u7A97\u53E3\u5927\u5C0F","Changes the size of the game window. Note that this will only work on platform supporting this operation: games running in browsers or on mobile phones can not update their window size. Game resolution can still be updated.":"\u66F4\u6539\u904A\u6232\u7A97\u53E3\u7684\u5927\u5C0F\u3002 \u8ACB\u6CE8\u610F\uFF0C\u9019\u53EA\u80FD\u5728\u652F\u6301\u6B64\u64CD\u4F5C\u7684\u5E73\u81FA\u4E0A\u904B\u884C\uFF1A\u5728\u700F\u89BD\u5668\u6216\u624B\u6A5F\u4E0A\u904B\u884C\u7684\u904A\u6232\u7121\u6CD5\u66F4\u65B0\u5176\u7A97\u53E3\u5927\u5C0F\u3002 \u904A\u6232\u5206\u8FA8\u7387\u4ECD\u7136\u53EF\u4EE5\u66F4\u65B0\u3002","Set game window size to _PARAM1_x_PARAM2_ (also update game resolution: _PARAM3_)":"\u8A2D\u5B9A\u904A\u6232\u7A97\u53E3\u5927\u5C0F\u70BA _PARAM1_x_PARAM2_ (\u4E5F\u66F4\u65B0\u904A\u6232\u5206\u8FA8\u7387\uFF1A_PARAM3_)","Also update the game resolution? If not, the game will be stretched or reduced to fit in the window.":"\u4E5F\u66F4\u65B0\u904A\u6232\u5206\u8FA8\u7387\uFF1F\u5982\u679C\u6C92\u6709\uFF0C\u904A\u6232\u5C07\u88AB\u62C9\u4F38\u6216\u7E2E\u5C0F\u5230\u9069\u5408\u7A97\u53E3\u3002","Center the game window on the screen":"\u5728\u5C4F\u5E55\u4E0A\u5C45\u4E2D\u904A\u6232\u7A97\u53E3","This action centers the game window on the screen. This only works on Windows, macOS and Linux (not when the game is executed in a web-browser or on iOS/Android).":"\u6B64\u64CD\u4F5C\u5C07\u904A\u6232\u7A97\u53E3\u7F6E\u4E8E\u5C4F\u5E55\u4E2D\u9593\u3002 \u9019\u53EA\u9069\u7528\u4E8EWindows\u3001 macOS \u548C Linux(\u4E0D\u662F\u7576\u904A\u6232\u5728\u7DB2\u9801\u700F\u89BD\u5668\u6216\u5728 iOS/ Android\u4E2D\u57F7\u884C)\u3002","Center the game window":"\u5C45\u4E2D\u904A\u6232\u7A97\u53E3","Game resolution resize mode":"\u904A\u6232\u5206\u8FA8\u7387\u8ABF\u6574\u5927\u5C0F\u6A21\u5F0F","Set if the width or the height of the game resolution should be changed to fit the game window - or if the game resolution should not be updated automatically.":"\u5982\u679C\u904A\u6232\u5206\u8FA8\u7387\u7684\u5BEC\u5EA6\u6216\u9AD8\u5EA6\u88AB\u66F4\u6539\u4EE5\u9069\u5408\u904A\u6232\u7A97\u53E3 - \u6216\u8005\u5982\u679C\u904A\u6232\u5206\u8FA8\u7387\u4E0D\u61C9\u81EA\u52D5\u66F4\u65B0\uFF0C\u5247\u8A2D\u5B9A\u3002","Set game resolution resize mode to _PARAM1_":"\u8A2D\u5B9A\u904A\u6232\u5206\u8FA8\u7387\u8ABF\u6574\u6A21\u5F0F\u70BA _PARAM1_","Resize mode":"\u8ABF\u6574\u5927\u5C0F\u6A21\u5F0F","Empty to disable resizing. \"adaptWidth\" will update the game width to fit in the window or screen. \"adaptHeight\" will do the same but with the game height.":"\u70BA\u7A7A\u4EE5\u7981\u7528\u8ABF\u6574\u5927\u5C0F\u3002 \u201C adaptWidth\u201D\u5C07\u66F4\u65B0\u904A\u6232\u5BEC\u5EA6\u4EE5\u9069\u5408\u7A97\u53E3\u6216\u5C4F\u5E55\u3002 \u201C adaptHeight\u201D\u5C07\u8207\u904A\u6232\u9AD8\u5EA6\u76F8\u540C\u3002","Automatically adapt the game resolution":"\u81EA\u52D5\u8ABF\u6574\u904A\u6232\u5206\u8FA8\u7387","Set if the game resolution should be automatically adapted when the game window or screen size change. This will only be the case if the game resolution resize mode is configured to adapt the width or the height of the game.":"\u8A2D\u5B9A\u7576\u904A\u6232\u7A97\u53E3\u6216\u5C4F\u5E55\u5927\u5C0F\u6539\u8B8A\u6642\u662F\u5426\u81EA\u52D5\u8ABF\u6574\u904A\u6232\u5206\u8FA8\u7387\u3002 \u53EA\u6709\u7576\u904A\u6232\u5206\u8FA8\u7387\u8ABF\u6574\u6A21\u5F0F\u88AB\u914D\u7F6E\u70BA\u9069\u61C9\u904A\u6232\u7684\u5BEC\u5EA6\u6216\u9AD8\u5EA6\u6642\u624D\u6703\u51FA\u73FE\u9019\u7A2E\u60C5\u6CC1\u3002","Automatically adapt the game resolution: _PARAM1_":"\u81EA\u52D5\u8ABF\u6574\u904A\u6232\u5206\u8FA8\u7387\uFF1A_PARAM1_","Update resolution during the game to fit the screen or window size?":"\u5728\u904A\u6232\u4E2D\u66F4\u65B0\u5206\u8FA8\u7387\u4EE5\u9069\u61C9\u5C4F\u5E55\u6216\u7A97\u53E3\u5927\u5C0F\uFF1F","Window's icon":"Windows\u5716\u6A19","This action changes the icon of the game's window.":"\u6B64\u64CD\u4F5C\u5C07\u66F4\u6539\u904A\u6232\u7A97\u53E3\u7684\u5716\u6A19\u3002","Use _PARAM1_ as the icon for the game's window.":"\u4F7F\u7528 _ PARAM1 \u76E1\u53EF\u80FD\u904A\u6232\u7A97\u53E3\u7684\u5716\u6A19\u3002","Name of the image to be used as the icon":"\u7528\u4F5C\u5716\u6A19\u7684\u5716\u50CF\u7684\u540D\u7A31","Window's title":"\u7A97\u53E3\u7684\u6A19\u984C","This action changes the title of the game's window.":"\u6B64\u64CD\u4F5C\u66F4\u6539\u904A\u6232\u7A97\u53E3\u7684\u6A19\u984C\u3002","Change window title to _PARAM1_":"\u5C07\u7A97\u53E3\u6A19\u984C\u66F4\u6539\u70BA _PARAM1_","New title":"\u65B0\u6A19\u984C","Width of the scene window":"\u5834\u666F\u7A97\u53E3\u7684\u5BEC\u5EA6","Width of the scene window (or scene canvas for HTML5 games)":"\u5834\u666F\u7A97\u53E3\u7684\u5BEC\u5EA6 (\u6216 HTML5 \u904A\u6232\u7684\u5834\u666F\u756B\u5E03)","Height of the scene window":"\u5834\u666F\u7A97\u53E3\u7684\u9AD8\u5EA6","Height of the scene window (or scene canvas for HTML5 games)":"\u5834\u666F\u7A97\u53E3\u7684\u9AD8\u5EA6\uFF08\u6216HTML5\u904A\u6232\u7684\u5834\u666F\u756B\u5E03\uFF09","Width of the screen/page":"\u5C4F\u5E55/\u9801\u9762\u7684\u5BEC\u5EA6","Width of the screen (or the page for HTML5 games in browser)":"\u5C4F\u5E55\u5BEC\u5EA6\uFF08\u6216\u700F\u89BD\u5668\u4E2D\u7684HTML5\u904A\u6232\u9801\u9762\uFF09","Height of the screen/page":"\u5C4F\u5E55/\u9801\u9762\u7684\u9AD8\u5EA6","Height of the screen (or the page for HTML5 games in browser)":"\u5C4F\u5E55\u9AD8\u5EA6\uFF08\u6216\u700F\u89BD\u5668\u4E2D\u7684HTML5\u904A\u6232\u9801\u9762\uFF09","Color depth":"\u984F\u8272\u6DF1\u5EA6","Timers and time":"\u8A08\u6642\u5668\u8207\u6642\u9593","Value of a scene timer":"\u5834\u666F\u8A08\u6642\u5668\u7684\u503C","Test the elapsed time of a scene timer.":"\u6E2C\u8A66\u5834\u666F\u8A08\u6642\u5668\u7D93\u904E\u7684\u6642\u9593\u3002","The timer _PARAM2_ is greater than _PARAM1_ seconds":"\u8A08\u6642\u5668 _PARAM2_ \u5927\u4E8E _PARAM1_ \u79D2","Time in seconds":"\u4EE5\u79D2\u70BA\u55AE\u4F4D\u7684\u6642\u9593","Timer's name":"\u8A08\u6642\u5668\u7684\u540D\u7A31","Compare the elapsed time of a scene timer. This condition doesn't start the timer and will always be false if the timer was not started previously (whatever the comparison being made).":"Compare the elapsed time of a scene timer. This condition doesn't start the timer and will always be false if the timer was not started previously (whatever the comparison being made).","The timer _PARAM1_ _PARAM2_ _PARAM3_ seconds":"\u5B9A\u6642\u5668 _PARAM1_ _PARAM2_ _PARAM3_ \u79D2","Time scale":"\u6642\u9593\u6BD4\u4F8B","Compare the time scale of the scene.":"\u6BD4\u8F03\u5834\u666F\u7684\u6642\u9593\u6BD4\u4F8B\u3002","the time scale of the scene":"\u5834\u666F\u7684\u6642\u9593\u6BD4\u4F8B","Scene timer paused":"\u5834\u666F\u8A08\u6642\u5668\u66AB\u505C","Test if the specified scene timer is paused.":"\u6E2C\u8A66\u6307\u5B9A\u5834\u666F\u8A08\u6642\u5668\u662F\u5426\u5DF2\u66AB\u505C\u3002","The timer _PARAM1_ is paused":"\u8A08\u6642\u5668 _PARAM1_ \u5DF2\u66AB\u505C","Start (or reset) a scene timer":"\u555F\u52D5(\u6216\u91CD\u7F6E) \u5834\u666F\u5B9A\u6642\u5668","Reset the specified scene timer, if the timer doesn't exist it's created and started.":"\u91CD\u7F6E\u6307\u5B9A\u7684\u5834\u666F\u8A08\u6642\u5668\uFF0C\u5982\u679C\u8A08\u6642\u5668\u4E0D\u5B58\u5728\uFF0C\u5B83\u5DF2\u5275\u5EFA\u5E76\u555F\u52D5\u3002","Start (or reset) the timer _PARAM1_":"\u555F\u52D5(\u6216\u91CD\u7F6E) \u8A08\u6642\u5668 _PARAM1_","Pause a scene timer":"\u66AB\u505C\u5834\u666F\u8A08\u6642\u5668","Pause a scene timer.":"\u66AB\u505C\u5834\u666F\u8A08\u6642\u5668\u3002","Pause timer _PARAM1_":"\u66AB\u505C\u8A08\u6642\u5668 _PARAM1_","Unpause a scene timer":"\u53D6\u6D88\u66AB\u505C\u5834\u666F\u8A08\u6642\u5668","Unpause a scene timer.":"\u53D6\u6D88\u66AB\u505C\u5834\u666F\u8A08\u6642\u5668\u3002","Unpause timer _PARAM1_":"\u53D6\u6D88\u66AB\u505C\u8A08\u6642\u5668 _PARAM1_","Delete a scene timer":"\u522A\u9664\u5834\u666F\u8A08\u6642\u5668","Delete a scene timer from memory.":"\u5F9E\u5167\u5B58\u4E2D\u522A\u9664\u5834\u666F\u8A08\u6642\u5668\u3002","Delete timer _PARAM1_ from memory":"\u5F9E\u5167\u5B58\u4E2D\u522A\u9664\u8A08\u6642\u5668 _PARAM1_","Change the time scale of the scene.":"\u66F4\u6539\u5834\u666F\u7684\u6642\u9593\u6BD4\u4F8B\u3002","Set the time scale of the scene to _PARAM1_":"\u5C07\u5834\u666F\u7684\u6642\u9593\u6BD4\u4F8B\u8A2D\u5B9A\u70BA _PARAM1_","Wait X seconds":"\u7B49\u5F85 X \u79D2","Waits a number of seconds before running the next actions (and sub-events).":"\u5728\u904B\u884C\u4E0B\u4E00\u500B\u52D5\u4F5C(\u548C\u5B50\u6D3B\u52D5)\u4E4B\u524D\u7B49\u5F85\u5E7E\u79D2\u9418\u3002","Wait _PARAM0_ seconds":"\u7B49\u5F85 _PARAM0_ \u79D2","Time to wait in seconds":"\u7B49\u5F85\u6642\u9593(\u79D2)","Time elapsed since the last frame":"\u4E0A\u4E00\u5E40\u7D50\u675F\u540E\u7D93\u904E\u7684\u6642\u9593","Time elapsed since the last frame rendered on screen":"\u5C4F\u5E55\u4E0A\u6700\u540E\u4E00\u5E40\u6E32\u67D3\u540E\u7D93\u904E\u7684\u6642\u9593","Scene timer value":"\u5834\u666F\u8A08\u6642\u5668\u503C","Value of a scene timer (in seconds)":"\u5834\u666F\u8A08\u6642\u5668\u7684\u503C\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09","Time elapsed since the beginning of the scene (in seconds).":"\u81EA\u5834\u666F\u958B\u59CB\u4EE5\u4F86\u7D93\u904E\u7684\u6642\u9593\uFF08\u4EE5\u79D2\u70BA\u55AE\u4F4D\uFF09\u3002","Returns the time scale of the scene.":"\u8FD4\u56DE\u5834\u666F\u7684\u6642\u9593\u6BD4\u4F8B\u3002","Gives the current time":"\u7372\u53D6\u7576\u524D\u6642\u9593","- Hour of the day: \"hour\"\n- Minutes: \"min\"\n- Seconds: \"sec\"\n- Day of month: \"mday\"\n- Months since January: \"mon\"\n- Year since 1900: \"year\"\n- Days since Sunday: \"wday\"\n- Days since Jan 1st: \"yday\"\n- Timestamp (ms): \"timestamp\"":"- \u5C0F\u6642\uFF1A\u5C0F\u6642\n- \u5206\u9418\uFF1A\u5206\u9418\n- \u79D2\uFF1A\u79D2\n- \u6708\u4E2D\u7684\u65E5\uFF1Amday\n- \u4E00\u6708\u4EE5\u4F86\u7684\u6708\u4EFD\uFF1Amon\n- \u81EA1900\u5E74\u4EE5\u4F86\u7684\u5E74\u4EFD\uFF1Ayear\n- \u81EA\u661F\u671F\u65E5\u4EE5\u4F86\u7684\u65E5\u6578\uFF1Awday\n- \u81EA1\u67081\u65E5\u4EE5\u4F86\u7684\u65E5\u6578\uFF1Ayday\n- \u6642\u9593\u6233\u8A18\uFF08\u6BEB\u79D2\uFF09\uFF1Atimestamp","Existence of a group":"\u5B58\u5728\u7684\u7D44","Check if an element (example : PlayerState/CurrentLevel) exists in the stored data.\nSpaces are forbidden in element names.":"\u6AA2\u67E5\u662F\u5426\u5728\u5B58\u5132\u7684\u8CC7\u6599\u4E2D\u5B58\u5728\u5143\u7D20 (\u4F8B\u5982: PlayerState/CurrentLevel) \u3002\n\u5143\u7D20\u540D\u4E2D\u7981\u7528\u7A7A\u683C\u3002","_PARAM1_ exists in storage _PARAM0_":"_PARAM1_ \u5B58\u5728\u4E8E\u5B58\u5132 _PARAM0_ \u4E2D","Storage name":"\u5B58\u5132\u540D\u7A31","Group":"\u7D44","Manually preload a storage in memory":"\u624B\u52D5\u9810\u52A0\u8F09\u5B58\u5132\u5230\u5167\u5B58\u4E2D","Forces the specified storage to be loaded and kept in memory, allowing faster reads/writes. However, it requires manual management: if you use this action, you *must* also unload the storage manually when it's no longer needed to ensure data is persisted.\n\nUnless you have a specific performance need, avoid using this action. The system already handles loading/unloading automatically.":"\u5F37\u5236\u6307\u5B9A\u7684\u5B58\u5132\u88AB\u52A0\u8F09\u4E26\u4FDD\u6301\u5728\u5167\u5B58\u4E2D\uFF0C\u4EE5\u4FBF\u52A0\u5FEB\u8B80\u53D6/\u5BEB\u5165\u901F\u5EA6\u3002\u7136\u800C\uFF0C\u9019\u9700\u8981\u624B\u52D5\u7BA1\u7406\uFF1A\u5982\u679C\u60A8\u4F7F\u7528\u6B64\u64CD\u4F5C\uFF0C\u60A8*\u5FC5\u9808*\u5728\u4E0D\u518D\u9700\u8981\u6642\u624B\u52D5\u5378\u8F09\u5B58\u5132\uFF0C\u4EE5\u78BA\u4FDD\u6578\u64DA\u6301\u4E45\u5316\u3002\n\n\u9664\u975E\u60A8\u6709\u7279\u5B9A\u7684\u6027\u80FD\u9700\u6C42\uFF0C\u5426\u5247\u61C9\u907F\u514D\u4F7F\u7528\u6B64\u64CD\u4F5C\u3002\u7CFB\u7D71\u5DF2\u7D93\u81EA\u52D5\u8655\u7406\u52A0\u8F09/\u5378\u8F09\u3002","Load data storage _PARAM0_ in memory":"\u5728\u5167\u5B58\u4E2D\u8F09\u5165\u6578\u64DA\u5B58\u5132 _PARAM0_","Manually unload and persist a storage":"\u624B\u52D5\u5378\u8F09\u4E26\u6301\u4E45\u5316\u5B58\u5132","Close the specified storage previously loaded in memory, saving all changes made.":"\u95DC\u9589\u5148\u524D\u5728\u5167\u5B58\u4E2D\u52A0\u8F09\u7684\u6307\u5B9A\u5B58\u5132\uFF0C\u4FDD\u5B58\u6240\u6709\u6240\u505A\u7684\u66F4\u6539\u3002","Unload and persist data storage _PARAM0_":"\u5378\u8F09\u4E26\u6301\u4E45\u5316\u6578\u64DA\u5B58\u5132 _PARAM0_","Save a value":"\u4FDD\u5B58\u4E00\u500B\u503C","Save the result of the expression in the stored data, in the specified element.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"\u5C07\u8868\u9054\u5F0F\u7684\u7D50\u679C\u4FDD\u5B58\u5728\u5B58\u5132\u8CC7\u6599\u7684\u6307\u5B9A\u5143\u7D20\u4E2D\u3002\n\u4F7F\u7528/(\u793A\u4F8B:Root/Level/Current)\u6307\u5B9A\u901A\u5411\u5143\u7D20\u7684\u7D50\u69CB\n\u5143\u7D20\u540D\u7A31\u4E2D\u7981\u6B62\u4F7F\u7528\u7A7A\u683C\u3002","Save value _PARAM2_ in _PARAM1_ of storage _PARAM0_":"\u5C07 _PARAM2_ \u4FDD\u5B58\u5728\u5B58\u5132 _PARAM0_ \u7684 _PARAM1_ \u4E2D","Save a text":"\u4FDD\u5B58\u6587\u672C","Save the text in the specified storage, in the specified element.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"\u5C07\u6587\u672C\u4FDD\u5B58\u5728\u6307\u5B9A\u7684\u5B58\u5132\u4E2D\u7684\u6307\u5B9A\u5143\u7D20\u4E2D\u3002\n\u4F7F\u7528/(\u4F8B\u5982\uFF1ARoot/Level/Current)\u6307\u5B9A\u6307\u5411\u5143\u7D20\u7684\u7D50\u69CB\n\u5143\u7D20\u540D\u7A31\u4E2D\u7981\u6B62\u4F7F\u7528\u7A7A\u683C\u3002","Save text _PARAM2_ in _PARAM1_ of storage _PARAM0_":"\u5C07 _PARAM2_ \u4FDD\u5B58\u5728\u5B58\u5132 _PARAM0_ \u7684 _PARAM1_ \u4E2D","Load a value":"\u52A0\u8F09\u4E00\u500B\u503C","Load the value saved in the specified element and store it in a scene variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"\u52A0\u8F09\u4FDD\u5B58\u5728\u6307\u5B9A\u5143\u7D20\u4E2D\u7684\u503C\uFF0C\u5E76\u5C07\u5176\u5B58\u5132\u5728\u5834\u666F\u8B8A\u91CF\u4E2D\u3002\n\u4F7F\u7528/(\u793A\u4F8B:Root/Level/Current)\u6307\u5B9A\u901A\u5411\u5143\u7D20\u7684\u7D50\u69CB\n\u5143\u7D20\u540D\u7A31\u4E2D\u7981\u6B62\u4F7F\u7528\u7A7A\u683C\u3002","Load _PARAM1_ from storage _PARAM0_ and store value in _PARAM3_":"\u5F9E\u5B58\u5132\u5668 _PARAM0_ \u52A0\u8F09 _PARAM1_ \u5E76\u5C07\u503C\u5B58\u5132\u5728 _PARAM3_ \u4E2D","Load the value saved in the specified element and store it in a variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"\u52A0\u8F09\u4FDD\u5B58\u5728\u6307\u5B9A\u5143\u7D20\u4E2D\u7684\u503C\uFF0C\u5E76\u5C07\u5176\u5B58\u5132\u5728\u8B8A\u91CF\u4E2D\u3002\n\u4F7F\u7528/(\u793A\u4F8B:Root/Level/Current)\u6307\u5B9A\u901A\u5411\u5143\u7D20\u7684\u7D50\u69CB\n\u5143\u7D20\u540D\u7A31\u4E2D\u7981\u6B62\u4F7F\u7528\u7A7A\u683C\u3002","Load a text":"\u52A0\u8F09\u6587\u672C","Load the text saved in the specified element and store it in a scene variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"\u52A0\u8F09\u4FDD\u5B58\u5728\u6307\u5B9A\u5143\u7D20\u4E2D\u7684\u6587\u672C\uFF0C\u5E76\u5C07\u5176\u5B58\u5132\u5728\u4E00\u500B\u5834\u666F\u8B8A\u91CF\u4E2D\u3002\n\u4F7F\u7528/(\u793A\u4F8B:Root/Level/Current)\u6307\u5B9A\u901A\u5411\u5143\u7D20\u7684\u7D50\u69CB\n\u5143\u7D20\u540D\u7A31\u4E2D\u7981\u6B62\u4F7F\u7528\u7A7A\u683C\u3002","Load _PARAM1_ from storage _PARAM0_ and store as text in _PARAM3_":"\u5F9E\u5B58\u5132\u5668 _PARAM0_ \u52A0\u8F09 _PARAM1_ \u5E76\u5C07\u5176\u4F5C\u70BA\u6587\u672C\u5B58\u5132\u5728 _PARAM3_ \u4E2D","Load the text saved in the specified element and store it in a variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"\u52A0\u8F09\u4FDD\u5B58\u5728\u6307\u5B9A\u5143\u7D20\u4E2D\u7684\u6587\u672C\uFF0C\u5E76\u5C07\u5176\u5B58\u5132\u5728\u8B8A\u91CF\u4E2D\u3002\n\u4F7F\u7528/(\u793A\u4F8B:Root/Level/Current)\u6307\u5B9A\u901A\u5411\u5143\u7D20\u7684\u7D50\u69CB\n\u5143\u7D20\u540D\u7A31\u4E2D\u7981\u6B62\u4F7F\u7528\u7A7A\u683C\u3002","Delete an element":"\u522A\u9664\u5143\u7D20","This action deletes the specified element from the specified storage.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"\u6B64\u52D5\u4F5C\u5C07\u5F9E\u6307\u5B9A\u5B58\u5132\u4E2D\u522A\u9664\u6307\u5B9A\u7684\u5143\u7D20\u3002\n\u6307\u5B9A\u5C0E\u81F4\u5143\u7D20\u7684\u7D50\u69CB\u4F7F\u7528 / (\u4F8B\u5982: Root/Level/Current)\n\u5143\u7D20\u540D\u4E2D\u7981\u6B62\u7A7A\u683C\u3002","Delete _PARAM1_ from storage _PARAM0_":"\u5F9E\u5B58\u5132 _PARAM0_ \u522A\u9664 _PARAM1_","Clear a storage":"\u6E05\u9664\u5B58\u5132","Clear the specified storage, removing all data saved in it.":"\u6E05\u9664\u6307\u5B9A\u7684\u5B58\u5132\uFF0C\u79FB\u9664\u4FDD\u5B58\u7684\u6240\u6709\u8CC7\u6599\u3002","Delete storage _PARAM0_":"\u522A\u9664\u5B58\u5132 _PARAM0_","A storage exists":"\u5B58\u5132\u5DF2\u5B58\u5728","Test if the specified storage exists.":"\u6E2C\u8A66\u6307\u5B9A\u5B58\u5132\u662F\u5426\u5B58\u5728\u3002","Storage _PARAM0_ exists":"\u5B58\u5132 _PARAM0_ \u5B58\u5728","Execute a command":"\u57F7\u884C\u547D\u4EE4","This action executes the specified command.":"\u9019\u500B\u52D5\u4F5C\u57F7\u884C\u6307\u5B9A\u7684\u547D\u4EE4\u3002","Execute _PARAM0_":"\u57F7\u884C _PARAM0_","Command":"\u547D\u4EE4","Conversion":"\u8F49\u63DB","Text > Number":"\u6587\u5B57 > \u6578\u5B57","Convert the text to a number":"\u5C07\u6587\u672C\u8F49\u63DB\u70BA\u6578\u5B57","Text to convert to a number":"\u8981\u8F49\u63DB\u6210\u6578\u5B57\u7684\u6587\u672C","Number > Text":"\u6578\u5B57 > \u6587\u5B57","Convert the result of the expression to text":"\u8F49\u63DB\u8868\u9054\u5F0F\u7684\u7D50\u679C\u81F3\u6587\u672C","Expression to be converted to text":"\u8981\u8F49\u63DB\u70BA\u6587\u672C\u7684\u8868\u9054\u5F0F","Number > Text (without scientific notation)":"\u6578\u5B57 > \u6587\u5B57\uFF08\u7121\u79D1\u5B78\u8A18\u6578\u6CD5\uFF09","Convert the result of the expression to text, without using the scientific notation":"\u5C07\u8868\u9054\u5F0F\u7684\u7D50\u679C\u8F49\u63DB\u70BA\u6587\u672C\uFF0C\u800C\u4E0D\u4F7F\u7528\u79D1\u5B78\u8A18\u6578\u6CD5","Degrees > Radians":"\u5EA6 >> \u5F27\u5EA6","Converts the angle, expressed in degrees, into radians":"\u5C07\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u8868\u793A\uFF09\u8F49\u63DB\u70BA\u5F27\u5EA6","Radians > Degrees":"\u5F27\u5EA6 > \u5EA6","Converts the angle, expressed in radians, into degrees":"\u5C07\u4EE5\u5F27\u5EA6\u8868\u793A\u7684\u89D2\u5EA6\u8F49\u63DB\u70BA\u5EA6\u6578","Angle, in radians":"\u4EE5\u5F27\u5EA6\u70BA\u55AE\u4F4D\u7684\u89D2\u5EA6","Convert variable to JSON":"\u5C07\u8B8A\u91CF\u8F49\u63DB\u70BA JSON","Convert a variable to JSON":"\u5C07\u8B8A\u91CF\u8F49\u63DB\u70BA JSON","JSON":"JSON","The variable to be stringified":"\u8981\u5B57\u7B26\u4E32\u5316\u7684\u8B8A\u91CF","Convert global variable to JSON":"\u5C07\u5168\u5C40\u8B8A\u91CF\u8F49\u63DB\u70BAJSON","Convert a global variable to JSON":"\u5C07\u5168\u5C40\u8B8A\u91CF\u8F49\u63DB\u70BAJSON","The global variable to be stringified":"\u5168\u5C40\u8B8A\u91CF\u88AB\u5B57\u7B26\u4E32\u5316","Convert object variable to JSON":"\u5C07\u7269\u4EF6\u8B8A\u91CF\u8F49\u63DB\u70BAJSON","Convert an object variable to JSON":"\u5C07\u7269\u4EF6\u8B8A\u91CF\u8F49\u63DB\u70BAJSON","The object with the variable":"\u8207\u8B8A\u91CF\u7684\u7269\u4EF6","The object variable to be stringified":"\u8981\u88AB\u5B57\u7B26\u4E32\u5316\u7684\u7269\u4EF6\u8B8A\u91CF","Convert JSON to a scene variable":"\u8F49\u63DB JSON \u70BA\u5834\u666F\u8B8A\u91CF","Parse a JSON object and store it into a scene variable":"\u89E3\u6790 JSON \u7269\u4EF6\u5E76\u5C07\u5176\u5B58\u5132\u5230\u5834\u666F\u8B8A\u91CF\u4E2D","Convert JSON string _PARAM0_ and store it into variable _PARAM1_":"\u8F49\u63DB JSON \u5B57\u7B26\u4E32 _PARAM0_ \u5E76\u5B58\u5132\u5230\u8B8A\u91CF _PARAM1_","JSON string":"JSON \u5B57\u7B26\u4E32","Variable where store the JSON object":"\u5B58\u5132JSON\u7269\u4EF6\u7684\u8B8A\u91CF","Convert JSON to global variable":"\u5C07JSON\u8F49\u63DB\u70BA\u5168\u5C40\u8B8A\u91CF","Parse a JSON object and store it into a global variable":"\u89E3\u6790\u4E00\u500BJSON\u7269\u4EF6\u5E76\u5C07\u5176\u5B58\u5132\u5230\u4E00\u500B\u5168\u5C40\u8B8A\u91CF\u4E2D","Convert JSON string _PARAM0_ and store it into global variable _PARAM1_":"\u8F49\u63DB JSON \u5B57\u7B26\u4E32 _PARAM0_ \u5E76\u5B58\u5132\u5230\u5168\u5C40\u8B8A\u91CF _PARAM1_","Global variable where store the JSON object":"\u5B58\u5132JSON\u7269\u4EF6\u7684\u5168\u5C40\u8B8A\u91CF","Convert JSON to a variable":"\u5C07 JSON \u8F49\u63DB\u70BA\u8B8A\u91CF","Parse a JSON object and store it into a variable":"\u89E3\u6790 JSON \u7269\u4EF6\u4E26\u5C07\u5176\u5B58\u5132\u5230\u8B8A\u91CF\u4E2D","Variable where to store the JSON object":"\u5B58\u5132 JSON \u7269\u4EF6\u7684\u8B8A\u91CF","Convert JSON to object variable":"\u5C07JSON\u8F49\u63DB\u70BA\u7269\u4EF6\u8B8A\u91CF","Parse a JSON object and store it into an object variable":"\u89E3\u6790JSON\u7269\u4EF6\u5E76\u5C07\u5176\u5B58\u5132\u5230\u7269\u4EF6\u8B8A\u91CF\u4E2D","Parse JSON string _PARAM0_ and store it into variable _PARAM2_ of _PARAM1_":"\u89E3\u6790JSON\u5B57\u7B26\u4E32_PARAM0_\u5E76\u5C07\u5176\u5B58\u5132\u5230_PARAM1_\u7684\u8B8A\u91CF_PARAM2_\u4E2D","Object variable where store the JSON object":"\u5B58\u5132JSON\u7269\u4EF6\u7684\u7269\u4EF6\u8B8A\u91CF","Common features that can be used for all objects in GDevelop.":"\u53EF\u7528\u4E8E GDevelop \u4E2D\u6240\u6709\u7269\u4EF6\u7684\u5171\u540C\u7279\u5F81\u3002","Movement using forces":"\u4F7F\u7528\u529B\u79FB\u52D5","Base object":"\u57FA\u672C\u7269\u4EF6","Compare the X position of the object.":"\u6BD4\u8F03\u7269\u4EF6\u7684 X \u4F4D\u7F6E\u3002","the X position":"X \u4F4D\u7F6E","Change the X position of an object.":"\u66F4\u6539\u7269\u4EF6\u7684 X \u4F4D\u7F6E\u3002","Compare the Y position of an object.":"\u6BD4\u8F03\u7269\u4EF6\u7684 Y \u4F4D\u7F6E","the Y position":"Y \u4F4D\u7F6E","Change the Y position of an object.":"\u66F4\u6539\u7269\u4EF6\u7684 Y \u4F4D\u7F6E\u3002","Change the position of an object.":"\u66F4\u6539\u5C0D\u8C61\u7684\u4F4D\u7F6E\u3002","Change the position of _PARAM0_: _PARAM1_ _PARAM2_ (x axis), _PARAM3_ _PARAM4_ (y axis)":"\u66F4\u6539_PARAM0_\u7684\u4F4D\u7F6E: _PARAM1_ _PARAM2_ (x \u8EF8), _PARAM3_ _PARAM4_ (y \u8EF8)","Modification's sign":"\u4FEE\u6539\u7B26\u865F","Center position":"\u4E2D\u5FC3\u4F4D\u7F6E","Change the position of an object, using its center.":"\u4EE5\u7269\u4EF6\u7684\u4E2D\u5FC3\u4F4D\u7F6E\u66F4\u6539\u5176\u4F4D\u7F6E\u3002","Change the position of the center of _PARAM0_: _PARAM1_ _PARAM2_ (x axis), _PARAM3_ _PARAM4_ (y axis)":"\u66F4\u6539_PARAM0_\u7684\u4E2D\u5FC3\u4F4D\u7F6E: _PARAM1_ _PARAM2_ (x \u8EF8), _PARAM3_ _PARAM4_ (y \u8EF8)","Center X position":"\u4E2D\u5FC3 X \u4F4D\u7F6E","the X position of the center of rotation":"\u65CB\u8F49\u4E2D\u5FC3\u7684 X \u4F4D\u7F6E","the X position of the center":"\u4E2D\u5FC3\u7684 X \u4F4D\u7F6E","Center Y position":"\u4E2D\u5FC3 Y \u4F4D\u7F6E","the Y position of the center of rotation":"\u65CB\u8F49\u4E2D\u5FC3\u7684 Y \u4F4D\u7F6E","the Y position of the center":"\u4E2D\u5FC3\u7684 Y \u4F4D\u7F6E","Bounding box left position":"\u908A\u6846\u5DE6\u5074\u4F4D\u7F6E","the bounding box (the area encapsulating the object) left position":"\u908A\u754C\u6846(\u5C01\u88DD\u7269\u9AD4\u7684\u5340\u57DF)\u5DE6\u4F4D\u7F6E","the bounding box left position":"\u908A\u754C\u6846\u5DE6\u5074\u4F4D\u7F6E","Position \u276F Bounding Box":"\u4F4D\u7F6E \u276F \u908A\u6846","Bounding box top position":"\u908A\u754C\u6846\u9802\u90E8\u4F4D\u7F6E","the bounding box (the area encapsulating the object) top position":"\u908A\u754C\u6846(\u5C01\u88DD\u7269\u9AD4\u7684\u5340\u57DF)\u9802\u4F4D\u7F6E","the bounding box top position":"\u908A\u754C\u6846\u9802\u90E8\u4F4D\u7F6E","Bounding box right position":"\u908A\u754C\u6846\u53F3\u5074\u4F4D\u7F6E","the bounding box (the area encapsulating the object) right position":"\u908A\u754C\u6846(\u5C01\u88DD\u7269\u9AD4\u7684\u5340\u57DF)\u53F3\u4F4D\u7F6E","the bounding box right position":"\u908A\u754C\u6846\u53F3\u5074\u4F4D\u7F6E","Bounding box bottom position":"\u908A\u754C\u6846\u5E95\u90E8\u4F4D\u7F6E","the bounding box (the area encapsulating the object) bottom position":"\u908A\u6846(\u7269\u4EF6\u5C01\u88DD\u5340\u57DF)\u5E95\u90E8\u4F4D\u7F6E","the bounding box bottom position":"\u908A\u754C\u6846\u5E95\u90E8\u4F4D\u7F6E","Bounding box center X position":"\u908A\u754C\u6846\u4E2D\u5FC3 X \u4F4D\u7F6E","the bounding box (the area encapsulating the object) center X position":"\u908A\u754C\u6846 (\u7269\u4EF6\u5C01\u88DD\u5340\u57DF) \u4E2D\u5FC3 X \u4F4D\u7F6E","the bounding box center X position":"\u908A\u754C\u6846\u4E2D\u5FC3 X \u4F4D\u7F6E","Bounding box center Y position":"\u908A\u754C\u6846\u4E2D\u5FC3 Y \u4F4D\u7F6E","the bounding box (the area encapsulating the object) center Y position":"\u908A\u754C\u6846(\u5C01\u88DD\u7269\u9AD4\u7684\u5340\u57DF)\u4E2D\u5FC3Y\u4F4D\u7F6E","the bounding box center Y position":"\u908A\u754C\u6846\u4E2D\u5FC3Y\u4F4D\u7F6E","Put around a position":"\u653E\u5728\u67D0\u4F4D\u7F6E\u9644\u8FD1","Position the center of the given object around a position, using the specified angle and distance.":"\u4F7F\u7528\u6307\u5B9A\u7684\u89D2\u5EA6\u548C\u8DDD\u96E2\uFF0C\u5C07\u7D66\u5B9A\u7269\u4EF6\u7684\u4E2D\u5FC3\u570D\u7E5E\u4E00\u500B\u4F4D\u7F6E\u5B9A\u4F4D\u3002","Put _PARAM0_ around _PARAM1_;_PARAM2_, with an angle of _PARAM4_ degrees and _PARAM3_ pixels distance.":"\u628A _PARAM0_ \u570D\u7E5E _PARAM1_ \uFF1B _PARAM2_ \uFF0C\u4EE5 _PARAM4_ \u89D2\u5EA6\u548C _PARAM3_ \u50CF\u7D20\u8DDD\u96E2\u3002","Change the angle of rotation of an object (in degrees). For 3D objects, this is the rotation around the Z axis.":"\u66F4\u6539\u7269\u4EF6\u7684\u65CB\u8F49\u89D2\u5EA6\uFF08\u4EE5\u5EA6\u70BA\u55AE\u4F4D\uFF09\u3002\u5C0D\u65BC3D\u7269\u4EF6\uFF0C\u9019\u662F\u570D\u7E5EZ\u8EF8\u7684\u65CB\u8F49\u3002","Rotate":"\u65CB\u8F49","Rotate an object, clockwise if the speed is positive, counterclockwise otherwise. For 3D objects, this is the rotation around the Z axis.":"\u65CB\u8F49\u7269\u4EF6\uFF0C\u5982\u679C\u901F\u5EA6\u70BA\u6B63\u5247\u9806\u6642\u91DD\uFF0C\u5426\u5247\u9006\u6642\u91DD\u3002\u5C0D\u65BC3D\u7269\u4EF6\uFF0C\u9019\u662F\u570D\u7E5EZ\u8EF8\u7684\u65CB\u8F49\u3002","Rotate _PARAM0_ at speed _PARAM1_ deg/second":"\u4EE5 _PARAM1_deg/\u79D2\u7684\u901F\u5EA6\u65CB\u8F49 _PARAM0_","Rotate toward angle":"\u5411\u89D2\u65CB\u8F49","Rotate an object towards an angle with the specified speed.":"\u4EE5\u6307\u5B9A\u901F\u5EA6\u5411\u4E00\u89D2\u5EA6\u65CB\u8F49\u7269\u4EF6\u3002","Rotate _PARAM0_ towards _PARAM1_ at speed _PARAM2_ deg/second":"\u4EE5 _PARAM2_deg/\u79D2\u7684\u901F\u5EA6\u65CB\u8F49 _PARAM0_ \u671D_PARAM1_","Angle to rotate towards (in degrees)":"\u8981\u5411\u4F4F\u65CB\u8F49\u7684\u89D2\u5EA6 ( \u4EE5\u5EA6\u70BA\u55AE\u4F4D )","Enter 0 for an immediate rotation.":"\u8F38\u5165 0 \u8868\u793A\u7ACB\u5373\u65CB\u8F49.","Rotate toward position":"\u5411\u4E00\u4F4D\u7F6E\u65CB\u8F49","Rotate an object towards a position, with the specified speed.":"\u65CB\u8F49\u7269\u9AD4\u671D\u5411\u4E00\u500B\u4F4D\u7F6E\uFF0C\u7528\u6307\u5B9A\u7684\u901F\u5EA6\u3002","Rotate _PARAM0_ towards _PARAM1_;_PARAM2_ at speed _PARAM3_ deg/second":"\u65CB\u8F49 _PARAM0_ \u671D\u8457_PARAM1_; _PARAM2_ \u4EE5\u901F\u5EA6 _PARAM3_ deg/\u79D2","Rotate toward another object":"\u671D\u5411\u53E6\u4E00\u500B\u7269\u4EF6\u65CB\u8F49","Rotate an object towards another object, with the specified speed. Note that if multiple instances of the target object are picked, only the first one will be used. Use a For Each event or actions like \"Pick nearest object\", \"Pick a random object\" to refine the choice of the target object.":"\u4EE5\u6307\u5B9A\u7684\u901F\u5EA6\u5C07\u7269\u4EF6\u671D\u5411\u53E6\u4E00\u500B\u7269\u4EF6\u65CB\u8F49\u3002\u8ACB\u6CE8\u610F\uFF0C\u5982\u679C\u9078\u64C7\u4E86\u591A\u500B\u76EE\u6A19\u7269\u4EF6\u7684\u5BE6\u4F8B\uFF0C\u5247\u53EA\u6703\u4F7F\u7528\u7B2C\u4E00\u500B\u3002\u4F7F\u7528\u300C\u5C0D\u6BCF\u500B\u300D\u4E8B\u4EF6\u6216\u52D5\u4F5C\uFF0C\u5982\u300C\u9078\u64C7\u6700\u8FD1\u7684\u7269\u4EF6\u300D\u3001\u300C\u9078\u64C7\u96A8\u6A5F\u7269\u4EF6\u300D\u4F86\u7CBE\u78BA\u9078\u64C7\u76EE\u6A19\u7269\u4EF6\u3002","Target object":"\u76EE\u6A19\u7269\u4EF6","Add a force":"\u6DFB\u52A0\u529B","Add a force to an object. The object will move according to all of the forces it has.":"\u5411\u7269\u4EF6\u6DFB\u52A0\u4E00\u500B\u529B\u3002\u7269\u9AD4\u5C07\u6839\u64DA\u5B83\u6240\u64C1\u6709\u7684\u6240\u6709\u529B\u79FB\u52D5\u3002","Add to _PARAM0_ _PARAM3_ force of _PARAM1_ p/s on X axis and _PARAM2_ p/s on Y axis":"\u6DFB\u52A0 _PARAM0_ _PARAM3_ \u529B\u5728 _PARAM1_ p/s X \u8EF8\u4E0A \u548C _PARAM2_ p/s Y \u8EF8\u4E0A","Speed on X axis (in pixels per second)":"X\u8EF8\u4E0A\u7684\u901F\u5EA6\uFF08\u50CF\u7D20\u6BCF\u79D2\uFF09","Speed on Y axis (in pixels per second)":"Y\u8EF8\u4E0A\u7684\u901F\u5EA6\uFF08\u50CF\u7D20\u6BCF\u79D2\uFF09","Force multiplier":"\u529B\u91CF\u500D\u589E","Add a force (angle)":"\u6DFB\u52A0\u4E00\u500B\u529B \uFF08\u89D2\uFF09","Add a force to an object. The object will move according to all of the forces it has. This action creates the force using the specified angle and length.":"\u5411\u7269\u4EF6\u6DFB\u52A0\u4E00\u500B\u529B\u3002\u7269\u9AD4\u5C07\u6839\u64DA\u5B83\u6240\u64C1\u6709\u7684\u6240\u6709\u529B\u79FB\u52D5\u3002\u6B64\u52D5\u4F5C\u4F7F\u7528\u6307\u5B9A\u7684\u89D2\u5EA6\u548C\u9577\u5EA6\u5275\u5EFA\u529B\u3002","Add to _PARAM0_ _PARAM3_ force, angle: _PARAM1_ degrees and length: _PARAM2_ pixels":"\u6DFB\u52A0\u5230 _PARAM0_ _PARAM3_ \u529B, \u89D2\u5EA6: _PARAM1_ \u5EA6\u548C\u9577\u5EA6: _PARAM2_ \u50CF\u7D20","Add a force to move toward a position":"\u6DFB\u52A0\u4E00\u500B\u529B\u8D70\u5411\u67D0\u4F4D\u7F6E","Add a force to an object to make it move toward a position.":"\u6DFB\u52A0\u4E00\u500B\u529B\u4F7F\u7269\u4EF6\u8D70\u5411\u67D0\u500B\u4F4D\u7F6E","Move _PARAM0_ toward _PARAM1_;_PARAM2_ with _PARAM4_ force of _PARAM3_ pixels":"\u5C07 _PARAM0_ \u79FB\u52D5\u5230 _PARAM1_; _PARAM2_ \u548C _PARAM4_ \u529B\u7684 _PARAM3_ \u50CF\u7D20","Stop the object":"\u505C\u6B62\u7269\u4EF6","Stop the object by deleting all of its forces.":"\u901A\u904E\u522A\u9664\u6240\u6709\u7684\u529B\u4F86\u505C\u6B62\u7269\u4EF6\u3002","Stop _PARAM0_ (remove all forces)":"\u505C\u6B62 _PARAM0_ (\u79FB\u9664\u6240\u6709\u529B\u91CF)","Delete the object":"\u522A\u9664\u6B64\u7269\u4EF6","Delete the specified object.":"\u522A\u9664\u6307\u5B9A\u7684\u7269\u4EF6\u3002","Delete _PARAM0_":"\u522A\u9664 _PARAM0_","Z order":"Z\u6B21\u5E8F","Modify the Z-order of an object":"\u4FEE\u6539\u7269\u4EF6\u7684 Z \u9806\u5E8F","the z-order":"z-\u9806\u5E8F","Move the object to a different layer.":"\u5C07\u5176\u79FB\u81F3\u4E0D\u540C\u7684\u5217\u8868\u3002","Put _PARAM0_ on the layer _PARAM1_":"\u628A _PARAM0_ \u653E\u5728\u5716\u5C64 _PARAM1_","Move it to this layer":"\u5C07\u5176\u79FB\u52D5\u5230\u6B64\u5C64","Change object variable value":"\u66F4\u6539\u7269\u4EF6\u8B8A\u91CF\u503C","Modify the number value of an object variable.":"\u4FEE\u6539\u7269\u4EF6\u8B8A\u91CF\u7684\u6578\u503C\u3002","the variable _PARAM1_":"\u8B8A\u91CF _PARAM1_","Modify the text of an object variable.":"\u4FEE\u6539\u7269\u4EF6\u8B8A\u91CF\u7684\u6587\u672C\u3002","Modify the boolean value of an object variable.":"\u4FEE\u6539\u7269\u4EF6\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","Change the variable _PARAM1_ of _PARAM0_: _PARAM2_":"\u66F4\u6539 _PARAM0_ \u7684\u8B8A\u91CF _PARAM1_\uFF1A_PARAM2_","Object variable value":"\u7269\u4EF6\u8B8A\u91CF\u503C","Compare the number value of an object variable.":"\u6BD4\u8F03\u7269\u4EF6\u8B8A\u91CF\u7684\u6578\u503C\u3002","Compare the text of an object variable.":"\u6BD4\u8F03\u7269\u4EF6\u8B8A\u91CF\u7684\u6587\u672C\u3002","Compare the boolean value of an object variable.":"\u6BD4\u8F03\u7269\u4EF6\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","The variable _PARAM1_ of _PARAM0_ is _PARAM2_":"_PARAM0_ \u7684\u8B8A\u91CF _PARAM1_ \u662F _PARAM2_","the text of variable _PARAM1_":"\u8B8A\u91CF _PARAM1_ \u7684\u6587\u672C","Set the boolean value of variable _PARAM1_ of _PARAM0_ to _PARAM2_":"\u5C07 _PARAM0_ \u7684\u8B8A\u91CF _PARAM1_ \u7684\u5E03\u723E\u503C\u8A2D\u5B9A\u70BA _PARAM2_","Toggles the boolean value of an object variable.":"\u5207\u63DB\u7269\u4EF6\u8B8A\u91CF\u7684\u5E03\u723E\u503C\u3002","Toggle the boolean value of variable _PARAM1_ of _PARAM0_":"\u5207\u63DB_PARAM0_\u8B8A\u91CF_PARAM1_ \u7684\u5E03\u723E\u503C","Check if the specified child of the object structure variable exists.":"\u6AA2\u67E5\u7269\u4EF6\u7D50\u69CB\u8B8A\u91CF\u7684\u6307\u5B9A\u5B50\u9805\u662F\u5426\u5B58\u5728\u3002","Child _PARAM2_ of variable _PARAM1_ of _PARAM0_ exists":"_PARAM0_ \u7684\u8B8A\u91CF _PARAM1_ \u7684\u5B50 _PARAM2_ \u5B58\u5728","Variables \u276F Arrays and structures":"\u8B8A\u91CF \u276F \u6578\u7D44\u548C\u7D50\u69CB","Remove a child from an object structure variable.":"\u5F9E\u7269\u4EF6\u7D50\u69CB\u8B8A\u91CF\u4E2D\u522A\u9664\u4E00\u500B\u5B50\u9805\u3002","Remove child _PARAM2_ from variable _PARAM1_ of _PARAM0_":"\u5F9E _PARAM0_ \u7684\u8B8A\u91CF _PARAM1_ \u4E2D\u522A\u9664\u5B50 _PARAM2_","Remove all the children from the object array or structure variable.":"\u5F9E\u7269\u4EF6\u6578\u7D44\u6216\u7D50\u69CB\u8B8A\u91CF\u4E2D\u522A\u9664\u6240\u6709\u5B50\u9805\u3002","Clear children from variable _PARAM1_ of _PARAM0_":"\u5F9E _PARAM0_ \u7684\u8B8A\u91CF _PARAM1_ \u4E2D\u522A\u9664\u5B50 _PARAM2_","Hide":"\u96B1\u85CF","Hide the specified object.":"\u96B1\u85CF\u6307\u5B9A\u7269\u4EF6\u3002","Hide _PARAM0_":"\u96B1\u85CF _PARAM0_","Show the specified object.":"\u986F\u793A\u6307\u5B9A\u7684\u7269\u4EF6\u3002","Show _PARAM0_":"\u986F\u793A _PARAM0_","Compare the angle, in degrees, of the specified object. For 3D objects, this is the angle around the Z axis.":"\u6BD4\u8F03\u6307\u5B9A\u7269\u4EF6\u7684\u89D2\u5EA6\uFF0C\u55AE\u4F4D\u70BA\u5EA6\u3002\u5C0D\u65BC3D\u7269\u4EF6\uFF0C\u9019\u662F\u570D\u7E5EZ\u8EF8\u7684\u89D2\u5EA6\u3002","the angle (in degrees)":"\u89D2\u5EA6(\u4EE5\u5EA6\u70BA\u55AE\u4F4D)","Z-order":"Z \u9806\u5E8F","Compare the Z-order of the specified object.":"\u6BD4\u8F03\u6307\u5B9A\u7269\u4EF6\u7684 Z-\u9806\u5E8F\u3002","the Z-order":"Z \u9806\u5E8F","Current layer":"\u7576\u524D\u5C64","Check if the object is on the specified layer.":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5728\u6307\u5B9A\u7684\u5C64\u4E0A\u3002","_PARAM0_ is on layer _PARAM1_":"_PARAM0_ \u4F4D\u4E8E\u5C64 _PARAM1_","Check if an object is visible.":"\u6AA2\u67E5\u4E00\u500B\u7269\u4EF6\u662F\u5426\u53EF\u898B\u3002","_PARAM0_ is visible (not marked as hidden)":"_PARAM0_ \u662F\u53EF\u898B\u7684(\u672A\u6A19\u8A18\u70BA\u96B1\u85CF)","Object is stopped (no forces applied on it)":"\u7269\u4EF6\u5DF2\u505C\u6B62 (\u6C92\u6709\u9069\u7528\u4E8E\u5B83\u7684\u529B)","Check if an object is not moving":"\u6AA2\u67E5\u4E00\u500B\u7269\u4EF6\u662F\u5426\u5728\u79FB\u52D5","_PARAM0_ is stopped":"_PARAM0_ \u5DF2\u505C\u6B62","Speed (from forces)":"\u901F\u5EA6(\u4F86\u81EA\u529B)","Compare the overall speed of an object":"\u6BD4\u8F03\u7269\u4EF6\u6574\u9AD4\u7684\u901F\u5EA6","the overall speed":"\u7E3D\u901F\u5EA6","Angle of movement (using forces)":"\u79FB\u52D5\u89D2\u5EA6 (\u4F7F\u7528\u529B)","Compare the angle of movement of an object according to the forces applied on it.":"\u6839\u64DA\u65BD\u52A0\u5728\u7269\u9AD4\u4E0A\u7684\u529B\u4F86\u6BD4\u8F03\u7269\u9AD4\u7684\u904B\u52D5\u89D2\u5EA6\u3002","Angle of movement of _PARAM0_ is _PARAM1_ (tolerance: _PARAM2_ degrees)":"_PARAM0_ \u7684\u79FB\u52D5\u89D2\u5EA6\u662F _PARAM1_ (\u516C\u5DEE: _PARAM2_ \u5EA6)","Angle of movement of _PARAM0_ is _PARAM1_ \xB1 _PARAM2_\xB0":"_PARAM0_ \u7684\u79FB\u52D5\u89D2\u5EA6\u70BA _PARAM1_ \xB1 _PARAM2_\xB0","The boolean value of variable _PARAM1_ of object _PARAM0_ is _PARAM2_":"\u7269\u4EF6 _PARAM0_ \u7684\u8B8A\u91CF _PARAM1_ \u7684\u5E03\u723E\u503C\u662F _PARAM2_","Add value to object array variable":"\u5411\u7269\u4EF6\u9663\u5217\u8B8A\u91CF\u6DFB\u52A0\u503C","Adds a text (string) to the end of an object array variable.":"\u5728\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u6587\u672C (\u5B57\u7B26\u4E32)\u3002","Add value _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"\u5C07\u503C _PARAM2_ \u6DFB\u52A0\u5230 _PARAM0_ \u7684\u6578\u7D44\u8B8A\u91CF _PARAM1_","Adds a number to the end of an object array variable.":"\u5C07\u4E00\u500B\u6578\u5B57\u6DFB\u52A0\u5230\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u3002","Adds a boolean to the end of an object array variable.":"\u5728\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u672B\u5C3E\u6DFB\u52A0\u5E03\u723E\u503C\u3002","Adds an existing variable to the end of an object array variable.":"\u5C07\u73FE\u6709\u8B8A\u91CF\u6DFB\u52A0\u5230\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u7D50\u5C3E\u3002","Add variable _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"\u5C07\u8B8A\u91CF _PARAM2_ \u6DFB\u52A0\u5230 _PARAM0_ \u7684\u6578\u7D44\u8B8A\u91CF _PARAM1_","The content of the object variable will *be copied* and added at the end of the array.":"\u7269\u4EF6\u8B8A\u91CF\u7684\u5167\u5BB9\u5C07*\u88AB\u8907\u88FD*\u5E76\u6DFB\u52A0\u5230\u6578\u7D44\u7684\u672B\u5C3E\u3002","Add text _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"\u5C07\u6587\u672C _PARAM2_ \u6DFB\u52A0\u5230 _PARAM0_ \u7684\u6578\u7D44\u8B8A\u91CF _PARAM1_","Add number _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"\u5C07\u6578\u5B57 _PARAM2_ \u6DFB\u52A0\u5230 _PARAM0_ \u7684\u6578\u7D44\u8B8A\u91CF _PARAM1_","Add boolean _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"\u5C07\u5E03\u723E\u503C _PARAM2_ \u6DFB\u52A0\u5230 _PARAM0_ \u7684\u6578\u7D44\u8B8A\u91CF _PARAM1_","Removes a variable at the specified index of an object array variable.":"\u5728\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u6307\u5B9A\u7D22\u5F15\u8655\u522A\u9664\u8B8A\u91CF","Remove variable at index _PARAM2_ from array variable _PARAM1_ of _PARAM0_":"\u5F9E _PARAM0_ \u7684\u6578\u7D44\u8B8A\u91CF _PARAM1_ \u79FB\u9664\u7D22\u5F15 _PARAM2_ \u7684\u8B8A\u91CF","Compare the number of children in an object array variable.":"\u6BD4\u8F03\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u4E2D\u5B50\u9805\u7684\u6578\u91CF\u3002","The number of children in the array variable _PARAM1_":"\u6578\u7D44\u8B8A\u91CF _PARAM1_ \u4E2D\u7684\u5B50\u7D1A\u6578","Get the value of the first element of an object array variable, if it is a text (string) variable.":"\u7372\u53D6\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u7B2C\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u6587\u672C(\u5B57\u7B26\u4E32) \u8B8A\u91CF\u3002","Get the value of the first element of an object array variable, if it is a number variable.":"\u7372\u53D6\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u7B2C\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u500B\u6578\u5B57\u8B8A\u91CF\u3002","Get the value of the last element of an object array variable, if it is a text (string) variable.":"\u7372\u53D6\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u6700\u540E\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u6587\u672C(\u5B57\u7B26\u4E32) \u8B8A\u91CF\u3002","Get the value of the last element of an object array variable, if it is a number variable.":"\u7372\u53D6\u7269\u4EF6\u6578\u7D44\u8B8A\u91CF\u7684\u6700\u540E\u4E00\u500B\u5143\u7D20\u7684\u503C\uFF0C\u5982\u679C\u5B83\u662F\u4E00\u500B\u6578\u5B57\u8B8A\u91CF\u3002","Behavior activated":"\u884C\u70BA\u662F\u6FC0\u6D3B\u7684","Check if the behavior is activated for the object.":"\u6AA2\u67E5\u7269\u4EF6\u7684\u884C\u70BA\u662F\u5426\u88AB\u6FC0\u6D3B\u3002","Behavior _PARAM1_ of _PARAM0_ is activated":"_PARAM0_ \u7684\u884C\u70BA _PARAM1_ \u662F\u6FC0\u6D3B\u7684","De/activate a behavior":"\u7981/\u6FC0\u6D3B \u4E00\u500B\u884C\u70BA","De/activate the behavior for the object.":"\u7981/\u6FC0\u6D3B \u7269\u4EF6\u7684\u884C\u70BA","Activate behavior _PARAM1_ of _PARAM0_: _PARAM2_":"\u6FC0\u6D3B _PARAM0_ \u7684\u884C\u70BA _PARAM1_ : _PARAM2_","Activate?":"\u6FC0\u6D3B\u7684?","Add a force to move toward an object":"\u6DFB\u52A0\u4E00\u500B\u529B\u79FB\u52D5\u5411\u67D0\u7269\u4EF6","Add a force to an object to make it move toward another.":"\u6DFB\u52A0\u529B\u5230\u4E00\u500B\u7269\u4EF6\u4F7F\u5176\u79FB\u52D5\u5411\u53E6\u4E00\u500B\u7269\u4EF6","Move _PARAM0_ toward _PARAM1_ with _PARAM3_ force of _PARAM2_ pixels":"\u5C07 _PARAM0_ \u79FB\u52D5\u5230 _PARAM1_ \u548C _PARAM3_ \u529B\u7684 _PARAM2_ \u50CF\u7D20","Target Object":"\u76EE\u6A19\u7269\u4EF6","Add a force to move around an object":"\u6DFB\u52A0\u4E00\u500B\u529B\u79FB\u52D5\u5230\u67D0\u7269\u4EF6\u9644\u8FD1","Add a force to an object to make it rotate around another.\nNote that the movement is not precise, especially if the speed is high.\nTo position an object around a position more precisely, use the actions in category \"Position\".":"\u7D66\u7269\u9AD4\u589E\u52A0\u4E00\u500B\u529B\u91CF\u4F7F\u5176\u570D\u7E5E\u53E6\u4E00\u500B\u7269\u9AD4\u65CB\u8F49\u3002\n\u8ACB\u6CE8\u610F\uFF0C\u79FB\u52D5\u901F\u5EA6\u5E76\u4E0D\u7CBE\u78BA\uFF0C\u7279\u5225\u662F\u5728\u901F\u5EA6\u5F88\u9AD8\u7684\u60C5\u6CC1\u4E0B\u3002\n\u8981\u66F4\u7CBE\u78BA\u5730\u5C07\u7269\u9AD4\u7F6E\u4E8E\u67D0\u500B\u4F4D\u7F6E\u5468\u570D\uFF0C\u8ACB\u4F7F\u7528\u201C\u4F4D\u7F6E\u201D\u985E\u5225\u4E2D\u7684\u52D5\u4F5C\u3002","Rotate _PARAM0_ around _PARAM1_ at _PARAM2_ deg/sec and _PARAM3_ pixels away":"\u65CB\u8F49 _PARAM0_ \u5230 _PARAM1_ \u7684 _PARAM3_ \u9644\u8FD1\uFF0C\u901F\u5EA6 _PARAM2_","Rotate around this object":"\u570D\u7E5E\u65CB\u8F49\u5230\u6B64\u7269\u4EF6","Speed (in degrees per second)":"\u901F\u5EA6\uFF08\u5EA6\u6BCF\u79D2\uFF09","Distance (in pixels)":"\u8DDD\u96E2 ( \u4EE5\u50CF\u7D20\u70BA\u55AE\u4F4D )","Put the object around another":"\u5C07\u8A72\u7269\u4EF6\u653E\u5728\u53E6\u4E00\u500B\u7269\u4EF6\u9644\u8FD1","Position an object around another, with the specified angle and distance. The center of the objects are used for positioning them.":"\u5C07\u7269\u4EF6\u653E\u7F6E\u5728\u53E6\u4E00\u500B\u7269\u4EF6\u5468\u570D\uFF0C\u6307\u5B9A\u89D2\u5EA6\u548C\u8DDD\u96E2\u3002\u7269\u4EF6\u7684\u4E2D\u5FC3\u88AB\u7528\u4F86\u5B9A\u4F4D\u5B83\u5011\u3002","Put _PARAM0_ around _PARAM1_, with an angle of _PARAM3_ degrees and _PARAM2_ pixels distance.":"\u5C07 _PARAM0_ \u653E\u5728 _PARAM1_ \u5468\u570D\uFF0C\u89D2\u5EA6\u70BA _PARAM3_ \u5EA6\uFF0C\u8DDD\u96E2\u70BA _PARAM2_ \u50CF\u7D20\u3002","\"Center\" Object":"\u300C\u4E2D\u5FC3\u300D\u7269\u4EF6","Separate objects":"\u5206\u96E2\u7269\u4EF6","Move an object away from another using their collision masks.\nBe sure to call this action on a reasonable number of objects\nto avoid slowing down the game.":"\u4F7F\u7528\u4ED6\u5011\u7684\u78B0\u649E\u906E\u7F69\u5C07\u4E00\u500B\u7269\u9AD4\u5F9E\u53E6\u4E00\u500B\u7269\u9AD4\u79FB\u958B\u3002\n\u78BA\u4FDD\u5728\u5408\u7406\u7684\u7269\u9AD4\u4E0A\u8ABF\u7528\u9019\u500B\u52D5\u4F5C\n\u4EE5\u907F\u514D\u653E\u6162\u904A\u6232\u901F\u5EA6\u3002","Move _PARAM0_ away from _PARAM1_ (only _PARAM0_ will move)":"\u79FB\u52D5 _PARAM0_ \u9060\u96E2 _PARAM1_ (\u50C5 _PARAM0_ \u88AB\u79FB\u52D5)","Objects (won't move)":"\u7269\u4EF6(\u4E0D\u6703\u79FB\u52D5)","Ignore objects that are touching each other on their edges, but are not overlapping (default: no)":"\u5FFD\u7565\u5728\u5176\u908A\u7DE3\u76F8\u4E92\u89F8\u6478\u4F46\u4E0D\u91CD\u758A\u7684\u7269\u4EF6 (\u9ED8\u8A8D\uFF1A\u5426)","Point inside object":"\u7269\u4EF6\u5167\u9EDE","Test if a point is inside the object collision masks.":"\u6E2C\u8A66\u67D0\u9EDE\u662F\u5426\u5728\u7269\u4EF6\u78B0\u649E\u906E\u7F69\u5167\u3002","_PARAM1_;_PARAM2_ is inside _PARAM0_":"_PARAM1_; _PARAM2_ \u5728 _PARAM0_ \u5167\u90E8","X position of the point":"\u9EDE\u7684 X \u4F4D\u7F6E","Y position of the point":"\u9EDE\u7684 Y \u4F4D\u7F6E","The cursor/touch is on an object":"\u5149\u6A19/\u89F8\u6478\u5728\u7269\u4EF6\u4E0A","Test if the cursor is over an object, or if the object is being touched.":"\u6E2C\u8A66\u6E38\u6A19\u662F\u5426\u8D85\u904E\u7269\u4EF6\uFF0C\u6216\u7269\u4EF6\u662F\u5426\u88AB\u89F8\u6478\u3002","The cursor/touch is on _PARAM0_":"\u5149\u6A19/\u89F8\u6478\u5728 _PARAM0_ \u4E0A","Accurate test (yes by default)":"\u7CBE\u78BA\u6AA2\u6E2C(\u9ED8\u8A8Dyes)","Value of an object timer":"\u7269\u4EF6\u8A08\u6642\u5668\u7684\u503C","Test the elapsed time of an object timer.":"\u6E2C\u8A66\u7269\u4EF6\u8A08\u6642\u5668\u7D93\u904E\u7684\u6642\u9593\u3002","The timer _PARAM1_ of _PARAM0_ is greater than _PARAM2_ seconds":"_PARAM0_ \u7684\u8A08\u6642\u5668 _PARAM1_ \u5927\u4E8E_PARAM2_ \u79D2","Compare the elapsed time of an object timer. This condition doesn't start the timer.":"\u6BD4\u8F03\u7269\u4EF6\u8A08\u6642\u5668\u7684\u904B\u884C\u6642\u9593\u3002\u6B64\u689D\u4EF6\u4E0D\u555F\u52D5\u8A08\u6642\u5668\u3002","The timer _PARAM1_ of _PARAM0_ _PARAM2_ _PARAM3_ seconds":"_PARAM0_ _PARAM2_ _PARAM3_ \u79D2\u7684\u8A08\u6642\u5668 _PARAM1_","Object timer paused":"\u7269\u4EF6\u8A08\u6642\u5668\u5DF2\u66AB\u505C","Test if specified object timer is paused.":"\u6E2C\u8A66\u662F\u5426\u66AB\u505C\u6307\u5B9A\u7269\u4EF6\u8A08\u6642\u5668\u3002","The timer _PARAM1_ of _PARAM0_ is paused":"_PARAM0_ \u7684\u8A08\u6642\u5668 _PARAM1_ \u5DF2\u66AB\u505C","Start (or reset) an object timer":"\u958B\u59CB(\u6216\u91CD\u7F6E) \u7269\u4EF6\u8A08\u6642\u5668","Reset the specified object timer, if the timer doesn't exist it's created and started.":"\u91CD\u7F6E\u6307\u5B9A\u7684\u7269\u4EF6\u8A08\u6642\u5668\uFF0C\u5982\u679C\u8A08\u6642\u5668\u4E0D\u5B58\u5728\uFF0C\u5247\u5275\u5EFA\u5E76\u555F\u52D5\u5B83\u3002","Start (or reset) the timer _PARAM1_ of _PARAM0_":"\u958B\u59CB (\u6216\u91CD\u7F6E) _PARAM0_ \u7684\u8A08\u6642\u5668 _PARAM1_","Pause an object timer":"\u66AB\u505C\u7269\u4EF6\u8A08\u6642\u5668","Pause an object timer.":"\u66AB\u505C\u7269\u4EF6\u8A08\u6642\u5668\u3002","Pause timer _PARAM1_ of _PARAM0_":"\u66AB\u505C_PARAM0_\u7684\u8A08\u6642\u5668 _PARAM1_","Unpause an object timer":"\u53D6\u6D88\u66AB\u505C\u7269\u4EF6\u8A08\u6642\u5668","Unpause an object timer.":"\u53D6\u6D88\u66AB\u505C\u7269\u4EF6\u8A08\u6642\u5668\u3002","Unpause timer _PARAM1_ of _PARAM0_":"\u53D6\u6D88\u66AB\u505C_PARAM0_\u7684\u8A08\u6642\u5668_PARAM1_","Delete an object timer":"\u522A\u9664\u7269\u4EF6\u8A08\u6642\u5668","Delete an object timer from memory.":"\u5F9E\u5167\u5B58\u4E2D\u522A\u9664\u7269\u4EF6\u8A08\u6642\u5668\u3002","Delete timer _PARAM1_ of _PARAM0_ from memory":"\u5F9E\u5167\u5B58\u4E2D\u522A\u9664_PARAM0_\u7684\u8A08\u6642\u5668 _PARAM1_","X position of the object":"\u7269\u4EF6\u7684 X \u4F4D\u7F6E","Y position of the object":"\u7269\u4EF6\u7684 Y \u4F4D\u7F6E","Current angle, in degrees, of the object. For 3D objects, this is the angle around the Z axis.":"\u7269\u4EF6\u7684\u7576\u524D\u89D2\u5EA6\uFF0C\u55AE\u4F4D\u70BA\u5EA6\u3002\u5C0D\u65BC3D\u7269\u4EF6\uFF0C\u9019\u662F\u570D\u7E5EZ\u8EF8\u7684\u89D2\u5EA6\u3002","X coordinate of the sum of forces":"\u529B\u4E4B\u548C\u7684X \u5750\u6A19","Y coordinate of the sum of forces":"\u529B\u4E4B\u548C\u7684Y\u5750\u6A19","Angle of the sum of forces":"\u529B\u4E4B\u548C\u7684\u89D2\u5EA6","Angle of the sum of forces (in degrees)":"\u529B\u7E3D\u548C\u7684\u89D2\u5EA6(\u4EE5\u5EA6\u70BA\u55AE\u4F4D)","Length of the sum of forces":"\u529B\u4E4B\u548C\u7684\u9577\u5EA6","Width of the object":"\u7269\u4EF6\u7684\u5BEC\u5EA6","Height of the object":"\u7269\u4EF6\u7684\u9AD8\u5EA6","Z-order of an object":"\u7269\u4EF6\u7684 Z \u9806\u5E8F","Distance between two objects":"\u5169\u500B\u7269\u9AD4\u4E4B\u9593\u7684\u8DDD\u96E2","Square distance between two objects":"\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u7684\u5E73\u65B9\u8DDD\u96E2","Distance between an object and a position":"\u7269\u4EF6\u548C\u4F4D\u7F6E\u4E4B\u9593\u7684\u8DDD\u96E2","Square distance between an object and a position":"\u7269\u4EF6\u548C\u4F4D\u7F6E\u4E4B\u9593\u7684\u5E73\u65B9\u8DDD\u96E2","Number value of an object variable":"\u7269\u4EF6\u8B8A\u91CF\u7684\u6578\u503C","Number of children in an object array or structure variable":"\u7269\u4EF6\u6578\u7D44\u6216\u7D50\u69CB\u8B8A\u91CF\u4E2D\u7684\u5B50\u9805\u6578","Text of an object variable":"\u7269\u4EF6\u8B8A\u91CF\u7684\u6587\u672C","Object timer value":"\u7269\u4EF6\u8A08\u6642\u5668\u503C","Angle between two objects":"\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u7684\u89D2\u5EA6","Compute the angle between two objects (in degrees). If you need the angle to an arbitrary position, use AngleToPosition.":"\u8A08\u7B97\u5169\u500B\u7269\u9AD4\u4E4B\u9593\u7684\u89D2\u5EA6(\u4EE5\u5EA6\u70BA\u55AE\u4F4D)\u3002\u5982\u679C\u4F60\u9700\u8981\u4E00\u500B\u4EFB\u610F\u4F4D\u7F6E\u7684\u89D2\u5EA6\uFF0C\u4F7F\u7528 AngleToposition\u3002","Compute the X position when given an angle and distance relative to the starting object. This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"\u7D66\u5B9A\u76F8\u5C0D\u65BC\u8D77\u59CB\u7269\u4EF6\u7684\u89D2\u5EA6\u548C\u8DDD\u96E2\uFF0C\u8A08\u7B97 X \u4F4D\u7F6E\u3002\u4E5F\u88AB\u7A31\u70BA\u5C07 2D \u77E2\u91CF\u5F9E\u6975\u5750\u6A19\u8F49\u5316\u70BA\u76F4\u89D2\u5750\u6A19\u3002","Compute the Y position when given an angle and distance relative to the starting object. This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"\u7D66\u5B9A\u76F8\u5C0D\u65BC\u8D77\u59CB\u7269\u4EF6\u7684\u89D2\u5EA6\u548C\u8DDD\u96E2\uFF0C\u8A08\u7B97 Y \u4F4D\u7F6E\u3002\u4E5F\u88AB\u7A31\u70BA\u5C07 2D \u77E2\u91CF\u5F9E\u6975\u5750\u6A19\u8F49\u5316\u70BA\u76F4\u89D2\u5750\u6A19\u3002","Angle between an object and a position":"\u7269\u4EF6\u548C\u4F4D\u7F6E\u4E4B\u9593\u7684\u89D2\u5EA6","Compute the angle between the object center and a \"target\" position (in degrees). If you need the angle between two objects, use AngleToObject.":"\u8A08\u7B97\u7269\u9AD4\u4E2D\u5FC3\u548C\u201C\u76EE\u6A19\u201D\u4F4D\u7F6E\u4E4B\u9593\u7684\u89D2\u5EA6(\u4EE5\u5EA6\u70BA\u55AE\u4F4D)\u3002\u5982\u679C\u9700\u8981\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u7684\u89D2\u5EA6\uFF0C\u8ACB\u4F7F\u7528 AngleToObject\u3002","Enable effect _PARAM1_ on _PARAM0_: _PARAM2_":"\u5728_PARAM0_\u4E0A\u555F\u7528_PARAM1_ \u6548\u679C: _PARAM2_","Set _PARAM2_ to _PARAM3_ for effect _PARAM1_ of _PARAM0_":"\u5C07 _PARAM2_ \u8A2D\u5B9A\u70BA _PARAM3_ \u4EE5\u7372\u53D6_PARAM0_ \u7684 _PARAM1_ \u6548\u679C","Enable _PARAM2_ for effect _PARAM1_ of _PARAM0_: _PARAM3_":"\u555F\u7528 _PARAM2_ \u5C0D_PARAM0_ \u7684 _PARAM1_ \u6548\u679C: _PARAM3_","Effect _PARAM1_ of _PARAM0_ is enabled":"_PARAM0_ \u7684\u7279\u6548 _PARAM1_ \u5DF2\u555F\u7528","Include in parent collision mask":"\u5305\u542B\u5728\u7236\u78B0\u649E\u906E\u7F69\u4E2D","Include or exclude a child from its parent collision mask.":"\u5728\u5176\u7236\u7D1A\u78B0\u649E\u906E\u7F69\u4E2D\u5305\u542B\u6216\u6392\u9664\u5B50\u7D1A\u3002","Include _PARAM0_ in parent object collision mask: _PARAM1_":"\u5728\u7236\u7269\u4EF6\u78B0\u649E\u906E\u7F69\u4E2D\u5305\u542B _PARAM0_\uFF1A_PARAM1_","Create an object":"\u5275\u5EFA\u4E00\u500B\u7269\u4EF6","Create an instance of the object at the specified position.The created object instance will be available for the next actions and sub-events.":"\u5728\u6307\u5B9A\u4F4D\u7F6E\u5275\u5EFA\u5C0D\u8C61\u5BE6\u4F8B\u3002\u5275\u5EFA\u7684\u5C0D\u8C61\u5BE6\u4F8B\u5C07\u53EF\u7528\u65BC\u5F8C\u7E8C\u64CD\u4F5C\u548C\u5B50\u4E8B\u4EF6\u3002","Create object _PARAM1_ at position _PARAM2_;_PARAM3_ (layer: _PARAM4_)":"\u5728\u4F4D\u7F6E_PARAM2_;_PARAM3_ \u5275\u5EFA\u7269\u4EF6 _PARAM1_ (\u5716\u5C64: _PARAM4_)","Object to create":"\u8981\u5275\u5EFA\u7684\u7269\u4EF6","Create an object from its name":"\u5F9E\u7269\u4EF6\u7684\u540D\u5B57\u5275\u5EFA\u4E00\u500B\u7269\u4EF6","Among the objects of the specified group, this action will create the object with the specified name.":"\u5728\u6307\u5B9A\u7D44\u7684\u7269\u4EF6\u4E2D\uFF0C\u6B64\u64CD\u4F5C\u5C07\u5275\u5EFA\u5177\u6709\u6307\u5B9A\u540D\u7A31\u7684\u7269\u4EF6\u3002","Among objects _PARAM1_, create object named _PARAM2_ at position _PARAM3_;_PARAM4_ (layer: _PARAM5_)":"\u5728\u7269\u4EF6_PARAM1_\u4E2D, \u5728\u4F4D\u7F6E_PARAM3_;_PARAM4_ (\u5C64: _PARAM5_)","Group of potential objects":"\u6F5B\u5728\u7269\u4EF6\u7D44","Group containing objects that can be created by the action.":"\u5305\u542B\u53EF\u4EE5\u901A\u904E\u8A72\u52D5\u4F5C\u5275\u5EFA\u7684\u7269\u4EF6\u7D44.","Name of the object to create":"\u8981\u5275\u5EFA\u7684\u7269\u4EF6\u540D\u7A31","Text representing the name of the object to create. If no objects with this name are found in the group, no object will be created.":"\u4EE3\u8868\u8981\u5275\u5EFA\u7684\u7269\u4EF6\u540D\u7A31\u7684\u6587\u672C\u3002\u5982\u679C\u6C92\u6709\u5728\u7D44\u4E2D\u627E\u5230\u5177\u6709\u6B64\u540D\u7A31\u7684\u7269\u4EF6\uFF0C\u5C07\u4E0D\u6703\u5275\u5EFA\u7269\u4EF6\u3002","Pick all object instances":"\u9078\u64C7\u6240\u6709\u7269\u4EF6\u5BE6\u4F8B","Pick all instances of the specified object(s). When you pick all instances, the next conditions and actions of this event work on all of them.":"\u9078\u64C7\u6307\u5B9A\u7269\u4EF6\u7684\u6240\u6709\u5BE6\u4F8B\u3002\u7576\u60A8\u9078\u64C7\u6240\u6709\u5BE6\u4F8B\u6642\uFF0C\u6B64\u4E8B\u4EF6\u7684\u4E0B\u4E00\u500B\u689D\u4EF6\u548C\u52D5\u4F5C\u90FD\u9069\u7528\u4E8E\u5B83\u5011\u3002","Pick all instances of _PARAM1_":"\u9078\u64C7 _PARAM1_ \u7684\u6240\u6709\u5BE6\u4F8B","Pick a random object":"\u6311\u9078\u4E00\u500B\u96A8\u6A5F\u7269\u4EF6","Pick one instance from all the specified objects. When an instance is picked, the next conditions and actions of this event work only on that object instance.":"\u5F9E\u6240\u6709\u6307\u5B9A\u7269\u4EF6\u4E2D\u9078\u64C7\u4E00\u500B\u5BE6\u4F8B\u3002\u7576\u9078\u64C7\u4E86\u4E00\u500B\u5BE6\u4F8B\u6642\uFF0C\u8A72\u4E8B\u4EF6\u7684\u4E0B\u4E00\u500B\u689D\u4EF6\u548C\u52D5\u4F5C\u50C5\u9069\u7528\u65BC\u8A72\u7269\u4EF6\u5BE6\u4F8B\u3002","Pick a random _PARAM1_":"\u6311\u9078\u4E00\u500B\u96A8\u6A5F _PARAM1_","Pick nearest object":"\u6311\u9078\u6700\u8FD1\u7684\u7269\u4EF6","Pick the instance of this object that is nearest to the specified position.":"\u9078\u64C7\u8207\u6307\u5B9A\u4F4D\u7F6E\u6700\u8FD1\u7684\u6B64\u7269\u4EF6\u7684\u5BE6\u4F8B\u3002","Pick the _PARAM0_ that is nearest to _PARAM1_;_PARAM2_":"\u9078\u64C7 _PARAM0_ \u8DDD\u96E2_PARAM1_;_PARAM2_","Apply movement to all objects":"\u5C07\u79FB\u52D5\u61C9\u7528\u4E8E\u6240\u6709\u7269\u4EF6","Moves all objects according to the forces they have. GDevelop calls this action at the end of the events by default.":"\u6839\u64DA\u6240\u64C1\u6709\u7684\u529B\u91CF\u79FB\u52D5\u6240\u6709\u7269\u4EF6\u3002 GDevelop\u9ED8\u8A8D\u5728\u4E8B\u4EF6\u7D50\u675F\u6642\u8ABF\u7528\u9019\u500B\u52D5\u4F5C\u3002","An object is moving toward another (using forces)":"\u4E00\u500B\u7269\u4EF6\u6B63\u5728\u5411\u53E6\u4E00\u500B\u7269\u4EF6\u79FB\u52D5(\u4F7F\u7528\u529B)","Check if an object moves toward another.\nThe first object must move.":"\u6AA2\u6E2C\u4E00\u500B\u7269\u4EF6\u662F\u5426\u671D\u5411\u53E6\u4E00\u500B\u7269\u4EF6\u79FB\u52D5.\n\u7B2C\u4E00\u500B\u7269\u4EF6\u5FC5\u9808\u79FB\u52D5.","_PARAM0_ is moving toward _PARAM1_":"_PARAM0_ \u5411 _PARAM1_ \u79FB\u52D5","Compare the distance between two objects.\nIf condition is inverted, only objects that have a distance greater than specified to any other object will be picked.":"\u6BD4\u8F03\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u7684\u8DDD\u96E2.\n\u5982\u679C\u689D\u4EF6\u53CD\u8F49\uFF0C\u50C5\u64C1\u6709\u8DDD\u96E2\u6BD4\u53E6\u4E00\u500B\u5927\u7684\u7269\u4EF6\u6703\u88AB\u6311\u9078","_PARAM0_ distance to _PARAM1_ is below _PARAM2_ pixels":"_PARAM0_ \u5230 _PARAM1_ \u7684\u8DDD\u96E2\u4F4E\u4E8E _PARAM2_ \u50CF\u7D20","Pick the instance of this object that is nearest to the specified position. If the condition is inverted, the instance farthest from the specified position is picked instead.":"\u9078\u64C7\u8207\u6307\u5B9A\u4F4D\u7F6E\u6700\u8FD1\u7684\u6B64\u7269\u4EF6\u7684\u5BE6\u4F8B\u3002\u5982\u679C\u689D\u4EF6\u88AB\u53CD\u8F49\uFF0C\u5247\u9078\u64C7\u8207\u6307\u5B9A\u4F4D\u7F6E\u6700\u9060\u7684\u5BE6\u4F8B\u3002","Number of objects":"\u7269\u4EF6\u6578\u76EE","Count how many of the specified objects are currently picked, and compare that number to a value. If previous conditions on the objects have not been used, this condition counts how many of these objects exist in the current scene.":"\u8A08\u7B97\u7576\u524D\u9078\u53D6\u7684\u6307\u5B9A\u7269\u4EF6\u7684\u6578\u91CF\uFF0C\u5E76\u5C07\u8A72\u6578\u91CF\u8207\u4E00\u500B\u503C\u9032\u884C\u6BD4\u8F03\u3002 \u5982\u679C\u7269\u4EF6\u4E0A\u5148\u524D\u7684\u689D\u4EF6\u672A\u88AB\u4F7F\u7528\uFF0C\u6B64\u689D\u4EF6\u8A08\u7B97\u7576\u524D\u5834\u666F\u4E2D\u5B58\u5728\u7684\u9019\u4E9B\u7269\u4EF6\u7684\u6578\u91CF\u3002","the number of _PARAM0_ objects":"_PARAM0_ \u7269\u4EF6\u7684\u6578\u91CF","Number of object instances on the scene":"\u5834\u666F\u4E2D\u7684\u7269\u4EF6\u5BE6\u4F8B\u6578","the number of instances of the specified objects living on the scene":"\u5834\u666F\u4E2D\u6307\u5B9A\u7269\u4EF6\u7684\u5BE6\u4F8B\u6578","the number of _PARAM1_ living on the scene":"\u51FA\u73FE\u5728\u5834\u666F\u4E0A\u7684 _PARAM1_ \u7684\u6578\u91CF","Number of object instances currently picked":"\u7576\u524D\u9078\u64C7\u7684\u7269\u4EF6\u5BE6\u4F8B\u6578","the number of instances picked by the previous conditions (or actions)":"\u88AB\u5148\u524D\u689D\u4EF6 (\u6216\u52D5\u4F5C) \u9078\u64C7\u7684\u5BE6\u4F8B\u6578\u91CF","the number of _PARAM0_ currently picked":"\u7576\u524D\u9078\u64C7\u7684 _PARAM0_ \u7684\u6578\u91CF","Test the collision between two objects using their collision masks.":"\u4F7F\u7528\u78B0\u649E\u906E\u7F69\u6E2C\u8A66\u5169\u500B\u7269\u4EF6\u4E4B\u9593\u7684\u78B0\u649E\u3002","_PARAM0_ is in collision with _PARAM1_":"_PARAM0_ \u8207 _PARAM1_ \u78B0\u649E","An object is turned toward another":"\u4E00\u500B\u7269\u4EF6\u8F49\u5411\u53E6\u4E00\u500B","Check if an object is turned toward another":"\u6AA2\u67E5\u7269\u4EF6\u662F\u5426\u5DF2\u8F49\u5411\u53E6\u4E00\u500B\u7269\u4EF6\u3002","_PARAM0_ is rotated towards _PARAM1_":"_PARAM0_ \u8F49\u5411\u5230 _PARAM1_","Name of the object":"\u7269\u4EF6\u7684\u540D\u7A31","Name of the second object":"\u7B2C\u4E8C\u500B\u7269\u4EF6\u7684\u540D\u7A31","Angle of tolerance, in degrees (0: minimum tolerance)":"\u516C\u5DEE\u89D2\u5EA6\uFF0C\u5EA6\uFF080\uFF1A\u6700\u5C0F\u516C\u5DEE\uFF09","_PARAM0_ is turned toward _PARAM1_ \xB1 _PARAM2_\xB0":"_PARAM0_ \u671D\u5411 _PARAM1_ \xB1 _PARAM2_\xB0","Raycast":"\u5C04\u7DDA\u5EE3\u64AD","Sends a ray from the given source position and angle, intersecting the closest object.\nThe intersected object will become the only one taken into account.\nIf the condition is inverted, the object to be intersected will be the farthest one within the ray radius.":"\u5F9E\u7D66\u5B9A\u7684\u6E90\u4F4D\u7F6E\u548C\u89D2\u5EA6\u767C\u9001\u4E00\u689D\u5C04\u7DDA\uFF0C\u8207\u6700\u8FD1\u7684\u7269\u4EF6\u76F8\u4EA4\u3002\n\u76F8\u4EA4\u7684\u7269\u4EF6\u5C07\u6210\u70BA\u552F\u4E00\u8003\u616E\u7684\u7269\u4EF6\u3002\n\u5982\u679C\u689D\u4EF6\u53CD\u8F49\uFF0C\u8981\u76F8\u4EA4\u7684\u7269\u4EF6\u5C07\u662F\u5C04\u7DDA\u534A\u5F91\u5167\u6700\u9060\u7684\u7269\u4EF6.","Cast a ray from _PARAM1_;_PARAM2_, angle: _PARAM3_ and max distance: _PARAM4_px, against _PARAM0_, and save the result in _PARAM5_, _PARAM6_":"\u5F9E _PARAM1_; _PARAM2_, \u89D2\u5EA6: _PARAM3_ \u548C\u6700\u5927\u8DDD\u96E2: _PARAM4_px, \u5230 _PARAM0_, \u5E76\u5C07\u7D50\u679C\u4FDD\u5B58\u5230 _PARAM5_, _PARAM6_","Objects to test against the ray":"\u8981\u5C0D\u5C04\u7DDA\u6E2C\u8A66\u7684\u7269\u4EF6","Ray source X position":"\u5C04\u7DDA\u6E90 X \u4F4D\u7F6E","Ray source Y position":"\u5C04\u7DDA\u6E90 Y \u4F4D\u7F6E","Ray angle (in degrees)":"\u767C\u5C04\u89D2\u5EA6(\u5EA6)","Ray maximum distance (in pixels)":"\u5C04\u7DDA\u6700\u5927\u8DDD\u96E2(\u50CF\u7D20)","Result X position scene variable":"\u7D50\u679C X \u4F4D\u7F6E\u5834\u666F\u8B8A\u91CF","Scene variable where to store the X position of the intersection. If no intersection is found, the variable won't be changed.":"\u5834\u666F\u8B8A\u91CF\u5B58\u5132\u4EA4\u53C9\u8DEF\u7531\u7684 X \u4F4D\u7F6E\u3002\u5982\u679C\u627E\u4E0D\u5230\u4EA4\u9EDE\uFF0C\u5247\u8B8A\u91CF\u4E0D\u6703\u88AB\u66F4\u6539\u3002","Result Y position scene variable":"\u7D50\u679C Y \u4F4D\u7F6E\u5834\u666F\u8B8A\u91CF","Scene variable where to store the Y position of the intersection. If no intersection is found, the variable won't be changed.":"\u5834\u666F\u8B8A\u91CF\u5B58\u5132\u4EA4\u53C9\u8DEF\u7531\u7684 Y \u4F4D\u7F6E\u3002\u5982\u679C\u627E\u4E0D\u5230\u4EA4\u9EDE\uFF0C\u5247\u8B8A\u91CF\u4E0D\u6703\u88AB\u66F4\u6539\u3002","Raycast to position":"\u5149\u7DDA\u6295\u5C04\u5230\u4F4D\u7F6E","Sends a ray from the given source position to the final point, intersecting the closest object.\nThe intersected object will become the only one taken into account.\nIf the condition is inverted, the object to be intersected will be the farthest one within the ray radius.":"\u5F9E\u7D66\u5B9A\u7684\u6E90\u4F4D\u7F6E\u5411\u6700\u7D42\u9EDE\u767C\u9001\u4E00\u689D\u5C04\u7DDA\uFF0C\u8207\u6700\u8FD1\u7684\u7269\u4EF6\u76F8\u4EA4\u3002\n\u76F8\u4EA4\u7684\u7269\u4EF6\u5C07\u6210\u70BA\u552F\u4E00\u8003\u616E\u7684\u7269\u4EF6\u3002\n\u5982\u679C\u689D\u4EF6\u53CD\u8F49\uFF0C\u8981\u76F8\u4EA4\u7684\u7269\u4EF6\u5C07\u662F\u8303\u570D\u5167\u6700\u9060\u7684\u7269\u4EF6\u5C04\u7DDA\u534A\u5F91\u3002","Cast a ray from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ against _PARAM0_, and save the result in _PARAM5_, _PARAM6_":"\u5F9E _PARAM1_; _PARAM2_ \u5230 _PARAM3_; _PARAM4_ \u548C _PARAM0_ \u65BD\u653E\u5C04\u7DDA\uFF0C\u5E76\u5C07\u7D50\u679C\u4FDD\u5B58\u5728_PARAM5_, _PARAM6_","Ray target X position":"\u5C04\u7DDA\u76EE\u6A19 X \u4F4D\u7F6E","Ray target Y position":"\u5C04\u7DDA\u76EE\u6A19 Y \u4F4D\u7F6E","Count the number of the specified objects being currently picked in the event":"\u8A08\u6578\u7576\u524D\u5728\u4E8B\u4EF6\u4E2D\u9078\u64C7\u7684\u7269\u4EF6\u7684\u6578\u91CF","Return the name of the object":"\u8FD4\u56DE\u7269\u4EF6\u7684\u540D\u7A31","Object layer":"\u5C0D\u8C61\u5716\u5C64","Return the name of the layer the object is on":"\u8FD4\u56DE\u7269\u4EF6\u6240\u5728\u5716\u5C64\u7684\u540D\u7A31","Set _PARAM0_ as : ":"\u8A2D\u5B9A _PARAM0_ \u70BA : ","Change : ":"\u66F4\u6539 : ","Change of _PARAM0_: ":"\u66F4\u6539 _PARAM0_\u7684 : ","Change : ":"\u66F4\u6539 : ","_PARAM0_ is ":"_PARAM0_ \u662F ","":"","Value to compare":"\u6BD4\u8F03\u6578\u503C"," of _PARAM0_ ":"_PARAM0_\u7684 "," ":" ","Smooth the image":"\u5E73\u6ED1\u5716\u50CF","Preload as sound":"\u9810\u52A0\u8F09\u70BA\u8072\u97F3","Loads the fully decoded file into cache, so it can be played right away as Sound with no further delays.":"\u5C07\u5B8C\u5168\u89E3\u78BC\u7684\u6587\u4EF6\u52A0\u8F09\u5230\u7DE9\u5B58\u4E2D\uFF0C\u9019\u6A23\u5C31\u53EF\u4EE5\u7ACB\u5373\u5C07\u5176\u4F5C\u70BA\u8072\u97F3\u64AD\u653E\uFF0C\u800C\u4E0D\u6703\u6709\u9032\u4E00\u6B65\u7684\u5EF6\u9072\u3002","Preload as music":"\u9810\u52A0\u8F09\u70BA\u97F3\u6A02","Prepares the file for immediate streaming as Music (does not wait for complete download).":"\u5C07\u6587\u4EF6\u6E96\u5099\u70BA\u5373\u6642\u6D41\u5A92\u9AD4\u64AD\u653E\u97F3\u6A02(\u4E0D\u8981\u7B49\u5F85\u5B8C\u6574\u4E0B\u8F09)\u3002","Preload in cache":"\u5728\u7DE9\u5B58\u4E2D\u9810\u52A0\u8F09","Loads the complete file into cache, but does not decode it into memory until requested.":"\u5C07\u5B8C\u6574\u7684\u6587\u4EF6\u52A0\u8F09\u5230\u7DE9\u5B58\u4E2D\uFF0C\u4F46\u5728\u8ACB\u6C42\u4E4B\u524D\u4E0D\u6703\u5C07\u5176\u89E3\u78BC\u5230\u5167\u5B58\u4E2D\u3002","Disable preloading at game startup":"\u5728\u904A\u6232\u555F\u52D5\u6642\u7981\u7528\u9810\u52A0\u8F09","The expression has extra character at the end that should be removed (or completed if your expression is not finished).":"\u8A72\u8868\u9054\u5F0F\u5728\u7D50\u5C3E\u6709\u984D\u5916\u7684\u5B57\u7B26\uFF0C\u61C9\u522A\u9664(\u6216\u5982\u679C\u60A8\u7684\u8868\u9054\u5F0F\u672A\u5B8C\u6210\u5247\u5B8C\u6210)\u3002","Missing a closing parenthesis. Add a closing parenthesis for each opening parenthesis.":"\u7F3A\u5C11\u4E00\u500B\u5C01\u9589\u62EC\u865F\u3002\u70BA\u6BCF\u500B\u958B\u982D\u62EC\u865F\u6DFB\u52A0\u4E00\u500B\u5C01\u9589\u62EC\u865F\u3002","Missing a closing bracket. Add a closing bracket for each opening bracket.":"\u7F3A\u5C11\u4E00\u500B\u7D50\u5C3E\u62EC\u865F\u3002\u70BA\u6BCF\u500B\u958B\u982D\u62EC\u865F\u6DFB\u52A0\u4E00\u500B\u7D50\u5C3E\u62EC\u865F\u3002","A name should be entered after the dot.":"\u61C9\u8A72\u5728\u9EDE\u540E\u9762\u8F38\u5165\u4E00\u500B\u540D\u7A31\u3002","A dot or bracket was expected here.":"\u9019\u91CC\u9700\u8981\u4E00\u500B\u9EDE\u6216\u62EC\u865F\u3002","An opening parenthesis was expected here to call a function.":"\u9810\u671F\u9019\u91CC\u6709\u4E00\u500B\u958B\u982D\u62EC\u865F\u4F86\u8ABF\u7528\u51FD\u6578\u3002","The list of parameters is not terminated. Add a closing parenthesis to end the parameters.":"\u53C3\u6578\u5217\u8868\u672A\u7D42\u6B62\u3002\u6DFB\u52A0\u4E00\u500B\u9589\u5408\u62EC\u865F\u4EE5\u7D50\u675F\u53C3\u6578\u3002","You've used an operator that is not supported. Operator should be either +, -, / or *.":"\u60A8\u5DF2\u7D93\u4F7F\u7528\u4E86\u4E0D\u53D7\u652F\u6301\u7684\u904B\u7B97\u7B26\u3002\u64CD\u4F5C\u54E1\u61C9\u8A72\u662F +, -, / \u6216 *\u3002","You've used an \"unary\" operator that is not supported. Operator should be either + or -.":"\u60A8\u4F7F\u7528\u4E86\u4E0D\u53D7\u652F\u6301\u7684\u201C\u4E00\u5143\u201D\u904B\u7B97\u7B26\u3002\u904B\u7B97\u7B26\u61C9\u70BA+\u6216-\u3002","You've used an operator that is not supported. Only + can be used to concatenate texts.":"\u60A8\u5DF2\u7D93\u4F7F\u7528\u4E86\u4E0D\u652F\u6301\u7684\u904B\u7B97\u7B26\u3002\u53EA\u6709+ \u53EF\u4EE5\u7528\u4F86\u9023\u63A5\u6587\u672C\u3002","Operators (+, -, /, *) can't be used with an object name. Remove the operator.":"\u904B\u7B97\u7B26 (+, -, /, *) \u4E0D\u80FD\u4F7F\u7528\u7269\u4EF6\u540D\u7A31\u3002\u522A\u9664\u64CD\u4F5C\u8005\u3002","Operators (+, -, /, *) can't be used in variable names. Remove the operator from the variable name.":"\u904B\u7B97\u7B26 (+, -, /, *) \u4E0D\u80FD\u7528\u5728\u8B8A\u91CF\u540D\u7A31\u4E2D\u3002\u5F9E\u8B8A\u91CF\u540D\u7A31\u4E2D\u522A\u9664\u64CD\u4F5C\u54E1\u3002","You've used an operator that is not supported. Only + can be used to concatenate texts, and must be placed between two texts (or expressions).":"\u60A8\u5DF2\u7D93\u4F7F\u7528\u4E86\u4E0D\u53D7\u652F\u6301\u7684\u904B\u7B97\u7B26\u3002\u53EA\u6709+ \u53EF\u4EE5\u7528\u4F86\u5408\u5E76\u6587\u672C\uFF0C\u4E14\u5FC5\u9808\u653E\u5728\u5169\u500B\u6587\u672C\u4E4B\u9593(\u6216\u8868\u9054\u5F0F)\u3002","Operators (+, -) can't be used with an object name. Remove the operator.":"\u904B\u7B97\u7B26(+, -) \u4E0D\u80FD\u4F7F\u7528\u7269\u4EF6\u540D\u7A31\u3002\u522A\u9664\u64CD\u4F5C\u8005\u3002","Operators (+, -) can't be used in variable names. Remove the operator from the variable name.":"\u904B\u7B97\u7B26 (+, -) \u4E0D\u80FD\u7528\u5728\u8B8A\u91CF\u540D\u7A31\u4E2D\u3002\u5F9E\u8B8A\u91CF\u540D\u7A31\u4E2D\u522A\u9664\u904B\u7B97\u7B26\u3002","You entered a number, but a text was expected (in quotes).":"\u60A8\u8F38\u5165\u4E86\u4E00\u500B\u6578\u5B57\uFF0C\u4F46\u9700\u8981\u4E00\u500B\u6587\u672C(\u5F15\u865F)\u3002","You entered a number, but this type was expected:":"\u60A8\u8F38\u5165\u4E86\u4E00\u500B\u6578\u5B57\uFF0C\u4F46\u9700\u8981\u9019\u500B\u985E\u578B\uFF1A","You entered a text, but a number was expected.":"\u60A8\u8F38\u5165\u4E86\u4E00\u500B\u6587\u672C\uFF0C\u4F46\u9810\u8A08\u6703\u6709\u4E00\u500B\u6578\u5B57\u3002","You entered a text, but this type was expected:":"\u60A8\u8F38\u5165\u4E86\u4E00\u500B\u6587\u672C\uFF0C\u4F46\u9700\u8981\u9019\u500B\u985E\u578B\uFF1A","No object, variable or property with this name found.":"\u672A\u627E\u5230\u5177\u6709\u6B64\u540D\u7A31\u7684\u7269\u4EF6\u3001\u8B8A\u91CF\u6216\u5C6C\u6027\u3002","You entered a variable, but this type was expected:":"\u60A8\u8F38\u5165\u4E86\u4E00\u500B\u8B8A\u91CF\uFF0C\u4F46\u9019\u7A2E\u985E\u578B\u662F\u9810\u671F\u7684\uFF1A","You can't use the brackets to access an object variable. Use a dot followed by the variable name, like this: `MyObject.MyVariable`.":"\u4E0D\u80FD\u4F7F\u7528\u65B9\u62EC\u865F\u8A2A\u554F\u7269\u4EF6\u8B8A\u91CF\u3002\u5728\u8B8A\u91CF\u540D\u540E\u9762\u52A0\u4E00\u500B\u9EDE\uFF0C\u4F8B\u5982: \u2018 MyObject.Myvariable\u2019\u3002","You must wrap your text inside double quotes (example: \"Hello world\").":"\u60A8\u5FC5\u9808\u628A\u60A8\u7684\u6587\u672C\u88DD\u5728\u534A\u89D2\u96D9\u5F15\u865F\u5167\uFF08\u4F8B\u5982\uFF1A\"Hello world\"\uFF09\u3002","You must enter a number.":"\u60A8\u5FC5\u9808\u8F38\u5165\u4E00\u500B\u6578\u5B57\u3002","You must enter a number or a text, wrapped inside double quotes (example: \"Hello world\"), or a variable name.":"\u60A8\u5FC5\u9808\u8F38\u5165\u4E00\u500B\u6578\u5B57\u6216\u6587\u672C\uFF0C\u5305\u88DD\u5728\u96D9\u5F15\u865F (\u4F8B\u5982\uFF1A\"Hello world\")\uFF0C\u6216\u8005\u8F38\u5165\u4E00\u500B\u8B8A\u91CF\u540D\u7A31\u3002","You've entered a name, but this type was expected:":"\u60A8\u8F38\u5165\u4E86\u4E00\u500B\u540D\u5B57\uFF0C\u4F46\u662F\u9700\u8981\u9019\u500B\u985E\u578B\uFF1A","You must enter a number or a valid expression call.":"\u60A8\u5FC5\u9808\u8F38\u5165\u4E00\u500B\u6578\u5B57\u6216\u6709\u6548\u7684\u8868\u9054\u5F0F\u8ABF\u7528\u3002","You must enter a text (between quotes) or a valid expression call.":"\u60A8\u5FC5\u9808\u8F38\u5165\u6587\u672C(\u5728\u5F15\u7528\u5167) \u6216\u6709\u6548\u7684\u8868\u9054\u5F0F\u8ABF\u7528\u3002","You must enter a variable name.":"\u8ACB\u8F38\u5165\u8B8A\u91CF\u540D\u7A31\u3002","You must enter a valid object name.":"\u8ACB\u8F38\u5165\u6709\u6548\u7269\u4EF6\u540D\u7A31\u3002","You must enter a valid expression.":"\u8ACB\u8F38\u5165\u6709\u6548\u7684\u8868\u9054\u5F0F\u3002","This variable has the same name as a property. Consider renaming one or the other.":"\u6B64\u8B8A\u91CF\u8207\u4E00\u500B\u5C6C\u6027\u540C\u540D\u3002\u8003\u616E\u91CD\u547D\u540D\u5176\u4E2D\u4E00\u500B\u3002","This variable has the same name as a parameter. Consider renaming one or the other.":"\u6B64\u8B8A\u91CF\u8207\u4E00\u500B\u53C3\u6578\u540C\u540D\u3002\u8003\u616E\u91CD\u547D\u540D\u5176\u4E2D\u4E00\u500B\u3002","No variable with this name found.":"\u672A\u627E\u5230\u5177\u6709\u6B64\u540D\u7A31\u7684\u8B8A\u91CF\u3002","Undefined":"\u672A\u5B9A\u7FA9","Dimensionless":"\u7121\u5C3A\u5BF8","degree":"\u5EA6","second":"\u79D2","pixel":"\u50CF\u7D20","pixel per second":"\u50CF\u7D20\u6BCF\u79D2","How much distance is covered per second.":"\u6BCF\u79D2\u7D93\u904E\u591A\u5C11\u8DDD\u96E2\u3002","pixel per second, per second":"\u50CF\u7D20\u6BCF\u79D2\uFF0C\u6BCF\u79D2","How much speed is gained (or lost) per second.":"\u6BCF\u79D2\u589E\u52A0(\u6216\u6E1B\u5C11)\u591A\u5C11\u901F\u5EA6\u3002","Force (in Newton)":"\u529B(\u725B\u9813)","meter kilogram per second, per second":"\u7C73\u5343\u514B\u6BCF\u79D2\uFF0C\u6BCF\u79D2","A unit to measure forces.":"\u6E2C\u91CF\u529B\u7684\u55AE\u4F4D\u3002","Angular speed":"\u89D2\u901F\u5EA6","degree per second":"\u6BCF\u79D2\u5EA6\u6578","How much angle is covered per second.":"\u6BCF\u79D2\u8986\u84CB\u591A\u5C11\u89D2\u5EA6\u3002"}}; \ No newline at end of file +/* eslint-disable */module.exports={"languageData":{"plurals":function(n,ord){if(ord)return"other";return"other"}},"messages":{"\"{0}\" will be the new build of this game published on gd.games. Continue?":function(a){return["\u201C",a("0"),"\u201D\u5C07\u662F\u6B64\u6E38\u6232\u5728 gd.games \u4E0A\u767C\u5E03\u7684\u65B0\u7248\u672C\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F"]},"\"{0}\" will be unpublished on gd.games. Continue?":function(a){return[a("0"),"\u5C07\u5728 gd.games\u4E0A\u53D6\u6D88\u767C\u5E03\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F"]},"% of parent":"占總體的百分比","% of total":"占總量的百分比","(Events)":"(事件)","(Object)":"(nigger)","(already installed in the project)":"(已在項目中安裝)","(default order)":"(預設順序)","(deleted)":"(已刪除)","(install it from the Project Manager)":"(從項目管理器安裝)","(or paste actions)":"(或粘貼動作)","(or paste conditions)":"(或粘貼條件)","(yet!)":"(尚未!)","* (multiply by)":"* ( 乘以 )","+ (add)":"+(加上)","+ {0} tag(s)":function(a){return["+ ",a("0")," \u6A19\u7C3D(s)"]},", objects /*{parameterObjects}*/":function(a){return[", \u5C0D\u8C61 /*",a("parameterObjects"),"*/"]},"- (subtract)":"- (減去) ","/ (divide by)":"/ (除以)","/* Click here to choose objects to pass to JavaScript */":"/* 點擊這里選擇要傳遞到 JavaScript 的對象*/","0,date":"0,日期","0,date,date0":"0,date,date0","0,number,number0":"0,數字,數字0","1 child":"1 個衍生節點","1 day ago":"1 天前","1 hour ago":"1 小時前","1 match":"1 場比賽","1 minute":"1 分鐘","1 month":"每月","1 new feedback":"一個新回饋","1 review":"一個觀看次數","1) Create a Certificate Signing Request and a Certificate":"1) 創建證書簽名請求和證書","100% (Default)":"100% (預設)","100+ exports created":"超過100個導出存擋創造了","10th":"第十","1st":"第一","2 previews in 2 windows":"二次觀看在二個視","2) Upload the Certificate generated by Apple":"2) 上傳Apple生成的證書","200%":"200%","2D effects":"二維效果","2D object":"二維物件","2D objects can't be edited when in 3D mode":"當在 3D 模式下時,2D 物件無法編輯","2nd":"第二","3 previews in 3 windows":"在三個視窗中有三次觀看","3) Upload one or more Mobile Provisioning Profiles":"3) 上傳一個或多個移動配置文件","3-part tutorial to creating and publishing a game from scratch.":"從零開始創建和發布游戲的3部曲教程。","300%":"300%","3D effects":"三維效果","3D model":"三維模型","3D models":"三維模型","3D object":"三維物件","3D platforms":"三維平台","3D settings":"三維設置","3D, real-time editor (new)":"3D、即時編輯器(新)","3rd":"第三","4 previews in 4 windows":"在四個視窗中有四次觀看","400%":"400%","4th":"第四","500%":"500%","5th":"第五","600%":"600%","6th":"第六","700%":"700%","7th":"第七","800%":"800%","8th":"第八","9th":"第九",":":":","< (less than)":"<(小于)","<0>For every child in<1><2/>{0}, store the child in variable<3><4/>{1}, the child name in<5><6/>{2}and do:":function(a){return["<0>\u5C0D\u4E8E<1><2/>",a("0"),"\u4E2D\u7684\u6BCF\u500B\u5B69\u5B50\uFF0C\u5C07\u5B69\u5B50\u5B58\u5132\u5728\u8B8A\u91CF\u4E2D<3><4/>",a("1"),"\uFF0C\u5B69\u5B50\u7684\u540D\u5B57\u5728<5><6/>",a("2"),"\u5E76\u4E14\u505A\uFF1A"]},"<0>Share your game and start collecting data from your players to better understand them.":"分享你的遊戲<0>次 和 你的玩家收集數據<0>次來更好地了解它們","<0>{0} set to {1}.":function(a){return["<0>",a("0")," \u8A2D\u5B9A\u70BA ",a("1"),"\u3002"]},"":"<創建新的擴展名>","":"<輸入組名稱>","":"< 輸入外部事件的名稱 >"," (optional)":"":"<選擇一個物件>","= (equal to)":"= (等于)","= (set to)":"= (設為)","> (greater than)":"> (大于)","A condition that can be used in other events sheet. You can define the condition parameters: objects, texts, numbers, layers, etc...":"可以在其他事件表中使用的條件。您可以定義條件參數:對象,文本,數字,圖層等......","A condition that can be used on objects with the behavior. You can define the condition parameters: objects, texts, numbers, layers, etc...":"可以在具有行為的對象上使用的條件。您可以定義條件參數:對象,文本,數字,圖層等......","A condition that can be used on the object. You can define the condition parameters: objects, texts, numbers, layers, etc...":"可以在對象上使用的條件。您可以定義條件參數:對象、文本、數字、圖層等...","A critical error occurred in the {componentTitle}.":function(a){return[a("componentTitle")," \u4E2D\u767C\u751F\u56B4\u91CD\u932F\u8AA4\u3002"]},"A functioning save has been found!":"已找到一個有效的存檔!","A game to publish":"要發布的游戲","A global object with this name already exists. Please change the group name before setting it as a global group":"具有此名稱的全局對象已經存在。請在將其設置為全局組之前更改組名稱。","A global object with this name already exists. Please change the object name before setting it as a global object":"此名稱的全局對象已經存在。請在將其設置為全局對象之前更改對象名稱","A lighting layer was created. Lights will be placed on it automatically. You can change the ambient light color in the properties of this layer":"已創建一個照明圖層。燈光將自動放置在它上。您可以在此圖層屬性中更改環境光。","A link or file will be created but the game will not be registered.":"一個鏈接或文件將被創建,但游戲將不會被注冊。","A new physics engine (Physics Engine 2.0) is now available. You should prefer using it for new game. For existing games, note that the two behaviors are not compatible, so you should only use one of them with your objects.":"現在可以使用一個新的物理引擎(物理引擎2.0)。您應該更喜歡使用它來做新的游戲。對于現有游戲,請注意這兩個行為是不兼容的,因此您只能為您的對象使用其中一個行為。","A new secure window will open to complete the purchase.":"一個新的安全窗口將打開以完成購買。","A new update is available!":"一個更新能夠運行","A new update is being downloaded...":"一個更新正在載入","A new update will be installed after you quit and relaunch GDevelop":"當你離開和重載GDevelop, 一個更新才能夠被載入","A new window":"一個新的視窗","A scale under 1 on a Bitmap text object can downgrade the quality text, prefer to remake a bitmap font smaller in the external bmFont editor.":"在位圖文本對象上,低于 1 的縮放尺度會降低文本的質量。請最好在如 bmFont 的外部編輯器中把位圖字體重新制作得小一些。","A student account cannot be an admin of your team.":"一個學生戶口不能成為你團隊的管理者","A temporary image to help you visualize the shape/polygon":"一張有助于你理解形狀或多邊形的圖片","AI Chat History":"AI 聊天歷史","API Issuer ID: {0}":function(a){return["API \u9812\u767C\u8005 ID\uFF1A",a("0")]},"API Issuer given by Apple":"Apple 提供的 API 發行者","API key given by Apple":"Apple 提供的 API 密鑰","API key: {0}":function(a){return["API \u5BC6\u9470\uFF1A",a("0")]},"APK (for testing on device or sharing outside Google Play)":"APK (用于在設備上測試或在谷歌播放外面分享)","Abandon":"棄用","Abort":"放棄","About GDevelop":"關于GDevelop","About dialog":"對話框“關于”","About education plan":"關于教育計劃","Accept":"接受","Access GDevelop’s resources for teaching game development and promote careers in technology.":"訪問 GDevelop 的資源來教授游戲開發和促進技術職業。","Access project history, name saves, restore older versions.<0/>Get a subscription to enable this feature.":"訪問項目歷史記錄、名稱保存、還原舊版本。<0/>獲取訂閱以啟用此功能。","Access public profile":"訪問公共配置文件","Achievements":"成就","Action":"執行","Action with operator":"操作員操作","Actions":"動作","Activate":"啟動","Activate Later":"稍後啟用","Activate Now":"立即啟用","Activate my subscription":"啟用我的訂閱","Activate your subscription code":"啟用您的訂閱代碼","Activate {productName}":function(a){return["\u555F\u52D5 ",a("productName")]},"Activated":"激活","Activating...":"啟動中...","Active":"已啟用","Active until {0}":function(a){return["\u6709\u6548\u76F4\u81F3 ",a("0")]},"Active, we will get in touch to get the campaign up!":"積極主動,我們將與您聯系以開展活動!","Ad revenue sharing off":"廣告回饋分成𨶹閉","Ad revenue sharing on":"廣告回饋分成開啟","Adapt automatically":"自動適應","Adapt collision mask?":"適應碰撞遮罩?","Adapt events in scene <0>{scene_name} (\"{placementHint}\").":function(a){return["\u5728\u5834\u666F <0>",a("scene_name")," \u4E2D\u8ABF\u6574\u4E8B\u4EF6\uFF08\"",a("placementHint"),"\"\uFF09\u3002"]},"Add":"添加","Add 2D lighting layer":"添加照明圖層","Add <0>{object_name} to scene <1>{scene_name}.":function(a){return["\u5C07 <0>",a("object_name")," \u6DFB\u52A0\u5230\u5834\u666F <1>",a("scene_name")," \u4E2D\u3002"]},"Add Ordering":"新增排序","Add a 2D effect":"添加 2D 效果","Add a 3D effect":"添加 3D 效果","Add a Long Description":"添加一個長描述","Add a New Extension":"添加一個新的擴展","Add a behavior":"添加一個行為","Add a certificate/profile first":"首先添加證書/配置文件","Add a collaborator":"創造","Add a comment":"添加一條評論","Add a folder":"創造一個檔案","Add a function":"添加一個函數","Add a health bar for handle damage.":"添加健康條來處理傷害。","Add a health bar to this jumping character, losing health when hitting spikes.":"向這個角色加入一個血量條,它碰到尖刺會掉血","Add a layer":"添加圖層","Add a link to your donation page. It will be displayed on your gd.games profile and game pages.":"添加指向您的捐贈頁面的鏈接。它將顯示在您的 gd.games 個人資料和游戲頁面上。","Add a local variable":"加入公眾變數,所有角色","Add a local variable to the selected event":"將局部變量添加到所選事件","Add a new behavior to the object":"添加一項新行為到對象","Add a new empty event":"添加新的空事件","Add a new event":"添加一個新事件","Add a new folder":"添加新文件夾","Add a new function":"新增函式","Add a new group":"添加一個新組","Add a new group...":"添加新組...","Add a new object":"添加一個新對象","Add a new option":" 添加新選項","Add a new property":"添加新屬性","Add a parameter":"添加參數","Add a parameter below":"在下面添加一個參數","Add a point":"添加點","Add a property":"添加屬性","Add a scene":"添加一個場景","Add a score and display it on the screen":"添加分數並在螢幕上顯示","Add a sprite":"添加精靈","Add a sub-condition":"添加子條件","Add a sub-event to the selected event":"為選定事件添加子事件","Add a time attack mode, where you have to reach the end as fast as possible.":"加上時間攻擊模式,你必須盡快到達終點。","Add a time attack mode.":"添加時間攻擊模式。","Add a variable":"添加一個變量","Add a vertex":"添加頂點","Add action":"添加操作","Add again":"再次添加","Add an Auth Key first":"首先添加認證密鑰","Add an animation":"添加動畫","Add an event":"添加事件","Add an external layout":"添加外部布局","Add an object":"添加對象","Add any object variable to the group":"Add any object variable to the group","Add asset":"新增資產","Add characters and objects to the scene.":"將角色和物體添加到場景。","Add child":"添加子項","Add collaborator":"添加合作人","Add collision mask":"添加碰撞遮罩","Add condition":"添加條件","Add external events":"添加外部事件","Add instance to the scene":"添加實例到場景中","Add leaderboards to your online Game":"給你的在線游戲添加排行榜","Add new":"添加新內容","Add object":"新增對象","Add or edit":"新增或編輯","Add parameter...":"添加參數...","Add personality and publish your game.":"添加個性化並發布您的遊戲。","Add personality to your game and publish it online.":"為您的游戲添加個性,并在線發布。","Add player logins and a leaderboard.":"添加玩家登錄和排行榜。","Add player logins to your game and add a leaderboard.":"將玩家登錄添加到您的游戲并添加排行榜。","Add solid rocks that falls from the sky at a random position around the player every 0.5 seconds":"每 0.5 秒在玩家周圍的隨機位置添加從天上掉落的實心岩石","Add the assets":"添加素材","Add these assets to my scene":"將這些資產添加到我的場景中","Add these assets to the project":"將這些素材添加到項目","Add this asset to my scene":"將此資產添加到我的場景中","Add this asset to the project":"將此素材添加到項目","Add to project":"加入至專案","Add to the scene":"添加到場景","Add variable":"添加變量","Add variable...":"添加變量...","Add your Discord username to get a role on the GDevelop Discord or access to a dedicated channel if you have a Gold or Pro subscription! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"如果您有 Gold 或 Pro 訂閱,添加您的 Discord 用戶名即可在 GDevelop Discord 獲得角色或訪問專用頻道!加入 [GDevelop Discord](https://discord.gg/gdevelop)。","Add your Discord username to get a special role on the GDevelop Discord! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"添加您的 Discord 用戶名即可在 GDevelop Discord 獲得特別角色!加入 [GDevelop Discord](https://discord.gg/gdevelop)。","Add your Discord username to get access to a dedicated channel! Join the [GDevelop Discord](https://discord.gg/gdevelop).":"添加您的 Discord 用戶名即可訪問專用頻道!加入 [GDevelop Discord](https://discord.gg/gdevelop)。","Add your first animation":"添加您的第一個動畫","Add your first behavior":"添加您的第一個行為","Add your first characters to the scene and throw your first objects.":"將您的第一個角色添加到場景中,并投擲您的第一個對象。","Add your first effect":"添加您的第一個特效","Add your first event":"添加您的第一個事件","Add your first global variable":"添加您的首個全局變量","Add your first instance variable":"添加您的第一個實例變量","Add your first object group variable":"在第一個物件組加入變數","Add your first object variable":"添加您的第一個對象變量","Add your first parameter":"添加您的第一個參數","Add your first property":"添加您的第一個屬性","Add your first scene variable":"添加您的第一個場景變量","Add {behaviorName} (<0>{behaviorTypeLabel}) behavior to <1>{object_name} in scene <2>{scene_name}.":function(a){return["\u5C07 ",a("behaviorName")," (<0>",a("behaviorTypeLabel"),") \u884C\u70BA\u6DFB\u52A0\u5230 <1>",a("object_name")," \u5728\u5834\u666F <2>",a("scene_name")," \u4E2D\u3002"]},"Add...":"添加...","Adding...":"添加中...","Additional properties will appear here when you add behaviors to objects, such as the 2D or 3D Physics Engine.":"當您將行為添加到對象時,額外屬性將在此處顯示,例如 2D 或 3D 物理引擎。","Additive rendering":"附加渲染","Adjust height to fill screen (extend or crop)":"調整高度以填滿螢幕(延展或裁剪)","Adjust width to fill screen (extend or crop)":"調整寬度以填滿螢幕(延展或裁剪)","Ads":"廣告","Advanced":"高級","Advanced course":"高級課程","Advanced options":"高級選項","Advanced properties":"高級屬性","Advanced settings":"高級設置","Adventure":"冒險","After watching the video, use this template to complete the following tasks.":"觀看完影片後,使用這個範本來完成以下任務。","Alive":"活著","All":"全部","All asset packs":"所有資產包","All behaviors being directly referenced in the events:":"事件中直接引用的所有行為:","All builds":"所有版本","All categories":"所有類別","All current entries will be deleted, are you sure you want to reset this leaderboard? This can't be undone.":"所有當前作品都將被刪除,您確定要重置此排行榜嗎?這不能撤消。","All entries":"所有作品","All entries are displayed.":"顯示所有作品。","All exports":"導出全部","All feedbacks processed":"所有意見","All game templates":"所有游戲模板","All objects potentially used in events: {0}":function(a){return["\u4E8B\u4EF6\u4E2D\u53EF\u80FD\u4F7F\u7528\u7684\u6240\u6709\u5C0D\u8C61: ",a("0")]},"All the entries of {0} will be deleted too. This can't be undone.":function(a){return["\u6240\u6709",a("0"),"\u7684\u9805\u76EE\u4E5F\u6703\u88AB\u522A\u9664 \uFF0C \u9019\u4E0D\u80FD\u88AB\u53D6\u6D88"]},"All your changes will be lost. Are you sure you want to cancel?":"您所做的所有更改都將丟失。你確定要取消?","All your games were played more than {0} times in total!":function(a){return["\u60A8\u6240\u6709\u7684\u6E38\u6232\u7E3D\u5171\u73A9\u4E86\u8D85\u904E ",a("0")," \u6B21\uFF01"]},"Allow players to join after the game has started":"允許玩家在遊戲開始後加入","Allow this project to run npm scripts?":"允許此專案運行 npm 腳本嗎?","Allow to display advertisements on the game page on gd.games.":"允許在 gd.games 的游戲頁面上顯示廣告。","Alpha":"透明度","Alphabet":"字母","Already a member?":"已經是會員了嗎?","Already added":"已添加","Already cancelled":"已取消","Already in project":"已經在項目中","Already installed":"已安裝","Alright, here's my approach:":"好的,這是我的方法:","Always":"總是","Always display the preview window on top of the editor":"總是在編輯器頂部顯示預覽窗口","Always preload at startup":"在啟動時始終預加載","Always visible":"長期可見","Ambient light color":"環境光顏色","An action that can be used in other events sheet. You can define the action parameters: objects, texts, numbers, layers, etc...":"一個可以在其他事件表中使用的動作。您可以定義動作參數:對象、文本、數字、圖層等...","An action that can be used on objects with the behavior. You can define the action parameters: objects, texts, numbers, layers, etc...":"可以在具有行為的對象上使用的操作。您可以定義操作參數:對象,文本,數字,圖層等......","An action that can be used on the object. You can define the action parameters: objects, texts, numbers, layers, etc...":"可以在對象上使用的動作。您可以定義動作參數:對象、文本、數字、圖層等...","An error happened":"發生錯誤","An error happened when retrieving the game's configuration. Please check your internet connection or try again later.":"讀取遊戲設定時發生錯誤。請檢查您的網路連線或稍後再試。","An error happened when sending your request, please try again.":"發送請求時發生錯誤,請再試一次。","An error happened while cashing out. Verify your internet connection or try again later.":"付款時發生錯誤。請檢查您的網路連線或稍後再試。","An error happened while loading the certificates.":"加載證書時出錯。","An error happened while loading this extension. Please check that it is a proper extension file and compatible with this version of GDevelop":"加載此擴展時出錯。請檢查它是否是一個正確的擴展文件,且適用于此版本的 GDevelop","An error happened while purchasing this product. Verify your internet connection or try again later.":"購買此產品時出錯。請驗證您的互聯網連接或稍后再試。","An error happened while registering the game. Verify your internet connection or retry later.":"注冊游戲時發生錯誤。請驗證您的網絡連接或稍后重試。","An error happened while removing the collaborator. Verify your internet connection or retry later.":"刪除合作者時出錯。請驗證您的網絡連接或稍后重試。","An error happened while transferring your credits. Verify your internet connection or try again later.":"在轉移您的積分時發生錯誤。請檢查您的互聯網連接或稍後再試。","An error happened while unregistering the game. Verify your internet connection or retry later.":"取消註冊遊戲時發生錯誤。請檢查您的網絡連接或稍後重試。","An error has occurred during functions generation. If GDevelop is installed, verify that nothing is preventing GDevelop from writing on disk. If you're running GDevelop online, verify your internet connection and refresh functions from the Project Manager.":"函數生成期間發生錯誤。如果安裝了 GDevelop,請確認沒有任何東西阻止 GDevelop 寫入磁盤。如果您在線運行 GDevelop,請驗證您的互聯網連接并從項目管理器中刷新功能。","An error has occurred in functions. Click to reload them.":"函數中發生錯誤。點擊重新加載它們。","An error occured while storing the auth key.":"存儲身份驗證密鑰時發生錯誤。","An error occured while storing the provisioning profile.":"存儲配置文件時發生錯誤。","An error occurred in the {componentTitle}.":function(a){return[a("componentTitle")," \u4E2D\u767C\u751F\u932F\u8AA4\u3002"]},"An error occurred when creating a new leaderboard, please close the dialog, come back and try again.":"創建新的排行榜時出錯,請關閉對話框,返回并重試。","An error occurred when deleting the entry, please try again.":"刪除參賽作品時出錯,請重試。","An error occurred when deleting the leaderboard, please close the dialog, come back and try again.":"刪除排行榜時出錯,請關閉對話框,返回并重試。","An error occurred when deleting the project. Please try again later.":"刪除項目時發生錯誤。請稍後重試。","An error occurred when downloading the tutorials.":"下載教程時出錯。","An error occurred when fetching the entries of the leaderboard, please try again.":"獲取排行榜條時發生錯誤,請重試。","An error occurred when fetching the leaderboards, please close the dialog and reopen it.":"獲取排行榜時出錯,請關閉對話框并重新打開它。","An error occurred when fetching the store content. Please try again later.":"獲取商店內容時發生錯誤。請稍后再試。","An error occurred when opening or saving the project. Try again later or choose another location to save the project to.":"打開或保存項目時出錯。稍后重試或選擇另一個位置來保存項目。","An error occurred when opening the project. Check that your internet connection is working and that your browser allows the use of cookies.":"打開項目時發生錯誤。檢查您的Internet連接是否正常工作,并允許瀏覽器使用Cookie。","An error occurred when resetting the leaderboard, please close the dialog, come back and try again.":"重置排行榜時發生錯誤,請關閉對話框,返回并重試。","An error occurred when retrieving leaderboards, please try again later.":"獲取排行榜時出錯,請稍后再試。","An error occurred when saving the project, please verify your internet connection or try again later.":"保存項目時發生錯誤,請驗證您的Internet連接或稍后再試。","An error occurred when saving the project. Please try again by choosing another location.":"保存項目時發生錯誤。請選擇其他位置再試一次。","An error occurred when saving the project. Please try again later.":"保存項目時出錯。請稍后再試。","An error occurred when sending the form, please verify your internet connection and try again later.":"發送表單時出錯,請驗證您的互聯網連接,然后重試。","An error occurred when setting the leaderboard as default, please close the dialog, come back and try again.":"設置排行榜為默認時發生錯誤,請關閉對話框,返回后重試。","An error occurred when updating the appearance of the leaderboard, please close the dialog, come back and try again.":"更新排行榜外觀時出錯,請關閉對話框,返回后重試。","An error occurred when updating the display choice of the leaderboard, please close the dialog, come back and try again.":"更新排行榜顯示選項時發生錯誤,請關閉對話框,返回并重試。","An error occurred when updating the name of the leaderboard, please close the dialog, come back and try again.":"更新排行榜名稱時發生錯誤,請關閉對話框,返回并重試。","An error occurred when updating the sort direction of the leaderboard, please close the dialog, come back and try again.":"更新排序方式時出錯,請關閉對話框,返回后重試。","An error occurred when updating the visibility of the leaderboard, please close the dialog, come back and try again.":"更新排行榜可見性時發生錯誤,請關閉對話框,返回并重試。","An error occurred while accepting the invitation. Please try again later.":"接受邀請時發生錯誤。請稍後再試。","An error occurred while activating your purchase. Please contact support if the problem persists.":"在啟動您的購買時發生錯誤。如果問題持續存在,請聯繫支持。","An error occurred while changing the password. Please try again later.":"更改密碼時發生錯誤。請稍後再試。","An error occurred while creating the accounts.":"創建帳戶時發生錯誤。","An error occurred while creating the group. Please try again later.":"創建組時出錯。請稍后再試。","An error occurred while editing the student. Please try again.":"編輯學生時發生錯誤。請重試。","An error occurred while exporting your game. Verify your internet connection and try again.":"導出您的遊戲時發生錯誤。請檢查您的互聯網連接並重試。","An error occurred while fetching the project version, try again later.":"發生錯誤,無法獲取項目版本,請稍後重試。","An error occurred while generating some icons. Verify that the image is valid and try again.":"生成某些圖標時出錯。請驗證圖片是否有效並重試。","An error occurred while generating the certificate.":"生成證書時發生錯誤。","An error occurred while loading audio resources.":"加載音頻資源時發生錯誤。","An error occurred while loading fonts.":"加載字體時發生錯誤。","An error occurred while loading your AI requests.":"加載你的 AI 請求時發生錯誤。","An error occurred while loading your builds. Verify your internet connection and try again.":"加載構建時發生錯誤。請驗證您的互聯網連接,然后重試。","An error occurred while renaming the group name. Please try again later.":"重命名組名稱時出錯。請稍后再試。","An error occurred while restoring the project version: {0}":function(a){return["\u6062\u5FA9\u9805\u76EE\u7248\u672C\u6642\u767C\u751F\u932F\u8AA4\uFF1A",a("0")]},"An error occurred while retrieving feedbacks for this game.":"檢索此游戲的反饋時出錯。","An error occurred while trying to recover your project last versions. Please try again later.":"試圖恢復項目上一版本時出錯。請稍后再試。","An error occurred, please try again later.":"發生錯誤,請稍后再試。","An error occurred.":"發生錯誤。","An error occurred. Please try again.":"發生錯誤,請稍後再試。","An expression that can be used in formulas. Can either return a number or a string, and take some parameters.":"一個可以用在公式中的表達式。可以返回一個數字或字符串,并且使用一些參數。","An expression that can be used on objects with the behavior. Can either return a number or a string, and take some parameters.":"可以在具有行為的對象上使用的表達式。可以返回一個數字或字符串,并占用一些參數。","An expression that can be used on the object. Can either return a number or a string, and take some parameters.":"可以在對象上使用的表達式。可以返回一個數字或字符串,并且接收一些參數。","An extension with this name already exists in the project. Importing this extension will replace it.":"這個名稱的擴展已存在于項目中。導入此擴展將會替換它。","An external editor is opened.":"打開外部編輯器。","An internet connection is required to administrate your game's leaderboards.":"管理您的游戲排行榜需要互聯網連接。","An object that can be moved, rotated and scaled in 2D.":"一個可以在 2D 中移動、旋轉和縮放的物體。","An object that can be moved, rotated and scaled in 3D.":"一個可以在 3D 中移動、旋轉和縮放的物體。","An unexpected error happened. Please contact us for more details.":"發生了意外錯誤。請聯繫我們以獲取更多詳細信息。","An unexpected error happened. Verify your internet connection or try again later.":"發生意外錯誤。請驗證您的網絡連接或稍后再試。","An unexpected error occurred. The list has been refreshed.":"發生意外錯誤。列表已刷新。","An unknown error happened, ensure your password is entered correctly.":"發生未知錯誤,請確保您的密碼正確輸入。","An unknown error happened.":"發生了未知錯誤。","An update is installing.":"正在安裝一個更新。","An update is ready to be installed. Close ALL GDevelop apps or tabs in your browser, then open it again.":"已準備好安裝一個更新。請先關閉瀏覽器中的所有GDevelop 應用或標簽,然后重新打開這個更新。","Analytics":"分析","Analyze Objects Used in this Event":"分析在此事件中使用的對象","Analyzing the object properties":"分析物件屬性","Analyzing the project":"分析專案","And others...":"以及其他...","And {remainingResultsCount} more results.":function(a){return["\u9084\u6709 ",a("remainingResultsCount")," \u500B\u7D50\u679C\u3002"]},"Android":"安卓","Android App Bundle (for publishing on Google Play)":"Android 應用程序包 (在Google Play上發布)","Android Build":"安卓版本(Android Build)","Android builds":"安卓構建","Android icons and Android 12+ splashscreen":"Android 圖標和 Android 12+ 啟動畫面","Android mobile devices (Google Play, Amazon)":"Android 移動設備 (Google Play, Amazon)","Angle":"角度","Animation":"動畫","Animation #{animationIndex}":function(a){return["\u52D5\u756B #",a("animationIndex")]},"Animation #{i} {0}":function(a){return["\u52D5\u756B #",a("i")," ",a("0")]},"Animations":"動畫","Animations are a sequence of images.":"動畫是一系列圖像。","Anonymous":"匿名的","Anonymous players":"匿名玩家","Another personal website, newgrounds.com page, etc.":"另一個個人網站,newgrounds.com 網頁等。","Answer":"回答","Answer a 1-minute survey to personalize your suggested content.":"回答 1 分鐘的調查來個性化您的建議內容。","Answers video":"回答視頻","Anti-aliasing":"抗鋸齒","Antialising for 3D":"3D 抗鋸齒","Any object":"任何對象","Any submitted score that is higher than the set value will not be saved in the leaderboard.":"任何已提交的得分高于設定值都不會保存在排行榜中。","Any submitted score that is lower than the set value will not be saved in the leaderboard.":"任何提交的得分低于設定值都不會保存在排行榜中。","Any unsaved changes in the project will be lost.":"項目中任何未保存的更改都將丟失。","Anyone can access it.":"任何人都可以訪問它。","Anyone with the link can see it, but it is not listed in your game's leaderboards.":"任何帶有鏈接的人都可以看到它,但它沒有在游戲排行榜中列出。","App or tool":"應用程序或工具","Appearance":"外觀","Apple":"蘋果","Apple App Store":"蘋果應用商店","Apple Certificates & Profiles":"蘋果證書和配置文件","Apple mobile devices (App Store)":"蘋果移動設備 (App Store)","Apply":"應用","Apply changes":"應用更改","Apply changes to preview":"應用更改到預覽","Apply changes to the running preview":"將更改應用到正在運行的預覽","Apply this change:":"應用此更改:","Archive accounts":"歸檔帳戶","Archive {0} accounts":function(a){return["\u6B78\u6A94 ",a("0")," \u500B\u5E33\u6236"]},"Archive {0} accounts?":function(a){return["\u662F\u5426\u8981\u6B78\u6A94 ",a("0")," \u500B\u5E33\u6236\uFF1F"]},"Archived accounts":"已歸檔帳戶","Are you sure you want to delete this entry? This can't be undone.":"您確定要刪除此參賽作品嗎?此操作無法撤消。","Are you sure you want to hide this hint? You won't see it again, unless you re-activate it from the preferences.":"您確定要隱藏此提示嗎?您不會再看到它,除非您從首選項中重新開啟它。","Are you sure you want to quit GDevelop?":"您確定要退出GDevelop嗎?","Are you sure you want to remove these external events? This can't be undone.":"確定要刪除這些外部事件嗎?此操作無法撤銷。","Are you sure you want to remove this animation?":"您確定要刪除此動畫嗎?","Are you sure you want to remove this animation? You will lose the custom collision mask you have set for this object.":"您確定要刪除此動畫嗎?您將丟失您為此對象設置的自定義碰撞遮罩。","Are you sure you want to remove this behavior? This can't be undone.":"您確定要刪除此行為嗎?此操作無法撤銷。","Are you sure you want to remove this external layout? This can't be undone.":"確定要刪除此外部布局嗎?此操作無法撤銷。","Are you sure you want to remove this folder and all its content (objects {0})? This can't be undone.":function(a){return["\u78BA\u5BE6\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u53CA\u5176\u6240\u6709\u5167\u5BB9 (\u5C0D\u8C61",a("0"),") \u55CE? \u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and all its functions ({0})? This can't be undone.":function(a){return["\u78BA\u5BE6\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u53CA\u5176\u6240\u6709\u51FD\u5F0F (",a("0"),") \u55CE? \u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and all its properties ({0})? This can't be undone.":function(a){return["\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u53CA\u5176\u6240\u6709\u5C6C\u6027\uFF08",a("0"),"\uFF09\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and with it the function {0}? This can't be undone.":function(a){return["\u78BA\u5BE6\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u548C\u51FD\u5F0F ",a("0")," \u55CE? \u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this folder and with it the object {0}? This can't be undone.":function(a){return["\u78BA\u5BE6\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u548C\u5C0D\u8C61 ",a("0")," \u55CE? \u7121\u6CD5\u64A4\u6D88\u6B64\u64CD\u4F5C\u3002"]},"Are you sure you want to remove this folder and with it the property {0}? This can't be undone.":function(a){return["\u60A8\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u6587\u4EF6\u593E\u53CA\u5176\u5C6C\u6027 ",a("0")," \u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002"]},"Are you sure you want to remove this function? This can't be undone.":"您確定要刪除此函數嗎?此操作無法撤銷。","Are you sure you want to remove this group? This can't be undone.":"您確定要刪除此組嗎?此操作無法撤銷。","Are you sure you want to remove this object? This can't be undone.":"您確定要刪除此對象?這個操作無法撤消。","Are you sure you want to remove this resource? This can't be undone.":"您確定要刪除此資源嗎?此操作無法撤銷。","Are you sure you want to remove this scene? This can't be undone.":"確定要移除此場景嗎?此操作無法撤銷。","Are you sure you want to remove this variant from your project? This can't be undone.":"您確定要刪除此變體從您的專案中嗎?這個操作無法撤消。","Are you sure you want to reset all shortcuts to their default values?":"您確定要將所有快捷方式(shortcuts)重置為默認值嗎?","Are you sure you want to restore the project to the state saved at this point in the AI conversation? This will overwrite the current project state.":"您確定要將項目恢復到此時在AI對話中保存的狀態嗎?這將覆蓋當前項目狀態。","Are you sure you want to unregister this game?{0}If you haven't saved it, it will disappear from your games dashboard and you won't get access to player services, unless you register it again.":function(a){return["\u60A8\u78BA\u5B9A\u8981\u53D6\u6D88\u8A3B\u518A\u9019\u500B\u904A\u6232\u55CE\uFF1F",a("0"),"\u5982\u679C\u60A8\u5C1A\u672A\u4FDD\u5B58\uFF0C\u5B83\u5C07\u4ECE\u60A8\u7684\u6E38\u620F\u4FE1\u606F\u4E2D\u5FC3\u6D88\u5931\uFF0C\u5E76\u4E14\u60A8\u5C07\u7121\u6CD5\u8A2A\u554F\u73A9\u5BB6\u670D\u52D9\uFF0C\u9664\u975E\u60A8\u91CD\u65B0\u8A3B\u518A\u3002"]},"Are you teaching or learning game development?":"您正在教授或學習游戲開發嗎?","Around 1 or 2 months":"大約1或2個月","Around 3 to 5 months":"大約3到5個月","Array":"數組","Art & Animation":"藝術與動畫","As a percent of the game width.":"占游戲寬度的百分比。","As a teacher, you will use one seat in the plan so make sure to include yourself!":"作為一名教師,您將在計劃中使用一個座位,因此請務必包括您自己!","Ask AI":"詢問 AI","Ask AI (AI agent and chatbot)":"詢問 AI (AI 代理與聊天機器人)","Ask a follow up question":"提出後續問題","Ask every time":"每次詢問","Ask the AI":"詢問 AI","Ask your questions to the community":"向社區詢問您的問題","Asset Store":"資產商店","Asset pack bundles":"資源包捆綁包","Asset pack not found":"未找到資產包","Asset pack not found - An error occurred, please try again later.":"資源包未找到 - 發生錯誤,請稍后再試。","Asset packs will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this pack (or restore your existing purchase).":"資源包將鏈接到您的用戶帳戶并可用于您的所有項目。登錄或注冊以購買此包 (或恢復您現有的購買)。","Asset store dialog":"資產商店對話框","Asset store tag":"資產商店標籤","Assets":"素材","Assets (coming soon!)":"資產(即將到來!)","Assets import can't be undone. Make sure to backup your project beforehand.":"資產導入無法撤銷。請確保事先備份您的專案。","Associated resource name":"關聯的資源名稱","Asynchronous":"異步","At launch":"啟動時","Atlas":"圖集","Atlas resource":"圖集資源","Attached object":"附加物件","Audio":"音頻","Audio & Sound":"音頻與聲音","Audio resource":"音頻資源","Audio type":"音訊類型","Auth Key (App Store upload)":"驗證密鑰 (應用商店上傳)","Auth Key for upload to App Store Connect":"用于上傳到 App Store Connect 的身份驗證密鑰","Authors":"作者","Auto download and install updates (recommended)":"自動下載和安裝更新 (推薦)","Auto-save project on preview":"預覽時自動保存項目","Automated":"自動化","Automatic collision mask activated. Click on the button to replace it with a custom one.":"自動碰撞遮罩已激活。單擊按鈕將其替換為自定義按鈕。","Automatic creation of lighting layer":"自動創建照明圖層","Automatically follow the base layer.":"自動跟隨基本層(base layer)","Automatically log in as a player in preview":"在預覽時自動以玩家身份登錄","Automatically open the diagnostic report at preview":"在預覽時自動打開診斷報告","Automatically re-open the project edited during last session":"自動重新打開上次會話中編輯的項目","Automatically take a screenshot in game previews":"在遊戲預覽中自動截取屏幕快照","Automatically use GDevelop credits for AI requests when run out of AI credits":"自動使用 GDevelop 虛擬貨幣用於 AI 請求,當 AI 虛擬貨幣用完時","Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.":"Average of players still active after 15 minutes. This graph shows how long players stay in the game after X minutes. It helps to see if the players quit quickly or keep playing for a while.","Average user feedback":"普通用戶反饋","Back":"返回","Back (Additional button, typically the Browser Back button)":"后退 (附加按鈕,通常是瀏覽器后退按鈕)","Back face":"背面","Back to discover":"返回以發現","Back to {0}":function(a){return["\u8FD4\u56DE ",a("0")]},"Background":"背景","Background and cameras":"背景和相機","Background color":"背景色","Background color:":"背景眼色;","Background fade in duration (in seconds)":"背景淡入持續時間(秒)","Background image":"背景圖像","Background preloading of scene resources":"場景資源的背景預加載","Backgrounds":"背景","Base layer":"基礎層","Base layer properties":"基礎圖層屬性","Be careful with this action, you may have problems exiting the preview if you don't add a way to toggle it back.":"請謹慎執行此操作,如果你沒有添加切換回預覽的方式,則退出預覽可能會遇到問題。","Before installing this asset, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88DD\u6B64\u8CC7\u7522\u4E4B\u524D\uFF0C\u5F37\u70C8\u5EFA\u8B70\u66F4\u65B0\u9019\u4E9B\u64F4\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before installing this behavior, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88DD\u6B64\u884C\u70BA\u4E4B\u524D\uFF0C\u5F37\u70C8\u5EFA\u8B70\u66F4\u65B0\u9019\u4E9B\u64F4\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before installing this extension, it's strongly recommended to update these extensions{0}Do you want to update them now?":function(a){return["\u5728\u5B89\u88DD\u6B64\u64F4\u5C55\u4E4B\u524D\uFF0C\u5F37\u70C8\u5EFA\u8B70\u66F4\u65B0\u9019\u4E9B\u64F4\u5C55",a("0"),"\u662F\u5426\u7ACB\u5373\u66F4\u65B0\uFF1F"]},"Before you go, make sure that you've unpublished all your games on gd.games. Otherwise they will stay visible to the community. Are you sure you want to permanently delete your account? This action cannot be undone.":"在您開始之前,請確保您已取消在 gd.games 上發布所有游戲。否則,它們將對社區保持可見。您確定要永久刪除您的帳戶嗎?此操作無法撤消。","Before you go...":"在您離開之前...","Begin a driving game with a controllable car":"開始一個可以控制的汽車駕駛遊戲","Begin a top-down adventure with one controllable character.":"開始一個垂直俯瞰的冒險,擁有一個可控制的角色。","Beginner":"初學者","Beginner course":"初級課程","Behavior":"行為","Behavior (for the previous object)":"行為(對于上一個對象)","Behavior Configuration":"行為配置","Behavior name":"行為名稱","Behavior properties":"行為屬性","Behavior type":"行為類型","Behaviors":"行為","Behaviors add features to objects in a matter of clicks.":"行為在點擊對象中添加功能。","Behaviors are attached to objects and make them alive. The rules of the game can be created using behaviors and events.":"行為隨對象附加,讓它們變得生動。遊戲規則可以透過行為和事件來創建。","Behaviors of {objectOrGroupName}: {0} ;":function(a){return[a("objectOrGroupName")," \u7684\u884C\u70BA\uFF1A",a("0"),"\uFF1B"]},"Bio":"個人信息","Bitmap Font":"位圖字體","Bitmap font resource":"位圖字體資源","Block preview and export when diagnostic errors are found":"當找到診斷錯誤時,阻止預覽和導出","Blocked on GDevelop?":"在 GDevelop 上被阻止?","Blur radius":"模糊半徑","Bold":"粗體","Boolean":"布爾","Boolean (checkbox)":"布爾值(復選框)","Bottom":"底部","Bottom bound":"底部邊界","Bottom bound should be greater than right bound":"底部邊界應大於右側邊界","Bottom face":"底面","Bottom left corner":"左下角","Bottom margin":"底邊距","Bottom right corner":"右下角","Bounce rate":"跳出率","Bounds":"邊界","Branding":"品牌推廣","Branding and Loading screen":"品牌和加載屏幕","Break into the <0>booming industry of casual gaming. Sharpen your skills and become a professional. Start for free:":"進入<0>蓬勃發展的產業休閒遊戲。磨練您的技能並成為專業人士。免費開始:","Breaking changes":"重大變更","Bring to front":"置于前端","Browse":"瀏覽","Browse all templates":"瀏覽所有模板","Browse assets":"瀏覽資產","Browse bundle":"瀏覽捆綁包","Browser":"瀏覽器","Build and download":"生成并下載","Build could not start or errored. Please check your internet connection or try again later.":"構建無法開始或出現錯誤。請檢查您的網絡連接,或者稍后再試。","Build dynamic levels with tiles.":"使用瓷磚構建動態關卡。","Build is starting...":"構建正在啟動……","Build open for feedbacks":"建立開放的反饋","Build started!":"構建已開始!","Building":"正在生成","Bundle":"捆綁包","Bundle not found":"找不到捆綁包","Bundle not found - An error occurred, please try again later.":"未找到捆綁包 - 發生錯誤,請稍後再試。","Bundles and their content will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this bundle. (or restore your existing purchase).":"捆綁包及其內容將被鏈接到您的用戶帳戶並可用於所有項目。登錄或註冊以購買此捆綁包。(或恢復您現有的購買)。","Buy GDevelop goodies and swag":"購買 GDevelop 禮品和贈品","Buy for {0} credits":function(a){return["\u8CFC\u8CB7 ",a("0")," \u500B\u7A4D\u5206"]},"Buy for {formattedProductPriceText}":function(a){return["\u70BA ",a("formattedProductPriceText")," \u8CFC\u8CB7"]},"Buy now and save {0}":function(a){return["\u7ACB\u5373\u8CFC\u8CB7\u4E26\u7BC0\u7701 ",a("0")]},"By accepting, the team admin will be able to access your projects and may update your profile information such as your username.":"接受後,團隊管理員將能夠訪問您的項目,並可以更新您的個人檔案信息,例如您的用戶名。","By canceling your subscription, you will lose all your premium features at the end of the period you already paid for. Continue?":"通過取消訂閱,您將在已付費的期限結束時失去所有高級功能。繼續?","By creating an account and using GDevelop, you agree to the [Terms and Conditions](https://gdevelop.io/page/terms-and-conditions).":"創建帳戶并使用 GDevelop,即表示您同意[條款和條件](https://gdevelop.io/page/terms-and-conditions)。","Calibrating sensors":"校準傳感器","Camera":"相機","Camera positioning":"相機定義","Camera type":"相機類型","Can't check if the game is registered online.":"無法檢查游戲是否在線注冊。","Can't load the announcements. Verify your internet connection or try again later.":"無法加載公告。請驗證您的網絡連接或稍后再試。","Can't load the credits packages. Verify your internet connection or retry later.":"無法加載積分包。請驗證您的互聯網連接或稍后重試。","Can't load the extension registry. Verify your internet connection or try again later.":"無法加載擴展存儲庫。請檢查您的網絡連接,或者稍后再試。","Can't load the games. Verify your internet connection or retry later.":"無法加載游戲。請驗證您的網絡連接或稍后重試。","Can't load the licenses. Verify your internet connection or try again later.":"無法加載許可證。請驗證您的互聯網連接或稍后重試。","Can't load the profile. Verify your internet connection or try again later.":"無法加載配置文件。請驗證您的互聯網連接或稍后重試。","Can't load the results. Verify your internet connection or retry later.":"無法加載結果。請驗證您的網絡連接或稍后重試。","Can't load the tutorials. Verify your internet connection or retry later.":"無法加載教程。請驗證您的網絡連接或稍后重試。","Can't load your game earnings. Verify your internet connection or try again later.":"無法加載您的遊戲收入。請檢查您的網絡連接或稍後重試。","Can't properly export the game.":"無法正確導出游戲。","Can't upload your game to the build service.":"無法將你的游戲上傳到構建服務上。","Cancel":"取消","Cancel and change my subscription":"取消並更改我的訂閱","Cancel and close":"取消并關閉","Cancel anytime":"隨時取消","Cancel changes":"取消更改","Cancel editing":"取消編輯","Cancel edition":"取消版本","Cancel subscription":"取消訂閱","Cancel your changes?":"取消您的更改?","Cancel your subscription":"取消訂閱","Cancel your subscription?":"取消您的訂閱嗎?","Cancelled":"已取消","Cancelled - Your subscription will end at the end of the paid period.":"已取消 - 您的訂閱將在付費期間結束時結束。","Cannot access project save":"無法存取專案儲存","Cannot filter on both asset packs and assets at the same time. Try clearing one of the filters!":"無法同時對資產包和資產進行過濾。請嘗試清除其中一個過濾器!","Cannot restore project":"無法還原專案","Cannot see the exports":"無法查看導出","Cannot update thumbnail":"無法更新縮略圖","Cash out":"現金兌換","Category (shown in the editor)":"類別(在編輯器中顯示)","Cell depth (in pixels)":"單元格深度 (以像素為單位)","Cell height (in pixels)":"單元格高度 (以像素為單位)","Cell width (in pixels)":"單元格寬度 (以像素為單位)","Center":"中心","Certificate and provisioning profile":"證書和配置文件","Certificate type: {0}":function(a){return["\u8B49\u66F8\u985E\u578B\uFF1A",a("0")]},"Change editor zoom":"更改編輯器縮放","Change my email":"更改我的電子郵件","Change the name in the project properties.":"更改項目屬性中的名稱。","Change the package name in the game properties.":"在游戲屬性中更改包名稱。","Change thumbnail":"更改縮略圖","Change username or full name":"更改用戶名或全名","Change your email":"更改您的電子郵件","Changes and answers may have mistakes: experiment and use it for learning.":"更改和答案可能有錯誤:請實驗並用於學習。","Changes saved":"更改已保存","Chapter":"章節","Chapter materials":"章節材料","Chapters":"章節","Characters":"角色","Check again for new updates":"再次檢查是否有新更新","Check that the file exists, that this file is a proper game created with GDevelop and that you have the authorization to open it.":"檢查該文件是否存在,該文件是否是使用GDevelop創建的正確游戲,以及您是否有權打開它。","Check the logs to see if there is an explanation about what went wrong, or try again later.":"檢查日志以查看是否有關于問題出在哪里的說明, 或者稍后再試。","Checking for update...":"正在檢查更新……","Checking tools":"檢查工具","Children configurations are deprecated. This [migration documentation](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) can help you use variants instead.":"兒童配置已被棄用。這份[遷移文檔](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/)可以幫助你改用變體。","Choose":"選擇","Choose GDevelop language":"選擇GDevelop語言","Choose a Auth Key":"選擇一個身份驗證密鑰","Choose a file":"選擇文件","Choose a folder for the new game":"選擇新游戲的文件夾","Choose a font":"選擇字體","Choose a function, or a function of a behavior, to edit its events.":"選擇一個函數或行為函數來編輯其事件。","Choose a function, or a function of a behavior, to set the parameters that it accepts.":"選擇一個函數,或者一個行為函數,以設置它接受的參數。","Choose a key":"選擇一個按鍵","Choose a layer":"選擇圖層","Choose a leaderboard":"選擇一個排行榜","Choose a leaderboard (optional)":"選擇一個排行榜(可選)","Choose a mouse button":"選擇鼠標按鈕","Choose a new behavior function (\"method\")":"選擇新的行為函數 (\"方法\")","Choose a new extension function":"選擇一個新的擴展函數","Choose a new object function (\"method\")":"選擇一個新的對象函數 (\"方法\")","Choose a new object type":"選擇一個新的對象類型","Choose a pack":"選擇一個包","Choose a parameter":"選擇一個參數","Choose a provisioning profile":"選擇配置文件","Choose a scene":"選擇一個場景","Choose a skin":"選擇一個皮膚","Choose a subscription":"選擇一項訂閱","Choose a subscription to enjoy the best of game creation.":"選擇一個訂閱以享受最佳的遊戲創作。","Choose a value":"選擇一個值","Choose a workspace folder":"選擇一個工作區文件夾","Choose an animation":"選擇一個動畫","Choose an animation and frame to edit the collision masks":"選擇動畫和幀來編輯碰撞蒙板","Choose an animation and frame to edit the points":"選擇動畫和幀來編輯點","Choose an effect":"選擇一種效果","Choose an element to inspect in the list":"在列表中選擇要檢查的元素","Choose an export folder":"選擇導出文件夾","Choose an external layout":"選擇外部布局","Choose an icon":"選擇一個圖示","Choose an object":"選擇對象","Choose an object first or browse the list of actions.":"請先選擇一個物件或瀏覽行動列表。","Choose an object first or browse the list of conditions.":"請先選擇一個物件或瀏覽條件列表。","Choose an object to add to the group":"選擇要添加到群組的對象","Choose an operator":"選擇一個操作符","Choose an option":"選擇一個選項","Choose and add an event":"選擇并添加事件","Choose and add an event...":"選擇并添加事件...","Choose and enter a package name in the game properties.":"在游戲屬性中選擇并輸入包名稱。","Choose another location":"選擇另一個位置","Choose file":"選擇文件","Choose folder":"選擇目錄","Choose from asset store":"從資產商店選擇","Choose one or more files":"選擇一個或多個文件","Choose the 3D model file (.glb) to use":"選擇要使用的3D模型文件(.glb)","Choose the JSON/LDtk file to use":"選擇要使用的 JSON /LDtk 文件","Choose the associated scene:":"選擇關聯的場景:","Choose the atlas file (.atlas) to use":"選擇要使用的圖集文件 (.atlas)","Choose the audio file to use":"選擇要使用的音頻文件","Choose the bitmap font file (.fnt, .xml) to use":"選擇要使用的位圖字體文件(.fnt, .xml)","Choose the effect to apply":"選擇要應用的效果","Choose the font file to use":"選擇要使用的字體文件","Choose the image file to use":"選擇要使用的圖像文件","Choose the json file to use":"選擇要使用的json文件","Choose the scene":"選擇場景","Choose the spine json file to use":"選擇要使用的 spine json 文件","Choose the tileset to use":"選擇要使用的瓷磚","Choose the upload key to use to identify your Android App Bundle. In most cases you don't need to change this. Use the \"Old upload key\" if you used to publish your game as an APK and you activated Play App Signing before switching to Android App Bundle.":"選擇用于識別您的 Android 應用程序包的上傳密鑰。在大多數情況下,您不需要更改它。 如果您曾經以APK形式發布您的游戲,并在切換到 Android 應用程序包之前激活了Play App簽名,請使用“舊上傳密鑰”。","Choose the video file to use":"選擇要使用的視頻文件","Choose this plan":"選擇此計劃","Choose where to add the assets:":"選擇添加素材的目標點:","Choose where to create the game":"選擇在哪里創建游戲","Choose where to create your projects":"選擇要在哪里創建您的項目","Choose where to export the game":"選擇導出游戲的位置","Choose where to load the project from":"選擇從何處加載項目","Choose where to save the project to":"選擇將項目保存到的位置","Choose your game art":"選擇您的遊戲藝術","Circle":"圓","Claim":"要求","Claim credits":"索取學分","Claim this pack":"領取此包","Class":"類別","Classrooms":"教室","Clear all filters":"清除所有過濾器","Clear search":"清除搜尋","Clear the rendered image between each frame":"清除每幀之間渲染的圖像","Click here to test the link.":"點擊這里測試鏈接。","Click on an instance on the canvas or an object in the list to display their properties.":"點擊畫布上的實例或列表中的物件以顯示它們的屬性。","Click on the tilemap grid to activate or deactivate hit boxes.":"點擊磚塊地圖網格以激活或停用擊中框。","Click to restart and install the update now.":"點擊以重新啟動並立即安裝更新。","Close":"關閉","Close GDevelop":"關閉 GDevelop","Close Instances List Panel":"關閉實例列表面板","Close Layers Panel":"關閉圖層面板","Close Object Groups Panel":"關閉對象組面板","Close Objects Panel":"關閉對象面板","Close Project":"關閉項目","Close Properties Panel":"關閉屬性面板","Close all":"關閉全部","Close all tasks":"關閉所有任務","Close and launch a new preview":"關閉并啟動新預覽","Close others":"關閉其它","Close project":"關閉項目","Close task":"關閉任務","Close the AI chat?":"關閉 AI 聊天嗎?","Close the project?":"關閉專案嗎?","Close the project? Any changes that have not been saved will be lost.":"關閉項目?任何未保存的更改都將丟失。","Co-op Multiplayer":"合作多人","Code":"代碼","Code editor Theme":"代碼編輯器主題","Collaborators":"合作者","Collapse All":"全部折疊","Collect at least {0} USD to cash out your earnings":function(a){return["\u6536\u96C6\u81F3\u5C11 ",a("0")," \u7F8E\u5143\u4F86\u63D0\u53D6\u60A8\u7684\u6536\u76CA"]},"Collect feedback from players":"收集玩家的反饋","Collect game feedback":"收集遊戲反饋","Collisions handling with the Physics engine":"物理引擎碰撞處理","Color":"顏色","Color (text)":"顏色 (文本)","Color:":"色彩:","Column title":"專欄標題","Come back to latest version":"回到最新版本","Coming in {0}":function(a){return["\u5C07\u5728 ",a("0")," \u4E2D\u63A8\u51FA"]},"Command palette keyboard shortcut":"命令面板快捷方式","Comment":"註解","Commercial License":"商業許可證","Community Discord Chat":"社區Discord聊天","Community Forums":"社區論壇","Community list":"社群列表","Companies, studios and agencies":"公司、工作室和機構","Company name or full name":"公司名稱或全名","Compare all the advantages of the different plans in this <0>big feature comparison table.":"在這個 <0>大功能比較表 中比較不同計劃的所有優點。","Complete all tasks to claim your badge":"Complete all tasks to claim your badge","Complete your payment on the web browser":"在 web 瀏覽器上完成您的付款","Complete your purchase with the app store.":"使用應用商店完成您的購買。","Completely alone":"完全獨自一人","Compressing before upload...":"上傳前壓縮……","Condition":"條件","Conditions":"條件","Configuration":"配置","Configure the external events":"配置外部事件","Configure the external layout":"配置外部布局","Configure tile’s hit boxes":"配置圖塊的命中框","Confirm":"確認","Confirm the opening":"確認打開","Confirm your email":"確認您的電子郵件","Confirming your subscription":"確認您的訂閱","Congrats on finishing this course!":"Congrats on finishing this course!","Congratulations! You've finished this tutorial!":"恭喜!您已經完成了這個教程!","Connected players":"已連接的玩家","Considering the best approach":"考慮最佳方法","Considering the possibilities":"考慮可能性","Console":"控制臺","Consoles":"控制臺","Contact us at education@gdevelop.io if you want to update your plan":"如果您想更新您的計劃,請聯繫我們:education@gdevelop.io","Contact:":"聯系人:","Contains text":"包含文字","Content":"內容","Content for Teachers":"適合教師的內容","Continue":"繼續","Continue anyway":"仍然繼續","Continue editing":"繼續編輯","Continue with Apple":"繼續使用 Apple","Continue with Github":"繼續使用 Github","Continue with Google":"繼續使用 Google","Continue with Human Intelligence":"繼續使用人類智慧","Continue working":"繼續工作","Contribute to GDevelop":"參與GDevelop開發","Contributions":"貢獻","Contributor options":"貢獻者選項","Contributors":"貢獻者","Contributors, in no particular order:":"貢獻者,排名不分先后:","Control a spaceship with a joystick.":"通過搖桿控制太空船。","Control your spaceship with a joystick, while avoiding asteroids.":"使用操縱杆控制スペース船,同時避開小行星。","Convert":"轉換","Copied to clipboard!":"已復制到剪貼板!","Copy":"復制","Copy active credentials to CSV":"將活動憑證複製到 CSV","Copy all":"全部復制","Copy all behaviors":"復制所有行為","Copy all effects":"復制所有效果","Copy build link":"復制構建鏈接","Copy email address":"複製電子郵件地址","Copy file path":"復制文件路徑","Copy them into the project folder":"將它們復制到項目文件夾中","Copy {0} credentials to CSV":function(a){return["\u5C07 ",a("0")," \u6191\u8B49\u8907\u88FD\u5230 CSV"]},"Cordova":"Cordova","Could not activate purchase":"無法啟用購買","Could not cancel your subscription":"無法取消您的訂閱","Could not cash out":"無法進行現金提取","Could not change subscription":"無法更改訂閱","Could not create the object":"無法創建對象","Could not delete the build. Verify your internet connection or try again later.":"無法刪除構建。請驗證您的互聯網連接或稍后再試。","Could not find any resources matching your search.":"Could not find any resources matching your search.","Could not install the asset":"無法安裝資產","Could not install the extension":"無法安裝擴展","Could not launch the preview":"無法啟動預覽","Could not load the project versions. Verify your internet connection or try again later.":"無法加載項目版本。請驗證您的網絡連接或稍后再試。","Could not purchase this product":"無法購買該產品","Could not remove invitation":"無法移除邀請","Could not swap asset":"無法交換資產","Could not transfer your credits":"無法轉移您的積分","Could not update the build name. Verify your internet connection or try again later.":"無法更新構建名稱。請驗證您的互聯網連接或稍后再試。","Counter of the loop":"迴圈計數器","Country name":"國家的名字","Courses will be linked to your user account and available indefinitely. Log in or sign up to purchase this course or restore a previous purchase.":"課程將與您的用戶帳戶鏈接,並且可無限期使用。登錄或註冊以購買此課程或恢復之前的購買。","Create":"創建","Create Extensions for GDevelop":"為GDevelop創建擴展","Create a 3D explosion when the player is hit":"當玩家受到攻擊時創建一個3D爆炸","Create a GDevelop account to save your changes and keep personalizing your game":"創建 GDevelop 帳戶以保存更改並繼續自定義遊戲","Create a certificate signing request that will be asked by Apple to generate a full certificate.":"創建一個證書簽名請求,Apple 將要求該請求生成完整的證書。","Create a game":"創建遊戲","Create a leaderboard":"創建排行榜","Create a new extension":"創建一個新的擴展","Create a new game":"創建新遊戲","Create a new group":"創建新群組","Create a new instance on the scene (will be at position 0;0):":"在場景中創建一個新實例 (將位于位置 0;0):","Create a new project":"創建一個新項目","Create a new room":"創建一個新房間","Create a new variant":"Create a new variant","Create a project first to add assets from the asset store":"首先創建一個項目,并從商店添加素材","Create a project first to add this asset":"首先創建一個項目來添加該資產","Create a room and drag and drop members in it.":"創建一個房間并將成員拖放到其中。","Create a signing request":"創建簽名請求","Create a simple flying game with obstacles to avoid":"創建一個有障礙物要避免的簡單飛行遊戲","Create account":"創建帳戶","Create accounts":"創建帳戶","Create an API key on the [App Store Connect API page](https://appstoreconnect.apple.com/access/integrations/api). Give it a name and **administrator** rights. Download the \"Auth Key\" file and upload it here along with the required information you can find on the page.":"在 [App Store Connect API 頁面](https://appstoreconnect.apple.com/access/integrations/api) 上創建 API 密鑰。為其指定名稱和**管理員**權限。下載“身份驗證密鑰”文件并將其與頁面上找到的所需信息一起上傳到此處。","Create an Account":"創建一個帳戶","Create an account":"創建一個帳戶","Create an account or login first to export your game using online services.":"首先創建一個帳戶或登錄以使用在線服務導出您的游戲。","Create an account to activate your purchase!":"創建一個帳戶以啟用您的購買!","Create an account to register your games and to get access to metrics collected anonymously, like the number of daily players and retention of the players after a few days.":"創建一個帳戶來注冊游戲并訪問匿名收集的指標,例如每日玩家數和幾天后的玩家留存量。","Create an account to store your project online.":"創建一個帳戶在線存儲您的項目。","Create and Publish a Fling game":"創建并發布 Fling 游戲","Create iOS certificate":"創建 iOS 證書","Create installation file":"創建安裝文件","Create my account":"創建我的帳戶","Create new folder...":"創建新資料夾……","Create new game":"創建新遊戲","Create new leaderboards now":"立即創建新的排行榜","Create or search for new extensions":"創建或搜索新擴展","Create package for Android":"為 Android 創建軟件包","Create package for iOS":"為 iOS 創建軟件包","Create scene <0>{scene_name}. <1>Click to open it.":function(a){return["\u5EFA\u7ACB\u5834\u666F <0>",a("scene_name"),"\u3002 <1>\u9EDE\u64CA\u4EE5\u6253\u958B\u5B83\u3002"]},"Create section":"創建部分","Create students":"創建學生","Create with Jfxr":"使用 Jfxr 創建","Create with Piskel":"用 Piskel 創建","Create with Yarn":"用 Yarn 創建","Create your Apple certificate for iOS":"創建適用于 iOS 的 Apple 證書","Create your Auth Key to send your game to App Store Connect":"創建您的身份驗證密鑰以將您的游戲發送到 App Store Connect","Create your certificate and \"provisioning profile\" thanks to your Apple Developer account. We'll guide you with a step by step process.":"通過您的 Apple 開發者帳戶創建您的證書和“配置文件”。我們將指導您逐步進行。","Create your first project using one of our templates or start from scratch.":"使用我們的模板之一創建您的第一個項目或從零開始。","Create your game's first leaderboard":"創建您的游戲的第一個排行榜","Created objects":"創建對象","Created on {0}":function(a){return["\u5728 ",a("0")," \u4E0A\u5275\u5EFA"]},"Creator profile":"創作者簡介","Credit out":"信用","Credits available: {0}":function(a){return["\u53EF\u7528\u7A4D\u5206: ",a("0")]},"Credits given":"給予的學分","Credits will be linked to your user account. Log-in or sign-up to purchase them!":"積分將鏈接到您的用戶帳戶。登錄或注冊即可購買!","Current build online":"當前在線版本","Current plan":"當前計劃","Custom CSS":"自定義 CSS","Custom css value cannot exceed {LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH} characters.":function(a){return["\u81EA\u8A02css\u503C\u4E0D\u5F97\u8D85\u904E",a("LEADERBOARD_APPEARANCE_CUSTOM_CSS_MAX_LENGTH"),"\u500B\u5B57\u5143\u3002"]},"Custom display":"自定義顯示","Custom object name":"自訂物件名稱","Custom object variant":"自訂物件變體","Custom object variant properties":"自訂物件變體屬性","Custom objects can't contain both 2D or 3D.<0/>Please select either 2D instances or 3D instances.":"自訂物件不能同時包含 2D 和 3D。<0/>請選擇 2D 實例或 3D 實例。","Custom size":"自定義尺寸","Custom upload key (not available yet)":"自定義上傳密鑰(尚不可用)","Cut":"剪切","Dark (colored)":"暗色(著色)","Dark (plain)":"暗色(平原)","Date":"日期","Date from which entries are taken into account: {0}":function(a){return["\u53C3\u8CFD\u4F5C\u54C1\u88AB\u8003\u616E\u7684\u65E5\u671F\uFF1A ",a("0")]},"Days":"天","Dead":"死亡","Dealing with data integration from external sources":"處理來自外部來源的數據集成","Debugger":"調試器","Debugger is starting...":"調試器正在啟動……","Declare <0><1/>{variableName} as <2><3/>{0} with <4>{1}":function(a){return["\u5C07 <0><1/>",a("variableName")," \u8072\u660E\u70BA <2><3/>",a("0")," \u4F7F\u7528 <4>",a("1"),""]},"Declare your app on App Store Connect and then register a key so that your game can be automatically uploaded when built. It's perfect to try your game with testers on Apple TestFlight.":"在 App Store Connect 上聲明您的應用程序,然后注冊一個密鑰,以便您的游戲在構建時可以自動上傳。與 Apple TestFlight 上的測試人員一起嘗試您的游戲是完美的選擇。","Default":"默認設置","Default (visible)":"預設(可見)","Default camera behavior":"預設相機行為","Default height (in pixels)":"默認高度 (以像素為單位)","Default name for created objects":"創建對象的默認名稱","Default orientation":"默認方向","Default size":"默認大小","Default skin":"默認皮膚","Default upload key (recommended)":"默認上傳密鑰(推薦)","Default value":"默認值","Default value of string variables":"字串變數的預設值","Default visibility":"預設可見性","Default width (in pixels)":"默認寬度 (以像素為單位)","Define custom password":"定義自訂密碼","Delete":"刪除","Delete Entry":"刪除條目","Delete Leaderboard":"刪除排行榜","Delete account":"刪除帳戶","Delete build":"刪除構建","Delete collision mask":"刪除碰撞遮罩","Delete game":"刪除遊戲","Delete my account":"刪除我的帳戶","Delete object":"刪除對象","Delete option":"刪除選項","Delete project":"刪除項目","Delete score {0} from {1}":function(a){return["\u5F9E ",a("1")," \u4E2D\u522A\u9664\u5F97\u5206 ",a("0")]},"Delete selection":"刪除選區","Delete the selected event(s)":"刪除所選事件","Delete the selected instances from the scene":"從場景中刪除選定實例","Delete the selected resource":"刪除所選資源","Delete when out of particles":"當粒子消失時刪除","Delete {gameName}":function(a){return["\u522A\u9664 ",a("gameName")]},"Dependencies":"依賴關系","Dependencies allow to add additional libraries in the exported games. NPM dependencies will be included for Electron builds (Windows, macOS, Linux) and Cordova dependencies will be included for Cordova builds (Android, iOS). Note that this is intended for usage in JavaScript events only. If you are only using standard events, you should not worry about this.":"依賴關系允許在導出的游戲中添加其他庫。 NPM依賴關系將包含在Electron版本(Windows,macOS,Linux)中,而Cordova依賴關系將包含在Cordova版本(Android,iOS)中。請注意,這僅適用于JavaScript事件。如果僅使用標準事件,則不必為此擔心。","Dependency type":"依賴類型","Deprecated":"已棄用","Deprecated action":"已棄用的操作","Deprecated actions and conditions warning":"已棄用的操作和條件警告","Deprecated condition":"已棄用的條件","Deprecated:":"已棄用:","Deprecation notice":"棄用通知","Depth":"深度","Description":"描述","Description (markdown supported)":"描述 (支持markdown)","Description (will be prefixed by \"Compare\" or \"Return\")":"描述(將以「比較」或「返回」為前綴)","Deselect All":"取消全選","Desktop":"桌面","Desktop & Mobile landscape":"桌面和移動橫屏模式","Desktop (Windows, macOS and Linux) icon":"桌面 (Windows, macOS 和 Linux) 圖標","Desktop Full HD":"桌面全高清模式","Desktop builds":"桌面版本","Details":"細節","Developer options":"開發者選項","Development (debugging & testing on a registered iPhone/iPad)":"開發 (在已注冊的 iPhone/iPad 上調試和測試)","Development tools required":"需要開發工具","Device orientation (for mobile)":"設備定位(適用于移動設備)","Diagnostic errors found":"發現診斷錯誤","Diagnostic report":"診斷報告","Dialog backdrop click behavior":"對話框背景點擊行為","Dialogs":"對話框","Did it work?":"這有效嗎?","Did you forget your password?":"您忘記了您的密碼嗎?","Different objects":"不同的物體","Dimension":"維度","Direction":"方向","Direction #{i}":function(a){return["\u65B9\u5411 #",a("i")]},"Disable GDevelop splash at startup":"啟動時禁用GDevelop splash","Disable effects/lighting in the editor":"在編輯器中禁用效果/照明","Disable login buttons in leaderboard":"禁用排行榜中的登錄按鈕","Discard changes and open events":"放棄更改并打開事件","Discard changes?":"放棄更改?","Discord":"Discord","Discord server, e.g: https://discord.gg/...":"Discord 服務器,例如: https://discord.gg/...","Discord user not found":"未找到 Discord 用戶","Discord username":"Discord 用戶名","Discord username sync failed":"Discord 用戶名同步失敗","Discover this bundle":"查看此包","Display GDevelop logo at startup (in exported game)":"啟動時顯示 GDevelop 徽標(導出游戲)","Display GDevelop watermark after the game is loaded (in exported game)":"游戲加載后顯示 GDevelop 水印(在導出游戲中)","Display What's New when a new version is launched (recommended)":"顯示新版本啟動時的 \"新增功能\" (推薦)","Display as time":"顯示為時間","Display assignment operators in Events Sheets":"在事件表中顯示賦值運算符","Display both 2D and 3D objects (default)":"同時顯示 2D 和 3D 對象 (默認)","Display effects/lighting in the editor":"在編輯器中顯示效果/照明","Display object thumbnails in Events Sheets":"在事件表中顯示對象的縮略圖","Display profiling information in scene editor":"在場景編輯器中顯示分析信息","Display save reminder after significant changes in project":"在項目中發生重大變更後顯示保存提醒","Displayed score":"顯示分數","Distance":"距離","Do nothing":"什么都不做","Do you have a Patreon? Ko-fi? Paypal?":"您有一個Patreon嗎?Ko-fi?Paypal?","Do you have game development experience?":"您有游戲開發經驗嗎?","Do you need any help?":"您需要任何幫助嗎?","Do you really want to permanently delete your account?":"你真的想永久刪除你的帳戶嗎?","Do you want to continue?":"你想繼續嗎?","Do you want to quit the customization? All your changes will be lost.":"您想退出自定義嗎?您所有的變更將丟失。","Do you want to refactor your project?":"你想重構你的項目嗎?","Do you wish to continue?":"你想繼續嗎?","Documentation":"文檔","Don't allow":"不允許","Don't have an account yet?":"還沒有一個帳號?","Don't play the animation when the object is far from the camera or hidden (recommended for performance)":"當對象遠離相機或隱藏時不要播放動畫 (性能提升推薦)","Don't preload":"不要預加載","Don't save this project now":"現在不保存此項目","Don't show this warning again":"不要再顯示此警告","Donate link":"捐贈鏈接","Done":"完成","Done!":"完成!","Download":"下載","Download (APK)":"下載 (APK)","Download (Android App Bundle)":"下載 (Android App Bundle)","Download GDevelop desktop version":"下載GDevelop桌面版本","Download a copy":"下載副本","Download log files":"下載日志文件","Download pack sounds":"下載包聲音","Download the Instant Game archive":"下載即時游戲存檔","Download the certificate file (.cer) generated by Apple and upload it here. GDevelop will keep it securely stored.":"下載 Apple 生成的證書文件 (.cer) 并在此處上傳。GDevelop 將安全地存儲它。","Download the compressed game and resources":"下載壓縮游戲和資源","Download the exported game":"下載導出的游戲","Download the latest version of GDevelop to check out this example!":"下載 GDevelop 的最新版本以查看此示例!","Download the request file":"下載請求文件","Downloading game resources...":"正在下載資源","Draft created:":"草稿已創建:","Drag here to add to the scene":"在此拖拽以添加到場景","Draw":"繪制","Draw the shapes relative to the object position on the scene":"繪制場景中相對于對象位置的形狀","Duplicate":"重復","Duplicate <0>{duplicatedObjectName} as <1>{object_name} in scene <2>{scene_name}.":function(a){return["\u5728\u5834\u666F <2>",a("scene_name")," \u4E2D\u5C07 <0>",a("duplicatedObjectName")," \u8907\u88FD\u70BA <1>",a("object_name"),"\u3002"]},"Duplicate selection":"重復選擇","Duration":"期限","Each character, player, obstacle, background, item, etc. is an object. Objects are the building blocks of your game.":"每個角色、玩家、障礙物、背景、物品等都是對象。對象是您遊戲的基礎。","Earn an exclusive badge":"獲得專屬徽章","Earn {0}":function(a){return["\u7372\u5F97 ",a("0")]},"Ease of use":"易于使用","Easiest":"最簡單","Edit":"編輯","Edit Grid Options":"編輯網格選項","Edit Object Variables":"編輯對象變量","Edit behaviors":"編輯行為","Edit build name":"編輯構建名稱","Edit children":"編輯子項","Edit collision masks":"編輯碰撞遮罩","Edit comment":"編輯評論","Edit details":"編輯詳情","Edit effects":"編輯特效","Edit global variables":"編輯全局變量","Edit group":"編輯組","Edit layer effects...":"編輯圖層特效...","Edit layer...":"編輯圖層...","Edit loading screen":"編輯加載屏幕","Edit my profile":"編輯我的個人資料","Edit name":"編輯名稱","Edit object":"編輯對象","Edit object behaviors...":"編輯對象行為...","Edit object effects...":"編輯對象特效...","Edit object group...":"編輯對象組...","Edit object variables":"編輯對象變量","Edit object variables...":"編輯對象變量","Edit object {0}":function(a){return["\u7DE8\u8F2F\u5C0D\u8C61 ",a("0")]},"Edit object...":"編輯對象","Edit or add variables...":"編輯或新增變量...","Edit parameters...":"編輯參數...","Edit points":"編輯點","Edit scene properties":"編輯場景屬性","Edit scene variables":"編輯場景變量","Edit student":"編輯學生","Edit the default variant":"編輯預設變體","Edit this action events":"編輯此動作事件","Edit this behavior":"編輯此行為","Edit this condition events":"編輯此條件事件","Edit variables...":"編輯變量...","Edit with Jfxr":"使用 Jfxr 編輯","Edit with Piskel":"使用 Piskel 編輯","Edit with Yarn":"用 Yarn 編輯","Edit your GDevelop profile":"編輯您的 GDevelop 資料","Edit your profile and fill your discord username to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"編輯您的個人資料並填寫您的 Discord 用戶名以在 [GDevelop Discord](https://discord.gg/gdevelop) 上獲得您的角色。","Edit your profile to pick a username!":"編輯您的個人資料,選擇一個用戶名!","Edit {0}":function(a){return["\u7DE8\u8F2F ",a("0")]},"Edit {objectName}":function(a){return["\u7DE8\u8F2F ",a("objectName")]},"Editing the game.":"編輯遊戲。","Editor":"編輯","Editor without transitions":"沒有切換的編輯器","Education curriculum and resources":"教育課程和資源","Educational":"教育","Effect name:":"效果名稱:","Effects":"特效","Effects cannot have empty names":"效果不能有空名稱","Effects create visual changes to the object.":"特效會對對象進行視覺更改。","Either this game is not registered or you are not its owner, so you cannot see its builds.":"要么這個游戲沒有注冊,要么你不是它的所有者,所以你看不到它的構建。","Else":"其他","Else if":"其他如果","Email":"電子郵件","Email sent to {0}, waiting for validation...":function(a){return["\u96FB\u5B50\u90F5\u4EF6\u5DF2\u767C\u9001\u81F3 ",a("0"),"\uFF0C\u7B49\u5F85\u9A57\u8B49..."]},"Email verified":"電子郵件已驗證","Embedded file name":"嵌入文件名","Embedded help and tutorials":"嵌入式幫助和教程","Empty free text":"空的自由文本","Empty group":"Empty group","Empty project":"空白專案","Enable \"Close project\" shortcut ({0}) to close preview window":function(a){return["\u555F\u7528\u300C\u95DC\u9589\u9805\u76EE\u300D\u5FEB\u6377\u9375 (",a("0"),") \u4EE5\u95DC\u9589\u9810\u89BD\u7A97\u53E3"]},"Enable ads and revenue sharing on the game page":"在遊戲頁面啟用廣告和收益分享","Enabled":"已啟用","End of jam":"jam 結束","End opacity (0-255)":"透明度","Enforce only auto-generated player names":"僅強制執行自動生成的玩家名稱","Ensure that you are connected to internet and that the URL used is correct, then try again.":"請確保您已連接到互聯網,并確保所使用的 URL 正確,然后再試一次。","Ensure this scene has the same objects, behaviors and variables as the ones used in these events.":"確保該場景具有與這些事件中使用的相同的對象、行為和變量。","Ensure you don't have any typo in your username and that you have joined the GDevelop Discord server.":"確保您的用戶名沒有任何拼寫錯誤,并且您已加入 GDevelop Discord 服務器。","Enter a query and press Search to find matches across all event sheets in your project.":"輸入查詢並按下搜尋以在您的專案中的所有事件表中查找匹配項。","Enter a version in the game properties.":"在游戲屬性中輸入一個版本。","Enter the effect name":"輸入效果名稱","Enter the expression parameters":"輸入表達式參數","Enter the leaderboard id":"輸入排行榜 ID","Enter the leaderboard id as a text or an expression":"輸入排行榜ID作為文本或表達式","Enter the name of an object.":"輸入一個對象的名稱","Enter the name of the object":"輸入對象的名稱","Enter the parameter name (mandatory)":"輸入參數名稱(強制性)","Enter the property name":"輸入屬性名","Enter the sentence that will be displayed in the events sheet":"輸入將會在事件表中被顯示的句子","Enter the text to be displayed":"輸入要顯示的文本","Enter the text to be displayed by the object":"輸入要由對象顯示的文本","Enter your Discord username":"輸入您的 Discord 用戶名","Enter your code here":"在此處輸入您的代碼","Erase":"擦除","Erase {existingInstanceCount} instance(s) in scene {scene_name}.":function(a){return["\u5728\u5834\u666F",a("scene_name"),"\u4E2D\u522A\u9664",a("existingInstanceCount"),"\u500B\u5BE6\u4F8B\u3002"]},"Error":"錯誤","Error loading Auth Keys.":"加載身份驗證密鑰時出錯。","Error loading certificates.":"加載證書時出錯。","Error retrieving the examples":"獲取示例時出錯","Error retrieving the extensions":"獲取擴展時出錯","Error when claiming asset pack":"領取資產包時出錯","Error while building of the game. Check the logs of the build for more details.":"構建游戲時出錯。檢查構建日志以獲取更多詳細信息。","Error while building the game. Check the logs of the build for more details.":"構建游戲時出錯。檢查構建日志以獲取更多詳細信息。","Error while building the game. Try again later. Your internet connection may be slow or one of your resources may be corrupted.":"構建游戲時出錯。稍后再試。您的互聯網連接速度可能很慢,或者您的資源之一可能已損壞。","Error while checking update":"檢查更新時出錯","Error while compressing the game.":"壓縮游戲時出錯。","Error while downloading the game resources. Check your internet connection and that all resources of the game are valid in the Resources editor.":"下載游戲資源時出錯。檢查您的互聯網連接,確保游戲的所有資源在資源編輯器中均有效。","Error while exporting the game.":"導出游戲時出錯。","Error while loading builds":"加載構建時出錯","Error while loading the Play section. Verify your internet connection or try again later.":"加載播放部分時出錯。請檢查您的互聯網連接或稍後再試。","Error while loading the Spine Texture Atlas resource ( {0} ).":function(a){return["\u52A0\u8F09 Spine \u7D0B\u7406\u5716\u96C6\u8CC7\u6E90 ( ",a("0")," ) \u6642\u51FA\u932F\u3002"]},"Error while loading the Spine resource ( {0} ).":function(a){return["\u52A0\u8F09 Spine \u8CC7\u6E90 ( ",a("0")," ) \u6642\u51FA\u932F\u3002"]},"Error while loading the asset. Verify your internet connection or try again later.":"加載資產時出錯。請驗證您的網絡連接或稍后再試。","Error while loading the collaborators. Verify your internet connection or try again later.":"加載合作者時出錯。請驗證您的網絡連接或稍后再試。","Error while loading the marketing plans. Verify your internet connection or try again later.":"加載營銷計劃時出錯。請驗證您的互聯網連接或稍后重試。","Error while uploading the game. Check your internet connection or try again later.":"上傳游戲時出錯。請檢查您的互聯網連接或稍后重試。","Escape key behavior when editing an parameter inline":"編輯內聯參數時轉義密鑰行為","Evaluating the game logic":"評估遊戲邏輯","Event sentences":"事件句子","Events":"事件","Events Sheet":"活動表","Events analysis":"事件分析","Events define the rules of a game.":"事件定義了游戲規則。","Events functions extension":"事件功能擴展","Events that will be run at every frame (roughly 60 times per second), after the events from the events sheet of the scene.":"在場景事件表中的事件之后,將在每幀 (每秒約60次) 上運行的事件。","Events that will be run at every frame (roughly 60 times per second), before the events from the events sheet of the scene.":"在場景事件表中的事件之前,將在每幀 (每秒大約60次) 上運行事件。","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, after the events from the events sheet.":"在事件表上的事件之后,將會在每一幀(大約每秒60次)為每個有此行為附著的對象而運行的事件。","Events that will be run at every frame (roughly 60 times per second), for every object that has the behavior attached, before the events from the events sheet are launched.":"在事件表上的事件加載之前,將會在每一幀(大約每秒60次)為每個有此行為附著的對象而運行的事件。","Events that will be run at every frame (roughly 60 times per second), for every object, after the events from the events sheet.":"在事件表中的事件之后,對于每個對象,將在每一幀(大約每秒 60 次)運行的事件。","Events that will be run once when a scene is about to be unloaded from memory. The previous scene that was paused will be resumed after this.":"當一個場景要從內存中被卸載時將運行一次的事件。 在此之前被暫停的場景將在此之后恢復。","Events that will be run once when a scene is paused (another scene is run on top of it).":"當一個場景被暫停時將運行一次的事件 ( 另一個場景在此場景上運行) 。","Events that will be run once when a scene is resumed (after it was previously paused).":"當一個場景被恢復時( 之前被暫停后) 將運行一次的事件。","Events that will be run once when a scene of the game is loaded, before the scene events.":"此事件將會在一個游戲場景加載時執行一次,先于該場景的事件。","Events that will be run once when the behavior is deactivated on an object (step events won't be run until the behavior is activated again).":"當在一個對象上停用該行為時,將運行一次的事件(在再次激活該行為之前,不會運行步進事件) 。","Events that will be run once when the behavior is re-activated on an object (after it was previously deactivated).":"當在一個對象上重新激活該行為時(之前已被停用),將運行一次的事件。","Events that will be run once when the first scene of the game is loaded, before any other events.":"在加載游戲的第一個場景時,在任何其它事件之前,將運行一次的事件。","Events that will be run once, after the object is removed from the scene and before it is entirely removed from memory.":"對象從場景中被移除之后,并從內存中被全部刪除之前,將會運行一次的事件。","Events that will be run once, when an object is created with this behavior being attached to it.":"當一個對象有此行為附著而被創造時,將會運行一次的事件。","Events that will be run once, when an object is created.":"創建對象時將運行一次的事件。","Events that will be run when the preview is being hot-reloaded.":"預覽熱加載時將運行的事件。","Every animation from the GLB file is already in the list.":"GLB 文件中的每個動畫都已在列表中。","Every animation from the Spine file is already in the list.":"Spine 文件中的每個動畫都已在列表中。","Every child of an array must be the same type.":"每個數組的子項必須類型相同。","Ex: $":"例如:$","Ex: coins":"例如:硬幣","Examining the behaviors":"檢查行為","Example: Check if the object is flashing.":"示例:檢查對象是否正在閃爍。","Example: Equipped shield name":"示例:裝備的護盾名稱","Example: Flash the object":"示例:讓對象閃爍","Example: Is flashing":"示例:正在閃爍","Example: Make the object flash for 5 seconds.":"示例:使對象閃爍5秒鐘。","Example: Remaining life":"示例:剩余生命","Example: Return the name of the shield equipped by the player.":"示例:返回玩家裝備的盾牌名稱。","Example: Return the number of remaining lives for the player.":"示例:返回玩家的剩余生命數。","Example: Use \"New Action Name\" instead.":"範例:使用 \"新操作名稱\" 替代。","Examples ({0})":function(a){return["\u793A\u4F8B (",a("0"),")"]},"Exchange your earnings with GDevelop credits, and use them on the GDevelop store":"將您的收入兌換成 GDevelop 積分,並在 GDevelop 商店中使用它們","Exclude attribution requirements":"排除歸因要求","Existing behaviors":"現有行為","Existing effects":"現有效果","Existing parameters":"現有參數","Existing properties":"現有屬性","Exit without saving":"不保存退出","Expand All to Level":"全部展開到級別","Expand all sub folders":"展開所有子文件夾","Expand inner area with parent":"擴展內部區域與父對象","Expected parent event":"預期的父事件","Experiment with the leaderboard colors using the playground":"使用游樂場上的排行榜顏色進行實驗","Experimental":"實驗性","Experimental extension":"實驗性擴展","Expert":"專家","Explain and give some examples of what can be achieved with this extension.":"解釋并舉例說明使用此擴展可以實現什么。","Explain what the behavior is doing to the object. Start with a verb when possible.":"解釋行為對對象做了什么。盡可能以動詞開頭。","Explanation after an object is installed from the store":"從商店安裝對象后的說明","Explore":"探索","Explore by category":"按類別瀏覽","Exploring the game.":"探索遊戲。","Export (web, iOS, Android)...":"導出 (網絡、iOS、Android)……","Export HTML5 (external websites)":"匯出 HTML5(外部網站)","Export as a HTML5 game":"導出為 HTML5 游戲","Export as a pack":"導出為包","Export as assets":"導出為資產","Export extension":"導出擴展","Export failed. Check that the output folder is accessible and that you have the necessary permissions.":"匯出失敗。請檢查輸出資料夾是否可訪問,以及您是否擁有必要的權限。","Export game":"導出游戲","Export in progress...":"正在導出……","Export name":"導出名稱","Export the scene objects to a file and learn more about the submission process in the documentation.":"將場景對象導出到文件并在文檔中了解有關提交過程的更多信息。","Export to a file":"導出到文件","Export your game":"導出你的游戲","Export {0} assets":function(a){return["\u5C0E\u51FA ",a("0")," \u8CC7\u7522"]},"Exporting...":"正在導出...","Exports":"導出","Expression":"表達式","Expression and condition":"表達式和條件","Expression used to sort instances before iterating. It will be evaluated for each instance.":"用於排序實例的表達式,在迭代之前會對每個實例進行評估。","Extend":"擴展","Extend Featuring":"擴展功能","Extend width or height to fill screen (without cropping the game area)":"擴展寬度或高度以填滿螢幕(不裁剪遊戲區域)","Extension":"擴充","Extension (storing the custom object)":"擴展(存儲自定義物件)","Extension containing the new function":"包含新函數的擴展","Extension global variables":"擴展全局變數","Extension name":"Extension name","Extension scene variables":"擴展場景變數","Extension update":"擴展更新","Extension updates":"擴展更新","Extension variables":"擴展變量","Extensions":"擴展","Extensions ({0})":function(a){return["\u64F4\u5C55 (",a("0"),")"]},"Extensions search":"擴展搜索","External events":"外部事件","External layout":"外部布局","External layout name":"外部布局名稱","External layouts":"外部布局","Extra source files (experimental)":"額外的源檔案(實驗)","Extract":"提取","Extract Events to a Function":"提取事件給函數","Extract as a custom object":"提取為自訂物件","Extract as an external layout":"提取為外部布局","Extract the events in a function":"從函數中提取事件","Extreme score must be equal or higher than {extremeAllowedScoreMin}.":function(a){return["\u6975\u7AEF\u5206\u6578\u5FC5\u9808\u7B49\u4E8E\u6216\u5927\u4E8E ",a("extremeAllowedScoreMin"),"\u3002"]},"Extreme score must be lower than {extremeAllowedScoreMax}.":function(a){return["\u6975\u7AEF\u5206\u6578\u5FC5\u9808\u5C0F\u4E8E ",a("extremeAllowedScoreMax"),"\u3002"]},"FPS:":"幀率","Facebook":"臉書","Facebook Games":"Facebook游戲","Facebook Instant Games":"Facebook 即時游戲","False":"否","False (not checked)":"否(不選中)","Far plane distance":"遠平面距離","Featuring already active":"功能已經激活","Feedbacks":"反饋","Field of view (in degrees)":"視野 (以度數為單位)","File":"文件","File history":"文件歷史記錄","File name":"文件名","File(s) from your device":"來自您設備的文件 (s)","Fill":"填充","Fill automatically":"自動填充","Fill bucket":"填滿桶子","Fill color":"填充顏色","Fill opacity (0-255)":"填充不透明度 (0-255)","Fill proportionally":"按比例填充","Filter the logs by group":"按組篩選日志","Filters":"過濾器","Find how to implement the most common game mechanics and more":"查找如何實施最常見的游戲機制以及更多","Find the complete documentation on everything":"查找所有內容的完整文檔","Find the substitles in your language in the setting of each video.":"在每個影片的設定中尋找您語言的字幕。","Find your finished game on the “Build” section. Or restart the tutorial by clicking on the card.":"在“構建”部分找到您完成的游戲。或者通過單擊卡片重新啟動教程。","Finish and close":"完成並關閉","Finished":"已完成","Fire a Bullet":"射出子彈","Fire bullets in an Asteroids game.":"在小行星遊戲中發射子彈。","Fire bullets in this Asteroids game. Get ready for a Star Wars show.":"在這個小行星遊戲中發射子彈。準備好參加星際大戰的表演。","First (before other files)":"首先 (在其它文件之前)","First editor":"第一個編輯器","First name":"名字","Fit content to window":"使內容適合窗口","Fit to content":"適合內容","Fix those issues to get the campaign up!":"解決這些問題以啟動活動!","Flip along Z axis":"沿 Z 軸翻轉","Flip horizontally":"水平翻轉","Flip vertically":"垂直翻轉","Flow of particles (particles/seconds)":"粒子的流動 (粒子/秒)","Folders":"文件夾","Follow":"追隨","Follow GDevelop on socials and check your profile to get some free credits!":"Follow GDevelop on socials and check your profile to get some free credits!","Follow a character with scrolling background.":"跟隨具有滾動背景的角色。","Follow this Castlevania-type character with the camera, while the background scrolls.":"Follow this Castlevania-type character with the camera, while the background scrolls.","Font":"字體","Font resource":"字體資源","For Education":"用于教育","For Individuals":"用于個人","For Teams":"用于團隊","For a given video resource, only one video will be played in memory and displayed. If you put this object multiple times on the scene, all the instances will be displaying the exact same video (with the same timing and paused/played/stopped state).":"一個指定的視頻源,只有一個視頻會在內存中顯示。如果您多次在場景上放置,所有的實例都會用同樣的暫停,播放,停止狀態播放","For a pixel type font, you must disable the Smooth checkbox related to your texture in the game resources to disable anti-aliasing.":"對于像素類型的字體,您必須在游戲資源中禁用與您的紋理相關的平滑復選框,才能禁用抗鋸齒。","For most games, the default automatic loading of resources will be fine. This action should only be used when trying to avoid loading screens from appearing between scenes.":"對于大多數游戲來說,默認自動加載資源就可以了。僅當嘗試避免在場景之間出現加載屏幕時才應使用此操作。","For teachers and educators having the GDevelop Education subscription. Ready to use resources for teaching.":"對于有GDevelop 教育訂閱的教師和教育工作者來說,可以準備好使用相關資源進行教學。","For the 3D change to take effect, close and reopen all currently opened scenes.":"要使 3D 更改生效,請關閉并重新打開所有當前打開的場景。","For the lifecycle functions to be executed, you need the extension to be used in the game, either by having at least one action, condition or expression used, or a behavior of the extension added to an object. Otherwise, the extension won't be included in the game.":"對于要執行的生命周期函數,你需要在游戲中使用該擴展,方法是:對加到一個對象上的某個擴展,至少使用一個動作、條件、表達式,或者一個行為。否則,該擴展將不會被包含到游戲中。","Force display both 2D and 3D objects":"強制顯示 2D 和 3D 對象","Force display only 2D objects":"強制只顯示2D對象","Force display only 3D objects":"強制只顯示3D對象","Forfeit my redeemed subscription and continue":"放棄我的已兌換訂閱並繼續","Form sent with success. You should receive an email in the next minutes.":"表格發送成功。您應該會在接下來的幾分鐘內收到一封電子郵件。","Forum access":"論壇訪問","Forum account not found":"找不到論壇帳號","Forum sync failed":"論壇同步失敗","Forums":"論壇","Forward (Additional button, typically the Browser Forward button)":"前進 (附加按鈕,通常是瀏覽器前進按鈕)","Found 1 match in 1 event sheet":"在 1 個事件表中找到 1 個匹配項","Found 1 match in {0} event sheets":function(a){return["\u5728 ",a("0")," \u500B\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230 1 \u500B\u5339\u914D\u9805"]},"Found {totalMatchCount} matches in 1 event sheet":function(a){return["\u5728 1 \u500B\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230 ",a("totalMatchCount")," \u500B\u5339\u914D\u9805"]},"Found {totalMatchCount} matches in {0} event sheets":function(a){return["\u5728 ",a("0")," \u500B\u4E8B\u4EF6\u8868\u4E2D\u627E\u5230 ",a("totalMatchCount")," \u500B\u5339\u914D\u9805"]},"Frame":"幀","Frame #{i}":function(a){return["\u5E40 #",a("i")]},"Free":"免費的","Free in-app tutorials":"應用內免費教程","Free instance":"免費實例","Free!":"免費!","Freehand brush":"自由手刷","From the same author":"來自同一作者","Front face":"正面","Full Game Asset Packs":"完整游戲資源包","Full name":"全名","Full name displayed in editor":"編輯器中顯示的全名","Fun":"有趣的","Function Configuration":"功能配置","Function name":"函數名","Function type":"函數類型:","Functions":"函數","GDevelop 5":"GDevelop","GDevelop Bundles":"GDevelop 捆綁包","GDevelop Cloud":"GDevelop 云","GDevelop Website":"GDevelop 網站","GDevelop app":"GDevelop 應用程序","GDevelop auto-save":"GDevelop 自動保存","GDevelop automatically saved a newer version of this project on {0}. This new version might differ from the one that you manually saved. Which version would you like to open?":function(a){return["GDevelop \u5728 ",a("0")," \u4E0A\u81EA\u52D5\u4FDD\u5B58\u6B64\u9805\u76EE\u7684\u65B0\u7248\u672C\u3002 \u9019\u500B\u65B0\u7248\u672C\u53EF\u80FD\u4E0D\u540C\u4E8E\u4F60\u624B\u52D5\u4FDD\u5B58\u7684\u7248\u672C\u3002\u4F60\u60F3\u8981\u6253\u958B\u54EA\u500B\u7248\u672C\uFF1F"]},"GDevelop credits":"GDevelop 積分","GDevelop games on gd.games":"gd.games 上的 GDevelop 游戲","GDevelop is a full-featured, open-source game engine. Build and publish games for any mobile, desktop or web game store. It's super fast, easy to learn and powered by a community making it better every day.":"GDevelop 是一個全功能的、開放源碼的游戲引擎。它可以為任何移動、桌面或網上游戲商店建立和發布游戲。 它是超快的、容易學習的,以及由社區提供動力的,每天都在變得越來越好。","GDevelop logo style":"GDevelop 徽標樣式","GDevelop update ready":"GDevelop 更新已準備好","GDevelop update ready ({version})":function(a){return["GDevelop \u66F4\u65B0\u5DF2\u6E96\u5099\u597D (",a("version"),")"]},"GDevelop was created by Florian \"4ian\" Rival.":"GDevelop由Florian \"4ian\" Rival創建。","GDevelop was upgraded to a new version! Check out the changes.":"GDevelop已被升級到新版本!請查看更改。","GDevelop watermark placement":"GDevelop 水印位置","GDevelop website":"GDevelop網站","GDevelop will save your progress, so you can take a break if you need.":"GDevelop 將保存您的進度,因此您可以在需要時休息一下。","GDevelop's installation is corrupted and can't be used":"GDevelop's installation is corrupted and can't be used","GLB animation name":"GLB 動畫名稱","Game Dashboard":"游戲儀表板","Game Design":"遊戲設計","Game Development":"遊戲開發","Game Info":"游戲信息","Game Scenes":"游戲場景","Game already registered":"游戲已注冊","Game background":"游戲背景","Game configuration has been saved":"遊戲配置已儲存","Game description":"游戲描述","Game earnings":"遊戲收入","Game export":"游戲導出","Game for teaching or learning":"用于教學或學習的游戲","Game leaderboards":"游戲排行榜","Game mechanic":"游戲機制","Game name":"游戲名稱","Game name in the game URL":"游戲URL中的游戲名稱","Game not found":"找不到游戲","Game personalisation":"游戲個性化","Game preview \"{id}\" ({0})":function(a){return["\u6E38\u6232\u9810\u89BD \"",a("id"),"\" (",a("0"),")"]},"Game properties":"游戲屬性","Game resolution height":"游戲分辨率高度","Game resolution resize mode (fullscreen or window)":"游戲分辨率調整大小模式(全屏或窗口)","Game resolution width":"游戲分辨率寬度","Game scene size":"游戲場景大小","Game settings":"游戲設置","Game template not found":"找不到游戲模板","Game template not found - An error occurred, please try again later.":"未找到游戲模板 - 發生錯誤,請稍后重試。","Game templates will be linked to your user account and available for all your projects. Log-in or sign-up to purchase this game template. (or restore your existing purchase).":"游戲模板將鏈接到您的用戶帳戶并可用于您的所有項目。登錄或注冊即可購買此游戲模板。(或恢復您現有的購買)。","Gamepad":"遊戲手柄","Games":"遊戲","Games to learn or teach something":"學習或教授東西的游戲","Gaming portals (Itch.io, Poki, CrazyGames...)":"遊戲門戶網站 (Itch.io、Poki、CrazyGames...)","General":"一般","General:":"常規","Generate a link":"生成鏈接","Generate a new link":"生成新鏈接","Generate a shareable link to your game.":"生成您的游戲的可共享鏈接。","Generate all your icons from 1 file":"從一個檔案生成所有圖示","Generate expression and action":"生成表達式和動作","Generate random name":"生成隨機名稱","Generate report at each preview":"每次預覽時生成報告","Generating your student’s accounts...":"正在生成您學生的帳戶……","Generation hint":"生成提示","Genres":"類型","Get Featuring":"獲得功能","Get GDevelop Premium":"獲取 GDevelop Premium","Get Premium":"獲取高級版","Get a GDevelop subscription to increase the limits.":"獲取 GDevelop 訂閱以增加限制。","Get a Gold or Pro subscription to claim your role on the [GDevelop Discord](https://discord.gg/gdevelop).":"獲取 Gold 或 Pro 訂閱以聲明您在 [GDevelop Discord](https://discord.gg/gdevelop) 上的角色。","Get a Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"獲得 Premium 訂閱以擁有更多 AI 請求和 GDevelop 硬幣,以解鎖引擎的額外好處。","Get a Pro subscription to invite collaborators into your project.":"獲取專業訂閱以邀請合作者加入您的項目。","Get a Sub":"獲得一個子項","Get a pro subscription to get full leaderboard customization.":"獲取專業版訂閱以獲得完整的排行榜定制。","Get a pro subscription to unlock custom CSS.":"獲取專業訂閱以解鎖自定義 CSS。","Get a sample in your email":"在您的電子郵件中獲得一份樣本","Get a silver or gold subscription to disable GDevelop branding.":"獲得銀色或金色訂閱以禁用 GDevelop 品牌。","Get a silver or gold subscription to unlock color customization.":"獲取銀色或金色訂閱以解鎖顏色定制。","Get a subscription":"獲得訂閱","Get a subscription to keep building with AI.":"獲得訂閱以繼續與 AI 建立應用程式。","Get a subscription to unlock this packaging.":"獲取訂閱以解鎖此軟件包。","Get access":"獲取訪問","Get access to an exclusive channel on the [GDevelop Discord](https://discord.gg/gdevelop) by subscribing to a Gold, Pro or Education plan.":"通過訂閱 Gold、Pro 或 Education 計劃來獲得 [GDevelop Discord](https://discord.gg/gdevelop) 上的獨家頻道訪問權限。","Get back online to browse the huge library of free and premium examples.":"重新在線上以瀏覽大量免費和優質樣本的庫。","Get credit packs":"獲取積分包","Get lesson with Edu":"與Edu一起上課","Get more GDevelop credits to keep building with AI.":"獲得更多 GDevelop 積分以繼續與 AI 建立應用程式。","Get more credits":"獲得更多積分","Get more leaderboards":"獲得更多排行榜","Get more players":"獲得更多玩家","Get more players on your game":"在您的遊戲中獲得更多玩家","Get our teaching resources":"獲取我們的教學資源","Get perks and cloud benefits when getting closer to your game launch. <0>Learn more":"臨近游戲發布時獲取額外福利和云優勢。<0>了解更多","Get premium":"獲取高級版","Get subscription":"獲得訂閱","Get the app":"獲取應用程序","Get {0}!":function(a){return["\u7372\u5F97 ",a("0"),"\uFF01"]},"Get {estimatedTotalPriceFormatted} worth of value for less!":function(a){return["\u4EE5\u66F4\u5C11\u7684\u50F9\u683C\u7372\u5F97 ",a("estimatedTotalPriceFormatted")," \u503C\u7684\u50F9\u503C\uFF01"]},"GitHub repository":"GitHub 儲存庫","Github":"Github","Give feedback on a game!":"對遊戲提供反饋!","Global Groups":"全局組","Global Objects":"全局對象","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?":"Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global group?","Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?":"Global elements help manage objects across multiple scenes and are recommended for frequently used objects. This action cannot be undone. Do you want to set this as global object?","Global groups":"全局組","Global objects":"全局對象","Global objects in the project":"項目中的全局對象","Global search":"全局搜尋","Global search (search in project)":"全局搜尋(在專案中搜尋)","Global variable":"全局變量","Global variables":"全局變量","Go back":"返回","Go back to {translatedExpectedEditor}{sceneMention} to keep creating your game.":function(a){return["\u8FD4\u56DE ",a("translatedExpectedEditor"),a("sceneMention")," \u7E7C\u7E8C\u5275\u5EFA\u60A8\u7684\u6E38\u6232\u3002"]},"Go to [Apple Developer Certificates list](https://developer.apple.com/account/resources/certificates/list) and click on the + button. Choose **Apple Distribution** (for app store) or **Apple Development** (for testing on device). When requested, upload the request file you downloaded.":"轉到 [Apple 開發者證書列表](https://developer.apple.com/account/resources/certificates/list) 并單擊 + 按鈕。選擇 **Apple Distribution** (用于應用程序商店) 或 **Apple Development** (用于在設備上測試)。當請求時,上傳您下載的請求文件。","Go to [Apple Developer Profiles list](https://developer.apple.com/account/resources/profiles/list) and click on the + button. Choose **App Store Connect** or **iOS App Development**. Then, choose *Xcode iOS Wildcard App ID*, then the certificate you created earlier. For development, you can choose [the devices you registered](https://developer.apple.com/help/account/register-devices/register-a-single-device/). Finish by downloading the generated file and upload it here so it can be stored securely by GDevelop.":"轉到 [Apple 開發者配置文件列表](https://developer.apple.com/account/resources/profiles/list) 并單擊 + 按鈕。選擇 **App Store Connect** 或 **iOS 應用程序開發**。然后,選擇 *Xcode iOS Wildcard App ID*,然后選擇您之前創建的證書。對于開發,您可以選擇[您注冊的設備](https://developer.apple.com/help/account/register-devices/register-a-single-device/)。下載生成的文件并將其上傳到此處,以便 GDevelop 安全地存儲它。","Go to first page":"轉到第一頁","Google":"Google","Google Play (or other stores)":"Google Play (或其他商店)","Got it":"明白了","Got it! I've put together a plan:":"明白了!我已經制定了一個計劃:","Gravity on particles on X axis":"X軸粒子重力","Gravity on particles on Y axis":"Y軸粒子重力","Group name":"群組名稱","Group name cannot be empty.":"組名不能為空。","Group: {0}":function(a){return["\u7B2C",a("0")," \u7D44\uFF1A"]},"Groups":"組","HTML5":"HTML5","HTML5 (external websites)":"HTML5 (外部網站)","Had no players in the last week":"過去一周沒有玩家","Had {countOfSessionsLastWeek} players in the last week":function(a){return["\u904E\u53BB\u4E00\u5468\u6709 ",a("countOfSessionsLastWeek")," \u540D\u73A9\u5BB6"]},"Has animations (JavaScript only)":"有動畫(僅限 JavaScript)","Have you changed your usage of GDevelop?":"您是否改變了 GDevelop 的使用方式?","Having the same collision masks for all animations will erase and reset all the other animations collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the animations of the object?":"對于所有動畫具有相同的碰撞遮罩將擦除并重置所有其他動畫的碰撞遮罩。這是無法撤消的。是否確實要在對象的所有動畫中共享這些碰撞遮罩?","Having the same collision masks for all frames will erase and reset all the other frames collision masks. This can't be undone. Are you sure you want to share these collision masks amongst all the frames of the animation?":"對于所有幀具有相同的碰撞掩碼將擦除并重置所有其他幀的碰撞掩碼。這是無法撤消的。是否確實要在動畫的所有幀之間共享這些碰撞遮罩?","Having the same points for all animations will erase and reset all the other animations points. This can't be undone. Are you sure you want to share these points amongst all the animations of the object?":"對所有動畫具有相同的點將擦除和重置所有其他動畫點。這是無法挽回的。您確定要在對象的所有動畫中分享這些點嗎?","Having the same points for all frames will erase and reset all the other frames points. This can't be undone. Are you sure you want to share these points amongst all the frames of the animation?":"對所有幀使用相同的點將擦除并重置所有其他幀點。這是無法挽回的。您確定要在動畫的所有幀之間共享這些點嗎?","Health bar":"生命條","Height":"高度","Help":"幫助","Help for this action":"此操作的幫助","Help for this condition":"此條件的幫助","Help page URL":"幫助頁面URL","Help translate GDevelop":"Help translate GDevelop","Help us improve by telling us what could be improved:":"幫助我們改進,告訴我們可以改進的地方:","Help us improve our learning content":"幫助我們改善學習內容","Here are your redemption codes:":"這是您的兌換碼:","Here's how I'll tackle this:":"這是我將如何處理此事的方式:","Hidden":"隱藏","Hidden on gd.games":"在 gd.games 上隱藏","Hide deprecated behaviors (prefer not to use anymore)":"隱藏廢棄的行為(不再使用)","Hide details":"隱藏詳情","Hide effect":"隱藏特效","Hide experimental behaviors":"隱藏實驗性行為","Hide experimental extensions":"隱藏實驗性擴展","Hide experimental objects":"隱藏實驗性物件","Hide lifecycle functions (advanced)":"隱藏生命周期函數(高級)","Hide other lifecycle functions (advanced)":"隱藏其他生命周期函數(高級)","Hide the AI assistant?":"隱藏 AI 助手?","Hide the layer":"隱藏圖層","Hide the leaderboard":"隱藏排行榜","Hide the menu bar in the preview window":"在預覽窗口中隱藏菜單欄","Hide this hint?":"隱藏此提示?","High quality":"高質量","Higher is better":"越高越好","Higher is better (max: {formattedScore})":function(a){return["\u8D8A\u9AD8\u8D8A\u597D(\u6700\u5927: ",a("formattedScore"),")"]},"Highlight background color":"突出顯示背景顏色","Highlight text color":"突出顯示文本顏色","Hobbyists and indie devs":"愛好者和獨立開發者","Home page":"主頁","Homepage":"首頁","Horizontal anchor":"水平錨點","Horizontal flip":"水平翻轉","Horror":"恐怖","Hours":"小時","How are you learning game dev?":"你是如何學習游戲開發的?","How are you working on your projects?":"您的項目進展如何?","How many students do you want to create?":"您想創建多少學生?","How to make my game more fun?":"如何讓我的遊戲更有趣?","How would you rate this chapter?":"您會怎麼評價這一章節?","Huge":"巨大","I am learning game development":"我正在學習游戲開發","I am teaching game development":"我正在教授游戲開發","I don’t have a specific deadline":"我沒有具體的截止日期","I have encountered bugs or performance problems":"我遇到了錯誤或性能問題","I trust this project":"我信任此專案","I want to add a leaderboard":"我想新增排行榜","I want to add an explosion when an enemy is destroyed":"我想新增一個敵人被摧毀時的爆炸效果","I want to create a main menu for my game":"我想為我的遊戲創建一個主選單","I want to display the health of my player":"我想顯示我的玩家的生命值","I want to receive the GDevelop Newsletter":"我想收到 GDevelop 新聞通訊","I want to receive weekly stats about my games":"我想收到我的游戲的每周統計數據","I'll do it later":"我稍后再試","I'm building a video game or app":"我正在制作一個視頻游戲或應用程序","I'm learning or teaching game development":"我正在學習或教授游戲開發","I'm struggling to create what I want":"我正在努力創造我想要的東西","I've broken this into steps — let me walk you through it:":"我已經將此事拆分成步驟 - 讓我帶你一起完成:","I've mapped out a plan — here's what I'll do:":"我已經規劃了一個計劃 - 這是我將做的事情:","I've stopped using GDevelop":"我已經停止使用 GDevelop","I've thought this through — here's the plan:":"我已經考量過這些 - 這是計劃:","IDE":"IDE(集成開發環境)","IPA for App Store":"應用商店的 IPA","IPA for testing on registered devices":"用于在注冊設備上進行測試的 IPA","Icon URL":"圖標 URL","Icon and [DEPRECATED] text":"圖示和[過時]文本","Icon only":"僅圖示","Icons":"圖示","Identifier":"標識符","Identifier (text)":"標識符(文本)","Identifier name":"標識符名稱","If activated, players won't be able to log in and claim a score just sent without being already logged in to the game.":"如果激活,玩家在未登錄游戲的情況下將無法登錄并領取剛剛發送的分數。","If checked, player names will always be auto-generated, even if the game sent a custom name. Helpful if you're having a leaderboard where you want full anonymity.":"如果選中,即使游戲發送了自定義名稱,玩家名稱也將始終自動生成。如果您想要完全匿名的排行榜,這會很有幫助。","If no previous condition or action used the specified object(s), the picked instances count will be 0.":"如果之前的條件或操作未使用指定的對象,則拾取的實例計數將為0。","If the parameter is a string or a number, you probably want to use the expressions \"GetArgumentAsString\" or \"GetArgumentAsNumber\", along with the conditions \"Compare two strings\" or \"Compare two numbers\".":"如果參數是字符串或數字,則可能要使用表達式“ 以字符串形式獲取參數”或“ 獲取參數作為數字”,以及條件“比較兩個字符串”或“比較兩個數字”。","If you are in a browser, ensure you close all GDevelop tabs or restart the browser.":"If you are in a browser, ensure you close all GDevelop tabs or restart the browser.","If you are on desktop, please re-install it by downloading the latest version from <0>the website":"If you are on desktop, please re-install it by downloading the latest version from <0>the website","If you close this window while the build is being done, you can see its progress and download the game later by clicking on See All My Builds below.":"如果你在生成過程中關閉此窗口, 可在稍后通過單擊下面的 \"查看所有我的生成\" 來查看其進度并下載游戲。","If you don't have access to it, restart GDevelop. If you still can't access it, please contact us.":"如果您無法訪問,請重新啟動 GDevelop。如果您仍然無法訪問,請與我們聯繫。","If you have a popup blocker interrupting the opening, allow the popups and try a second time to open the project.":"如果你有一個彈出屏蔽器中斷了打開,允許彈出窗口,并嘗試第二次打開項目。","If you skip this step, you can still do it manually later from the leaderboards panel in your Games Dashboard.":"如果您跳過這一步,您仍然可以在游戲儀表板的排行榜面板中手動進行操作。","Ignore":"忽略","Ignore and continue":"忽略並繼續","Image":"圖像","Image resource":"圖像資源","Implementation":"實施","Implementation steps:":"實施步驟:","Implementing in-project monetization":"實現項目內貨幣化","Import":"導入","Import assets":"導入資產","Import extension":"導入擴展","Import images":"導入圖像","Import one or more animations that are available in this Spine file.":"導入此 Spine 文件中可用的一個或多個動畫。","Importing project resources":"導入項目資源","Importing resources outside from the project folder":"從項目文件夾外部導入資源","Improve and publish your Game":"改進并發布您的游戲","In around a year":"一年左右的時間里","In order to purchase a marketing boost, log-in and select a game in your dashboard.":"要購買營銷推廣,請登錄並在儀表板中選擇一款遊戲。","In order to see your objects in the scene, you need to add an action \"Create objects from external layout\" in your events sheet.":"為了在場景中看到你的對象,你需要在事件列表中添加一個動作“從外部布局創建對象”。","In order to use these external events, you still need to add a \"Link\" event in the events sheet of the corresponding scene":"為了使用這些外部事件,您仍然需要在相應場景的事件表中添加一個“Link”事件","In pixels.":"以像素為單位。","In pixels. 0 to ignore.":"以像素為單位。0表示忽略。","In this tutorial you will learn:":"在這個教程中,您將學習:","In-app Tutorials":"應用內教程","In-game obstacles":"游戲中的障礙","Include events from":"從...插入事件","Include store extensions":"包含商店擴展","Included":"包括","Included in this bundle":"包含在這個捆綁包中","Included with GDevelop subscriptions":"包含在 GDevelop 訂閱中","Incompatible with the object":"與對象不兼容","Increase seats":"增加名額","Increase version number to {0}":function(a){return["\u5C07\u7248\u672C\u865F\u589E\u52A0\u5230 ",a("0")]},"Indent Scale in Events Sheet":"事件表中的縮進比例","Inferred type":"推斷類型","Initial text of the variable":"變量的初始文本","Initial text to display":"要顯示的初始文本","Input":"輸入","Insert new...":"插入新的...","Inspect the game structure.":"檢查遊戲結構。","Inspectors":"檢查器","Instagram":"Instagram","Install again":"再次安裝","Install all the assets":"安裝所有資產","Install font":"安裝字體","Install in project":"在項目中安裝","Install the missing assets":"安裝缺失的資產","Installed as an app. No updates available.":"已作為應用程序安裝。沒有可用的更新。","Installing assets...":"正在安裝資產...","Instance":"實例","Instance Variables":"實例變量","Instance properties":"實例屬性","Instance variables":"實例變量","Instance variables overwrite the default values of the variables of the object.":"實例變量覆蓋對象變量的默認值。","Instance variables:":"實例變量:","Instances":"實例","Instances List":"實例列表","Instances editor":"實例編輯器","Instances editor rendering":"實例編輯器渲染","Instances editor.":"實例編輯器。","Instances list":"實例列表","Instant":"即時","Instant Games":"即時游戲","Instant or permanent force":"立即或永久的力","Instead of <0>{0}":function(a){return["\u800C\u4E0D\u662F <0>",a("0"),""]},"Instruction":"指令","Instruction editor":"指令編輯器","Interaction Design":"互動設計","Interactive content":"互動內容","Intermediate":"中級","Intermediate course":"中級課程","Internal Name":"內部名稱","Internal instruction names":"內部指令名稱","Invalid email address":"無效的電子郵件地址","Invalid email address.":"無效的電子郵件地址。","Invalid file":"無效文件","Invalid name":"無效名稱","Invalid parameters in events ({invalidParametersCount})":function(a){return["\u4E8B\u4EF6\u4E2D\u7684\u7121\u6548\u53C3\u6578 (",a("invalidParametersCount"),")"]},"Invert Condition":"反轉條件","Invert condition":"反轉條件","Invitation already accepted":"邀請已被接受","Invitation sent to {lastInvitedEmail}.":function(a){return["\u9080\u8ACB\u5DF2\u767C\u9001\u81F3 ",a("lastInvitedEmail"),"\u3002"]},"Invite":"邀請","Invite a student":"邀請一位學生","Invite a teacher":"邀請一位老師","Invite collaborators":"邀請合作者","Invite students":"邀請學生","Invite teacher":"邀請老師","Inviting a user will provide them admin capabilities over the student accounts, as well as all the subscription perks. Only accounts without an existing subscription can be invited.":"邀請用戶將賦予他們對學生帳戶的管理權限,以及所有的訂閱福利。只有沒有現有訂閱的帳戶才能被邀請。","Is not published on gd.games":"未在 gd.games 發布","Is published on gd.games":"已在 gd.games 發布","Is the average time a player spends in the game.":"Is the average time a player spends in the game.","Is there anything that you struggle with while working on your projects?":"您在做項目時有遇到什么困難嗎?","Isometric":"等軸測","It didn't do enough":"沒有做夠","It didn't work at all":"根本沒有效果","It is already installed/available in the project.":"它已經在項目中安裝/可用。","It is part of behavior <0/> from extension <1/>.":"這是擴展 <0/> 中行為 <1/> 的一部分。","It is part of extension <0/> {0} .":function(a){return["\u9019\u662F\u64F4\u5145\u529F\u80FD <0/> ",a("0")," \u7684\u4E00\u90E8\u5206\u3002"]},"It is part of object <0/> from extension <1/>.":"這是擴展 <1/> 中對象 <0/> 的一部分。","It looks like the build has timed out, please try again.":"看起來構建已超時,請再試一次。","It seems you entered a name with a quote. Variable names should not be quoted.":"看起來你輸入了一個帶引號的名字。變量名不應該帶引號。","It will be downloaded and installed automatically.":"將自動下載並安裝。","It's missing a feature (please specify)":"它缺少一個功能 (請注明)","Italic":"斜體","Itch.io, Poki, CrazyGames...":"Itch.io、Poki、CrazyGames...","JSON resource":"JSON 資源","JavaScript file":"JavaScript 文件","JavaScript files are imported as is (no compilation and not available in JavaScript code block autocompletions). Make sure your extension is used by the game (at least one action/condition used in a scene), otherwise the files won't be imported.":"JavaScript 文件按原樣導入 (無需編譯且在 JavaScript 代碼塊自動完成中不可用)。請確保您的擴展被遊戲使用(場景中至少使用了一個動作/條件),否則這些文件將無法導入。","JavaScript files must be imported by an extension - by choosing it the extension properties. Otherwise, it won't be loaded by the game.":"JavaScript 文件必須由擴展進行導入- 通過選擇其擴展屬性來實現。否則,它將無法被遊戲加載。","Join the discussion":"加入討論","Joystick controls":"操縱桿控制","Json":"Json","Jump forward in time on creation (in seconds)":"在創建時向前跳轉(以秒為單位)","Just now":"現在","Keep centered (best for game content)":"保持居中(最適合遊戲內容)","Keep learning":"繼續學習","Keep ratio":"保持比率","Keep subscription":"保持訂閱","Keep the new project linked to this game":"保持新項目與此遊戲的鏈接","Keep their original location":"保留其原始位置","Keep top-left corner fixed (best for content that can extend)":"將左上角固定(最適合可延伸內容)","Keyboard":"鍵盤","Keyboard Key (deprecated)":"鍵盤鍵(已棄用)","Keyboard Key (text)":"鍵盤密鑰 (文本)","Keyboard Shortcuts":"鍵盤快捷鍵","Keyboard key":"鍵盤鍵","Keyboard key (text)":"鍵盤密鑰 (文本)","Label":"標簽","Label displayed in editor":"編輯器中顯示的名稱","Lack of Graphics & Animation":"缺乏圖形和動畫","Lack of Marketing & Publicity":"缺乏營銷和宣傳","Lack of Music & Sound":"缺乏音樂和聲音","Landscape":"橫向顯示","Language":"語言","Last (after other files)":"最後 (在其它文件之後)","Last edited":"上次編輯","Last edited:":"上次編輯:","Last modified":"上次修改","Last name":"姓氏","Last run collected on {0} frames.":function(a){return["\u5728 ",a("0")," \u5E40\u4E0A\u6536\u96C6\u7684\u6700\u540E\u4E00\u6B21\u904B\u884C\u3002"]},"Latest save":"最新保存","Launch network preview over WiFi/LAN":"通過 WiFi/LAN 啟動網絡預覽","Launch new preview":"啟動新預覽","Launch preview in...":"在...中啟動預覽……","Launch preview with debugger and profiler":"使用調試器(debugger)和配置文件啟動預覽","Launch preview with diagnostic report":"啟動帶有診斷報告的預覽","Layer":"圖層","Layer (text)":"圖層(文本)","Layer effect (text)":"圖層特效 (文本)","Layer effect name":"圖層效果名稱","Layer effect property (text)":"圖層效果屬性 (文本)","Layer effect property name":"圖層效果屬性名稱","Layer properties":"圖層屬性","Layer where instances are added by default":"默認情況下添加實例的圖層","Layers":"圖層","Layers list":"圖層列表","Layers:":"圖層:","Layouts":"布局(layouts)","Leaderboard":"排行榜","Leaderboard (text)":"排行榜 (文本)","Leaderboard appearance":"排行榜外觀","Leaderboard name":"排行榜名稱","Leaderboard options":"排行榜選項","Leaderboards":"排行榜","Leaderboards help retain your players":"排行榜幫助保留你的玩家","Learn":"學習","Learn about revenue on gd.games":"了解 gd.games 上的收入","Learn all the game-building mechanics of GDevelop":"學習GDevelop的所有游戲構建機制","Learn by dissecting ready-made games":"通過拆解現成遊戲來學習","Learn how to make <0>multiplayer games with GDevelop.":"學習如何使用 GDevelop 製作<0>多人遊戲。","Learn how to use <0>leaderboards on GDevelop.":"學習如何在 GDevelop 上使用<0>排行榜。","Learn more":"了解更多","Learn more about Instant Games publication":"了解更多關于即時游戲發布的信息","Learn more about manual builds":"了解有關手動構建的更多信息","Learn more about publishing to platforms":"了解有關發布到平臺的更多信息","Learn section":"學習部分","Learn the fundamental principles of GDevelop":"學習GDevelop 的基本原理","Leave":"離開","Leave and lose all changes":"離開並丟失所有更改","Leave the customization?":"要離開自訂嗎?","Leave the tutorial":"離開教程","Left":"左","Left (primary)":"左 (主要)","Left bound":"左邊界","Left bound should be smaller than right bound":"左邊界應小於右邊界","Left face":"左面","Left margin":"左邊距","Length":"長度","Less than a month":"不到一個月","Let me lay out the steps:":"讓我列出這些步驟:","Let the user select":"讓用戶選擇","Let's finish your game, shall we?":"讓我們完成你的遊戲,好嗎?","Let's go":"讓我們來吧","Level {0}":function(a){return["\u7B49\u7D1A ",a("0")]},"License":"許可證","Licensing":"許可協議","Lifecycle functions (advanced)":"生命周期函數(高級)","Lifecycle functions only included when extension used":"生命周期函數僅當使用擴展時才會被包含","Lifecycle methods":"生命周期方法","Lifetime access":"終生訪問","Light (colored)":"淺色(著色)","Light (plain)":"淺色(平原)","Light object automatically put in lighting layer":"光照物件自動放入照明圖層","Lighting settings":"照明設置","Limit cannot be empty, uncheck or fill a value between {extremeAllowedScoreMin} and {extremeAllowedScoreMax}.":function(a){return["\u6975\u9650\u4E0D\u80FD\u70BA\u7A7A\uFF0C\u53D6\u6D88\u9078\u4E2D\u6216\u586B\u5BEB\u5728 ",a("extremeAllowedScoreMin")," \u548C ",a("extremeAllowedScoreMax")," \u4E4B\u9593\u7684\u503C\u3002"]},"Limit scores":"限制分數","Limited time offer:":"限時優惠:","Line":"線","Line color":"線條顏色","Line height":"行高","Linear (antialiased rendering, good for most games)":"線性 (抗鋸齒渲染, 適用于大多數游戲)","Lines length":"線條長度","Lines thickness":"線條厚度","Links can't be used outside of a scene.":"不能在場景外使用鏈接。","Linux (AppImage)":"Linux (AppImage)","Live Ops & Analytics":"實時運營與分析","Live preview (apply changes to the running preview)":"實時預覽(應用更改到正在運行的預覽)","Load autosave":"加載自動保存","Load local lesson":"載入本地課程","Load more":"加載更多","Load more...":"加載更多...","Loading":"正在加載","Loading Position":"加載位置","Loading course...":"正在加載課程...","Loading preview...":"正在加載預覽...","Loading screen":"加載屏幕","Loading the game link...":"正在加載遊戲鏈接……","Loading the game...":"正在加載您的游戲……","Loading your profile...":"正在加載您的個人資料...","Loading...":"正在加載……","Lobby":"大廳","Lobby configuration":"大廳配置","Local Variable":"局部變數","Local variables":"局部變量","Locate file":"定位文件","Location":"位置","Lock position/angle in the editor":"鎖定編輯器中的位置/角度","Locked":"已鎖定","Log in":"登錄","Log in to your account":"登錄到您的帳戶","Log in to your account to activate your purchase!":"登錄您的帳戶以啟用您的購買!","Log-in to purchase these credits":"登錄以購買這些積分","Log-in to purchase this course":"登錄以購買這個課程","Log-in to purchase this item":"登錄以購買此項目","Login":"登錄","Login now":"立即登錄","Login with GDevelop":"使用 GDevelop 登錄","Logo and progress fade in delay (in seconds)":"標志和進度延遲淡入淡出(秒)","Logo and progress fade in duration (in seconds)":"標志和進度淡入持續時間(秒)","Logout":"登出","Long":"長","Long description":"詳細描述","Long press for more events":"長按可查看更多事件","Long press for quick menu":"長按可獲取快捷菜單","Looks like your project isn't there!{0}Your project must be stored on your computer.":function(a){return["\u60A8\u7684\u9805\u76EE\u4F3C\u4E4E\u4E0D\u5728\u90A3\u88E1\uFF01",a("0"),"\u60A8\u7684\u9805\u76EE\u5FC5\u9808\u5132\u5B58\u5728\u60A8\u7684\u8A08\u7B97\u6A5F\u4E0A\u3002"]},"Loop":"循環","Loop Counter Variable":"迴圈計數器變數","Low quality":"低質量","Lower is better":"下方較好","Lower is better (min: {formattedScore})":function(a){return["\u8D8A\u4F4E\u8D8A\u597D(\u6700\u5C0F\uFF1A ",a("formattedScore"),")"]},"Make a character move like in a retro Pokemon game.":"讓角色像復古的Pokémon遊戲一樣移動。","Make a knight jump and run in this platformer game.":"在這個平台遊戲中讓騎士跳躍和奔跑。","Make a knight jump and run.":"讓騎士跳躍並奔跑。","Make a minimal 3D shooter":"製作一個最簡單的 3D 射擊遊戲","Make an entire game":"製作整個遊戲","Make asynchronous":"進行異步操作","Make complete games step by step":"逐步完成完整的游戲","Make it a Else for the previous event":"為之前的事件製作 ELSE","Make private":"私密設置","Make public":"公開設置","Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.":"Make sure to set up a light in the effects of the layer or choose \"No lighting effect\" - otherwise the object will appear black.","Make sure to verify all your events creating objects, and optionally add an action to set the Z order back to 0 if it's important for your game. Do you want to continue (recommended)?":"確保驗證所有創建對象的事件,如果這對您的游戲很重要,則可以選擇添加一個操作將 Z 順序設置回 0。是否繼續(推薦)?","Make sure to verify your events and variables that may rely on string variables defaulting to \"0\". Do you want to continue (recommended)?":"請確保驗證您的事件和變數,這些變數可能依賴於預設為\"0\"的字串變數。您想要繼續嗎(建議)?","Make sure you create your GitHub account, star the repository called 4ian/GDevelop, enter your username here and try again.":"確保您創建了您的GitHub帳戶,在名為4ian/GDevelopup的存儲庫中添加星號,在此處輸入您的用戶名,然后重試。","Make sure you follow the GDevelop account and try again.":"確保您關注 GDevelop 帳戶并重試。","Make sure you have a proper internet connection or try again later.":"確保您有正確的互聯網連接或稍后重試。","Make sure you star the repository called 4ian/GDevelop with your GitHub user and try again.":"請確保將名為4ian/GDevelopup的存儲庫與您的GitHub用戶一起加入,然后重試。","Make sure you subscribed to the GDevelop channel and try again.":"確保您已訂閱 GDevelop 頻道並重試。","Make sure you're online, have a proper internet connection and try again. If you download and use GDevelop desktop application, you can also run previews without any internet connection.":"請確保您在線,有適當的互聯網連接,然后重試。 如果您下載并使用 GDevelop 桌面應用程序,您也可以在沒有網絡連接的情況下運行預覽。","Make sure your username is correct, follow the GDevelop account and try again.":"確保您的用戶名正確,關注 GDevelop 帳戶并重試。","Make sure your username is correct, subscribe to the GDevelop channel and try again.":"確保您的用戶名正確,訂閱 GDevelop 頻道並重試。","Make synchronous":"同步化","Make the leaderboard public":"公開排行榜","Make the purpose of the property easy to understand":"使該屬性的目的易于了解","Make your game title":"製作您的遊戲標題","Make your game visible to the GDevelop community and to the world with <0>Marketing Boosts.":"透過 <0>營銷推廣 讓您的遊戲對 GDevelop 社區和全世界可見。","Make your game visible to the GDevelop community and to the world with Marketing Boosts.":"讓您的遊戲通過營銷推廣在 GDevelop 社區和全世界可見。","Make your game visible to the GDevelop community and to the world with Marketing Boosts. <0>Read more about how they increase your views.":"讓您的遊戲通過營銷推廣在 GDevelop 社區和全世界可見。 <0>了解更多 關於它們如何增加您的瀏覽量。","Making \"{objectOrGroupName}\" global would conflict with the following scenes that have a group or an object with the same name:{0}Continue only if you know what you're doing.":function(a){return["\u4F7F\u201C",a("objectOrGroupName"),"\u201D\u5168\u5C40\u5316\u5C07\u8207\u4E0B\u5217\u5177\u6709\u76F8\u540C\u540D\u7A31\u7684\u7D44\u6216\u5C0D\u8C61\u7684\u5834\u666F\u6C96\u7A81: ",a("0"),"\u53EA\u6709\u5728\u60A8\u77E5\u9053\u6B63\u5728\u505A\u4EC0\u4E48\u7684\u60C5\u6CC1\u4E0B\u624D\u7E7C\u7E8C\u3002"]},"Manage":"管理","Manage game online":"在線管理遊戲","Manage leaderboards":"管理排行榜","Manage payments":"管理付款","Manage seats":"管理座位","Manage subscription":"管理訂閱","Manual build":"手動構建","Mark all as read":"全部標記為已讀","Mark all as solved":"全部標記為已解決","Mark as read":"標記為已讀","Mark as unread":"標記為未讀","Mark this function as deprecated to discourage its use.":"將此功能標記為過時以阻止其使用。","Marketing":"市場營銷","Marketing campaigns":"營銷活動","Match case":"匹配大小寫","Maximum 2D drawing distance":"最大 2D 繪圖距離","Maximum FPS (0 for unlimited)":"最大 FPS (0,無限制)","Maximum Fps is too low":"最大幀率太低","Maximum emitter force applied on particles":"施加在粒子上的最大發射力","Maximum number of particles displayed":"顯示的最大粒子數","Maximum number of players per lobby":"每個大廳的最大玩家數量","Maximum score":"最大分數","Me":"我","Mean played time":"平均游戲時間","Measurement unit":"測量單位","Medium":"中","Medium quality":"中等質量","Memory Tracker Registry":"記憶追蹤器登記簿","Menu":"菜單","Mesh shapes are only supported for 3D model objects.":"只支援 3D 模型物件的網格形狀。","Message":"Message","Middle (Auxiliary button, usually the wheel button)":"中鍵 (輔助按鈕,通常是輪鍵)","Minimize":"最小化","Minimum FPS":"最小FPS","Minimum Fps is too low":"最小幀太低","Minimum duration of the screen (in seconds)":"屏幕最小持續時間(秒)","Minimum emitter force applied on particles":"施加在粒子上的最小發射力","Minimum number of players to start the lobby":"大廳的最低玩家數量","Minimum score":"最小分數","Minutes":"分","Missing actions/conditions/expressions ( {missingInstructionsCount})":function(a){return["\u7F3A\u5C11\u52D5\u4F5C/\u689D\u4EF6/\u8868\u9054\u5F0F ( ",a("missingInstructionsCount"),")"]},"Missing behaviors for object \"{objectName}\"":function(a){return["\u5C0D\u8C61 \u201C",a("objectName"),"\u201D \u7F3A\u5C11\u884C\u70BA"]},"Missing instructions":"缺少指令","Missing objects":"缺失的物件","Missing scene variables":"缺少場景變量","Missing some contributions? If you are the author, create a Pull Request on the corresponding GitHub repository after adding your username in the authors of the example or the extension - or directly ask the original author to add your username.":"缺少一些貢獻? 如果你是作者, 在相應的 GitHub 倉庫添加您的用戶名或擴展的作者后創建合并請求 - 或直接要求原作者添加您的用戶名。","Missing texture atlas name in the Spine file.":"Spine 文件中缺少紋理圖集名稱。","Missing texture for an atlas in the Spine file.":"Spine 文件中缺少圖集的紋理。","Missing variables for object \"{objectName}\"":function(a){return["\u5C0D\u8C61 \u201C",a("objectName"),"\u201D \u7F3A\u5C11\u8B8A\u91CF"]},"Mixed":"混合","Mixed values":"混合值","Mobile":"移動設備","Mobile portrait":"移動豎屏模式","Modifying":"正在修改","Month":"月","Monthly, {0}":function(a){return["\u6BCF\u6708\uFF0C",a("0")]},"Monthly, {0} per seat":function(a){return["\u6BCF\u6708\uFF0C",a("0")," \u6BCF\u500B\u540D\u984D"]},"More details (optional)":"更多細節 (可選)","More than 6 months":"超過 6 個月","Most browsers will require the user to have interacted with your game before allowing any video to play. Make sure that the player click/touch the screen at the beginning of the game before starting any video.":"大多數瀏覽器將要求用戶在允許任何視頻播放之前與您的游戲互動。請確保玩家在游戲開始前點擊/觸摸屏幕。","Most monitors have a refresh rate of 60 FPS. Setting a maximum number of FPS under 60 will force the game to skip frames, and the real number of FPS will be way below 60, making the game laggy and impacting the gameplay negatively. Consider putting 60 or more for the maximum number or FPS, or disable it by setting 0.":"大多數顯示屏都有60幀的刷新率。把最高幀數限制在60幀一下會造成閃幀,跳幀,產生負面影響,請讓最高幀數大雨60幀或不限制","Most sessions (all time)":"大多數會話(所有時間)","Most sessions (past 7 days)":"大多數會議(過去 7 天)","Mouse button":"鼠標按鍵","Mouse button (deprecated)":"鼠標按鈕(已棄用)","Mouse button (text)":"鼠標按鈕 (文本)","Move Events into a Group":"將事件移動到組","Move down":"向下移動","Move events into a new group":"將事件移動到新組中","Move instances":"移動實例","Move like in retro Pokemon games.":"像在復古的寶可夢遊戲中移動。","Move objects":"移動對象","Move objects from layer {0} to:":function(a){return["\u5C07\u5C0D\u8C61\u5F9E\u5716\u5C64 ",a("0")," \u79FB\u52D5\u5230\uFF1A"]},"Move to bottom":"移動到底部","Move to folder":"移動到文件夾","Move to position {index}":function(a){return["\u79FB\u52D5\u5230\u4F4D\u7F6E ",a("index")]},"Move to top":"移動到頂部","Move up":"向上移動","Move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5C07 ",a("existingInstanceCount")," <0>",a("object_name")," \u5BE6\u4F8B\u79FB\u52D5\u5230 ",a("0"),"\uFF08\u5716\u5C64\uFF1A",a("1"),"\uFF09\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u3002"]},"Movement":"移動","Multiline":"多行","Multiline text":"多行文本","Multiplayer":"多人游戲","Multiplayer lobbies":"多人遊戲大廳","Multiple files, saved in folder next to the main file":"多個文件,保存在主文件夾旁邊的文件夾","Multiple frames":"多幀","Multiple states":"多個狀態","Multiply scores with collectibles.":"用收集品來乘以分數。","Music":"音樂","Musics will only be played if the user has interacted with the game before (by clicking/touching it or pressing a key on the keyboard). This is due to browser limitations. Make sure to have the user interact with the game before using this action.":"只有當用戶與游戲交互過(通過點擊/觸摸或按下一個鍵盤按鍵),才能播放音樂。這是瀏覽器的限制。請確保使用該動作前,先讓用戶與游戲進行交互。","My Profile":"我的個人資料","My manual save":"我的手動保存","My profile":"我的個人資料","MyObject":"我的物件","NPM":"NPM","Name":"名稱","Name (optional)":"名稱 (可選)","Name displayed in editor":"編輯器中顯示的名稱","Name of the external layout":"外部布局名稱","Name version":"名稱版本","Narrative & Writing":"敘事與寫作","Near plane distance":"近平面距離","Nearest (no antialiasing, good for pixel perfect games)":"最近 (無抗鋸齒, 適合高像素游戲)","Need latest GDevelop version":"需要最新的 GDevelop 版本","Need more?":"需要更多嗎?","Network":"網絡","Never":"從不","Never preload":"永遠不預加載","Never unload":"永遠不卸載","Never unload (default)":"永遠不卸載(默認)","New":"新的","New 3D editor":"新 3D 編輯器","New Apple Certificate/Profile":"新的 Apple 證書/配置文件","New Auth Key (App Store upload)":"新的身份驗證密鑰 (應用商店上傳)","New Event Below":"在下方添加新事件","New Object dialog":"新建對象對話框","New chat":"新的對話","New extension name":"新擴展名稱","New group name":"新組名","New interactive services for clients":"為客戶提供新的交互服務","New lesson every month with the Education subscription":"每月擁有新課程,適用於教育訂閱","New object":"新建對象","New object from scratch":"從零開始創建新對象","New resource":"新資源","New variant":"New variant","Next":"下一個","Next actions (and sub-events) will wait for this action to be finished before running.":"下一個動作(和子事件)將等待此動作完成后才能運行。","Next page":"下一頁","Next: Game logo":"下一步:遊戲標誌","Next: Tweak Gameplay":"下一步:調整遊戲玩法","No":"否","No GDevelop user with this email can be found.":"找不到具有該電子郵件地址的 GDevelop 用戶。","No access to project save":"無法存取專案儲存","No atlas image configured.":"未配置圖集圖像。","No behavior":"No behavior","No bio defined.":"沒有定義bio。","No changes to the game size":"游戲大小沒有變化","No children":"沒有子項","No cycle":"無循環","No data to show yet. Share your game creator profile with more people to get more players!":"尚無數據可顯示。與更多人分享您的遊戲創造者資料以吸引更多玩家!","No entries":"沒有參賽作品","No experience at all":"完全沒有經驗","No forum account was found with email {0}. Make sure you have created an account on the GDevelop forum with this email.":function(a){return["\u672A\u627E\u5230\u4F7F\u7528\u96FB\u5B50\u90F5\u4EF6 ",a("0")," \u7684\u8AD6\u58C7\u5E33\u865F\u3002\u8ACB\u78BA\u4FDD\u60A8\u5728 GDevelop \u8AD6\u58C7\u4E0A\u4F7F\u7528\u6B64\u96FB\u5B50\u90F5\u4EF6\u5275\u5EFA\u4E86\u5E33\u865F\u3002"]},"No game matching your search.":"沒有匹配您搜索的游戲。","No information about available updates.":"沒有可用更新的信息。","No inspector, choose another element in the list or toggle the raw data view.":"沒有檢查器, 請在列表中選擇另一個元素或切換原始數據視圖。","No issues found in your project.":"您的專案中未發現任何問題。","No leaderboard chosen":"沒有選擇排行榜","No leaderboards":"沒有排行榜","No lighting effect":"無燈光效果","No link defined.":"未定義鏈接。","No matches found for \"{0}\".":function(a){return["\u672A\u627E\u5230 \"",a("0"),"\" \u7684\u5339\u914D\u9805\u3002"]},"No new animation":"沒有新動畫","No options":"沒有選項","No preview running. Run a preview and you will be able to inspect it with the debugger":"沒有預覽正在運行。運行預覽,您將能夠使用調試器檢查它","No project save available":"沒有可用的專案儲存","No project save is available for this request message.":"此請求訊息沒有所需的專案儲存。","No project to open":"沒有項目可打開","No projects found for this game. Open manually a local project to have it added to the game dashboard.":"未找到此遊戲的專案。請手動打開本地專案以將其添加至遊戲儀表板中。","No projects yet.":"尚無項目。","No recent project":"沒有最近的項目","No result":"無結果","No results":"沒有結果","No results returned for your search. Try something else or typing at least 2 characters.":"沒有返回搜索結果。請嘗試其他內容或輸入至少 2 個字符。","No results returned for your search. Try something else!":"您的搜索未返回任何結果。請嘗試其他內容!","No results returned for your search. Try something else, browse the categories or create your object from scratch!":"沒有返回搜索結果。嘗試其他方法,瀏覽類別或從零開始創建您的對象!","No shortcut":"無快捷方式","No similar asset was found.":"未發現類似資產。","No thumbnail":"沒有縮略圖","No thumbnail for your game, you can update it in your Game Dashboard!":"您的遊戲沒有縮略圖,您可以在遊戲儀表板中更新它!","No update available. You're using the latest version!":"沒有可用更新。您正在使用最新版本!","No uses left":"沒有剩餘使用次數","No variable":"No variable","No warning":"無警告","No, close project":"不,關閉項目","None":"無","Not applicable":"不適用","Not applicable to this plan":"不適用於此計劃","Not compatible":"不兼容","Not installed as an app. No updates available.":"未作為應用程序安裝。沒有可用的更新。","Not now, thanks!":"不是現在,謝謝!","Not on mobile":"不在移動設備上","Not published":"未發布","Not set":"未設置","Not stored":"未存儲","Not sure how many credits you need? Check <0>this guide to help you decide.":"不確定您需要多少積分?請檢查<0>本指南,以幫助您決定。","Not visible":"不可見","Note that the distinction between what is a mobile device and what is not is becoming blurry (with devices like iPad pro and other \"desktop-class\" tablets). If you use this for mobile controls, prefer to check if the device has touchscreen support.":"請注意,什么是移動設備與什么不是移動設備之間的區別變得越來越模糊(使用iPad Pro和其他“臺式機”平板電腦這樣的設備)。如果將此用于移動控件,則最好檢查設備是否支持觸摸屏。","Note that this option will only have an effect when saving your project on your computer's filesystem from the desktop app. Read about [using Git or GitHub with projects in multiple files](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/).":"請注意,只有當從桌面應用程序將項目保存到計算機的文件系統上時,此選項才會生效。閱讀[在多個文件中使用Git或GitHub項目](https://wiki.gdevelop.io/gdevelop5/tutorials/using-github-desktop/)。","Note: write _PARAMx_ for parameters, e.g: Flash _PARAM1_ for 5 seconds":"注意:寫入 _PARAMx_ 參數,例如 Flash _PARAM1_ 5秒","Nothing corresponding to your search":"沒有與你的搜尋相符的內容","Nothing corresponding to your search. Try browsing the list instead.":"沒有找到您要搜索的內容。您可以嘗試先瀏覽下列表。","Nothing to configure for this behavior.":"此行為無需配置。","Nothing to configure for this effect.":"此效果無需配置。","Notifications":"通知","Number":"數字","Number between 0 and 1":"0到1之間的數字","Number from a list of options (number)":"選項列表中的數字 (數字)","Number of entries to display":"要顯示的條目數","Number of particles in tank (-1 for infinite)":"坦克中的粒子數 (-1表示無限)","Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.":"Number of people who launched the game. Viewers are considered players when they stayed at least 60 seconds including loading screens.","Number of seats":"座位數","Number of students":"學生人數","OK":"確定","OWNED":"擁有","Object":"對象/物體","Object Configuration":"對象配置","Object Groups":"對象組","Object Name":"對象名稱","Object Variables":"物件變量","Object animation (text)":"對象動畫 (文本)","Object animation name":"對象動畫名稱","Object editor":"對象編輯器","Object effect (text)":"對象效果 (文本)","Object effect name":"對象效果名稱","Object effect property (text)":"對象效果屬性 (文本)","Object effect property name":"對象效果屬性名稱","Object filters":"對象過濾器","Object group":"對象組","Object group properties":"物件群組屬性","Object groups":"對象組","Object groups list":"對象組列表","Object name":"對象名稱","Object on which this behavior can be used":"此行為可用的對象","Object point (text)":"對象點(文本)","Object point name":"對象點名稱","Object properties":"物件屬性","Object skin name":"對象皮膚名稱","Object type":"對象類型","Object variable":"對象變量","Object's children":"對象的子項","Object's children groups":"對象的子項組","Object's groups":"對象的組","Objects":"對象","Objects and characters":"對象和角色","Objects created using events on this layer will be given a \"Z order\" of {0}, so that they appear in front of all objects of this layer. You can change this using the action to change an object Z order, after using an action to create it.":function(a){return["\u4F7F\u7528\u8A72\u5C64\u4E0A\u7684\u4E8B\u4EF6\u5275\u5EFA\u7684\u5C0D\u8C61\u5C07\u88AB\u8CE6\u4E88 ",a("0")," \u7684\u201CZ \u9806\u5E8F\u201D\uFF0C\u4EE5\u4FBF\u5B83\u5011\u51FA\u73FE\u5728\u8A72\u5C64\u6240\u6709\u5C0D\u8C61\u7684\u524D\u9762\u3002\u5728\u4F7F\u7528\u52D5\u4F5C\u5275\u5EFA\u5C0D\u8C61\u540E\uFF0C\u60A8\u53EF\u4EE5\u4F7F\u7528\u66F4\u6539\u5C0D\u8C61 Z \u9806\u5E8F\u7684\u52D5\u4F5C\u4F86\u66F4\u6539\u6B64\u8A2D\u7F6E\u3002"]},"Objects groups":"對象組","Objects inside custom objects can't contain the following behaviors:":"自訂物件內部的物件不能包含以下行為:","Objects list":"對象列表","Objects on {0}":function(a){return[a("0")," \u4E0A\u7684\u5C0D\u8C61"]},"Objects or groups being directly referenced in the events: {0}":function(a){return["\u4E8B\u4EF6\u4E2D\u76F4\u63A5\u5F15\u7528\u7684\u5C0D\u8C61\u6216\u7D44: ",a("0")]},"Objects used with wrong actions or conditions":"與錯誤行為或條件一起使用的物件","Official Game Dev courses":"官方遊戲開發課程","Oh no! Your subscription from the redemption code has expired. You can renew it by redeeming a new code or getting a new subscription.":"哦不!您通過兌換碼訂閱已過期。您可以通過兌換新代碼或獲取新訂閱來續訂。","Ok":"確定","Ok, don't show me this again":"好的,不要再顯示這個了","Old, legacy upload key (only if you used to publish your game as an APK and already activated Play App Signing)":"舊的傳統上傳密鑰(僅當您曾將游戲發布為APK并已激活Play App簽名時)","Omit":"省略","On Itch and/or Newgrounds":"在 Itch 和/或 Newgrounds","On Poki and/or CrazyGames":"在 Poki 和/或 CrazyGames","On Steam and/or Epic Games":"在 Steam 和/或 Epic Games","On game page only":"僅在游戲頁面上","On my own":"獨自一人","Once removed, you'll need to generate a new certificate. Provisioning profiles will also be removed.":"刪除后,您需要生成新證書。配置文件也將被刪除。","Once you're done, come back to GDevelop and the assets will be added to your account automatically.":"完成后,返回GDevelop,資產將自動添加到您的帳戶中。","Once you're done, come back to GDevelop and the bundle will be added to your account automatically.":"完成後,返回 GDevelop,捆綁包將自動添加到您的帳戶。","Once you're done, come back to GDevelop and the credits will be added to your account automatically.":"完成后,返回 GDevelop,積分將自動添加到您的帳戶中。","Once you're done, come back to GDevelop and the game template will be added to your account automatically.":"完成后,返回 GDevelop,游戲模板將自動添加到您的帳戶中。","Once you're done, come back to GDevelop and your account will be upgraded automatically, unlocking the extra exports and online services.":"一旦完成,返回 GDevelop,您的帳戶將自動升級,解鎖額外的導出和在線服務。","Once you're done, start adding some functions to the behavior. Then, test the behavior by adding it to an object in a scene.":"完成后,開始向行為添加一些功能。然后,通過將其添加到場景中的對象來測試行為。","Once you're done, you will receive an email confirmation so that you can link the bundle to your account.":"完成後,您將收到一封電子郵件確認,以便將此套件鏈接到您的帳戶。","One project at a time — Upgrade for more":"一次一個專案 - 升級以獲得更多","One-click packaging":"一鍵打包","Only PNG, JPEG and WEBP files are supported.":"僅支持 PNG、JPEG 和 WEBP 文件。","Only best entry":"僅最佳參賽作品","Only cloud projects can be displayed here. If the user has created local projects, they need to be saved as cloud projects to be visible.":"此處只能顯示云項目。如果用戶創建了本地項目,則需要將其保存為云項目才能可見。","Only player's best entries are displayed.":"只顯示玩家的最佳參賽作品。","Oops! Looks like this game has no logo set up, you can continue to the next step.":"哎呀!看來這個遊戲沒有設定標誌,你可以繼續下一步。","Opacity":"透明度","Opacity (0 - 255)":"不透明度 (0-255)","Open":"開啟","Open About to download and install it.":"打開「關於」以下載並安裝。","Open Apple Developer":"打開蘋果開發者","Open Debugger":"打開調試器","Open Game dashboard":"打開遊戲儀表板","Open Instances List Panel":"打開實例列表面板","Open Layers Panel":"打開圖層面板","Open My Profile":"打開我的個人資料","Open Object Groups Panel":"打開對象組面板","Open Objects Panel":"打開對象面板","Open Properties Panel":"打開屬性面板","Open Recent":"打開最近的","Open a new project? Any changes that have not been saved will be lost.":"打開新項目?任何尚未保存的更改都將丟失。","Open a project":"打開一個項目","Open all tasks":"打開所有任務","Open another chat?":"要開啟另一個聊天嗎?","Open build link":"打開構建鏈接","Open command palette":"打開命令面板","Open course":"打開課程","Open events sheet":"打開事件表","Open exam":"打開考試","Open extension settings":"打開擴展設置","Open extension...":"打開擴展...","Open external events...":"打開外部事件(external events)...","Open external layout...":"打開外部布局(external layout)...","Open file":"打開文件","Open folder":"打開文件夾","Open from computer with GDevelop desktop app":"從電腦使用 GDevelop 桌面應用程式打開","Open game for player feedback":"開放游戲征求玩家反饋","Open in Store":"在商店中打開","Open in a larger editor":"在較大的編輯器中打開","Open in editor":"在編輯器中打開","Open layer editor":"打開圖層編輯器","Open lesson":"打開課程","Open memory tracker registry":"打開記憶追蹤器登記簿","Open more settings":"打開更多設置","Open project":"打開項目","Open project icons":"打開項目圖標","Open project manager":"打開項目管理器","Open project properties":"打開項目屬性(properties)","Open project resources":"打開項目資源","Open quick customization":"打開快速自訂","Open recent project...":"打開最近的項目...","Open report":"打開報告","Open resource in browser":"在瀏覽器中打開資源","Open scene editor":"打開場景編輯器","Open scene events":"打開場景事件","Open scene properties":"打開場景屬性(Properties)","Open scene variables":"打開場景變量","Open scene...":"打開場景...","Open settings":"打開設置","Open task":"Open task","Open template":"打開模板","Open the console":"打開控制臺","Open the exported game folder":"打開導出的游戲文件夾","Open the performance profiler":"打開性能分析工具","Open the project":"打開項目","Open the project associated with this AI request to restore to this state.":"打開與此 AI 請求相關的專案以還原至此狀態。","Open the project folder":"打開項目文件夾","Open the properties panel":"打開“屬性”面板","Open version":"打開版本","Open version history":"打開版本歷史記錄","Open visual editor":"打開可視化編輯器","Open visual editor for the object":"打開對象的可視化編輯器","Open...":"打開...","Opening latest save...":"正在打開最新保存...","Opening older version...":"正在打開舊版本...","Opening portal":"打開門戶網站","Operation not allowed":"不允許操作","Operator":"運算符(Operator)","Optimize for Pixel Art":"像素藝術優化","Optional animation name":"可選動畫名稱","Optional. Enter a full URL (starting with https://) to a help page. A help icon will appear next to the action/condition/expression title in the editor, allowing users to quickly access documentation.":"可選。輸入完整的URL(以https://開頭)指向幫助頁面。幫助圖示將出現在編輯器中動作/條件/表達式標題的旁邊,讓用戶能快速訪問文檔。","Optionally, explain the purpose of the property in more details":"還可以更詳細地解釋屬性的用途","Options":"選項","Or flash this QR code:":"或者刷這個二維碼:","Or start typing...":"Or start typing...","Ordering":"排序","Orthographic camera":"正交相機","Other":"其他","Other actions":"更多操作","Other conditions":"更多條件","Other lifecycle methods":"其他生命周期方法 ","Other reason":"Other reason","Other reason (please specify)":"其他原因 (請注明)","Outdated extension":"過時的擴展","Outline":"輪廓線","Outline color":"輪廓顏色","Outline opacity (0-255)":"輪廓不透明度 (0-255)","Outline size (in pixels)":"輪廓尺寸 (以像素為單位)","Overriding the ID may have unwanted consequences, such as blocking the ability to connect to any peer. Do not use this feature unless you really know what you are doing.":"覆蓋 ID 可能會產生不良后果,例如阻止連接到任何對等點的能力。除非您真的知道自己在做什么,否則不要使用此功能。","Overwrite":"覆蓋","Owned":"擁有","Owned by another scene":"屬于另一個場景","Owner":"所有者","Owners":"所有者","P2P is merely a peer-to-peer networking solution. It only handles the connection to another player, and the exchange of messages. Higher-level tasks, such as synchronizing the game state, are left to by implemented by you. Use the THNK Framework if you seek an easy, performant and flexible higher-level solution.":"P2P 只是一種點對點網絡解決方案。它只處理與另一個玩家的連接以及消息交換。更高級別的任務,例如同步游戲狀態,則由您來實現。如果您尋求簡單、高性能且靈活的高級解決方案,請使用 THNK 框架。","Pack sounds":"打包聲音","Pack type":"包類型","Package game files":"打包游戲文件","Package name (for iOS and Android)":"軟件包名稱 (適用于iOS和Android)","Package the game for iOS, using your Apple Developer account.":"使用您的 Apple 開發者帳戶將游戲打包為 iOS 版。","Packaging":"打包","Packaging your game for Android will create an APK file that can be installed on Android phones or an Android App Bundle that can be published to Google Play.":"打包您的 Android 游戲將創建一個 APK 文件,可以安裝在 Android 手機上,或者可以發布到 Google Play 的Android 應用程序包。","Packaging...":"正在打包...","Paint a Level with Tiles":"使用磚塊畫面繪製一個關卡","Panel sprite":"面板精靈","Parameter #{0}":function(a){return["\u53C3\u6578 #",a("0")]},"Parameter name":"參數名稱","Parameters":"參數","Parameters allow function users to give data.":"參數允許函數使用者提供數據。","Parameters can't have children.":"參數不能有子項。","Particle end size (in percents)":"粒子末端大小 (以百分比為單位)","Particle maximum lifetime (in seconds)":"粒子最長壽命 (以秒為單位)","Particle maximum rotation speed (degrees/second)":"粒子最大旋轉速度 (度/秒)","Particle minimum lifetime (in seconds)":"粒子最短壽命 (以秒為單位)","Particle minimum rotation speed (degrees/second)":"粒子最小旋轉速度 (度/秒)","Particle start size (in percents)":"粒子起始大小 (以百分比為單位)","Particle type":"粒子類型","Particles end color":"粒子末端顏色","Particles start color":"粒子起始顏色","Particles start height":"粒子起始高度","Particles start width":"粒子起始寬度","Password":"密碼","Password cannot be empty":"密碼不能為空","Paste":"粘貼","Paste action(s)":"粘貼動作(s)","Paste and Match Style":"粘貼和匹配樣式","Paste condition(s)":"粘貼條件 (s)","Paste {clipboardObjectName}":function(a){return["\u7C98\u8CBC ",a("clipboardObjectName")]},"Paste {clipboardObjectName} as a Global Object":function(a){return["\u5C07 ",a("clipboardObjectName")," \u7C98\u8CBC\u70BA\u5168\u5C40\u5C0D\u8C61"]},"Paste {clipboardObjectName} as a Global Object inside folder":function(a){return["\u5C07 ",a("clipboardObjectName")," \u4F5C\u70BA\u5168\u5C40\u5C0D\u8C61\u7C98\u8CBC\u5230\u6587\u4EF6\u593E\u5167"]},"Paste {clipboardObjectName} inside folder":function(a){return["\u5C07 ",a("clipboardObjectName")," \u7C98\u8CBC\u5230\u6587\u4EF6\u593E\u5167"]},"Pause":"暫停","Pause the game (from the toolbar) or hit refresh (on the left) to inspect the game":"暫停游戲(從工具欄) 或點擊刷新(在左側) 以檢查游戲","Paused":"已暫停","Paypal secure":"Paypal 安全","Peer to peer IP address leak warning/THNK recommendation":"點對點 IP 地址泄漏警告/THNK 推薦","Peer to peer data-loss notice":"點對點數據丟失通知","Pending":"待處理","Pending invitations":"待處理邀請","Percentage of people who leave before 60 seconds including loading screens.":"Percentage of people who leave before 60 seconds including loading screens.","Permanent":"永久的","Permanently delete the leaderboard?":"您確定要永久刪除排行榜嗎?","Permanently delete the project?":"您確定要永久刪除該專案嗎?","Personal license for claim with Gold or Pro subscription":"通過黃金或專業訂閱進行索賠的個人許可證","Personal or company website":"個人或公司網站","Personal website, itch.io page, etc.":"個人網站,itch.io頁面等。","Personalize your suggested content":"個性化您的建議內容","Perspective camera":"透視相機","Pixel size":"像素大小","Place 3D platforms in a 2D game.":"在 2D 遊戲中放置 3D 平台。","Place 3D platforms in this 2D platformer, creating a path to the end.":"在這個 2D 平台遊戲中放置 3D 平台,創建一條通往終點的路徑。","Place {newInstancesCount} <0>{object_name} instance(s) at {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u5C07 ",a("newInstancesCount")," <0>",a("object_name")," \u5BE6\u4F8B\u653E\u7F6E\u65BC ",a("0"),"\uFF08\u5716\u5C64\uFF1A",a("1"),"\uFF09\u3002"]},"Place {newInstancesCount} and move {existingInstanceCount} <0>{object_name} instance(s) to {0} (layer: {1}) in scene {scene_name}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u653E\u7F6E ",a("newInstancesCount")," \u4E26\u5C07 ",a("existingInstanceCount")," <0>",a("object_name")," \u5BE6\u4F8B\u79FB\u81F3 ",a("0"),"\uFF08\u5716\u5C64\uFF1A",a("1"),"\uFF09\u3002"]},"Placement":"放置","Placement rationale":"放置原則","Platform default":"平臺默認","Platformer":"平臺","Play":"游玩","Play a game":"玩遊戲","Play game":"玩遊戲","Play section":"游戲部分","Played > 10 minutes":"玩了 > 10 分鐘","Played > 15 minutes":"玩了 > 15 分鐘","Played > 3 minutes":"玩了 > 3 分鐘","Played > 5 minutes":"玩了 > 5 分鐘","Played time":"游戲時間","Player":"玩家","Player best entry":"播放器最佳作品","Player feedback off":"玩家反饋關閉","Player feedback on":"玩家反饋開啟","Player name prefix (for auto-generated player names)":"玩家名稱前綴 (用于自動生成的玩家名稱)","Player services":"玩家服務","Player {0} left a feedback message on {1}: \"{2}...\"":function(a){return["\u73A9\u5BB6 ",a("0")," \u5728 ",a("1")," \u7559\u4E0B\u4E86\u53CD\u994B\u4FE1\u606F\uFF1A\"",a("2"),"...\""]},"Players":"玩家","Playground":"游樂場","Playing":"正在播放","Please <0>backup your game file and save your game to ensure that you don't lose anything. You can try to reload this panel or restart GDevelop.":"請<0>備份您的游戲文件并保存您的游戲,以確保您不會丟失任何東西。您可以嘗試重新加載此面板或重新啟動 GDevelop。","Please check if popups are blocked in your browser settings.":"請檢查您的瀏覽器設置中彈出窗口是否被阻止。","Please check your internet connection or try again later.":"請檢查你的網絡連接或稍后再試一次。","Please double check online the changes to make sure that you are aware of anything new in this version that would require you to adapt your project.":"請在線仔細檢查更改,以確保您知道此版本中的任何需要您調整項目的新內容。","Please enter a name for your project.":"請為您的項目輸入名稱。","Please enter a name that is at least one character long and 50 at most.":"請輸入至少一個字符長,最多50個字符的名稱。","Please enter a valid URL, starting with https://":"請輸入一個有效的 URL,開始于 https://","Please enter a valid URL, starting with https://discord":"請輸入一個有效的 URL,從 https://discord 開始","Please enter an email address.":"請輸入電子郵件地址。","Please explain your use of GDevelop.":"請解釋一下你使用 GDevelop 的原因。","Please fill out every field.":"請填寫每個字段。","Please get in touch with us to find a solution.":"請與我們聯系,以便找到解決辦法。","Please log out and log in again to verify your identify, then change your email.":"請注銷并重新登錄以驗證您的身份,然后更改您的電子郵件。","Please login to access free samples of the Education plan resources.":"請登錄以訪問教育計劃資源的免費樣本。","Please note that your device should be connected on the same network as this computer.":"請注意, 你的設備應與此計算機連接在同一網絡上。","Please pick a short username with only alphanumeric characters as well as _ and -":"請選擇僅包含字母數字字符以及 _ 和 - 的簡短用戶名","Please prefer using the new action \"Enforce camera boundaries\" which is more flexible.":"請使用更靈活的新動作“強制攝影機邊界”。","Please tell us more":"請告訴我們更多信息","Please upgrade the editor to the latest version.":"請將編輯器升級到最新版本。","Please wait":"請等待","Please wait while we scan your project to find a solution.":"請稍候,我們正在掃描您的項目以尋找解決方案。","Please wait...":"請稍候...","Point name":"點名稱","Points":"點","Polygon is not convex!":"多邊形不是凸多邊形!","Polygon with {verticesCount} vertices":function(a){return["\u5177\u6709 ",a("verticesCount")," \u500B\u9802\u9EDE\u7684\u591A\u908A\u5F62"]},"Pop back into main window":"返回主窗口","Pop out in a separate window (beta)":"彈出到單獨的窗口(測試版)","Portrait":"縱向","Prefabs (Ready-to-use Objects)":"預制件(待使用對象)","Preferences":"偏好設置","Prefix":"前綴","Preload at startup (default)":"啟動時預加載(默認)","Preload with an action":"預載入一個動作","Preload with the scene":"預載入場景","Premium":"高級版","Prepare your game for Facebook Instant Games so that it can be play on Facebook Messenger. GDevelop will create a compressed file that you can upload on your Facebook Developer account.":"為Facebook Instant Games準備游戲,以便可以在Facebook Messenger上玩。 GDevelop將創建一個壓縮文件,您可以將其上傳到您的Facebook Developer帳戶。","Preparing the leaderboard for your game...":"為您的游戲準備排行榜...","Press a shortcut combination...":"按下快捷鍵組合...","Prevent selection in the editor":"防止在編輯器中進行選擇","Preview":"預覽","Preview over wifi":"在wifi下預覽","Preview {animationName}":function(a){return["\u9810\u89BD ",a("animationName")]},"Previews":"預覽","Previous breaking changes (no longer relevant)":"先前的重大變更(不再相關)","Previous page":"上一頁","Private":"私有","Production & Project Management":"製作與專案管理","Profile":"個人信息","Profiler":"性能分析工具","Programming & Scripting":"程式設計與腳本","Progress bar":"進度條","Progress bar color":"進度條顏色","Progress bar fade in delay and duration will be applied to GDevelop logo.":"進度條淡入淡出延遲和持續時間將應用于 GDevelop 標志。","Progress bar height":"進度條高度","Progress bar maximum width":"進度條最大寬度","Progress bar minimum width":"進度條最小寬度","Progress bar width":"進度條寬度","Progress fade in delay (in seconds)":"進度淡入延遲(以秒為單位)","Progress fade in duration (in seconds)":"進度在持續時間內淡出(以秒為單位)","Project":"項目","Project file list":"專案檔案列表","Project file type":"項目文件類型","Project files":"項目文件","Project icons":"項目圖標","Project is opened":"專案已開啟","Project manager":"項目管理器","Project mismatch":"專案不匹配","Project name":"項目名稱","Project name cannot be empty.":"項目名稱不能為空。","Project name changed":"項目名稱已更改","Project not found":"未找到項目","Project not saved":"專案未儲存","Project package names should not begin with com.example":"項目包名稱不應以 com.example 開頭。","Project properly saved":"項目已正確保存","Project properties":"項目屬性","Project resources":"Project resources","Project save cannot be opened":"專案儲存無法開啟","Project save not available":"專案儲存不可用","Project save not found":"未找到專案儲存","Project saved":"項目已保存","Project was modified":"項目已修改","Project {projectName} will be deleted. You will no longer be able to access it.":function(a){return["\u5C08\u6848 ",a("projectName")," \u5C07\u88AB\u522A\u9664\u3002\u60A8\u5C07\u7121\u6CD5\u518D\u8A2A\u554F\u3002"]},"Projects":"專案","Projects in disabled accounts will not be deleted. All disabled accounts can be reactivated after 15 days.":"在禁用帳戶中的項目不會被刪除。所有禁用帳戶均可在 15 天後重新啟用。","Promoting your game to the community":"向社區推廣您的游戲","Promotions + Earn credits":"促銷 + 賺取積分","Properties":"屬性","Properties & Icons":"屬性與圖示","Properties can't have children.":"屬性不能有子項。","Properties store data inside behaviors.":"屬性將數據存儲在行為中。","Properties store data inside objects.":"屬性將數據存儲在對象內部。","Property list":"屬性列表","Property list editor":"屬性列表編輯器","Property name in events: `{parameterName}`":function(a){return["\u4E8B\u4EF6\u4E2D\u7684\u5C6C\u6027\u540D\u7A31: `",a("parameterName"),"`"]},"Props":"道具","Provisioning profiles":"配置文件","Public":"公開的","Public on gd.games":"在 gd.games 上公開","Public tutorials":"公開教程","Publish":"發布","Publish game":"發佈遊戲","Publish game on gd.games":"在 gd.games 發佈遊戲","Publish new version":"發佈新版本","Publish on gd.games":"在 gd.games 發佈","Publish on gd.games to let players try your game":"在 gd.games 上公開以讓玩家可以試玩您的遊戲","Publish this build on gd.games":"在 gd.games 上發布此構建","Publish to Android, iOS, unlock more cloud projects, leaderboards, collaboration features and more online services. <0>Learn more":"發布到 Android、iOS,解鎖更多云項目、排行榜、協作功能和更多在線服務。<0>了解更多","Publisher name":"發布者姓名","Publishing on gd.games":"正在 gd.games 發布中","Publishing to gd.games, the GDevelop gaming platform. Games can be played from any device.":"發佈到 gd.games,GDevelop 遊戲平台。遊戲可以在任何設備上玩。","Purchase":"購買","Purchase Spine":"購買 Spine","Purchase credits":"購買積分","Purchase seats":"購買座位","Purchase the Education subscription":"購買教育訂閱","Purchase with {usageCreditPrice} credits":function(a){return["\u4F7F\u7528 ",a("usageCreditPrice")," \u7A4D\u5206\u8CFC\u8CB7"]},"Purchase {0}":function(a){return["\u8CFC\u8CB7 ",a("0")]},"Purchase {translatedCourseTitle}":function(a){return["\u8CFC\u8CB7",a("translatedCourseTitle")]},"Puzzle":"謎題","Quadrilateral":"四邊形","Quick Customization settings":"快速自訂設置","Quick Customization: Behavior properties":"快速自訂:行為屬性","Quit tutorial":"退出教程","R;G;B, like 100;200;180":"R; G; B,比如 100; 200; 180","RPG":"RPG 角色扮演遊戲","Racing":"競速類","Radius":"半徑","Radius of the emitter":"發射區半徑","Rank this comment as bad":"將此評論評為差評","Rank this comment as good":"將此評論評為好評","Rank this comment as great":"將此評論評為優秀","Rate chapter":"評價章節","Raw error":"Raw error","Re-enable npm script security warning":"重新啟用 npm 腳本安全警告","Re-install":"重新安裝","React to lights":"對燈光作出反應","Read & Write":"讀寫","Read <0>{behavior_name}'s settings on <1>{object_name} in scene {scene_name}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u8B80\u53D6 <0>",a("behavior_name")," \u7684\u8A2D\u7F6E\u65BC <1>",a("object_name"),"\u3002"]},"Read <0>{object_name}'s properties in scene <1>{scene_name}.":function(a){return["\u5728\u5834\u666F <1>",a("scene_name")," \u4E2D\u8B80\u53D6 <0>",a("object_name")," \u7684\u5C6C\u6027\u3002"]},"Read <0>{scene_name}'s scene settings.":function(a){return["\u8B80\u53D6 <0>",a("scene_name")," \u7684\u5834\u666F\u8A2D\u7F6E\u3002"]},"Read docs for {extension_names}.":function(a){return["\u8B80\u53D6 ",a("extension_names")," \u7684\u6587\u6A94\u3002"]},"Read events in scene <0>{scene_name}.":function(a){return["\u5728\u5834\u666F <0>",a("scene_name")," \u4E2D\u8B80\u53D6\u4E8B\u4EF6\u3002"]},"Read instances in scene <0>{scene_name}.":function(a){return["\u5728\u5834\u666F <0>",a("scene_name")," \u4E2D\u8B80\u53D6\u5BE6\u4F8B\u3002"]},"Read only":"只讀","Read the doc":"閱讀文檔","Read the wiki page for more info about the dataloss mode.":"閱讀wiki頁面了解更多關于數據模式的信息。","Read tutorial":"閱讀教程","Reading the documentation":"正在閱讀文件","Reading through the events":"閱讀事件","Ready-made games":"現成的游戲","Reasoning level":"推理級別","Reasoning level:":"推理級別:","Receive a copy of GDevelop’s teaching resources:<0>Extract of our ready-to-teach Curriculum<1>Poster with GDevelop's core concepts to use in your classroom<2>“Game Development as an Educational wonder” PDF":"接收 GDevelop 教學資源的副本:<0>我們隨時可教學課程的摘要<1>帶有 GDevelop 核心概念的海報,供您在課堂中使用<2>“遊戲開發作為教育奇跡” PDF","Receive weekly stats about your game by email":"通過電子郵件接收有關您游戲的每周統計數據","Recharge your account to purchase this item.":"為您的帳戶充值以購買該商品。","Recommendations":"推薦內容","Recommended":"推薦","Recommended for you":"為您推薦","Recovering older version...":"正在恢復舊版本...","Rectangle paint":"矩形繪畫","Reddit":"Reddit","Redeem":"兌換","Redeem a code":"兌換代碼","Redeemed":"已兌換","Redeemed code valid until {0} .":function(a){return["\u514C\u63DB\u4EE3\u78BC\u6709\u6548\u671F\u81F3 ",a("0")," \u3002"]},"Redemption Codes":"兌換碼","Redemption or coupon code":"兌換或優惠代碼","Redo":"重做","Redo the last changes":"重做上次更改","Redo the survey":"重做調查","Refine your search with more specific keywords.":"使用更具體的關鍵字來優化您的搜索。","Refresh":"刷新","Refresh dashboard":"刷新儀表板","Refresh games":"刷新遊戲","Register or publish your game first to see its exports.":"首先注冊或發布您的游戲以查看其導出。","Register the project":"注冊項目","Related expression and condition":"相關表達式和條件","Related objects":"相關對象","Relational operator":"關系運算符(Relation operator)","Relaunch the 3D editor":"重新啟動 3D 編輯器","Reload project from disk/cloud (lose all changes)":"從磁碟/雲端重新載入專案(將丟失所有更改)","Reload the project? Any changes that have not been saved will be lost.":"是否要重新載入專案?任何未保存的更改將會丟失。","Remaining usage":"剩餘使用次數","Remember that your access to this resource is exclusive to your account.":"很抱歉,您的賬戶沒有足夠的權限來訪問這個資源。","Remix a game in 2 minutes":"在 2 分鐘內重新混合一個遊戲","Remix an existing game":"重新混合現有遊戲","Remove":"刪除","Remove <0>{behavior_name} behavior from <1>{object_name} in scene {scene_name}.":function(a){return["\u5F9E\u5834\u666F ",a("scene_name")," \u4E2D\u79FB\u9664 <0>",a("behavior_name")," \u884C\u70BA\u65BC <1>",a("object_name"),"\u3002"]},"Remove Ordering":"刪除排序","Remove behavior":"刪除行為","Remove certificate":"刪除證書","Remove collaborator":"刪除合作者","Remove effect":"移除效果","Remove entry":"刪除條目","Remove folder and function":"刪除文件夾和函數","Remove folder and functions":"刪除文件夾和函數","Remove folder and object":"刪除文件夾和對象","Remove folder and objects":"刪除文件夾和對象","Remove folder and properties":"刪除文件夾及屬性","Remove folder and property":"刪除文件夾及屬性","Remove from list":"從列表中刪除","Remove from team":"從團隊移除","Remove function":"刪除函數","Remove group":"移除組","Remove invitation?":"要移除邀請嗎?","Remove object":"移除對象","Remove objects":"刪除對象","Remove objects from the scene list":"從場景列表中移除物件","Remove project from list":"從列表中移除專案","Remove resource":"移除資源","Remove resources with invalid path":"刪除具有無效路徑的資源","Remove scene <0>{scene_name}.":function(a){return["\u79FB\u9664\u5834\u666F <0>",a("scene_name"),"\u3002"]},"Remove shortcut":"刪除快捷鍵","Remove student?":"要移除學生嗎?","Remove the Else":"刪除 ELSE","Remove the Long Description":"刪除長描述","Remove the Loop Counter Variable":"移除迴圈計數器變數","Remove the animation":"刪除動畫","Remove the extension":"移除擴展","Remove the sprite":"刪除精靈","Remove this Auth Key":"刪除此認證密鑰","Remove this certificate":"刪除此證書","Remove this certificate?":"刪除此證書?","Remove this counter of the loop":"移除迴圈的這個計數器","Remove unlimited":"移除無限制","Remove unused...":"移除未使用...","Remove variant":"刪除變體","Rename":"重命名","Rename <0>{object_name} to <1>{newValue} (in scene {scene_name}).":function(a){return["\u5C07 <0>",a("object_name")," \u91CD\u547D\u540D\u70BA <1>",a("newValue"),"\uFF08\u5728\u5834\u666F ",a("scene_name")," \u4E2D\uFF09\u3002"]},"Renamed object to {0}.":function(a){return["\u7269\u4EF6\u5DF2\u91CD\u65B0\u547D\u540D\u70BA ",a("0"),"\u3002"]},"Rendering type":"渲染類型","Repeat <0>{0} times:":function(a){return["\u91CD\u8907<0>",a("0"),"\u6B21\uFF1A"]},"Repeat borders and center textures (instead of stretching them)":"重復邊框和中心紋理(而不是拉伸它們)","Repeat for each instance of<0>{0}":function(a){return["\u5C0D\u6BCF\u500B\u5BE6\u4F8B\u7684<0>",a("0"),"\u91CD\u8907"]},"Repeat these:":"重復這些:","Replace":"替換","Replace <0>{object_name} in scene <1>{scene_name}.":function(a){return["\u5728\u5834\u666F <1>",a("scene_name")," \u4E2D\u66FF\u63DB <0>",a("object_name"),"\u3002"]},"Replace existing extension":"替換現有擴展","Replay":"回放","Report a wrong translation":"反饋錯誤的翻譯","Report an issue":"報告一個問題","Report anyway":"仍然報告","Report this comment as abusive, harmful or spam":"舉報此評論為辱罵性評論、有害評論或垃圾評論","Required behavior":"必填行為","Reset":"重置","Reset Debugger layout":"重置調試器布局","Reset Extension Editor layout":"重置擴展編輯器布局","Reset Resource Editor layout":"重置資源編輯器布局","Reset Scene Editor layout":"重置場景編輯器布局","Reset all shortcuts to default":"重置所有快捷鍵","Reset and hide children configuration":"重置並隱藏子項配置","Reset hidden Ask AI text inputs":"重置隱藏的詢問 AI 文本輸入","Reset hidden announcements":"重置隱藏的公告","Reset hidden embedded explanations":"重置隱藏的嵌入式解釋","Reset hidden embedded tutorials":"重置隱藏的嵌入式教程","Reset leaderboard":"重置排行榜","Reset leaderboard {0}":function(a){return["\u91CD\u7F6E\u6392\u884C\u699C ",a("0")]},"Reset password":"重置密碼","Reset requested the {0} . Please wait a few minutes...":function(a){return["\u91CD\u7F6E\u8ACB\u6C42",a("0"),"\u3002\u8ACB\u7B49\u5F85\u5E7E\u5206\u9418..."]},"Reset to automatic collision mask":"重置為自動碰撞遮罩","Reset to default":"重置為默認值","Reset your password":"重置您的密碼","Resolution and rendering":"分辨率和渲染","Resource":"資源","Resource URL":"資源 URL","Resource file path copied to clipboard":"復制到剪貼板的資源文件路徑","Resource kind":"資源類型","Resource name":"資源名稱","Resource type":"資源類型","Resource(s) URL(s) (one per line)":"資源: URL(每行一個)","Resources":"資源","Resources (any kind)":"資源 (任何類型)","Resources added: {0}":function(a){return["\u8CC7\u6E90\u5DF2\u6DFB\u52A0: ",a("0")]},"Resources are automatically added to your project whenever you add an image, a font or a video to an object or when you choose an audio file in events. Choose a resource to display its properties.":"當您添加圖片、字體或視頻到對象或事件中選擇音頻文件時,資源自動添加到您的項目中。選擇資源顯示屬性。","Resources loading":"資源加載中","Resources preloading":"資源預加載中","Resources unloading":"資源卸載中","Restart":"重新啟動","Restart 3D editor":"重新啟動 3D 編輯器","Restart the Tutorial":"重啟教程","Restart tutorial":"重啟教程","Restarting the preview from scratch is required":"重新啟動預覽(from scratch is required)","Restore":"還原","Restore a previous purchase":"恢復之前的購買","Restore accounts":"恢復帳戶","Restore project before this message":"在此訊息之前還原專案","Restore project to this state?":"要將專案還原至此狀態?","Restore this version":"恢復此版本","Restore version":"還原版本","Restored":"已還原","Restoring...":"還原中...","Results for:":"結果為:","Retry":"重試","Reviewing a starter game template.":"正在檢查入門遊戲範本。","Reviewing the current state":"正在檢查當前狀態","Reviewing the game structure":"正在檢查遊戲結構","Reviewing the scene data":"正在檢查場景數據","Reviewing the {templateName} starter template.":function(a){return["\u6B63\u5728\u6AA2\u67E5 ",a("templateName")," \u5165\u9580\u7BC4\u672C\u3002"]},"Rework the game":"重新製作遊戲","Right":"右","Right (secondary)":"右 (次要)","Right bound":"右邊界","Right bound should be greater than left bound":"右邊界應大於左邊界","Right face":"右面","Right margin":"右邊距","Right-click for more events":"右鍵點擊查看更多事件","Right-click for quick menu":"右鍵點擊獲得快捷菜單","Room: {0}":function(a){return["\u623F\u9593\uFF1A",a("0")]},"Rooms":"房間","Root folder":"根文件夾","Rotation":"旋轉","Rotation (X)":"旋轉 (X)","Rotation (Y)":"旋轉 (Y)","Rotation (Z)":"旋轉 (Z)","Round pixels when rendering, useful for pixel perfect games.":"渲染時旋轉像素,對像素完美游戲有用。","Round to X decimal point":"四舍五入到X小數點","Run a preview":"啟動預覽","Run a preview (with loading & branding)":"運行預覽(加載和品牌)","Run a preview and you will be able to inspect it with the debugger.":"運行預覽,你就可以用調試器來檢查它。","Run on this computer":"在此電腦上運行","Save":"保存","Save Project":"保存項目","Save and continue":"保存并繼續","Save as main version":"保存為主版本","Save as...":"另存為...","Save in the \"Downloads\" folder":"保存在“下載”文件夾中","Save on your computer: download GDevelop desktop app":"在您的電腦上保存:下載 GDevelop 桌面應用程式","Save project":"保存項目","Save project as":"將項目另存為","Save project as...":"項目另存為...","Save to computer with GDevelop desktop app":"使用 GDevelop 桌面應用程式保存到電腦","Save your changes or close the external editor to continue.":"保存您的更改或關閉外部編輯器以繼續。","Save your game":"保存你的遊戲","Save your project":"保存項目","Save your project before using the version history.":"在使用版本歷史記錄之前保存您的項目。","Saving project":"保存項目","Saving...":"存儲","Scale mode (also called \"Sampling\")":"縮放模式 (也稱為“取樣”)","Scaling factor":"比例因子","Scaling factor to apply to the default dimensions":"應用於默認尺寸的縮放因子","Scan in the project folder for...":"掃描項目文件夾...","Scan missing animations":"掃描缺失的動畫","Scene":"場景","Scene Groups":"場景組","Scene Objects":"場景對象","Scene Variables":"場景變量","Scene background color":"場景背景色","Scene editor":"場景編輯器","Scene events":"場景事件","Scene groups":"場景組","Scene name":"場景名稱","Scene name (text)":"場景名稱 (文本)","Scene objects":"場景對象","Scene properties":"場景屬性","Scene variable":"場景變量","Scene variable (deprecated)":"場景變數 (已廢棄)","Scene variables":"場景變量","Scenes":"場景","Scope":"范圍","Score":"分數","Score column settings":"分數列設置","Score display":"分數顯示","Score multiplier":"分數乘數","Scores sort order":"分數排序順序","Scroll":"滾動","Search":"搜索","Search GDevelop documentation.":"搜尋 GDevelop 文件。","Search and replace in parameters":"在參數中搜索并替換","Search assets":"搜索資產","Search behaviors":"搜索行為","Search by name":"按名稱搜索","Search examples":"搜索示例","Search extensions":"搜索擴展","Search filters":"搜索過濾器","Search for New Extensions":"搜索新的擴展","Search for new actions in extensions":"在擴展中搜索新的操作","Search for new conditions in extensions":"在擴展中搜索新的條件","Search functions":"搜索功能","Search in all event sheets...":"在所有事件表中搜尋...","Search in event sentences":"搜索事件句子","Search in events":"在事件中搜索","Search in project":"在項目中搜索","Search in properties":"在屬性中搜索","Search instances":"搜索實例","Search object groups":"搜索對象組","Search objects":"搜索對象","Search objects or actions":"搜索對象或動作","Search objects or conditions":"搜索對象或條件","Search panel":"搜索面板","Search resources":"搜索資源","Search results":"搜索結果","Search the shop":"搜尋商店","Search variables":"搜索變量","Search {searchPlaceholderObjectName} actions":function(a){return["\u641C\u7D22 ",a("searchPlaceholderObjectName")," \u52D5\u4F5C"]},"Search {searchPlaceholderObjectName} conditions":function(a){return["\u641C\u7D22 ",a("searchPlaceholderObjectName")," \u689D\u4EF6"]},"Search/import extensions":"搜索/導入擴展","Searching the asset store.":"搜尋資源商店。","Seats":"座位","Seats available:":"可用座位:","Seats left: {availableSeats}":function(a){return["\u5269\u9918\u540D\u984D\uFF1A",a("availableSeats")]},"Seconds":"秒鐘","Section name":"章節名稱","See Marketing Boosts":"查看營銷推廣","See all":"查看全部","See all exports":"查看所有導出","See all in the game dashboard":"在遊戲儀表板查看所有內容","See all projects":"查看所有項目","See all release notes":"查看所有發行說明","See all the release notes":"查看所有發行說明","See more":"查看更多","See my codes":"查看我的代碼","See plans":"查看計劃","See projects":"查看項目","See resources":"查看資源","See subscriptions":"查看訂閱","See the releases notes online":"在線查看發行說明","See this bundle":"查看此包","Select":"Select","Select All":"選擇所有","Select a behavior":"選擇行為","Select a function...":"選擇功能...","Select a game":"選擇遊戲","Select a genre":"選擇一種類型","Select a thumbnail":"選擇縮略圖","Select all active":"選擇所有活動","Select an author":"選擇一位作者","Select an extension":"選擇擴展","Select an image":"選擇圖像","Select an owner":"選擇所有者","Select instances on scene ({instanceCountOnScene})":function(a){return["\u9078\u64C7\u5834\u666F\u4E2D\u7684\u5BE6\u4F8B (",a("instanceCountOnScene"),")"]},"Select log groups to display":"選擇要顯示的日志組","Select resource":"Select resource","Select the controls that apply:":"選擇適用的控制項:","Select the leaderboard from a list":"從列表中選擇排行榜","Select the usernames of the authors of this project. They will be displayed in the selected order, if you publish this game as an example or in the community.":"選擇此項目作者的用戶名。 如果您以示例或在社區中發布此游戲,他們將被顯示在選定的順序中。","Select the usernames of the contributors to this extension. They will be displayed in the order selected. Do not see your name? Go to the Profile section and create an account!":"選擇此擴展的貢獻者的用戶名。他們將顯示在選擇的順序中。 不要看到您的名字?轉到個人資料部分并創建一個帳戶!","Select the usernames of the owners of this project to let them manage this game builds. Be aware that owners can revoke your ownership.":"選擇此項目所有者的用戶名,讓他們管理此游戲版本。請注意,所有者可以撤銷您的所有權。","Select up to 3 genres for the game to be visible on gd.games's categories pages!":"選擇最多3種類型的游戲可見于 gd.game 的分類頁面!","Select {0} resources":function(a){return["Select ",a("0")," resources"]},"Selected instances will be moved to a new custom object.":"選定的實例將移動到新的自訂物件。","Selected instances will be moved to a new external layout.":"選定的實例將移動到一個新的外部布局。","Send":"發送","Send a new form":"發送新表格","Send crash reports during previews to GDevelop":"在預覽期間將崩潰報告發送給 GDevelop","Send feedback":"Send feedback","Send it again":"再次發送","Send the Auth Key":"發送驗證密鑰","Send to back":"置于后面","Sending...":"發送中...","Sentence in Events Sheet":"事件表中的語句","Sentence in Events Sheet (automatically suffixed by \"of _PARAM0_\")":"事件表中的句子(自動后綴為“_PARAM0_”)","Serial: {0}":function(a){return["\u5E8F\u5217\u865F: ",a("0")]},"Service seems to be unavailable, please try again later.":"服務似乎無法使用,請稍后再試。","Sessions":"會話","Set <0>{object_name}'s variable <1>{variable_name_or_path}.":function(a){return["\u8A2D\u7F6E <0>",a("object_name")," \u7684\u8B8A\u6578 <1>",a("variable_name_or_path"),"\u3002"]},"Set an icon to the extension first":"首先將圖示設定為擴展","Set as default":"設置為默認","Set as global":"設置為全局","Set as global group":"設置為全局群組","Set as global object":"設置為全局對象","Set as start scene":"設置為開始場景","Set by user":"由用戶設置","Set global variable <0>{variable_name_or_path}.":function(a){return["\u8A2D\u7F6E\u5168\u57DF\u8B8A\u6578 <0>",a("variable_name_or_path"),"\u3002"]},"Set scene variable <0>{variable_name_or_path} in scene {scene_name}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u8A2D\u7F6E\u5834\u666F\u8B8A\u6578 <0>",a("variable_name_or_path"),"\u3002"]},"Set shortcut":"設置快捷鍵","Set to false":"設置為 false","Set to true":"設置為 true","Set to unlimited":"設定為無限制","Set up new leaderboards for this game":"為此游戲設置新的排行榜","Set up the base for your project <0>{project_name}.":function(a){return["\u70BA\u4F60\u7684\u5C08\u6848 <0>",a("project_name")," \u8A2D\u7F6E\u57FA\u790E\u3002"]},"Set variable <0>{variable_name_or_path}.":function(a){return["\u8A2D\u7F6E\u8B8A\u6578 <0>",a("variable_name_or_path"),"\u3002"]},"Setting the minimum number of FPS below 20 will increase a lot the time that is allowed between the simulation of two frames of the game. If case of a sudden slowdown, or on slow computers, this can create buggy behaviors like objects passing beyond a wall. Consider setting 20 as the minimum FPS.":"設置 FPS 20 以下的最低數量將會增加在模擬兩框架游戲之間允許的時間。如果突然減速或緩慢計算機上,這可能造成像物體越過隔離墻以外的bug 行為。考慮設置20,作為最低FPS。","Settings":"設置","Setup grid":"設置網格","Shadow":"陰影","Share":"分享","Share dialog":"分享對話框","Share same collision masks for all animations":"為所有動畫共享相同的碰撞蒙版","Share same collision masks for all sprites of this animation":"為該動畫的所有精靈共享相同的碰撞蒙版","Share same points for all animations":"為所有動畫共享相同的點","Share same points for all sprites of this animation":"為該動畫的所有精靈共享相同的點","Share your game":"分享你的游戲","Share your game on gd.games and collect players feedback about your game.":"在 gd.games 上分享您的遊戲並收集玩家對您的遊戲的反饋。","Share your game with your friends or teammates.":"與您的朋友或隊友分享您的遊戲。","Sharing online":"在線分享","Sharing the final file with the client":"與客戶端共享最終文件","Shooter":"射擊","Shop":"商店","Shop section":"商店部分","Short":"短","Short description":"簡短描述","Short label":"短標簽","Should finish soon.":"應該很快就會完成。","Show":"顯示","Show \"Ask AI\" button in the title bar":"在標題欄中顯示「詢問 AI」按鈕","Show Home":"顯示主頁","Show Mask":"顯示蒙板","Show Project Manager":"打開項目管理器","Show Properties Names":"顯示屬性名稱","Show advanced import options":"顯示高級導入選項","Show all feedbacks":"顯示所有反饋","Show button to load guided lesson from file and test it":"顯示按鈕以從文件加載引導課程並進行測試","Show deprecated behaviors (prefer not to use anymore)":"顯示已棄用的行為(不再使用)","Show deprecated options":"顯示已棄用的選項","Show details":"顯示詳情","Show diagnostic report":"顯示診斷報告","Show effect":"顯示特效","Show experimental behaviors":"顯示實驗性行為","Show experimental extensions":"顯示實驗性擴展","Show experimental extensions in the list of extensions":"在擴展列表中顯示實驗性擴展","Show experimental objects":"顯示實驗性物件","Show grid":"顯示網格","Show in local folder":"在本地文件夾中顯示","Show internal":"顯示內部設置","Show less":"顯示更少","Show lifecycle functions (advanced)":"顯示生命周期函數(高級)","Show live assets":"顯示活動素材","Show more":"顯示更多","Show next assets":"顯示下一個資產","Show objects in 3D in the scene editor":"在場景編輯器中以 3D 形式顯示對象","Show older":"顯示較舊的","Show other lifecycle functions (advanced)":"顯示其他生命周期函數(高級)","Show previous assets":"顯示以前的資產","Show progress bar":"顯示進度條","Show staging assets":"顯示暫存素材","Show the \"Create\" section by default when opening GDevelop":"默認情況下打開 GDevelop 時顯示“創建”部分","Show type errors in JavaScript events (needs a restart)":"在 JavaScript 事件中顯示類型錯誤(需要重新啟動)","Show unread feedback only":"僅顯示未讀反饋","Show version history":"顯示版本歷史記錄","Show/Hide instance properties":"顯示/隱藏實例屬性","Showing {0} of {resultsCount}":function(a){return["\u986F\u793A ",a("0")," / ",a("resultsCount")]},"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged — and when they drop off quickly.":"Shows how long players stay in the game over time. The percentages are showing people playing for more than 3, 5, 10, and 15 minutes based on the best day. A higher value means better player retention on the day. This helps you understand when players are most engaged — and when they drop off quickly.","Side view":"側邊視圖","Sign up":"註冊","Signing Credentials":"簽署證書","Signing options":"簽名選項","Simple":"簡單","Simulation":"模擬","Single commercial use license for claim with Gold or Pro subscription":"通過黃金或專業訂閱申請的單一商業使用許可證","Single file (default)":"單文件 (默認)","Size":"大小","Size:":"大小 ︰","Skins":"皮膚","Skip and create from scratch":"跳過并從頭開始創建","Skip the update":"跳過更新","Socials":"社交","Some code experience":"一些代碼經驗","Some extensions already exist in the project. Please select the ones you want to replace.":"項目中已經存在一些擴展。請選擇您想要替換的擴展。","Some icons could not be generated.":"有些圖示無法生成。","Some no-code experience":"一些無代碼經驗","Some things in the answer don't exist in GDevelop":"Some things in the answer don't exist in GDevelop","Some variants already exist in the project. Please select the ones you want to replace.":"項目中已經存在一些變體。請選擇您想要替換的變體。","Something went wrong":"出了些問題","Something went wrong while changing your subscription. Please try again.":"更改訂閱時出現問題。請再試一次。","Something went wrong while swapping the asset. Please try again.":"交換資產時出現錯誤。請重試。","Something went wrong while syncing your Discord username. Please try again later.":"同步您的 Discord 用戶名時出現問題。請稍后再試。","Something went wrong while syncing your forum access. Please try again later.":"同步您的論壇訪問時出現問題。請稍後再試。","Something wrong happened :(":"出現了某些錯誤","Something wrong happened when claiming the asset pack. Please check your internet connection or try again later.":"領取資產包時發生錯誤。請檢查您的互聯網連接或稍后重試。","Sorry":"很抱歉","Sort by most recent":"按最新排序","Sort order":"排序順序","Sound":"聲音","Sounds and musics":"聲音和音樂","Source file":"源文件","Specific game mechanics":"特定的游戲機制","Specify something more to the AI to build":"向 AI 指定更多構建內容","Speech":"演示","Spine Json":"Spine Json","Spine animation name":"Spine 動畫名稱","Spine json resource":"Spine json 資源","Sport":"體育運動","Spray cone angle (in degrees)":"發射角度(度)","Sprite":"精靈","Standalone dialog":"獨立對話框","Start Network Preview (Preview over WiFi/LAN)":"啟動線上預覽 (通過 WiFi/LAN預覽)","Start Preview and Debugger":"啟動預覽和調試器","Start a game where a ball can bounce around the screen":"開始一個球可以在屏幕上彈跳的遊戲","Start a new game from this project":"從此項目開啟一個新遊戲","Start a new game?":"開始一個新遊戲嗎?","Start a preview to generate a thumbnail!":"開始預覽以生成縮略圖!","Start a quizz game with a question and 4 answers":"開始一個有問題和 4 個答案的測驗遊戲","Start a simple endless runner game":"開始一個簡單的無盡跑者遊戲","Start a simple platformer with a player that can move and jump":"開始一個簡單的平台遊戲,有玩家可以移動和跳躍","Start all previews from external layout {0}":function(a){return["\u5F9E\u5916\u90E8\u5E03\u5C40\u958B\u59CB\u6240\u6709\u9810\u89BD ",a("0")]},"Start all previews from scene {0}":function(a){return["\u5F9E\u5834\u666F\u958B\u59CB\u6240\u6709\u9810\u89BD ",a("0")]},"Start build with credits":"開始使用積分構建","Start by adding a new behavior.":"首先添加一個新行為。","Start by adding a new external layout.":"首先添加一個新的外部布局。","Start by adding a new function.":"首先添加一個新函數。","Start by adding a new group.":"首先添加一個新組。","Start by adding a new object.":"首先添加一個新對象。","Start by adding a new property.":"請先添加一個新屬性。","Start by adding a new scene.":"首先添加一個新場景。","Start by adding new external events.":"首先添加新的外部事件。","Start for free":"免費開始","Start from a template":"從一個模板開始","Start learning":"開始學習","Start next chapter":"開始下一章節","Start opacity (0-255)":"開始 不透明","Start preview with diagnostic report":"使用診斷報告開始預覽","Start profiling":"開始解析","Start profiling and then stop it after a few seconds to see the results.":"開始分析,且在數秒內停止,顯示結果","Start the survey!":"開始調查!","Start typing a command...":"開始輸入命令...","Start typing a username":"開始輸入用戶名","Start your game":"開始你的游戲","Starting engine":"啟動引擎","Stay there":"留在這里","Stop":"停止","Stop music and sounds at scene startup":"在場景啟動時停止播放音樂和聲音","Stop profiling":"停止 解析","Stop working":"停止工作","Stopped. Ready when you are.":"已停止。隨時準備就緒。","Store password":"存儲密碼","Story-Rich":"豐富的故事","Strategy":"策略","String":"字符串","String (text)":"字符串(文本)","String from a list of options (text)":"從選項列表中的字符串 (文本)","String variables with no value set now default to an empty string (\"\") instead of \"0\". This game was created before this change, so GDevelop maintains the old behavior: unset string variables default to \"0\". It's recommended that you switch to the new behavior and update any variables or conditions relying on \"0\" as a default.":"未設置值的字串變數現在預設為空字串(\"\"),而非\"0\"。這個遊戲是在此更改之前創建的,因此 GDevelop 保持了舊的行為:未設置的字串變數預設為\"0\"。建議您切換到新的行為並更新任何依賴於\"0\"作為預設的變數或條件。","Stripe secure":"Stripe 安全","Structure":"結構","Student":"學生","Student accounts":"學生帳戶","Studying the event sheets":"研究事件表","Studying the object behaviors":"研究物件行為","Sub Event":"子事件","Submit a free pack":"提交免費包","Submit a paid pack":"提交付費包","Submit a tutorial":"提交一份教程","Submit a tutorial translated in your language":"提交用您的語言翻譯的教程","Submit an example":"提交一個示例","Submit an update":"提交更新","Submit and cancel":"提交并取消","Submit to the community":"提交給社區","Submit your project as an example":"作為示例提交您的項目","Subscribe":"訂閱","Subscribe to Edu":"訂閱 Edu","Subscription Plan":"訂閱計劃","Subscription outside the app store":"應用程序商店之外的訂閱","Subscription with the Apple App store or Google Play store":"通過 Apple App Store 或 Google Play 商店進行訂閱","Subscriptions":"訂閱","Suffix":"后綴","Support What You Love":"支持您所熱愛的事物","Supported files":"支持的文件","Survival":"生存","Swap":"交換","Swap assets":"交換資產","Swap {0} with another asset":function(a){return["\u7528\u53E6\u4E00\u500B\u8CC7\u7522\u66FF\u63DB ",a("0")]},"Switch to GDevelop Credits":"切換到 GDevelop 積分","Switch to GDevelop credits or keep building with AI.":"切換到 GDevelop 積分或繼續與 AI 建立應用程式。","Switch to create objects with the highest Z order of the layer":"切換以創建具有最高Z層順序的對象","Switch to empty string (\"\") as default for string variables":"將空字串(\"\")作為字串變數的預設值","Switch to monthly pricing":"切換到按月定價","Switch to yearly pricing":"切換到按年定價","Sync your role on GDevelop's Discord server":"在 GDevelop 的 Discord 服務器上同步您的角色","Sync your subscription level on GDevelop's forum":"在 GDevelop 論壇上同步您的訂閱級別","Table settings":"表格設置","Tags (comma separated)":"標簽 (以逗號分隔)","Taking your game further":"讓您的游戲更進一步","Target event":"目標事件","Tasks":"任務","Teach":"教學","Teacher accounts":"教師帳戶","Teachers, courses and universities":"教師、課程和大學","Team invitation":"團隊邀請","Team section":"團隊部分","Tell us more!...":"告訴我們更多!...","Template":"模板","Test it out!":"測試!","Test value":"測試值","Test value (in second)":"測試值(秒)","Text":"文本","Text color":"文本顏色","Text color:":"文本顏色:","Text to replace in parameters":"在參數中要被替換的文字","Text to search in event sentences":"在事件句子中搜索的文本","Text to search in parameters":"要搜索參數的文本","Texts":"文本","Thank you for supporting GDevelop. Credits were added to your account as a thank you.":"感謝您對 GDevelop 的支持。作為感謝,積分已添加到您的帳戶中。","Thank you for supporting the GDevelop open-source community. Credits were added to your account as a thank you.":"感謝您對 GDevelop 開源社區的支持。作為感謝,積分已添加到您的帳戶中。","Thank you for your feedback":"感謝您的反饋意見","Thanks for following GDevelop. We added credits to your account as a thank you gift.":"感謝您關注 GDevelop。我們已將積分添加到您的帳戶中作為答謝禮物。","Thanks for getting a subscription and supporting GDevelop!":"感謝您訂閱并支持 GDevelop !","Thanks for starring GDevelop repository. We added credits to your account as a thank you gift.":"感謝您對 GDevelop 存儲庫加星標。我們已將積分添加到您的帳戶中作為答謝禮物。","Thanks for trying GDevelop! Unlock more projects, AI usage, publishing, multiplayer, courses and much more by upgrading.":"感謝您嘗試 GDevelop!透過升級,解鎖更多項目、AI 使用、發佈、多人遊戲、課程以及更多功能。","Thanks to all users of GDevelop! There must be missing tons of people, please send your name if you've contributed and you're not listed.":"感謝所有GD用戶!這里有一堆沒有列出的人,如果您沒有列出,請聯系我們","Thanks to the redemption code you've used, you have this subscription enabled until {0}.":function(a){return["\u611F\u8B1D\u60A8\u4F7F\u7528\u7684\u514C\u63DB\u4EE3\u78BC\uFF0C\u60A8\u53EF\u4EE5\u5728 ",a("0")," \u4E4B\u524D\u555F\u7528\u6B64\u8A02\u95B1\u3002"]},"That's a lot of unsuccessful login attempts! Wait a bit before trying again or reset your password.":"這是一個不成功的登錄嘗試!請稍等,然后重試或重置您的密碼。","The \"{0}\" effect can only be applied once.":function(a){return["\"",a("0"),"\"\u6548\u679C\u53EA\u80FD\u61C9\u7528\u4E00\u6B21\u3002"]},"The 3D editor is new and may still have rough edges. It will continue to be improved in the near future. Read more about it on the [GDevelop blog](https://gdevelop.io/blog/3d-editor).":"3D 編輯器是新的,可能仍有些不完善。它將在不久的將來持續改進。想了解更多,請查看 [GDevelop 部落格](https://gdevelop.io/blog/3d-editor)。","The 3D editor or the game crashed":"3D 編輯器或游戲崩潰了","The 3D editor, or some logic/code inside the game, has encountered an unhandled exception or error. It's necessary to restart the 3D editor.":"3D 編輯器或游戲內某些邏輯/代碼遇到了未處理的異常或錯誤。必須重新啟動 3D 編輯器。","The AI agent is in beta. Help us make it better by telling us what went wrong:":"AI 代理正在測試版中。通過告訴我們發生了什麼錯誤,幫助我們改善它:","The AI encountered an error while handling your request - this request was not counted in your AI usage. Try again later.":"AI 在處理您的請求時發生了錯誤 - 本請求未計入您的 AI 使用次數。稍後再試。","The AI is currently working on your project. Closing the project will stop it. Do you want to continue?":"AI 目前正在您的專案上工作。關閉專案將會停止它。您想繼續嗎?","The AI is currently working on your project. Opening another chat will stop it. Do you want to continue?":"AI 目前正在您的專案上工作。開啟另一個聊天將會停止它。您想繼續嗎?","The AI is currently working on your project. Should it continue working while the tab is closed?":"AI 目前正在您的專案上工作。當標籤關閉時,它是否應該繼續工作?","The AI is experimental and still being improved. <0>It can inspect your game objects and events.":"AI 是實驗性質的,仍在改進中。<0>它可以檢查您的遊戲物件和事件。","The Atlas embedded in the Spine fine can't be located.":"嵌入 Spine 細部的圖集無法定位。","The Education subscription gives access to GDevelop's Game Development curriculum. Co-created with teachers and institutions, it’s a ready-to-use, proven way to implement STEM in your classroom.":"教育訂閱可讓您訪問 GDevelop 的遊戲開發課程。由教師和機構共同創建,這是一個現成的、經過證明的可以在您的教室實施 STEM 的方法。","The GDevelop project is open-source, powered by passion and community. Your membership helps the GDevelop company maintain servers, build new features, develop commercial offerings and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"GDevelop 項目是開源的,由熱情和社區驅動。您的會員資格幫助 GDevelop 公司維護伺服器、構建新功能、開發商業產品並保持開源項目的繁榮。我們的目標:讓遊戲開發快速、有趣且易於所有人使用。","The URLs must be public and stay accessible while you work on this project - they won't be stored inside the project file. When exporting a game, the resources pointed by these URLs will be downloaded and stored inside the game.":"URL必須是公開的,并且在您在此項目工作時保持訪問 - 它們不會存儲在項目文件中。導出游戲時,將下載并存儲在游戲內的這些URL指向的資源。","The animation name {newName} is already taken":function(a){return["\u52D5\u756B\u540D\u7A31 ",a("newName")," \u5DF2\u88AB\u4F7F\u7528"]},"The answer is entirely wrong":"The answer is entirely wrong","The answer is not as good as it could be":"The answer is not as good as it could be","The answer is not in my language":"The answer is not in my language","The answer is out of scope for GDevelop":"The answer is out of scope for GDevelop","The answer is too long":"The answer is too long","The answer is too short":"The answer is too short","The asset pack {0} is now available, go claim it in the shop!":function(a){return["\u8CC7\u6E90\u5305 ",a("0")," \u73FE\u5DF2\u4E0A\u7DDA\uFF0C\u5FEB\u53BB\u5546\u5E97\u9818\u53D6\u5427\uFF01"]},"The asset pack {0} will be linked to your account {1}.":function(a){return["\u7D20\u6750\u5305 ",a("0")," \u5C07\u88AB\u93C8\u63A5\u5230\u60A8\u7684\u5E33\u6236 ",a("1")]},"The atlas image is smaller than the tile size.":"圖集圖像小於瓦片大小。","The auth key {lastUploadedApiKey} was properly stored. It can now be used to automatically upload your app to the app store - verify you've declared an app for it.":function(a){return["\u8EAB\u4EFD\u9A57\u8B49\u5BC6\u9470 ",a("lastUploadedApiKey")," \u5DF2\u6B63\u78BA\u5B58\u5132\u3002\u73FE\u5728\u53EF\u4EE5\u4F7F\u7528\u5B83\u81EA\u52D5\u5C07\u60A8\u7684\u61C9\u7528\u7A0B\u5E8F\u4E0A\u50B3\u5230\u61C9\u7528\u7A0B\u5E8F\u5546\u5E97 - \u9A57\u8B49\u60A8\u5DF2\u70BA\u5176\u8072\u660E\u4E86\u4E00\u500B\u61C9\u7528\u7A0B\u5E8F\u3002"]},"The behavior is not attached to this object. Please select another object or add this behavior: {0}":function(a){return["\u8A72\u884C\u70BA\u672A\u95DC\u806F\u5230\u6B64\u5C0D\u8C61\uFF0C\u8ACB\u9078\u64C7\u53E6\u4E00\u500B\u5C0D\u8C61\u6216\u6DFB\u52A0\u6B64\u884C\u70BA: ",a("0")]},"The bounding box is an imaginary rectangle surrounding the object collision mask. Even if the object X and Y positions are not changed, this rectangle can change if the object is rotated or if an animation is being played. Usually you should use actions and conditions related to the object position or center, but the bounding box can be useful to deal with the area of the object.":"包圍盒是對象碰撞遮罩周圍的假想矩形。即使對象的X和Y位置沒有改變,這個矩形也可以在物體旋轉或播放動畫時被修改。通常您應該使用與對象位置或中心相關的動作和條件,但包圍盒可能有助于處理對象的區域。","The bundle you are trying to claim does not exist anymore. Please contact support if you think this is an error.":"您嘗試索取的套件不再存在。如果您認為這是一個錯誤,請聯繫客服。","The bundle {0} will be linked to your account {1}.":function(a){return["\u6346\u7D81\u5305 ",a("0")," \u5C07\u88AB\u93C8\u63A5\u5230\u60A8\u7684\u5E33\u6236 ",a("1"),"\u3002"]},"The bundle {0} will be sent to the email address provided in the checkout.":function(a){return["\u5957\u4EF6 ",a("0")," \u5C07\u88AB\u767C\u9001\u5230\u7D50\u8CEC\u6642\u63D0\u4F9B\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740\u3002"]},"The certificate could not be found. Please verify it was properly uploaded and try again.":"找不到證書。請確認它已正確上傳,然後再試一次。","The certificate was properly generated. Don't forget to create and upload a provisioning profile associated to it.":"證書已正確生成。不要忘記創建并上傳與其關聯的配置文件。","The chat is becoming long - consider creating a new chat to ask other questions. The AI will better analyze your game and request in a new chat.":"聊天已變長 - 請考慮創建新的聊天以詢問其他問題。AI 在新的聊天中將更好地分析您的遊戲和請求。","The course {0} will be linked to your account {1}.":function(a){return["\u8AB2\u7A0B",a("0"),"\u5C07\u8207\u60A8\u7684\u5E33\u6236",a("1"),"\u93C8\u63A5\u3002"]},"The default variant is erased when the extension is updated.":"當擴展更新時,預設變體將被刪除。","The description of the object should explain what the object is doing, and, briefly, how to use it.":"對目標的描述應解釋目標正在做些什么,并簡要解釋如何使用它。","The editor was unable to display the operation ({0}) used by the AI.":function(a){return["\u7DE8\u8F2F\u5668\u7121\u6CD5\u986F\u793A AI \u4F7F\u7528\u7684\u64CD\u4F5C (",a("0"),")\u3002"]},"The effect name {newName} is already taken":function(a){return["\u6548\u679C\u540D\u7A31 ",a("newName")," \u5DF2\u7D93\u88AB\u4F7F\u7528"]},"The email you provided already has a subscription with GDevelop. Please ask them to cancel it before adding them as a student in your team.":"您提供的電子郵件已經在 GDevelop 中有訂閱。請請他們在將他們加入您的團隊作為學生之前取消它。","The email you provided already has a subscription with GDevelop. Please ask them to cancel it before defining them as teacher in your team.":"您提供的電子郵件已經與 GDevelop 訂閱。請要求他們在將其定義為團隊中的教師之前先取消訂閱。","The email you provided could not be found.":"您提供的電子郵件無法找到。","The email you provided is already a member of your team.":"您提供的電子郵件已經是您團隊的成員。","The email you provided is already an admin in your team.":"您提供的電子郵件已經是您團隊中的管理員。","The email you provided is not an admin in your team.":"您提供的電子郵件不是您團隊中的管理員。","The extension can't be imported because it has the same name as a built-in extension.":"該擴展無法導入,因為它與內建擴展同名。","The extension installed in this project is not up to date. Consider upgrading it before reporting any issue.":"此項目中安裝的擴展不是最新的。在報告任何問題之前考慮升級它。","The extension was added to the project. You can now use it in the list of actions/conditions and, if it's a behavior, in the list of behaviors for an object.":"該擴展已添加到項目中。 您現在可以在操作/條件列表中使用它,如果它是一種行為,則可以在對象的行為列表中使用。","The far plane distance must be greater than the near plan distance.":"遠平面距離必須大于近平面距離。","The field of view cannot be lower than 0° or greater than 180°.":"視野不能小于0°或大于180°。","The file {0} is invalid.":function(a){return["\u6587\u4EF6 ",a("0")," \u7121\u6548\u3002"]},"The file {0} is too large. Use files that are smaller for your game: each must be less than {1} MB.":function(a){return["\u6587\u4EF6 ",a("0")," \u592A\u5927\u3002\u70BA\u60A8\u7684\u6E38\u6232\u4F7F\u7528\u8F03\u5C0F\u7684\u6587\u4EF6\uFF1A\u6BCF\u500B\u6587\u4EF6\u5FC5\u9808\u5C0F\u4E8E ",a("1")," MB\u3002"]},"The following actions, conditions, or expressions no longer exist in their extensions. This can happen when an extension's API has changed or when functionality has been removed. Update or remove these instructions.":"以下的動作、條件或表達式在其擴展中已不存在。這可能發生在擴展的API發生變更或功能被移除時。請更新或刪除這些指令。","The following events have invalid parameters (shown with red underline in the events sheet). Click a location to navigate there.":"以下事件有無效的參數(在事件表中顯示為紅色底線)。點擊位置以導航到那裡。","The following file(s) cannot be used for this kind of object: {0}":function(a){return["\u4EE5\u4E0B\u6587\u4EF6 (s) \u4E0D\u80FD\u7528\u4E8E\u9019\u985E\u5C0D\u8C61: ",a("0")]},"The font size is stored directly inside the font. If you want to change it, export again your font using an external editor like bmFont. Click on the help button to learn more.":"字體的大小直接存儲在字體內。 如果您想要更改其大小,請使用如 bmFont 的外部編輯器修改后重新導出導入您的字體。點擊幫助按鈕了解更多信息。","The force will only push the object during the time of one frame. Typically used in an event with no conditions or with conditions that stay valid for a certain amount of time.":"力只會推這個物體一幀。通常用在一個沒有條件的事件中,或在某段事件類有效的事件","The force will push the object forever, unless you use the action \"Stop the object\". Typically used in an event with conditions that are only true once, or with a \"Trigger Once\" condition.":"除非您使用“停止對象”操作,否則該力將永遠推動對象。通常用于帶有僅為一次真的條件,或具有“觸發一次”條件的事件中。","The free version is enough for me":"免費版本對我來說已經足夠了","The game template {0} will be linked to your account {1}.":function(a){return["\u6E38\u6232\u6A21\u677F ",a("0")," \u5C07\u93C8\u63A5\u5230\u60A8\u7684\u5E33\u6236 ",a("1"),"\u3002"]},"The game was properly exported. You can now use Electron Builder (you need Node.js installed and to use the command-line on your computer to run it) to create an executable.":"游戲已正確導出。您現在可以使用 Electron Builder (您需要安裝 Node.js,并且使用命令行來運行它) 來創建可執行文件。","The game you're trying to open is not registered online. Open the project file, then register it before continuing.":"您試圖打開的游戲沒有在線注冊。打開項目文件,然后注冊再繼續。","The icing on the cake":"錦上添花","The image should be at least 864x864px, and the logo must fit [within a circle of 576px](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions). Transparent borders are automatically added when generated to help ensuring":"圖片至少應為864x864像素,徽標必須適合[在576像素的圓圈內](https://developer.android.com/guide/topics/ui/splash-screen#splash_screen_dimensions)。生成時會自動添加透明邊框以幫助確保這一點。","The invitation sent to {email} will be cancelled.":function(a){return["\u767C\u9001\u81F3 ",a("email")," \u7684\u9080\u8ACB\u5C07\u88AB\u53D6\u6D88\u3002"]},"The latest save of \"{cloudProjectName}\" is corrupt and cannot be opened.":function(a){return[a("cloudProjectName"),"\u7684\u6700\u65B0\u4FDD\u5B58\u5DF2\u640D\u58DE\uFF0C\u7121\u6CD5\u6253\u958B\u3002"]},"The latest save of this project is corrupt and cannot be opened.":"此項目的最新保存已損壞,無法打開。","The layer {0} does not contain any object instances. Continue?":function(a){return["\u5716\u5C64 ",a("0")," \u4E0D\u5305\u542B\u4EFB\u4F55\u5C0D\u8C61\u5BE6\u4F8B\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F"]},"The light object was automatically placed on the Lighting layer.":"光照物件自動放置在照明圖層。","The lighting layer renders an ambient light on the scene. All lights should be placed on this layer so that shadows are properly rendered. By default, the layer follows the base layer camera. Uncheck this if you want to manually move the camera using events.":"照明圖層會在屏幕上渲染一個環境光。所有燈光都應放在這個照明圖層上,以使陰影得到正確的渲染。 默認情況下,將根據基礎圖層相機渲染。如果您想通過事件單獨控制本圖層相機,請取消選中此項。","The link to the asset pack you've followed seems outdated. Why not take a look at the other packs in the asset store?":"您所關注的資產包的鏈接似乎已過時。為什么不看看資產商店中的其他包呢?","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles in the store?":"您跟隨的捆綁包鏈接似乎已過時。為什麼不看看商店中的其他捆綁包?","The link to the bundle you've followed seems outdated. Why not take a look at the other bundles?":"您所關注的包的鏈接似乎已過時。為什麼不看看其他的包呢?","The link to the game template you've followed seems outdated. Why not take a look at the other templates in the store?":"您所關注的游戲模板的鏈接似乎已過時。為什么不看看商店中的其他模板呢?","The main account of the Education plan cannot be modified.":"教育計劃的主要帳戶無法修改。","The maximum 2D drawing distance must be strictly greater than 0.":"最大 2D 繪圖距離必須嚴格大於 0。","The model has {meshShapeTrianglesCount} triangles. To keep good performance, consider making a simplified model with a modeling tool.":function(a){return["\u8A72\u6A21\u578B\u6709 ",a("meshShapeTrianglesCount")," \u689D\u4E09\u89D2\u5F62\u3002\u70BA\u4E86\u4FDD\u6301\u826F\u597D\u7684\u6027\u80FD\uFF0C\u8003\u616E\u4F7F\u7528\u5EFA\u6A21\u5DE5\u5177\u88FD\u4F5C\u7C21\u5316\u6A21\u578B\u3002"]},"The monthly free asset pack perk was not part of your plan at the time you got your subscription to GDevelop. To enjoy this perk, please purchase a new subscription.":"當您訂閱 GDevelop 時,每月免費資產包福利并不屬于您的計劃的一部分。要享受此優惠,請購買新的訂閱。","The more descriptive you are, the better we can match the content we’ll recommend.":"您的描述性越強,我們就越能匹配我們推薦的內容。","The name of your game is empty":"您的遊戲名稱是空的","The near plane distance must be strictly greater than 0 and lower than the far plan distance.":"近平面距離必須嚴格大于 0 且小于遠平面距離。","The number of decimal places must be a whole value between {precisionMinValue} and {precisionMaxValue}":function(a){return["\u5C0F\u6578\u9EDE\u6578\u5FC5\u9808\u662F ",a("precisionMinValue")," \u548C ",a("precisionMaxValue")," \u4E4B\u9593\u7684\u6574\u6578\u503C"]},"The number of displayed entries must be a whole value between {displayedEntriesMinNumber} and {displayedEntriesMaxNumber}":function(a){return["\u986F\u793A\u7684\u689D\u76EE\u6578\u91CF\u5FC5\u9808\u662F\u4E00\u500B ",a("displayedEntriesMinNumber")," \u548C ",a("displayedEntriesMaxNumber")," \u4E4B\u9593\u7684\u6574\u6578\u503C"]},"The object does not exist or can't be used here.":"該對象不存在或不能在此處使用。","The package name begins with com.example, make sure you replace it with an unique one to be able to publish your game on app stores.":"軟件包名稱以 com.example 開頭,請確保將其替換為唯一的軟件包,以便能夠在應用商店上發布您的游戲。","The package name begins with com.example, make sure you replace it with an unique one, else installing your game might overwrite other games.":"軟件包名稱以com.example開始,請確保將其替換為唯一的軟件包,否則安裝您的游戲可能會覆蓋其他游戲。","The package name is containing invalid characters or not following the convention \"xxx.yyy.zzz\" (numbers allowed after a letter only).":"包名包含無效字符,或者未遵循“xxx.yy.zz”的規范(僅允許數字跟在字母后面)。","The package name is empty.":"包名稱為空。","The package name is too long.":"包名稱太長。","The password is invalid.":"密碼無效。","The password you entered is incorrect. Please try again.":"您輸入密碼不正確。請再試一次。","The polygon is not convex":"多邊形不是凸的","The polygon is not convex. Ensure it is, otherwise the collision mask won't work.":"此多邊形不是凸多邊形。請保證是凸多邊形,否則碰撞遮罩無法工作。","The preview could not be launched because an error happened: {0}.":function(a){return["\u7121\u6CD5\u555F\u52D5\u9810\u89BD\uFF0C\u56E0\u70BA\u767C\u751F\u932F\u8AA4\uFF1A ",a("0"),"\u3002"]},"The preview could not be launched because you're offline.":"由于您離線無法啟動預覽。","The project associated with this AI request does not match the current project. Open the correct project to restore to this state.":"與此 AI 請求相關的專案與當前專案不符。請打開正確的專案以還原至此狀態。","The project could not be saved. Please try again later.":"項目無法保存。請稍后再試。","The project currently opened is not registered online. Register it now to get access to leaderboards, player accounts, analytics and more!":"當前打開的項目未在線注冊。立即注冊以訪問排行榜、玩家帳戶、分析等!","The project currently opened is registered online but you don't have access to it. A link or file will be created but the game will not be registered.":"當前打開的項目已在線注冊,但您無法訪問該項目。一個鏈接或文件將被創建,但游戲將不會被注冊。","The project file appears to be corrupted, but an autosave file exists (backup made automatically by GDevelop on {0}). Would you like to try to load it instead?":function(a){return["\u9805\u76EE\u6587\u4EF6\u4F3C\u4E4E\u5DF2\u640D\u58DE\uFF0C\u4F46\u662F\u5B58\u5728\u81EA\u52D5\u4FDD\u5B58\u6587\u4EF6(\u7531 GDevelop \u5728 ",a("0")," \u81EA\u52D5\u5099\u4EFD)\u3002 \u4F60\u60F3\u8981\u52A0\u8F09\u5B83\u55CE\uFF1F"]},"The project save associated with this AI request message is no longer available due to your current plan's limit. Upgrade your subscription to access older project saves.":"此 AI 請求訊息相關的專案儲存因您當前計畫的限制而無法使用。請升級您的訂閱以存取較舊的專案儲存。","The project save associated with this AI request message was not found. It may have been deleted.":"未找到此 AI 請求訊息相關的專案儲存。它可能已被刪除。","The provisioning profile was properly stored ( {lastUploadedProvisioningProfileName}). If you properly uploaded the certificate before, it can now be used.":function(a){return["\u9810\u914D\u914D\u7F6E\u6587\u4EF6\u5DF2\u6B63\u78BA\u5B58\u5132 (",a("lastUploadedProvisioningProfileName"),")\u3002\u5982\u679C\u60A8\u4E4B\u524D\u6B63\u78BA\u4E0A\u50B3\u4E86\u8B49\u66F8\uFF0C\u73FE\u5728\u5C31\u53EF\u4EE5\u4F7F\u7528\u4E86\u3002"]},"The purchase will be linked to your account once done.":"購買完成后將鏈接到您的帳戶。","The request could not be processed. Please verify you uploaded a valid certificate file (.cer) from Apple.":"請確認您上傳了來自蘋果的有效證書文件 (.cer)。","The request could not reach the servers, ensure you are connected to internet.":"請求無法到達服務器,確保您已連接到互聯網。","The resource has been downloaded":"資源已下載","The result wasn't as good as it could have been":"結果沒有達到應有的好處","The selected resource is not a proper Spine resource.":"所選資源不是正確的 Spine 資源。","The sentence displays one or more wrongs parameters:":"該句子顯示一個或多個錯誤參數:","The sentence is probably missing this/these parameter(s):":"該句可能丟失以下參數:()","The server is currently unavailable. Please try again later.":"服務目前無法使用。請稍後再試。","The shape used in the Physics behavior is independent from the collision mask of the object. Be sure to use the \"Collision\" condition provided by the Physics behavior in the events. The usual \"Collision\" condition won't take into account the shape that you've set up here.":"物理行為中使用的形狀獨立于物體的碰撞遮罩。 請務必使用由在事件中的物理行為提供的“碰撞”條件。通常的“碰撞”條件不會考慮您在此處設置的形狀。","The specified external events do not exist in the game. Be sure that the name is correctly spelled or create them using the project manager.":"指定的外部事件不在游戲中。請確認名稱正確,也可以使用項目管理器創建。","The subscription of this account comes from outside the app store. Connect with your account on editor.gdevelop.io from your web-browser to manage it.":"該賬號的訂閱來自於應用商店之外。從您的網絡瀏覽器連接到您在 editor.gdevelop.io 上的帳戶以對其進行管理。","The subscription of this account was done using Apple or Google Play. Connect on your account on your Apple or Google device to manage it.":"此帳戶的訂閱是使用 Apple 或 Google Play 完成的。在您的 Apple 或 Google 設備上連接您的帳戶以對其進行管理。","The text input will be always shown on top of all other objects in the game - this is a limitation that can't be changed. According to the platform/device or browser running the game, the appearance can also slightly change.":"文本輸入將始終顯示在游戲中所有其他對象的頂部——這是一個無法更改的限制。根據運行游戲的平臺/設備或瀏覽器的不同,游戲的外觀也會略有變化。","The tilemap must be designed in a separated program, Tiled, that can be downloaded on mapeditor.org. Save your map as a JSON file, then select here the Atlas image that you used and the Tile map JSON file.":"必須在單獨的程序Tiled中設計tilemap,可以在mapeditor.org上下載該程序。將地圖另存為JSON文件,然后在此處選擇您使用的Atlas圖像和Tile Map JSON文件。","The token used to claim this purchase is invalid.":"用於索取此購買的令牌無效。","The uploaded certificate does not match the signing request that was generated. Please create a new signing request and generate a new certificate from Apple using it.":"上傳的證書與生成的簽名請求不匹配。請創建新的簽名請求,並使用它從蘋果生成新的證書。","The usage of a number or expression is deprecated. Please now use only \"Permanent\" or \"Instant\" for configuring forces.":"使用一個數字或表達式已被廢棄。現在只能用“Permanent(永久)”或“Instan(即時)”來配置力。","The variable name contains a space - this is not recommended. Prefer to use underscores or uppercase letters to separate words.":"變量名稱包含一個空格 - 不推薦使用這個空格。更喜歡使用下劃線或大寫字母分隔單詞。","The variable name looks like you're building an expression or a formula. You can only use this for structure or arrays. For example: Score[3].":"變量名稱看起來像你正在構建一個表達式或公式。 您只能使用這個結構或數組。例如:得分[3]。","The version history is available for cloud projects only.":"版本歷史記錄僅適用于云項目。","The version that you've set for the game is invalid.":"您為游戲設置的版本無效。","The {productType} {productName} will be linked to your account {0}":function(a){return["\u7522\u54C1\u985E\u578B ",a("productType")," \u7684 ",a("productName")," \u5C07\u8207\u60A8\u7684\u5E33\u6236 ",a("0")," \u93C8\u63A5\u3002"]},"There are currently no leaderboards created for this game. Open the leaderboards manager to create one.":"當前沒有為這場游戲創建排行榜。打開排行榜管理器創建一個。","There are no <0>2D effects on this layer.":"這個圖層上沒有<0>2D 特效。","There are no <0>3D effects on this layer.":"這個圖層上沒有<0>3D 特效。","There are no <0>behaviors on this object instance.":"這個物件實例上沒有<0>行為。","There are no <0>behaviors on this object.":"這個物件上沒有<0>行為。","There are no <0>effects on this object.":"這個物件上沒有<0>效果。","There are no <0>variables on this object.":"這個物件上沒有<0>變量。","There are no <0>variables on this scene.":"這個場景上沒有<0>變數。","There are no common <0>variables on this group objects.":"這些群組物件中沒有共同的<0>變數。","There are no objects. Objects will appear if you add some as parameter or add children to the object.":"沒有對象。 如果您把一些對象作為參數添加時,對象才會出現。","There are no objects. Objects will appear if you add some as parameters.":"沒有對象。如果您把一些對象作為參數添加時,對象才會出現。","There are no provisioning profile created for this certificate. Create one in the Apple Developer interface and add it here.":"沒有為此證書創建配置文件。在 Apple Developer 界面中創建一個并將其添加到此處。","There are no variables on this instance.":"這個實例上沒有變數。","There are unsaved changes":"有未保存的更改","There are variables used in events but not declared in this list: {0}.":function(a){return["\u5728\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u4E86\u8B8A\u91CF\uFF0C\u4F46\u5728\u6B64\u5217\u8868\u4E2D\u6C92\u6709\u8072\u660E: ",a("0"),"\u3002"]},"There are {instancesCountInLayout} object instances on this layer. Should they be moved to another layer?":function(a){return["\u6B64\u5C64\u4E0A\u6709 ",a("instancesCountInLayout")," \u5C0D\u8C61\u5BE6\u4F8B\u3002\u662F\u5426\u61C9\u8A72\u5C07\u5B83\u5011\u79FB\u52D5\u5230\u53E6\u4E00\u5C64\uFF1F"]},"There are {instancesCount} instances of objects on this layer.":function(a){return["\u6B64\u5716\u5C64\u4E0A\u6709 ",a("instancesCount")," \u500B\u5C0D\u8C61\u5BE6\u4F8B\u3002"]},"There is no <0>global object yet.":"還沒有 <0> 全局對象 。","There is no behavior to set up for this object.":"There is no behavior to set up for this object.","There is no extension to update.":"沒有可更新的擴展。","There is no global group yet.":"還沒有全局組。","There is no object in your game or in this scene. Start by adding an new object in the scene editor, using the objects list.":"您的游戲或本場景中沒有對象。請在場景編輯器的對象列表中,添加一個新的對象。","There is no variable to set up.":"There is no variable to set up.","There is no variant to update.":"沒有可更新的變體。","There is nothing to configure for this behavior. You can still use events to interact with the object and this behavior.":"沒有任何可用來配置此行為。您仍然可以使用事件來與對象和這種行為互動。","There is nothing to configure for this effect.":"沒有任何需要配置的。","There is nothing to configure for this object. You can still use events to interact with the object.":"沒有任何可用來配置此行為。您仍然可以使用事件來與對象和這種行為互動。","There is nothing to configure.":"沒有什么需要配置的。","There was a problem":"出現了一個問題","There was an error verifying the URL(s). Please check they are correct.":"驗證URL(s)時出錯。請檢查它們是否正確。","There was an error while canceling your subscription. Verify your internet connection or try again later.":"取消訂閱時出錯。請驗證您的互聯網連接或稍后重試。","There was an error while creating the object \"{0}\". Verify your internet connection or try again later.":function(a){return["\u5275\u5EFA\u5C0D\u8C61\u201C",a("0"),"\u201D\u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u518D\u8A66\u3002"]},"There was an error while installing the asset \"{0}\". Verify your internet connection or try again later.":function(a){return["\u5B89\u88DD\u8CC7\u7522 \"",a("0"),"\" \u6642\u51FA\u932F\u3002\u8ACB\u9A57\u8B49\u60A8\u7684\u4E92\u806F\u7DB2\u9023\u63A5\u6216\u7A0D\u540E\u91CD\u8A66\u3002"]},"There was an error while making an auto-save of the project. Verify that you have permissions to write in the project folder.":"自動保存項目時出錯。請驗證您是否有寫入項目文件夾的權限。","There was an error while updating the game's thumbnail on gd.games. Verify your internet connection or try again later.":"在 gd.games 更新遊戲的縮略圖時出錯。請檢查您的網絡連接或稍後再試。","There was an error while uploading some resources. Verify your internet connection or try again later.":"上傳某些資源時出錯。請驗證您的互聯網連接或稍后再試。","There was an issue getting the game analytics.":"獲取游戲分析時出現問題。","There was an unknown error when trying to apply the code. Double check the code, try again later or contact us if this persists.":"嘗試應用代碼時出現未知錯誤。仔細檢查代碼,稍后再試,如果問題仍然存在,請聯系我們。","There were errors when importing resources for the project. You can retry (recommended) or continue despite the errors. In this case, the project might be missing some resources.":"導入專案資源時出錯。您可以重試(推薦)或繼續,儘管出現錯誤。在這種情況下,專案可能缺少一些資源。","There were errors when loading extensions. You cannot continue using GDevelop.":"There were errors when loading extensions. You cannot continue using GDevelop.","There were errors when preparing new leaderboards for the project.":"在為項目準備新的排行榜時發生錯誤。","These are behaviors":"這些是行為","These are objects":"這些是物件","These behaviors are already attached to the object:{0}Do you want to replace their property values?":function(a){return["\u9019\u4E9B\u884C\u70BA\u5DF2\u7D93\u9644\u52A0\u5230\u5C0D\u8C61: ",a("0"),"\u662F\u5426\u8981\u66FF\u63DB\u5B83\u5011\u7684\u5C6C\u6027\u503C\uFF1F"]},"These effects already exist:{0}Do you want to replace them?":function(a){return["\u9019\u4E9B\u6548\u679C\u5DF2\u7D93\u5B58\u5728:",a("0"),"\u4F60\u60F3\u8981\u66FF\u63DB\u5B83\u5011\u55CE\uFF1F"]},"These parameters already exist:{0}Do you want to replace them?":function(a){return["\u9019\u4E9B\u53C3\u6578\u5DF2\u5B58\u5728\uFF1A",a("0"),"\u60A8\u60F3\u66FF\u63DB\u5B83\u5011\u55CE\uFF1F"]},"These properties already exist:{0}Do you want to replace them?":function(a){return["\u9019\u4E9B\u5C6C\u6027\u5DF2\u7D93\u5B58\u5728\uFF1A",a("0"),"\u60A8\u60F3\u8981\u66FF\u63DB\u5B83\u5011\u55CE\uFF1F"]},"These variables hold additional information and are available on all objects of the group.":"這些變量包含有關對象的附加信息。","These variables hold additional information on a project.":"這些變量包含項目的附加信息。","These variables hold additional information on a scene.":"這些變量包含場景中的附加信息。","These variables hold additional information on an object.":"這些變量包含有關對象的附加信息。","Thickness":"厚度","Thinking about your request...":"正在思考您的請求……","Thinking through the approach":"考慮這種方法","Thinking through the details":"考慮這些細節","Third editor":"第三編輯器","Third-party":"第三方","This Auth Key was not sent or is not ready to be used.":"此身份驗證密鑰尚未發送或尚未準備好使用。","This Else event is not preceded by a standard event (or another Else), so it will run normally, like an event without an Else.":"此其他事件前面沒有標準事件(或其他其他),因此它將正常運行,像沒有其他的事件。","This Else event will run if the previous event conditions are not met.":"如果前一個事件條件不符合,則此其他事件將運行。","This Spine resource was exported with Spine {spineVersion}. The runtime requires data exported from Spine 4.2. Animations may not work correctly — please re-export from Spine 4.2.":function(a){return["\u6B64 Spine \u8CC7\u6E90\u5DF2\u4F7F\u7528 Spine ",a("spineVersion")," \u8F38\u51FA\u3002\u904B\u884C\u6642\u9700\u8981\u5F9E Spine 4.2 \u8F38\u51FA\u7684\u6578\u64DA\u3002\u52D5\u756B\u53EF\u80FD\u7121\u6CD5\u6B63\u78BA\u904B\u884C \u2014 \u8ACB\u91CD\u65B0\u5F9E Spine 4.2 \u5C0E\u51FA\u3002"]},"This account already owns this product, you cannot activate it again.":"此帳戶已擁有此產品,您無法再次啟用它。","This account has been deactivated or deleted.":"此帳戶已被停用或刪除。","This account is already a student in another team.":"此帳戶已經是另一個團隊的學生。","This action cannot be undone.":"此操作無法撤銷。","This action is deprecated and should not be used anymore. Instead, use for all your objects the behavior called \"Physics2\" and the associated actions (in this case, all objects must be set up to use Physics2, you can't mix the behaviors).":"此操作被廢棄,不應再使用。相反,現在應該使用“物理2”插件的所有對象,行為和相關動作 (在這種情況下,所有對象都必須設置使用物理2插件,您不能混合行為)","This action is deprecated and should not be used anymore. Instead, use the \"Text input\" object.":"此操作已過時,不應再使用。請改用「文本輸入」對象。","This action is not automatic yet, we will get in touch to gather your bank details.":"此操作尚未自動完成,我們將與您聯繫以收集您的銀行詳細信息。","This action will create a new texture and re-render the text each time it is called, which is expensive and can reduce performance. Avoid changing the character size of text frequently.":"此操作將創建一個新的紋理,每當它被調用時都會重新渲染文本,這會消耗大量資源並降低性能。避免頻繁更改文本的字符大小。","This asset requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u8CC7\u7522\u9700\u8981\u66F4\u65B0\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u64F4\u5C55",a("0"),"\u4F60\u60F3\u7ACB\u5373\u66F4\u65B0\u5B83\u5011\u55CE\uFF1F"]},"This behavior can be updated with new features and fixes.{0}Do you want to update it now ?":function(a){return["\u6B64\u884C\u70BA\u53EF\u4EE5\u901A\u904E\u65B0\u529F\u80FD\u548C\u4FEE\u5FA9\u9032\u884C\u66F4\u65B0\u3002",a("0"),"\u4F60\u60F3\u73FE\u5728\u66F4\u65B0\u5B83\u55CE\uFF1F"]},"This behavior can be updated. You may have to do some adaptations to make sure your game still works.{0}Do you want to update it now ?":function(a){return["\u6B64\u884C\u70BA\u53EF\u4EE5\u66F4\u65B0\u3002\u4F60\u53EF\u80FD\u9700\u8981\u505A\u4E00\u4E9B\u8ABF\u6574\uFF0C\u4EE5\u78BA\u4FDD\u4F60\u7684\u904A\u6232\u4ECD\u7136\u6709\u6548\u3002",a("0"),"\u4F60\u60F3\u73FE\u5728\u66F4\u65B0\u5B83\u55CE\uFF1F"]},"This behavior can't be setup per instance.":"這個行為無法根據實例設定。","This behavior is being used by multiple types of objects. Thus, you can't restrict its usage to any particular object type. All the object types using this behavior are listed here: {0}":function(a){return["\u591A\u7A2E\u985E\u578B\u7684\u5C0D\u8C61\u6B63\u5728\u4F7F\u7528\u6B64\u884C\u70BA\uFF0C\u56E0\u6B64\u60A8\u4E0D\u80FD\u5C07\u5176\u7528\u6CD5\u9650\u5236\u70BA\u4EFB\u4F55\u7279\u5B9A\u7684\u5C0D\u8C61\u985E\u578B\u3002\u6B64\u8655\u5217\u51FA\u4E86\u4F7F\u7528\u6B64\u884C\u70BA\u7684\u6240\u6709\u5C0D\u8C61\u985E\u578B\uFF1A ",a("0")]},"This behavior is unknown. It might be a behavior that was defined in an extension and that was later removed. You should delete it.":"此行為未知。它可能是在擴展名中定義并隨后被刪除的行為。您應該刪除它。","This behavior requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u884C\u70BA\u9700\u8981\u66F4\u65B0\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u64F4\u5C55",a("0"),"\u4F60\u60F3\u7ACB\u5373\u66F4\u65B0\u5B83\u5011\u55CE\uFF1F"]},"This behavior will be visible in the scene and events editors.":"此行為將在場景和事件編輯器中可見。","This behavior won't be visible in the scene and events editors.":"此行為在場景和事件編輯器中不可見。","This build is old and the generated games can't be downloaded anymore.":"這個構建太老了,生成的游戲已經不可下載","This bundle contains a subscription for {planName}. Do you want to activate your subscription right away?":function(a){return["\u8A72\u675F\u5305\u542B\u76AE\u8A02\u95B1 ",a("planName"),"\u3002\u4F60\u60F3\u7ACB\u5373\u555F\u52D5\u4F60\u7684\u8A02\u95B1\u55CE\uFF1F"]},"This bundle includes:":"此捆綁包包括:","This can be customized for each scene in the scene properties dialog.":"這可以在場景屬性對話框中為每個場景進行自定義。","This can either be a URL to a web page, or a path starting with a slash that will be opened in the GDevelop wiki. Leave empty if there is no help page, although it's recommended you eventually write one if you distribute the extension.":"它可以是網頁的URL,也可以是將在GDevelop Wiki中打開的以斜杠開頭的路徑。如果沒有幫助頁面,請保留為空,盡管建議您在分發擴展時最終寫一個幫助頁面。","This certificate has an unknown type and is probably unable to be used by GDevelop.":"該證書的類型未知,GDevelop 可能無法使用。","This certificate type is unknown and might not work when building the app. Are you sure you want to continue?":"此證書類型未知,并且在構建應用程序時可能不起作用。你確定你要繼續嗎?","This certificate was not sent or is not ready to be used.":"該證書尚未發送或尚未準備好使用。","This code is a coupon code and can't be redeemed here. Start a purchase and enter it there to get a discount.":"此代碼為優惠券代碼,無法在此兌換。開始購買並在那裡輸入以獲得折扣。","This code is not valid - verify you've entered it properly.":"此代碼無效 - 請驗證您輸入的代碼是否正確。","This code was valid but can't be redeemed anymore. If this is unexpected, contact us or the code provider.":"此代碼有效但無法再兌換。如果這是意外,請聯系我們或代碼提供商。","This condition may have unexpected results when the object is on different floors at the same time, due to the fact that the engine only considers the first floor the object comes into contact with.":"當對象同時處于不同的地板上,這個條件可能會產生意外的結果。 由于引擎只考慮到一層,對象會被碰到。","This course is translated in multiple languages.":"本課程已翻譯成多種語言。","This email is invalid.":"此電子郵件無效。","This email was already used for another account.":"此電子郵件已被用于另一個帳戶。","This event will be repeated for all instances.":"此事件將對所有實例重複。","This event will be repeated only for the first instances, up to this limit.":"此事件僅對前面的實例重複,直到此限制。","This extension requires updates to extensions that have breaking changes{0}Do you want to update them now?":function(a){return["\u6B64\u64F4\u5C55\u9700\u8981\u66F4\u65B0\u5177\u6709\u91CD\u5927\u66F4\u6539\u7684\u64F4\u5C55",a("0"),"\u4F60\u60F3\u7ACB\u5373\u66F4\u65B0\u5B83\u5011\u55CE\uFF1F"]},"This file is an extension file for GDevelop 5. You should instead import it, using the window to add a new extension to your project.":"此文件是GDevelop 5的擴展文件。您應該導入它,使用窗口向項目添加新的擴展。","This file is corrupt":"此文件已損壞","This file is not recognized as a GDevelop 5 project. Be sure to open a file that was saved using GDevelop.":"此文件不是 GDevelop 5 工程文件。請務必打開使用 GDevelop 保存過的文件。","This function calls itself (it is \"recursive\"). Ensure this is expected and there is a proper condition to stop it if necessary.":"該函數調用自身(它是“遞歸的”)。確保這是預期的,并且有適當的條件可以在必要時停止它。","This function is asynchronous - it will only allow subsequent events to run after calling the action \"End asynchronous task\" within the function.":"該函數是異步的 - 它只允許在調用函數內的“結束異步任務”操作后運行后續事件。","This function is marked as deprecated. It will be displayed with a warning in the events editor.":"此功能已標記為過時。它將在事件編輯器中顯示警告。","This function will be visible in the events editor.":"此函數將在事件編輯器中可見。","This function will have a lot of parameters. Consider creating groups or functions for a smaller set of objects so that the function is easier to reuse.":"此函數會有許多參數。考慮為較小的一組對象創建組或函數,以便使函數更容易再使用。","This function won't be visible in the events editor.":"此功能在事件編輯器中不可見。","This game is not registered online. Do you want to register it to access the online features?":"此遊戲尚未在線註冊。您是否要註冊以訪問在線功能?","This game is registered online but you don't have access to it. Ask the owner of the game to add your account to the list of owners to be able to manage it.":"此遊戲已在線註冊,但您無法訪問它。請要求遊戲的所有者將您的帳戶添加到擁有者列表中以便能夠管理它。","This game is using leaderboards. GDevelop will create new leaderboards for this game in your account, so that the game is ready to be played and players can send their scores.":"此游戲使用排行榜。GDevelop將在您的帳戶中為此游戲創建新的排行榜,以便游戲準備就緒,玩家可以發送他們的分數。","This group contains objects of different kinds. You'll only be able to use actions and conditions common to all objects with this group.":"該組包含不同種類的對象。您將只能使用該組中所有對象共有的操作和條件。","This group contains objects of the same kind ({type}). You can use actions and conditions related to this kind of objects in events with this group.":function(a){return["\u8A72\u7D44\u5305\u542B\u76F8\u540C\u985E\u578B (",a("type"),") \u7684\u5C0D\u8C61\u3002\u60A8\u53EF\u4EE5\u5728\u6B64\u7D44\u7684\u4E8B\u4EF6\u4E2D\u4F7F\u7528\u8207\u6B64\u985E\u5C0D\u8C61\u76F8\u95DC\u7684\u64CD\u4F5C\u548C\u689D\u4EF6\u3002"]},"This invitation is no longer valid.":"該邀請不再有效。","This is a \"lifecycle function\". It will be called automatically by the game engine. It has no parameters.":"這是一種“生命周期函數”。遊戲引擎會自動調用它。它沒有參數。","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene having the behavior.":"這是一個“生命周期方法”。對于場景中擁有該行為的每個實例,這個方法都會被游戲引擎自動調用。","This is a \"lifecycle method\". It will be called automatically by the game engine for each instance living on the scene.":"這是一種“生命周期方法”。游戲引擎會為場景中的每個實例自動調用它。","This is a behavior.":"這是一個行為。","This is a condition.":"這是一個條件。","This is a multichapter tutorial. GDevelop will save your progress so you can take a break when you need it.":"這是一個多章節的教學。在需要時,GDevelop將保存您的進度,以便您可以休息。","This is a relative path that will open in the GDevelop wiki.":"這是在 GDevelop wiki 中打開的相對路徑。","This is all the feedback received on {0} coming from gd.games.":function(a){return["\u9019\u662F\u5728 ",a("0")," \u6536\u5230\u7684\u4F86\u81EA gd.games \u7684\u6240\u6709\u53CD\u994B\u3002"]},"This is an action.":"這是一個動作。","This is an asynchronous action, meaning that the actions and sub-events following it will wait for it to end. You should use other async actions like \"wait\" to schedule your actions and don't forget to use the action \"End asynchronous function\" to mark the end of the action.":"這是一個異步動作,意味著它后面的動作和子事件將等待它結束。您應該使用其他異步動作,如“等待”,來安排您的動作,並且不要忘記使用“結束異步函數”動作來標記動作的結束。","This is an event.":"這是一個事件。","This is an expression.":"這是一個表達式。","This is an extension made by a community member and it only got through a light review by the GDevelop extension team. As such, we can't guarantee it meets all the quality standards of fully reviewed extensions.":"這是一個由社區成員製作的擴展,僅經過GDevelop擴展團隊的輕微審查。因此,我們無法保證它符合所有全面審查的擴展的質量標準。","This is an extension.":"這是一個擴展。","This is an object.":"這是一個物體。","This is link to a webpage.":"這是鏈接到一個網頁。","This is not a URL starting with \"http://\" or \"https://\".":"這不是以 \"http://\" 或 \"https://\" 開頭的URL。","This is recommended as this allows you to earn money from your games. If you disable this, your game will not show any advertisement.":"這是建議的,因為這能讓您從遊戲中賺取金錢。如果您禁用此功能,您的遊戲將不會顯示任何廣告。","This is the configuration of your behavior. Make sure to choose a proper internal name as it's hard to change it later. Enter a description explaining what the behavior is doing to the object.":"這是你的行為配置。確保選擇一個合適的內部名稱,因為以后很難更改它。輸入一個描述,以解釋行為對對象的作用。","This is the configuration of your object. Make sure to choose a proper internal name as it's hard to change it later.":"這是您對象的配置。請確保選擇一個合適的內部名稱,因為以後很難更改。","This is the end of the version history.":"這是版本歷史的結束。","This is the list of builds that you've done for this game. <0/>Note that builds for mobile and desktop are available for 7 days, after which they are removed.":"這是你為這個游戲做的構建列表。<0/>注意,手機和桌面版本可用7天,之后將被刪除。","This leaderboard is already resetting, please wait a bit, close the dialog, come back and try again.":"該排行榜已經重置,請等一下,關閉對話框,回來然后重試。","This link is private. You can share it with collaborators, friends or testers.<0/>When you're ready, go to the Game Dashboard and publish it on gd.games.":"此鏈接是私有的。您可以與合作者、朋友或測試人員分享。<0/>準備好后,前往游戲儀表板並在 gd.games 上發布。","This month":"本月","This needs improvement":"這需要改進","This object can't be used here because it would create a circular dependency with the object being edited.":"這個物件無法在這裡使用,因為它會與正在編輯的物件產生循環依賴。","This object does not have any specific configuration. Add it on the scene and use events to interact with it.":"該對象沒有任何特定的配置。請把它添加到場景中,并通過事件與其交互。","This object exists, but can't be used here.":"此對象存在,但無法在此處使用。","This object group is empty and locked.":"This object group is empty and locked.","This object has no behaviors: please add a behavior to the object first.":"該對象沒有行為:請先給該對象添加一個行為。","This object has no properties.":"這個物件沒有屬性。","This object misses some behaviors: {0}":function(a){return["\u6B64\u5C0D\u8C61\u7F3A\u5C11\u67D0\u4E9B\u884C\u70BA: ",a("0")]},"This object will be visible in the scene and events editors.":"此物件將在場景和事件編輯器中可見。","This object won't be visible in the scene and events editors.":"此物件在場景和事件編輯器中不可見。","This password is too weak: please use more letters and digits.":"密碼太弱:請使用更多的字母和數字。","This project cannot be opened":"無法打開此項目","This project contains toolbar buttons that want to run npm scripts on your computer ({scriptNames}). Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["\u6B64\u5C08\u6848\u5305\u542B\u60F3\u5728\u60A8\u7684\u96FB\u8166\u4E0A\u904B\u884C npm \u8173\u672C\u7684\u5DE5\u5177\u5217\u6309\u9215\uFF08",a("scriptNames"),"\uFF09\u3002\u53EA\u6709\u5728\u60A8\u81EA\u5DF1\u5275\u5EFA package.json \u6216\u5F9E\u60A8\u4FE1\u4EFB\u7684\u4F86\u6E90\u7372\u5F97\u6642\u624D\u5141\u8A31\u9019\u6A23\u505A\u3002\u60E1\u610F\u8173\u672C\u53EF\u80FD\u6703\u640D\u5BB3\u60A8\u7684\u96FB\u8166\u6216\u7ACA\u53D6\u60A8\u7684\u6578\u64DA\u3002"]},"This project has an auto-saved version":"此項目有一個自動保存的版本","This project has configured npm scripts ({scriptNames}) to run automatically when the \"{hookName}\" editor lifecycle hook fires. Only allow this if you created package.json yourself or got it from a source you trust. Malicious scripts could harm your computer or steal your data.":function(a){return["\u6B64\u5C08\u6848\u5DF2\u914D\u7F6E npm \u8173\u672C (",a("scriptNames"),") \u4EE5\u4FBF\u7576 \"",a("hookName"),"\" \u7DE8\u8F2F\u5668\u751F\u547D\u9031\u671F\u9264\u5B50\u89F8\u767C\u6642\u81EA\u52D5\u904B\u884C\u3002\u53EA\u6709\u5728\u60A8\u81EA\u5DF1\u5275\u5EFA package.json \u6216\u5F9E\u60A8\u4FE1\u4EFB\u7684\u4F86\u6E90\u7372\u53D6\u6642\uFF0C\u624D\u53EF\u4EE5\u5141\u8A31\u9019\u6A23\u505A\u3002\u60E1\u610F\u8173\u672C\u53EF\u80FD\u6703\u640D\u5BB3\u60A8\u7684\u8A08\u7B97\u6A5F\u6216\u7ACA\u53D6\u60A8\u7684\u6578\u64DA\u3002"]},"This project was modified by someone else on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["\u6B64\u9805\u76EE\u5DF2\u7531\u5176\u4ED6\u4EBA\u5728 ",a("formattedDate")," \u7684 ",a("formattedTime")," \u4FEE\u6539\u3002\u662F\u5426\u8986\u84CB\u5176\u66F4\u6539\uFF1F"]},"This project was modified by {lastUsernameWhoModifiedProject} on the {formattedDate} at {formattedTime}. Do you want to overwrite their changes?":function(a){return["\u6B64\u9805\u76EE\u7531 ",a("lastUsernameWhoModifiedProject")," \u4E8E ",a("formattedDate")," \u5728 ",a("formattedTime")," \u4FEE\u6539\u3002\u662F\u5426\u8986\u84CB\u5176\u66F4\u6539\uFF1F"]},"This property won't be visible in the editor.":"該屬性在編輯器中不可見。","This purchase cannot be claimed.":"此購買無法被索取。","This purchase could not be found. Please contact support for more information.":"找不到此購買。請聯繫客服以獲取更多資訊。","This purchase has already been activated.":"此購買已經被啟用。","This request is for another project. <0>Start a new chat to build on a new project.":"此請求是為了另一個專案。<0>開始一個新聊天以建立一個新專案。","This resource does not exist in the game":"此資源在游戲中不存在","This scene will be used as the start scene.":"此場景將被用作開始場景。","This setting changes the visibility of the entire layer. Objects on the layer will not be treated as \"hidden\" for event conditions or actions.":"此設置更改整個圖層的可見性。對于事件條件或動作,圖層上的對象不會被視為\"隱藏\"。","This shortcut clashes with another action.":"這個快捷鍵與另一個沖突。","This sprite uses a rectangle that is as large as the sprite for its collision mask.":"該精靈使用與精靈一樣大的矩形作為其碰撞遮罩。","This tutorial must be unlocked to be accessed.":"此教程必須先解鎖才能訪問。","This user does not have projects yet.":"此用戶還沒有項目。","This user is already a collaborator.":"此用戶已是合作者。","This user was not found: have you created your account?":"找不到此用戶:您是否創建了您的帳戶?","This username is already used, please pick another one.":"此用戶名已被使用,請選擇其他用戶名。","This variable does not exist. <0>Click to add it.":"此變數不存在。<0>點擊以添加。","This variable has the same name as an object. Consider renaming one or the other.":"此變量與對象同名。請考慮重命名其中一個或另一个。","This variable is not declared. It's recommended to use the *variables editor* to add it.":"此變量未聲明。建議使用 *變量編輯器* 來添加它。","This variant can't be modified directly. It must be duplicated first.":"此變體無法直接修改。必須先複製它。","This version of GDevelop is:":"當前 GDevelop 的版本是:","This was helpful":"這是有幫助的","This week":"本周","This will be used when packaging and submitting your application to the stores.":"這將在打包應用程序并將其提交到應用商店時使用。","This will close your current project. Unsaved changes will be lost.":"這將關閉您當前的項目。未保存的更改將會丟失。","This will export your game as a Cordova project. Cordova is a technology that enables HTML5 games to be packaged for iOS and Android.":"這會將您的游戲導出為 Cordova 項目。 Cordova 是一項使 HTML5 游戲能夠打包用于 iOS 和 Android 的技術。","This will export your game so that you can package it for Windows, macOS or Linux. You will need to install third-party tools (Node.js, Electron Builder) to package your game.":"這將導出您的游戲,以便您可以將其打包為Windows,macOS或Linux。 您需要安裝第三方工具(Node.js,Electron Builder)來打包您的游戲。","This will export your game to a folder. You can then upload it on a website/game hosting service and share it on marketplaces and gaming portals like CrazyGames, Poki, Game Jolt, itch.io, Newgrounds...":"這將導出你的游戲到一個文件夾。 然后您可以在網站/游戲托管服務上上傳它,并在市場和游戲門戶網站上分享它,如CrazyGames、Poki、Game Jolt、itch.io、Newground...","This year":"今年","This/these file(s) are outside the project folder. Would you like to make a copy of them in your project folder first (recommended)?":"此文件/這些文件不在項目文件夾之內。您想要先將這些文件復制到您的工程文件夾中嗎(推薦)?","Through a teacher":"通過一個老師","Throwing physics":"投擲物理","TikTok":"抖音","Tile Map":"瓦片地圖","Tile Set":"瓦塊集","Tile map resource":"瓦片地圖資源","Tile picker":"瓷磚選擇器","Tile size":"圖塊大小","Tiled sprite":"平鋪貼圖","Tilemap":"磚塊地圖","Tilemap painter":"Tilemap 畫家","Time (ms)":"時間 (毫秒)","Time between frames":"幀之間的時間","Time format":"時間格式","Time score":"時間排名","Timers":"計時器","Timers:":"計時器:","Timestamp: {0}":function(a){return["\u6642\u9593\u6233: ",a("0")]},"Tiny":"最小","Title cannot be empty.":"標題不能為空。","To avoid flickering on objects followed by the camera, use sprites with even dimensions.":"為了避免在相機跟隨的對象上閃爍,使用偶數尺寸的精靈。","To begin, open or create a new project.":"打開或創建一個新項目以開始。","To buy this new subscription, we need to stop your existing one before you can pay for the new one. This means the redemption code you're currently used won't be usable anymore.":"要購買這個新訂閱,我們需要在您支付新訂閱之前停止您現有的訂閱。這意味著您目前使用的兌換代碼將不再可用。","To confirm, type \"{translatedConfirmText}\"":function(a){return["\u82E5\u8981\u78BA\u8A8D\uFF0C\u8ACB\u8F38\u5165 \"",a("translatedConfirmText"),"\""]},"To edit the external events, choose the scene in which it will be included":"要編輯外部事件,請選擇將包含它的場景","To edit the external layout, choose the scene in which it will be included":"要編輯外部布局,請選擇將包含它的場景","To get this new subscription, we need to stop your existing one before you can pay for the new one. This is immediate but your payment will NOT be pro-rated (you will pay the full price for the new subscription). You won't lose any project, game or other data.":"要獲得這一新訂閱,我們需要先停止您現有的訂閱,然后您才能支付新訂閱的費用。這是即時的,但您的付款不會按比例計算 (您將為新訂閱支付全價)。您不會丟失任何項目、游戲或其他數據。","To keep using GDevelop cloud, consider deleting old, unused projects.":"要繼續使用 GDevelop 云,請考慮刪除舊、未使用的項目。","To keep using GDevelop leaderboards, consider deleting old, unused leaderboards.":"要繼續使用 GDevelop 排行榜,請考慮刪除舊的、未使用的排行榜。","To obtain the best pixel-perfect effect possible, go in the resources editor and disable the Smoothing for all images of your game. It will be done automatically for new images added from now.":"要獲得盡可能最好的像素完美效果,請進入資源編輯器并禁用游戲所有圖像的平滑處理。它將自動完成從現在開始添加的新圖像。","To preview the shape that the Physics engine will use for this object, choose first a temporary image to use for the preview.":"要預覽物理引擎將為此對象使用的形狀,首先選擇一個臨時圖像用于預覽。","To start a timer, don't forget to use the action \"Start (or reset) a scene timer\" in another event.":"要啟動計時器,不要忘記在另一個事件中使用“開始(或重置)場景計時器”的動作。","To start a timer, don't forget to use the action \"Start (or reset) an object timer\" in another event.":"要啟動計時器,不要忘記在另一個事件中使用“開始(或重置)對象計時器”的動作。","To update your seats, contact us at education@gdevelop.io with the details of your current account and how many seats you would like.":"要更新您的名額,請聯繫我們,郵件至 education@gdevelop.io,並提供您當前帳戶的詳細信息及您希望的名額。","To use this formatting, you must send a score expressed in seconds":"要使用此格式,必須發送以秒為單位的分數","Today":"今天","Toggle Developer Tools":"切換開發者工具","Toggle Disabled":"切換禁用","Toggle Fullscreen":"切換全屏","Toggle Instances List Panel":"切換實例列表面板","Toggle Layers Panel":"切換圖層面板","Toggle Object Groups Panel":"切換對象組面板","Toggle Objects Panel":"切換對象面板","Toggle Properties Panel":"切換屬性面板","Toggle Wait the Action to End":"切換等待動作結束","Toggle disabled event":"切換禁用事件","Toggle grid":"切換網格","Toggle inverted condition":"切換反向條件","Toggle mask":"切換遮罩(mask)","Toggle/edit grid":"切換/編輯網格","Too many things were changed or broken":"太多事情被更改或損壞了","Top":"頂端","Top bound":"上邊界","Top bound should be smaller than bottom bound":"上邊界應小於底部邊界","Top face":"頂面","Top left corner":"左上角","Top margin":"上邊距","Top right corner":"右上角","Top-Down RPG Pixel Perfect":"自上而下 RPG 像素完美","Top-down":"自上而下","Top-down, classic editor":"自上而下的經典編輯器","Total":"總計","Touch (mobile)":"觸控(移動)","Tracked C++ objects exposed to JavaScript. Counts refresh every second.":"被暴露給 JavaScript 的 C++ 對象。計數每秒刷新。","Transform a game into a multiplayer experience.":"將遊戲轉換為多人體驗。","Transform this Plinko game with collectibles that multiply your score.":"使用可以增加您分數的收藏品變形這個 Plinko 遊戲。","Transform this platformer into a co-op game, where two players can play together.":"將這個平台遊戲轉變為一個合作遊戲,讓兩名玩家可以一起遊玩。","Triangle":"三角形","True":"是","True (checked)":"True (選中)","True or False":"True 或 False","True or False (boolean)":"是與非(布爾值)","Try again":"再試一次","Try different search terms or check your search options.":"嘗試不同的搜尋詞或檢查您的搜尋選項。","Try installing it from the extension store.":"嘗試從擴展商店安裝它。","Try it online":"在線試用","Try something else, browse the packs or create your object from scratch!":"嘗試其他東西,瀏覽包或從零開始創建您的對象!","Try your game":"試玩您的遊戲","Tutorial":"教程","Tweak gameplay":"調整遊戲玩法","Twitter":"推特","Type":"類型","Type of License: <0>{0}":function(a){return["\u8A31\u53EF\u8B49\u985E\u578B\uFF1A <0>",a("0"),""]},"Type of License: {0}":function(a){return["\u8A31\u53EF\u8B49\u985E\u578B\uFF1A",a("0")]},"Type of objects":"對象類型","Type your email address to delete your account:":"輸入您的電子郵件地址以刪除您的帳戶:","Type your email to confirm":"輸入您的電子郵件以確認","Type:":"類型:","UI Theme":"界面主題","UI/Interface":"UI/界面","URL":"網址","Unable to change feedback for this game":"無法更改此游戲的反饋","Unable to change quality rating of feedback.":"無法更改反饋的質量評級。","Unable to change read status of feedback.":"無法更改反饋的讀取狀態。","Unable to change your email preferences":"無法更改您的電子郵件首選項","Unable to create a new project for the course chapter. Try again later.":"無法為課程章節創建新項目。請稍後重試。","Unable to create a new project for the tutorial. Try again later.":"無法為本教程創建新項目。請稍后再試。","Unable to create the project":"無法創建項目","Unable to delete the project":"無法刪除項目","Unable to download and install the extension and its dependencies. Verify that your internet connection is working or try again later.":"無法下載並安裝擴展及其依賴項。驗證你的網絡連接是否工作,或者稍後再試。","Unable to download the icon. Verify your internet connection or try again later.":"無法下載此圖標。請驗證您的網絡連接或稍后再試。","Unable to fetch leaderboards as you are offline.":"無法取得排行榜,因為您是離線狀態。","Unable to fetch the example.":"無法獲取示例。","Unable to find the price for this asset pack. Please try again later.":"無法找到此資源包的價格。請稍后再試。","Unable to find the price for this bundle. Please try again later.":"無法找到此捆綁包的價格。請稍後再試。","Unable to find the price for this course. Please try again later.":"無法找到此課程的價格。請稍後再試。","Unable to find the price for this game template. Please try again later.":"無法找到此游戲模板的價格。請稍后再試。","Unable to get the checkout URL. Please try again later.":"無法獲取結帳 URL。請稍后再試。","Unable to load the code editor":"無法加載代碼編輯器","Unable to load the image":"無法載入圖像","Unable to load the information about the latest GDevelop releases. Verify your internet connection or retry later.":"無法加載最新的 GDevelop 版本的信息。驗證您的互聯網連接或稍后重試。","Unable to load the tutorial. Please try again later or contact us if the problem persists.":"無法加載教程。請稍后再試,如果問題仍然存在,請聯系我們。","Unable to mark one of the feedback as read.":"無法將其中一個反饋標記為已讀。","Unable to open the project":"無法打開項目","Unable to open the project because this provider is unknown: {storageProviderName}. Try to open the project again from another location.":function(a){return["\u7121\u6CD5\u6253\u958B\u9805\u76EE\uFF0C\u56E0\u70BA\u6B64\u63D0\u4F9B\u5546\u672A\u77E5\uFF1A ",a("storageProviderName"),"\u3002\u8ACB\u5617\u8A66\u5F9E\u53E6\u4E00\u500B\u4F4D\u7F6E\u91CD\u65B0\u6253\u958B\u9805\u76EE\u3002"]},"Unable to open the project.":"不能打開項目.","Unable to open this file.":"不能打開這個文件.","Unable to open this window":"無法打開此窗口","Unable to register the game":"無法注冊游戲","Unable to remove collaborator":"無法刪除合作者","Unable to save the project":"無法保存項目","Unable to start the debugger server! Make sure that you are authorized to run servers on this computer.":"無法啟動調試器服務器!請確保您被授權在這臺計算機上運行服務器。","Unable to start the server for the preview! Make sure that you are authorized to run servers on this computer. Otherwise, use classic preview to test your game.":"無法啟動預覽服務器!請確保您被授權在這臺計算機上運行服務器。否則,使用經典預覽來測試您的游戲。","Unable to unregister the game":"無法取消註冊遊戲","Unable to update game.":"無法更新游戲。","Unable to update the game details.":"無法更新游戲詳細信息。","Unable to update the game owners or authors. Have you removed yourself from the owners?":"無法更新游戲所有者或作者。您是否已將自己從所有者中刪除?","Unable to update the game slug. A slug must be 6 to 30 characters long and only contains letters, digits or dashes.":"無法更新游戲slug。slug必須是 6 到 30 個字符,且只包含字母、數字或破折號。","Unable to verify URLs {0} . Please check they are correct.":function(a){return["\u7121\u6CD5\u9A57\u8B49 URL ",a("0")," \u3002\u8ACB\u6AA2\u67E5\u5B83\u5011\u662F\u5426\u6B63\u78BA\u3002"]},"Understanding the context":"理解上下文","Understood, I'll check my Apple or Google account":"明白了,我會檢查我的 Apple 或 Google 賬號","Undo":"撤消","Undo the last changes":"撤消上次更改","Unfortunately, this extension requires a newer version of GDevelop to work. Update GDevelop to be able to use this extension in your project.":"不幸的是,此擴展需要更新版本的 GDevelop 才能工作。更新 GDevelop 以便能夠在您的項目中使用此擴展。","Unknown behavior":"未知行為","Unknown bundle":"未知的套件","Unknown certificate type":"未知證書類型","Unknown changes attempted for scene {scene_name}.":function(a){return["\u5617\u8A66\u9032\u884C\u672A\u77E5\u7684\u66F4\u6539\u65BC\u5834\u666F ",a("scene_name"),"\u3002"]},"Unknown game":"未知的遊戲","Unknown status":"未知狀態","Unknown status.":"未知狀態","Unlimited":"無限制","Unlimited commercial use license for claim with Gold or Pro subscription":"通過黃金或專業訂閱即可獲得無限商業使用許可","Unload at scene exit":"在場景退出時卸載","Unloading of scene resources":"場景資源的卸載","Unlock full access to GDevelop to create without limits!":"解鎖對 GDevelop 的完全訪問權限,無限制地進行創作!","Unlock the whole course":"解鎖整個課程","Unlock this lesson to finish the course":"解鎖此課程以完成課程","Unlock with the full course":"用完整課程解鎖","Unnamed":"未命名的","Unregister game":"注銷游戲","Unsaved changes":"未保存的更改","Untitled external events":"未命名的外部事件","Untitled external layout":"未命名的外部布局","Untitled scene":"未命名場景","UntitledExtension":"無標題擴展名","Update":"更新","Update (could break the project)":"更新(可能破壞項目)","Update <0>{label} of <1>{object_name} (in scene {scene_name}) to <2>{newValue}.":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0 <0>",a("label")," \u7684 <1>",a("object_name"),"\uFF08\u65BC\u5834\u666F\uFF09\u81F3 <2>",a("newValue"),"\u3002"]},"Update <0>{label} of behavior {behavior_name} on object <1>{object_name} (in scene <2>{scene_name}) to <3>{newValue}.":function(a){return["\u66F4\u65B0\u7269\u4EF6 <1>",a("object_name")," \u4E4B\u884C\u70BA ",a("behavior_name")," \u5728\u5834\u666F <2>",a("scene_name")," \u4E2D\u7684 <0>",a("label")," \u81F3 <3>",a("newValue"),"\u3002"]},"Update GDevelop to latest version":"將 GDevelop 更新到最新版本","Update events in scene <0>{scene_name}.":function(a){return["\u5728\u5834\u666F <0>",a("scene_name")," \u4E2D\u66F4\u65B0\u4E8B\u4EF6\u3002"]},"Update game page":"更新遊戲頁面","Update resolution during the game to fit the screen or window size":"在游戲過程中更新分辨率以適合屏幕或窗口大小","Update some scene effects and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u6548\u679C\u548C\u7FA4\u7D44\u3002"]},"Update some scene effects and layers for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u6548\u679C\u548C\u5716\u5C64\u3002"]},"Update some scene effects for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u6548\u679C\u3002"]},"Update some scene effects, layers and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u6548\u679C\u3001\u5716\u5C64\u548C\u7FA4\u7D44\u3002"]},"Update some scene groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u7FA4\u7D44\u3002"]},"Update some scene layers and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5716\u5C64\u548C\u7FA4\u7D44\u3002"]},"Update some scene layers for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5716\u5C64\u3002"]},"Update some scene properties and effects for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u548C\u6548\u679C\u3002"]},"Update some scene properties and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u548C\u7FA4\u7D44\u3002"]},"Update some scene properties and layers for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u548C\u5716\u5C64\u3002"]},"Update some scene properties for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u3002"]},"Update some scene properties, effects and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u3001\u6548\u679C\u548C\u7FA4\u7D44\u3002"]},"Update some scene properties, layers and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u3001\u5716\u5C64\u548C\u7FA4\u7D44\u3002"]},"Update some scene properties, layers, effects and groups for scene {scene_name}.":function(a){return["\u66F4\u65B0\u5834\u666F ",a("scene_name")," \u7684\u67D0\u4E9B\u5834\u666F\u5C6C\u6027\u3001\u5716\u5C64\u3001\u6548\u679C\u548C\u7FA4\u7D44\u3002"]},"Update the extension":"更新擴展","Update your seats":"更新您的名額","Update your subscription":"更新您的訂閱","Update {0} properties of <0>{object_name} (in scene {scene_name}).":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0 <0>",a("object_name")," \u7684 ",a("0")," \u5C6C\u6027\u3002"]},"Update {0} settings of behavior {behavior_name} on object {object_name} (in scene {scene_name}).":function(a){return["\u5728\u5834\u666F ",a("scene_name")," \u4E2D\u66F4\u65B0\u7269\u4EF6 ",a("object_name")," \u4E0A\u7684\u884C\u70BA ",a("behavior_name")," \u7684 ",a("0")," \u8A2D\u7F6E\u3002"]},"Updates":"更新","Updating...":"正在更新……","Upgrade":"升級","Upgrade for:":"升級以便:","Upgrade subscription":"升級訂閱","Upgrade to GDevelop Premium":"升級至 GDevelop Premium","Upgrade to GDevelop Premium to get more leaderboards, storage, and one-click packagings!":"升級到 GDevelop 高級版以獲得更多排行榜、存儲空間和一鍵打包!","Upgrade to get more cloud projects, AI usage, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"升級以在每個月獲得更多的雲項目、人工智能使用、發佈、多人遊戲、課程和GDevelop Premium的點數。","Upgrade to get more cloud projects, publishing, multiplayer, courses and credits every month with GDevelop Premium.":"升級以獲取更多雲端項目、發布、多人遊戲、課程和每月的積分,使用 GDevelop Premium。","Upgrade your GDevelop subscription to unlock this packaging.":"升級您的 GDevelop 訂閱即可解鎖此包。","Upgrade your Premium Plan":"升級您的高級計畫","Upgrade your Premium subscription to have more AI requests and GDevelop coins to unlock the engine's extra benefits.":"升級您的 Premium 訂閱以擁有更多 AI 請求和 GDevelop 硬幣,以解鎖引擎的額外好處。","Upgrade your subscription":"升級您的訂閱","Upgrade your subscription to keep building with AI.":"升級您的訂閱以繼續與 AI 建立應用程式。","Upload to build service":"上傳到構建服務","Uploading your game...":"正在上傳您的游戲...","Use":"使用","Use 3D rendering":"使用 3D 渲染","Use <0><1/>{variableName} as the loop counter":function(a){return["\u4F7F\u7528 <0><1/>",a("variableName")," \u4F5C\u70BA\u8FF4\u5708\u8A08\u6578\u5668"]},"Use GDevelop Credits":"使用 GDevelop 積分","Use GDevelop credits or get a subscription to increase the limits.":"使用 GDevelop 積分或訂閱來增加限制。","Use GDevelop credits or upgrade your subscription to increase the limits.":"使用 GDevelop 積分或升級您的訂閱來增加限制。","Use GDevelop credits to start an export.":"使用 GDevelop 積分開始導出。","Use a Tilemap to build a level and change it dynamically during the game.":"使用磚塊地圖來構建一個關卡,並在遊戲中動態更改它。","Use a custom collision mask":"使用自定義碰撞遮罩","Use a public URL":"使用公共 URL","Use an expression":"使用表達式","Use as...":"用作...","Use custom CSS for the leaderboard":"使用自定義 CSS 制作排行榜","Use experimental background serializer for saving projects":"使用實驗性背景序列化工具來保存專案","Use full image as collision mask":"使用完整圖像作為碰撞遮罩","Use icon":"使用圖示","Use legacy renderer":"使用舊版渲染器","Use same collision mask":"使用相同的碰撞遮罩","Use same collision mask for all animations?":"對所有動畫使用相同的碰撞遮罩?","Use same collision mask for all frames?":"對所有幀使用相同的碰撞遮罩?","Use same points":"使用相同的點","Use same points for all animations?":"對所有動畫使用相同的點?","Use same points for all frames?":"對所有幀使用相同的點?","Use the project setting":"使用項目設置","Use this external layout inside this scene to start all previews":"使用此場景內的外部布局來開始所有預覽","Use this scene to start all previews":"使用此場景開始所有預覽","Use your email":"使用你的電子郵件","User interface":"用戶界面","User name in the game URL":"游戲URL中的用戶名","Username":"用戶名","Usernames are required to choose a custom game URL.":"需要用戶名才能選擇自定義游戲URL。","Users can choose to see only players' best entries or not.":"用戶可以選擇只查看玩家的最佳作品。","Users will be created with an anonymous email. You can later define a full name, a username, or update the generated password if needed.":"用戶將使用匿名電子郵件創建。您可以稍後定義全名、用戶名或在需要時更新生成的密碼。","Using GDevelop Credits":"使用 GDevelop 積分中","Using Nearest Scale Mode":"使用最近的縮放模式","Using a lot of effects can have a severe negative impact on the rendering performance, especially on low-end or mobile devices. Consider using less effects if possible. You can also disable and re-enable effects as needed using events.":"使用太多的效果會對渲染性能產生嚴重的負面影響,特別是對低端或移動設備的影響很大。 如果可能,請考慮減少特效。您也可以禁用和重新啟用特效,視需要使用事件。","Using effects":"使用效果","Using empty events based behavior":"使用基于事件的空行為","Using empty events based object":"使用基于空事件的對象","Using events based behavior":"使用基于事件的行為","Using events based object":"使用基于事件的對象","Using function extractor":"使用函數提取器","Using lighting layer":"使用照明圖層","Using non smoothed textures":"使用非平滑紋理","Using pixel rounding":"使用像素舍入","Using the resource properties panel":"使用資源屬性面板","Using too much effects":"使用過多效果","Validate these parameters":"驗證這些參數","Validating...":"驗證中...","Value":"值","Variable":"變量","Variables":"變量","Variables declared in all objects of the group will be visible in event expressions.":"在該組的所有對象中聲明的變量將在事件表達式中可見。","Variables list":"變量列表","Variant":"Variant","Variant name":"Variant name","Variant updates":"變體更新","Verify that you have the authorization for reading the file you're trying to access.":"驗證您是否已授權閱讀您要訪問的文件。","Verify your internet connection or try again later.":"驗證您的網絡連接或稍后再試。","Version":"版本","Version number (X.Y.Z)":"版本號 (X.Y.Z)","Version {0}":function(a){return["\u7248\u672C ",a("0")]},"Version {0} ({1} available)":function(a){return["\u7248\u672C ",a("0")," (",a("1")," \u53EF\u7528)"]},"Version {version} is available and will be downloaded and installed automatically.":function(a){return["\u7248\u672C ",a("version")," \u53EF\u7528\uFF0C\u5C07\u81EA\u52D5\u4E0B\u8F09\u4E26\u5B89\u88DD\u3002"]},"Version {version} is available. Open About to download and install it.":function(a){return["\u7248\u672C ",a("version")," \u53EF\u7528\u3002\u6253\u958B\u300C\u95DC\u65BC\u300D\u4EE5\u4E0B\u8F09\u4E26\u5B89\u88DD\u3002"]},"Vertical anchor":"垂直錨點","Vertical flip":"垂直翻轉","Video":"視頻","Video format supported can vary according to devices and browsers. For maximum compatibility, use H.264/mp4 file format (and AAC for audio).":"根據不同設備和瀏覽器支持多種視頻格式。為達到最大兼容性,請使用 H.264/mp4 格式的視頻文件 (音頻請使用AAC)。","Video game":"電子游戲","Video resource":"視頻資源","View":"查看","View history":"查看歷史記錄","View original chat":"查看原始聊天","Viewers":"觀眾","Viewpoint":"視點","Visibility":"可見性","Visibility and instances ordering":"可見性與實例排序","Visibility in quick customization dialog":"在快速自訂對話框中的可見性","Visible":"可見","Visible in editor":"編輯器中可見","Visible in the search and your profile":"在搜索和您的個人檔案中可見","Visual Effects":"視覺效果","Visual appearance":"視覺外觀","Visual appearance (advanced)":"視覺外觀(高級)","Visual effect":"視覺效果","Visuals":"可見性","Wait for the action to end before executing the actions (and subevents) following it":"等待操作結束,然后再執行其后的操作(和子事件)","Waiting for the purchase confirmation...":"正在等待購買確認...","Waiting for the subscription confirmation...":"正在等待訂閱確認...","Wallet":"錢包","Want to know more?":"想知道更多嗎?","Warning":"警告","Watch changes in game engine (GDJS) sources and auto import them (dev only)":"觀看游戲引擎(GDJS) 源中的更改并自動導入(僅限開發人員)","Watch the project folder for file changes in order to refresh the resources used in the editor (images, 3D models, fonts, etc.)":"查看項目文件夾中的文件更改,以刷新編輯器中使用的資源 (圖像、3D模型、字體等)","Watch tutorial":"觀看教程","We could not check your follow":"我們無法檢查您的關注","We could not check your subscription":"我們無法檢查您的訂閱","We could not find your GitHub star":"我們找不到您的 GitHub 星號","We could not find your GitHub user and star":"我們找不到您的 GitHub 用戶和星號","We could not find your user":"我們找不到您的用戶","We couldn't find a version to go back to.":"我們找不到要返回的版本。","We couldn't find your project.{0}If your project is stored on a different computer, launch GDevelop on that computer.{1}Otherwise, use the \"Open project\" button and find it in your filesystem.":function(a){return["\u6211\u5011\u627E\u4E0D\u5230\u60A8\u7684\u9805\u76EE\u3002",a("0"),"\u5982\u679C\u60A8\u7684\u9805\u76EE\u5B58\u5132\u5728\u5176\u4ED6\u8A08\u7B97\u6A5F\u4E0A\uFF0C\u8ACB\u5728\u8A72\u8A08\u7B97\u6A5F\u4E0A\u555F\u52D5 GDevelop\u3002",a("1"),"\u5426\u5247\uFF0C\u8ACB\u4F7F\u7528\u201C\u6253\u958B\u9805\u76EE\u201D\u6309\u9215\u4E26\u5728\u6587\u4EF6\u7CFB\u7D71\u4E2D\u627E\u5230\u5B83\u3002"]},"We couldn't load your cloud projects. Verify your internet connection or try again later.":"我們無法加載您的云項目。請驗證您的互聯網連接或稍后再試。","We have found a non-corrupt save from {0} available for modification.":function(a){return["\u6211\u5011\u767C\u73FE\u4F86\u81EA ",a("0")," \u7684\u672A\u640D\u58DE\u5B58\u6A94\u53EF\u4F9B\u4FEE\u6539\u3002"]},"Web":"網頁","Web Build":"Web 版本","Web builds":"Web 版本","Welcome back!":"歡迎回來!","Welcome to GDevelop!":"歡迎使用 GDevelop !","What are you using GDevelop for?":"你用GDevelop做什么?","What could be improved?":"What could be improved?","What do you want to make?":"你想做什麼?","What is a good GDevelop feature I could use in my game?":"我可以在我的遊戲中使用的好 GDevelop 特性是什麼?","What is your goal with GDevelop?":"您使用 GDevelop 的目標是什么?","What kind of projects are you building?":"您正在建造什么類型的項目?","What kind of projects do you want to build with GDevelop?":"您想使用 GDevelop 構建什么樣的項目?","What should I do next?":"我接下來該做什麼?","What went wrong?":"發生了什麼錯誤?","What would you add to my game?":"你會為我的遊戲增加什麼?","What would you like to create?":"你想創建什麼?","What would you like to do next?":"您接下來想做什麼?","What would you like to do with this uncorrupted version of your project?":"您希望如何處理這個未損壞的項目版本?","What's included:":"包含內容:","What's new in GDevelop?":"GDevelop 中的新內容?","What's new?":"更新日志","When checked, will only display the best score of each player (only for the display below).":"選中時,將只顯示每個玩家的最佳分數(僅用于下面的顯示)。","When do you plan to finish or release your projects?":"您計劃什么時候完成或發布您的項目?","When previewing the game in the editor, this duration is ignored (the game preview starts as soon as possible).":"當在編輯器中預覽游戲時,此持續時間將被忽略(游戲預覽盡快開始)。","When you create an object using an action, GDevelop now sets the Z order of the object to the maximum value that was found when starting the scene for each layer. This allow to make sure that objects that you create are in front of others. This game was created before this change, so GDevelop maintains the old behavior: newly created objects Z order is set to 0. It's recommended that you switch to the new behavior by clicking the following button.":"當您使用動作創建對象時,GDevelop現在會將對象的Z順序設置為開始每一層場景時發現的最大值。這樣可以確保您創建的對象位于其他對象的前面。該游戲是在此更改之前創建的,因此GDevelop保留了舊的行為:新創建的對象Z順序設置為0。建議您通過單擊以下按鈕切換到新行為。","Where are you planing to publish your project(s)?":"您打算在哪里發布您的項目(s)?","Where to store this project":"存儲此項目的位置","While these conditions are true:":"如果這些條件都為真:","Width":"寬度","Window":"窗口","Window title":"窗口標題","Windows (auto-installer file)":"Windows (自動安裝程序文件)","Windows (exe)":"Windows (exe)","Windows (zip file)":"Windows (zip 文件)","Windows (zip)":"Windows (zip)","Windows, MacOS and Linux":"Windows、 MacOS 和 Linux","Windows, MacOS, Linux (Steam, MS Store...)":"Windows、MacOS 和 Linux (Steam、MS Store...)","Windows, macOS & Linux":"Windows、macOS 和 Linux","Windows/macOS/Linux (manual)":"Windows/macOS/Linux (手動)","Windows/macOS/Linux Build":"Windows/macOS/Linux 版本","With an established team of people during the whole project":"在整個項目期間擁有一支成熟的團隊","With at least one other person":"至少和另一個人","With placeholder":"使用佔位符","Working...":"工作中……","Would you like to describe your projects?":"您想描述一下您的項目嗎?","Would you like to open the non-corrupt version instead?":"您想要打開非損壞的版本嗎?","Write events for scene <0>{scene_name}.":function(a){return["\u70BA\u5834\u666F <0>",a("scene_name")," \u5BEB\u5165\u4E8B\u4EF6\u3002"]},"X":"X軸","X offset (in pixels)":"X 偏移 (像素)","Y":"Y軸","Y offset (in pixels)":"Y 偏移 (像素)","Year":"年","Yearly, {0}":function(a){return["\u6BCF\u5E74\uFF0C",a("0")]},"Yearly, {0} per seat":function(a){return["\u6BCF\u5E74\uFF0C",a("0")," \u6BCF\u5EA7\u4F4D"]},"Yes":"是","Yes or No":"是或否","Yes or No (boolean)":"是或否 (布爾值)","Yes, and enable auto-edit":"是的,並啟用自動編輯","Yes, discard my changes":"是的,放棄我的更改","Yes, just this change":"是的,僅此更改","Yesterday":"昨天","You already have an account for this email address with a different provider (Google, Apple or GitHub). Please try with one of those.":"您已在其他提供商 (Google、Apple 或 GitHub) 處擁有此電子郵件地址的帳戶。請嘗試其中之一。","You already have an active {translatedName} featuring for your game {0}. Check your emails or discord, we will get in touch with you to get the campaign up!":function(a){return["\u60A8\u5DF2\u7D93\u70BA\u60A8\u7684\u6E38\u6232 ",a("0")," \u63D0\u4F9B\u4E86\u4E00\u500B\u6709\u6548\u7684 ",a("translatedName"),"\u3002\u6AA2\u67E5\u60A8\u7684\u96FB\u5B50\u90F5\u4EF6\u6216\u4E0D\u548C\u8AE7\uFF0C\u6211\u5011\u5C07\u8207\u60A8\u806F\u7CFB\u4EE5\u555F\u52D5\u6D3B\u52D5\uFF01"]},"You already have these {0} assets installed, do you want to add them again?":function(a){return["\u60A8\u5DF2\u7D93\u5B89\u88DD\u4E86 ",a("0")," \u500B\u8CC7\u7522\uFF0C\u60A8\u60F3\u8981\u518D\u6B21\u6DFB\u52A0\u5B83\u5011\u55CE\uFF1F"]},"You already have {0} asset(s) in your scene. Do you want to add the remaining {1} one(s)?":function(a){return["\u60A8\u7684\u5834\u666F\u4E2D\u5DF2\u7D93\u6709 ",a("0")," \u500B\u8CC7\u7522\u3002\u60A8\u60F3\u8981\u6DFB\u52A0\u5269\u4F59\u7684 ",a("1")," \u500B(s)\u55CE\uFF1F"]},"You already own this product":"您已經擁有這個產品","You already own {0}!":function(a){return["\u60A8\u5DF2\u7D93\u64C1\u6709 ",a("0"),"\uFF01"]},"You already used this code - you can't reuse a code multiple times.":"您已經使用過此代碼 - 您不能多次重復使用代碼。","You are about to delete an object":"您將要刪除一個對象","You are about to delete the project {projectName}, which is currently opened. If you proceed, the project will be closed and you will lose any unsaved changes. Do you want to proceed?":function(a){return["\u60A8\u5373\u5C07\u522A\u9664\u7576\u524D\u5DF2\u958B\u555F\u7684\u5C08\u6848 ",a("projectName"),"\u3002\u5982\u679C\u60A8\u7E7C\u7E8C\uFF0C\u5C08\u6848\u5C07\u88AB\u95DC\u9589\uFF0C\u4E14\u60A8\u5C07\u5931\u53BB\u6240\u6709\u672A\u4FDD\u5B58\u7684\u66F4\u6539\u3002\u60A8\u60F3\u8981\u7E7C\u7E8C\u55CE\uFF1F"]},"You are about to quit the tutorial.":"您即將退出該教程。","You are about to remove \"{0}\" from the list of your projects.{1}It will not delete it from your disk and you can always re-open it later. Do you want to proceed?":function(a){return["\u60A8\u5373\u5C07\u5F9E\u9805\u76EE\u5217\u8868\u4E2D\u522A\u9664\u201C",a("0"),"\u201D\u3002",a("1"),"\u6B64\u64CD\u4F5C\u4E0D\u6703\u5C07\u5176\u5F9E\u78C1\u789F\u4E2D\u522A\u9664\uFF0C\u60A8\u53EF\u4EE5\u96A8\u6642\u7A0D\u5F8C\u91CD\u65B0\u6253\u958B\u5B83\u3002\u60A8\u8981\u7E7C\u7E8C\u55CE\uFF1F"]},"You are about to remove the last sprite of this object, which has a custom collision mask. The custom collision mask will be lost. Are you sure you want to continue?":"您將要刪除該對象的最后一個精靈,該對象具有自定義碰撞遮罩。自定義碰撞遮罩將會丟失。你確定你要繼續嗎?","You are about to remove {0}{1} from the list of collaborators. Are you sure?":function(a){return["\u60A8\u5C07\u5F9E\u5408\u4F5C\u8005\u5217\u8868\u4E2D\u522A\u9664 ",a("0"),a("1")," \u3002\u60A8\u78BA\u5B9A\u55CE\uFF1F"]},"You are about to use {assetPackCreditsAmount} credits to purchase the asset pack {0}. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("assetPackCreditsAmount")," \u7A4D\u5206\u4F86\u8CFC\u8CB7\u8CC7\u7522\u5305 ",a("0"),"\u3002\u7E7C\u7E8C\uFF1F"]},"You are about to use {creditsAmount} credits to purchase the course \"{translatedCourseTitle}\". Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528",a("creditsAmount"),"\u7A4D\u5206\u8CFC\u8CB7\u8AB2\u7A0B\u201C",a("translatedCourseTitle"),"\u201D\u3002\u7E7C\u7E8C\u55CE\uFF1F"]},"You are about to use {gameTemplateCreditsAmount} credits to purchase the game template {0}. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("gameTemplateCreditsAmount")," \u7A4D\u5206\u8CFC\u8CB7\u6E38\u6232\u6A21\u677F ",a("0"),"\u3002\u7E7C\u7E8C\uFF1F"]},"You are about to use {planCreditsAmount} credits to extend the game featuring {translatedName} for your game {0} and push it to the top of gd.games. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("planCreditsAmount")," \u7A4D\u5206\u4F86\u64F4\u5C55\u60A8\u7684\u6E38\u6232 ",a("0")," \u4E2D\u5305\u542B ",a("translatedName")," \u7684\u6E38\u6232\uFF0C\u5E76\u5C07\u5176\u63A8\u81F3 gd.games \u7684\u9802\u90E8\u3002\u7E7C\u7E8C\uFF1F"]},"You are about to use {planCreditsAmount} credits to purchase the game featuring {translatedName} for your game {0}. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("planCreditsAmount")," \u7A4D\u5206\u70BA\u60A8\u7684\u6E38\u6232 ",a("0")," \u8CFC\u8CB7\u5305\u542B ",a("translatedName")," \u7684\u6E38\u6232\u3002\u7E7C\u7E8C\uFF1F"]},"You are about to use {usageCreditPrice} credits to start this build. Continue?":function(a){return["\u60A8\u5C07\u4F7F\u7528 ",a("usageCreditPrice")," \u7A4D\u5206\u4F86\u958B\u59CB\u6B64\u69CB\u5EFA\u3002\u7E7C\u7E8C\uFF1F"]},"You are already a member of this team.":"您已經是此團隊的成員。","You are in raw mode. You can edit the fields, but be aware that this can lead to unexpected results or even crash the debugged game!":"您處于原始模式。您可以編輯字段,但這可能導致意外結果甚至崩潰調試游戲!","You are missing out on asset store discounts and other benefits! Verify your email address. Didn't receive it?":"你錯過了資產商店的折扣和其他好處! 核實你的電子郵件地址。沒有收到嗎?","You are not connected. Create an account to build your game for Android, Windows, macOS and Linux in one click, and get access to metrics for your game.":"您尚未連接。創建一個帳戶即可一鍵構建適用于Android,Windows,macOS和Linux的游戲,并可以訪問游戲指標。","You are not owner of this project, so you cannot invite collaborators.":"您不是此項目的所有者,所以您不能邀請合作者。","You are not the owner of this game, ask the owner to add you as an owner to see its exports.":"您不是該游戲的所有者,請要求所有者將您添加為所有者以查看其導出。","You can <0>help translate GDevelop into your language.":"You can <0>help translate GDevelop into your language.","You can add students who already have a GDevelop account. They will receive a notification to accept the invitation. If they don't have an account, they can create one with their student email.":"您可以添加已經擁有 GDevelop 帳戶的學生。他們將收到通知以接受邀請。如果他們沒有帳戶,他們可以使用他們的學生電子郵件創建一個。","You can also launch a preview from this external layout, but remember that it will still create objects from the scene, as well as trigger its events. Make sure to disable any action loading the external layout before doing so to avoid having duplicate objects!":"您也可以從這個外部布局啟動一個預覽,但請記住,它仍將創建場景中的對象,并觸發其事件。請務必禁用任何行動載入的外部布局之前,這樣做,以避免有重復的對象!","You can always do it later by redeeming a code on your profile.":"您可以隨時透過在您的個人檔案中兌換代碼來稍後再執行此操作。","You can configure the following properties and they will be applied as soon as you share your game with an export to gd.games.":"您可以配置以下屬性,這些屬性將在您與 gd.games 共享遊戲時立即生效。","You can contribute and <0>create your own themes.":"您可以貢獻并且<0>創建自己的主題。","You can download the file of your game to continue working on it using the full GDevelop version:":"您可以使用完整的 GDevelop 版本,下載您的游戲文件,以便繼續使用它:","You can export the extension to a file to easily import it in another project. If your extension is providing useful and reusable functions or behaviors, consider sharing it with the GDevelop community!":"你可以將擴展名導出到文件,以便在另一個項目中輕松導入。如果你的擴展名提供有用并可重復使用的函數或行為,請考慮與GDevelop社區分享它!","You can find your cloud projects in the Create section of the homepage.":"您可以在主頁的創建部分找到您的雲項目。","You can install it from the Project Manager.":"您可以從項目管理器安裝它。","You can now compile the game by yourself using Cordova command-line tool to iOS (XCode is required) or Android (Android SDK is required).":"您現在可以使用 Cordova command-line 工具編譯游戲到 iOS (XCode 是必需的) 或 Android SDK 。","You can now create a game on Facebook Instant Games, if not already done, and upload the generated archive.":"您現在可以在 Facebook 即時游戲上創建游戲,如果還沒有創建,然后上傳生成的存檔。","You can now go back to the asset store to use the assets in your games.":"您現在可以返回資產商店以在游戲中使用資產。","You can now go back to the course.":"您現在可以返回課程。","You can now go back to the store to use your new game template.":"您現在可以返回商店使用您的新游戲模板。","You can now go back to use your new bundle.":"您現在可以返回使用您的新捆綁包。","You can now go back to use your new product.":"您現在可以返回使用您的新產品。","You can now upload the game to a web hosting service to play it.":"您現在可以將游戲上傳到網絡托管服務來玩。","You can now use them across the app!":"您現在可以在整個應用程序中使用它們!","You can only install up to {MAX_ASSETS_TO_INSTALL} assets at once. Try filtering the assets you would like to install, or install them one by one.":function(a){return["\u4E00\u6B21\u53EA\u80FD\u5B89\u88DD\u6700\u591A ",a("MAX_ASSETS_TO_INSTALL")," \u8CC7\u7522\u3002\u5617\u8A66\u7BE9\u9078\u60A8\u60F3\u8981\u5B89\u88DD\u7684\u8CC7\u7522\uFF0C\u6216\u8005\u4E00\u500B\u4E00\u500B\u5730\u5B89\u88DD\u5B83\u5011\u3002"]},"You can open the command palette by pressing {commandPaletteShortcut} or {commandPaletteSecondaryShortcut}.":function(a){return["\u60A8\u53EF\u4EE5\u6309\u4E0B ",a("commandPaletteShortcut")," \u6216 ",a("commandPaletteSecondaryShortcut")," \u4F86\u958B\u555F\u547D\u4EE4\u8ABF\u8272\u677F\u3002"]},"You can save your project to come back to it later. What do you want to do?":"您可以保存您的項目,稍后再回到它。您想做什么?","You can select more than one.":"您可以選擇多個。","You can switch to GDevelop credits.":"您可以切換到 GDevelop 積分。","You can use credits to feature a game or purchase asset packs and game templates in the store!":"您可以使用積分來推薦游戲或在商店中購買資產包和游戲模板!","You can't delete your account while you have an active subscription. Please cancel your subscription first.":"當您的訂閱有效時,您無法刪除您的帳戶。請先取消訂閱。","You cannot add yourself as a collaborator.":"您不能將自己添加為合作者。","You cannot do this.":"你不能這樣做。","You cannot unregister a game that has active leaderboards. To delete them, access the player services, and delete them one by one.":"您不能取消註冊一個有活躍排行榜的遊戲。要刪除它們,請訪問玩家服務,然後逐個刪除它們。","You currently have a subscription, applied thanks to a redemption code, valid until {0} . If you redeem another code, your existing subscription will be canceled and not redeemable anymore!":function(a){return["\u60A8\u76EE\u524D\u6709\u4E00\u500B\u8A02\u95B1\uFF0C\u901A\u904E\u514C\u63DB\u4EE3\u78BC\u61C9\u7528\uFF0C\u6709\u6548\u671F\u81F3 ",a("0")," \u3002\u5982\u679C\u60A8\u514C\u63DB\u53E6\u4E00\u500B\u4EE3\u78BC\uFF0C\u60A8\u73FE\u6709\u7684\u8A02\u95B1\u5C07\u88AB\u53D6\u6D88\u4E26\u4E14\u7121\u6CD5\u518D\u514C\u63DB\uFF01"]},"You currently have a subscription. If you redeem a code, the existing subscription will be cancelled and replaced by the one given by the code.":"您目前有一個訂閱。如果您兌換代碼,現有訂閱將被取消并由代碼提供的訂閱取代。","You do not have access to project saves with your current subscription plan. Please upgrade your plan to access this feature.":"您在當前訂閱計畫下無法存取專案儲存。請升級您的計畫以存取此功能。","You do not have permission to access the project save associated with this AI request message.":"您無權訪問與此 AI 請求訊息相關的專案儲存。","You don't have a thumbnail":"您沒有縮略圖","You don't have any Android builds for this game.":"您沒有任何適用于此游戲的安卓版本。","You don't have any active students. Click on \"Manage seats\" to add students or teachers to your team.":"您沒有任何活躍的學生。單擊“管理名額”以添加學生或老師到您的團隊。","You don't have any builds for this game.":"您沒有此游戲的任何構建。","You don't have any credits available. You can purchase GDevelop credits to continue making AI requests.":"您沒有可用的積分。您可以購買 GDevelop 積分以繼續進行 AI 請求。","You don't have any desktop builds for this game.":"你沒有此游戲的任何桌面版本。","You don't have any feedback for this export.":"您對此導出沒有任何反饋。","You don't have any feedback for this game.":"您對此游戲沒有任何反饋。","You don't have any iOS builds for this game.":"您沒有此游戲的任何 iOS 版本。","You don't have any previous chat. Ask the AI your first question!":"您還沒有任何之前的聊天記錄。向 AI 提出您的第一個問題吧!","You don't have any unread feedback for this export.":"您對此導出沒有任何未讀反饋。","You don't have any unread feedback for this game.":"您對此游戲沒有任何未讀的反饋。","You don't have any web builds for this game.":"你沒有此游戲的任何web版本。","You don't have enough AI credits to continue this conversation.":"您沒有足夠的 AI 積分來繼續此對話。","You don't have enough available seats to restore those accounts.":"您沒有足夠的可用名額來恢復這些帳戶。","You don't have enough rights to add a new admin.":"您沒有足夠的權限添加新管理員。","You don't have enough rights to invite a new student.":"您沒有足夠的權限邀請新的學生。","You don't have enough rights to manage those accounts.":"您沒有足夠的權限來管理這些帳戶。","You don't have permissions to add collaborators.":"您沒有添加合作者的權限。","You don't have permissions to delete this project.":"您沒有刪除此項目的權限。","You don't have permissions to save this project. Please choose another location.":"您沒有保存此項目的權限。請選擇其他位置。","You don't have the rights to access the version history of this project. Are you connected with the right account?":"您沒有權限訪問此專案的版本歷史。您是否已使用正確的帳戶登錄?","You don't need to add the @ in your username":"您不需要在您的用戶名中添加 @","You don't own any pack yet!":"你還沒有任何包!","You don’t have any feedback about your game. Share your game and start collecting player feedback.":"您對這個遊戲沒有任何反饋。分享您的遊戲並開始收集玩家的反饋。","You have 0 notifications.":"您有 0 條通知。","You have <0>{remainingBuilds} build remaining — you have used {usageRatio} in the past 24h.":function(a){return["\u60A8\u9084\u5269\u4F59 <0>",a("remainingBuilds")," \u500B\u7248\u672C - \u60A8\u5728\u904E\u53BB 24 \u5C0F\u6642\u5167\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} build remaining — you have used {usageRatio} in the past 30 days.":function(a){return["\u60A8\u9084\u5269\u4F59 <0>",a("remainingBuilds")," \u500B\u7248\u672C - \u60A8\u5728\u904E\u53BB 30 \u5929\u5167\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} builds remaining — you have used {usageRatio} in the past 24h.":function(a){return["\u60A8\u9084\u5269\u4F59 <0>",a("remainingBuilds")," \u500B\u7248\u672C - \u60A8\u5728\u904E\u53BB 24 \u5C0F\u6642\u5167\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have <0>{remainingBuilds} builds remaining — you have used {usageRatio} in the past 30 days.":function(a){return["\u60A8\u9084\u5269\u4F59 <0>",a("remainingBuilds")," \u500B\u7248\u672C - \u60A8\u5728\u904E\u53BB 30 \u5929\u5167\u5DF2\u4F7F\u7528 ",a("usageRatio"),"\u3002"]},"You have a build currently running, you can see its progress via the exports button at the bottom of this dialog.":"您當前正在運行一個構建,您可以通過此對話框底部的導出按鈕查看其進度。","You have an active subscription":"您有一個有效的訂閱","You have reached the maximum number of games you can register! You can unregister games in your Games Dashboard.":"您已達到可注冊游戲的最大數量!您可以在游戲儀表板中注銷游戲。","You have reached the maximum number of guest collaborators for your subscription. Ask this user to get a Pro subscription!":"您的訂閱已達到訪客合作者的最大數目。請此用戶獲得專業訂閱!","You have to wait {0} days before you can reactivate an archived account.":function(a){return["\u60A8\u5FC5\u9808\u7B49 ",a("0")," \u5929\u624D\u80FD\u91CD\u65B0\u6FC0\u6D3B\u5DF2\u5B58\u6A94\u7684\u5E33\u6236\u3002"]},"You have unlocked full access to GDevelop to create without limits!":"您已解鎖對 GDevelop 的完全訪問權限,可以無限制地進行創作!","You have unsaved changes in your project.":"你的項目中有未儲存的變更。","You haven't contributed any examples":"您還沒有貢獻任何示例","You haven't contributed any extensions":"您還沒有貢獻任何擴展","You just added an instance to a hidden layer (\"{0}\"). Open the layer panel to make it visible.":function(a){return["\u60A8\u525B\u525B\u5411\u96B1\u85CF\u5C64 (\"",a("0"),"\") \u6DFB\u52A0\u4E86\u4E00\u500B\u5BE6\u4F8B\u3002\u8ACB\u6253\u958B\u5716\u5C64\u9762\u677F\u4F7F\u5176\u53EF\u898B\u3002"]},"You might like":"你可能會喜歡","You modified this project on the {formattedDate} at {formattedTime}. Do you want to overwrite your changes?":function(a){return["\u60A8\u65BC ",a("formattedDate")," \u7684 ",a("formattedTime")," \u4FEE\u6539\u4E86\u6B64\u5C08\u6848\u3002\u60A8\u8981\u8986\u84CB\u60A8\u7684\u66F4\u6539\u55CE\uFF1F"]},"You must be connected to use online export services.":"您必須連接才能使用在線導出服務。","You must be logged in to invite collaborators.":"您必須登錄才能邀請合作者。","You must own a Spine license to publish a game with a Spine object.":"您必須擁有 Spine 許可證才能發布帶有 Spine 對象的游戲。","You must re-open the project to continue this chat.":"您必須重新打開專案以繼續此聊天。","You must select a key.":"您必須選擇一個鍵。","You must select a valid key. \"{0}\" is not valid.":function(a){return["\u60A8\u5FC5\u9808\u9078\u64C7\u4E00\u500B\u6709\u6548\u7684\u9375\uFF0C \"",a("0"),"\" \u662F\u7121\u6548\u7684\u3002"]},"You must select a valid key. \"{value}\" is not valid.":function(a){return["\u60A8\u5FC5\u9808\u9078\u64C7\u4E00\u500B\u6709\u6548\u7684\u9375\uFF0C \"",a("value"),"\" \u662F\u7121\u6548\u7684\u3002"]},"You must select a valid value. \"{value}\" is not valid.":function(a){return["\u60A8\u5FC5\u9808\u9078\u64C7\u4E00\u500B\u6709\u6548\u7684\u503C\u3002\"",a("value"),"\" \u7121\u6548\u3002"]},"You must select a value.":"您必須選擇一個值。","You must select at least one user to be the author of the game.":"您必須選擇至少一個用戶作為遊戲的作者。","You must select at least one user to be the owner of the game.":"您必須選擇至少一個用戶作為游戲的所有者。","You need a Apple Developer account to create a certificate.":"您需要一個 Apple 開發者帳戶來創建證書。","You need a Apple Developer account to create an API key that will automatically publish your app.":"您需要一個 Apple 開發者帳戶來創建將自動發布您的應用程序的 API 密鑰。","You need to cancel your current subscription before joining a team.":"您需要在加入團隊之前取消當前的訂閱。","You need to first save your project to the cloud to invite collaborators.":"您需要首先將您的項目保存到云端來邀請合作者。","You need to login first to see your builds.":"您需要先登錄才能看到您的項目。","You need to login first to see your game feedbacks.":"你需要先登錄才能看到你的游戲反饋。","You need to save this project as a cloud project to install premium assets. Please save your project and try again.":"您需要將此項目保存為云項目來安裝此高級素材。請保存您的項目,然后重試!","You need to save this project as a cloud project to install this asset. Please save your project and try again.":"您需要將此項目保存為云項目來安裝此素材。請保存您的項目,然后重試!","You received {0} credits thanks to your subscription":function(a){return["\u7531\u4E8E\u60A8\u7684\u8A02\u95B1\uFF0C\u60A8\u7372\u5F97\u4E86 ",a("0")," \u7A4D\u5206"]},"You should have received an email containing instructions to reset and set a new password. Once it's done, you can use your new password in GDevelop.":"您應該收到一封包含重置密碼的信郵件。完成后,您就可以在 GDevelop 中使用您的新密碼了。","You still have {availableCredits} credits you can use for AI requests.":function(a){return["\u60A8\u4ECD\u7136\u64C1\u6709 ",a("availableCredits")," \u7A4D\u5206\u53EF\u7528\u65BC AI \u8ACB\u6C42\u3002"]},"You still have {percentage}% left on this month's AI usage.":function(a){return["\u60A8\u672C\u6708\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002"]},"You still have {percentage}% left on this month's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u672C\u6708\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002\u5B83\u5C07\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You still have {percentage}% left on this week's AI usage.":function(a){return["\u60A8\u672C\u9031\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002"]},"You still have {percentage}% left on this week's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u672C\u9031\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002\u5B83\u5C07\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You still have {percentage}% left on today's AI usage.":function(a){return["\u60A8\u4ECA\u5929\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002"]},"You still have {percentage}% left on today's AI usage. It resets on {dateString} at {timeString}.":function(a){return["\u60A8\u4ECA\u5929\u7684 AI \u4F7F\u7528\u91CF\u9084\u5269 ",a("percentage"),"%\u3002\u5B83\u5C07\u5728 ",a("dateString")," \u7684 ",a("timeString")," \u91CD\u7F6E\u3002"]},"You will get access to special discounts on the GDevelop asset store, as well as weekly stats about your games.":"你將獲得 GDevelopment 資產商店的特別折扣,以及關于你的游戲的每周統計數據。","You will lose all custom collision masks. Do you want to continue?":"您將丟失所有自定義碰撞遮罩。是否要繼續?","You will lose any progress made with the external editor. Do you wish to cancel?":"您將失去使用外部編輯器取得的任何進展。您想取消嗎?","You won't see it here anymore, unless you re-activate it from the preferences.":"您將不會在這裡看到它,除非您從偏好設置中重新啟用它。","You'll convert {0} USD to {1} credits.":function(a){return["\u60A8\u5C07\u628A ",a("0")," \u7F8E\u5143\u514C\u63DB\u70BA ",a("1")," \u7A4D\u5206\u3002"]},"You're about to add 1 asset.":"您將要添加1個資產。","You're about to add {0} assets.":function(a){return["\u60A8\u5C07\u8981\u6DFB\u52A0 ",a("0")," \u500B\u7D20\u6750\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F"]},"You're about to cash out {0} USD.":function(a){return["\u60A8\u5373\u5C07\u63D0\u53D6 ",a("0")," \u7F8E\u5143\u3002"]},"You're about to open (or re-open) a project. Click on \"Open the Project\" to continue.":"您即將打開(或重新打開)一個項目。點擊“打開項目”繼續。","You're about to restart this multichapter guided lesson.":"您即將重新開始此多章節的指導課程。","You're awesome!":"你太棒了!","You're deleting a game which:{0} - {1} {2} - {3} {4} If you continue, the game and this project will be deleted.{5} This action is irreversible. Do you want to continue?":function(a){return["\u60A8\u6B63\u5728\u522A\u9664\u7684\u662F\u4E00\u500B\u904A\u6232\uFF1A",a("0")," - ",a("1")," ",a("2")," - ",a("3")," ",a("4")," \u5982\u679C\u7E7C\u7E8C\uFF0C\u8A72\u904A\u6232\u548C\u8A72\u9805\u76EE\u5C07\u6703\u88AB\u522A\u9664\u3002",a("5")," \u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u6D88\u3002\u60A8\u78BA\u5B9A\u8981\u7E7C\u7E8C\u55CE\uFF1F"]},"You're leaving the game tutorial":"你要離開游戲教程","You're now logged out":"您現在已退出","You're trying to save changes made to a previous version of your project. If you continue, it will be used as the new latest version.":"您正在嘗試保存對項目先前版本所做的更改。如果繼續,它將用作新的最新版本。","You're {missingCredits} credits short.":function(a){return["\u60A8\u9084\u7F3A ",a("missingCredits")," \u500B\u7A4D\u5206\u3002"]},"You've been invited to join a team by {inviterEmail}":function(a){return["\u60A8\u88AB ",a("inviterEmail")," \u9080\u8ACB\u52A0\u5165\u4E00\u500B\u5718\u968A\u3002"]},"You've made some changes here. Are you sure you want to discard them and open the behavior events?":"你在這里做了一些改變。您確定要丟棄它們并打開行為事件嗎?","You've made some changes here. Are you sure you want to discard them and open the function?":"您已經在這里進行了一些修改。您確定要放棄它們并打開函數嗎?","You've ran out of GDevelop Credits.":"您已經耗盡了 GDevelop 積分。","You've ran out of GDevelop credits to continue this conversation.":"您已經耗盡了 GDevelop 積分以繼續此對話。","You've ran out of free AI requests.":"您已經耗盡了免費的 AI 請求。","You've reached the limit of cloud projects you can have. Delete some existing cloud projects of yours before trying again.":"您已經達到了您可以使用的云端項目的極限。在再次嘗試之前先刪除一些現有的云端項目。","You've reached your maximum of {0} leaderboards for your game":function(a){return["\u4F60\u7684\u6E38\u6232\u5DF2\u7D93\u9054\u5230 ",a("0")," \u500B\u6392\u884C\u699C\u7684\u4E0A\u9650"]},"You've reached your maximum storage of {maximumCount} cloud projects":function(a){return["\u60A8\u5DF2\u9054\u5230 ",a("maximumCount")," \u96F2\u5C08\u6848\u7684\u6700\u5927\u5B58\u5132\u9650\u5EA6"]},"YouTube channel (tutorials and more)":"YouTube頻道 (教程和更多)","Your Discord username":"您的 Discord 用戶名","Your account has been deleted!":"您的帳戶已被刪除!","Your account is upgraded, with the extra exports and online services. If you wish to change later, come back to your profile and choose another plan.":"您的帳戶已升級,帶有額外的導出和在線服務。 如果您希望稍后更改,請回到您的個人資料并選擇另一個計劃。","Your browser will now open to enter your payment details.":"您的瀏覽器現在將打開以輸入您的付款詳細信息。","Your computer":"您的電腦","Your current subscription plan allows restoring versions from the last {historyRetentionDays} days.<0/>Get a higher plan to access older versions.":function(a){return["\u60A8\u7576\u524D\u7684\u8A02\u95B1\u8A08\u5283\u5141\u8A31\u5F9E\u904E\u53BB ",a("historyRetentionDays")," \u5929\u5167\u6062\u5FA9\u7248\u672C\u3002<0/>\u8ACB\u5347\u7D1A\u5230\u66F4\u9AD8\u7684\u8A08\u5283\u4EE5\u8A2A\u554F\u820A\u7248\u3002"]},"Your feedback is valuable to help us improve our premium services. Why are you canceling your subscription?":"您的反饋對于幫助我們改進優質服務非常有價值。為什么要取消訂閱?","Your forum account with email {email} will reflect your subscription level. You can press the sync button to update it immediately.":function(a){return["\u60A8\u7684\u8AD6\u58C7\u5E33\u865F\uFF08\u96FB\u5B50\u90F5\u4EF6 ",a("email"),"\uFF09\u5C07\u53CD\u6620\u60A8\u7684\u8A02\u95B1\u7D1A\u5225\u3002\u60A8\u53EF\u4EE5\u6309\u4E0B\u540C\u6B65\u6309\u9215\u7ACB\u5373\u66F4\u65B0\u3002"]},"Your free trial will expire in {0} hours.":function(a){return["\u60A8\u7684\u514D\u8CBB\u8A66\u7528\u671F\u5C07\u5728 ",a("0")," \u5C0F\u6642\u5167\u5230\u671F\u3002"]},"Your game has some invalid elements, please fix these before continuing:":"您的游戲有一些無效元素,請在繼續之前修復這些元素:","Your game is hidden on gd.games":"您的遊戲在 gd.games 上被隱藏","Your game is in the “Build” section or you can restart the tutorial.":"你的遊戲在「建置」部分,或者你可以重新開始教程。","Your game is not published on gd.games":"您的遊戲尚未在 gd.games 上發布","Your game may not be registered, create one in the leaderboard manager.":"您的遊戲可能尚未註冊,請在排行榜管理器中創建一個。","Your game will be exported and packaged online as a stand-alone game for Windows, Linux and/or macOS.":"您的游戲將被導出和打包,作為Windows、Linux和/或macOS的獨立游戲。","Your game won't work if you open the index.html file on your computer. You must upload it to a web hosting platform (Itch.io, Poki, CrazyGames etc...) or a web server to run it.":"如果您在計算機上打開 index.html 文件,您的游戲將無法運行。您必須將其上傳到網絡托管平臺 (Itch.io、Poki、CrazyGames 等) 或網絡服務器才能運行它。","Your game {0} received a feedback message: \"{1}...\"":function(a){return["\u60A8\u7684\u6E38\u6232 ",a("0")," \u6536\u5230\u4E00\u689D\u53CD\u994B\u6D88\u606F\uFF1A\u201C",a("1"),"...\u201D"]},"Your game {0} received {1} feedback messages":function(a){return["\u60A8\u7684\u6E38\u6232 ",a("0")," \u6536\u5230\u4E86 ",a("1")," \u689D\u53CD\u994B\u6D88\u606F"]},"Your game {0} was played more than {1} times!":function(a){return["\u60A8\u7684\u6E38\u6232 ",a("0")," \u5DF2\u73A9\u8D85\u904E ",a("1")," \u6B21\uFF01"]},"Your latest changes could not be applied to the preview(s) being run. You should start a new preview instead to make sure that all your changes are reflected in the game.":"您的最新更改無法應用于正在運行的預覽。 您應該開始一個新的預覽,以確保您的所有更改都已經反映在游戲中。","Your membership helps the GDevelop company maintain servers, build new features and keep the open-source project thriving. Our goal: make game development fast, fun and accessible to all.":"您的會員幫助 GDevelop 公司維護伺服器、構建新功能並保持開源項目的繁榮。我們的目標:讓遊戲開發快速、有趣且易於所有人使用。","Your name":"您的名字:","Your need to first create your account, or login, to upload your own resources.":"您需要首先創建您的帳戶或登錄,以上傳您自己的資源。","Your need to first save your game on GDevelop Cloud to upload your own resources.":"您需要先將游戲保存在 GDevelop Cloud 上才能上傳您自己的資源。","Your new plan is now activated.":"您的新計劃已被激活。","Your password must be between 8 and 30 characters long.":"您的密碼必須在 8 到 30 個字符之間。","Your plan:":"您的計劃:","Your preview is ready! On your mobile or tablet, open your browser and enter in the address bar:":"預覽輸出完成!在其他設備的瀏覽器上輸入以下網址:","Your project has {0} diagnostic error(s). Please fix them before exporting.":function(a){return["\u60A8\u7684\u5C08\u6848\u6709 ",a("0")," \u500B\u8A3A\u65B7\u932F\u8AA4\u3002\u8ACB\u5728\u5C0E\u51FA\u4E4B\u524D\u4FEE\u6B63\u5B83\u5011\u3002"]},"Your project has {0} diagnostic error(s). Please fix them before launching a preview.":function(a){return["\u60A8\u7684\u5C08\u6848\u6709 ",a("0")," \u500B\u8A3A\u65B7\u932F\u8AA4\u3002\u8ACB\u5728\u555F\u52D5\u9810\u89BD\u4E4B\u524D\u4FEE\u6B63\u5B83\u5011\u3002"]},"Your project is saved in the same folder as the application. This folder will be deleted when the application is updated. Please choose another location if you don't want to lose your project.":"項目保存在與應用程序相同的文件夾中。更新應用程序時將刪除此文件夾。如果您不想失去您的項目,請選擇其他位置。","Your project name has changed, this will also save the whole project, continue?":"您的項目名稱已更改,這也將保存整個項目,是否繼續?","Your purchase has been processed!":"您的購買已處理完畢!","Your search and filters did not return any result.":"您的搜索和過濾器未返回任何結果。","Your search and filters did not return any result.<0/>If you need support for a specific language, please contact us.":"您的搜索和過濾器未返回任何結果。<0/>如果您需要特定語言的支援,請聯繫我們。","Your subscription has been canceled":"您的訂閱已被取消","Your subscription is set to be cancelled at the end of the current billing period. You will retain access to the plan benefits until then.":"您的訂閱於當前計費週期結束時將被取消。在此之前,您仍可享受計劃的所有福利。","Your team does not have enough seats for a new admin.":"您的團隊沒有足夠的名額來容納新管理員。","Your team does not have enough seats for a new student.":"您的團隊沒有足夠的名額為新的學生。","Your {productType} has been activated!":function(a){return["\u60A8\u7684 ",a("productType")," \u5DF2\u88AB\u555F\u7528\uFF01"]},"You’re about to permanently delete your GDevelop account username@mail.com. You will no longer be able to log into the app with this email address.":"你將要永久刪除你的GDevelop帳戶 username@mail.com.您將無法再使用此電子郵件地址登錄應用程序。","You’ve reached the maximum amount of available seats. Increase the number of seats on your subscription to invite more students and collaborators.":"您已達到可用名額的最大數量。請增加您訂閱的名額以邀請更多學生和合作者。","Z":"Z 軸","Z Order":"Z軸(前后關系)","Z Order of objects created from events":"從事件創建對象的Z 順序","Z max":"Z 最大","Z max bound":"Z 最大邊界","Z max bound should be greater than Z min bound":"Z 最大邊界應大於 Z 最小邊界","Z min":"Z 最小","Z min bound":"Z 最小邊界","Z min bound should be smaller than Z max bound":"Z 最小邊界應小於 Z 最大邊界","Z offset (in pixels)":"Z 偏移 (以像素為單位)","Zoom In":"放大","Zoom Out":"縮小","Zoom in":"放大","Zoom in (you can also use Ctrl + Mouse wheel)":"放大 (您也可以使用 Ctrl + 鼠標滾輪)","Zoom out":"縮小","Zoom out (you can also use Ctrl + Mouse wheel)":"縮小 (您也可以使用 Ctrl + 鼠標滾輪)","Zoom to fit content":"縮放以適應內容","Zoom to fit selection":"縮放以適合選擇","Zoom to initial position":"縮放到初始位置","[Follow GDevelop](https://tiktok.com/@gdevelop) and enter your TikTok username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u95DC\u6CE8 GDevelop](https://tiktok.com/@gdevelop) \u5E76\u5728\u6B64\u8655\u8F38\u5165\u60A8\u7684 TikTok \u7528\u6236\u540D\u5373\u53EF\u7372\u5F97 ",a("rewardValueInCredits")," \u514D\u8CBB\u7A4D\u5206\u4EE5\u793A\u611F\u8B1D\uFF01"]},"[Follow GDevelop](https://twitter.com/GDevelopApp) and enter your Twitter username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u95DC\u6CE8 GDevelop](https://twitter.com/GDevelopApp) \u5E76\u5728\u6B64\u8655\u8F38\u5165\u60A8\u7684 Twitter \u7528\u6236\u540D\u5373\u53EF\u7372\u5F97 ",a("rewardValueInCredits")," \u514D\u8CBB\u7A4D\u5206\u4EE5\u793A\u611F\u8B1D\uFF01"]},"[Star the GDevelop repository](https://github.com/4ian/GDevelop) and add your GitHub username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u70BA GDevelop \u5B58\u5132\u5EAB\u52A0\u6CE8\u661F\u6A19](https://github.com/4ian/GDevelop) \u5E76\u5728\u6B64\u8655\u6DFB\u52A0\u60A8\u7684 GitHub \u7528\u6236\u540D\uFF0C\u4EE5\u7372\u5F97 ",a("rewardValueInCredits")," \u514D\u8CBB\u7A4D\u5206\u4F5C\u70BA\u611F\u8B1D\uFF01"]},"[Subscribe to GDevelop](https://youtube.com/@gdevelopapp) and enter your YouTube username here to get {rewardValueInCredits} free credits as a thank you!":function(a){return["[\u8A02\u95B1 GDevelop](https://youtube.com/@gdevelopapp) \u4E26\u5728\u6B64\u8F38\u5165\u60A8\u7684 YouTube \u7528\u6236\u540D\uFF0C\u5373\u53EF\u7372\u5F97 ",a("rewardValueInCredits")," \u514D\u8CBB\u7A4D\u5206\u4EE5\u793A\u611F\u8B1D\uFF01"]},"a permanent":"永久的","add":"添加","an instant":"瞬間","ascending":"升序","audios":"音頻","bitmap fonts":"位圖字體","by":"通過","contains":"包含","date,date":"date,date","date,date,date0":"日期,日期,日期0","day,date,date0":"日,日期,日期0","delete":"刪除","descending":"降序","divide by":"除以","ends with":"結尾為","false":"假","fonts":"字體","gd.games":"gd.games","iOS":"iOS","iOS & Android (manual)":"iOS & Android (手冊)","iOS (iPhone and iPad) icons":"iOS (iPhone 和 iPad) 圖標","iOS Build":"iOS 構建","iOS builds":"iOS 構建","in {elementsWithWords}":function(a){return["\u5728 ",a("elementsWithWords")]},"leaderboard.":"排行榜。","leaderboards.":"排行榜。","limit:":"限制:","macOS (zip file)":"macOS (zip 文件)","macOS (zip)":"macOS(zip)","min":"min","minutes":"分","multiply by":"乘","no":"否","no limit":"無限制","or":"或者","order by distance to another object":"按與另一個物體的距離排序","order by highest ammo":"按最高彈藥排序","order by highest health":"按最高生命值排序","order by highest variable":"按最高變數排序","order by physics speed":"按物理速度排序","ordered by":"按排序","panel sprites":"面板精靈","particle emitters":"粒子發射器","redemptionCodeExpirationDate,date":"redemptionCodeExpirationDate,date","scene center":"場景中心","set to":"設置為","set to false":"設置為 false","set to true":"設置為 true","sprites":"精靈","starts with":"開頭為","subtract":"減去","the events sheet":"事件表","the home page":"主頁","the scene editor":"場景編輯器","tile maps":"瓦片地圖","tiled sprites":"瓦塊精靈","toggle":"切換","true":"是","username":"用戶名","yes":"是","{0}":function(a){return[a("0")]},"{0} % of players with more than {1} minutes":function(a){return[a("0")," %\u7684\u73A9\u5BB6\u8D85\u904E ",a("1")," \u5206\u9418"]},"{0} (default)":function(a){return[a("0")," (\u9ED8\u8A8D)"]},"{0} ({1})":function(a){return[a("0")," (",a("1"),")"]},"{0} Asset pack":function(a){return[a("0")," \u8CC7\u7522\u5305"]},"{0} Asset packs":function(a){return[a("0")," \u8CC7\u7522\u5305"]},"{0} Assets":function(a){return[a("0")," \u8CC7\u7522"]},"{0} Course":function(a){return[a("0")," \u8AB2\u7A0B"]},"{0} Courses":function(a){return[a("0")," \u8AB2\u7A0B"]},"{0} Game template":function(a){return[a("0")," \u904A\u6232\u6A21\u677F"]},"{0} Game templates":function(a){return[a("0")," \u904A\u6232\u6A21\u677F"]},"{0} OFF":function(a){return[a("0")," OFF"]},"{0} builds":function(a){return[a("0")," \u7248\u672C"]},"{0} chapters":function(a){return[a("0")," \u7AE0\u7BC0"]},"{0} children":function(a){return[a("0")," \u500B\u5B50\u9805"]},"{0} credits":function(a){return[a("0")," \u500B\u7A4D\u5206"]},"{0} credits available":function(a){return[a("0")," \u9EDE\u6578\u53EF\u7528"]},"{0} exports created":function(a){return["\u5DF2\u5275\u5EFA ",a("0")," \u500B\u5C0E\u51FA"]},"{0} exports ongoing...":function(a){return[a("0")," \u500B\u5C0E\u51FA\u6B63\u5728\u9032\u884C\u4E2D\u2026\u2026"]},"{0} hours of material":function(a){return[a("0")," \u5C0F\u6642\u7684\u5167\u5BB9"]},"{0} invited you to join a team.":function(a){return[a("0")," \u9080\u8ACB\u60A8\u52A0\u5165\u4E00\u500B\u5718\u968A\u3002"]},"{0} is included in the bundle {1}.":function(a){return[a("0")," \u5305\u542B\u5728\u6346\u7D81\u5305 ",a("1")," \u4E2D\u3002"]},"{0} is included in this bundle for {1} !":function(a){return[a("0")," \u5305\u542B\u5728\u6B64\u6346\u7D81\u5305\u4E2D\uFF0C\u50F9\u683C\u70BA ",a("1")," !"]},"{0} minutes per player":function(a){return["\u6BCF\u4F4D\u73A9\u5BB6",a("0")," \u5206\u9418"]},"{0} new feedbacks":function(a){return[a("0")," \u500B\u65B0\u53CD\u994B"]},"{0} of {1} completed":function(a){return[a("0")," \u7684 ",a("1")," \u5DF2\u5B8C\u6210"]},"{0} of {1} subscription":function(a){return[a("0")," \u7684 ",a("1")," \u8A02\u95B1"]},"{0} options":function(a){return[a("0")," \u9078\u9805"]},"{0} part":function(a){return[a("0")," \u90E8\u5206"]},"{0} players with more than {1} minutes":function(a){return[a("0")," \u73A9\u5BB6\u8D85\u904E ",a("1")," \u5206\u9418"]},"{0} projects":function(a){return[a("0")," \u9805\u76EE"]},"{0} properties":function(a){return[a("0")," \u5C6C\u6027"]},"{0} reviews":function(a){return[a("0")," \u8A55\u8AD6"]},"{0} sessions":function(a){return[a("0")," \u500B\u6703\u8A71"]},"{0} subscription":function(a){return[a("0")," \u8A02\u95B1"]},"{0} use left":function(a){return["\u5269\u9918 ",a("0")," \u6B21\u4F7F\u7528"]},"{0} uses left":function(a){return["\u5269\u9918 ",a("0")," \u6B21\u4F7F\u7528"]},"{0} variables":function(a){return[a("0")," \u500B\u8B8A\u91CF"]},"{0} weeks":function(a){return[a("0")," \u9031"]},"{0} will be added to your account {1}.":function(a){return[a("0")," \u5C07\u6DFB\u52A0\u5230\u60A8\u7684\u5E33\u6236 ",a("1"),"\u3002"]},"{0}% bounce rate":function(a){return[a("0"),"% \u8DF3\u51FA\u7387"]},"{0}'s projects":function(a){return[a("0")," \u7684\u9805\u76EE"]},"{0}+ (Available with a subscription)":function(a){return[a("0"),"+ (\u53EF\u901A\u904E\u8A02\u95B1\u7372\u5F97)"]},"{0}/{1} achievements":function(a){return[a("0"),"/",a("1")," \u6210\u5C31"]},"{0}Are you sure you want to remove this extension? This can't be undone.":function(a){return[a("0"),"\u78BA\u5B9A\u8981\u522A\u9664\u6B64\u64F4\u5C55\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u64A4\u92B7\u3002"]},"{daysAgo} days ago":function(a){return[a("daysAgo")," \u5929\u524D"]},"{durationInDays} days":function(a){return[a("durationInDays")," \u5929"]},"{durationInMinutes} min.":function(a){return[a("durationInMinutes")," \u5206\u9418\u3002"]},"{durationInMinutes} minutes":function(a){return[a("durationInMinutes")," \u5206\u9418"]},"{email} has already accepted the invitation and joined the team.":function(a){return[a("email")," \u5DF2\u7D93\u63A5\u53D7\u4E86\u9080\u8ACB\u4E26\u52A0\u5165\u4E86\u5718\u968A\u3002"]},"{email} will be removed from the team.":function(a){return[a("email")," \u5C07\u88AB\u79FB\u9664\u51FA\u5718\u968A\u3002"]},"{fullName} ({username})":function(a){return[a("fullName")," (",a("username"),")"]},"{functionNode} action from {extensionNode} extension is missing.":function(a){return["\u4F86\u81EA ",a("functionNode")," \u64F4\u5C55\u7684 ",a("extensionNode")," \u64CD\u4F5C\u4E1F\u5931\u3002"]},"{functionNode} action on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return[a("functionNode")," \u5C0D ",a("extensionNode")," \u64F4\u5C55\u7684 ",a("behaviorNode")," \u884C\u70BA\u64CD\u4F5C\u4E1F\u5931\u3002"]},"{functionNode} condition from {extensionNode} extension is missing.":function(a){return["\u4F86\u81EA ",a("extensionNode")," \u64F4\u5C55\u7684 ",a("functionNode")," \u689D\u4EF6\u7F3A\u5931\u3002"]},"{functionNode} condition on behavior {behaviorNode} from {extensionNode} extension is missing.":function(a){return["\u5728 ",a("functionNode")," \u884C\u70BA ",a("behaviorNode")," \u4E0A\u7F3A\u5C11\u4F86\u81EA ",a("extensionNode")," \u64F4\u5C55\u7684\u689D\u4EF6\u3002"]},"{gameCount} of your games were played more than {0} times in total!":function(a){return["\u60A8\u7684 ",a("gameCount")," \u500B\u6E38\u6232\u7E3D\u5171\u73A9\u4E86\u8D85\u904E ",a("0")," \u6B21\uFF01"]},"{hoursAgo} hours ago":function(a){return[a("hoursAgo")," \u5C0F\u6642\u524D"]},"{includedCreditsAmount} credits":function(a){return[a("includedCreditsAmount")," \u7A4D\u5206"]},"{minutesAgo} minutes ago":function(a){return[a("minutesAgo")," \u5206\u9418\u524D"]},"{numberOfAssetPacks} Asset Pack":function(a){return[a("numberOfAssetPacks")," \u8CC7\u6E90\u5305"]},"{numberOfAssetPacks} Asset Packs":function(a){return[a("numberOfAssetPacks")," \u8CC7\u6E90\u5305"]},"{numberOfCourses} Course":function(a){return[a("numberOfCourses")," \u8AB2\u7A0B"]},"{numberOfCourses} Courses":function(a){return[a("numberOfCourses")," \u8AB2\u7A0B"]},"{numberOfGameTemplates} Game Template":function(a){return[a("numberOfGameTemplates")," \u904A\u6232\u6A21\u677F"]},"{numberOfGameTemplates} Game Templates":function(a){return[a("numberOfGameTemplates")," \u904A\u6232\u6A21\u677F"]},"{objectName} variables":function(a){return[a("objectName")," \u8B8A\u6578"]},"{percentage}% left":function(a){return[a("percentage"),"% \u5269\u9918"]},"{periodLabel}, <0>{0} <1>{1}":function(a){return[a("periodLabel"),"\uFF0C<0>",a("0")," <1>",a("1"),""]},"{periodLabel}, <0>{0} <1>{1} per seat":function(a){return[a("periodLabel"),"\uFF0C<0>",a("0")," <1>",a("1")," \u6BCF\u500B\u5EA7\u4F4D"]},"{periodLabel}, {0}":function(a){return[a("periodLabel"),"\uFF0C",a("0")]},"{periodLabel}, {0} per seat":function(a){return[a("periodLabel"),"\uFF0C",a("0")," \u6BCF\u500B\u5EA7\u4F4D"]},"{planCreditsAmount} credits":function(a){return[a("planCreditsAmount")," \u7A4D\u5206"]},"{price} every {0} months":function(a){return["\u6BCF ",a("0")," \u6708 ",a("price")]},"{price} every {0} weeks":function(a){return["\u6BCF ",a("0")," \u5468 ",a("price")]},"{price} every {0} years":function(a){return["\u6BCF ",a("0")," \u5E74 ",a("price")]},"{price} per month":function(a){return["\u6BCF\u6708 ",a("price")]},"{price} per seat, each month":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u6708"]},"{price} per seat, each week":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u5468"]},"{price} per seat, each year":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF\u5E74"]},"{price} per seat, every {0} months":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u6708"]},"{price} per seat, every {0} weeks":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u5468"]},"{price} per seat, every {0} years":function(a){return["\u6BCF\u500B\u5EA7\u4F4D ",a("price"),"\uFF0C\u6BCF ",a("0")," \u5E74"]},"{price} per week":function(a){return["\u6BCF\u5468 ",a("price")]},"{price} per year":function(a){return["\u6BCF\u5E74 ",a("price")]},"{resultsCount} results":function(a){return[a("resultsCount")," \u500B\u7D50\u679C"]},"{roundedMonths} months":function(a){return[a("roundedMonths")," \u500B\u6708"]},"{smartObjectsCount} smart objects":function(a){return[a("smartObjectsCount")," \u500B\u667A\u80FD\u5C0D\u8C61"]},"{totalCredits} Credits":function(a){return[a("totalCredits")," \u7A4D\u5206"]},"{totalMatches} matches":function(a){return[a("totalMatches")," \u500B\u5339\u914D\u9805"]},"~{0} minutes.":function(a){return["\u5728 ",a("0")," \u5206\u9418\u5167."]},"“Player feedback” is off, turn it on to start collecting feedback on your game.":"“玩家反饋”已關閉,請開啟以開始收集有關您的遊戲的反饋。","“Start” screen":"“開始”屏幕","“You win” message":"“你贏了”的信息","≠ (not equal to)":"≠ (不等于)","≤ (less or equal to)":"≤ (小于或等于)","≥ (greater or equal to)":"≥ (大于或等于)","❌ Game configuration could not be saved, please try again later.":"項目無法保存。請稍後再試。","🎉 Congrats on getting the {translatedName} featuring for your game {0}!":function(a){return["\uD83C\uDF89 \u606D\u559C\u60A8\u7684\u6E38\u6232 ",a("0")," \u7372\u5F97\u4E86 ",a("translatedName")," \u7CBE\u9078\uFF01"]},"🎉 You can now follow your new course!":"🎉 您現在可以跟隨您的新課程!","🎉 You can now use your assets!":"🎉 您現在可以使用您的資產了!","🎉 You can now use your credits!":"🎉 您現在可以使用您的積分了!","🎉 You can now use your template!":"🎉 您現在可以使用您的模板了!","🎉 Your request has been saved. Lay back, we'll contact you shortly.":"🎉 您的請求已保存。請稍候,我們將儘快與您聯繫。","👋 Good to see you {username}!":function(a){return["\uD83D\uDC4B \u5F88\u9AD8\u8208\u770B\u5230\u4F60 ",a("username"),"\uFF01"]},"👋 Good to see you!":"👋 很高興看到你 !","👋 Welcome to GDevelop {username}!":function(a){return["\uD83D\uDC4B \u6B61\u8FCE\u4F7F\u7528 GDevelop ",a("username"),"\uFF01"]},"👋 Welcome to GDevelop!":"👋 歡迎使用 GDevelop !","Change the width of an object.":"改變物件寬度","the width":"寬度","Change the height of an object.":"變更目標高度","the height":"高度","Scale":"縮放","Modify the scale of the specified object.":"變更指定目標比例","the scale":"縮放比例","Scale on X axis":"在X軸上的縮放","the width's scale of an object":"物體寬度比例","the width's scale":"寬度比例","Scale on Y axis":"在Y軸上的縮放","the height's scale of an object":"物體高度比例","the height's scale":"高度比例","Flip the object horizontally":"使物件水平翻轉","Flip horizontally _PARAM0_: _PARAM1_":"水平翻轉 _PARAM0_ : _PARAM1_","Activate flipping":"啟動翻轉","Flip the object vertically":"垂直翻轉物件","Flip vertically _PARAM0_: _PARAM1_":"垂直翻轉 _PARAM0_ : _PARAM1_","Horizontally flipped":"水平翻轉","Check if the object is horizontally flipped":"檢查物件是否水平翻轉","_PARAM0_ is horizontally flipped":"_PARAM0_ 是水平翻轉","Vertically flipped":"垂直翻轉","Check if the object is vertically flipped":"檢查物件是否垂直翻轉","_PARAM0_ is vertically flipped":"_PARAM0_ 是垂直翻轉","the opacity of an object, between 0 (fully transparent) to 255 (opaque)":"物件的不透明度,介于 0 (完全透明) 到 255 (不透明) 之間","the opacity":"不透明度","Change ":"更改 ","Check the property value for .":"檢查 的屬性值。","Property of _PARAM0_ is true":"_PARAM0_ 屬性 為 true","Update the property value for .":"Update the property value for .","Set property value for of _PARAM0_ to ":"將 _PARAM0_ 的 屬性值設為 ","New value to set":"要設定的新值","Toggle":"切換","Toggle the property value for .\nIf it was true, it will become false, and if it was false it will become true.":"切換 的屬性值。\n如果為真,將變成假;如果為假,將變成真。","Toggle property of _PARAM0_":"切換屬性 _PARAM0_","the property value for ":" 的屬性值"," property":" 屬性"," shared property":" 共享屬性","Center of rotation":"旋轉中心","Change the center of rotation of an object relatively to the object origin.":"相對於物體原點,改變物體旋轉中心。","Change the center of rotation of _PARAM0_ to _PARAM1_ ; _PARAM2_ ; _PARAM3_":"將 _PARAM0_ 的旋轉中心更改為 _PARAM1_ ; _PARAM2_ ; _PARAM3_","X position":"X 位置","Y position":"Y 位置","Z position":"Z位置","Change the center of rotation of _PARAM0_ to _PARAM1_ ; _PARAM2_":"將 _PARAM0_ 的旋轉中心更改為 _PARAM1_ ; _PARAM2_","Error during exporting! Unable to export events:\n":"匯出時發生錯誤!未能匯出事件:\n","Error during export:\n":"匯出時發生錯誤:\n","Unable to write ":"無法寫入 ","Javascript code":"Javascript 代碼","Insert some Javascript code into events":"在事件中插入一些 Javascript 代碼","Consider objects touching each other, but not overlapping, as in collision (default: no)":"在碰撞中考慮相互碰撞但不重疊的物件 (默認:否)","HTML5 (Web and Android games)":"HTML5 ( 網頁和安卓遊戲 )","HTML5 and javascript based games for web browsers.":"為 web 瀏覽器而設的基于 HTML5 和 javascript的遊戲。","Enables the creation of 2D games that can be played in web browsers. These can also be exported to Android with third-party tools.":"啟用可在 web 瀏覽器中玩的2D 遊戲創建,這些也可以用第三方工具匯出到 Android 。","Gravity":"重力","Jump":"跳躍","Jump speed":"彈跳速度","Jump sustain time":"跳躍維持時間","Maximum time (in seconds) during which the jump strength is sustained if the jump key is held - allowing variable height jumps.":"如果按住跳躍鍵,則可以保持跳躍強度的最長時間(以秒為單位)-允許可變高度的跳躍。","Max. falling speed":"最大下落的速度","Ladder climbing speed":"爬梯速度","Ladder":"梯子","Acceleration":"加速度","Walk":"行走","Deceleration":"減速","Max. speed":"最大速度","Disable default keyboard controls":"禁用預設鍵盤控制","Slope max. angle":"斜坡最大角度","Can grab platform ledges":"可以抓平臺壁架","Ledge":"側邊","Automatically grab platform ledges without having to move horizontally":"自動抓住平臺壁架,而無需水平移動","Grab offset on Y axis":"Y軸外部偏移量","Grab tolerance on X axis":"抓取 X軸上的公差","Use frame rate dependent trajectories (deprecated — best left unchecked)":"使用與幀速率相關的軌跡(已棄用,建議不要選中此選項)","Deprecated options":"已棄用的選項","Allows repeated jumps while holding the jump key (deprecated — best left unchecked)":"允許在按住跳躍鍵時重複跳躍(已棄用,建議不要選中此選項)","Can go down from jumpthru platforms":"可以從跳躍平臺向下移動","Platform":"平台","Jumpthru platform":"可穿越平臺","Ledges can be grabbed":"可以抓住邊角","Platform behavior":"平臺行為","Platformer character":"平臺角色","Jump and run on platforms.":"在平臺上跳躍和奔跑。","Is moving":"移動中","Check if the object is moving (whether it is on the floor or in the air).":"檢查物體是否移動(無論是在地板上還是在空中)。","_PARAM0_ is moving":"_PARAM0_ 正在移動","Platformer state":"平臺狀態","Is on floor":"在地板上","Check if the object is on a platform.":"檢查物件是否在平臺上。","_PARAM0_ is on floor":"_PARAM0_ 在地板上","Is on ladder":"是在梯子上","Check if the object is on a ladder.":"檢查物件是否在平臺上。","_PARAM0_ is on ladder":"_PARAM0_ 在梯子上","Is jumping":"跳起中","Check if the object is jumping.":"檢測物件是否在跳起","_PARAM0_ is jumping":"_PARAM0_ 正在跳躍","Is falling":"正在下落","Check if the object is falling.\nNote that the object can be flagged as jumping and falling at the same time: at the end of a jump, the fall speed becomes higher than the jump speed.":"檢查物件是下降的,\n注意,物件可以被標記為跳落在同一時間:在跳結束,下降速度高于跳速度。","_PARAM0_ is falling":"_PARAM0_ 正在下落","Is grabbing platform ledge":"抓住平臺壁架","Check if the object is grabbing a platform ledge.":"檢查物體是否抓住了平臺。","_PARAM0_ is grabbing a platform ledge":"_PARAM0_抓住一個平臺","Compare the gravity applied on the object.":"比較施加在物體上的重力。","the gravity":"重力","Platformer configuration":"平臺配置","Gravity to compare to (in pixels per second per second)":"要比較的重力(以每秒像素為單位)","Change the gravity applied on an object.":"改變施加在物體上的重力。","Gravity (in pixels per second per second)":"重力(以每秒像素為單位)","Maximum falling speed":"最大的下落速度","Compare the maximum falling speed of the object.":"比較物體的最大下落速度。","the maximum falling speed":"最大降落速度","Max speed to compare to (in pixels per second)":"與之比較的最大速度(像素每秒)","Change the maximum falling speed of an object.":"改變物體的最大下落速度。","Max speed (in pixels per second)":"最大速度(像素每秒)","If jumping, try to preserve the current speed in the air":"如果是跳躍,盡量保持當前空中的速度","Compare the ladder climbing speed (in pixels per second).":"比較爬梯速度(以像素/秒為單位)。","the ladder climbing speed":"爬梯速度","Speed to compare to (in pixels per second)":"與之比較的速度(像素每秒)","Change the ladder climbing speed.":"改變梯子的爬升速度。","Speed (in pixels per second)":"(單位為像素每秒) 的速度","Compare the horizontal acceleration of the object.":"比較物體的水平加速度。","the horizontal acceleration":"水平加速度","Acceleration to compare to (in pixels per second per second)":"與之比較的加速(像素/秒)","Change the horizontal acceleration of an object.":"改變物體的水平加速度。","Acceleration (in pixels per second per second)":"加速速(像素每秒)","Compare the horizontal deceleration of the object.":"比較物體的水平減速度。","the horizontal deceleration":"水平減速","Deceleration to compare to (in pixels per second per second)":"與之比較的減速(像素/秒)","Change the horizontal deceleration of an object.":"改變物體的水平減速度。","Deceleration (in pixels per second per second)":"減速(像素每秒)","Maximum horizontal speed":"最大水平速度","Compare the maximum horizontal speed of the object.":"比較物體的最大水平速度。","the maximum horizontal speed":"最大水平速度","Change the maximum horizontal speed of an object.":"更改物體的最大水平速度。","Compare the jump speed of the object.Its value is always positive.":"比較物體的跳躍速度。它的值總是正數。","the jump speed":"跳躍速度","Change the jump speed of an object. Its value is always positive.":"改變物體的跳躍速度。它的值總是正數。","Compare the jump sustain time of the object.This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"比較物體的跳躍維持時間。這是保持按住跳躍按鈕允許維持初始跳躍速度的時間。","the jump sustain time":"跳躍維持時間","Duration to compare to (in seconds)":"比較的持續時間(以秒為單位)","Change the jump sustain time of an object.This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"更改物體的跳躍維持時間。這是保持按住跳躍按鈕允許維持初始跳躍速度的時間。","Duration (in seconds)":"持續時間(秒)","Allow jumping again":"是否允許再次跳躍","When this action is executed, the object is able to jump again, even if it is in the air: this can be useful to allow a double jump for example. This is not a permanent effect: you must call again this action everytime you want to allow the object to jump (apart if it's on the floor).":"當執行此操作時, 物件能夠再次跳躍. 即使它在空中; 這能有助于 [如:雙倍跳躍] , 但這不是永久效果. 每當你想要讓物件跳躍時你都必須再次調用此動作 (如果它在地面上).","Allow _PARAM0_ to jump again":"允許 _PARAM0_ 再跳一次","Forbid jumping again in the air":"禁止再次在空中跳躍","This revokes the effect of \"Allow jumping again\". The object is made unable to jump while in mid air. This has no effect if the object is not in the air.":"這會取消“允許再次跳躍”的效果。 物體在半空中無法跳躍。 如果物體不在空中,這沒有任何影響。","Forbid _PARAM0_ to air jump":"禁止_PARAM0_空中跳躍","Abort jump":"中止跳躍","Abort the current jump and stop the object vertically. This action doesn't have any effect when the character is not jumping.":"中止當前跳轉并垂直停止物件。當角色不跳時,這個動作不會有任何效果。","Abort the current jump of _PARAM0_":"中止當前_PARAM0_ 的跳躍","Can jump":"可以跳","Check if the object can jump.":"檢查物件是否可以跳躍。","_PARAM0_ can jump":"_PARAM0_ 可以跳","Simulate left key press":"模擬左鍵按下","Simulate a press of the left key.":"模擬左鍵的按下。","Simulate pressing Left for _PARAM0_":"模擬 _PARAM0_ 左鍵按下","Platformer controls":"平臺控制","Simulate right key press":"模擬右鍵按下","Simulate a press of the right key.":"模擬右鍵的按下。","Simulate pressing Right for _PARAM0_":"模擬 _PARAM0_ 右鍵按下","Simulate up key press":"模擬上鍵按下","Simulate a press of the up key (used when on a ladder).":"模擬上鍵的按下(在梯子上時)。","Simulate pressing Up for _PARAM0_":"模擬 _PARAM0_ 上鍵按下","Simulate down key press":"模擬下鍵按下","Simulate a press of the down key (used when on a ladder).":"模擬下鍵的按下(在梯子上時)。","Simulate pressing Down for _PARAM0_":"模擬 _PARAM0_ 下鍵按下","Simulate ladder key press":"模擬梯鍵按下","Simulate a press of the ladder key (used to grab a ladder).":"模擬梯鍵按下(用于抓住梯子)。","Simulate pressing Ladder key for _PARAM0_":"模擬 _PARAM0_ 梯鍵按下","Simulate release ladder key press":"模擬釋放梯形按鍵","Simulate a press of the Release Ladder key (used to get off a ladder).":"模擬按下釋放梯子鍵(用于離開梯子)。","Simulate pressing Release Ladder key for _PARAM0_":"模擬按下_PARAM0_的釋放梯鍵","Simulate jump key press":"模擬跳躍鍵按下","Simulate a press of the jump key.":"模擬跳躍鍵的按下。","Simulate pressing Jump key for _PARAM0_":"模擬 _PARAM0_ 跳躍鍵按下","Simulate release platform key press":"模擬釋放平臺按鍵","Simulate a press of the release platform key (used when grabbing a platform ledge).":"模擬按下釋放平臺鍵(在抓住平臺壁架時使用)。","Simulate pressing Release Platform key for _PARAM0_":"模擬按下 _PARAM0_ 的釋放平臺鍵","Simulate control":"類比控制","Simulate a press of a key.\nValid keys are Left, Right, Jump, Ladder, Release Ladder, Up, Down.":"模擬按鍵的按下。\n有效的鍵是向左、向右、跳躍、梯子、釋放梯子、向上、向下。","Simulate pressing _PARAM2_ key for _PARAM0_":"模擬 _PARAM0_ _PARAM2_ 鍵按下","Key":"關鍵","Control pressed or simulated":"按下或模擬控制","A control was applied from a default control or simulated by an action.":"從默認控制或通過動作模擬應用控制。","_PARAM0_ has the _PARAM2_ key pressed or simulated":"_PARAM0_ 按下或模擬的 _PARAM2_ 鍵","Ignore default controls":"忽略默認控制","De/activate the use of default controls.\nIf deactivated, use the simulated actions to move the object.":"取消/激活默認控制的使用。\n如果取消激活,使用模擬的動作移動物件。","Ignore default controls for _PARAM0_: _PARAM2_":"忽略_PARAM0_的默認控件:_PARAM2_","Ignore controls":"忽略控制","Platform grabbing":"平臺抓取","Enable (or disable) the ability of the object to grab platforms when falling near to one.":"啟用(或禁用)物件接近平臺時抓住平臺的能力。","Allow _PARAM0_ to grab platforms: _PARAM2_":"允許 _PARAM0_ 抓取平臺:_PARAM2_","Can grab platforms":"可以抓取平臺","Check if the object can grab the platforms.":"檢查物件是否可以抓取平臺。","_PARAM0_ can grab the platforms":"_PARAM0_ 可以抓取平臺","Current falling speed":"當前下落速度","Compare the current falling speed of the object. Its value is always positive.":"比較物體當前的下降速度,它的值總是正數。","the current falling speed":"當前下降速度","Change the current falling speed of the object. This action doesn't have any effect when the character is not falling or is in the first phase of a jump.":"改變物體當前的下落速度。當角色沒有下落或者處于跳躍的第一階段時,這個動作沒有任何效果。","Current jump speed":"當前跳躍速度","Compare the current jump speed of the object. Its value is always positive.":"比較物體當前的跳躍速度。它的值總是正數。","the current jump speed":"當前跳躍速度","Current horizontal speed":"當前水平速度","Change the current horizontal speed of the object. The object moves to the left with negative values and to the right with positive ones":"更改物件的當前水平速度。物件向左移動為負值,向右移動為正值","the current horizontal speed":"當前水平速度","Compare the current horizontal speed of the object. The object moves to the left with negative values and to the right with positive ones":"比較物體當前的水平速度。物件向左移動為負值,向右移動為正值","Return the gravity applied on the object (in pixels per second per second).":"返回應用于物件的重力(每秒像素/秒)。","Return the maximum falling speed of the object (in pixels per second).":"返回物件的最大下降速度(每秒像素)。","Return the ladder climbing speed of the object (in pixels per second).":"返回物件的爬梯速度(每秒像素)。","Return the horizontal acceleration of the object (in pixels per second per second).":"返回物件的水平加速度(每秒像素/秒)。","Return the horizontal deceleration of the object (in pixels per second per second).":"返回物件的水平減速(每秒像素/秒)。","Return the maximum horizontal speed of the object (in pixels per second).":"返回物件的最大水平速度(每秒像素)。","Return the jump speed of the object (in pixels per second). Its value is always positive.":"返回物件的跳躍速度(每秒像素)。其值總是正數。","Return the jump sustain time of the object (in seconds).This is the time during which keeping the jump button held allow the initial jump speed to be maintained.":"返回物體的跳轉維持時間(以秒為單位)。在這段時間內,保持跳躍按鈕不動,可以保持初始跳躍速度。","Current fall speed":"當前下落速度","Return the current fall speed of the object (in pixels per second). Its value is always positive.":"返回物件當前的下降速度(每秒像素)。其值總是正數。","Return the current horizontal speed of the object (in pixels per second). The object moves to the left with negative values and to the right with positive ones":"返回物件當前水平的速度(每秒像素)。 物件帶著負值向左移動,帶著正值向右移動","Return the current jump speed of the object (in pixels per second). Its value is always positive.":"返回物件當前的跳躍速度(每秒像素)。其值總是正數。","Flag objects as being platforms which characters can run on.":"將物件標記為角色可以在其上運行的平臺。","Platform type":"平臺類型","Change the platform type of the object: Platform, Jump-Through, or Ladder.":"更改平臺的平臺類型:平臺、跳轉、或梯形。","Set platform type of _PARAM0_ to _PARAM2_":"設定 _PARAM0_ 的平臺類型為 _PARAM2_","Character is on given platform":"角色在給定平臺上","Check if a platformer character is on a given platform.":"檢查平臺遊戲角色是否在給定平臺上。","_PARAM0_ is on platform _PARAM2_":"_PARAM0_ 位于平臺 _PARAM2_ 上","Collision":"碰撞","Platforms":"平臺","Font size":"字體大小","Alignment":"對準","Alignment of the text when multiple lines are displayed":"當顯示多行時文本的對齊方式","Vertical alignment":"垂直對齊","Show outline":"顯示輪廓線","Show shadow":"顯示陰影","Text object":"文字對象","An object that can be used to display any text on the screen: remaining life counter, some indicators, menu buttons, dialogues...":"一個可用于在屏幕上顯示任何文本的物件:剩餘的生命計數器、一些指標、菜單按鈕、對話...","Displays a text on the screen.":"在屏幕上顯示文本。","Change the font of the text.":"更改文本字體。","Change font of _PARAM0_ to _PARAM1_":"把 _PARAM0_ 的字體更改為 _PARAM1_","Font resource name":"字體資源名稱","Change the color of the text. The color is white by default.":"更改文本的顏色。默認顏色是白色。","Change color of _PARAM0_ to _PARAM1_":"把 _PARAM0_ 的顏色更改為 _PARAM1_","Gradient":"梯度","Change the gradient of the text.":"更改文本的漸變。","Change gradient of _PARAM0_ to colors _PARAM2_ _PARAM3_ _PARAM4_ _PARAM5_, type _PARAM1_":"將 _PARAM0_ 的漸變更改為顏色 _PARAM2_ _PARAM3_ _PARAM4_ _PARAM5_,輸入 _PARAM1_","Gradient type":"漸變類型","First Color":"第一個顏色","Second Color":"第二個顏色","Third Color":"第三個顏色","Fourth Color":"第四個顏色","Change the outline of the text. A thickness of 0 disables the outline.":"更改文本的輪廓。厚度0會禁用輪廓。","Change outline of _PARAM0_ to color _PARAM1_ with thickness _PARAM2_":"將_PARAM0_的輪廓更改為顏色_PARAM1_,厚度為_PARAM2_","Enable outline":"啟用輪廓線","Enable or disable the outline of the text.":"啟用或禁用文本輪廓線。","Enable the outline of _PARAM0_: _PARAM1_":"啟用_PARAM0_的輪廓線:_PARAM1_","Outline enabled":"輪廓線已啟用","Check if the text outline is enabled.":"檢查文本輪廓線是否啟用。","The outline of _PARAM0_ is enabled":"_PARAM0_ 的輪廓線已啟用","Change the outline color of the text.":"更改文本的輪廓線顏色。","Change the text outline color of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的文本輪廓線顏色更改為 _PARAM1_","Outline thickness":"輪廓線厚度","the outline thickness of the text":"文本的輪廓線厚度","the text outline thickness":"文本輪廓線厚度","Text shadow":"文字陰影","Change the shadow of the text.":"更改文本的陰影。","Change the shadow of _PARAM0_ to color _PARAM1_ distance _PARAM2_ blur _PARAM3_ angle _PARAM4_":"將_PARAM0_ 的陰影改為顏色 _PARAM1_ 距離_PARAM2_ 模糊 _PARAM3_ 角度 _PARAM4_","Blur":"模糊","Enable shadow":"啟用陰影","Enable or disable the shadow of the text.":"啟用或禁用文本的陰影。","Enable the shadow of _PARAM0_: _PARAM1_":"啟用 _PARAM0_ 的陰影:_PARAM1_","Show the shadow":"顯示陰影","Shadow enabled":"陰影已啟用","Check if the text shadow is enabled.":"檢查文字陰影是否已啟用。","The shadow of _PARAM0_ is enabled":"_PARAM0_ 的陰影已啟用","Shadow color":"陰影顏色","Change the shadow color of the text.":"更改文本的陰影顏色。","Change the shadow color of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的陰影顏色更改為 _PARAM1_","Shadow opacity":"陰影不透明度","the shadow opacity of the text":"文本的陰影不透明度","the shadow opacity ":"陰影不透明度 ","Shadow distance":"陰影距離","the shadow distance of the text":"文本的陰影距離","the shadow distance ":"陰影距離 ","Shadow angle":"陰影角度","the shadow angle of the text":"文本的陰影角度","the shadow angle ":"陰影角度 ","Angle (in degrees)":"角度 (度):","Shadow blur radius":"陰影模糊半徑","the shadow blur radius of the text":"文本的陰影模糊半徑","the shadow blur radius ":"陰影模糊半徑 ","Smoothing":"平滑","Activate or deactivate text smoothing.":"激活或取消激活文本平滑。","Smooth _PARAM0_: _PARAM1_":"平滑 _PARAM0_: _PARAM1_","Style":"樣式","Smooth the text":"平滑文字","Check if an object is smoothed":"檢查物件是否平滑","_PARAM0_ is smoothed":"_PARAM0_ 已平滑化","De/activate bold":"不/激活粗體","Set bold style of _PARAM0_ : _PARAM1_":"設定 _PARAM0_ 的粗體樣式: _PARAM1_","Set bold style":"設定粗體樣式","Check if the bold style is activated":"測試粗體樣式是否被激活","_PARAM0_ bold style is set":"_PARAM0_ 的粗體樣式已設定","De/activate italic.":"不/激活斜體。","Set italic style for _PARAM0_ : _PARAM1_":"設定 _PARAM0_ 的斜體樣式: _PARAM1_","Set italic":"設定斜體","Check if the italic style is activated":"檢查斜體樣式是否被激活","_PARAM0_ italic style is set":"_PARAM0_ 的斜體樣式已設定","Underlined":"下劃線","De/activate underlined style.":"不/激活下劃線。","Set underlined style of _PARAM0_: _PARAM1_":"設定_PARAM0_ 的下劃線樣式: _PARAM1_","Underline":"下劃線","Check if the underlined style of an object is set.":"檢查物件的下劃線樣式是否被激活","_PARAM0_ underlined style is activated":"_PARAM0_ 的下劃線已激活","Padding":"填充","Compare the number of pixels around a text object. If the shadow or the outline around the text are getting cropped, raise this value.":"比較文本物件周圍的像素數。 如果文本周圍的陰影或輪廓被裁剪,請提高此值。","the padding":"填充","Set the number of pixels around a text object. If the shadow or the outline around the text are getting cropped, raise this value.":"設定文本物件周圍的像素數。 如果文本周圍的陰影或輪廓被裁剪,請提高此值。","Change the text alignment of a multiline text object.":"Change the text alignment of a multiline text object.","Align _PARAM0_: _PARAM1_":"對齊_PARAM0_:_PARAM1_","Compare the text alignment of a multiline text object.":"比較多行文本物件的文本對齊方式。","the alignment":"對齊方式","Word wrapping":"自動換行","De/activate word wrapping. Note that word wrapping is a graphical option,\nyou can't get the number of lines displayed":"取消/激活自動換行。注意,自動換行是一個圖形選項,\n您不能獲得顯示的行數","Activate word wrapping of _PARAM0_: _PARAM1_":"Activate word wrapping of _PARAM0_: _PARAM1_","Wrapping":"自動換行","Check if word wrapping is enabled.":"Check if word wrapping is enabled.","_PARAM0_ word wrapping is enabled":"_PARAM0_ word wrapping is enabled","Wrapping width":"自動換行寬度","Change the word wrapping width of a Text object.":"Change the word wrapping width of a Text object.","the wrapping width":"自動換行寬度","Compare the word wrapping width of a Text object.":"Compare the word wrapping width of a Text object.","the font size of a text object":"文本物件的字體大小","the font size":"字體大小","the line height of a text object":"文本物件的行高","the line height":"行高","Modify the angle of a Text object.":"修改文字物件的角度。","the angle":"角度","Compare the value of the angle of a Text object.":"測試文本物件的角度值。","Angle to compare to (in degrees)":"與之比較的角度(度)","Compare the scale of the text on the X axis":"比較文本在 X 軸上的縮放比例","the scale on the X axis":"x 軸上的縮放比例","Scale to compare to (1 by default)":"要比較的比例(默認為1)","Modify the scale of the text on the X axis (default scale is 1)":"更改文字在 X 軸上的縮放比例(默認比例為 1)","Scale (1 by default)":"縮放 ( 默認1)","Compare the scale of the text on the Y axis":"比較文本在 Y 軸上的縮放比例","the scale on the Y axis":"y 軸上的縮放比例","Modify the scale of the text on the Y axis (default scale is 1)":"更改文字在 Y 軸上的縮放比例(默認比例為 1)","Modify the scale of the specified object (default scale is 1)":"更改特定物件的縮放比例(默認比例為 1)","X Scale of a Text object":"文字物件的X比例尺","Y Scale of a Text object":"文字物件的Y比例尺","Text opacity":"文本不透明度","Change the opacity of a Text. 0 is fully transparent, 255 is opaque (default).":"更改文本的不透明度。0是完全透明的, 255 是不透明的 (默認值)。","Opacity (0-255)":"不透明度 (0-255)","Compare the opacity of a Text object, between 0 (fully transparent) to 255 (opaque).":"比較物件的不透明度,0(完全透明)到 255(不透明)之間取值","Opacity to compare to (0-255)":"用來比較的透明度 (0-255)","Opacity of a Text object":"文本物件的不透明度","Modify the text":"修改文本","Modify the text of a Text object.":"修改文字物件的文本。","the text":"文本","Compare the text":"比較文字","Compare the text of a Text object.":"比較文字物件的文本。","Text to compare to":"要比較的文本","Texture":"紋理","Tiled Sprite Object":"瓦塊精靈物件","Tiled Sprite":"瓦塊精靈","Displays an image repeated over an area.":"顯示在一個區域上重復的圖像。","Compare the opacity of a Tiled Sprite, between 0 (fully transparent) to 255 (opaque).":"比較平鋪精靈的不透明度,介于 0(完全透明)到 255(不透明)之間。","Change Tiled Sprite opacity":"更改平鋪精靈的不透明度","Change the opacity of a Tiled Sprite. 0 is fully transparent, 255 is opaque (default).":"更改一個平鋪精靈的不透明度, 0為完全透明, 255為不透明(默認值)。","Tint color":"主題顏色","Change the tint of a Tiled Sprite. The default color is white.":"更改平鋪精靈的色調。默認顏色是白色。","Change tint of _PARAM0_ to _PARAM1_":"把 _PARAM0_ 的顏色更改為 _PARAM1_","Tint":"著色","Modify the width of a Tiled Sprite.":"修改平鋪的精靈的寬度。","Test the width of a Tiled Sprite.":"修改平鋪的精靈的寬度。","Modify the height of a Tiled Sprite.":"修改平鋪 Sprite 的高度。","Test the height of a Tiled Sprite.":"測試Panel Sprite的高度。","Modify the size of a Tiled Sprite.":"修改瓷磚精靈的大小。","Change the size of _PARAM0_: set to _PARAM1_x_PARAM2_":"更改_PARAM0_的大小:設定為 _PARAM1_x_PARAM2_","Modify the angle of a Tiled Sprite.":"修改Panel Sprite的角度。","Image X Offset":"圖像 X 偏移","Modify the offset used on the X axis when displaying the image.":"修改在 X 軸上顯示圖像時的偏移量。","the X offset":"X 偏移量","Image offset":"圖像偏移","Test the offset used on the X axis when displaying the image.":"測試在 X 軸上顯示圖像時的偏移量。","Return the offset used on the X axis when displaying the image.":"返回顯示圖像時在 X 軸上使用的偏移量。","Image Y Offset":"圖像 Y 偏移","Modify the offset used on the Y axis when displaying the image.":"修改在 Y 軸上顯示圖像時的偏移量。","the Y offset":"Y 偏移量","Test the offset used on the Y axis when displaying the image.":"測試在 Y 軸上顯示圖像時的偏移量。","Return the offset used on the Y axis when displaying the image.":"返回顯示圖像時在 Y 軸上使用的偏移量。","Change the image of a Tiled Sprite.":"更改平鋪精靈的圖像。","Set image _PARAM1_ on _PARAM0_":"在 _PARAM0_ 上設定圖像 _PARAM1_","Allows diagonals":"允許對角線","Path smoothing":"路徑平滑","Rotation speed":"旋轉速度","Rotate object":"旋轉物件","Angle offset":"角度偏移","Cell width":"單元格寬度","Virtual Grid":"虛擬網格","Cell height":"單元格高度","X offset":"X 偏移量","Y offset":"Y 偏移量","Extra border size":"額外邊框大小","Smoothing max cell gap":"平滑最大單元間隙","It's recommended to leave a max gap of 1 cell. Setting it to 0 disable the smoothing.":"建議保留 1 個單元格的最大間隙。將其設定為 0 禁用平滑。","Impassable obstacle":"不可通行的障礙","Cost (if not impassable)":"損失(如果不可通行)","Pathfinding behavior":"尋路行為","Pathfinding":"尋路","Move objects to a target while avoiding all objects that are flagged as obstacles.":"將物件移動到目標,同時避開標記為障礙物的所有物件。","Move to a position":"移動到某個位置","Move the object to a position":"移動物件到某個位置","Move _PARAM0_ to _PARAM3_;_PARAM4_":"移動 _PARAM0_ 到 _PARAM3_;_PARAM4_","Movement on the path":"在路徑上移動","Destination X position":"目的地X坐標","Destination Y position":"目的地Y坐標","Path found":"路徑尋找","Check if a path has been found.":"檢查是否找到路徑。","A path has been found for _PARAM0_":"_PARAM0_ 找到了路徑","Destination reached":"到達目的地","Check if the destination was reached.":"檢查是否到達目的地。","_PARAM0_ reached its destination":"_ PARAM0 _reached 其目的地","Width of the cells":"單元格寬度","Change the width of the cells of the virtual grid.":"更改虛擬網格的單元格的寬度。","the width of the virtual cells":"虛擬單元格的寬度","Virtual grid":"虛擬網格","Width of the virtual grid":"虛擬網格的寬度","Compare the width of the cells of the virtual grid.":"比較虛擬網格單元格的寬度。","Height of the cells":"單元格高度","Change the height of the cells of the virtual grid.":"更改虛擬網格的單元格的高度。","the height of the virtual cells":"虛擬單元格的高度","Height of the virtual grid":"虛擬網格的高度","Compare the height of the cells of the virtual grid.":"比較虛擬網格的單元格的高度。","Change the acceleration when moving the object":"移動物件時更改加速","the acceleration on the path":"路徑上的加速度","Pathfinding configuration":"路徑定位配置","Compare the acceleration when moving the object":"在移動物件時比較加速度","the acceleration":"加速度","Maximum speed":"最大速度","Change the maximum speed when moving the object":"移動物件時更改最大速度","the max. speed on the path":"路徑上的最大速度","Compare the maximum speed when moving the object":"比較移動物件時的最大速度","the max. speed":"最大速度","Speed":"速度","Change the speed of the object on the path":"更改路徑上物件的速度","the speed on the path":"路徑上的速度","Speed on its path":"路徑上的速度","Compare the speed of the object on its path.":"比較物體在其路徑上的速度。","the speed":"速度","Angle of movement on its path":"路徑上的移動角度","Compare the angle of movement of an object on its path.":"比較物體在其路徑上的運動角度。","Angle of movement of _PARAM0_ is _PARAM2_ ± _PARAM3_°":"_PARAM0_ 的移動角度為 _PARAM2_ ± _PARAM3_°","Angle, in degrees":"角度,以度為單位","Tolerance, in degrees":"公差(度)","Angular maximum speed":"角的最大速度","Change the maximum angular speed when moving the object":"移動物件時更改最大角速度","the max. angular speed on the path":"路徑上的最大角速度","Max angular speed (in degrees per second)":"最大角速度(度/秒)","Compare the maximum angular speed when moving the object":"比較移動物體時的最大角速度","the max. angular speed":"最大角速度","Max angular speed to compare to (in degrees per second)":"與之比較的最大角速度(像素/秒)","Rotation offset":"旋轉偏移量","Change the rotation offset applied when moving the object":"更改移動物件時應用的旋轉偏移量。","the rotation offset on the path":"路徑上的旋轉偏移","Compare the rotation offset when moving the object":"比較移動物體時的旋轉偏移量。","the rotation offset":"旋轉偏移","Extra border":"額外邊框","Change the size of the extra border applied to the object when planning a path":"在規劃路徑時更改應用于物件的額外邊框的大小。","the size of the extra border on the path":"路徑上額外邊框的大小","Compare the size of the extra border applied to the object when planning a path":"在規劃路徑時比較應用于物件的額外邊框的大小。","Diagonal movement":"對角移動","Allow or restrict diagonal movement on the path":"允許或限制路徑上的對角線移動。","Allow diagonal movement for _PARAM0_ on the path: _PARAM2_":"允許路徑上_PARAM0_的對角線移動:_PARAM2_","Allow?":"是否允許?","Check if the object is allowed to move diagonally on the path":"檢查是否允許物件在路徑上對角移動","Diagonal moves allowed for _PARAM0_":"允許 _ PARAM0 _ 的對角線移動","Rotate the object":"旋轉對象","Enable or disable rotation of the object on the path":"啟用或禁用路徑上物件的旋轉","Enable rotation of _PARAM0_ on the path: _PARAM2_":"啟用 _ PARAM0 行動的旋轉路徑: _ PARAM2 _","Rotate object?":"旋轉物體?","Object rotated":"物件被旋轉","Check if the object is rotated when traveling on its path.":"檢查物體在其路徑上行駛時是否旋轉。","_PARAM0_ is rotated when traveling on its path":"_ PARAM0 _is 在其路徑上移動時旋轉","Get a waypoint X position":"取一個路徑點的X坐標","Get next waypoint X position":"取下一個路徑點的X坐標","Node index (start at 0!)":"節點索引(0開始)","Get a waypoint Y position":"取一個路徑點的Y坐標","Get next waypoint Y position":"取下一個路徑點的Y坐標","Index of the next waypoint":"下一個路徑點的索引","Get the index of the next waypoint to reach":"到下一個關鍵點指標達到","Waypoint count":"路徑點計數","Get the number of waypoints on the path":"獲取路徑上的點數","Last waypoint X position":"最后航點 X 位置","Last waypoint Y position":"最后航點 Y 位置","Acceleration of the object on the path":"物件在路徑上的加速度","Maximum speed of the object on the path":"路徑上物件的最大速度","Speed of the object on the path":"物件在路徑上的速度","Angular maximum speed of the object on the path":"物體在路徑上的角度最大速度","Rotation offset applied the object on the path":"旋轉偏移應用了路徑上的物件","Extra border applied the object on the path":"額外的邊框應用路徑上的物件","Width of a cell":"單元的寬度","Height of a cell":"單元的高度","Grid X offset":"網格 X 偏移量","X offset of the virtual grid":"虛擬網格的X偏移量","Grid Y offset":"網格Y 偏移","Y offset of the virtual grid":"虛擬網格的Y偏移量","Obstacle for pathfinding":"尋路障礙","Flag objects as being obstacles for pathfinding.":"標記物件為路徑障礙物。","Cost":"開銷","Change the cost of going through the object.":"更改通過物件的成本。","the cost":"代價","Obstacles":"障礙","Compare the cost of going through the object":"比較通過物件的成本","Should object be impassable":"如果物體無法通過","Decide if the object is an impassable obstacle.":"判斷該物體是否為無法通過的障礙物。","Set _PARAM0_ as an impassable obstacle: _PARAM2_":"將 _PARAM0_ 設定為無法通行的障礙: _PARAM2_","Impassable":"無法通過","Check if the obstacle is impassable.":"檢查障礙物是否無法通過。","_PARAM0_ is impassable":"_PARAM0_ 是無法通行的","Obstacle cost":"障礙開銷","Margins":"邊界","Panel Sprite (9-patch) Object":"Panel Sprite (\"9-patch\")物件","Panel Sprite (\"9-patch\")":"面板精靈 (\"9-patch\")","An image with edges and corners that are stretched separately from the full image.":"邊緣和角落分別與完整圖像分開的圖像。","Compare the opacity of a Panel Sprite, between 0 (fully transparent) to 255 (opaque).":"比較面板精靈的不透明度,介于0(完全透明)到255(不透明)之間。","Change Panel Sprite opacity":"更改面板精靈的不透明度","Change the opacity of a Panel Sprite. 0 is fully transparent, 255 is opaque (default).":"更改面板精靈的不透明度。 0是完全透明的,255是不透明的(默認)。","Panel Sprite":"面板精靈","Change the tint of a Panel Sprite. The default color is white.":"更改面板精靈的色調。默認顏色為白色。","Modify the width of a Panel Sprite.":"修改面板精靈的寬度。","Size and angle":"大小和角度","Check the width of a Panel Sprite.":"檢查面板精靈的寬度。","Modify the height of a Panel Sprite.":"修改 Panel Sprite 的高度。","Check the height of a Panel Sprite.":"檢查 Panel Sprite 的高度。","Image name (deprecated)":"圖像名稱 (已廢棄)","Change the image of a Panel Sprite.":"更改面板精靈的圖像。","Image name":"圖像名稱","Image file (or image resource name)":"圖像文件 (或圖像資源名稱)","Allow diagonals":"允許對角線","Only use acceleration to turn back (deprecated — best left unchecked)":"僅使用加速來轉回(已棄用 - 最好保持不勾選)","Top-Down":"自上而下","Isometry 2:1 (26.565°)":"等距 2:1 (26.565°)","True Isometry (30°)":"真實等距 (30°)","Custom Isometry":"自定義幾何體","Custom isometry angle (between 1deg and 44deg)":"自定義等距角度(在1度和44度之間)","If you choose \"Custom Isometry\", this allows to specify the angle of your isometry projection.":"如果你選擇“自定義等距”,這允許指定你的等距投影的角度","Movement angle offset":"移動角度偏移","Usually 0, unless you choose an *Isometry* viewpoint in which case -45 is recommended.":"通常為0,除非您選擇一個 *Isometry* 視點,在這種情況下推薦-45","Top-down movement":"自上而下的運動","Allows to move an object in either 4 or 8 directions, with the keyboard (default), a virtual stick (for this, also add the \"Top-down multitouch controller mapper\" behavior and a\"Multitouch Joystick\" object), gamepad or manually using events.":"允許對象在四個或八個方向中移動,使用鍵盤(默認),虛擬搖桿(為此,還需添加「自上而下的多點觸控控制器映射器」行為和「多點觸控搖桿」對象)、遊戲手柄或使用事件手動。","Top-down movement (4 or 8 directions)":"自上而下的運動(4或8個方向)","Move objects left, up, right, and down (and, optionally, diagonally).":"向左、向上、向右和向下移動物件(還可以選擇對角線方向)。","Simulate a press of left key.":"模擬左鍵的按下。","Top-down controls":"自上而下的控制","Simulate a press of right key.":"模擬右鍵的按下。","Simulate a press of up key.":"模擬上鍵的按下。","Simulate a press of down key.":"模擬按下鍵模擬。","Simulate a press of a key.\nValid keys are Left, Right, Up, Down.":"模擬按下一個鍵。\n有效按鍵為左,右,上,下。","Simulate stick control":"模擬搖桿控制","Simulate a stick control.":"模擬搖桿控制。","Simulate a stick control for _PARAM0_ with a _PARAM2_ angle and a _PARAM3_ force":"以 _PARAM2_ 的角度和 _PARAM3_ 的力度模擬 _PARAM0_ 的搖桿控制","Stick angle (in degrees)":"搖桿角度(以度為單位)","In top-down movement, a stick angle of 0° moves the object to the right. 90° moves it down, and -90° moves it up.":"在自上而下的運動中,搖桿角度為0°時,物體向右移動。90°時向下移動,而-90°時向上移動。","Stick force (between 0 and 1)":"搖桿力度(介于0和1之間)","Top-down state":"自上而下的狀態","Stick angle":"置頂角度","Return the angle of the simulated stick input (in degrees)":"返回模擬桿輸入的角度(以度為單位)","Check if the object is moving.":"檢測物件是否正在移動","Change the acceleration of the object":"變更物件的加速度","Top-down configuration":"自上而下的配置","Compare the acceleration of the object":"比較物件的加速度","Change the deceleration of the object":"改變物件的減速度","the deceleration":"減速","Compare the deceleration of the object":"比較物件的加速度","Change the maximum speed of the object":"改變物體的最大角速度","Compare the maximum speed of the object":"比較物件的最大速度","Compare the speed of the object":"比較物件的速度","Change the maximum angular speed of the object":"改變物體的最大角速度","Compare the maximum angular speed of the object":"比較物件的最大速度","Compare the rotation offset applied when moving the object":"更改移動物件時應用的旋轉偏移量。","Angle of movement":"運動的角度","Compare the angle of the top-down movement of the object.":"比較物件自上而下移動的角度。","the angle of movement":"移動角度","Tolerance (in degrees)":"公差(度)","Speed on X axis":"X軸速度","Compare the velocity of the top-down movement of the object on the X axis.":"比較物件在X軸上自上而下移動的速度。","the speed of movement on X axis":"X軸上的移動速度","Speed on the X axis":"X軸速度","Change the speed on the X axis of the movement":"更改移動的 X 軸上的速度","the speed on the X axis of the movement":"移動的 X 軸上的速度","Speed on Y axis":"Y軸速度","Compare the velocity of the top-down movement of the object on the Y axis.":"比較物件在 Y 軸上自上而下移動的速度。","the speed of movement on Y axis":"Y 軸上的移動速度","Speed on the Y axis":"Y軸速度","Change the speed on the Y axis of the movement":"更改移動的 Y 軸上的速度","the speed on the Y axis of the movement":"移動的 Y 軸速度","Allow or restrict diagonal movement":"允許或限制對角線移動","Allow diagonal moves for _PARAM0_: _PARAM2_":"對于 _PARAM0_允許非軸向移動: _PARAM2_","Check if the object is allowed to move diagonally":"檢查物件是否被允許沿對角線移動","Allow diagonal moves for _PARAM0_":"允許 _PARAM0_ 的非軸向移動","Enable or disable rotation of the object":"啟用或禁用路徑上物件的旋轉","Enable rotation of _PARAM0_: _PARAM2_":"允許_PARAM0_旋轉: _PARAM2_","Check if the object is rotated while traveling on its path.":"檢查物體在其路徑上行駛時是否旋轉。","_PARAM0_ is rotated when moving":"_PARAM0_在移動中被旋轉","Acceleration of the object":"物體加速度","Deceleration of the object":"物件的減速","Maximum speed of the object":"物件的最大速度","Speed of the object":"物體的速度","Angular maximum speed of the object":"物體的角度最大速度","Rotation offset applied to the object":"旋轉偏移應用于物件","Angle of the movement":"移動角度","Angle, in degrees, of the movement":"移動角度,程度","Speed on the X axis of the movement":"移動X軸速度","Speed on the Y axis of the movement":"移動Y軸速度","the movement angle offset":"移動角度偏移","Inventories":"背包","Actions and conditions to store named inventories in memory, with items (indexed by their name), a count for each of them, a maximum count and an equipped state. Can be loaded/saved from/to a GDevelop variable.":"在記憶體中存儲具名庫存的操作和條件,包含按名稱編索引的物品、每個物品的數量、最大數量和裝備狀態。可以從GDevelop變數加載或保存。","Add an item":"添加物品","Add an item in an inventory.":"在背包中增加一個物品","Add a _PARAM2_ to inventory _PARAM1_":"向背包 _PARAM1_中添加一個 _PARAM2_","Inventory name":"背包名","Item name":"物品名","Remove an item":"移除一個物品","Remove an item from an inventory.":"從一個背包中移除一個物品","Remove a _PARAM2_ from inventory _PARAM1_":"從背包_PARAM1_中移除一個_PARAM2_","Item count":"物品計數","Compare the number of an item in an inventory.":"比較一個物品在一個背包中的編號","the count of _PARAM2_ in _PARAM1_":"_PARAM1_ 中 _PARAM2_ 的個數","Has an item":"有一個物品","Check if at least one of the specified items is in the inventory.":"檢查在背包中是否含有至少一個指定物品","Inventory _PARAM1_ contains a _PARAM2_":"背包_PARAM1_中包含一個_PARAM2_","Set a maximum count for an item":"設定一個物品的最大數量","Set the maximum number of the specified item that can be added in the inventory. By default, the number allowed for each item is unlimited.":"設定一個背包中能夠一個物品添加指定物品的最大數量。在默認情況下,每個物品的上限數量是無限的。","Set the maximum count for _PARAM2_ in inventory _PARAM1_ to _PARAM3_":"將在背包_PARAM1_中_PARAM2_的最大數量設定成_PARAM3_","Maximum count":"最大數量","Set unlimited count for an item":"將一個物品的最大數量設定成無限多","Allow an unlimited amount of an object to be in an inventory. This is the case by default for each item.":"允許背包中存在最大數量為無限多的一個物品(物品最大數量的默認設定是為無限多)。","Allow an unlimited count of _PARAM2_ in inventory _PARAM1_: _PARAM3_":"允許在背包_PARAM1: _PARAM3_中有不限數量的物品_PARAM2_","Allow an unlimited amount?":"允許不限數量?","Item full":"物品已滿","Check if an item has reached its maximum number allowed in the inventory.":"檢查物料是否已達到庫存中允許的最大數量。","Inventory _PARAM1_ is full of _PARAM2_":"背包 _PARAM1_ is full of _PARAM2_","Equip an item":"裝備一個物品","Mark an item as being equipped. If the item count is 0, it won't be marked as equipped.":"將項目標記為正在裝備。 如果項目數為0,則不會被標記為裝備。","Set _PARAM2_ as equipped in inventory _PARAM1_: _PARAM3_":"設定 _PARAM2 盡可能裝備庫存 _PARAM1_: _ Param3 _","Equip?":"裝備嗎?","Item equipped":"裝備的物品","Check if an item is equipped.":"檢查是否裝備了物品","_PARAM2_ is equipped in inventory _PARAM1_":"_PARAM2_在背包_PARAM1_中被裝備","Save an inventory in a scene variable":"在場景變量中保存庫存","Save all the items of the inventory in a scene variable, so that it can be restored later.":"將庫存的所有項目保存在場景變量中,以便之后可以還原。","Save inventory _PARAM1_ in variable _PARAM2_":"將庫存_PARAM1_保存在變量_PARAM2_中","Load an inventory from a scene variable":"從場景變量加載庫存","Load the content of the inventory from a scene variable.":"從場景變量加載庫存中的內容。","Load inventory _PARAM1_ from variable _PARAM2_":"從_PARAM2_中讀取背包_PARAM1_","Get the number of an item in the inventory":"獲取一個物品在此背包中的編號","Item maximum":"項目最大值","Get the maximum of an item in the inventory, or 0 if it is unlimited":"獲取庫存中物品的最大值,如果是無限的,則為0","Spine json":"Spine json","Skin":"皮膚","System information":"系統信息","Conditions to check if the device has a touchscreen, is a mobile, or if the game runs as a preview.":"檢查設備是否具備觸控螢幕、是否為行動設備,或遊戲是否以預覽模式運行。","Is a mobile device":"是一個移動設備","Check if the device running the game is a mobile device (phone or tablet on iOS, Android or other mobile devices). The game itself might be a web game or distributed as a native mobile app (to check this precisely, use other conditions).":"檢查運行遊戲的設備是否是移動設備(iOS、 Android 或其他移動設備上的手機或平板電腦)。遊戲本身可能是一個網絡遊戲,或者作為本地移動應用程序發布(為了精確地檢查這一點,使用其他條件)。","The device is a mobile device":"該設備是一個移動設備","Is a native mobile app":"是一個本地的移動應用程序","Check if the game is running as a native mobile app (iOS or Android app).":"檢查遊戲是否作為本地移動應用程序(iOS 或 Android 應用程序)運行。","The game is running as a native mobile app":"這個遊戲是作為本地移動應用程序運行的","Is a native desktop app":"是一個本地桌面應用程序","Check if the game is running as a native desktop app.":"檢查遊戲是否作為本地桌面應用程序運行。","The game is running as a native desktop app":"這個遊戲是作為一個本地桌面應用程序運行的","Is WebGL supported":"是否支持 WebGL","Check if GPU accelerated WebGL is supported on the target device.":"檢查目標設備上是否支持 GPU 加速的 WebGL。","WebGL is available":"WebGL 可用","Is the game running as a preview":"遊戲作為預覽運行","Check if the game is currently being previewed in the editor. This can be used to enable a \"Debug mode\" or do some work only in previews.":"檢查當前是否正在編輯器中預覽遊戲。這可用于啟用“調試模式”或僅在預覽中執行某些工作。","The game is being previewed in the editor":"遊戲正在編輯器中預覽","Device has a touchscreen":"設備有觸摸屏幕","Check if the device running the game has a touchscreen (typically Android phones, iPhones, iPads, but also some laptops).":"檢查運行遊戲的設備是否有觸摸屏(典型的安卓手機、 iPhone、 iPads 以及一些筆記本電腦)。","The device has a touchscreen":"設備有觸摸屏幕","Box (rectangle)":"框框 (矩形)","Custom polygon":"自定義多邊形","Shape":"形狀","Dynamic object":"靜態物件","Fixed rotation":"固定旋轉","Consider as bullet (better collision handling)":"考慮作為子彈 (更好的碰撞處理)","Mass density":"質量密度","Friction":"摩擦","Restitution (elasticity)":"恢復原狀 (彈性):","Linear Damping":"線性阻尼","Angular Damping":"角阻尼","Gravity on X axis (in m/s²)":"X 軸上的重力(m/s平方)","Gravity on Y axis (in m/s²)":"Y 軸上的重力(m/s平方)","X Scale: number of pixels for 1 meter":"X 縮放:1米像素數","Y Scale: number of pixels for 1 meter":"Y 縮放:1米像素數","X scale: number of pixels for 1 meter":"Y 縮放:1米像素數","Y scale: number of pixels for 1 meter":"Y 縮放:1米像素數","Deletion margin":"刪除邊界","Margin before deleting the object, in pixels.":"刪除物件之前的邊距,以像素為單位","Unseen object grace distance":"未見物件的合理距離","If the object hasn't been visible yet, don't delete it until it travels this far beyond the screen (in pixels). Useful to avoid objects being deleted before they are visible when they spawn.":"如果物件尚未可見,則在其在螢幕上超出這個距離(以像素為單位)之前不要刪除它。這對於避免物件在出現之前被刪除非常有用。","Destroy Outside Screen Behavior":"屏幕外銷毀的行為","This behavior can be used to destroy objects when they go outside of the bounds of the 2D camera. Useful for 2D bullets or other short-lived objects. Don't use it for 3D objects in a FPS/TPS game or any game with a camera not being a top view (for 3D objects, prefer comparing the position, for example Z position to see if an object goes outside of the bound of the map). If the object appears outside of the screen, it's not removed unless it goes beyond the unseen object grace distance.":"這種行為可以用來刪除當物件超出2D相機的邊界時的物件。對於2D子彈或其他短暫存在的物件非常有用。請勿將其用於FPS/TPS遊戲中的3D物件,或在任何相機不是俯視的遊戲中(對於3D物件,建議比較位置,例如Z位置以查看物件是否超出地圖的邊界)。如果物件出現在螢幕外,則除非它超過未見物件的合理距離,否則不會將其刪除。","Destroy when outside of the screen":"在屏幕外面消失","DestroyOutside":"出界刪除","Destroy objects automatically when they go outside of the 2D camera borders.":"當物件超出 2D 相機邊界時自動銷毀物件。","Additional border (extra distance before deletion)":"額外邊界(刪除前的額外距離)","the extra distance (in pixels) the object must travel beyond the screen before it gets deleted":"物件必須超過螢幕的額外距離(以像素為單位)才能被刪除","the additional border":"附加邊框","Destroy outside configuration":"銷毀外部配置","the grace distance (in pixels) before deleting the object if it has never been visible on the screen. Useful to avoid objects being deleted before they are visible when they spawn":"若物件從未在螢幕上顯示,則在刪除物件之前的優雅距離(以像素為單位)。這在物件生成時避免物件在顯示之前被刪除時非常有用","the unseen grace distance":"未見的優雅距離","relativeToOriginalWindowSize":"相對原始窗口大小","Anchor relatively to original window size":"相對於原始窗口大小的錨點","otherwise, objects are anchored according to the window size when the object is created.":"否則,物件將根據物件創建時的窗口大小來固定。","No anchor":"無錨點","Window left":"窗口左側","Window center":"窗口中心","Window right":"窗口右側","Proportional":"比例","Left edge":"左邊緣","Anchor the left edge of the object on X axis.":"將物體的左邊緣固定在X軸上。","Right edge":"右邊緣","Anchor the right edge of the object on X axis.":"將物體的右邊緣固定在X軸上。","Window top":"窗口頂部","Window bottom":"窗口底部","Top edge":"上邊緣","Anchor the top edge of the object on Y axis.":"將物體的頂部邊緣固定在Y軸上。","Bottom edge":"下邊緣","Anchor the bottom edge of the object on Y axis.":"將物體的底部邊緣固定在Y軸上。","Stretch object when anchoring right or bottom edge (deprecated, it's recommended to leave this unchecked and anchor both sides if you want Sprite to stretch instead.)":"錨定右側或底部邊緣時拉伸物件(已棄用,如果您希望 Sprite 拉伸,建議不要選中此選項并錨定兩側。)","Anchor":"錨點","Anchor objects to the window's bounds.":"將物件錨定到窗口的邊界。","Shopify":"商店","Interact with products and generate URLs for checkouts with your Shopify shop.":"與產品互動,生成 URL,以便與您的購物店進行校驗。","Initialize a shop":"初始化商店","Initialize a shop with your credentials. Call this action first, and then use the shop name in the other actions to interact with products.":"初始化一個店鋪,并擁有您的證書。先調用此操作,然后在其他行動中使用商店名稱來與產品互動。","Initialize shop _PARAM1_ (domain: _PARAM2_, appId: _PARAM3_)":"初始化商店_PARAM1_ (域名: _PARAM2_, appId: _PARAM3_)","Shop name":"商店名稱","Domain (xxx.myshopify.com)":"域名 (xx.myShopify.com)","App Id":"應用ID","Access Token":"訪問令牌","Get the URL for buying a product":"獲取購買產品的 URL","Get the URL for buying a product from a shop. The URL will be stored in the scene variable that you specify. You can then use the action to open an URL to redirect the player to the checkout.":"從商店購買產品的 URL。URL 將被存儲在你指定的變量中。您可以使用操作打開 URL 來重定向玩家到結帳界面","Get the URL for product #_PARAM2_ (quantity: _PARAM3_, variant: _PARAM4_) from shop _PARAM1_, and store it in _PARAM5_ (or _PARAM6_ in case of error)":"從商店_PARAM1__ 獲取產品 #_PARAM2_ (數量: _PARAM3_, 變量: _PARAM4_) 的 URL,并將錯誤儲存在 _PARAM5_ (或 _PARAM6_ 中)","Shop name (initialized with \"Initialize a shop\" action)":"商店名稱 (初始化 \"初始化商店\" 操作)","Product id":"產品ID","Quantity":"數量","Variant (0 by default)":"變量(0為默認)","Scene variable where the URL for checkout must be stored":"必須存儲要檢查的 URL 變量","Scene variable containing the error (if any)":"儲存錯誤的變量(有的話)","Emission minimal force":"最少排放力","Modify minimal emission force of particles.":"修改粒子最小排放力。","the minimal emission force":"最小發射力度","Common":"一般","Emission maximal force":"最大排放力","Modify maximal emission force of particles.":"修改粒子最大排放力。","the maximal emission force":"最大發射力度","Emission angle":"發射角度","Modify emission angle.":"修改發射角度。","the emission angle":"發射角度","Test the value of emission angle of the emitter.":"測試發射器發射角度的值。","Emission angle 1":"發射角度1","Change emission angle #1":"改變發射角度 #1","the 1st emission angle":"第一個發射角度","Test the value of emission 1st angle of the emitter":"測試發射器發射第一角度的值","Emission angle 2":"發射角度2","Change emission angle #2":"改變發射角度 #2","the 2nd emission angle":"第二個發射角度","Test the emission angle #2 of the emitter.":"測試發射器的發射#2角度#2。","Angle of the spray cone":"錐形噴射角角度","Modify the angle of the spray cone.":"修改錐形噴射角的角度","the angle of the spray cone":"噴霧圓錐的角度","Test the angle of the spray cone of the emitter":"測試發射器的錐形噴射角角度","Creation radius":"創建半徑","Modify creation radius of particles.\nParticles have to be recreated in order to take changes in account.":"修改粒子的創建半徑。\n為了更改帳戶,必須重新創建粒子。","the creation radius":"創建半徑","Test creation radius of particles.":"粒子的測試生成半徑。","Minimum lifetime":"最短生存期","Modify particles minimum lifetime. Particles have to be recreated in order to take changes in account.":"修改粒子的最小壽命。粒子必須重新創建,以便考慮到變化。","the minimum lifetime of particles":"粒子最短生存期","Test minimum lifetime of particles.":"測試粒子的最小壽命。","Maximum lifetime":"最大生存期","Modify particles maximum lifetime.\nParticles have to be recreated in order to take changes in account.":"修改粒子的最大壽命。\n粒子必須重建以賬戶變動。","the maximum lifetime of particles":"粒子最長生存期","Test maximum lifetime of particles.":"測試粒子的最大壽命。","Gravity value on X axis":"X軸重力","Change value of the gravity on X axis.":"X 軸上的重力變化值。","the gravity on X axis":"x軸重力","Compare value of the gravity on X axis.":"比較X軸重力的值。","Gravity value on Y axis":"Y 軸重力值","Change value of the gravity on Y axis.":"修改Y軸上的重力方向","the gravity on Y axis":"y軸重力","Compare value of the gravity on Y axis.":"比較Y軸重力的值。","Gravity angle":"重力角度","Change gravity angle":"更改重力角度","the gravity angle":"重力角度","Test the gravity angle of the emitter":"測試重力角度的發射器","Change the gravity of the emitter.":"修改重力角發射器","Test the gravity of the emitter.":"測試發射器的重力","Start emission":"開始發送","Refill tank (if not infinite) and start emission of the particles.":"重新填充罐(如果不是無限)并開始發射粒子。","Start emission of _PARAM0_":"開始發射 _PARAM0_","Stop emission":"停止發射","Stop the emission of particles.":"停止發射粒子。","Stop emission of _PARAM0_":"停止發射 _PARAM0_","Start color":"起始顏色","Modify start color of particles.":"修改粒子的起始顏色。","Change particles start color of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的粒子開始顏色更改為 _PARAM1_","End color":"結束顏色","Modify end color of particles.":"修改粒子的結束顏色。","Change particles end color of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的粒子結束顏色更改為 _PARAM1_","Start color red component":"開始顏色紅色組件","Modify the start color red component.":"修改開始顏色紅色組件。","the start color red component":"開始顏色為紅色組件","Value (0-255)":"值 (0-255)","Compare the start color red component.":"比較開始顏色紅色組件。","Value to compare to (0-255)":"要比較的值 (0-255)","End color red component":"結束紅色組件","Modify the end color red component.":"修改結束的紅色組件。","the end color red component":"結束顏色為紅色","Compare the end color red component.":"比較結束的紅色組件。","Start color blue component":"開始顏色藍色組件","Modify the start color blue component.":"修改開始顏色為藍色的組件。","the start color blue component":"開始顏色為藍色組件","Compare the start color blue component.":"比較開始顏色藍色組件。","End color blue component":"結束顏色藍色組件","Modify the end color blue component.":"修改結束顏色藍色組件。","the end color blue component":"結束顏色為藍色","Compare the end color blue component.":"比較結束顏色藍色組件。","Start color green component":"開始顏色綠色組件","Modify the start color green component.":"修改開始顏色綠色組件。","the start color green component":"開始顏色為綠色","Compare the start color green component.":"比較開始顏色綠色組件。","End color green component":"結束顏色綠色組件","Modify the end color green component.":"修改結束顏色綠色組件。","the end color green component":"結束顏色為綠色","Compare the end color green component.":"比較結束顏色綠色組件。","Start size":"起始大小","Modify the particle start size.":"修改粒子起始大小。","the start size":"起始大小","Compare the particle start size.":"比較粒子起始大小。","End size":"結束大小","Modify the particle end size.":"修改粒子結束大小。","the end size":"結束大小","Compare the particle end size.":"比較粒子結束大小。","Start opacity":"開始不透明度","Modify the start opacity of particles.":"修改粒子的起始不透明度。","the start opacity":"起始不透明度","Compare the start opacity of particles.":"比較粒子的起始不透明度。","End opacity":"結束不透明度","Modify the end opacity of particles.":"修改粒子的結束不透明度。","the end opacity":"結束不透明度","Compare the end opacity of particles.":"比較粒子的結束不透明度。","No more particles":"沒有更多的的粒子","Check if the object does not emit particles any longer, so as to destroy it for example.":"檢查物件是否不再釋放粒子,以便摧毀它。","_PARAM0_ does not emit any longer":"_PARAM0_ 不再發布","Particle rotation min speed":"粒子旋轉最小速度","the minimum rotation speed of the particles":"粒子的最小旋轉速度","the particles minimum rotation speed":"粒子最小旋轉速度","Angular speed (in degrees per second)":"角速度 ( 以度為單位每秒 )","Particle rotation max speed":"粒子旋轉最大速度","the maximum rotation speed of the particles":"粒子的最大旋轉速度","the particles maximum rotation speed":"粒子最大旋轉速度","Number of displayed particles":"顯示的粒子數量","the maximum number of displayed particles":"顯示粒子的最大數量","Activate particles additive rendering":"激活粒子附加渲染","the particles additive rendering is activated":"粒子附加渲染被激活","displaying particles with additive rendering activated":"顯示激活附加渲染的粒子","Recreate particles":"重新創建粒子","Destroy and recreate particles, so as to take changes made to setup of the emitter in account.":"銷毀和重新創建粒子,以便對發射器的設定進行更改。","Recreate particles of _PARAM0_":"重新創建_PARAM0_的粒子","Setup":"設定","Rendering first parameter":"繪制第一個參數","Modify first parameter of rendering (Size/Length).\nParticles have to be recreated in order to take changes in account.":"修改渲染的第一個參數(大小/長度)。必須重新創建 nparticles以進行更改。","the rendering 1st parameter":"渲染第一個參數","Test the first parameter of rendering (Size/Length).":"測試渲染的第一個參數(大小/長度)。","the 1st rendering parameter":"第一個渲染參數","Rendering second parameter":"呈現第二個參數","Modify the second parameter of rendering (Size/Length).\nParticles have to be recreated in order to take changes in account.":"修改渲染的第二個參數(大小/長度)。必須重新創建 n 粒子以進行更改。","the rendering 2nd parameter":"渲染第二個參數","Test the second parameter of rendering (Size/Length).":"測試渲染的第二個參數(大小/長度)。","the 2nd rendering parameter":"第二個渲染參數","Capacity":"容量","Change the capacity of the emitter.":"改變發射器的容量。","the capacity":"容量","Test the capacity of the emitter.":"測試發射器的重力","Capacity to compare to":"容量比較","Flow":"流量","Change the flow of the emitter.":"改變發射器的流量。","the flow":"流","Flow (in particles per second)":"流量(每秒粒子數)","Test the flow of the emitter.":"測試發射器的流量。","Flow to compare to (in particles per second)":"要比較的流量(以每秒粒子數為單位)","Particle image (deprecated)":"粒子圖像 (已廢棄)","Change the image of particles (if displayed).":"更改粒子圖像(如果顯示)。","Change the image of particles of _PARAM0_ to _PARAM1_":"_PARAM0_ 的粒子圖像更改為 _PARAM1_","Image to use":"要使用的圖像","Particle image":"粒子圖像","Test the name of the image displayed by particles.":"檢查粒子所顯示的圖像的名稱。","the image displayed by particles":"粒子顯示的圖像","Particles image":"粒子圖像","Name of the image displayed by particles.":"粒子顯示的圖像名稱。","Particles":"顆粒","Particles number":"粒子數","Particles count":"粒子計數","Number of particles currently displayed.":"當前顯示的粒子數量。","Capacity of the particle tank.":"粒子箱的容量。","Flow of the particles (particles/second).":"粒子流(粒子/秒)。","The minimal emission force of the particles.":"微粒的最小發射力。","The maximal emission force of the particles.":"粒子的最大發射力。","Emission angle of the particles.":"粒子的發射角度。","Emission angle A":"發射角A","Emission angle B":"發射角B","Radius of emission zone":"發射區半徑","The radius of the emission zone.":"發射區半徑。","X gravity":"X 重力","Gravity of particles applied on X-axis.":"X軸上應用的粒子重力","Y gravity":"Y 重力","Gravity of particles applied on Y-axis.":"應用在Y軸上的粒子重力","Angle of gravity.":"重力角度。","Value of gravity.":"重力值。","Minimum lifetime of particles":"粒子最短生存期","Minimum lifetime of the particles.":"粒子的最小壽命。","Maximum lifetime of particles":"粒子最長生存期","Maximum lifetime of the particles.":"粒子的最大壽命。","The start color red component of the particles.":"粒子的開始顏色為紅色。","The end color red component of the particles.":"粒子的結束顏色為紅色。","The start color blue component of the particles.":"粒子的開始顏色為藍色。","The end color blue component of the particles.":"粒子的結束顏色為藍色。","The start color green component of the particles.":"粒子的開始顏色為綠色。","The end color green component of the particles.":"粒子的結束顏色為綠色。","Start opacity of the particles.":"開始粒子的不透明度。","End opacity of the particles.":"結束粒子的不透明度。","Start size of particles.":"開始粒子的大小。","End size of particles.":"粒子的最終大小。","Jump emitter forward in time":"及時向前跳躍發射器","Simulate the passage of time for an emitter, including creating and moving particles":"模擬發射器的時間流逝,包括創建和移動粒子","Jump _PARAM0_ forward in time by _PARAM1_ seconds":"將 _PARAM0_ 時間向前跳轉 _PARAM1_ 秒","Seconds of time":"秒的時間","Particle system":"粒子系統","2D particles emitter":"2D 粒子發射器","2D effects like smoke, fire or sparks.":"像煙霧、火或火花的2D效果。","Particles size":"粒子大小","Start size (in percents)":"粒子起始大小 (以百分比為單位)","End size (in percents)":"粒子末端大小 (以百分比為單位)","Particles color":"粒子顏色","Particles flow":"粒子流動","Max particles count":"最大粒子數量","Tank":"油箱","Particles flow (particles/seconds)":"粒子的流動 (粒子/秒)","Emitter force min":"發射器力的最小值","Particles movement":"粒子運動","Emitter force max":"發射器力的最大值","Minimum rotation speed":"最小旋轉速度","Maximum rotation speed":"最大旋轉速度","Cone spray angle":"圓錐噴霧角","Emitter radius":"發射器半徑","Gravity X":"水平力","Particles gravity":"粒子重力","Gravity Y":"Y軸力","Particles life time":"粒子壽命","Jump forward in time on creation":"在創建時向前跳轉(以秒為單位)","Reduce initial dimensions to keep aspect ratio":"減小初始尺寸以保持寬高比","Rotation around X axis":"繞 X 軸旋轉","Default rotation":"默認旋轉","Rotation around Y axis":"繞 Y 軸旋轉","Rotation around Z axis":"繞 Z 軸旋轉","Basic (no lighting, no shadows)":"基本 (無燈光,無陰影)","Standard (without metalness)":"標準 (無金屬感)","Keep original":"保持原始","Material":"材料類型","Lighting":"燈光","Model origin":"模型原點","Top left":"左上角","Object center":"對象中心","Bottom center (Z)":"底部中心 (在 Z 軸上)","Bottom center (Y)":"底部中心 (Y)","Origin point":"原點","Centered on Z only":"僅在 Z 軸上居中","Center point":"中心點","Crossfade duration":"交叉淡入淡出持續時間","Shadow casting":"陰影投射","Shadow receiving":"陰影接收","Fill opacity":"填充不透明度","Outline opacity":"外框不透明度","Outline size":"外框尺寸","Use absolute coordinates":"使用絕對坐標","Drawing":"繪制","Clear drawing at each frame":"每一幀都清除繪圖","When activated, clear the previous render at each frame. Otherwise, shapes are staying on the screen until you clear manually the object in events.":"當啟用時,在每幀清除之前的渲染。否則,形狀會保持在屏幕上,直到您在事件中手動清除對象。","Antialiasing":"抗鋸齒","Antialiasing mode":"抗鋸齒模式","Shape painter":"形狀繪畫","An object that can be used to draw arbitrary 2D shapes on the screen using events.":"這提供了一個可用于使用事件在屏幕上繪制任意形狀的物件。","Draw basic 2D shapes using events.":"使用事件繪製基本的 2D 形狀。","Rectangle":"矩形","Draw a rectangle on screen":"在屏幕上繪制矩形","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a rectangle with _PARAM0_":"從_PARAM1 _; _ PARAM2_到_PARAM3 _; _ PARAM4_用_PARAM0_繪制一個矩形","Shape Painter object":"形狀繪畫物件","Left X position":"左 X 位置","Top Y position":"頂部 Y 位置","Right X position":"右 X 位置","Bottom Y position":"底部 Y 位置","Draw a circle on screen":"在屏幕上繪制一個圓","Draw at _PARAM1_;_PARAM2_ a circle of radius _PARAM3_ with _PARAM0_":"在_PARAM1_; _PARAM2_繪制一個半徑為_PARAM3_的圓,并帶有_PARAM0_","X position of center":"中心X坐標","Y position of center":"中心Y坐標","Radius (in pixels)":"半徑(像素)","X position of start point":"起始點的X坐標","Y position of start point":"起始點的Y坐標","X position of end point":"結束點的X坐標","Y position of end point":"結束點的Y坐標","Thickness (in pixels)":"粗細(像素)","Draw a line on screen":"在屏幕上繪制一行","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a line (thickness: _PARAM5_) with _PARAM0_":"從 _PARAM1_; _PARAM2_ 到 _PARAM3_; _PARAM4_ 用 _PARAM0_ 繪制一條線(厚度為: _PARAM5_)","Ellipse":"橢圓","Draw an ellipse on screen":"在屏幕上畫一個橢圓","Draw at _PARAM1_;_PARAM2_ an ellipse of width _PARAM3_ and height _PARAM4_ with _PARAM0_":"在_PARAM1_;_PARAM2_ 處用 _PARAM0_ 以寬度_PARAM3_ 和高度 _PARAM4_ 畫一個橢圓","The width of the ellipse":"橢圓的寬度","The height of the ellipse":"橢圓的高度","Fillet Rectangle":"圓角矩形","Draw a fillet rectangle on screen":"在屏幕上繪制圓角矩形","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a fillet rectangle (fillet: _PARAM5_)with _PARAM0_":"使用 _PARAM0_ 從 _PARAM1_; _PARAM2_ 到 _PARAM3_; _PARAM4_ 繪制一個圓角矩形 (圓角:_PARAM5_)","Fillet (in pixels)":"圓角 (以像素為單位)","Rounded rectangle":"圓角矩形","Draw a rounded rectangle on screen":"在屏幕上畫一個圓角矩形","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a rounded rectangle (radius: _PARAM5_) with _PARAM0_":"從 _PARAM1_;_PARAM2_ 到 _PARAM3_;_PARAM4_ 用 _PARAM0_ 畫一個圓角矩形(半徑為: _PARAM5_)","Chamfer Rectangle":"倒角矩形","Draw a chamfer rectangle on screen":"在屏幕上繪制一個倒角矩形","Draw from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ a chamfer rectangle (chamfer: _PARAM5_) with _PARAM0_":"使用 _PARAM0_ 從 _PARAM1_;_PARAM2_ 到 _PARAM3_;_PARAM4_ 繪制一個倒角矩形 (倒角:_PARAM5_)","Chamfer (in pixels)":"倒角 (以像素為單位)","Torus":"圓環","Draw a torus on screen":"在屏幕上繪制一個圓環","Draw at _PARAM1_;_PARAM2_ a torus with inner radius: _PARAM3_, outer radius: _PARAM4_ and with start arc angle: _PARAM5_°, end angle: _PARAM6_° with _PARAM0_":"在 _PARAM1_;_PARAM2_ 處繪制一個圓環,其內半徑:_PARAM3_,外半徑:_PARAM4_,起始圓弧角度:_PARAM5_°,結束角度:_PARAM6_°,帶 _PARAM0_","Inner Radius (in pixels)":"內半徑 (以像素為單位)","Outer Radius (in pixels)":"外半徑 (以像素為單位)","Start Arc (in degrees)":"起始圓弧 (以度為單位)","End Arc (in degrees)":"結束圓弧 (以度為單位)","Regular Polygon":"正多邊形","Draw a regular polygon on screen":"在屏幕上繪制一個正多邊形","Draw at _PARAM1_;_PARAM2_ a regular polygon with _PARAM3_ sides and radius: _PARAM4_ (rotation: _PARAM5_) with _PARAM0_":"在 _PARAM1_;_PARAM2_ 處繪制一個正多邊形,其邊長為 _PARAM3_,半徑為:_PARAM4_ (旋轉:_PARAM5_),并帶有_PARAM0_","Number of sides of the polygon (minimum: 3)":"多邊形的邊數 (最小: 3)","Rotation (in degrees)":"旋轉(角度)","Star":"星形","Draw a star on screen":"在屏幕上畫一個星形","Draw at _PARAM1_;_PARAM2_ a star with _PARAM3_ points and radius: _PARAM4_ (inner radius: _PARAM5_, rotation: _PARAM6_) with _PARAM0_":"在_PARAM1_;_PARAM2_ 處用 _PARAM0_ 畫一個星型,有 _PARAM3_ 個點,半徑為 _PARAM4_ (內部半徑為: _PARAM5_, 旋轉為: _PARAM6_)","Number of points of the star (minimum: 2)":"星形的頂點數量(最小為2)","Inner radius (in pixels, half radius by default)":"內部半徑(以像素為單位,默認為半徑的一半)","Arc":"弧","Draw an arc on screen. If \"Close path\" is set to yes, a line will be drawn between the start and end point of the arc, closing the shape.":"在屏幕上畫一條弧。如果“選擇路徑”設為是,那么弧的起點和終點間將會畫一條線,形成一個閉合圖形。","Draw at _PARAM1_;_PARAM2_ an arc with radius: _PARAM3_, start angle: _PARAM4_, end angle: _PARAM5_ (anticlockwise: _PARAM6_, close path: _PARAM7_) with _PARAM0_":"在 _PARAM1_;_PARAM2_ 處用 _PARAM0_ 繪制一個半徑為 _PARAM3_ 的弧, 起始角度為: _PARAM4_, 結束角度為: _PARAM5_ (逆時針為: _PARAM6_, 閉合路徑為: _PARAM7_)","Start angle of the arc (in degrees)":"弧的起始角度(角度)","End angle of the arc (in degrees)":"弧的終止角度(角度)","Anticlockwise":"逆時針","Close path":"閉合路徑","Bezier curve":"貝塞爾曲線","Draw a bezier curve on screen":"在屏幕上繪制貝塞爾曲線","Draw from _PARAM1_;_PARAM2_ to _PARAM7_;_PARAM8_ a bezier curve (first control point: _PARAM3_;_PARAM4_, second control point: _PARAM5_;_PARAM6_) with _PARAM0_":"從 _PARAM1_;_PARAM2_ 到 _PARAM7_;_PARAM8_ 用 _PARAM0_ 繪制一條貝塞爾曲線(第一控制點為: _PARAM3_;_PARAM4_, 第二控制點為: _PARAM5_;_PARAM6_)","First control point x":"第一控制點的x","First control point y":"第一控制點的y","Second Control point x":"第二控制點的x","Second Control point y":"第二控制點的y","Destination point x":"目的點的x","Destination point y":"目的點的y","Quadratic curve":"二次曲線","Draw a quadratic curve on screen":"在屏幕上繪制二次曲線","Draw from _PARAM1_;_PARAM2_ to _PARAM5_;_PARAM6_ a quadratic curve (control point: _PARAM3_;_PARAM4_) with _PARAM0_":"從_PARAM1_;_PARAM2_ 到_PARAM5_;_PARAM6_ 用 _PARAM0_ 繪制一個二次曲線 (控制點:_PARAM3_;_PARAM4_)","Control point x":"控制點 x","Control point y":"控制點 Y","Begin fill path":"開始填充路徑","Begin to draw a simple one-color fill. Subsequent actions, such as \"Path line\" (in the Advanced category) can be used to draw. Be sure to use \"End fill path\" action when you're done drawing the shape.":"開始繪制一個簡單的單色填充. 隨后的動作, 例如 “路徑線” (在高級類別中) 可以用于繪制. 在繪制形狀時, 請務必使用 “結束填充路徑” 操作.","Begin drawing filling of an advanced path with _PARAM0_ (start: _PARAM1_;_PARAM2_)":"開始使用_PARAM0_繪制高級路徑的圖形填充(開始:_PARAM1_; _PARAM2_)","Start drawing x":"開始繪制 x","Start drawing y":"開始繪制 y","End fill path":"結束填充路徑","Finish the filling drawing in an advanced path":"在高級路徑中完成填充圖","Finish the filling drawing in an advanced path with _PARAM0_":"以 _PARAM0_ 完成高級路徑的填充繪圖","Move path drawing position":"移動路徑繪制位置","Move the drawing position for the current path":"移動當前路徑的繪圖位置","Move the drawing position of the path to _PARAM1_;_PARAM2_ with _PARAM0_":"將路徑的繪圖位置移動到 _PARAM1_; _PARAM2_ 和 _PARAM0_","Path line":"路徑線","Add to a path a line to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"在路徑中添加到位置的直線。原點來自上一個動作或“開始填充路徑”或“移動路徑繪圖位置”。默認情況下,開始位置將是物件的位置。","Add to a path a line to the position _PARAM1_;_PARAM2_ with _PARAM0_":"將路徑添加到位置_PARAM1_; _PARAM2_和_PARAM0_","Path bezier curve":"路徑貝塞爾曲線","Add to a path a bezier curve to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"將貝塞爾曲線添加到路徑中。原點來自上一個動作或“開始填充路徑”或“移動路徑繪圖位置”。默認情況下,開始位置將是物件的位置。","Add to a path a bezier curve to the position _PARAM5_;_PARAM6_ (first control point: _PARAM1_;_PARAM2_, second control point: _PARAM3_;_PARAM4_) with _PARAM0_":"將一條貝塞爾曲線添加到具有_PARAM0_的位置_PARAM5 _; _ PARAM6_(第一控制點:_PARAM1_; _PARAM2_,第二控制點:_PARAM3_; _PARAM4_)","Path arc":"路徑弧","Add to a path an arc to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"將圓弧添加到位置。原點來自上一個動作或“開始填充路徑”或“移動路徑繪圖位置”。默認情況下,開始位置將是物件的位置。","Add to a path an arc at the position _PARAM1_;_PARAM2_ (radius: _PARAM3_, start angle: _PARAM4_, end angle: _PARAM5_, anticlockwise: _PARAM6_) with _PARAM0_":"在路徑_PARAM1 _; _ PARAM2_(半徑:_PARAM3_,起始角度:_PARAM4_,結束角度:_PARAM5_,逆時針:_PARAM6_)上添加一條圓弧,并帶有_PARAM0_","Center x of circle":"圓的中心 X","Center y of circle":"圓心的y坐標","Start angle":"起始角度","End angle":"結束角度","Path quadratic curve":"路徑二次曲線","Add to a path a quadratic curve to a position. The origin comes from the previous action or from \"Begin fill path\" or \"Move path drawing position\". By default, the start position will be the object's position.":"將二次曲線添加到某個位置。原點來自上一個動作或“開始填充路徑”或“移動路徑繪圖位置”。默認情況下,開始位置將是物件的位置。","Add to a path a quadratic curve to the position _PARAM3_;_PARAM4_ (control point: _PARAM1_;_PARAM2_) with _PARAM0_":"將一條二次曲線添加到具有_PARAM0_的位置_PARAM3 _; _ PARAM4_(控制點:_PARAM1 _; _ PARAM2_)","Close Path":"閉合路徑","Close the path of the advanced shape. This closes the outline between the last and the first point.":"閉合高級形狀的路徑, 這將結束最后一點和第一點之間的輪廓.","Close the path with _PARAM0_":"用 _PARAM0_ 關閉路徑","Clear shapes":"清除形狀","Clear the rendered shape(s). Useful if not set to be done automatically.":"清除渲染的形狀。如果未設定為自動完成,則非常有用。","Clear the rendered image of _PARAM0_":"清除_PARAM0_的渲染圖像","Clear between frames":"在幀之間清除","Activate (or deactivate) the clearing of the rendered shape at the beginning of each frame.":"在每幀開始時激活(或取消激活)渲染形狀的清除。","Clear the rendered image of _PARAM0_ between each frame: _PARAM1_":"在每幀之間清除_PARAM0_的渲染圖像:_PARAM1_","Clear between each frame":"在每個幀之間清除","Check if the rendered image is cleared between frames.":"檢查渲染的圖像是否在幀之間被清除。","_PARAM0_ is clearing its rendered image between each frame":"_PARAM0_正在清除每幀之間的渲染圖像","Change the color used when filling":"改變填充時使用的顏色","Change fill color of _PARAM0_ to _PARAM1_":" 更改填充顏色 _PARAM0_ 為 _PARAM1_","Filing color red component":"文件顏色為紅色的組件","Filing color green component":"文件顏色為綠色的組件","Filing color blue component":"文件顏色為藍色的組件","Modify the color of the outline of future drawings.":"修改未來圖紙輪廓的顏色。","Change outline color of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的輪廓顏色更改為 _PARAM1_","Outline color red component":"輪廓顏色紅色組件","Outline color green component":"輪廓顏色綠色組件","Outline color blue component":"輪廓顏色藍色組件","Modify the size of the outline of future drawings.":"修改未來繪圖輪廓的大小。","the size of the outline":"檢測外框的大小","Test the size of the outline.":"檢測外框的大小","Modify the opacity level used when filling future drawings.":"修改填充未來圖紙時使用的不透明度級別。","the opacity of filling":"填充的不透明度","Test the value of the opacity level used when filling.":"測試填充時使用的不透明度的值。","Filling opacity":"填充不透明度","Modify the opacity of the outline of future drawings.":"修改未來圖紙輪廓的不透明度。","the opacity of the outline":"輪廓的不透明度","Test the opacity of the outline.":"測試輪廓的不透明度。","Use relative coordinates":"使用相對坐標","Set if the object should use relative coordinates (by default) or not. It's recommended to use relative coordinates.":"設定物件是否應使用相對坐標(默認情況下)。建議使用相對坐標。","Use relative coordinates for _PARAM0_: _PARAM1_":"將相對坐標用于_PARAM0_:_PARAM1_","Use relative coordinates?":"使用相對坐標?","Relative coordinates":"相對坐標","Check if the coordinates of the shape painter is relative.":"檢查形狀繪制器的坐標是否是相對的。","_PARAM0_ is using relative coordinates":"_PARAM0_ 正在使用相對坐標","Change the center of rotation of _PARAM0_ to _PARAM1_, _PARAM2_":"將 _PARAM0_ 的旋轉中心更改為 _PARAM1_, _PARAM2_","Collision Mask":"碰撞蒙板","Change the collision mask of an object to a rectangle relatively to the object origin.":"物件的碰撞遮罩更改為相對於物件原點的矩形。","Change the collision mask of _PARAM0_ to a rectangle from _PARAM1_; _PARAM2_ to _PARAM3_; _PARAM4_":"將 _PARAM0_ 的碰撞遮罩更改為矩形,從_PARAM1_; _PARAM2_ 更改為_PARAM3_; _PARAM4_","Position":"位置","X drawing coordinate of a point from the scene":"屏幕上某點的X繪制坐標","X scene position":"X場景位置","Y scene position":"Y場景位置","Y drawing coordinate of a point from the scene":"屏幕上某點的Y繪制坐標","X scene coordinate of a point from the drawing":"繪圖中某點的 X 場景坐標","X drawing position":"X繪圖位置","Y drawing position":"Y 繪圖位置","Y scene coordinate of a point from the drawing":"繪圖中某點的 Y 場景坐標","Set anti-aliasing of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的抗鋸齒設定為 _PARAM1_","Anti-aliasing quality level":"抗鋸齒質量等級","Anti-aliasing type":"抗鋸齒類型","Checks the selected type of anti-aliasing":"檢查所選的抗鋸齒類型","The anti-aliasing of _PARAM0_ is set to _PARAM1_":"_PARAM0_ 的抗鋸齒設定為 _PARAM1_","Type of anti-aliasing to check the object against":"檢查物件的抗鋸齒類型","Type of anti-aliasing used by a shape painter":"形狀繪制器使用的抗鋸齒類型","Returns the type of anti-aliasing in use: none, low, medium, or high.":"返回正在使用的抗鋸齒類型:無、低、中或高。","Linked objects":"鏈接物件","Link two objects":"鏈接兩個物件","Link two objects together, so as to be able to get one from the other.":"將兩個物件鏈接在一起,以便能夠從一個得到另一個。","Link _PARAM1_ and _PARAM2_":"鏈接 _PARAM1_ 和 _PARAM2_","Object 1":"對象 1","Object 2":"對象 2","Unlink two objects":"取消鏈接兩個對象","Unlink two objects.":"取消鏈接兩個物件。","Unlink _PARAM1_ and _PARAM2_":"解除 _PARAM1_ 和 _PARAM2_ 的鏈接","Unlink all objects from an object":"將所有物件與一個物件取消鏈接","Unlink all objects from an object.":"將所有物件與一個物件取消鏈接。","Unlink all objects from _PARAM1_":"將所有物件與 _PARAM1_ 取消鏈接","Take into account linked objects":"考慮到鏈接物件","Take some objects linked to the object into account for next conditions and actions.\nThe condition will return false if no object was taken into account.":"考慮到下一個條件和動作,一些與物件相關聯的物件。\n如果不考慮物件,條件將返回 false。","Take into account all \"_PARAM1_\" linked to _PARAM2_":"考慮所有 \"_PARAM1_\" 鏈接到 _PARAM2_","Pick these objects...":"選擇這些物件...","...if they are linked to this object":"...如果他們被鏈接到此物件","Take objects linked to the object into account for next actions.":"將與物件相關聯的物件計入下一個動作。","Precise check":"精確檢查","Use the object (custom) collision mask instead of the bounding box, making the behavior more precise at the cost of reduced performance":"使用物件(自定義)碰撞遮罩而不是邊界框,以降低性能為代價使行為更精確","Draggable Behavior":"可拖動行為","Allows objects to be moved using the mouse (or touch). Add the behavior to an object to make it draggable. Use events to enable or disable the behavior when needed.":"允許使用鼠標(或觸摸)移動物件。將行為添加到物件以使其可拖動。在需要時使用事件來啟用或禁用行為。","Draggable object":"可拖動物件","Draggable":"可拖動","Move objects by holding a mouse button (or touch).":"按住鼠標按鈕(或觸摸)移動物體。","Being dragged":"正被拖動","Check if the object is being dragged. This means the mouse button or touch is pressed on it. When the mouse button or touch is released, the object is no longer being considered dragged (use the condition \"Was just dropped\" to check when the dragging is ending).":"檢查物件是否正在被拖曳。這意味著滑鼠按鈕或觸控在其上被按下。當滑鼠按鈕或觸控被釋放時,物件不再被視為正在被拖曳(使用條件「剛被放下」來檢查拖曳何時結束)。","_PARAM0_ is being dragged":"_PARAM0_ 正在被拖動","Was just dropped":"剛剛被放下","Check if the object was just dropped after being dragged (the mouse button or touch was just released this frame).":"檢查物件在被拖曳後是否剛被放下(滑鼠按鈕或觸控在此幀剛被釋放)。","_PARAM0_ was just dropped":"_PARAM0_ 剛剛被放下","Bitmap Text":"位圖文本","Displays a text using a \"Bitmap Font\" (an image representing characters). This is more performant than a traditional Text object and it allows for complete control on the characters aesthetic.":"顯示使用 \"位圖字體\" (代表字符的圖像) 的文本。 這比傳統的文本物件更能性能,它允許對字符的完全控制。","Bitmap Atlas":"位圖圖集","Text scale":"文字大小","Font tint":"字體色調","Image-based text.":"基於影像的文本。","Bitmap text":"位圖文本","Return the text.":"返回文本。","the opacity, between 0 (fully transparent) and 255 (opaque)":"不透明度,介于 0 (完全透明) 和 255 (不透明) 之間","the font size, defined in the Bitmap Font":"字體大小,在位圖字體中定義","the scale (1 by default)":"文字縮放尺度(默認為 1)","Font name":"字體名稱","the font name (defined in the Bitmap font)":"字體名稱(位圖字體中定義)","the font name":"字體名稱","Set the tint of the Bitmap Text object.":"設定位圖文本物件的色調。","Set tint of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的色調更改為 _PARAM1_","Bitmap files resources":"位圖文件資源","Change the Bitmap Font and/or the atlas image used by the object.":"更改物件使用的位圖字體和/或圖集圖像。","Set the bitmap font of _PARAM0_ to _PARAM1_ and the atlas to _PARAM2_":"將 _PARAM0_ 的位圖字體設為 _PARAM1_ ,圖集設為 _PARAM2_","Bitmap font resource name":"位圖字體資源名稱","Texture atlas resource name":"紋理圖集資源名稱","the text alignment":"文字對齊","Alignment (\"left\", \"right\" or \"center\")":"對齊(\"左\"、\"右\"或\"中心\")","Change the alignment of a Bitmap text object.":"修改位圖文本物件的對齊。","Set the alignment of _PARAM0_ to _PARAM1_":"設定 _PARAM0_ 的文字對齊為 _PARAM1_","De/activate word wrapping.":"取消/激活自動換行。","Activate word wrapping":"Activate word wrapping","the width, in pixels, after which the text is wrapped on next line":"當文字換至下一行時,行首的寬度,以像素為單位","File system":"文件系統","Access the filesystem of the operating system - only works on native, desktop games exported to Windows, Linux or macOS.":"訪問操作系統的文件系統 - 僅適用於導出至Windows、Linux或macOS的原生桌面遊戲。","File or directory exists":"文件或文件夾存在性","Check if the file or directory exists.":"檢查文件或文件夾是否存在。","The path _PARAM0_ exists":"路徑_PARAM0_ 存在","Windows, Linux, MacOS":"Windows, Linux, macOS","Path to file or directory":"文件或文件夾路徑","Create a directory":"創建文件夾","Create a new directory at the specified path.":"在指定路徑創建新文件夾。","Create directory _PARAM0_":"創建目錄_PARAM0_","Directory":"目錄","(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occurred.":"(可選) 用于存儲結果的變量。'ok':任務成功,'error':發生錯誤。","Save a text into a file":"將文本保存到文件","Save a text into a file. Only use this on small files to avoid any lag or freeze during the game execution.":"將文本保存到文件中。僅在小文件中使用此選項以避免遊戲執行過程中出現任何延遲或凍結。","Save _PARAM0_ into file _PARAM1_":"保存 _PARAM0_ 到文件 _PARAM1_","Save path":"保存路徑","Save a text into a file (Async)":"將文本保存到文件中(異步)","Save a text into a file asynchronously. Use this for large files to avoid any lag or freeze during game execution. The 'result' variable gets updated when the operation has finished.":"將文本另存為異步文件。使用此選項以避免遊戲執行過程中出現任何延遲或凍結。 操作完成后,'結果'變量將會更新。","Windows, Linux, MacOS/Asynchronous":"Windows,Linux,MacOS/Asynuous","Save a scene variable into a JSON file":"將場景變量保存到 JSON 文件","Save a scene variable (including, for structure, all the children) into a file in JSON format. Only use this on small files to avoid any lag or freeze during the game execution.":"將場景變量(對于結構,包括所有子項)以JSON格式保存到文件中。僅在小文件上使用此選項,以避免在遊戲執行期間出現任何延遲或凍結。","Save scene variable _PARAM0_ into file _PARAM1_ as JSON":"將場景變量 _PARAM0_ 保存為 _PARAM1_ 文件為 JSON","Save a scene variable into a JSON file (Async)":"將場景變量保存到 JSON 文件 (異步)","Save the scene variable (including, for structures, all the children) into a file in JSON format, asynchronously. Use this for large files to avoid any lag or freeze during game execution. The 'result' variable gets updated when the operation has finished.":"將場景變量(包括結構中的所有子元素)保存為一個 JSON 格式的文件,異步格式。 用于大型文件以避免遊戲執行過程中出現任何延遲或凍結。操作完成后“結果”變量會更新。","Load a text from a file (Async)":"從文件加載文本(異步)","Load a text from a file, asynchronously. Use this for large files to avoid any lag or freeze during game execution. The content of the file will be available in the scene variable after a small delay (usually a few milliseconds). The 'result' variable gets updated when the operation has finished.":"從文件加載文本異步。用它來處理大型文件,以避免遊戲執行過程中出現任何延遲或凍結。 文件的內容將在稍后的場景變量中可用 (通常是幾毫秒)。 操作完成后,'結果'變量將會更新。","Load text from _PARAM1_ into scene variable _PARAM0_ (Async)":"從 _PARAM1_ 加載文本到場景變量 _PARAM0_ (異步)","Load path":"加載路徑","Normalize the file content (recommended)":"規范化文件內容(推薦)","This replaces Windows new lines characters (\"CRLF\") by a single new line character.":"這會將 Windows 換行符 (\"CRLF\") 替換為單個換行符。","Load a text from a file":"從文件中加載文本","Load a text from a file. Only use this on small files to avoid any lag or freeze during the game execution.":"從文件中加載文本。僅在小文件中使用此選項以避免遊戲執行過程中出現任何延遲或凍結。","Load text from _PARAM1_ into scene variable _PARAM0_":"從 _PARAM1_ 將文本加載到場景變量 _PARAM0_","Load a scene variable from a JSON file":"從 JSON 文件加載場景變量","Load a JSON formatted text from a file and convert it to a scene variable (potentially a structure variable with children). Only use this on small files to avoid any lag or freeze during the game execution.":"從文件中加載 JSON 格式的文本,并將其轉換為場景變量(可能是帶有子節點的結構變量)。只有在小文件上使用這個,以避免任何延遲或在遊戲執行期間凍結。","Load JSON from _PARAM1_ into scene variable _PARAM0_":"從 _PARAM1_ 加載JSON 到場景變量 _PARAM0_","Load a scene variable from a JSON file (Async)":"從 JSON 文件加載場景變量(異步)","Load a JSON formatted text from a file and convert it to a scene variable (potentially a structure variable with children), asynchronously. Use this for large files to avoid any lag or freeze during game execution. The content of the file will be available as a scene variable after a small delay (usually a few milliseconds). The 'result' variable gets updated when the operation has finished.":"從文件加載JSON格式化文本并將其轉換為場景變量(可能是一個帶子的結構變量),異步的。 用于大型文件,以避免遊戲執行過程中出現任何延遲或凍結。 文件的內容將作為場景變量在稍后顯示(通常是幾毫秒)。 操作完成后,'結果'變量將會更新。","Delete a file":"刪除文件","Delete a file from the filesystem.":"從文件系統中刪除文件。","Delete the file _PARAM0_":"刪除文件 _PARAM0_","File path":"文件路徑","Delete a file (Async)":"刪除文件(異步)","Delete a file from the filesystem asynchronously. The option result variable will be updated once the file is deleted.":"從文件系統中刪除異步文件。刪除文件后,選項結果變量將會更新。","Read a directory":"讀取目錄","Reads the contents of a directory (all files and sub-directories) and stores them in an array.":"讀取目錄的內容(所有文件和子目錄)並將其存儲在數組中。","Read the directory _PARAM0_ into _PARAM1_":"將目錄 _PARAM0_ 讀取到 _PARAM1_ 中","Directory path":"目錄路徑","Variable to store the result":"存儲結果的變量","Desktop folder":"桌面文件夾","Get the path to the desktop folder.":"獲取桌面文件夾的路徑。","Documents folder":"文檔文件夾","Get the path to the documents folder.":"獲取文檔文件夾的路徑。","Pictures folder":"圖片文件夾","Get the path to the pictures folder.":"獲取圖片文件夾的路徑。","Game executable file":"遊戲可執行文件","Get the path to this game executable file.":"獲取此遊戲可執行文件的路徑。","Game executable folder":"遊戲可執行文件夾","Get the path to this game executable folder.":"獲取此遊戲可執行文件夾的路徑。","Userdata folder (for application settings)":"用戶資料文件夾 (用于應用程序設定)","Get the path to userdata folder (for application settings).":"獲取到用戶資料文件夾的路徑(用于應用程序設定)。","User's Home folder":"用戶的主文件夾","Get the path to the user home folder.":"獲取用戶主文件夾的路徑。","Temp folder":"臨時文件夾","Get the path to temp folder.":"獲取臨時文件夾的路徑。","Path delimiter":"路徑分隔符","Get the operating system path delimiter.":"獲取操作系統路徑分隔符。","Get directory name from a path":"從路徑獲取目錄名稱","Returns the portion of the path that represents the directories, without the ending file name.":"返回代表目錄的路徑部分,沒有結束文件名稱。","File or folder path":"文件或文件夾路徑","Get file name from a path":"從路徑獲取文件名","Returns the name of the file with its extension, if any.":"如果有擴展,則返回文件的名稱。","Get the extension from a file path":"從文件路徑獲取擴展","Returns the extension of the file designated by the given path, including the extension period. For example: \".txt\".":"返回給定路徑指定的文件擴展名,包括擴展時間。例如:“.txt”。","Text Input":"文本輸入","A text field the player can type text into.":"玩家可以在其中輸入文本的文本字段。","Initial value":"初始值","Placeholder":"占位符","Font size (px)":"字體大小 (px)","Text area":"文本區域","Telephone number":"電話號碼","Input type":"輸入類型","By default, a \"text\" is single line. Choose \"text area\" to allow multiple lines to be entered.":"默認情況下,“文本”是單行。選擇“文本區域”允許輸入多行。","Field":"字段","Disabled":"已禁用","Enable spell check":"啟用拼寫檢查","Field appearance":"字段外觀","Border appearance":"邊框外觀","Padding (horizontal)":"填充(水平)","Padding (vertical)":"填充(垂直)","Max length":"最大長度","The maximum length of the input value (this property will be ignored if the input type is a number).":"輸入值的最大長度(如果輸入類型為數字,本屬性將被忽略)。","Text alignment":"文本對齊","Text input":"文本輸入","the placeholder":"占位符","Set the font of the object.":"設定物件的字體。","Set the font of _PARAM0_ to _PARAM1_":"設定 _PARAM0_ 的字體為 _PARAM1_","the input type":"輸入類型","Set the text color of the object.":"設定物件的文本顏色。","Set the text color of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的文本顏色設為 _PARAM1_","Set the fill color of the object.":"設定物件的填充顏色。","Set the fill color of _PARAM0_ to _PARAM1_":"設定 _PARAM0_ 的填充顏色為 _PARAM1_","the fill opacity, between 0 (fully transparent) and 255 (opaque)":"填充不透明度, 介于 0 (完全透明) 和 255 (不透明)","the fill opacity":"填充不透明度","Border color":"邊框顏色","Set the border color of the object.":"設定物件的邊框顏色。","Set the border color of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的邊框顏色設為 _PARAM1_","Border opacity":"邊框不透明度","the border opacity, between 0 (fully transparent) and 255 (opaque)":"邊框不透明度, 0(完全透明) 和 255 (不透明)","the border opacity":"邊界不透明度","Border width":"邊框寬度","the border width":"邊界寬度","Read-only":"只讀","the text input is read-only":"文本輸入為只讀","read-only":"只讀","Read-only?":"只讀?","the text input is disabled":"文本輸入已禁用","disabled":"已禁用","Spell check enabled":"拼寫檢查已啟用","spell check is enabled":"拼寫檢查已啟用","spell check enabled":"拼寫檢查已啟用","Focused":"聚焦","Check if the text input is focused (the cursor is in the field and player can type text in).":"檢查文本輸入是否被聚焦(光標在字段中,玩家可以輸入文本)。","_PARAM0_ is focused":"_PARAM0_ 是焦點的","Input is submitted":"輸入已提交","Check if the input is submitted, which usually happens when the Enter key is pressed on a keyboard, or a specific button on mobile virtual keyboards.":"檢查輸入是否已提交,通常在鍵盤上按下Enter鍵或移動虛擬鍵盤上的特定按鈕時發生。","_PARAM0_ value was submitted":"_PARAM0_值已提交","Focus":"焦點","Focus the input so that text can be entered (like if it was touched/clicked).":"焦點輸入,以便可以輸入文本(就像觸摸/單擊一樣)。","Focus _PARAM0_":"焦點 _PARAM0_","2D Physics Engine":"2D 物理引擎","Physics Engine 2.0":"物理引擎 2.0","Static":"靜態物體","Dynamic":"動態","Kinematic":"運動學","A static object won't move (perfect for obstacles). Dynamic objects can move. Kinematic will move according to forces applied to it only (useful for characters or specific mechanisms).":"靜態對象不會移動(非常適合障礙物)。動態對象可以移動。運動學將根據施加在其上的力移動(對角色或特定機構有用)。","Considered as a bullet":"被視為子彈","Useful for fast moving objects which requires a more accurate collision detection.":"對於需要更精確的碰撞檢測的快速移動物體很有用。","Physics body advanced settings":"物理身體的進階設定","If enabled, the object won't rotate and will stay at the same angle. Useful for characters for example.":"如果啟用,物體將不會旋轉並保持在相同的角度。例如,這對於角色非常有用。","Can be put to sleep by the engine":"可以被引擎進入睡眠狀態","Allows the physics engine to stop computing interaction with the object when it's not touched. It's recommended to keep this on.":"允許物理引擎在物體未被觸碰時停止計算與物體的交互。建議保持這個開啟。","Box":"文本框","Edge":"邊緣","Polygon":"多邊形","Origin":"起源","TopLeft":"左上","Density":"密度","Define the weight of the object, according to its size. The bigger the density, the heavier the object.":"根據物體的大小來定義物體的重量。密度越大,物體越重。","The friction applied when touching other objects. The higher the value, the more friction.":"觸摸其他物體時應用的摩擦力。值越高,摩擦就越大。","Restitution":"恢復原狀","The \"bounciness\" of the object. The higher the value, the more other objects will bounce against it.":"物體的“彈性”。值越高,其他物體與其反彈的次數越多。","Simulate realistic 2D physics for the object including gravity, forces, collisions, and joints.":"為此物件模擬真實的 2D 物理效果,包括重力、力、碰撞和關節。","Edit shape and advanced settings":"編輯形狀和高級設置","World scale":"世界比例","Return the world scale.":"返回世界比例。","Global":"全局","World gravity on X axis":"X軸上的世界重力","Compare the world gravity on X axis.":"比較X軸上的世界重力。","the world gravity on X axis":"X軸上的世界重力","World gravity on Y axis":"Y軸上的世界重力","Compare the world gravity on Y axis.":"比較Y軸上的世界重力。","the world gravity on Y axis":"Y軸上的世界重力","World gravity":"世界重力","Modify the world gravity.":"修改世界重力。","While an object is needed, this will apply to all objects using the behavior.":"當需要物件時,這將適用于所有使用該行為的物件。","Set the world gravity of _PARAM0_ to _PARAM2_;_PARAM3_":"將 _PARAM0_ 的世界重力設為 _PARAM2_;_PARAM3_","World time scale":"世界時間范圍","Compare the world time scale.":"比較世界時間刻度。","the world time scale":"世界時間范圍","Time scale to compare to (1 by default)":"要比較的時間尺度(默認為 1)","Modify the world time scale.":"修改世界時間尺度。","Set the world time scale of _PARAM0_ to _PARAM2_":"設定 _PARAM0_ 的世界時間尺度為 _PARAM2_","Time scale (1 by default)":"時間縮放(默認為1)","Is dynamic":"是動態的","Check if an object is dynamic.":"檢查物體是否為動態物體。","_PARAM0_ is dynamic":"_PARAM0_ 是動態的","Dynamics":"動態","Set as dynamic":"設定為動態","Set an object as dynamic. Is affected by gravity, forces and velocities.":"將物件設定為動態。受到重力、力量和速度的影響。","Set _PARAM0_ as dynamic":"設定 _PARAM0_ 為動態","Is static":"靜態的","Check if an object is static.":"檢查物體是否靜止狀態。","_PARAM0_ is static":"_PARAM0_ 是靜態的","Set as static":"設定為靜態的","Set an object as static. Is not affected by gravity, and can't be moved by forces or velocities at all.":"將物件設定為靜態。不受重力影響,不能被力量或速度移動。","Set _PARAM0_ as static":"設定 _PARAM0_ 為靜態的","Is kinematic":"是運動學的","Check if an object is kinematic.":"檢查物體是否運動學的。","_PARAM0_ is kinematic":"_PARAM0_ 是運動學的","Set as kinematic":"設為運動學模式","Set an object as kinematic. Is like a static body but can be moved through its velocity.":"將物件設定為運動學的。就像一個靜態物體,但可以通過它的速度移動。","Set _PARAM0_ as kinematic":"將 _PARAM0_ 設定運動模式","Is treated as a bullet":"作為子彈處理","Check if the object is being treated as a bullet.":"測試物件是否被當作子彈。","_PARAM0_ is treated as a bullet":"_PARAM0_ 被視為子彈","Treat as bullet":"作為子彈處理","Treat the object as a bullet. Better collision handling on high speeds at cost of some performance.":"將物件視為子彈。更好地快速處理碰撞,代價是某些性能。","Treat _PARAM0_ as bullet: _PARAM2_":"將 _PARAM0_ 作為子彈處理: _PARAM2_","Has fixed rotation":"有固定旋轉","Check if an object has fixed rotation.":"檢查物體是否具有固定旋轉。","_PARAM0_ has fixed rotation":"_PARAM0_ 有固定旋轉","Enable or disable an object fixed rotation. If enabled the object won't be able to rotate.":"啟用或禁用物件固定旋轉。如果啟用,物件將無法旋轉。","Set _PARAM0_ fixed rotation: _PARAM2_":"設定 _PARAM0_ 固定旋轉: _PARAM2_","Is sleeping allowed":"允許睡眠","Check if an object can sleep.":"檢查物體是否可以休眠。","_PARAM0_ can sleep":"_PARAM0_ 可以睡眠","Sleeping allowed":"允許睡眠","Allow or not an object to sleep. If enabled the object will be able to sleep, improving performance for non-currently-moving objects.":"允許或禁止物體睡眠。如果啟用,則該物件將能夠休眠,從而提高非當前移動物件的性能。","Allow _PARAM0_ to sleep: _PARAM2_":"允許 _PARAM0_ 休眠: _PARAM2_","Can sleep":"可以睡眠嗎?","Is sleeping":"正在睡眠","Check if an object is sleeping.":"檢查物體是否正在休眠。","_PARAM0_ is sleeping":"_PARAM0_ 正在睡眠","Shape scale":"形狀比例","Modify an object shape scale. It affects custom shape dimensions and shape offset. If custom dimensions are not set, the body will be scaled automatically to the object size.":"修改物件形狀比例。它影響自定義形狀尺寸和形狀偏移。如果自定義尺寸沒有設定,物體將自動縮放到物件尺寸。","the shape scale":"形狀比例","Body settings":"身體設定","Test an object density.":"測試物件密度。","the _PARAM0_ density":"_PARAM0_ 亮度","Modify an object density. The body's density and volume determine its mass.":"修改物件密度。身體的密度和體積決定其質量。","the density":"密度","Density of the object":"物體密度","Get the density of an object.":"獲取物件的密度。","Test an object friction.":"測試物件摩擦。","the _PARAM0_ friction":"_PARAM0_摩擦力","Modify an object friction. How much energy is lost from the movement of one object over another. The combined friction from two bodies is calculated as 'sqrt(bodyA.friction * bodyB.friction)'.":"改變物體摩擦力。一個物體移動到另一個物體上會遺失多少能量。 兩個物體的合并摩擦是“sqrt(bodyA.friction * bodyB.friction)”。","the friction":"摩擦力","Friction of the object":"物件的摩擦力","Get the friction of an object.":"獲取物件的摩擦力。","Test an object restitution.":"測試物件還原。","the _PARAM0_ restitution":"_PARAM0_ 恢復","Modify an object restitution. Energy conservation on collision. The combined restitution from two bodies is calculated as 'max(bodyA.restitution, bodyB.restitution)'.":"修改物件恢復。碰撞時節能。來自兩個實體的合并補償被計算為“ max(bodyA.restitution,bodyB.restitution)”。","the restitution":"恢復原狀","Restitution of the object":"恢復物件","Get the restitution of an object.":"獲取物品的恢復。","Linear damping":"線性阻尼","Test an object linear damping.":"測試物件線性阻尼。","the _PARAM0_ linear damping":"_PARAM0_ 線性阻尼","Modify an object linear damping. How much movement speed is lost across the time.":"修改物件線性阻尼。單位時間內速度降低大小。","the linear damping":"線性阻尼","Linear damping of the object":"物件的線性阻尼","Get the linear damping of an object.":"獲取物件的線性阻尼。","Angular damping":"角阻尼","Test an object angular damping.":"測試物件角阻尼。","the _PARAM0_ angular damping":"_PARAM0_ 角度阻尼","Modify an object angular damping. How much angular speed is lost across the time.":"修改物件角度阻尼。整個時間損失了多少角速度。","the angular damping":"角阻尼","Angular damping of the object":"物件的角阻尼量","Get the angular damping of an object.":"獲取物件的角阻尼。","Gravity scale":"重力比例","Test an object gravity scale.":"測試物件重力比例。","the _PARAM0_ gravity scale":"_PARAM0_ 重力比例","Modify an object gravity scale. The gravity applied to an object is the world gravity multiplied by the object gravity scale.":"修改物件重力尺寸。適用于物件的重力尺寸是世界重力乘以物件重力比例。","the gravity scale":"重力比例","Gravity scale of the object":"物件的重力比例","Get the gravity scale of an object.":"獲取物件的重力比例。","Layer enabled":"啟用圖層","Check if an object has a specific layer enabled.":"測試物件是否啟用了特定圖層。","_PARAM0_ has layer _PARAM2_ enabled":"_PARAM0_ 已啟用圖層 _PARAM2_","Filtering":"過濾","Layer (1 - 16)":"圖層(1-16)","Enable layer":"啟用圖層","Enable or disable a layer for an object. Two objects collide if any layer of the first object matches any mask of the second one and vice versa.":"啟用或禁用物件的圖層。如果第一個物件的任何層與第二個物件的任何蒙版匹配,則兩個物件發生碰撞,反之亦然。","Enable layer _PARAM2_ for _PARAM0_: _PARAM3_":"為_PARAM0_: _PARAM3_ 啟用圖層 _PARAM2_","Enable":"啟用","Mask enabled":"啟用蒙版","Check if an object has a specific mask enabled.":"檢查物件是否啟用了特定的遮罩。","_PARAM0_ has mask _PARAM2_ enabled":"_PARAM0_ 已啟用掩碼 _PARAM2_","Mask (1 - 16)":"遮罩(1-16)","Enable mask":"啟用蒙版","Enable or disable a mask for an object. Two objects collide if any layer of the first object matches any mask of the second one and vice versa.":"對物件啟用或禁用掩碼。 兩個物件,如果第一個物件的任何一層與第二個物件的任何蒙版相撞,反之亦然。","Enable mask _PARAM2_ for _PARAM0_: _PARAM3_":"為 _PARAM0_: _PARAM3_ 啟用掩碼 _PARAM2_","Linear velocity X":"線性速度 X","Test an object linear velocity on X.":"在 X 上測試一個物體的線性速度。","the linear velocity on X":"X上的線性速度","Velocity":"速度","Modify an object linear velocity on X.":"在 X上修改物件線性速度。","Linear velocity on X axis":"X軸上的線性速度","Get the linear velocity of an object on X axis.":"在 X 軸上獲取物件的線性速度。","Linear velocity Y":"線性速度 Y","Test an object linear velocity on Y.":"在 Y 上測試一個物體的線性速度。","the linear velocity on Y":"Y線性速度","Modify an object linear velocity on Y.":"在 Y上修改物件線性速度。","Linear velocity on Y axis":"Y軸上的線性速度","Get the linear velocity of an object on Y axis.":"在 Y 軸上獲取物件的線性速度。","Linear velocity":"線性速度","Test an object linear velocity length.":"測試物件線性速度長度。","the linear velocity length":"線性速度長度","Get the linear velocity of an object.":"獲取物件的線性速度。","Linear velocity angle":"線性速度角度","Test an object linear velocity angle.":"測試物件的線性速度角度。","the linear velocity angle":"線性速度角度","Compare the linear velocity angle of the object.":"比較物件的線性速度角度。","Linear velocity towards an angle":"朝向某一角度的線速度","Set the linear velocity towards an angle.":"將線速度設定為某個角度。","Set the linear velocity of _PARAM0_ towards angle: _PARAM2_ degrees, speed: _PARAM3_ pixels per second":"設定 _PARAM0_ 的線速度,角度:_PARAM2_ 度,速度:_PARAM3_ 像素每秒","Get the linear velocity angle of an object.":"獲取物件的線性速度角。","Angular velocity":"角速度","Test an object angular velocity.":"測試物件的角速度。","the angular velocity":"角速度","Angular speed to compare to (in degrees per second)":"比較角速度(以每秒度數為單位)","Modify an object angular velocity.":"修改物件的角度速度。","Get the angular velocity of an object.":"獲取物件的角速度。","Apply force":"應用力","Apply a force to the object over time. It \"accelerates\" an object and must be used every frame during a time period.":"隨著時間的推移向物體施加力。它“加速”一個物件,并且必須在一段時間內的每一幀使用。","Apply to _PARAM0_ a force of _PARAM2_;_PARAM3_":"應用到_PARAM0_的力量_PARAM2_;_PARAM3_","Forces & impulses":"力量和沖壓","X component (N)":"X 組件 (N)","Y component (N)":"Y 組件 (N)","A force is like an acceleration but depends on the mass.":"力類似于加速度,但它取決于質量。","Application point on X axis":"X 軸上的應用點","Application point on Y axis":"Y 軸上的應用點","Use `MassCenterX` and `MassCenterY` expressions to avoid any rotation.":"使用 `MassCenterX` 和 `MassCenterY` 表達式來避免任何旋轉。","Apply force (angle)":"應用力(角度)","Apply a force to the object over time using polar coordinates. It \"accelerates\" an object and must be used every frame during a time period.":"使用極坐標隨時間向物件施加力。它“加速”一個物件,并且必須在一段時間內的每一幀使用。","Apply to _PARAM0_ a force of angle _PARAM2_ and length _PARAM3_":"應用到 _PARAM0_ 一個角度的力_PARAM2_ 和 _PARAM3_","Length (N)":"長度(N)","Apply force toward position":"對位置施加力","Apply a force to the object over time to move it toward a position. It \"accelerates\" an object and must be used every frame during a time period.":"隨著時間的推移向物件施加力,將其移向某個位置。它“加速”一個物件,并且必須在一段時間內的每一幀使用。","Apply to _PARAM0_ a force of length _PARAM2_ towards _PARAM3_;_PARAM4_":"對 _PARAM0_ 施加朝向 _PARAM3_;_PARAM4_ 的長度為 _PARAM2_ 的力","Apply impulse":"應用沖壓","Apply an impulse to the object. It instantly changes the speed, to give an initial speed for instance.":"向物體施加一個沖量。它立即改變速度,例如給出一個初始速度。","Apply to _PARAM0_ an impulse of _PARAM2_;_PARAM3_":"對 _PARAM0_ 施加 _PARAM2_;_PARAM3_ 的沖量","X component (N·s or kg·m·s⁻¹)":"X 分量 (N·s or kg·m·s⁻¹)","Y component (N·s or kg·m·s⁻¹)":"Y 分量 (N·s or kg·m·s⁻¹)","An impulse is like a speed addition but depends on the mass.":"沖量就像速度加法,但取決于質量。","Apply impulse (angle)":"應用沖量(角度)","Apply an impulse to the object using polar coordinates. It instantly changes the speed, to give an initial speed for instance.":"使用極坐標向物件施加沖量。它會立即改變速度,例如給出初始速度。","Apply to _PARAM0_ an impulse of angle _PARAM2_ and length _PARAM3_ (applied at _PARAM4_;_PARAM5_)":"將角度 _PARAM2_ 和長度 _PARAM3_ 的沖量應用于 _PARAM0_ (應用于 _PARAM4_;_PARAM5_)","Length (N·s or kg·m·s⁻¹)":"長度 (N·s or kg·m·s⁻¹)","Apply impulse toward position":"向位置施加沖量","Apply an impulse to the object to move it toward a position. It instantly changes the speed, to give an initial speed for instance.":"向物件施加沖量以將其移向某個位置。它會立即改變速度,例如給出初始速度。","Apply to _PARAM0_ an impulse of length _PARAM2_ towards _PARAM3_;_PARAM4_ (applied at _PARAM5_;_PARAM6_)":"將長度為 _PARAM2_ 的沖量應用于 _PARAM0_,朝向 _PARAM3_;_PARAM4_ (應用于 _PARAM5_;_PARAM6_)","Apply torque (rotational force)":"施加扭矩 (旋轉力)","Apply a torque (also called \"rotational force\") to the object. It \"accelerates\" an object rotation and must be used every frame during a time period.":"向物體施加扭矩 (也稱為“旋轉力”)。它“加速”物件旋轉,并且必須在一段時間內的每一幀使用。","Apply to _PARAM0_ a torque of _PARAM2_":"應用到 _PARAM0_ 一個 _PARAM2_ 的tortque","Torque (N·m)":"扭矩 (N·m)","A torque is like a rotation acceleration but depends on the mass.":"扭矩類似于旋轉加速度,但取決于質量。","Apply angular impulse (rotational impulse)":"施加角沖量(旋轉沖量)","Apply an angular impulse (also called a \"rotational impulse\") to the object. It instantly changes the rotation speed, to give an initial speed for instance.":"對物體施加角沖量 (也稱為“旋轉沖量”)。它會立即改變旋轉速度,例如給出初始速度。","Apply to _PARAM0_ an angular impulse of _PARAM2_":"對 _PARAM0_ 應用 _PARAM2_ 的角沖量","Angular impulse (N·m·s)":"角動量 (N·m·s)","An impulse is like a rotation speed addition but depends on the mass.":"沖量就像轉速的加法,但取決于質量。","Mass":"質量","Return the mass of the object (in kilograms)":"返回物體的質量(以千克為單位)","Inertia":"慣性","Return the rotational inertia of the object (in kilograms · meters²)":"返回物體的轉動慣量(單位:千克·米²)","Mass center X":"質量中心 X","Mass center Y":"質量中心 Y","Joint first object":"關節第一個物件","Check if an object is the first object on a joint.":"檢查某個物體是否是關節上的第一個物體。","_PARAM0_ is the first object for joint _PARAM2_":"_PARAM0_ 是關節_PARAM2_ 的第一個物件","Joints":"關節","Joint ID":"關節 ID","Joint second object":"關節第二個物件","Check if an object is the second object on a joint.":"檢查某個物體是否是關節上的第二個物體。","_PARAM0_ is the second object for joint _PARAM2_":"_PARAM0_是關節_PARAM2_的第二個物件","Joint first anchor X":"連接第一個錨點 X","Joint first anchor Y":"連接第一個錨點 Y","Joint second anchor X":"連接第二個錨點 X","Joint second anchor Y":"連接第二個錨點 Y","Joint reaction force":"聯合反作用力","Test a joint reaction force.":"測試關節反作用力。","the joint _PARAM2_ reaction force":"聯合_PARAM2_反作用力","Joint reaction torque":"聯合反作用扭矩","Test a joint reaction torque.":"測試關節反作用扭矩。","the joint _PARAM2_ reaction torque":"關節_PARAM2_反作用扭矩","Remove joint":"刪除節點","Remove a joint from the scene.":"從場景中刪除節點","Remove joint _PARAM2_":"刪除節點_PARAM2_","Add distance joint":"添加距離節點","Add a distance joint between two objects. The length is converted to meters using the world scale on X. The frequency and damping ratio are related to the joint speed of oscillation and how fast it stops.":"在兩個物件之間添加一個距離節點。長度被世界比例轉換為米。頻率和阻尼率與節點的震蕩速度及停止速度相關。","Add a distance joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之間添加一個距離節點","Joints ❯ Distance":"節點 ❯ 距離","First object":"第一個物件","Anchor X on first body":"第一個物體上的 X 錨點","Anchor Y on first body":"第一個物體上的 Y 錨點","Second object":"第二個物件","Anchor X on second body":"第二個物體上的 X 錨點","Anchor Y on second body":"第二個物體上的 Y 錨點","Length (-1 to use current objects distance) (default: -1)":"長度 (-1 使用當前物件距離) (默認值:-1)","Frequency (Hz) (non-negative) (default: 0)":"頻率(Hz) (非負) (默認:0)","Damping ratio (non-negative) (default: 1)":"阻尼比率(非負) (默認值:1)","Allow collision between connected bodies? (default: no)":"允許在已連接的物體之間碰撞? (默認: 否)","Variable where to store the joint ID (default: none)":"變量存儲關節ID的位置(默認值:無)","Distance joint length":"距離關節長度","Modify a distance joint length.":"修改距離關節長度。","the length for distance joint _PARAM2_":"距離 _PARAM2_ 的長度","Distance joint frequency":"距離節點頻率","Modify a distance joint frequency.":"修改距離關節頻率。","the frequency for distance joint _PARAM2_":"距離 _PARAM2_ 的頻率","Distance joint damping ratio":"距離關節阻尼比","Modify a distance joint damping ratio.":"修改距離關節的阻尼比。","the damping ratio for distance joint _PARAM2_":"距離關節_PARAM2_的阻尼比","Add revolute joint":"添加旋轉關節","Add a revolute joint to an object at a fixed point. The object is attached as the second object in the joint, so you can use this for gear joints.":"在固定點向物件添加旋轉關節。該物件被附加為關節中的第二個物件,因此可以將其用于齒輪關節。","Add a revolute joint to _PARAM0_ at _PARAM2_;_PARAM3_":"在_PARAM2 _; _ PARAM3_上向_PARAM0_添加旋轉關節","Joints ❯ Revolute":"關節 ❯ 旋轉","X anchor":"X 錨點","Y anchor":"Y 錨點","Enable angle limits? (default: no)":"啟用角度限制? (默認: 否)","Reference angle (default: 0)":"參考角度 (默認:0)","Minimum angle (default: 0)":"最小角度 (默認:0)","Maximum angle (default: 0)":"最大角度 (默認:0)","Enable motor? (default: no)":"啟用動力?(默認:否)","Motor speed (default: 0)":"動力速度 (默認:0)","Motor maximum torque (default: 0)":"動力最大扭矩(默認值:0)","Add revolute joint between two bodies":"在兩個物體之間添加旋轉關節","Add a revolute joint between two objects. The reference angle determines what is considered as the base angle at the initial state.":"在兩個物件之間添加旋轉關節。參考角確定初始狀態下的底角。","Add a revolute joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之間添加旋轉關節","Revolute joint reference angle":"旋轉關節參考角","Revolute joint current angle":"旋轉接頭當前角度","Revolute joint angular speed":"旋轉關節角速度","Revolute joint limits enabled":"啟用旋轉關節限制","Check if a revolute joint limits are enabled.":"檢查旋轉關節限制是否啟用。","Limits for revolute joint _PARAM2_ are enabled":"啟用旋轉關節_PARAM2_的限制","Enable revolute joint limits":"啟用旋轉關節限制","Enable or disable a revolute joint angle limits.":"啟用或禁用旋轉關節角度限制。","Enable limits for revolute joint _PARAM2_: _PARAM3_":"啟用旋轉關節_PARAM2_的限制:_PARAM3_","Revolute joint limits":"旋轉關節極限","Modify a revolute joint angle limits.":"修改旋轉關節角度限制。","Set the limits to _PARAM3_;_PARAM4_ for revolute joint _PARAM2_":"將旋轉關節_PARAM2_的限制設定為_PARAM3 _; _ PARAM4_","Minimum angle":"最小角度","Maximum angle":"最大角度","Revolute joint minimum angle":"旋轉關節最小角度","Revolute joint maximum angle":"旋轉關節最大角度","Revolute joint motor enabled":"旋轉關節動力已啟用","Check if a revolute joint motor is enabled.":"檢查旋轉關節電機是否啟用。","Motor of revolute joint _PARAM2_ is enabled":"旋轉關節_PARAM2_的動力已啟用","Enable revolute joint motor":"啟用旋轉關節動力","Enable or disable a revolute joint motor.":"啟用或禁用旋轉關節動力。","Enable motor for revolute joint _PARAM2_: _PARAM3_":"啟用用于旋轉關節_PARAM2_的動力:_PARAM3_","Revolute joint motor speed":"旋轉關節動力轉速","Modify a revolute joint motor speed.":"修改旋轉關節動力速度。","the motor speed for revolute joint _PARAM2_":"旋轉接頭_PARAM2_的動力速度","Revolute joint max motor torque":"旋轉關節最大動力扭矩","Modify a revolute joint maximum motor torque.":"修改旋轉關節最大動力扭矩。","the maximum motor torque for revolute joint _PARAM2_":"旋轉接頭_PARAM2_的最大動力扭矩","Revolute joint maximum motor torque":"旋轉關節最大動力扭矩","Revolute joint motor torque":"旋轉關節動力扭矩","Add prismatic joint":"添加棱柱形接頭","Add a prismatic joint between two objects. The translation limits are converted to meters using the world scale on X.":"在兩個物件之間添加一個棱柱形關節。平移限制使用X上的世界標度轉換為米。","Add a prismatic joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之間添加棱形關節","Joints ❯ Prismatic":"關節 ❯ 棱柱","Axis angle":"軸角度","Enable limits? (default: no)":"啟用限制嗎?(默認:否)","Minimum translation (default: 0)":"最小平移量(默認:0)","Maximum translation (default: 0)":"最大平移量(默認:0)","Motor maximum force (default: 0)":"最大動力(默認:0)","Prismatic joint axis angle":"棱柱關節軸角度","Prismatic joint reference angle":"棱柱關節參考角","Prismatic joint current translation":"棱柱形聯合電流平移","Prismatic joint current speed":"棱柱關節電流速度","Prismatic joint speed":"棱柱關節速度","Prismatic joint limits enabled":"啟用棱柱關節限制","Check if a prismatic joint limits are enabled.":"檢查是否啟用了棱柱關節限制。","Limits for prismatic joint _PARAM2_ are enabled":"啟用四角形關節_PARAM2_的限制","Enable prismatic joint limits":"啟用棱柱形關節限制","Enable or disable a prismatic joint limits.":"啟用或禁用棱柱關節限制。","Enable limits for prismatic joint _PARAM2_: _PARAM3_":"啟用四角形關節_PARAM2_的限制:_PARAM3_","Prismatic joint limits":"棱柱關節限制","Modify a prismatic joint limits.":"修改棱柱關節限制。","Set the limits to _PARAM3_;_PARAM4_ for prismatic joint _PARAM2_":"將四角形關節_PARAM2_的限制設定為_PARAM3 _; _ PARAM4_","Minimum translation":"最小平移","Maximum translation":"最大平移","Prismatic joint minimum translation":"棱柱形聯合最小平移","Prismatic joint maximum translation":"棱柱形聯合最大平移","Prismatic joint motor enabled":"啟用棱鏡關節動力","Check if a prismatic joint motor is enabled.":"檢查棱柱關節電機是否啟用。","Motor for prismatic joint _PARAM2_ is enabled":"啟用了用于四角關節_PARAM2_的動力","Enable prismatic joint motor":"啟用棱柱關節動力","Enable or disable a prismatic joint motor.":"啟用或禁用棱柱關節動力。","Enable motor for prismatic joint _PARAM2_: _PARAM3_":"啟用用于方形關節_PARAM2_的動力:_PARAM3_","Prismatic joint motor speed":"棱鏡關節動力轉速","Modify a prismatic joint motor speed.":"修改棱柱關節動力的速度。","the motor force for prismatic joint _PARAM2_":"棱柱關節_PARAM2_的動力","Prismatic joint max motor force":"棱柱關節最大動力","Modify a prismatic joint maximum motor force.":"修改棱柱形接頭的最大動力。","the maximum motor force for prismatic joint _PARAM2_":"棱柱關節_PARAM2_的動力","Prismatic joint maximum motor force":"棱柱關節最大動力","Prismatic joint motor force":"棱柱關節動力","Add pulley joint":"添加滑輪接頭","Add a pulley joint between two objects. Lengths are converted to meters using the world scale on X.":"在兩個物件之間添加一個滑輪關節。使用X上的世界比例尺將長度轉換為米。","Add a pulley joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之間添加滑輪關節","Joints ❯ Pulley":"關節 ❯ 滑輪","Ground anchor X for first object":"第一個物件的地面錨點 X","Ground anchor Y for first object":"第一個物件的地面錨點 Y","Ground anchor X for second object":"第二個物件的地面錨點 X","Ground anchor Y for second object":"第二個物件的地面錨點 Y","Length for first object (-1 to use anchor positions) (default: -1)":"第一個物件的長度 (-1 使用錨點位置) (默認: -1)","Length for second object (-1 to use anchor positions) (default: -1)":"第二個物件的長度 (-1 使用錨點位置) (默認: -1)","Ratio (non-negative) (default: 1":"比率(非負) (默認: 1","Pulley joint first ground anchor X":"滑輪關節第一個地面錨 X","Pulley joint first ground anchor Y":"滑輪關節第一個地面錨 Y","Pulley joint second ground anchor X":"滑輪關節第二地面錨 X","Pulley joint second ground anchor Y":"滑輪關節第二地面錨 Y","Pulley joint first length":"滑輪關節第一長度","Pulley joint second length":"滑輪關節第二長度","Pulley joint ratio":"滑輪關節比率","Add gear joint":"添加齒輪關節","Add a gear joint between two joints. Attention: Gear joints require the joints to be revolute or prismatic, and both of them to be attached to a static body as first object.":"在兩個關節之間添加一個齒輪關節。注意:齒輪關節要求關節是旋轉的或棱柱形的,并且兩者都必須作為第一個物件附著到靜態物體上。","Add a gear joint between joints _PARAM2_ and _PARAM3_":"在關節_PARAM2_和_PARAM3_之間添加齒輪關節","Joints ❯ Gear":"關節 ❯ 齒輪","First joint ID":"第一個關節 ID","Second joint ID":"第二個關節 ID","Ratio (non-zero) (default: 1)":"比率(非零) (默認值:1)","Gear joint first joint":"齒輪關節第一個關節","Gear joint second joint":"齒輪關節第二個關節","Gear joint ratio":"齒輪關節比例","Modify a Gear joint ratio.":"修改齒輪關節比例。","the ratio for gear joint _PARAM2_":"齒輪關節比例_PARAM2_","Add mouse joint":"添加鼠標關節","Add a mouse joint to an object (makes the object move towards a specific point).":"向物件添加鼠標關節(使物件移向特定點)。","Add a mouse joint to _PARAM0_":"將鼠標關節添加到_PARAM0_","Joints ❯ Mouse":"關節 ❯ 鼠標","Target X":"目標x","Target Y":"目標y","Maximum force (N) (non-negative) (default: 500)":"最大力量(N) (非負) (默認:500)","Frequency (Hz) (positive) (default: 10)":"頻率(Hz) (正值) (默認:10)","Mouse joint target":"鼠標關節目標","Set a mouse joint target.":"設定鼠標關節目標。","Set the target position of mouse joint _PARAM2_ of _PARAM0_ to _PARAM3_;_PARAM4_":"將_PARAM0_的鼠標關節_PARAM2_的目標位置設定為_PARAM3 _; _ PARAM4_","Mouse joint target X":"鼠標關節目標 X","Mouse joint target Y":"鼠標關節目標 Y","Mouse joint max force":"鼠標關節最大力量","Set a mouse joint maximum force.":"設定鼠標關節的最大力量。","the maximum force for mouse joint _PARAM2_":"鼠標關節_PARAM2_的最大作用力","Mouse joint maximum force":"鼠標關節最大力量","Mouse joint frequency":"鼠標關節頻率","Set a mouse joint frequency.":"設定鼠標關節頻率。","the frequency for mouse joint _PARAM2_":"鼠標關節 _PARAM2_ 的頻率","Mouse joint damping ratio":"鼠標關節阻尼比","Set a mouse joint damping ratio.":"設定鼠標關節阻尼比。","the damping ratio for mouse joint _PARAM2_":"鼠標關節_PARAM2_ 的阻尼比","Add wheel joint":"添加車輪關節","Add a wheel joint between two objects. Higher frequencies means higher suspensions. Damping determines oscillations, critical damping of 1 means no oscillations.":"在兩個物件之間添加一個車輪關節。較高的頻率意味著較高的懸掛。阻尼確定振蕩,臨界阻尼為1表示無振蕩。","Add a wheel joint between _PARAM0_ and _PARAM4_":"在 _PARAM0_ 和 _PARAM4_ 之間添加車輪關節","Joints ❯ Wheel":"關節 ❯ 車輪","Frequency (Hz) (non-negative) (default: 10)":"頻率(Hz) (非負) (默認:10)","Wheel joint axis angle":"車輪關節軸角度","Wheel joint current translation":"車輪關節當前平移","Wheel joint current speed":"車輪關節電流速度","Wheel joint speed":"車輪關節速度","Wheel joint motor enabled":"車輪關節動力已啟用","Check if a wheel joint motor is enabled.":"檢查車輪接頭電機是否啟用。","Motor for wheel joint _PARAM2_ is enabled":"車輪關節動力_PARAM2_ 已啟用","Enable wheel joint motor":"啟用車輪關節動力","Enable or disable a wheel joint motor.":"啟用或禁用車輪關節動力。","Enable motor for wheel joint _PARAM2_: _PARAM3_":"啟用車輪關節_PARAM2_的動力: _PARAM3_","Wheel joint motor speed":"車輪關節動力速度","Modify a wheel joint motor speed.":"修改車輪關節動力速度。","the motor speed for wheel joint _PARAM2_":"車輪關節的動力速度 _PARAM2_","Wheel joint max motor torque":"車輪關節最大動力扭矩","Modify a wheel joint maximum motor torque.":"修改車輪關節最大動力扭矩。","the maximum motor torque for wheel joint _PARAM2_":"車輪關節最大動力扭矩 _PARAM2_","Wheel joint maximum motor torque":"車輪關節最大動力扭矩","Wheel joint motor torque":"車輪關節動力扭矩","Wheel joint frequency":"車輪關節頻率","Modify a wheel joint frequency.":"修改車輪關節動力頻率。","the frequency for wheel joint _PARAM2_":"車輪關節的頻率 _PARAM2_","Wheel joint damping ratio":"車輪關節阻尼比","Modify a wheel joint damping ratio.":"修改車輪關節阻尼比","the damping ratio for wheel joint _PARAM2_":"車輪關節的阻尼比 _PARAM2_","Add weld joint":"添加焊接關節","Add a weld joint between two objects.":"在兩個物件之間添加一個焊接的關節。","Add a weld joint between _PARAM0_ and _PARAM4_":"在 _PARAM0_ 和 _PARAM4_ 之間添加一個焊接關節","Joints ❯ Weld":"關節 ❯ 焊接","Weld joint reference angle":"焊接關節參考角度","Weld joint frequency":"焊接關節頻率","Modify a weld joint frequency.":"修改焊接關節頻率。","the frequency for weld joint _PARAM2_":"焊接關節 _PARAM2_ 的頻率","Weld joint damping ratio":"焊接關節阻尼比","Modify a weld joint damping ratio.":"修改焊接關節阻尼比。","the damping ratio for weld joint _PARAM2_":"焊接關節 _PARAM2_ 的阻尼比","Add rope joint":"添加繩索關節","Add a rope joint between two objects. The maximum length is converted to meters using the world scale on X.":"在兩個物件之間添加一個繩索關節。最大長度使用X上的世界標度轉換為米。","Add a rope joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之間添加繩索關節","Joints ❯ Rope":"關節 ❯ 繩子","Maximum length (-1 to use current objects distance) (default: -1)":"最大長度 (-1 使用當前物件距離) (默認: -1)","Rope joint max length":"繩索關節最大長度","Modify a rope joint maximum length.":"修改繩索關節的最大長度。","the maximum length for rope joint _PARAM2_":"繩索關節_PARAM2_的最大長度","Rope joint maximum length":"繩索關節最大長度","Add friction joint":"添加摩擦關節","Add a friction joint between two objects.":"在兩個物件之間添加摩擦關節。","Add a friction joint between _PARAM0_ and _PARAM4_":"在_PARAM0_和_PARAM4_之間添加摩擦關節","Joints ❯ Friction":"關節 ❯ 摩擦力","Maximum force (non-negative)":"最大力量(非負)","Maximum torque (non-negative)":"最大扭矩(非負)","Friction joint max force":"摩擦關節最大力量","Modify a friction joint maximum force.":"修改摩擦關節的最大力量。","the maximum force for friction joint _PARAM2_":"摩擦關節_PARAM2_的最大力量","Friction joint maximum force":"摩擦關節最大力量","Friction joint max torque":"摩擦關節最大扭矩","Modify a friction joint maximum torque.":"修改摩擦關節的最大扭矩。","the maximum torque for friction joint _PARAM2_":"摩擦關節_PARAM2_的最大扭矩","Friction joint maximum torque":"摩擦關節最大扭矩","Add motor joint":"添加動力關節","Add a motor joint between two objects. The position and angle offsets are relative to the first object.":"在兩個物件之間添加一個動力關節。位置和角度偏移是相對於第一個物件的。","Add a motor joint between _PARAM0_ and _PARAM2_":"在_PARAM0_和_PARAM2_之間添加動力關節","Joints ❯ Motor":"關節 ❯ 動力","Offset X position":"偏移X位置","Offset Y position":"偏移 Y 位置","Offset Angle":"偏移角度","Correction factor (default: 1)":"校正系數 (默認: 1)","Motor joint offset":"動力關節偏移","Modify a motor joint offset.":"修改動力關節偏移。","Set offset to _PARAM3_;_PARAM4_ for motor joint _PARAM2_":"將動力關節_PARAM2_的偏移設定為_PARAM3 _; _ PARAM4_","Offset X":"偏移 X","Offset Y":"偏移Y","Motor joint offset X":"動力關節偏移 X","Motor joint offset Y":"動力關節偏移 Y","Motor joint angular offset":"動力關節角度偏移","Modify a motor joint angular offset.":"修改動力關節角度偏移。","the angular offset for motor joint _PARAM2_":"動力關節_PARAM2_的角度偏移","Motor joint max force":"動力關節最大力量","Modify a motor joint maximum force.":"修改動力關節的最大力量。","the maximum force for motor joint _PARAM2_":"動力關節_PARAM2_的最大力量","Motor joint maximum force":"動力關節最大力量","Motor joint max torque":"動力關節最大扭矩","Modify a motor joint maximum torque.":"修改動力關節的最大扭矩。","the maximum torque for motor joint _PARAM2_":"動力關節_PARAM2_的最大扭矩","Motor joint maximum torque":"動力關節最大扭矩","Motor joint correction factor":"動力關節校正系數","Modify a motor joint correction factor.":"修改動力關節校正系數。","the correction factor for motor joint _PARAM2_":"動力關節_PARAM2_的校正系數","Check if two objects collide.":"檢查兩個物件是否相撞。","_PARAM0_ is colliding with _PARAM2_":"_PARAM0_與_PARAM2_發生沖突","Collision started":"碰撞開始","Check if two objects just started colliding during this frame.":"檢查兩個物件是否在此幀期間開始碰撞。","_PARAM0_ started colliding with _PARAM2_":"_PARAM0_ 開始與 _PARAM2_ 碰撞","Collision stopped":"碰撞已停止","Check if two objects just stopped colliding at this frame.":"檢查兩個物件是否在此幀處停止碰撞","_PARAM0_ stopped colliding with _PARAM2_":"_PARAM0_ 停止與 _PARAM2_ 碰撞","Allow your game to send scores to your leaderboards (anonymously or from the logged-in player) or display existing leaderboards to the player.":"允許您的遊戲向您的排行榜發送分數(匿名或已登錄的玩家)或向玩家顯示現有排行榜。","Save player score":"保存玩家分數","Save the player's score to the given leaderboard. If the player is connected, the score will be attached to the connected player (unless disabled).":"將玩家的分數保存到給定的排行榜中。如果玩家已連接,分數將附加到已連接的玩家 (除非禁用)。","Send to leaderboard _PARAM1_ the score _PARAM2_ with player name: _PARAM3_":"將分數 _PARAM2_ 發送到排行榜_PARAM1_,玩家名稱:_PARAM3_","Save score":"保存分數","Score to register for the player":"要注冊玩家的得分","Name to register for the player":"要注冊玩家的名稱","Leave this empty to let the leaderboard automatically generate a player name (e.g: \"Player23464\"). You can configure this in the leaderboard administration.":"將此字段留空,讓排行榜自動生成玩家名稱(例如:“Player23464”)。您可以在排行榜管理中進行配置。","Save connected player score":"保存已連接的玩家分數","Save the connected player's score to the given leaderboard.":"將所連接的玩家的得分保存到給定的排行榜。","Send to leaderboard _PARAM1_ the score _PARAM2_ for the connected player":"將已連接玩家的分數 _PARAM2_ 發送到排行榜_PARAM1_","Always attach scores to the connected player":"始終將分數附加到連接的玩家","Set if the score sent to a leaderboard is always attached to the connected player - if any. This is on by default.":"設定發送到排行榜的分數是否總是與連接的玩家相關聯-如果有的話。默認情況下,這是開啟的。","Always attach the score to the connected player: _PARAM1_":"始終將分數附加到連接的玩家:_PARAM1_","Enable?":"啟用?","Last score save has errored":"上次的分數保存已經遺失","Check if the last attempt to save a score has errored.":"檢查最后一次保存分數的嘗試是否已失效。","Last score save in leaderboard _PARAM0_ has errored":"在排行榜_PARAM0_ 保存的最后得分已經遺失","If no leaderboard is specified, will return the value related to the last leaderboard save action.":"如果沒有指定排行榜,將返回與最后一個排行榜相關的值保存操作。","Last score save has succeeded":"上次成績保存成功","Check if the last attempt to save a score has succeeded.":"檢查最后一次試圖保存分數是否成功。","Last score save in leaderboard _PARAM0_ has succeeded":"在排行榜_PARAM0_ 保存的最后分數已成功","If no leaderboard is specified, will return the value related to the last leaderboard save action that successfully ended.":"如果沒有指定排行榜,將返回與最后一個排行榜相關的值,這些操作已成功結束。","Score is saving":"正在保存得分","Check if a score is currently being saved in leaderboard.":"檢查是否正在將分數保存在排行榜中。","Score is saving in leaderboard _PARAM0_":"分數保存到排行榜_PARAM0_","Closed by player":"由玩家關閉","Check if the player has just closed the leaderboard view.":"檢查玩家是否剛剛關閉了排行榜視圖。","Player has just closed the leaderboard view":"玩家剛剛關閉了排行榜視圖","Display leaderboard":"顯示排行榜","Error of last save attempt":"最后一次保存嘗試出錯","Get the error of the last save attempt.":"獲取最后一次保存嘗試的錯誤。","Leaderboard display has errored":"排行榜顯示已擦除","Check if the display of the leaderboard errored.":"檢查排行榜顯示是否失效。","Leaderboard display has loaded":"排行榜顯示已加載","Check if the display of the leaderboard has finished loading and been displayed on screen.":"檢查排行榜顯示是否已完成加載并顯示在屏幕上。","Leaderboard display has loaded and is displayed on screen":"排行榜顯示已加載并顯示在屏幕上","Leaderboard display is loading":"排行榜顯示加載中","Check if the display of the leaderboard is loading.":"檢查排行榜是否正在加載顯示。","Format player name":"格式化玩家名稱","Formats a name so that it can be submitted to a leaderboard.":"格式化名稱以便可以提交給排行榜。","Raw player name":"原始玩家名稱","Display the specified leaderboard on top of the game. If a leaderboard was already displayed on top of the game, the new leaderboard will replace it.":"在遊戲頂部顯示指定的排行榜。 如果排行榜已經顯示在遊戲頂端,新的排行榜將替換它。","Display leaderboard _PARAM1_ (display a loader: _PARAM2_)":"顯示排行榜_PARAM1_ (顯示加載器: _PARAM2_)","Display loader while leaderboard is loading":"當排行榜加載時顯示加載器","Close current leaderboard":"關閉當前排行榜","Close the leaderboard currently displayed on top of the game.":"關閉當前遊戲頂部顯示的排行榜。","Close current leaderboard displayed on top of the game":"關閉遊戲頂部顯示的當前排行榜","Device sensors":"設備傳感器","Allow the game to access the sensors of a mobile device.":"允許遊戲訪問移動設備的傳感器。","Sensor active":"傳感器激活","The condition is true if the device orientation sensor is currently active":"如果設備方向傳感器當前處于活動狀態,則條件為 true","Orientation sensor is active":"方向傳感器已激活","Orientation":"方向","Compare the value of orientation alpha":"比較方向alpha的值","Compare the value of orientation alpha. (Range: 0 to 360°)":"比較方向alpha的值。 (范圍:0至360°)","the orientation alpha":"方向alpha","Sign of the test":"測試的符號","Compare the value of orientation beta":"比較方向測試的值","Compare the value of orientation beta. (Range: -180 to 180°)":"比較定向位的值。(距離:-180至180度)","the orientation beta":"定向測試版","Compare the value of orientation gamma":"比較定向伽瑪的值","Compare the value of orientation gamma. (Range: -90 to 90°)":"比較定向伽瑪的值(距離: -90 到 90°)","the orientation gamma":"定向伽馬","Activate orientation sensor":"激活方向傳感器。","Activate the orientation sensor. (remember to turn it off again)":"激活方向傳感器(請記住再次關閉它)","Activate the orientation sensor.":"激活方向傳感器。","Deactivate orientation sensor":"停用方向傳感器","Deactivate the orientation sensor.":"停用方向傳感器。","Is Absolute":"絕對","Get if the devices orientation is absolute and not relative":"獲取設備的絕對方向","Alpha value":"透明度","Get the devices orientation Alpha (compass)":"獲取設備方向Alpha (指南針)","Beta value":"測試版值","Get the devices orientation Beta":"獲取設備方向測試版","Gamma value":"伽瑪值","Get the devices orientation Gamma value":"獲取設備方向伽瑪值","The condition is true if the device motion sensor is currently active":"如果設備移動傳感器正在激活,條件為 true","Motion sensor is active":"運動傳感器已激活","Motion":"運動","Compare the value of rotation alpha":"比較旋轉alpha的值","Compare the value of rotation alpha. (Note: few devices support this sensor)":"比較旋轉alpha的值。 (注意:很少有設備支持此傳感器)","the rotation alpha":"旋轉alpha","Value (m/s²)":"值 (m/s2)","Compare the value of rotation beta":"比較旋轉測試版的值","Compare the value of rotation beta. (Note: few devices support this sensor)":"比較旋轉位的值。(注意:支持此傳感器的設備不多)","the rotation beta":"旋轉測試版","Compare the value of rotation gamma":"比較旋轉伽瑪的值","Compare the value of rotation gamma. (Note: few devices support this sensor)":"比較旋轉伽瑪的值 (注意:支持此傳感器的設備不多)","the rotation gamma":"旋轉伽馬","Compare the value of acceleration on X-axis":"比較X軸上加速度的值","Compare the value of acceleration on the X-axis (m/s²).":"比較X軸上的加速度值 (m/s2)。","the acceleration X":"加速度 X","Compare the value of acceleration on Y-axis":"比較Y-軸上加速度的值","Compare the value of acceleration on the Y-axis (m/s²).":"比較Y-軸上的加速度值 (m/s2)。","the acceleration Y":"加速度Y","Compare the value of acceleration on Z-axis":"比較Z軸上加速度的值","Compare the value of acceleration on the Z-axis (m/s²).":"比較Z軸上的加速度值 (m/s2)。","the acceleration Z":"加速度Z","Activate motion sensor":"激活運動傳感器","Activate the motion sensor. (remember to turn it off again)":"激活運動傳感器(請記住再次關閉它)","Activate the motion sensor.":"激活運動傳感器。","Deactivate motion sensor":"停用運動傳感器","Deactivate the motion sensor.":"停用運動傳感器。","Get the devices rotation Alpha":"獲取設備旋轉 Alpha","Get the devices rotation Beta":"獲取設備旋轉 Beta","Get the devices rotation Gamma":"獲取設備旋轉 Gamma","Acceleration X value":"加速 X 值","Get the devices acceleration on the X-axis (m/s²)":"在X軸上加速設備 (m/s2)","Acceleration Y value":"加速 Y 值","Get the devices acceleration on the Y-axis (m/s²)":"獲取設備在Y軸上的加速度(m /s²)","Acceleration Z value":"加速 Z 值","Get the devices acceleration on the Z-axis (m/s²)":"獲得設備在Z軸上的加速度(m /s²)","Dialogue Tree":"對話樹","Load dialogue tree from a scene variable":"從場景變量加載對話樹","Load a dialogue data object - Yarn JSON format, stored in a scene variable. Use this command to load all the Dialogue data at the beginning of the game.":"加載對話資料物件 - Yarn json 格式,存儲在場景變量。 使用此命令在遊戲開始時加載所有對話資料。","Load dialogue data from scene variable _PARAM0_":"從場景變量 _PARAM0_ 加載對話資料","Scene variable that holds the Yarn JSON data":"持有Yarn JSON資料的場景變量","Load dialogue tree from a JSON file":"從 Json 文件載入對話樹","Load a dialogue data object - Yarn JSON format, stored in a JSON file. Use this command to load all the Dialogue data at the beginning of the game.":"載入對話資料物件 - Yarn json 格式,存儲在 Json 文件中。 使用此命令在遊戲開始時加載所有對話資料。","Load dialogue data from JSON file _PARAM1_":"從 json 文件 _PARAM1_ 載入對話資料","JSON file that holds the Yarn JSON data":"持有Yarn JSON資料的 Json 文件","Start dialogue from branch":"從分支開始對話","Start dialogue from branch. Use this to initiate the dialogue from a specified branch.":"從分支開始對話。用來啟動指定分支的對話。","Start dialogue from branch _PARAM0_":"從分支 _PARAM0_ 開始對話","Dialogue branch":"對話分支","Stop running dialogue":"停止執行對話","Stop the running dialogue. Use this to interrupt dialogue parsing.":"停止正在運行的對話。用它來中斷對話解析。","Go to the next dialogue line":"轉到下一個對話行","Go to the next dialogue line. Use this to advance to the next dialogue line when the player presses a button.":"轉到下一個對話線。當玩家按下按鈕時,用它來推進到下一個對話線。","Confirm selected option":"確認選定的選項","Set the selected option as confirmed, which will validate it and go forward to the next node. Use other actions to select options (see \"select next option\" and \"Select previous option\").":"將選中的選項設定為已確認,將驗證它,并轉到下一個節點。 使用其他動作選擇選項(見\"選擇下一個選項\"和\"選擇上一個選項\")。","Select next option":"選擇下一個選項","Select next option (add 1 to selected option number). Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"選擇下一個選項 (將1添加到選中的選項編號)。 當對話行為“選項”類型且播放器按下按鈕更改選中的選項時使用此項。","Select previous option":"選擇上一個選項","Select previous option (subtract 1 from selected option number). Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"選擇上一個選項 (從選中的選項號中減去1)。 當對話行為“選項”類型且播放器按下按鈕更改選中的選項時使用此項。","Select option by number":"按編號選擇選項","Select option by number. Use this when the dialogue line is of type \"options\" and the player has pressed a button to change selected option.":"按數字選擇選項。當對話線為“選項”類型且播放器按下按鈕以更改選中的選項時,使用此選項。","Select option at index _PARAM0_":"在索引 _PARAM0_ 選擇選項","Option index number":"選項索引號","Scroll clipped text":"滾動剪切文本","Scroll clipped text. Use this with a timer and \"get clipped text\" when you want to create a typewriter effect. Every time the action runs, a new character appears from the text.":"滾動剪切的文本。當您想要創建打字機效果時,使用計時器和“獲取剪切文本”。 每次動作運行時,文本中都會出現一個新字符。","Complete clipped text scrolling":"完成剪切文本滾動","Complete the clipped text scrolling. Use this action whenever you want to skip scrolling.":"完成剪切的文本滾動。當您想跳過滾動時使用此動作。","Set dialogue state string variable":"設定對話狀態字符串變量","Set dialogue state string variable. Use this to set a variable that the dialogue data is using.":"設定對話狀態字符串變量。使用此設定對話資料使用的變量。","Set dialogue state string variable _PARAM0_ to _PARAM1_":"將對話狀態變量_PARAM0_ 設定為 _PARAM1_","State variable name":"狀態變量名","New value":"新值","Set dialogue state number variable":"設定對話狀態變量","Set dialogue state number variable. Use this to set a variable that the dialogue data is using.":"設定對話狀態變量。使用此設定對話資料使用的變量。","Set dialogue state number variable _PARAM0_ to _PARAM1_":"設定對話狀態變量 _PARAM0_ 到 _PARAM1_","Set dialogue state boolean variable":"設定對話狀態布爾變量","Set dialogue state boolean variable. Use this to set a variable that the dialogue data is using.":"設定對話狀態布爾變量。使用此設定對話資料使用的變量。","Set dialogue state boolean variable _PARAM0_ to _PARAM1_":"設定對話狀態布爾變量 _PARAM0_ 到 _PARAM1_","Save dialogue state":"保存對話狀態","Save dialogue state. Use this to store the dialogue state into a variable, which can later be used for saving the game. That way player choices can become part of the game save.":"保存對話狀態。用它來將對話狀態存儲為一個變量,這個變量以后可以用于保存遊戲。 這樣玩家的選擇就可以成為遊戲保存的一部分。","Save dialogue state to _PARAM0_":"將對話狀態保存到 _PARAM0_","Global Variable":"全局變量","Load dialogue state":"加載對話狀態","Load dialogue state. Use this to restore dialogue state, if you have stored in a variable before with the \"Save state\" action.":"加載對話狀態,如果您在“保存狀態”操作之前存儲在一個變量中,則使用此恢復對話狀態。","Load dialogue state from _PARAM0_":"從 _PARAM0_ 加載對話狀態","Clear dialogue state":"清除對話狀態","Clear dialogue state. This resets all dialogue state accumulated by the player choices. Useful when the player is starting a new game.":"清除對話狀態。這將重置玩家選擇的所有對話狀態。當玩家開始新遊戲時有用。","Get the current dialogue line text":"獲取當前對話行文本","Returns the current dialogue line text":"返回當前對話行文本","Get the number of options in an options line type":"獲取選項行類型中選項的數量","Get the text of an option from an options line type":"從選項行類型獲取選項文本","Get the text of an option from an options line type, using the option's Number. The numbers start from 0.":"從選項行類型獲取選項的文本,使用選項的數字。數字從0開始。","Option Index Number":"選項索引號","Get a Horizontal list of options from the options line type":"從選項行類型獲取選項水平列表","Get the text of all available options from an options line type as a horizontal list. You can also pass the selected option's cursor string, which by default is ->":"從選項行類型獲取所有可用選項的文本作為水平列表。 您也可以通過所選選項的光標字符串,默認情況下它是 ->","Options Selection Cursor":"選項選擇光標","Get a Vertical list of options from the options line type":"從選項行類型獲取選項的垂直列表","Get the text of all available options from an options line type as a vertical list. You can also pass the selected option's cursor string, which by default is ->":"從選項行類型獲取所有可用選項的文本作為垂直列表。 您也可以通過所選選項的光標字符串,默認情況下它是 ->","Get the number of the currently selected option":"獲取當前選中選項的數量","Get the number of the currently selected option. Use this to help you render the option selection marker at the right place.":"獲取當前選中選項的數量。使用此選項可以幫助您在正確的地方呈現選項的選擇標記。","Get dialogue line text clipped":"獲得剪切的對話行文本","Get dialogue line text clipped by the typewriter effect. Use the \"Scroll clipped text\" action to control the typewriter effect.":"獲取被打字機效果剪切的對話行文本。使用“滾動剪切的文本”操作來控制打字機效果。","Get the title of the current branch of the running dialogue":"獲取當前對話分支的標題","Get the tags of the current branch of the running dialogue":"獲取當前對話分支的標簽","Get a tag of the current branch of the running dialogue via its index":"通過其索引獲取當前對話分支的標簽","Tag Index Number":"標簽索引編號","Get the parameters of a command call":"獲取命令調用的參數","Get the parameters of a command call - <>":"獲取命令調用的參數 - <>","parameter Index Number":"參數索引編號","Get the number of parameters in the currently passed command":"獲取當前傳遞命令中的參數數","Get parameter from a Tag found by the branch contains tag condition":"從分支中找到的標簽獲取參數包含標簽條件","Get a list of all visited branches":"獲取所有已訪問分支的列表","Get the full raw text of the current branch":"獲取當前分支的原始文本","Get the number stored in a dialogue state variable":"獲取存儲在對話狀態變數中的數字","Dialogue state variable name":"對話狀態變數名稱","Get the string stored in a dialogue state variable":"獲取存儲在對話狀態變數中的字符串","Command is called":"命令被調用","Check if a specific Command is called. If it is a <>, you can even get the parameter with the CommandParameter expression.":"檢查指定的命令是否被調用。如果它是 <>,您甚至可以使用命令參數表達式獲取參數。","Command <<_PARAM0_>> is called":"命令 <_PARAM0_>被調用","Command String":"命令字符串","Dialogue line type":"對話線類型","Check if the current dialogue line line is one of the three existing types. Use this to set what logic is executed for each type.\nThe three types are as follows:\n- text: when displaying dialogue text.\n- options: when displaying [[branching/options]] for dialogue choices.\n-command: when <> are triggered by the dialogue data.":"檢查當前對話行是否為現有三種類型之一。使用此設定每種類型執行的邏輯。\n三種類型如下:\n- 文本:當顯示對話文本時。\n- 選項:當顯示 [[分支/選項]] 對話選擇時,\n-命令:<> 是由對話資料觸發的。","The dialogue line is _PARAM0_":"對話線是 _PARAM0_","type":"類型","Dialogue is running":"對話正在運行","Check if the dialogue is running. Use this to for things like locking the player movement while speaking with a non player character.":"檢查對話是否正在運行。用它來鎖定玩家運動等事項與非玩家角色交談。","Dialogue has branch":"對話有分支","Check if the dialogue has a branch with specified name. Use this to check if a dialogue branch exists in the loaded dialogue data.":"檢查對話是否具有指定名稱的分支。使用此來檢查對話分支是否存在于加載對話資料中。","Dialogue has a branch named _PARAM0_":"對話有一個分支,名稱為 _PARAM0_","Branch name":"分支名稱","Has selected option changed":"已更改所選選項","Check if a selected option has changed when the current dialogue line type is options. Use this to detect when the player has selected another option, so you can re-draw where the selection arrow is.":"檢查當當前對話行類型為選項時選中的選項是否已更改。 當玩家選擇了另一個選項時使用此選項來檢測,所以您可以重新繪制選中箭頭的位置。","Selected option has changed":"所選選項已更改","Current dialogue branch title":"當前對話處標題","Check if the current dialogue branch title is equal to a string. Use this to trigger game events when the player has visited a specific dialogue branch.":"檢查當前對話分支標題是否等于字符串。 當玩家訪問特定對話分支時,用它來觸發遊戲事件。","The current dialogue branch title is _PARAM0_":"當前對話分支標題是 _PARAM0_","title name":"標題名稱","Current dialogue branch contains a tag":"當前對話處包含一個標簽","Check if the current dialogue branch contains a specific tag. Tags are an alternative useful way to <> to drive game logic with the dialogue data.":"檢查當前對話分支是否包含一個特定標簽。 標簽是用對話資料驅動遊戲邏輯的 <> 的另一種有用方式。","The current dialogue branch contains a _PARAM0_ tag":"當前對話分支包含 _PARAM0_ 標簽","tag name":"標簽名稱","Branch title has been visited":"已訪問分支標題","Check if a branch has been visited":"檢查分支是否已被訪問","Branch title _PARAM0_ has been visited":"分支標題 _PARAM0_ 已被訪問","branch title":"分支標題","Compare dialogue state string variable":"比較對話狀態字符串變量","Compare dialogue state string variable. Use this to trigger game events via dialogue variables.":"比較對話狀態字符串變量。通過對話變量來觸發遊戲事件。","Dialogue state string variable _PARAM0_ is equal to _PARAM1_":"對話狀態字符串變量 _PARAM0_ 等于 _PARAM1_","State variable":"狀態變量","Equal to":"等于","Compare dialogue state number variable":"比較對話狀態變量","Compare dialogue state number variable. Use this to trigger game events via dialogue variables.":"比較對話狀態變量。通過對話變量來觸發遊戲事件。","Dialogue state number variable _PARAM0_ is equal to _PARAM1_":"對話狀態變量 _PARAM0_ 等于 _PARAM1_","Compare dialogue state boolean variable":"比較對話狀態布爾變量","Compare dialogue state variable. Use this to trigger game events via dialogue variables.":"比較對話狀態變量。通過對話變量來觸發遊戲事件。","Dialogue state boolean variable _PARAM0_ is equal to _PARAM1_":"對話狀態變量 _PARAM0_ 等于 _PARAM1_","Clipped text has completed scrolling":"片段文本已完成滾動","Check if the clipped text scrolling has completed. Use this to prevent the player from going to the next dialogue line before the typing effect has revealed the entire text.":"檢查剪切的文本滾動是否已完成。 用它來防止玩家在輸入效果顯示整個文本之前前往下一個對話線。","P2P":"P2P","Event triggered by peer":"對等點觸發的事件","Triggers once when a connected client sends the event":"當一個連接的客戶端發送事件時觸發一次","Event _PARAM0_ received from other client (data loss: _PARAM1_)":"從其他客戶端收到事件 _PARAM0_ (資料遺失: _PARAM1_)","Event name":"事件名稱","Data loss allowed?":"允許遺失資料?","Is P2P ready":"P2P 已準備好","True if the peer-to-peer extension initialized and is ready to use.":"如果對等點擴展初始化并準備使用,則為真。","Is P2P ready?":"P2P準備好了嗎?","An error occurred":"發生錯誤","Triggers once when an error occurs. Use P2P::GetLastError() expression to get the content of the error if you want to analyse it or display it to the user.":"發生錯誤時觸發一次。 使用 P2P::GetLastError() 表達式來獲取錯誤的內容,如果您想要分析它或向用戶顯示它。","P2P error occurred":"發生P2P錯誤","Peer disconnected":"節點斷開連接","Triggers once when a peer disconnects.":"當對等點斷開連接時觸發一次。","P2P peer disconnected":"P2P 對等點斷開連接","Peer Connected":"對等點已連接","Triggers once when a remote peer initiates a connection.":"當遠程對方啟動連接時觸發一次。","P2P peer connected":"已連接 P2P 節點","Connect to another client":"連接到另一個客戶端","Connects the current client to another client using its id.":"使用其ID連接當前客戶端到另一個客戶端。","Connect to P2P client _PARAM0_":"連接到 P2P 客戶端 _PARAM0_","ID of the other client":"其他客戶端的 ID","Connect to a broker server":"連接到代理服務器","Connects the extension to a broker server.":"將擴展連接到代理服務器。","Connect to the broker server at http://_PARAM0_:_PARAM1_/":"連接到代理服務器:http://_PARAM0_:_PARAM1_/","Host":"主機","Port":"端口","Path":"路徑","SSl enabled?":"啟用SSL?","Use a custom ICE server":"使用自定義的 ICE 服務器","Disables the default ICE (STUN or TURN) servers list and use one of your own. Note that it is recommended to add at least 1 self-hosted STUN and TURN server for games that are not over LAN but over the internet. This action can be used multiple times to add multiple servers. This action needs to be called BEFORE connecting to the broker server.":"禁用默認ICE(STUN or TURN)服務器列表,并使用您自己的服務器。請注意,對于不是通過LAN而是通過internet的遊戲,建議至少添加一個自托管的STUN和TURN服務器。此操作可多次用于添加多個服務器。在連接到代理服務器之前,需要調用此操作。","Use ICE server _PARAM0_ (username: _PARAM1_, password: _PARAM2_)":"使用 ICE 服務器 _PARAM0_ (用戶名: _PARAM1_, 密碼: _PARAM2_)","URL to the ICE server":"ICE 服務器的 URL","(Optional) Username":"(可選) 用戶名","(Optional) Password":"(可選) 密碼","Disable IP address sharing":"禁用 IP 地址共享","Disables the sharing of IP addresses with the other peers. This action needs to be called BEFORE connecting to the broker server.":"禁止與其他對等方共享 IP 地址。需要在連接到代理服務器之前調用此操作。","Disable IP sharing: _PARAM0_":"禁用IP共享:_PARAM0_","Disable sharing of IP addresses":"禁用 IP 地址共享","Connect to the default broker server":"連接到默認代理服務器","Connects to the default broker server.":"連接到默認代理服務器。","Override the client ID":"覆蓋客戶端 ID","Overrides the client ID of the current game instance with a specified ID. Must be called BEFORE connecting to a broker.":"使用特定 ID 覆蓋遊戲實例的客戶端 ID。必須在連接至代理前調用。","Override the client ID with _PARAM0_":"以 _PARAM0_ 覆蓋客戶端 ID","ID":"ID","Trigger event on all connected clients":"觸發所有已連接客戶端的事件","Triggers an event on all connected clients":"在所有已連接的客戶端觸發事件","Trigger event _PARAM0_ on all connected clients (extra data: _PARAM1_)":"在所有已連接客戶端上觸發事件 _PARAM0_ (額外資料: _PARAM1_)","Extra data (optional)":"額外資料(可選)","Trigger event on a specific client":"對特定客戶端觸發事件","Triggers an event on a specific connected client":"在特定連接的客戶端觸發事件","Trigger event _PARAM1_ on client _PARAM0_ (extra data: _PARAM2_)":"在客戶端 _PARAM0_ 觸發事件 _PARAM1_ (額外資料: _PARAM2_)","Trigger event on all connected clients (variable)":"觸發所有已連接客戶端的事件(變量)","Variable containing the extra data":"包含額外資料的變量","Trigger event on a specific client (variable)":"觸發特定客戶端的事件(變量)","Get event data (variable)":"獲取事件資料(變量)","Store the data of the specified event in a variable. Check in the conditions that the event was received using the \"Event received\" condition.":"將指定事件的資料存儲在一個變量中。請檢查事件收到的條件使用\"事件收到\"。","Overwrite _PARAM1_ with variable sent with last trigger of _PARAM0_":"以 _PARAM0_ 最后一次觸發的變量覆蓋_PARAM1_","Variable where to store the received data":"存儲收到資料的變量","Disconnect from a peer":"斷開與同伴的連接","Disconnects this client from another client.":"斷開此客戶端與其他客戶端的連接。","Disconnect from client _PARAM0_":"從客戶端 _PARAM0_ 斷開連接","Disconnect from all peers":"斷開與所有同伴的連接","Disconnects this client from all other clients.":"斷開此客戶端與所有其他客戶端的連接。","Disconnect from all clients":"斷開所有客戶端的連接","Disconnect from broker":"斷開與代理的連接","Disconnects the client from the broker server.":"斷開客戶端與代理服務器的連接。","Disconnect the client from the broker":"斷開客戶端與代理的連接","Disconnect from all":"斷開所有連接","Disconnects the client from the broker server and all other clients.":"斷開客戶端與代理服務器和所有其他客戶端的連接。","Disconnect the client from the broker and other clients":"斷開客戶端與代理和其他客戶端的連接","Get event data":"獲取事件資料","Returns the data received when the specified event was last triggered":"返回指定事件最后一次觸發時收到的資料","Get event sender":"獲取事件發送者","Returns the id of the peer that triggered the event":"返回觸發事件的對等方的ID","Get client ID":"獲取客戶端 ID","Gets the client ID of the current game instance":"獲取當前遊戲實例的客戶端 ID","Get last error":"得到最后一個錯誤","Gets the description of the last P2P error":"獲取最后一個 P2P 錯誤的描述","Get last disconnected peer":"獲取最后一個斷開的對等點","Gets the ID of the latest peer that has disconnected.":"獲取已斷開連接的最新對等點的 ID。","Get ID of the connected peer":"獲取已連接對等點的 ID","Gets the ID of the newly connected peer.":"獲取新連接的對等點的 ID。","Steamworks (Steam) (experimental)":"Steamworks (Steam) (實驗性)","Adds integrations for Steam's Steamworks game development SDK.":"為 Steam 的 Steamworks 遊戲開發 SDK 添加集成。","Steam App ID":"Steam 應用程序 ID","Require Steam to launch the game":"要求Steam啟動遊戲","Claim achievement":"聲稱成就","Marks a Steam achievement as obtained. Steam will pop-up a notification with the achievement's data defined on the Steamworks partner website.":"將 Steam 成就標記為已獲得。Steam 將彈出一條通知,其中包含 Steamworks 合作伙伴網站上定義的成就資料。","Claim steam achievement _PARAM0_":"領取 Steam 成就 _PARAM0_","Achievement ID":"成就 ID","Unclaim achievement":"撤銷成就","Removes a player's Steam achievement.":"刪除玩家的 Steam 成就。","Unclaim Steam achievement _PARAM0_":"取消 Steam 成就 _PARAM0_","Has achievement":"有成就","Checks if a player owns one of this game's Steam achievement.":"檢查玩家是否擁有這個遊戲的 Steam 成就之一。","Player has previously claimed the Steam achievement _PARAM0_":"玩家先前已經認領過 Steam 成就 _PARAM0_","Steam ID":"Steam ID","The player's unique Steam ID number. Note that it is too big a number to load correctly as a traditional number (\"floating point number\"), and must be used as a string.":"玩家的唯一 Steam ID 號。請注意,該數字太大,無法作為傳統數字(“浮點數”)正確加載,并且必須用作字符串。","The player's registered name on Steam.":"玩家在 Steam 上的注冊名稱。","Country code":"國家代碼","The player's country represented as its two-letter code.":"玩家所在的國家/地區用兩個字母的代碼表示。","Steam Level":"Steam 等級","Obtains the player's Steam level":"獲得玩家 Steam 等級","Steam rich presence":"Steam 豐富存在","Changes an attribute of Steam's rich presence. Allows other player to see exactly what the player's currently doing in the game.":"改變了 Steam 豐富狀態的一個屬性。允許其他玩家準確地看到該玩家當前在遊戲中正在做什么。","Set steam rich presence attribute _PARAM0_ to _PARAM1_":"設定蒸汽豐富狀態屬性 _PARAM0_ 到 _PARAM1_","Rich presence":"豐富狀態","Is Steamworks Loaded":"Steamworks 是否已加載","Checks whether the Steamworks SDK could be properly loaded. If steam is not installed, the game is not running on PC, or for any other reason Steamworks features will not be able to function, this function will trigger allowing you to disable functionality that relies on Steamworks.":"檢查Steamworks SDK是否可以正確加載。如果未安裝 steam,遊戲未在 PC 上運行,或者由于任何其他原因 Steamworks 功能將無法運行,則此功能將觸發,允許您禁用依賴于 Steamworks 的功能。","Steamworks is properly loaded":"Steamworks 已正確加載","Utilities":"實用程序","Steam AppID":"Steam 應用程序 ID","Obtains the game's Steam app ID, as declared in the games properties.":"獲取遊戲的 Steam 應用程序 ID,如遊戲屬性中聲明的那樣。","Current time (from the Steam servers)":"當前時間 (來自Steam服務器)","Obtains the real current time from the Steam servers, which cannot be faked by changing the system time.":"從 Steam 服務器獲取當前的真實時間,無法通過更改系統時間來偽造。","Is on Steam Deck":"在 Steam Deck 上","Checks whether the game is currently running on a Steam Deck or not.":"檢查遊戲當前是否正在 Steam Deck 上運行。","Game is running on a Steam Deck":"遊戲正在 Steam Deck 上運行","Create a lobby":"創建一個大廳","Creates a new steam lobby owned by the player, for other players to join.":"創建一個由玩家擁有的新蒸汽大廳,供其他玩家加入。","Create a lobby visible to _PARAM0_ with max. _PARAM1_ players (store results in _PARAM2_)":"創建一個對 _PARAM0_ 可見的大廳,最多 _PARAM1_ 玩家 (將結果存儲在 _PARAM2_ 中)","Matchmaking":"匹配","Get a list of lobbies":"獲取大廳列表","Fills an array variable with a list of lobbies for the player to join.":"用供玩家要加入的大廳列表填充數組變量。","Fill _PARAM0_ with a list of lobbies":"用大廳列表填充 _PARAM0_","Join a lobby (by ID)":"加入一個大廳(通過 ID)","Join a Steam lobby, using its lobby ID.":"使用其大廳 ID 加入 Steam 大廳。","Join lobby _PARAM0_ (store result in _PARAM1_)":"加入大廳 _PARAM0_ (將結果存儲在 _PARAM1_ 中)","Leave current lobby":"離開當前大廳","Marks the player as having left the current lobby.":"將玩家標記為已離開當前大廳。","Leave the current lobby":"離開當前大廳","Matchmaking ❯ Current lobby":"匹配 ❯ 當前大廳","Open invite dialogue":"打開邀請對話","Opens the steam invitation dialogue to let the player invite their Steam friends to the current lobby. Only works if the player is currently in a lobby.":"打開 Steam 邀請對話框,讓玩家邀請他們的 Steam 好友到當前大廳。僅當玩家當前位于大廳時才有效。","Open lobby invitation dialogue":"打開大廳邀請對話","Set a lobby attribute":"設定大廳屬性","Sets an attribute of the current lobby. Attributes are readable to anyone that can see the lobby. They can contain public information about the lobby like a description, or for example a P2P ID for knowing where to connect to join this lobby.":"設定當前大廳的屬性。任何可以看到大廳的人都可以讀取屬性。它們可以包含有關大廳的公共信息,例如描述,或者例如用于了解從哪里連接以加入該大廳的 P2P ID。","Set current lobby attribute _PARAM0_ to _PARAM1_ (store result in _PARAM2_)":"將當前大廳屬性 _PARAM0_ 設定為 _PARAM1_ (將結果存儲在 _PARAM2_ 中)","Set the lobby joinability":"設定大廳可連接性","Sets whether other users can join the current lobby or not.":"設定其他用戶是否可以加入當前大廳。","Make current lobby joinable: _PARAM0_ (store result in _PARAM1_)":"使當前大廳可加入: _PARAM0_ (將結果存儲在 _PARAM1_ 中)","Get the lobby's members":"獲取大廳的成員","Gets the Steam ID of all players in the current lobby.":"獲取當前大廳中所有玩家的 Steam ID。","Store the array of all players in _PARAM0_":"將所有玩家的數組存儲在 _PARAM0_ 中","Get a lobby's members":"獲取大廳的成員","Gets the Steam ID of all players in a lobby.":"獲取大廳中所有玩家的 Steam ID。","Store the array of all players of lobby _PARAM0_ in _PARAM1_":"將大廳 _PARAM0_ 的所有玩家的數組存儲在 _PARAM1_ 中","Current lobby's ID":"當前大廳的 ID","The ID of the current lobby, useful for letting other players join it.":"當前大廳的 ID,用于讓其他玩家加入它。","Attribute of the lobby":"大廳的屬性","Obtains the value of one of the current lobby's attributes.":"獲取當前大廳屬性之一的值。","Member count of the lobby":"大廳的成員數","Obtains the current lobby's member count.":"獲取當前大廳的成員數。","Member limit of the lobby":"大廳的成員限制","Obtains the current lobby's maximum member limit.":"獲得當前大廳的最大成員限制。","Owner of the lobby":"大廳的主人","Obtains the Steam ID of the user that owns the current lobby.":"獲取擁有當前大廳的用戶的 Steam ID。","Attribute of a lobby":"大廳的屬性","Obtains the value of one of a lobby's attributes.":"獲取大廳屬性之一的值。","Member count of a lobby":"大廳成員數量","Obtains a lobby's member count.":"獲取大廳的成員數量。","Member limit of a lobby":"大廳的成員限制","Obtains a lobby's maximum member limit.":"獲取大廳的最大成員限制。","Owner of a lobby":"大廳的主人","Obtains the Steam ID of the user that owns a lobby.":"獲取擁有大廳的用戶的 Steam ID。","Player owns an application":"玩家擁有一個應用程序","Checks if the current user owns an application on Steam.":"檢查當前用戶是否擁有 Steam 上的應用程序。","App _PARAM0_ owned on Steam":"Steam 上擁有的應用程序 _PARAM0_","Steam Apps":"Steam 應用程序","Player installed an application":"玩家安裝了應用程序","Checks if the current user has a Steam application currently installed.":"檢查當前用戶當前是否安裝了 Steam 應用程序。","App _PARAM0_ installed from Steam":"從 Steam 安裝的應用程序 _PARAM0_","Player installed DLC":"玩家安裝的 DLC","Checks if the current user has installed a piece of DLC.":"檢查當前用戶是否安裝了 DLC。","DLC _PARAM0_ installed from Steam":"從 Steam 安裝 DLC _PARAM0_","Get installed app path":"獲取已安裝的應用程序路徑","Gets the path to an installed Steam application.":"獲取已安裝的 Steam 應用程序的路徑。","Player has a VAC ban":"玩家已被 VAC 封禁","Checks if the current user has a VAC ban on their account.":"檢查當前用戶的帳戶是否受到 VAC 禁令。","Player cannot be exposed to violence":"玩家不能遭受暴力","Checks if the current user may only be exposed to low violence, due to e.g. their age and content restrictions in their country.":"檢查當前用戶是否可能僅因年齡和所在國家/地區的內容限制而遭受低度暴力。","Player bought the game":"玩家購買了遊戲","Checks if the current user actually bought & owns the game. If the \"Require Steam\" checkbox has been checked in the game properties, this will always be true as Steam will not allow to launch the game if it is not owned. Can be used to display an anti-piracy message instead of straight up blocking the launch of the game.":"檢查當前用戶是否確實購買并擁有該遊戲。如果在遊戲屬性中選中了“需要 Steam”復選框,則始終如此,因為如果遊戲不被擁有,Steam 將不允許啟動該遊戲。可用于顯示反盜版消息,而不是直接阻止遊戲的啟動。","Game language":"遊戲語言","Gets the language the user set in the Steam game properties.":"獲取用戶在 Steam 遊戲屬性中設定的語言。","Current beta name":"當前測試版名稱","Gets the name of the beta the player enrolled to in the Steam game properties.":"獲取玩家在 Steam 遊戲屬性中注冊的測試版名稱。","Current app build ID":"當前應用程序構建 ID","Gets the ID of the current app build.":"獲取當前應用程序構建的 ID。","Digital action activated":"數字動作已激活","Triggers when a digital action (a button that is either pressed or not) of a Steam Input controller has been triggered.":"當 Steam 輸入控制器的數字動作 (按下或未按下的按鈕) 被觸發時觸發。","Digital action _PARAM1_ of controller _PARAM0_ has been activated":"控制器 _PARAM0_ 的數字動作 _PARAM1_ 已激活","Activate an action set":"激活動作集","Activates a Steam Input action set of a Steam Input controller.":"激活 Steam 輸入控制器的 Steam 輸入動作集。","Activate action set _PARAM1_ of controller _PARAM0_":"激活控制器 _PARAM0_ 的動作集 _PARAM1_","Controller count":"控制器計數","The amount of connected Steam Input controllers.":"已連接的 Steam 輸入控制器的數量。","Analog X-Action vector":"模擬X-動作向量","The action vector of a Steam Input analog joystick on the X-axis, from 1 (all right) to -1 (all left).":"X 軸上 Steam 輸入模擬操縱桿的動作向量,從 1 (全部右側) 到 -1 (全部左側)。","Analog Y-Action vector":"模擬Y-動作向量","The action vector of a Steam Input analog joystick on the Y-axis, from 1 (all up) to -1 (all down).":"Y 軸上 Steam 輸入模擬操縱桿的動作向量,從 1 (全部向上) 到 -1 (全部向下)。","Is Steam Cloud enabled?":"Steam 云是否已啟用?","Checks whether steam cloud has been enabled or not for this application.":"檢查該應用程序是否已啟用 Steam 云。","Steam Cloud is enabled":"Steam 云已啟用","Cloud Save":"云保存","File exists":"文件已存在","Checks if a file exists on Steam Cloud.":"檢查 Steam 云上是否存在文件。","File _PARAM0_ exists on Steam Cloud":"文件 _PARAM0_ 存在于 Steam 云上","Write a file":"寫一個文件","Writes a file onto the Steam Cloud.":"將文件寫入 Steam 云。","Write _PARAM1_ into the file _PARAM0_ on Steam Cloud (store result in _PARAM2_)":"將 _PARAM1_ 寫入 Steam 云上的文件 _PARAM0_ (將結果存儲在 _PARAM2_ 中)","Deletes a file from the Steam Cloud.":"從 Steam 云中刪除文件。","Delete file _PARAM0_ from Steam Cloud (store result in _PARAM1_)":"從 Steam 云刪除文件 _PARAM0_ (將結果存儲在 _PARAM1_ 中)","Read a file":"讀取文件","Reads a file from Steam Cloud and returns its contents.":"從 Steam 云讀取文件并返回其內容。","Create a Workshop item":"創建創意工坊項目","Creates an item owned by the current player on the Steam Workshop. This only assignes an ID to an item for the user - use the action \"Update workshop item\" to set the item data and upload the workshop file.":"在 Steam 創意工坊上創建當前玩家擁有的物品。這只會為用戶的項目分配一個 ID - 使用“更新創意工坊項目”操作來設定項目資料并上傳創意工坊文件。","Create a Workshop item and store its ID in _PARAM0_":"創建一個創意工坊項目并將其 ID 存儲在 _PARAM0_ 中","Workshop":"創意工坊","Update a Workshop item":"更新創意工坊項目","Releases an update to a Workshop item owned by the player. If you leave a field empty, it will be kept unmodified as it was before the update.":"發布玩家擁有的創意工坊項目的更新。如果您將某個字段留空,它將保持更新前的狀態不變。","Update the Workshop item _PARAM0_ with itemId title description changeNote previewPath contentPath tags visibility":"使用 itemId 標題描述更改創意工坊項目 _PARAM0_ 更改注釋預覽路徑內容路徑標簽可見性","Workshop Item ID":"創意工坊項目 ID","Title":"標題","Changelog":"更新日志","Path to the preview image file":"預覽圖像文件的路徑","Path to the file with the item's file":"包含項目文件的文件路徑","Tags":"標簽","Subscribe to a Workshop item":"訂閱創意工坊項目","Makes the player subscribe to a workshop item. This will cause it to be downloaded and installed ASAP.":"使玩家訂閱創意工坊項目。這將導致它被盡快下載并安裝。","Subscribe to Workshop item _PARAM0_ (store result in _PARAM1_)":"訂閱創意工坊項目 _PARAM0_ (將結果存儲在 _PARAM1_ 中)","Unsubscribe to a Workshop item":"取消訂閱創意工坊項目","Makes the player unsubscribe to a workshop item. This will cause it to removed after quitting the game.":"使玩家取消訂閱創意工坊項目。這將導致它在退出遊戲后被刪除。","Unsubscribe to Workshop item _PARAM0_ (store result in _PARAM1_)":"取消訂閱創意工坊項目 _PARAM0_ (將結果存儲在 _PARAM1_ 中)","Download a Workshop item":"下載創意工坊項目","Initiates the download of a Workshop item now.":"立即開始下載創意工坊項目。","Start downloading workshop item _PARAM0_ now, pause other downloads: _PARAM1_":"立即開始下載創意工坊項目 _PARAM0_ ,暫停其他下載: _PARAM1_","Check workshop item state":"檢查創意工坊項目狀態","Check whether a state flag is set for a Workshop item.":"檢查是否為創意工坊項目設定了狀態標志。","Flag _PARAM1_ is set on Workshop item _PARAM0_":"創意工坊項目 _PARAM0_ 上設定了標志 _PARAM1_","Workshop item installation location":"創意工坊項目安裝位置","The file path to the contents file of an installed workshop item.":"已安裝創意工坊項目的內容文件的文件路徑。","Workshop item size":"創意工坊項目大小","The size on disk taken by the contents file of an installed workshop item.":"已安裝的創意工坊項目的內容文件在磁盤上占用的大小。","Workshop item installation time":"創意工坊項目安裝時間","The timestamp of the last time the contents file of an installed workshop item was updated.":"上次更新已安裝創意工坊項目的內容文件的時間戳。","Workshop item download progress":"創意工坊項目下載進度","The amount of data that has been downloaded by Steam for a currrently downloading item so far.":"目前為止 Steam 已下載的當前下載項目的資料量。","Workshop ❯ Download":"創意工坊 ❯ 下載","Workshop item download total":"創意工坊項目下載總數","The amount of data that needs to be downloaded in total by Steam for a currrently downloading item.":"對于當前下載的項目,Steam 總共需要下載的資料量。","BBCode Text Object":"BBCode 文本物件","BBCode text":"BBCode 文本","Base color":"基本顏色","Base size":"基本大小","Base alignment":" v","Visible on start":"從開始時可見","BBText":"BBText","Formatted text allowing to mix styles using BBCode markup.":"格式化的文本允許使用 BBCode 標記混合樣式。","Compare the value of the BBCode text.":"比較BBCode文本的值。","the BBCode text":"BBCode 文本","Set BBCode text":"設定 BBCode 文本","Get BBCode text":"獲取 BBCode 文本","Color (R;G;B)":"顏色 (R;G;B)","Set base color":"設定基本顏色","Set base color of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的基本顏色設定為 _PARAM1_","Compare the value of the base opacity of the text.":"比較文本基礎不透明度的值。","the base opacity":"基礎不透明度","Set base opacity":"設定基礎不透明度","Get the base opacity":"獲取基礎不透明度","Compare the base font size of the text.":"比較文本的基本字體大小。","the base font size":"基本字體大小","Set base font size":"設定基本字體大小","Get the base font size":"獲取基本字體大小","Font family":"字體系列","Compare the value of font family":"比較字體組的值","the base font family":"基本字體系列","Set font family":"設定字體系列","Get the base font family":"獲取基本字體系列","Check the current text alignment.":"檢查當前文本的對齊方式。","The text alignment of _PARAM0_ is _PARAM1_":"_PARAM0_ 的文本對齊是 _PARAM1_","Change the alignment of the text.":"更改文本的對齊方式。","text alignment":"文本對齊","Get the text alignment":"獲取文本對齊","Compare the width, in pixels, after which the text is wrapped on next line.":"比較寬度(以像素為單位),然后將文本換行到下一行。","Change the width, in pixels, after which the text is wrapped on next line.":"更改寬度(以像素為單位),然后將文本換行到下一行。","Get the wrapping width":"獲取包裝寬度","Screenshot":"屏幕快照","Take screenshot":"截圖至PNG","Take a screenshot of the game, and save it to a png file (supported only when running on Windows/Linux/macOS).":"拍攝遊戲的屏幕截圖并將其保存到 png 文件(僅支持 Windows/Linux/macOS 平臺)。","Take a screenshot and save at _PARAM1_":"截取屏幕并在 _PARAM1_ 保存","AdMob":"AdMob","Allow to display AdMob banners, app open, interstitials, rewarded interstitials and rewarded video ads.":"允許顯示 AdMob 橫幅廣告、應用打開廣告、插頁式廣告、插頁式獎勵廣告和視頻廣告。","AdMob Android App ID":"AdMob 安卓應用 ID","AdMob iOS App ID":"AdMob iOS 應用 ID","Enable test mode":"啟用測試模式","Activate or deactivate the test mode (\"development\" mode).\nWhen activated, tests ads will be served instead of real ones.\n\nIt is important to enable test ads during development so that you can click on them without charging advertisers. If you click on too many ads without being in test mode, you risk your account being flagged for invalid activity.":"激活或停用測試模式 (\"開發\" 模式)。\n激活后,將提供測試廣告而不是實際廣告。\n\n在開發過程中啟用測試廣告非常重要,這樣您就可以在沒有收費廣告商的情況下點擊它們。 如果您點擊過多的廣告而不處于測試模式,您就有可能將您的帳戶標記為無效的活動。","Enable test mode (serving test ads, for development): _PARAM0_":"啟用測試模式(投放測試廣告,以供開發):_PARAM0_","Enable test mode?":"啟用測試模式?","Prevent AdMob auto initialization":"防止 AdMob 自動初始化","Prevent AdMob from initializing automatically. You will need to call \"Initialize AdMob\" action manually.\nThis is useful if you want to control when the consent dialog will be shown (for example, after the user has accepted your game terms).":"防止 AdMob 自動初始化。您需要手動呼叫 \"初始化 AdMob\" 操作。\n如果您希望控制同意對話框顯示的時機(例如,在用戶接受您的遊戲條款後),這會很有用。","Initialize AdMob manually":"手動初始化 AdMob","Initialize AdMob manually. This will trigger the consent dialog if needed, and then load the ads.\nUse this action if you have disabled the auto init and want to control when the consent dialog will be shown.":"手動初始化 AdMob。這將在需要時觸發同意對話框,然後加載廣告。\n如果您已禁用自動初始化並希望控制何時顯示同意對話框,請使用此操作。","Initialize AdMob":"初始化 AdMob","AdMob initializing":"AdMob 正在初始化","Check if AdMob is initializing.":"檢查 AdMob 是否正在初始化。","AdMob is initializing":"AdMob 正在初始化","AdMob initialized":"AdMob 已初始化","Check if AdMob has been initialized.":"檢查 AdMob 是否已初始化。","AdMob has been initialized":"AdMob 已初始化","App open loading":"應用程序打開加載","Check if an app open is currently loading.":"檢查打開的應用程序當前是否正在加載。","App open is loading":"打開的應用程序正在加載","App open ready":"應用程序打開就緒","Check if an app open is ready to be displayed.":"檢查打開的應用程序是否已準備好顯示。","App open is ready":"應用程序打開準備就緒","App open showing":"應用程序打開顯示","Check if there is an app open being displayed.":"檢查是否有打開的應用程序正在顯示。","App open is showing":"應用程序打開顯示","App open errored":"應用程序打開錯誤","Check if there was an error while loading the app open.":"檢查打開應用程序加載時是否有錯誤。","App open had an error":"應用程序打開時出錯","Load app open":"加載應用程序打開","Start loading an app open (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test app open will be displayed.":"開始加載一個打開的應用程序(當加載完成時可以自動顯示)。如果設定了測試模式,將顯示一個打開的測試應用程序。","Load app open with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (landscape: _PARAM2_, display automatically when loaded: _PARAM3_)":"加載應用打開,Android 廣告單元 ID:_PARAM0_,iOS 廣告單元 ID:_PARAM1_ (橫向:_PARAM2_,加載時自動顯示:_PARAM3_ )","Android app open ID":"Android 應用程序打開 ID","iOS app open ID":"iOS 應用程序打開 ID","Display in landscape? (portrait otherwise)":"橫向顯示?(否則為縱向)","Displayed automatically when loading is finished?":"加載完成時自動顯示?","Show app open":"顯示應用程序已打開","Show the app open that was loaded. Will work only when the app open is fully loaded.":"顯示已加載的打開的應用程序。只有當應用程序打開完全加載時才會工作。","Show the loaded app open":"顯示加載的應用程序打開","Banner showing":"橫幅顯示","Check if there is a banner being displayed.":"檢查是否有橫幅正在顯示。","Banner is showing":"橫幅正在顯示","Banner configured":"橫幅已配置","Check if there is a banner correctly configured ready to be shown.":"檢查是否有正確配置的橫幅可以顯示。","Banner is configured":"橫幅已配置","Banner loaded":"橫幅已加載","Check if there is a banner correctly loaded ready to be shown.":"檢查是否已正確加載準備顯示的橫幅。","Banner is loaded":"橫幅已加載","Banner had an error":"橫幅廣告出現錯誤","Check if there was a error while displaying a banner.":"檢查顯示橫幅廣告時是否有錯誤。","Banner ad had an error":"橫幅廣告出現錯誤","Configure the banner":"配置橫幅","Configure a banner, which can then be displayed.\nIf a banner is already displayed, it will be removed\nIf test mode is set, a test banner will be displayed.\n\nOnce a banner is positioned (at the top or bottom of the game), it can't be moved anymore.":"配置橫幅,然后可以顯示。\n如果橫幅已經顯示,它將被刪除\n如果設定了測試模式,將顯示測試橫幅。\n\n一旦橫幅被定位(在頂部或底部遊戲),它不能再移動了。","Configure the banner with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_, display at top: _PARAM2_":"為橫幅配置Android廣告單元ID:_PARAM0_,iOS廣告單元ID:_PARAM1_,頂部顯示:_PARAM2_","Android banner ID":"安卓橫幅ID","iOS banner ID":"iOS橫幅ID","Display at top? (bottom otherwise)":"置頂顯示?(否則置底)","Show banner":"顯示橫幅廣告","Show the banner that was previously set up.":"顯示先前設定的橫幅。","Hide banner":"隱藏橫幅廣告","Hide the banner. You can show it again with the corresponding action.":"隱藏橫幅。您可以通過相應的操作再次顯示它。","Interstitial loading":"插頁式廣告","Check if an interstitial is currently loading.":"檢查是否正在加載插頁式廣告。","Interstitial is loading":"插頁式廣告正在加載","Interstitial ready":"插頁式廣告就緒","Check if an interstitial is ready to be displayed.":"檢查是否可以顯示插頁式廣告。","Interstitial is ready":"插頁式廣告已準備就緒","Interstitial showing":"插頁式廣告","Check if there is an interstitial being displayed.":"檢查是否顯示插頁式廣告。","Interstitial is showing":"插頁式廣告顯示","Interstitial had an error":"插頁式廣告有錯誤","Check if there was a error while loading the interstitial.":"加載插頁式廣告時檢查是否有錯誤。","Interstitial ad had an error":"插頁式廣告出錯","Load interstitial":"加載插頁式廣告","Start loading an interstitial (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test interstitial will be displayed.":"開始加載插頁式廣告(加載完成后會自動顯示)。\n如果設定了測試模式,則會顯示測試插頁式廣告。","Load interstitial with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"使用Android廣告單元ID:_PARAM0_,iOS廣告單元ID:_PARAM1_加載非頁內廣告(加載后自動顯示:_PARAM2_)","Android interstitial ID":"Android插頁式廣告ID","iOS interstitial ID":"iOS插頁式廣告ID","Show interstitial":"顯示插頁式廣告","Show the interstitial that was loaded. Will work only when the interstitial is fully loaded.":"顯示已加載的非頁內廣告。僅在插頁式廣告滿載后才能使用。","Show the loaded interstitial":"顯示已加載的非頁內廣告","Rewarded interstitial loading":"獎勵插頁式加載","Check if a rewarded interstitial is currently loading.":"檢查獎勵插頁式廣告當前是否正在加載。","Rewarded interstitial is loading":"獎勵插頁式廣告正在加載","Rewarded interstitial ready":"獎勵插頁式廣告就緒","Check if a rewarded interstitial is ready to be displayed.":"檢查獎勵插頁式廣告是否已準備好顯示。","Rewarded interstitial is ready":"獎勵插頁式廣告已準備就緒","Rewarded interstitial showing":"獎勵插頁式展示","Check if there is a rewarded interstitial being displayed.":"檢查是否顯示了獎勵插頁式廣告。","Rewarded interstitial is showing":"獎勵插頁式廣告正在展示","Rewarded interstitial had an error":"獎勵插頁式廣告有錯誤","Check if there was a error while loading the rewarded interstitial.":"檢查加載獎勵插頁式廣告時是否有錯誤。","Rewarded Interstitial had an error":"獎勵插頁式廣告有錯誤","Rewarded Interstitial reward received":"獎勵插頁式廣告收到的獎勵","Check if the reward of the rewarded interstitial was given to the user.\nYou can mark this reward as cleared, so that the condition will be false and you can show later another rewarded interstitial.":"檢查是否已將獎勵插頁式廣告的獎勵提供給用戶。\n您可以將此獎勵標記為已清除,這樣條件將為 false,稍后您可以顯示另一個獎勵插頁式廣告。","User got the reward of the rewarded interstitial (and clear this reward: _PARAM0_)":"用戶獲得了插屏獎勵的獎勵 (并清除此獎勵:_PARAM0_)","Clear the reward (needed to show another rewarded interstitial)":"清除獎勵 (需要顯示另一個獎勵插頁)","Load rewarded interstitial":"加載獎勵插頁式廣告","Start loading a rewarded interstitial (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test rewarded interstitial will be displayed.\nThis is similar to a rewarded video, but can be displayed at any time, and the user can close it.":"開始加載獎勵插屏 (加載完成后可以自動顯示)。\n如果設定了測試模式,將顯示測試獎勵插屏。\n這類似于獎勵視頻,但可以隨時顯示,并且用戶可以關閉它。","Load rewarded interstitial with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"使用 Android 廣告單元 ID:_PARAM0_、iOS 廣告單元 ID:_PARAM1_ 加載插屏獎勵 (加載時自動顯示:_PARAM2_)","Android rewarded interstitial ID":"Android 獎勵插頁式 ID","Show rewarded interstitial":"顯示獎勵插頁式廣告","Show the rewarded interstitial that was loaded. Will work only when the rewarded interstitial is fully loaded.":"顯示已加載的插頁式獎勵。僅當獎勵插頁式廣告已滿載時才會工作。","Show the loaded rewarded interstitial":"顯示已加載的獎勵插頁式廣告","Mark the reward of the rewarded interstitial as claimed":"將獎勵插頁的獎勵標記為已領取","Mark the rewarded interstitial reward as claimed. Useful if you used the condition to check if the reward was given to the user without clearing the reward.":"將獎勵的插頁式廣告獎勵標記為已聲明。如果您使用條件檢查獎勵是否已提供給用戶而不清除獎勵,則很有用。","Rewarded video loading":"獎勵視頻加載","Check if a rewarded video is currently loading.":"檢查獎勵視頻當前是否正在加載。","Rewarded video is loading":"獎勵視頻正在加載","Rewarded video ready":"獎勵視頻準備就緒","Check if a rewarded video is ready to be displayed.":"檢查獎勵視頻是否已準備好顯示。","Rewarded video is ready":"獎勵視頻已準備就緒","Rewarded video showing":"獎勵視頻展示","Check if there is a rewarded video being displayed.":"檢查是否有獎勵視頻正在顯示。","Rewarded video is showing":"獎勵視頻正在顯示","Rewarded video had an error":"獎勵視頻有錯誤","Check if there was a error while loading the rewarded video.":"加載獎勵視頻時,檢查是否有錯誤。","Rewarded video ad had an error":"獎勵視頻廣告出錯","Rewarded Video reward received":"已收到獎勵視頻獎勵","Check if the reward of the rewarded video was given to the user.\nYou can mark this reward as cleared, so that the condition will be false and you can show later another rewarded video.":"檢查獎勵視頻的獎勵是否給了用戶。\n您可以將此獎勵標記為已清除,這樣條件將為 false,稍后您可以顯示另一個獎勵視頻。","User got the reward of the rewarded video (and clear this reward: _PARAM0_)":"用戶獲得獎勵視頻的獎勵 (并清除此獎勵:_PARAM0_)","Clear the reward (needed to show another rewarded video)":"清除獎勵 (需要展示另一個獎勵視頻)","Load rewarded video":"加載獎勵視頻","Start loading a reward video (that can be displayed automatically when the loading is finished).\nIf test mode is set, a test video will be displayed.":"開始加載獎勵視頻(當加載完成時可以自動顯示)。\n如果設定測試模式,將顯示測試視頻。","Load reward video with Android ad unit ID: _PARAM0_, iOS ad unit ID: _PARAM1_ (display automatically when loaded: _PARAM2_)":"加載帶有Android廣告單元ID _PARAM0_,iOS廣告單元ID _PARAM1_的獎勵視頻(加載后自動顯示:_PARAM2_)","Android reward video ID":"Android 獎勵視頻 ID","iOS reward video ID":"iOS 獎勵視頻 ID","Show rewarded video":"顯示獎勵視頻","Show the reward video that was loaded. Will work only when the video is fully loaded.":"顯示已加載的獎勵視頻。僅在視頻完全加載后才能使用。","Show the loaded reward video":"顯示已加載的獎勵視頻","Mark the reward of the rewarded video as claimed":"將獎勵視頻的獎勵標記為已領取","Mark the rewarded video reward as claimed. Useful if you used the condition to check if the reward was given to the user without clearing the reward.":"將獎勵視頻獎勵標記為已領取。如果您使用條件檢查獎勵是否已提供給用戶而不清除獎勵,則很有用。","Tilemap file (Tiled or LDtk)":"Tilemap 文件(Tiled 或 LDtk)","This is the file that was saved or exported from Tiled or LDtk.":"這是從 Tiled 或 LDtk 保存或匯出的文件。","LDtk or Tiled":"LDtk 或 Tiled","Tileset JSON file (optional)":"Tileset JSON 文件(可選)","Optional: specify this if you've saved the tileset in a different file as the Tiled tilemap.":"可選:如果您將 tileset 保存在不同的文件中作為 Tiled tilemap,請指定此項。","Tiled only":"僅 Tiled","Atlas image":"圖集圖像","The Atlas image containing the tileset.":"包含 tileset 的地圖集圖像。","Visible layers":"可見圖層","All layers":"所有圖層","Only the layer with the specified index":"只有指定索引的圖層","Display mode":"顯示模式","Layer index to display":"要顯示的圖層索引","If \"index\" is selected as the display mode, this is the index of the layer to display.":"如果選擇“索引”作為顯示模式,則這是要顯示的圖層的索引。","Level index to display":"要顯示的級別索引","Select which level to render via its index (LDtk)":"選擇要通過其索引呈現的級別(LDtk)","Animation speed scale":"動畫速度比值","Animation FPS":"動畫FPS","External Tilemap (Tiled/LDtk)":"外部 Tilemap (Tiled/LDtk)","Tilemap imported from external editors like LDtk or Tiled.":"從外部編輯器(如 LDtk 或 Tiled)導入的地圖瓦片。","Check the tilemap file (Tiled or LDtk) being used.":"檢查正在使用的 tilemap 文件(Tiled 或 LDtk)。","The tilemap file of _PARAM0_ is _PARAM1_":"_PARAM0_ 的 tilemap 文件是 _PARAM1_","Tile map":"瓦片地圖","Set the Tiled or LDtk file containing the Tilemap data to display. This is usually the main file exported from Tiled/LDtk.":"設定包含要顯示的 Tilemap 資料的 Tiled 或 LDtk 文件。這通常是從 Tiled/LDtk 匯出的主文件。","Set the tilemap file of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的 tilemap 文件設定為 _PARAM1_","Tileset JSON file":"Tileset JSON文件","Check the tileset JSON file being used.":"檢查正在使用的 pileset JSON 文件。","The tileset JSON file of _PARAM0_ is _PARAM1_":"_PARAM0_的tileset JSON文件是_PARAM1_","Set the JSON file with the tileset data (sometimes that is embedded in the Tilemap, so not needed)":"使用tileset資料設定 JSON 文件(有時這些資料嵌入在 Tilemap 中,所以不需要)","Set the tileset JSON file of _PARAM0_ to _PARAM1_":"將_PARAM0_的tileset JSON文件設定為_PARAM1_","Compare the value of the display mode.":"比較顯示模式的值。","The display mode of _PARAM0_ is _PARAM1_":"_PARAM0_ 的顯示模式是 _PARAM1_","Set the display mode":"設定顯示模式","Set the display mode of _PARAM0_ to _PARAM1_":"設定 _PARAM0_ 的顯示模式為 _PARAM1_","Layer index":"圖層索引","Compare the value of the layer index.":"比較圖層索引的值。","the layer index":"圖層索引","Set the layer index of the Tilemap.":"設定Tilemap的圖層索引。","Get the layer index being displayed":"獲取正在顯示的圖層索引","Level index":"級別索引","the level index being displayed.":"正在顯示的級別索引。","the level index":"級別索引","Compare the animation speed scale.":"比較動畫速度比例。","the animation speed scale":"動畫速度比例","Speed scale to compare to (1 by default)":"要比較的速度比例(默認為 1)","Set the animation speed scale of the Tilemap.":"設定 Tilemap 的動畫速度比例。","Speed scale (1 by default)":"速度比例 (1 默認)","Get the Animation speed scale":"獲取動畫速度比例","Animation speed (FPS)":"動畫速度 (FPS)","Compare the animation speed.":"比較動畫速度。","the animation speed (FPS)":"動畫速度 (FPS)","Animation speed to compare to (in frames per second)":"要比較的動畫速度(以每秒幀數為單位)","Set the animation speed of the Tilemap.":"設定 Tilemap 的動畫速度。","Animation speed (in frames per second)":"動畫速度(每秒幀數)","Get the animation speed (in frames per second)":"獲取動畫速度(以每秒幀數為單位)","Columns":"欄","Number of columns.":"欄的數量。","Rows":"行","Number of rows.":"行的數量。","Tile size in pixels.":"瓦片大小(以像素為單位)","Tile ids with hit box":"帶有碰撞箱的瓦片 ID","The list of tile ids with a hit box (separated by commas).":"帶有碰撞箱的瓦片 ID 列表(用逗號分隔)","Grid-based map built from reusable tiles.":"基於網格的地圖,建立在可重用的瓦片之上。","Edit tileset and collisions":"編輯圖塊集和碰撞","Tileset column count":"圖塊集列數","Get the number of columns in the tileset.":"獲取圖塊集中的列數。","Tileset row count":"圖塊集行數","Get the number of rows in the tileset.":"獲取圖塊集中的行數。","Scene X coordinate of tile":"瓦片的場景 X 坐標","Get the scene X position of the center of the tile.":"獲取瓦片中心的場景 X 位置。","Grid X":"網格 X","Grid Y":"網格 Y","Scene Y coordinate of tile":"瓦片的場景 Y 坐標","Get the scene Y position of the center of the tile.":"獲取瓦片中心的場景 Y 位置。","Tile map grid column coordinate":"瓦片地圖網格列坐標","Get the grid column coordinates in the tile map corresponding to the scene coordinates.":"獲取與場景坐標相對應的瓦片地圖中的網格列坐標。","Position X":"位置 X","Position Y":"位置 Y","Tile map grid row coordinate":"瓦片地圖網格行坐標","Get the grid row coordinates in the tile map corresponding to the scene coordinates.":"獲取瓦片地圖中與場景坐標相對應的網格行坐標。","Tile (at position)":"瓦片(在網格上)","the id of the tile at the scene coordinates":"場景坐標處的瓦片 ID","the tile id in _PARAM0_ at scene coordinates _PARAM3_ ; _PARAM4_":"場景坐標 _PARAM3_ 處 _PARAM0_ 中的圖塊 id;_PARAM4_","Flip tile vertically (at position)":"垂直翻轉瓦片(在位置上)","Flip tile vertically at scene coordinates.":"在場景坐標處垂直翻轉瓦片。","Flip tile vertically in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"在場景坐標 _PARAM1_ 處垂直翻轉 _PARAM0_ 中的圖塊;_PARAM2_:_PARAM3_","Flip tile horizontally (at position)":"水平翻轉瓦片(在位置上)","Flip tile horizontally at scene coordinates.":"在場景坐標處水平翻轉瓦片。","Flip tile horizontally in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"在場景坐標 _PARAM1_ 處水平翻轉 _PARAM0_ 中的圖塊;_PARAM2_:_PARAM3_","Remove tile (at position)":"移除瓦片(在位置上)","Remove the tile at the scene coordinates.":"移除場景坐標處的瓦片。","Remove tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_":"移除場景坐標 _PARAM1_ 處的 _PARAM0_ 中的圖塊;_PARAM2_","Tile (on the grid)":"瓦片(在網格上)","the id of the tile at the grid coordinates":"網格坐標處的瓦片 ID","the tile id at grid coordinates _PARAM3_ ; _PARAM4_":"網格坐標 _PARAM3_ 處的圖塊 id; _PARAM4_","Flip tile vertically (on the grid)":"垂直翻轉瓦片(在網格上)","Flip tile vertically at grid coordinates.":"在網格坐標處垂直翻轉瓦片。","Flip tile vertically in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"在網格坐標 _PARAM1_ 處垂直翻轉 _PARAM0_ 中的圖塊;_PARAM2_:_PARAM3_","Flip tile horizontally (on the grid)":"水平翻轉瓦片(在網格上)","Flip tile horizontally at grid coordinates.":"在網格坐標處水平翻轉圖塊。","Flip tile horizontally in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_: _PARAM3_":"在網格坐標 _PARAM1_ 處水平翻轉 _PARAM0_ 中的圖塊;_PARAM2_:_PARAM3_","Remove tile (on the grid)":"移除圖塊(在網格上)","Remove the tile at the grid coordinates.":"移除網格坐標處的圖塊。","Remove tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_":"在網格坐標 _PARAM1_ 處移除 _PARAM0_ 中的圖塊;_PARAM2_","Tile flipped horizontally (at position)":"圖塊在位置上水平翻轉","Check if tile at scene coordinates is flipped horizontally.":"檢查場景坐標處的圖塊是否水平翻轉。","The tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_ is flipped horizontally":"場景坐標 _PARAM1_ 處的 _PARAM0_ 中的圖塊被水平翻轉","Tile flipped vertically (at position)":"圖塊在位置上垂直翻轉","Check if tile at scene coordinates is flipped vertically.":"檢查場景坐標處的圖塊是否垂直翻轉。","The tile in _PARAM0_ at scene coordinates _PARAM1_ ; _PARAM2_ is flipped vertically":"場景坐標 _PARAM1_ 處的 _PARAM0_ 中的圖塊被垂直翻轉","Tile flipped horizontally (on the grid)":"圖塊在網格上水平翻轉","Check if tile at grid coordinates is flipped horizontally.":"檢查網格坐標處的圖塊是否水平翻轉。","The tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_ is flipped horizontally":"在網格坐標 _PARAM1_ 處的 _PARAM0_ 中的圖塊被水平翻轉","Tile flipped vertically (on the grid)":"圖塊在網格上垂直翻轉","Check if tile at grid coordinates is flipped vertically.":"檢查網格坐標處的圖塊是否垂直翻轉。","The tile in _PARAM0_ at grid coordinates _PARAM1_ ; _PARAM2_ is flipped vertically":"在網格坐標 _PARAM1_ 處的 _PARAM0_ 中的圖塊被垂直翻轉","Grid row count":"網格行數","the grid row count in the tile map":"瓦片地圖中的網格行數","the grid row count":"網格行數","Grid column count":"網格列數","the grid column count in the tile map":"瓦片地圖中的網格列數","the grid column count":"網格列數","Tilemap JSON file":"TilemapJSON文件","This is the JSON file that was saved or exported from Tiled. LDtk is not supported yet for collisions.":"這是從 Tiled 保存或匯出的 JSON 文件。LDtk 尚不支持碰撞。","Optional, don't specify it if you've not saved the tileset in a different file.":"可選,如果你沒有將Tileset保存在另一個文件中,則不要指定它。","Class filter":"類過濾器","Only the tiles with the given class (set in Tiled 1.9+) will have hitboxes created.":"只有帶有給定類的瓷磚(在Tiled 1.9+中設定)才會創建HITBOX。","Use all layers":"使用所有圖層","Debug mode":"調試模式","When activated, it displays the hitboxes in the given color.":"激活后,它會以給定的顏色顯示HITBOX。","External Tilemap (Tiled/LDtk) collision mask":"外部 Tilemap(Tiled/LDtk)碰撞遮罩","Invisible object handling collisions with parts of a tilemap.":"不可見物件處理與TileMap的部分碰撞。","Check the Tilemap JSON file being used.":"檢查正在使用的 Tilemap JSON 文件。","The Tilemap JSON file of _PARAM0_ is _PARAM1_":"_PARAM0_ 的 Tilemap JSON 文件是 _PARAM1_","Tile map collision mask":"瓦片地圖碰撞遮罩","Set the JSON file containing the Tilemap data to display. This is usually the JSON file exported from Tiled.":"設定要顯示的包含Tilemap資料的JSON文件。這通常是從Tiled匯出的JSON文件。","Set the Tilemap JSON file of _PARAM0_ to _PARAM1_":"將_PARAM0_的Tilemap JSON文件設定為_PARAM1_","The Tilemap object can be used to display tile-based objects. It's a good way to create maps for RPG, strategy games or create objects by assembling tiles, useful for platformer, retro-looking games, etc... External tilemaps are also supported - but it's recommended to use the built-in, simple Tilemap object for most use cases.":"The Tilemap object can be used to display tile-based objects. It's a good way to create maps for RPG, strategy games or create objects by assembling tiles, useful for platformer, retro-looking games, etc... External tilemaps are also supported - but it's recommended to use the built-in, simple Tilemap object for most use cases.","Tweening":"補間","Smoothly animate object properties over time — such as position, rotation scale, opacity, and more — as well as variables. Ideal for creating fluid transitions and UI animations. While you can use tweens to move objects, other behaviors (like platform, physics, ellipse movement...) or forces are often better suited for dynamic movement. Tween is best used for animating UI elements, static objects that need to move from one point to another, or other values like variables.":"平滑地隨時間動畫對象屬性——例如位置、旋轉比例、不透明度等——以及變數。理想用於創建流暢轉換和用戶界面動畫。雖然可以使用補間來移動對象,但其他行為(如平台、物理學、橢圓運動……)或力量通常更適合動態運動。補間最適合用於動畫用戶界面元素、需要從一點移動到另一點的靜態對象,或其他值如變數。","Ease":"緩解","Tween between 2 values according to an easing function.":"根據緩和函數,在2個值之間補間。","Easing":"緩和","From value":"從值","To value":"到值","Weighting":"權重","From 0 to 1.":"從 0 到 1。","Tween a number in a scene variable":"在場景變量中補間一個數字","Tweens a scene variable's numeric value from one number to another.":"將場景變量的數值從一個數字補間為另一個數字。","Tween variable _PARAM2_ from _PARAM3_ to _PARAM4_ over _PARAM5_ms with easing _PARAM6_ as _PARAM1_":"將補間變量 _PARAM2_ 從 _PARAM3_ 調整為 _PARAM4_ 超過 _PARAM5_ ms,將 _PARAM6_ 緩和為 _PARAM1_","Scene Tweens":"場景補間","Tween Identifier":"補間標識符","The variable to tween":"變量到補間","Final value":"最終值","Duration (in milliseconds)":"持續時間(毫秒)","Tweens a scene variable's numeric value from its current value to a new one.":"將場景變量的數值從其當前值補間到新值。","Tween variable _PARAM2_ to _PARAM3_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"將變量 _PARAM2_ 調整為 _PARAM3_ 超過 _PARAM4_ ms,將 _PARAM5_ 緩和為 _PARAM1_","Tween variable _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"將變量 _PARAM2_ 補間到 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM1_","Tween a scene value":"補間場景值","Tweens a scene value that can be use with the expression Tween::Value.":"補間可與表達式 Tween::Value 一起使用的場景值。","Tween the value from _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"將值從 _PARAM2_ 補間到 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM1_","Exponential interpolation":"指數插值","Tween a layer value":"補間圖層值","Tweens a layer value that can be use with the expression Tween::Value.":"補間可與表達式 Tween::Value 一起使用的圖層值。","Tween the value of _PARAM7_ from _PARAM2_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"將 _PARAM7_ 的值從 _PARAM2_ 補間到 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM1_","Tween the camera position":"補間相機位置","Tweens the camera position from the current one to a new one.":"將相機位置從當前位置調整到新位置。","Tween camera on layer _PARAM4_ to _PARAM2_;_PARAM3_ over _PARAM5_ms with easing _PARAM6_ as _PARAM1_":"將 _PARAM4_ 層上的相機補間到 _PARAM2_;_PARAM3_ 超過 _PARAM5_ms,將 _PARAM6_ 緩和為 _PARAM1_","Target X position":"目標 X 位置","Target Y position":"目標 Y 位置","Tween camera on layer _PARAM4_ to _PARAM2_;_PARAM3_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM1_":"將圖層 _PARAM4_ 上的攝像機補間到 _PARAM2_;_PARAM3_,并在 _PARAM6_ 秒內將 _PARAM5_ 緩動為 _PARAM1_","Tween the camera zoom":"相機補間縮放","Tweens the camera zoom from the current zoom factor to a new one.":"將相機縮放從當前縮放因子調整為新的縮放因子。","Tween the zoom of camera on layer _PARAM3_ to _PARAM2_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"在 _PARAM4_ms 上將 _PARAM3_ 層上的相機縮放補間到 _PARAM2_,并將 _PARAM5_ 緩和為 _PARAM1_","Target zoom":"目標縮放","Tween the zoom of camera on layer _PARAM3_ to _PARAM2_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"將層 _PARAM3_ 上相機的縮放補間到 _PARAM2_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM1_","Tween the camera rotation":"補間相機旋轉","Tweens the camera rotation from the current angle to a new one.":"將相機旋轉從當前角度補間到新角度。","Tween the rotation of camera on layer _PARAM3_ to _PARAM2_ over _PARAM4_ms with easing _PARAM5_ as _PARAM1_":"將 _PARAM3_ 層上的相機旋轉補間到 _PARAM2_ 超過 _PARAM4_ms,并將 _PARAM5_ 緩和為 _PARAM1_","Target rotation (in degrees)":"目標旋轉 (以度為單位)","Tween the rotation of camera on layer _PARAM3_ to _PARAM2_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM1_":"將層 _PARAM3_ 上相機的旋轉補間到 _PARAM2_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM1_","Tween number effect property":"補間數字效果屬性","Tweens a number effect property from its current value to a new one.":"將數字效果屬性從其當前值補間為新值。","Tween the property _PARAM5_ for effect _PARAM4_ of _PARAM3_ to _PARAM2_ with easing _PARAM6_ over _PARAM7_ seconds as _PARAM1_":"將 _PARAM3_ 的效果 _PARAM4_ 的屬性 _PARAM5_ 補間到 _PARAM2_,并在 _PARAM7_ 秒內緩動 _PARAM6_ 作為 _PARAM1_","Effect name":"效果名稱","Property name":"屬性名稱","Tween color effect property":"補間顏色效果屬性","Tweens a color effect property from its current value to a new one.":"將顏色效果屬性從其當前值補間為新值。","Tween the color property _PARAM5_ for effect _PARAM4_ of _PARAM3_ to _PARAM2_ with easing _PARAM6_ over _PARAM7_ seconds as _PARAM1_":"將 _PARAM3_ 的效果 _PARAM4_ 的顏色屬性 _PARAM5_ 補間到 _PARAM2_,并在 _PARAM7_ 秒內緩動 _PARAM6_ 作為 _PARAM1_","To color":"設定顏色","Scene tween exists":"場景補間已存在","Check if the scene tween exists.":"檢查場景補間是否存在。","Scene tween _PARAM1_ exists":"場景補間 _PARAM1_ 存在","Scene tween is playing":"補間正在播放的場景","Check if the scene tween is currently playing.":"檢查場景補間是否正在播放。","Scene tween _PARAM1_ is playing":"場景補間 _PARAM1_ 正在播放","Scene tween finished playing":"場景補間播放完畢","Check if the scene tween has finished playing.":"檢查場景補間是否已完成播放。","Scene tween _PARAM1_ has finished playing":"場景補間 _PARAM1_ 已經完成播放","Pause a scene tween":"暫停一個場景補間","Pause the running scene tween.":"暫停正在運行的場景補間。","Pause the scene tween _PARAM1_":"暫停場景補間_PARAM1_","Stop a scene tween":"停止場景補間!","Stop the running scene tween.":"停止運行場景補間。","Stop the scene tween _PARAM1_ (jump to the end: _PARAM2_)":"停止場景補間_PARAM1_ (跳到結尾: _PARAM2_)","Jump to the end":"跳轉到末端","Resume a scene tween":"恢復場景補間","Resume the scene tween.":"恢復補間的場景。","Resume the scene tween _PARAM1_":"恢復場景補間_PARAM1_","Remove a scene tween":"刪除場景補間","Remove the scene tween. Call this when the tween is no longer needed to free memory.":"刪除場景補間。當不再需要補間以釋放內存時,請調用此選項。","Remove the scene tween _PARAM1_":"刪除場景補間_PARAM1_","Tween progress":"補間進度","the progress of a tween (between 0.0 and 1.0)":"補間的進度 (0.0 到 1.0 之間)","the progress of the scene tween _PARAM1_":"場景補間動畫進度 _PARAM1_","Tween value":"補間值","Return the value of a tween. It is always 0 for tweens with several values.":"返回補間的值。對于具有多個值的補間,它始終為 0。","Tween":"線性","Smoothly animate position, angle, scale and other properties of objects.":"平滑地設定物件的位置、角度、縮放和其他屬性的動畫。","Add object variable tween":"添加物件變量補間","Add a tween animation for an object variable.":"為物件變量添加補間動畫。","Tween the variable _PARAM3_ of _PARAM0_ from _PARAM4_ to _PARAM5_ with easing _PARAM6_ over _PARAM7_ms as _PARAM2_":"將 _PARAM0_ 的變量 _PARAM3_ 從 _PARAM4_ 補間為 _PARAM5_,并在 _PARAM7_ms 內緩和 _PARAM6_ 作為 _PARAM2_","Destroy this object when tween finishes":"補間完成時銷毀該物件","Tween a number in an object variable":"補間物件變量中的數字","Tweens an object variable's numeric value from its current value to a new one.":"將物件變量的數值從其當前值補間到新值。","Tween the variable _PARAM3_ of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"將 _PARAM0_ 的變量 _PARAM3_ 補間為 _PARAM4_ 并在 _PARAM6_ms 內緩和 _PARAM5_ 作為 _PARAM2_","Tween the variable _PARAM3_ of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"將 _PARAM0_ 的變量 _PARAM3_ 補間為 _PARAM4_,并在 _PARAM6_ 秒內緩動 _PARAM5_ 作為 _PARAM2_","Tween an object value":"補間物件值","Tweens an object value that can be use with the object expression Tween::Value.":"補間物件值可與物件表達式 Tween::Value 一起使用。","Tween the value of _PARAM0_ from _PARAM3_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"將 _PARAM0_ 的值從 _PARAM3_ 補間到 _PARAM4_,并在 _PARAM6_ 秒內緩動 _PARAM5_ 作為 _PARAM2_","Tween object position":"補間物件位置","Tweens an object position from its current position to a new one.":"將物件位置從其當前位置補間到新位置。","Tween the position of _PARAM0_ to x: _PARAM3_, y: _PARAM4_ with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"將 _PARAM0_ 的位置補間到 x: _PARAM3_, y: _PARAM4_ 并緩和 _PARAM5_ 超過 _PARAM6_ms 作為 _PARAM2_","To X":"到 X","To Y":"到 Y","Tween the position of _PARAM0_ to x: _PARAM3_, y: _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"將 _PARAM0_ 的位置補間到 x: _PARAM3_、y: _PARAM4_,并在 _PARAM6_ 秒內將 _PARAM5_ 緩動為 _PARAM2_","Tween object X position":"補間物件 X 位置","Tweens an object X position from its current X position to a new one.":"將物件的 X 位置從當前的 X 位置補間到一個新位置。","Tween the X position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的 X 位置補間到 _PARAM3_ 并在 _PARAM5_ms 內緩和 _PARAM4_ 作為 _PARAM2_","Tween the X position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的 X 位置補間到 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween object Z position":"補間物件 Z 位置","Tweens an object Z position (3D objects only) from its current Z position to a new one.":"將物件 Z 位置 (僅限 3D 物件) 從其當前 Z 位置補間到新位置。","Tween the Z position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的 Z 位置調整為 _PARAM3_,將 _PARAM4_ 緩和 _PARAM5_ms 作為 _PARAM2_","To Z":"到 Z","Tween the Z position of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"將 _PARAM0_ 的 Z 位置補間到 _PARAM4_,并在 _PARAM6_ 秒內緩動 _PARAM5_ 作為 _PARAM3_","3D capability":"3D功能","Tween object width":"補間物件寬度","Tweens an object width from its current width to a new one.":"將物件寬度從其當前寬度補間到新寬度。","Tween the width of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的寬度補間為 _PARAM3_,并在 _PARAM5_ms 內緩和 _PARAM4_ 作為 _PARAM2_","To width":"到寬度","Tween the width of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的寬度補間為 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween object height":"補間物件高度","Tweens an object height from its current height to a new one.":"補間物件高度將物件高度從其當前高度補間到新高度。","Tween the height of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的高度補間為 _PARAM3_,并在 _PARAM5_ms 內緩和 _PARAM4_ 作為 _PARAM2_","To height":"到高度","Tween the height of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的高度補間為 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween object depth":"補間物件深度","Tweens an object depth (suitable 3D objects only) from its current depth to a new one.":"將物件深度 (僅限適用的 3D 物件) 從當前深度補間到新深度。","Tween the depth of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的深度調整為 _PARAM3_,將 _PARAM4_ 緩和 _PARAM5_ms 作為 _PARAM2_","To depth":"到深度","Tween the depth of _PARAM0_ to _PARAM4_ with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"將 _PARAM0_ 的深度補間為 _PARAM4_,并在 _PARAM6_ 秒內緩動 _PARAM5_ 作為 _PARAM3_","Tween object Y position":"補間物件 Y 位置","Tweens an object Y position from its current Y position to a new one.":"將物件 Y 位置從其當前 Y 位置補間到新位置。","Tween the Y position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的 Y 位置補間到 _PARAM3_ 并在 _PARAM5_ms 內緩和 _PARAM4_ 作為 _PARAM2_","Tween the Y position of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的 Y 位置補間到 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween object angle":"補間物件角度","Tweens an object angle from its current angle to a new one.":"將物件角度從其當前角度補間到新角度。","Tween the angle of _PARAM0_ to _PARAM3_° with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的角度補間為 _PARAM3_°,將 _PARAM4_ 緩和 _PARAM5_ms 作為 _PARAM2_","To angle (in degrees)":"角度(角度值):","Tween the angle of _PARAM0_ to _PARAM3_° with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的角度調整為 _PARAM3_°,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween object rotation on X axis":"X 軸上的補間物件旋轉","Tweens an object rotation on X axis from its current angle to a new one.":"將 X 軸上的物件旋轉從當前角度補間到新角度。","Tween the rotation on X axis of _PARAM0_ to _PARAM4_° with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"將 _PARAM0_ 的 X 軸旋轉補間到 _PARAM4_°,并在 _PARAM6_ 秒內緩動 _PARAM5_ 作為 _PARAM3_","Tween object rotation on Y axis":"Y 軸上的補間物件旋轉","Tweens an object rotation on Y axis from its current angle to a new one.":"將 Y 軸上的物件旋轉從當前角度補間到新角度。","Tween the rotation on Y axis of _PARAM0_ to _PARAM4_° with easing _PARAM5_ over _PARAM6_ seconds as _PARAM3_":"將 _PARAM0_ 的 Y 軸旋轉補間到 _PARAM4_°,并在 _PARAM6_ 秒內緩動 _PARAM5_ 作為 _PARAM3_","Tween object scale":"補間物件比例","Tweens an object scale from its current scale to a new one (note: the scale can never be less than 0).":"將物件從當前比例補間為新比例(注意:比例永遠不能小于 0)。","Tween the scale of _PARAM0_ to X-scale: _PARAM3_, Y-scale: _PARAM4_ (from center: _PARAM8_) with easing _PARAM5_ over _PARAM6_ms as _PARAM2_":"_PARAM0_到X-scale: _PARAM3_, Y-scale: _PARAM4_ (從中心: _PARAM8_) 放松_PARAM5_ 通過 _PARAM6_ms 放寬為 _PARAM2_","To scale X":"縮放 X","To scale Y":"縮放Y","Scale from center of object":"以物件中心點縮放","Tweens an object scale from its current scale to a new one (note: the scale can never be 0 or less).":"將物件縮放比例從當前比例補間到新比例 (注意:比例永遠不能為 0 或更小)。","Tween the scale of _PARAM0_ to X-scale: _PARAM3_, Y-scale: _PARAM4_ (from center: _PARAM8_) with easing _PARAM5_ over _PARAM6_ seconds as _PARAM2_":"將 _PARAM0_ 的比例調整為 X 比例:_PARAM3_,Y 比例:_PARAM4_ (從中心:_PARAM8_),并在 _PARAM6_ 秒內將 _PARAM5_ 緩動為 _PARAM2_","Tweens an object scale from its current value to a new one (note: the scale can never be 0 or less).":"將物件比例從其當前值補間為新值 (注意:比例永遠不能為 0 或更小)。","Tween the scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的比例調整為 _PARAM3_ (從中心:_PARAM7_),并在 _PARAM5_ 秒內將 _PARAM4_ 緩動為 _PARAM2_","To scale":"按比例","Tween object X-scale":"補間物件 X 比例","Tweens an object X-scale from its current value to a new one (note: the scale can never be less than 0).":"將物件 X 比例從其當前值補間到新值(注意:比例永遠不能小于 0)。","Tween the X-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的 X 比例補間到 _PARAM3_(從中心:_PARAM7_),緩和 _PARAM4_ 超過 _PARAM5_ms 作為 _PARAM2_","Tweens an object X-scale from its current value to a new one (note: the scale can never be 0 or less).":"將物件的 X 縮放比例從其當前值補間為新值 (注意:縮放比例永遠不能為 0 或更小)。","Tween the X-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的 X 比例補間到 _PARAM3_ (從中心:_PARAM7_),并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween object Y-scale":"補間物件 Y 比例","Tweens an object Y-scale from its current value to a new one (note: the scale can never be less than 0).":"將物件 Y 比例從其當前值補間到新值(注意:比例永遠不能小于 0)。","Tween the Y-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的 Y 比例補間到 _PARAM3_(從中心:_PARAM7_),緩和 _PARAM4_ 超過 _PARAM5_ms 作為 _PARAM2_","Tweens an object Y-scale from its current value to a new one (note: the scale can never be 0 or less).":"將物件的 Y 縮放比例從其當前值補間為新值 (注意:縮放比例永遠不能為 0 或更小)。","Tween the Y-scale of _PARAM0_ to _PARAM3_ (from center: _PARAM7_) with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的 Y 比例補間到 _PARAM3_ (從中心:_PARAM7_),并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween text size":"補間文本大小","Tweens the text object character size from its current value to a new one (note: the size can never be less than 1).":"將文本物件字符大小從其當前值補間到新值(注意:大小永遠不能小于 1)。","Tween the character size of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的字符大小補間為 _PARAM3_,將 _PARAM4_ 緩和 _PARAM5_ms 作為 _PARAM2_","To character size":"到字符大小","Tween the character size of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的字符大小補間到 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween object opacity":"補間物件不透明度","Tweens the object opacity from its current value to a new one (note: the value shall stay between 0 and 255).":"將物件不透明度從其當前值補間到新值(注意:該值應保持在0到255之間)。","Tween the opacity of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的不透明度補間為 _PARAM3_,并在 _PARAM5_ms 內緩和 _PARAM4_ 作為 _PARAM2_","To opacity":"設定不透明度","Tween the opacity of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_ and destroy: _PARAM6_":"將 _PARAM0_ 的不透明度調整為 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_ 并銷毀:_PARAM6_","Tween the property _PARAM6_ for effect _PARAM5_ of _PARAM0_ to _PARAM4_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM3_":"將 _PARAM0_ 的效果 _PARAM5_ 的屬性 _PARAM6_ 補間到 _PARAM4_,并在 _PARAM8_ 秒內緩動 _PARAM7_ 作為 _PARAM3_","Effect capability":"效果功能","Tween the color property _PARAM6_ for effect _PARAM5_ of _PARAM0_ to _PARAM4_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM3_":"將 _PARAM0_ 的效果 _PARAM5_ 的顏色屬性 _PARAM6_ 補間到 _PARAM4_,并在 _PARAM8_ 秒內緩動 _PARAM7_ 作為 _PARAM3_","Tween object color":"補間物件顏色","Tweens the object color from its current value to a new one. Format: \"128;200;255\" with values between 0 and 255 for red, green and blue":"將物件顏色從其當前值補間到新值。格式:“128;200;255”,紅色、綠色和藍色的值在 0 到 255 之間","Tween the color of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ms as _PARAM2_":"將 _PARAM0_ 的顏色補間為 _PARAM3_,并在 _PARAM5_ms 內緩和 _PARAM4_ 作為 _PARAM2_","Tween on the Hue/Saturation/Lightness (HSL)":"色調/飽和度/亮度 (HSL)","Useful to have a more natural change between colors.":"在顏色之間有更自然的變化非常有用。","Tween the color of _PARAM0_ to _PARAM3_ with easing _PARAM4_ over _PARAM5_ seconds as _PARAM2_":"將 _PARAM0_ 的顏色補間為 _PARAM3_,并在 _PARAM5_ 秒內緩動 _PARAM4_ 作為 _PARAM2_","Tween object HSL color":"補間物件 HSL 顏色","Tweens the object color using Hue/Saturation/Lightness. Hue is in degrees, Saturation and Lightness are between 0 and 100. Use -1 for Saturation and Lightness to let them unchanged.":"使用色相/飽和度/亮度補間物件顏色。色調以度為單位,飽和度和亮度在 0 到 100 之間。飽和度和亮度使用 -1 讓它們保持不變。","Tween the color of _PARAM0_ using HSL to H: _PARAM3_ (_PARAM4_), S: _PARAM5_, L: _PARAM6_ with easing _PARAM7_ over _PARAM8_ms as _PARAM2_":"使用 HSL 將 _PARAM0_ 的顏色補間為 H:_PARAM3_ (_PARAM4_),S:_PARAM5_,L:_PARAM6_,并在 _PARAM8_ms 上緩和 _PARAM7_ 作為 _PARAM2_","To Hue (in degrees)":"到色相 (以度為單位)","Animate Hue":"動態色調","To Saturation (0 to 100, -1 to ignore)":"至飽和度(0至100, -1 可忽略)","To Lightness (0 to 100, -1 to ignore)":"至亮度(0到100, -1 可忽略)","Tween the color of _PARAM0_ using HSL to H: _PARAM3_ (_PARAM4_), S: _PARAM5_, L: _PARAM6_ with easing _PARAM7_ over _PARAM8_ seconds as _PARAM2_":"使用 HSL 將 _PARAM0_ 的顏色補間為 H: _PARAM3_ (_PARAM4_)、S: _PARAM5_、L: _PARAM6_,并在 _PARAM8_ 秒內將 _PARAM7_ 緩動為 _PARAM2_","Tween exists":"補間已存在","Check if the tween animation exists.":"檢查補間動畫是否存在。","Tween _PARAM2_ on _PARAM0_ exists":"_PARAM0_上的補間_PARAM2_存在","Tween is playing":"Tween正在播放","Check if the tween animation is currently playing.":"檢查當前是否正在播放補間動畫。","Tween _PARAM2_ on _PARAM0_ is playing":"正在播放_PARAM0_上的補間_PARAM2_","Tween finished playing":"補間完成播放","Check if the tween animation has finished playing.":"檢查補間動畫是否已完成播放。","Tween _PARAM2_ on _PARAM0_ has finished playing":"_PARAM0_上的補間_PARAM2_已播放完畢","Pause a tween":"暫停補間","Pause the running tween animation.":"暫停正在運行的補間動畫。","Pause the tween _PARAM2_ on _PARAM0_":"暫停_PARAM0_上的補間_PARAM2_","Stop a tween":"停止補間","Stop the running tween animation.":"停止正在運行的補間動畫。","Stop the tween _PARAM2_ on _PARAM0_":"停止_PARAM0_上的補間_PARAM2_","Jump to end":"跳到最后","Resume a tween":"恢復補間","Resume the tween animation.":"恢復補間動畫。","Resume the tween _PARAM2_ on _PARAM0_":"在_PARAM0_上恢復補間_PARAM2_","Remove a tween":"刪除補間","Remove the tween animation from the object.":"從物件中刪除補間動畫。","Remove the tween _PARAM2_ from _PARAM0_":"從_PARAM0_移除補間_PARAM2_","the progress of the tween _PARAM2_":"補間動畫進度 _PARAM1_","Spine (experimental)":"Spine (實驗性)","Displays a Spine animation.":"顯示 Spine 動畫。","Spine":"脊椎","Display and smoothly animate a 2D object with skeletal animations made with Spine. Use files exported from Spine (json, atlas and image).":"使用 Spine 制作的骨骼動畫顯示 2D 物件并對其進行流暢的動畫處理。使用從 Spine 匯出的文件 (json、atlas 和 image)。","Edit animations":"編輯動畫","Animation mixing duration":"動畫混合持續時間","the duration of the smooth transition between 2 animations (in second)":"兩個動畫之間平滑過渡的持續時間 (以秒為單位)","the animation mixing duration":"動畫混合持續時間","Animations and images":"動畫和圖像","Point attachment X position":"點附著 X 位置","x position of spine point attachment":"spine 點附著的 x 位置","x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 點附著的 x 位置","Attachment name":"附著物名稱","Slot name (use \"\" if names are the same)":"插槽名稱(如果名稱相同請使用\"\")","Point attachment Y position":"點附著 Y 位置","y position of spine point attachment":"spine 點附著的 y 位置","y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"_PARAM2_ 槽的 spine _PARAM1_ 點附著的 y 位置","Point attachment scale world X position":"附著點縮放世界 X 位置","world x position of spine point attachment scale":"脊椎附著點縮放的世界 X 位置","world x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"脊椎 _PARAM1_ 附著點對 _PARAM2_ 槽的世界 X 位置","Point attachment scale local X position":"附著點縮放本地 X 位置","local x position of spine point attachment scale":"脊椎附著點縮放的本地 X 位置","local x position of spine _PARAM1_ point attachment for _PARAM2_ slot":"脊椎 _PARAM1_ 附著點對 _PARAM2_ 槽的本地 X 位置","Point attachment scale world Y position":"附著點縮放世界 Y 位置","world y position of spine point attachment scale":"脊椎附著點縮放的世界 Y 位置","world y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"脊椎 _PARAM1_ 附著點對 _PARAM2_ 槽的世界 Y 位置","Point attachment scale local Y position":"附著點縮放本地 Y 位置","local y position of spine point attachment scale":"脊椎附著點縮放的本地 Y 位置","local y position of spine _PARAM1_ point attachment for _PARAM2_ slot":"脊椎 _PARAM1_ 附著點對 _PARAM2_ 槽的本地 Y 位置","Point attachment world rotation":"附著點世界旋轉","world rotation of spine point attachment":"脊椎附著點的世界旋轉","world rotation of spine _PARAM1_ point attachment for _PARAM2_ slot":"脊椎 _PARAM1_ 附著點對 _PARAM2_ 槽的世界旋轉","Point attachment local rotation":"附著點本地旋轉","local rotation of spine point attachment":"脊椎附著點的本地旋轉","local rotation of spine _PARAM1_ point attachment for _PARAM2_ slot":"脊椎 _PARAM1_ 附著點對 _PARAM2_ 槽的本地旋轉","Get skin name":"獲取皮膚名稱","the skin of the object":"物體的皮膚","the skin":"皮膚","Skin name":"皮膚名稱","Set skin":"設置皮膚","Set the skin of a Spine object.":"設置一個Spine物件的皮膚。","Set the skin of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的皮膚設置為 _PARAM1_","This allows players to join online lobbies and synchronize gameplay across devices without needing to manage servers or networking.\n\nUse the \"Open game lobbies\" action to let players join a game, and use conditions like \"Lobby game has just started\" to begin gameplay. Add the \"Multiplayer object\" behavior to game objects that should be synchronized, and assign or change their ownership using player numbers. Variables and game state (like scenes, scores, or timers) are automatically synced by the host, with options to change ownership or disable sync when needed. Common multiplayer logic —like handling joins/leaves, collisions, and host migration— is supported out-of-the-box for up to 8 players per game.":"這使得玩家可以加入在線大廳,並在無需管理伺服器或網絡的情況下實現跨設備的遊戲同步。\n\n使用「開放遊戲大廳」操作讓玩家加入遊戲,並使用像「大廳遊戲剛開始」的條件來開始遊戲。將「多玩家對象」行為添加到需要同步的遊戲對象中,並使用玩家編號分配或更改它們的擁有權。變數和遊戲狀態(如場景、分數或計時器)由主機自動同步,並在需要時有選項更改擁有權或禁用同步。通用的多玩家邏輯 — 如處理加入/離開、碰撞和主機遷移 — 可以無縫支援每個遊戲最多8名玩家。","Current lobby ID":"當前大廳的 ID","Returns current lobby ID.":"返回當前大廳的 ID。","Lobbies":"大廳","Join a specific lobby by its ID":"透過其 ID 加入特定大廳","Join a specific lobby. The player will join the game instantly if this is possible.":"加入特定大廳。如果可能,玩家將立即加入遊戲。","Join a specific lobby by its ID _PARAM1_":"透過其 ID 加入特定大廳 _PARAM1_","Lobby ID":"大廳 ID","Display loader while joining a lobby.":"加入大廳時顯示加載中畫面。","Display game lobbies if unable to join a specific one.":"如果無法加入特定的大廳,則顯示遊戲大廳。","Join the next available lobby":"加入下一個可用的遊戲大廳","Join the next available lobby. The player will join the game instantly if this is possible.":"加入下一個可用的遊戲大廳。如果可能,玩家將立即加入遊戲。","Display loader while searching for a lobby.":"搜索大廳時顯示載入器。","Display game lobbies if no lobby can be joined directly.":"如果不能直接加入任何大廳,則顯示遊戲大廳。","Is searching for a lobby to join":"正在尋找可以加入的遊戲大廳","Is searching for a lobby to join.":"正在尋找可以加入的遊戲大廳。","Quick join failed to join a lobby":"快速加入未能加入大廳","Quick join failed to join a lobby.":"快速加入未能加入大廳。","Quick join action failure reason":"快速加入行動失敗的原因","Returns the reason why the Quick join action failed. It can either be 'FULL' if all lobbies were occupied, 'NOT_ENOUGH_PLAYERS' if the lobby's configuration requires more than 1 player to start the game and no other players were available. It can also take the value 'UNKNOWN'.":"返回快速加入行動失敗的原因。如果所有大廳都滿了,它可以是'FULL';如果大廳的配置需要超過1名玩家才能開始遊戲而且沒有可用的玩家,那麼它可以是'NOT_ENOUGH_PLAYERS'。它也可以取值'UNKNOWN'。","Open Game Lobbies":"打開遊戲大廳","Open the game lobbies window, where players can join lobbies or see the one they are in.":"打開遊戲大廳窗口,玩家可以在其中加入大廳或查看他們所在的大廳。","Open the game lobbies":"打開遊戲大廳","Close Game Lobbies":"關閉遊戲大廳","Close the game lobbies window. Using this action is usually not required because the window is automatically closed when the game of a lobby starts or if the user cancels.":"關閉遊戲大廳窗口。使用此操作通常不是必需的,因為當遊戲開始或用戶取消時,窗口會自動關閉。","Close the game lobbies":"關閉遊戲大廳","Allow players to close the lobbies window":"允許玩家關閉大廳窗口","Allow players to close the lobbies window. Allowed by default.":"允許玩家關閉大廳窗口。默認允許。","Allow players to close the lobbies window: _PARAM1_":"允許玩家關閉大廳窗口: _PARAM1_","Show close button":"顯示關閉按鈕","End Lobby Game":"結束大廳遊戲","End the lobby game. This will trigger the \"Lobby game has just ended\" condition.":"結束大廳遊戲。這將觸發“大廳遊戲剛剛結束”的條件。","End the lobby game":"結束大廳遊戲","Leave Game Lobby":"離開遊戲大廳","Leave the current game lobby. This will trigger the \"Player has left\" condition on the other players, and the \"Lobby game has ended\" condition on the player leaving.":"離開當前遊戲大廳。這將觸發其他玩家的「玩家已離開」條件,以及離開玩家的「大廳遊戲已結束」條件。","Leave the game lobby":"離開遊戲大廳","Send custom message to other players":"向其他玩家發送自定義消息","Send a custom message to other players in the lobby, with an automatic retry system if it hasn't been received. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"向大廳中的其他玩家發送自定義消息,如果未收到消息,將使用自動重試系統。與條件“消息已收到”一起使用,以了解主機何時正確處理消息。","Send message _PARAM0_ to other players with content _PARAM1_":"向其他玩家發送消息 _PARAM0_,內容為 _PARAM1_","Message name":"消息名稱","Message content":"消息內容","Send custom message to other players with a variable":"使用變量向其他玩家發送自定義消息","Send a custom message to other players in the lobby containing a variable, with an automatic retry system if it hasn't been received. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"向大廳中的其他玩家發送包含變量的自定義消息,若未收到則可自動重試。使用條件「消息已收到」來檢查主機是否已正確處理該消息。","Send message _PARAM0_ to other players with variable _PARAM1_":"使用變量 _PARAM1_ 向其他玩家發送消息 _PARAM0_","Get message variable":"獲取消息變量","Store the data of the specified message in a variable. Use with the condition 'Message has been received' to know when the message has been properly processed by the host.":"將指定消息的數據存儲在變量中。與條件『消息已被接收』一起使用,以確保消息已正確處理。","Save message _PARAM0_ data in _PARAM1_":"將消息 _PARAM0_ 數據保存在 _PARAM1_ 中","Lobbies window is open":"大廳窗口已打開","Check if the lobbies window is open.":"檢查大廳窗口是否打開。","Lobby game has just started":"大廳遊戲剛剛開始","Check if the lobby game has just started.":"檢查大廳遊戲是否剛剛開始。","Lobby game has started":"大廳遊戲已開始","Lobby game is running":"大廳遊戲正在運行","Check if the lobby game is running.":"檢查大廳遊戲是否正在運行。","Lobby game has just ended":"大廳遊戲剛剛結束","Check if the lobby game has just ended.":"檢查大廳遊戲是否剛剛結束。","Lobby game has ended":"大廳遊戲已結束","Custom message has been received from another player":"已收到來自另一玩家的自定義消息","Check if a custom message has been received from another player. Will be true only for one frame.":"檢查是否已收到來自另一玩家的自定義消息。僅對一幀有效。","Message _PARAM0_ has been received":"消息 _PARAM0_ 已被接收","Objects synchronization rate":"物件同步速率","objects synchronization rate (between 1 and 60, default is 30 times per second)":"物件同步速率(介於 1 和 60 之間,默認為每秒 30 次)","objects synchronization rate":"物件同步速率","Sync rate":"同步速率","Player is host":"玩家是主機","Check if the player is the host. (Player 1 is the host)":"檢查玩家是否為主機。(玩家1為主機)","Any player has left":"任意玩家已離開","Check if any player has left the lobby game.":"檢查是否有任何玩家離開大廳遊戲。","Player has left":"玩家已離開","Check if the player has left the lobby game.":"檢查玩家是否已離開大廳遊戲。","Player _PARAM0_ has left":"玩家 _PARAM0_ 已離開","Player number":"玩家編號","Player number that just left":"剛剛離開的玩家號碼","Returns the player number of the player that has just left the lobby.":"返回剛剛離開大廳的玩家號碼。","Any player has joined":"任何玩家已加入","Check if any player has joined the lobby.":"檢查是否有玩家已加入大廳。","Player has joined":"玩家已加入","Check if the player has joined the lobby.":"檢查玩家是否已加入大廳。","Player _PARAM0_ has joined":"玩家 _PARAM0_ 已加入","Player number that just joined":"剛剛加入的玩家號碼","Returns the player number of the player that has just joined the lobby.":"返回剛剛加入大廳的玩家號碼。","Host is migrating":"主機正在遷移","Check if the host is migrating, in order to adapt the game state (like pausing the game).":"檢查主機是否正在遷移,以調整遊戲狀態(如暫停遊戲)。","Configure lobby game to end when host leaves":"配置大廳遊戲在主機離開時結束","Configure the lobby game to end when the host leaves. This will trigger the \"Lobby game has just ended\" condition. (Default behavior is to migrate the host)":"配置大廳遊戲以在主機離開時結束。這將觸發「大廳遊戲剛剛結束」的條件。(預設行為是遷移主機)","End lobby game when host leaves":"在主機離開時結束大廳遊戲","Message data":"消息數據","Returns the data received when the specified message was received from another player.":"返回從另一位玩家收到指定消息時接收到的數據。","Message sender":"消息發送者","Returns the player number of the sender of the specified message.":"返回指定消息的發送者的玩家編號。","Number of players in lobby":"大廳中的玩家人數","the number of players in the lobby":"大廳中的玩家數量","Player is connected":"玩家已連線","Check if the specified player is connected to the lobby.":"檢查指定的玩家是否已連線到大廳。","Player _PARAM0_ is connected":"玩家 _PARAM0_ 已連線","The position of the player in the lobby (1, 2, ...)":"玩家在大廳中的位置 (1, 2, ...)","Current player number in lobby":"大廳中當前玩家的編號","the current player number in the lobby (1, 2, ...)":"大廳中當前玩家編號 (1, 2, ...)","the current player number in the lobby":"大廳中當前玩家的編號","Player username in lobby":"大廳中的玩家用戶名","Get the username of the player in the lobby.":"獲取大廳中玩家的用戶名。","Current player username in lobby":"當前玩家在大廳的用戶名","Get the username of the current player in the lobby.":"獲取當前玩家在大廳中的用戶名。","Player ping in lobby":"大廳中玩家的延遲","Get the ping of the player in the lobby.":"獲取大廳中玩家的延遲。","Current player ping in lobby":"當前玩家在大廳中的 Ping","Get the ping of the current player in the lobby.":"獲取當前玩家在大廳中的 Ping。","Player variable ownership":"玩家變量所有權","the player owning the variable":"擁有變量的玩家","the player owning the variable _PARAM1_":"擁有變量 _PARAM1_ 的玩家","Only root variables can change ownership. Arrays and structures children are synchronized with their parent.":"只有根變量可以改變所有權。數組和結構的子項與其父項同步。","Take ownership of variable":"獲取變量的所有權","Take the ownership of the variable. It will then be synchronized to other players, with the current player as the owner.":"獲取變量的所有權。然後它將與其他玩家同步,當前玩家為所有者。","Take ownership of _PARAM1_":"獲取 _PARAM1_ 的所有權","Remove ownership of variable":"移除變量的所有權","Remove the ownership of the variable. It will still be synchronized to other players, but the host owns it.":"刪除變量的所有權。它仍然會與其他玩家同步,但主機擁有它。","Remove ownership of _PARAM1_":"刪除 _PARAM1_ 的所有權","Disable variable synchronization":"禁用變量同步","Disable synchronization of the variable over the network. It will not be sent to other players anymore.":"禁用變量在網絡上的同步。它將不再發送給其他玩家。","Disable synchronization of _PARAM1_":"禁用 _PARAM1_ 的同步","Player owning the object":"擁有該對象的玩家","Who is synchronizing the object to the players. If this is an object controlled by a player, then assign the player number. Otherwise just leave \"Host\" and the host of the game will synchronize the object to the players. (Note: you can change the ownership of the object during the game with corresponding actions).":"誰在將對象與玩家同步。如果這是一個由玩家控制的對象,則分配玩家編號。否則只需保留“主機”,遊戲的主機將對象同步到玩家。 (注意:您可以在遊戲過程中通過相應的操作更改該對象的所有權)。","Action when player disconnects":"玩家斷開鏈接時的動作","Multiplayer object":"多人遊戲對象","Allow the object to be synchronized with other players in the lobby.":"允許該對象與大廳中的其他玩家同步。","Player object ownership":"玩家對象所有權","the player owning the object":"擁有該對象的玩家","the player owning the instance":"擁有實例的玩家","Is object owned by current player":"該對象是否屬於當前玩家","Check if the object is owned by the current player, as a player or the host.":"檢查對象是否屬於當前玩家,無論是作為玩家還是主機。","Object _PARAM0_ is owned by current player":"對象 _PARAM0_ 由當前玩家擁有","Take ownership of object":"獲取該對象的所有權","Take the ownership of the object. It will then be synchronized to other players, with the current player as the owner.":"獲取該對象的所有權。然後它將與其他玩家同步,當前玩家為所有者。","Take ownership of _PARAM0_":"獲取 _PARAM0_ 的所有權","Remove object ownership":"移除對象所有權","Remove the ownership of the object from the player. It will still be synchronized to other players, but the host owns it.":"從玩家身上移除該對象的所有權。它仍會與其他玩家同步,但該對象擁有它的主機。","Remove ownership of _PARAM0_":"移除 _PARAM0_ 的所有權","Enable (or disable) the synchronization of a behavior":"啟用(或禁用)行為的同步","Enable or disable the synchronization of a behavior over the network. If disabled, the behavior's current state will not be sent to other players anymore.":"啟用或禁用網絡上行為的同步。如果禁用,該行為的當前狀態將不再發送給其他玩家。","Enable synchronization of _PARAM2_ for _PARAM0_: _PARAM3_":"為 _PARAM0_: _PARAM3_ 啟用 _PARAM2_ 的同步","Multiplayer behavior":"多玩家行為","Object behavior":"對象行為","Enable synchronization":"啟用同步","Player Authentication":"玩家認證","Allow your game to authenticate players.":"允許您的遊戲對玩家進行身份驗證。","Display authentication banner":"顯示身份驗證橫幅","Display an authentication banner at the top of the game screen, for the player to log in.":"在遊戲畫面頂部顯示認證橫幅,供玩家登錄。","Display an authentication banner":"顯示身份驗證橫幅","Hide authentication banner":"隱藏身份驗證橫幅","Hide the authentication banner from the top of the game screen.":"隱藏遊戲屏幕頂部的身份驗證橫幅。","Hide the authentication banner":"隱藏身份驗證橫幅","Open authentication window":"打開身份驗證窗口","Open an authentication window for the player to log in.":"打開一個驗證窗口供玩家登錄。","Open an authentication window":"打開身份驗證窗口","Authentication window is open":"身份驗證窗口已打開","Check if the authentication window is open.":"檢查身份驗證窗口是否打開。","Log out the player":"注銷玩家","Log out the player.":"注銷玩家。","Get the username of the authenticated player.":"獲取經過身份驗證的玩家的用戶名。","User ID":"用戶 ID","Get the unique user ID of the authenticated player.":"獲取經過身份驗證的玩家的唯一用戶 ID。","Player is authenticated":"玩家已通過身份驗證","Check if the player is authenticated.":"檢查玩家是否已通過身份驗證。","Player has logged in":"玩家已登錄","Check if the player has just logged in.":"檢查玩家是否剛剛登錄。","Debugger Tools":"調試器工具","Allow to interact with the editor debugger from the game (notably: enable 2D debug draw, log a message in the debugger console).":"允許從遊戲中與編輯器調試器互動(特別是:啟用 2D 調試繪圖,在調試器控制台中記錄消息)。","Pause game execution":"暫停遊戲執行","This pauses the game, useful for inspecting the game state through the debugger. Note that events will be still executed until the end before the game is paused.":"暫停遊戲,可以通過調試器檢查遊戲狀態。 請注意,在遊戲暫停之前事件仍將被執行。","Draw collisions hitboxes and points":"繪制碰撞箱和點","This activates the display of rectangles and information on screen showing the objects bounding boxes (blue), the hitboxes (red) and some points of objects.":"這將激活矩形和在屏幕上顯示物體邊界框(藍色)、hitbox(紅色) 和物體的一些點的信息的顯示。","Enable debugging view of bounding boxes/collision masks: _PARAM1_ (include invisible objects: _PARAM2_, point names: _PARAM3_, custom points: _PARAM4_)":"啟用邊界框/碰撞掩碼的調試視圖: _PARAM1_ (包括不可見物件: _PARAM2_, 點名: _PARAM3_, 自定義點: _PARAM4_)","Enable debug draw":"啟用調試繪圖","Show collisions for hidden objects":"顯示隱藏物件的碰撞","Show points names":"顯示點名稱","Show custom points":"顯示自定義點","Log a message to the console":"將消息記錄到控制臺","Logs a message to the debugger's console.":"將一條消息記錄到調試器的控制臺。","Log message _PARAM0_ of type _PARAM1_ to the console in group _PARAM2_":"將類型為 _PARAM1_ 的消息_PARAM0_ 記錄到控制臺_PARAM2_的組中。","Provides an object to display a video on the scene. The recommended file format is MPEG4, with H264 video codec and AAC audio codec, to maximize the support of the video on different platform and browsers.":"提供一個物件以在場景中顯示視頻。推薦的文件格式為 MPEG4,具有 H264 視頻編解碼器和 AAC 音頻編解碼器,以最大限度地支持不同平臺和瀏覽器上的視頻。","Loop the video":"循環視頻","Playback settings":"回放設定","Video volume (0-100)":"視頻音量 (0-100)","Displays a video.":"顯示視頻。","Play a video":"播放視頻","Play a video (recommended file format is MPEG4, with H264 video codec and AAC audio codec).":"播放視頻 (建議的文件格式為 MPEG4, 有H264 視頻編碼和 AAC 音頻編解碼器)。","Play the video of _PARAM0_":"播放 _PARAM0_ 的視頻","Video object":"視頻物件","Pause a video":"暫停視頻","Pause the specified video.":"暫停指定的視頻。","Pause video _PARAM0_":"暫停視頻 _PARAM0_","Loop a video":"循環播放視頻","Loop the specified video.":"循環指定的視頻。","Loop video of _PARAM0_: _PARAM1_":"_PARAM0_循環視頻: _PARAM1_","Activate loop":"激活循環","Mute a video":"靜音視頻","Mute, or unmute, the specified video.":"靜音或取消靜音指定的視頻。","Mute video of _PARAM0_: _PARAM1_":"_PARAM0_視頻無聲: _PARAM1_","Activate mute":"打開聲音","Current time":"當前時間","Set the time of the video":"設定視頻時間","the time":"時間","Position (in seconds)":"位置(秒)","Volume":"音量","Set the volume of the video object.":"設定視頻物件的音量。","the volume":"設定音量","Volume (0-100)":"音量 (0-100)","Get the volume":"獲取音量","Get the volume of a video object, between 0 (muted) and 100 (maximum).":"獲取視頻物件的音量,介于 0 (無聲) 和 100 (最大)。","Is played":"已播放","Check if a video is played.":"檢查該視頻是否已播放","_PARAM0_ is played":"_PARAM0_ 是播放","Is paused":"為暫停時","Check if the video is paused.":"檢測視頻是否已暫停","_PARAM0_ is paused":"_PARAM0_ 已暫停","Is looped":"是循環","Check if the video is looped.":"檢查視頻是否在循環播放","_PARAM0_ is looped":"_PARAM0_ 是循環的","Compare the current volume of a video object.":"比較當前視頻物件的音量。","Volume to compare to (0-100)":"要比較的音量 (0-100)","Is muted":"靜音","Check if a video is muted.":"檢查視頻是否已靜音","_PARAM0_ is muted":"_PARAM0_是靜音的","Get current time":"獲取當前時間","Return the current time of a video object (in seconds).":"返回視頻物件的當前時間(秒)。","Get the duration":"獲取時長","Return the duration of a video object (in seconds).":"返回視頻物件的時長(秒)。","Compare the duration of a video object":"比較視頻物件的持續時間","the duration (in seconds)":"持續時間(秒)","Compare the current time of a video object":"比較視頻物件的當前時間","the current time (in seconds)":"當前時間(秒)","Time to compare to (in seconds)":"比較時間(以秒為單位)","Is ended":"已結束","Check if a video is ended":"檢查視頻是否結束","_PARAM0_ is ended":"_PARAM0_ 已結束","Set opacity":"設定不透明度","Set opacity of the specified video object.":"設定指定視頻物件的不透明度。","Compare the opacity of a video object":"比較視頻物件的不透明度","Get current opacity":"獲取當前不透明度","Return the opacity of a video object":"返回視頻物件的不透明度","Set playback speed":"設定回放速度","Set playback speed of the specified video object, (1 = the default speed, >1 = faster and <1 = slower).":"設定指定視頻物件的播放速度(1= 默認速度, >1 = 更快, <1 = 更慢).","the playback speed":"播放速度","Playback speed (1 by default)":"播放速度 (1 默認)","Playback speed ":"回放速度 ","Compare the playback speed of a video object":"比較視頻物件的播放速度","Get current playback speed":"獲取當前播放速度","Return the playback speed of a video object":"返回視頻物件的播放速度","Spatial sound":"空間聲音","Allow positioning sounds in a 3D space. The stereo system of the device is used to simulate the position of the sound and to give the impression that the sound is located somewhere around the player.":"允許在3D空間內放置聲音。 設備的立體系統用于模擬聲音的位置,并給人留下聲音位于播放器周圍某處的印象。","Set position of sound":"設定聲音位置","Sets the spatial position of a sound. When a sound is at a distance of 1 to the listener, it's heard at 100% volume. Then, it follows an *inverse distance model*. At a distance of 2, it's heard at 50%, and at a distance of 4 it's heard at 25%.":"設定聲音的空間位置。當聲音距離監聽器1時,它會聽到100%的音量。 然后沿用*反向距離模型*。 距離2時,聽到的是50%,而距離4時,聽到的是25%。","Set position of sound on channel _PARAM1_ to position _PARAM2_, _PARAM3_, _PARAM4_":"設定 _PARAM1_ 頻道聲音的位置為 _PARAM2_, _PARAM3_, _PARAM4_","Channel":"通道","Listener position":"監聽器位置","Change the spatial position of the listener/player.":"更改監聽器/播放器的空間位置。","Change the listener position to _PARAM0_, _PARAM1_, _PARAM2_":"將監聽器位置更改為 _PARAM0_、_PARAM1_、_PARAM2_","Lights":"燈光","Light Obstacle Behavior":"光線障礙行為","Flag objects as being obstacles to 2D lights. The light emitted by light objects will be stopped by the object. This does not work on 3D objects and 3D games.":"將物體標記為2D燈光的障礙物。燈光物件發出的光線將被該物體阻止。這不適用於3D物件和3D遊戲。","When activated, display the lines used to render the light - useful to understand how the light is rendered on screen.":"啟用時,顯示用于渲染燈的線條 - 有助于理解屏幕上燈光的渲染方式。","Light texture (optional)":"燈光紋理(可選)","A texture to be used to display the light. If you don't specify a texture, the light is rendered as fading from bright, in its center, to dark.":"用于顯示燈光的紋理. 如果您沒有指定紋理,光線將會變為從亮麗、中心變為黑暗。","Light":"燈光","Displays a 2D light on the scene, with a customizable radius and color. Then add the Light Obstacle behavior to the objects that must act as obstacle to the lights.":"在場景中顯示 2D 光源,並具有可自定義的半徑和顏色。然後將光線障礙行為添加到必須作為燈具障礙的物件中。","Light radius":"燈光半徑","Set the radius of light object":"設定燈光物件的半徑","Set the radius of _PARAM0_ to: _PARAM1_":"將 _PARAM0_ 的半徑設為:_PARAM1_","Light color":"光的顏色","Set the color of light object in format \"R;G;B\" string.":"以\"R;G;B\"字符串的格式設定燈光物件的顏色。","Set the color of _PARAM0_ to: _PARAM1_":"設定 _PARAM0_ 的顏色至_PARAM1_","Allow your game to send scores and interact with the Facebook Instant Games platform.":"允許您的遊戲發送分數并與 Facebook 即時遊戲平臺交互。","Save player data":"保存玩家資料","Save the content of the given scene variable in the player data, stored on Facebook Instant Games servers":"將指定場景變量的內容保存到玩家資料中,存儲在 Facebook 即時遊戲服務器","Save the content of _PARAM1_ in key _PARAM0_ of player data (store success message in _PARAM2_ or error in _PARAM3_)":"將_PARAM1_ 的內容保存到玩家資料的關鍵_PARAM0_ (存儲成功消息在 _PARAM2_ 中或錯誤在 _PARAM3_)","Player data":"玩家資料","Variable where to store the success message (optional)":"變量成功存儲到何處的消息(可選)","Variable where to store the error message (optional, if an error occurs)":"存儲錯誤信息的變量(可選,如果發生錯誤)","Load player data":"加載玩家資料","Load the player data with the given key in a variable":"用變量中給定的密鑰加載玩家資料","Load player data with key _PARAM0_ in _PARAM1_ (or error in _PARAM2_)":"在 _PARAM1_ 中用鍵_PARAM0_ 加載玩家資料(或_PARAM2_中的錯誤)","Data key name (e.g: \"Lives\")":"資料密鑰名稱(如:“生命”)","Variable where to store loaded data":"存儲加載資料的變量","Save the score, and optionally the content of the given variable in the player score, for the given metadata.":"為給定的元資料保存得分,并可選地保存玩家分數中給定的變量內容。","In leaderboard _PARAM0_, save score _PARAM1_ for the player and extra data from _PARAM2_ (store success message in _PARAM3_ or error in _PARAM4_)":"在排行榜_PARAM0_中,為玩家保存得分_PARAM1_以及從 _PARAM2_ 的額外資料(存儲成功消息在 _PARAM3_ 或錯誤 _PARAM4_)","Optional variable with metadata to save":"帶有元資料的可選變量可保存","Load player entry":"加載參與的玩家","Load the player entry in the given leaderboard":"加載給定排行榜中參與的玩家","Load player entry from leaderboard _PARAM0_. Set rank in _PARAM1_, score in _PARAM2_ (extra data if any in _PARAM3_ and error in _PARAM4_)":"從排行榜_PARAM0_加載參與玩家。在_PARAM1_中設定排行,以_PARAM2_ 為分數(如果在_PARAM3_中存在任何額外資料,則在_PARAM4_中設定錯誤)","Leaderboard name (e.g: \"PlayersBestTimes\")":"排行榜名稱(如\"玩家最佳時間\")","Variable where to store the player rank (of -1 if not ranked)":"存放玩家排名的變量(如果沒有排名為 -1 )","Variable where to store the player score (of -1 if no score)":"存放玩家排名的變量(如果沒有排名為 -1 )","Variable where to store extra data (if any)":"存儲額外資料的變量(如果有)","Check if ads are supported":"檢查是否支持廣告","Check if showing ads is supported on this device (only mobile phones can show ads)":"檢查是否在此設備上支持顯示廣告 (只有手機可以顯示廣告)","Ads can be shown on this device":"廣告可以在此設備上顯示","Is the interstitial ad ready":"插件是否已準備好","Check if the interstitial ad requested from Facebook is loaded and ready to be shown.":"檢查是否從 Facebook 請求的插件已加載并準備顯示。","The interstitial ad is loaded and ready to be shown":"插件已加載并準備顯示","Load and prepare an interstitial ad":"加載并準備插廣告","Request and load an interstitial ad from Facebook, so that it is ready to be shown.":"從Facebook請求并加載插廣告,以便準備好顯示。","Request and load an interstitial ad from Facebook (ad placement id: _PARAM0_, error in _PARAM1_)":"請求并從Facebook加載插貼(廣告位置id: _PARAM0_, 錯誤在 _PARAM1_)","The Ad Placement id (can be found while setting up the ad on Facebook)":"廣告位置ID (在設定廣告到Facebook時可以找到)","Show the loaded interstitial ad":"顯示加載插的廣告","Show the interstitial ad previously loaded in memory. This won't work if you did not load the interstitial before.":"顯示之前加載的插件廣告。如果你以前沒有加載插件,這將無法工作。","Show the interstitial ad previously loaded in memory (if any error, store it in _PARAM0_)":"在內存中顯示以前加載的插件(如果有任何錯誤,請在 _PARAM0_)","Is the rewarded video ready":"獎勵的視頻已準備好","Check if the rewarded video requested from Facebook is loaded and ready to be shown.":"檢查是否從 Facebook 請求的獎勵視頻已加載并準備顯示。","The rewarded video is loaded and ready to be shown":"獎勵的視頻已加載并準備顯示","Load and prepare a rewarded video":"加載并準備獎勵的視頻","Request and load a rewarded video from Facebook, so that it is ready to be shown.":"從Facebook請求并加載獎勵視頻,以便準備好播放。","Request and load a rewarded video from Facebook (ad placement id: _PARAM0_, error in _PARAM1_)":"從 Facebook 請求并加載獎勵視頻 (廣告位置: _PARAM0_, 錯誤在 _PARAM1_)","Show the loaded rewarded video":"顯示加載的獎勵視頻","Show the rewarded video previously loaded in memory. This won't work if you did not load the video before.":"在內存中顯示以前加載過的獎勵視頻。如果您以前沒有加載視頻,這將無法使用。","Show the rewarded video previously loaded in memory (if any error, store it in _PARAM0_)":"在內存中顯示之前加載的獎勵視頻(如果有任何錯誤,請在 _PARAM0_)","Player identifier":"玩家ID","Get the player unique identifier":"獲取玩家的唯一標識符","Player name":"玩家名稱","Get the player name":"獲取玩家名稱","3D physics engine":"3D物理引擎","If enabled, the object won't rotate and will stay at the same angle.":"如果啟用,物件將不會旋轉並將保持在相同的角度。","Capsule":"膠囊","Sphere":"球","Cylinder":"圓柱","Mesh (works for Static only)":"Mesh (僅適用於靜態)","Simplified 3D model (leave empty to use object's one)":"簡化的 3D 模型(留空以使用物體的模型)","Mass override":"Mass override","Leave at 0 to use the density.":"Leave at 0 to use the density.","Linear damping reduces an object's movement speed over time, making its motion slow down smoothly.":"線性阻尼隨著時間推移減少物體的移動速度,讓其運動平穩減速。","Angular damping reduces an object's rotational speed over time, making its spins slow down smoothly.":"角阻尼隨著時間推移減少物體的旋轉速度,讓其旋轉平穩減速。","Gravity Scale multiplies the world's gravity for a specific body, making it experience stronger or weaker gravitational force than normal.":"重力縮放將世界的重力乘以特定物體的值,使其經歷比正常更強或更弱的重力。","Simulate realistic 3D physics for this object including gravity, forces, collisions, etc.":"為此物件模擬真實的 3D 物理效果,包括重力、力、碰撞等。","Gravity (in Newton)":"重力(牛頓)","World gravity on Z axis":"Z軸上的世界重力","the world gravity on Z axis":"Z軸上的世界重力","Enable or disable an object fixed rotation. If enabled the object won't be able to rotate. This action has no effect on characters.":"啟用或禁用物件固定旋轉。如果啟用,物件將無法旋轉。此操作對角色沒有影響。","Modify an object shape scale. It affects custom shape dimensions. If custom dimensions are not set, the body will be scaled automatically to the object size.":"修改物件形狀比例。它影響自定義形狀尺寸。如果自定義尺寸沒有設定,物體將自動縮放到物件尺寸。","the object density. The body's density and volume determine its mass.":"修改物件密度。身體的密度和體積決定其質量。","Shape offset X":"形狀偏移 X","the object shape offset on X.":"物件的形狀偏移在 X。","the shape offset on X":"形狀偏移在 X","Shape offset Y":"形狀偏移 Y","the object shape offset on Y.":"物件的形狀偏移在 Y。","the shape offset on Y":"Y軸形狀偏移","Shape offset Z":"形狀偏移 Z","the object shape offset on Z.":"物件的形狀偏移在 Z。","the shape offset on Z":"形狀偏移在 Z","the object friction. How much energy is lost from the movement of one object over another. The combined friction from two bodies is calculated as 'sqrt(bodyA.friction * bodyB.friction)'.":"修改物體摩擦力。一個物體移動到另一個物體上會遺失多少能量。 兩個物體的合并摩擦是“sqrt(bodyA.friction * bodyB.friction)”。","the object restitution. Energy conservation on collision. The combined restitution from two bodies is calculated as 'max(bodyA.restitution, bodyB.restitution)'.":"修改物件恢復。碰撞時節能。來自兩個實體的合并補償被計算為“ max(bodyA.restitution,bodyB.restitution)”。","the object linear damping. How much movement speed is lost across the time.":"修改物件線性阻尼。單位時間內速度降低大小。","the object angular damping. How much angular speed is lost across the time.":"修改物件角度阻尼。整個時間損失了多少角速度。","the object gravity scale. The gravity applied to an object is the world gravity multiplied by the object gravity scale.":"修改物件重力尺寸。適用于物件的重力尺寸是世界重力乘以物件重力比例。","Layer (1 - 8)":"圖層(1 - 8)","Mask (1 - 8)":"遮罩 (1 - 8)","the object linear velocity on X":"the object linear velocity on X","the object linear velocity on Y":"the object linear velocity on Y","Linear velocity Z":"線性速度 Z","the object linear velocity on Z":"the object linear velocity on Z","the linear velocity on Z":"Z上的線性速度","the object linear velocity length":"the object linear velocity length","Angular velocity X":"角速度 X","the object angular velocity around X":"the object angular velocity around X","the angular velocity around X":"繞X的角速度","Angular velocity Y":"角速度 Y","the object angular velocity around Y":"the object angular velocity around Y","the angular velocity around Y":"繞Y的角速度","Angular velocity Z":"角速度 Z","the object angular velocity around Z":"the object angular velocity around Z","the angular velocity around Z":"繞Z的角速度","Apply force (at a point)":"施加力量 (在某一點)","Apply a force of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ at _PARAM5_ ; _PARAM6_ ; _PARAM7_":"對_PARAM0_施加長度為_PARAM2_;_PARAM3_;_PARAM4_的力於_PARAM5_;_PARAM6_;_PARAM7_","Z component (N)":"Z 組件 (N)","Application point on Z axis":"Z 軸上的應用點","Use `MassCenterX`, `MassCenterY` and `MassCenterZ` expressions to avoid any rotation.":"使用 `MassCenterX`、`MassCenterY` 和 `MassCenterZ` 表達式來避免任何旋轉。","Apply force (at center)":"施加力量 (在中心)","Apply a force of _PARAM2_ ; _PARAM3_ ; _PARAM4_ at the center of _PARAM0_":"在_PARAM0_的中心施加_PARAM2_;_PARAM3_;_PARAM4_的力","Apply to _PARAM0_ a force of length _PARAM2_ towards _PARAM3_ ; _PARAM4_ ; _PARAM5_":"對_PARAM0_施加長度為_PARAM2_的力,朝向_PARAM3_;_PARAM4_;_PARAM5_","Apply impulse (at a point)":"施加沖量 (在某一點)","Apply an impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ at _PARAM5_ ; _PARAM6_ ; _PARAM7_":"在_PARAM5_;_PARAM6_;_PARAM7_處對_PARAM0_施加_PARAM2_;_PARAM3_;_PARAM4_的沖量","Z component (N·s or kg·m·s⁻¹)":"Z 組件 (N·s 或 kg·m·s⁻¹)","Apply impulse (at center)":"施加沖量 (在中心)","Apply an impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ at the center of _PARAM0_":"在_PARAM0_的中心施加_PARAM2_;_PARAM3_;_PARAM4_的沖量","Apply to _PARAM0_ an impulse of length _PARAM2_ towards _PARAM3_ ; _PARAM4_ ; _PARAM5_":"對_PARAM0_施加長度為_PARAM2_的沖量,朝向_PARAM3_;_PARAM4_;_PARAM5_","Apply a torque of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ an":"對_PARAM0_施加_PARAM2_;_PARAM3_;_PARAM4_的扭矩","Torque around X (N·m)":"X 方向的扭矩 (N·m)","Torque around Y (N·m)":"Y 方向的扭矩 (N·m)","Torque around Z (N·m)":"Z 方向的扭矩 (N·m)","Apply angular impulse of _PARAM2_ ; _PARAM3_ ; _PARAM4_ to _PARAM0_ an":"將_PARAM2_;_PARAM3_;_PARAM4_的角沖量施加到_PARAM0_","Angular impulse around X (N·m·s)":"繞 X 軸的角沖量 (N·m·s)","Angular impulse around Y (N·m·s)":"繞 Y 軸的角沖量 (N·m·s)","Angular impulse around Z (N·m·s)":"繞 Z 軸的角沖量 (N·m·s)","Inertia around X":"繞 X 的慣性","Return the inertia around X axis of the object (in kilograms · meters²) when for its default rotation is (0°; 0°; 0°)":"返回物體在 (0°; 0°; 0°) 的預設旋轉下,繞 X 軸的慣性 (單位:千克·米²)","Inertia around Y":"繞 Y 的慣性","Return the inertia around Y axis of the object (in kilograms · meters²) when for its default rotation is (0°; 0°; 0°)":"返回物體在 (0°; 0°; 0°) 的預設旋轉下,繞 Y 軸的慣性 (單位:千克·米²)","Inertia around Z":"繞 Z 的慣性","Return the inertia around Z axis of the object (in kilograms · meters²) when for its default rotation is (0°; 0°; 0°)":"在物體的預設旋轉角度為 (0°; 0°; 0°) 時,返回繞 Z 軸的慣性 (千克·米²)","Mass center Z":"質量中心 Z","Jump height":"跳躍高度","Forward acceleration":"向前加速度","Forward deceleration":"向前減速","Max. forward speed":"最大前進速度","Sideways acceleration":"側向加速度","Sideways deceleration":"側向減速","Max. sideways speed":"最大側向速度","3D physics character":"3D 物理角色","Allow an object to jump and run on platforms that have the 3D physics behavior(and which are generally set to \"Static\" as type, unless the platform is animated/moved in events).\n\nThis behavior is usually used with one or more \"mapper\" behavior to let the player move it.":"允許物件在具有3D物理行為的平臺上跳躍和運行(通常將類型設置為“靜態”,除非平臺在事件中被動畫化/移動)。\n\n此行為通常與一個或多個“映射器”行為一起使用,以便讓玩家移動它。","Simulate move forward key press":"模擬按下前進鍵","Simulate a press of the move forward key.":"模擬按下前進鍵。","Simulate pressing Forward key for _PARAM0_":"模擬按下 _PARAM0_ 的前進鍵","Character controls":"角色控制","Simulate move backward key press":"模擬按下後退鍵","Simulate a press of the move backward key.":"模擬按下後退鍵。","Simulate pressing Backward key for _PARAM0_":"模擬按下 _PARAM0_ 的後退鍵","Simulate move right key press":"模擬按下右移鍵","Simulate a press of the move right key.":"模擬按下右移鍵。","Simulate pressing Right key for _PARAM0_":"模擬按下 _PARAM0_ 的右鍵","Simulate move left key press":"模擬按下左移鍵","Simulate a press of the move left key.":"模擬按下左移鍵。","Simulate pressing Left key for _PARAM0_":"模擬按下 _PARAM0_ 的左鍵","A stick angle for a 3D Physics character of 0° means the object will move to the right, 90° backward and -90° (or 270°) forward.":"3D 物理角色的 0° 鈕桿角度意味著物體將向右移動,90° 向後和 -90°(或 270°)向前。","Simulating a stick control is usually used for connecting gamepads. For NPCs, it's usually better to rotate them toward target & simulate forward key instead.":"模擬鈕桿控制通常用於連接遊戲控制器。對於 NPC,通常最好將它們朝目標旋轉並模擬前進按鍵。","When this action is executed, the object is able to jump again, even if it is in the air: this can be useful to allow a double jump for example. This is not a permanent effect: you must call again this action every time you want to allow the object to jump (apart if it's on the floor).":"當執行此操作時, 物件能夠再次跳躍, 即使它在空中: 這能有助于例如允許雙倍跳躍。這不是永久效果: 每當你想要讓物件跳躍時你都必須再次調用此動作 (如果它在地面上)。","Character state":"角色狀態","Should bind object and forward angle":"應該綁定物件和前進角度","Check if the object angle and forward angle should be kept the same.":"檢查物件的角度和前進角度是否應保持不變。","Keep _PARAM0_ angle and forward angle the same":"保持 _PARAM0_ 角度和前進角度相同","Character configuration":"角色配置","Enable or disable keeping the object angle and forward angle the same.":"啟用或禁用保持物件角度和前進角度相同。","Should bind _PARAM0_ angle and forward angle: _PARAM2_":"應該綁定 _PARAM0_ 角度和前進角度:_PARAM2_","Keep object angle and forward direction the same":"保持物件角度和前進方向相同","Forward angle":"向前角度","Compare the angle used by the character to go forward.":"比較角色前進所使用的角度。","Forward angle of _PARAM0_ is _PARAM2_ ± _PARAM3_°":"_PARAM0_ 的前方角度為 _PARAM2_ ± _PARAM3_°","Change the angle used by the character to go forward.":"更改角色前進的角度。","the forward angle":"向前角度","Forward angle of the character":"角色的前向角度","Return the angle used by the character to go forward.":"返回角色前進所使用的角度。","Current forward speed":"當前前進速度","the current forward speed of the object. The object moves backward with negative values and forward with positive ones":"物體的當前前進速度。物體以負值向後移動,以正值向前移動","the current forward speed":"當前前進速度","the forward acceleration of an object":"the forward acceleration of an object","the forward acceleration":"前進加速度","the forward deceleration of an object":"the forward deceleration of an object","the forward deceleration":"前進減速","Forward max speed":"前進最大速度","the forward max speed of the object":"the forward max speed of the object","the forward max speed":"前進最大速度","Current sideways speed":"當前側向速度","the current sideways speed of the object. The object moves to the left with negative values and to the right with positive ones":"物體當前的側向速度。負值表示物體向左移動,正值表示物體向右移動","the current sideways speed":"當前側向速度","the sideways acceleration of an object":"the sideways acceleration of an object","the sideways acceleration":"側向加速度","the sideways deceleration of an object":"the sideways deceleration of an object","the sideways deceleration":"側向減速","Sideways max speed":"側向最大速度","the sideways max speed of the object":"the sideways max speed of the object","the sideways max speed":"側向最大速度","the current falling speed of the object. Its value is always positive.":"物體當前的下降速度,其值總是正數。","the current jump speed of the object. Its value is always positive.":"物體當前的跳躍速度,其值總是正數。","the jump speed of an object. Its value is always positive":"the jump speed of an object. Its value is always positive","the jump sustain time of an object. This is the time during which keeping the jump button held allow the initial jump speed to be maintained":"物體的跳躍維持時間。這是保持按住跳躍按鈕允許維持初始跳躍速度的時間。","the gravity applied on an object":"the gravity applied on an object","the maximum falling speed of an object":"the maximum falling speed of an object","Max steer angle":"Max steer angle","Steering":"Steering","Beginning steer speed":"Beginning steer speed","End steer speed":"End steer speed","Max engine torque":"Max engine torque","Allow cars to climb steep slopes and push heavy obstacles.":"Allow cars to climb steep slopes and push heavy obstacles.","Max engine speed":"Max engine speed","Engine inertia":"Engine inertia","Slow down car acceleration.":"Slow down car acceleration.","Reverse gear ratio":"Reverse gear ratio","1st gear ratio":"1st gear ratio","2nd gear ratio":"2nd gear ratio","3rd gear ratio":"3rd gear ratio","4th gear ratio":"4th gear ratio","5th gear ratio":"5th gear ratio","6th gear ratio":"6th gear ratio","Wheel radius":"Wheel radius","Wheels":"Wheels","Wheel width":"Wheel width","Back wheel offset X":"Back wheel offset X","Positive values move wheels outside.":"Positive values move wheels outside.","Front wheel offset X":"Front wheel offset X","Wheel offset Y":"Wheel offset Y","Wheel offset Z":"Wheel offset Z","Brake max torque":"Brake max torque","Brakes":"Brakes","Hand brake max torque":"Hand brake max torque","Back wheel drive":"Back wheel drive","Front wheel drive":"Front wheel drive","Pitch and roll max angle":"Pitch and roll max angle","3D physics car":"3D physics car","Simulate a realistic car using the 3D physics engine. This is mostly useful for the car controlled by the player (it's usually too complex for other cars in a game).\n\nThis behavior is usually used with one or more \"mapper\" behavior to let the player move it.":"使用3D物理引擎模擬一輛現實的汽車。這對由玩家控制的汽車最為有用(通常對於遊戲中的其他汽車來說過於複雜)。\n\n此行為通常與一個或多個「映射器」行為一起使用,以讓玩家移動它。","Car controls":"Car controls","Simulate hand brake key press":"Simulate hand brake key press","Simulate a press of the hand brake key.":"Simulate a press of the hand brake key.","Simulate pressing hand brake key for _PARAM0_":"Simulate pressing hand brake key for _PARAM0_","Simulate accelerator stick control":"Simulate accelerator stick control","Simulate an accelerator stick control.":"Simulate an accelerator stick control.","Simulate an accelerator stick control for _PARAM0_ with a _PARAM2_ force":"Simulate an accelerator stick control for _PARAM0_ with a _PARAM2_ force","Stick force (between -1 and 1)":"Stick force (between -1 and 1)","Simulate steering stick control":"Simulate steering stick control","Simulate a steering stick control.":"Simulate a steering stick control.","Simulate a steering stick control for _PARAM0_ with a _PARAM2_ force":"Simulate a steering stick control for _PARAM0_ with a _PARAM2_ force","Steer angle":"Steer angle","the current steer angle (in degree). The value is negative when cars turn left":"the current steer angle (in degree). The value is negative when cars turn left","the steer angle":"the steer angle","Car state":"Car state","Steer angle (in degree)":"Steer angle (in degree)","Engine speed":"Engine speed","the current engine speed (RPM)":"the current engine speed (RPM)","the engine speed":"the engine speed","Engine speed (RPM)":"Engine speed (RPM)","Current gear":"Current gear","the current gear (-1 = reverse, 0 = neutral, 1 = 1st gear)":"the current gear (-1 = reverse, 0 = neutral, 1 = 1st gear)","the current gear":"the current gear","Check if any wheel is in contact with the ground.":"Check if any wheel is in contact with the ground.","Engine max torque":"Engine max torque","the engine max torque (N·m). It allows cars to climb steep slopes and push heavy obstacles":"the engine max torque (N·m). It allows cars to climb steep slopes and push heavy obstacles","the engine max torque":"the engine max torque","Car configuration":"Car configuration","Engine max torque (N·m)":"Engine max torque (N·m)","Engine max speed":"Engine max speed","the engine max speed (RPM)":"the engine max speed (RPM)","the engine max speed":"the engine max speed","Engine max speed (RPM)":"Engine max speed (RPM)","the engine inertia (kg·m²). It slows down car acceleration":"the engine inertia (kg·m²). It slows down car acceleration","the engine inertia":"the engine inertia","Engine inertia (kg·m²)":"Engine inertia (kg·m²)","Check if a 3D physics character is on a given platform.":"檢查3D物理角色是否在給定的平台上。","Adjustment":"調整","Adjust gamma, contrast, saturation, brightness, alpha or color-channel shift.":"調整伽瑪、對比度、飽和度、亮度、透明或顏色通道轉移。","Gamma (between 0 and 5)":"伽瑪(0到5)","Saturation (between 0 and 5)":"飽和度(介于 0 和 5)","Contrast (between 0 and 5)":"對比度(介于 0 和 5)","Brightness (between 0 and 5)":"亮度(介于 0 和 5)","Red (between 0 and 5)":"紅色(0到5)","Green (between 0 and 5)":"綠色(0到5)","Blue (between 0 and 5)":"藍色(0到5)","Alpha (between 0 and 1, 0 is transparent)":"Alpha (介于 0 到 1 之間, 0 是透明)","Advanced bloom":"高級光暈","Applies a bloom effect.":"應用光暈效果。","Threshold (between 0 and 1)":"閾值(0-1之間)","Bloom Scale (between 0 and 2)":"血量比例 (0到2)","Brightness (between 0 and 2)":"亮度(介于 0 和 2)","Blur (between 0 and 20)":"模糊(介于 0 和 20 之間)","Quality (between 0 and 20)":"質量 (介于 0 和 20 之間)","Padding for the visual effect area":"視覺效果區域的填充","ASCII":"ASCII","Render the image with ASCII characters only.":"只渲染帶有ASCII字符的圖像。","Size (between 2 and 20)":"大小 (2至20之間)","Beveled edges":"斜邊","Add beveled edges around the rendered image.":"在渲染圖像周圍添加斜邊。","Rotation (between 0 and 360)":"旋轉 (0-360)","Outer strength (between 0 and 5)":"外部強度(0至5之間)","Distance (between 10 and 20)":"距離(10至20之間)","Light alpha (between 0 and 1)":"淺色透明(介于 0 和 1) 之間","Light color (color of the outline)":"淺色(外觀顏色)","Shadow color (color of the outline)":"陰影顏色 (外觀的顏色)","Shadow alpha (between 0 and 1)":"陰影透明(介于 0 和 1) 之間","Black and White":"黑白的","Alter the colors to make the image black and white":"更改顏色,使圖像變為黑白。","Opacity (between 0 and 1)":"不透明度 (在 0 和 1)","Blending mode":"混合模式","Alter the rendered image with the specified blend mode.":"用指定的混合模式更改呈現的圖像。","Mode (0: Normal, 1: Add, 2: Multiply, 3: Screen)":"模式 (0: 正常, 1:加法, 2:乘法, 3:屏幕)","Blur (Gaussian, slow - prefer to use Kawase blur)":"模糊(高斯模糊,慢速-喜歡用Kawase模糊)","Blur the rendered image. This is slow, so prefer to use Kawase blur in most cases.":"模糊渲染的圖像。這是緩慢的,所以在大多數情況下更喜歡使用 Kawase 模糊。","Blur intensity":"模糊強度","Number of render passes. An high value will cause lags/poor performance.":"渲染通過次數。高值會導致延遲/性能差。","Resolution":"分辨率","Kernel size (one of these values: 5, 7, 9, 11, 13, 15)":"內核大小(這些值之一:5、7、9、11、13、15)","Brightness":"亮度","Make the image brighter.":"使圖像更加亮。","Brightness (between 0 and 1)":"亮度(介于 0 和 1)","Bulge Pinch":"凹凸","Bulges or pinches the image in a circle.":"將圖像凸起或擠壓成圓形。","Center X (between 0 and 1, 0.5 is image middle)":"居中 X (介于 0 到 1, 0.5 之間的圖像中間值)","Center Y (between 0 and 1, 0.5 is image middle)":"居中 Y (介于 0 和 1 之間,0.5 為圖像中間值)","strength (between -1 and 1)":"強度(介于-1和1之間)","-1 is strong pinch, 0 is no effect, 1 is strong bulge":"-1為強擠壓,0為無效,1為強凸","Color Map":"彩色地圖","Change the color rendered on screen.":"更改屏幕上呈現的顏色。","Color map texture for the effect":"特效的顏色貼圖紋理","You can change colors of pixels by modifying a reference color image, containing each colors, called the *Color Map Texture*. To get started, **download** [a default color map texture here](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).":"您可以通過修改包含每種顏色的參考彩色圖像來更改像素的顏色,稱為*顏色貼圖紋理*。要開始使用,請**下載** [此處的默認顏色貼圖紋理](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects)。","Disable anti-aliasing (\"nearest\" pixel rounding)":"禁用反鋸齒(\"最近\"像素舍入)","Mix":"混合","Mix value of the effect on the layer (in percent)":"圖層效果的混合值 (百分比)","Color Replace":"顏色替換","Effect replacing a color (or similar) by another.":"特效替換顏色(或類似顏色)。","Original Color":"原始顏色","New Color":"新顏色","Epsilon (between 0 and 1)":"Epsilon (介于 0 到 1)","Tolerance/sensitivity of the floating-point comparison between colors (lower = more exact, higher = more inclusive)":"顏色間浮點比較的公差/靈敏度 (較低=較精確,較高=較高)","CRT":"CRT","Apply an effect resembling old CRT monitors.":"應用一個類似舊的 CRT 監視器的效果。","Line width (between 0 and 5)":"線條寬度 (介于 0 至 5)","Line contrast (between 0 and 1)":"線條對比度 (0 和 1)","Noise (between 0 and 1)":"噪音 (介于 0 和 1) 之間","Curvature (between 0 and 10)":"曲率(0到10之間)","Show vertical lines":"顯示垂直線","Noise size (between 0 and 10)":"噪音大小(0到10之間)","Vignetting (between 0 and 1)":"漸暈 (在 0 和 1)","Vignetting alpha (between 0 and 1)":"漸暈alpha(介于0和1之間)","Vignetting blur (between 0 and 1)":"漸暈模糊(介于0和1之間)","Interlaced Lines Speed":"隔行掃描線速度","0: Pause, 0.5: Half speed, 1: Normal speed, 2: Double speed, etc...":"0: 暫停, 0.5: 半速, 1: 正常速度, 2: 雙速, 等...","Noise Frequency":"噪聲頻率","Displacement":"位移","Uses the pixel values from the specified texture (called the displacement map) to perform a displacement of an object.":"使用指定紋理中的像素值 (稱為置換圖) 來執行物件的移動。","Displacement map texture":"置換貼圖紋理","Displacement map texture for the effect. To get started, **download** [a default displacement map texture here](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).":"位移貼圖紋理的效果。開始時,**下載**[此處為默認置換貼圖紋理](https://wiki.gdevelop.io/gdevelop5/interface/scene-editor/layer-effects).","Dot":"點","Applies a dotscreen effect making objects appear to be made out of black and white halftone dots like an old printer.":"應用點屏效果,使物件看起來像舊打印機一樣由黑白半色調網點組成。","Scale (between 0.3 and 1)":"縮放 (介于 0.3 和 1)","Angle (between 0 and 5)":"角度(介于 0 和 5)","Drop shadow":"投下陰影","Add a shadow around the rendered image.":"在渲染圖像周圍添加陰影。","Quality (between 1 and 20)":"質量 (1至20之間)","Alpha (between 0 and 1)":"Alpha (介于 0 和 1) 之間","Distance (between 0 and 50)":"距離 (介于 0 和 50 之間)","Color of the shadow":"陰影顏色","Shadow only (shows only the shadow when enabled)":"僅顯示陰影(啟用時僅顯示陰影)","Glitch":"玻璃","Applies a glitch effect to an object.":"將玻璃特效應用于物件。","Slices (between 2 and infinite)":"切片(2到無限之間)","Offset (between -400 and 400)":"偏移(-400至400之間)","Direction (between -180 and 180)":"方向(-180至180之間)","Fill Mode (between 0 and 4)":"填充模式 (0到4)","The fill mode of the space after the offset.(0: TRANSPARENT, 1: ORIGINAL, 2: LOOP, 3: CLAMP, 4: MIRROR)":"偏移后空間的填充模式。(0:透明,1:原始,2:循環,3:鉗位,4:鏡像)","Average":"平均值","Min Size":"最小尺寸","Sample Size":"示例大小","Animation Frequency":"動畫頻率","Red X offset (between -50 and 50)":"紅色X偏移量(-50至50)","Red Y offset (between -50 and 50)":"紅色Y偏移量(-50至50)","Green X offset (between -50 and 50)":"綠色X偏移量(-50至50)","Green Y offset (between -50 and 50)":"綠色Y偏移量(-50至50)","Blue X offset (between -50 and 50)":"藍色X偏移量(-50至50)","Blue Y offset (between -50 and 50)":"藍色Y偏移量(-50至50)","Glow":"發光","Add a glow effect around the rendered image.":"在渲染圖像周圍添加發光效果。","Inner strength (between 0 and 20)":"內部強度(介于 0 和 20 之間)","Outer strength (between 0 and 20)":"外部強度(0至20之間)","Color (color of the outline)":"顏色(輪廓的顏色)","Godray":"神光","Apply and animate atmospheric light rays.":"應用并設定大氣光線的動畫。","Parallel (parallel rays)":"平行(平行射線)","Animation Speed":"動畫速度","Lacunarity (between 0 and 5)":"空隙(介于 0 到 5)","Angle (between -60 and 60)":"角度(-60到60之間)","Gain (between 0 and 1)":"增益(在 0 和 1)","Light (between 0 and 60)":"亮度(0到60之間)","Center X (between 100 and 1000)":"居中 X (100到1000之間)","Center Y (between -1000 and 100)":"居中 Y (-1000至100)","HSL Adjustment":"HSL 調整","Adjust hue, saturation and lightness.":"調整色調、飽和度和亮度。","Hue in degrees (between -180 and 180)":"色調的度數 (介于-180和180之間)","Saturation (between -1 and 1)":"飽和度 (介于 -1和1之間)","Lightness (between -1 and 1)":"亮度 (介于 -1和1之間)","Colorize from the grayscale image":"從灰度圖像著色","Blur (Kawase, fast)":"模糊(Kawase,快速)","Blur the rendered image, with much better performance than Gaussian blur.":"模糊渲染圖像,具有比高斯模糊更好的性能。","Pixelize X (between 0 and 10)":"像素化 X (在 0 和 10 之間)","Pixelize Y (between 0 and 10)":"像素化 Y (0到10之間)","Light Night":"明亮的夜晚","Alter the colors to simulate night.":"更改顏色以模擬夜間。","Motion Blur":"運動模糊","Blur the rendered image to give a feeling of speed.":"模糊渲染圖像以給人一種速度的感覺。","Velocity on X axis":"X 軸上的速度","Velocity on Y axis":"Y 軸上的速度","Kernel size (odd number between 3 and 25)":"內核大小 (3到25之間的奇數)","Quality of the blur.":"模糊的質量。","Offset":"偏移","Dark Night":"深色之夜:","Alter the colors to simulate a dark night.":"更改顏色以模擬黑夜。","Intensity (between 0 and 1)":"強度(介于 0 和 1)","Noise":"噪音","Add some noise on the rendered image.":"在渲染圖像上添加一些噪音。","Noise intensity (between 0 and 1)":"噪音強度(介于 0 和 1)","Old Film":"舊電影","Add a Old film effect around the rendered image.":"在渲染圖像周圍添加舊影片效果。","Sepia (between 0 and 1)":"棕褐色 (介于 0 和 1) 之間","The amount of saturation of sepia effect, a value of 1 is more saturation and closer to 0 is less, and a value of 0 produces no sepia effect":"棕褐色效果的飽和度,值為1表示更大的飽和度,接近0表示較小,值為0則不產生棕褐色效果","Noise Size (between 0 and 10)":"噪音大小(0到10之間)","Scratch (between -1 and 1)":"劃痕 (介于 -1 和 1)","Scratch Density (between 0 and 1)":"劃痕密度(介于 0 和 1)","Scratch Width (between 1 and 20)":"劃痕寬度 (1至20之間)","Vignetting Alpha (between 0 and 1)":"漸暈透明(介于 0 和 1) 之間)","Vignetting Blur (between 0 and 1)":"漸暈模糊(介于0和1之間)","Draws an outline around the rendered image.":"在渲染圖像周圍繪制輪廓。","Thickness (between 0 and 20)":"厚度(介于 0 和 20 之間)","Color of the outline":"輪廓顏色","Pixelate":"像素化","Applies a pixelate effect, making display objects appear 'blocky'.":"應用像素效果,使顯示物件顯得“塊狀”。","Size of the pixels (10 pixels by default)":"像素大小(默認為10像素)","Radial Blur":"徑向模糊","Applies a Motion blur to an object.":"將動作模糊應用于物件。","The maximum size of the blur radius, -1 is infinite":"模糊半徑的最大尺寸-1是無限的","Angle (between -180 and 180)":"角度(-180至180之間)","The angle in degree of the motion for blur effect":"模糊效果的運動角度","Kernel Size (between 3 and 25)":"內核大小(3到25之間)","The kernel size of the blur filter (Odd number)":"模糊濾鏡內核大小 (奇數)","Reflection":"反射","Applies a reflection effect to simulate the reflection on water with waves.":"應用反射效果模擬波浪在水上的反射。","Reflect the image on the waves":"在波浪上反射圖像","Vertical position of the reflection point":"反射點的垂直位置","Default is 50% (middle). Smaller numbers produce a larger reflection, larger numbers produce a smaller reflection.":"默認值為50%(中間值)。較小的數字產生較大的反射,較大的數字產生較小的反射。","Amplitude start":"振幅開始","Starting amplitude of waves (0 by default)":"開始波浪的振幅(默認為0)","Amplitude ending":"振幅結束","Ending amplitude of waves (20 by default)":"結束波浪振動 (默認20)","Wave length start":"波長開始","Starting wave length (30 by default)":"起始波長 (默認30)","Wave length ending":"波長結束","Ending wave length (100 by default)":"結束波浪長度 (默認100)","Alpha start":"Alpha 開始","Starting alpha (1 by default)":"正在啟動 Alpha (默認為1)","Alpha ending":"Alpha 結束","Ending alpha (1 by default)":"正在結束Alpha (默認為1)","RGB split (chromatic aberration)":"RGB 拆分(色差)","Applies a RGB split effect also known as chromatic aberration.":"應用一個 RGB 拆分效果,也叫做色差。","Red X offset (between -20 and 20)":"紅色X偏移量(-20至20之間)","Red Y offset (between -20 and 20)":"紅色 Y 偏移(-20 and 20)","Green X offset (between -20 and 20)":"綠色 X 偏移量(-20 和 20)","Green Y offset (between -20 and 20)":"綠色 Y 偏移量(-20至20之間)","Blue X offset (between -20 and 20)":"藍色 X 偏移量(-20至20之間)","Blue Y offset (between -20 and 20)":"藍色 Y 偏移量(-20至20之間)","Sepia":"棕褐色","Alter the colors to sepia.":"改變顏色為棕褐色。","Shockwave":"沖擊波","Deform the image the way a drop deforms a water surface.":"像水滴使水面變形一樣使圖像變形。","Elapsed time":"經過時間","Spreading speed (in pixels per second)":"擴展速度 (以像素每秒為單位)","Amplitude":"振幅","Wavelength":"波長","Maximum radius (0 for infinity)":"最大半徑 (0表示無限)","Center on X axis":"以 X 軸為中心","Center on Y axis":"以 Y 軸為中心","Tilt shift":"傾斜偏移","Render a tilt-shift-like camera effect.":"渲染一個類似傾斜移位的相機效果。","Blur (between 0 and 200)":"模糊(介于 0 到 200之間)","Gradient blur (between 0 and 2000)":"漸變模糊(介于 0 至 2000之間)","Twist":"扭曲的","Applies a twist effect making objects appear twisted in the given direction.":"應用扭曲效果使物件在給定的方向上出現扭曲。","The radius of the twist":"旋轉半徑","Angle (between -10 and 10)":"角度(-10 和 10之間)","The angle in degree of the twist":"旋轉時的角度","Offset X (between 0 and 1, 0.5 is image middle)":"偏移 X (介于 0 和 1 之間,0.5 為圖像中間值)","Offset Y (between 0 and 1, 0.5 is image middle)":"偏移 Y (0-1, 0.5為圖像中間值)","Zoom blur":"縮放模糊度","Applies a Zoom blur.":"應用縮放模糊性。","Inner radius":"內半徑","strength (between 0 and 5)":"強度(介于 0 到 5)","Device vibration":"設備振動","Vibrate":"振動","Vibrate (Duration in ms).":"振動(毫秒時長)。","Start vibration for _PARAM0_ ms":"啟動_PARAM0_ 毫秒的振動","Vibrate by pattern":"按模式振動","Vibrate (Duration in ms). You can add multiple comma-separated values where every second value determines the period of silence between two vibrations. This is a string value so use quotes.":"振動(以毫秒為單位的持續時間)。您可以添加多個逗號分隔的值,其中每個第二個值確定兩次振動之間的靜音時間。這是一個字符串值,因此請使用引號。","Intervals (for example \"500,100,200\"":"間隔(例如“500 100 200”)","Stop vibration":"停止振動","Stop the vibration":"停止振動","Save State (experimental)":"保存狀態(實驗性)","Allows to save and load the full state of a game, usually on the device storage. A Save State, by default, contains the full state of the game (objects, variables, sounds, music, effects etc.). Using the \"Save Configuration\" behavior, you can customize which objects should not be saved in a Save State. You can also use the \"Change the save configuration of a variable\" action to change the save configuration of a variable. Finally, both objects, variables and scene/game data can be given a profile name: in this case, when saving or loading with one or more profile names specified, only the object/variables/data belonging to one of the specified profiles will be saved or loaded.":"允許保存和加載遊戲的完整狀態,通常在設備存儲上。默認情況下,保存狀態包含遊戲的完整狀態(對象、變數、聲音、音樂、特效等)。使用「保存配置」行為,您可以自定義哪些對象不應保存到保存狀態中。您還可以使用「更改變數的保存配置」動作來更改變數的保存配置。最後,對象、變數和場景/遊戲數據都可以賦予一個檔案名稱:在這種情況下,當指定一個或多個檔案名稱進行保存或加載時,只有屬於指定檔案之一的對象/變數/數據會被保存或加載。","Save game to a variable":"將遊戲保存到變量中","Create a Save State and save it to a variable. This is for advanced usage, prefer to use \"Save game to device storage\" in most cases.":"創建一個保存狀態並將其保存到變數中。這是高級用法,通常情況下建議使用「保存遊戲到設備存儲」。","Save game in variable _PARAM1_ (profile(s): _PARAM2_)":"將遊戲保存到變數 _PARAM1_(檔案: _PARAM2_)","Variable to store the save to":"用於存儲保存的變量","Profile(s) to save":"要保存的檔案","Comma-separated list of profile names that must be saved. Only objects tagged with at least one of these profiles will be saved. If no profile names are specified, all objects will be saved (unless they have a \"Save Configuration\" behavior set to \"Do not save\").":"必須儲存的以逗號分隔的配置名稱列表。只有標籤為這些配置之一的物件會被儲存。如果未指定配置名稱,所有物件都將被儲存(除非它們具備 \"儲存配置\" 行為設置為 \"不儲存\")。","Save game to device storage":"將遊戲儲存到裝置儲存空間","Create a Save State and save it to device storage.":"創建一個儲存狀態並將其儲存到設備存儲中。","Save game to device storage named _PARAM1_ (profile(s): _PARAM2_)":"將遊戲儲存到名為 _PARAM1_ 的設備存儲中(配置: _PARAM2_)","Storage key to save to":"要儲存到的儲存鑰匙","Load game from variable":"從變量載入遊戲","Restore the game from a Save State stored in the specified variable. This is for advanced usage, prefer to use \"Load game from device storage\" in most cases.":"從指定變數中恢復遊戲的儲存狀態。這是供進階使用,通常情況下建議使用\"從設備儲存中載入遊戲\"。","Load game from variable _PARAM1_ (profile(s): _PARAM2_, stop and restart all the scenes currently played: _PARAM3_)":"從變數 _PARAM1_ 載入遊戲(配置: _PARAM2_,停止並重啟當前播放的所有場景: _PARAM3_)","Load":"載入","Variable to load the game from":"要從中載入遊戲的變量","Profile(s) to load":"要載入的配置","Comma-separated list of profile names that must be loaded. Only objects tagged with at least one of these profiles will be loaded - others will be left alone. If no profile names are specified, all objects will be loaded (unless they have a \"Save Configuration\" behavior set to \"Do not save\").":"必須載入的以逗號分隔的配置名稱列表。只有標籤為這些配置之一的物件會被載入 - 其他的將被忽略。如果未指定配置名稱,所有物件都將被載入(除非它們具備 \"儲存配置\" 行為設置為 \"不儲存\")。","Stop and restart all the scenes currently played?":"要停止並重啟當前播放的所有場景?","Load game from device storage":"從裝置儲存空間載入遊戲","Restore the game from a Save State stored on the device.":"從設備上儲存的儲存狀態中恢復遊戲。","Load game from device storage named _PARAM1_ (profile(s): _PARAM2_, stop and restart all the scenes currently played: _PARAM3_)":"從名為 _PARAM1_ 的設備存儲中載入遊戲(配置: _PARAM2_,停止並重啟當前播放的所有場景: _PARAM3_)","Storage name to load the game from":"要載入的儲存名稱","Comma-separated list of profile names that must be loaded. Only objects tagged with at least one of these profiles will be loaded - others will be left alone. If no profile names are specified, all objects will be loaded.":"必須載入的以逗號分隔的配置名稱列表。只有標籤為這些配置之一的物件會被載入 - 其他的將被忽略。如果未指定配置名稱,所有物件都將被載入。","Time since last save":"自上次儲存以來的時間","Time since the last save, in seconds. Returns -1 if no save happened, and a positive number otherwise.":"自上次儲存以來的時間(以秒為單位)。如果沒有發生儲存,則返回 -1,否則返回正數。","Time since the last save":"自上次儲存以來的時間","Time since last load":"自上次載入以來的時間","Time since the last load, in seconds. Returns -1 if no load happened, and a positive number otherwise.":"自上次載入以來的時間(以秒為單位)。如果沒有發生載入,則返回 -1,否則返回正數。","Time since the last load":"自上次載入以來的時間","Save just succeeded":"儲存剛剛成功","The last save attempt just succeeded.":"上一次的儲存嘗試已成功。","Save just failed":"儲存剛剛失敗","The last save attempt just failed.":"上一次的儲存嘗試失敗。","Load just succeeded":"載入剛剛成功","The last load attempt just succeeded.":"上一次的載入嘗試已成功。","Load just failed":"載入剛剛失敗","The last load attempt just failed.":"上一次的載入嘗試失敗。","Change the save configuration of a variable":"更改變數的儲存配置","Set if a scene or global variable should be saved in the default save state. Also allow to specify one or more profiles in which the variable should be saved.":"設定場景或全域變數是否應該儲存在預設儲存狀態中。也可以指定一個或多個配置,該變數應該儲存在其中。","Change save configuration of _PARAM1_: save it in the default save states: _PARAM2_ and in profiles: _PARAM3_":"更改 _PARAM1_ 的儲存配置:將其儲存在預設儲存狀態中: _PARAM2_ 並在配置中: _PARAM3_","Advanced configuration":"進階配置","Variable for which configuration should be changed":"應該更改配置的變數","Persist in default save states":"在預設儲存狀態中持久化","Profiles in which the variable should be saved":"變數該儲存在其中的配置","Comma-separated list of profile names in which the variable will be saved. When a save state is created with one or more profile names specified, the variable will be saved only if it matches one of these profiles.":"以逗號分隔的配置名稱列表,該變數將儲存在其中。當創建一個具有一個或多個指定的配置名稱的儲存狀態時,該變數將僅在匹配其中之一時儲存。","Change the save configuration of the global game data":"更改全域遊戲數據的儲存配置","Set if the global game data (audio & global variables) should be saved in the default save state. Also allow to specify one or more profiles in which the global game data should be saved.":"設定全域遊戲數據(音頻和全域變數)是否應儲存在預設儲存狀態中。同時允許指定一個或多個配置,其中全域遊戲數據應該被儲存。","Change save configuration of global game data: save them in the default save states: _PARAM1_ and in profiles: _PARAM2_":"更改全域遊戲數據的儲存配置:將其儲存在預設儲存狀態中: _PARAM1_ 並在配置中: _PARAM2_","Profiles in which the global game data should be saved":"應儲存全域遊戲數據的配置","Comma-separated list of profile names in which the global game data will be saved. When a save state is created with one or more profile names specified, the global game data will be saved only if it matches one of these profiles.":"以逗號分隔的配置名稱列表,該全域遊戲數據將儲存在其中。當創建一個具有一個或多個指定的配置名稱的儲存狀態時,該全域遊戲數據僅在匹配其中之一時儲存。","Change the save configuration of a scene data":"更改場景數據的儲存配置","Set if the data of the specified scene (scene variables, timers, trigger once, wait actions, layers, etc.) should be saved in the default save state. Also allow to specify one or more profiles in which the scene data should be saved. Note: objects are always saved separately from the scene data (use the \"Save Configuration\" behavior to customize the configuration of objects).":"設定指定場景的數據(場景變數、計時器、觸發一次、等待動作、圖層等)是否應儲存在預設儲存狀態中。同時允許指定一個或多個配置,該場景數據應儲存。注意:物件總是與場景數據分開儲存(使用\"儲存配置\"行為來自定義物件的配置)。","Change save configuration of scene _PARAM1_: save it in the default save states: _PARAM2_ and in profiles: _PARAM3_":"更改場景 _PARAM1_ 的儲存配置:將其儲存在預設儲存狀態中: _PARAM2_ 並在配置中: _PARAM3_","Scene name for which configuration should be changed":"應更改配置的場景名稱","Profiles in which the scene data should be saved":"應儲存場景數據的配置","Comma-separated list of profile names in which the scene data will be saved. When a save state is created with one or more profile names specified, the scene data will be saved only if it matches one of these profiles.":"以逗號分隔的配置名稱列表,該場景數據將儲存在其中。當創建一個具有一個或多個指定的配置名稱的儲存狀態時,該場景數據僅在匹配其中之一時儲存。","Persistence mode":"持久化模式","Include in save states (default)":"包含在儲存狀態中(預設)","Do not save":"不儲存","Save profile names":"儲存配置名稱","Comma-separated list of profile names in which the object is saved. When a save state is created with one or more profile names specified, the object will be saved only if it matches one of these profiles.":"以逗號分隔的配置名稱列表,該物件被儲存。當創建一個具有一個或多個指定的配置名稱的儲存狀態時,該物件將僅在匹配其中之一時儲存。","Save state configuration":"儲存狀態配置","Allow the customize how the object is persisted in a save state.":"允許自定義物件在儲存狀態中如何持久化。","Advanced window management":"高級窗口管理","Provides advanced features related to the game window positioning and interaction with the operating system.":"提供與遊戲窗口定位和操作系統交互相關的高級功能。","Window focus":"窗口焦點","Make the window gain or lose focus.":"使窗口獲得或失去焦點。","Focus the window: _PARAM0_":"焦點窗口:_PARAM0_","Windows, Linux, macOS":"Windows, Linux, macOS","Focus the window?":"聚焦窗口?","Window focused":"窗口聚焦","Checks if the window is focused.":"檢查窗口是否對準。","The window is focused":"窗口被聚焦","Window visibility":"窗口可見性","Make the window visible or invisible.":"使窗口可見或不可見。","Window visible: _PARAM0_":"窗口可見:_PARAM0_","Show window?":"顯示窗口?","Window visible":"窗口可見","Checks if the window is visible.":"檢查窗口是否可見。","The window is visible":"窗口可見","Maximize the window":"最大化窗口","Maximize or unmaximize the window.":"最大化或取消窗口最大化。","Maximize window: _PARAM0_":"最大化窗口:_PARAM0_","Maximize window?":"最大化窗口?","Window maximized":"窗口最大化","Checks if the window is maximized.":"檢查窗口是否最大化。","The window is maximized":"窗口最大化","Minimize the window":"最小化窗口","Minimize or unminimize the window.":"最小化或取消最小化窗口。","Minimize window: _PARAM0_":"最小化窗口:_PARAM0_","Minimize window?":"最小化窗口?","Window minimized":"窗口最小化","Checks if the window is minimized.":"檢查是否最小化窗口。","The window is minimized":"窗口最小化","Enable the window":"啟用窗口","Enables or disables the window.":"啟用或禁用窗口。","Enable window: _PARAM0_":"啟用窗口:_PARAM0_","Enable window?":"啟用窗口?","Window enabled":"窗口已啟用","Checks if the window is enabled.":"檢查窗口是否啟用。","The window is enabled":"窗口已啟用","Allow resizing":"允許調整大小","Enables or disables resizing of the window by the user.":"啟用或禁用用戶調整窗口大小。","Enable window resizing: _PARAM0_":"啟用窗口大小調整: _PARAM0_","Allow resizing?":"允許調整大小?","Window resizable":"可調整窗口大小","Checks if the window can be resized.":"檢查窗口是否可以調整大小。","The window can be resized":"窗口大小可以調整","Allow moving":"允許移動","Enables or disables moving of the window by the user.":"啟用或禁用用戶移動窗口。","Enable window moving: _PARAM0_":"啟用窗口移動:_PARAM0_","Allow moving?":"是否允許移動?","Window movable":"窗口可移動","Checks if the window can be moved.":"檢查窗口是否可以移動。","The window can be moved":"窗口可以移動","Allow maximizing":"允許最大化","Enables or disables maximizing of the window by the user.":"啟用或禁用用戶最大化窗口。","Enable window maximizing: _PARAM0_":"啟用窗口最大化: _PARAM0_","Allow maximizing?":"是否允許最大化?","Window maximizable":"窗口最大化","Checks if the window can be maximized.":"檢查是否可以最大化窗口。","The window can be maximized":"窗口可以被最大化","Allow minimizing":"允許最小化","Enables or disables minimizing of the window by the user.":"啟用或禁用用戶最小化窗口。","Enable window minimizing: _PARAM0_":"啟用窗口最小化:_PARAM0_","Allow minimizing?":"是否允許最小化?","Window minimizable":"窗口最小化","Checks if the window can be minimized.":"檢查是否可以最小化窗口。","The window can be minimized":"窗口可以最小化","Allow full-screening":"允許全屏顯示","Enables or disables full-screening of the window by the user.":"啟用或禁用用戶對窗口的全屏顯示。","Enable window full-screening: _PARAM0_":"啟用窗口全屏:_PARAM0_","Allow full-screening?":"允許全屏?","Window full-screenable":"窗口全屏啟用","Checks if the window can be full-screened.":"檢查窗口是否可以全屏。","The window can be set in fullscreen":"窗口可以全屏設定","Allow closing":"允許關閉","Enables or disables closing of the window by the user.":"啟用或禁用用戶關閉窗口。","Enable window closing: _PARAM0_":"啟用窗口關閉: _PARAM0_","Allow closing?":"是否允許關閉?","Window closable":"窗口可關閉","Checks if the window can be closed.":"檢查是否可以關閉窗口。","The window can be closed":"窗口可以關閉","Make the window always on top":"使窗口始終置于頂端","Puts the window constantly above all other windows.":"將窗口始終置于所有其他窗口之上。","Make window always on top: _PARAM0_, level: _PARAM1_":"使窗口始終位于頂部: _PARAM0_, 級別: _PARAM1_","Enable always on top?":"總是在頂部啟用?","Level":"級別","Window always on top":"窗口總是在頂端","Checks if the window is always on top.":"檢查窗口是否總是在頂部。","The window is always on top":"窗口總是在頂部","Enable kiosk mode":"啟用 kiosk 模式","Puts the window in kiosk mode. This prevents the user from exiting fullscreen.":"將窗口置于kiosk模式。這將防止用戶退出全屏。","Enable kiosk mode: _PARAM0_":"啟用kiosk模式:_PARAM0_","Enable kiosk mode?":"啟用kiosk模式?","Kiosk mode":"Kiosk 模式","Checks if the window is currently in kiosk mode.":"檢查窗口是否目前處于kiosk模式。","The window is in kiosk mode":"窗口處于kiosk模式","Enable window shadow":"啟用窗口陰影","Enables or disables the window shadow.":"啟用或禁用窗口陰影。","Enable window shadow: _PARAM0_":"啟用窗口陰影: _PARAM0_","Enable shadow?":"啟用陰影?","Checks if the window currently has it's shadow enabled.":"檢查窗口當前是否啟用了陰影。","The window has a shadow":"窗口有陰影","Enable content protection":"啟用內容保護","Enables or disables the content protection mode. This should prevent screenshots of the game from being taken.":"啟用或禁用內容保護模式。這將防止遊戲屏幕截圖。","Enable content protection: _PARAM0_":"啟用內容保護:_PARAM0_","Enable content protection?":"啟用內容保護?","Allow focusing":"允許聚焦","Allow or disallow the user to focus the window.":"允許或不允許用戶關注窗口。","Allow to focus the window: _PARAM0_":"允許焦點窗口:_PARAM0_","Allow focus?":"允許聚焦?","Flash the window":"閃爍窗口","Make the window flash or end flashing.":"使窗口閃爍或結束閃爍。","Make the window flash: _PARAM0_":"彈出窗口: _PARAM0_","Flash the window?":"閃爍窗口?","Window opacity":"窗口不透明度","Changes the window opacity.":"更改窗口不透明度。","Set the window opacity to _PARAM0_":"將窗口不透明度設定為 _PARAM0_","New opacity":"新的不透明度","Window position":"窗口位置","Changes the window position.":"更改窗口位置。","Set the window position to _PARAM0_;_PARAM1_":"將窗口位置設定為 _PARAM0_; _PARAM1_","Window X position":"窗口 X 位置","Returns the current window X position.":"返回當前窗口 X 位置。","Window Y position":"窗口 Y 位置","Returns the current window Y position.":"返回當前窗口 Y 位置。","Returns the current window opacity (a number from 0 to 1, 1 being fully opaque).":"返回當前窗口不透明度(一個數字從 0 到 1, 1 是完全不透明度)。","Firebase":"Firebase","Use Google Firebase services (database, functions, storage...) in your game.":"在您的遊戲中使用 Google Firebase服務 (資料庫、功能、存儲...)。","Firebase configuration string":"Firebase配置字符串","Enable analytics":"啟用分析","Enables Analytics for that project.":"啟用該項目的分析。","Log an Event":"記錄事件","Triggers an Event/Conversion for the current user on the Analytics.Can also pass additional data to the Analytics":"在分析上觸發當前用戶的事件/轉化。還可以將其他資料傳遞到分析","Trigger Event _PARAM0_ with argument _PARAM1_":"觸發事件_PARAM0_ 帶參數 _PARAM1_","Event Name":"事件名稱","Additional Data":"附加資料","User UID":"用戶 UID","Changes the current user's analytics identifier. This is what let Analytics differentiate user, so it should always be unique for each user. For advanced usage only.":"更改當前用戶的分析標識符。這就是讓 Analytics 區分用戶的原因,因此它對于每個用戶都應該始終是唯一的。僅供高級使用。","Set current user's ID to _PARAM0_":"設定當前用戶ID為 _PARAM0_","New Unique ID":"新建唯一ID","Set a user's property":"設定用戶屬性","Sets an user's properties.Can be used to classify user in Analytics.":"設定用戶屬性。用于在分析中對用戶進行分類。","Set property _PARAM0_ of the current user to _PARAM1_":"將當前用戶的屬性_PARAM0_ 設定為 _PARAM1_","Property Name":"屬性名稱","Property Data":"屬性資料","Get Remote setting as String":"獲取遠程設定為字符串","Get a setting from Firebase Remote Config as a string.":"從 Firebase遠程配置獲取一個字符串設定。","Remote Config":"遠程配置","Setting Name":"設定名稱","Get Remote setting as Number":"獲取遠程設定為數字","Get a setting from Firebase Remote Config as Number.":"從 Firebase遠程配置獲取一個設定作為數字。","Set Remote Config Auto Update Interval":"設定遠程配置自動更新間隔","Sets Remote Config Auto Update Interval.":"設定遠程配置自動更新間隔。","Set Remote Config Auto Update Interval to _PARAM0_":"設定遠程配置自動更新間隔為 _PARAM0_","Update Interval in ms":"以毫秒為單位更新間隔","Set the default configuration":"設定默認配置","As the Remote Config is stored online, you need to set default values or the Remote Config expressions to return while there is no internet or the config is still loading.":"由于遠程配置在線存儲。 當沒有互聯網或配置仍在加載時,您需要設定默認值或遠程配置表達式以返回。","Set default config to _PARAM0_":"設定默認配置為 _PARAM0_","Structure with defaults":"默認結構","Force sync the configuration":"強制同步配置","Use this to sync the Remote Config with the client at any time.":"使用此選項可以隨時同步遠程配置到客戶端。","Synchronize Remote Config":"同步遠程配置","Create account with email":"用電子郵件創建帳戶","Create an account with email and password as credentials.":"創建一個包含電子郵件和密碼的帳戶作為憑據。","Create account with email _PARAM0_ and password _PARAM1_ (store result in _PARAM2_)":"使用電子郵件 _PARAM0_ 和密碼 _PARAM1_ 創建帳戶(將結果存儲在 _PARAM2_ 中)","Authentication":"驗證","Callback variable with state (ok or error)":"具有狀態的回調變量(確定或錯誤)","Sign into an account with email":"用電子郵件登錄帳戶","Sign into an account with email and password as credentials. ":"用電子郵件和密碼登錄帳號作為憑據。 ","Connect to account with email _PARAM0_ and password _PARAM1_ (store result in _PARAM2_)":"使用電子郵件 _PARAM0_ 和密碼 _PARAM1_ 連接到帳戶(將結果存儲在 _PARAM2_ 中)","Log out of the account":"注銷帳戶","Logs out of the current account. ":"注銷當前帳戶。 ","Log out from the account":"從帳戶注銷","Sign into an account via an external provider":"通過外部提供商登錄帳戶","Signs into an account using an external provider's system. The available providers are: \"google\", \"facebook\", \"github\" and \"twitter\".\nProvider authentication only works in the browser! Not on previews or pc/mobile exports.":"使用外部提供商的系統登錄帳戶。可用的提供商是:“google”、“facebook”、“github”和“twitter”。\n提供商身份驗證僅適用于瀏覽器!不適用于預覽或 pc/mobile 匯出。","Connect to account via provider _PARAM0_ (store result in _PARAM1_)":"通過提供商 _PARAM0_ 連接到帳戶(將結果存儲在 _PARAM1_ 中)","Provider":"供應商","Sign In as an anonymous guest":"以匿名訪客身份登錄","Sign into a temporary anonymous account.":"登錄一個臨時匿名帳戶。","Authenticate anonymously (store result in _PARAM0_)":"匿名身份驗證 (將結果存儲在 _PARAM0_ 中)","Is the user signed in?":"用戶是否登錄?","Checks if the user is signed in. \nYou should always use this before actions requiring authentications.":"檢查用戶是否已登錄。 \n您應該始終使用此操作才需要身份驗證。","Check for authentication":"檢查身份認證","User authentication token":"用戶身份驗證令牌","Get the user authentication token. The token is the proof of authentication.":"獲取用戶身份驗證令牌。令牌是身份驗證的證明。","Is the user email address verified":"用戶電子郵件地址已驗證","Checks if the email address of the user got verified.":"檢查用戶的電子郵件地址是否已被驗證。","The email of the user is verified":"用戶的電子郵件已驗證","Authentication ❯ User Management":"身份驗證 ❯ 用戶管理","User email address":"用戶電子郵件地址","Return the user email address.":"返回用戶的電子郵件地址。","Accounts creation time":"賬戶創建時間","Return the accounts creation time.":"返回帳戶創建時間。","User last login time":"用戶上次登錄時間","Return the user last login time.":"返回用戶上次登錄時間。","User display name":"用戶顯示名稱","Return the user display name.":"返回用戶顯示名稱。","User phone number":"用戶電話號碼","Return the user phone number.":"返回用戶電話號碼。","Return the user Unique IDentifier. Use that to link data to an user instead of the name or email.":"返回用戶唯一標識符。使用它將資料鏈接到用戶而不是姓名或電子郵件。","User tenant ID":"用戶租戶ID","Return the user tenant ID. For advanced usage only.":"返回用戶租戶 ID。僅供高級使用。","User refresh token":"用戶刷新令牌","Return the user refresh token. For advanced usage only.":"返回用戶刷新令牌。僅供高級使用。","Profile picture URL":"個人資料圖片 URL","Gets an URL to the user profile picture.":"獲取用戶個人資料圖片的 URL。","Send a password reset email":"發送密碼重置電子郵件","Send a password reset link per email.":"每封電子郵件發送一個密碼重置鏈接。","Email of the user whose password must be reset":"必須重置密碼的用戶的電子郵件","Send a verification email":"發送驗證電子郵件","Send a link per email to verify the user email.":"每封郵件發送鏈接以驗證用戶電子郵件。","Display name":"顯示名稱","Sets the user display name.":"設定用戶顯示名稱。","Set the user's display name to _PARAM0_":"將用戶的顯示名稱設定為 _PARAM0_","New display name":"新顯示名稱","Profile picture":"個人資料圖片","Change the user profile picture URL to a new one.":"將用戶個人資料圖片 URL 更改為新的。","Change the user's profile picture URL to _PARAM0_":"將用戶的個人資料圖片 URL 更改為 _PARAM0_","New profile picture URL":"新建個人資料圖片 URL","User email":"用戶電子郵件","This action is dangerous so it requires reauthentication.\nChanges the user's email address.":"此操作是危險的,因此需要重新驗證,\n更改用戶的電子郵件地址。","Change the user's email to _PARAM0_ and store result in _PARAM4_ (send verification email: _PARAM3_)":"將用戶的電子郵件更改為 _PARAM0_ 并在 _PARAM4_ 中存儲結果 (發送驗證電子郵件: _PARAM3_)","Authentication ❯ User Management ❯ Advanced":"身份驗證 ❯ 用戶管理 ❯ 高級管理","Old email":"舊電子郵件","New email":"新郵件","Send a verification email before doing the change?":"在進行更改之前發送驗證郵件?","User email (Provider)":"用戶電子郵件 (提供者)","This action is dangerous so it requires reauthentication.\nChanges the user's email address.\nThis is the same as Change the user email but reauthenticates via an external provider.":"此操作是危險的,因此需要重新驗證,\n更改用戶的電子郵件地址。\n這與更改用戶電子郵件相同,但通過外部提供商重新認證。","Change the user's email to _PARAM0_ and store result in _PARAM2_ (send verification email: _PARAM1_)":"將用戶的電子郵件更改為 _PARAM0_ 并在 _PARAM2_ 中存儲結果 (發送驗證電子郵件: _PARAM1_)","User password":"用戶密碼","This action is dangerous so it requires reauthentication.\nChanges the user password.":"此操作是危險的,因此需要重新驗證,\n更改用戶密碼。","Change the user password to _PARAM2_ and store result in _PARAM4_ (send verification email: _PARAM3_)":"更改用戶密碼為 _PARAM2_ 并在 _PARAM4_ 中存儲結果 (發送驗證電子郵件: _PARAM3_)","Old password":"舊密碼","New password":"新密碼","User password (Provider)":"用戶密碼 (提供者)","This action is dangerous so it requires reauthentication.\nChanges the user password.\nThis is the same as \"Change the user password\" but reauthenticates via an external provider.":"此操作是危險的,因此需要重新驗證,\n更改用戶密碼。\n這與“更改用戶密碼”相同,但通過外部提供商重新驗證。","Change the user password to _PARAM0_ and store result in _PARAM2_ (send verification email: _PARAM1_)":"更改用戶密碼為 _PARAM0_ 并在 _PARAM2_ 中存儲結果 (發送驗證電子郵件: _PARAM1_)","New Password":"新密碼","Delete the user account":"刪除用戶帳戶","This action is dangerous so it requires reauthentication.\nDeletes the user account.":"此操作是危險的,因此需要重新驗證,\n刪除用戶帳戶。","Delete the user account and store result in _PARAM2_":"刪除用戶帳戶并在 _PARAM2_ 中存儲結果","Delete the user account (Provider)":"刪除用戶帳戶(提供者)","This action is dangerous so it requires reauthentication.\nDeletes the user account.\nThis is the same as \"Delete the user account\" but reauthenticates via an external provider.":"此操作是危險的,因此需要重新驗證,\n刪除用戶帳戶。\n這與“刪除用戶帳戶”相同,但通過外部提供商重新驗證。","Delete the user account and store result in _PARAM0_":"刪除用戶帳戶并在 _PARAM0_ 中存儲結果","Enable performance measuring":"啟用性能分析","Enables performance measuring.":"啟用性能分析","Performance Measuring":"性能測量","Create a custom performance tracker":"創建自定義性能跟蹤器","Creates a new custom performance tracker (If it doesn't already exists). They are used to measure performance of custom events.":"創建一個新的自定義性能跟蹤器 (如果它不存在的話)。它們用于測量自定義事件的性能。","Create performance tracker: _PARAM0_":"創建性能跟蹤: _PARAM0_","Tracker Name":"追蹤器名稱","Start a tracer":"啟動追蹤器","Start measuring performance for that tracer":"開始測量該追蹤器的性能。","Start performance measuring on tracer _PARAM0_":"在跟蹤器_PARAM0_上開始性能測量","Stop a tracer":"停止追蹤器","Stop measuring performance for that tracer":"停止測量該追蹤器的性能。","Stop performance measuring on tracer _PARAM0_":"停止在追蹤器 _PARAM0_ 上的性能計量","Record performance":"記錄性能","Record performance for a delimited period of time. Use this if you want to measure the performance for a specified duration.":"記錄一段時間內的性能。如果您想要在指定的時間內測量性能,請使用它。","Record performance for _PARAM1_ms with a delay of _PARAM2_ms (store in tracker _PARAM0_)":"將_PARAM1_ms的性能記錄到延遲_PARAM2_ms (存儲在Tracker _PARAM0_)","Delay before measuring start (in ms)":"測量開始前的延遲(毫秒)","Measuring duration (in ms)":"測量持續時間(毫秒)","Call a HTTP function":"調用 HTTP 函數","Calls a HTTP function by name, and store the result in a variable.":"通過名稱調用 HTTP 函數,并將結果存儲在一個變量中。","Call HTTP Function _PARAM0_ with parameter(s) _PARAM1_ (Callback variables: Value: _PARAM2_ State: _PARAM3_)":"調用 HTTP 函數 _PARAM0_ 具有參數(s) _PARAM1_ (Callback 變量: 值: _PARAM2_ 狀態: _PARAM3_)","HTTP Function Name":"HTTP 函數名稱","Parameter(s) as JSON or string.":"參數作為JSON或字符串。","Callback variable with returned value":"返回值的回調變量","Get server timestamp":"獲取服務器時間戳","Set a field to the timestamp on the server when the request arrives there":"當請求到達服務器時,將字段設定為服務器上的時間戳","Cloud Firestore Database":"Cloud Firestore 資料庫","Start a query":"開始查詢","Start a query on a collection. A query allows to get a filtered and ordered list of documents in a collection.":"在收藏上開始查詢。查詢允許在收藏中獲得過濾和排序的文檔列表。","Create a query named _PARAM0_ for collection _PARAM1_":"為收藏 _PARAM1_ 創建一個名為 _PARAM0_ 的查詢","Cloud Firestore Database/Queries/Create":"Cloud Firestore 資料庫/查詢/創建","Query name":"查詢名稱","Collection":"集合","Start a query from another query":"從另一個查詢開始查詢","Start a query with the same collection and filters as another one.":"開始一個與另一個收藏和過濾器相同的查詢。","Create a query named _PARAM0_ from query _PARAM1_":"從查詢 _PARAM1_ 創建名為 _PARAM0_ 的查詢","Source query name":"源查詢名稱","Filter by field value":"按字段值篩選","Only match the documents that have a field passing a check.":"只匹配有字段通過檢查的文檔。","Filter query _PARAM0_ to only keep documents whose field _PARAM1__PARAM2__PARAM3_":"過濾查詢 _PARAM0_ 以僅保留字段為 _PARAM1_ _PARAM2_ _PARAM3_ 的文檔","Cloud Firestore Database/Queries/Filters":"Cloud Firestore 資料庫/查詢/過濾器","Field to check":"要檢查的字段","Check type":"檢查類型","Value to check":"要檢查的值","Filter by field text":"按字段文本過濾","Filter query _PARAM0_ to remove documents whose field _PARAM1_ is not _PARAM2__PARAM3_":"過濾查詢 _PARAM0_ 來刪除其字段 _PARAM1_ 不是 _PARAM2__PARAM3_ 的文檔","Text to check":"要檢查的文本","Order by field value":"按字段值排序","Orders all documents in the query by a the value of a field.":"按字段的值排序查詢中的所有文檔。","Order query _PARAM0_ by field _PARAM1_ (direction: _PARAM2_)":"按字段 _PARAM1_ 排序查詢_PARAM0_ (方向: _PARAM2_)","Field to order by":"按字段排序","Direction (ascending or descending)":"方向(升序或降序)","Limit amount of documents":"限制文件數量","Limits the amount of documents returned by the query. Can only be used after an order filter.":"限制查詢返回的文檔數量,只能在訂單過濾后使用。","Limit query _PARAM0_ to _PARAM1_ documents (begin from the end: _PARAM2_)":"將查詢 _PARAM0_ 限制為 _PARAM1_ 文檔 (從末尾開始:_PARAM2_)","Amount to limit by":"限制金額","Begin from the end":"從末尾開始","Skip some documents":"跳過一些文檔","Removes documents before or after a certain value on the field ordered by in a query. Can only be used after an order filter.":"刪除查詢中按順序排序的字段的某個值之前或之后的文檔。只能在訂單過濾之后使用。","Skip documents with fields (before: _PARAM2_) value _PARAM1_ in query _PARAM0_ (include documents at that value: _PARAM3_)":"跳過帶字段的文檔 (之前: _PARAM2_) 在查詢 _PARAM0_ 中_PARAM1_ (包含該值的文檔: _PARAM3_)","The value of the field ordered by to skip after":"要在后面跳過的字段的值","Skip documents before?":"先跳過文檔嗎?","Include documents which field value equals the value to skip after?":"包括哪些字段值等于要跳過的值之后的文檔?","Run a query once":"運行一次查詢","Runs the query once and store results in a scene variable.":"運行一次查詢并將結果存儲在場景變量中。","Run query _PARAM0_ and store results into _PARAM1_ (store result state in _PARAM2_)":"運行查詢 _PARAM0_ 并將結果存儲到 _PARAM1_ (將結果狀態存儲在 _PARAM2_)","Cloud Firestore Database/Queries/Run":"Cloud Firestore 資料庫/查詢/運行","Callback variable where to load the results":"加載結果的回調變量","Callback variable with state (ok or error message)":"具有狀態的回調變量(確定或錯誤消息)","Continuously run (watch) a query":"連續運行 (觀察) 查詢","Runs a query continuously, so that every time a new documents starts or stops matching the query, or a document that matches the query has been changed, the variables will be filled with the new results.":"連續運行查詢,以便每次新文檔開始或停止匹配查詢,或者匹配查詢的文檔已更改時,變量將填充新結果。","Run query _PARAM0_ continuously and store results into _PARAM1_ each time documents matching the query are changed (store result state in _PARAM2_)":"連續運行查詢 _PARAM0_ 并將結果存儲到 _PARAM1_ 每次匹配查詢的文檔發生更改時(將結果狀態存儲在 _PARAM2_ 中)","Enable persistence":"啟用持久化","When persistence is enabled, all data that is fetched from the database is being automatically stored to allow to continue accessing the data if cut off from the network, instead of waiting for reconnection.\nThis needs to be called before any other firestore operation, otherwise it will fail.":"啟用持久性時, 所有從資料庫獲取的資料都被自動儲存,在斷開網絡后仍能夠繼續訪問,而無需等待重新連接。\n這需要在任何其他 Firestore 操作之前調用,否則將失敗。","Disable persistence":"禁用持久化","Disables the storing of fetched data and clear all the data that has been stored.\nThis needs to be called before any other firestore operation, otherwise it will fail.":"禁用資料獲取自動存儲并清除已存儲的所有資料。\n必須在任何其他 Firestore 操作前調用,否則將失敗。","Re-enable network":"重新啟用網絡","Re-enables the connection to the database after disabling it.":"禁用資料庫后重新啟用連接到資料庫。","Disable network":"禁用網絡","Disables the connection to the database.\nWhile the network is disabled, any read operations will return results from cache, and any write operations will be queued until the network is restored.":"禁用連接到資料庫。\n當網絡被禁用時,任何讀取操作都會從緩存返回結果,任何寫入操作都將排隊直到網絡恢復為止。","Write a document to firestore":"寫文件到firestore","Writes a document (variable) to cloud firestore.":"將文檔(變量)寫入Cloud Firestore。","Write _PARAM2_ to firestore in document _PARAM1_ of collection _PARAM0_ (store result state in _PARAM3_)":"將_PARAM2_寫入集合_PARAM0_的文檔_PARAM1_的Firestore中(將結果狀態存儲在_PARAM3_中)","Cloud Firestore Database/Documents":"Cloud Firestore 資料庫/文檔","Document":"文件","Variable to write":"寫入變量","Add a document to firestore":"將文檔添加到FireStore","Adds a document (variable) to cloud firestore with a unique name.":"將文檔(變量) 添加到云fireestore,具有唯一的名稱。","Add _PARAM1_ to firestore collection _PARAM0_ (store result state in _PARAM2_)":"將_param1_添加到Firestore Collection _param0_(在_param2_中存儲結果狀態)","Write a field in firestore":"在Firestore中寫一個字段","Writes a field of a firestore document.":"寫入 firesting 文檔的字段。","Write _PARAM3_ to firestore in field _PARAM2_ of document _PARAM1_ in collection _PARAM0_ (store result state in _PARAM4_, merge instead of overwriting: _PARAM5_)":"將 _PARAM3_ 寫入集合 _PARAM0_ 中文檔 _PARAM1_ 的字段 _PARAM2_ 中的 firestore (將結果狀態存儲在 _PARAM4_ 中,合并而不是覆蓋: _PARAM5_)","Cloud Firestore Database/Fields":"Cloud Firestore 資料庫/字段","Field to write":"要寫入的字段","Value to write":"要寫入的值","If the document already exists, merge them instead of replacing the old one?":"如果文檔已經存在,是否合并它們而不是替換舊文檔?","Update a document in firestore":"在Firestore中更新文件","Updates a firestore document (variable).":"更新Firestore文檔(變量)。","Update firestore document _PARAM1_ in collection _PARAM0_ with _PARAM2_ (store result state in _PARAM3_)":"通過 _PARAM2_ 在集合 _PARAM0_ 更新纖維恢復文檔 _PARAM1_ (在 _PARAM3_中存儲結果狀態)","Variable to update with":"要更新的變量","Update a field of a document":"更新文檔字段","Updates a field of a firestore document.":"更新Firestore文檔的字段。","Update field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ with _PARAM3_ (store result state in _PARAM4_)":"在集合 _PARAM0_ 和 _PARAM3_ 中更新纖維還原文檔 _PARAM1_ 的 _PARAM2_ (存儲結果狀態在 _PARAM4_)","Field to update":"要更新的字段","Delete a document in firestore":"在Firestore中刪除文檔","Deletes a firestore document (variable).":"刪除Firestore文檔(變量)。","Delete firestore document _PARAM1_ in collection _PARAM0_ (store result state in _PARAM2_)":"刪除集合 _PARAM0_ 中的 firecovery 文檔 _PARAM1_ (存儲結果狀態在 _PARAM2_)","Delete a field of a document":"刪除文檔字段","Deletes a field of a firestore document.":"刪除Firestore文檔的字段。","Delete field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ with (store result state in _PARAM3_)":"在集合 _PARAM0_ 中刪除 firecovery 文檔 _PARAM1_ 的 _PARAM2_ 字段與(存儲結果狀態在 _PARAM3_)","Field to delete":"要刪除的字段","Get a document from firestore":"從Firestore取得文件","Gets a firestore document and store it in a variable.":"獲取Firestore文檔并將其存儲在變量中。","Load firestore document _PARAM1_ from collection _PARAM0_ into _PARAM2_ (store result state in _PARAM3_)":"將集合_PARAM0_中的Firestore文檔_PARAM1_加載到_PARAM2_中(將結果狀態存儲在_PARAM3_中)","Callback variable where to load the document":"要加載文檔的回調變量","Get a field of a document":"獲取文檔字段","Return the value of a field in a firestore document.":"返回 firestore 文檔中字段的值。","Load field _PARAM2_ of firestore document _PARAM1_ in collection _PARAM0_ into _PARAM3_ (store result state in _PARAM4_)":"在集合 _PARAM0_ 中加載 _PARAM2_ 的 firecovery 文檔 _PARAM1_ 到 _PARAM3_ (存儲結果狀態在 _PARAM4_)","Field to get":"要獲取的字段","Callback variable where to store the field's value":"回調變量存儲字段的值","Check for a document's existence":"檢查文檔是否存在","Checks for the existence of a document. Sets the result variable to true if it exists else to false.":"檢查文檔是否存在。如果結果變量存在,則將其設定為 true,否則設定為 false。","Check for existence of _PARAM1_ in collection _PARAM0_ and store result in _PARAM2_ (store result state in _PARAM3_)":"檢查在集合 _PARAM0_ 中是否存在_PARAM1_ 并將結果存儲在 _PARAM2_ (存儲結果狀態在 _PARAM3_)","Callback variable where to store the result":"存儲結果的回調變量","Check for existence of a document's field":"檢查文檔字段是否存在","Checks for the existence of a field in a document. Sets the result variable to 1 if it exists else to 2.":"檢查文檔中字段的存在。如果結果變量存在則設定為 1,則設定為 2。","Check for existence of _PARAM2_ in document _PARAM1_ of collection _PARAM0_ and store result in _PARAM3_ (store result state in _PARAM4_)":"檢查是否存在集合_PARAM0_ 的文檔 _PARAM1_ 中的_PARAM2_ 并將結果存儲在 _PARAM3_ (存儲結果狀態在 _PARAM4_)","Callback Variable where to store the result":"回調變量存儲結果","List all documents of a collection":"列出集合的所有文檔","Generates a list of all document names in a collection, and stores it as a structure.":"在集合中生成所有文檔名稱列表,并將其存儲為結構。","List all documents in _PARAM0_ and store result in _PARAM1_ (store result state in _PARAM2_)":"在 _PARAM0_ 中列出所有文檔并存儲結果在 _PARAM1_ (存儲結果狀態在 _PARAM2_)","Upload a file":"上傳文件","Upload a file to firebase Storage.":"將文件上傳到Firebase存儲。","Save _PARAM0_ in location _PARAM1_ to Firebase storage and store access URL in _PARAM3_ (Format: _PARAM2_, Store result state in _PARAM4_)":"將_PARAM1_中的_PARAM0_保存到Firebase存儲中,并將訪問URL存儲在_PARAM3_中(格式:_PARAM2_,將結果狀態存儲在_PARAM4_中)","Storage":"儲存","Upload ID":"上傳 ID","File content":"文件內容","Storage path":"存放路徑","File content format":"文件內容格式","Callback variable with the url to the uploaded file":"使用網址回調變量到上傳文件","Get Download URL":"獲取下載網址","Get a unique download URL for a file.":"獲取文件的唯一下載 URL。","Get a download url for _PARAM0_ and store it in _PARAM1_ (store result state in _PARAM2_)":"獲取 _PARAM0_ 的下載URL,并將其存儲在 _PARAM1_ (存儲結果狀態在 _PARAM2_)","Storage path to the file":"文件的存儲路徑","Write a variable to Database":"將變量寫入資料庫","Writes a variable to Database.":"將一個變量寫入資料庫。","Write _PARAM1_ to Database in _PARAM0_ (store result state in _PARAM2_)":"將 _PARAM1_ 寫入資料庫 _PARAM0_ (存儲結果狀態在 _PARAM2_)","Realtime Database":"實時資料庫","Write a field in Database":"將字段寫入資料庫","Writes a field of a Database document.":"寫入資料庫文檔字段。","Write _PARAM2_ in field _PARAM1_ of _PARAM0_ (store result state in _PARAM3_)":"在 _PARAM0_ 的 _PARAM1_ 中寫入 _PARAM2_ (存儲結果狀態在 _PARAM3_)","Update a document in Database":"在資料庫中更新文檔","Updates a variable on the database.":"更新資料庫中的變量。","Update variable _PARAM0_ with _PARAM1_ (store result state in _PARAM2_)":"使用 _PARAM1_ 更新變量 _PARAM0_ (將結果狀態存儲在_PARAM2_中)","Updates a field of a Database document.":"更新資料庫文檔的字段。","Update field _PARAM1_ of _PARAM0_ with _PARAM2_ (store result state in _PARAM3_)":"通過 _PARAM2_ 更新_PARAM0_ 的 _PARAM1_ (存儲結果狀態在 _PARAM3_)","Delete a database variable":"刪除資料庫變量","Deletes a variable from the database.":"從資料庫中刪除一個變量。","Delete variable _PARAM0_ from database (store result state in _PARAM1_)":"從資料庫中刪除變量 _PARAM0_ (存儲結果狀態在 _PARAM1_)","Delete a field of a variable":"刪除變量的字段","Deletes a field of a variable on the database.":"刪除資料庫中變量的字段。","Delete field _PARAM1_ of variable _PARAM0_ on the database (store result state in _PARAM2_)":"刪除資料庫中變量 _PARAM0_ 的 _PARAM1_ 字段 (存儲結果狀態在 _PARAM2_)","Get a variable from the database":"從資料庫獲取一個變量","Gets a variable from the database and store it in a Scene variable.":"從資料庫獲取變量并將其存儲在場景變量。","Load database variable _PARAM0_ into _PARAM1_ (store result state in _PARAM2_)":"加載資料庫變量 _PARAM0_ 到 _PARAM1_ (存儲結果狀態在 _PARAM2_)","Callback variable where to store the data":"存儲資料的回調變量","Get a field of a variable":"獲取變量字段","Return the value of a field in a variable from the database and store it in a scene variable.":"從資料庫中返回一個變量中的字段的值,并將其存儲在場景變量中。","Load field _PARAM1_ of database variable _PARAM0_ into _PARAM2_ (store result state in _PARAM3_)":"將資料庫變量 _PARAM0_ 的 _PARAM1_ 加載到 _PARAM2_ (存儲結果狀態在 _PARAM3_)","Check for a variable's existence":"檢查變量是否存在","Checks for the existence of a variable. Sets the result variable to 1 if it exists else to 2.":"檢查變量是否存在。如果存在結果變量,則將結果變量設定為 1。","Check for existence of _PARAM0_ and store result in _PARAM1_ (store result state in _PARAM2_)":"檢查是否存在_PARAM0_并在 _PARAM1_ 中存儲結果(存儲結果狀態在 _PARAM2_)","Check for existence of a variable's field":"檢查變量字段是否存在","Checks for the existence of a field in a variable. Sets the result variable to 1 if it exists else to 2.":"檢查一個字段在變量中是否存在,將結果變量設為1,如果它存在,則設為2。","Check for existence of _PARAM1_ in database variable _PARAM0_ and store result in _PARAM2_ (store result state in _PARAM3_)":"檢查資料庫變量 _PARAM0_ 是否存在_PARAM1_ 并將結果存儲在 _PARAM2_ (存儲結果狀態在 _PARAM3_)","3D":"3D 立體","Support for 3D in GDevelop: this provides 3D objects and the common features for all 3D objects.":"Support for 3D in GDevelop: this provides 3D objects and the common features for all 3D objects.","Common features for all 3D objects: position in 3D space (including the Z axis, in addition to X and Y), size (including depth, in addition to width and height), rotation (on X and Y axis, in addition to the Z axis), scale (including Z axis, in addition to X and Y), flipping (on Z axis, in addition to horizontal (Y)/vertical (X) flipping).":"Common features for all 3D objects: position in 3D space (including the Z axis, in addition to X and Y), size (including depth, in addition to width and height), rotation (on X and Y axis, in addition to the Z axis), scale (including Z axis, in addition to X and Y), flipping (on Z axis, in addition to horizontal (Y)/vertical (X) flipping).","Z (elevation)":"Z (高度)","the Z position (the \"elevation\")":"Z 位置 (“高度”)","the Z position":"Z 位置","Center Z position":"中心 Z 位置","the Z position of the center of rotation":"旋轉中心的 Z 位置","the Z position of the center":"中心的 Z 位置","Position ❯ Center":"位置 ❯ 中心","Depth (size on Z axis)":"深度 (Z軸上的大小)","the depth (size on Z axis)":"深度 (Z軸上的大小)","the depth":"深度","Scale on Z axis":"在 Z 軸上縮放","the scale on Z axis of an object (default scale is 1)":"物件 Z 軸上的縮放比例 (默認比例為 1)","the scale on Z axis scale":"Z 軸縮放比例","Flip the object on Z":"在 Z 上翻轉物件","Flip the object on Z axis":"在 Z 軸上翻轉物件","Flip on Z axis _PARAM0_: _PARAM2_":"在 Z 軸上翻轉 _PARAM0_: _PARAM2_","Flipped on Z":"在 Z 上翻轉","Check if the object is flipped on Z axis":"檢查物件是否在 Z 軸上翻轉","_PARAM0_ is flipped on Z axis":"_PARAM0_ 在 Z 軸上翻轉","Rotation on X axis":"X 軸旋轉","the rotation on X axis":"X 軸上的旋轉","Rotation on Y axis":"Y 軸旋轉","the rotation on Y axis":"Y 軸上的旋轉","Turn around X axis":"繞 X 軸旋轉","Turn the object around X axis. This axis doesn't move with the object rotation.":"圍繞 X 軸轉動物體。該軸不隨物件旋轉而移動。","Turn _PARAM0_ from _PARAM2_° around X axis":"圍繞 X 軸從 _PARAM2_° 轉動 _PARAM0_","Angle to add (in degrees)":"角度 (度):","Turn around Y axis":"繞 Y 軸旋轉","Turn the object around Y axis. This axis doesn't move with the object rotation.":"圍繞 Y 軸轉動物體。該軸不隨物件旋轉而移動。","Turn _PARAM0_ from _PARAM2_° around Y axis":"圍繞 Y 軸從 _PARAM2_° 轉動 _PARAM0_","Turn around Z axis":"繞 Z 軸旋轉","Turn the object around Z axis. This axis doesn't move with the object rotation.":"圍繞 Z 軸轉動物體。該軸不隨物件旋轉而移動。","Turn _PARAM0_ from _PARAM2_° around Z axis":"圍繞 Z 軸從 _PARAM2_° 轉動 _PARAM0_","Forward vector X component":"前向向量 X 分量","Return the object forward vector X component.":"返回物體前向向量 X 分量。","Object basis":"物體基礎","Forward vector Y component":"前向向量 Y 分量","Return the object forward vector Y component.":"返回物件的前進方向向量 Y 成分。","Forward vector Z component":"前進方向向量 Z 成分","Return the object forward vector Z component.":"返回物件的前進方向向量 Z 成分。","Up vector X component":"向上向量 X 成分","Return the object up vector X component.":"返回物件的向上向量 X 成分。","Up vector Y component":"向上向量 Y 成分","Return the object up vector Y component.":"返回物件的向上向量 Y 成分。","Up vector Z component":"向上向量 Z 成分","Return the object up vector Z component.":"返回物件的向上向量 Z 成分。","Right vector X component":"向右向量 X 成分","Return the object right vector X component.":"返回物件的向右向量 X 成分。","Right vector Y component":"向右向量 Y 成分","Return the object right vector Y component.":"返回物件的向右向量 Y 成分。","Right vector Z component":"向右向量 Z 成分","Return the object right vector Z component.":"返回物件的向右向量 Z 成分。","3D Model":"3D 模型","An animated 3D model, useful for most elements of a 3D game.":"一個動畫的3D模型,對於大多數3D遊戲元素非常有用。","Compare the width of an object.":"比較物件的寬度。","Compare the height of an object.":"比較物件的高度。","the depth's scale of an object":"物件的深度比例","the depth's scale":"深度的比例","Flip on Z axis _PARAM0_: _PARAM1_":"在 Z 軸上翻轉 _PARAM0_:_PARAM1_","Turn _PARAM0_ from _PARAM1_° around X axis":"將 _PARAM0_ 從 _PARAM1_° 繞 X 軸轉動","Turn _PARAM0_ from _PARAM1_° around Y axis":"將 _PARAM0_ 從 _PARAM1_° 繞 Y 軸轉動","Turn _PARAM0_ from _PARAM1_° around Z axis":"將 _PARAM0_ 從 _PARAM1_° 繞 Z 軸轉動","Animation (by number)":"動畫 (按編號)","the number of the animation played by the object (the number from the animations list)":"物件播放的動畫編號 (動畫列表中的編號)","the number of the animation":"動畫的編號","Animation (by name)":"動畫 (按名稱)","the animation played by the object":"物件播放的動畫","the animation":"動畫","Animation name":"動畫已暫停","Pause the animation":"暫停動畫","Pause the animation of the object":"暫停物件的動畫","Pause the animation of _PARAM0_":"暫停 _PARAM0_ 的動畫","Resume the animation":"恢復動畫","Resume the animation of the object":"恢復物件的動畫","Resume the animation of _PARAM0_":"恢復 _PARAM0_ 的動畫","the animation speed scale (1 = the default speed, >1 = faster and <1 = slower)":"動畫速度比例 (1 = 默認速度, >1 = 更快, <1 = 更慢)","Speed scale":"速度縮放","Animation paused":"動畫已暫停","Check if the animation of an object is paused.":"檢查物件是否已暫停動畫。","The animation of _PARAM0_ is paused":"_PARAM0_ 的動畫是暫停的","Animation finished":"動畫播放完畢","Check if the animation being played by the Sprite object is finished.":"檢查精靈物件播放的動畫是否完成。","The animation of _PARAM0_ is finished":"_PARAM0_ 的動畫播放完畢","Set crossfade duration":"設置交叉淡入淡出持續時間","Set the crossfade duration when switching to a new animation.":"在切換到新動畫時設置交叉淡入淡出持續時間。","Set crossfade duration of _PARAM0_ to _PARAM1_ seconds":"將 _PARAM0_ 的交叉淡入淡出持續時間設定為 _PARAM1_ 秒","Crossfade duration (in seconds)":"交叉淡入淡出持續時間(以秒為單位)","Enable texture transparency":"啟用紋理透明度","Enabling texture transparency has an impact on rendering performance.":"啟用紋理透明度會對渲染性能產生影響。","Texture settings":"紋理設定","Faces orientation":"面部朝向","The top of each image can touch the **top face** (Y) or the **front face** (Z).":"每個圖像的頂部可以接觸到 **頂面** (Y) 或 **正面** (Z)。","Face orientation":"面部方向","Textures":"紋理","Back face orientation":"背面方向","The top of the image can touch the **top face** (Y) or the **bottom face** (X).":"圖像的頂部可以接觸到 **頂面** (Y) 或 **底面** (X)。","Tile":"瓦片","Tile scale":"瓷磚比例","The scale applied to tiled textures. A value of 1 displays them at the same size as in 2D.":"應用於瓷磚材質的比例。值為 1 時,顯示的尺寸與 2D 中相同。","Face visibility":"面部可見度","Material type":"材料類型","3D Box":"3D 盒子","A box with images for each face":"每個面都有圖像的盒子","3D cube":"3D 立方體","a face should be visible":"一個面應該是可見","having its _PARAM1_ face visible":"其 _PARAM1_ 面可見","Face":"面","Visible?":"可見的?","Rotation angle":"旋轉角度","Face image":"面部圖像","Change the image of the face.":"更改面部的圖像。","Change the image of _PARAM1_ face of _PARAM0_ to _PARAM2_":"將 _PARAM0_ 的 _PARAM1_ 面部圖像更改為 _PARAM2_","Change the tint of the cube.":"更改立方體的色調。","Change the tint of _PARAM0_ to _PARAM1_":"把 _PARAM0_ 的顏色更改為 _PARAM1_","3D Cube":"3D 立方體","Camera Z position":"相機 Z 位置","the camera position on Z axis":"Z 軸上的相機位置","the camera position on Z axis (layer: _PARAM3_)":"Z 軸上的相機位置 (圖層: _PARAM3_)","Camera number (default : 0)":"鏡頭編號 (默認 ︰ 0)","Camera X rotation":"相機 X 旋轉","the camera rotation on X axis":"相機在 X 軸上的旋轉","the camera rotation on X axis (layer: _PARAM3_)":"相機在 X 軸上的旋轉 (圖層: _PARAM3_)","Camera Y rotation":"相機 Y 旋轉","the camera rotation on Y axis":"相機在 Y 軸上的旋轉","the camera rotation on Y axis (layer: _PARAM3_)":"相機在 Y 軸上的旋轉 (圖層: _PARAM3_)","Camera forward vector X component":"相機前進方向向量 X 成分","Return the camera forward vector X component.":"返回相機前進方向向量 X 成分。","Camera basis":"相機基準","Camera forward vector Y component":"相機前進方向向量 Y 成分","Return the camera forward vector Y component.":"返回相機前進方向向量 Y 成分。","Camera forward vector Z component":"相機前進方向向量 Z 成分","Return the camera forward vector Z component.":"返回相機前進方向向量 Z 成分。","Camera up vector X component":"相機向上向量 X 成分","Return the camera up vector X component.":"返回相機向上向量 X 成分。","Camera up vector Y component":"相機向上向量 Y 成分","Return the camera up vector Y component.":"返回相機向上向量 Y 成分。","Camera up vector Z component":"相機向上向量 Z 成分","Return the camera up vector Z component.":"返回相機向上向量 Z 成分。","Camera right vector X component":"相機向右向量 X 成分","Return the camera right vector X component.":"返回相機向右向量 X 成分。","Camera right vector Y component":"相機向右向量 Y 成分","Return the camera right vector Y component.":"返回相機向右向量 Y 成分。","Camera right vector Z component":"相機向右向量 Z 成分","Return the camera right vector Z component.":"返回相機向右向量 Z 成分。","Look at an object":"看向一個物體","Change the camera rotation to look at an object. The camera top always face the screen.":"更改相機旋轉以查看物件。相機頂部始終面向屏幕。","Change the camera rotation of _PARAM2_ to look at _PARAM1_":"更改 _PARAM2_ 的相機旋轉以查看 _PARAM1_","Layers and cameras":"圖層和鏡頭","Stand on Y instead of Z":"在 Y 上而不是 Z 上","Look at a position":"看向一個位置","Change the camera rotation to look at a position. The camera top always face the screen.":"更改相機旋轉以查看位置。相機頂部始終面向屏幕。","Change the camera rotation of _PARAM4_ to look at _PARAM1_; _PARAM2_; _PARAM3_":"更改 _PARAM4_ 的相機旋轉來查看 _PARAM1_; _PARAM2_; _PARAM3_","Camera near plane":"近平面的相機","the camera near plane distance":"相機近平面距離","Distance (> 0)":"距離 (> 0)","Camera far plane":"相機遠平面","the camera far plane distance":"相機遠平面距離","Camera field of view (fov)":"相機視野 (fov)","the camera field of view":"相機視野","Field of view in degrees (between 0° and 180°)":"視野角度 (0 ° 至180 °之間)","Fog (linear)":"霧 (線性)","Linear fog for 3D objects.":"3D 物件的線性霧。","Fog color":"霧的顏色","Distance where the fog starts":"霧開始的距離","Distance where the fog is fully opaque":"霧完全不透明的距離","Fog (exponential)":"霧 (指數)","Exponential fog for 3D objects.":"3D 物件的指數霧。","Density of the fog. Usual values are between 0.0005 (far away) and 0.005 (very thick fog).":"霧的密度。通常值介於 0.0005(遠處)和 0.005(非常濃厚的霧)之間。","Ambient light":"環境光","A light that illuminates all objects from every direction. Often used along with a Directional light (though a Hemisphere light can be used instead of an Ambient light).":"一種從每個方向照亮所有物體的光源。通常與方向光一起使用(雖然半球光可以替代環境光)。","Intensity":"強度","Directional light":"平行光","A very far light source like the sun. This is the light to use for casting shadows for 3D objects (other lights won't emit shadows). Often used along with a Hemisphere light.":"一個非常遙遠的光源像太陽一樣。這是用於為3D物體投射陰影的光源(其他光源不會發出陰影)。通常與半球光一起使用。","3D world top":"3D 世界頂部","Elevation":"高度","Maximal elevation is reached at 90°.":"最大仰角達到 90°。","Shadows":"陰影","Shadow quality":"陰影質量","Shadow bias":"陰影偏差","Use this to avoid \"shadow acne\" due to depth buffer precision. Choose a value small enough like 0.001 to avoid creating distance between shadows and objects but not too small to avoid shadow glitches on low/medium quality. This value is used for high quality, and multiplied by 1.25 for medium quality and 2 for low quality.":"使用此設定來避免由於深度緩衝區精度而產生的“陰影痤瘡”。選擇一個足夠小的值,例如 0.001,以避免在陰影和物體之間產生距離,但又不能太小,以免在低/中等質量下出現陰影故障。此值用於高質量,並對中等質量乘以 1.25,對低質量乘以 2。","Shadow frustum size":"陰影截錐大小","Distance from layer's camera":"距離圖層的相機","Hemisphere light":"半球光","A light that illuminates objects from every direction with a gradient. Often used along with a Directional light.":"一種從每個方向以漸變方式照亮物體的光源。通常與方向光一起使用。","Sky color":"天空顏色","Ground color":"地面顏色","Skybox":"天空盒","Display a background on a cube surrounding the scene.":"在周圍場景的方塊上顯示背景。","Right face (X+)":"右面 (X+)","Left face (X-)":"左面 (X-)","Bottom face (Y+)":"底面 (Y+)","Top face (Y-)":"頂面 (Y-)","Front face (Z+)":"正面 (Z+)","Back face (Z-)":"背面 (Z-)","Hue and saturation":"色調和飽和度","Adjust hue and saturation.":"調整色調和飽和度。","Hue":"色相","Between -180° and 180°":"介於 -180° 和 180° 之間","Saturation":"飽和度","Between -1 and 1":"介於 -1 和 1 之間","Exposure":"曝光","Adjust exposure.":"調整曝光。","Positive value":"正值","Bloom":"光暈","Apply a bloom effect.":"應用光暈效果。","Strength":"強度","Between 0 and 3":"介於 0 和 3 之間","Between 0 and 1":"介於 0 和 1 之間","Threshold":"閾值","Brightness and contrast.":"亮度和對比度。","Adjust brightness and contrast.":"調整亮度和對比度。","Contrast":"對比度","A text must start with a double quote (\").":"文本必須以雙引號 (\")開頭。","A text must end with a double quote (\"). Add a double quote to terminate the text.":"文本必須以雙引號 (\")結尾。添加雙引號以終止文本。","A number was expected. You must enter a number here.":"需要一個數字。您必須在此輸入一個數字。","You need to specify the name of the child variable to access. For example: `MyVariable.child`.":"您需要指定要訪問的子變量的名稱。例如:`MyVariable.child`。","You need to specify the name of the child variable to access. For example: `MyVariable[0]`.":"您需要指定要訪問的子變量的名稱。例如:“MyVariable[0]”。","An object variable or expression should be entered.":"應輸入物件變量或表達式。","This variable does not exist on this object or group.":"此變量在此物件或組中不存在。","This variable only exists on some objects of the group. It must be declared for all objects.":"此變量只存在于組的某些物件上。必須為所有物件聲明它。","This group is empty. Add an object to this group first.":"此組為空。請先向此組添加一個物件。","No child variable with this name found.":"未找到具有此名稱的子變量。","Accessing a child variable of a property is not possible - just write the property name.":"無法訪問屬性的子變量 - 只需寫入屬性名稱。","Behaviors can't be used as a value in expressions.":"行為不能作為表達式中的值。","Accessing a child variable of a parameter is not possible - just write the parameter name.":"無法訪問參數的子變量 - 只需寫入參數名稱。","This parameter is not a string, number or boolean - it can't be used in an expression.":"此參數不是字符串、數字或布爾值 - 它不能在表達式中使用。","This object doesn't exist.":"此物件不存在。","This behavior is not attached to this object.":"此行為未附加到此物件。","Enter the name of the function to call.":"輸入要調用的函數的名稱。","Cannot find an expression with this name: ":"找不到具有此名稱的表達式: ","Double check that you've not made any typo in the name.":"請仔細檢查您未在名稱中輸入任何類型。","This expression is deprecated.":"此表達式已不推薦使用。","You tried to use an expression that returns a number, but a string is expected. Use `ToString` if you need to convert a number to a string.":"你試圖使用一個返回數字的表達式,但是需要一個字符串。 如果您需要將數字轉換為字符串,請使用“ToString”。","You tried to use an expression that returns a number, but another type is expected:":"你試圖使用一個返回數字的表達式,但需要另一種類型:","You tried to use an expression that returns a string, but a number is expected. Use `ToNumber` if you need to convert a string to a number.":"你試圖使用一個返回字符串的表達式,但需要一個數字。 如果您需要將字符串轉換為數字,請使用“ToNumber”。","You tried to use an expression that returns a string, but another type is expected:":"你試圖使用一個返回字符串的表達式,但需要另一種類型:","You tried to use an expression with the wrong return type:":"您嘗試使用錯誤返回類型的表達式:","The number of parameters must be exactly ":"參數數量必須是準確的 ","The number of parameters must be: ":"參數數量必須是: ","You have not entered enough parameters for the expression.":"您沒有為表達式輸入足夠的參數。","This parameter was not expected by this expression. Remove it or verify that you've entered the proper expression name.":"此表達式不需要此參數。刪除它或確認您輸入了正確表達式名稱。","A variable name was expected but something else was written. Enter just the name of the variable for this parameter.":"需要一個變量名,但需要寫入其他內容。請輸入此參數的變量名。","An object name was expected but something else was written. Enter just the name of the object for this parameter.":"物件名稱是預期的但其他東西是寫入的。只需輸入此參數的物件名稱。","This function is improperly set up. Reach out to the extension developer or a GDevelop maintainer to fix this issue":"此功能設定不當。聯系擴展開發者或GDevelop 維護者解決此問題","Called ComputeChangesetForVariablesContainer on variables containers that are different - they can't be compared.":"在不同的變量容器上調用 ComputeChangesetForVariablesContainer - 它們無法進行比較。","Unable to copy \"":"無法複製\"","\" to \"":"\" 到 \"","\".":"\"。","Return .":"返回 。","Compare .":"比較 。","Check if .":"檢查是否 。","Set (or unset) if .":"設定 (或取消設定) 如果是 。","Change .":"更改 。","Actions/conditions to change the current scene (or pause it and launch another one, or go back to the previous one), check if a scene or the game has just started/resumed, preload assets of a scene, get the current scene name or loading progress, quit the game, set background color, or disable input when focus is lost.":"操作和條件以改變當前場景(或暫停它並啟動另一個,或者返回到上一個),檢查場景或遊戲是否剛開始/恢復,預加載場景的資源,獲取當前場景的名稱或加載進度,退出遊戲,設置背景顏色,或在失去焦點時禁用輸入。","Current scene name":"當前場景名稱","Name of the current scene":"當前場景名稱","At the beginning of the scene":"場景開始時","Is true only when scene just begins.":"只有當場景開始時為true","Scene just resumed":"場景剛剛恢復","The scene has just resumed after being paused.":"場景在暫停后剛剛恢復。","Does scene exist":"場景是否存在","Check if a scene exists.":"檢查場景是否存在。","Scene _PARAM1_ exists":"場景 _PARAM1_ 存在","Name of the scene to check":"要檢查的場景名稱","Change the scene":"更改場景","Stop this scene and start the specified one instead.":"停止這個場景然后開始用指定的代替。","Change to scene _PARAM1_":"更改場景為 _PARAM1_","Name of the new scene":"新場景名稱","Stop any other paused scenes?":"停止其他已暫停的場景?","Pause and start a new scene":"暫停并開始新場景","Pause this scene and start the specified one.\nLater, you can use the \"Stop and go back to previous scene\" action to go back to this scene.":"暫停此場景并啟動指定的場景。\n稍后,您可以使用“停止并返回上一場景”動作返回到此場景。","Pause the scene and start _PARAM1_":"暫停場景然后開始場景 _PARAM1_","Stop and go back to previous scene":"停止并返回到之前的場景","Stop this scene and go back to the previous paused one.\nTo pause a scene, use the \"Pause and start a new scene\" action.":"停止此場景并返回到上一個已暫停的場景。\n要暫停場景,請使用“暫停并開始新場景”操作。","Stop the scene and go back to the previous paused one":"停止場景然后返回到之前暫停的一個場景","Quit the game":"退出游戲","Change the background color of the scene.":"更改場景的背景顏色","Set background color to _PARAM1_":"設定背景顏色為 _PARAM1_","Disable input when focus is lost":"當失去焦點時禁用輸入","mouse buttons must be taken into account even\nif the window is not active.":"即使該窗口未處于活動狀態,也必須考慮使用鼠標按鈕。","Disable input when focus is lost: _PARAM1_":"當失去焦點時禁用輸入: _PARAM1_","Deactivate input when focus is lost":"失去焦點時停用輸入","Game has just resumed":"遊戲剛剛重新開始","Check if the game has just resumed from being hidden. It happens when the game tab is selected, a minimized window is restored or the application is put back on front.":"檢查遊戲是否剛剛從隱藏狀態恢復。當遊戲選項卡被選中,最小化窗口被恢復,或者應用程序被放回到前面時,就會發生這種情況。","Preload scene":"預加載場景","Preload a scene resources as soon as possible in background.":"在后臺盡快預加載一個場景資源。","Preload scene _PARAM1_ in background":"在后臺預加載場景 _PARAM1_","Scene loading progress":"場景加載進度","The progress of resources loading in background for a scene (between 0 and 1).":"在后臺為場景加載資源的進度 (介于0和1之間)。","_PARAM1_ loading progress":"_PARAM1_ loading progress","Scene preloaded":"場景已預加載","Check if scene resources have finished to load in background.":"檢查場景資源是否已完成后臺加載。","Scene _PARAM1_ was preloaded in background":"場景 _PARAM1_ 已在后臺預加載","Preload object":"預加載物件","Preload an object resources in background.":"在背景中預加載物件資源。","Preload object _PARAM1_ in background (scene: _PARAM2_)":"在背景中預加載物件 _PARAM1_(場景: _PARAM2_)","Object scene":"物件場景","Unload object":"卸載物件","Unload an object resources. The \"resource preloading\" property must be set to \"preload with an action\" for this action to actually unload resources.":"卸載物件資源。“資源預加載”屬性必須設置為“用動作預加載”,以便這個動作能夠實際卸載資源。","Unload object _PARAM1_ (scene: _PARAM2_)":"卸載物件 _PARAM1_(場景: _PARAM2_)","Object preloaded":"物件已預加載","Check if object resources have finished to load in background.":"檢查物件資源是否已完成背景加載。","Object _PARAM1_ was preloaded in background (scene: _PARAM2_)":"物件 _PARAM1_ 已在背景中預加載(場景: _PARAM2_)","Actions to send web requests, communicate with external \"APIs\" and other network related tasks. Also contains an action to open a URL on the device browser.":"發送Web請求、與外部「API」通訊以及其他網絡相關任務的操作。還包含在設備瀏覽器上打開URL的操作。","Send a request to a web page":"將一個請求發送到網頁","Send an asynchronous request to the specified web page.\n\nPlease note that for the web games, the game must be hosted on the same host as specified below, except if the server is configured to answer to all requests (cross-domain requests).":"發送異步請求到指定的網頁。\n\n請注意,對于網頁遊戲,遊戲必須在下面指定的同一個主機上托管。 除非服務器配置為響應所有請求(跨域請求)。","Send a _PARAM2_ request to _PARAM0_ with body: _PARAM1_, and store the result in _PARAM4_ (or in _PARAM5_ in case of error)":"發送一個 _PARAM2_ 請求給_PARAM0_ 與正文: _PARAM1_, 并將結果保存在_PARAM4_ (如果發生錯誤則在 _PARAM5_ 中)","URL (API or web-page address)":"URL (API或網頁地址)","Example: \"https://example.com/user/123\". Using *https* is highly recommended.":"示例:“https://example.com/user/123”。強烈建議使用 *https://cample.com/user/123。","Request body content":"請求正文內容","Request method":"請求方法","If empty, \"GET\" will be used.":"如果為空,將使用“GET”。","Content type":"內容類型","If empty, \"application/x-www-form-urlencoded\" will be used.":"如果為空,將使用“application/x-www-form-urlenccoed”。","Variable where to store the response":"存儲響應的變量","The response of the server will be stored, as a string, in this variable. If the server returns *JSON*, you may want to use the action \"Convert JSON to a scene variable\" afterwards, to explore the results with a *structure variable*.":"服務器的響應將作為字符串存儲在此變量中。 如果服務器返回 *JSON*,你可能想要在其后使用動作\"轉換JSON到場景變量\"。 使用 *結構變量*來探索結果。","Variable where to store the error message":"存儲錯誤消息的變量","Optional, only used if an error occurs. This will contain the [\"status code\"](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) if the server returns a status >= 400. If the request was not sent at all (e.g. no internet or CORS issues), the variable will be set to \"REQUEST_NOT_SENT\".":"可選,僅在發生錯誤時使用。如果服務器返回狀態 >= 400,它將包含 [\"Status code\"](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。 如果請求根本沒有發送(例如沒有互聯網或CORS 問題),變量將設定為“REQUEST_NOT_SENT”。","Open a URL (web page) or a file":"打開一個 URL (網頁) 或一個文件","This action launches the specified file or URL, in a browser (or in a new tab if the game is using the Web platform and is launched inside a browser).":"此操作會在瀏覽器中啟動指定的文件或URL(如果遊戲正在使用Web平臺并在瀏覽器中啟動,則在新選項卡中)。","Open URL _PARAM0_ in a browser (or new tab)":"在瀏覽器中打開 URL _PARAM0_ (或新標簽)","URL (or filename)":"URL ( 或文件名 )","Download a file":"下載文件","Download a file from a web site":"從 web 站點下載文件","Download file _PARAM1_ from _PARAM0_ under the name of _PARAM2_":"從_PARAM0_下載文件_PARAM1_,名稱為_PARAM2_","Host (for example : http://www.website.com)":"主機(例如:http://www.website.com)","Path to file (for example : /folder/file.txt)":"文件路徑(例如: /folder/file.txt)","Save as":"另存為","Enable (or disable) metrics collection":"啟用(或禁用) 計量集合","Enable, or disable, the sending of anonymous data used to compute the number of sessions and other metrics from your game players.\nBe sure to only send metrics if in accordance with the terms of service of your game and if they player gave their consent, depending on how your game/company handles this.":"啟用或禁用發送匿名資料,用于計算您的遊戲玩家的會話次數和其他計數。\n如果按照你的遊戲服務條款并且玩家表示同意,請確保只發送計數。 取決于您的遊戲/公司如何處理這個問題。","Enable analytics metrics: _PARAM1_":"啟用分析指標: _PARAM1_","Enable the metrics?":"啟用計量?","Camera center X position":"鏡頭中心的X坐標","the X position of the center of a camera":"相機中心的 X 位置","the X position of camera _PARAM4_ (layer: _PARAM3_)":"相機_PARAM4_的 X 位置(圖層:_PARAM3_)","Camera center Y position":"鏡頭中心的Y坐標","the Y position of the center of a camera":"相機中心的 Y 位置","the Y position of camera _PARAM4_ (layer: _PARAM3_)":"相機_PARAM4_的 Y 位置(圖層:_PARAM3_)","Width of a camera":"鏡頭的寬度","the width of a camera of a layer":"圖層相機的寬度","the width of camera _PARAM2_ of layer _PARAM1_":"圖層 _PARAM1_ 的 _PARAM2_ 的相機 _PARAM2_ 寬度","Camera number":"鏡頭編號","Height of a camera":"鏡頭高度","the height of a camera of a layer":"圖層相機的高度","the height of camera _PARAM2_ of layer _PARAM1_":"圖層 _PARAM1_ 的 _PARAM2_ 的相機高度","Camera left border position":"相機左邊框位置","the position of the left border of a camera":"相機左邊框的位置","the position of the left border of camera _PARAM2_ of layer _PARAM1_":"相機的左邊框的位置 _PARAM2_ 的層 _PARAM1_","Camera right border position":"相機右邊邊框位置","the position of the right border of a camera":"相機右邊框的位置","the position of the right border of camera _PARAM2_ of layer _PARAM1_":"相機的右邊框的位置 _PARAM2_ 的層 _PARAM1_","Camera top border position":"相機頂部邊框位置","the position of the top border of a camera":"相機頂部邊框的位置","the position of the top border of camera _PARAM2_ of layer _PARAM1_":"相機的頂部邊框的位置 _PARAM2_ 的層 _PARAM1_","Camera bottom border position":"相機底部邊框位置","the position of the bottom border of a camera":"相機底部邊框的位置","the position of the bottom border of camera _PARAM2_ of layer _PARAM1_":"相機的底部邊框的位置 _PARAM2_ 的層 _PARAM1_","Angle of a camera of a layer":"圖層鏡頭的角度","the angle of rotation of a camera (in degrees)":"相機的旋轉角度 (以度為單位)","the angle of camera (layer: _PARAM3_, camera: _PARAM4_)":"相機角度 (層: _PARAM3_, 相機: _PARAM4_)","Add a camera to a layer":"添加鏡頭到圖層","This action adds a camera to a layer":"此操作將一個攝像機添加到一個層中。","Add a camera to layer _PARAM1_":"將相機添加到圖層 _PARAM1_","Render zone: Top left side: X Position (between 0 and 1)":"渲染區域:左上方:X位置(介于0和1之間)","Render zone: Top left side: Y Position (between 0 and 1)":"渲染區域:左上方:Y位置(介于0和1之間)","Render zone: Bottom right side: X Position (between 0 and 1)":"渲染區域:左上方:X位置(介于0和1之間)","Render zone: Bottom right side: Y Position (between 0 and 1)":"渲染區域:左上方:Y位置(介于0和1之間)","Delete a camera of a layer":"刪除圖層的一個鏡頭","Remove the specified camera from a layer":"移除圖層的指定鏡頭","Delete camera _PARAM2_ from layer _PARAM1_":"從圖層 _PARAM1_ 刪除相機 _PARAM2_","Modify the size of a camera":"改變鏡頭的尺寸","This action modifies the size of a camera of the specified layer. The zoom will be reset.":"該相機的動作修改指定大小的層。該變焦鏡頭將被重置。","Change the size of camera _PARAM2_ of _PARAM1_ to _PARAM3_*_PARAM4_":"更改 _PARAM1_ 的 _PARAM2_ 的相機大小為 _PARAM3_*_PARAM4_","Modify the render zone of a camera":"變更鏡頭的渲染區域","This action modifies the render zone of a camera of the specified layer.":"此操作將修改指定圖層中相機的角度。","Set the render zone of camera _PARAM2_ from layer _PARAM1_ to _PARAM3_;_PARAM4_ _PARAM5_;_PARAM6_":"從圖層 _PARAM1_ 的相機渲染區域設定為 _PARAM3_;_PARAM4_ _PARAM5_;_PARAM6_","Camera zoom":"相機縮放","Change camera zoom.":"更改相機縮放。","Change camera zoom to _PARAM1_ (layer: _PARAM2_, camera: _PARAM3_)":"將相機縮放更改為 _PARAM1_ (圖層: _PARAM2_, 相機: _PARAM3_)","Value (1:Initial zoom, 2:Zoom x2, 0.5:Unzoom x2...)":"值(1:初始縮放,2:放大一倍,0.5:縮小一半)","Compare the zoom of a camera of a layer.":"比較圖層相機的縮放。","Zoom of camera _PARAM2_ of layer _PARAM1_":"圖層 _PARAM1_ 的相機 _PARAM2_ 的縮放","Zoom":"縮放","Center the camera on an object within limits":"在限定的范圍內居中鏡頭在物件上","Center the camera on the specified object, without leaving the specified limits.":"居中鏡頭在物件上,不離開指定范圍","Center the camera on _PARAM1_ (limit : from _PARAM2_;_PARAM3_ to _PARAM4_;_PARAM5_) (layer: _PARAM7_, camera: _PARAM8_)":"將相機居中 _PARAM1_ (限制:從_PARAM2_;_PARAM3_ 到_PARAM4_;_PARAM5_) (圖層: _PARAM7_, 相機: _PARAM8_)","Top left side of the boundary: X Position":"邊界左上角:X位置","Top left side of the boundary: Y Position":"邊界左上角:Y位置","Bottom right side of the boundary: X Position":"邊界左底部角:X位置","Bottom right side of the boundary: Y Position":"邊界右邊底部角:X位置","Anticipate the movement of the object (yes by default)":"預測物件的移動(默認是)","Enforce camera boundaries":"強制使用相機邊界","Enforce camera boundaries by moving the camera back inside specified boundaries.":"通過將相機移動到指定的邊界內來強制使用相機邊界。","Enforce camera boundaries (left: _PARAM1_, top: _PARAM2_ right: _PARAM3_, bottom: _PARAM4_, layer: _PARAM5_)":"強制使用相機邊界(左: _PARAM1_, 頂: _PARAM2_ 右: _PARAM3_, 底: _PARAM4_, 圖層: _PARAM5_)","Left bound X Position":"左邊界 X 位置","Top bound Y Position":"頂部邊界 Y 位置","Right bound X Position":"右邊界 X 位置","Bottom bound Y Position":"底部邊界 Y 位置","Center the camera on an object":"將相機置于物件的中心","Center the camera on the specified object.":"在指定的物件上居中鏡頭","Center camera on _PARAM1_ (layer: _PARAM3_)":"在 _PARAM1_ 居中攝像機 (層: _PARAM3_)","Show a layer":"顯示圖層","Show a layer.":"顯示圖層。","Show layer _PARAM1_":"顯示圖層 _PARAM1_","Hide a layer":"隱藏圖層","Hide a layer.":"隱藏圖層。","Hide layer _PARAM1_":"隱藏圖層 _PARAM1_","Visibility of a layer":"圖層的可見性","Test if a layer is set as visible.":"測試是否將圖層設定為可見。","Layer _PARAM1_ is visible":"圖層 _PARAM1_ 是可視的","Effect property (number)":"效果屬性 (數字)","Change the value of a property of an effect.":"更改效果的屬性值。","You can find the property names (and change the effect names) in the effects window.":"您可以在效果窗口中找到屬性名稱 (并更改效果名稱)。","Set _PARAM3_ to _PARAM4_ for effect _PARAM2_ of layer _PARAM1_":"對圖層 _PARAM1_ 的效果 _PARAM2_,設定 _PARAM3_ 為 _PARAM4_","Effect property (string)":"效果屬性 (字符串)","Change the value (string) of a property of an effect.":"更改效果屬性的值 (字符串)。","Effect property (enable or disable)":"效果屬性 (啟用或禁用)","Enable or disable a property of an effect.":"啟用或禁用效果的屬性。","Enable _PARAM3_ for effect _PARAM2_ of layer _PARAM1_: _PARAM4_":"啟用 _PARAM3_ 以顯示圖層 _PARAM1_ 的 _PARAM2_ 效果: _PARAM4_","Enable this property":"啟用此屬性","Layer effect is enabled":"圖層效果已啟用","The effect on a layer is enabled":"對圖層的效果已啟用","Effect _PARAM2_ on layer _PARAM1_ is enabled":"啟用圖層 _PARAM1_ 上的效果 _PARAM2_","Enable layer effect":"啟用圖層效果","Enable an effect on a layer":"對圖層啟用特效","Enable effect _PARAM2_ on layer _PARAM1_: _PARAM3_":"在圖層 _PARAM1_: _PARAM3_ 上啟用_PARAM2_","Layer time scale":"更改時間比例","Compare the time scale applied to the objects of the layer.":"比較應用于圖層物件的時間比例。","the time scale of layer _PARAM1_":"圖層 _PARAM1_ 的時間尺度","Change the time scale applied to the objects of the layer.":"比較應用于圖層物件的時間比例。","Set the time scale of layer _PARAM1_ to _PARAM2_":"設定圖層 _PARAM1_ 的時間比例為 _PARAM2_","Scale (1: Default, 2: 2x faster, 0.5: 2x slower...)":"比例 (1: 默認值, 2: 2x 更快, 0.5: 2x 慢...)","Layer default Z order":"圖層默認 Z 順序","Compare the default Z order set to objects when they are created on a layer.":"在圖層上創建物件時,比較默認的 Z 順序。","the default Z order of objects created on _PARAM1_":"在 _PARAM1_ 上創建物件的默認Z順序","Change the default Z order set to objects when they are created on a layer.":"當物件在圖層上創建時,更改默認的 Z 順序。","Set the default Z order of objects created on _PARAM1_ to _PARAM2_":"設定在 _PARAM1_ 上創建的物件的 Z 默認順序為 _PARAM2_","New default Z order":"新建默認 Z 順序","Set the ambient light color of the lighting layer in format \"R;G;B\" string.":"以\"R;G;B\"字符串的格式設定照明圖層的環境亮度顏色。","Set the ambient color of the lighting layer _PARAM1_ to _PARAM2_":"設定照明圖層 _PARAM1_ 的環境顏色到 _PARAM2_","X position of the top left side point of a render zone":"渲染區域左上側點的 X 位置","Y position of the top left side point of a render zone":"渲染區域左上側點的 Y 位置","X position of the bottom right side point of a render zone":"渲染區域左上側點的 X 位置","Y position of the bottom right side point of a render zone":"渲染區域左上側點的 Y 位置","Zoom of a camera of a layer":"放大圖層的攝像頭","Returns the time scale of the specified layer.":"返回指定層的時間比例。","Default Z Order for a layer":"圖層默認的 Z 順序","Scalable objects":"可擴充的物件","Actions/conditions/expression to change or check the scale of an object (default: 1).":"操作/條件/表達式以改變或檢查對象的縮放(默認:1)。","the scale of the object (default scale is 1)":"物件的比例 (默認比例為1)","the scale on X axis of the object (default scale is 1)":"物件 X 軸上的比例 (默認比例為1)","the scale on X axis":"X 軸上的比例","the scale on Y axis of the object (default scale is 1)":"物件 Y 軸上的比例 (默認比例為1)","the scale on Y axis":"Y 軸上的比例","Objects with opacity":"具有不透明度的物件","Action/condition/expression to change or check the opacity of an object (0-255).":"操作/條件/表達式以改變或檢查對象的不透明度(0-255)。","Resizable objects":"可調整大小的物件","Change or compare the size (width/height) of an object which can be resized (i.e: most objects).":"改變或比較能夠調整大小的物體(即大多數物體)的尺寸(寬度/高度)。","Change the width of the object.":"更改物件的寬度。","Compare the width of the object.":"比較物件的寬度。","Change the height of the object.":"更改物件的高度。","Compare the height of the object.":"比較物件的高度","Change the size of an object.":"更改物件的大小。","Change the size of _PARAM0_: set to _PARAM2_ x _PARAM3_":"更改 _PARAM0_ 的大小: 設定為 _PARAM2_ x _PARAM3_","Objects with effects":"具有特效的物件","Actions/conditions to enable/disable and change parameters of visual effects applied on objects.":"啟用/禁用並更改施加於物體的視覺效果參數的操作和條件。","Enable an object effect":"啟用物件特效","Enable an effect on the object":"啟用對物件的效果","Enable effect _PARAM2_ on _PARAM0_: _PARAM3_":"在 _PARAM0_ 上啟用效果_PARAM2_: _PARAM3_","Set _PARAM3_ to _PARAM4_ for effect _PARAM2_ of _PARAM0_":"將 _PARAM0_ 的效果 _PARAM2_ 設定為 _PARAM3_ 至 _PARAM4_","Enable _PARAM3_ for effect _PARAM2_ of _PARAM0_: _PARAM4_":"為 _PARAM0_ 的效果 _PARAM2_ 啟用 _PARAM3_: _PARAM4_","Effect is enabled":"效果已啟用","Check if the effect on an object is enabled.":"檢查是否啟用對物件的效果。","Effect _PARAM2_ of _PARAM0_ is enabled":"已啟用 _PARAM0_ 的效果 _PARAM2_","Objects containing a text":"包含文字的物件","Allows an object to contain a text, usually shown on screen, that can be modified.":"Allows an object to contain a text, usually shown on screen, that can be modified.","Flippable objects":"可翻轉的物件","Actions/conditions for objects which can be flipped horizontally or vertically.":"可以水平或垂直翻轉的物體的操作/條件。","Flip horizontally _PARAM0_: _PARAM2_":"水平翻轉_PARAM0_: _PARAM2_","Flip vertically _PARAM0_: _PARAM2_":"垂直翻轉_PARAM0_: _PARAM2_","Objects with animations":"具有動畫的物件","Actions and conditions for objects having animations (sprite, 3D models...).":"針對具有動畫的物體(精靈、3D模型等)的操作和條件。","Actions and conditions for objects having animations (sprite, 3D models...)..":"針對具有動畫的物體(精靈、3D模型等)的操作和條件。","the animation played by the object using the animation number (from the animations list)":"物件使用動畫編號播放的動畫 (來自動畫列表)","Animation index":"動畫索引","the animation played by the object using the name of the animation":"物件使用動畫名稱播放的動畫","Pause the animation of the object.":"暫停物件的動畫。","Resume the animation of the object.":"恢復物件的動畫。","Animation elapsed time":"動畫經過時間","the elapsed time from the beginning of the animation (in seconds)":"從動畫開始已過時間(秒)","the animation elapsed time":"當前動畫已過時間","Elapsed time (in seconds)":"已用時間(秒)","Animation duration":"動畫持續時間","Return the current animation duration (in seconds).":"返回當前動畫持續時間(秒)。","Sounds and music":"聲音和音樂","GDevelop provides several conditions and actions to play audio files. They can be either long music or short sound effects.":"GDevelop提供了幾個播放音頻文件的條件和操作。它們可以是長音樂或短音效。","Sounds on channels":"通道上的聲音","Play a sound on a channel":"在通道里播放聲音","Play a sound (small audio file) on a specific channel,\nso you'll be able to manipulate it.":"播放聲音(小的音頻文件)在一個特定的通道,\n所以你可以操縱它。","Play the sound _PARAM1_ on the channel _PARAM2_, vol.: _PARAM4_, loop: _PARAM3_":"在通道 _PARAM2_ 上播放聲音 _PARAM1_,音量:_PARAM4_,循環:_PARAM3_","Audio file (or audio resource name)":"音頻文件(或音頻資源名)","Channel identifier":"通道id","Repeat the sound":"重復聲音","From 0 to 100, 100 by default.":"從0到100,默認100。","Pitch (speed)":"音調(速度)","1 by default.":"默認值為 1。","Stop the sound of a channel":"停止某通道的聲音","Stop the sound on the specified channel.":"停止指定通道里的聲音","Stop the sound of channel _PARAM1_":"停止通道 _PARAM1_ 的聲音","Pause the sound of a channel":"暫停某通道的聲音","Pause the sound played on the specified channel.":"暫停指定通道的聲音","Pause the sound of channel _PARAM1_":"暫停通道 _PARAM1_ 的聲音","Resume playing a sound on a channel":"繼續在通道上播放聲音","Resume playing a sound on a channel that was paused.":"在已暫停的通道上恢復播放聲音。","Resume the sound of channel _PARAM1_":"恢復 _PARAM1_ 通道的聲音","Play a music file on a channel":"在頻道上播放音樂文件","Play a music file on a specific channel,\nso you'll be able to interact with it later.":"在特定頻道上播放音樂文件,\n您可以稍后與之互動。","Play the music _PARAM1_ on channel _PARAM2_, vol.: _PARAM4_, loop: _PARAM3_":"在頻道 _PARAM2_上播放音樂_PARAM1_,卷: _PARAM4_, 循環: _PARAM3_","Music on channels":"通道上的音樂","Stop the music on a channel":"停止某通道的音樂","Stop the music on the specified channel":"停止指定通道里的音樂","Stop the music of channel _PARAM1_":"停止通道 _PARAM1_ 的音樂","Pause the music of a channel":"暫停某通道的音樂","Pause the music on the specified channel.":"暫停指定通道里的音樂","Pause the music of channel _PARAM1_":"暫停通道 _PARAM1_ 的音樂","Resume playing a music on a channel":"繼續在通道播放音樂","Resume playing a music on a channel that was paused.":"恢復在暫停的通道上播放音樂。","Resume the music of channel _PARAM1_":"恢復通道 _PARAM1_ 的音樂","Volume of the sound on a channel":"某通道上聲音的音量","This action modifies the volume of the sound on the specified channel.":"此操作更改指定通道上聲音的音量。","the volume of the sound on channel _PARAM1_":"聲道_PARAM1_ 上聲音的音量","Volume of the music on a channel":"通道里音樂的音量","This action modifies the volume of the music on the specified channel.":"此操作更改指定通道上音樂的音量。","the volume of the music on channel _PARAM1_":"頻道_PARAM1_ 上音樂的音量","Game global volume":"遊戲全局音量","This action modifies the global volume of the game.":"這個動作修改遊戲的全局音量。","the global sound level":"全局聲音級別","Pitch of the sound of a channel":"通道里聲音的音調","This action modifies the pitch (speed) of the sound on a channel.":"這個動作修改了聲音在通道上的音高(速度)。","the pitch of the sound on channel _PARAM1_":"聲道_PARAM1_ 上聲音的音調","Pitch (1 by default)":"音量(默認為1)","Pitch of the music on a channel":"通道里音樂的音調","This action modifies the pitch of the music on the specified channel.":"此操作更改指定通道上音樂的音量。","the pitch of the music on channel _PARAM1_":"聲道_PARAM1_ 上音樂的音調","Playing offset of the sound on a channel":"通道上聲音的播放位置","This action modifies the playing offset of the sound on a channel":"此操作修改通道上聲音的播放偏移量","the playing offset of the sound on channel _PARAM1_":"聲道_PARAM1_ 播放聲音的偏移量","Playing offset of the music on a channel":"通道上音樂的播放位置","This action modifies the playing offset of the music on the specified channel":"此操作修改指定頻道上音樂的播放偏移量。","the playing offset of the music on channel _PARAM1_":"_PARAM1_ 通道上音樂的播放偏移量","Play a sound":"播放聲音","Play a sound.":"播放聲音","Play the sound _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_":"播放聲音 _PARAM1_, vol.: _PARAM3_, 循環: _PARAM2_","Play a music file":"播放音樂文件","Play a music file.":"播放音樂文件。","Play the music _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_":"播放音樂 _PARAM1_, vol.: _PARAM3_, 循環: _PARAM2_","Preload a music file":"預加載音樂文件","Preload a music file in memory.":"將音樂文件預加載到內存中","Preload the music file _PARAM1_":"預加載音樂文件 _PARAM1_","Preload a sound file":"預加載聲音文件","Preload a sound file in memory.":"將聲音文件預加載到內存中","Preload the sound file _PARAM1_":"預加載聲音文件 _PARAM1_","Sound file (or sound resource name)":"聲音文件 (或聲音資源名稱)","Unload a music file":"卸載音樂文件","Unload a music file from memory. Unloading a music file will cause any music playing it to stop.":"從內存中卸載音樂文件。卸載音樂文件將導致停止播放任何音樂。","Unload the music file _PARAM1_":"卸載音樂文件 _PARAM1_","Unload a sound file":"卸載聲音文件","Unload a sound file from memory. Unloading a sound file will cause any sounds playing it to stop.":"從內存中卸載聲音文件。卸載聲音文件會導致播放聲音的聲音停止。","Unload the sound file _PARAM1_":"卸載聲音文件 _PARAM1_","Unload all audio":"卸載所有音頻","Unload all the audio in memory. This will cause every sound and music of the game to stop.":"卸載內存中的所有音頻。這將導致遊戲的所有聲音和音樂停止。","Unload all audio files":"卸載所有音頻文件","Fade the volume of a sound played on a channel.":"衰減在頻道上播放的聲音的音量。","Fade the volume of a sound played on a channel to the specified volume within the specified duration.":"在指定的持續時間內,將頻道上播放的聲音音量衰減到指定的音量。","Fade the sound on channel _PARAM1_ to volume _PARAM2_ within _PARAM3_ seconds":"在_PARAM3_秒內將聲道_PARAM1_ 衰減到音量 _PARAM2_","Final volume (0-100)":"最終音量 (0-100)","Fading time in seconds":"以秒為單位的衰減時間","Fade the volume of a music played on a channel.":"淡入頻道播放的音樂音量。","Fade the volume of a music played on a channel to the specified volume within the specified duration.":"在指定的持續時間內,將頻道上播放的音樂音量衰減到指定的音量。","Fade the music on channel _PARAM1_ to volume _PARAM2_ within _PARAM3_ seconds":"在 _PARAM1_ 頻道上淡入音量_PARAM2_ 在 _PARAM3_ 秒內","A music file is being played":"正在播放一個音樂文件。","Test if the music on a channel is being played":"檢測某通道上的音樂是否正在播放","Music on channel _PARAM1_ is being played":"通道 _PARAM1_ 里的音樂正在播放","A music file is paused":"音樂文件暫停","Test if the music on the specified channel is paused.":"檢測指定通道里的音樂是否暫停","Music on channel _PARAM1_ is paused":"通道 _PARAM1_ 里的音樂已暫停","A music file is stopped":"音樂文件停止","Test if the music on the specified channel is stopped.":"檢測指定通道里的音樂是否停止","Music on channel _PARAM1_ is stopped":"通道 _PARAM1_ 里的音樂已停止","A sound is being played":"聲音正在播放","Test if the sound on a channel is being played.":"檢測某通道里的聲音是否正在播放","Sound on channel _PARAM1_ is being played":"通道 _PARAM1_ 里的聲音正在播放","A sound is paused":"聲音是暫停的","Test if the sound on the specified channel is paused.":"檢測某通道里的聲音是否已暫停","Sound on channel _PARAM1_ is paused":"通道 _PARAM1_ 里的聲音已暫停","A sound is stopped":"聲音已停止","Test if the sound on the specified channel is stopped.":"檢測某通道里的聲音是否已停止","Sound on channel _PARAM1_ is stopped":"通道 _PARAM1_ 里的聲音已停止","Test the volume of the sound on the specified channel.":"測試指定通道上聲音的音量。","Test the volume of the music on a specified channel. The volume is between 0 and 100.":"在指定的頻道上測試音樂的音量。音量在0到100之間。","Global volume":"全局音量","Test the global sound level. The volume is between 0 and 100.":"檢測全局聲音級別,值在0到100之間。","the global game volume":"全局遊戲音量","Test the pitch of the sound on the specified channel. 1 is the default pitch.":"測試指定通道上聲音的音高。 1是默認音高。","Pitch to compare to (1 by default)":"要比較的音高(默認為1)","Test the pitch (speed) of the music on a specified channel.":"測試指定通道上音樂的音調(速度)。","Test the playing offset of the sound on the specified channel.":"測試聲音在指定頻道上的播放偏移量。","Position to compare to (in seconds)":"要比較的位置(以秒為單位)","Test the playing offset of the music on the specified channel.":"測試指定通道上音樂的播放偏移量。","Sound playing offset":"聲音播放位置","Sounds":"聲音","Music playing offset":"音樂播放位置","Sound volume":"聲音的音量","Music volume":"音樂音量","Sound's pitch":"聲音的音調","Music's pitch":"音樂的音調","Global volume value":"全局音量","Sound level":"音量 ","Create objects from an external layout":"從外部圖層創建物件","Create objects from an external layout.":"從外部圖層創建物件。","Create objects from the external layout named _PARAM1_ at position _PARAM2_;_PARAM3_;_PARAM4_":"從外部佈局 _PARAM1_ 在位置 _PARAM2_;_PARAM3_;_PARAM4_ 創建對象","X position of the origin":"原點的X坐標","Y position of the origin":"原點的Y坐標","Z position of the origin":"原點的 Z 位置","Conditions to check keys pressed on a keyboard. Note that this does not work with on-screen keyboard on touch devices: use instead mouse/touch conditions when making a game for mobile/touchscreen devices or when making a new game from scratch.":"檢查鍵盤上按下的鍵。請注意,這不適用於觸摸設備上的螢幕鍵盤:在為行動/觸摸螢幕設備製作遊戲時,請改用與滑鼠/觸摸相關的條件或從頭開始製作遊戲。","Key pressed":"鍵按下","Check if a key is pressed":"檢查是否按下了一個鍵","_PARAM1_ key is pressed":"鍵盤 _PARAM1_ 鍵按下","Key to check":"要檢查的鍵","Key released":"鍵彈起","Check if a key was just released":"檢查鍵是否剛剛被釋放","_PARAM1_ key is released":"鍵盤 _PARAM1_ 鍵彈起","Check if a key is pressed. This stays true as long as the key is held down. To check if a key was pressed during the frame, use \"Key just pressed\" instead.":"檢查鍵是否按下。只要按住鍵,這個檢查就為真。要檢查在框架期間是否按下了鍵,請使用「鍵剛剛按下」取而代之。","Key just pressed":"鍵剛剛按下","Check if a key was just pressed.":"檢查鍵是否剛剛按下。","_PARAM1_ key was just pressed":"_PARAM1_ 鍵剛剛按下","Check if a key was just released.":"檢查鍵是否剛剛被釋放。","Any key pressed":"任意鍵按下","Check if any key is pressed":"檢查是否按下了任何鍵","Any key is pressed":"任意鍵按下","Any key released":"任意鍵釋放","Check if any key is released":"檢查是否有任何鍵被釋放","Any key is released":"釋放任意鍵","Last pressed key":"最后按下的鍵","Get the name of the latest key pressed on the keyboard":"獲取鍵盤上按下的最新鍵的名稱","Mathematical tools":"數學工具","Random integer":"隨機整數","Maximum value":"最大值","Random integer in range":"范圍內的隨機整數","Minimum value":"最小值","Random float":"隨機浮點數","Random float in range":"隨機浮點數","Random value in steps":"分步隨機值","Step":"步長","Normalize a value between `min` and `max` to a value between 0 and 1.":"將 `min` 和 `max` 之間的值正常化為 0 和 1 之間。","Remap a value between 0 and 1.":"重映射值介于 0 和 1 之間的值。","Min":"最小值","Max":"最大值","Clamp (restrict a value to a given range)":"Clamp (限定值為給定范圍)","Restrict a value to a given range":"將值限制在給定范圍內","Difference between two angles":"兩個角之間的差異","First angle, in degrees":"第一個角度,以度為單位","Second angle, in degrees":"第二個角度,以度為單位","Angle between two positions":"兩個位置之間的角度","Compute the angle between two positions (in degrees).":"計算兩個位置之間的角度(以度為單位)。","First point X position":"第一點X位置","First point Y position":"第一點 Y 位置","Second point X position":"第二點X位置","Second point Y position":"第二點Y位置","Distance between two positions":"兩個位置之間的距離","Compute the distance between two positions.":"計算兩個位置之間的距離。","Modulo":"求模","Compute \"x mod y\". GDevelop does NOT support the % operator. Use this mod(x, y) function instead.":"計算 \"x mod y\"。GDevelop 不支持 % 運算符。請使用 mod(x, y) 函數代替。","x (as in x mod y)":"x (x mod y)","y (as in x mod y)":"y (x mod y)","Minimum of two numbers":"兩個數中取最小","First expression":"首個表達式","Second expression":"第二個表達式","Maximum of two numbers":"兩個數中取最大","Absolute value":"絕對值","Return the non-negative value by removing the sign. The absolute value of -8 is 8.":"通過刪除符號返回非負值。-8 的絕對值是 8。","Arccosine":"反余弦","Arccosine, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"反余弦,返回角度(以弧度為單位)。`ToDeg` 允許將其轉換為度。","Hyperbolic arccosine":"雙曲線余弦","Arcsine":"反正弦","Arcsine, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"反正弦,返回角度(以弧度為單位)。`ToDeg` 允許將其轉換為度。","Arctangent":"反正切","Arctangent, return an angle (in radian). `ToDeg` allows to convert it to degrees.":"反正切,返回一個角度(以弧度為單位)。`ToDeg` 允許將其轉換為度。","2 argument arctangent":"2個參數反正切","2 argument arctangent (atan2)":"2個參數反正切(atan2)","Hyperbolic arctangent":"雙曲線反正切","Cube root":"立方根","Ceil (round up)":"Ceil (向上取整)","Round number up to an integer":"向上取整","Ceil (round up) to a decimal point":"Ceil (向上) 到小數點","Round number up to the Nth decimal place":"將數字向上至小數點后第n位","Floor (round down)":"Floor (向下取整)","Round number down to an integer":"向下取整","Floor (round down) to a decimal point":"地板(朝下)到小數點","Round number down to the Nth decimal place":"將數字向下至小數點后第n位","Cosine":"余弦","Cosine of an angle (in radian). If you want to use degrees, use`ToRad`: `sin(ToRad(45))`.":"角度的余弦(以弧度為單位)。如果要使用度,請使用`ToRad`:`sin(ToRad(45))`。","Hyperbolic cosine":"雙曲線余弦","Cotangent":"余切","Cotangent of a number":"對一個數求余切","Cosecant":"余割","Cosecant of a number":"對一個數求余割","Round":"取整","Round a number":"對一個數取整","Round to a decimal point":"四舍五入到小數點","Round a number to the Nth decimal place":"將數字四舍五入到小數點后第n位","Number to Round":"需要四捨五入的數字","Decimal Places":"小數位數","Exponential":"指數","Exponential of a number":"一個數的指數","Logarithm":"對數","Base-2 logarithm":"以2為底的對數","Base 2 Logarithm":"基數2對數","Base-10 logarithm":"以10為底的對數","Nth root":"第N根","Nth root of a number":"數字的第N個根","N":"N","Power":"強度:","Raise a number to power n":"提高一個數字權力n","The exponent (n in x^n)":"指數(n 在 x^n中)","Secant":"正割","Sign of a number":"對一個數求余弦","Return the sign of a number (1,-1 or 0)":"返回數字的符號(1, -1或0)","Sine":"正弦","Sine of an angle (in radian). If you want to use degrees, use`ToRad`: `sin(ToRad(45))`.":"角度的正弦(以弧度為單位)。如果要使用度,請使用`ToRad`:`sin(ToRad(45))`。","Hyperbolic sine":"雙曲正弦","Square root":"平方根","Square root of a number":"數字的平方根","Tangent":"切線","Tangent of an angle (in radian). If you want to use degrees, use`ToRad`: `tan(ToRad(45))`.":"角度的切線(以弧度為單位)。如果要使用度,請使用`ToRad`:`tan(ToRad(45))`。","Hyperbolic tangent":"雙曲正切","Truncation":"截斷","Truncate a number":"截斷一個數字","Lerp (Linear interpolation)":"Lerp(線性插值)","Linearly interpolate a to b by x":"用 X 線性插入a到b","a (in a+(b-a)*x)":"a (在 a+(b-a)*x 中)","b (in a+(b-a)*x)":"b (在 a+(b-a)*x 中)","x (in a+(b-a)*x)":"x (在 a+(b-a)*x 中)","X position from angle and distance":"指定角度和距離的 X 位置","Compute the X position when given an angle and distance relative to the origin (0;0). This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"當給定一個相對於原點(0;0)的角度和距離時,計算X位置。這也被稱為得到一個2D向量的笛卡爾坐標,使用極坐標。","Y position from angle and distance":"指定角度和距離的 Y 位置","Compute the Y position when given an angle and distance relative to the origin (0;0). This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"當給定一個相對於原點(0;0)的角度和距離時,計算Y位置。這也被稱為得到一個2D向量的笛卡爾坐標,使用極坐標。","Number Pi (3.1415...)":"數字 Pi (3.1415...)","The number Pi (3.1415...)":"數字 Pi (3.1415...)","Lerp (Linear interpolation) between two angles":"兩個角度之間的Lerp (線性插值)","Linearly interpolates between two angles (in degrees) by taking the shortest direction around the circle.":"通過取圍繞圓的最短方向在兩個角度(以度為單位)之間進行線性插值。","Starting angle, in degrees":"起始角度(度)","Destination angle, in degrees":"目標角度(度)","Interpolation value between 0 and 1.":"介于 0 和 1 之間的插值。","Asynchronous functions":"異步函數","Functions that defer the execution of the events after it.":"延遲事件之后執行的函數。","Async event":"異步事件","Internal event for asynchronous actions":"異步動作的內部事件","End asynchronous function":"結束異步函數","Mark an asynchronous function as finished. This will allow the actions and subevents following it to be run.":"將異步函數標記為已完成。這將允許運行其后的操作和子事件。","Mouse and touch":"鼠標與觸摸","Multitouch":"多點觸控","The mouse wheel is scrolling up":"鼠標滾輪向上滾動","Check if the mouse wheel is scrolling up. Use MouseWheelDelta expression if you want to know the amount that was scrolled.":"檢查鼠標滾輪是否向上滾動。如果您想知道滾動量,請使用MouseWheelDelta表達式。","The mouse wheel is scrolling down":"鼠標滾輪向下滾動","Check if the mouse wheel is scrolling down. Use MouseWheelDelta expression if you want to know the amount that was scrolled.":"檢查鼠標滾輪是否向下滾動。如果您想知道滾動量,請使用MouseWheelDelta表達式。","De/activate moving the mouse cursor with touches":"通過觸摸移動鼠標光標","When activated, any touch made on a touchscreen will also move the mouse cursor. When deactivated, mouse and touch positions will be completely independent.\nBy default, this is activated so that you can simply use the mouse conditions to also support touchscreens. If you want to have multitouch and differentiate mouse movement and touches, just deactivate it with this action.":"激活時,觸摸屏上的任何觸摸也會移動鼠標光標。 取消激活時,鼠標和觸摸位置將完全獨立。\n默認情況下,此功能被激活,以便您可以簡單地使用鼠標條件來支持觸摸屏。 如果您想要多點觸控并區分鼠標移動并觸摸,請使用此操作將其停用。","Move mouse cursor when touching screen: _PARAM1_":"觸摸屏時移動鼠標光標:_PARAM1_","Activate (yes by default when game is launched)":"激活(遊戲啟動時是默認)","Center cursor horizontally":"水平居中光標","Put the cursor in the middle of the screen horizontally.":"水平居中光標","Center cursor vertically":"垂直居中光標","Put the cursor in the middle of the screen vertically.":"垂直居中光標","Hide the cursor":"隱藏鼠標","Hide the cursor.":"隱藏鼠標。","Show the cursor":"顯示光標","Show the cursor.":"顯示光標.","Position the cursor of the mouse":"鼠標光標位置","Position the cursor at the given coordinates.":"光標位置在指定位置","Position cursor at _PARAM1_;_PARAM2_":"光標位置在 _PARAM1_;_PARAM2_","Center the cursor":"居中光標","Center the cursor on the screen.":"在屏幕里居中光標","Cursor X position":"光標X坐標","the X position of the cursor or of a touch":"光標或觸摸的 X 位置","the cursor (or touch) X position":"光標(或觸摸) X 位置","Cursor Y position":"光標Y坐標","the Y position of the cursor or of a touch":"光標或觸摸的 Y 位置","the cursor (or touch) Y position":"光標(或觸摸) Y 位置","Mouse cursor X position":"鼠標光標 X 位置","the X position of the mouse cursor":"鼠標光標的 X 位置","the mouse cursor X position":"鼠標光標 X 位置","Mouse cursor Y position":"鼠標光標 Y 位置","the Y position of the mouse cursor":"鼠標光標的 Y 位置","the mouse cursor Y position":"鼠標光標 Y 位置","Mouse cursor is inside the window":"鼠標光標在窗口內","Check if the mouse cursor is inside the window.":"檢查鼠標光標是否在窗口內。","The mouse cursor is inside the window":"鼠標光標在窗口內","Mouse button pressed or touch held":"鼠標按鈕被按下或觸摸","Check if the specified mouse button is pressed or if a touch is in contact with the screen.":"檢查是否按下了指定的鼠標按鈕或觸摸屏。","Touch or _PARAM1_ mouse button is down":"鼠標 _PARAM1_鍵或觸摸按下","Button to check":"按鈕檢查","Mouse button released":"鼠標鍵彈起","Check if the specified mouse button was released.":"檢查是否釋放了指定的鼠標按鈕。","Touch or _PARAM1_ mouse button is released":"觸摸或 _PARAM1_ 鼠標按鈕被釋放","Touch X position":"觸摸X坐標","the X position of a specific touch":"特定觸摸的 X 位置","the touch #_PARAM1_ X position":"觸摸#_PARAM1_ X 位置","Touch identifier":"觸摸id","Touch Y position":"觸摸Y坐標","the Y position of a specific touch":"特定觸摸的 Y 位置","the touch #_PARAM1_ Y position":"觸摸#_PARAM1_ Y 位置","A new touch has started":"新的觸摸已經開始","Check if a touch has started. The touch identifier can be accessed using LastTouchId().\nAs more than one touch can be started, this condition is only true once for each touch: the next time you use it, it will be for a new touch, or it will return false if no more touches have just started.":"檢查是否已開始觸摸。可以使用LastTouchId()訪問該觸摸標識符。 n由于可以啟動多個觸摸,所以此條件僅對每個觸摸一次,即:下一次使用該條件時,將用于新觸摸,否則它將返回如果沒有更多的接觸才開始,則返回false","A touch has ended":"觸摸已結束","Check if a touch has ended. The touch identifier can be accessed using LastEndedTouchId().\nAs more than one touch can be ended, this condition is only true once for each touch: the next time you use it, it will be for a new touch, or it will return false if no more touches have just ended.":"檢查觸摸是否結束。可以使用LastEndedTouchId()訪問該觸摸標識符。 n由于可以終止多個觸摸,所以此條件僅對每次觸摸一次為真:下次使用時,將是新觸摸,否則將返回如果沒有更多的接觸剛剛結束,則返回false。","Check if a touch has just started on this frame. The touch identifiers can be accessed using StartedTouchId() and StartedTouchCount().":"檢查此框架上是否剛剛開始觸摸。可以使用StartedTouchId()和StartedTouchCount()訪問觸摸標識符。","Started touch count":"開始觸摸計數","The number of touches that have just started on this frame. The touch identifiers can be accessed using StartedTouchId().":"剛剛在此框架上啟動的觸摸次數。可以使用spectTouchID()訪問觸摸標識符。","Started touch identifier":"開始觸摸標識符","The identifier of the touch that has just started on this frame. The number of touches can be accessed using StartedTouchCount().":"剛剛在此幀上開始的觸摸的標識符。可以使用 StartedTouchCount() 訪問觸摸次數。","Touch index":"觸摸索引","Check if a touch has just started or the mouse left button has been pressed on this frame. The touch identifiers can be accessed using StartedTouchOrMouseId() and StartedTouchOrMouseCount().":"檢查是否剛剛開始觸摸或在此幀上按下鼠標左鍵。可以使用 StartedTouchOrMouseId() 和 StartedTouchOrMouseCount() 訪問觸摸標識符。","The number of touches (including the mouse) that have just started on this frame. The touch identifiers can be accessed using StartedTouchOrMouseId().":"在此幀上剛剛開始的觸摸次數(包括鼠標)。可以使用 StartedTouchOrMouseId() 訪問觸摸標識符。","The identifier of the touch or mouse that has just started on this frame. The number of touches can be accessed using StartedTouchOrMouseCount().":"剛剛在此幀上開始的觸摸或鼠標的標識符。可以使用 StartedTouchOrMouseCount() 訪問觸摸次數。","Check if a touch has ended or a mouse left button has been released.":"檢查觸摸是否結束或鼠標左鍵是否已釋放。","The touch with identifier _PARAM1_ has ended":"使用標識符_PARAM1_ 的觸摸已結束","Mouse wheel: Displacement":"鼠標滾輪: 滾動","Mouse wheel displacement":"鼠標滾輪滾動","Identifier of the last touch":"最后觸摸的id","Identifier of the last ended touch":"最后一次觸摸的標識符","Text manipulation":"文本操作","Insert a new line":"插入新行","Get character from code point":"從代碼點獲取字符","Code point":"代碼點","Uppercase a text":"文本字母大寫","Lowercase a text":"文本字母小寫","Get a portion of a text":"獲取文本的一部分","Start position of the portion (the first letter is at position 0)":"部分的開始位置(首字母位置在0)","Length of the portion":"部分的寬度","Get a character from a text":"從文本文件獲取一個字符","Position of the character (the first letter is at position 0)":"字符的位置(首字母位置在0)","Repeat a text":"讀取文本","Text to repeat":"文字重復","Repetition count":"子重現計數","Length of a text":"文本的長度","Search in a text":"在文本文件中搜索","Search in a text (return the position of the result or -1 if not found)":"文本內搜索(結果返回位置,未找到返回-1)","Text to search for":"要搜索的文本","Search the last occurrence in a text":"搜索文本中的最后一次匹配項","Search the last occurrence in a string (return the position of the result, from the beginning of the string, or -1 if not found)":"搜索字符串中的最后一個匹配項(返回結果的位置,從字符串的開頭開始,如果未找到,則返回-1)","Search in a text, starting from a position":"在文本中,從一個位置中開始搜索","Search in a text, starting from a position (return the position of the result or -1 if not found)":"在文本中搜索,從一個位置開始(返回結果的位置,否則返回-1)","Position of the first character in the string to be considered in the search":"在搜索中要考慮的字符串中第一個字符的位置","Search the last occurrence in a text, starting from a position":"從某個位置開始搜索文本中的最后一個匹配項","Search in a text the last occurrence, starting from a position (return the position of the result, from the beginning of the string, or -1 if not found)":"在文本中搜索最后一次出現的位置,從一個位置開始(返回結果的位置,從字符串的開頭開始,如果沒有找到則返回 -1)","Position of the last character in the string to be considered in the search":"在搜索中要考慮的字符串中最后一個字符的位置","Replace the first occurrence of a text by another.":"用另一個文本替換第一次出現的文本。","Text in which the replacement must be done":"必須進行替換的文本","Text to find inside the first text":"在第一個文本中查找的文本","Replacement to put instead of the text to find":"替換要放置的文本,而不是要查找的文本","Replace all occurrences of a text by another.":"用另一個文本替換所有出現的文本。","Text in which the replacement(s) must be done":"文本的替換(s)必須完成","Event functions":"事件函數","Advanced control features for functions made with events.":"用于事件函數的高級控制功能。","Set number return value":"設定數字返回值","Set the return value of the events function to the specified number (to be used with \"Expression\" functions).":"將事件函數的返回值設定到指定的數字 (使用“表達式”函數)。","Set return value to number _PARAM0_":"將返回值設定為數字 _PARAM0_","The number to be returned":"要返回的數字","Set text return value":"設定文本返回值","Set the return value of the events function to the specified text (to be used with \"String Expression\" functions).":"將事件函數的返回值設定到指定的文本 (使用 \"字符串表達式\" 函數)。","Set return value to text _PARAM0_":"將返回值設定為文本 _PARAM0_","The text to be returned":"要返回的文本","Set condition return value":"設定條件返回值","Set the return value of the Condition events function to either true (condition will pass) or false.":"設定條件事件函數返回值為 true (條件將通過) 或 false。","Set return value of the condition to _PARAM0_":"將條件的返回值設定為 _PARAM0_","Should the condition be true or false?":"條件應該是真還是假?","Copy function parameter to variable":"將函數參數複製到變量","Copy a function parameter (also called \"argument\") to a variable. The parameter type must be a variable.":"將函數參數(也稱“參數”)複製到一個變量。參數類型必須是變量。","Copy the parameter _PARAM0_ into the variable _PARAM1_":"將參數 _PARAM0_ 複製到變量 _PARAM1_","Copy variable to function parameter":"複製變量到函數參數","Copy a variable to function parameter (also called \"argument\"). The parameter type must be a variable.":"將變量複製到函數參數(也稱為“參數”)。參數類型必須是變量。","Copy the variable _PARAM1_ into the parameter _PARAM0_":"將變量 _PARAM1_ 複製到參數 _PARAM0_","Check if a function parameter is set to true (or yes)":"檢查函數參數是否設定為 true (或是)","Check if the specified function parameter (also called \"argument\") is set to True or Yes. If the argument is a string, an empty string is considered as \"false\". If it's a number, 0 is considered as \"false\".":"檢查指定函數參數(也稱“參數”)是否設定為 True 或 。 如果參數是字符串,則空字符串被視為“false”。如果是一個數字,則0被視為“false”。","Parameter _PARAM0_ is true":"參數 _PARAM0_ 為 true","Get function parameter value":"獲取函數參數值","Get function parameter (also called \"argument\") value. You don't need this most of the time as you can simply write the parameter name in an expression.":"獲取函數參數 (也稱為“參數”) 值。在大多數情況下,您不需要這樣做,因為您可以簡單地在表達式中寫入參數名稱。","Get function parameter text":"獲取函數參數文本","Get function parameter (also called \"argument\") text. You don't need this most of the time as you can simply write the parameter name in an expression.":"獲取函數參數 (也稱為“參數”) 文本。在大多數情況下,您不需要這樣做,因為您可以簡單地在表達式中寫入參數名稱。","Compare function parameter value":"比較函數參數值","Compare function parameter (also called \"argument\") value.":"比較函數參數(也稱為“參數”) 值。","Parameter _PARAM0_":"參數 _PARAM0_","Compare function parameter text":"比較函數參數文本","Compare function parameter (also called \"argument\") text.":"比較函數參數(也稱為“參數”) 文本。","Events and control flow":"事件和控制流程","This condition always returns true (or always false, if the condition is inverted).":"這個條件總是返回true(或者如果條件反轉,則總是為是錯的)。","Or":"或","Checks if at least one sub-condition is true. If no sub-condition is specified, it will always be false. This is rarely used — multiple events and sub-events are usually a better approach.":"Checks if at least one sub-condition is true. If no sub-condition is specified, it will always be false. This is rarely used — multiple events and sub-events are usually a better approach.","If one of these conditions is true:":"如果其中一個條件為真 ︰","And":"與","Checks if all sub-conditions are true. If no sub-condition is specified, it will always be false. This is rarely needed, as events already check all conditions before running actions.":"Checks if all sub-conditions are true. If no sub-condition is specified, it will always be false. This is rarely needed, as events already check all conditions before running actions.","If all of these conditions are true:":"如果這些條件都為真 :","Not":"非","Returns the opposite of the sub-condition(s) result. This is rarely needed, as most conditions can be inverted or expressed more simply.":"Returns the opposite of the sub-condition(s) result. This is rarely needed, as most conditions can be inverted or expressed more simply.","Invert the logical result of these conditions:":"顛倒這些條件的邏輯結果:","Trigger once while true":"當 true 時觸發一次","Run the actions once when the previous conditions are true. If they become false and later true again, the actions will run again.\nThis condition is always last in the list.\n\nNote: internally, this uses a global trigger state; it's not tracked per object instance. Be careful if you use this in a loop or For Each event (consider using object variables instead if needed).":"當先前的條件為真時執行動作一次。如果這些條件變為假並再次變為真,則動作將再次執行。\n此條件在列表中始終是最後一項。\n\n注意:在內部,這是使用全局觸發狀態;它不是每個物件實例獨立追蹤的。如果您在循環或每個事件中使用這個,請小心(如有需要,考慮使用物件變數)。","Trigger once":"觸發一次","Compare two numbers":"比較兩個數字","Compare the two numbers.":"比較兩個數字。","_PARAM0_ _PARAM1_ _PARAM2_":"_PARAM0_ _PARAM1_ _PARAM2_","Compare two strings":"比較兩個字符串","Compare the two strings.":"比較兩個字符串。","First string expression":"第一個字符串表達式","Second string expression":"第二個字符串表達式","Standard event":"標準事件","Standard event: Actions are run if conditions are fulfilled.":"標準事件: 如果滿足條件, 則運行操作。","Else event: Actions are run if previous events in the chain were not fulfilled.":"其他事件:如果鏈中的先前事件未完成,則執行操作。","Link external events":"鏈接外部事件","Link to external events.":"鏈接到外部事件。","Event displaying a text in the events editor.":"事件在事件編輯器中顯示文本。","While":"條件循環","Repeat the event while the conditions are true.":"在條件為真時重復該事件。","Repeat":"重復","Repeat the event for a specified number of times.":"將事件重復指定次數。","For each object":"對于每個物件","Repeat the event for each specified object.":"為每個指定的物件重復事件","For each child variable (of a structure or array)":"對于每個子變量 (結構或數組)","Repeat the event for each child variable of a structure or array.":"對結構或數組中的每個子變量重復事件。","Event group":"事件組","Group containing events.":"包含事件的群組。","Variable value":"變量值","Compare the number value of a variable.":"比較變量的數值。","The variable _PARAM0_":"變量 _PARAM0_","Compare the text (string) of a variable.":"比較變量的文本 (字符串)。","Compare the boolean value of a variable.":"比較變量的布爾值。","The variable _PARAM0_ is _PARAM1_":"變量 _PARAM0_ 是 _PARAM1_","Check if the value is":"檢查值是否為","Change variable value":"更改變量值","Modify the number value of a variable.":"修改變量的數值。","the variable _PARAM0_":"變量 _PARAM0_","Modify the text (string) of a variable.":"修改變量的文本 (字符串)。","Modify the boolean value of a variable.":"修改變量的布爾值。","Change the variable _PARAM0_: _PARAM1_":"更改變量 _PARAM0_:_PARAM1_","Number of children":"子項數量","Compare the number of children in an array variable.":"比較數組變量中的子級數量。","The number of children in the array variable _PARAM0_":"數組變量 _PARAM0_ 中的子級數","Arrays and structures":"數組和結構","Array variable":"數組變量","Child existence":"子存在","Check if the specified child of the structure variable exists.":"檢查結構變量的指定子級是否存在。","Child _PARAM1_ of variable _PARAM0_ exists":"變量 _PARAM0_ 的子 _PARAM1_ 存在","Name of the child":"子的名字","Remove a child":"刪除子","Remove a child from a structure variable.":"從結構變量中刪除子項。","Remove child _PARAM1_ from structure variable _PARAM0_":"從結構變量 _PARAM0_ 中刪除子 _PARAM1_","Structure variable":"結構變量","Child's name":"子名稱","Clear children":"清除子項","Remove all the children from the structure or array variable.":"從結構或數組變量中刪除所有子項。","Clear children from variable _PARAM0_":"從變量 _PARAM0_ 清除子項","Structure or array variable":"結構或數組變量","Add existing variable":"添加現有變量","Adds an existing variable at the end of an array variable.":"在數組變量的末尾添加現有變量。","Add variable _PARAM1_ to array variable _PARAM0_":"將變量 _PARAM1_ 添加到數組變量 _PARAM0_","Variable with the content to add":"要添加內容的變量","The content of the variable will *be copied* and added at the end of the array.":"變量的內容將*被複製*并添加到數組的末尾。","Add value to array variable":"向陣列變量添加值","Adds a text (string) at the end of a array variable.":"在數組變量的末尾添加文本 (字符串)。","Add the value _PARAM1_ to array variable _PARAM0_":"將值 _PARAM1_ 添加到數組變量 _PARAM0_","Text to add":"要添加的文本","Adds a number at the end of an array variable.":"在數組變量的末尾添加一個數字。","Number to add":"要添加的號碼","Adds a boolean at the end of an array variable.":"在數組變量的末尾添加一個布爾值。","Boolean to add":"要添加的布爾值","Remove variable by index":"按索引刪除變量","Removes a variable at the specified index of an array variable.":"刪除數組變量指定索引處的變量。","Remove variable at index _PARAM1_ from array variable _PARAM0_":"從數組變量 _PARAM0_ 中刪除索引 _PARAM1_ 處的變量","Index to remove":"要刪除的索引","First text child":"第一個文本子項","Get the value of the first element of an array variable, if it is a text (string).":"獲取數組變量的第一個元素的值,如果它是文本(字符串)。","First number child":"第一個數字子項","Get the value of the first element of an array variable, if it is a number.":"獲取數組變量的第一個元素的值,如果它是一個數字。","Last text child":"最后文本子項","Get the value of the last element of an array variable, if it is a text (string).":"獲取數組變量最后一個元素的值,如果它是文本(字符串)。","Last number child":"最后一個數字子項","Get the value of the last element of an array variable, if it is a number.":"獲取數組變量的最后一個元素的值,如果它是一個數字。","Number variable":"數字變量","Compare the number value of a scene variable.":"比較場景變量的數值。","The number of scene variable _PARAM0_":"場景變量的數量 _PARAM0_","External variables ❯ Scene variables":"外部變量 ❯ 場景變量","Text variable":"文本變量","Compare the text (string) of a scene variable.":"比較場景變量的文本 (字符串)。","The text of scene variable _PARAM0_":"場景變量_PARAM0_ 的文本","Boolean variable":"布爾變量","Compare the boolean value of a scene variable.":"比較場景變量的布爾值。","The boolean value of scene variable _PARAM0_ is _PARAM1_":"場景變量 _PARAM0_ 的布爾值是 _PARAM1_","Check if the specified child of the scene structure variable exists.":"檢查場景結構變量的指定子項是否存在。","Child _PARAM1_ of scene variable _PARAM0_ exists":"場景變量 _PARAM0_ 的子級 _PARAM1_ 存在","External variables ❯ Scene variables ❯ Arrays and structures":"外部變量 ❯ 場景變量 ❯ 數組和結構","Check if the specified child of the global structure variable exists.":"檢查全局結構變量的指定子項是否存在。","Child _PARAM1_ of global variable _PARAM0_ exists":"全局變量 _PARAM0_ 的子 _PARAM1_ 存在","External variables ❯ Global variables ❯ Arrays and structures":"外部變量 ❯ 全局變量 ❯ 數組和結構","Compare the number value of a global variable.":"比較一個全局變量的數值。","the global variable _PARAM0_":"全局變量 _PARAM0_","External variables ❯ Global variables":"外部變量 ❯ 全局變量","Compare the text (string) of a global variable.":"比較全局變量的文本 (字符串)。","the text of the global variable _PARAM0_":"全局變量 _PARAM0_ 的文本","Compare the boolean value of a global variable.":"比較一個全局變量的布爾值。","The boolean value of global variable _PARAM0_ is _PARAM1_":"全局變量 _PARAM0_ 的布爾值是 _PARAM1_","Change number variable":"更改數字變量","Modify the number value of a scene variable.":"修改場景變量的數值。","the scene variable _PARAM0_":"場景變量 _PARAM0_","Change text variable":"更改文本變量","Modify the text (string) of a scene variable.":"修改場景變量的文本(字符串)。","the text of scene variable _PARAM0_":"場景變量_PARAM0_ 的文本","Change boolean variable":"更改布爾變量","Modify the boolean value of a scene variable.":"修改場景變量的布爾值。","Set the boolean value of scene variable _PARAM0_ to _PARAM1_":"設定場景變量 _PARAM0_ 的布爾值為 _PARAM1_","New Value:":"新值:","Toggle boolean variable":"切換布爾變量","Toggle the boolean value of a scene variable.":"切換場景變量的布爾值。","If it was true, it will become false, and if it was false it will become true.":"如果為真,它就會變為假,如果為假,它就會變為真。","Toggle the boolean value of scene variable _PARAM0_":"切換場景變量 _PARAM0_ 的布爾值","Modify the number value of a global variable.":"修改全局變量的數值。","Modify the text (string) of a global variable.":"修改全局變量的文本 (字符串)。","the text of global variable _PARAM0_":"全局變量 _PARAM0_ 的文本","Modify the boolean value of a global variable.":"修改全局變量的布爾值。","Set the boolean value of global variable _PARAM0_ to _PARAM1_":"設定全局變量 _PARAM0_ 的布爾值為 _PARAM1_","Toggle the boolean value of a global variable.":"切換全局變量的布爾值。","Toggle the boolean value of global variable _PARAM0_":"切換全局變量 _PARAM0_ 的布爾值","Remove a child from a scene structure variable.":"從場景結構變量中刪除一個子變量。","Remove child _PARAM1_ from scene structure variable _PARAM0_":"從場景結構變量 _PARAM0_ 中刪除子項 _PARAM1_","Remove a child from a global structure variable.":"從全局結構變量中刪除一個子項。","Remove child _PARAM1_ from global structure variable _PARAM0_":"從全局結構變量 _PARAM0_ 中刪除子項 _PARAM1_","Remove all the children from the scene structure or array variable.":"從場景結構或數組變量中刪除所有子項。","Clear children from scene variable _PARAM0_":"清除場景變量 _PARAM0_ 中的子級","Remove all the children from the global structure or array variable.":"從全局結構或數組變量中刪除所有子項。","Clear children from global variable _PARAM0_":"清除全局變量_PARAM0_中的子項","Adds an existing variable at the end of a scene array variable.":"在場景數組變量的末尾添加一個現有變量。","Scene variable with the content to add":"要添加內容的場景變量","Add text variable":"添加文本變量","Adds a text (string) at the end of a scene array variable.":"在場景數組變量的末尾添加文本 (字符串)。","Add text _PARAM1_ to array variable _PARAM0_":"將文本 _PARAM1_ 添加到數組變量 _PARAM0_","Add number variable":"添加數字變量","Adds a number at the end of a scene array variable.":"在場景數組變量的末尾添加一個數字。","Add number _PARAM1_ to array variable _PARAM0_":"將數字 _PARAM1_ 添加到數組變量 _PARAM0_","Add boolean variable":"添加布爾變量","Adds a boolean at the end of a scene array variable.":"在場景數組變量的末尾添加一個布爾值。","Add boolean _PARAM1_ to array variable _PARAM0_":"將布爾值 _PARAM1_ 添加到數組變量 _PARAM0_","Removes a variable at the specified index of a scene array variable.":"在場景數組變量的指定索引處刪除變量。","Remove variable at index _PARAM1_ from scene array variable _PARAM0_":"從場景數組變量 _PARAM0_ 中刪除索引 _PARAM1_ 處的變量","Compare the number of children in a scene array variable.":"比較場景數組變量中的子物件數。","Get the value of the first element of a scene array variable, if it is a text (string).":"獲取場景數組變量的第一個元素的值,如果它是文本(字符串)。","Get the value of the first element of a scene array variable, if it is a number.":"獲取場景數組變量的第一個元素的值,如果它是一個數字。","Get the value of the last element of a scene array variable, if it is a text (string).":"獲取場景數組變量的最后一個元素的值,如果它是文本(字符串)。","Get the value of the last element of a scene array variable, if it is a number.":"獲取場景數組變量的最后一個元素的值,如果它是一個數字。","Adds an existing variable at the end of a global array variable.":"在全局數組變量的末尾添加一個現有變量。","Removes a variable at the specified index of a global array variable.":"移除全局數組變量的指定索引處的變量。","Remove variable at index _PARAM1_ from global array variable _PARAM0_":"從全局數組變量 _PARAM0_ 中刪除索引 _PARAM1_ 的變量","Adds a text (string) at the end of a global array variable.":"在全局數組變量的末尾添加一個文本 (字符串)。","Adds a number at the end of a global array variable.":"在全局數組變量的末尾添加一個數字。","Adds a boolean at the end of a global array variable.":"在全局數組變量的末尾添加一個布爾值。","Compare the number of children in a global array variable.":"比較全局數組變量中的子項數。","The number of children of the array variable _PARAM0_":"數組變量_PARAM0_ 的子項數","Value of the first element of a global array variable, if it is a text (string) variable.":"全局數組變量的第一個元素的值,如果它是文本(字符串) 變量。","Value of the first element of a global array variable, if it is a number variable":"全局數組變量的第一個元素的值,如果它是一個數字變量","Value of the last element of a global array variable, if it is a text (string) variable.":"全局數組變量的最后一個元素的值,如果它是文本(字符串) 變量。","Value of the last element of a global array variable, if it is a number variable":"全局數組變量的最后一個元素的值,如果它是一個數字變量","Number of children in a global array or structure variable":"全局數組或結構變量中的子級數","Array or structure variable":"數組或結構變量","Number of children in a scene array or structure variable":"場景數組或結構變量中的子級數","Number value of a scene variable":"場景變量的數值","Text of a scene variable":"場景變量的文本","Number value of a global variable":"全局變量的數值","Name of the global variable":"全局變量的名稱","Text of a global variable":"全局變量的文本","Sprite are animated objects which can be used for most elements of a 2D game.":"精靈是動畫物件,可以用於遊戲的大多數元素。","Animated object which can be used for most elements of a 2D game.":"可用於遊戲的大多數元素的動畫物件。","Sprite opacity":"精靈不透明度","Change the opacity of a Sprite. 0 is fully transparent, 255 is opaque (default).":"更改精靈的不透明度。0 是完全透明的,255 是不透明的(默認)。","Change the animation":"更改動畫","Change the animation of the object, using the animation number in the animations list.":"使用動畫列表中的動畫編號更改物件的動畫。","Change the animation (by name)":"更改動畫(按名稱)","Change the animation of the object, using the name of the animation.":"使用動畫的名稱更改物件的動畫。","Set animation of _PARAM0_ to _PARAM1_":"將 _PARAM0_ 的動畫設定為 _PARAM1_","Change the direction":"更改方向","Change the direction of the object.\nIf the object is set to automatically rotate, the direction is its angle.\nIf the object is in 8 directions mode, the valid directions are 0..7":"改變物件的方向。\n如果物件被設定為自動旋轉,則方向是其角度。\n如果物件處于8方向模式,則有效方向為0..7","the direction":"方向","Current frame":"當前幀","Modify the current frame of the object":"變更物件的當前幀","the animation frame":"動畫幀","Play the animation":"播放動畫","Play the animation of the object":"播放物件的動畫","Play the animation of _PARAM0_":"播放_PARAM0_ 的動畫","Modify the animation speed scale (1 = the default speed, >1 = faster and <1 = slower).":"更改動畫速度比例(1=默認速度,>1 =更快 ,<1 =更慢)","Object to be rotated":"物件被旋轉","Angular speed (degrees per second)":"角速度 ( 單位為度每秒 )","Modify the scale of the width of an object.":"修改物件的寬度的比例","Modify the scale of the height of an object.":"修改物件的高度的比例","Change the width of a Sprite object.":"更改精靈物件的寬度。","Compare the width of a Sprite object.":"比較Sprite 物件的寬度。","Change the height of a Sprite object.":"更改精靈物件的高度。","Compare the height of a Sprite object.":"比較Sprite 物件的高度","Current animation":"當前動畫","Compare the number of the animation played by the object.":"比較物件所播放動畫的數量。","Current animation name":"當前動畫名稱","Check the animation played by the object.":"檢查物件播放的動畫。","The animation of _PARAM0_ is _PARAM1_":"_PARAM0_ 的動畫是 _PARAM1_","Current direction":"當前方向","Compare the direction of the object. If 8 direction mode is activated for the sprite, the value taken for direction will be from 0 to 7. Otherwise, the direction is in degrees.":"比較物件的方向。如果精靈的8方向模式已激活,方向的值為0到7 . 否則,方向是度.","Compare the index of the current frame in the animation displayed by the specified object. The first frame in an animation starts at index 0.":"比較指定物件顯示的動畫中當前幀的索引。動畫中的第一幀始于索引0。","Compare the scale of the width of an object.":"比較物件的寬度的比例","Compare the scale of the height of an object.":"比較物件的高度的比例","Compare the opacity of a Sprite, between 0 (fully transparent) to 255 (opaque).":"比較精靈的不透明度,介于 0 (完全透明) 到 255 (不透明)。","Blend mode":"混合模式","Compare the number of the blend mode currently used by an object":"比較物件當前使用的混合模式","the number of the current blend mode":"當前混合模式的編號","Change the tint of an object. The default color is white.":"更改物件的顏色。默認顏色為白色。","Change the number of the blend mode of an object.\nThe default blend mode is 0 (Normal).":"更改物件混合模式的編號。\n默認混合模式為0(正常)。","Change Blend mode of _PARAM0_ to _PARAM1_":"_PARAM0_ 改變混合模式為 _PARAM1_","X position of a point":"點的X坐標","Name of the point":"點的名稱","Y position of a point":"點的Y坐標","Direction of the object":"物件的方向","Animation of the object":"物件的動畫","Name of the animation of the object":"暫停物件的當前動畫","Current frame of the animation of the object":"物件動畫的當前幀","Number of frames":"幀數","Number of frames in the current animation of the object":"物件當前動畫中的幀數","Scale of the width of an object":"物件的寬度的比值","Scale of the height of an object":"物件的高度的比值","Collision (Pixel perfect)":"碰撞 (像素完美)","The condition is true if there is a collision between the two objects.\nThe test is pixel-perfect.":"如果有兩個物體之間的碰撞條件為真. \n測試是完美的。","_PARAM0_ is in collision with _PARAM1_ (pixel perfect)":"_PARAM0_ 與 _PARAM1_ 碰撞(像素完美)","Game window and resolution":"遊戲窗口和分辨率","De/activate fullscreen":"禁/激活 全屏","This action activates or deactivates fullscreen.":"這一行動啟動或關閉全屏。","Activate fullscreen: _PARAM1_ (keep aspect ratio: _PARAM2_)":"激活全屏 ︰ _PARAM1_ (保持縱橫比 ︰ _PARAM2_)","Activate fullscreen":"激活全屏","Keep aspect ratio (HTML5 games only, yes by default)":"保持縱橫比 (僅HTML5 遊戲,yes為默認)","Fullscreen activated?":"全屏已激活?","Check if the game is currently in fullscreen.":"檢查遊戲是否當前全屏。","The game is in fullscreen":"遊戲在全屏中","Window's margins":"窗口的邊距","This action changes the margins, in pixels, between the game frame and the window borders.":"這個動作會改變遊戲框架和窗口邊界之間的像素間距。","Set margins of game window to _PARAM1_;_PARAM2_;_PARAM3_;_PARAM4_":"設定遊戲窗口的邊距 _ PARAM1_;_PARAM2_;_PARAM3_;_PARAM4 _","Game resolution":"遊戲分辨率","Changes the resolution of the game, effectively changing the game area size. This won't change the size of the window in which the game is running.":"更改遊戲的分辨率,有效改變遊戲區域大小。 這不會改變遊戲運行的窗口的大小。","Set game resolution to _PARAM1_x_PARAM2_":"將遊戲分辨率設定為 _PARAM1_x_PARAM2_","Game window size":"遊戲窗口大小","Changes the size of the game window. Note that this will only work on platform supporting this operation: games running in browsers or on mobile phones can not update their window size. Game resolution can still be updated.":"更改遊戲窗口的大小。 請注意,這只能在支持此操作的平臺上運行:在瀏覽器或手機上運行的遊戲無法更新其窗口大小。 遊戲分辨率仍然可以更新。","Set game window size to _PARAM1_x_PARAM2_ (also update game resolution: _PARAM3_)":"設定遊戲窗口大小為 _PARAM1_x_PARAM2_ (也更新遊戲分辨率:_PARAM3_)","Also update the game resolution? If not, the game will be stretched or reduced to fit in the window.":"也更新遊戲分辨率?如果沒有,遊戲將被拉伸或縮小到適合窗口。","Center the game window on the screen":"在屏幕上居中遊戲窗口","This action centers the game window on the screen. This only works on Windows, macOS and Linux (not when the game is executed in a web-browser or on iOS/Android).":"此操作將遊戲窗口置于屏幕中間。 這只適用于Windows、 macOS 和 Linux(不是當遊戲在網頁瀏覽器或在 iOS/ Android中執行)。","Center the game window":"居中遊戲窗口","Game resolution resize mode":"遊戲分辨率調整大小模式","Set if the width or the height of the game resolution should be changed to fit the game window - or if the game resolution should not be updated automatically.":"如果遊戲分辨率的寬度或高度被更改以適合遊戲窗口 - 或者如果遊戲分辨率不應自動更新,則設定。","Set game resolution resize mode to _PARAM1_":"設定遊戲分辨率調整模式為 _PARAM1_","Resize mode":"調整大小模式","Empty to disable resizing. \"adaptWidth\" will update the game width to fit in the window or screen. \"adaptHeight\" will do the same but with the game height.":"為空以禁用調整大小。 “ adaptWidth”將更新遊戲寬度以適合窗口或屏幕。 “ adaptHeight”將與遊戲高度相同。","Automatically adapt the game resolution":"自動調整遊戲分辨率","Set if the game resolution should be automatically adapted when the game window or screen size change. This will only be the case if the game resolution resize mode is configured to adapt the width or the height of the game.":"設定當遊戲窗口或屏幕大小改變時是否自動調整遊戲分辨率。 只有當遊戲分辨率調整模式被配置為適應遊戲的寬度或高度時才會出現這種情況。","Automatically adapt the game resolution: _PARAM1_":"自動調整遊戲分辨率:_PARAM1_","Update resolution during the game to fit the screen or window size?":"在遊戲中更新分辨率以適應屏幕或窗口大小?","Window's icon":"Windows圖標","This action changes the icon of the game's window.":"此操作將更改遊戲窗口的圖標。","Use _PARAM1_ as the icon for the game's window.":"使用 _ PARAM1 盡可能遊戲窗口的圖標。","Name of the image to be used as the icon":"用作圖標的圖像的名稱","Window's title":"窗口的標題","This action changes the title of the game's window.":"此操作更改遊戲窗口的標題。","Change window title to _PARAM1_":"將窗口標題更改為 _PARAM1_","New title":"新標題","Width of the scene window":"場景窗口的寬度","Width of the scene window (or scene canvas for HTML5 games)":"場景窗口的寬度 (或 HTML5 遊戲的場景畫布)","Height of the scene window":"場景窗口的高度","Height of the scene window (or scene canvas for HTML5 games)":"場景窗口的高度(或HTML5遊戲的場景畫布)","Width of the screen/page":"屏幕/頁面的寬度","Width of the screen (or the page for HTML5 games in browser)":"屏幕寬度(或瀏覽器中的HTML5遊戲頁面)","Height of the screen/page":"屏幕/頁面的高度","Height of the screen (or the page for HTML5 games in browser)":"屏幕高度(或瀏覽器中的HTML5遊戲頁面)","Color depth":"顏色深度","Timers and time":"計時器與時間","Value of a scene timer":"場景計時器的值","Test the elapsed time of a scene timer.":"測試場景計時器經過的時間。","The timer _PARAM2_ is greater than _PARAM1_ seconds":"計時器 _PARAM2_ 大于 _PARAM1_ 秒","Time in seconds":"以秒為單位的時間","Timer's name":"計時器的名稱","Compare the elapsed time of a scene timer. This condition doesn't start the timer and will always be false if the timer was not started previously (whatever the comparison being made).":"Compare the elapsed time of a scene timer. This condition doesn't start the timer and will always be false if the timer was not started previously (whatever the comparison being made).","The timer _PARAM1_ _PARAM2_ _PARAM3_ seconds":"定時器 _PARAM1_ _PARAM2_ _PARAM3_ 秒","Time scale":"時間比例","Compare the time scale of the scene.":"比較場景的時間比例。","the time scale of the scene":"場景的時間比例","Scene timer paused":"場景計時器暫停","Test if the specified scene timer is paused.":"測試指定場景計時器是否已暫停。","The timer _PARAM1_ is paused":"計時器 _PARAM1_ 已暫停","Start (or reset) a scene timer":"啟動(或重置) 場景定時器","Reset the specified scene timer, if the timer doesn't exist it's created and started.":"重置指定的場景計時器,如果計時器不存在,它已創建并啟動。","Start (or reset) the timer _PARAM1_":"啟動(或重置) 計時器 _PARAM1_","Pause a scene timer":"暫停場景計時器","Pause a scene timer.":"暫停場景計時器。","Pause timer _PARAM1_":"暫停計時器 _PARAM1_","Unpause a scene timer":"取消暫停場景計時器","Unpause a scene timer.":"取消暫停場景計時器。","Unpause timer _PARAM1_":"取消暫停計時器 _PARAM1_","Delete a scene timer":"刪除場景計時器","Delete a scene timer from memory.":"從內存中刪除場景計時器。","Delete timer _PARAM1_ from memory":"從內存中刪除計時器 _PARAM1_","Change the time scale of the scene.":"更改場景的時間比例。","Set the time scale of the scene to _PARAM1_":"將場景的時間比例設定為 _PARAM1_","Wait X seconds":"等待 X 秒","Waits a number of seconds before running the next actions (and sub-events).":"在運行下一個動作(和子活動)之前等待幾秒鐘。","Wait _PARAM0_ seconds":"等待 _PARAM0_ 秒","Time to wait in seconds":"等待時間(秒)","Time elapsed since the last frame":"上一幀結束后經過的時間","Time elapsed since the last frame rendered on screen":"屏幕上最后一幀渲染后經過的時間","Scene timer value":"場景計時器值","Value of a scene timer (in seconds)":"場景計時器的值(以秒為單位)","Time elapsed since the beginning of the scene (in seconds).":"自場景開始以來經過的時間(以秒為單位)。","Returns the time scale of the scene.":"返回場景的時間比例。","Gives the current time":"獲取當前時間","- Hour of the day: \"hour\"\n- Minutes: \"min\"\n- Seconds: \"sec\"\n- Day of month: \"mday\"\n- Months since January: \"mon\"\n- Year since 1900: \"year\"\n- Days since Sunday: \"wday\"\n- Days since Jan 1st: \"yday\"\n- Timestamp (ms): \"timestamp\"":"- 小時:小時\n- 分鐘:分鐘\n- 秒:秒\n- 月中的日:mday\n- 一月以來的月份:mon\n- 自1900年以來的年份:year\n- 自星期日以來的日數:wday\n- 自1月1日以來的日數:yday\n- 時間戳記(毫秒):timestamp","Existence of a group":"存在的組","Check if an element (example : PlayerState/CurrentLevel) exists in the stored data.\nSpaces are forbidden in element names.":"檢查是否在存儲的資料中存在元素 (例如: PlayerState/CurrentLevel) 。\n元素名中禁用空格。","_PARAM1_ exists in storage _PARAM0_":"_PARAM1_ 存在于存儲 _PARAM0_ 中","Storage name":"存儲名稱","Group":"組","Manually preload a storage in memory":"手動預加載存儲到內存中","Forces the specified storage to be loaded and kept in memory, allowing faster reads/writes. However, it requires manual management: if you use this action, you *must* also unload the storage manually when it's no longer needed to ensure data is persisted.\n\nUnless you have a specific performance need, avoid using this action. The system already handles loading/unloading automatically.":"強制指定的存儲被加載並保持在內存中,以便加快讀取/寫入速度。然而,這需要手動管理:如果您使用此操作,您*必須*在不再需要時手動卸載存儲,以確保數據持久化。\n\n除非您有特定的性能需求,否則應避免使用此操作。系統已經自動處理加載/卸載。","Load data storage _PARAM0_ in memory":"在內存中載入數據存儲 _PARAM0_","Manually unload and persist a storage":"手動卸載並持久化存儲","Close the specified storage previously loaded in memory, saving all changes made.":"關閉先前在內存中加載的指定存儲,保存所有所做的更改。","Unload and persist data storage _PARAM0_":"卸載並持久化數據存儲 _PARAM0_","Save a value":"保存一個值","Save the result of the expression in the stored data, in the specified element.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"將表達式的結果保存在存儲資料的指定元素中。\n使用/(示例:Root/Level/Current)指定通向元素的結構\n元素名稱中禁止使用空格。","Save value _PARAM2_ in _PARAM1_ of storage _PARAM0_":"將 _PARAM2_ 保存在存儲 _PARAM0_ 的 _PARAM1_ 中","Save a text":"保存文本","Save the text in the specified storage, in the specified element.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"將文本保存在指定的存儲中的指定元素中。\n使用/(例如:Root/Level/Current)指定指向元素的結構\n元素名稱中禁止使用空格。","Save text _PARAM2_ in _PARAM1_ of storage _PARAM0_":"將 _PARAM2_ 保存在存儲 _PARAM0_ 的 _PARAM1_ 中","Load a value":"加載一個值","Load the value saved in the specified element and store it in a scene variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"加載保存在指定元素中的值,并將其存儲在場景變量中。\n使用/(示例:Root/Level/Current)指定通向元素的結構\n元素名稱中禁止使用空格。","Load _PARAM1_ from storage _PARAM0_ and store value in _PARAM3_":"從存儲器 _PARAM0_ 加載 _PARAM1_ 并將值存儲在 _PARAM3_ 中","Load the value saved in the specified element and store it in a variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"加載保存在指定元素中的值,并將其存儲在變量中。\n使用/(示例:Root/Level/Current)指定通向元素的結構\n元素名稱中禁止使用空格。","Load a text":"加載文本","Load the text saved in the specified element and store it in a scene variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"加載保存在指定元素中的文本,并將其存儲在一個場景變量中。\n使用/(示例:Root/Level/Current)指定通向元素的結構\n元素名稱中禁止使用空格。","Load _PARAM1_ from storage _PARAM0_ and store as text in _PARAM3_":"從存儲器 _PARAM0_ 加載 _PARAM1_ 并將其作為文本存儲在 _PARAM3_ 中","Load the text saved in the specified element and store it in a variable.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"加載保存在指定元素中的文本,并將其存儲在變量中。\n使用/(示例:Root/Level/Current)指定通向元素的結構\n元素名稱中禁止使用空格。","Delete an element":"刪除元素","This action deletes the specified element from the specified storage.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names.":"此動作將從指定存儲中刪除指定的元素。\n指定導致元素的結構使用 / (例如: Root/Level/Current)\n元素名中禁止空格。","Delete _PARAM1_ from storage _PARAM0_":"從存儲 _PARAM0_ 刪除 _PARAM1_","Clear a storage":"清除存儲","Clear the specified storage, removing all data saved in it.":"清除指定的存儲,移除保存的所有資料。","Delete storage _PARAM0_":"刪除存儲 _PARAM0_","A storage exists":"存儲已存在","Test if the specified storage exists.":"測試指定存儲是否存在。","Storage _PARAM0_ exists":"存儲 _PARAM0_ 存在","Execute a command":"執行命令","This action executes the specified command.":"這個動作執行指定的命令。","Execute _PARAM0_":"執行 _PARAM0_","Command":"命令","Conversion":"轉換","Text > Number":"文字 > 數字","Convert the text to a number":"將文本轉換為數字","Text to convert to a number":"要轉換成數字的文本","Number > Text":"數字 > 文字","Convert the result of the expression to text":"轉換表達式的結果至文本","Expression to be converted to text":"要轉換為文本的表達式","Number > Text (without scientific notation)":"數字 > 文字(無科學記數法)","Convert the result of the expression to text, without using the scientific notation":"將表達式的結果轉換為文本,而不使用科學記數法","Degrees > Radians":"度 >> 弧度","Converts the angle, expressed in degrees, into radians":"將角度(以度表示)轉換為弧度","Radians > Degrees":"弧度 > 度","Converts the angle, expressed in radians, into degrees":"將以弧度表示的角度轉換為度數","Angle, in radians":"以弧度為單位的角度","Convert variable to JSON":"將變量轉換為 JSON","Convert a variable to JSON":"將變量轉換為 JSON","JSON":"JSON","The variable to be stringified":"要字符串化的變量","Convert global variable to JSON":"將全局變量轉換為JSON","Convert a global variable to JSON":"將全局變量轉換為JSON","The global variable to be stringified":"全局變量被字符串化","Convert object variable to JSON":"將物件變量轉換為JSON","Convert an object variable to JSON":"將物件變量轉換為JSON","The object with the variable":"與變量的物件","The object variable to be stringified":"要被字符串化的物件變量","Convert JSON to a scene variable":"轉換 JSON 為場景變量","Parse a JSON object and store it into a scene variable":"解析 JSON 物件并將其存儲到場景變量中","Convert JSON string _PARAM0_ and store it into variable _PARAM1_":"轉換 JSON 字符串 _PARAM0_ 并存儲到變量 _PARAM1_","JSON string":"JSON 字符串","Variable where store the JSON object":"存儲JSON物件的變量","Convert JSON to global variable":"將JSON轉換為全局變量","Parse a JSON object and store it into a global variable":"解析一個JSON物件并將其存儲到一個全局變量中","Convert JSON string _PARAM0_ and store it into global variable _PARAM1_":"轉換 JSON 字符串 _PARAM0_ 并存儲到全局變量 _PARAM1_","Global variable where store the JSON object":"存儲JSON物件的全局變量","Convert JSON to a variable":"將 JSON 轉換為變量","Parse a JSON object and store it into a variable":"解析 JSON 物件並將其存儲到變量中","Variable where to store the JSON object":"存儲 JSON 物件的變量","Convert JSON to object variable":"將JSON轉換為物件變量","Parse a JSON object and store it into an object variable":"解析JSON物件并將其存儲到物件變量中","Parse JSON string _PARAM0_ and store it into variable _PARAM2_ of _PARAM1_":"解析JSON字符串_PARAM0_并將其存儲到_PARAM1_的變量_PARAM2_中","Object variable where store the JSON object":"存儲JSON物件的物件變量","Common features that can be used for all objects in GDevelop.":"可用于 GDevelop 中所有物件的共同特征。","Movement using forces":"使用力移動","Base object":"基本物件","Compare the X position of the object.":"比較物件的 X 位置。","the X position":"X 位置","Change the X position of an object.":"更改物件的 X 位置。","Compare the Y position of an object.":"比較物件的 Y 位置","the Y position":"Y 位置","Change the Y position of an object.":"更改物件的 Y 位置。","Change the position of an object.":"更改對象的位置。","Change the position of _PARAM0_: _PARAM1_ _PARAM2_ (x axis), _PARAM3_ _PARAM4_ (y axis)":"更改_PARAM0_的位置: _PARAM1_ _PARAM2_ (x 軸), _PARAM3_ _PARAM4_ (y 軸)","Modification's sign":"修改符號","Center position":"中心位置","Change the position of an object, using its center.":"以物件的中心位置更改其位置。","Change the position of the center of _PARAM0_: _PARAM1_ _PARAM2_ (x axis), _PARAM3_ _PARAM4_ (y axis)":"更改_PARAM0_的中心位置: _PARAM1_ _PARAM2_ (x 軸), _PARAM3_ _PARAM4_ (y 軸)","Center X position":"中心 X 位置","the X position of the center of rotation":"旋轉中心的 X 位置","the X position of the center":"中心的 X 位置","Center Y position":"中心 Y 位置","the Y position of the center of rotation":"旋轉中心的 Y 位置","the Y position of the center":"中心的 Y 位置","Bounding box left position":"邊框左側位置","the bounding box (the area encapsulating the object) left position":"邊界框(封裝物體的區域)左位置","the bounding box left position":"邊界框左側位置","Position ❯ Bounding Box":"位置 ❯ 邊框","Bounding box top position":"邊界框頂部位置","the bounding box (the area encapsulating the object) top position":"邊界框(封裝物體的區域)頂位置","the bounding box top position":"邊界框頂部位置","Bounding box right position":"邊界框右側位置","the bounding box (the area encapsulating the object) right position":"邊界框(封裝物體的區域)右位置","the bounding box right position":"邊界框右側位置","Bounding box bottom position":"邊界框底部位置","the bounding box (the area encapsulating the object) bottom position":"邊框(物件封裝區域)底部位置","the bounding box bottom position":"邊界框底部位置","Bounding box center X position":"邊界框中心 X 位置","the bounding box (the area encapsulating the object) center X position":"邊界框 (物件封裝區域) 中心 X 位置","the bounding box center X position":"邊界框中心 X 位置","Bounding box center Y position":"邊界框中心 Y 位置","the bounding box (the area encapsulating the object) center Y position":"邊界框(封裝物體的區域)中心Y位置","the bounding box center Y position":"邊界框中心Y位置","Put around a position":"放在某位置附近","Position the center of the given object around a position, using the specified angle and distance.":"使用指定的角度和距離,將給定物件的中心圍繞一個位置定位。","Put _PARAM0_ around _PARAM1_;_PARAM2_, with an angle of _PARAM4_ degrees and _PARAM3_ pixels distance.":"把 _PARAM0_ 圍繞 _PARAM1_ ; _PARAM2_ ,以 _PARAM4_ 角度和 _PARAM3_ 像素距離。","Change the angle of rotation of an object (in degrees). For 3D objects, this is the rotation around the Z axis.":"更改物件的旋轉角度(以度為單位)。對於3D物件,這是圍繞Z軸的旋轉。","Rotate":"旋轉","Rotate an object, clockwise if the speed is positive, counterclockwise otherwise. For 3D objects, this is the rotation around the Z axis.":"旋轉物件,如果速度為正則順時針,否則逆時針。對於3D物件,這是圍繞Z軸的旋轉。","Rotate _PARAM0_ at speed _PARAM1_ deg/second":"以 _PARAM1_deg/秒的速度旋轉 _PARAM0_","Rotate toward angle":"向角旋轉","Rotate an object towards an angle with the specified speed.":"以指定速度向一角度旋轉物件。","Rotate _PARAM0_ towards _PARAM1_ at speed _PARAM2_ deg/second":"以 _PARAM2_deg/秒的速度旋轉 _PARAM0_ 朝_PARAM1_","Angle to rotate towards (in degrees)":"要向住旋轉的角度 ( 以度為單位 )","Enter 0 for an immediate rotation.":"輸入 0 表示立即旋轉.","Rotate toward position":"向一位置旋轉","Rotate an object towards a position, with the specified speed.":"旋轉物體朝向一個位置,用指定的速度。","Rotate _PARAM0_ towards _PARAM1_;_PARAM2_ at speed _PARAM3_ deg/second":"旋轉 _PARAM0_ 朝著_PARAM1_; _PARAM2_ 以速度 _PARAM3_ deg/秒","Rotate toward another object":"朝向另一個物件旋轉","Rotate an object towards another object, with the specified speed. Note that if multiple instances of the target object are picked, only the first one will be used. Use a For Each event or actions like \"Pick nearest object\", \"Pick a random object\" to refine the choice of the target object.":"以指定的速度將物件朝向另一個物件旋轉。請注意,如果選擇了多個目標物件的實例,則只會使用第一個。使用「對每個」事件或動作,如「選擇最近的物件」、「選擇隨機物件」來精確選擇目標物件。","Target object":"目標物件","Add a force":"添加力","Add a force to an object. The object will move according to all of the forces it has.":"向物件添加一個力。物體將根據它所擁有的所有力移動。","Add to _PARAM0_ _PARAM3_ force of _PARAM1_ p/s on X axis and _PARAM2_ p/s on Y axis":"添加 _PARAM0_ _PARAM3_ 力在 _PARAM1_ p/s X 軸上 和 _PARAM2_ p/s Y 軸上","Speed on X axis (in pixels per second)":"X軸上的速度(像素每秒)","Speed on Y axis (in pixels per second)":"Y軸上的速度(像素每秒)","Force multiplier":"力量倍增","Add a force (angle)":"添加一個力 (角)","Add a force to an object. The object will move according to all of the forces it has. This action creates the force using the specified angle and length.":"向物件添加一個力。物體將根據它所擁有的所有力移動。此動作使用指定的角度和長度創建力。","Add to _PARAM0_ _PARAM3_ force, angle: _PARAM1_ degrees and length: _PARAM2_ pixels":"添加到 _PARAM0_ _PARAM3_ 力, 角度: _PARAM1_ 度和長度: _PARAM2_ 像素","Add a force to move toward a position":"添加一個力走向某位置","Add a force to an object to make it move toward a position.":"添加一個力使物件走向某個位置","Move _PARAM0_ toward _PARAM1_;_PARAM2_ with _PARAM4_ force of _PARAM3_ pixels":"將 _PARAM0_ 移動到 _PARAM1_; _PARAM2_ 和 _PARAM4_ 力的 _PARAM3_ 像素","Stop the object":"停止物件","Stop the object by deleting all of its forces.":"通過刪除所有的力來停止物件。","Stop _PARAM0_ (remove all forces)":"停止 _PARAM0_ (移除所有力量)","Delete the object":"刪除此物件","Delete the specified object.":"刪除指定的物件。","Delete _PARAM0_":"刪除 _PARAM0_","Z order":"Z次序","Modify the Z-order of an object":"修改物件的 Z 順序","the z-order":"z-順序","Move the object to a different layer.":"將其移至不同的列表。","Put _PARAM0_ on the layer _PARAM1_":"把 _PARAM0_ 放在圖層 _PARAM1_","Move it to this layer":"將其移動到此層","Change object variable value":"更改物件變量值","Modify the number value of an object variable.":"修改物件變量的數值。","the variable _PARAM1_":"變量 _PARAM1_","Modify the text of an object variable.":"修改物件變量的文本。","Modify the boolean value of an object variable.":"修改物件變量的布爾值。","Change the variable _PARAM1_ of _PARAM0_: _PARAM2_":"更改 _PARAM0_ 的變量 _PARAM1_:_PARAM2_","Object variable value":"物件變量值","Compare the number value of an object variable.":"比較物件變量的數值。","Compare the text of an object variable.":"比較物件變量的文本。","Compare the boolean value of an object variable.":"比較物件變量的布爾值。","The variable _PARAM1_ of _PARAM0_ is _PARAM2_":"_PARAM0_ 的變量 _PARAM1_ 是 _PARAM2_","the text of variable _PARAM1_":"變量 _PARAM1_ 的文本","Set the boolean value of variable _PARAM1_ of _PARAM0_ to _PARAM2_":"將 _PARAM0_ 的變量 _PARAM1_ 的布爾值設定為 _PARAM2_","Toggles the boolean value of an object variable.":"切換物件變量的布爾值。","Toggle the boolean value of variable _PARAM1_ of _PARAM0_":"切換_PARAM0_變量_PARAM1_ 的布爾值","Check if the specified child of the object structure variable exists.":"檢查物件結構變量的指定子項是否存在。","Child _PARAM2_ of variable _PARAM1_ of _PARAM0_ exists":"_PARAM0_ 的變量 _PARAM1_ 的子 _PARAM2_ 存在","Variables ❯ Arrays and structures":"變量 ❯ 數組和結構","Remove a child from an object structure variable.":"從物件結構變量中刪除一個子項。","Remove child _PARAM2_ from variable _PARAM1_ of _PARAM0_":"從 _PARAM0_ 的變量 _PARAM1_ 中刪除子 _PARAM2_","Remove all the children from the object array or structure variable.":"從物件數組或結構變量中刪除所有子項。","Clear children from variable _PARAM1_ of _PARAM0_":"從 _PARAM0_ 的變量 _PARAM1_ 中刪除子 _PARAM2_","Hide":"隱藏","Hide the specified object.":"隱藏指定物件。","Hide _PARAM0_":"隱藏 _PARAM0_","Show the specified object.":"顯示指定的物件。","Show _PARAM0_":"顯示 _PARAM0_","Compare the angle, in degrees, of the specified object. For 3D objects, this is the angle around the Z axis.":"比較指定物件的角度,單位為度。對於3D物件,這是圍繞Z軸的角度。","the angle (in degrees)":"角度(以度為單位)","Z-order":"Z 順序","Compare the Z-order of the specified object.":"比較指定物件的 Z-順序。","the Z-order":"Z 順序","Current layer":"當前層","Check if the object is on the specified layer.":"檢查物件是否在指定的層上。","_PARAM0_ is on layer _PARAM1_":"_PARAM0_ 位于層 _PARAM1_","Check if an object is visible.":"檢查一個物件是否可見。","_PARAM0_ is visible (not marked as hidden)":"_PARAM0_ 是可見的(未標記為隱藏)","Object is stopped (no forces applied on it)":"物件已停止 (沒有適用于它的力)","Check if an object is not moving":"檢查一個物件是否在移動","_PARAM0_ is stopped":"_PARAM0_ 已停止","Speed (from forces)":"速度(來自力)","Compare the overall speed of an object":"比較物件整體的速度","the overall speed":"總速度","Angle of movement (using forces)":"移動角度 (使用力)","Compare the angle of movement of an object according to the forces applied on it.":"根據施加在物體上的力來比較物體的運動角度。","Angle of movement of _PARAM0_ is _PARAM1_ (tolerance: _PARAM2_ degrees)":"_PARAM0_ 的移動角度是 _PARAM1_ (公差: _PARAM2_ 度)","Angle of movement of _PARAM0_ is _PARAM1_ ± _PARAM2_°":"_PARAM0_ 的移動角度為 _PARAM1_ ± _PARAM2_°","The boolean value of variable _PARAM1_ of object _PARAM0_ is _PARAM2_":"物件 _PARAM0_ 的變量 _PARAM1_ 的布爾值是 _PARAM2_","Add value to object array variable":"向物件陣列變量添加值","Adds a text (string) to the end of an object array variable.":"在物件數組變量的末尾添加文本 (字符串)。","Add value _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"將值 _PARAM2_ 添加到 _PARAM0_ 的數組變量 _PARAM1_","Adds a number to the end of an object array variable.":"將一個數字添加到物件數組變量的末尾。","Adds a boolean to the end of an object array variable.":"在物件數組變量的末尾添加布爾值。","Adds an existing variable to the end of an object array variable.":"將現有變量添加到物件數組變量的結尾。","Add variable _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"將變量 _PARAM2_ 添加到 _PARAM0_ 的數組變量 _PARAM1_","The content of the object variable will *be copied* and added at the end of the array.":"物件變量的內容將*被複製*并添加到數組的末尾。","Add text _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"將文本 _PARAM2_ 添加到 _PARAM0_ 的數組變量 _PARAM1_","Add number _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"將數字 _PARAM2_ 添加到 _PARAM0_ 的數組變量 _PARAM1_","Add boolean _PARAM2_ to array variable _PARAM1_ of _PARAM0_":"將布爾值 _PARAM2_ 添加到 _PARAM0_ 的數組變量 _PARAM1_","Removes a variable at the specified index of an object array variable.":"在物件數組變量的指定索引處刪除變量","Remove variable at index _PARAM2_ from array variable _PARAM1_ of _PARAM0_":"從 _PARAM0_ 的數組變量 _PARAM1_ 移除索引 _PARAM2_ 的變量","Compare the number of children in an object array variable.":"比較物件數組變量中子項的數量。","The number of children in the array variable _PARAM1_":"數組變量 _PARAM1_ 中的子級數","Get the value of the first element of an object array variable, if it is a text (string) variable.":"獲取物件數組變量的第一個元素的值,如果它是文本(字符串) 變量。","Get the value of the first element of an object array variable, if it is a number variable.":"獲取物件數組變量的第一個元素的值,如果它是一個數字變量。","Get the value of the last element of an object array variable, if it is a text (string) variable.":"獲取物件數組變量的最后一個元素的值,如果它是文本(字符串) 變量。","Get the value of the last element of an object array variable, if it is a number variable.":"獲取物件數組變量的最后一個元素的值,如果它是一個數字變量。","Behavior activated":"行為是激活的","Check if the behavior is activated for the object.":"檢查物件的行為是否被激活。","Behavior _PARAM1_ of _PARAM0_ is activated":"_PARAM0_ 的行為 _PARAM1_ 是激活的","De/activate a behavior":"禁/激活 一個行為","De/activate the behavior for the object.":"禁/激活 物件的行為","Activate behavior _PARAM1_ of _PARAM0_: _PARAM2_":"激活 _PARAM0_ 的行為 _PARAM1_ : _PARAM2_","Activate?":"激活的?","Add a force to move toward an object":"添加一個力移動向某物件","Add a force to an object to make it move toward another.":"添加力到一個物件使其移動向另一個物件","Move _PARAM0_ toward _PARAM1_ with _PARAM3_ force of _PARAM2_ pixels":"將 _PARAM0_ 移動到 _PARAM1_ 和 _PARAM3_ 力的 _PARAM2_ 像素","Target Object":"目標物件","Add a force to move around an object":"添加一個力移動到某物件附近","Add a force to an object to make it rotate around another.\nNote that the movement is not precise, especially if the speed is high.\nTo position an object around a position more precisely, use the actions in category \"Position\".":"給物體增加一個力量使其圍繞另一個物體旋轉。\n請注意,移動速度并不精確,特別是在速度很高的情況下。\n要更精確地將物體置于某個位置周圍,請使用“位置”類別中的動作。","Rotate _PARAM0_ around _PARAM1_ at _PARAM2_ deg/sec and _PARAM3_ pixels away":"旋轉 _PARAM0_ 到 _PARAM1_ 的 _PARAM3_ 附近,速度 _PARAM2_","Rotate around this object":"圍繞旋轉到此物件","Speed (in degrees per second)":"速度(度每秒)","Distance (in pixels)":"距離 ( 以像素為單位 )","Put the object around another":"將該物件放在另一個物件附近","Position an object around another, with the specified angle and distance. The center of the objects are used for positioning them.":"將物件放置在另一個物件周圍,指定角度和距離。物件的中心被用來定位它們。","Put _PARAM0_ around _PARAM1_, with an angle of _PARAM3_ degrees and _PARAM2_ pixels distance.":"將 _PARAM0_ 放在 _PARAM1_ 周圍,角度為 _PARAM3_ 度,距離為 _PARAM2_ 像素。","\"Center\" Object":"「中心」物件","Separate objects":"分離物件","Move an object away from another using their collision masks.\nBe sure to call this action on a reasonable number of objects\nto avoid slowing down the game.":"使用他們的碰撞遮罩將一個物體從另一個物體移開。\n確保在合理的物體上調用這個動作\n以避免放慢遊戲速度。","Move _PARAM0_ away from _PARAM1_ (only _PARAM0_ will move)":"移動 _PARAM0_ 遠離 _PARAM1_ (僅 _PARAM0_ 被移動)","Objects (won't move)":"物件(不會移動)","Ignore objects that are touching each other on their edges, but are not overlapping (default: no)":"忽略在其邊緣相互觸摸但不重疊的物件 (默認:否)","Point inside object":"物件內點","Test if a point is inside the object collision masks.":"測試某點是否在物件碰撞遮罩內。","_PARAM1_;_PARAM2_ is inside _PARAM0_":"_PARAM1_; _PARAM2_ 在 _PARAM0_ 內部","X position of the point":"點的 X 位置","Y position of the point":"點的 Y 位置","The cursor/touch is on an object":"光標/觸摸在物件上","Test if the cursor is over an object, or if the object is being touched.":"測試游標是否超過物件,或物件是否被觸摸。","The cursor/touch is on _PARAM0_":"光標/觸摸在 _PARAM0_ 上","Accurate test (yes by default)":"精確檢測(默認yes)","Value of an object timer":"物件計時器的值","Test the elapsed time of an object timer.":"測試物件計時器經過的時間。","The timer _PARAM1_ of _PARAM0_ is greater than _PARAM2_ seconds":"_PARAM0_ 的計時器 _PARAM1_ 大于_PARAM2_ 秒","Compare the elapsed time of an object timer. This condition doesn't start the timer.":"比較物件計時器的運行時間。此條件不啟動計時器。","The timer _PARAM1_ of _PARAM0_ _PARAM2_ _PARAM3_ seconds":"_PARAM0_ _PARAM2_ _PARAM3_ 秒的計時器 _PARAM1_","Object timer paused":"物件計時器已暫停","Test if specified object timer is paused.":"測試是否暫停指定物件計時器。","The timer _PARAM1_ of _PARAM0_ is paused":"_PARAM0_ 的計時器 _PARAM1_ 已暫停","Start (or reset) an object timer":"開始(或重置) 物件計時器","Reset the specified object timer, if the timer doesn't exist it's created and started.":"重置指定的物件計時器,如果計時器不存在,則創建并啟動它。","Start (or reset) the timer _PARAM1_ of _PARAM0_":"開始 (或重置) _PARAM0_ 的計時器 _PARAM1_","Pause an object timer":"暫停物件計時器","Pause an object timer.":"暫停物件計時器。","Pause timer _PARAM1_ of _PARAM0_":"暫停_PARAM0_的計時器 _PARAM1_","Unpause an object timer":"取消暫停物件計時器","Unpause an object timer.":"取消暫停物件計時器。","Unpause timer _PARAM1_ of _PARAM0_":"取消暫停_PARAM0_的計時器_PARAM1_","Delete an object timer":"刪除物件計時器","Delete an object timer from memory.":"從內存中刪除物件計時器。","Delete timer _PARAM1_ of _PARAM0_ from memory":"從內存中刪除_PARAM0_的計時器 _PARAM1_","X position of the object":"物件的 X 位置","Y position of the object":"物件的 Y 位置","Current angle, in degrees, of the object. For 3D objects, this is the angle around the Z axis.":"物件的當前角度,單位為度。對於3D物件,這是圍繞Z軸的角度。","X coordinate of the sum of forces":"力之和的X 坐標","Y coordinate of the sum of forces":"力之和的Y坐標","Angle of the sum of forces":"力之和的角度","Angle of the sum of forces (in degrees)":"力總和的角度(以度為單位)","Length of the sum of forces":"力之和的長度","Width of the object":"物件的寬度","Height of the object":"物件的高度","Z-order of an object":"物件的 Z 順序","Distance between two objects":"兩個物體之間的距離","Square distance between two objects":"兩個物件之間的平方距離","Distance between an object and a position":"物件和位置之間的距離","Square distance between an object and a position":"物件和位置之間的平方距離","Number value of an object variable":"物件變量的數值","Number of children in an object array or structure variable":"物件數組或結構變量中的子項數","Text of an object variable":"物件變量的文本","Object timer value":"物件計時器值","Angle between two objects":"兩個物件之間的角度","Compute the angle between two objects (in degrees). If you need the angle to an arbitrary position, use AngleToPosition.":"計算兩個物體之間的角度(以度為單位)。如果你需要一個任意位置的角度,使用 AngleToposition。","Compute the X position when given an angle and distance relative to the starting object. This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"給定相對於起始物件的角度和距離,計算 X 位置。也被稱為將 2D 矢量從極坐標轉化為直角坐標。","Compute the Y position when given an angle and distance relative to the starting object. This is also known as getting the cartesian coordinates of a 2D vector, using its polar coordinates.":"給定相對於起始物件的角度和距離,計算 Y 位置。也被稱為將 2D 矢量從極坐標轉化為直角坐標。","Angle between an object and a position":"物件和位置之間的角度","Compute the angle between the object center and a \"target\" position (in degrees). If you need the angle between two objects, use AngleToObject.":"計算物體中心和“目標”位置之間的角度(以度為單位)。如果需要兩個物件之間的角度,請使用 AngleToObject。","Enable effect _PARAM1_ on _PARAM0_: _PARAM2_":"在_PARAM0_上啟用_PARAM1_ 效果: _PARAM2_","Set _PARAM2_ to _PARAM3_ for effect _PARAM1_ of _PARAM0_":"將 _PARAM2_ 設定為 _PARAM3_ 以獲取_PARAM0_ 的 _PARAM1_ 效果","Enable _PARAM2_ for effect _PARAM1_ of _PARAM0_: _PARAM3_":"啟用 _PARAM2_ 對_PARAM0_ 的 _PARAM1_ 效果: _PARAM3_","Effect _PARAM1_ of _PARAM0_ is enabled":"_PARAM0_ 的特效 _PARAM1_ 已啟用","Include in parent collision mask":"包含在父碰撞遮罩中","Include or exclude a child from its parent collision mask.":"在其父級碰撞遮罩中包含或排除子級。","Include _PARAM0_ in parent object collision mask: _PARAM1_":"在父物件碰撞遮罩中包含 _PARAM0_:_PARAM1_","Create an object":"創建一個物件","Create an instance of the object at the specified position.The created object instance will be available for the next actions and sub-events.":"在指定位置創建對象實例。創建的對象實例將可用於後續操作和子事件。","Create object _PARAM1_ at position _PARAM2_;_PARAM3_ (layer: _PARAM4_)":"在位置_PARAM2_;_PARAM3_ 創建物件 _PARAM1_ (圖層: _PARAM4_)","Object to create":"要創建的物件","Create an object from its name":"從物件的名字創建一個物件","Among the objects of the specified group, this action will create the object with the specified name.":"在指定組的物件中,此操作將創建具有指定名稱的物件。","Among objects _PARAM1_, create object named _PARAM2_ at position _PARAM3_;_PARAM4_ (layer: _PARAM5_)":"在物件_PARAM1_中, 在位置_PARAM3_;_PARAM4_ (層: _PARAM5_)","Group of potential objects":"潛在物件組","Group containing objects that can be created by the action.":"包含可以通過該動作創建的物件組.","Name of the object to create":"要創建的物件名稱","Text representing the name of the object to create. If no objects with this name are found in the group, no object will be created.":"代表要創建的物件名稱的文本。如果沒有在組中找到具有此名稱的物件,將不會創建物件。","Pick all object instances":"選擇所有物件實例","Pick all instances of the specified object(s). When you pick all instances, the next conditions and actions of this event work on all of them.":"選擇指定物件的所有實例。當您選擇所有實例時,此事件的下一個條件和動作都適用于它們。","Pick all instances of _PARAM1_":"選擇 _PARAM1_ 的所有實例","Pick a random object":"挑選一個隨機物件","Pick one instance from all the specified objects. When an instance is picked, the next conditions and actions of this event work only on that object instance.":"從所有指定物件中選擇一個實例。當選擇了一個實例時,該事件的下一個條件和動作僅適用於該物件實例。","Pick a random _PARAM1_":"挑選一個隨機 _PARAM1_","Pick nearest object":"挑選最近的物件","Pick the instance of this object that is nearest to the specified position.":"選擇與指定位置最近的此物件的實例。","Pick the _PARAM0_ that is nearest to _PARAM1_;_PARAM2_":"選擇 _PARAM0_ 距離_PARAM1_;_PARAM2_","Apply movement to all objects":"將移動應用于所有物件","Moves all objects according to the forces they have. GDevelop calls this action at the end of the events by default.":"根據所擁有的力量移動所有物件。 GDevelop默認在事件結束時調用這個動作。","An object is moving toward another (using forces)":"一個物件正在向另一個物件移動(使用力)","Check if an object moves toward another.\nThe first object must move.":"檢測一個物件是否朝向另一個物件移動.\n第一個物件必須移動.","_PARAM0_ is moving toward _PARAM1_":"_PARAM0_ 向 _PARAM1_ 移動","Compare the distance between two objects.\nIf condition is inverted, only objects that have a distance greater than specified to any other object will be picked.":"比較兩個物件之間的距離.\n如果條件反轉,僅擁有距離比另一個大的物件會被挑選","_PARAM0_ distance to _PARAM1_ is below _PARAM2_ pixels":"_PARAM0_ 到 _PARAM1_ 的距離低于 _PARAM2_ 像素","Pick the instance of this object that is nearest to the specified position. If the condition is inverted, the instance farthest from the specified position is picked instead.":"選擇與指定位置最近的此物件的實例。如果條件被反轉,則選擇與指定位置最遠的實例。","Number of objects":"物件數目","Count how many of the specified objects are currently picked, and compare that number to a value. If previous conditions on the objects have not been used, this condition counts how many of these objects exist in the current scene.":"計算當前選取的指定物件的數量,并將該數量與一個值進行比較。 如果物件上先前的條件未被使用,此條件計算當前場景中存在的這些物件的數量。","the number of _PARAM0_ objects":"_PARAM0_ 物件的數量","Number of object instances on the scene":"場景中的物件實例數","the number of instances of the specified objects living on the scene":"場景中指定物件的實例數","the number of _PARAM1_ living on the scene":"出現在場景上的 _PARAM1_ 的數量","Number of object instances currently picked":"當前選擇的物件實例數","the number of instances picked by the previous conditions (or actions)":"被先前條件 (或動作) 選擇的實例數量","the number of _PARAM0_ currently picked":"當前選擇的 _PARAM0_ 的數量","Test the collision between two objects using their collision masks.":"使用碰撞遮罩測試兩個物件之間的碰撞。","_PARAM0_ is in collision with _PARAM1_":"_PARAM0_ 與 _PARAM1_ 碰撞","An object is turned toward another":"一個物件轉向另一個","Check if an object is turned toward another":"檢查物件是否已轉向另一個物件。","_PARAM0_ is rotated towards _PARAM1_":"_PARAM0_ 轉向到 _PARAM1_","Name of the object":"物件的名稱","Name of the second object":"第二個物件的名稱","Angle of tolerance, in degrees (0: minimum tolerance)":"公差角度,度(0:最小公差)","_PARAM0_ is turned toward _PARAM1_ ± _PARAM2_°":"_PARAM0_ 朝向 _PARAM1_ ± _PARAM2_°","Raycast":"射線廣播","Sends a ray from the given source position and angle, intersecting the closest object.\nThe intersected object will become the only one taken into account.\nIf the condition is inverted, the object to be intersected will be the farthest one within the ray radius.":"從給定的源位置和角度發送一條射線,與最近的物件相交。\n相交的物件將成為唯一考慮的物件。\n如果條件反轉,要相交的物件將是射線半徑內最遠的物件.","Cast a ray from _PARAM1_;_PARAM2_, angle: _PARAM3_ and max distance: _PARAM4_px, against _PARAM0_, and save the result in _PARAM5_, _PARAM6_":"從 _PARAM1_; _PARAM2_, 角度: _PARAM3_ 和最大距離: _PARAM4_px, 到 _PARAM0_, 并將結果保存到 _PARAM5_, _PARAM6_","Objects to test against the ray":"要對射線測試的物件","Ray source X position":"射線源 X 位置","Ray source Y position":"射線源 Y 位置","Ray angle (in degrees)":"發射角度(度)","Ray maximum distance (in pixels)":"射線最大距離(像素)","Result X position scene variable":"結果 X 位置場景變量","Scene variable where to store the X position of the intersection. If no intersection is found, the variable won't be changed.":"場景變量存儲交叉路由的 X 位置。如果找不到交點,則變量不會被更改。","Result Y position scene variable":"結果 Y 位置場景變量","Scene variable where to store the Y position of the intersection. If no intersection is found, the variable won't be changed.":"場景變量存儲交叉路由的 Y 位置。如果找不到交點,則變量不會被更改。","Raycast to position":"光線投射到位置","Sends a ray from the given source position to the final point, intersecting the closest object.\nThe intersected object will become the only one taken into account.\nIf the condition is inverted, the object to be intersected will be the farthest one within the ray radius.":"從給定的源位置向最終點發送一條射線,與最近的物件相交。\n相交的物件將成為唯一考慮的物件。\n如果條件反轉,要相交的物件將是范圍內最遠的物件射線半徑。","Cast a ray from _PARAM1_;_PARAM2_ to _PARAM3_;_PARAM4_ against _PARAM0_, and save the result in _PARAM5_, _PARAM6_":"從 _PARAM1_; _PARAM2_ 到 _PARAM3_; _PARAM4_ 和 _PARAM0_ 施放射線,并將結果保存在_PARAM5_, _PARAM6_","Ray target X position":"射線目標 X 位置","Ray target Y position":"射線目標 Y 位置","Count the number of the specified objects being currently picked in the event":"計數當前在事件中選擇的物件的數量","Return the name of the object":"返回物件的名稱","Object layer":"對象圖層","Return the name of the layer the object is on":"返回物件所在圖層的名稱","Set _PARAM0_ as : ":"設定 _PARAM0_ 為 : ","Change : ":"更改 : ","Change of _PARAM0_: ":"更改 _PARAM0_的 : ","Change : ":"更改 : ","_PARAM0_ is ":"_PARAM0_ 是 ","":"","Value to compare":"比較數值"," of _PARAM0_ ":"_PARAM0_的 "," ":" ","Smooth the image":"平滑圖像","Preload as sound":"預加載為聲音","Loads the fully decoded file into cache, so it can be played right away as Sound with no further delays.":"將完全解碼的文件加載到緩存中,這樣就可以立即將其作為聲音播放,而不會有進一步的延遲。","Preload as music":"預加載為音樂","Prepares the file for immediate streaming as Music (does not wait for complete download).":"將文件準備為即時流媒體播放音樂(不要等待完整下載)。","Preload in cache":"在緩存中預加載","Loads the complete file into cache, but does not decode it into memory until requested.":"將完整的文件加載到緩存中,但在請求之前不會將其解碼到內存中。","Disable preloading at game startup":"在遊戲啟動時禁用預加載","The expression has extra character at the end that should be removed (or completed if your expression is not finished).":"該表達式在結尾有額外的字符,應刪除(或如果您的表達式未完成則完成)。","Missing a closing parenthesis. Add a closing parenthesis for each opening parenthesis.":"缺少一個封閉括號。為每個開頭括號添加一個封閉括號。","Missing a closing bracket. Add a closing bracket for each opening bracket.":"缺少一個結尾括號。為每個開頭括號添加一個結尾括號。","A name should be entered after the dot.":"應該在點后面輸入一個名稱。","A dot or bracket was expected here.":"這里需要一個點或括號。","An opening parenthesis was expected here to call a function.":"預期這里有一個開頭括號來調用函數。","The list of parameters is not terminated. Add a closing parenthesis to end the parameters.":"參數列表未終止。添加一個閉合括號以結束參數。","You've used an operator that is not supported. Operator should be either +, -, / or *.":"您已經使用了不受支持的運算符。操作員應該是 +, -, / 或 *。","You've used an \"unary\" operator that is not supported. Operator should be either + or -.":"您使用了不受支持的“一元”運算符。運算符應為+或-。","You've used an operator that is not supported. Only + can be used to concatenate texts.":"您已經使用了不支持的運算符。只有+ 可以用來連接文本。","Operators (+, -, /, *) can't be used with an object name. Remove the operator.":"運算符 (+, -, /, *) 不能使用物件名稱。刪除操作者。","Operators (+, -, /, *) can't be used in variable names. Remove the operator from the variable name.":"運算符 (+, -, /, *) 不能用在變量名稱中。從變量名稱中刪除操作員。","You've used an operator that is not supported. Only + can be used to concatenate texts, and must be placed between two texts (or expressions).":"您已經使用了不受支持的運算符。只有+ 可以用來合并文本,且必須放在兩個文本之間(或表達式)。","Operators (+, -) can't be used with an object name. Remove the operator.":"運算符(+, -) 不能使用物件名稱。刪除操作者。","Operators (+, -) can't be used in variable names. Remove the operator from the variable name.":"運算符 (+, -) 不能用在變量名稱中。從變量名稱中刪除運算符。","You entered a number, but a text was expected (in quotes).":"您輸入了一個數字,但需要一個文本(引號)。","You entered a number, but this type was expected:":"您輸入了一個數字,但需要這個類型:","You entered a text, but a number was expected.":"您輸入了一個文本,但預計會有一個數字。","You entered a text, but this type was expected:":"您輸入了一個文本,但需要這個類型:","No object, variable or property with this name found.":"未找到具有此名稱的物件、變量或屬性。","You entered a variable, but this type was expected:":"您輸入了一個變量,但這種類型是預期的:","You can't use the brackets to access an object variable. Use a dot followed by the variable name, like this: `MyObject.MyVariable`.":"不能使用方括號訪問物件變量。在變量名后面加一個點,例如: ‘ MyObject.Myvariable’。","You must wrap your text inside double quotes (example: \"Hello world\").":"您必須把您的文本裝在半角雙引號內(例如:\"Hello world\")。","You must enter a number.":"您必須輸入一個數字。","You must enter a number or a text, wrapped inside double quotes (example: \"Hello world\"), or a variable name.":"您必須輸入一個數字或文本,包裝在雙引號 (例如:\"Hello world\"),或者輸入一個變量名稱。","You've entered a name, but this type was expected:":"您輸入了一個名字,但是需要這個類型:","You must enter a number or a valid expression call.":"您必須輸入一個數字或有效的表達式調用。","You must enter a text (between quotes) or a valid expression call.":"您必須輸入文本(在引用內) 或有效的表達式調用。","You must enter a variable name.":"請輸入變量名稱。","You must enter a valid object name.":"請輸入有效物件名稱。","You must enter a valid expression.":"請輸入有效的表達式。","This variable has the same name as a property. Consider renaming one or the other.":"此變量與一個屬性同名。考慮重命名其中一個。","This variable has the same name as a parameter. Consider renaming one or the other.":"此變量與一個參數同名。考慮重命名其中一個。","No variable with this name found.":"未找到具有此名稱的變量。","Undefined":"未定義","Dimensionless":"無尺寸","degree":"度","second":"秒","pixel":"像素","pixel per second":"像素每秒","How much distance is covered per second.":"每秒經過多少距離。","pixel per second, per second":"像素每秒,每秒","How much speed is gained (or lost) per second.":"每秒增加(或減少)多少速度。","Force (in Newton)":"力(牛頓)","meter kilogram per second, per second":"米千克每秒,每秒","A unit to measure forces.":"測量力的單位。","Angular speed":"角速度","degree per second":"每秒度數","How much angle is covered per second.":"每秒覆蓋多少角度。","Some extensions could not be loaded. Expected {0} JS extension modules, got {1}. Please check the console for more details.":function(a){return["部分擴展無法載入。預期 ",a("0")," 個 JS 擴展模組,實際載入 ",a("1")," 個。請查看主控台了解更多詳細資料。"]},"Desktop window options":"桌面視窗選項","Transparent native window":"透明原生視窗","Creates the Electron window with native transparency enabled.":"建立啟用原生透明效果的 Electron 視窗。","Frameless window":"無邊框視窗","Transparent game background":"透明遊戲背景","Disable window shadow":"停用視窗陰影","Disable hardware acceleration":"停用硬體加速","Use only as a compatibility option for transparent windows.":"僅作為透明視窗的相容性選項使用。","Auto edit":"自動編輯","Calculating...":"計算中...","Off":"關","On":"開","The AI tried to use a function of the editor that is unknown.":"AI 嘗試使用未知的編輯器功能。"}}; diff --git a/newIDE/app/src/stories/componentStories/ExtensionLoadErrorDialog.stories.js b/newIDE/app/src/stories/componentStories/ExtensionLoadErrorDialog.stories.js index 7076e5d18a4a..07f1fe514dca 100644 --- a/newIDE/app/src/stories/componentStories/ExtensionLoadErrorDialog.stories.js +++ b/newIDE/app/src/stories/componentStories/ExtensionLoadErrorDialog.stories.js @@ -73,9 +73,10 @@ export const WithMultipleExtensionErrors = (): React.Node => { export const WithGenericError = (): React.Node => { // $FlowFixMe[missing-empty-array-annot] const erroredExtensionLoadingResults = []; - const genericError = new Error( - 'Some extension modules could not be loaded. Please check the console for more details.' - ); + const genericError = { + expectedNumberOfJSExtensionModulesLoaded: 31, + numberOfJSExtensionModulesLoaded: 30, + }; return ( { }, }, ]; - const genericError = new Error( - 'Some extension modules could not be loaded. Please check the console for more details.' - ); + const genericError = { + expectedNumberOfJSExtensionModulesLoaded: 31, + numberOfJSExtensionModulesLoaded: 30, + }; return ( { onOpenEventsFunctionsExtension={action( 'onOpenEventsFunctionsExtension' )} + onOpenTimeline={action('onOpenTimeline')} onSceneAdded={action('onSceneAdded')} onExternalLayoutAdded={action('onExternalLayoutAdded')} onDeleteLayout={action('onDeleteLayout')} @@ -138,6 +139,7 @@ export const ProjectOpen = (): React.Node => { onOpenEventsFunctionsExtension={action( 'onOpenEventsFunctionsExtension' )} + onOpenTimeline={action('onOpenTimeline')} onSceneAdded={action('onSceneAdded')} onExternalLayoutAdded={action('onExternalLayoutAdded')} onDeleteLayout={action('onDeleteLayout')} diff --git a/newIDE/electron-app/app/PreviewWindow.js b/newIDE/electron-app/app/PreviewWindow.js index 2c7afa01c9e9..a37a354f6002 100644 --- a/newIDE/electron-app/app/PreviewWindow.js +++ b/newIDE/electron-app/app/PreviewWindow.js @@ -42,14 +42,33 @@ const openPreviewWindow = ({ 4: { x: screenWidth / 2, y: screenHeight / 2 }, }; for (let i = 0; i < numberOfWindows; i++) { + const isTransparentPreviewWindow = !!previewBrowserWindowOptions.transparent; + const isFramelessPreviewWindow = + previewBrowserWindowOptions.frame === false; const browserWindowOptions = { ...previewBrowserWindowOptions, - parent: alwaysOnTop ? parentWindow : null, + backgroundColor: previewBrowserWindowOptions.transparent + ? '#00000000' + : previewBrowserWindowOptions.backgroundColor, + parent: isFramelessPreviewWindow + ? null + : alwaysOnTop + ? parentWindow + : null, + skipTaskbar: isFramelessPreviewWindow + ? false + : previewBrowserWindowOptions.skipTaskbar, x: numberOfWindows > 1 ? positions[i + 1].x : undefined, y: numberOfWindows > 1 ? positions[i + 1].y : undefined, }; let previewWindow = new BrowserWindow(browserWindowOptions); + if (browserWindowOptions.transparent) { + previewWindow.setBackgroundColor('#00000000'); + } + if (isFramelessPreviewWindow) { + previewWindow.setSkipTaskbar(false); + } previewWindow.setMenuBarVisibility(hideMenuBar); previewWindow.webContents.on('devtools-opened', () => { @@ -76,6 +95,8 @@ const openPreviewWindow = ({ previewWindows.push({ previewWindow: previewWindow, parentWindowId: parentWindow ? parentWindow.id : null, + isTransparentPreviewWindow, + isFramelessPreviewWindow, }); previewWindow.on('closed', closeEvent => { @@ -115,6 +136,118 @@ const closePreviewWindowsForParent = parentWindowId => { }); }; +const resetPreviewWindowState = ({ + previewWindow, + parentWindow, + alwaysOnTop, + hideMenuBar, +}) => { + try { + previewWindow.setIgnoreMouseEvents(false); + } catch (error) {} + try { + previewWindow.setSkipTaskbar(false); + } catch (error) {} + try { + previewWindow.setBackgroundColor('#000000'); + } catch (error) {} + try { + previewWindow.setHasShadow(true); + } catch (error) {} + try { + previewWindow.setOpacity(1); + } catch (error) {} + try { + previewWindow.setKiosk(false); + } catch (error) {} + try { + previewWindow.setFullScreen(false); + } catch (error) {} + try { + previewWindow.setFocusable(true); + } catch (error) {} + try { + previewWindow.setEnabled(true); + } catch (error) {} + try { + previewWindow.setMovable(true); + } catch (error) {} + try { + previewWindow.setResizable(true); + } catch (error) {} + try { + previewWindow.setMaximizable(true); + } catch (error) {} + try { + previewWindow.setMinimizable(true); + } catch (error) {} + try { + previewWindow.setClosable(true); + } catch (error) {} + try { + previewWindow.setMenuBarVisibility(hideMenuBar); + previewWindow.setAutoHideMenuBar(!hideMenuBar); + } catch (error) {} + try { + if (typeof previewWindow.setParentWindow === 'function') { + previewWindow.setParentWindow(alwaysOnTop ? parentWindow : null); + } + } catch (error) {} + try { + previewWindow.setAlwaysOnTop(false); + } catch (error) {} +}; + +const resetPreviewWindowsForPreviewMode = ({ + parentWindow, + alwaysOnTop, + hideMenuBar, + useTransparentPreviewWindow, + useFramelessPreviewWindow, +}) => { + const parentWindowId = parentWindow ? parentWindow.id : null; + let closedPreviewWindows = false; + const entriesToReset = previewWindows.filter( + entry => entry.parentWindowId === parentWindowId + ); + + entriesToReset.forEach(entry => { + try { + if (!entry.previewWindow || entry.previewWindow.isDestroyed()) return; + + const shouldReopenPreviewWindow = + entry.isTransparentPreviewWindow !== useTransparentPreviewWindow || + entry.isFramelessPreviewWindow !== useFramelessPreviewWindow; + if (shouldReopenPreviewWindow) { + // Electron can't reliably turn a transparent frameless window back + // into a regular framed window, so reopen the preview when the mode changes. + closedPreviewWindows = true; + resetPreviewWindowState({ + previewWindow: entry.previewWindow, + parentWindow, + alwaysOnTop, + hideMenuBar, + }); + entry.previewWindow.close(); + return; + } + + if (useFramelessPreviewWindow) return; + + resetPreviewWindowState({ + previewWindow: entry.previewWindow, + parentWindow, + alwaysOnTop, + hideMenuBar, + }); + } catch (error) { + console.warn('Ignoring exception when resetting preview window:', error); + } + }); + + return { closedPreviewWindows }; +}; + const closeAllPreviewWindows = () => { previewWindows.forEach(entry => { try { @@ -132,4 +265,5 @@ module.exports = { closePreviewWindow, closePreviewWindowsForParent, closeAllPreviewWindows, + resetPreviewWindowsForPreviewMode, }; diff --git a/newIDE/electron-app/app/main.js b/newIDE/electron-app/app/main.js index 0230a5775f58..ef00337f9e25 100644 --- a/newIDE/electron-app/app/main.js +++ b/newIDE/electron-app/app/main.js @@ -38,6 +38,7 @@ const { closePreviewWindow, closePreviewWindowsForParent, closeAllPreviewWindows, + resetPreviewWindowsForPreviewMode, } = require('./PreviewWindow'); const { setupLocalGDJSDevelopmentWatcher, @@ -259,13 +260,18 @@ function createNewWindow(windowArgs = args) { path.join(__dirname, 'extensions/ReactDeveloperTools/4.24.3_0/') ); - // Load the index.html of the app. - load({ - window: newWindow, - isDev, - path: '/index.html', - devTools, - }); + const loadIndexHtml = () => + load({ + window: newWindow, + isDev, + path: '/index.html', + devTools, + }); + + // Development builds can keep stale failed downloads in Electron's cache + // (notably libGD.js), so clear it before loading localhost. + if (isDev) newWindow.webContents.session.clearCache().then(loadIndexHtml); + else loadIndexHtml(); newWindow.on('closed', function() { // Remove from tracked windows @@ -452,6 +458,22 @@ app.on('ready', function() { return closeAllPreviewWindows(); }); + ipcMain.handle( + 'preview-reset-preview-window-mode', + async (event, options) => { + const parentWindow = BrowserWindow.fromWebContents(event.sender); + return resetPreviewWindowsForPreviewMode({ + parentWindow, + alwaysOnTop: options.alwaysOnTop, + hideMenuBar: options.hideMenuBar, + useTransparentPreviewWindow: options.useTransparentPreviewWindow, + useFramelessPreviewWindow: + options.useFramelessPreviewWindow || + options.useFramelessTransparentPreviewWindow, + }); + } + ); + // Piskel image editor ipcMain.handle('piskel-load', (event, externalEditorInput) => { const parentWindow = BrowserWindow.fromWebContents(event.sender);