# Godot Engine Documentation in Persian # Copyright (C) 2014-2018, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) # This file is distributed under the same license as the Godot Engine package. # # Amir Hossein Mafi , 2018. # Dante Marshal , 2018. # msgid "" msgstr "" "Project-Id-Version: Godot Engine latest\n" "Report-Msgid-Bugs-To: https://github.com/godotengine/godot-docs-l10n\n" "POT-Creation-Date: 2018-06-18 08:58+0200\n" "PO-Revision-Date: 2018-06-09 01:41+0000\n" "Last-Translator: Amir Hossein Mafi \n" "Language-Team: Persian \n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 3.0\n" #: ../../docs/index.rst:7 msgid "Godot Docs – *master* branch" msgstr "اسناد گودوت - شاخه ی *سرامد*" #: ../../docs/index.rst:9 msgid "" "This is the documentation for the unstable (master) branch. Looking for the " "documentation of the current **stable** branch? `Have a look here `_." msgstr "" "این اسناد مربوط به شاخه‌ی ناپایدار (سرامد) است. میتوانید اسناد مربوط به شاخه‌ی " "پایدار را در `این قسمت ` مشاهده کنید." #: ../../docs/index.rst:13 msgid "" "Welcome to the official documentation of Godot Engine, the free and open " "source community-driven 2D and 3D game engine! If you are new to this " "documentation, we recommend that you read the :ref:`introduction page " "` to get an overview of what this documentation has to " "offer." msgstr "" "به مستندات رسمی گودوت، موتور بازی سازی آزاد و متن باز و جامعه محور دو بعدی و " "سه بعدی خوش آمدید! اگر به تازگی با این مستندات آشنا شده اید، پیشنهاد میکنیم :" "ref:`صفحه‌ی معرفی ` را مطالعه کنید تا یک دید کلی نسبت به " "آنچه در این مستندات توضیح داده می‌شود داشته باشید." #: ../../docs/index.rst:18 msgid "" "The table of contents below and in the sidebar should let you easily access " "the documentation for your topic of interest. You can also use the search " "function in the top left corner." msgstr "" "با استفاده از جدول و فهرست در پایین و نوار کناری می‌توانید به مستندات مورد " "علاقه‌ی خود دسترسی پیدا کنید. همچنین می‌توانید از قابلیت جستجو در گوشه‌ی بالا، " "سمت چپ استفاده کنید." #: ../../docs/index.rst:22 msgid "" "Godot Engine is an open source project developed by a community of " "volunteers. The documentation team can always use your feedback and help to " "improve the tutorials and class reference. If you don't understand " "something, or cannot find what you are looking for in the docs, help us make " "the documentation better by letting us know!" msgstr "" "موتور بازی سازی گودوت یک پروژه‌ی متن باز است که با کمک یک جامعه‌ی داوطلب توسعه " "پیدا می‌کند. تیم مستندات همواره می‌تواند با استفاده از بازخوردهای و کمک های " "شما به بهبود مستندات و قسمت مرجع بپردازد. اگر قسمتی را متوجه نمی‌شوید، یا " "مطلب مورد نظر خود را در مستندات پیدا نمی‌کنید، با با خبر کردن ما از این قسمت " "ها ما را در این امر یاری کنید." #: ../../docs/index.rst:29 msgid "" "Submit an issue or pull request on the `GitHub repository `_, help us `translate the documentation " "`_ into your language, or " "discuss with us on either the ``#documentation`` channel on `Discord " "`_, or the ``#godotengine-doc`` channel on `irc." "freenode.net `_!" msgstr "" "در `مخزن های گیت هاب `_ یک " "issue ایجاد کنید یا یک pull request ثبت کنید. به ما کمک کنید تا مستندات را " "در زبان شما ترجمه کنیم، یا با ما در کانال `Discord `_ با برچسب ``#documentation`` یا در کانال `irc.freenode.net " "`_ با برچسب " "``#godotengine-doc`` به بحث و گفتگو بپردازید." #: ../../docs/index.rst:43 msgid "" "The main documentation for the site is organized into the following sections:" msgstr "مستندات اصلی سایت از این بخش ها تشکیل می‌شوند:" #: ../../docs/index.rst:45 ../../docs/community/resources.rst:9 msgid "General" msgstr "کلی" #: ../../docs/index.rst:53 msgid "Getting started" msgstr "شروع" #: ../../docs/index.rst:64 ../../docs/community/tutorials.rst:4 msgid "Tutorials" msgstr "آموزش‌ها" #: ../../docs/index.rst:89 msgid "Development" msgstr "توسعه" #: ../../docs/index.rst:99 ../../docs/community/index.rst:2 msgid "Community" msgstr "انجمن" #: ../../docs/about/index.rst:2 #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:7 #: ../../docs/tutorials/inputs/mouse_and_input_coordinates.rst:7 #: ../../docs/development/cpp/variant_class.rst:7 msgid "About" msgstr "درباره" #: ../../docs/about/introduction.rst:4 #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:7 #: ../../docs/getting_started/step_by_step/instancing.rst:7 #: ../../docs/getting_started/step_by_step/scripting.rst:7 #: ../../docs/getting_started/step_by_step/animations.rst:7 #: ../../docs/getting_started/step_by_step/filesystem.rst:7 #: ../../docs/getting_started/step_by_step/scene_tree.rst:7 #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:7 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:7 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:4 #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:7 #: ../../docs/getting_started/workflow/export/feature_tags.rst:7 #: ../../docs/tutorials/2d/2d_transforms.rst:7 #: ../../docs/tutorials/2d/using_tilemaps.rst:7 #: ../../docs/tutorials/2d/2d_movement.rst:7 #: ../../docs/tutorials/3d/using_transforms.rst:7 #: ../../docs/tutorials/3d/3d_performance_and_limitations.rst:7 #: ../../docs/tutorials/3d/spatial_material.rst:7 #: ../../docs/tutorials/3d/lights_and_shadows.rst:7 #: ../../docs/tutorials/3d/reflection_probes.rst:7 #: ../../docs/tutorials/3d/gi_probes.rst:7 #: ../../docs/tutorials/3d/baked_lightmaps.rst:7 #: ../../docs/tutorials/3d/high_dynamic_range.rst:7 #: ../../docs/tutorials/3d/using_gridmaps.rst:7 #: ../../docs/tutorials/3d/using_multi_mesh_instance.rst:7 #: ../../docs/tutorials/3d/mesh_generation_with_heightmap_and_shaders.rst:7 #: ../../docs/tutorials/audio/audio_buses.rst:7 #: ../../docs/tutorials/audio/audio_streams.rst:7 #: ../../docs/tutorials/physics/using_kinematic_body_2d.rst:7 #: ../../docs/tutorials/physics/ray-casting.rst:7 #: ../../docs/tutorials/physics/kinematic_character_2d.rst:7 #: ../../docs/tutorials/math/vector_math.rst:7 #: ../../docs/tutorials/math/matrices_and_transforms.rst:7 #: ../../docs/tutorials/io/saving_games.rst:7 #: ../../docs/tutorials/i18n/internationalizing_games.rst:7 #: ../../docs/tutorials/gui/bbcode_in_richtextlabel.rst:7 #: ../../docs/tutorials/viewports/viewports.rst:7 #: ../../docs/tutorials/shading/shading_language.rst:7 #: ../../docs/tutorials/shading/shader_materials.rst:7 #: ../../docs/tutorials/shading/screen-reading_shaders.rst:7 #: ../../docs/tutorials/networking/ssl_certificates.rst:7 #: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:7 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:7 #: ../../docs/tutorials/plugins/gdnative/gdnative-c-example.rst:7 #: ../../docs/tutorials/plugins/gdnative/gdnative-cpp-example.rst:7 #: ../../docs/tutorials/misc/binary_serialization_api.rst:7 #: ../../docs/tutorials/debug/overview_of_debugging_tools.rst:7 #: ../../docs/development/cpp/custom_resource_format_loaders.rst:7 #: ../../docs/development/cpp/custom_audiostreams.rst:7 #: ../../docs/development/cpp/custom_godot_servers.rst:7 #: ../../docs/development/cpp/creating_android_modules.rst:7 msgid "Introduction" msgstr "معرفی" #: ../../docs/about/introduction.rst:11 msgid "" "Welcome to the official documentation of Godot Engine, the free and open " "source community-driven 2D and 3D game engine! Behind this mouthful, you " "will find a powerful yet user-friendly tool that you can use to develop any " "kind of game, for any platform and with no usage restriction whatsoever." msgstr "" "به صفحه مستندات رسمی موتور بازی‌سازی رایگان و متن‌باز ۲ بعدی و ۳ بعدی Godot " "خوش آمدید!\n" "در اینجا، شما ابزاری قدرتمند و در عین حال کاربر پسند خواهید یافت، که " "میتوانید برای ساخت هر نوع بازی، برای هر پلتفرمی و بدون هیچ محدودیتی از آن " "استفاده کنید." #: ../../docs/about/introduction.rst:16 msgid "" "This page aims at giving a broad presentation of the engine and of the " "contents of this documentation, so that you know where to start if you are a " "beginner or where to look if you need info on a specific feature." msgstr "" "هدف این صفحه معرفی کلی موتور و محتوای این اسناد است، تا در صورتی که تازه کار " "هستید یا اگر در مورد ویژگی خاصی اطلاعاتی نیاز داشتید، بدانید از کجا شروع " "کنید." #: ../../docs/about/introduction.rst:21 msgid "About Godot Engine" msgstr "درباره موتور Godot" #: ../../docs/about/introduction.rst:23 msgid "" "A game engine is a complex tool, and it is therefore difficult to present " "Godot in a few words. Here's however our PR presentation, which you are free " "to reuse if you need a quick writeup about Godot Engine." msgstr "" "موتور بازی‌سازی یک ابزار پیچیده است، در نتیجه نمیتوان Godot را در چند کلمه " "توصیف کرد. با این حال این PR Presentation ماست، که در صورت نیاز میتوانید از " "آن برای معرفی سریع موتور Godot استفاده کنید." #: ../../docs/about/introduction.rst:27 msgid "" "Godot Engine is a feature-packed, cross-platform game engine to create 2D " "and 3D games from a unified interface. It provides a comprehensive set of " "common tools, so that users can focus on making games without having to " "reinvent the wheel. Games can be exported in one click to a number of " "platforms, including the major desktop platforms (Linux, macOS, Windows) as " "well as mobile (Android, iOS) and web-based (HTML5) platforms." msgstr "" "موتور Godot (گودات) یک موتور بازی‌سازی همه‌کاره و کراس‌پلتفرم برای ساخت بازی‌های " "۲ بعدی و ۳ بعدی از یک رابط واحد است. این موتور مجموعه‌ای جامع از ابزار‌های " "عمومی را فراهم میکند، تا کاربران بتوانند روی ساختن بازی‌ها تمرکز کنند، بدون " "این که مجبور باشند «چرخ را از نو اختراع کنند». بازی‌ها میتوانند با یک کلیک " "برای چندین پلتفرم از جمله پلتفرم‌های اصلی دسکتاپ (لینوکس، مک و ویندوز)، " "موبایل (اندروید و آی‌او‌اس) و مبتنی بر وب (HTML5) آماده شوند." #: ../../docs/about/introduction.rst:34 #, fuzzy msgid "" "Godot is completely free and open source under the permissive MIT license. " "No strings attached, no royalties, nothing. Users' games are theirs, down to " "the last line of engine code. Godot's development is fully independent and " "community-driven, empowering users to help shape their engine to match their " "expectations. It is supported by the `Software Freedom Conservancy `_ not-for-profit." msgstr "" "گودات (Godot) کاملا رایگان و متن‌باز تحت مجوز MIT ارائه میگردد. هیچ بندی به " "مجوز اضافه نشده و هیچ حق امتیازی وجود ندارد. کاربران تا آخرین خط کد موتور " "صاحب امتیاز بازی‌های خودشان هستند. توسعه‌ی Godot کاملا مستقل و بوده و توسط " "جامعه‌ی توسعه‌دهندگان موتور انجام میشود، که به کاربران این قدرت را میدهد که " "برای شکل دادن به موتور مطابق انتظاراتشان به جامعه‌ی توسعه‌دهندگان کمک کنند. " "این موتور تحت حمایت گروه `حفاظت از آزادی نرم‌افزار (Software Freedom " "Conservancy) `_ می‌باشد." #: ../../docs/about/introduction.rst:41 msgid "" "For a more in-depth view of the engine, you are encouraged to read this " "documentation further, especially the :ref:`Step by step ` tutorial." msgstr "" "جهت کسب اطلاعات بیشتر درباره موتور، پیشنهاد میشود به مطالعه‌ی همین مستندات " "ادامه دهید، از جمله :ref:`آموزش قدم به قدم ." #: ../../docs/about/introduction.rst:46 msgid "About the documentation" msgstr "درباره مستندات" #: ../../docs/about/introduction.rst:48 msgid "" "This documentation is continuously written, corrected, edited and revamped " "by members of the Godot Engine community. It is edited via text files in the " "`reStructuredText `_ markup " "language and then compiled into a static website/offline document using the " "open source `Sphinx `_ and `ReadTheDocs `_ tools." msgstr "" #: ../../docs/about/introduction.rst:55 msgid "" "You can contribute to Godot's documentation by opening issue tickets or " "sending patches via pull requests on its GitHub `source repository `_, or translating it into your language " "on `Hosted Weblate `_." msgstr "" #: ../../docs/about/introduction.rst:61 msgid "" "All the contents are under the permissive Creative Commons Attribution 3.0 " "(`CC-BY 3.0 `_) license, with " "attribution to \"Juan Linietsky, Ariel Manzur and the Godot Engine community" "\"." msgstr "" "تمام مطالب تحت مجوز Creative Commons Attribution 3.0 (`CC-BY 3.0 `_) به نام «Juan Linietsky, Ariel " "Manzur و انجمن موتور گودات» می‌باشد." #: ../../docs/about/introduction.rst:66 msgid "Organisation of the documentation" msgstr "سازمان‌دهی مستندات" #: ../../docs/about/introduction.rst:68 msgid "" "This documentation is organised in five sections with an impressively " "unbalanced distribution of contents – but the way it is split up should be " "relatively intuitive:" msgstr "" "این اسناد به ۵ قسمت تقسیم بندی میشوند، - و در این ۵ قسمت توزیع محتوای " "نامتوازن چشم‌گیری دیده میشود - اما نحوه تقسیم آن باید نسبتاً قابل درک باشد:" #: ../../docs/about/introduction.rst:72 msgid "" "The :ref:`sec-general` section contains this introduction as well as " "information about the engine, its history, its licensing, authors, etc. It " "also contains the :ref:`doc_faq`." msgstr "" "بخش :ref:`sec-general` شامل این مقدمه علاوه بر اطلاعاتی در مورد موتور، " "تاریخچه آن، مجوز‌ها، نویسندگان و ... است. همچنین :ref:`doc_faq` را نیز شامل " "می‌شود." #: ../../docs/about/introduction.rst:75 msgid "" "The :ref:`sec-learn` section is the main *raison d'être* of this " "documentation, as it contains all the necessary information on using the " "engine to make games. It starts with the :ref:`Step by step ` tutorial which should be the entry point for all new users." msgstr "" "بخش :ref:`sec-learn` قسمت اصلی این اسناد می‌باشد، زیرا حاوی تمام اطلاعات لازم " "جهت استفاده از موتور برای ساخت بازی است. این بخش با آموزش :ref:`قدم به قدم " "` آغاز می شود که باید نقطه ورود برای همه کاربران " "جدید باشد." #: ../../docs/about/introduction.rst:80 msgid "" "The :ref:`sec-tutorials` section, on the other hand, can be read as needed, " "in any order. It contains many feature-specific tutorials and documentations." msgstr "" #: ../../docs/about/introduction.rst:82 msgid "" "The :ref:`sec-devel` section is intended for advanced users and contributors " "to the engine development, with information on compiling the engine, " "developing C++ modules or editor plugins." msgstr "" #: ../../docs/about/introduction.rst:85 msgid "" "The :ref:`sec-community` gives information related to contributing to the " "engine development and the life of its community, e.g. how to report bugs, " "help with the documentation, etc. It also points to various community " "channels like IRC and Discord and contains a list of recommended third-party " "tutorials outside of this documentation." msgstr "" #: ../../docs/about/introduction.rst:90 msgid "" "Finally, the :ref:`sec-class-ref` is the documentation of the Godot API, " "which is also available directly within the engine's script editor. It is " "generated automatically from a file in the main source repository, therefore " "the generated files of the documentation are not meant to be modified. See :" "ref:`doc_updating_the_class_reference` for details." msgstr "" #: ../../docs/about/introduction.rst:96 msgid "" "In addition to this documentation you may also want to take a look at the " "various `Godot demo projects `_." msgstr "" #: ../../docs/about/introduction.rst:99 msgid "Have fun reading and making games with Godot Engine!" msgstr "" #: ../../docs/about/faq.rst:4 #: ../../docs/tutorials/assetlib/what_is_assetlib.rst:29 msgid "Frequently asked questions" msgstr "" #: ../../docs/about/faq.rst:7 msgid "" "What can I do with Godot? How much does it cost? What are the license terms?" msgstr "" #: ../../docs/about/faq.rst:9 msgid "" "Godot is Free/Libre Open Source Software available under the `OSI-approved " "`_ MIT license." msgstr "" #: ../../docs/about/faq.rst:11 msgid "" "This means it is free as in \"free speech\" as well as in \"free beer\"." msgstr "" #: ../../docs/about/faq.rst:13 msgid "In short:" msgstr "" #: ../../docs/about/faq.rst:15 msgid "There are no usage restrictions on Godot" msgstr "" #: ../../docs/about/faq.rst:16 msgid "" "This means you can use it for any game or application, commercially or non-" "commercially, in any industry" msgstr "" #: ../../docs/about/faq.rst:17 msgid "You can modify, (re)distribute and remix Godot to your heart's content" msgstr "" #: ../../docs/about/faq.rst:19 msgid "" "For more, see `here `_ or ask " "your lawyer of choice." msgstr "" #: ../../docs/about/faq.rst:21 msgid "" "All the contents of the documentation are under the permissive Creative " "Commons Attribution 3.0 (`CC-BY 3.0 `_) license, with attribution to \"Juan Linietsky, Ariel Manzur and " "the Godot Engine community\"." msgstr "" #: ../../docs/about/faq.rst:25 msgid "" "Logos and icons are generally under the same Creative Commons license. Note " "that some third-party libraries included with Godot's source code may have " "different licenses." msgstr "" #: ../../docs/about/faq.rst:28 msgid "" "For full details, look at the `COPYRIGHT.txt `_ as well as the `LICENSE.txt `_ and `LOGO_LICENSE." "txt `_ " "files in the Godot repository." msgstr "" #: ../../docs/about/faq.rst:31 msgid "" "Also see `the license page on the Godot website `_." msgstr "" #: ../../docs/about/faq.rst:34 msgid "Which platforms are supported by Godot?" msgstr "" #: ../../docs/about/faq.rst:36 msgid "**For the editor:**" msgstr "" #: ../../docs/about/faq.rst:38 msgid "Windows" msgstr "" #: ../../docs/about/faq.rst:39 ../../docs/about/faq.rst:45 msgid "Mac OS X" msgstr "" #: ../../docs/about/faq.rst:40 ../../docs/about/faq.rst:46 msgid "X11 (Linux, \\*BSD)" msgstr "" #: ../../docs/about/faq.rst:42 msgid "**For exporting your games:**" msgstr "" #: ../../docs/about/faq.rst:44 msgid "Windows (and UWP)" msgstr "" #: ../../docs/about/faq.rst:47 #: ../../docs/getting_started/step_by_step/exporting.rst:185 msgid "Android" msgstr "" #: ../../docs/about/faq.rst:48 #: ../../docs/getting_started/step_by_step/exporting.rst:237 msgid "iOS" msgstr "" #: ../../docs/about/faq.rst:49 msgid "Web" msgstr "" #: ../../docs/about/faq.rst:51 msgid "" "Both 32 and 64 bit binaries are supported where it makes sense, with 64 " "being the default." msgstr "" #: ../../docs/about/faq.rst:53 msgid "" "Some users also report building and using Godot successfully on ARM-based " "systems with Linux, like the Raspberry Pi. There is also some unofficial " "thirdparty work being done on building for some consoles. None of this is " "included in the default build scripts or export templates, however." msgstr "" #: ../../docs/about/faq.rst:57 msgid "" "For more on this, see the sections on :ref:`exporting ` and :ref:`compiling Godot yourself `." msgstr "" #: ../../docs/about/faq.rst:60 msgid "Which languages are supported in Godot?" msgstr "" #: ../../docs/about/faq.rst:62 msgid "" "The officially supported languages for Godot are GDScript, Visual Scripting, " "C# and C++. See the subcategories for each language in the :ref:`scripting " "` section." msgstr "" #: ../../docs/about/faq.rst:65 msgid "" "Note that C# and Visual Scripting support is comparatively young and " "GDScript still has some advantages as outlined below." msgstr "" #: ../../docs/about/faq.rst:68 msgid "" "Support for new languages can be added by third parties using the GDNative / " "NativeScript / PluginScript facilities. (See question about plugins below.)" msgstr "" #: ../../docs/about/faq.rst:71 msgid "" "Work is currently underway, for example, on unofficial bindings for Godot to " "`Python `_ and `Nim `_." msgstr "" #: ../../docs/about/faq.rst:75 msgid "" "GDScript? Why use a custom scripting language instead of my language of " "choice?" msgstr "" #: ../../docs/about/faq.rst:77 msgid "" "The short answer is that we think the additional complexity both on your " "side (when first learning Godot and GDScript) as well as our side " "(maintenance) is worth the more integrated and seamless experience over " "attracting additional users with more familiar programming languages that " "result in a worse experience. We understand if you would rather use another " "language in Godot (see list of supported options above), but we strongly " "encourage you to try it and see the benefits for yourself." msgstr "" #: ../../docs/about/faq.rst:85 msgid "" "GDScript is designed to integrate from the ground to the way Godot works, " "more than any other language, and is simple and easy to learn. Takes at most " "a day or two to get comfortable and it's easy to see the benefits once you " "do. Please make the effort to learn GDScript, you will not regret it." msgstr "" #: ../../docs/about/faq.rst:91 msgid "" "Godot C++ API is also efficient and easy to use (the entire Godot editor is " "made with this API), and an excellent tool to optimize parts of a project, " "but trying to use it instead of GDScript for an entire game is, in most " "cases, a waste of time." msgstr "" #: ../../docs/about/faq.rst:96 msgid "" "Yes, for more than a decade we tried in the past integrating several VMs " "(and even shipped games using them), such as Python, Squirrel and Lua (in " "fact we authored tolua++ in the past, one of the most popular C++ binders). " "None of them worked as well as GDScript does now." msgstr "" #: ../../docs/about/faq.rst:101 msgid "" "More information about getting comfortable with GDScript or dynamically " "typed languages can be found in the :ref:`doc_gdscript_more_efficiently` " "tutorial." msgstr "" #: ../../docs/about/faq.rst:105 msgid "For the more technically versed, proceed to the next item." msgstr "" #: ../../docs/about/faq.rst:108 msgid "I don't believe you. What are the technical reasons for the item above?" msgstr "" #: ../../docs/about/faq.rst:110 msgid "The main reasons are:" msgstr "" #: ../../docs/about/faq.rst:112 msgid "" "No good thread support in most script VMs, and Godot uses threads (Lua, " "Python, Squirrel, JS, AS, etc.)." msgstr "" #: ../../docs/about/faq.rst:114 msgid "" "No good class extending support in most script VMs, and adapting to the way " "Godot works is highly inefficient (Lua, Python, JS)." msgstr "" #: ../../docs/about/faq.rst:116 msgid "" "Horrible interface for binding to C++, results in large amount of code, " "bugs, bottlenecks and general inefficiency (Lua, Python, Squirrel, JS, etc.)" msgstr "" #: ../../docs/about/faq.rst:119 msgid "" "No native vector types (vector3, matrix4, etc.), resulting in highly reduced " "performance when using custom types (Lua, Python, Squirrel, JS, AS, etc.)." msgstr "" #: ../../docs/about/faq.rst:122 msgid "" "Garbage collector results in stalls or unnecessarily large memory usage " "(Lua, Python, JS, AS, etc.)." msgstr "" #: ../../docs/about/faq.rst:124 msgid "" "Difficulty to integrate with the code editor for providing code completion, " "live editing, etc. (all of them). This is well supported by GDScript." msgstr "" #: ../../docs/about/faq.rst:128 msgid "" "GDScript was designed to solve the issues above, and performs well in all " "the above scenarios. Please learn GDScript and enjoy a smooth integration of " "scripting with the game engine (yes, it's a rare but enjoyable situation " "when things just work). It's worth it, give it a try!" msgstr "" #: ../../docs/about/faq.rst:135 msgid "I want to extend Godot. What are my options for creating plugins?" msgstr "" #: ../../docs/about/faq.rst:137 msgid "" "For creating Godot Editor plugins look at :ref:`EditorPlugins " "` and tool scripts." msgstr "" #: ../../docs/about/faq.rst:139 msgid "" "Additional languages could be added via PluginScript or the more low-level " "NativeScript." msgstr "" #: ../../docs/about/faq.rst:141 msgid "" "If you want to add a certain native library, your best bet is GDNative and " "custom C++ modules." msgstr "" #: ../../docs/about/faq.rst:143 msgid "Also see the official blog posts on these topics:" msgstr "" #: ../../docs/about/faq.rst:145 msgid "" "`A look at the GDNative architecture `_" msgstr "" #: ../../docs/about/faq.rst:146 msgid "`GDNative is here! `_" msgstr "" #: ../../docs/about/faq.rst:148 msgid "" "You can also take a look at the GDScript implementation, the Godot modules " "as well as the `unofficial Python support `_ for Godot." msgstr "" #: ../../docs/about/faq.rst:152 msgid "Why is FBX not supported for import?" msgstr "" #: ../../docs/about/faq.rst:154 msgid "" "FBX SDK has a `restrictive license `_, that is incompatible with the `open license " "`_ provided by Godot." msgstr "" #: ../../docs/about/faq.rst:158 msgid "" "That said, Godot's Collada support is good, please use the `OpenCollada " "`_ " "exporter for maximum compatibility if you are using Maya or 3DS Max. If you " "are using Blender, take a look at our own `Better Collada Exporter `_." msgstr "" #: ../../docs/about/faq.rst:164 msgid "Also, glTF support was added in Godot 3.0." msgstr "" #: ../../docs/about/faq.rst:166 msgid "" "FBX support could still be provided by third parties as a plugin. (See " "Plugins question above.)" msgstr "" #: ../../docs/about/faq.rst:169 msgid "" "Will [Insert closed SDK such as PhysX, GameWorks, etc.] be supported in " "Godot?" msgstr "" #: ../../docs/about/faq.rst:171 msgid "" "No, the aim of Godot is to create a complete open source engine licensed " "under MIT, so you have complete control over every single piece of it. Open " "versions of functionality or features from such SDKs may be eventually added " "though." msgstr "" #: ../../docs/about/faq.rst:176 msgid "" "That said, because it is open source, and modular, nothing prevents you or " "anyone else interested into adding those libraries as a module and ship your " "game using them, as either open or closed source. Everything is allowed." msgstr "" #: ../../docs/about/faq.rst:181 msgid "" "To see how support for your SDK of choice could still be provided, look at " "the Plugins question above." msgstr "" #: ../../docs/about/faq.rst:184 msgid "" "How should assets be created to handle multiple resolutions and aspect " "ratios?" msgstr "" #: ../../docs/about/faq.rst:186 msgid "" "This question pops up often and it's probably thanks to the misunderstanding " "created by Apple when they originally doubled the resolution of their " "devices. It made people think that having the same assets in different " "resolutions was a good idea, so many continued towards that path. That " "originally worked to a point and only for Apple devices, but then several " "Android and Apple devices with different resolutions and aspect ratios were " "created, with a very wide range of sizes and DPIs." msgstr "" #: ../../docs/about/faq.rst:195 msgid "" "The most common and proper way to achieve this is to, instead, use a single " "base resolution for the game and only handle different screen aspects. This " "is mostly needed for 2D, as in 3D it's just a matter of Camera XFov or YFov." msgstr "" #: ../../docs/about/faq.rst:200 msgid "" "Choose a single base resolution for your game. Even if there are devices " "that go up to 2K and devices that go down to 400p, regular hardware scaling " "in your device will take care of this at little or no performance cost. Most " "common choices are either near 1080p (1920x1080) or 720p (1280x720). Keep in " "mind the higher the resolution, the larger your assets, the more memory they " "will take and the longer the time it will take for loading." msgstr "" #: ../../docs/about/faq.rst:208 msgid "" "Use the stretch options in Godot, 2D stretching with keeping aspect works " "best. Check the :ref:`doc_multiple_resolutions` tutorial on how to achieve " "this." msgstr "" #: ../../docs/about/faq.rst:212 msgid "" "Determine a minimum resolution and then decide if you want your game to " "stretch vertically or horizontally for different aspect ratios, or whether " "there is a minimum one and you want black bars to appear instead. This is " "also explained in the previous step." msgstr "" #: ../../docs/about/faq.rst:217 msgid "" "For user interfaces, use the :ref:`anchoring ` to " "determine where controls should stay and move. If UIs are more complex, " "consider learning about Containers." msgstr "" #: ../../docs/about/faq.rst:221 msgid "And that's it! Your game should work in multiple resolutions." msgstr "" #: ../../docs/about/faq.rst:223 msgid "" "If there is a desire to make your game also work on ancient devices with " "tiny screens (fewer than 300 pixels in width), you can use the export option " "to shrink images, and set that build to be used for certain screen sizes in " "the App Store or Google Play." msgstr "" #: ../../docs/about/faq.rst:229 msgid "I have a great idea that will make Godot better. What do you think?" msgstr "" #: ../../docs/about/faq.rst:231 msgid "" "Your idea will most certainly be ignored. Examples of stuff that is ignored " "by the developers:" msgstr "" #: ../../docs/about/faq.rst:234 msgid "Let's do this because it will make Godot better" msgstr "" #: ../../docs/about/faq.rst:235 msgid "Let's do this in Godot because another game engine does it" msgstr "" #: ../../docs/about/faq.rst:236 msgid "Let's remove this because I think it's not needed" msgstr "" #: ../../docs/about/faq.rst:237 msgid "Let's remove clutter and bloat and make Godot look nicer" msgstr "" #: ../../docs/about/faq.rst:238 msgid "Let's add an alternative workflow for people who prefer it" msgstr "" #: ../../docs/about/faq.rst:240 msgid "" "Godot developers are always willing to talk to you and listen to your " "feedback very openly, to an extent rarely seen in open source projects, but " "they will care mostly about real issues you have while using Godot, not " "ideas solely based on personal belief. Developers are interested in (for " "example):" msgstr "" #: ../../docs/about/faq.rst:246 msgid "" "Your experience using the software and the problems you have (we care about " "this much more than ideas on how to improve it)." msgstr "" #: ../../docs/about/faq.rst:248 msgid "" "The features you would like to see implemented because you need them for " "your project." msgstr "" #: ../../docs/about/faq.rst:250 msgid "" "The concepts that were difficult to understand in order to learn the " "software." msgstr "" #: ../../docs/about/faq.rst:252 msgid "The parts of your workflow you would like to see optimized." msgstr "" #: ../../docs/about/faq.rst:253 msgid "" "Parts where you missed clear tutorials or where the documentation wasn't up " "to par." msgstr "" #: ../../docs/about/faq.rst:255 msgid "" "Once one of the above points is stated, we can work together on a solution " "and this is where your ideas and suggestions are most valuable and welcome, " "they need to be in context of a real issue." msgstr "" #: ../../docs/about/faq.rst:259 msgid "" "As such, please don't feel that your ideas for Godot are unwelcome. Instead, " "try to reformulate them as a problem first, so developers and the community " "have a base ground to discuss first." msgstr "" #: ../../docs/about/faq.rst:263 msgid "Examples of how NOT to state problems generally and vaguely are:" msgstr "" #: ../../docs/about/faq.rst:265 msgid "Certain feature is ugly" msgstr "" #: ../../docs/about/faq.rst:266 msgid "Certain workflow is slow" msgstr "" #: ../../docs/about/faq.rst:267 msgid "Certain feature needs optimization" msgstr "" #: ../../docs/about/faq.rst:268 msgid "Certain aspect of the UI looks cluttered" msgstr "" #: ../../docs/about/faq.rst:270 msgid "" "Associating something with an adjective will not get you much attention and " "developers will most likely not understand you. Instead, try to reformulate " "your problem as a story such as:" msgstr "" #: ../../docs/about/faq.rst:274 msgid "I try to move objects around but always end up picking the wrong one" msgstr "" #: ../../docs/about/faq.rst:275 msgid "" "I tried to make a game like Battlefield but I'm not managing to understand " "how to get lighting to look the same." msgstr "" #: ../../docs/about/faq.rst:277 msgid "" "I always forget which script I was editing, and it takes me too many steps " "to go back to it." msgstr "" #: ../../docs/about/faq.rst:280 msgid "" "This will allow you to convey what you are thinking much better and set a " "common ground for discussion. Please try your best to state your problems as " "stories to the developers and the community, before discussing any idea. Be " "specific and concrete." msgstr "" #: ../../docs/about/faq.rst:285 msgid "" "Bonus points for bringing screenshots, concrete numbers, test cases or " "example projects (if applicable)." msgstr "" #: ../../docs/about/faq.rst:288 msgid "How can I support Godot development or contribute?" msgstr "" #: ../../docs/about/faq.rst:290 msgid "See :ref:`doc_ways_to_contribute`." msgstr "" #: ../../docs/about/faq.rst:293 msgid "Who is working on Godot? How can I contact you?" msgstr "" #: ../../docs/about/faq.rst:295 msgid "" "See the corresponding page on the `Godot website `_." msgstr "" #: ../../docs/getting_started/step_by_step/index.rst:2 msgid "Step by step" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:4 msgid "Introduction to Godot’s editor" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:6 msgid "" "This tutorial will run you through Godot’s interface. We’re going to look at " "the **Project Manager, docks, workspaces** and everything you need to know " "to get started with the engine." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:11 msgid "Project manager" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:13 msgid "" "When you launch Godot, the first window you’ll see is the Project Manager. " "It lets you create, remove, import or play game projects." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:16 #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:46 #: ../../docs/tutorials/assetlib/using_assetlib.rst:16 #: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:22 msgid "|image0|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:18 msgid "" "In the top-right corner you’ll find a drop-down menu to change the editor’s " "language." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:21 #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:54 #: ../../docs/tutorials/assetlib/using_assetlib.rst:48 msgid "|image1|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:23 msgid "" "From the **Templates** tab you can download open source project templates " "and demos to help you get started faster." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:26 #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:68 #: ../../docs/tutorials/assetlib/using_assetlib.rst:58 msgid "|image2|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:29 msgid "Create or import a project" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:31 msgid "" "To create a new project, click the ``New Project`` button on the right. Give " "it a name and choose an empty folder on your computer to save it." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:34 #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:88 #: ../../docs/tutorials/assetlib/using_assetlib.rst:83 msgid "|image3|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:36 msgid "" "Click the Browse button to open Godot’s file browser and pick a location or " "type the folder’s path in the Project Path field." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:39 #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:99 #: ../../docs/tutorials/assetlib/using_assetlib.rst:88 msgid "|image4|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:41 msgid "" "When you see the green tick on the right, it means the engine detects an " "empty folder and you may click ``Create``. Godot will create the project for " "you and open it in the editor." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:45 msgid "" "The next time you’ll open Godot, you’ll see your new project in the list. " "Double click on it to open it in the editor." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:48 #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 #: ../../docs/tutorials/assetlib/using_assetlib.rst:92 msgid "|image5|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:50 msgid "" "You can import existing projects in a similar way, using the Import button. " "Locate the folder that contains the project or the ``project.godot`` file to " "import and edit it." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:54 msgid "|image7|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:56 msgid "When the folder path is correct you'll see a green checkmark." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:58 #: ../../docs/tutorials/assetlib/using_assetlib.rst:120 msgid "|image8|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:61 msgid "Your first look at Godot’s editor" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:63 msgid "" "Welcome to Godot! With your project open you should see the editor’s " "interface with the 3d viewport active. You can change the current workspace " "at the top of the interface. Click on 2d to switch to the 2d workspace." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:68 #: ../../docs/tutorials/assetlib/using_assetlib.rst:141 msgid "|image9|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:70 msgid "Now you should see this interface, with empty docks on the right side." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:72 #: ../../docs/tutorials/assetlib/using_assetlib.rst:147 msgid "|image10|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:74 msgid "" "At the top, from left to right, you can see the **main menus**, the " "**workspaces**, and the **playtest buttons**." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:77 msgid "" "On the left side you have the **FileSystem dock**, where you’ll manage your " "project files and assets." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:80 #: ../../docs/tutorials/assetlib/using_assetlib.rst:152 msgid "|image11|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:82 msgid "" "On the right side you’ll find the **Scene dock** that lists the active " "scene’s content and the **Inspector** in the bottom right corner." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:85 #: ../../docs/tutorials/assetlib/using_assetlib.rst:160 msgid "|image12|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:87 msgid "" "In the center you have the **Toolbar** at the top, where you’ll find tools " "to move, scale or lock your scene’s objects. It changes as you jump to " "different workspaces." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:91 #: ../../docs/tutorials/assetlib/using_assetlib.rst:167 msgid "|image13|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:93 msgid "" "The **Bottom Panel** is the host for the debug console, the animation " "editor, the audio mixer… They are wide and can take precious space. That’s " "why they’re folded by default." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:97 msgid "|image14|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:100 msgid "The workspaces" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:102 msgid "" "You can see four workspace buttons at the top: 2D, 3D, Script and AssetLib." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:105 msgid "" "You’ll use the **2D workspace** for all types of games. On top of 2D games " "that is where you’ll build your interfaces. Press F1 to access it. |image15|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:109 msgid "" "In the **3D workspace**, you can work with meshes, lights, and design levels " "for 3D games. Press F2 to access it." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:112 msgid "|image16|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:114 msgid "" "Notice the text [perspective] under the toolbar, it is a button that opens a " "list of options related to the 3D viewport." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:116 msgid "|image20|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:118 msgid "" "The **Script** workspace is a complete code editor with a debugger, rich " "auto-completion, and built-in code reference. Press F3 to access it, and F4 " "to search the reference." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:122 msgid "|image17|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:124 msgid "" "Finally the **AssetLib** is a library of Free add-ons, scripts and assets to " "use in your projects." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:128 msgid "Modify the interface" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:130 msgid "" "Godot’s interface lives in a single window. You cannot split it across " "multiple screens although you can work with an external code editor like " "Atom or Visual Studio for instance." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:135 msgid "Move and resize docks" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:137 msgid "" "Click and drag on the edge of any dock or panel to resize it horizontally or " "vertically." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:140 msgid "|image18|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:142 msgid "" "Click the three-dotted icon at the top of any dock to change its location." msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:145 msgid "|image19|" msgstr "" #: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:147 msgid "" "Go to the ``Editor`` menu and ``Editor Settings`` to fine-tune the look and " "feel of the editor." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:4 msgid "Scenes and nodes" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:11 msgid "" "Imagine for a second that you are not a game developer anymore. Instead, " "you're a chef! Change your hipster outfit for a toque and a double breasted " "jacket. Now, instead of making games, you create new and delicious recipes " "for your guests." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:16 msgid "" "So, how does a chef create a recipe? Recipes are divided into two sections: " "the first is the ingredients and the second is the instructions to prepare " "it. This way, anyone can follow the recipe and savor your magnificent " "creation." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:21 msgid "" "Making games in Godot feels pretty much the same way. Using the engine feels " "like being in a kitchen. In this kitchen, *nodes* are like a refrigerator " "full of fresh ingredients with which to cook." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:25 msgid "" "There are many types of nodes. Some show images, others play sound, other " "nodes display 3D models, etc. There are dozens of them." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:29 #: ../../docs/development/file_formats/tscn.rst:27 msgid "Nodes" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:31 msgid "" "But let's start with the basics. Nodes are fundamental building blocks for " "creating a game. As mentioned above, a node can perform a variety of " "specialized functions. However, any given node always has the following " "attributes:" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:35 msgid "It has a name." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:36 msgid "It has editable properties." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:37 msgid "It can receive a callback to process every frame." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:38 msgid "It can be extended (to have more functions)." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:39 msgid "It can be added to other nodes as children." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:43 msgid "" "The last one is important. Nodes can have other nodes as children. When " "arranged in this way, the nodes become a **tree**." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:46 msgid "" "In Godot, the ability to arrange nodes in this way creates a powerful tool " "for organizing projects. Since different nodes have different functions, " "combining them allows for the creation of more complex functions." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:50 msgid "" "Don't worry if this doesn't click yet. We will continue to explore this over " "the next few sections. The most important fact to remember for now is that " "nodes exist and can be arranged this way." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:55 msgid "Scenes" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:59 msgid "" "Now that the concept of nodes has been defined, the next logical step is to " "explain what a Scene is." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:62 msgid "" "A scene is composed of a group of nodes organized hierarchically (in tree " "fashion). Furthermore, a scene:" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:65 msgid "always has only one root node." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:66 msgid "can be saved to disk and loaded back." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:67 msgid "can be *instanced* (more on that later)." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:69 msgid "" "Running a game means running a scene. A project can contain several scenes, " "but for the game to start, one of them must be selected as the main scene." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:72 msgid "" "Basically, the Godot editor is a **scene editor**. It has plenty of tools " "for editing 2D and 3D scenes as well as user interfaces, but the editor is " "based on the concept of editing a scene and the nodes that compose it." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:77 msgid "Creating a new project" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:79 msgid "" "Let's make these abstract concepts more concrete with an example. Following " "a long tradition in tutorials, we'll start with a \"Hello World\" project. " "This will introduce us to using the editor." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:83 msgid "" "If you run the godot executable outside of a project, the Project Manager " "appears. This helps developers manage their projects." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:88 msgid "" "To create a new project, click the \"New Project\" option. Choose and create " "a path for the project and specify the project name \"New Project\":" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:94 #: ../../docs/getting_started/editor/external_editor.rst:32 msgid "Editor" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:96 msgid "" "Once you've created the \"New Project\", then open it. This will open the " "Godot editor:" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:101 msgid "" "As mentioned before, making games in Godot feels like being in a kitchen, so " "let's open the refrigerator and add some fresh nodes to the project. We'll " "begin with a \"Hello World!\" message that we'll put on the screen." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:106 msgid "" "To do this, press the \"New Node\" button (which looks like a plus symbol):" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:110 msgid "" "This will open the Create Node dialog, showing the long list of nodes that " "can be created:" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:115 msgid "" "From there, select the \"Label\" node first. Searching for it is probably " "the quickest way:" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:120 msgid "And finally, create the Label! A lot happens when Create is pressed:" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:124 msgid "" "First of all, the scene changes to the 2D editor (because Label is a 2D Node " "type), and the Label appears, selected, at the top left corner of the " "viewport." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:127 msgid "" "The node appears in the scene tree editor (box in the top right corner), and " "the label properties appear in the Inspector (box in the bottom right " "corner)." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:131 msgid "" "The next step will be to change the \"Text\" Property of the label. Let's " "change it to \"Hello, World!\":" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:136 msgid "" "Ok, everything's ready to run the scene! Press the PLAY SCENE Button on the " "top bar (or hit F6):" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:141 msgid "Aaaand... Oops." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:145 msgid "" "Scenes need to be saved to be run, so save the scene to something like hello." "tscn in Scene -> Save:" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:150 msgid "" "And here's when something funny happens. The file dialog is a special file " "dialog, and only allows you to save inside the project. The project root is " "\"res://\" which means \"resource path\". This means that files can only be " "saved inside the project. For the future, when doing file operations in " "Godot, remember that \"res://\" is the resource path, and no matter the " "platform or install location, it is the way to locate where resource files " "are from inside the game." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:158 msgid "" "After saving the scene and pressing run scene again, the \"Hello, World!\" " "demo should finally execute:" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:163 msgid "Success!" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:168 msgid "Configuring the project" msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:170 msgid "" "Ok, it's time to configure the project. Right now, the only way to run " "something is to execute the current scene. Projects, however, may have " "several scenes, so one of them must be set as the main scene. This is the " "scene that will be loaded any time the project is run." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:175 msgid "" "These settings are all stored in a project.godot file, which is a plaintext " "file in win.ini format (for easy editing). There are dozens of settings that " "you can change in this file to alter how a project executes. To simplify " "this process, Godot provides a project settings dialog, which acts as a sort " "of frontend to editing a project.godot file." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:181 msgid "To access that dialog, select Project -> Project Settings. Try it now." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:183 msgid "" "Once the window opens, let's select a main scene. Locate the `Application/" "Run/Main Scene` property and click on it to select 'hello.tscn'." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:188 msgid "" "Now, with this change, when you press the regular Play button (or F5), this " "scene will run, no matter which scene is actively being edited." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:191 msgid "" "The project settings dialog provides a lot of options that can be saved to a " "project.godot file and shows their default values. If you change a value, a " "tick is marked to the left of its name. This means that the property will be " "saved to the project.godot file and remembered." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:196 msgid "" "As a side note, it is also possible to add custom configuration options and " "read them in at run-time using the :ref:`ProjectSettings " "` singleton." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:200 msgid "To be continued..." msgstr "" #: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:202 msgid "" "This tutorial talked about \"scenes and nodes\", but so far there has been " "only *one* scene and *one* node! Don't worry, the next tutorial will expand " "on that..." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:4 msgid "Instancing" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:9 msgid "" "Creating a single scene and adding nodes into it might work for small " "projects, but as a project grows in size and complexity, the number of nodes " "can quickly become unmanageable. To address this, Godot allows a project to " "be separated into any number of scenes. This provides you with a powerful " "tool that helps you organize the different components of your game." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:15 msgid "" "In :ref:`doc_scenes_and_nodes` you learned that a scene is a collection of " "nodes organized in a tree structure, with a single node as the tree root." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:20 msgid "" "You can create as many scenes as you like and save them to disk. Scenes " "saved in this manner are called \"Packed Scenes\" and have a ``.tscn`` " "filename extension." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:26 msgid "" "Once a scene has been saved, it can be instanced into another scene as if it " "were any other node." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:31 msgid "In the above picture, Scene B was added to Scene A as an instance." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:34 msgid "Instancing By Example" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:36 msgid "" "To learn how instancing works, let's start by downloading a sample project: :" "download:`instancing.zip `." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:39 msgid "" "Unzip this project anywhere you like. Then open Godot and add this project " "to the project manager using the 'Import' button:" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:44 msgid "" "Browse to the folder you extracted and open the \"project.godot\" file you " "can find inside it. After doing this, the new project will appear on the " "list of projects. Edit the project by pressing the 'Edit' button." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:48 msgid "" "This project contains two scenes: \"Ball.tscn\" and \"Main.tscn\". The ball " "scene uses a :ref:`RigidBody2D ` to provide physics " "behavior while the main scene has a set of obstacles for the ball to collide " "with (using :ref:`StaticBody2D `)." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:57 msgid "Open the ``Main`` scene, and then select the root node:" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:61 msgid "" "We want to add an instance of the ``Ball`` scene as a child of ``Main``. " "Click the \"link\"-shaped button (its hover-text says \"Instance a scene " "file as a Node.\") and select the ``Ball.tscn`` file." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:67 msgid "" "The ball will be placed at the top-left corner of the screen area (this is " "``(0, 0)`` in screen coordinates). Click and drag the ball somewhere near " "the top-center of the scene:" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:73 msgid "Press \"Play\" and watch the ball fall to the bottom of the screen:" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:78 msgid "Multiple Instances" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:80 msgid "" "You can add as many instances as you like to a scene, either by using the " "\"Instance\" button again, or by clicking on the ball instance and pressing " "\"Duplicate\" (Ctrl-D):" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:86 msgid "Run the scene again and all of the balls will fall." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:91 msgid "Editing instances" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:93 msgid "" "Open the ``Ball`` scene and change the ``Bounce`` property in the Inspector " "to `1`. Press \"Play\" and notice that all of the instanced balls are now " "much more bouncy. Because the instanced balls are based on the saved scene, " "changes to that scene will affect all instances." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:98 msgid "" "You can also adjust individual instances. Set the bounce value back to " "``0.5`` and then in the ``Main`` scene, select one of the instanced balls. " "Set its ``Bounce`` to ``1`` and press \"Play\"." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:104 msgid "" "Notice that a grey \"revert\" button appears next to the adjusted property. " "When this button is present, it means you modified a property in the " "instanced scene to override its value in the saved scene. Even if that " "property is modified in the original scene, the custom value will remain. " "Pressing the revert button will restore the property to the value in the " "saved scene." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:112 msgid "Conclusion" msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:114 msgid "" "Instancing can be useful when you want to create many copies of the same " "object." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:4 msgid "Instancing (continued)" msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:7 msgid "Recap" msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:9 msgid "Instancing has many handy uses. At a glance, with instancing you have:" msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:11 msgid "The ability to subdivide scenes and make them easier to manage." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:12 msgid "" "A more flexible alternative to prefabs (and much more powerful given that " "instances can be nested)." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:14 msgid "" "A way to organize and embed complex game flows or even UIs (in Godot, UI " "Elements are nodes, too)." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:18 msgid "Design language" msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:20 msgid "" "But the greatest strength that comes with instancing scenes is that it works " "as an excellent design language. This is pretty much what distinguishes " "Godot from all the other engines out there. Godot was designed from the " "ground up around this concept." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:25 msgid "" "When making games with Godot, the recommended approach is to dismiss most " "common design patterns, such as MVC or Entity-Relationship diagrams, and " "instead think about your scenes in a more natural way. Start by imagining " "the visible elements in your game, the ones that can be named not just by a " "programmer, but by anyone." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:31 msgid "For example, here's how a simple shooter game could be imagined:" msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:35 msgid "" "You can come up with a diagram like this for almost any kind of game. Write " "down the parts of the game that you can visualize, and then add arrows to " "represent ownership of one component by another." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:39 msgid "" "Once you have a diagram like this, the recommended process for making a game " "is to create a scene for each element listed in the diagram. You'll use " "instancing (either by code or directly in the editor) for the ownership " "relationships." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:43 msgid "" "A lot of time spent in programming games (or software in general) is on " "designing an architecture and fitting game components to that architecture. " "Designing based on scenes replaces that approach and makes development much " "faster and more straightforward, allowing you to concentrate on the game " "logic itself. Because most game components map directly to a scene, using a " "design-based on scene instantiation means little other architectural code is " "needed." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:49 msgid "" "Let's take a look at one more, somewhat more complex, example of an open-" "world type game with lots of assets and nested elements:" msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:54 msgid "" "Take a look at the room element. Let's say we started there. We could make a " "couple of different room scenes, with different arrangements of furniture " "(also scenes) in them. Later, we could make a house scene, connecting rooms " "to make up its interior." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:59 msgid "" "Then, we could make a citadel scene, which is made out of many instanced " "houses. Then, we could start working on the world map terrain, adding the " "citadel onto it." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:63 msgid "" "Later, we could create scenes that represent guards (and other NPCs) and add " "them to the citadel as well. As a result, they would be indirectly added to " "the overall game world." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:67 msgid "" "With Godot, it's easy to iterate on your game like this, as all you need to " "do is create and instance more scenes. Furthermore, the editor UI is " "designed to be user friendly for programmers and non-programmers alike. A " "typical team development process can involve 2D or 3D artists, level " "designers, game designers, and animators, all working with the editor " "interface." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:74 msgid "Information overload!" msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:76 msgid "" "This has been a lot of high level information dropped on you all at once. " "However, the important part of this tutorial was to create an awareness of " "how scenes and instancing are used in real projects." msgstr "" #: ../../docs/getting_started/step_by_step/instancing_continued.rst:80 msgid "" "Everything discussed here will become second nature to you once you start " "making games and putting these concepts into practice. For now, don't worry " "about it too much, and go on to the next tutorial!" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:4 #: ../../docs/getting_started/step_by_step/resources.rst:165 #: ../../docs/getting_started/scripting/index.rst:2 #: ../../docs/tutorials/networking/http_request_class.rst:22 msgid "Scripting" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:9 msgid "" "Before Godot 3.0, the only choice for scripting a game was to use :ref:" "`doc_gdscript`. Nowadays, Godot has four (yes, four!) official languages and " "the ability to add extra scripting languages dynamically!" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:13 msgid "" "This is great, mostly due the large amount of flexibility provided, but it " "also makes our work supporting languages more difficult." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:16 msgid "" "The \"Main\" languages in Godot, though, are GDScript and VisualScript. The " "main reason to choose them is their level of integration with Godot, as this " "makes the experience smoother; both have slick editor integration, while C# " "and C++ need to be edited in a separate IDE. If you are a big fan of " "statically typed languages, go with C# and C++ instead." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:22 #: ../../docs/getting_started/scripting/gdscript/index.rst:2 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:4 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:114 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:129 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:142 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:153 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:161 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:180 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:223 msgid "GDScript" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:24 msgid "" ":ref:`doc_gdscript` is, as mentioned above, the main language used in Godot. " "Using it has some positive points compared to other languages due to its " "high integration with Godot:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:28 msgid "" "It's simple, elegant, and designed to be familiar for users of other " "languages such as Lua, Python, Squirrel, etc." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:29 msgid "Loads and compiles blazingly fast." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:30 msgid "" "The editor integration is a pleasure to work with, with code completion for " "nodes, signals, and many other items pertaining to the scene being edited." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:31 msgid "" "Has vector types built-in (such as Vectors, transforms, etc.), making it " "efficient for heavy use of linear algebra." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:32 msgid "" "Supports multiple threads as efficiently as statically typed languages - one " "of the limitations that made us avoid VMs such as Lua, Squirrel, etc." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:33 msgid "" "Uses no garbage collector, so it trades a small bit of automation (most " "objects are reference counted anyway), by determinism." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:34 msgid "" "Its dynamic nature makes it easy to optimize sections of code in C++ (via " "GDNative) if more performance is required, all without recompiling the " "engine." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:36 msgid "" "If you're undecided and have experience with programming, especially " "dynamically typed languages, go for GDScript!" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:40 #: ../../docs/getting_started/scripting/visual_script/index.rst:2 msgid "VisualScript" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:42 msgid "" "Beginning with 3.0, Godot offers :ref:`Visual " "Scripting`. This is a typical implementation of a " "\"blocks and connections\" language, but adapted to how Godot works." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:46 msgid "" "Visual scripting is a great tool for non-programmers, or even for " "experienced developers who want to make parts of the code more accessible to " "others, like game designers or artists." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:50 msgid "" "It can also be used by programmers to build state machines or custom visual " "node workflows - for example, a dialogue system." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:55 msgid ".NET / C#" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:57 msgid "" "As Microsoft's C# is a favorite amongst game developers, we have added " "official support for it. C# is a mature language with tons of code written " "for it, and support was added thanks to a generous donation from Microsoft." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:62 msgid "" "It has an excellent tradeoff between performance and ease of use, although " "one must be aware of its garbage collector." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:65 msgid "" "C# is usually the best choice for companies. The large amount of programmers " "familiar with it means less time can be spent learning Godot and more time " "can be spent programming with it." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:69 msgid "" "Since Godot uses the `Mono `_ .NET runtime, in " "theory any third-party .NET library or framework can be used for scripting " "in Godot, as well as any Common Language Infrastructure-compliant " "programming language, such as F#, Boo or ClojureCLR. In practice however, C# " "is the only officially supported .NET option." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:75 msgid "GDNative / C++" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:77 msgid "" "Finally, one of our brightest additions for the 3.0 release: GDNative allows " "scripting in C++ without needing to recompile (or even restart) Godot." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:81 msgid "" "Any C++ version can be used, and mixing compiler brands and versions for the " "generated shared libraries works perfectly, thanks to our use of an internal " "C API Bridge." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:85 msgid "" "This language is the best choice for performance and does not need to be " "used throughout an entire game, as other parts can be written in GDScript or " "Visual Script. However the API is clear and easy to use as it resembles, " "mostly, Godot's actual C++ API." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:90 msgid "" "More languages can be made available through the GDNative interface, but " "keep in mind we don't have official support for them." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:94 msgid "Scripting a scene" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:96 msgid "" "For the rest of this tutorial we'll set up a GUI scene consisting of a " "button and a label, where pressing the button will update the label. This " "will demonstrate:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:100 msgid "Writing a script and attaching it to a node." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:101 msgid "Hooking up UI elements via signals." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:102 msgid "Writing a script that can access other nodes in the scene." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:104 msgid "" "Before continuing, please make sure to read the :ref:`doc_gdscript` " "reference. It's a language designed to be simple, and the reference is " "short, so it will not take more than a few minutes to get an overview of the " "concepts." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:109 #: ../../docs/tutorials/physics/kinematic_character_2d.rst:80 #: ../../docs/tutorials/animation/introduction_2d.rst:113 msgid "Scene setup" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:111 msgid "" "Use the \"Add Child Node\" dialogue accessed from the Scene tab (or by " "pressing ``Ctrl+A``) to create a hierarchy with the following nodes:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:114 msgid "Panel" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:116 #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:141 msgid "Label" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:117 msgid "Button" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:119 msgid "The scene tree should look like this:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:123 msgid "" "Use the 2D editor to position and resize the Button and Label so that they " "look like the image below. You can set the text from the Inspector tab." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:128 msgid "Finally, save the scene with a name such as ``sayhello.tscn``." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:133 msgid "Adding a script" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:135 msgid "" "Right click on the Panel node, then select \"Attach Script\" from the " "context menu:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:140 msgid "" "The script creation dialog will pop up. This dialog allows you to set the " "script's language, class name, and other relevant options." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:143 msgid "" "In GDScript the file itself represents the class, so the class name field is " "not editable." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:146 msgid "" "The node we're attaching the script to is a panel, so the Inherits field " "will automatically be filled in with \"Panel\". This is what we want, as the " "script's goal is to extend the functionality of our panel node." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:150 msgid "Finally, enter a path name for the script and select Create:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:154 msgid "" "The script will then be created and added to the node. You can see this as " "an \"Open script\" icon next to the node in the Scene tab, as well as in the " "script property under Inspector:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:160 msgid "" "To edit the script, select either of these buttons, both of which are " "highlighted in the above image. This will bring you to the script editor " "where a default template will be included:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:165 msgid "" "There's not much there. The ``_ready()`` function is called when the node, " "and all its children, enters the active scene. **Note:** ``_ready()`` is not " "the constructor; the constructor is instead ``_init()``." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:170 msgid "The role of the script" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:172 msgid "" "A script adds behavior to a node. It is used to control how the node " "functions as well as how it interacts with other nodes: children, parent, " "siblings, and so on. The local scope of the script is the node. In other " "words, the script inherits the functions provided by that node." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:180 msgid "Handling a signal" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:182 msgid "" "Signals are \"emitted\" when some specific kind of action happens, and they " "can be connected to any function of any script instance. Signals are used " "mostly in GUI nodes, although other nodes have them too, and you can even " "define custom signals in your own scripts." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:187 msgid "" "In this step, we'll connect the \"pressed\" signal to a custom function. " "Forming connections is the first part and defining the custom function is " "the second part. For the first part, Godot provides two ways to create " "connections: through a visual interface the editor provides or through code." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:192 msgid "" "While we will use the code method for the remainder of this tutorial series, " "let's cover how the editor interface works for future reference." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:195 msgid "" "Select the Button node in the scene tree and then select the \"Node\" tab. " "Next, make sure that you have \"Signals\" selected." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:200 msgid "" "If you then select \"pressed()\" under \"BaseButton\" and click the " "\"Connect...\" button in the bottom right, you'll open up the connection " "creation dialogue." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:205 msgid "" "In the bottom-left are the key things you need to create a connection: a " "node which implements the method you want to trigger (represented here as a " "NodePath) and the name of the method to trigger." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:209 msgid "" "The top-left section displays a list of your scene's nodes with the emitting " "node's name highlighted in red. Select the \"Panel\" node here. When you " "select a node, the NodePath at the bottom will automatically update to point " "a relative path from the emitting node to the selected node." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:214 msgid "" "By default, the method name will contain the emitting node's name (\"Button" "\" in this case), resulting in \"_on_[EmitterNode]_[signal_name]\". If you " "do have the \"Make Function\" check button checked, then the editor will " "generate the function for you before setting up the connection." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:219 msgid "" "And that concludes the guide on how to use the visual interface. However, " "this is a scripting tutorial, so for the sake of learning, let's dive in to " "the manual process!" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:223 msgid "" "To accomplish this, we will introduce a function that is probably the most " "used by Godot programmers: :ref:`Node.get_node() `. " "This function uses paths to fetch nodes anywhere in the scene, relative to " "the node that owns the script." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:228 msgid "" "For the sake of convenience, delete everything underneath ``extends Panel``. " "You will fill out the rest of the script manually." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:231 msgid "" "Because the Button and Label are siblings under the Panel where the script " "is attached, you can fetch the Button by typing the following underneath the " "``_ready()`` function:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:248 msgid "Next, write a function which will be called when the button is pressed:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:264 msgid "" "Finally, connect the button's \"pressed\" signal to ``_ready()`` by using :" "ref:`Object.connect() `." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:280 msgid "The final script should look like this:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:317 msgid "" "Run the scene and press the button. You should get the following result:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:321 msgid "Why, hello there! Congratulations on scripting your first scene." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:325 msgid "" "A common misunderstanding regarding this tutorial is how ``get_node(path)`` " "works. For a given node, ``get_node(path)`` searches its immediate children. " "In the above code, this means that Button must be a child of Panel. If " "Button were instead a child of Label, the code to obtain it would be:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:343 msgid "Also, remember that nodes are referenced by name, not by type." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:347 msgid "" "The right-hand panel of the connect dialogue is for binding specific values " "to the connected function's parameters. You can add and remove values of " "different types." msgstr "" #: ../../docs/getting_started/step_by_step/scripting.rst:351 msgid "" "The code approach also enables this with a 4th ``Array`` parameter that is " "empty by default. Feel free to read up on the ``Object.connect`` method for " "more information." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:4 msgid "Scripting (continued)" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:7 msgid "Processing" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:9 msgid "" "Several actions in Godot are triggered by callbacks or virtual functions, so " "there is no need to write code that runs all the time." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:12 msgid "" "However, it is still common to need a script to be processed on every frame. " "There are two types of processing: idle processing and physics processing." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:16 msgid "" "Idle processing is activated when the method :ref:`Node._process() " "` is found in a script. It can be turned off and on " "with the :ref:`Node.set_process() ` function." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:20 msgid "" "This method will be called every time a frame is drawn, so it's fully " "dependent on how many frames per second (FPS) the application is running at:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:37 msgid "" "The delta parameter contains the time elapsed in seconds, as a floating " "point, since the previous call to ``_process()``." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:40 msgid "" "This parameter can be used to make sure things always take the same amount " "of time, regardless of the game's FPS." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:43 msgid "" "For example, movement is often multiplied with a time delta to make movement " "speed both constant and independent from the frame rate." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:46 msgid "" "Physics processing with ``_physics_process()`` is similar, but it should be " "used for processes that must happen before each physics step, such as " "controlling a character. It always runs before a physics step and it is " "called at fixed time intervals: 60 times per second by default. You can " "change the interval from the Project Settings, under Physics -> Common -> " "Physics Fps." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:52 msgid "" "The function ``_process()``, however, is not synced with physics. Its frame " "rate is not constant and is dependent on hardware and game optimization. Its " "execution is done after the physics step on single-threaded games." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:55 msgid "" "A simple way to test this is to create a scene with a single Label node, " "with the following script:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:82 msgid "Which will show a counter increasing each frame." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:85 msgid "Groups" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:87 msgid "" "Nodes can be added to groups, as many as desired per node, and is a useful " "feature for organizing large scenes. There are two ways to do this. The " "first is from the UI, from the Groups button under the Node panel:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:92 msgid "" "And the second way is from code. One example would be to tag scenes which " "are enemies:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:110 msgid "" "This way, if the player is discovered sneaking into a secret base, all " "enemies can be notified about its alarm sounding by using :ref:`SceneTree." "call_group() `:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:127 msgid "" "The above code calls the function ``player_was_discovered`` on every member " "of the group ``enemies``." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:130 msgid "" "It is also possible to get the full list of ``enemies`` nodes by calling :" "ref:`SceneTree.get_nodes_in_group() `:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:143 msgid "" "The :ref:`SceneTree ` class provides many useful methods, " "like interacting with scenes, their node hierarchy and groups of nodes. It " "allows you to easily switch scenes or reload them, to quit the game or pause " "and unpause it. It even comes with interesting signals. So check it out if " "you got some time!" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:151 #: ../../docs/tutorials/gui/custom_gui_controls.rst:171 msgid "Notifications" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:153 msgid "" "Godot has a system of notifications. These are usually not needed for " "scripting, as it's too low-level and virtual functions are provided for most " "of them. It's just good to know they exist. For example, you may add an :ref:" "`Object._notification() ` function in your " "script:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:188 msgid "" "The documentation of each class in the :ref:`Class Reference ` shows the notifications it can receive. However, in most cases " "GDScript provides simpler overrideable functions." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:193 msgid "Overrideable functions" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:195 msgid "" "Such overrideable functions, which are described as follows, can be applied " "to nodes:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:267 msgid "" "As mentioned before, it's better to use these functions instead of the " "notification system." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:271 msgid "Creating nodes" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:273 msgid "" "To create a node from code, call the ``.new()`` method, like for any other " "class-based datatype. For example:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:297 msgid "" "To delete a node, be it inside or outside the scene, ``free()`` must be used:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:313 msgid "" "When a node is freed, it also frees all its children nodes. Because of this, " "manually deleting nodes is much simpler than it appears. Free the base node " "and everything else in the subtree goes away with it." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:317 msgid "" "A situation might occur where we want to delete a node that is currently " "\"blocked\", because it is emitting a signal or calling a function. This " "will crash the game. Running Godot with the debugger will often catch this " "case and warn you about it." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:322 msgid "" "The safest way to delete a node is by using :ref:`Node.queue_free() " "`. This erases the node safely during idle." msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:340 msgid "Instancing scenes" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:342 msgid "" "Instancing a scene from code is done in two steps. The first one is to load " "the scene from your hard drive:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:355 msgid "" "Preloading it can be more convenient, as it happens at parse time (GDScript " "only):" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:362 msgid "" "But ``scene`` is not yet a node. It's packed in a special resource called :" "ref:`PackedScene `. To create the actual node, the " "function :ref:`PackedScene.instance() ` must be " "called. This will return the tree of nodes that can be added to the active " "scene:" msgstr "" #: ../../docs/getting_started/step_by_step/scripting_continued.rst:380 msgid "" "The advantage of this two-step process is that a packed scene may be kept " "loaded and ready to use so that you can create as many instances as desired. " "This is especially useful to quickly instance several enemies, bullets, and " "other entities in the active scene." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:4 msgid "Your First Game" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:7 #: ../../docs/getting_started/step_by_step/exporting.rst:7 #: ../../docs/tutorials/animation/introduction_2d.rst:7 #: ../../docs/tutorials/assetlib/using_assetlib.rst:10 msgid "Overview" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:9 msgid "" "This tutorial will guide you through making your first Godot project. You " "will learn how the Godot editor works, how to structure a project, and how " "to build a 2D game." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:13 msgid "" "This project is an introduction to the Godot engine. It assumes that you " "have some programming experience already. If you're new to programming " "entirely, you should start here: :ref:`doc_scripting`." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:18 msgid "" "The game is called \"Dodge the Creeps!\". Your character must move and avoid " "the enemies for as long as possible. Here is a preview of the final result:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:24 msgid "" "**Why 2D?** 3D games are much more complex than 2D ones. You should stick to " "2D until you have a good understanding of the game development process." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:28 #: ../../docs/development/cpp/configuring_an_ide.rst:147 msgid "Project Setup" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:30 msgid "" "Launch Godot and create a new project. Then, download :download:" "`dodge_assets.zip ` - the images and sounds you'll " "be using to make the game. Unzip these files to your project folder." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:34 msgid "" "For this tutorial, we will assume you are familiar with the editor. If you " "haven't read :ref:`doc_scenes_and_nodes`, do so now for an explanation of " "setting up a project and using the editor." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:38 msgid "" "This game will use portrait mode, so we need to adjust the size of the game " "window. Click on Project -> Project Settings -> Display -> Window and set " "\"Width\" to 480 and \"Height\" to 720." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:43 msgid "Organizing the Project" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:45 msgid "" "In this project, we will make 3 independent scenes: ``Player``, ``Mob``, and " "``HUD``, which we will combine into the game's ``Main`` scene. In a larger " "project, it might be useful to make folders to hold the various scenes and " "their scripts, but for this relatively small game, you can save your scenes " "and scripts in the root folder, referred to as ``res://``. You can see your " "project folders in the FileSystem Dock in the upper left corner:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:56 msgid "Player Scene" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:58 msgid "" "The first scene we will make defines the ``Player`` object. One of the " "benefits of creating a separate Player scene is that we can test it " "separately, even before we've created other parts of the game." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:63 msgid "Node Structure" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:65 msgid "" "To begin, click the \"Add/Create a New Node\" button and add an :ref:`Area2D " "` node to the scene." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:70 msgid "" "With ``Area2D`` we can detect objects that overlap or run into the player. " "Change its name to ``Player`` by clicking on the node's name. This is the " "scene's root node. We can add additional nodes to the player to add " "functionality." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:74 msgid "" "Before we add any children to the ``Player`` node, we want to make sure we " "don't accidentally move or resize them by clicking on them. Select the node " "and click the icon to the right of the lock; its tooltip says \"Makes sure " "the object's children are not selectable.\"" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:81 msgid "" "Save the scene. Click Scene -> Save, or press ``Ctrl+S`` on Windows/Linux or " "``Command+S`` on Mac." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:83 msgid "" "For this project, we will be following the Godot naming conventions. Classes " "(nodes) use ``PascalCase``, variables and functions use ``snake_case``, and " "constants use ``ALL_CAPS``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:88 msgid "Sprite Animation" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:90 msgid "" "Click on the ``Player`` node and add an :ref:`AnimatedSprite " "` node as a child. The ``AnimatedSprite`` will handle " "the appearance and animations for our player. Notice that there is a warning " "symbol next to the node. An ``AnimatedSprite`` requires a :ref:`SpriteFrames " "` resource, which is a list of the animations it can " "display. To create one, find the ``Frames`` property in the Inspector and " "click \"\" -> \"New SpriteFrames\". Next, in the same location, click " "```` to open the \"SpriteFrames\" panel:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:102 msgid "" "On the left is a list of animations. Click the \"default\" one and rename it " "to \"right\". Then click the \"Add\" button to create a second animation " "named \"up\". Drag the two images for each animation, named " "``playerGrey_up[1/2]`` and ``playerGrey_walk[1/2]``, into the \"Animation " "Frames\" side of the panel:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:109 msgid "" "The player images are a bit too large for the game window, so we need to " "scale them down. Click on the ``AnimatedSprite`` node and set the ``Scale`` " "property to ``(0.5, 0.5)``. You can find it in the Inspector under the " "``Node2D`` heading." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:116 msgid "" "Finally, add a :ref:`CollisionShape2D ` as a child " "of ``Player``. This will determine the player's \"hitbox\", or the bounds of " "its collision area. For this character, a ``CapsuleShape2D`` node gives the " "best fit, so next to \"Shape\" in the Inspector, click \"\"\" -> \"New " "CapsuleShape2D\". Resize the shape to cover the sprite:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:124 msgid "" "Don't scale the shape's outline! Only use the size handles (circled in red) " "to adjust the shape!" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:127 msgid "When you're finished, your ``Player`` scene should look like this:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:132 msgid "Moving the Player" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:134 msgid "" "Now we need to add some functionality that we can't get from a built-in " "node, so we'll add a script. Click the ``Player`` node and click the \"Add " "Script\" button:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:140 msgid "" "In the script settings window, you can leave the default settings alone. " "Just click \"Create\":" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:143 msgid "" "If you're creating a C# script or other languages, select the language from " "the `language` drop down menu before hitting create." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:148 msgid "" "If this is your first time encountering GDScript, please read :ref:" "`doc_scripting` before continuing." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:151 msgid "Start by declaring the member variables this object will need:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:172 msgid "" "Using the ``export`` keyword on the first variable ``speed`` allows us to " "set its value in the Inspector. This can be handy for values that you want " "to be able to adjust just like a node's built-in properties. Click on the " "``Player`` node and set the speed property to ``400``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:177 msgid "" "If you're using C#, you need to restart godot editor temporarily to see " "exported variables in the editor until it's fixed." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:182 msgid "" "The ``_ready()`` function is called when a node enters the scene tree, which " "is a good time to find the size of the game window:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:198 msgid "" "Now we can use the ``_process()`` function to define what the player will " "do. ``_process()`` is called every frame, so we'll use it to update elements " "of our game which we expect will change often. Here we'll make it:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:202 msgid "Check for input." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:203 msgid "Move in the given direction." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:204 msgid "Play the appropriate animation." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:206 msgid "" "First, we need to check for input - is the player pressing a key? For this " "game, we have 4 direction inputs to check. Input actions are defined in the " "Project Settings under \"Input Map\". You can define custom events and " "assign different keys, mouse events, or other inputs to them. For this demo, " "we will use the default events that are assigned to the arrow keys on the " "keyboard." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:213 msgid "" "You can detect whether a key is pressed using ``Input.is_action_pressed()``, " "which returns ``true`` if it is pressed or ``false`` if it isn't." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:266 msgid "" "We check each input and add/subtract from the ``velocity`` to obtain a total " "direction. For example, if you hold ``right`` and ``down`` at the same time, " "the resulting ``velocity`` vector will be ``(1, 1)``. In this case, since " "we're adding a horizontal and a vertical movement, the player would move " "*faster* than if it just moved horizontally." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:272 msgid "" "We can prevent that if we *normalize* the velocity, which means we set its " "*length* to ``1``, and multiply by the desired speed. This means no more " "fast diagonal movement." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:276 msgid "" "If you've never used vector math before, or need a refresher, you can see an " "explanation of vector usage in Godot at :ref:`doc_vector_math`. It's good to " "know but won't be necessary for the rest of this tutorial." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:280 msgid "" "We also check whether the player is moving so we can start or stop the " "AnimatedSprite animation." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:283 msgid "" "``$`` returns the node at the relative path from this node, or returns " "``null`` if the node is not found. Since AnimatedSprite is a child of the " "current node, we can use ``$AnimatedSprite``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:286 msgid "" "``$`` is shorthand for ``get_node()``. So in the code above, ``" "$AnimatedSprite.play()`` is the same as ``get_node(\"AnimatedSprite\")." "play()``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:289 msgid "" "Now that we have a movement direction, we can update ``Player``'s position " "and use ``clamp()`` to prevent it from leaving the screen by adding the " "following to the bottom of the ``_process`` function:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:309 msgid "*Clamping* a value means restricting it to a given range." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:311 msgid "" "Click \"Play Scene\" (``F6``) and confirm you can move the player around the " "screen in all directions." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:314 msgid "" "If you get an error in the \"Debugger\" panel that refers to a \"null " "instance\", this likely means you spelled the node name wrong. Node names " "are case-sensitive and ``$NodeName`` or ``get_node(\"NodeName\")`` must " "match the name you see in the scene tree." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:319 msgid "Choosing Animations" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:321 msgid "" "Now that the player can move, we need to change which animation the " "AnimatedSprite is playing based on direction. We have a \"right\" animation, " "which should be flipped horizontally using the ``flip_h`` property for left " "movement, and an \"up\" animation, which should be flipped vertically with " "``flip_v`` for downward movement. Let's place this code at the end of our " "``_process()`` function:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:350 msgid "" "Play the scene again and check that the animations are correct in each of " "the directions. When you're sure the movement is working correctly, add this " "line to ``_ready()`` so the player will be hidden when the game starts:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:365 msgid "Preparing for Collisions" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:367 msgid "" "We want ``Player`` to detect when it's hit by an enemy, but we haven't made " "any enemies yet! That's OK, because we're going to use Godot's *signal* " "functionality to make it work." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:371 msgid "Add the following at the top of the script, after ``extends Area2d``:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:383 msgid "" "This defines a custom signal called \"hit\" that we will have our player " "emit (send out) when it collides with an enemy. We will use ``Area2D`` to " "detect the collision. Select the ``Player`` node and click the \"Node\" tab " "next to the Inspector tab to see the list of signals the player can emit:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:390 msgid "" "Notice our custom \"hit\" signal is there as well! Since our enemies are " "going to be ``RigidBody2D`` nodes, we want the ``body_entered( Object " "body )`` signal; this will be emitted when a body contacts the player. Click " "\"Connect..\" and then \"Connect\" again on the \"Connecting Signal\" " "window. We don't need to change any of these settings - Godot will " "automatically create a function called ``_on_Player_body_entered`` in your " "player's script." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:398 msgid "" "When connecting a signal, instead of having Godot create a function for you, " "you can also give the name of an existing function that you want to link the " "signal to." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:402 msgid "Add this code to the function:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:425 msgid "" "Disabling the area's collision shape means it won't detect collisions. By " "turning it off, we make sure we don't trigger the ``hit`` signal more than " "once." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:430 msgid "" "The last piece for our player is to add a function we can call to reset the " "player when starting a new game." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:453 msgid "Enemy Scene" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:455 msgid "" "Now it's time to make the enemies our player will have to dodge. Their " "behavior will not be very complex: mobs will spawn randomly at the edges of " "the screen and move in a random direction in a straight line, then despawn " "when they go offscreen." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:460 msgid "" "We will build this into a ``Mob`` scene, which we can then *instance* to " "create any number of independent mobs in the game." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:464 msgid "Node Setup" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:466 msgid "Click Scene -> New Scene and we'll create the Mob." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:468 msgid "The Mob scene will use the following nodes:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:470 msgid ":ref:`RigidBody2D ` (named ``Mob``)" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:472 msgid ":ref:`AnimatedSprite `" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:473 msgid ":ref:`CollisionShape2D `" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:474 msgid "" ":ref:`VisibilityNotifier2D ` (named " "``Visibility``)" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:476 msgid "" "Don't forget to set the children so they can't be selected, like you did " "with the Player scene." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:479 msgid "" "In the :ref:`RigidBody2D ` properties, set ``Gravity " "Scale`` to ``0``, so the mob will not fall downward. In addition, under the " "``PhysicsBody2D`` section, click the ``Mask`` property and uncheck the first " "box. This will ensure the mobs do not collide with each other." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:486 msgid "" "Set up the :ref:`AnimatedSprite ` like you did for the " "player. This time, we have 3 animations: ``fly``, ``swim``, and ``walk``. " "Set the ``Playing`` property in the Inspector to \"On\" and adjust the " "\"Speed (FPS)\" setting as shown below. We'll select one of these animations " "randomly so that the mobs will have some variety." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:493 msgid "" "``fly`` should be set to 3 FPS, with ``swim`` and ``walk`` set to 4 FPS." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:495 msgid "" "Like the player images, these mob images need to be scaled down. Set the " "``AnimatedSprite``'s ``Scale`` property to ``(0.75, 0.75)``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:498 msgid "" "As in the ``Player`` scene, add a ``CapsuleShape2D`` for the collision. To " "align the shape with the image, you'll need to set the ``Rotation Degrees`` " "property to ``90`` under ``Node2D``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:503 msgid "Enemy Script" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:505 msgid "Add a script to the ``Mob`` and add the following member variables:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:529 msgid "" "We'll pick a random value between ``min_speed`` and ``max_speed`` for how " "fast each mob will move (it would be boring if they were all moving at the " "same speed). Set them to ``150`` and ``250`` in the Inspector. We also have " "an array containing the names of the three animations, which we'll use to " "select a random one." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:535 msgid "" "Now let's look at the rest of the script. In ``_ready()`` we randomly choose " "one of the three animation types:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:559 msgid "" "You must use ``randomize()`` if you want your sequence of \"random\" numbers " "to be different every time you run the scene. We're going to use " "``randomize()`` in our ``Main`` scene, so we won't need it here. ``randi() % " "n`` is the standard way to get a random integer between ``0`` and ``n-1``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:565 msgid "" "The last piece is to make the mobs delete themselves when they leave the " "screen. Connect the ``screen_exited()`` signal of the ``Visibility`` node " "and add this code:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:582 msgid "This completes the `Mob` scene." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:585 msgid "Main Scene" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:587 msgid "" "Now it's time to bring it all together. Create a new scene and add a :ref:" "`Node ` named ``Main``. Click the \"Instance\" button and select " "your saved ``Player.tscn``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:593 msgid "See :ref:`doc_instancing` to learn more about instancing." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:595 msgid "" "Now add the following nodes as children of ``Main``, and name them as shown " "(values are in seconds):" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:598 msgid "" ":ref:`Timer ` (named ``MobTimer``) - to control how often mobs " "spawn" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:599 msgid "" ":ref:`Timer ` (named ``ScoreTimer``) - to increment the score " "every second" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:600 msgid "" ":ref:`Timer ` (named ``StartTimer``) - to give a delay before " "starting" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:601 msgid "" ":ref:`Position2D ` (named ``StartPosition``) - to indicate " "the player's start position" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:603 msgid "" "Set the ``Wait Time`` property of each of the ``Timer`` nodes as follows:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:606 msgid "``MobTimer``: ``0.5``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:607 msgid "``ScoreTimer``: ``1``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:608 msgid "``StartTimer``: ``2``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:610 msgid "" "In addition, set the ``One Shot`` property of ``StartTimer`` to \"On\" and " "set ``Position`` of the ``StartPosition`` node to ``(240, 450)``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:614 msgid "Spawning Mobs" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:616 msgid "" "The Main node will be spawning new mobs, and we want them to appear at a " "random location on the edge of the screen. Add a :ref:`Path2D " "` node named ``MobPath`` as a child of ``Main``. When you " "select ``Path2D``, you will see some new buttons at the top of the editor:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:623 msgid "" "Select the middle one (\"Add Point\") and draw the path by clicking to add " "the points at the corners shown. To have the points snap to the grid, make " "sure \"Snap to Grid\" is checked. This option can be found under the " "\"Snapping options\" button to the left of the \"Lock\" button, appearing as " "a series of three vertical dots." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:631 msgid "" "Draw the path in *clockwise* order, or your mobs will spawn pointing " "*outwards* instead of *inwards*!" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:634 msgid "" "After placing point ``4`` in the image, click the \"Close Curve\" button and " "your curve will be complete." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:637 msgid "" "Now that the path is defined, add a :ref:`PathFollow2D ` " "node as a child of ``MobPath`` and name it ``MobSpawnLocation``. This node " "will automatically rotate and follow the path as it moves, so we can use it " "to select a random position and direction along the path." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:643 msgid "Main Script" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:645 msgid "" "Add a script to ``Main``. At the top of the script we use ``export " "(PackedScene)`` to allow us to choose the Mob scene we want to instance." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:684 msgid "" "Drag ``Mob.tscn`` from the \"FileSystem\" panel and drop it in the ``Mob`` " "property under the Script Variables of the ``Main`` node." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:687 msgid "" "Next, click on the Player and connect the ``hit`` signal. We want to make a " "new function named ``game_over``, which will handle what needs to happen " "when a game ends. Type \"game_over\" in the \"Method In Node\" box at the " "bottom of the \"Connecting Signal\" window. Add the following code, as well " "as a ``new_game`` function to set everything up for a new game:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:729 msgid "" "Now connect the ``timeout()`` signal of each of the Timer nodes. " "``StartTimer`` will start the other two timers. ``ScoreTimer`` will " "increment the score by 1." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:760 msgid "" "In ``_on_MobTimer_timeout()`` we will create a mob instance, pick a random " "starting location along the ``Path2D``, and set the mob in motion. The " "``PathFollow2D`` node will automatically rotate as it follows the path, so " "we will use that to select the mob's direction as well as its position." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:766 msgid "" "Note that a new instance must be added to the scene using ``add_child()``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:814 msgid "" "In functions requiring angles, GDScript uses *radians*, not degrees. If " "you're more comfortable working with degrees, you'll need to use the " "``deg2rad()`` and ``rad2deg()`` functions to convert between the two." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:820 msgid "HUD" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:822 msgid "" "The final piece our game needs is a UI: an interface to display things like " "score, a \"game over\" message, and a restart button. Create a new scene, " "and add a :ref:`CanvasLayer ` node named ``HUD``. \"HUD\" " "stands for \"heads-up display\", an informational display that appears as an " "overlay on top of the game view." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:828 msgid "" "The :ref:`CanvasLayer ` node lets us draw our UI elements " "on a layer above the rest of the game, so that the information it displays " "isn't covered up by any game elements like the player or mobs." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:832 msgid "The HUD displays the following information:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:834 msgid "Score, changed by ``ScoreTimer``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:835 msgid "A message, such as \"Game Over\" or \"Get Ready!\"" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:836 msgid "A \"Start\" button to begin the game." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:838 msgid "" "The basic node for UI elements is :ref:`Control `. To create " "our UI, we'll use two types of :ref:`Control ` nodes: :ref:" "`Label ` and :ref:`Button `." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:842 msgid "Create the following as children of the ``HUD`` node:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:844 msgid ":ref:`Label ` named ``ScoreLabel``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:845 msgid ":ref:`Label ` named ``MessageLabel``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:846 msgid ":ref:`Button ` named ``StartButton``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:847 msgid ":ref:`Timer ` named ``MessageTimer``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:849 msgid "" "**Anchors and Margins:** ``Control`` nodes have a position and size, but " "they also have anchors and margins. Anchors define the origin - the " "reference point for the edges of the node. Margins update automatically when " "you move or resize a control node. They represent the distance from the " "control node's edges to its anchor. See :ref:" "`doc_design_interfaces_with_the_control_nodes` for more details." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:856 msgid "" "Arrange the nodes as shown below. Click the \"Anchor\" button to set a " "Control node's anchor:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:861 msgid "" "You can drag the nodes to place them manually, or for more precise " "placement, use the following settings:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:865 msgid "ScoreLabel" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:867 msgid "``Layout``: \"Center Top\"" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:868 #: ../../docs/getting_started/step_by_step/your_first_game.rst:881 #: ../../docs/getting_started/step_by_step/your_first_game.rst:894 msgid "``Margin``:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:870 msgid "Left: ``-25``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:871 msgid "Top: ``0``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:872 msgid "Right: ``25``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:873 msgid "Bottom: ``100``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:875 msgid "Text: ``0``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:878 msgid "MessageLabel" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:880 msgid "``Layout``: \"Center\"" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:883 msgid "Left: ``-200``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:884 msgid "Top: ``-150``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:885 msgid "Right: ``200``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:886 msgid "Bottom: ``0``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:888 msgid "Text: ``Dodge the Creeps!``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:891 msgid "StartButton" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:893 msgid "``Layout``: \"Center Bottom\"" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:896 msgid "Left: ``-100``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:897 msgid "Top: ``-200``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:898 msgid "Right: ``100``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:899 msgid "Bottom: ``-100``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:901 msgid "Text: ``Start``" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:903 msgid "" "The default font for ``Control`` nodes is small and doesn't scale well. " "There is a font file included in the game assets called \"Xolonium-Regular." "ttf\". To use this font, do the following for each of the three ``Control`` " "nodes:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:908 msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:912 msgid "" "Click on the \"DynamicFont\" you added, and under \"Font Data\", choose " "\"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the " "font's ``Size``. A setting of ``64`` works well." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:918 msgid "Now add this script to ``HUD``:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:935 msgid "" "The ``start_game`` signal tells the ``Main`` node that the button has been " "pressed." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:958 msgid "" "This function is called when we want to display a message temporarily, such " "as \"Get Ready\". On the ``MessageTimer``, set the ``Wait Time`` to ``2`` " "and set the ``One Shot`` property to \"On\"." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:987 msgid "" "This function is called when the player loses. It will show \"Game Over\" " "for 2 seconds, then return to the title screen and show the \"Start\" button." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1005 msgid "This function is called in ``Main`` whenever the score changes." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 msgid "" "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` " "signal of ``StartButton``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1037 msgid "Connecting HUD to Main" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1039 msgid "" "Now that we're done creating the ``HUD`` scene, save it and go back to " "``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` " "scene, and place it at the bottom of the tree. The full tree should look " "like this, so make sure you didn't miss anything:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1046 msgid "" "Now we need to connect the ``HUD`` functionality to our ``Main`` script. " "This requires a few additions to the ``Main`` scene:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1049 msgid "" "In the Node tab, connect the HUD's ``start_game`` signal to the " "``new_game()`` function." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1052 msgid "" "In ``new_game()``, update the score display and show the \"Get Ready\" " "message:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1067 msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1079 msgid "" "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in " "sync with the changing score:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1092 msgid "" "Now you're ready to play! Click the \"Play the Project\" button. You will be " "asked to select a main scene, so choose ``Main.tscn``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1096 msgid "Finishing Up" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1098 msgid "" "We have now completed all the functionality for our game. Below are some " "remaining steps to add a bit more \"juice\" to improve the game experience. " "Feel free to expand the gameplay with your own ideas." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1103 #: ../../docs/tutorials/3d/environment_and_post_processing.rst:62 msgid "Background" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1105 msgid "" "The default gray background is not very appealing, so let's change its " "color. One way to do this is to use a :ref:`ColorRect ` " "node. Make it the first node under ``Main`` so that it will be drawn behind " "the other nodes. ``ColorRect`` only has one property: ``Color``. Choose a " "color you like and drag the size of the ``ColorRect`` so that it covers the " "screen." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1112 msgid "" "You can also add a background image, if you have one, by using a ``Sprite`` " "node." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1116 msgid "Sound Effects" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1118 msgid "" "Sound and music can be the single most effective way to add appeal to the " "game experience. In your game assets folder, you have two sound files: " "\"House In a Forest Loop.ogg\" for background music, and \"gameover.wav\" " "for when the player loses." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1123 msgid "" "Add two :ref:`AudioStreamPlayer ` nodes as children " "of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On " "each one, click on the ``Stream`` property, select \"Load\", and choose the " "corresponding audio file." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1128 msgid "" "To play the music, add ``$Music.play()`` in the ``new_game()`` function and " "``$Music.stop()`` in the ``game_over()`` function." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1134 #: ../../docs/tutorials/shading/shading_language.rst:1077 msgid "Particles" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1136 msgid "" "For one last bit of visual appeal, let's add a trail effect to the player's " "movement. Choose your ``Player`` scene and add a :ref:`Particles2D " "` node named ``Trail``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1140 msgid "" "There are a large number of properties to choose from when configuring " "particles. Feel free to experiment and create different effects. For the " "effect in this example, use the following settings:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1146 msgid "" "You also need to create a ``Material`` by clicking on ```` and then " "\"New ParticlesMaterial\". The settings for that are below:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1151 msgid "" "To make the gradient for the \"Color Ramp\" setting, we want a gradient " "taking the alpha (transparency) of the sprite from 0.5 (semi-transparent) to " "0.0 (fully transparent)." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1155 msgid "" "Click \"New GradientTexture\", then under \"Gradient\", click \"New Gradient" "\". You'll see a window like this:" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1160 msgid "" "The left and right boxes represent the start and end colors. Click on each " "and then click the large square on the right to choose the color. For the " "first color, set the ``A`` (alpha) value to around halfway. For the second, " "set it all the way to ``0``." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1165 msgid "" "See :ref:`Particles2D ` for more details on using " "particle effects." msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 msgid "Project Files" msgstr "" #: ../../docs/getting_started/step_by_step/your_first_game.rst:1171 msgid "" "You can find a completed version of this project here: https://github.com/" "kidscancode/Godot3_dodge/releases" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:4 #: ../../docs/getting_started/editor/command_line_tutorial.rst:128 msgid "Exporting" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:9 msgid "" "Now that you have a working game, you probably want to share your success " "with others. However, it's not practical to ask your friends to download " "Godot just so they can open your project. Instead, you can *export* your " "project, converting it into a \"package\" that can be run by anyone." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:14 msgid "" "The way you export your game depends on what platform you are targeting. In " "this tutorial, you'll learn how to export the \"Dodge the Creeps\" game for " "a variety of platforms. First, however, we need to make some changes to the " "way the game works." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:19 msgid "" "If you haven't made \"Dodge the Creeps\" yourself yet, please read :ref:" "`doc_your_first_game` before continuing with this tutorial." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:23 msgid "Preparing the project" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:25 msgid "" "In \"Dodge the Creeps\" we used keyboard controls to move the player's " "character. This is fine if your game is being played on a PC platform, but " "on a phone or tablet, you need to support touchscreen input. Because a click " "event can be treated the same as a touch event, we'll convert the game to a " "click-and-move input style." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:31 msgid "" "The first step is to open \"Project Settings\" and find the *Handheld* " "section. Enable the *Emulate Touchscreen* option. This lets you treat mouse " "click events the same as touch events, so you can test the game on a " "computer without a touchscreen. Also, make sure to select \"portrait\" under " "*Orientation*." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:36 msgid "" "In the *Stretch* section, set *Mode* to \"2d\" and *Aspect* to \"keep\". " "This ensures that the game scales consistently on different sized screens." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:41 msgid "" "Next, we need to modify the ``Player.gd`` script to change the input method. " "We'll remove the key inputs and make the player move towards a \"target\" " "that's set by the touch (or click) event." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:45 msgid "" "Here is the full script for the player, with comments noting what we've " "changed:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:122 #, fuzzy msgid "Export Templates" msgstr "منوی خروجی گرفتن" #: ../../docs/getting_started/step_by_step/exporting.rst:124 msgid "" "In order to export, you need to download the *export templates* from the " "http://godotengine.org/download. These templates are optimized versions of " "the engine without the editor pre-compiled for each platform . You can also " "download them in Godot by clicking on *Editor -> Manage Export Templates*:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:131 msgid "" "In the window that appears, you can click \"Download\" to get the template " "version that matches your version of Godot." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:136 msgid "" "If you upgrade Godot, you must download templates that match the new version " "or your exported projects may not work correctly." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:140 #, fuzzy msgid "Export Presets" msgstr "منوی خروجی گرفتن" #: ../../docs/getting_started/step_by_step/exporting.rst:142 msgid "" "Next, you can configure the export settings by clicking on *Project -> " "Export*:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:146 msgid "" "Create a new export preset by clicking \"Add...\" and selecting a platform. " "You can make as many presets as you like with different settings." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:149 msgid "" "At the bottom of the window are two buttons. \"Export PCK/ZIP\" only creates " "a packed version of your project's data. This doesn't include an executable " "so the project can't be run on its own." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:153 msgid "" "The second button, \"Export Project\", creates a complete executable version " "of your game, such as an `.apk` for Android or an `.exe` for Windows." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:156 msgid "" "In the \"Resources\" and \"Features\" tabs you can customize how the game is " "exported for each platform. We can leave those settings alone for now." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:160 msgid "Exporting by Platform" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:162 msgid "" "In this section, we'll walk through the process for each platform, including " "any additional software or requirements you'll need." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:166 msgid "PC (Linux/MacOS/Windows)" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:168 msgid "" "Exporting PC platforms works the same across the three supported operating " "systems. Open the export window and click \"Add..\" to create the preset(s) " "you want to make. Then click \"Export Project\" and choose a name and " "destination folder. Choose a location *outside* of your project folder." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:173 msgid "Click \"Save\" and the engine will build the export files." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:175 msgid "" "When exporting for MacOS, if you export on a MacOS computer, you'll end up " "with a `.dmg` file, while using Linux or Windows produces a `.zip`. In " "either case, the compressed file contains a MacOS `.app` that you can double-" "click and run." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:180 msgid "" "On Windows, if you want your exported executable to have a different icon " "than the default one, you need to change it manually. See: :ref:" "`doc_changing_application_icon_for_windows`." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:187 msgid "" "Mobile devices come with a wide variety of capabilities. In most cases, " "Godot's default settings will work, but mobile development is sometimes more " "art than science, and you may need to do some experimenting and searching " "for help in order to get everything working." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:193 msgid "" "Before you can export your project for Android, you must download the " "following software:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:196 msgid "Android SDK: https://developer.android.com/studio/" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:197 msgid "" "Java JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:199 msgid "" "When you run Android Studio for the first time, click on *Configure -> SDK " "Manager* and install \"Android SDK Platform Tools\". This installs the `adb` " "command-line tool that Godot uses to communicate with your device." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:203 msgid "" "Next, create a debug keystore with by running the following command on your " "system's command line:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:210 msgid "" "Click on *Editor -> Editor Settings* in Godot and select the *Export/" "Android* section. Here, you need to set the paths to the Android SDK " "applications on your system and the location of the keystore you just " "created." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:216 msgid "" "Now you're ready to export. Click on *Project -> Export* and add a preset " "for Android (see above)." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:219 msgid "" "Click the \"Export Project\" button and Godot will build an APK you can " "download on your device. To do this on the command line, use the following:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:226 msgid "" "Your device may need to be in *developer mode*. Consult your device's " "documentation for details." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:229 msgid "" "If your system supports it, connecting a compatible Android device will " "cause a \"One-click Deploy\" button to appear in Godot's playtest button " "area:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:234 msgid "" "Clicking this button builds the APK and copies it onto your device in one " "step." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:239 msgid "" "In order to build your game for iOS, you must have a computer running MacOS " "with Xcode installed." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:242 msgid "" "Before exporting, there are some settings that you *must* complete for the " "project to export successfully. First, the \"App Store Team Id\", which you " "can find by logging in to your Apple developer account and looking in the " "\"Membership\" section." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:246 msgid "You must also provide icons and splash screen images as shown below:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:250 msgid "Click \"Export Project\" and select a destination folder." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:252 msgid "" "Once you have successfully exported the project, you'll find the following " "folders and files have been created in your selected location:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:257 msgid "" "You can now open the project in Xcode and build the project for iOS. Xcode " "build procedure is beyond the scope of this tutorial. See https://help.apple." "com/xcode/mac/current/#/devc8c2a6be1 for more information." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:263 msgid "HTML5 (web)" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:265 msgid "" "Click \"Export Project\" on the HTML5 preset. We don't need to change any of " "the default settings." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:268 msgid "" "When the export is complete, you'll have a folder containing the following " "files:" msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:273 msgid "" "Viewing the `.html` file in your browser lets you play the game. However, " "you can't open the file directly, it neds to be served by a web server. If " "you don't have one set up on your computer, you can use Google to find " "suggestions for your specific OS." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:278 msgid "" "Point your browser at the URL where you've placed the html file. You may " "have to wait a few moments while the game loads before you see the start " "screen." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:283 msgid "" "The console window beneath the game tells you if anything goes wrong. You " "can disable it by setting \"Export With Debug\" off when you export the " "project." msgstr "" #: ../../docs/getting_started/step_by_step/exporting.rst:286 msgid "" "Browser support for WASM is not very widespread. Firefox and Chrome both " "support it, but you may still find some things that don't work. Make sure " "you have updated your browser to the most recent version, and report any " "bugs you find at the `Godot Github repository `_." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:4 msgid "Godot’s design philosophy" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:6 msgid "Now that you've gotten your hands wet, let's talk about Godot's design." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:8 msgid "" "**Every game engine is different and fits different needs.** Not only do " "they offer a range of features, the design of each engine is unique. This " "leads to different workflows and different ways to form your games’ " "structures. This all stems from their respective design philosophies." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:11 msgid "" "This page is here to help you understand how Godot works, starting with some " "of its core pillars. It is not a list of available features, nor is it an " "engine comparison. To know if any engine can be a good fit for your project, " "you need to try it out for yourself and understand its design and " "limitations." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:17 msgid "" "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:20 msgid "Object-oriented design and composition" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:22 msgid "" "Godot embraces object-oriented design at its core with its flexible scene " "system and Node hierarchy. It tries to stay away from strict programming " "patterns to offer an intuitive way to structure your game." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:26 msgid "" "For one, Godot lets you **compose or aggregate** scenes. It's like nested " "prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that " "uses the BlinkingLight. Then, create a city filled with BrokenLanterns. " "Change the BlinkingLight's color, save, and all the BrokenLanterns in the " "city will update instantly." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:33 msgid "On top of that, you can **inherit** from any scene." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:35 msgid "" "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part " "of a level… anything you’d like. It works like a class in pure code except " "you’re free to design it by using the editor, using only the code, or mixing " "and matching the two." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:40 msgid "" "It’s different from prefabs you find in several 3D engines as you can then " "inherit from and extend those scenes. You may create a Magician that extends " "your Character. Modify the Character in the editor and the Magician will " "update as well. It helps you build your projects so that their structure " "matches the game’s design." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:48 msgid "" "Also note that Godot offers many different types of objects called nodes, " "each with a specific purpose. Nodes are part of a tree and always inherit " "from their parents up to the Node class. Although the engine does feature " "components like collision shapes, they’re the exception, not the norm." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:56 msgid "" "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and " "features of its three parent classes, like transforms or the ability to draw " "custom shapes and render with a custom shader." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:61 msgid "All-inclusive package" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:63 msgid "" "Godot tries to provide its own tools to answer most common needs. It has a " "dedicated scripting workspace, an animation editor, a tilemap editor, a " "shader editor, a debugger, a profiler, the ability to hot-reload locally and " "on remote devices, etc." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:70 msgid "" "The goal is to offer a full package to create games and a continuous user " "experience. You can still work with external programs as long as there is an " "import plugin for it. Or you can create one, like the `Tiled Map Importer " "`__." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:75 msgid "" "That is also partly why Godot offers its own programming languages GDscript " "and VisualScript, along with C#. They’re designed for the needs of game " "developers and game designers, and they’re tightly integrated in the engine " "and the editor." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:80 msgid "" "GDscript lets you write simple code using Python-like syntax, yet it detects " "types and offers a static-language's quality of auto-completion. It is also " "optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:84 msgid "" "Note that with GDNative, you can write high-performance code using compiled " "languages like C, C++, Rust, or Python (using the Cython compiler) without " "recompiling the engine." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:90 msgid "" "*VisualScript is a node-based programming language that integrates well in " "the editor. You can drag and drop nodes or resources into the graph to " "create new code blocks.*" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:94 msgid "" "Note that the 3D workspace doesn’t feature as many tools as the 2D " "workspace. You’ll need external programs or add-ons to edit terrains, " "animate complex characters, and so on. Godot provides a complete API to " "extend the editor’s functionality using game code. See `The Godot editor is " "a Godot game`_ below." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:101 msgid "" "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage " "states and transitions visually*" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:105 msgid "Open-source" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:107 msgid "" "Godot offers a fully open-source codebase under the **MIT license.** This " "means all the technologies that ship with it have to be Free (as in freedom) " "as well. For the most part, they’re coded from the ground-up by contributors." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:111 msgid "" "Anyone can plug in proprietary tools for the needs of their projects - they " "just won’t ship with the engine. This may include NViDia PhysX, Google " "Admob, or an FBX file importer. Any of these can come as third-party plugins " "instead." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:116 msgid "" "On the other hand, an open codebase means you can **learn from and extend " "the engine** to your heart’s content. You can also debug games easily as " "Godot will print errors with a stack trace, even if they come from the " "engine itself." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:122 msgid "" "This **does not affect the work you do with Godot** in any way: there’s no " "strings attached to the engine or anything you make with it." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:127 msgid "Community-driven" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:129 msgid "" "**Godot is made by its community, for the community, and for all game " "creators out there.** It’s the needs of the users and open discussions that " "drive the core updates. New features from the core developers often focus on " "what will benefit the most users first." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:134 msgid "" "That said, although a handful of core developers work on it full-time, the " "project has over 500 contributors at the time of writing. Benevolent " "programmers work on features they may need themselves, so you’ll see " "improvements in all corners of the engine at the same time in every major " "release." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:141 msgid "The Godot editor is a Godot game" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:143 msgid "" "The Godot editor runs on the game engine. It uses the engine’s own UI " "system, it can hot-reload code and scenes when you test your projects, or " "run game code in the editor. This means you can **use the same code** and " "scenes for your games, or **build plugins and extend the editor.**" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:148 msgid "" "This leads to a reliable and flexible UI system as it powers the editor " "itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:153 msgid "" "*RPG in a Box is a voxel RPG editor made in Godot 2. It uses Godot’s UI " "tools for its node-based programming system and for the rest of the " "interface.*" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:157 msgid "" "Put the ``tool`` keyword at the top of any GDscript file and it will run in " "the editor. This lets you import and export plugins, create plugins like " "custom level editors, or create scripts with the same nodes and API you use " "in your projects." msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:163 msgid "Separate 2D and 3D engines" msgstr "" #: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:165 msgid "" "Godot offers dedicated 2D and 3D rendering engines. As a result **the base " "unit for 2D scenes is pixels.** Even though the engines are separate, you " "can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interface over " "your 3D world." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:4 msgid "Design interfaces with the Control nodes" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:6 msgid "" "Computer displays, mobile phones, and TV screen come in all shapes and " "sizes. To ship a game, you'll need to support different screen ratios and " "resolutions. It can be hard to build responsive interfaces that adapt to all " "platforms. Thankfully, Godot comes with robust tools to design and manage " "responsive User Interface. To design your UI, you'll use the Control nodes. " "These are the nodes with green icons in the editor. There are dozens of " "them, to create anything from life bars to complex applications. Godot's " "entire editor and plugins use these nodes." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:17 msgid "Godot's editor is made with the engine's UI framework" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:19 msgid "This guide will get you started with UI design. You will learn:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:21 msgid "The five most useful control nodes to build your games’ interface" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:22 msgid "How to work with the anchor of UI elements" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:23 msgid "" "How to efficiently place and arrange your user interface using containers" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:25 msgid "The five most common containers" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:27 msgid "" "To learn how to control the interface and connect it to other scripts, read :" "ref:`Build your first game UI in Godot `." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:30 msgid "" "Only use Control nodes when you design your interfaces. They have unique " "properties that allow them to work with one another. Other nodes like " "Node2D, Sprite, etc. will not work. You can still use some nodes that work " "with others like the AnimationPlayer, Tween or the StreamPlayer. Control " "nodes are CanvasItems like Node2D, so you can apply shaders to them." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:37 msgid "All control nodes share the same main properties:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:39 msgid "Anchor" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:40 msgid "Bounding rectangle" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:41 msgid "Focus and focus neighbour" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:42 msgid "Size flags" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:43 msgid "Margin" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:44 msgid "The optional UI theme" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:46 msgid "" "Once you understand the basics of the Control node, it will take you less " "time to learn all the nodes that derive from it." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:51 msgid "The 5 most common UI elements" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:53 msgid "" "Godot ships with dozens of Control nodes. A lot of them are here to help you " "build editor plugins and applications." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:56 msgid "" "For most games, you'll only need five types of UI elements, and a few " "Containers. These five Control nodes are:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:59 msgid "Label: for displaying text" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:60 msgid "" "TextureRect: used mostly for backgrounds, or everything that should be a " "static image" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:62 msgid "" "TextureProgress: for lifebars, loading bars, horizontal, vertical or radial" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:64 msgid "NinePatchRect: for scalable panels" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:65 msgid "TextureButton: to create buttons" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:69 msgid "The 5 most common Control nodes for UI design" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:72 msgid "TextureRect" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:74 msgid "" "**TextureRect** displays a texture or image inside a UI. It seems similar to " "the Sprite node but it offers multiple scaling modes. Set the Stretch Mode " "property to change its behaviour:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:78 msgid "" "``Scale On Expand (compat)`` scales the texture to fit the node’s bounding " "rectangle, only if ``expand`` property is ``true``; otherwise, it behaves " "like ``Keep`` mode. Default mode for backwards compatibility." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:79 msgid "``Scale`` scales the texture to fit the node’s bounding rectangle" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:80 msgid "``Tile`` makes the texture repeat, but it won't scale" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:81 msgid "" "``Keep`` and ``Keep Centered`` force the texture to remain at its original " "size, in the top left corner or the center of the frame respectively" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:84 msgid "" "``Keep Aspect`` and ``Keep Aspect Centered`` scales the texture but force it " "to remain its original aspect ratio, in the top left corner or the center of " "the frame respectively" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:85 msgid "" "``Keep Aspect Covered`` works just like ``Keep Aspect Centered`` but the " "shorter side fits the bounding rectangle and the other one clips to the " "node’s limits" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:87 msgid "" "As with Sprite nodes, you can modulate the TextureRect's colour. Click the " "``Modulate`` property and use the color picker." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:92 msgid "TextureRect modulated with a red color" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:95 msgid "TextureButton" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:97 msgid "" "**TextureButton** is like TextureRect, except it has 5 texture slots: one " "for each of the button's states. Most of the time, you'll use the Normal, " "Pressed, and Hover textures. Focused is useful if your interface listens to " "the keyboard's input. The sixth image slot, the Click Mask, lets you define " "the clickable area using a 2-bit, pure black and white image." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:104 msgid "" "In the Base Button section, you'll find a few checkboxes that change how the " "button behaves. When ``Toggle Mode`` is on, the button will toggle between " "active and normal states when you press it. ``Disabled`` makes it disabled " "by default, in which case it will use the ``Disabled`` texture. " "TextureButton shares a few properties with the texture frame: it has a " "``modulate`` property, to change its color, and ``Resize`` and ``Stretch`` " "modes to change its scale behavior." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:114 msgid "TextureButton and its 5 texture slots" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:117 msgid "TextureProgress" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:119 msgid "" "**TextureProgress** layers up to 3 sprites to create a progress bar. The " "Under and Over textures sandwich the Progress one, which displays the bar's " "value." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:123 msgid "" "The ``Mode`` property controls the direction in which the bar grows: " "horizontally, vertically, or radially. If you set it to radial, the " "``Initial Angle`` and ``Fill Degrees`` properties let you limit the range of " "the gauge." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:128 msgid "" "To animate the bar, you'll want to look at the Range section. Set the " "``Min`` and ``Max`` properties to define the range of the gauge. For " "instance, to represent a character's life, you'll want to set ``Min`` to ``0," "`` and ``Max`` to the character's maximum life. Change the ``Value`` " "property to update the bar. If you leave the ``Min`` and ``Max`` values to " "the default of ``1`` and ``100,`` and set the ``Value`` property to ``40``, " "40% of the ``Progress`` texture will show up, and 60% of it will stay hidden." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:138 msgid "TextureProgress bar, two thirds filled" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:143 msgid "" "**Label** prints text to the screen. You'll find all its properties in the " "Label section, in the Inspector. Write the text in the ``Text`` property, " "and check Autowrap if you want it to respect the textbox's size. If Autowrap " "is off, you won't be able to scale the node. You can align the text " "horizontally and vertically with Align and Valign respectively." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:152 msgid "Picture of a Label" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:155 msgid "NinePatchRect" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:157 msgid "" "**NinePatchRect** takes a texture split in 3 rows and 3 columns. The center " "and the sides tile when you scale the texture, but it never scales the " "corners. It is useful to build panels, dialogue boxes and scalable " "backgrounds for your UI." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:164 msgid "NinePatchRect scaled with the min\\_size property" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:167 msgid "There are two workflows to build responsive UIs" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:169 msgid "" "There are two workflows to build scalable and flexible interfaces in Godot:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:171 msgid "" "You have many container nodes at your disposal that scale and place UI " "elements for you. They take control over their children." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:172 msgid "" "On the other side, you have the layout menu. It helps you to anchor, place " "and resize a UI element within its parent." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:174 msgid "" "The two approaches are not always compatible. Because a container controls " "its children, you cannot use the layout menu on them. Each container has a " "specific effect so you may need to nest several of them to get a working " "interface. With the layout approach you work from the bottom up, on the " "children. As you don't insert extra containers in the scene it can make for " "cleaner hierarchies, but it's harder to arrange items in a row, column, " "grid, etc." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:176 msgid "" "As you create UIs for your games and tools, you'll develop a sense for what " "fits best in each situation." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:180 msgid "Place UI elements precisely with anchors" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:182 msgid "" "Control nodes have a position and size, but they also have anchors and " "margins. Anchors define the origin, or the reference point, for the Left, " "Top, Right and Bottom edges of the node. Change any of the 4 anchors to " "change the reference point of the margins." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:189 msgid "The anchor property" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:192 msgid "How to change the anchor" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:194 msgid "" "Like any properties, you can edit the 4 anchor points in the Inspector, but " "this is not the most convenient way. When you select a control node, the " "layout menu appears above the viewport, in the toolbar. It gives you a list " "of icons to set all 4 anchors with a single click, instead of using the " "inspector’s 4 properties. The layout menu will only show up when you select " "a control node." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:203 msgid "The layout menu in the viewport" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:206 msgid "Anchors are relative to the parent container" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:208 msgid "" "Each anchor is a value between 0 and 1. For the left and top anchors, a " "value of 0 means that without any margin, the node's edges will align with " "the left and top edges of its parent. For the right and bottom edges, a " "value of 1 means they'll align with the parent container's right and bottom " "edges. On the other hand, margins represent a distance to the anchor " "position in pixels, while anchors are relative to the parent container's " "size." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:218 msgid "" "Margins are relative to the anchor position, which is relative to the " "anchors. In practice, you'll often let the container update margins for you" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:223 msgid "Margins change with the anchor" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:225 msgid "" "Margins update automatically when you move or resize a control node. They " "represent the distance from the control node's edges to its anchor, which is " "relative to the parent control node or container. That's why your control " "nodes should always be inside a container, as we'll see in a moment. If " "there's no parent, the margins will be relative to the node's own bounding " "Rectangle, set in the Rect section, in the inspector." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:235 msgid "Margins on a CenterContainer set to the \"Full Rect\" anchor" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:237 msgid "" "Try to change the anchors or nest your Control nodes inside Containers: the " "margins will update. You'll rarely need to edit the margins manually. Always " "try to find a container to help you first; Godot comes with nodes to solve " "all the common cases for you. Need to add space between a lifebar and the " "border of the screen? Use the MarginContainer. Want to build a vertical " "menu? Use the VBoxContainer. More on these below." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:246 msgid "Use size tags to change how UI elements fill the available space" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:248 msgid "" "Every control node has Size Flags. They tell containers how the UI elements " "should scale. If you add the \"Fill\" flag to the Horizontal or Vertical " "property, the node's bounding box will take all the space it can, but it'll " "respect its siblings and retain its size. If there are 3 TextureRect nodes " "in an HBoxContainer, with the \"Fill\" flags on both axes, they'll each take " "up to a third of the available space, but no more. The container will take " "over the node and resize it automatically." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:258 msgid "3 UI elements in an HBoxContainer, they align horizontally" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:260 msgid "" "The \"Expand\" flag lets the UI element take all the space it can, and push " "against its siblings. Its bounding rectangle will grow against the edges of " "its parent, or until it's blocked by another UI node." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:266 msgid "" "The same example as above, but the center node has the \"Expand\" size flag" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:269 msgid "" "You'll need some practice to understand the size tags, as their effect can " "change quite a bit depending on how you set up your interface." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:273 msgid "Arrange control nodes automatically with containers" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:275 msgid "" "Containers automatically arrange all children Control nodes including other " "containers in rows, columns, and more. Use them to add padding around your " "interface or center nodes in their bounding rectangles. All built-in " "containers update in the editor so you can see the effect instantly." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:281 msgid "" "Containers have a few special properties to control how they arrange UI " "elements. To change them, navigate down to the Custom Constants section in " "the Inspector." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:286 msgid "The 5 most useful containers" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:288 msgid "" "If you build tools, you might need all of the containers. But for most " "games, a handful will be enough:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:291 msgid "MarginContainer, to add margins around part of the UI" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:292 msgid "CenterContainer, to center its children in its bounding box" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:293 msgid "" "VboxContainer and HboxContainer, to arrange UI elements in rows or columns" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:295 msgid "GridContainer, to arrange Controls nodes in a grid-like pattern" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:297 msgid "" "CenterContainer centers all its children inside of its bounding rectangle. " "It's one you typically use for title screens, if you want the options to " "stay in the center of the viewport. As it centers everything, you'll often " "want a single container nested inside it. If you use textures and buttons " "instead, they'll stack up." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:305 msgid "" "CenterContainer in action. The life bar centers inside its parent container." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:308 msgid "" "The MarginContainer adds a margin on any side of the child nodes. Add a " "MarginContainer that encompasses the entire viewport to add a separation " "between the edge of the window and the UI. You can set a margin on the top, " "left, right, or bottom side of the container. No need to tick the checkbox: " "click the corresponding value box and type any number. It will activate " "automatically." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:317 msgid "The MarginContainer adds a 40px margin around the Game User Interface" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:319 msgid "" "There are two BoxContainers: VBoxContainer and HBoxContainer. You cannot add " "the BoxContainer node itself, as it is a helper class, but you can use " "vertical and horizontal box containers. They arrange nodes either in rows or " "columns. Use them to line up items in a shop, or to build complex grids with " "rows and columns of different sizes, as you can nest them to your heart's " "content." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:328 msgid "The HBoxContainer horizontally aligns UI elements" msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:330 msgid "" "VBoxContainer automatically arranges its children into a column. It puts " "them one after the other. If you use the separation parameter, it will leave " "a gap between its children. HBoxContainer arranges UI elements in a row. " "It's similar to the VBoxContainer, with an extra ``add_spacer`` method to " "add a spacer control node before its first child or after its last child, " "from a script." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:337 msgid "" "The GridContainer lets you arrange UI elements in a grid-like pattern. You " "can only control the number of columns it has, and it will set the number of " "rows by itself, based on its children's count. If you have nine children and " "three columns, you will have 9÷3 = 3 rows. Add three more children and " "you'll have four rows. In other words, it will create new rows as you add " "more textures and buttons. Like the box containers, it has two properties to " "set the vertical and horizontal separation between the rows and columns " "respectively." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:348 msgid "A GridContainer with 2 columns. It sizes each column automatically." msgstr "" #: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:350 msgid "" "Godot's UI system is complex, and has a lot more to offer. To learn how to " "design more advanced interface, head to the :ref:`GUI section ` of the docs." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:4 msgid "Design a title screen" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:6 msgid "" "In the next two tutorials, you will build two responsive UI (user interface) " "scenes step-by-step using the engine's UI system:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:9 msgid "A main menu" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:10 msgid "A game UI with a health bar, energy bar, bomb and money counters" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:12 msgid "" "You will learn how to design game UI efficiently, and how to use Godot's " "Control nodes. This page focuses on the visual part: everything you do from " "the editor. To learn how to code a life bar, read :doc:`ui_code_a_life_bar`" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:20 msgid "The GUI you're going to create" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:22 msgid "" "Download the project files: :download:`ui_main_menu_design.zip ` and extract the archive. Import the ``start/`` " "project in Godot to follow this tutorial. The ``end/`` folder contains the " "final result. You'll find all the sprites in the ``start/assets/main_menu``` " "folder." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:33 msgid "How to design your game UI" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:35 msgid "" "To design a good UI, you want to come up with a rough mockup first: a plain " "drawing version that focuses on the placement of your UI components, their " "size, and user interaction. Pen and paper is all you need. You shouldn't use " "fancy and final graphics at this stage. Then, you only need simple " "placeholder sprites and you're good to jump into Godot. You want to make " "sure the players can find their way around the interface using those " "placeholders." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:45 msgid "The UI's rough plan or mockup" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:47 msgid "" "Placeholder doesn't have to mean ugly, but you should keep the graphics " "simple and clean. Avoid special effects, animation, and detailed " "illustration before you had players playtest your UI. Otherwise:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:51 msgid "" "The graphics might skew the players' perception of the experience and you'll " "miss out on valuable feedback" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:53 msgid "If the User Experience doesn't work, you'll have to redo some sprites" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:57 msgid "" "Always try to make the interface work with simple text and boxes first. It's " "easy to replace the textures later. Professional UX designers often work " "with plain outlines and boxes in greyscale. When you take colors and fancy " "visuals away, it's a lot easier to size and place UI elements properly. It " "helps you refine the design foundation you'll build upon." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:64 msgid "There are two ways to design your UI in Godot. You can:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:66 msgid "" "Build it all in a single scene, and eventually save some branches as " "reusable scenes" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:68 msgid "" "Build template scenes for reusable components and create specific components " "that inherit from your base scenes" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:71 msgid "" "We will use the first approach, because the first version of your UI may not " "work as well as you’d like. You’re likely to throw parts away and redesign " "components as you go. When you're sure everything works, it's easy to make " "some parts reusable, as you'll see below." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:78 msgid "" "The files you'll find in Godot. The graphics look cleaner than on the rough " "design, but they're still placeholders" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:82 msgid "Design the main menu" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:84 msgid "" "Before we jump into the editor, we want to plan how we'll nest containers " "based on our mockup image." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:88 #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:277 msgid "Break down the UI mockup" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:90 msgid "Here are my three rules of thumb to find the right containers:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:92 msgid "" "Break down the UI into nested boxes, from the largest that contains " "everything, to the smallest ones, that encompass one widget, like a bar with " "its label, a panel or a button" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:95 msgid "If there's some padding around an area, use a ``MarginContainer``" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:96 msgid "" "If the elements are arranged in rows or columns, use an ``HBoxContainer`` or " "``VBoxContainer``" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:99 msgid "" "These rules are enough to get us started, and work well for simple " "interfaces." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:102 msgid "" "For the main menu, the largest box is the entire game window. There's " "padding between the edges of the window and the first components: this " "should be a ``MarginContainer``. Then, the screen is split into two columns, " "so we'll use an ``HBoxContainer``. In the left column, we'll manage the rows " "with a ``VBoxContainer``. And in the right column, we'll center the " "illustration with a ``CenterContainer``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:111 msgid "Interface building blocks, broken down using the three rules of thumb" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:115 msgid "" "Containers adapt to the window's resolution and width-to-height ratio. " "Although we could place UI elements by hand, containers are faster, more " "precise, and **responsive**." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:120 msgid "Prepare the Main Menu scene" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:122 msgid "" "Let's create the main menu. We'll build it in a single scene. To create an " "empty scene, click on the Scene menu -> New Scene." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:125 msgid "" "We have to add a root node before we can save the scene. Your UI's root " "should be the outermost container or element. In this case it's a " "``MarginContainer``. ``MarginContainer`` is a good starting point for most " "interfaces, as you often need padding around the UI. Press ``Meta+S`` to " "save the scene to the disk. Name it *MainMenu*." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:131 msgid "" "Select the ``MarginContainer`` again, and head to the inspector to define " "the margins' size. Scroll down the ``Control`` class, to the ``Custom " "Constants`` section. Unfold it. Set the margins as such:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:135 msgid "Margin Right: *120*" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:136 msgid "Margin Top: *80*" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:137 msgid "Margin Left: *120*" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:138 msgid "Margin Bottom: *80*" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:140 msgid "" "We want the container to fit the window. In the Viewport, open the " "``Layout`` menu and select the last option, ``Full Rect``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:144 msgid "Add the UI sprites" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:146 msgid "" "Select the ``MarginContainer``, and create the UI elements as " "``TextureRect`` nodes. We need:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:149 msgid "The title, or logo" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:150 msgid "The three text options, as individual nodes" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:151 msgid "The version note" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:152 msgid "And the main menu’s illustration" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:154 msgid "" "Click the ``Add Node`` button or press ``Meta+A`` on your keyboard. Start to " "type ``TextureRect`` to find the corresponding node and press enter. With " "the new node selected, press ``Meta+D`` five times to create five extra " "``TextureRect`` instances." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:159 msgid "" "Click each of the nodes to select it. In the inspector, click the ``…`` Icon " "to the right of the Texture property, and click on ``Load``. A file browser " "opens and lets you pick a sprite to load into the texture slot." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:165 msgid "The file browser lets you find and load textures" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:167 msgid "" "Repeat the operation for all ``TextureRect`` nodes. You should have the " "logo, the illustration, the three menu options and the version note, each as " "a separate node. Then, double click on each of the nodes in the Inspector to " "rename them" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:174 msgid "The six nodes, with textures loaded" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:178 msgid "" "If you want to support localization in your game, use ``Labels`` for menu " "options instead of ``TextureRect``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:182 msgid "Add containers to place UI elements automatically" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:184 msgid "" "Our main menu has some margin around the edges of the screen. It is split in " "two parts: on the left, you have the logo and the menu options. On the " "right, you have the characters. We can use one of two containers to achieve " "this: ``HSplitContainer`` or ``HBoxContainer``. Split containers split the " "area into two: a left and a right side or a top and a bottom side. They also " "allow the user to resize the left and right areas using an interactive bar. " "On the other hand, ``HBoxContainer`` just splits itself into as many columns " "as it has children. Although you can deactivate the split container's resize " "behaviour, I recommend to favour box containers." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:195 msgid "" "Select the ``MarginContainer`` and add an ``HBoxContainer``. Then, we need " "two containers as children of our ``HBoxContainer``: a ``VBoxContainer`` for " "the menu options on the left, and a ``CenterContainer`` for the illustration " "on the right." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:202 msgid "" "You should have four nested containers, and the TextureRect nodes sitting " "aside from it" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:205 msgid "" "In the node tree, select all the ``TextureRect`` nodes that should go on the " "left side: the logo, the menu options and the version note. Drag and drop " "them into the ``VBoxContainer``. Then, drag the illustration node into the " "``CenterContainer``. The nodes should position automatically." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:212 msgid "Containers automatically place and resize textures" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:214 msgid "We're left with two problems to solve:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:216 msgid "The characters on the right aren't centered" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:217 msgid "There's no space between the logo and the other UI elements" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:219 msgid "" "To center the characters on the right, we'll use a ``CenterContainer``. Add " "a ``CenterContainer`` node as a child of the ``HBoxContainer``. Then in the " "Inspector, scroll down to the ``Size Flags`` category and click on the field " "to the right of the ``Vertical`` property, and check ``Expand``. Do the same " "for the ``Horizontal`` property. Finally drag and drop the Characters into " "the ``CenterContainer``. The Characters element will center automatically." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:228 msgid "" "The character node centers inside the right half of the screen as soon as " "you place it inside the CenterContainer" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:231 msgid "" "To space out the menu options and the logo on the left, we'll use one final " "container and its size flags. Select the ``VBoxContainer`` and press ``Meta" "+A`` to add a new node inside it. Add a second ``VBoxContainer`` and name it " "\"MenuOptions\". Select all three menu options, ``Continue``, ``NewGame`` " "and ``Options``, and drag and drop them inside the new ``VBoxContainer``. " "The UI's layout should barely change, if at all." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:241 msgid "" "Place the new container between the other two nodes to retain the UI's layout" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:244 msgid "" "Now we grouped the menu options together, we can tell their container to " "expand to take as much vertical space as possible. Select the " "``MenuOptions`` node. In the Inspector, scroll down to the ``Size Flags`` " "category. Click on the field to the right of the ``Vertical`` property, and " "check ``Expand``. The container expands to take all the available vertical " "space. But it respects its neighbors, the ``Logo`` and ``Version`` elements." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:252 msgid "" "To center the nodes in the ``VBoxContainer``, scroll to the top of the " "Inspector and change the ``Alignment`` property to ``Center``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:257 msgid "The menu options should center vertically in the UI's left column" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:259 msgid "" "To wrap things up, let's add some separation between the menu options. " "Expand the ``Custom Constants`` category below ``Size Flags``, and click the " "field next to the ``Separation`` parameter. Set it to 30. Once you press " "enter, the ``Separation`` property becomes active and Godot adds 30 pixels " "between menu options." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:267 msgid "The final interface" msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:269 msgid "" "Without a single line of code, we have a precise and responsive main menu." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:272 msgid "" "Congratulations for getting there! You can download the `final menu <#>`__ " "to compare with your own. In the next tutorial, you'll create a Game User " "Interface with bars and item counters." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:279 msgid "" "Responsive User Interface is all about making sure our UIs scale well on all " "screen types. TV screens and computer displays have different sizes and " "ratios. In Godot, we use containers to control the position and the size of " "UI elements." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:284 msgid "" "The order in which you nest matters. To see if your UI adapts nicely to " "different screen ratios, select the root node, press the Q key to activate " "the Select Mode, select the container and click and drag on one of the " "container's corners to resize it. The UI components should flow inside of it." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:290 msgid "" "You'll notice that although containers move sprites around, they don't scale " "them. This is normal. We want the UI system to handle different screen " "ratios, but we also need the entire game to adapt to different screen " "resolutions. To do this, Godot scales the entire window up and down." msgstr "" #: ../../docs/getting_started/step_by_step/ui_main_menu.rst:296 msgid "" "You can change the scale mode in the project settings: click the Project " "menu -> Project Settings. In the window's left column, look for the Display " "category. Click on the Window sub-category. On the right side of the window, " "you'll find a Stretch section. The three settings, Mode, Aspect, and Shrink, " "control the screen size. For more information, see :ref:" "`doc_multiple_resolutions`." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:4 msgid "Design the GUI" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:6 msgid "" "Now that you've nailed the basics, we're going to see how to build a Game " "User Interface (GUI) with reusable UI components: a life bar, an energy bar, " "and bomb and rupee counters. By the end of this tutorial, you'll have a game " "GUI, ready to control with GDscript or VisualScript:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:13 #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:616 msgid "The final result" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:15 msgid "You'll also learn to:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:17 msgid "Create flexible UI components" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:18 msgid "Use scene inheritance" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:19 msgid "Build a complex UI" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:21 msgid "" "Download the project files: :download:`ui_gui_design.zip ` and extract the archive. Import the `start/` project in " "Godot to follow this tutorial. The `end/` folder contains the final result." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:25 msgid "" "You can watch this tutorial as a `video on Youtube `_." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:28 msgid "Breaking down the UI" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:30 msgid "" "Let's break down the final UI and plan the containers we'll use. As in the :" "doc:`ui_main_menu`, it starts with a ``MarginContainer``. Then, we can see " "up to three columns:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:34 msgid "The life and energy counters on the left" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:35 msgid "The life and energy bars" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:36 #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:42 msgid "The bomb and rupee counters on the right" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:38 msgid "" "But the bar's label and the gauge are two parts of the same UI element. If " "we think of them this way, we're left with two columns:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:41 msgid "The life and energy bars on the left" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:44 msgid "" "This makes it easier to nest containers: we have some margins around the " "border of the screen using a ``MarginContainer``, followed by an " "``HBoxContainer`` to manage our two columns. The two bars stack on top of " "one another inside a ``VBoxContainer``. And we'll need a last " "``HBoxContainer`` in the right column to place the bomb and rupee counters " "side-by-side." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:53 msgid "We get a clean UI layout with only 4 containers" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:55 msgid "" "We will need extra containers inside the individual UI components, but this " "gives us the main GUI scene's structure. With this plan in place, we can " "jump into Godot and create our GUI." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:60 msgid "Create the base GUI" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:62 msgid "" "There are two possible approaches to the GUI: we can design elements in " "separate scenes and put them together, or prototype everything in a single " "scene and break it down later. I recommend working with a single scene as " "you can play with your UI's placement and proportions faster this way. Once " "it looks good, you can save entire sections of the node tree as reusable sub-" "scenes. We'll do that in a moment." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:69 msgid "For now, let's start with a few containers." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:71 msgid "" "Create a new scene and add a ``MarginContainer``. Select the node and name " "it ``GUI``. Then save the scene as ``GUI.tscn``. It will contain the entire " "GUI." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:75 msgid "" "With the ``MarginContainer`` selected, head to the inspector and scroll down " "to the custom constants section. Unfold it and click the field next to each " "of the ``Margin`` properties. Set them all to ``20`` pixels. Next, add an " "``HBoxContainer`` node. This one will contain our two bars on the left and " "separate them from the two counters on the right." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:81 msgid "" "We want to stack the bars vertically inside the ``HBoxContainer``. To do " "this, let's add a ``VBoxContainer``. Name it ``Bars``. Select the parent " "``HBoxContainer`` again and this time, add another ``HBoxContainer``. This " "one will hold the counters, so call it ``Counters``. With these four " "containers, we have the base for our GUI scene." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:89 msgid "You should have 4 containers that look like this" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:93 msgid "" "We can work this way because we first broke down our UI design and took a " "few moments to think about the containers we'd use. When you follow a " "tutorial like this, it may seem weird. But once you're working on real " "games, you'll see it's an efficient workflow." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:99 msgid "Create the bars' base" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:101 msgid "" "Each bar is split into two sub-elements that align horizontally: the label " "with the health count on the left, and the gauge on the right. Once again, " "the ``HBoxContainer`` is the perfect tool for the job. Select the ``Bars`` " "node and add a new ``HBoxContainer`` inside of it. Name it ``Bar``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:107 msgid "" "The label itself requires at least three nodes: a ``NinePatchRect`` for the " "background, on top of which we'll add a texture on the left, either ``HP`` " "or ``EP``, and a ``Label`` on the right for the value. We can nest " "``Control`` nodes however we want. We could use the ``NinePatchRect`` as a " "parent for the two other elements, as it encompasses them. In general, you " "want to use containers instead, as their role is to help organize UI " "components. We'll need a ``MarginContainer`` later anyway to add some space " "between the life count and the gauge. Select the ``Bar`` and add a " "``MarginContainer``. Name it ``Count``. Inside of it, add three nodes:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:118 msgid "A ``NinePatchRect`` named ``Background``" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:119 msgid "A ``TextureRect`` named ``Title``" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:120 msgid "And a ``Label`` named ``Number``" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:122 msgid "To add the nodes as siblings, always select the ``Count`` node first." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:126 msgid "" "Your scene tree should look like this. We're ready to throw in some textures" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:129 msgid "" "Our scene is still empty. It's time to throw in some textures. To load the " "textures, head to the FileSystem dock to the left of the viewport. Browse " "down to the res://assets/GUI folder." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:135 msgid "You should see a list of textures that we'll use to skin our interface." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:138 msgid "" "Select the ``Background`` in the Scene dock. In the Inspector, you should " "see a ``Texture`` property. In the FileSystem tab, click and drag " "``label_HP_bg.png`` onto the ``Texture`` slot. It stays squashed. The parent " "MarginContainer will force its size down to 0 until we force elements inside " "the container to have a minimum size. Select the ``Background`` node. In the " "Inspector, scroll down to the Rect section. Set ``Min Size`` to (100, 40). " "You should see the ``Background`` resize along with its parent containers." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:147 msgid "" "Next, select the ``Title`` and drag and drop ``label_HP.png`` into its " "``Texture`` slot. Select the ``Number`` node, click the field next to the " "``Text`` property and type ``10``. This way, we can see both nodes in the " "viewport. They should stack up in the top-left corner of their parent " "``MarginContainer``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:155 msgid "If you select both nodes, you should see something like this" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:157 msgid "" "As they have a container as their direct parent, we cannot move them freely: " "the ``Count`` node will always reset their anchors, their size and position. " "Try to move and resize the nodes in the viewport. Then, select any of the " "three textures and press Ctrl Up or Ctrl Down to reorder them in the Scene " "dock. They'll snap back to their previous size and position." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:164 msgid "" "Parent containers control the size, the scale, the margins, and the anchors " "of their direct children. To modify the nodes, you must nest them inside a " "regular Control or another UI element. We'll use the ``Background`` as a " "parent for the ``Title`` and ``Number``. Select both the ``Title`` and " "``Number``, and drag and drop them onto ``Background``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:173 msgid "" "By using the Background node as the two textures' parent, we take control " "away from the Count MarginContainer" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:176 msgid "" "Select the ``Title`` and in the Inspector, change its ``Stretch Mode`` " "property to ``Keep Centered``. Next find the ``Rect`` category in the " "Inspector and change the ``Size`` property to (50, 40) so it only takes the " "left half of the background. Next, select the ``Number`` node. In the " "viewport, click the ``Layout`` menu and click ``Full Rect``. The node will " "resize to fit the ``Background``. Head to the Inspector and change its " "``Align`` property to ``Right``, and the ``VAlign`` property to ``Center``. " "The text should snap to the center of the ``Background``'s right edge. " "Resize the node horizontally so it takes the right half of the " "``Background`` and there's a bit of padding with the right edge." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:189 msgid "" "Here's how the nodes' bounding boxes should look in the viewport. Keep it " "rough, you don't need to place them too precisely for now." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:193 msgid "Replace the Label's font" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:195 msgid "" "The label's font is too small. We need to replace it. Select the ``Number`` " "node and in the Inspector, scroll down to the ``Control`` class, and find " "the ``Custom Font`` category. Click the field next to the ``Font`` property " "and click on ``New Dynamic Font``. Click on the field again and select Edit." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:201 msgid "" "You will enter the ``Dynamic Font`` resource. Unfold the ``Font`` category " "and click the field next to ``Font Data``. Click the ``Load`` button. In the " "file browser, navigate down to the assets/font folder and double click " "``Comfortaa-Bold.ttf`` to open it. You should see the font update in the " "viewport. Unfold the settings category to change the font size. Set the " "``Size`` property to a higher value, like ``24`` or ``28``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:209 msgid "" "We now need the text's baseline, the number's lower edge, to align with the " "HP texture on the left. To do so, still in the ``DynamicFont`` resource, you " "can tweak the ``Bottom`` property under the ``Extra Spacing`` category. It " "adds some bottom padding to the text. Click the ``Number`` node in the Scene " "tab to go back to the node's properties and change the ``VAlign`` to " "``Bottom``. To adjust the text's baseline, click on the font field under the " "``Custom Font`` category again and tweak the ``Bottom`` property until the " "text aligns with the ``Title`` node. I used a value of ``2`` pixels." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:221 msgid "With a Bottom value of 2 pixels, the Number aligns with the Title" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:223 msgid "" "With this, we finished the hardest part of the GUI. Congratulations! Let's " "move on to the simpler nodes." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:227 msgid "Add the progress bar" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:229 msgid "" "We need one last element to complete our life bar: the gauge itself. Godot " "ships with a ``TextureProgress`` node that has everything we need." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:232 msgid "" "Select the Bar node and add a ``TextureProgress`` inside of it. Name it " "``Gauge``. In the inspector unfold the ``Textures`` section. Head to the " "FileSystem dock and drag and drop the ``lifebar_bg.png`` texture onto the " "``Under`` slot. Do the same with the ``lifebar_fill.png`` image and drop it " "onto the ``Progress`` slot. Under the ``Range`` class in the inspector, " "change the ``Value`` property to ``50`` to see the gauge fill up." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:240 msgid "With only five ``Control`` nodes, our first bar is ready to use." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:244 msgid "" "That's it, our life bar is ready. This last part was quick, wasn't it? " "That's thanks to our robust container setup." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:248 msgid "Design the bomb and rupee counters" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:250 msgid "" "The bomb and rupee counters are like the bar's ``Count`` node. So we'll " "duplicate it and use it as a template." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:253 msgid "" "Under the ``Bar`` node, select ``Count`` and press Ctrl D to duplicate it. " "Drag and drop the new node under the ``Counters`` ``HBoxContainer`` at the " "bottom of the scene tree. You should see it resize automatically. Don't " "worry about this for now, we'll fix the size soon." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:258 msgid "" "Rename the ``Count2`` node to ``Counter``. Unlike the bars, we want the " "number to be on the left, and an icon to sit on the right. The setup is the " "same: we need background, a ``NinePatchFrame``, the title, and the number " "nodes. The ``Title`` node is a ``TextureRect``, so it's what we need to " "display the icon. In the scene tree, select the ``Title`` node, and rename " "it to ``Icon``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:267 msgid "Here's how your node tree should look so far" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:269 msgid "" "With the ``Icon`` node selected, in the inspector, scroll to the top to see " "the ``Texture`` slot. Head to the FileSystem dock on the left and select the " "``bombs_icon.png``. Drag and drop it onto the ``Texture`` slot. In the Scene " "Tab select both the ``Icon`` and the ``Number`` nodes. Click the Layout menu " "in the toolbar at the top of the viewport and select ``Full Rect``. Both " "nodes will update to fit the size of the ``Background``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:279 msgid "The nodes anchor to the entire Background, but their position is off" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:281 msgid "" "Let's change the ``Number``'s align properties to move it to the left and " "center of the ``Background``. Select the ``Number`` node, change its " "``Align`` property to left and the ``VAlign`` property to centre. Then " "resize its left edge a little bit to add some padding between the left edge " "of the ``Background`` and the text." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:289 msgid "The Number node aligned to the left and centre" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:291 msgid "" "To overlap the Icon and the background, we need a few tweaks. First, our " "background is a bit too tall. It's because it's inside a margin container " "that is controlled by the top-most GUI node. Select the GUI node at the top " "of the scene tree and downsize it vertically so that it's as thin as " "possible. You'll see the gauge prevents you from making it too small. A " "container cannot be smaller than the minimal size of its children. The " "container's margins also weigh in." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:299 msgid "" "Select the Icon, click the Layout menu, and select ``Full Rect`` to re-" "center it. We need it to anchor to the ``Background``'s right edge. Open the " "Layout menu again and select ``Center Right``. Move the icon up so it is " "centered vertically with the ``Background``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:307 msgid "" "The bomb icon anchors to the Background's right edge. Resize the Counter " "container to see the Icon node stick to its right side" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:310 msgid "" "Because we duplicated the ``Counter`` from the bar's ``Count``, the " "``Number`` node's font is off. Select the ``Number`` node again, head to the " "``Font`` property, and click it to access the ``DynamicFont`` resource. In " "the ``Extra Spacing`` section, change the ``Bottom`` value to ``0`` to reset " "the font's baseline. Our counter now works as expected." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:317 msgid "" "While we are at it, let's make it so the ``Counters`` snap to the right edge " "of the viewport. To achieve this we will set the ``Bars`` container to " "expand and take all the horizontal space. Select the ``Bars`` node and " "scroll down to the ``Size Flags`` category. In the ``Horizontal`` category, " "check the ``Expand`` value. The ``Bars`` node should resize and push the " "counter to the rightmost of the screen." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:326 msgid "" "An expanding container eats all the space it can from its parent, pushing " "everything else along the way" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:330 msgid "Turn the bar and counter into reusable UI components" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:332 msgid "" "We have one bar and one counter widget. But we need two of each. We may need " "to change the bars' design or their functionality later on. It'd be great if " "we could have a single scene to store a UI element's template, and child " "scenes to work on variations. Godot lets us do this with Inherited Scenes." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:338 msgid "" "Let's save both the ``Counter`` and the ``Bar`` branches as separate scenes " "that we'll reduce to create the ``LifeBar``, the ``EnergyBar``, the " "``BombCounter``, and the ``RupeeCounter``. Select the ``Bar`` HBoxContainer. " "Right click on it and click on ``Save Branch as Scene``. Save the scene as " "``Bar.tscn``. You should see the node branch turn it to a single ``Bar`` " "node." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:347 msgid "" "A scene is a tree of nodes. The topmost node is the tree's **root**, and the " "children at the bottom of the hierarchy are **leaves**. Any node other than " "the root along with one more children is a **branch**. We can encapsulate " "node branches into separate scenes, or load and merge them from other scenes " "into the active one. Right click on any node in the Scene dock and select " "``Save Branch as Scene`` or ``Merge from Scene``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:355 msgid "" "Then, select the ``Counter`` node and do the same. Right click, ``Save " "Branch as Scene``, and save it as ``Counter.tscn``. A new edit scene icon " "appears to the right of the nodes in the scene tree. Click on the one next " "to ``Bar`` to open the corresponding scene. Resize the ``Bar`` node so that " "its bounding box fits its content. The way we named and place the Control " "nodes, we're ready to inherit this template and create the life bar. It's " "the same for the ``Counter``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:365 msgid "With no extra changes, our Bar is ready to use" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:368 msgid "Use Scene Inheritance to create the remaining elements" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:370 msgid "" "We need two bars that work the same way: they should feature a label on the " "left, with some value, and a horizontal gauge on the right. The only " "difference is that one has the HP label and is green, while the other is " "called EP and is yellow. Godot gives us a powerful tool to create a common " "base to reuse for all bars in the game: **inherited scenes**." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:378 msgid "" "Inherited scenes help us keep the GUI scene clean. In the end, we will only " "have containers and one node for each UI component." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:381 msgid "" "On an inherited scene, you can change any property of every node in the " "inspector, aside from its name. If you modify and save the parent scene, all " "the inherited scenes update to reflect the changes. If you change a value in " "the inherited scene, it will always overrides the parent's property. It's " "useful for UIs as they often require variations of the same elements. In " "general, in UI design, buttons, panels etc. share a common base style and " "interactions. We don't want to copy it over to all variations manually." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:390 msgid "" "A reload icon will appear next to the properties you override. Click it to " "reset the value to the parent scene's default." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:395 msgid "" "Think of scene inheritance like the node tree, or the ``extends`` keyword in " "GDScript. An inherited scene does everything like its parent, but you can " "override properties, resources and add extra nodes and scripts to extend its " "functionality." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:401 msgid "Inherit the Bar Scene to build the LifeBar" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:403 msgid "" "Go to ``Scene -> New Inherited Scene`` to create a new type of ``Bar``. " "Select the Bar scene and open it. You should see a new [unsaved] tab, that's " "like your ``Bar``, but with all nodes except the root in grey. Press ``Meta" "+S`` to save the new inherited scene and name it ``LifeBar``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:411 msgid "You can't rename grey nodes. This tells you they have a parent scene" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:413 msgid "" "First, rename the root or top level node to ``LifeBar``. We always want the " "root to describe exactly what this UI component is. The name differentiates " "this bar from the ``EnergyBar`` we'll create next. The other nodes inside " "the scene should describe the component's structure with broad terms, so it " "works with all inherited scenes. Like our ``TextureProgress`` and ``Number`` " "nodes." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:422 msgid "" "If you've ever done web design, it's the same spirit as working with CSS: " "you create a base class, and add variations with modifier classes. From a " "base button class, you'll have button-green and button-red variations for " "the user to accept and refuse prompts. The new class contains the name of " "the parent element and an extra keyword to explain how it modifies it. When " "we create an inherited scene and change the name of the top level node, " "we're doing the same thing." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:431 msgid "Design the EnergyBar" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:433 msgid "" "We already setup the ``LifeBar``'s design with the main ``Bar`` scene. Now " "we need the ``EnergyBar``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:436 msgid "" "Let's create a new inherited scene, and once again select the ``Bar.tscn`` " "scene and open it. Double-click on the ``Bar`` root node and rename it to " "``EnergyBar``. Save the new scene as ``EnergyBar.tscn``. We need to replace " "the HP texture with EP one, and to change the textures on the gauge." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:442 msgid "" "Head to the FileSystem dock on the left, select the ``Title`` node in the " "Scene tree and drag and drop the ``label_EP.png`` file onto the texture " "slot. Select the ``Number`` node and change the ``Text`` property to a " "different value like ``14``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:447 msgid "" "You'll notice the EP texture is smaller than the HP one. We should update " "the ``Number``'s font size to better fit it. A font is a resource. All the " "nodes in the entire project that use this resource will be affected by any " "property we change. You can try to change the size to a huge value like " "``40`` and switch back to the ``LifeBar`` or the ``Bar`` scenes. You will " "see the text increased in size." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:456 msgid "If we change the font resource, all the nodes that use it are affected" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:459 msgid "" "To change the font size on this node only, we must create a copy of the font " "resource. Select the ``Number`` node again and click on the wrench and " "screwdriver icon on the top right of the inspector. In the drop-down menu, " "select the ``Make Sub-Resources Unique`` option. Godot will find all the " "resources this node uses and create unique copies for us." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:467 msgid "Use this option to create unique copies of the resources for one node" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:471 msgid "" "When you duplicate a node from the Scene tree, with ``Meta+D``, it shares " "its resources with the original node. You need to use ``Make Sub-Resources " "Unique`` before you can tweak the resources without affecting the source " "node." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:476 msgid "" "Scroll down to the ``Custom Font`` section and open ``Font``. Lower the " "``Size`` to a smaller value like ``20`` or ``22``. You may also need to " "adjust the ``Bottom`` spacing value to align the text's baseline with the EP " "label on the left." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:483 msgid "The EP Count widget, with a smaller font than its HP counterpart" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:485 msgid "" "Now, select the ``TextureProgress`` node. Drag the ``energy_bar_bg.png`` " "file onto the ``Under`` slot and do the same for ``energy_bar_fill.png`` and " "drop it onto the ``Progress`` texture slot." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:489 msgid "" "You can resize the node vertically so that its bounding rectangle fits the " "gauge. Do the same with the ``Count`` node until its size aligns with that " "of the bar. Because the minimal size of ``TextureProgress`` is set based on " "its textures, you won't be able to downsize the ``Count`` node below that. " "That is also the size the ``Bar`` container will have. You may downscale " "this one as well." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:496 msgid "" "Last but not least, the ``Background`` container has a minimum size that " "makes it a bit large. Select it and in the ``Rect`` section, change the " "``Min Size`` property down to ``80`` pixels. It should resize automatically " "and the ``Title`` and ``Number`` nodes should reposition as well." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:504 msgid "The Count looks better now it's a bit smaller" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:508 msgid "" "The Count node's size affects the position of the TextureProgress. As we'll " "align our bars vertically in a moment, we're better off using the Counter's " "left margin to resize our EP label. This way both the EnergyBar's Count and " "the LifeBar's Count nodes are one hundred pixels wide, so both gauges will " "align perfectly." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:515 msgid "Prepare the bomb and rupee counters" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:517 msgid "" "Let us now take care of the counters. Go to ``Scene -> New Inherited Scene`` " "and select the ``Counter.tscn`` as a base. Rename the root node as " "``BombCounter`` too. Save the new scene as ``BombCounter.tscn``. That's all " "for this scene." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:524 msgid "The bomb counter is the same as the original Counter scene" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:526 msgid "" "Go to ``Scene -> New Inherited Scene`` again and select ``Counter.tscn`` " "once more. Rename the root node ``RupeeCounter`` and save the scene as " "``RupeeCounter.tscn``. For this one, we mainly need to replace the bomb icon " "with the rupee icon. In the FileSystem tab, drag the ``rupees_icon.png`` " "onto the ``Icon`` node's ``Texture`` slot. ``Icon`` already anchors to the " "right edge of the ``Background`` node so we can change its position and it " "will scale and reposition with the ``RupeeCounter`` container. Shift the " "rupee icon a little bit to the right and down. Use the Arrow Keys on the " "keyboard to nudge its position. Save, and we're done with all the UI " "elements." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:539 msgid "The rupee counter should look about like this" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:542 msgid "Add the UI components to the final GUI" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:544 msgid "" "Time to add all the UI elements to the main GUI scene. Open the ``GUI.tscn`` " "scene again, and delete the ``Bar`` and ``Counter`` nodes. In the FileSystem " "dock, find the ``LifeBar.tscn`` and drag and drop it onto the ``Bars`` " "container in the scene tree. Do the same for the ``EnergyBar``. You should " "see them align vertically." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:552 msgid "The LifeBar and the EnergyBar align automatically" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:554 msgid "" "Now, drag and drop the ``BombCounter.tscn`` and ``RupeeCounter.tscn`` scenes " "onto the ``Counters`` node. They'll resize automatically." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:559 msgid "The nodes resize to take all the available vertical space" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:561 msgid "" "To let the ``RupeeCounter`` and ``BombCounter`` use the size we defined in " "``Counter.tscn``, we need to change the ``Size Flags`` on the ``Counters`` " "container. Select the ``Counters`` node and unfold the ``Size Flags`` " "section in the Inspector. Uncheck the ``Fill`` tag for the ``Vertical`` " "property, and check ``Shrink Center`` so the container centers inside the " "``HBoxContainer``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:570 msgid "Now both counters have a decent size" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:574 msgid "" "Change the ``Min Size`` property of the ``Counters`` container to control " "the height of the counters' background." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:577 msgid "" "We have one small issue left with the EP label on the EnergyBar: the 2 bars " "should align vertically. Click the icon next to the ``EnergyBar`` node to " "open its scene. Select the ``Count`` node and scroll down to the ``Custom " "Constant`` section. Add a ``Margin Left`` of ``20``. In the ``Rect`` section " "set the node's ``Min Size`` back to 100, the same value as on the LifeBar. " "The ``Count`` should now have some margin on the left. If you save and go " "back to the GUI scene, it will be aligned vertically with the ``LifeBar``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:588 msgid "The 2 bars align perfectly" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:592 msgid "" "We could have setup the ``EnergyBar`` this way a few moments ago. But this " "shows you that you can go back to any scene anytime, tweak it, and see the " "changes propagate through the project!" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:597 msgid "Place the GUI onto the game's mockup" msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:599 msgid "" "To wrap up the tutorial we're going to insert the GUI onto the game's mockup " "scene." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:602 msgid "Head to the FileSystem dock and open ``LevelMockup.tscn``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:604 msgid "" "Drag-and-drop the ``GUI.tscn`` scene right below the ``bg`` node and above " "the ``Characters``. The GUI will scale to fit the entire viewport. Head to " "the Layout menu and select the ``Center Top`` option so it anchors to the " "top edge of the game window. Then resize the GUI to make it as small as " "possible vertically. Now you can see how the interface looks in the context " "of the game." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:611 msgid "" "Congratulations for getting to the end of this long tutorial. You can find " "final project `here <#>`__." msgstr "" #: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:620 msgid "" "**A final note about Responsive Design**. If you resize the GUI, you'll see " "the nodes move, but the textures and text won't scale. The GUI also has a " "minimum size, based on the textures inside of it. In games, we don’t need " "the interface to be as flexible as that of a website. You almost never want " "to support both landscape and portrait screen orientations. It’s one or the " "other. In landscape orientation, the most common ratios range from 4:3 to " "16:9. They are close to one another. That's why it’s enough for the GUI " "elements to only move horizontally when we change the window size." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:4 msgid "Control the game's UI with code" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:7 #: ../../docs/tutorials/2d/particle_systems_2d.rst:7 msgid "Intro" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:9 msgid "" "In this tutorial you will connect a character to a life bar and animate the " "health loss." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:14 msgid "" "Here's what you'll create: the bar and the counter animate when the " "character takes a hit. They fade when it dies." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:18 msgid "You will learn:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:20 msgid "How to **connect** a character to a GUI with signals" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:21 msgid "How to **control** a GUI with GDscript" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:22 msgid "How to **animate** a life bar with the :ref:`Tween ` node" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:25 msgid "" "If you want to learn how to set up the interface instead, check out the step-" "by-step UI tutorials:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:28 msgid "Create a main menu screen" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:29 msgid "Create a game user interface" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:32 msgid "" "When you code a game, you want to build the core gameplay first: the main " "mechanics, player input, win and loss conditions. The UI comes a bit later. " "You want to keep all the elements that make up your project separate if " "possible. Each character should be in its own scene, with its own scripts, " "and so should the UI elements. This prevents bugs, keeps your project " "manageable, and allows different team members to work on different parts of " "the game." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:40 msgid "" "Once the core gameplay and the UI are ready, you'll need to connect them " "somehow. In our example, we have the Enemy who attacks the Player at " "constant time intervals. We want the life bar to update when the Player " "takes damage." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:45 msgid "To do this, we will use **signals**." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:49 msgid "" "Signals are Godot's version of the Observer pattern. They allow us to send " "out some message. Other nodes can connect to the object that **emits** the " "signal and receive the information. It's a powerful tool we use a lot for " "User Interface and achievement systems. You don't want to use them " "everywhere though. Connecting two nodes adds some coupling between them. " "When there's a lot of connections, they become hard to manage. For more " "information on check out the `signals video tutorial `_ on GDquest." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:53 msgid "Download and explore the start project" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:55 msgid "" "Download the Godot project: :download:`ui_code_life_bar.zip `. It contains all the assets and scripts you need to " "get started. Extract the .zip archive to get two folders: `start` and `end`." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:58 msgid "" "Load the ``start`` project in Godot. In the ``FileSystem`` dock double click " "on LevelMockup.tscn to open it. It's an RPG game's mockup where 2 characters " "face each other. The pink enemy attacks and damages the green square at " "regular time intervals, until its death. Feel free to try out the game: the " "basic combat mechanics already work. But as the character isn't connected to " "the life bar the ``GUI`` doesn't do anything." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:68 msgid "" "This is typical of how you'd code a game: you implement the core gameplay " "first, handle the player's death, and only then you'll add the interface. " "That's because the UI listens to what's happening in the game. So it can't " "work if other systems aren't in place yet. If you design the UI before you " "prototype and test the gameplay, chances are it won't work well and you'll " "have to re-create it from scratch." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:71 msgid "The scene contains a background sprite, a GUI, and two characters." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:75 msgid "The scene tree, with the GUI scene set to display its children" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:77 msgid "" "The GUI scene encapsulates all of the Game User Interface. It comes with a " "barebones script where we get the path to nodes that exist inside the scene:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:105 msgid "" "``number_label`` displays a life count as a number. It's a ``Label`` node" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:107 msgid "``bar`` is the life bar itself. It's a ``TextureProgress`` node" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:108 msgid "" "``tween`` is a component-style node that can animate and control any value " "or method from any other node" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:113 msgid "" "The project uses a simple organisation that works for game jams and tiny " "games." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:115 msgid "" "At the root of the project, in the `res://` folder, you will find the " "`LevelMockup`. That's the main game scene and the one we will work with. All " "the components that make up the game are in the `scenes/` folder. The " "`assets/` folder contains the game sprites and the font for the HP counter. " "In the `scripts/` folder you will find the enemy, the player, and the GUI " "controller scripts." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:117 msgid "" "Click the edit scene icon to the right of the node in the scene tree to open " "the scene in the editor. You'll see the LifeBar and EnergyBar are sub-scenes " "themselves." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:121 msgid "The scene tree, with the Player scene set to display its children" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:124 msgid "Set up the Lifebar with the Player's max\\_health" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:126 msgid "" "We have to tell the GUI somehow what the player's current health is, to " "update the lifebar's texture, and to display the remaining health in the HP " "counter in the top left corner of the screen. To do this we send the " "player's health to the GUI every time they take damage. The GUI will then " "update the ``Lifebar`` and ``Number`` nodes with this value." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:132 msgid "" "We could stop here to display the number, but we need to initialize the " "bar's ``max_value`` for it to update in the right proportions. The first " "step is thus to tell the ``GUI`` what the green character's ``max_health`` " "is." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:139 msgid "" "The bar, a `TextureProgress`, has a `max_value` of `100` by default. If you " "don't need to display the character's health with a number, you don't need " "to change its `max_value` property. You send a percentage from the `Player` " "to the `GUI` instead: `health / max_health * 100`." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:143 msgid "" "Click the script icon to the right of the ``GUI`` in the Scene dock to open " "its script. In the ``_ready`` function, we're going to store the " "``Player``'s ``max_health`` in a new variable and use it to set the " "``bar``'s ``max_value``:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:164 msgid "" "Let's break it down. ``$\"../Characters/Player\"`` is a shorthand that goes " "one node up in the scene tree, and retrieves the ``Characters/Player`` node " "from there. It gives us access to the node. The second part of the " "statement, ``.max_health``, accesses the ``max_health`` on the Player node." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:170 msgid "" "The second line assigns this value to ``bar.max_value``. You could combine " "the two lines into one, but we'll need to use ``player_max_health`` again " "later in the tutorial." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:174 msgid "" "``Player.gd`` sets the ``health`` to ``max_health`` at the start of the " "game, so we could work with this. Why do we still use ``max_health``? There " "are two reasons:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:178 msgid "" "We don't have the guarantee that ``health`` will always equal " "``max_health``: a future version of the game may load a level where the " "player already lost some health." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:184 msgid "" "When you open a scene in the game, Godot creates nodes one by one, following " "the order in your Scene dock, from top to bottom. `GUI` and `Player` are not " "part of the same node branch. To make sure they both exist when we access " "each other, we have to use the `_ready` function. Godot calls `_ready` right " "after it loaded all nodes, before the game starts. It's the perfect function " "to set everything up and prepare the game session. Learn more about _ready: :" "doc:`scripting_continued`" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:188 msgid "Update health with a signal when the player takes a hit" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:190 msgid "" "Our GUI is ready to receive the ``health`` value updates from the " "``Player``. To achieve this we're going to use **signals**." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:195 msgid "" "There are many useful built-in signals like `enter_tree` and `exit_tree`, " "that all nodes emit when they are respectively created and destroyed. You " "can also create your own using the `signal` keyword. On the `Player` node, " "you'll find two signals we created for you: `died` and `health_changed`." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:197 msgid "" "Why don't we directly get the ``Player`` node in the ``_process`` function " "and look at the health value? Accessing nodes this way creates tight " "coupling between them. If you did it sparingly it may work. As your game " "grows bigger, you may have many more connections. If you get nodes this way " "it gets complex quickly. Not only that: you need to listen to the state " "change constantly in the ``_process`` function. This check happens 60 times " "a second and you'll likely break the game because of the order in which the " "code runs." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:206 msgid "" "On a given frame you may look at another node's property *before* it was " "updated: you get a value from the last frame. This leads to obscure bugs " "that are hard to fix. On the other hand, a signal is emitted right after a " "change happened. It **guarantees** you're getting a fresh piece of " "information. And you will update the state of your connected node *right " "after* the change happened." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:215 msgid "" "The Observer pattern, that signals derive from, still adds a bit of coupling " "between node branches. But it's generally lighter and more secure than " "accessing nodes directly to communicate between two separate classes. It can " "be okay for a parent node to get values from its children. But you'll want " "to favor signals if you're working with two separate branches. Read Game " "Programming Patterns for more information on the `Observer pattern `_. The `full book `_ is available online for free." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:219 msgid "" "With this in mind let's connect the ``GUI`` to the ``Player``. Click on the " "``Player`` node in the scene dock to select it. Head down to the Inspector " "and click on the Node tab. This is the place to connect nodes to listen the " "one you selected." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:224 msgid "The first section lists custom signals defined in ``Player.gd``:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:226 msgid "" "``died`` is emitted when the character died. We will use it in a moment to " "hide the UI." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:228 msgid "``health_changed`` is emitted when the character got hit." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:232 msgid "We're connecting to the health\\_changed signal" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:234 msgid "" "Select ``health_changed`` and click on the Connect button in the bottom " "right corner to open the Connect Signal window. On the left side you can " "pick the node that will listen to this signal. Select the ``GUI`` node. The " "right side of the screen lets you pack optional values with the signal. We " "already took care of it in ``Player.gd``. In general I recommend not to add " "too many arguments using this window as they're less convenient than doing " "it from the code." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:244 msgid "The Connect Signal window with the GUI node selected" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:248 msgid "" "You can optionally connect nodes from the code. However doing it from the " "editor has two advantages:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:250 msgid "Godot can write new callback functions for you in the connected script" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:251 msgid "" "An emitter icon appears next to the node that emits the signal in the Scene " "dock" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:253 msgid "" "At the bottom of the window you will find the path to the node you selected. " "We're interested in the second row called \"Method in Node\". This is the " "method on the ``GUI`` node that gets called when the signal is emitted. This " "method receives the values sent with the signal and lets you process them. " "If you look to the right, there is a \"Make Function\" radio button that is " "on by default. Click the connect button at the bottom of the window. Godot " "creates the method inside the ``GUI`` node. The script editor opens with the " "cursor inside a new ``_on_Player_health_changed`` function." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:265 msgid "" "When you connect nodes from the editor, Godot generates a method name with " "the following pattern: ``_on_EmitterName_signal_name``. If you wrote the " "method already, the \"Make Function\" option will keep it. You may replace " "the name with anything you'd like." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:272 msgid "Godot writes the callback method for you and takes you to it" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:274 msgid "" "Inside the parens after the function name, add a ``player_health`` argument. " "When the player emits the ``health_changed`` signal it will send its current " "``health`` alongside it. Your code should look like:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:292 msgid "" "The engine does not convert PascalCase to snake_case, for C# examples we'll " "be using PascalCase for method names & camelCase for method parameters which " "follows the official `C# naming conventions. `_" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:299 msgid "" "In Player.gd, when the Player emits the health\\_changed signal, it also " "sends its health value" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:302 msgid "" "Inside ``_on_Player_health_changed`` let's call a second function called " "``update_health`` and pass it the ``player_health`` variable." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:307 msgid "" "We could directly update the health value on `LifeBar` and `Number`. There " "are two reasons to use this method instead:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:309 msgid "" "The name makes it clear for our future selves and teammates that when the " "player took damage, we update the health count on the GUI" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:310 msgid "We will reuse this method a bit later" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:312 msgid "" "Create a new ``update_health`` method below ``_on_Player_health_changed``. " "It takes a new\\_value as its only argument:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:327 msgid "This method needs to:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:329 msgid "" "set the ``Number`` node's ``text`` to ``new_value`` converted to a string" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:331 msgid "set the ``TextureProgress``'s ``value`` to ``new_value``" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:350 msgid "" "``str`` is a built-in function that converts about any value to text. " "``Number``'s ``text`` property requires a string so we can't assign it to " "``new_value`` directly" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:354 msgid "" "Also call ``update_health`` at the end of the ``_ready`` function to " "initialize the ``Number`` node's ``text`` with the right value at the start " "of the game. Press F5 to test the game: the life bar updates with every " "attack!" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:361 msgid "" "Both the Number node and the TextureProgress update when the Player takes a " "hit" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:365 msgid "Animate the loss of life with the Tween node" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:367 msgid "" "Our interface is functional, but it could use some animation. That's a good " "opportunity to introduce the ``Tween`` node, an essential tool to animate " "properties. ``Tween`` animates anything you'd like from a start to an end " "state over a certain duration. For example it can animate the health on the " "``TextureProgress`` from its current level to the ``Player``'s new " "``health`` when the character takes damage." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:374 msgid "" "The ``GUI`` scene already contains a ``Tween`` child node stored in the " "``tween`` variable. Let's now use it. We have to make some changes to " "``update_health``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:378 msgid "" "We will use the ``Tween`` node's ``interpolate_property`` method. It takes " "seven arguments:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:381 msgid "A reference to the node who owns the property to animate" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:382 msgid "The property's identifier as a string" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:383 msgid "The starting value" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:384 msgid "The end value" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:385 msgid "The animation's duration in seconds" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:386 msgid "The type of the transition" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:387 msgid "The easing to use in combination with the equation." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:389 msgid "" "The last two arguments combined correspond to an `easing equation <#>`__. " "This controls how the value evolves from the start to the end point." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:393 msgid "" "Click the script icon next to the ``GUI`` node to open it again. The " "``Number`` node needs text to update itself, and the ``Bar`` needs a float " "or an integer. We can use ``interpolate_property`` to animate a number, but " "not to animate text directly. We're going to use it to animate a new ``GUI`` " "variable named ``animated_health``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:399 msgid "" "At the top of the script, define a new variable, name it " "``animated_health``, and set its value to 0. Navigate back to the " "``update_health`` method and clear its content. Let's animate the " "``animated_health`` value. Call the ``Tween`` node's " "``interpolate_property`` method:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:421 msgid "Let's break down the call:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:427 msgid "" "We target ``animated_health`` on ``self``, that is to say the ``GUI`` node. " "``Tween``'s interpolate\\_property takes the property's name as a string. " "That's why we write it as ``\"animated_health\"``." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:435 msgid "" "The starting point is the current value the bar's at. We still have to code " "this part, but it's going to be ``animated_health``. The end point of the " "animation is the ``Player``'s ``health`` after the ``health_changed``: " "that's ``new_value``. And ``0.6`` is the animation's duration in seconds." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:445 msgid "" "The last two arguments are constants from the ``Tween`` class. " "``TRANS_LINEAR`` means the animation should be linear. ``EASE_IN`` doesn't " "do anything with a linear transition, but we must provide this last argument " "or we'll get an error." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:450 msgid "" "The animation will not play until we activated the ``Tween`` node with " "``tween.start()``. We only have to do this once if the node is not active. " "Add this code after the last line:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:469 msgid "" "Although we could animate the `health` property on the `Player`, we " "shouldn't. Characters should lose life instantly when they get hit. It makes " "it a lot easier to manage their state, like to know when one died. You " "always want to store animations in a separate data container or node. The " "`tween` node is perfect for code-controlled animations. For hand-made " "animations, check out `AnimationPlayer`." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:472 msgid "Assign the animated\\_health to the LifeBar" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:474 msgid "" "Now the ``animated_health`` variable animates but we don't update the actual " "``Bar`` and ``Number`` nodes anymore. Let's fix this." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:477 msgid "So far, the update\\_health method looks like this:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:501 msgid "" "In this specific case, because ``number_label`` takes text, we need to use " "the ``_process`` method to animate it. Let's now update the ``Number`` and " "``TextureProgress`` nodes like before, inside of ``_process``:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:523 msgid "" "`number_label` and `bar` are variables that store references to the `Number` " "and `TextureProgress` nodes." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:525 msgid "" "Play the game to see the bar animate smoothly. But the text displays decimal " "number and looks like a mess. And considering the style of the game, it'd be " "nice for the life bar to animate in a choppier fashion." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:531 msgid "The animation is smooth but the number is broken" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:533 msgid "" "We can fix both problems by rounding out ``animated_health``. Use a local " "variable named ``round_value`` to store the rounded ``animated_health``. " "Then assign it to ``number_label.text`` and ``bar.value``:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:555 msgid "Try the game again to see a nice blocky animation." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:559 msgid "By rounding out animated\\_health we hit two birds with one stone" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:563 msgid "" "Every time the player takes a hit, the ``GUI`` calls " "``_on_Player_health_changed``, which in turn calls ``update_health``. This " "updates the animation and the ``number_label`` and ``bar`` follow in " "``_process``. The animated life bar that shows the health going down " "gradually is a trick. It makes the GUI feel alive. If the ``Player`` takes 3 " "damage, it happens in an instant." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:571 msgid "Fade the bar when the Player dies" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:573 msgid "" "When the green character dies, it plays a death animation and fades out. At " "this point, we shouldn't show the interface anymore. Let's fade the bar as " "well when the character died. We will reuse the same ``Tween`` node as it " "manages multiple animations in parallel for us." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:578 msgid "" "First, the ``GUI`` needs to connect to the ``Player``'s ``died`` signal to " "know when it died. Press :kbd:`F1` to jump back to the 2D Workspace. Select " "the ``Player`` node in the Scene dock and click on the Node tab next to the " "Inspector." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:583 msgid "Find the ``died`` signal, select it, and click the Connect button." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:587 msgid "The signal should already have the Enemy connected to it" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:589 msgid "" "In the Connecting Signal window, connect to the ``GUI`` node again. The Path " "to Node should be ``../../GUI`` and the Method in Node should show " "``_on_Player_died``. Leave the Make Function option on and click Connect at " "the bottom of the window. This will take you to the ``GUI.gd`` file in the " "Script Workspace." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:597 msgid "You should get these values in the Connecting Signal window" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:601 msgid "" "You should see a pattern by now: every time the GUI needs a new piece of " "information, we emit a new signal. Use them wisely: the more connections you " "add, the harder they are to track." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:603 msgid "" "To animate a fade on a UI element, we have to use its ``modulate`` property. " "``modulate`` is a ``Color`` that multiplies the colors of our textures." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:609 msgid "" "`modulate` comes from the `CanvasItem` class, All 2D and UI nodes inherit " "from it. It lets you toggle the visibility of the node, assign a shader to " "it, and modify it using a color with `modulate`." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:611 msgid "" "``modulate`` takes a ``Color`` value with 4 channels: red, green, blue and " "alpha. If we darken any of the first three channels it darkens the " "interface. If we lower the alpha channel our interface fades out." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:615 msgid "" "We're going to tween between two color values: from a white with an alpha of " "``1``, that is to say at full opacity, to a pure white with an alpha value " "of ``0``, completely transparent. Let's add two variables at the top of the " "``_on_Player_died`` method and name them ``start_color`` and ``end_color``. " "Use the ``Color()`` constructor to build two ``Color`` values." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:637 msgid "" "``Color(1.0, 1.0, 1.0)`` corresponds to white. The fourth argument, " "respectively ``1.0`` and ``0.0`` in ``start_color`` and ``end_color``, is " "the alpha channel." msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:641 msgid "" "We then have to call the ``interpolate_property`` method of the ``Tween`` " "node again:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:654 msgid "" "This time we change the ``modulate`` property and have it animate from " "``start_color`` to the ``end_color``. The duration is of one second, with a " "linear transition. Here again, because the transition is linear, the easing " "does not matter. Here's the complete ``_on_Player_died`` method:" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:679 msgid "And that is it. You may now play the game to see the final result!" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:683 msgid "The final result. Congratulations for getting there!" msgstr "" #: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:687 msgid "" "Using the exact same techniques, you can change the color of the bar when " "the Player gets poisoned, turn the bar red when its health drops low, shake " "the UI when they take a critical hit... the principle is the same: emit a " "signal to forward the information from the `Player` to the `GUI` and let the " "`GUI` process it." msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:4 msgid "Splash screen" msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:7 msgid "Tutorial" msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:9 msgid "" "This is a simple tutorial to establish the basic idea of how the GUI " "subsystem works. The goal is to create a simple, static splash screen." msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:15 msgid "" "Following is a file with the assets that will be used. The extracted files " "can be placed directly in your project folder and Godot will import them " "automatically." msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:18 msgid ":download:`robisplash_assets.zip `." msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:21 #: ../../docs/tutorials/gui/bbcode_in_richtextlabel.rst:16 msgid "Setting up" msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:23 msgid "" "Set the display resolution to 800x450 in Project Settings, and set up a new " "scene like this:" msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:27 msgid "" "The nodes \"background\" and \"logo\" are of :ref:`TextureRect " "` type. To display an image, drag the corresponding asset " "to the texture property." msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:32 msgid "" "The node \"start\" is a :ref:`TextureButton `. It takes " "several images for different states, but only the normal and pressed will be " "supplied in this example:" msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:38 msgid "Finally, the node \"copyright\" is a :ref:`Label `." msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:40 msgid "Your final scene should look something like this." msgstr "" #: ../../docs/getting_started/step_by_step/splash_screen.rst:44 msgid "" "Go ahead and run the project. If you're satisfied with the results, " "continue to the next tutorial." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:4 msgid "Animations" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:9 msgid "Godot's animation system is extremely powerful and flexible." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:11 msgid "" "To begin, let's use the scene from the previous tutorial (:ref:" "`doc_splash_screen`). The goal is to add a \"fade-in\" animation to the " "splash image. Here's a copy just in case: :download:`robisplash.zip `." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:16 msgid "Add an animation player" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:18 msgid "" "First of all, add an :ref:`AnimationPlayer ` node to " "the scene as a child of \"background\" (the root node):" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:23 msgid "" "When a node of this type is selected, the animation editor panel will appear:" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:28 msgid "The animation editor panel stays visible until manually hidden." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:31 msgid "Creating the animation" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:33 msgid "" "It's time to create a new animation! Press the new animation button and name " "the animation \"intro\" when the dialog appears." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:38 msgid "" "Now that we have an animation the property editor enters \"animation editing" "\" mode. In this mode, a key icon appears next to every property of the " "property editor. In Godot any property of an object can be animated:" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:46 msgid "Editing the animation" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:48 msgid "The logo will appear from the top of the screen." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:50 msgid "" "With the animation editor panel open, select the \"logo\" node and set the " "\"Rect / Position\" property to ``(118, -400)`` and press the key button " "next to the property:" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:56 msgid "When the dialog appears, confirm that you are creating a new track." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:58 msgid "The keyframe will be added in the animation player editor:" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:62 msgid "Move the editor cursor to the end by clicking here:" msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:66 msgid "" "Change the logo position to ``(118, 0)`` and add a keyframe again. With two " "keyframes, the animation happens." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:71 msgid "" "Pressing \"Play selected animation from start. (Shift-D)\" on the animation " "panel will make the logo descend." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:76 msgid "" "Click the \"Autoplay on Load\" button to set the animation to start " "automatically when the scene starts." msgstr "" #: ../../docs/getting_started/step_by_step/animations.rst:81 msgid "" "And finally, when running the scene, the animation should look like this:" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:4 #: ../../docs/development/cpp/creating_android_modules.rst:185 #: ../../docs/development/file_formats/tscn.rst:249 #: ../../docs/community/resources.rst:4 msgid "Resources" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:7 msgid "Nodes and resources" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:9 msgid "" "So far, :ref:`Nodes ` have been the most important datatype in " "Godot as most of the behaviors and features of the engine are implemented " "through them. There is another datatype that is equally important: :ref:" "`Resource `." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:15 msgid "" "Where *Nodes* focus on behaviors, such as drawing a sprite, drawing a 3D " "model, physics, GUI controls, etc," msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:18 msgid "" "**Resources** are mere **data containers**. This means that they don't do " "any action nor process any information. Resources just contain data." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:22 msgid "" "Examples of resources are :ref:`Texture `, :ref:`Script " "`, :ref:`Mesh `, :ref:`Animation " "`, :ref:`AudioStream `, :ref:`Font " "`, :ref:`Translation `, etc." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:32 msgid "" "When Godot saves or loads (from disk) a scene (.tscn or .scn), an image " "(png, jpg), a script (.gd) or pretty much anything, that file is considered " "a resource." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:36 msgid "" "When a resource is loaded from disk, **it is always loaded once**. That " "means, if there is a copy of that resource already loaded in memory, trying " "to load the resource again will return the same copy again and again. This " "corresponds with the fact that resources are just data containers, so there " "is no need to have them duplicated." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:42 msgid "" "Typically, every object in Godot (Node, Resource, or anything else) can " "export properties. Properties can be of many types (like a string, integer, " "Vector2, etc) and one of those types can be a resource. This means that both " "nodes and resources can contain resources as properties. To make it a little " "more visual:" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:51 msgid "External vs built-in" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:53 msgid "" "The resource properties can reference resources in two ways, *external* (on " "disk) or **built-in**." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:56 msgid "" "To be more specific, here's a :ref:`Texture ` in a :ref:" "`Sprite ` node:" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:61 msgid "" "Pressing the \">\" button on the right side of the preview allows us to view " "and edit the resources properties. One of the properties (path) shows where " "it comes from. In this case, it comes from a png image." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:67 msgid "" "When the resource comes from a file, it is considered an *external* " "resource. If the path property is erased (or it never had a path to begin " "with), it is considered a built-in resource." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:71 msgid "" "For example, if the path \\`\"res://robi.png\"\\` is erased from the \"path" "\" property in the above example, and then the scene is saved, the resource " "will be saved inside the .tscn scene file, no longer referencing the " "external \"robi.png\". However, even if saved as built-in, and even though " "the scene can be instanced multiple times, the resource will always be " "loaded only once. That means, different Robi robot scenes instanced at the " "same time will still share the same image." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:80 msgid "Loading resources from code" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:82 msgid "" "Loading resources from code is easy. There are two ways to do it. The first " "is to use load(), like this:" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:101 msgid "" "The second way is more optimal, but only works with a string constant " "parameter because it loads the resource at compile-time." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:116 msgid "Loading scenes" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:117 msgid "" "Scenes are also resources, but there is a catch. Scenes saved to disk are " "resources of type :ref:`PackedScene `. This means that " "the scene is packed inside a resource." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:121 msgid "" "To obtain an instance of the scene, the method :ref:`PackedScene.instance() " "` must be used." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:143 msgid "" "This method creates the nodes in the scene's hierarchy, configures them " "(sets all the properties) and returns the root node of the scene, which can " "be added to any other node." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:147 msgid "" "The approach has several advantages. As the :ref:`PackedScene.instance() " "` function is pretty fast, adding extra content " "to the scene can be done efficiently. New enemies, bullets, effects, etc can " "be added or removed quickly, without having to load them again from disk " "each time. It is important to remember that, as always, images, meshes, etc " "are all shared between the scene instances." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:156 msgid "Freeing resources" msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:158 msgid "" "Resource extends from :ref:`Reference `. As such, when a " "resource is no longer in use, it will automatically free itself. Since, in " "most cases, Resources are contained in Nodes, scripts or other resources, " "when a node is removed or freed, all the children resources are freed too." msgstr "" #: ../../docs/getting_started/step_by_step/resources.rst:167 msgid "" "Like any object in Godot, not just nodes, resources can be scripted, too. " "However, there isn't generally much of an advantage, as resources are just " "data containers." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:4 msgid "File system" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:9 msgid "" "File systems are yet another hot topic in engine development. The file " "system manages how the assets are stored and how they are accessed. A well " "designed file system also allows multiple developers to edit the same source " "files and assets while collaborating together." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:14 msgid "" "Initial versions of the Godot engine (and previous iterations before it was " "named Godot) used a database. Assets were stored in it and assigned an ID. " "Other approaches were tried as well, such as local databases, files with " "metadata, etc. In the end the simple approach won and now Godot stores all " "assets as files in the file system." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:21 #: ../../docs/tutorials/3d/inverse_kinematics.rst:68 msgid "Implementation" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:23 msgid "" "The file system stores resources on disk. Anything, from a script, to a " "scene or a PNG image is a resource to the engine. If a resource contains " "properties that reference other resources on disk, the paths to those " "resources are also included. If a resource has sub-resources that are built-" "in, the resource is saved in a single file together with all the bundled sub-" "resources. For example, a font resource is often bundled together with the " "font textures." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:30 msgid "" "In general the Godot file system avoids using metadata files. The reason for " "this is simple, existing asset managers and VCSs are simply much better than " "anything we can implement, so Godot tries the best to play along with SVN, " "Git, Mercurial, Perforce, etc." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:35 msgid "Example of a file system contents:" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:46 msgid "project.godot" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:48 msgid "" "The project.godot file is the project description file, and it is always " "found at the root of the project. In fact its location defines where the " "root is. This is the first file that Godot looks for when opening a project." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:52 msgid "" "This file contains the project configuration in plain text, using the win." "ini format. Even an empty project.godot can function as a basic definition " "of a blank project." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:57 msgid "Path delimiter" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:59 msgid "" "Godot only supports ``/`` as a path delimiter. This is done for portability " "reasons. All operating systems support this, even Windows, so a path such as " "``c:\\project\\project.godot`` needs to be typed as ``c:/project/project." "godot``." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:65 #: ../../docs/tutorials/io/data_paths.rst:16 msgid "Resource path" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:67 msgid "" "When accessing resources, using the host OS file system layout can be " "cumbersome and non-portable. To solve this problem, the special path ``res://" "`` was created." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:71 msgid "" "The path ``res://`` will always point at the project root (where project." "godot is located, so in fact ``res://project.godot`` is always valid)." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:75 msgid "" "This file system is read-write only when running the project locally from " "the editor. When exported or when running on different devices (such as " "phones or consoles, or running from DVD), the file system will become read-" "only and writing will no longer be permitted." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:81 msgid "User path" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:83 msgid "" "Writing to disk is often still needed for various tasks such as saving game " "state or downloading content packs. To this end, the engine ensures that " "there is a special path ``user://`` that is always writable." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:88 msgid "Host file system" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:90 msgid "" "Alternatively host file system paths can also be used, but this is not " "recommended for a released product as these paths are not guaranteed to work " "on all platforms. However, using host file system paths can be useful when " "writing development tools in Godot!" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:96 msgid "Drawbacks" msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:98 msgid "" "There are some drawbacks to this simple file system design. The first issue " "is that moving assets around (renaming them or moving them from one path to " "another inside the project) will break existing references to these assets. " "These references will have to be re-defined to point at the new asset " "location." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:103 msgid "" "To avoid this, do all your move, delete and rename operations from within " "Godot, on the FileSystem dock. Never move assets from outside Godot, or " "dependencies will have to be fixed manually (Godot detects this and helps " "you fix them anyway, but why go the hard route?)." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:108 msgid "" "The second is that under Windows and macOS file and path names are case " "insensitive. If a developer working in a case insensitive host file system " "saves an asset as \"myfile.PNG\", but then references it as \"myfile.png\", " "it will work fine on their platorm, but not on other platforms, such as " "Linux, Android, etc. This may also apply to exported binaries, which use a " "compressed package to store all files." msgstr "" #: ../../docs/getting_started/step_by_step/filesystem.rst:114 msgid "" "It is recommended that your team clearly defines a naming convention for " "files when working with Godot! One simple fool-proof convention is to only " "allow lowercase file and path names." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:4 #: ../../docs/getting_started/step_by_step/scene_tree.rst:41 #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:288 msgid "SceneTree" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:9 msgid "" "This is where things start getting abstract, but don't panic. There's not " "much more depth than this." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:12 msgid "" "In previous tutorials, everything revolved around the concept of nodes. " "Scenes are simply a collection of nodes. They become active once they enter " "the *scene tree*." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:16 msgid "" "This concept deserves going into a little more detail. In fact, the scene " "system is not even a core component of Godot as it is possible to skip it " "and write a script (or C++ code) that talks directly to the servers, but " "making a game that way would be a lot of work." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:22 msgid "MainLoop" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:24 msgid "" "The way Godot works internally is as follows. There is the :ref:`OS " "` class, which is the only instance that runs at the beginning. " "Afterwards, all drivers, servers, scripting languages, scene system, etc are " "loaded." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:29 msgid "" "When initialization is complete, :ref:`OS ` needs to be supplied " "a :ref:`MainLoop ` to run. Up to this point, all this is " "internals working (you can check main/main.cpp file in the source code if " "you are ever interested to see how this works internally)." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:35 msgid "" "The user program, or game, starts in the MainLoop. This class has a few " "methods, for initialization, idle (frame-synchronized callback), fixed " "(physics-synchronized callback), and input. Again, this is low level and " "when making games in Godot, writing your own MainLoop seldom makes sense." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:43 msgid "" "One of the ways to explain how Godot works is that it's a high level game " "engine over a low level middleware." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:46 msgid "" "The scene system is the game engine, while the :ref:`OS ` and " "servers are the low level API." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:49 msgid "" "In any case, the scene system provides its own main loop to OS, :ref:" "`SceneTree `. This is automatically instanced and set when " "running a scene, no need to do any extra work." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:54 msgid "" "It's important to know that this class exists because it has a few important " "uses:" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:57 msgid "" "It contains the root :ref:`Viewport `, to which a scene is " "added as a child when it's first opened to become part of the *Scene Tree* " "(more on that next)" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:60 msgid "" "It contains information about the groups and has the means to call all nodes " "in a group or get a list of them." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:62 msgid "" "It contains some global state functionality, such as setting pause mode or " "quitting the process." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:65 msgid "" "When a node is part of the Scene Tree, the :ref:`SceneTree " "` singleton can be obtained by simply calling :ref:`Node." "get_tree() `." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:71 msgid "Root viewport" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:73 msgid "" "The root :ref:`Viewport ` is always at the top of the scene. " "From a node, it can be obtained in two different ways:" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:88 msgid "" "This node contains the main viewport, anything that is a child of a :ref:" "`Viewport ` is drawn inside of it by default, so it makes " "sense that the top of all nodes is always a node of this type otherwise " "nothing would be seen!" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:93 msgid "" "While other viewports can be created in the scene (for split-screen effects " "and such), this one is the only one that is never created by the user. It's " "created automatically inside SceneTree." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:98 msgid "Scene tree" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:100 msgid "" "When a node is connected, directly or indirectly, to the root viewport, it " "becomes part of the *scene tree*." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:103 msgid "" "This means that as explained in previous tutorials, it will get the " "_enter_tree() and _ready() callbacks (as well as _exit_tree())." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:108 msgid "" "When nodes enter the *Scene Tree*, they become active. They get access to " "everything they need to process, get input, display 2D and 3D, " "notifications, play sound, groups, etc. When they are removed from the " "*scene tree*, they lose access." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:114 msgid "Tree order" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:116 msgid "" "Most node operations in Godot, such as drawing 2D, processing, or getting " "notifications are done in tree order. This means that parents and siblings " "with a smaller rank in the tree order will get notified before the current " "node." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:124 msgid "\"Becoming active\" by entering the *Scene Tree*" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:126 msgid "A scene is loaded from disk or created by scripting." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:127 msgid "" "The root node of that scene (only one root, remember?) is added as either a " "child of the \"root\" Viewport (from SceneTree), or to any child or " "grandchild of it." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:130 msgid "" "Every node of the newly added scene, will receive the \"enter_tree\" " "notification ( _enter_tree() callback in GDScript) in top-to-bottom order." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:133 msgid "" "An extra notification, \"ready\" ( _ready() callback in GDScript) is " "provided for convenience, when a node and all its children are inside the " "active scene." msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:136 msgid "" "When a scene (or part of it) is removed, they receive the \"exit scene\" " "notification ( _exit_tree() callback in GDScript) in bottom-to-top order" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:141 msgid "Changing current scene" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:143 msgid "" "After a scene is loaded, it is often desired to change this scene for " "another one. The simple way to do this is to use the :ref:`SceneTree." "change_scene() ` function:" msgstr "" #: ../../docs/getting_started/step_by_step/scene_tree.rst:161 msgid "" "This is a quick and useful way to switch scenes but has the drawback that " "the game will stall until the new scene is loaded and running. At some point " "in your game, it may be desired to create proper loading screens with " "progress bar, animated indicators or thread (background) loading. This must " "be done manually using autoloads (see next chapter!) and :ref:" "`doc_background_loading`." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:4 msgid "Singletons (AutoLoad)" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:9 msgid "" "Scene singletons are useful, catering to a common use case where you need to " "store persistent information between scenes." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:12 msgid "Albeit powerful, the scene system by itself has a few drawbacks:" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:14 msgid "" "There is no common place to store information (e.g. a player's items etc.) " "required by more than one scene." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:16 msgid "" "While it is possible for a scene that loads and unloads other scenes as its " "children to store information common to these child scenes, it is no longer " "possible to run these scenes by themselves and expect them to work correctly." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:20 msgid "" "While information can be stored to disk in \\`user://\\` and this " "information can be loaded by scenes that require it, continuously saving and " "loading this data when changing scenes is cumbersome and may be slow." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:24 msgid "However there is still a need in Godot to create parts of a scene that:" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:26 msgid "Are always loaded, no matter which scene is opened from the editor" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:27 msgid "" "Can store global variables, such as player information, items, money etc. " "and share information between scenes" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:29 msgid "Can handle switching scenes and transitions" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:30 msgid "" "Acts like a singleton, since GDScript does not support global variables by " "design." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:32 msgid "Auto-loading nodes and scripts caters to this need." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:35 msgid "AutoLoad" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:37 msgid "" "You can use AutoLoad to load a scene, or a script that inherits from Node (a " "node will be created and the script will be set to it)." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:40 msgid "" "To autoload a scene or script, select Project > Project Settings from the " "menu and switch to the AutoLoad tab. Each entry in the list requires a name, " "which is used as the name of the node, and the node is always added to the " "root viewport before any other scenes are loaded." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:47 msgid "" "This means that any node can access a singleton named \"playervariables\" " "with:" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:60 msgid "Or even simpler using the name directly:" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:73 msgid "Custom scene switcher" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:75 msgid "" "This short tutorial will explain how to make a scene switcher using " "autoload. For simple scene switching, the :ref:`SceneTree.change_scene() " "` method suffices (described in :ref:" "`doc_scene_tree`), so this method is for more complex behavior when " "switching between scenes." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:81 msgid "" "First download the template from here: :download:`autoload.zip `, then open it." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:84 msgid "" "Two scenes are present, scene_a.tscn and scene_b.tscn on an otherwise empty " "project. Each are identical and contain a button connected to a callback for " "switching to the other scene. When the project runs, it starts in scene_a." "tscn. However, this currently does nothing and pressing the button does not " "work." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:91 msgid "global.gd" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:93 msgid "" "First of all, create a global.gd script. The easy way to create a resource " "from scratch is from the new resource button in the inspector tab:" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:98 msgid "Save the script as `global.gd`:" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:102 msgid "" "The script should open in the script editor. The next step is to add it to " "AutoLoad list. Select Project > Project Settings from the menu, switch to " "the AutoLoad tab and add a new entry with name \"global\" that points to " "this file:" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:109 msgid "Now, whenever you run any of your scenes, the script is always loaded." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:111 msgid "" "Returning to our script, the current scene needs to be fetched in the " "`_ready()` function. Both the current scene and `global.gd` are children of " "root, but the autoloaded nodes are always first. This means that the last " "child of root is always the loaded scene." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:116 msgid "" "Note: Make sure that global.gd extends Node, otherwise it won't be loaded!" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:146 msgid "" "Next up is the function for changing the scene. This function frees the " "current scene and replaces it with the requested one." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:216 msgid "" "As mentioned in the comments above, we want to avoid the situation of having " "the current scene being deleted while being used (code from functions of it " "being run), so using :ref:`Object.call_deferred() " "` is desired at this point. The result is that " "execution of the commands in the second function will happen at a later time " "when no code from the current scene is running." msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:224 msgid "" "Finally, all that is left is to fill the empty functions in scene_a.gd and " "scene_b.gd:" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:245 #: ../../docs/tutorials/math/vector_math.rst:276 #: ../../docs/development/cpp/core_types.rst:122 msgid "and" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:265 msgid "" "Now if you run the project, you can switch between both scenes by pressing " "the button!" msgstr "" #: ../../docs/getting_started/step_by_step/singletons_autoload.rst:268 msgid "" "To load scenes with a progress bar, check out the next tutorial, :ref:" "`doc_background_loading`" msgstr "" #: ../../docs/getting_started/editor/index.rst:2 msgid "Editor manual" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:8 msgid "From Unity3D to Godot Engine" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:10 msgid "" "This guide provides an overview of Godot Engine from the viewpoint of a " "Unity user, and aims to help you migrate your existing Unity experience into " "the world of Godot." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:14 msgid "Differences" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:17 msgid "Unity" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:17 msgid "Godot" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:19 #: ../../docs/community/contributing/documentation_guidelines.rst:102 msgid "License" msgstr "مجوز" #: ../../docs/getting_started/editor/unity_to_godot.rst:19 msgid "" "Proprietary, closed, free license with revenue caps and usage restrictions" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:19 msgid "MIT license, free and fully open source without any restriction" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:21 msgid "OS (editor)" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:21 msgid "Windows, macOS, Linux (unofficial and unsupported)" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:21 msgid "Windows, macOS, X11 (Linux, \\*BSD)" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:23 msgid "OS (export)" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:23 msgid "**Desktop:** Windows, macOS, Linux" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:24 msgid "**Mobile:** Android, iOS, Windows Phone, Tizen" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:25 msgid "**Web:** WebAssembly or asm.js" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:26 msgid "**Consoles:** PS4, PS Vita, Xbox One, Xbox 360, Wii U, Nintendo 3DS" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:27 msgid "" "**VR:** Oculus Rift, SteamVR, Google Cardboard, Playstation VR, Gear VR, " "HoloLens" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:28 msgid "**TV:** Android TV, Samsung SMART TV, tvOS" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:23 msgid "**Desktop:** Windows, macOS, X11" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:24 msgid "**Mobile:** Android, iOS" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:25 msgid "**Web:** WebAssembly" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:26 msgid "**Console:** See :ref:`doc_consoles`" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:27 msgid "**VR:** Oculus Rift, SteamVR" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:30 msgid "Scene system" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:30 msgid "Component/Scene (GameObject > Component)" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:31 msgid "Prefabs" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:30 msgid "" ":ref:`Scene tree and nodes `, allowing scenes to be " "nested and/or inherit other scenes" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:33 msgid "Third-party tools" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:33 msgid "Visual Studio or VS Code" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:33 msgid ":ref:`External editors are possible `" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:34 msgid ":ref:`Android SDK for Android export `" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:36 msgid "Killer features" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:36 msgid "Huge community" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:37 msgid "Large assets store" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:36 msgid "Scene System" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:37 msgid ":ref:`Animation Pipeline `" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:38 msgid ":ref:`Easy to write Shaders `" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:39 msgid "Debug on Device" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:46 msgid "The editor" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:48 msgid "" "Godot Engine provides a rich-featured editor that allows you to build your " "games. The pictures below display both editors with colored blocks to " "indicate common functionalities." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:55 msgid "" "Note that Godot editor allows you to dock each panel at the side of the " "scene editor you wish." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:57 msgid "" "While both editors may seem similar, there are many differences below the " "surface. Both let you organize the project using the filesystem, but Godot's " "approach is simpler with a single configuration file, minimalist text " "format, and no metadata. All this contributes to Godot being much friendlier " "to VCS systems such as Git, Subversion, or Mercurial." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:62 msgid "" "Godot's Scene panel is similar to Unity's Hierarchy panel but, as each node " "has a specific function, the approach used by Godot is more visually " "descriptive. In other words, it's easier to understand what a specific scene " "does at a glance." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:66 msgid "" "The Inspector in Godot is more minimalist and designed to only show " "properties. Thanks to this, objects can export a much larger amount of " "useful parameters to the user without having to hide functionality in " "language APIs. As a plus, Godot allows animating any of those properties " "visually, so changing colors, textures, enumerations, or even links to " "resources in real-time is possible without involving code." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:71 msgid "" "Finally, the Toolbar at the top of the screen is similar in the sense that " "it allows controlling the project playback, but projects in Godot run in a " "separate window, as they don't execute inside the editor (but the tree and " "objects can still be explored in the debugger window)." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:75 msgid "" "This approach has the disadvantage that the running game can't be explored " "from different angles (though this may be supported in the future and " "displaying collision gizmos in the running game is already possible), but in " "exchange has several advantages:" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:79 msgid "" "Running the project and closing it is fast (Unity has to save, run the " "project, close the project, and then reload the previous state)." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:80 msgid "" "Live editing is a lot more useful because changes done to the editor take " "effect immediately in the game and are not lost (nor have to be synced) when " "the game is closed. This allows fantastic workflows, like creating levels " "while you play them." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:81 msgid "The editor is more stable because the game runs in a separate process." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:83 msgid "" "Finally, the top toolbar includes a menu for remote debugging. These options " "make it simple to deploy to a device (connected phone, tablet, or browser " "via HTML5), and debug/live edit on it after the game was exported." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:88 msgid "The scene system" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:90 msgid "" "This is the most important difference between Unity and Godot and, actually, " "the favourite feature of most Godot users." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:92 msgid "" "Unity's scene system consists of embedding all the required assets in a " "scene and linking them together by setting components and scripts to them." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:95 msgid "" "Godot's scene system is different: it actually consists in a tree made of " "nodes. Each node serves a purpose: Sprite, Mesh, Light, etc. Basically, this " "is similar to Unity scene system. However, each node can have multiple " "children, which makes each a subscene of the main scene. This means you can " "compose a whole scene with different scenes stored in different files." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:100 msgid "" "For example, think of a platformer level. You would compose it with multiple " "elements:" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:102 msgid "Bricks" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:103 msgid "Coins" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:104 msgid "The player" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:105 msgid "The enemies" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:108 msgid "" "In Unity, you would put all the GameObjects in the scene: the player, " "multiple instances of enemies, bricks everywhere to form the ground of the " "level and then multiple instances of coins all over the level. You would " "then add various components to each element to link them and add logic in " "the level: For example, you'd add a BoxCollider2D to all the elements of the " "scene so that they can collide. This principle is different in Godot." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:113 msgid "" "In Godot, you would split your whole scene into 3 separate, smaller scenes, " "which you would then instance in the main scene." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:115 msgid "**First, a scene for the Player alone.**" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:117 msgid "" "Consider the player as a reusable element in other levels. It is composed of " "one node in particular: an AnimatedSprite node, which contains the sprite " "textures to form various animations (for example, walking animation)" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:120 msgid "**Second, a scene for the Enemy.**" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:122 msgid "" "There again, an enemy is a reusable element in other levels. It is almost " "the same as the Player node - the only differences are the script (that " "manages AI, mostly) and sprite textures used by the AnimatedSprite." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:126 msgid "**Lastly, the Level scene.**" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:128 msgid "" "It is composed of Bricks (for platforms), Coins (for the player to grab) and " "a certain number of instances of the previous Enemy scene. These will be " "different, separate enemies, whose behaviour and appearance will be the same " "as defined in the Enemy scene. Each instance is then considered as a node in " "the Level scene tree. Of course, you can set different properties for each " "Enemy node (to change its color, for example)." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:134 msgid "" "Finally, the main scene would then be composed of one root node with 2 " "children: a Player instance node, and a Level instance node. The root node " "can be anything, generally a \"root\" type such as \"Node\" which is the " "most global type, or \"Node2D\" (root type of all 2D-related nodes), " "\"Spatial\" (root type of all 3D-related nodes) or \"Control\" (root type of " "all GUI-related nodes)." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:140 msgid "" "As you can see, every scene is organized as a tree. The same goes for nodes' " "properties: you don't *add* a collision component to a node to make it " "collidable like Unity does. Instead, you make this node a *child* of a new " "specific node that has collision properties. Godot features various " "collision types nodes, depending of the use (see the :ref:`Physics " "introduction `)." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:145 msgid "" "Question: What are the advantages of this system? Wouldn't this system " "potentially increase the depth of the scene tree? Besides, Unity allows " "organizing GameObjects by putting them in empty GameObjects." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:147 msgid "" "First, this system is closer to the well-known object-oriented paradigm: " "Godot provides a number of nodes which are not clearly \"Game Objects\", but " "they provide their children with their own capabilities: this is inheritance." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:148 msgid "" "Second, it allows the extraction a subtree of scene to make it a scene of " "its own, which answers the second and third questions: even if a scene tree " "gets too deep, it can be split into smaller subtrees. This also allows a " "better solution for reusability, as you can include any subtree as a child " "of any node. Putting multiple nodes in an empty GameObject in Unity does not " "provide the same possibility, apart from a visual organization." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:151 msgid "" "These are the most important concepts you need to remember: \"node\", " "\"parent node\", and \"child node\"." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:155 #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:4 msgid "Project organization" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:159 msgid "" "We previously observed that there is no perfect solution to set a project " "architecture. Any solution will work for Unity and Godot, so this point has " "a lesser importance." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:162 msgid "" "However, we often observe a common architecture for Unity projects, which " "consists of having one Assets folder in the root directory that contains " "various folders, one per type of asset: Audio, Graphics, Models, Materials, " "Scripts, Scenes, etc." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:165 msgid "" "As described before, the Godot scene system allows splitting scenes into " "smaller scenes. Since each scene and subscene is actually one scene file in " "the project, we recommend organizing your project a bit differently. This " "wiki provides a page for this: :ref:`doc_project_organization`." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:171 msgid "Where are my prefabs?" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:173 msgid "" "The concept of prefabs as provided by Unity is a 'template' element of the " "scene. It is reusable, and each instance of the prefab that exists in the " "scene has an existence of its own, but all of them have the same properties " "as defined by the prefab." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:177 msgid "" "Godot does not provide prefabs as such, but this functionality is here, " "again, filled thanks to its scene system: As we saw the scene system is " "organized as a tree. Godot allows you to save a subtree of a scene as its " "own scene, thus saved into its own file. This new scene can then be " "instanced as many times as you want. Any change you make to this new, " "separate scene will be applied to its instances. However, any change you " "make to the instance will not have any impact on the 'template' scene." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:185 msgid "" "To be precise, you can modify the parameters of the instance in the " "Inspector panel. However, the nodes that compose this instance are locked " "although you can unlock them if you need to by right-clicking the instance " "in the Scene tree and selecting \"Editable children\" in the menu. You don't " "need to do this to add new children nodes to this node, but it is possible. " "Remember that these new children will belong to the instance, not the " "'template' scene. If you want to add new children to all the instances of " "your 'template' scene, then you need to add them in the 'template' scene." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:195 msgid "Glossary correspondence" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:197 msgid "" "GameObject -> Node Add a component -> Inheriting Prefab -> Externalized " "branch" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:203 msgid "Scripting: GDScript, C# and Visual Script" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:206 msgid "Design" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:208 msgid "" "As you may know already, Unity supports C#. C# benefits from its integration " "with Visual Studio and other features, such as static typing." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:210 msgid "" "Godot provides its own scripting language, :ref:`GDScript ` " "as well as support for :ref:`Visual Script ` and :ref:`doc_c_sharp`. GDScript borrows its syntax from " "Python, but is not related to it. If you wonder about the reasoning for a " "custom scripting language, please read :ref:`GDScript ` and " "`FAQ `_ pages. GDScript is strongly attached to the Godot API and is " "really easy to learn: Between one evening for an experienced programmer and " "a week for a complete beginner." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:216 msgid "" "Unity allows you to attach as many scripts as you want to a GameObject. Each " "script adds a behaviour to the GameObject: For example, you can attach a " "script so that it reacts to the player's controls, and another that controls " "its specific game logic." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:220 msgid "" "In Godot, you can only attach one script per node. You can use either an " "external GDScript file or include the script directly in the node. If you " "need to attach more scripts to one node, then you may consider two " "solutions, depending on your scene and on what you want to achieve:" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:224 msgid "" "either add a new node between your target node and its current parent, then " "add a script to this new node." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:225 msgid "" "or, your can split your target node into multiple children and attach one " "script to each of them." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:227 msgid "" "As you can see, it can be easy to turn a scene tree to a mess. This is why " "it is important to have a real reflection and consider splitting a " "complicated scene into multiple, smaller branches." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:231 msgid "Connections : groups and signals" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:233 msgid "" "You can control nodes by accessing them using a script and calling functions " "(built-in or user-defined) on them. But there's more: You can also place " "them in a group and call a function on all nodes contained in this group! " "This is explained in :ref:`this page `." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:237 msgid "" "But there's more! Certain nodes throw signals when certain actions happen. " "You can connect these signals to call a specific function when they happen. " "Note that you can define your own signals and send them whenever you want. " "This feature is documented `here `_." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:243 msgid "Using Godot in C++" msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:245 msgid "" "For your information, Godot also allows you to develop your project directly " "in C++ by using its API, which is not possible with Unity at the moment. As " "an example, you can consider Godot Engine's editor as a \"game\" written in C" "++ using Godot API." msgstr "" #: ../../docs/getting_started/editor/unity_to_godot.rst:247 msgid "" "If you are interested in using Godot in C++, you may want to start reading " "the :ref:`Developing in C++ ` page." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:4 msgid "Command line tutorial" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:8 msgid "" "Some developers like using the command line extensively. Godot is designed " "to be friendly to them, so here are the steps for working entirely from the " "command line. Given the engine relies on little to no external libraries, " "initialization times are pretty fast, making it suitable for this workflow." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:15 msgid "Path" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:17 msgid "" "It is recommended that your Godot binary is in your PATH environment " "variable, so it can be executed easily from any place by typing ``godot``. " "You can do so on Linux by placing the Godot binary in ``/usr/local/bin`` and " "making sure it is called ``godot``." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:23 msgid "Setting the project path" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:25 msgid "" "Depending on where your Godot binary is located and what your current " "working directory is, you may need to set the path to your project for any " "of the following commands to work correctly." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:29 msgid "" "This can be done by giving the path to the ``project.godot`` file of your " "project as either the first argument, like this:" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:36 msgid "Or by using the ``--path`` argument:" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:42 msgid "" "For example, the full command for exporting your game (as explained below) " "might look like this:" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:49 msgid "Creating a project" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:52 msgid "" "Creating a project from the command line can be done by navigating the shell " "to the desired place and making a project.godot file." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:63 msgid "The project can now be opened with Godot." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:67 msgid "Running the editor" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:69 msgid "" "Running the editor is done by executing godot with the ``-e`` flag. This " "must be done from within the project directory or a subdirectory, otherwise " "the command is ignored and the project manager appears." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:77 msgid "" "If a scene has been created and saved, it can be edited later by running the " "same code with that scene as argument." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:85 msgid "Erasing a scene" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:87 msgid "" "Godot is friends with your filesystem and will not create extra metadata " "files. Use ``rm`` to erase a scene file. Make sure nothing references that " "scene or else an error will be thrown upon opening." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:96 msgid "Running the game" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:98 msgid "" "To run the game, simply execute Godot within the project directory or " "subdirectory." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:105 msgid "" "When a specific scene needs to be tested, pass that scene to the command " "line." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:113 msgid "Debugging" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:115 msgid "" "Catching errors in the command line can be a difficult task because they " "just fly by. For this, a command line debugger is provided by adding ``-d``. " "It works for both running the game or a simple scene." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:130 msgid "" "Exporting the project from the command line is also supported. This is " "especially useful for continuous integration setups. The version of Godot " "that is headless (server build, no video) is ideal for this." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:139 msgid "" "The platform names recognized by the ``--export`` switch are the same as " "displayed in the export wizard of the editor. To get a list of supported " "platforms from the command line, try exporting to a non-recognized platform " "and the full listing of platforms your configuration supports will be shown." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:145 msgid "" "To export a debug version of the game, use the ``--export-debug`` switch " "instead of ``--export``. Their parameters and usage are the same." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:149 msgid "Running a script" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:151 msgid "" "It is possible to run a simple .gd script from the command line. This " "feature is especially useful in large projects, for batch conversion of " "assets or custom import/export." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:155 msgid "The script must inherit from SceneTree or MainLoop." msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:157 msgid "Here is a simple example of how it works:" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:168 msgid "And how to run it:" msgstr "" #: ../../docs/getting_started/editor/command_line_tutorial.rst:175 msgid "" "If no project.godot exists at the path, current path is assumed to be the " "current working directory (unless ``-path`` is specified)." msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:4 msgid "Using an external text editor" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:6 msgid "" "While godot has an inbuilt text editor, some developers have a tendency to " "want to use a text editor they are familiar with. Godot provides this option " "via the options under ``Editor -> Editor Settings -> Text Editor -> " "External``" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:13 msgid "" "There are two fields: the executable path and command line flags. The flags " "allow you to better integrate the editor with godot. Godot will replace the " "following inside the flags parameter:" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:18 msgid "Field in Exec Flags" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:18 msgid "Is replaced with" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:20 msgid "{project}" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:20 msgid "The absolute path to the project directory" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:22 msgid "{file}" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:22 msgid "The absolute path to the file" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:24 msgid "{col}" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:24 msgid "The column number of the error" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:26 msgid "{line}" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:26 msgid "The line number of the error" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:29 msgid "Some example Exec Flags for various editors include:" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:32 msgid "Exec Flags" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:34 msgid "geany/kate" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:34 msgid "{file} --line {line} --column {col}" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:36 msgid "atom/sublime text" msgstr "" #: ../../docs/getting_started/editor/external_editor.rst:36 msgid "{file}:{line}" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:9 msgid "" "*GDScript* is a high level, dynamically typed programming language used to " "create content. It uses a syntax similar to `Python `_ (blocks are indent-based and " "many keywords are similar). Its goal is to be optimized for and tightly " "integrated with Godot Engine, allowing great flexibility for content " "creation and integration." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:17 msgid "History" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:19 msgid "" "In the early days, the engine used the `Lua `__ " "scripting language. Lua is fast, but creating bindings to an object oriented " "system (by using fallbacks) was complex and slow and took an enormous amount " "of code. After some experiments with `Python `__, it " "also proved difficult to embed." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:25 msgid "" "The last third party scripting language that was used for shipped games was " "`Squirrel `__, but it was dropped as well. At that " "point, it became evident that a custom scripting language could more " "optimally make use of Godot's particular architecture:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:30 msgid "" "Godot embeds scripts in nodes. Most languages are not designed with this in " "mind." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:32 msgid "" "Godot uses several built-in data types for 2D and 3D math. Script languages " "do not provide this, and binding them is inefficient." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:34 msgid "" "Godot uses threads heavily for lifting and initializing data from the net or " "disk. Script interpreters for common languages are not friendly to this." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:37 msgid "" "Godot already has a memory management model for resources, most script " "languages provide their own, which results in duplicate effort and bugs." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:40 msgid "" "Binding code is always messy and results in several failure points, " "unexpected bugs and generally low maintainability." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:43 msgid "" "The result of these considerations is *GDScript*. The language and " "interpreter for GDScript ended up being smaller than the binding code itself " "for Lua and Squirrel, while having equal functionality. With time, having a " "built-in language has proven to be a huge advantage." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:49 msgid "Example of GDScript" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:51 msgid "" "Some people can learn better by taking a look at the syntax, so here's a " "simple example of how GDScript looks." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:123 msgid "" "If you have previous experience with statically typed languages such as C, C+" "+, or C# but never used a dynamically typed one before, it is advised you " "read this tutorial: :ref:`doc_gdscript_more_efficiently`." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:128 msgid "Language" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:130 msgid "" "In the following, an overview is given to GDScript. Details, such as which " "methods are available to arrays or other objects, should be looked up in the " "linked class descriptions." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:135 msgid "Identifiers" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:137 msgid "" "Any string that restricts itself to alphabetic characters (``a`` to ``z`` " "and ``A`` to ``Z``), digits (``0`` to ``9``) and ``_`` qualifies as an " "identifier. Additionally, identifiers must not begin with a digit. " "Identifiers are case-sensitive (``foo`` is different from ``FOO``)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:143 msgid "Keywords" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:145 msgid "" "The following is the list of keywords supported by the language. Since " "keywords are reserved words (tokens), they can't be used as identifiers. " "Operators (like ``in``, ``not``, ``and`` or ``or``) and names of built-in " "types as listed in the following sections are also reserved." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:150 msgid "" "Keywords are defined in the `GDScript tokenizer `_ in " "case you want to take a look under the hood." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:154 msgid "Keyword" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:154 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:7 #: ../../docs/getting_started/workflow/assets/importing_images.rst:50 #: ../../docs/tutorials/inputs/inputevent.rst:117 #: ../../docs/tutorials/gui/bbcode_in_richtextlabel.rst:27 #: ../../docs/tutorials/shading/shading_language.rst:50 #: ../../docs/tutorials/shading/shading_language.rst:383 #: ../../docs/tutorials/shading/shading_language.rst:420 #: ../../docs/tutorials/shading/shading_language.rst:460 #: ../../docs/tutorials/shading/shading_language.rst:653 #: ../../docs/tutorials/shading/shading_language.rst:712 #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:875 #: ../../docs/tutorials/shading/shading_language.rst:925 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 #: ../../docs/tutorials/shading/shading_language.rst:1040 #: ../../docs/tutorials/shading/shading_language.rst:1085 #: ../../docs/tutorials/shading/shading_language.rst:1098 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:242 #: ../../docs/tutorials/misc/binary_serialization_api.rst:92 #: ../../docs/tutorials/misc/binary_serialization_api.rst:101 #: ../../docs/tutorials/misc/binary_serialization_api.rst:110 #: ../../docs/tutorials/misc/binary_serialization_api.rst:119 #: ../../docs/tutorials/misc/binary_serialization_api.rst:132 #: ../../docs/tutorials/misc/binary_serialization_api.rst:143 #: ../../docs/tutorials/misc/binary_serialization_api.rst:158 #: ../../docs/tutorials/misc/binary_serialization_api.rst:171 #: ../../docs/tutorials/misc/binary_serialization_api.rst:190 #: ../../docs/tutorials/misc/binary_serialization_api.rst:205 #: ../../docs/tutorials/misc/binary_serialization_api.rst:220 #: ../../docs/tutorials/misc/binary_serialization_api.rst:239 #: ../../docs/tutorials/misc/binary_serialization_api.rst:264 #: ../../docs/tutorials/misc/binary_serialization_api.rst:295 #: ../../docs/tutorials/misc/binary_serialization_api.rst:310 #: ../../docs/tutorials/misc/binary_serialization_api.rst:319 #: ../../docs/tutorials/misc/binary_serialization_api.rst:330 #: ../../docs/tutorials/misc/binary_serialization_api.rst:340 #: ../../docs/tutorials/misc/binary_serialization_api.rst:359 #: ../../docs/tutorials/misc/binary_serialization_api.rst:371 #: ../../docs/tutorials/misc/binary_serialization_api.rst:383 #: ../../docs/tutorials/misc/binary_serialization_api.rst:396 #: ../../docs/tutorials/misc/binary_serialization_api.rst:407 #: ../../docs/tutorials/misc/binary_serialization_api.rst:418 #: ../../docs/tutorials/misc/binary_serialization_api.rst:426 #: ../../docs/tutorials/misc/binary_serialization_api.rst:439 #: ../../docs/tutorials/misc/binary_serialization_api.rst:452 #: ../../docs/tutorials/misc/binary_serialization_api.rst:467 msgid "Description" msgstr "توضیحات" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:156 msgid "if" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:156 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:158 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:160 msgid "See `if/else/elif`_." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:158 msgid "elif" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:160 msgid "else" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:162 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:695 msgid "for" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:162 msgid "See for_." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:164 msgid "do" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:164 msgid "Reserved for future implementation of do...while loops." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:166 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:684 msgid "while" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:166 msgid "See while_." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:168 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:724 msgid "match" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:168 msgid "See match_." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:170 msgid "switch" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:170 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:172 msgid "Reserved for future implementation." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:172 msgid "case" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:174 msgid "break" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:174 msgid "Exits the execution of the current ``for`` or ``while`` loop." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:176 msgid "continue" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:176 msgid "" "Immediately skips to the next iteration of the ``for`` or ``while`` loop." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:178 msgid "pass" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:178 msgid "" "Used where a statement is required syntactically but execution of code is " "undesired, e.g. in empty functions." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:180 msgid "return" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:180 msgid "Returns a value from a function." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:182 msgid "class" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:182 msgid "Defines a class." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:184 msgid "extends" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:184 msgid "Defines what class to extend with the current class." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:186 #: ../../docs/tutorials/i18n/locales.rst:360 msgid "is" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:186 msgid "Tests whether a variable extends a given class." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:188 msgid "self" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:188 msgid "Refers to current class instance." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:190 msgid "tool" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:190 msgid "Executes the script in the editor." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:192 msgid "signal" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:192 msgid "Defines a signal." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:194 msgid "func" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:194 msgid "Defines a function." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:196 msgid "static" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:196 msgid "Defines a static function. Static member variables are not allowed." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:198 msgid "const" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:198 msgid "Defines a constant." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:200 msgid "enum" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:200 msgid "Defines an enum." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:202 msgid "var" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:202 msgid "Defines a variable." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:204 msgid "onready" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:204 msgid "" "Initializes a variable once the Node the script is attached to and its " "children are part of the scene tree." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:206 msgid "export" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:206 msgid "" "Saves a variable along with the resource it's attached to and makes it " "visible and modifiable in the editor." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:208 msgid "setget" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:208 msgid "Defines setter and getter functions for a variable." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:210 msgid "breakpoint" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:210 msgid "Editor helper for debugger breakpoints." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:212 msgid "preload" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:212 msgid "Preloads a class or variable. See `Classes as resources`_." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:214 msgid "yield" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:214 msgid "Coroutine support. See `Coroutines with yield`_." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:216 msgid "assert" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:216 msgid "" "Asserts a condition, logs error on failure. Ignored in non-debug builds. See " "`Assert keyword`_." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:218 msgid "remote" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:218 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:220 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:222 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:224 msgid "" "Networking RPC annotation. See :ref:`high-level multiplayer docs " "`." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:220 msgid "master" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:222 msgid "slave" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:224 msgid "sync" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:226 msgid "PI" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:226 #, fuzzy msgid "PI constant." msgstr "ثابت ها" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:228 msgid "TAU" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:228 #, fuzzy msgid "TAU constant." msgstr "ثابت ها" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:230 msgid "INF" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:230 msgid "Infinity constant. Used for comparisons." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:232 msgid "NAN" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:232 msgid "NAN (not a number) constant. Used for comparisons." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:236 #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:472 msgid "Operators" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:238 msgid "The following is the list of supported operators and their precedence." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:241 msgid "**Operator**" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:241 #: ../../docs/getting_started/workflow/export/feature_tags.rst:32 msgid "**Description**" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:243 msgid "``x[index]``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:243 msgid "Subscription, Highest Priority" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:245 msgid "``x.attribute``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:245 msgid "Attribute Reference" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:247 msgid "``is``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:247 msgid "Instance Type Checker" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:249 msgid "``~``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:249 msgid "Bitwise NOT" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:251 msgid "``-x``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:251 msgid "Negative" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:253 msgid "``*`` ``/`` ``%``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:253 msgid "Multiplication / Division / Remainder" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:255 msgid "" "NOTE: The result of these operations depends on the operands types. If both " "are Integers, then the result will be an Integer. That means 1/10 returns 0 " "instead of 0.1. If at least one of the operands is a float, then the result " "is a float: float(1)/10 or 1.0/10 return both 0.1." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:264 msgid "``+`` ``-``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:264 msgid "Addition / Subtraction" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:266 msgid "``<<`` ``>>``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:266 msgid "Bit Shifting" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:268 msgid "``&``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:268 msgid "Bitwise AND" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:270 msgid "``^``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:270 msgid "Bitwise XOR" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:272 msgid "``|``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:272 msgid "Bitwise OR" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:274 msgid "``<`` ``>`` ``==`` ``!=`` ``>=`` ``<=``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:274 msgid "Comparisons" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:276 msgid "``in``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:276 msgid "Content Test" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:278 msgid "``!`` ``not``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:278 msgid "Boolean NOT" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:280 msgid "``and`` ``&&``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:280 msgid "Boolean AND" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:282 msgid "``or`` ``||``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:282 msgid "Boolean OR" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:284 msgid "``if x else``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:284 msgid "Ternary if/else" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:286 msgid "``=`` ``+=`` ``-=`` ``*=`` ``/=`` ``%=`` ``&=`` ``|=``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:286 msgid "Assignment, Lowest Priority" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:290 msgid "Literals" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:293 msgid "**Literal**" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:293 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:242 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:262 msgid "**Type**" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:295 msgid "``45``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:295 msgid "Base 10 integer" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:297 msgid "``0x8F51``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:297 msgid "Base 16 (hex) integer" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:299 msgid "``3.14``, ``58.1e-10``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:299 msgid "Floating point number (real)" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:301 msgid "``\"Hello\"``, ``\"Hi\"``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:301 msgid "Strings" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:303 msgid "``\"\"\"Hello\"\"\"``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:303 msgid "Multiline string" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:305 msgid "``@\"Node/Label\"``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:305 msgid "NodePath or StringName" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:309 msgid "Comments" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:311 msgid "" "Anything from a ``#`` to the end of the line is ignored and is considered a " "comment." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:319 msgid "" "Multi-line comments can be created using \"\"\" (three quotes in a row) at " "the beginning and end of a block of text. Note that this creates a string, " "therefore, it will not be stripped away when the script is compiled." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:330 msgid "Built-in types" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:332 msgid "" "Built-in types are stack-allocated. They are passed as values. This means a " "copy is created on each assignment or when passing them as arguments to " "functions. The only exceptions are ``Array``\\ s and ``Dictionaries``, which " "are passed by reference so they are shared. (Not ``PoolArray``\\ s like " "``PoolByteArray`` though, those are passed as values too, so consider this " "when deciding which to use!)" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:339 msgid "Basic built-in types" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:341 msgid "A variable in GDScript can be assigned to several built-in types." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:344 #: ../../docs/tutorials/misc/binary_serialization_api.rst:25 msgid "null" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:346 msgid "" "``null`` is an empty data type that contains no information and can not be " "assigned any other value." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:350 #: ../../docs/tutorials/misc/binary_serialization_api.rst:27 msgid "bool" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:352 msgid "The Boolean data type can only contain ``true`` or ``false``." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:355 msgid "int" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:357 msgid "" "The integer data type can only contain integer numbers, (both negative and " "positive)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:361 #: ../../docs/tutorials/misc/binary_serialization_api.rst:31 msgid "float" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:363 msgid "Used to contain a floating point value (real numbers)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:366 msgid ":ref:`String `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:368 msgid "" "A sequence of characters in `Unicode format `_. Strings can contain the `standard C escape sequences `_. GDScript supports :ref:`format " "strings aka printf functionality `." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:374 msgid "Vector built-in types" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:377 msgid ":ref:`Vector2 `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:379 msgid "" "2D vector type containing ``x`` and ``y`` fields. Can also be accessed as " "array." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:383 msgid ":ref:`Rect2 `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:385 msgid "" "2D Rectangle type containing two vectors fields: ``position`` and ``size``. " "Alternatively contains an ``end`` field which is ``position+size``." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:389 msgid ":ref:`Vector3 `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:391 msgid "" "3D vector type containing ``x``, ``y`` and ``z`` fields. This can also be " "accessed as an array." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:395 msgid ":ref:`Transform2D `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:397 msgid "3x2 matrix used for 2D transforms." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:400 msgid ":ref:`Plane `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:402 msgid "" "3D Plane type in normalized form that contains a ``normal`` vector field and " "a ``d`` scalar distance." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:406 msgid ":ref:`Quat `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:408 msgid "" "Quaternion is a datatype used for representing a 3D rotation. It's useful " "for interpolating rotations." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:412 msgid ":ref:`AABB `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:414 msgid "" "Axis-aligned bounding box (or 3D box) contains 2 vectors fields: " "``position`` and ``size``. Alternatively contains an ``end`` field which is " "``position+size``." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:419 msgid ":ref:`Basis `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:421 msgid "" "3x3 matrix used for 3D rotation and scale. It contains 3 vector fields " "(``x``, ``y`` and ``z``) and can also be accessed as an array of 3D vectors." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:426 msgid ":ref:`Transform `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:428 msgid "" "3D Transform contains a Basis field ``basis`` and a Vector3 field ``origin``." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:432 msgid "Engine built-in types" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:435 msgid ":ref:`Color `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:437 msgid "" "Color data type contains ``r``, ``g``, ``b``, and ``a`` fields. It can also " "be accessed as ``h``, ``s``, and ``v`` for hue/saturation/value." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:441 msgid ":ref:`NodePath `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:443 msgid "" "Compiled path to a node used mainly in the scene system. It can be easily " "assigned to, and from, a String." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:447 msgid ":ref:`RID `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:449 msgid "Resource ID (RID). Servers use generic RIDs to reference opaque data." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:452 msgid ":ref:`Object `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:454 msgid "Base class for anything that is not a built-in type." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:457 msgid "Container built-in types" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:460 msgid ":ref:`Array `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:462 msgid "" "Generic sequence of arbitrary object types, including other arrays or " "dictionaries (see below). The array can resize dynamically. Arrays are " "indexed starting from index ``0``. Starting with Godot 2.1, indices may be " "negative like in Python, to count from the end." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:476 msgid "" "GDScript arrays are allocated linearly in memory for speed. Large arrays " "(more than tens of thousands of elements) may however cause memory " "fragmentation. If this is a concern special types of arrays are available. " "These only accept a single data type. They avoid memory fragmentation and " "also use less memory but are atomic and tend to run slower than generic " "arrays. They are therefore only recommended to use for large data sets:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:483 msgid "" ":ref:`PoolByteArray `: An array of bytes (integers from " "0 to 255)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:484 msgid ":ref:`PoolIntArray `: An array of integers." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:485 msgid ":ref:`PoolRealArray `: An array of floats." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:486 msgid ":ref:`PoolStringArray `: An array of strings." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:487 msgid "" ":ref:`PoolVector2Array `: An array of :ref:`Vector2 " "` objects." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:488 msgid "" ":ref:`PoolVector3Array `: An array of :ref:`Vector3 " "` objects." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:489 msgid "" ":ref:`PoolColorArray `: An array of :ref:`Color " "` objects." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:492 msgid ":ref:`Dictionary `" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:494 msgid "Associative container which contains values referenced by unique keys." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:507 msgid "" "Lua-style table syntax is also supported. Lua-style uses ``=`` instead of ``:" "`` and doesn't use quotes to mark string keys (making for slightly less to " "write). Note however that like any GDScript identifier, keys written in this " "form cannot start with a digit." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:521 msgid "" "To add a key to an existing dictionary, access it like an existing key and " "assign to it::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:530 #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:228 msgid "Data" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:533 #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:131 msgid "Variables" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:535 msgid "" "Variables can exist as class members or local to functions. They are created " "with the ``var`` keyword and may, optionally, be assigned a value upon " "initialization." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:547 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:193 #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:211 #: ../../docs/development/cpp/object_class.rst:94 msgid "Constants" msgstr "ثابت ها" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:549 msgid "" "Constants are similar to variables, but must be constants or constant " "expressions and must be assigned on initialization." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:563 msgid "Enums" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:565 msgid "" "Enums are basically a shorthand for constants, and are pretty useful if you " "want to assign consecutive integers to some constant." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:568 msgid "" "If you pass a name to the enum, it would also put all the values inside a " "constant dictionary of that name." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:589 #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:391 #: ../../docs/tutorials/shading/shading_language.rst:255 msgid "Functions" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:591 msgid "" "Functions always belong to a `class `_. The scope priority for " "variable look-up is: local → class member → global. The ``self`` variable is " "always available and is provided as an option for accessing class members, " "but is not always required (and should *not* be sent as the function's first " "argument, unlike Python)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:604 msgid "" "A function can ``return`` at any point. The default return value is ``null``." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:607 msgid "Referencing Functions" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:609 msgid "" "Contrary to Python, functions are *not* first class objects in GDScript. " "This means they cannot be stored in variables, passed as an argument to " "another function or be returned from other functions. This is for " "performance reasons." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:613 msgid "" "To reference a function by name at runtime, (e.g. to store it in a variable, " "or pass it to another function as an argument) one must use the ``call`` or " "``funcref`` helpers::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:626 msgid "" "Remember that default functions like ``_init``, and most notifications such " "as ``_enter_tree``, ``_exit_tree``, ``_process``, ``_physics_process``, etc. " "are called in all base classes automatically. So there is only a need to " "call the function explicitly when overloading them in some way." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:634 msgid "Static functions" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:636 msgid "" "A function can be declared static. When a function is static it has no " "access to the instance member variables or ``self``. This is mainly useful " "to make libraries of helper functions:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:647 msgid "Statements and control flow" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:649 msgid "" "Statements are standard and can be assignments, function calls, control flow " "structures, etc (see below). ``;`` as a statement separator is entirely " "optional." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:654 msgid "if/else/elif" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:656 msgid "" "Simple conditions are created by using the ``if``/``else``/``elif`` syntax. " "Parenthesis around conditions are allowed, but not required. Given the " "nature of the tab-based indentation, ``elif`` can be used instead of " "``else``/``if`` to maintain a level of indentation." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:670 msgid "Short statements can be written on the same line as the condition::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:677 msgid "" "Sometimes you might want to assign a different initial value based on a " "boolean expression. In this case ternary-if expressions come in handy::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:686 msgid "" "Simple loops are created by using ``while`` syntax. Loops can be broken " "using ``break`` or continued using ``continue``:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:697 msgid "" "To iterate through a range, such as an array or table, a *for* loop is used. " "When iterating over an array, the current array element is stored in the " "loop variable. When iterating over a dictionary, the *index* is stored in " "the loop variable." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:726 msgid "" "A ``match`` statement is used to branch execution of a program. It's the " "equivalent of the ``switch`` statement found in many other languages but " "offers some additional features." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:729 msgid "Basic syntax:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:742 msgid "**Crash-course for people who are familiar to switch statements**:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:744 msgid "Replace ``switch`` with ``match``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:745 msgid "Remove ``case``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:746 msgid "" "Remove any ``break``'s. If you don't want to ``break`` by default you can " "use ``continue`` for a fallthrough." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:747 msgid "Change ``default`` to a single underscore." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:750 msgid "**Control flow**:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:752 msgid "" "The patterns are matched from top to bottom. If a pattern matches, the " "corresponding block will be executed. After that, the execution continues " "below the ``match`` statement. If you want to have a fallthrough you can use " "``continue`` to stop execution in the current block and check the ones below " "it." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:756 msgid "There are 6 pattern types:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:768 msgid "constant pattern" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:759 msgid "constant primitives, like numbers and strings ::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:780 msgid "variable pattern" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:771 msgid "matches the contents of a variable/enum ::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:794 msgid "wildcard pattern" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:783 msgid "This pattern matches everything. It's written as a single underscore." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:785 msgid "" "It can be used as the equivalent of the ``default`` in a ``switch`` " "statement in other languages. ::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:807 msgid "binding pattern" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:797 msgid "" "A binding pattern introduces a new variable. Like the wildcard pattern, it " "matches everything - and also gives that value a name. It's especially " "useful in array and dictionary patterns. ::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:826 msgid "array pattern" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:810 msgid "" "matches an array. Every single element of the array pattern is a pattern " "itself so you can nest them." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:812 msgid "" "The length of the array is tested first, it has to be the same size as the " "pattern, otherwise the pattern don't match." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:814 msgid "" "**Open-ended array**: An array can be bigger than the pattern by making the " "last subpattern ``..``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:816 msgid "Every subpattern has to be comma separated. ::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:851 msgid "dictionary pattern" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:829 msgid "" "Works in the same way as the array pattern. Every key has to be a constant " "pattern." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:831 msgid "" "The size of the dictionary is tested first, it has to be the same size as " "the pattern, otherwise the pattern don't match." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:833 msgid "" "**Open-ended dictionary**: A dictionary can be bigger than the pattern by " "making the last subpattern ``..``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:835 msgid "Every subpattern has to be comma separated." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:837 msgid "" "If you don't specify a value, then only the existence of the key is checked." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:839 msgid "A value pattern is separated from the key pattern with a ``:`` ::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:862 msgid "Multipatterns:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:854 msgid "" "You can also specify multiple patterns separated by a comma. These patterns " "aren't allowed to have any bindings in them. ::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:865 msgid "Classes" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:867 msgid "" "By default, the body of a script file is an unnamed class and it can only be " "referenced externally as a resource or file. Class syntax is meant to be " "compact and can only contain member variables or functions. Static functions " "are allowed, but not static members (this is in the spirit of thread safety, " "since scripts can be initialized in separate threads without the user " "knowing). In the same way, member variables (including arrays and " "dictionaries) are initialized every time an instance is created." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:876 msgid "Below is an example of a class file." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:888 msgid "Inheritance" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:890 msgid "A class (stored as a file) can inherit from" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:892 msgid "A global class" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:893 msgid "Another class file" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:894 msgid "An inner class inside another class file." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:896 msgid "Multiple inheritance is not allowed." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:898 msgid "Inheritance uses the ``extends`` keyword:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:912 msgid "" "To check if a given instance inherits from a given class the ``is`` keyword " "can be used:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:926 msgid "" "To call a function in a *base class* (i.e. one ``extend``-ed in your current " "class), prepend ``.`` to the function name:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:933 msgid "" "This is especially useful because functions in extending classes replace " "functions with the same name in their base classes. So if you still want to " "call them, you can use ``.`` like the ``super`` keyword in other languages:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:943 msgid "Class Constructor" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:945 msgid "" "The class constructor, called on class instantiation, is named ``_init``. As " "mentioned earlier, the constructors of parent classes are called " "automatically when inheriting a class. So there is usually no need to call " "``._init()`` explicitly." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:949 msgid "If a parent constructor takes arguments, they are passed like this:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:957 msgid "Inner classes" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:959 msgid "" "A class file can contain inner classes. Inner classes are defined using the " "``class`` keyword. They are instanced using the ``ClassName.new()`` function." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:979 msgid "Classes as resources" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:981 msgid "" "Classes stored as files are treated as :ref:`resources `. " "They must be loaded from disk to access them in other classes. This is done " "using either the ``load`` or ``preload`` functions (see below). Instancing " "of a loaded class resource is done by calling the ``new`` function on the " "class object::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:997 msgid "Exports" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:999 msgid "" "Class members can be exported. This means their value gets saved along with " "the resource (e.g. the :ref:`scene `) they're attached " "to. They will also be available for editing in the property editor. " "Exporting is done by using the ``export`` keyword::" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1008 msgid "" "An exported variable must be initialized to a constant expression or have an " "export hint in the form of an argument to the export keyword (see below)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1011 msgid "" "One of the fundamental benefits of exporting member variables is to have " "them visible and editable in the editor. This way artists and game designers " "can modify values that later influence how the program runs. For this, a " "special export syntax is provided." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1097 msgid "" "It must be noted that even if the script is not being run while at the " "editor, the exported properties are still editable (see below for \"tool\")." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1102 msgid "Exporting bit flags" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1104 msgid "" "Integers used as bit flags can store multiple ``true``/``false`` (boolean) " "values in one property. By using the export hint ``int, FLAGS``, they can be " "set from the editor:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1113 msgid "" "Restricting the flags to a certain number of named flags is also possible. " "The syntax is similar to the enumeration syntax:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1121 msgid "" "In this example, ``Fire`` has value 1, ``Water`` has value 2, ``Earth`` has " "value 4 and ``Wind`` corresponds to value 8. Usually, constants should be " "defined accordingly (e.g. ``const ELEMENT_WIND = 8`` and so on)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1126 msgid "" "Using bit flags requires some understanding of bitwise operations. If in " "doubt, boolean variables should be exported instead." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1130 msgid "Exporting arrays" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1132 msgid "" "Exporting arrays works but with an important caveat: While regular arrays " "are created local to every class instance, exported arrays are *shared* " "between all instances. This means that editing them in one instance will " "cause them to change in all other instances. Exported arrays can have " "initializers, but they must be constant expressions." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1169 msgid "Setters/getters" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1171 msgid "" "It is often useful to know when a class' member variable changes for " "whatever reason. It may also be desired to encapsulate its access in some " "way." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1174 msgid "" "For this, GDScript provides a *setter/getter* syntax using the ``setget`` " "keyword. It is used directly after a variable definition:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1181 msgid "" "Whenever the value of ``variable`` is modified by an *external* source (i.e. " "not from local usage in the class), the *setter* function (``setterfunc`` " "above) will be called. This happens *before* the value is changed. The " "*setter* must decide what to do with the new value. Vice-versa, when " "``variable`` is accessed, the *getter* function (``getterfunc`` above) must " "``return`` the desired value. Below is an example:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1198 msgid "Either of the *setter* or *getter* functions can be omitted:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1207 msgid "" "Get/Setters are especially useful when exporting variables to editor in tool " "scripts or plugins, for validating input." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1210 msgid "" "As said *local* access will *not* trigger the setter and getter. Here is an " "illustration of this:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1225 msgid "Tool mode" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1227 msgid "" "Scripts, by default, don't run inside the editor and only the exported " "properties can be changed. In some cases it is desired that they do run " "inside the editor (as long as they don't execute game code or manually avoid " "doing so). For this, the ``tool`` keyword exists and must be placed at the " "top of the file:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1242 msgid "Memory management" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1244 msgid "" "If a class inherits from :ref:`class_Reference`, then instances will be " "freed when no longer in use. No garbage collector exists, just reference " "counting. By default, all classes that don't define inheritance extend " "**Reference**. If this is not desired, then a class must inherit :ref:" "`class_Object` manually and must call instance.free(). To avoid reference " "cycles that can't be freed, a ``weakref`` function is provided for creating " "weak references." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1252 msgid "" "Alternatively, when not using references, the " "``is_instance_valid(instance)`` can be used to check if an object has been " "freed." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1257 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:183 #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:164 #: ../../docs/development/cpp/object_class.rst:211 msgid "Signals" msgstr "سیگنال‌ها" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1259 msgid "" "It is often desired to send a notification that something happened in an " "instance. GDScript supports creation of built-in Godot signals. Declaring a " "signal in GDScript is easy using the `signal` keyword." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1270 msgid "" "These signals can be connected in the editor or from code like regular " "signals. Take the instance of a class where the signal was declared and " "connect it to the method of another instance:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1286 msgid "" "It is also possible to bind arguments to a signal that lacks them with your " "custom values:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1294 msgid "" "This is useful when a signal from many objects is connected to a single " "callback and the sender must be identified:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1306 msgid "" "Finally, emitting a custom signal is done by using the Object.emit_signal " "method:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1317 msgid "Coroutines with yield" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1319 msgid "" "GDScript offers support for `coroutines `_ via the ``yield`` built-in function. Calling ``yield()`` will " "immediately return from the current function, with the current frozen state " "of the same function as the return value. Calling ``resume`` on this " "resulting object will continue execution and return whatever the function " "returns. Once resumed the state object becomes invalid. Here is an example:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1341 #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1365 msgid "Will print:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1349 msgid "" "It is also possible to pass values between yield() and resume(), for example:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1374 msgid "Coroutines & signals" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1376 msgid "" "The real strength of using ``yield`` is when combined with signals. " "``yield`` can accept two parameters, an object and a signal. When the signal " "is received, execution will recommence. Here are some examples:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1391 msgid "" "Coroutines themselves use the ``completed`` signal when they transition into " "an invalid state, for example:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1404 msgid "" "``my_func`` will only continue execution once both the buttons are pressed." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1407 msgid "Onready keyword" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1409 msgid "" "When using nodes, it's common to desire to keep references to parts of the " "scene in a variable. As scenes are only warranted to be configured when " "entering the active scene tree, the sub-nodes can only be obtained when a " "call to Node._ready() is made." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1421 msgid "" "This can get a little cumbersome, especially when nodes and external " "references pile up. For this, GDScript has the ``onready`` keyword, that " "defers initialization of a member variable until _ready is called. It can " "replace the above code with a single line:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1431 msgid "Assert keyword" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_basics.rst:1433 msgid "" "The ``assert`` keyword can be used to check conditions in debug builds. " "These assertions are ignored in non-debug builds." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:4 msgid "GDScript: An introduction to dynamic languages" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:9 msgid "" "This tutorial aims to be a quick reference for how to use GDScript more " "efficiently. It focuses on common cases specific to the language, but also " "covers a lot of information on dynamically typed languages." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:13 msgid "" "It's meant to be especially useful for programmers with little or no " "previous experience with dynamically typed languages." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:17 msgid "Dynamic nature" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:20 msgid "Pros & cons of dynamic typing" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:22 msgid "" "GDScript is a Dynamically Typed language. As such, its main advantages are " "that:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:25 msgid "The language is simple and easy to learn." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:26 msgid "Most code can be written and changed quickly and without hassle." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:27 msgid "Less code written means less errors & mistakes to fix." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:28 msgid "Easier to read the code (less clutter)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:29 msgid "No compilation is required to test." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:30 msgid "Runtime is tiny." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:31 msgid "Duck-typing and polymorphism by nature." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:33 msgid "While the main disadvantages are:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:35 msgid "Less performance than statically typed languages." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:36 msgid "More difficult to refactor (symbols can't be traced)" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:37 msgid "" "Some errors that would typically be detected at compile time in statically " "typed languages only appear while running the code (because expression " "parsing is more strict)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:40 msgid "" "Less flexibility for code-completion (some variable types are only known at " "run-time)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:43 msgid "" "This, translated to reality, means that Godot+GDScript are a combination " "designed to create games quickly and efficiently. For games that are very " "computationally intensive and can't benefit from the engine built-in tools " "(such as the Vector types, Physics Engine, Math library, etc), the " "possibility of using C++ is present too. This allows to still create the " "entire game in GDScript and add small bits of C++ in the areas that need a " "performance boost." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:52 msgid "Variables & assignment" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:54 msgid "" "All variables in a dynamically typed language are \"variant\"-like. This " "means that their type is not fixed, and is only modified through assignment. " "Example:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:58 #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:80 msgid "Static:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:66 #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:94 msgid "Dynamic:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:75 msgid "As function arguments:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:77 msgid "" "Functions are of dynamic nature too, which means they can be called with " "different arguments, for example:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:107 msgid "Pointers & referencing:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:109 msgid "" "In static languages such as C or C++ (and to some extent Java and C#), there " "is a distinction between a variable and a pointer/reference to a variable. " "The latter allows the object to be modified by other functions by passing a " "reference to the original one." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:114 msgid "" "In C# or Java, everything not a built-in type (int, float, sometimes String) " "is always a pointer or a reference. References are also garbage-collected " "automatically, which means they are erased when no longer used. Dynamically " "typed languages tend to use this memory model too. Some Examples:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:120 msgid "C++:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:136 msgid "Java:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:154 msgid "GDScript:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:166 msgid "" "In GDScript, only base types (int, float, string and the vector types) are " "passed by value to functions (value is copied). Everything else (instances, " "arrays, dictionaries, etc) is passed as reference. Classes that inherit :ref:" "`class_Reference` (the default if nothing is specified) will be freed when " "not used, but manual memory management is allowed too if inheriting manually " "from :ref:`class_Object`." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:174 msgid "Arrays" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:176 msgid "" "Arrays in dynamically typed languages can contain many different mixed " "datatypes inside and are always dynamic (can be resized at any time). " "Compare for example arrays in statically typed languages:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:203 msgid "And in GDScript:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:212 msgid "" "In dynamically typed languages, arrays can also double as other datatypes, " "such as lists:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:222 msgid "Or unordered sets:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:231 msgid "Dictionaries" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:233 msgid "" "Dictionaries are a powerful tool in dynamically typed languages. Most " "programmers that come from statically typed languages (such as C++ or C#) " "ignore their existence and make their life unnecessarily more difficult. " "This datatype is generally not present in such languages (or only on limited " "form)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:239 msgid "" "Dictionaries can map any value to any other value with complete disregard " "for the datatype used as either key or value. Contrary to popular belief, " "they are efficient because they can be implemented with hash tables. They " "are, in fact, so efficient that some languages will go as far as " "implementing arrays as dictionaries." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:245 msgid "Example of Dictionary:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:252 msgid "" "Dictionaries are also dynamic, keys can be added or removed at any point at " "little cost:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:261 msgid "" "In most cases, two-dimensional arrays can often be implemented more easily " "with dictionaries. Here's a simple battleship game example:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:294 msgid "" "Dictionaries can also be used as data markup or quick structures. While " "GDScript dictionaries resemble python dictionaries, it also supports Lua " "style syntax and indexing, which makes it useful for writing initial states " "and quick structs:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:317 msgid "For & while" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:319 msgid "Iterating in some statically typed languages can be quite complex:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:340 msgid "This is usually greatly simplified in dynamically typed languages:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:347 msgid "" "Container datatypes (arrays and dictionaries) are iterable. Dictionaries " "allow iterating the keys:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:355 msgid "Iterating with indices is also possible:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:362 msgid "The range() function can take 3 arguments:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:370 msgid "Some examples:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:380 msgid "Translate to:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:393 msgid "And backwards looping is done through a negative counter:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:399 msgid "Becomes:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:407 #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:384 #, fuzzy msgid "While" msgstr "تا زمانی که" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:409 msgid "while() loops are the same everywhere:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:420 msgid "Custom iterators" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:421 msgid "" "You can create custom iterators in case the default ones don't quite meet " "your needs by overriding the Variant class's ``_iter_init``, ``_iter_next``, " "and ``_iter_get`` functions in your script. An example implementation of a " "forward iterator follows:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:453 msgid "And it can be used like any other iterator:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:461 msgid "" "Make sure to reset the state of the iterator in ``_iter_init``, otherwise " "nested for-loops that use custom iterators will not work as expected." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:465 msgid "Duck typing" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:467 msgid "" "One of the most difficult concepts to grasp when moving from a statically " "typed language to a dynamic one is duck typing. Duck typing makes overall " "code design much simpler and straightforward to write, but it's not obvious " "how it works." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:472 msgid "" "As an example, imagine a situation where a big rock is falling down a " "tunnel, smashing everything on its way. The code for the rock, in a " "statically typed language would be something like:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:483 msgid "" "This way, everything that can be smashed by a rock would have to inherit " "Smashable. If a character, enemy, piece of furniture, small rock were all " "smashable, they would need to inherit from the class Smashable, possibly " "requiring multiple inheritance. If multiple inheritance was undesired, then " "they would have to inherit a common class like Entity. Yet, it would not be " "very elegant to add a virtual method ``smash()`` to Entity only if a few of " "them can be smashed." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:491 msgid "" "With dynamically typed languages, this is not a problem. Duck typing makes " "sure you only have to define a ``smash()`` function where required and " "that's it. No need to consider inheritance, base classes, etc." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:500 msgid "" "And that's it. If the object that hit the big rock has a smash() method, it " "will be called. No need for inheritance or polymorphism. Dynamically typed " "languages only care about the instance having the desired method or member, " "not what it inherits or the class type. The definition of Duck Typing should " "make this clearer:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:506 msgid "" "*\"When I see a bird that walks like a duck and swims like a duck and quacks " "like a duck, I call that bird a duck\"*" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:509 msgid "In this case, it translates to:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:511 msgid "" "*\"If the object can be smashed, don't care what it is, just smash it.\"*" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:513 msgid "Yes, we should call it Hulk typing instead." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:515 msgid "" "It's possible that the object being hit doesn't have a smash() function. " "Some dynamically typed languages simply ignore a method call when it doesn't " "exist (like Objective C), but GDScript is more strict, so checking if the " "function exists is desirable:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_advanced.rst:526 msgid "" "Then, simply define that method and anything the rock touches can be smashed." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:4 msgid "GDScript Style Guide" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:9 msgid "" "This styleguide lists conventions to write elegant GDScript. The goal is to " "encourage writing clean, readable code and promote consistency across " "projects, discussions, and tutorials. Hopefully, this will also encourage " "development of auto-formatting tools." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:14 msgid "" "Since GDScript is close to Python, this guide is inspired by Python's `PEP 8 " "`__ programming styleguide." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:18 msgid "" "Godot's built-in script editor uses a lot of these conventions by default. " "Let it help you." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:22 msgid "Code Structure" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:25 msgid "Indentation" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:27 msgid "Indent type: Tabs *(editor default)*" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:29 msgid "Indent size: 4 *(editor default)*" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:31 msgid "Each indent level should be one greater than the block containing it." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:33 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:53 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:83 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:107 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:127 msgid "**Good**:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:40 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:61 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:93 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:114 #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:137 msgid "**Bad**:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:50 msgid "" "Use 2 indent levels to distinguish continuation lines from regular code " "blocks." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:70 msgid "Blank lines" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:72 msgid "Surround functions and class definitions by a blank line." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:74 msgid "Use one blank line inside functions to separate logical sections." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:77 msgid "One Statement per Line" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:79 msgid "" "Never combine multiple statements on a single line. No, C programmers, not " "with a single line conditional statement (except with the ternary operator)!" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:102 msgid "Avoid Unnecessary Parentheses" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:104 msgid "" "Avoid parentheses in expressions and conditional statements. Unless " "necessary for order of operations, they only reduce readability." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:122 msgid "Whitespace" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:124 msgid "" "Always use one space around operators and after commas. Avoid extra spaces " "in dictionary references and function calls, or to create \"columns.\"" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:147 msgid "**NEVER**:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:156 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:193 msgid "Naming Conventions" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:158 msgid "" "These naming conventions follow the Godot Engine style. Breaking these will " "make your code clash with the built-in naming conventions, which is ugly." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:163 msgid "Classes and Nodes" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:165 msgid "Use PascalCase: ``extends KinematicBody``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:167 msgid "Also when loading a class into a constant or variable:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:174 msgid "Functions and Variables" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:176 msgid "Use snake\\_case: ``get_node()``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:178 msgid "" "Prepend a single underscore (\\_) to virtual methods (functions the user " "must override), private functions, and private variables: ``func _ready()``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:185 msgid "Use past tense:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_styleguide.rst:195 msgid "" "Use CONSTANT\\_CASE, all caps, with an underscore (\\_) to separate words: " "``const MAX_SPEED = 200``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:4 msgid "GDScript format strings" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:6 msgid "" "GDScript offers a feature called *format strings* which allows reusing text " "templates to succinctly create different but similar strings." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:9 msgid "" "Format strings are just like normal strings, except they contain certain " "placeholder character-sequences. These placeholders can then easily be " "replaced by parameters handed to the format string." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:13 msgid "" "As an example, with ``%s`` as a placeholder, the format string ``\"Hello %s, " "how are you?`` can easily be changed to ``\"Hello World, how are you?\"``. " "Notice the placeholder is in the middle of the string; modifying it without " "format strings could be cumbersome." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:20 msgid "Usage in GDScript" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:22 msgid "Examine this concrete GDScript example:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:35 msgid "" "Placeholders always start with a ``%``, but the next character or " "characters, the *format specifier*, determines how the given value is " "converted to a string." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:39 msgid "" "The ``%s`` seen in the example above is the simplest placeholder and works " "for most use cases: it converts the value by the same method by which an " "implicit String conversion or ``str()`` would convert it. Strings remain " "unchanged, Booleans turn into either ``\"True\"`` or ``\"False\"``, an " "integral or real number becomes a decimal, other types usually return their " "data in a human-readable string." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:46 msgid "" "There is also another way to format text in GDScript, namely the ``String." "format()`` method. It replaces all occurrences of a key in the string with " "the corresponding value. The method can handle arrays or dictionaries for " "the key/value pairs." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:50 msgid "" "Arrays can be used as key, index, or mixed style (see below examples). Order " "only matters when the index or mixed style of Array is used." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:53 msgid "A quick example in GDScript:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:66 msgid "" "There are other `format specifiers`_, but they are only applicable when " "using the ``%`` operator." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:71 msgid "Multiple placeholders" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:73 msgid "" "Format strings may contain multiple placeholders. In such a case, the values " "are handed in the form of an array, one value per placeholder (unless using " "a format specifier with ``*``, see `dynamic padding`_):" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:85 msgid "" "Note the values are inserted in order. Remember all placeholders must be " "replaced at once, so there must be an appropriate number of values." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:90 msgid "Format specifiers" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:92 msgid "" "There are format specifiers other than ``s`` that can be used in " "placeholders. They consist of one or more characters. Some of them work by " "themselves like ``s``, some appear before other characters, some only work " "with certain values or characters." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:99 msgid "Placeholder types" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:101 msgid "" "One and only one of these must always appear as the last character in a " "format specifier. Apart from ``s``, these require certain types of " "parameters." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:105 msgid "``s``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:105 msgid "" "**Simple** conversion to String by the same method as implicit String " "conversion." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:108 msgid "``c``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:108 msgid "" "A single **Unicode character**. Expects an unsigned 8-bit integer (0-255) " "for a code point or a single-character string." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:111 msgid "``d``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:111 msgid "" "A **decimal integral** number. Expects an integral or real number (will be " "floored)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:114 msgid "``o``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:114 msgid "" "An **octal integral** number. Expects an integral or real number (will be " "floored)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:117 msgid "``x``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:117 msgid "" "A **hexadecimal integral** number with **lower-case** letters. Expects an " "integral or real number (will be floored)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:120 msgid "``X``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:120 msgid "" "A **hexadecimal integral** number with **upper-case** letters. Expects an " "integral or real number (will be floored)." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:123 msgid "``f``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:123 msgid "A **decimal real** number. Expects an integral or real number." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:128 msgid "Placeholder modifiers" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:130 msgid "" "These characters appear before the above. Some of them work only under " "certain conditions." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:134 msgid "``+``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:134 msgid "In number specifiers, **show + sign** if positive." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:136 #: ../../docs/tutorials/misc/binary_serialization_api.rst:94 #: ../../docs/tutorials/misc/binary_serialization_api.rst:103 #: ../../docs/tutorials/misc/binary_serialization_api.rst:121 #: ../../docs/tutorials/misc/binary_serialization_api.rst:312 #: ../../docs/tutorials/misc/binary_serialization_api.rst:332 #: ../../docs/tutorials/misc/binary_serialization_api.rst:334 #: ../../docs/tutorials/misc/binary_serialization_api.rst:342 #: ../../docs/tutorials/misc/binary_serialization_api.rst:361 #: ../../docs/tutorials/misc/binary_serialization_api.rst:373 #: ../../docs/tutorials/misc/binary_serialization_api.rst:385 #: ../../docs/tutorials/misc/binary_serialization_api.rst:398 #: ../../docs/tutorials/misc/binary_serialization_api.rst:400 #: ../../docs/tutorials/misc/binary_serialization_api.rst:409 #: ../../docs/tutorials/misc/binary_serialization_api.rst:411 #: ../../docs/tutorials/misc/binary_serialization_api.rst:420 #: ../../docs/tutorials/misc/binary_serialization_api.rst:428 #: ../../docs/tutorials/misc/binary_serialization_api.rst:441 #: ../../docs/tutorials/misc/binary_serialization_api.rst:454 #: ../../docs/tutorials/misc/binary_serialization_api.rst:469 msgid "Integer" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:136 msgid "" "Set **padding**. Padded with spaces or with zeroes if integer starts with " "``0`` in an integer placeholder. When used after ``.``, see ``.``." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:140 msgid "``.``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:140 msgid "" "Before ``f``, set **precision** to 0 decimal places. Can be followed up with " "numbers to change. Padded with zeroes." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:143 msgid "``-``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:143 msgid "**Pad to the right** rather than the left." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:145 msgid "``*``" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:145 msgid "" "**Dynamic padding**, expect additional integral parameter to set padding or " "precision after ``.``, see `dynamic padding`_." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:151 msgid "Padding" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:153 msgid "" "The ``.`` (*dot*), ``*`` (*asterisk*), ``-`` (*minus sign*) and digit (``0``-" "``9``) characters are used for padding. This allows printing several values " "aligned vertically as if in a column, provided a fixed-width font is used." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:158 msgid "To pad a string to a minimum length, add an integer to the specifier:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:166 msgid "" "If the integer starts with ``0``, integral values are padded with zeroes " "instead of white space:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:174 msgid "" "Precision can be specified for real numbers by adding a ``.`` (*dot*) with " "an integer following it. With no integer after ``.``, a precision of 0 is " "used, rounding to integral value. The integer to use for padding must appear " "before the dot." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:186 msgid "" "The ``-`` character will cause padding to the right rather than the left, " "useful for right text alignment:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:197 msgid "Dynamic padding" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:199 msgid "" "By using the ``*`` (*asterisk*) character, the padding or precision can be " "set without modifying the format string. It is used in place of an integer " "in the format specifier. The values for padding and precision are then " "passed when formatting:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:212 msgid "" "It is still possible to pad with zeroes in integer placeholders by adding " "``0`` before ``*``:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:222 msgid "Escape sequence" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:224 msgid "" "To insert a literal ``%`` character into a format string, it must be escaped " "to avoid reading it as a placeholder. This is done by doubling the character:" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:235 msgid "Format method examples" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:237 msgid "" "The following are some examples of how to use the various invocations of the " "``String.format`` method." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:242 msgid "**Style**" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:242 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:262 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:275 msgid "**Example**" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:242 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:262 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:275 msgid "**Result**" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:244 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:246 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:248 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:195 msgid "Dictionary" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:244 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:250 msgid "key" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:244 msgid "" "\"Hi, {name} v{version}!\".format({\"name\":\"Godette\", \"version\":" "\"3.0\"})" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:244 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:246 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:248 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:250 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:252 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:254 msgid "Hi, Godette v3.0!" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:246 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:252 msgid "index" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:246 msgid "\"Hi, {0} v{1}!\".format({\"0\":\"Godette\", \"1\":\"3.0\"})" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:248 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:254 msgid "mix" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:248 msgid "" "\"Hi, {0} v{version}!\".format({\"0\":\"Godette\", \"version\":\"3.0\"})" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:250 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:252 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:254 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:174 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:182 msgid "Array" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:250 msgid "" "\"Hi, {name} v{version}!\".format([[\"version\":\"3.0\"], [\"name\":\"Godette" "\"]])" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:252 msgid "\"Hi, {0} v{1}!\".format([\"Godette\",\"3.0\"])" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:254 msgid "\"Hi, {name} v{0}!\".format([3.0, [\"name\":\"Godette\"]])" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:257 msgid "" "Placeholders can also be customized when using ``String.format``, here's " "some examples of that functionality." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:264 msgid "Infix (default)" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:264 msgid "\"Hi, {0} v{1}\".format([\"Godette\", \"3.0\"], \"{_}\")" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:264 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:266 #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:268 msgid "Hi, Godette v3.0" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:266 msgid "Postfix" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:266 msgid "\"Hi, 0% v1%\".format([\"Godette\", \"3.0\"], \"_%\")" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:268 msgid "Prefix" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:268 msgid "\"Hi, %0 v%1\".format([\"Godette\", \"3.0\"], \"%_\")" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:271 msgid "" "Combining both the ``String.format`` method and the ``%`` operator could be " "useful as ``String.format`` does not have a way to manipulate the " "representation of numbers." msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:277 msgid "" "\"Hi, {0} v{version}\".format({0:\"Godette\", \"version\":\"%0.2f\" % 3.114})" msgstr "" #: ../../docs/getting_started/scripting/gdscript/gdscript_format_string.rst:277 msgid "Hi, Godette v3.11" msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:4 msgid "What is Visual Scripting" msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:6 msgid "" "Visual Scripting is a tool designed to make the entry barrier to programming " "much lower. As code is more visual, it needs less abstract thinking to be " "understood. Any artist, animator, game designer, etc. can look at it and " "quickly grasp the flow of logic." msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:11 msgid "" "The reason it does not make existing programming obsolete is, simply, that " "it does not scale as well. It takes considerably more time to create code " "with it, and it's often more difficult to modify than just writing a few " "characters." msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:15 msgid "" "With the misunderstanding cleared up, the question that remains is what are " "the practical uses for Visual Scripting." msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:18 msgid "The most common use cases are as follows:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:20 msgid "" "Game development beginners who want to learn an engine but have no " "programming experience yet." msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:21 msgid "" "Artists and Game Designers who have no experience in programming and want to " "create quick prototypes or simple games." msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:22 msgid "" "Programmers working in a team that want to make part of the game logic " "available to Artists or Game Designers in order to offload some of their " "work." msgstr "" #: ../../docs/getting_started/scripting/visual_script/what_is_visual_scripting.rst:24 msgid "" "These scenarios are far more common than one might think, so this is why " "Godot has added this feature." msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:4 msgid "Getting started with Visual Scripting" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:6 msgid "" "As with everything in Godot, we prioritize a good experience over copying or " "integrating third party solutions which might not fit nicely in the current " "workflow. This led us to write our own version of how we believe this " "feature would work best with the engine." msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:10 msgid "" "In Godot, a Visual Script fits smoothly together with regular scripts in the " "Editor tab" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:15 msgid "" "In fact, Visual Scripting integrates so well to Godot that it's hard to " "believe it was added only in version 3.0. This is because, when editing, the " "rest of Godot panels and docks act like a palette from where you can drag " "and drop all sorts of information to the script canvas:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:23 msgid "Creating a Script" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:25 msgid "" "Creating scripts works the same as with other scripting languages: Select " "any node in the scene and push the \"New Script\" button at the top right " "corner of the Scene Tree dock:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:31 msgid "" "Once it opens, the script type \"Visual Script\" must be selected from the " "drop down list. The script extension must be \".vs\" (for Visual Script!)." msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:37 msgid "" "Finally, the Script Editor will open, allowing to start the editing of the " "visual script:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:43 msgid "Adding a Function" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:45 msgid "" "Unlike other visual scripting implementations, Visual Scripting in Godot is " "heavily based on functions. This happens because it uses the same interface " "to communicate with the engine as other scripting engines. In Godot, the " "scripting interface is universal and all implementations conform to it." msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:49 msgid "A function is an individual canvas with nodes connected." msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:51 msgid "" "A single script can contain many functions, each of which will have a canvas " "of its own, allowing for more organization." msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:53 msgid "There are three main ways to add functions in a script:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:56 msgid "Overriding a Virtual Function" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:58 msgid "" "Most types of nodes and other types of objects in Godot contain virtual " "functions. These are functions that will be called (run your code) when " "something happens and can be looked up in the reference. Virtual functions " "are listed when pressing the \"Override\" icon in the member panel:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:65 msgid "" "In the following example, a function will be executed when the node is " "loaded and added to the running scene. For this, the _ready() virtual method " "will be overridden:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:71 msgid "Finally, a canvas appears for this function, showing the override:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:76 msgid "" "As some functions expect you to return a value, they will also add a return " "node where such value is supposed to be provided:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:83 msgid "Connecting a Signal to a Function" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:85 msgid "" "Nodes in a tree emit signals when something happens. Godot uses signals for " "all sorts of things. A typical example would be a button that emits a " "\"pressed\" signal when actually pressed." msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:88 msgid "" "For this, a node must be selected and the Node tab opened. This will allow " "inspecting the signals. Once they are displayed, connect the \"pressed\" " "signal:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:94 msgid "" "This will open the connection dialog. In this dialog, you must select the " "node where the signal will be connected to, and the function that will " "receive the signal:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:100 msgid "" "If this is done right, a new function will be created in our script and a " "signal will automatically be connected to it:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:107 msgid "Creating a Function Manually" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:109 msgid "" "The last way to create functions is to do it manually. In general this is " "not as common unless you really need it. Custom functions work when another " "(or the same) script calls them manually. The main use case for this is to " "separate a function into more, or reusing your visual code." msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:113 msgid "" "To create a function manually, push the big \"Plus\" button, and a new " "function will be added with a default name:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:119 msgid "" "This will add a new function, which can be renamed by simply double clicking " "its name:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:125 msgid "" "To edit the \"arguments\" this function can get (the values you pass to it " "when you call this function), simply click the Function node and check the " "inspector:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/getting_started.rst:131 msgid "More on that will be explained later in this document." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:4 msgid "Nodes and Terminology" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:6 msgid "" "Before continuing, it must be noted that the *Node* terminology needs to be " "used with care. When referring to *Visual Script Nodes* (or generally " "*Nodes*) this text will refer to the little boxes you connect with lines, " "which are part of a graph. When referring to *Scene Nodes*, it is implied " "that the elements that make up a Scene are being referred, which are part of " "a tree. Their naming is similar but their function is different. When " "referring to *Node* here, it will be implied that a *Visual Script Node* is " "referred to unless indicated otherwise." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:15 msgid "Node Properties" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:17 msgid "" "Like in most visual scripting implementations, each node has editable " "properties. In Godot, though, we try to avoid bloating the nodes with " "editable controls for the sake of readability." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:20 msgid "" "Nodes still display the required information as text, but editing is done " "via the *Inspector*. To edit them, select any node and edit its properties " "in the *Inspector*." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:25 msgid "Ports and Connections" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:27 msgid "" "Programming in Godot Visual Scripting is done via *Nodes* and *Port " "Connections* inside each function." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:31 msgid "Ports" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:33 msgid "" "Nodes in Godot Visual Scripting have *Ports*. These are endpoints that " "appear to the left and right of nodes and which can be used to make " "*Connections*: There are two types of *Ports*: *Sequence* and *Data*." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:40 msgid "" "*Sequence Ports* indicate the order in which operations are executed. " "Typically when a *Node* is done processing, it will go to the next node from " "one of the ports at the right. If nothing is connected the function may end, " "or another output *Sequence Port* might be tried (this depends on the node). " "Thanks to this, you can follow the logic flow within a function by following " "the white lines. Not every *Node* has *Sequence Ports*. In fact, most do not." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:46 msgid "" "*Data Ports* ports contain typed values. Types can be any regular Godot " "types, such as a boolean, an integer, a string, a Vector3, an array, any " "Object or Scene Node, etc. A *Data Port* on the right side of a node is " "considered an output, while, a port on the left side is an input. Connecting " "them allows information to flow to the next node." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:51 msgid "" "Not all *Data Port* types are compatible and will allow connections, though. " "Pay special attention to colors and icons, as each type has a different " "representation:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:58 #: ../../docs/development/file_formats/tscn.rst:28 msgid "Connections" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:60 msgid "" "Connecting is a relatively simple process. Drag an *Output Port* towards an " "*Input Port*." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:65 msgid "" "Disconnecting takes a bit more practice. Disconnecting in *Data Ports* " "happens by dragging the *Input* away, while for *Sequence Ports*, this " "happens by dragging the *Output* away." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:71 msgid "" "This may seem strange at the beginning, but it happens because *Data Ports* " "are 1:N (A single output port can connect to many inputs), while *Sequence " "Ports* are N:1 (Many sequence outputs can be connected to a single input)." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:75 msgid "" "Connecting to empty space (drag to connect but unpress over empty space) is " "also context sensitive, it will supply a list of most common operations. For " "sequences, it will be conditional nodes:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:81 msgid "While, for data, a contextual set/get/call menu will open:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:87 msgid "Adding Nodes" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:89 msgid "" "Finally! We got to the fun part! But, before explaining in more detail what " "each type of node does, let's take a short look at how nodes are most " "commonly added and dealt with." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:94 msgid "Accessing Scene Nodes" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:96 msgid "" "One of the most common tasks is accessing Scene Tree Nodes (again, not to " "mistake with *Visual Script Nodes*). Dragging from the Scene Tree and " "dropping into the canvas will ask you to *call a method* (sometimes referred " "to as *member function*) on this node." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:102 msgid "" "While accessing properties is desired in most cases (more on that below), " "sometimes *calling methods* can be useful too. Methods execute specific " "actions on objects. In the above case, the mouse pointer can be warped to a " "position in local coordinates to the control. Another common use case is " "queueing a node for deletion, which is done with the *queue_free* method." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:109 msgid "" "Care must be taken that this only works if the scene being edited contains " "your *Visual Script* in one of the nodes! Otherwise, a warning will be shown." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:113 msgid "Accessing Scene Node Properties" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:115 msgid "" "This is the most common way to edit *Scene Nodes* in Visual Scripting. " "Select a *Scene Node* from the *Scene Tree*, go to the Inspector, find *the " "Name* of the property you want to edit (hint, *not* the value!) and drag it " "to the canvas:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:120 msgid "" "The result is that this value can be changed from your script by writing to " "a *Data Port*." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:122 msgid "" "If instead reading this value is desired, drag the node again but hold the " "*Control* key (or Command on Mac). This will create a getter:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:127 msgid "In this case, the value can be read from a *Data Port*." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:133 msgid "" "Variables are memory containers local to the script which can hold a value. " "This value can be read from any of the functions of the script or from other " "scripts via the method described in the previous step." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:135 msgid "" "To add a Variable, push the \"+\" button on the *Variables* section of the " "Members panel. Double-click the new variable to rename it:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:140 msgid "Right-clicking the variable allows you to configure its properties:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:147 msgid "" "As it can be seen above, the type and initial value of the variable can be " "changed, as well as some property hints. Ticking the \"Export\" options " "makes the variable visible in the Inspector when selecting the node. This " "also makes it available to other scripts via the method described in the " "previous step." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:153 msgid "" "To use the variable in the script, simply drag it to the canvas to create a " "getter:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:158 msgid "Likewise, hold *Control* (*Command* on Mac) to drop a setter:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:166 msgid "" "It is also possible to create your own signals in a script and use them. For " "this, do the same steps you did for variables in the previous step, except " "for *Signals*:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:171 msgid "" "A signal can also be edited via right-click menu to customize its arguments:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:176 msgid "" "The signal you have created will appear in the Inspector along with the " "built-in node signals. This allows you to connect it from another script " "from another *Scene Node*:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:181 msgid "Finally, to emit the signal, simply drag it to the canvas:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:186 msgid "" "Remember that emitting a signal is a sequenced operation, so it must come " "from a Sequence port." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:190 msgid "Adding More Nodes" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:192 msgid "" "Now that the basics are covered, let's discuss the large amount of utility " "nodes available for your canvas! Below the member panel, exists the list of " "all available node types:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:198 msgid "Ctrl-F (Command-F on Mac) allows you to search the list." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:200 msgid "" "Any of them can be dragged to the scene. Unlike nodes (e.g. dragging a " "property from the Inspector sets the context to the node being edited " "automatically), these are added without any \"contextual\" information, so " "this has to be done manually." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:206 msgid "" "Remember that you can check the class reference for what each node does, as " "they are documented there. That mentioned, a brief overview of node types " "follows:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:213 msgid "" "Constant nodes are nodes that provide values that, while not changing over " "time, can be useful as reference values. Most of the time they are integer " "or float." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:219 msgid "" "The first one is \"Constant\" which allows you to select any value of any " "type as constant, from an integer (42) to a String (\"Hello!\"). In general " "this node is not used that often because of default input values in *Data " "Ports*, but it's good to know it exists." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:221 msgid "" "The second is the GlobalConstant node, which contains a long list of " "constants for global types in Godot. In there you can find some useful " "constants to refer to key names, joystick or mouse buttons, etc." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:224 msgid "" "The third one is MathConstant, which provides typical mathematical constants " "such as PI, E, etc." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:230 msgid "" "Data nodes deal with all sorts of access to information. Any information in " "Godot is accessed via these nodes, so they are some of the most important " "ones to use and pretty diverse." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:236 msgid "" "There are many types of nodes of interest here, so a short attempt to " "describe them will follow:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:240 msgid "Action" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:242 msgid "" "Action nodes are vital when dealing with input from a device. You can read " "more about actions in the (@TODO ACTION TUTE LINK). In the following example " "below, the control is moved to the right when the \"move_right\" action is " "pressed." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:249 msgid "Engine Singleton" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:251 msgid "" "Engine singletons are global interfaces (meaning they can be accessed " "without a reference, unlike Scene Nodes, they are always available). They " "have several purposes, but in general they are useful for low level access " "or OS-related access." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:257 msgid "" "Remember that dragging a connection to empty space will help you call " "functions or set/get properties on these:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:263 msgid "Local Variables" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:265 msgid "" "These are nodes you can use as temporary storage for your graphs. Make sure " "they all have the same name and type when using them and they will reference " "the same piece of memory." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:270 msgid "" "As it can be seen above, there are two nodes available: A simple getter, and " "a sequenced getter (setting requires a sequence port)." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:274 msgid "Scene Node" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:276 msgid "" "This is just a reference to a node in the tree, but it's easier to use this " "node by dragging the actual node from the scene tree to the canvas (this " "will create it and configure it)." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:281 msgid "Self" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:283 msgid "" "In some rare occasions, it may be desired to pass this Scene Node as " "argument. It can be used to call functions and set/get properties, or drag " "nodes (or event the node itself that has the script) from the Scene Tree to " "the canvas for this." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:290 msgid "" "This node is similar to the Singleton node because it references the " "SceneTree, which contains the active scene. SceneTree, however, only works " "when the node is sitting in the scene and active, otherwise accessing it " "will return as an error." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:294 msgid "" "SceneTree allows for many low level things, like setting stretch options, " "calling groups, make timers, or even load another scene. It's a good class " "to get familiar with." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:299 msgid "Preload" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:301 msgid "" "This does the same function as preload() in GDScript. It maintains this " "resource loaded and ready to use. Rather than instancing the node, it's " "simpler to drag the desired resource from the filesystem dock to the canvas." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:306 msgid "Resource Path" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:308 msgid "" "This node is a simple helper to get a string with a path to a resource you " "can pick. It's useful in functions that load things from disk." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:313 msgid "Comment" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:315 msgid "" "A Comment node works as a node you can resize to put around other nodes. It " "will not try to get focus or be brought to top when selecting it. It can " "also be used to write text on it." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:322 #: ../../docs/tutorials/shading/shading_language.rst:222 msgid "Flow Control" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:324 msgid "" "Flow control nodes allow the execution to take different branches, usually " "depending on a given condition." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:331 msgid "Condition" msgstr "شرط" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:333 msgid "" "This is a simple node that checks a bool port. If true, it will go via the " "\"true\" sequence port. If false, the second. After going for either of " "them, it goes via the \"done\" port. Leaving sequence ports disconnected is " "fine if not all of them are used." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:339 msgid "Iterator" msgstr "تکرارکننده" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:341 msgid "" "Some data types in Godot (ie, arrays, dictionaries) are iterable. This means " "that a bit of code can run for each element that it has." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:344 msgid "" "The Iterator node goes through all elements and, for each of them, it goes " "via the \"each\" sequence port, making the element available in the \"elem\" " "data port." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:347 msgid "When done, it goes via the \"exit\" sequence port." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:351 msgid "Return" msgstr "بازگشت" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:353 msgid "" "Some functions can return values. In general for virtual ones, Godot will " "add the Return node for you. A return node forces the function to end." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:358 msgid "Sequence" msgstr "دنباله" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:360 msgid "" "This node is useful mostly for organizing your graph. It calls its sequence " "ports in order." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:364 msgid "TypeCast" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:366 msgid "" "This is a useful and commonly used node. You can use it to cast arguments or " "other objects to the type you desire. Afterwards, you can even drag the " "object output to get full completion." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:372 msgid "" "It is also possible to cast to a script, which will allow complete script " "properties and functions:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:378 #, fuzzy msgid "Switch" msgstr "سوییچ" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:380 msgid "" "The Switch node is similar to the Condition node, but it matches many values " "at the same time." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:386 msgid "" "This is a more primitive form of iteration. \"repeat\" sequence output will " "be called as long as the condition in the \"cond\" data port is met." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:393 msgid "" "Functions are simple helpers, most of the time deterministic. They take some " "arguments as input and return an output. They are almost never sequenced." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:398 #: ../../docs/tutorials/shading/shading_language.rst:712 #: ../../docs/tutorials/shading/shading_language.rst:792 #: ../../docs/tutorials/shading/shading_language.rst:948 #: ../../docs/tutorials/shading/shading_language.rst:1003 #: ../../docs/tutorials/shading/shading_language.rst:1040 #: ../../docs/tutorials/shading/shading_language.rst:1098 msgid "Built-In" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:400 msgid "" "There is a list of built in helpers. The list is almost identical to the one " "from GDScript (@TODO, link to gdscript methods?). Most of them are " "mathematical functions, but others can be useful helpers. Make sure to take " "a look at the list at some point." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:406 msgid "By Type" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:408 msgid "" "Those are the methods available to basic types. For example, if you want a " "dot-product, you can search for \"dot\" instead of the Vector3 category. In " "most cases just search the list of nodes, it should be faster." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:413 msgid "Call" msgstr "فراخوانی" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:415 msgid "" "This is the generic calling node. It is rarely used directly but by dragging " "to empty space on an already configured node." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:419 msgid "Constructors" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:421 msgid "" "These are all the functions needed to create Godot basic datatypes. For " "example, If you need to create a Vector3 out of 3 floats, a constructor must " "be used." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:427 msgid "Destructor" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:429 msgid "" "This is the opposite to Constructor, it allows to separate any basic type " "(ie, Vector3) into its sub-elements." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:435 msgid "Emit Signal" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:437 msgid "" "Emits signals from any object. In general it's not that useful, as dragging " "a signal to the canvas works better." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:441 msgid "Get/Set" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:443 msgid "" "Generic Getter/Setter node. Dragging properties from the Inspector works " "better, as they appear properly configured on drop." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:447 msgid "Wait" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:449 msgid "" "The Wait nodes will suspend execution of the function until something " "happens (many frames can pass until resuming, in fact). Default nodes allow " "you to wait for a frame to pass, a fixed frame or a given amount of time " "until execution is resumed." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:454 msgid "Yield" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:456 msgid "" "This node completely suspends the execution of the script, and it will make " "the function return a value that can be used to resume execution." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:460 msgid "Yield Signal" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:462 msgid "Same as Yield, but will wait until a given signal is emitted." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:466 msgid "Index" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:468 msgid "" "Generic indexing operator, not often used but it's good that it exists just " "in case." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:474 msgid "" "These are mostly generic operators such as addition, multiplication, " "comparison, etc. By default, these mostly accept any datatype (and will " "error in run-time if the types feeded do not match for the operator). It is " "always recommended to set the right type for operators to catch errors " "faster and make the graph easier to read." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:483 msgid "Expression Node" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:485 msgid "" "Among the operators, the *Expression* node is the most powerful. If well " "used, it allows you to enormously simplify visual scripts that are math or " "logic heavy. Type any expression on it and it will be executed in real-time." msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:488 msgid "Expression nodes can:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:490 msgid "" "Perform math and logic expressions based on custom inputs (eg: \"a*5+b\", " "where a and b are custom inputs):" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:495 msgid "Access local variables or properties:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:500 msgid "" "Use most of the existing built-in functions that are available to GDScript, " "such as sin(),cos(),print(), as well as constructors, such as Vector3(x,y,z)," "Rect2(..), etc.:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:505 msgid "Call API functions:" msgstr "" #: ../../docs/getting_started/scripting/visual_script/nodes_purposes.rst:510 msgid "" "Use sequenced mode, which makes more sense in case of respecting the " "processing order:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/index.rst:2 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:114 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:129 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:142 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:153 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:161 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:180 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:223 msgid "C#" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:6 msgid "" "C# support is a new feature in Godot 3.0. As such, you may still run into " "some issues, or find spots where the documentation could be improved. Please " "report issues with C# in Godot on the `engine Github page `_. And any documentation issues on the " "`documentation Github Page `_." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:11 msgid "" "This page provides a brief intro to C#, both what it is and how to use it in " "Godot. Afterwards, you may want to look at :ref:`how to use specific " "features `, read about the :ref:`differences between " "the C# and the GDScript API ` and (re)visit the :" "ref:`Scripting section ` of the step-by-step tutorial." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:16 msgid "" "C# is a high-level programming language developed by Microsoft. In Godot it " "is implemented with the Mono 5.x .NET framework including full support for " "C# 7.0. Mono is an open source implementation of Microsoft's .NET Framework " "based on the ECMA standards for C# and the Common Language Runtime. A good " "starting point for checking its capabilities is the `Compatibility `_ page in the Mono " "documentation." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:20 msgid "" "This is **not** a full-scale tutorial on the C# language as a whole. If you " "aren't already familiar with its syntax or features, see the `Microsoft C# " "guide `_ or look for a " "suitable introduction elsewhere." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:25 msgid "Setup C# for Godot" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:27 msgid "" "To use C# in Godot you must have `Mono `_ installed. Godot 3.0.2 requires Mono 5.4, 3.0.3 requires Mono 5.12 on " "all platforms. You also need MSBuild (at least version 15.0) which should " "come with the Mono installation." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:30 msgid "" "For instructions on installing older versions of Mono on Linux see `this " "page `_. Older versions of Mono for MacOS and Windows " "can be found `here `_." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:33 msgid "" "Additionally, your Godot version must have Mono support enabled, so take " "care to download the **Mono version** of Godot. If you are building Godot " "from source, make sure to follow the steps to include Mono support in your " "build outlined on the :ref:`doc_compiling_with_mono` page." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:37 msgid "Configuring an external editor" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:39 msgid "" "While Godot does have its own scripting editor, its support for C# is kept " "minimal, and it's recommended that you use an external IDE or editor, such " "as Microsoft Visual Studio Code, or MonoDevelop, which provide auto-" "completion, debugging and other features useful when working with C#. To set " "it up, in Godot click on ``Editor``, then ``Editor Settings``. Scroll down " "to the bottom, to the ``Mono`` settings. Under Mono click on ``Editor``, and " "on that page choose your external editor of choice." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:48 msgid "Creating a C# script" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:50 msgid "" "After you successfully setup C# for Godot, you should see the following " "option when selecting ``Attach script`` in the context menu of a node in " "your scene:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:54 msgid "" "Note that while some specifics change, most of the things work the same when " "using C# for scripting. If you're new to Godot, you may want to peruse the " "tutorials on :ref:`doc_scripting` at this point. While some places in the " "documentation still lack C# examples, most things can be transferred easily " "from GDScript." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:59 msgid "Project setup and workflow" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:61 msgid "" "When you create the first C# script, Godot initializes the C# project files " "for your Godot project. This includes generating a C# solution (``.sln``) " "and project (``.csproj``) as well as some utility files and folders (``." "mono``, sometimes ``Properties``). All of these but ``.mono`` are important " "and should be kept in your version control system. ``.mono`` can be safely " "added to the ignore list of your VCS. When troubleshooting, it sometimes can " "help to delete the ``.mono`` folder and let it regenerate." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:66 msgid "" "Note that currently there are some issues where the Godot and the C# project " "don't stay in sync; if you delete, rename or move things like scripts or " "nodes, they may no longer match up. In this case, it can help to edit the " "solution files manually." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:69 msgid "" "Example: If you created a script (e.g. ``Test.cs``) and delete it in Godot, " "compilation will fail because the now missing file is still expected to be " "there by the CS project. You can for now simply open up the ``.csproj`` and " "look for the ``ItemGroup``, there should be a line included like the " "following:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:80 msgid "" "Simply remove that line and your project should now again build fine. Same " "for renaming and moving things, simply rename and move them in the project " "file if needed." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:83 #: ../../docs/tutorials/io/background_loading.rst:87 #: ../../docs/tutorials/misc/pausing_games.rst:72 msgid "Example" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:85 msgid "" "Here's a blank C# script with some comments to demonstrate how it works." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:112 msgid "" "As you can see, the things normally in global scope in GDScript like Godot's " "``print`` function are available in the ``GD`` namespace. For a list of " "those, see the class reference pages for :ref:`@GDScript ` " "and :ref:`@GlobalScope `." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:116 msgid "" "Keep in mind that the class you wish to attach to your node should be named " "as the ``.cs`` file. If not, you will get the following error and won't be " "able to run the scene: ``Cannot find class XXX for script res://XXX.cs``." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:120 msgid "General differences between C# and GDScript" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:122 msgid "" "The C# API uses ``PascalCase`` instead of ``snake_case`` in GDScript/C++. " "Where possible, fields and getters/setters have been converted to " "properties. In general, the C# Godot API strives to be as idiomatic as is " "reasonably possible." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:126 msgid "For more, see the :ref:`doc_c_sharp_differences` page." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:129 msgid "Current gotchas and known issues" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:131 msgid "" "As C# support is quite new to Godot, there are some growing pains and things " "that still need to be ironed out. Below is a list of the most important " "issues you should be aware of when diving into C# in Godot, but if in doubt " "also take a look over the official `issue tracker for Mono issues `_." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:134 msgid "" "As explained above, the C# project isn't always kept in sync automatically " "when things are deleted, renamed or moved in Godot (`#12917 `_)" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:135 msgid "Writing editor plugins and tool scripts in C# is not yet supported" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:136 msgid "" "Exporting a project may not yet work (`#15615 `_)" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:137 msgid "" "Signals with parameters are broken in 3.0.2-stable (`#17553 `_)" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:140 msgid "Performance of C# in Godot" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:142 msgid "" "According to some preliminary `benchmarks `_, performance of C# in Godot - while generally in the same order " "of magnitude - is roughly **~4x** that of GDScript in some naive cases. For " "full performance, C++ is still a little faster; the specifics are going to " "vary according to your use case. GDScript is likely fast enough for most " "general scripting workloads. C# is faster, but requires some expensive " "marshalling when talking to Godot." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:147 msgid "Using Nuget Packages in Godot" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:149 msgid "" "`Nuget `_ Packages can be installed and used with " "Godot, as with any project. Many IDEs (such as vs code) can add packages " "directly. They can also be added manually by adding the package reference in " "the .csproj file located in the project root:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_basics.rst:164 msgid "" "Whenever packages are added or modified, run nuget restore in the root of " "the project directory, to ensure that the nuget packages will be available " "for msbuild to use, run::" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:4 msgid "Features" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:6 msgid "" "This page provides an overview over the commonly used features of both C# " "and Godot and how they are used together." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:10 msgid "Type Conversion and Casting" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:12 msgid "" "C# is a statically typed language. Therefore you can't do the following:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:19 msgid "" "The method ``GetNode()`` returns a ``Node`` instance. You must explicitly " "convert it to the desired derived type, ``Sprite`` in this case." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:22 msgid "For this, you have various options in C#." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:24 msgid "**Casting and Type Checking**" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:26 msgid "" "Throws ``InvalidCastException`` if the returned node cannot be casted to " "Sprite. You would use it instead of the ``as`` operator if you are pretty " "sure it won't fail." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:34 msgid "**Using the AS operator**" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:36 msgid "" "The ``as`` operator returns null if the node cannot be casted to Sprite, and " "for this reason it cannot be used with value types." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:45 msgid "**Type checking using the IS operator**" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:47 msgid "" "To check if the node can be casted to Sprite, you can use the ``is`` " "operator. The ``is`` operator returns false if the node cannot be casted to " "Sprite, otherwise it returns true." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:58 msgid "" "For more advanced type checking, you can look into `Pattern Matching " "`_." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:63 msgid "C# Signals" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:65 msgid "" "For a complete C# example, see the **Handling a signal** section in the step " "by step :ref:`doc_scripting` tutorial." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:67 msgid "" "Declaring a signal in C# is done with the ``[Signal]`` attribute on a " "delegate." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:77 msgid "" "These signals can then be connected either in the editor or from code with " "``Connect``." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:97 msgid "Emitting signals is done with the ``EmitSignal`` method." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:107 msgid "" "Notice that you can always reference a signal name with the ``nameof`` " "keyword (applied on the delegate itself)." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:109 msgid "" "It is possible to bind values when establishing a connection by passing an " "object array." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:129 msgid "" "Signals support parameters and bound values of all the `built-in types " "`_ and Classes derived from :ref:`Godot.Object " "`. Consequently any ``Node`` or ``Reference`` will be " "compatible automatically but custom data objects will need to extend from " "`Godot.Object` or one of its subclasses." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_features.rst:141 msgid "" "Finally, signals can be created by calling ``AddUserSignal``, but be aware " "that it should be executed before any use of said signals (with ``Connect`` " "or ``EmitSignal``)." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:4 msgid "API differences to GDScript" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:6 msgid "This is a (incomplete) list of API differences between C# and GDScript." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:9 msgid "General Differences" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:11 msgid "" "As explained in the :ref:`doc_c_sharp`, C# generally uses ``PascalCase`` " "instead of the ``snake_case`` in GDScript and C++." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:15 msgid "Global Scope" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:17 msgid "" "Available under ``Godot.GD``. Some things were moved to their own classes, " "like Math and Random. See below." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:20 msgid "" "Global functions like ``print``, ``var2str`` and ``weakref`` are located " "under ``GD`` in C#." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:23 msgid "``ERR_*`` constants were moved to ``Godot.Error``." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:26 #: ../../docs/tutorials/math/index.rst:2 msgid "Math" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:28 msgid "" "Math functions like ``abs``, ``acos``, ``asin``, ``atan`` and ``atan2`` are " "located under ``Mathf`` instead of in global scope. ``PI`` is ``Mathf.PI``" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:33 msgid "Random" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:35 msgid "" "Random functions like ``rand_range`` and ``rand_seed`` are located under " "``Random``, so use ``Random.RandRange`` instead of ``rand_range``." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:39 msgid "Export keyword" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:41 msgid "" "Use the ``[Export]`` attribute instead of the GDScript ``export`` keyword." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:44 msgid "Signal keyword" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:46 msgid "" "Use the ``[Signal]`` attribute instead of the GDScript ``signal`` keyword. " "This attribute should be used on a `delegate`, whose name signature will be " "used to define the signal." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:54 msgid "See also: :ref:`c_sharp_signals`" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:57 msgid "Singletons" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:59 msgid "" "Singletons provide static methods rather than using the singleton pattern in " "C#. This is to make code less verbose and similar to GDScript. Example:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:67 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:244 #: ../../docs/tutorials/plugins/editor/import_plugins.rst:250 #: ../../docs/development/cpp/core_types.rst:175 msgid "String" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:69 msgid "" "Use ``System.String`` (``string``). All the Godot String methods are " "provided by the ``StringExtensions`` class as extension methods. Example:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:77 msgid "There are a few differences though:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:79 msgid "" "``erase``: Strings are immutable in C#, so we cannot modify the string " "passed to the extension method. For this reason ``Erase`` was added as an " "extension method of ``StringBuilder`` instead of string. Alternatively you " "can use ``string.Remove``." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:83 msgid "" "``IsSubsequenceOf``/``IsSubsequenceOfi``: An additional method is provided " "which is an overload of ``IsSubsequenceOf`` allowing to explicitly specify " "case sensitivity:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:94 msgid "" "``Match``/``Matchn``/``ExprMatch``: An additional method is provided besides " "``Match`` and ``Matchn``, which allows to explicitly specify case " "sensitivity:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:105 #: ../../docs/tutorials/math/matrices_and_transforms.rst:126 #: ../../docs/tutorials/math/matrices_and_transforms.rst:614 msgid "Basis" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:107 msgid "" "Structs cannot have parameterless constructors in C#, therefore ``new " "Basis()`` initializes all primitive members to their default value. Use " "``Basis.Identity`` for the equivalent to ``Basis()`` in GDScript and C++." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:111 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:126 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:139 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:158 msgid "" "The following methods were converted to properties with their respective " "names changed:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:116 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:133 msgid "get_scale()" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:116 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:133 #: ../../docs/tutorials/2d/particle_systems_2d.rst:265 #: ../../docs/tutorials/3d/using_multi_mesh_instance.rst:81 #: ../../docs/tutorials/math/matrices_and_transforms.rst:309 msgid "Scale" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:120 #: ../../docs/tutorials/math/matrices_and_transforms.rst:157 msgid "Transform2D" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:122 msgid "" "Structs cannot have parameterless constructors in C#, therefore ``new " "Transform2D()`` initializes all primitive members to their default value. " "Please use ``Transform2D.Identity`` for the equivalent to ``Transform2D()`` " "in GDScript and C++." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:131 msgid "get_origin()" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:131 msgid "Origin" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:132 msgid "get_rotation()" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:132 #: ../../docs/tutorials/math/matrices_and_transforms.rst:223 #: ../../docs/tutorials/animation/cutout_animation.rst:320 msgid "Rotation" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:137 msgid "Plane" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:144 msgid "center()" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:144 msgid "Center" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:148 msgid "Rect2" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:150 msgid "" "The following fields were converted to properties with their respective " "names changed:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:155 msgid "end" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:155 msgid "End" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:163 msgid "get_area()" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:163 msgid "Area" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:167 msgid "Quat" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:169 msgid "" "Structs cannot have parameterless constructors in C#, therefore ``new " "Quat()`` initializes all primitive members to their default value. Please " "use ``Quat.Identity`` for the equivalent to ``Quat()`` in GDScript and C++." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:176 msgid "" "*This is temporary. Array is ref-counted, so it will need its own type that " "wraps the native side. PoolArrays will also need their own type to be used " "the way they are meant to.*" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:182 msgid "object[]" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:183 msgid "PoolIntArray" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:183 msgid "int[]" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:184 msgid "PoolByteArray" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:184 msgid "byte[]" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:185 msgid "PoolFloatArray" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:185 msgid "float[]" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:186 msgid "PoolStringArray" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:186 msgid "String[]" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:187 msgid "PoolColorArray" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:187 msgid "Color[]" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:188 msgid "PoolVector2Array" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:188 msgid "Vector2[]" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:189 msgid "PoolVector3Array" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:189 msgid "Vector3[]" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:192 msgid "" "In some exceptional cases a raw array (``type[]``) may be required instead " "of a ``List``." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:197 msgid "" "*This is temporary. Array is ref-counted, so it will need its own type that " "wraps the native side.*" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:199 msgid "Use ``Dictionary``." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:202 msgid "Variant" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:204 msgid "``System.Object`` (``object``) is used in place of ``Variant``." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:207 msgid "Communicating with other scripting languages" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:209 msgid "" "The methods ``object Object.call(string method, params object[] args)``, " "``object Object.get(string field)`` and ``object Object.set(string field, " "object value)`` are provided to communicate with instances of other " "scripting languages via the Variant API." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:215 msgid "Other differences" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:217 msgid "" "``preload``, ``assert`` and ``yield`` as they work in GDScript are currently " "not available in C#." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:220 msgid "Other differences:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:225 msgid "Color8" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:225 msgid "Color.Color8" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:226 msgid "is_inf" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:226 msgid "float.IsInfinity" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:227 msgid "is_nan" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:227 msgid "float.IsNaN" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:228 msgid "dict2inst" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:228 #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:229 msgid "? TODO" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:229 msgid "inst2dict" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:230 msgid "load" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:230 msgid "GD.load which is the same as ResourceLoader.load" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:4 msgid "Style Guide" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:6 msgid "" "Having well-defined and consistent coding conventions is important for every " "project, and Godot is no exception to this rule." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:9 msgid "" "This page contains a coding style guide which is followed by developers and " "contributors of Godot itself. As such, it is mainly intended for those who " "want to contribute to the project, but since the conventions and guidelines " "mentioned in this article are those most widely adopted by the users of the " "language, we encourage you to do the same, especially if you do not have " "such a guide yet." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:14 msgid "" "This article is by no means an exhaustive guide on how to follow the " "standard coding conventions or best practices. If you feel unsure of an " "aspect which is not covered here, please refer to more comprehensive " "documentation, such as `C# Coding Conventions `_ or " "`Framework Design Guidelines `_." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:21 msgid "Language Specification" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:23 msgid "" "Currently, Godot uses C# version 6.0 in its engine and example source code. " "So, before we move to a newer version, care must be taken to avoid mixing " "language features only available in C# 7.0 or later, such as pattern " "matching or expression-bodied members inside get/set accessors." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:27 msgid "" "For detailed information of C# features in different versions, please see " "`What's New in C# `_." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:31 msgid "Formatting Conventions" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:33 msgid "" "If you create a new file, make sure that it uses linefeed (*LF*) characters " "to break lines, not *CRLF* or *CR*." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:34 msgid "" "Use UTF-8 encoding without a byte order mark (BOM )." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:35 msgid "" "Use 4 spaces instead of tabs for indentation (which is referred to as 'soft " "tabs')." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:38 msgid "Line Breaks and Blank Lines" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:40 msgid "" "For a general indentation rule, follow `The 'Allman Style' `_ which recommends " "placing the brace associated with a control statement on the next line, " "indented to the same level:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:57 msgid "However, you may choose to omit line breaks inside brackets," msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:59 msgid "For simple property accessors." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:60 msgid "For simple object, array, or collection initializers." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:61 msgid "For abstract auto property, indexer, or event declarations." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:83 msgid "Insert a blank line," msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:85 msgid "After *using* statement list." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:86 msgid "Between method, properties, and inner type declarations." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:88 msgid "" "Field and constant declarations can be grouped together according to " "relevance. In that case, consider inserting a blank line between the groups " "for easier reading." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:91 msgid "Avoid inserting a blank line," msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:93 msgid "After an opening bracket ('{')." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:94 msgid "Before a closing bracket ('}')." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:95 msgid "After a comment block, or a single line comment." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:96 msgid "Adjacent to another blank line." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:133 msgid "" "Consider breaking a line when it's longer than 100 characters. And it's also " "a good practice to insert a line feed (LF) character at the end of a file " "because some utilities have trouble recognizing the last line without it (i." "e. Linux's *cat* command)." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:138 msgid "Using Spaces" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:140 msgid "Insert a space," msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:142 msgid "Around a binary and tertiary operator." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:143 msgid "" "Between an opening parenthesis and *if*, *for*, *foreach*, *catch*, *while*, " "*lock* or *using* keywords." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:144 msgid "Before and within a single line accessor block." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:145 msgid "Between accessors in a single line accessor block." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:146 msgid "After a comma." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:147 msgid "After a semi-colon in a *for* statement." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:148 msgid "After a colon in a single line *case* statement." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:149 msgid "Around a colon in a type declaration." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:150 msgid "Around a lambda arrow." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:151 msgid "" "After a single line comment symbol ('//'), and before it if used at the end " "of a line." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:153 msgid "Do not use a space," msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:155 msgid "After a type cast parentheses." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:156 msgid "Within single line initializer braces." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:158 msgid "" "The following example shows a proper use of spaces, according to some of the " "the above mentioned conventions:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:195 msgid "" "Use *PascalCase* for all namespaces, type names and member level identifiers " "(i.e. methods, properties, constants, events), except for private fields:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:216 msgid "" "Use *camelCase* for all other identifiers (i.e. local variables, method " "arguments), and use underscore('_') as a prefix for private fields (but not " "for methods or properties, as explained above):" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:230 msgid "" "There's an exception with acronyms which consist of two letters like *'UI'* " "which should be written in upper case letters when used where Pascal case " "would be expected, and in lower case letters otherwise." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:233 msgid "" "Note that *'id'* is **not** an acronym, so it should be treated as a normal " "identifier:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:244 msgid "" "It is generally discouraged to use a type name as a prefix of an identifier " "like *'string strText'* or *'float fPower'*, for example. However, there's " "an exception about interfaces, in which case they **should** be named using " "an upper case *'I'* as a prefix, like *'IInventoryHolder'* or " "*'IDamageable'*." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:248 msgid "" "Lastly, consider choosing descriptive names and do not try to shorten them " "too much if it affects readability." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:251 msgid "" "For instance, if you want to write a code to find a nearby enemy and hit " "with an weapon, prefer" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:257 msgid "Rather than," msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:264 msgid "Implicitly Typed Local Variables" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:266 msgid "" "Consider using implicitly typing (*'var'*) for declaration of a local " "variable, but do so **only when the type is evident** from the right side of " "the assignment:" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:296 msgid "Other Considerations" msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:298 msgid "Use explicit access modifiers." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:299 msgid "Use properties instead of non-private fields." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:300 msgid "" "Use modifiers in this order: *'public/protected/private/internal virtual/" "override/abstract/new static readonly'*." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:301 msgid "" "Avoid using fully qualified names or *'this.'* prefix for members when it's " "not necessary." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:302 msgid "Remove unused *'using'* statements and unnecessary parentheses." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:303 msgid "Consider omitting default initial value for a type." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:304 msgid "" "Consider using null-conditional operators or type initializers to make the " "code more compact." msgstr "" #: ../../docs/getting_started/scripting/c_sharp/c_sharp_style_guide.rst:305 msgid "" "Use safe cast when there is a possibility of the value being a different " "type, and use direct cast otherwise." msgstr "" #: ../../docs/getting_started/workflow/index.rst:2 msgid "Project workflow" msgstr "" #: ../../docs/getting_started/workflow/project_setup/index.rst:2 msgid "Project setup" msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:9 msgid "" "This tutorial is aimed to propose a simple workflow on how to organize " "projects. Since Godot allows the programmer to use the file-system as they " "please, figuring out a way to organize the projects when starting to use the " "engine can be a little challenging. Because of this, a simple workflow will " "be described, which can be used or not, but should work as a starting point." msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:16 msgid "" "Additionally, using version control can be challenging so this proposition " "will include that too." msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:20 msgid "Organization" msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:22 msgid "" "Godot is scene based in nature, and uses the filesystem as-is, without " "metadata or an asset database." msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:25 msgid "" "Unlike other engines, a lot of resource are contained within the scene " "itself, so the amount of files in the filesystem is considerably lower." msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:28 msgid "" "Considering that, the most common approach is to group assets close to " "scenes as, when a project grows, it makes it more maintainable." msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:31 msgid "" "As example, base sprite images, 3D model scenes or meshes, materials, etc. " "can usually be organized in a place, while a separate folder is used to " "store built levels that use them." msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:52 msgid "Importing" msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:54 msgid "" "Godot version previous to 3.0 did the import process from files outside the " "project. While this can be useful in large projects, it resulted in an " "organization hassle for most developers." msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:58 msgid "" "Because of this, assets are now imported from within the project folder " "transparently." msgstr "" #: ../../docs/getting_started/workflow/project_setup/project_organization.rst:61 msgid "" "If a folder shouldn't be imported into Godot an exception can be made with " "a .gdignore file." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:2 msgid "Godot-Blender-Exporter" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:5 msgid "Details on exporting" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:16 msgid "Disabling specific objects" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:17 msgid "" "Sometimes you don't want some objects exported (eg high-res models used for " "baking). An object will not be exported if it is not rendered in the scene. " "This can be set in the outliner:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:23 msgid "" "Objects hidden in the viewport will be exported, but will be hidden in the " "Godot scene." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:28 msgid "Build Pipeline Integration" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 msgid "" "If you have hundreds of model files, you don't want your artists to waste " "time manually exporting their blend files. To combat this, the exporter " "provides a python function ``io_scene_godot.export(out_file_path)`` that can " "be called to export a file. This allows easy integration with other build " "systems. An example Makefile and python script that exports all the blends " "in a directory is present in the Godot-Blender-exporter repository." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:2 #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:132 msgid "Materials" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:5 msgid "Using existing Godot materials" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:6 msgid "" "One way in which the exporter can handle materials is to attempt to match " "the Blender material with an existing Godot material. This has the advantage " "of being able to use all of the features of Godot's material system, but it " "means that you cannot see your model with the material applied inside " "Blender." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:11 msgid "" "To do this, the exporter attempts to find Godot materials with names that " "match those of the material name in Blender. So if you export an object in " "Blender with the material name ``PurpleDots`` then the exporter will search " "for the file ``PurpleDots.tres`` and assign it to the object. If this file " "is not a ``SpatialMaterial`` or ``ShaderMaterial`` or if it cannot be found, " "then the exporter will fall back to exporting the material from Blender." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:19 msgid "" "Where the exporter searches for the ``.tres`` file is determined by the " "\"Material Search Paths\" option:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:33 msgid "This can take the value of:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:25 msgid "" "Project Directory - Attempts to find the ``project.Godot`` and recursively " "searches through subdirectories. If ``project.Godot`` cannot be found it " "will throw an error. This is useful for most projects where naming conflicts " "are unlikely." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:29 msgid "" "Export Directory - Look for materials in subdirectories of the export " "location. This is useful for projects where you may have duplicate material " "names and need more control over what material gets assigned." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:32 msgid "None - Do not search for materials. Export them from the Blender file." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:36 #, fuzzy msgid "Export of Blender materials" msgstr "منوی خروجی گرفتن" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:38 msgid "" "The other way materials are handled is for the exporter to export them from " "Blender. Currently only the diffuse color and a few flags (eg unshaded) are " "exported." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:43 msgid "" "Export of Blender materials is currently very primitive. However, it is the " "focus of a current GSOC project" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:47 msgid "" "Materials are currently exported using their \"Blender Render\" settings. " "When Blender 2.8 is released, this will be removed and this part of the " "exporter will change." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 #: ../../docs/tutorials/3d/introduction_to_3d.rst:214 msgid "Lights" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 msgid "" "By default, lamps in Blender have shadows enabled. This can cause " "performance issues in Godot." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 msgid "" "Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 " "is released, this will be removed and this part of the exporter will change." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 msgid "" "Sun, point and spot lamps are all exported from Blender along with many of " "their properties:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 msgid "There are some things to note:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 msgid "" "In Blender, a light casts light all the way to infinity. In Godot, it is " "clamped by the attenuation distance. To most closely match between the " "viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 msgid "" "Light attenuation models differ between Godot and Blender. The exporter " "attempts to make them match, but it isn't always very good." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 msgid "" "Spotlight angular attenuation models also differ between Godot and Blender. " "The exporter attempts to make them similar, but it doesn't always look the " "same." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 msgid "" "There is no difference between buffer shadow and ray shadow in the export." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 msgid "Physics Properties" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:3 msgid "" "Exporting physics properties is done by enabling \"Rigid Body\" in Blenders " "physics tab:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:9 msgid "" "By default, a single Blender object with rigid body enabled will export as " "three nodes: a PhysicsBody, a CollisionShape, and a MeshInstance." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:14 msgid "Body Type" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:15 msgid "" "Blender only has the concept of \"Active\" and \"Passive\" rigid bodies. " "These turn into Static and RigidBody nodes. To create a kinematic body, " "enable the \"animated\" checkbox on an \"Active\" body:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:23 #: ../../docs/tutorials/physics/physics_introduction.rst:55 msgid "Collision Shapes" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:24 msgid "" "Many of the parameters for collision shapes are missing from Blender, and " "many of the collision shapes are also not present. However, almost all of " "the options in Blender's rigid body collision and rigid body dynamics " "interfaces are supported:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:38 msgid "There are the following caveats:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:32 msgid "" "Not all of the collision shapes are supported. Only ``Mesh``, ``Convex " "Hull``, ``Capsule``, ``Sphere`` and ``Box`` are supported in both Blender " "and Godot" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:35 msgid "" "In Godot, you can have different collision groups and collision masks. In " "Blender you only have collision groups. As a result, the exported object's " "collision mask is equal to it's collision group. Most of the time, this is " "what you want." msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 msgid "Collision Geometry Only" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:48 msgid "" "Frequently you want different geometry for your collision meshes and your " "graphical meshes, but by default the exporter will export a mesh along with " "the collision shape. To only export the collision shape, set the objects " "maximum draw type to Wire:" msgstr "" #: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:55 msgid "" "This will also influence how the object is shown in Blender's viewport. Most " "of the time, you want your collision geometry to be shown see-through when " "working on the models, so this works out fairly nicely." msgstr "" #: ../../docs/getting_started/workflow/assets/index.rst:2 msgid "Assets workflow" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:4 msgid "Import process" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:7 msgid "Importing assets in Godot 3.0+" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:9 msgid "" "Previously, importing assets in Godot 2.x required manual maintenance of a " "separate directory with source assets. Without doing this, it was impossible " "to specify how to convert and change import flags for textures, audios, " "scenes, etc." msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:14 msgid "" "In Godot 3.0, we use a more modern approach to importing: Simply drop your " "assets (image files, scenes, audios, fonts, etc) directly in the project " "folder (copy them manually with your OS file explorer). Godot will " "automatically import these files internally and keep the imported resources " "hidden in a res://.import folder." msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:20 msgid "This allows changing all the import parameters transparently." msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:23 msgid "Changing import parameters" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:25 msgid "" "Changing the import parameters of an asset in Godot (again, keep in mind " "import parameters are only present in non-native Godot resource types) is " "easy. Select the relevant resource in the filesystem dock:" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:31 msgid "" "Then, after adjusting the parameters, press \"Reimport\". The parameters " "used will be only for this asset and will be used on future reimports." msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:34 msgid "" "Changing import parameters of several assets at the same time is also " "possible. Simply select all of them together in the resources dock and the " "exposed parameters will apply to all of them when reimporting." msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:39 msgid "Automatic reimport" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:41 msgid "" "When the MD5 checksum of the source asset changes, Godot will perform an " "automatic reimport of it, applying the preset configured for that specific " "asset." msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:46 msgid "Files generated" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:48 msgid "" "Importing will add an extra .import file, containing the import " "configuration. Make sure to commit these to your version control system!" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:53 msgid "" "Additionally, extra assets will be preset in the hidden res://.import folder:" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:57 msgid "" "If any of the files present in this folder is erased (or the whole folder), " "the asset or assets will be reimported automatically. As such, committing " "this folder to the version control system is optional. It can save time on " "reimporting time when checking out in another computer, but it takes " "considerably more space and transfer time. Pick your poison!" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:64 msgid "Changing import resource type" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:66 msgid "" "Some source assets can be imported as different types of resources. For " "this, select the relevant type of resource desired and press \"Reimport\":" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:74 msgid "Changing default import parameters" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:76 msgid "" "Different types of games might require different defaults. Changing the " "defaults per project can be achieved by using the \"Preset..\" Menu. Besides " "some resource types offering presets, the default setting can be saved and " "cleared too:" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:84 msgid "Simplicity is key!" msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:86 msgid "" "This is a very simple workflow which should take very little time to get " "used to. It also enforces a more correct way to deal with resources." msgstr "" #: ../../docs/getting_started/workflow/assets/import_process.rst:89 msgid "" "There are many types of assets available for import, so please continue " "reading to understand how to work with all of them!" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:4 msgid "Importing Images" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:7 msgid "Why importing them?" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:9 msgid "" "In Godot 3+, image files are no longer native resources and they must be " "imported. The reason behind this is the large amount of configuration " "parameters that image files can be imported with." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:13 msgid "" "This small tutorial will explain what these parameters are and how to best " "make use of them." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:17 msgid "Importing Textures" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:19 msgid "" "The default action in Godot is to import images as textures. Textures are " "stored in video memory and can't be accessed directly. This is what makes " "drawing them efficient." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:23 msgid "Import options are vast:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:28 msgid "Compression:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:30 msgid "" "Images are one of the largest assets in a game. To handle them efficiently, " "they need to be compressed. Godot offers several compression methods, " "depending on the use case." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:34 msgid "Compress Mode" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:36 msgid "" "VRAM Compression: This is the most common compression mode for 3D assets. " "File on disk is reduced and video memory usage is also reduced considerably. " "For 3D, it may present unwanted artifacts, though." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:38 msgid "" "Lossless Compression: This is the most common compression for 2D assets. It " "shows assets without any kind of artifacting, and disk compression is " "decent. It will use considerably more amount of video memory than VRAM, " "though." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:40 msgid "" "Lossy Compression: For games with lots of large 2D assets, lossy compression " "can be a great choice. It has some artifacting, but less than VRAM and the " "file size is almost a tenth of Lossless." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:42 msgid "" "Uncompressed: Only useful for formats that can't be compressed (like, raw " "float)." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:44 msgid "" "In this table, each of the four options are described together with their " "advantages and disadvantages ( |good| = Best, |bad| =Worst ):" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:48 msgid "Uncompressed" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:48 msgid "Compress Lossless (PNG)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:48 msgid "Compress Lossy (WebP)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:48 msgid "Compress VRAM" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:50 msgid "Stored as raw pixels" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:50 msgid "Stored as PNG" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:50 msgid "Stored as WebP" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:50 msgid "Stored as S3TC/BC,PVRTC/ETC, depending on platform" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:52 msgid "Size on Disk" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:52 #: ../../docs/getting_started/workflow/assets/importing_images.rst:54 msgid "|bad| Large" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:52 msgid "|regular| Small" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:52 msgid "|good| Very Small" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:54 msgid "Memory Usage" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:54 msgid "|good| Small" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:56 #: ../../docs/tutorials/2d/canvas_layers.rst:70 msgid "Performance" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:56 #: ../../docs/getting_started/workflow/assets/importing_images.rst:60 msgid "|regular| Normal" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:56 #: ../../docs/getting_started/workflow/assets/importing_images.rst:60 msgid "|good| Fast" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:58 msgid "Quality Loss" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:58 msgid "|good| None" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:58 msgid "|regular| Slight" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:58 msgid "|bad| Moderate" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:60 msgid "Load Time" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:60 msgid "|bad| Slow" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:70 msgid "HDR Mode" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:72 msgid "" "Godot supports high dynamic range textures (as .HDR or .EXR). These are " "mostly useful as high dynamic range equirectancular panorama skys (the " "internet has plenty of if you look for them), which replace Cubemaps in " "Godot 2.x. Modern PCs support the BC6H VRAM format, but there are still " "plenty that do not." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:75 msgid "" "If you want Godot to ensure full compatibility in for kind of textures, " "enable the \"Force RGBE\" option." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:78 msgid "Normal Map" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:80 msgid "" "When using a texture as normal map, only the red and green channels are " "required. Given regular texture compression algorithms produce artifacts " "that don't look that nice in normal maps, the RGTC compression format is the " "best fit for this data. Forcing this option to \"Enabled\" will make Godot " "import the image as RGTC compressed. By default, it's set to \"Detect\" " "which means that if the texture is ever used as a normal map, it will be " "changed to \"Enabled\" and reimported automatically." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:86 #: ../../docs/tutorials/3d/spatial_material.rst:20 msgid "Flags" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:88 msgid "" "There are plenty of settings that can be toggled when importing an image as " "a texture, depending on the use case." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:91 msgid "Repeat" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:93 msgid "" "This setting is mosty commonly used in 3D than 2D (thus it's generally " "disabled in 2D). It makes UV coordinates going beyond the 0,0 - 1,1 range to " "\"loop\". Repeating can optionally be set to mirrored mode." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:97 msgid "Filter" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:99 msgid "" "When pixels become larger than the screen pixels, this options enable linear " "interpolation for them. The result is a smoother (less blocky) texture. This " "setting can be commonly used in 2D and 3D, but it's usually disabled when " "making pixel perfect games." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:103 msgid "Mipmaps" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:105 msgid "" "When pixels become smaller than the screen, mipmaps kick in. This helps " "reduce the grainy effect when shrinking the textures. Keep in mind that, in " "older hardware (GLES2, mainly mobile), there are some requirements to use " "mipmaps:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:108 msgid "Texture width and height must be powers of 2" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:109 msgid "Repeat must be enabled" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:111 msgid "" "Keep in mind the above when making phone games and applications, want to aim " "for full compatibility, and need mipmaps." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:113 msgid "" "When doing 3D, mipmap should be turned on as this also improves performance " "(smaller versions of the texture are used for objects further away)." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:116 msgid "Anisotropic" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:118 msgid "" "When textures are near parallel to the view (like floors), this option makes " "them have more detail by reducing blurryness." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:121 msgid "SRGB" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:123 msgid "" "Godot uses Linear colorspace when rendering 3D. Textures mapped to albedo or " "detail channels need to have this option turned on in order for colors to " "look correct. When set to \"Detect\" mode, the texture will be marked as " "SRGB when used in albedo channels." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:127 msgid "Process" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:129 msgid "" "Some special processes can be applied to images when importe as texture." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:132 msgid "Fix Alpha Border" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:134 msgid "" "This puts pixels of the same surrounding color in transition from " "transparency to non transparency. It helps mitigate the outline effect when " "exporting images from Photoshop and the likes." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:139 msgid "" "It's a good idea to leave it on by default, unless specific values are " "needed." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:142 msgid "Premultiplied Alpha" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:144 msgid "" "An alternative to fix darkened borders is to use premultiplied alpha. By " "enabling this option, the texture will be converted to this format. Keep in " "mind that a material will need to be created that uses the PREMULT ALPHA " "blend mode on canvas items that need it." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:148 msgid "HDR as SRGB" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:150 msgid "" "Some few HDR files are broken and contain SRGB color data. It is advised to " "not use them but, in the worst case, toggling this option on will make them " "look right." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:154 msgid "Detect 3D" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_images.rst:156 msgid "" "This option makes Godot be aware of when a texture (which is imported for 2D " "as default) is used in 3D. If this happens, setting are changed so the " "texture flags are friendlier to 3D (mipmaps, filter and repeat become " "enabled and compression is changed to VRAM). Texture is also reimported " "automatically." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:4 msgid "Importing audio samples" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:7 msgid "Why importing?" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:9 msgid "" "Raw audio data in general is large and undesired. Godot provides two main " "options to import your audio data: WAV and OGG Vorbis." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:12 msgid "" "Each has different advantages. * Wav files use raw data or light " "compression, require small amount of CPU to play back (hundreds of " "simultaneous voices in this format are fine), but take up significant space. " "* Ogg Vorbis files use a stronger compression that results in much smaller " "file size, but uses significantly more processor to play back." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:19 msgid "Here is a comparative chart." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:22 msgid "Format" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:22 msgid "1 Second of Audio" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:24 msgid "WAV 24 bits, 96 kHz, Stereo" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:24 msgid "576kb" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:26 msgid "WAV 16 bits, 44 kHz, Mono" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:26 msgid "88kb" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:28 msgid "WAV 16 bits, IMA-ADPCM, Mono" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:28 msgid "22kb" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:30 msgid "OGG 128kbps, Stereo" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:30 msgid "16kb" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:32 msgid "OGG Vorbis 96kbps, Stereo" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:32 msgid "12kb" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:35 msgid "" "In general, what is recommended, is to use WAV for most sound effects, " "especially those that are short and repetitive, and OGG for music, voice and " "long sound effects." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:38 msgid "Best Practices" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:40 msgid "" "Godot 3+ has an amazing bus system with built in effects. This saves SFX " "artists the need to add reverb to the sound effects, reducing their size " "greatly and ensuring correct trimming. Say no to SFX with baked reverb!" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:47 msgid "As you can see above, sound effects become huge with reverb added." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:50 msgid "Trimming" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:52 msgid "" "One issue that happens often is that the waveform are exported with long " "silences at the beginning and at the end. These are inserted by DAWs when " "saving to a waveform, increase their size unnecessarily and add latency to " "the moment they are played back." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:57 msgid "Importing as WAV with the Trimming option enabled solves this." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:61 msgid "Looping" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:63 msgid "" "Godot supports looping in the samples (Tools such as Sound Forge or Audition " "can add loop points to wav files). This is useful for sound effects such as " "engines, machine guns, etc. Ping-pong looping is also supported." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:68 msgid "" "As an alternative, the import screen has a \"loop\" option that enables " "looping for the entire sample when importing." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:4 msgid "Importing translations" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:7 msgid "Games and internationalization" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:9 msgid "" "The world is full of different markets and cultures and, to maximize " "profits™, nowadays games are released in several languages. To solve this, " "internationalized text must be supported in any modern game engine." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:14 msgid "" "In regular desktop or mobile applications, internationalized text is usually " "located in resource files (or .po files for GNU stuff). Games, however, can " "use several orders of magnitude more text than applications, so they must " "support efficient methods for dealing with loads of multilingual text." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:20 msgid "" "There are two approaches to generate multilingual language games and " "applications. Both are based on a key:value system. The first is to use one " "of the languages as the key (usually English), the second is to use a " "specific identifier. The first approach is probably easier for development " "if a game is released first in English, later in other languages, but a " "complete nightmare if working with many languages at the same time." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:28 msgid "" "In general, games use the second approach and a unique ID is used for each " "string. This allows you to revise the text while it is being translated to " "other languages. The unique ID can be a number, a string, or a string with a " "number (it's just a unique string anyway)." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:33 msgid "Translators also usually prefer to work with spreadsheets." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:36 msgid "Translation format" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:38 msgid "" "To complete the picture and allow efficient support for translations, Godot " "has a special importer that can read CSV files. All spreadsheet editors (be " "it Libreoffice, Microsoft Office, Google Docs, etc.) can export to this " "format, so the only requirement is that the files have a special " "arrangement. The CSV files must be saved in UTF-8 encoding and be formatted " "as follows:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:46 msgid "" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:46 msgid "" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:46 msgid "" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:48 msgid "KEY1" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:48 #: ../../docs/getting_started/workflow/assets/importing_translations.rst:50 #: ../../docs/getting_started/workflow/assets/importing_translations.rst:52 #: ../../docs/tutorials/misc/binary_serialization_api.rst:33 msgid "string" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:50 msgid "KEY2" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:52 msgid "KEYN" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:55 msgid "" "The \"lang\" tags must represent a language, which must be one of the :ref:" "`valid locales ` supported by the engine. The \"KEY\" tags must " "be unique and represent a string universally (they are usually in uppercase, " "to differentiate from other strings). Here's an example:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:61 #: ../../docs/tutorials/i18n/locales.rst:352 msgid "id" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:61 #: ../../docs/tutorials/i18n/locales.rst:178 msgid "en" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:61 #: ../../docs/tutorials/i18n/locales.rst:220 msgid "es" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:61 #: ../../docs/tutorials/i18n/locales.rst:372 msgid "ja" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:63 msgid "GREET" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:63 msgid "Hello, friend!" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:63 msgid "Hola, Amigo!" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:63 msgid "こんにちは" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:65 msgid "ASK" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:65 msgid "How are you?" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:65 msgid "Cómo está?" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:65 msgid "元気ですか" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:67 msgid "BYE" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:67 msgid "Good Bye" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:67 msgid "Adiós" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:67 msgid "さようなら" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:71 msgid "CSV Importer" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:73 msgid "" "Godot will treat CSV files as translations by default. It will import them " "and generate one or more compressed translation resource files next to it." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_translations.rst:76 msgid "" "Importing will also add the translation to the list of translations to load " "when the game runs, specified in project.godot (or the project settings). " "Godot allows loading and removing translations at runtime as well." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:4 msgid "Importing 3D Scenes" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:7 msgid "Godot Scene Importer" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:9 msgid "" "When dealing with 3D assets, Godot has a flexible and configurable importer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:11 msgid "" "Godot works with *scenes*. This means that the entire scene being worked on " "in your favorite 3D DCC will be transferred as close as possible." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:14 msgid "Godot supports the following 3D *scene file fomats*:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:16 msgid "DAE (Collada), which is currently the most mature workflow." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:17 msgid "" "GLTF 2.0. Both text and binary formats are supported. Godot has full support " "for it, but the format is new and gaining traction." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:18 msgid "" "OBJ (Wavefront) formats. It is also fully supported, but pretty limited (no " "support for pivots, skeletons, etc)." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:20 msgid "" "Just copy the scene file together with the texture to the project " "repository, and Godot will do a full import." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:23 msgid "Why not FBX?" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:25 msgid "" "Most game engines use the FBX format for importing 3D scenes, which is " "definitely one of the most standardized in the industry. However, this " "format requires the use of a closed library from Autodesk which is " "distributed with a more restrictive licensing terms than Godot." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:30 msgid "" "The plan is, sometime in the future, to offer a binary plug-in using " "GDNative." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:33 msgid "Exporting DAE files from Maya and 3DS Max" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:35 msgid "" "Autodesk added built-in collada support to Maya and 3DS Max, but it's broken " "by default and should not be used. The best way to export this format is by " "using the `OpenCollada `__ plugins. They work well, although they are not always " "up-to date with the latest version of the software." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:43 msgid "Exporting DAE files from Blender" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:45 msgid "" "Blender has built-in collada support too, but it's also broken and should " "not be used." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:48 msgid "" "Godot provides a `Python Plugin `__ that will do a much better job of exporting the scenes." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:53 msgid "Exporting ESCN files from Blender" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:55 msgid "" "The most powerful one, called `godot-blender-exporter `__. It uses .escn files which is kind of " "another name of .tscn file(Godot scene file), it keeps as much information " "as possible from a Blender scene." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:60 msgid "" "ESCN exporter has a detailed `document `__ " "describing its functionality and usage." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:64 msgid "Import workflows" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:66 msgid "" "Godot scene importer allows different workflows regarding how data is " "imported. Depending on many options, it is possible to import a scene with:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:69 msgid "" "External materials (default): Where each material is saved to a file " "resource. Modifications to them are kept." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:70 msgid "" "External meshes: Where each mesh is saved to a different file. Many users " "prefer to deal with meshes directly." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:71 msgid "" "External animations: Allowing saved animations to be modified and merged " "when sources change." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:72 msgid "" "External scenes: Save the root nodes of the imported scenes each as a " "separate scene." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:73 msgid "Single Scene: A single scene file with everything built in." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:77 msgid "" "As different developers have different needs, this import process is highly " "customizable." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:80 msgid "Import Options" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:82 msgid "The importer has several options, which will be discussed below:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:87 msgid "Nodes:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:90 msgid "Root Type" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:92 msgid "" "By default, the type of the root node in imported scenes is \"Spatial\", but " "this can be modified." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:95 msgid "Root Name" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:97 msgid "Allows setting a specific name to the generated root node." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:100 msgid "Custom Script" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:102 msgid "" "A special script to process the whole scene after import can be provided. " "This is great for post processing, changing materials, doing funny stuff " "with the geometry etc." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:106 msgid "Create a script that like this:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:117 msgid "" "The post-import function takes the imported scene as argument (the parameter " "is actually the root node of the scene). The scene that will finally be used " "must be returned. It can be a different one." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:122 #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:141 #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:196 #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:236 msgid "Storage" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:124 msgid "" "By default, Godot imports a single scene. This option allows specifying that " "nodes below the root will each be a separate scene and instanced into the " "imported one." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:128 msgid "" "Of course, instancing such imported scenes in other places manually works " "too." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:135 msgid "Location" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:137 msgid "" "Godot supports materials in meshes or nodes. By default, materials will be " "put on each node." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:143 msgid "" "Materials can be stored within the scene or in external files. By default, " "they are stored in external files so editing them is possible. This is " "because most 3D DCCs don't have the same material options as those present " "in Godot." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:147 msgid "" "When materials are built-in, they will be lost each time the source scene is " "modified and re-imported." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:151 msgid "Keep on Reimport" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:153 msgid "" "Once materials are edited to use Godot features, the importer will keep the " "edited ones and ignore the ones coming from the source scene. This option is " "only present if materials are saved as files." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:158 msgid "Compress" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:160 msgid "" "Makes meshes use less precise numbers for multiple aspects of the mesh in " "order to save space." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:173 msgid "These are:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:164 msgid "" "Transform Matrix (Location, rotation, and scale) : 32-bit float " "to 16-bit signed integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:165 msgid "" "Vertices : 32-bit float " "to 16-bit signed integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:166 msgid "" "Normals : 32-bit float " "to 32-bit unsigned integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:167 msgid "" "Tangents : 32-bit float " "to 32-bit unsigned integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:168 msgid "" "Vertex Colors : 32-bit float " "to 32-bit unsigned integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:169 msgid "" "UV : 32-bit float " "to 32-bit unsigned integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:170 msgid "" "UV2 : 32-bit float " "to 32-bit unsigned integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:171 msgid "" "Vertex weights : 32-bit float " "to 16-bit unsigned integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:172 msgid "" "Armature bones : 32-bit float " "to 16-bit unsigned integer." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:173 msgid "" "Array index : 32-bit or 16-" "bit unsigned integer based on how many elements there are." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:177 msgid "Additional info:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:176 msgid "" "UV2 = The second UV channel for detail textures and baked lightmap textures." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:177 msgid "" "Array index = An array of numbers that number each element of the arrays " "above; i.e. they number the vertices and normals." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:179 msgid "" "In some cases, this might lead to loss of precision so disabling this option " "may be needed. For instance, if a mesh is very big or there are multiple " "meshes being imported that cover a large area, compressing the import of " "this mesh(s) may lead to gaps in geometry or vertices not being exactly " "where they should be." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:185 msgid "Meshes" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:188 msgid "Ensure Tangents" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:190 msgid "" "If textures with normalmapping are to be used, meshes need to have tangent " "arrays. This option ensures that these are generated if not present in the " "source scene. Godot uses Mikktspace for this, but it's always better to have " "them generated in the exporter." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:198 msgid "" "Meshes can be stored in separate files (resources) instead of built-in. This " "does not have much practical use unless one wants to build objects with them " "directly." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:201 msgid "" "This option is provided to help those who prefer working directly with " "meshes instead of scenes." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:205 msgid "External Files" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:207 msgid "" "Generated meshes and materials can be optionally stored in a subdirectory " "with the name of the scene." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:211 msgid "Animation Options" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:213 msgid "" "Godot provides many options regarding how animation data is dealt with. Some " "exporters (such as Blender), can generate many animations in a single file. " "Others, such as 3DS Max or Maya, need many animations put into the same " "timeline or, at worst, put each animation in a separate file." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:220 msgid "Import of animations is enabled by default." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:223 msgid "FPS" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:225 msgid "" "Most 3D export formats store animation timeline in seconds instead of " "frames. To ensure animations are imported as faithfully as possible, please " "specify the frames per second used to edit them. Failing to do this may " "result in minimal jitter." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:230 msgid "Filter Script" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:232 msgid "" "It is possible to specify a filter script in a special syntax to decide " "which tracks from which animations should be kept. (@TODO this needs " "documentation)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:238 msgid "" "By default, animations are saved as built-in. It is possible to save them to " "a file instead. This allows adding custom tracks to the animations and " "keeping them after a reimport." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:243 msgid "Optimizer" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:245 msgid "" "When animations are imported, an optimizer is run which reduces the size of " "the animation considerably. In general, this should always be turned on " "unless you suspect that an animation might be broken due to it being enabled." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:249 msgid "Clips" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:251 msgid "" "It is possible to specify multiple animations from a single timeline as " "clips. Specify from which frame to which frame each clip must be taken (and, " "of course, don't forget to specify the FPS option above)." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:255 msgid "Scene Inheritance" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:257 msgid "" "In many cases, it may be desired to do modifications to the imported scene. " "By default, this is not possible because if the source asset changes " "(source .dae,.gltf,.obj file re-exported from 3D modelling app), Godot will " "re-import the whole scene." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:260 msgid "" "It is possible, however, to do local modifications by using *Scene " "Inheritance*. Try to open the imported scene and the following dialog will " "appear:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:265 msgid "In inherited scenes, the only limitations for modifications are:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:267 msgid "Nodes can't be removed (but can be added anywhere)." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:268 msgid "" "Sub-Resources can't be edited (save them externally as described above for " "this)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:270 msgid "Other than that, everything is allowed!" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:273 msgid "Import Hints" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:275 msgid "" "Many times, when editing a scene, there are common tasks that need to be " "done after exporting:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:277 msgid "Adding collision detection to objects:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:278 msgid "Setting objects as navigation meshes" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:279 msgid "" "Deleting nodes that are not used in the game engine (like specific lights " "used for modelling)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:281 msgid "" "To simplify this workflow, Godot offers a few suffixes that can be added to " "the names of the objects in your 3D modelling software. When imported, Godot " "will detect them and perform actions automatically:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:286 msgid "Remove nodes (-noimp)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:288 msgid "" "Node names that have this suffix will be removed at import time, no matter " "what their type is. They will not appear in the imported scene." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:292 msgid "Create collisions (-col, -colonly, -convcolonly)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:294 msgid "" "Option \"-col\" will work only for Mesh nodes. If it is detected, a child " "static collision node will be added, using the same geometry as the mesh." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:297 msgid "" "However, it is often the case that the visual geometry is too complex or too " "un-smooth for collisions, which ends up not working well." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:300 msgid "" "To solve this, the \"-colonly\" modifier exists, which will remove the mesh " "upon import and create a :ref:`class_staticbody` collision instead. This " "helps the visual mesh and actual collision to be separated." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:304 msgid "" "Option \"-convcolonly\" will create :ref:`class_convexpolygonshape` instead " "of :ref:`class_concavepolygonshape`." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:306 msgid "" "Option \"-colonly\" can be also used with Blender's empty objects. On import " "it will create a :ref:`class_staticbody` with collision node as a child. " "Collision node will have one of predefined shapes, depending on the " "Blender's empty draw type:" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:313 msgid "Single arrow will create :ref:`class_rayshape`" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:314 msgid "Cube will create :ref:`class_boxshape`" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:315 msgid "Image will create :ref:`class_planeshape`" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:316 msgid "Sphere (and other non-listed) will create :ref:`class_sphereshape`" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:318 msgid "" "For better visibility in Blender's editor user can set \"X-Ray\" option on " "collision empties and set some distinct color for them in User Preferences / " "Themes / 3D View / Empty." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:322 msgid "Create navigatopm (-navmesh)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:324 msgid "" "A mesh node with this suffix will be converted to a navigation mesh. " "Original Mesh node will be removed." msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:328 msgid "Rigid Body (-rigid)" msgstr "" #: ../../docs/getting_started/workflow/assets/importing_scenes.rst:330 msgid "Creates a rigid body from this mesh." msgstr "" #: ../../docs/getting_started/workflow/export/index.rst:2 msgid "Export" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:4 msgid "Exporting projects" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:7 msgid "Why exporting?" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:9 msgid "" "Originally, Godot did not have any means to export projects. The developers " "would compile the proper binaries and build the packages for each platform " "manually." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:13 msgid "" "When more developers (and even non-programmers) started using it, and when " "our company started taking more projects at the same time, it became evident " "that this was a bottleneck." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:18 msgid "On PC" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:20 msgid "" "Distributing a game project on PC with Godot is rather easy. Drop the godot." "exe (or godot) binary together in the same place as the engine.cfg file, zip " "it and you are done. This can be taken advantage of to make custom " "installers." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:25 msgid "" "It sounds simple, but there are probably a few reasons why the developer may " "not want to do this. The first one is that it may not be desirable to " "distribute loads of files. Some developers may not like curious users " "peeking at how the game was made, others may find it inelegant, etc." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:31 msgid "" "Another reason is that, for distribution, the developer might prefer a " "specially compiled binary, which is smaller in size, more optimized and does " "not include tools inside (like the editor, debugger, etc.)." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:35 msgid "" "Finally, Godot has a simple but efficient system for creating DLCs as extra " "package files." msgstr "" "در نهایت، Godot سیستمی ساده اما کارآمد برای ایجاد DLC به عنوان بسته‌های اضافی " "دارد." #: ../../docs/getting_started/workflow/export/exporting_projects.rst:39 msgid "On mobile" msgstr "در موبایل" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:41 msgid "" "The same scenario in mobile is a little worse. To distribute a project in " "those devices, a binary for each of those platforms is built, then added to " "a native project together with the game data." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:45 msgid "" "This can be troublesome because it means that the developer must be " "familiarized with the SDK of each platform before even being able to export. " "While learning each SDK is always encouraged, it can be frustrating to be " "forced to do it at an undesired time." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:50 msgid "" "There is also another problem with this approach. Different devices prefer " "some data in different formats to run. The main example of this is texture " "compression. All PC hardware uses S3TC (BC) compression and that has been " "standardized for more than a decade, but mobile devices use different " "formats for texture compression, such as PVRCT (iOS) or ETC (Android)." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:58 msgid "Export menu" msgstr "منوی خروجی گرفتن" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:60 msgid "" "After many attempts at different export workflows, the current one has " "proven to work the best. At the time of this writing, not all platforms are " "supported yet, but the supported platforms continue to grow." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:64 #, fuzzy msgid "To open the export menu, click the \"Export\" button:" msgstr "برای باز کردن منوی خروجی گرفتن، فقط دکمه‌ی «گرفتن خروجی» را کلیک کنید:" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:68 msgid "The export menu will open, however it will be completely empty." msgstr "منوی خروجی گرفتن باز می‌شود، اما کاملا خالی خواهد بود." #: ../../docs/getting_started/workflow/export/exporting_projects.rst:72 msgid "" "That is because we need to add an export preset. To do that click the `Add.." "` button at the top of the export menu. This will open a drop down list of " "platforms to choose from for an export preset." msgstr "" "به این دلیل که باید ابتدا یک پیش‌تنظیم خروجی (Export Preset) اضافه کنیم. برای " "انجام آن روی دکمه‌ی `اضافه کردن ...` که در بالای منوی خروجی گرفتن قرار دارد " "کلیک کنید. یک لیست از پلتفرم‌های مختلف باز میشود تا یکی را برای پیش‌تنظیم " "خروجی انتخاب کنیم." #: ../../docs/getting_started/workflow/export/exporting_projects.rst:78 msgid "" "The default options are often enough to export, so tweaking them is not " "necessary, but provide extra control. However, many platforms require " "additional tools (SDKs) to be installed to be able to export. Additionally, " "Godot needs export templates installed to create packages. The export menu " "will complain when something is missing and will not allow the user to " "export for that platform until they resolve it:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:87 msgid "" "At that time, the user is expected to come back to the documentation and " "follow instructions on how to properly set up that platform." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:91 #: ../../docs/development/compiling/introduction_to_the_buildsystem.rst:199 msgid "Export templates" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:93 msgid "" "Apart from setting up the platform, the export templates must be installed " "to be able to export projects. They can be obtained as a .tpz (a renamed ." "zip) file from the `download page of the website `_." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:98 msgid "" "Once downloaded, they can be installed using the \"Install Export Templates" "\" option in the editor:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:104 msgid "Export mode" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:106 msgid "" "When exporting, Godot makes a list of all the files to export and then " "creates the package. There are 3 different modes for exporting:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:109 msgid "Export every single file in the project" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:110 msgid "Export only resources (+custom filter), this is default." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:111 msgid "Export only selected resources (+custom filter)" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:115 msgid "" "**Export every single file** - This mode exports every single file in the " "project. This is good to test if something is being forgotten, but " "developers often have a lot of unrelated stuff around in the dev directory, " "which makes it a bad idea." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:120 msgid "" "**Export only resources** - Only resources are exported. For most projects, " "this is enough. However many developers like to use custom datafiles in " "their games. To compensate for this, filters can be added for extra " "extensions (like, *.txt,*.csv, etc.)." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:125 msgid "" "**Export only selected resources** - Only select resources from a list are " "exported. This is probably overkill for most projects, but in some cases it " "is justified (usually huge projects). This mode offers total control of what " "is exported. Individual resources can be selected and dependency detection " "is performed to ensure that everything needed is added. As a plus, this mode " "allows to \"Bundle\" scenes and dependencies into a single file, which is " "*really* useful for games distributed on optical media." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:139 msgid "Export from Command Line" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:141 msgid "" "In production it is useful to automate builds, and Godot supports this with " "the ``--export`` and ``--export-debug`` command line parameters. Exporting " "from command line still requires an export template to define the export " "parameters. A basic invocation of the export would be ``godot --export " "\"Windows Desktop\" some_name``" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:147 msgid "" "Which, assuming there is a preset called \"Windows Desktop\" and the " "template can be found, will export to ``some_name.exe``. The output path is " "relative to the project path or absolute. It does not respect the directory " "the command was invoked from." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:152 msgid "" "You can also configure it to export only the .pck or .zip file (allowing a " "single export to be used with multiple Godot executables). This takes place " "if:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:156 msgid "The export preset is not marked as runnable" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:157 msgid "The target name ends with `.pck` or with `.zip`" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_projects.rst:159 msgid "" "It is often useful to combine the ``--export`` flag with the ``--path`` " "flag, and to create a dedicated export template for automated export: " "``godot --path path/to/project --export \"pck\" game_name.pck``" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:4 msgid "Feature Tags" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:9 msgid "" "Godot has a special system to tag availability of features. Each *feature* " "is represented as a string, and it can refer to many of the following:" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:12 msgid "Platform name." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:13 msgid "Platform bits (64/32)." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:14 msgid "Platform type (desktop/mobile)." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:15 msgid "Supported texture compression in platform." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:16 msgid "Whether a build is debug or release." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:17 msgid "Many more things." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:19 msgid "Features can be queried in run-time to the singleton API by calling:" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:27 msgid "Default features" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:29 msgid "" "Here is a list of most feature tags in Godot. Keep in mind they are *case " "sensitive*:" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:32 msgid "**Feature Tag**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:34 msgid "**Android**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:34 msgid "Running on Android" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:36 msgid "**HTML5**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:36 msgid "Running on HTML5" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:38 msgid "**JavaScript**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:38 msgid ":ref:`JavaScript singleton ` is available" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:41 msgid "**OSX**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:41 msgid "Running on macOS" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:43 msgid "**iOS**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:43 msgid "Running on iOS" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:45 msgid "**UWP**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:45 msgid "Running on UWP" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:47 msgid "**Windows**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:47 msgid "Running on Windows" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:49 msgid "**X11**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:49 msgid "Running on X11" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:51 msgid "**debug**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:51 msgid "Running on a debug build" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:53 msgid "**release**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:53 msgid "Running on a release build" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:55 msgid "**32**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:55 msgid "Running on a 32-bit build" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:57 msgid "**64**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:57 msgid "Running on a 64-bit build" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:59 msgid "**mobile**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:59 msgid "Host OS is a mobile platform" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:61 msgid "**pc**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:61 msgid "Host OS is a PC platform (desktop/laptop)" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:63 msgid "**web**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:63 msgid "Host OS is a Web browser" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:65 msgid "**etc**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:65 msgid "Textures using ETC1 compression are supported" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:67 msgid "**etc2**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:67 msgid "Textures using ETC2 compression are supported" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:69 msgid "**s3tc**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:69 msgid "Textures using S3TC (DXT/BC) compression are supported" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:71 msgid "**pvrtc**" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:71 msgid "Textures using PVRTC compression are supported" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:75 msgid "Custom features" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:77 msgid "" "It is possible to add custom features to a build, use the relevant field in " "the *export preset* used to generate it:" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:83 msgid "Overriding project settings" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:85 msgid "" "Features can be used to override specific configuration values in the " "*Project Settings*. This allows to better customize any configuration when " "doing a build." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:88 msgid "" "In the following example, a different icon is added for the demo build of " "the game (which was customized in a special export preset which, in turn, " "includes only demo levels)." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:93 msgid "After overriding, a new field is added for this specific configuration:" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:98 msgid "Default overrides" msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:100 msgid "" "There are already a lot of settings that come with overrides by default, " "they can be found in many sections of the project settings." msgstr "" #: ../../docs/getting_started/workflow/export/feature_tags.rst:106 msgid "Customizing Build" msgstr "سفارشی سازی ساخت" #: ../../docs/getting_started/workflow/export/feature_tags.rst:108 msgid "" "Feature tags can be used to customize a build process too, by writing a " "custom **ExportPlugin**. They also are used to specify which shared library " "is loaded and exported in **GDNative**." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_pc.rst:4 msgid "Exporting for PC" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_pc.rst:6 msgid "" "The simplest way to distribute a game for PC is to copy the executables " "(godot.exe on windows, godot on the rest), zip the folder and send it to " "someone else. However, this is often not desired." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_pc.rst:10 msgid "" "Godot offers a more elegant approach for PC distribution when using the " "export system. When exporting for PC (Linux, Windows, Mac), the exporter " "takes all the project files and creates a \"data.pck\" file. This file is " "bundled with a specially optimized binary that is smaller, faster and lacks " "tools and debugger." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_pc.rst:16 msgid "" "Optionally, the files can be bundled inside the executable, though this does " "not always works properly." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:4 msgid "Exporting for iOS" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:6 msgid "" "These are the steps to load a Godot project in Xcode. This allows you to " "build and deploy to an iOS device, build a release for the App Store, and do " "everything else you can normally do with Xcode." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:11 #: ../../docs/development/compiling/compiling_for_windows.rst:9 #: ../../docs/development/compiling/compiling_for_x11.rst:9 #: ../../docs/development/compiling/compiling_for_osx.rst:9 #: ../../docs/development/compiling/compiling_for_android.rst:20 #: ../../docs/development/compiling/compiling_for_ios.rst:9 #: ../../docs/development/compiling/cross-compiling_for_ios_on_linux.rst:27 #: ../../docs/development/compiling/compiling_for_uwp.rst:9 #: ../../docs/development/compiling/compiling_for_web.rst:9 #: ../../docs/development/compiling/compiling_with_mono.rst:9 msgid "Requirements" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:13 msgid "" "You must export for iOS from a computer running macOS with Xcode installed." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:14 msgid "" "Download the Godot export templates. Use the Godot menu: Editor > Manage " "Export Templates" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:18 msgid "Export a Godot project to Xcode" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:20 msgid "" "In the Godot editor, open the **Export** window from the **Project** menu. " "When the Export window opens, click **Add..** and select **iOS**." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:23 msgid "" "The following export options are required. Leaving any blank with cause the " "exporter to throw an error:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:26 msgid "In the **Application** category * **App Store Team ID**" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:28 msgid "Everything in the **Required Icons** category" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:29 msgid "Everything in the **Landscape Launch Screens** category" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:30 msgid "Everything in the **Portrait Launch Screens** category" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:32 msgid "" "After you click **Export Project**, there are still two important options " "left:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:34 msgid "" "**Path** is an empty folder that will contain the exported Xcode project " "files." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:35 msgid "" "**File** will be the name of the Xcode project and several project specific " "files and directories." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:39 msgid "" "This tutorial uses **exported_xcode_project_name**, but you will use your " "project's name. When you see **exported_xcode_project_name** in the " "following steps, replace it with the name you used instead." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:43 msgid "When the export completes, the output folder should look like this:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:47 msgid "" "Opening **exported_xcode_project_name.xcodeproj** lets you build and deploy " "like any other iOS app." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:52 msgid "Active development considerations" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:54 msgid "" "The above method creates an exported project that you can build for release, " "but you have to re-export every time you make a change in Godot." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:57 msgid "" "While developing, you can speed this process up by linking your Godot " "project files directly into your app." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:60 msgid "In the following example:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:62 msgid "" "**exported_xcode_project_name** is the name of the exported iOS application " "(as above)." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:63 msgid "**godot_project_to_export** is the name of the Godot project." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:66 msgid "Steps to link an Godot project folder to Xcode" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:68 msgid "Start from an exported iOS project (follow the steps above)." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:69 msgid "In Finder, drag the Godot project folder into the Xcode file browser." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:73 msgid "" "3. In the dialog, make sure **Create folder references** is selected. This " "means you will be able to continue to edit your Godot project in its current " "location." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:78 msgid "See the **godot_project_to_export** folder in the Xcode file browser." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:79 msgid "Delete **exported_xcode_project_name.pck** from the Xcode project." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:83 msgid "" "6. Open **exported_xcode_project_name-Info.plist** and add a string property " "named **godot_path** (this is the real key name) with a value " "**godot_project_to_export** (this is the name of your project)" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:89 msgid "" "That's it! You can now edit your project in the Godot editor and build it in " "Xcode when you want to run it on a device." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:93 #: ../../docs/tutorials/platform/services_for_ios.rst:4 msgid "Services for iOS" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_ios.rst:95 msgid "" "Special iOS services can be used in Godot. Check out the :ref:" "`doc_services_for_ios` page." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:4 msgid "Exporting for Universal Windows Platform" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:6 msgid "" "There's no extra requirement to export an ``.appx`` package that can be " "installed as a Windows App or submited to the Windows Store. Exporting UWP " "packages also works from any platform, not only from Windows." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:10 msgid "" "However, if you want to install and run the app, you need to sign it with a " "trusted signature. Currently, Godot does not support signing of packages, so " "you need to use external tools to do so." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:14 msgid "" "Also, make sure the Publisher Name you set when exporting the package " "matches the name used on the certificate." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:18 msgid "Limitations on Xbox One" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:20 msgid "" "As described in `UWP documentation `__:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:25 msgid "Submitted as an \"App\"" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:23 msgid "available memory is 1GB" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:24 msgid "share of 2-4 CPU cores" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:25 msgid "shared access of GPU power (45%)" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:30 msgid "" "Submitted as a \"Game\" (through `Xbox Live Creators Program `__)" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:28 msgid "available memory is 5GB" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:29 msgid "4 exclusive CPU cores and 2 shared CPU cores" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:30 msgid "exclusive access to GPU power (100%)" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:32 msgid "" "Exceeding these memory limitations will cause allocation failures and the " "application will crash." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:35 msgid "Creating a signing certificate" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:37 msgid "" "This requires the ``MakeCert.exe`` and ``Pvk2Pfx.exe`` tools, which come " "with the Windows SDK. If you use Visual Studio, you can open one of its " "Developer Prompts, since it comes with these tools and they can be located " "in the path." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:41 msgid "" "You can get more detailed instructions from `Microsoft's documentation " "`__." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:44 msgid "First, run ``MakeCert`` to create a private key::" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:48 msgid "" "Where ``publisherName`` matches the Publisher Name of your package and " "``expirationDate`` is in the ``mm/dd/yyyy`` format." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:51 msgid "" "Next, create a Personal Information Exchange (.pfx) file using ``Pvk2Pfx." "exe``::" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:55 msgid "" "If you don't specify a password with ``/po`` argument, the PFX will have the " "same password as the private key." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:58 msgid "" "You will also need to trust this certificate in order to be able to install " "your app. Open the Command Prompt as Administrator and run the following " "command::" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:64 msgid "Signing the package" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:66 msgid "Finally, use ``SignTool.exe`` from the Windows SDK or Visual Studio::" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:71 msgid "Installing the package" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:73 msgid "" "As of the Windows 10 Anniversary Update, you are able to install packages " "simply by double clicking the ``.appx`` file from Windows Explorer." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:76 msgid "" "It's also possible to install by using the ``Add-AppxPackage`` PowerShell " "cmdlet." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_uwp.rst:78 msgid "" "If you want to update your already installed app, you must update the " "version number on the new package or first uninstall the previous package." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:4 msgid "Exporting for Android" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:6 msgid "" "Exporting for Android has fewer requirements than compiling Godot for it. " "The following steps detail what is needed to setup the SDK and the engine." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:10 msgid "Download the Android SDK" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:12 msgid "" "Download and install the Android SDK from https://developer.android.com/" "studio/" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:17 msgid "Install OpenJDK or Oracle JDK" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:18 msgid "" "Download and install `OpenJDK `__ " "or `Oracle JDK `__. Versions below JDK 8 may not work, some users have reported " "issues with the jarsigner (used to sign the APKs) in JDK 7." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:21 msgid "Create a debug.keystore" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:23 msgid "" "Android needs a debug keystore file to install to devices and distribute non-" "release APKs. If you have used the SDK before and have built projects, ant " "or eclipse probably generated one for you (on Linux and macOS, you can find " "it in the ``~/.android`` directory)." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:28 msgid "" "If you can't find it or need to generate one, the keytool command from the " "JDK can be used for this purpose:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:36 msgid "Make sure you have adb" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:38 msgid "" "Android Debug Bridge (adb) is the command line tool used to communicate with " "Android devices. It's installed with the SDK, but you may need to install " "one (any) of the Android API levels for it to be installed in the SDK " "directory." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:43 msgid "Setting it up in Godot" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:45 msgid "" "Enter the Editor Settings screen. This screens contains the editor settings " "for the user account in the computer (It's independent from the project)." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:51 msgid "Scroll down to the section where the Android settings are located:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:55 msgid "In that screen, the path to 3 files needs to be set:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:57 msgid "The *adb* executable (adb.exe on Windows)" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:58 msgid "The *jarsigner* executable (from JDK 6 or 8)" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:59 msgid "The debug *keystore*" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_android.rst:61 msgid "Once that is configured, everything is ready to export to Android!" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:4 msgid "Exporting for the Web" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:6 msgid "" "HTML5 export allows publishing games made in Godot Engine to the browser. " "This requires support for the recent technologies `WebAssembly `__ and `WebGL 2.0 `__ in " "the user's browser. **Firefox** and **Chromium** (Chrome, Opera) are the " "most popular supported browsers, **Safari** and **Edge** do not work yet. On " "**iOS**, all browsers must be based on WebKit (i.e. Safari), so they will " "also not work." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:15 msgid "Limitations" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:17 msgid "" "For security and privacy reasons, many features that work effortlessly on " "native platforms are more complicated on the web platform. Following is a " "list of limitations you should be aware of when porting a Godot game to the " "web." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:22 msgid "Exported ``.html`` file must not be reused" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:24 msgid "" "On export, several text placeholders are replaced in the **generated HTML " "file** specifically for the given export options. It must not be reused in " "further exports." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:29 msgid "Using cookies for data persistence" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:31 msgid "" "Users must **allow cookies** (specifically IndexedDB) if persistence of the " "``user://`` file system is desired. When playing a game presented in an " "``iframe``, **third-party** cookies must also be enabled. Incognito/private " "browsing mode also prevents persistence." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:36 msgid "" "The method ``OS.is_userfs_persistent()`` can be used to check if the " "``user://`` file system is persistent, but can give false positives in some " "cases." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:41 msgid "Full screen and mouse capture" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:43 msgid "" "Browsers do not allow arbitrarily **entering full screen** at any time. The " "same goes for **capturing the cursor**. Instead, these actions have to occur " "as a response to a JavaScript input event. In Godot, this is most easily " "done by entering full screen from within an input callback such as " "``_input`` or ``_unhandled_input``." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:49 msgid "For the same reason, the full screen project setting is ignored." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:52 msgid "HTTPClient" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:54 msgid "" "The ``HTTPClient`` implementation for the HTML5 platform has several " "restrictions:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:57 msgid "Accessing or changing the ``StreamPeer`` is not possible" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:58 msgid "Blocking mode is not available" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:59 msgid "" "Cannot progress more than once per frame, so polling in a loop will freeze" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:60 msgid "No chunked responses" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:61 msgid "Host verification cannot be disabled" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:62 msgid "" "Subject to `same-origin policy `_" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:65 msgid "Unimplemented functionality" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:67 msgid "" "The following functionality is currently unavailable on the HTML5 platform:" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:69 msgid "Threads" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:70 #: ../../docs/tutorials/plugins/gdnative/index.rst:2 msgid "GDNative" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:71 msgid "Clipboard synchronisation between engine and operating system" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:72 msgid "Networking other than ``HTTPClient``" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:74 msgid "" "Check the `list of open HTML5 issues on Github `_ to see " "if functionality you're interested in has an issue yet. If not, open one to " "communicate your interest." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:79 msgid "Starting exported games from the local file system" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:81 msgid "" "Many browsers, Chromium-based browsers specifically, will not load exported " "projects when **opened locally** per ``file://`` protocol. To get around " "this, use a local server." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:85 msgid "" "Python offers an easy method for this, using ``python -m SimpleHTTPServer`` " "with Python 2 or ``python -m http.server`` with Python 3 will serve the " "current working directory on ``http://localhost:8000``." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:90 msgid "Serving the files" msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:92 msgid "" "Exporting for the web generates several files to be served from a web " "server, including a default HTML page for presentation. A custom HTML file " "can be used, see :ref:`doc_customizing_html5_shell`." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:96 msgid "" "The generated ``.html`` file can be used as ``DirectoryIndex`` in Apache " "servers and can be renamed to e.g. ``index.html`` at any time, its name is " "never depended on by default." msgstr "" #: ../../docs/getting_started/workflow/export/exporting_for_web.rst:100 msgid "" "The HTML page is designed to fit the game perfectly without cutting off " "parts of the canvas when the browser window is scaled to the game's " "dimensions. This way it can be inserted into an ``